IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBHTlUgTWFrZSBTdGFuZGFyZCBMaWJyYXJ5IChHTVNMKQojCiMgQSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBiZSB1c2VkIHdpdGggR05VIE1ha2UncyAkKGNhbGwpIHRoYXQKIyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IG5vdCBhdmFpbGFibGUgaW4gc3RhbmRhcmQgR05VIE1ha2UuCiMKIyBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNyBKb2huIEdyYWhhbS1DdW1taW5nCiMKIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTVNMCiMKIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKIyBhcmUgbWV0OgojCiMgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiMgCiMgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiMgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KIwojIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEpvaG4gR3JhaGFtLUN1bW1pbmcgbm9yIHRoZSBuYW1lcyBvZiBpdHMKIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQojIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiMKIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCiMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwojIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiMgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAojIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCiMgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwojIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgojIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQojIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgojCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIyBUaGlzIGlzIHRoZSBHTlUgTWFrZSBTdGFuZGFyZCBMaWJyYXJ5IHZlcnNpb24gbnVtYmVyIGFzIGEgbGlzdCB3aXRoCiMgdGhyZWUgaXRlbXM6IG1ham9yLCBtaW5vciwgcmV2aXNpb24KCmdtc2xfdmVyc2lvbiA6PSAxIDAgMTEKCiMgVXNlZCB0byBvdXRwdXQgd2FybmluZ3MgYW5kIGVycm9yIGZyb20gdGhlIGxpYnJhcnksIGl0J3MgcG9zc2libGUgdG8KIyBkaXNhYmxlIGFueSB3YXJuaW5ncyBvciBlcnJvcnMgYnkgb3ZlcnJpZGluZyB0aGVzZSBkZWZpbml0aW9ucwojIG1hbnVhbGx5IG9yIGJ5IHNldHRpbmcgR01TTF9OT19XQVJOSU5HUyBvciBHTVNMX05PX0VSUk9SUwoKX19nbXNsX25hbWUgOj0gR05VIE1ha2UgU3RhbmRhcmQgTGlicmFyeQpfX2dtc2xfd2FybmluZyA9ICQod2FybmluZyAkKF9fZ21zbF9uYW1lKTogJDEpCl9fZ21zbF9lcnJvciA9ICQoZXJyb3IgJChfX2dtc2xfbmFtZSk6ICQxKQoKaWZkZWYgR01TTF9OT19XQVJOSU5HUwpfX2dtc2xfd2FybmluZyA6PQplbmRpZgppZmRlZiBHTVNMX05PX0VSUk9SUwpfX2dtc2xfZXJyb3IgOj0KZW5kaWYKCiMgSWYgR01TTF9UUkFDRSBpcyBlbmFibGVkIHRoZW4gY2FsbHMgdG8gdGhlIGxpYnJhcnkgZnVuY3Rpb25zIGFyZQojIHRyYWNlZCB0byBzdGRvdXQgdXNpbmcgd2FybmluZyBtZXNzYWdlcyB3aXRoIHRoZWlyIGFyZ3VtZW50cwoKaWZkZWYgR01TTF9UUkFDRQpfX2dtc2xfdHIxID0gJCh3YXJuaW5nICQwKCckMScpKQpfX2dtc2xfdHIyID0gJCh3YXJuaW5nICQwKCckMScsJyQyJykpCl9fZ21zbF90cjMgPSAkKHdhcm5pbmcgJDAoJyQxJywnJDInLCckMycpKQplbHNlCl9fZ21zbF90cjEgOj0KX19nbXNsX3RyMiA6PQpfX2dtc2xfdHIzIDo9CmVuZGlmCgojIEZpZ3VyZSBvdXQgd2hldGhlciB3ZSBoYXZlICQoZXZhbCkgb3Igbm90IChHTlUgTWFrZSAzLjgwIGFuZCBhYm92ZSkKIyBpZiB3ZSBkbyBub3QgdGhlbiBvdXRwdXQgYSB3YXJuaW5nIG1lc3NhZ2UsIGlmIHdlIGRvIHRoZW4gc29tZQojIGZ1bmN0aW9ucyB3aWxsIGJlIGVuYWJsZWQuCgpfX2dtc2xfaGF2ZV9ldmFsIDo9ICQoZmFsc2UpCl9fZ21zbF9pZ25vcmUgOj0gJChldmFsIF9fZ21zbF9oYXZlX2V2YWwgOj0gJCh0cnVlKSkKCiMgSWYgdGhpcyBpcyBiZWluZyBydW4gd2l0aCBFbGVjdHJpYyBDbG91ZCdzIGVtYWtlIHRoZW4gd2FybiB0aGF0CiMgdGhlaXIgJChldmFsKSBzdXBwb3J0IGlzIGluY29tcGxldGUuCgppZmRlZiBFQ0xPVURfQlVJTERfSUQKJCh3YXJuaW5nIFlvdSBhcmUgdXNpbmcgRWxlY3RyaWMgQ2xvdWQncyBlbWFrZSB3aGljaCBoYXMgaW5jb21wbGV0ZSAkJChldmFsKSBzdXBwb3J0KQpfX2dtc2xfaGF2ZV9ldmFsIDo9ICQoZmFsc2UpCmVuZGlmCgojIFNlZSBpZiB3ZSBoYXZlICQobGFzdHdvcmQpIChHTlUgTWFrZSAzLjgxIGFuZCBhYm92ZSkKCl9fZ21zbF9oYXZlX2xhc3R3b3JkIDo9ICQobGFzdHdvcmQgJChmYWxzZSkgJCh0cnVlKSkKCiMgU2VlIGlmIHdlIGhhdmUgbmF0aXZlIG9yIGFuZCBhbmQgKEdOVSBNYWtlIDMuODEgYW5kIGFib3ZlKQoKX19nbXNsX2hhdmVfb3IgOj0gJChpZiAkKGZpbHRlci1vdXQgdW5kZWZpbmVkLCAgXAogICAgJChvcmlnaW4gb3IpKSwkKGNhbGwgb3IsJCh0cnVlKSwkKGZhbHNlKSkpCl9fZ21zbF9oYXZlX2FuZCA6PSAkKGlmICQoZmlsdGVyLW91dCB1bmRlZmluZWQsIFwKICAgICQob3JpZ2luIGFuZCkpLCQoY2FsbCBhbmQsJCh0cnVlKSwkKHRydWUpKSkKCmlmbmVxICgkKF9fZ21zbF9oYXZlX2V2YWwpLCQodHJ1ZSkpCiQoY2FsbCBfX2dtc2xfd2FybmluZyxHTlUgTWFrZSAkKE1BS0VfVkVSU0lPTikgZG9lcyBub3Qgc3VwcG9ydCAkJCQkKGV2YWwpOiBzb21lIGZ1bmN0aW9ucyBkaXNhYmxlZCkKZW5kaWYKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgZ21zbF9jb21wYXRpYmxlCiMgQXJndW1lbnRzOiBMaXN0IGNvbnRhaW5pbmcgdGhlIGRlc2lyZWQgbGlicmFyeSB2ZXJzaW9uIG51bWJlciAobWFqIG1pbiByZXYpCiMgUmV0dXJuczogICAkKHRydWUpIGlmIHRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBpcyBjb21wYXRpYmxlCiMgICAgICAgICAgICB3aXRoIHRoZSByZXF1ZXN0ZWQgdmVyc2lvbiBudW1iZXIsIG90aGVyd2lzZSAkKGZhbHNlKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZ21zbF9jb21wYXRpYmxlID0gJChzdHJpcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAkKGlmICQoY2FsbCBndCwkKHdvcmQgMSwkMSksJCh3b3JkIDEsJChnbXNsX3ZlcnNpb24pKSksICAgICAgICAgICAgICAgXAogICAgICAgICQoZmFsc2UpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAkKGlmICQoY2FsbCBsdCwkKHdvcmQgMSwkMSksJCh3b3JkIDEsJChnbXNsX3ZlcnNpb24pKSksICAgICAgICAgICBcCiAgICAgICAgICAgICQodHJ1ZSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAkKGlmICQoY2FsbCBndCwkKHdvcmQgMiwkMSksJCh3b3JkIDIsJChnbXNsX3ZlcnNpb24pKSksICAgICAgIFwKICAgICAgICAgICAgICAgICQoZmFsc2UpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAkKGlmICQoY2FsbCBsdCwkKHdvcmQgMiwkMSksJCh3b3JkIDIsJChnbXNsX3ZlcnNpb24pKSksICAgXAogICAgICAgICAgICAgICAgICAgICQodHJ1ZSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAkKGNhbGwgbHRlLCQod29yZCAzLCQxKSwkKHdvcmQgMywkKGdtc2xfdmVyc2lvbikpKSkpKSkpCgojICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIExPR0lDQUwgT1BFUkFUT1JTCiMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIG5vdCBpcyBkZWZpbmVkIGluIGdtc2wKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgYW5kCiMgQXJndW1lbnRzOiBUd28gYm9vbGVhbiB2YWx1ZXMKIyBSZXR1cm5zOiAgIFJldHVybnMgJCh0cnVlKSBpZiBib3RoIG9mIHRoZSBib29sZWFucyBhcmUgdHJ1ZQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KaWZuZXEgKCQoX19nbXNsX2hhdmVfYW5kKSwkKHRydWUpKQphbmQgPSAkKF9fZ21zbF90cjIpJChpZiAkMSwkKGlmICQyLCQodHJ1ZSksJChmYWxzZSkpLCQoZmFsc2UpKQplbmRpZgoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBvcgojIEFyZ3VtZW50czogVHdvIGJvb2xlYW4gdmFsdWVzCiMgUmV0dXJuczogICBSZXR1cm5zICQodHJ1ZSkgaWYgZWl0aGVyIG9mIHRoZSBib29sZWFucyBpcyB0cnVlCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQppZm5lcSAoJChfX2dtc2xfaGF2ZV9vciksJCh0cnVlKSkKb3IgPSAkKF9fZ21zbF90cjIpJChpZiAkMSQyLCQodHJ1ZSksJChmYWxzZSkpCmVuZGlmCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIHhvcgojIEFyZ3VtZW50czogVHdvIGJvb2xlYW4gdmFsdWVzCiMgUmV0dXJuczogICBSZXR1cm5zICQodHJ1ZSkgaWYgZXhhY3RseSBvbmUgb2YgdGhlIGJvb2xlYW5zIGlzIHRydWUKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnhvciA9ICQoX19nbXNsX3RyMikkKGlmICQxLCQoaWYgJDIsJChmYWxzZSksJCh0cnVlKSksJChpZiAkMiwkKHRydWUpLCQoZmFsc2UpKSkKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgbmFuZAojIEFyZ3VtZW50czogVHdvIGJvb2xlYW4gdmFsdWVzCiMgUmV0dXJuczogICBSZXR1cm5zIHZhbHVlIG9mICdub3QgYW5kJwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KbmFuZCA9ICQoX19nbXNsX3RyMikkKGlmICQxLCQoaWYgJDIsJChmYWxzZSksJCh0cnVlKSksJCh0cnVlKSkKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgbm9yCiMgQXJndW1lbnRzOiBUd28gYm9vbGVhbiB2YWx1ZXMKIyBSZXR1cm5zOiAgIFJldHVybnMgdmFsdWUgb2YgJ25vdCBvcicKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm5vciA9ICQoX19nbXNsX3RyMikkKGlmICQxJDIsJChmYWxzZSksJCh0cnVlKSkKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgeG5vcgojIEFyZ3VtZW50czogVHdvIGJvb2xlYW4gdmFsdWVzCiMgUmV0dXJuczogICBSZXR1cm5zIHZhbHVlIG9mICdub3QgeG9yJwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KeG5vciA9JChfX2dtc2xfdHIyKSQoaWYgJDEsJChpZiAkMiwkKHRydWUpLCQoZmFsc2UpKSwkKGlmICQyLCQoZmFsc2UpLCQodHJ1ZSkpKQoKIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBMSVNUIE1BTklQVUxBVElPTiBGVU5DVElPTlMKIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgZmlyc3QgKHNhbWUgYXMgTElTUCdzIGNhciwgb3IgaGVhZCkKIyBBcmd1bWVudHM6IDE6IEEgbGlzdAojIFJldHVybnM6ICAgUmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBvZiBhIGxpc3QKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmZpcnN0ID0gJChfX2dtc2xfdHIxKSQoZmlyc3R3b3JkICQxKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBsYXN0CiMgQXJndW1lbnRzOiAxOiBBIGxpc3QKIyBSZXR1cm5zOiAgIFJldHVybnMgdGhlIGxhc3QgZWxlbWVudCBvZiBhIGxpc3QKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmlmZXEgKCQoX19nbXNsX2hhdmVfbGFzdHdvcmQpLCQodHJ1ZSkpCmxhc3QgPSAkKF9fZ21zbF90cjEpJChsYXN0d29yZCAkMSkKZWxzZQpsYXN0ID0gJChfX2dtc2xfdHIxKSQoaWYgJDEsJCh3b3JkICQod29yZHMgJDEpLCQxKSkKZW5kaWYKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgcmVzdCAoc2FtZSBhcyBMSVNQJ3MgY2RyLCBvciB0YWlsKQojIEFyZ3VtZW50czogMTogQSBsaXN0CiMgUmV0dXJuczogICBSZXR1cm5zIHRoZSBsaXN0IHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgcmVtb3ZlZAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcmVzdCA9ICQoX19nbXNsX3RyMSkkKHdvcmRsaXN0IDIsJCh3b3JkcyAkMSksJDEpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIGNob3AKIyBBcmd1bWVudHM6IDE6IEEgbGlzdAojIFJldHVybnM6ICAgUmV0dXJucyB0aGUgbGlzdCB3aXRoIHRoZSBsYXN0IGVsZW1lbnQgcmVtb3ZlZAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KY2hvcCA9ICQoX19nbXNsX3RyMSkkKHdvcmRsaXN0IDIsJCh3b3JkcyAkMSkseCAkMSkKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgbWFwCiMgQXJndW1lbnRzOiAxOiBOYW1lIG9mIGZ1bmN0aW9uIHRvICQoY2FsbCkgZm9yIGVhY2ggZWxlbWVudCBvZiBsaXN0CiMgICAgICAgICAgICAyOiBMaXN0IHRvIGl0ZXJhdGUgb3ZlciBjYWxsaW5nIHRoZSBmdW5jdGlvbiBpbiAxCiMgUmV0dXJuczogICBUaGUgbGlzdCBhZnRlciBjYWxsaW5nIHRoZSBmdW5jdGlvbiBvbiBlYWNoIGVsZW1lbnQKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCm1hcCA9ICQoX19nbXNsX3RyMikkKHN0cmlwICQoZm9yZWFjaCBhLCQyLCQoY2FsbCAkMSwkYSkpKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBwYWlybWFwCiMgQXJndW1lbnRzOiAxOiBOYW1lIG9mIGZ1bmN0aW9uIHRvICQoY2FsbCkgZm9yIGVhY2ggcGFpciBvZiBlbGVtZW50cwojICAgICAgICAgICAgMjogTGlzdCB0byBpdGVyYXRlIG92ZXIgY2FsbGluZyB0aGUgZnVuY3Rpb24gaW4gMQojICAgICAgICAgICAgMzogU2Vjb25kIGxpc3QgdG8gaXRlcmF0ZSBvdmVyIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGluIDEKIyBSZXR1cm5zOiAgIFRoZSBsaXN0IGFmdGVyIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIG9uIGVhY2ggcGFpciBvZiBlbGVtZW50cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcGFpcm1hcCA9ICQoc3RyaXAgJChfX2dtc2xfdHIzKVwKICAgICAgICAgICQoaWYgJDIkMywkKGNhbGwgJDEsJChjYWxsIGZpcnN0LCQyKSwkKGNhbGwgZmlyc3QsJDMpKSAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAkKGNhbGwgcGFpcm1hcCwkMSwkKGNhbGwgcmVzdCwkMiksJChjYWxsIHJlc3QsJDMpKSkpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIGxlcQojIEFyZ3VtZW50czogMTogQSBsaXN0IHRvIGNvbXBhcmUgYWdhaW5zdC4uLgojICAgICAgICAgICAgMjogLi4udGhpcyBsaXN0CiMgUmV0dXJuczogICBSZXR1cm5zICQodHJ1ZSkgaWYgdGhlIHR3byBsaXN0cyBhcmUgaWRlbnRpY2FsCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpsZXEgPSAkKF9fZ21zbF90cjIpJChzdHJpcCAkKGlmICQoY2FsbCBzZXEsJCh3b3JkcyAkMSksJCh3b3JkcyAkMikpLCAgICAgXAogICAgICAgICAgJChjYWxsIF9fZ21zbF9saXN0X2VxdWFsLCQxLCQyKSwkKGZhbHNlKSkpCgpfX2dtc2xfbGlzdF9lcXVhbCA9ICQoaWYgJChzdHJpcCAkMSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAkKGlmICQoY2FsbCBzZXEsJChjYWxsIGZpcnN0LCQxKSwkKGNhbGwgZmlyc3QsJDIpKSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJChjYWxsIF9fZ21zbF9saXN0X2VxdWFsLCAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoY2FsbCByZXN0LCQxKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoY2FsbCByZXN0LCQyKSksICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJChmYWxzZSkpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAkKHRydWUpKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBsbmUKIyBBcmd1bWVudHM6IDE6IEEgbGlzdCB0byBjb21wYXJlIGFnYWluc3QuLi4KIyAgICAgICAgICAgIDI6IC4uLnRoaXMgbGlzdAojIFJldHVybnM6ICAgUmV0dXJucyAkKHRydWUpIGlmIHRoZSB0d28gbGlzdHMgYXJlIGRpZmZlcmVudAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KbG5lID0gJChfX2dtc2xfdHIyKSQoY2FsbCBub3QsJChjYWxsIGxlcSwkMSwkMikpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIHJldmVyc2UKIyBBcmd1bWVudHM6IDE6IEEgbGlzdCB0byByZXZlcnNlCiMgUmV0dXJuczogICBUaGUgbGlzdCB3aXRoIGl0cyBlbGVtZW50cyBpbiByZXZlcnNlIG9yZGVyCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpyZXZlcnNlID0kKF9fZ21zbF90cjEpJChzdHJpcCAkKGlmICQxLCQoY2FsbCByZXZlcnNlLCQoY2FsbCByZXN0LCQxKSkgXAogICAgICAgICAgICAgICAgICAgICAgICAkKGNhbGwgZmlyc3QsJDEpKSkKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgdW5pcQojIEFyZ3VtZW50czogMTogQSBsaXN0IGZyb20gd2hpY2ggdG8gcmVtb3ZlIHJlcGVhdGVkIGVsZW1lbnRzCiMgUmV0dXJuczogICBUaGUgbGlzdCB3aXRoIGR1cGxpY2F0ZSBlbGVtZW50cyByZW1vdmVkIHdpdGhvdXQgcmVvcmRlcmluZwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KdW5pcSA9ICQoc3RyaXAgJChfX2dtc2xfdHIxKSQoaWYgJDEsJChjYWxsIHVuaXEsJChjYWxsIGNob3AsJDEpKSBcCiAgICAgICAgICAgICQoaWYgJChmaWx0ZXIgJChjYWxsIGxhc3QsJDEpLCQoY2FsbCBjaG9wLCQxKSksLCQoY2FsbCBsYXN0LCQxKSkpKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBsZW5ndGgKIyBBcmd1bWVudHM6IDE6IEEgbGlzdAojIFJldHVybnM6ICAgVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KbGVuZ3RoID0gJChfX2dtc2xfdHIxKSQod29yZHMgJDEpCgojICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIFNUUklORyBNQU5JUFVMQVRJT04gRlVOQ1RJT05TCiMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIEhlbHBlciBmdW5jdGlvbiB0aGF0IHRyYW5zbGF0ZXMgYW55IEdOVSBNYWtlICd0cnVlJyB2YWx1ZSAoaS5lLiBhCiMgbm9uLWVtcHR5IHN0cmluZykgdG8gb3VyICQodHJ1ZSkKCl9fZ21zbF9tYWtlX2Jvb2wgPSAkKGlmICQoc3RyaXAgJDEpLCQodHJ1ZSksJChmYWxzZSkpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIHNlcQojIEFyZ3VtZW50czogMTogQSBzdHJpbmcgdG8gY29tcGFyZSBhZ2FpbnN0Li4uCiMgICAgICAgICAgICAyOiAuLi50aGlzIHN0cmluZwojIFJldHVybnM6ICAgUmV0dXJucyAkKHRydWUpIGlmIHRoZSB0d28gc3RyaW5ncyBhcmUgaWRlbnRpY2FsCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzZXEgPSAkKF9fZ21zbF90cjIpJChpZiAkKGZpbHRlci1vdXQgeHgseCQoc3Vic3QgJDEsLCQyKSQoc3Vic3QgJDIsLCQxKXgpLCQoZmFsc2UpLCQodHJ1ZSkpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIHNuZQojIEFyZ3VtZW50czogMTogQSBzdHJpbmcgdG8gY29tcGFyZSBhZ2FpbnN0Li4uCiMgICAgICAgICAgICAyOiAuLi50aGlzIHN0cmluZwojIFJldHVybnM6ICAgUmV0dXJucyAkKHRydWUpIGlmIHRoZSB0d28gc3RyaW5ncyBhcmUgbm90IHRoZSBzYW1lCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzbmUgPSAkKF9fZ21zbF90cjIpJChjYWxsIG5vdCwkKGNhbGwgc2VxLCQxLCQyKSkKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgc3BsaXQKIyBBcmd1bWVudHM6IDE6IFRoZSBjaGFyYWN0ZXIgdG8gc3BsaXQgb24KIyAgICAgICAgICAgIDI6IEEgc3RyaW5nIHRvIHNwbGl0CiMgUmV0dXJuczogICBTcGxpdHMgYSBzdHJpbmcgaW50byBhIGxpc3Qgc2VwYXJhdGVkIGJ5IHNwYWNlcyBhdCB0aGUgc3BsaXQKIyAgICAgICAgICAgIGNoYXJhY3RlciBpbiB0aGUgZmlyc3QgYXJndW1lbnQKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnNwbGl0ID0gJChfX2dtc2xfdHIyKSQoc3RyaXAgJChzdWJzdCAkMSwgLCQyKSkKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgbWVyZ2UKIyBBcmd1bWVudHM6IDE6IFRoZSBjaGFyYWN0ZXIgdG8gcHV0IGJldHdlZW4gZmllbGRzCiMgICAgICAgICAgICAyOiBBIGxpc3QgdG8gbWVyZ2UgaW50byBhIHN0cmluZwojIFJldHVybnM6ICAgTWVyZ2VzIGEgbGlzdCBpbnRvIGEgc2luZ2xlIHN0cmluZywgbGlzdCBlbGVtZW50cyBhcmUgc2VwYXJhdGVkCiMgICAgICAgICAgICBieSB0aGUgY2hhcmFjdGVyIGluIHRoZSBmaXJzdCBhcmd1bWVudAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KbWVyZ2UgPSAkKF9fZ21zbF90cjIpJChzdHJpcCAkKGlmICQyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICQoaWYgJChjYWxsIHNlcSwxLCQod29yZHMgJDIpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgJDIsJChjYWxsIGZpcnN0LCQyKSQxJChjYWxsIG1lcmdlLCQxLCQoY2FsbCByZXN0LCQyKSkpKSkKCmlmZGVmIF9fZ21zbF9oYXZlX2V2YWwKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICB0cgojIEFyZ3VtZW50czogMTogVGhlIGxpc3Qgb2YgY2hhcmFjdGVycyB0byB0cmFuc2xhdGUgZnJvbSAKIyAgICAgICAgICAgIDI6IFRoZSBsaXN0IG9mIGNoYXJhY3RlcnMgdG8gdHJhbnNsYXRlIHRvCiMgICAgICAgICAgICAzOiBUaGUgdGV4dCB0byB0cmFuc2xhdGUKIyBSZXR1cm5zOiAgIFJldHVybnMgdGhlIHRleHQgYWZ0ZXIgdHJhbnNsYXRpbmcgY2hhcmFjdGVycwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KdHIgPSAkKHN0cmlwICQoX19nbXNsX3RyMykkKGNhbGwgYXNzZXJ0X25vX2RvbGxhciwkMCwkMSQyJDMpICAgICAgICAgICAgICBcCiAgICAgJChldmFsIF9fZ21zbF90IDo9ICQzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICQoZm9yZWFjaCBjLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgJChqb2luICQoYWRkc3VmZml4IDosJDEpLCQyKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICQoZXZhbCBfX2dtc2xfdCA6PSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgJChzdWJzdCAkKHdvcmQgMSwkKHN1YnN0IDosICwkYykpLCQod29yZCAyLCQoc3Vic3QgOiwgLCRjKSksIFwKICAgICAgICAgICAgICAgICAkKF9fZ21zbF90KSkpKSQoX19nbXNsX3QpKQoKIyBDb21tb24gY2hhcmFjdGVyIGNsYXNzZXMgZm9yIHVzZSB3aXRoIHRoZSB0ciBmdW5jdGlvbi4gIEVhY2ggb2YKIyB0aGVzZSBpcyBhY3R1YWxseSBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGFuZCBtdXN0IGJlIHdyYXBwZWQgd2l0aAojICQoKSBvciAke30gdG8gYmUgdXNlZC4KCltBLVpdIDo9IEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiAjClthLXpdIDo9IGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiAjClswLTldIDo9IDAgMSAyIDMgNCA1IDYgNyA4IDkgIwpbQS1GXSA6PSBBIEIgQyBEIEUgRiAjCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIHVjCiMgQXJndW1lbnRzOiAxOiBUZXh0IHRvIHVwcGVyIGNhc2UKIyBSZXR1cm5zOiAgIFJldHVybnMgdGhlIHRleHQgaW4gdXBwZXIgY2FzZQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KdWMgPSAkKF9fZ21zbF90cjEpJChjYWxsIGFzc2VydF9ub19kb2xsYXIsJDAsJDEpJChjYWxsIHRyLCQoW2Etel0pLCQoW0EtWl0pLCQxKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBsYwojIEFyZ3VtZW50czogMTogVGV4dCB0byBsb3dlciBjYXNlCiMgUmV0dXJuczogICBSZXR1cm5zIHRoZSB0ZXh0IGluIGxvd2VyIGNhc2UKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmxjID0gJChfX2dtc2xfdHIxKSQoY2FsbCBhc3NlcnRfbm9fZG9sbGFyLCQwLCQxKSQoY2FsbCB0ciwkKFtBLVpdKSwkKFthLXpdKSwkMSkKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgc3RybGVuCiMgQXJndW1lbnRzOiAxOiBBIHN0cmluZwojIFJldHVybnM6ICAgUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCl9fZ21zbF9jaGFyYWN0ZXJzIDo9IEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWgpfX2dtc2xfY2hhcmFjdGVycyArPSBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHoKX19nbXNsX2NoYXJhY3RlcnMgKz0gMCAxIDIgMyA0IDUgNiA3IDggOQpfX2dtc2xfY2hhcmFjdGVycyArPSBgIH4gISBAIFwjICQkICUgXiAmICogKCApIC0gXyA9ICsKX19nbXNsX2NoYXJhY3RlcnMgKz0geyB9IFsgXSBcIDogOyAnICIgPCA+ICwgLiAvID8gfAoKIyBBc2lkZTogaWYgeW91IHJlYWQgdGhlIGFib3ZlIHlvdSBtaWdodCB0aGluayB0aGF0IHRoZSBsb3dlci1jYXNlCiMgbGV0dGVyIHggaXMgbWlzc2luZywgYW5kIHRoYXQgdGhhdCdzIGFuIGVycm9yLiAgSXQgaXMgbWlzc2luZywgYnV0CiMgaXQncyBub3QgYW4gZXJyb3IuICBfX2dtc2xfY2hhcmFjdGVycyBpcyB1c2VkIGJ5IHRoZSBzdHJsZW4KIyBmdW5jdGlvbi4gIHN0cmxlbiB3b3JrcyBieSB0cmFuc2Zvcm1pbmcgZXZlcnkgY2hhcmFjdGVyIGFuZCBzcGFjZQojIGludG8gdGhlIGxldHRlciB4IGFuZCB0aGVuIGNvdW50aW5nIHRoZSB4J3MuICBTaW5jZSB0aGVyZSdzIG5vIG5lZWQKIyB0byB0cmFuc2Zvcm0geCBpbnRvIHggSSBvbWl0dGVkIGl0LgoKIyBUaGlzIHJlc3VsdHMgaW4gX19nbXNsX3NwYWNlIGNvbnRhaW5pbmcganVzdCBhIHNwYWNlCgpfX2dtc2xfc3BhY2UgOj0gCl9fZ21zbF9zcGFjZSArPQoKc3RybGVuID0gJChfX2dtc2xfdHIxKSQoY2FsbCBhc3NlcnRfbm9fZG9sbGFyLCQwLCQxKSQoc3RyaXAgJChldmFsIF9fdGVtcCA6PSAkKHN1YnN0ICQoX19nbXNsX3NwYWNlKSx4LCQxKSkkKGZvcmVhY2ggYSwkKF9fZ21zbF9jaGFyYWN0ZXJzKSwkKGV2YWwgX190ZW1wIDo9ICQkKHN1YnN0ICQkYSx4LCQoX190ZW1wKSkpKSQoZXZhbCBfX3RlbXAgOj0gJChzdWJzdCB4LHggLCQoX190ZW1wKSkpJCh3b3JkcyAkKF9fdGVtcCkpKQoKIyBUaGlzIHJlc3VsdHMgaW4gX19nbXNsX25ld2xpbmUgY29udGFpbmluZyBqdXN0IGEgbmV3bGluZQoKZGVmaW5lIF9fZ21zbF9uZXdsaW5lCgoKZW5kZWYKCiMgVGhpcyByZXN1bHRzIGluIF9fZ21zbF90YWIgY29udGFpbmluZyBhIHRhYgoKX19nbXNsX3RhYiA6PQkjCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIHN1YnN0cgojIEFyZ3VtZW50czogMTogQSBzdHJpbmcKIyAJICAgICAyOiBTdGFydCBwb3NpdGlvbiAoZmlyc3QgY2hhcmFjdGVyIGlzIDEpCiMJICAgICAzOiBFbmQgcG9zaXRpb24gKGluY2x1c2l2ZSkKIyBSZXR1cm5zOiAgIEEgc3Vic3RyaW5nLiAgCiMgTm90ZTogICAgICBUaGUgc3RyaW5nIGluICQxIG11c3Qgbm90IGNvbnRhaW4gYSCnCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKc3Vic3RyID0gJChfX2dtc2xfdHIzKSQoY2FsbCBhc3NlcnRfbm9fZG9sbGFyLCQwLCQxJDIkMykkKHN0cmlwICQoZXZhbCBfX3RlbXAgOj0gJCQoc3Vic3QgJCQoX19nbXNsX3NwYWNlKSynICwkJDEpKSQoZm9yZWFjaCBhLCQoX19nbXNsX2NoYXJhY3RlcnMpLCQoZXZhbCBfX3RlbXAgOj0gJCQoc3Vic3QgJCRhLCQkYSQkKF9fZ21zbF9zcGFjZSksJChfX3RlbXApKSkpJChldmFsIF9fdGVtcCA6PSAkKHdvcmRsaXN0ICQyLCQzLCQoX190ZW1wKSkpKSQoc3Vic3QgpywkKF9fZ21zbF9zcGFjZSksJChzdWJzdCAkKF9fZ21zbF9zcGFjZSksLCQoX190ZW1wKSkpCgplbmRpZiAjIF9fZ21zbF9oYXZlX2V2YWwKCiMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgU0VUIE1BTklQVUxBVElPTiBGVU5DVElPTlMKIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgU2V0cyBhcmUgcmVwcmVzZW50ZWQgYnkgc29ydGVkLCBkZWR1cGxpY2F0ZWQgbGlzdHMuICBUbyBjcmVhdGUgYSBzZXQKIyBmcm9tIGEgbGlzdCB1c2Ugc2V0X2NyZWF0ZSwgb3Igc3RhcnQgd2l0aCB0aGUgZW1wdHlfc2V0IGFuZAojIHNldF9pbnNlcnQgaW5kaXZpZHVhbCBlbGVtZW50cwoKIyBUaGlzIGlzIHRoZSBlbXB0eSBzZXQKZW1wdHlfc2V0IDo9IAoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBzZXRfY3JlYXRlCiMgQXJndW1lbnRzOiAxOiBBIGxpc3Qgb2Ygc2V0IGVsZW1lbnRzCiMgUmV0dXJuczogICBSZXR1cm5zIHRoZSBuZXdseSBjcmVhdGVkIHNldAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc2V0X2NyZWF0ZSA9ICQoX19nbXNsX3RyMSkkKHNvcnQgJDEpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIHNldF9pbnNlcnQKIyBBcmd1bWVudHM6IDE6IEEgc2luZ2xlIGVsZW1lbnQgdG8gYWRkIHRvIGEgc2V0CiMgICAgICAgICAgICAyOiBBIHNldAojIFJldHVybnM6ICAgUmV0dXJucyB0aGUgc2V0IHdpdGggdGhlIGVsZW1lbnQgYWRkZWQKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnNldF9pbnNlcnQgPSAkKF9fZ21zbF90cjIpJChzb3J0ICQxICQyKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBzZXRfcmVtb3ZlCiMgQXJndW1lbnRzOiAxOiBBIHNpbmdsZSBlbGVtZW50IHRvIHJlbW92ZSBmcm9tIGEgc2V0CiMgICAgICAgICAgICAyOiBBIHNldAojIFJldHVybnM6ICAgUmV0dXJucyB0aGUgc2V0IHdpdGggdGhlIGVsZW1lbnQgcmVtb3ZlZAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc2V0X3JlbW92ZSA9ICQoX19nbXNsX3RyMikkKGZpbHRlci1vdXQgJDEsJDIpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIHNldF9pc19tZW1iZXIKIyBBcmd1bWVudHM6IDE6IEEgc2luZ2xlIGVsZW1lbnQgCiMgICAgICAgICAgICAyOiBBIHNldAojIFJldHVybnM6ICAgUmV0dXJucyAkKHRydWUpIGlmIHRoZSBlbGVtZW50IGlzIGluIHRoZSBzZXQKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnNldF9pc19tZW1iZXIgPSAkKF9fZ21zbF90cjIpJChpZiAkKGZpbHRlciAkMSwkMiksJCh0cnVlKSwkKGZhbHNlKSkKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgc2V0X3VuaW9uCiMgQXJndW1lbnRzOiAxOiBBIHNldAojICAgICAgICAgICAgMjogQW5vdGhlciBzZXQKIyBSZXR1cm5zOiAgIFJldHVybnMgdGhlIHVuaW9uIG9mIHRoZSB0d28gc2V0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc2V0X3VuaW9uID0gJChfX2dtc2xfdHIyKSQoc29ydCAkMSAkMikKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgc2V0X2ludGVyc2VjdGlvbgojIEFyZ3VtZW50czogMTogQSBzZXQKIyAgICAgICAgICAgIDI6IEFub3RoZXIgc2V0CiMgUmV0dXJuczogICBSZXR1cm5zIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlIHR3byBzZXRzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzZXRfaW50ZXJzZWN0aW9uID0gJChfX2dtc2xfdHIyKSQoZmlsdGVyICQxLCQyKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBzZXRfaXNfc3Vic2V0CiMgQXJndW1lbnRzOiAxOiBBIHNldAojICAgICAgICAgICAgMjogQW5vdGhlciBzZXQKIyBSZXR1cm5zOiAgIFJldHVybnMgJCh0cnVlKSBpZiB0aGUgZmlyc3Qgc2V0IGlzIGEgc3Vic2V0IG9mIHRoZSBzZWNvbmQKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnNldF9pc19zdWJzZXQgPSAkKF9fZ21zbF90cjIpJChjYWxsIHNldF9lcXVhbCwkKGNhbGwgc2V0X2ludGVyc2VjdGlvbiwkMSwkMiksJDEpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIHNldF9lcXVhbAojIEFyZ3VtZW50czogMTogQSBzZXQKIyAgICAgICAgICAgIDI6IEFub3RoZXIgc2V0CiMgUmV0dXJuczogICBSZXR1cm5zICQodHJ1ZSkgaWYgdGhlIHR3byBzZXRzIGFyZSBpZGVudGljYWwKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnNldF9lcXVhbCA9ICQoX19nbXNsX3RyMikkKGNhbGwgc2VxLCQxLCQyKQoKIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBBUklUSE1FVElDIExJQlJBUlkKIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgSW50ZWdlcnMgYSByZXByZXNlbnRlZCBieSBsaXN0cyB3aXRoIHRoZSBlcXVpdmFsZW50IG51bWJlciBvZiB4J3MuCiMgRm9yIGV4YW1wbGUgdGhlIG51bWJlciA0IGlzIHggeCB4IHguICBUaGUgbWF4aW11bSBpbnRlZ2VyIHRoYXQgdGhlCiMgbGlicmFyeSBjYW4gaGFuZGxlIGFzIF9pbnB1dF8gaXMgX19nbXNsX2lucHV0X2ludCB3aGljaCBpcyBkZWZpbmVkCiMgaGVyZSBhcyA2NTUzNgoKX19nbXNsX3NpeHRlZW4gOj0geCB4IHggeCB4IHggeCB4IHggeCB4IHggeCB4IHggeApfX2dtc2xfaW5wdXRfaW50IDo9ICQoZm9yZWFjaCBhLCQoX19nbXNsX3NpeHRlZW4pLCAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgJChmb3JlYWNoIGIsJChfX2dtc2xfc2l4dGVlbiksICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGZvcmVhY2ggYywkKF9fZ21zbF9zaXh0ZWVuKSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoX19nbXNsX3NpeHRlZW4pKSkpKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBpbnRfZGVjb2RlCiMgQXJndW1lbnRzOiAxOiBBIG51bWJlciBvZiB4J3MgcmVwcmVzZW50YXRpb24KIyBSZXR1cm5zOiAgIFJldHVybnMgdGhlIGludGVnZXIgZm9yIGh1bWFuIGNvbnN1bXB0aW9uIHRoYXQgaXMgcmVwcmVzZW50ZWQKIyAgICAgICAgICAgIGJ5IHRoZSBzdHJpbmcgb2YgeCdzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQppbnRfZGVjb2RlID0gJChfX2dtc2xfdHIxKSQod29yZHMgJDEpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIGludF9lbmNvZGUKIyBBcmd1bWVudHM6IDE6IEEgbnVtYmVyIGluIGh1bWFuLXJlYWRhYmxlIGludGVnZXIgZm9ybQojIFJldHVybnM6ICAgUmV0dXJucyB0aGUgaW50ZWdlciBlbmNvZGVkIGFzIGEgc3RyaW5nIG9mIHgncwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KaW50X2VuY29kZSA9ICQoX19nbXNsX3RyMSkkKHdvcmRsaXN0IDEsJDEsJChfX2dtc2xfaW5wdXRfaW50KSkKCiMgVGhlIGFyaXRobWV0aWMgbGlicmFyeSBmdW5jdGlvbnMgY29tZSBpbiB0d28gZm9ybXM6IG9uZSBmb3JtIG9mIGVhY2gKIyBmdW5jdGlvbiB0YWtlcyBpbnRlZ2VycyBhcyBhcmd1bWVudHMgYW5kIHRoZSBvdGhlciBmb3JtIHRha2VzIHRoZQojIGVuY29kZWQgZm9ybSAoeCdzIGNyZWF0ZWQgYnkgYSBjYWxsIHRvIGludF9lbmNvZGUpLiAgRm9yIGV4YW1wbGUsCiMgdGhlcmUgYXJlIHR3byBwbHVzIGZ1bmN0aW9uczoKIwojIHBsdXMgICAgICAgIENhbGxlZCB3aXRoIGludGVnZXIgYXJndW1lbnRzIGFuZCByZXR1cm5zIGFuIGludGVnZXIKIyBpbnRfcGx1cyAgICBDYWxsZWQgd2l0aCBlbmNvZGVkIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBhbiBlbmNvZGVkIHJlc3VsdAojCiMgcGx1cyB3aWxsIGJlIHNsb3dlciB0aGFuIGludF9wbHVzIGJlY2F1c2UgaXRzIGFyZ3VtZW50cyBhbmQgcmVzdWx0CiMgaGF2ZSB0byBiZSB0cmFuc2xhdGVkIGJldHdlZW4gdGhlIHgncyBmb3JtYXQgYW5kIGludGVnZXJzLiAgSWYgZG9pbmcKIyBhIGNvbXBsZXggY2FsY3VsYXRpb24gdXNlIHRoZSBpbnRfKiBmb3JtcyB3aXRoIGEgc2luZ2xlIGVuY29kaW5nIG9mCiMgaW5wdXRzIGFuZCBzaW5nbGUgZGVjb2Rpbmcgb2YgdGhlIG91dHB1dC4gIEZvciBzaW1wbGUgY2FsY3VsYXRpb25zCiMgdGhlIGRpcmVjdCBmb3JtcyBjYW4gYmUgdXNlZC4KCiMgSGVscGVyIGZ1bmN0aW9uIHVzZWQgdG8gd3JhcCBhbiBpbnRfKiBmdW5jdGlvbiBpbnRvIGEgZnVuY3Rpb24gdGhhdAojIHRha2VzIGEgcGFpciBvZiBpbnRlZ2VycywgcGVyaGFwcyBhIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGFuIGludGVnZXIKIyByZXN1bHQKX19nbXNsX2ludF93cmFwID0gJChjYWxsIGludF9kZWNvZGUsJChjYWxsICQxLCQoY2FsbCBpbnRfZW5jb2RlLCQyKSwkKGNhbGwgaW50X2VuY29kZSwkMykpKQpfX2dtc2xfaW50X3dyYXAxID0gJChjYWxsIGludF9kZWNvZGUsJChjYWxsICQxLCQoY2FsbCBpbnRfZW5jb2RlLCQyKSkpCl9fZ21zbF9pbnRfd3JhcDIgPSAkKGNhbGwgJDEsJChjYWxsIGludF9lbmNvZGUsJDIpLCQoY2FsbCBpbnRfZW5jb2RlLCQzKSkKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgaW50X3BsdXMKIyBBcmd1bWVudHM6IDE6IEEgbnVtYmVyIGluIHgncyByZXByZXNlbnRhdGlvbgojICAgICAgICAgICAgMjogQW5vdGhlciBudW1iZXIgaW4geCdzIHJlcHJlc250YXRpb24KIyBSZXR1cm5zOiAgIFJldHVybnMgdGhlIHN1bSBvZiB0aGUgdHdvIG51bWJlcnMgaW4geCdzIHJlcHJlc2VudGF0aW9uCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQppbnRfcGx1cyA9ICQoc3RyaXAgJChfX2dtc2xfdHIyKSQxICQyKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBwbHVzICh3cmFwcGVkIHZlcnNpb24gb2YgaW50X3BsdXMpCiMgQXJndW1lbnRzOiAxOiBBbiBpbnRlZ2VyCiMgICAgICAgICAgICAyOiBBbm90aGVyIGludGVnZXIKIyBSZXR1cm5zOiAgIFJldHVybnMgdGhlIHN1bSBvZiB0aGUgdHdvIGludGVnZXJzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpwbHVzID0gJChfX2dtc2xfdHIyKSQoY2FsbCBfX2dtc2xfaW50X3dyYXAsaW50X3BsdXMsJDEsJDIpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIGludF9zdWJ0cmFjdAojIEFyZ3VtZW50czogMTogQSBudW1iZXIgaW4geCdzIHJlcHJlc2VudGF0aW9uCiMgICAgICAgICAgICAyOiBBbm90aGVyIG51bWJlciBpbiB4J3MgcmVwcmVzbnRhdGlvbgojIFJldHVybnM6ICAgUmV0dXJucyB0aGUgZGlmZmVyZW5jZSBvZiB0aGUgdHdvIG51bWJlcnMgaW4geCdzIHJlcHJlc2VudGF0aW9uLAojICAgICAgICAgICAgb3Igb3V0cHV0cyBhbiBlcnJvciBvbiBhIG51bWVyaWMgdW5kZXJmbG93CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQppbnRfc3VidHJhY3QgPSAkKHN0cmlwICQoX19nbXNsX3RyMikkKGlmICQoY2FsbCBpbnRfZ3RlLCQxLCQyKSwgXAogICAgICAgICAgICAgICAgJChmaWx0ZXItb3V0IHh4LCQoam9pbiAkMSwkMikpLCAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgJChjYWxsIF9fZ21zbF93YXJuaW5nLFN1YnRyYWN0aW9uIHVuZGVyZmxvdykpKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBzdWJ0cmFjdCAod3JhcHBlZCB2ZXJzaW9uIG9mIGludF9zdWJ0cmFjdCkKIyBBcmd1bWVudHM6IDE6IEFuIGludGVnZXIKIyAgICAgICAgICAgIDI6IEFub3RoZXIgaW50ZWdlcgojIFJldHVybnM6ICAgUmV0dXJucyB0aGUgZGlmZmVyZW5jZSBvZiB0aGUgdHdvIGludGVnZXJzLAojICAgICAgICAgICAgb3Igb3V0cHV0cyBhbiBlcnJvciBvbiBhIG51bWVyaWMgdW5kZXJmbG93CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWJ0cmFjdCA9ICQoX19nbXNsX3RyMikkKGNhbGwgX19nbXNsX2ludF93cmFwLGludF9zdWJ0cmFjdCwkMSwkMikKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgaW50X211bHRpcGx5CiMgQXJndW1lbnRzOiAxOiBBIG51bWJlciBpbiB4J3MgcmVwcmVzZW50YXRpb24KIyAgICAgICAgICAgIDI6IEFub3RoZXIgbnVtYmVyIGluIHgncyByZXByZXNudGF0aW9uCiMgUmV0dXJuczogICBSZXR1cm5zIHRoZSBwcm9kdWN0IG9mIHRoZSB0d28gbnVtYmVycyBpbiB4J3MgcmVwcmVzZW50YXRpb24KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmludF9tdWx0aXBseSA9ICQoc3RyaXAgJChfX2dtc2xfdHIyKSQoZm9yZWFjaCBhLCQxLCQyKSkKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgbXVsdGlwbHkgKHdyYXBwZWQgdmVyc2lvbiBvZiBpbnRfbXVsdGlwbHkpCiMgQXJndW1lbnRzOiAxOiBBbiBpbnRlZ2VyCiMgICAgICAgICAgICAyOiBBbm90aGVyIGludGVnZXIKIyBSZXR1cm5zOiAgIFJldHVybnMgdGhlIHByb2R1Y3Qgb2YgdGhlIHR3byBpbnRlZ2VycwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KbXVsdGlwbHkgPSAkKF9fZ21zbF90cjIpJChjYWxsIF9fZ21zbF9pbnRfd3JhcCxpbnRfbXVsdGlwbHksJDEsJDIpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIGludF9kaXZpZGUKIyBBcmd1bWVudHM6IDE6IEEgbnVtYmVyIGluIHgncyByZXByZXNlbnRhdGlvbgojICAgICAgICAgICAgMjogQW5vdGhlciBudW1iZXIgaW4geCdzIHJlcHJlc250YXRpb24KIyBSZXR1cm5zOiAgIFJldHVybnMgdGhlIHJlc3VsdCBvZiBpbnRlZ2VyIGRpdmlzaW9uIG9mIGFyZ3VtZW50IDEgZGl2aWRlZAojICAgICAgICAgICAgYnkgYXJndW1lbnQgMiBpbiB4J3MgcmVwcmVzZW50YXRpb24KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmludF9kaXZpZGUgPSAkKF9fZ21zbF90cjIpJChzdHJpcCAkKGlmICQyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAkKGlmICQoY2FsbCBpbnRfZ3RlLCQxLCQyKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICB4ICQoY2FsbCBpbnRfZGl2aWRlLCQoY2FsbCBpbnRfc3VidHJhY3QsJDEsJDIpLCQyKSwpLCBcCiAgICAgICAgICAgICAgICAgJChjYWxsIF9fZ21zbF9lcnJvcixEaXZpc2lvbiBieSB6ZXJvKSkpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIGRpdmlkZSAod3JhcHBlZCB2ZXJzaW9uIG9mIGludF9kaXZpZGUpCiMgQXJndW1lbnRzOiAxOiBBbiBpbnRlZ2VyCiMgICAgICAgICAgICAyOiBBbm90aGVyIGludGVnZXIKIyBSZXR1cm5zOiAgIFJldHVybnMgdGhlIGludGVnZXIgZGl2aXNpb24gb2YgdGhlIGZpcnN0IGFyZ3VtZW50IGJ5IHRoZSBzZWNvbmQKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpdmlkZSA9ICQoX19nbXNsX3RyMikkKGNhbGwgX19nbXNsX2ludF93cmFwLGludF9kaXZpZGUsJDEsJDIpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIGludF9tYXgsIGludF9taW4KIyBBcmd1bWVudHM6IDE6IEEgbnVtYmVyIGluIHgncyByZXByZXNlbnRhdGlvbgojICAgICAgICAgICAgMjogQW5vdGhlciBudW1iZXIgaW4geCdzIHJlcHJlc250YXRpb24KIyBSZXR1cm5zOiAgIFJldHVybnMgdGhlIG1heGltdW0gb3IgbWluaW11bSBvZiBpdHMgYXJndW1lbnRzIGluIHgncwojICAgICAgICAgICAgcmVwcmVzZW50YXRpb24KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmludF9tYXggPSAkKF9fZ21zbF90cjIpJChzdWJzdCB4eCx4LCQoam9pbiAkMSwkMikpCmludF9taW4gPSAkKF9fZ21zbF90cjIpJChzdWJzdCB4eCx4LCQoZmlsdGVyIHh4LCQoam9pbiAkMSwkMikpKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBtYXgsIG1pbgojIEFyZ3VtZW50czogMTogQW4gaW50ZWdlcgojICAgICAgICAgICAgMjogQW5vdGhlciBpbnRlZ2VyCiMgUmV0dXJuczogICBSZXR1cm5zIHRoZSBtYXhpbXVtIG9yIG1pbmltdW0gb2YgaXRzIGludGVnZXIgYXJndW1lbnRzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQptYXggPSAkKF9fZ21zbF90cjIpJChjYWxsIF9fZ21zbF9pbnRfd3JhcCxpbnRfbWF4LCQxLCQyKQptaW4gPSAkKF9fZ21zbF90cjIpJChjYWxsIF9fZ21zbF9pbnRfd3JhcCxpbnRfbWluLCQxLCQyKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246IGludF9ndCwgaW50X2d0ZSwgaW50X2x0LCBpbnRfbHRlLCBpbnRfZXEsIGludF9uZQojIEFyZ3VtZW50czogVHdvIHgncyByZXByZXNlbnRhdGlvbiBudW1iZXJzIHRvIGJlIGNvbXBhcmVkCiMgUmV0dXJuczogICAkKHRydWUpIG9yICQoZmFsc2UpCiMKIyBpbnRfZ3QgICAgRmlyc3QgYXJndW1lbnQgZ3JlYXRlciB0aGFuIHNlY29uZCBhcmd1bWVudAojIGludF9ndGUgICBGaXJzdCBhcmd1bWVudCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gc2Vjb25kIGFyZ3VtZW50CiMgaW50X2x0ICAgIEZpcnN0IGFyZ3VtZW50IGxlc3MgdGhhbiBzZWNvbmQgYXJndW1lbnQgCiMgaW50X2x0ZSAgIEZpcnN0IGFyZ3VtZW50IGxlc3MgdGhhbiBvciBlcXVhbCB0byBzZWNvbmQgYXJndW1lbnQKIyBpbnRfZXEgICAgRmlyc3QgYXJndW1lbnQgaXMgbnVtZXJpY2FsbHkgZXF1YWwgdG8gdGhlIHNlY29uZCBhcmd1bWVudAojIGludF9uZSAgICBGaXJzdCBhcmd1bWVudCBpcyBub3QgbnVtZXJpY2FsbHkgZXF1YWwgdG8gdGhlIHNlY29uZCBhcmd1bWVudAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KaW50X2d0ID0gJChfX2dtc2xfdHIyKSQoY2FsbCBfX2dtc2xfbWFrZV9ib29sLCAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAkKGZpbHRlci1vdXQgJCh3b3JkcyAkMiksIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh3b3JkcyAkKGNhbGwgaW50X21heCwkMSwkMikpKSkKaW50X2d0ZSA9ICQoX19nbXNsX3RyMikkKGNhbGwgX19nbXNsX21ha2VfYm9vbCwgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJChjYWxsIGludF9ndCwkMSwkMikkKGNhbGwgaW50X2VxLCQxLCQyKSkKaW50X2x0ID0gJChfX2dtc2xfdHIyKSQoY2FsbCBfX2dtc2xfbWFrZV9ib29sLCAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAkKGZpbHRlci1vdXQgJCh3b3JkcyAkMSksIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh3b3JkcyAkKGNhbGwgaW50X21heCwkMSwkMikpKSkKaW50X2x0ZSA9ICQoX19nbXNsX3RyMikkKGNhbGwgX19nbXNsX21ha2VfYm9vbCwgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJChjYWxsIGludF9sdCwkMSwkMikkKGNhbGwgaW50X2VxLCQxLCQyKSkKaW50X2VxID0gJChfX2dtc2xfdHIyKSQoY2FsbCBfX2dtc2xfbWFrZV9ib29sLCAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAkKGZpbHRlciAkKHdvcmRzICQxKSwkKHdvcmRzICQyKSkpCmludF9uZSA9ICQoX19nbXNsX3RyMikkKGNhbGwgX19nbXNsX21ha2VfYm9vbCwgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgJChmaWx0ZXItb3V0ICQod29yZHMgJDEpLCQod29yZHMgJDIpKSkKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiBndCwgZ3RlLCBsdCwgbHRlLCBlcSwgbmUKIyBBcmd1bWVudHM6IFR3byBpbnRlZ2VycyB0byBiZSBjb21wYXJlZAojIFJldHVybnM6ICAgJCh0cnVlKSBvciAkKGZhbHNlKQojCiMgZ3QgICAgRmlyc3QgYXJndW1lbnQgZ3JlYXRlciB0aGFuIHNlY29uZCBhcmd1bWVudAojIGd0ZSAgIEZpcnN0IGFyZ3VtZW50IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBzZWNvbmQgYXJndW1lbnQKIyBsdCAgICBGaXJzdCBhcmd1bWVudCBsZXNzIHRoYW4gc2Vjb25kIGFyZ3VtZW50IAojIGx0ZSAgIEZpcnN0IGFyZ3VtZW50IGxlc3MgdGhhbiBvciBlcXVhbCB0byBzZWNvbmQgYXJndW1lbnQKIyBlcSAgICBGaXJzdCBhcmd1bWVudCBpcyBudW1lcmljYWxseSBlcXVhbCB0byB0aGUgc2Vjb25kIGFyZ3VtZW50CiMgbmUgICAgRmlyc3QgYXJndW1lbnQgaXMgbm90IG51bWVyaWNhbGx5IGVxdWFsIHRvIHRoZSBzZWNvbmQgYXJndW1lbnQKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmd0ID0gJChfX2dtc2xfdHIyKSQoY2FsbCBfX2dtc2xfaW50X3dyYXAyLGludF9ndCwkMSwkMikKZ3RlID0gJChfX2dtc2xfdHIyKSQoY2FsbCBfX2dtc2xfaW50X3dyYXAyLGludF9ndGUsJDEsJDIpCmx0ID0gJChfX2dtc2xfdHIyKSQoY2FsbCBfX2dtc2xfaW50X3dyYXAyLGludF9sdCwkMSwkMikKbHRlID0gJChfX2dtc2xfdHIyKSQoY2FsbCBfX2dtc2xfaW50X3dyYXAyLGludF9sdGUsJDEsJDIpCmVxID0gJChfX2dtc2xfdHIyKSQoY2FsbCBfX2dtc2xfaW50X3dyYXAyLGludF9lcSwkMSwkMikKbmUgPSAkKF9fZ21zbF90cjIpJChjYWxsIF9fZ21zbF9pbnRfd3JhcDIsaW50X25lLCQxLCQyKQoKIyBpbmNyZW1lbnQgYWRkcyAxIHRvIGl0cyBhcmd1bWVudCwgZGVjcmVtZW50IHN1YnRyYWN0cyAxLiAgTm90ZSB0aGF0CiMgZGVjcmVtZW50IGRvZXMgbm90IHJhbmdlIGNoZWNrIGFuZCBoZW5jZSB3aWxsIG5vdCB1bmRlcmZsb3csIGJ1dAojIHdpbGwgaW5jb3JyZWN0bHkgc2F5IHRoYXQgMCAtIDEgPSAwCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIGludF9pbmMKIyBBcmd1bWVudHM6IDE6IEEgbnVtYmVyIGluIHgncyByZXByZXNlbnRhdGlvbgojIFJldHVybnM6ICAgVGhlIG51bWJlciBpbmNyZW1lbnRlZCBieSAxIGluIHgncyByZXByZXNlbnRhdGlvbgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KaW50X2luYyA9ICQoc3RyaXAgJChfX2dtc2xfdHIxKSQxIHgpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIGluYwojIEFyZ3VtZW50czogMTogQW4gaW50ZWdlcgojIFJldHVybnM6ICAgVGhlIGFyZ3VtZW50IGluY3JlbWVudGVkIGJ5IDEKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmluYyA9ICQoX19nbXNsX3RyMSkkKGNhbGwgX19nbXNsX2ludF93cmFwMSxpbnRfaW5jLCQxKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBpbnRfZGVjCiMgQXJndW1lbnRzOiAxOiBBIG51bWJlciBpbiB4J3MgcmVwcmVzZW50YXRpb24KIyBSZXR1cm5zOiAgIFRoZSBudW1iZXIgZGVjcmVtZW50ZWQgYnkgMSBpbiB4J3MgcmVwcmVzZW50YXRpb24KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmludF9kZWMgPSAkKF9fZ21zbF90cjEpJChzdHJpcCAkKGlmICQoY2FsbCBzbmUsMCwkKHdvcmRzICQxKSksIFwKICAgICAgICAgICAgICAkKHdvcmRsaXN0IDIsJCh3b3JkcyAkMSksJDEpLCAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICQoY2FsbCBfX2dtc2xfd2FybmluZyxEZWNyZW1lbnQgdW5kZXJmbG93KSkpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIGRlYwojIEFyZ3VtZW50czogMTogQW4gaW50ZWdlcgojIFJldHVybnM6ICAgVGhlIGFyZ3VtZW50IGRlY3JlbWVudGVkIGJ5IDEKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRlYyA9ICQoX19nbXNsX3RyMSkkKGNhbGwgX19nbXNsX2ludF93cmFwMSxpbnRfZGVjLCQxKQoKIyBkb3VibGUgZG91YmxlcyBpdHMgYXJndW1lbnQsIGFuZCBoYWx2ZSBoYWx2ZXMgaXQKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgaW50X2RvdWJsZQojIEFyZ3VtZW50czogMTogQSBudW1iZXIgaW4geCdzIHJlcHJlc2VudGF0aW9uCiMgUmV0dXJuczogICBUaGUgbnVtYmVyIGRvdWJsZWQgKGkuZS4gKiAyKSBhbmQgcmV0dXJuZWQgaW4geCdzIHJlcHJlc2VudGF0aW9uCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQppbnRfZG91YmxlID0gJChzdHJpcCAkKF9fZ21zbF90cjEpJDEgJDEpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIGRvdWJsZQojIEFyZ3VtZW50czogMTogQW4gaW50ZWdlcgojIFJldHVybnM6ICAgVGhlIGludGVnZXIgdGltZXMgMgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZG91YmxlID0gJChfX2dtc2xfdHIxKSQoY2FsbCBfX2dtc2xfaW50X3dyYXAxLGludF9kb3VibGUsJDEpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIGludF9oYWx2ZQojIEFyZ3VtZW50czogMTogQSBudW1iZXIgaW4geCdzIHJlcHJlc2VudGF0aW9uCiMgUmV0dXJuczogICBUaGUgbnVtYmVyIGhhbHZlZCAoaS5lLiAvIDIpIGFuZCByZXR1cm5lZCBpbiB4J3MgcmVwcmVzZW50YXRpb24KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmludF9oYWx2ZSA9ICQoX19nbXNsX3RyMSkkKHN0cmlwICQoc3Vic3QgeHgseCwkKGZpbHRlci1vdXQgeHkgeCB5LCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChqb2luICQxLCQoZm9yZWFjaCBhLCQxLHkgeCkpKSkpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIGhhbHZlCiMgQXJndW1lbnRzOiAxOiBBbiBpbnRlZ2VyCiMgUmV0dXJuczogICBUaGUgaW50ZWdlciBkaXZpZGVkIGJ5IDIKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmhhbHZlID0gJChfX2dtc2xfdHIxKSQoY2FsbCBfX2dtc2xfaW50X3dyYXAxLGludF9oYWx2ZSwkMSkKCmlmZGVmIF9fZ21zbF9oYXZlX2V2YWwKIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBBU1NPQ0lBVElWRSBBUlJBWVMKIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgc2V0CiMgQXJndW1lbnRzOiAxOiBOYW1lIG9mIGFzc29jaWF0aXZlIGFycmF5CiMgICAgICAgICAgICAyOiBUaGUga2V5IHZhbHVlIHRvIGFzc29jaWF0ZQojICAgICAgICAgICAgMzogVGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5CiMgUmV0dXJuczogICBOb25lCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzZXQgPSAkKF9fZ21zbF90cjMpJChjYWxsIGFzc2VydF9ub19kb2xsYXIsJDAsJDEkMiQzKSQoZXZhbCBfX2dtc2xfYWFfJDFfJDIgPSAkMykKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgZ2V0CiMgQXJndW1lbnRzOiAxOiBOYW1lIG9mIGFzc29jaWF0aXZlIGFycmF5CiMgICAgICAgICAgICAyOiBUaGUga2V5IHRvIHJldHJpZXZlCiMgUmV0dXJuczogICBUaGUgdmFsdWUgc3RvcmVkIGluIHRoZSBhcnJheSBmb3IgdGhhdCBrZXkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmdldCA9ICQoc3RyaXAgJChfX2dtc2xfdHIyKSQoY2FsbCBhc3NlcnRfbm9fZG9sbGFyLCQwLCQxJDIpJChpZiAkKGZpbHRlci1vdXQgdW5kZWZpbmVkLCQob3JpZ2luIF9fZ21zbF9hYV8kMV8kMikpLCBcCiAgICAkKF9fZ21zbF9hYV8kMV8kMikpKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBrZXlzCiMgQXJndW1lbnRzOiAxOiBOYW1lIG9mIGFzc29jaWF0aXZlIGFycmF5CiMgUmV0dXJuczogICBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgZGVmaW5lZCBrZXlzIGluIHRoZSBhcnJheQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Ka2V5cyA9ICQoX19nbXNsX3RyMSkkKGNhbGwgYXNzZXJ0X25vX2RvbGxhciwkMCwkMSkkKHNvcnQgJChwYXRzdWJzdCBfX2dtc2xfYWFfJDFfJSwlLCBcCiAgICAgICAgICAgICAgICAgICQoZmlsdGVyIF9fZ21zbF9hYV8kMV8lLCQoLlZBUklBQkxFUykpKSkKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgZGVmaW5lZAojIEFyZ3VtZW50czogMTogTmFtZSBvZiBhc3NvY2lhdGl2ZSBhcnJheQojICAgICAgICAgICAgMjogVGhlIGtleSB0byB0ZXN0CiMgUmV0dXJuczogICBSZXR1cm5zIHRydWUgaWYgdGhlIGtleSBpcyBkZWZpbmVkIChpLmUuIG5vdCBlbXB0eSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRlZmluZWQgPSAkKF9fZ21zbF90cjIpJChjYWxsIGFzc2VydF9ub19kb2xsYXIsJDAsJDEkMikkKGNhbGwgc25lLCQoY2FsbCBnZXQsJDEsJDIpLCkKCmVuZGlmICMgX19nbXNsX2hhdmVfZXZhbAoKaWZkZWYgX19nbXNsX2hhdmVfZXZhbAojICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIE5BTUVEIFNUQUNLUwojICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBwdXNoCiMgQXJndW1lbnRzOiAxOiBOYW1lIG9mIHN0YWNrCiMgICAgICAgICAgICAyOiBWYWx1ZSB0byBwdXNoIG9udG8gdGhlIHRvcCBvZiB0aGUgc3RhY2sgKG11c3Qgbm90IGNvbnRhaW4KIyAgICAgICAgICAgICAgIGEgc3BhY2UpCiMgUmV0dXJuczogICBOb25lCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpwdXNoID0gJChfX2dtc2xfdHIyKSQoY2FsbCBhc3NlcnRfbm9fZG9sbGFyLCQwLCQxJDIpJChldmFsIF9fZ21zbF9zdGFja18kMSA6PSAkMiAkKGlmICQoZmlsdGVyLW91dCB1bmRlZmluZWQsXAogICAgJChvcmlnaW4gX19nbXNsX3N0YWNrXyQxKSksJChfX2dtc2xfc3RhY2tfJDEpKSkKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgcG9wCiMgQXJndW1lbnRzOiAxOiBOYW1lIG9mIHN0YWNrCiMgUmV0dXJuczogICBUb3AgZWxlbWVudCBmcm9tIHRoZSBzdGFjayBhZnRlciByZW1vdmluZyBpdAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KcG9wID0gJChfX2dtc2xfdHIxKSQoY2FsbCBhc3NlcnRfbm9fZG9sbGFyLCQwLCQxKSQoc3RyaXAgJChpZiAkKGZpbHRlci1vdXQgdW5kZWZpbmVkLCQob3JpZ2luIF9fZ21zbF9zdGFja18kMSkpLCBcCiAgICAkKGNhbGwgZmlyc3QsJChfX2dtc2xfc3RhY2tfJDEpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICQoZXZhbCBfX2dtc2xfc3RhY2tfJDEgOj0gJChjYWxsIHJlc3QsJChfX2dtc2xfc3RhY2tfJDEpKSkpKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBwZWVrCiMgQXJndW1lbnRzOiAxOiBOYW1lIG9mIHN0YWNrCiMgUmV0dXJuczogICBUb3AgZWxlbWVudCBmcm9tIHRoZSBzdGFjayB3aXRob3V0IHJlbW92aW5nIGl0CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpwZWVrID0gJChfX2dtc2xfdHIxKSQoY2FsbCBhc3NlcnRfbm9fZG9sbGFyLCQwLCQxKSQoY2FsbCBmaXJzdCwkKF9fZ21zbF9zdGFja18kMSkpCgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBGdW5jdGlvbjogIGRlcHRoCiMgQXJndW1lbnRzOiAxOiBOYW1lIG9mIHN0YWNrCiMgUmV0dXJuczogICBOdW1iZXIgb2YgaXRlbXMgb24gdGhlIHN0YWNrCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkZXB0aCA9ICQoX19nbXNsX3RyMSkkKGNhbGwgYXNzZXJ0X25vX2RvbGxhciwkMCwkMSkkKHdvcmRzICQoX19nbXNsX3N0YWNrXyQxKSkKCmVuZGlmICMgX19nbXNsX2hhdmVfZXZhbAoKIyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBERUJVR0dJTkcgRkFDSUxJVElFUwojICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGFyZ2V0OiAgICBnbXNsLXByaW50LSUKIyBBcmd1bWVudHM6IFRoZSAlIHNob3VsZCBiZSByZXBsYWNlZCBieSB0aGUgbmFtZSBvZiBhIHZhcmlhYmxlIHRoYXQgeW91CiMgICAgICAgICAgICB3aXNoIHRvIHByaW50IG91dC4KIyBBY3Rpb246ICAgIEVjaG9zIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0aGF0IG1hdGNoZXMgdGhlICUgYW5kIGl0cyB2YWx1ZS4KIyAgICAgICAgICAgIEZvciBleGFtcGxlLCAnbWFrZSBnbXNsLXByaW50LVNIRUxMJyB3aWxsIG91dHB1dCB0aGUgdmFsdWUgb2YKIyAgICAgICAgICAgIHRoZSBTSEVMTCB2YXJpYWJsZQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZ21zbC1wcmludC0lOiA7IEBlY2hvICQqID0gJCgkKikKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEZ1bmN0aW9uOiAgYXNzZXJ0CiMgQXJndW1lbnRzOiAxOiBBIGJvb2xlYW4gdGhhdCBtdXN0IGJlIHRydWUgb3IgdGhlIGFzc2VydGlvbiB3aWxsIGZhaWwKIyAgICAgICAgICAgIDI6IFRoZSBtZXNzYWdlIHRvIHByaW50IHdpdGggdGhlIGFzc2VydGlvbgojIFJldHVybnM6ICAgTm9uZQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KYXNzZXJ0ID0gJChpZiAkMSwsJChjYWxsIF9fZ21zbF9lcnJvcixBc3NlcnRpb24gZmFpbHVyZTogJDIpKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBhc3NlcnRfZXhpc3RzCiMgQXJndW1lbnRzOiAxOiBOYW1lIG9mIGZpbGUgdGhhdCBtdXN0IGV4aXN0LCBpZiBpdCBpcyBtaXNzaW5nIGFuIGFzc2VydGlvbgojICAgICAgICAgICAgICAgd2lsbCBiZSBnZW5lcmF0ZWQKIyBSZXR1cm5zOiAgIE5vbmUKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmFzc2VydF9leGlzdHMgPSAkKGNhbGwgYXNzZXJ0LCQod2lsZGNhcmQgJDEpLGZpbGUgJyQxJyBtaXNzaW5nKQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgRnVuY3Rpb246ICBhc3NlcnRfbm9fZG9sbGFyCiMgQXJndW1lbnRzOiAxOiBOYW1lIG9mIGEgZnVuY3Rpb24gYmVpbmcgZXhlY3V0ZAojICAgICAgICAgICAgMjogQXJndW1lbnRzIHRvIGNoZWNrCiMgUmV0dXJuczogICBOb25lCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQphc3NlcnRfbm9fZG9sbGFyID0gJChjYWxsIGFzc2VydCwkKGNhbGwgbm90LCQoZmluZHN0cmluZyAkJCwkMikpLCQxIGNhbGxlZCB3aXRoIGEgZG9sbGFyIHNpZ24gaW4gYXJndW1lbnQpCg==