From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8888 invoked by alias); 29 Jan 2002 15:36:04 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 8809 invoked by uid 71); 29 Jan 2002 15:36:02 -0000 Resent-Date: 29 Jan 2002 15:36:02 -0000 Resent-Message-ID: <20020129153602.8808.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, mathias.hasselmann@gmx.de Received:(qmail 7533 invoked by uid 61); 29 Jan 2002 15:30:03 -0000 Message-Id:<20020129153002.7531.qmail@sources.redhat.com> Date: Tue, 29 Jan 2002 07:36:00 -0000 From: mathias.hasselmann@gmx.de Reply-To: mathias.hasselmann@gmx.de To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version:gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/5533: g++ segfaults when processing std::accumulate(begin, end, init, invalid_op) X-SW-Source: 2002-01/txt/msg01033.txt.bz2 List-Id: >Number: 5533 >Category: c++ >Synopsis: g++ segfaults when processing std::accumulate(begin, end, init, invalid_op) >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-illegal-code >Submitter-Id: net >Arrival-Date: Tue Jan 29 07:36:02 PST 2002 >Closed-Date: >Last-Modified: >Originator: mathias.hasselmann@gmx.de >Release: 3.0.2 >Organization: >Environment: System: Linux dali.sqx.lde 2.4.9-mosix #17 SMP Sam Sep 1 03:04:51 CEST 2001 i686 unknown Architecture: i686 host: i686-pc-linux-gnu build: i686-pc-linux-gnu target: i686-pc-linux-gnu configured with: /nfs/sam/opt/glibc/gcc-3.0.2/configure --prefix=/usr >Description: Duh, sorry: Invalid attachement... g++ segfaults when it has to processing std::accumulate(begin, end, init, invalid_op) where invalid_op is a invalid template reference. >How-To-Repeat: See the attachement for preprocessed code. Here comes the plain code: $ cat accum.cc #include #include #include int main() { int nums[] = { 1, 2, 3, 4, 5 }; std::cout << std::accumulate(nums, nums + sizeof(nums)/sizeof(*nums), 0, std::plus) << std::endl; } $ LC_ALL=C g++ -save-temps accum.cc accum.cc: In function `int main()': accum.cc:10: Internal error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See for instructions. $ >Fix: no idea >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="accum.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="accum.ii" IyAxICJhY2N1bS5jYyIKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2lvc3RyZWFtIiAxIDMKIyAz MSAiL3Vzci9pbmNsdWRlL2crKy12My9pb3N0cmVhbSIgMwojIDEgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGRfaW9zdHJlYW0uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfaW9zdHJlYW0uaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGlu dXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2 ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysr LXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvb3NfZGVmaW5lcy5oIiAxIDMKIyAzNyAiL3Vzci9p bmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyODMgIi91c3IvaW5jbHVkZS9mZWF0dXJl cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMKIyAyODQgIi91c3IvaW5j bHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMTMgIi91c3IvaW5jbHVkZS9mZWF0 dXJlcy5oIiAyIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9i aXRzL29zX2RlZmluZXMuaCIgMiAzCiMgMzUgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1s aW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMv aTY4Ni1wYy1saW51eC1nbnUvYml0cy9saW1pdHMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9n KystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMiAzCiMgNDAgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJlYW0uaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX29zdHJlYW0uaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X2lvcy5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMwoK IyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyAzOCAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUv ZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RyaW5nZndkLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4 LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0cmluZ2Z3ZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPGNsYXNzIF9DaGFy VD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFp dHM8Y2hhcj47CgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFyX3Q+OwoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNs YXNzIGJhc2ljX3N0cmluZzsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoK ICB0eXBlZGVmIGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwoKfQojIDQxICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvZnBvcy5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3Mu aCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysr aW8uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0 cy9jKytpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9jc3RkaW8iIDEgMwojIDMxICIv dXNyL2luY2x1ZGUvZysrLXYzL2NzdGRpbyIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfY3N0ZGlvLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nz dGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRz L2MrK2NvbmZpZy5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Rk aW8uaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEg MwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMwojIDEgIi91 c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjIvaW5jbHVkZS9zdGRkZWYuaCIg MSAzCiMgMTQ3ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4yL2luY2x1 ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDE5OSAiL3Vzci9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYg dW5zaWduZWQgaW50IHNpemVfdDsKIyAzOSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j c3RkZGVmLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNp bmcgOjpzaXplX3Q7Cn0KIyAzOSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8u aCIgMiAzCiMgNDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDMKIyAx ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4yL2luY2x1ZGUvc3RkaW8u aCIgMSAzCiMgMzYgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjIvaW5j bHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDM3ICIv dXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4yL2luY2x1ZGUvc3RkaW8uaCIg MiAzCgpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMC4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQzICIvdXNyL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC4yL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0 cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4wLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz LmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsKdHlwZWRlZiB1bnNpZ25l ZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdV9pbnQ7CnR5cGVkZWYg dW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBs b25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcg aW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCnR5cGVkZWYg c2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5 cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQg aW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5z aWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcg bG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBs b25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRl ZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9f dV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQg X19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19v ZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlw ZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9f dV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3Ry dWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19k YWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVf dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9f c3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGlu dCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190 aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hv cnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoK dHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRf dDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9f ZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9f dV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsK Cgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2Fs YXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYg aW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNs dWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5o IiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9w YXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVk ZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewog IGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1 Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0 cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hl ZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5o ZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19z dGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsK fSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9m YXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFk X2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29u ZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVk ZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJl YWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFz dGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAg aW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0 aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0 cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBf cHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2Fp dGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2lu ZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3Ry dWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2Nr YXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5 cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGlu dCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19i YV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQg X19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNDQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIg MwojIDQ1ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4yL2luY2x1ZGUv c3RkaW8uaCIgMiAzCiMgNTMgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w LjIvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNjMg Ii91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjIvaW5jbHVkZS9zdGRpby5o IiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklMRTsKIyA3MyAiL3Vzci9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvbGliaW8uaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyA5ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAxMCAiL3Vzci9pbmNsdWRl L19HX2NvbmZpZy5oIiAyIDMKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjAuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMTIgIi91c3IvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4wLjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2ln bmVkIGludCB3aW50X3Q7CiMgMTUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCiMgMjQg Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAx IDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2lu Y2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwoj IDUxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgNjcgIi91c3IvaW5jbHVkZS93Y2hhci5o IiAzCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRf dCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsK IyAyNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCnR5cGVkZWYgc3RydWN0CnsKICBf X29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVm IHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0df ZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9nY29udi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2djb252LmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMK CiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjIvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAy IDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMC4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMxICIvdXNy L2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKCgoKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19H Q09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZf RU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5Q VVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJ UFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNf TEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3Ry dWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29u dl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGlu dCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9z dGVwX2RhdGEgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgaW50 ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9p ZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYg aW50ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9p ZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBj aGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9m Y3QpICh2b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25l ZCBjaGFyICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19xdWVyeV9mY3QpIChfX2Nv bnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfaW5p dF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X3Ry YW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7CgogIF9f Z2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3Qg X190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190cmFuc19lbmRf ZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX25leHQ7 Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmpl Y3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoKICBpbnQgX19j b3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFtZTsKICBjaGFyICpfX3RvX25hbWU7CgogIF9fZ2Nv bnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2djb252X2Vu ZF9mY3QgX19lbmRfZmN0OwoKCgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQgX19tYXhf bmVlZGVkX2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVlZGVkX3Rv OwoKCiAgaW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0IF9fZ2Nv bnZfc3RlcF9kYXRhCnsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25lZCBjaGFy ICpfX291dGJ1ZmVuZDsKCgoKICBpbnQgX19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0aW9uX2Nv dW50ZXI7CgoKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7 CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKCgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpf X3RyYW5zOwp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVfdCBfX25z dGVwczsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9uX18gc3Ry dWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbXTsKfSAqX19nY29udl90OwojIDQ1ICIvdXNy L2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19nY29u dl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwog ICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmluZWQ7Cn0gX0df aWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f IChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k ZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmli dXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50 MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKIyAzMSAiL3Vzci9pbmNs dWRlL2xpYmlvLmgiIDIgMwojIDUxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3Iv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAz CiMgNDMgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjIvaW5jbHVkZS9z dGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDUy ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgMTU4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIg MwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9JT19GSUxFOwojIDE2OCAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJr ZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVm OwoKCgogIGludCBfcG9zOwojIDE5MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsKCgplbnVt IF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBfX2NvZGVjdnRfcGFydGlhbCwK ICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9OwoKCgoKc3RydWN0IF9JT19j b2RlY3Z0CnsKICB2b2lkICgqX19jb2RlY3Z0X2Rlc3RyKSAoc3RydWN0IF9JT19jb2RlY3Z0ICop OwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb19vdXQpIChzdHJ1Y3QgX0lP X2NvZGVjdnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiosIGNoYXIgKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFyICoqKTsKICBlbnVtIF9fY29k ZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9fdW5zaGlmdCkgKHN0cnVjdCBfSU9fY29kZWN2dCAq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYnN0 YXRlX3QgKiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqLCBjaGFyICoqKTsKICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpfX2Nv ZGVjdnRfZG9faW4pIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiosIHdj aGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh cl90ICosIHdjaGFyX3QgKiopOwogIGludCAoKl9fY29kZWN2dF9kb19lbmNvZGluZykgKHN0cnVj dCBfSU9fY29kZWN2dCAqKTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fYWx3YXlzX25vY29udikgKHN0 cnVjdCBfSU9fY29kZWN2dCAqKTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fbGVuZ3RoKSAoc3RydWN0 IF9JT19jb2RlY3Z0ICosIF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwogIGludCAoKl9fY29kZWN2 dF9kb19tYXhfbGVuZ3RoKSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwoKICBfR19pY29udl90IF9f Y2RfaW47CiAgX0dfaWNvbnZfdCBfX2NkX291dDsKfTsKCgpzdHJ1Y3QgX0lPX3dpZGVfZGF0YQp7 CiAgd2NoYXJfdCAqX0lPX3JlYWRfcHRyOwogIHdjaGFyX3QgKl9JT19yZWFkX2VuZDsKICB3Y2hh cl90ICpfSU9fcmVhZF9iYXNlOwogIHdjaGFyX3QgKl9JT193cml0ZV9iYXNlOwogIHdjaGFyX3Qg Kl9JT193cml0ZV9wdHI7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX2VuZDsKICB3Y2hhcl90ICpfSU9f YnVmX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX2J1Zl9lbmQ7CgogIHdjaGFyX3QgKl9JT19zYXZlX2Jh c2U7CiAgd2NoYXJfdCAqX0lPX2JhY2t1cF9iYXNlOwoKICB3Y2hhcl90ICpfSU9fc2F2ZV9lbmQ7 CgogIF9fbWJzdGF0ZV90IF9JT19zdGF0ZTsKICBfX21ic3RhdGVfdCBfSU9fbGFzdF9zdGF0ZTsK ICBzdHJ1Y3QgX0lPX2NvZGVjdnQgX2NvZGVjdnQ7CgogIHdjaGFyX3QgX3Nob3J0YnVmWzFdOwoK ICBzdHJ1Y3QgX0lPX2p1bXBfdCAqX3dpZGVfdnRhYmxlOwp9OwoKCnN0cnVjdCBfSU9fRklMRSB7 CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFk X2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNo YXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVm X2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hh ciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19t YXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxl bm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQg c2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBf c2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMzAzICIvdXNyL2luY2x1ZGUv bGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKCiAgc3RydWN0IF9JT19jb2RlY3Z0ICpf Y29kZWN2dDsKICBzdHJ1Y3QgX0lPX3dpZGVfZGF0YSAqX3dpZGVfZGF0YTsKCgoKCiAgaW50IF9t b2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9p ZCAqKV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9f RklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lP XzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJf OwojIDM0MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3NzaXplX3QgX19pb19y ZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoK CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19j b25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBf X29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2 b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9fcmVhZF9mbiBjb29raWVfcmVhZF9mdW5j dGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5 cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19j bG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19p b19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4gKndyaXRlOwogIF9faW9fc2Vla19mbiAq c2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190 Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190 OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRlcm4gdm9pZCBfSU9fY29va2llX2luaXQg KHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBfX3JlYWRfd3JpdGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19jb29raWUsIF9JT19jb29raWVfaW9fZnVu Y3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxv dyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikg dGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAo KTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRl cm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBf X3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSB0aHJvdyAoKTsKIyA0MjQgIi91c3IvaW5j bHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dldGMgKF9JT19GSUxFICpfX2ZwKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIHRocm93 ICgpOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVy biBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKZXh0ZXJuIGludCBf SU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZv aWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19m dW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2Nr ZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMgNDU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIg MwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNo YXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwg aW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19G SUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT19w YWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3Qg X0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4g X19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0 aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2 NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9J T19GSUxFICopIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgX0lPX2dldHdjIChfSU9fRklMRSAq X19mcCkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX0lPX3B1dHdjICh3Y2hhcl90IF9fd2MsIF9J T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZndpZGUgKF9JT19GSUxFICpf X2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKIyA1MDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAz CmV4dGVybiBpbnQgX0lPX3Zmd3NjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IHdj aGFyX3QgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp c3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3Zmd3ByaW50ZiAo X0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4gX19zc2l6 ZV90IF9JT193cGFkbiAoX0lPX0ZJTEUgKiwgd2ludF90LCBfX3NzaXplX3QpIHRocm93ICgpOwpl eHRlcm4gdm9pZCBfSU9fZnJlZV93YmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwoK Cgp9CiMgNzQgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjIvaW5jbHVk ZS9zdGRpby5oIiAyIDMKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgX19ub3RfdmFfbGlzdF9f OwojIDg4ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4yL2luY2x1ZGUv c3RkaW8uaCIgMwp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgp0eXBlZGVmIF9HX2Zwb3M2 NF90IGZwb3M2NF90OwojIDEzNyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjAuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0u aCIgMSAzCiMgMTM4ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4yL2lu Y2x1ZGUvc3RkaW8uaCIgMiAzCgoKCmV4dGVybiBGSUxFICpzdGRpbjsKZXh0ZXJuIEZJTEUgKnN0 ZG91dDsKZXh0ZXJuIEZJTEUgKnN0ZGVycjsKIyAxNTIgIi91c3IvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgcmVtb3ZlIChf X2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9f Y29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE2OCAiL3Vzci9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUg KnRtcGZpbGU2NCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnRtcG5hbSAoY2hhciAq X19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSB0aHJv dyAoKTsKIyAxODggIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjIvaW5j bHVkZS9zdGRpby5oIiAzCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGly LCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21h bGxvY19fKSk7CgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgZmNsb3NlYWxsICh2b2lkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4g KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxF ICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAg ICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgMjMyICIv dXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4yL2luY2x1ZGUvc3RkaW8uaCIg MwpleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5h bWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2Rl cykgdGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwg X19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW5j b29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lvX2Z1bmNzKSB0aHJvdyAo KTsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBfX2Nv bnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3Ry ZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g dm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3Qg X19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNldHZidWYgKEZJTEUgKl9fcmVzdHJpY3Qg X19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgaW50 IF9fbW9kZXMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVy IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lk IHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnBy aW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50 IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgp OwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp c3QgX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpOwoK ZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3Qg X19hcmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0 IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChj aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2Fy ZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywg MywgMCkpKTsKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19w dHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2YsCiAgICAgICAgICAgICAgICAgICAgICBf X2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBfX2FzcHJpbnRmIChjaGFyICoq X19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKl9f cmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9f IChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBpbnQgdmRwcmludGYgKGludCBfX2ZkLCBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251 Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9f IChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYgKGludCBfX2ZkLCBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoKCmV4dGVybiBpbnQgZnNj YW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBz Y2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoK ZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19z Y2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDApKSk7CgoKZXh0ZXJuIGludCB2 c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwg MCkpKTsKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0 ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRj aGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0p IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0p IHRocm93ICgpOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgoKZXh0 ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCk7 CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g Y2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZmdldHNfdW5sb2Nr ZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo YXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgNDM2ICIvdXNyL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19zc2l6ZV90 IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p IHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBf X2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0 IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0bGlu ZSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJ TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0cyAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkK ICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFy ICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50IF9fYywgRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0 IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3QgZndyaXRl IChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykgdGhyb3cgKCk7 CgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIs IHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24s IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IGZ3cml0 ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXpl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0 cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9u ZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHJld2lu ZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDQ5OSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla28g KEZJTEUgKl9fc3RyZWFtLCBfX29mZl90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoK ZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3Ry aWN0IF9fcG9zKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0 cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1MzMgIi91c3IvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBp bnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5j ZSkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0s IGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZz ZXRwb3M2NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4 dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJy b3IgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5s b2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2Vk IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3Qg Y2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2Nv bnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsK ZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4g aW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxl bm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUg KnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK CgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVy biBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7 CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3Qg X19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRm IChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpIHRocm93ICgpOwoKCgoKCgoK ZXh0ZXJuIHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZv aWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2NDMgIi91c3IvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjIvaW5jbHVkZS9zdGRpby5oIiAzCn0KIyA0 MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMiAzCiMgODYgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNp bmcgOjpGSUxFOwogIHVzaW5nIDo6ZnBvc190OwoKICB1c2luZyA6OmNsZWFyZXJyOwogIHVzaW5n IDo6ZmNsb3NlOwogIHVzaW5nIDo6ZmVvZjsKICB1c2luZyA6OmZlcnJvcjsKICB1c2luZyA6OmZm bHVzaDsKICB1c2luZyA6OmZnZXRjOwogIHVzaW5nIDo6ZmdldHBvczsKICB1c2luZyA6OmZnZXRz OwogIHVzaW5nIDo6Zm9wZW47CiAgdXNpbmcgOjpmcHJpbnRmOwogIHVzaW5nIDo6ZnB1dGM7CiAg dXNpbmcgOjpmcHV0czsKICB1c2luZyA6OmZyZWFkOwogIHVzaW5nIDo6ZnJlb3BlbjsKICB1c2lu ZyA6OmZzY2FuZjsKICB1c2luZyA6OmZzZWVrOwogIHVzaW5nIDo6ZnNldHBvczsKICB1c2luZyA6 OmZ0ZWxsOwogIHVzaW5nIDo6ZndyaXRlOwogIHVzaW5nIDo6Z2V0YzsKICB1c2luZyA6OmdldGNo YXI7CiAgdXNpbmcgOjpnZXRzOwogIHVzaW5nIDo6cGVycm9yOwogIHVzaW5nIDo6cHJpbnRmOwog IHVzaW5nIDo6cHV0YzsKICB1c2luZyA6OnB1dGNoYXI7CiAgdXNpbmcgOjpwdXRzOwogIHVzaW5n IDo6cmVtb3ZlOwogIHVzaW5nIDo6cmVuYW1lOwogIHVzaW5nIDo6cmV3aW5kOwogIHVzaW5nIDo6 c2NhbmY7CiAgdXNpbmcgOjpzZXRidWY7CiAgdXNpbmcgOjpzZXR2YnVmOwogIHVzaW5nIDo6c3By aW50ZjsKICB1c2luZyA6OnNzY2FuZjsKICB1c2luZyA6OnRtcGZpbGU7CiAgdXNpbmcgOjp0bXBu YW07CiAgdXNpbmcgOjp1bmdldGM7CiAgdXNpbmcgOjp2ZnByaW50ZjsKICB1c2luZyA6OnZwcmlu dGY7CiAgdXNpbmcgOjp2c3ByaW50ZjsKfQojIDE0MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9jc3RkaW8uaCIgMwpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6OnNucHJpbnRm OwogIHVzaW5nIDo6dmZzY2FuZjsKICB1c2luZyA6OnZzY2FuZjsKICB1c2luZyA6OnZzbnByaW50 ZjsKICB1c2luZyA6OnZzc2NhbmY7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4 eDo6c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2ZnNjYW5mOwogIHVzaW5nIF9fZ251X2N4 eDo6dnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNucHJpbnRmOwogIHVzaW5nIF9fZ251X2N4 eDo6dnNzY2FuZjsKfQojIDMyICIvdXNyL2luY2x1ZGUvZysrLXYzL2NzdGRpbyIgMiAzCiMgMzYg Ii91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAyIDMK IyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUv ZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMiAzCiMgMSAiL3Vzci9pbmNs dWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMSAzCiMgMTAyICIvdXNy L2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItc2luZ2xlLmgiIDEg MwojIDM0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1z aW5nbGUuaCIgMwp0eXBlZGVmIGludCBfX2d0aHJlYWRfbXV0ZXhfdDsKIyAyMTEgIi91c3IvaW5j bHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLXNpbmdsZS5oIiAzCnN0YXRp YyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKewogIHJldHVybiAwOwp9Cgpz dGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3Qg KiApCnsKICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3Ry eWxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICogKQp7CiAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxp bmUgaW50Cl9fZ3RocmVhZF9tdXRleF91bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICogKQp7CiAg cmV0dXJuIDA7Cn0KIyAxMDMgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUv Yml0cy9ndGhyLmgiIDIgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgt Z251L2JpdHMvYysraW8uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdHlwZWRlZiBsb25nIHN0 cmVhbW9mZjsKICB0eXBlZGVmIHB0cmRpZmZfdCBzdHJlYW1zaXplOwoKICB0eXBlZGVmIHB0cmRp ZmZfdCB3c3RyZWFtc2l6ZTsKCiAgdHlwZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsKCiAgdHlw ZWRlZiBfX2d0aHJlYWRfbXV0ZXhfdCBfX2NfbG9jazsKCgoKICB0eXBlZGVmIEZJTEUgX19jX2Zp bGVfdHlwZTsKCgogIHN0cnVjdCBfX2lvc19mbGFncwogIHsKICAgIHR5cGVkZWYgc2hvcnQgX19p bnRfdHlwZTsKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19ib29sYWxwaGEgPSAweDAw MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19kZWMgPSAweDAwMDI7CiAgICBzdGF0 aWMgY29uc3QgX19pbnRfdHlwZSBfU19maXhlZCA9IDB4MDAwNDsKICAgIHN0YXRpYyBjb25zdCBf X2ludF90eXBlIF9TX2hleCA9IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2ludGVybmFsID0gMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfbGVmdCA9 IDB4MDAyMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX29jdCA9IDB4MDA0MDsKICAg IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3JpZ2h0ID0gMHgwMDgwOwogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEwMDsKICAgIHN0YXRpYyBjb25zdCBf X2ludF90eXBlIF9TX3Nob3diYXNlID0gMHgwMjAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1Nfc2hvd3BvaW50ID0gMHgwNDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf c2hvd3BvcyA9IDB4MDgwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NraXB3cyA9 IDB4MTAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VuaXRidWYgPSAweDIwMDA7 CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191cHBlcmNhc2UgPSAweDQwMDA7CiAgICBz dGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hZGp1c3RmaWVsZCA9IDB4MDAyMCB8IDB4MDA4MCB8 IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jhc2VmaWVsZCA9IDB4MDAw MiB8IDB4MDA0MCB8IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Zsb2F0 ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2JhZGJpdCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19lb2ZiaXQgPSAw eDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmFpbGJpdCA9IDB4MDQ7CgoKICAg IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FwcCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19hdGUgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf YmluID0gMHgwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2luID0gMHgwODsKICAg IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX291dCA9IDB4MTA7CiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU190cnVuYyA9IDB4MjA7CiAgfTsKfQojIDQwICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3 Y2hhci5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIg MwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25m aWcuaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIg MwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOSAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAzCiMgMSAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9jdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j c3RkZGVmLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgi IDIgMwojIDQwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg MiAzCgpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjAuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL3Rp bWUuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA0MyAiL3Vz ci9pbmNsdWRlL3RpbWUuaCIgMiAzCiMgNTYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg MiAzCgoKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvdHlwZXMuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVk ZWYgX190aW1lX3QgdGltZV90OwojIDc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgODAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIg MwoKCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDkxICIvdXNyL2luY2x1ZGUvdGlt ZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgOTIgIi91c3IvaW5j bHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTA2ICIvdXNy L2luY2x1ZGUvdGltZS5oIiAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIGxvbmcgaW50IHR2X3Nl YzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKCgoKCgoKCnN0cnVjdCB0bQp7CiAgaW50IHRt X3NlYzsKICBpbnQgdG1fbWluOwogIGludCB0bV9ob3VyOwogIGludCB0bV9tZGF5OwogIGludCB0 bV9tb247CiAgaW50IHRtX3llYXI7CiAgaW50IHRtX3dkYXk7CiAgaW50IHRtX3lkYXk7CiAgaW50 IHRtX2lzZHN0OwoKCiAgbG9uZyBpbnQgdG1fZ210b2ZmOwogIF9fY29uc3QgY2hhciAqdG1fem9u ZTsKCgoKCn07CgoKCgpzdHJ1Y3QgaXRpbWVyc3BlYwogIHsKICAgIHN0cnVjdCB0aW1lc3BlYyBp dF9pbnRlcnZhbDsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKICB9OwoKCnN0cnVjdCBz aWdldmVudDsKCgoKCgp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgoKCgpleHRlcm4gY2xvY2tf dCBjbG9jayAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lICh0aW1lX3QgKl9f dGltZXIpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUx LCB0aW1lX3QgX190aW1lMCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoK CgoKZXh0ZXJuIHNpemVfdCBzdHJmdGltZSAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBf X21heHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9f cmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RycHRpbWUgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm10LCBzdHJ1Y3QgdG0gKl9fdHApCiAgICAgdGhyb3cgKCk7CgoK CgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhy b3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZSAoX19jb25zdCB0aW1lX3QgKl9f dGltZXIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IgKF9fY29uc3Qg dGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgdG0g KmxvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUgKF9fY29uc3Qgc3RydWN0IHRtICpfX3RwKSB0 aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0 aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWVfciAoX19jb25zdCBzdHJ1Y3QgdG0g Kl9fcmVzdHJpY3QgX190cCwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmlj dCBfX2J1ZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lX3IgKF9fY29uc3QgdGltZV90 ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3Ry aWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3R6bmFtZVsyXTsKZXh0ZXJu IGludCBfX2RheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgX190aW1lem9uZTsKCgoKCmV4dGVybiBj aGFyICp0em5hbWVbMl07CgoKCmV4dGVybiB2b2lkIHR6c2V0ICh2b2lkKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGludCBkYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IHRpbWV6b25lOwoKCgoKCmV4dGVy biBpbnQgc3RpbWUgKF9fY29uc3QgdGltZV90ICpfX3doZW4pIHRocm93ICgpOwojIDI3MSAiL3Vz ci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gdGltZV90IHRpbWVnbSAoc3RydWN0IHRtICpfX3Rw KSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWVsb2NhbCAoc3RydWN0IHRtICpfX3RwKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IGR5c2l6ZSAoaW50IF9feWVhcikgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgbmFub3NsZWVwIChfX2NvbnN0 IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0ZWRfdGltZSwKICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCB0aW1lc3BlYyAqX19yZW1haW5pbmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNs b2NrX2dldHJlcyAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqX19yZXMp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tf aWQsIHN0cnVjdCB0aW1lc3BlYyAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19z ZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9f dHApCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tfbmFub3NsZWVwIChjbG9ja2lk X3QgX19jbG9ja19pZCwgaW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dl dGNwdWNsb2NraWQgKHBpZF90IF9fcGlkLCBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCB0aW1lcl9jcmVhdGUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLAogICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9fZXZwLAog ICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfdCAqX19yZXN0cmljdCBfX3RpbWVyaWQpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZGVsZXRlICh0aW1lcl90IF9fdGltZXJpZCkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgaW50 IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgaXRpbWVy c3BlYyAqX19yZXN0cmljdCBfX3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fb3ZhbHVlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHRpbWVyX2dldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX192 YWx1ZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2dldG92ZXJydW4gKHRpbWVy X3QgX190aW1lcmlkKSB0aHJvdyAoKTsKIyAzNDIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0 ZXJuIGludCBnZXRkYXRlX2VycjsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlIChfX2Nv bnN0IGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKIyAzNTcgIi91c3IvaW5jbHVkZS90aW1lLmgi IDMKZXh0ZXJuIGludCBnZXRkYXRlX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3N0cmlu ZywKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3Jlc2J1ZnAp IHRocm93ICgpOwoKCgp9CiMgNDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUu aCIgMiAzCiMgNTMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMwpuYW1l c3BhY2Ugc3RkCnsKICB1c2luZyA6OmNsb2NrX3Q7CiAgdXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcg Ojp0bTsKCiAgdXNpbmcgOjpjbG9jazsKICB1c2luZyA6OmRpZmZ0aW1lOwogIHVzaW5nIDo6bWt0 aW1lOwogIHVzaW5nIDo6dGltZTsKICB1c2luZyA6OmFzY3RpbWU7CiAgdXNpbmcgOjpjdGltZTsK ICB1c2luZyA6OmdtdGltZTsKICB1c2luZyA6OmxvY2FsdGltZTsKICB1c2luZyA6OnN0cmZ0aW1l Owp9CiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIgMwojIDQz ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL3djaGFyLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoj IDM3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wLjIvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRl L3djaGFyLmgiIDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjAuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIg MwoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4yL2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMiAzCiMgODUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgX19tYnN0YXRlX3Qg bWJzdGF0ZV90OwojIDEwNSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKc3RydWN0IHRtOwoKCmV4 dGVybiAiQyIgewoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9f cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3 Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoK ZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBz aXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChfX2NvbnN0IHdj aGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3Y2hhcl90 ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgd2NzY2FzZWNtcCAoX19j b25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgd2NzbmNhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hh cl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsK CgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3hs b2NhbGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewoKICBzdHJ1Y3QgbG9j YWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9f Y3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5 cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAxNDQgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAy IDMKCmV4dGVybiBpbnQgX193Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19j b25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90 IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX193Y3NuY2FzZWNtcF9sIChfX2NvbnN0IHdj aGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCB3Y3Njb2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19z MikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzeGZybSAod2NoYXJfdCAqX19yZXN0cmlj dCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgX193Y3Njb2xs X2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAg ICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNp emVfdCBfX3djc3hmcm1fbCAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0 aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzZHVwIChfX2NvbnN0IHdjaGFyX3QgKl9fcykg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3Qg Kndjc2NociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3JjaHIg KF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHJudWwgKF9f Y29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHdjc2NzcG4gKF9fY29uc3Qgd2No YXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NzcG4gKF9fY29uc3Qg d2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2NzcGJyayAoX19j b25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NzdHIg KF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3Y2hhcl90ICpfX25lZWRsZSkK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHdjaGFy X3QgKndjc3djcyAoX19jb25zdCB3Y2hhcl90ICpfX2hheXN0YWNrLCBfX2NvbnN0IHdjaGFyX3Qg Kl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpl eHRlcm4gd2NoYXJfdCAqd2NzdG9rICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAg ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fcHRyKSB0aHJvdyAoKTsK CgpleHRlcm4gc2l6ZV90IHdjc2xlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25sZW4gKF9fY29u c3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNociAoX19jb25zdCB3 Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVz dHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndt ZW1tb3ZlICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24p CiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1zZXQgKHdjaGFyX3QgKl9fcywg d2NoYXJfdCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndt ZW1wY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIHdpbnRfdCBidG93YyAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgd2N0b2IgKHdpbnRfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IG1ic2lu aXQgKF9fY29uc3QgbWJzdGF0ZV90ICpfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBt YnJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAg ICAgICAgICAgbWJzdGF0ZV90ICpfX3ApIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3Qgd2NydG9t YiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHdjaGFyX3QgX193YywKICAgICAgICAgICAgICAgICAg ICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVf dCBfX21icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAg ICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgp OwpleHRlcm4gc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6 ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3Bz KSB0aHJvdyAoKTsKIyAyOTcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCmV4dGVybiBzaXplX3Qg bWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLAogICAg ICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgp OwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMs IHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0 cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IG1ic25ydG93Y3MgKHdjaGFy X3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbm1jLAogICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgp OwoKCgpleHRlcm4gc2l6ZV90IHdjc25ydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3Ny YywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ud2MsIHNpemVfdCBfX2xlbiwK ICAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgd2N3aWR0aCAod2ludF90IF9fYykgdGhyb3cgKCk7CgoK CmV4dGVybiBpbnQgd2Nzd2lkdGggKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19uKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgd2NzdG9sZCAo X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50 IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsIChf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAg ICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3Rv cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAg ICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu dCB3Y3N0b3VxIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhy b3cgKCk7CgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsIChf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0 aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3 Y3N0b3VsbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhy b3cgKCk7CiMgNDA2ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS94 bG9jYWxlLmgiIDEgMwojIDQwNyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCgpleHRlcm4g bG9uZyBpbnQgX193Y3N0b2xfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xv YykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2wgKF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhy b3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9sIChf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAo KTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3Vs bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2Us IF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIF9fd2NzdG9k X2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2Mp CiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgX193Y3N0b2ZfbCAoX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf X3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0 ZXJuIGxvbmcgZG91YmxlIF9fd2NzdG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg X19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgX193Y3N0b2RfaW50ZXJuYWwgKF9f Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAg ICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2ludGVybmFsIChfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdj aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsK ZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2NzdG9sZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgX193 Y3N0b2xfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRw dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9f Z3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2lu dGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i YXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcg bG9uZyBpbnQgX193Y3N0b2xsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25f XwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3djc3RvdWxsX2ludGVybmFsIChfX2Nv bnN0IHdjaGFyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91 cCkgdGhyb3cgKCk7CiMgNTI4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpleHRlcm4gd2NoYXJf dCAqd2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMpIHRocm93 ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NwbmNweSAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0 IHdjaGFyX3QgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IGludCBmd2lkZSAoX19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCBmd3ByaW50ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0 aHJvdyAoKSA7CgpleHRlcm4gaW50IHdwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dwcmludGYgKHdj aGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7 CgoKZXh0ZXJuIGludCB2ZndwcmludGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAg ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7Cgpl eHRlcm4gaW50IHZ3cHJpbnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQs CiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgp IDsKCgpleHRlcm4gaW50IHZzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVf dCBfX24sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAg ICB0aHJvdyAoKSA7CgoKCmV4dGVybiBpbnQgZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0 IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRl cm4gaW50IHN3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAg ICAgdGhyb3cgKCkgOwoKCgoKZXh0ZXJuIGludCB2ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0 IF9fcywKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f Zm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0 aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAg ICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZzd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz dHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQog ICAgIHRocm93ICgpIDsKCgoKCmV4dGVybiB3aW50X3QgZmdldHdjIChfX0ZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cg KCk7CgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhciAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiB3 aW50X3QgZnB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpl eHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwoKCmV4dGVybiB3aW50X3QgcHV0d2NoYXIgKHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoK CgpleHRlcm4gd2NoYXJfdCAqZmdldHdzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBf X24sCiAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmcHV0d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX3dzLAogICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCB1bmdldHdjICh3aW50X3QgX193YywgX19GSUxFICpf X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19G SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgZ2V0d2NoYXJfdW5sb2NrZWQg KHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgZmdldHdjX3VubG9ja2VkIChfX0ZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IGZwdXR3Y191bmxvY2tlZCAod2No YXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBw dXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK ZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhcl91bmxvY2tlZCAod2NoYXJfdCBfX3djKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3c191bmxvY2tlZCAod2NoYXJfdCAqX19yZXN0cmljdCBf X3dzLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZnB1dHdzX3VubG9ja2Vk IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy biBzaXplX3Qgd2NzZnRpbWUgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhz aXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jl c3RyaWN0IF9fdHApIHRocm93ICgpOwojIDY4MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKfQoj IDQ0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMKIyA1OCAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1 c2luZyA6Om1ic3RhdGVfdDsKfQojIDEyMiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j d2NoYXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OndpbnRfdDsKCiAgdXNpbmcgOjpi dG93YzsKICB1c2luZyA6OmZnZXR3YzsKICB1c2luZyA6OmZnZXR3czsKICB1c2luZyA6OmZwdXR3 YzsKICB1c2luZyA6OmZwdXR3czsKICB1c2luZyA6OmZ3aWRlOwogIHVzaW5nIDo6ZndwcmludGY7 CiAgdXNpbmcgOjpmd3NjYW5mOwogIHVzaW5nIDo6Z2V0d2M7CiAgdXNpbmcgOjpnZXR3Y2hhcjsK ICB1c2luZyA6Om1icmxlbjsKICB1c2luZyA6Om1icnRvd2M7CiAgdXNpbmcgOjptYnNpbml0Owog IHVzaW5nIDo6bWJzcnRvd2NzOwogIHVzaW5nIDo6cHV0d2M7CiAgdXNpbmcgOjpwdXR3Y2hhcjsK ICB1c2luZyA6OnN3cHJpbnRmOwogIHVzaW5nIDo6c3dzY2FuZjsKICB1c2luZyA6OnVuZ2V0d2M7 CiAgdXNpbmcgOjp2ZndwcmludGY7CiAgdXNpbmcgOjp2ZndzY2FuZjsKICB1c2luZyA6OnZzd3By aW50ZjsKICB1c2luZyA6OnZzd3NjYW5mOwogIHVzaW5nIDo6dndwcmludGY7CiAgdXNpbmcgOjp2 d3NjYW5mOwogIHVzaW5nIDo6d2NydG9tYjsKICB1c2luZyA6Ondjc2NhdDsKICB1c2luZyA6Ondj c2NtcDsKICB1c2luZyA6Ondjc2NvbGw7CiAgdXNpbmcgOjp3Y3NjcHk7CiAgdXNpbmcgOjp3Y3Nj c3BuOwogIHVzaW5nIDo6d2NzZnRpbWU7CiAgdXNpbmcgOjp3Y3NsZW47CiAgdXNpbmcgOjp3Y3Nu Y2F0OwogIHVzaW5nIDo6d2NzbmNtcDsKICB1c2luZyA6Ondjc25jcHk7CiAgdXNpbmcgOjp3Y3Ny dG9tYnM7CiAgdXNpbmcgOjp3Y3NzcG47CiAgdXNpbmcgOjp3Y3N0b2Q7CiAgdXNpbmcgOjp3Y3N0 b2Y7CiAgdXNpbmcgOjp3Y3N0b2s7CiAgdXNpbmcgOjp3Y3N0b2w7CiAgdXNpbmcgOjp3Y3N0b3Vs OwogIHVzaW5nIDo6d2NzeGZybTsKICB1c2luZyA6OndjdG9iOwogIHVzaW5nIDo6d21lbWNtcDsK ICB1c2luZyA6OndtZW1jcHk7CiAgdXNpbmcgOjp3bWVtbW92ZTsKICB1c2luZyA6OndtZW1zZXQ7 CiAgdXNpbmcgOjp3cHJpbnRmOwogIHVzaW5nIDo6d3NjYW5mOwoKICB1c2luZyA6Ondjc2NocjsK CiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAg eyByZXR1cm4gd2NzY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0K CiAgdXNpbmcgOjp3Y3NwYnJrOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NwYnJrKHdjaGFyX3Qq IF9fczEsIHdjaGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2NzcGJyayhjb25zdF9jYXN0PGNvbnN0 IHdjaGFyX3QqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3Y3NyY2hyOwoKICBpbmxpbmUg d2NoYXJfdCoKICB3Y3NyY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4g d2NzcmNocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5n IDo6d2Nzc3RyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NzdHIod2NoYXJfdCogX19zMSwgd2No YXJfdCogX19zMikKICB7IHJldHVybiB3Y3NzdHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4o X19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6d21lbWNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAg d21lbWNocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogIHsgcmV0dXJu IHdtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jLCBfX24pOyB9Cn0K CgoKCgoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6d2NzdG9sZDsKICB1c2luZyA6 Ondjc3RvbGw7CiAgdXNpbmcgOjp3Y3N0b3VsbDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg X19nbnVfY3h4Ojp3Y3N0b2xkOwogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sbDsKICB1c2luZyBf X2dudV9jeHg6Ondjc3RvdWxsOwp9CiMgNDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mcG9z LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4K ICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX1N0YXRlVCBf X3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgc3RyZWFtb2ZmIF9NX29mZjsKICAgICAg X19zdGF0ZV90eXBlIF9NX3N0OwoKICAgIHB1YmxpYzoKICAgICAgX19zdGF0ZV90eXBlCiAgICAg IHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAgIHZvaWQKICAgICAgc3RhdGUo X19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoKCiAgICAgIGZwb3MoKTogX01f b2ZmKHN0cmVhbW9mZigpKSwgX01fc3QoX19zdGF0ZV90eXBlKCkpIHsgfQoKICAgICAgZnBvcyhz dHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpCiAgICAg IDogX01fb2ZmKF9fb2ZmKSwgX01fc3QoX19zdCkgeyB9CgogICAgICBvcGVyYXRvciBzdHJlYW1v ZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9y Kz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9Cgog ICAgICBmcG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0g X19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvcisoc3RyZWFt b2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCAr PSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBmcG9zCiAgICAgIG9w ZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7 CiAgICAgICAgX190IC09IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAg IGJvb2wKICAgICAgb3BlcmF0b3I9PShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyBy ZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRv ciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19w b3MuX01fb2ZmOyB9CgogICAgICBzdHJlYW1vZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7 IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2Zm IF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9CiAgICB9OwoKCiAgdHlwZWRlZiBmcG9zPG1ic3Rh dGVfdD4gc3RyZWFtcG9zOwoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiB3c3RyZWFtcG9zOwoK fQojIDQyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12 My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2Jh ZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoK ICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5 cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9f cyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2 b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv d19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGlt ZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihj b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBj aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciog X19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0K IyA0MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAzCgpuYW1lc3Bh Y2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBj aGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvczsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAg ICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0 cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hh cl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtOwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4K ICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgICB0eXBlbmFt ZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdidWY7 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh aXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFy VD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAg ICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19v c3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFs bG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU PiA+CiAgICBjbGFzcyBiYXNpY19maWxlYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj X2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg PSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29mc3RyZWFtOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh clQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgaXN0 cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJh dG9yOwoKCgogIGNsYXNzIGlvc19iYXNlOwoKCiAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcj4gaW9z OwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXI+IHN0cmVhbWJ1ZjsKICB0eXBlZGVmIGJh c2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcj4g b3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXI+IGlvc3RyZWFtOwogIHR5cGVk ZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJp bmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJl YW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTxjaGFy PiBzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXI+IGZpbGVidWY7CiAg dHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29m c3RyZWFtPGNoYXI+IG9mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTxjaGFyPiBmc3Ry ZWFtOwoKCiAgdHlwZWRlZiBiYXNpY19pb3M8d2NoYXJfdD4gd2lvczsKICB0eXBlZGVmIGJhc2lj X3N0cmVhbWJ1Zjx3Y2hhcl90PiB3c3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3 Y2hhcl90PiB3aXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08d2NoYXJfdD4gd29zdHJl YW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTx3Y2hhcl90PiB3aW9zdHJlYW07CiAgdHlwZWRl ZiBiYXNpY19zdHJpbmdidWY8d2NoYXJfdD4gd3N0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lz dHJpbmdzdHJlYW08d2NoYXJfdD4gd2lzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3Ry aW5nc3RyZWFtPHdjaGFyX3Q+IHdvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5n c3RyZWFtPHdjaGFyX3Q+IHdzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPHdj aGFyX3Q+IHdmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08d2NoYXJfdD4gd2lmc3Ry ZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08d2NoYXJfdD4gd29mc3RyZWFtOwogIHR5cGVk ZWYgYmFzaWNfZnN0cmVhbTx3Y2hhcl90PiB3ZnN0cmVhbTsKCn0KIyA0MCAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9leGNl cHRpb24iIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMwpleHRlcm4g IkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgY2xhc3MgZXhjZXB0aW9uCiAgewogIHB1 YmxpYzoKICAgIGV4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5leGNlcHRpb24o KSB0aHJvdygpOwoKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygp OwogIH07CgoKCiAgY2xhc3MgYmFkX2V4Y2VwdGlvbiA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAg cHVibGljOgogICAgYmFkX2V4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5iYWRf ZXhjZXB0aW9uKCkgdGhyb3coKTsKICB9OwoKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hh bmRsZXIpICgpOwoKICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKCiAg dGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3co KTsKCgogIHZvaWQgdGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoK CiAgdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikg dGhyb3coKTsKCgogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJu X18pKTsKIyA5NSAiL3Vzci9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDMKICBib29sIHVuY2F1 Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0KCn0KIyA0MSAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJh aXRzLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIg MwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzCiMgMzcg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMiAzCiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfY3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyNiAi L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEg MwojIDI3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgojIDEg Ii91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjIvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCmV4dGVybiB2b2lkICpt ZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy biB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVf dCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9f cmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAg ICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKZXh0 ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQg Kl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNp emVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoK ZXh0ZXJuIHZvaWQgKnJhd21lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChf X2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpf X3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRo cm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAog ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl X3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0 IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoK ZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0 IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl eHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3My LCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f czIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6 ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7 CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAxMDkgIi91c3IvaW5jbHVk ZS9zdHJpbmcuaCIgMiAzCgoKZXh0ZXJuIGludCBfX3N0cmNvbGxfbCAoX19jb25zdCBjaGFyICpf X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIF9fbG9jYWxlX3QgX19sKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBfX3N0cnhmcm1fbCAoY2hh ciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq c3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs bG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJp bmcsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18p KTsKIyAxNTUgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY2hyIChf X2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Mp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0 cmNocm51bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIg Kl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3Ms IF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29u c3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29u c3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKCmV4dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ss IF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJu IGNoYXIgKl9fc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCmV4dGVy biBjaGFyICpzdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVtbWVtIChfX2NvbnN0 IHZvaWQgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrbGVuLAogICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVkbGVsZW4pCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB2b2lkICpfX21lbXBj cHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4g dm9pZCAqbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgp OwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19j b25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19l cnJudW0pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVt LCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lk IF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lk IGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRo cm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQg Kl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAo X19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKCgpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBmZnNsIChsb25nIGludCBfX2wpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGlu dCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpf X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBf X2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXBfbCAoX19jb25zdCBj aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK ZXh0ZXJuIGludCBfX3N0cm5jYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj aGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2Nh bGVfdCBfX2xvYykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK CgpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCiAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0 IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK ZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hh ciAqX19zdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBjcHkgKGNoYXIgKl9f cmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhy b3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0 LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMs IHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqX19yZXN0 cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJmcnkgKGNo YXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9pZCAqX19z LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmJhc2VuYW1lIChfX2Nv bnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwojIDM2NCAiL3Vzci9pbmNsdWRlL3N0cmlu Zy5oIiAzCn0KIyA0MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDIg MwojIDY2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMwpuYW1lc3Bh Y2Ugc3RkCnsKICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1lbW1vdmU7CiAgdXNpbmcgOjpz dHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3RyY2F0OwogIHVzaW5nIDo6c3Ry bmNhdDsKICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNtcDsKICB1c2luZyA6OnN0cmNv bGw7CiAgdXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZybTsKICB1c2luZyA6OnN0cmNz cG47CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7CiAgdXNpbmcgOjptZW1zZXQ7 CiAgdXNpbmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsKCiAgdXNpbmcgOjptZW1jaHI7 CgogIGlubGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGludCBfX2MsIHNpemVfdCBfX24p CiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9fcCksIF9fYywgX19u KTsgfQoKICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RyY2hyKGNoYXIqIF9f czEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNvbnN0 IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBicms7CgogIGlubGluZSBjaGFy KgogIHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1 aWx0aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KCiAg dXNpbmcgOjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJyY2hyKGNoYXIqIF9fczEsIGlu dCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFy Kj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7CgogIGlubGluZSBjaGFyKgogIHN0 cnN0cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9z dHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9Cn0KIyA0MCAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMwojIDEgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9mcG9zLmgiIDEgMwojIDQxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv Y2hhcl90cmFpdHMuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTxjbGFzcyBf Q2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQg Y2hhcl90eXBlOwoKICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOwogICAgICB0 eXBlZGVmIHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5 cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9p ZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAg ICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNo YXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2Mx ID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYg X19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsg fQoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwg Y29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgZm9yIChz aXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKICAgICAgICAgIGlmICghZXEoX19zMVtf X2ldLCBfX3MyW19faV0pKQogICAgICAgICAgICByZXR1cm4gbHQoX19zMVtfX2ldLCBfX3MyW19f aV0pID8gLTEgOiAxOwogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBzdGF0aWMgc2l6 ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgewogICAgICAgIGNv bnN0IGNoYXJfdHlwZSogX19wID0gX19zOwogICAgICAgIHdoaWxlICgqX19wKSArK19fcDsKICAg ICAgICByZXR1cm4gKF9fcCAtIF9fcyk7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFy X3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0 IGNoYXJfdHlwZSYgX19hKQogICAgICB7CiAgICAgICAgZm9yIChjb25zdCBjaGFyX3R5cGUqIF9f cCA9IF9fczsgc2l6ZV90KF9fcCAtIF9fcykgPCBfX247ICsrX19wKQogICAgICAgICAgaWYgKCpf X3AgPT0gX19hKSByZXR1cm4gX19wOwogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBz dGF0aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90 eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtbW92 ZShfX3MxLCBfX3MyLCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0KCiAgICAgIHN0YXRpYyBj aGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9f czIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHkoX19zMSwg X19zMiwgX19uICogc2l6ZW9mKGNoYXJfdHlwZSkpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBl KgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2Ep CiAgICAgIHsKICAgICAgICBmb3IgKGNoYXJfdHlwZSogX19wID0gX19zOyBfX3AgPCBfX3MgKyBf X247ICsrX19wKQogICAgICAgICAgYXNzaWduKCpfX3AsIF9fYSk7CiAgICAgICAgcmV0dXJuIF9f czsKICAgICAgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29u c3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0KCiAgICAg IHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykg eyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50 X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7 IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2Yo KSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oLTEpOyB9CgogICAgICBzdGF0aWMgaW50 X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBl cV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IGludF90eXBlKDApIDogX19jOyB9CiAgICB9OwoKCgog IHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPgogICAgewogICAgICB0eXBl ZGVmIGNoYXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGludCBpbnRfdHlwZTsKICAgICAgdHlw ZWRlZiBzdHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBl OwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQK ICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAg ICB7IF9fYzEgPSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFy X3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9 PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9f YzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0K CiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNv bnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gbWVtY21wKF9f czEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0 IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiBzdHJsZW4oX19zKTsgfQoKICAgICAgc3Rh dGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6 ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PGNvbnN0IGNoYXJfdHlwZSo+KG1lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRp YyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUq IF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+ KG1lbW1vdmUoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAg ICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBf X24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbWNweShfX3MxLCBf X3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJf dHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0 aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KCgoKICAgICAgc3RhdGlj IGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQogICAgICB7 IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o X19jKSk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90 eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBf X2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8aW50X3R5cGU+KCgtMSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90 X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiAoX19jID09IGVvZigpKSA/ IDAgOiBfX2M7IH0KICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czx3 Y2hhcl90PgogICAgewogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIHdpbnRfdCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAg ICAgIHR5cGVkZWYgd3N0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qg c3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9f YzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAg c3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5 cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJv b2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIp CiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNv bXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVf dCBfX24pCiAgICAgIHsgcmV0dXJuIHdtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAg c3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsg cmV0dXJuIHdjc2xlbihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAg ICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUm IF9fYSkKICAgICAgeyByZXR1cm4gd21lbWNocihfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3Rh dGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlw ZSogX19zMiwgaW50X3R5cGUgX19uKQogICAgICB7IHJldHVybiB3bWVtbW92ZShfX3MxLCBfX3My LCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSog X19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiB3 bWVtY3B5KF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAg IGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAg eyByZXR1cm4gd21lbXNldChfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlw ZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykgeyByZXR1cm4gY2hhcl90 eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25z dCBjaGFyX3R5cGUmIF9fYykgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGlj IGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90 eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBp bnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKDB4ZmZm ZmZmZmZ1KSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGlu dF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkpID8gMCA6 IF9fYzsgfQogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBzdHJ1Y3QgX0NoYXJfdHJhaXRzX21hdGNoCiAgICB7CiAgICAgIF9DaGFyVCBfTV9j OwogICAgICBfQ2hhcl90cmFpdHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01fYyhfX2Mp IHsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJl dHVybiBfVHJhaXRzOjplcShfTV9jLCBfX2EpOyB9CiAgICB9Owp9CiMgNDIgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfY3N0ZGlvLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv cy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDEgMwoj IDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDMKCiMgMSAiL3Vzci9p bmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0 MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDEgMwojIDM2 ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgi IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdHlwZWRlZiBpbnQqIF9fY19sb2NhbGU7Cn0KIyA0MSAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX2NsaW1pdHMuaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfY2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjAuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMSAiL3Vzci9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAuMi9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMi9pbmNsdWRlL3N5c2xpbWl0cy5oIiAxIDMK CgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4yL2luY2x1 ZGUvbGltaXRzLmgiIDEgMwojIDEyNSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjAuMi9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAx IDMKIyAyNiAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1 cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDE0NCAiL3Vzci9p bmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAx IDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMwojIDEgIi91c3IvaW5j bHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxf bGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMwojIDM3ICIvdXNy L2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9w b3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEgMwojIDE0OSAiL3Vzci9pbmNsdWRl L2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMSAz CiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0u aCIgMiAzCiMgMTM2ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDEzNyAiL3Vzci9pbmNsdWRlL2JpdHMveG9w ZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAxMjYgIi91 c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjIvaW5jbHVkZS9saW1pdHMuaCIg MiAzCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMi9pbmNsdWRl L3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjAuMi9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9jbGltaXRzLmgiIDIgMwojIDQyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9j YWxlZndkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgi IDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAzCgojIDEg Ii91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIg MSAzCiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDEgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVy YXRvci5oIiAxIDMKIyA2MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2Nv bmZpZy5oIiAxIDMKIyA2MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5o IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMg NjIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDY5ICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwoKIyAxICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgNzEgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsK CnN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFn IHt9OwpzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3Jf dGFnIHt9OwpzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2Fy ZF9pdGVyYXRvcl90YWcge307CnN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1 YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKCgoKCgoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgaW5wdXRfaXRlcmF0b3IgewogIHR5cGVkZWYg aW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVl X3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1Rw KiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07CgpzdHJ1Y3Qgb3V0cHV0X2l0 ZXJhdG9yIHsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7 CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlw ZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwp9OwoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgZm9yd2FyZF9pdGVy YXRvciB7CiAgdHlwZWRlZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK ICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2Vf dHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9 OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGJpZGlyZWN0 aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRl cmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0 YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBf VHAmIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4g c3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3IgewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19p dGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsK ICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50 ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQ2F0ZWdv cnksIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90LAogICAgICAgICAgY2xh c3MgX1BvaW50ZXIgPSBfVHAqLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJj4Kc3RydWN0IGl0ZXJh dG9yIHsKICB0eXBlZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9U cCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl ZGVmIF9Qb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKfTsK CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogIHR5 cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRl Z29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBl OwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5j ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBvaW50ZXI7CiAg dHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSByZWZlcmVuY2U7Cn07Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsKICB0eXBlZGVm IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYg X1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5 cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsKICB0eXBl ZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVk ZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwog IHR5cGVkZWYgY29uc3QgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVu Y2U7Cn07CiMgMTcyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2Vf dHlwZXMuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQpfX2l0ZXJhdG9yX2NhdGVnb3J5KGNv bnN0IF9JdGVyJikKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6 aXRlcmF0b3JfY2F0ZWdvcnkgX0NhdGVnb3J5OwogIHJldHVybiBfQ2F0ZWdvcnkoKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy Pjo6ZGlmZmVyZW5jZV90eXBlKgpfX2Rpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAgcmV0 dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVu Y2VfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgpfX3ZhbHVlX3R5cGUoY29uc3QgX0l0 ZXImKQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl cj46OnZhbHVlX3R5cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKaXRlcmF0b3Jf Y2F0ZWdvcnkoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19pdGVyYXRvcl9jYXRlZ29yeShf X2kpOyB9CgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpkaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVy JiBfX2kpIHsgcmV0dXJuIF9fZGlzdGFuY2VfdHlwZShfX2kpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBl Kgp2YWx1ZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fdmFsdWVfdHlwZShfX2kp OyB9Cgp9CiMgNjQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAz CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgi IDEgMwojIDY5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVu Y3MuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEg MwojIDM0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAzCgojIDEg Ii91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIg MSAzCiMgMzYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDIgMwoj IDcwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIg MiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3Is IGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBf X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX0Rp c3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgd2hpbGUg KF9fZmlyc3QgIT0gX19sYXN0KSB7ICsrX19maXJzdDsgKytfX247IH0KfQoKdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBf X2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgX0Rpc3RhbmNlJiBfX24sIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogIF9fbiArPSBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgZGlz dGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgX0lucHV0 SXRlcmF0b3IgX19sYXN0LCBfRGlzdGFuY2UmIF9fbikKewoKICBfX2Rpc3RhbmNlKF9fZmlyc3Qs IF9fbGFzdCwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w dXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9f Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm ZXJlbmNlX3R5cGUgX19uID0gMDsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsr X19maXJzdDsgKytfX247CiAgfQogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv bUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCl9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg ICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46 OmRpZmZlcmVuY2VfdHlwZQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ dGVyYXRvciBfX2xhc3QpCnsKCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu cHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX0NhdGVnb3J5OwogIHJldHVybiBf X2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0lu cHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgd2hpbGUgKF9fbi0tKSArK19faTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv bmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9CaWRp cmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAgICAg ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogIGlmIChfX24gPiAwKQogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICBlbHNlCiAgICB3 aGlsZSAoX19uKyspIC0tX19pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNz SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAgICAgICAgIHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIF9f aSArPSBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh bmNlPgppbmxpbmUgdm9pZCBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBf X24pCnsKCiAgX19hZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKfQoK fQojIDY1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwojIDEg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAzCiMgNjMgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnRl bXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRvciB7CnBy b3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250 YWluZXIgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJh dG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBk aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJl ZmVyZW5jZTsKCiAgZXhwbGljaXQgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194 KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+ JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3Zh bHVlKSB7CiAgICBjb250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhp czsKICB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsg cmV0dXJuICp0aGlzOyB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJh dG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWlu ZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCnRlbXBsYXRlIDxjbGFz cyBfQ29udGFpbmVyPgppbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gYmFj a19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpIHsKICByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0 b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNz IGZyb250X2luc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWlu ZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRl ZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2 YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lk IHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgZnJvbnRfaW5z ZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBmcm9u dF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1l IF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsKICAgIGNvbnRhaW5lci0+cHVzaF9m cm9udChfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJh dG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2lu c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9 CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyBy ZXR1cm4gKnRoaXM7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgZnJv bnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250YWluZXIm IF9feCkgewogIHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGluc2VydF9pdGVyYXRvciB7CnBy b3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6 aXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlw ZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlw ZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0 eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBpbnNlcnRf aXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBf X2kpCiAgICA6IGNvbnRhaW5lcigmX194KSwgaXRlcihfX2kpIHt9CiAgaW5zZXJ0X2l0ZXJhdG9y PF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1 ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwgX192 YWx1ZSk7CiAgICArK2l0ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGluc2VydF9pdGVyYXRv cjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRfaXRl cmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGluc2Vy dF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lciwgY2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUK aW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0 ZXJhdG9yIF9faSkKewogIHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19p dGVyOwogIHJldHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LCBfX2l0ZXIoX19p KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBfVHAs IGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlID0gcHRy ZGlmZl90PgpjbGFzcyByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYg cmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIF9U cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBf RGlzdGFuY2U+IF9TZWxmOwpwcm90ZWN0ZWQ6CiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBjdXJy ZW50OwpwdWJsaWM6CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRv cl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNl IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZl cmVuY2UgcmVmZXJlbmNlOwoKICByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoKSB7fQog IGV4cGxpY2l0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcihfQmlkaXJlY3Rpb25hbEl0 ZXJhdG9yIF9feCkKICAgIDogY3VycmVudChfX3gpIHt9CiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRv ciBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQogIF9SZWZlcmVuY2Ugb3BlcmF0b3Iq KCkgY29uc3QgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAg ICByZXR1cm4gKi0tX190bXA7CiAgfQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0 dXJuICYob3BlcmF0b3IqKCkpOyB9CiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJl bnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBf U2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0K ICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsK ICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAg ICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9C aUl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZiwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9v bCBvcGVyYXRvcj09KAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9C aUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX194LAogICAgY29uc3QgcmV2ZXJzZV9iaWRp cmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQp7 CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9C aUl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZiwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9v bCBvcGVyYXRvciE9KAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9C aUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX194LAogICAgY29uc3QgcmV2ZXJzZV9iaWRp cmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQp7 CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KIyAyMjIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpjbGFzcyByZXZl cnNlX2l0ZXJhdG9yCnsKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6CiAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0 ZWdvcnkKICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIHZhbHVlX3R5cGU7 CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5j ZV90eXBlCiAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9pbnRlcjsKICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UKICAgICAg ICAgIHJlZmVyZW5jZTsKCiAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICB0eXBl ZGVmIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2VsZjsKCnB1YmxpYzoKICByZXZlcnNl X2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUg X194KSA6IGN1cnJlbnQoX194KSB7fQoKICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9TZWxmJiBf X3gpIDogY3VycmVudChfX3guY3VycmVudCkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CiAg cmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAg OiBjdXJyZW50KF9feC5iYXNlKCkpIHt9CgogIGl0ZXJhdG9yX3R5cGUgYmFzZSgpIGNvbnN0IHsg cmV0dXJuIGN1cnJlbnQ7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgX0l0 ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3RtcDsKICB9CiAgcG9pbnRl ciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYm IG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9T ZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJy ZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsr Y3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsK ICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7 CiAgfQoKICBfU2VsZiBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAg cmV0dXJuIF9TZWxmKGN1cnJlbnQgLSBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3IrPShkaWZm ZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50IC09IF9fbjsKICAgIHJldHVybiAqdGhpczsK ICB9CiAgX1NlbGYgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJl dHVybiBfU2VsZihjdXJyZW50ICsgX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLT0oZGlmZmVy ZW5jZV90eXBlIF9fbikgewogICAgY3VycmVudCArPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAg fQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0 dXJuICooKnRoaXMgKyBfX24pOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxp bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194 LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y PiYgX195KSB7CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRl cmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJz ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSA8IF9feC5i YXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9y IT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1 cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJv b2wgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAg ICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kp IHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxp bmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194 LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y PiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVy YXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy YXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9JdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y Pjo6ZGlmZmVyZW5jZV90eXBlCm9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy YXRvcj4mIF9feCwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg X195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0l0ZXJhdG9yPgppbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+Cm9wZXJhdG9y Kyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBf X24sCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkgewog IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJhc2UoKSAtIF9fbik7Cn0K Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0NoYXJUID0gY2hhciwgY2xh c3MgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICBjbGFzcyBfRGlzdCA9 IHB0cmRpZmZfdD4KY2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7CnB1YmxpYzoKICB0eXBlZGVmIF9D aGFyVCBjaGFyX3R5cGU7CiAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogIHR5cGVkZWYg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgdHlwZWRlZiBp bnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVf dHlwZTsKICB0eXBlZGVmIF9EaXN0IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9U cCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOwoKICBpc3RyZWFtX2l0 ZXJhdG9yKCkgOiBfTV9zdHJlYW0oMCksIF9NX29rKGZhbHNlKSB7fQogIGlzdHJlYW1faXRlcmF0 b3IoaXN0cmVhbV90eXBlJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpIHsgX01fcmVhZCgpOyB9Cgog IHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQogIHBvaW50 ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIGlzdHJl YW1faXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4gKnRo aXM7CiAgfQogIGlzdHJlYW1faXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGlzdHJlYW1f aXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiBfX3RtcDsK ICB9CgogIGJvb2wgX01fZXF1YWwoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYgX194KSBjb25zdAog ICAgeyByZXR1cm4gKF9NX29rID09IF9feC5fTV9vaykgJiYgKCFfTV9vayB8fCBfTV9zdHJlYW0g PT0gX194Ll9NX3N0cmVhbSk7IH0KCnByaXZhdGU6CiAgaXN0cmVhbV90eXBlKiBfTV9zdHJlYW07 CiAgX1RwIF9NX3ZhbHVlOwogIGJvb2wgX01fb2s7CgogIHZvaWQgX01fcmVhZCgpIHsKICAgIF9N X29rID0gKF9NX3N0cmVhbSAmJiAqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICAgIGlmIChf TV9vaykgewogICAgICAqX01fc3RyZWFtID4+IF9NX3ZhbHVlOwogICAgICBfTV9vayA9ICpfTV9z dHJlYW0gPyB0cnVlIDogZmFsc2U7CiAgICB9CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfRGlzdD4KaW5saW5lIGJvb2wKb3Bl cmF0b3I9PShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBfRGlz dD4mIF9feCwKICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBf VHJhaXRzLCBfRGlzdD4mIF9feSkgewogIHJldHVybiBfX3guX01fZXF1YWwoX195KTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfRGlz dD4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0No YXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feCwKICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJh dG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feSkgewogIHJldHVybiAhX194Ll9N X2VxdWFsKF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0No YXJUID0gY2hhciwgY2xhc3MgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgpjbGFzcyBv c3RyZWFtX2l0ZXJhdG9yIHsKcHVibGljOgogIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICB0 eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcg aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2 b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZv aWQgcmVmZXJlbmNlOwoKICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zKSA6IF9N X3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9CiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFt X3R5cGUmIF9fcywgY29uc3QgX0NoYXJUKiBfX2MpCiAgICA6IF9NX3N0cmVhbSgmX19zKSwgX01f c3RyaW5nKF9fYykge30KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yPShjb25zdCBf VHAmIF9fdmFsdWUpIHsKICAgICpfTV9zdHJlYW0gPDwgX192YWx1ZTsKICAgIGlmIChfTV9zdHJp bmcpICpfTV9zdHJlYW0gPDwgX01fc3RyaW5nOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBvc3Ry ZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgb3N0cmVh bV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBvc3RyZWFt X2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQpwcml2YXRl OgogIG9zdHJlYW1fdHlwZSogX01fc3RyZWFtOwogIGNvbnN0IF9DaGFyVCogX01fc3RyaW5nOwp9 OwojIDQ0NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KY2xhc3MgX19ub3Jt YWxfaXRlcmF0b3IKICA6IHB1YmxpYyBpdGVyYXRvcjxpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y Pjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJhaXRz PF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJh aXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICAgICAgICAgICAgICBpdGVy YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICBpdGVy YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgp7Cgpwcm90ZWN0ZWQ6CiAgX0l0ZXJh dG9yIF9NX2N1cnJlbnQ7CgpwdWJsaWM6CiAgdHlwZWRlZiBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3IsIF9Db250YWluZXI+IG5vcm1hbF9pdGVyYXRvcl90eXBlOwogIHR5cGVkZWYgaXRlcmF0 b3JfdHJhaXRzPF9JdGVyYXRvcj4gX190cmFpdHNfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9f dHJhaXRzX3R5cGU6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVk ZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwogIHR5cGVk ZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlw ZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0 eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7CgogIF9f bm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KCiAgZXhwbGlj aXQgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2kpIDogX01fY3VycmVudChf X2kpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0 ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyLCBfQ29udGFpbmVyPiYgX19pKQog ICAgOiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQoKCiAgcmVmZXJlbmNlCiAgb3BlcmF0b3Iq KCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cnJlbnQ7IH0KCiAgcG9pbnRlcgogIG9wZXJhdG9yLT4o KSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CgogIG5vcm1hbF9pdGVyYXRvcl90eXBlJgog IG9wZXJhdG9yKysoKSB7ICsrX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9p dGVyYXRvcl90eXBlCiAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9y KF9NX2N1cnJlbnQrKyk7IH0KCgogIG5vcm1hbF9pdGVyYXRvcl90eXBlJgogIG9wZXJhdG9yLS0o KSB7IC0tX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9pdGVyYXRvcl90eXBl CiAgb3BlcmF0b3ItLShpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQt LSk7IH0KCgogIHJlZmVyZW5jZQogIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBf X24pIGNvbnN0CiAgeyByZXR1cm4gX01fY3VycmVudFtfX25dOyB9CgogIG5vcm1hbF9pdGVyYXRv cl90eXBlJgogIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgeyBfTV9j dXJyZW50ICs9IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9pdGVyYXRvcl90eXBlCiAg b3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9f bm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgKyBfX24pOyB9CgogIG5vcm1hbF9pdGVyYXRvcl90 eXBlJgogIG9wZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgeyBfTV9jdXJy ZW50IC09IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9pdGVyYXRvcl90eXBlCiAgb3Bl cmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9fbm9y bWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgLSBfX24pOyB9CgogIGRpZmZlcmVuY2VfdHlwZQogIG9w ZXJhdG9yLShjb25zdCBub3JtYWxfaXRlcmF0b3JfdHlwZSYgX19pKSBjb25zdAogIHsgcmV0dXJu IF9NX2N1cnJlbnQgLSBfX2kuX01fY3VycmVudDsgfQoKICBjb25zdCBfSXRlcmF0b3ImCiAgYmFz ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KfTsKCgoKdGVtcGxhdGU8dHlwZW5hbWUg X0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5s aW5lIGJvb2wKb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBf Q29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19y aHMuYmFzZSgpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRl cmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvciE9KGNvbnN0 IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAg ICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19y aHMpCnsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CgoKCnRlbXBsYXRlPHR5cGVuYW1lIF9J dGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGlu ZSBib29sCm9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29u dGFpbmVyPiYgX19saHMsCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0 b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJh c2UoKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9y UiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+KGNvbnN0IF9fbm9y bWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgIGNv bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyBy ZXR1cm4gX19yaHMgPCBfX2xoczsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlw ZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0 b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19s aHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRh aW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fcmhzIDwgX19saHMpOyB9Cgp0ZW1wbGF0ZTx0eXBl bmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVy PgppbmxpbmUgYm9vbApvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv ckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRv cjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuICEoX19saHMgPCBfX3Jo cyk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K aW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4Kb3BlcmF0b3Ir KHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj46OmRpZmZl cmVuY2VfdHlwZSBfX24sCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0 b3IsIF9Db250YWluZXI+JiBfX2kpCnsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv ciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0KCn0KIyA2NiAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9tZW1vcnkuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5 LmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMK IyA2NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMK IyA2NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWlyLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX3BhaXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90 eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29u ZDsKCgoKCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkge30KCgoKCiAgcGFpcihjb25zdCBf VDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCgog IHRlbXBsYXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8X1UxLCBf VTI+JiBfX3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9Cn07CgoK dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv bnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICBy ZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7 Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9y PChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7 CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3kuZmlyc3Qg PCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKCnRlbXBsYXRlIDxj bGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYWlyPF9U MSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX194 ID09IF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29s IG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1Qy PiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNs YXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194 LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoK CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShj b25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAg cmV0dXJuICEoX194IDwgX195KTsKfQojIDEzOSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgoKCmlubGluZSBwYWly PF9UMSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9feSkKCgoKewogIHJldHVybiBwYWly PF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA2NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9hbGdvYmFzZS5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy90eXBl X3RyYWl0cy5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRz LmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2Mr K2NvbmZpZy5oIiAxIDMKIyA1MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRz LmgiIDIgMwojIDg2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMwp0 ZW1wbGF0ZSA8Ym9vbCBfVHJ1dGg+IHN0cnVjdCBfQm9vbCB7fTsKdHlwZWRlZiBfQm9vbDx0cnVl PiBfX3RydWVfdHlwZTsKdHlwZWRlZiBfQm9vbDxmYWxzZT4gX19mYWxzZV90eXBlOwoKdGVtcGxh dGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHMgewogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVfZmlyc3Q7CiMgMTEwICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNf dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNf dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJp dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJp dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19QT0RfdHlwZTsKfTsK CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gewogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9E X3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaWduZWQg Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf dHJhaXRzPHVuc2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8 PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2hvcnQ+IHsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90 eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBzaG9ydD4g ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz PGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf dHJhaXRzPHVuc2lnbmVkIGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3Np Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVt cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nPiB7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q T0RfdHlwZTsKfTsKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGxvbmc+ IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0 czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0 ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf dHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlw ZV90cmFpdHM8X1RwKj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1 bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50 X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNs YXNzIF9UcD4gc3RydWN0IF9Jc19pbnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50 ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRl ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl cjxjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hh cj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1 Y3QgX0lzX2ludGVnZXI8d2NoYXJfdD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9f dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVu c2lnbmVkIHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1w bGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4g ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg X0lzX2ludGVnZXI8bG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoK dGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYg X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl cjxsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBs YXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogIHR5cGVkZWYg X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVj dCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX05vcm1hbDsK fTsKCgpuYW1lc3BhY2Ugc3RkIHsKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBl bmFtZSBfQ29udGFpbmVyPiBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcjsKfTsKCnRlbXBsYXRlPHR5 cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxf aXRlcmF0b3I8IHN0ZDo6X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiA+ IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDcwICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzCiMgNzIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbGlt aXRzLmgiIDEgMwojIDczICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAxIDMKIyAz NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM4 ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzCiMgMSAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzCiMgNDEgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfY3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAy NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi IDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgoKIyAxICIvdXNyL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj IDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvd2FpdGZsYWdzLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMSAzCiMgNjMg Ii91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRp YW4uaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyAzNyAi L3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgi IDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDY0ICIvdXNyL2luY2x1ZGUv Yml0cy93YWl0c3RhdHVzLmgiIDIgMwoKdW5pb24gd2FpdAogIHsKICAgIGludCB3X3N0YXR1czsK ICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfdGVybXNpZzo3Owog ICAgICAgIHVuc2lnbmVkIGludCBfX3dfY29yZWR1bXA6MTsKICAgICAgICB1bnNpZ25lZCBpbnQg X193X3JldGNvZGU6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCgogICAgICB9IF9f d2FpdF90ZXJtaW5hdGVkOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50 IF9fd19zdG9wdmFsOjg7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wc2lnOjg7CiAgICAg ICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgogICAgICB9IF9fd2FpdF9zdG9wcGVkOwogIH07CiMg NDQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgOTQgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRp dl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGlu dCByZW07CiAgfSBsZGl2X3Q7CgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsK ICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZf dDsKIyAxMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gc2l6ZV90IF9fY3R5cGVf Z2V0X21iX2N1cl9tYXggKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9f Y29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAq X19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRlbnNp b25fXyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCiAg ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUg c3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxv YXQgc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9u ZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs IGludCBfX2Jhc2UpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0 aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19l eHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJv dyAoKTsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7Cgpf X2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAg dGhyb3cgKCk7CiMgMjExICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUveGxvY2FsZS5oIiAxIDMKIyAyMTIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCmV4 dGVybiBsb25nIGludCBfX3N0cnRvbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs IGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9j KSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2wgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNp b25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2wgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykK ICAgICB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfbCAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBm bG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3Qg X19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIF9fc3Ry dG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f Z3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cg KCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0 b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRo cm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3Jv dXApIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0 cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg aW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBs b25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cg KCk7CiMgMzg0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxv bmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hh ciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91c3Iv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg MwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3N5 cy90eXBlcy5oIiAyIDMKCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBl cy5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiBf X3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2lu dCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90 Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoK CgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoK CgoKdHlwZWRlZiBfX2lubzY0X3QgaW5vNjRfdDsKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsK CgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoK CgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsK CgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0 X3Q7CiMgMTA0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2lkX3QgaWRf dDsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3Qg ZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qg a2V5X3Q7CiMgMTMyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvdGltZS5oIiAxIDMKIyAxMzMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5 cGVkZWYgX191c2Vjb25kc190IHVzZWNvbmRzX3Q7CgoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBz dXNlY29uZHNfdDsKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4wLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2ln bmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTkwICIv dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu dCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYg dW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykp KTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fd29yZF9fKSkpOwojIDIxMiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMTMgIi91c3IvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyAyNSAiL3Vz ci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAx IDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAz CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVk ZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEg MwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGludCBfX3NpZ19h dG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192 YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdz ZXRfdDsKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVkZWYgX19z aWdzZXRfdCBzaWdzZXRfdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgNDQg Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90 aW1lLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAy IDMKCgoKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vj b25kc190IHR2X3VzZWM7CiAgfTsKIyA0NiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAz CgoKCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7 CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2sp KV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKIyA4 OSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKZXh0ZXJu IGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAg ICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAg ICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAg ICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFk ZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAog ICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAg ICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0 LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdt YXNrKSB0aHJvdyAoKTsKCgp9CiMgMjE2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoK CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMjE5ICIvdXNyL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7CgoK CgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3Qg ZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTcgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90 Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250 NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDM5MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMK CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRvbSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZv aWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNo YXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgpleHRl cm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3Ry dWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7 CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7 CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50 IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAg ICAgICAgICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0 ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0 YSAqX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50 IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJh bmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2V0c3Rh dGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGludCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25l ZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGlu dCAqX19zZWVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkg dGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1 YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAo KTsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNd KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4 dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhy b3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAo KTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg X19zZWVkMTZ2WzNdKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hv cnQgaW50IF9fcGFyYW1bN10pIHRocm93ICgpOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7 CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9f b2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hvcnQg aW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0ZXJu IGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIs CiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93 ICgpOwpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10s CiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9f YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0 KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAq X19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jl c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVk IHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5k NDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcg aW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1yYW5kNDhf ciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAg ICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJu IGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAg ICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJh bmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2VlZDQ4X3Ig KHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sCiAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgbGNvbmc0 OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKIyA1MjcgIi91c3IvaW5j bHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3QgX19zaXplKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgKmNhbGxvYyAo c2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmVhbGxvYyAodm9pZCAqX19wdHIs IHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7Cgpl eHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNm cmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5o IiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Zl YXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMi9pbmNsdWRlL3N0ZGRlZi5oIiAx IDMKIyAyNiAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCmV4 dGVybiB2b2lkICphbGxvY2EgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCn0KIyA1NDcg Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXpl X3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0 ZXJuIGludCBwb3NpeF9tZW1hbGlnbiAodm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGlnbm1l bnQsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9j X18pKTsKCgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX25vcmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2 b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChp bnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoK CgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVzKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gY2hhciAq Z2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpf X3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpleHRl cm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg c2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQg X19yZXBsYWNlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29uc3Qg Y2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkg dGhyb3cgKCk7CiMgNjIzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1r dGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1rc3Rl bXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY0MCAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAzCmV4dGVybiBpbnQgbWtzdGVtcDY0IChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsK IyA2NTAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hh ciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25zdCBj aGFyICpfX2NvbW1hbmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2FsaXpl X2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDY3MiAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0 IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3Qp IChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5f dCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29uc3Qgdm9p ZCAqX19rZXksIF9fY29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpl eHRlcm4gdm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9f c2l6ZSwKICAgICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRl cm4gaW50IGFicyAoaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OwpleHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGxs YWJzIChsb25nIGxvbmcgaW50IF9feCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5v bSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2 X3QgbGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsbGRp dl90IGxsZGl2IChsb25nIGxvbmcgaW50IF9fbnVtZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxvbmcgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CiMgNzI4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0 ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0 cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikg dGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9f cmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUg X192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4g Y2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAg ICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2ln bikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50 IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBp bnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFnY3Z0IChsb25n IGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9f cmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Np Z24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19s ZW4pIHRocm93ICgpOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9f cmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcWVjdnRfciAobG9uZyBkb3Vi bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0 cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAg IGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBp bnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAg ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWdu LAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xl bikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19zLCBz aXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19yZXN0 cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3Ms IHdjaGFyX3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdj aGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBzaXpl X3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQogICAgIHRo cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0IGNoYXIgKl9fcmVzcG9u c2UpIHRocm93ICgpOwojIDgwOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQg Z2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAgICAgICAgICAgICAgICAg ICAgICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAogICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2 b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4g aW50IHBvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGlu dCBncmFudHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5sb2NrcHQgKGlu dCBfX2ZkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYs IHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRwdCAodm9pZCkgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBp bnQgX19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQojIDQyICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2NzdGRsaWIuaCIgMiAzCiMgNzMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf Y3N0ZGxpYi5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6ZGl2X3Q7CiAgdXNpbmcgOjps ZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNpbmcgOjphYnM7CiAgdXNpbmcgOjphdGV4aXQ7 CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRvaTsKICB1c2luZyA6OmF0b2w7CiAgdXNpbmcg Ojpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwogIHVzaW5nIDo6ZGl2OwogIHVzaW5nIDo6ZXhp dDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpnZXRlbnY7CiAgdXNpbmcgOjpsYWJzOwogIHVz aW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsKICB1c2luZyA6Om1ibGVuOwogIHVzaW5nIDo6 bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAgdXNpbmcgOjpxc29ydDsKICB1c2luZyA6OnJh bmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5nIDo6c3JhbmQ7CiAgdXNpbmcgOjpzdHJ0b2Q7 CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpzdHJ0b3VsOwogIHVzaW5nIDo6c3lzdGVtOwog IHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3Y3RvbWI7CgogIGlubGluZSBsb25nCiAgYWJz KGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7IH0KCiAgaW5saW5lIGxkaXZfdAogIGRpdihs b25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2opOyB9Cn0KIyAxMjUgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAzCm5hbWVzcGFjZSBfX2dudV9j eHgKewogIHVzaW5nIDo6bGxkaXZfdDsKICB1c2luZyA6Ol9FeGl0OwoKICBpbmxpbmUgbG9uZyBs b25nCiAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9feDsg fQoKICBpbmxpbmUgbG9uZyBsb25nCiAgbGxhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194 ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsbGRpdl90CiAgZGl2KGxvbmcgbG9uZyBf X24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7 IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBs bGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7IF9fcS5x dW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9CgogIHVz aW5nIDo6YXRvbGw7CiAgdXNpbmcgOjpzdHJ0b2Y7CiAgdXNpbmcgOjpzdHJ0b2xsOwogIHVzaW5n IDo6c3RydG91bGw7CiAgdXNpbmcgOjpzdHJ0b2xkOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2lu ZyBfX2dudV9jeHg6OmxsZGl2X3Q7CiAgdXNpbmcgX19nbnVfY3h4OjpfRXhpdDsKICB1c2luZyBf X2dudV9jeHg6OmFiczsKICB1c2luZyBfX2dudV9jeHg6OmxsYWJzOwogIHVzaW5nIF9fZ251X2N4 eDo6ZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXY7CiAgdXNpbmcgX19nbnVfY3h4OjphdG9s bDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvZjsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGw7 CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b3VsbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGQ7 Cn0KIyA3NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgNzUgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L2crKy12My9uZXciIDEgMwojIDQwICIvdXNyL2luY2x1ZGUvZysrLXYzL25ldyIgMwojIDEgIi91 c3IvaW5jbHVkZS9nKystdjMvY3N0ZGRlZiIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS9nKystdjMv bmV3IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMSAzCiMgNDIgIi91 c3IvaW5jbHVkZS9nKystdjMvbmV3IiAyIDMKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3Rk CnsKCgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgog ICAgYmFkX2FsbG9jKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJhZF9hbGxvYygpIHRocm93 KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3df dCBub3Rocm93OwoKCiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CgogIG5ld19oYW5k bGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcik7Cn0KIyA3NiAiL3Vzci9pbmNsdWRlL2cr Ky12My9uZXciIDMKdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpi YWRfYWxsb2MpOwp2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6 YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqKSB0aHJvdygpOwp2b2lkIG9w ZXJhdG9yIGRlbGV0ZVtdKHZvaWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6 c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5l d1tdKHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3Bl cmF0b3IgZGVsZXRlKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lk IG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygp OwoKCmlubGluZSB2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQgKnBsYWNlKSB0 aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9CmlubGluZSB2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6 OnNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KCn0KIyA3NiAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzCiMgNzggIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDc5ICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA4MCAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2l0ZXJhdG9yLmgiIDEgMwojIDgxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs Z29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNr LmgiIDEgMwojIDgyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg MwoKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFz cyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIF9faXRlcl9zd2FwKF9Gb3J3 YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYiwgX1RwKikKewogIF9UcCBfX3RtcCA9ICpf X2E7CiAgKl9fYSA9ICpfX2I7CiAgKl9fYiA9IF9fdG1wOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KaW5saW5lIHZvaWQgaXRlcl9zd2FwKF9G b3J3YXJkSXRlcjEgX19hLCBfRm9yd2FyZEl0ZXIyIF9fYikKewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19pdGVyX3N3YXAo X19hLCBfX2IsIF9fdmFsdWVfdHlwZShfX2EpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5s aW5lIHZvaWQgc3dhcChfVHAmIF9fYSwgX1RwJiBfX2IpCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgX1RwIF9fdG1wID0gX19h OwogIF9fYSA9IF9fYjsKICBfX2IgPSBfX3RtcDsKfQoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9U cD4KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikg ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgogIGlmIChfX2IgPCBfX2EpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwg Y29uc3QgX1RwJiBfX2IpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBpZiAoX19hIDwgX19iKSByZXR1cm4gX19iOyBy ZXR1cm4gX19hOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5l IGNvbnN0IF9UcCYgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUg X19jb21wKSB7CgogIGlmIChfX2NvbXAoX19iLCBfX2EpKSByZXR1cm4gX19iOyByZXR1cm4gX19h Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9U cCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKSB7 CgogIGlmIChfX2NvbXAoX19hLCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwp9CiMgMTY2 ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGlu ZSBfT3V0cHV0SXRlciBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcsIF9EaXN0YW5jZSopCnsKICBm b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAqX19y ZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5s aW5lIF9PdXRwdXRJdGVyCl9fY29weShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgcmFuZG9tX2Fj Y2Vzc19pdGVyYXRvcl90YWcsIF9EaXN0YW5jZSopCnsKICBmb3IgKF9EaXN0YW5jZSBfX24gPSBf X2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogICAgKl9fcmVzdWx0ID0gKl9fZmly c3Q7CiAgICArK19fZmlyc3Q7CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gX19yZXN1bHQ7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBfVHAqCl9fY29weV90cml2aWFsKGNvbnN0 IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCnsKICBtZW1t b3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7 CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19j b3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUp CnsKICByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAg ICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLAogICAgICAgICAgICAgICAgX19kaXN0 YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz IF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2F1eDIoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKewogIHJldHVybiBfX2NvcHkoX19m aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdv cnkoX19maXJzdCksCiAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKiBfX2NvcHlfYXV4MihfVHAqIF9fZmly c3QsIF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICBf X3RydWVfdHlwZSkKewogIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9f cmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIF9UcCogX19jb3B5X2F1eDIo Y29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCwKICAg ICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCnsKICByZXR1cm4gX19jb3B5X3RyaXZp YWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9PdXRwdXRJdGVyIF9f Y29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9UcCopCnsKICB0eXBl ZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9v cGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9fY29weV9hdXgyKF9fZmlyc3Qs IF9fbGFzdCwgX19yZXN1bHQsIF9Ucml2aWFsKCkpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9u aTIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKewogIHJl dHVybiBfT3V0cHV0SXRlcihfX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFz ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0 KSkpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl cj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9uaTIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKewogIHJldHVybiBfX2NvcHlfYXV4KF9fZmlyc3QsIF9f bGFzdCwgX19yZXN1bHQsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlPHR5cGVu YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIg X19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBl KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6 X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LmJhc2UoKSwgX19s YXN0LmJhc2UoKSwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29w eV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCnsK ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9y bWFsIF9fTm9ybWFsOwogIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1 bHQsIF9fTm9ybWFsKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091 dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCiAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVy YXRvcjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgcmV0dXJuIF9fY29weV9uaTEo X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KCgoKCnRlbXBsYXRlIDxj bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAg ICAgICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2NvcHlf YmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIy IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlk aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAg Ki0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3Mg X0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyIF9fY29weV9iYWNrd2FyZChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Jlc3VsdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90 YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSop CnsKICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9f bikKICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgoK CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlv bmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQm9vbFR5cGU+CnN0cnVjdCBfX2NvcHlfYmFja3dh cmRfZGlzcGF0Y2gKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVj dGlvbmFsSXRlcjE+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAgX0NhdDsKICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXIxPjo6ZGlmZmVyZW5j ZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2U7CgogIHN0YXRpYyBfQmlkaXJlY3Rpb25hbEl0ZXIy IGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KSB7CiAgICByZXR1 cm4gX19jb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9DYXQoKSwgKF9E aXN0YW5jZSopIDApOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlf YmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1Rw KiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1 bHQpIHsKICAgIGNvbnN0IHB0cmRpZmZfdCBfTnVtID0gX19sYXN0IC0gX19maXJzdDsKICAgIG1l bW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIF9OdW0pOwogICAg cmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1 Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBl Pgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19s YXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNo PF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBf X3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9CSTEsIGNsYXNzIF9CSTI+CmlubGlu ZSBfQkkyIF9fY29weV9iYWNrd2FyZF9hdXgoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJ MiBfX3Jlc3VsdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czx0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAgICAgICAgICAgICAgICAgICAgICAg IDo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAg cmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkxLCBfQkkyLCBfVHJpdmlhbD4KICAg ICAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRl IDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgppbmxpbmUgX0JJMiBfX2NvcHlfYmFja3dh cmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVz dWx0LCBfX3RydWVfdHlwZSkgewogIHJldHVybiBfQkkyKF9fY29weV9iYWNrd2FyZF9hdXgoX19m aXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCkpKTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9C STEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9y bWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2Vf dHlwZSl7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jl c3VsdCk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgppbmxpbmUg X0JJMiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwg X0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9J c19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29w eV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3Qu YmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFt ZSBfQkkyPgppbmxpbmUgX0JJMiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9y KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKSB7CiAgdHlw ZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFs OwogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX05vcm1hbCgpKTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVu YW1lIF9CSTI+CmlubGluZSBfQkkyIGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9f bGFzdCwgX0JJMiBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB0 eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMT46Ol9Ob3JtYWwgX19Ob3Jt YWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJz dCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX05vcm1hbCgpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs IGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0 SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7 CiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1fX2NvdW50KSB7CiAgICAqX19yZXN1bHQgPSAqX19m aXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBwYWlyPF9J bnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2ZpcnN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWly PF9SQUl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfUkFJdGVyIF9fZmlyc3QsIF9TaXplIF9f Y291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICByYW5kb21fYWNj ZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0ZXIgX19sYXN0ID0gX19maXJzdCArIF9fY291bnQ7 CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+KF9fbGFzdCwgY29weShfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz cyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRw dXRJdGVyPgpfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRw dXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0 SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+CmNvcHlfbihfSW5wdXRJ dGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKCiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0KTsK fQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBmaWxs KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9f dmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xh c3Q7ICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9PdXRwdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciBmaWxsX24o X091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUpCnsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICpf X2ZpcnN0ID0gX192YWx1ZTsKICByZXR1cm4gX19maXJzdDsKfQoKCgppbmxpbmUgdm9pZCBmaWxs KHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHVuc2lnbmVkIGNoYXIqIF9fbGFzdCwKICAgICAgICAg ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCnsKICB1bnNpZ25lZCBjaGFyIF9fdG1w ID0gX19jOwogIG1lbXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJzdCk7Cn0KCmlu bGluZSB2b2lkIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25lZCBjaGFyKiBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykKewogIHNpZ25lZCBjaGFy IF9fdG1wID0gX19jOwogIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy PihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgdm9pZCBmaWxsKGNoYXIqIF9f Zmlyc3QsIGNoYXIqIF9fbGFzdCwgY29uc3QgY2hhciYgX19jKQp7CiAgY2hhciBfX3RtcCA9IF9f YzsKICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBf X2xhc3QgLSBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9TaXplPgppbmxpbmUgdW5zaWdu ZWQgY2hhciogZmlsbF9uKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCnsKICBmaWxs KF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgcmV0dXJuIF9fZmlyc3QgKyBfX247Cn0K CnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIHNpZ25lZCBjaGFyKiBmaWxsX24oY2hhciog X19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWdu ZWQgY2hhciYgX19jKQp7CiAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogIHJl dHVybiBfX2ZpcnN0ICsgX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGluZSBjaGFy KiBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBjaGFyJiBfX2MpCnsKICBm aWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgcmV0dXJuIF9fZmlyc3QgKyBfX247 Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpw YWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJz dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBf X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl cjIgX19maXJzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChf X2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIpIHsKICAgICsrX19m aXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lu cHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CnBhaXI8X0lu cHV0SXRlcjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIxIF9fbGFzdDEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVk aWNhdGUgX19iaW5hcnlfcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkg ewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1 dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW5saW5lIGJvb2wgZXF1YWwoX0lu cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGZv ciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlm ICghKCpfX2ZpcnN0MSA9PSAqX19maXJzdDIpKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJu IHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIs IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9f Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytf X2ZpcnN0MikKICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAg ICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBh cmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz dDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdDEg IT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgOyArK19fZmlyc3QxLCAr K19fZmlyc3QyKSB7CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4g dHJ1ZTsKICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsK ICB9CiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsK fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3Mg X0NvbXBhcmU+CmJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGZv ciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAg OyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9f Zmlyc3QyKSkKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9f Zmlyc3QxKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gX19maXJzdDEgPT0gX19s YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9CgppbmxpbmUgYm9vbApsZXhpY29ncmFwaGlj YWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwKICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsKICBjb25zdCBzaXplX3QgX19sZW4x ID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0g X19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0 MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3Vs dCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7Cn0KCmlubGluZSBib29sIGxleGljb2dyYXBoaWNhbF9j b21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3Qg Y2hhciogX19sYXN0MikKewoKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0 IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoKCgoKfQoKdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW50IF9fbGV4aWNv Z3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz dDIpCiAgICAgIHJldHVybiAtMTsKICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAg IHJldHVybiAxOwogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIGlmIChfX2Zp cnN0MiA9PSBfX2xhc3QyKSB7CiAgICByZXR1cm4gIShfX2ZpcnN0MSA9PSBfX2xhc3QxKTsKICB9 CiAgZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9CgppbmxpbmUgaW50Cl9fbGV4aWNvZ3JhcGhp Y2FsX2NvbXBhcmVfM3dheShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFz dDIpCnsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNv bnN0IHB0cmRpZmZfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9f cmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7 CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdAogICAgICAgICAgICAgICAgICAgICAg IDogKF9fbGVuMSA9PSBfX2xlbjIgPyAwIDogKF9fbGVuMSA8IF9fbGVuMiA/IC0xIDogMSkpOwp9 CgppbmxpbmUgaW50Cl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCBjaGFyKiBf X2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQp7CgogIHJldHVy biBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsK CgoKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4K aW50IGxleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1 dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgoKICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9f Zmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7Cn0KCn0KIyA1MCAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA1NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9hbGxvYy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0Lmgi IDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoK ICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3df YmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZv aWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29u c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBj aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19z KTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv aWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f dGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3Zl cmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93 X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShj b25zdCBjaGFyKiBfX3MpOwp9CiMgNTggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxs b2MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEg MwojIDU5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAxIDMKIyA2MCAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzCiMgNjEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jYXNzZXJ0 LmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9hc3NlcnQu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRl L2Fzc2VydC5oIiAyIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCmV4dGVybiAiQyIg ewoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24s IF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgX19saW5lLCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJv cl9mYWlsIChpbnQgX19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2Vy dCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGlu ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQojIDM4 ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMiAzCiMgNjIgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgoKCgoKIyAxICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMSAzCiMgNjIgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBj LWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfdGhyZWFkcy5oIiAyIDMKIyA4MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90 aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgOTUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfdGhyZWFkcy5oIiAzCnN0cnVjdCBfUmVmY291bnRfQmFzZQp7CgoKCgogIHR5cGVkZWYg c2l6ZV90IF9SQ190OwoKCgogICB2b2xhdGlsZSBfUkNfdCBfTV9yZWZfY291bnQ7CgoKCgogIF9f Z3RocmVhZF9tdXRleF90IF9NX3JlZl9jb3VudF9sb2NrOwogIF9SZWZjb3VudF9CYXNlKF9SQ190 IF9fbikgOiBfTV9yZWZfY291bnQoX19uKQogICAgewoKICAgICAgX19ndGhyZWFkX211dGV4X3Qg X190bXAgPSAwOwogICAgICBfTV9yZWZfY291bnRfbG9jayA9IF9fdG1wOwoKCgoKCiAgICB9CiMg MTQxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHZvaWQgX01f aW5jcigpIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAg ICArK19NX3JlZl9jb3VudDsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3Vu dF9sb2NrKTsKICB9CiAgX1JDX3QgX01fZGVjcigpIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2Nr KCZfTV9yZWZfY291bnRfbG9jayk7CiAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVm X2NvdW50OwogICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwog ICAgcmV0dXJuIF9fdG1wOwogIH0KIyAxOTIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf dGhyZWFkcy5oIiAzCn07CiMgMzEzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVh ZHMuaCIgMwp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kc3RydWN0IF9TVExfbXV0ZXhfc3BpbiB7CiAg ZW51bSB7IF9fbG93X21heCA9IDMwLCBfX2hpZ2hfbWF4ID0gMTAwMCB9OwoKCiAgc3RhdGljIHVu c2lnbmVkIF9fbWF4OwogIHN0YXRpYyB1bnNpZ25lZCBfX2xhc3Q7Cn07Cgp0ZW1wbGF0ZSA8aW50 IF9faW5zdD4KdW5zaWduZWQgX1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbWF4ID0gX1NUTF9t dXRleF9zcGluPF9faW5zdD46Ol9fbG93X21heDsKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp1bnNp Z25lZCBfU1RMX211dGV4X3NwaW48X19pbnN0Pjo6X19sYXN0ID0gMDsKIyAzNDAgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnN0cnVjdCBfU1RMX211dGV4X2xvY2sK ewoKCgoKCgoKICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9sb2NrOwogIHZvaWQgX01faW5pdGlhbGl6 ZSgpIHsKIyAzNzEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAg fQogIHZvaWQgX01fYWNxdWlyZV9sb2NrKCkgewoKCgogICAgX19ndGhyZWFkX211dGV4X2xvY2so Jl9NX2xvY2spOwogIH0KICB2b2lkIF9NX3JlbGVhc2VfbG9jaygpIHsKCgoKICAgIF9fZ3RocmVh ZF9tdXRleF91bmxvY2soJl9NX2xvY2spOwogIH0KIyA0ODIgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfdGhyZWFkcy5oIiAzCn07CiMgNTIxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX3RocmVhZHMuaCIgMwpzdHJ1Y3QgX1NUTF9hdXRvX2xvY2sKewogIF9TVExfbXV0ZXhfbG9j ayYgX01fbG9jazsKCiAgX1NUTF9hdXRvX2xvY2soX1NUTF9tdXRleF9sb2NrJiBfX2xvY2spIDog X01fbG9jayhfX2xvY2spCiAgICB7IF9NX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KICB+X1NU TF9hdXRvX2xvY2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0KCnByaXZhdGU6CiAg dm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTF9hdXRvX2xvY2smKTsKICBfU1RMX2F1dG9fbG9jayhj b25zdCBfU1RMX2F1dG9fbG9jayYpOwp9OwoKfQojIDY4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2FsbG9jLmgiIDIgMwojIDk3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs bG9jLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxpbnQgX19pbnN0PgpjbGFzcyBf X21hbGxvY19hbGxvY190ZW1wbGF0ZSB7Cgpwcml2YXRlOgoKICBzdGF0aWMgdm9pZCogX1Nfb29t X21hbGxvYyhzaXplX3QpOwogIHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6 ZV90KTsKICBzdGF0aWMgdm9pZCAoKiBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKTsKCnB1 YmxpYzoKCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgewogICAgdm9pZCog X19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9 IF9TX29vbV9tYWxsb2MoX19uKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2 b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgKQogIHsKICAgIGZyZWUoX19wKTsKICB9 CgogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICwgc2l6ZV90IF9f bmV3X3N6KQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsK ICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9yZWFsbG9jKF9fcCwgX19u ZXdfc3opOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQgKCogX19zZXRf bWFsbG9jX2hhbmRsZXIodm9pZCAoKl9fZikoKSkpKCkKICB7CiAgICB2b2lkICgqIF9fb2xkKSgp ID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICBfX21hbGxvY19hbGxvY19vb21faGFu ZGxlciA9IF9fZjsKICAgIHJldHVybihfX29sZCk7CiAgfQoKfTsKCgoKdGVtcGxhdGUgPGludCBf X2luc3Q+CnZvaWQgKCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2Nf YWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQqCl9f bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikK ewogICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgdm9pZCogX19yZXN1bHQ7 CgogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19h bGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21hbGxvY19oYW5kbGVyKSB7 IHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxl cikoKTsKICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmIChfX3Jlc3Vs dCkgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQq IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQqIF9f cCwgc2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAg dm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hhbmRs ZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215X21h bGxvY19oYW5kbGVyKSB7IHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsgfQogICAgICAgICgqX19t eV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX24p OwogICAgICAgIGlmIChfX3Jlc3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdHlwZWRl ZiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTwwPiBtYWxsb2NfYWxsb2M7Cgp0ZW1wbGF0ZTxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xhc3Mgc2ltcGxlX2FsbG9jIHsKCnB1YmxpYzoKICAgIHN0 YXRpYyBfVHAqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIDAgPT0gX19uID8g MCA6IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0 YXRpYyBfVHAqIGFsbG9jYXRlKHZvaWQpCiAgICAgIHsgcmV0dXJuIChfVHAqKSBfQWxsb2M6OmFs bG9jYXRlKHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBf X3AsIHNpemVfdCBfX24pCiAgICAgIHsgaWYgKDAgIT0gX19uKSBfQWxsb2M6OmRlYWxsb2NhdGUo X19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9U cCogX19wKQogICAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0K fTsKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgZGVidWdfYWxsb2MgewoKcHJp dmF0ZToKCiAgZW51bSB7X1NfZXh0cmEgPSA4fTsKCgoKcHVibGljOgoKICBzdGF0aWMgdm9pZCog YWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKilfQWxs b2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3Vs dCA9IF9fbjsKICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOwogIH0KCiAgc3Rh dGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgewogICAgY2hhciog X19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7CiAgICAoc3RhdGljX2Nhc3Q8 dm9pZD4gKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAo Iiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24iLCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9hbGxvYy5oIiwgMjE5LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgIF9BbGxvYzo6 ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogIH0KCiAgc3RhdGlj IHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25l d19zeikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19leHRy YTsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9z eikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3oi LCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiwgMjI2LCBfX1BSRVRUWV9G VU5DVElPTl9fKSwgMCkpKTsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKQogICAgICBfQWxs b2M6OnJlYWxsb2NhdGUoX19yZWFsX3AsIF9fb2xkX3N6ICsgKGludCkgX1NfZXh0cmEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3ogKyAoaW50KSBfU19leHRyYSk7 CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAgIHJldHVybiBfX3Jlc3VsdCAr IChpbnQpIF9TX2V4dHJhOwogIH0KCn07CiMgMjcwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CmNsYXNzIF9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZSB7Cgpwcml2YXRlOgoKCiAgZW51bSB7X0FMSUdOID0gOH07 CiAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgZW51bSB7X05GUkVFTElTVFMgPSAxNn07CiAg c3RhdGljIHNpemVfdAogIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQogICAgeyByZXR1cm4g KCgoX19ieXRlcykgKyAoc2l6ZV90KSBfQUxJR04tMSkgJiB+KChzaXplX3QpIF9BTElHTiAtIDEp KTsgfQoKICB1bmlvbiBfT2JqIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGlu azsKICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOwogIH07CgogIHN0YXRpYyBfT2JqKiB2 b2xhdGlsZSBfU19mcmVlX2xpc3RbXTsKCiAgc3RhdGljIHNpemVfdCBfU19mcmVlbGlzdF9pbmRl eChzaXplX3QgX19ieXRlcykgewogICAgICAgIHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3Qp X0FMSUdOLTEpLyhzaXplX3QpX0FMSUdOIC0gMSk7CiAgfQoKCiAgc3RhdGljIHZvaWQqIF9TX3Jl ZmlsbChzaXplX3QgX19uKTsKCgogIHN0YXRpYyBjaGFyKiBfU19jaHVua19hbGxvYyhzaXplX3Qg X19zaXplLCBpbnQmIF9fbm9ianMpOwoKCiAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAg c3RhdGljIGNoYXIqIF9TX2VuZF9mcmVlOwogIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9zaXplOwoK CiAgICBzdGF0aWMgX1NUTF9tdXRleF9sb2NrIF9TX25vZGVfYWxsb2NhdG9yX2xvY2s7CgoKCgoK ICAgIGNsYXNzIF9Mb2NrOwogICAgZnJpZW5kIGNsYXNzIF9Mb2NrOwogICAgY2xhc3MgX0xvY2sg ewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgX0xvY2soKSB7IHsgaWYgKHRocmVhZHMpIF9T X25vZGVfYWxsb2NhdG9yX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH07IH0KICAgICAgICAgICAg fl9Mb2NrKCkgeyB7IGlmICh0aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2NrLl9NX3JlbGVh c2VfbG9jaygpOyB9OyB9CiAgICB9OwoKcHVibGljOgoKCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRl KHNpemVfdCBfX24pCiAgewogICAgdm9pZCogX19yZXQgPSAwOwoKICAgIGlmIChfX24gPiAoc2l6 ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgIF9fcmV0ID0gbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShf X24pOwogICAgfQogICAgZWxzZSB7CiAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlz dAogICAgICAgICAgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCgoK CiAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKCiAgICAgIF9PYmoqIF9fcmVzdWx0ID0gKl9f bXlfZnJlZV9saXN0OwogICAgICBpZiAoX19yZXN1bHQgPT0gMCkKICAgICAgICBfX3JldCA9IF9T X3JlZmlsbChfU19yb3VuZF91cChfX24pKTsKICAgICAgZWxzZSB7CiAgICAgICAgKl9fbXlfZnJl ZV9saXN0ID0gX19yZXN1bHQgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgX19yZXQgPSBf X3Jlc3VsdDsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBfX3JldDsKICB9OwoKCiAgc3RhdGlj IHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgewogICAgaWYgKF9fbiA+ IChzaXplX3QpIF9NQVhfQllURVMpCiAgICAgIG1hbGxvY19hbGxvYzo6ZGVhbGxvY2F0ZShfX3As IF9fbik7CiAgICBlbHNlIHsKICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0CiAg ICAgICAgICA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAgIF9P YmoqIF9fcSA9IChfT2JqKilfX3A7CgoKCgogICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7Cgog ICAgICBfX3EgLT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICpf X215X2ZyZWVfbGlzdCA9IF9fcTsKCiAgICB9CiAgfQoKICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0 ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsKCn0gOwoKdHlw ZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwgMD4gYWxsb2M7CnR5cGVkZWYgX19k ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBzaW5nbGVfY2xpZW50X2FsbG9jOwoKdGVt cGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09 KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mLAogICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVh ZHMsIF9faW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxib29sIF9fdGhyZWFk cywgaW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2RlZmF1bHRfYWxs b2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikKewogIHJl dHVybiBmYWxzZTsKfQoKCgoKCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0 PgpjaGFyKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19j aHVua19hbGxvYyhzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9ianMpCnsKICAgIGNoYXIqIF9f cmVzdWx0OwogICAgc2l6ZV90IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAg c2l6ZV90IF9fYnl0ZXNfbGVmdCA9IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRfZnJlZTsKCiAgICBp ZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpIHsKICAgICAgICBfX3Jlc3VsdCA9IF9T X3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAg ICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9IGVsc2UgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3Np emUpIHsKICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAgICAg ICAgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgICAgX19yZXN1bHQgPSBf U19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAg ICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIHsKICAgICAgICBzaXplX3QgX19ieXRl c190b19nZXQgPQogICAgICAgICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBfU19yb3VuZF91cChfU19o ZWFwX3NpemUgPj4gNCk7CgogICAgICAgIGlmIChfX2J5dGVzX2xlZnQgPiAwKSB7CiAgICAgICAg ICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9CiAgICAgICAgICAgICAgICAgICAg ICAgIF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7CgogICAg ICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2ZyZWUpIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9f bXlfZnJlZV9saXN0OwogICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiopX1Nfc3Rh cnRfZnJlZTsKICAgICAgICB9CiAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKiltYWxsb2Mo X19ieXRlc190b19nZXQpOwogICAgICAgIGlmICgwID09IF9TX3N0YXJ0X2ZyZWUpIHsKICAgICAg ICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9s aXN0OwogICAgICAgICAgICBfT2JqKiBfX3A7CgoKCiAgICAgICAgICAgIGZvciAoX19pID0gX19z aXplOwogICAgICAgICAgICAgICAgIF9faSA8PSAoc2l6ZV90KSBfTUFYX0JZVEVTOwogICAgICAg ICAgICAgICAgIF9faSArPSAoc2l6ZV90KSBfQUxJR04pIHsKICAgICAgICAgICAgICAgIF9fbXlf ZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19pKTsKICAgICAg ICAgICAgICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAgIGlmICgwICE9 IF9fcCkgewogICAgICAgICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcCAtPiBfTV9m cmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIq KV9fcDsKICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBf X2k7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6ZSwgX19u b2JqcykpOwoKCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX1Nf ZW5kX2ZyZWUgPSAwOwogICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKW1hbGxvY19h bGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwoKCgogICAgICAgIH0KICAgICAgICBfU19o ZWFwX3NpemUgKz0gX19ieXRlc190b19nZXQ7CiAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFy dF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9jKF9f c2l6ZSwgX19ub2JqcykpOwogICAgfQp9CgoKCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBp bnQgX19pbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu c3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKewogICAgaW50IF9fbm9ianMgPSAyMDsKICAgIGNo YXIqIF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAgX09iaiogdm9s YXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgX09iaiogX19yZXN1bHQ7CiAgICBfT2JqKiBfX2N1 cnJlbnRfb2JqOwogICAgX09iaiogX19uZXh0X29iajsKICAgIGludCBfX2k7CgogICAgaWYgKDEg PT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmspOwogICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVl X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCiAgICAgIF9fcmVzdWx0ID0gKF9PYmoq KV9fY2h1bms7CiAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fbmV4dF9vYmogPSAoX09iaiopKF9f Y2h1bmsgKyBfX24pOwogICAgICBmb3IgKF9faSA9IDE7IDsgX19pKyspIHsKICAgICAgICBfX2N1 cnJlbnRfb2JqID0gX19uZXh0X29iajsKICAgICAgICBfX25leHRfb2JqID0gKF9PYmoqKSgoY2hh ciopX19uZXh0X29iaiArIF9fbik7CiAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkgewog ICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gMDsKICAgICAg ICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX19jdXJyZW50X29iaiAt PiBfTV9mcmVlX2xpc3RfbGluayA9IF9fbmV4dF9vYmo7CiAgICAgICAgfQogICAgICB9CiAgICBy ZXR1cm4oX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Ym9vbCB0aHJlYWRzLCBpbnQgaW5zdD4Kdm9p ZCoKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMsIGluc3Q+OjpyZWFsbG9jYXRlKHZv aWQqIF9fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX29sZF9zeiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX25ld19zeikKewogICAgdm9pZCogX19yZXN1bHQ7CiAg ICBzaXplX3QgX19jb3B5X3N6OwoKICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllU RVMgJiYgX19uZXdfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJuKHJl YWxsb2MoX19wLCBfX25ld19zeikpOwogICAgfQogICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xkX3N6 KSA9PSBfU19yb3VuZF91cChfX25ld19zeikpIHJldHVybihfX3ApOwogICAgX19yZXN1bHQgPSBh bGxvY2F0ZShfX25ld19zeik7CiAgICBfX2NvcHlfc3ogPSBfX25ld19zeiA+IF9fb2xkX3N6PyBf X29sZF9zeiA6IF9fbmV3X3N6OwogICAgbWVtY3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9zeik7 CiAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgcmV0dXJuKF9fcmVzdWx0KTsKfQoK CiAgICB0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBfU1RMX211dGV4 X2xvY2sKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9T X25vZGVfYWxsb2NhdG9yX2xvY2sKICAgICAgICA9IHsgMCB9OwoKCgp0ZW1wbGF0ZSA8Ym9vbCBf X3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro cmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0X2ZyZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJl YWRzLCBpbnQgX19pbnN0PgpjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz LCBfX2luc3Q+OjpfU19lbmRfZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGlu dCBfX2luc3Q+CnNpemVfdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu c3Q+OjpfU19oZWFwX3NpemUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19p bnN0Pgp0eXBlbmFtZSBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ OjpfT2JqKiB2b2xhdGlsZQpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu c3Q+IDo6X1NfZnJlZV9saXN0WwogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk cywgX19pbnN0Pjo6X05GUkVFTElTVFMKXSA9IHswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw LCAwLCAwLCAwLCAwLCAwLCAwLCB9OwojIDU1NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFsbG9jYXRvciB7CiAgdHlw ZWRlZiBhbGxvYyBfQWxsb2M7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAg dHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVy OwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZl cmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9U cCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAg ICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9OwoKICBhbGxvY2F0b3IoKSB0aHJv dygpIHt9CiAgYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvciYpIHRocm93KCkge30KICB0ZW1wbGF0 ZSA8Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkg e30KICB+YWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNl IF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25z dF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKCiAgX1RwKiBhbGxvY2F0 ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMCA/ IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQog ICAgICAgICAgICAgICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBf X3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNp emVvZihfVHApKTsgfQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpCiAgICB7 IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9p bnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZv aWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8Pgpj bGFzcyBhbGxvY2F0b3I8dm9pZD4gewpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBl OwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqIHBv aW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9p ZCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAg ICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFz cyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8 X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxs b2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0K IyA2MzEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfX2FsbG9jYXRvciB7CiAgX0FsbG9jIF9f dW5kZXJseWluZ19hbGxvYzsKCiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYg cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBl ZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwog IHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgdmFsdWVf dHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRl ZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07CgogIF9fYWxsb2NhdG9yKCkg dGhyb3coKSB7fQogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yJiBfX2EpIHRocm93KCkK ICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgdGVt cGxhdGUgPGNsYXNzIF9UcDE+CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwg X0FsbG9jPiYgX19hKSB0aHJvdygpCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRl cmx5aW5nX2FsbG9jKSB7fQogIH5fX2FsbG9jYXRvcigpIHRocm93KCkge30KCiAgcG9pbnRlciBh ZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2lu dGVyIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoK CiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJl dHVybiBfX24gIT0gMAogICAgICAgID8gc3RhdGljX2Nhc3Q8X1RwKj4oX191bmRlcmx5aW5nX2Fs bG9jLmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSkKICAgICAgICA6IDA7CiAgfQoKCiAgdm9p ZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfX3VuZGVybHlp bmdfYWxsb2MuZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICBzaXplX3R5 cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6 ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192 YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkg eyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgX19hbGxv Y2F0b3I8dm9pZCwgX0FsbG9jPiB7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVk ZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAg dHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90 eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVm IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKfTsKCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9j YXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19h bGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5n X2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0b3I8 X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2Nh dG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxv YyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKCgoKCnRlbXBsYXRlIDxpbnQgaW5zdD4K aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0 PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8 aW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxpbnQgX19pbnN0PgppbmxpbmUg Ym9vbCBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mLAog ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z dD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUg Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJuIHRydWU7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgZGVi dWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdfYWxs b2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0KIyA3NjEgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2Nh dG9yPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu Y2VsZXNzID0gZmFsc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSBy ZWJpbmQ8X1RwPjo6b3RoZXIgYWxsb2NhdG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfQWxsb2NhdG9yPgpjb25zdCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2Nh dG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAx PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIGFsbG9jYXRvcjxfVHAxPiA+CnsKICBzdGF0aWMg Y29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9j PF9UcCwgYWxsb2M+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2Nh dG9yX3R5cGU7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGludCBfX2luc3Q+CnN0cnVjdCBf QWxsb2NfdHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+CnsKICBz dGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxl X2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBl OwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu c3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3Ro cmVhZHMsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2Fs bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBf U19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZh dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2Nf dHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl PF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwg ZGVidWdfYWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl c3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9j PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxf QWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfVHAxLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAg ICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z dD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5 cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+ IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190 ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFp dHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Rociwg X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7 CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190 aHIsX19pbnN0PiA+CiAgICAgICAgICBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9y PF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAg YWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgY2xh c3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIGRl YnVnX2FsbG9jPF9BbGxvYz4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl c3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgZGVidWdfYWxsb2M8X0FsbG9j PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBkZWJ1Z19hbGxvYzxf QWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07Cgp9CiMgNTEgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf Y29uc3RydWN0LmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0 cnVjdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9uZXciIDEgMwojIDY0ICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoj IDc2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCnRlbXBsYXRl IDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHZvaWQgX0NvbnN0cnVjdChfVDEqIF9fcCwg Y29uc3QgX1QyJiBfX3ZhbHVlKSB7Cm5ldyAoKHZvaWQqKSBfX3ApIF9UMShfX3ZhbHVlKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZvaWQgX0NvbnN0cnVjdChfVDEqIF9fcCkgewog IG5ldyAoKHZvaWQqKSBfX3ApIF9UMSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUg dm9pZCBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikgewogIF9fcG9pbnRlci0+fl9UcCgpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZApfX2Rlc3Ryb3lfYXV4KF9Gb3J3 YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlw ZSkKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGRlc3Ryb3ko JipfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2 b2lkIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190 cnVlX3R5cGUpIHt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1Rw PgppbmxpbmUgdm9pZApfX2Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXJhdG9yIF9fbGFzdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0 czxfVHA+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICBfVHJpdmlhbF9kZXN0cnVj dG9yOwogIF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfVHJpdmlhbF9kZXN0cnVjdG9y KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgX0Rl c3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkg ewogIF9fZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0K CmlubGluZSB2b2lkIF9EZXN0cm95KGNoYXIqLCBjaGFyKikge30KaW5saW5lIHZvaWQgX0Rlc3Ry b3koaW50KiwgaW50Kikge30KaW5saW5lIHZvaWQgX0Rlc3Ryb3kobG9uZyosIGxvbmcqKSB7fQpp bmxpbmUgdm9pZCBfRGVzdHJveShmbG9hdCosIGZsb2F0Kikge30KaW5saW5lIHZvaWQgX0Rlc3Ry b3koZG91YmxlKiwgZG91YmxlKikge30KaW5saW5lIHZvaWQgX0Rlc3Ryb3kod2NoYXJfdCosIHdj aGFyX3QqKSB7fQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgdm9p ZCBjb25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkgewogIF9Db25zdHJ1Y3Qo X19wLCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZvaWQgY29uc3Ry dWN0KF9UMSogX19wKSB7CiAgX0NvbnN0cnVjdChfX3ApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgppbmxpbmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX0Rlc3Ryb3koX19wb2lu dGVyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIGRl c3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkg ewogIF9EZXN0cm95KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCn0KIyA1MiAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDUzICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X3RlbXBidWYuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1 Zi5oIiAzCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KcGFpcjxfVHAqLCBw dHJkaWZmX3Q+Cl9fZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQp7 CiAgaWYgKF9fbGVuID4gcHRyZGlmZl90KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICBf X2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewog ICAgX1RwKiBfX3RtcCA9IChfVHAqKSBtYWxsb2MoKHNpemVfdClfX2xlbiAqIHNpemVvZihfVHAp KTsKICAgIGlmIChfX3RtcCAhPSAwKQogICAgICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+ KF9fdG1wLCBfX2xlbik7CiAgICBfX2xlbiAvPSAyOwogIH0KCiAgcmV0dXJuIHBhaXI8X1RwKiwg cHRyZGlmZl90PigoX1RwKikwLCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHBh aXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4p IHsKICByZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9CgoK CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9UcCosIHB0cmRpZmZfdD4gZ2V0 X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKSB7CiAgcmV0dXJuIF9fZ2V0 X3RlbXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U cD4Kdm9pZCByZXR1cm5fdGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkgewogIGZyZWUoX19wKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KY2xhc3MgX1Rl bXBvcmFyeV9idWZmZXIgewpwcml2YXRlOgogIHB0cmRpZmZfdCBfTV9vcmlnaW5hbF9sZW47CiAg cHRyZGlmZl90IF9NX2xlbjsKICBfVHAqIF9NX2J1ZmZlcjsKCiAgdm9pZCBfTV9hbGxvY2F0ZV9i dWZmZXIoKSB7CiAgICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47CiAgICBfTV9idWZmZXIgPSAw OwoKICAgIGlmIChfTV9sZW4gPiAocHRyZGlmZl90KSgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkp KQogICAgICBfTV9sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9N X2xlbiA+IDApIHsKICAgICAgX01fYnVmZmVyID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXpl b2YoX1RwKSk7CiAgICAgIGlmIChfTV9idWZmZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xl biAvPSAyOwogICAgfQogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAm LCBfX3RydWVfdHlwZSkge30KICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYg dmFsLCBfX2ZhbHNlX3R5cGUpIHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwg X01fbGVuLCB2YWwpOwogIH0KCnB1YmxpYzoKICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0 dXJuIF9NX2xlbjsgfQogIHB0cmRpZmZfdCByZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0IHsgcmV0dXJu IF9NX29yaWdpbmFsX2xlbjsgfQogIF9UcCogYmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0K ICBfVHAqIGVuZCgpIHsgcmV0dXJuIF9NX2J1ZmZlciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5 X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0 KSB7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFs X2RlZmF1bHRfY29uc3RydWN0b3IKICAgICAgICAgICAgX1RyaXZpYWw7CgogICAgdHJ5IHsKICAg ICAgX01fbGVuID0gMDsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfTV9sZW4pOwog ICAgICBfTV9hbGxvY2F0ZV9idWZmZXIoKTsKICAgICAgaWYgKF9NX2xlbiA+IDApCiAgICAgICAg X01faW5pdGlhbGl6ZV9idWZmZXIoKl9fZmlyc3QsIF9Ucml2aWFsKCkpOwogICAgfQogICAgY2F0 Y2goLi4uKSB7IGZyZWUoX01fYnVmZmVyKTsgX01fYnVmZmVyID0gMDsgX01fbGVuID0gMDsgdGhy b3c7IH07CiAgfQoKICB+X1RlbXBvcmFyeV9idWZmZXIoKSB7CiAgICBkZXN0cm95KF9NX2J1ZmZl ciwgX01fYnVmZmVyICsgX01fbGVuKTsKICAgIGZyZWUoX01fYnVmZmVyKTsKICB9Cgpwcml2YXRl OgoKICBfVGVtcG9yYXJ5X2J1ZmZlcihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9CiAgdm9p ZCBvcGVyYXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQp9OwoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwKICAgICAgICAgIGNsYXNzIF9UcAogICAgICAgICAgICAg ICAgICAgID0gdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1 ZV90eXBlCiAgICAgICAgID4Kc3RydWN0IHRlbXBvcmFyeV9idWZmZXIgOiBwdWJsaWMgX1RlbXBv cmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgp7CiAgdGVtcG9yYXJ5X2J1ZmZlcihf Rm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgOiBf VGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+KF9fZmlyc3QsIF9fbGFzdCkg e30KICB+dGVtcG9yYXJ5X2J1ZmZlcigpIHt9Cn07Cgp9CiMgNTQgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF91bmluaXRpYWxpemVkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nz dHJpbmcuaCIgMSAzCiMgNjQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFs aXplZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxp emVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwg X19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJ dGVyPgpfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy ZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCnsK ICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgewogICAgZm9yICggOyBfX2Zp cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19j dXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBfX2N1cjsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0 cm95KF9fcmVzdWx0LCBfX2N1cik7IHRocm93OyB9Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVy Cl9fdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX1RwKikKewog IHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+Ojppc19QT0RfdHlwZSBfSXNfUE9E OwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jl c3VsdCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9G b3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgogIHVuaW5pdGlhbGl6ZWRfY29weShfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBf Rm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHkoX19m aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192 YWx1ZV90eXBlKF9fcmVzdWx0KSk7Cn0KCmlubGluZSBjaGFyKiB1bmluaXRpYWxpemVkX2NvcHko Y29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hhciogX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIqIF9fcmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19m aXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9f Zmlyc3QpOwp9CgppbmxpbmUgd2NoYXJfdCoKdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IHdjaGFy X3QqIF9fZmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIHdj aGFyX3QqIF9fcmVzdWx0KQp7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKHdj aGFyX3QpICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0 IC0gX19maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXpl LCBjbGFzcyBfRm9yd2FyZEl0ZXI+CnBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgpfX3Vu aW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAg ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAg ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19y ZXN1bHQ7CiAgdHJ5IHsKICAgIGZvciAoIDsgX19jb3VudCA+IDAgOyAtLV9fY291bnQsICsrX19m aXJzdCwgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICBy ZXR1cm4gcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fY3VyKTsKICB9 CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7IHRocm93OyB9Owp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9y d2FyZEl0ZXI+CmlubGluZSBwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9f dW5pbml0aWFsaXplZF9jb3B5X24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1NpemUgX19j b3VudCwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAg ICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1cm4gcGFpcjxfUmFu ZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPigKICAgICAgICAgICAgICAgICBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1 bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBf Rm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmlu aXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAg ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBfX3VuaW5p dGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4K aW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgp1bmluaXRpYWxpemVkX2NvcHlf bihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9u KF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191bmluaXRpYWxpemVkX2ZpbGxf YXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQp7CiAgZmlsbChfX2Zp cnN0LCBfX2xhc3QsIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz IF9UcD4Kdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm IF9feCwgX19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICB0 cnkgewogICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCiAgICAgIF9Db25zdHJ1 Y3QoJipfX2N1ciwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fZmlyc3QsIF9f Y3VyKTsgdGhyb3c7IH07Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9U cCwgY2xhc3MgX1RwMT4KaW5saW5lIHZvaWQgX191bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl ciBfX2xhc3QsIGNvbnN0IF9UcCYgX194LCBfVHAxKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190 eXBlX3RyYWl0czxfVHAxPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICBfX3VuaW5pdGlhbGl6ZWRf ZmlsbF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7Cgp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIHVuaW5pdGlhbGl6ZWRf ZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBfVHAmIF9feCkKewogIF9fdW5pbml0aWFsaXplZF9maWxsKF9fZmlyc3QsIF9fbGFzdCwgX194 LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRp YWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0 dXJuIGZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6 ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQp7CiAgX0Zvcndh cmRJdGVyIF9fY3VyID0gX19maXJzdDsKICB0cnkgewogICAgZm9yICggOyBfX24gPiAwOyAtLV9f biwgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgcmV0dXJuIF9f Y3VyOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOyB0aHJvdzsg fTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9U cCwgY2xhc3MgX1RwMT4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9u KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX194LCBfVHAxKikK ewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6aXNfUE9EX3R5cGUgX0lz X1BPRDsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19maXJzdCwgX19uLCBf X3gsIF9Jc19QT0QoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9T aXplLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKdW5pbml0aWFsaXplZF9maWxsX24o X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gpCnsKICByZXR1 cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCwgX192YWx1ZV90eXBl KF9fZmlyc3QpKTsKfQojIDI2MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRp YWxpemVkLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy MiwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXpl ZF9jb3B5X2NvcHkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0 KQp7CiAgX0ZvcndhcmRJdGVyIF9fbWlkID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBf X2xhc3QxLCBfX3Jlc3VsdCk7CiAgdHJ5IHsKICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHko X19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9f cmVzdWx0LCBfX21pZCk7IHRocm93OyB9Owp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9JbnB1dEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191 bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRl ciBfX21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwKICAgICAg ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 KQp7CiAgdW5pbml0aWFsaXplZF9maWxsKF9fcmVzdWx0LCBfX21pZCwgX194KTsKICB0cnkgewog ICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbWlkKTsKICB9 CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7IHRocm93OyB9Owp9CgoK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf VHA+CmlubGluZSB2b2lkCl9fdW5pbml0aWFsaXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBfX2Zp cnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsKICBfRm9yd2FyZEl0ZXIgX19taWQyID0gdW5pbml0 aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CiAgdHJ5IHsKICAgIHVu aW5pdGlhbGl6ZWRfZmlsbChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAgfQogIGNhdGNoKC4uLikg eyBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQyKTsgdGhyb3c7IH07Cn0KCn0KIyA1NSAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnRl bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CmNsYXNzIHJhd19zdG9y YWdlX2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Gb3J3YXJkSXRlcmF0b3IgX01faXRlcjsKcHVi bGljOgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0 eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwog IHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxp Y2l0IHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9Gb3J3YXJkSXRlcmF0b3IgX194KSA6IF9NX2l0ZXIo X194KSB7fQogIHJhd19zdG9yYWdlX2l0ZXJhdG9yJiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhp czsgfQogIHJhd19zdG9yYWdlX2l0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX2VsZW1l bnQpIHsKICAgIGNvbnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxlbWVudCk7CiAgICByZXR1cm4gKnRo aXM7CiAgfQogIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4mIG9w ZXJhdG9yKysoKSB7CiAgICArK19NX2l0ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIHJhd19z dG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4gb3BlcmF0b3IrKyhpbnQpIHsK ICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4gX190bXAgPSAq dGhpczsKICAgICsrX01faXRlcjsKICAgIHJldHVybiBfX3RtcDsKICB9Cn07CgoKfQojIDU2ICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKCm5hbWVzcGFjZSBzdGQK ewoKIHRlbXBsYXRlPGNsYXNzIF9UcDE+IHN0cnVjdCBhdXRvX3B0cl9yZWYgewogICBfVHAxKiBf TV9wdHI7CiAgIGF1dG9fcHRyX3JlZihfVHAxKiBfX3ApIDogX01fcHRyKF9fcCkge30KfTsKCnRl bXBsYXRlIDxjbGFzcyBfVHA+IGNsYXNzIGF1dG9fcHRyIHsKcHJpdmF0ZToKICBfVHAqIF9NX3B0 cjsKCnB1YmxpYzoKICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5cGU7CgogIGV4cGxpY2l0IGF1dG9f cHRyKF9UcCogX19wID0gMCkgdGhyb3coKSA6IF9NX3B0cihfX3ApIHt9CiAgYXV0b19wdHIoYXV0 b19wdHImIF9fYSkgdGhyb3coKSA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7fQoKICB0ZW1wbGF0 ZSA8Y2xhc3MgX1RwMT4gYXV0b19wdHIoYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKQogICAg OiBfTV9wdHIoX19hLnJlbGVhc2UoKSkge30KCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0 ciYgX19hKSB0aHJvdygpIHsKICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAgcmV0dXJuICp0 aGlzOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgYXV0b19wdHImIG9wZXJhdG9yPShh dXRvX3B0cjxfVHAxPiYgX19hKSB0aHJvdygpIHsKICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwog ICAgcmV0dXJuICp0aGlzOwogIH0KCgoKCgogIH5hdXRvX3B0cigpIHsgZGVsZXRlIF9NX3B0cjsg fQoKICBfVHAmIG9wZXJhdG9yKigpIGNvbnN0IHRocm93KCkgewogICAgcmV0dXJuICpfTV9wdHI7 CiAgfQogIF9UcCogb3BlcmF0b3ItPigpIGNvbnN0IHRocm93KCkgewogICAgcmV0dXJuIF9NX3B0 cjsKICB9CiAgX1RwKiBnZXQoKSBjb25zdCB0aHJvdygpIHsKICAgIHJldHVybiBfTV9wdHI7CiAg fQogIF9UcCogcmVsZWFzZSgpIHRocm93KCkgewogICAgX1RwKiBfX3RtcCA9IF9NX3B0cjsKICAg IF9NX3B0ciA9IDA7CiAgICByZXR1cm4gX190bXA7CiAgfQogIHZvaWQgcmVzZXQoX1RwKiBfX3Ag PSAwKSB0aHJvdygpIHsKICAgIGlmIChfX3AgIT0gX01fcHRyKSB7CiAgICAgIGRlbGV0ZSBfTV9w dHI7CiAgICAgIF9NX3B0ciA9IF9fcDsKICAgIH0KICB9CgoKCgoKcHVibGljOgogIGF1dG9fcHRy KGF1dG9fcHRyX3JlZjxfVHA+IF9fcmVmKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX3JlZi5fTV9w dHIpIHt9CgogIGF1dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRo cm93KCkgewogICAgaWYgKF9fcmVmLl9NX3B0ciAhPSB0aGlzLT5nZXQoKSkgewogICAgICBkZWxl dGUgX01fcHRyOwogICAgICBfTV9wdHIgPSBfX3JlZi5fTV9wdHI7CiAgICB9CiAgICByZXR1cm4g KnRoaXM7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gb3BlcmF0b3IgYXV0b19wdHJfcmVm PF9UcDE+KCkgdGhyb3coKQogICAgeyByZXR1cm4gYXV0b19wdHJfcmVmPF9UcD4odGhpcy0+cmVs ZWFzZSgpKTsgfQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBvcGVyYXRvciBhdXRvX3B0cjxfVHAx PigpIHRocm93KCkKICAgIHsgcmV0dXJuIGF1dG9fcHRyPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7 IH0KfTsKCn0KIyA0NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAz CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDQ1ICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAxICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyA0NiAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Jh c2ljX3N0cmluZy5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0 cmluZy5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0 cy9hdG9taWNpdHkuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51 eC1nbnUvYml0cy9hdG9taWNpdHkuaCIgMwp0eXBlZGVmIGludCBfQXRvbWljX3dvcmQ7CgpzdGF0 aWMgaW5saW5lIF9BdG9taWNfd29yZApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fZXhj aGFuZ2VfYW5kX2FkZCAodm9sYXRpbGUgX0F0b21pY193b3JkICpfX21lbSwgaW50IF9fdmFsKQp7 CiAgcmVnaXN0ZXIgX0F0b21pY193b3JkIF9fcmVzdWx0OwogIF9fYXNtX18gX192b2xhdGlsZV9f ICgibG9jazsgeGFkZGwgJTAsJTIiCiAgICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAoX19y ZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgICAgIDogIjAiIChfX3ZhbCksICJtIiAoKl9fbWVt KQogICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICByZXR1cm4gX19yZXN1bHQ7 Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fYXRv bWljX2FkZCAodm9sYXRpbGUgX0F0b21pY193b3JkKiBfX21lbSwgaW50IF9fdmFsKQp7CiAgX19h c21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBhZGRsICUwLCUxIgogICAgICAgICAgICAgICAgICAg ICAgICA6IDogImlyIiAoX192YWwpLCAibSIgKCpfX21lbSkgOiAibWVtb3J5Iik7Cn0KCnN0YXRp YyBpbmxpbmUgY2hhcgpfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fY29tcGFyZV9hbmRf c3dhcCAodm9sYXRpbGUgbG9uZyogX19wLCBsb25nIF9fb2xkdmFsLCBsb25nIF9fbmV3dmFsKQp7 CiAgY2hhciBfX3JldDsKICBsb25nIF9fcmVhZHZhbDsKCiAgX19hc21fXyBfX3ZvbGF0aWxlX18g KCJsb2NrOyBjbXB4Y2hnbCAlMywgJTE7IHNldGUgJTAiCiAgICAgICAgICAgICAgICAgICAgICAg IDogIj1xIiAoX19yZXQpLCAiPW0iICgqX19wKSwgIj1hIiAoX19yZWFkdmFsKQogICAgICAgICAg ICAgICAgICAgICAgICA6ICJyIiAoX19uZXd2YWwpLCAibSIgKCpfX3ApLCAiYSIgKF9fb2xkdmFs KSk7CiAgcmV0dXJuIF9fcmV0Owp9CiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNp Y19zdHJpbmcuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA4MyAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBiYXNpY19zdHJpbmcKICAg IHsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgdHlw ZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j OjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlm ZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxs b2M6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpj b25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9B bGxvYzo6cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29u c3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9y PHBvaW50ZXIsIGJhc2ljX3N0cmluZz4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX19ub3JtYWxf aXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgYmFzaWNfc3RyaW5nPiBjb25zdF9pdGVyYXRvcjsKICAg ICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNl X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVy c2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKIyAxMTggIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICBzdHJ1Y3QgX1JlcAogICAgICB7CgogICAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8Y2hhcj46Om90aGVyIF9SYXdf Ynl0ZXNfYWxsb2M7CiMgMTM2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5n LmgiIDMKICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90eXBlIF9TX21heF9zaXplOwogICAgICAg IHN0YXRpYyBjb25zdCBfQ2hhclQgX1NfdGVybWluYWw7CgogICAgICAgIHNpemVfdHlwZSBfTV9s ZW5ndGg7CiAgICAgICAgc2l6ZV90eXBlIF9NX2NhcGFjaXR5OwogICAgICAgIF9BdG9taWNfd29y ZCBfTV9yZWZlcmVuY2VzOwoKICAgICAgICBib29sCiAgICAgICAgX01faXNfbGVha2VkKCkgY29u c3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzIDwgMDsgfQoKICAgICAgICBib29sCiAg ICAgICAgX01faXNfc2hhcmVkKCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2Vz ID4gMDsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X2xlYWtlZCgpCiAgICAgICAgeyBf TV9yZWZlcmVuY2VzID0gLTE7IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9NX3NldF9zaGFyYWJs ZSgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gMDsgfQoKICAgICAgICBfQ2hhclQqCiAgICAg ICAgX01fcmVmZGF0YSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiByZWludGVycHJldF9jYXN0 PF9DaGFyVCo+ICh0aGlzICsgMSk7IH0KCiAgICAgICAgX0NoYXJUJgogICAgICAgIG9wZXJhdG9y W10oc2l6ZV90IF9fcykgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIF9NX3JlZmRhdGEoKSBbX19z XTsgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fZ3JhYihjb25zdCBfQWxsb2MmIF9fYWxs b2MxLCBjb25zdCBfQWxsb2MmIF9fYWxsb2MyKQogICAgICAgIHsgcmV0dXJuICghX01faXNfbGVh a2VkKCkgJiYgX19hbGxvYzEgPT0gX19hbGxvYzIpID8KICAgICAgICAgICAgX01fcmVmY29weSgp IDogX01fY2xvbmUoX19hbGxvYzEpOyB9CgoKICAgICAgICBzdGF0aWMgX1JlcCoKICAgICAgICBf U19jcmVhdGUoc2l6ZV90LCBjb25zdCBfQWxsb2MmKTsKCiAgICAgICAgdm9pZAogICAgICAgIF9N X2Rpc3Bvc2UoY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fZXhj aGFuZ2VfYW5kX2FkZCgmX01fcmVmZXJlbmNlcywgLTEpIDw9IDApCiAgICAgICAgICAgIF9NX2Rl c3Ryb3koX19hKTsKICAgICAgICB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9kZXN0cm95KGNv bnN0IF9BbGxvYyYpIHRocm93KCk7CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZjb3B5 KCkgdGhyb3coKQogICAgICAgIHsKICAgICAgICAgIF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNl cywgMSk7CiAgICAgICAgICByZXR1cm4gX01fcmVmZGF0YSgpOwogICAgICAgIH0KCiAgICAgICAg X0NoYXJUKgogICAgICAgIF9NX2Nsb25lKGNvbnN0IF9BbGxvYyYsIHNpemVfdHlwZSBfX3JlcyA9 IDApOwojIDIwOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAg ICAgICAgaW5saW5lIHN0YXRpYyBib29sCiAgICAgICAgX1NfZXhjZXNzX3Nsb3Aoc2l6ZV90LCBz aXplX3QpOwoKICAgICAgfTsKCgogICAgICBzdHJ1Y3QgX0FsbG9jX2hpZGVyIDogX0FsbG9jCiAg ICAgIHsKICAgICAgICBfQWxsb2NfaGlkZXIoX0NoYXJUKiBfX2RhdCwgY29uc3QgX0FsbG9jJiBf X2EpCiAgICAgICAgOiBfQWxsb2MoX19hKSwgX01fcChfX2RhdCkgeyB9CgogICAgICAgIF9DaGFy VCogX01fcDsKICAgICAgfTsKCiAgICBwdWJsaWM6CgoKCiAgICAgIHN0YXRpYyBjb25zdCBzaXpl X3R5cGUgbnBvcyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpOwoKICAgIHByaXZhdGU6Cgog ICAgICBtdXRhYmxlIF9BbGxvY19oaWRlciBfTV9kYXRhcGx1czsKCgoKICAgICAgc3RhdGljIHNp emVfdHlwZSBfU19lbXB0eV9yZXBfc3RvcmFnZVsoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFy VCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCiAgICAgIF9D aGFyVCoKICAgICAgX01fZGF0YSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGFwbHVzLl9N X3A7IH0KCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0YShfQ2hhclQqIF9fcCkKICAgICAgeyBy ZXR1cm4gKF9NX2RhdGFwbHVzLl9NX3AgPSBfX3ApOyB9CgogICAgICBfUmVwKgogICAgICBfTV9y ZXAoKSBjb25zdAogICAgICB7IHJldHVybiAmKChyZWludGVycHJldF9jYXN0PF9SZXAqPiAoX01f ZGF0YSgpKSlbLTFdKTsgfQoKCgogICAgICBpdGVyYXRvcgogICAgICBfTV9pYmVnaW4oKSBjb25z dCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBf TV9pZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgp KTsgfQoKICAgICAgdm9pZAogICAgICBfTV9sZWFrKCkKICAgICAgewogICAgICAgIGlmICghX01f cmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgICAgX01fbGVha19oYXJkKCk7CiAgICAgIH0K CiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2NoZWNrKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAg ICAgewogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3df b3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Ol9NX2NoZWNrIik7CiAgICAgICAgcmV0dXJuIF9N X2liZWdpbigpICsgX19wb3M7CiAgICAgIH0KCgogICAgICBpdGVyYXRvcgogICAgICBfTV9mb2xk KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fb2ZmKSBjb25zdAogICAgICB7CiAgICAgICAg Ym9vbCBfX3Rlc3RvZmYgPSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHNp emVfdHlwZSBfX25ld29mZiA9IF9fdGVzdG9mZiA/IF9fb2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19w b3M7CiAgICAgICAgcmV0dXJuIChfTV9pYmVnaW4oKSArIF9fcG9zICsgX19uZXdvZmYpOwogICAg ICB9CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4KICAgICAgICBzdGF0aWMgdm9p ZAogICAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9JdGVyYXRvciBfX2sxLCBfSXRl cmF0b3IgX19rMikKICAgICAgICB7CiAgICAgICAgICBmb3IgKDsgX19rMSAhPSBfX2syOyArK19f azEsICsrX19wKQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3AsICpfX2sxKTsK ICAgICAgICB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCog X19wLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMo X19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAg ICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9p dGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19r Mi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFy VCogX19wLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6 Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAg X1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hh clQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19r MSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90 eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMik7CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWtf aGFyZCgpOwoKICAgICAgc3RhdGljIF9SZXAmCiAgICAgIF9TX2VtcHR5X3JlcCgpCiAgICAgIHsg cmV0dXJuICpyZWludGVycHJldF9jYXN0PF9SZXAqPigmX1NfZW1wdHlfcmVwX3N0b3JhZ2UpOyB9 CgogICAgcHVibGljOgoKCgoKICAgICAgaW5saW5lCiAgICAgIGJhc2ljX3N0cmluZygpOwoKICAg ICAgZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKTsKCgogICAg ICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CiAgICAgIGJhc2ljX3N0 cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAg ICAgICAgICAgICBzaXplX3R5cGUgX19uID0gbnBvcyk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25z dCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAg ICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgICBiYXNpY19zdHJpbmco Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sCiAgICAgICAgICAgICAgICAgICBjb25z dCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFy VCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5n KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkp OwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3Ry aW5nKF9JbnB1dEl0ZXJhdG9yIF9fYmVnaW4sIF9JbnB1dEl0ZXJhdG9yIF9fZW5kLAogICAgICAg ICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIH5iYXNp Y19zdHJpbmcoKQogICAgICB7IF9NX3JlcCgpLT5fTV9kaXNwb3NlKHRoaXMtPmdldF9hbGxvY2F0 b3IoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KGNvbnN0IGJhc2lj X3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0cik7IH0KCiAgICAgIGJh c2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0 aGlzLT5hc3NpZ24oX19zKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0o X0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXNzaWduKDEsIF9fYyk7IH0KCgogICAgICBpdGVy YXRvcgogICAgICBiZWdpbigpCiAgICAgIHsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0 dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAg ICAgIGJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgp KTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZW5kKCkKICAgICAgewogICAgICAgICBfTV9sZWFr KCk7CiAgICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOwog ICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBlbmQoKSBjb25zdAogICAgICB7IHJl dHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9CgogICAgICBy ZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRl cmF0b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAg IHJiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhp cy0+ZW5kKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKQogICAgICB7 IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9CgogICAgICBjb25zdF9y ZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9y ZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9CgogICAgcHVibGljOgoKICAgICAgc2l6 ZV90eXBlCiAgICAgIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9 CgogICAgICBzaXplX3R5cGUKICAgICAgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCkt Pl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QgeyBy ZXR1cm4gX1JlcDo6X1NfbWF4X3NpemU7IH0KCiAgICAgIHZvaWQKICAgICAgcmVzaXplKHNpemVf dHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBl IF9fbikgeyB0aGlzLT5yZXNpemUoX19uLCBfQ2hhclQoKSk7IH0KCiAgICAgIHNpemVfdHlwZQog ICAgICBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9jYXBhY2l0eTsgfQoK ICAgICAgdm9pZAogICAgICByZXNlcnZlKHNpemVfdHlwZSBfX3Jlc19hcmcgPSAwKTsKCiAgICAg IHZvaWQKICAgICAgY2xlYXIoKSB7IF9NX211dGF0ZSgwLCB0aGlzLT5zaXplKCksIDApOyB9Cgog ICAgICBib29sCiAgICAgIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+c2l6ZSgpID09IDA7 IH0KCgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXSAoc2l6ZV90eXBlIF9f cG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kYXRhKClbX19wb3NdOyB9CgogICAgICByZWZl cmVuY2UKICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19wb3MpCiAgICAgIHsKICAgICAgICBf TV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107CiAgICAgIH0KCiAgICAg IGNvbnN0X3JlZmVyZW5jZQogICAgICBhdChzaXplX3R5cGUgX19uKSBjb25zdAogICAgICB7CiAg ICAgICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9y YW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19uXTsK ICAgICAgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBfX24pCiAgICAgIHsK ICAgICAgICBpZiAoX19uID49IHNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl KCJiYXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBf TV9kYXRhKClbX19uXTsKICAgICAgfQoKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0 b3IrPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19z dHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgX0NoYXJU KiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MpOyB9CgogICAgICBiYXNpY19zdHJpbmcm CiAgICAgIG9wZXJhdG9yKz0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXBwZW5kKHNpemVf dHlwZSgxKSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3Qg YmFzaWNfc3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChj b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p OwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNp emVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgX0No YXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MsIHRyYWl0c190eXBlOjps ZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKHNpemVfdHlw ZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+ CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIGFwcGVuZChfSW5wdXRJdGVyYXRvciBfX2Zp cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFj ZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICAgICAgdm9pZAog ICAgICBwdXNoX2JhY2soX0NoYXJUIF9fYykKICAgICAgeyB0aGlzLT5yZXBsYWNlKF9NX2llbmQo KSwgX01faWVuZCgpLCAxLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2ln bihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg YXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90 eXBlIF9fbikKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIuX01fY2hl Y2soX19wb3MpLCBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pKTsKICAgICAgfQoKICAgICAgYmFz aWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24p CiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIF9fcyArIF9fbik7IH0KCiAgICAgIGJh c2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVy biB0aGlzLT5hc3NpZ24oX19zLCBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9Cgog ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihzaXplX3R5cGUgX19uLCBfQ2hhclQgX19j KQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9f biwgX19jKTsgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAg YmFzaWNfc3RyaW5nJgogICAgICAgIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w dXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVn aW4oKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAgIGlu c2VydChpdGVyYXRvciBfX3AsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsgdGhp cy0+cmVwbGFjZShfX3AsIF9fcCwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBf SW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkIGluc2VydChpdGVyYXRvciBfX3AsIF9JbnB1dEl0 ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2VuZCkKICAgICAgICB7IHRoaXMtPnJlcGxh Y2UoX19wLCBfX3AsIF9fYmVnLCBfX2VuZCk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg aW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAg IHsKICAgICAgICBpdGVyYXRvciBfX3AgPSBfTV9jaGVjayhfX3BvczEpOwogICAgICAgIHRoaXMt PnJlcGxhY2UoX19wLCBfX3AsIF9fc3RyLl9NX2liZWdpbigpLCBfX3N0ci5fTV9pZW5kKCkpOwog ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBp bnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAg ICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBp dGVyYXRvciBfX3AgPSBfTV9jaGVjayhfX3BvczEpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19w LCBfX3AsIF9fc3RyLl9NX2NoZWNrKF9fcG9zMiksCiAgICAgICAgICAgICAgICAgICAgICBfX3N0 ci5fTV9mb2xkKF9fcG9zMiwgX19uKSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9Cgog ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9D aGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgaXRlcmF0b3IgX19wID0g X01fY2hlY2soX19wb3MpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fcywgX19z ICsgX19uKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmlu ZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAg IHsgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvcywgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f cykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3Ms IHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbnNlcnQo X01fY2hlY2soX19wb3MpLCBfX24sIF9fYyk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9 CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfQ2hhclQgX19jID0g X0NoYXJUKCkpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVn aW4oKTsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBzaXplX3R5cGUoMSks IF9fYyk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1cm4g dGhpcy0+X01faWJlZ2luKCkgKyBfX3BvczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICBlcmFzZShzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykKICAg ICAgewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9s ZChfX3BvcywgX19uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9kYXRhKCksIF9N X2RhdGEoKSk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9f cG9zaXRpb24pCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19wb3NpdGlvbiAtIF9N X2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwgX19wb3NpdGlvbiAr IDEsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtl ZCgpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgaXRl cmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAg ICB7CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fZmlyc3QgLSBfTV9pYmVnaW4oKTsKICAgICAg ICB0aGlzLT5yZXBsYWNlKF9fZmlyc3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwog ICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICByZXR1cm4gX01faWJlZ2lu KCkgKyBfX2k7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXpl X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAg ICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2Zv bGQoX19wb3MsIF9fbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmJlZ2lu KCksIF9fc3RyLmVuZCgpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBs YWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcm IF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKTsK CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVf dHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgICBzaXplX3R5cGUgX19u MikKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwg X01fZm9sZChfX3BvcywgX19uMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBf X3MgKyBfX24yKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7 CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9f cG9zLCBfX24xKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIHRyYWl0 c190eXBlOjpsZW5ndGgoX19zKSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg cmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwg X0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNr KF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uMSksIF9fbjIsIF9fYyk7CiAgICAgIH0KCiAgICAg IGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2ky LCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNl KF9faTEsIF9faTIsIF9fc3RyLmJlZ2luKCksIF9fc3RyLmVuZCgpKTsgfQoKICAgICAgYmFzaWNf c3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQog ICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcywgX19zICsgX19uKTsg fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJh dG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNl KF9faTEsIF9faTIsIF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MgKyB0cmFp dHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxh Y2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9f Yyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19z dHJpbmcmCiAgICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAg ICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMSwgX0lucHV0SXRlcmF0b3IgX19rMikKICAg ICAgICB7IHJldHVybiBfTV9yZXBsYWNlKF9faTEsIF9faTIsIF9fazEsIF9fazIsCiAgICAgICAg ICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9j YXRlZ29yeSgpKTsgfQoKICAgIHByaXZhdGU6CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0 ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9y IF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyYXRvciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICAgICAgdGVt cGxhdGU8Y2xhc3MgX0Z3ZEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBf TV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9Gd2RJdGVyYXRvciBfX2sx LAogICAgICAgICAgICAgICAgICAgX0Z3ZEl0ZXJhdG9yIF9fazIsIGZvcndhcmRfaXRlcmF0b3Jf dGFnKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0No YXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2Vu ZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5 cGUpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0luSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CiAgICAgICAgICByZXR1cm4gX1NfY29u c3RydWN0KF9fYmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOwogICAgICAgIH0KCiAgICAgIHRlbXBs YXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25z dHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19h LAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICAgICAgewogICAgICAg ICAgcmV0dXJuIF9TX2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVnKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oX19lbmQp LCBfX2EpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAg c3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRl ciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAg ICAgIHJldHVybiBfU19jb25zdHJ1Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19hLCBfSW50ZWdyYWwo KSk7CiAgICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3Rh dGljIF9DaGFyVCoKICAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIg X19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl cmF0b3JfdGFnKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+CiAgICAgICAgc3Rh dGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0ZXIgX19lbmQsIF9Gd2RJdGVy IF9fYmVnLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9p dGVyYXRvcl90YWcpOwoKICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgX1NfY29uc3RydWN0KHNp emVfdHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOwoKICAgIHB1Ymxp YzoKCiAgICAgIHNpemVfdHlwZQogICAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u LCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgc3dhcChiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MpOwoKCiAgICAgIGNvbnN0IF9D aGFyVCoKICAgICAgY19zdHIoKSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVfdHlwZSBfX24g PSB0aGlzLT5zaXplKCk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKClbX19u XSwgX1JlcDo6X1NfdGVybWluYWwpOwogICAgICAgIHJldHVybiBfTV9kYXRhKCk7CiAgICAgIH0K CiAgICAgIGNvbnN0IF9DaGFyVCoKICAgICAgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGEo KTsgfQoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsg cmV0dXJuIF9NX2RhdGFwbHVzOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBf Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAg IHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw ZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zdHIuZGF0YSgp LCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29u c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAg ICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkg Y29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ cmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90 eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVf dHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFy VCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5yZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBz aXplX3R5cGUKICAgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykg Y29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBiYXNpY19z dHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5maW5kX2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0K CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBz aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAg ICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDAp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBfX3BvcywgdHJh aXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmly c3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRf bGFzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9z KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zdHIuZGF0YSgpLCBf X3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9v Zihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25z dDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms IHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRf bGFzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBz aXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9 IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fYywgX19wb3MpOyB9Cgog ICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ ZmluZF9maXJzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoK ICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19z LCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24p IGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9D aGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5maW5kX2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykp OyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywg c2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9s YXN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBu cG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fc3RyLmRh dGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5k X2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CiAgICAgIHNpemVfdHlwZQogICAg ICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBu cG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fcywgX19w b3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBm aW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0 OwoKICAgICAgYmFzaWNfc3RyaW5nCiAgICAgIHN1YnN0cihzaXplX3R5cGUgX19wb3MgPSAwLCBz aXplX3R5cGUgX19uID0gbnBvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+IHRo aXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6 OnN1YnN0ciIpOwogICAgICAgIHJldHVybiBiYXNpY19zdHJpbmcoKnRoaXMsIF9fcG9zLCBfX24p OwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBiYXNpY19zdHJpbmcmIF9f c3RyKSBjb25zdAogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUo KTsKICAgICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBzaXpl X3R5cGUgX19sZW4gPSBtaW4oX19zaXplLCBfX29zaXplKTsKCiAgICAgICAgaW50IF9fciA9IHRy YWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBfX2xlbik7CiAgICAg ICAgaWYgKCFfX3IpCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAgICAgIHJl dHVybiBfX3I7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bv cywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7CgogICAg ICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29u c3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBz aXplX3R5cGUgX19uMikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hh clQqIF9fcykgY29uc3Q7CgoKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bv cywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCiAgICAgIGludAog ICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFy VCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsKCiAgfTsKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg YmFzaWNfc3RyaW5nKCkKICAgIDogX01fZGF0YXBsdXMoX1NfZW1wdHlfcmVwKCkuX01fcmVmY29w eSgpLCBfQWxsb2MoKSkgeyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChf X3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMs CiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4m IF9fcmhzKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgog ICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJh aXRzLF9BbGxvYz4mIF9fcmhzKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBf X3JocykKICAgIHsKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBf X3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0 cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fbGhzLCBfQ2hhclQgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAg X19zdHJpbmdfdHlwZSBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlw ZSgxKSwgX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y aHMpID09IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBf Q2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMp ID09IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAg Y29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09 IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNv bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyBy ZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s CiAgICBvcGVyYXRvciE9KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0 IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1 cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAg ICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4g X19saHMuY29tcGFyZShfX3JocykgIT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAg b3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f bGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQq IF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAwOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAg ICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhz KQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPiAwOyB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu bGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9f cmhzKSA+IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAg IGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+ IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IF9DaGFyVCog X19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8IDA7IH0K CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4g X19saHMuY29tcGFyZShfX3JocykgPD0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv cGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f bGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19s aHMuY29tcGFyZShfX3JocykgPD0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVy YXRvcjw9KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogIHsgcmV0dXJuIF9fcmhzLmNv bXBhcmUoX19saHMpID49IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y Pj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg ICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f cmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAg ICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykK ICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDw9IDA7IH0KCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s aW5lIHZvaWQKICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19saHMsCiAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f cmhzKQogICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JiBfX2lzLAogICAgICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3Ms CiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAg IGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9f ZGVsaW0pOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYK ICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAg ICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7Cn0KIyA0 NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCgoKIyAxICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAxIDMKIyA2MCAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDYyICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2FsZ29yaXRobS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2NvbnN0cnVjdC5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdv cml0aG0uaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxp emVkLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5o IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMg NjUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDEgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2hlYXAuaCIgMSAzCiMgNjIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaGVhcC5o IiAzCm5hbWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4Kdm9pZApfX3B1c2hfaGVhcChfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgX0Rpc3RhbmNlIF9faG9sZUluZGV4 LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUpCnsKICBfRGlzdGFuY2UgX19wYXJl bnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJ bmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkgPCBfX3ZhbHVlKSB7CiAgICAqKF9fZmlyc3Qg KyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICBfX2hvbGVJbmRleCA9 IF9fcGFyZW50OwogICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgfQogICoo X19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgppbmxpbmUgdm9p ZApfX3B1c2hfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfRGlzdGFuY2UqLCBfVHAqKQp7 CiAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEp LCBfRGlzdGFuY2UoMCksCiAgICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQKcHVzaF9oZWFw KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19s YXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CiAgX19wdXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX19k aXN0YW5jZV90eXBlKF9fZmlyc3QpLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9U cCwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkCl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nl c3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgIF9E aXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rp c3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIHdoaWxlIChfX2hvbGVJ bmRleCA+IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCArIF9fcGFyZW50KSwgX192YWx1 ZSkpIHsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50 KTsKICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRl eCAtIDEpIC8gMjsKICB9CiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAg ICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19wdXNoX2hl YXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wLAogICAgICAgICAgICAg ICAgX0Rpc3RhbmNlKiwgX1RwKikKewogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgo X19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgIF9UcCgq KF9fbGFzdCAtIDEpKSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCnB1c2hfaGVhcChfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CgogIF9fcHVzaF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCwKICAgICAgICAgICAg ICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2Us IGNsYXNzIF9UcD4Kdm9pZApfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp cnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVu LCBfVHAgX192YWx1ZSkKewogIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAg X0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogIHdoaWxlIChf X3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgIGlmICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxk KSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKQogICAgICBfX3NlY29uZENoaWxk LS07CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENo aWxkKTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgIF9fc2Vjb25kQ2hpbGQg PSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsKICB9CiAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19s ZW4pIHsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIChfX3NlY29u ZENoaWxkIC0gMSkpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICB9CiAg X19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9fdG9wSW5kZXgsIF9fdmFsdWUpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNz IF9EaXN0YW5jZT4KaW5saW5lIHZvaWQKX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBfRGlzdGFuY2UqKQp7CiAgKl9f cmVzdWx0ID0gKl9fZmlyc3Q7CiAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCks IF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX19wb3BfaGVh cF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9UcCopCnsKICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9f bGFzdCAtIDEsIF9fbGFzdCAtIDEsCiAgICAgICAgICAgICBfVHAoKihfX2xhc3QgLSAxKSksIF9f ZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz SXRlcmF0b3I+CmlubGluZSB2b2lkIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp cnN0LAogICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19w b3BfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsCiAg ICAgICAgICBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkCl9fYWRqdXN0X2hlYXAoX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAg ICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCnsK ICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogIF9EaXN0YW5jZSBfX3NlY29u ZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9f bGVuKSB7CiAgICBpZiAoX19jb21wKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpLCAqKF9fZmly c3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkpCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICoo X19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAg X19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19z ZWNvbmRDaGlsZCArIDEpOwogIH0KICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAg KihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAx KSk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogIH0KICBfX3B1c2hfaGVh cChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSwgX19jb21wKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBf Q29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQKX19wb3BfaGVh cChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f bGFzdCwKICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3Zh bHVlLCBfQ29tcGFyZSBfX2NvbXAsCiAgICAgICAgICAgX0Rpc3RhbmNlKikKewogICpfX3Jlc3Vs dCA9ICpfX2ZpcnN0OwogIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlz dGFuY2UoX19sYXN0IC0gX19maXJzdCksCiAgICAgICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXAp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNs YXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZApfX3BvcF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRl cmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz dCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3Qg LSAxLCBfX2xhc3QgLSAxLCBfVHAoKihfX2xhc3QgLSAxKSksIF9fY29tcCwKICAgICAgICAgICAg IF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZApwb3BfaGVhcChfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f bGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCiAgX19wb3BfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJz dCksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNs YXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkCl9fbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0 LCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47 CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19wYXJl bnQgPSAoX19sZW4gLSAyKS8yOwoKICB3aGlsZSAodHJ1ZSkgewogICAgX19hZGp1c3RfaGVhcChf X2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9UcCgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsKICAg IGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICBfX3BhcmVudC0tOwogIH0KfQoKdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQKbWFrZV9oZWFwKF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0 KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg X19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShf X2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S YW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfVHAs IGNsYXNzIF9EaXN0YW5jZT4Kdm9pZApfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgX0NvbXBh cmUgX19jb21wLCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAy KSByZXR1cm47CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfRGlzdGFu Y2UgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICB3aGlsZSAodHJ1ZSkgewogICAgX19hZGp1 c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9UcCgqKF9fZmlyc3QgKyBfX3BhcmVu dCkpLAogICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgaWYgKF9fcGFyZW50ID09IDApIHJl dHVybjsKICAgIF9fcGFyZW50LS07CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQKbWFrZV9oZWFwKF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f bGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCiAgX19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LCBfX2NvbXAsCiAgICAgICAgICAgICAg X192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgp2b2lkIHNvcnRfaGVhcChfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxl IChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+ CnZvaWQKc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAx KQogICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0sIF9fY29tcCk7Cn0KCn0KIyA2NCAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsK CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgX19tZWRpYW4oY29uc3Qg X1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYykKewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgaWYg KF9fYSA8IF9fYikKICAgIGlmIChfX2IgPCBfX2MpCiAgICAgIHJldHVybiBfX2I7CiAgICBlbHNl IGlmIChfX2EgPCBfX2MpCiAgICAgIHJldHVybiBfX2M7CiAgICBlbHNlCiAgICAgIHJldHVybiBf X2E7CiAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2Ig PCBfX2MpCiAgICByZXR1cm4gX19jOwogIGVsc2UKICAgIHJldHVybiBfX2I7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJgpfX21lZGlhbihj b25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBf X2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgaWYgKF9fY29tcChfX2EsIF9fYikp CiAgICBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgcmV0dXJuIF9fYjsKICAgIGVsc2UgaWYg KF9fY29tcChfX2EsIF9fYykpCiAgICAgIHJldHVybiBfX2M7CiAgICBlbHNlCiAgICAgIHJldHVy biBfX2E7CiAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgIHJldHVybiBfX2E7CiAgZWxz ZSBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgIHJldHVybiBfX2M7CiAgZWxzZQogICAgcmV0dXJu IF9fYjsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRnVuY3Rpb24+Cl9G dW5jdGlvbiBmb3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBf RnVuY3Rpb24gX19mKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19maXJzdCkKICAgIF9fZigqX19maXJzdCk7CiAgcmV0dXJuIF9fZjsKfQoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0lucHV0SXRlciBmaW5kKF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90 YWcpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgISgqX19maXJzdCA9PSBfX3ZhbCkp CiAgICArK19fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5kX2lmKF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl cmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmly c3QpKQogICAgKytfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgZmluZChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBy YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf UmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgID0gKF9f bGFzdCAtIF9fZmlyc3QpID4+IDI7CgogIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190 cmlwX2NvdW50KSB7CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0Owog ICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7 CiAgICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJz dDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2Zp cnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICBj YXNlIDM6CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytf X2ZpcnN0OwogIGNhc2UgMjoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmly c3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAxOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy ZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDA6CiAgZGVmYXVsdDoKICAgIHJl dHVybiBfX2xhc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs YXNzIF9QcmVkaWNhdGU+Cl9SYW5kb21BY2Nlc3NJdGVyIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0 ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRv bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgPSAoX19sYXN0 IC0gX19maXJzdCkgPj4gMjsKCiAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBf Y291bnQpIHsKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsr X19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAr K19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAg KytfX2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAg ICsrX19maXJzdDsKICB9CgogIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgY2FzZSAzOgog ICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0Owog IGNhc2UgMjoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsr X19maXJzdDsKICBjYXNlIDE6CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly c3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAwOgogIGRlZmF1bHQ6CiAgICByZXR1cm4gX19sYXN0 OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9J bnB1dEl0ZXIgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgogIHJldHVybiBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9faXRlcmF0b3JfY2F0 ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1By ZWRpY2F0ZT4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19w cmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwg X19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYg KF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIF9fbGFzdDsKICBfRm9yd2FyZEl0ZXIgX19u ZXh0ID0gX19maXJzdDsKICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19m aXJzdCA9PSAqX19uZXh0KQogICAgICByZXR1cm4gX19maXJzdDsKICAgIF9fZmlyc3QgPSBfX25l eHQ7CiAgfQogIHJldHVybiBfX2xhc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBhZGphY2VudF9maW5kKF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19sYXN0OwogIF9Gb3J3 YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewog ICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICByZXR1cm4gX19m aXJzdDsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQogIHJldHVybiBfX2xhc3Q7Cn0KCgoKCgoK CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9TaXplPgp2b2lk IGNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYg X192YWx1ZSwKICAgICAgICAgICBfU2l6ZSYgX19uKQp7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJzdCA9 PSBfX3ZhbHVlKQogICAgICArK19fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs YXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9TaXplPgp2b2lkIGNvdW50X2lmKF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAg IF9TaXplJiBfX24pCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7 ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICArK19fbjsKfQoKdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4KdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKY291bnQoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5j ZV90eXBlIF9fbiA9IDA7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpCiAgICAgICsrX19uOwogIHJldHVybiBfX247Cn0K CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgp0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQpjb3VudF9pZihfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZm ZXJlbmNlX3R5cGUgX19uID0gMDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly c3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKytfX247CiAgcmV0dXJuIF9fbjsK fQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+ Cl9Gb3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRl cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0Miwg X0ZvcndhcmRJdGVyMiBfX2xhc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCgoKCiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikK ICAgIHJldHVybiBfX2ZpcnN0MTsKCgogIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwog ICsrX190bXA7CiAgaWYgKF9fdG1wID09IF9fbGFzdDIpCiAgICByZXR1cm4gZmluZChfX2ZpcnN0 MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKCgoKICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAg X19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19m aXJzdDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICBfX2ZpcnN0MSA9IGZp bmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICBpZiAoX19maXJzdDEgPT0gX19s YXN0MSkKICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVu dCA9IF9fZmlyc3QxOwogICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgIHJldHVy biBfX2xhc3QxOwoKICAgIHdoaWxlICgqX19jdXJyZW50ID09ICpfX3ApIHsKICAgICAgaWYgKCsr X19wID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICBpZiAoKytfX2N1 cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgICArK19f Zmlyc3QxOwogIH0KICByZXR1cm4gX19maXJzdDE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZD4KX0ZvcndhcmRJ dGVyMSBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0 ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRl KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCiAgaWYgKF9fZmlyc3Qx ID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2ZpcnN0MTsK CgogIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICsrX190bXA7CiAgaWYgKF9fdG1w ID09IF9fbGFzdDIpIHsKICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRp Y2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJzdDE7CiAgICByZXR1cm4g X19maXJzdDE7CiAgfQoKCgogIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICBfX3AxID0gX19m aXJzdDI7ICsrX19wMTsKCiAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAg d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxKSB7CiAgICAgIGlmIChfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAg ICAgYnJlYWs7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICB3aGlsZSAoX19maXJzdDEgIT0g X19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICArK19f Zmlyc3QxOwogICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBfX2xhc3Qx OwoKICAgIF9fcCA9IF9fcDE7CiAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgIGlmICgrK19f Y3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsKCiAgICB3aGlsZSAoX19wcmVkaWNh dGUoKl9fY3VycmVudCwgKl9fcCkpIHsKICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAg ICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAg ICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgICArK19fZmlyc3QxOwogIH0KICByZXR1cm4g X19maXJzdDE7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0ludGVn ZXIsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0ludGVnZXIgX19j b3VudCwgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBp ZiAoX19jb3VudCA8PSAwKQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICBfX2ZpcnN0 ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9f bGFzdCkgewogICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgX0ZvcndhcmRJ dGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICB3aGlsZSAoX19pICE9IF9fbGFz dCAmJiBfX24gIT0gMCAmJiAqX19pID09IF9fdmFsKSB7CiAgICAgICAgKytfX2k7CiAgICAgICAg LS1fX247CiAgICAgIH0KICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0 OwogICAgICBlbHNlCiAgICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsK ICAgIH0KICAgIHJldHVybiBfX2xhc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyLCBjbGFzcyBfSW50ZWdlciwgY2xhc3MgX1RwLCBjbGFzcyBfQmluYXJ5UHJlZD4KX0Zvcndh cmRJdGVyIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3Zh bCwKICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQpCnsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2NvdW50IDw9IDApCiAgICByZXR1cm4gX19m aXJzdDsKICBlbHNlIHsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBpZiAo X19iaW5hcnlfcHJlZCgqX19maXJzdCwgX192YWwpKQogICAgICAgIGJyZWFrOwogICAgICArK19f Zmlyc3Q7CiAgICB9CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVn ZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0Owog ICAgICArK19faTsKICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19i aW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpIHsKICAgICAgICArK19faTsKICAgICAgICAtLV9fbjsK ICAgICAgfQogICAgICBpZiAoX19uID09IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAg IGVsc2UgewogICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0KSB7CiAgICAgICAgICBpZiAoX19i aW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytf X2k7CiAgICAgICAgfQogICAgICAgIF9fZmlyc3QgPSBfX2k7CiAgICAgIH0KICAgIH0KICAgIHJl dHVybiBfX2xhc3Q7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFz cyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIyIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEg X19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9f bGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9f Zmlyc3QyKTsKICByZXR1cm4gX19maXJzdDI7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVW5hcnlPcGVyYXRpb24+Cl9PdXRwdXRJdGVy IHRyYW5zZm9ybShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9VbmFyeU9wZXJhdGlvbiBfX3Vu YXJ5X29wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fdW5hcnlfb3AoKl9fZmlyc3Qp OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz cyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5 T3BlcmF0aW9uPgpfT3V0cHV0SXRlciB0cmFuc2Zvcm0oX0lucHV0SXRlcjEgX19maXJzdDEsIF9J bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MiwgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5 T3BlcmF0aW9uIF9fYmluYXJ5X29wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCiAgZm9y ICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVz dWx0KQogICAgKl9fcmVzdWx0ID0gX19iaW5hcnlfb3AoKl9fZmlyc3QxLCAqX19maXJzdDIpOwog IHJldHVybiBfX3Jlc3VsdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz cyBfVHA+CnZvaWQgcmVwbGFjZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19u ZXdfdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9y ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2ZpcnN0ID09IF9f b2xkX3ZhbHVlKQogICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHA+CnZvaWQgcmVwbGFj ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0 OyArK19fZmlyc3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKl9fZmlyc3QgPSBf X25ld192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJ dGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3Zh bHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9f cmVzdWx0ID0gKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0 OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz IF9PdXRwdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJl cGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1 ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f Zmlyc3QsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSBfX3ByZWQoKl9fZmlyc3QpID8gX19u ZXdfdmFsdWUgOiAqX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0dlbmVyYXRvcj4Kdm9pZCBnZW5lcmF0ZShfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX0dlbmVyYXRvciBfX2dlbikKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz dCkKICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVy LCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0dlbmVyYXRvcj4KX091dHB1dEl0ZXIgZ2VuZXJhdGVfbihf T3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pCnsKCgoKCgoK ICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fZ2Vu KCk7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5KF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg IF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBjb25zdCBfVHAmIF9fdmFsdWUpCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBp ZiAoISgqX19maXJzdCA9PSBfX3ZhbHVlKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsK ICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX091 dHB1dEl0ZXIgcmVtb3ZlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Q cmVkaWNhdGUgX19wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAh PSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICghX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAq X19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19y ZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KX0Zvcndh cmRJdGVyIHJlbW92ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsdWUpCnsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0 LCBfX3ZhbHVlKTsKICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICByZXR1cm4gX19maXJz dCA9PSBfX2xhc3QgPyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3Zl X2NvcHkoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciByZW1vdmVfaWYo X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CgogIF9fZmlyc3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICBfRm9yd2Fy ZEl0ZXIgX19pID0gX19maXJzdDsKICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0 CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytfX2ksIF9fbGFz dCwgX19maXJzdCwgX19wcmVkKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVHAqKQp7CgogIF9UcCBfX3ZhbHVlID0gKl9fZmly c3Q7CiAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkK ICAgIGlmICghKF9fdmFsdWUgPT0gKl9fZmlyc3QpKSB7CiAgICAgIF9fdmFsdWUgPSAqX19maXJz dDsKICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgfQogIHJldHVybiArK19fcmVzdWx0 Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGlu ZSBfT3V0cHV0SXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3Jf dGFnKQp7CgogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQs IF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj bGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9G b3J3YXJkSXRlciBfX3Jlc3VsdCwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKCiAgKl9fcmVzdWx0 ID0gKl9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoISgqX19y ZXN1bHQgPT0gKl9fZmlyc3QpKQogICAgICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVy biArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1 dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1 dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19s YXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19s YXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5 KF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0 SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZSwKICAgICAgICAgIGNsYXNzIF9UcD4KX091dHB1 dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwgX1RwKikK ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgX1RwIF9fdmFsdWUgPSAqX19maXJzdDsK ICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAg aWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkgewogICAgICBfX3ZhbHVlID0g Kl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgIH0KICByZXR1cm4gKytf X3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVy LCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgX091dHB1dEl0ZXIgX191bmlxdWVfY29w eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQp7CgogIHJldHVybiBf X3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsCiAg ICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRp Y2F0ZT4KX0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmlu YXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFn KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKCgogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0g X19sYXN0KQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytf X3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+ CmlubGluZSBfT3V0cHV0SXRlciB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRl IF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp IHJldHVybiBfX3Jlc3VsdDsKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0 b3JfY2F0ZWdvcnkoX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4K X0ZvcndhcmRJdGVyIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f bGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19maXJzdCA9IGFkamFjZW50 X2ZpbmQoX19maXJzdCwgX19sYXN0KTsKICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19s YXN0LCBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0Jp bmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwg X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRl IF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX2ZpcnN0 ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fYmluYXJ5X3ByZWQpOwogIHJldHVy biB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QsIF9fYmluYXJ5X3ByZWQpOwp9 CgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CnZvaWQgX19yZXZlcnNlKF9C aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIHdoaWxlICh0cnVlKQog ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xhc3QpCiAgICAgIHJl dHVybjsKICAgIGVsc2UKICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgX19sYXN0KTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9fcmV2ZXJzZShfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3Qp CiAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf QmlkaXJlY3Rpb25hbEl0ZXI+CmlubGluZSB2b2lkIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVy IF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0 ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBj bGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgcmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFs SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3Qg IT0gX19sYXN0KSB7CiAgICAtLV9fbGFzdDsKICAgICpfX3Jlc3VsdCA9ICpfX2xhc3Q7CiAgICAr K19fcmVzdWx0OwogIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9F dWNsaWRlYW5SaW5nRWxlbWVudD4KX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fZ2NkKF9FdWNsaWRl YW5SaW5nRWxlbWVudCBfX20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRXVjbGlkZWFu UmluZ0VsZW1lbnQgX19uKQp7CiAgd2hpbGUgKF9fbiAhPSAwKSB7CiAgICBfRXVjbGlkZWFuUmlu Z0VsZW1lbnQgX190ID0gX19tICUgX19uOwogICAgX19tID0gX19uOwogICAgX19uID0gX190Owog IH0KICByZXR1cm4gX19tOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf RGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3JvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAg ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu Y2UqLAogICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAo X19maXJzdCA9PSBfX21pZGRsZSkKICAgIHJldHVybiBfX2xhc3Q7CiAgaWYgKF9fbGFzdCA9PSBf X21pZGRsZSkKICAgIHJldHVybiBfX2ZpcnN0OwoKICBfRm9yd2FyZEl0ZXIgX19maXJzdDIgPSBf X21pZGRsZTsKICBkbyB7CiAgICBzd2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAgIGlm IChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogIH0gd2hp bGUgKF9fZmlyc3QyICE9IF9fbGFzdCk7CgogIF9Gb3J3YXJkSXRlciBfX25ld19taWRkbGUgPSBf X2ZpcnN0OwoKICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwoKICB3aGlsZSAoX19maXJzdDIgIT0gX19s YXN0KSB7CiAgICBzd2FwICgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICBpZiAoX19maXJz dCA9PSBfX21pZGRsZSkKICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAgIGVsc2UgaWYgKF9f Zmlyc3QyID09IF9fbGFzdCkKICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsKICB9CgogIHJldHVy biBfX25ld19taWRkbGU7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBj bGFzcyBfRGlzdGFuY2U+Cl9CaWRpcmVjdGlvbmFsSXRlciBfX3JvdGF0ZShfQmlkaXJlY3Rpb25h bEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCnsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkK ICAgIHJldHVybiBfX2xhc3Q7CiAgaWYgKF9fbGFzdCA9PSBfX21pZGRsZSkKICAgIHJldHVybiBf X2ZpcnN0OwoKICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRl cmF0b3JfdGFnKCkpOwogIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFs X2l0ZXJhdG9yX3RhZygpKTsKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19taWRkbGUgJiYgX19taWRk bGUgIT0gX19sYXN0KQogICAgc3dhcCAoKl9fZmlyc3QrKywgKi0tX19sYXN0KTsKCiAgaWYgKF9f Zmlyc3QgPT0gX19taWRkbGUpIHsKICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRp cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgIHJldHVybiBfX2xhc3Q7CiAgfQogIGVsc2Ug ewogICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y X3RhZygpKTsKICAgIHJldHVybiBfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k b21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0 ZXIgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0Rpc3RhbmNlICosIF9UcCAqKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK ICBfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19rID0gX19t aWRkbGUgLSBfX2ZpcnN0OwogIF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7CiAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fbWlkZGxlKTsKCiAgaWYg KF9fayA9PSAwKQogICAgcmV0dXJuIF9fbGFzdDsKCiAgZWxzZSBpZiAoX19rID09IF9fbCkgewog ICAgc3dhcF9yYW5nZXMoX19maXJzdCwgX19taWRkbGUsIF9fbWlkZGxlKTsKICAgIHJldHVybiBf X3Jlc3VsdDsKICB9CgogIF9EaXN0YW5jZSBfX2QgPSBfX2djZChfX24sIF9fayk7CgogIGZvciAo X0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8IF9fZDsgX19pKyspIHsKICAgIF9UcCBfX3RtcCA9ICpf X2ZpcnN0OwogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19wID0gX19maXJzdDsKCiAgICBpZiAoX19r IDwgX19sKSB7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fbC9fX2Q7IF9f aisrKSB7CiAgICAgICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAgICAgICpfX3Ag PSAqKF9fcCAtIF9fbCk7CiAgICAgICAgICBfX3AgLT0gX19sOwogICAgICAgIH0KCiAgICAgICAg Kl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICBfX3AgKz0gX19rOwogICAgICB9CiAgICB9Cgog ICAgZWxzZSB7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fay9fX2QgLSAx OyBfX2ogKyspIHsKICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAgICAgICAgICAq X19wID0gKihfX3AgKyBfX2spOwogICAgICAgICAgX19wICs9IF9fazsKICAgICAgICB9CgogICAg ICAgICpfX3AgPSAqIChfX3AgLSBfX2wpOwogICAgICAgIF9fcCAtPSBfX2w7CiAgICAgIH0KICAg IH0KCiAgICAqX19wID0gX190bXA7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19yZXN1 bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIg cm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgogIHJldHVybiBfX3JvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAog ICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAg ICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgcm90YXRlX2NvcHkoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAg ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgoKICByZXR1cm4gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShf X21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Rpc3Rh bmNlPgppbmxpbmUgX0Rpc3RhbmNlIF9fcmFuZG9tX251bWJlcihfRGlzdGFuY2UgX19uKSB7Cgog IHJldHVybiBscmFuZDQ4KCkgJSBfX247CgoKCn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyPgppbmxpbmUgdm9pZCByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9f bGFzdCkgcmV0dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7 IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgaXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFu ZG9tX251bWJlcigoX19pIC0gX19maXJzdCkgKyAxKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4Kdm9pZCByYW5kb21f c2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQp7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp IHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kg IT0gX19sYXN0OyArK19faSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9f aSAtIF9fZmlyc3QpICsgMSkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9PdXRwdXRJdGVyIHJhbmRvbV9zYW1w bGVfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fb3V0LCBjb25zdCBfRGlzdGFuY2UgX19u KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX0Rpc3RhbmNlIF9fcmVtYWluaW5nID0gMDsKICBk aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVtYWluaW5nKTsKICBfRGlzdGFuY2UgX19tID0g bWluKF9fbiwgX19yZW1haW5pbmcpOwoKICB3aGlsZSAoX19tID4gMCkgewogICAgaWYgKF9fcmFu ZG9tX251bWJlcihfX3JlbWFpbmluZykgPCBfX20pIHsKICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7 CiAgICAgICsrX19vdXQ7CiAgICAgIC0tX19tOwogICAgfQoKICAgIC0tX19yZW1haW5pbmc7CiAg ICArK19fZmlyc3Q7CiAgfQogIHJldHVybiBfX291dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNs YXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+Cl9PdXRwdXRJdGVyIHJhbmRvbV9zYW1wbGVfbihf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fb3V0LCBjb25zdCBfRGlzdGFuY2UgX19uLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQp7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCiAgX0Rpc3RhbmNlIF9fcmVtYWluaW5nID0gMDsKICBkaXN0 YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVtYWluaW5nKTsKICBfRGlzdGFuY2UgX19tID0gbWlu KF9fbiwgX19yZW1haW5pbmcpOwoKICB3aGlsZSAoX19tID4gMCkgewogICAgaWYgKF9fcmFuZChf X3JlbWFpbmluZykgPCBfX20pIHsKICAgICAgKl9fb3V0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19v dXQ7CiAgICAgIC0tX19tOwogICAgfQoKICAgIC0tX19yZW1haW5pbmc7CiAgICArK19fZmlyc3Q7 CiAgfQogIHJldHVybiBfX291dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9SYW5kb21BY2Nlc3NJdGVyIF9f cmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19uKQp7CiAg X0Rpc3RhbmNlIF9fbSA9IDA7CiAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsKICBmb3IgKCA7IF9fZmly c3QgIT0gX19sYXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsrX19maXJzdCkKICAgIF9fb3V0W19f bV0gPSAqX19maXJzdDsKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fdDsK ICAgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmRvbV9udW1iZXIoX190KTsKICAgIGlmIChfX00gPCBf X24pCiAgICAgIF9fb3V0W19fTV0gPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICB9CgogIHJl dHVybiBfX291dCArIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9S YW5kb21BY2Nlc3NJdGVyLAogICAgICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvciwg Y2xhc3MgX0Rpc3RhbmNlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fbikKewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX0Rpc3RhbmNl IF9fbSA9IDA7CiAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsrX19maXJzdCkKICAgIF9fb3V0W19fbV0gPSAqX19m aXJzdDsKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fdDsKICAgIF9EaXN0 YW5jZSBfX00gPSBfX3JhbmQoX190KTsKICAgIGlmIChfX00gPCBfX24pCiAgICAgIF9fb3V0W19f TV0gPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICB9CgogIHJldHVybiBfX291dCArIF9fbTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgpp bmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0 X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9sYXN0KQp7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19yYW5kb21fc2FtcGxlKF9fZmlyc3Qs IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2ZpcnN0LCBfX291dF9sYXN0 IC0gX19vdXRfZmlyc3QpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9S YW5kb21BY2Nlc3NJdGVyLAogICAgICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4K aW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291 dF9maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfbGFzdCwKICAgICAgICAgICAgICBfUmFu ZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCgogIHJldHVybiBfX3JhbmRvbV9zYW1wbGUoX19maXJzdCwgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3QsIF9fcmFuZCwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fb3V0X2xhc3QgLSBfX291dF9maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIF9fcGFydGl0 aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk LAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAo X19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICB3aGlsZSAoX19wcmVkKCpfX2Zp cnN0KSkKICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgX0Zv cndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CgogIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3Qp CiAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgIHN3YXAoKl9fZmlyc3QsICpfX25leHQp OwogICAgICArK19fZmlyc3Q7CiAgICB9CgogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfQmlkaXJlY3Rpb25h bEl0ZXIgX19wYXJ0aXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewogIHdoaWxlICh0cnVl KSB7CiAgICB3aGlsZSAodHJ1ZSkKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAg IHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAg ICsrX19maXJzdDsKICAgICAgZWxzZQogICAgICAgIGJyZWFrOwogICAgLS1fX2xhc3Q7CiAgICB3 aGlsZSAodHJ1ZSkKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBf X2ZpcnN0OwogICAgICBlbHNlIGlmICghX19wcmVkKCpfX2xhc3QpKQogICAgICAgIC0tX19sYXN0 OwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0 KTsKICAgICsrX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs YXNzIF9QcmVkaWNhdGU+CmlubGluZSBfRm9yd2FyZEl0ZXIgcGFydGl0aW9uKF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3Qs IF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9EaXN0YW5j ZT4KX0ZvcndhcmRJdGVyIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVk aWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pCnsKICBpZiAoX19sZW4gPT0gMSkKICAgIHJl dHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0IDogX19maXJzdDsKICBfRm9yd2FyZEl0ZXIg X19taWRkbGUgPSBfX2ZpcnN0OwogIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgcmV0 dXJuIHJvdGF0ZShfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRsZSwg X19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4g LyAyKSwKICAgICAgICAgICAgICAgIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgX19pbnBsYWNl X3N0YWJsZV9wYXJ0aXRpb24oX19taWRkbGUsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIpKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9QcmVkaWNh dGUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3N0YWJsZV9wYXJ0 aXRpb25fYWRhcHRpdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9f bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9f YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j ZSBfX2J1ZmZlcl9zaXplKQp7CiAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9G b3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0OwogICAgX1BvaW50ZXIgX19yZXN1bHQyID0g X19idWZmZXI7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQogICAg ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsK ICAgICAgICArK19fcmVzdWx0MTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICAqX19yZXN1 bHQyID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDI7CiAgICAgIH0KICAgIGNvcHkoX19i dWZmZXIsIF9fcmVzdWx0MiwgX19yZXN1bHQxKTsKICAgIHJldHVybiBfX3Jlc3VsdDE7CiAgfQog IGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2Uo X19taWRkbGUsIF9fbGVuIC8gMik7CiAgICByZXR1cm4gcm90YXRlKF9fc3RhYmxlX3BhcnRpdGlv bl9hZGFwdGl2ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0LCBfX21pZGRsZSwg X19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwgX19idWZmZXIsIF9f YnVmZmVyX3NpemUpLAogICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlLAogICAgICAgICAgICAg ICAgICAgIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSgKICAgICAgICAgICAgICAgICAgICAg ICAgICBfX21pZGRsZSwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg X19sZW4gLSBfX2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKSk7CiAgfQp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHAsIGNs YXNzIF9EaXN0YW5jZT4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3N0YWJsZV9wYXJ0aXRpb25fYXV4 KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgX1RlbXBv cmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyLCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAg aWYgKF9fYnVmLnNpemUoKSA+IDApCiAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0 aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfRGlzdGFuY2UoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNpemUoKSk7 CiAgZWxzZQogICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9f bGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0 YW5jZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfRm9yd2FyZEl0ZXIgc3RhYmxlX3BhcnRp dGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZQogICAg cmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4KX1JhbmRv bUFjY2Vzc0l0ZXIgX191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAg X19waXZvdCkKewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGlsZSAoKl9fZmlyc3QgPCBfX3Bpdm90 KQogICAgICArK19fZmlyc3Q7CiAgICAtLV9fbGFzdDsKICAgIHdoaWxlIChfX3Bpdm90IDwgKl9f bGFzdCkKICAgICAgLS1fX2xhc3Q7CiAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAg cmV0dXJuIF9fZmlyc3Q7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICsrX19m aXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Rw LCBjbGFzcyBfQ29tcGFyZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgX191bmd1YXJkZWRfcGFydGl0aW9u KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hp bGUgKHRydWUpIHsKICAgIHdoaWxlIChfX2NvbXAoKl9fZmlyc3QsIF9fcGl2b3QpKQogICAgICAr K19fZmlyc3Q7CiAgICAtLV9fbGFzdDsKICAgIHdoaWxlIChfX2NvbXAoX19waXZvdCwgKl9fbGFz dCkpCiAgICAgIC0tX19sYXN0OwogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgIHJl dHVybiBfX2ZpcnN0OwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmly c3Q7CiAgfQp9Cgpjb25zdCBpbnQgX19zdGxfdGhyZXNob2xkID0gMTY7CgoKCnRlbXBsYXRlIDxj bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFyZGVkX2xpbmVh cl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwpCnsKICBfUmFuZG9t QWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAgLS1fX25leHQ7CiAgd2hpbGUgKF9fdmFsIDwg Kl9fbmV4dCkgewogICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICBfX2xhc3QgPSBfX25leHQ7CiAg ICAtLV9fbmV4dDsKICB9CiAgKl9fbGFzdCA9IF9fdmFsOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX191bmd1YXJk ZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAtLV9fbmV4dDsKICB3aGlsZSAoX19jb21wKF9f dmFsLCAqX19uZXh0KSkgewogICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICBfX2xhc3QgPSBfX25l eHQ7CiAgICAtLV9fbmV4dDsKICB9CiAgKl9fbGFzdCA9IF9fdmFsOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19saW5lYXJfaW5z ZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICBfVHAgX192YWwgPSAqX19sYXN0 OwogIGlmIChfX3ZhbCA8ICpfX2ZpcnN0KSB7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9f bGFzdCwgX19sYXN0ICsgMSk7CiAgICAqX19maXJzdCA9IF9fdmFsOwogIH0KICBlbHNlCiAgICBf X3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9fbGFzdCwgX192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2 b2lkIF9fbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFy ZSBfX2NvbXApCnsKICBfVHAgX192YWwgPSAqX19sYXN0OwogIGlmIChfX2NvbXAoX192YWwsICpf X2ZpcnN0KSkgewogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEp OwogICAgKl9fZmlyc3QgPSBfX3ZhbDsKICB9CiAgZWxzZQogICAgX191bmd1YXJkZWRfbGluZWFy X2luc2VydChfX2xhc3QsIF9fdmFsLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv bUFjY2Vzc0l0ZXI+CnZvaWQgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp IHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kg IT0gX19sYXN0OyArK19faSkKICAgIF9fbGluZWFyX2luc2VydChfX2ZpcnN0LCBfX2ksIF9fdmFs dWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg Y2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBf Q29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3Ig KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19f aSkKICAgIF9fbGluZWFyX2luc2VydChfX2ZpcnN0LCBfX2ksIF9fdmFsdWVfdHlwZShfX2ZpcnN0 KSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf VHA+CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwgX1RwKikKewogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19m aXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0 KF9faSwgX1RwKCpfX2kpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgpp bmxpbmUgdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCkgewogIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfX2ZpcnN0LCBfX2xh c3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj ZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3VuZ3VhcmRlZF9pbnNl cnRpb25fc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBmb3Ig KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQog ICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSwgX19jb21wKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5l IHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy ZSBfX2NvbXApCnsKICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX19maXJzdCwgX19s YXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBf X2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKICBpZiAoX19s YXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVzaG9sZCkgewogICAgX19pbnNlcnRpb25fc29ydChf X2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkKTsKICAgIF9fdW5ndWFyZGVkX2luc2Vy dGlvbl9zb3J0KF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQsIF9fbGFzdCk7CiAgfQogIGVsc2UK ICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2ZpbmFsX2luc2VydGlv bl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChf X2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBfX2luc2VydGlvbl9zb3J0 KF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQsIF9fY29tcCk7CiAgICBfX3VuZ3Vh cmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkLCBfX2xhc3QsIF9f Y29tcCk7CiAgfQogIGVsc2UKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBf X2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGluZSBfU2l6ZSBfX2xnKF9TaXpl IF9fbikKewogIF9TaXplIF9fazsKICBmb3IgKF9fayA9IDA7IF9fbiAhPSAxOyBfX24gPj49IDEp ICsrX19rOwogIHJldHVybiBfX2s7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl ciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZT4Kdm9pZCBfX2ludHJvc29ydF9sb29wKF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QsIF9UcCosCiAgICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0 KQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIGlm IChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFz dCwgX19sYXN0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19m aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJz dCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwg X19sYXN0LCAoX1RwKikgMCwgX19kZXB0aF9saW1pdCk7CiAgICBfX2xhc3QgPSBfX2N1dDsKICB9 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBf U2l6ZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0LCBfVHAqLAogICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0Nv bXBhcmUgX19jb21wKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hv bGQpIHsKICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgcGFydGlhbF9zb3J0KF9f Zmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICByZXR1cm47CiAgICB9CiAgICAt LV9fZGVwdGhfbGltaXQ7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5n dWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAog ICAgICAgX19jb21wKTsKICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCop IDAsIF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgICBfX2xhc3QgPSBfX2N1dDsKICB9Cn0KCnRl bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgc29ydChfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgIT0gX19sYXN0 KSB7CiAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICBfX2xnKF9f bGFzdCAtIF9fZmlyc3QpICogMik7CiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs IF9fbGFzdCk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz IF9Db21wYXJlPgppbmxpbmUgdm9pZCBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2Zp cnN0ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAg ICAgICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsCiAgICAgICAgICAgICAgICAgICAgIF9f Y29tcCk7CiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21w KTsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9faW5w bGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKICBpZiAoX19sYXN0IC0g X19maXJzdCA8IDE1KSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAg ICByZXR1cm47CiAgfQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChf X2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9f bWlkZGxlKTsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCk7CiAgX19t ZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgX19sYXN0IC0gX19taWRkbGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwg MTUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAg cmV0dXJuOwogIH0KICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19s YXN0IC0gX19maXJzdCkgLyAyOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21p ZGRsZSwgX19jb21wKTsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCwg X19jb21wKTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjEsIGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX21l cmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplKQp7CiAg X0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogIHdoaWxlIChfX2xhc3Qg LSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwg X19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19z dGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAgICBfX3Jl c3VsdCk7CiAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgfQoKICBfX3N0ZXBfc2l6ZSA9IG1p bihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKICBtZXJnZShfX2Zp cnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0 LAogICAgICAgIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy MSwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBj bGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEg X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rp c3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t cCkKewogIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICB3aGlsZSAo X19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICBfX3Jlc3VsdCA9IG1lcmdlKF9f Zmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgX19maXJz dCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAg ICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX2ZpcnN0ICs9 IF9fdHdvX3N0ZXA7CiAgfQogIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBf X2ZpcnN0KSwgX19zdGVwX3NpemUpOwoKICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVw X3NpemUsCiAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgX19y ZXN1bHQsCiAgICAgICAgX19jb21wKTsKfQoKY29uc3QgaW50IF9fc3RsX2NodW5rX3NpemUgPSA3 OwoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZv aWQgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfRGlzdGFu Y2UgX19jaHVua19zaXplKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19z aXplKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3Np emUpOwogICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQo X19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj bGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9uX3Nv cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E aXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChfX2xhc3Qg LSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0 LCBfX2ZpcnN0ICsgX19jaHVua19zaXplLCBfX2NvbXApOwogICAgX19maXJzdCArPSBfX2NodW5r X3NpemU7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFz cyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZm ZXIsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0Owog IF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICBfRGlzdGFuY2Ug X19zdGVwX3NpemUgPSBfX3N0bF9jaHVua19zaXplOwogIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQo X19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSk7CgogIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9f bGVuKSB7CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBf X3N0ZXBfc2l6ZSk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgX19tZXJnZV9zb3J0X2xvb3Ao X19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplKTsKICAgIF9fc3Rl cF9zaXplICo9IDI7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs YXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4K dm9pZCBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBf UG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl KiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJz dDsKICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgX0Rpc3Rh bmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1bmtfc2l6ZTsKICBfX2NodW5rX2luc2VydGlvbl9z b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogIHdoaWxlIChfX3N0 ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3Qs IF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAg ICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19z dGVwX3NpemUsIF9fY29tcCk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogIH0KfQoKdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNl Pgp2b2lkIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1Bv aW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19i dWZmZXJfc2l6ZSkKewogIF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkg LyAyOwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogIGlm IChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19m aXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fc3RhYmxlX3Nv cnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwog IH0KICBlbHNlIHsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRs ZSwgX19idWZmZXIsIChfRGlzdGFuY2UqKTApOwogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVy KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwKTsKICB9CiAgX19tZXJn ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUg LSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRs ZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xh c3MgX0NvbXBhcmU+CnZvaWQgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E aXN0YW5jZSBfX2J1ZmZlcl9zaXplLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX19s ZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNzSXRlciBfX21p ZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAg ICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19i dWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIF9fc3Rh YmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3Np emUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgfQogIGVsc2UgewogICAg X19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgKF9E aXN0YW5jZSopMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBf X21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIChfRGlz dGFuY2UqKTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBf X21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21p ZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9f bWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2Nv bXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xh c3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1eChfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopCnsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFu ZG9tQWNjZXNzSXRlciwgX1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoYnVmLmJlZ2lu KCkgPT0gMCkKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogIGVs c2UKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4o KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkpKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0 YW5jZSwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9fc3RhYmxlX3NvcnRfYXV4KF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRv bUFjY2Vzc0l0ZXIsIF9UcD4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKGJ1Zi5iZWdpbigp ID09IDApCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXAp OwogIGVsc2UKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYu YmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkp LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3N0 YWJsZV9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX192YWx1 ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2Zp cnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBh cmU+CmlubGluZSB2b2lkIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUg X19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBf X3N0YWJsZV9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX192 YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoKCnRlbXBsYXRlIDxjbGFz cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fcGFydGlhbF9zb3J0KF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAg ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikKewogIG1ha2VfaGVh cChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21p ZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgIGlmICgqX19pIDwgKl9fZmlyc3QpCiAgICAg IF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1RwKCpfX2kpLAogICAgICAgICAg ICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9f bWlkZGxlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9p ZCBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgogIF9fcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBf X2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t QWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3BhcnRpYWxfc29y dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwK ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21w YXJlIF9fY29tcCkKewogIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICBm b3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19p KQogICAgaWYgKF9fY29tcCgqX19pLCAqX19maXJzdCkpCiAgICAgIF9fcG9wX2hlYXAoX19maXJz dCwgX19taWRkbGUsIF9faSwgX1RwKCpfX2kpLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgX19k aXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9f Y29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBh cmU+CmlubGluZSB2b2lkIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9f Y29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19w YXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmly c3QpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRv bUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9UcD4KX1JhbmRv bUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1 bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0 X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0OwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0 X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0OwogIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYm IF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAqX19yZXN1bHRfcmVh bF9sYXN0ID0gKl9fZmlyc3Q7CiAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICsrX19maXJz dDsKICB9CiAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwog IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0 X2ZpcnN0KQogICAgICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2UoMCks CiAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVz dWx0X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfVHAoKl9fZmlyc3QpKTsKICAgICsrX19m aXJzdDsKICB9CiAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3Qp OwogIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnBh cnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAg ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0KQp7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19wYXJ0aWFsX3NvcnRfY29weShf X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX3Jlc3VsdF9maXJzdCksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29t cGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNz SXRlciBfX3BhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3Vs dF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t QWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKiwgX1RwKikKewogIGlmIChfX3Jl c3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICBfUmFu ZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICB3aGls ZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFz dCkgewogICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgKytfX3Jlc3VsdF9y ZWFsX2xhc3Q7CiAgICArK19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwg X19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkg ewogICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkKICAgICAgX19hZGp1 c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgICAgICAg IF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAg ICAgICAgICAgICAgX1RwKCpfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwog ICAgKytfX2ZpcnN0OwogIH0KICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3Jl YWxfbGFzdCwgX19jb21wKTsKICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0Owp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21w YXJlPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fcmVzdWx0X2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9f cGFydGlhbF9zb3J0X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1 bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fcmVzdWx0X2ZpcnN0KSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CgoKCnRlbXBs YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fbnRoX2VsZW1l bnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICB3aGls ZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0K ICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkp KTsKICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxz ZQogICAgICBfX2xhc3QgPSBfX2N1dDsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf X2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lk IG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy IF9fbnRoLAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19udGhfZWxl bWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh cmU+CnZvaWQgX19udGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3Qg PiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3Bh cnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAo X19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb21wKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbXApOwogICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICBfX2ZpcnN0ID0gX19jdXQ7 CiAgICBlbHNlCiAgICAgIF9fbGFzdCA9IF9fY3V0OwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9f Zmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICAg ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX250aF9lbGVtZW50KF9f Zmlyc3QsIF9fbnRoLCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19jb21wKTsKfQoK CgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFu Y2U+Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f dmFsLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2Zp cnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBf X21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsK ICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAg ICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAg ICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAg ZWxzZQogICAgICBfX2xlbiA9IF9faGFsZjsKICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlciBs b3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgogIHJldHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFz dCwgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3Qp KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t cGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19sb3dlcl9ib3VuZChfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7 CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVu KTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUg KF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19m aXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKCpfX21p ZGRsZSwgX192YWwpKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0 OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAg X19sZW4gPSBfX2hhbGY7CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgX0ZvcndhcmRJ dGVyIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21w YXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBy ZXR1cm4gX19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAg ICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJk SXRlciBfX3VwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfRGlzdGFu Y2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qs IF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAg d2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxl ID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX192YWwg PCAqX19taWRkbGUpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7CiAgICAgIF9fZmly c3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19o YWxmIC0gMTsKICAgIH0KICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogIHJldHVybiBfX3VwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAg ICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg X0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX191cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg X1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9f bGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2Ug X19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewog ICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFu Y2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQog ICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7 CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9 CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHVwcGVyX2JvdW5k KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX191cHBlcl9i b3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAg ICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0ZvcndhcmRJdGVyLCBfRm9y d2FyZEl0ZXI+Cl9fZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewog IF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7 CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19y aWdodDsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAg IF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBp ZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAr K19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxz ZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7 CiAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCk7CiAg ICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQo KytfX21pZGRsZSwgX19maXJzdCwgX192YWwpOwogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0 ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgIH0KICB9CiAgcmV0dXJuIHBh aXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9Gb3J3YXJk SXRlciwgX0ZvcndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKICByZXR1cm4gX19lcXVhbF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAog ICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNz IF9EaXN0YW5jZT4KcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX19lcXVhbF9yYW5n ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBf X3ZhbCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSopCnsKICBfRGlz dGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9E aXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7 CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21p ZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9f Y29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAg ICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBl bHNlIGlmIChfX2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgIF9fbGVuID0gX19oYWxmOwog ICAgZWxzZSB7CiAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBf X3ZhbCwgX19jb21wKTsKICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgICAgIF9fcmln aHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwgX19jb21wKTsKICAg ICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdo dCk7CiAgICB9CiAgfQogIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihf X2ZpcnN0LCBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg X1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0 ZXI+CmVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fZXF1YWxfcmFuZ2Uo X19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgIF9f ZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9UcD4KYm9vbCBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91 bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShf X3ZhbCA8ICpfX2kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAs IGNsYXNzIF9Db21wYXJlPgpib29sIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFs LAogICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgogIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChf X2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXApOwogIHJldHVybiBfX2kgIT0gX19sYXN0ICYm ICFfX2NvbXAoX192YWwsICpfX2kpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg Y2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBtZXJnZShf SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf X2xhc3QyKSB7CiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICpfX3Jlc3Vs dCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAq X19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICArK19fcmVz dWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg X19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz cyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFy ZT4KX091dHB1dEl0ZXIgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f bGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy MiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBh cmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hp bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYg KF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly c3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9 ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAgfQog IHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBf X3Jlc3VsdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNz IF9EaXN0YW5jZT4Kdm9pZCBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRl ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9E aXN0YW5jZSBfX2xlbjIpCnsKICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICBy ZXR1cm47CiAgaWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7CiAgICBpZiAoKl9fbWlkZGxlIDwg Kl9fZmlyc3QpCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICByZXR1cm47 CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogIF9EaXN0YW5jZSBfX2xlbjEx ID0gMDsKICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewog ICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjEx KTsKICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2Zp cnN0X2N1dCk7CiAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsK ICB9CiAgZWxzZSB7CiAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgIGFkdmFuY2UoX19zZWNv bmRfY3V0LCBfX2xlbjIyKTsKICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwg X19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9j dXQsIF9fbGVuMTEpOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlCiAgICA9 IHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgX19tZXJnZV93 aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICAg ICAgICAgICAgICAgICAgICAgX19sZW4xMSwgX19sZW4yMik7CiAgX19tZXJnZV93aXRob3V0X2J1 ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjEx LAogICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMik7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBh cmU+CnZvaWQgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRs ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2Ug X19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAg aWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgcmV0dXJuOwogIGlmIChfX2xlbjEg KyBfX2xlbjIgPT0gMikgewogICAgaWYgKF9fY29tcCgqX19taWRkbGUsICpfX2ZpcnN0KSkKICAg ICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIHJldHVybjsKICB9CiAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogIF9EaXN0 YW5jZSBfX2xlbjIyID0gMDsKICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICBfX2xlbjExID0g X19sZW4xIC8gMjsKICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgX19zZWNv bmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2Nv bXApOwogICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgfQog IGVsc2UgewogICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICBhZHZhbmNlKF9fc2Vjb25kX2N1 dCwgX19sZW4yMik7CiAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlk ZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJz dF9jdXQsIF9fbGVuMTEpOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlCiAg ICA9IHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgX19tZXJn ZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xl bjExLCBfX2xlbjIyLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICBfX21lcmdl X3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVu MSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBf X2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0Jp ZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KX0JpZGlyZWN0aW9u YWxJdGVyMSBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBf X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf RGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCnsKICBf QmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsKICBpZiAoX19sZW4xID4gX19sZW4yICYm IF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlk ZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19taWRk bGUsIF9fbGFzdCk7CiAgICByZXR1cm4gY29weShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2Zp cnN0KTsKICB9CiAgZWxzZSBpZiAoX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fYnVm ZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgIGNvcHkoX19t aWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZl ciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogIH0KICBlbHNlCiAgICByZXR1cm4gcm90YXRlKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u YWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaWRp cmVjdGlvbmFsSXRlcjM+Cl9CaWRpcmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNrd2FyZChfQmlk aXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19y ZXN1bHQpCnsKICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgIHJldHVybiBjb3B5X2JhY2t3 YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFz dDIpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQp OwogIC0tX19sYXN0MTsKICAtLV9fbGFzdDI7CiAgd2hpbGUgKHRydWUpIHsKICAgIGlmICgqX19s YXN0MiA8ICpfX2xhc3QxKSB7CiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgIGlm IChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmly c3QyLCArK19fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgfQogICAgZWxz ZSB7CiAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBf X2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEs IF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QyOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNz IF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAg ICBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIzLCBjbGFzcyBfQ29tcGFyZT4KX0JpZGlyZWN0aW9u YWxJdGVyMyBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2ZpcnN0MSA9PSBfX2xh c3QxKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0 KTsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgLS1fX2xhc3QxOwogIC0tX19sYXN0MjsKICB3 aGlsZSAodHJ1ZSkgewogICAgaWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKSB7CiAgICAg ICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQog ICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9fcmVzdWx0 KTsKICAgICAgLS1fX2xhc3QxOwogICAgfQogICAgZWxzZSB7CiAgICAgICotLV9fcmVzdWx0ID0g Kl9fbGFzdDI7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBj b3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xh c3QyOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xh c3MgX0Rpc3RhbmNlLCBjbGFzcyBfUG9pbnRlcj4Kdm9pZCBfX21lcmdlX2FkYXB0aXZlKF9CaWRp cmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5j ZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3Rh bmNlIF9fYnVmZmVyX3NpemUpCnsKICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0g X19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0 LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwg X19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1 ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBf X2xhc3QsIF9fYnVmZmVyKTsKICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUs IF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgfQogIGVsc2UgewogICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgIF9CaWRpcmVjdGlvbmFsSXRl ciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAg IF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAg X19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEp OwogICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19m aXJzdF9jdXQpOwogICAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIy KTsKICAgIH0KICAgIGVsc2UgewogICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgYWR2 YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2Jv dW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgZGlzdGFuY2UoX19m aXJzdCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgfQogICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbmV3X21pZGRsZSA9CiAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21p ZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAg ICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX21lcmdlX2FkYXB0 aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAg ICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fbWVy Z2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0g X19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIs IF9fYnVmZmVyX3NpemUpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl ciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfUG9pbnRlciwKICAgICAgICAgIGNsYXNzIF9Db21w YXJlPgp2b2lkIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAg ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAg ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAg ICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAg ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2xlbjEgPD0gX19sZW4y ICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQg PSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBtZXJnZShfX2J1ZmZlciwg X19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOwogIH0KICBl bHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJf ZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBfX21lcmdlX2JhY2t3 YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgfQogIGVsc2UgewogICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Nl Y29uZF9jdXQgPSBfX21pZGRsZTsKICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgIF9EaXN0 YW5jZSBfX2xlbjIyID0gMDsKICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgX19sZW4x MSA9IF9fbGVuMSAvIDI7CiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAg ICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9j dXQsIF9fY29tcCk7CiAgICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVu MjIpOwogICAgfQogICAgZWxzZSB7CiAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICBh ZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJf Ym91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgIGRp c3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0 X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAg ICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19t ZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjEx LAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwg X19jb21wKTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQs IF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0g X19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgfQp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4K aW5saW5lIHZvaWQgX19pbnBsYWNlX21lcmdlX2F1eChfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19t aWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbjEgPSAwOwogIGRp c3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xlbjIgPSAw OwogIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3JhcnlfYnVm ZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlm IChfX2J1Zi5iZWdpbigpID09IDApCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICBlbHNlCiAgICBfX21lcmdlX2Fk YXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAg ICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2UoX19idWYuc2l6ZSgpKSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwKICAgICAgICAg IGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9faW5wbGFjZV9t ZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5j ZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAg X0Rpc3RhbmNlIF9fbGVuMSA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUsIF9fbGVu MSk7CiAgX0Rpc3RhbmNlIF9fbGVuMiA9IDA7CiAgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCwg X19sZW4yKTsKCiAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVHA+IF9f YnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgIF9fbWVy Z2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xl bjIsIF9fY29tcCk7CiAgZWxzZQogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRs ZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVn aW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgIF9fY29t cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmlubGluZSB2b2lkIGlu cGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21p ZGRsZSA9PSBfX2xhc3QpCiAgICByZXR1cm47CiAgX19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0 LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9f Zmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp ZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgaW5wbGFjZV9tZXJn ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxl IHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgIHJldHVybjsKICBfX2lucGxhY2VfbWVyZ2VfYXV4 KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVl X3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAg ICAgICAgIF9fY29tcCk7Cn0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz cyBfSW5wdXRJdGVyMj4KYm9vbCBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0 SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0 SXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxl IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9f Zmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBlbHNlIGlmKCpfX2Zp cnN0MSA8ICpfX2ZpcnN0MikKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UKICAgICAgKytfX2Zp cnN0MSwgKytfX2ZpcnN0MjsKCiAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Db21wYXJl Pgpib29sIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAg d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlm IChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBl bHNlIGlmKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJzdDE7CiAg ICBlbHNlCiAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogIHJldHVybiBfX2ZpcnN0MiA9 PSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0 ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgc2V0X3VuaW9uKF9JbnB1dEl0ZXIx IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s YXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19yZXN1bHQg PSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJz dDIgPCAqX19maXJzdDEpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19f Zmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAg ICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAg fQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3Qx LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1 dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0 cHV0SXRlciBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz dDEsCiAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf Q29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAg ICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAqX19yZXN1bHQgPSAq X19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9f Zmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAg KytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7 CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICArK19fcmVzdWx0 OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19s YXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf SW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF9pbnRlcnNlY3Rp b24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz dDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAh PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9f Zmlyc3QyKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmly c3QxKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2Zp cnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3Vs dDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3Mg X0NvbXBhcmU+Cl9PdXRwdXRJdGVyIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBf X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwg Kl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJz dDIsICpfX2ZpcnN0MSkpCiAgICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKl9fcmVz dWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAg ICArK19fcmVzdWx0OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRw dXRJdGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdo aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAo Kl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAg ICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgaWYgKCpfX2Zp cnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAgICArK19f Zmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QxLCBf X2xhc3QxLCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg X0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+ Cl9PdXRwdXRJdGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly c3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewog ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19y ZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQog ICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19m aXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3Mg X091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyCnNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly c3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICpf X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsK ICAgIH0KICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1 bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9 CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICBy ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y ZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy MiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0 ZXIKc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0 SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2Zp cnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsr X19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9f Zmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAg KytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgewogICAgICArK19f Zmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBf X2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9CgoKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgbWF4X2VsZW1lbnQoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBf X3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAo Kl9fcmVzdWx0IDwgKl9fZmlyc3QpCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4g X19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJl PgpfRm9yd2FyZEl0ZXIgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19m aXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmly c3QgIT0gX19sYXN0KQogICAgaWYgKF9fY29tcCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgX19yZXN1 bHQgPSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlcj4KX0ZvcndhcmRJdGVyIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2Zp cnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCpfX2ZpcnN0IDwgKl9f cmVzdWx0KQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4KX0ZvcndhcmRJdGVy IG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0Zvcndh cmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkK ICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdCkpCiAgICAgIF9fcmVzdWx0ID0gX19m aXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp b25hbEl0ZXI+CmJvb2wgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz dCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsK ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09 IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZv cig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAg IGlmICgqX19pIDwgKl9faWkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFz dDsKICAgICAgd2hpbGUgKCEoKl9faSA8ICotLV9faikpCiAgICAgICAge30KICAgICAgaXRlcl9z d2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4g dHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmly c3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxj bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpib29sIG5leHRfcGVybXV0 YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAg cmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19p OwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsK ICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsK ICAgIC0tX19pOwogICAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpIHsKICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19q KSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZlcnNlKF9f aWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBfX2Zp cnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNl OwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4KYm9vbCBw cmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h bEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg aWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFs SXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0 dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKCpfX2lpIDwgKl9f aSkgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAo ISgqLS1fX2ogPCAqX19pKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwog ICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAg aWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAg ICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv bmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rp b25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAg X0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBf X2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3Io OzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBp ZiAoX19jb21wKCpfX2lpLCAqX19pKSkgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0g X19sYXN0OwogICAgICB3aGlsZSAoIV9fY29tcCgqLS1fX2osICpfX2kpKQogICAgICAgIHt9CiAg ICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAg ICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2 ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9CgoK CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9JbnB1dEl0 ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEs CiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJk SXRlciBfX2xhc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGZvciAoIDsg X19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkKICAgIGZvciAoX0ZvcndhcmRJdGVyIF9f aXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgIGlmICgq X19maXJzdDEgPT0gKl9faXRlcikKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgcmV0dXJuIF9f bGFzdDE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJ dGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAg ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytf X2ZpcnN0MSkKICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIg IT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19pdGVy KSkKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgcmV0dXJuIF9fbGFzdDE7Cn0KIyAzNDE5ICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0ZvcndhcmRJdGVyMSBfX2ZpbmRfZW5k KF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19s YXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3 YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJu IF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsK ICAgIHdoaWxlICgxKSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAg PSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgaWYg KF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAg ZWxzZSB7CiAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgX19maXJzdDEg PSBfX25ld19yZXN1bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgfQogIH0KfQoK dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsCiAgICAg ICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIxIF9fZmluZF9lbmQoX0Zv cndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3Qy LAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRf aXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBf X2NvbXApCnsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2xhc3QxOwog IGVsc2UgewogICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICB3aGlsZSAo MSkgewogICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgID0gc2VhcmNoKF9f Zmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKICAgICAgaWYgKF9f bmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgZWxz ZSB7CiAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgX19maXJzdDEgPSBf X25ld19yZXN1bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgfQogIH0KfQoKCnRl bXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0 ZXIyPgpfQmlkaXJlY3Rpb25hbEl0ZXIxCl9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBf X2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAg ICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90 YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0 ZXIxOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2 SXRlcjI7CgogIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0ZXIyIF9fcmxh c3QyKF9fZmlyc3QyKTsKICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShf X2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRl cjIoX19sYXN0MiksIF9fcmxhc3QyKTsKCiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAg IHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3Vs dCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19m aXJzdDIsIF9fbGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cn0KCnRlbXBsYXRlIDxj bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAg ICAgICAgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0JpZGlyZWN0aW9uYWxJdGVyMQpfX2ZpbmRf ZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19s YXN0MSwKICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rp b25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcs IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLAogICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg X19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9S ZXZJdGVyMTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4g X1Jldkl0ZXIyOwoKICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogIF9SZXZJdGVyMiBf X3JsYXN0MihfX2ZpcnN0Mik7CiAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRl cjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jl dkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29tcCk7CgogIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICByZXR1cm4gX19sYXN0 MTsKICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQu YmFzZSgpOwogICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3Qy KSk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgX0ZvcndhcmRJdGVyMQpmaW5kX2Vu ZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg IF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJz dDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgIF9faXRl cmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3Jf Y2F0ZWdvcnkoX19maXJzdDIpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNs YXNzIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxp bmUgX0ZvcndhcmRJdGVyMQpmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2Fy ZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJk SXRlcjIgX19sYXN0MiwKICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHJldHVybiBfX2ZpbmRfZW5kKF9fZmly c3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICBfX2l0 ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y X2NhdGVnb3J5KF9fZmlyc3QyKSwKICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoKCgoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmJvb2wg X19pc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9EaXN0YW5jZSBfX24pCnsKICBf RGlzdGFuY2UgX19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2No aWxkIDwgX19uOyArK19fY2hpbGQpIHsKICAgIGlmIChfX2ZpcnN0W19fcGFyZW50XSA8IF9fZmly c3RbX19jaGlsZF0pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICgoX19jaGlsZCAmIDEpID09 IDApCiAgICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1N0cmljdFdlYWtP cmRlcmluZz4KYm9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1N0cmlj dFdlYWtPcmRlcmluZyBfX2NvbXAsCiAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX24pCnsKICBf RGlzdGFuY2UgX19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2No aWxkIDwgX19uOyArK19fY2hpbGQpIHsKICAgIGlmIChfX2NvbXAoX19maXJzdFtfX3BhcmVudF0s IF9fZmlyc3RbX19jaGlsZF0pKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoKF9fY2hpbGQg JiAxKSA9PSAwKQogICAgICArK19fcGFyZW50OwogIH0KICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgYm9vbCBpc19oZWFwKF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19s YXN0IC0gX19maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs YXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKCgogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19jb21wLCBfX2xhc3Qg LSBfX2ZpcnN0KTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CmJvb2wgaXNf c29ydGVkKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIHRydWU7 CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIGZvciAoKytfX25leHQ7IF9fbmV4 dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KSB7CiAgICBpZiAoKl9fbmV4 dCA8ICpfX2ZpcnN0KQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoKICByZXR1cm4gdHJ1ZTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4K Ym9vbCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiB0cnVlOwoKICBf Rm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICBmb3IgKCsrX19uZXh0OyBfX25leHQgIT0g X19sYXN0OyBfX2ZpcnN0ID0gX19uZXh0LCArK19fbmV4dCkgewogICAgaWYgKF9fY29tcCgqX19u ZXh0LCAqX19maXJzdCkpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0cnVlOwp9 Cgp9CiMgNjYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwoj IDUwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAxICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIgMSAzCiMgNDMgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgY29uc3QgX0NoYXJUCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoKICAgIF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3Qg dHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBl CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9T X21heF9zaXplID0gKCgobnBvcyAtIHNpemVvZihfUmVwKSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkg LyA0OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6bnBvczsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6X1NfZW1wdHlfcmVwX3N0b3JhZ2VbCiAgICAoc2l6ZW9mKF9SZXApICsg c2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUp XTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcj4KICAgICAgX0NoYXJU KgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX1Nf Y29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19h LAogICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAg aWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBf U19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgogICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOwog ICAgICAgIHNpemVfdHlwZSBfX2kgPSAwOwogICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAm JiBfX2kgPCBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICB7CiAgICAg ICAgICAgIF9fYnVmW19faSsrXSA9ICpfX2JlZzsKICAgICAgICAgICAgKytfX2JlZzsKICAgICAg ICAgIH0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19pLCBfX2EpOwogICAg ICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsKICAg ICAgICBfX3ItPl9NX2xlbmd0aCA9IF9faTsKICAgICAgICB0cnkKICAgICAgICAgIHsKCgoKICAg ICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfQ2hhclQq IF9fcCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9sZW5ndGg7CiAgICAgICAgICAgICAg ICBfQ2hhclQqIF9fbGFzdCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsK ICAgICAgICAgICAgICAgIGZvciAoOzspCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19wIC0gX19yLT5fTV9yZWZkYXRh KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJtaW5hbDsKICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChfX3AgPT0gX19sYXN0KQogICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgKl9fcCsrID0gKl9f YmVnOwogICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIH0KCiAg ICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsK ICAgICAgICAgICAgICAgIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiAr IDEsIF9fYSk7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX2Fub3RoZXItPl9N X3JlZmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fcmVm ZGF0YSgpLCBfX2xlbik7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAg ICAgICAgICAgICAgIF9fciA9IF9fYW5vdGhlcjsKICAgICAgICAgICAgICAgIF9fci0+X01fbGVu Z3RoID0gX19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGNhdGNoKC4u LikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAg ICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBf X2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAg ICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcg PSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fYmVnLCBfX2VuZCkpOwoKICAgICAg ICBpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJu IF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICAgIF9SZXAqIF9fciA9IF9SZXA6 Ol9TX2NyZWF0ZShfX2RuZXcsIF9fYSk7CiAgICAgICAgdHJ5CiAgICAgICAgICB7IF9TX2NvcHlf Y2hhcnMoX19yLT5fTV9yZWZkYXRhKCksIF9fYmVnLCBfX2VuZCk7IH0KICAgICAgICBjYXRjaCgu Li4pCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAg ICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fZG5ldzsK CiAgICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19kbmV3XSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwog ICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIF9DaGFy VCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfU19jb25z dHJ1Y3Qoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICB7 CiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgcmV0dXJuIF9T X2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19j cmVhdGUoX19uLCBfX2EpOwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19uKQog ICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fci0+X01fcmVmZGF0YSgpLCBfX24sIF9f Yyk7CiAgICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX19yLT5f TV9kZXN0cm95KF9fYSk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIF9fci0+X01f bGVuZ3RoID0gX19uOwogICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX25dID0gX1JlcDo6X1NfdGVy bWluYWw7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhj b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgOiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9yZXAo KS0+X01fZ3JhYihfQWxsb2MoKSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwKICAgICAgICAgICAg ICAgICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxs b2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNpemVfdHlwZSgpLCBfQ2hh clQoKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgOiBfTV9kYXRhcGx1cyhf U19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX0FsbG9jKCkpLCBfQWxsb2MoKSkK ICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf X3BvcywKICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkK ICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9f YSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg X19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9f cywgX19zICsgX19uLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQq IF9fcywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChf X3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSwgX19hKSwgX19hKQogICAgeyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNp Y19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAg ICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX24sIF9fYywgX19hKSwgX19hKQogICAgeyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXIg X19iZWcsIF9JbnB1dEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRh cGx1cyhfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYg X19zdHIpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5fTV9yZXAoKSkKICAgICAg ICB7CgogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gdGhpcy0+Z2V0X2FsbG9jYXRvcigp OwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9fYSwg X19zdHIuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9f YSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJiBfX2EpIHRocm93 ICgpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkgKyAoX01fY2Fw YWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpOwogICAgICBfUmF3X2J5dGVzX2FsbG9jKF9fYSku ZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSwgX19zaXplKTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjpfTV9sZWFrX2hhcmQoKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgp KQogICAgICAgIF9NX211dGF0ZSgwLCAwLCAwKTsKICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFr ZWQoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjoKICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf X2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX29sZF9zaXpl ID0gdGhpcy0+c2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdfc2l6ZSA9IF9fb2xk X3NpemUgKyBfX2xlbjIgLSBfX2xlbjE7CiAgICAgIGNvbnN0IF9DaGFyVCogX19zcmMgPSBfTV9k YXRhKCkgKyBfX3BvcyArIF9fbGVuMTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9faG93X211Y2gg PSBfX29sZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7CgogICAgICBpZiAoX01fcmVwKCktPl9NX2lz X3NoYXJlZCgpIHx8IF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpKQogICAgICAgIHsKCiAgICAgICAg ICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfUmVwKiBf X3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19hKTsKICAgICAgICAgIHRyeQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zKQogICAgICAgICAgICAgICAgdHJhaXRz X3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX2RhdGEoKSwgX19wb3MpOwogICAgICAg ICAgICAgIGlmIChfX2hvd19tdWNoKQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHko X19yLT5fTV9yZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICAgICAgfQogICAgICAgICAg Y2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19yLT5fTV9kaXNwb3NlKGdl dF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg ICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fci0+X01f cmVmZGF0YSgpKTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2hvd19tdWNoICYmIF9fbGVuMSAh PSBfX2xlbjIpCiAgICAgICAgewoKICAgICAgICAgIHRyYWl0c190eXBlOjptb3ZlKF9NX2RhdGEo KSArIF9fcG9zICsgX19sZW4yLCBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgfQogICAgICBf TV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBf X25ld19zaXplOwogICAgICBfTV9kYXRhKClbX19uZXdfc2l6ZV0gPSBfUmVwOjpfU190ZXJtaW5h bDsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6cmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpCiAgICB7CiAgICAgIGlmIChfX3Jl cyA+IHRoaXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQogICAgICAg IHsKICAgICAgICAgIGlmIChfX3JlcyA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICAgIF9f dGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2VydmUiKTsKICAgICAgICAgIGFs bG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9DaGFyVCogX190 bXAgPSBfTV9yZXAoKS0+X01fY2xvbmUoX19hLCBfX3JlcyAtIHRoaXMtPnNpemUoKSk7CiAgICAg ICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3RtcCk7 CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6c3dhcChiYXNpY19zdHJpbmcmIF9fcykKICAgIHsKICAgICAgaWYgKF9N X3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxl KCk7CiAgICAgIGlmIChfX3MuX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgIF9fcy5f TV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmICh0aGlzLT5nZXRfYWxsb2NhdG9y KCkgPT0gX19zLmdldF9hbGxvY2F0b3IoKSkKICAgICAgICB7CiAgICAgICAgICBfQ2hhclQqIF9f dG1wID0gX01fZGF0YSgpOwogICAgICAgICAgX01fZGF0YShfX3MuX01fZGF0YSgpKTsKICAgICAg ICAgIF9fcy5fTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CgogICAgICBlbHNlCiAgICAgICAgewog ICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3Mu Z2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDIoX19zLl9NX2li ZWdpbigpLCBfX3MuX01faWVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz LT5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgKnRoaXMgPSBfX3RtcDI7CiAgICAgICAgICBf X3MgPSBfX3RtcDE7CiAgICAgICAgfQogICAgfQojIDM1NiAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXAqCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9TX2NyZWF0ZShzaXplX3QgX19jYXBhY2l0eSwg Y29uc3QgX0FsbG9jJiBfX2FsbG9jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKCgogICAgICBpZiAoX19jYXBh Y2l0eSA+IF9TX21heF9zaXplKQoKCgogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNp Y19zdHJpbmc6Ol9TX2NyZWF0ZSIpOwoKCgoKICAgICAgc2l6ZV90IF9fc2l6ZSA9IChfX2NhcGFj aXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKCgogICAgICB2b2lkKiBf X3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOwogICAg ICBfUmVwICpfX3AgPSBuZXcgKF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01fY2FwYWNpdHkg PSBfX2NhcGFjaXR5OwogICAgICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfX3AtPl9N X2xlbmd0aCA9IDA7CiAgICAgIHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9j bG9uZShjb25zdCBfQWxsb2MmIF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAgIHsKICAgICAg X1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9NX2xlbmd0aCArIF9fcmVzLCBfX2FsbG9jKTsK ICAgICAgaWYgKF9NX2xlbmd0aCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg eyB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgpLCBfTV9s ZW5ndGgpOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBfX3ItPl9NX2Rlc3Ryb3koX19hbGxvYyk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOwogICAgICBy ZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogIGlubGluZSBib29sCgoKCgog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19l eGNlc3Nfc2xvcChzaXplX3QgX19zLCBzaXplX3QgX19yKQoKICAgIHsKICAgICAgcmV0dXJuIDIg KiAoX19zIDw9IDE2ID8gMTYgOiBfX3MpIDwgX19yOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2l6ZShzaXplX3R5cGUg X19uLCBfQ2hhclQgX19jKQogICAgewogICAgICBpZiAoX19uID4gbWF4X3NpemUoKSkKICAgICAg ICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNpemUiKTsKICAgICAgc2l6 ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSA8IF9fbikKICAg ICAgICB0aGlzLT5hcHBlbmQoX19uIC0gX19zaXplLCBfX2MpOwogICAgICBlbHNlIGlmIChfX24g PCBfX3NpemUpCiAgICAgICAgdGhpcy0+ZXJhc2UoX19uKTsKCiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6CiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0 SXRlciBfX2sxLAogICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19rMiwgaW5wdXRfaXRlcmF0 b3JfdGFnKQogICAgICB7CiAgICAgICAgYmFzaWNfc3RyaW5nIF9fcyhfX2sxLCBfX2syKTsKICAg ICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3MuX01faWJlZ2luKCksIF9f cy5fTV9pZW5kKCkpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFj ZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfRm9yd2FyZEl0ZXIgX19rMSwKICAgICAg ICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19rMiwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICAg IHsKICAgICAgICBzaXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7CiAgICAgICAgc2l6ZV90 eXBlIF9fZG1heCA9IHRoaXMtPm1heF9zaXplKCk7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9 IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19rMSwgX19rMikpOwoKICAgICAgICBp ZiAoX19kbWF4IDw9IF9fZG5ldykKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNp Y19zdHJpbmc6Ol9NX3JlcGxhY2UiKTsKICAgICAgICBzaXplX3R5cGUgX19vZmYgPSBfX2kxIC0g X01faWJlZ2luKCk7CiAgICAgICAgX01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQsIF9fZG5ldyk7Cgog ICAgICAgIGlmIChfX2RuZXcpCiAgICAgICAgICBfU19jb3B5X2NoYXJzKF9NX2RhdGEoKSArIF9f b2ZmLCBfX2sxLCBfX2syKTsKCiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3Mx LCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAg c2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpCiAgICB7CiAgICAgIHJldHVybiB0aGlz LT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zMSksIF9NX2ZvbGQoX19wb3MxLCBfX24xKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fY2hlY2soX19wb3MyKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvczIsIF9fbjIpKTsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYKICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcm IF9fc3RyKQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19zaXplID0gX19zdHIuc2l6ZSgpOwog ICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3NpemUgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChf X2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAg ICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9p YmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01faWVuZCgpKTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNp Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICB7CgoK CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3N0ci5zaXplKCkgLSBfX3BvcywgX19uKSAr IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAg ICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVu ZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LF9UcmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw ZSBfX24pCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsK ICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZl KF9fbGVuKTsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCks IF9fcywgX19zICsgX19uKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9U cmFpdHMsX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoK ICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgewogICAgICBzaXplX3R5 cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNh cGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgICByZXR1cm4gdGhp cy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29u c3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs X1RyYWl0cyxfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8 X0NoYXJULF9UcmFpdHMsX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5 cGUgX19sZW4gPSBfVHJhaXRzOjpsZW5ndGgoX19saHMpOwogICAgICBfX3N0cmluZ190eXBlIF9f c3RyOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgpKTsKICAgICAgX19z dHIuYXBwZW5kKF9fbGhzLCBfX2xocyArIF9fbGVuKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhz KTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNp Y19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVk ZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7 CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX19y aHMuc2l6ZSgpOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAgICAgIF9fc3RyLmFw cGVuZChfX3NpemVfdHlwZSgxKSwgX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwog ICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46OgogICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUg X19uMiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19p MTsKICAgICAgc2l6ZV90eXBlIF9fb2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgaWYg KG1heF9zaXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0gX19uMikKICAgICAgICBfX3Ro cm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIF9NX211dGF0 ZSAoX19vZmYxLCBfX24xLCBfX24yKTsKCiAgICAgIGlmIChfX24yKQogICAgICAgIHRyYWl0c190 eXBlOjphc3NpZ24oX01fZGF0YSgpICsgX19vZmYxLCBfX24yLCBfX2MpOwogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlw ZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAg ICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsKCiAgICAgIGlm IChfX24gPiB0aGlzLT5zaXplKCkgLSBfX3BvcykKICAgICAgICBfX24gPSB0aGlzLT5zaXplKCkg LSBfX3BvczsKCiAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01fZGF0YSgpICsgX19wb3Ms IF9fbik7CgogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19z LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVf dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsK ICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgIGZvciAoOyBfX3hw b3MgKyBfX24gPD0gX19zaXplOyArK19feHBvcykKICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNv bXBhcmUoX19kYXRhICsgX194cG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgIHJldHVybiBf X3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVf dHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNp emUoKTsKICAgICAgc2l6ZV90eXBlIF9fcmV0ID0gbnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19z aXplKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgp OwogICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgICAgY29u c3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBf X2MpOwogICAgICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7 CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1l IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChjb25zdCBfQ2hh clQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAg ICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19uIDw9IF9fc2l6 ZSkKICAgICAgICB7CiAgICAgICAgICBfX3BvcyA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fbiAsX19w b3MpOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAg ICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJl KF9fZGF0YSArIF9fcG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBf X3BvczsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsKICAgICAg ICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5 cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXpl KCk7CiAgICAgIGlmIChfX3NpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9feHBvcyA9 IF9fc2l6ZSAtIDE7CiAgICAgICAgICBpZiAoX194cG9zID4gX19wb3MpCiAgICAgICAgICAgIF9f eHBvcyA9IF9fcG9zOwoKICAgICAgICAgIGZvciAoKytfX3hwb3M7IF9feHBvcy0tID4gMDsgKQog ICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQog ICAgICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46OgogICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9z LCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwg dGhpcy0+c2l6ZSgpOyArK19fcG9zKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCog X19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Bvc10pOwogICAg ICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgIH0KICAgICAg cmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6 ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUg X19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7 CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19w b3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190 eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICBy ZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0gIT0g MCk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFt ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rf b2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29u c3QKICAgIHsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsgX19uICYm IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlw ZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19feHBvc10pKQogICAgICAgICAgcmV0dXJuIF9f eHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKF9DaGFy VCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9feHBvcyA9 IF9fcG9zOwogICAgICBmb3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19feHBvcykKICAg ICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX194cG9zXSwgX19jKSkKICAgICAg ICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5 cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rf bm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p IGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg IGlmIChfX3NpemUgJiYgX19uKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9f cG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRh KClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9 CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBj b25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBp ZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9fcG9zKQogICAg ICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX19zaXplXSwgX19jKSkKICAg ICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxl IChfX3NpemUtLSk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29t cGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYg X19zdHIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7 CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3Mg PiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29t cGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IG1pbihfX3NpemUgLSBfX3BvcywgX19u KTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBp bnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fc3RyLmRh dGEoKSwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19v c2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19w b3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAg ICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAgIHNp emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0g X19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MxID4gX19zaXplIHx8IF9fcG9zMiA+IF9fb3Np emUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIp OwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MxLCBfX24xKTsK ICAgICAgc2l6ZV90eXBlIF9fcm9zaXplID0gbWluKF9fb3NpemUgLSBfX3BvczIsIF9fbjIpOwog ICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19yb3NpemUpOwogICAgICBpbnQg X19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MxLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuZGF0YSgpICsgX19wb3MyLCBfX2xlbik7 CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX3Jvc2l6ZTsKICAgICAg cmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0 CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGludCBf X3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19zaXplKTsKICAgICAg aWYgKCFfX3IpCiAgICAgICAgX19yID0gX19zaXplIC0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp OwogICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmlu ZyA8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywg c2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewogICAgICBzaXpl X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAg ICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAg ICAgc2l6ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgIHNp emVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6ZV90 eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRz X3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOwogICAgICBpZiAo IV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULF9UcmFpdHMsX0Fs bG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0 IF9DaGFyVCogX19zLAogICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3QKICAgIHsKICAg ICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19z aXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUi KTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gbWluKHRyYWl0c190eXBlOjpsZW5ndGgoX19z KSwgX19uMik7CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBf X24xKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAg ICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywg X19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsK ICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3Mg X1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgdm9pZAogICAgX1Nfc3RyaW5nX2NvcHkoY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsCiAgICAgICAgICAg ICAgICAgICBfQ2hhclQqIF9fYnVmLCB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBfX2J1ZnNp eikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5 cGU7CiAgICAgIHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIHNpemVf dHlwZSBfX2J5dGVzID0gbWluKF9fc3Ryc2l6ZSwgX19idWZzaXogLSAxKTsKICAgICAgX1RyYWl0 czo6Y29weShfX2J1ZiwgX19zdHIuZGF0YSgpLCBfX2J5dGVzKTsKICAgICAgX19idWZbX19ieXRl c10gPSBfQ2hhclQoKTsKICAgIH0KfQojIDUxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X3N0cmluZy5oIiAyIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5o IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5oIiAxIDMKIyAz OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9jdHlwZS5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL2N0 eXBlLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMgNDAgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi IDIgMwoKCgoKCgplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8ICgwKSkgPDwg OCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ICgoMSA8PCAo MSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2FscGhhID0gKCgyKSA8IDggPyAo KDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwKICBfSVNkaWdpdCA9ICgoMykg PCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAgX0lTeGRpZ2l0 ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+IDgpKSwKICBf SVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwgKDUpKSA+PiA4 KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8IDgpIDogKCgxIDw8ICg2 KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8PCA4KSA6ICgo MSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8ICg4KSkgPDwg OCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkpIDwgOCA/ICgoMSA8PCAo OSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgxMCkgPCA4ID8g KCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNhbG51bSA9ICgo MTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4KSkKfTsKIyA3 NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQgc2hvcnQg aW50ICpfX2N0eXBlX2I7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b2xvd2Vy OwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG91cHBlcjsKIyA5MSAiL3Vzci9p bmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVtIChpbnQpIHRocm93ICgpOwpleHRl cm4gaW50IGlzYWxwaGEgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNjbnRybCAoaW50KSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBpc2RpZ2l0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlz bG93ZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNncmFwaCAoaW50KSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBpc3ByaW50IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHVuY3QgKGlu dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNzcGFjZSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGlu dCBpc3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzeGRpZ2l0IChpbnQpIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgaXNibGFuayAoaW50KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg dG9sb3dlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0b3VwcGVyIChpbnQgX19j KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBpc2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCB0b2FzY2lpIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBf dG91cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfdG9sb3dlciAoaW50KSB0aHJvdyAo KTsKIyAyMTAgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2Nh bGUuaCIgMSAzCiMgMjExICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCiMgMjIzICIvdXNyL2lu Y2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IF9faXNhbG51bV9sIChpbnQsIF9fbG9jYWxlX3Qp IHRocm93ICgpOwpleHRlcm4gaW50IF9faXNhbHBoYV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93 ICgpOwpleHRlcm4gaW50IF9faXNjbnRybF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpl eHRlcm4gaW50IF9faXNkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4g aW50IF9faXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9f aXNncmFwaF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNwcmlu dF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNwdW5jdF9sIChp bnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNzcGFjZV9sIChpbnQsIF9f bG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN1cHBlcl9sIChpbnQsIF9fbG9jYWxl X3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXN4ZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0 aHJvdyAoKTsKCmV4dGVybiBpbnQgX19pc2JsYW5rX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgX190b2xvd2VyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9f bCkgdGhyb3cgKCk7CiMgMjc2ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwp9CiMgMzkgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2N0eXBlLmgiIDIgMwojIDU1ICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6aXNh bG51bTsKICB1c2luZyA6OmlzYWxwaGE7CiAgdXNpbmcgOjppc2NudHJsOwogIHVzaW5nIDo6aXNk aWdpdDsKICB1c2luZyA6OmlzZ3JhcGg7CiAgdXNpbmcgOjppc2xvd2VyOwogIHVzaW5nIDo6aXNw cmludDsKICB1c2luZyA6OmlzcHVuY3Q7CiAgdXNpbmcgOjppc3NwYWNlOwogIHVzaW5nIDo6aXN1 cHBlcjsKICB1c2luZyA6OmlzeGRpZ2l0OwogIHVzaW5nIDo6dG9sb3dlcjsKICB1c2luZyA6OnRv dXBwZXI7Cn0KIyA0NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMK IyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2crKy12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Ro cm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9p ZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3df YmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3Mp OwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7Cgog IHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg X190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df cnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihj b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3Qg Y2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9f cyk7Cn0KIyA0NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCm5h bWVzcGFjZSBzdGQKewojIDU2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIHZl Y3RvcjsKICBjbGFzcyBsb2NhbGU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp bmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwcmludChfQ2hhclQsIGNv bnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9v bAogICAgaXNjbnRybChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQsIGNvbnN0IGxvY2Fs ZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNs b3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbHBoYShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hh clQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp bmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN4ZGlnaXQoX0NoYXJULCBjb25z dCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK ICAgIGlzYWxudW0oX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZ3JhcGgoX0NoYXJULCBjb25zdCBsb2NhbGUm KTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91 cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgoK CiAgY2xhc3MgY3R5cGVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz cyBjdHlwZTsKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBlPGNoYXI+OwoKICB0ZW1wbGF0ZTw+IGNs YXNzIGN0eXBlPHdjaGFyX3Q+OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz cyBjdHlwZV9ieW5hbWU7CgoKICBjbGFzcyBjb2RlY3Z0X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xh c3MgY29kZWN2dDsKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0 ZV90PjsKCiAgdGVtcGxhdGU8PiBjbGFzcyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVf dD47CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlw ZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh clQ+ID4KICAgIGNsYXNzIG51bV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBu dW1fcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3Q7CiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdF9ieW5hbWU7CgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlOwogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4gY2xhc3MKICAgIGNvbGxhdGVfYnluYW1lOwoKCiAgY2xhc3MgdGltZV9iYXNlOwog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZf aXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4g PgogICAgY2xhc3MgdGltZV9nZXRfYnluYW1lOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xh c3MgdGltZV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl ciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5h bWU7CgoKICBjbGFzcyBtb25leV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBt b25leV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9 IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBtb25leV9wdXQ7CiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBjbGFzcyBtb25l eXB1bmN0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgog ICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU7CgoKICBjbGFzcyBtZXNzYWdlc19iYXNlOwogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzOwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTsKCgogIGNsYXNzIGxvY2Fs ZQogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgY2F0ZWdvcnk7CgoKICAg IGNsYXNzIGZhY2V0OwogICAgY2xhc3MgaWQ7CiAgICBjbGFzcyBfSW1wbDsKCiAgICBmcmllbmQg Y2xhc3MgZmFjZXQ7CiAgICBmcmllbmQgY2xhc3MgX0ltcGw7CgogICAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29u c3QgbG9jYWxlJik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQg Ym9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsKCgoKICAgIHN0YXRp YyBjb25zdCBjYXRlZ29yeSBub25lID0gMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjdHlw ZSA9IDFMIDw8IDA7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbnVtZXJpYyA9IDFMIDw8IDE7 CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgY29sbGF0ZSA9IDFMIDw8IDI7CiAgICBzdGF0aWMg Y29uc3QgY2F0ZWdvcnkgdGltZSA9IDFMIDw8IDM7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkg bW9uZXRhcnkgPSAxTCA8PCA0OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1lc3NhZ2VzID0g MUwgPDwgNTsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBhbGwgPSAoY29sbGF0ZSB8IGN0eXBl IHwgbW9uZXRhcnkgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bnVtZXJpYyB8IHRpbWUgfCBtZXNzYWdlcyk7CgoKICAgIGxvY2FsZSgpIHRocm93KCk7CgogICAg bG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICBleHBsaWNpdAogICAg bG9jYWxlKGNvbnN0IGNoYXIqIF9fc3RkX25hbWUpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUm IF9fYmFzZSwgY29uc3QgY2hhciogX19zLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgbG9jYWxlKGNv bnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7 CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUoY29uc3QgbG9jYWxl JiBfX290aGVyLCBfRmFjZXQqIF9fZik7CgogICAgfmxvY2FsZSgpIHRocm93KCk7CgogICAgY29u c3QgbG9jYWxlJgogICAgb3BlcmF0b3I9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsK CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZQogICAgICBjb21iaW5l KGNvbnN0IGxvY2FsZSYgX19vdGhlcik7CgoKICAgIHN0cmluZwogICAgbmFtZSgpIGNvbnN0OwoK ICAgIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJv dyAoKTsKCiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3Ro ZXIpIGNvbnN0IHRocm93ICgpCiAgICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhl cikpOyB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICBjb25z dCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0OwoKCiAg ICBzdGF0aWMgbG9jYWxlCiAgICBnbG9iYWwoY29uc3QgbG9jYWxlJik7CgogICAgc3RhdGljIGNv bnN0IGxvY2FsZSYKICAgIGNsYXNzaWMoKTsKCiAgcHJpdmF0ZToKCiAgICBfSW1wbCogX01faW1w bDsKCgogICAgc3RhdGljIF9JbXBsKiBfU19jbGFzc2ljOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9T X2dsb2JhbDsKCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX251bV9jYXRlZ29yaWVzID0gNjsK ICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfbnVtX2ZhY2V0cyA9IDI2OwoKICAgIGV4cGxpY2l0 CiAgICBsb2NhbGUoX0ltcGwqKSB0aHJvdygpOwoKICAgIHN0YXRpYyBpbmxpbmUgdm9pZAogICAg X1NfaW5pdGlhbGl6ZSgpCiAgICB7IGlmICghX1NfY2xhc3NpYykgY2xhc3NpYygpOyB9CgogICAg c3RhdGljIGNhdGVnb3J5CiAgICBfU19ub3JtYWxpemVfY2F0ZWdvcnkoY2F0ZWdvcnkpOwoKICAg IHZvaWQKICAgIF9NX2NvYWxlc2NlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUm IF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6Ol9JbXBsCiAg ewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIHZlY3RvcjxmYWNldCosIGFsbG9jYXRvcjxmYWNldCo+ ID4gX192ZWNfZmFjZXQ7CgoKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xh c3MgbG9jYWxlOjpmYWNldDsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZy aWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNl dChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKICBwcml2YXRlOgoKICAgIHNpemVfdCBfTV9yZWZl cmVuY2VzOwogICAgX192ZWNfZmFjZXQqIF9NX2ZhY2V0czsKICAgIHN0cmluZyBfTV9uYW1lc1tf U19udW1fY2F0ZWdvcmllc107CiAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlOwogICAgc3RhdGlj IGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX2N0eXBlW107CiAgICBzdGF0aWMgY29uc3Qg bG9jYWxlOjppZCogY29uc3QgX1NfaWRfbnVtZXJpY1tdOwogICAgc3RhdGljIGNvbnN0IGxvY2Fs ZTo6aWQqIGNvbnN0IF9TX2lkX2NvbGxhdGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6Omlk KiBjb25zdCBfU19pZF90aW1lW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3Qg X1NfaWRfbW9uZXRhcnlbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19p ZF9tZXNzYWdlc1tdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0KiBjb25zdCBf U19mYWNldF9jYXRlZ29yaWVzW107CgogICAgaW5saW5lIHZvaWQKICAgIF9NX2FkZF9yZWZlcmVu Y2UoKSB0aHJvdygpCiAgICB7ICsrX01fcmVmZXJlbmNlczsgfQoKICAgIGlubGluZSB2b2lkCiAg ICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgewogICAgICBpZiAoX01fcmVmZXJl bmNlcy0tID09IDApCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgZGVsZXRl IHRoaXM7IH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgeyB9CiAgICAgICAgfQog ICAgfQoKICAgIF9JbXBsKGNvbnN0IF9JbXBsJiwgc2l6ZV90KTsKICAgIF9JbXBsKHN0cmluZyBf X25hbWUsIHNpemVfdCk7CiAgIH5fSW1wbCgpIHRocm93KCk7CgogICAgYm9vbAogICAgX01fY2hl Y2tfc2FtZV9uYW1lKCkKICAgIHsKICAgICAgYm9vbCBfX3JldCA9IHRydWU7CiAgICAgIGZvciAo c2l6ZV90IGkgPSAwOyBpIDwgX1NfbnVtX2NhdGVnb3JpZXMgLSAxOyArK2kpCiAgICAgICAgX19y ZXQgJj0gX01fbmFtZXNbaV0gPT0gX01fbmFtZXNbaSArIDFdOwogICAgICByZXR1cm4gX19yZXQ7 CiAgICB9CiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3JpZXMoY29uc3QgX0ltcGwqLCBj YXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29yeShjb25zdCBfSW1wbCos IGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0Kik7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9mYWNl dChjb25zdCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqKTsKCiAgICB2b2lkCiAgICBfTV9pbnN0 YWxsX2ZhY2V0KGNvbnN0IGxvY2FsZTo6aWQqLCBmYWNldCopOwoKICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9GYWNldD4KICAgICAgaW5saW5lIHZvaWQKICAgICAgX01faW5pdF9mYWNldChfRmFjZXQq IF9fZmFjZXQpCiAgICAgIHsgX01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mYWNldCk7 IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGU6OmxvY2FsZShj b25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKQogICAgewogICAgICBfTV9pbXBsID0g bmV3IF9JbXBsKCpfX290aGVyLl9NX2ltcGwsIDEpOwogICAgICBfTV9pbXBsLT5fTV9pbnN0YWxs X2ZhY2V0KCZfRmFjZXQ6OmlkLCBfX2YpOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kg PCBfU19udW1fY2F0ZWdvcmllczsgKytfX2kpCiAgICAgICAgX01faW1wbC0+X01fbmFtZXNbX19p XSA9ICIqIjsKICAgIH0KCgogIGNsYXNzIGxvY2FsZTo6ZmFjZXQKICB7CiAgICBmcmllbmQgY2xh c3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CgogIHByb3RlY3RlZDoK ICAgIGV4cGxpY2l0CiAgICBmYWNldChzaXplX3QgX19yZWZzID0gMCkgdGhyb3coKTsKCiAgICB2 aXJ0dWFsCiAgICB+ZmFjZXQoKSB7IH07CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2NyZWF0ZV9j X2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcyk7CgogICAgc3RhdGlj IHZvaWQKICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKTsKCiAgcHJp dmF0ZToKICAgIHNpemVfdCBfTV9yZWZlcmVuY2VzOwoKICAgIHZvaWQKICAgIF9NX2FkZF9yZWZl cmVuY2UoKSB0aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJv dygpOwoKICAgIGZhY2V0KGNvbnN0IGZhY2V0Jik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNv bnN0IGZhY2V0Jik7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6OmlkCiAgewogIHByaXZhdGU6CiAg ICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CiAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAg ICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNl dD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93 ICgpOwoKCgoKICAgIG11dGFibGUgc2l6ZV90IF9NX2luZGV4OwoKCiAgICBzdGF0aWMgc2l6ZV90 IF9TX2hpZ2h3YXRlcjsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgaWQmKTsKCiAgICBp ZChjb25zdCBpZCYpOwoKICBwdWJsaWM6CgoKCiAgICBpZCgpIHsgfQogIH07CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBs b2NhbGUmIF9fbG9jKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAg aGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCk7Cn0KIyA0NCAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL2lvc19iYXNlLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvaW9zX2Jh c2UuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIGVudW0gX0lvc19GbXRmbGFncyB7IF9NX2lv c19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9w ZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4g X0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9f YikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8KF9Jb3NfRm10ZmxhZ3Mg X19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19j YXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3Nf Rm10ZmxhZ3MKICBvcGVyYXRvcl4oX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19i KQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGlj X2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfD0o X0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBf X2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciY9KF9Jb3NfRm10 ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19i OyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3JePShfSW9zX0ZtdGZsYWdzJiBf X2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBp bmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfihfSW9zX0ZtdGZsYWdzIF9fYSkKICB7IHJl dHVybiBfSW9zX0ZtdGZsYWdzKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVtIF9J b3NfT3Blbm1vZGUgeyBfTV9pb3Nfb3Blbm1vZGVfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5l IF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciYoX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1v ZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYg c3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJh dG9yfChfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lv c19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikp OyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JeKF9Jb3NfT3Blbm1vZGUgX19h LCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0 PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Bl bm1vZGUKICBvcGVyYXRvcnw9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2Ip CiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAg b3BlcmF0b3ImPShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0 dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9y Xj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2Eg PSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcn4oX0lvc19P cGVubW9kZSBfX2EpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZSh+c3RhdGljX2Nhc3Q8aW50Pihf X2EpKTsgfQoKCiAgZW51bSBfSW9zX0lvc3RhdGUgeyBfTV9pb3NfaW9zdGF0ZV9lbmQgPSAxTCA8 PCAxNiB9OwoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3ImKF9Jb3NfSW9zdGF0ZSBf X2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0 PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9z dGF0ZQogIG9wZXJhdG9yfChfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsg cmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxp bnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcl4oX0lvc19Jb3N0 YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGlj X2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lv c19Jb3N0YXRlCiAgb3BlcmF0b3J8PShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9f YikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQog IG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1 cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcl49 KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9f YSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J+KF9Jb3NfSW9zdGF0 ZSBfX2EpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9 CgogIGVudW0gX0lvc19TZWVrZGlyIHsgX01faW9zX3NlZWtkaXJfZW5kID0gMUwgPDwgMTYgfTsK CgogIGNsYXNzIGlvc19iYXNlCiAgewogIHB1YmxpYzoKCgogICAgY2xhc3MgZmFpbHVyZSA6IHB1 YmxpYyBleGNlcHRpb24KICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBleHBsaWNpdAogICAgICBm YWlsdXJlKGNvbnN0IHN0cmluZyYgX19zdHIpIHRocm93KCk7CgogICAgICB2aXJ0dWFsCiAgICAg IH5mYWlsdXJlKCkgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgd2hh dCgpIGNvbnN0IHRocm93KCk7CgogICAgcHJpdmF0ZToKICAgICAgZW51bSB7IF9NX2J1ZnNpemUg PSAyNTYgfTsKICAgICAgY2hhciBfTV9uYW1lW19NX2J1ZnNpemVdOwoKICAgIH07CgoKICAgIHR5 cGVkZWYgX0lvc19GbXRmbGFncyBmbXRmbGFnczsKCiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mg Ym9vbGFscGhhID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jvb2xhbHBoYSk7CiAgICBzdGF0 aWMgY29uc3QgZm10ZmxhZ3MgZGVjID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2RlYyk7CiAg ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZml4ZWQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nf Zml4ZWQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGhleCA9IGZtdGZsYWdzKF9faW9zX2Zs YWdzOjpfU19oZXgpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGludGVybmFsID0gZm10Zmxh Z3MoX19pb3NfZmxhZ3M6Ol9TX2ludGVybmFsKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBs ZWZ0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2xlZnQpOwogICAgc3RhdGljIGNvbnN0IGZt dGZsYWdzIG9jdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19vY3QpOwogICAgc3RhdGljIGNv bnN0IGZtdGZsYWdzIHJpZ2h0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3JpZ2h0KTsKICAg IHN0YXRpYyBjb25zdCBmbXRmbGFncyBzY2llbnRpZmljID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6 Ol9TX3NjaWVudGlmaWMpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3diYXNlID0gZm10 ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3diYXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn cyBzaG93cG9pbnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3BvaW50KTsKICAgIHN0 YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9zID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3No b3dwb3MpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNraXB3cyA9IGZtdGZsYWdzKF9faW9z X2ZsYWdzOjpfU19za2lwd3MpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVuaXRidWYgPSBm bXRmbGFncyhfX2lvc19mbGFnczo6X1NfdW5pdGJ1Zik7CiAgICBzdGF0aWMgY29uc3QgZm10Zmxh Z3MgdXBwZXJjYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VwcGVyY2FzZSk7CiAgICBz dGF0aWMgY29uc3QgZm10ZmxhZ3MgYWRqdXN0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6 X1NfYWRqdXN0ZmllbGQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGJhc2VmaWVsZCA9IGZt dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19iYXNlZmllbGQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZs YWdzIGZsb2F0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZmxvYXRmaWVsZCk7CgoK ICAgIHR5cGVkZWYgX0lvc19Jb3N0YXRlIGlvc3RhdGU7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0 ZSBiYWRiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19iYWRiaXQpOwogICAgc3RhdGljIGNv bnN0IGlvc3RhdGUgZW9mYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZW9mYml0KTsKICAg IHN0YXRpYyBjb25zdCBpb3N0YXRlIGZhaWxiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19m YWlsYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGdvb2RiaXQgPSBpb3N0YXRlKDApOwoK CiAgICB0eXBlZGVmIF9Jb3NfT3Blbm1vZGUgb3Blbm1vZGU7CiAgICBzdGF0aWMgY29uc3Qgb3Bl bm1vZGUgYXBwID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2FwcCk7CiAgICBzdGF0aWMgY29u c3Qgb3Blbm1vZGUgYXRlID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2F0ZSk7CiAgICBzdGF0 aWMgY29uc3Qgb3Blbm1vZGUgYmluYXJ5ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2Jpbik7 CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgaW4gPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nf aW4pOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIG91dCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdz OjpfU19vdXQpOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIHRydW5jID0gb3Blbm1vZGUoX19p b3NfZmxhZ3M6Ol9TX3RydW5jKTsKCgogICAgdHlwZWRlZiBfSW9zX1NlZWtkaXIgc2Vla2RpcjsK ICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGJlZyA9IHNlZWtkaXIoMCk7CiAgICBzdGF0aWMgY29u c3Qgc2Vla2RpciBjdXIgPSBzZWVrZGlyKDEpOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgZW5k ID0gc2Vla2RpcigyKTsKIyAyMTYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5o IiAzCiAgICBlbnVtIGV2ZW50CiAgICB7CiAgICAgIGVyYXNlX2V2ZW50LAogICAgICBpbWJ1ZV9l dmVudCwKICAgICAgY29weWZtdF9ldmVudAogICAgfTsKCiAgICB0eXBlZGVmIHZvaWQgKCpldmVu dF9jYWxsYmFjaykgKGV2ZW50LCBpb3NfYmFzZSYsIGludCk7CgogICAgdm9pZAogICAgcmVnaXN0 ZXJfY2FsbGJhY2soZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgpOwoKICBwcm90ZWN0 ZWQ6CgogICAgc3RyZWFtc2l6ZSBfTV9wcmVjaXNpb247CiAgICBzdHJlYW1zaXplIF9NX3dpZHRo OwogICAgZm10ZmxhZ3MgX01fZmxhZ3M7CgoKCiAgICBzdHJ1Y3QgX0NhbGxiYWNrX2xpc3QKICAg IHsKCiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0OwogICAgICBpb3NfYmFzZTo6ZXZlbnRf Y2FsbGJhY2sgX01fZm47CiAgICAgIGludCBfTV9pbmRleDsKICAgICAgaW50IF9NX3JlZmNvdW50 OwoKICAgICAgX0NhbGxiYWNrX2xpc3QoaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9fZm4sIGlu dCBfX2luZGV4LAogICAgICAgICAgICAgICAgICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYikKICAg ICAgOiBfTV9uZXh0KF9fY2IpLCBfTV9mbihfX2ZuKSwgX01faW5kZXgoX19pbmRleCksIF9NX3Jl ZmNvdW50KDApIHsgfQoKICAgICAgdm9pZAogICAgICBfTV9hZGRfcmVmZXJlbmNlKCkgeyArK19N X3JlZmNvdW50OyB9CgogICAgICBpbnQKICAgICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHsgcmV0 dXJuIF9NX3JlZmNvdW50LS07IH0KICAgIH07CgogICAgIF9DYWxsYmFja19saXN0KiBfTV9jYWxs YmFja3M7CgogICAgdm9pZAogICAgX01fY2FsbF9jYWxsYmFja3MoZXZlbnQgX19ldikgdGhyb3co KTsKCiAgICB2b2lkCiAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcyh2b2lkKTsKCgogICAgc3RydWN0 IF9Xb3JkcwogICAgewogICAgICB2b2lkKiBfTV9wd29yZDsKICAgICAgbG9uZyBfTV9pd29yZDsK ICAgIH07CgogICAgc3RhdGljIGNvbnN0IGludCBfU19sb2NhbF93b3JkcyA9IDg7CiAgICBfV29y ZHMgX01fd29yZF9hcnJheVtfU19sb2NhbF93b3Jkc107CiAgICBfV29yZHMgX01fZHVtbXk7CiAg ICBfV29yZHMqIF9NX3dvcmRzOwogICAgaW50IF9NX3dvcmRfbGltaXQ7CgogICAgX1dvcmRzJgog ICAgX01fZ3Jvd193b3JkcyhpbnQgX19pbmRleCk7CgoKICAgIGxvY2FsZSBfTV9pb3NfbG9jYWxl OwoKICAgIHZvaWQKICAgIF9NX2luaXQoKTsKCiAgcHVibGljOgoKCgoKCiAgICBjbGFzcyBJbml0 CiAgICB7CiAgICAgIGZyaWVuZCBjbGFzcyBpb3NfYmFzZTsKICAgIHB1YmxpYzoKICAgICAgSW5p dCgpOwogICAgICB+SW5pdCgpOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9zX2NyZWF0 ZShib29sIF9fc3luYyk7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19pb3NfZGVzdHJveSgp OwoKICAgIHByaXZhdGU6CiAgICAgIHN0YXRpYyBpbnQgX1NfaW9zX2Jhc2VfaW5pdDsKICAgICAg c3RhdGljIGJvb2wgX1Nfc3luY2VkX3dpdGhfc3RkaW87CiAgICB9OwoKCiAgICBpbmxpbmUgZm10 ZmxhZ3MKICAgIGZsYWdzKCkgY29uc3QgeyByZXR1cm4gX01fZmxhZ3M7IH0KCiAgICBpbmxpbmUg Zm10ZmxhZ3MKICAgIGZsYWdzKGZtdGZsYWdzIF9fZm10ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdz IF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzID0gX19mbXRmbDsKICAgICAgcmV0dXJu IF9fb2xkOwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRmbGFncyBfX2Zt dGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFn cyB8PSBfX2ZtdGZsOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIGZtdGZs YWdzCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwsIGZtdGZsYWdzIF9fbWFzaykKICAgIHsKICAg ICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgJj0gfl9fbWFzazsK ICAgICAgX01fZmxhZ3MgfD0gKF9fZm10ZmwgJiBfX21hc2spOwogICAgICByZXR1cm4gX19vbGQ7 CiAgICB9CgogICAgaW5saW5lIHZvaWQKICAgIHVuc2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01f ZmxhZ3MgJj0gfl9fbWFzazsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICBwcmVjaXNpb24o KSBjb25zdCB7IHJldHVybiBfTV9wcmVjaXNpb247IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQog ICAgcHJlY2lzaW9uKHN0cmVhbXNpemUgX19wcmVjKQogICAgewogICAgICBzdHJlYW1zaXplIF9f b2xkID0gX01fcHJlY2lzaW9uOwogICAgICBfTV9wcmVjaXNpb24gPSBfX3ByZWM7CiAgICAgIHJl dHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoKSBjb25z dCB7IHJldHVybiBfTV93aWR0aDsgfQoKICAgIGlubGluZSBzdHJlYW1zaXplCiAgICB3aWR0aChz dHJlYW1zaXplIF9fd2lkZSkKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3dpZHRo OwogICAgICBfTV93aWR0aCA9IF9fd2lkZTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAg IHN0YXRpYyBib29sCiAgICBzeW5jX3dpdGhfc3RkaW8oYm9vbCBfX3N5bmMgPSB0cnVlKTsKCgog ICAgbG9jYWxlCiAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgICBpbmxpbmUgbG9j YWxlCiAgICBnZXRsb2MoKSBjb25zdCB7IHJldHVybiBfTV9pb3NfbG9jYWxlOyB9CgoKICAgIHN0 YXRpYyBpbnQKICAgIHhhbGxvYygpIHRocm93KCk7CgogICAgaW5saW5lIGxvbmcmCiAgICBpd29y ZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRf bGltaXQpCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZHNbX19peF0gOiBfTV9ncm93 X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX2l3b3JkOwogICAgfQoKICAgIGlu bGluZSB2b2lkKiYKICAgIHB3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29y ZCA9IChfX2l4IDwgX01fd29yZF9saW1pdCkKICAgICAgICAgICAgICAgICAgICAgICAgPyBfTV93 b3Jkc1tfX2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAgIHJldHVybiBfX3dvcmQuX01f cHdvcmQ7CiAgICB9CgoKICAgIH5pb3NfYmFzZSgpOwoKICBwcm90ZWN0ZWQ6CiAgICBpb3NfYmFz ZSgpOwoKCiAgcHJpdmF0ZToKICAgIGlvc19iYXNlKGNvbnN0IGlvc19iYXNlJik7CgogICAgaW9z X2Jhc2UmCiAgICBvcGVyYXRvcj0oY29uc3QgaW9zX2Jhc2UmKTsKCiAgfTsKCgogIGlubGluZSBp b3NfYmFzZSYKICBib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0 Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg aW9zX2Jhc2UmCiAgbm9ib29sYWxwaGEoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu dW5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu bGluZSBpb3NfYmFzZSYKICBzaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFz ZS5zZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5s aW5lIGlvc19iYXNlJgogIG5vc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh c2UudW5zZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAg aW5saW5lIGlvc19iYXNlJgogIHNob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9f YmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgog IGlubGluZSBpb3NfYmFzZSYKICBub3Nob3dwb2ludChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAg IF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4gX19iYXNlOwog IH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAg ICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0K CiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAg IF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9 CgogIGlubGluZSBpb3NfYmFzZSYKICBza2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBf X2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBp bmxpbmUgaW9zX2Jhc2UmCiAgbm9za2lwd3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh c2UudW5zZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu bGluZSBpb3NfYmFzZSYKICB1cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh c2Uuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBp bmxpbmUgaW9zX2Jhc2UmCiAgbm91cHBlcmNhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBf X2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9 CgogIGlubGluZSBpb3NfYmFzZSYKICB1bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg IF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0K CiAgaW5saW5lIGlvc19iYXNlJgogIG5vdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsKICAg ICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsKICAgICByZXR1cm4gX19iYXNlOwog IH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBpbnRlcm5hbChpb3NfYmFzZSYgX19iYXNlKQogIHsK ICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aW50ZXJuYWwsIGlvc19iYXNlOjphZGp1c3RmaWVs ZCk7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBsZWZ0KGlv c19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmxlZnQsIGlvc19i YXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19i YXNlJgogIHJpZ2h0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jh c2U6OnJpZ2h0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9 CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgZGVjKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i YXNlLnNldGYoaW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4g X19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIGhleChpb3NfYmFzZSYgX19iYXNlKQog IHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpoZXgsIGlvc19iYXNlOjpiYXNlZmllbGQpOwog ICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBvY3QoaW9zX2Jhc2Um IF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6b2N0LCBpb3NfYmFzZTo6YmFz ZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGZp eGVkKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmZpeGVk LCBpb3NfYmFzZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l IGlvc19iYXNlJgogIHNjaWVudGlmaWMoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu c2V0Zihpb3NfYmFzZTo6c2NpZW50aWZpYywgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0 dXJuIF9fYmFzZTsKICB9Cgp9CiMgNDUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9z LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDEg MwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAzCgojIDEg Ii91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIg MSAzCiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwoj IDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDQxICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L2xvY2FsZWZ3ZC5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJl YW1idWYuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDEg MwojIDQ0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKCm5h bWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQs IF9UcmFpdHM+JiBfaW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9D aGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVh bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZgogICAgewog ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVm IF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6 OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpw b3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2Zm X3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxjaGFyX3R5cGU+IF9fY3R5cGVf dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlw ZT4gX19zdHJlYW1idWZfdHlwZTsKCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pb3M8Y2hhcl90 eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXJf dHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfb3N0cmVhbTxjaGFy X3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0 b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtYnVm X2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwoKICAgICAgZnJpZW5kIHN0cmVhbXNp emUKICAgICAgX19jb3B5X3N0cmVhbWJ1ZnM8PihiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNf dHlwZT4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUq IF9fc2JpbixfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KTsKCiAgICBwcm90ZWN0ZWQ6CgoKCgoK CiAgICAgIGNoYXJfdHlwZSogX01fYnVmOwoKCiAgICAgIGludF90eXBlIF9NX2J1Zl9zaXplOwoK CiAgICAgIGludF90eXBlIF9NX2J1Zl9zaXplX29wdDsKCgoKICAgICAgYm9vbCBfTV9idWZfdW5p ZmllZDsKCgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9pbl9iZWc7CiAgICAgIGNoYXJfdHlwZSog X01faW5fY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2VuZDsKICAgICAgY2hhcl90eXBlKiBf TV9vdXRfYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9jdXI7CiAgICAgIGNoYXJfdHlwZSog X01fb3V0X2VuZDsKCgogICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX01fbW9kZTsKCgogICAgICBs b2NhbGUgX01fYnVmX2xvY2FsZTsKCgogICAgICBib29sIF9NX2J1Zl9sb2NhbGVfaW5pdDsKCgoK CgoKICAgICAgaW50X3R5cGUgX01fcGJhY2tfc2l6ZTsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFj azsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19jdXJfc2F2ZTsKICAgICAgY2hhcl90eXBlKiBf TV9wYmFja19lbmRfc2F2ZTsKICAgICAgYm9vbCBfTV9wYmFja19pbml0OwoKCgoKICAgICAgdm9p ZAogICAgICBfTV9wYmFja19jcmVhdGUoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9wYmFja19p bml0KQogICAgICAgICAgewogICAgICAgICAgICBpbnRfdHlwZSBfX2Rpc3QgPSBfTV9pbl9lbmQg LSBfTV9pbl9jdXI7CiAgICAgICAgICAgIGludF90eXBlIF9fbGVuID0gbWluKF9NX3BiYWNrX3Np emUsIF9fZGlzdCk7CiAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX3BiYWNrLCBfTV9p bl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfTV9pbl9jdXI7 CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX01faW5fZW5kOwogICAgICAgICAgICB0 aGlzLT5zZXRnKF9NX3BiYWNrLCBfTV9wYmFjaywgX01fcGJhY2sgKyBfX2xlbik7CiAgICAgICAg ICAgIF9NX3BiYWNrX2luaXQgPSB0cnVlOwogICAgICAgICAgfQogICAgICB9CgoKCgogICAgICB2 b2lkCiAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKQogICAgICB7CiAgICAgICAgaWYgKF9NX3BiYWNr X2luaXQpCiAgICAgICAgICB7CgogICAgICAgICAgICBpbnRfdHlwZSBfX29mZl9jdXIgPSBfTV9p bl9jdXIgLSBfTV9wYmFjazsKCgogICAgICAgICAgICBpbnRfdHlwZSBfX29mZl9lbmQgPSAwOwog ICAgICAgICAgICBpbnRfdHlwZSBfX3BiYWNrX2xlbiA9IF9NX2luX2VuZCAtIF9NX3BiYWNrOwog ICAgICAgICAgICBpbnRfdHlwZSBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSBfTV9i dWY7CiAgICAgICAgICAgIGlmIChfX3BiYWNrX2xlbiA+IF9fc2F2ZV9sZW4pCiAgICAgICAgICAg ICAgX19vZmZfZW5kID0gX19wYmFja19sZW4gLSBfX3NhdmVfbGVuOwoKICAgICAgICAgICAgdGhp cy0+c2V0ZyhfTV9idWYsIF9NX3BiYWNrX2N1cl9zYXZlICsgX19vZmZfY3VyLAogICAgICAgICAg ICAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlICsgX19vZmZfZW5kKTsKICAgICAgICAgICAg X01fcGJhY2tfY3VyX3NhdmUgPSBfX251bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZl ID0gX19udWxsOwogICAgICAgICAgICBfTV9wYmFja19pbml0ID0gZmFsc2U7CiAgICAgICAgICB9 CiAgICAgIH0KCgoKICAgICAgdm9pZAogICAgICBfTV9pbl9jdXJfbW92ZShvZmZfdHlwZSBfX24p CiAgICAgIHsKICAgICAgICBib29sIF9fdGVzdG91dCA9IF9NX291dF9jdXI7CiAgICAgICAgX01f aW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAoX190ZXN0b3V0ICYmIF9NX2J1Zl91bmlmaWVkKQog ICAgICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgIH0KIyAxOTMgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDMKICAgICAgdm9pZAogICAgICBfTV9vdXRfY3Vy X21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX2lu X2N1cjsKCiAgICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVzdGluICYm IF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAo X01fb3V0X2N1ciA+IF9NX291dF9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX291dF9l bmQgPSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgICAg IF9NX2luX2VuZCArPSBfX247CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIG9mZl90eXBl CiAgICAgIF9NX291dF9idWZfc2l6ZSgpCiAgICAgIHsKICAgICAgICBvZmZfdHlwZSBfX3JldCA9 IDA7CiAgICAgICAgaWYgKF9NX291dF9jdXIpCiAgICAgICAgICB7CgogICAgICAgICAgICBpZiAo X01fb3V0X2JlZyA9PSBfTV9idWYpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnICsg X01fYnVmX3NpemUgLSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg IF9fcmV0ID0gX01fb3V0X2VuZCAtIF9NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0 dXJuIF9fcmV0OwogICAgICB9CiMgMjM2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0 cmVhbWJ1Zi5oIiAzCiAgICAgIHZvaWQKICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUodm9pZCkK ICAgICAgewogICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6OmluKQogICAgICAgICAgdGhp cy0+c2V0ZyhfTV9idWYsIF9NX2J1ZiwgX01fYnVmKTsKICAgICAgICBpZiAoX01fbW9kZSAmIGlv c19iYXNlOjpvdXQpCiAgICAgICAgICB0aGlzLT5zZXRwKF9NX2J1ZiwgX01fYnVmKTsKICAgICAg fQoKICAgICAgdm9pZAogICAgICBfTV9zZXRfZGV0ZXJtaW5hdGUob2ZmX3R5cGUgX19vZmYpCiAg ICAgIHsKICAgICAgICBib29sIF9fdGVzdGluID0gX01fbW9kZSAmIGlvc19iYXNlOjppbjsKICAg ICAgICBib29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICAgIGlm IChfX3Rlc3RpbikKICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1ZiAr IF9fb2ZmKTsKICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgdGhpcy0+c2V0cChfTV9i dWYsIF9NX2J1ZiArIF9fb2ZmKTsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBfTV9pc19pbmRl dGVybWluYXRlKHZvaWQpCiAgICAgIHsKICAgICAgICBib29sIF9fcmV0ID0gZmFsc2U7CgogICAg ICAgIGlmIChfTV9idWYpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChfTV9tb2RlICYgaW9z X2Jhc2U6OmluKQogICAgICAgICAgICAgIF9fcmV0ID0gX01faW5fYmVnID09IF9NX2luX2N1ciAm JiBfTV9pbl9jdXIgPT0gX01faW5fZW5kOwogICAgICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19i YXNlOjpvdXQpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnID09IF9NX291dF9jdXIg JiYgX01fb3V0X2N1ciA9PSBfTV9vdXRfZW5kOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBf X3JldDsKICAgICAgfQoKICBwdWJsaWM6CiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX3N0cmVh bWJ1ZigpCiAgICAgIHsKICAgICAgICBfTV9idWZfdW5pZmllZCA9IGZhbHNlOwogICAgICAgIF9N X2J1Zl9zaXplID0gMDsKICAgICAgICBfTV9idWZfc2l6ZV9vcHQgPSAwOwogICAgICAgIF9NX21v ZGUgPSBpb3NfYmFzZTo6b3Blbm1vZGUoMCk7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0g ZmFsc2U7CiAgICAgIH0KCgogICAgICBsb2NhbGUKICAgICAgcHViaW1idWUoY29uc3QgbG9jYWxl ICZfX2xvYykKICAgICAgewogICAgICAgIGxvY2FsZSBfX3RtcCh0aGlzLT5nZXRsb2MoKSk7CiAg ICAgICAgdGhpcy0+aW1idWUoX19sb2MpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoK ICAgICAgbG9jYWxlCiAgICAgIGdldGxvYygpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX01f YnVmX2xvY2FsZV9pbml0KQogICAgICAgICAgcmV0dXJuIF9NX2J1Zl9sb2NhbGU7CiAgICAgICAg ZWxzZQogICAgICAgICAgcmV0dXJuIGxvY2FsZSgpOwogICAgICB9CgoKICAgICAgX19zdHJlYW1i dWZfdHlwZSoKICAgICAgcHVic2V0YnVmKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikK ICAgICAgeyByZXR1cm4gdGhpcy0+c2V0YnVmKF9fcywgX19uKTsgfQoKICAgICAgcG9zX3R5cGUK ICAgICAgcHVic2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXks CiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpp biB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtvZmYoX19vZmYsIF9f d2F5LCBfX21vZGUpOyB9CgogICAgICBwb3NfdHlwZQogICAgICBwdWJzZWVrcG9zKHBvc190eXBl IF9fc3AsCiAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19i YXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtwb3MoX19z cCwgX19tb2RlKTsgfQoKICAgICAgaW50CiAgICAgIHB1YnN5bmMoKSB7IHJldHVybiB0aGlzLT5z eW5jKCk7IH0KCgoKICAgICAgc3RyZWFtc2l6ZQogICAgICBpbl9hdmFpbCgpCiAgICAgIHsKICAg ICAgICBzdHJlYW1zaXplIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3Vy IDwgX01faW5fZW5kKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkK ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX3NhdmVfbGVuID0gX01f cGJhY2tfZW5kX3NhdmUgLSBfTV9wYmFja19jdXJfc2F2ZTsKICAgICAgICAgICAgICAgIGludF90 eXBlIF9fcGJhY2tfbGVuID0gX01faW5fY3VyIC0gX01fcGJhY2s7CiAgICAgICAgICAgICAgICBf X3JldCA9IF9fc2F2ZV9sZW4gLSBfX3BiYWNrX2xlbjsKICAgICAgICAgICAgICB9CiAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPmVncHRyKCkgLSB0aGlzLT5ncHRy KCk7CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19yZXQgPSB0aGlzLT5zaG93 bWFueWMoKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIGludF90eXBlCiAg ICAgIHNuZXh0YygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBl Ojplb2YoKTsKICAgICAgICByZXR1cm4gKHRoaXMtPnNidW1wYygpID09IF9fZW9mID8gX19lb2Yg OiB0aGlzLT5zZ2V0YygpKTsKICAgICAgfQoKICAgICAgaW50X3R5cGUKICAgICAgc2J1bXBjKCk7 CgogICAgICBpbnRfdHlwZQogICAgICBzZ2V0YygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBf X3JldDsKICAgICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAg ICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCoodGhpcy0+Z3B0cigpKSk7 CiAgICAgICAgZWxzZQogICAgICAgICAgX19yZXQgPSB0aGlzLT51bmRlcmZsb3coKTsKICAgICAg ICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHN0cmVhbXNpemUKICAgICAgc2dldG4oY2hh cl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT54c2dldG4o X19zLCBfX24pOyB9CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBf X2MpOwoKICAgICAgaW50X3R5cGUKICAgICAgc3VuZ2V0YygpOwoKCiAgICAgIGludF90eXBlCiAg ICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgc3RyZWFtc2l6ZQogICAgICBzcHV0bihj b25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMt PnhzcHV0bihfX3MsIF9fbik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGJhc2ljX3N0cmVhbWJ1 ZigpCiAgICAgIDogX01fYnVmKF9fbnVsbCksIF9NX2J1Zl9zaXplKDApLAogICAgICBfTV9idWZf c2l6ZV9vcHQoc3RhdGljX2Nhc3Q8aW50X3R5cGU+KDgxOTIpKSwgX01fYnVmX3VuaWZpZWQoZmFs c2UpLAogICAgICBfTV9pbl9iZWcoMCksIF9NX2luX2N1cigwKSwgX01faW5fZW5kKDApLCBfTV9v dXRfYmVnKDApLCBfTV9vdXRfY3VyKDApLAogICAgICBfTV9vdXRfZW5kKDApLCBfTV9tb2RlKGlv c19iYXNlOjpvcGVubW9kZSgwKSksIF9NX2J1Zl9sb2NhbGUobG9jYWxlKCkpLAogICAgICBfTV9i dWZfbG9jYWxlX2luaXQoZmFsc2UpLCBfTV9wYmFja19zaXplKDEpLCBfTV9wYmFjayhfX251bGwp LAogICAgICBfTV9wYmFja19jdXJfc2F2ZShfX251bGwpLCBfTV9wYmFja19lbmRfc2F2ZShfX251 bGwpLCBfTV9wYmFja19pbml0KGZhbHNlKQogICAgICB7IH0KCgogICAgICBjaGFyX3R5cGUqCiAg ICAgIGViYWNrKCkgY29uc3QgeyByZXR1cm4gX01faW5fYmVnOyB9CgogICAgICBjaGFyX3R5cGUq CiAgICAgIGdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9pbl9jdXI7IH0KCiAgICAgIGNoYXJfdHlw ZSoKICAgICAgZWdwdHIoKSBjb25zdCB7IHJldHVybiBfTV9pbl9lbmQ7IH0KCiAgICAgIHZvaWQK ICAgICAgZ2J1bXAoaW50IF9fbikgeyBfTV9pbl9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAg ICAgIHNldGcoY2hhcl90eXBlKiBfX2diZWcsIGNoYXJfdHlwZSogX19nbmV4dCwgY2hhcl90eXBl KiBfX2dlbmQpCiAgICAgIHsKICAgICAgICBfTV9pbl9iZWcgPSBfX2diZWc7CiAgICAgICAgX01f aW5fY3VyID0gX19nbmV4dDsKICAgICAgICBfTV9pbl9lbmQgPSBfX2dlbmQ7CiAgICAgICAgaWYg KCEoX01fbW9kZSAmIGlvc19iYXNlOjppbikgJiYgX19nYmVnICYmIF9fZ25leHQgJiYgX19nZW5k KQogICAgICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6aW47CiAgICAgIH0KCgog ICAgICBjaGFyX3R5cGUqCiAgICAgIHBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2JlZzsg fQoKICAgICAgY2hhcl90eXBlKgogICAgICBwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2N1 cjsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291 dF9lbmQ7IH0KCiAgICAgIHZvaWQKICAgICAgcGJ1bXAoaW50IF9fbikgeyBfTV9vdXRfY3VyICs9 IF9fbjsgfQoKICAgICAgdm9pZAogICAgICBzZXRwKGNoYXJfdHlwZSogX19wYmVnLCBjaGFyX3R5 cGUqIF9fcGVuZCkKICAgICAgewogICAgICAgIF9NX291dF9iZWcgPSBfTV9vdXRfY3VyID0gX19w YmVnOwogICAgICAgIF9NX291dF9lbmQgPSBfX3BlbmQ7CiAgICAgICAgaWYgKCEoX01fbW9kZSAm IGlvc19iYXNlOjpvdXQpICYmIF9fcGJlZyAmJiBfX3BlbmQpCiAgICAgICAgICBfTV9tb2RlID0g X01fbW9kZSB8IGlvc19iYXNlOjpvdXQ7CiAgICAgIH0KCgoKICAgICAgdmlydHVhbCB2b2lkCiAg ICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICAgIHsKICAgICAgICBfTV9idWZfbG9j YWxlX2luaXQgPSB0cnVlOwogICAgICAgIGlmIChfTV9idWZfbG9jYWxlICE9IF9fbG9jKQogICAg ICAgICAgX01fYnVmX2xvY2FsZSA9IF9fbG9jOwogICAgICB9CgoKICAgICAgdmlydHVhbCBiYXNp Y19zdHJlYW1idWY8Y2hhcl90eXBlLF9UcmFpdHM+KgogICAgICBzZXRidWYoY2hhcl90eXBlKiwg c3RyZWFtc2l6ZSkKICAgICAgeyByZXR1cm4gdGhpczsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlw ZQogICAgICBzZWVrb2ZmKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2RpciwKICAgICAgICAgICAg ICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAg ICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIHBvc190 eXBlCiAgICAgIHNlZWtwb3MocG9zX3R5cGUsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5t b2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5 cGUob2ZmX3R5cGUoLTEpKTsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3luYygpIHsgcmV0 dXJuIDA7IH0KCgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc2hvd21hbnljKCkgeyBy ZXR1cm4gMDsgfQoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzZ2V0bihjaGFyX3R5 cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1 bmRlcmZsb3coKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCiAgICAgIHZp cnR1YWwgaW50X3R5cGUKICAgICAgdWZsb3coKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19y ZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0aGlzLT51 bmRlcmZsb3coKSA9PSBfX3JldDsKICAgICAgICBib29sIF9fdGVzdHBlbmRpbmcgPSBfTV9pbl9j dXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kOwogICAgICAgIGlmICghX190ZXN0ZW9mICYmIF9f dGVzdHBlbmRpbmcpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6 OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwogICAgICAgICAgICArK19NX2luX2N1cjsKICAgICAg ICAgICAgaWYgKF9NX2J1Zl91bmlmaWVkICYmIF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAg ICAgICAgICAgICsrX01fb3V0X2N1cjsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7 CiAgICAgIH0KCgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHBiYWNrZmFpbChpbnRfdHlw ZSA9IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigp OyB9CgoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5 cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBv dmVyZmxvdyhpbnRfdHlwZSA9IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJh aXRzX3R5cGU6OmVvZigpOyB9CiMgNTE2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0 cmVhbWJ1Zi5oIiAzCiAgICBwcml2YXRlOgogICAgICBiYXNpY19zdHJlYW1idWYoY29uc3QgX19z dHJlYW1idWZfdHlwZSYpOwoKICAgICAgX19zdHJlYW1idWZfdHlwZSYKICAgICAgb3BlcmF0b3I9 KGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKTsKCiAgICB9OwoKfQoKCgoKIyAxICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RyZWFtYnVmLnRjYyIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdHJlYW1idWYudGNjIiAzCm5hbWVzcGFjZSBzdGQgewoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs IF9UcmFpdHM+OjoKICAgIHNidW1wYygpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAg ICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICB7CiAgICAg ICAgICBjaGFyX3R5cGUgX19jID0gKmdwdHIoKTsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKDEp OwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsKICAgICAg ICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnVmbG93KCk7CiAgICAgIHJldHVy biBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90 eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YmFja2Mo Y2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGJvb2wgX190 ZXN0cG9zID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cjsKICAgICAgYm9vbCBf X3Rlc3RuZSA9IF9NX2luX2N1ciAmJiAhdHJhaXRzX3R5cGU6OmVxKF9fYywgdGhpcy0+Z3B0cigp Wy0xXSk7CiAgICAgIGlmICghX190ZXN0cG9zIHx8IF9fdGVzdG5lKQogICAgICAgIF9fcmV0ID0g cGJhY2tmYWlsKHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgZWxzZQogICAg ICAgIHsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0gdHJh aXRzX3R5cGU6OnRvX2ludF90eXBlKCp0aGlzLT5ncHRyKCkpOwogICAgICAgIH0KICAgICAgcmV0 dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50 X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHN1bmdldGMo KQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9p bl9iZWcgPCBfTV9pbl9jdXIpCiAgICAgICAgewogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEp OwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7 CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5wYmFja2ZhaWwoKTsK ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs IF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46 OgogICAgc3B1dGMoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAg ICAgIGlmIChfTV9vdXRfYnVmX3NpemUoKSkKICAgICAgICB7CiAgICAgICAgICAqX01fb3V0X2N1 ciA9IF9fYzsKICAgICAgICAgIF9NX291dF9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0g dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg ICAgX19yZXQgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7 CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFy VCwgX1RyYWl0cz46OgogICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikK ICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9f bikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19idWZfbGVuID0gX01faW5fZW5kIC0gX01f aW5fY3VyOwogICAgICAgICAgaWYgKF9fYnVmX2xlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBzaXplX3QgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAgICAgICAgICAgICBz aXplX3QgX19sZW4gPSBtaW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAg dHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgICBf X3JldCArPSBfX2xlbjsKICAgICAgICAgICAgICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAg X01faW5fY3VyX21vdmUoX19sZW4pOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9fcmV0 IDwgX19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+ dWZsb3coKTsKICAgICAgICAgICAgICBpZiAoX19jICE9IHRyYWl0c190eXBlOjplb2YoKSkKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19z KyssIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAgICAgICAgICAgICAgICsr X19yZXQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAg IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBzdHJlYW1zaXplCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICB4 c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBz dHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsK ICAgICAgICAgIG9mZl90eXBlIF9fYnVmX2xlbiA9IF9NX291dF9idWZfc2l6ZSgpOwogICAgICAg ICAgaWYgKF9fYnVmX2xlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBvZmZfdHlw ZSBfX3JlbWFpbmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAgIG9mZl90eXBlIF9fbGVu ID0gbWluKF9fYnVmX2xlbiwgX19yZW1haW5pbmcpOwogICAgICAgICAgICAgIHRyYWl0c190eXBl Ojpjb3B5KF9NX291dF9jdXIsIF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9f bGVuOwogICAgICAgICAgICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAgICAgICBfTV9vdXRfY3Vy X21vdmUoX19sZW4pOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+b3ZlcmZsb3co dHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfX3MpKTsKICAgICAgICAgICAgICBpZiAoX19jICE9 IHRyYWl0c190eXBlOjplb2YoKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg KytfX3JldDsKICAgICAgICAgICAgICAgICAgKytfX3M7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1i dWZzKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfX2lvcywKICAgICAgICAgICAgICAgICAg ICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sCiAgICAgICAgICAg ICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCkKICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CgogICAg ICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKICAgICAgc3RyZWFtc2l6ZSBfX2J1ZnNpemUgPSBfX3Ni aW4tPmluX2F2YWlsKCk7CiAgICAgIHN0cmVhbXNpemUgX194dHJjdDsKICAgICAgYm9vbCBfX3Rl c3RwdXQgPSBfX3Nib3V0LT5fTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKICAgICAgdHJ5IHsKICAg ICAgICB3aGlsZSAoX190ZXN0cHV0ICYmIF9fYnVmc2l6ZSAhPSAtMSkKICAgICAgICAgIHsKICAg ICAgICAgICAgX194dHJjdCA9IF9fc2JvdXQtPnNwdXRuKF9fc2Jpbi0+Z3B0cigpLCBfX2J1ZnNp emUpOwogICAgICAgICAgICBfX3JldCArPSBfX3h0cmN0OwogICAgICAgICAgICBfX3NiaW4tPl9N X2luX2N1cl9tb3ZlKF9feHRyY3QpOwogICAgICAgICAgICBpZiAoX194dHJjdCA9PSBfX2J1ZnNp emUpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYmlu LT5zZ2V0YygpOwogICAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfVHJhaXRzOjplb2YoKSkKICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIF9faW9zLnNldHN0YXRlKGlvc19i YXNlOjplb2ZiaXQpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICBfX2J1ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7CiAgICAg ICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICB9CiAgICAgIH0KICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpIHsKICAgICAgICBpZiAo KF9faW9zLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpmYWlsYml0KSAhPSAwKQogICAgICAgICAg dGhyb3c7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQp9CiMgNTMwICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyA0NiAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L2Jhc2ljX2lvcy5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lv cy5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zYnVmX2l0ZXIuaCIgMSAzCiMg MzYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zYnVmX2l0ZXIuaCIgMwoKbmFtZXNwYWNlIHN0 ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xh c3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJh dG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAg IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190 eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0cmVh bWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBv c3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7 CiAgICAgIGJvb2wgX01fZmFpbGVkOwoKICAgIHB1YmxpYzoKICAgICAgaW5saW5lCiAgICAgIG9z dHJlYW1idWZfaXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MpIHRocm93ICgpCiAgICAgIDogX01f c2J1ZihfX3MucmRidWYoKSksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9CgogICAgICBvc3RyZWFt YnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93ICgpCiAgICAgIDogX01fc2J1 ZihfX3MpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRv ciYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpOwoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRv ciYKICAgICAgb3BlcmF0b3IqKCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAg ICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKyhpbnQpIHRocm93KCkKICAg ICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9w ZXJhdG9yKysoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBib29sCiAg ICAgIGZhaWxlZCgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gX01fZmFpbGVkOyB9CiAg ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBp bmxpbmUgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3N0cmVhbWJ1 Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcj0oX0NoYXJUIF9fYykKICAgIHsK ICAgICAgaWYgKCFfTV9mYWlsZWQgJiYKICAgICAgICAgIF9UcmFpdHM6OmVxX2ludF90eXBlKF9N X3NidWYtPnNwdXRjKF9fYyksX1RyYWl0czo6ZW9mKCkpKQogICAgICBfTV9mYWlsZWQgPSB0cnVl OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcgogICAgOiBw dWJsaWMgaXRlcmF0b3I8aW5wdXRfaXRlcmF0b3JfdGFnLCBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM6Om9mZl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgX0NoYXJUKiwgX0NoYXJUJj4KICAg IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw ZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6 OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs IF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiBpc3RyZWFtX3R5cGU7CgogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRl cmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZpdGVyX3R5cGU7CgogICAgcHJpdmF0 ZToKCgoKCgoKCiAgICAgIHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBpbnRfdHlwZSBf TV9jOwoKICAgIHB1YmxpYzoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcigpIHRocm93KCkKICAg ICAgOiBfTV9zYnVmKF9fbnVsbCksIF9NX2MoLTIpIHsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVy YXRvcihpc3RyZWFtX3R5cGUmIF9fcykgdGhyb3coKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVm KCkpLCBfTV9jKC0yKSB7IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5 cGUqIF9fcykgdGhyb3coKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fYygtMikgeyB9CgoKCgog ICAgICBjaGFyX3R5cGUKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgewoKICAgICAgICBj aGFyX3R5cGUgX19yZXQ7CiAgICAgICAgaWYgKF9NX3NidWYgJiYgX01fYyAhPSBzdGF0aWNfY2Fz dDxpbnRfdHlwZT4oLTIpKQogICAgICAgICAgX19yZXQgPSBfTV9jOwogICAgICAgIGVsc2UgaWYg KF9NX3NidWYpCiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX01f c2J1Zi0+c2dldGMoKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgX19yZXQgPSBzdGF0aWNfY2Fz dDxjaGFyX3R5cGU+KHRyYWl0c190eXBlOjplb2YoKSk7CiAgICAgICAgcmV0dXJuIF9fcmV0Owog ICAgICB9CgogICAgICBfX2lzdHJlYW1idWZpdGVyX3R5cGUmCiAgICAgIG9wZXJhdG9yKysoKQog ICAgICB7CiAgICAgICAgaWYgKF9NX3NidWYpCiAgICAgICAgICBfTV9zYnVmLT5zYnVtcGMoKTsK ICAgICAgICBfTV9jID0gLTI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBf X2lzdHJlYW1idWZpdGVyX3R5cGUKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAg ICBfX2lzdHJlYW1idWZpdGVyX3R5cGUgX19vbGQgPSAqdGhpczsKICAgICAgICBpZiAoX01fc2J1 ZikKICAgICAgICAgIF9fb2xkLl9NX2MgPSBfTV9zYnVmLT5zYnVtcGMoKTsKICAgICAgICBfTV9j ID0gLTI7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgogICAgICBib29sCiAgICAgIGVx dWFsKGNvbnN0IF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSYgX19iKQogICAgICB7CiAgICAgICAgaW50 X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3RoaXNlb2Yg PSAhX01fc2J1ZiB8fCBfTV9zYnVmLT5zZ2V0YygpID09IF9fZW9mOwogICAgICAgIGJvb2wgX19i ZW9mID0gIV9fYi5fTV9zYnVmCiAgICAgICAgICAgICAgICAgICAgICB8fCBfX2IuX01fc2J1Zi0+ c2dldGMoKSA9PSBfX2VvZjsKICAgICAgICByZXR1cm4gKF9fdGhpc2VvZiAmJiBfX2Jlb2YgfHwg KCFfX3RoaXNlb2YgJiYgIV9fYmVvZikpOwogICAgICB9CgoKCgogICAgICBib29sCiAgICAgIGVx dWFsKGNvbnN0IF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSYgX19iKSBjb25zdAogICAgICB7CiAgICAg ICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3Ro aXNlb2YgPSAhX01fc2J1ZiB8fCBfTV9zYnVmLT5zZ2V0YygpID09IF9fZW9mOwogICAgICAgIGJv b2wgX19iZW9mID0gIV9fYi5fTV9zYnVmCiAgICAgICAgICAgICAgICAgICAgICB8fCBfX2IuX01f c2J1Zi0+c2dldGMoKSA9PSBfX2VvZjsKICAgICAgICByZXR1cm4gKF9fdGhpc2VvZiAmJiBfX2Jl b2YgfHwgKCFfX3RoaXNlb2YgJiYgIV9fYmVvZikpOwogICAgICB9CgogICAgfTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBf X2EsCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJh aXRzPiYgX19iKQogICAgeyByZXR1cm4gX19hLmVxdWFsKF9fYik7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yIT0oY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2EsCiAg ICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYg X19iKQogICAgeyByZXR1cm4gIV9fYS5lcXVhbChfX2IpOyB9Cn0KIyAzNiAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xv Y2FsZV9mYWNldHMuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1l LmgiIDEgMwojIDQyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAy IDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAxIDMKIyA0MyAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgojIDEgIi91c3IvaW5j bHVkZS9sYW5naW5mby5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvbmxfdHlwZXMuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9ubF90eXBl cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1 ZGUvbmxfdHlwZXMuaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9ubF90eXBlcy5oIiAzCmV4dGVy biAiQyIgewoKCnR5cGVkZWYgdm9pZCAqbmxfY2F0ZDsKCgp0eXBlZGVmIGludCBubF9pdGVtOwoK CmV4dGVybiBubF9jYXRkIGNhdG9wZW4gKF9fY29uc3QgY2hhciAqX19jYXRfbmFtZSwgaW50IF9f ZmxhZykgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpjYXRnZXRzIChubF9jYXRkIF9fY2F0YWxv ZywgaW50IF9fc2V0LCBpbnQgX19udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNhdGNsb3NlIChubF9jYXRk IF9fY2F0YWxvZykgdGhyb3cgKCk7Cgp9CiMgMjUgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAy IDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1 ZGUvYml0cy9sb2NhbGUuaCIgMwplbnVtCnsKICBfX0xDX0NUWVBFID0gMCwKICBfX0xDX05VTUVS SUMgPSAxLAogIF9fTENfVElNRSA9IDIsCiAgX19MQ19DT0xMQVRFID0gMywKICBfX0xDX01PTkVU QVJZID0gNCwKICBfX0xDX01FU1NBR0VTID0gNSwKICBfX0xDX0FMTCA9IDYsCiAgX19MQ19QQVBF UiA9IDcsCiAgX19MQ19OQU1FID0gOCwKICBfX0xDX0FERFJFU1MgPSA5LAogIF9fTENfVEVMRVBI T05FID0gMTAsCiAgX19MQ19NRUFTVVJFTUVOVCA9IDExLAogIF9fTENfSURFTlRJRklDQVRJT04g PSAxMgp9OwojIDI3ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMiAzCgoKZXh0ZXJuICJDIiB7 CiMgNDMgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzCmVudW0KewoKCgogIEFCREFZXzEgPSAo KChfX0xDX1RJTUUpIDw8IDE2KSB8ICgwKSksCgogIEFCREFZXzIsCgogIEFCREFZXzMsCgogIEFC REFZXzQsCgogIEFCREFZXzUsCgogIEFCREFZXzYsCgogIEFCREFZXzcsCgoKCiAgREFZXzEsCgog IERBWV8yLAoKICBEQVlfMywKCiAgREFZXzQsCgogIERBWV81LAoKICBEQVlfNiwKCiAgREFZXzcs CgoKCiAgQUJNT05fMSwKCiAgQUJNT05fMiwKCiAgQUJNT05fMywKCiAgQUJNT05fNCwKCiAgQUJN T05fNSwKCiAgQUJNT05fNiwKCiAgQUJNT05fNywKCiAgQUJNT05fOCwKCiAgQUJNT05fOSwKCiAg QUJNT05fMTAsCgogIEFCTU9OXzExLAoKICBBQk1PTl8xMiwKCgoKICBNT05fMSwKCiAgTU9OXzIs CgogIE1PTl8zLAoKICBNT05fNCwKCiAgTU9OXzUsCgogIE1PTl82LAoKICBNT05fNywKCiAgTU9O XzgsCgogIE1PTl85LAoKICBNT05fMTAsCgogIE1PTl8xMSwKCiAgTU9OXzEyLAoKCiAgQU1fU1RS LAoKICBQTV9TVFIsCgoKICBEX1RfRk1ULAoKICBEX0ZNVCwKCiAgVF9GTVQsCgogIFRfRk1UX0FN UE0sCgoKICBFUkEsCgogIF9fRVJBX1lFQVIsCgoKCiAgRVJBX0RfRk1ULAoKICBBTFRfRElHSVRT LAoKICBFUkFfRF9UX0ZNVCwKCiAgRVJBX1RfRk1ULAoKCiAgX05MX1RJTUVfRVJBX05VTV9FTlRS SUVTLAogIF9OTF9USU1FX0VSQV9FTlRSSUVTLAoKICBfTkxfV0FCREFZXzEsCiAgX05MX1dBQkRB WV8yLAogIF9OTF9XQUJEQVlfMywKICBfTkxfV0FCREFZXzQsCiAgX05MX1dBQkRBWV81LAogIF9O TF9XQUJEQVlfNiwKICBfTkxfV0FCREFZXzcsCgoKICBfTkxfV0RBWV8xLAogIF9OTF9XREFZXzIs CiAgX05MX1dEQVlfMywKICBfTkxfV0RBWV80LAogIF9OTF9XREFZXzUsCiAgX05MX1dEQVlfNiwK ICBfTkxfV0RBWV83LAoKCiAgX05MX1dBQk1PTl8xLAogIF9OTF9XQUJNT05fMiwKICBfTkxfV0FC TU9OXzMsCiAgX05MX1dBQk1PTl80LAogIF9OTF9XQUJNT05fNSwKICBfTkxfV0FCTU9OXzYsCiAg X05MX1dBQk1PTl83LAogIF9OTF9XQUJNT05fOCwKICBfTkxfV0FCTU9OXzksCiAgX05MX1dBQk1P Tl8xMCwKICBfTkxfV0FCTU9OXzExLAogIF9OTF9XQUJNT05fMTIsCgoKICBfTkxfV01PTl8xLAog IF9OTF9XTU9OXzIsCiAgX05MX1dNT05fMywKICBfTkxfV01PTl80LAogIF9OTF9XTU9OXzUsCiAg X05MX1dNT05fNiwKICBfTkxfV01PTl83LAogIF9OTF9XTU9OXzgsCiAgX05MX1dNT05fOSwKICBf TkxfV01PTl8xMCwKICBfTkxfV01PTl8xMSwKICBfTkxfV01PTl8xMiwKCiAgX05MX1dBTV9TVFIs CiAgX05MX1dQTV9TVFIsCgogIF9OTF9XRF9UX0ZNVCwKICBfTkxfV0RfRk1ULAogIF9OTF9XVF9G TVQsCiAgX05MX1dUX0ZNVF9BTVBNLAoKICBfTkxfV0VSQV9ZRUFSLAogIF9OTF9XRVJBX0RfRk1U LAogIF9OTF9XQUxUX0RJR0lUUywKICBfTkxfV0VSQV9EX1RfRk1ULAogIF9OTF9XRVJBX1RfRk1U LAoKICBfTkxfVElNRV9XRUVLX05EQVlTLAogIF9OTF9USU1FX1dFRUtfMVNUREFZLAogIF9OTF9U SU1FX1dFRUtfMVNUV0VFSywKICBfTkxfVElNRV9GSVJTVF9XRUVLREFZLAogIF9OTF9USU1FX0ZJ UlNUX1dPUktEQVksCiAgX05MX1RJTUVfQ0FMX0RJUkVDVElPTiwKICBfTkxfVElNRV9USU1FWk9O RSwKCiAgX0RBVEVfRk1ULAoKICBfTkxfV19EQVRFX0ZNVCwKCiAgX05MX1RJTUVfQ09ERVNFVCwK CiAgX05MX05VTV9MQ19USU1FLAoKCgoKICBfTkxfQ09MTEFURV9OUlVMRVMgPSAoKChfX0xDX0NP TExBVEUpIDw8IDE2KSB8ICgwKSksCiAgX05MX0NPTExBVEVfUlVMRVNFVFMsCiAgX05MX0NPTExB VEVfVEFCTEVNQiwKICBfTkxfQ09MTEFURV9XRUlHSFRNQiwKICBfTkxfQ09MTEFURV9FWFRSQU1C LAogIF9OTF9DT0xMQVRFX0lORElSRUNUTUIsCiAgX05MX0NPTExBVEVfR0FQMSwKICBfTkxfQ09M TEFURV9HQVAyLAogIF9OTF9DT0xMQVRFX0dBUDMsCiAgX05MX0NPTExBVEVfVEFCTEVXQywKICBf TkxfQ09MTEFURV9XRUlHSFRXQywKICBfTkxfQ09MTEFURV9FWFRSQVdDLAogIF9OTF9DT0xMQVRF X0lORElSRUNUV0MsCiAgX05MX0NPTExBVEVfU1lNQl9IQVNIX1NJWkVNQiwKICBfTkxfQ09MTEFU RV9TWU1CX1RBQkxFTUIsCiAgX05MX0NPTExBVEVfU1lNQl9FWFRSQU1CLAogIF9OTF9DT0xMQVRF X0NPTExTRVFNQiwKICBfTkxfQ09MTEFURV9DT0xMU0VRV0MsCiAgX05MX0NPTExBVEVfQ09ERVNF VCwKICBfTkxfTlVNX0xDX0NPTExBVEUsCgoKCgogIF9OTF9DVFlQRV9DTEFTUyA9ICgoKF9fTENf Q1RZUEUpIDw8IDE2KSB8ICgwKSksCiAgX05MX0NUWVBFX1RPVVBQRVIsCiAgX05MX0NUWVBFX0dB UDEsCiAgX05MX0NUWVBFX1RPTE9XRVIsCiAgX05MX0NUWVBFX0dBUDIsCiAgX05MX0NUWVBFX0NM QVNTMzIsCiAgX05MX0NUWVBFX0dBUDMsCiAgX05MX0NUWVBFX0dBUDQsCiAgX05MX0NUWVBFX0dB UDUsCiAgX05MX0NUWVBFX0dBUDYsCiAgX05MX0NUWVBFX0NMQVNTX05BTUVTLAogIF9OTF9DVFlQ RV9NQVBfTkFNRVMsCiAgX05MX0NUWVBFX1dJRFRILAogIF9OTF9DVFlQRV9NQl9DVVJfTUFYLAog IF9OTF9DVFlQRV9DT0RFU0VUX05BTUUsCiAgQ09ERVNFVCA9IF9OTF9DVFlQRV9DT0RFU0VUX05B TUUsCgogIF9OTF9DVFlQRV9UT1VQUEVSMzIsCiAgX05MX0NUWVBFX1RPTE9XRVIzMiwKICBfTkxf Q1RZUEVfQ0xBU1NfT0ZGU0VULAogIF9OTF9DVFlQRV9NQVBfT0ZGU0VULAogIF9OTF9DVFlQRV9J TkRJR0lUU19NQl9MRU4sCiAgX05MX0NUWVBFX0lORElHSVRTMF9NQiwKICBfTkxfQ1RZUEVfSU5E SUdJVFMxX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzJfTUIsCiAgX05MX0NUWVBFX0lORElHSVRT M19NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM0X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfTUIs CiAgX05MX0NUWVBFX0lORElHSVRTNl9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM3X01CLAogIF9O TF9DVFlQRV9JTkRJR0lUUzhfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTOV9NQiwKICBfTkxfQ1RZ UEVfSU5ESUdJVFNfV0NfTEVOLAogIF9OTF9DVFlQRV9JTkRJR0lUUzBfV0MsCiAgX05MX0NUWVBF X0lORElHSVRTMV9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMyX1dDLAogIF9OTF9DVFlQRV9JTkRJ R0lUUzNfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTNF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM1 X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzZfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTN19XQywK ICBfTkxfQ1RZUEVfSU5ESUdJVFM4X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzlfV0MsCiAgX05M X0NUWVBFX09VVERJR0lUMF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQxX01CLAogIF9OTF9DVFlQ RV9PVVRESUdJVDJfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUM19NQiwKICBfTkxfQ1RZUEVfT1VU RElHSVQ0X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDVfTUIsCiAgX05MX0NUWVBFX09VVERJR0lU Nl9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ3X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDhfTUIs CiAgX05MX0NUWVBFX09VVERJR0lUOV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQwX1dDLAogIF9O TF9DVFlQRV9PVVRESUdJVDFfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMl9XQywKICBfTkxfQ1RZ UEVfT1VURElHSVQzX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDRfV0MsCiAgX05MX0NUWVBFX09V VERJR0lUNV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ2X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJ VDdfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUOF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ5X1dD LAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UQUJfU0laRSwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJP TV9JRFgsCiAgX05MX0NUWVBFX1RSQU5TTElUX0ZST01fVEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJ VF9UT19JRFgsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX1RCTCwKICBfTkxfQ1RZUEVfVFJBTlNM SVRfREVGQVVMVF9NSVNTSU5HX0xFTiwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNT SU5HLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9JR05PUkVfTEVOLAogIF9OTF9DVFlQRV9UUkFOU0xJ VF9JR05PUkUsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBf MiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzMsCiAgX05MX0NUWVBFX0VYVFJBX01BUF80LAogIF9O TF9DVFlQRV9FWFRSQV9NQVBfNSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzYsCiAgX05MX0NUWVBF X0VYVFJBX01BUF83LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOCwKICBfTkxfQ1RZUEVfRVhUUkFf TUFQXzksCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEx LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTIsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMywKICBf TkxfQ1RZUEVfRVhUUkFfTUFQXzE0LAogIF9OTF9OVU1fTENfQ1RZUEUsCgoKCgogIF9fSU5UX0NV UlJfU1lNQk9MID0gKCgoX19MQ19NT05FVEFSWSkgPDwgMTYpIHwgKDApKSwKCgoKICBfX0NVUlJF TkNZX1NZTUJPTCwKCgoKICBfX01PTl9ERUNJTUFMX1BPSU5ULAoKCgogIF9fTU9OX1RIT1VTQU5E U19TRVAsCgoKCiAgX19NT05fR1JPVVBJTkcsCgoKCiAgX19QT1NJVElWRV9TSUdOLAoKCgogIF9f TkVHQVRJVkVfU0lHTiwKCgoKICBfX0lOVF9GUkFDX0RJR0lUUywKCgoKICBfX0ZSQUNfRElHSVRT LAoKCgogIF9fUF9DU19QUkVDRURFUywKCgoKICBfX1BfU0VQX0JZX1NQQUNFLAoKCgogIF9fTl9D U19QUkVDRURFUywKCgoKICBfX05fU0VQX0JZX1NQQUNFLAoKCgogIF9fUF9TSUdOX1BPU04sCgoK CiAgX19OX1NJR05fUE9TTiwKCgoKICBfTkxfTU9ORVRBUllfQ1JOQ1lTVFIsCgogIF9fSU5UX1Bf Q1NfUFJFQ0VERVMsCgoKCiAgX19JTlRfUF9TRVBfQllfU1BBQ0UsCgoKCiAgX19JTlRfTl9DU19Q UkVDRURFUywKCgoKICBfX0lOVF9OX1NFUF9CWV9TUEFDRSwKCgoKICBfX0lOVF9QX1NJR05fUE9T TiwKCgoKICBfX0lOVF9OX1NJR05fUE9TTiwKCgoKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9DVVJS X1NZTUJPTCwKICBfTkxfTU9ORVRBUllfRFVPX0NVUlJFTkNZX1NZTUJPTCwKICBfTkxfTU9ORVRB UllfRFVPX0lOVF9GUkFDX0RJR0lUUywKICBfTkxfTU9ORVRBUllfRFVPX0ZSQUNfRElHSVRTLAog IF9OTF9NT05FVEFSWV9EVU9fUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX1BfU0VQ X0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fTl9DU19QUkVDRURFUywKICBfTkxfTU9ORVRB UllfRFVPX05fU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfQ1NfUFJFQ0VE RVMsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfUF9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZ X0RVT19JTlRfTl9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX1NFUF9CWV9T UEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX1BfU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9f Tl9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19JTlRfUF9TSUdOX1BPU04sCiAgX05MX01P TkVUQVJZX0RVT19JTlRfTl9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX1VOT19WQUxJRF9GUk9N LAogIF9OTF9NT05FVEFSWV9VTk9fVkFMSURfVE8sCiAgX05MX01PTkVUQVJZX0RVT19WQUxJRF9G Uk9NLAogIF9OTF9NT05FVEFSWV9EVU9fVkFMSURfVE8sCiAgX05MX01PTkVUQVJZX0NPTlZFUlNJ T05fUkFURSwKICBfTkxfTU9ORVRBUllfREVDSU1BTF9QT0lOVF9XQywKICBfTkxfTU9ORVRBUllf VEhPVVNBTkRTX1NFUF9XQywKICBfTkxfTU9ORVRBUllfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01P TkVUQVJZLAoKCgogIF9fREVDSU1BTF9QT0lOVCA9ICgoKF9fTENfTlVNRVJJQykgPDwgMTYpIHwg KDApKSwKCgoKICBSQURJWENIQVIgPSBfX0RFQ0lNQUxfUE9JTlQsCgogIF9fVEhPVVNBTkRTX1NF UCwKCgoKICBUSE9VU0VQID0gX19USE9VU0FORFNfU0VQLAoKICBfX0dST1VQSU5HLAoKCgogIF9O TF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRfV0MsCiAgX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9X QywKICBfTkxfTlVNRVJJQ19DT0RFU0VULAogIF9OTF9OVU1fTENfTlVNRVJJQywKCiAgX19ZRVNF WFBSID0gKCgoX19MQ19NRVNTQUdFUykgPDwgMTYpIHwgKDApKSwKCiAgX19OT0VYUFIsCgogIF9f WUVTU1RSLAoKCgogIF9fTk9TVFIsCgoKCiAgX05MX01FU1NBR0VTX0NPREVTRVQsCiAgX05MX05V TV9MQ19NRVNTQUdFUywKCiAgX05MX1BBUEVSX0hFSUdIVCA9ICgoKF9fTENfUEFQRVIpIDw8IDE2 KSB8ICgwKSksCiAgX05MX1BBUEVSX1dJRFRILAogIF9OTF9QQVBFUl9DT0RFU0VULAogIF9OTF9O VU1fTENfUEFQRVIsCgogIF9OTF9OQU1FX05BTUVfRk1UID0gKCgoX19MQ19OQU1FKSA8PCAxNikg fCAoMCkpLAogIF9OTF9OQU1FX05BTUVfR0VOLAogIF9OTF9OQU1FX05BTUVfTVIsCiAgX05MX05B TUVfTkFNRV9NUlMsCiAgX05MX05BTUVfTkFNRV9NSVNTLAogIF9OTF9OQU1FX05BTUVfTVMsCiAg X05MX05BTUVfQ09ERVNFVCwKICBfTkxfTlVNX0xDX05BTUUsCgogIF9OTF9BRERSRVNTX1BPU1RB TF9GTVQgPSAoKChfX0xDX0FERFJFU1MpIDw8IDE2KSB8ICgwKSksCiAgX05MX0FERFJFU1NfQ09V TlRSWV9OQU1FLAogIF9OTF9BRERSRVNTX0NPVU5UUllfUE9TVCwKICBfTkxfQUREUkVTU19DT1VO VFJZX0FCMiwKICBfTkxfQUREUkVTU19DT1VOVFJZX0FCMywKICBfTkxfQUREUkVTU19DT1VOVFJZ X0NBUiwKICBfTkxfQUREUkVTU19DT1VOVFJZX05VTSwKICBfTkxfQUREUkVTU19DT1VOVFJZX0lT Qk4sCiAgX05MX0FERFJFU1NfTEFOR19OQU1FLAogIF9OTF9BRERSRVNTX0xBTkdfQUIsCiAgX05M X0FERFJFU1NfTEFOR19URVJNLAogIF9OTF9BRERSRVNTX0xBTkdfTElCLAogIF9OTF9BRERSRVNT X0NPREVTRVQsCiAgX05MX05VTV9MQ19BRERSRVNTLAoKICBfTkxfVEVMRVBIT05FX1RFTF9JTlRf Rk1UID0gKCgoX19MQ19URUxFUEhPTkUpIDw8IDE2KSB8ICgwKSksCiAgX05MX1RFTEVQSE9ORV9U RUxfRE9NX0ZNVCwKICBfTkxfVEVMRVBIT05FX0lOVF9TRUxFQ1QsCiAgX05MX1RFTEVQSE9ORV9J TlRfUFJFRklYLAogIF9OTF9URUxFUEhPTkVfQ09ERVNFVCwKICBfTkxfTlVNX0xDX1RFTEVQSE9O RSwKCiAgX05MX01FQVNVUkVNRU5UX01FQVNVUkVNRU5UID0gKCgoX19MQ19NRUFTVVJFTUVOVCkg PDwgMTYpIHwgKDApKSwKICBfTkxfTUVBU1VSRU1FTlRfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01F QVNVUkVNRU5ULAoKICBfTkxfSURFTlRJRklDQVRJT05fVElUTEUgPSAoKChfX0xDX0lERU5USUZJ Q0FUSU9OKSA8PCAxNikgfCAoMCkpLAogIF9OTF9JREVOVElGSUNBVElPTl9TT1VSQ0UsCiAgX05M X0lERU5USUZJQ0FUSU9OX0FERFJFU1MsCiAgX05MX0lERU5USUZJQ0FUSU9OX0NPTlRBQ1QsCiAg X05MX0lERU5USUZJQ0FUSU9OX0VNQUlMLAogIF9OTF9JREVOVElGSUNBVElPTl9URUwsCiAgX05M X0lERU5USUZJQ0FUSU9OX0ZBWCwKICBfTkxfSURFTlRJRklDQVRJT05fTEFOR1VBR0UsCiAgX05M X0lERU5USUZJQ0FUSU9OX1RFUlJJVE9SWSwKICBfTkxfSURFTlRJRklDQVRJT05fQVVESUVOQ0Us CiAgX05MX0lERU5USUZJQ0FUSU9OX0FQUExJQ0FUSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9B QkJSRVZJQVRJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX1JFVklTSU9OLAogIF9OTF9JREVOVElG SUNBVElPTl9EQVRFLAogIF9OTF9JREVOVElGSUNBVElPTl9DQVRFR09SWSwKICBfTkxfSURFTlRJ RklDQVRJT05fQ09ERVNFVCwKICBfTkxfTlVNX0xDX0lERU5USUZJQ0FUSU9OLAoKCiAgX05MX05V TQp9OwojIDU3NSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMKZXh0ZXJuIGNoYXIgKm5sX2xh bmdpbmZvIChubF9pdGVtIF9faXRlbSkgdGhyb3cgKCk7CgoKCgoKCgojIDEgIi91c3IvaW5jbHVk ZS94bG9jYWxlLmgiIDEgMwojIDU4NCAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDIgMwoKCmV4 dGVybiBjaGFyICpfX25sX2xhbmdpbmZvX2wgKG5sX2l0ZW0gX19pdGVtLCBfX2xvY2FsZV90IGwp OwoKCn0KIyA0NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAz CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2N0eXBlLmgiIDEgMwojIDM4ICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS93Y3R5cGUuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3dj dHlwZS5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjAuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL3djdHlwZS5o IiAyIDMKIyA2MSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBpbnQgd2N0eXBlX3Q7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyA2 OSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMKIyA3OSAiL3Vzci9pbmNsdWRlL3djdHlwZS5o IiAzCmVudW0KewogIF9fSVN3dXBwZXIgPSAwLAogIF9fSVN3bG93ZXIgPSAxLAogIF9fSVN3YWxw aGEgPSAyLAogIF9fSVN3ZGlnaXQgPSAzLAogIF9fSVN3eGRpZ2l0ID0gNCwKICBfX0lTd3NwYWNl ID0gNSwKICBfX0lTd3ByaW50ID0gNiwKICBfX0lTd2dyYXBoID0gNywKICBfX0lTd2JsYW5rID0g OCwKICBfX0lTd2NudHJsID0gOSwKICBfX0lTd3B1bmN0ID0gMTAsCiAgX19JU3dhbG51bSA9IDEx LAoKICBfSVN3dXBwZXIgPSAoKF9fSVN3dXBwZXIpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d3VwcGVyKSkgPDwgMjQpIDogKChfX0lTd3VwcGVyKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3dXBwZXIpKSA8PCA4KSA6ICgoX19JU3d1cHBlcikgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd3VwcGVyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikpID4+IDI0KSkp KSwKICBfSVN3bG93ZXIgPSAoKF9fSVN3bG93ZXIpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d2xvd2VyKSkgPDwgMjQpIDogKChfX0lTd2xvd2VyKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3bG93ZXIpKSA8PCA4KSA6ICgoX19JU3dsb3dlcikgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd2xvd2VyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikpID4+IDI0KSkp KSwKICBfSVN3YWxwaGEgPSAoKF9fSVN3YWxwaGEpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d2FscGhhKSkgPDwgMjQpIDogKChfX0lTd2FscGhhKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3YWxwaGEpKSA8PCA4KSA6ICgoX19JU3dhbHBoYSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd2FscGhhKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkpID4+IDI0KSkp KSwKICBfSVN3ZGlnaXQgPSAoKF9fSVN3ZGlnaXQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d2RpZ2l0KSkgPDwgMjQpIDogKChfX0lTd2RpZ2l0KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3dkaWdpdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd2RpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkpID4+IDI0KSkp KSwKICBfSVN3eGRpZ2l0ID0gKChfX0lTd3hkaWdpdCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3eGRpZ2l0KSkgPDwgMjQpIDogKChfX0lTd3hkaWdpdCkgPCAxNiA/IChpbnQpICgoMVVMIDw8 IChfX0lTd3hkaWdpdCkpIDw8IDgpIDogKChfX0lTd3hkaWdpdCkgPCAyNCA/IChpbnQpICgoMVVM IDw8IChfX0lTd3hkaWdpdCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkg Pj4gMjQpKSkpLAogIF9JU3dzcGFjZSA9ICgoX19JU3dzcGFjZSkgPCA4ID8gKGludCkgKCgxVUwg PDwgKF9fSVN3c3BhY2UpKSA8PCAyNCkgOiAoKF9fSVN3c3BhY2UpIDwgMTYgPyAoaW50KSAoKDFV TCA8PCAoX19JU3dzcGFjZSkpIDw8IDgpIDogKChfX0lTd3NwYWNlKSA8IDI0ID8gKGludCkgKCgx VUwgPDwgKF9fSVN3c3BhY2UpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3NwYWNlKSkg Pj4gMjQpKSkpLAogIF9JU3dwcmludCA9ICgoX19JU3dwcmludCkgPCA4ID8gKGludCkgKCgxVUwg PDwgKF9fSVN3cHJpbnQpKSA8PCAyNCkgOiAoKF9fSVN3cHJpbnQpIDwgMTYgPyAoaW50KSAoKDFV TCA8PCAoX19JU3dwcmludCkpIDw8IDgpIDogKChfX0lTd3ByaW50KSA8IDI0ID8gKGludCkgKCgx VUwgPDwgKF9fSVN3cHJpbnQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3ByaW50KSkg Pj4gMjQpKSkpLAogIF9JU3dncmFwaCA9ICgoX19JU3dncmFwaCkgPCA4ID8gKGludCkgKCgxVUwg PDwgKF9fSVN3Z3JhcGgpKSA8PCAyNCkgOiAoKF9fSVN3Z3JhcGgpIDwgMTYgPyAoaW50KSAoKDFV TCA8PCAoX19JU3dncmFwaCkpIDw8IDgpIDogKChfX0lTd2dyYXBoKSA8IDI0ID8gKGludCkgKCgx VUwgPDwgKF9fSVN3Z3JhcGgpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2dyYXBoKSkg Pj4gMjQpKSkpLAogIF9JU3dibGFuayA9ICgoX19JU3dibGFuaykgPCA4ID8gKGludCkgKCgxVUwg PDwgKF9fSVN3YmxhbmspKSA8PCAyNCkgOiAoKF9fSVN3YmxhbmspIDwgMTYgPyAoaW50KSAoKDFV TCA8PCAoX19JU3dibGFuaykpIDw8IDgpIDogKChfX0lTd2JsYW5rKSA8IDI0ID8gKGludCkgKCgx VUwgPDwgKF9fSVN3YmxhbmspKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2JsYW5rKSkg Pj4gMjQpKSkpLAogIF9JU3djbnRybCA9ICgoX19JU3djbnRybCkgPCA4ID8gKGludCkgKCgxVUwg PDwgKF9fSVN3Y250cmwpKSA8PCAyNCkgOiAoKF9fSVN3Y250cmwpIDwgMTYgPyAoaW50KSAoKDFV TCA8PCAoX19JU3djbnRybCkpIDw8IDgpIDogKChfX0lTd2NudHJsKSA8IDI0ID8gKGludCkgKCgx VUwgPDwgKF9fSVN3Y250cmwpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2NudHJsKSkg Pj4gMjQpKSkpLAogIF9JU3dwdW5jdCA9ICgoX19JU3dwdW5jdCkgPCA4ID8gKGludCkgKCgxVUwg PDwgKF9fSVN3cHVuY3QpKSA8PCAyNCkgOiAoKF9fSVN3cHVuY3QpIDwgMTYgPyAoaW50KSAoKDFV TCA8PCAoX19JU3dwdW5jdCkpIDw8IDgpIDogKChfX0lTd3B1bmN0KSA8IDI0ID8gKGludCkgKCgx VUwgPDwgKF9fSVN3cHVuY3QpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3B1bmN0KSkg Pj4gMjQpKSkpLAogIF9JU3dhbG51bSA9ICgoX19JU3dhbG51bSkgPCA4ID8gKGludCkgKCgxVUwg PDwgKF9fSVN3YWxudW0pKSA8PCAyNCkgOiAoKF9fSVN3YWxudW0pIDwgMTYgPyAoaW50KSAoKDFV TCA8PCAoX19JU3dhbG51bSkpIDw8IDgpIDogKChfX0lTd2FsbnVtKSA8IDI0ID8gKGludCkgKCgx VUwgPDwgKF9fSVN3YWxudW0pKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2FsbnVtKSkg Pj4gMjQpKSkpCn07CgoKCmV4dGVybiAiQyIgewoKCgoKCgoKZXh0ZXJuIGludCBpc3dhbG51bSAo d2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgaXN3YWxwaGEgKHdpbnRfdCBf X3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd2NudHJsICh3aW50X3QgX193YykgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgaXN3ZGlnaXQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGludCBpc3dncmFwaCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBp c3dsb3dlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXN3cHJpbnQgKHdp bnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3cHVuY3QgKHdpbnRfdCBfX3dj KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3c3BhY2UgKHdpbnRfdCBfX3djKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBpbnQgaXN3dXBwZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBpbnQgaXN3eGRpZ2l0ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu dCBpc3dibGFuayAod2ludF90IF9fd2MpIHRocm93ICgpOwojIDE3OCAiL3Vzci9pbmNsdWRlL3dj dHlwZS5oIiAzCmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGUgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0 eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3Y3R5cGUgKHdpbnRfdCBfX3djLCB3Y3R5cGVf dCBfX2Rlc2MpIHRocm93ICgpOwojIDI0OSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCnR5cGVk ZWYgX19jb25zdCBfX2ludDMyX3QgKndjdHJhbnNfdDsKCgpleHRlcm4gd2ludF90IHRvd2xvd2Vy ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3d1cHBlciAod2ludF90 IF9fd2MpIHRocm93ICgpOwojIDI3NSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCn0KIyAyODgg Ii91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIHdjdHJhbnNf dCB3Y3RyYW5zIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHkpIHRocm93ICgpOwoKCmV4dGVybiB3 aW50X3QgdG93Y3RyYW5zICh3aW50X3QgX193Yywgd2N0cmFuc190IF9fZGVzYykgdGhyb3cgKCk7 CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMzAwICIvdXNyL2luY2x1ZGUv d2N0eXBlLmgiIDIgMwoKCgpleHRlcm4gaW50IF9faXN3YWxudW1fbCAod2ludF90IF9fd2MsIF9f bG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgX19pc3dhbHBoYV9s ICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBfX2lzd2NudHJsX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBfX2lzd2RpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9f bG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2dyYXBoX2wgKHdpbnRfdCBfX3dj LCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dsb3dl cl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBfX2lzd3ByaW50X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dwdW5jdF9sICh3aW50X3QgX193YywgX19sb2NhbGVf dCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3c3BhY2VfbCAod2ludF90 IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lz d3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBpbnQgX19pc3d4ZGlnaXRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2Nh bGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd2JsYW5rX2wgKHdpbnRfdCBfX3djLCBf X2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjdHlwZV90IF9fd2N0eXBl X2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2NhbGVfdCBfX2xvY2FsZSkKICAgICB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2N0eXBlX2wgKHdpbnRfdCBfX3djLCB3Y3R5cGVf dCBfX2Rlc2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRl cm4gd2ludF90IF9fdG93bG93ZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUp IHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgX190b3d1cHBlcl9sICh3aW50X3QgX193YywgX19s b2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y3RyYW5zX3QgX193Y3RyYW5z X2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2NhbGVfdCBfX2xvY2FsZSkKICAgICB0 aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9fdG93Y3RyYW5zX2wgKHdpbnRfdCBfX3djLCB3Y3Ry YW5zX3QgX19kZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19s b2NhbGUpIHRocm93ICgpOwoKCgp9CiMgMzkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf Y3djdHlwZS5oIiAyIDMKIyA2MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2N0eXBl LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVzaW5nIDo6d2N0eXBl X3Q7CiAgdXNpbmcgOjp3Y3RyYW5zX3Q7CgogIHVzaW5nIDo6aXN3YWxudW07CiAgdXNpbmcgOjpp c3dhbHBoYTsKICB1c2luZyA6Omlzd2JsYW5rOwogIHVzaW5nIDo6aXN3Y250cmw7CiAgdXNpbmcg Ojppc3dkaWdpdDsKICB1c2luZyA6Omlzd2dyYXBoOwogIHVzaW5nIDo6aXN3bG93ZXI7CiAgdXNp bmcgOjppc3dwcmludDsKICB1c2luZyA6Omlzd3ByaW50OwogIHVzaW5nIDo6aXN3cHVuY3Q7CiAg dXNpbmcgOjppc3dzcGFjZTsKICB1c2luZyA6Omlzd3VwcGVyOwogIHVzaW5nIDo6aXN3eGRpZ2l0 OwogIHVzaW5nIDo6aXN3Y3R5cGU7CiAgdXNpbmcgOjp0b3dsb3dlcjsKICB1c2luZyA6OnRvd3Vw cGVyOwogIHVzaW5nIDo6dG93Y3RyYW5zOwogIHVzaW5nIDo6d2N0cmFuczsKICB1c2luZyA6Ondj dHlwZTsKfQojIDQ2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAy IDMKIyAxICIvdXNyL2luY2x1ZGUvaWNvbnYuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9pY29u di5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1 ZGUvaWNvbnYuaCIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4wLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9pY29udi5oIiAy IDMKCgpleHRlcm4gIkMiIHsKCgp0eXBlZGVmIHZvaWQgKmljb252X3Q7CgoKCgpleHRlcm4gaWNv bnZfdCBpY29udl9vcGVuIChfX2NvbnN0IGNoYXIgKl9fdG9jb2RlLCBfX2NvbnN0IGNoYXIgKl9f ZnJvbWNvZGUpCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IGljb252IChpY29udl90 IF9fY2QsIGNoYXIgKipfX3Jlc3RyaWN0IF9faW5idWYsCiAgICAgICAgICAgICAgICAgICAgIHNp emVfdCAqX19yZXN0cmljdCBfX2luYnl0ZXNsZWZ0LAogICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX291dGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jl c3RyaWN0IF9fb3V0Ynl0ZXNsZWZ0KTsKCgpleHRlcm4gaW50IGljb252X2Nsb3NlIChpY29udl90 IF9fY2QpIHRocm93ICgpOwoKfQojIDQ3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxl X2ZhY2V0cy5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKCgojIDEgIi91c3IvaW5jbHVkZS9nKyst djMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9iYXNlLmgiIDEgMwojIDUwICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVfYmFzZS5oIiAzCiAgc3Ry dWN0IGN0eXBlX2Jhc2UKICB7CgogICAgdHlwZWRlZiBjb25zdCBpbnQqIF9fdG9fdHlwZTsKCgoK ICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbWFzazsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHVw cGVyID0gX0lTdXBwZXI7CiAgICBzdGF0aWMgY29uc3QgbWFzayBsb3dlciA9IF9JU2xvd2VyOwog ICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgPSBfSVNhbHBoYTsKICAgIHN0YXRpYyBjb25zdCBt YXNrIGRpZ2l0ID0gX0lTZGlnaXQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayB4ZGlnaXQgPSBfSVN4 ZGlnaXQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBzcGFjZSA9IF9JU3NwYWNlOwogICAgc3RhdGlj IGNvbnN0IG1hc2sgcHJpbnQgPSBfSVNwcmludDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGdyYXBo ID0gX0lTZ3JhcGg7CiAgICBzdGF0aWMgY29uc3QgbWFzayBjbnRybCA9IF9JU2NudHJsOwogICAg c3RhdGljIGNvbnN0IG1hc2sgcHVuY3QgPSBfSVNwdW5jdDsKICAgIHN0YXRpYyBjb25zdCBtYXNr IGFsbnVtID0gX0lTYWxudW07CiAgfTsKIyA1NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xv Y2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz cyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGN0 eXBlX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw ZTsKCiAgICAgIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90 eXBlKgogICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSAqX19o aSwgbWFzayAqX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9f aGksIF9fdmVjKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX2lzKG1hc2sg X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8sIF9faGkpOyB9CgogICAg ICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5 cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fc2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAg IHRvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91 cHBlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHRvdXBwZXIoY2hhcl90 eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX3RvdXBwZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b2xv d2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIo X19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b2xvd2VyKGNoYXJfdHlwZSog X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k b190b2xvd2VyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hh ciBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7IH0KCiAgICAg IGNvbnN0IGNoYXIqCiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9f aGksIGNoYXJfdHlwZSogX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4o X19sbywgX19oaSwgX190byk7IH0KCiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBf X2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhf X2MsIF9fZGZhdWx0KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBuYXJyb3coY29u c3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAg Y2hhciBfX2RmYXVsdCwgY2hhciAqX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f bmFycm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsgfQoKICAgIHByb3RlY3RlZDoKICAg ICAgZXhwbGljaXQKICAgICAgX19jdHlwZV9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAw KTogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jdHlw ZV9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFz ayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh cl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw ZSogX19oaSwKICAgICAgICAgICAgbWFzayogX192ZWMpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1 YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFy X3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z dCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3Qo bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3Qg Y2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAg ICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBj aGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5 cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rv bG93ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlw ZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o aSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hh cikgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihj b25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAogICAgICAgICAgICAgICBjaGFyX3R5 cGUqIF9fZGVzdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJv dyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29u c3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25z dCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciog X19kZXN0KSBjb25zdCA9IDA7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgY2xhc3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4KICAg IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5 cGUoc2l6ZV90IF9fcmVmcyA9IDApIDogX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4oX19y ZWZzKSB7IH0KCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgcHJvdGVjdGVkOgogICAg ICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpIHsgfQoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRv X2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiBmYWxzZTsg fQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJf dHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3QKICAg ICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAg IGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90 eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CgogICAgICB2aXJ0dWFsIGNv bnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlw ZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAog ICAgICB7IHJldHVybiBfX2hpOyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190 b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fYzsgfQoKICAgICAg dmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xv LCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9faGk7IH0KCiAg ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlIF9fYykgY29u c3QKICAgICAgeyByZXR1cm4gX19jOyB9CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoK ICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkg Y29uc3QKICAgICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAg ICAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNoYXJfdHlwZSgpOyB9 CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9f bG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdAogICAgICB7IHJl dHVybiBfX2hpOyB9CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlw ZSwgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgICAgeyByZXR1cm4gX19kZmF1bHQ7IH0KCiAgICAg IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBl KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZh dWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9faGk7IH0KICAgIH07Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgY3R5cGU8X0NoYXJUPjo6 aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjdHlwZTxjaGFyPiA6IHB1YmxpYyBfX2N0eXBl X2Fic3RyYWN0X2Jhc2U8Y2hhcj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hh ciBjaGFyX3R5cGU7CgogICAgcHJpdmF0ZToKCiAgICAgIGJvb2wgX01fZGVsOwogICAgICBfX3Rv X3R5cGUgY29uc3QmIF9NX3RvdXBwZXI7CiAgICAgIF9fdG9fdHlwZSBjb25zdCYgX01fdG9sb3dl cjsKICAgICAgY29uc3QgbWFzayogY29uc3QmIF9NX2N0YWJsZTsKICAgICAgY29uc3QgbWFzayog X01fdGFibGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKICAgICAg c3RhdGljIGNvbnN0IHNpemVfdCB0YWJsZV9zaXplID0gMSArIHN0YXRpY19jYXN0PHVuc2lnbmVk IGNoYXI+KC0xKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKGNvbnN0IG1hc2sqIF9fdGFi bGUgPSAwLCBib29sIF9fZGVsID0gZmFsc2UsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGlu bGluZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7CgogICAgICBpbmxp bmUgY29uc3QgY2hhcioKICAgICAgaXMoY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19o aSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNj YW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0 OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25z dCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CiAg ICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7CgogICAgICBjb25zdCBtYXNrKgogICAgICB0YWJs ZSgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gX01fdGFibGU7IH0KCiAgICAgIGNvbnN0 IG1hc2sqCiAgICAgIGNsYXNzaWNfdGFibGUoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX2N0 YWJsZTsgfQoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5 cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19p cyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192 ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5f aXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hp KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25v dChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25z dCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAg ZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5 cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f aGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFy X3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3Rv bG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAg ICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0 IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hh cgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAg IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBl KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAgY2hhciBfX2Rm YXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0 IGN0eXBlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxlJiBf X2xvYyk7CgoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY3R5cGU8d2NoYXJfdD4gOiBwdWJsaWMg X19jdHlwZV9hYnN0cmFjdF9iYXNlPHdjaGFyX3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0 eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdjdHlwZV90IF9fd21hc2tf dHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg IGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9fd21hc2tf dHlwZQogICAgICBfTV9jb252ZXJ0X3RvX3dtYXNrKGNvbnN0IG1hc2sgX19tKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9f aXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBj aGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90 eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf dHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBj b25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5 cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUqIF9fbG8s IGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQog ICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo YXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw ZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihj aGFyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9fd2lkZW4oY29u c3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0 OwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19k ZmF1bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25h cnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAg ICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwoKICAgIH07Cgog IHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PGN0eXBl PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2cr Ky12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2lubGluZS5oIiAxIDMKIyAzNyAiL3Vz ci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2lubGluZS5oIiAz CiAgYm9vbAogIGN0eXBlPGNoYXI+OjoKICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0CiAg eyByZXR1cm4gX01fdGFibGVbX19jXSAmIF9fbTsgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNo YXI+OjoKICBpcyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19oaWdoLCBtYXNrKiBf X3ZlYykgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gpCiAgICAgICpfX3ZlYysr ID0gX01fdGFibGVbKl9fbG93KytdOwogICAgcmV0dXJuIF9faGlnaDsKICB9CgogIGNvbnN0IGNo YXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93 LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdo ICYmICEoX01fdGFibGVbKl9fbG93XSAmIF9fbSkpCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4g X19sb3c7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBzY2FuX25vdChtYXNr IF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAg ICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gKICAgICAgICAgICAmJiAoX01fdGFibGVbKl9fbG93XSAm IF9fbSkgIT0gMCkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsKICB9CiMgMzkzICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFtZSA6IHB1YmxpYyBjdHlwZTxf Q2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK CiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9f cmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGVfYnlu YW1lKCkgeyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVfYnluYW1lPGNoYXI+Ojpj dHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsKCgoKIyAxICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL2NvZGVjdnQuaCIgMwojIDU3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5o IiAzCiAgY2xhc3MgX19lbmNfdHJhaXRzCiAgewogIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgaWNv bnZfdCBfX2Rlc2NfdHlwZTsKCiAgcHJvdGVjdGVkOgoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9T X21heF9zaXplID0gMzI7CgogICAgY2hhciBfTV9pbnRfZW5jW19TX21heF9zaXplXTsKCiAgICBj aGFyIF9NX2V4dF9lbmNbX1NfbWF4X3NpemVdOwoKCiAgICBfX2Rlc2NfdHlwZSBfTV9pbl9kZXNj OwoKICAgIF9fZGVzY190eXBlIF9NX291dF9kZXNjOwoKCiAgICBpbnQgX01fZXh0X2JvbTsKCgog ICAgaW50IF9NX2ludF9ib207CgogIHB1YmxpYzoKICAgIF9fZW5jX3RyYWl0cygpCiAgICA6IF9N X2luX2Rlc2MoMCksIF9NX291dF9kZXNjKDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDAp CiAgICB7CgoKCgogICAgICBzdHJjcHkoX01faW50X2VuYywgIlVDUzQiKTsKCgogICAgICBzdHJj cHkoX01fZXh0X2VuYywgbmxfbGFuZ2luZm8oQ09ERVNFVCkpOwogICAgfQoKICAgIF9fZW5jX3Ry YWl0cyhjb25zdCBjaGFyKiBfX2ludCwgY29uc3QgY2hhciogX19leHQsIGludCBfX2lib20gPSAw LAogICAgICAgICAgICAgICAgIGludCBfX2Vib20gPSAwKQogICAgOiBfTV9pbl9kZXNjKDApLCBf TV9vdXRfZGVzYygwKSwgX01fZXh0X2JvbSgwKSwgX01faW50X2JvbSgwKQogICAgewogICAgICBz dHJuY3B5KF9NX2ludF9lbmMsIF9faW50LCBfU19tYXhfc2l6ZSk7CiAgICAgIHN0cm5jcHkoX01f ZXh0X2VuYywgX19leHQsIF9TX21heF9zaXplKTsKICAgIH0KCgoKCgoKICAgIF9fZW5jX3RyYWl0 cyhjb25zdCBfX2VuY190cmFpdHMmIF9fb2JqKQogICAgewogICAgICBzdHJuY3B5KF9NX2ludF9l bmMsIF9fb2JqLl9NX2ludF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgc3RybmNweShfTV9leHRf ZW5jLCBfX29iai5fTV9leHRfZW5jLCBfU19tYXhfc2l6ZSk7CiAgICAgIF9NX2V4dF9ib20gPSBf X29iai5fTV9leHRfYm9tOwogICAgICBfTV9pbnRfYm9tID0gX19vYmouX01faW50X2JvbTsKICAg IH0KCiAgICB+X19lbmNfdHJhaXRzKCkKICAgIHsKICAgICAgaWNvbnZfY2xvc2UoX01faW5fZGVz Yyk7CiAgICAgIGljb252X2Nsb3NlKF9NX291dF9kZXNjKTsKICAgIH0KCgogICAgdm9pZAogICAg X01faW5pdCgpCiAgICB7CiAgICAgIF9NX2luX2Rlc2MgPSBpY29udl9vcGVuKF9NX2ludF9lbmMs IF9NX2V4dF9lbmMpOwogICAgICBfTV9vdXRfZGVzYyA9IGljb252X29wZW4oX01fZXh0X2VuYywg X01faW50X2VuYyk7CiAgICAgIGlmIChfTV9vdXRfZGVzYyA9PSBpY29udl90KC0xKSB8fCBfTV9p bl9kZXNjID09IGljb252X3QoLTEpKQogICAgICAgIHsKCiAgICAgICAgfQogICAgfQoKICAgIGJv b2wKICAgIF9NX2dvb2QoKQogICAgewogICAgICByZXR1cm4gX01fb3V0X2Rlc2MgJiYgX01faW5f ZGVzYwogICAgICAgICAgICAgJiYgX01fb3V0X2Rlc2MgIT0gaWNvbnZfdCgtMSkgJiYgX01faW5f ZGVzYyAhPSBpY29udl90KC0xKTsKICAgIH0KCiAgICBjb25zdCBfX2Rlc2NfdHlwZSoKICAgIF9N X2dldF9pbl9kZXNjcmlwdG9yKCkKICAgIHsgcmV0dXJuICZfTV9pbl9kZXNjOyB9CgogICAgY29u c3QgX19kZXNjX3R5cGUqCiAgICBfTV9nZXRfb3V0X2Rlc2NyaXB0b3IoKQogICAgeyByZXR1cm4g Jl9NX291dF9kZXNjOyB9CgogICBjb25zdCBjaGFyKgogICAgX01fZ2V0X2ludGVybmFsX2VuYygp CiAgICB7IHJldHVybiBfTV9pbnRfZW5jOyB9CgogICAgY29uc3QgY2hhcioKICAgIF9NX2dldF9l eHRlcm5hbF9lbmMoKQogICAgeyByZXR1cm4gX01fZXh0X2VuYzsgfQoKICAgIGludAogICAgX01f Z2V0X2V4dGVybmFsX2JvbSgpCiAgICB7IHJldHVybiBfTV9leHRfYm9tOyB9CgogICAgaW50CiAg ICBfTV9nZXRfaW50ZXJuYWxfYm9tKCkKICAgIHsgcmV0dXJuIF9NX2ludF9ib207IH0KICB9OwoK CgoKICBjbGFzcyBjb2RlY3Z0X2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSByZXN1bHQKICAg IHsKICAgICAgb2ssCiAgICAgIHBhcnRpYWwsCiAgICAgIGVycm9yLAogICAgICBub2NvbnYKICAg IH07CiAgfTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0 ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNl CiAgICA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgY29kZWN2dF9iYXNlCiAgICB7CiAg ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAg ICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBl eHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgoKICAgICAgcmVz dWx0CiAgICAgIG91dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19m cm9tLAogICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVy bl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJu X3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0 CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJvbSwgX19m cm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBf X3RvX2VuZCwgX190b19uZXh0KTsKICAgICAgfQoKICAgICAgcmVzdWx0CiAgICAgIHVuc2hpZnQo c3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3Rv X2VuZCwKICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fdW5zaGlmdChfX3N0YXRlLCBfX3RvLF9fdG9fZW5kLF9fdG9fbmV4 dCk7IH0KCiAgICAgIHJlc3VsdAogICAgICBpbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBl eHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2Vu ZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgaW50ZXJuX3R5cGUq IF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3Rv X25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9faW4oX19zdGF0ZSwg X19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIGludAogICAgICBl bmNvZGluZygpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZW5jb2Rpbmco KTsgfQoKICAgICAgYm9vbAogICAgICBhbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAg ICB7IHJldHVybiB0aGlzLT5kb19hbHdheXNfbm9jb252KCk7IH0KCiAgICAgIGludAogICAgICBs ZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJv bSwKICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19sZW5ndGgoX19zdGF0ZSwgX19mcm9tLCBfX2Vu ZCwgX19tYXgpOyB9CgogICAgICBpbnQKICAgICAgbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbWF4X2xlbmd0aCgpOyB9CgogICAgcHJvdGVjdGVkOgog ICAgICBleHBsaWNpdAogICAgICBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZz ID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5f X2NvZGVjdnRfYWJzdHJhY3RfYmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAg ZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAg ICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5 cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5f dHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u c3QgPSAwOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBl JiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlw ZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2 aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRl cm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2Vu ZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5 cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUq JiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29k aW5nKCkgY29uc3QgdGhyb3coKSA9IDA7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3 YXlzX25vY29udigpIGNvbnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAg ZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAog ICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNv bnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0 aHJvdygpID0gMDsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVu YW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dAogICAgOiBw dWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVU PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCBy ZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYg X0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoK CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2 dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50 ZXJuVCxfRXh0ZXJuVCxfU3RhdGVUPiAoX19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAg IHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGxvY2Fs ZTo6aWQgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+OjppZDsKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNsYXNzIGNv ZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+CiAgICA6IHB1YmxpYyBfX2Nv ZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz4KICAg IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0 OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9FeHRl cm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9fZW5jX3RyYWl0cyBzdGF0ZV90eXBlOwog ICAgICB0eXBlZGVmIF9fZW5jX3RyYWl0czo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAg IHR5cGVkZWYgX19lbmNfdHJhaXRzIF9fZW5jX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2FsZTo6 aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKQog ICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGludGVybl90eXBlLCBleHRlcm5fdHlwZSwg c3RhdGVfdHlwZT4oX19yZWZzKQogICAgICB7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVj dnQoX19lbmNfdHlwZSogX19lbmMsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2 dF9hYnN0cmFjdF9iYXNlPGludGVybl90eXBlLCBleHRlcm5fdHlwZSwgc3RhdGVfdHlwZT4oX19y ZWZzKQogICAgICB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVj dnQoKSB7IH0KCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBf X3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50 ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAg ICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAg ICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBy ZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSog X190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBl KiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0 YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAg IGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJv bV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9f ZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0 dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2 aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVy bl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQs IHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVu Z3RoKCkgY29uc3QgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5U LCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGxvY2FsZTo6aWQKICAgIGNvZGVjdnQ8X0ludGVyblQs IF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjppZDsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U PgogICAgaW5saW5lIHNpemVfdAogICAgX19pY29udl9hZGFwdG9yKHNpemVfdCgqaWNvbnZfZnVu YykoaWNvbnZfdCwgX1QsIHNpemVfdCosIGNoYXIqKiwgc2l6ZV90KiksCiAgICAgICAgICAgICAg ICAgICAgaWNvbnZfdCBjZCwgY2hhcioqIGluYnVmLCBzaXplX3QqIGluYnl0ZXNsZWZ0LAogICAg ICAgICAgICAgICAgICAgIGNoYXIqKiBvdXRidWYsIHNpemVfdCogb3V0Ynl0ZXNsZWZ0KQogICAg ewogICAgICByZXR1cm4gaWNvbnZfZnVuYyhjZCwgKF9UKWluYnVmLCBpbmJ5dGVzbGVmdCwgb3V0 YnVmLCBvdXRieXRlc2xlZnQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg dHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxf SW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9fb3V0KHN0YXRlX3R5cGUm IF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgY29uc3QgaW50 ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAg ICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAg ICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9f cmV0ID0gZXJyb3I7CiAgICAgIGlmIChfX3N0YXRlLl9NX2dvb2QoKSkKICAgICAgICB7CiAgICAg ICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICAg ICAgY29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9IF9fc3RhdGUuX01fZ2V0X291dF9kZXNjcmlw dG9yKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19mbXVsdGlwbGUgPSBzaXplb2YoaW50ZXJu X3R5cGUpIC8gc2l6ZW9mKGNoYXIpOwogICAgICAgICAgc2l6ZV90IF9fZmxlbiA9IF9fZm11bHRp cGxlICogKF9fZnJvbV9lbmQgLSBfX2Zyb20pOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdG11 bHRpcGxlID0gc2l6ZW9mKGV4dGVybl90eXBlKSAvIHNpemVvZihjaGFyKTsKICAgICAgICAgIHNp emVfdCBfX3RsZW4gPSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pOwoKCgogICAgICAg ICAgY2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsKICAgICAgICAg IGNoYXIqIF9fY2Zyb207CiAgICAgICAgICBzaXplX3QgX19jb252OwoKCgoKCgogICAgICAgICAg aW50IF9faW50X2JvbSA9IF9fc3RhdGUuX01fZ2V0X2ludGVybmFsX2JvbSgpOwogICAgICAgICAg aWYgKF9faW50X2JvbSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBfX3NpemUg PSBfX2Zyb21fZW5kIC0gX19mcm9tOwogICAgICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhl ZCA9IHN0YXRpY19jYXN0PGludGVybl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoaW50 ZXJuX3R5cGUpICogKF9fc2l6ZSArIDEpKSk7CiAgICAgICAgICAgICAgX19jZml4ZWRbMF0gPSBz dGF0aWNfY2FzdDxpbnRlcm5fdHlwZT4oX19pbnRfYm9tKTsKICAgICAgICAgICAgICBjaGFyX3Ry YWl0czxpbnRlcm5fdHlwZT46OmNvcHkoX19jZml4ZWQgKyAxLCBfX2Zyb20sIF9fc2l6ZSk7CiAg ICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsK ICAgICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZf X2Nmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmxlbiwg Jl9fY3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fY2ZpeGVkID0gY29uc3RfY2FzdDxpbnRl cm5fdHlwZSo+KF9fZnJvbSk7CiAgICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nh c3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0 b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmX19mbGVuLCAmX19jdG8sICZfX3RsZW4pOwogICAgICAgICAgICB9CgogICAg ICAgICAgaWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludGVybl90eXBlKj4oX19j ZnJvbSk7CiAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxleHRlcm5f dHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICBfX3JldCA9IG9rOwogICAgICAgICAgICB9CiAg ICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19mbGVuIDwgc3Rh dGljX2Nhc3Q8c2l6ZV90PihfX2Zyb21fZW5kIC0gX19mcm9tKSkKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGlu dGVybl90eXBlKj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50 ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgICAgIF9fcmV0 ID0gcGFydGlhbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICBfX3JldCA9IGVycm9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1 cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBf RXh0ZXJuVD4KICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBf RXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3Rh dGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19l bmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgewogICAgICByZXN1bHQgX19y ZXQgPSBlcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAgIHsKICAgICAg ICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAgICAg ICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5fZGVzY3JpcHRv cigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9mKGludGVybl90 eXBlKSAvIHNpemVvZihjaGFyKTsKICAgICAgICAgIHNpemVfdCBfX3RsZW4gPSBfX3RtdWx0aXBs ZSAqIChfX3RvX2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hhciogX19jdG8gPSByZWludGVy cHJldF9jYXN0PGNoYXIqPihfX3RvKTsKICAgICAgICAgIHNpemVfdCBfX2NvbnYgPSBfX2ljb252 X2FkYXB0b3IoaWNvbnYsKl9fZGVzYywgX19udWxsLCBfX251bGwsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZfX2N0bywgJl9fdGxlbik7CgogICAgICAgICAgaWYg KF9fY29udiAhPSBzaXplX3QoLTEpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX190b19u ZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAg ICBpZiAoX190bGVuID09IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190bykpCiAgICAgICAg ICAgICAgICBfX3JldCA9IG5vY29udjsKICAgICAgICAgICAgICBlbHNlIGlmIChfX3RsZW4gPT0g MCkKICAgICAgICAgICAgICAgIF9fcmV0ID0gb2s7CiAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgX19yZXQgPSBwYXJ0aWFsOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAg ICAgICAgICAgIF9fcmV0ID0gZXJyb3I7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAg IGNvZGVjdnRfYmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19l bmNfdHJhaXRzPjo6CiAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5f dHlwZSogX19mcm9tLAogICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNv bnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICBpbnRlcm5fdHlwZSogX190 bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25l eHQpIGNvbnN0CiAgICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGVycm9yOwogICAgICBpZiAoX19z dGF0ZS5fTV9nb29kKCkpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBzdGF0ZV90eXBlOjpf X2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAgICAgIGNvbnN0IF9fZGVzY190eXBlKiBfX2Rl c2MgPSBfX3N0YXRlLl9NX2dldF9pbl9kZXNjcmlwdG9yKCk7CiAgICAgICAgICBjb25zdCBzaXpl X3QgX19mbXVsdGlwbGUgPSBzaXplb2YoZXh0ZXJuX3R5cGUpIC8gc2l6ZW9mKGNoYXIpOwogICAg ICAgICAgc2l6ZV90IF9fZmxlbiA9IF9fZm11bHRpcGxlICogKF9fZnJvbV9lbmQgLSBfX2Zyb20p OwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBl KSAvIHNpemVvZihjaGFyKTsKICAgICAgICAgIHNpemVfdCBfX3RsZW4gPSBfX3RtdWx0aXBsZSAq IChfX3RvX2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hhciogX19jdG8gPSByZWludGVycHJl dF9jYXN0PGNoYXIqPihfX3RvKTsKICAgICAgICAgIGNoYXIqIF9fY2Zyb207CiAgICAgICAgICBz aXplX3QgX19jb252OwoKCgoKCgogICAgICAgICAgaW50IF9fZXh0X2JvbSA9IF9fc3RhdGUuX01f Z2V0X2V4dGVybmFsX2JvbSgpOwogICAgICAgICAgaWYgKF9fZXh0X2JvbSkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIHNpemVfdCBfX3NpemUgPSBfX2Zyb21fZW5kIC0gX19mcm9tOwogICAg ICAgICAgICAgIGV4dGVybl90eXBlKiBfX2NmaXhlZCA9IHN0YXRpY19jYXN0PGV4dGVybl90eXBl Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoZXh0ZXJuX3R5cGUpICogKF9fc2l6ZSArIDEpKSk7 CiAgICAgICAgICAgICAgX19jZml4ZWRbMF0gPSBzdGF0aWNfY2FzdDxleHRlcm5fdHlwZT4oX19l eHRfYm9tKTsKICAgICAgICAgICAgICBjaGFyX3RyYWl0czxleHRlcm5fdHlwZT46OmNvcHkoX19j Zml4ZWQgKyAxLCBfX2Zyb20sIF9fc2l6ZSk7CiAgICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50 ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBfX2NvbnYgPSBfX2lj b252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmX19mbGVuLCAmX19jdG8sICZfX3RsZW4pOwogICAgICAgICAg ICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBleHRlcm5fdHlw ZSogX19jZml4ZWQgPSBjb25zdF9jYXN0PGV4dGVybl90eXBlKj4oX19mcm9tKTsKICAgICAgICAg ICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAg ICAgICAgIF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0bywg Jl9fdGxlbik7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgaWYgKF9fY29udiAhPSBzaXplX3Qo LTEpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJl dF9jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgX190b19u ZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAg ICBfX3JldCA9IG9rOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBpZiAoX19mbGVuIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihfX2Zyb21fZW5k IC0gX19mcm9tKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19mcm9tX25l eHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4oX19jZnJvbSk7CiAgICAg ICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50ZXJuX3R5cGUqPihf X2N0byk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gcGFydGlhbDsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IGVycm9yOwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGludAogICAgY29kZWN2 dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9fZW5jb2RpbmcoKSBj b25zdCB0aHJvdygpCiAgICB7IHJldHVybiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRl cm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGJvb2wKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9F eHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJv dygpCiAgICB7IHJldHVybiBmYWxzZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg dHlwZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5U LCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3Qg ZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19l bmQsIHNpemVfdCBfX21heCkgY29uc3QKICAgIHsgcmV0dXJuIG1pbihfX21heCwgc3RhdGljX2Nh c3Q8c2l6ZV90PihfX2VuZCAtIF9fZnJvbSkpOyB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu dGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBf RXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3co KQogICAgeyByZXR1cm4gMTsgfQoKCgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PGNo YXIsIGNoYXIsIG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNl PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg Y2hhciBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0 eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk OwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAg cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFs IHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5 cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBj b25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUq IF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYg X190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQo c3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAg ZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25z dCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19m cm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50 ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJu X3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5j b2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5 c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVu Z3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAg ICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoK ICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAg fTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3Rh dGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPHdjaGFyX3QsIGNoYXIs IG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgd2NoYXJfdCBpbnRl cm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1i c3RhdGVfdCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAg ZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVk OgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAog ICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJv bSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRl cm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4 dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0 KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlw ZSYgX19zdGF0ZSwKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5 cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBj b25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3Rh dGUsCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLCBjb25zdCBleHRlcm5f dHlwZSogX19mcm9tX2VuZCwKICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9t X25leHQsCiAgICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9f ZW5kLAogICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAg dmlydHVhbAogICAgICBpbnQgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmly dHVhbAogICAgICBib29sIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAg dmlydHVhbAogICAgICBpbnQgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRl cm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBf X2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21h eF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBj b2RlY3Z0X2J5bmFtZSA6IHB1YmxpYyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRl VD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dF9ieW5hbWUo Y29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGNvZGVjdnQ8X0ludGVyblQs IF9FeHRlcm5ULCBfU3RhdGVUPihfX3JlZnMpIHsgfQogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0 dWFsCiAgICAgIH5jb2RlY3Z0X2J5bmFtZSgpIHsgfQogICAgfTsKIyA0MTYgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBfTnVtZXJpY19nZXQ7CgoKCgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgX0Zvcm1hdF9jYWNoZQogICAgewog ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVm IGNoYXJfdHJhaXRzPF9DaGFyVD4gdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3Ry aW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5 cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CgoKICAgICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAg ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgICAgZnJp ZW5kIGNsYXNzIF9OdW1lcmljX2dldDsKICAgICAgZnJpZW5kIGNsYXNzIG51bV9nZXQ8X0NoYXJU PjsKICAgICAgZnJpZW5kIGNsYXNzIG51bV9wdXQ8X0NoYXJUPjsKICAgICAgZnJpZW5kIGNsYXNz IHRpbWVfZ2V0PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyBtb25leV9nZXQ8X0NoYXJUPjsK ICAgICAgZnJpZW5kIGNsYXNzIHRpbWVfcHV0PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyBt b25leV9wdXQ8X0NoYXJUPjsKCgoKCiAgICAgIHN0YXRpYyBpbnQgX1NfcHdvcmRfaXg7CgoKCiAg ICAgIGJvb2wgX01fdmFsaWQ7CgoKCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyIF9TX2xpdGVyYWxz W107CgoKCgogICAgICBlbnVtCiAgICAgIHsKICAgICAgICBfU19taW51cywKICAgICAgICBfU19w bHVzLAogICAgICAgIF9TX3gsCiAgICAgICAgX1NfWCwKICAgICAgICBfU19kaWdpdHMsCiAgICAg ICAgX1NfZGlnaXRzX2VuZCA9IF9TX2RpZ2l0cyArIDE2LAogICAgICAgIF9TX3VkaWdpdHMgPSBf U19kaWdpdHNfZW5kLAogICAgICAgIF9TX3VkaWdpdHNfZW5kID0gX1NfdWRpZ2l0cyArIDE2LAog ICAgICAgIF9TX2VlID0gX1NfZGlnaXRzICsgMTQsCiAgICAgICAgX1NfRWUgPSBfU191ZGlnaXRz ICsgMTQKICAgICAgfTsKCgoKCiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwoKCgoK CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwoKCgogICAgICBzdHJpbmdfdHlwZSBf TV90cnVlbmFtZTsKICAgICAgc3RyaW5nX3R5cGUgX01fZmFsc2VuYW1lOwoKCgogICAgICBib29s IF9NX3VzZV9ncm91cGluZzsKCgoKICAgICAgc3RyaW5nIF9NX2dyb3VwaW5nOwoKICAgICAgX0Zv cm1hdF9jYWNoZSgpOwoKICAgICAgfl9Gb3JtYXRfY2FjaGUoKSB0aHJvdygpIHsgfQoKCgoKICAg ICAgc3RhdGljIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPioKICAgICAgX1NfZ2V0KGlvc19iYXNlJiBf X2lvcyk7CgogICAgICB2b2lkCiAgICAgIF9NX3BvcHVsYXRlKGlvc19iYXNlJik7CgogICAgICBz dGF0aWMgdm9pZAogICAgICBfU19jYWxsYmFjayhpb3NfYmFzZTo6ZXZlbnQgX19ldmVudCwgaW9z X2Jhc2UmIF9faW9zLCBpbnQgX19peCkgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGludCBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9TX3B3b3JkX2l4OwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjb25zdCBjaGFyIF9Gb3JtYXRfY2FjaGU8 X0NoYXJUPjo6CiAgICBfU19saXRlcmFsc1tdID0gIi0reFgwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1 Njc4OUFCQ0RFRiI7CgogICB0ZW1wbGF0ZTw+IF9Gb3JtYXRfY2FjaGU8Y2hhcj46Ol9Gb3JtYXRf Y2FjaGUoKTsKCiAgIHRlbXBsYXRlPD4gX0Zvcm1hdF9jYWNoZTx3Y2hhcl90Pjo6X0Zvcm1hdF9j YWNoZSgpOwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+ CiAgICBjbGFzcyBfTnVtZXJpY19nZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCgogICAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVu ZCBjbGFzcyBudW1fZ2V0OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUg X0luSXRlclQ+CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX2dldDsKICAgICAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgbW9uZXlf Z2V0OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAg ICAgIGZyaWVuZCBjbGFzcyBudW1fcHV0OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwg dHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX3B1dDsKICAgICAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xh c3MgbW9uZXlfcHV0OwoKICAgIHByaXZhdGU6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9OdW1lcmlj X2dldCgpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X051bWVyaWNfZ2V0KCkgeyB9CgogICAg ICBpdGVyX3R5cGUKICAgICAgX01fZ2V0X2RpZ2l0cyhpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl IF9fZW5kKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX0luSXRlcj4KICAgIGNsYXNzIG51bV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAg ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4g X190cmFpdHNfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGlj aXQKICAgICAgbnVtX2dldChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVm cykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5 cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCBib29sJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwg X19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlw ZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLCBzaG9ydCYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19n ZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAg ICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBpbnQmIF9fdikgY29uc3QKICAgICAg eyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAg IGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9z X2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9f dikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2Vyciwg X192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJf dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwg X19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChp dGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAg ICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAg ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWdu ZWQgaW50JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19p bywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9f aW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4g ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlw ZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9u ZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9f ZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwg aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4s IF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChp dGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJf dHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um IF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBf X3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIs IF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJf dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2Vu ZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgfm51 bV9nZXQoKSB7IH0KCgoKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3QoaXRlcl90eXBlIF9f YmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwgY2hhciogX194dHJjLAogICAgICAgICAgICAgICAgIGlu dCYgX19iYXNlLCBib29sIF9fZnAgPSB0cnVlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90 eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFz ZTo6aW9zdGF0ZSYsIGJvb2wmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg ICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3Rh dGUmLCBzaG9ydCYpIGNvbnN0OwogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQo aXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBpbnQm KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldCAoaXRlcl90eXBl LCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBsb25nJikgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5 cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9u ZyBsb25nJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRl cl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAog ICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0JikgY29uc3Q7CiAgICAgIHZpcnR1YWwgaXRlcl90 eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLAogICAgICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JikgY29uc3Q7CiAg ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwg aW9zX2Jhc2UmLAogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWdu ZWQgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0 ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z dGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBp dGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7CgogICAg ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlv c19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZG91YmxlJikg Y29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp dGVyX3R5cGUsIGlvc19iYXNlJiwKICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgbG9uZyBkb3VibGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRv X2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsCiAgICAgICAgICAgICB2b2lkKiYpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9D aGFyVCwgX0luSXRlcj46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtX2dldDxj aGFyLCBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ID46OgogICAgX01fZXh0cmFjdChpc3RyZWFt YnVmX2l0ZXJhdG9yPGNoYXI+IF9fYmVnLAogICAgICAgICAgICAgICBpc3RyZWFtYnVmX2l0ZXJh dG9yPGNoYXI+IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCBjaGFyKiBfX3h0cmMsCiAgICAgICAgICAgICAgIGludCYgX19iYXNl LCBib29sIF9fZnApIGNvbnN0OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX091dEl0ZXI+CiAgICBjbGFzcyBfTnVtZXJpY19wdXQKICAgIHsKICAgIHB1YmxpYzoKICAg ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJf dHlwZTsKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX051bWVyaWNfcHV0KCkg eyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fTnVtZXJpY19wdXQoKSB7IH0KICAgIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyBudW1f cHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk ZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7Cgog ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9wdXQo c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRl cl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUg X19maWxsLCBib29sIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBf X2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywg aW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsg cmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUK ICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGws CiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0 KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0 ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBf X3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9 CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2Ys IGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25z dAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAg IGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90 eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywg X19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBl IF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGxvbmcgZG91 YmxlIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9f dik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2Um IF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QK ICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICBwcm90 ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bV9wdXQoKSB7IH07CgogICAgICB2aXJ0dWFs IGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBf X2ZpbGwsIGJvb2wgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRv X3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNv bnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlv c19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3Q7CgoKICAgICAg dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFy X3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJf dHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGws IHVuc2lnbmVkIGxvbmcgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAg ICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUg X192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5 cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBjb25zdDsK CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNl JiwgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgdm9pZCogX192KSBjb25zdDsKICAgIH07CgogIHRl bXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjpp ZCBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgY2xhc3MgbnVtcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAg cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJh c2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQg aWQ7CgogICAgcHJpdmF0ZToKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAg IGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwogICAgICBzdHJpbmcgX01fZ3JvdXBpbmc7CiAg ICAgIHN0cmluZ190eXBlIF9NX3RydWVuYW1lOwogICAgICBzdHJpbmdfdHlwZSBfTV9mYWxzZW5h bWU7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChzaXplX3QgX19y ZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251 bXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0KF9fY19sb2NhbGUgX19j bG9jLCBzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBf TV9pbml0aWFsaXplX251bXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBk ZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZGVjaW1hbF9wb2ludCgpOyB9 CgogICAgICBjaGFyX3R5cGUKICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIGRvX3Rob3VzYW5kc19zZXAoKTsgfQoKICAgICAgc3RyaW5nCiAgICAgIGdyb3VwaW5nKCkg Y29uc3QKICAgICAgeyByZXR1cm4gZG9fZ3JvdXBpbmcoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUK ICAgICAgdHJ1ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBkb190cnVlbmFtZSgpOyB9Cgog ICAgICBzdHJpbmdfdHlwZQogICAgICBmYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBk b19mYWxzZW5hbWUoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVt cHVuY3QoKSB7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9p bnQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0 dWFsIGNoYXJfdHlwZQogICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1 cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3Jv dXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgICAgdmlydHVh bCBzdHJpbmdfdHlwZQogICAgICBkb190cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N X3RydWVuYW1lOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2ZhbHNlbmFt ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2ZhbHNlbmFtZTsgfQoKCiAgICAgIHZvaWQKICAg ICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9fbnVsbCk7CiAg ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG51bXB1bmN0 PF9DaGFyVD46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBu dW1wdW5jdDxfQ2hhclQ+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgKQogICAg ewoKICAgIH0KCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2lu aXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2 b2lkCiAgICBudW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9j YWxlIF9fY2xvYyk7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbnVt cHVuY3RfYnluYW1lIDogcHVibGljIG51bXB1bmN0PF9DaGFyVD4KICAgIHsKICAgICAgX19jX2xv Y2FsZSBfTV9jX2xvY2FsZV9udW1wdW5jdDsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hh clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190 eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9f cywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbnVtcHVuY3Q8X0NoYXJUPihfX3JlZnMpCiAg ICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QsIF9f cyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfTV9jX2xvY2FsZV9udW1wdW5jdCk7 CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0X2J5 bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1wdW5jdCk7 IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRl IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJp bmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAg ICAgY29sbGF0ZShzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9 CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hh clQqIF9faGkxLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFy VCogX19oaTIpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2NvbXBhcmUoX19sbzEsIF9f aGkxLCBfX2xvMiwgX19oaTIpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICB0cmFuc2Zvcm0o Y29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX3RyYW5zZm9ybShfX2xvLCBfX2hpKTsgfQoKICAgICAgbG9uZwogICAgICBo YXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb19oYXNoKF9fbG8sIF9faGkpOyB9CgogIHByb3RlY3RlZDoKICAgICAg fmNvbGxhdGUoKSB7IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2NvbXBhcmUoY29uc3Qg X0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAgICBjb25z dCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29u c3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgbG9uZwogICAgICBkb19oYXNo KGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKICAgIH07Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgY29sbGF0ZTxfQ2hhclQ+ OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGludAogICAgY29sbGF0ZTxjaGFyPjo6ZG9fY29tcGFy ZShjb25zdCBjaGFyKiBfX2xvMSwgY29uc3QgY2hhciogX19oaTEsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbG8yLCBjb25zdCBjaGFyKiBfX2hpMikgY29uc3Q7 CgogIHRlbXBsYXRlPD4KICAgIHN0cmluZwogICAgY29sbGF0ZTxjaGFyPjo6ZG9fdHJhbnNmb3Jt KGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICB0ZW1wbGF0ZTw+ CiAgICBsb25nCiAgICBjb2xsYXRlPGNoYXI+Ojpkb19oYXNoKGNvbnN0IGNoYXIqIF9fbG8sIGNv bnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8 d2NoYXJfdD46OmRvX2NvbXBhcmUoY29uc3Qgd2NoYXJfdCogX19sbzEsIGNvbnN0IHdjaGFyX3Qq IF9faGkxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90KiBf X2xvMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCogX19o aTIpIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICB3c3RyaW5nCiAgICBjb2xsYXRlPHdjaGFyX3Q+ Ojpkb190cmFuc2Zvcm0oY29uc3Qgd2NoYXJfdCogX19sbywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdDsKCiAgdGVtcGxhdGU8Pgog ICAgbG9uZwogICAgY29sbGF0ZTx3Y2hhcl90Pjo6ZG9faGFzaChjb25zdCB3Y2hhcl90KiBfX2xv LCBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdDsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGNsYXNzIGNvbGxhdGVfYnluYW1lIDogcHVibGljIGNvbGxhdGU8X0NoYXJUPgogICAg ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAg ICAgY29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBw cm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxhdGVfYnluYW1lKCkgeyB9CiAgICB9 OwoKICB0ZW1wbGF0ZTw+CiAgICBjb2xsYXRlX2J5bmFtZTxjaGFyPjo6Y29sbGF0ZV9ieW5hbWUo Y29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMpOwoKICB0ZW1wbGF0ZTw+CiAgICBjb2xsYXRlX2J5 bmFtZTx3Y2hhcl90Pjo6Y29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMp OwoKCiAgY2xhc3MgdGltZV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gZGF0ZW9yZGVyIHsg bm9fb3JkZXIsIGRteSwgbWR5LCB5bWQsIHlkbSB9OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0IDogcHVibGljIGxv Y2FsZTo6ZmFjZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5 cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsK CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9n ZXQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSwgX01f ZGF5bmFtZXMoMCksIF9NX21vbnRobmFtZXMoMCkgeyB9CgogICAgICBkYXRlb3JkZXIKICAgICAg ZGF0ZV9vcmRlcigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2RhdGVfb3JkZXIoKTsgfQoKICAg ICAgaXRlcl90eXBlCiAgICAgIGdldF90aW1lKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCB0bSogX190KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXRfdGltZShfX3MsIF9fZW5kLCBf X2YsIF9fZXJyLCBfX3QpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X2RhdGUoaXRlcl90 eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRv X2dldF9kYXRlKF9fcywgX19lbmQsIF9fZiwgX19lcnIsIF9fdCk7IH0KCiAgICAgIGl0ZXJfdHlw ZQogICAgICBnZXRfd2Vla2RheShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2YsCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0q IF9fdCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0X3dlZWtkYXkoX19zLF9fZW5kLF9fZixf X2VycixfX3QpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X21vbnRobmFtZShpdGVyX3R5 cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICAgICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdAogICAgICB7IHJldHVy biBkb19nZXRfbW9udGhuYW1lKF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQoKICAgICAgaXRl cl90eXBlCiAgICAgIGdldF95ZWFyKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z X2Jhc2UmIF9fZiwKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSog X190KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXRfeWVhcihfX3MsX19lbmQsX19mLF9fZXJy LF9fdCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0KCkK ICAgICAgewogICAgICAgIGRlbGV0ZSBbXSBfTV9tb250aG5hbWVzOwogICAgICAgIGRlbGV0ZSBb XSBfTV9kYXluYW1lczsKICAgICAgfQoKICAgICAgdmlydHVhbCBkYXRlb3JkZXIKICAgICAgZG9f ZGF0ZV9vcmRlcigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRpbWVfYmFzZTo6eW1kOyB9CgogICAg ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19zLCBpdGVy X3R5cGUgLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAs IHRtKiApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5 cGUKICAgICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgaW9zX2Jhc2Um LAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSogKSBjb25zdAogICAg ICB7IHJldHVybiBfX3M7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF93 ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAgICAg ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0OwoK ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUg X19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBp dGVyX3R5cGUKICAgICAgZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgaW9z X2Jhc2UmLAogICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmICwgdG0qICkgY29u c3QKICAgICAgeyByZXR1cm4gX19zOyB9CgogICAgICBtdXRhYmxlIGJhc2ljX3N0cmluZzxfQ2hh clQ+KiBfTV9kYXluYW1lczsKICAgICAgbXV0YWJsZSBiYXNpY19zdHJpbmc8X0NoYXJUPiogX01f bW9udGhuYW1lczsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X0luSXRlcj4KICAgIGxvY2FsZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRp bWVfZ2V0X2J5bmFtZSA6IHB1YmxpYyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+CiAgICB7CiAg ICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf SW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfZ2V0X2J5bmFtZShj b25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9nZXQ8X0NoYXJULCBf SW5JdGVyPihfX3JlZnMpIHsgfQogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50 aW1lX2dldF9ieW5hbWUoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZh Y2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0No YXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBz dGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfcHV0KHNpemVf dCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcykgeyB9CgoKICAgICAgaXRlcl90 eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgLCBjaGFyX3R5cGUgLAogICAg ICAgICAgY29uc3QgdG0qICwgY29uc3QgX0NoYXJUKiAsCiAgICAgICAgICBjb25zdCBfQ2hhclQq ICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0 KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAg ICBjb25zdCB0bSogX190bWIsIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2RpZmllciA9IDApIGNv bnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3RtYiwgX19mb3Jt YXQsIF9fbW9kaWZpZXIpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50 aW1lX3B1dCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJf dHlwZSBfX3MsIGlvc19iYXNlJiwgY2hhcl90eXBlLCBjb25zdCB0bSogLAogICAgICAgICAgICAg Y2hhciAsIGNoYXIgKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KICAgIH07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIHRp bWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZSA6IHB1YmxpYyB0 aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVm IF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAg ICAgZXhwbGljaXQKICAgICAgdGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19y ZWZzID0gMCkKICAgICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPiAoX19yZWZzKSB7IH0K CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0X2J5bmFtZSgpIHsg fQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K ICAgIGNsYXNzIG1vbmV5X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJs aWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVy IGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlw ZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9u ZXlfZ2V0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAg ICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBi b29sIF9faW50bCwKICAgICAgICAgIGlvc19iYXNlJiBfX2YsIGlvc19iYXNlOjppb3N0YXRlJiBf X2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChf X3MsIF9fZW5kLCBfX2ludGwsIF9fZiwgX19lcnIsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5 cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGws IGlvc19iYXNlJiBfX2YsCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJp bmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX3MsIF9fZW5k LCBfX2ludGwsIF9fZiwgX19lcnIsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAg dmlydHVhbAogICAgICB+bW9uZXlfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog ICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgYm9vbCAsCiAgICAgICAgICAg ICBpb3NfYmFzZSYgLCBpb3NfYmFzZTo6aW9zdGF0ZSYgLAogICAgICAgICAgICAgbG9uZyBkb3Vi bGUmICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw ZQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgYm9vbCAsCiAgICAgICAg ICAgICBpb3NfYmFzZSYgLCBpb3NfYmFzZTo6aW9zdGF0ZSYgLAogICAgICAgICAgICAgc3RyaW5n X3R5cGUmICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X2dl dDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0 CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg dHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D aGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4 cGxpY2l0CiAgICAgIG1vbmV5X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0 KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJv b2wgX19pbnRsLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgbG9u ZyBkb3VibGUgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19pbnRs LCBfX2YsIF9fZmlsbCwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRl cl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICBjaGFyX3R5 cGUgX19maWxsLCBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIGRvX3B1dChfX3MsIF9faW50bCwgX19mLCBfX2ZpbGwsIF9fZGlnaXRzKTsgfQoKICAgIHBy b3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlfcHV0KCkgeyB9CgogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCwgaW9zX2Jhc2Um ICwgY2hhcl90eXBlICwKICAgICAgICAgICAgIGxvbmcgZG91YmxlICkgY29uc3QKICAgICAgeyBy ZXR1cm4gX19zOyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90 eXBlIF9fcywgYm9vbCwgaW9zX2Jhc2UmICwgY2hhcl90eXBlICwKICAgICAgICAgICAgIGNvbnN0 IHN0cmluZ190eXBlJiApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQogICAgfTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQg bW9uZXlfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCiAgc3RydWN0IG1vbmV5X2Jhc2UKICB7 CiAgICBlbnVtIHBhcnQgeyBub25lLCBzcGFjZSwgc3ltYm9sLCBzaWduLCB2YWx1ZSB9OwogICAg c3RydWN0IHBhdHRlcm4geyBjaGFyIGZpZWxkWzRdOyB9OwoKICAgIHN0YXRpYyBjb25zdCBwYXR0 ZXJuIF9TX2RlZmF1bHRfcGF0dGVybjsKCgoKICAgIHN0YXRpYyBwYXR0ZXJuCiAgICBfU19jb25z dHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VlZHMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24p OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNz IG1vbmV5cHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1vbmV5X2Jhc2UKICAg IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw ZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGludGwgPSBfSW50bDsKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgcHJp dmF0ZToKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBf TV90aG91c2FuZHNfc2VwOwogICAgICBzdHJpbmcgX01fZ3JvdXBpbmc7CiAgICAgIHN0cmluZ190 eXBlIF9NX2N1cnJfc3ltYm9sOwogICAgICBzdHJpbmdfdHlwZSBfTV9wb3NpdGl2ZV9zaWduOwog ICAgICBzdHJpbmdfdHlwZSBfTV9uZWdhdGl2ZV9zaWduOwogICAgICBpbnQgX01fZnJhY19kaWdp dHM7CiAgICAgIHBhdHRlcm4gX01fcG9zX2Zvcm1hdDsKICAgICAgcGF0dGVybiBfTV9uZWdfZm9y bWF0OwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChzaXplX3Qg X19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXpl X21vbmV5cHVuY3QoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChfX2NfbG9j YWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAg ICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIGNoYXJfdHlw ZQogICAgICBkZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGVj aW1hbF9wb2ludCgpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdGhvdXNhbmRzX3NlcCgpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsgfQoKICAgICAgc3Ry aW5nCiAgICAgIGdyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ3JvdXBp bmcoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgY3Vycl9zeW1ib2woKSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19jdXJyX3N5bWJvbCgpOyB9CgogICAgICBzdHJpbmdfdHlwZQog ICAgICBwb3NpdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zaXRp dmVfc2lnbigpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBuZWdhdGl2ZV9zaWduKCkgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVnYXRpdmVfc2lnbigpOyB9CgogICAgICBpbnQK ICAgICAgZnJhY19kaWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19mcmFjX2Rp Z2l0cygpOyB9CgogICAgICBwYXR0ZXJuCiAgICAgIHBvc19mb3JtYXQoKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5kb19wb3NfZm9ybWF0KCk7IH0KCiAgICAgIHBhdHRlcm4KICAgICAgbmVn X2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ19mb3JtYXQoKTsgfQoK ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5jdCgpIHsgfQoKICAg ICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAg IHsgcmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAg ICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aG91c2FuZHNf c2VwOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZwogICAgICBkb19ncm91cGluZygpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAg ICAgIGRvX2N1cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3Vycl9zeW1ib2w7 IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fcG9zaXRpdmVfc2lnbigpIGNv bnN0CiAgICAgIHsgcmV0dXJuIF9NX3Bvc2l0aXZlX3NpZ247IH0KCiAgICAgIHZpcnR1YWwgc3Ry aW5nX3R5cGUKICAgICAgZG9fbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N X25lZ2F0aXZlX3NpZ247IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2ZyYWNfZGlnaXRz KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZnJhY19kaWdpdHM7IH0KCiAgICAgIHZpcnR1YWwg cGF0dGVybgogICAgICBkb19wb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fcG9z X2Zvcm1hdDsgfQoKICAgICAgdmlydHVhbCBwYXR0ZXJuCiAgICAgIGRvX25lZ19mb3JtYXQoKSBj b25zdAogICAgICB7IHJldHVybiBfTV9uZWdfZm9ybWF0OyB9CgoKICAgICAgdm9pZAogICAgICBf TV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOwogICAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgbG9jYWxlOjpp ZCBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCBib29sIF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+ OjppbnRsOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICB2b2lk CiAgICBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3Qo X19jX2xvY2FsZSApCiAgICB7CgogICAgfQoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25l eXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2Mp OwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0 aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJs aWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPgogICAgewogICAgICBfX2NfbG9jYWxlIF9NX2Nf bG9jYWxlX21vbmV5cHVuY3Q7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGludGwgPSBfSW50bDsKCiAgICAgIGV4cGxpY2l0CiAgICAg IG1vbmV5cHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAg ICAgIDogbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBf U19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlwdW5jdCwgX19zKTsKICAgICAgICBf TV9pbml0aWFsaXplX21vbmV5cHVuY3QoX01fY19sb2NhbGVfbW9uZXlwdW5jdCk7CiAgICAgIH0K CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3RfYnluYW1lKCkK ICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9CiAg ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBi b29sIG1vbmV5cHVuY3RfYnluYW1lPF9DaGFyVCwgX0ludGw+OjppbnRsOwoKCiAgc3RydWN0IG1l c3NhZ2VzX2Jhc2UKICB7CiAgICB0eXBlZGVmIGludCBjYXRhbG9nOwogIH07CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6ZmFj ZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJp bmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAg ICAgbWVzc2FnZXMoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsg fQoKICAgICAgY2F0YWxvZwogICAgICBvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19z LCBjb25zdCBsb2NhbGUmIF9fbG9jKSBjb25zdAogICAgICB7IHJldHVybiBkb19vcGVuKF9fcywg X19sb2MpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBf X3NldCwgaW50IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsg cmV0dXJuIGRvX2dldChfX2MsX19zZXQsX19tc2dpZCxfX3MpOyB9CgogICAgICB2b2lkCiAgICAg IGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJldHVybiBkb19jbG9zZShfX2MpOyB9 CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygpIHsgfQoKCgog ICAgICB2aXJ0dWFsIGNhdGFsb2cKICAgICAgZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hh cj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdAogICAgICB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0 dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2dldChjYXRhbG9nLCBpbnQsIGludCAsIGNvbnN0IHN0 cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3QKICAgICAgeyByZXR1cm4gX19kZmF1bHQ7IH0KCiAg ICAgIHZpcnR1YWwgdm9pZAogICAgICBkb19jbG9zZShjYXRhbG9nKSBjb25zdCB7IH0KICAgIH07 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0No YXJUPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2Vz X2J5bmFtZSA6IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAg IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No YXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzX2J5bmFtZShj b25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmly dHVhbAogICAgICB+bWVzc2FnZXNfYnluYW1lKCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAg ICBtZXNzYWdlc19ieW5hbWU8Y2hhcj46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6 ZV90IF9fcmVmcyk7CgogIHRlbXBsYXRlPD4KICAgIG1lc3NhZ2VzX2J5bmFtZTx3Y2hhcl90Pjo6 bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzKTsKCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQg X19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9D aGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJUIF9fYywg Y29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnByaW50LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCBfX2MsIGNvbnN0 IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f bG9jKS5pcyhjdHlwZV9iYXNlOjpjbnRybCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2Nh bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku aXMoY3R5cGVfYmFzZTo6dXBwZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgaW5saW5lIGJvb2wgaXNsb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j KQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVf YmFzZTo6bG93ZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s aW5lIGJvb2wKICAgIGlzYWxwaGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAg IHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6 OmFscGhhLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBi b29sCiAgICBpc2RpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJl dHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpkaWdp dCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAog ICAgaXNwdW5jdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4g dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6cHVuY3QsIF9f Yyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlz eGRpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2Vf ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp4ZGlnaXQsIF9fYyk7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxu dW0oX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNl dDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBfX2MpOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2dyYXBoKF9D aGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5 cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpncmFwaCwgX19jKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3VwcGVyKF9DaGFy VCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8 X0NoYXJUPiA+KF9fbG9jKS50b3VwcGVyKF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG9sb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2Nh bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku dG9sb3dlcihfX2MpOyB9Cn0KIyAzNyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lv cy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3MgOiBwdWJsaWMgaW9zX2Jhc2UKICAg IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0 c190eXBlOwoKCiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CiAgICAg IHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1 Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4g X19udW1wdXRfdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwg X1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hhclQs IF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwoKCiAgICBwcml2YXRlOgogICAgICBi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3RpZTsKICAgICAgY2hhcl90eXBlIF9N X2ZpbGw7CiAgICAgIGlvc3RhdGUgX01fZXhjZXB0aW9uOwoKICAgIHByb3RlY3RlZDoKICAgICAg YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9NX3N0cmVhbWJ1ZjsKICAgICAgaW9z dGF0ZSBfTV9zdHJlYW1idWZfc3RhdGU7CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfTV9p b3NfZmN0eXBlOwoKICAgICAgY29uc3QgX19udW1wdXRfdHlwZSogX01fZm51bXB1dDsKCiAgICAg IGNvbnN0IF9fbnVtZ2V0X3R5cGUqIF9NX2ZudW1nZXQ7CgogICAgcHVibGljOgogICAgICBpbmxp bmUgY29uc3QgX19jdHlwZV90eXBlKgogICAgICBfTV9nZXRfZmN0eXBlX2lvcyh2b2lkKQogICAg ICB7IHJldHVybiBfTV9pb3NfZmN0eXBlOyB9CgogICAgICBvcGVyYXRvciB2b2lkKigpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZhaWwoKSA/IDAgOiBjb25zdF9jYXN0PGJhc2ljX2lvcyo+ KHRoaXMpOyB9CgogICAgICBpbmxpbmUgYm9vbAogICAgICBvcGVyYXRvciEoKSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5mYWlsKCk7IH0KCiAgICAgIGlubGluZSBpb3N0YXRlCiAgICAgIHJk c3RhdGUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0KCiAgICAg IGlubGluZSB2b2lkCiAgICAgIGNsZWFyKGlvc3RhdGUgX19zdGF0ZSA9IGdvb2RiaXQpCiAgICAg IHsKICAgICAgICBpZiAodGhpcy0+cmRidWYoKSkKICAgICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0 ZSA9IF9fc3RhdGU7CiAgICAgICAgZWxzZQogICAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0g X19zdGF0ZSB8IGJhZGJpdDsKICAgICAgICBpZiAoKHRoaXMtPnJkc3RhdGUoKSAmIHRoaXMtPmV4 Y2VwdGlvbnMoKSkpCiAgICAgICAgICBfX3Rocm93X2lvc19mYWlsdXJlKCJiYXNpY19pb3M6OmNs ZWFyKGlvc3RhdGUpIGNhdXNlZCBleGNlcHRpb24iKTsKICAgICAgfQoKICAgICAgaW5saW5lIHZv aWQKICAgICAgc2V0c3RhdGUoaW9zdGF0ZSBfX3N0YXRlKQogICAgICB7IHRoaXMtPmNsZWFyKHRo aXMtPnJkc3RhdGUoKSB8IF9fc3RhdGUpOyB9CgogICAgICBpbmxpbmUgYm9vbAogICAgICBnb29k KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0ZSgpID09IDA7IH0KCiAgICAgIGlu bGluZSBib29sCiAgICAgIGVvZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRl KCkgJiBlb2ZiaXQpICE9IDA7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIGZhaWwoKSBjb25z dAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgKGJhZGJpdCB8IGZhaWxiaXQpKSAh PSAwOyB9CgogICAgICBpbmxpbmUgYm9vbAogICAgICBiYWQoKSBjb25zdAogICAgICB7IHJldHVy biAodGhpcy0+cmRzdGF0ZSgpICYgYmFkYml0KSAhPSAwOyB9CgogICAgICBpbmxpbmUgaW9zdGF0 ZQogICAgICBleGNlcHRpb25zKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZXhjZXB0aW9uOyB9 CgogICAgICBpbmxpbmUgdm9pZAogICAgICBleGNlcHRpb25zKGlvc3RhdGUgX19leGNlcHQpCiAg ICAgIHsKICAgICAgICBfTV9leGNlcHRpb24gPSBfX2V4Y2VwdDsKICAgICAgICB0aGlzLT5jbGVh cihfTV9zdHJlYW1idWZfc3RhdGUpOwogICAgICB9CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFz aWNfaW9zKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKSA6IGlvc19iYXNl KCkKICAgICAgeyB0aGlzLT5pbml0KF9fc2IpOyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNp Y19pb3MoKSB7IH0KCgogICAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ KgogICAgICB0aWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aWU7IH0KCiAgICAgIGlubGlu ZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHRpZShiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4qIF9fdGllc3RyKQogICAgICB7CiAgICAgICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+KiBfX29sZCA9IF9NX3RpZTsKICAgICAgICBfTV90aWUgPSBfX3Rp ZXN0cjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCiAgICAgIGlubGluZSBiYXNpY19z dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJl dHVybiBfTV9zdHJlYW1idWY7IH0KCiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp dHM+KgogICAgICByZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7 CgogICAgICBiYXNpY19pb3MmCiAgICAgIGNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3Jocyk7 CgogICAgICBpbmxpbmUgY2hhcl90eXBlCiAgICAgIGZpbGwoKSBjb25zdAogICAgICB7IHJldHVy biBfTV9maWxsOyB9CgogICAgICBpbmxpbmUgY2hhcl90eXBlCiAgICAgIGZpbGwoY2hhcl90eXBl IF9fY2gpCiAgICAgIHsKICAgICAgICBjaGFyX3R5cGUgX19vbGQgPSBfTV9maWxsOwogICAgICAg IF9NX2ZpbGwgPSBfX2NoOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCiAgICAgIGxv Y2FsZQogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgICAgIGNoYXIKICAgICAg bmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgY2hhcl90 eXBlCiAgICAgIHdpZGVuKGNoYXIgX19jKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBi YXNpY19pb3MoKSA6IGlvc19iYXNlKCkKICAgICAgeyB9CgogICAgICB2b2lkCiAgICAgIGluaXQo YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYm9vbAogICAg ICBfTV9jaGVja19mYWNldChjb25zdCBsb2NhbGU6OmZhY2V0KiBfX2YpCiAgICAgIHsKICAgICAg ICBib29sIF9fcmV0ID0gZmFsc2U7CiAgICAgICAgaWYgKF9fZikKICAgICAgICAgIF9fcmV0ID0g dHJ1ZTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAgICAg cmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhj b25zdCBsb2NhbGUmIF9fbG9jKTsKICAgIH07Cn0KCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvYmFzaWNfaW9zLnRjYyIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9i YXNpY19pb3MudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ KgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OnJkYnVmKGJhc2ljX3N0cmVhbWJ1Zjxf Q2hhclQsIF9UcmFpdHM+KiBfX3NiKQogICAgewogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJU LCBfVHJhaXRzPiogX19vbGQgPSBfTV9zdHJlYW1idWY7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9f c2I7CiAgICAgIHRoaXMtPmNsZWFyKCk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaW9zPF9D aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y29weWZtdChj b25zdCBiYXNpY19pb3MmIF9fcmhzKQogICAgewoKCgoKICAgICAgX1dvcmRzKiBfX3dvcmRzID0g KF9fcmhzLl9NX3dvcmRfbGltaXQgPD0gX1NfbG9jYWxfd29yZHMpID8KICAgICAgICBfTV93b3Jk X2FycmF5IDogbmV3IF9Xb3Jkc1tfX3Jocy5fTV93b3JkX2xpbWl0XTsKIyA2MyAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy50Y2MiIDMKICAgICAgX0NhbGxiYWNrX2xpc3QqIF9f Y2IgPSBfX3Jocy5fTV9jYWxsYmFja3M7CiAgICAgIGlmIChfX2NiKQogICAgICAgIF9fY2ItPl9N X2FkZF9yZWZlcmVuY2UoKTsKICAgICAgX01fY2FsbF9jYWxsYmFja3MoZXJhc2VfZXZlbnQpOwog ICAgICBpZiAoX01fd29yZHMgIT0gX01fd29yZF9hcnJheSkKICAgICAgICBkZWxldGUgW10gX01f d29yZHM7CiAgICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKCk7CgogICAgICBfTV9jYWxsYmFja3Mg PSBfX2NiOwogICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCBfX3Jocy5fTV93b3JkX2xpbWl0 OyArK19faSkKICAgICAgICBfX3dvcmRzW19faV0gPSBfX3Jocy5fTV93b3Jkc1tfX2ldOwogICAg ICBpZiAoX01fd29yZHMgIT0gX01fd29yZF9hcnJheSkKICAgICAgICBkZWxldGUgW10gX01fd29y ZHM7CiAgICAgIF9NX3dvcmRzID0gX193b3JkczsKICAgICAgX01fd29yZF9saW1pdCA9IF9fcmhz Ll9NX3dvcmRfbGltaXQ7CgogICAgICB0aGlzLT5mbGFncyhfX3Jocy5mbGFncygpKTsKICAgICAg dGhpcy0+d2lkdGgoX19yaHMud2lkdGgoKSk7CiAgICAgIHRoaXMtPnByZWNpc2lvbihfX3Jocy5w cmVjaXNpb24oKSk7CiAgICAgIHRoaXMtPnRpZShfX3Jocy50aWUoKSk7CiAgICAgIHRoaXMtPmZp bGwoX19yaHMuZmlsbCgpKTsKCiAgICAgIHRoaXMtPmV4Y2VwdGlvbnMoX19yaHMuZXhjZXB0aW9u cygpKTsKCiAgICAgIF9NX2NhbGxfY2FsbGJhY2tzKGNvcHlmbXRfZXZlbnQpOwogICAgICByZXR1 cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGNoYXIKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpuYXJyb3coY2hh cl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgIHsgcmV0dXJuIF9NX2lvc19mY3R5 cGUtPm5hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBfQ2hhclQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFp dHM+Ojp3aWRlbihjaGFyIF9fYykgY29uc3QKICAgIHsgcmV0dXJuIF9NX2lvc19mY3R5cGUtPndp ZGVuKF9fYyk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGxvY2FsZQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmltYnVlKGNvbnN0 IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGxvY2FsZSBfX29sZCh0aGlzLT5nZXRsb2MoKSk7 CiAgICAgIGlvc19iYXNlOjppbWJ1ZShfX2xvYyk7CiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhfX2xv Yyk7CiAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICE9IDApCiAgICAgICAgdGhpcy0+cmRidWYoKS0+ cHViaW1idWUoX19sb2MpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxf Q2hhclQsIF9UcmFpdHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBf X3NiKQogICAgewoKICAgICAgaW9zX2Jhc2U6Ol9NX2luaXQoKTsKICAgICAgX01fY2FjaGVfZmFj ZXRzKF9NX2lvc19sb2NhbGUpOwogICAgICBfTV90aWUgPSAwOwogICAgICBfTV9maWxsID0gdGhp cy0+d2lkZW4oJyAnKTsKICAgICAgX01fZXhjZXB0aW9uID0gZ29vZGJpdDsKICAgICAgX01fc3Ry ZWFtYnVmID0gX19zYjsKICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zYiA/IGdvb2RiaXQg OiBiYWRiaXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpfTV9jYWNoZV9m YWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgaWYgKGhhc19mYWNldDxfX2N0 eXBlX3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9pb3NfZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0 eXBlX3R5cGU+KF9fbG9jKTsKCiAgICAgIGlmIChoYXNfZmFjZXQ8X19udW1wdXRfdHlwZT4oX19s b2MpKQogICAgICAgIF9NX2ZudW1wdXQgPSAmdXNlX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9j KTsKICAgICAgaWYgKGhhc19mYWNldDxfX251bWdldF90eXBlPihfX2xvYykpCiAgICAgICAgX01f Zm51bWdldCA9ICZ1c2VfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpOwogICAgfQp9CiMgMjE0 ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwojIDQ3ICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW0g OiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVi bGljOgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf VHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRz OjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoK CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1i dWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiBfX2lvc190 eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJl YW1fdHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0 cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0 cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4g X19jdHlwZV90eXBlOwoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX29zdHJlYW0oX19zdHJl YW1idWZfdHlwZSogX19zYikKICAgICAgeyB0aGlzLT5pbml0KF9fc2IpOyB9CgogICAgICB2aXJ0 dWFsCiAgICAgIH5iYXNpY19vc3RyZWFtKCkgeyB9CgoKICAgICAgY2xhc3Mgc2VudHJ5OwogICAg ICBmcmllbmQgY2xhc3Mgc2VudHJ5OwoKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3Bl cmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShfX29zdHJlYW1fdHlwZSYpKTsKCiAgICAg IF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19p b3NfdHlwZSYpKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGlvc19i YXNlJiAoKl9fcGYpIChpb3NfYmFzZSYpKTsKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg b3BlcmF0b3I8PChsb25nIF9fbik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0 b3I8PCh1bnNpZ25lZCBsb25nIF9fbik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3Bl cmF0b3I8PChib29sIF9fbik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8 PChzaG9ydCBfX24pCiAgICAgIHsKICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0 aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAoX19mbXQgJiBp b3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgIHJldHVybiB0 aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fbikpKTsK ICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2Fz dDxsb25nPihfX24pKTsKICAgICAgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh dG9yPDwodW5zaWduZWQgc2hvcnQgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8 KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbikpOyB9CgogICAgICBfX29zdHJlYW1fdHlw ZSYKICAgICAgb3BlcmF0b3I8PChpbnQgX19uKQogICAgICB7CiAgICAgICAgaW9zX2Jhc2U6OmZt dGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAg ICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAg ICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVk IGludD4oX19uKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRv cjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAgICB9CgogICAgICBfX29zdHJlYW1fdHlw ZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBpbnQgX19uKQogICAgICB7IHJldHVybiB0aGlz LT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbikpOyB9CgoKICAgICAg X19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBsb25nIF9fbik7CgogICAgICBf X29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgX19uKTsK CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChkb3VibGUgX19mKTsKCiAg ICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGZsb2F0IF9fZikKICAgICAgeyBy ZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxkb3VibGU+KF9fZikpOyB9CgogICAg ICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX2YpOwoKICAg ICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoY29uc3Qgdm9pZCogX19wKTsKCiAg ICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9f c2IpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBwdXQoY2hhcl90eXBlIF9fYyk7Cgog ICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgd3JpdGUoY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0 cmVhbXNpemUgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBmbHVzaCgpOwoKCiAg ICAgIHBvc190eXBlCiAgICAgIHRlbGxwKCk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg c2Vla3AocG9zX3R5cGUpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtwKG9mZl90 eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7CgogICAgcHJpdmF0ZToKCgogICAgICBfX29zdHJlYW1f dHlwZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fb3N0cmVhbV90eXBlJik7CgogICAgICBiYXNp Y19vc3RyZWFtKGNvbnN0IF9fb3N0cmVhbV90eXBlJik7CgogICAgfTsKCgogIHRlbXBsYXRlIDx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewoKICAgICAgYm9vbCBfTV9vazsKICAgICAg YmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9NX29zOwoKICAgIHB1YmxpYzoKICAgICAg ZXhwbGljaXQKICAgICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29z KTsKCiAgICAgIH5zZW50cnkoKQogICAgICB7CgogICAgICAgIGlmIChfTV9vcy5mbGFncygpICYg aW9zX2Jhc2U6OnVuaXRidWYgJiYgIXVuY2F1Z2h0X2V4Y2VwdGlvbigpKQogICAgICAgICAgewoK ICAgICAgICAgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01fb3MucmRidWYoKS0+cHVic3luYygp ID09IC0xKQogICAgICAgICAgICAgIF9NX29zLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgfQogICAgICB9CgogICAgICBvcGVyYXRvciBib29sKCkKICAgICAgeyByZXR1cm4g X01fb2s7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYyk7CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgX19vdXQu d2lkZW4oX19jKSk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0 cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBf VHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAg ICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry ZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4g KF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9U cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChi YXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgdW5zaWduZWQgY2hhciBfX2MpCiAg ICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiAmCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQs IGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNf b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFy LCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBf VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHNpZ25lZCBjaGFyKiBf X3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o X19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hh ciwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ JiBfX291dCwgY29uc3QgdW5zaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0IDw8 IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBlbmRsKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykK ICAgIHsgcmV0dXJuIGZsdXNoKF9fb3MucHV0KF9fb3Mud2lkZW4oJ1xuJykpKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRzKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3MucHV0KF9DaGFyVCgpKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBmbHVzaChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f b3MpCiAgICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0KCn0KCgoKCiMgMSAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL29zdHJlYW0udGNjIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL29zdHJlYW0udGNjIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2Nh bGUuaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDMK CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0MCAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGRfbG9jYWxlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9s b2NhbGVfZmFjZXRzLnRjYyIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2Nh bGVfZmFjZXRzLnRjYyIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Vycm5v LmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NlcnJuby5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIg MwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2Vy cm5vLmgiIDIgMwoKCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5v LmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2xpbnV4L2Vycm5vLmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIg MSAzCiMgNSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1 ZGUvYml0cy9lcnJuby5oIiAyIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpl eHRlcm4gaW50IGVycm5vOwoKCmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vy cm5vLmgiIDIgMwojIDU1ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gY2hhciAqcHJv Z3JhbV9pbnZvY2F0aW9uX25hbWUsICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKCgoK fQojIDY5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwp0eXBlZGVmIGludCBlcnJvcl90OwojIDM5 ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NlcnJuby5oIiAyIDMKIyAzNiAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX2Nsb2NhbGUuaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGRfY2xvY2FsZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAxIDMK IyAyNiAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz LmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwoKCiMgMSAiL3Vzci9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAz MCAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2Nh bGUuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCgpleHRlcm4gIkMiIHsK IyA1MiAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCnN0cnVjdCBsY29udgp7CgoKICBjaGFyICpk ZWNpbWFsX3BvaW50OwogIGNoYXIgKnRob3VzYW5kc19zZXA7CgoKCgoKICBjaGFyICpncm91cGlu ZzsKCgoKCgogIGNoYXIgKmludF9jdXJyX3N5bWJvbDsKICBjaGFyICpjdXJyZW5jeV9zeW1ib2w7 CiAgY2hhciAqbW9uX2RlY2ltYWxfcG9pbnQ7CiAgY2hhciAqbW9uX3Rob3VzYW5kc19zZXA7CiAg Y2hhciAqbW9uX2dyb3VwaW5nOwogIGNoYXIgKnBvc2l0aXZlX3NpZ247CiAgY2hhciAqbmVnYXRp dmVfc2lnbjsKICBjaGFyIGludF9mcmFjX2RpZ2l0czsKICBjaGFyIGZyYWNfZGlnaXRzOwoKICBj aGFyIHBfY3NfcHJlY2VkZXM7CgogIGNoYXIgcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgbl9jc19w cmVjZWRlczsKCiAgY2hhciBuX3NlcF9ieV9zcGFjZTsKCgoKCgoKICBjaGFyIHBfc2lnbl9wb3Nu OwogIGNoYXIgbl9zaWduX3Bvc247CgoKICBjaGFyIGludF9wX2NzX3ByZWNlZGVzOwoKICBjaGFy IGludF9wX3NlcF9ieV9zcGFjZTsKCiAgY2hhciBpbnRfbl9jc19wcmVjZWRlczsKCiAgY2hhciBp bnRfbl9zZXBfYnlfc3BhY2U7CgoKCgoKCiAgY2hhciBpbnRfcF9zaWduX3Bvc247CiAgY2hhciBp bnRfbl9zaWduX3Bvc247CiMgMTE5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKfTsKCgoKZXh0 ZXJuIGNoYXIgKnNldGxvY2FsZSAoaW50IF9fY2F0ZWdvcnksIF9fY29uc3QgY2hhciAqX19sb2Nh bGUpIHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgbGNvbnYgKmxvY2FsZWNvbnYgKHZvaWQpIHRo cm93ICgpOwojIDE0MSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L3hsb2NhbGUuaCIgMSAzCiMgMTQyICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwoKCgoKCgoK ZXh0ZXJuIF9fbG9jYWxlX3QgX19uZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5X21hc2ssIF9fY29u c3QgY2hhciAqX19sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2Fs ZV90IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX2xvY2FsZV90IF9fZHVwbG9jYWxlIChf X2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIF9fZnJlZWxvY2Fs ZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCn0KIyAzOSAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9jbG9jYWxlLmgiIDIgMwoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHVz aW5nIDo6bGNvbnY7CiAgdXNpbmcgOjpzZXRsb2NhbGU7CiAgdXNpbmcgOjpsb2NhbGVjb252Owp9 CiMgMzcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMg MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDM4ICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfbGltaXRzLmgiIDEgMwojIDQyICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX2xpbWl0cy5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1w Yy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGRfbGltaXRzLmgiIDIgMwojIDg3MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9saW1pdHMuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVtIGZsb2F0X3JvdW5kX3N0eWxl CiAgewogICAgcm91bmRfaW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgcm91bmRfdG93YXJkX3plcm8g PSAwLAogICAgcm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICByb3VuZF90b3dhcmRfaW5maW5pdHkg PSAyLAogICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMKICB9OwoKICBlbnVtIGZsb2F0 X2Rlbm9ybV9zdHlsZQogIHsKICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEsCiAgICBkZW5v cm1fYWJzZW50ID0gMCwKICAgIGRlbm9ybV9wcmVzZW50ID0gMQogIH07CgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0cwogICAgewogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IGZhbHNlOwoKICAgICAgc3RhdGljIF9UcCBt aW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGlj IF9UcCBtYXgoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp dHMxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAw OwoKICAgICAgc3RhdGljIF9UcCBlcHNpbG9uKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2Fz dDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgcm91bmRfZXJyb3IoKSB0aHJvdygpIHsgcmV0 dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4 cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0 IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5m aW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1f YWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsK CiAgICAgIHN0YXRpYyBfVHAgaW5maW5pdHkoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0 PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBxdWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJu IHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkg dGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAg ZGVub3JtX21pbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQoKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2JvdW5kZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k dWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGlj IGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87 CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjb25zdCBib29sCiAgICBudW1l cmljX2xpbWl0czxfVHA+Ojppc19zcGVjaWFsaXplZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogICAgY29uc3QgaW50CiAgICBudW1lcmljX2xpbWl0czxfVHA+OjpkaWdpdHM7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGludAogICAgbnVtZXJpY19saW1pdHM8X1RwPjo6 ZGlnaXRzMTA7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGJvb2wKICAgIG51 bWVyaWNfbGltaXRzPF9UcD46OmlzX3NpZ25lZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog ICAgY29uc3QgYm9vbAogICAgbnVtZXJpY19saW1pdHM8X1RwPjo6aXNfaW50ZWdlcjsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgYm9vbAogICAgbnVtZXJpY19saW1pdHM8X1Rw Pjo6aXNfZXhhY3Q7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGludAogICAg bnVtZXJpY19saW1pdHM8X1RwPjo6cmFkaXg7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg IGNvbnN0IGludAogICAgbnVtZXJpY19saW1pdHM8X1RwPjo6bWluX2V4cG9uZW50OwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjb25zdCBpbnQKICAgIG51bWVyaWNfbGltaXRzPF9UcD46 Om1pbl9leHBvbmVudDEwOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjb25zdCBpbnQK ICAgIG51bWVyaWNfbGltaXRzPF9UcD46Om1heF9leHBvbmVudDsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgY29uc3QgaW50CiAgICBudW1lcmljX2xpbWl0czxfVHA+OjptYXhfZXhwb25l bnQxMDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgYm9vbAogICAgbnVtZXJp Y19saW1pdHM8X1RwPjo6aGFzX2luZmluaXR5OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBjb25zdCBib29sCiAgICBudW1lcmljX2xpbWl0czxfVHA+OjpoYXNfcXVpZXRfTmFOOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjb25zdCBib29sCiAgICBudW1lcmljX2xpbWl0czxf VHA+OjpoYXNfc2lnbmFsaW5nX05hTjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29u c3QgZmxvYXRfZGVub3JtX3N0eWxlCiAgICBudW1lcmljX2xpbWl0czxfVHA+OjpoYXNfZGVub3Jt OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjb25zdCBib29sCiAgICBudW1lcmljX2xp bWl0czxfVHA+OjpoYXNfZGVub3JtX2xvc3M7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg IGNvbnN0IGJvb2wKICAgIG51bWVyaWNfbGltaXRzPF9UcD46OmlzX2llYzU1OTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgYm9vbAogICAgbnVtZXJpY19saW1pdHM8X1RwPjo6 aXNfYm91bmRlZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgYm9vbAogICAg bnVtZXJpY19saW1pdHM8X1RwPjo6aXNfbW9kdWxvOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICBjb25zdCBib29sCiAgICBudW1lcmljX2xpbWl0czxfVHA+Ojp0cmFwczsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgYm9vbAogICAgbnVtZXJpY19saW1pdHM8X1RwPjo6 dGlueW5lc3NfYmVmb3JlOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjb25zdCBmbG9h dF9yb3VuZF9zdHlsZQogICAgbnVtZXJpY19saW1pdHM8X1RwPjo6cm91bmRfc3R5bGU7CgoKCgog IHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxib29sPgogICAgewogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgYm9v bCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgYm9v bCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgICAgIHN0YXRpYyBjb25z dCBpbnQgZGlnaXRzID0gODsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh Y3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGlj IGJvb2wgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3Rh dGljIGJvb2wgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9Cgog ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgp IHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgcXVpZXRf TmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBz aWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0 aWMgYm9vbCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVs byA9IHRydWU7CgoKCgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWUKICAgICAg ICAgICAgICAgfHwgdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHls ZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3Qg bnVtZXJpY19saW1pdHM8Y2hhcj4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl Y2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7 IHJldHVybiAoY2hhcikoLTEyNyAtIDEpOyB9CiAgICAgIHN0YXRpYyBjaGFyIG1heCgpIHRocm93 KCkKICAgICAgeyByZXR1cm4gKGNoYXIpMTI3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0cyA9IDc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA3OwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGNoYXIgZXBz aWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFy IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KCiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt aW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0g MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2ln bmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxl IGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf ZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3co KQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgcXVpZXRfTmFOKCkg dGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgc2lnbmFs aW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBj aGFyIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+ KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAg ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93 YXJkX3plcm87CiAgICB9OwojIDExNDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGlt aXRzLmgiIDMKICB0ZW1wbGF0ZTw+CiAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNpZ25lZCBjaGFy PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7Cgog ICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTEy NyAtIDEpOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIDEyNzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAgICBz dGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMzsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf c2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBlcHNpbG9uKCkgdGhy b3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciByb3VuZF9l cnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEw ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0 aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9 IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9 IGZhbHNlOwoKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHNp Z25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBzaWduYWxpbmdfTmFO KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0K ICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQg PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAg IHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg dGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKCiAgdGVt cGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGNoYXI+CiAgICB7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRp YyB1bnNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz dGF0aWMgdW5zaWduZWQgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgxMjcgKiAy ICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gODsKICAgICAgc3RhdGlj IGNvbnN0IGludCBkaWdpdHMxMCA9IDM7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25l ZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg aW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9l cnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEw ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0 aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRf TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9 IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9 IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRp YyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2ln bmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg Y2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxv ID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAg fTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8d2NoYXJfdD4K ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAg ICAgc3RhdGljIHdjaGFyX3QgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAod2NoYXJfdCko LTIxNDc0ODM2NDdMIC0gMSk7IH0KICAgICAgc3RhdGljIHdjaGFyX3QgbWF4KCkgdGhyb3coKQog ICAgICB7IHJldHVybiAod2NoYXJfdCkyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0 IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDEwOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh Y3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGlj IHdjaGFyX3QgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0 aWMgd2NoYXJfdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAg ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg aW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l bnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1f c3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHdjaGFyX3QgaW5maW5pdHko KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJf dCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBz dGF0aWMgd2NoYXJfdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hh cl90KCk7IH0KICAgICAgc3RhdGljIHdjaGFyX3QgZGVub3JtX21pbigpIHRocm93KCkKICAgICAg eyByZXR1cm4gd2NoYXJfdCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkg PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZv cmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0 eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEzMDkgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGRfbGltaXRzLmgiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19s aW1pdHM8c2hvcnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVk ID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu ICgtMzI3NjcgLSAxKTsgfQogICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQogICAgICB7 IHJldHVybiAzMjc2NzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAxNTsKICAg ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgc2hvcnQgZXBzaWxvbigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4 cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0 IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5m aW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1f YWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsK CiAgICAgIHN0YXRpYyBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hv cnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJl dHVybiBzaG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3co KQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBkZW5vcm1fbWlu KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CgogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVk ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAg ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRf c3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCgogIHRl bXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD4KICAgIHsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3Rh dGljIHVuc2lnbmVkIHNob3J0IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAg ICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoMzI3 NjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTY7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA1OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGlj IGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBlcHNpbG9u KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9y dCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGlj IGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l eHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwog ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxp bmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5v cm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGluZmluaXR5KCkg dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0K ICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNp Z25lZCBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGRl bm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNo b3J0PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90 b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNf bGltaXRzPGludD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQg PSB0cnVlOwoKICAgICAgc3RhdGljIGludCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChp bnQpKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAgICAgIHN0YXRpYyBpbnQgbWF4KCkgdGhyb3coKQog ICAgICB7IHJldHVybiAoaW50KTIxNDc0ODM2NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTA7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgaW50 IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGludCBy b3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNv bnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv bmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAg ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf cXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdf TmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl bm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1f bG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHF1aWV0X05h TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBz dGF0aWMgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBz dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp bnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5 bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCgogIHRlbXBs YXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+CiAgICB7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1 bnNpZ25lZCBpbnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgICAgICBz dGF0aWMgdW5zaWduZWQgaW50IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKHVuc2lnbmVk KSgyMTQ3NDgzNjQ3TCAqIDJVICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz ID0gMzI7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxMDsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQg aW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVu c2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAg ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg aW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l bnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1f c3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZp bml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pigw KTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5z aWduZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1f bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDAp OyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96 ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8 bG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl OwoKICAgICAgc3RhdGljIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTIxNDc0 ODM2NDdMIC0gMSk7IH0KICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJl dHVybiAyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsK ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDEwOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2Vy ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBz dGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgZXBzaWxvbigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgbG9uZyByb3VuZF9lcnJvcigp IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsK ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p bmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9y bV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNl OwoKICAgICAgc3RhdGljIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIHF1aWV0X05hTigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxv bmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9u Zz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRp YyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l c3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSBy b3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8 PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+CiAgICB7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNp Z25lZCBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMg dW5zaWduZWQgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgyMTQ3NDgzNjQ3TCAq IDJVICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxMDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf c2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBlcHNpbG9uKCkg dGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJv dW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29u c3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x dWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu b3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s b3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmZpbml0eSgpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAg c3RhdGljIHVuc2lnbmVkIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9u ZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNp Z25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZW5vcm1fbWluKCkg dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQoK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v ZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsK ICAgIH07CiMgMTY0NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9saW1pdHMuaCIgMwog IHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nIGxvbmc+CiAgICB7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRp YyBsb25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTkyMjMzNzIwMzY4NTQ3 NzU4MDdMTCAtIDEpOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAg ICB7IHJldHVybiA5MjIzMzcyMDM2ODU0Nzc1ODA3TEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzID0gNjM7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxOTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0 ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBs b25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0 aWMgbG9uZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9Cgog ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBsb25nIGluZmlu aXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9 CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgc2ln bmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25n PigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5k ZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKCiAg dGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4K ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAg ICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuICg5MjIzMzcyMDM2ODU0Nzc1ODA3TEwgKiAyVUxMICsgMSk7IH0KCiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz MTAgPSAxOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyByb3VuZF9lcnJvcigp IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsK ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p bmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9y bV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNl OwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBz dGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5z aWduZWQgbG9uZyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk IGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz dDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p ZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBj b25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf YmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNzU4ICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX2xpbWl0cy5oIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVy aWNfbGltaXRzPGZsb2F0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFs aXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgZmxvYXQgbWluKCkgdGhyb3coKQogICAgICB7IHJl dHVybiAxLjE3NTQ5NDM1ZS0zOEY7IH0KICAgICAgc3RhdGljIGZsb2F0IG1heCgpIHRocm93KCkK ICAgICAgeyByZXR1cm4gMy40MDI4MjM0N2UrMzhGOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0cyA9IDI0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNjsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGZs b2F0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTkyMDkyOTBlLTA3RjsgfQog ICAgICBzdGF0aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEu MEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTEyNTsKICAgICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0zNzsKICAgICAgc3RhdGljIGNvbnN0 IGludCBtYXhfZXhwb25lbnQgPSAxMjg7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u ZW50MTAgPSAzODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGlj IGZsb2F0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CiAgICAgIHN0 YXRpYyBmbG9hdCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KICAg ICAgc3RhdGljIGZsb2F0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAu MEY7IH0KICAgICAgc3RhdGljIGZsb2F0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIDAuMEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw cyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91 bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE4MzQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z dGRfbGltaXRzLmgiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZG91 YmxlPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7 CgogICAgICBzdGF0aWMgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMi4yMjUw NzM4NTg1MDcyMDE0ZS0zMDg7IH0KICAgICAgc3RhdGljIGRvdWJsZSBtYXgoKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4OyB9CgogICAgICBzdGF0aWMgY29u c3QgaW50IGRpZ2l0cyA9IDUzOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf ZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0 YXRpYyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMi4yMjA0NDYwNDky NTAzMTMxZS0xNjsgfQogICAgICBzdGF0aWMgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQog ICAgICB7IHJldHVybiAxLjA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50 ID0gLTEwMjE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzA3Owog ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEwMjQ7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzMDg7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h TiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQog ICAgICAgICAgICAgIGRlbm9ybV9hYnNlbnQ7OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf ZGVub3JtX2xvc3MgPSBmYWxzZTs7CgogICAgICBzdGF0aWMgZG91YmxlIGluZmluaXR5KCkgdGhy b3coKQogICAgICB7IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBxdWlldF9OYU4o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91YmxlIHNpZ25h bGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91 YmxlIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQoKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBm YWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg ZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPQogICAgICAgICAgICAgIHJvdW5kX3Rvd2Fy ZF96ZXJvOwogICAgfTsKIyAxOTEzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpbWl0 cy5oIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgZG91Ymxl PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7Cgog ICAgICBzdGF0aWMgbG9uZyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAzLjM2 MjEwMzE0MzExMjA5MzUwNjI2ZS00OTMyTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgbWF4 KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjE4OTczMTQ5NTM1NzIzMTc2NTAyZSs0OTMyTDsg fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2NDsKICAgICAgc3RhdGljIGNvbnN0 IGludCBkaWdpdHMxMCA9IDE4OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg cmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gMS4wODQyMDIxNzI0ODU1MDQ0MzQwMWUtMTlMOyB9CiAgICAgIHN0YXRpYyBs b25nIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4wTDsgfQoK ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTYzODE7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtNDkzMTsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtYXhfZXhwb25lbnQgPSAxNjM4NDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l bnQxMCA9IDQ5MzI7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9CiAgICAgICAgICAgICAgICBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0KICAg ICAgICAgICAgICAgIGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k ZW5vcm1fbG9zcyA9CiAgICAgICAgICAgICAgICBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGRv dWJsZSBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0 aWMgbG9uZyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9 CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7 IHJldHVybiAwLjBMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhy b3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p ZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRp YyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnlu ZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUg cm91bmRfc3R5bGUgPQogICAgICAgICAgICAgICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvOwogICAg fTsKIyAxOTkzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpbWl0cy5oIiAzCn0KIyAz OSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAxIDMKIyA0MCAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc2J1Zl9pdGVyLmgiIDEgMwojIDQxICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z dGRfY2N0eXBlLmgiIDEgMwojIDQyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2Zh Y2V0cy50Y2MiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvdHlwZWluZm8iIDEgMwojIDM3 ICIvdXNyL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12 My9leGNlcHRpb24iIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAyIDMK CmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2UgX19jeHhhYml2MQp7CiAgY2xhc3MgX19jbGFzc190 eXBlX2luZm87Cn0KIyA1NCAiL3Vzci9pbmNsdWRlL2crKy12My90eXBlaW5mbyIgMwpuYW1lc3Bh Y2Ugc3RkCnsKCgoKICBjbGFzcyB0eXBlX2luZm8KICB7CiAgcHVibGljOgoKCgoKICAgIHZpcnR1 YWwgfnR5cGVfaW5mbygpOwoKICBwcml2YXRlOgoKICAgIHR5cGVfaW5mbyYgb3BlcmF0b3I9KGNv bnN0IHR5cGVfaW5mbyYpOwogICAgdHlwZV9pbmZvKGNvbnN0IHR5cGVfaW5mbyYpOwoKICBwcm90 ZWN0ZWQ6CiAgICBjb25zdCBjaGFyICpfX25hbWU7CgogIHByb3RlY3RlZDoKICAgIGV4cGxpY2l0 IHR5cGVfaW5mbyhjb25zdCBjaGFyICpfX24pOiBfX25hbWUoX19uKSB7IH0KCiAgcHVibGljOgoK CgogICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0CiAgICB7IHJldHVybiBfX25hbWU7IH0KIyA5 NyAiL3Vzci9pbmNsdWRlL2crKy12My90eXBlaW5mbyIgMwogICAgYm9vbCBiZWZvcmUoY29uc3Qg dHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA8IF9fYXJnLl9fbmFt ZTsgfQogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAg ICB7IHJldHVybiBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9CgogICAgYm9vbCBvcGVyYXRvciE9 KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiAhb3BlcmF0b3I9PShf X2FyZyk7IH0KCgogIHB1YmxpYzoKCiAgICB2aXJ0dWFsIGJvb2wgX19pc19wb2ludGVyX3AoKSBj b25zdDsKCiAgICB2aXJ0dWFsIGJvb2wgX19pc19mdW5jdGlvbl9wKCkgY29uc3Q7CgoKCgoKCgog ICAgdmlydHVhbCBib29sIF9fZG9fY2F0Y2goY29uc3QgdHlwZV9pbmZvICpfX3Rocl90eXBlLCB2 b2lkICoqX190aHJfb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgX19v dXRlcikgY29uc3Q7CgoKICAgIHZpcnR1YWwgYm9vbCBfX2RvX3VwY2FzdChjb25zdCBfX2N4eGFi aXYxOjpfX2NsYXNzX3R5cGVfaW5mbyAqX190YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqKl9fb2JqX3B0cikgY29uc3Q7CiAgfTsKCgoKICBjbGFzcyBiYWRfY2FzdCA6 IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2Nhc3QoKSB0aHJvdygpIHsg fQogICAgdmlydHVhbCB+YmFkX2Nhc3QoKSB0aHJvdygpOwogIH07CgoKICBjbGFzcyBiYWRfdHlw ZWlkIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfdHlwZWlkICgpIHRo cm93KCkgeyB9CiAgICB2aXJ0dWFsIH5iYWRfdHlwZWlkICgpIHRocm93KCk7CiAgfTsKfQoKfQoj IDQzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDEgMwojIDYwICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZp bmVzLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIg MiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lk KTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93 X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAg dm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f dGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2lu dmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3Ro X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShj b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv aWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAog IF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDYyICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9j LmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMK IyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2NSAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDY2ICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF92ZWN0b3IuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3Jf YmFzZV9mdW5jcy5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0 b3IuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEg MwojIDM0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2 b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFk X2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQK ICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJv cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3Qg Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZs b3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25z dCBjaGFyKiBfX3MpOwp9CiMgNjUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9y LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEg MwojIDY2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKCm5hbWVz cGFjZSBzdGQKewojIDc3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAz CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX0lzU3RhdGljPgpj bGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxs b2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxv Y2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1 cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9j YXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KDAp LCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KCnByb3RlY3RlZDoKICBh bGxvY2F0b3JfdHlwZSBfTV9kYXRhX2FsbG9jYXRvcjsKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCog X01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7CgogIF9UcCogX01fYWxsb2NhdGUo c2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRlKF9fbik7 IH0KICB2b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICB7IGlmIChf X3ApIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX24pOyB9Cn07CgoKCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFz ZTxfVHAsIF9BbGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Fs bG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxs b2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0 dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9j YXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0 b3JhZ2UoMCkKICB7fQoKcHJvdGVjdGVkOgogIF9UcCogX01fc3RhcnQ7CiAgX1RwKiBfTV9maW5p c2g7CiAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2Nf dHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlIF9BbGxvY190eXBlOwogIF9UcCog X01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0 ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAg eyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7fQp9OwoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX1ZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX1ZlY3Rv cl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf QWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBf VmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAg IF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRv cl90eXBlOwoKICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFz ZShfX2EpIHt9CiAgX1ZlY3Rvcl9iYXNlKHNpemVfdCBfX24sIGNvbnN0IGFsbG9jYXRvcl90eXBl JiBfX2EpIDogX0Jhc2UoX19hKSB7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAg ICBfTV9maW5pc2ggPSBfTV9zdGFydDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQg KyBfX247CiAgfQoKICB+X1ZlY3Rvcl9iYXNlKCkgeyBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBf TV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KY2xhc3MgdmVjdG9yIDogcHJvdGVjdGVk IF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4KewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKcHJpdmF0ZToKICB0eXBlZGVmIF9WZWN0b3Jf YmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB2ZWN0b3I8X1RwLCBfQWxsb2M+IHZl Y3Rvcl90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZh bHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2lu dGVyOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwgdmVjdG9yX3R5cGU+IGl0 ZXJhdG9yOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgdmVjdG9y X3R5cGU+IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwog IHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgc2l6 ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogIHR5 cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFs bG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2Fs bG9jYXRvcigpOyB9CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4g Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0 b3I+IHJldmVyc2VfaXRlcmF0b3I7Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9j YXRlOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpfTV9zdGFy dDsKICB1c2luZyBfQmFzZTo6X01fZmluaXNoOwogIHVzaW5nIF9CYXNlOjpfTV9lbmRfb2Zfc3Rv cmFnZTsKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlv biwgY29uc3QgX1RwJiBfX3gpOwogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0 aW9uKTsKCnB1YmxpYzoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9z dGFydCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CiAgICB7IHJldHVybiBjb25z dF9pdGVyYXRvciAoX01fc3RhcnQpOyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gaXRlcmF0 b3IgKF9NX2ZpbmlzaCk7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBj b25zdF9pdGVyYXRvciAoX01fZmluaXNoKTsgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigp CiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3JldmVyc2Vf aXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0 b3IoZW5kKCkpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsgcmV0dXJuIHJldmVy c2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBj b25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKICBz aXplX3R5cGUgc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdp bigpKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5 cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdAogICAg eyByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlKSAtIGJl Z2luKCkpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0CiAgICB7IHJldHVybiBiZWdpbigpID09IGVu ZCgpOyB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIHsgcmV0dXJuICoo YmVnaW4oKSArIF9fbik7IH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUg X19uKSBjb25zdCB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CgogIHZvaWQgX01fcmFuZ2Vf Y2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkp CiAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJ2ZWN0b3IiKTsKICB9CgogIHJlZmVyZW5jZSBh dChzaXplX3R5cGUgX19uKQogICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlz KVtfX25dOyB9CiAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7 IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KCiAgZXhwbGljaXQg dmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAg OiBfQmFzZShfX2EpIHt9CgogIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFs dWUsCiAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp KQogICAgOiBfQmFzZShfX24sIF9fYSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9m aWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7IH0KCiAgZXhwbGljaXQgdmVjdG9yKHNpemVf dHlwZSBfX24pCiAgICA6IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fZmlu aXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9CgogIHZl Y3Rvcihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCiAgICA6IF9CYXNlKF9feC5zaXpl KCksIF9feC5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRf Y29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7IH0KCgogIHRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu cHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0g YWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lz X2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5p dGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0 ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW50ZWdlciBfX24s IF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBlKSB7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9j YXRlKF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAgX01f ZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7CiAg fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbml0aWFsaXpl X2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgIF9NX3JhbmdlX2luaXRpYWxp emUoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICB9Cgog IH52ZWN0b3IoKSB7IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7IH0KCiAgdmVjdG9yPF9U cCwgX0FsbG9jPiYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCk7CiAg dm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgIGlmIChjYXBhY2l0eSgpIDwgX19uKSB7 CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBwb2ludGVy IF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwgX01fZmluaXNoKTsK ICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShf TV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0g X190bXA7CiAgICAgIF9NX2ZpbmlzaCA9IF9fdG1wICsgX19vbGRfc2l6ZTsKICAgICAgX01fZW5k X29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIH0KICB9CgoKCgoKCiAgdm9pZCBhc3Np Z24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgeyBfTV9maWxsX2Fzc2lnbihfX24s IF9fdmFsKTsgfQogIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1Rw JiBfX3ZhbCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGFzc2ln bihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5 cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0lu dGVncmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFs KCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNzaWduX2Rp c3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBf TV9maWxsX2Fzc2lnbigoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IF9NX2Fzc2ln bl9hdXgoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoK ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwg X0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRl cmF0b3JfdGFnKTsKCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICBj b25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQogIHJlZmVy ZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGJh Y2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KCiAgdm9pZCBwdXNoX2JhY2soY29u c3QgX1RwJiBfX3gpIHsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsK ICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9 CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgfQogIHZvaWQgcHVz aF9iYWNrKCkgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAg ICBjb25zdHJ1Y3QoX01fZmluaXNoKTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBlbHNl CiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCkpOwogIH0KICB2b2lkIHN3YXAodmVjdG9yPF9UcCwg X0FsbG9jPiYgX194KSB7CiAgICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFydCk7CiAg ICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAgIHN0ZDo6c3dhcChfTV9l bmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CgogIGl0ZXJhdG9yIGlu c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkgewogICAgc2l6ZV90eXBl IF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRf b2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIGNvbnN0cnVjdChfTV9m aW5pc2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9p bnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pLCBfX3gpOwogICAgcmV0dXJuIGJlZ2luKCkg KyBfX247CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBz aXplX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNoICE9 IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAgICAgY29uc3Ry dWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBf TV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pKTsKICAgIHJldHVybiBiZWdpbigpICsg X19uOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0 KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf X2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+ OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zLCBfX2Zp cnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdl cj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19u LCBfSW50ZWdlciBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkK ICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192YWwp OyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9k aXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbnNlcnQoX19wb3MsIF9fZmly c3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKICB2b2lkIGlu c2VydCAoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQogICAg eyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOyB9CgogIHZvaWQgX01fZmlsbF9pbnNl cnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7CgogIHZv aWQgcG9wX2JhY2soKSB7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01fZmluaXNoKTsK ICB9CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgaWYgKF9fcG9z aXRpb24gKyAxICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19w b3NpdGlvbik7CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01fZmluaXNoKTsKICAgIHJl dHVybiBfX3Bvc2l0aW9uOwogIH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBp dGVyYXRvciBfX2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9faShjb3B5KF9fbGFzdCwgZW5kKCksIF9f Zmlyc3QpKTsKICAgIGRlc3Ryb3koX19pLCBlbmQoKSk7CiAgICBfTV9maW5pc2ggPSBfTV9maW5p c2ggLSAoX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19maXJzdDsKICB9CgogIHZvaWQg cmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCkgewogICAgaWYgKF9f bmV3X3NpemUgPCBzaXplKCkpCiAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX25ld19zaXplLCBlbmQo KSk7CiAgICBlbHNlCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194 KTsKICB9CiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpIHsgcmVzaXplKF9fbmV3 X3NpemUsIF9UcCgpKTsgfQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsg fQoKcHJvdGVjdGVkOgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICBwb2lu dGVyIF9NX2FsbG9jYXRlX2FuZF9jb3B5KHNpemVfdHlwZSBfX24sIF9Gb3J3YXJkSXRlcmF0b3Ig X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf Rm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICB7CiAgICBwb2ludGVyIF9fcmVzdWx0ID0gX01fYWxs b2NhdGUoX19uKTsKICAgIHRyeSB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBf X2xhc3QsIF9fcmVzdWx0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQogICAgY2F0Y2go Li4uKSB7IF9NX2RlYWxsb2NhdGUoX19yZXN1bHQsIF9fbik7IHRocm93OyB9OwogIH0KCiAgdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ dGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CiAgICBmb3IgKCA7IF9fZmly c3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgfQoK CiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0 aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogIHsKICAg IHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwog ICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBf TV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0 LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRv cj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAg ICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19w b3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh dG9yX3RhZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi b29sCm9wZXJhdG9yPT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0 b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgp ICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRv cjwoY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxs b2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCks IF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCks IF9feS5lbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5l IHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIHZlY3RvcjxfVHAsIF9BbGxvYz4m IF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B bGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBf X3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBf X3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9w ZXJhdG9yPihjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAs IF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PShjb25zdCB2ZWN0b3I8X1Rw LCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVy biAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5s aW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0 IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KdmVjdG9yPF9UcCxfQWxsb2M+Jgp2ZWN0 b3I8X1RwLF9BbGxvYz46Om9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gp CnsKICBpZiAoJl9feCAhPSB0aGlzKSB7CiAgICBjb25zdCBzaXplX3R5cGUgX194bGVuID0gX194 LnNpemUoKTsKICAgIGlmIChfX3hsZW4gPiBjYXBhY2l0eSgpKSB7CiAgICAgIHBvaW50ZXIgX190 bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX3hsZW4sIF9feC5iZWdpbigpLCBfX3guZW5kKCkp OwogICAgICBkZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRl KF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQg PSBfX3RtcDsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9feGxlbjsKICAg IH0KICAgIGVsc2UgaWYgKHNpemUoKSA+PSBfX3hsZW4pIHsKICAgICAgaXRlcmF0b3IgX19pKGNv cHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSkpOwogICAgICBkZXN0cm95KF9faSwg ZW5kKCkpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5iZWdp bigpICsgc2l6ZSgpLCBfTV9zdGFydCk7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVn aW4oKSArIHNpemUoKSwgX194LmVuZCgpLCBfTV9maW5pc2gpOwogICAgfQogICAgX01fZmluaXNo ID0gX01fc3RhcnQgKyBfX3hsZW47CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxf YXNzaWduKHNpemVfdCBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQp7CiAgaWYgKF9fbiA+ IGNhcGFjaXR5KCkpIHsKICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBfX3ZhbCwg Z2V0X2FsbG9jYXRvcigpKTsKICAgIF9fdG1wLnN3YXAoKnRoaXMpOwogIH0KICBlbHNlIGlmIChf X24gPiBzaXplKCkpIHsKICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgIF9NX2Zp bmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gc2l6ZSgpLCBfX3Zh bCk7CiAgfQogIGVsc2UKICAgIGVyYXNlKGZpbGxfbihiZWdpbigpLCBfX24sIF9fdmFsKSwgZW5k KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGl0ZXJhdG9yIF9fY3Vy KGJlZ2luKCkpOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7 ICsrX19jdXIsICsrX19maXJzdCkKICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCkKICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgZWxzZQogICAgaW5zZXJ0KGVu ZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs b2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9j Pjo6X01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh ZykgewogIHNpemVfdHlwZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf X2xlbik7CgogIGlmIChfX2xlbiA+IGNhcGFjaXR5KCkpIHsKICAgIHBvaW50ZXIgX190bXAoX01f YWxsb2NhdGVfYW5kX2NvcHkoX19sZW4sIF9fZmlyc3QsIF9fbGFzdCkpOwogICAgZGVzdHJveShf TV9zdGFydCwgX01fZmluaXNoKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9v Zl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX3RtcDsKICAgIF9NX2VuZF9v Zl9zdG9yYWdlID0gX01fZmluaXNoID0gX01fc3RhcnQgKyBfX2xlbjsKICB9CiAgZWxzZSBpZiAo c2l6ZSgpID49IF9fbGVuKSB7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goY29weShfX2ZpcnN0 LCBfX2xhc3QsIF9NX3N0YXJ0KSk7CiAgICBkZXN0cm95KF9fbmV3X2ZpbmlzaCwgZW5kKCkpOwog ICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICB9CiAgZWxzZSB7CiAgICBfRm9y d2FyZEl0ZXIgX19taWQgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKICAg IGNvcHkoX19maXJzdCwgX19taWQsIF9NX3N0YXJ0KTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlh bGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwogIH0KfQoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2luc2Vy dF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCnsKICBpZiAoX01fZmlu aXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCAqKF9N X2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAgX1RwIF9feF9jb3B5ID0gX194Owog ICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAyKSwgaXRl cmF0b3IoX01fZmluaXNoLSAxKSk7CiAgICAqX19wb3NpdGlvbiA9IF9feF9jb3B5OwogIH0KICBl bHNlIHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgY29uc3Qg c2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOwog ICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgIGl0ZXJhdG9y IF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICB0cnkgewogICAgICBfX25ld19maW5pc2gg PSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLCBfX3Bvc2l0aW9uLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3RhcnQpOwogICAgICBj b25zdHJ1Y3QoX19uZXdfZmluaXNoLmJhc2UoKSwgX194KTsKICAgICAgKytfX25ld19maW5pc2g7 CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBpdGVy YXRvcihfTV9maW5pc2gpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19uZXdfZmluaXNoKTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFy dCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikp OyB0aHJvdzsgfTsKCiAgICBkZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxsb2Nh dGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQg PSBfX25ld19zdGFydC5iYXNlKCk7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgp OwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICB9 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZAp2ZWN0b3I8X1RwLCBf QWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24pCnsKICBpZiAoX01fZmlu aXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCAqKF9N X2ZpbmlzaCAtIDEpKTsKICAgICsrX01fZmluaXNoOwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0 aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAyKSwKICAgICAgICAgICAgICAgICAgaXRlcmF0b3Io X01fZmluaXNoIC0gMSkpOwogICAgKl9fcG9zaXRpb24gPSBfVHAoKTsKICB9CiAgZWxzZSB7CiAg ICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlw ZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIHBvaW50 ZXIgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICBwb2ludGVyIF9fbmV3X2Zp bmlzaCA9IF9fbmV3X3N0YXJ0OwogICAgdHJ5IHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0 aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgY29uc3RydWN0 KF9fbmV3X2ZpbmlzaCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2gg PSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICB9 CiAgICBjYXRjaCguLi4pIHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01f ZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICBkZXN0cm95KGJl Z2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9y YWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgIF9NX2Zpbmlz aCA9IF9fbmV3X2ZpbmlzaDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBf X2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCB2ZWN0 b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXpl X3R5cGUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IF9UcCYgX194KQp7CiAgaWYgKF9fbiAhPSAwKSB7CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9v Zl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgX1RwIF9feF9jb3B5ID0gX194 OwogICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgpIC0gX19wb3NpdGlv bjsKICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7CiAgICAgIGlmIChfX2Vs ZW1zX2FmdGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAt IF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX247CiAg ICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2ggLSBfX24sIF9fb2xk X2ZpbmlzaCk7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgX19uLCBfX3hf Y29weSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsX24o X01fZmluaXNoLCBfX24gLSBfX2VsZW1zX2FmdGVyLCBfX3hfY29weSk7CiAgICAgICAgX01fZmlu aXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9f cG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0g X19lbGVtc19hZnRlcjsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX194 X2NvcHkpOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f b2xkX3NpemUgPSBzaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3Np emUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01f YWxsb2NhdGUoX19sZW4pKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0 KTsKICAgICAgdHJ5IHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHko YmVnaW4oKSwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2ZpbmlzaCA9 IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fbmV3X2ZpbmlzaCwgX19uLCBfX3gpOwogICAgICAgIF9f bmV3X2ZpbmlzaAogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgZW5k KCksIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKSB7IChkZXN0cm95KF9f bmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFzZSgp LF9fbGVuKSk7IHRocm93OyB9OwoKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsK ICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFy dCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgICBfTV9maW5pc2gg PSBfX25ld19maW5pc2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0 YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CnZvaWQKdmVjdG9yPF9U cCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIGZv ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAgX19wb3MgPSBpbnNlcnQo X19wb3MsICpfX2ZpcnN0KTsKICAgICsrX19wb3M7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkCnZl Y3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2Zp cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRv ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0 ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgc2l6ZV90eXBlIF9f biA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICBpZiAoc2l6ZV90 eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgY29uc3Qg c2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJh dG9yIF9fb2xkX2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9f bikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2Zpbmlz aCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFj a3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAg ICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgICBlbHNl IHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZh bmNlKF9fbWlkLCBfX2VsZW1zX2FmdGVyKTsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19t aWQsIF9fbGFzdCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19lbGVt c19hZnRlcjsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRfZmlu aXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOwogICAg ICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9fcG9zaXRpb24pOwogICAgICB9CiAgICB9CiAgICBl bHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgIGNv bnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsK ICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgICAgaXRl cmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgdHJ5IHsKICAgICAgICBfX25l d19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Bvc2l0aW9uLCBfX25ld19zdGFy dCk7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9f bGFzdCwgX19uZXdfZmluaXNoKTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0gdW5p bml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksIF9fbmV3X2Zp bmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKSB7IChkZXN0cm95KF9fbmV3X3N0YXJ0LF9f bmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLF9fbGVuKSk7IHRo cm93OyB9OwoKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVh bGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9N X3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5p c2guYmFzZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSAr IF9fbGVuOwogICAgfQogIH0KfQoKfQojIDY3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3Iu aCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYnZlY3Rvci5oIiAzCm5h bWVzcGFjZSBzdGQKewoKc3RhdGljIGNvbnN0IGludCBfX1dPUkRfQklUID0gaW50KDgqc2l6ZW9m KHVuc2lnbmVkIGludCkpOwoKc3RydWN0IF9CaXRfcmVmZXJlbmNlIHsKICB1bnNpZ25lZCBpbnQq IF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX21hc2s7CiAgX0JpdF9yZWZlcmVuY2UodW5zaWduZWQg aW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9NX3AoX194KSwgX01fbWFzayhfX3kp IHt9CgpwdWJsaWM6CiAgX0JpdF9yZWZlcmVuY2UoKSA6IF9NX3AoMCksIF9NX21hc2soMCkge30K ICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISghKCpfTV9wICYgX01fbWFzaykpOyB9 CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShib29sIF9feCkKICB7CiAgICBpZiAoX194KSAq X01fcCB8PSBfTV9tYXNrOwogICAgZWxzZSAqX01fcCAmPSB+X01fbWFzazsKICAgIHJldHVybiAq dGhpczsKICB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBfQml0X3JlZmVyZW5j ZSYgX194KQogICAgeyByZXR1cm4gKnRoaXMgPSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9y PT0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIGJvb2woKnRo aXMpID09IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9CaXRfcmVmZXJlbmNl JiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAhYm9vbCgqdGhpcykgJiYgYm9vbChfX3gpOwogIH0K ICB2b2lkIGZsaXAoKSB7ICpfTV9wIF49IF9NX21hc2s7IH0KfTsKCmlubGluZSB2b2lkIHN3YXAo X0JpdF9yZWZlcmVuY2UgX194LCBfQml0X3JlZmVyZW5jZSBfX3kpCnsKICBib29sIF9fdG1wID0g X194OwogIF9feCA9IF9feTsKICBfX3kgPSBfX3RtcDsKfQoKc3RydWN0IF9CaXRfaXRlcmF0b3Jf YmFzZSA6IHB1YmxpYyByYW5kb21fYWNjZXNzX2l0ZXJhdG9yPGJvb2wsIHB0cmRpZmZfdD4Kewog IHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0OwoKICBfQml0X2l0 ZXJhdG9yX2Jhc2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9N X3AoX194KSwgX01fb2Zmc2V0KF9feSkge30KCiAgdm9pZCBfTV9idW1wX3VwKCkgewogICAgaWYg KF9NX29mZnNldCsrID09IF9fV09SRF9CSVQgLSAxKSB7CiAgICAgIF9NX29mZnNldCA9IDA7CiAg ICAgICsrX01fcDsKICAgIH0KICB9CiAgdm9pZCBfTV9idW1wX2Rvd24oKSB7CiAgICBpZiAoX01f b2Zmc2V0LS0gPT0gMCkgewogICAgICBfTV9vZmZzZXQgPSBfX1dPUkRfQklUIC0gMTsKICAgICAg LS1fTV9wOwogICAgfQogIH0KCiAgdm9pZCBfTV9pbmNyKHB0cmRpZmZfdCBfX2kpIHsKICAgIGRp ZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7CiAgICBfTV9wICs9IF9fbiAvIF9f V09SRF9CSVQ7CiAgICBfX24gPSBfX24gJSBfX1dPUkRfQklUOwogICAgaWYgKF9fbiA8IDApIHsK ICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uICsgX19XT1JEX0JJVDsKICAgICAg LS1fTV9wOwogICAgfSBlbHNlCiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbjsK ICB9CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29u c3QgewogICAgcmV0dXJuIF9NX3AgPT0gX19pLl9NX3AgJiYgX01fb2Zmc2V0ID09IF9faS5fTV9v ZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19p KSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA8IF9faS5fTV9wIHx8IChfTV9wID09IF9faS5fTV9w ICYmIF9NX29mZnNldCA8IF9faS5fTV9vZmZzZXQpOwogIH0KICBib29sIG9wZXJhdG9yIT0oY29u c3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzID09 IF9faSk7CiAgfQogIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19p KSBjb25zdCB7CiAgICByZXR1cm4gX19pIDwgKnRoaXM7CiAgfQogIGJvb2wgb3BlcmF0b3I8PShj b25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuICEoX19pIDwg KnRoaXMpOwogIH0KICBib29sIG9wZXJhdG9yPj0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBf X2kpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzIDwgX19pKTsKICB9Cn07CgppbmxpbmUgcHRy ZGlmZl90Cm9wZXJhdG9yLShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9feCwgY29uc3QgX0Jp dF9pdGVyYXRvcl9iYXNlJiBfX3kpIHsKICByZXR1cm4gX19XT1JEX0JJVCAqIChfX3guX01fcCAt IF9feS5fTV9wKSArIF9feC5fTV9vZmZzZXQgLSBfX3kuX01fb2Zmc2V0Owp9CgoKc3RydWN0IF9C aXRfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIF9CaXRf cmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwog IHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKCiAgX0JpdF9pdGVyYXRvcigpIDogX0Jp dF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9pdGVyYXRvcih1bnNpZ25lZCBpbnQqIF9f eCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7 fQoKICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gcmVmZXJlbmNlKF9NX3As IDFVIDw8IF9NX29mZnNldCk7IH0KICBpdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX2J1 bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQp IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1 cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvci0tKCkgewogICAgX01fYnVtcF9kb3du KCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAg ICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4g X190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsK ICAgIF9NX2luY3IoX19pKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3ImIG9wZXJh dG9yLT0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVy biAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNv bnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19p OwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3Qgewog ICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQoK ICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSB7IHJldHVybiAqKCp0 aGlzICsgX19pKTsgfQp9OwoKaW5saW5lIF9CaXRfaXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZf dCBfX24sIGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoK c3RydWN0IF9CaXRfY29uc3RfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsK ICB0eXBlZGVmIGJvb2wgcmVmZXJlbmNlOwogIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7 CiAgdHlwZWRlZiBjb25zdCBib29sKiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVy YXRvciBjb25zdF9pdGVyYXRvcjsKCiAgX0JpdF9jb25zdF9pdGVyYXRvcigpIDogX0JpdF9pdGVy YXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9jb25zdF9pdGVyYXRvcih1bnNpZ25lZCBpbnQqIF9f eCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7 fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KQogICAgOiBf Qml0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX3AsIF9feC5fTV9vZmZzZXQpIHt9CgogIGNvbnN0X3Jl ZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICByZXR1cm4gX0JpdF9yZWZlcmVuY2UoX01f cCwgMVUgPDwgX01fb2Zmc2V0KTsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7 CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9y IG9wZXJhdG9yKysoaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAg X01fYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3Bl cmF0b3ItLSgpIHsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBj b25zdF9pdGVyYXRvciBvcGVyYXRvci0tKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAg PSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25z dF9pdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICBfTV9pbmNy KF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci09 KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICByZXR1cm4gKnRo aXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBj b25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1w ICs9IF9faTsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBf X2kpIGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4g X190bXAgLT0gX19pOwogIH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNl X3R5cGUgX19pKSB7CiAgICByZXR1cm4gKigqdGhpcyArIF9faSk7CiAgfQp9OwoKaW5saW5lIF9C aXRfY29uc3RfaXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfY29u c3RfaXRlcmF0b3ImIF9feCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoKCgoKCnRlbXBsYXRlIDxj bGFzcyBfQWxsb2NhdG9yLCBib29sIF9faXNfc3RhdGljPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19i YXNlIHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxs b2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9j YXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRv cjsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAg ICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9l bmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVkOgogIHVuc2lnbmVkIGludCogX01fYml0X2Fs bG9jKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZSgo X19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRl KCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxs b2NhdGUoX01fc3RhcnQuX01fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf TV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOwogIH0KCiAgdHlwZW5hbWUgX0FsbG9j X3RyYWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAg ICAgX01fZGF0YV9hbGxvY2F0b3I7CiAgX0JpdF9pdGVyYXRvciBfTV9zdGFydDsKICBfQml0X2l0 ZXJhdG9yIF9NX2ZpbmlzaDsKICB1bnNpZ25lZCBpbnQqIF9NX2VuZF9vZl9zdG9yYWdlOwp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9B bGxvY2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0 czxib29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90 eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxv Y2F0b3JfdHlwZSgpOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5 cGUmKQogICAgOiBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkg e30KCnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQg aW50LCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwoKICB1 bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1cm4gX0FsbG9j X3R5cGU6OmFsbG9jYXRlKChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVCk7IH0KICB2 b2lkIF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fcCkKICAgICAgX0FsbG9j X3R5cGU6OmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9CgogIF9CaXRfaXRl cmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50 KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9C dmVjdG9yX2Jhc2UKICA6IHB1YmxpYyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1Nf aW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+Ojpf U19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5h bWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfQnZlY3Rvcl9iYXNl KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIH5fQnZlY3Rvcl9i YXNlKCkgeyBfQmFzZTo6X01fZGVhbGxvY2F0ZSgpOyB9Cn07Cgp9CgoKIyAxICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyAzNDcgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYnZlY3Rvci5oIiAyIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8dHlw ZW5hbWUgX0FsbG9jPgogIGNsYXNzIHZlY3Rvcjxib29sLCBfQWxsb2M+IDogcHVibGljIF9CdmVj dG9yX2Jhc2U8X0FsbG9jPgogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIGJvb2wgdmFsdWVfdHlw ZTsKICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRp ZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogICAg dHlwZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2Uq IHBvaW50ZXI7CiAgICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNvbnN0X3BvaW50ZXI7CgogICAgdHlw ZWRlZiBfQml0X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJh dG9yIGNvbnN0X2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9p dGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVy YXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9C dmVjdG9yX2Jhc2U8X0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgICBh bGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgewogICAgICByZXR1cm4gX0J2ZWN0 b3JfYmFzZTxfQWxsb2M+OjpnZXRfYWxsb2NhdG9yKCk7CiAgICB9CgogIHByb3RlY3RlZDoKICAg IHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fYml0X2FsbG9jOwogICAgdXNpbmcgX0J2 ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9kZWFsbG9jYXRlOwogICAgdXNpbmcgX0J2ZWN0b3JfYmFz ZTxfQWxsb2M+OjpfTV9zdGFydDsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01f ZmluaXNoOwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9lbmRfb2Zfc3RvcmFn ZTsKCiAgcHJvdGVjdGVkOgogICAgdm9pZCBfTV9pbml0aWFsaXplKHNpemVfdHlwZSBfX24pIHsK ICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01fZW5k X29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAg ICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgX01fZmluaXNoID0gX01fc3Rh cnQgKyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgIH0KICAgIHZvaWQgX01faW5zZXJ0X2F1eChp dGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCkgewogICAgICBpZiAoX01fZmluaXNoLl9NX3Ag IT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24s IF9NX2ZpbmlzaCwgX01fZmluaXNoICsgMSk7CiAgICAgICAgKl9fcG9zaXRpb24gPSBfX3g7CiAg ICAgICAgKytfTV9maW5pc2g7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90eXBl IF9fbGVuID0gc2l6ZSgpID8gMiAqIHNpemUoKSA6IF9fV09SRF9CSVQ7CiAgICAgICAgdW5zaWdu ZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9yIF9faSA9 IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgKl9f aSsrID0gX194OwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9f aSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g X19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAgX01fc3Rh cnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9JbnB1dEl0ZXJh dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcigp OwogICAgICBfTV9maW5pc2ggPSBpdGVyYXRvcigpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9 IDA7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBw dXNoX2JhY2soKl9fZmlyc3QpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9Gb3J3YXJkSXRlcmF0b3IgX19m aXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICAg IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgICAgX01faW5pdGlhbGl6ZShfX24p OwogICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogICAgfQoKICAgIHRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJh dG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRf aXRlcmF0b3JfdGFnKSB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz dCkgewogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAgICAgKytf X3BvczsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y PgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAg ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykg ewogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBzaXplX3R5cGUgX19uID0g MDsKICAgICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICAgICAgaWYgKGNh cGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9z aXRpb24sIGVuZCgpLCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAg ICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAgICAgICBfTV9maW5pc2gg Kz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAg ICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAgICAgICAg IHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAgIGl0ZXJh dG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAg ICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAgIF9NX2Zp bmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9kZWFsbG9j YXRlKCk7CiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09S RF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3Es IDApOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICBwdWJsaWM6CiAgICBpdGVyYXRvciBiZWdp bigpIHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0 IHsgcmV0dXJuIF9NX3N0YXJ0OyB9CiAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5p c2g7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbmlzaDsg fQoKICAgIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRv cihlbmQoKSk7IH0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3Qgewog ICAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7CiAgICB9CiAgICByZXZl cnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9 CiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICAgIHJldHVybiBj b25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOwogICAgfQoKICAgIHNpemVfdHlwZSBzaXpl KCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICAgIHNpemVf dHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KICAgIHNpemVf dHlwZSBjYXBhY2l0eSgpIGNvbnN0IHsKICAgICAgcmV0dXJuIHNpemVfdHlwZShjb25zdF9pdGVy YXRvcihfTV9lbmRfb2Zfc3RvcmFnZSwgMCkgLSBiZWdpbigpKTsKICAgIH0KICAgIGJvb2wgZW1w dHkoKSBjb25zdCB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9CgogICAgcmVmZXJlbmNlIG9w ZXJhdG9yW10oc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVy ZW5jZV90eXBlKF9fbikpOyB9CiAgICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5 cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUo X19uKSk7IH0KCiAgICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsK ICAgICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCiAgICAgICAgX190aHJvd19yYW5nZV9lcnJv cigidmVjdG9yPGJvb2w+Iik7CiAgICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24p CiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogICAg Y29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgX01fcmFuZ2Vf Y2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0IHZlY3Rvcihj b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZl Y3Rvcl9iYXNlPF9BbGxvYz4oX19hKSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBib29s IF9fdmFsdWUsCiAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9j YXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsKICAg ICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9v Zl9zdG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNpdCB2ZWN0b3Io c2l6ZV90eXBlIF9fbikKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2NhdG9yX3R5 cGUoKSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0 Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29uc3QgdmVj dG9yJiBfX3gpIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9yKCkpIHsK ICAgICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVnaW4oKSwg X194LmVuZCgpLCBfTV9zdGFydCk7CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVn ZXI+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdl ciBfX3gsIF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmls bChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgIH0K CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxp emVfZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBf TV9pbml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShf X2ZpcnN0KSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAg dmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAg ICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQog ICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwog ICAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkp OwogICAgfQoKICAgIH52ZWN0b3IoKSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShjb25zdCB2 ZWN0b3ImIF9feCkgewogICAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAgICAg IGlmIChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsK ICAgICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNvcHkoX194 LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9IGJlZ2luKCkg KyBkaWZmZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CgoKCgoKICAgIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsKICAg ICAgaWYgKF9fbiA+IHNpemUoKSkgewogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5k X29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX24gLSBz aXplKCksIF9feCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2UoYmVnaW4oKSAr IF9fbiwgZW5kKCkpOwogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3Jh Z2UsIF9feCA/IH4wIDogMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihzaXplX3Qg X19uLCBib29sIF9feCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBf X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf SXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9N X2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAg ICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChf SW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBfTV9maWxs X2Fzc2lnbigoc2l6ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9hc3NpZ25f YXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAg ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgo X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRvciBfX2N1ciA9 IGJlZ2luKCk7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5k KCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgICAg aWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICAg IGVsc2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogICAg dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgo X0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUg X19sZW4gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICAgICAg aWYgKF9fbGVuIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGNvcHkoX19maXJzdCwgX19sYXN0LCBi ZWdpbigpKSwgZW5kKCkpOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9f bWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgICAgIGNv cHkoX19maXJzdCwgX19taWQsIGJlZ2luKCkpOwogICAgICAgIGluc2VydChlbmQoKSwgX19taWQs IF9fbGFzdCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikg ewogICAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICAgIHVuc2lnbmVkIGludCogX19x ID0gX01fYml0X2FsbG9jKF9fbik7CiAgICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigpLCBl bmQoKSwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAg IF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9 IF9fcSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgfQogICAgfQoK ICAgIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICBjb25zdF9yZWZl cmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQogICAgcmVmZXJlbmNlIGJh Y2soKSB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkg Y29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgICB2b2lkIHB1c2hfYmFjayhib29sIF9f eCkgewogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UpCiAgICAg ICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChl bmQoKSwgX194KTsKICAgIH0KICAgIHZvaWQgc3dhcCh2ZWN0b3I8Ym9vbCwgX0FsbG9jPiYgX194 KSB7CiAgICAgIHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgICAgc3RkOjpz d2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICAgIHN0ZDo6c3dhcChfTV9lbmRfb2Zf c3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICAgIH0KICAgIGl0ZXJhdG9yIGluc2Vy dChpdGVyYXRvciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBkaWZmZXJl bmNlX3R5cGUgX19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICAgIGlmIChfTV9maW5pc2gu X01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKQogICAgICAg ICpfTV9maW5pc2grKyA9IF9feDsKICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoX19w b3NpdGlvbiwgX194KTsKICAgICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgICB9CgoKCiAgICB0 ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVy YXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3RydWVfdHlwZSkgewogICAgICBfTV9maWxsX2luc2VydChfX3BvcywgX19u LCBfX3gpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZv aWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2luc2Vy dF9yYW5nZShfX3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmly c3QpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lk IGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0 b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAg ICBfTV9pbnNlcnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50ZWdy YWwoKSk7CiAgICB9CgogICAgdm9pZCBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u LCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgICBpZiAoX19uID09IDApIHJldHVybjsK ICAgICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgY29weV9iYWNr d2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikp OwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIGRpZmZlcmVuY2VfdHlwZShf X24pLCBfX3gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAg ICAgfQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgo c2l6ZSgpLCBfX24pOwogICAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9f bGVuKTsKICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0 ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgIGZpbGxfbihfX2ksIF9fbiwgX194KTsKICAgICAgICBf TV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5cGUo X19uKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdl ID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAgX01f c3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdm9pZCBpbnNlcnQo aXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAgX01f ZmlsbF9pbnNlcnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOwogICAgfQoKICAgIHZvaWQgcG9wX2Jh Y2soKSB7IC0tX01fZmluaXNoOyB9CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0 aW9uKSB7CiAgICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgICBjb3B5KF9f cG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgICAgLS1fTV9maW5pc2g7CiAg ICAgIHJldHVybiBfX3Bvc2l0aW9uOwogICAgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3Ig X19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19sYXN0 LCBlbmQoKSwgX19maXJzdCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQogICAgdm9pZCBy ZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGlm IChfX25ld19zaXplIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBkaWZmZXJlbmNl X3R5cGUoX19uZXdfc2l6ZSksIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQo KSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKICAgIH0KICAgIHZvaWQgZmxpcCgpIHsKICAg ICAgZm9yICh1bnNpZ25lZCBpbnQqIF9fcCA9IF9NX3N0YXJ0Ll9NX3A7IF9fcCAhPSBfTV9lbmRf b2Zfc3RvcmFnZTsgKytfX3ApCiAgICAgICAgKl9fcCA9IH4qX19wOwogICAgfQoKICAgIHZvaWQg Y2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQogIH07CgoKdHlwZWRlZiB2ZWN0b3I8 Ym9vbCwgYWxsb2M+IGJpdF92ZWN0b3I7Cgp9CiMgNjggIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfdmVjdG9yLmgiIDIgMwojIDQ0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxl X2ZhY2V0cy50Y2MiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9G YWNldD4KICAgIGxvY2FsZQogICAgbG9jYWxlOjpjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhl cikKICAgIHsKICAgICAgbG9jYWxlIF9fY29weSgqdGhpcyk7CiAgICAgIF9fY29weS5fTV9pbXBs LT5fTV9yZXBsYWNlX2ZhY2V0KF9fb3RoZXIuX01faW1wbCwgJl9GYWNldDo6aWQpOwogICAgICBy ZXR1cm4gX19jb3B5OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJvb2wKICAgIGxvY2FsZTo6b3BlcmF0b3Io KShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MxLAogICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mIF9fczIpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgc3RkOjpjb2xsYXRlPF9DaGFy VD4gX19jb2xsYXRlX3R5cGU7CiAgICAgIGNvbnN0IF9fY29sbGF0ZV90eXBlKiBfX2Zjb2xsID0g JnVzZV9mYWNldDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOwogICAgICByZXR1cm4gKF9fZmNvbGwt PmNvbXBhcmUoX19zMS5kYXRhKCksIF9fczEuZGF0YSgpICsgX19zMS5sZW5ndGgoKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fczIuZGF0YSgpLCBfX3MyLmRhdGEoKSArIF9fczIu bGVuZ3RoKCkpIDwgMCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGNv bnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAg ICB0eXBlZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9fdmVjX2ZhY2V0OwogICAgICBz aXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pbmRleDsKICAgICAgX192ZWNfZmFjZXQqIF9fZmFj ZXQgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIGNvbnN0IGxvY2FsZTo6ZmFjZXQq IF9fZnAgPSAoKl9fZmFjZXQpW19faV07CiAgICAgIGlmIChfX2ZwID09IDAgfHwgX19pID49IF9f ZmFjZXQtPnNpemUoKSkKICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAgIHJldHVybiBz dGF0aWNfY2FzdDxjb25zdCBfRmFjZXQmPigqX19mcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKSB0 aHJvdygpCiAgICB7CiAgICAgIHR5cGVkZWYgbG9jYWxlOjpfSW1wbDo6X192ZWNfZmFjZXQgX192 ZWNfZmFjZXQ7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2luZGV4OwogICAgICBf X3ZlY19mYWNldCogX19mYWNldCA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsKICAgICAgcmV0 dXJuIChfX2kgPCBfX2ZhY2V0LT5zaXplKCkgJiYgKCpfX2ZhY2V0KVtfX2ldICE9IDApOwogICAg fQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyLCB0eXBlbmFtZSBfQ2hhclQ+CiAg ICBfSW5JdGVyCiAgICBfX21hdGNoX3BhcmFsbGVsKF9Jbkl0ZXIgX19zLCBfSW5JdGVyIF9fZW5k LCBpbnQgX19udGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQ+KiBfX3RhcmdldHMsCiAgICAgICAgICAgICAgICAgICAgIGludCogX19tYXRjaGVzLCBp bnQmIF9fcmVtYWluLCBib29sJiBfX2VvZikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp bmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwogICAgICBfX2VvZiA9IGZhbHNlOwogICAgICBmb3Ig KGludCBfX3RpID0gMDsgX190aSA8IF9fbnRhcmdzOyArK19fdGkpCiAgICAgICAgX19tYXRjaGVz W19fdGldID0gX190aTsKICAgICAgX19yZW1haW4gPSBfX250YXJnczsKICAgICAgc2l6ZV90IF9f cG9zID0gMDsKICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICBpbnQgX190aSA9IDA7CiAgICAg ICAgICB3aGlsZSAoX190aSA8IF9fcmVtYWluICYmIF9fcG9zID09IF9fdGFyZ2V0c1tfX21hdGNo ZXNbX190aV1dLnNpemUoKSkKICAgICAgICAgICAgKytfX3RpOwogICAgICAgICAgaWYgKF9fdGkg PT0gX19yZW1haW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19wb3MgPT0gMCkg X19yZW1haW4gPSAwOwogICAgICAgICAgICAgIHJldHVybiBfX3M7CiAgICAgICAgICAgIH0KICAg ICAgICAgIGlmIChfX3MgPT0gX19lbmQpCiAgICAgICAgICAgIF9fZW9mID0gdHJ1ZTsKICAgICAg ICAgIGJvb2wgX19tYXRjaGVkID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGludCBfX3RpMiA9IDA7 IF9fdGkyIDwgX19yZW1haW47ICkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IF9f c3RyaW5nX3R5cGUmIF9fdGFyZ2V0ID0gX190YXJnZXRzW19fbWF0Y2hlc1tfX3RpMl1dOwogICAg ICAgICAgICAgIGlmIChfX3BvcyA8IF9fdGFyZ2V0LnNpemUoKSkKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgaWYgKF9fZW9mIHx8IF9fdGFyZ2V0W19fcG9zXSAhPSAqX19zKQog ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fbWF0Y2hlc1tfX3Rp Ml0gPSBfX21hdGNoZXNbLS1fX3JlbWFpbl07CiAgICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIF9fbWF0Y2hlZCA9IHRy dWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgKytfX3RpMjsKICAgICAgICAgICAg fQogICAgICAgICAgaWYgKF9fbWF0Y2hlZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICsr X19zOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgIH0KICAgICAgICAgIGZvciAo aW50IF9fdGkzID0gMDsgX190aTMgPCBfX3JlbWFpbjspCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBpZiAoX19wb3MgPiBfX3RhcmdldHNbX19tYXRjaGVzW19fdGkzXV0uc2l6ZSgpKQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21hdGNoZXNbX190aTNdID0gX19tYXRj aGVzWy0tX19yZW1haW5dOwogICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICArK19fdGkzOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICB3aGlsZSAoX19yZW1haW4pOwogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+CiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9Gb3JtYXRfY2FjaGUo KQogICAgOiBfTV92YWxpZCh0cnVlKSwgX01fdXNlX2dyb3VwaW5nKGZhbHNlKQogICAgeyB9Cgog IHRlbXBsYXRlPD4KICAgIF9Gb3JtYXRfY2FjaGU8Y2hhcj46Ol9Gb3JtYXRfY2FjaGUoKTsKCiAg dGVtcGxhdGU8PgogICAgX0Zvcm1hdF9jYWNoZTx3Y2hhcl90Pjo6X0Zvcm1hdF9jYWNoZSgpOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBfRm9ybWF0X2NhY2hlPF9D aGFyVD46Ol9NX3BvcHVsYXRlKGlvc19iYXNlJiBfX2lvKQogICAgewogICAgICBsb2NhbGUgX19s b2MgPSBfX2lvLmdldGxvYyAoKTsKICAgICAgbnVtcHVuY3Q8X0NoYXJUPiBjb25zdCYgX19ucCA9 IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfTV90cnVlbmFtZSA9 IF9fbnAudHJ1ZW5hbWUoKTsKICAgICAgX01fZmFsc2VuYW1lID0gX19ucC5mYWxzZW5hbWUoKTsK ICAgICAgX01fdGhvdXNhbmRzX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwogICAgICBfTV9k ZWNpbWFsX3BvaW50ID0gX19ucC5kZWNpbWFsX3BvaW50KCk7CiAgICAgIF9NX2dyb3VwaW5nID0g X19ucC5ncm91cGluZygpOwogICAgICBfTV91c2VfZ3JvdXBpbmcgPSBfTV9ncm91cGluZy5zaXpl KCkgIT0gMCAmJiBfTV9ncm91cGluZy5kYXRhKClbMF0gIT0gMDsKICAgICAgX01fdmFsaWQgPSB0 cnVlOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHZvaWQKICAgIF9G b3JtYXRfY2FjaGU8X0NoYXJUPjo6CiAgICBfU19jYWxsYmFjayhpb3NfYmFzZTo6ZXZlbnQgX19l diwgaW9zX2Jhc2UmIF9faW9zLCBpbnQgX19peCkgdGhyb3coKQogICAgewogICAgICB2b2lkKiYg X19wID0gX19pb3MucHdvcmQoX19peCk7CiAgICAgIHN3aXRjaCAoX19ldikKICAgICAgICB7CiAg ICAgICAgY2FzZSBpb3NfYmFzZTo6ZXJhc2VfZXZlbnQ6CiAgICAgICAgICBkZWxldGUgc3RhdGlj X2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKTsKICAgICAgICAgIF9fcCA9IDA7CiAg ICAgICAgICBicmVhazsKICAgICAgICBjYXNlIGlvc19iYXNlOjpjb3B5Zm10X2V2ZW50OgoKICAg ICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcCA9IG5ldyBfRm9ybWF0X2NhY2hlPF9DaGFyVD47 IH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgeyB9CiAgICAgICAgICBicmVhazsK ICAgICAgICBjYXNlIGlvc19iYXNlOjppbWJ1ZV9ldmVudDoKICAgICAgICAgIHN0YXRpY19jYXN0 PF9Gb3JtYXRfY2FjaGU8X0NoYXJUPio+KF9fcCktPl9NX3ZhbGlkID0gZmFsc2U7CiAgICAgICAg ICBicmVhazsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPioKICAgIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X1NfZ2V0 KGlvc19iYXNlJiBfX2lvcykKICAgIHsKICAgICAgaWYgKCFfU19wd29yZF9peCkKICAgICAgICBf U19wd29yZF9peCA9IGlvc19iYXNlOjp4YWxsb2MoKTsKICAgICAgdm9pZComIF9fcCA9IF9faW9z LnB3b3JkKF9TX3B3b3JkX2l4KTsKCgogICAgICBpZiAoX19wID09IDApCiAgICAgICAgewogICAg ICAgICAgYXV0b19wdHI8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+ID4gX19hcChuZXcgX0Zvcm1hdF9j YWNoZTxfQ2hhclQ+KTsKICAgICAgICAgIF9faW9zLnJlZ2lzdGVyX2NhbGxiYWNrKCZfRm9ybWF0 X2NhY2hlPF9DaGFyVD46Ol9TX2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1NfcHdvcmRfaXgpOwogICAgICAgICAgX19wID0gX19hcC5yZWxlYXNlKCk7CiAgICAg ICAgfQogICAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qIF9fbmNwID0gc3RhdGljX2Nhc3Q8X0Zv cm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKTsKICAgICAgaWYgKCFfX25jcC0+X01fdmFsaWQpCiAg ICAgICAgX19uY3AtPl9NX3BvcHVsYXRlKF9faW9zKTsKCiAgICAgIHJldHVybiBfX25jcDsKICAg IH0KIyAyNTAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIHZvaWQKICAg IG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0KF9Jbkl0ZXIgLCBfSW5J dGVyICwgaW9zX2Jhc2UmICwKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmICwgY2hh ciogLAogICAgICAgICAgICAgICBpbnQmICwgYm9vbCApIGNvbnN0CiAgICB7CgogICAgfQoKICB0 ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBudW1fZ2V0PGNoYXIsIGlzdHJlYW1idWZfaXRlcmF0b3I8 Y2hhcj4gPjo6CiAgICBfTV9leHRyYWN0KGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gX19iZWcs CiAgICAgICAgICAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gX19lbmQsIGlvc19iYXNl JiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGNoYXIqIF9f eHRyYywgaW50JiBfX2Jhc2UsCiAgICAgICAgICAgICAgIGJvb2wgX19mcCkgY29uc3Q7CgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgog ICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcs IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0CiAgICB7CgogICAgICBpZiAoIShfX2lvLmZs YWdzKCkgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSkKICAgICAgICB7CgoKCgoKCiAgICAgICAgICBj aGFyIF9feHRyY1szMl0gPSB7J1wwJ307CiAgICAgICAgICBpbnQgX19iYXNlOwogICAgICAgICAg X01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFs c2UpOwoKCiAgICAgICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgICAgICgqX19lcnJub19sb2Nh dGlvbiAoKSkgPSAwOwogICAgICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5p dHksIF9fYmFzZSk7CiAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQog ICAgICAgICAgICAgICYmIF9fbCA8PSAxCiAgICAgICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194 dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkK ICAgICAgICAgICAgX192ID0gX19sOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2VyciB8 PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAgZWxzZQogICAgICAgIHsKICAg ICAgICAgIHR5cGVkZWYgX0Zvcm1hdF9jYWNoZTxjaGFyX3R5cGU+IF9fZmNhY2hlX3R5cGU7CiAg ICAgICAgICBfX2ZjYWNoZV90eXBlKiBfX2ZtdCA9IF9fZmNhY2hlX3R5cGU6Ol9TX2dldChfX2lv KTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX190cnVlID0gX19mbXQtPl9NX3RydWVuYW1l LmNfc3RyKCk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmFsc2UgPSBfX2ZtdC0+X01f ZmFsc2VuYW1lLmNfc3RyKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX190cnVlbGVuID0gX190 cmFpdHNfdHlwZTo6bGVuZ3RoKF9fdHJ1ZSkgLSAxOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9f ZmFsc2VsZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19mYWxzZSkgLSAxOwoKICAgICAgICAg IGZvciAoc2l6ZV90IF9fcG9zID0gMDsgX19iZWcgIT0gX19lbmQ7ICsrX19wb3MpCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnKys7CiAgICAgICAgICAg ICAgYm9vbCBfX3Rlc3RmID0gX19jID09IF9fZmFsc2VbX19wb3NdOwogICAgICAgICAgICAgIGJv b2wgX190ZXN0dCA9IF9fYyA9PSBfX3RydWVbX19wb3NdOwogICAgICAgICAgICAgIGlmICghKF9f dGVzdGYgfHwgX190ZXN0dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9f ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rlc3RmICYmIF9fcG9zID09IF9f ZmFsc2VsZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDA7CiAg ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVs c2UgaWYgKF9fdGVzdHQgJiYgX19wb3MgPT0gX190cnVlbGVuKQogICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICBfX3YgPSAxOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQog ICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICAgIH0KCiAgICAgIHJl dHVybiBfX2JlZzsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAg ZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHNob3J0JiBfX3YpIGNvbnN0CiAg ICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwog ICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNl LCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlv biAoKSkgPSAwOwogICAgICBsb25nIF9fbCA9IHN0cnRvbChfX3h0cmMsICZfX3Nhbml0eSwgX19i YXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYm IF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9j YXRpb24gKCkpID09IDAKICAgICAgICAgICYmIF9fbCA+PSAoLTMyNzY3LTEpICYmIF9fbCA8PSAz Mjc2NykKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDxzaG9ydD4oX19sKTsKICAgICAgZWxzZQog ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlw ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGludCYgX192KSBjb25zdAogICAgewoKCgogICAgICBjaGFy IF9feHRyY1szMl0gPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3Qo X19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAg ICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAg IGxvbmcgX19sID0gc3RydG9sKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAo IShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194 dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMAog ICAgICAgICAgJiYgX19sID49ICgtMjE0NzQ4MzY0NyAtMSkgJiYgX19sIDw9IDIxNDc0ODM2NDcp CiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8aW50PihfX2wpOwogICAgICBlbHNlCiAgICAgICAg X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVy CiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2Jl ZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0 cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcs IF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFy KiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGxvbmcg X19sID0gc3RydG9sKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2Vy ciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYm ICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAg ICBfX3YgPSBfX2w7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp dDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25n JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXT0geydcMCd9OwogICAg ICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIs IF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgq X19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICBsb25nIGxvbmcgX19sbCA9IHN0cnRvbGwo X194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6 OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09 ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fbGw7 CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJl dHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBk b19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikg Y29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBf X2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJj LCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5v X2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIHVuc2lnbmVkIGxvbmcgX191bCA9IHN0cnRvdWwoX194 dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZh aWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdc MCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwCiAgICAgICAgICAmJiBfX3VsIDw9IDY1 NTM1KQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX3VsKTsKICAg ICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJu IF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0 ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0 KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdAog ICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsK ICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFz ZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRp b24gKCkpID0gMDsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsID0gc3RydG91bChfX3h0cmMsICZf X3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkK ICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAo Kl9fZXJybm9fbG9jYXRpb24gKCkpID09IDAKICAgICAgICAgICYmIF9fdWwgPD0gKDIxNDc0ODM2 NDcgKiAyVSArIDEpKQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX191 bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAg IHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg IGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s CiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nJiBfX3Yp IGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsKICAgICAgaW50 IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0 cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJy bm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsID0gc3RydG91bChf X3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6 ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0g J1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX191bDsK ICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0 dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf SW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRv X2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmIF9f dikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGlu dCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194 dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vy cm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3VsbCA9IHN0 cnRvdWxsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlv c19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nh bml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAgICBfX3Yg PSBfX3VsbDsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoK ICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+ OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um IF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBj b25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9f YmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMs IF9fYmFzZSwgdHJ1ZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19s b2NhdGlvbiAoKSkgPSAwOwoKICAgICAgZmxvYXQgX19mID0gc3RydG9mKF9feHRyYywgJl9fc2Fu aXR5KTsKCgoKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAg ICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9f bG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX19mOwogICAgICBlbHNlCiAgICAgICAg X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIK ICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVn LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194 dHJjWzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVn LCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsKCgogICAgICBjaGFy KiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGRvdWJs ZSBfX2QgPSBzdHJ0b2QoX194dHJjLCAmX19zYW5pdHkpOwogICAgICBpZiAoIShfX2VyciAmIGlv c19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nh bml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAgICBfX3Yg PSBfX2Q7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAg ICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6 CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf X2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9f dikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGlu dCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194 dHJjLCBfX2Jhc2UsIHRydWUpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJy bm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgbG9uZyBkb3VibGUgX19sZCA9IHN0cnRvbGQoX194 dHJjLCAmX19zYW5pdHkpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQog ICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgq X19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAgICBfX3YgPSBfX2xkOwogICAgICBlbHNl CiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7 CiAgICB9CiMgNjc4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2Mi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBf X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVm IGlvc19iYXNlOjpmbXRmbGFncyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lv LmZsYWdzKCk7CiAgICAgIGZtdGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3Mg fCBpb3NfYmFzZTo6YmFzZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3Nf YmFzZTo6dXBwZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhf X2ZtdCAmIF9fZm10bWFzayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7 CgoKCgogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAg ICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwg ZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24g KCkpID0gMDsKICAgICAgdm9pZCogX192cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0cnRv dWwoX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSkpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19i YXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0 eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAgICBfX3YgPSBf X3ZwOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgoKICAg ICAgX19pby5mbGFncyhfX2ZtdCk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBs YXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgaW5saW5lIF9PdXRJ dGVyCiAgICBfX3BhZChfT3V0SXRlciBfX3MsIF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcp OwoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfUmFJdGVyPgogICAgX1Jh SXRlcgogICAgX19wYWQoX1JhSXRlciBfX3MsIF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcs CiAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgZmlsbF9u KF9fcywgX19maWxsKTsKICAgICAgcmV0dXJuIF9fcyArIF9fcGFkZGluZzsKICAgIH0KCiAgdGVt cGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIsIHR5cGVuYW1lIF9UYWc+ CiAgICBfT3V0SXRlcgogICAgX19wYWQoX091dEl0ZXIgX19zLCBfQ2hhclQgX19maWxsLCBpbnQg X19wYWRkaW5nLCBfVGFnKQogICAgewogICAgICB3aGlsZSAoLS1fX3BhZGRpbmcgPj0gMCkgeyAq X19zID0gX19maWxsOyArK19fczsgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0 ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGlubGluZSBfT3V0SXRl cgogICAgX19wYWQoX091dEl0ZXIgX19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nKQog ICAgewogICAgICByZXR1cm4gX19wYWQoX19zLCBfX2ZpbGwsIF9fcGFkZGluZywKICAgICAgICAg ICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfT3V0SXRlcj46Oml0ZXJhdG9yX2Nh dGVnb3J5KCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf T3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBfX3BhZF9udW1lcmljKF9PdXRJdGVyIF9fcywgaW9z X2Jhc2U6OmZtdGZsYWdzICwKICAgICAgICAgICAgICAgICAgX0NoYXJUICwgaW50ICwKICAgICAg ICAgICAgICAgICAgX0NoYXJUIGNvbnN0KiAsIF9DaGFyVCBjb25zdCogLAogICAgICAgICAgICAg ICAgICBfQ2hhclQgY29uc3QqICkKICB7CgogICAgICByZXR1cm4gX19zOwogICAgfQoKCiAgdGVt cGxhdGUgPHR5cGVuYW1lIF9DaGFyVD4KICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPgog ICAgX19wYWRfbnVtZXJpYyhvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gX19zLCBpb3NfYmFz ZTo6Zm10ZmxhZ3MgX19mbGFncywKICAgICAgICAgICAgICAgICAgX0NoYXJUIF9fZmlsbCwgaW50 IF9fd2lkdGgsIF9DaGFyVCBjb25zdCogX19maXJzdCwKICAgICAgICAgICAgICAgICAgX0NoYXJU IGNvbnN0KiBfX21pZGRsZSwgX0NoYXJUIGNvbnN0KiBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVk ZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+IF9fb3V0X2l0ZXI7CiAgICAgIGludCBfX3Bh ZGRpbmcgPSBfX3dpZHRoIC0gKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgICBpZiAoX19wYWRkaW5n IDwgMCkKICAgICAgICBfX3BhZGRpbmcgPSAwOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19h ZmxhZ3MgPSBfX2ZsYWdzICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOwogICAgICBib29sIF9fdGVz dGZpZWxkID0gX19wYWRkaW5nID09IDAgfHwgX19hZmxhZ3MgPT0gaW9zX2Jhc2U6OmxlZnQKICAg ICAgICAgICAgICAgICAgICAgICAgIHx8IF9fYWZsYWdzID09IGlvc19iYXNlOjppbnRlcm5hbDsK CgogICAgICBpZiAoX19maXJzdCAhPSBfX21pZGRsZSkKICAgICAgICB7CiAgICAgICAgICBpZiAo IV9fdGVzdGZpZWxkKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19wYWQoX19zLCBfX2Zp bGwsIF9fcGFkZGluZyk7CiAgICAgICAgICAgICAgX19wYWRkaW5nID0gMDsKICAgICAgICAgICAg fQogICAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19zKTsKICAgICAgICB9CiAgICAg IF9fb3V0X2l0ZXIgX19zMiA9IF9fczsKCiAgICAgIGlmIChfX3BhZGRpbmcgJiYgX19hZmxhZ3Mg IT0gaW9zX2Jhc2U6OmxlZnQpCiAgICAgICAgewogICAgICAgICAgX19wYWQoX19zMiwgX19maWxs LCBfX3BhZGRpbmcpOwogICAgICAgICAgX19wYWRkaW5nID0gMDsKICAgICAgICB9CiAgICAgIF9f b3V0X2l0ZXIgX19zMyA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19zMik7CiAgICAgIGlmIChf X3BhZGRpbmcpCiAgICAgICAgX19wYWQoX19zMywgX19maWxsLCBfX3BhZGRpbmcpOwogICAgICBy ZXR1cm4gX19zMzsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAg ICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws IGJvb2wgX192KSBjb25zdAogICAgewogICAgICBjb25zdCBfRm9ybWF0X2NhY2hlPF9DaGFyVD4q IF9fZm10ID0gX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19nZXQoX19pbyk7CiAgICAgIGlvc19i YXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwoKICAgICAgaWYgKChfX2ZsYWdz ICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCkKICAgICAgICB7CiAgICAgICAgICB1bnNpZ25l ZCBsb25nIF9fdXYgPSBfX3Y7CiAgICAgICAgICByZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3Ms IF9faW8sIF9fZmlsbCwgZmFsc2UsIF9fdXYpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg IHsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19maXJzdDsKICAgICAgICAgIGNvbnN0IGNo YXJfdHlwZSogX19sYXN0OwogICAgICAgICAgaWYgKF9fdikKICAgICAgICAgICAgewogICAgICAg ICAgICAgIF9fZmlyc3QgPSBfX2ZtdC0+X01fdHJ1ZW5hbWUuZGF0YSgpOwogICAgICAgICAgICAg IF9fbGFzdCA9IF9fZmlyc3QgKyBfX2ZtdC0+X01fdHJ1ZW5hbWUuc2l6ZSgpOwogICAgICAgICAg ICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2ZpcnN0ID0g X19mbXQtPl9NX2ZhbHNlbmFtZS5kYXRhKCk7CiAgICAgICAgICAgICAgX19sYXN0ID0gX19maXJz dCArIF9fZm10LT5fTV9mYWxzZW5hbWUuc2l6ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICBj b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19zKTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3M7CiAg ICB9CgoKCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJUPgogICAgX0NoYXJUKgogICAgX19n cm91cF9kaWdpdHMoX0NoYXJUKiBfX3MsIF9DaGFyVCBfX2dyc2VwLCBjaGFyIGNvbnN0KiBfX2dy b3VwaW5nLAogICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QqIF9fZ3JlbmQsIF9DaGFyVCBj b25zdCogX19maXJzdCwKICAgICAgICAgICAgICAgICAgICBfQ2hhclQgY29uc3QqIF9fbGFzdCkK ICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiAqX19ncm91cGluZykKICAgICAgICB7 CiAgICAgICAgICBfX3MgPSBfX2dyb3VwX2RpZ2l0cyhfX3MsIF9fZ3JzZXAsCiAgICAgICAgICAg ICAgKF9fZ3JvdXBpbmcgKyAxID09IF9fZ3JlbmQgPyBfX2dyb3VwaW5nIDogX19ncm91cGluZyAr IDEpLAogICAgICAgICAgICAgIF9fZ3JlbmQsIF9fZmlyc3QsIF9fbGFzdCAtICpfX2dyb3VwaW5n KTsKICAgICAgICAgIF9fZmlyc3QgPSBfX2xhc3QgLSAqX19ncm91cGluZzsKICAgICAgICAgICpf X3MrKyA9IF9fZ3JzZXA7CiAgICAgICAgfQogICAgICBkbwogICAgICAgIHsKICAgICAgICAgICpf X3MrKyA9ICpfX2ZpcnN0Kys7CiAgICAgICAgfQogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xh c3QpOwogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfT3V0SXRlciwgdHlwZW5hbWUgX1ZhbHVlVD4KICAgIF9PdXRJdGVyCiAgICBf X291dHB1dF9pbnRlZ2VyKF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2Zp bGwsIGJvb2wgX19uZWcsCiAgICAgICAgICAgICAgX1ZhbHVlVCBfX3YpCiAgICB7CgogICAgICBj b25zdCBsb25nIF9NX3Jvb20gPSBudW1lcmljX2xpbWl0czxfVmFsdWVUPjo6ZGlnaXRzMTAgKiAy ICsgNDsKICAgICAgX0NoYXJUIF9fZGlnaXRzW19NX3Jvb21dOwogICAgICBfQ2hhclQqIF9fZnJv bnQgPSBfX2RpZ2l0cyArIF9NX3Jvb207CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdz ID0gX19pby5mbGFncygpOwogICAgICBjb25zdCBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qIF9fZm10 ID0gX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19nZXQoX19pbyk7CiAgICAgIGNoYXIgY29uc3Qq IF9fdGFibGUgPSBfX2ZtdC0+X1NfbGl0ZXJhbHMgKyBfX2ZtdC0+X1NfZGlnaXRzOwoKICAgICAg aW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gKF9fZmxhZ3MgJiBfX2lvLmJhc2VmaWVs ZCk7CiAgICAgIF9DaGFyVCogX19zaWduX2VuZCA9IF9fZnJvbnQ7CiAgICAgIGlmIChfX2Jhc2Vm aWVsZCA9PSBpb3NfYmFzZTo6aGV4KQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2ZsYWdzICYg aW9zX2Jhc2U6OnVwcGVyY2FzZSkKICAgICAgICAgICAgX190YWJsZSArPSAxNjsKICAgICAgICAg IGRvCiAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlW19fdiAmIDE1XTsKICAgICAgICAg IHdoaWxlICgoX192ID4+PSA0KSAhPSAwKTsKICAgICAgICAgIF9fc2lnbl9lbmQgPSBfX2Zyb250 OwogICAgICAgICAgaWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICAqLS1fX2Zyb250ID0gX19mbXQtPl9TX2xpdGVyYWxzW19fZm10LT5f U194ICsKICAgICAgICAgICAgICAgICAgICAgICAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6dXBwZXJj YXNlKSA/IDEgOiAwKV07CiAgICAgICAgICAgICAgKi0tX19mcm9udCA9IF9fdGFibGVbMF07CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYmFzZWZpZWxkID09IGlvc19i YXNlOjpvY3QpCiAgICAgICAgewogICAgICAgICAgZG8KICAgICAgICAgICAgKi0tX19mcm9udCA9 IF9fdGFibGVbX192ICYgN107CiAgICAgICAgICB3aGlsZSAoKF9fdiA+Pj0gMykgIT0gMCk7CiAg ICAgICAgICBpZiAoX19mbGFncyAmIGlvc19iYXNlOjpzaG93YmFzZQogICAgICAgICAgICAgICYm IHN0YXRpY19jYXN0PGNoYXI+KCpfX2Zyb250KSAhPSBfX3RhYmxlWzBdKQogICAgICAgICAgICAq LS1fX2Zyb250ID0gX190YWJsZVswXTsKICAgICAgICAgIF9fc2lnbl9lbmQgPSBfX2Zyb250Owog ICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBkbwogICAgICAgICAgICAq LS1fX2Zyb250ID0gX190YWJsZVtfX3YgJSAxMF07CiAgICAgICAgICB3aGlsZSAoKF9fdiAvPSAx MCkgIT0gMCk7CiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsKCiAgICAgICAgICBpZiAo X19uZWcgfHwgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hvd3BvcykpCiAgICAgICAgICAgICotLV9f ZnJvbnQgPSBfX2ZtdC0+X1NfbGl0ZXJhbHNbX19mbXQtPl9TX3BsdXMgLSBfX25lZ107CiAgICAg ICAgfQoKCiAgICAgIGlmICghX19mbXQtPl9NX3VzZV9ncm91cGluZyAmJiAhX19pby53aWR0aCgp KQogICAgICAgIHJldHVybiBjb3B5KF9fZnJvbnQsIF9fZGlnaXRzICsgX01fcm9vbSwgX19zKTsK CiAgICAgIGlmICghX19mbXQtPl9NX3VzZV9ncm91cGluZykKICAgICAgICByZXR1cm4gX19wYWRf bnVtZXJpYyhfX3MsIF9fZmxhZ3MsIF9fZmlsbCwgX19pby53aWR0aCgwKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2Zyb250LCBfX3NpZ25fZW5kLCBfX2RpZ2l0cyArIF9NX3Jvb20p OwoKICAgICAgX0NoYXJUKiBfX3AgPSBfX2RpZ2l0czsKICAgICAgd2hpbGUgKF9fZnJvbnQgPCBf X3NpZ25fZW5kKQogICAgICAgICpfX3ArKyA9ICpfX2Zyb250Kys7CiAgICAgIGNvbnN0IGNoYXIq IF9fZ3IgPSBfX2ZtdC0+X01fZ3JvdXBpbmcuZGF0YSgpOwogICAgICBfX2Zyb250ID0gX19ncm91 cF9kaWdpdHMoX19wLCBfX2ZtdC0+X01fdGhvdXNhbmRzX3NlcCwgX19nciwKICAgICAgICBfX2dy ICsgX19mbXQtPl9NX2dyb3VwaW5nLnNpemUoKSwgX19zaWduX2VuZCwgX19kaWdpdHMgKyBfTV9y b29tKTsKICAgICAgcmV0dXJuIF9fcGFkX251bWVyaWMoX19zLCBfX2ZsYWdzLCBfX2ZpbGwsIF9f aW8ud2lkdGgoMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlnaXRzLCBfX3AsIF9f ZnJvbnQpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0 SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRv X3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgbG9u ZyBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAgICAg Ym9vbCBfX25lZyA9IGZhbHNlOwogICAgICBpZiAoX192IDwgMCkKICAgICAgICB7CiAgICAgICAg ICBfX25lZyA9IHRydWU7CiAgICAgICAgICBfX3V2ID0gLV9fdXY7CiAgICAgICAgfQogICAgICBy ZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgX19uZWcsIF9fdXYpOwog ICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAg IF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVy X3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICB1 bnNpZ25lZCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9fb3V0cHV0X2ludGVnZXIoX19z LCBfX2lvLCBfX2ZpbGwsIGZhbHNlLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwg X091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19iLCBjaGFy X3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdAogICAgewogICAgICB1bnNpZ25lZCBs b25nIGxvbmcgX191diA9IF9fdjsKICAgICAgYm9vbCBfX25lZyA9IGZhbHNlOwogICAgICBpZiAo X192IDwgMCkKICAgICAgICB7CiAgICAgICAgICBfX25lZyA9IHRydWU7CiAgICAgICAgICBfX3V2 ID0gLV9fdXY7CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9f YiwgX19maWxsLCBfX25lZywgX191dik7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBf T3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFy X3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAg ICB7IHJldHVybiBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19pbywgX19maWxsLCBmYWxzZSwgX192 KTsgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgX19vdXRwdXRfZmxvYXQoX091dEl0ZXIg X19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwKICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyKiBfX3NwdHIsIHNpemVfdCBfX3NsZW4pCiAgICB7CgogICAgICByZXR1cm4gX19z OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+CiAgICBfX291dHB1dF9mbG9h dChvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19zLCBpb3NfYmFzZSYgX19p bywKICAgICAgICAgICAgICAgICAgIF9DaGFyVCBfX2ZpbGwsIGNvbnN0IGNoYXIqIF9fc3B0ciwg c2l6ZV90IF9fc2xlbikKICAgIHsKICAgICAgc2l6ZV90IF9fcGFkZGluZyA9IF9faW8ud2lkdGgo KSA+IHN0cmVhbXNpemUoX19zbGVuKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICBfX2lvLndp ZHRoKCkgLV9fc2xlbiA6IDA7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAg ICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3QgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+ KF9fbG9jKTsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYWRqZmllbGQgPSBfX2lvLmZsYWdz KCkgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7CiAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IF9fZXB0 ciA9IF9fc3B0ciArIF9fc2xlbjsKCiAgICAgIGlmIChfX2FkamZpZWxkID09IGlvc19iYXNlOjpp bnRlcm5hbCkKICAgICAgIHsKCiAgICAgICAgIGlmIChfX3NwdHIgPCBfX2VwdHIgJiYgKCpfX3Nw dHIgPT0gJysnIHx8ICpfX3NwdHIgPT0gJy0nKSkKICAgICAgICAgICB7CiAgICAgICAgICAgICBf X3MgPSBfX2N0LndpZGVuKCpfX3NwdHIpOwogICAgICAgICAgICAgKytfX3M7CiAgICAgICAgICAg ICArK19fc3B0cjsKICAgICAgICAgICB9CiAgICAgICAgIF9fcyA9IF9fcGFkKF9fcywgX19maWxs LCBfX3BhZGRpbmcpOwogICAgICAgICBfX3BhZGRpbmcgPSAwOwogICAgICAgfQogICAgICBlbHNl IGlmIChfX2FkamZpZWxkICE9IGlvc19iYXNlOjpsZWZ0KQogICAgICAgIHsKICAgICAgICAgIF9f cyA9IF9fcGFkKF9fcywgX19maWxsLCBfX3BhZGRpbmcpOwogICAgICAgICAgX19wYWRkaW5nID0g MDsKICAgICAgICB9CgogICAgICBjaGFyIF9fZGVjaW1hbF9wb2ludCA9ICoobG9jYWxlY29udigp LT5kZWNpbWFsX3BvaW50KTsKICAgICAgY29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2Zt dCA9IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X1NfZ2V0KF9faW8pOwogICAgICBmb3IgKDsgX19z cHRyICE9IF9fZXB0cjsgKytfX3MsICsrX19zcHRyKQogICAgICAgewoKICAgICAgICAgaWYgKCpf X3NwdHIgPT0gX19kZWNpbWFsX3BvaW50KQogICAgICAgICAgIF9fcyA9IF9fZm10LT5fTV9kZWNp bWFsX3BvaW50OwoKICAgICAgICAgZWxzZQogICAgICAgICAgIF9fcyA9IF9fY3Qud2lkZW4oKl9f c3B0cik7CiAgICAgICB9CgogICAgICBpZiAoX19wYWRkaW5nKQogICAgICAgIF9fcGFkKF9fcywg X19maWxsLCBfX3BhZGRpbmcpOwogICAgICBfX2lvLndpZHRoKDApOwogICAgICByZXR1cm4gX19z OwogICAgfQoKICBib29sCiAgX19idWlsZF9mbG9hdF9mb3JtYXQoaW9zX2Jhc2UmIF9faW8sIGNo YXIqIF9fZnB0ciwgY2hhciBfX21vZGlmaWVyLAogICAgICAgICAgICAgICAgICAgICAgIHN0cmVh bXNpemUgX19wcmVjKTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091 dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBk b19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGRv dWJsZSBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19tYXhfcHJlYyA9 IG51bWVyaWNfbGltaXRzPGRvdWJsZT46OmRpZ2l0czEwICsgMzsKICAgICAgc3RyZWFtc2l6ZSBf X3ByZWMgPSBfX2lvLnByZWNpc2lvbigpOwoKICAgICAgaWYgKF9fcHJlYyA+IF9fbWF4X3ByZWMp CiAgICAgICAgX19wcmVjID0gX19tYXhfcHJlYzsKCiAgICAgIGNoYXIgX19zYnVmW19fbWF4X3By ZWMgKiAyXTsKICAgICAgc2l6ZV90IF9fc2xlbjsKCiAgICAgIGNoYXIgX19mYnVmWzE2XTsKICAg ICAgaWYgKF9fYnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgMCwgX19wcmVjKSkKICAg ICAgICBfX3NsZW4gPSBzcHJpbnRmKF9fc2J1ZiwgX19mYnVmLCBfX3ByZWMsIF9fdik7CiAgICAg IGVsc2UKICAgICAgICBfX3NsZW4gPSBzcHJpbnRmKF9fc2J1ZiwgX19mYnVmLCBfX3YpOwoKICAg ICAgcmV0dXJuIF9fb3V0cHV0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBfX3NidWYsIF9fc2xl bik7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy PgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0 KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAg ICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QKICAgIHsKICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBf X21heF9wcmVjID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjpkaWdpdHMxMCArIDM7CiAg ICAgIHN0cmVhbXNpemUgX19wcmVjID0gX19pby5wcmVjaXNpb24oKTsKCiAgICAgIGlmIChfX3By ZWMgPiBfX21heF9wcmVjKQogICAgICAgIF9fcHJlYyA9IF9fbWF4X3ByZWM7CgogICAgICBjaGFy IF9fc2J1ZltfX21heF9wcmVjICogMl07CiAgICAgIHNpemVfdCBfX3NsZW47CgogICAgICBjaGFy IF9fZmJ1ZlsxNl07CgogICAgICBpZiAoX19idWlsZF9mbG9hdF9mb3JtYXQoX19pbywgX19mYnVm LCAnTCcsIF9fcHJlYykpCiAgICAgICAgX19zbGVuID0gc3ByaW50ZihfX3NidWYsIF9fZmJ1Ziwg X19wcmVjLCBfX3YpOwogICAgICBlbHNlCiAgICAgICAgX19zbGVuID0gc3ByaW50ZihfX3NidWYs IF9fZmJ1ZiwgX192KTsKCiAgICAgIHJldHVybiBfX291dHB1dF9mbG9hdChfX3MsIF9faW8sIF9f ZmlsbCwgX19zYnVmLCBfX3NsZW4pOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091 dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90 eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICB7CiAgICAg IHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdzOwogICAgICBmbXRmbGFncyBfX2Zt dCA9IF9faW8uZmxhZ3MoKTsKICAgICAgZm10ZmxhZ3MgX19mbXRtYXNrID0gfihpb3NfYmFzZTo6 c2hvd3BvcyB8IGlvc19iYXNlOjpiYXNlZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IGlvc19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJuYWwpOwogICAgICBfX2lv LmZsYWdzKF9fZm10ICYgX19mbXRtYXNrIHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hv d2Jhc2UpKTsKICAgICAgdHJ5IHsKICAgICAgICBfT3V0SXRlciBfX3MyID0gX19vdXRwdXRfaW50 ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGxvbmc+KF9fdikpOwogICAgICAgIF9f aW8uZmxhZ3MoX19mbXQpOwogICAgICAgIHJldHVybiBfX3MyOwogICAgICB9CiAgICAgIGNhdGNo ICguLi4pIHsKICAgICAgICBfX2lvLmZsYWdzKF9fZm10KTsKICAgICAgICB0aHJvdzsKICAgICAg fQogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfRHVtbXkg PSBpbnQ+CiAgICBzdHJ1Y3QgX1dlZWtkYXluYW1lczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1 bW15PgogICAgc3RydWN0IF9XZWVrZGF5bmFtZXM8Y2hhciwgX0R1bW15PgogICAgeyBzdGF0aWMg Y29uc3QgY2hhciogY29uc3QgX1NfbmFtZXNbMTRdOyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf RHVtbXk+CiAgICBjb25zdCBjaGFyKiBjb25zdAogICAgX1dlZWtkYXluYW1lczxjaGFyLCBfRHVt bXk+OjpfU19uYW1lc1sxNF0gPQogICAgewogICAgICAiU3VuIiwgIlN1bmRheSIsCiAgICAgICJN b24iLCAiTW9uZGF5IiwgIlR1ZSIsICJUdWVzZGF5IiwgIldlZCIsICJXZWRuZXNkYXkiLAogICAg ICAiVGh1IiwgIlRodXJzZGF5IiwgIkZyaSIsICJGcmlkYXkiLCAiU2F0IiwgIlNhdHVyZGF5Igog ICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIHN0cnVjdCBfV2Vla2RheW5h bWVzPHdjaGFyX3QsIF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0IHdjaGFyX3QqIGNvbnN0IF9T X25hbWVzWzE0XTsgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgY29uc3Qgd2No YXJfdCogY29uc3QKICAgIF9XZWVrZGF5bmFtZXM8d2NoYXJfdCwgX0R1bW15Pjo6X1NfbmFtZXNb MTRdID0KICAgIHsKICAgICAgTCJTdW4iLCBMIlN1bmRheSIsCiAgICAgIEwiTW9uIiwgTCJNb25k YXkiLCBMIlR1ZSIsIEwiVHVlc2RheSIsIEwiV2VkIiwgTCJXZWRuZXNkYXkiLAogICAgICBMIlRo dSIsIEwiVGh1cnNkYXkiLCBMIkZyaSIsIEwiRnJpZGF5IiwgTCJTYXQiLCBMIlNhdHVyZGF5Igog ICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0R1bW15ID0gaW50 PgogICAgc3RydWN0IF9Nb250aG5hbWVzOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAg ICBzdHJ1Y3QgX01vbnRobmFtZXM8Y2hhcixfRHVtbXk+CiAgICB7IHN0YXRpYyBjb25zdCBjaGFy KiBjb25zdCBfU19uYW1lc1syNF07IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAg IGNvbnN0IGNoYXIqIGNvbnN0CiAgICBfTW9udGhuYW1lczxjaGFyLF9EdW1teT46Ol9TX25hbWVz WzI0XSA9CiAgICB7CiAgICAgICJKYW4iLCAiSmFudWFyeSIsICJGZWIiLCAiRmVicnVhcnkiLCAi TWFyIiwgIk1hcmNoIiwKICAgICAgIkFwciIsICJBcHJpbCIsICJNYXkiLCAiTWF5IiwgIkp1biIs ICJKdW5lIiwKICAgICAgIkp1bCIsICJKdWx5IiwgIkF1ZyIsICJBdWd1c3QiLCAiU2VwIiwgIlNl cHRlbWJlciIsCiAgICAgICJPY3QiLCAiT2N0b2JlciIsICJOb3YiLCAiTm92ZW1iZXIiLCAiRGVj IiwgIkRlY2VtYmVyIgogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIHN0 cnVjdCBfTW9udGhuYW1lczx3Y2hhcl90LCBfRHVtbXk+CiAgICB7IHN0YXRpYyBjb25zdCB3Y2hh cl90KiBjb25zdCBfU19uYW1lc1syNF07IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4K ICAgIGNvbnN0IHdjaGFyX3QqIGNvbnN0CiAgICBfTW9udGhuYW1lczx3Y2hhcl90LF9EdW1teT46 Ol9TX25hbWVzWzI0XSA9CiAgICB7CiAgICAgIEwiSmFuIiwgTCJKYW51YXJ5IiwgTCJGZWIiLCBM IkZlYnJ1YXJ5IiwgTCJNYXIiLCBMIk1hcmNoIiwKICAgICAgTCJBcHIiLCBMIkFwcmlsIiwgTCJN YXkiLCBMIk1heSIsIEwiSnVuIiwgTCJKdW5lIiwKICAgICAgTCJKdWwiLCBMIkp1bHkiLCBMIkF1 ZyIsIEwiQXVndXN0IiwgTCJTZXAiLCBMIlNlcHRlbWJlciIsCiAgICAgIEwiT2N0IiwgTCJPY3Rv YmVyIiwgTCJOb3YiLCBMIk5vdmVtYmVyIiwgTCJEZWMiLCBMIkRlY2VtYmVyIgogICAgfTsKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIK ICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X3dlZWtkYXkoaXRlcl90 eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLAogICAgICAgICAgICAgICAgICAgaW9zX2Jhc2UmIF9f aW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAgIHsKICAgICAg aWYgKCFfTV9kYXluYW1lcykKICAgICAgICB7CiAgICAgICAgICBfTV9kYXluYW1lcyA9IG5ldyBi YXNpY19zdHJpbmc8X0NoYXJUPlsxNF07CiAgICAgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kg PCAxNDsgKytfX2kpCiAgICAgICAgICAgIF9NX2RheW5hbWVzW19faV0gPSBfV2Vla2RheW5hbWVz PF9DaGFyVD46Ol9TX25hbWVzW19faV07CiAgICAgICAgfQogICAgICBib29sIF9fYXRfZW9mID0g ZmFsc2U7CiAgICAgIGludCBfX3JlbWFpbiA9IDA7CiAgICAgIGludCBfX21hdGNoZXNbMTRdOwog ICAgICBpdGVyX3R5cGUgX19vdXQgPSBfX21hdGNoX3BhcmFsbGVsKF9fcywgX19lbmQsIDE0LCBf TV9kYXluYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21h dGNoZXMsIF9fcmVtYWluLCBfX2F0X2VvZik7CiAgICAgIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3Rh dGUoMCk7CiAgICAgIGlmIChfX2F0X2VvZikgX19lcnIgfD0gX19pby5lb2ZiaXQ7CiAgICAgIGlm IChfX3JlbWFpbiA9PSAxIHx8CiAgICAgICAgICBfX3JlbWFpbiA9PSAyICYmIChfX21hdGNoZXNb MF0+PjEpID09IChfX21hdGNoZXNbMV0+PjEpKQogICAgICAgIF9fdC0+dG1fd2RheSA9IChfX21h dGNoZXNbMF0+PjEpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gX19pby5mYWlsYml0Owog ICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46 OgogICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsCiAg ICAgICAgICAgICAgICAgICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIHRtKiBfX3QpIGNvbnN0CiAgICB7CiAgICAgIGlmICghX01fbW9udGhuYW1lcykKICAgICAg ICB7CiAgICAgICAgICBfTV9tb250aG5hbWVzID0gbmV3IGJhc2ljX3N0cmluZzxfQ2hhclQ+WzI0 XTsKICAgICAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IDI0OyArK19faSkKICAgICAgICAg ICAgX01fbW9udGhuYW1lc1tfX2ldID0gX01vbnRobmFtZXM8X0NoYXJUPjo6X1NfbmFtZXNbX19p XTsKICAgICAgICB9CiAgICAgIGJvb2wgX19hdF9lb2YgPSBmYWxzZTsKICAgICAgaW50IF9fcmVt YWluID0gMDsKICAgICAgaW50IF9fbWF0Y2hlc1syNF07CiAgICAgIGl0ZXJfdHlwZSBfX291dCA9 IF9fbWF0Y2hfcGFyYWxsZWwoIF9fcywgX19lbmQsIDI0LCBfTV9tb250aG5hbWVzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21hdGNoZXMsIF9fcmVtYWluLCBf X2F0X2VvZik7CiAgICAgIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoMCk7CiAgICAgIGlmIChf X2F0X2VvZikgX19lcnIgfD0gX19pby5lb2ZiaXQ7CiAgICAgIGlmIChfX3JlbWFpbiA9PSAxIHx8 CiAgICAgICAgICBfX3JlbWFpbiA9PSAyICYmIChfX21hdGNoZXNbMF0+PjEpID09IChfX21hdGNo ZXNbMV0+PjEpKQogICAgICAgIF9fdC0+dG1fbW9uID0gKF9fbWF0Y2hlc1swXT4+MSk7CiAgICAg IGVsc2UKICAgICAgICBfX2VyciB8PSBfX2lvLmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX291dDsK ICAgIH0KfQojIDQyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAyIDMK IyAzMyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL29zdHJlYW0udGNjIiAyIDMKCm5hbWVzcGFj ZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNp Y19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcykKICAgIDogX01fb2soX19vcy5nb29kKCkp LCBfTV9vcyhfX29zKQogICAgewoKICAgICAgaWYgKF9NX29rICYmIF9fb3MudGllKCkpCiAgICAg ICAgX19vcy50aWUoKS0+Zmx1c2goKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19vc3Ry ZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFtX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9f Y2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg ICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChf X2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg ICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChpb3Nf YmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg eyBfX3BmKCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChib29sIF9fbikKICAgIHsK ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFj ZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlz LCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6b3BlcmF0b3I8PChsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7 CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOwogICAgICAgICAgICAg IGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFz ZWZpZWxkOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgICAg ICAgICAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNl OjpoZXgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyBfX2wgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pOwogICAgICAgICAg ICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wp LmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9f YywgX19uKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fYikKICAgICAgICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIF9f bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAg ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01f Y2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+ cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgp OwogICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkg JiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf TV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgYm9vbCBfX2Ig PSBmYWxzZTsKICAgICAgICAgICAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBf X2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fbDsKICAgICAgICAgICAgICAgICAgICAgIF9f bCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAg ICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWls ZWQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9f bikuZmFpbGVkKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg ICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9 IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9f bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAg ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01f Y2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+ cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoZG91YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9f Y2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkp CiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChs b25nIGRvdWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBp ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYg KF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQo KSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg ICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9 IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoY29uc3Qgdm9pZCogX19uKQogICAg ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7 CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19m YWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRo aXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAg ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjpvcGVyYXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbikKICAgIHsKICAgICAgc3Ry ZWFtc2l6ZSBfX3h0cmN0ID0gMDsKICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYm91dCA9IHRo aXMtPnJkYnVmKCk7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19zYmlu ICYmIF9fY2VyYikKICAgICAgICBfX3h0cmN0ID0gX19jb3B5X3N0cmVhbWJ1ZnMoKnRoaXMsIF9f c2JpbiwgX19zYm91dCk7CiAgICAgIGlmICghX19zYmluIHx8ICFfX3h0cmN0KQogICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46OnB1dChjaGFyX3R5cGUgX19jKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpbnRfdHlwZSBfX3B1dCA9 IHJkYnVmKCktPnNwdXRjKF9fYyk7CiAgICAgICAgICBpZiAoX19wdXQgIT0gdHJhaXRzX3R5cGU6 OnRvX2ludF90eXBlKF9fYykpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OndyaXRlKGNv bnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgc3RyZWFtc2l6 ZSBfX3B1dCA9IHRoaXMtPnJkYnVmKCktPnNwdXRuKF9fcywgX19uKTsKICAgICAgICAgIGlmICgg X19wdXQgIT0gX19uKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0 KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpmbHVzaCgpCiAgICB7 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK ICAgICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICYmIHRoaXMtPnJkYnVmKCktPnB1YnN5bmMoKSA9 PSAtMSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6dGVs bHAoKQogICAgewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAgICAgYm9v bCBfX3Rlc3RvayA9IHRoaXMtPmZhaWwoKSAhPSB0cnVlOwoKICAgICAgaWYgKF9fdGVzdG9rKQog ICAgICAgIF9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3Vy LCBpb3NfYmFzZTo6b3V0KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZWVrcChw b3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAgYm9vbCBfX3Rlc3RvayA9IHRoaXMtPmZhaWwoKSAh PSB0cnVlOwoKICAgICAgaWYgKF9fdGVzdG9rKQogICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5 cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6b3V0 KTsKCgogICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGZhaWxiaXQpOwoKICAgICAgICB9CiAgICAgIHJldHVybiAq dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtwKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vl a2RpciBfX2QpCiAgICB7CiAgICAgIGJvb2wgX190ZXN0b2sgPSB0aGlzLT5mYWlsKCkgIT0gdHJ1 ZTsKCiAgICAgIGlmIChfX3Rlc3RvaykKICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9f ZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvdXQpOwoK CiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoZmFpbGJpdCk7CiAgICAgICAgfQoKICAgICAgcmV0dXJuICp0aGlz OwogICAgfQojIDQ1NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL29zdHJlYW0udGNjIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAg X19wYWRfY2hhcihiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX19pb3MsCiAgICAgICAgICAg ICAgIF9DaGFyVCogX19uZXdzLCBjb25zdCBfQ2hhclQqIF9fb2xkcywKICAgICAgICAgICAgICAg Y29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxlbikKICAg IHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMg dHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBl IGludF90eXBlOwoKICAgICAgaW50X3R5cGUgX19wbGVuID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihf X25ld2xlbiAtIF9fb2xkbGVuKTsKICAgICAgY2hhcl90eXBlKiBfX3BhZHMgPSBzdGF0aWNfY2Fz dDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihjaGFyX3R5cGUpICogX19wbGVu KSk7CiAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX19wYWRzLCBfX3BsZW4sIF9faW9zLmZpbGwo KSk7CgogICAgICBjaGFyX3R5cGUqIF9fYmVnOwogICAgICBjaGFyX3R5cGUqIF9fZW5kOwogICAg ICBzaXplX3QgX19tb2QgPSAwOwogICAgICBzaXplX3QgX19iZWdsZW47CiAgICAgIGlvc19iYXNl OjpmbXRmbGFncyBfX2ZtdCA9IF9faW9zLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7 CgogICAgICBpZiAoX19mbXQgPT0gaW9zX2Jhc2U6OmxlZnQpCiAgICAgICAgewoKICAgICAgICAg IF9fYmVnID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOwogICAgICAgICAgX19iZWds ZW4gPSBfX29sZGxlbjsKICAgICAgICAgIF9fZW5kID0gX19wYWRzOwogICAgICAgIH0KICAgICAg ZWxzZSBpZiAoX19mbXQgPT0gaW9zX2Jhc2U6OmludGVybmFsKQogICAgICAgIHsKCgoKICAgICAg ICAgIHR5cGVkZWYgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+IF9fY2FjaGVfdHlwZTsKICAgICAgICAg IF9fY2FjaGVfdHlwZSBjb25zdCogX19mbXQgPSBfX2NhY2hlX3R5cGU6Ol9TX2dldChfX2lvcyk7 CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbWludXMgPSB0cmFpdHNfdHlwZTo6ZmluZChf X29sZHMsIF9fb2xkbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19mbXQtPl9TX21pbnVzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlw ZSogX19wbHVzID0gdHJhaXRzX3R5cGU6OmZpbmQoX19vbGRzLCBfX29sZGxlbiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mbXQtPl9TX3Bs dXMpOwogICAgICAgICAgYm9vbCBfX3Rlc3RzaWduID0gX19taW51cyB8fCBfX3BsdXM7CiAgICAg ICAgICBib29sIF9fdGVzdGhleCA9IF9fb2xkc1swXSA9PSAnMCcKICAgICAgICAgICAgICAgICAg ICAgICAgICAgJiYgKF9fb2xkc1sxXSA9PSAneCcgfHwgX19vbGRzWzFdID09ICdYJyk7CgogICAg ICAgICAgaWYgKF9fdGVzdGhleCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbmV3c1sw XSA9IF9fb2xkc1swXTsKICAgICAgICAgICAgICBfX25ld3NbMV0gPSBfX29sZHNbMV07CiAgICAg ICAgICAgICAgX19tb2QgKz0gMjsKICAgICAgICAgICAgICBfX2JlZyA9IGNvbnN0X2Nhc3Q8Y2hh cl90eXBlKj4oX19vbGRzICsgX19tb2QpOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19vbGRs ZW4gLSBfX21vZDsKICAgICAgICAgICAgICBfX2VuZCA9IF9fcGFkczsKICAgICAgICAgICAgfQog ICAgICAgICAgZWxzZSBpZiAoX190ZXN0c2lnbikKICAgICAgICAgICAgewogICAgICAgICAgICAg IF9fbW9kICs9IF9fcGxlbjsKICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fc2lnbiA9 IF9fbWludXMgPyBfX21pbnVzICsgMTogX19wbHVzICsgMTsKICAgICAgICAgICAgICBfX2JlZyA9 IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzKTsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9 IF9fc2lnbiAtIF9fb2xkczsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90 eXBlKj4oX19zaWduICsgX19wbGVuKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShf X25ld3MgKyBfX2JlZ2xlbiwgX19wYWRzLCBfX3BsZW4pOwogICAgICAgICAgICB9CiAgICAgICAg ICBlbHNlCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAg ICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9j YXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVs c2UKICAgICAgICB7CgogICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICBfX2JlZ2xl biA9IF9fcGxlbjsKICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29s ZHMpOwogICAgICAgIH0KCiAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fbmV3cywgX19iZWcsIF9f YmVnbGVuKTsKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19uZXdzICsgX19iZWdsZW4sIF9fZW5k LCBfX25ld2xlbiAtIF9fYmVnbGVuIC0gX19tb2QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19v dXQsIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6 c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0 LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hh clQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7CiAgICAgICAgICAg ICAgX19wYWRzWzBdID0gX19jOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwog ICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCAmX19jLCBfX3csIF9fbGVuKTsKICAg ICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgo MCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg ICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0 KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K ICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CiAg ICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry ZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYg YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5h bWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJi KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3Ry ZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIGNoYXIqIF9fcGFkcyA9 IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fdyArIDEpKTsKICAgICAgICAg ICAgICBfX3BhZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7 CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsICZfX2MsIF9fdywgX19sZW4pOwog ICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0 aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICByZXR1cm4gX19vdXQ7CiAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0 IF9DaGFyVCogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNl bnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53 aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJU Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwogICAgICAgICAgICAg IHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5n dGgoX19zKSk7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9fcywgX193LCBf X2xlbik7CiAgICAgICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAg X19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUo X19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0K ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg ICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp ZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0 OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAg ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7 CgoKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyPiBfX2N0cmFpdHNfdHlwZTsKCiAgICAg IHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYg KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19jbGVuID0gX19jdHJhaXRzX3R5 cGU6Omxlbmd0aChfX3MpOwogICAgICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8X0No YXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX2NsZW4gKyAxKSkpOwog ICAgICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDw9IF9fY2xlbjsgKytfX2kpCiAgICAg ICAgICAgIF9fd3NbX19pXSA9IF9fb3V0LndpZGVuKF9fc1tfX2ldKTsKICAgICAgICAgIF9DaGFy VCogX19zdHIgPSBfX3dzOwoKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fY2xlbik7CiAg ICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAg IF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShz aXplb2YoX0NoYXJUKSAqIF9fdykpOwoKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFk cywgX193cywgX193LCBfX2xlbik7CiAgICAgICAgICAgICAgICAgIF9fc3RyID0gX19wYWRzOwog ICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICBfX291dC53cml0ZShfX3N0ciwgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRo KDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg ICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9 CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAg ICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry ZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKQogICAgewogICAgICB0 eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAg IHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYg KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg ICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBjaGFyKiBf X3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cpKTsKICAgICAg ICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0 czo6bGVuZ3RoKF9fcykpOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3Ms IF9fdywgX19sZW4pOwogICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAg ICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0 LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy biBfX291dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LAog ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkg X19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBjb25z dCBfQ2hhclQqIF9fcyA9IF9fc3RyLmRhdGEoKTsKICAgICAgICAgIHN0cmVhbXNpemUgX193ID0g X19vdXQud2lkdGgoKTsKICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0No YXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwogICAgICAgICAg c3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fc3RyLnNpemUoKSk7 CgoKCiAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9fcywgX193LCBfX2xlbik7CiAgICAgICAgICAg ICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICB9 CiAgICAgICAgICBzdHJlYW1zaXplIF9fcmVzID0gX19vdXQucmRidWYoKS0+c3B1dG4oX19zLCBf X2xlbik7CiAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgIGlmIChfX3JlcyAhPSBf X2xlbikKICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAg ICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQp9CiMgMjc5ICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMiAzCiMgNDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfaW9zdHJlYW0uaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9p c3RyZWFtLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJlYW0u aCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAxIDMKIyA0MCAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDIgMwojIDEgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfbGltaXRzLmgiIDEgMwojIDQxICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX2lzdHJlYW0uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaXN0cmVh bSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBw dWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0 czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsK CgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFt YnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4gX19pb3Nf dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3Ry ZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFp dHM+IF9faXN0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0NoYXJULCBfX2lz dHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+ IF9fY3R5cGVfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBzdHJlYW1zaXplIF9NX2djb3Vu dDsKCiAgICBwdWJsaWM6CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pc3RyZWFtKF9fc3Ry ZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbml0KF9fc2IpOwogICAg ICAgIF9NX2djb3VudCA9IHN0cmVhbXNpemUoMCk7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwKICAg ICAgfmJhc2ljX2lzdHJlYW0oKQogICAgICB7IF9NX2djb3VudCA9IHN0cmVhbXNpemUoMCk7IH0K CgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoKCiAgICAg IF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAoKl9fcGYp KF9faXN0cmVhbV90eXBlJikpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9y Pj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19pc3RyZWFtX3R5 cGUmCiAgICAgIG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSk7CgoKICAg ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKTsKCiAgICAgIF9f aXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pOwoKICAgICAgX19pc3Ry ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbik7CgogICAgICBf X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihpbnQmIF9fbik7CgogICAgICBfX2lzdHJl YW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbik7CgogICAgICBfX2lz dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nJiBfX24pOwoKICAgICAgX19pc3RyZWFt X3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKTsKCgogICAgICBfX2lz dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbik7CgogICAgICBfX2lz dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmIF9fbik7CgoK ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fZik7CgogICAg ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fZik7CgogICAgICBf X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19mKTsKCiAgICAg IF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX3ApOwoKICAgICAgX19p c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoK ICAgICAgaW5saW5lIHN0cmVhbXNpemUKICAgICAgZ2NvdW50KHZvaWQpIGNvbnN0CiAgICAgIHsg cmV0dXJuIF9NX2djb3VudDsgfQoKICAgICAgaW50X3R5cGUKICAgICAgZ2V0KHZvaWQpOwoKICAg ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUmIF9fYyk7CgogICAgICBfX2lz dHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hh cl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQo Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiBnZXQoX19zLCBf X24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdl dChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxp bmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiKQogICAg ICB7IHJldHVybiBnZXQoX19zYiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJl YW1fdHlwZSYKICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNo YXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0 bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIGdldGxp bmUoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUm CiAgICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiA9IDEsIGludF90eXBlIF9fZGVsaW0gPSB0cmFp dHNfdHlwZTo6ZW9mKCkpOwoKICAgICAgaW50X3R5cGUKICAgICAgcGVlayh2b2lkKTsKCiAgICAg IF9faXN0cmVhbV90eXBlJgogICAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f bik7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJl YW1zaXplIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcHV0YmFjayhjaGFyX3R5 cGUgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICB1bmdldCh2b2lkKTsKCiAgICAg IGludAogICAgICBzeW5jKHZvaWQpOwoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbGcodm9pZCk7 CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cocG9zX3R5cGUpOwoKICAgICAgX19p c3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vla2Rpcik7Cgog ICAgcHJpdmF0ZToKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0 IF9faXN0cmVhbV90eXBlJik7CgogICAgICBiYXNpY19pc3RyZWFtKGNvbnN0IF9faXN0cmVhbV90 eXBlJik7CgogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnkKICAg IHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0 eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7 CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90 eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUg X19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIF9f aW50X3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBzZW50cnkoYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JiBfX2lzLCBib29sIF9fbm9za2lwd3MgPSBmYWxzZSk7CgogICAgICBvcGVy YXRvciBib29sKCkgeyByZXR1cm4gX01fb2s7IH0KCiAgICBwcml2YXRlOgogICAgICBib29sIF9N X29rOwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQmIF9fYyk7CgogIHRlbXBs YXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAg b3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBj aGFyJiBfX2MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihf X2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFy LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYg X19pbiwgc2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0 X2Nhc3Q8Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJh dG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcyk7 CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0 cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgdW5z aWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxj aGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl YW08Y2hhcixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFp dHM+JiBfX2luLCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRl cnByZXRfY2FzdDxjaGFyKj4oX19zKSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtCiAgICA6IHB1YmxpYyBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4sCiAgICAgIHB1YmxpYyBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCiAgICAgIGV4cGxp Y2l0CiAgICAgIGJhc2ljX2lvc3RyZWFtKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ KiBfX3NiKQogICAgICA6IF9faXN0cmVhbV90eXBlKF9fc2IpLCBfX29zdHJlYW1fdHlwZShfX3Ni KQogICAgICB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2lvc3RyZWFtKCkgeyB9CiAg ICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgd3MoYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JiBfX2lzKTsKfQoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv aXN0cmVhbS50Y2MiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvaXN0cmVhbS50 Y2MiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAxIDMKIyAz MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAyIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9pc3RyZWFtLnRjYyIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OnNlbnRyeTo6CiAgICBzZW50cnkoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JiBfX2luLCBib29sIF9fbm9za2lwd3MpCiAgICB7CiAgICAgIGlmIChfX2luLmdvb2Qo KSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19pbi50aWUoKSkKICAgICAgICAgICAgX19pbi50 aWUoKS0+Zmx1c2goKTsKICAgICAgICAgIGlmICghX19ub3NraXB3cyAmJiAoX19pbi5mbGFncygp ICYgaW9zX2Jhc2U6OnNraXB3cykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBf X2ludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIGNvbnN0 IF9fY3R5cGVfdHlwZSogX19jdHlwZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsKICAgICAg ICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAg ICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUg KF9fYyAhPSBfX2VvZiAmJiBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAg ICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwoKCgogICAgICAgICAgICAgIGlmIChf X2MgPT0gX19lb2YpCiAgICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2Zi aXQpOwoKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIGlmIChfX2luLmdvb2QoKSkKICAg ICAgICBfTV9vayA9IHRydWU7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfTV9vayA9 IGZhbHNlOwogICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAg ICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShf X2lzdHJlYW1fdHlwZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9z X3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkKICAg IHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg IG9wZXJhdG9yPj4oYm9vbCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBm YWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFj ZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAs ICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihzaG9ydCYgX19uKQog ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0 KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAg ICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0 aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKQogICAgewogICAgICBzZW50 cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBf X2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAg ICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVt Z2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0 b3I+PihpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwog ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShp b3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu dW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywg X19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgaW50JiBfX24pCiAg ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikK ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQp OwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAg ICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq dGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3Nf YmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2No ZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0 aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo X19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWdu ZWQgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAg ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlv c19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51 bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBf X2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyBsb25nJiBfX24pCiAgICB7 CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAg ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwog ICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAg ICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0 Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog ICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdl dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRv cj4+KGZsb2F0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsK ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUo aW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m bnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMs IF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAg ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1 cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19uKQogICAgewog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAg ICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAg ICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog ICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJi KCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlv c19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01f Y2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQo KnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih2b2lk KiYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlm IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNl Ojpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkp CiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg X19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0K ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KQog ICAgewogICAgICBzdHJlYW1zaXplIF9feHRyY3QgPSAwOwogICAgICBfX3N0cmVhbWJ1Zl90eXBl KiBfX3NiaW4gPSB0aGlzLT5yZGJ1ZigpOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxz ZSk7CiAgICAgIGlmIChfX3Nib3V0ICYmIF9fY2VyYikKICAgICAgICBfX3h0cmN0ID0gX19jb3B5 X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7CiAgICAgIGlmICghX19zYm91dCB8 fCAhX194dHJjdCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAg ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjppbnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldCh2 b2lkKQogICAgewogICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2Yo KTsKICAgICAgaW50X3R5cGUgX19jID0gX19lb2Y7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0gdGhpcy0+cmRi dWYoKS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlmIChfX2MgIT0gX19lb2YpCiAgICAgICAg ICAgICAgICBfTV9nY291bnQgPSAxOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAg ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg ICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9 IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg cmV0dXJuIF9fYzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChjaGFyX3R5cGUmIF9fYykKICAgIHsKICAg ICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAg ICAgICAgICBpbnRfdHlwZSBfX2J1ZnZhbCA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOwoKICAg ICAgICAgICAgICBpZiAoX19idWZ2YWwgIT0gX19lb2YpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAgICAgICAgICAgICAgICAgIF9fYyA9IHRyYWl0 c190eXBlOjp0b19jaGFyX3R5cGUoX19idWZ2YWwpOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2Zi aXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4 Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg Z2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pCiAg ICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUp OwogICAgICBpZiAoX19jZXJiICYmIF9fbiA+IDEpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0 c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlw ZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90 eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBf X3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9f aWRlbGltOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAg ICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uIC0gMSAmJiAhX190ZXN0ZW9mICYmICFf X3Rlc3RkZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0g dHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICArK19NX2dj b3VudDsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAg ICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAgICAgICAgX190ZXN0 ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg aWYgKF9fdGVzdGRlbGltIHx8IF9NX2djb3VudCA9PSBfX24gLSAxKQogICAgICAgICAgICAgICAg X19zYi0+c3B1dGJhY2tjKF9fYyk7CiAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAgICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9 CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAg aWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICpfX3MgPSBjaGFy X3R5cGUoKTsKICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQo X19zdHJlYW1idWZfdHlwZSYgX19zYiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9N X2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAo X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGludF90eXBlIF9fYzsKICAgICAgICAgIF9fc3Ry ZWFtYnVmX3R5cGUqIF9fdGhpc19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICB0cnkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRz X3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBl IF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fYyA9IF9fdGhpc19z Yi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lk ZWxpbTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAg ICAgICAgICBib29sIF9fdGVzdHB1dCA9IHRydWU7CgogICAgICAgICAgICAgIHdoaWxlICghX190 ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbQogICAgICAgICAgICAgICAgICAgICYmIChfX3Rlc3RwdXQg PSBfX3NiLnNwdXRjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSkKICAgICAgICAgICAg ICAgICAgICAgICAgICE9IF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fdGhpc19zYi0+c2J1bXBj KCk7CiAgICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAg ICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgaWYgKF9fdGVzdGRlbGltIHx8ICFfX3Rlc3RwdXQpCiAgICAgICAgICAg ICAgICBfX3RoaXNfc2ItPnNwdXRiYWNrYyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykp OwogICAgICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgX190aGlzX3NiLT5z cHV0YmFja2ModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgfQog ICAgICAgIH0KICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXRs aW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pCiAg ICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUp OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAg ICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAg KytfTV9nY291bnQ7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFp dHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5 cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rk ZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9f YyA9PSBfX2VvZjsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAmJiAhX190 ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAg ICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7 CiAgICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAg ICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgIC0tX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmICgh X190ZXN0ZGVsaW0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIC0tX01fZ2Nv dW50OwogICAgICAgICAgICAgICAgICBfX3NiLT5zcHV0YmFja2ModHJhaXRzX3R5cGU6OnRvX2No YXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmZhaWxiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKICAgICAg aWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBpZ25vcmUoc3RyZWFtc2l6ZSBf X24sIGludF90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiICYmIF9fbiA+IDApCiAg ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBp bnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAg ICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAg ICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAg ICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBib29s IF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0 ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgICAgICBfX24gPSBtaW4oX19uLCBudW1lcmlj X2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCkpOwogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291 bnQgPCBfX24gLSAxICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQogICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgX19j ID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBf X2VvZjsKICAgICAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKChfTV9nY291bnQgPT0gX19uIC0gMSAm JiAhX190ZXN0ZW9mKSB8fCBfX3Rlc3RkZWxpbSkKICAgICAgICAgICAgICAgICsrX01fZ2NvdW50 OwogICAgICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6CiAgICBwZWVrKHZvaWQpCiAgICB7CiAgICAgIGludF90eXBlIF9fYyA9IHRy YWl0c190eXBlOjplb2YoKTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsgX19jID0gdGhpcy0+cmRidWYoKS0+c2dldGMoKTsgfQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19jOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OgogICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIF9N X2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAo X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX24gPiAwKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNvbnN0 IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgICAgICBf X3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICAgICAg aW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgIGJvb2wgX190 ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3Vu dCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVvZikKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAg ICAgICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgICAgIF9f YyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19j ID09IF9fZW9mOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKF9f dGVzdGVvZikKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m Yml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBl Ojp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Owog ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgICAgaWYg KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwog ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6CiAgICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAg ICB7CiAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAg ICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAg aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpZiAoX19uID4gMCkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIHRyeQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBz dHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYoKS0+aW5fYXZhaWwoKTsKICAgICAgICAgICAg ICAgICAgaWYgKF9fbnVtICE9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fZW9mKSkKICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBfX251bSA9IG1pbihfX251bSwg X19uKTsKICAgICAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCktPnNn ZXRuKF9fcywgX19udW0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ZWxzZQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQp OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls KQogICAgICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAgdGhyb3c7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfTV9nY291 bnQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPjo6CiAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19l b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSog X19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiIHx8IF9fc2ItPnNw dXRiYWNrYyhfX2MpID09IF9fZW9mKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpm YWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgdW5nZXQodm9pZCkK ICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1 ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2Yo KTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsK ICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19lb2YgPT0gX19zYi0+c3VuZ2V0YygpKQogICAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBpbnQKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzeW5jKHZvaWQp CiAgICB7CiAgICAgIGludCBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgX01fZ2Nv dW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2Nl cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBf X3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAo IV9fc2IgfHwgX19yZXQgPT0gX19zYi0+cHVic3luYygpKQogICAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgICAgX19yZXQgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjoKICAgIHRlbGxnKHZvaWQpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5 cGUoLTEpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0 cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg ICAgewogICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlv c19iYXNlOjpjdXIsIGlvc19iYXNlOjppbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIHNlZWtnKHBvc190eXBlIF9fcG9zKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAg ICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7 CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19l cnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6aW4pOwoKCiAg ICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShmYWlsYml0KTsKCiAgICAgICAgICAgIH0KICAgICAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0 aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46OgogICAgc2Vla2cob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZGlyKQog ICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg ewoKCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVr b2ZmKF9fb2ZmLCBfX2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgICAgIGlmIChfX2Vy ciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoZmFpbGJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lu LCBfQ2hhclQmIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpz ZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg ICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2luLmdldChfX2MpOyB9CiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19pbi5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbi5zZXRzdGF0ZShp b3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19pbiwgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f aXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlw ZTsKICAgICAgc3RyZWFtc2l6ZSBfX2V4dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lz dHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgc3Ry ZWFtc2l6ZSBfX251bSA9IF9faW4ud2lkdGgoKTsKICAgICAgICAgICAgICBpZiAoX19udW0gPT0g MCkKICAgICAgICAgICAgICAgIF9fbnVtID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1h eCgpOwoKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1Zigp OwogICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19jdHlwZSA9IF9faW4uX01fZ2V0 X2ZjdHlwZV9pb3MoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMo KTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwog ICAgICAgICAgICAgIGJvb2wgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFj ZSwgX19jKTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAg ICAgICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19udW0gLSAxICYmICFfX3Rlc3Rlb2Yg JiYgIV9fdGVzdHNwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysg PSBfX2M7CiAgICAgICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgICAg IF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2Mg PT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5cGVf YmFzZTo6c3BhY2UsIF9fYyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGlmICgh X190ZXN0ZW9mKQogICAgICAgICAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7CiAgICAgICAg ICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0 KTsKCgoKICAgICAgICAgICAgICAqX19zID0gY2hhcl90eXBlKCk7CgogICAgICAgICAgICAgIF9f aW4ud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3Nf YmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs X1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19pbikKICAg IHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFt X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVm X3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1f dHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf X2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfX2lzdHJlYW1fdHlwZTo6Y2hhcl90eXBlIF9fY2hhcl90eXBlOwoKICAgICAgX19zdHJlYW1i dWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBf X2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBlX2lvcygpOwogICAgICBjb25zdCBfX2ludF90eXBl IF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgIF9faW50X3R5cGUgX19jOwogICAgICBib29s IF9fdGVzdGVvZjsKICAgICAgYm9vbCBfX3Rlc3RzcDsKCiAgICAgIGRvCiAgICAgICAgewogICAg ICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0g X19lb2Y7CiAgICAgICAgICBfX3Rlc3RzcCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNl LCBfX2MpOwogICAgICAgIH0KICAgICAgd2hpbGUgKCFfX3Rlc3Rlb2YgJiYgX190ZXN0c3ApOwoK ICAgICAgaWYgKCFfX3Rlc3Rlb2YgJiYgIV9fdGVzdHNwKQogICAgICAgIF9fc2ItPnNwdXRiYWNr YyhfX2MpOwogICAgICBlbHNlCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0 KTsKCiAgICAgIHJldHVybiBfX2luOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYgX19pbiwKICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVh bV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0 cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAg ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmlu Z190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBf X3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOwoKICAgICAgdHlw ZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBp ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIF9fc3RyLmVyYXNlKCk7CiAgICAgICAgICBz dHJlYW1zaXplIF9fdyA9IF9faW4ud2lkdGgoKTsKICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbjsK ICAgICAgICAgIF9fbiA9IF9fdyA+IDAgPyBzdGF0aWNfY2FzdDxfX3NpemVfdHlwZT4oX193KSA6 IF9fc3RyLm1heF9zaXplKCk7CgogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9f aW4ucmRidWYoKTsKICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19jdHlwZSA9IF9faW4u X01fZ2V0X2ZjdHlwZV9pb3MoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2J1 bXBjKCk7CiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7 CiAgICAgICAgICBib29sIF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2Us IF9fYyk7CiAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAgICAgICAg ICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX24gJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0c3ApCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUo X19jKTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgIF9fYyA9IF9f c2ItPnNidW1wYygpOwogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAg ICAgICAgICAgICBfX3Rlc3RzcCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2Mp OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoIV9fdGVzdGVvZikKICAgICAgICAgICAgX19z Yi0+c3B1dGJhY2tjKF9fYyk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9faW4uc2V0c3Rh dGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICBfX2luLndpZHRoKDApOwogICAgICAgIH0K CgogICAgICBpZiAoIV9fZXh0cmFjdGVkKQogICAgICAgIF9faW4uc2V0c3RhdGUgKGlvc19iYXNl OjpmYWlsYml0KTsKCiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9fZGVsaW0pCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVm X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlw ZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5n X3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKCiAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFj dGVkID0gMDsKICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9IGZhbHNlOwogICAgICB0eXBlbmFtZSBf X2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCB0cnVlKTsKICAgICAgaWYgKF9fY2Vy YikKICAgICAgICB7CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAgX19zaXplX3R5 cGUgX19uID0gX19zdHIubWF4X3NpemUoKTsKCiAgICAgICAgICBfX2ludF90eXBlIF9faWRlbGlt ID0gX1RyYWl0czo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICBfX3N0cmVhbWJ1Zl90 eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3Ni LT5zYnVtcGMoKTsKICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjpl b2YoKTsKICAgICAgICAgIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAg Ym9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAgd2hpbGUgKF9fZXh0cmFj dGVkIDw9IF9fbiAmJiAhX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIF9fc3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAg ICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7 CiAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgIF9f dGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAo X190ZXN0ZW9mKQogICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwog ICAgICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAg X19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAg fQoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4K ICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICBiYXNpY19zdHJp bmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19zdHIpCiAgICB7IHJldHVybiBnZXRsaW5lKF9f aW4sIF9fc3RyLCBfX2luLndpZGVuKCdcbicpKTsgfQp9CiMgMjkxICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX2lzdHJlYW0uaCIgMiAzCiMgNDIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfaW9zdHJlYW0uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICBleHRlcm4gaXN0cmVhbSBj aW47CiAgZXh0ZXJuIG9zdHJlYW0gY291dDsKICBleHRlcm4gb3N0cmVhbSBjZXJyOwogIGV4dGVy biBvc3RyZWFtIGNsb2c7CgogIGV4dGVybiB3aXN0cmVhbSB3Y2luOwogIGV4dGVybiB3b3N0cmVh bSB3Y291dDsKICBleHRlcm4gd29zdHJlYW0gd2NlcnI7CiAgZXh0ZXJuIHdvc3RyZWFtIHdjbG9n OwoKCgogIHN0YXRpYyBpb3NfYmFzZTo6SW5pdCBfX2lvaW5pdDsKfQojIDMyICIvdXNyL2luY2x1 ZGUvZysrLXYzL2lvc3RyZWFtIiAyIDMKIyAyICJhY2N1bS5jYyIgMgojIDEgIi91c3IvaW5jbHVk ZS9nKystdjMvbnVtZXJpYyIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9nKystdjMvbnVtZXJpYyIg MwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbnVtZXJpYy5oIiAxIDMKIyA2MCAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9udW1lcmljLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDYxICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX251bWVyaWMuaCIgMiAzCiMgMSAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDYyICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX251bWVyaWMuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9pdGVyYXRvci5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9u dW1lcmljLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24u aCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwpu YW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpzdHJ1 Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBhcmd1bWVudF90eXBlOwogIHR5cGVk ZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3Mg X0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBiaW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYg X0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVu dF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFz cyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4g ewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3Qg eyByZXR1cm4gX194ICsgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbWlu dXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9y KCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLSBf X3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtdWx0aXBsaWVzIDogcHVibGlj IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9U cCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICogX195OyB9Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp b248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3Qg X1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAvIF9feTsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPiBpbmxpbmUgX1RwIGlkZW50aXR5X2VsZW1lbnQocGx1czxfVHA+KSB7CiAgcmV0dXJu IF9UcCgwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxpbmUgX1RwIGlkZW50aXR5X2VsZW1l bnQobXVsdGlwbGllczxfVHA+KSB7CiAgcmV0dXJuIF9UcCgxKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9UcD4Kc3RydWN0IG1vZHVsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1Rw Pgp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25z dCB7IHJldHVybiBfX3ggJSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBu ZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigp KGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAtX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp IGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0 cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4K ewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0 IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBn cmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9w ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf X3ggPiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzIDogcHVibGlj IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPCBfX3k7IH0KfTsK CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyX2VxdWFsIDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPj0gX195OyB9Cn07Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp b248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNs YXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg X195KSBjb25zdCB7IHJldHVybiBfX3ggJiYgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpzdHJ1Y3QgbG9naWNhbF9vciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29s Pgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29u c3QgeyByZXR1cm4gX194IHx8IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0 IGxvZ2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxib29sPgp7CiAgYm9vbCBv cGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAhX194OyB9Cn07Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgdW5h cnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4gewpw cm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgdW5hcnlf bmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9w ZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSYgX194KSBj b25zdCB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1ByZWRpY2F0ZT4KaW5saW5lIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPgpub3QxKGNvbnN0IF9Q cmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19w cmVkKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIGJpbmFyeV9uZWdhdGUK ICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJn dW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0 ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+ IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IGJp bmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJv b2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90 eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNl Y29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9f eCwgX195KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIGJpbmFy eV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90Mihjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICBy ZXR1cm4gYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248 dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVk OgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRf dHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAg ICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUm IF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlv bjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNl Y29uZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194 KTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCko dHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qgewog ICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJh dGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29u c3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1l IF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmlu ZGVyMXN0PF9PcGVyYXRpb24+KF9fZm4sIF9BcmcxX3R5cGUoX194KSk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIybmQKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv bjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAg ICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3Rl ZDoKICBfT3BlcmF0aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVu dF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9feCwK ICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5 cGUmIF9feSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJh dGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246 OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFs dWUpOwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3Io KSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsK ICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9Cgp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVy YXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjJuZDxfT3BlcmF0aW9uPgpiaW5kMm5kKGNv bnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFt ZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90eXBlOwogIHJldHVybiBi aW5kZXIybmQ8X09wZXJhdGlvbj4oX19mbiwgX0FyZzJfdHlwZShfX3gpKTsKfQoKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yPgpjbGFzcyB1bmFyeV9jb21w b3NlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3Vt ZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjE6 OnJlc3VsdF90eXBlPgp7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uMSBfTV9mbjE7CiAgX09wZXJh dGlvbjIgX01fZm4yOwpwdWJsaWM6CiAgdW5hcnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9uMSYg X194LCBjb25zdCBfT3BlcmF0aW9uMiYgX195KQogICAgOiBfTV9mbjEoX194KSwgX01fZm4yKF9f eSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNv bnN0IHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAg IHJldHVybiBfTV9mbjEoX01fZm4yKF9feCkpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3Bl cmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjI+CmlubGluZSB1bmFyeV9jb21wb3NlPF9PcGVyYXRp b24xLF9PcGVyYXRpb24yPgpjb21wb3NlMShjb25zdCBfT3BlcmF0aW9uMSYgX19mbjEsIGNvbnN0 IF9PcGVyYXRpb24yJiBfX2ZuMikKewogIHJldHVybiB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24x LF9PcGVyYXRpb24yPihfX2ZuMSwgX19mbjIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlv bjEsIGNsYXNzIF9PcGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0aW9uMz4KY2xhc3MgYmluYXJ5X2Nv bXBvc2UKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJn dW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9u MTo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24xIF9NX2ZuMTsKICBfT3Bl cmF0aW9uMiBfTV9mbjI7CiAgX09wZXJhdGlvbjMgX01fZm4zOwpwdWJsaWM6CiAgYmluYXJ5X2Nv bXBvc2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJhdGlvbjImIF9feSwKICAg ICAgICAgICAgICAgICBjb25zdCBfT3BlcmF0aW9uMyYgX196KQogICAgOiBfTV9mbjEoX194KSwg X01fZm4yKF9feSksIF9NX2ZuMyhfX3opIHsgfQogIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1 bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50 X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX2ZuMShfTV9mbjIoX194KSwgX01fZm4z KF9feCkpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJh dGlvbjIsIGNsYXNzIF9PcGVyYXRpb24zPgppbmxpbmUgYmluYXJ5X2NvbXBvc2U8X09wZXJhdGlv bjEsIF9PcGVyYXRpb24yLCBfT3BlcmF0aW9uMz4KY29tcG9zZTIoY29uc3QgX09wZXJhdGlvbjEm IF9fZm4xLCBjb25zdCBfT3BlcmF0aW9uMiYgX19mbjIsCiAgICAgICAgIGNvbnN0IF9PcGVyYXRp b24zJiBfX2ZuMykKewogIHJldHVybiBiaW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0 aW9uMixfT3BlcmF0aW9uMz4KICAgIChfX2ZuMSwgX19mbjIsIF9fZm4zKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rp b24gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAg X1Jlc3VsdCAoKl9NX3B0cikoX0FyZyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0 aW9uKCkge30KICBleHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpf X3gpKF9BcmcpKSA6IF9NX3B0cihfX3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcgX194 KSBjb25zdCB7IHJldHVybiBfTV9wdHIoX194KTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Bcmcs IGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9S ZXN1bHQ+IHB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRlcl90 b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFy eV9mdW5jdGlvbiA6CiAgcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0 PiB7CnByb3RlY3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1Ymxp YzoKICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50 ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCiAgICAg IDogX01fcHRyKF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9Bcmcy IF9feSkgY29uc3QgewogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCnRl bXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBw b2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PgpwdHJfZnVuKF9S ZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlf ZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf VHA+CnN0cnVjdCBfSWRlbnRpdHkgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewog IF9UcCYgb3BlcmF0b3IoKShfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9CiAgY29uc3Qg X1RwJiBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsK CnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBpZGVudGl0eSA6IHB1YmxpYyBfSWRlbnRpdHk8 X1RwPiB7fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0IDogcHVi bGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZT4gewog IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0 IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpmaXJz dF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf X3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDJu ZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90 eXBlPgp7CiAgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBf X3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KICBjb25zdCB0eXBlbmFtZSBf UGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3Qgewog ICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPiBzdHJ1 Y3Qgc2VsZWN0MXN0IDogcHVibGljIF9TZWxlY3Qxc3Q8X1BhaXI+IHt9Owp0ZW1wbGF0ZSA8Y2xh c3MgX1BhaXI+IHN0cnVjdCBzZWxlY3QybmQgOiBwdWJsaWMgX1NlbGVjdDJuZDxfUGFpcj4ge307 CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0MXN0 IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9BcmcxPiB7CiAgX0FyZzEg b3BlcmF0b3IoKShjb25zdCBfQXJnMSYgX194LCBjb25zdCBfQXJnMiYpIGNvbnN0IHsgcmV0dXJu IF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Q cm9qZWN0Mm5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9BcmcyPiB7 CiAgX0FyZzIgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYsIGNvbnN0IF9BcmcyJiBfX3kpIGNvbnN0 IHsgcmV0dXJuIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4K c3RydWN0IHByb2plY3Qxc3QgOiBwdWJsaWMgX1Byb2plY3Qxc3Q8X0FyZzEsIF9BcmcyPiB7fTsK CnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBwcm9qZWN0Mm5kIDog cHVibGljIF9Qcm9qZWN0Mm5kPF9BcmcxLCBfQXJnMj4ge307CgoKCgoKdGVtcGxhdGUgPGNsYXNz IF9SZXN1bHQ+CnN0cnVjdCBfQ29uc3RhbnRfdm9pZF9mdW4gewogIHR5cGVkZWYgX1Jlc3VsdCBy ZXN1bHRfdHlwZTsKICByZXN1bHRfdHlwZSBfTV92YWw7CgogIF9Db25zdGFudF92b2lkX2Z1bihj b25zdCByZXN1bHRfdHlwZSYgX192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgcmVzdWx0X3R5 cGUmIG9wZXJhdG9yKCkoKSBjb25zdCB7IHJldHVybiBfTV92YWw7IH0KfTsKCnRlbXBsYXRlIDxj bGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJndW1lbnQ+CnN0cnVjdCBfQ29uc3RhbnRfdW5hcnlfZnVu IHsKICB0eXBlZGVmIF9Bcmd1bWVudCBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCBy ZXN1bHRfdHlwZTsKICByZXN1bHRfdHlwZSBfTV92YWw7CgogIF9Db25zdGFudF91bmFyeV9mdW4o Y29uc3QgcmVzdWx0X3R5cGUmIF9fdikgOiBfTV92YWwoX192KSB7fQogIGNvbnN0IHJlc3VsdF90 eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9Bcmd1bWVudCYpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbDsg fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsIGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4K c3RydWN0IF9Db25zdGFudF9iaW5hcnlfZnVuIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3Vt ZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVm IF9SZXN1bHQgcmVzdWx0X3R5cGU7CiAgX1Jlc3VsdCBfTV92YWw7CgogIF9Db25zdGFudF9iaW5h cnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikgOiBfTV92YWwoX192KSB7fQogIGNvbnN0IHJlc3Vs dF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImKSBjb25zdCB7CiAg ICByZXR1cm4gX01fdmFsOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgpzdHJ1Y3Qg Y29uc3RhbnRfdm9pZF9mdW4gOiBwdWJsaWMgX0NvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+IHsK ICBjb25zdGFudF92b2lkX2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpIDogX0NvbnN0YW50X3ZvaWRf ZnVuPF9SZXN1bHQ+KF9fdikge30KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwKICAgICAg ICAgIGNsYXNzIF9Bcmd1bWVudCA9IF9SZXN1bHQ+CnN0cnVjdCBjb25zdGFudF91bmFyeV9mdW4g OiBwdWJsaWMgX0NvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LCBfQXJndW1lbnQ+CnsKICBjb25z dGFudF91bmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KQogICAgOiBfQ29uc3RhbnRfdW5hcnlf ZnVuPF9SZXN1bHQsIF9Bcmd1bWVudD4oX192KSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmVz dWx0LAogICAgICAgICAgY2xhc3MgX0FyZzEgPSBfUmVzdWx0LAogICAgICAgICAgY2xhc3MgX0Fy ZzIgPSBfQXJnMT4Kc3RydWN0IGNvbnN0YW50X2JpbmFyeV9mdW4KICA6IHB1YmxpYyBfQ29uc3Rh bnRfYmluYXJ5X2Z1bjxfUmVzdWx0LCBfQXJnMSwgX0FyZzI+CnsKICBjb25zdGFudF9iaW5hcnlf ZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikKICAgIDogX0NvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3Vs dCwgX0FyZzEsIF9BcmcyPihfX3YpIHt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5s aW5lIGNvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+IGNvbnN0YW50MChjb25zdCBfUmVzdWx0JiBf X3ZhbCkKewogIHJldHVybiBjb25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PihfX3ZhbCk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQs X1Jlc3VsdD4gY29uc3RhbnQxKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0 YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQ+KF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVz dWx0Pgpjb25zdGFudDIoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRf YmluYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4oX192YWwpOwp9CgoKCmNsYXNzIHN1 YnRyYWN0aXZlX3JuZyA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx1bnNpZ25lZCBpbnQsIHVuc2ln bmVkIGludD4gewpwcml2YXRlOgogIHVuc2lnbmVkIGludCBfTV90YWJsZVs1NV07CiAgc2l6ZV90 IF9NX2luZGV4MTsKICBzaXplX3QgX01faW5kZXgyOwpwdWJsaWM6CiAgdW5zaWduZWQgaW50IG9w ZXJhdG9yKCkodW5zaWduZWQgaW50IF9fbGltaXQpIHsKICAgIF9NX2luZGV4MSA9IChfTV9pbmRl eDEgKyAxKSAlIDU1OwogICAgX01faW5kZXgyID0gKF9NX2luZGV4MiArIDEpICUgNTU7CiAgICBf TV90YWJsZVtfTV9pbmRleDFdID0gX01fdGFibGVbX01faW5kZXgxXSAtIF9NX3RhYmxlW19NX2lu ZGV4Ml07CiAgICByZXR1cm4gX01fdGFibGVbX01faW5kZXgxXSAlIF9fbGltaXQ7CiAgfQoKICB2 b2lkIF9NX2luaXRpYWxpemUodW5zaWduZWQgaW50IF9fc2VlZCkKICB7CiAgICB1bnNpZ25lZCBp bnQgX19rID0gMTsKICAgIF9NX3RhYmxlWzU0XSA9IF9fc2VlZDsKICAgIHNpemVfdCBfX2k7CiAg ICBmb3IgKF9faSA9IDA7IF9faSA8IDU0OyBfX2krKykgewogICAgICAgIHNpemVfdCBfX2lpID0g KDIxICogKF9faSArIDEpICUgNTUpIC0gMTsKICAgICAgICBfTV90YWJsZVtfX2lpXSA9IF9fazsK ICAgICAgICBfX2sgPSBfX3NlZWQgLSBfX2s7CiAgICAgICAgX19zZWVkID0gX01fdGFibGVbX19p aV07CiAgICB9CiAgICBmb3IgKGludCBfX2xvb3AgPSAwOyBfX2xvb3AgPCA0OyBfX2xvb3ArKykg ewogICAgICAgIGZvciAoX19pID0gMDsgX19pIDwgNTU7IF9faSsrKQogICAgICAgICAgICBfTV90 YWJsZVtfX2ldID0gX01fdGFibGVbX19pXSAtIF9NX3RhYmxlWygxICsgX19pICsgMzApICUgNTVd OwogICAgfQogICAgX01faW5kZXgxID0gMDsKICAgIF9NX2luZGV4MiA9IDMxOwogIH0KCiAgc3Vi dHJhY3RpdmVfcm5nKHVuc2lnbmVkIGludCBfX3NlZWQpIHsgX01faW5pdGlhbGl6ZShfX3NlZWQp OyB9CiAgc3VidHJhY3RpdmVfcm5nKCkgeyBfTV9pbml0aWFsaXplKDE2MTgwMzM5OHUpOyB9Cn07 CiMgNTYyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxh dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5 X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQg KF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9f cCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6 OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29u c3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX1JldD4gewpw dWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29u c3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29u c3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9m KSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1l bV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgog IGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYp IHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9m KSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFz cyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5h cnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5f cmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBv cGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9 CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFz cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMg YmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1f ZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9w ZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZiko X194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUg PGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFf dCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsKcHVibGlj OgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29u c3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0Fy ZyBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgog IF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs IGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmlu YXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4x X3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9w ZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShf X3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9y ZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAg ZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29u c3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0Fy ZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0 IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNz IG1lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4g ewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01f ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01f ZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9m dW5jdGlvbjxjb25zdCBfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9m dW5fdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9w ZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0 ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4K Y2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9U cCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9f cGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3Qg eyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCnRl bXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6 IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29u c3RfbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikg e30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZiko KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4g OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBs aWNpdCBtZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30K ICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9m KShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9U cCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+ IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZiko X0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAq IF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2 b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1Ymxp YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVt X2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZv aWQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194 KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1Rw LCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1Ymxp YzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJn KSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19y LCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAo X1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg Y2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6 Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRl IDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+ IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9m dW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4K aW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9f ZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0 LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNv bnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0 LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+ IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9S ZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNs YXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4o X1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90 PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs IGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVu X3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9S ZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNs YXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1f ZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21l bV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0 LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+ IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxf UmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBj bGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVu MShfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4x X3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U cCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9m dW4xX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90 PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs IGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgpt ZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25z dF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp9CiMgNjQgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfbnVtZXJpYy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX251bWVyaWMuaCIgMSAzCiMgNjQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfbnVtZXJpYy5oIiAzCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yLCBjbGFzcyBfVHA+Cl9UcCBhY2N1bXVsYXRlKF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX1RwIF9faW5pdCkKewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIF9faW5pdCA9IF9faW5p dCArICpfX2ZpcnN0OwogIHJldHVybiBfX2luaXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfQmluYXJ5T3BlcmF0aW9uPgpfVHAgYWNjdW11bGF0 ZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9UcCBfX2lu aXQsCiAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIF9faW5p dCA9IF9fYmluYXJ5X29wKF9faW5pdCwgKl9fZmlyc3QpOwogIHJldHVybiBfX2luaXQ7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcjEsIGNsYXNzIF9JbnB1dEl0ZXJhdG9yMiwgY2xh c3MgX1RwPgpfVHAgaW5uZXJfcHJvZHVjdChfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEsIF9JbnB1 dEl0ZXJhdG9yMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yMiBfX2Zp cnN0MiwgX1RwIF9faW5pdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGZvciAo IDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIF9faW5p dCA9IF9faW5pdCArICgqX19maXJzdDEgKiAqX19maXJzdDIpOwogIHJldHVybiBfX2luaXQ7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcjEsIGNsYXNzIF9JbnB1dEl0ZXJhdG9yMiwg Y2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0JpbmFyeU9wZXJhdGlvbjEsIGNsYXNzIF9CaW5h cnlPcGVyYXRpb24yPgpfVHAgaW5uZXJfcHJvZHVjdChfSW5wdXRJdGVyYXRvcjEgX19maXJzdDEs IF9JbnB1dEl0ZXJhdG9yMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y MiBfX2ZpcnN0MiwgX1RwIF9faW5pdCwKICAgICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0aW9u MSBfX2JpbmFyeV9vcDEsCiAgICAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbjIgX19iaW5h cnlfb3AyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0 MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgX19pbml0ID0gX19iaW5h cnlfb3AxKF9faW5pdCwgX19iaW5hcnlfb3AyKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSk7CiAgcmV0 dXJuIF9faW5pdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfT3V0 cHV0SXRlcmF0b3IsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXJhdG9yCl9fcGFydGlhbF9zdW0oX0lu cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg IF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX1RwKikKewogIF9UcCBfX3ZhbHVlID0gKl9fZmly c3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIF9fdmFsdWUgPSBfX3ZhbHVl ICsgKl9fZmlyc3Q7CiAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgfQogIHJldHVybiArK19f cmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9PdXRwdXRJ dGVyYXRvcj4KX091dHB1dEl0ZXJhdG9yCnBhcnRpYWxfc3VtKF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgX091dHB1dEl0ZXJhdG9yIF9f cmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp IHJldHVybiBfX3Jlc3VsdDsKICAqX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4gX19wYXJ0 aWFsX3N1bShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9PdXRwdXRJdGVyYXRv ciwgY2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0JpbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0 ZXJhdG9yCl9fcGFydGlhbF9zdW0oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0 b3IgX19sYXN0LAogICAgICAgICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX1RwKiwg X0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKewogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7 CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIF9fdmFsdWUgPSBfX2JpbmFyeV9v cChfX3ZhbHVlLCAqX19maXJzdCk7CiAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgfQogIHJl dHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNz IF9PdXRwdXRJdGVyYXRvciwgY2xhc3MgX0JpbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0ZXJhdG9y CnBhcnRpYWxfc3VtKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz dCwKICAgICAgICAgICAgX091dHB1dEl0ZXJhdG9yIF9fcmVzdWx0LCBfQmluYXJ5T3BlcmF0aW9u IF9fYmluYXJ5X29wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBf X2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICAqX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4g X19wYXJ0aWFsX3N1bShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19m aXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgX19iaW5hcnlfb3ApOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9PdXRwdXRJdGVyYXRvciwgY2xhc3MgX1RwPgpf T3V0cHV0SXRlcmF0b3IKX19hZGphY2VudF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ dGVyYXRvciBfX3Jlc3VsdCwgX1RwKikKewogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgd2hp bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIF9UcCBfX3RtcCA9ICpfX2ZpcnN0OwogICAg KisrX19yZXN1bHQgPSBfX3RtcCAtIF9fdmFsdWU7CiAgICBfX3ZhbHVlID0gX190bXA7CiAgfQog IHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNs YXNzIF9PdXRwdXRJdGVyYXRvcj4KX091dHB1dEl0ZXJhdG9yCmFkamFjZW50X2RpZmZlcmVuY2Uo X0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRv ciBfX2xhc3QsIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgKl9fcmVzdWx0 ID0gKl9fZmlyc3Q7CiAgcmV0dXJuIF9fYWRqYWNlbnRfZGlmZmVyZW5jZShfX2ZpcnN0LCBfX2xh c3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBl KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfT3V0 cHV0SXRlcmF0b3IsIGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlPcGVyYXRpb24+ Cl9PdXRwdXRJdGVyYXRvcgpfX2FkamFjZW50X2RpZmZlcmVuY2UoX0lucHV0SXRlcmF0b3IgX19m aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX091dHB1 dEl0ZXJhdG9yIF9fcmVzdWx0LCBfVHAqLAogICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeU9w ZXJhdGlvbiBfX2JpbmFyeV9vcCkgewogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgd2hpbGUg KCsrX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIF9UcCBfX3RtcCA9ICpfX2ZpcnN0OwogICAgKisr X19yZXN1bHQgPSBfX2JpbmFyeV9vcChfX3RtcCwgX192YWx1ZSk7CiAgICBfX3ZhbHVlID0gX190 bXA7CiAgfQogIHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl cmF0b3IsIGNsYXNzIF9PdXRwdXRJdGVyYXRvciwgY2xhc3MgX0JpbmFyeU9wZXJhdGlvbj4KX091 dHB1dEl0ZXJhdG9yCmFkamFjZW50X2RpZmZlcmVuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyYXRv ciBfX3Jlc3VsdCwgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgKl9f cmVzdWx0ID0gKl9fZmlyc3Q7CiAgcmV0dXJuIF9fYWRqYWNlbnRfZGlmZmVyZW5jZShfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1 ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19iaW5hcnlf b3ApOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0ludGVnZXIsIGNsYXNzIF9N b25vaWRPcGVyYXRpb24+Cl9UcCBfX3Bvd2VyKF9UcCBfX3gsIF9JbnRlZ2VyIF9fbiwgX01vbm9p ZE9wZXJhdGlvbiBfX21vbm9pZF9vcCkKewogIGlmIChfX24gPT0gMCkKICAgIHJldHVybiBpZGVu dGl0eV9lbGVtZW50KF9fbW9ub2lkX29wKTsKICBlbHNlIHsKICAgIHdoaWxlICgoX19uICYgMSkg PT0gMCkgewogICAgICBfX24gPj49IDE7CiAgICAgIF9feCA9IF9fbW9ub2lkX29wKF9feCwgX194 KTsKICAgIH0KCiAgICBfVHAgX19yZXN1bHQgPSBfX3g7CiAgICBfX24gPj49IDE7CiAgICB3aGls ZSAoX19uICE9IDApIHsKICAgICAgX194ID0gX19tb25vaWRfb3AoX194LCBfX3gpOwogICAgICBp ZiAoKF9fbiAmIDEpICE9IDApCiAgICAgICAgX19yZXN1bHQgPSBfX21vbm9pZF9vcChfX3Jlc3Vs dCwgX194KTsKICAgICAgX19uID4+PSAxOwogICAgfQogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0K fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0ludGVnZXI+CmlubGluZSBfVHAgX19wb3dl cihfVHAgX194LCBfSW50ZWdlciBfX24pCnsKICByZXR1cm4gX19wb3dlcihfX3gsIF9fbiwgbXVs dGlwbGllczxfVHA+KCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfSW50ZWdl ciwgY2xhc3MgX01vbm9pZE9wZXJhdGlvbj4KaW5saW5lIF9UcCBwb3dlcihfVHAgX194LCBfSW50 ZWdlciBfX24sIF9Nb25vaWRPcGVyYXRpb24gX19tb25vaWRfb3ApCnsKICByZXR1cm4gX19wb3dl cihfX3gsIF9fbiwgX19tb25vaWRfb3ApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf SW50ZWdlcj4KaW5saW5lIF9UcCBwb3dlcihfVHAgX194LCBfSW50ZWdlciBfX24pCnsKICByZXR1 cm4gX19wb3dlcihfX3gsIF9fbik7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg Y2xhc3MgX1RwPgp2b2lkCmlvdGEoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsIF9UcCBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGls ZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAqX19maXJzdCsrID0gX192YWx1ZSsrOwp9Cgp9CiMg NjUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbnVtZXJpYy5oIiAyIDMKIyAzMiAiL3Vz ci9pbmNsdWRlL2crKy12My9udW1lcmljIiAyIDMKIyAzICJhY2N1bS5jYyIgMgojIDEgIi91c3Iv aW5jbHVkZS9nKystdjMvZnVuY3Rpb25hbCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9nKystdjMv ZnVuY3Rpb25hbCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnVuY3Rpb25h bC5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29u ZmlnLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Z1bmN0aW9uYWwu aCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwoj IDUwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Z1bmN0aW9uYWwuaCIgMiAzCiMgMSAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA1MSAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDIgMwojIDMyICIvdXNyL2luY2x1 ZGUvZysrLXYzL2Z1bmN0aW9uYWwiIDIgMwojIDQgImFjY3VtLmNjIiAyCgppbnQgbWFpbigpCnsK ICAgIGludCBudW1zW10gPSB7IDEsIDIsIDMsIDQsIDUgfTsKCiAgICBzdGQ6OmNvdXQgPDwgc3Rk OjphY2N1bXVsYXRlKG51bXMsIG51bXMgKyBzaXplb2YobnVtcykvc2l6ZW9mKCpudW1zKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc3RkOjpwbHVzKSA8PCBzdGQ6OmVuZGw7 Cn0K