public inbox for gcc-prs@sourceware.org help / color / mirror / Atom feed
From: markg@ans.net To: gcc-gnats@gcc.gnu.org Subject: c++/2503: Fatal signal comiling map template using -g on AIX Date: Fri, 06 Apr 2001 11:06:00 -0000 [thread overview] Message-ID: <20010406175721.24501.qmail@sourceware.cygnus.com> (raw) >Number: 2503 >Category: c++ >Synopsis: Fatal signal comiling map template using -g on AIX >Confidential: no >Severity: non-critical >Priority: low >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Fri Apr 06 11:06:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Mark Glemboski >Release: powerpc-ibm-aix3.2.5/2.95.3 gcc version 2.95.3 20010315 (release) >Organization: >Environment: OS: AIX 2 3 000040754900 Hardware: powerpc-ibm-aix3.2.5 >Description: Compiling a map template that has a string as a key with the -g option causes the error: g++: Internal compiler error: program as got fatal signal 11 >How-To-Repeat: Compile this source file 'tm.C': #include <string> #include <map> map <string, int> badMap; Using the command: g++ -g -c tm.C -o tm.o >Fix: Work arounds: Compile without using '-g'. -or- Use const char * instead of string >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="tm.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="tm.i" IyAxICJ0bS5DIgojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJw Yy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAx IDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFp eDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAx IDMKI3ByYWdtYSBpbnRlcmZhY2UKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2Mt bGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z L2NzdGRkZWYiIDEgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93 ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgNjEgIi9h b2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45 NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CnR5cGVkZWYg bG9uZyB1bnNpZ25lZCBpbnQgc2l6ZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCAgd2ludF90Owoj IDMxNyAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz LjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CiMgNiAiL2FvbG5ldC9wa2cvZ2NjLTIu OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9jc3RkZGVmIiAyIDMKIyAzNSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9zdGQvc3RyYWl0cy5oIiAxIDMKI3ByYWdtYSBpbnRlcmZhY2UgInN0ZC9zdHJhaXRz LmgiCmV4dGVybiAiQysrIiB7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVD4Kc3RydWN0IHN0cmluZ19j aGFyX3RyYWl0cyB7CiAgdHlwZWRlZiBjaGFyVCBjaGFyX3R5cGU7ICAKICAgCiAgc3RhdGljIHZv aWQgYXNzaWduIChjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyBjMSA9 IGMyOyB9CiAgc3RhdGljIGJvb2wgZXEgKGNvbnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJf dHlwZSYgYzIpCiAgICB7IHJldHVybiAoYzEgPT0gYzIpOyB9CiAgc3RhdGljIGJvb2wgbmUgKGNv bnN0IGNoYXJfdHlwZSYgYzEsIGNvbnN0IGNoYXJfdHlwZSYgYzIpCiAgICB7IHJldHVybiAhKGMx ID09IGMyKTsgfQogIHN0YXRpYyBib29sIGx0IChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBj aGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxIDwgYzIpOyB9CiAgc3RhdGljIGNoYXJfdHlw ZSBlb3MgKCkgeyByZXR1cm4gY2hhcl90eXBlKCk7IH0gIAogIHN0YXRpYyBib29sIGlzX2RlbChj aGFyX3R5cGUgYSkgeyByZXR1cm4gMDsgfQogICAKICAKICAgCiAgc3RhdGljIGludCBjb21wYXJl IChjb25zdCBjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXplX3QgbikKICAg IHsKICAgICAgc2l6ZV90IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCglpZiAobmUg KHMxW2ldLCBzMltpXSkpCgkgIHJldHVybiBsdCAoczFbaV0sIHMyW2ldKSA/IC0xIDogMTsKICAg ICAgcmV0dXJuIDA7CiAgICB9CiAgICAKICBzdGF0aWMgc2l6ZV90IGxlbmd0aCAoY29uc3QgY2hh cl90eXBlKiBzKQogICAgewogICAgICBzaXplX3QgbCA9IDA7CiAgICAgIHdoaWxlIChuZSAoKnMr KywgZW9zICgpKSkKCSsrbDsKICAgICAgcmV0dXJuIGw7CiAgICB9CiAgc3RhdGljIGNoYXJfdHlw ZSogY29weSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAg ICB7CiAgICAgIGZvciAoOyBuLS07ICkKCWFzc2lnbiAoczFbbl0sIHMyW25dKTsKICAgICAgcmV0 dXJuIHMxOwogICAgfQogIHN0YXRpYyBjaGFyX3R5cGUqIG1vdmUgKGNoYXJfdHlwZSogczEsIGNv bnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgewogICAgICBjaGFyX3R5cGUgYVtuXTsK ICAgICAgc2l6ZV90IGk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpCglhc3NpZ24gKGFb aV0sIHMyW2ldKTsKICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkKCWFzc2lnbiAoczFbaV0s IGFbaV0pOwogICAgICByZXR1cm4gczE7CiAgICB9CiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChj aGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUmIGMsIHNpemVfdCBuKQogICAgewogICAgICBm b3IgKDsgbi0tOyApCglhc3NpZ24gKHMxW25dLCBjKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQp9 OwpjbGFzcyBpc3RyZWFtOwpjbGFzcyBvc3RyZWFtOwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1 LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2lu Y2x1ZGUvZysrLTMvY2N0eXBlIiAxIDMKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzIDQK IyAxICIvdXNyL2luY2x1ZGUvc3RhbmRhcmRzLmgiIDEgMyA0CiMgNDkgIi91c3IvaW5jbHVkZS9z dGFuZGFyZHMuaCIgMyA0CiMgMjEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMgNAojIDEgIi91 c3IvaW5jbHVkZS9zeXMvbG9jYWxlZGVmLmgiIDEgMyA0CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIu OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zeXMv bGltaXRzLmgiIDEgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2Zsb2F0LmgiIDEgMyA0CiMgMSAiL2Fv bG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1 LjMvaW5jbHVkZS9zeXMvbGltaXRzLmgiIDEgMyA0CiMgMjI3ICIvYW9sbmV0L3BrZy9nY2MtMi45 NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N5cy9s aW1pdHMuaCIgMyA0CiMgMTYwICIvdXNyL2luY2x1ZGUvZmxvYXQuaCIgMiAzIDQKCWV4dGVybiAg dW5zaWduZWQgICBpbnQgU0lORklOSVRZOwoJZXh0ZXJuICB1bnNpZ25lZCAgIGludCBfREJMSU5G WzJdOwoJZXh0ZXJuICB1bnNpZ25lZCAgIGludCBTUU5BTjsKCWV4dGVybiAgdW5zaWduZWQgICBp bnQgRFFOQU5bMl07CglleHRlcm4gIHVuc2lnbmVkICAgaW50IFNTTkFOOwoJZXh0ZXJuICB1bnNp Z25lZCAgIGludCBEU05BTlsyXTsKdHlwZWRlZgl1bnNpZ25lZCBzaG9ydCBmcHJuZF90OwpmcHJu ZF90IGZwX3JlYWRfcm5kKHZvaWQpOwpmcHJuZF90IGZwX3N3YXBfcm5kKGZwcm5kX3Qgcm5kKTsK IyAxNjggIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4 My4yLjUvMi45NS4zL2luY2x1ZGUvc3lzL2xpbWl0cy5oIiAyIDMgNAoJCQkgCiMgMjAgIi91c3Iv aW5jbHVkZS9zeXMvbG9jYWxlZGVmLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9sY19j b3JlLmgiIDEgMyA0CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dl cnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQKdHlwZWRl ZiBjaGFyICoJCXZhX2xpc3Q7CiMgNzQgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1s aWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0 eXBlZGVmIHVuc2lnbmVkIGludCB3Y3R5cGVfdDsKdHlwZWRlZiBsb25nCQlmcG9zX3Q7CnR5cGVk ZWYJbG9uZwkJdGltZV90Owp0eXBlZGVmIGludAkJY2xvY2tfdDsKIyAxMDUgIi9hb2xuZXQvcGtn L2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmCXVuc2lnbmVkIGNoYXIJdWNoYXJfdDsKdHlwZWRl Zgl1bnNpZ25lZCBzaG9ydAl1c2hvcnRfdDsKdHlwZWRlZgl1bnNpZ25lZCBpbnQJdWludF90Owp0 eXBlZGVmIHVuc2lnbmVkIGxvbmcJdWxvbmdfdDsKdHlwZWRlZiBzaWduZWQgaW50CXNzaXplX3Q7 CnR5cGVkZWYJc3RydWN0IHsgaW50IHJbMV07IH0gKglwaHlzYWRyX3Q7CnR5cGVkZWYgbG9uZwkJ bGV2ZWxfdDsKdHlwZWRlZglsb25nCQlkYWRkcl90OwkgCnR5cGVkZWYJY2hhciAqCQljYWRkcl90 OwkgCnR5cGVkZWYJdWxvbmdfdAkJaW5vX3Q7CQkgCnR5cGVkZWYgc2hvcnQJCWNudF90Owp0eXBl ZGVmIHVsb25nX3QJCWRldl90OwkJIAp0eXBlZGVmCWxvbmcJCWNoYW5fdDsJCSAKdHlwZWRlZgls b25nCQlvZmZfdDsJCSAKdHlwZWRlZglsb25nCQlwYWRkcl90Owp0eXBlZGVmCWxvbmcJCWtleV90 Owp0eXBlZGVmIGxvbmcJCXRpbWVyX3Q7CSAKdHlwZWRlZglzaG9ydAkJbmxpbmtfdDsKdHlwZWRl Zgl1bG9uZ190CQltb2RlX3Q7CQkgCnR5cGVkZWYgdWxvbmdfdAkJdWlkX3Q7CQkgCnR5cGVkZWYg dWxvbmdfdAkJZ2lkX3Q7CQkgCnR5cGVkZWYJdm9pZCAqCQltaWRfdDsJCSAKdHlwZWRlZglpbnQJ CXBpZF90OwkJIAp0eXBlZGVmIGNoYXIJCXNsYWJfdFsxMl07CSAKdHlwZWRlZiBsb25nICAgICAg ICAgICAgbXR5cF90OwkJIAojIDEgIi91c3IvaW5jbHVkZS9zeXMvbV90eXBlcy5oIiAxIDMgNAp0 eXBlZGVmIHN0cnVjdCBsYWJlbF90IHsJCSAKCXN0cnVjdCBsYWJlbF90ICpwcmV2OwkJIAoJdWxv bmdfdCAgICAgICAgICAgaWFyOwkJIAoJdWxvbmdfdCAgICAgICAgICAgc3RhY2s7CQkgCgl1bG9u Z190ICAgICAgICAgICB0b2M7CQkgCgl1bG9uZ190ICAgICAgICAgICBjcjsgICAgICAgICAgICAg IAoJdWxvbmdfdCAgICAgICAgICAgaW50cHJpOwkJIAoJdWxvbmdfdCAgICAgICAgICAgcmVnWzE5 XTsJIAp9IGxhYmVsX3Q7CnR5cGVkZWYgbG9uZwkJdm1pZF90OwkJIAp0eXBlZGVmIHVsb25nX3QJ CXZtaGFuZGxlX3Q7CSAKdHlwZWRlZiBzdHJ1Y3Qgdm1hZGRyX3QgewkJIAoJdm1oYW5kbGVfdAlz cnZhbDsJCSAKCWNhZGRyX3QJCW9mZnNldDsJCSAKfSB2bWFkZHJfdDsKdHlwZWRlZiBzdHJ1Y3Qg YWRzcGFjZV90ewkJIAoJdWxvbmdfdAkJYWxsb2M7CQkgCgl2bWhhbmRsZV90CXNydmFsWzE2XTsJ IAp9IGFkc3BhY2VfdDsKIyAxNTIgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CnR5 cGVkZWYgc3RydWN0IHNpZ3NldF90CXsKCXVuc2lnbmVkIGxvbmcgbG9zaWdzOwoJdW5zaWduZWQg bG9uZyBoaXNpZ3M7Cn0gc2lnc2V0X3Q7CnR5cGVkZWYgaW50IHNpZ25hbF90Owp0eXBlZGVmCXVj aGFyX3QJCXVjaGFyOwp0eXBlZGVmCXVzaG9ydF90CXVzaG9ydDsKdHlwZWRlZgl1aW50X3QJCXVp bnQ7CnR5cGVkZWYgdWxvbmdfdAkJdWxvbmc7CnR5cGVkZWYJcGh5c2Fkcl90CXBoeXNhZHI7CnR5 cGVkZWYJdW5zaWduZWQgY2hhcgl1X2NoYXI7CnR5cGVkZWYJdW5zaWduZWQgc2hvcnQJdV9zaG9y dDsKdHlwZWRlZgl1bnNpZ25lZCBpbnQJdV9pbnQ7CnR5cGVkZWYJdW5zaWduZWQgbG9uZwl1X2xv bmc7CnR5cGVkZWYJc3RydWN0CV9xdWFkIHsgbG9uZyB2YWxbMl07IH0gcXVhZDsKdHlwZWRlZgls b25nCXN3YmxrX3Q7CnN0cnVjdCBzaWdzZXQJewoJdW5zaWduZWQgbG9uZyBsb3NpZ3M7Cgl1bnNp Z25lZCBsb25nIGhpc2lnczsKfTsKc3RydWN0IGZzaWQgewoJbG9uZwl2YWxbMl07Cn07CnR5cGVk ZWYgc3RydWN0IGZzaWQgZnNpZF90OwpzdHJ1Y3QgZmlkIHsKCXVpbnRfdAlmaWRfbGVuOwoJY2hh cglmaWRfZGF0YVsoMzIgIC0gc2l6ZW9mKGZzaWRfdCkgLSBzaXplb2YodWludF90KSkgXTsKfTsK dHlwZWRlZiBzdHJ1Y3QgZmlkIGZpZF90OwpzdHJ1Y3QgZmlsZWlkIHsJCQkgCgl1aW50X3QJZmlk X2xlbjsKCWlub190CWZpZF9pbm87Cgl1aW50X3QJZmlkX2dlbjsKCWNoYXIJZmlkX3hbKDMyICAt IHNpemVvZihmc2lkX3QpIC0gc2l6ZW9mKHVpbnRfdCkpICAtIChzaXplb2YoaW5vX3QpICsgMikg LSBzaXplb2YodWludF90KV07Cn07CnN0cnVjdCBmaGFuZGxlIHsKCWNoYXIgeFszMiBdOwkJIAp9 OwpzdHJ1Y3QgZmlsZWhhbmRsZSB7CQkJIAoJZnNpZF90CQlmaF9mc2lkOwkJIAoJc3RydWN0IGZp bGVpZAlmaF9maWQ7CQkJIAp9Owp0eXBlZGVmIHN0cnVjdCBmaGFuZGxlIGZoYW5kbGVfdDsKc3Ry dWN0IHVuaXF1ZV9pZCB7CiAgICAgICB1bnNpZ25lZCBsb25nIHdvcmQxOwogICAgICAgdW5zaWdu ZWQgbG9uZyB3b3JkMjsKICAgICAgIHVuc2lnbmVkIGxvbmcgd29yZDM7CiAgICAgICB1bnNpZ25l ZCBsb25nIHdvcmQ0Owp9Owp0eXBlZGVmIHN0cnVjdCB1bmlxdWVfaWQgdW5pcXVlX2lkX3Q7CiMg MjgxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMu Mi41LzIuOTUuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKIyAxOCAiL3Vzci9pbmNsdWRlL3N5 cy9sY19jb3JlLmgiIDIgMyA0CnR5cGVkZWYgc3RydWN0IHsKICAgIHVuc2lnbmVkIHNob3J0Cgl0 eXBlX2lkLAoJbWFnaWM7CiAgICB1bnNpZ25lZCBsb25nCgl2ZXJzaW9uOwogICAgCiAgICBzaXpl X3QgIHNpemU7Cn0gX0xDX29iamVjdF90Owp0eXBlZGVmIHN0cnVjdCB7CiAgCiAgICBfTENfb2Jq ZWN0X3QgIGhkcjsKCQogICAgIAogICAgaW50ICAgY2F0Z2V0cyAgOwogICAgaW50ICAgICAgICAg ICAgICBjYXRjbG9zZSAgOwogICAgCiAgICAgCiAgICBpbnQgICBjb21wcmVzcyAgOwogICAgaW50 ICAgZGVjb21wcmVzcyAgOwogICAgaW50ICAgICAgc3RhcnRfY29tcHJlc3MgIDsKICAgIGludCAg ICAgIGVuZF9jb21wcmVzcyAgOwogICAgCiAgICAgCiAgICBpbnQgICAgICBpbml0ICA7CiAgICB2 b2lkICAgICpkYXRhOwp9IF9MQ19jb3JlX2Nhcl90Owp0eXBlZGVmIHN0cnVjdCB7CiAgICBfTENf b2JqZWN0X3QgIGhkcjsKICAgICAKICAgIGludCAgICBubF9sYW5naW5mbyAgOwogICAgCiAgICAg CiAgICBpbnQgICAgbWJ0b3djICA7CiAgICBpbnQgICAgbWJzdG93Y3MgIDsKICAgIGludCAgICAg ICB3Y3RvbWIgIDsKICAgIGludCAgICB3Y3N0b21icyAgOwogICAgCiAgICAgCiAgICBpbnQgICAg ICAgbWJsZW4gIDsKICAgIAogICAgIAogICAgaW50ICAgIHdjc3dpZHRoICA7CiAgICBpbnQgICAg d2N3aWR0aCAgOwogICAgCiAgICAgCiAgICBpbnQgICAgICAgX19tYnRvcGMgIDsKICAgIGludCAg ICAgICBfX21ic3RvcGNzICA7CiAgICBpbnQgICAgICAgX19wY3RvbWIgIDsKICAgIGludCAgICAg ICBfX3Bjc3RvbWJzICA7CiAgICAKICAgICAKICAgIGludCAgICBjc2lkICA7CiAgICBpbnQgICAg d2NzaWQgIDsKICAgIAogICAgIAogICAgaW50ICAgICAgIGluaXQgIDsKICAgIHZvaWQgICAgICpk YXRhOwp9IF9MQ19jb3JlX2NoYXJtYXBfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX29iamVj dF90ICBoZHI7IAogICAgCiAgICAgCiAgICBpbnQgICAgICB0b3d1cHBlciAgOwogICAgaW50ICAg ICAgdG93bG93ZXIgIDsKICAgIAogICAgIAogICAgaW50ICAgIGdldF93Y3R5cGUgIDsKICAgIGlu dCAgICAgICAgICAgICBpc193Y3R5cGUgIDsKICAgIAogICAgIAogICAgaW50ICAgICAgICAgIGlu aXQgIDsKICAgIHZvaWQgICAgICpkYXRhOwp9IF9MQ19jb3JlX2N0eXBlX3Q7CnR5cGVkZWYgc3Ry dWN0IHsKICAgIF9MQ19vYmplY3RfdCAgaGRyOwogICAgIAogICAgaW50ICAgICAgICBzdHJjb2xs ICA7CiAgICBpbnQgICAgIHN0cnhmcm0gIDsKICAgIAogICAgIAogICAgaW50ICAgICAgICB3Y3Nj b2xsICA7CiAgICBpbnQgICAgIHdjc3hmcm0gIDsKICAgIAogICAgIAogICAgaW50ICAgICAgICBm bm1hdGNoICA7CiAgICAKICAgICAKICAgIGludCAgICAgICAgcmVnY29tcCAgOwogICAgaW50ICAg ICByZWdlcnJvciAgOwogICAgaW50ICAgICAgICByZWdleGVjICA7CiAgICBpbnQgICAgICAgcmVn ZnJlZSAgOwogICAgCiAgICAgCiAgICBpbnQgICAgICAgIGluaXQgIDsKICAgIHZvaWQgICAgICpk YXRhOwp9IF9MQ19jb3JlX2NvbGxhdGVfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX29iamVj dF90ICBoZHI7CiAgICAKICAgICAKICAgIGludCAgICAgbmxfbGFuZ2luZm8gIDsKICAgIAogICAg IAogICAgaW50ICAgICBzdHJmdGltZSAgOwogICAgaW50ICAgICBzdHJwdGltZSAgOwogICAgCiAg ICAgCiAgICBpbnQgICAgIHdjc2Z0aW1lICA7CiAgICAKICAgICAKICAgIGludCAgICAgICAgaW5p dCAgOwogICAgdm9pZCAgICAgKmRhdGE7Cn0gX0xDX2NvcmVfdGltZV90Owp0eXBlZGVmIHN0cnVj dCB7CiAgICBfTENfb2JqZWN0X3QgIGhkcjsKICAgICAKICAgIGludCAgICAgbmxfbGFuZ2luZm8g IDsKICAgIAogICAgIAogICAgaW50ICAgICBzdHJmbW9uICA7CiAgICAKICAgICAKICAgIGludCAg ICAgICAgaW5pdCAgOwogICAgdm9pZCAgICAgKmRhdGE7Cn0gX0xDX2NvcmVfbW9uZXRhcnlfdDsK dHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX29iamVjdF90ICBoZHI7CiAgICAgCiAgICBpbnQgICAg IG5sX2xhbmdpbmZvICA7CiAgICAKICAgICAKICAgIGludCAgICAgICAgaW5pdCAgOwogICAgdm9p ZCAgICAgKmRhdGE7Cn0gX0xDX2NvcmVfbnVtZXJpY190Owp0eXBlZGVmIHN0cnVjdCB7CiAgICBf TENfb2JqZWN0X3QgIGhkcjsKICAgIAogICAgIAogICAgaW50ICAgIG5sX2xhbmdpbmZvICA7CiAg ICAKICAgICAKICAgIGludCAgICBycG1hdGNoICA7CiAgICAKICAgICAKICAgIGludCAgICAgICBp bml0ICA7CiAgICB2b2lkICAgICAgICAqZGF0YTsKfSBfTENfY29yZV9yZXNwX3Q7CnR5cGVkZWYg c3RydWN0IHsKICAgIF9MQ19vYmplY3RfdCBoZHI7CiAgICAgCiAgICBpbnQgICAgICAgICAgIG5s X2xhbmdpbmZvICA7CiAgICBpbnQgICBsb2NhbGVjb252ICA7CiAgICAKICAgICAKICAgIGludCAg ICAgaW5pdCAgOwogICAgdm9pZCAgICAgICAgICpkYXRhOwp9IF9MQ19jb3JlX2xvY2FsZV90Owoj IDIxICIvdXNyL2luY2x1ZGUvc3lzL2xvY2FsZWRlZi5oIiAyIDMgNAojIDEgIi9hb2xuZXQvcGtn L2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1 ZGUvbG9jYWxlLmgiIDEgMyA0CnN0cnVjdCBsY29udiB7CiAgIGNoYXIgKmRlY2ltYWxfcG9pbnQ7 CQkgCiAgIGNoYXIgKnRob3VzYW5kc19zZXA7CQkgCiAgIGNoYXIgKmdyb3VwaW5nOwkJIAogICBj aGFyICppbnRfY3Vycl9zeW1ib2w7CSAKICAgY2hhciAqY3VycmVuY3lfc3ltYm9sOwkgCiAgIGNo YXIgKm1vbl9kZWNpbWFsX3BvaW50OwkgCiAgIGNoYXIgKm1vbl90aG91c2FuZHNfc2VwOwkgCiAg IGNoYXIgKm1vbl9ncm91cGluZzsJCSAKICAgY2hhciAqcG9zaXRpdmVfc2lnbjsJCSAKICAgY2hh ciAqbmVnYXRpdmVfc2lnbjsJCSAKICAgY2hhciBpbnRfZnJhY19kaWdpdHM7CSAKICAgY2hhciBm cmFjX2RpZ2l0czsJCSAKICAgY2hhciBwX2NzX3ByZWNlZGVzOwkJIAogICBjaGFyIHBfc2VwX2J5 X3NwYWNlOwkJIAogICBjaGFyIG5fY3NfcHJlY2VkZXM7CQkgCiAgIGNoYXIgbl9zZXBfYnlfc3Bh Y2U7CQkgCiAgIGNoYXIgcF9zaWduX3Bvc247CQkgCiAgIGNoYXIgbl9zaWduX3Bvc247CQkgCiAg IGNoYXIgKmxlZnRfcGFyZW50aGVzaXM7CSAKICAgY2hhciAqcmlnaHRfcGFyZW50aGVzaXM7CSAK fSA7CnN0cnVjdCBsY29udiAqbG9jYWxlY29udih2b2lkKTsKY2hhciAgICpzZXRsb2NhbGUoaW50 LCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHN0cnVjdCBsY29udiBsY29udjsKIyAyMiAiL3Vzci9p bmNsdWRlL3N5cy9sb2NhbGVkZWYuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2xvY2Fs ZWRlZjMxLmgiIDEgMyA0CnR5cGVkZWYgc3RydWN0ICBjb2xkZXNjICB7ICAgICAgICAgICAgICAg ICAgICAgIAoJc2hvcnQgICAgIGNkX3N0cm9mZjsgICAgICAgICAgICAgICAgICAgIAoJc2hvcnQJ ICBjZF9yZXBvZmY7CglzaG9ydCAgICAgY2RfY3ZhbDsKCXNob3J0CSAgY2RfY3VuaXE7Cn0gY29s ZGVzY190Owp0eXBlZGVmIHN0cnVjdCBjb2xsYXRpb25fdGFibGUgeyAgICAgICAgICAgICAgICAg CglzaG9ydCAgICBsY192ZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgIAoJc2hvcnQJIGxjX2xl bmd0aDsJCQkgCgljaGFyICAgICAqbGNfbG9jYWxlX25hbWU7CQkgCglpbnQgICAgICBsZW5fY29s bGF0ZTsKCXNob3J0ICAgICpsY19jb2xsYXRlOyAgICAgICAgICAgICAgICAgICAgCglpbnQgICAg ICBsZW5fY29sdW5pcTsKCXNob3J0ICAgICpsY19jb2x1bmlxOyAgICAgICAgICAgICAgICAgICAg CglpbnQgICAgICBsZW5fY29sZGVzYzsKCWNvbGRlc2NfdCAqbGNfY29sZGVzYzsgICAgICAgICAg ICAgICAgICAgCglpbnQJIGxlbl9zdHJpbmdzOwkJCQoJd2NoYXJfdCAgKmxjX3N0cmluZ3M7CQkJ IAoJaW50CSBoaWdoX2N2YWx1ZTsJCQkgCn0gY29sX3Q7CnR5cGVkZWYgc3RydWN0IGNoYXJfY2xh c3NpZmljYXRpb25fdGFibGUgeyAgICAgICAKCXNob3J0ICAgICAgbGNfdmVyc2lvbjsgCQkgCglz aG9ydAkgICBsY19sZW5ndGg7ICAJCSAKCXNob3J0ICAgICAgbGNfY29kZV90eXBlOyAJIAoJc2hv cnQgICAgICBtYl9jdXJfbWF4OyAgIAkgCglzaG9ydCAgICAgIG1iX2N1cl9taW47ICAgCSAKCXNo b3J0ICAgICAgbGNfZHNwX3dpZHRoOyAgICAgICAgICAgICAgICAgIAoJY2hhciAgICAgICAqbGNf bG9jYWxlX25hbWU7IAkgCglpbnQgICAgICAgIGxlbl9jYXNlY29udjsgICAJIAoJd2NoYXJfdCAg ICAqbGNfY2FzZWNvbnY7ICAgCSAKCWludAkgICBsZW5fY3R5cGU7Cgl1bnNpZ25lZCBzaG9ydCAq bGNfY3R5cGU7CSAJCn0gY3R5cGVfdDsKdHlwZWRlZglzdHJ1Y3QgbGNfbW9uZXRhcnlfdGFibGUg ewoJc2hvcnQgIAlsY192ZXJzaW9uOwoJc2hvcnQgCWxjX2xlbmd0aDsJCSAKCWNoYXIgICAJKmxj X2xvY2FsZV9uYW1lOwkgCgljaGFyIAkqaW50X2N1cnJfc3ltYm9sOwkgCgljaGFyIAkqY3VycmVu Y3lfc3ltYm9sOwkgCgljaGFyIAkqbW9uX2RlY2ltYWxfcG9pbnQ7CSAKCWNoYXIgCSptb25fdGhv dXNhbmRzX3NlcDsJIAoJY2hhciAJKm1vbl9ncm91cGluZzsJCSAKCWNoYXIgCSpwb3NpdGl2ZV9z aWduOwkJIAoJY2hhciAJKm5lZ2F0aXZlX3NpZ247CQkgCgljaGFyIAlpbnRfZnJhY19kaWdpdHM7 CSAKCWNoYXIgCWZyYWNfZGlnaXRzOwkJIAoJY2hhciAJcF9jc19wcmVjZWRlczsJCSAKCWNoYXIg CXBfc2VwX2J5X3NwYWNlOwkJIAoJY2hhciAJbl9jc19wcmVjZWRlczsJCSAKCWNoYXIgCW5fc2Vw X2J5X3NwYWNlOwkJIAoJY2hhciAJcF9zaWduX3Bvc247CQkgCgljaGFyIAluX3NpZ25fcG9zbjsJ CSAKfSBtb25fdDsKdHlwZWRlZiBzdHJ1Y3QgbnVtZXJpY190YWJsZSB7ICAgICAgICAgICAgICAg ICAgIAoJc2hvcnQJbGNfdmVyc2lvbjsKCXNob3J0CWxjX2xlbmd0aDsJCSAKCWNoYXIgICAgKmxj X2xvY2FsZV9uYW1lOwkgCgljaGFyIAkqZGVjaW1hbF9wb2ludDsKCWNoYXIgCSp0aG91c2FuZHNf c2VwOwoJY2hhcgkqZ3JvdXBpbmc7Cn0gbnVtX3Q7CnR5cGVkZWYgc3RydWN0IGxjX21lc3NhZ2Vz X3RhYmxlIHsKCXNob3J0CWxjX3ZlcnNpb247CglzaG9ydAlsY19sZW5ndGg7CQkgCgljaGFyICAg ICpsY19sb2NhbGVfbmFtZTsJIAoJY2hhciAJKm1lc3NhZ2VzOwkJIAoJY2hhciAJKnllc19zdHJp bmc7CQkgCgljaGFyIAkqbm9fc3RyaW5nOwkJIAp9IG1zZ190Owp0eXBlZGVmIHN0cnVjdCBsY190 aW1lX3RhYmxlIHsKCXNob3J0ICAgbGNfdmVyc2lvbjsKCXNob3J0CWxjX2xlbmd0aDsJICAKCWNo YXIgICAgKmxjX2xvY2FsZV9uYW1lOyAgCgljaGFyICAgICp0X2ZtdDsgICAgICAgICAgCgljaGFy ICAgICpkX2ZtdDsgICAgICAgICAgCgljaGFyICAgICpubGxkYXRlOyAgICAgICAgCgljaGFyICAg ICpkX3RfZm10OyAgICAgICAgCgljaGFyICAgICphYmRheTsgICAgICAgICAgCgljaGFyICAgICpk YXk7ICAgICAgICAgICAgCgljaGFyICAgICphYm1vbjsgICAgICAgICAgCgljaGFyICAgICptb247 ICAgICAgICAgICAgCgljaGFyICAgICptaXNjOyAgICAgICAgICAgCgljaGFyICAgICp0c3Ryczsg ICAgICAgICAgCgljaGFyICAgICp0dW5pdHM7ICAgICAgICAgCgljaGFyCSp5ZWFyOwkJIAoJY2hh ciAgICAqYW1fcG07ICAgICAgICAgIAp9IHRpbV90Owp0eXBlZGVmIHN0cnVjdCB3Y2hhcl9tYXBw aW5nX3RhYmxlIHsgICAgICAgICAgICAgCglzaG9ydCAgICBsY192ZXJzaW9uOwoJc2hvcnQJIGxj X2xlbmd0aDsJCQkgCgljaGFyICAgICAqbGNfaWRlbnRpZmllcjsKfSBtYXBfdDsKdHlwZWRlZiBz dHJ1Y3QgbG9jYWxlaW5mb190YWJsZSB7ICAgICAgICAgICAKCWNoYXIgICAgIGxjX21hZzAsIGxj X21hZzE7ICAgICAgIAoJc2hvcnQgICAgbGNfdmVyc2lvbjsgICAgICAgICAgICAgCglzaG9ydCAg ICBsY19jb2RlX3R5cGU7ICAgICAgICAgICAgICAgICAKCXNob3J0CSBsY19sZW5ndGg7CQkgCglj b2xfdCAgICAqbGNfY29sdGJsOwkJIAoJY3R5cGVfdCAgKmxjX2NocnRibDsJCSAKCW1vbl90ICAg ICpsY19tb250Ymw7CQkgCgludW1fdCAgICAqbGNfbnVtdGJsOwkJIAoJdGltX3QgICAgKmxjX3Rp bXRibDsJCSAKCW1zZ190ICAgICpsY19tc2d0Ymw7CQkgCgltYXBfdCAgICAqbGNfbWFwdGJsOwkJ IAp9IGxvY190OwojIDI0ICIvdXNyL2luY2x1ZGUvc3lzL2xvY2FsZWRlZi5oIiAyIDMgNAp0eXBl ZGVmIHN0cnVjdCB7CiAgICBfTENfY29yZV9jaGFybWFwX3QgY29yZTsKICAgIAogICAgY2hhciAg ICAgKmNtX2NzbmFtZTsJIAogICAgCiAgICBzaXplX3QgICBjbV9tYl9jdXJfbWF4OyAgICAgIAog ICAgc2l6ZV90ICAgY21fbWJfY3VyX21pbjsJIAogICAgdW5zaWduZWQgY2hhcgoJICAgICBjbV9t YXhfZGlzcF93aWR0aDsgIAoJCQkJIAogICAgdW5zaWduZWQgCgljaGFyICpjbV9jc3RhYjsJCSAK ICAgIAp9IF9MQ19jaGFybWFwX3Q7CnR5cGVkZWYgc3RydWN0IF9MQ19jaGFybWFwX29iamhkbCBf TENfY2hhcm1hcF9vYmpoZGxfdDsKc3RydWN0IF9MQ19jaGFybWFwX29iamhkbCB7CglfTENfY2hh cm1hcF90ICpvYmo7Cgl2b2lkICooKiptZXRoKSgpOwp9Owp0eXBlZGVmCXN0cnVjdCB7CiAgICBf TENfY29yZV9tb25ldGFyeV90ICAgY29yZTsKICAgIAogICAgY2hhciAqaW50X2N1cnJfc3ltYm9s OwkgICAgCiAgICBjaGFyICpjdXJyZW5jeV9zeW1ib2w7CSAgICAKICAgIGNoYXIgKm1vbl9kZWNp bWFsX3BvaW50OwkgICAgCiAgICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsJICAgIAogICAgY2hh ciAqbW9uX2dyb3VwaW5nOwkJICAgIAogICAgY2hhciAqcG9zaXRpdmVfc2lnbjsJICAgIAogICAg Y2hhciAqbmVnYXRpdmVfc2lnbjsJICAgIAogICAgc2lnbmVkIGNoYXIgaW50X2ZyYWNfZGlnaXRz OyAgICAKICAgIHNpZ25lZCBjaGFyIGZyYWNfZGlnaXRzOwkgICAgCiAgICBzaWduZWQgY2hhciBw X2NzX3ByZWNlZGVzOwkgICAgCiAgICBzaWduZWQgY2hhciBwX3NlcF9ieV9zcGFjZTsJICAgIAog ICAgc2lnbmVkIGNoYXIgbl9jc19wcmVjZWRlczsJICAgIAogICAgc2lnbmVkIGNoYXIgbl9zZXBf Ynlfc3BhY2U7CSAgICAKICAgIHNpZ25lZCBjaGFyIHBfc2lnbl9wb3NuOwkgICAgCiAgICBzaWdu ZWQgY2hhciBuX3NpZ25fcG9zbjsJICAgIAogICAgY2hhciAqZGViaXRfc2lnbjsJCSAgICAKICAg IGNoYXIgKmNyZWRpdF9zaWduOwkJICAgIAogICAgY2hhciAqbGVmdF9wYXJlbnRoZXNpczsJICAg IAogICAgY2hhciAqcmlnaHRfcGFyZW50aGVzaXM7CSAgICAKICAgIAp9IF9MQ19tb25ldGFyeV90 Owp0eXBlZGVmIHN0cnVjdCBfTENfbW9uZXRhcnlfb2JqaGRsIF9MQ19tb25ldGFyeV9vYmpoZGxf dDsKc3RydWN0IF9MQ19tb25ldGFyeV9vYmpoZGwgewoJX0xDX21vbmV0YXJ5X3QgKm9iajsKCXZv aWQgKigqKm1ldGgpKCk7Cn07CnR5cGVkZWYgc3RydWN0IHsKICAgIF9MQ19jb3JlX251bWVyaWNf dCBjb3JlOwogICAgCiAgICBjaGFyICAgICAqZGVjaW1hbF9wb2ludDsKICAgIGNoYXIgICAgICp0 aG91c2FuZHNfc2VwOwogICAgdW5zaWduZWQKCWNoYXIgKmdyb3VwaW5nOwogICAgCn0gX0xDX251 bWVyaWNfdDsKdHlwZWRlZiBzdHJ1Y3QgX0xDX251bWVyaWNfb2JqaGRsIF9MQ19udW1lcmljX29i amhkbF90OwpzdHJ1Y3QgX0xDX251bWVyaWNfb2JqaGRsIHsKCV9MQ19udW1lcmljX3QgKm9iajsK CXZvaWQgKigqKm1ldGgpKCk7Cn07CnR5cGVkZWYgc3RydWN0ICB7CiAgICBfTENfY29yZV9yZXNw X3QgY29yZTsKICAgIGNoYXIgICAgKnllc2V4cHI7CSAgICAgIAogICAgY2hhciAgICAqbm9leHBy OwkgICAgICAKICAgIGNoYXIgICAgKnllc3N0cjsJICAgICAgCiAgICBjaGFyICAgICpub3N0cjsJ ICAgICAgCn0gX0xDX3Jlc3BfdDsKdHlwZWRlZiBzdHJ1Y3QgX0xDX3Jlc3Bfb2JqaGRsIF9MQ19y ZXNwX29iamhkbF90OwpzdHJ1Y3QgX0xDX3Jlc3Bfb2JqaGRsIHsKCV9MQ19yZXNwX3QgKm9iajsK CXZvaWQgKigqKm1ldGgpKCk7Cn07CnR5cGVkZWYgc3RydWN0IHsKICAgIF9MQ19jb3JlX3RpbWVf dCBjb3JlOwogICAgCiAgICBjaGFyICpkX2ZtdDsgIAogICAgY2hhciAqdF9mbXQ7ICAKICAgIGNo YXIgKmRfdF9mbXQ7CiAgICBjaGFyICp0X2ZtdF9hbXBtOwogICAgY2hhciAqYWJkYXlbN107ICAK ICAgIGNoYXIgKmRheVs3XTsgICAgCiAgICBjaGFyICphYm1vblsxMl07ICAKICAgIGNoYXIgKm1v blsxMl07ICAgIAogICAgY2hhciAqYW1fcG1bMl07CiAgICBjaGFyICplcmE7CiAgICBjaGFyICpl cmFfeWVhcjsKICAgIGNoYXIgKmVyYV9kX2ZtdDsKICAgIGNoYXIgKmFsdF9kaWdpdHM7CiAgICAK fSBfTENfdGltZV90Owp0eXBlZGVmIHN0cnVjdCBfTENfdGltZV9vYmpoZGwgX0xDX3RpbWVfb2Jq aGRsX3Q7CnN0cnVjdCBfTENfdGltZV9vYmpoZGwgewoJX0xDX3RpbWVfdCAqb2JqOwoJdm9pZCAq KCoqbWV0aCkoKTsKfTsKdHlwZWRlZiB1bmlvbiB7CiAgICB1bnNpZ25lZAkJICAgICAgICAKCXNo b3J0ICBuWzJdOwkgICAgICAgIAogICAgICAgICAgICAgCiAgICB1bnNpZ25lZAkJICAgICAgICAK CXNob3J0ICAqcDsJICAgICAgICAKfSBfTENfd2VpZ2h0X3Q7ICAgIAogIAp0eXBlZGVmIHN0cnVj dCB7CiAgICBjaGFyICAgICAgICAgKmNlX3N5bTsJIAogICAgX0xDX3dlaWdodF90IGNlX3dndDsJ IAoJCQkJIAp9IF9MQ19jb2xsZWxfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX3dlaWdodF90 ICAgY3Rfd2d0OyAgICAgCgkJCSAgICAgICAKICAgIF9MQ19jb2xsZWxfdCAgICpjdF9jb2xsZWw7 IAp9IF9MQ19jb2x0YmxfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX3dlaWdodF90IHNzX2Fj dDsJICAgICAgCgkJCQkgICAgICAKICAgIGNoYXIgKnNzX3NyYzsJCSAgICAgIAogICAgY2hhciAq c3NfdGd0OwkJICAgICAgCn0gX0xDX3N1YnNfdDsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX2Nv cmVfY29sbGF0ZV90IGNvcmU7CiAgICAKICAgIHVuc2lnbmVkCQkJICAgICAgICAgICAgIAoJY2hh ciAgICBjb19ub3JkOwkgICAgICAgICAgICAgCiAgICAKICAgIF9MQ193ZWlnaHRfdCBjb19zb3J0 OwkgICAgICAgICAgICAgCgkJCQkJICAgICAKICAgIAogICAgd2NoYXJfdCAgICAgY29fd2NfbWlu OwkJICAgICAKICAgIHdjaGFyX3QgICAgIGNvX3djX21heDsJCSAgICAgCiAgICAKICAgIHdjaGFy X3QgICAgIGNvX2NvbF9taW47CQkgICAgIAogICAgd2NoYXJfdCAgICAgY29fY29sX21heDsJCSAg ICAgCiAgICAKICAgIF9MQ19jb2x0YmxfdCAqY29fY29sdGJsOwkJICAgICAKCQkJCSAgICAgICAg ICAgICAKICAgIHVuc2lnbmVkCgljaGFyICAgIGNvX25zdWJzOwkJICAgICAKICAgIF9MQ19zdWJz X3QgICpjb19zdWJzOwkJICAgICAKICAgIAp9IF9MQ19jb2xsYXRlX3Q7CnR5cGVkZWYgc3RydWN0 IF9MQ19jb2xsYXRlX29iamhkbCBfTENfY29sbGF0ZV9vYmpoZGxfdDsKc3RydWN0IF9MQ19jb2xs YXRlX29iamhkbCB7CglfTENfY29sbGF0ZV90ICpvYmo7Cgl2b2lkICooKiptZXRoKSgpOwp9Owog IAp0eXBlZGVmIHN0cnVjdCB7CiAgICBjaGFyICAgICpuYW1lOwogICAgdW5zaWduZWQKCWludCBt YXNrOwp9IF9MQ19jbGFzc25tX3Q7CnR5cGVkZWYgc3RydWN0IHsKICBfTENfY29yZV9jdHlwZV90 IGNvcmU7CiAgIAogIHdjaGFyX3QgICAgICBtaW5fd2M7CiAgd2NoYXJfdCAgICAgIG1heF93YzsK ICAgCiAgd2NoYXJfdCAgICAgICp1cHBlcjsKICB3Y2hhcl90ICAgICAgKmxvd2VyOwogIAogICAK ICB1bnNpZ25lZAogICAgICBpbnQgICAgICAqbWFzazsgICAgICAgICAKICB1bnNpZ25lZAogICAg ICBpbnQgICAgICAqcW1hc2s7CSAgICAgIAogIHVuc2lnbmVkCiAgICAgIGNoYXIgICAgICpxaWR4 OwkgICAgICAKICAgCiAgdW5zaWduZWQKICAgICAgY2hhciAgICAgbmNsYXNzZXM7CiBfTENfY2xh c3NubV90ICpjbGFzc25tczsKICAKfSBfTENfY3R5cGVfdDsKdHlwZWRlZiBzdHJ1Y3QgX0xDX2N0 eXBlX29iamhkbCBfTENfY3R5cGVfb2JqaGRsX3Q7CnN0cnVjdCBfTENfY3R5cGVfb2JqaGRsIHsK CV9MQ19jdHlwZV90ICpvYmo7Cgl2b2lkICooKiptZXRoKSgpOwp9Owp0eXBlZGVmIHN0cnVjdCB7 CiAgICBfTENfY29yZV9sb2NhbGVfdCBjb3JlOwogICAgCiAgICBjaGFyICAgICAgICAgICAqbmxf aW5mb1s1NSBdOwogICAgc3RydWN0IGxjb252ICAgKm5sX2xjb252OwogICAgCiAgICBfTENfY2hh cm1hcF9vYmpoZGxfdCAgbGNfY2hhcm1hcDsKICAgIF9MQ19jb2xsYXRlX29iamhkbF90ICBsY19j b2xsYXRlOwogICAgX0xDX2N0eXBlX29iamhkbF90ICAgIGxjX2N0eXBlOwogICAgX0xDX21vbmV0 YXJ5X29iamhkbF90IGxjX21vbmV0YXJ5OwogICAgX0xDX251bWVyaWNfb2JqaGRsX3QgIGxjX251 bWVyaWM7CiAgICBfTENfcmVzcF9vYmpoZGxfdCAgICAgbGNfcmVzcDsKICAgIF9MQ190aW1lX29i amhkbF90ICAgICBsY190aW1lOwogICAgCn0gX0xDX2xvY2FsZV90Owp0eXBlZGVmIHN0cnVjdCBf TENfbG9jYWxlX29iamhkbCBfTENfbG9jYWxlX29iamhkbF90OwpzdHJ1Y3QgX0xDX2xvY2FsZV9v YmpoZGwgewoJX0xDX2xvY2FsZV90ICpvYmo7Cgl2b2lkICooKiptZXRoKSgpOwp9Owp0eXBlZGVm IHN0cnVjdCBfTENfb2JqZWN0X2hhbmRsZSBfTENfb2JqZWN0X2hhbmRsZV90OwpzdHJ1Y3QgX0xD X29iamVjdF9oYW5kbGUgewogICAgdW5pb24gewoJX0xDX29iamVjdF90CSAgICAgIGxjX29iamVj dDsKCV9MQ19sb2NhbGVfb2JqaGRsX3QgICBsY19sb2NhbGU7CiAgICAgICAgX0xDX2NoYXJtYXBf b2JqaGRsX3QgIGxjX2NoYXJtYXA7CiAgICAgICAgX0xDX2NvbGxhdGVfb2JqaGRsX3QgIGxjX2Nv bGxhdGU7CiAgICAgICAgX0xDX2N0eXBlX29iamhkbF90ICAgIGxjX2N0eXBlOwogICAgICAgIF9M Q19tb25ldGFyeV9vYmpoZGxfdCBsY19tb25ldGFyeTsKICAgICAgICBfTENfbnVtZXJpY19vYmpo ZGxfdCAgbGNfbnVtZXJpYzsKICAgICAgICBfTENfcmVzcF9vYmpoZGxfdCAgICAgbGNfcmVzcDsK ICAgICAgICBfTENfdGltZV9vYmpoZGxfdCAgICAgbGNfdGltZTsKICAgIH0gb2JqOwogICAgdm9p ZCAgICAqKCoqbWV0aCkoKTsKfTsKdHlwZWRlZiBzdHJ1Y3QgewogICAgX0xDX29iamVjdF90CWhk cjsJCSAgIAogICAgX0xDX2xvY2FsZV9vYmpoZGxfdCBoYW5kbGU7CQkgICAKfSBfTENfbG9hZF9v YmplY3RfdDsKZXh0ZXJuIF9MQ19jaGFybWFwX29iamhkbF90ICBfX2xjX2NoYXJtYXA7CmV4dGVy biBfTENfY29sbGF0ZV9vYmpoZGxfdCAgX19sY19jb2xsYXRlOwpleHRlcm4gX0xDX2N0eXBlX29i amhkbF90ICAgIF9fbGNfY3R5cGU7CmV4dGVybiBfTENfbW9uZXRhcnlfb2JqaGRsX3QgX19sY19t b25ldGFyeTsKZXh0ZXJuIF9MQ19udW1lcmljX29iamhkbF90ICBfX2xjX251bWVyaWM7CmV4dGVy biBfTENfcmVzcF9vYmpoZGxfdCAgICAgX19sY19yZXNwOwpleHRlcm4gX0xDX3RpbWVfb2JqaGRs X3QgICAgIF9fbGNfdGltZTsKZXh0ZXJuIF9MQ19sb2NhbGVfb2JqaGRsX3QgICBfX2xjX2xvY2Fs ZTsKIyAyMyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDIgMyA0CiMgNTQgIi91c3IvaW5jbHVkZS9j dHlwZS5oIiAzIDQKCSAgICBleHRlcm4gaW50CWlzYWxwaGEoaW50KTsKCSAgICBleHRlcm4gaW50 CWlzYWxudW0oaW50KTsKCSAgICBleHRlcm4gaW50CWlzY250cmwoaW50KTsKCSAgICBleHRlcm4g aW50CWlzZGlnaXQoaW50KTsKCSAgICBleHRlcm4gaW50CWlzZ3JhcGgoaW50KTsKCSAgICBleHRl cm4gaW50CWlzbG93ZXIoaW50KTsKCSAgICBleHRlcm4gaW50CWlzcHJpbnQoaW50KTsKCSAgICBl eHRlcm4gaW50CWlzcHVuY3QoaW50KTsKCSAgICBleHRlcm4gaW50CWlzc3BhY2UoaW50KTsKCSAg ICBleHRlcm4gaW50CWlzdXBwZXIoaW50KTsKCSAgICBleHRlcm4gaW50CWlzeGRpZ2l0KGludCk7 CgkgICAgZXh0ZXJuIGludAl0b3VwcGVyKGludCk7CgkgICAgZXh0ZXJuIGludAl0b2xvd2VyKGlu dCk7CiMgMTA3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CgkgICAgZXh0ZXJuIGludAlpc2Fz Y2lpKGludCk7CgkgICAgZXh0ZXJuIGludAlpc3dhbHBoYSh3aW50X3QpOwoJICAgIGV4dGVybiBp bnQJaXN3YWxudW0od2ludF90KTsKCSAgICBleHRlcm4gaW50CWlzd2NudHJsKHdpbnRfdCk7Cgkg ICAgZXh0ZXJuIGludAlpc3dkaWdpdCh3aW50X3QpOwoJICAgIGV4dGVybiBpbnQJaXN3Z3JhcGgo d2ludF90KTsKCSAgICBleHRlcm4gaW50CWlzd2xvd2VyKHdpbnRfdCk7CgkgICAgZXh0ZXJuIGlu dAlpc3dwcmludCh3aW50X3QpOwoJICAgIGV4dGVybiBpbnQJaXN3cHVuY3Qod2ludF90KTsKCSAg ICBleHRlcm4gaW50CWlzd3NwYWNlKHdpbnRfdCk7CgkgICAgZXh0ZXJuIGludAlpc3d1cHBlcih3 aW50X3QpOwoJICAgIGV4dGVybiBpbnQJaXN3eGRpZ2l0KHdpbnRfdCk7CgkgICAgZXh0ZXJuIHdp bnRfdAl0b3d1cHBlcih3aW50X3QpOwoJICAgIGV4dGVybiB3aW50X3QJdG93bG93ZXIod2ludF90 KTsKCSAgICBleHRlcm4gaW50CWlzX3djdHlwZSh3aW50X3QsIHdjdHlwZV90KTsKCSAgICBleHRl cm4gaW50CWlzX2N0eXBlKGludCwgd2N0eXBlX3QpOwoJICAgIGV4dGVybiBpbnQJdG9hc2NpaShp bnQpOwoJICAgIGV4dGVybiB3Y3R5cGVfdAlnZXRfd2N0eXBlKGNoYXIgKik7CiMgMTc2ICIvdXNy L2luY2x1ZGUvY3R5cGUuaCIgMyA0CiMgNiAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2Nj LWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst My9jY3R5cGUiIDIgMwojIDEwNSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9w b3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQv c3RyYWl0cy5oIiAyIDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdHJp bmciIDEgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1p Ym0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0CiMgMTkgIi9hb2xuZXQv cGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2lu Y2x1ZGUvc3RyaW5nLmgiIDMgNAojIDc2ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2Mt bGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0cmluZy5oIiAzIDQKICAg ICAgICBleHRlcm4gdm9pZCAgICAgKm1lbWNocihjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsK ICAgICAgICBleHRlcm4gdm9pZCAgICAgKm1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6 ZV90KTsKICAgICAgICBleHRlcm4gdm9pZCAgICAgKm1lbXNldCh2b2lkICosIGludCwgc2l6ZV90 KTsKICAgICAgICBleHRlcm4gc2l6ZV90ICAgc3RyY3Nwbihjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKik7CiAgICAgICAgZXh0ZXJuIHNpemVfdCAgIHN0cmxlbihjb25zdCBjaGFyICopOwogICAg ICAgIGV4dGVybiBzaXplX3QgICBzdHJzcG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwoj IDEwOCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz LjIuNS8yLjk1LjMvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CiAgICAgICAgZXh0ZXJuIHZvaWQgICAg ICptZW1tb3ZlKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVybiBj aGFyICAgICAqc3RyY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqKTsKICAgICAgICBleHRlcm4gY2hh ciAgICAgKnN0cm5jcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiAgICAgICAgZXh0 ZXJuIGNoYXIgICAgICpzdHJjYXQoY2hhciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVy biBjaGFyICAgICAqc3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKICAgICAg ICBleHRlcm4gaW50ICAgICAgbWVtY21wKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLHNpemVf dCk7CiAgICAgICAgZXh0ZXJuIGludCAgICAgIHN0cmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKik7CiAgICAgICAgZXh0ZXJuIGludCAgICAgIHN0cm5jbXAoY29uc3QgY2hhciAqLGNvbnN0 IGNoYXIgKixzaXplX3QpOwogICAgICAgIGV4dGVybiBpbnQgICAgICBzdHJuY29sbGVuKGNvbnN0 IGNoYXIgKiwgY29uc3QgaW50ICk7CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICpzdHJjaHIoY29u c3QgY2hhciAqLCBpbnQpOwogICAgICAgIGV4dGVybiBjaGFyICAgICAqc3RycGJyayhjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKik7CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICpzdHJyY2hyKGNv bnN0IGNoYXIgKiwgaW50KTsKICAgICAgICBleHRlcm4gY2hhciAgICAgKnN0cnN0cihjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKik7CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICpzdHJ0b2soY2hh ciAqLCBjb25zdCBjaGFyICopOwogICAgICAgIGV4dGVybiBjaGFyICAgICAqc3RyZXJyb3IoaW50 KTsKICAgICAgICBleHRlcm4gaW50ICAgICAgc3RyY29sbChjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKik7CiAgICAgICAgZXh0ZXJuIHNpemVfdCBzdHJ4ZnJtKGNoYXIgKiwgY29uc3QgY2hhciAq LCBzaXplX3QpOwogICAgICAgIGV4dGVybiB2b2lkICAgICAqbWVtY2NweSh2b2lkICosIGNvbnN0 IHZvaWQgKiwgaW50LCBzaXplX3QpOwojIDE3MyAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIv Z2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdHJpbmcuaCIgMyA0 CiAgICAgICAgZXh0ZXJuIGNoYXIgICAgICppbmRleChjb25zdCBjaGFyICosIGludCk7CiAgICAg ICAgZXh0ZXJuIGNoYXIgICAgICpyaW5kZXgoY29uc3QgY2hhciAqLCBpbnQpOwogICAgICAgIGV4 dGVybiBjaGFyICAgICAqc3RyZHVwKGNoYXIgKik7CiAgICAgICAgZXh0ZXJuIHZvaWQgICAgIHN3 YWIoY29uc3Qgdm9pZCAqLCB2b2lkICosIHNzaXplX3QpOyAKICAgICAgICBleHRlcm4gd2NoYXJf dCAgKndjc2NhdCh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiAgICAgICAgZXh0ZXJuIHdj aGFyX3QgICp3Y3NjaHIoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90KTsKICAgICAgICBleHRlcm4g aW50ICAgICAgd2NzY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAg ICBleHRlcm4gd2NoYXJfdCAgKndjc2NweSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiAg ICAgICAgZXh0ZXJuIHNpemVfdCAgIHdjc2NzcG4oY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hh cl90ICopOwogICAgICAgIGV4dGVybiBzaXplX3QgICB3Y3NsZW4oY29uc3Qgd2NoYXJfdCAqKTsK ICAgICAgICBleHRlcm4gd2NoYXJfdCAgKndjc25jYXQod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90 ICosIHNpemVfdCk7CiAgICAgICAgZXh0ZXJuIGludCAgICAgIHdjc25jbXAoY29uc3Qgd2NoYXJf dCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CiAgICAgICAgZXh0ZXJuIHdjaGFyX3QgICp3 Y3NuY3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVy biB3Y2hhcl90ICAqd2NzcGJyayhjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CiAg ICAgICAgZXh0ZXJuIHdjaGFyX3QgICp3Y3NyY2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7 CiAgICAgICAgZXh0ZXJuIHNpemVfdCAgIHdjc3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdj aGFyX3QgKik7CiAgICAgICAgZXh0ZXJuIHdjaGFyX3QgICp3Y3N0b2sod2NoYXJfdCAqLCBjb25z dCB3Y2hhcl90ICopOwogICAgICAgIGV4dGVybiB3Y2hhcl90ICAqd2Nzd2NzKGNvbnN0IHdjaGFy X3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAgICBleHRlcm4gaW50ICAgICAgd2Nzd2lkdGgo Y29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwogICAgICAgIGV4dGVybiBpbnQgICAgICB3Y3dpZHRo KGNvbnN0IHdjaGFyX3QpOwogICAgICAgIGV4dGVybiBpbnQgICAgICB3Y3Njb2xsKGNvbnN0IHdj aGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKICAgICAgICBleHRlcm4gc2l6ZV90IHdjc3hmcm0o d2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CiMgMjQxICIvYW9sbmV0L3BrZy9n Y2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRl L3N0cmluZy5oIiAzIDQKIyA3ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdHJp bmciIDIgMwojIDk0ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMt aWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdHJpbmciIDMK IyAxMDYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4 My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAz CnN0cnVjdCBzdHJpbmdfY2hhcl90cmFpdHMgPGNoYXI+IHsKICB0eXBlZGVmIGNoYXIgY2hhcl90 eXBlOwogIHN0YXRpYyB2b2lkIGFzc2lnbiAoY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBl JiBjMikKICAgIHsgYzEgPSBjMjsgfQogIHN0YXRpYyBib29sIGVxIChjb25zdCBjaGFyX3R5cGUg JiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0KICBz dGF0aWMgYm9vbCBuZSAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikK ICAgIHsgcmV0dXJuIChjMSAhPSBjMik7IH0KICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90 eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA8IGMyKTsgfQog IHN0YXRpYyBjaGFyX3R5cGUgZW9zICgpIHsgcmV0dXJuIDA7IH0KICBzdGF0aWMgYm9vbCBpc19k ZWwoY2hhcl90eXBlIGEpIHsgcmV0dXJuIGlzc3BhY2UoYSk7IH0KICBzdGF0aWMgaW50IGNvbXBh cmUgKGNvbnN0IGNoYXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQog ICAgeyByZXR1cm4gbWVtY21wIChzMSwgczIsIG4pOyB9CiAgc3RhdGljIHNpemVfdCBsZW5ndGgg KGNvbnN0IGNoYXJfdHlwZSogcykKICAgIHsgcmV0dXJuIHN0cmxlbiAocyk7IH0KICBzdGF0aWMg Y2hhcl90eXBlKiBjb3B5IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMyLCBzaXpl X3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkgKHMxLCBzMiwgbik7IH0KICBz dGF0aWMgY2hhcl90eXBlKiBtb3ZlIChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5cGUqIHMy LCBzaXplX3QgbikKICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1tb3ZlIChzMSwgczIsIG4p OyB9CiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFyX3R5 cGUmIGMsIHNpemVfdCBuKQogICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbXNldCAoczEsIGMs IG4pOyB9Cn07CiMgMTU5ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2Vy cGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9zdHJh aXRzLmgiIDMKfSAgCiMgMzYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93 ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jh c3RyaW5nLmgiIDIgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93 ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxsb2Mu aCIgMSAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgi IDEgMwojIDE0OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgi IDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFp eDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9wb3dlcnBjLWlibS1haXgzLjIuNS9pbmNsdWRlL19H X2NvbmZpZy5oIiAxIDMgNAogIAp0eXBlZGVmICAgICAgICAgIGludCAgIF9HX2ludDhfdCBfX2F0 dHJpYnV0ZV9fKChfX21vZGVfXyhfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50ICBfR191 aW50OF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fUUlfXykpKTsKdHlwZWRlZiAgICAgICAg ICBpbnQgIF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ISV9fKSkpOwp0eXBl ZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0hJ X18pKSk7CnR5cGVkZWYgICAgICAgICAgaW50ICBfR19pbnQzMl90IF9fYXR0cmlidXRlX18oKF9f bW9kZV9fKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRy aWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOwp0eXBlZGVmICAgICAgICAgIGludCAgX0dfaW50 NjRfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0RJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQg aW50IF9HX3VpbnQ2NF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsKX19leHRl bnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBfR19sbG9uZzsKX19leHRlbnNpb25fXyB0eXBlZGVm IHVuc2lnbmVkIGxvbmcgbG9uZyBfR191bGxvbmc7CnR5cGVkZWYgaW50IF9HX2Nsb2NrX3Q7CnR5 cGVkZWYgdW5zaWduZWQgbG9uZyBfR19kZXZfdDsKdHlwZWRlZiBsb25nIF9HX2Zwb3NfdDsKdHlw ZWRlZiB1bnNpZ25lZCBsb25nIF9HX2dpZF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX0dfaW5v X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfR19tb2RlX3Q7CnR5cGVkZWYgc2hvcnQgX0dfbmxp bmtfdDsKdHlwZWRlZiBsb25nIF9HX29mZl90Owp0eXBlZGVmIGludCBfR19waWRfdDsKdHlwZWRl ZiBpbnQgX0dfcHRyZGlmZl90Owp0eXBlZGVmIGludCAgIF9HX3NpZ3NldF90Owp0eXBlZGVmIGxv bmcgdW5zaWduZWQgaW50IF9HX3NpemVfdDsKdHlwZWRlZiBsb25nIF9HX3RpbWVfdDsKdHlwZWRl ZiB1bnNpZ25lZCBsb25nIF9HX3VpZF90Owp0eXBlZGVmIHNob3J0IHVuc2lnbmVkIGludCBfR193 Y2hhcl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX0dfc3NpemVfdDsKdHlwZWRlZiBpbnQgX0dfd2lu dF90Owp0eXBlZGVmIGNoYXIgKiBfR192YV9saXN0OwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1 LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVm LmgiIDEgMyA0CiMgMTkgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJw Yy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAojIDYxICIvYW9sbmV0 L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9p bmNsdWRlL3N0ZGRlZi5oIiAzIDQKIyAxMjYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2dj Yy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoj IDE4OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz LjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CiMgMjY5ICIvYW9sbmV0L3BrZy9nY2Mt Mi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0 ZGRlZi5oIiAzIDQKIyAzMTcgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93 ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAojIDg2ICIvYW9s bmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUu My8uLi8uLi8uLi8uLi9wb3dlcnBjLWlibS1haXgzLjIuNS9pbmNsdWRlL19HX2NvbmZpZy5oIiAy IDMgNAojIDE1MSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgi IDIgMwojIDE3OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgi IDMKIyAyMzQgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t YWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5oIiAz CiMgMjQ4ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFp eDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoj IDMxNiAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz LjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKIyAx OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIu NS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGxvYy5oIiAyIDMKIyAxICIvYW9s bmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUu My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAxIDMKIyAxICIvYW9sbmV0 L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8u Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3RyZWFtLmgiIDEgMwojcHJhZ21hIGludGVyZmFj ZQojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4 My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDEgMwoj cHJhZ21hIGludGVyZmFjZQogICAKZXh0ZXJuICJDIiB7CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIu OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9saWJpby5oIiAxIDMKIyA1NSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9saWJpby5oIiAzCiMgMTA0ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2Mt bGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z L2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7ICBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTc1ICIv YW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIu OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2xpYmlvLmgiIDMKICAgIHR5cGVkZWYgdm9p ZCBfSU9fbG9ja190OwpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9u ZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CiAgIAogICAKICBpbnQgX3BvczsKIyAyMDgg Ii9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUv Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMwp9OwpzdHJ1Y3QgX0lP X0ZJTEUgewogIGludCBfZmxhZ3M7CQkgCiAgIAogICAKICBjaGFyKiBfSU9fcmVhZF9wdHI7CSAK ICBjaGFyKiBfSU9fcmVhZF9lbmQ7CSAKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwkgCiAgY2hhciog X0lPX3dyaXRlX2Jhc2U7CSAKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwkgCiAgY2hhciogX0lPX3dy aXRlX2VuZDsJIAogIGNoYXIqIF9JT19idWZfYmFzZTsJIAogIGNoYXIqIF9JT19idWZfZW5kOwkg CiAgIAogIGNoYXIgKl9JT19zYXZlX2Jhc2U7ICAKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7ICAg CiAgY2hhciAqX0lPX3NhdmVfZW5kOyAgCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwog IHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsK ICBfR19vZmZfdCAgX29mZnNldDsKICAgCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAg Y2hhciBfdW51c2VkOwogIGNoYXIgX3Nob3J0YnVmWzFdOwogICAKfTsKc3RydWN0IF9JT19GSUxF X3BsdXM7CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fc3RkaW5fLCBfSU9fc3Rkb3V0 XywgX0lPX3N0ZGVycl87CnR5cGVkZWYgc3RydWN0CnsKICBfR19zc2l6ZV90ICAoKnJlYWQpICAo c3RydWN0IF9JT19GSUxFICosIHZvaWQgKiwgX0dfc3NpemVfdCApICA7CiAgX0dfc3NpemVfdCAg KCp3cml0ZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgY29uc3Qgdm9pZCAqLCBfR19zc2l6ZV90ICkg IDsKICBfR19vZmZfdCAgKCpzZWVrKSAgKHN0cnVjdCBfSU9fRklMRSAqLCBfR19vZmZfdCAsIGlu dCkgIDsKICBpbnQgKCpjbG9zZSkgIChzdHJ1Y3QgX0lPX0ZJTEUgKikgIDsKfSBfSU9fY29va2ll X2lvX2Z1bmN0aW9uc190OwpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlCnsKICBzdHJ1Y3QgX0lPX0ZJ TEUgZmlsZTsKICBjb25zdCB2b2lkICp2dGFibGU7CiAgdm9pZCAqY29va2llOwogIF9JT19jb29r aWVfaW9fZnVuY3Rpb25zX3QgaW9fZnVuY3Rpb25zOwp9OwpleHRlcm4gIkMiIHsKZXh0ZXJuIGlu dCBfX3VuZGVyZmxvdyAgKF9JT19GSUxFICopICA7CmV4dGVybiBpbnQgX191ZmxvdyAgKF9JT19G SUxFICopICA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAgKF9JT19GSUxFICosIGludCkgIDsKZXh0 ZXJuIGludCBfSU9fZ2V0YyAgKF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4gaW50IF9JT19wdXRj ICAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApICA7CmV4dGVybiBpbnQgX0lPX2Zlb2YgIChfSU9f RklMRSAqX19mcCkgIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yICAoX0lPX0ZJTEUgKl9fZnApICA7 CmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAgKF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4g dm9pZCBfSU9fZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxv Y2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlICAoX0lP X0ZJTEUgKikgIDsKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAgKF9JT19GSUxFICosIGNvbnN0IGNo YXIgKiwgX0dfdmFfbGlzdCAsIGludCAqKSAgOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAgKF9J T19GSUxFICosIGNvbnN0IGNoYXIgKiwgX0dfdmFfbGlzdCApICA7CmV4dGVybiBfR19zc2l6ZV90 ICBfSU9fcGFkbiAgKF9JT19GSUxFICosIGludCwgX0dfc3NpemVfdCApICA7CmV4dGVybiBfR19z aXplX3QgIF9JT19zZ2V0biAgKF9JT19GSUxFICosIHZvaWQgKiwgX0dfc2l6ZV90ICkgIDsKZXh0 ZXJuIF9HX29mZl90ICBfSU9fc2Vla29mZiAgKF9JT19GSUxFICosIF9HX29mZl90ICwgaW50LCBp bnQpICA7CmV4dGVybiBfR19vZmZfdCAgX0lPX3NlZWtwb3MgIChfSU9fRklMRSAqLCBfR19vZmZf dCAsIGludCkgIDsKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgIChfSU9fRklMRSAq KSAgOwp9CiMgMzYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1p Ym0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgi IDIgMwp9CmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07ICAKY2xhc3Mgb3N0cmVhbTsgY2xh c3Mgc3RyZWFtYnVmOwp0eXBlZGVmIF9HX29mZl90ICBzdHJlYW1vZmY7CnR5cGVkZWYgX0dfb2Zm X3QgIHN0cmVhbXBvczsKdHlwZWRlZiBfR19zc2l6ZV90ICBzdHJlYW1zaXplOwp0eXBlZGVmIHVu c2lnbmVkIGxvbmcgX19mbXRmbGFnczsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9faW9zdGF0ZTsK c3RydWN0IF9pb3NfZmllbGRzCnsgIAogICAgc3RyZWFtYnVmICpfc3RyYnVmOwogICAgb3N0cmVh bSogX3RpZTsKICAgIGludCBfd2lkdGg7CiAgICBfX2ZtdGZsYWdzIF9mbGFnczsKICAgIHNob3J0 ICBfZmlsbDsKICAgIF9faW9zdGF0ZSBfc3RhdGU7CiAgICBfX2lvc3RhdGUgX2V4Y2VwdGlvbnM7 CiAgICBpbnQgX3ByZWNpc2lvbjsKICAgIHZvaWQgKl9hcnJheXM7ICAKfTsKIyAxMjQgIi9hb2xu ZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4z Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyZWFtYnVmLmgiIDMKY2xhc3MgaW9zIDogcHVi bGljIF9pb3NfZmllbGRzIHsKICBpb3MmIG9wZXJhdG9yPShpb3MmKTsgICAKICBpb3MgKGNvbnN0 IGlvcyYpOyAgCiAgcHVibGljOgogICAgdHlwZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOwogICAg dHlwZWRlZiBpbnQgaW9zdGF0ZTsKICAgIHR5cGVkZWYgaW50IG9wZW5tb2RlOwogICAgdHlwZWRl ZiBfR19zc2l6ZV90ICBzdHJlYW1zaXplOwogICAgZW51bSBpb19zdGF0ZSB7Cglnb29kYml0ID0g MCAsCgllb2ZiaXQgPSAxICwKCWZhaWxiaXQgPSAyICwKCWJhZGJpdCA9IDQgIH07CiAgICBlbnVt IG9wZW5fbW9kZSB7CglpbiA9IDEgLAoJb3V0ID0gMiAsCglhdGUgPSA0ICwKCWFwcCA9IDggLAoJ dHJ1bmMgPSAxNiAsCglub2NyZWF0ZSA9IDMyICwKCW5vcmVwbGFjZSA9IDY0ICwKCWJpbiA9IDEy OCAsICAKCWJpbmFyeSA9IDEyOCAgfTsKICAgIGVudW0gc2Vla19kaXIgeyBiZWcsIGN1ciwgZW5k fTsKICAgIHR5cGVkZWYgZW51bSBzZWVrX2RpciBzZWVrZGlyOwogICAgIAogICAgZW51bSB7IHNr aXB3cz0gMDEgLAoJICAgbGVmdD0gMDIgLCByaWdodD0gMDQgLCBpbnRlcm5hbD0gMDEwICwKCSAg IGRlYz0gMDIwICwgb2N0PSAwNDAgLCBoZXg9IDAxMDAgLAoJICAgc2hvd2Jhc2U9IDAyMDAgLCBz aG93cG9pbnQ9IDA0MDAgLAoJICAgdXBwZXJjYXNlPSAwMTAwMCAsIHNob3dwb3M9IDAyMDAwICwK CSAgIHNjaWVudGlmaWM9IDA0MDAwICwgZml4ZWQ9IDAxMDAwMCAsCgkgICB1bml0YnVmPSAwMjAw MDAgLCBzdGRpbz0gMDQwMDAwIAoJICAgfTsKICAgIGVudW0geyAgCgliYXNlZmllbGQ9ZGVjK29j dCtoZXgsCglmbG9hdGZpZWxkID0gc2NpZW50aWZpYytmaXhlZCwKCWFkanVzdGZpZWxkID0gbGVm dCtyaWdodCtpbnRlcm5hbAogICAgfTsKIyAxNzcgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGli L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv ZysrLTMvc3RyZWFtYnVmLmgiIDMKICAgIG9zdHJlYW0qIHRpZSgpIGNvbnN0IHsgcmV0dXJuIF90 aWU7IH0KICAgIG9zdHJlYW0qIHRpZShvc3RyZWFtKiB2YWwpIHsgb3N0cmVhbSogc2F2ZT1fdGll OyBfdGllPXZhbDsgcmV0dXJuIHNhdmU7IH0KICAgICAKICAgIHNob3J0ICBmaWxsKCkgY29uc3Qg eyByZXR1cm4gX2ZpbGw7IH0KICAgIHNob3J0ICBmaWxsKHNob3J0ICBuZXdmKQoJe3Nob3J0ICBv bGRmID0gX2ZpbGw7IF9maWxsID0gbmV3ZjsgcmV0dXJuIG9sZGY7fQogICAgZm10ZmxhZ3MgZmxh Z3MoKSBjb25zdCB7IHJldHVybiBfZmxhZ3M7IH0KICAgIGZtdGZsYWdzIGZsYWdzKGZtdGZsYWdz IG5ld192YWwpIHsKCWZtdGZsYWdzIG9sZF92YWwgPSBfZmxhZ3M7IF9mbGFncyA9IG5ld192YWw7 IHJldHVybiBvbGRfdmFsOyB9CiAgICBpbnQgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX3By ZWNpc2lvbjsgfQogICAgaW50IHByZWNpc2lvbihpbnQgbmV3cCkgewoJdW5zaWduZWQgc2hvcnQg b2xkcCA9IF9wcmVjaXNpb247IF9wcmVjaXNpb24gPSAodW5zaWduZWQgc2hvcnQpbmV3cDsKCXJl dHVybiBvbGRwOyB9CiAgICBmbXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCkgewoJZm10ZmxhZ3Mg b2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyB8PSB2YWw7IHJldHVybiBvbGRiaXRzOyB9CiAgICBm bXRmbGFncyBzZXRmKGZtdGZsYWdzIHZhbCwgZm10ZmxhZ3MgbWFzaykgewoJZm10ZmxhZ3Mgb2xk Yml0cyA9IF9mbGFnczsKCV9mbGFncyA9IChfZmxhZ3MgJiB+bWFzaykgfCAodmFsICYgbWFzayk7 IHJldHVybiBvbGRiaXRzOyB9CiAgICBmbXRmbGFncyB1bnNldGYoZm10ZmxhZ3MgbWFzaykgewoJ Zm10ZmxhZ3Mgb2xkYml0cyA9IF9mbGFnczsKCV9mbGFncyAmPSB+bWFzazsgcmV0dXJuIG9sZGJp dHM7IH0KICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF93aWR0aDsgfQogICAgaW50IHdp ZHRoKGludCB2YWwpIHsgaW50IHNhdmUgPSBfd2lkdGg7IF93aWR0aCA9IHZhbDsgcmV0dXJuIHNh dmU7IH0KICAgIHZvaWQgX3Rocm93X2ZhaWx1cmUoKSBjb25zdCB7IH0KICAgIHZvaWQgY2xlYXIo aW9zdGF0ZSBzdGF0ZSA9IDApIHsKCV9zdGF0ZSA9IF9zdHJidWYgPyBzdGF0ZSA6IHN0YXRlfGJh ZGJpdDsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAg dm9pZCBzZXQoaW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBmbGFnOwoJaWYgKF9zdGF0ZSAmIF9l eGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNldHN0YXRlKGlvc3RhdGUg ZmxhZykgeyBfc3RhdGUgfD0gZmxhZzsgIAoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhy b3dfZmFpbHVyZSgpOyB9CiAgICBpbnQgZ29vZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSA9PSAw OyB9CiAgICBpbnQgZW9mKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjplb2ZiaXQ7IH0K ICAgIGludCBmYWlsKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgKGlvczo6YmFkYml0fGlvczo6 ZmFpbGJpdCk7IH0KICAgIGludCBiYWQoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmJh ZGJpdDsgfQogICAgaW9zdGF0ZSByZHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlOyB9CiAg ICBvcGVyYXRvciB2b2lkKigpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKSA/ICh2b2lkKikwIDogKHZv aWQqKSgtMSk7IH0KICAgIGludCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBmYWlsKCk7IH0K ICAgIGlvc3RhdGUgZXhjZXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIF9leGNlcHRpb25zOyB9CiAg ICB2b2lkIGV4Y2VwdGlvbnMoaW9zdGF0ZSBlbmFibGUpIHsKCV9leGNlcHRpb25zID0gZW5hYmxl OwoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICBzdHJl YW1idWYqIHJkYnVmKCkgY29uc3QgeyByZXR1cm4gX3N0cmJ1ZjsgfQogICAgc3RyZWFtYnVmKiBy ZGJ1ZihzdHJlYW1idWYgKl9zKSB7CiAgICAgIHN0cmVhbWJ1ZiAqX29sZCA9IF9zdHJidWY7IF9z dHJidWYgPSBfczsgY2xlYXIgKCk7IHJldHVybiBfb2xkOyB9CiAgICBzdGF0aWMgaW50IHN5bmNf d2l0aF9zdGRpbyhpbnQgb24pOwogICAgc3RhdGljIHZvaWQgc3luY193aXRoX3N0ZGlvKCkgeyBz eW5jX3dpdGhfc3RkaW8oMSk7IH0KICAgIHN0YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOwogICAg c3RhdGljIGludCB4YWxsb2MoKTsKICAgIHZvaWQqJiBwd29yZChpbnQpOwogICAgdm9pZCogcHdv cmQoaW50KSBjb25zdDsKICAgIGxvbmcmIGl3b3JkKGludCk7CiAgICBsb25nIGl3b3JkKGludCkg Y29uc3Q7CiAgICAgCiAgICBjbGFzcyBJbml0IHsKICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7 IH0KICAgIH07CiAgcHJvdGVjdGVkOgogICAgaW5saW5lIGlvcyhzdHJlYW1idWYqIHNiID0gMCwg b3N0cmVhbSogdGllX3RvID0gMCk7CiAgICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7CiAgICBpbmxp bmUgdm9pZCBpbml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZSA9IDApOwp9Owp0eXBlZGVm IGlvczo6c2Vla19kaXIgX3NlZWtfZGlyOwpjbGFzcyBzdHJlYW1tYXJrZXIgOiBwcml2YXRlIF9J T19tYXJrZXIgewogICAgZnJpZW5kIGNsYXNzIHN0cmVhbWJ1ZjsKICAgIHZvaWQgc2V0X29mZnNl dChpbnQgb2Zmc2V0KSB7IF9wb3MgPSBvZmZzZXQ7IH0KICBwdWJsaWM6CiAgICBzdHJlYW1tYXJr ZXIoc3RyZWFtYnVmICpzYik7CiAgICB+c3RyZWFtbWFya2VyKCk7CiAgICBpbnQgc2F2aW5nKCkg eyByZXR1cm4gIDE7IH0KICAgIGludCBkZWx0YShzdHJlYW1tYXJrZXImKTsKICAgIGludCBkZWx0 YSgpOwp9OwpzdHJ1Y3Qgc3RyZWFtYnVmIDogcHVibGljIF9JT19GSUxFIHsgIAogICAgZnJpZW5k IGNsYXNzIGlvczsKICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIG9z dHJlYW07CiAgICBmcmllbmQgY2xhc3Mgc3RyZWFtbWFya2VyOwogICAgY29uc3Qgdm9pZCAqJl92 dGFibGUoKSB7IHJldHVybiAqKGNvbnN0IHZvaWQqKikoKF9JT19GSUxFKil0aGlzICsgMSk7IH0K ICBwcm90ZWN0ZWQ6CiAgICBzdGF0aWMgc3RyZWFtYnVmKiBfbGlzdF9hbGw7ICAKICAgIF9JT19G SUxFKiYgeGNoYWluKCkgeyByZXR1cm4gX2NoYWluOyB9CiAgICB2b2lkIF91bl9saW5rKCk7CiAg ICB2b2lkIF9saW5rX2luKCk7CiAgICBjaGFyKiBncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4g X2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9fcmVhZF9wdHI7IH0KICAgIGNo YXIqIHBwdHIoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfcHRyOyB9CiAgICBjaGFyKiBlZ3B0 cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2ZV9lbmQg OiBfSU9fcmVhZF9lbmQ7IH0KICAgIGNoYXIqIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX0lPX3dy aXRlX2VuZDsgfQogICAgY2hhciogcGJhc2UoKSBjb25zdCB7IHJldHVybiBfSU9fd3JpdGVfYmFz ZTsgfQogICAgY2hhciogZWJhY2soKSBjb25zdAogICAgICB7IHJldHVybiBfZmxhZ3MgICYgMHgx MDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jhc2U7fQogICAgY2hhciogYmFzZSgpIGNv bnN0IHsgcmV0dXJuIF9JT19idWZfYmFzZTsgfQogICAgY2hhciogZWJ1ZigpIGNvbnN0IHsgcmV0 dXJuIF9JT19idWZfZW5kOyB9CiAgICBpbnQgYmxlbigpIGNvbnN0IHsgcmV0dXJuIF9JT19idWZf ZW5kIC0gX0lPX2J1Zl9iYXNlOyB9CiAgICB2b2lkIHhwdXRfY2hhcihjaGFyIGMpIHsgKl9JT193 cml0ZV9wdHIrKyA9IGM7IH0KICAgIGludCB4ZmxhZ3MoKSB7IHJldHVybiBfZmxhZ3MgOyB9CiAg ICBpbnQgeGZsYWdzKGludCBmKSB7aW50IGZsID0gX2ZsYWdzIDsgX2ZsYWdzICA9IGY7IHJldHVy biBmbDt9CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZikgeyBfZmxhZ3MgIHw9IGY7IH0KICAgIHZv aWQgeHNldGZsYWdzKGludCBmLCBpbnQgbWFzaykKICAgICAgeyBfZmxhZ3MgID0gKF9mbGFncyAg JiB+bWFzaykgfCAoZiAmIG1hc2spOyB9CiAgICB2b2lkIGdidW1wKGludCBuKQogICAgICB7IF9m bGFncyAgJiAweDEwMCAgPyAoX0lPX3NhdmVfYmFzZSs9bik6KF9JT19yZWFkX3B0cis9bik7fQog ICAgdm9pZCBwYnVtcChpbnQgbikgeyBfSU9fd3JpdGVfcHRyICs9IG47IH0KICAgIHZvaWQgc2V0 YihjaGFyKiBiLCBjaGFyKiBlYiwgaW50IGE9MCk7CiAgICB2b2lkIHNldHAoY2hhciogcCwgY2hh ciogZXApCiAgICAgIHsgX0lPX3dyaXRlX2Jhc2U9X0lPX3dyaXRlX3B0cj1wOyBfSU9fd3JpdGVf ZW5kPWVwOyB9CiAgICB2b2lkIHNldGcoY2hhciogZWIsIGNoYXIqIGcsIGNoYXIgKmVnKSB7CiAg ICAgIGlmIChfZmxhZ3MgICYgMHgxMDAgKSBfSU9fZnJlZV9iYWNrdXBfYXJlYSh0aGlzKTsgCiAg ICAgIF9JT19yZWFkX2Jhc2UgPSBlYjsgX0lPX3JlYWRfcHRyID0gZzsgX0lPX3JlYWRfZW5kID0g ZWc7IH0KICAgIGNoYXIgKnNob3J0YnVmKCkgeyByZXR1cm4gX3Nob3J0YnVmOyB9CiAgICBpbnQg aW5fYmFja3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9CiAgICAgCiAgICBjaGFyICpH YmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX2Jh c2U7IH0KICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9f c2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAgIGNoYXIgKkJiYXNlKCkgeyByZXR1 cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQogICAgY2hh ciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUJw dHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2VuZCA6IF9JT19zYXZlX2VuZDsg fQogICAgY2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFyICpl TnB0cigpIHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAgaW50IGhhdmVfYmFja3VwKCkgeyBy ZXR1cm4gX0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAgICBpbnQgaGF2ZV9tYXJrZXJzKCkg eyByZXR1cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAgdm9pZCBmcmVlX2JhY2t1cF9hcmVh KCk7CiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAgIGludCBwdXRfbW9kZSgpIHsgcmV0 dXJuIF9mbGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRjaF90b19nZXRfbW9kZSgpOwogICAg CiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoKICAgIHN0YXRpYyBpbnQgZmx1 c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGluZWJ1ZmZlcmVkKCk7ICAKICAg IHZpcnR1YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMgPSAo LTEpICk7ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCB1 ZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOwogICAgdmlydHVhbCBz dHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVh bCBzdHJlYW1zaXplIHhzZ2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgdmlydHVhbCBz dHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1vZGU9aW9zOjppbnxp b3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrcG9zKHN0cmVhbXBvcyBwb3MsIGlu dCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCk7CiAgICBzdHJlYW1wb3MgcHVic2Vla29mZihzdHJl YW1vZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpCiAgICAgIHsg cmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsgfQogICAgc3RyZWFtcG9zIHB1 YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KQogICAg ICB7IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBtb2RlKTsgfQogICAgc3RyZWFtcG9z IHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0 KTsKICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6 aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBwLCBpbnQg bGVuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1YWwgaW50IGRvYWxsb2NhdGUo KTsKICAgIGludCBzZWVrbWFyayhzdHJlYW1tYXJrZXImIG1hcmssIGludCBkZWx0YSA9IDApOwog ICAgaW50IHNwdXRiYWNrYyhjaGFyIGMpOwogICAgaW50IHN1bmdldGMoKTsKICAgIGludCB1bmJ1 ZmZlcmVkKCkgeyByZXR1cm4gX2ZsYWdzICYgMiAgPyAxIDogMDsgfQogICAgaW50IGxpbmVidWZm ZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDB4MjAwICA/IDEgOiAwOyB9CiAgICB2b2lkIHVuYnVm ZmVyZWQoaW50IGkpCgl7IGlmIChpKSBfZmxhZ3MgfD0gMiA7IGVsc2UgX2ZsYWdzICY9IH4yIDsg fQogICAgdm9pZCBsaW5lYnVmZmVyZWQoaW50IGkpCgl7IGlmIChpKSBfZmxhZ3MgfD0gMHgyMDAg OyBlbHNlIF9mbGFncyAmPSB+MHgyMDAgOyB9CiAgICBpbnQgYWxsb2NhdGUoKSB7ICAKCWlmIChi YXNlKCkgfHwgdW5idWZmZXJlZCgpKSByZXR1cm4gMDsKCWVsc2UgcmV0dXJuIGRvYWxsb2NhdGUo KTsgfQogICAgIAogICAgdm9pZCBhbGxvY2J1ZigpIHsgaWYgKGJhc2UoKSA9PSBfX251bGwgKSBk b2FsbG9jYnVmKCk7IH0KICAgIHZvaWQgZG9hbGxvY2J1ZigpOwogICAgaW50IGluX2F2YWlsKCkg eyByZXR1cm4gX0lPX3JlYWRfZW5kIC0gX0lPX3JlYWRfcHRyOyB9CiAgICBpbnQgb3V0X3dhaXRp bmcoKSB7IHJldHVybiBfSU9fd3JpdGVfcHRyIC0gX0lPX3dyaXRlX2Jhc2U7IH0KICAgIHN0cmVh bXNpemUgc3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiB4c3B1dG4o cywgbik7IH0KICAgIHN0cmVhbXNpemUgcGFkbihjaGFyIHBhZCwgc3RyZWFtc2l6ZSBuKSB7IHJl dHVybiBfSU9fcGFkbih0aGlzLCBwYWQsIG4pOyB9CiAgICBzdHJlYW1zaXplIHNnZXRuKGNoYXIq IHMsIHN0cmVhbXNpemUgbikgeyByZXR1cm4gX0lPX3NnZXRuKHRoaXMsIHMsIG4pOyB9CiAgICBp bnQgaWdub3JlKGludCk7CiAgICBpbnQgZ2V0X2NvbHVtbigpOwogICAgaW50IHNldF9jb2x1bW4o aW50KTsKICAgIGxvbmcgc2dldGxpbmUoY2hhciogYnVmLCBfR19zaXplX3QgIG4sIGNoYXIgZGVs aW0sIGludCBwdXRiYWNrX2RlbGltKTsKICAgIGludCBzcHV0YyhpbnQgYykgeyByZXR1cm4gX0lP X3B1dGMoYywgdGhpcyk7IH0KICAgIGludCBzYnVtcGMoKSB7IHJldHVybiBfSU9fZ2V0Yyh0aGlz KTsgfQogICAgaW50IHNnZXRjKCkgeyByZXR1cm4gKCggIHRoaXMgICktPl9JT19yZWFkX3B0ciA+ PSAoICB0aGlzICApLT5fSU9fcmVhZF9lbmQgJiYgX191bmRlcmZsb3cgKCAgdGhpcyAgKSA9PSAo LTEpICA/ICgtMSkgIDogKih1bnNpZ25lZCBjaGFyICopICggIHRoaXMgICktPl9JT19yZWFkX3B0 cikgIDsgfQogICAgaW50IHNuZXh0YygpIHsKCWlmIChfSU9fcmVhZF9wdHIgPj0gX0lPX3JlYWRf ZW5kICYmIF9fdW5kZXJmbG93KHRoaXMpID09ICgtMSkgKQoJICByZXR1cm4gKC0xKSA7CgllbHNl IHJldHVybiBfSU9fcmVhZF9wdHIrKywgc2dldGMoKTsgfQogICAgdm9pZCBzdG9zc2MoKSB7IGlm IChfSU9fcmVhZF9wdHIgPCBfSU9fcmVhZF9lbmQpIF9JT19yZWFkX3B0cisrOyB9CiAgICBpbnQg dnNjYW4oY2hhciBjb25zdCAqZm10MCwgX0dfdmFfbGlzdCAgYXAsIGlvcyogc3RyZWFtID0gX19u dWxsICk7CiAgICBpbnQgc2NhbihjaGFyIGNvbnN0ICpmbXQwIC4uLik7CiAgICBpbnQgdmZvcm0o Y2hhciBjb25zdCAqZm10MCwgX0dfdmFfbGlzdCAgYXApOwogICAgaW50IGZvcm0oY2hhciBjb25z dCAqZm10MCAuLi4pOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5c19yZWFkKGNoYXIqIGJ1Ziwg c3RyZWFtc2l6ZSBzaXplKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfd3JpdGUoY29uc3Qg Y2hhciosIHN0cmVhbXNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mgc3lzX3NlZWsoc3RyZWFt b2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBpbnQgc3lzX2Nsb3NlKCk7CiAgICB2aXJ0dWFs IGludCBzeXNfc3RhdCh2b2lkKik7ICAKfTsKY2xhc3MgZmlsZWJ1ZiA6IHB1YmxpYyBzdHJlYW1i dWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5pdCgpOwogIHB1YmxpYzoKICAgIHN0YXRpYyBj b25zdCBpbnQgb3BlbnByb3Q7ICAKICAgIGZpbGVidWYoKTsKICAgIGZpbGVidWYoaW50IGZkKTsK ICAgIGZpbGVidWYoaW50IGZkLCBjaGFyKiBwLCBpbnQgbGVuKTsKICAgIH5maWxlYnVmKCk7CiAg ICBmaWxlYnVmKiBhdHRhY2goaW50IGZkKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAq ZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOwogICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFy ICpmaWxlbmFtZSwgaW9zOjpvcGVubW9kZSBtb2RlLCBpbnQgcHJvdCA9IDA2NjQpOwogICAgdmly dHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgt MSkgKTsKICAgIGludCBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4gX2ZpbGVubyA+PSAwOyB9CiAg ICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBpc19vcGVuKCkgPyBfZmlsZW5vIDogKC0xKSA7IH0K ICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2aXJ0dWFsIGludCBkb2FsbG9jYXRlKCk7CiAgICB2 aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1p b3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwg aW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhzcHV0bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXpl IG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4oY2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZp cnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0ZWQ6ICAKICAgIGludCBpc19yZWFkaW5nKCkgeyBy ZXR1cm4gZWJhY2soKSAhPSBlZ3B0cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyByZXR1cm4g aXNfcmVhZGluZygpID8gIGdwdHIoKSA6IHBwdHIoKTsgfQogICAgIAogICAgY2hhciogZmlsZV9w dHIoKSB7IHJldHVybiBlR3B0cigpOyB9CiAgICAgCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lz X3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1wb3Mg c3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5 c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBzeXNfc3Rh dCh2b2lkKik7ICAKICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwp9OwppbmxpbmUgdm9pZCBp b3M6OmluaXQoc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7CgkJX3N0YXRlID0gc2Ig PyBpb3M6Omdvb2RiaXQgOiBpb3M6OmJhZGJpdDsgX2V4Y2VwdGlvbnM9MDsKCQlfc3RyYnVmPXNi OyBfdGllID0gdGllX3RvOyBfd2lkdGg9MDsgX2ZpbGw9JyAnOwoJCV9mbGFncz1pb3M6OnNraXB3 c3xpb3M6OmRlYzsKCQlfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9CmlubGluZSBpb3M6Omlv cyhzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3RvKTsgfQpp bmxpbmUgaW9zOjp+aW9zKCkgewogICAgIAogICAgIAogICAgb3BlcmF0b3IgZGVsZXRlW10gKF9h cnJheXMpOwp9Cn0gIAojIDMxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2lvc3Ry ZWFtLmgiIDIgMwpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFtOyBjbGFzcyBvc3RyZWFtOwp0 eXBlZGVmIGlvcyYgKCpfX21hbmlwKShpb3MmKTsKdHlwZWRlZiBpc3RyZWFtJiAoKl9faW1hbmlw KShpc3RyZWFtJik7CnR5cGVkZWYgb3N0cmVhbSYgKCpfX29tYW5pcCkob3N0cmVhbSYpOwpleHRl cm4gaXN0cmVhbSYgd3MoaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZsdXNoKG9zdHJl YW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsKZXh0ZXJuIG9z dHJlYW0mIGVuZHMob3N0cmVhbSYgb3V0cyk7CmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1Ymxp YyBpb3MKewogICAgIAogICAgdm9pZCBkb19vc2Z4KCk7CiAgcHVibGljOgogICAgb3N0cmVhbSgp IHsgfQogICAgb3N0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVkPSBfX251bGwgKTsK ICAgIGludCBvcGZ4KCkgewoJaWYgKCFnb29kKCkpIHJldHVybiAwOwoJZWxzZSB7IGlmIChfdGll KSBfdGllLT5mbHVzaCgpOyAgOyByZXR1cm4gMTt9IH0KICAgIHZvaWQgb3NmeCgpIHsgIDsKCQkg IGlmIChmbGFncygpICYgKGlvczo6dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKCQkgICAgICBkb19vc2Z4 KCk7IH0KICAgIG9zdHJlYW0mIGZsdXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9z dHJidWYtPnNwdXRjKGMpOyByZXR1cm4gKnRoaXM7IH0KICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0 IGNoYXIgKnMsIHN0cmVhbXNpemUgbik7CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCB1bnNpZ25l ZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFy KilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQgY2hhciAqcywgc3RyZWFt c2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0 cmVhbSYgd3JpdGUoY29uc3Qgdm9pZCAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3 cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgc2Vla3Aoc3RyZWFtcG9zKTsK ICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0 ZWxscCgpOwogICAgb3N0cmVhbSYgZm9ybShjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIG9z dHJlYW0mIHZmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCwgX0dfdmFfbGlzdCAgYXJncyk7CiAgICBv c3RyZWFtJiBvcGVyYXRvcjw8KGNoYXIgYyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2ln bmVkIGNoYXIgYykgeyByZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBv cGVyYXRvcjw8KHNpZ25lZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQog ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCBjaGFyICpzKTsKICAgIG9zdHJlYW0mIG9wZXJh dG9yPDwoY29uc3QgdW5zaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0 IGNoYXIqKXM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIgKnMp Cgl7IHJldHVybiAoKnRoaXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVy YXRvcjw8KGNvbnN0IHZvaWQgKnApOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7CiAg ICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJh dG9yPDwobG9uZyBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBuKTsK ICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIGxvbmcgbik7CiAgICBf X2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIG4pOwog ICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKGludClu KTt9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IG4pIHtyZXR1cm4gb3Bl cmF0b3I8PCgodW5zaWduZWQgaW50KW4pO30KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBi KSB7IHJldHVybiBvcGVyYXRvcjw8KChpbnQpYik7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwo ZG91YmxlIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChmbG9hdCBuKSB7IHJldHVybiBvcGVy YXRvcjw8KChkb3VibGUpbik7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBkb3VibGUg bikgeyByZXR1cm4gb3BlcmF0b3I8PCgoZG91YmxlKW4pOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRv cjw8KF9fb21hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBvc3RyZWFt JiBvcGVyYXRvcjw8KF9fbWFuaXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7 fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChzdHJlYW1idWYqKTsKfTsKY2xhc3MgaXN0cmVhbSA6 IHZpcnR1YWwgcHVibGljIGlvcwp7CiAgICAgCnByb3RlY3RlZDoKICAgIF9HX3NpemVfdCAgX2dj b3VudDsKICAgIGludCBfc2tpcF93cygpOwogIHB1YmxpYzoKICAgIGlzdHJlYW0oKTogX2djb3Vu dCAoMCkgeyB9CiAgICBpc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxs ICk7CiAgICBpc3RyZWFtJiBnZXQoY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xu Jyk7CiAgICBpc3RyZWFtJiBnZXQodW5zaWduZWQgY2hhciogcHRyLCBpbnQgbGVuLCBjaGFyIGRl bGltID0gJ1xuJykKCXsgcmV0dXJuIGdldCgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAg aXN0cmVhbSYgZ2V0KGNoYXImIGMpOwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXImIGMp IHsgcmV0dXJuIGdldCgoY2hhciYpYyk7IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoY2hhciogcHRy LCBpbnQgbGVuLCBjaGFyIGRlbGltID0gJ1xuJyk7CiAgICBpc3RyZWFtJiBnZXRsaW5lKHVuc2ln bmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXRs aW5lKChjaGFyKilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVkIGNo YXImIGMpICB7IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXQoc2lnbmVk IGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNo YXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlzdHJlYW0mIGdldGxpbmUoc2lnbmVkIGNoYXIq IHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpCgl7IHJldHVybiBnZXRsaW5lKChjaGFy KilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiByZWFkKGNoYXIgKnB0ciwgc3RyZWFt c2l6ZSBuKTsKICAgIGlzdHJlYW0mIHJlYWQodW5zaWduZWQgY2hhciAqcHRyLCBzdHJlYW1zaXpl IG4pCiAgICAgIHsgcmV0dXJuIHJlYWQoKGNoYXIqKXB0ciwgbik7IH0KICAgIGlzdHJlYW0mIHJl YWQoc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiByZWFkKChj aGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiByZWFkKHZvaWQgKnB0ciwgc3RyZWFtc2l6ZSBu KQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiBnZXQo c3RyZWFtYnVmJiBzYiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0cyhjaGFy ICoqcywgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaW50IGlwZngoaW50IG5lZWQgPSAwKSB7Cglp ZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAg OwoJICBpZiAoX3RpZSAmJiAobmVlZCA9PSAwIHx8IHJkYnVmKCktPmluX2F2YWlsKCkgPCBuZWVk KSkgX3RpZS0+Zmx1c2goKTsKCSAgaWYgKCFuZWVkICYmIChmbGFncygpICYgaW9zOjpza2lwd3Mp KSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1cm4gMTsKCX0KICAgIH0KICAgIGludCBp cGZ4MCgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9 CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUpIF90aWUtPmZsdXNoKCk7CgkgIGlmIChmbGFncygp ICYgaW9zOjpza2lwd3MpIHJldHVybiBfc2tpcF93cygpOwoJICBlbHNlIHJldHVybiAxOwoJfQog ICAgfQogICAgaW50IGlwZngxKCkgeyAgCglpZiAoIWdvb2QoKSkgeyBzZXQoaW9zOjpmYWlsYml0 KTsgcmV0dXJuIDA7IH0KCWVsc2UgewoJICAgOwoJICBpZiAoX3RpZSAmJiByZGJ1ZigpLT5pbl9h dmFpbCgpID09IDApIF90aWUtPmZsdXNoKCk7CgkgIHJldHVybiAxOwoJfQogICAgfQogICAgdm9p ZCBpc2Z4KCkgeyAgOyB9CiAgICBpbnQgZ2V0KCkgeyBpZiAoIWlwZngxKCkpIHJldHVybiAoLTEp IDsKCQllbHNlIHsgaW50IGNoID0gX3N0cmJ1Zi0+c2J1bXBjKCk7CgkJICAgICAgIGlmIChjaCA9 PSAoLTEpICkgc2V0KGlvczo6ZW9mYml0KTsKCQkgICAgICAgaXNmeCgpOwoJCSAgICAgICByZXR1 cm4gY2g7CgkJICAgICB9IH0KICAgIGludCBwZWVrKCk7CiAgICBfR19zaXplX3QgIGdjb3VudCgp IHsgcmV0dXJuIF9nY291bnQ7IH0KICAgIGlzdHJlYW0mIGlnbm9yZShpbnQgbj0xLCBpbnQgZGVs aW0gPSAoLTEpICk7CiAgICBpbnQgc3luYyAoKTsKICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbXBv cyk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICBzdHJlYW1w b3MgdGVsbGcoKTsKICAgIGlzdHJlYW0mIHB1dGJhY2soY2hhciBjaCkgewoJaWYgKGdvb2QoKSAm JiBfc3RyYnVmLT5zcHV0YmFja2MoY2gpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7Cgly ZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgdW5nZXQoKSB7CglpZiAoZ29vZCgpICYmIF9zdHJi dWYtPnN1bmdldGMoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpiYWRiaXQpOwoJcmV0dXJuICp0aGlz O30KICAgIGlzdHJlYW0mIHNjYW4oY29uc3QgY2hhciAqZm9ybWF0IC4uLik7CiAgICBpc3RyZWFt JiB2c2Nhbihjb25zdCBjaGFyICpmb3JtYXQsIF9HX3ZhX2xpc3QgIGFyZ3MpOwogICAgaXN0cmVh bSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGNo YXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFtJiBvcGVy YXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAg ICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1 bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAgIGlzdHJl YW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+PigoY2hhciYp Yyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9y Pj4obG9uZyYpOwogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KGxvbmcgbG9u ZyYpOwogICAgX19leHRlbnNpb25fXyBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcg bG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaG9ydCYpOwogICAgaXN0cmVhbSYgb3Bl cmF0b3I+Pih1bnNpZ25lZCBpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQg bG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYpOwogICAgaXN0 cmVhbSYgb3BlcmF0b3I+Pihib29sJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGZsb2F0Jik7 CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+ Pihsb25nIGRvdWJsZSYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+PiggX19tYW5pcCBmdW5jKSB7 KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KF9f aW1hbmlwIGZ1bmMpIHsgcmV0dXJuICgqZnVuYykoKnRoaXMpOyB9CiAgICBpc3RyZWFtJiBvcGVy YXRvcj4+KHN0cmVhbWJ1ZiopOwp9OwpjbGFzcyBpb3N0cmVhbSA6IHB1YmxpYyBpc3RyZWFtLCBw dWJsaWMgb3N0cmVhbQp7CiAgcHVibGljOgogICAgaW9zdHJlYW0oKSB7IH0KICAgIGlvc3RyZWFt KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxsICk7Cn07CmNsYXNzIF9JT19pc3Ry ZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgaXN0cmVhbSB7CnB1YmxpYzoKICBfSU9faXN0cmVhbV93 aXRoYXNzaWduJiBvcGVyYXRvcj0oaXN0cmVhbSYpOwogIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24m IG9wZXJhdG9yPShfSU9faXN0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7IHJldHVybiBvcGVy YXRvcj0gKHN0YXRpY19jYXN0PGlzdHJlYW0mPiAocmhzKSk7IH0KfTsKY2xhc3MgX0lPX29zdHJl YW1fd2l0aGFzc2lnbiA6IHB1YmxpYyBvc3RyZWFtIHsKcHVibGljOgogIF9JT19vc3RyZWFtX3dp dGhhc3NpZ24mIG9wZXJhdG9yPShvc3RyZWFtJik7CiAgX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYg b3BlcmF0b3I9KF9JT19vc3RyZWFtX3dpdGhhc3NpZ24mIHJocykKICAgIHsgcmV0dXJuIG9wZXJh dG9yPSAoc3RhdGljX2Nhc3Q8b3N0cmVhbSY+IChyaHMpKTsgfQp9OwpleHRlcm4gX0lPX2lzdHJl YW1fd2l0aGFzc2lnbiBjaW47CmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNvdXQsIGNl cnI7CmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNsb2cKOwpleHRlcm4gaXN0cmVhbSYg bG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gaXN0cmVhbSYgdW5sb2NrKGlzdHJlYW0mIGlucyk7 CmV4dGVybiBvc3RyZWFtJiBsb2NrKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgdW5s b2NrKG9zdHJlYW0mIG91dHMpOwpzdHJ1Y3QgSW9zdHJlYW1faW5pdCB7IH0gOyAgIAppbmxpbmUg aW9zJiBkZWMoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmRlYywgaW9zOjpkZWN8aW9zOjpoZXh8aW9z OjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBoZXgoaW9zJiBpKQp7IGkuc2V0Zihpb3M6 OmhleCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9z JiBvY3QoaW9zJiBpKQp7IGkuc2V0Zihpb3M6Om9jdCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpv Y3QpOyByZXR1cm4gaTsgfQp9ICAKIyA0NSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2Nj LWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst My9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxp Yi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAz NDIgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4y LjUvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAojIDUzICIvYW9sbmV0L3BrZy9nY2MtMi45 NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4z L2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5o IiAxIDMgNAojIDI1ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMt aWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKICAgICAKIyA2MCAiL2Fv bG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1 LjMvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CiMgNzAgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGli L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkbGliLmgiIDMg NAogICAgIAogICAgdHlwZWRlZiBzdHJ1Y3QgZGl2X3QgIHsJIAoJaW50IHF1b3Q7CQkgCglpbnQg cmVtOwkJICAKICAgIH0gZGl2X3Q7CiAgICAgCiAgICB0eXBlZGVmIHN0cnVjdCBsZGl2X3QgIHsJ IAoJbG9uZyBpbnQgcXVvdDsJCSAKCWxvbmcgaW50IHJlbTsJCSAgCiAgICB9IGxkaXZfdDsKICAg ICAKICAgICAKICAgIGV4dGVybiBpbnQJIAltYmxlbihjb25zdCBjaGFyICosIHNpemVfdCk7CiAg ICBleHRlcm4gc2l6ZV90IAltYnN0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90 KTsKICAgIGV4dGVybiBpbnQJCW1idG93Yyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90 KTsKICAgIGV4dGVybiBzaXplX3QJd2NzdG9tYnMoY2hhciAqLCBjb25zdCB3Y2hhcl90ICosIHNp emVfdCk7CiAgICBleHRlcm4gaW50CQl3Y3RvbWIoY2hhciAqLCBjb25zdCB3Y2hhcl90KTsKICAg ICAKIyAxNjggIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t YWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoJIAoJZXh0ZXJuIGRvdWJsZSAJ YXRvZihjb25zdCBjaGFyICopOwoJZXh0ZXJuIGludCAJYXRvaShjb25zdCBjaGFyICopOwoJZXh0 ZXJuIGxvbmcgaW50IGF0b2woY29uc3QgY2hhciAqKTsKCWV4dGVybiBkb3VibGUgCXN0cnRvZChj b25zdCBjaGFyICosIGNoYXIgKiAqKTsKCWV4dGVybiBsb25nIGludCBzdHJ0b2woY29uc3QgY2hh ciAqLCBjaGFyICogKiwgaW50KTsKCWV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsKGNv bnN0IGNoYXIgKiwgY2hhciAqICosIGludCk7CglleHRlcm4gaW50IAlyYW5kKHZvaWQpOwoJZXh0 ZXJuIHZvaWQJc3JhbmQodW5zaWduZWQgaW50KTsKCWV4dGVybiB2b2lkIAkqY2FsbG9jKHNpemVf dCwgc2l6ZV90KTsKCWV4dGVybiB2b2lkCWZyZWUodm9pZCAqKTsKCWV4dGVybiB2b2lkCSptYWxs b2Moc2l6ZV90KTsKCWV4dGVybiB2b2lkIAkqcmVhbGxvYyh2b2lkICosIHNpemVfdCk7CglleHRl cm4gdm9pZAlhYm9ydCh2b2lkKTsKCWV4dGVybiBpbnQJYXRleGl0KHZvaWQgKCopKHZvaWQpKTsK CWV4dGVybiB2b2lkCWV4aXQoaW50KTsKCWV4dGVybiBjaGFyCSpnZXRlbnYoY29uc3QgY2hhciAq KTsKCWV4dGVybiBpbnQgCXN5c3RlbShjb25zdCBjaGFyICopOwoJZXh0ZXJuIHZvaWQgCSpic2Vh cmNoKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIHNpemVfdCwgaW50KCopKGNv bnN0IHZvaWQgKixjb25zdCB2b2lkICopKTsKCWV4dGVybiB2b2lkIAlxc29ydCh2b2lkICosIHNp emVfdCwgc2l6ZV90LCBpbnQoKikoY29uc3Qgdm9pZCAqLGNvbnN0IHZvaWQgKikpOwoJIAoJCgll eHRlcm4gaW50IAlhYnMoaW50KTsKCWV4dGVybiBzdHJ1Y3QgZGl2X3QJZGl2KGludCwgaW50KTsK CWV4dGVybiBsb25nIGludAlsYWJzKGxvbmcgaW50KTsKCWV4dGVybiBzdHJ1Y3QgbGRpdl90IAls ZGl2KGxvbmcgaW50LCBsb25nIGludCk7CiMgMjI3ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xp Yi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5oIiAz IDQKIyAyNTMgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t YWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoJZXh0ZXJuIGRvdWJsZSAJCWRy YW5kNDgodm9pZCk7CglleHRlcm4gZG91YmxlIAkJZXJhbmQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsK CWV4dGVybiBsb25nIAkJanJhbmQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsKCWV4dGVybiBsb25nIAkJ bXJhbmQ0OCh2b2lkKTsKCWV4dGVybiBsb25nIAkJbnJhbmQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsK CWV4dGVybiB1bnNpZ25lZCBzaG9ydCAJKnNlZWQ0OCh1bnNpZ25lZCBzaG9ydFtdKTsKCWV4dGVy biB2b2lkIAkJc3JhbmQ0OChsb25nKTsKCWV4dGVybiBpbnQgCQlwdXRlbnYoIGNoYXIgKik7CiMg Mjc5ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMu Mi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKIyAzMzMgIi9hb2xuZXQvcGtnL2djYy0y Ljk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3Rk bGliLmgiIDMgNAogICAgIGV4dGVybiBjaGFyICpvcHRhcmc7CiAgICAgZXh0ZXJuIGludCBvcHRp bmQ7CiAgICAgZXh0ZXJuIGludCBvcHRlcnI7CiAgICAgZmxvYXQgICAgYXRvZmYoKTsKICAgICBj aGFyICAgICAqZWN2dCAgIChkb3VibGUsIGludCwgaW50ICosIGludCAqKSAgICA7CiAgICAgY2hh ciAgICAgKmZjdnQgICAoZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKikgICAgOwogICAgIGNoYXIg ICAgICpnY3Z0ICAgKGRvdWJsZSwgaW50LCBjaGFyICopICAgIDsKICAgICBmbG9hdCAgICBzdHJ0 b2YoKTsKICAgICB2b2lkICAgICBpbXVsX2RibCgpOwogICAgIHZvaWQgICAgIHVtdWxfZGJsKCk7 CiAgICAgCiMgMzc0ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMt aWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKICAgIGV4dGVybiBkb3Vi bGUJIHdjc3RvZChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiopOwogICAgZXh0ZXJuIGxvbmcg aW50CSB3Y3N0b2woY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpOwogICAgZXh0ZXJu IHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBp bnQpOwogICAgZXh0ZXJuIGludAkJcnBtYXRjaChjb25zdCBjaGFyICopOwogICAgZXh0ZXJuIGlu dAkJY2xlYXJlbnYodm9pZCk7CiAgICBleHRlcm4gaW50CQlnZXRvcHQoaW50LCBjaGFyICpjb25z dFtdLCBjb25zdCBjaGFyICopOwogICAgZXh0ZXJuIGNoYXIJCSpnZXRwYXNzKGNvbnN0IGNoYXIg Kik7CiMgNTQgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0t YWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIg MwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4 My4yLjUvMi45NS4zL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0CiMgMTkgIi9hb2xuZXQvcGtnL2dj Yy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUv c3RyaW5nLmgiIDMgNAojIDI0MyAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9w b3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CiMgNTUgIi9h b2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45 NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi9hb2xu ZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4z Ly4uLy4uLy4uLy4uL3Bvd2VycGMtaWJtLWFpeDMuMi41L2luY2x1ZGUvYXNzZXJ0LmgiIDEgMyA0 CiMgMTkgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4 My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL3Bvd2VycGMtaWJtLWFpeDMuMi41L2luY2x1ZGUvYXNz ZXJ0LmgiIDMgNApleHRlcm4gIkMiIHsKZXh0ZXJuIHZvaWQgX19lcHJpbnRmIChjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQsIGNvbnN0IGNoYXIgKikKICAgIF9fYXR0cmlidXRl X18gKChub3JldHVybikpOwp9CiMgNTIgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1s aWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL3Bvd2VycGMtaWJtLWFp eDMuMi41L2luY2x1ZGUvYXNzZXJ0LmgiIDMgNAojIDU2ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4z L2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs dWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKIyA3OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9zdGxfYWxsb2MuaCIgMwojIDg3ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9n Y2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr Ky0zL3N0bF9hbGxvYy5oIiAzCiMgOTcgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1s aWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv c3RsX2FsbG9jLmgiIDMKIyAxMTUgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs X2FsbG9jLmgiIDMKdGVtcGxhdGUgPGludCBfX2luc3Q+CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3Rl bXBsYXRlIHsKcHJpdmF0ZToKICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwog IHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKICBzdGF0aWMgdm9p ZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKcHVibGljOgogIHN0YXRpYyB2b2lk KiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9f bik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7 CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCog X19wLCBzaXplX3QgICkKICB7CiAgICBmcmVlKF9fcCk7CiAgfQogIHN0YXRpYyB2b2lkKiByZWFs bG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICAsIHNpemVfdCBfX25ld19zeikKICB7CiAgICB2b2lk KiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICBpZiAoMCA9PSBfX3Jlc3Vs dCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIHJldHVybiBf X3Jlc3VsdDsKICB9CiAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hhbmRsZXIodm9pZCAo Kl9fZikoKSkpKCkKICB7CiAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29t X2hhbmRsZXI7CiAgICBfX21hbGxvY19hbGxvY19vb21faGFuZGxlciA9IF9fZjsKICAgIHJldHVy bihfX29sZCk7CiAgfQp9Owp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19h bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7 CnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKgpfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu c3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2Nf aGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwogICAgZm9yICg7OykgewogICAgICAgIF9f bXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBp ZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8 IGVuZGw7IGV4aXQoMSkgOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAg ICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4o X19yZXN1bHQpOwogICAgfQp9CnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKiBfX21hbGxvY19h bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBf X24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVz dWx0OwogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxv Y19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVy KSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4aXQoMSkgOyB9CiAgICAgICAg KCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3As IF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9CnR5 cGVkZWYgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8MD4gbWFsbG9jX2FsbG9jOwp0ZW1wbGF0ZTxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xhc3Mgc2ltcGxlX2FsbG9jIHsKcHVibGljOgogICAg c3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gMCA9PSBfX24g PyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQogICAg c3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkKICAgICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6 YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAq IF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0 ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUo X1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsg fQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBkZWJ1Z19hbGxvYyB7CnByaXZhdGU6 CiAgZW51bSB7X1NfZXh0cmEgPSA4fTsgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg ICAgICAgICAgICAgICAgICAgICAgCnB1YmxpYzoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6 ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRl KF9fbiArIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVy biBfX3Jlc3VsdCArIF9TX2V4dHJhOwogIH0KICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQq IF9fcCwgc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSBf U19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3QqKV9fcmVhbF9wID09IF9fbiApID8gMCA6 IChfX2VwcmludGYgKCIlczoldTogZmFpbGVkIGFzc2VydGlvbiBgJXMnXG4iLAkgICIvYW9sbmV0 L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8u Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAsICAgMjYzICwgICIqKHNpemVf dCopX19yZWFsX3AgPT0gX19uIiApLCAwKSApKSA7CiAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19y ZWFsX3AsIF9fbiArIF9TX2V4dHJhKTsKICB9CiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9p ZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICB7CiAgICBjaGFyKiBf X3JlYWxfcCA9IChjaGFyKilfX3AgLSBfU19leHRyYTsKICAgICgodm9pZCkgKCggKihzaXplX3Qq KV9fcmVhbF9wID09IF9fb2xkX3N6ICkgPyAwIDogKF9fZXByaW50ZiAoIiVzOiV1OiBmYWlsZWQg YXNzZXJ0aW9uIGAlcydcbiIsCSAgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs X2FsbG9jLmgiICwgICAyNzAgLCAgIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiIgKSwg MCkgKSkgOwogICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopCiAgICAgIF9BbGxvYzo6cmVhbGxv Y2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyBfU19leHRyYSwgX19uZXdfc3ogKyBfU19leHRyYSk7 CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAgIHJldHVybiBfX3Jlc3VsdCAr IF9TX2V4dHJhOwogIH0KfTsKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CmNsYXNz IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZSB7CnByaXZhdGU6CiAgIAogICAKICAgIGVudW0ge19B TElHTiA9IDh9OwogICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICBlbnVtIHtfTkZSRUVM SVNUUyA9IF9NQVhfQllURVMvX0FMSUdOfTsKICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAo c2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKSAmIH4o X0FMSUdOIC0gMSkpOyB9CnByaXZhdGUgOgogIHVuaW9uIF9PYmogewogICAgICAgIHVuaW9uIF9P YmoqIF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFbMV07ICAg ICAKICB9Owpwcml2YXRlOgogICAgc3RhdGljIF9PYmoqICAgX1NfZnJlZV9saXN0W19ORlJFRUxJ U1RTXTsKICBzdGF0aWMgIHNpemVfdCBfU19mcmVlbGlzdF9pbmRleChzaXplX3QgX19ieXRlcykg ewogICAgICAgIHJldHVybiAoKChfX2J5dGVzKSArIF9BTElHTi0xKS9fQUxJR04gLSAxKTsKICB9 CiAgIAogIHN0YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CiAgIAogICAKICBzdGF0 aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKICAg CiAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVl OwogIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOwojIDM4OSAiL2FvbG5ldC9wa2cvZ2NjLTIu OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwogICAgY2xhc3MgX0xvY2sgewogICAgICAgIHB1 YmxpYzoKICAgICAgICAgICAgX0xvY2soKSB7ICA7IH0KICAgICAgICAgICAgfl9Mb2NrKCkgeyAg OyB9CiAgICB9OwogICAgZnJpZW5kIGNsYXNzIF9Mb2NrOwpwdWJsaWM6CiAgIAogIHN0YXRpYyB2 b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0 OwogICAgX09iaiogICBfX3Jlc3VsdDsKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVT KSB7CiAgICAgICAgcmV0dXJuKG1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19uKSk7CiAgICB9CiAg ICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7 CiAgICAgCiAgICAgCiAgICAgCiAgICBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgIGlm IChfX3Jlc3VsdCA9PSAwKSB7CiAgICAgICAgdm9pZCogX19yID0gX1NfcmVmaWxsKF9TX3JvdW5k X3VwKF9fbikpOwogICAgICAgIHJldHVybiBfX3I7CiAgICB9CiAgICAqX19teV9mcmVlX2xpc3Qg PSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgIHJldHVybiAoX19yZXN1bHQpOwog IH07CiAgIAogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQog IHsKICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7CiAgICBfT2JqKiAgKiBfX215X2ZyZWVfbGlz dDsKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgbWFsbG9jX2Fs bG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBfX215 X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAg CiAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAqX19t eV9mcmVlX2xpc3QgPSBfX3E7CiAgICAgCiAgfQogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZv aWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwp9IDsKdHlwZWRlZiBf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8IGZhbHNlICwgMD4gYWxsb2M7CnR5cGVkZWYgX19kZWZh dWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2FsbG9jOwp0ZW1wbGF0 ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqCl9fZGVmYXVsdF9hbGxvY190ZW1w bGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCYgX19ub2JqcykKewogICAgY2hhciogX19yZXN1bHQ7CiAgICBzaXplX3QgX190b3RhbF9i eXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5k X2ZyZWUgLSBfU19zdGFydF9mcmVlOwogICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5 dGVzKSB7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0 X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBl bHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKSB7CiAgICAgICAgX19ub2JqcyA9IChpbnQp KF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBf X25vYmpzOwogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBfU19zdGFy dF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0g ZWxzZSB7CiAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KCSAgMiAqIF9fdG90YWxfYnl0 ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7CiAgICAgICAgIAogICAgICAgIGlm IChfX2J5dGVzX2xlZnQgPiAwKSB7CiAgICAgICAgICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0 ID0KICAgICAgICAgICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5k ZXgoX19ieXRlc19sZWZ0KTsKICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBf TV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgKl9fbXlfZnJl ZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgfQogICAgICAgIF9TX3N0YXJ0 X2ZyZWUgPSAoY2hhciopbWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICBpZiAoMCA9PSBf U19zdGFydF9mcmVlKSB7CiAgICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAgICAgICAgIF9PYmoq ICAqIF9fbXlfZnJlZV9saXN0OwoJICAgIF9PYmoqIF9fcDsKICAgICAgICAgICAgIAogICAgICAg ICAgICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgZm9yIChfX2kgPSBfX3NpemU7IF9faSA8 PSBfTUFYX0JZVEVTOyBfX2kgKz0gX0FMSUdOKSB7CiAgICAgICAgICAgICAgICBfX215X2ZyZWVf bGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAgICAg ICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3Ap IHsKICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9s aXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7 CiAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwog ICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMp KTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICB9CgkgICAgX1NfZW5kX2ZyZWUgPSAwOwkgCiAgICAgICAgICAg IF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3Rv X2dldCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAg fQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAgICAgICBfU19lbmRf ZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAgICByZXR1cm4oX1Nf Y2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICB9Cn0KdGVtcGxhdGUgPGJvb2wgX190 aHJlYWRzLCBpbnQgX19pbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl YWRzLCBfX2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKewogICAgaW50IF9fbm9ianMgPSAy MDsKICAgIGNoYXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAg X09iaiogICogX19teV9mcmVlX2xpc3Q7CiAgICBfT2JqKiBfX3Jlc3VsdDsKICAgIF9PYmoqIF9f Y3VycmVudF9vYmo7CiAgICBfT2JqKiBfX25leHRfb2JqOwogICAgaW50IF9faTsKICAgIGlmICgx ID09IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsKICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJl ZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAKICAgICAgX19yZXN1bHQgPSAo X09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2Jq KikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykgewogICAgICAg IF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAgIF9fbmV4dF9vYmogPSAoX09iaiop KChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2JqcyAtIDEgPT0gX19p KSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSAwOwog ICAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfX2N1cnJlbnRf b2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIH0K ICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+ CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0 ZSh2b2lkKiBfX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgX19vbGRfc3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uZXdfc3opCnsKICAgIHZvaWQqIF9fcmVzdWx0 OwogICAgc2l6ZV90IF9fY29weV9zejsKICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhf QllURVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJu KHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAgfQogICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xk X3N6KSA9PSBfU19yb3VuZF91cChfX25ld19zeikpIHJldHVybihfX3ApOwogICAgX19yZXN1bHQg PSBhbGxvY2F0ZShfX25ld19zeik7CiAgICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6 PyBfX29sZF9zeiA6IF9fbmV3X3N6OwogICAgbWVtY3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9z eik7CiAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgcmV0dXJuKF9fcmVzdWx0KTsK fQojIDYwMiAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1h aXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwoj IDY4OSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz LjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwp0ZW1w bGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190 ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUgPSAwOwp0ZW1wbGF0ZSA8 Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0 ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsKdGVtcGxhdGUgPGJvb2wgX190 aHJlYWRzLCBpbnQgX19pbnN0PgpzaXplX3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRz LCBpbnQgX19pbnN0PgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ OjpfT2JqKiAgCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gOjpf U19mcmVlX2xpc3RbCiAgICBfTkZSRUVMSVNUUwpdID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIH07CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFs bG9jYXRvciB7CiAgdHlwZWRlZiBhbGxvYyBfQWxsb2M7ICAgICAgICAgICAKcHVibGljOgogIHR5 cGVkZWYgc2l6ZV90ICAgICBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgIGRpZmZlcmVu Y2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9U cCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgcmVmZXJlbmNlOwogIHR5cGVk ZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgICAgICAgIHZhbHVl X3R5cGU7CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRl ZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKICBhbGxvY2F0b3IoKSB0aHJvdygpICB7fQog IGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygpICB7fQogIHRlbXBsYXRlIDxjbGFz cyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSAge30KICB+ YWxsb2NhdG9yKCkgdGhyb3coKSAge30KICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkg Y29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZl cmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgIAogICAKICBfVHAqIGFsbG9jYXRl KHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8g c3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAg ICAgICAgICAgICAgICAgICAgOiAwOwogIH0KICAgCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIg X19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24gKiBz aXplb2YoX1RwKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpIAogICAg eyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CiAgdm9pZCBjb25zdHJ1Y3QocG9p bnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZv aWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9Owp0ZW1wbGF0ZTw+CmNs YXNzIGFsbG9jYXRvcjx2b2lkPiB7CiAgdHlwZWRlZiBzaXplX3QgICAgICBzaXplX3R5cGU7CiAg dHlwZWRlZiBwdHJkaWZmX3QgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkKiAgICAg ICBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVm IHZvaWQgICAgICAgIHZhbHVlX3R5cGU7CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCBy ZWJpbmQgewogICAgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7CiAgfTsKfTsKdGVtcGxh dGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFs bG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7Cn0K dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv bnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIGZh bHNlOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2Nh dG9yIHsKICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwogIHR5cGVkZWYgc2l6ZV90ICAgIHNp emVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBf VHAqICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAg dHlwZWRlZiBfVHAmICAgICAgIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3Rf cmVmZXJlbmNlOwogIHR5cGVkZWYgX1RwICAgICAgICB2YWx1ZV90eXBlOwogIHRlbXBsYXRlIDxj bGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwg X0FsbG9jPiBvdGhlcjsKICB9OwogIF9fYWxsb2NhdG9yKCkgdGhyb3coKSAge30KICBfX2FsbG9j YXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJvdygpIAogICAgOiBfX3VuZGVybHlpbmdf YWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4K ICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93 KCkgCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQog IH5fX2FsbG9jYXRvcigpIHRocm93KCkgIHt9CiAgcG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSBf X3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3Rf cmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogICAKICBfVHAqIGFsbG9jYXRl KHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAg ICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19u ICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CiAgIAogIHZvaWQgZGVhbGxvY2F0ZShw b2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxs b2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBj b25zdCB0aHJvdygpIAogICAgeyByZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CiAg dm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkg X1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsg fQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxs b2M+IHsKICB0eXBlZGVmIHNpemVfdCAgICAgIHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZf dCAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqICAgICAgIHBvaW50ZXI7CiAgdHlw ZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgdmFs dWVfdHlwZTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBl ZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKfTsKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fYWxs b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlp bmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fYWxsb2NhdG9y PF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2FsbG9j YXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlpbmdfYWxs b2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KdGVtcGxhdGUgPGludCBpbnN0Pgppbmxp bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JiwK ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0 PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KaW5saW5lIGJvb2wg b3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JiwKICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JikK ewogIHJldHVybiBmYWxzZTsKfQp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+ CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f dGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQp0 ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9y IT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KdGVtcGxhdGUgPGNsYXNzIF9BbGxv Yz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVy biB0cnVlOwp9CnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0o Y29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg ZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0KdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBj b25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Fs bG9jYXRvcjo6ICAgcmViaW5kPF9UcD46Om90aGVyCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsK fTsKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY29uc3QgYm9vbCBfQWxs b2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX1RwMT4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBhbGxvY2F0b3I8 X1RwMT4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0 eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIGFs bG9jYXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQg X19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl PF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsK ICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z dD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxs b2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1Rw LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KewogIHN0YXRp YyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxs b2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAg ICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRf YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90 eXBlOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2Nf dHJhaXRzPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBf U19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdf YWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBk ZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9UcDEsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAg ICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxh dGU8X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRy dWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf X2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9j X2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxv Y190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf X3RociwgX19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9 IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxs b2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAg ICAgICAgYWxsb2NhdG9yX3R5cGU7Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEs IGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAx LCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu Y2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVnX2FsbG9jPF9B bGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVidWdfYWxs b2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwojIDIxICIvYW9sbmV0L3BrZy9nY2MtMi45 NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL2FsbG9jLmgiIDIgMwojIDQwICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xp Yi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL2FsbG9jLmgiIDMKIyAzOSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxp Yi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z dGQvYmFzdHJpbmcuaCIgMiAzCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9z dHJlYW07CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWli bS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMSAz CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz LjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfcmVsb3BzLmgiIDEgMwp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9UcCYgX194 LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CnRlbXBsYXRlIDxj bGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGlu ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0 dXJuICEoX195IDwgX194KTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVy YXRvcj49KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA8 IF9feSk7Cn0KIyAzMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBj LWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIg MiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1h aXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzNDIgIi9hb2xuZXQvcGtn L2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1 ZGUvc3RkZGVmLmgiIDMgNAojIDMyICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGli L3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0 ZXJhdG9yIiAyIDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2Vy cGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVy YXRvci5oIiAxIDMKc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IG91dHB1dF9p dGVyYXRvcl90YWcge307CnN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1 dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1 YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0 b3JfdGFnIDogcHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9Owp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7CiAgdHlw ZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAg ICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICBk aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0 eXBlZGVmIF9UcCYgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CnN0cnVjdCBvdXRwdXRfaXRl cmF0b3IgewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK ICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQg ICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAg ICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07 CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGZvcndhcmRfaXRl cmF0b3IgewogIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7 CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rp c3RhbmNlICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAg ICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgIHJlZmVyZW5j ZTsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlkaXJl Y3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBp dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgIHZh bHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNl X3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5 cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9Owp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9y IHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5 OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBl ZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm IF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAg ICAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CiMgOTggIi9hb2xuZXQvcGtnL2djYy0yLjk1 LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2lu Y2x1ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4K c3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0 ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0 ZXJhdG9yOjp2YWx1ZV90eXBlICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUg X0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0 eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0 eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSAgICAgICAgIHJlZmVyZW5jZTsKfTsKdGVtcGxh dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgdHlwZWRlZiBy YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9U cCAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90 ICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAg ICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAg ICAgICAgIHJlZmVyZW5jZTsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9y X3RyYWl0czxjb25zdCBfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAg ICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgIGRpZmZl cmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogICAgICAgICAgICAgICAgICBwb2ludGVy OwogIHR5cGVkZWYgY29uc3QgX1RwJiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKdGVt cGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy Pjo6aXRlcmF0b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCnsK ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVn b3J5IF9DYXRlZ29yeTsKICByZXR1cm4gX0NhdGVnb3J5KCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9J dGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90 eXBlKgpfX2Rpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0 PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSo+KDApOwp9 CnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcj46OnZhbHVlX3R5cGUqCl9fdmFsdWVfdHlwZShjb25zdCBfSXRlciYpCnsKICByZXR1cm4g c3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSo+ KDApOwp9CnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9J dGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsgfQp0ZW1wbGF0ZSA8 Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZm ZXJlbmNlX3R5cGUqCmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19k aXN0YW5jZV90eXBlKF9faSk7IH0KdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKdmFsdWVfdHlwZShjb25zdCBf SXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUoX19pKTsgfQojIDI1OSAiL2FvbG5ldC9w a2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4v Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHdoaWxl IChfX2ZpcnN0ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0KdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBf X2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCAKICAgICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICBfX24g Kz0gX19sYXN0IC0gX19maXJzdDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNs YXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJz dCwgCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX0Rpc3RhbmNl JiBfX24pCnsKICBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uLCBpdGVyYXRvcl9jYXRl Z29yeShfX2ZpcnN0KSk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgppbmxpbmUg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl Cl9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0 LCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0 SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QpIHsKICAgICsrX19maXJzdDsgKytfX247CiAgfQogIHJldHVybiBfX247Cn0KdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5j ZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f bGFzdCwKICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIHJldHVybiBf X2xhc3QgLSBfX2ZpcnN0Owp9CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5l IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlw ZQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qp IHsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0 ZXJhdG9yX2NhdGVnb3J5IAogICAgX0NhdGVnb3J5OwogIHJldHVybiBfX2Rpc3RhbmNlKF9fZmly c3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj bGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfSW5wdXRJdGVyJiBfX2ksIF9E aXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIHdoaWxlIChfX24tLSkgKytfX2k7 Cn0KdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5j ZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rp c3RhbmNlIF9fbiwgCiAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y X3RhZykgewogIGlmIChfX24gPj0gMCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQog ICAgd2hpbGUgKF9fbisrKSAtLV9faTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9tQWNj ZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwgCiAgICAgICAgICAgICAgICAgICAgICBy YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9faSArPSBfX247Cn0KdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGFkdmFuY2Uo X0lucHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikgewogIF9fYWR2YW5jZShfX2ksIF9f biwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+ CmNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNv bnRhaW5lcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJf dHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg dHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAg ICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAg ICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwogIGV4 cGxpY2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIo Jl9feCkge30KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0o Y29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGNv bnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBiYWNr X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7 IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0 dXJuICp0aGlzOyB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9y KysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwojIDM3OCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUu My9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5j bHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4K aW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0Nv bnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+ KF9feCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2VydF9p dGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0 eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRw dXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAg ICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJl bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRl ZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKICBleHBsaWNpdCBmcm9udF9pbnNlcnRf aXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGZyb250X2lu c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0Nv bnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGNvbnRhaW5lci0+cHVzaF9mcm9u dChfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y PF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2Vy dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAg ZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1 cm4gKnRoaXM7IH0KfTsKIyA0MTcgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs X2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmlubGluZSBmcm9udF9p bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gZnJvbnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194 KSB7CiAgcmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOwp9CnRl bXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0 ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwogIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJh dG9yIGl0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAgY29udGFpbmVy X3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog IHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCAg ICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAg ICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKICBp bnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVy YXRvciBfX2kpIAogICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQogIGluc2VydF9p dGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5l cjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChp dGVyLCBfX3ZhbHVlKTsKICAgICsraXRlcjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0 X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGlu c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9 CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4g KnRoaXM7IH0KfTsKIyA0NTkgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93 ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0 ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXIsIGNsYXNzIF9JdGVyYXRvcj4K aW5saW5lIAppbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gaW5zZXJ0ZXIoX0NvbnRhaW5lciYg X194LCBfSXRlcmF0b3IgX19pKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVy YXRvciBfX2l0ZXI7CiAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsIF9f aXRlcihfX2kpKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xh c3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwgCiAgICAgICAgICBjbGFzcyBfRGlzdGFu Y2UgPSBwdHJkaWZmX3Q+IApjbGFzcyByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3Igewog IHR5cGVkZWYgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRl cmF0b3IsIF9UcCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jl ZmVyZW5jZSwgX0Rpc3RhbmNlPiAgX1NlbGY7CnByb3RlY3RlZDoKICBfQmlkaXJlY3Rpb25hbEl0 ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf dGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAg ICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAgICAgICAgICAgIGRpZmZl cmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7 CiAgdHlwZWRlZiBfUmVmZXJlbmNlICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CiAgcmV2ZXJz ZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0 aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3gpCiAgICA6IGN1cnJlbnQo X194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1 cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9CaWRpcmVjdGlv bmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KICBw b2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQogIF9T ZWxmJiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0K ICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0t Y3VycmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAg ICArK2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50 KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9f dG1wOwogIH0KfTsKIyA1NTAgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93 ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2l0 ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9CaUl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1Jl ZiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PSgKICAg IGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYs IF9EaXN0YW5jZT4mIF9feCwgCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0 b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3kpCnsKICByZXR1cm4gX194LmJh c2UoKSA9PSBfX3kuYmFzZSgpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmNsYXNzIHJl dmVyc2VfaXRlcmF0b3IgCnsKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6 CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3Jf Y2F0ZWdvcnkKICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIHZhbHVlX3R5 cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVy ZW5jZV90eXBlCiAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9pbnRlcjsKICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UKICAg ICAgICAgIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogIHR5 cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+IF9TZWxmOwpwdWJsaWM6CiAgcmV2ZXJz ZV9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBl IF9feCkgOiBjdXJyZW50KF9feCkge30KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9TZWxmJiBf X3gpIDogY3VycmVudChfX3guY3VycmVudCkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CiAg cmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAg OiBjdXJyZW50KF9feC5iYXNlKCkpIHt9CiAgICAKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25z dCB7IHJldHVybiBjdXJyZW50OyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAg IF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQogIHBv aW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CiAgX1Nl bGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQog IF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1j dXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAg ICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQp IHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190 bXA7CiAgfQogIF9TZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAg ICByZXR1cm4gX1NlbGYoY3VycmVudCAtIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvcis9KGRp ZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgLT0gX19uOwogICAgcmV0dXJuICp0aGlz OwogIH0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAg cmV0dXJuIF9TZWxmKGN1cnJlbnQgKyBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItPShkaWZm ZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50ICs9IF9fbjsKICAgIHJldHVybiAqdGhpczsK ICB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyBy ZXR1cm4gKigqdGhpcyArIF9fbik7IH0gIAp9OyAKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4K aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m IF9feCwgCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl cmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9CnRlbXBs YXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCByZXZlcnNl X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBy ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIDwg X194LmJhc2UoKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUg cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKb3BlcmF0b3ItKGNv bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LCAKICAgICAgICAgIGNvbnN0IHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgLSBf X3guYmFzZSgpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4gCm9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9J dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0 ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkgewogIHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy YXRvcj4oX194LmJhc2UoKSAtIF9fbik7Cn0KIyA4MDUgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMv bGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rp c3QgPSBwdHJkaWZmX3Q+IApjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsKICBmcmllbmQgYm9vbCBv cGVyYXRvcj09IDw+ICAoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvciYpOwpw cm90ZWN0ZWQ6CiAgaXN0cmVhbSogX01fc3RyZWFtOwogIF9UcCBfTV92YWx1ZTsKICBib29sIF9N X2VuZF9tYXJrZXI7CiAgdm9pZCBfTV9yZWFkKCkgewogICAgX01fZW5kX21hcmtlciA9ICgqX01f c3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICAgIGlmIChfTV9lbmRfbWFya2VyKSAqX01fc3RyZWFt ID4+IF9NX3ZhbHVlOwogICAgX01fZW5kX21hcmtlciA9ICgqX01fc3RyZWFtKSA/IHRydWUgOiBm YWxzZTsKICB9CnB1YmxpYzoKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyAgaXRlcmF0b3Jf Y2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlw ZWRlZiBfRGlzdCAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0 IF9UcCogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgICAgICAgICAgcmVm ZXJlbmNlOwogIGlzdHJlYW1faXRlcmF0b3IoKSA6IF9NX3N0cmVhbSgmY2luKSwgX01fZW5kX21h cmtlcihmYWxzZSkge30KICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW0mIF9fcykgOiBfTV9zdHJl YW0oJl9fcykgeyBfTV9yZWFkKCk7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyBy ZXR1cm4gX01fdmFsdWU7IH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAm KG9wZXJhdG9yKigpKTsgfQogIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4mIG9wZXJhdG9y KysoKSB7IAogICAgX01fcmVhZCgpOyAKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXN0cmVhbV9p dGVyYXRvcjxfVHAsIF9EaXN0PiBvcGVyYXRvcisrKGludCkgIHsKICAgIGlzdHJlYW1faXRlcmF0 b3I8X1RwLCBfRGlzdD4gX190bXAgPSAqdGhpczsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiBf X3RtcDsKICB9Cn07CiMgODY0ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9p dGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l IGJvb2wgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3RhbmNlPiYg X194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBf RGlzdGFuY2U+JiBfX3kpIHsKICByZXR1cm4gKF9feC5fTV9zdHJlYW0gPT0gX195Ll9NX3N0cmVh bSAmJgogICAgICAgICAgX194Ll9NX2VuZF9tYXJrZXIgPT0gX195Ll9NX2VuZF9tYXJrZXIpIHx8 CiAgICAgICAgIF9feC5fTV9lbmRfbWFya2VyID09IGZhbHNlICYmIF9feS5fTV9lbmRfbWFya2Vy ID09IGZhbHNlOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG9zdHJlYW1faXRlcmF0b3Ig ewpwcm90ZWN0ZWQ6CiAgb3N0cmVhbSogX01fc3RyZWFtOwogIGNvbnN0IGNoYXIqIF9NX3N0cmlu ZzsKcHVibGljOgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29y eTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZv aWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAg ICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7 CiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpLCBfTV9z dHJpbmcoMCkge30KICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW0mIF9fcywgY29uc3QgY2hhciog X19jKSAKICAgIDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoX19jKSAge30KICBvc3RyZWFt X2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fdmFsdWUpIHsgCiAgICAqX01f c3RyZWFtIDw8IF9fdmFsdWU7CiAgICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFtIDw8IF9NX3N0 cmluZzsKICAgIHJldHVybiAqdGhpczsKICB9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVy YXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0 b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9IAogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0 b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9IAp9OwojIDkwNyAiL2FvbG5ldC9wa2cvZ2NjLTIu OTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwojIDM4ICIvYW9sbmV0L3BrZy9nY2MtMi45 NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL2l0ZXJhdG9yIiAyIDMKIyA0NCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMiAzCmV4dGVybiB2b2lkIF9fb3V0X29mX3JhbmdlIChj b25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBfX2xlbmd0aF9lcnJvciAoY29uc3QgY2hhciAqKTsK dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMgPSBzdHJpbmdfY2hhcl90cmFpdHM8 Y2hhclQ+LAoJICBjbGFzcyBBbGxvY2F0b3IgPSBhbGxvYyA+CmNsYXNzIGJhc2ljX3N0cmluZwp7 CnByaXZhdGU6CiAgc3RydWN0IFJlcCB7CiAgICBzaXplX3QgbGVuLCByZXMsIHJlZjsKICAgIGJv b2wgc2VsZmlzaDsKICAgIGNoYXJUKiBkYXRhICgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8 Y2hhclQgKj4odGhpcyArIDEpOyB9CiAgICBjaGFyVCYgb3BlcmF0b3JbXSAoc2l6ZV90IHMpIHsg cmV0dXJuIGRhdGEgKCkgW3NdOyB9CiAgICBjaGFyVCogZ3JhYiAoKSB7IGlmIChzZWxmaXNoKSBy ZXR1cm4gY2xvbmUgKCk7ICsrcmVmOyByZXR1cm4gZGF0YSAoKTsgfQojIDEwOCAiL2FvbG5ldC9w a2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4v Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcuaCIgMwogICAgdm9pZCByZWxlYXNl ICgpIHsgaWYgKC0tcmVmID09IDApIGRlbGV0ZSB0aGlzOyB9CiAgICBpbmxpbmUgc3RhdGljIHZv aWQgKiBvcGVyYXRvciBuZXcgKHNpemVfdCwgc2l6ZV90KTsKICAgIGlubGluZSBzdGF0aWMgdm9p ZCBvcGVyYXRvciBkZWxldGUgKHZvaWQgKik7CiAgICBpbmxpbmUgc3RhdGljIFJlcCogY3JlYXRl IChzaXplX3QpOwogICAgY2hhclQqIGNsb25lICgpOwogICAgaW5saW5lIHZvaWQgY29weSAoc2l6 ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgbW92ZSAoc2l6ZV90 LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwogICAgaW5saW5lIHZvaWQgc2V0ICAoc2l6ZV90LCBj b25zdCBjaGFyVCwgICBzaXplX3QpOwogICAgaW5saW5lIHN0YXRpYyBib29sIGV4Y2Vzc19zbG9w IChzaXplX3QsIHNpemVfdCk7CiAgICBpbmxpbmUgc3RhdGljIHNpemVfdCBmcm9iX3NpemUgKHNp emVfdCk7CiAgcHJpdmF0ZToKICAgIFJlcCAmb3BlcmF0b3I9IChjb25zdCBSZXAgJik7CiAgfTsK cHVibGljOgogIHR5cGVkZWYJICAgdHJhaXRzCQl0cmFpdHNfdHlwZTsKICB0eXBlZGVmIHR5cGVu YW1lIHRyYWl0czo6Y2hhcl90eXBlCXZhbHVlX3R5cGU7CiAgdHlwZWRlZgkgICBBbGxvY2F0b3IJ CWFsbG9jYXRvcl90eXBlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0 cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNlOwogIHR5 cGVkZWYgY29uc3QgY2hhclQmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJUKiBwb2lu dGVyOwogIHR5cGVkZWYgY29uc3QgY2hhclQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBwb2lu dGVyIGl0ZXJhdG9yOwogIHR5cGVkZWYgY29uc3RfcG9pbnRlciBjb25zdF9pdGVyYXRvcjsKICB0 eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICB0 eXBlZGVmIDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9p dGVyYXRvcjsKICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXpl X3R5cGU+KC0xKTsKcHJpdmF0ZToKICBSZXAgKnJlcCAoKSBjb25zdCB7IHJldHVybiByZWludGVy cHJldF9jYXN0PFJlcCAqPihkYXQpIC0gMTsgfQogIHZvaWQgcmVwdXAgKFJlcCAqcCkgeyByZXAg KCktPnJlbGVhc2UgKCk7IGRhdCA9IHAtPmRhdGEgKCk7IH0KcHVibGljOgogIGNvbnN0IGNoYXJU KiBkYXRhICgpIGNvbnN0CiAgICB7IHJldHVybiByZXAgKCktPmRhdGEoKTsgfQogIHNpemVfdHlw ZSBsZW5ndGggKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+bGVuOyB9CiAgc2l6ZV90eXBl IHNpemUgKCkgY29uc3QKICAgIHsgcmV0dXJuIHJlcCAoKS0+bGVuOyB9CiAgc2l6ZV90eXBlIGNh cGFjaXR5ICgpIGNvbnN0CiAgICB7IHJldHVybiByZXAgKCktPnJlczsgfQogIHNpemVfdHlwZSBt YXhfc2l6ZSAoKSBjb25zdAogICAgeyByZXR1cm4gKG5wb3MgLSAxKS9zaXplb2YgKGNoYXJUKTsg fQkJIAogIGJvb2wgZW1wdHkgKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemUgKCkgPT0gMDsgfQog IGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjb25zdCBiYXNpY19zdHJpbmcmIHN0cikKICAgIHsK ICAgICAgaWYgKCZzdHIgIT0gdGhpcykgeyByZXAgKCktPnJlbGVhc2UgKCk7IGRhdCA9IHN0ci5y ZXAgKCktPmdyYWIgKCk7IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogIGV4cGxpY2l0IGJh c2ljX3N0cmluZyAoKTogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyB9CiAgYmFzaWNfc3RyaW5nIChj b25zdCBiYXNpY19zdHJpbmcmIHN0cik6IGRhdCAoc3RyLnJlcCAoKS0+Z3JhYiAoKSkgeyB9CiAg YmFzaWNfc3RyaW5nIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcywgc2l6 ZV90eXBlIG4gPSBucG9zKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAoc3Ry LCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4p CiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChzLCBuKTsgfQogIGJhc2ljX3N0 cmluZyAoY29uc3QgY2hhclQqIHMpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWdu IChzKTsgfQogIGJhc2ljX3N0cmluZyAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICA6IGRhdCAo bmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChuLCBjKTsgfQogIHRlbXBsYXRlPGNsYXNzIElucHV0 SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcoSW5wdXRJdGVyYXRvciBfX2JlZ2luLCBJbnB1dEl0 ZXJhdG9yIF9fZW5kKQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAoX19iZWdp biwgX19lbmQpOyB9CiAgfmJhc2ljX3N0cmluZyAoKQogICAgeyByZXAgKCktPnJlbGVhc2UgKCk7 IH0KICB2b2lkIHN3YXAgKGJhc2ljX3N0cmluZyAmcykgeyBjaGFyVCAqZCA9IGRhdDsgZGF0ID0g cy5kYXQ7IHMuZGF0ID0gZDsgfQogIGJhc2ljX3N0cmluZyYgYXBwZW5kIChjb25zdCBiYXNpY19z dHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDAsCgkJCXNpemVfdHlwZSBuID0gbnBvcykKICAg IHsgcmV0dXJuIHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNf c3RyaW5nJiBhcHBlbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJu IHJlcGxhY2UgKGxlbmd0aCAoKSwgMCwgcywgbik7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAo Y29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBhcHBlbmQgKHMsIHRyYWl0czo6bGVuZ3RoIChz KSk7IH0KICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7 IHJldHVybiByZXBsYWNlIChsZW5ndGggKCksIDAsIG4sIGMpOyB9CiAgdGVtcGxhdGU8Y2xhc3Mg SW5wdXRJdGVyYXRvcj4KICAgIGJhc2ljX3N0cmluZyYgYXBwZW5kKElucHV0SXRlcmF0b3IgZmly c3QsIElucHV0SXRlcmF0b3IgbGFzdCkKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGllbmQgKCksIGll bmQgKCksIGZpcnN0LCBsYXN0KTsgfQogIHZvaWQgcHVzaF9iYWNrKGNoYXJUIF9fYykKICB7IGFw cGVuZCgxLCBfX2MpOyB9CiAgCiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGJhc2ljX3N0 cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwKCQkJc2l6ZV90eXBlIG4gPSBucG9zKQogICAg eyByZXR1cm4gcmVwbGFjZSAoMCwgbnBvcywgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5n JiBhc3NpZ24gKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJuIHJlcGxh Y2UgKDAsIG5wb3MsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGNoYXJU KiBzKQogICAgeyByZXR1cm4gYXNzaWduIChzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFz aWNfc3RyaW5nJiBhc3NpZ24gKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVw bGFjZSAoMCwgbnBvcywgbiwgYyk7IH0KICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgog ICAgYmFzaWNfc3RyaW5nJiBhc3NpZ24oSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRv ciBsYXN0KQogICAgeyByZXR1cm4gcmVwbGFjZSAoaWJlZ2luICgpLCBpZW5kICgpLCBmaXJzdCwg bGFzdCk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yPSAoY29uc3QgY2hhclQqIHMpCiAgICB7 IHJldHVybiBhc3NpZ24gKHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcj0gKGNoYXJUIGMp CiAgICB7IHJldHVybiBhc3NpZ24gKDEsIGMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9 IChjb25zdCBiYXNpY19zdHJpbmcmIHJocykKICAgIHsgcmV0dXJuIGFwcGVuZCAocmhzKTsgfQog IGJhc2ljX3N0cmluZyYgb3BlcmF0b3IrPSAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiBh cHBlbmQgKHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChjaGFyVCBjKQogICAgeyBy ZXR1cm4gYXBwZW5kICgxLCBjKTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUg cG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsCgkJCXNpemVfdHlwZSBwb3MyID0gMCwgc2l6 ZV90eXBlIG4gPSBucG9zKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zMSwgMCwgc3RyLCBwb3My LCBuKTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zLCBjb25zdCBjaGFy VCogcywgc2l6ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIDAsIHMsIG4pOyB9 CiAgYmFzaWNfc3RyaW5nJiBpbnNlcnQgKHNpemVfdHlwZSBwb3MsIGNvbnN0IGNoYXJUKiBzKQog ICAgeyByZXR1cm4gaW5zZXJ0IChwb3MsIHMsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBiYXNp Y19zdHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAg ICB7IHJldHVybiByZXBsYWNlIChwb3MsIDAsIG4sIGMpOyB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0 ZXJhdG9yIHAsIGNoYXJUIGMpCiAgICB7IHNpemVfdHlwZSBfX28gPSBwIC0gaWJlZ2luICgpOwog ICAgICBpbnNlcnQgKHAgLSBpYmVnaW4gKCksIDEsIGMpOyBzZWxmaXNoICgpOwogICAgICByZXR1 cm4gaWJlZ2luICgpICsgX19vOyB9CiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHAsIHNpemVf dHlwZSBuLCBjaGFyVCBjKQogICAgeyBzaXplX3R5cGUgX19vID0gcCAtIGliZWdpbiAoKTsKICAg ICAgaW5zZXJ0IChwIC0gaWJlZ2luICgpLCBuLCBjKTsgc2VsZmlzaCAoKTsKICAgICAgcmV0dXJu IGliZWdpbiAoKSArIF9fbzsgfQogIHRlbXBsYXRlPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICB2 b2lkIGluc2VydChpdGVyYXRvciBwLCBJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9y IGxhc3QpCiAgICB7IHJlcGxhY2UgKHAsIHAsIGZpcnN0LCBsYXN0KTsgfQogIGJhc2ljX3N0cmlu ZyYgZXJhc2UgKHNpemVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpCiAgICB7IHJl dHVybiByZXBsYWNlIChwb3MsIG4sIChzaXplX3R5cGUpMCwgKGNoYXJUKTApOyB9CiAgaXRlcmF0 b3IgZXJhc2UoaXRlcmF0b3IgcCkKICAgIHsgc2l6ZV90eXBlIF9fbyA9IHAgLSBiZWdpbigpOwog ICAgICByZXBsYWNlIChfX28sIDEsIChzaXplX3R5cGUpMCwgKGNoYXJUKTApOyBzZWxmaXNoICgp OwogICAgICByZXR1cm4gaWJlZ2luKCkgKyBfX287IH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRv ciBmLCBpdGVyYXRvciBsKQogICAgeyBzaXplX3R5cGUgX19vID0gZiAtIGliZWdpbigpOwogICAg ICByZXBsYWNlIChfX28sIGwtZiwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7c2VsZmlzaCAoKTsK ICAgICAgcmV0dXJuIGliZWdpbigpICsgX19vOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChz aXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLCBjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwKCQkJ IHNpemVfdHlwZSBwb3MyID0gMCwgc2l6ZV90eXBlIG4yID0gbnBvcyk7CiAgYmFzaWNfc3RyaW5n JiByZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzLAoJ CQkgc2l6ZV90eXBlIG4yKTsKICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKHNpemVfdHlwZSBwb3Ms IHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3Ms IG4xLCBzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChz aXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIHNpemVfdHlwZSBuMiwgY2hhclQgYyk7CiAgYmFz aWNfc3RyaW5nJiByZXBsYWNlIChzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbiwgY2hhclQgYykK ICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvcywgbiwgMSwgYyk7IH0KICBiYXNpY19zdHJpbmcmIHJl cGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBpMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIp CiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgc3RyKTsgfQog IGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGkyLCBjb25zdCBj aGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAtIGliZWdpbiAo KSwgaTIgLSBpMSwgcywgbik7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkx LCBpdGVyYXRvciBpMiwgY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVybiByZXBsYWNlIChpMSAt IGliZWdpbiAoKSwgaTIgLSBpMSwgcyk7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJh dG9yIGkxLCBpdGVyYXRvciBpMiwgc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICB7IHJldHVybiBy ZXBsYWNlIChpMSAtIGliZWdpbiAoKSwgaTIgLSBpMSwgbiwgYyk7IH0KICB0ZW1wbGF0ZTxjbGFz cyBJbnB1dEl0ZXJhdG9yPgogICAgYmFzaWNfc3RyaW5nJiByZXBsYWNlKGl0ZXJhdG9yIGkxLCBp dGVyYXRvciBpMiwKCQkJICBJbnB1dEl0ZXJhdG9yIGoxLCBJbnB1dEl0ZXJhdG9yIGoyKTsKcHJp dmF0ZToKICBzdGF0aWMgY2hhclQgZW9zICgpIHsgcmV0dXJuIHRyYWl0czo6ZW9zICgpOyB9CiAg dm9pZCB1bmlxdWUgKCkgeyBpZiAocmVwICgpLT5yZWYgPiAxKSBhbGxvYyAobGVuZ3RoICgpLCB0 cnVlKTsgfQogIHZvaWQgc2VsZmlzaCAoKSB7IHVuaXF1ZSAoKTsgcmVwICgpLT5zZWxmaXNoID0g dHJ1ZTsgfQpwdWJsaWM6CiAgY2hhclQgb3BlcmF0b3JbXSAoc2l6ZV90eXBlIHBvcykgY29uc3QK ICAgIHsKICAgICAgaWYgKHBvcyA9PSBsZW5ndGggKCkpCglyZXR1cm4gZW9zICgpOwogICAgICBy ZXR1cm4gZGF0YSAoKVtwb3NdOwogICAgfQogIHJlZmVyZW5jZSBvcGVyYXRvcltdIChzaXplX3R5 cGUgcG9zKQogICAgeyBzZWxmaXNoICgpOyByZXR1cm4gKCpyZXAgKCkpW3Bvc107IH0KICByZWZl cmVuY2UgYXQgKHNpemVfdHlwZSBwb3MpCiAgICB7CiAgICAgIGRvIHsgaWYgKCBwb3MgPj0gbGVu Z3RoICgpICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPj0gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDAp IDsKICAgICAgcmV0dXJuICgqdGhpcylbcG9zXTsKICAgIH0KICBjb25zdF9yZWZlcmVuY2UgYXQg KHNpemVfdHlwZSBwb3MpIGNvbnN0CiAgICB7CiAgICAgIGRvIHsgaWYgKCBwb3MgPj0gbGVuZ3Ro ICgpICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPj0gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsK ICAgICAgcmV0dXJuIGRhdGEgKClbcG9zXTsKICAgIH0KcHJpdmF0ZToKICB2b2lkIHRlcm1pbmF0 ZSAoKSBjb25zdAogICAgeyB0cmFpdHM6OmFzc2lnbiAoKCpyZXAgKCkpW2xlbmd0aCAoKV0sIGVv cyAoKSk7IH0KcHVibGljOgogIGNvbnN0IGNoYXJUKiBjX3N0ciAoKSBjb25zdAogICAgeyBpZiAo bGVuZ3RoICgpID09IDApIHJldHVybiAiIjsgdGVybWluYXRlICgpOyByZXR1cm4gZGF0YSAoKTsg fQogIHZvaWQgcmVzaXplIChzaXplX3R5cGUgbiwgY2hhclQgYyk7CiAgdm9pZCByZXNpemUgKHNp emVfdHlwZSBuKQogICAgeyByZXNpemUgKG4sIGVvcyAoKSk7IH0KICB2b2lkIHJlc2VydmUgKHNp emVfdHlwZSkgeyB9CiAgc2l6ZV90eXBlIGNvcHkgKGNoYXJUKiBzLCBzaXplX3R5cGUgbiwgc2l6 ZV90eXBlIHBvcyA9IDApIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kIChjb25zdCBiYXNpY19zdHJp bmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kIChzdHIu ZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgZmluZCAoY29uc3QgY2hh clQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmlu ZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4g ZmluZCAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIGZpbmQgKGNo YXJUIGMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdDsKICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0 IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0 dXJuIHJmaW5kIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXplX3R5cGUg cmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7 CiAgc2l6ZV90eXBlIHJmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3Mp IGNvbnN0CiAgICB7IHJldHVybiByZmluZCAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9 CiAgc2l6ZV90eXBlIHJmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3Q7 CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXpl X3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfb2YgKHN0ci5kYXRh KCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjb25z dCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlw ZSBmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0 CiAgICB7IHJldHVybiBmaW5kX2ZpcnN0X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7 IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IDAp IGNvbnN0CiAgICB7IHJldHVybiBmaW5kIChjLCBwb3MpOyB9CiAgc2l6ZV90eXBlIGZpbmRfbGFz dF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSBucG9zKSBjb25z dAogICAgeyByZXR1cm4gZmluZF9sYXN0X29mIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgo KSk7IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBl IHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2xhc3Rfb2YgKGNvbnN0 IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRf bGFzdF9vZiAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIGZpbmRf bGFzdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVy biByZmluZCAoYywgcG9zKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3Qg YmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4g ZmluZF9maXJzdF9ub3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNp emVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3Ms IHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0 IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfZmly c3Rfbm90X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmlu ZF9maXJzdF9ub3Rfb2YgKGNoYXJUIGMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdDsKICBzaXpl X3R5cGUgZmluZF9sYXN0X25vdF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlw ZSBwb3MgPSBucG9zKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X25vdF9vZiAoc3RyLmRh dGEoKSwgcG9zLCBzdHIubGVuZ3RoKCkpOyB9CiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2Yg KGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6 ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0g bnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGZpbmRfbGFzdF9ub3Rfb2YgKHMsIHBvcywgdHJhaXRz OjpsZW5ndGggKHMpKTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjaGFyVCBjLCBz aXplX3R5cGUgcG9zID0gbnBvcykgY29uc3Q7CiAgYmFzaWNfc3RyaW5nIHN1YnN0ciAoc2l6ZV90 eXBlIHBvcyA9IDAsIHNpemVfdHlwZSBuID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIGJhc2lj X3N0cmluZyAoKnRoaXMsIHBvcywgbik7IH0KICBpbnQgY29tcGFyZSAoY29uc3QgYmFzaWNfc3Ry aW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3MpIGNvbnN0Owog ICAKICBpbnQgY29tcGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlw ZSBuKSBjb25zdDsKICBpbnQgY29tcGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3Mg PSAwKSBjb25zdAogICAgeyByZXR1cm4gY29tcGFyZSAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAo cykpOyB9CiAgaXRlcmF0b3IgYmVnaW4gKCkgeyBzZWxmaXNoICgpOyByZXR1cm4gJigqdGhpcylb MF07IH0KICBpdGVyYXRvciBlbmQgKCkgeyBzZWxmaXNoICgpOyByZXR1cm4gJigqdGhpcylbbGVu Z3RoICgpXTsgfQpwcml2YXRlOgogIGl0ZXJhdG9yIGliZWdpbiAoKSBjb25zdCB7IHJldHVybiAm KCpyZXAgKCkpWzBdOyB9CiAgaXRlcmF0b3IgaWVuZCAoKSBjb25zdCB7IHJldHVybiAmKCpyZXAg KCkpW2xlbmd0aCAoKV07IH0KcHVibGljOgogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luICgpIGNvbnN0 IHsgcmV0dXJuIGliZWdpbiAoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCAoKSBjb25zdCB7IHJl dHVybiBpZW5kICgpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciAgICAgICByYmVnaW4oKSB7IHJldHVy biByZXZlcnNlX2l0ZXJhdG9yIChlbmQgKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBy YmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvciAoZW5kICgp KTsgfQogIHJldmVyc2VfaXRlcmF0b3IgICAgICAgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRl cmF0b3IgKGJlZ2luICgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0 CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIChiZWdpbiAoKSk7IH0KcHJpdmF0 ZToKICB2b2lkIGFsbG9jIChzaXplX3R5cGUgc2l6ZSwgYm9vbCBzYXZlKTsKICBzdGF0aWMgc2l6 ZV90eXBlIF9maW5kIChjb25zdCBjaGFyVCogcHRyLCBjaGFyVCBjLCBzaXplX3R5cGUgeHBvcywg c2l6ZV90eXBlIGxlbik7CiAgaW5saW5lIGJvb2wgY2hlY2tfcmVhbGxvYyAoc2l6ZV90eXBlIHMp IGNvbnN0OwogIHN0YXRpYyBSZXAgbmlsUmVwOwogIGNoYXJUICpkYXQ7Cn07CnRlbXBsYXRlIDxj bGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+IHRlbXBsYXRlIDxjbGFz cyBJbnB1dEl0ZXJhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4m IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJlcGxhY2UgKGl0ZXJh dG9yIGkxLCBpdGVyYXRvciBpMiwgSW5wdXRJdGVyYXRvciBqMSwgSW5wdXRJdGVyYXRvciBqMikK ewogIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBsZW5ndGggKCk7CiAgc2l6ZV90eXBlIHBvcyA9IGkx IC0gaWJlZ2luICgpOwogIHNpemVfdHlwZSBuMSA9IGkyIC0gaTE7CiAgc2l6ZV90eXBlIG4yID0g ajIgLSBqMTsKICBkbyB7IGlmICggcG9zID4gbGVuICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPiBs ZW4iKTsgfSB3aGlsZSAoMCkgOwogIGlmIChuMSA+IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0g cG9zOwogIGRvIHsgaWYgKCBsZW4gLSBuMSA+IG1heF9zaXplICgpIC0gbjIgKSBfX2xlbmd0aF9l cnJvciAoImxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiIpOyB9IHdoaWxlICgwKSA7CiAgc2l6 ZV90IG5ld2xlbiA9IGxlbiAtIG4xICsgbjI7CiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5ld2xlbikp CiAgICB7CiAgICAgIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwogICAgICBwLT5jb3B5 ICgwLCBkYXRhICgpLCBwb3MpOwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwgZGF0YSAoKSArIHBv cyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgZm9yICg7IGoxICE9IGoyOyArK2oxLCAr K3BvcykKCXRyYWl0czo6YXNzaWduICgoKnApW3Bvc10sICpqMSk7CiAgICAgIHJlcHVwIChwKTsK ICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHJlcCAoKS0+bW92ZSAocG9zICsgbjIsIGRhdGEgKCkg KyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIGZvciAoOyBqMSAhPSBqMjsgKytq MSwgKytwb3MpCgl0cmFpdHM6OmFzc2lnbiAoKCpyZXAgKCkpW3Bvc10sICpqMSk7CiAgICB9CiAg cmVwICgpLT5sZW4gPSBuZXdsZW47CiAgcmV0dXJuICp0aGlzOwp9CnRlbXBsYXRlIDxjbGFzcyBj aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcg PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjb25zdCBiYXNpY19zdHJpbmcg PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgIGNvbnN0IGJhc2ljX3N0cmluZyA8 Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwg dHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAobGhzKTsKICBzdHIuYXBwZW5kIChyaHMpOwogIHJldHVy biBzdHI7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j YXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVy YXRvcisgKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0 cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv Y2F0b3I+IHN0ciAobGhzKTsKICBzdHIuYXBwZW5kIChyaHMpOwogIHJldHVybiBzdHI7Cn0KdGVt cGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5l IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNoYXJU IGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMp CnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3RyICgxLCBsaHMp OwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0cjsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hh clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAoY29uc3QgYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICBiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4gc3RyIChsaHMpOwogIHN0ci5hcHBl bmQgKHJocyk7CiAgcmV0dXJuIHN0cjsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy YWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz LCBBbGxvY2F0b3I+Cm9wZXJhdG9yKyAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz LCBBbGxvY2F0b3I+JiBsaHMsIGNoYXJUIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAoMSwgcmhzKTsKICByZXR1 cm4gc3RyOwp9CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv Y2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs IHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs IHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA9 PSAwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh dG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj09IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhz LmNvbXBhcmUgKGxocykgPT0gMCk7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp dHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSAoY29uc3QgYmFzaWNf c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMp CnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID09IDApOwp9CnRlbXBsYXRlIDxjbGFzcyBj aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9y IT0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg QWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSAhPSAwKTsKfQp0 ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxp bmUgYm9vbApvcGVyYXRvciE9IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUg KHJocykgIT0gMCk7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz IEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBiYXNpY19zdHJpbmcgPGNo YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNo YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJo cykgPCAwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs b2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjwgKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJh c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChy aHMuY29tcGFyZSAobGhzKSA+IDApOwp9CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPCAoY29uc3QgYmFzaWNf c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMp CnsKICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpIDwgMCk7Cn0KdGVtcGxhdGUgPGNsYXNzIGNo YXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+ IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPCAwKTsKfQp0ZW1w bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUg Ym9vbApvcGVyYXRvcj4gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh dG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhz KSA+IDApOwp9CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv Y2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPD0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJh c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChy aHMuY29tcGFyZSAobGhzKSA+PSAwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy YWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25zdCBiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJo cykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPD0gMCk7Cn0KdGVtcGxhdGUgPGNsYXNz IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0 b3I+PSAoY29uc3QgY2hhclQqIGxocywgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz LCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKHJocy5jb21wYXJlIChsaHMpIDw9IDApOwp9 CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cmlu bGluZSBib29sCm9wZXJhdG9yPj0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg QWxsb2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFy ZSAocmhzKSA+PSAwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xh c3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvciE9IChjb25zdCBiYXNpY19zdHJpbmcg PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcg PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUg KHJocykgIT0gMCk7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz IEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+IChjb25zdCBiYXNpY19zdHJpbmcgPGNo YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hh clQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhz KSA+IDApOwp9CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv Y2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPD0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs IHRyYWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs IHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAocmhzKSA8 PSAwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh dG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj49IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPj0g MCk7Cn0KY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJU LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4gaXN0cmVhbSYKb3BlcmF0b3I+PiAoaXN0 cmVhbSYsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYpOwp0ZW1wbGF0 ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPiBvc3RyZWFtJgpv cGVyYXRvcjw8IChvc3RyZWFtJiwgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB bGxvY2F0b3I+Jik7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBB bGxvY2F0b3I+IGlzdHJlYW0mCmdldGxpbmUgKGlzdHJlYW0mLCBiYXNpY19zdHJpbmcgPGNoYXJU LCB0cmFpdHMsIEFsbG9jYXRvcj4mLCBjaGFyVCBkZWxpbSA9ICdcbicpOwp9ICAKIyAxICIvYW9s bmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUu My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIgMSAzCmV4dGVybiAi QysrIiB7CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0 b3I+CmlubGluZSB2b2lkICogYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+ OjpSZXA6OgpvcGVyYXRvciBuZXcgKHNpemVfdCBzLCBzaXplX3QgZXh0cmEpCnsKICByZXR1cm4g QWxsb2NhdG9yOjphbGxvY2F0ZShzICsgZXh0cmEgKiBzaXplb2YgKGNoYXJUKSk7Cn0KdGVtcGxh dGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIHZv aWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpvcGVyYXRv ciBkZWxldGUgKHZvaWQgKiBwdHIpCnsKICBBbGxvY2F0b3I6OmRlYWxsb2NhdGUocHRyLCBzaXpl b2YoUmVwKSArCgkJCXJlaW50ZXJwcmV0X2Nhc3Q8UmVwICo+KHB0ciktPnJlcyAqCgkJCXNpemVv ZiAoY2hhclQpKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3Mg QWxsb2NhdG9yPgppbmxpbmUgc2l6ZV90IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs b2NhdG9yPjo6UmVwOjoKZnJvYl9zaXplIChzaXplX3QgcykKewogIHNpemVfdCBpID0gMTY7CiAg d2hpbGUgKGkgPCBzKSBpICo9IDI7CiAgcmV0dXJuIGk7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJU LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hh clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwICoKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz LCBBbGxvY2F0b3I+OjpSZXA6OgpjcmVhdGUgKHNpemVfdCBleHRyYSkKewogIGV4dHJhID0gZnJv Yl9zaXplIChleHRyYSArIDEpOwogIFJlcCAqcCA9IG5ldyAoZXh0cmEpIFJlcDsKICBwLT5yZXMg PSBleHRyYTsKICBwLT5yZWYgPSAxOwogIHAtPnNlbGZpc2ggPSBmYWxzZTsKICByZXR1cm4gcDsK fQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpj aGFyVCAqIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKY2xv bmUgKCkKewogIFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChsZW4pOwogIHAtPmNvcHkgKDAsIGRhdGEg KCksIGxlbik7CiAgcC0+bGVuID0gbGVuOwogIHJldHVybiBwLT5kYXRhICgpOwp9CnRlbXBsYXRl IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29s IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKZXhjZXNzX3Ns b3AgKHNpemVfdCBzLCBzaXplX3QgcikKewogIHJldHVybiAyICogKHMgPD0gMTYgPyAxNiA6IHMp IDwgcjsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh dG9yPgppbmxpbmUgYm9vbCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46 OgpjaGVja19yZWFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVfdHlwZSBzKSBjb25zdAp7CiAgcyAr PSBzaXplb2YgKGNoYXJUKTsKICByZXAgKCktPnNlbGZpc2ggPSBmYWxzZTsKICByZXR1cm4gKHJl cCAoKS0+cmVmID4gMQoJICB8fCBzID4gY2FwYWNpdHkgKCkKCSAgfHwgUmVwOjpleGNlc3Nfc2xv cCAocywgY2FwYWNpdHkgKCkpKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0 cywgY2xhc3MgQWxsb2NhdG9yPgp2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs b2NhdG9yPjo6CmFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVfdHlwZSBfX3NpemUsIGJvb2wgX19z YXZlKQp7CiAgaWYgKCEgY2hlY2tfcmVhbGxvYyAoX19zaXplKSkKICAgIHJldHVybjsKICBSZXAg KnAgPSBSZXA6OmNyZWF0ZSAoX19zaXplKTsKICBpZiAoX19zYXZlKQogICAgewogICAgICBwLT5j b3B5ICgwLCBkYXRhICgpLCBsZW5ndGggKCkpOwogICAgICBwLT5sZW4gPSBsZW5ndGggKCk7CiAg ICB9CiAgZWxzZQogICAgcC0+bGVuID0gMDsKICByZXB1cCAocCk7Cn0KdGVtcGxhdGUgPGNsYXNz IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFy VCwgdHJhaXRzLCBBbGxvY2F0b3I+JgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j YXRvcj46OgpyZXBsYWNlIChzaXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLAoJIGNvbnN0IGJh c2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zMiwgc2l6ZV90eXBlIG4yKQp7CiAgY29uc3Qg c2l6ZV90IGxlbjIgPSBzdHIubGVuZ3RoICgpOwogIGlmIChwb3MxID09IDAgJiYgbjEgPj0gbGVu Z3RoICgpICYmIHBvczIgPT0gMCAmJiBuMiA+PSBsZW4yKQogICAgcmV0dXJuIG9wZXJhdG9yPSAo c3RyKTsKICBkbyB7IGlmICggcG9zMiA+IGxlbjIgKSBfX291dF9vZl9yYW5nZSAoInBvczIgPiBs ZW4yIik7IH0gd2hpbGUgKDApIDsKICBpZiAobjIgPiBsZW4yIC0gcG9zMikKICAgIG4yID0gbGVu MiAtIHBvczI7CiAgcmV0dXJuIHJlcGxhY2UgKHBvczEsIG4xLCBzdHIuZGF0YSAoKSArIHBvczIs IG4yKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh dG9yPgppbmxpbmUgdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46 OlJlcDo6CmNvcHkgKHNpemVfdCBwb3MsIGNvbnN0IGNoYXJUICpzLCBzaXplX3QgbikKewogIGlm IChuKQogICAgdHJhaXRzOjpjb3B5IChkYXRhICgpICsgcG9zLCBzLCBuKTsKfQp0ZW1wbGF0ZSA8 Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBi YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6Cm1vdmUgKHNpemVf dCBwb3MsIGNvbnN0IGNoYXJUICpzLCBzaXplX3QgbikKewogIGlmIChuKQogICAgdHJhaXRzOjpt b3ZlIChkYXRhICgpICsgcG9zLCBzLCBuKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz IHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj4mCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJlcGxh Y2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQqIHMsIHNpemVfdHlw ZSBuMikKewogIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBsZW5ndGggKCk7CiAgZG8geyBpZiAoIHBv cyA+IGxlbiApIF9fb3V0X29mX3JhbmdlICgicG9zID4gbGVuIik7IH0gd2hpbGUgKDApIDsKICBp ZiAobjEgPiBsZW4gLSBwb3MpCiAgICBuMSA9IGxlbiAtIHBvczsKICBkbyB7IGlmICggbGVuIC0g bjEgPiBtYXhfc2l6ZSAoKSAtIG4yICkgX19sZW5ndGhfZXJyb3IgKCJsZW4gLSBuMSA+IG1heF9z aXplICgpIC0gbjIiKTsgfSB3aGlsZSAoMCkgOwogIHNpemVfdCBuZXdsZW4gPSBsZW4gLSBuMSAr IG4yOwogIGlmIChjaGVja19yZWFsbG9jIChuZXdsZW4pKQogICAgewogICAgICBSZXAgKnAgPSBS ZXA6OmNyZWF0ZSAobmV3bGVuKTsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgcG9zKTsKICAg ICAgcC0+Y29weSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4x KSk7CiAgICAgIHAtPmNvcHkgKHBvcywgcywgbjIpOwogICAgICByZXB1cCAocCk7CiAgICB9CiAg ZWxzZQogICAgewogICAgICByZXAgKCktPm1vdmUgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsg bjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICByZXAgKCktPmNvcHkgKHBvcywgcywgbjIpOwog ICAgfQogIHJlcCAoKS0+bGVuID0gbmV3bGVuOwogIHJldHVybiAqdGhpczsKfQp0ZW1wbGF0ZSA8 Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgdm9pZCBi YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CnNldCAoc2l6ZV90 IHBvcywgY29uc3QgY2hhclQgYywgc2l6ZV90IG4pCnsKICB0cmFpdHM6OnNldCAgKGRhdGEgKCkg KyBwb3MsIGMsIG4pOwp9CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFz cyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgYmFz aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoc2l6ZV90eXBl IHBvcywgc2l6ZV90eXBlIG4xLCBzaXplX3R5cGUgbjIsIGNoYXJUIGMpCnsKICBjb25zdCBzaXpl X3QgbGVuID0gbGVuZ3RoICgpOwogIGRvIHsgaWYgKCBwb3MgPiBsZW4gKSBfX291dF9vZl9yYW5n ZSAoInBvcyA+IGxlbiIpOyB9IHdoaWxlICgwKSA7CiAgaWYgKG4xID4gbGVuIC0gcG9zKQogICAg bjEgPSBsZW4gLSBwb3M7CiAgZG8geyBpZiAoIGxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiAp IF9fbGVuZ3RoX2Vycm9yICgibGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yIik7IH0gd2hpbGUg KDApIDsKICBzaXplX3QgbmV3bGVuID0gbGVuIC0gbjEgKyBuMjsKICBpZiAoY2hlY2tfcmVhbGxv YyAobmV3bGVuKSkKICAgIHsKICAgICAgUmVwICpwID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7CiAg ICAgIHAtPmNvcHkgKDAsIGRhdGEgKCksIHBvcyk7CiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBk YXRhICgpICsgcG9zICsgbjEsIGxlbiAtIChwb3MgKyBuMSkpOwogICAgICBwLT5zZXQgIChwb3Ms IGMsIG4yKTsKICAgICAgcmVwdXAgKHApOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVwICgp LT5tb3ZlIChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsK ICAgICAgcmVwICgpLT5zZXQgIChwb3MsIGMsIG4yKTsKICAgIH0KICByZXAgKCktPmxlbiA9IG5l d2xlbjsKICByZXR1cm4gKnRoaXM7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp dHMsIGNsYXNzIEFsbG9jYXRvcj4Kdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj46OgpyZXNpemUgKHNpemVfdHlwZSBuLCBjaGFyVCBjKQp7CiAgZG8geyBpZiAoIG4g PiBtYXhfc2l6ZSAoKSApIF9fbGVuZ3RoX2Vycm9yICgibiA+IG1heF9zaXplICgpIik7IH0gd2hp bGUgKDApIDsKICBpZiAobiA+IGxlbmd0aCAoKSkKICAgIGFwcGVuZCAobiAtIGxlbmd0aCAoKSwg Yyk7CiAgZWxzZQogICAgZXJhc2UgKG4pOwp9CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3Mg dHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs b2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9y Pjo6CmNvcHkgKGNoYXJUKiBzLCBzaXplX3R5cGUgbiwgc2l6ZV90eXBlIHBvcykgY29uc3QKewog IGRvIHsgaWYgKCBwb3MgPiBsZW5ndGggKCkgKSBfX291dF9vZl9yYW5nZSAoInBvcyA+IGxlbmd0 aCAoKSIpOyB9IHdoaWxlICgwKSA7CiAgaWYgKG4gPiBsZW5ndGggKCkgLSBwb3MpCiAgICBuID0g bGVuZ3RoICgpIC0gcG9zOwogIHRyYWl0czo6Y29weSAocywgZGF0YSAoKSArIHBvcywgbik7CiAg cmV0dXJuIG47Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs bG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5 cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZCAoY29uc3Qg Y2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgc2l6ZV90IHhw b3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgKyBuIDw9IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYg KHRyYWl0czo6ZXEgKGRhdGEgKCkgW3hwb3NdLCAqcykKCSYmIHRyYWl0czo6Y29tcGFyZSAoZGF0 YSAoKSArIHhwb3MsIHMsIG4pID09IDApCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9z Owp9CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+ CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlw ZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpfZmluZCAoY29uc3Qg Y2hhclQqIHB0ciwgY2hhclQgYywgc2l6ZV90eXBlIHhwb3MsIHNpemVfdHlwZSBsZW4pCnsKICBm b3IgKDsgeHBvcyA8IGxlbjsgKyt4cG9zKQogICAgaWYgKHRyYWl0czo6ZXEgKHB0ciBbeHBvc10s IGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQp0ZW1wbGF0ZSA8Y2xhc3Mg Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJU LCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp dHMsIEFsbG9jYXRvcj46OgpmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAg cmV0dXJuIF9maW5kIChkYXRhICgpLCBjLCBwb3MsIGxlbmd0aCAoKSk7Cn0KdGVtcGxhdGUgPGNs YXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwg dHJhaXRzLCBBbGxvY2F0b3I+OjoKcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9z LCBzaXplX3R5cGUgbikgY29uc3QKewogIGlmIChuID4gbGVuZ3RoICgpKQogICAgcmV0dXJuIG5w b3M7CiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSBuOwogIGlmICh4cG9zID4gcG9zKQogICAg eHBvcyA9IHBvczsKICBmb3IgKCsreHBvczsgeHBvcy0tID4gMDsgKQogICAgaWYgKHRyYWl0czo6 ZXEgKGRhdGEgKCkgW3hwb3NdLCAqcykKCSYmIHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHhw b3MsIHMsIG4pID09IDApCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9CnRlbXBs YXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0 cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8 Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUgcG9z KSBjb25zdAp7CiAgaWYgKDEgPiBsZW5ndGggKCkpCiAgICByZXR1cm4gbnBvczsKICBzaXplX3Qg eHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwog IGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOyApCiAgICBpZiAodHJhaXRzOjplcSAoZGF0YSAoKSBb eHBvc10sIGMpKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQp0ZW1wbGF0ZSA8 Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcg PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJU LCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6 ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBzaXplX3QgeHBvcyA9IHBvczsKICBm b3IgKDsgeHBvcyA8IGxlbmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKF9maW5kIChzLCBkYXRhICgp IFt4cG9zXSwgMCwgbikgIT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7 Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4K YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNf c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9sYXN0X29mIChjb25zdCBj aGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBpZiAobGVuZ3Ro KCkgPT0gMCkKICAgIHJldHVybiBucG9zOwogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsK ICBpZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+ IDA7KQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgIT0gbnBvcykKICAg ICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz LCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv Y2F0b3I+OjoKZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9z LCBzaXplX3R5cGUgbikgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwogIGZvciAoOyB4cG9z IDwgbGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAoX2ZpbmQgKHMsIGRhdGEgKCkgW3hwb3NdLCAw LCBuKSA9PSBucG9zKQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQp0ZW1wbGF0 ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNo YXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X25vdF9vZiAoY2hhclQgYywgc2l6 ZV90eXBlIHBvcykgY29uc3QKewogIHNpemVfdCB4cG9zID0gcG9zOwogIGZvciAoOyB4cG9zIDwg bGVuZ3RoICgpOyArK3hwb3MpCiAgICBpZiAodHJhaXRzOjpuZSAoZGF0YSAoKSBbeHBvc10sIGMp KQogICAgICByZXR1cm4geHBvczsKICByZXR1cm4gbnBvczsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hh clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs IEFsbG9jYXRvcj46OgpmaW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBl IHBvcywgc2l6ZV90eXBlIG4pIGNvbnN0CnsKICBpZiAobGVuZ3RoKCkgPT0gMCkKICAgIHJldHVy biBucG9zOwogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgpIC0gMTsKICBpZiAoeHBvcyA+IHBvcykK ICAgIHhwb3MgPSBwb3M7CiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7KQogICAgaWYgKF9maW5k IChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgPT0gbnBvcykKICAgICAgcmV0dXJuIHhwb3M7CiAg cmV0dXJuIG5wb3M7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz IEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXpl X3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9sYXN0 X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QKewogIGlmIChsZW5ndGgoKSA9 PSAwKQogICAgcmV0dXJuIG5wb3M7CiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAxOwogIGlm ICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKICBmb3IgKCsreHBvczsgeHBvcy0tID4gMDsp CiAgICBpZiAodHJhaXRzOjpuZSAoZGF0YSAoKSBbeHBvc10sIGMpKQogICAgICByZXR1cm4geHBv czsKICByZXR1cm4gbnBvczsKfQp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg Y2xhc3MgQWxsb2NhdG9yPgppbnQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0 b3I+OjoKY29tcGFyZSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MsIHNp emVfdHlwZSBuKSBjb25zdAp7CiAgZG8geyBpZiAoIHBvcyA+IGxlbmd0aCAoKSApIF9fb3V0X29m X3JhbmdlICgicG9zID4gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsKICBzaXplX3QgcmxlbiA9 IGxlbmd0aCAoKSAtIHBvczsKICBpZiAocmxlbiA+IG4pCiAgICBybGVuID0gbjsKICBpZiAocmxl biA+IHN0ci5sZW5ndGggKCkpCiAgICBybGVuID0gc3RyLmxlbmd0aCAoKTsKICBpbnQgciA9IHRy YWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHBvcywgc3RyLmRhdGEgKCksIHJsZW4pOwogIGlmIChy ICE9IDApCiAgICByZXR1cm4gcjsKICBpZiAocmxlbiA9PSBuKQogICAgcmV0dXJuIDA7CiAgcmV0 dXJuIChsZW5ndGggKCkgLSBwb3MpIC0gc3RyLmxlbmd0aCAoKTsKfQp0ZW1wbGF0ZSA8Y2xhc3Mg Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbnQgYmFzaWNfc3RyaW5nIDxj aGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKY29tcGFyZSAoY29uc3QgY2hhclQqIHMsIHNpemVf dHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7CiAgZG8geyBpZiAoIHBvcyA+IGxlbmd0aCAo KSApIF9fb3V0X29mX3JhbmdlICgicG9zID4gbGVuZ3RoICgpIik7IH0gd2hpbGUgKDApIDsKICBz aXplX3QgcmxlbiA9IGxlbmd0aCAoKSAtIHBvczsKICBpZiAocmxlbiA+IG4pCiAgICBybGVuID0g bjsKICBpbnQgciA9IHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHBvcywgcywgcmxlbik7CiAg aWYgKHIgIT0gMCkKICAgIHJldHVybiByOwogIHJldHVybiAobGVuZ3RoICgpIC0gcG9zKSAtIG47 Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4K aXN0cmVhbSAmCm9wZXJhdG9yPj4gKGlzdHJlYW0gJmlzLCBiYXNpY19zdHJpbmcgPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj4gJnMpCnsKICBpbnQgdyA9IGlzLndpZHRoICgwKTsKICBpZiAoaXMu aXBmeDAgKCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIHN0cmVhbWJ1ZiAqc2IgPSBpcy5yZGJ1ZiAo KTsKICAgICAgcy5yZXNpemUgKDApOwogICAgICB3aGlsZSAoMSkKCXsKCSAgaW50IGNoID0gc2It PnNidW1wYyAoKTsKCSAgaWYgKGNoID09ICgtMSkgKQoJICAgIHsKCSAgICAgIGlzLnNldHN0YXRl IChpb3M6OmVvZmJpdCk7CgkgICAgICBicmVhazsKCSAgICB9CgkgIGVsc2UgaWYgKHRyYWl0czo6 aXNfZGVsIChjaCkpCgkgICAgewoJICAgICAgc2ItPnN1bmdldGMgKCk7CgkgICAgICBicmVhazsK CSAgICB9CgkgIHMgKz0gc3RhdGljX2Nhc3Q8Y2hhclQ+IChjaCk7CgkgIGlmICgtLXcgPT0gMSkK CSAgICBicmVhazsKCX0KICAgIH0KICBpcy5pc2Z4ICgpOwogIGlmIChzLmxlbmd0aCAoKSA9PSAw KQogICAgaXMuc2V0c3RhdGUgKGlvczo6ZmFpbGJpdCk7CiAgcmV0dXJuIGlzOwp9CnRlbXBsYXRl IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cm9zdHJlYW0gJgpv cGVyYXRvcjw8IChvc3RyZWFtICZvLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs IEFsbG9jYXRvcj4mIHMpCnsKICByZXR1cm4gby53cml0ZSAocy5kYXRhICgpLCBzLmxlbmd0aCAo KSk7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv cj4KaXN0cmVhbSYKZ2V0bGluZSAoaXN0cmVhbSAmaXMsIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPiYgcywgY2hhclQgZGVsaW0pCnsKICBpZiAoaXMuaXBmeDEgKCkpCiAg ICB7CiAgICAgIF9HX3NpemVfdCAgY291bnQgPSAwOwogICAgICBzdHJlYW1idWYgKnNiID0gaXMu cmRidWYgKCk7CiAgICAgIHMucmVzaXplICgwKTsKICAgICAgd2hpbGUgKDEpCgl7CgkgIGludCBj aCA9IHNiLT5zYnVtcGMgKCk7CgkgIGlmIChjaCA9PSAoLTEpICkKCSAgICB7CgkgICAgICBpcy5z ZXRzdGF0ZSAoY291bnQgPT0gMAoJCQkgICA/IChpb3M6OmZhaWxiaXR8aW9zOjplb2ZiaXQpCgkJ CSAgIDogaW9zOjplb2ZiaXQpOwoJICAgICAgYnJlYWs7CgkgICAgfQoJICArK2NvdW50OwoJICBp ZiAoY2ggPT0gZGVsaW0pCgkgICAgYnJlYWs7CgkgIHMgKz0gc3RhdGljX2Nhc3Q8Y2hhclQ+IChj aCk7CgkgIGlmIChzLmxlbmd0aCAoKSA9PSBzLm5wb3MgLSAxKQoJICAgIHsKCSAgICAgIGlzLnNl dHN0YXRlIChpb3M6OmZhaWxiaXQpOwoJICAgICAgYnJlYWs7CgkgICAgfQoJfQogICAgfQogICAK ICAgCiAgaXMuaXNmeCAoKTsKICByZXR1cm4gaXM7Cn0KdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz LCBBbGxvY2F0b3I+OjpSZXAKYmFzaWNfc3RyaW5nPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46 Om5pbFJlcCA9IHsgMCwgMCwgMSwgZmFsc2UgfTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh aXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB bGxvY2F0b3I+OjpucG9zOwp9ICAKIyA2NTUgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2dj Yy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr LTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwojIDYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2dj Yy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr LTMvc3RyaW5nIiAyIDMKZXh0ZXJuICJDKysiIHsKdHlwZWRlZiBiYXNpY19zdHJpbmcgPGNoYXI+ IHN0cmluZzsKfSAgCiMgMiAidG0uQyIgMgojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGli L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv ZysrLTMvbWFwIiAxIDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF90 cmVlLmgiIDEgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJw Yy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29i YXNlLmgiIDEgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJw Yy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3BhaXIu aCIgMSAzCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4Kc3RydWN0IHBhaXIgewogIHR5 cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5cGU7CiAgX1QxIGZp cnN0OwogIF9UMiBzZWNvbmQ7CiAgcGFpcigpIDogZmlyc3QoX1QxKCkpLCBzZWNvbmQoX1QyKCkp IHt9CiAgcGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwg c2Vjb25kKF9fYikge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFpcihj b25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Au c2Vjb25kKSB7fQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29s IG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9U Mj4mIF9feSkKeyAKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25k ID09IF9feS5zZWNvbmQ7IAp9CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5l IGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1Qx LCBfVDI+JiBfX3kpCnsgCiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fCAKICAgICAg ICAgKCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7 IAp9CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHBhaXI8X1QxLCBfVDI+ IG1ha2VfcGFpcihjb25zdCBfVDEmIF9feCwgY29uc3QgX1QyJiBfX3kpCnsKICByZXR1cm4gcGFp cjxfVDEsIF9UMj4oX194LCBfX3kpOwp9CiMgNDIgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGli L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv ZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGli L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv ZysrLTMvdHlwZV90cmFpdHMuaCIgMSAzCnN0cnVjdCBfX3RydWVfdHlwZSB7Cn07CnN0cnVjdCBf X2ZhbHNlX3R5cGUgewp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0 cyB7IAogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgICB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2Jl X2ZpcnN0OwogICAgICAgICAgICAgICAgICAgIAogICAgCiAgIHR5cGVkZWYgX19mYWxzZV90eXBl ICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90 eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90 eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxz ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBl ICAgIGlzX1BPRF90eXBlOwp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxib29s PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKdGVtcGxhdGU8PiAgc3Ry dWN0IF9fdHlwZV90cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190 cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFz X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNf dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5 cGU7Cn07CnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKdGVtcGxhdGU8PiAgc3RydWN0IF9f dHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhh c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBo YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9E X3R5cGU7Cn07CnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190 eXBlX3RyYWl0czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp YWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2 aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07 CnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlw ZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVm YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9j b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fz c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKdGVt cGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFp dHM8bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CnRlbXBsYXRl PD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlICAgIGlzX1BPRF90eXBlOwp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxs b25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0 X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdu bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9Owp0ZW1wbGF0 ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3Ry YWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1 bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29w eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3Np Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rl c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CnRlbXBs YXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg ICAgaXNfUE9EX3R5cGU7Cn07CnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcg ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1l bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKdGVtcGxhdGUg PGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgICAgaXNfUE9EX3R5cGU7Cn07CiMgMjk1ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9n Y2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr Ky0zL3R5cGVfdHJhaXRzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19pbnRl Z2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07CnRlbXBsYXRlPD4gIHN0 cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7 Cn07CnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBfSW50ZWdyYWw7Cn07CnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxzaWdu ZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9Owp0ZW1wbGF0ZTw+ ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5 cGUgX0ludGVncmFsOwp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4g ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3Qg X0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK dGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlwZWRl ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdl cjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKdGVtcGxhdGU8PiAg c3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg X0ludGVncmFsOwp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewogIHR5 cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2lu dGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9 Owp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBf X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1 bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK IyA0NSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz LjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAz CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgz LjIuNS8yLjk1LjMvaW5jbHVkZS9zdHJpbmcuaCIgMSAzIDQKIyAxOSAiL2FvbG5ldC9wa2cvZ2Nj LTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9z dHJpbmcuaCIgMyA0CiMgMjQzICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bv d2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0cmluZy5oIiAzIDQKIyA0OCAiL2Fv bG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1 LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2Fv bG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1 LjMvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xp Yi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N5c2xpbWl0cy5o IiAxIDMgNAojIDEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1p Ym0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiMgMTE0ICIvYW9sbmV0 L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9p bmNsdWRlL2xpbWl0cy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiMg MTE3ICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMu Mi41LzIuOTUuMy9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDcgIi9hb2xuZXQvcGtnL2djYy0y Ljk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvc3lz bGltaXRzLmgiIDIgMyA0CiMgMTEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIv cG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CiMgNDkg Ii9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUv Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEg Ii9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUv Mi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzQyICIvYW9sbmV0L3BrZy9nY2MtMi45 NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRlL3N0ZGRl Zi5oIiAzIDQKIyA1MSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBj LWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jh c2UuaCIgMiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBj LWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9uZXcuaCIgMSAzIDQKIyAxICIvYW9sbmV0L3Br Zy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNs dWRlL25ldyIgMSAzIDQKI3ByYWdtYSBpbnRlcmZhY2UgIm5ldyIKIyAxICIvYW9sbmV0L3BrZy9n Y2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy9pbmNsdWRl L3N0ZGRlZi5oIiAxIDMgNAojIDM0MiAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxp Yi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CiMgOCAi L2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8y Ljk1LjMvaW5jbHVkZS9uZXciIDIgMyA0CiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIv Z2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvaW5jbHVkZS9leGNlcHRpb24iIDEg MyA0CiNwcmFnbWEgaW50ZXJmYWNlICJleGNlcHRpb24iCmV4dGVybiAiQysrIiB7Cm5hbWVzcGFj ZSBzdGQgewpjbGFzcyBleGNlcHRpb24gewpwdWJsaWM6CiAgZXhjZXB0aW9uICgpIHsgfQogIHZp cnR1YWwgfmV4Y2VwdGlvbiAoKSB7IH0KICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29u c3Q7Cn07CmNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uIHsKcHVibGljOgog IGJhZF9leGNlcHRpb24gKCkgeyB9CiAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbiAoKSB7IH0KfTsK dHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwp0eXBlZGVmIHZvaWQgKCp1bmV4 cGVjdGVkX2hhbmRsZXIpICgpOwp0ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlICh0ZXJt aW5hdGVfaGFuZGxlcik7CnZvaWQgdGVybWluYXRlICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0 dXJuX18pKTsKdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkICh1bmV4cGVjdGVkX2hh bmRsZXIpOwp2b2lkIHVuZXhwZWN0ZWQgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp Owpib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbiAoKTsKfSAgCn0gIAojIDkgIi9hb2xuZXQvcGtnL2dj Yy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUv bmV3IiAyIDMgNApleHRlcm4gIkMrKyIgewpuYW1lc3BhY2Ugc3RkIHsKICBjbGFzcyBiYWRfYWxs b2MgOiBwdWJsaWMgZXhjZXB0aW9uIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq IHdoYXQoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICJiYWRfYWxsb2MiOyB9CiAgfTsKICBzdHJ1 Y3Qgbm90aHJvd190IHt9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKICB0eXBl ZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIg KG5ld19oYW5kbGVyKTsKfSAgCnZvaWQgKm9wZXJhdG9yIG5ldyAoc2l6ZV90KSB0aHJvdyAoc3Rk OjpiYWRfYWxsb2MpOwp2b2lkICpvcGVyYXRvciBuZXdbXSAoc2l6ZV90KSB0aHJvdyAoc3RkOjpi YWRfYWxsb2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKSB0aHJvdygpOwp2b2lkIG9w ZXJhdG9yIGRlbGV0ZVtdICh2b2lkICopIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ldyAoc2l6 ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ld1td IChzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBk ZWxldGUgKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJh dG9yIGRlbGV0ZVtdICh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKaW5s aW5lIHZvaWQgKm9wZXJhdG9yIG5ldyhzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0 dXJuIHBsYWNlOyB9CmlubGluZSB2b2lkICpvcGVyYXRvciBuZXdbXShzaXplX3QsIHZvaWQgKnBs YWNlKSB0aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9Cn0gIAojIDYgIi9hb2xuZXQvcGtnL2djYy0y Ljk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zL2luY2x1ZGUvbmV3 LmgiIDIgMyA0CnVzaW5nIHN0ZDo6bmV3X2hhbmRsZXI7CnVzaW5nIHN0ZDo6c2V0X25ld19oYW5k bGVyOwojIDUyICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJt LWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5o IiAyIDMKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIs IGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9G b3J3YXJkSXRlcjIgX19iLCBfVHAqKSB7CiAgX1RwIF9fdG1wID0gKl9fYTsKICAqX19hID0gKl9f YjsKICAqX19iID0gX190bXA7Cn0KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNz IF9Gb3J3YXJkSXRlcjI+CmlubGluZSB2b2lkIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwg X0ZvcndhcmRJdGVyMiBfX2IpIHsKICBfX2l0ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1ZV90eXBl KCBfX2EgKSApOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIHN3YXAoX1RwJiBf X2EsIF9UcCYgX19iKSB7CiAgX1RwIF9fdG1wID0gX19hOwogIF9fYSA9IF9fYjsKICBfX2IgPSBf X3RtcDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3Qg X1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CiAgcmV0dXJuIF9fYiA8IF9fYSA/IF9fYiA6IF9f YTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1Rw JiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CiAgcmV0dXJuICBfX2EgPCBfX2IgPyBfX2IgOiBfX2E7 Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAm IG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkgewog IHJldHVybiBfX2NvbXAoX19iLCBfX2EpID8gX19iIDogX19hOwp9CnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2Es IGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19jb21wKF9fYSwg X19iKSA/IF9fYiA6IF9fYTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091 dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weShfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0 X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7 ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVy biBfX3Jlc3VsdDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9P dXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRlcgpfX2NvcHkoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg X091dHB1dEl0ZXIgX19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCBfRGlzdGFu Y2UqKQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsg LS1fX24pIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytf X3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+Cmlu bGluZSBfVHAqCl9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBf X2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXpl b2YoX1RwKSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFz dCAtIF9fZmlyc3QpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0 SXRlciwgY2xhc3MgX0Jvb2xUeXBlPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoIHsKICBzdGF0aWMg X091dHB1dEl0ZXIgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdv cnkgX0NhdGVnb3J5OwogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0 SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICByZXR1cm4gX19jb3B5KF9fZmly c3QsIF9fbGFzdCwgX19yZXN1bHQsIF9DYXRlZ29yeSgpLCAoX0Rpc3RhbmNlKikgMCk7CiAgfQp9 Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoPF9UcCosIF9UcCos IF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNv bnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X3RyaXZp YWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7 CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0 LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19s YXN0LCBfX3Jlc3VsdCk7CiAgfQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg X091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46 OnZhbHVlX3R5cGUgX1RwOwogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+Ojpo YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1 cm4gX19jb3B5X2Rpc3BhdGNoPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyLCBfVHJpdmlhbD4KICAg IDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQojIDIxMyAiL2FvbG5ldC9wa2cv Z2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4v Li4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp ZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwgCiAgICAgICAgICBj bGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2Fy ZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jl c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0 aW9uYWxfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0Rpc3RhbmNlKikKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICotLV9f cmVzdWx0ID0gKi0tX19sYXN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3Rh bmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewog IGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQog ICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CnRlbXBsYXRl IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAog ICAgICAgICAgY2xhc3MgX0Jvb2xUeXBlPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNo CnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXIx Pjo6aXRlcmF0b3JfY2F0ZWdvcnkgCiAgICAgICAgICBfQ2F0OwogIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUKICAg ICAgICAgIF9EaXN0YW5jZTsKICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJdGVyMiBjb3B5KF9CaWRp cmVjdGlvbmFsSXRlcjEgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5 X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9DYXQoKSwgKF9EaXN0YW5jZSop IDApOwogIH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9k aXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29u c3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAg Y29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgbWVtbW92ZShfX3Jl c3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICByZXR1cm4gX19y ZXN1bHQgLSBfTnVtOwogIH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9i YWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRp YyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBf X3Jlc3VsdCkgewogICAgcmV0dXJuICBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1Rw KiwgX190cnVlX3R5cGU+CiAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsK ICB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfQkkxLCBjbGFzcyBfQkkyPgppbmxpbmUgX0JJMiBjb3B5 X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpIHsKICB0 eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9C STI+Ojp2YWx1ZV90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fz c2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogIHJldHVybiBfX2NvcHlfYmFj a3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAgOjpjb3B5 KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9CiMgMzAzICIvYW9sbmV0L3BrZy9nY2MtMi45 NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy LCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CnBhaXI8X0lucHV0SXRlciwgX091dHB1 dEl0ZXI+IF9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykg ewogIGZvciAoIDsgX19jb3VudCA+IDA7IC0tX19jb3VudCkgewogICAgKl9fcmVzdWx0ID0gKl9f Zmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gcGFpcjxf SW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4oX19maXJzdCwgX19yZXN1bHQpOwp9CnRlbXBsYXRlIDxj bGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWly PF9SQUl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfUkFJdGVyIF9fZmlyc3QsIF9TaXplIF9f Y291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICByYW5kb21fYWNj ZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0ZXIgX19sYXN0ID0gX19maXJzdCArIF9fY291bnQ7 CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+KF9fbGFzdCwgY29weShfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz IF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1 dEl0ZXI+Cl9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1 dEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19y ZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSAp Owp9CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1 dEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpjb3B5X24oX0lucHV0 SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHJl dHVybiBfX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCk7Cn0KdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKfQp0 ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRw dXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYg X192YWx1ZSkgewogIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICpfX2Zp cnN0ID0gX192YWx1ZTsKICByZXR1cm4gX19maXJzdDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4g bWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpIHsKICB3aGlsZSAoX19maXJz dDEgIT0gX19sYXN0MSAmJiAqX19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICArK19fZmlyc3Qx OwogICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0 ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg Y2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CnBhaXI8X0lucHV0SXRl cjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg X19iaW5hcnlfcHJlZCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5 X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2Zp cnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0 MSwgX19maXJzdDIpOwp9CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0 SXRlcjI+CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikgewogIGZv ciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlm ICgqX19maXJzdDEgIT0gKl9fZmlyc3QyKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRy dWU7Cn0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xh c3MgX0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9f Zmlyc3QyLCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBmb3IgKCA7IF9fZmly c3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBpZiAoIV9fYmluYXJ5 X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJu IHRydWU7Cn0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4K Ym9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0 SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19s YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmly c3QyKSB7CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gdHJ1ZTsK ICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAg cmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQp0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFy ZT4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg X19maXJzdDIgIT0gX19sYXN0MgogICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0Mikgewog ICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiB0cnVlOwog ICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgIHJldHVybiBmYWxzZTsK ICB9CiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsK fQppbmxpbmUgYm9vbCAKbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hh ciogX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9f Zmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xh c3QyKQp7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICBjb25z dCBzaXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogIGNvbnN0IGludCBfX3Jlc3Vs dCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOwogIHJl dHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19sZW4yOwp9Cmlu bGluZSBib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBj b25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKewogIHJldHVybiBsZXhp Y29ncmFwaGljYWxfY29tcGFyZSgoY29uc3QgdW5zaWduZWQgY2hhciopIF9fZmlyc3QxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdW5zaWduZWQgY2hhciopIF9fbGFz dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNpZ25lZCBjaGFy KikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1bnNp Z25lZCBjaGFyKikgX19sYXN0Mik7Cn0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz cyBfSW5wdXRJdGVyMj4KaW50IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikK ewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsK ICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiAtMTsKICAgIGlmICgq X19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiAxOwogICAgKytfX2ZpcnN0MTsKICAg ICsrX19maXJzdDI7CiAgfQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7CiAgICByZXR1cm4g IShfX2ZpcnN0MSA9PSBfX2xhc3QxKTsKICB9CiAgZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9 CmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IHVuc2lnbmVk IGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjEg PSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIg LSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmly c3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVz dWx0IAogICAgICAgICAgICAgICAgICAgICAgIDogKF9fbGVuMSA9PSBfX2xlbjIgPyAwIDogKF9f bGVuMSA8IF9fbGVuMiA/IC0xIDogMSkpOwp9CmlubGluZSBpbnQgCl9fbGV4aWNvZ3JhcGhpY2Fs X2NvbXBhcmVfM3dheShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25z dCBjaGFyKiBfX2xhc3QyKQp7CiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dh eSgoY29uc3QgdW5zaWduZWQgY2hhciopIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBf X2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1 bnNpZ25lZCBjaGFyKikgX19sYXN0Mik7Cn0KdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBj bGFzcyBfSW5wdXRJdGVyMj4KaW50IGxleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX0lucHV0 SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7 CiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfX2ZpcnN0MSwgX19sYXN0 MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9CiMgNTYgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGli L2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUv ZysrLTMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2Nj LWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst My9zdGxfY29uc3RydWN0LmgiIDEgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBk ZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX19wb2ludGVyLT5+X1RwKCk7Cn0KdGVtcGxhdGUg PGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3AsIGNv bnN0IF9UMiYgX192YWx1ZSkgewogIG5ldyAoX19wKSBfVDEoX192YWx1ZSk7Cn0KdGVtcGxhdGUg PGNsYXNzIF9UMT4KaW5saW5lIHZvaWQgY29uc3RydWN0KF9UMSogX19wKSB7CiAgbmV3IChfX3Ap IF9UMSgpOwp9CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZApf X2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBf X2xhc3QsIF9fZmFsc2VfdHlwZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m aXJzdCkKICAgIGRlc3Ryb3koJipfX2ZpcnN0KTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyYXRvcj4KaW5saW5lIHZvaWQgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9y d2FyZEl0ZXJhdG9yLCBfX3RydWVfdHlwZSkge30KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl cmF0b3IsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19kZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3Ig X19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVu YW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAg X1RyaXZpYWxfZGVzdHJ1Y3RvcjsKICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX1Ry aXZpYWxfZGVzdHJ1Y3RvcigpKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4K aW5saW5lIHZvaWQgZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRl cmF0b3IgX19sYXN0KSB7CiAgX19kZXN0cm95KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBl KCBfX2ZpcnN0ICkgKTsKfQppbmxpbmUgdm9pZCBkZXN0cm95KGNoYXIqLCBjaGFyKikge30KaW5s aW5lIHZvaWQgZGVzdHJveSh3Y2hhcl90Kiwgd2NoYXJfdCopIHt9CiMgNTggIi9hb2xuZXQvcGtn L2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4u Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2Nj LTIuOTUuMy9saWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4v Li4vaW5jbHVkZS9nKystMy9zdGxfZnVuY3Rpb24uaCIgMSAzCnRlbXBsYXRlIDxjbGFzcyBfQXJn LCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBh cmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKdGVtcGxhdGUg PGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGJpbmFyeV9m dW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYg X0FyZzIgc2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBl Owp9OyAgICAgIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5h cnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9Owp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf VHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195 KSBjb25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry dWN0IG11bHRpcGxpZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAg X1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJl dHVybiBfX3ggKiBfX3k7IH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7 IH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9UcCBpZGVudGl0eV9lbGVtZW50KHBs dXM8X1RwPikgewogIHJldHVybiBfVHAoMCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5l IF9UcCBpZGVudGl0eV9lbGVtZW50KG11bHRpcGxpZXM8X1RwPikgewogIHJldHVybiBfVHAoMSk7 Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1vZHVsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1 bmN0aW9uPF9UcCxfVHAsX1RwPiAKewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICUgX195OyB9Cn07CnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4g CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gLV9feDsg fQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5 X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9Cn07CnRlbXBs YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNv bnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07CnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1Rw LGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f eSkgY29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0 cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9v bCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1 cm4gX194IDwgX195OyB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyX2Vx dWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJh dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg Pj0gX195OyB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzX2VxdWFsIDogcHVi bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNv bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9feTsg fQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmlu YXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAm IF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAmJiBfX3k7IH0KfTsKdGVt cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsKdGVtcGxhdGUgPGNs YXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxi b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAh X194OyB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpjbGFzcyB1bmFyeV9uZWdhdGUK ICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90 eXBlLCBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBl eHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194 KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVu dF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAhX01fcHJlZChfX3gpOwogIH0KfTsKdGVt cGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4g Cm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxf UHJlZGljYXRlPihfX3ByZWQpOwp9CnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPiAKY2xhc3Mg YmluYXJ5X25lZ2F0ZSAKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRp Y2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw ZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGlj OgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3By ZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpm aXJzdF9hcmd1bWVudF90eXBlJiBfX3gsIAogICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFt ZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KSBjb25zdAogIHsKICAgIHJl dHVybiAhX01fcHJlZChfX3gsIF9feSk7IAogIH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNh dGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+IApub3QyKGNvbnN0IF9QcmVkaWNh dGUmIF9fcHJlZCkKewogIHJldHVybiBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7 Cn0KdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+IApjbGFzcyBiaW5kZXIxc3QKICA6IHB1Ymxp YyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlw ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRf dHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9u OjpmaXJzdF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9P cGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmly c3RfYXJndW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0 eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5h bWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0 dXJuIG9wKHZhbHVlLCBfX3gpOyAKICB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBj bGFzcyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4gCmJpbmQxc3QoY29uc3QgX09w ZXJhdGlvbiYgX19vcGVyLCBjb25zdCBfVHAmIF9feCkgCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9P cGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVy MXN0PF9PcGVyYXRpb24+KF9fb3BlciwgX0FyZzFfdHlwZShfX3gpKTsKfQp0ZW1wbGF0ZSA8Y2xh c3MgX09wZXJhdGlvbj4gCmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u PHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVk OgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50 X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LAog ICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlw ZSYgX195KSAKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJh dGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246 OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFs dWUpOyAKICB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGlu ZSBiaW5kZXIybmQ8X09wZXJhdGlvbj4gCmJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYgX19vcGVy LCBjb25zdCBfVHAmIF9feCkgCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29u ZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJuZDxfT3BlcmF0aW9u PihfX29wZXIsIF9BcmcyX3R5cGUoX194KSk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24x LCBjbGFzcyBfT3BlcmF0aW9uMj4KY2xhc3MgdW5hcnlfY29tcG9zZQogIDogcHVibGljIHVuYXJ5 X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlLAogICAgICAgICAg ICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZT4gCnsKcHJv dGVjdGVkOgogIF9PcGVyYXRpb24xIF9fb3AxOwogIF9PcGVyYXRpb24yIF9fb3AyOwpwdWJsaWM6 CiAgdW5hcnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9uMSYgX194LCBjb25zdCBfT3BlcmF0aW9u MiYgX195KSAKICAgIDogX19vcDEoX194KSwgX19vcDIoX195KSB7fQogIHR5cGVuYW1lIF9PcGVy YXRpb24xOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlv bjI6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9fb3AxKF9fb3AyKF9f eCkpOwogIH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9u Mj4KaW5saW5lIHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjI+IApjb21wb3Nl MShjb25zdCBfT3BlcmF0aW9uMSYgX19vcDEsIGNvbnN0IF9PcGVyYXRpb24yJiBfX29wMikKewog IHJldHVybiB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yPihfX29wMSwgX19v cDIpOwp9CnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNs YXNzIF9PcGVyYXRpb24zPgpjbGFzcyBiaW5hcnlfY29tcG9zZQogIDogcHVibGljIHVuYXJ5X2Z1 bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlLAogICAgICAgICAgICAg ICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0 ZWQ6CiAgX09wZXJhdGlvbjEgX01fb3AxOwogIF9PcGVyYXRpb24yIF9NX29wMjsKICBfT3BlcmF0 aW9uMyBfTV9vcDM7CnB1YmxpYzoKICBiaW5hcnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9uMSYg X194LCBjb25zdCBfT3BlcmF0aW9uMiYgX195LCAKICAgICAgICAgICAgICAgICBjb25zdCBfT3Bl cmF0aW9uMyYgX196KSAKICAgIDogX01fb3AxKF9feCksIF9NX29wMihfX3kpLCBfTV9vcDMoX196 KSB7IH0KICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNv bnN0IHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAg IHJldHVybiBfTV9vcDEoX01fb3AyKF9feCksIF9NX29wMyhfX3gpKTsKICB9Cn07CnRlbXBsYXRl IDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNzIF9PcGVyYXRpb24z PgppbmxpbmUgYmluYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsIF9PcGVyYXRpb24yLCBfT3BlcmF0 aW9uMz4gCmNvbXBvc2UyKGNvbnN0IF9PcGVyYXRpb24xJiBfX29wMSwgY29uc3QgX09wZXJhdGlv bjImIF9fb3AyLCAKICAgICAgICAgY29uc3QgX09wZXJhdGlvbjMmIF9fb3AzKQp7CiAgcmV0dXJu IGJpbmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24yLF9PcGVyYXRpb24zPgogICAg KF9fb3AxLCBfX29wMiwgX19vcDMpOwp9CnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVz dWx0PgpjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0 aW9uPF9BcmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9Bcmcp OwpwdWJsaWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9p bnRlcl90b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194 KSB7fQogIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRy KF9feCk7IH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBw b2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9mdW4oX1Jlc3VsdCAo Kl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBf UmVzdWx0PihfX3gpOwp9CnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNz IF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uIDogCiAgcHVibGljIGJp bmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1 bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5 X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9S ZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpIAogICAgICA6IF9NX3B0cihfX3gpIHt9CiAgICBf UmVzdWx0IG9wZXJhdG9yKCkoX0FyZzEgX194LCBfQXJnMiBfX3kpIGNvbnN0IHsKICAgICAgcmV0 dXJuIF9NX3B0cihfX3gsIF9feSk7CiAgICB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xh c3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlv bjxfQXJnMSxfQXJnMixfUmVzdWx0PiAKcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0Fy ZzIpKSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9S ZXN1bHQ+KF9feCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1 YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiB7CiAgY29uc3QgX1RwJiBvcGVyYXRvcigpKGNv bnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9U cD4gc3RydWN0IGlkZW50aXR5IDogcHVibGljIF9JZGVudGl0eTxfVHA+IHt9Owp0ZW1wbGF0ZSA8 Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9Q YWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZT4gewogIGNvbnN0IHR5cGVuYW1lIF9QYWly OjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJl dHVybiBfX3guZmlyc3Q7CiAgfQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2Vs ZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vj b25kX3R5cGU+CnsKICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9y KCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9 Owp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0cnVjdCBzZWxlY3Qxc3QgOiBwdWJsaWMgX1NlbGVj dDFzdDxfUGFpcj4ge307CnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDJuZCA6 IHB1YmxpYyBfU2VsZWN0Mm5kPF9QYWlyPiB7fTsKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFz cyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0MXN0IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJn MSwgX0FyZzIsIF9BcmcxPiB7CiAgX0FyZzEgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYgX194LCBj b25zdCBfQXJnMiYpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX0Fy ZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3QybmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzI+IHsKICBfQXJnMiBvcGVyYXRvcigpKGNvbnN0IF9Bcmcx JiwgY29uc3QgX0FyZzImIF9feSkgY29uc3QgeyByZXR1cm4gX195OyB9Cn07CnRlbXBsYXRlIDxj bGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+IApzdHJ1Y3QgcHJvamVjdDFzdCA6IHB1YmxpYyBfUHJv amVjdDFzdDxfQXJnMSwgX0FyZzI+IHt9Owp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9B cmcyPgpzdHJ1Y3QgcHJvamVjdDJuZCA6IHB1YmxpYyBfUHJvamVjdDJuZDxfQXJnMSwgX0FyZzI+ IHt9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGNvbnN0YW50X3ZvaWRfZnVuCnsK ICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7CiAgcmVzdWx0X3R5cGUgX192YWw7CiAgY29u c3RhbnRfdm9pZF9mdW4oY29uc3QgcmVzdWx0X3R5cGUmIF9fdikgOiBfX3ZhbChfX3YpIHt9CiAg Y29uc3QgcmVzdWx0X3R5cGUmIG9wZXJhdG9yKCkoKSBjb25zdCB7IHJldHVybiBfX3ZhbDsgfQp9 OyAgCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJndW1lbnQgPSBfUmVzdWx0Pgpz dHJ1Y3QgY29uc3RhbnRfdW5hcnlfZnVuIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9Bcmd1bWVu dCwgX1Jlc3VsdD4gewogIF9SZXN1bHQgX01fdmFsOwogIGNvbnN0YW50X3VuYXJ5X2Z1bihjb25z dCBfUmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikge30KICBjb25zdCBfUmVzdWx0JiBvcGVyYXRv cigpKGNvbnN0IF9Bcmd1bWVudCYpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbDsgfQp9Owp0ZW1wbGF0 ZSA8Y2xhc3MgX1Jlc3VsdCwgY2xhc3MgX0FyZzEgPSBfUmVzdWx0LCBjbGFzcyBfQXJnMiA9IF9B cmcxPgpzdHJ1Y3QgY29uc3RhbnRfYmluYXJ5X2Z1biA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248 X0FyZzEsIF9BcmcyLCBfUmVzdWx0PiB7CiAgX1Jlc3VsdCBfTV92YWw7CiAgY29uc3RhbnRfYmlu YXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikge30KICBjb25zdCBfUmVz dWx0JiBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImKSBjb25zdCB7CiAgICBy ZXR1cm4gX01fdmFsOwogIH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25z dGFudF92b2lkX2Z1bjxfUmVzdWx0PiBjb25zdGFudDAoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsK ICByZXR1cm4gY29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4oX192YWwpOwp9CnRlbXBsYXRlIDxj bGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4g Y29uc3RhbnQxKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3VuYXJ5 X2Z1bjxfUmVzdWx0LF9SZXN1bHQ+KF9fdmFsKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4K aW5saW5lIGNvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0LF9SZXN1bHQ+IApjb25z dGFudDIoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRfYmluYXJ5X2Z1 bjxfUmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4oX192YWwpOwp9CmNsYXNzIHN1YnRyYWN0aXZlX3Ju ZyA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludD4gewpw cml2YXRlOgogIHVuc2lnbmVkIGludCBfTV90YWJsZVs1NV07CiAgc2l6ZV90IF9NX2luZGV4MTsK ICBzaXplX3QgX01faW5kZXgyOwpwdWJsaWM6CiAgdW5zaWduZWQgaW50IG9wZXJhdG9yKCkodW5z aWduZWQgaW50IF9fbGltaXQpIHsKICAgIF9NX2luZGV4MSA9IChfTV9pbmRleDEgKyAxKSAlIDU1 OwogICAgX01faW5kZXgyID0gKF9NX2luZGV4MiArIDEpICUgNTU7CiAgICBfTV90YWJsZVtfTV9p bmRleDFdID0gX01fdGFibGVbX01faW5kZXgxXSAtIF9NX3RhYmxlW19NX2luZGV4Ml07CiAgICBy ZXR1cm4gX01fdGFibGVbX01faW5kZXgxXSAlIF9fbGltaXQ7CiAgfQogIHZvaWQgX01faW5pdGlh bGl6ZSh1bnNpZ25lZCBpbnQgX19zZWVkKQogIHsKICAgIHVuc2lnbmVkIGludCBfX2sgPSAxOwog ICAgX01fdGFibGVbNTRdID0gX19zZWVkOwogICAgc2l6ZV90IF9faTsKICAgIGZvciAoX19pID0g MDsgX19pIDwgNTQ7IF9faSsrKSB7CiAgICAgICAgc2l6ZV90IF9faWkgPSAoMjEgKiAoX19pICsg MSkgJSA1NSkgLSAxOwogICAgICAgIF9NX3RhYmxlW19faWldID0gX19rOwogICAgICAgIF9fayA9 IF9fc2VlZCAtIF9fazsKICAgICAgICBfX3NlZWQgPSBfTV90YWJsZVtfX2lpXTsKICAgIH0KICAg IGZvciAoaW50IF9fbG9vcCA9IDA7IF9fbG9vcCA8IDQ7IF9fbG9vcCsrKSB7CiAgICAgICAgZm9y IChfX2kgPSAwOyBfX2kgPCA1NTsgX19pKyspCiAgICAgICAgICAgIF9NX3RhYmxlW19faV0gPSBf TV90YWJsZVtfX2ldIC0gX01fdGFibGVbKDEgKyBfX2kgKyAzMCkgJSA1NV07CiAgICB9CiAgICBf TV9pbmRleDEgPSAwOwogICAgX01faW5kZXgyID0gMzE7CiAgfQogIHN1YnRyYWN0aXZlX3JuZyh1 bnNpZ25lZCBpbnQgX19zZWVkKSB7IF9NX2luaXRpYWxpemUoX19zZWVkKTsgfQogIHN1YnRyYWN0 aXZlX3JuZygpIHsgX01faW5pdGlhbGl6ZSgxNjE4MDMzOTh1KTsgfQp9Owp0ZW1wbGF0ZSA8Y2xh c3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp b248X1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3QoX1JldCAoX1RwOjoq X19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25z dCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2Yp KCk7Cn07CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9m dW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgog IGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9N X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0 dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25z dDsKfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZf dCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQg bWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0 IG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJp dmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh c3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u PF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQg KF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShj b25zdCBfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgog IF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz cyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQg KF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1Rw KiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2 YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90IDogcHVibGljIGJp bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQg Y29uc3RfbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9f cGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QK ICAgIHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoq X01fZikoX0FyZykgY29uc3Q7Cn07CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNs YXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf VHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0IChf VHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYg X19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRl OgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh c3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3Rf bWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3Bm KSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsg cmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShf QXJnKSBjb25zdDsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90PHZvaWQs IF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBs aWNpdCBtZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9p ZCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6 CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29u c3RfbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1Rw Kix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoq X19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9U cCogX19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoq X01fZikoKSBjb25zdDsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZf dDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoK ICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3Bm KSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9 CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcD4K Y2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0 aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KHZv aWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3Io KShjb25zdCBfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9p ZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fy Zz4KY2xhc3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFyeV9mdW5j dGlvbjxfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lk IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9U cCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgog IHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4gCiAgOiBwdWJsaWMg YmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNp dCBjb25zdF9tZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2Yo X19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25z dCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0Fy ZykgY29uc3Q7Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9m dW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw LF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1Rw OjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9f ciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQg KF9UcDo6Kl9NX2YpKF9BcmcpOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpj bGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmlu YXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21l bV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikg e30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChf X3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25z dDsKfTsKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fdDxf UmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl90 PF9SZXQsX1RwPihfX2YpOyB9CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGlu ZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNv bnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQp0ZW1wbGF0 ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4g bWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpKSAKICB7IHJldHVybiBtZW1fZnVuX3JlZl90 PF9SZXQsX1RwPihfX2YpOyB9CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGlu ZSBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6Oipf X2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4oX19m KTsgfQp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUg bWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykp CiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CnRlbXBsYXRlIDxj bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90 PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7 IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KdGVtcGxhdGUg PGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90 PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyBy ZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQp0ZW1wbGF0ZSA8Y2xh c3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVm X3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25z dCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9 CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1f ZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAg eyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CnRlbXBsYXRlIDxjbGFz cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9S ZXQsX1RwLF9Bcmc+IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyBy ZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CnRlbXBsYXRlIDxj bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxf UmV0LF9UcCxfQXJnPiBtZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJl dHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CnRlbXBsYXRlIDxjbGFz cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZf dDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25z dCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9 CiMgNTkgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4 My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3RyZWUuaCIgMiAzCiAg CnR5cGVkZWYgYm9vbCBfUmJfdHJlZV9Db2xvcl90eXBlOwpjb25zdCBfUmJfdHJlZV9Db2xvcl90 eXBlIF9TX3JiX3RyZWVfcmVkID0gZmFsc2U7CmNvbnN0IF9SYl90cmVlX0NvbG9yX3R5cGUgX1Nf cmJfdHJlZV9ibGFjayA9IHRydWU7CnN0cnVjdCBfUmJfdHJlZV9ub2RlX2Jhc2UKewogIHR5cGVk ZWYgX1JiX3RyZWVfQ29sb3JfdHlwZSBfQ29sb3JfdHlwZTsKICB0eXBlZGVmIF9SYl90cmVlX25v ZGVfYmFzZSogX0Jhc2VfcHRyOwogIF9Db2xvcl90eXBlIF9NX2NvbG9yOyAKICBfQmFzZV9wdHIg X01fcGFyZW50OwogIF9CYXNlX3B0ciBfTV9sZWZ0OwogIF9CYXNlX3B0ciBfTV9yaWdodDsKICBz dGF0aWMgX0Jhc2VfcHRyIF9TX21pbmltdW0oX0Jhc2VfcHRyIF9feCkKICB7CiAgICB3aGlsZSAo X194LT5fTV9sZWZ0ICE9IDApIF9feCA9IF9feC0+X01fbGVmdDsKICAgIHJldHVybiBfX3g7CiAg fQogIHN0YXRpYyBfQmFzZV9wdHIgX1NfbWF4aW11bShfQmFzZV9wdHIgX194KQogIHsKICAgIHdo aWxlIChfX3gtPl9NX3JpZ2h0ICE9IDApIF9feCA9IF9feC0+X01fcmlnaHQ7CiAgICByZXR1cm4g X194OwogIH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZT4Kc3RydWN0IF9SYl90cmVlX25vZGUg OiBwdWJsaWMgX1JiX3RyZWVfbm9kZV9iYXNlCnsKICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1Zh bHVlPiogX0xpbmtfdHlwZTsKICBfVmFsdWUgX01fdmFsdWVfZmllbGQ7Cn07CnN0cnVjdCBfUmJf dHJlZV9iYXNlX2l0ZXJhdG9yCnsKICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZTo6X0Jhc2Vf cHRyIF9CYXNlX3B0cjsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJh dG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICBfQmFz ZV9wdHIgX01fbm9kZTsKICB2b2lkIF9NX2luY3JlbWVudCgpCiAgewogICAgaWYgKF9NX25vZGUt Pl9NX3JpZ2h0ICE9IDApIHsKICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAg ICB3aGlsZSAoX01fbm9kZS0+X01fbGVmdCAhPSAwKQogICAgICAgIF9NX25vZGUgPSBfTV9ub2Rl LT5fTV9sZWZ0OwogICAgfQogICAgZWxzZSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2Rl LT5fTV9wYXJlbnQ7CiAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fcmlnaHQpIHsKICAg ICAgICBfTV9ub2RlID0gX195OwogICAgICAgIF9feSA9IF9feS0+X01fcGFyZW50OwogICAgICB9 CiAgICAgIGlmIChfTV9ub2RlLT5fTV9yaWdodCAhPSBfX3kpCiAgICAgICAgX01fbm9kZSA9IF9f eTsKICAgIH0KICB9CiAgdm9pZCBfTV9kZWNyZW1lbnQoKQogIHsKICAgIGlmIChfTV9ub2RlLT5f TV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCAmJgogICAgICAgIF9NX25vZGUtPl9NX3BhcmVudC0+ X01fcGFyZW50ID09IF9NX25vZGUpCiAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsK ICAgIGVsc2UgaWYgKF9NX25vZGUtPl9NX2xlZnQgIT0gMCkgewogICAgICBfQmFzZV9wdHIgX195 ID0gX01fbm9kZS0+X01fbGVmdDsKICAgICAgd2hpbGUgKF9feS0+X01fcmlnaHQgIT0gMCkKICAg ICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0OwogICAgICBfTV9ub2RlID0gX195OwogICAgfQogICAg ZWxzZSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9wYXJlbnQ7CiAgICAgIHdo aWxlIChfTV9ub2RlID09IF9feS0+X01fbGVmdCkgewogICAgICAgIF9NX25vZGUgPSBfX3k7CiAg ICAgICAgX195ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgICAgX01fbm9kZSA9IF9feTsK ICAgIH0KICB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9SZWYsIGNsYXNzIF9Q dHI+CnN0cnVjdCBfUmJfdHJlZV9pdGVyYXRvciA6IHB1YmxpYyBfUmJfdHJlZV9iYXNlX2l0ZXJh dG9yCnsKICB0eXBlZGVmIF9WYWx1ZSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX1JlZiByZWZlcmVu Y2U7CiAgdHlwZWRlZiBfUHRyIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxf VmFsdWUsIF9WYWx1ZSYsIF9WYWx1ZSo+ICAgICAgICAgICAgIAogICAgaXRlcmF0b3I7CiAgdHlw ZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1 ZSo+IAogICAgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFs dWUsIF9SZWYsIF9QdHI+ICAgICAgICAgICAgICAgICAgIAogICAgX1NlbGY7CiAgdHlwZWRlZiBf UmJfdHJlZV9ub2RlPF9WYWx1ZT4qIF9MaW5rX3R5cGU7CiAgX1JiX3RyZWVfaXRlcmF0b3IoKSB7 fQogIF9SYl90cmVlX2l0ZXJhdG9yKF9MaW5rX3R5cGUgX194KSB7IF9NX25vZGUgPSBfX3g7IH0K ICBfUmJfdHJlZV9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX19pdCkgeyBfTV9ub2RlID0gX19p dC5fTV9ub2RlOyB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9MaW5r X3R5cGUoX01fbm9kZSktPl9NX3ZhbHVlX2ZpZWxkOyB9CiAgcG9pbnRlciBvcGVyYXRvci0+KCkg Y29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KICBfU2VsZiYgb3BlcmF0b3IrKygpIHsg X01faW5jcmVtZW50KCk7IHJldHVybiAqdGhpczsgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7 CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgX01faW5jcmVtZW50KCk7CiAgICByZXR1cm4g X190bXA7CiAgfQogICAgCiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7IF9NX2RlY3JlbWVudCgpOyBy ZXR1cm4gKnRoaXM7IH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAg PSAqdGhpczsKICAgIF9NX2RlY3JlbWVudCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKaW5s aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yJiBfX3gsCiAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvciYgX195KSB7 CiAgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOwp9CmlubGluZSBib29sIG9wZXJh dG9yIT0oY29uc3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvciYgX194LAogICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3ImIF9feSkgewogIHJldHVybiBfX3gu X01fbm9kZSAhPSBfX3kuX01fbm9kZTsKfQojIDIxNCAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9zdGxfdHJlZS5oIiAzCmlubGluZSB2b2lkIApfUmJfdHJlZV9yb3RhdGVfbGVmdChf UmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQp7CiAg X1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3JpZ2h0OwogIF9feC0+X01fcmlnaHQg PSBfX3ktPl9NX2xlZnQ7CiAgaWYgKF9feS0+X01fbGVmdCAhPTApCiAgICBfX3ktPl9NX2xlZnQt Pl9NX3BhcmVudCA9IF9feDsKICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwogIGlm IChfX3ggPT0gX19yb290KQogICAgX19yb290ID0gX195OwogIGVsc2UgaWYgKF9feCA9PSBfX3gt Pl9NX3BhcmVudC0+X01fbGVmdCkKICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195Owog IGVsc2UKICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICBfX3ktPl9NX2xlZnQg PSBfX3g7CiAgX194LT5fTV9wYXJlbnQgPSBfX3k7Cn0KaW5saW5lIHZvaWQgCl9SYl90cmVlX3Jv dGF0ZV9yaWdodChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYg X19yb290KQp7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX2xlZnQ7CiAgX194 LT5fTV9sZWZ0ID0gX195LT5fTV9yaWdodDsKICBpZiAoX195LT5fTV9yaWdodCAhPSAwKQogICAg X195LT5fTV9yaWdodC0+X01fcGFyZW50ID0gX194OwogIF9feS0+X01fcGFyZW50ID0gX194LT5f TV9wYXJlbnQ7CiAgaWYgKF9feCA9PSBfX3Jvb3QpCiAgICBfX3Jvb3QgPSBfX3k7CiAgZWxzZSBp ZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9yaWdodCkKICAgIF9feC0+X01fcGFyZW50LT5f TV9yaWdodCA9IF9feTsKICBlbHNlCiAgICBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsK ICBfX3ktPl9NX3JpZ2h0ID0gX194OwogIF9feC0+X01fcGFyZW50ID0gX195Owp9CmlubGluZSB2 b2lkIApfUmJfdHJlZV9yZWJhbGFuY2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVl X25vZGVfYmFzZSomIF9fcm9vdCkKewogIF9feC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsK ICB3aGlsZSAoX194ICE9IF9fcm9vdCAmJiBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPT0gX1Nf cmJfdHJlZV9yZWQpIHsKICAgIGlmIChfX3gtPl9NX3BhcmVudCA9PSBfX3gtPl9NX3BhcmVudC0+ X01fcGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194 LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fcmlnaHQ7CiAgICAgIGlmIChfX3kgJiYgX195LT5f TV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9j b2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX195LT5fTV9jb2xvciA9IF9TX3JiX3Ry ZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBf U19yYl90cmVlX3JlZDsKICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50Owog ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9N X3JpZ2h0KSB7CiAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgIF9SYl90 cmVlX3JvdGF0ZV9sZWZ0KF9feCwgX19yb290KTsKICAgICAgICB9CiAgICAgICAgX194LT5fTV9w YXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVu dC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9SYl90cmVl X3JvdGF0ZV9yaWdodChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICB9 CiAgICB9CiAgICBlbHNlIHsKICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9N X3BhcmVudC0+X01fcGFyZW50LT5fTV9sZWZ0OwogICAgICBpZiAoX195ICYmIF9feS0+X01fY29s b3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3Ig PSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feS0+X01fY29sb3IgPSBfU19yYl90cmVlX2Js YWNrOwogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJf dHJlZV9yZWQ7CiAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAg fQogICAgICBlbHNlIHsKICAgICAgICBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0 KSB7CiAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgIF9SYl90cmVlX3Jv dGF0ZV9yaWdodChfX3gsIF9fcm9vdCk7CiAgICAgICAgfQogICAgICAgIF9feC0+X01fcGFyZW50 LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9N X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICBfUmJfdHJlZV9yb3Rh dGVfbGVmdChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICB9CiAgICB9 CiAgfQogIF9fcm9vdC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwp9CmlubGluZSBfUmJf dHJlZV9ub2RlX2Jhc2UqCl9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX1JiX3RyZWVfbm9k ZV9iYXNlKiBfX3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9i YXNlKiYgX19yb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVf YmFzZSomIF9fbGVmdG1vc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVf bm9kZV9iYXNlKiYgX19yaWdodG1vc3QpCnsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9f ejsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCA9IDA7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBf X3hfcGFyZW50ID0gMDsKICBpZiAoX195LT5fTV9sZWZ0ID09IDApICAgICAgCiAgICBfX3ggPSBf X3ktPl9NX3JpZ2h0OyAgICAgIAogIGVsc2UKICAgIGlmIChfX3ktPl9NX3JpZ2h0ID09IDApICAg CiAgICAgIF9feCA9IF9feS0+X01fbGVmdDsgICAgIAogICAgZWxzZSB7ICAgICAgICAgICAgICAg ICAgICAKICAgICAgX195ID0gX195LT5fTV9yaWdodDsgICAgCiAgICAgIHdoaWxlIChfX3ktPl9N X2xlZnQgIT0gMCkKICAgICAgICBfX3kgPSBfX3ktPl9NX2xlZnQ7CiAgICAgIF9feCA9IF9feS0+ X01fcmlnaHQ7CiAgICB9CiAgaWYgKF9feSAhPSBfX3opIHsgICAgICAgICAgIAogICAgX196LT5f TV9sZWZ0LT5fTV9wYXJlbnQgPSBfX3k7IAogICAgX195LT5fTV9sZWZ0ID0gX196LT5fTV9sZWZ0 OwogICAgaWYgKF9feSAhPSBfX3otPl9NX3JpZ2h0KSB7CiAgICAgIF9feF9wYXJlbnQgPSBfX3kt Pl9NX3BhcmVudDsKICAgICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVu dDsKICAgICAgX195LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7ICAgICAgIAogICAgICBfX3kt Pl9NX3JpZ2h0ID0gX196LT5fTV9yaWdodDsKICAgICAgX196LT5fTV9yaWdodC0+X01fcGFyZW50 ID0gX195OwogICAgfQogICAgZWxzZQogICAgICBfX3hfcGFyZW50ID0gX195OyAgCiAgICBpZiAo X19yb290ID09IF9feikKICAgICAgX19yb290ID0gX195OwogICAgZWxzZSBpZiAoX196LT5fTV9w YXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9f eTsKICAgIGVsc2UgCiAgICAgIF9fei0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICAgIF9f eS0+X01fcGFyZW50ID0gX196LT5fTV9wYXJlbnQ7CiAgICAgOjpzd2FwKF9feS0+X01fY29sb3Is IF9fei0+X01fY29sb3IpOwogICAgX195ID0gX196OwogICAgIAogIH0KICBlbHNlIHsgICAgICAg ICAgICAgICAgICAgICAgICAgCiAgICBfX3hfcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7CiAgICBp ZiAoX194KSBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50OyAgIAogICAgaWYgKF9fcm9v dCA9PSBfX3opCiAgICAgIF9fcm9vdCA9IF9feDsKICAgIGVsc2UgCiAgICAgIGlmIChfX3otPl9N X3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQg PSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3g7 CiAgICBpZiAoX19sZWZ0bW9zdCA9PSBfX3opIAogICAgICBpZiAoX196LT5fTV9yaWdodCA9PSAw KSAgICAgICAgIAogICAgICAgIF9fbGVmdG1vc3QgPSBfX3otPl9NX3BhcmVudDsKICAgICAKICAg ICAgZWxzZQogICAgICAgIF9fbGVmdG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmlt dW0oX194KTsKICAgIGlmIChfX3JpZ2h0bW9zdCA9PSBfX3opICAKICAgICAgaWYgKF9fei0+X01f bGVmdCA9PSAwKSAgICAgICAgICAKICAgICAgICBfX3JpZ2h0bW9zdCA9IF9fei0+X01fcGFyZW50 OyAgCiAgICAgCiAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIF9fcmln aHRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7CiAgfQogIGlmIChf X3ktPl9NX2NvbG9yICE9IF9TX3JiX3RyZWVfcmVkKSB7IAogICAgd2hpbGUgKF9feCAhPSBfX3Jv b3QgJiYgKF9feCA9PSAwIHx8IF9feC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykpCiAg ICAgIGlmIChfX3ggPT0gX194X3BhcmVudC0+X01fbGVmdCkgewogICAgICAgIF9SYl90cmVlX25v ZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgaWYgKF9fdy0+X01f Y29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19y Yl90cmVlX2JsYWNrOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVl X3JlZDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7 CiAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICB9CiAgICAgICAg aWYgKChfX3ctPl9NX2xlZnQgPT0gMCB8fCAKICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01f Y29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgJiYKICAgICAgICAgICAgKF9fdy0+X01fcmlnaHQg PT0gMCB8fCAKICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3Ry ZWVfYmxhY2spKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAg ICAgICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJl bnQtPl9NX3BhcmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKF9fdy0+X01fcmln aHQgPT0gMCB8fCAKICAgICAgICAgICAgICBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9PSBfU19y Yl90cmVlX2JsYWNrKSB7CiAgICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQpIF9fdy0+X01fbGVm dC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgICBfX3ctPl9NX2NvbG9y ID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3cs IF9fcm9vdCk7CiAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAg ICAgfQogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJlbnQtPl9NX2NvbG9yOwogICAg ICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAg aWYgKF9fdy0+X01fcmlnaHQpIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9i bGFjazsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7 CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAg ICAgIAogICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+X01fbGVm dDsKICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAg ICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfX3hfcGFyZW50 LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3Jp Z2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9s ZWZ0OwogICAgICAgIH0KICAgICAgICBpZiAoKF9fdy0+X01fcmlnaHQgPT0gMCB8fCAKICAgICAg ICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAg ICAgICAgICAgIChfX3ctPl9NX2xlZnQgPT0gMCB8fCAKICAgICAgICAgICAgIF9fdy0+X01fbGVm dC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykpIHsKICAgICAgICAgIF9fdy0+X01fY29s b3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgIF9feCA9IF9feF9wYXJlbnQ7CiAgICAgICAg ICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+X01fcGFyZW50OwogICAgICAgIH0gZWxzZSB7CiAg ICAgICAgICBpZiAoX193LT5fTV9sZWZ0ID09IDAgfHwgCiAgICAgICAgICAgICAgX193LT5fTV9s ZWZ0LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSB7CiAgICAgICAgICAgIGlmIChfX3ct Pl9NX3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAg ICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgICAgX1Ji X3RyZWVfcm90YXRlX2xlZnQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICBfX3cgPSBfX3hfcGFy ZW50LT5fTV9sZWZ0OwogICAgICAgICAgfQogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9w YXJlbnQtPl9NX2NvbG9yOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90 cmVlX2JsYWNrOwogICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkgX193LT5fTV9sZWZ0LT5fTV9j b2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQo X194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQog ICAgaWYgKF9feCkgX194LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgfQogIHJldHVy biBfX3k7Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jLCBib29sIF9TX2luc3Rh bmNlbGVzcz4KY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5 cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0 b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4g X01fbm9kZV9hbGxvY2F0b3I7IH0KICBfUmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRv cl90eXBlJiBfX2EpCiAgICA6IF9NX25vZGVfYWxsb2NhdG9yKF9fYSksIF9NX2hlYWRlcigwKSB7 fQpwcm90ZWN0ZWQ6CiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4s IF9BbGxvYz46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICAgX01fbm9kZV9hbGxvY2F0b3I7CiAg X1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9oZWFkZXI7CiAgX1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9n ZXRfbm9kZSgpIAogICAgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0K ICB2b2lkIF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19wKSAKICAgIHsgX01fbm9k ZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cn07CnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9BbGxvYz4KY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywgdHJ1 ZT4gewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9j Pjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2Fs bG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KICBfUmJfdHJlZV9h bGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikgOiBfTV9oZWFkZXIoMCkge30KcHJvdGVj dGVkOgogIF9SYl90cmVlX25vZGU8X1RwPiogX01faGVhZGVyOwogIHR5cGVkZWYgdHlwZW5hbWUg X0FsbG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46Ol9BbGxvY190eXBlCiAg ICAgICAgICBfQWxsb2NfdHlwZTsKICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkK ICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQogIHZvaWQgX01fcHV0X25v ZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3ApCiAgICB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRl KF9fcCwgMSk7IH0KfTsKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3Qg X1JiX3RyZWVfYmFzZQogIDogcHVibGljIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9j Pjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwg X0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwg X0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0eXBl bmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgX1JiX3RyZWVfYmFz ZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSAKICAgIDogX0Jhc2UoX19hKSB7IF9NX2hlYWRl ciA9IF9NX2dldF9ub2RlKCk7IH0KICB+X1JiX3RyZWVfYmFzZSgpIHsgX01fcHV0X25vZGUoX01f aGVhZGVyKTsgfQp9OwojIDUxOSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9saWIvZ2NjLWxpYi9w b3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxf dHJlZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlP ZlZhbHVlLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRv cjwgX1ZhbHVlID4gID4KY2xhc3MgX1JiX3RyZWUgOiBwcm90ZWN0ZWQgX1JiX3RyZWVfYmFzZTxf VmFsdWUsIF9BbGxvYz4gewogIHR5cGVkZWYgX1JiX3RyZWVfYmFzZTxfVmFsdWUsIF9BbGxvYz4g X0Jhc2U7CnByb3RlY3RlZDoKICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSogX0Jhc2VfcHRy OwogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsdWU+IF9SYl90cmVlX25vZGU7CiAgdHlwZWRl ZiBfUmJfdHJlZV9Db2xvcl90eXBlIF9Db2xvcl90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiBfS2V5 IGtleV90eXBlOwogIHR5cGVkZWYgX1ZhbHVlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90 eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsK ICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5 cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9SYl90cmVlX25vZGUqIF9MaW5rX3R5cGU7 CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu Y2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0 b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4g X0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQpwcm90ZWN0ZWQ6CnByb3RlY3RlZDoKICBfTGlua190 eXBlIF9NX2NyZWF0ZV9ub2RlKGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICB7CiAgICBfTGlua190 eXBlIF9fdG1wID0gX01fZ2V0X25vZGUoKTsKICAgIHRyeSAgewogICAgICBjb25zdHJ1Y3QoJl9f dG1wLT5fTV92YWx1ZV9maWVsZCwgX194KTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyAgX01fcHV0 X25vZGUoX190bXApIDsgdGhyb3c7IH0gOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfTGlua190 eXBlIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAgewogICAgX0xpbmtfdHlwZSBfX3Rt cCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFsdWVfZmllbGQpOwogICAgX190bXAtPl9NX2Nv bG9yID0gX194LT5fTV9jb2xvcjsKICAgIF9fdG1wLT5fTV9sZWZ0ID0gMDsKICAgIF9fdG1wLT5f TV9yaWdodCA9IDA7CiAgICByZXR1cm4gX190bXA7CiAgfQogIHZvaWQgZGVzdHJveV9ub2RlKF9M aW5rX3R5cGUgX19wKQogIHsKICAgIGRlc3Ryb3koJl9fcC0+X01fdmFsdWVfZmllbGQpOwogICAg X01fcHV0X25vZGUoX19wKTsKICB9CnByb3RlY3RlZDoKICBzaXplX3R5cGUgX01fbm9kZV9jb3Vu dDsgIAogIF9Db21wYXJlIF9NX2tleV9jb21wYXJlOwogIF9MaW5rX3R5cGUmIF9NX3Jvb3QoKSBj b25zdCAKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9wYXJlbnQ7IH0K ICBfTGlua190eXBlJiBfTV9sZWZ0bW9zdCgpIGNvbnN0IAogICAgeyByZXR1cm4gKF9MaW5rX3R5 cGUmKSBfTV9oZWFkZXItPl9NX2xlZnQ7IH0KICBfTGlua190eXBlJiBfTV9yaWdodG1vc3QoKSBj b25zdCAKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9yaWdodDsgfQog IHN0YXRpYyBfTGlua190eXBlJiBfU19sZWZ0KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4g KF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3Jp Z2h0KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3Jp Z2h0KTsgfQogIHN0YXRpYyBfTGlua190eXBlJiBfU19wYXJlbnQoX0xpbmtfdHlwZSBfX3gpCiAg ICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcGFyZW50KTsgfQogIHN0YXRpYyByZWZl cmVuY2UgX1NfdmFsdWUoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiBfX3gtPl9NX3ZhbHVl X2ZpZWxkOyB9CiAgc3RhdGljIGNvbnN0IF9LZXkmIF9TX2tleShfTGlua190eXBlIF9feCkKICAg IHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX194KSk7IH0KICBzdGF0aWMgX0NvbG9y X3R5cGUmIF9TX2NvbG9yKF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9Db2xvcl90eXBl JikoX194LT5fTV9jb2xvcik7IH0KICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfbGVmdChfQmFzZV9w dHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CiAgc3Rh dGljIF9MaW5rX3R5cGUmIF9TX3JpZ2h0KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoX0xp bmtfdHlwZSYpKF9feC0+X01fcmlnaHQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3BhcmVu dChfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3BhcmVu dCk7IH0KICBzdGF0aWMgcmVmZXJlbmNlIF9TX3ZhbHVlKF9CYXNlX3B0ciBfX3gpCiAgICB7IHJl dHVybiAoKF9MaW5rX3R5cGUpX194KS0+X01fdmFsdWVfZmllbGQ7IH0KICBzdGF0aWMgY29uc3Qg X0tleSYgX1Nfa2V5KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiBfS2V5T2ZWYWx1ZSgpKF9T X3ZhbHVlKF9MaW5rX3R5cGUoX194KSkpO30gCiAgc3RhdGljIF9Db2xvcl90eXBlJiBfU19jb2xv cihfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9Db2xvcl90eXBlJikoX0xpbmtfdHlwZShf X3gpLT5fTV9jb2xvcik7IH0KICBzdGF0aWMgX0xpbmtfdHlwZSBfU19taW5pbXVtKF9MaW5rX3R5 cGUgX194KSAKICAgIHsgcmV0dXJuIChfTGlua190eXBlKSAgX1JiX3RyZWVfbm9kZV9iYXNlOjpf U19taW5pbXVtKF9feCk7IH0KICBzdGF0aWMgX0xpbmtfdHlwZSBfU19tYXhpbXVtKF9MaW5rX3R5 cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25vZGVfYmFzZTo6X1Nf bWF4aW11bShfX3gpOyB9CnB1YmxpYzoKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVl X3R5cGUsIHJlZmVyZW5jZSwgcG9pbnRlcj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfUmJfdHJlZV9p dGVyYXRvcjx2YWx1ZV90eXBlLCBjb25zdF9yZWZlcmVuY2UsIGNvbnN0X3BvaW50ZXI+IAogICAg ICAgICAgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0 ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRv cjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKcHJpdmF0ZToKICBpdGVyYXRvciBfTV9pbnNl cnQoX0Jhc2VfcHRyIF9feCwgX0Jhc2VfcHRyIF9feSwgY29uc3QgdmFsdWVfdHlwZSYgX192KTsK ICBfTGlua190eXBlIF9NX2NvcHkoX0xpbmtfdHlwZSBfX3gsIF9MaW5rX3R5cGUgX19wKTsKICB2 b2lkIF9NX2VyYXNlKF9MaW5rX3R5cGUgX194KTsKcHVibGljOgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKICBfUmJfdHJlZSgpCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkp LCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZSgpCiAgICB7IF9NX2VtcHR5X2luaXRp YWxpemUoKTsgfQogIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXApCiAgICA6IF9CYXNl KGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZShfX2Nv bXApIAogICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KICBfUmJfdHJlZShjb25zdCBfQ29t cGFyZSYgX19jb21wLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfQmFzZShfX2Ep LCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZShfX2NvbXApIAogICAgeyBfTV9lbXB0 eV9pbml0aWFsaXplKCk7IH0KICBfUmJfdHJlZShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIAogICAgOiBfQmFzZShfX3guZ2V0X2Fs bG9jYXRvcigpKSwKICAgICAgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX194Ll9N X2tleV9jb21wYXJlKQogIHsgCiAgICBpZiAoX194Ll9NX3Jvb3QoKSA9PSAwKQogICAgICBfTV9l bXB0eV9pbml0aWFsaXplKCk7CiAgICBlbHNlIHsKICAgICAgX1NfY29sb3IoX01faGVhZGVyKSA9 IF9TX3JiX3RyZWVfcmVkOwogICAgICBfTV9yb290KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCks IF9NX2hlYWRlcik7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7 CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX1NfbWF4aW11bShfTV9yb290KCkpOwogICAgfQogICAg X01fbm9kZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50OwogIH0KICB+X1JiX3RyZWUoKSB7IGNs ZWFyKCk7IH0KICBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+JiAKICBvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPiYgX194KTsKcHJpdmF0ZToKICB2b2lkIF9NX2VtcHR5X2luaXRpYWxp emUoKSB7CiAgICBfU19jb2xvcihfTV9oZWFkZXIpID0gX1NfcmJfdHJlZV9yZWQ7ICAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgX01fcm9vdCgpID0gMDsK ICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hl YWRlcjsKICB9CnB1YmxpYzogICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog IF9Db21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fa2V5X2NvbXBhcmU7IH0KICBp dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX2xlZnRtb3N0KCk7IH0KICBjb25zdF9pdGVyYXRv ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX2xlZnRtb3N0KCk7IH0KICBpdGVyYXRvciBlbmQo KSB7IHJldHVybiBfTV9oZWFkZXI7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl dHVybiBfTV9oZWFkZXI7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJl dmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4o KSBjb25zdCB7IAogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyAKICB9 CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdp bigpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgCiAgICByZXR1 cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKICB9IAogIGJvb2wgZW1wdHkoKSBj b25zdCB7IHJldHVybiBfTV9ub2RlX2NvdW50ID09IDA7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNv bnN0IHsgcmV0dXJuIF9NX25vZGVfY291bnQ7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25z dCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAgdm9pZCBzd2FwKF9SYl90cmVlPF9LZXksX1Zh bHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9fdCkgewogICAgIDo6c3dhcChfTV9o ZWFkZXIsIF9fdC5fTV9oZWFkZXIpOwogICAgIDo6c3dhcChfTV9ub2RlX2NvdW50LCBfX3QuX01f bm9kZV9jb3VudCk7CiAgICAgOjpzd2FwKF9NX2tleV9jb21wYXJlLCBfX3QuX01fa2V5X2NvbXBh cmUpOwogIH0KICAgIApwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog IHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0X3VuaXF1ZShjb25zdCB2YWx1ZV90eXBlJiBfX3gp OwogIGl0ZXJhdG9yIGluc2VydF9lcXVhbChjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwogIGl0ZXJh dG9yIGluc2VydF91bmlxdWUoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYg X194KTsKICBpdGVyYXRvciBpbnNlcnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3Qg dmFsdWVfdHlwZSYgX194KTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9p ZCBpbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCk7CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0X2Vx dWFsKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CiAgdm9p ZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKTsKICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5 X3R5cGUmIF9feCk7CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xh c3QpOwogIHZvaWQgZXJhc2UoY29uc3Qga2V5X3R5cGUqIF9fZmlyc3QsIGNvbnN0IGtleV90eXBl KiBfX2xhc3QpOwogIHZvaWQgY2xlYXIoKSB7CiAgICBpZiAoX01fbm9kZV9jb3VudCAhPSAwKSB7 CiAgICAgIF9NX2VyYXNlKF9NX3Jvb3QoKSk7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFk ZXI7CiAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVy OwogICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgIH0KICB9ICAgICAgCnB1YmxpYzoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlw ZSYgX194KTsKICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0 OwogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKICBpdGVyYXRv ciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KTsKICBjb25zdF9pdGVyYXRvciBsb3dl cl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKICBpdGVyYXRvciB1cHBlcl9ib3Vu ZChjb25zdCBrZXlfdHlwZSYgX194KTsKICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25z dCBrZXlfdHlwZSYgX194KSBjb25zdDsKICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBlcXVhbF9y YW5nZShjb25zdCBrZXlfdHlwZSYgX194KTsKICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9p dGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CnB1YmxpYzoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgYm9vbCBfX3JiX3ZlcmlmeSgpIGNv bnN0Owp9Owp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW YWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v bCAKb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29t cGFyZSxfQWxsb2M+JiBfX3gsIAogICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVl LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKewogIHJldHVybiBfX3guc2l6ZSgp ID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwg X195LmJlZ2luKCkpOwp9CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNz IF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu bGluZSBib29sIApvcGVyYXRvcjwoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFs dWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXks X1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKewogIHJldHVybiBsZXhp Y29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLCAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0KdGVtcGxhdGUg PGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAg Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgCnN3YXAoX1JiX3RyZWU8 X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAgICBfUmJf dHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICBf X3guc3dhcChfX3kpOwp9CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNz IF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cl9S Yl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIApfUmJfdHJl ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpvcGVyYXRvcj0o Y29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg X194KQp7CiAgaWYgKHRoaXMgIT0gJl9feCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAKICAgIGNsZWFyKCk7CiAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgIF9NX2tleV9jb21w YXJlID0gX194Ll9NX2tleV9jb21wYXJlOyAgICAgICAgCiAgICBpZiAoX194Ll9NX3Jvb3QoKSA9 PSAwKSB7CiAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFk ZXI7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogICAgfQogICAgZWxzZSB7CiAg ICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX3Jvb3QoKSwgX01faGVhZGVyKTsKICAgICAg X01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsKICAgICAgX01fcmlnaHRtb3N0 KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7CiAgICAgIF9NX25vZGVfY291bnQgPSBfX3guX01f bm9kZV9jb3VudDsKICAgIH0KICB9CiAgcmV0dXJuICp0aGlzOwp9CnRlbXBsYXRlIDxjbGFzcyBf S2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9D b21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlP ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9L ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2luc2VydChfQmFzZV9wdHIgX194Xywg X0Jhc2VfcHRyIF9feV8sIGNvbnN0IF9WYWx1ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3ggPSAo X0xpbmtfdHlwZSkgX194XzsKICBfTGlua190eXBlIF9feSA9IChfTGlua190eXBlKSBfX3lfOwog IF9MaW5rX3R5cGUgX196OwogIGlmIChfX3kgPT0gX01faGVhZGVyIHx8IF9feCAhPSAwIHx8IAog ICAgICBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3kpKSkgewog ICAgX196ID0gX01fY3JlYXRlX25vZGUoX192KTsKICAgIF9TX2xlZnQoX195KSA9IF9fejsgICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg aWYgKF9feSA9PSBfTV9oZWFkZXIpIHsKICAgICAgX01fcm9vdCgpID0gX196OwogICAgICBfTV9y aWdodG1vc3QoKSA9IF9fejsKICAgIH0KICAgIGVsc2UgaWYgKF9feSA9PSBfTV9sZWZ0bW9zdCgp KQogICAgICBfTV9sZWZ0bW9zdCgpID0gX196OyAgICAKICB9CiAgZWxzZSB7CiAgICBfX3ogPSBf TV9jcmVhdGVfbm9kZShfX3YpOwogICAgX1NfcmlnaHQoX195KSA9IF9fejsKICAgIGlmIChfX3kg PT0gX01fcmlnaHRtb3N0KCkpCiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196OyAgIAogIH0KICBf U19wYXJlbnQoX196KSA9IF9feTsKICBfU19sZWZ0KF9feikgPSAwOwogIF9TX3JpZ2h0KF9feikg PSAwOwogIF9SYl90cmVlX3JlYmFsYW5jZShfX3osIF9NX2hlYWRlci0+X01fcGFyZW50KTsKICAr K19NX25vZGVfY291bnQ7CiAgcmV0dXJuIGl0ZXJhdG9yKF9feik7Cn0KdGVtcGxhdGUgPGNsYXNz IF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3Mg X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUs X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKGNvbnN0IF9WYWx1 ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3gg PSBfTV9yb290KCk7CiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBfX3kgPSBfX3g7CiAgICBfX3gg PSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKSA/IAogICAg ICAgICAgICBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gpOwogIH0KICByZXR1cm4gX01faW5z ZXJ0KF9feCwgX195LCBfX3YpOwp9CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUs IGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs b2M+CnBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh cmUsX0FsbG9jPjo6aXRlcmF0b3IsIAogICAgIGJvb2w+Cl9SYl90cmVlPF9LZXksX1ZhbHVlLF9L ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Omluc2VydF91bmlxdWUoY29uc3QgX1ZhbHVl JiBfX3YpCnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9 IF9NX3Jvb3QoKTsKICBib29sIF9fY29tcCA9IHRydWU7CiAgd2hpbGUgKF9feCAhPSAwKSB7CiAg ICBfX3kgPSBfX3g7CiAgICBfX2NvbXAgPSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9f diksIF9TX2tleShfX3gpKTsKICAgIF9feCA9IF9fY29tcCA/IF9TX2xlZnQoX194KSA6IF9TX3Jp Z2h0KF9feCk7CiAgfQogIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9feSk7ICAgCiAgaWYgKF9f Y29tcCkKICAgIGlmIChfX2ogPT0gYmVnaW4oKSkgICAgIAogICAgICByZXR1cm4gcGFpcjxpdGVy YXRvcixib29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogICAgZWxzZQogICAg ICAtLV9fajsKICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fai5fTV9ub2RlKSwgX0tleU9m VmFsdWUoKShfX3YpKSkKICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9NX2luc2VydChf X3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgcmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX19qLCBm YWxzZSk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9LZXlPZlZh bHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9S Yl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0 b3IgCl9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPgog IDo6aW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCnsK ICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVmdCkgeyAgCiAgICBp ZiAoc2l6ZSgpID4gMCAmJiAKICAgICAgICBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9f diksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkKICAgICAgcmV0dXJuIF9NX2luc2VydChf X3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKICAgICAKICAgIGVs c2UKICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICB9IGVsc2UgaWYgKF9f cG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpIHsgIAogICAgaWYgKF9NX2tleV9jb21wYXJl KF9TX2tleShfTV9yaWdodG1vc3QoKSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgIHJldHVy biBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICBlbHNlCiAgICAgIHJldHVy biBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgfSBlbHNlIHsKICAgIGl0ZXJhdG9yIF9fYmVm b3JlID0gX19wb3NpdGlvbjsKICAgIC0tX19iZWZvcmU7CiAgICBpZiAoX01fa2V5X2NvbXBhcmUo X1Nfa2V5KF9fYmVmb3JlLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpIAogICAgICAgICYm IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01f bm9kZSkpKSB7CiAgICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAg ICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsgCiAgICAgIGVs c2UKICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlv bi5fTV9ub2RlLCBfX3YpOwogICAgIAogICAgfSBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfdW5p cXVlKF9fdikuZmlyc3Q7CiAgfQp9CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBj bGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j Pgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j Pjo6aXRlcmF0b3IgCl9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+CiAgOjppbnNlcnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1ZhbCYgX192 KQp7CiAgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXItPl9NX2xlZnQpIHsgIAog ICAgaWYgKHNpemUoKSA+IDAgJiYgCiAgICAgICAgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUo KShfX3YpLCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpCiAgICAgIHJldHVybiBfTV9pbnNl cnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CiAgICAgCiAg ICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICB9IGVsc2UgaWYgKF9fcG9z aXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpIHsgCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9L ZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSkpCiAgICAgIHJldHVybiBf TV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICBlbHNlCiAgICAgIHJldHVybiBp bnNlcnRfZXF1YWwoX192KTsKICB9IGVsc2UgewogICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bv c2l0aW9uOwogICAgLS1fX2JlZm9yZTsKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFs dWUoKShfX3YpLCBfU19rZXkoX19iZWZvcmUuX01fbm9kZSkpCiAgICAgICAgJiYgIV9NX2tleV9j b21wYXJlKF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKSB7 CiAgICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAgIHJldHVy biBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsgCiAgICAgIGVsc2UKICAgICAg ICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2Rl LCBfX3YpOwogICAgIAogICAgfSBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsK ICB9Cn0KdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNz IF9DbXAsIGNsYXNzIF9BbGxvYz4KICB0ZW1wbGF0ZTxjbGFzcyBfSUk+CnZvaWQgX1JiX3RyZWU8 X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+CiAgOjppbnNlcnRfZXF1YWwoX0lJIF9fZmlyc3Qs IF9JSSBfX2xhc3QpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg ICBpbnNlcnRfZXF1YWwoKl9fZmlyc3QpOwp9CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf VmFsLCBjbGFzcyBfS29WLCBjbGFzcyBfQ21wLCBjbGFzcyBfQWxsb2M+IAogIHRlbXBsYXRlPGNs YXNzIF9JST4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz4KICA6Omlu c2VydF91bmlxdWUoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpIHsKICBmb3IgKCA7IF9fZmlyc3Qg IT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNlcnRfdW5pcXVlKCpfX2ZpcnN0KTsKfQojIDEw MjEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4y LjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3RyZWUuaCIgMwogICAgICAg ICAKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUs IAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgX1Ji X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6ZXJhc2Uo aXRlcmF0b3IgX19wb3NpdGlvbikKewogIF9MaW5rX3R5cGUgX195ID0gCiAgICAoX0xpbmtfdHlw ZSkgX1JiX3RyZWVfcmViYWxhbmNlX2Zvcl9lcmFzZShfX3Bvc2l0aW9uLl9NX25vZGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX3Bh cmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2hl YWRlci0+X01fbGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9NX2hlYWRlci0+X01fcmlnaHQpOwogIGRlc3Ryb3lfbm9kZShfX3kpOwogIC0tX01fbm9k ZV9jb3VudDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5 T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFt ZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpzaXpl X3R5cGUgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46 OmVyYXNlKGNvbnN0IF9LZXkmIF9feCkKewogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IF9fcCA9 IGVxdWFsX3JhbmdlKF9feCk7CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19wLmZp cnN0LCBfX3Auc2Vjb25kLCBfX24pOwogIGVyYXNlKF9fcC5maXJzdCwgX19wLnNlY29uZCk7CiAg cmV0dXJuIF9fbjsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tv ViwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwg X1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46Ol9MaW5rX3R5cGUgCl9SYl90cmVlPF9LZXks X1ZhbCxfS29WLF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2NvcHkoX0xpbmtfdHlwZSBfX3gsIF9M aW5rX3R5cGUgX19wKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICBfTGlua190eXBlIF9f dG9wID0gX01fY2xvbmVfbm9kZShfX3gpOwogIF9fdG9wLT5fTV9wYXJlbnQgPSBfX3A7CiAgdHJ5 ICB7CiAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAgX190b3AtPl9NX3JpZ2h0ID0gX01fY29w eShfU19yaWdodChfX3gpLCBfX3RvcCk7CiAgICBfX3AgPSBfX3RvcDsKICAgIF9feCA9IF9TX2xl ZnQoX194KTsKICAgIHdoaWxlIChfX3ggIT0gMCkgewogICAgICBfTGlua190eXBlIF9feSA9IF9N X2Nsb25lX25vZGUoX194KTsKICAgICAgX19wLT5fTV9sZWZ0ID0gX195OwogICAgICBfX3ktPl9N X3BhcmVudCA9IF9fcDsKICAgICAgaWYgKF9feC0+X01fcmlnaHQpCiAgICAgICAgX195LT5fTV9y aWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX195KTsKICAgICAgX19wID0gX195OwogICAg ICBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICB9CiAgfQogIGNhdGNoKC4uLikgeyAgX01fZXJhc2Uo X190b3ApIDsgdGhyb3c7IH0gOwogIHJldHVybiBfX3RvcDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tl eSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29t cGFyZSwgY2xhc3MgX0FsbG9jPgp2b2lkIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVl LF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2VyYXNlKF9MaW5rX3R5cGUgX194KQp7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogIHdoaWxlIChfX3ggIT0gMCkgewogICAgX01fZXJh c2UoX1NfcmlnaHQoX194KSk7CiAgICBfTGlua190eXBlIF9feSA9IF9TX2xlZnQoX194KTsKICAg IGRlc3Ryb3lfbm9kZShfX3gpOwogICAgX194ID0gX195OwogIH0KfQp0ZW1wbGF0ZSA8Y2xhc3Mg X0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBf Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgp2b2lkIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh bHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9y IF9fbGFzdCkKewogIGlmIChfX2ZpcnN0ID09IGJlZ2luKCkgJiYgX19sYXN0ID09IGVuZCgpKQog ICAgY2xlYXIoKTsKICBlbHNlCiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIGVyYXNlKF9f Zmlyc3QrKyk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tl eU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4Kdm9pZCBf UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcmFz ZShjb25zdCBfS2V5KiBfX2ZpcnN0LCBjb25zdCBfS2V5KiBfX2xhc3QpIAp7CiAgd2hpbGUgKF9f Zmlyc3QgIT0gX19sYXN0KSBlcmFzZSgqX19maXJzdCsrKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tl eSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29t cGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZmluZChjb25zdCBfS2V5JiBfX2spCnsKICBfTGlu a190eXBlIF9feSA9IF9NX2hlYWRlcjsgICAgICAgCiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290 KCk7ICAgICAgIAogIHdoaWxlIChfX3ggIT0gMCkgCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9T X2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAg IGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICBpdGVyYXRvciBfX2ogPSBpdGVyYXRv cihfX3kpOyAgIAogIHJldHVybiAoX19qID09IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9faywg X1Nfa2V5KF9fai5fTV9ub2RlKSkpID8gCiAgICAgZW5kKCkgOiBfX2o7Cn0KdGVtcGxhdGUgPGNs YXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xh c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUs X0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IgCl9SYl90cmVlPF9L ZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmZpbmQoY29uc3QgX0tleSYg X19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7ICAKICBfTGlua190eXBl IF9feCA9IF9NX3Jvb3QoKTsgIAogIHdoaWxlIChfX3ggIT0gMCkgewogICAgaWYgKCFfTV9rZXlf Y29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0 KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CiAgfQogIGNvbnN0X2l0 ZXJhdG9yIF9faiA9IGNvbnN0X2l0ZXJhdG9yKF9feSk7ICAgCiAgcmV0dXJuIChfX2ogPT0gZW5k KCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkgPwogICAgZW5k KCkgOiBfX2o7Cn0KdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tl eU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5h bWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6c2l6 ZV90eXBlIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+ CiAgOjpjb3VudChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBwYWlyPGNvbnN0X2l0ZXJhdG9y LCBjb25zdF9pdGVyYXRvcj4gX19wID0gZXF1YWxfcmFuZ2UoX19rKTsKICBzaXplX3R5cGUgX19u ID0gMDsKICBkaXN0YW5jZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQsIF9fbik7CiAgcmV0dXJuIF9f bjsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1 ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJf dHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciAK X1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6bG93 ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7 ICAKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsgIAogIHdoaWxlIChfX3ggIT0gMCkgCiAg ICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gs IF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsK ICByZXR1cm4gaXRlcmF0b3IoX195KTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg X0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy ZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFs dWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6bG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKSBjb25z dAp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7ICAKICBfTGlua190eXBlIF9feCA9IF9N X3Jvb3QoKTsgIAogIHdoaWxlIChfX3ggIT0gMCkgCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9T X2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAg IGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICByZXR1cm4gY29uc3RfaXRlcmF0b3Io X195KTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW YWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBf UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRv ciAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6 dXBwZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFk ZXI7ICAKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsgIAogICB3aGlsZSAoX194ICE9IDAp IAogICAgIGlmIChfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkKICAgICAgIF9feSA9 IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgIGVsc2UKICAgICAgIF9feCA9IF9TX3JpZ2h0 KF9feCk7CiAgIHJldHVybiBpdGVyYXRvcihfX3kpOwp9CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj bGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJl LCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVl LF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBf X2spIGNvbnN0CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsgIAogIF9MaW5rX3R5cGUg X194ID0gX01fcm9vdCgpOyAgCiAgIHdoaWxlIChfX3ggIT0gMCkgCiAgICAgaWYgKF9NX2tleV9j b21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQogICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0 KF9feCk7CiAgICAgZWxzZQogICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICAgcmV0dXJuIGNv bnN0X2l0ZXJhdG9yKF9feSk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwg Y2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv Yz4KaW5saW5lIApwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVl LF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yLAogICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXks X1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yPgpfUmJfdHJlZTxf S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcXVhbF9yYW5nZShj b25zdCBfS2V5JiBfX2spCnsKICByZXR1cm4gcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+KGxvd2Vy X2JvdW5kKF9fayksIHVwcGVyX2JvdW5kKF9faykpOwp9CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj bGFzcyBfVmFsdWUsIGNsYXNzIF9Lb1YsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu bGluZSAKcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJl LCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciwKICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBf VmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcj4KX1JiX3RyZWU8 X0tleSwgX1ZhbHVlLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPgogIDo6ZXF1YWxfcmFuZ2UoY29u c3QgX0tleSYgX19rKSBjb25zdAp7CiAgcmV0dXJuIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3Rf aXRlcmF0b3I+KGxvd2VyX2JvdW5kKF9fayksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5kKF9faykpOwp9CmlubGluZSBpbnQgCl9fYmxhY2tf Y291bnQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX25vZGUsIF9SYl90cmVlX25vZGVfYmFzZSogX19y b290KQp7CiAgaWYgKF9fbm9kZSA9PSAwKQogICAgcmV0dXJuIDA7CiAgZWxzZSB7CiAgICBpbnQg X19iYyA9IF9fbm9kZS0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjayA/IDEgOiAwOwogICAg aWYgKF9fbm9kZSA9PSBfX3Jvb3QpCiAgICAgIHJldHVybiBfX2JjOwogICAgZWxzZQogICAgICBy ZXR1cm4gX19iYyArIF9fYmxhY2tfY291bnQoX19ub2RlLT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAg fQp9CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVl LCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmJvb2wgX1JiX3RyZWU8 X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6X19yYl92ZXJpZnkoKSBj b25zdAp7CiAgaWYgKF9NX25vZGVfY291bnQgPT0gMCB8fCBiZWdpbigpID09IGVuZCgpKQogICAg cmV0dXJuIF9NX25vZGVfY291bnQgPT0gMCAmJiBiZWdpbigpID09IGVuZCgpICYmCiAgICAgIF9N X2hlYWRlci0+X01fbGVmdCA9PSBfTV9oZWFkZXIgJiYgX01faGVhZGVyLT5fTV9yaWdodCA9PSBf TV9oZWFkZXI7CiAgCiAgaW50IF9fbGVuID0gX19ibGFja19jb3VudChfTV9sZWZ0bW9zdCgpLCBf TV9yb290KCkpOwogIGZvciAoY29uc3RfaXRlcmF0b3IgX19pdCA9IGJlZ2luKCk7IF9faXQgIT0g ZW5kKCk7ICsrX19pdCkgewogICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX19pdC5f TV9ub2RlOwogICAgX0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0KF9feCk7CiAgICBfTGlua190eXBl IF9fUiA9IF9TX3JpZ2h0KF9feCk7CiAgICBpZiAoX194LT5fTV9jb2xvciA9PSBfU19yYl90cmVl X3JlZCkKICAgICAgaWYgKChfX0wgJiYgX19MLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkg fHwKICAgICAgICAgIChfX1IgJiYgX19SLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkpCiAg ICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKF9fTCAmJiBfTV9rZXlfY29tcGFyZShfU19rZXko X194KSwgX1Nfa2V5KF9fTCkpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoX19SICYmIF9N X2tleV9jb21wYXJlKF9TX2tleShfX1IpLCBfU19rZXkoX194KSkpCiAgICAgIHJldHVybiBmYWxz ZTsKICAgIGlmICghX19MICYmICFfX1IgJiYgX19ibGFja19jb3VudChfX3gsIF9NX3Jvb3QoKSkg IT0gX19sZW4pCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgaWYgKF9NX2xlZnRtb3N0KCkgIT0g X1JiX3RyZWVfbm9kZV9iYXNlOjpfU19taW5pbXVtKF9NX3Jvb3QoKSkpCiAgICByZXR1cm4gZmFs c2U7CiAgaWYgKF9NX3JpZ2h0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11 bShfTV9yb290KCkpKQogICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CnRlbXBsYXRl IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCBjbGFzcyBfQ29t cGFyZSwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjwgX1ZhbHVlID4gID4Kc3Ry dWN0IHJiX3RyZWUgOiBwdWJsaWMgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwg X0NvbXBhcmUsIF9BbGxvYz4KewogIHR5cGVkZWYgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS2V5 T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFz ZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgcmJfdHJlZShjb25zdCBfQ29tcGFy ZSYgX19jb21wID0gX0NvbXBhcmUoKSwKICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf X2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2NvbXAsIF9fYSkge30KICAKICB+ cmJfdHJlZSgpIHt9Cn07CiAgCiMgMzEgIi9hb2xuZXQvcGtnL2djYy0yLjk1LjMvbGliL2djYy1s aWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv bWFwIiAyIDMKIyAxICIvYW9sbmV0L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMt aWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9tYXAuaCIg MSAzCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlID0gbGVz czxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjwgX1RwID4gID4KY2xh c3MgbWFwIHsKcHVibGljOgogIHR5cGVkZWYgX0tleSAgICAgICAgICAgICAgICAgIGtleV90eXBl OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgIGRhdGFfdHlwZTsKICB0eXBlZGVmIF9U cCAgICAgICAgICAgICAgICAgICBtYXBwZWRfdHlwZTsKICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tl eSwgX1RwPiB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0NvbXBhcmUgICAgICAgICAgICAgIGtleV9j b21wYXJlOwogICAgCiAgY2xhc3MgdmFsdWVfY29tcGFyZQogICAgOiBwdWJsaWMgYmluYXJ5X2Z1 bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+IHsKICBmcmllbmQgY2xhc3MgbWFw PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVjdGVkIDoKICAgIF9Db21wYXJlIF9N X2NvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBfTV9jb21wKF9fYykge30K ICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBjb25z dCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9NX2NvbXAoX194LmZpcnN0 LCBfX3kuZmlyc3QpOwogICAgfQogIH07CnByaXZhdGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlf dHlwZSwgdmFsdWVfdHlwZSwgCiAgICAgICAgICAgICAgICAgICBfU2VsZWN0MXN0PHZhbHVlX3R5 cGU+LCBrZXlfY29tcGFyZSwgX0FsbG9jPiBfUmVwX3R5cGU7CiAgX1JlcF90eXBlIF9NX3Q7ICAg CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cG9pbnRlciBwb2ludGVyOwog IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7 CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlw ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7 CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogIHR5cGVk ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKICB0 eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJh dG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9y IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNp emVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVu Y2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmFs bG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogICAKICBtYXAoKSA6IF9NX3QoX0NvbXBhcmUo KSwgYWxsb2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBtYXAoY29uc3QgX0NvbXBhcmUmIF9f Y29tcCwKICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv cl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPgogIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv ciBfX2xhc3QpCiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsg X01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KICB0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CiAgbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh dG9yIF9fbGFzdCwgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgY29uc3QgYWxsb2NhdG9y X3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsg X01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KIyAxMjMgIi9hb2xuZXQvcGtn L2djYy0yLjk1LjMvbGliL2djYy1saWIvcG93ZXJwYy1pYm0tYWl4My4yLjUvMi45NS4zLy4uLy4u Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX21hcC5oIiAzCiAgbWFwKGNvbnN0IG1hcDxfS2V5LF9U cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIDogX01fdChfX3guX01fdCkge30KICBtYXA8X0tleSxf VHAsX0NvbXBhcmUsX0FsbG9jPiYKICBvcGVyYXRvcj0oY29uc3QgbWFwPF9LZXksIF9UcCwgX0Nv bXBhcmUsIF9BbGxvYz4mIF9feCkKICB7CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4g KnRoaXM7IAogIH0KICAgCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBf TV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJl dHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0b3JfdHlwZSBn ZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KICBp dGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGNvbnN0X2l0ZXJhdG9y IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgaXRlcmF0b3IgZW5kKCkg eyByZXR1cm4gX01fdC5lbmQoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0 dXJuIF9NX3QuZW5kKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIF9N X3QucmJlZ2luKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsg cmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVy biBfTV90LnJlbmQoKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsg cmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu ZW1wdHkoKTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5zaXplKCk7 IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7 IH0KICBfVHAmIG9wZXJhdG9yW10oY29uc3Qga2V5X3R5cGUmIF9faykgewogICAgaXRlcmF0b3Ig X19pID0gbG93ZXJfYm91bmQoX19rKTsKICAgICAKICAgIGlmIChfX2kgPT0gZW5kKCkgfHwga2V5 X2NvbXAoKShfX2ssICgqX19pKS5maXJzdCkpCiAgICAgIF9faSA9IGluc2VydChfX2ksIHZhbHVl X3R5cGUoX19rLCBfVHAoKSkpOwogICAgcmV0dXJuICgqX19pKS5zZWNvbmQ7CiAgfQogIHZvaWQg c3dhcChtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChfX3gu X01fdCk7IH0KICAgCiAgcGFpcjxpdGVyYXRvcixib29sPiBpbnNlcnQoY29uc3QgdmFsdWVfdHlw ZSYgX194KSAKICAgIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX3gpOyB9CiAgaXRlcmF0 b3IgaW5zZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7 IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUocG9zaXRpb24sIF9feCk7IH0KICB0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV90Lmluc2VydF91bmlxdWUoX19maXJz dCwgX19sYXN0KTsKICB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3Qu ZXJhc2UoX19wb3NpdGlvbik7IH0KICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9f eCkgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2Zp cnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsg fQogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQogICAKICBpdGVyYXRvciBmaW5kKGNv bnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgY29uc3RfaXRl cmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQo X194KTsgfQogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJl dHVybiBfTV90LmNvdW50KF9feCk7IH0KICBpdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlf dHlwZSYgX194KSB7cmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsgfQogIGNvbnN0X2l0ZXJh dG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf TV90Lmxvd2VyX2JvdW5kKF9feCk7IAogIH0KICBpdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBr ZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQogIGNvbnN0X2l0 ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy biBfTV90LnVwcGVyX2JvdW5kKF9feCk7IAogIH0KICAKICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9y PiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5lcXVh bF9yYW5nZShfX3gpOwogIH0KICBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPiBl cXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5l cXVhbF9yYW5nZShfX3gpOwogIH0KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IDw+ICAoY29uc3Qg bWFwJiwgY29uc3QgbWFwJik7CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IDw+ICAoY29uc3QgbWFw JiwgY29uc3QgbWFwJik7Cn07CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNz IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbWFw PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3gu X01fdCA9PSBfX3kuX01fdDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFz cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbWFw PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICBj b25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5f TV90IDwgX195Ll9NX3Q7Cn0KdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3Mg X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtYXA8X0tleSxfVHAsX0Nv bXBhcmUsX0FsbG9jPiYgX194LCAKICAgICAgICAgICAgICAgICBtYXA8X0tleSxfVHAsX0NvbXBh cmUsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQojIDMzICIvYW9sbmV0L3BrZy9n Y2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8u Li8uLi9pbmNsdWRlL2crKy0zL21hcCIgMiAzCiMgMSAiL2FvbG5ldC9wa2cvZ2NjLTIuOTUuMy9s aWIvZ2NjLWxpYi9wb3dlcnBjLWlibS1haXgzLjIuNS8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9zdGxfbXVsdGltYXAuaCIgMSAzCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf VHAsIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9 IGFsbG9jYXRvcjwgX1RwID4gID4KY2xhc3MgbXVsdGltYXAgewpwdWJsaWM6CiAgdHlwZWRlZiBf S2V5ICAgICAgICAgICAgICAgICAga2V5X3R5cGU7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAg ICAgICAgZGF0YV90eXBlOwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgIG1hcHBlZF90 eXBlOwogIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7CiAgdHlwZWRl ZiBfQ29tcGFyZSAgICAgICAgICAgICAga2V5X2NvbXBhcmU7CiAgY2xhc3MgdmFsdWVfY29tcGFy ZSA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFsdWVfdHlwZSwgYm9vbD4g ewogIGZyaWVuZCBjbGFzcyBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogIHBy b3RlY3RlZDoKICAgIF9Db21wYXJlIF9NX2NvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJl IF9fYykgOiBfTV9jb21wKF9fYykge30KICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29u c3QgdmFsdWVfdHlwZSYgX194LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAg cmV0dXJuIF9NX2NvbXAoX194LmZpcnN0LCBfX3kuZmlyc3QpOwogICAgfQogIH07CnByaXZhdGU6 CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwgCiAgICAgICAgICAgICAg ICAgIF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlw ZTsKICBfUmVwX3R5cGUgX01fdDsgICAKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90 eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0 X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmVm ZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVm ZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRl cmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJh dG9yIGNvbnN0X2l0ZXJhdG9yOyAKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmV2ZXJz ZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl Ojpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRlZiB0eXBl bmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIG11 bHRpbWFwKCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpIHsgfQogIGV4cGxp Y2l0IG11bHRpbWFwKGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAg Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3Qo X19jb21wLCBfX2EpIHsgfQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0 aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICA6 IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fdC5pbnNlcnRfZXF1 YWwoX19maXJzdCwgX19sYXN0KTsgfQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K ICBtdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs CiAgICAgICAgICAgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICBjb25zdCBhbGxv Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9f YSkgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9CiMgMTIxICIvYW9sbmV0 L3BrZy9nY2MtMi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8u Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9tdWx0aW1hcC5oIiAzCiAgbXVsdGltYXAoY29u c3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9N X3QpIHsgfQogIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9 KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgewogICAgX01f dCA9IF9feC5fTV90OwogICAgcmV0dXJuICp0aGlzOyAKICB9CiAgIAogIGtleV9jb21wYXJlIGtl eV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFy ZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9jb21w KCkpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9N X3QuZ2V0X2FsbG9jYXRvcigpOyB9CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV90LmJl Z2luKCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVn aW4oKTsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KICBjb25zdF9p dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJzZV9pdGVy YXRvciByYmVnaW4oKSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgY29uc3RfcmV2ZXJzZV9p dGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgcmV2ZXJz ZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBjb25zdF9yZXZlcnNl X2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGJvb2wgZW1w dHkoKSBjb25zdCB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNv bnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3Qg eyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CiAgdm9pZCBzd2FwKG11bHRpbWFwPF9LZXksX1Rw LF9Db21wYXJlLF9BbGxvYz4mIF9feCkgeyBfTV90LnN3YXAoX194Ll9NX3QpOyB9CiAgIAogIGl0 ZXJhdG9yIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuaW5zZXJ0 X2VxdWFsKF9feCk7IH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29u c3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoX19wb3Np dGlvbiwgX194KTsKICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQg aW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewog ICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsKICB9CiAgdm9pZCBlcmFzZShp dGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3QuZXJhc2UoX19wb3NpdGlvbik7IH0KICBzaXplX3R5 cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9 CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9N X3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsgfQogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIo KTsgfQogICAKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9N X3QuZmluZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194 KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIHNpemVfdHlwZSBjb3VudChjb25z dCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0KICBpdGVy YXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QubG93ZXJf Ym91bmQoX194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBl JiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IAogIH0KICBp dGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QudXBw ZXJfYm91bmQoX194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90 eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IAogIH0K ICAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9f eCkgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25zdF9p dGVyYXRvcixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkg Y29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgZnJpZW5kIGJv b2wgb3BlcmF0b3I9PSA8PiAgKGNvbnN0IG11bHRpbWFwJiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcCYpOwogIGZyaWVuZCBib29s IG9wZXJhdG9yPCA8PiAgKGNvbnN0IG11bHRpbWFwJiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwJik7Cn07CnRlbXBsYXRlIDxjbGFz cyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi b29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg X194LCAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29t cGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KdGVt cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv Yz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJl LF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5 LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01f dDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xh c3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B bGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUs X0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQojIDM0ICIvYW9sbmV0L3BrZy9nY2Mt Mi45NS4zL2xpYi9nY2MtbGliL3Bvd2VycGMtaWJtLWFpeDMuMi41LzIuOTUuMy8uLi8uLi8uLi8u Li9pbmNsdWRlL2crKy0zL21hcCIgMiAzCiMgMyAidG0uQyIgMgptYXAgPHN0cmluZywgaW50PiBi YWRNYXA7Cg==
next reply other threads:[~2001-04-06 11:06 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2001-04-06 11:06 markg [this message] 2001-08-17 19:25 rodrigc 2001-10-07 12:53 rodrigc
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20010406175721.24501.qmail@sourceware.cygnus.com \ --to=markg@ans.net \ --cc=gcc-gnats@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).