IwojIENvcHlyaWdodCAoYykgMjAwMCwgR2HrbCBSb3VhbGxhbmQgPGdhZWwucm91YWxsYW5kQGluYW1lLmNvbT4KIyBBbGwgcmlnaHRzIHJlc2VydmVkLgojCiMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiMgYXJlIG1ldDoKIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAojICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAojICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgojIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwojICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgojCiMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKIyBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCiMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KIyBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCiMgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCiMgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAojIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQojIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgojCiMgICAgICAkSWQ6IHN5c2NhbGxzLmNhdCx2IDEuMSAyMDAwLzA5LzAxIDIxOjAzOjA2IHdpY2hlcnQgRXhwICQKIwojIFN5c2NhbGxzIGNhdGVnb3JpZXMKIyBzeW50YXg6IHN5c2NhbGwgY2F0bWFzawojCiMgbW9zdGx5IGJ1aWx0IGZyb20gb3RoZXIgYXJjaHMvb3Mgc3lzY2FsbGVudC5oCgojIGZpbGUgY2FsbHMKYWNjZXNzCVRGCmFjY3QJVEYKYWNsCVRGCmNoZGlyCVRGCmNobW9kCVRGCmNob3duCVRGCmNocm9vdAlURgpjcmVhdAlURgpjbG9zZSAJVEYKY2hmbGFncwlURgpmc3RhdDY0CVRGCmZzdGF0CVRGCmZjaGRpcglURgpmY2hmbGFncwlURgpsY2hvd24JVEYKbGluawlURgpsc3RhdAlURgpsc3RhdDY0CVRGCmx4c3RhdAlURgpta2RpcglURgpta25vZAlURgptb3VudAlURgpvbGRsc3RhdAlURgpvbGRzdGF0CVRGCm9sZHVtb3VudAlURgpvcGVuCVRGCm91dGltZQlURgpwYXRoY29uZglURgpwcmVhZAlURgpwd3JpdGUJVEYKcmVhZGxpbmsJVEYKcmVuYW1lCVRGCnJtZGlyCVRGCnNlbmRmaWxlCVRGCnN0YXQJVEYKc3RhdDY0CVRGCnN0YXRmcwlURgpzdGF0dmZzCVRGCnN3YXBvbglURgpzeW1saW5rCVRGCnRydW5jYXRlCVRGCnVtb3VudAlURgp1bmxpbmsJVEYKdW5tb3VudAlURgp1c2VsaWIJVEYKdXRpbWUJVEYKdXRpbWVzCVRGCnhta25vZAlURgp4c3RhdAlURgoKIyBmaWxlL3Byb2Nlc3MgY2FsbHMKZXhlYwlURnxUUApleGVjdglURnxUUApleGVjdmUJVEZ8VFAKCiMgSVBDIGNhbGxzCm1zZ2N0bAlUSQptc2dnZXQJVEkKbXNncmN2CVRJCm1zZ3NuZAlUSQptc2dzeXMJVEkKc2VtY3RsCVRJCnNlbWdldAlUSQpzZW1vcAlUSQpzZW1zeXMJVEkKc2htYXQJVEkKc2htY3RsCVRJCnNobWR0CVRJCnNobWdldAlUSQpzaG1zeXMJVEkKCiMgbmV0d29yayBjYWxscwphY2NlcHQJVE4KYmluZAlUTgpjb25uZWN0CVROCmdldG1zZwlUTgpnZXRwZWVybmFtZQlUTgpnZXRwbXNnCVROCmdldHNvY2tuYW1lCVROCmdldHNvY2tvcHQJVE4KbGlzdGVuCVROCnBvbGwJVE4KcHV0bXNnCVROCnB1dHBtc2cJVE4KcmVjdglUTgpyZWN2ZnJvbQlUTgpyZWN2bXNnCVROCnNlbmQJVE4Kc2VuZG1zZwlUTgpzZW5kdG8JVE4Kc2V0c29ja29wdAlUTgpzaHV0ZG93bglUTgpzb2NrZXQJVE4Kc29ja2V0cGFpcglUTgoKIyBwcm9jZXNzIGNhbGxzCl9leGl0CVRQCmNsb25lCVRQCmZvcmsJVFAKZm9yazEJVFAKb3dhaXQJVFAKb3dhaXQzCVRQCnZmb3JrCVRQCndhaXQJVFAKd2FpdDQJVFAKd2FpdGlkCVRQCndhaXRwaWQJVFAKd2FpdHN5cwlUUAoKIyBzaWduYWwgY2FsbHMKa2lsbAlUUwpraWxscGcJVFMKa3NpZ3F1ZXVlCVRTCnBhdXNlCVRTCnJ0X3NpZ2FjdGlvbglUUwpydF9zaWdwZW5kaW5nCVRTCnJ0X3NpZ3Byb2NtYXNrCVRTCnJ0X3NpZ3F1ZXVlaW5mbwlUUwpydF9zaWdyZXR1cm4JVFMKcnRfc2lnc3VzcGVuZAlUUwpydF9zaWd0aW1lZHdhaXQJVFMKc2lnYWN0aW9uCVRTCnNpZ2FsdHN0YWNrCVRTCnNpZ2Jsb2NrCVRTCnNpZ2NsZWFudXAJVFMKc2lnZmlsbHNldAlUUwpzaWdnZXRtYXNrCVRTCnNpZ2hvbGQJVFMKc2lnaWdub3JlCVRTCnNpZ25hbAlUUwpzaWdwYXVzZQlUUwpzaWdwZW5kaW5nCVRTCnNpZ3BvbGwJVFMKc2lncHJvY21hc2sJVFMKc2lncmVsc2UJVFMKc2lncmV0dXJuCVRTCnNpZ3NlbmRzZXQJVFMKc2lnc2V0CVRTCnNpZ3NldG1hc2sJVFMKc2lnc3RhY2sJVFMKc2lnc3VzcGVuZAlUUwpzaWd0aW1lZHdhaXQJVFMKc2lndmVjCVRTCg==