From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andreas.Krakowczyk@fujitsu-siemens.com To: gcc-gnats@gcc.gnu.org Cc: Erwin.Unruh@fujitsu-siemens.com, Joachim.Canisius@fujitsu-siemens.com Subject: c++/3361: g++: Internal error: Segmentation Fault (program cc1plus) Date: Fri, 22 Jun 2001 05:46:00 -0000 Message-id: <20010622124536.10368.qmail@sourceware.cygnus.com> X-SW-Source: 2001-06/msg00968.html List-Id: >Number: 3361 >Category: c++ >Synopsis: g++: Internal error: Segmentation Fault (program cc1plus) >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Fri Jun 22 05:46:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Andreas Krakowczyk >Release: gcc-3.0 >Organization: >Environment: sparc-sun-solaris2.8 >Description: Compiler dies with core dump (cc1plus) >How-To-Repeat: g++ -c bug7.c >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/x-unknown-content-type-c_auto_file; name="bug7.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="bug7.c" IyA3ICJBMDQzOTU4OS5DIgojaWRlbnQgIkAoIylBMDQzOTU4OS5DCTEuMS4xLjIgb2YgMDEvMDQv MDIiCgojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvZysrL2JhY2t3YXJkL2lvc3RyZWFtLmgiIDEgMwojIDMxICIvaG9t ZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs dWRlL2crKy9iYWNrd2FyZC9pb3N0cmVhbS5oIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYmFja3dhcmQv YmFja3dhcmRfd2FybmluZy5oIiAxIDMKIyAzMiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYmFja3dhcmQvaW9zdHJl YW0uaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zdHJlYW0uaCIgMSAzCiMgMzgg Ii9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w L2luY2x1ZGUvZysrL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDMKCiMgMSAiL2hvbWU1L2tyYWtvdy9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzQgIi9ob21lNS9rcmFr b3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr L3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysrY29uZmlnLmgiIDMKIyAxICIvaG9tZTUva3Jh a293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2cr Ky9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL29zX2RlZmluZXMuaCIgMSAzCiMgMzUgIi9ob21l NS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1 ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysrY29uZmlnLmgiIDIgMwojIDQwICIv aG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9p bmNsdWRlL2crKy9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRz L3N0ZF9vc3RyZWFtLmgiIDEgMwojIDM4ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9vc3RyZWFtLmgi IDMKCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zLmgiIDEgMwojIDM4ICIvaG9tZTUva3Jh a293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2cr Ky9iaXRzL3N0ZF9pb3MuaCIgMwoKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9pb3Nmd2QuaCIg MSAzCiMgMzggIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lvc2Z3ZC5oIiAzCgojIDEgIi9ob21lNS9r cmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUv ZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvaG9t ZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs dWRlL2crKy9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdHJp bmdmd2QuaCIgMSAzCiMgMzggIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RyaW5nZndkLmgiIDMKCiMgMSAi L2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv aW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jKytjb25maWcuaCIgMSAzCiMg NDAgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv My4wL2luY2x1ZGUvZysrL2JpdHMvc3RyaW5nZndkLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAg dGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNoYXJfdHJhaXRzOwoKICB0ZW1wbGF0 ZTw+IGNsYXNzIGNoYXJfdHJhaXRzPGNoYXI+OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxs b2M+CiAgICBjbGFzcyBhbGxvY2F0b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUg X0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nOwoKICB0 eXBlZGVmIGJhc2ljX3N0cmluZzxjaGFyPiBzdHJpbmc7CgoKCn0KIyA0MSAiL2hvbWU1L2tyYWtv dy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysv Yml0cy9zdGRfaW9zZndkLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnBvcy5oIiAxIDMK IyAzOCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu OC8zLjAvaW5jbHVkZS9nKysvYml0cy9mcG9zLmgiIDMKCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMt c3VuLXNvbGFyaXMyLjgvYml0cy9jKytpby5oIiAxIDMKIyAzNSAiL2hvbWU1L2tyYWtvdy9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMt c3VuLXNvbGFyaXMyLjgvYml0cy9jKytpby5oIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvY3N0ZGlvIiAx IDMKIyAzMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8zLjAvaW5jbHVkZS9nKysvY3N0ZGlvIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRf Y3N0ZGlvLmgiIDEgMwojIDM3ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkaW8uaCIgMwojIDEg Ii9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w L2luY2x1ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysrY29uZmlnLmgiIDEgMwoj IDM4ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkaW8uaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtv dy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysv Yml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGRl Zi5oIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOC8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAxNDcgIi9ob21lNS9rcmFrb3cv bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RkZGVm LmgiIDMgNAp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMgMTk5ICIvaG9tZTUva3Jha293L2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAz IDQKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDM5ICIvaG9tZTUva3Jha293L2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0 ZF9jc3RkZGVmLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAg dXNpbmcgOjpzaXplX3Q7Cn0KIyAzOSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGlvLmgiIDIg MwojIDQxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkaW8uaCIgMwojIDEgIi9ob21lNS9rcmFr b3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3Rk aW8uaCIgMSAzIDQKIyAxNCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQKIyAxICIvaG9tZTUva3Jha293 L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0ZGFy Zy5oIiAxIDMgNAojIDQzICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAzIDQKdHlwZWRlZiBfX2J1aWx0aW5f dmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyAxNSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRpby5oIiAyIDMgNAojIDM0 ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu MC9pbmNsdWRlL3N0ZGlvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc3RkaW8uaAkxLjc4CTk5 LzEyLzA4IFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMSAzIDQKIyAz MiAiL3Vzci9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylz dGRpb19pc28uaAkxLjIJOTkvMTAvMjUgU01JIgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0 dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMTMgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5o IiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWZlYXR1cmVfdGVzdHMuaAkxLjE4CTk5LzA3LzI2IFNN SSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNAojIDkgIi91c3IvaW5j bHVkZS9zeXMvaXNhX2RlZnMuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylpc2FfZGVmcy5oCTEu MjAJOTkvMDUvMDQgU01JIgojIDE1OCAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAzIDQK ZXh0ZXJuICJDIiB7CiMgMzgwICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNAp9CiMg MTYgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAyIDMgNAoKCmV4dGVybiAiQyIg ewojIDE4MSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDMgNAp9CiMgMzYgIi91 c3IvaW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy92 YV9saXN0LmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNsdWRlL3N5cy92YV9saXN0LmgiIDMgNAojcHJh Z21hIGlkZW50ICJAKCMpdmFfbGlzdC5oCTEuMTIJOTkvMDUvMDQgU01JIgojIDIyICIvdXNyL2lu Y2x1ZGUvc3lzL3ZhX2xpc3QuaCIgMyA0CmV4dGVybiAiQyIgewoKCgp0eXBlZGVmIHZvaWQgKl9f dmFfbGlzdDsKCgoKCgp9CiMgMzcgIi91c3IvaW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDIgMyA0 CiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvX3RhZy5oIiAxIDMgNAojIDkgIi91c3IvaW5jbHVkZS9z dGRpb190YWcuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzdGRpb190YWcuaAkxLjMJOTgvMDQv MjAgU01JIgoKCmV4dGVybiAiQyIgewojIDIxICIvdXNyL2luY2x1ZGUvc3RkaW9fdGFnLmgiIDMg NAp0eXBlZGVmIHN0cnVjdCBGSUxFIF9fRklMRTsKCgoKfQojIDM4ICIvdXNyL2luY2x1ZGUvaXNv L3N0ZGlvX2lzby5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zdGRpb19pbXBsLmgiIDEgMyA0 CiMgOSAiL3Vzci9pbmNsdWRlL3N0ZGlvX2ltcGwuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylz dGRpb19pbXBsLmgJMS44CTk5LzA2LzEwIFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2Ff ZGVmcy5oIiAxIDMgNAojIDEyICIvdXNyL2luY2x1ZGUvc3RkaW9faW1wbC5oIiAyIDMgNAoKCmV4 dGVybiAiQyIgewoKCgoKCgoKdHlwZWRlZiBpbnQgc3NpemVfdDsKIyAzOCAiL3Vzci9pbmNsdWRl L3N0ZGlvX2ltcGwuaCIgMyA0CnN0cnVjdCBGSUxFCnsKCgoKCiAgICAgICAgc3NpemVfdCBfY250 OwogICAgICAgIHVuc2lnbmVkIGNoYXIgKl9wdHI7CgogICAgICAgIHVuc2lnbmVkIGNoYXIgKl9i YXNlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgX2ZsYWc7CiAgICAgICAgdW5zaWduZWQgY2hhciBf ZmlsZTsKICAgICAgICB1bnNpZ25lZCBfX29yaWVudGF0aW9uOjI7CiAgICAgICAgdW5zaWduZWQg X19pb25vbG9jazoxOwogICAgICAgIHVuc2lnbmVkIF9fZmlsbGVyOjU7Cn07CgoKCgp9CiMgMzkg Ii91c3IvaW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDIgMyA0CiMgNDkgIi91c3IvaW5jbHVkZS9p c28vc3RkaW9faXNvLmgiIDMgNApleHRlcm4gIkMiIHsKIyA1OSAiL3Vzci9pbmNsdWRlL2lzby9z dGRpb19pc28uaCIgMyA0CnR5cGVkZWYgbG9uZyBsb25nIF9fbG9uZ2xvbmdfdDsKIyA3NSAiL3Vz ci9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMyA0CnR5cGVkZWYgX19GSUxFIEZJTEU7CiMgODgg Ii91c3IvaW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDMgNAp0eXBlZGVmIGxvbmcgZnBvc190Owoj IDE0NyAiL3Vzci9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMyA0CmV4dGVybiBfX0ZJTEUgX19p b2JbMjBdOwojIDE2NCAiL3Vzci9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMyA0CmV4dGVybiBp bnQgcmVtb3ZlKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgcmVuYW1lKGNvbnN0IGNoYXIgKiwg Y29uc3QgY2hhciAqKTsKZXh0ZXJuIEZJTEUgKnRtcGZpbGUodm9pZCk7CmV4dGVybiBjaGFyICp0 bXBuYW0oY2hhciAqKTsKZXh0ZXJuIGludCBmY2xvc2UoRklMRSAqKTsKZXh0ZXJuIGludCBmZmx1 c2goRklMRSAqKTsKZXh0ZXJuIEZJTEUgKmZvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAq KTsKZXh0ZXJuIEZJTEUgKmZyZW9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUg Kik7CmV4dGVybiB2b2lkIHNldGJ1ZihGSUxFICosIGNoYXIgKik7CmV4dGVybiBpbnQgc2V0dmJ1 ZihGSUxFICosIGNoYXIgKiwgaW50LCBzaXplX3QpOwoKZXh0ZXJuIGludCBmcHJpbnRmKEZJTEUg KiwgY29uc3QgY2hhciAqLCAuLi4pOwoKZXh0ZXJuIGludCBmc2NhbmYoRklMRSAqLCBjb25zdCBj aGFyICosIC4uLik7CgpleHRlcm4gaW50IHByaW50Zihjb25zdCBjaGFyICosIC4uLik7CgpleHRl cm4gaW50IHNjYW5mKGNvbnN0IGNoYXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc3ByaW50ZihjaGFy ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKCmV4dGVybiBpbnQgc3NjYW5mKGNvbnN0IGNoYXIgKiwg Y29uc3QgY2hhciAqLCAuLi4pOwpleHRlcm4gaW50IHZmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hh ciAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gaW50IHZwcmludGYoY29uc3QgY2hhciAqLCBfX3ZhX2xp c3QpOwpleHRlcm4gaW50IHZzcHJpbnRmKGNoYXIgKiwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3Qp OwpleHRlcm4gaW50IGZnZXRjKEZJTEUgKik7CmV4dGVybiBjaGFyICpmZ2V0cyhjaGFyICosIGlu dCwgRklMRSAqKTsKZXh0ZXJuIGludCBmcHV0YyhpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQgZnB1 dHMoY29uc3QgY2hhciAqLCBGSUxFICopOwoKCmV4dGVybiBpbnQgZ2V0YyhGSUxFICopOwpleHRl cm4gaW50IHB1dGMoaW50LCBGSUxFICopOwoKCgpleHRlcm4gaW50IGdldGNoYXIodm9pZCk7CmV4 dGVybiBpbnQgcHV0Y2hhcihpbnQpOwoKZXh0ZXJuIGNoYXIgKmdldHMoY2hhciAqKTsKZXh0ZXJu IGludCBwdXRzKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgdW5nZXRjKGludCwgRklMRSAqKTsK ZXh0ZXJuIHNpemVfdCBmcmVhZCh2b2lkICosIHNpemVfdCwgc2l6ZV90LCBGSUxFICopOwpleHRl cm4gc2l6ZV90IGZ3cml0ZShjb25zdCB2b2lkICosIHNpemVfdCwgc2l6ZV90LCBGSUxFICopOwpl eHRlcm4gaW50IGZnZXRwb3MoRklMRSAqLCBmcG9zX3QgKik7CmV4dGVybiBpbnQgZnNlZWsoRklM RSAqLCBsb25nLCBpbnQpOwpleHRlcm4gaW50IGZzZXRwb3MoRklMRSAqLCBjb25zdCBmcG9zX3Qg Kik7CmV4dGVybiBsb25nIGZ0ZWxsKEZJTEUgKik7CmV4dGVybiB2b2lkIHJld2luZChGSUxFICop OwoKCmV4dGVybiB2b2lkIGNsZWFyZXJyKEZJTEUgKik7CmV4dGVybiBpbnQgZmVvZihGSUxFICop OwpleHRlcm4gaW50IGZlcnJvcihGSUxFICopOwoKZXh0ZXJuIHZvaWQgcGVycm9yKGNvbnN0IGNo YXIgKik7CgoKZXh0ZXJuIGludCBfX2ZpbGJ1ZihGSUxFICopOwpleHRlcm4gaW50IF9fZmxzYnVm KGludCwgRklMRSAqKTsKIyAzMzYgIi91c3IvaW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDMgNAp9 CiMgMzcgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKIyA5OCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQK ZXh0ZXJuICJDIiB7CgoKCgoKCnR5cGVkZWYgbG9uZyBvZmZfdDsKCgoKCgoKCnR5cGVkZWYgX19s b25nbG9uZ190IG9mZjY0X3Q7CiMgMTIzICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNAp0eXBlZGVmIF9f bG9uZ2xvbmdfdCBmcG9zNjRfdDsKIyAxMzQgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0CnR5cGVkZWYg X192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyAxNTEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4 dGVybiB1bnNpZ25lZCBjaGFyIF9zaWJ1ZltdLCBfc29idWZbXTsKIyAxOTMgIi9ob21lNS9rcmFr b3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3Rk aW8uaCIgMyA0CmV4dGVybiB1bnNpZ25lZCBjaGFyICpfYnVmZW5kdGFiW107CmV4dGVybiBGSUxF ICpfbGFzdGJ1ZjsKIyAyMjUgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBjaGFyICp0bXBu YW1fcihjaGFyICopOwoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIoRklMRSAqLCBjaGFyICosIHNp emVfdCk7CmV4dGVybiBpbnQgc2V0bGluZWJ1ZihGSUxFICopOwoKCgoKCmV4dGVybiBpbnQgc25w cmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsKCgoKCmV4dGVybiBpbnQg dnNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIF9fZ251Y192YV9saXN0KTsK IyAyNTAgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBGSUxFICpmZG9wZW4oaW50LCBjb25z dCBjaGFyICopOwpleHRlcm4gY2hhciAqY3Rlcm1pZChjaGFyICopOwpleHRlcm4gaW50IGZpbGVu byhGSUxFICopOwojIDI2MSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIHZvaWQgZmxvY2tm aWxlKEZJTEUgKik7CmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlKEZJTEUgKik7CmV4dGVybiB2b2lk IGZ1bmxvY2tmaWxlKEZJTEUgKik7CmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZChGSUxFICopOwpl eHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQodm9pZCk7CmV4dGVybiBpbnQgcHV0Y191bmxvY2tl ZChpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZChpbnQpOwojIDI3NiAi L2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv aW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIEZJTEUgKnBvcGVuKGNvbnN0IGNoYXIgKiwgY29u c3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKmN1c2VyaWQoY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnRl bXBuYW0oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IGdldG9wdChpbnQs IGNoYXIgKmNvbnN0ICosIGNvbnN0IGNoYXIgKik7CgoKCmV4dGVybiBjaGFyICpvcHRhcmc7CmV4 dGVybiBpbnQgb3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsKZXh0ZXJuIGludCBnZXR3KEZJTEUgKik7 CmV4dGVybiBpbnQgcHV0dyhpbnQsIEZJTEUgKik7CmV4dGVybiBpbnQgcGNsb3NlKEZJTEUgKik7 CgoKCgoKCgpleHRlcm4gaW50IGZzZWVrbyhGSUxFICosIG9mZl90LCBpbnQpOwpleHRlcm4gb2Zm X3QgZnRlbGxvKEZJTEUgKik7CiMgMzA1ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gRklM RSAqZm9wZW42NChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxFICpmcmVv cGVuNjQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUgKik7CmV4dGVybiBGSUxFICp0 bXBmaWxlNjQodm9pZCk7CmV4dGVybiBpbnQgZmdldHBvczY0KEZJTEUgKiwgZnBvczY0X3QgKik7 CmV4dGVybiBpbnQgZnNldHBvczY0KEZJTEUgKiwgY29uc3QgZnBvczY0X3QgKik7CmV4dGVybiBp bnQgZnNlZWtvNjQoRklMRSAqLCBvZmY2NF90LCBpbnQpOwpleHRlcm4gb2ZmNjRfdCBmdGVsbG82 NChGSUxFICopOwojIDQxMiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRpby5oIiAzIDQKfQojIDQyICIvaG9tZTUva3Jh a293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2cr Ky9iaXRzL3N0ZF9jc3RkaW8uaCIgMiAzCiMgODYgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRp by5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsK CiAgdXNpbmcgOjpjbGVhcmVycjsKICB1c2luZyA6OmZjbG9zZTsKICB1c2luZyA6OmZlb2Y7CiAg dXNpbmcgOjpmZXJyb3I7CiAgdXNpbmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpmZ2V0YzsKICB1c2lu ZyA6OmZnZXRwb3M7CiAgdXNpbmcgOjpmZ2V0czsKICB1c2luZyA6OmZvcGVuOwogIHVzaW5nIDo6 ZnByaW50ZjsKICB1c2luZyA6OmZwdXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAgdXNpbmcgOjpmcmVh ZDsKICB1c2luZyA6OmZyZW9wZW47CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNpbmcgOjpmc2VlazsK ICB1c2luZyA6OmZzZXRwb3M7CiAgdXNpbmcgOjpmdGVsbDsKICB1c2luZyA6OmZ3cml0ZTsKICB1 c2luZyA6OmdldGM7CiAgdXNpbmcgOjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6 OnBlcnJvcjsKICB1c2luZyA6OnByaW50ZjsKICB1c2luZyA6OnB1dGM7CiAgdXNpbmcgOjpwdXRj aGFyOwogIHVzaW5nIDo6cHV0czsKICB1c2luZyA6OnJlbW92ZTsKICB1c2luZyA6OnJlbmFtZTsK ICB1c2luZyA6OnJld2luZDsKICB1c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6c2V0YnVmOwogIHVz aW5nIDo6c2V0dmJ1ZjsKICB1c2luZyA6OnNwcmludGY7CiAgdXNpbmcgOjpzc2NhbmY7CiAgdXNp bmcgOjp0bXBmaWxlOwogIHVzaW5nIDo6dG1wbmFtOwogIHVzaW5nIDo6dW5nZXRjOwogIHVzaW5n IDo6dmZwcmludGY7CiAgdXNpbmcgOjp2cHJpbnRmOwogIHVzaW5nIDo6dnNwcmludGY7Cn0KIyAz MiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9nKysvY3N0ZGlvIiAyIDMKIyAzNiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNv bGFyaXMyLjgvYml0cy9jKytpby5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9jc3RkZGVmIiAxIDMK IyAzNyAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu OC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jKytpby5oIiAyIDMK IyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2d0aHIuaCIgMSAzCiMg OTggIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv My4wL2luY2x1ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvZ3Roci5oIiAzCiMgMSAi L2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv aW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9ndGhyLWRlZmF1bHQuaCIgMSAz CiMgMzcgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMy4wL2luY2x1ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvZ3Roci1kZWZhdWx0 LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAxIDMgNAojIDkgIi91c3IvaW5jbHVk ZS9wdGhyZWFkLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpcHRocmVhZC5oCTEuMjgJOTkvMTEv MTUgU01JIgoKCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQKIyAyNSAiL2hvbWU1L2ty YWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyl0eXBlcy5oCTEuNjYJMDAvMDIvMTQg U01JIgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDEgMyA0CiMgMjggIi9ob21l NS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3Rz LmgiIDEgMyA0CiMgMjkgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCgojIDEgIi91c3Iv aW5jbHVkZS9zeXMvbWFjaHR5cGVzLmgiIDEgMyA0CiMgMTYgIi91c3IvaW5jbHVkZS9zeXMvbWFj aHR5cGVzLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpbWFjaHR5cGVzLmgJMS4xMwk5OS8wNS8w NCBTTUkiCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDE5 ICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBlcy5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDMz ICIvdXNyL2luY2x1ZGUvc3lzL21hY2h0eXBlcy5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgX2xhYmVs X3QgeyBsb25nIHZhbFsyXTsgfSBsYWJlbF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgbG9j a190OwoKCn0KIyAzNCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKIyA0NSAiL2hvbWU1L2ty YWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMSAzIDQK IyA5ICIvdXNyL2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgj KWludF90eXBlcy5oCTEuNgk5Ny8wOC8yMCBTTUkiCiMgNDIgIi91c3IvaW5jbHVkZS9zeXMvaW50 X3R5cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvaXNhX2RlZnMuaCIgMSAzIDQKIyA0 MyAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsKIyA2 MiAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfdHlwZXMuaCIgMyA0CnR5cGVkZWYgY2hhciBpbnQ4X3Q7 CgoKCgoKdHlwZWRlZiBzaG9ydCBpbnQxNl90Owp0eXBlZGVmIGludCBpbnQzMl90OwoKCgoKdHlw ZWRlZiBsb25nIGxvbmcgaW50NjRfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7 CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVp bnQzMl90OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWludDY0X3Q7CiMgOTQgIi91 c3IvaW5jbHVkZS9zeXMvaW50X3R5cGVzLmgiIDMgNAp0eXBlZGVmIGludDY0X3QgaW50bWF4X3Q7 CnR5cGVkZWYgdWludDY0X3QgdWludG1heF90OwojIDExMCAiL3Vzci9pbmNsdWRlL3N5cy9pbnRf dHlwZXMuaCIgMyA0CnR5cGVkZWYgaW50IGludHB0cl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1 aW50cHRyX3Q7CgoKCgoKCgp0eXBlZGVmIGNoYXIgaW50X2xlYXN0OF90OwoKCgoKCnR5cGVkZWYg c2hvcnQgaW50X2xlYXN0MTZfdDsKdHlwZWRlZiBpbnQgaW50X2xlYXN0MzJfdDsKCgoKCnR5cGVk ZWYgbG9uZyBsb25nIGludF9sZWFzdDY0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50 X2xlYXN0OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVpbnRfbGVhc3QxNl90Owp0eXBlZGVm IHVuc2lnbmVkIGludCB1aW50X2xlYXN0MzJfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBs b25nIHVpbnRfbGVhc3Q2NF90OwoKCgoKfQojIDQ2ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMg NAoKCgoKCgoKZXh0ZXJuICJDIiB7CiMgNjIgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBl ZGVmIGxvbmcgbG9uZyBsb25nbG9uZ190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1X2xv bmdsb25nX3Q7CiMgODUgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIGxvbmcgdF9z Y2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHRfdXNjYWxhcl90OwoKCgoKCnR5cGVkZWYg dW5zaWduZWQgY2hhciB1Y2hhcl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9ydF90Owp0 eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZ190 OwoKdHlwZWRlZiBjaGFyICpjYWRkcl90Owp0eXBlZGVmIGxvbmcgZGFkZHJfdDsKdHlwZWRlZiBz aG9ydCBjbnRfdDsKCgp0eXBlZGVmIHVsb25nX3QgcGFkZHJfdDsKIyAxMjcgIi9ob21lNS9rcmFr b3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lz L3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVsb25nX3QgcGZuX3Q7CnR5cGVkZWYgdWxvbmdfdCBwZ2Nu dF90Owp0eXBlZGVmIGxvbmcgc3BnY250X3Q7Cgp0eXBlZGVmIHVjaGFyX3QgdXNlX3Q7CnR5cGVk ZWYgc2hvcnQgc3lzaWRfdDsKdHlwZWRlZiBzaG9ydCBpbmRleF90Owp0eXBlZGVmIHZvaWQgKnRp bWVvdXRfaWRfdDsKdHlwZWRlZiB2b2lkICpidWZjYWxsX2lkX3Q7CiMgMTY1ICIvaG9tZTUva3Jh a293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5 cy90eXBlcy5oIiAzIDQKdHlwZWRlZiB1bG9uZ190IGlub190Owp0eXBlZGVmIGxvbmcgYmxrY250 X3Q7CnR5cGVkZWYgdWxvbmdfdCBmc2Jsa2NudF90Owp0eXBlZGVmIHVsb25nX3QgZnNmaWxjbnRf dDsKIyAxODMgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHVfbG9uZ2xvbmdfdCBp bm82NF90Owp0eXBlZGVmIGxvbmdsb25nX3QgYmxrY250NjRfdDsKdHlwZWRlZiB1X2xvbmdsb25n X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIHVfbG9uZ2xvbmdfdCBmc2ZpbGNudDY0X3Q7CgoKCgoK CnR5cGVkZWYgbG9uZyBibGtzaXplX3Q7CgoKCnR5cGVkZWYgZW51bSB7IF9CX0ZBTFNFLCBfQl9U UlVFIH0gYm9vbGVhbl90OwojIDIxMCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYg aW50NjRfdCBwYWQ2NF90Owp0eXBlZGVmIHVpbnQ2NF90IHVwYWQ2NF90OwojIDIyMyAiL2hvbWU1 L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk ZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgbG9uZ2xvbmdfdCBvZmZzZXRfdDsKdHlwZWRlZiB1 X2xvbmdsb25nX3QgdV9vZmZzZXRfdDsKdHlwZWRlZiB1X2xvbmdsb25nX3QgbGVuX3Q7CnR5cGVk ZWYgbG9uZ2xvbmdfdCBkaXNrYWRkcl90OwojIDI0NCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0 CnR5cGVkZWYgdW5pb24gewogICAgICAgIG9mZnNldF90IF9mOwogICAgICAgIHN0cnVjdCB7CiAg ICAgICAgICAgICAgICBpbnQzMl90IF91OwogICAgICAgICAgICAgICAgaW50MzJfdCBfbDsKICAg ICAgICB9IF9wOwp9IGxsb2ZmX3Q7CiMgMjY0ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlw ZWRlZiB1bmlvbiB7CiAgICAgICAgZGlza2FkZHJfdCBfZjsKICAgICAgICBzdHJ1Y3QgewogICAg ICAgICAgICAgICAgaW50MzJfdCBfdTsKICAgICAgICAgICAgICAgIGludDMyX3QgX2w7CiAgICAg ICAgfSBfcDsKfSBsbGRhZGRyX3Q7CgoKdHlwZWRlZiB1aW50X3Qga19mbHRzZXRfdDsKIyAyODcg Ii9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIGxvbmcgaWRfdDsKCgoKCgoKdHlwZWRl ZiB1aW50X3QgdXNlY29uZHNfdDsKCgoKdHlwZWRlZiBsb25nIHN1c2Vjb25kc190OwojIDMwOCAi L2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdWxvbmdfdCBtYWpvcl90Owp0eXBlZGVm IHVsb25nX3QgbWlub3JfdDsKCgoKCgp0eXBlZGVmIHNob3J0IHByaV90OwojIDMyOCAiL2hvbWU1 L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk ZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVkZWYgdXNob3J0X3Qgb19tb2RlX3Q7CnR5cGVkZWYgc2hv cnQgb19kZXZfdDsKdHlwZWRlZiB1c2hvcnRfdCBvX3VpZF90Owp0eXBlZGVmIG9fdWlkX3Qgb19n aWRfdDsKdHlwZWRlZiBzaG9ydCBvX25saW5rX3Q7CnR5cGVkZWYgc2hvcnQgb19waWRfdDsKdHlw ZWRlZiB1c2hvcnRfdCBvX2lub190OwoKCgoKCnR5cGVkZWYgaW50IGtleV90OwoKCgp0eXBlZGVm IHVsb25nX3QgbW9kZV90OwoKCgoKCgoKdHlwZWRlZiBsb25nIHVpZF90OwoKCgp0eXBlZGVmIHVp ZF90IGdpZF90OwoKdHlwZWRlZiBpZF90IHRhc2tpZF90Owp0eXBlZGVmIGlkX3QgcHJvamlkX3Q7 CgoKCgoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBp bnQgcHRocmVhZF9rZXlfdDsKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX211dGV4IHsKICAgICAg ICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdWludDE2X3QgX19wdGhyZWFkX211dGV4X2ZsYWcx OwogICAgICAgICAgICAgICAgdWludDhfdCBfX3B0aHJlYWRfbXV0ZXhfZmxhZzI7CiAgICAgICAg ICAgICAgICB1aW50OF90IF9fcHRocmVhZF9tdXRleF9jZWlsaW5nOwogICAgICAgICAgICAgICAg dWludDMyX3QgX19wdGhyZWFkX211dGV4X3R5cGU7CiAgICAgICAgfSBfX3B0aHJlYWRfbXV0ZXhf ZmxhZ3M7CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAg ICAgICAgICAgICAgICAgdWludDhfdCBfX3B0aHJlYWRfbXV0ZXhfcGFkWzhdOwogICAgICAgICAg ICAgICAgfSBfX3B0aHJlYWRfbXV0ZXhfbG9jazY0OwogICAgICAgICAgICAgICAgdXBhZDY0X3Qg X19wdGhyZWFkX211dGV4X293bmVyNjQ7CiAgICAgICAgfSBfX3B0aHJlYWRfbXV0ZXhfbG9jazsK ICAgICAgICB1cGFkNjRfdCBfX3B0aHJlYWRfbXV0ZXhfZGF0YTsKfSBwdGhyZWFkX211dGV4X3Q7 Cgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9jb25kIHsKICAgICAgICBzdHJ1Y3QgewogICAgICAg ICAgICAgICAgdWludDhfdCBfX3B0aHJlYWRfY29uZF9mbGFnWzRdOwogICAgICAgICAgICAgICAg dWludDMyX3QgX19wdGhyZWFkX2NvbmRfdHlwZTsKICAgICAgICB9IF9fcHRocmVhZF9jb25kX2Zs YWdzOwogICAgICAgIHVwYWQ2NF90IF9fcHRocmVhZF9jb25kX2RhdGE7Cn0gcHRocmVhZF9jb25k X3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2sgewogICAgICAgIGludDMyX3Qg X19wdGhyZWFkX3J3bG9ja19yZWFkZXJzOwogICAgICAgIHVpbnQxNl90IF9fcHRocmVhZF9yd2xv Y2tfdHlwZTsKICAgICAgICB1aW50MTZfdCBfX3B0aHJlYWRfcndsb2NrX21hZ2ljOwogICAgICAg IHVwYWQ2NF90IF9fcHRocmVhZF9yd2xvY2tfcGFkMVszXTsKICAgICAgICB1cGFkNjRfdCBfX3B0 aHJlYWRfcndsb2NrX3BhZDJbMl07CiAgICAgICAgdXBhZDY0X3QgX19wdGhyZWFkX3J3bG9ja19w YWQzWzJdOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9h dHRyIHsKICAgICAgICB2b2lkICpfX3B0aHJlYWRfYXR0cnA7Cn0gcHRocmVhZF9hdHRyX3Q7CgoK CgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfbXV0ZXhhdHRyIHsKICAgICAgICB2b2lkICpfX3B0 aHJlYWRfbXV0ZXhhdHRycDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgoKCnR5cGVkZWYgc3Ry dWN0IF9wdGhyZWFkX2NvbmRhdHRyIHsKICAgICAgICB2b2lkICpfX3B0aHJlYWRfY29uZGF0dHJw Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgoKCnR5cGVkZWYgc3RydWN0IF9vbmNlIHsKICAgICAg ICB1cGFkNjRfdCBfX3B0aHJlYWRfb25jZV9wYWRbNF07Cn0gcHRocmVhZF9vbmNlX3Q7CgoKCgoK dHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrYXR0ciB7CiAgICAgICAgdm9pZCAqX19wdGhy ZWFkX3J3bG9ja2F0dHJwOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKdHlwZWRlZiB1bG9uZ190 IGRldl90OwoKCgoKCnR5cGVkZWYgdWxvbmdfdCBubGlua190Owp0eXBlZGVmIGxvbmcgcGlkX3Q7 CiMgNDgxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBsb25nIHRpbWVfdDsKCgoK CnR5cGVkZWYgbG9uZyBjbG9ja190OwoKCgoKdHlwZWRlZiBpbnQgY2xvY2tpZF90OwoKCgoKdHlw ZWRlZiBpbnQgdGltZXJfdDsKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVuY2hhcjsKdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CnR5 cGVkZWYgdW5zaWduZWQgbG9uZyB1bG9uZzsKIyA1NTcgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg NAp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVf c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg dV9sb25nOwp0eXBlZGVmIHN0cnVjdCBfcXVhZCB7IGludCB2YWxbMl07IH0gcXVhZF90Owp0eXBl ZGVmIHF1YWRfdCBxdWFkOwoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEg MyA0CiMgMTIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNAojcHJhZ21hIGlkZW50ICJA KCMpc2VsZWN0LmgJMS4xNgk5OC8wNC8yNyBTTUkiCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVh dHVyZV90ZXN0cy5oIiAxIDMgNAojIDE1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMg NAoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDEgMyA0CiMgMjIgIi91c3IvaW5jbHVk ZS9zeXMvdGltZS5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXRpbWUuaAkyLjY1CTAwLzA4LzI0 IFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMjUg Ii91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMgNAoKCgoKCgoKZXh0ZXJuICJDIiB7CiMgNDkg Ii91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKc3RydWN0IHRpbWV2YWwgewogICAgICAgIHRp bWVfdCB0dl9zZWM7CiAgICAgICAgc3VzZWNvbmRzX3QgdHZfdXNlYzsKfTsKIyA4MiAiL3Vzci9p bmNsdWRlL3N5cy90aW1lLmgiIDMgNApzdHJ1Y3QgdGltZXpvbmUgewogICAgICAgIGludCB0el9t aW51dGVzd2VzdDsKICAgICAgICBpbnQgdHpfZHN0dGltZTsKfTsKCgoKCgp9CiMgMTAwICIvdXNy L2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQK IyAxMDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKIyAx NTUgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKc3RydWN0IGl0aW1lcnZhbCB7CiAgICAg ICAgc3RydWN0IHRpbWV2YWwgaXRfaW50ZXJ2YWw7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgaXRf dmFsdWU7Cn07CiMgMjAzICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CnR5cGVkZWYgbG9u Z2xvbmdfdCBocnRpbWVfdDsKIyAzMTggIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKaW50 IGFkanRpbWUoc3RydWN0IHRpbWV2YWwgKiwgc3RydWN0IHRpbWV2YWwgKik7CiMgMzI5ICIvdXNy L2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0CmludCBnZXRpdGltZXIoaW50LCBzdHJ1Y3QgaXRpbWVy dmFsICopOwppbnQgdXRpbWVzKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKik7 CgppbnQgc2V0aXRpbWVyKGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnZhbCAqLCBzdHJ1Y3QgaXRp bWVydmFsICopOwojIDM2NyAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAppbnQgc2V0dGlt ZW9mZGF5KHN0cnVjdCB0aW1ldmFsICosIHZvaWQgKik7CgpocnRpbWVfdCBnZXRocnRpbWUodm9p ZCk7CmhydGltZV90IGdldGhydnRpbWUodm9pZCk7CiMgMzg3ICIvdXNyL2luY2x1ZGUvc3lzL3Rp bWUuaCIgMyA0CmludCBnZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsKIyA0 MDggIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5o IiAxIDMgNAojIDE2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgj KXRpbWUuaAkxLjM5CTk5LzA4LzEwIFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJl X3Rlc3RzLmgiIDEgMyA0CiMgMTkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMyA0CiMgMSAiL2hv bWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQKIyAyMCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzIDQK IyAxICIvdXNyL2luY2x1ZGUvaXNvL3RpbWVfaXNvLmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVk ZS9pc28vdGltZV9pc28uaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyl0aW1lX2lzby5oCTEuMQk5 OS8wOC8wOSBTTUkiCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMg NAojIDMxICIvdXNyL2luY2x1ZGUvaXNvL3RpbWVfaXNvLmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7 CiMgNjkgIi91c3IvaW5jbHVkZS9pc28vdGltZV9pc28uaCIgMyA0CnN0cnVjdCB0bSB7CiAgICAg ICAgaW50IHRtX3NlYzsKICAgICAgICBpbnQgdG1fbWluOwogICAgICAgIGludCB0bV9ob3VyOwog ICAgICAgIGludCB0bV9tZGF5OwogICAgICAgIGludCB0bV9tb247CiAgICAgICAgaW50IHRtX3ll YXI7CiAgICAgICAgaW50IHRtX3dkYXk7CiAgICAgICAgaW50IHRtX3lkYXk7CiAgICAgICAgaW50 IHRtX2lzZHN0Owp9OwoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUoY29uc3Qgc3RydWN0IHRtICop OwpleHRlcm4gY2xvY2tfdCBjbG9jayh2b2lkKTsKZXh0ZXJuIGNoYXIgKmN0aW1lKGNvbnN0IHRp bWVfdCAqKTsKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSh0aW1lX3QsIHRpbWVfdCk7CmV4dGVybiBz dHJ1Y3QgdG0gKmdtdGltZShjb25zdCB0aW1lX3QgKik7CmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2Fs dGltZShjb25zdCB0aW1lX3QgKik7CmV4dGVybiB0aW1lX3QgbWt0aW1lKHN0cnVjdCB0bSAqKTsK ZXh0ZXJuIHRpbWVfdCB0aW1lKHRpbWVfdCAqKTsKZXh0ZXJuIHNpemVfdCBzdHJmdGltZShjaGFy ICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0gKik7CiMgMTEzICIvdXNy L2luY2x1ZGUvaXNvL3RpbWVfaXNvLmgiIDMgNAp9CiMgMjEgIi91c3IvaW5jbHVkZS90aW1lLmgi IDIgMyA0CiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApleHRlcm4gIkMiIHsKIyA2MCAi L3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZV9yKGNvbnN0 IHRpbWVfdCAqLCBzdHJ1Y3QgdG0gKik7CmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yKGNv bnN0IHRpbWVfdCAqLCBzdHJ1Y3QgdG0gKik7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lKGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzdHJ1Y3QgdG0gKik7CiMgODMgIi91c3IvaW5jbHVk ZS90aW1lLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDEgMyA0CiMg MTUgIi91c3IvaW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMp dGltZV9pbXBsLmgJMS41CTk5LzEwLzA1IFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0 dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMTggIi91c3IvaW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDIg MyA0CgoKZXh0ZXJuICJDIiB7CiMgMzYgIi91c3IvaW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDMg NAp0eXBlZGVmIHN0cnVjdCB0aW1lc3BlYyB7CiAgICAgICAgdGltZV90IHR2X3NlYzsKICAgICAg ICBsb25nIHR2X25zZWM7Cn0gdGltZXNwZWNfdDsKIyA2MCAiL3Vzci9pbmNsdWRlL3N5cy90aW1l X2ltcGwuaCIgMyA0CnR5cGVkZWYgc3RydWN0IHRpbWVzcGVjIHRpbWVzdHJ1Y190OwojIDc5ICIv dXNyL2luY2x1ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QgaXRpbWVyc3Bl YyB7CiAgICAgICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwogICAgICAgIHN0cnVjdCB0 aW1lc3BlYyBpdF92YWx1ZTsKfSBpdGltZXJzcGVjX3Q7CiMgMTM2ICIvdXNyL2luY2x1ZGUvc3lz L3RpbWVfaW1wbC5oIiAzIDQKfQojIDg0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMgNAojIDk4 ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKdW5pb24gc2lndmFsIHsKICAgICAgICBpbnQgc2l2 YWxfaW50OwogICAgICAgIHZvaWQgKnNpdmFsX3B0cjsKfTsKCgoKCnN0cnVjdCBzaWdldmVudCB7 CiAgICAgICAgaW50IHNpZ2V2X25vdGlmeTsKICAgICAgICBpbnQgc2lnZXZfc2lnbm87CiAgICAg ICAgdW5pb24gc2lndmFsIHNpZ2V2X3ZhbHVlOwogICAgICAgIHZvaWQgKCpzaWdldl9ub3RpZnlf ZnVuY3Rpb24pKHVuaW9uIHNpZ3ZhbCk7CiAgICAgICAgcHRocmVhZF9hdHRyX3QgKnNpZ2V2X25v dGlmeV9hdHRyaWJ1dGVzOwogICAgICAgIGludCBfX3NpZ2V2X3BhZDI7Cn07CgoKZXh0ZXJuIGlu dCBjbG9ja19nZXRyZXMoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQg Y2xvY2tfZ2V0dGltZShjbG9ja2lkX3QsIHN0cnVjdCB0aW1lc3BlYyAqKTsKZXh0ZXJuIGludCBj bG9ja19zZXR0aW1lKGNsb2NraWRfdCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICopOwpleHRlcm4g aW50IHRpbWVyX2NyZWF0ZShjbG9ja2lkX3QsIHN0cnVjdCBzaWdldmVudCAqLCB0aW1lcl90ICop OwpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSh0aW1lcl90KTsKZXh0ZXJuIGludCB0aW1lcl9nZXRv dmVycnVuKHRpbWVyX3QpOwpleHRlcm4gaW50IHRpbWVyX2dldHRpbWUodGltZXJfdCwgc3RydWN0 IGl0aW1lcnNwZWMgKik7CmV4dGVybiBpbnQgdGltZXJfc2V0dGltZSh0aW1lcl90LCBpbnQsIGNv bnN0IHN0cnVjdCBpdGltZXJzcGVjICosCiAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3Bl YyAqKTsKZXh0ZXJuIGludCBuYW5vc2xlZXAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIHN0cnVj dCB0aW1lc3BlYyAqKTsKCgoKCmV4dGVybiB2b2lkIHR6c2V0KHZvaWQpOwoKZXh0ZXJuIGNoYXIg KnR6bmFtZVsyXTsKCgpleHRlcm4gbG9uZyBfc3lzY29uZihpbnQpOwoKCgoKCgpleHRlcm4gbG9u ZyB0aW1lem9uZTsKZXh0ZXJuIGludCBkYXlsaWdodDsKIyAxNTYgIi91c3IvaW5jbHVkZS90aW1l LmgiIDMgNApleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlKGNvbnN0IGNoYXIgKik7CgoKCgoKCmV4 dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CiMgMjU2ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKc3Rh dGljIGNoYXIgKgphc2N0aW1lX3IoY29uc3Qgc3RydWN0IHRtICpfX3RtLCBjaGFyICpfX2J1ZikK ewogICAgICAgIGV4dGVybiBjaGFyICpfX3Bvc2l4X2FzY3RpbWVfcihjb25zdCBzdHJ1Y3QgdG0g KiwgY2hhciAqKTsKICAgICAgICByZXR1cm4gKF9fcG9zaXhfYXNjdGltZV9yKF9fdG0sIF9fYnVm KSk7Cn0Kc3RhdGljIGNoYXIgKgpjdGltZV9yKGNvbnN0IHRpbWVfdCAqX190aW1lLCBjaGFyICpf X2J1ZikKewogICAgICAgIGV4dGVybiBjaGFyICpfX3Bvc2l4X2N0aW1lX3IoY29uc3QgdGltZV90 ICosIGNoYXIgKik7CiAgICAgICAgcmV0dXJuIChfX3Bvc2l4X2N0aW1lX3IoX190aW1lLCBfX2J1 ZikpOwp9CiMgMzE4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKfQojIDQwOSAiL3Vzci9pbmNs dWRlL3N5cy90aW1lLmgiIDIgMyA0CiMgNDIxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMyA0 CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzIDQKIyA0MjIgIi91c3IvaW5jbHVk ZS9zeXMvdGltZS5oIiAyIDMgNAoKCgoKCn0KIyAxOCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu aCIgMiAzIDQKCgoKZXh0ZXJuICJDIiB7CiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi IDMgNAp0eXBlZGVmIGxvbmcgZmRfbWFzazsKCnR5cGVkZWYgbG9uZyBmZHNfbWFzazsKIyA3MyAi L3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CnR5cGVkZWYgc3RydWN0IGZkX3NldCB7CgoK CiAgICAgICAgbG9uZyBmZHNfYml0c1soKCgxMDI0KSsoKChzaXplb2YgKGZkc19tYXNrKSAqIDgp KS0xKSkvKChzaXplb2YgKGZkc19tYXNrKSAqIDgpKSldOwp9IGZkX3NldDsKIyA5NyAiL3Vzci9p bmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CmV4dGVybiBpbnQgc2VsZWN0KGludCwgZmRfc2V0ICos IGZkX3NldCAqLCBmZF9zZXQgKiwgc3RydWN0IHRpbWV2YWwgKik7CgoKCgoKCn0KIyA1NzAgIi9o b21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CiMgNTg2ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQK fQojIDEzICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS90 aW1lLmgiIDEgMyA0CiMgMTQgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMyA0CiMgMSAiL3Vz ci9pbmNsdWRlL3NjaGVkLmgiIDEgMyA0CiMgMTEgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAzIDQK I3ByYWdtYSBpZGVudCAiQCgjKXNjaGVkLmgJMS45CTk4LzAxLzE2IFNNSSIKCiMgMSAiL2hvbWU1 L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk ZS9zeXMvdHlwZXMuaCIgMSAzIDQKIyAxNCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMyA0CiMg MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzIDQKIyAxNSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgi IDIgMyA0CgoKZXh0ZXJuICJDIiB7CgoKc3RydWN0IHNjaGVkX3BhcmFtIHsKICAgICAgICBpbnQg c2NoZWRfcHJpb3JpdHk7CiAgICAgICAgaW50IHNjaGVkX25pY2VsaW07CiAgICAgICAgaW50IHNj aGVkX25pY2U7CiAgICAgICAgaW50IHNjaGVkX3BhZFs2XTsKCgoKfTsKIyA0NCAiL3Vzci9pbmNs dWRlL3NjaGVkLmgiIDMgNAppbnQgc2NoZWRfZ2V0cGFyYW0ocGlkX3QgcGlkLCBzdHJ1Y3Qgc2No ZWRfcGFyYW0gKnBhcmFtKTsKaW50IHNjaGVkX3NldHBhcmFtKHBpZF90IHBpZCwgY29uc3Qgc3Ry dWN0IHNjaGVkX3BhcmFtICpwYXJhbSk7CmludCBzY2hlZF9nZXRzY2hlZHVsZXIocGlkX3QgcGlk KTsKaW50IHNjaGVkX3NldHNjaGVkdWxlcihwaWRfdCBwaWQsIGludCBwb2xpY3ksCiAgICAgICAg ICAgICAgICBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKTsKaW50IHNjaGVkX3lpZWxk KHZvaWQpOwppbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heChpbnQgcG9saWN5KTsKaW50IHNjaGVk X2dldF9wcmlvcml0eV9taW4oaW50IHBvbGljeSk7CmludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwo cGlkX3QgcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKmludGVydmFsKTsKIyA2NSAiL3Vzci9pbmNsdWRl L3NjaGVkLmgiIDMgNAp9CiMgMTUgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMyA0CgoKCmV4 dGVybiAiQyIgewojIDEwOCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CnR5cGVkZWYgc3Ry dWN0IF9jbGVhbnVwIHsKICAgICAgICB1aW50cHRyX3QgcHRocmVhZF9jbGVhbnVwX3BhZFs0XTsK fSBfY2xlYW51cF90OwoKCgp2b2lkIF9fcHRocmVhZF9jbGVhbnVwX3B1c2godm9pZCAoKnJvdXRp bmUpKHZvaWQgKiksIHZvaWQgKmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjYWRkcl90IGZwLCBfY2xlYW51cF90ICppbmZvKTsKdm9pZCBfX3B0aHJlYWRfY2xl YW51cF9wb3AoaW50IGV4LCBfY2xlYW51cF90ICppbmZvKTsKY2FkZHJfdCBfZ2V0ZnAodm9pZCk7 CiMgMTQyICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuIGludCBwdGhyZWFkX2F0 dHJfaW5pdChwdGhyZWFkX2F0dHJfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVzdHJv eShwdGhyZWFkX2F0dHJfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXpl KHB0aHJlYWRfYXR0cl90ICosIHNpemVfdCk7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0 YWNrc2l6ZShjb25zdCBwdGhyZWFkX2F0dHJfdCAqLCBzaXplX3QgKik7CmV4dGVybiBpbnQgcHRo cmVhZF9hdHRyX3NldHN0YWNrYWRkcihwdGhyZWFkX2F0dHJfdCAqLCB2b2lkICopOwpleHRlcm4g aW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIoY29uc3QgcHRocmVhZF9hdHRyX3QgKiwgdm9p ZCAqKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKHB0aHJlYWRfYXR0 cl90ICosIGludCk7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlKGNvbnN0 IHB0aHJlYWRfYXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2Nv cGUocHRocmVhZF9hdHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2Nv cGUoY29uc3QgcHRocmVhZF9hdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0 cl9zZXRpbmhlcml0c2NoZWQocHRocmVhZF9hdHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhy ZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkKGNvbnN0IHB0aHJlYWRfYXR0cl90ICosIGludCAqKTsK ZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kocHRocmVhZF9hdHRyX3QgKiwg aW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3koY29uc3QgcHRocmVh ZF9hdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFt KHB0aHJlYWRfYXR0cl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dl dHNjaGVkcGFyYW0oY29uc3QgcHRocmVhZF9hdHRyX3QgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsKZXh0ZXJuIGludCBwdGhy ZWFkX2NyZWF0ZShwdGhyZWFkX3QgKiwgY29uc3QgcHRocmVhZF9hdHRyX3QgKiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICogKCopKHZvaWQgKiksIHZvaWQgKik7CmV4dGVy biBpbnQgcHRocmVhZF9vbmNlKHB0aHJlYWRfb25jZV90ICosIHZvaWQgKCopKHZvaWQpKTsKZXh0 ZXJuIGludCBwdGhyZWFkX2pvaW4ocHRocmVhZF90LCB2b2lkICoqKTsKZXh0ZXJuIGludCBwdGhy ZWFkX2RldGFjaChwdGhyZWFkX3QpOwpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQodm9pZCAqKTsK ZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbChwdGhyZWFkX3QpOwpleHRlcm4gaW50IHB0aHJlYWRf c2V0c2NoZWRwYXJhbShwdGhyZWFkX3QsIGludCwgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICop OwpleHRlcm4gaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbShwdGhyZWFkX3QsIGludCAqLCBzdHJ1 Y3Qgc2NoZWRfcGFyYW0gKik7CmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWxzdGF0ZShpbnQs IGludCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUoaW50LCBpbnQgKik7CmV4 dGVybiB2b2lkIHB0aHJlYWRfdGVzdGNhbmNlbCh2b2lkKTsKZXh0ZXJuIGludCBwdGhyZWFkX2Vx dWFsKHB0aHJlYWRfdCwgcHRocmVhZF90KTsKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9jcmVhdGUo cHRocmVhZF9rZXlfdCAqLCB2b2lkICgqKSh2b2lkICopKTsKZXh0ZXJuIGludCBwdGhyZWFkX2tl eV9kZWxldGUocHRocmVhZF9rZXlfdCk7CmV4dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyhw dGhyZWFkX2tleV90LCBjb25zdCB2b2lkICopOwpleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVj aWZpYyhwdGhyZWFkX2tleV90KTsKZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYodm9pZCk7 CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQocHRocmVhZF9tdXRleGF0dHJf dCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KHB0aHJlYWRfbXV0ZXhh dHRyX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZChwdGhyZWFk X211dGV4YXR0cl90ICosIGludCk7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHNo YXJlZChjb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGludCBwdGhy ZWFkX211dGV4YXR0cl9zZXRwcm90b2NvbChwdGhyZWFkX211dGV4YXR0cl90ICosIGludCk7CmV4 dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHJvdG9jb2woY29uc3QgcHRocmVhZF9tdXRl eGF0dHJfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHJpb2Nl aWxpbmcocHRocmVhZF9tdXRleGF0dHJfdCAqLCBpbnQpOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0 ZXhhdHRyX2dldHByaW9jZWlsaW5nKGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICop OwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHJvYnVzdF9ucChwdGhyZWFkX211dGV4 YXR0cl90ICosIGludCk7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cm9idXN0X25w KGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKiwgaW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRf bXV0ZXhfaW5pdChwdGhyZWFkX211dGV4X3QgKiwgY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAq KTsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2NvbnNpc3RlbnRfbnAocHRocmVhZF9tdXRleF90 ICopOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveShwdGhyZWFkX211dGV4X3QgKik7 CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqKTsKZXh0ZXJu IGludCBwdGhyZWFkX211dGV4X3VubG9jayhwdGhyZWFkX211dGV4X3QgKik7CmV4dGVybiBpbnQg cHRocmVhZF9tdXRleF90cnlsb2NrKHB0aHJlYWRfbXV0ZXhfdCAqKTsKZXh0ZXJuIGludCBwdGhy ZWFkX211dGV4X3NldHByaW9jZWlsaW5nKHB0aHJlYWRfbXV0ZXhfdCAqLCBpbnQsIGludCAqKTsK ZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2dldHByaW9jZWlsaW5nKGNvbnN0IHB0aHJlYWRfbXV0 ZXhfdCAqLCBpbnQgKik7CmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0KHB0aHJlYWRf Y29uZGF0dHJfdCAqKTsKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kocHRocmVh ZF9jb25kYXR0cl90ICopOwpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfc2V0cHNoYXJlZChw dGhyZWFkX2NvbmRhdHRyX3QgKiwgaW50KTsKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2dl dHBzaGFyZWQoY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGludCBw dGhyZWFkX2NvbmRfaW5pdChwdGhyZWFkX2NvbmRfdCAqLCBjb25zdCBwdGhyZWFkX2NvbmRhdHRy X3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kocHRocmVhZF9jb25kX3QgKik7 CmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdChwdGhyZWFkX2NvbmRfdCAqKTsKZXh0 ZXJuIGludCBwdGhyZWFkX2NvbmRfc2lnbmFsKHB0aHJlYWRfY29uZF90ICopOwpleHRlcm4gaW50 IHB0aHJlYWRfY29uZF93YWl0KHB0aHJlYWRfY29uZF90ICosIHB0aHJlYWRfbXV0ZXhfdCAqKTsK ZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3YWl0KHB0aHJlYWRfY29uZF90ICosIHB0aHJl YWRfbXV0ZXhfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3Qgc3RydWN0IHRpbWVzcGVjICopOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRndWFyZHNp emUoY29uc3QgcHRocmVhZF9hdHRyX3QgKiwgc2l6ZV90ICopOwpleHRlcm4gaW50IHB0aHJlYWRf YXR0cl9zZXRndWFyZHNpemUocHRocmVhZF9hdHRyX3QgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBw dGhyZWFkX2dldGNvbmN1cnJlbmN5KHZvaWQpOwpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y29uY3Vy cmVuY3koaW50IG5ld3ZhbCk7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZShw dGhyZWFkX211dGV4YXR0cl90ICosIGludCk7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJf Z2V0dHlwZShjb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICosIGludCAqKTsKZXh0ZXJuIGludCBw dGhyZWFkX3J3bG9ja19pbml0KHB0aHJlYWRfcndsb2NrX3QgKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqKTsKZXh0ZXJuIGludCBw dGhyZWFkX3J3bG9ja19kZXN0cm95KHB0aHJlYWRfcndsb2NrX3QgKik7CmV4dGVybiBpbnQgcHRo cmVhZF9yd2xvY2tfcmRsb2NrKHB0aHJlYWRfcndsb2NrX3QgKik7CmV4dGVybiBpbnQgcHRocmVh ZF9yd2xvY2tfdHJ5cmRsb2NrKHB0aHJlYWRfcndsb2NrX3QgKik7CmV4dGVybiBpbnQgcHRocmVh ZF9yd2xvY2tfd3Jsb2NrKHB0aHJlYWRfcndsb2NrX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9y d2xvY2tfdHJ5d3Jsb2NrKHB0aHJlYWRfcndsb2NrX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9y d2xvY2tfdW5sb2NrKHB0aHJlYWRfcndsb2NrX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9yd2xv Y2thdHRyX2luaXQocHRocmVhZF9yd2xvY2thdHRyX3QgKik7CmV4dGVybiBpbnQgcHRocmVhZF9y d2xvY2thdHRyX2Rlc3Ryb3kocHRocmVhZF9yd2xvY2thdHRyX3QgKik7CmV4dGVybiBpbnQgcHRo cmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQoY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKiwg aW50ICopOwpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9zZXRwc2hhcmVkKHB0aHJlYWRf cndsb2NrYXR0cl90ICosIGludCk7CiMgMzIzICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQK fQojIDM4ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2d0aHItZGVmYXVs dC5oIiAyIDMKCnR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5X3Q7CnR5cGVkZWYg cHRocmVhZF9vbmNlX3QgX19ndGhyZWFkX29uY2VfdDsKdHlwZWRlZiBwdGhyZWFkX211dGV4X3Qg X19ndGhyZWFkX211dGV4X3Q7CgoKCgoKCiNwcmFnbWEgd2VhayBwdGhyZWFkX29uY2UKI3ByYWdt YSB3ZWFrIHB0aHJlYWRfa2V5X2NyZWF0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9rZXlfZGVsZXRl CiNwcmFnbWEgd2VhayBwdGhyZWFkX2dldHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhyZWFkX3Nl dHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhyZWFkX2NyZWF0ZQoKI3ByYWdtYSB3ZWFrIHB0aHJl YWRfbXV0ZXhfbG9jawojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF90cnlsb2NrCiNwcmFnbWEg d2VhayBwdGhyZWFkX211dGV4X3VubG9jawojIDc4ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29s YXJpczIuOC9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCnN0YXRpYyB2b2lkICpfX2d0aHJlYWRfYWN0 aXZlX3B0ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0ZTsKCnN0YXRpYyBpbmxpbmUgaW50Cl9f Z3RocmVhZF9hY3RpdmVfcCAodm9pZCkKewogIHJldHVybiBfX2d0aHJlYWRfYWN0aXZlX3B0ciAh PSAwOwp9CiMgNDI3ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2d0aHIt ZGVmYXVsdC5oIiAzCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9vbmNlIChfX2d0aHJlYWRf b25jZV90ICpvbmNlLCB2b2lkICgqZnVuYykgKHZvaWQpKQp7CiAgaWYgKF9fZ3RocmVhZF9hY3Rp dmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX29uY2UgKG9uY2UsIGZ1bmMpOwogIGVsc2UKICAg IHJldHVybiAtMTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9jcmVhdGUgKF9f Z3RocmVhZF9rZXlfdCAqa2V5LCB2b2lkICgqZHRvcikgKHZvaWQgKikpCnsKICByZXR1cm4gcHRo cmVhZF9rZXlfY3JlYXRlIChrZXksIGR0b3IpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJl YWRfa2V5X2R0b3IgKF9fZ3RocmVhZF9rZXlfdCBrZXksIHZvaWQgKnB0cikKewoKICBpZiAocHRy KQogICAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgMCk7CiAgZWxzZQogICAgcmV0 dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZGVsZXRlIChfX2d0aHJl YWRfa2V5X3Qga2V5KQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2RlbGV0ZSAoa2V5KTsKfQoKc3Rh dGljIGlubGluZSB2b2lkICoKX19ndGhyZWFkX2dldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qg a2V5KQp7CiAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMgKGtleSk7Cn0KCnN0YXRpYyBpbmxp bmUgaW50Cl9fZ3RocmVhZF9zZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IGtleSwgY29uc3Qg dm9pZCAqcHRyKQp7CiAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgcHRyKTsKfQoK c3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X2xvY2sgKF9fZ3RocmVhZF9tdXRleF90 ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVh ZF9tdXRleF9sb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxp bmUgaW50Cl9fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgp CnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhf dHJ5bG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGlu dApfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBp ZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdW5sb2Nr IChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KIyA5OSAiL2hvbWU1L2tyYWtvdy9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMt c3VuLXNvbGFyaXMyLjgvYml0cy9ndGhyLmgiIDIgMwojIDM4ICIvaG9tZTUva3Jha293L2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1z dW4tc29sYXJpczIuOC9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHR5cGVk ZWYgbG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsKCgoKICB0 eXBlZGVmIGZwb3NfdCBfX2Nfc3RyZWFtcG9zOwoKICB0eXBlZGVmIF9fZ3RocmVhZF9tdXRleF90 IF9fY19sb2NrOwoKCgogIHR5cGVkZWYgRklMRSBfX2NfZmlsZV90eXBlOwoKCiAgc3RydWN0IF9f aW9zX2ZsYWdzCiAgewogICAgdHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBj b25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBf X2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2ZpeGVkID0gMHgwMDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgw MDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAg ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1NfcmlnaHQgPSAweDAwODA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2ll bnRpZmljID0gMHgwMTAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2Ug PSAweDAyMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0 MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2lu dF90eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl IF9TX2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4Owog ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAw NDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0 YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19mYWlsYml0ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1NfYXBwID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4 MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGlj IGNvbnN0IF9faW50X3R5cGUgX1NfaW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0g MHgyMDsKICB9Owp9CiMgNDAgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvaG9t ZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs dWRlL2crKy9iaXRzL3N0ZF9jd2NoYXIuaCIgMSAzCiMgMzcgIi9ob21lNS9rcmFrb3cvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rk X2N3Y2hhci5oIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9j Kytjb25maWcuaCIgMSAzCiMgMzggIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMK IyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM5ICIvaG9tZTUva3Jh a293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2cr Ky9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAzCiMgNDIgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2N3Y2hh ci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNsdWRl L3djaGFyLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpd2NoYXIuaAkxLjMzCTk5LzA4LzMwIFNN SSIKCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8zLjAvaW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDEgMyA0CiMgMzAgIi9ob21lNS9rcmFr b3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNv L3djaGFyX2lzby5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXdjaGFyX2lzby5oCTEuMgk5OS8x MS8xMCBTTUkiCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAoj IDMzICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzMuMC9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3Rk aW9fdGFnLmgiIDEgMyA0CiMgMzQgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNvL3djaGFyX2lzby5oIiAyIDMgNAojIDEg Ii91c3IvaW5jbHVkZS93Y2hhcl9pbXBsLmgiIDEgMyA0CiMgOSAiL3Vzci9pbmNsdWRlL3djaGFy X2ltcGwuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyl3Y2hhcl9pbXBsLmgJMS4zCTk5LzA3LzI2 IFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNAojIDEyICIvdXNy L2luY2x1ZGUvd2NoYXJfaW1wbC5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewoKCgoKdHlwZWRlZiBz dHJ1Y3QgX19tYnN0YXRlX3QgewoKCgogICAgICAgIGludCBfX2ZpbGxlcls2XTsKCn0gX19tYnN0 YXRlX3Q7CgoKCn0KIyAzNSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDIgMyA0CiMgMSAiL3Vz ci9pbmNsdWRlL2lzby90aW1lX2lzby5oIiAxIDMgNAojIDM2ICIvaG9tZTUva3Jha293L2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby93Y2hhcl9p c28uaCIgMiAzIDQKCgoKCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMgNAojIDQxICIvaG9tZTUv a3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl L2lzby93Y2hhcl9pc28uaCIgMiAzIDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAz IDQKIyAxNiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpY3R5 cGUuaAkxLjMzCTk5LzA4LzEwIFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL2lzby9jdHlwZV9pc28u aCIgMSAzIDQKIyAyOCAiL3Vzci9pbmNsdWRlL2lzby9jdHlwZV9pc28uaCIgMyA0CiNwcmFnbWEg aWRlbnQgIkAoIyljdHlwZV9pc28uaAkxLjEJOTkvMDgvMDkgU01JIgoKIyAxICIvdXNyL2luY2x1 ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQKIyAzMSAiL3Vzci9pbmNsdWRlL2lzby9jdHlw ZV9pc28uaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsKIyA2MyAiL3Vzci9pbmNsdWRlL2lzby9jdHlw ZV9pc28uaCIgMyA0CmV4dGVybiBpbnQgaXNhbG51bShpbnQpOwpleHRlcm4gaW50IGlzYWxwaGEo aW50KTsKZXh0ZXJuIGludCBpc2NudHJsKGludCk7CmV4dGVybiBpbnQgaXNkaWdpdChpbnQpOwpl eHRlcm4gaW50IGlzZ3JhcGgoaW50KTsKZXh0ZXJuIGludCBpc2xvd2VyKGludCk7CmV4dGVybiBp bnQgaXNwcmludChpbnQpOwpleHRlcm4gaW50IGlzcHVuY3QoaW50KTsKZXh0ZXJuIGludCBpc3Nw YWNlKGludCk7CmV4dGVybiBpbnQgaXN1cHBlcihpbnQpOwpleHRlcm4gaW50IGlzeGRpZ2l0KGlu dCk7CgoKCgoKCgpleHRlcm4gaW50IHRvbG93ZXIoaW50KTsKZXh0ZXJuIGludCB0b3VwcGVyKGlu dCk7CgoKCgoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX19jdHlwZVtdOwpleHRlcm4gdW5zaWduZWQg aW50ICpfX2N0eXBlX21hc2s7CmV4dGVybiBpbnQgKl9fdHJhbnNfdXBwZXI7CmV4dGVybiBpbnQg Kl9fdHJhbnNfbG93ZXI7CiMgMTg2ICIvdXNyL2luY2x1ZGUvaXNvL2N0eXBlX2lzby5oIiAzIDQK fQojIDE5ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzIDQKIyA0MSAiL3Vzci9pbmNsdWRlL2N0 eXBlLmgiIDMgNApleHRlcm4gIkMiIHsKCgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaShpbnQpOwpl eHRlcm4gaW50IHRvYXNjaWkoaW50KTsKZXh0ZXJuIGludCBfdG9sb3dlcihpbnQpOwpleHRlcm4g aW50IF90b3VwcGVyKGludCk7CiMgOTAgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKfQojIDQ1 ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu MC9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMiAzIDQKIyAxICIvaG9tZTUva3Jha293L2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAx IDMgNAojIDQ2ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi44LzMuMC9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMiAzIDQKCgojIDEgIi91c3IvaW5j bHVkZS9zeXMvdmFfbGlzdC5oIiAxIDMgNAojIDQ5ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIg MiAzIDQKCgpleHRlcm4gIkMiIHsKIyA3NiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDMgNAp0 eXBlZGVmIGxvbmcgd2ludF90OwojIDExMyAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDMgNAp0 eXBlZGVmIF9fbWJzdGF0ZV90IG1ic3RhdGVfdDsKIyAxMjQgIi9ob21lNS9rcmFrb3cvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNvL3djaGFyX2lz by5oIiAzIDQKZXh0ZXJuIHdpbnRfdCBmZ2V0d2MoX19GSUxFICopOwpleHRlcm4gd2NoYXJfdCAq ZmdldHdzKHdjaGFyX3QgKiwgaW50LCBfX0ZJTEUgKik7CmV4dGVybiB3aW50X3QgZnB1dHdjKHdp bnRfdCwgX19GSUxFICopOwpleHRlcm4gaW50IGZwdXR3cyhjb25zdCB3Y2hhcl90ICosIF9fRklM RSAqKTsKZXh0ZXJuIHdpbnRfdCB1bmdldHdjKHdpbnRfdCwgX19GSUxFICopOwpleHRlcm4gd2lu dF90IGdldHdjKF9fRklMRSAqKTsKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhcih2b2lkKTsKZXh0ZXJu IHdpbnRfdCBwdXR3Yyh3aW50X3QsIF9fRklMRSAqKTsKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhcih3 aW50X3QpOwpleHRlcm4gZG91YmxlIHdjc3RvZChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiop OwpleHRlcm4gbG9uZyB3Y3N0b2woY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoqLCBpbnQpOwpl eHRlcm4gdW5zaWduZWQgbG9uZyB3Y3N0b3VsKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKiwg aW50KTsKZXh0ZXJuIHdjaGFyX3QgKndjc2NhdCh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7 CmV4dGVybiBpbnQgd2NzY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKZXh0 ZXJuIGludCB3Y3Njb2xsKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJu IHdjaGFyX3QgKndjc2NweSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiBzaXpl X3Qgd2NzY3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiBzaXpl X3Qgd2NzbGVuKGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiB3Y2hhcl90ICp3Y3NuY2F0KHdjaGFy X3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwpleHRlcm4gaW50IHdjc25jbXAoY29uc3Qg d2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CmV4dGVybiB3Y2hhcl90ICp3Y3Nu Y3B5KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwpleHRlcm4gc2l6ZV90IHdj c3Nwbihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiBzaXplX3Qgd2Nz eGZybSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKIyAxNjcgIi9ob21lNS9r cmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUv aXNvL3djaGFyX2lzby5oIiAzIDQKZXh0ZXJuIHdjaGFyX3QgKndjc2Nocihjb25zdCB3Y2hhcl90 ICosIHdjaGFyX3QpOwpleHRlcm4gd2NoYXJfdCAqd2NzcGJyayhjb25zdCB3Y2hhcl90ICosIGNv bnN0IHdjaGFyX3QgKik7CmV4dGVybiB3Y2hhcl90ICp3Y3NyY2hyKGNvbnN0IHdjaGFyX3QgKiwg d2NoYXJfdCk7CiMgMTgzICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby93Y2hhcl9pc28uaCIgMyA0CmV4dGVybiB3Y2hh cl90ICpfX3djc3Rva194cGc1KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICoq KTsKZXh0ZXJuIHNpemVfdCBfX3djc2Z0aW1lX3hwZzUod2NoYXJfdCAqLCBzaXplX3QsIGNvbnN0 IHdjaGFyX3QgKiwKICAgICAgICBjb25zdCBzdHJ1Y3QgdG0gKik7CiMgMTk0ICIvaG9tZTUva3Jh a293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lz by93Y2hhcl9pc28uaCIgMyA0CmV4dGVybiB3aW50X3QgYnRvd2MoaW50KTsKZXh0ZXJuIGludCBm d3ByaW50ZihfX0ZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwpleHRlcm4gaW50IGZ3c2Nh bmYoX19GSUxFICosIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKZXh0ZXJuIGludCBmd2lkZShfX0ZJ TEUgKiwgaW50KTsKZXh0ZXJuIGludCBtYnNpbml0KGNvbnN0IG1ic3RhdGVfdCAqKTsKZXh0ZXJu IHNpemVfdCBtYnJsZW4oY29uc3QgY2hhciAqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKZXh0ZXJu IHNpemVfdCBtYnJ0b3djKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIG1ic3RhdGVf dCAqKTsKZXh0ZXJuIHNpemVfdCBtYnNydG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICoqLCBz aXplX3QsIG1ic3RhdGVfdCAqKTsKZXh0ZXJuIGludCBzd3ByaW50Zih3Y2hhcl90ICosIHNpemVf dCwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOwpleHRlcm4gaW50IHN3c2NhbmYoY29uc3Qgd2NoYXJf dCAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7CmV4dGVybiBpbnQgdmZ3cHJpbnRmKF9fRklMRSAq LCBjb25zdCB3Y2hhcl90ICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQgdndwcmludGYoY29uc3Qg d2NoYXJfdCAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gaW50IHZzd3ByaW50Zih3Y2hhcl90ICosIHNp emVfdCwgY29uc3Qgd2NoYXJfdCAqLCBfX3ZhX2xpc3QpOwpleHRlcm4gc2l6ZV90IHdjcnRvbWIo Y2hhciAqLCB3Y2hhcl90LCBtYnN0YXRlX3QgKik7CmV4dGVybiBzaXplX3Qgd2NzcnRvbWJzKGNo YXIgKiwgY29uc3Qgd2NoYXJfdCAqKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7CmV4dGVybiBpbnQg d2N0b2Iod2ludF90KTsKZXh0ZXJuIGludCB3bWVtY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qg d2NoYXJfdCAqLCBzaXplX3QpOwpleHRlcm4gd2NoYXJfdCAqd21lbWNweSh3Y2hhcl90ICosIGNv bnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlKHdjaGFyX3Qg KiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwpleHRlcm4gd2NoYXJfdCAqd21lbXNldCh3Y2hh cl90ICosIHdjaGFyX3QsIHNpemVfdCk7CmV4dGVybiBpbnQgd3ByaW50Zihjb25zdCB3Y2hhcl90 ICosIC4uLik7CmV4dGVybiBpbnQgd3NjYW5mKGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKIyAyMzAg Ii9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w L2luY2x1ZGUvaXNvL3djaGFyX2lzby5oIiAzIDQKZXh0ZXJuIHdjaGFyX3QgKndjc3N0cihjb25z dCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CmV4dGVybiB3Y2hhcl90ICp3bWVtY2hyKGNv bnN0IHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6ZV90KTsKIyAzMjkgIi9ob21lNS9rcmFrb3cvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNvL3djaGFy X2lzby5oIiAzIDQKZXh0ZXJuIHdpbnRfdCBfX2ZnZXR3Y194cGc1KF9fRklMRSAqKTsKZXh0ZXJu IHdpbnRfdCBfX2dldHdjX3hwZzUoX19GSUxFICopOwpleHRlcm4gd2ludF90IF9fZ2V0d2NoYXJf eHBnNSh2b2lkKTsKZXh0ZXJuIHdpbnRfdCBfX2ZwdXR3Y194cGc1KHdpbnRfdCwgX19GSUxFICop OwpleHRlcm4gd2ludF90IF9fcHV0d2NfeHBnNSh3aW50X3QsIF9fRklMRSAqKTsKZXh0ZXJuIHdp bnRfdCBfX3B1dHdjaGFyX3hwZzUod2ludF90KTsKZXh0ZXJuIHdjaGFyX3QgKl9fZmdldHdzX3hw ZzUod2NoYXJfdCAqLCBpbnQsIF9fRklMRSAqKTsKZXh0ZXJuIGludCBfX2ZwdXR3c194cGc1KGNv bnN0IHdjaGFyX3QgKiwgX19GSUxFICopOwpleHRlcm4gd2ludF90IF9fdW5nZXR3Y194cGc1KHdp bnRfdCwgX19GSUxFICopOwojIDM2NyAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9pc28vd2NoYXJfaXNvLmgiIDMgNAp9CiMg MTIgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAojIDgxICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMyA0CmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgaW50IHdjdHlwZV90OwoKCgoKCgpleHRl cm4gaW50IGlzd2FscGhhKHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3dXBwZXIod2ludF90KTsKZXh0 ZXJuIGludCBpc3dsb3dlcih3aW50X3QpOwpleHRlcm4gaW50IGlzd2RpZ2l0KHdpbnRfdCk7CmV4 dGVybiBpbnQgaXN3eGRpZ2l0KHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3YWxudW0od2ludF90KTsK ZXh0ZXJuIGludCBpc3dzcGFjZSh3aW50X3QpOwpleHRlcm4gaW50IGlzd3B1bmN0KHdpbnRfdCk7 CmV4dGVybiBpbnQgaXN3cHJpbnQod2ludF90KTsKZXh0ZXJuIGludCBpc3dncmFwaCh3aW50X3Qp OwpleHRlcm4gaW50IGlzd2NudHJsKHdpbnRfdCk7CmV4dGVybiBpbnQgaXN3Y3R5cGUod2ludF90 LCB3Y3R5cGVfdCk7CmV4dGVybiB3aW50X3QgdG93bG93ZXIod2ludF90KTsKZXh0ZXJuIHdpbnRf dCB0b3d1cHBlcih3aW50X3QpOwpleHRlcm4gd2NoYXJfdCAqd2Nzd2NzKGNvbnN0IHdjaGFyX3Qg KiwgY29uc3Qgd2NoYXJfdCAqKTsKZXh0ZXJuIGludCB3Y3N3aWR0aChjb25zdCB3Y2hhcl90ICos IHNpemVfdCk7CmV4dGVybiBpbnQgd2N3aWR0aChjb25zdCB3Y2hhcl90KTsKZXh0ZXJuIHdjdHlw ZV90IHdjdHlwZShjb25zdCBjaGFyICopOwojIDE0MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMg NAp9CiMgNDMgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2N3Y2hhci5oIiAyIDMKIyA1NyAiL2hvbWU1 L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk ZS9nKysvYml0cy9zdGRfY3djaGFyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptYnN0 YXRlX3Q7Cn0KIyA0MSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9mcG9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0 ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGZwb3MKICAgIHsK ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX1N0YXRlVCBfX3N0YXRlX3R5cGU7CgogICAgcHJp dmF0ZToKICAgICAgc3RyZWFtb2ZmIF9NX29mZjsKICAgICAgX19zdGF0ZV90eXBlIF9NX3N0OwoK ICAgIHB1YmxpYzoKICAgICAgX19zdGF0ZV90eXBlCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1 cm4gX01fc3Q7IH0KCiAgICAgIHZvaWQKICAgICAgc3RhdGUoX19zdGF0ZV90eXBlIF9fc3QpIHsg X01fc3QgPSBfX3N0OyB9CgoKCiAgICAgIGZwb3MoKTogX01fb2ZmKHN0cmVhbW9mZigpKSwgX01f c3QoX19zdGF0ZV90eXBlKCkpIHsgfQoKICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYsIF9fc3Rh dGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpCiAgICAgIDogX01fb2ZmKF9fb2ZmKSwgX01f c3QoX19zdCkgeyB9CgogICAgICBvcGVyYXRvciBzdHJlYW1vZmYoKSBjb25zdCB7IHJldHVybiBf TV9vZmY7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2ZmKSB7 IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zJgogICAgICBvcGVy YXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0gX19vZmY7IHJldHVybiAqdGhpczsg fQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvcisoc3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAg ICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCArPSBfX29mZjsKICAgICAgICByZXR1 cm4gX190OwogICAgICB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9yLShzdHJlYW1vZmYgX19v ZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190IC09IF9fb2Zm OwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3I9 PShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmID09IF9fcG9z Ll9NX29mZjsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvciE9KGNvbnN0IGZwb3MmIF9fcG9z KSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBz dHJlYW1vZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAg ICAgIHZvaWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiA9IF9f b2ZmOyB9CiAgICB9OwoKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gc3RyZWFtcG9zOwoKCgp9 CiMgNDIgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIvaG9tZTUva3Jh a293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2cr Ky9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhj ZXB0LmgiIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAi L2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv aW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2 b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFk X2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQK ICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJv cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3Qg Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK ICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZs b3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25z dCBjaGFyKiBfX3MpOwp9CiMgNDMgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMK Cm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zOwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh clQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBi YXNpY19pc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAg IHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0 cmluZ2J1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g Y2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0 b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAog ICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNz IGJhc2ljX29zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0Fs bG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0 czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xh c3MgYmFzaWNfaWZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW07 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh aXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBj bGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIG9zdHJlYW1i dWZfaXRlcmF0b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7CgoKICB0eXBlZGVmIGJhc2ljX2lvczxj aGFyPiBpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4gc3RyZWFtYnVmOwogIHR5 cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyPiBpc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmVh bTxjaGFyPiBvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07 CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8Y2hhcj4gc3RyaW5nYnVmOwogIHR5cGVkZWYgYmFz aWNfaXN0cmluZ3N0cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0 cmluZ3N0cmVhbTxjaGFyPiBvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3Ry ZWFtPGNoYXI+IHN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmls ZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlmc3RyZWFtOwogIHR5cGVkZWYg YmFzaWNfb2ZzdHJlYW08Y2hhcj4gb2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPGNo YXI+IGZzdHJlYW07CiMgMTI5ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9pb3Nmd2QuaCIgMwp9CiMg NDAgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv My4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9leGNl cHRpb24iIDEgMwojIDM0ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9leGNlcHRpb24iIDMKZXh0ZXJuICJDKysiIHsK Cm5hbWVzcGFjZSBzdGQKewogIGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNl cHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKICAg IHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCiAgY2xhc3Mg YmFkX2V4Y2VwdGlvbiA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2V4 Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhyb3co KTsKICB9OwoKICB0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVfaGFuZGxlcikgKCk7CiAgdHlwZWRl ZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCiAgdGVybWluYXRlX2hhbmRsZXIgc2V0 X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKICB2b2lkIHRlcm1pbmF0ZSgp IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCiAgdW5leHBlY3RlZF9oYW5kbGVyIHNl dF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKICB2b2lkIHVuZXhwZWN0 ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgogIGJvb2wgdW5jYXVnaHRfZXhj ZXB0aW9uKCkgdGhyb3coKTsKfQoKfQojIDQxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9pb3MuaCIg MiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyAzOCAiL2hvbWU1 L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk ZS9nKysvYml0cy9jaGFyX3RyYWl0cy5oIiAzCgojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nz dHJpbmcuaCIgMSAzCiMgMzcgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdHJpbmcuaCIgMwojIDEg Ii9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w L2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzggIi9ob21lNS9rcmFrb3cv bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2Jp dHMvc3RkX2NzdHJpbmcuaCIgMiAzCiMgNDAgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdHJpbmcu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRl L3N0cmluZy5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXN0cmluZy5oCTEuMjQJOTkvMDgvMTAg U01JIgoKIyAxICIvdXNyL2luY2x1ZGUvaXNvL3N0cmluZ19pc28uaCIgMSAzIDQKIyAyOCAiL3Vz ci9pbmNsdWRlL2lzby9zdHJpbmdfaXNvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpc3RyaW5n X2lzby5oCTEuMgk5OS8xMS8wOSBTTUkiCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1cmVf dGVzdHMuaCIgMSAzIDQKIyAzMiAiL3Vzci9pbmNsdWRlL2lzby9zdHJpbmdfaXNvLmgiIDIgMyA0 CgoKZXh0ZXJuICJDIiB7CiMgNjAgIi91c3IvaW5jbHVkZS9pc28vc3RyaW5nX2lzby5oIiAzIDQK ZXh0ZXJuIGludCBtZW1jbXAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CmV4 dGVybiB2b2lkICptZW1jcHkodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CmV4dGVybiB2 b2lkICptZW1tb3ZlKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCAq bWVtc2V0KHZvaWQgKiwgaW50LCBzaXplX3QpOwpleHRlcm4gY2hhciAqc3RyY2F0KGNoYXIgKiwg Y29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBzdHJjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICopOwpleHRlcm4gY2hhciAqc3RyY3B5KGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGlu dCBzdHJjb2xsKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIHNpemVfdCBzdHJj c3BuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnN0cmVycm9yKGlu dCk7CmV4dGVybiBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJu Y2F0KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gaW50IHN0cm5jbXAoY29u c3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBjaGFyICpzdHJuY3B5KGNo YXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gc2l6ZV90IHN0cnNwbihjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJ0b2soY2hhciAqLCBjb25zdCBj aGFyICopOwpleHRlcm4gc2l6ZV90IHN0cnhmcm0oY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVf dCk7CiMgMTEyICIvdXNyL2luY2x1ZGUvaXNvL3N0cmluZ19pc28uaCIgMyA0CmV4dGVybiB2b2lk ICptZW1jaHIoY29uc3Qgdm9pZCAqLCBpbnQsIHNpemVfdCk7CmV4dGVybiBjaGFyICpzdHJjaHIo Y29uc3QgY2hhciAqLCBpbnQpOwpleHRlcm4gY2hhciAqc3RycGJyayhjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJyY2hyKGNvbnN0IGNoYXIgKiwgaW50KTsKZXh0 ZXJuIGNoYXIgKnN0cnN0cihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiMgMTUxICIvdXNy L2luY2x1ZGUvaXNvL3N0cmluZ19pc28uaCIgMyA0Cn0KIyAxOSAiL3Vzci9pbmNsdWRlL3N0cmlu Zy5oIiAyIDMgNAojIDUxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNApleHRlcm4gIkMiIHsK CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnRva19yKGNoYXIgKiwgY29uc3QgY2hhciAqLCBjaGFyICoq KTsKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBpbnQsIHNp emVfdCk7CgoKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsKGludCk7CmV4dGVybiBpbnQgZmZzKGlu dCk7CmV4dGVybiBpbnQgc3RyY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4 dGVybiBpbnQgc3RybmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7 CmV4dGVybiBzaXplX3Qgc3RybGNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0 ZXJuIHNpemVfdCBzdHJsY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwoKCgoKCmV4 dGVybiBjaGFyICpzdHJkdXAoY29uc3QgY2hhciAqKTsKIyAxMTMgIi91c3IvaW5jbHVkZS9zdHJp bmcuaCIgMyA0Cn0KIyA0MSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0cmluZy5oIiAyIDMKIyA2 NiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3N0cmluZy5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVz aW5nIDo6bWVtY3B5OwogIHVzaW5nIDo6bWVtbW92ZTsKICB1c2luZyA6OnN0cmNweTsKICB1c2lu ZyA6OnN0cm5jcHk7CiAgdXNpbmcgOjpzdHJjYXQ7CiAgdXNpbmcgOjpzdHJuY2F0OwogIHVzaW5n IDo6bWVtY21wOwogIHVzaW5nIDo6c3RyY21wOwogIHVzaW5nIDo6c3RyY29sbDsKICB1c2luZyA6 OnN0cm5jbXA7CiAgdXNpbmcgOjpzdHJ4ZnJtOwogIHVzaW5nIDo6c3RyY3NwbjsKICB1c2luZyA6 OnN0cnNwbjsKICB1c2luZyA6OnN0cnRvazsKICB1c2luZyA6Om1lbXNldDsKICB1c2luZyA6OnN0 cmVycm9yOwogIHVzaW5nIDo6c3RybGVuOwoKICB1c2luZyA6Om1lbWNocjsKCiAgaW5saW5lIHZv aWQqCiAgbWVtY2hyKHZvaWQqIF9fcCwgaW50IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiBt ZW1jaHIoY29uc3RfY2FzdDxjb25zdCB2b2lkKj4oX19wKSwgX19jLCBfX24pOyB9CgogIHVzaW5n IDo6c3RyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikK ICB7IHJldHVybiBfX2J1aWx0aW5fc3RyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEp LCBfX24pOyB9CgogIHVzaW5nIDo6c3RycGJyazsKCiAgaW5saW5lIGNoYXIqCiAgc3RycGJyayhj aGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJwYnJr KGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OnN0cnJj aHI7CgogIGlubGluZSBjaGFyKgogIHN0cnJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJl dHVybiBfX2J1aWx0aW5fc3RycmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19u KTsgfQoKICB1c2luZyA6OnN0cnN0cjsKCiAgaW5saW5lIGNoYXIqCiAgc3Ryc3RyKGNoYXIqIF9f czEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9j YXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KfQojIDQwICIvaG9tZTUva3Jha293L2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRz L2NoYXJfdHJhaXRzLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnBvcy5oIiAxIDMKIyA0 MSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9nKysvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoK CgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0cwogICAgewog ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICB0eXBlZGVmIHVuc2lnbmVkIGxv bmcgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBl ZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlw ZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0 IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJv b2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIp CiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAg bHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg cmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29u c3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAg ICAgIHsKICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfX247ICsrX19pKQogICAg ICAgICAgaWYgKCFlcShfX3MxW19faV0sIF9fczJbX19pXSkpCiAgICAgICAgICAgIHJldHVybiBs dChfX3MxW19faV0sIF9fczJbX19pXSkgPyAtMSA6IDE7CiAgICAgICAgcmV0dXJuIDA7CiAgICAg IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19z KQogICAgICB7CiAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7CiAgICAgICAgd2hp bGUgKCpfX3ApICsrX19wOwogICAgICAgIHJldHVybiAoX19wIC0gX19zKTsKICAgICAgfQoKICAg ICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9f cywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsKICAgICAgICBmb3Ig KGNvbnN0IGNoYXJfdHlwZSogX19wID0gX19zOyBzaXplX3QoX19wIC0gX19zKSA8IF9fbjsgKytf X3ApCiAgICAgICAgICBpZiAoKl9fcCA9PSBfX2EpIHJldHVybiBfX3A7CiAgICAgICAgcmV0dXJu IDA7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBl KiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJu IChjaGFyX3R5cGUqKSBtZW1tb3ZlKF9fczEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFyX3R5cGUp KTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEs IGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gKGNoYXJf dHlwZSopIG1lbWNweShfX3MxLCBfX3MyLCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0KCiAg ICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90 IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgewogICAgICAgIGZvciAoY2hhcl90eXBlKiBfX3Ag PSBfX3M7IF9fcCA8IF9fcyArIF9fbjsgKytfX3ApCiAgICAgICAgICBhc3NpZ24oKl9fcCwgX19h KTsKICAgICAgICByZXR1cm4gX19zOwogICAgICB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAg ICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBjaGFy X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNv bnN0IGNoYXJfdHlwZSYgX19jKSB7IHJldHVybiBpbnRfdHlwZShfX2MpOyB9CgogICAgICBzdGF0 aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50 X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGlj IGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigtMSk7 IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBf X2MpCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkpID8gaW50X3R5cGUoMCkg OiBfX2M7IH0KICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IGNoYXJfdHJhaXRzPGNo YXI+CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgaW50 IGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRl ZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7 CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj aGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29s CiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQog ICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0 KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJl dHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0 IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAg ICB7IHJldHVybiBtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIHNpemVf dAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsgcmV0dXJuIHN0cmxl bihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0 IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcl90eXBlKj4obWVtY2hyKF9fcywgX19hLCBf X24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9f czEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtbW92ZShfX3MxLCBfX3MyLCBfX24pKTsgfQoKICAgICAg c3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJf dHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90 eXBlKj4obWVtY3B5KF9fczEsIF9fczIsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBl KgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2Ep CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbXNldChfX3MsIF9fYSwg X19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0 IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZT4oX19j KTsgfQoKCgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hh cl90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPihzdGF0aWNf Y2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFf aW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAg ICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBl b2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKC0xKSk7IH0KCiAgICAgIHN0YXRp YyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0 dXJuIChfX2MgPT0gZW9mKCkpID8gMCA6IF9fYzsgfQogIH07CiMgMjY0ICIvaG9tZTUva3Jha293 L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9i aXRzL2NoYXJfdHJhaXRzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBzdHJ1Y3QgX0NoYXJfdHJhaXRzX21hdGNoCiAgICB7CiAgICAgIF9DaGFy VCBfTV9jOwogICAgICBfQ2hhcl90cmFpdHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01f YyhfX2MpIHsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19h KSB7IHJldHVybiBfVHJhaXRzOjplcShfTV9jLCBfX2EpOyB9CiAgICB9Owp9CiMgNDIgIi9ob21l NS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1 ZGUvZysrL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3Rk aW8uaCIgMSAzCiMgNDMgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvaG9t ZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs dWRlL2crKy9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyAzOCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9sb2Nh bGVmd2QuaCIgMwoKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2Mr K2NvbmZpZy5oIiAxIDMKIyA0MCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMg MSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jKytsb2NhbGUuaCIgMSAz CiMgMzYgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMy4wL2luY2x1ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvYysrbG9jYWxlLmgi IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdHlwZWRlZiBpbnQqIF9fY19sb2NhbGU7Cn0KIyA0MSAiL2hv bWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5j bHVkZS9nKysvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRf Y2xpbWl0cy5oIiAxIDMKIyAzOCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY2xpbWl0cy5oIiAzCiMg MSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyAxMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9saW1pdHMuaCIgMyA0CiMg MSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzIDQKIyAyNSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9zeXNsaW1pdHMuaCIg MyA0CiNwcmFnbWEgaWRlbnQgIkAoIylsaW1pdHMuaAkxLjUxCTk5LzEwLzA4IFNNSSIKCiMgMSAi L3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgiIDEgMyA0CiMgMjggIi9ob21lNS9rcmFr b3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lz bGltaXRzLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNAoj IDI5ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzMuMC9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9pc28vbGlt aXRzX2lzby5oIiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUvaXNvL2xpbWl0c19pc28uaCIgMyA0 CiNwcmFnbWEgaWRlbnQgIkAoIylsaW1pdHNfaXNvLmgJMS4xCTk5LzA4LzA5IFNNSSIKCgpleHRl cm4gIkMiIHsKIyA3NSAiL3Vzci9pbmNsdWRlL2lzby9saW1pdHNfaXNvLmgiIDMgNAp9CiMgMzAg Ii9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w L2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMyA0CiMgNDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMg NAojIDEgIi91c3IvaW5jbHVkZS9zeXMvaW50X2xpbWl0cy5oIiAxIDMgNAojIDkgIi91c3IvaW5j bHVkZS9zeXMvaW50X2xpbWl0cy5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWludF9saW1pdHMu aAkxLjYJOTkvMDgvMDYgU01JIgojIDQ0ICIvdXNyL2luY2x1ZGUvc3lzL2ludF9saW1pdHMuaCIg MyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNAojIDQ1ICIvdXNyL2lu Y2x1ZGUvc3lzL2ludF9saW1pdHMuaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsKIyAxNjIgIi91c3Iv aW5jbHVkZS9zeXMvaW50X2xpbWl0cy5oIiAzIDQKfQojIDQyICIvaG9tZTUva3Jha293L2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5c2xpbWl0cy5o IiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKIyAyNjggIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNAoj IDEgIi91c3IvaW5jbHVkZS9zeXMvdW5pc3RkLmgiIDEgMyA0CiMgMjUgIi91c3IvaW5jbHVkZS9z eXMvdW5pc3RkLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpdW5pc3RkLmgJMS4zNwk5OC8xMC8y OCBTTUkiCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDI4 ICIvdXNyL2luY2x1ZGUvc3lzL3VuaXN0ZC5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDI2NSAi L3Vzci9pbmNsdWRlL3N5cy91bmlzdGQuaCIgMyA0Cn0KIyAyNjkgIi9ob21lNS9rcmFrb3cvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzbGltaXRz LmgiIDIgMyA0CiMgMjc5ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL3N5c2xpbWl0cy5oIiAzIDQKZXh0ZXJuIGxvbmcgX3N5 c2NvbmYoaW50KTsKIyAyODkgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNAp9CiMgMTIgIi9ob21l NS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1 ZGUvbGltaXRzLmgiIDIgMyA0CiMgMzkgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NsaW1pdHMuaCIg MiAzCiMgNDIgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi9ob21lNS9r cmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUv ZysrL2JpdHMvc3RkX3N0cmluZy5oIiAxIDMKIyAzOCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfc3Ry aW5nLmgiIDMKCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jKytj b25maWcuaCIgMSAzCiMgNDAgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAx ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu MC9pbmNsdWRlL2crKy9iaXRzL3N0cmluZ2Z3ZC5oIiAxIDMKIyA0MSAiL2hvbWU1L2tyYWtvdy9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0 cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvY2hhcl90cmFpdHMuaCIg MSAzCiMgNDIgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAxICIvaG9tZTUv a3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl L2crKy9iaXRzL3N0ZF9pdGVyYXRvci5oIiAxIDMKIyAzMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRf aXRlcmF0b3IuaCIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMv YysrY29uZmlnLmgiIDEgMwojIDMyICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9pdGVyYXRvci5oIiAy IDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDMzICIvaG9tZTUv a3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl L2crKy9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9p b3Nmd2QuaCIgMSAzCiMgMzQgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwoj IDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv My4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNDAg Ii9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w L2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwoKbmFtZXNwYWNl IHN0ZAp7CgpzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0X2l0ZXJh dG9yX3RhZyB7fTsKc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0 ZXJhdG9yX3RhZyB7fTsKc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGlj IGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90 YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CgoKCgoKCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsKICB0 eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9U cCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl ZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKc3RydWN0IG91 dHB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh dGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJl bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5j ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGZvcndh cmRfaXRlcmF0b3IgewogIHR5cGVkZWYgZm9yd2FyZF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0 ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZm ZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVy ZW5jZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBi aWRpcmVjdGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf dGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRl ZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5 cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlz dGFuY2U+IHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJhbmRvbV9h Y2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVl X3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1Rw KiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0NhdGVnb3J5LCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdCwKICAgICAg ICAgIGNsYXNzIF9Qb2ludGVyID0gX1RwKiwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCY+CnN0cnVj dCBpdGVyYXRvciB7CiAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlw ZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7 CiAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVu Y2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRz IHsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0 b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgdmFs dWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlIGRp ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2lu dGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAg dHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0 eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlw ZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoK dGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7 CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK ICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf dHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYg cmVmZXJlbmNlOwp9OwojIDE0MCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90 eXBlcy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cl9faXRlcmF0b3JfY2F0ZWdvcnkoY29u c3QgX0l0ZXImKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojpp dGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAgcmV0dXJuIF9DYXRlZ29yeSgpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+ OjpkaWZmZXJlbmNlX3R5cGUqCl9fZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYpCnsKICByZXR1 cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5j ZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqCl9fdmFsdWVfdHlwZShjb25zdCBfSXRl ciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy Pjo6dmFsdWVfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQppdGVyYXRvcl9j YXRlZ29yeShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f aSk7IH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXIm IF9faSkgeyByZXR1cm4gX19kaXN0YW5jZV90eXBlKF9faSk7IH0KCnRlbXBsYXRlIDxjbGFzcyBf SXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUq CnZhbHVlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX192YWx1ZV90eXBlKF9faSk7 IH0KCn0KIyAzNSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgMSAiL2hv bWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5j bHVkZS9nKysvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA0MCAiL2hvbWU1 L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk ZS9nKysvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiMgMSAiL2hvbWU1L2tyYWtv dy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysv Yml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM0ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2NvbmNlcHRf Y2hlY2suaCIgMwoKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL2Mr K2NvbmZpZy5oIiAxIDMKIyAzNiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9jb25jZXB0X2NoZWNrLmgiIDIg MwojIDQxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoK bmFtZXNwYWNlIHN0ZAp7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFz cyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j ZSYgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHdoaWxlIChfX2Zp cnN0ICE9IF9fbGFzdCkgeyArK19fZmlyc3Q7ICsrX19uOyB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf UmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0 YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9E aXN0YW5jZSYgX19uLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNl KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh dG9yIF9fbGFzdCwgX0Rpc3RhbmNlJiBfX24pCnsKCiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xh c3QsIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5j ZV90eXBlIF9fbiA9IDA7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fZmly c3Q7ICsrX19uOwogIH0KICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl c3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIHJh bmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog IHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm ZXJlbmNlX3R5cGUKZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0 b3IgX19sYXN0KQp7CgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0 ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9DYXRlZ29yeTsKICByZXR1cm4gX19kaXN0 YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9DYXRlZ29yeSgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9JbnB1dEl0 ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog IHdoaWxlIChfX24tLSkgKytfX2k7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0 ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfQmlkaXJlY3Rp b25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICBi aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICBpZiAoX19uID4gMCkKICAgIHdoaWxlIChfX24tLSkgKytfX2k7CiAgZWxzZQogICAgd2hpbGUg KF9fbisrKSAtLV9faTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNj ZXNzX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBfX2kgKz0g X19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4K aW5saW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uKQp7 CgogIF9fYWR2YW5jZShfX2ksIF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19pKSk7Cn0KCn0KIyAz NiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtv dy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysv Yml0cy9zdGxfaXRlcmF0b3IuaCIgMSAzCiMgMzQgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJh dG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xh c3MgYmFja19pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFp bmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVk ZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQg dmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9p ZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGJhY2tfaW5z ZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBiYWNr X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUg X0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgY29udGFpbmVyLT5wdXNoX2Jh Y2soX192YWx1ZSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y PF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0 X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBi YWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJu ICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGJhY2tfaW5z ZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7 CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3Igewpwcm90 ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFp bmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRv cl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlm ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZl cmVuY2U7CgogIGV4cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gp IDogY29udGFpbmVyKCZfX3gpIHt9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+ JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3Zh bHVlKSB7CiAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7CiAgICByZXR1cm4gKnRo aXM7CiAgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkg eyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9w ZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29u dGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy PiBmcm9udF9pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpIHsKICByZXR1cm4gZnJvbnRfaW5zZXJ0 X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVy PgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFp bmVyOwogIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CnB1YmxpYzoKICB0eXBl ZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3Jf dGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVk ZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRl ZiB2b2lkIHJlZmVyZW5jZTsKCiAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlw ZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pKQogICAgOiBjb250YWluZXIoJl9feCksIGl0 ZXIoX19pKSB7fQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29u c3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192YWx1ZSkgewogICAgaXRlciA9 IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOwogICAgKytpdGVyOwogICAgcmV0dXJu ICp0aGlzOwogIH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsg cmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisr KCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJh dG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWlu ZXIsIGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBp bnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVu YW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9y PF9Db250YWluZXI+KF9feCwgX19pdGVyKF9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGly ZWN0aW9uYWxJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwKICAg ICAgICAgIGNsYXNzIF9EaXN0YW5jZSA9IHB0cmRpZmZfdD4KY2xhc3MgcmV2ZXJzZV9iaWRpcmVj dGlvbmFsX2l0ZXJhdG9yIHsKICB0eXBlZGVmIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRv cjxfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBfVHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1JlZmVyZW5jZSwgX0Rpc3RhbmNlPiBfU2VsZjsKcHJvdGVjdGVkOgog IF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgYmlkaXJl Y3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFs dWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBf VHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9i aWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9u YWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3gpCiAgICA6IGN1cnJlbnQoX194 KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJl bnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9CaWRpcmVjdGlvbmFs SXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KICBwb2lu dGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQogIF9TZWxm JiBvcGVyYXRvcisrKCkgewogICAgLS1jdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBf U2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIC0tY3Vy cmVudDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7CiAgICAr K2N1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yLS0oaW50KSB7 CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKytjdXJyZW50OwogICAgcmV0dXJuIF9fdG1w OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYs IGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PSgKICAgIGNvbnN0IHJldmVy c2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4m IF9feCwKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBf VHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkKewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5i YXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYs IGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPSgKICAgIGNvbnN0IHJldmVy c2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4m IF9feCwKICAgIGNvbnN0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBf VHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkKewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CiMg MTkzICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf SXRlcmF0b3I+CmNsYXNzIHJldmVyc2VfaXRlcmF0b3IKewpwcm90ZWN0ZWQ6CiAgX0l0ZXJhdG9y IGN1cnJlbnQ7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl cmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQog ICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyCiAgICAg ICAgICBwb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRv cj46OnJlZmVyZW5jZQogICAgICAgICAgcmVmZXJlbmNlOwoKICB0eXBlZGVmIF9JdGVyYXRvciBp dGVyYXRvcl90eXBlOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+IF9TZWxm OwoKcHVibGljOgogIHJldmVyc2VfaXRlcmF0b3IoKSB7fQogIGV4cGxpY2l0IHJldmVyc2VfaXRl cmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDogY3VycmVudChfX3gpIHt9CgogIHJldmVyc2VfaXRl cmF0b3IoY29uc3QgX1NlbGYmIF9feCkgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7fQogIHRlbXBs YXRlIDxjbGFzcyBfSXRlcj4KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0 b3I8X0l0ZXI+JiBfX3gpCiAgICA6IGN1cnJlbnQoX194LmJhc2UoKSkge30KCiAgaXRlcmF0b3Jf dHlwZSBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQogIHJlZmVyZW5jZSBvcGVyYXRv ciooKSBjb25zdCB7CiAgICBfSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICot LV9fdG1wOwogIH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJh dG9yKigpKTsgfQoKICBfU2VsZiYgb3BlcmF0b3IrKygpIHsKICAgIC0tY3VycmVudDsKICAgIHJl dHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1w ID0gKnRoaXM7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBv cGVyYXRvci0tKCkgewogICAgKytjdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2Vs ZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICsrY3VycmVu dDsKICAgIHJldHVybiBfX3RtcDsKICB9CgogIF9TZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5 cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gX1NlbGYoY3VycmVudCAtIF9fbik7CiAgfQogIF9T ZWxmJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgLT0gX19u OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBl IF9fbikgY29uc3QgewogICAgcmV0dXJuIF9TZWxmKGN1cnJlbnQgKyBfX24pOwogIH0KICBfU2Vs ZiYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50ICs9IF9fbjsK ICAgIHJldHVybiAqdGhpczsKICB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90 eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0KfTsKCnRlbXBsYXRlIDxj bGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVy YXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJz ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3ku YmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRv cjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAg ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVy biBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4K aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4m IF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy YXRvcj4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf SXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJh dG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVy YXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJz ZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29u c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBf X3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgcmV2ZXJz ZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKb3BlcmF0b3ItKGNvbnN0IHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9p dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNl KCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSByZXZlcnNlX2l0ZXJhdG9y PF9JdGVyYXRvcj4Kb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y Pjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8 X0l0ZXJhdG9yPiYgX194KSB7CiAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihf X3guYmFzZSgpIC0gX19uKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsCiAgICAgICAgICBjbGFz cyBfQ2hhclQgPSBjaGFyLCBjbGFzcyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAg ICAgICAgIGNsYXNzIF9EaXN0ID0gcHRyZGlmZl90PgpjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsK cHVibGljOgogIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICB0eXBlZGVmIF9UcmFpdHMgdHJh aXRzX3R5cGU7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVh bV90eXBlOwoKICB0eXBlZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK ICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3QgZGlmZmVyZW5jZV90eXBl OwogIHR5cGVkZWYgY29uc3QgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiByZWZl cmVuY2U7CgogIGlzdHJlYW1faXRlcmF0b3IoKSA6IF9NX3N0cmVhbSgwKSwgX01fb2soZmFsc2Up IHt9CiAgaXN0cmVhbV9pdGVyYXRvcihpc3RyZWFtX3R5cGUmIF9fcykgOiBfTV9zdHJlYW0oJl9f cykgeyBfTV9yZWFkKCk7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJu IF9NX3ZhbHVlOyB9CiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVy YXRvciooKSk7IH0KCiAgaXN0cmVhbV9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX3Jl YWQoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXN0cmVhbV9pdGVyYXRvciBvcGVyYXRvcisr KGludCkgewogICAgaXN0cmVhbV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fcmVhZCgp OwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgYm9vbCBfTV9lcXVhbChjb25zdCBpc3RyZWFtX2l0 ZXJhdG9yJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX01fb2sgPT0gX194Ll9NX29rKSAmJiAo IV9NX29rIHx8IF9NX3N0cmVhbSA9PSBfX3guX01fc3RyZWFtKTsgfQoKcHJpdmF0ZToKICBpc3Ry ZWFtX3R5cGUqIF9NX3N0cmVhbTsKICBfVHAgX01fdmFsdWU7CiAgYm9vbCBfTV9vazsKCiAgdm9p ZCBfTV9yZWFkKCkgewogICAgX01fb2sgPSAoX01fc3RyZWFtICYmICpfTV9zdHJlYW0pID8gdHJ1 ZSA6IGZhbHNlOwogICAgaWYgKF9NX29rKSB7CiAgICAgICpfTV9zdHJlYW0gPj4gX01fdmFsdWU7 CiAgICAgIF9NX29rID0gKl9NX3N0cmVhbSA/IHRydWUgOiBmYWxzZTsKICAgIH0KICB9Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9E aXN0PgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBf Q2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX194LAogICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRl cmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX195KSB7CiAgcmV0dXJuIF9feC5f TV9lcXVhbChfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ2hhclQsIGNsYXNz IF9UcmFpdHMsIGNsYXNzIF9EaXN0PgppbmxpbmUgYm9vbApvcGVyYXRvciE9KGNvbnN0IGlzdHJl YW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX194LAogICAgICAgICAg IGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX195 KSB7CiAgcmV0dXJuICFfX3guX01fZXF1YWwoX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs CiAgICAgICAgICBjbGFzcyBfQ2hhclQgPSBjaGFyLCBjbGFzcyBfVHJhaXRzID0gY2hhcl90cmFp dHM8X0NoYXJUPiA+CmNsYXNzIG9zdHJlYW1faXRlcmF0b3IgewpwdWJsaWM6CiAgdHlwZWRlZiBf Q2hhclQgY2hhcl90eXBlOwogIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICB0eXBlZGVm IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7CgogIHR5cGVkZWYg b3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFs dWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBw b2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIG9zdHJlYW1faXRlcmF0b3Iob3N0 cmVhbV90eXBlJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoMCkge30KICBvc3Ry ZWFtX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zLCBjb25zdCBfQ2hhclQqIF9fYykKICAgIDog X01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoX19jKSB7fQogIG9zdHJlYW1faXRlcmF0b3I8X1Rw PiYgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX192YWx1ZSkgewogICAgKl9NX3N0cmVhbSA8PCBfX3Zh bHVlOwogICAgaWYgKF9NX3N0cmluZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICByZXR1 cm4gKnRoaXM7CiAgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyByZXR1 cm4gKnRoaXM7IH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVy biAqdGhpczsgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0 dXJuICp0aGlzOyB9CnByaXZhdGU6CiAgb3N0cmVhbV90eXBlKiBfTV9zdHJlYW07CiAgY29uc3Qg X0NoYXJUKiBfTV9zdHJpbmc7Cn07CiMgNDE3ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRv ci5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4K Y2xhc3MgX19ub3JtYWxfaXRlcmF0b3IKICA6IHB1YmxpYyBpdGVyYXRvcjxpdGVyYXRvcl90cmFp dHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgaXRl cmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAg aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICAgICAg ICAgICAgICBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAg ICAgICAgICBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgp7Cgpwcm90ZWN0 ZWQ6CiAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7CgpwdWJsaWM6CiAgdHlwZWRlZiBfX25vcm1hbF9p dGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+IG5vcm1hbF9pdGVyYXRvcl90eXBlOwogIHR5 cGVkZWYgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj4gX190cmFpdHNfdHlwZTsKICB0eXBlZGVm IHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVn b3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6dmFsdWVfdHlwZSB2YWx1ZV90 eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRp ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnBvaW50ZXIg cG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnJlZmVyZW5jZSByZWZl cmVuY2U7CgogIF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7 IH0KCiAgZXhwbGljaXQgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2kpIDog X01fY3VycmVudChfX2kpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgaW5saW5l IF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyLCBfQ29udGFp bmVyPiYgX19pKQogICAgOiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQoKCiAgcmVmZXJlbmNl CiAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cnJlbnQ7IH0KCiAgcG9pbnRlcgog IG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CgogIG5vcm1hbF9pdGVy YXRvcl90eXBlJgogIG9wZXJhdG9yKysoKSB7ICsrX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9 CgogIG5vcm1hbF9pdGVyYXRvcl90eXBlCiAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9y bWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQrKyk7IH0KCgogIG5vcm1hbF9pdGVyYXRvcl90eXBlJgog IG9wZXJhdG9yLS0oKSB7IC0tX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9p dGVyYXRvcl90eXBlCiAgb3BlcmF0b3ItLShpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9y KF9NX2N1cnJlbnQtLSk7IH0KCgogIHJlZmVyZW5jZQogIG9wZXJhdG9yW10oY29uc3QgZGlmZmVy ZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgeyByZXR1cm4gX01fY3VycmVudFtfX25dOyB9CgogIG5v cm1hbF9pdGVyYXRvcl90eXBlJgogIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBf X24pCiAgeyBfTV9jdXJyZW50ICs9IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9pdGVy YXRvcl90eXBlCiAgb3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAog IHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgKyBfX24pOyB9CgogIG5vcm1h bF9pdGVyYXRvcl90eXBlJgogIG9wZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24p CiAgeyBfTV9jdXJyZW50IC09IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9pdGVyYXRv cl90eXBlCiAgb3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsg cmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgLSBfX24pOyB9CgogIGRpZmZlcmVu Y2VfdHlwZQogIG9wZXJhdG9yLShjb25zdCBub3JtYWxfaXRlcmF0b3JfdHlwZSYgX19pKSBjb25z dAogIHsgcmV0dXJuIF9NX2N1cnJlbnQgLSBfX2kuX01fY3VycmVudDsgfQoKICBjb25zdCBfSXRl cmF0b3ImCiAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KfTsKCgoKdGVtcGxh dGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0Nv bnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf SXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiBfX2xocy5i YXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0 eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgppbmxpbmUgYm9vbApvcGVy YXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBf X2xocywKICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29u dGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CgoKCnRlbXBsYXRl PHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250 YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVy YXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuIF9fbGhzLmJhc2Uo KSA8IF9fcmhzLmJhc2UoKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5h bWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+ KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywK ICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+ JiBfX3JocykKeyByZXR1cm4gX19yaHMgPCBfX2xoczsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0 ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5l IGJvb2wKb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29u dGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh dG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fcmhzIDwgX19saHMpOyB9Cgp0 ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFt ZSBfQ29udGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJh dG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICBjb25zdCBfX25v cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuICEo X19saHMgPCBfX3Jocyk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUg X0NvbnRhaW5lcj4KaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5l cj4Kb3BlcmF0b3IrKF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj46OmRp ZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3IsIF9Db250YWluZXI+JiBfX2kpCnsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy YXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0KCn0KIyAzNyAiL2hvbWU1L2ty YWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9n KysvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgNDMgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3N0 cmluZy5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9tZW1vcnkuaCIgMSAzCiMgMTkg Ii9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w L2luY2x1ZGUvZysrL2JpdHMvc3RkX21lbW9yeS5oIiAzCgojIDEgIi9ob21lNS9rcmFrb3cvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMv c3RsX2FsZ29iYXNlLmgiIDEgMwojIDM1ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvYmFzZS5o IiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jKytjb25maWcu aCIgMSAzCiMgMzYgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIv aG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9p bmNsdWRlL2crKy9iaXRzL3N0bF9wYWlyLmgiIDEgMwojIDM0ICIvaG9tZTUva3Jha293L2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0 bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf VDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1Qy IHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKCgogIHBhaXIoKSA6IGZp cnN0KCksIHNlY29uZCgpIHt9CgoKCiAgcGFpcihjb25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBf X2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwg Y2xhc3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3Au Zmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNs YXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194 LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3ku Zmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx LCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYg X194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9f eS5maXJzdCB8fAogICAgICAgICAoIShfX3kuZmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNv bmQgPCBfX3kuc2Vjb25kKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxp bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8 X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEs IF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBf X3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0 b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195 KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg X1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNv bnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2Vf cGFpcihfVDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwg X195KTsKfQoKfQojIDM4ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgoj IDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv My4wL2luY2x1ZGUvZysrL2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzCiMgMTkgIi9ob21lNS9rcmFr b3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr L2JpdHMvdHlwZV90cmFpdHMuaCIgMwoKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJp czIuOC9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAyMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy90eXBlX3Ry YWl0cy5oIiAyIDMKIyA1NyAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy90eXBlX3RyYWl0cy5oIiAzCnRlbXBs YXRlIDxib29sIF9UcnV0aD4gc3RydWN0IF9Cb29sIHt9Owp0eXBlZGVmIF9Cb29sPHRydWU+IF9f dHJ1ZV90eXBlOwp0eXBlZGVmIF9Cb29sPGZhbHNlPiBfX2ZhbHNlX3R5cGU7Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg dGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKIyA4MSAiL2hvbWU1L2tyYWtvdy9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy90 eXBlX3RyYWl0cy5oIiAzCiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2RlZmF1 bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2NvcHlf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0 b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKdGVtcGxhdGU8 PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxib29sPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRl bXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7 Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWdu ZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5 cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Nv cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdu bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBz dHJ1Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19Q T0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWdu ZWQgaW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlw ZV90cmFpdHM8bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1 bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50 X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj dCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9Owoj IDE5OSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu OC8zLjAvaW5jbHVkZS9nKysvYml0cy90eXBlX3RyYWl0cy5oIiAzCnRlbXBsYXRlPD4gc3RydWN0 IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8 PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGRvdWJsZT4gewogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf UE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0czxf VHAqPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBz dHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19mYWxzZV90eXBlIF9JbnRlZ3JhbDsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsK ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9J c19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7 Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBjaGFyPiB7CiAgdHlw ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50 ZWdlcjx3Y2hhcl90PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1w bGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hv cnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3Ry dWN0IF9Jc19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9 OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgaW50PiB7CiAgdHlwZWRl ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl cjxsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlw ZSBfSW50ZWdyYWw7Cn07CiMgMjk2ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3R5cGVfdHJhaXRzLmgiIDMK dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvciB7CiAgIHR5 cGVkZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7Cn07CgoKbmFtZXNwYWNlIHN0ZCB7CiAgIHRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3Jt YWxfaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9D b250YWluZXI+CnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBzdGQ6Ol9fbm9ybWFsX2l0ZXJh dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05v cm1hbDsKfTsKIyA0MSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEg Ii9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w L2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzCiMgNDMgIi9ob21lNS9rcmFrb3cv bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2Jp dHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NsaW1pdHMu aCIgMSAzCiMgNDQgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9o b21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2lu Y2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRsaWIuaCIgMSAzCiMgMzcgIi9ob21lNS9rcmFrb3cvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMv c3RkX2NzdGRsaWIuaCIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2Jp dHMvYysrY29uZmlnLmgiIDEgMwojIDM4ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkbGliLmgi IDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzkgIi9ob21l NS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1 ZGUvZysrL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzCiMgNDEgIi9ob21lNS9rcmFrb3cvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rk X2NzdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzIDQKIyAxNiAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXN0ZGxpYi5oCTEuNDcJ OTkvMTEvMDMgU01JIgoKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby9zdGRsaWJfaXNvLmgiIDEgMyA0CiMgMzcg Ii9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w L2luY2x1ZGUvaXNvL3N0ZGxpYl9pc28uaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylzdGRsaWJf aXNvLmgJMS4yCTk5LzEyLzIxIFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rl c3RzLmgiIDEgMyA0CiMgNDAgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvaXNvL3N0ZGxpYl9pc28uaCIgMiAzIDQKCgpleHRl cm4gIkMiIHsKCgoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX19jdHlwZVtdOwojIDU3ICIvaG9tZTUv a3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl L2lzby9zdGRsaWJfaXNvLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgaW50IHF1b3Q7 CiAgICAgICAgaW50IHJlbTsKfSBkaXZfdDsKCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICBsb25n IHF1b3Q7CiAgICAgICAgbG9uZyByZW07Cn0gbGRpdl90OwojIDEwMyAiL2hvbWU1L2tyYWtvdy9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9pc28vc3Rk bGliX2lzby5oIiAzIDQKZXh0ZXJuIHZvaWQgYWJvcnQodm9pZCk7CmV4dGVybiBpbnQgYWJzKGlu dCk7CmV4dGVybiBpbnQgYXRleGl0KHZvaWQgKCopKHZvaWQpKTsKZXh0ZXJuIGRvdWJsZSBhdG9m KGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgYXRvaShjb25zdCBjaGFyICopOwpleHRlcm4gbG9u ZyBpbnQgYXRvbChjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCAqYnNlYXJjaChjb25zdCB2b2lk ICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsCiAgICAgICAgaW50ICgqKShjb25zdCB2 b2lkICosIGNvbnN0IHZvaWQgKikpOwpleHRlcm4gdm9pZCAqY2FsbG9jKHNpemVfdCwgc2l6ZV90 KTsKZXh0ZXJuIGRpdl90IGRpdihpbnQsIGludCk7CmV4dGVybiB2b2lkIGV4aXQoaW50KTsKZXh0 ZXJuIHZvaWQgZnJlZSh2b2lkICopOwpleHRlcm4gY2hhciAqZ2V0ZW52KGNvbnN0IGNoYXIgKik7 CmV4dGVybiBsb25nIGludCBsYWJzKGxvbmcpOwpleHRlcm4gbGRpdl90IGxkaXYobG9uZywgbG9u Zyk7CmV4dGVybiB2b2lkICptYWxsb2Moc2l6ZV90KTsKZXh0ZXJuIGludCBtYmxlbihjb25zdCBj aGFyICosIHNpemVfdCk7CmV4dGVybiBzaXplX3QgbWJzdG93Y3Mod2NoYXJfdCAqLCBjb25zdCBj aGFyICosIHNpemVfdCk7CmV4dGVybiBpbnQgbWJ0b3djKHdjaGFyX3QgKiwgY29uc3QgY2hhciAq LCBzaXplX3QpOwpleHRlcm4gdm9pZCBxc29ydCh2b2lkICosIHNpemVfdCwgc2l6ZV90LAogICAg ICAgIGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKZXh0ZXJuIGludCByYW5k KHZvaWQpOwpleHRlcm4gdm9pZCAqcmVhbGxvYyh2b2lkICosIHNpemVfdCk7CmV4dGVybiB2b2lk IHNyYW5kKHVuc2lnbmVkIGludCk7CmV4dGVybiBkb3VibGUgc3RydG9kKGNvbnN0IGNoYXIgKiwg Y2hhciAqKik7CmV4dGVybiBsb25nIGludCBzdHJ0b2woY29uc3QgY2hhciAqLCBjaGFyICoqLCBp bnQpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bChjb25zdCBjaGFyICosIGNoYXIg KiosIGludCk7CmV4dGVybiBpbnQgc3lzdGVtKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgd2N0 b21iKGNoYXIgKiwgd2NoYXJfdCk7CmV4dGVybiBzaXplX3Qgd2NzdG9tYnMoY2hhciAqLCBjb25z dCB3Y2hhcl90ICosIHNpemVfdCk7CiMgMTcyICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2lzby9zdGRsaWJfaXNvLmgiIDMg NAp9CiMgMTkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCgoKIyAxICIvdXNyL2luY2x1 ZGUvc3lzL3dhaXQuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDMgNAoj cHJhZ21hIGlkZW50ICJAKCMpd2FpdC5oCTEuMjEJOTcvMDQvMDggU01JIgoKIyAxICIvdXNyL2lu Y2x1ZGUvc3lzL2ZlYXR1cmVfdGVzdHMuaCIgMSAzIDQKIyAxOSAiL3Vzci9pbmNsdWRlL3N5cy93 YWl0LmgiIDIgMyA0CgojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMjEgIi91c3Iv aW5jbHVkZS9zeXMvd2FpdC5oIiAyIDMgNAoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3Vy Y2UuaCIgMSAzIDQKIyAxNiAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQKI3ByYWdt YSBpZGVudCAiQCgjKXJlc291cmNlLmgJMS4yNQk5OC8wNi8zMCBTTUkiCgojIDEgIi91c3IvaW5j bHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDE5ICIvdXNyL2luY2x1ZGUvc3lzL3Jl c291cmNlLmgiIDIgMyA0CgojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMjEgIi91 c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Rp bWUuaCIgMSAzIDQKIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAyIDMgNAoKCmV4 dGVybiAiQyIgewojIDY3ICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNAp0eXBlZGVm IHVuc2lnbmVkIGxvbmcgcmxpbV90OwojIDEwMiAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5o IiAzIDQKc3RydWN0IHJsaW1pdCB7CiAgICAgICAgcmxpbV90IHJsaW1fY3VyOwogICAgICAgIHJs aW1fdCBybGltX21heDsKfTsKCgoKCnR5cGVkZWYgdV9sb25nbG9uZ190IHJsaW02NF90OwoKCgoK CnN0cnVjdCBybGltaXQ2NCB7CiAgICAgICAgcmxpbTY0X3QgcmxpbV9jdXI7CiAgICAgICAgcmxp bTY0X3QgcmxpbV9tYXg7Cn07CiMgMTQzICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMg NApzdHJ1Y3QgcnVzYWdlIHsKICAgICAgICBzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsKICAgICAg ICBzdHJ1Y3QgdGltZXZhbCBydV9zdGltZTsKICAgICAgICBsb25nIHJ1X21heHJzczsKICAgICAg ICBsb25nIHJ1X2l4cnNzOwogICAgICAgIGxvbmcgcnVfaWRyc3M7CiAgICAgICAgbG9uZyBydV9p c3JzczsKICAgICAgICBsb25nIHJ1X21pbmZsdDsKICAgICAgICBsb25nIHJ1X21hamZsdDsKICAg ICAgICBsb25nIHJ1X25zd2FwOwogICAgICAgIGxvbmcgcnVfaW5ibG9jazsKICAgICAgICBsb25n IHJ1X291YmxvY2s7CiAgICAgICAgbG9uZyBydV9tc2dzbmQ7CiAgICAgICAgbG9uZyBydV9tc2dy Y3Y7CiAgICAgICAgbG9uZyBydV9uc2lnbmFsczsKICAgICAgICBsb25nIHJ1X252Y3N3OwogICAg ICAgIGxvbmcgcnVfbml2Y3N3Owp9OwojIDE5MyAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5o IiAzIDQKZXh0ZXJuIGludCBzZXRybGltaXQoaW50LCBjb25zdCBzdHJ1Y3QgcmxpbWl0ICopOwpl eHRlcm4gaW50IGdldHJsaW1pdChpbnQsIHN0cnVjdCBybGltaXQgKik7CgoKCgpleHRlcm4gaW50 IHNldHJsaW1pdDY0KGludCwgY29uc3Qgc3RydWN0IHJsaW1pdDY0ICopOwpleHRlcm4gaW50IGdl dHJsaW1pdDY0KGludCwgc3RydWN0IHJsaW1pdDY0ICopOwoKCmV4dGVybiBpbnQgZ2V0cHJpb3Jp dHkoaW50LCBpZF90KTsKZXh0ZXJuIGludCBzZXRwcmlvcml0eShpbnQsIGlkX3QsIGludCk7CmV4 dGVybiBpbnQgZ2V0cnVzYWdlKGludCwgc3RydWN0IHJ1c2FnZSAqKTsKIyAyMjggIi91c3IvaW5j bHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0Cn0KIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy93YWl0Lmgi IDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDEgMyA0CiMgMTYgIi91c3Iv aW5jbHVkZS9zeXMvc2lnaW5mby5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKXNpZ2luZm8uaAkx LjU0CTk4LzAzLzI3IFNNSSIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0dXJlX3Rlc3RzLmgi IDEgMyA0CiMgMTkgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAyIDMgNAojIDEgIi9ob21l NS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMjAgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAy IDMgNAoKCmV4dGVybiAiQyIgewojIDEyNiAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDMg NAojIDEgIi91c3IvaW5jbHVkZS9zeXMvbWFjaHNpZy5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1 ZGUvc3lzL21hY2hzaWcuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyltYWNoc2lnLmgJMS4xNQk5 OS8wOC8xNSBTTUkiCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMg NAojIDE5ICIvdXNyL2luY2x1ZGUvc3lzL21hY2hzaWcuaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsK IyAxMDcgIi91c3IvaW5jbHVkZS9zeXMvbWFjaHNpZy5oIiAzIDQKfQojIDEyNyAiL3Vzci9pbmNs dWRlL3N5cy9zaWdpbmZvLmgiIDIgMyA0CiMgMjA2ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ2luZm8u aCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwuaCIgMSAzIDQKIyAyMDcgIi91 c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAyIDMgNAojIDIxNyAiL3Vzci9pbmNsdWRlL3N5cy9z aWdpbmZvLmgiIDMgNAojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMjE4ICIvdXNy L2luY2x1ZGUvc3lzL3NpZ2luZm8uaCIgMiAzIDQKCgoKdHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7 CgoKCiAgICAgICAgaW50IHNpX3NpZ25vOwogICAgICAgIGludCBzaV9jb2RlOwogICAgICAgIGlu dCBzaV9lcnJubzsKCgoKICAgICAgICB1bmlvbiB7CgogICAgICAgICAgICAgICAgaW50IF9fcGFk WygoMTI4IC8gc2l6ZW9mIChpbnQpKSAtIDMpXTsKCiAgICAgICAgICAgICAgICBzdHJ1Y3Qgewog ICAgICAgICAgICAgICAgICAgICAgICBwaWRfdCBfX3BpZDsKICAgICAgICAgICAgICAgICAgICAg ICAgdW5pb24gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBfX3VpZDsKCgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pb24gc2lndmFsIF9fdmFsdWU7CgoK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBfX2tpbGw7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNsb2NrX3QgX191dGltZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX3N0YXR1czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNsb2NrX3QgX19zdGltZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 IF9fY2xkOwogICAgICAgICAgICAgICAgICAgICAgICB9IF9fcGRhdGE7CiAgICAgICAgICAgICAg ICB9IF9fcHJvYzsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICpfX2FkZHI7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3RyYXBubzsK ICAgICAgICAgICAgICAgICAgICAgICAgY2FkZHJfdCBfX3BjOwogICAgICAgICAgICAgICAgfSBf X2ZhdWx0OwoKICAgICAgICAgICAgICAgIHN0cnVjdCB7CgogICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19mZDsKICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBfX2JhbmQ7CiAgICAgICAg ICAgICAgICB9IF9fZmlsZTsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg ICAgICAgICAgICBjYWRkcl90IF9fZmFkZHI7CgoKICAgICAgICAgICAgICAgICAgICAgICAgdGlt ZXN0cnVjX3QgX190c3RhbXA7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IF9fc3lz Y2FsbDsKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX25zeXNhcmc7CiAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgX19mYXVsdDsKICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBf X3N5c2FyZ1s4XTsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fbXN0YXRlWzEwXTsKICAg ICAgICAgICAgICAgIH0gX19wcm9mOwoKICAgICAgICB9IF9fZGF0YTsKCn0gc2lnaW5mb190Owoj IDM1NCAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBrX3Np Z2luZm8gewogICAgICAgIGludCBzaV9zaWdubzsKICAgICAgICBpbnQgc2lfY29kZTsKICAgICAg ICBpbnQgc2lfZXJybm87CgoKCiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgc3RydWN0 IHsKICAgICAgICAgICAgICAgICAgICAgICAgcGlkX3QgX19waWQ7CiAgICAgICAgICAgICAgICAg ICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgewog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgX191aWQ7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBzaWd2YWwgX192YWx1ZTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF9fa2lsbDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2xvY2tfdCBfX3V0aW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IF9fc3RhdHVzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2xvY2tfdCBfX3N0aW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g X19jbGQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gX19wZGF0YTsKICAgICAgICAgICAgICAg IH0gX19wcm9jOwoKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKl9fYWRkcjsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fdHJhcG5vOwog ICAgICAgICAgICAgICAgICAgICAgICBjYWRkcl90IF9fcGM7CiAgICAgICAgICAgICAgICB9IF9f ZmF1bHQ7CgogICAgICAgICAgICAgICAgc3RydWN0IHsKCiAgICAgICAgICAgICAgICAgICAgICAg IGludCBfX2ZkOwogICAgICAgICAgICAgICAgICAgICAgICBsb25nIF9fYmFuZDsKICAgICAgICAg ICAgICAgIH0gX19maWxlOwoKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAg ICAgICAgICAgIGNhZGRyX3QgX19mYWRkcjsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgdGlt ZXN0cnVjX3QgX190c3RhbXA7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IF9fc3lz Y2FsbDsKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBfX25zeXNhcmc7CiAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgX19mYXVsdDsKCgoKICAgICAgICAgICAgICAgIH0gX19wcm9mOwoK ICAgICAgICB9IF9fZGF0YTsKCn0ga19zaWdpbmZvX3Q7Cgp0eXBlZGVmIHN0cnVjdCBzaWdxdWV1 ZSB7CiAgICAgICAgc3RydWN0IHNpZ3F1ZXVlICpzcV9uZXh0OwogICAgICAgIGtfc2lnaW5mb190 IHNxX2luZm87CiAgICAgICAgdm9pZCAoKnNxX2Z1bmMpKHN0cnVjdCBzaWdxdWV1ZSAqKTsKICAg ICAgICB2b2lkICpzcV9iYWNrcHRyOwoKfSBzaWdxdWV1ZV90OwojIDQ1NCAiL3Vzci9pbmNsdWRl L3N5cy9zaWdpbmZvLmgiIDMgNAp9CiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAyIDMg NAojIDEgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAxIDMgNAojIDE2ICIvdXNyL2luY2x1 ZGUvc3lzL3Byb2NzZXQuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylwcm9jc2V0LmgJMS4yMAkw MC8wMi8xNCBTTUkiCgoKZXh0ZXJuICJDIiB7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ZlYXR1 cmVfdGVzdHMuaCIgMSAzIDQKIyAyMyAiL3Vzci9pbmNsdWRlL3N5cy9wcm9jc2V0LmgiIDIgMyA0 CiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu OC8zLjAvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzIDQKIyAyNCAiL3Vzci9pbmNsdWRlL3N5cy9w cm9jc2V0LmgiIDIgMyA0CiMgNDEgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAzIDQKdHlw ZWRlZiBlbnVtCgogICAgICAgIGlkdHlwZQoKICAgICAgICAgICAgICAgIHsKICAgICAgICBQX1BJ RCwKICAgICAgICBQX1BQSUQsCiAgICAgICAgUF9QR0lELAoKICAgICAgICBQX1NJRCwKICAgICAg ICBQX0NJRCwKICAgICAgICBQX1VJRCwKICAgICAgICBQX0dJRCwKICAgICAgICBQX0FMTCwKICAg ICAgICBQX0xXUElELAogICAgICAgIFBfVEFTS0lELAogICAgICAgIFBfUFJPSklECn0gaWR0eXBl X3Q7CiMgNjcgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAzIDQKdHlwZWRlZiBlbnVtIGlk b3AgewogICAgICAgIFBPUF9ESUZGLAoKCiAgICAgICAgUE9QX0FORCwKCgogICAgICAgIFBPUF9P UiwKCgogICAgICAgIFBPUF9YT1IKCgp9IGlkb3BfdDsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHBy b2NzZXQgewogICAgICAgIGlkb3BfdCBwX29wOwoKCgoKICAgICAgICBpZHR5cGVfdCBwX2xpZHR5 cGU7CgoKICAgICAgICBpZF90IHBfbGlkOwoKICAgICAgICBpZHR5cGVfdCBwX3JpZHR5cGU7CgoK ICAgICAgICBpZF90IHBfcmlkOwp9IHByb2NzZXRfdDsKIyAxMzIgIi91c3IvaW5jbHVkZS9zeXMv cHJvY3NldC5oIiAzIDQKfQojIDI3ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzIDQKCgoK ZXh0ZXJuICJDIiB7CiMgODYgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzIDQKZXh0ZXJuIHBp ZF90IHdhaXQoaW50ICopOwpleHRlcm4gcGlkX3Qgd2FpdHBpZChwaWRfdCwgaW50ICosIGludCk7 CgoKZXh0ZXJuIGludCB3YWl0aWQoaWR0eXBlX3QsIGlkX3QsIHNpZ2luZm9fdCAqLCBpbnQpOwpl eHRlcm4gcGlkX3Qgd2FpdDMoaW50ICosIGludCwgc3RydWN0IHJ1c2FnZSAqKTsKCgoKCmV4dGVy biBwaWRfdCB3YWl0NChwaWRfdCwgaW50ICosIGludCwgc3RydWN0IHJ1c2FnZSAqKTsKIyAxMTgg Ii91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzIDQKfQojIDIzICIvdXNyL2luY2x1ZGUvc3RkbGli LmgiIDIgMyA0CiMgNjQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiAiQyIgewoK Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgbG9uZyBsb25nIHF1b3Q7CiAgICAgICAgbG9uZyBs b25nIHJlbTsKfSBsbGRpdl90OwojIDEwOSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0 ZXJuIGludCByYW5kX3IodW5zaWduZWQgaW50ICopOwoKCmV4dGVybiB2b2lkIF9leGl0aGFuZGxl KHZvaWQpOwoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4KHZvaWQpOwpleHRlcm4gZG91YmxlIGVy YW5kNDgodW5zaWduZWQgc2hvcnQgKik7CmV4dGVybiBsb25nIGpyYW5kNDgodW5zaWduZWQgc2hv cnQgKik7CmV4dGVybiB2b2lkIGxjb25nNDgodW5zaWduZWQgc2hvcnQgKik7CmV4dGVybiBsb25n IGxyYW5kNDgodm9pZCk7CmV4dGVybiBsb25nIG1yYW5kNDgodm9pZCk7CmV4dGVybiBsb25nIG5y YW5kNDgodW5zaWduZWQgc2hvcnQgKik7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCAqc2VlZDQ4KHVu c2lnbmVkIHNob3J0ICopOwpleHRlcm4gdm9pZCBzcmFuZDQ4KGxvbmcpOwpleHRlcm4gaW50IHB1 dGVudihjaGFyICopOwpleHRlcm4gdm9pZCBzZXRrZXkoY29uc3QgY2hhciAqKTsKIyAxNTAgIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBpbnQgbWtzdGVtcChjaGFyICopOwoKCgoK ZXh0ZXJuIGludCBta3N0ZW1wNjQoY2hhciAqKTsKCgoKCgpleHRlcm4gbG9uZyBhNjRsKGNvbnN0 IGNoYXIgKik7CmV4dGVybiBjaGFyICplY3Z0KGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpl eHRlcm4gY2hhciAqZmN2dChkb3VibGUsIGludCwgaW50ICosIGludCAqKTsKZXh0ZXJuIGNoYXIg KmdjdnQoZG91YmxlLCBpbnQsIGNoYXIgKik7CmV4dGVybiBpbnQgZ2V0c3Vib3B0KGNoYXIgKios IGNoYXIgKmNvbnN0ICosIGNoYXIgKiopOwpleHRlcm4gaW50IGdyYW50cHQoaW50KTsKZXh0ZXJu IGNoYXIgKmluaXRzdGF0ZSh1bnNpZ25lZCwgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gY2hhciAq bDY0YShsb25nKTsKZXh0ZXJuIGNoYXIgKm1rdGVtcChjaGFyICopOwpleHRlcm4gY2hhciAqcHRz bmFtZShpbnQpOwpleHRlcm4gbG9uZyByYW5kb20odm9pZCk7CmV4dGVybiBjaGFyICpyZWFscGF0 aChjb25zdCBjaGFyICosIGNoYXIgKik7CmV4dGVybiBjaGFyICpzZXRzdGF0ZShjb25zdCBjaGFy ICopOwpleHRlcm4gdm9pZCBzcmFuZG9tKHVuc2lnbmVkKTsKZXh0ZXJuIGludCB0dHlzbG90KHZv aWQpOwpleHRlcm4gaW50IHVubG9ja3B0KGludCk7CmV4dGVybiB2b2lkICp2YWxsb2Moc2l6ZV90 KTsKCgoKCmV4dGVybiBpbnQgZHVwMihpbnQsIGludCk7CmV4dGVybiBjaGFyICpxZWN2dChsb25n IGRvdWJsZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqcWZjdnQobG9uZyBkb3Vi bGUsIGludCwgaW50ICosIGludCAqKTsKZXh0ZXJuIGNoYXIgKnFnY3Z0KGxvbmcgZG91YmxlLCBp bnQsIGNoYXIgKik7CmV4dGVybiBjaGFyICpnZXRjd2QoY2hhciAqLCBzaXplX3QpOwpleHRlcm4g Y29uc3QgY2hhciAqZ2V0ZXhlY25hbWUodm9pZCk7CmV4dGVybiBjaGFyICpnZXRsb2dpbih2b2lk KTsKZXh0ZXJuIGludCBnZXRvcHQoaW50LCBjaGFyICpjb25zdCAqLCBjb25zdCBjaGFyICopOwpl eHRlcm4gY2hhciAqb3B0YXJnOwpleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CmV4 dGVybiBjaGFyICpnZXRwYXNzKGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpnZXRwYXNzcGhy YXNlKGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgZ2V0cHcodWlkX3QsIGNoYXIgKik7CmV4dGVy biBpbnQgaXNhdHR5KGludCk7CmV4dGVybiB2b2lkICptZW1hbGlnbihzaXplX3QsIHNpemVfdCk7 CmV4dGVybiBjaGFyICp0dHluYW1lKGludCk7CgoKZXh0ZXJuIGxvbmcgbG9uZyBhdG9sbChjb25z dCBjaGFyICopOwpleHRlcm4gbG9uZyBsb25nIGxsYWJzKGxvbmcgbG9uZyk7CmV4dGVybiBsbGRp dl90IGxsZGl2KGxvbmcgbG9uZywgbG9uZyBsb25nKTsKZXh0ZXJuIGNoYXIgKmxsdG9zdHIobG9u ZyBsb25nLCBjaGFyICopOwpleHRlcm4gbG9uZyBsb25nIHN0cnRvbGwoY29uc3QgY2hhciAqLCBj aGFyICoqLCBpbnQpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHN0cnRvdWxsKGNvbnN0IGNo YXIgKiwgY2hhciAqKiwgaW50KTsKZXh0ZXJuIGNoYXIgKnVsbHRvc3RyKHVuc2lnbmVkIGxvbmcg bG9uZywgY2hhciAqKTsKIyAzMDggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0Cn0KIyA0MiAi L2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv aW5jbHVkZS9nKysvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMKIyA3MyAiL2hvbWU1L2tyYWtvdy9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0 cy9zdGRfY3N0ZGxpYi5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6ZGl2X3Q7CiAgdXNp bmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNpbmcgOjphYnM7CiAgdXNpbmcgOjph dGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRvaTsKICB1c2luZyA6OmF0b2w7CiAg dXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwogIHVzaW5nIDo6ZGl2OwogIHVzaW5n IDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpnZXRlbnY7CiAgdXNpbmcgOjpsYWJz OwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsKICB1c2luZyA6Om1ibGVuOwogIHVz aW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAgdXNpbmcgOjpxc29ydDsKICB1c2lu ZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5nIDo6c3JhbmQ7CiAgdXNpbmcgOjpz dHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpzdHJ0b3VsOwogIHVzaW5nIDo6c3lz dGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3Y3RvbWI7CgogIGlubGluZSBsb25n CiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7IH0KCiAgaW5saW5lIGxkaXZfdAog IGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2opOyB9Cn0KIyA0 NSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtv dy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysv Yml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyA0NiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jh c2UuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvbmV3IiAxIDMKIyAzNCAiL2hvbWU1L2tyYWtvdy9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvbmV3 IiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8zLjAvaW5jbHVkZS9nKysvY3N0ZGRlZiIgMSAzCiMgMzUgIi9ob21lNS9rcmFrb3cvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL25ldyIg MiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8zLjAvaW5jbHVkZS9nKysvZXhjZXB0aW9uIiAxIDMKIyAzNiAiL2hvbWU1L2tyYWtvdy9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvbmV3 IiAyIDMKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKICBjbGFzcyBiYWRfYWxsb2Mg OiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9hbGxvYygpIHRocm93KCkg eyB9CiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVjdCBub3Ro cm93X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKICB0eXBlZGVmIHZv aWQgKCpuZXdfaGFuZGxlcikoKTsKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIobmV3X2hh bmRsZXIpOwp9CgoKdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpi YWRfYWxsb2MpOwp2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6 YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqKSB0aHJvdygpOwp2b2lkIG9w ZXJhdG9yIGRlbGV0ZVtdKHZvaWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6 c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5l d1tdKHN0ZDo6c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3Bl cmF0b3IgZGVsZXRlKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lk IG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygp OwoKCmlubGluZSB2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQgKnBsYWNlKSB0 aHJvdygpIHsgcmV0dXJuIHBsYWNlOyB9CmlubGluZSB2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6 OnNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KfQojIDQ3ICIv aG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9p bmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL2hvbWU1L2tyYWtvdy9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0 cy9zdGRfaW9zZndkLmgiIDEgMwojIDQ5ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvYmFzZS5o IiAyIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEg MwojIDUwICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZTUv a3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl L2crKy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMwojIDUxICIvaG9tZTUva3Jh a293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2cr Ky9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9pdGVy YXRvci5oIiAxIDMKIyA1MiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMg MSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9nKysvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDUzICIvaG9tZTUva3Jh a293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2cr Ky9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX1RwPgppbmxp bmUgdm9pZCBfX2l0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2Is IF9UcCopCnsKICBfVHAgX190bXAgPSAqX19hOwogICpfX2EgPSAqX19iOwogICpfX2IgPSBfX3Rt cDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+ CmlubGluZSB2b2lkIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBf X2IpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKCgogIF9faXRlcl9zd2FwKF9fYSwgX19iLCBfX3ZhbHVlX3R5cGUoX19hKSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19i KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogIF9UcCBfX3RtcCA9IF9fYTsKICBfX2EgPSBfX2I7CiAgX19iID0gX190bXA7Cn0K CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBjb25zdCBfVHAmIG1pbihjb25zdCBf VHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBpZiAoX19iIDwgX19hKSByZXR1 cm4gX19iOyByZXR1cm4gX19hOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3Qg X1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYg KF9fYSA8IF9fYikgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmIG1pbihjb25zdCBfVHAmIF9fYSwg Y29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkgewoKICBpZiAoX19jb21wKF9fYiwgX19h KSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1Rw JiBfX2IsIF9Db21wYXJlIF9fY29tcCkgewoKICBpZiAoX19jb21wKF9fYSwgX19iKSkgcmV0dXJu IF9fYjsgcmV0dXJuIF9fYTsKfQojIDEzNyAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnb2Jhc2Uu aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNz IF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weShfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZywg X0Rpc3RhbmNlKikKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQsICsr X19maXJzdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xh c3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIKX19jb3B5KF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAo X0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7CiAgICAq X19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7CiAgfQog IHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIF9UcCoKX19j b3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBf X3Jlc3VsdCkKewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9f bGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7 Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGlu ZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQsIF9fZmFsc2VfdHlwZSkKewogIHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl c3VsdCwKICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCksCiAgICAg ICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlf YXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQp7CiAg cmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgIF9fZGlzdGFuY2Vf dHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBfVHAqIF9fY29w eV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weV90cml2aWFsKF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUg X1RwKiBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBf VHAqIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJl dHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKCnRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgppbmxp bmUgX091dHB1dEl0ZXIgX19jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs dCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJp dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19j b3B5X2F1eDIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX1RyaXZpYWwoKSk7Cn0KCnRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091 dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9f dHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9PdXRwdXRJdGVyKF9fY29weV9hdXgoX19maXJzdCwgX19s YXN0LCBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192 YWx1ZV90eXBlKF9fZmlyc3QpKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5 cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQp7CiAgcmV0dXJuIF9fY29w eV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsK fQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+Cmlu bGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl c3VsdCwgX190cnVlX3R5cGUpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0 b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogIHJldHVybiBfX2NvcHlfbmkyKF9f Zmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUg X091dHB1dEl0ZXIgX19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs IF9fZmFsc2VfdHlwZSkKewogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxf T3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9uaTIoX19maXJz dCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg X091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgdHlwZWRlZiB0eXBlbmFt ZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICBy ZXR1cm4gX19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsK fQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVj dGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rp b25hbEl0ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICB3aGlsZSAoX19maXJz dCAhPSBfX2xhc3QpCiAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1 bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0JpZGlyZWN0 aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIgX19j b3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21f YWNjZXNzX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmly c3Q7IF9fbiA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJu IF9fcmVzdWx0Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwg Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9Cb29sVHlwZT4Kc3Ry dWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAg ICBfQ2F0OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFs SXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZTsKCiAgc3RhdGljIF9C aWRpcmVjdGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19y ZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX3Jl c3VsdCwgX0NhdCgpLCAoX0Rpc3RhbmNlKikgMCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9U cD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlw ZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9f bGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3Qg LSBfX2ZpcnN0OwogICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihf VHApICogX051bSk7CiAgICByZXR1cm4gX19yZXN1bHQgLSBfTnVtOwogIH0KfTsKCnRlbXBsYXRl IDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwg X1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJz dCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlf YmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAgICAgIDo6Y29weShf X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwg Y2xhc3MgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX2F1eChfQkkxIF9fZmlyc3Qs IF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVf dHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQkkyPjo6dmFsdWVfdHlwZT4KICAgICAg ICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAg ICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9C STIsIF9Ucml2aWFsPgogICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz dWx0KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBf QkkyIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwg X0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKSB7CiAgcmV0dXJuIF9CSTIoX19jb3B5 X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2UoKSkpOwp9Cgp0ZW1w bGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2Jh Y2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBf X3Jlc3VsdCwgX19mYWxzZV90eXBlKXsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2F1eChfX2Zp cnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVu YW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0 b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkgewogIHR5 cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1h bDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJz dC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKdGVtcGxhdGUgPHR5cGVu YW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9pbnB1 dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2Zh bHNlX3R5cGUpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46 Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFs X2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwp9Cgp0ZW1wbGF0ZSA8dHlw ZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgY29weV9iYWNrd2FyZChfQkkx IF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKCgogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkx Pjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1h bF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwp9CgoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgpwYWlyPF9J bnB1dEl0ZXIsIF9PdXRwdXRJdGVyPiBfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXpl IF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ dGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1 dF9pdGVyYXRvcl90YWcpIHsKICBmb3IgKCA7IF9fY291bnQgPiAwOyAtLV9fY291bnQpIHsKICAg ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3VsdDsKICB9 CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+KF9fZmlyc3QsIF9fcmVzdWx0 KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0 SXRlcj4KaW5saW5lIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9SQUl0ZXIg X19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAg ICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgX1JBSXRlciBfX2xhc3QgPSBf X2ZpcnN0ICsgX19jb3VudDsKICByZXR1cm4gcGFpcjxfUkFJdGVyLCBfT3V0cHV0SXRlcj4oX19s YXN0LCBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8 X0lucHV0SXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1Np emUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX19jb3B5X24oX19m aXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0 ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Np emUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRl cj4KY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIg X19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19j b3VudCwgX19yZXN1bHQpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh c3MgX1RwPgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh c3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICgg OyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9P dXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9U cCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwg KytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogIHJldHVybiBfX2ZpcnN0Owp9CgoK CmlubGluZSB2b2lkIGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciog X19sYXN0LAogICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKewogIHVu c2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0KF9fZmlyc3QsIF9fdG1wLCBfX2xhc3Qg LSBfX2ZpcnN0KTsKfQoKaW5saW5lIHZvaWQgZmlsbChzaWduZWQgY2hhciogX19maXJzdCwgc2ln bmVkIGNoYXIqIF9fbGFzdCwKICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciYgX19j KQp7CiAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19j YXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB2 b2lkIGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19sYXN0LCBjb25zdCBjaGFyJiBfX2MpCnsK ICBjaGFyIF9fdG1wID0gX19jOwogIG1lbXNldChfX2ZpcnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25l ZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Np emU+CmlubGluZSB1bnNpZ25lZCBjaGFyKiBmaWxsX24odW5zaWduZWQgY2hhciogX19maXJzdCwg X1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNo YXImIF9fYykKewogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4g X19maXJzdCArIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9TaXplPgppbmxpbmUgc2lnbmVkIGNo YXIqIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCnsKICBmaWxsKF9fZmlyc3QsIF9fZmlyc3Qg KyBfX24sIF9fYyk7CiAgcmV0dXJuIF9fZmlyc3QgKyBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBf U2l6ZT4KaW5saW5lIGNoYXIqIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0 IGNoYXImIF9fYykKewogIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICByZXR1 cm4gX19maXJzdCArIF9fbjsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xh c3MgX0lucHV0SXRlcjI+CnBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChf SW5wdXRJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpfX2Zp cnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBwYWly PF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVBy ZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0 ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmly c3QxLCAqX19maXJzdDIpKSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAg cmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbmxp bmUgYm9vbCBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCnsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCAr K19fZmlyc3QyKQogICAgaWYgKCEoKl9fZmlyc3QxID09ICpfX2ZpcnN0MikpCiAgICAgIHJldHVy biBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBj bGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIGJvb2wgZXF1 YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3By ZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx OyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0 MSwgKl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CgoKCgoK dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhp Y29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg X0lucHV0SXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg Zm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAg ICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz dDIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAg ICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2Zp cnN0MiAhPSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J bnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShf SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9 IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmIChfX2Nv bXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChfX2Nv bXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVy biBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCmlubGluZSBi b29sCmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3Qx LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAog ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwKICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNv bnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3Qgc2l6ZV90IF9f bGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAo X19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1 bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKfQoKaW5saW5lIGJvb2wg bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIq IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq IF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQp7CgogIHJldHVybiBsZXhpY29ncmFwaGlj YWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFz dDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0 ZXIyPgppbnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmly c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CiAgd2hpbGUg KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpf X2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJuIC0xOwogICAgaWYgKCpfX2ZpcnN0MiA8 ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIDE7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0 MjsKICB9CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpIHsKICAgIHJldHVybiAhKF9fZmlyc3Qx ID09IF9fbGFzdDEpOwogIH0KICBlbHNlIHsKICAgIHJldHVybiAtMTsKICB9Cn0KCmlubGluZSBp bnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9f Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hh ciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z aWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjEgPSBfX2xhc3Qx IC0gX19maXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0 MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4o X19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0CiAgICAg ICAgICAgICAgICAgICAgICAgOiAoX19sZW4xID09IF9fbGVuMiA/IDAgOiAoX19sZW4xIDwgX19s ZW4yID8gLTEgOiAxKSk7Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8z d2F5KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9f bGFzdDIpCnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xh c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciop IF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQg Y2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs YXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX2xleGljb2dyYXBoaWNh bF9jb21wYXJlXzN3YXkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoK fQojIDIxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL2hvbWU1L2ty YWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9n KysvYml0cy9zdGxfYWxsb2MuaCIgMSAzCiMgMjggIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9j LmgiIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvaG9t ZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs dWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9leGNlcHRpb25f ZGVmaW5lcy5oIiAxIDMKIyAzNSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMK Cm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoK CiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFk X2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lk CiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv d19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxp ZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJy b3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0 IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciog X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190 aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgMjkgIi9ob21lNS9rcmFrb3cv bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2Jp dHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRkZWYuaCIg MSAzCiMgMzAgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi9ob21lNS9r cmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUv ZysrL2JpdHMvc3RkX2NzdGRsaWIuaCIgMSAzCiMgMzEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2Fs bG9jLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzCiMgMzIg Ii9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w L2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMv c3RkX2Nhc3NlcnQuaCIgMSAzCiMgMzcgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nhc3NlcnQuaCIg MwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvc3BhcmMtc3VuLXNvbGFyaXMyLjgvaW5jbHVkZS9h c3NlcnQuaCIgMSAzCiMgMjUgIi9ob21lNS9rcmFrb3cvbG9jYWwvc3BhcmMtc3VuLXNvbGFyaXMy LjgvaW5jbHVkZS9hc3NlcnQuaCIgMwpleHRlcm4gIkMiIHsKZXh0ZXJuIHZvaWQgX19lcHJpbnRm IChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQsIGNvbnN0IGNoYXIgKikKICAg IF9fYXR0cmlidXRlX18gKChub3JldHVybikpOwp9CiMgMzggIi9ob21lNS9rcmFrb3cvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rk X2Nhc3NlcnQuaCIgMiAzCiMgMzMgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwoK CgoKCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAxIDMKIyAzMyAiL2hvbWU1 L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk ZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNv bGFyaXMyLjgvYml0cy9ndGhyLmgiIDEgMwojIDM0ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF90aHJl YWRzLmgiIDIgMwojIDUxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNw YWNlIHN0ZAp7CiMgNjYgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpzdHJ1Y3Qg X1JlZmNvdW50X0Jhc2UKewoKCgoKICB0eXBlZGVmIHNpemVfdCBfUkNfdDsKCgoKICAgdm9sYXRp bGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCgoKICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9yZWZfY291 bnRfbG9jazsKICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24pIDogX01fcmVmX2NvdW50KF9fbikK ICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1wID0ge3swLCAwLCAwLCAwfSwge3t7 MH19fSwgMH07CiAgICAgIF9NX3JlZl9jb3VudF9sb2NrID0gX190bXA7CgoKCgoKICAgIH0KIyAx MTIgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv My4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHZvaWQgX01faW5jcigpIHsK ICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICArK19NX3Jl Zl9jb3VudDsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsK ICB9CiAgX1JDX3QgX01fZGVjcigpIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZf Y291bnRfbG9jayk7CiAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2NvdW50Owog ICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgcmV0dXJu IF9fdG1wOwogIH0KIyAxNjMgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3RocmVhZHMuaCIgMwp9Owoj IDI4NCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu OC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnRlbXBsYXRlIDxpbnQgX19p bnN0PgpzdHJ1Y3QgX1NUTF9tdXRleF9zcGluIHsKICBlbnVtIHsgX19sb3dfbWF4ID0gMzAsIF9f aGlnaF9tYXggPSAxMDAwIH07CgoKICBzdGF0aWMgdW5zaWduZWQgX19tYXg7CiAgc3RhdGljIHVu c2lnbmVkIF9fbGFzdDsKfTsKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp1bnNpZ25lZCBfU1RMX211 dGV4X3NwaW48X19pbnN0Pjo6X19tYXggPSBfU1RMX211dGV4X3NwaW48X19pbnN0Pjo6X19sb3df bWF4OwoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnVuc2lnbmVkIF9TVExfbXV0ZXhfc3BpbjxfX2lu c3Q+OjpfX2xhc3QgPSAwOwojIDMxMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdGhyZWFkcy5oIiAz CnN0cnVjdCBfU1RMX211dGV4X2xvY2sKewoKCgoKCgoKICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9s b2NrOwogIHZvaWQgX01faW5pdGlhbGl6ZSgpIHsKIyAzNDIgIi9ob21lNS9rcmFrb3cvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rs X3RocmVhZHMuaCIgMwogIH0KICB2b2lkIF9NX2FjcXVpcmVfbG9jaygpIHsKCgoKICAgIF9fZ3Ro cmVhZF9tdXRleF9sb2NrKCZfTV9sb2NrKTsKICB9CiAgdm9pZCBfTV9yZWxlYXNlX2xvY2soKSB7 CgoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9sb2NrKTsKICB9CiMgNDUzICIvaG9t ZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs dWRlL2crKy9iaXRzL3N0bF90aHJlYWRzLmgiIDMKfTsKIyA0OTIgIi9ob21lNS9rcmFrb3cvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMv c3RsX3RocmVhZHMuaCIgMwpzdHJ1Y3QgX1NUTF9hdXRvX2xvY2sKewogIF9TVExfbXV0ZXhfbG9j ayYgX01fbG9jazsKCiAgX1NUTF9hdXRvX2xvY2soX1NUTF9tdXRleF9sb2NrJiBfX2xvY2spIDog X01fbG9jayhfX2xvY2spCiAgICB7IF9NX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KICB+X1NU TF9hdXRvX2xvY2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0KCnByaXZhdGU6CiAg dm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTF9hdXRvX2xvY2smKTsKICBfU1RMX2F1dG9fbG9jayhj b25zdCBfU1RMX2F1dG9fbG9jayYpOwp9OwoKfQojIDM5ICIvaG9tZTUva3Jha293L2xvY2FsL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9h bGxvYy5oIiAyIDMKIyA2OCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIgMwpuYW1lc3Bh Y2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3Rl bXBsYXRlIHsKCnByaXZhdGU6CgogIHN0YXRpYyB2b2lkKiBfU19vb21fbWFsbG9jKHNpemVfdCk7 CiAgc3RhdGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZvaWQqLCBzaXplX3QpOwogIHN0YXRpYyB2 b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKcHVibGljOgoKICBzdGF0aWMg dm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxv YyhfX24pOwogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhf X24pOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2 b2lkKiBfX3AsIHNpemVfdCApCiAgewogICAgZnJlZShfX3ApOwogIH0KCiAgc3RhdGljIHZvaWQq IHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgLCBzaXplX3QgX19uZXdfc3opCiAgewogICAg dm9pZCogX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgaWYgKDAgPT0gX19y ZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICByZXR1 cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxlcih2 b2lkICgqX19mKSgpKSkoKQogIHsKICAgIHZvaWQgKCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxv Y19vb21faGFuZGxlcjsKICAgIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOwogICAg cmV0dXJuKF9fb2xkKTsKICB9Cgp9OwoKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBf X21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxl cikoKSA9IDA7Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCoKX19tYWxsb2NfYWxsb2NfdGVt cGxhdGU8X19pbnN0Pjo6X1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQp7CiAgICB2b2lkICgqIF9f bXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7 CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVy OwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgc3RkOjpfX3Rocm93X2Jh ZF9hbGxvYygpOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9f cmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1 bHQpOwogICAgfQp9Cgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCogX19tYWxsb2NfYWxsb2Nf dGVtcGxhdGU8X19pbnN0Pjo6X1Nfb29tX3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQp7 CiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsK CiAgICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2Fs bG9jX29vbV9oYW5kbGVyOwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsg c3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVy KSgpOwogICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgaWYgKF9f cmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9Cgp0eXBlZGVmIF9fbWFsbG9jX2FsbG9j X3RlbXBsYXRlPDA+IG1hbGxvY19hbGxvYzsKCnRlbXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0Fs bG9jPgpjbGFzcyBzaW1wbGVfYWxsb2MgewoKcHVibGljOgogICAgc3RhdGljIF9UcCogYWxsb2Nh dGUoc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxv Yzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIF9UcCogYWxsb2Nh dGUodm9pZCkKICAgICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChf VHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikK ICAgICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVv ZiAoX1RwKSk7IH0KICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsg X0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQp9OwoKCgoKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBkZWJ1Z19hbGxvYyB7Cgpwcml2YXRlOgoKICBlbnVtIHtf U19leHRyYSA9IDh9OwoKCgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3Qg X19uKQogIHsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUoX19u ICsgKGludCkgX1NfZXh0cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uOwogICAgcmV0 dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9j YXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFy KilfX3AgLSAoaW50KSBfU19leHRyYTsKICAgICgodm9pZCkgKCgqKHNpemVfdCopX19yZWFsX3Ag PT0gX19uKSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBhc3NlcnRpb24gYCVzJ1xu IiwgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv My4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiLCAxOTAsICIqKHNpemVfdCopX19yZWFs X3AgPT0gX19uIiksIDApKSk7CiAgICBfQWxsb2M6OmRlYWxsb2NhdGUoX19yZWFsX3AsIF9fbiAr IChpbnQpIF9TX2V4dHJhKTsKICB9CgogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9f cCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opCiAgewogICAgY2hhciogX19yZWFs X3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7CiAgICAoKHZvaWQpICgoKihzaXplX3Qq KV9fcmVhbF9wID09IF9fb2xkX3N6KSA/IDAgOiAoX19lcHJpbnRmICgiJXM6JXU6IGZhaWxlZCBh c3NlcnRpb24gYCVzJ1xuIiwgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsbG9jLmgiLCAxOTcsICIq KHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3oiKSwgMCkpKTsKICAgIGNoYXIqIF9fcmVzdWx0 ID0gKGNoYXIqKQogICAgICBfQWxsb2M6OnJlYWxsb2NhdGUoX19yZWFsX3AsIF9fb2xkX3N6ICsg KGludCkgX1NfZXh0cmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdf c3ogKyAoaW50KSBfU19leHRyYSk7CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsK ICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOwogIH0KCn07CiMgMjQxICIvaG9t ZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs dWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxib29sIHRocmVhZHMsIGludCBp bnN0PgpjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGUgewoKcHJpdmF0ZToKCgogIGVudW0g e19BTElHTiA9IDh9OwogIGVudW0ge19NQVhfQllURVMgPSAxMjh9OwogIGVudW0ge19ORlJFRUxJ U1RTID0gMTZ9OwogIHN0YXRpYyBzaXplX3QKICBfU19yb3VuZF91cChzaXplX3QgX19ieXRlcykK ICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdCkgX0FMSUdOLTEpICYgfigoc2l6ZV90 KSBfQUxJR04gLSAxKSk7IH0KCiAgdW5pb24gX09iaiB7CiAgICAgICAgdW5pb24gX09iaiogX01f ZnJlZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBfTV9jbGllbnRfZGF0YVsxXTsKICB9OwoKICBz dGF0aWMgX09iaiogdm9sYXRpbGUgX1NfZnJlZV9saXN0W107CgogIHN0YXRpYyBzaXplX3QgX1Nf ZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMpIHsKICAgICAgICByZXR1cm4gKCgoX19ieXRl cykgKyAoc2l6ZV90KV9BTElHTi0xKS8oc2l6ZV90KV9BTElHTiAtIDEpOwogIH0KCgogIHN0YXRp YyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CgoKICBzdGF0aWMgY2hhciogX1NfY2h1bmtf YWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCgogIHN0YXRpYyBjaGFyKiBfU19z dGFydF9mcmVlOwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICBzdGF0aWMgc2l6ZV90IF9T X2hlYXBfc2l6ZTsKCgogICAgc3RhdGljIF9TVExfbXV0ZXhfbG9jayBfU19ub2RlX2FsbG9jYXRv cl9sb2NrOwoKCgoKCiAgICBjbGFzcyBfTG9jazsKICAgIGZyaWVuZCBjbGFzcyBfTG9jazsKICAg IGNsYXNzIF9Mb2NrIHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIF9Mb2NrKCkgeyB7IGlm ICh0aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9OyB9 CiAgICAgICAgICAgIH5fTG9jaygpIHsgeyBpZiAodGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3Jf bG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfTsgfQogICAgfTsKCnB1YmxpYzoKCgogIHN0YXRpYyB2 b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIHZvaWQqIF9fcmV0ID0gMDsKCiAgICBp ZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICBfX3JldCA9IG1hbGxvY19hbGxv Yzo6YWxsb2NhdGUoX19uKTsKICAgIH0KICAgIGVsc2UgewogICAgICBfT2JqKiB2b2xhdGlsZSog X19teV9mcmVlX2xpc3QKICAgICAgICAgID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5k ZXgoX19uKTsKCgoKCgogICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CgogICAgICBfT2JqKiBf X3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgaWYgKF9fcmVzdWx0ID09IDApCiAgICAg ICAgX19yZXQgPSBfU19yZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7CiAgICAgIGVsc2UgewogICAg ICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAg ICAgIF9fcmV0ID0gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gX19yZXQ7CiAg fTsKCgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogIHsK ICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKQogICAgICBtYWxsb2NfYWxsb2M6OmRl YWxsb2NhdGUoX19wLCBfX24pOwogICAgZWxzZSB7CiAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215 X2ZyZWVfbGlzdAogICAgICAgICAgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChf X24pOwogICAgICBfT2JqKiBfX3EgPSAoX09iaiopX19wOwoKCgoKICAgICAgX0xvY2sgX19sb2Nr X2luc3RhbmNlOwoKICAgICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9s aXN0OwogICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7CgogICAgfQogIH0KCiAgc3RhdGljIHZv aWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19z eik7Cgp9IDsKCnR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+IGFsbG9j Owp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwgMD4gc2luZ2xlX2NsaWVu dF9hbGxvYzsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KaW5saW5lIGJv b2wgb3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf X2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVt cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8 Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p bnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCgoKCgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFk cywgaW50IF9faW5zdD4KY2hhcioKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg X19pbnN0Pjo6X1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBfX25vYmpzKQp7 CiAgICBjaGFyKiBfX3Jlc3VsdDsKICAgIHNpemVfdCBfX3RvdGFsX2J5dGVzID0gX19zaXplICog X19ub2JqczsKICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0 X2ZyZWU7CgogICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKSB7CiAgICAgICAg X19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3Rh bF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIGlmIChfX2J5dGVz X2xlZnQgPj0gX19zaXplKSB7CiAgICAgICAgX19ub2JqcyA9IChpbnQpKF9fYnl0ZXNfbGVmdC9f X3NpemUpOwogICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAg IF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90 YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0gZWxzZSB7CiAgICAgICAg c2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAgICAgIDIgKiBfX3RvdGFsX2J5dGVzICsgX1Nf cm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwoKICAgICAgICBpZiAoX19ieXRlc19sZWZ0ID4g MCkgewogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPQogICAgICAg ICAgICAgICAgICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5dGVz X2xlZnQpOwoKICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xp c3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0g KF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgfQogICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAo Y2hhciopbWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9m cmVlKSB7CiAgICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxl KiBfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgX09iaiogX19wOwoKCgogICAgICAgICAgICBm b3IgKF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICAgICBfX2kgPD0gKHNpemVfdCkgX01BWF9C WVRFUzsKICAgICAgICAgICAgICAgICBfX2kgKz0gKHNpemVfdCkgX0FMSUdOKSB7CiAgICAgICAg ICAgICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4 KF9faSk7CiAgICAgICAgICAgICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAg ICAgICBpZiAoMCAhPSBfX3ApIHsKICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3Qg PSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRf ZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19z dGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxv YyhfX3NpemUsIF9fbm9ianMpKTsKCgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAg ICAgICAgICAgIF9TX2VuZF9mcmVlID0gMDsKICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChj aGFyKiltYWxsb2NfYWxsb2M6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKCgoKICAgICAgICB9 CiAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgIF9TX2VuZF9m cmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgIHJldHVybihfU19j aHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAgIH0KfQoKCgoKCnRlbXBsYXRlIDxib29s IF9fdGhyZWFkcywgaW50IF9faW5zdD4Kdm9pZCoKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f dGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pCnsKICAgIGludCBfX25vYmpz ID0gMjA7CiAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19uLCBfX25vYmpzKTsK ICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgIF9PYmoqIF9fcmVzdWx0Owog ICAgX09iaiogX19jdXJyZW50X29iajsKICAgIF9PYmoqIF9fbmV4dF9vYmo7CiAgICBpbnQgX19p OwoKICAgIGlmICgxID09IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsKICAgIF9fbXlfZnJlZV9s aXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCgogICAgICBfX3Jl c3VsdCA9IChfT2JqKilfX2NodW5rOwogICAgICAqX19teV9mcmVlX2xpc3QgPSBfX25leHRfb2Jq ID0gKF9PYmoqKShfX2NodW5rICsgX19uKTsKICAgICAgZm9yIChfX2kgPSAxOyA7IF9faSsrKSB7 CiAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7CiAgICAgICAgX19uZXh0X29iaiA9 IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmogKyBfX24pOwogICAgICAgIGlmIChfX25vYmpzIC0g MSA9PSBfX2kpIHsKICAgICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGlu ayA9IDA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9f Y3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSBfX25leHRfb2JqOwogICAgICAgIH0K ICAgICAgfQogICAgcmV0dXJuKF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywg aW50IGluc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6 cmVhbGxvY2F0ZSh2b2lkKiBfX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgX19vbGRfc3osCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uZXdfc3opCnsKICAgIHZvaWQq IF9fcmVzdWx0OwogICAgc2l6ZV90IF9fY29weV9zejsKCiAgICBpZiAoX19vbGRfc3ogPiAoc2l6 ZV90KSBfTUFYX0JZVEVTICYmIF9fbmV3X3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAg ICAgIHJldHVybihyZWFsbG9jKF9fcCwgX19uZXdfc3opKTsKICAgIH0KICAgIGlmIChfU19yb3Vu ZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAoX19uZXdfc3opKSByZXR1cm4oX19wKTsKICAg IF9fcmVzdWx0ID0gYWxsb2NhdGUoX19uZXdfc3opOwogICAgX19jb3B5X3N6ID0gX19uZXdfc3og PiBfX29sZF9zej8gX19vbGRfc3ogOiBfX25ld19zejsKICAgIG1lbWNweShfX3Jlc3VsdCwgX19w LCBfX2NvcHlfc3opOwogICAgZGVhbGxvY2F0ZShfX3AsIF9fb2xkX3N6KTsKICAgIHJldHVybihf X3Jlc3VsdCk7Cn0KCgogICAgdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0Pgog ICAgX1NUTF9tdXRleF9sb2NrCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz LCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9sb2NrCiAgICAgICAgPSB7IHt7MCwgMCwgMCwg MH0sIHt7ezB9fX0sIDB9IH07CgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5z dD4KY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nf c3RhcnRfZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNo YXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9m cmVlID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc2l6ZV90IF9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9 IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnR5cGVuYW1lIF9fZGVm YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCl9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gOjpfU19mcmVlX2xpc3Rb CiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfTkZSRUVM SVNUUwpdID0gezAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IH07CiMgNTI2ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFz cyBfVHA+CmNsYXNzIGFsbG9jYXRvciB7CiAgdHlwZWRlZiBhbGxvYyBfQWxsb2M7CnB1YmxpYzoK ICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5j ZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25z dF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAm IGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8 Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBv dGhlcjsKICB9OwoKICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgYWxsb2NhdG9yKGNvbnN0IGFs bG9jYXRvciYpIHRocm93KCkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNv bnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkge30KICB+YWxsb2NhdG9yKCkgdGhyb3coKSB7 fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsg fQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJl dHVybiAmX194OyB9CgoKCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lk KiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMCA/IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6 YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgICAgICAgICAgICAgIDogMDsKICB9 CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9B bGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICBzaXplX3R5cGUg bWF4X3NpemUoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9m KF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwp IHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBf X3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gewpwdWJs aWM6CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl cmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lk KiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8 Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBv dGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJv b2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+ JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+Cmlu bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0 b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KIyA2MDIgIi9ob21lNS9rcmFrb3cvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rs X2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX19h bGxvY2F0b3IgewogIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogIHR5cGVkZWYgc2l6ZV90 IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl ZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlw ZWRlZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNl OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1 Y3QgcmViaW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsK ICB9OwoKICBfX2FsbG9jYXRvcigpIHRocm93KCkge30KICBfX2FsbG9jYXRvcihjb25zdCBfX2Fs bG9jYXRvciYgX19hKSB0aHJvdygpCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRl cmx5aW5nX2FsbG9jKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNv bnN0IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVy bHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB+X19hbGxvY2F0b3IoKSB0 aHJvdygpIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVy biAmX194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNv bnN0IHsgcmV0dXJuICZfX3g7IH0KCgogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29u c3Qgdm9pZCogPSAwKSB7CiAgICByZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19jYXN0 PF9UcCo+KF9fdW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAg ICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBl IF9fbikKICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXpl b2YoX1RwKSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQogICAgeyBy ZXR1cm4gc2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50 ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lk IGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFz cyBfQWxsb2M+CmNsYXNzIF9fYWxsb2NhdG9yPHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYgc2l6 ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw ZWRlZiB2b2lkKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsK ICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVj dCByZWJpbmQgewogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwog IH07Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9w ZXJhdG9yPT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJl dHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsK fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv ciE9KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4g X19hMS5fX3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCgoK Cgp0ZW1wbGF0ZSA8aW50IGluc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxs b2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9f bWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0 ZSA8aW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxv Y190ZW1wbGF0ZTxfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxv Y19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBkZWJ1Z19hbGxvYzxf QWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+ JikgewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v bCBvcGVyYXRvciE9KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJuIGZhbHNlOwp9CiMg NzMyICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9BbGxvY2F0b3I+CnN0cnVjdCBfQWxsb2NfdHJhaXRzCnsKICBzdGF0aWMgY29uc3Qg Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSBmYWxzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0 b3I6OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBhbGxvY2F0b3JfdHlwZTsKfTsKCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0 czxfVHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgoKCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRl ZiBzaW1wbGVfYWxsb2M8X1RwLCBhbGxvYz4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxvY2F0 b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgaW50IF9f aW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf X2luc3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAg dHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9j X3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1Rw LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KewogIHN0YXRp YyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxs b2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAg ICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRf YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90 eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxv Y190cmFpdHM8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4KewogIHN0YXRpYyBjb25zdCBib29s IF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1 Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAs IGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9UcDEsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9U cCwKICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2Nf dGVtcGxhdGU8X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVz cyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1w bGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9f bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19pbnN0PgpzdHJ1 Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxf VHAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZWZhdWx0X2FsbG9jX3Rl bXBsYXRlPF9fdGhyLCBfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu Y2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxv Y190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVk ZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0 PiA+CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfVHAxLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxv Y2F0b3I8X1RwMSwgZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4KewogIHN0YXRpYyBjb25zdCBib29s IF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1 Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAs IGRlYnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCn0KIyAyMiAiL2hvbWU1 L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk ZS9nKysvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2Nv bnN0cnVjdC5oIiAxIDMKIyAzNCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfY29uc3RydWN0LmgiIDMK IyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzMuMC9pbmNsdWRlL2crKy9uZXciIDEgMwojIDM1ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9jb25z dHJ1Y3QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA0NyAiL2hvbWU1L2tyYWtvdy9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxf Y29uc3RydWN0LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgdm9p ZCBfQ29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKbmV3ICgodm9pZCop IF9fcCkgX1QxKF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBf Q29uc3RydWN0KF9UMSogX19wKSB7CiAgbmV3ICgodm9pZCopIF9fcCkgX1QxKCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIF9EZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAg X19wb2ludGVyLT5+X1RwKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2 b2lkCl9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh dG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg KytfX2ZpcnN0KQogICAgZGVzdHJveSgmKl9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9y LCBfRm9yd2FyZEl0ZXJhdG9yLCBfX3RydWVfdHlwZSkge30KCnRlbXBsYXRlIDxjbGFzcyBfRm9y d2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fZGVzdHJveShfRm9yd2FyZEl0 ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfVHAqKQp7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Rlc3RydWN0b3IKICAg ICAgICAgIF9Ucml2aWFsX2Rlc3RydWN0b3I7CiAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBfX2xh c3QsIF9Ucml2aWFsX2Rlc3RydWN0b3IoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXJhdG9yPgppbmxpbmUgdm9pZCBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G b3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAgX19kZXN0cm95KF9fZmlyc3QsIF9fbGFzdCwgX192 YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKaW5saW5lIHZvaWQgX0Rlc3Ryb3koY2hhciosIGNoYXIq KSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShpbnQqLCBpbnQqKSB7fQppbmxpbmUgdm9pZCBfRGVz dHJveShsb25nKiwgbG9uZyopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KGZsb2F0KiwgZmxvYXQq KSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShkb3VibGUqLCBkb3VibGUqKSB7fQppbmxpbmUgdm9p ZCBfRGVzdHJveSh3Y2hhcl90Kiwgd2NoYXJfdCopIHt9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx LCBjbGFzcyBfVDI+CmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBf X3ZhbHVlKSB7CiAgX0NvbnN0cnVjdChfX3AsIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1QxPgppbmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3ApIHsKICBfQ29uc3RydWN0KF9fcCk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIGRlc3Ryb3koX1RwKiBfX3BvaW50 ZXIpIHsKICBfRGVzdHJveShfX3BvaW50ZXIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyYXRvcj4KaW5saW5lIHZvaWQgZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G b3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAgX0Rlc3Ryb3koX19maXJzdCwgX19sYXN0KTsKfQoK fQojIDIzICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL2hvbWU1L2ty YWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9n KysvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAxIDMKIyAyNCAiL2hvbWU1L2tyYWtv dy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysv Yml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3RlbXBidWYu aCIgMSAzCiMgMzQgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3RlbXBidWYuaCIgMwpuYW1lc3BhY2Ug c3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnBhaXI8X1RwKiwgcHRyZGlmZl90PgpfX2dldF90 ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbiwgX1RwKikKewogIGlmIChfX2xlbiA+IHB0 cmRpZmZfdCgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgX19sZW4gPSAyMTQ3NDgzNjQ3 IC8gc2l6ZW9mKF9UcCk7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9UcCogX190bXAgPSAo X1RwKikgbWFsbG9jKChzaXplX3QpX19sZW4gKiBzaXplb2YoX1RwKSk7CiAgICBpZiAoX190bXAg IT0gMCkKICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PihfX3RtcCwgX19sZW4pOwog ICAgX19sZW4gLz0gMjsKICB9CgogIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oKF9UcCop MCwgMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9UcCosIHB0cmRpZmZf dD4gZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuKSB7CiAgcmV0dXJuIF9fZ2V0 X3RlbXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsKfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgppbmxpbmUgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IGdldF90ZW1wb3JhcnlfYnVmZmVy KHB0cmRpZmZfdCBfX2xlbiwgX1RwKikgewogIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVy KF9fbGVuLCAoX1RwKikgMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnZvaWQgcmV0dXJuX3Rl bXBvcmFyeV9idWZmZXIoX1RwKiBfX3ApIHsKICBmcmVlKF9fcCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CmNsYXNzIF9UZW1wb3JhcnlfYnVmZmVyIHsK cHJpdmF0ZToKICBwdHJkaWZmX3QgX01fb3JpZ2luYWxfbGVuOwogIHB0cmRpZmZfdCBfTV9sZW47 CiAgX1RwKiBfTV9idWZmZXI7CgogIHZvaWQgX01fYWxsb2NhdGVfYnVmZmVyKCkgewogICAgX01f b3JpZ2luYWxfbGVuID0gX01fbGVuOwogICAgX01fYnVmZmVyID0gMDsKCiAgICBpZiAoX01fbGVu ID4gKHB0cmRpZmZfdCkoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkKICAgICAgX01fbGVuID0g MjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICAgIHdoaWxlIChfTV9sZW4gPiAwKSB7CiAgICAg IF9NX2J1ZmZlciA9IChfVHAqKSBtYWxsb2MoX01fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgICBp ZiAoX01fYnVmZmVyKQogICAgICAgIGJyZWFrOwogICAgICBfTV9sZW4gLz0gMjsKICAgIH0KICB9 CgogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiwgX190cnVlX3R5cGUpIHt9 CiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmIHZhbCwgX19mYWxzZV90eXBl KSB7CiAgICB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9idWZmZXIsIF9NX2xlbiwgdmFsKTsKICB9 CgpwdWJsaWM6CiAgcHRyZGlmZl90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9sZW47IH0KICBw dHJkaWZmX3QgcmVxdWVzdGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47 IH0KICBfVHAqIGJlZ2luKCkgeyByZXR1cm4gX01fYnVmZmVyOyB9CiAgX1RwKiBlbmQoKSB7IHJl dHVybiBfTV9idWZmZXIgKyBfTV9sZW47IH0KCiAgX1RlbXBvcmFyeV9idWZmZXIoX0ZvcndhcmRJ dGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewoKICAgIHR5cGVkZWYg dHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj dG9yCiAgICAgICAgICAgIF9Ucml2aWFsOwoKICAgIHRyeSB7CiAgICAgIF9NX2xlbiA9IDA7CiAg ICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX01fbGVuKTsKICAgICAgX01fYWxsb2NhdGVf YnVmZmVyKCk7CiAgICAgIGlmIChfTV9sZW4gPiAwKQogICAgICAgIF9NX2luaXRpYWxpemVfYnVm ZmVyKCpfX2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBmcmVlKF9N X2J1ZmZlcik7IF9NX2J1ZmZlciA9IDA7IF9NX2xlbiA9IDA7IHRocm93OyB9OwogIH0KCiAgfl9U ZW1wb3JhcnlfYnVmZmVyKCkgewogICAgZGVzdHJveShfTV9idWZmZXIsIF9NX2J1ZmZlciArIF9N X2xlbik7CiAgICBmcmVlKF9NX2J1ZmZlcik7CiAgfQoKcHJpdmF0ZToKCiAgX1RlbXBvcmFyeV9i dWZmZXIoY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0 IF9UZW1wb3JhcnlfYnVmZmVyJikge30KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl cmF0b3IsCiAgICAgICAgICBjbGFzcyBfVHAKICAgICAgICAgICAgICAgICAgICA9IHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICA+ CnN0cnVjdCB0ZW1wb3JhcnlfYnVmZmVyIDogcHVibGljIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3 YXJkSXRlcmF0b3IsIF9UcD4KewogIHRlbXBvcmFyeV9idWZmZXIoX0ZvcndhcmRJdGVyYXRvciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX1RlbXBvcmFyeV9idWZmZXI8 X0ZvcndhcmRJdGVyYXRvciwgX1RwPihfX2ZpcnN0LCBfX2xhc3QpIHt9CiAgfnRlbXBvcmFyeV9i dWZmZXIoKSB7fQp9OwoKfQojIDI1ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAz CiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu OC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyAzNCAiL2hv bWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5j bHVkZS9nKysvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0 cy9zdGRfY3N0cmluZy5oIiAxIDMKIyAzNSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdW5pbml0aWFs 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 KF9fZmlyc3QpKTsKfQojIDIzMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfdW5pbml0aWFsaXplZC5o IiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNz IF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9j b3B5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3Qy LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIF9G b3J3YXJkSXRlciBfX21pZCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwg X19yZXN1bHQpOwogIHRyeSB7CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3Qy LCBfX2xhc3QyLCBfX21pZCk7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX3Jlc3VsdCwg X19taWQpOyB0aHJvdzsgfTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh c3MgX1RwLCBjbGFzcyBfSW5wdXRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFs aXplZF9maWxsX2NvcHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkKewogIHVu aW5pdGlhbGl6ZWRfZmlsbChfX3Jlc3VsdCwgX19taWQsIF9feCk7CiAgdHJ5IHsKICAgIHJldHVy biB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7CiAgfQogIGNhdGNo KC4uLikgeyBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOyB0aHJvdzsgfTsKfQoKCgoKdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxp bmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9J bnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg X19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IF9UcCYgX194KQp7CiAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRf Y29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIpOwogIHRyeSB7CiAgICB1bmluaXRpYWxp emVkX2ZpbGwoX19taWQyLCBfX2xhc3QyLCBfX3gpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ry b3koX19maXJzdDIsIF9fbWlkMik7IHRocm93OyB9Owp9Cgp9CiMgMjYgIi9ob21lNS9rcmFrb3cv bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2Jp dHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9yYXdfc3RvcmFn ZV9pdGVyLmgiIDEgMwojIDM0ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVy LmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwg Y2xhc3MgX1RwPgpjbGFzcyByYXdfc3RvcmFnZV9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfRm9y d2FyZEl0ZXJhdG9yIF9NX2l0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90 YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRl ZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVm IHZvaWQgcmVmZXJlbmNlOwoKICBleHBsaWNpdCByYXdfc3RvcmFnZV9pdGVyYXRvcihfRm9yd2Fy ZEl0ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkge30KICByYXdfc3RvcmFnZV9pdGVyYXRvciYg b3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICByYXdfc3RvcmFnZV9pdGVyYXRvciYgb3Bl cmF0b3I9KGNvbnN0IF9UcCYgX19lbGVtZW50KSB7CiAgICBjb25zdHJ1Y3QoJipfTV9pdGVyLCBf X2VsZW1lbnQpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICByYXdfc3RvcmFnZV9pdGVyYXRvcjxf Rm9yd2FyZEl0ZXJhdG9yLCBfVHA+JiBvcGVyYXRvcisrKCkgewogICAgKytfTV9pdGVyOwogICAg cmV0dXJuICp0aGlzOwogIH0KICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9y LCBfVHA+IG9wZXJhdG9yKysoaW50KSB7CiAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2Fy ZEl0ZXJhdG9yLCBfVHA+IF9fdG1wID0gKnRoaXM7CiAgICArK19NX2l0ZXI7CiAgICByZXR1cm4g X190bXA7CiAgfQp9OwoKCn0KIyAyNyAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfbWVtb3J5LmgiIDIg MwoKbmFtZXNwYWNlIHN0ZAp7CgogdGVtcGxhdGU8Y2xhc3MgX1RwMT4gc3RydWN0IGF1dG9fcHRy X3JlZiB7CiAgIF9UcDEqIF9NX3B0cjsKICAgYXV0b19wdHJfcmVmKF9UcDEqIF9fcCkgOiBfTV9w dHIoX19wKSB7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gY2xhc3MgYXV0b19wdHIgewpwcml2 YXRlOgogIF9UcCogX01fcHRyOwoKcHVibGljOgogIHR5cGVkZWYgX1RwIGVsZW1lbnRfdHlwZTsK CiAgZXhwbGljaXQgYXV0b19wdHIoX1RwKiBfX3AgPSAwKSB0aHJvdygpIDogX01fcHRyKF9fcCkg e30KICBhdXRvX3B0cihhdXRvX3B0ciYgX19hKSB0aHJvdygpIDogX01fcHRyKF9fYS5yZWxlYXNl KCkpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhdXRvX3B0cihhdXRvX3B0cjxfVHAxPiYg X19hKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7fQoKICBhdXRvX3B0ciYg b3BlcmF0b3I9KGF1dG9fcHRyJiBfX2EpIHRocm93KCkgewogICAgcmVzZXQoX19hLnJlbGVhc2Uo KSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBhdXRv X3B0ciYgb3BlcmF0b3I9KGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkgewogICAgcmVzZXQo X19hLnJlbGVhc2UoKSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgoKCiAgfmF1dG9fcHRyKCkg eyBkZWxldGUgX01fcHRyOyB9CgogIF9UcCYgb3BlcmF0b3IqKCkgY29uc3QgdGhyb3coKSB7CiAg ICByZXR1cm4gKl9NX3B0cjsKICB9CiAgX1RwKiBvcGVyYXRvci0+KCkgY29uc3QgdGhyb3coKSB7 CiAgICByZXR1cm4gX01fcHRyOwogIH0KICBfVHAqIGdldCgpIGNvbnN0IHRocm93KCkgewogICAg cmV0dXJuIF9NX3B0cjsKICB9CiAgX1RwKiByZWxlYXNlKCkgdGhyb3coKSB7CiAgICBfVHAqIF9f dG1wID0gX01fcHRyOwogICAgX01fcHRyID0gMDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgdm9p ZCByZXNldChfVHAqIF9fcCA9IDApIHRocm93KCkgewogICAgaWYgKF9fcCAhPSBfTV9wdHIpIHsK ICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgX01fcHRyID0gX19wOwogICAgfQogIH0KCgoKCgpw dWJsaWM6CiAgYXV0b19wdHIoYXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRocm93KCkKICAgIDog X01fcHRyKF9fcmVmLl9NX3B0cikge30KCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0cl9y ZWY8X1RwPiBfX3JlZikgdGhyb3coKSB7CiAgICBpZiAoX19yZWYuX01fcHRyICE9IHRoaXMtPmdl dCgpKSB7CiAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsK ICAgIH0KICAgIHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBvcGVy YXRvciBhdXRvX3B0cl9yZWY8X1RwMT4oKSB0aHJvdygpCiAgICB7IHJldHVybiBhdXRvX3B0cl9y ZWY8X1RwPih0aGlzLT5yZWxlYXNlKCkpOyB9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IG9wZXJh dG9yIGF1dG9fcHRyPF9UcDE+KCkgdGhyb3coKQogICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4o dGhpcy0+cmVsZWFzZSgpKTsgfQp9OwoKfQojIDQ0ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9zdHJp bmcuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy90eXBlX3RyYWl0cy5oIiAxIDMKIyA0NSAi L2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv aW5jbHVkZS9nKysvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMv c3RkX2lvc2Z3ZC5oIiAxIDMKIyA0NiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfc3RyaW5nLmgiIDIg MwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDEgMwojIDM4ICIvaG9tZTUv a3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl L2crKy9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCgojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL3NwYXJjLXN1bi1z b2xhcmlzMi44L2JpdHMvYXRvbWljaXR5LmgiIDEgMwojIDMzICIvaG9tZTUva3Jha293L2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1z dW4tc29sYXJpczIuOC9iaXRzL2F0b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNfd29y ZDsKCnN0YXRpYyBpbnQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2V4Y2hhbmdlX2Fu ZF9hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkKewogIHN0YXRp YyB1bnNpZ25lZCBjaGFyIF9fbG9jazsKICBfQXRvbWljX3dvcmQgX19yZXN1bHQsIF9fdG1wOwoK ICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiMToJbGRzdHViCVslMV0sICUwXG5cdCIKICAgICAgICAg ICAgICAgICAgICAgICAiCWNtcAklMCwgMFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgIgli bmUJMWJcblx0IgogICAgICAgICAgICAgICAgICAgICAgICIJIG5vcCIKICAgICAgICAgICAgICAg ICAgICAgICA6ICI9JnIiIChfX3RtcCkKICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAoJl9f bG9jaykKICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICBfX3Jlc3VsdCA9ICpf X21lbTsKICAqX19tZW0gKz0gX192YWw7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YgklJWcw LCBbJTBdIgogICAgICAgICAgICAgICAgICAgICAgIDoKICAgICAgICAgICAgICAgICAgICAgICA6 ICJyIiAoJl9fbG9jaykKICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICByZXR1 cm4gX19yZXN1bHQ7Cn0KCnN0YXRpYyB2b2lkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkK X19hdG9taWNfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCnsK ICBzdGF0aWMgdW5zaWduZWQgY2hhciBfX2xvY2s7CiAgX0F0b21pY193b3JkIF9fdG1wOwoKICBf X2FzbV9fIF9fdm9sYXRpbGVfXygiMToJbGRzdHViCVslMV0sICUwXG5cdCIKICAgICAgICAgICAg ICAgICAgICAgICAiCWNtcAklMCwgMFxuXHQiCiAgICAgICAgICAgICAgICAgICAgICAgIglibmUJ MWJcblx0IgogICAgICAgICAgICAgICAgICAgICAgICIJIG5vcCIKICAgICAgICAgICAgICAgICAg ICAgICA6ICI9JnIiIChfX3RtcCkKICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAoJl9fbG9j aykKICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICAqX19tZW0gKz0gX192YWw7 CiAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YgklJWcwLCBbJTBdIgogICAgICAgICAgICAgICAg ICAgICAgIDoKICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAoJl9fbG9jaykKICAgICAgICAg ICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKfQoKc3RhdGljIGludApfX2F0dHJpYnV0ZV9fICgo X191bnVzZWRfXykpCl9fY29tcGFyZV9hbmRfc3dhcCAodm9sYXRpbGUgbG9uZyAqX19wLCBsb25n IF9fb2xkdmFsLCBsb25nIF9fbmV3dmFsKQp7CiAgc3RhdGljIHVuc2lnbmVkIGNoYXIgX19sb2Nr OwogIGxvbmcgX19yZXQsIF9fdG1wOwoKICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiMToJbGRzdHVi CVslMV0sICUwXG5cdCIKICAgICAgICAgICAgICAgICAgICAgICAiCWNtcAklMCwgMFxuXHQiCiAg ICAgICAgICAgICAgICAgICAgICAgIglibmUJMWJcblx0IgogICAgICAgICAgICAgICAgICAgICAg ICIJIG5vcCIKICAgICAgICAgICAgICAgICAgICAgICA6ICI9JnIiIChfX3RtcCkKICAgICAgICAg ICAgICAgICAgICAgICA6ICJyIiAoJl9fbG9jaykKICAgICAgICAgICAgICAgICAgICAgICA6ICJt ZW1vcnkiKTsKICBpZiAoKl9fcCAhPSBfX29sZHZhbCkKICAgIF9fcmV0ID0gMDsKICBlbHNlCiAg ICB7CiAgICAgICpfX3AgPSBfX25ld3ZhbDsKICAgICAgX19yZXQgPSAxOwogICAgfQogIF9fYXNt X18gX192b2xhdGlsZV9fKCJzdGIJJSVnMCwgWyUwXSIKICAgICAgICAgICAgICAgICAgICAgICA6 CiAgICAgICAgICAgICAgICAgICAgICAgOiAiciIgKCZfX2xvY2spCiAgICAgICAgICAgICAgICAg ICAgICAgOiAibWVtb3J5Iik7CgogIHJldHVybiBfX3JldDsKfQojIDQwICIvaG9tZTUva3Jha293 L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9i aXRzL2Jhc2ljX3N0cmluZy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDgzICIvaG9tZTUva3Jh a293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2cr Ky9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBiYXNpY19zdHJpbmcKICAg IHsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgdHlw ZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j OjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlm ZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxs b2M6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpj b25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9B bGxvYzo6cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29u c3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIF9fbm9ybWFsX2l0ZXJhdG9y PHBvaW50ZXIsIGJhc2ljX3N0cmluZz4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX19ub3JtYWxf aXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgYmFzaWNfc3RyaW5nPiBjb25zdF9pdGVyYXRvcjsKICAg ICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNl X2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVy c2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKIyAxMTggIi9ob21lNS9rcmFrb3cvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvYmFzaWNf c3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9SZXAKICAgICAgewoKICAgICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9BbGxvYzo6cmViaW5kPGNoYXI+OjpvdGhlciBfUmF3X2J5dGVzX2FsbG9jOwojIDEz NiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9nKysvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICAgIHN0YXRpYyBjb25z dCBzaXplX3R5cGUgX1NfbWF4X3NpemU7CiAgICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190 ZXJtaW5hbDsKCiAgICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUg X01fY2FwYWNpdHk7CiAgICAgICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAg IGJvb2wKICAgICAgICBfTV9pc19sZWFrZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3Jl ZmVyZW5jZXMgPCAwOyB9CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25z dAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAg ICAgICBfTV9zZXRfbGVha2VkKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAg ICAgICB2b2lkCiAgICAgICAgX01fc2V0X3NoYXJhYmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5j ZXMgPSAwOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQog ICAgICAgIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4gKHRoaXMgKyAxKTsgfQoK ICAgICAgICBfQ2hhclQmCiAgICAgICAgb3BlcmF0b3JbXShzaXplX3QgX19zKSB0aHJvdygpCiAg ICAgICAgeyByZXR1cm4gX01fcmVmZGF0YSgpIFtfX3NdOyB9CgogICAgICAgIF9DaGFyVCoKICAg ICAgICBfTV9ncmFiKGNvbnN0IF9BbGxvYyYgX19hbGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxv YzIpCiAgICAgICAgeyByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2Fs bG9jMikgPwogICAgICAgICAgICBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9jMSk7IH0K CgogICAgICAgIHN0YXRpYyBfUmVwKgogICAgICAgIF9TX2NyZWF0ZShzaXplX3QsIGNvbnN0IF9B bGxvYyYpOwoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxsb2MmIF9f YSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZlcmVu Y2VzLCAtMSkgPD0gMCkKICAgICAgICAgICAgX01fZGVzdHJveShfX2EpOwogICAgICAgIH0KCiAg ICAgICAgdm9pZAogICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3coKTsKCiAg ICAgICAgX0NoYXJUKgogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJvdygpCiAgICAgICAgewogICAg ICAgICAgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsKICAgICAgICAgIHJldHVybiBf TV9yZWZkYXRhKCk7CiAgICAgICAgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fY2xvbmUo Y29uc3QgX0FsbG9jJiwgc2l6ZV90eXBlIF9fcmVzID0gMCk7CiMgMjA4ICIvaG9tZTUva3Jha293 L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9i aXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgICAgaW5saW5lIHN0YXRpYyBib29sCiAgICAgICAg X1NfZXhjZXNzX3Nsb3Aoc2l6ZV90LCBzaXplX3QpOwoKICAgICAgfTsKCgogICAgICBzdHJ1Y3Qg X0FsbG9jX2hpZGVyIDogX0FsbG9jCiAgICAgIHsKICAgICAgICBfQWxsb2NfaGlkZXIoX0NoYXJU KiBfX2RhdCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgOiBfQWxsb2MoX19hKSwgX01fcChf X2RhdCkgeyB9CgogICAgICAgIF9DaGFyVCogX01fcDsKICAgICAgfTsKCiAgICBwdWJsaWM6CgoK CiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9IHN0YXRpY19jYXN0PHNpemVfdHlw ZT4oLTEpOwoKICAgIHByaXZhdGU6CgogICAgICBtdXRhYmxlIF9BbGxvY19oaWRlciBfTV9kYXRh cGx1czsKCgoKICAgICAgc3RhdGljIHNpemVfdHlwZSBfU19lbXB0eV9yZXBfc3RvcmFnZVsoc2l6 ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVv ZihzaXplX3R5cGUpXTsKCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0YSgpIGNvbnN0CiAgICAg IHsgcmV0dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0KCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0 YShfQ2hhclQqIF9fcCkKICAgICAgeyByZXR1cm4gKF9NX2RhdGFwbHVzLl9NX3AgPSBfX3ApOyB9 CgogICAgICBfUmVwKgogICAgICBfTV9yZXAoKSBjb25zdAogICAgICB7IHJldHVybiAmKChyZWlu dGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFdKTsgfQoKCgogICAgICBpdGVyYXRv cgogICAgICBfTV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOyB9 CgogICAgICBpdGVyYXRvcgogICAgICBfTV9pZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io X01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9sZWFrKCkK ICAgICAgewogICAgICAgIGlmICghX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgICAg X01fbGVha19oYXJkKCk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2NoZWNrKHNp emVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNp emUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Ol9NX2No ZWNrIik7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19wb3M7CiAgICAgIH0KCgogICAg ICBpdGVyYXRvcgogICAgICBfTV9mb2xkKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fb2Zm KSBjb25zdAogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvZmYgPSBfX29mZiA8IHRoaXMtPnNp emUoKSAtIF9fcG9zOwogICAgICAgIHNpemVfdHlwZSBfX25ld29mZiA9IF9fdGVzdG9mZiA/IF9f b2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIChfTV9pYmVnaW4oKSAr IF9fcG9zICsgX19uZXdvZmYpOwogICAgICB9CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JdGVy YXRvcj4KICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBf X3AsIF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikKICAgICAgICB7CiAgICAgICAgICBm b3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQogICAgICAgICAgICB0cmFpdHNfdHlw ZTo6YXNzaWduKCpfX3AsICpfX2sxKTsKICAgICAgICB9CgogICAgICBzdGF0aWMgdm9pZAogICAg ICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2sy KQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9 CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25z dF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hh cnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAog ICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19r MikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoK ICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3Qg X0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNv cHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fbXV0YXRl KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMik7Cgog ICAgICB2b2lkCiAgICAgIF9NX2xlYWtfaGFyZCgpOwoKICAgICAgc3RhdGljIF9SZXAmCiAgICAg IF9TX2VtcHR5X3JlcCgpCiAgICAgIHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PF9SZXAqPigm X1NfZW1wdHlfcmVwX3N0b3JhZ2UpOyB9CgogICAgcHVibGljOgoKCgoKICAgICAgaW5saW5lCiAg ICAgIGJhc2ljX3N0cmluZygpOwoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nKGNv bnN0IF9BbGxvYyYgX19hKTsKCgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0cik7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBz aXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uID0gbnBvcyk7 CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg X19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9f YSk7CgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24s CiAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAg YmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxv YygpKTsKICAgICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0 IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRl cmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXJhdG9yIF9fYmVnaW4sIF9JbnB1 dEl0ZXJhdG9yIF9fZW5kLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9 IF9BbGxvYygpKTsKCiAgICAgIH5iYXNpY19zdHJpbmcoKQogICAgICB7IF9NX3JlcCgpLT5fTV9k aXNwb3NlKHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg ICAgb3BlcmF0b3I9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMtPmFz c2lnbihfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KGNvbnN0 IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zKTsgfQoKICAgICAgYmFzaWNf c3RyaW5nJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXNzaWdu KDEsIF9fYyk7IH0KCgogICAgICBpdGVyYXRvcgogICAgICBiZWdpbigpCiAgICAgIHsKICAgICAg ICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7CiAgICAgIH0K CiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4g Y29uc3RfaXRlcmF0b3IoX01fZGF0YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZW5kKCkK ICAgICAgewogICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9k YXRhKCkgKyB0aGlzLT5zaXplKCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAg ICBlbmQoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkgKyB0 aGlzLT5zaXplKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpCiAg ICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICBjb25z dF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNv bnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJh dG9yCiAgICAgIHJlbmQoKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJl Z2luKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSBjb25z dAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9 CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIHNpemUoKSBjb25zdCB7IHJldHVy biBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbGVuZ3RoKCkg Y29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAg ICAgIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX1JlcDo6X1NfbWF4X3NpemU7IH0KCiAgICAg IHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdm9p ZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbikgeyB0aGlzLT5yZXNpemUoX19uLCBfQ2hhclQo KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIF9N X3JlcCgpLT5fTV9jYXBhY2l0eTsgfQoKICAgICAgdm9pZAogICAgICByZXNlcnZlKHNpemVfdHlw ZSBfX3Jlc19hcmcgPSAwKTsKCiAgICAgIHZvaWQKICAgICAgY2xlYXIoKSB7IF9NX211dGF0ZSgw LCB0aGlzLT5zaXplKCksIDApOyB9CgogICAgICBib29sCiAgICAgIGVtcHR5KCkgY29uc3QgeyBy ZXR1cm4gdGhpcy0+c2l6ZSgpID09IDA7IH0KCgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAg b3BlcmF0b3JbXSAoc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kYXRh KClbX19wb3NdOyB9CgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUg X19wb3MpCiAgICAgIHsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEo KVtfX3Bvc107CiAgICAgIH0KCiAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBhdChzaXplX3R5 cGUgX19uKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCiAg ICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOwogICAgICAg IHJldHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIGF0 KHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHNpemUoKSkKICAgICAg ICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAgX01f bGVhaygpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoKCiAgICAgIGJh c2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7 IHJldHVybiB0aGlzLT5hcHBlbmQoX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg IG9wZXJhdG9yKz0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3Mp OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oX0NoYXJUIF9fYykgeyBy ZXR1cm4gdGhpcy0+YXBwZW5kKHNpemVfdHlwZSgxKSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3Ry aW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNp Y19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5 cGUgX19wb3MsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBl bmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5n JgogICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFw cGVuZChfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmlu ZyYKICAgICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxh dGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIGFw cGVuZChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAg ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19maXJzdCwg X19sYXN0KTsgfQoKICAgICAgdm9pZAogICAgICBwdXNoX2JhY2soX0NoYXJUIF9fYykKICAgICAg eyB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCAxLCBfX2MpOyB9CgogICAgICBi YXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAg ICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIHJldHVybiB0 aGlzLT5hc3NpZ24oX19zdHIuX01fY2hlY2soX19wb3MpLCBfX3N0ci5fTV9mb2xkKF9fcG9zLCBf X24pKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0No YXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3Ms IF9fcyArIF9fbik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IF9D aGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zLCBfX3MgKyB0cmFpdHNf dHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihz aXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9N X2liZWdpbigpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIGFzc2lnbihfSW5w dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgeyByZXR1 cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3Qp OyB9CgogICAgICB2b2lkCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIHNpemVfdHlwZSBfX24s IF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19uLCBfX2MpOyB9 CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkIGluc2Vy dChpdGVyYXRvciBfX3AsIF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2Vu ZCkKICAgICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fYmVnLCBfX2VuZCk7IH0KCiAg ICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJh c2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX3AgPSBfTV9jaGVj ayhfX3BvczEpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fc3RyLl9NX2liZWdp bigpLCBfX3N0ci5fTV9pZW5kKCkpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAg ICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlw ZSBfX24pCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX3AgPSBfTV9jaGVjayhfX3BvczEpOwog ICAgICAgIHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fc3RyLl9NX2NoZWNrKF9fcG9zMiksCiAg ICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zMiwgX19uKSk7CiAgICAgICAg cmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChz aXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7 CiAgICAgICAgaXRlcmF0b3IgX19wID0gX01fY2hlY2soX19wb3MpOwogICAgICAgIHRoaXMtPnJl cGxhY2UoX19wLCBfX3AsIF9fcywgX19zICsgX19uKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg ICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bvcywg Y29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvcywgX19z LCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg IGluc2VydChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAg IHsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBfX24sIF9fYyk7CiAgICAg ICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnQoaXRl cmF0b3IgX19wLCBfQ2hhclQgX19jID0gX0NoYXJUKCkpCiAgICAgIHsKICAgICAgICBzaXplX3R5 cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hl Y2soX19wb3MpLCBzaXplX3R5cGUoMSksIF9fYyk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9s ZWFrZWQoKTsKICAgICAgICByZXR1cm4gdGhpcy0+X01faWJlZ2luKCkgKyBfX3BvczsKICAgICAg fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBlcmFzZShzaXplX3R5cGUgX19wb3MgPSAwLCBz aXplX3R5cGUgX19uID0gbnBvcykKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNl KF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9y CiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAgICAgIHsKICAgICAgICBzaXplX3R5 cGUgX19pID0gX19wb3NpdGlvbiAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2Uo X19wb3NpdGlvbiwgX19wb3NpdGlvbiArIDEsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAg ICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSAr IF9faTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJz dCwgaXRlcmF0b3IgX19sYXN0KQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fZmly c3QgLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5yZXBsYWNlKF9fZmlyc3QsIF9fbGFzdCwg X01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7 CiAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0 cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0 IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFj ZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbiksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fc3RyLmJlZ2luKCksIF9fc3RyLmVuZCgpKTsKICAgICAgfQoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBf X24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlwZSBf X3BvczIsIHNpemVfdHlwZSBfX24yKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFj ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAg ICAgICAgICAgICBzaXplX3R5cGUgX19uMikKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5y ZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uMSksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24yKTsKICAgICAgfQoKICAgICAgYmFzaWNf c3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNv bnN0IF9DaGFyVCogX19zKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01f Y2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7CiAgICAgIH0KCiAg ICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw ZSBfX24xLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHJldHVy biB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uMSksIF9f bjIsIF9fYyk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVy YXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAg ICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fc3RyLmJlZ2luKCksIF9fc3Ry LmVuZCgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9f aTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFy VCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEs IF9faTIsIF9fcywgX19zICsgX19uKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBs YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19zKQogICAg ICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBi YXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwg c2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJ dGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgcmVwbGFjZShpdGVyYXRvciBf X2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMSwg X0lucHV0SXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVybiBfTV9yZXBsYWNlKF9faTEsIF9f aTIsIF9fazEsIF9fazIsCiAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu cHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsgfQoKICAgIHByaXZhdGU6CiAgICAg IHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAg ICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXJh dG9yIF9fazEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2syLCBpbnB1dF9p dGVyYXRvcl90YWcpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXJhdG9yPgogICAgICAg IGJhc2ljX3N0cmluZyYKICAgICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y IF9faTIsIF9Gd2RJdGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0Z3ZEl0ZXJhdG9y IF9fazIsIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lu SXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0lu SXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0luSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7 CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hLCBfVGFnKCkp OwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGlj IF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIg X19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVl X3R5cGUpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdChzdGF0aWNfY2Fz dDxzaXplX3R5cGU+KF9fYmVnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj X2Nhc3Q8dmFsdWVfdHlwZT4oX19lbmQpLCBfX2EpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRl PGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1 Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAg ICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0lu dGVncmFsIF9JbnRlZ3JhbDsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3RfYXV4KF9fYmVn LCBfX2VuZCwgX19hLCBfSW50ZWdyYWwoKSk7CiAgICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPGNs YXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICAgX1NfY29uc3RydWN0 KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAg ICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xh c3MgX0Z3ZEl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3Qo X0Z3ZEl0ZXIgX19lbmQsIF9Gd2RJdGVyIF9fYmVnLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAg ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKICAgICAgc3RhdGljIF9DaGFy VCoKICAgICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3Qg X0FsbG9jJiBfX2EpOwoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBjb3B5KF9D aGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAg ICAgIHZvaWQKICAgICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX3MpOwoKCiAgICAgIGNvbnN0IF9DaGFyVCoKICAgICAgY19zdHIoKSBjb25zdAogICAgICB7 CgogICAgICAgIHNpemVfdHlwZSBfX24gPSB0aGlzLT5zaXplKCk7CiAgICAgICAgdHJhaXRzX3R5 cGU6OmFzc2lnbihfTV9kYXRhKClbX19uXSwgX1JlcDo6X1NfdGVybWluYWwpOwogICAgICAgIHJl dHVybiBfTV9kYXRhKCk7CiAgICAgIH0KCiAgICAgIGNvbnN0IF9DaGFyVCoKICAgICAgZGF0YSgp IGNvbnN0IHsgcmV0dXJuIF9NX2RhdGEoKTsgfQoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAg Z2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFwbHVzOyB9CgogICAgICBzaXpl X3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXpl X3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IGJhc2lj X3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAg c2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9 IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5 cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoX0NoYXJUIF9f Yywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZp bmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIu c2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19z LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBl CiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6 bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoX0NoYXJUIF9fYywg c2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmlu ZF9maXJzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAw KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwg X19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0 X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNv bnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBf X3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRf Zmlyc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAg c2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9z ID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX2MsIF9fcG9zKTsgfQoKICAg ICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry LCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5k X2xhc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6 ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f cG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xh c3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6 bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKF9DaGFy VCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt PnJmaW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9u b3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBf X3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rf bm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZp bmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zLCB0 cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9m aXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAg ICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9f c3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5m aW5kX2xhc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAg ICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBz aXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29u c3Q7CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCog X19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5m aW5kX2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0K CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVf dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0OwoKICAgICAgYmFzaWNfc3RyaW5nCiAgICAgIHN1YnN0 cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykgY29uc3QKICAgICAg ewogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0 X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnN1YnN0ciIpOwogICAgICAgIHJldHVybiBiYXNpY19z dHJpbmcoKnRoaXMsIF9fcG9zLCBfX24pOwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFy ZShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgICB7CiAgICAgICAgc2l6ZV90 eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9f c3RyLnNpemUoKTsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zaXplLCBfX29zaXpl KTsKCiAgICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19z dHIuZGF0YSgpLCBfX2xlbik7CiAgICAgICAgaWYgKCFfX3IpCiAgICAgICAgICBfX3IgPSBfX3Np emUgLSBfX29zaXplOwogICAgICAgIHJldHVybiBfX3I7CiAgICAgIH0KCiAgICAgIGludAogICAg ICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3Ry aW5nJiBfX3N0cikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19w b3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAg ICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3Q7CgogICAgICBpbnQK ICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3Q7CgoKCiAgICAgIGludAogICAg ICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCog X19zKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6 ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBf X24yKSBjb25zdDsKCiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKCkKICAgIDogX01fZGF0YXBsdXMo X1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpLCBfQWxsb2MoKSkgeyB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAg ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAg IHsKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xo cyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0 b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp bmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3Ir KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAg ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsKICAgICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChf X3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLCBfQ2hhclQgX19yaHMpCiAg ICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBf X3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVf dHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cihfX2xocyk7CiAgICAg IF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7 CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBj b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsg cmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v bAogICAgb3BlcmF0b3I9PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25z dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0 dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID09IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAog ICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJu IF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg IG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg X19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0gMDsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9DaGFyVCogX19s aHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0gMDsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hh clQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgIT0gMDsgfQoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMu Y29tcGFyZShfX3JocykgPCAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y PChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAg ICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFy ZShfX3JocykgPCAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25z dCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xo cykgPiAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7 IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v bAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVy biBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAg b3BlcmF0b3I+KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jo cy5jb21wYXJlKF9fbGhzKSA8IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMs CiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQq IF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAg ICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f cmhzKQogIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID49IDA7IH0KCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFy ZShfX3JocykgPj0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNv bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAg ICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShf X3JocykgPj0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0 IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMp IDw9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4o YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JiBfX2lzLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9fZGVsaW0pOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19p c3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX3N0cik7Cn0KIyA0NyAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfc3RyaW5nLmgi IDIgMwoKCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDEgMwojIDMxICIv aG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9p bmNsdWRlL2crKy9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMwoKIyAxICIvaG9tZTUva3Jha293L2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRz L3N0bF9hbGdvYmFzZS5oIiAxIDMKIyAzMyAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfYWxnb3JpdGht LmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyAzNCAi L2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv aW5jbHVkZS9nKysvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cv bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2Jp dHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgMzUgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Fs Z29yaXRobS5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF90ZW1wYnVmLmgiIDEgMwoj IDM2ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9hbGdvcml0aG0uaCIgMiAzCiMgMSAiL2hvbWU1L2ty YWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9n KysvYml0cy9zdGxfYWxnby5oIiAxIDMKIyAzNCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnby5o IiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfaGVhcC5oIiAxIDMKIyAzMyAiL2hvbWU1L2ty YWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9n KysvYml0cy9zdGxfaGVhcC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4Kdm9pZApf X3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgX0Rp c3RhbmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUpCnsK ICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgd2hpbGUgKF9f aG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkgPCBfX3ZhbHVl KSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7 CiAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50OwogICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXgg LSAxKSAvIDI7CiAgfQogICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xh c3MgX1RwPgppbmxpbmUgdm9pZApfX3B1c2hfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fZmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBf RGlzdGFuY2UqLCBfVHAqKQp7CiAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKChfX2xh c3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2UoMCksCiAgICAgICAgICAgICAgX1RwKCooX19s YXN0IC0gMSkpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5s aW5lIHZvaWQKcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKCiAgX19wdXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLCBfX3ZhbHVlX3R5cGUoX19m aXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf RGlzdGFuY2UsIGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkCl9fcHVz aF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5k ZXgsCiAgICAgICAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSwgX0NvbXBh cmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAy OwogIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCAr IF9fcGFyZW50KSwgX192YWx1ZSkpIHsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICoo X19maXJzdCArIF9fcGFyZW50KTsKICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICBfX3Bh cmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICB9CiAgKihfX2ZpcnN0ICsgX19ob2xlSW5k ZXgpID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg Y2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5s aW5lIHZvaWQKX19wdXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAog ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19j b21wLAogICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikKewogIF9fcHVzaF9oZWFwKF9f Zmlyc3QsIF9EaXN0YW5jZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlKDApLAog ICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCnB1 c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fbGFzdCwKICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgogIF9fcHVzaF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f Y29tcCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLCBfX3ZhbHVl X3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y LCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4Kdm9pZApfX2FkanVzdF9oZWFwKF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAg ICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSkKewogIF9EaXN0YW5jZSBfX3RvcEluZGV4 ID0gX19ob2xlSW5kZXg7CiAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5k ZXggKyAyOwogIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgIGlmICgqKF9fZmly c3QgKyBfX3NlY29uZENoaWxkKSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKQog ICAgICBfX3NlY29uZENoaWxkLS07CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9f Zmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsK ICAgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsKICB9CiAgaWYgKF9f c2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICoo X19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29u ZENoaWxkIC0gMTsKICB9CiAgX19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9fdG9w SW5kZXgsIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y LCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQKX19wb3BfaGVhcChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwK ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBf RGlzdGFuY2UqKQp7CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgX19hZGp1c3RfaGVhcChfX2Zp cnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX192YWx1ZSk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcD4KaW5s aW5lIHZvaWQKX19wb3BfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9UcCopCnsKICBfX3Bv cF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsCiAgICAgICAgICAgICBfVHAo KihfX2xhc3QgLSAxKSksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB2b2lkIHBvcF9oZWFwKF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKCiAgX19wb3BfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5 cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBj bGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lk Cl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBf X2hvbGVJbmRleCwKICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlLCBf Q29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4Owog IF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICB3aGlsZSAo X19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICBpZiAoX19jb21wKCooX19maXJzdCArIF9fc2Vj b25kQ2hpbGQpLCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkpCiAgICAgIF9fc2Vj b25kQ2hpbGQtLTsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9f c2Vjb25kQ2hpbGQpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgX19zZWNv bmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogIH0KICBpZiAoX19zZWNvbmRDaGls ZCA9PSBfX2xlbikgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsg KF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAx OwogIH0KICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192 YWx1ZSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5s aW5lIHZvaWQKX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXAsCiAgICAgICAgICAgX0Rpc3Rh bmNlKikKewogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIF9fYWRqdXN0X2hlYXAoX19maXJzdCwg X0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksCiAgICAgICAgICAgICAg ICBfX3ZhbHVlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZApfX3BvcF9oZWFwX2F1 eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX19wb3BfaGVh cChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBfVHAoKihfX2xhc3QgLSAxKSksIF9f Y29tcCwKICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9p ZApwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCiAgX19wb3BfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBf X3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkCl9fbWFrZV9o ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgaWYgKF9fbGFzdCAtIF9f Zmlyc3QgPCAyKSByZXR1cm47CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsK ICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICB3aGlsZSAodHJ1ZSkgewog ICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9UcCgqKF9fZmlyc3Qg KyBfX3BhcmVudCkpKTsKICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICBfX3BhcmVu dC0tOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5l IHZvaWQKbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwoKCiAgX19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LAogICAgICAgICAg ICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAg ICAgICAgICBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZApfX21ha2VfaGVhcChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwK ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgaWYgKF9f bGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0g X19maXJzdDsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICB3aGlsZSAo dHJ1ZSkgewogICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9UcCgq KF9fZmlyc3QgKyBfX3BhcmVudCkpLAogICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgaWYg KF9fcGFyZW50ID09IDApIHJldHVybjsKICAgIF9fcGFyZW50LS07CiAgfQp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQK bWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCiAgX19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LCBfX2Nv bXAsCiAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUo X19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgp2b2lk IHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCgogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgIHBvcF9oZWFwKF9f Zmlyc3QsIF9fbGFzdC0tKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRv ciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQKc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2ZpcnN0LAogICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUg X19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9f bGFzdCAtIF9fZmlyc3QgPiAxKQogICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0sIF9fY29t cCk7Cn0KCn0KIyAzNSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnby5oIiAyIDMKCgoKbmFtZXNw YWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBjb25zdCBfVHAmIF9fbWVk aWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpCnsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogIGlmIChfX2EgPCBfX2IpCiAgICBpZiAoX19iIDwgX19jKQogICAgICByZXR1cm4gX19i OwogICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICByZXR1cm4gX19jOwogICAgZWxzZQogICAg ICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgIHJldHVybiBfX2E7CiAgZWxz ZSBpZiAoX19iIDwgX19jKQogICAgcmV0dXJuIF9fYzsKICBlbHNlCiAgICByZXR1cm4gX19iOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYK X19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYywg X0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGlmIChfX2NvbXAo X19hLCBfX2IpKQogICAgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAgIHJldHVybiBfX2I7CiAg ICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICByZXR1cm4gX19jOwogICAgZWxzZQog ICAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICByZXR1cm4g X19hOwogIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICByZXR1cm4gX19jOwogIGVsc2UK ICAgIHJldHVybiBfX2I7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Z1 bmN0aW9uPgpfRnVuY3Rpb24gZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy IF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBmb3IgKCA7IF9fZmlyc3QgIT0g X19sYXN0OyArK19fZmlyc3QpCiAgICBfX2YoKl9fZmlyc3QpOwogIHJldHVybiBfX2Y7Cn0KCgoK dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIF9JbnB1dEl0ZXIg ZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRf aXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICEoKl9fZmlyc3Qg PT0gX192YWwpKQogICAgKytfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9JbnB1dEl0ZXIgZmlu ZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAg IGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19w cmVkKCpfX2ZpcnN0KSkKICAgICsrX19maXJzdDsKICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVy IGZpbmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAg ICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50 CiAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+ IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4g X19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVy biBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0 dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy ZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICB9CgogIHN3aXRjaChfX2xhc3QgLSBfX2Zp cnN0KSB7CiAgY2FzZSAzOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJz dDsKICAgICsrX19maXJzdDsKICBjYXNlIDI6CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJl dHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMToKICAgIGlmICgqX19maXJzdCA9 PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAwOgogIGRlZmF1 bHQ6CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl c3NJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfUmFuZG9tQWNjZXNzSXRlciBmaW5kX2lmKF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAg ICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewogIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAg ID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7 IC0tX190cmlwX2NvdW50KSB7CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly c3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2Zp cnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19m aXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9f Zmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewog IGNhc2UgMzoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsr X19maXJzdDsKICBjYXNlIDI6CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly c3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAxOgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJl dHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMDoKICBkZWZhdWx0OgogICAgcmV0 dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+ CmlubGluZSBfSW5wdXRJdGVyIGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwoKICByZXR1cm4gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0 ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs IGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfSW5wdXRJdGVyIGZpbmRfaWYoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJl ZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gZmluZF9pZihfX2ZpcnN0 LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIGFkamFjZW50X2ZpbmQoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2xhc3Q7CiAgX0Zvcndh cmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAg ICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBfX2Zp cnN0ID0gX19uZXh0OwogIH0KICByZXR1cm4gX19sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRf ZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIF9fbGFz dDsKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICB3aGlsZSgrK19fbmV4dCAhPSBf X2xhc3QpIHsKICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkKICAgICAg cmV0dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0ID0gX19uZXh0OwogIH0KICByZXR1cm4gX19sYXN0 Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBf U2l6ZT4Kdm9pZCBjb3VudChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBj b25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICAgICAgX1NpemUmIF9fbikKewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAo Kl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfU2l6ZT4Kdm9pZCBjb3VudF9pZihfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCwKICAg ICAgICAgICAgICBfU2l6ZSYgX19uKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3Qg IT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKytf X247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CnR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCmNvdW50KF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46 OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19maXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKQogICAgICArK19fbjsKICByZXR1 cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4K dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKY291 bnRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBf X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz dDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICsrX19uOwogIHJl dHVybiBfX247Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9y d2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBf Rm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIg X19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgoKCgogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09 IF9fbGFzdDIpCiAgICByZXR1cm4gX19maXJzdDE7CgoKICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9f Zmlyc3QyKTsKICArK19fdG1wOwogIGlmIChfX3RtcCA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGZp bmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CgoKCiAgX0ZvcndhcmRJdGVyMiBfX3Ax LCBfX3A7CgogIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICBfRm9yd2FyZEl0ZXIxIF9fY3Vy cmVudCA9IF9fZmlyc3QxOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgX19m aXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwogICAgaWYgKF9fZmly c3QxID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgIF9fcCA9IF9fcDE7CiAg ICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQog ICAgICByZXR1cm4gX19sYXN0MTsKCiAgICB3aGlsZSAoKl9fY3VycmVudCA9PSAqX19wKSB7CiAg ICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAg aWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9 CgogICAgKytfX2ZpcnN0MTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWQ+ Cl9Gb3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRl cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0Miwg X0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZCBf X3ByZWRpY2F0ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgogIGlm IChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4g X19maXJzdDE7CgoKICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICArK19fdG1wOwog IGlmIChfX3RtcCA9PSBfX2xhc3QyKSB7CiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm JiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICArK19fZmlyc3QxOwog ICAgcmV0dXJuIF9fZmlyc3QxOwogIH0KCgoKICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAg X19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19m aXJzdDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICB3aGlsZSAoX19maXJz dDEgIT0gX19sYXN0MSkgewogICAgICBpZiAoX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJz dDIpKQogICAgICAgIGJyZWFrOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgd2hpbGUgKF9f Zmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkK ICAgICAgKytfX2ZpcnN0MTsKICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICByZXR1 cm4gX19sYXN0MTsKCiAgICBfX3AgPSBfX3AxOwogICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAg ICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJuIF9fbGFzdDE7CgogICAgd2hpbGUg KF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAgICAgIGlmICgrK19fcCA9PSBfX2xh c3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9f bGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CgogICAgKytfX2ZpcnN0MTsKICB9 CiAgcmV0dXJuIF9fZmlyc3QxOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs YXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlciBzZWFyY2hfbihfRm9yd2FyZEl0 ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9J bnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCiAgaWYgKF9fY291bnQgPD0gMCkKICAgIHJldHVybiBfX2ZpcnN0OwogIGVsc2Ugewog ICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICB3aGlsZSAoX19m aXJzdCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAg IF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgd2hpbGUgKF9f aSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgKl9faSA9PSBfX3ZhbCkgewogICAgICAgICsrX19p OwogICAgICAgIC0tX19uOwogICAgICB9CiAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICByZXR1 cm4gX19maXJzdDsKICAgICAgZWxzZQogICAgICAgIF9fZmlyc3QgPSBmaW5kKF9faSwgX19sYXN0 LCBfX3ZhbCk7CiAgICB9CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNz IF9Gb3J3YXJkSXRlciwgY2xhc3MgX0ludGVnZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0JpbmFyeVBy ZWQ+Cl9Gb3J3YXJkSXRlciBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0 IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9w cmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19jb3VudCA8PSAwKQogICAg cmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsK ICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAgICAgICBicmVhazsK ICAgICAgKytfX2ZpcnN0OwogICAgfQogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAg ICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICBfRm9yd2FyZEl0ZXIgX19pID0g X19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAh PSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAgICAgICAgKytfX2k7CiAgICAg ICAgLS1fX247CiAgICAgIH0KICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgIHJldHVybiBfX2Zp cnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCkgewogICAgICAg ICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKQogICAgICAgICAgICBicmVhazsKICAg ICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgICBfX2ZpcnN0ID0gX19pOwogICAgICB9CiAg ICB9CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0ZvcndhcmRJdGVyMiBzd2FwX3JhbmdlcyhfRm9y d2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MikKewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgZm9yICggOyBfX2Zp cnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaXRlcl9zd2FwKF9f Zmlyc3QxLCBfX2ZpcnN0Mik7CiAgcmV0dXJuIF9fZmlyc3QyOwp9CgoKCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1VuYXJ5T3BlcmF0aW9uPgpf T3V0cHV0SXRlciB0cmFuc2Zvcm0oX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVy YXRpb24gX191bmFyeV9vcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoKICBmb3IgKCA7IF9fZmlyc3QgIT0g X19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSBfX3VuYXJ5X29w KCpfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xh c3MgX0JpbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9f Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgX0lucHV0 SXRlcjIgX19maXJzdDIsIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg ICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKewoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CgoKCgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0 MiwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9f Zmlyc3QyKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlciwgY2xhc3MgX1RwPgp2b2lkIHJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25z dCBfVHAmIF9fbmV3X3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19m aXJzdCA9PSBfX29sZF92YWx1ZSkKICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwPgp2 b2lkIHJlcGxhY2VfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1 ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0 ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICpf X2ZpcnN0ID0gX19uZXdfdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz cyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZXBsYWNlX2NvcHkoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg IF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw JiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3Vs dCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlID8gX19uZXdfdmFsdWUg OiAqX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwPgpfT3V0 cHV0SXRlciByZXBsYWNlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYg X19uZXdfdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9f bGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0gX19wcmVkKCpfX2Zp cnN0KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRl bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9HZW5lcmF0b3I+CnZvaWQgZ2VuZXJh dGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9HZW5lcmF0b3Ig X19nZW4pCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0 OyArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fZ2VuKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf T3V0cHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9HZW5lcmF0b3I+Cl9PdXRwdXRJdGVyIGdl bmVyYXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2Vu KQp7CgoKCgoKCiAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmly c3QgPSBfX2dlbigpOwogIHJldHVybiBfX2ZpcnN0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZW1vdmVf Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQp7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp cnN0KQogICAgaWYgKCEoKl9fZmlyc3QgPT0gX192YWx1ZSkpIHsKICAgICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9QcmVk aWNhdGU+Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7 IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoIV9fcHJlZCgqX19maXJzdCkp IHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAg cmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf VHA+Cl9Gb3J3YXJkSXRlciByZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fZmlyc3QgPSBmaW5kKF9fZmly c3QsIF9fbGFzdCwgX192YWx1ZSk7CiAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgcmV0 dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAg ICA6IHJlbW92ZV9jb3B5KCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIg cmVtb3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQp7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgoKICBfX2ZpcnN0ID0gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7 CiAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0 ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5X2lmKCsr X19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIF9fdW5pcXVl X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1RwKikKewoKICBfVHAgX192YWx1 ZSA9ICpfX2ZpcnN0OwogICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgd2hpbGUgKCsrX19maXJzdCAh PSBfX2xhc3QpCiAgICBpZiAoIShfX3ZhbHVlID09ICpfX2ZpcnN0KSkgewogICAgICBfX3ZhbHVl ID0gKl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgIH0KICByZXR1cm4g KytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJ dGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0 cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0 X2l0ZXJhdG9yX3RhZykKewoKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgX191bmlxdWVfY29weShf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7Cgog ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAg aWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkKICAgICAgKisrX19yZXN1bHQgPSAqX19maXJz dDsKICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs YXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRv cl9jYXRlZ29yeShfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGUsCiAgICAgICAgICBjbGFzcyBf VHA+Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3By ZWQsIF9UcCopCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIF9UcCBfX3ZhbHVlID0g Kl9fZmlyc3Q7CiAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9f bGFzdCkKICAgIGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAg X192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAg cmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBf T3V0cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9f dW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKewoK ICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFy eV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9C aW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp Y2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0 ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgoKICAqX19yZXN1bHQgPSAqX19maXJzdDsKICB3aGlsZSAoKytf X2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19yZXN1bHQsICpfX2Zp cnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5 UHJlZGljYXRlPgppbmxpbmUgX091dHB1dEl0ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2Zp cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFy eVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJz dCwgX19sYXN0LCBfX3Jlc3VsdCwgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAg ICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y d2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fZmlyc3Qg PSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9f Zmlyc3QsIF9fbGFzdCwgX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciB1bmlxdWUoX0ZvcndhcmRJdGVy IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX0JpbmFy eVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK CiAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVk KTsKICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFy eV9wcmVkKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgp2b2lkIF9f cmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpIHsKICB3aGls ZSAodHJ1ZSkKICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCB8fCBfX2ZpcnN0ID09IC0tX19sYXN0 KQogICAgICByZXR1cm47CiAgICBlbHNlCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIF9fbGFz dCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX3JldmVyc2Uo X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIHdoaWxlIChfX2ZpcnN0 IDwgX19sYXN0KQogICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgLS1fX2xhc3QpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgppbmxpbmUgdm9pZCByZXZlcnNlKF9CaWRpcmVj dGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0 ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv bmFsSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHJldmVyc2VfY29weShfQmlk aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxl IChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgLS1fX2xhc3Q7CiAgICAqX19yZXN1bHQgPSAqX19s YXN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRl IDxjbGFzcyBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+Cl9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX2dj ZChfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg X0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikKewogIHdoaWxlIChfX24gIT0gMCkgewogICAgX0V1 Y2xpZGVhblJpbmdFbGVtZW50IF9fdCA9IF9fbSAlIF9fbjsKICAgIF9fbSA9IF9fbjsKICAgIF9f biA9IF9fdDsKICB9CiAgcmV0dXJuIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl ciwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19yb3RhdGUoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAg ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFn KQp7CiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19sYXN0OwogIGlmIChf X2xhc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19maXJzdDsKCiAgX0ZvcndhcmRJdGVyIF9f Zmlyc3QyID0gX19taWRkbGU7CiAgZG8gewogICAgc3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIr Kyk7CiAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgX19taWRkbGUgPSBfX2ZpcnN0 MjsKICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpOwoKICBfRm9yd2FyZEl0ZXIgX19uZXdf bWlkZGxlID0gX19maXJzdDsKCiAgX19maXJzdDIgPSBfX21pZGRsZTsKCiAgd2hpbGUgKF9fZmly c3QyICE9IF9fbGFzdCkgewogICAgc3dhcCAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAg aWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgIF9fbWlkZGxlID0gX19maXJzdDI7CiAgICBl bHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAg fQoKICByZXR1cm4gX19uZXdfbWlkZGxlOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv bmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfQmlkaXJlY3Rpb25hbEl0ZXIgX19yb3RhdGUoX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh bmNlKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf dGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0g X19taWRkbGUpCiAgICByZXR1cm4gX19sYXN0OwogIGlmIChfX2xhc3QgPT0gX19taWRkbGUpCiAg ICByZXR1cm4gX19maXJzdDsKCiAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVj dGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlk aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxl ICYmIF9fbWlkZGxlICE9IF9fbGFzdCkKICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9fbGFzdCk7 CgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7CiAgICBfX3JldmVyc2UoX19taWRkbGUsIF9f bGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICByZXR1cm4gX19sYXN0Owog IH0KICBlbHNlIHsKICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25h bF9pdGVyYXRvcl90YWcoKSk7CiAgICByZXR1cm4gX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxj bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+Cl9SYW5k b21BY2Nlc3NJdGVyIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9EaXN0YW5jZSAqLCBfVHAgKikKewoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKCiAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNl IF9fayA9IF9fbWlkZGxlIC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19rOwog IF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0ID0gX19maXJzdCArIChfX2xhc3QgLSBfX21pZGRs ZSk7CgogIGlmIChfX2sgPT0gMCkKICAgIHJldHVybiBfX2xhc3Q7CgogIGVsc2UgaWYgKF9fayA9 PSBfX2wpIHsKICAgIHN3YXBfcmFuZ2VzKF9fZmlyc3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiAg ICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBfRGlzdGFuY2UgX19kID0gX19nY2QoX19uLCBfX2sp OwoKICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBfX2kgPCBfX2Q7IF9faSsrKSB7CiAgICBfVHAg X190bXAgPSAqX19maXJzdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7Cgog ICAgaWYgKF9fayA8IF9fbCkgewogICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBf X2wvX19kOyBfX2orKykgewogICAgICAgIGlmIChfX3AgPiBfX2ZpcnN0ICsgX19sKSB7CiAgICAg ICAgICAqX19wID0gKihfX3AgLSBfX2wpOwogICAgICAgICAgX19wIC09IF9fbDsKICAgICAgICB9 CgogICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgX19wICs9IF9fazsKICAgICAg fQogICAgfQoKICAgIGVsc2UgewogICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBf X2svX19kIC0gMTsgX19qICsrKSB7CiAgICAgICAgaWYgKF9fcCA8IF9fbGFzdCAtIF9faykgewog ICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAg ICAgfQoKICAgICAgICAqX19wID0gKiAoX19wIC0gX19sKTsKICAgICAgICBfX3AgLT0gX19sOwog ICAgICB9CiAgICB9CgogICAgKl9fcCA9IF9fdG1wOwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0 dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0Zv cndhcmRJdGVyIHJvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlk ZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX19yb3RhdGUoX19maXJzdCwgX19taWRkbGUs IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLAogICAg ICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHJvdGF0 ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVz dWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19taWRk bGUsIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKCgoKdGVtcGxhdGUgPGNs YXNzIF9EaXN0YW5jZT4KaW5saW5lIF9EaXN0YW5jZSBfX3JhbmRvbV9udW1iZXIoX0Rpc3RhbmNl IF9fbikgewoKICByZXR1cm4gbHJhbmQ0OCgpICUgX19uOwoKCgp9CgoKCnRlbXBsYXRlIDxjbGFz cyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19m aXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f Zmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmly c3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9fZmlyc3QpICsgMSkpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CnZv aWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3Im IF9fcmFuZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0 ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsg X19yYW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh cmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfT3V0cHV0SXRlciBy YW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rp c3RhbmNlIF9fbikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9EaXN0YW5jZSBfX3JlbWFpbmlu ZyA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3Rh bmNlIF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsKCiAgd2hpbGUgKF9fbSA+IDApIHsKICAg IGlmIChfX3JhbmRvbV9udW1iZXIoX19yZW1haW5pbmcpIDwgX19tKSB7CiAgICAgICpfX291dCA9 ICpfX2ZpcnN0OwogICAgICArK19fb3V0OwogICAgICAtLV9fbTsKICAgIH0KCiAgICAtLV9fcmVt YWluaW5nOwogICAgKytfX2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAg ICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgpfT3V0cHV0SXRlciByYW5kb21f c2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNl IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3Im IF9fcmFuZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9 IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNl IF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsKCiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlm IChfX3JhbmQoX19yZW1haW5pbmcpIDwgX19tKSB7CiAgICAgICpfX291dCA9ICpfX2ZpcnN0Owog ICAgICArK19fb3V0OwogICAgICAtLV9fbTsKICAgIH0KCiAgICAtLV9fcmVtYWluaW5nOwogICAg KytfX2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfUmFuZG9tQWNj ZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy IF9fb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0Rpc3RhbmNl IF9fbikKewogIF9EaXN0YW5jZSBfX20gPSAwOwogIF9EaXN0YW5jZSBfX3QgPSBfX247CiAgZm9y ICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsrX19tLCArK19fZmlyc3QpCiAg ICBfX291dFtfX21dID0gKl9fZmlyc3Q7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewog ICAgKytfX3Q7CiAgICBfRGlzdGFuY2UgX19NID0gX19yYW5kb21fbnVtYmVyKF9fdCk7CiAgICBp ZiAoX19NIDwgX19uKQogICAgICBfX291dFtfX01dID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7 CiAgfQoKICByZXR1cm4gX19vdXQgKyBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy LCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwKICAgICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJH ZW5lcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19yYW5kb21fc2Ft cGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9EaXN0YW5jZSBfX24pCnsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog IF9EaXN0YW5jZSBfX20gPSAwOwogIF9EaXN0YW5jZSBfX3QgPSBfX247CiAgZm9yICggOyBfX2Zp cnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsrX19tLCArK19fZmlyc3QpCiAgICBfX291dFtf X21dID0gKl9fZmlyc3Q7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgKytfX3Q7 CiAgICBfRGlzdGFuY2UgX19NID0gX19yYW5kKF9fdCk7CiAgICBpZiAoX19NIDwgX19uKQogICAg ICBfX291dFtfX01dID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19v dXQgKyBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNj ZXNzSXRlcj4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRl ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX291dF9maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfbGFzdCkKewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBs ZShfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9maXJzdCwg X19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy LCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwKICAgICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJH ZW5lcmF0b3I+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpyYW5kb21fc2FtcGxlKF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz c0l0ZXIgX19vdXRfZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2xhc3QsCiAgICAgICAg ICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5kKQp7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19yYW5kb21fc2FtcGxlKF9fZmlyc3Qs IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fb3V0X2ZpcnN0LCBfX3JhbmQsCiAg ICAgICAgICAgICAgICAgICAgICAgICBfX291dF9sYXN0IC0gX19vdXRfZmlyc3QpOwp9CgoKCnRl bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9Gb3J3YXJkSXRl ciBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGlj YXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFn KQp7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgd2hpbGUgKF9f cHJlZCgqX19maXJzdCkpCiAgICBpZiAoKytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmly c3Q7CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwoKICB3aGlsZSAoKytfX25leHQg IT0gX19sYXN0KQogICAgaWYgKF9fcHJlZCgqX19uZXh0KSkgewogICAgICBzd2FwKCpfX2ZpcnN0 LCAqX19uZXh0KTsKICAgICAgKytfX2ZpcnN0OwogICAgfQoKICByZXR1cm4gX19maXJzdDsKfQoK dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fcGFydGl0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCnsKICB3 aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKHRydWUpCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz dCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSBpZiAoX19wcmVkKCpfX2ZpcnN0 KSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGVsc2UKICAgICAgICBicmVhazsKICAgIC0tX19s YXN0OwogICAgd2hpbGUgKHRydWUpCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAg ICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSBpZiAoIV9fcHJlZCgqX19sYXN0KSkKICAgICAg ICAtLV9fbGFzdDsKICAgICAgZWxzZQogICAgICAgIGJyZWFrOwogICAgaXRlcl9zd2FwKF9fZmly c3QsIF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh cmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHBhcnRpdGlvbihf Rm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBf X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX3BhcnRpdGlv bihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7 Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFz cyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9y d2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9fbGVuKQp7CiAgaWYgKF9fbGVuID09 IDEpCiAgICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbGFzdCA6IF9fZmlyc3Q7CiAgX0Zv cndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAv IDIpOwogIHJldHVybiByb3RhdGUoX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwg X19taWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbGVuIC8gMiksCiAgICAgICAgICAgICAgICBfX21pZGRsZSwKICAgICAgICAgICAgICAg IF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fbWlkZGxlLCBfX2xhc3QsIF9fcHJlZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAy KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFz cyBfUHJlZGljYXRlLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19z dGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9E aXN0YW5jZSBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf UG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKewogIGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXpl KSB7CiAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQxID0gX19maXJzdDsKICAgIF9Qb2ludGVyIF9f cmVzdWx0MiA9IF9fYnVmZmVyOwogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19m aXJzdCkKICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAqX19yZXN1bHQxID0g Kl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDE7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAg ICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHQyOwogICAgICB9CiAg ICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiAgICByZXR1cm4gX19yZXN1 bHQxOwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAg ICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAgcmV0dXJuIHJvdGF0ZShfX3N0YWJs ZV9wYXJ0aXRpb25fYWRhcHRpdmUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCwg X19taWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAvIDIsIF9f YnVmZmVyLCBfX2J1ZmZlcl9zaXplKSwKICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSwKICAg ICAgICAgICAgICAgICAgICBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoCiAgICAgICAgICAg ICAgICAgICAgICAgICAgX19taWRkbGUsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSkpOwog IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xh c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfRm9yd2FyZEl0ZXIKX19zdGFibGVfcGFy dGl0aW9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX1RwKiwgX0Rpc3RhbmNlKikK ewogIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBf X2xhc3QpOwogIGlmIChfX2J1Zi5zaXplKCkgPiAwKQogICAgcmV0dXJuIF9fc3RhYmxlX3BhcnRp dGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfX2J1 Zi5zaXplKCkpOwogIGVsc2UKICAgIHJldHVybiBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihf X2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2UoX19idWYucmVxdWVzdGVkX3NpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHN0 YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2ZpcnN0Owog IGVsc2UKICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYXV4KF9fZmlyc3QsIF9fbGFzdCwg X19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9f Zmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBl KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf VHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1RwIF9fcGl2b3QpCnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKCpfX2ZpcnN0 IDwgX19waXZvdCkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAoX19w aXZvdCA8ICpfX2xhc3QpCiAgICAgIC0tX19sYXN0OwogICAgaWYgKCEoX19maXJzdCA8IF9fbGFz dCkpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7 CiAgICArK19fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFyZGVk X3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29t cCkKewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90 KSkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAoX19jb21wKF9fcGl2 b3QsICpfX2xhc3QpKQogICAgICAtLV9fbGFzdDsKICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3Qp KQogICAgICByZXR1cm4gX19maXJzdDsKICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwog ICAgKytfX2ZpcnN0OwogIH0KfQoKY29uc3QgaW50IF9fc3RsX3RocmVzaG9sZCA9IDE2OwoKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX3VuZ3Vh cmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsKQp7 CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogIC0tX19uZXh0OwogIHdoaWxl IChfX3ZhbCA8ICpfX25leHQpIHsKICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAgX19sYXN0ID0g X19uZXh0OwogICAgLS1fX25leHQ7CiAgfQogICpfX2xhc3QgPSBfX3ZhbDsKfQoKdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lk IF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAg X192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsK ICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAgLS1fX25leHQ7CiAgd2hpbGUg KF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAgX19s YXN0ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAgfQogICpfX2xhc3QgPSBfX3ZhbDsKfQoKdGVt cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIF9f bGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQp7CiAgX1RwIF9fdmFs ID0gKl9fbGFzdDsKICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAgY29weV9iYWNrd2FyZChf X2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOwogICAgKl9fZmlyc3QgPSBfX3ZhbDsKICB9CiAg ZWxzZQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2xhc3QsIF9fdmFsKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl PgppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1Rw KiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX1RwIF9fdmFsID0gKl9fbGFzdDsKICBpZiAoX19jb21w KF9fdmFsLCAqX19maXJzdCkpIHsKICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBf X2xhc3QgKyAxKTsKICAgICpfX2ZpcnN0ID0gX192YWw7CiAgfQogIGVsc2UKICAgIF9fdW5ndWFy ZGVkX2xpbmVhcl9pbnNlcnQoX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0 ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX2xpbmVhcl9pbnNlcnQoX19maXJzdCwg X19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1 cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9f bGFzdDsgKytfX2kpCiAgICBfX2xpbmVhcl9pbnNlcnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5 cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl ciwgY2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfUmFuZG9t QWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVy IF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgX191bmd1YXJkZWRfbGlu ZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj ZXNzSXRlcj4KaW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QpIHsKICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX19m aXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX191bmd1 YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKiwgX0NvbXBhcmUgX19jb21w KQp7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0 OyArK19faSkKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVHAoKl9faSksIF9f Y29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBh cmU+CmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0NvbXBhcmUgX19jb21wKQp7CiAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9f Zmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXI+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7 CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIF9faW5zZXJ0 aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCk7CiAgICBfX3VuZ3Vh cmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkLCBfX2xhc3QpOwog IH0KICBlbHNlCiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19maW5h bF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXAp CnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVzaG9sZCkgewogICAgX19pbnNl cnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkLCBfX2NvbXApOwog ICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwg X19sYXN0LCBfX2NvbXApOwogIH0KICBlbHNlCiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs IF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9TaXplPgppbmxpbmUgX1NpemUg X19sZyhfU2l6ZSBfX24pCnsKICBfU2l6ZSBfX2s7CiAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsg X19uID4+PSAxKSArK19fazsKICByZXR1cm4gX19rOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv bUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemU+CnZvaWQgX19pbnRyb3NvcnRfbG9v cChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLAogICAgICAgICAgICAgICAgICAgICAgX1NpemUgX19k ZXB0aF9saW1pdCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xk KSB7CiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7CiAgICAgIHBhcnRpYWxfc29ydChfX2Zp cnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC0tX19kZXB0aF9s aW1pdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgX191bmd1YXJkZWRfcGFy dGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcChf X21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsKICAgIF9faW50cm9zb3J0X2xv b3AoX19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9fZGVwdGhfbGltaXQpOwogICAgX19sYXN0ID0g X19jdXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9U cCwgY2xhc3MgX1NpemUsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9faW50cm9zb3J0X2xvb3AoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwgX1RwKiwKICAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhf bGltaXQsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19z dGxfdGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7CiAgICAgIHBhcnRp YWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgcmV0dXJuOwog ICAgfQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQog ICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLCBf X2NvbXApKSwKICAgICAgIF9fY29tcCk7CiAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xh c3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0LCBfX2NvbXApOwogICAgX19sYXN0ID0gX19jdXQ7 CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHNv cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0 ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAg ICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAgX19maW5hbF9pbnNlcnRpb25fc29y dChfX2ZpcnN0LCBfX2xhc3QpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgc29ydChfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX0NvbXBh cmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK ICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAg ICAgICAgICAgICAgICAgIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyLAogICAgICAgICAgICAg ICAgICAgICBfX2NvbXApOwogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xh c3QsIF9fY29tcCk7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4K dm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAgaWYg KF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBf X2xhc3QpOwogICAgcmV0dXJuOwogIH0KICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9f Zmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChf X2ZpcnN0LCBfX21pZGRsZSk7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xh c3QpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k b21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQo X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19sYXN0IC0g X19maXJzdCA8IDE1KSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19j b21wKTsKICAgIHJldHVybjsKICB9CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2Zp cnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19m aXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxl LCBfX2xhc3QsIF9fY29tcCk7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21p ZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+ CnZvaWQgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBf c2l6ZSkKewogIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICB3aGls ZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICBfX3Jlc3VsdCA9IG1lcmdl KF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgX19m aXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAg ICAgICAgX19yZXN1bHQpOwogICAgX19maXJzdCArPSBfX3R3b19zdGVwOwogIH0KCiAgX19zdGVw X3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CiAg bWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3Np emUsIF9fbGFzdCwKICAgICAgICBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t QWNjZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgIGNsYXNzIF9E aXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFj Y2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19y ZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICBfQ29t cGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsK CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgX19yZXN1bHQg PSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAg ICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAg ICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAg X19maXJzdCArPSBfX3R3b19zdGVwOwogIH0KICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2Uo X19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKCiAgbWVyZ2UoX19maXJzdCwgX19maXJz dCArIF9fc3RlcF9zaXplLAogICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAog ICAgICAgIF9fcmVzdWx0LAogICAgICAgIF9fY29tcCk7Cn0KCmNvbnN0IGludCBfX3N0bF9jaHVu a19zaXplID0gNzsKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rp c3RhbmNlPgp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49 IF9fY2h1bmtfc2l6ZSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsg X19jaHVua19zaXplKTsKICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogIH0KICBfX2luc2Vy dGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj ZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2NodW5rX2lu c2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplLCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGls ZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgIF9faW5zZXJ0aW9uX3Nv cnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsKICAgIF9fZmlyc3Qg Kz0gX19jaHVua19zaXplOwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwg X19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9p bnRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2lu dGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0g X19maXJzdDsKICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAg X0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1bmtfc2l6ZTsKICBfX2NodW5rX2luc2Vy dGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUpOwoKICB3aGlsZSAoX19zdGVw X3NpemUgPCBfX2xlbikgewogICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBf X2J1ZmZlciwgX19zdGVwX3NpemUpOwogICAgX19zdGVwX3NpemUgKj0gMjsKICAgIF9fbWVyZ2Vf c29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7 CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl c3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xhc3Mg X0NvbXBhcmU+CnZvaWQgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9EaXN0YW5jZSosIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFz dCAtIF9fZmlyc3Q7CiAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47 CgogIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3NpemU7CiAgX19jaHVua19p bnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwoKICB3 aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJz dCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICBfX3N0ZXBfc2l6 ZSAqPSAyOwogICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9f Zmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgX19zdGVwX3NpemUgKj0gMjsKICB9Cn0K CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNz IF9EaXN0YW5jZT4Kdm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp c3RhbmNlIF9fYnVmZmVyX3NpemUpCnsKICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19m aXJzdCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBf X2xlbjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX3N0YWJsZV9zb3J0X2Fk YXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBf X3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZl cl9zaXplKTsKICB9CiAgZWxzZSB7CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJz dCwgX19taWRkbGUsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwKTsKICAgIF9fbWVyZ2Vfc29ydF93 aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCk7CiAg fQogIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNl KF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0 IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAg ICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rp c3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgX1JhbmRvbUFjY2Vz c0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgaWYgKF9fbGVuID4gX19idWZmZXJf c2l6ZSkgewogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19i dWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7 CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBf X2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBl bHNlIHsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19i dWZmZXIsIChfRGlzdGFuY2UqKTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bXApOwogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVm ZmVyLCAoX0Rpc3RhbmNlKikwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21w KTsKICB9CiAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlz dGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShf X2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAg ICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz cyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgX1RlbXBvcmFyeV9i dWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9UcD4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYg KGJ1Zi5iZWdpbigpID09IDApCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19s YXN0KTsKICBlbHNlCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwg YnVmLmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShidWYuc2l6 ZSgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBj bGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0 X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9UZW1wb3JhcnlfYnVm ZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVHA+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChi dWYuYmVnaW4oKSA9PSAwKQogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFz dCwgX19jb21wKTsKICBlbHNlCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9f bGFzdCwgYnVmLmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShi dWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBzdGFibGVfc29ydChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCiAgX19zdGFibGVfc29ydF9hdXgoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNl X3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs YXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs IF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgoKCiAgX19zdGFibGVfc29ydF9hdXgoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICBfX2Rpc3Rh bmNlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX3BhcnRpYWxf c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRs ZSwKICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsK ICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIg X19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICBpZiAoKl9faSA8ICpfX2Zp cnN0KQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9UcCgqX19pKSwK ICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwogIHNvcnRfaGVhcChf X2ZpcnN0LCBfX21pZGRsZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4K aW5saW5lIHZvaWQgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAg ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3BhcnRpYWxfc29ydChfX2ZpcnN0LCBf X21pZGRsZSwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19w YXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg X19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBf VHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9f Y29tcCk7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19s YXN0OyArK19faSkKICAgIGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3QpKQogICAgICBfX3BvcF9o ZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9UcCgqX19pKSwgX19jb21wLAogICAgICAgICAg ICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs YXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlk ZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBf Q29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCgogIF9fcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fdmFsdWVf dHlwZShfX2ZpcnN0KSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBf VHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2Zp cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikKewogIGlmIChfX3Jlc3VsdF9maXJzdCA9 PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICBfUmFuZG9tQWNjZXNzSXRl ciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICB3aGlsZShfX2ZpcnN0ICE9 IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgKl9f cmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAg ICArK19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVh bF9sYXN0KTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA8 ICpfX3Jlc3VsdF9maXJzdCkKICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rp c3RhbmNlKDApLAogICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xh c3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX1RwKCpfX2ZpcnN0KSk7 CiAgICArK19fZmlyc3Q7CiAgfQogIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRf cmVhbF9sYXN0KTsKICByZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBfUmFuZG9tQWNj ZXNzSXRlcgpwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJz dCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9fcGFydGlhbF9z b3J0X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19yZXN1bHRfZmly c3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg Y2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KX1Jh bmRvbUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSosIF9UcCopCnsK ICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xh c3Q7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmly c3Q7CiAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9f cmVzdWx0X2xhc3QpIHsKICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICsr X19yZXN1bHRfcmVhbF9sYXN0OwogICAgKytfX2ZpcnN0OwogIH0KICBtYWtlX2hlYXAoX19yZXN1 bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICB3aGlsZSAoX19maXJzdCAh PSBfX2xhc3QpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAg ICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZSgwKSwKICAgICAgICAg ICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3Qp LAogICAgICAgICAgICAgICAgICAgIF9UcCgqX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAg X19jb21wKTsKICAgICsrX19maXJzdDsKICB9CiAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBf X3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsK fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj bGFzcyBfQ29tcGFyZT4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnBhcnRpYWxfc29ydF9jb3B5 KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgog IHJldHVybiBfX3BhcnRpYWxfc29ydF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHRfZmly c3QsIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX3Jlc3VsdF9maXJz dCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsK fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBf X250aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy IF9fbnRoLAogICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAq KQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9f Zmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19s YXN0IC0gMSkpKSk7CiAgICBpZiAoX19jdXQgPD0gX19udGgpCiAgICAgIF9fZmlyc3QgPSBfX2N1 dDsKICAgIGVsc2UKICAgICAgX19sYXN0ID0gX19jdXQ7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQo X19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgpp bmxpbmUgdm9pZCBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t QWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog IF9fbnRoX2VsZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmly c3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNs YXNzIF9Db21wYXJlPgp2b2lkIF9fbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChfX2xhc3Qg LSBfX2ZpcnN0ID4gMykgewogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3Vu Z3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCkpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb21wKTsKICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgX19maXJz dCA9IF9fY3V0OwogICAgZWxzZQogICAgICBfX2xhc3QgPSBfX2N1dDsKICB9CiAgX19pbnNlcnRp b25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIG50aF9lbGVtZW50KF9S YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29t cCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19udGhf ZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9f Y29tcCk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xh c3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19sb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlz dGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9y d2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9f bGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBf X2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgIF9fZmlyc3QgPSBfX21p ZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsK ICAgIH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgfQogIHJldHVybiBfX2ZpcnN0 Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9y d2FyZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkK ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX19sb3dlcl9ib3VuZChfX2Zp cnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlw ZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwg Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91 bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCwgX0Rp c3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19s YXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7 CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21p ZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9f Y29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAg ICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBl bHNlCiAgICAgIF9fbGVuID0gX19oYWxmOwogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5l IF9Gb3J3YXJkSXRlciBsb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f dmFsLCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCiAgcmV0dXJuIF9fbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19j b21wLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNl PgpfRm9yd2FyZEl0ZXIgX191cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3Zh bCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJz dCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19t aWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAg ICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAg aWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2Ugewog ICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBf X2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgdXBw ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3Qs IF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh cmUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9E aXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAg X0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xl biA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7 CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fY29tcChfX3ZhbCwgKl9f bWlkZGxlKSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19maXJzdCA9 IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYg LSAxOwogICAgfQogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9Gb3J3YXJkSXRlciB1 cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBf X2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJu IF9fdXBwZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAg ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpwYWlyPF9Gb3J3YXJk SXRlciwgX0ZvcndhcmRJdGVyPgpfX2VxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgIF9EaXN0 YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFz dCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBf X2xlZnQsIF9fcmlnaHQ7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVu ID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hh bGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRs ZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAg IH0KICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICBfX2xlbiA9IF9faGFsZjsK ICAgIGVsc2UgewogICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwg X192YWwpOwogICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgX19yaWdodCA9IHVw cGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsKTsKICAgICAgcmV0dXJuIHBhaXI8 X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICB9CiAgfQog IHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0 KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgcGFp cjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fZXF1YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0 LCBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w YXJlLCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9f ZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNv bnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2Uq KQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9f bGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0 LCBfX3JpZ2h0OwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAx OwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsK ICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgICAgX19maXJzdCA9IF9fbWlk ZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwog ICAgfQogICAgZWxzZSBpZiAoX19jb21wKF9fdmFsLCAqX19taWRkbGUpKQogICAgICBfX2xlbiA9 IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBf X21pZGRsZSwgX192YWwsIF9fY29tcCk7CiAgICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwog ICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwsIF9f Y29tcCk7CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xl ZnQsIF9fcmlnaHQpOwogICAgfQogIH0KICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3 YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBwYWlyPF9Gb3J3YXJkSXRlciwg X0ZvcndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiBfX2Vx dWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCwKICAgICAgICAgICAgICAg ICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyLCBjbGFzcyBfVHA+CmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg X192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgX0ZvcndhcmRJdGVyIF9faSA9 IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogIHJldHVybiBfX2kgIT0gX19s YXN0ICYmICEoX192YWwgPCAqX19pKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgY29uc3Qg X1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfRm9yd2FyZEl0ZXIgX19pID0gbG93 ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKICByZXR1cm4gX19pICE9 IF9fbGFzdCAmJiAhX19jb21wKF9fdmFsLCAqX19pKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0 ZXIgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAog ICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m aXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAg ICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNl IHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQog ICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHko X19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xh c3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w dXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIp IHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3Vs dCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAq X19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICArK19fcmVz dWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg X19sYXN0MSwgX19yZXN1bHQpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ dGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJl Y3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Ug X19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQp7CiAgaWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9 PSAwKQogICAgcmV0dXJuOwogIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgaWYgKCpf X21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwog ICAgcmV0dXJuOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0 OwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICBfRGlzdGFu Y2UgX19sZW4xMSA9IDA7CiAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogIGlmIChfX2xlbjEgPiBf X2xlbjIpIHsKICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1 dCwgX19sZW4xMSk7CiAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19s YXN0LCAqX19maXJzdF9jdXQpOwogICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwg X19sZW4yMik7CiAgfQogIGVsc2UgewogICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICBhZHZh bmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5k KF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgIGRpc3RhbmNlKF9fZmlyc3Qs IF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21p ZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwog IF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRs ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIpOwogIF9fbWVyZ2Vf d2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4x IC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNs YXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJ dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwg X0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f Y29tcCkKewogIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgIHJldHVybjsKICBp ZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCAqX19m aXJzdCkpCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICByZXR1cm47CiAg fQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogIF9EaXN0YW5jZSBfX2xlbjExID0g MDsKICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAg X19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsK ICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0 X2N1dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVu MjIpOwogIH0KICBlbHNlIHsKICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgYWR2YW5jZShf X3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2Zp cnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9fZmly c3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3 X21pZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQp OwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21p ZGRsZSwgX19sZW4xMSwgX19sZW4yMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7 CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19s YXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0g X19sZW4yMiwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEs IGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+Cl9C aWRpcmVjdGlvbmFsSXRlcjEgX19yb3RhdGVfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlcjEgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9z aXplKQp7CiAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlcl9lbmQ7CiAgaWYgKF9fbGVuMSA+ IF9fbGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX19idWZmZXJfZW5kID0g Y29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmly c3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVy X2VuZCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7 CiAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAg ICBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAgcmV0dXJuIGNvcHlfYmFja3dh cmQoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICB9CiAgZWxzZQogICAgcmV0dXJu IHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9C aWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBj bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIzPgpfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2VfYmFj a3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIzIF9fcmVzdWx0KQp7CiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICByZXR1cm4g Y29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogIGlmIChfX2ZpcnN0 MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEs IF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1fX2xhc3QyOwogIHdoaWxlICh0cnVlKSB7CiAg ICBpZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3Qx OwogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNr d2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAg IH0KICAgIGVsc2UgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19m aXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwg KytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBs YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIy LAogICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMywgY2xhc3MgX0NvbXBhcmU+Cl9C aWRpcmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19maXJz dDEgPT0gX19sYXN0MSkKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3Qy LCBfX3Jlc3VsdCk7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gY29weV9i YWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogIC0tX19sYXN0MTsKICAtLV9f bGFzdDI7CiAgd2hpbGUgKHRydWUpIHsKICAgIGlmIChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3Qx KSkgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICBpZiAoX19maXJzdDEgPT0g X19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3Qy LCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgIH0KICAgIGVsc2UgewogICAgICAqLS1f X3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAg ICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAg ICAgIC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25h bEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1BvaW50ZXI+CnZvaWQgX19tZXJnZV9hZGFw dGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4x LCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZm ZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7CiAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYg X19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNv cHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1 ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogIH0KICBlbHNlIGlmIChfX2xl bjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShf X21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogIH0KICBlbHNlIHsK ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICBfRGlzdGFuY2UgX19sZW4x MSA9IDA7CiAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICBpZiAoX19sZW4xID4gX19sZW4y KSB7CiAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0 LCBfX2xlbjExKTsKICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9f bGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1 dCwgX19sZW4yMik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7 CiAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgX19maXJzdF9jdXQg PSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgIGRp c3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0 X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAg ICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19t ZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjEx LAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7 CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3Qs IF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIs IF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJl Y3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1BvaW50ZXIsCiAgICAgICAgICBj bGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAg ICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3Np emUsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19sZW4x IDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19i dWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgbWVyZ2Uo X19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCwgX19jb21w KTsKICB9CiAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVy IF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgX19t ZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBlbHNlIHsKICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7 CiAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAg ICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xl bjExKTsKICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwg Kl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRf Y3V0LCBfX2xlbjIyKTsKICAgIH0KICAgIGVsc2UgewogICAgICBfX2xlbjIyID0gX19sZW4yIC8g MjsKICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICBfX2ZpcnN0X2N1 dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXAp OwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICB9CiAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgX19yb3RhdGVfYWRhcHRp dmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEs CiAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXpl KTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRs ZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVm ZmVyX3NpemUsIF9fY29tcCk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19z ZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAg IF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogIH0K fQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBf RGlzdGFuY2U+CmlubGluZSB2b2lkIF9faW5wbGFjZV9tZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJ dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4x ID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sZW4xKTsKICBfRGlzdGFuY2Ug X19sZW4yID0gMDsKICBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0LCBfX2xlbjIpOwoKICBfVGVt cG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9UcD4gX19idWYoX19maXJzdCwgX19s YXN0KTsKICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgX19tZXJnZV93aXRob3V0X2J1ZmZl cihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMik7CiAgZWxzZQogICAg X19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVu MiwKICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNp emUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAs CiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBf X2lucGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAq LCBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f Y29tcCkKewogIF9EaXN0YW5jZSBfX2xlbjEgPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xlbjIgPSAwOwogIGRpc3RhbmNlKF9fbWlkZGxl LCBfX2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRl ciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5iZWdpbigpID09IDAp CiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9f bGVuMSwgX19sZW4yLCBfX2NvbXApOwogIGVsc2UKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJz dCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAg IF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAg ICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgppbmxp bmUgdm9pZCBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19taWRk bGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgcmV0dXJuOwogIF9faW5wbGFjZV9tZXJnZV9h dXgoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fdmFs dWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIGlu cGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9 PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAgICByZXR1cm47CiAgX19pbnBsYWNl X21lcmdlX2F1eChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksCiAgICAg ICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQog ICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxz ZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlCiAg ICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3Qy Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFz cyBfQ29tcGFyZT4KYm9vbCBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl cjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl cjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFz dDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgcmV0dXJuIGZh bHNlOwogICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICArK19f Zmlyc3QxOwogICAgZWxzZQogICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICByZXR1cm4g X19maXJzdDIgPT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz cyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF91bmlvbihf SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAg ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly c3QyICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAg Kl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgZWxzZSBp ZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsK ICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19m aXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICArK19f cmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0 MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBj bGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29t cGFyZT4KX091dHB1dEl0ZXIgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs IF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s YXN0MikgewogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9f cmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgZWxzZSBpZiAo X19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJz dDI7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAg KytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19m aXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRf aW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAo X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2Zp cnN0MSA8ICpfX2ZpcnN0MikKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UgaWYgKCpfX2ZpcnN0 MiA8ICpfX2ZpcnN0MSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAgICAqX19yZXN1 bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICAg ICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAg ICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0 ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2Nv bXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB3aGlsZSAoX19m aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgq X19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlIGlmIChfX2Nv bXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAg ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2Zp cnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJ dGVyPgpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIg X19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy KQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19yZXN1bHQgPSAqX19m aXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNl IGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsK ICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29weShf X2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl cjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNz IF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0 SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0 MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2Zp cnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwog ICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9f Zmlyc3QxKSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwog ICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBf X3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRl cjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlcgpzZXRfc3ltbWV0cmljX2RpZmZlcmVu Y2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwK ICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0 MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0Mikg ewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsr X19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAg ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgICArK19fcmVz dWx0OwogICAgfQogICAgZWxzZSB7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7 CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9f bGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg X0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+ Cl9PdXRwdXRJdGVyCnNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB3aGls ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9f Y29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx OwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAo X19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJz dDI7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsK ICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29weShf X2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoK CgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIG1heF9lbGVtZW50 KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9y d2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0 KQogICAgaWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0KQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7 CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz cyBfQ29tcGFyZT4KX0ZvcndhcmRJdGVyIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg X19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg cmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGls ZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmIChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJz dCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlm IChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVz dWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICgqX19m aXJzdCA8ICpfX3Jlc3VsdCkKICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHJldHVybiBfX3Jl c3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0NvbXBhcmU+Cl9G b3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0 OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAh PSBfX2xhc3QpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHQpKQogICAgICBfX3Jl c3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X0JpZGlyZWN0aW9uYWxJdGVyPgpib29sIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJ dGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1 cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAg aWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0t X19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAg LS1fX2k7CiAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQogICAgICAgIHt9CiAg ICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAg ICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2 ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBu ZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9f bGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJz dDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kg PSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f aWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmIChfX2NvbXAoKl9faSwgKl9faWkpKSB7CiAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghX19jb21wKCpf X2ksICotLV9faikpCiAgICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAg cmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChf X2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJl dHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0 ZXI+CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlk aXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFz dCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7Oykg ewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmICgq X19paSA8ICpfX2kpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAg ICAgd2hpbGUgKCEoKi0tX19qIDwgKl9faSkpCiAgICAgICAge30KICAgICAgaXRlcl9zd2FwKF9f aSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsK ICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9f bGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf QmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpib29sIHByZXZfcGVybXV0YXRpb24o X0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJu IGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlm IChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9f aTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0t X19pOwogICAgaWYgKF9fY29tcCgqX19paSwgKl9faSkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCFfX2NvbXAoKi0tX19qLCAqX19pKSkKICAg ICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9f bGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7 CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAg fQogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVy PgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRl ciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3Qy LCBfRm9yd2FyZEl0ZXIgX19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK ICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICBmb3IgKF9Gb3J3 YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQog ICAgICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwog IHJldHVybiBfX2xhc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Zv cndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rf b2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwK ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9f bGFzdDE7ICsrX19maXJzdDEpCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0 MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICBpZiAoX19jb21wKCpfX2ZpcnN0 MSwgKl9faXRlcikpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogIHJldHVybiBfX2xhc3QxOwp9 CiMgMzM5MCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxnby5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf Rm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIF9fZmluZF9l bmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBf X2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZv cndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1 cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3Qx OwogICAgd2hpbGUgKDEpIHsKICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAg ICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAgICBp ZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg ICBlbHNlIHsKICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICBfX2ZpcnN0 MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICB9CiAgfQp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwKICAg ICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlcjEgX19maW5kX2VuZChf Rm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFz dDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2Fy ZF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRl IF9fY29tcCkKewogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fbGFzdDE7 CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgIHdoaWxl ICgxKSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgPSBzZWFyY2go X19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICBpZiAo X19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICBl bHNlIHsKICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICBfX2ZpcnN0MSA9 IF9fbmV3X3Jlc3VsdDsKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICB9CiAgfQp9CgoK dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFs SXRlcjI+Cl9CaWRpcmVjdGlvbmFsSXRlcjEKX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIx IF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAg ICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y X3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2 SXRlcjE7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9S ZXZJdGVyMjsKCiAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsKICBfUmV2SXRlcjIgX19y bGFzdDIoX19maXJzdDIpOwogIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIx KF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJ dGVyMihfX2xhc3QyKSwgX19ybGFzdDIpOwoKICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQog ICAgcmV0dXJuIF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVz dWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShf X2ZpcnN0MiwgX19sYXN0MikpOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KfQoKdGVtcGxhdGUg PGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAg ICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfQmlkaXJlY3Rpb25hbEl0ZXIxCl9fZmlu ZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBf X2xhc3QxLAogICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVj dGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh ZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0 ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4g X1Jldkl0ZXIxOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIy PiBfUmV2SXRlcjI7CgogIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0ZXIy IF9fcmxhc3QyKF9fZmlyc3QyKTsKICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJ dGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf UmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb21wKTsKCiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgIHJldHVybiBfX2xh c3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3Vs dC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9fbGFz dDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+CmlubGluZSBfRm9yd2FyZEl0ZXIxCmZpbmRf ZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAg ICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQp7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICByZXR1cm4gX19maW5kX2VuZChfX2Zp cnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgX19p dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRv cl9jYXRlZ29yeShfX2ZpcnN0MikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwg Y2xhc3MgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cmlu bGluZSBfRm9yd2FyZEl0ZXIxCmZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3 YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zvcndh cmRJdGVyMiBfX2xhc3QyLAogICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9fZmluZF9lbmQoX19m aXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgIF9f aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0 b3JfY2F0ZWdvcnkoX19maXJzdDIpLAogICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCgoK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KYm9v bCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX0Rpc3RhbmNlIF9fbikKewog IF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7IF9f Y2hpbGQgPCBfX247ICsrX19jaGlsZCkgewogICAgaWYgKF9fZmlyc3RbX19wYXJlbnRdIDwgX19m aXJzdFtfX2NoaWxkXSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKChfX2NoaWxkICYgMSkg PT0gMCkKICAgICAgKytfX3BhcmVudDsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfU3RyaWN0V2Vh a09yZGVyaW5nPgpib29sIF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU3Ry aWN0V2Vha09yZGVyaW5nIF9fY29tcCwKICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbikKewog IF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7IF9f Y2hpbGQgPCBfX247ICsrX19jaGlsZCkgewogICAgaWYgKF9fY29tcChfX2ZpcnN0W19fcGFyZW50 XSwgX19maXJzdFtfX2NoaWxkXSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICgoX19jaGls ZCAmIDEpID09IDApCiAgICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0LCBf X2xhc3QgLSBfX2ZpcnN0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg Y2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KaW5saW5lIGJvb2wgaXNfaGVhcChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0LCBfX2NvbXAsIF9fbGFz dCAtIF9fZmlyc3QpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KYm9vbCBp c19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gdHJ1 ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9yICgrK19fbmV4dDsgX19u ZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpIHsKICAgIGlmICgqX19u ZXh0IDwgKl9fZmlyc3QpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0cnVlOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5n Pgpib29sIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIHRydWU7Cgog IF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIGZvciAoKytfX25leHQ7IF9fbmV4dCAh PSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KSB7CiAgICBpZiAoX19jb21wKCpf X25leHQsICpfX2ZpcnN0KSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgcmV0dXJuIHRydWU7 Cn0KCn0KIyAzNyAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDUwICIv aG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9p bmNsdWRlL2crKy9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9i YXNpY19zdHJpbmcudGNjIiAxIDMKIyA0MyAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9iYXNpY19zdHJpbmcu dGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3QgX0NoYXJUCiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9TX3Rlcm1pbmFsID0g X0NoYXJUKCk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9TX21heF9zaXplID0gKCgobnBvcyAtIHNpemVvZihf UmVwKSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkgLyA0OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1l IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvczsKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5 cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1NfZW1wdHlfcmVwX3N0 b3JhZ2VbCiAgICAoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90 eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlw ZW5hbWUgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0 ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl cmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBf QWxsb2MoKSkKICAgICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7Cgog ICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOwogICAgICAgIHNpemVfdHlwZSBfX2kgPSAwOwogICAg ICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBzaXplb2YoX19idWYpIC8gc2l6ZW9m KF9DaGFyVCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fYnVmW19faSsrXSA9ICpfX2JlZzsK ICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgIH0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVw OjpfU19jcmVhdGUoX19pLCBfX2EpOwogICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01f cmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsKICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9faTsKICAg ICAgICB0cnkKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19y LT5fTV9sZW5ndGg7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fbGFzdCA9IF9fci0+X01fcmVm ZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsKICAgICAgICAgICAgICAgIGZvciAoOzspCiAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAg ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fbGVu Z3RoID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICpf X3AgPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9f ci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg ICAgIGlmIChfX3AgPT0gX19sYXN0KQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICAgICAgKl9fcCsrID0gKl9fYmVnOwogICAgICAgICAgICAgICAgICAgICsrX19i ZWc7CiAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4g PSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgIF9SZXAqIF9fYW5vdGhl ciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fYSk7CiAgICAgICAgICAgICAgICB0cmFp dHNfdHlwZTo6Y29weShfX2Fub3RoZXItPl9NX3JlZmRhdGEoKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fci0+X01fcmVmZGF0YSgpLCBfX2xlbik7CiAgICAgICAgICAgICAg ICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgICAgIF9fciA9IF9fYW5vdGhlcjsK ICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19sZW47CiAgICAgICAgICAgICAgfQog ICAgICAgICAgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19y LT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAg IHJldHVybiAwOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXI+CiAg ICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46Ogog ICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0Fs bG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgICAg ewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3Rh bmNlKF9fYmVnLCBfX2VuZCkpOwoKICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09 IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsK CgogICAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2RuZXcsIF9fYSk7CiAgICAg ICAgdHJ5CiAgICAgICAgICB7IF9TX2NvcHlfY2hhcnMoX19yLT5fTV9yZWZkYXRhKCksIF9fYmVn LCBfX2VuZCk7IH0KICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICB7CiAgICAgICAgICAgIF9f ci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAg ICBfX3ItPl9NX2xlbmd0aCA9IF9fZG5ldzsKCiAgICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19k bmV3XSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEo KTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1Ry YWl0cywgX0FsbG9jPjo6CiAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9f YywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICB7CiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2EgPT0g X0FsbG9jKCkpCiAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgog ICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uLCBfX2EpOwogICAgICB0cnkKICAg ICAgICB7CiAgICAgICAgICBpZiAoX19uKQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWdu KF9fci0+X01fcmVmZGF0YSgpLCBfX24sIF9fYyk7CiAgICAgICAgfQogICAgICBjYXRjaCguLi4p CiAgICAgICAgewogICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICB0aHJv dzsKICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX19uOwogICAgICBfX3ItPl9NX3Jl ZmRhdGEoKVtfX25dID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgIHJldHVybiBfX3ItPl9NX3Jl ZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAg OiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfQWxsb2MoKSwgX19zdHIuZ2V0 X2FsbG9jYXRvcigpKSwKICAgICAgICAgICAgICAgICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpCiAg ICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK ICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1Nf Y29uc3RydWN0KHNpemVfdHlwZSgpLCBfQ2hhclQoKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19z dHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5 cGUgX19uKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19w b3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3Bvcywg X19uKSwgX0FsbG9jKCkpLCBfQWxsb2MoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2lj X3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICBzaXplX3R5 cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0 KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f c3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNv bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDog X01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19zICsgX19uLCBfX2EpLCBfX2EpCiAgICB7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg IGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6 IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgo X19zKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJU IF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChf X24sIF9fYywgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUg X0lucHV0SXRlcj4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXIgX19iZWcsIF9JbnB1dEl0ZXIgX19lbmQsIGNvbnN0 IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5k LCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 YXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICB7CiAgICAgIGlmIChfTV9yZXAo KSAhPSBfX3N0ci5fTV9yZXAoKSkKICAgICAgICB7CgogICAgICAgICAgYWxsb2NhdG9yX3R5cGUg X19hID0gdGhpcy0+Z2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9f c3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9fYSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAg ICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsK ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Rlc3Ry b3koY29uc3QgX0FsbG9jJiBfX2EpIHRocm93ICgpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3Np emUgPSBzaXplb2YoX1JlcCkgKyAoX01fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpOwog ICAgICBfUmF3X2J5dGVzX2FsbG9jKF9fYSkuZGVhbGxvY2F0ZShyZWludGVycHJldF9jYXN0PGNo YXIqPih0aGlzKSwgX19zaXplKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfTV9sZWFrX2hhcmQoKQogICAgewogICAgICBp ZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQogICAgICAgIF9NX211dGF0ZSgwLCAwLCAwKTsK ICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9NX211dGF0ZShz aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpCiAgICB7 CiAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBjb25zdCBz aXplX3R5cGUgX19uZXdfc2l6ZSA9IF9fb2xkX3NpemUgKyBfX2xlbjIgLSBfX2xlbjE7CiAgICAg IGNvbnN0IF9DaGFyVCogX19zcmMgPSBfTV9kYXRhKCkgKyBfX3BvcyArIF9fbGVuMTsKICAgICAg Y29uc3Qgc2l6ZV90eXBlIF9faG93X211Y2ggPSBfX29sZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7 CgogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IF9fbmV3X3NpemUgPiBjYXBh Y2l0eSgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxs b2NhdG9yKCk7CiAgICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6 ZSwgX19hKTsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9f cG9zKQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCks IF9NX2RhdGEoKSwgX19wb3MpOwogICAgICAgICAgICAgIGlmIChfX2hvd19tdWNoKQogICAgICAg ICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCkgKyBfX3BvcyArIF9f bGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3JjLCBfX2hvd19tdWNo KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgX19yLT5fTV9kaXNwb3NlKGdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7 CiAgICAgICAgICBfTV9kYXRhKF9fci0+X01fcmVmZGF0YSgpKTsKICAgICAgfQogICAgICBlbHNl IGlmIChfX2hvd19tdWNoICYmIF9fbGVuMSAhPSBfX2xlbjIpCiAgICAgICAgewoKICAgICAgICAg IHRyYWl0c190eXBlOjptb3ZlKF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4yLCBfX3NyYywgX19o b3dfbXVjaCk7CiAgICAgICAgfQogICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAg ICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX25ld19zaXplOwogICAgICBfTV9kYXRhKClbX19u ZXdfc2l6ZV0gPSBfUmVwOjpfU190ZXJtaW5hbDsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzZXJ2ZShzaXplX3R5cGUg X19yZXMpCiAgICB7CiAgICAgIGlmIChfX3JlcyA+IHRoaXMtPmNhcGFjaXR5KCkgfHwgX01fcmVw KCktPl9NX2lzX3NoYXJlZCgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX3JlcyA+IHRoaXMt Pm1heF9zaXplKCkpCiAgICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJp bmc6OnJlc2VydmUiKTsKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0 b3IoKTsKICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfTV9yZXAoKS0+X01fY2xvbmUoX19hLCBf X3JlcyAtIHRoaXMtPnNpemUoKSk7CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2Ep OwogICAgICAgICAgX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZv aWQgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c3dhcChiYXNpY19zdHJp bmcmIF9fcykKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAg ICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmIChfX3MuX01fcmVwKCktPl9N X2lzX2xlYWtlZCgpKQogICAgICAgIF9fcy5fTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAg ICAgIGlmICh0aGlzLT5nZXRfYWxsb2NhdG9yKCkgPT0gX19zLmdldF9hbGxvY2F0b3IoKSkKICAg ICAgICB7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01fZGF0YSgpOwogICAgICAgICAgX01f ZGF0YShfX3MuX01fZGF0YSgpKTsKICAgICAgICAgIF9fcy5fTV9kYXRhKF9fdG1wKTsKICAgICAg ICB9CgogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMShf TV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3MuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIGJh c2ljX3N0cmluZyBfX3RtcDIoX19zLl9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAg KnRoaXMgPSBfX3RtcDI7CiAgICAgICAgICBfX3MgPSBfX3RtcDE7CiAgICAgICAgfQogICAgfQoj IDM1NiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu OC8zLjAvaW5jbHVkZS9nKysvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwKgogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19jcmVhdGUoc2l6ZV90IF9f Y2FwYWNpdHksIGNvbnN0IF9BbGxvYyYgX19hbGxvYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CgoKICAgICAg aWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkKCgoKICAgICAgICBfX3Rocm93X2xlbmd0aF9l cnJvcigiYmFzaWNfc3RyaW5nOjpfU19jcmVhdGUiKTsKCgoKCiAgICAgIHNpemVfdCBfX3NpemUg PSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CgoKICAg ICAgdm9pZCogX19wbGFjZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxvYykuYWxsb2NhdGUoX19z aXplKTsKICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOwogICAgICBfX3AtPl9N X2NhcGFjaXR5ID0gX19jYXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRfc2hhcmFibGUoKTsKICAg ICAgX19wLT5fTV9sZW5ndGggPSAwOwogICAgICByZXR1cm4gX19wOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6 OgogICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19yZXMpCiAg ICB7CiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfTV9sZW5ndGggKyBfX3Jlcywg X19hbGxvYyk7CiAgICAgIGlmIChfTV9sZW5ndGgpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg ICAgICAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRh dGEoKSwgX01fbGVuZ3RoKTsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYWxsb2MpOwogICAgICAgICAgICAgIHRocm93 OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9NX2xlbmd0 aDsKICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICBpbmxpbmUg Ym9vbAoKCgoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6 OgogICAgX1NfZXhjZXNzX3Nsb3Aoc2l6ZV90IF9fcywgc2l6ZV90IF9fcikKCiAgICB7CiAgICAg IHJldHVybiAyICogKF9fcyA8PSAxNiA/IDE2IDogX19zKSA8IF9fcjsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNpemUo c2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYgKF9fbiA+IG1heF9zaXpl KCkpCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzaXplIik7 CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUg PCBfX24pCiAgICAgICAgdGhpcy0+YXBwZW5kKF9fbiAtIF9fc2l6ZSwgX19jKTsKICAgICAgZWxz ZSBpZiAoX19uIDwgX19zaXplKQogICAgICAgIHRoaXMtPmVyYXNlKF9fbik7CgogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OgogICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9f aTIsIF9JbnB1dEl0ZXIgX19rMSwKICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fazIsIGlu cHV0X2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIGJhc2ljX3N0cmluZyBfX3MoX19rMSwg X19rMik7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLl9NX2li ZWdpbigpLCBfX3MuX01faWVuZCgpKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9Gb3J3YXJkSXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAg IF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyIF9f azEsCiAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fazIsIGZvcndhcmRfaXRlcmF0b3Jf dGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOwogICAg ICAgIHNpemVfdHlwZSBfX2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOwogICAgICAgIHNpemVfdHlw ZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fazEsIF9fazIpKTsK CiAgICAgICAgaWYgKF9fZG1heCA8PSBfX2RuZXcpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9l cnJvcigiYmFzaWNfc3RyaW5nOjpfTV9yZXBsYWNlIik7CiAgICAgICAgc2l6ZV90eXBlIF9fb2Zm ID0gX19pMSAtIF9NX2liZWdpbigpOwogICAgICAgIF9NX211dGF0ZShfX29mZiwgX19kb2xkLCBf X2RuZXcpOwoKICAgICAgICBpZiAoX19kbmV3KQogICAgICAgICAgX1NfY29weV9jaGFycyhfTV9k YXRhKCkgKyBfX29mZiwgX19rMSwgX19rMik7CgogICAgICAgIHJldHVybiAqdGhpczsKICAgICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJlcGxhY2Uoc2l6ZV90 eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAg ICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKQogICAgewogICAgICBy ZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvczEpLCBfTV9mb2xkKF9fcG9zMSwgX19u MSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2NoZWNrKF9fcG9zMiksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MyLCBfX24yKSk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBi YXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0cikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3Ry LnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaXplICsgdGhpcy0+c2l6ZSgpOwog ICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUo X19sZW4pOwogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwg X19zdHIuX01faWJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ll bmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxv Yz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQo Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u KQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zdHIuc2l6ZSgpIC0gX19w b3MsIF9fbikgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5 KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiB0aGlzLT5yZXBs YWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JgogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19z LCBzaXplX3R5cGUgX19uKQogICAgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlz LT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhp cy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwg X01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMs X0FsbG9jPjo6CiAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAg ICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4g PiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICAg cmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3Bl cmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJp bmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAg IF9fc2l6ZV90eXBlIF9fbGVuID0gX1RyYWl0czo6bGVuZ3RoKF9fbGhzKTsKICAgICAgX19zdHJp bmdfdHlwZSBfX3N0cjsKICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIF9fcmhzLnNpemUoKSk7 CiAgICAgIF9fc3RyLmFwcGVuZChfX2xocywgX19saHMgKyBfX2xlbik7CiAgICAgIF9fc3RyLmFw cGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywg Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKQogICAgewog ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+IF9fc3RyaW5n X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9f c2l6ZV90eXBlOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBfX3NpemVfdHlwZSBf X2xlbiA9IF9fcmhzLnNpemUoKTsKICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIDEpOwogICAg ICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5k KF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjoKICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwg c2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX24xID0g X19pMiAtIF9faTE7CiAgICAgIHNpemVfdHlwZSBfX29mZjEgPSBfX2kxIC0gX01faWJlZ2luKCk7 CiAgICAgIGlmIChtYXhfc2l6ZSgpIC0gKHRoaXMtPnNpemUoKSAtIF9fbjEpIDw9IF9fbjIpCiAg ICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAg ICBfTV9tdXRhdGUgKF9fb2ZmMSwgX19uMSwgX19uMik7CgogICAgICBpZiAoX19uMikKICAgICAg ICB0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKSArIF9fb2ZmMSwgX19uMiwgX19jKTsKICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6CiAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5 cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAg ICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb3B5Iik7CgogICAgICBp ZiAoX19uID4gdGhpcy0+c2l6ZSgpIC0gX19wb3MpCiAgICAgICAgX19uID0gdGhpcy0+c2l6ZSgp IC0gX19wb3M7CgogICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3MsIF9NX2RhdGEoKSArIF9fcG9z LCBfX24pOwoKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90 eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19z aXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGNv bnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICBmb3IgKDsgX194cG9zICsgX19u IDw9IF9fc2l6ZTsgKytfX3hwb3MpCiAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9f ZGF0YSArIF9feHBvcywgX19zLCBfX24pID09IDApCiAgICAgICAgICByZXR1cm4gX194cG9zOwog ICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OgogICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0 CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVf dHlwZSBfX3JldCA9IG5wb3M7CiAgICAgIGlmIChfX3BvcyA8IF9fc2l6ZSkKICAgICAgICB7CiAg ICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIHNpemVf dHlwZSBfX24gPSBfX3NpemUgLSBfX3BvczsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0g dHJhaXRzX3R5cGU6OmZpbmQoX19kYXRhICsgX19wb3MsIF9fbiwgX19jKTsKICAgICAgICAgIGlm IChfX3ApCiAgICAgICAgICAgIF9fcmV0ID0gX19wIC0gX19kYXRhOwogICAgICAgIH0KICAgICAg cmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OgogICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywg c2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMt PnNpemUoKTsKICAgICAgaWYgKF9fbiA8PSBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19w b3MgPSBzdGQ6Om1pbihfX3NpemUgLSBfX24gLF9fcG9zKTsKICAgICAgICAgIGNvbnN0IF9DaGFy VCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAg ICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3BvcywgX19zLCBfX24p ID09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAgICAgICAgIH0KICAgICAg ICAgIHdoaWxlIChfX3Bvcy0tID4gMCk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXpl X3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmZp bmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5 cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAg ICAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3NpemUgLSAxOwogICAgICAgICAgaWYgKF9feHBvcyA+ IF9fcG9zKQogICAgICAgICAgICBfX3hwb3MgPSBfX3BvczsKCiAgICAgICAgICBmb3IgKCsrX194 cG9zOyBfX3hwb3MtLSA+IDA7ICkKICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcShfTV9k YXRhKClbX194cG9zXSwgX19jKSkKICAgICAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICAg IH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgZm9yICg7IF9f biAmJiBfX3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykKICAgICAgICB7CiAgICAgICAgICBj b25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClb X19wb3NdKTsKICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAg ICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90 eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pCiAgICAg ICAgewogICAgICAgICAgaWYgKC0tX19zaXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9 IF9fcG9zOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICh0cmFp dHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAg ICAgcmV0dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0t ICE9IDApOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKGNv bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAg ICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9fbiAmJiBfX3hw b3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZp bmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3hwb3NdKSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7 CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5 cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAg Zm9yICg7IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFp dHNfdHlwZTo6ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICByZXR1cm4gX194 cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9f cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXpl X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAg ICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXpl ID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0 cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAg ICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6 ZS0tKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFy VCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6 ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBp ZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAg ICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01f ZGF0YSgpW19fc2l6ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAg ICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0 dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg X19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5 cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3Ry LnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29m X3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXpl PSBtaW4oX19zaXplIC0gX19wb3MsIF9fbik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihf X3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9N X2RhdGEoKSArIF9fcG9zLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAg ICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK ICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2lj X3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBf X24yKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog ICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMSA+ IF9fc2l6ZSB8fCBfX3BvczIgPiBfX29zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl KCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWlu KF9fc2l6ZSAtIF9fcG9zMSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihf X29zaXplIC0gX19wb3MyLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNp emUsIF9fcm9zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2Rh dGEoKSArIF9fcG9zMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3Ry LmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBf X3JzaXplIC0gX19yb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu dAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJl KGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g dGhpcy0+c2l6ZSgpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0 YSgpLCBfX3MsIF9fc2l6ZSk7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fc2l6ZSAt IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgaW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAg Y29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9f cykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAg ICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp Y19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRzX3R5 cGU6Omxlbmd0aChfX3MpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBf X3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXpl KTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9z LCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9f b3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19z dHJpbmcgPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19w b3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgc2l6ZV90 eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXpl KCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5n ZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IG1p bih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19yc2l6 ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1p bihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJl KF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAg X19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBs YXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHZvaWQK ICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mIF9fc3RyLAogICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUg X0FsbG9jOjpzaXplX3R5cGUgX19idWZzaXopCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICBzaXplX3R5cGUgX19zdHJzaXplID0g X19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9f YnVmc2l6IC0gMSk7CiAgICAgIF9UcmFpdHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19i eXRlcyk7CiAgICAgIF9fYnVmW19fYnl0ZXNdID0gX0NoYXJUKCk7CiAgICB9Cn0KIyA1MSAiL2hv bWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5j bHVkZS9nKysvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDQzICIvaG9tZTUva3Jha293L2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2xv Y2FsZWZ3ZC5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jY3R5cGUuaCIgMSAzCiMg MzggIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv My4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NjdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2N0 eXBlLmgiIDEgMyA0CiMgMzkgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NjdHlwZS5oIiAyIDMKIyA1 NSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY2N0eXBlLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNp bmcgOjppc2FsbnVtOwogIHVzaW5nIDo6aXNhbHBoYTsKICB1c2luZyA6OmlzY250cmw7CiAgdXNp bmcgOjppc2RpZ2l0OwogIHVzaW5nIDo6aXNncmFwaDsKICB1c2luZyA6OmlzbG93ZXI7CiAgdXNp bmcgOjppc3ByaW50OwogIHVzaW5nIDo6aXNwdW5jdDsKICB1c2luZyA6Omlzc3BhY2U7CiAgdXNp bmcgOjppc3VwcGVyOwogIHVzaW5nIDo6aXN4ZGlnaXQ7CiAgdXNpbmcgOjp0b2xvd2VyOwogIHVz aW5nIDo6dG91cHBlcjsKfQojIDQ0ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMK IyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvaG9tZTUva3Jh a293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2cr Ky9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9leGNlcHRpb25fZGVmaW5l cy5oIiAxIDMKIyAzNSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVz cGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9p ZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qo dm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190 aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21h aW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1 bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29u c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19p b3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNDUgIi9ob21lNS9rcmFrb3cvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvbG9j YWxlZndkLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgNTYgIi9ob21lNS9rcmFrb3cvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvbG9j YWxlZndkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGNsYXNzIHZlY3RvcjsKICBjbGFzcyBsb2NhbGU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwcmludChf Q2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp bmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQsIGNv bnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9v bAogICAgaXNsb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbHBoYShfQ2hhclQsIGNvbnN0IGxvY2Fs ZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNk aWdpdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN4ZGlnaXQoX0No YXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s aW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZ3JhcGgoX0NoYXJULCBjb25z dCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFy VAogICAgdG91cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9DaGFyVCwgY29uc3QgbG9j YWxlJik7CgoKCiAgY2xhc3MgY3R5cGVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ CiAgICBjbGFzcyBjdHlwZTsKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBlPGNoYXI+OwoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFtZTsKCgogIGNsYXNz IGNvZGVjdnRfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4 dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0OwogIHRlbXBsYXRlPD4g Y2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNs YXNzIGNvZGVjdnRfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG51bV9n ZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJl YW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fcHV0OwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PiBjbGFzcyBudW1wdW5jdF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICBjbGFzcyBjb2xsYXRlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MKICAgIGNv bGxhdGVfYnluYW1lOwoKCiAgY2xhc3MgdGltZV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAg ICBjbGFzcyB0aW1lX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J bkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9nZXRf YnluYW1lOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBv c3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9wdXQ7CiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0 b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWU7CgoKICBjbGFzcyBtb25leV9i YXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJl YW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBtb25leV9nZXQ7CiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8 X0NoYXJUPiA+CiAgICBjbGFzcyBtb25leV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0OwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgogICAgY2xhc3MgbW9uZXlwdW5jdF9i eW5hbWU7CgoKICBjbGFzcyBtZXNzYWdlc19iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGNsYXNzIG1lc3NhZ2VzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs YXNzIG1lc3NhZ2VzX2J5bmFtZTsKCgogIGNsYXNzIGxvY2FsZQogIHsKICBwdWJsaWM6CgogICAg dHlwZWRlZiB1bnNpZ25lZCBpbnQgY2F0ZWdvcnk7CgoKICAgIGNsYXNzIGZhY2V0OwogICAgY2xh c3MgaWQ7CiAgICBjbGFzcyBfSW1wbDsKCiAgICBmcmllbmQgY2xhc3MgZmFjZXQ7CiAgICBmcmll bmQgY2xhc3MgX0ltcGw7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmll bmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CgogICAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQo Y29uc3QgbG9jYWxlJikgdGhyb3coKTsKCgoKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBub25l ID0gMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjdHlwZSA9IDFMIDw8IDA7CiAgICBzdGF0 aWMgY29uc3QgY2F0ZWdvcnkgbnVtZXJpYyA9IDFMIDw8IDE7CiAgICBzdGF0aWMgY29uc3QgY2F0 ZWdvcnkgY29sbGF0ZSA9IDFMIDw8IDI7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgdGltZSA9 IDFMIDw8IDM7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbW9uZXRhcnkgPSAxTCA8PCA0Owog ICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1lc3NhZ2VzID0gMUwgPDwgNTsKICAgIHN0YXRpYyBj b25zdCBjYXRlZ29yeSBhbGwgPSAoY29sbGF0ZSB8IGN0eXBlIHwgbW9uZXRhcnkgfAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpYyB8IHRpbWUgfCBtZXNz YWdlcyk7CgoKICAgIGxvY2FsZSgpIHRocm93KCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYg X19vdGhlcikgdGhyb3coKTsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKGNvbnN0IGNoYXIqIF9f c3RkX25hbWUpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgY2hhciog X19zLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBj b25zdCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2NhdCk7CgogICAgdGVtcGxhdGU8dHlwZW5h bWUgX0ZhY2V0PgogICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9f Zik7CgogICAgfmxvY2FsZSgpIHRocm93KCk7CgogICAgY29uc3QgbG9jYWxlJgogICAgb3BlcmF0 b3I9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgdGhyb3coKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRmFjZXQ+CiAgICAgIGxvY2FsZQogICAgICBjb21iaW5lKGNvbnN0IGxvY2FsZSYgX19vdGhl cik7CgoKICAgIHN0cmluZwogICAgbmFtZSgpIGNvbnN0OwoKICAgIGJvb2wKICAgIG9wZXJhdG9y PT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKTsKCiAgICBpbmxpbmUgYm9v bAogICAgb3BlcmF0b3IhPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93ICgpCiAg ICB7IHJldHVybiAhKHRoaXMtPm9wZXJhdG9yPT0oX19vdGhlcikpOyB9CgogICAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgICAg Ym9vbAogICAgICBvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0cywg X0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXIs IF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0OwoKCiAgICBzdGF0aWMgbG9jYWxlCiAgICBn bG9iYWwoY29uc3QgbG9jYWxlJik7CgogICAgc3RhdGljIGNvbnN0IGxvY2FsZSYKICAgIGNsYXNz aWMoKTsKCiAgcHJpdmF0ZToKCiAgICBfSW1wbCogX01faW1wbDsKCgogICAgc3RhdGljIF9JbXBs KiBfU19jbGFzc2ljOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9TX2dsb2JhbDsKCiAgICBzdGF0aWMg Y29uc3Qgc2l6ZV90IF9TX251bV9jYXRlZ29yaWVzID0gNjsKICAgIHN0YXRpYyBjb25zdCBzaXpl X3QgX1NfbnVtX2ZhY2V0cyA9IDEzOwoKICAgIGV4cGxpY2l0CiAgICBsb2NhbGUoX0ltcGwqKSB0 aHJvdygpOwoKICAgIHN0YXRpYyBpbmxpbmUgdm9pZAogICAgX1NfaW5pdGlhbGl6ZSgpCiAgICB7 IGlmICghX1NfY2xhc3NpYykgY2xhc3NpYygpOyB9CgogICAgc3RhdGljIGNhdGVnb3J5CiAgICBf U19ub3JtYWxpemVfY2F0ZWdvcnkoY2F0ZWdvcnkpOwoKICAgIHZvaWQKICAgIF9NX2NvYWxlc2Nl KGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBsb2NhbGUmIF9fYWRkLCBjYXRlZ29yeSBfX2Nh dCk7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6Ol9JbXBsCiAgewogIHB1YmxpYzoKCiAgICB0eXBl ZGVmIHZlY3RvcjxmYWNldCosIGFsbG9jYXRvcjxmYWNldCo+ID4gX192ZWNfZmFjZXQ7CgoKICAg IGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpmYWNldDsKCiAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAg ICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFj ZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJv dygpOwoKICBwcml2YXRlOgoKICAgIHNpemVfdCBfTV9yZWZlcmVuY2VzOwogICAgX192ZWNfZmFj ZXQqIF9NX2ZhY2V0czsKICAgIHN0cmluZyBfTV9uYW1lc1tfU19udW1fY2F0ZWdvcmllc107CiAg ICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNv bnN0IF9TX2lkX2N0eXBlW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1Nf aWRfbnVtZXJpY1tdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX2Nv bGxhdGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF90aW1lW107 CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbW9uZXRhcnlbXTsKICAg IHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tZXNzYWdlc1tdOwogICAgc3Rh dGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0KiBjb25zdCBfU19mYWNldF9jYXRlZ29yaWVzW107 CgogICAgaW5saW5lIHZvaWQKICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7ICsr X01fcmVmZXJlbmNlczsgfQoKICAgIGlubGluZSB2b2lkCiAgICBfTV9yZW1vdmVfcmVmZXJlbmNl KCkgdGhyb3coKQogICAgewogICAgICBpZiAoX01fcmVmZXJlbmNlcy0tID09IDApCiAgICAgICAg ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgZGVsZXRlIHRoaXM7IH0KICAgICAgICAgIGNh dGNoKC4uLikKICAgICAgICAgICAgeyB9CiAgICAgICAgfQogICAgfQoKICAgIF9JbXBsKGNvbnN0 IF9JbXBsJiwgc2l6ZV90KTsKICAgIF9JbXBsKHN0cmluZyBfX25hbWUsIHNpemVfdCk7CiAgIH5f SW1wbCgpIHRocm93KCk7CgogICAgYm9vbAogICAgX01fY2hlY2tfc2FtZV9uYW1lKCkKICAgIHsK ICAgICAgYm9vbCBfX3JldCA9IHRydWU7CiAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgX1Nf bnVtX2NhdGVnb3JpZXMgLSAxOyArK2kpCiAgICAgICAgX19yZXQgJj0gX01fbmFtZXNbaV0gPT0g X01fbmFtZXNbaSArIDFdOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CiAgICB2b2lkCiAgICBf TV9yZXBsYWNlX2NhdGVnb3JpZXMoY29uc3QgX0ltcGwqLCBjYXRlZ29yeSk7CgogICAgdm9pZAog ICAgX01fcmVwbGFjZV9jYXRlZ29yeShjb25zdCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqIGNv bnN0Kik7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9mYWNldChjb25zdCBfSW1wbCosIGNvbnN0 IGxvY2FsZTo6aWQqKTsKCiAgICB2b2lkCiAgICBfTV9pbnN0YWxsX2ZhY2V0KGNvbnN0IGxvY2Fs ZTo6aWQqLCBmYWNldCopOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgaW5s aW5lIHZvaWQKICAgICAgX01faW5pdF9mYWNldChfRmFjZXQqIF9fZmFjZXQpCiAgICAgIHsgX01f aW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mYWNldCk7IH0KICB9OwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGU6OmxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIs IF9GYWNldCogX19mKQogICAgewogICAgICBfTV9pbXBsID0gbmV3IF9JbXBsKCpfX290aGVyLl9N X2ltcGwsIDEpOwogICAgICBfTV9pbXBsLT5fTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6OmlkLCBf X2YpOwogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPCBfU19udW1fY2F0ZWdvcmllczsg KytfX2kpCiAgICAgICAgX01faW1wbC0+X01fbmFtZXNbX19pXSA9ICIqIjsKICAgIH0KCgogIGNs YXNzIGxvY2FsZTo6ZmFjZXQKICB7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5k IGNsYXNzIGxvY2FsZTo6X0ltcGw7CgogIHByb3RlY3RlZDoKICAgIGV4cGxpY2l0CiAgICBmYWNl dChzaXplX3QgX19yZWZzID0gMCkgdGhyb3coKTsKCiAgICB2aXJ0dWFsCiAgICB+ZmFjZXQoKSB7 IH07CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBf X2Nsb2MsIGNvbnN0IGNoYXIqIF9fcyk7CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2Rlc3Ryb3lf Y19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jKTsKCiAgcHJpdmF0ZToKICAgIHNpemVfdCBfTV9y ZWZlcmVuY2VzOwoKICAgIHZvaWQKICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygpOwoKICAg IHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpOwoKICAgIGZhY2V0KGNvbnN0 IGZhY2V0Jik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IGZhY2V0Jik7CiAgfTsKCgoK ICBjbGFzcyBsb2NhbGU6OmlkCiAgewogIHByaXZhdGU6CiAgICBmcmllbmQgY2xhc3MgbG9jYWxl OwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf RmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25zdCBs b2NhbGUmKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wK ICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93ICgpOwoKCgoKICAgIG11dGFibGUg c2l6ZV90IF9NX2luZGV4OwoKCiAgICBzdGF0aWMgc2l6ZV90IF9TX2hpZ2h3YXRlcjsKCiAgICB2 b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgaWQmKTsKCiAgICBpZChjb25zdCBpZCYpOwoKICBwdWJs aWM6CgoKCiAgICBpZCgpIHsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg IGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2Fs ZSYgX19sb2MpIHRocm93KCk7Cn0KIyA0NCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zLmgiIDIg MwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvaW9zX2Jhc2UuaCIgMSAzCiMgMzggIi9ob21lNS9rcmFr b3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr L2JpdHMvaW9zX2Jhc2UuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgogIGVudW0gX0lvc19GbXRm bGFncyB7IF9NX2lvc19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19G bXRmbGFncwogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2Ip CiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNf Y2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8KF9J b3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZs YWdzKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAg aW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl4oX0lvc19GbXRmbGFncyBfX2EsIF9Jb3Nf Rm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50Pihf X2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwog IG9wZXJhdG9yfD0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJl dHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRv ciY9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19h ID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3JePShfSW9z X0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBe IF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yfihfSW9zX0ZtdGZsYWdz IF9fYSkKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9 CgoKICBlbnVtIF9Jb3NfT3Blbm1vZGUgeyBfTV9pb3Nfb3Blbm1vZGVfZW5kID0gMUwgPDwgMTYg fTsKCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciYoX0lvc19PcGVubW9kZSBfX2Es IF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8 aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVu bW9kZQogIG9wZXJhdG9yfChfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAg eyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2Fz dDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JeKF9Jb3Nf T3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2Rl KHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5s aW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnw9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19P cGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9z X09wZW5tb2RlCiAgb3BlcmF0b3ImPShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUg X19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9k ZQogIG9wZXJhdG9yXj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7 IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVy YXRvcn4oX0lvc19PcGVubW9kZSBfX2EpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZSh+c3RhdGlj X2Nhc3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX0lvc3RhdGUgeyBfTV9pb3NfaW9zdGF0 ZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3ImKF9J b3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRl KHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5s aW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfChfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3Rh dGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBz dGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRv cl4oX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lv c3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoK ICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8PShfSW9zX0lvc3RhdGUmIF9fYSwgX0lv c19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9J b3NfSW9zdGF0ZQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBf X2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUK ICBvcGVyYXRvcl49KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0 dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J+ KF9Jb3NfSW9zdGF0ZSBfX2EpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKH5zdGF0aWNfY2FzdDxp bnQ+KF9fYSkpOyB9CgogIGVudW0gX0lvc19TZWVrZGlyIHsgX01faW9zX3NlZWtkaXJfZW5kID0g MUwgPDwgMTYgfTsKCgogIGNsYXNzIGlvc19iYXNlCiAgewogIHB1YmxpYzoKCgogICAgY2xhc3Mg ZmFpbHVyZSA6IHB1YmxpYyBleGNlcHRpb24KICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBleHBs aWNpdAogICAgICBmYWlsdXJlKGNvbnN0IHN0cmluZyYgX19zdHIpIHRocm93KCk7CgogICAgICB2 aXJ0dWFsCiAgICAgIH5mYWlsdXJlKCkgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh cioKICAgICAgd2hhdCgpIGNvbnN0IHRocm93KCk7CgogICAgcHJpdmF0ZToKICAgICAgZW51bSB7 IF9NX2J1ZnNpemUgPSAyNTYgfTsKICAgICAgY2hhciBfTV9uYW1lW19NX2J1ZnNpemVdOwoKICAg IH07CgoKICAgIHR5cGVkZWYgX0lvc19GbXRmbGFncyBmbXRmbGFnczsKCiAgICBzdGF0aWMgY29u c3QgZm10ZmxhZ3MgYm9vbGFscGhhID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jvb2xhbHBo YSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZGVjID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6 Ol9TX2RlYyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZml4ZWQgPSBmbXRmbGFncyhfX2lv c19mbGFnczo6X1NfZml4ZWQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGhleCA9IGZtdGZs YWdzKF9faW9zX2ZsYWdzOjpfU19oZXgpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGludGVy bmFsID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ludGVybmFsKTsKICAgIHN0YXRpYyBjb25z dCBmbXRmbGFncyBsZWZ0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2xlZnQpOwogICAgc3Rh dGljIGNvbnN0IGZtdGZsYWdzIG9jdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19vY3QpOwog ICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHJpZ2h0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9T X3JpZ2h0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzY2llbnRpZmljID0gZm10ZmxhZ3Mo X19pb3NfZmxhZ3M6Ol9TX3NjaWVudGlmaWMpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNo b3diYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3diYXNlKTsKICAgIHN0YXRpYyBj b25zdCBmbXRmbGFncyBzaG93cG9pbnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bv aW50KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93cG9zID0gZm10ZmxhZ3MoX19pb3Nf ZmxhZ3M6Ol9TX3Nob3dwb3MpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNraXB3cyA9IGZt dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19za2lwd3MpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdz IHVuaXRidWYgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfdW5pdGJ1Zik7CiAgICBzdGF0aWMg Y29uc3QgZm10ZmxhZ3MgdXBwZXJjYXNlID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VwcGVy Y2FzZSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYWRqdXN0ZmllbGQgPSBmbXRmbGFncyhf X2lvc19mbGFnczo6X1NfYWRqdXN0ZmllbGQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGJh c2VmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19iYXNlZmllbGQpOwogICAgc3RhdGlj IGNvbnN0IGZtdGZsYWdzIGZsb2F0ZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZmxv YXRmaWVsZCk7CgoKICAgIHR5cGVkZWYgX0lvc19Jb3N0YXRlIGlvc3RhdGU7CiAgICBzdGF0aWMg Y29uc3QgaW9zdGF0ZSBiYWRiaXQgPSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19iYWRiaXQpOwog ICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZW9mYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1Nf ZW9mYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGZhaWxiaXQgPSBpb3N0YXRlKF9faW9z X2ZsYWdzOjpfU19mYWlsYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGdvb2RiaXQgPSBp b3N0YXRlKDApOwoKCiAgICB0eXBlZGVmIF9Jb3NfT3Blbm1vZGUgb3Blbm1vZGU7CiAgICBzdGF0 aWMgY29uc3Qgb3Blbm1vZGUgYXBwID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2FwcCk7CiAg ICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYXRlID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2F0 ZSk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgYmluYXJ5ID0gb3Blbm1vZGUoX19pb3NfZmxh Z3M6Ol9TX2Jpbik7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgaW4gPSBvcGVubW9kZShfX2lv c19mbGFnczo6X1NfaW4pOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIG91dCA9IG9wZW5tb2Rl KF9faW9zX2ZsYWdzOjpfU19vdXQpOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIHRydW5jID0g b3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX3RydW5jKTsKCgogICAgdHlwZWRlZiBfSW9zX1NlZWtk aXIgc2Vla2RpcjsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGJlZyA9IHNlZWtkaXIoMCk7CiAg ICBzdGF0aWMgY29uc3Qgc2Vla2RpciBjdXIgPSBzZWVrZGlyKDEpOwogICAgc3RhdGljIGNvbnN0 IHNlZWtkaXIgZW5kID0gc2Vla2RpcigyKTsKIyAyMTYgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvaW9zX2Jh c2UuaCIgMwogICAgZW51bSBldmVudAogICAgewogICAgICBlcmFzZV9ldmVudCwKICAgICAgaW1i dWVfZXZlbnQsCiAgICAgIGNvcHlmbXRfZXZlbnQKICAgIH07CgogICAgdHlwZWRlZiB2b2lkICgq ZXZlbnRfY2FsbGJhY2spIChldmVudCwgaW9zX2Jhc2UmLCBpbnQpOwoKICAgIHZvaWQKICAgIHJl Z2lzdGVyX2NhbGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4KTsKCiAgcHJv dGVjdGVkOgoKICAgIHN0cmVhbXNpemUgX01fcHJlY2lzaW9uOwogICAgc3RyZWFtc2l6ZSBfTV93 aWR0aDsKICAgIGZtdGZsYWdzIF9NX2ZsYWdzOwoKCgogICAgc3RydWN0IF9DYWxsYmFja19saXN0 CiAgICB7CgogICAgICBfQ2FsbGJhY2tfbGlzdCogX01fbmV4dDsKICAgICAgaW9zX2Jhc2U6OmV2 ZW50X2NhbGxiYWNrIF9NX2ZuOwogICAgICBpbnQgX01faW5kZXg7CiAgICAgIGludCBfTV9yZWZj b3VudDsKCiAgICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBfX2Zu LCBpbnQgX19pbmRleCwKICAgICAgICAgICAgICAgICAgICAgX0NhbGxiYWNrX2xpc3QqIF9fY2Ip CiAgICAgIDogX01fbmV4dChfX2NiKSwgX01fZm4oX19mbiksIF9NX2luZGV4KF9faW5kZXgpLCBf TV9yZWZjb3VudCgwKSB7IH0KCiAgICAgIHZvaWQKICAgICAgX01fYWRkX3JlZmVyZW5jZSgpIHsg KytfTV9yZWZjb3VudDsgfQoKICAgICAgaW50CiAgICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB7 IHJldHVybiBfTV9yZWZjb3VudC0tOyB9CiAgICB9OwoKICAgICBfQ2FsbGJhY2tfbGlzdCogX01f Y2FsbGJhY2tzOwoKICAgIHZvaWQKICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50IF9fZXYpIHRo cm93KCk7CgogICAgdm9pZAogICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7CgoKICAgIHN0 cnVjdCBfV29yZHMKICAgIHsKICAgICAgdm9pZCogX01fcHdvcmQ7CiAgICAgIGxvbmcgX01faXdv cmQ7CiAgICB9OwoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbG9jYWxfd29yZHMgPSA4OwogICAg X1dvcmRzIF9NX3dvcmRfYXJyYXlbX1NfbG9jYWxfd29yZHNdOwogICAgX1dvcmRzIF9NX2R1bW15 OwogICAgX1dvcmRzKiBfTV93b3JkczsKICAgIGludCBfTV93b3JkX2xpbWl0OwoKICAgIF9Xb3Jk cyYKICAgIF9NX2dyb3dfd29yZHMoaW50IF9faW5kZXgpOwoKCiAgICBsb2NhbGUgX01faW9zX2xv Y2FsZTsKCiAgICB2b2lkCiAgICBfTV9pbml0KCk7CgogIHB1YmxpYzoKCgoKCgogICAgY2xhc3Mg SW5pdAogICAgewogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7CiAgICBwdWJsaWM6CiAgICAg IEluaXQoKTsKICAgICAgfkluaXQoKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lvc19j cmVhdGUoYm9vbCBfX3N5bmMpOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9zX2Rlc3Ry b3koKTsKCiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgaW50IF9TX2lvc19iYXNlX2luaXQ7CiAg ICAgIHN0YXRpYyBib29sIF9TX3N5bmNlZF93aXRoX3N0ZGlvOwogICAgfTsKCgogICAgaW5saW5l IGZtdGZsYWdzCiAgICBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9NX2ZsYWdzOyB9CgogICAgaW5s aW5lIGZtdGZsYWdzCiAgICBmbGFncyhmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBmbXRm bGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyA9IF9fZm10Zmw7CiAgICAgIHJl dHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3Mg X19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01f ZmxhZ3MgfD0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBm bXRmbGFncwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsLCBmbXRmbGFncyBfX21hc2spCiAgICB7 CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzICY9IH5fX21h c2s7CiAgICAgIF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19tYXNrKTsKICAgICAgcmV0dXJuIF9f b2xkOwogICAgfQoKICAgIGlubGluZSB2b2lkCiAgICB1bnNldGYoZm10ZmxhZ3MgX19tYXNrKSB7 IF9NX2ZsYWdzICY9IH5fX21hc2s7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJlY2lz aW9uKCkgY29uc3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9CgogICAgaW5saW5lIHN0cmVhbXNp emUKICAgIHByZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykKICAgIHsKICAgICAgc3RyZWFtc2l6 ZSBfX29sZCA9IF9NX3ByZWNpc2lvbjsKICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOwogICAg ICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKCkg Y29uc3QgeyByZXR1cm4gX01fd2lkdGg7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lk dGgoc3RyZWFtc2l6ZSBfX3dpZGUpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV93 aWR0aDsKICAgICAgX01fd2lkdGggPSBfX3dpZGU7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0K CiAgICBzdGF0aWMgYm9vbAogICAgc3luY193aXRoX3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1ZSk7 CgoKICAgIGxvY2FsZQogICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgaW5saW5l IGxvY2FsZQogICAgZ2V0bG9jKCkgY29uc3QgeyByZXR1cm4gX01faW9zX2xvY2FsZTsgfQoKCiAg ICBzdGF0aWMgaW50CiAgICB4YWxsb2MoKSB0aHJvdygpOwoKICAgIGlubGluZSBsb25nJgogICAg aXdvcmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93 b3JkX2xpbWl0KQogICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRzW19faXhdIDogX01f Z3Jvd193b3JkcyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9pd29yZDsKICAgIH0KCiAg ICBpbmxpbmUgdm9pZComCiAgICBwd29yZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRzJiBf X3dvcmQgPSAoX19peCA8IF9NX3dvcmRfbGltaXQpCiAgICAgICAgICAgICAgICAgICAgICAgID8g X01fd29yZHNbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193b3Jk Ll9NX3B3b3JkOwogICAgfQoKCiAgICB+aW9zX2Jhc2UoKTsKCiAgcHJvdGVjdGVkOgogICAgaW9z X2Jhc2UoKTsKCgogIHByaXZhdGU6CiAgICBpb3NfYmFzZShjb25zdCBpb3NfYmFzZSYpOwoKICAg IGlvc19iYXNlJgogICAgb3BlcmF0b3I9KGNvbnN0IGlvc19iYXNlJik7CgogIH07CgoKICBpbmxp bmUgaW9zX2Jhc2UmCiAgYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNl LnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5s aW5lIGlvc19iYXNlJgogIG5vYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i YXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoK ICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBf X2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgog IGlubGluZSBpb3NfYmFzZSYKICBub3Nob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg X19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9 CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAg ICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAg fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7 CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFz ZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAg ewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsK ICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7 CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7 CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewog ICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0K CiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg X19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoK ICBpbmxpbmUgaW9zX2Jhc2UmCiAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg X19iYXNlLnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0K CiAgaW5saW5lIGlvc19iYXNlJgogIG5vdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewog ICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7 CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsK ICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsK ICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7 CiAgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFz ZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaW50ZXJuYWwoaW9zX2Jhc2UmIF9fYmFzZSkK ICB7CiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRqdXN0 ZmllbGQpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbGVm dChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpsZWZ0LCBp b3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp b3NfYmFzZSYKICByaWdodChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlv c19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7 CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGRlYyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAg IF9fYmFzZS5zZXRmKGlvc19iYXNlOjpkZWMsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0 dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBoZXgoaW9zX2Jhc2UmIF9fYmFz ZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZpZWxk KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgb2N0KGlvc19i YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jhc2U6 OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYK ICBmaXhlZChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpm aXhlZCwgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu bGluZSBpb3NfYmFzZSYKICBzY2llbnRpZmljKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i YXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAg IHJldHVybiBfX2Jhc2U7CiAgfQoKfQojIDQ1ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9pb3MuaCIg MiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDEgMwojIDM4ICIvaG9t ZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs dWRlL2crKy9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMwoKIyAxICIvaG9tZTUva3Jha293L2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1z dW4tc29sYXJpczIuOC9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0MCAiL2hvbWU1L2tyYWtvdy9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0 cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lvc2Z3ZC5o IiAxIDMKIyA0MSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDEgIi9o b21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2lu Y2x1ZGUvZysrL2JpdHMvc3RkX2NzdGRpby5oIiAxIDMKIyA0MiAiL2hvbWU1L2tyYWtvdy9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9z dGRfc3RyZWFtYnVmLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlZndkLmgiIDEg MwojIDQzICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMiAzCiMgMSAiL2hvbWU1 L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk ZS9nKysvYml0cy9pb3NfYmFzZS5oIiAxIDMKIyA0NCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfc3Ry ZWFtYnVmLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMo YmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9pb3MsCiAgICAgICAgICAgICAgICAgICAgICBi YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAg ICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpOwoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNf c3RyZWFtYnVmCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5 cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0eXBlPGNo YXJfdHlwZT4gX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFy X3R5cGUsIHRyYWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOwoKICAgICAgZnJpZW5kIGNsYXNz IGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJh c2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBi YXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3Mg aXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5k IGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CgogICAg ICBmcmllbmQgc3RyZWFtc2l6ZQogICAgICBfX2NvcHlfc3RyZWFtYnVmczw+KGJhc2ljX2lvczxj aGFyX3R5cGUsIHRyYWl0c190eXBlPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg X19zdHJlYW1idWZfdHlwZSogX19zYmluLF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpOwoKICAg IHByb3RlY3RlZDoKCgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9idWY7CgoKICAgICAgaW50X3R5 cGUgX01fYnVmX3NpemU7CgoKICAgICAgaW50X3R5cGUgX01fYnVmX3NpemVfb3B0OwoKCgogICAg ICBib29sIF9NX2J1Zl91bmlmaWVkOwoKCgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2luX2JlZzsK ICAgICAgY2hhcl90eXBlKiBfTV9pbl9jdXI7CiAgICAgIGNoYXJfdHlwZSogX01faW5fZW5kOwog ICAgICBjaGFyX3R5cGUqIF9NX291dF9iZWc7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2N1cjsK ICAgICAgY2hhcl90eXBlKiBfTV9vdXRfZW5kOwoKCiAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBf TV9tb2RlOwoKCiAgICAgIGxvY2FsZSBfTV9idWZfbG9jYWxlOwoKCiAgICAgIGJvb2wgX01fYnVm X2xvY2FsZV9pbml0OwoKCgoKCgogICAgICBpbnRfdHlwZSBfTV9wYmFja19zaXplOwogICAgICBj aGFyX3R5cGUqIF9NX3BiYWNrOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOwog ICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2VuZF9zYXZlOwogICAgICBib29sIF9NX3BiYWNrX2lu aXQ7CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2NyZWF0ZSgpCiAgICAgIHsKICAgICAg ICBpZiAoIV9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIGludF90eXBlIF9f ZGlzdCA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAgICAgaW50X3R5cGUgX19sZW4g PSBtaW4oX01fcGJhY2tfc2l6ZSwgX19kaXN0KTsKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNv cHkoX01fcGJhY2ssIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgICAgICBfTV9wYmFja19jdXJf c2F2ZSA9IF9NX2luX2N1cjsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfTV9pbl9l bmQ7CiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fcGJhY2ssIF9NX3BiYWNrLCBfTV9wYmFjayAr IF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tfaW5pdCA9IHRydWU7CiAgICAgICAgICB9CiAg ICAgIH0KCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJhY2tfZGVzdHJveSgpCiAgICAgIHsKICAg ICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAgIHsKCiAgICAgICAgICAgIGludF90eXBl IF9fb2ZmX2N1ciA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwoKCiAgICAgICAgICAgIGludF90eXBl IF9fb2ZmX2VuZCA9IDA7CiAgICAgICAgICAgIGludF90eXBlIF9fcGJhY2tfbGVuID0gX01faW5f ZW5kIC0gX01fcGJhY2s7CiAgICAgICAgICAgIGludF90eXBlIF9fc2F2ZV9sZW4gPSBfTV9wYmFj a19lbmRfc2F2ZSAtIF9NX2J1ZjsKICAgICAgICAgICAgaWYgKF9fcGJhY2tfbGVuID4gX19zYXZl X2xlbikKICAgICAgICAgICAgICBfX29mZl9lbmQgPSBfX3BiYWNrX2xlbiAtIF9fc2F2ZV9sZW47 CgogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX2J1ZiwgX01fcGJhY2tfY3VyX3NhdmUgKyBfX29m Zl9jdXIsCiAgICAgICAgICAgICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgKyBfX29mZl9l bmQpOwogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAg X01fcGJhY2tfZW5kX3NhdmUgPSBfX251bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSBm YWxzZTsKICAgICAgICAgIH0KICAgICAgfQoKCgogICAgICB2b2lkCiAgICAgIF9NX2luX2N1cl9t b3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fb3V0 X2N1cjsKICAgICAgICBfTV9pbl9jdXIgKz0gX19uOwogICAgICAgIGlmIChfX3Rlc3RvdXQgJiYg X01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsKICAgICAgfQojIDE5 MyAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9nKysvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDMKICAgICAgdm9pZAogICAgICBf TV9vdXRfY3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3Rp biA9IF9NX2luX2N1cjsKCiAgICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgICAgaWYgKF9f dGVzdGluICYmIF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAg ICAgICBpZiAoX01fb3V0X2N1ciA+IF9NX291dF9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAg IF9NX291dF9lbmQgPSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgaWYgKF9fdGVzdGluKQogICAg ICAgICAgICAgIF9NX2luX2VuZCArPSBfX247CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAg IG9mZl90eXBlCiAgICAgIF9NX291dF9idWZfc2l6ZSgpCiAgICAgIHsKICAgICAgICBvZmZfdHlw ZSBfX3JldCA9IDA7CiAgICAgICAgaWYgKF9NX291dF9jdXIpCiAgICAgICAgICB7CgogICAgICAg ICAgICBpZiAoX01fb3V0X2JlZyA9PSBfTV9idWYpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9v dXRfYmVnICsgX01fYnVmX3NpemUgLSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgIF9fcmV0ID0gX01fb3V0X2VuZCAtIF9NX291dF9jdXI7CiAgICAgICAgICB9CiAg ICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CiMgMjM2ICIvaG9tZTUva3Jha293L2xvY2FsL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9z dHJlYW1idWYuaCIgMwogICAgICB2b2lkCiAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKHZvaWQp CiAgICAgIHsKICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjppbikKICAgICAgICAgIHRo aXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1Zik7CiAgICAgICAgaWYgKF9NX21vZGUgJiBp b3NfYmFzZTo6b3V0KQogICAgICAgICAgdGhpcy0+c2V0cChfTV9idWYsIF9NX2J1Zik7CiAgICAg IH0KCiAgICAgIHZvaWQKICAgICAgX01fc2V0X2RldGVybWluYXRlKG9mZl90eXBlIF9fb2ZmKQog ICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47CiAg ICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKICAgICAgICBp ZiAoX190ZXN0aW4pCiAgICAgICAgICB0aGlzLT5zZXRnKF9NX2J1ZiwgX01fYnVmLCBfTV9idWYg KyBfX29mZik7CiAgICAgICAgaWYgKF9fdGVzdG91dCkKICAgICAgICAgIHRoaXMtPnNldHAoX01f YnVmLCBfTV9idWYgKyBfX29mZik7CiAgICAgIH0KCiAgICAgIGJvb2wKICAgICAgX01faXNfaW5k ZXRlcm1pbmF0ZSh2b2lkKQogICAgICB7CiAgICAgICAgYm9vbCBfX3JldCA9IGZhbHNlOwoKICAg ICAgICBpZiAoX01fYnVmKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoX01fbW9kZSAmIGlv c19iYXNlOjppbikKICAgICAgICAgICAgICBfX3JldCA9IF9NX2luX2JlZyA9PSBfTV9pbl9jdXIg JiYgX01faW5fY3VyID09IF9NX2luX2VuZDsKICAgICAgICAgICAgaWYgKF9NX21vZGUgJiBpb3Nf YmFzZTo6b3V0KQogICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0X2JlZyA9PSBfTV9vdXRfY3Vy ICYmIF9NX291dF9jdXIgPT0gX01fb3V0X2VuZDsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4g X19yZXQ7CiAgICAgIH0KCiAgcHVibGljOgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19zdHJl YW1idWYoKQogICAgICB7CiAgICAgICAgX01fYnVmX3VuaWZpZWQgPSBmYWxzZTsKICAgICAgICBf TV9idWZfc2l6ZSA9IDA7CiAgICAgICAgX01fYnVmX3NpemVfb3B0ID0gMDsKICAgICAgICBfTV9t b2RlID0gaW9zX2Jhc2U6Om9wZW5tb2RlKDApOwogICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9 IGZhbHNlOwogICAgICB9CgoKICAgICAgbG9jYWxlCiAgICAgIHB1YmltYnVlKGNvbnN0IGxvY2Fs ZSAmX19sb2MpCiAgICAgIHsKICAgICAgICBsb2NhbGUgX190bXAodGhpcy0+Z2V0bG9jKCkpOwog ICAgICAgIHRoaXMtPmltYnVlKF9fbG9jKTsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0K CiAgICAgIGxvY2FsZQogICAgICBnZXRsb2MoKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9N X2J1Zl9sb2NhbGVfaW5pdCkKICAgICAgICAgIHJldHVybiBfTV9idWZfbG9jYWxlOwogICAgICAg IGVsc2UKICAgICAgICAgIHJldHVybiBsb2NhbGUoKTsKICAgICAgfQoKCiAgICAgIF9fc3RyZWFt YnVmX3R5cGUqCiAgICAgIHB1YnNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p CiAgICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1ZihfX3MsIF9fbik7IH0KCiAgICAgIHBvc190eXBl CiAgICAgIHB1YnNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5 LAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6 aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrb2ZmKF9fb2ZmLCBf X3dheSwgX19tb2RlKTsgfQoKICAgICAgcG9zX3R5cGUKICAgICAgcHVic2Vla3Bvcyhwb3NfdHlw ZSBfX3NwLAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3Nf YmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrcG9zKF9f c3AsIF9fbW9kZSk7IH0KCiAgICAgIGludAogICAgICBwdWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+ c3luYygpOyB9CgoKCiAgICAgIHN0cmVhbXNpemUKICAgICAgaW5fYXZhaWwoKQogICAgICB7CiAg ICAgICAgc3RyZWFtc2l6ZSBfX3JldDsKICAgICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1 ciA8IF9NX2luX2VuZCkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQp CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50X3R5cGUgX19zYXZlX2xlbiA9IF9N X3BiYWNrX2VuZF9zYXZlIC0gX01fcGJhY2tfY3VyX3NhdmU7CiAgICAgICAgICAgICAgICBpbnRf dHlwZSBfX3BiYWNrX2xlbiA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwogICAgICAgICAgICAgICAg X19yZXQgPSBfX3NhdmVfbGVuIC0gX19wYmFja19sZW47CiAgICAgICAgICAgICAgfQogICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0 cigpOwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+c2hv d21hbnljKCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICBpbnRfdHlwZQog ICAgICBzbmV4dGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlw ZTo6ZW9mKCk7CiAgICAgICAgcmV0dXJuICh0aGlzLT5zYnVtcGMoKSA9PSBfX2VvZiA/IF9fZW9m IDogdGhpcy0+c2dldGMoKSk7CiAgICAgIH0KCiAgICAgIGludF90eXBlCiAgICAgIHNidW1wYygp OwoKICAgICAgaW50X3R5cGUKICAgICAgc2dldGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUg X19yZXQ7CiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAg ICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqKHRoaXMtPmdwdHIoKSkp OwogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+dW5kZXJmbG93KCk7CiAgICAg ICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNnZXRuKGNo YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNnZXRu KF9fcywgX19uKTsgfQoKCiAgICAgIGludF90eXBlCiAgICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUg X19jKTsKCiAgICAgIGludF90eXBlCiAgICAgIHN1bmdldGMoKTsKCgogICAgICBpbnRfdHlwZQog ICAgICBzcHV0YyhjaGFyX3R5cGUgX19jKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAgc3B1dG4o Y29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlz LT54c3B1dG4oX19zLCBfX24pOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBiYXNpY19zdHJlYW1i dWYoKQogICAgICA6IF9NX2J1ZihfX251bGwpLCBfTV9idWZfc2l6ZSgwKSwKICAgICAgX01fYnVm X3NpemVfb3B0KHN0YXRpY19jYXN0PGludF90eXBlPigxMDI0KSksIF9NX2J1Zl91bmlmaWVkKGZh bHNlKSwKICAgICAgX01faW5fYmVnKDApLCBfTV9pbl9jdXIoMCksIF9NX2luX2VuZCgwKSwgX01f b3V0X2JlZygwKSwgX01fb3V0X2N1cigwKSwKICAgICAgX01fb3V0X2VuZCgwKSwgX01fbW9kZShp b3NfYmFzZTo6b3Blbm1vZGUoMCkpLCBfTV9idWZfbG9jYWxlKGxvY2FsZSgpKSwKICAgICAgX01f YnVmX2xvY2FsZV9pbml0KGZhbHNlKSwgX01fcGJhY2tfc2l6ZSgxKSwgX01fcGJhY2soX19udWxs KSwKICAgICAgX01fcGJhY2tfY3VyX3NhdmUoX19udWxsKSwgX01fcGJhY2tfZW5kX3NhdmUoX19u dWxsKSwgX01fcGJhY2tfaW5pdChmYWxzZSkKICAgICAgeyB9CgoKICAgICAgY2hhcl90eXBlKgog ICAgICBlYmFjaygpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2JlZzsgfQoKICAgICAgY2hhcl90eXBl KgogICAgICBncHRyKCkgY29uc3QgeyByZXR1cm4gX01faW5fY3VyOyB9CgogICAgICBjaGFyX3R5 cGUqCiAgICAgIGVncHRyKCkgY29uc3QgeyByZXR1cm4gX01faW5fZW5kOyB9CgogICAgICB2b2lk CiAgICAgIGdidW1wKGludCBfX24pIHsgX01faW5fY3VyICs9IF9fbjsgfQoKICAgICAgdm9pZAog ICAgICBzZXRnKGNoYXJfdHlwZSogX19nYmVnLCBjaGFyX3R5cGUqIF9fZ25leHQsIGNoYXJfdHlw ZSogX19nZW5kKQogICAgICB7CiAgICAgICAgX01faW5fYmVnID0gX19nYmVnOwogICAgICAgIF9N X2luX2N1ciA9IF9fZ25leHQ7CiAgICAgICAgX01faW5fZW5kID0gX19nZW5kOwogICAgICAgIGlm ICghKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pICYmIF9fZ2JlZyAmJiBfX2duZXh0ICYmIF9fZ2Vu ZCkKICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6OmluOwogICAgICB9CgoK ICAgICAgY2hhcl90eXBlKgogICAgICBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9iZWc7 IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9j dXI7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZXBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9v dXRfZW5kOyB9CgogICAgICB2b2lkCiAgICAgIHBidW1wKGludCBfX24pIHsgX01fb3V0X2N1ciAr PSBfX247IH0KCiAgICAgIHZvaWQKICAgICAgc2V0cChjaGFyX3R5cGUqIF9fcGJlZywgY2hhcl90 eXBlKiBfX3BlbmQpCiAgICAgIHsKICAgICAgICBfTV9vdXRfYmVnID0gX01fb3V0X2N1ciA9IF9f cGJlZzsKICAgICAgICBfTV9vdXRfZW5kID0gX19wZW5kOwogICAgICAgIGlmICghKF9NX21vZGUg JiBpb3NfYmFzZTo6b3V0KSAmJiBfX3BiZWcgJiYgX19wZW5kKQogICAgICAgICAgX01fbW9kZSA9 IF9NX21vZGUgfCBpb3NfYmFzZTo6b3V0OwogICAgICB9CgoKCiAgICAgIHZpcnR1YWwgdm9pZAog ICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgICB7CiAgICAgICAgX01fYnVmX2xv Y2FsZV9pbml0ID0gdHJ1ZTsKICAgICAgICBpZiAoX01fYnVmX2xvY2FsZSAhPSBfX2xvYykKICAg ICAgICAgIF9NX2J1Zl9sb2NhbGUgPSBfX2xvYzsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwgYmFz aWNfc3RyZWFtYnVmPGNoYXJfdHlwZSxfVHJhaXRzPioKICAgICAgc2V0YnVmKGNoYXJfdHlwZSos IHN0cmVhbXNpemUpCiAgICAgIHsgcmV0dXJuIHRoaXM7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5 cGUKICAgICAgc2Vla29mZihvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIsCiAgICAgICAgICAg ICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAg ICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsgfQoKICAgICAgdmlydHVhbCBwb3Nf dHlwZQogICAgICBzZWVrcG9zKHBvc190eXBlLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVu bW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190 eXBlKG9mZl90eXBlKC0xKSk7IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIHN5bmMoKSB7IHJl dHVybiAwOyB9CgoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHNob3dtYW55YygpIHsg cmV0dXJuIDA7IH0KCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oY2hhcl90 eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAg dW5kZXJmbG93KCkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgogICAgICB2 aXJ0dWFsIGludF90eXBlCiAgICAgIHVmbG93KCkKICAgICAgewogICAgICAgIGludF90eXBlIF9f cmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGJvb2wgX190ZXN0ZW9mID0gdGhpcy0+ dW5kZXJmbG93KCkgPT0gX19yZXQ7CiAgICAgICAgYm9vbCBfX3Rlc3RwZW5kaW5nID0gX01faW5f Y3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZDsKICAgICAgICBpZiAoIV9fdGVzdGVvZiAmJiBf X3Rlc3RwZW5kaW5nKQogICAgICAgICAgewogICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBl Ojp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICAgICAgKytfTV9pbl9jdXI7CiAgICAg ICAgICAgIGlmIChfTV9idWZfdW5pZmllZCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAg ICAgICAgICAgICArK19NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0 OwogICAgICB9CgoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBwYmFja2ZhaWwoaW50X3R5 cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2Yo KTsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c3B1dG4oY29uc3QgY2hhcl90 eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAg b3ZlcmZsb3coaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRy YWl0c190eXBlOjplb2YoKTsgfQojIDUxNiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfc3RyZWFtYnVm LmgiIDMKICAgIHByaXZhdGU6CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zihjb25zdCBfX3N0cmVhbWJ1 Zl90eXBlJik7CgogICAgICBfX3N0cmVhbWJ1Zl90eXBlJgogICAgICBvcGVyYXRvcj0oY29uc3Qg X19zdHJlYW1idWZfdHlwZSYpOwoKICAgIH07Cgp9CgoKCgojIDEgIi9ob21lNS9rcmFrb3cvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMv c3RyZWFtYnVmLnRjYyIgMSAzCiMgMzcgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RyZWFtYnVmLnRjYyIg MwpuYW1lc3BhY2Ugc3RkIHsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAg ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzYnVtcGMoKQogICAgewog ICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBf TV9pbl9lbmQpCiAgICAgICAgewogICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICpncHRyKCk7CiAg ICAgICAgICBfTV9pbl9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6 OnRvX2ludF90eXBlKF9fYyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0 aGlzLT51ZmxvdygpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs IF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46 OgogICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0 OwogICAgICBib29sIF9fdGVzdHBvcyA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9j dXI7CiAgICAgIGJvb2wgX190ZXN0bmUgPSBfTV9pbl9jdXIgJiYgIXRyYWl0c190eXBlOjplcShf X2MsIHRoaXMtPmdwdHIoKVstMV0pOwogICAgICBpZiAoIV9fdGVzdHBvcyB8fCBfX3Rlc3RuZSkK ICAgICAgICBfX3JldCA9IHBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7 CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAg ICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0cigpKTsKICAg ICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0 cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBz dW5nZXRjKCkKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9pbl9jdXIg JiYgX01faW5fYmVnIDwgX01faW5fY3VyKQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2N1cl9t b3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9p bl9jdXIpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+cGJhY2tm YWlsKCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf VHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAg ICBpZiAoX01fb3V0X2J1Zl9zaXplKCkpCiAgICAgICAgewogICAgICAgICAgKl9NX291dF9jdXIg PSBfX2M7CiAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRy YWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg IF9fcmV0ID0gdGhpcy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwog ICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs IF9UcmFpdHM+OjoKICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAg ICB7CiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24p CiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fYnVmX2xlbiA9IF9NX2luX2VuZCAtIF9NX2lu X2N1cjsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgc2l6ZV90IF9fcmVtYWluaW5nID0gX19uIC0gX19yZXQ7CiAgICAgICAgICAgICAgc2l6 ZV90IF9fbGVuID0gbWluKF9fYnVmX2xlbiwgX19yZW1haW5pbmcpOwogICAgICAgICAgICAgIHRy YWl0c190eXBlOjpjb3B5KF9fcywgX01faW5fY3VyLCBfX2xlbik7CiAgICAgICAgICAgICAgX19y ZXQgKz0gX19sZW47CiAgICAgICAgICAgICAgX19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9N X2luX2N1cl9tb3ZlKF9fbGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8 IF9fbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPnVm bG93KCk7CiAgICAgICAgICAgICAgaWYgKF9fYyAhPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysr LCB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICAgICAgICArK19f cmV0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9 CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg c3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNw dXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3Ry ZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAg ICAgICAgICBvZmZfdHlwZSBfX2J1Zl9sZW4gPSBfTV9vdXRfYnVmX3NpemUoKTsKICAgICAgICAg IGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgb2ZmX3R5cGUg X19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX2xlbiA9 IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6 Y29weShfTV9vdXRfY3VyLCBfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xl bjsKICAgICAgICAgICAgICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9t b3ZlKF9fbGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAg ICAgICAgICAgewogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93KHRy YWl0c190eXBlOjp0b19pbnRfdHlwZSgqX19zKSk7CiAgICAgICAgICAgICAgaWYgKF9fYyAhPSB0 cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsr X19yZXQ7CiAgICAgICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVm cyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAg ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAg ICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpCiAgewog ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwoKICAgICAg c3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHN0cmVhbXNpemUgX19idWZzaXplID0gX19zYmlu LT5pbl9hdmFpbCgpOwogICAgICBzdHJlYW1zaXplIF9feHRyY3Q7CiAgICAgIGJvb2wgX190ZXN0 cHV0ID0gX19zYm91dC0+X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAgIHRyeSB7CiAgICAg ICAgd2hpbGUgKF9fdGVzdHB1dCAmJiBfX2J1ZnNpemUgIT0gLTEpCiAgICAgICAgICB7CiAgICAg ICAgICAgIF9feHRyY3QgPSBfX3Nib3V0LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19idWZzaXpl KTsKICAgICAgICAgICAgX19yZXQgKz0gX194dHJjdDsKICAgICAgICAgICAgX19zYmluLT5fTV9p bl9jdXJfbW92ZShfX3h0cmN0KTsKICAgICAgICAgICAgaWYgKF9feHRyY3QgPT0gX19idWZzaXpl KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2Jpbi0+ c2dldGMoKTsKICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX1RyYWl0czo6ZW9mKCkpCiAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBfX2lvcy5zZXRzdGF0ZShpb3NfYmFz ZTo6ZW9mYml0KTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwogICAgICAg ICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg fQogICAgICB9CiAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKSB7CiAgICAgICAgaWYgKChf X2lvcy5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgIT0gMCkKICAgICAgICAgIHRo cm93OwogICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KfQojIDUzMCAiL2hvbWU1L2ty YWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9n KysvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDQ2ICIvaG9tZTUva3Jha293L2xvY2FsL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9p b3MuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9iYXNpY19pb3MuaCIgMSAzCiMgMzQgIi9o b21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2lu Y2x1ZGUvZysrL2JpdHMvYmFzaWNfaW9zLmgiIDMKCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zYnVm X2l0ZXIuaCIgMSAzCiMgMzYgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc2J1Zl9pdGVyLmgiIDMKCm5hbWVz cGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1 dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwdWJsaWM6 CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0 cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz PiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4gb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbWJ1Zl90eXBlKiBf TV9zYnVmOwogICAgICBib29sIF9NX2ZhaWxlZDsKCiAgICBwdWJsaWM6CiAgICAgIGlubGluZQog ICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zKSB0aHJvdyAoKQogICAg ICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsgfQoKICAgICAg b3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdyAoKQogICAgICA6 IF9NX3NidWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAgIG9zdHJlYW1idWZf aXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKTsKCiAgICAgIG9zdHJlYW1idWZf aXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7 IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB0aHJv dygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgog ICAgICBvcGVyYXRvcisrKCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAg Ym9vbAogICAgICBmYWlsZWQoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX2ZhaWxl ZDsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgaW5saW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYKICAgIG9z dHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I9KF9DaGFyVCBfX2Mp CiAgICB7CiAgICAgIGlmICghX01fZmFpbGVkICYmCiAgICAgICAgICBfVHJhaXRzOjplcV9pbnRf dHlwZShfTV9zYnVmLT5zcHV0YyhfX2MpLF9UcmFpdHM6OmVvZigpKSkKICAgICAgX01fZmFpbGVk ID0gdHJ1ZTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3IK ICAgIDogcHVibGljIGl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3RhZywgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzOjpvZmZfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCosIF9DaGFy VCY+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg ICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf VHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8 X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICAgICAgdHlwZWRlZiBpc3RyZWFt YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmaXRlcl90eXBlOwoKICAg IHByaXZhdGU6CgoKCgoKCgogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsKICAgICAgaW50 X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoKSB0aHJv dygpCiAgICAgIDogX01fc2J1ZihfX251bGwpLCBfTV9jKC0yKSB7IH0KCiAgICAgIGlzdHJlYW1i dWZfaXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVmKF9f cy5yZGJ1ZigpKSwgX01fYygtMikgeyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVh bWJ1Zl90eXBlKiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2MoLTIpIHsg fQoKCgoKICAgICAgY2hhcl90eXBlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsKCiAg ICAgICAgY2hhcl90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9zYnVmICYmIF9NX2MgIT0gc3Rh dGljX2Nhc3Q8aW50X3R5cGU+KC0yKSkKICAgICAgICAgIF9fcmV0ID0gX01fYzsKICAgICAgICBl bHNlIGlmIChfTV9zYnVmKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90 eXBlKF9NX3NidWYtPnNnZXRjKCkpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0gc3Rh dGljX2Nhc3Q8Y2hhcl90eXBlPih0cmFpdHNfdHlwZTo6ZW9mKCkpOwogICAgICAgIHJldHVybiBf X3JldDsKICAgICAgfQoKICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlJgogICAgICBvcGVyYXRv cisrKCkKICAgICAgewogICAgICAgIGlmIChfTV9zYnVmKQogICAgICAgICAgX01fc2J1Zi0+c2J1 bXBjKCk7CiAgICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoK ICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7 CiAgICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlIF9fb2xkID0gKnRoaXM7CiAgICAgICAgaWYg KF9NX3NidWYpCiAgICAgICAgICBfX29sZC5fTV9jID0gX01fc2J1Zi0+c2J1bXBjKCk7CiAgICAg ICAgX01fYyA9IC0yOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgYm9vbAog ICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVyX3R5cGUmIF9fYikKICAgICAgewogICAg ICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGJvb2wgX190 aGlzZW9mID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dldGMoKSA9PSBfX2VvZjsKICAgICAgICBi b29sIF9fYmVvZiA9ICFfX2IuX01fc2J1ZgogICAgICAgICAgICAgICAgICAgICAgfHwgX19iLl9N X3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAgcmV0dXJuIChfX3RoaXNlb2YgJiYgX19i ZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAgfQoKCgoKICAgICAgYm9vbAog ICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVyX3R5cGUmIF9fYikgY29uc3QKICAgICAg ewogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGJv b2wgX190aGlzZW9mID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dldGMoKSA9PSBfX2VvZjsKICAg ICAgICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1ZgogICAgICAgICAgICAgICAgICAgICAgfHwg X19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAgcmV0dXJuIChfX3RoaXNlb2Yg JiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAgfQoKICAgIH07Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBi b29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJh aXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFy VCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuIF9fYS5lcXVhbChfX2IpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBib29sCiAg ICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYg X19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1Ry YWl0cz4mIF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19iKTsgfQp9CiMgMzYgIi9ob21l NS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1 ZGUvZysrL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxl X2ZhY2V0cy5oIiAxIDMKIyA0MCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMK CiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu OC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY3RpbWUuaCIgMSAzCiMgMzcgIi9ob21lNS9rcmFr b3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr L2JpdHMvc3RkX2N0aW1lLmgiIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3RkZGVmLmgi IDEgMwojIDM4ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jdGltZS5oIiAyIDMKIyA0MCAiL2hvbWU1 L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk ZS9nKysvYml0cy9zdGRfY3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0 CiMgNDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2N0aW1lLmgiIDIgMwojIDUzICIvaG9tZTUva3Jh a293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2cr Ky9iaXRzL3N0ZF9jdGltZS5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tfdDsK ICB1c2luZyA6OnRpbWVfdDsKICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwogIHVzaW5n IDo6ZGlmZnRpbWU7CiAgdXNpbmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5nIDo6 YXNjdGltZTsKICB1c2luZyA6OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5nIDo6bG9j YWx0aW1lOwogIHVzaW5nIDo6c3RyZnRpbWU7Cn0KIyA0MiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9sb2Nh bGVfZmFjZXRzLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2lvcy5oIiAxIDMKIyA0 MyAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKCgoKCgpuYW1lc3BhY2Ug c3RkCnsKCgojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvY3R5cGVf YmFzZS5oIiAxIDMKIyAzOCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9j dHlwZV9iYXNlLmgiIDMKICBzdHJ1Y3QgY3R5cGVfYmFzZQogIHsKCiAgICB0eXBlZGVmIGludCog X190b190eXBlOwoKCgogICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgbWFzazsKICAgIHN0YXRpYyBj b25zdCBtYXNrIHVwcGVyID0gMHgwMDAwMDAwMTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGxvd2Vy ID0gMHgwMDAwMDAwMjsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFscGhhID0gMHgwMDAwNDAwMDsK ICAgIHN0YXRpYyBjb25zdCBtYXNrIGRpZ2l0ID0gMHgwMDAwMDAwNDsKICAgIHN0YXRpYyBjb25z dCBtYXNrIHhkaWdpdCA9IDB4MDAwMDAwODA7CiAgICBzdGF0aWMgY29uc3QgbWFzayBzcGFjZSA9 IDB4MDAwMDAwMDg7CiAgICBzdGF0aWMgY29uc3QgbWFzayBwcmludCA9IDB4MDAwMDgwMDA7CiAg ICBzdGF0aWMgY29uc3QgbWFzayBncmFwaCA9IDB4MDAwMDIwMDA7CiAgICBzdGF0aWMgY29uc3Qg bWFzayBjbnRybCA9IDB4MDAwMDAwMjA7CiAgICBzdGF0aWMgY29uc3QgbWFzayBwdW5jdCA9IDB4 MDAwMDAwMTA7CiAgICBzdGF0aWMgY29uc3QgbWFzayBhbG51bSA9ICgweDAwMDA0MDAwIHwgMHgw MDAwMDAwNCk7CiAgfTsKIyA1NCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIg MwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgX19jdHlwZV9hYnN0cmFj dF9iYXNlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjdHlwZV9iYXNlCiAgICB7CiAg ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICBib29sCiAg ICAgIGlzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5kb19pcyhfX20sIF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgaXMoY29u c3QgY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUgKl9faGksIG1hc2sgKl9fdmVjKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19pcyhfX2xvLCBfX2hpLCBfX3ZlYyk7IH0KCiAg ICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90 eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX3NjYW5faXMoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBl KgogICAgICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBj aGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3NjYW5fbm90KF9f bSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b3VwcGVyKGNoYXJfdHlw ZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19jKTsgfQoKICAg ICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b3VwcGVyKGNoYXJfdHlwZSAqX19sbywgY29uc3Qg Y2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9f bG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdG9sb3dlcihjaGFyX3R5cGUgX19j KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fYyk7IH0KCiAgICAgIGNv bnN0IGNoYXJfdHlwZSoKICAgICAgdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJf dHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dlcihfX2xvLCBf X2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHdpZGVuKGNoYXIgX19jKSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyKgogICAg ICB3aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9f dG8pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fbG8sIF9faGksIF9fdG8p OyB9CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0 KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19jLCBfX2RmYXVsdCk7IH0K CiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19s bywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNo YXIgKl9fdG8pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2xvLCBfX2hp LCBfX2RmYXVsdCwgX190byk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGV4cGxpY2l0CiAgICAg IF9fY3R5cGVfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCk6IGxvY2FsZTo6ZmFjZXQo X19yZWZzKSB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfl9fY3R5cGVfYWJzdHJhY3RfYmFzZSgp IHsgfQoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUg X19jKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f aXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAg ICAgIG1hc2sqIF9fdmVjKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlw ZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmly dHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBj aGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkg Y29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFy X3R5cGUpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk b190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9 IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSkg Y29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93 ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAg ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0ID0gMDsKCiAg ICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywg Y29uc3QgY2hhciogX19oaSwKICAgICAgICAgICAgICAgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0 ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFy IF9fZGZhdWx0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAg ICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hp LAogICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3QgPSAw OwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlIDog cHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6Cgog ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY3R5 cGU6Om1hc2sgbWFzazsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKHNpemVfdCBfX3JlZnMg PSAwKSA6IF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hhclQ+KF9fcmVmcykgeyB9CgogICAgICBz dGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+ Y3R5cGUoKSB7IH0KCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hh cl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgICAgIHZpcnR1YWwg Y29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0 IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9faGk7 IH0KCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sg X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QK ICAgICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAg ICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gX19o aTsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUg X19jKSBjb25zdAogICAgICB7IHJldHVybiBfX2M7IH0KCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh cl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBl KiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CgogICAgICB2aXJ0dWFsIGNoYXJf dHlwZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJu IF9fYzsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIo Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIg X19jKSBjb25zdAogICAgICB7IHJldHVybiBjaGFyX3R5cGUoKTsgfQoKICAgICAgdmlydHVhbCBj b25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBf X2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QKICAgICAgeyByZXR1cm4gX19oaTsgfQoKICAg ICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQp IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fZGZhdWx0OyB9CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo YXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hh cl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0 KSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGN0eXBlPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8 PgogICAgY2xhc3MgY3R5cGU8Y2hhcj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPGNo YXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwoKICAg IHByaXZhdGU6CgogICAgICBib29sIF9NX2RlbDsKICAgICAgX190b190eXBlIGNvbnN0JiBfTV90 b3VwcGVyOwogICAgICBfX3RvX3R5cGUgY29uc3QmIF9NX3RvbG93ZXI7CiAgICAgIGNvbnN0IG1h c2sqIGNvbnN0JiBfTV9jdGFibGU7CiAgICAgIGNvbnN0IG1hc2sqIF9NX3RhYmxlOwoKICAgIHB1 YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CiAgICAgIHN0YXRpYyBjb25zdCBzaXpl X3QgdGFibGVfc2l6ZSA9IDEgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigtMSk7CgogICAg ICBleHBsaWNpdAogICAgICBjdHlwZShjb25zdCBtYXNrKiBfX3RhYmxlID0gMCwgYm9vbCBfX2Rl bCA9IGZhbHNlLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgICBpbmxpbmUgYm9vbAogICAgICBp cyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAg ICAgIGlzKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIG1hc2sqIF9fdmVjKSBj b25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBzY2FuX2lzKG1hc2sgX19tLCBj b25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgICAgIGlubGluZSBj b25zdCBjaGFyKgogICAgICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhciogX19sbywgY29u c3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg IH5jdHlwZSgpOwoKICAgICAgY29uc3QgbWFzayoKICAgICAgdGFibGUoKSBjb25zdCB0aHJvdygp CiAgICAgIHsgcmV0dXJuIF9NX3RhYmxlOyB9CgogICAgICBjb25zdCBtYXNrKgogICAgICBjbGFz c2ljX3RhYmxlKCkgdGhyb3coKQogICAgICB7IHJldHVybiBfTV9jdGFibGU7IH0KCiAgICAgIHZp cnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBl KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAg IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25z dCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0 IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hp KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90 eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3Vw cGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAg IHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSog X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90 eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy KgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFy X3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93 KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo YXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hh cl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVz dCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjdHlwZTxjaGFyPiYKICAg IHVzZV9mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwojIDM5MiAiL2hv bWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5j bHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1z dW4tc29sYXJpczIuOC9iaXRzL2N0eXBlX2lubGluZS5oIiAxIDMKIyAzNyAiL2hvbWU1L2tyYWtv dy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysv c3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jdHlwZV9pbmxpbmUuaCIgMwogIGJvb2wKICBjdHlw ZTxjaGFyPjo6CiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdAogIHsgcmV0dXJuIF9NX3Rh YmxlW19fY10gJiBfX207IH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgaXMoY29u c3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCwgbWFzayogX192ZWMpIGNvbnN0CiAg ewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQogICAgICAqX192ZWMrKyA9IF9NX3RhYmxlWypf X2xvdysrXTsKICAgIHJldHVybiBfX2hpZ2g7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNo YXI+OjoKICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3QgY2hhciog X19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCAmJiAhKF9NX3RhYmxl WypfX2xvd10gJiBfX20pKQogICAgICArK19fbG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KCiAg Y29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNo YXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93 IDwgX19oaWdoCiAgICAgICAgICAgJiYgKF9NX3RhYmxlWypfX2xvd10gJiBfX20pICE9IDApCiAg ICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQojIDM5MyAiL2hvbWU1L2tyYWtvdy9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0 cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg Y2xhc3MgY3R5cGVfYnluYW1lIDogcHVibGljIGN0eXBlPF9DaGFyVD4KICAgIHsKICAgIHB1Ymxp YzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAg Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVj dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZV9ieW5hbWUoKSB7IH0KICAgIH07CgoKICB0 ZW1wbGF0ZTw+CiAgICBjdHlwZV9ieW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFy Kiwgc2l6ZV90IHJlZnMpOwoKCgojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvY29kZWN2dC5oIiAxIDMK IyA0MiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu OC8zLjAvaW5jbHVkZS9nKysvYml0cy9jb2RlY3Z0LmgiIDMKIyAxNzMgIi9ob21lNS9rcmFrb3cv bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2Jp dHMvY29kZWN2dC5oIiAzCiAgY2xhc3MgY29kZWN2dF9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVu dW0gcmVzdWx0CiAgICB7CiAgICAgIG9rLAogICAgICBwYXJ0aWFsLAogICAgICBlcnJvciwKICAg ICAgbm9jb252CiAgICB9OwogIH07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg dHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBfX2NvZGVjdnRf YWJzdHJhY3RfYmFzZQogICAgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGNvZGVjdnRf YmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3Vs dCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVk ZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBl OwoKCiAgICAgIHJlc3VsdAogICAgICBvdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50 ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5k LCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgZXh0ZXJuX3R5cGUq IF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgIGV4dGVybl90eXBlKiYgX190 b19uZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRl LCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIHJlc3VsdAog ICAgICB1bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLCBleHRl cm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Vuc2hpZnQoX19zdGF0ZSwgX190byxfX3Rv X2VuZCxfX3RvX25leHQpOyB9CgogICAgICByZXN1bHQKICAgICAgaW4oc3RhdGVfdHlwZSYgX19z dGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgY29uc3QgZXh0ZXJuX3R5 cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAg IGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgIGludGVy bl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRv X2luKF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAg ICBpbnQKICAgICAgZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMt PmRvX2VuY29kaW5nKCk7IH0KCiAgICAgIGJvb2wKICAgICAgYWx3YXlzX25vY29udigpIGNvbnN0 IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fYWx3YXlzX25vY29udigpOyB9CgogICAg ICBpbnQKICAgICAgbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVy bl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNp emVfdCBfX21heCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbGVuZ3RoKF9fc3RhdGUs IF9fZnJvbSwgX19lbmQsIF9fbWF4KTsgfQoKICAgICAgaW50CiAgICAgIG1heF9sZW5ndGgoKSBj b25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX21heF9sZW5ndGgoKTsgfQoKICAg IHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2Uo c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmly dHVhbAogICAgICB+X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwg cmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlw ZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNv bnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSog X190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBf X3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hp ZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAg ICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Qg PSAwOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0 ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5 cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAg ICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAg IGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAog ICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBib29s CiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1 YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5 cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6 ZV90IF9fbWF4KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVu Z3RoKCkgY29uc3QgdGhyb3coKSA9IDA7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J bnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNv ZGVjdnQKICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0 ZXJuVCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9i YXNlOjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwog ICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQg c3RhdGVfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0 CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3Ry YWN0X2Jhc2U8X0ludGVyblQsX0V4dGVyblQsX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAgcHJv dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CiAgICB9OwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0 ZVQ+CiAgICBsb2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPjo6 aWQ7CiMgNTk0ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2NvZGVjdnQuaCIgMwogIHRlbXBsYXRlPD4KICAg IGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PgogICAgOiBwdWJsaWMgX19jb2Rl Y3Z0X2Fic3RyYWN0X2Jhc2U8Y2hhciwgY2hhciwgbWJzdGF0ZV90PgogICAgewogICAgcHVibGlj OgoKICAgICAgdHlwZWRlZiBjaGFyIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgZXh0 ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgoKICAgICAgc3Rh dGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBf X3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQo KTsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRl LCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5 cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAg ICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAg ICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQK ICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywK ICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190 b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5 cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0 IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0 LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAog ICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFs IGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJv b2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFs IGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBl KiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVf dCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkg Y29uc3QgdGhyb3coKTsKICB9OwojIDcwMCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9jb2RlY3Z0LmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1l IF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZSA6IHB1YmxpYyBjb2RlY3Z0PF9JbnRl cm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQK ICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAg ICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPihfX3JlZnMpIHsgfQogICAg cHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0X2J5bmFtZSgpIHsgfQogICAg fTsKIyA0MTYgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgX051bWVyaWNf Z2V0OwoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9Gb3JtYXRf Y2FjaGUKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK ICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IHRyYWl0c190eXBlOwogICAgICB0eXBl ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwoKCiAgICAgIGZyaWVuZCBjbGFz cyBsb2NhbGU7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVy PgogICAgICAgIGZyaWVuZCBjbGFzcyBfTnVtZXJpY19nZXQ7CiAgICAgIGZyaWVuZCBjbGFzcyBu dW1fZ2V0PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyBudW1fcHV0PF9DaGFyVD47CiAgICAg IGZyaWVuZCBjbGFzcyB0aW1lX2dldDxfQ2hhclQ+OwogICAgICBmcmllbmQgY2xhc3MgbW9uZXlf Z2V0PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX3B1dDxfQ2hhclQ+OwogICAgICBm cmllbmQgY2xhc3MgbW9uZXlfcHV0PF9DaGFyVD47CgoKCgogICAgICBzdGF0aWMgaW50IF9TX3B3 b3JkX2l4OwoKCgogICAgICBib29sIF9NX3ZhbGlkOwoKCgogICAgICBzdGF0aWMgY29uc3QgY2hh ciBfU19saXRlcmFsc1tdOwoKCgoKICAgICAgZW51bQogICAgICB7CiAgICAgICAgX1NfbWludXMs CiAgICAgICAgX1NfcGx1cywKICAgICAgICBfU194LAogICAgICAgIF9TX1gsCiAgICAgICAgX1Nf ZGlnaXRzLAogICAgICAgIF9TX2RpZ2l0c19lbmQgPSBfU19kaWdpdHMgKyAxNiwKICAgICAgICBf U191ZGlnaXRzID0gX1NfZGlnaXRzX2VuZCwKICAgICAgICBfU191ZGlnaXRzX2VuZCA9IF9TX3Vk aWdpdHMgKyAxNiwKICAgICAgICBfU19lZSA9IF9TX2RpZ2l0cyArIDE0LAogICAgICAgIF9TX0Vl ID0gX1NfdWRpZ2l0cyArIDE0CiAgICAgIH07CgoKCgogICAgICBjaGFyX3R5cGUgX01fZGVjaW1h bF9wb2ludDsKCgoKCgogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsKCgoKICAgICAg c3RyaW5nX3R5cGUgX01fdHJ1ZW5hbWU7CiAgICAgIHN0cmluZ190eXBlIF9NX2ZhbHNlbmFtZTsK CgoKICAgICAgYm9vbCBfTV91c2VfZ3JvdXBpbmc7CgoKCiAgICAgIHN0cmluZyBfTV9ncm91cGlu ZzsKCiAgICAgIF9Gb3JtYXRfY2FjaGUoKTsKCiAgICAgIH5fRm9ybWF0X2NhY2hlKCkgdGhyb3co KSB7IH0KCgoKCiAgICAgIHN0YXRpYyBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qCiAgICAgIF9TX2dl dChpb3NfYmFzZSYgX19pb3MpOwoKICAgICAgdm9pZAogICAgICBfTV9wb3B1bGF0ZShpb3NfYmFz ZSYpOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY2FsbGJhY2soaW9zX2Jhc2U6OmV2ZW50 IF9fZXZlbnQsIGlvc19iYXNlJiBfX2lvcywgaW50IF9faXgpIHRocm93KCk7CiAgICB9OwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Ojpf U19wd29yZF9peDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY29uc3QgY2hhciBf Rm9ybWF0X2NhY2hlPF9DaGFyVD46OgogICAgX1NfbGl0ZXJhbHNbXSA9ICItK3hYMDEyMzQ1Njc4 OWFiY2RlZjAxMjM0NTY3ODlBQkNERUYiOwoKICAgdGVtcGxhdGU8PiBfRm9ybWF0X2NhY2hlPGNo YXI+OjpfRm9ybWF0X2NhY2hlKCk7CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgX051bWVyaWNfZ2V0CiAgICB7CiAgICBwdWJsaWM6 CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBp dGVyX3R5cGU7CgoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0 ZXJUPgogICAgICBmcmllbmQgY2xhc3MgbnVtX2dldDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgdGltZV9nZXQ7CiAg ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4KICAgICAgZnJp ZW5kIGNsYXNzIG1vbmV5X2dldDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVu YW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgbnVtX3B1dDsKICAgICAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgdGlt ZV9wdXQ7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4K ICAgICAgZnJpZW5kIGNsYXNzIG1vbmV5X3B1dDsKCiAgICBwcml2YXRlOgogICAgICBleHBsaWNp dAogICAgICBfTnVtZXJpY19nZXQoKSB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfl9OdW1lcmlj X2dldCgpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX2dldF9kaWdpdHMoaXRlcl90eXBl IF9faW4sIGl0ZXJfdHlwZSBfX2VuZCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBudW1fZ2V0IDogcHVibGljIGxv Y2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf dHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBjaGFy X3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBp ZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9j YWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5 cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19n ZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAg ICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc2hvcnQmIF9fdikgY29uc3QKICAg ICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAg ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgaW50JiBf X3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIs IF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVy X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm IF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2Vu ZCwgX19pbywgX19lcnIsIF9fdik7IH0KIyA2MDcgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2Zh Y2V0cy5oIiAzCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJf dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChf X2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBn ZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdAog ICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9Cgog ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQs IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNp Z25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwg X19pbywgX19lcnIsIF9fdik7IH0KIyA2MjkgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0 cy5oIiAzCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlw ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwg X19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBl IF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19n ZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAg ICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25z dAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9 CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19l bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2 b2lkKiYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8s IF9fZXJyLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIH5udW1fZ2V0KCkg eyB9CgoKCgoKICAgICAgdm9pZAogICAgICBfTV9leHRyYWN0KGl0ZXJfdHlwZSBfX2JlZywgaXRl cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIGNoYXIqIF9feHRyYywKICAgICAgICAgICAgICAgICBpbnQmIF9fYmFz ZSwgYm9vbCBfX2ZwID0gdHJ1ZSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg ICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3Rh dGUmLCBib29sJikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0 KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgc2hv cnQmKSBjb25zdDsKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlw ZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgaW50JikgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQgKGl0ZXJfdHlwZSwgaXRlcl90 eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgbG9uZyYpIGNvbnN0OwoKCgoKCiAg ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwg aW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICAgdW5zaWdu ZWQgc2hvcnQmKSBjb25zdDsKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0 ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmKSBjb25zdDsKICAgICAgdmlydHVhbCBpdGVyX3R5 cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsCiAgICAgICAg ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nJikgY29uc3Q7CgoK CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90 eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGZs b2F0JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90 eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAg ICAgICAgICAgZG91YmxlJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBk b19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwKICAgICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg aXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICB2b2lkKiYpIGNvbnN0OwogICAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9j YWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAg dm9pZAogICAgbnVtX2dldDxjaGFyLCBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ID46OgogICAg X01fZXh0cmFjdChpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+IF9fYmVnLAogICAgICAgICAgICAg ICBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBjaGFyKiBfX3h0cmMsCiAgICAgICAg ICAgICAgIGludCYgX19iYXNlLCBib29sIF9fZnApIGNvbnN0OwoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyBfTnVtZXJpY19wdXQKICAg IHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAg ICAgX051bWVyaWNfcHV0KCkgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fTnVtZXJpY19wdXQo KSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0 ZXI+CiAgICBjbGFzcyBudW1fcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1 YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0 SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxp Y2l0CiAgICAgIG51bV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3Jl ZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFz ZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4g ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBw dXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBf X3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9 CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2Ys IGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKICAg ICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KIyA3NzMgIi9ob21l NS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1 ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQo aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9f dikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0K CiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwg Y2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QKICAgICAg eyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlw ZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmls bCwKICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0 KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwK ICAgICAgfm51bV9wdXQoKSB7IH07CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19w dXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25z dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19i YXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0OwoKCgoKCgogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlw ZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0OwoKCgoKCgogICAgICB2aXJ0dWFsIGl0ZXJf dHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGws IGRvdWJsZSBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0 KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBfX3Yp IGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwg aW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBfX3YpIGNvbnN0OwogICAg fTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBs b2NhbGU6OmlkIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBudW1wdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAg ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5 cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9j YWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9wb2lu dDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIHN0cmluZyBfTV9ncm91 cGluZzsKICAgICAgc3RyaW5nX3R5cGUgX01fdHJ1ZW5hbWU7CiAgICAgIHN0cmluZ190eXBlIF9N X2ZhbHNlbmFtZTsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0KHNp emVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRp YWxpemVfbnVtcHVuY3QoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3QoX19jX2xv Y2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQog ICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jbG9jKTsgfQoKICAgICAgY2hhcl90eXBl CiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiBkb19kZWNpbWFsX3Bv aW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QKICAg ICAgeyByZXR1cm4gZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAgICAgZ3Jv dXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBkb19ncm91cGluZygpOyB9CgogICAgICBzdHJp bmdfdHlwZQogICAgICB0cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3RydWVuYW1l KCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIGZhbHNlbmFtZSgpIGNvbnN0CiAgICAgIHsg cmV0dXJuIGRvX2ZhbHNlbmFtZSgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAg ICAgIH5udW1wdW5jdCgpIHsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fZGVj aW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0KCiAg ICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdAogICAg ICB7IHJldHVybiBfTV90aG91c2FuZHNfc2VwOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZwogICAg ICBkb19ncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9CgogICAg ICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX3RydWVuYW1lKCkgY29uc3QKICAgICAgeyBy ZXR1cm4gX01fdHJ1ZW5hbWU7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9f ZmFsc2VuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZmFsc2VuYW1lOyB9CgoKICAgICAg dm9pZAogICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX19u dWxsKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQg bnVtcHVuY3Q8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHZv aWQKICAgIG51bXB1bmN0PF9DaGFyVD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2Fs ZSApCiAgICB7CgogICAgfQoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBudW1wdW5jdDxjaGFy Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgoKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0X2J5bmFtZSA6IHB1Ymxp YyBudW1wdW5jdDxfQ2hhclQ+CiAgICB7CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbnVt cHVuY3Q7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0 CiAgICAgIG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAw KQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1NfY3Jl YXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0LCBfX3MpOwogICAgICAgIF9NX2luaXRp YWxpemVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3QpOwogICAgICB9CgogICAgcHJvdGVj dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1wdW5jdF9ieW5hbWUoKQogICAgICB7IF9TX2Rl c3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QpOyB9CiAgICB9OwoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6OmZh Y2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0 aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90IF9f cmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaW50CiAgICAgIGNv bXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAg ICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19jb21wYXJlKF9fbG8xLCBfX2hpMSwgX19sbzIsIF9faGkyKTsg fQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywg Y29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190cmFuc2Zv cm0oX19sbywgX19oaSk7IH0KCiAgICAgIGxvbmcKICAgICAgaGFzaChjb25zdCBfQ2hhclQqIF9f bG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faGFz aChfX2xvLCBfX2hpKTsgfQoKICBwcm90ZWN0ZWQ6CiAgICAgIH5jb2xsYXRlKCkgeyB9CgogICAg ICB2aXJ0dWFsIGludAogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNvbnN0 IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29u c3QgX0NoYXJUKiBfX2hpMikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAg IGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29u c3Q7CgogICAgICB2aXJ0dWFsIGxvbmcKICAgICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8s IGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBsb2NhbGU6OmlkIGNvbGxhdGU8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+ CiAgICBpbnQKICAgIGNvbGxhdGU8Y2hhcj46OmRvX2NvbXBhcmUoY29uc3QgY2hhciogX19sbzEs IGNvbnN0IGNoYXIqIF9faGkxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyKiBfX2xvMiwgY29uc3QgY2hhciogX19oaTIpIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBz dHJpbmcKICAgIGNvbGxhdGU8Y2hhcj46OmRvX3RyYW5zZm9ybShjb25zdCBjaGFyKiBfX2xvLCBj b25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgbG9uZwogICAgY29sbGF0 ZTxjaGFyPjo6ZG9faGFzaChjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25z dDsKIyAxMDE0ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGVfYnluYW1lIDogcHVibGljIGNvbGxh dGU8X0NoYXJUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90 eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAg ICAgZXhwbGljaXQKICAgICAgY29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3Jl ZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxhdGVfYnlu YW1lKCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjb2xsYXRlX2J5bmFtZTxjaGFyPjo6 Y29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMpOwoKCgoKCiAgY2xhc3Mg dGltZV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gZGF0ZW9yZGVyIHsgbm9fb3JkZXIsIGRt eSwgbWR5LCB5bWQsIHlkbSB9OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQs IHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJU IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRp YyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXQoc2l6ZV90IF9f cmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSwgX01fZGF5bmFtZXMoMCks IF9NX21vbnRobmFtZXMoMCkgeyB9CgogICAgICBkYXRlb3JkZXIKICAgICAgZGF0ZV9vcmRlcigp IGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2RhdGVfb3JkZXIoKTsgfQoKICAgICAgaXRlcl90eXBl CiAgICAgIGdldF90aW1lKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2Um IF9fZiwKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBj b25zdAogICAgICB7IHJldHVybiBkb19nZXRfdGltZShfX3MsIF9fZW5kLCBfX2YsIF9fZXJyLCBf X3QpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X2RhdGUoaXRlcl90eXBlIF9fcywgaXRl cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z dGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldF9kYXRlKF9f cywgX19lbmQsIF9fZiwgX19lcnIsIF9fdCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRf d2Vla2RheShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2YsCiAg ICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QK ICAgICAgeyByZXR1cm4gZG9fZ2V0X3dlZWtkYXkoX19zLF9fZW5kLF9fZixfX2VycixfX3QpOyB9 CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19zLCBpdGVy X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXRfbW9u dGhuYW1lKF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg IGdldF95ZWFyKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwK ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdAog ICAgICB7IHJldHVybiBkb19nZXRfeWVhcihfX3MsX19lbmQsX19mLF9fZXJyLF9fdCk7IH0KCiAg ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0KCkKICAgICAgewogICAg ICAgIGRlbGV0ZSBbXSBfTV9tb250aG5hbWVzOwogICAgICAgIGRlbGV0ZSBbXSBfTV9kYXluYW1l czsKICAgICAgfQoKICAgICAgdmlydHVhbCBkYXRlb3JkZXIKICAgICAgZG9fZGF0ZV9vcmRlcigp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRpbWVfYmFzZTo6eW1kOyB9CgogICAgICB2aXJ0dWFsIGl0 ZXJfdHlwZQogICAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBpb3Nf YmFzZSYsCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNvbnN0 CiAgICAgIHsgcmV0dXJuIF9fczsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f Z2V0X2RhdGUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgaW9zX2Jhc2UmLAogICAgICAgICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSogKSBjb25zdAogICAgICB7IHJldHVybiBf X3M7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJf dHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0OwoKICAgICAgdmlydHVh bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5 cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z dGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAg ICAgZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgaW9zX2Jhc2UmLAogICAg ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmICwgdG0qICkgY29uc3QKICAgICAgeyBy ZXR1cm4gX19zOyB9CgogICAgICBtdXRhYmxlIGJhc2ljX3N0cmluZzxfQ2hhclQ+KiBfTV9kYXlu YW1lczsKICAgICAgbXV0YWJsZSBiYXNpY19zdHJpbmc8X0NoYXJUPiogX01fbW9udGhuYW1lczsK ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAg IGxvY2FsZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFt ZSA6IHB1YmxpYyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CiAg ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJf dHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfZ2V0X2J5bmFtZShjb25zdCBjaGFyKiwg c2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPihfX3Jl ZnMpIHsgfQogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldF9ieW5h bWUoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091 dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMg dGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw ZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxl OjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfcHV0KHNpemVfdCBfX3JlZnMgPSAw KSA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcykgeyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1 dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgLCBjaGFyX3R5cGUgLAogICAgICAgICAgY29uc3Qg dG0qICwgY29uc3QgX0NoYXJUKiAsCiAgICAgICAgICBjb25zdCBfQ2hhclQqICkgY29uc3QKICAg ICAgeyByZXR1cm4gX19zOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBf X3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICBjb25zdCB0bSog X190bWIsIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2RpZmllciA9IDApIGNvbnN0CiAgICAgIHsg cmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3RtYiwgX19mb3JtYXQsIF9fbW9kaWZp ZXIpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dCgpIHsg fQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlv c19iYXNlJiwgY2hhcl90eXBlLCBjb25zdCB0bSogLAogICAgICAgICAgICAgY2hhciAsIGNoYXIg KSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVfcHV0PF9DaGFy VCwgX091dEl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf T3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZSA6IHB1YmxpYyB0aW1lX3B1dDxfQ2hh clQsIF9PdXRJdGVyPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy X3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQK ICAgICAgdGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAg ICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPiAoX19yZWZzKSB7IH0KCiAgICBwcm90ZWN0 ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0X2J5bmFtZSgpIHsgfQogICAgfTsKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIG1v bmV5X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5 cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsK ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0 YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlfZ2V0KHNpemVf dCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlw ZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwK ICAgICAgICAgIGlvc19iYXNlJiBfX2YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBk b3VibGUmIF9fdW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX3MsIF9fZW5kLCBf X2ludGwsIF9fZiwgX19lcnIsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0 KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBf X2YsCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYgX19k aWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX3MsIF9fZW5kLCBfX2ludGwsIF9f ZiwgX19lcnIsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg ICB+bW9uZXlfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQo aXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgYm9vbCAsCiAgICAgICAgICAgICBpb3NfYmFzZSYg LCBpb3NfYmFzZTo6aW9zdGF0ZSYgLAogICAgICAgICAgICAgbG9uZyBkb3VibGUmICkgY29uc3QK ICAgICAgeyByZXR1cm4gX19zOyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19n ZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgYm9vbCAsCiAgICAgICAgICAgICBpb3NfYmFz ZSYgLCBpb3NfYmFzZTo6aW9zdGF0ZSYgLAogICAgICAgICAgICAgc3RyaW5nX3R5cGUmICkgY29u c3QKICAgICAgeyByZXR1cm4gX19zOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hhclQsIF9J bkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl cj4KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBw dWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0 SXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5n X3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg IG1vbmV5X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9 CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBp b3NfYmFzZSYgX19mLAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX191 bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19pbnRsLCBfX2YsIF9fZmls bCwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywg Ym9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICBjaGFyX3R5cGUgX19maWxsLCBj b25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChf X3MsIF9faW50bCwgX19mLCBfX2ZpbGwsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoKICAg ICAgdmlydHVhbAogICAgICB+bW9uZXlfcHV0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw ZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCwgaW9zX2Jhc2UmICwgY2hhcl90eXBl ICwKICAgICAgICAgICAgIGxvbmcgZG91YmxlICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9 CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9v bCwgaW9zX2Jhc2UmICwgY2hhcl90eXBlICwKICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBl JiApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfcHV0PF9D aGFyVCwgX091dEl0ZXI+OjppZDsKCiAgc3RydWN0IG1vbmV5X2Jhc2UKICB7CiAgICBlbnVtIHBh cnQgeyBub25lLCBzcGFjZSwgc3ltYm9sLCBzaWduLCB2YWx1ZSB9OwogICAgc3RydWN0IHBhdHRl cm4geyBjaGFyIGZpZWxkWzRdOyB9OwoKICAgIHN0YXRpYyBjb25zdCBwYXR0ZXJuIF9TX2RlZmF1 bHRfcGF0dGVybjsKCgoKICAgIHN0YXRpYyBwYXR0ZXJuCiAgICBfU19jb25zdHJ1Y3RfcGF0dGVy bihjaGFyIF9fcHJlY2VlZHMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pOwogIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNzIG1vbmV5cHVuY3Qg OiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1vbmV5X2Jhc2UKICAgIHsKICAgIHB1Ymxp YzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19z dHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGludGwg PSBfSW50bDsKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgcHJpdmF0ZToKICAgICAg Y2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNf c2VwOwogICAgICBzdHJpbmcgX01fZ3JvdXBpbmc7CiAgICAgIHN0cmluZ190eXBlIF9NX2N1cnJf c3ltYm9sOwogICAgICBzdHJpbmdfdHlwZSBfTV9wb3NpdGl2ZV9zaWduOwogICAgICBzdHJpbmdf dHlwZSBfTV9uZWdhdGl2ZV9zaWduOwogICAgICBpbnQgX01fZnJhY19kaWdpdHM7CiAgICAgIHBh dHRlcm4gX01fcG9zX2Zvcm1hdDsKICAgICAgcGF0dGVybiBfTV9uZWdfZm9ybWF0OwoKICAgIHB1 YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChzaXplX3QgX19yZWZzID0gMCkg OiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVuY3Qo KTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYywg c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5p dGlhbGl6ZV9tb25leXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBkZWNp bWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGVjaW1hbF9wb2ludCgp OyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsgfQoKICAgICAgc3RyaW5nCiAgICAgIGdy b3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ3JvdXBpbmcoKTsgfQoKICAg ICAgc3RyaW5nX3R5cGUKICAgICAgY3Vycl9zeW1ib2woKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb19jdXJyX3N5bWJvbCgpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBwb3NpdGl2 ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zaXRpdmVfc2lnbigpOyB9 CgogICAgICBzdHJpbmdfdHlwZQogICAgICBuZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fbmVnYXRpdmVfc2lnbigpOyB9CgogICAgICBpbnQKICAgICAgZnJhY19k aWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19mcmFjX2RpZ2l0cygpOyB9Cgog ICAgICBwYXR0ZXJuCiAgICAgIHBvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5kb19wb3NfZm9ybWF0KCk7IH0KCiAgICAgIHBhdHRlcm4KICAgICAgbmVnX2Zvcm1hdCgpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ19mb3JtYXQoKTsgfQoKICAgIHByb3RlY3Rl ZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5jdCgpIHsgfQoKICAgICAgdmlydHVhbCBj aGFyX3R5cGUKICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9N X2RlY2ltYWxfcG9pbnQ7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rob3Vz YW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aG91c2FuZHNfc2VwOyB9CgogICAg ICB2aXJ0dWFsIHN0cmluZwogICAgICBkb19ncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJu IF9NX2dyb3VwaW5nOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2N1cnJf c3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3Vycl9zeW1ib2w7IH0KCiAgICAgIHZp cnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fcG9zaXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsg cmV0dXJuIF9NX3Bvc2l0aXZlX3NpZ247IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAg ICAgZG9fbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25lZ2F0aXZlX3Np Z247IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2ZyYWNfZGlnaXRzKCkgY29uc3QKICAg ICAgeyByZXR1cm4gX01fZnJhY19kaWdpdHM7IH0KCiAgICAgIHZpcnR1YWwgcGF0dGVybgogICAg ICBkb19wb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fcG9zX2Zvcm1hdDsgfQoK ICAgICAgdmlydHVhbCBwYXR0ZXJuCiAgICAgIGRvX25lZ19mb3JtYXQoKSBjb25zdAogICAgICB7 IHJldHVybiBfTV9uZWdfZm9ybWF0OyB9CgoKICAgICAgdm9pZAogICAgICBfTV9pbml0aWFsaXpl X21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOwogICAgfTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgbG9jYWxlOjppZCBtb25leXB1bmN0 PF9DaGFyVCwgX0ludGw+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9J bnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjppbnRsOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICB2b2lkCiAgICBtb25leXB1 bmN0PF9DaGFyVCwgX0ludGw+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSAp CiAgICB7CgogICAgfQoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNoYXI+ OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNzIG1vbmV5cHVuY3Rf YnluYW1lIDogcHVibGljIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4KICAgIHsKICAgICAgX19j X2xvY2FsZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0OwogICAgcHVibGljOgogICAgICB0eXBlZGVm IF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3Ry aW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7CgogICAgICBl eHBsaWNpdAogICAgICBtb25leXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBf X3JlZnMgPSAwKQogICAgICA6IG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4oX19yZWZzKQogICAg ICB7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QsIF9f cyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9NX2NfbG9jYWxlX21vbmV5cHVu Y3QpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1 bmN0X2J5bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25l eXB1bmN0KTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRs PgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5bmFtZTxfQ2hhclQsIF9JbnRsPjo6aW50bDsK CgogIHN0cnVjdCBtZXNzYWdlc19iYXNlCiAgewogICAgdHlwZWRlZiBpbnQgY2F0YWxvZzsKICB9 OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlcyA6IHB1Ymxp YyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbWVzc2FnZXNfYmFzZQogICAgewogICAgcHVibGljOgog ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5n PF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAg IGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFj ZXQoX19yZWZzKSB7IH0KCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJp bmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYykgY29uc3QKICAgICAgeyByZXR1cm4g ZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgZ2V0KGNhdGFs b2cgX19jLCBpbnQgX19zZXQsIGludCBfX21zZ2lkLCBjb25zdCBzdHJpbmdfdHlwZSYgX19zKSBj b25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19jLF9fc2V0LF9fbXNnaWQsX19zKTsgfQoKICAg ICAgdm9pZAogICAgICBjbG9zZShjYXRhbG9nIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gZG9f Y2xvc2UoX19jKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bWVzc2Fn ZXMoKSB7IH0KCgoKICAgICAgdmlydHVhbCBjYXRhbG9nCiAgICAgIGRvX29wZW4oY29uc3QgYmFz aWNfc3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJikgY29uc3QKICAgICAgeyByZXR1cm4gMDsg fQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19nZXQoY2F0YWxvZywgaW50LCBp bnQgLCBjb25zdCBzdHJpbmdfdHlwZSYgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9f ZGZhdWx0OyB9CgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgZG9fY2xvc2UoY2F0YWxvZykgY29u c3QgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6Omlk IG1lc3NhZ2VzPF9DaGFyVD46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBj bGFzcyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2FnZXM8X0NoYXJUPgogICAgewogICAg cHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz aWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBtZXNz YWdlc19ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0 ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1lc3NhZ2VzX2J5bmFtZSgpIHsgfQogICAgfTsKCiAg dGVtcGxhdGU8PgogICAgbWVzc2FnZXNfYnluYW1lPGNoYXI+OjptZXNzYWdlc19ieW5hbWUoY29u c3QgY2hhciosIHNpemVfdCBfX3JlZnMpOwojIDE1MzIgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxl X2ZhY2V0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK ICAgIGlzc3BhY2UoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJu IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBf X2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp c3ByaW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2Vf ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwcmludCwgX19jKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRy bChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0 PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Y250cmwsIF9fYyk7IH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0No YXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlw ZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVwcGVyLCBfX2MpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sIGlzbG93ZXIoX0NoYXJUIF9fYywg Y29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCBfX2MsIGNvbnN0 IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f bG9jKS5pcyhjdHlwZV9iYXNlOjphbHBoYSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2Nh bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku aXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBf X2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0 eXBlX2Jhc2U6OnB1bmN0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j KQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVf YmFzZTo6eGRpZ2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu bGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg ICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNl OjphbG51bSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg Ym9vbAogICAgaXNncmFwaChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Z3Jh cGgsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFy VAogICAgdG91cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1 cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91cHBlcihfX2MpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0No YXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlw ZTxfQ2hhclQ+ID4oX19sb2MpLnRvbG93ZXIoX19jKTsgfQp9CiMgMzcgIi9ob21lNS9rcmFrb3cv bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2Jp dHMvYmFzaWNfaW9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBp b3NfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9U cmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVf dHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4g X19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVh bWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0 b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1f Z2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKICAgIHByaXZh dGU6CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX01fdGllOwogICAgICBj aGFyX3R5cGUgX01fZmlsbDsKICAgICAgaW9zdGF0ZSBfTV9leGNlcHRpb247CgogICAgcHJvdGVj dGVkOgogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX01fc3RyZWFtYnVm OwogICAgICBpb3N0YXRlIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsKCgogICAgICBjb25zdCBfX2N0eXBl X3R5cGUqIF9NX2lvc19mY3R5cGU7CgogICAgICBjb25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVt cHV0OwoKICAgICAgY29uc3QgX19udW1nZXRfdHlwZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6 CiAgICAgIGlubGluZSBjb25zdCBfX2N0eXBlX3R5cGUqCiAgICAgIF9NX2dldF9mY3R5cGVfaW9z KHZvaWQpCiAgICAgIHsgcmV0dXJuIF9NX2lvc19mY3R5cGU7IH0KCiAgICAgIG9wZXJhdG9yIHZv aWQqKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNvbnN0X2Nhc3Q8 YmFzaWNfaW9zKj4odGhpcyk7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIG9wZXJhdG9yISgp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZhaWwoKTsgfQoKICAgICAgaW5saW5lIGlvc3Rh dGUKICAgICAgcmRzdGF0ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1Zl9zdGF0 ZTsgfQoKICAgICAgaW5saW5lIHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29v ZGJpdCkKICAgICAgewogICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpKQogICAgICAgICAgX01fc3Ry ZWFtYnVmX3N0YXRlID0gX19zdGF0ZTsKICAgICAgICBlbHNlCiAgICAgICAgICBfTV9zdHJlYW1i dWZfc3RhdGUgPSBfX3N0YXRlIHwgYmFkYml0OwogICAgICAgIGlmICgodGhpcy0+cmRzdGF0ZSgp ICYgdGhpcy0+ZXhjZXB0aW9ucygpKSkKICAgICAgICAgIF9fdGhyb3dfaW9zX2ZhaWx1cmUoImJh c2ljX2lvczo6Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgICB9CgogICAg ICBpbmxpbmUgdm9pZAogICAgICBzZXRzdGF0ZShpb3N0YXRlIF9fc3RhdGUpCiAgICAgIHsgdGhp cy0+Y2xlYXIodGhpcy0+cmRzdGF0ZSgpIHwgX19zdGF0ZSk7IH0KCiAgICAgIGlubGluZSBib29s CiAgICAgIGdvb2QoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0gMDsg fQoKICAgICAgaW5saW5lIGJvb2wKICAgICAgZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRo aXMtPnJkc3RhdGUoKSAmIGVvZmJpdCkgIT0gMDsgfQoKICAgICAgaW5saW5lIGJvb2wKICAgICAg ZmFpbCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiAoYmFkYml0IHwg ZmFpbGJpdCkpICE9IDA7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIGJhZCgpIGNvbnN0CiAg ICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBiYWRiaXQpICE9IDA7IH0KCiAgICAgIGlu bGluZSBpb3N0YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9l eGNlcHRpb247IH0KCiAgICAgIGlubGluZSB2b2lkCiAgICAgIGV4Y2VwdGlvbnMoaW9zdGF0ZSBf X2V4Y2VwdCkKICAgICAgewogICAgICAgIF9NX2V4Y2VwdGlvbiA9IF9fZXhjZXB0OwogICAgICAg IHRoaXMtPmNsZWFyKF9NX3N0cmVhbWJ1Zl9zdGF0ZSk7CiAgICAgIH0KCgogICAgICBleHBsaWNp dAogICAgICBiYXNpY19pb3MoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2Ip IDogaW9zX2Jhc2UoKQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwK ICAgICAgfmJhc2ljX2lvcygpIHsgfQoKCiAgICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4qCiAgICAgIHRpZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RpZTsgfQoK ICAgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9N X3RpZSA9IF9fdGllc3RyOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgaW5s aW5lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICByZGJ1ZigpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1ZjsgfQoKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9D aGFyVCwgX1RyYWl0cz4qCiAgICAgIHJkYnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp dHM+KiBfX3NiKTsKCiAgICAgIGJhc2ljX2lvcyYKICAgICAgY29weWZtdChjb25zdCBiYXNpY19p b3MmIF9fcmhzKTsKCiAgICAgIGlubGluZSBjaGFyX3R5cGUKICAgICAgZmlsbCgpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIF9NX2ZpbGw7IH0KCiAgICAgIGlubGluZSBjaGFyX3R5cGUKICAgICAgZmls bChjaGFyX3R5cGUgX19jaCkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IF9NX2Zp bGw7CiAgICAgICAgX01fZmlsbCA9IF9fY2g7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9 CgoKICAgICAgbG9jYWxlCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAgICAg Y2hhcgogICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3Q7Cgog ICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0OwoKICAgIHByb3RlY3Rl ZDoKCiAgICAgIGJhc2ljX2lvcygpIDogaW9zX2Jhc2UoKQogICAgICB7IH0KCiAgICAgIHZvaWQK ICAgICAgaW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7CgogICAg ICBib29sCiAgICAgIF9NX2NoZWNrX2ZhY2V0KGNvbnN0IGxvY2FsZTo6ZmFjZXQqIF9fZikKICAg ICAgewogICAgICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKICAgICAgICBpZiAoX19mKQogICAgICAg ICAgX19yZXQgPSB0cnVlOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fdGhyb3dfYmFkX2Nhc3Qo KTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fY2Fj aGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpOwogICAgfTsKfQoKCgojIDEgIi9ob21lNS9r cmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUv ZysrL2JpdHMvYmFzaWNfaW9zLnRjYyIgMSAzCiMgMzMgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvYmFzaWNf aW9zLnRjYyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAg IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJU LCBfVHJhaXRzPiogX19zYikKICAgIHsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry YWl0cz4qIF9fb2xkID0gX01fc3RyZWFtYnVmOwogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwog ICAgICB0aGlzLT5jbGVhcigpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQs IF9UcmFpdHM+JgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3Qg YmFzaWNfaW9zJiBfX3JocykKICAgIHsKCgoKCiAgICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jo cy5fTV93b3JkX2xpbWl0IDw9IF9TX2xvY2FsX3dvcmRzKSA/CiAgICAgICAgX01fd29yZF9hcnJh eSA6IG5ldyBfV29yZHNbX19yaHMuX01fd29yZF9saW1pdF07CiMgNjMgIi9ob21lNS9rcmFrb3cv bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2Jp dHMvYmFzaWNfaW9zLnRjYyIgMwogICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYiA9IF9fcmhzLl9N X2NhbGxiYWNrczsKICAgICAgaWYgKF9fY2IpCiAgICAgICAgX19jYi0+X01fYWRkX3JlZmVyZW5j ZSgpOwogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhlcmFzZV9ldmVudCk7CiAgICAgIGlmIChfTV93 b3JkcyAhPSBfTV93b3JkX2FycmF5KQogICAgICAgIGRlbGV0ZSBbXSBfTV93b3JkczsKICAgICAg X01fZGlzcG9zZV9jYWxsYmFja3MoKTsKCiAgICAgIF9NX2NhbGxiYWNrcyA9IF9fY2I7CiAgICAg IGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcmhzLl9NX3dvcmRfbGltaXQ7ICsrX19pKQogICAg ICAgIF9fd29yZHNbX19pXSA9IF9fcmhzLl9NX3dvcmRzW19faV07CiAgICAgIGlmIChfTV93b3Jk cyAhPSBfTV93b3JkX2FycmF5KQogICAgICAgIGRlbGV0ZSBbXSBfTV93b3JkczsKICAgICAgX01f d29yZHMgPSBfX3dvcmRzOwogICAgICBfTV93b3JkX2xpbWl0ID0gX19yaHMuX01fd29yZF9saW1p dDsKCiAgICAgIHRoaXMtPmZsYWdzKF9fcmhzLmZsYWdzKCkpOwogICAgICB0aGlzLT53aWR0aChf X3Jocy53aWR0aCgpKTsKICAgICAgdGhpcy0+cHJlY2lzaW9uKF9fcmhzLnByZWNpc2lvbigpKTsK ICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgpKTsKICAgICAgdGhpcy0+ZmlsbChfX3Jocy5maWxs KCkpOwoKICAgICAgdGhpcy0+ZXhjZXB0aW9ucyhfX3Jocy5leGNlcHRpb25zKCkpOwoKICAgICAg X01fY2FsbF9jYWxsYmFja3MoY29weWZtdF9ldmVudCk7CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2hh cgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Om5hcnJvdyhjaGFyX3R5cGUgX19jLCBj aGFyIF9fZGZhdWx0KSBjb25zdAogICAgeyByZXR1cm4gX01faW9zX2ZjdHlwZS0+bmFycm93KF9f YywgX19kZmF1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIF9DaGFyVAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OndpZGVuKGNo YXIgX19jKSBjb25zdAogICAgeyByZXR1cm4gX01faW9zX2ZjdHlwZS0+d2lkZW4oX19jKTsgfQoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgbG9jYWxl CiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW1idWUoY29uc3QgbG9jYWxlJiBfX2xv YykKICAgIHsKICAgICAgbG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsKICAgICAgaW9zX2Jh c2U6OmltYnVlKF9fbG9jKTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9fbG9jKTsKICAgICAgaWYg KHRoaXMtPnJkYnVmKCkgIT0gMCkKICAgICAgICB0aGlzLT5yZGJ1ZigpLT5wdWJpbWJ1ZShfX2xv Yyk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0 cz46OmluaXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICB7Cgog ICAgICBpb3NfYmFzZTo6X01faW5pdCgpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9zX2xv Y2FsZSk7CiAgICAgIF9NX3RpZSA9IDA7CiAgICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRlbignICcp OwogICAgICBfTV9leGNlcHRpb24gPSBnb29kYml0OwogICAgICBfTV9zdHJlYW1idWYgPSBfX3Ni OwogICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3NiID8gZ29vZGJpdCA6IGJhZGJpdDsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9p ZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Ol9NX2NhY2hlX2ZhY2V0cyhjb25zdCBs b2NhbGUmIF9fbG9jKQogICAgewogICAgICBpZiAoaGFzX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19s b2MpKQogICAgICAgIF9NX2lvc19mY3R5cGUgPSAmdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19s b2MpOwoKICAgICAgaWYgKGhhc19mYWNldDxfX251bXB1dF90eXBlPihfX2xvYykpCiAgICAgICAg X01fZm51bXB1dCA9ICZ1c2VfZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpOwogICAgICBpZiAo aGFzX2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVtZ2V0ID0gJnVz ZV9mYWNldDxfX251bWdldF90eXBlPihfX2xvYyk7CiAgICB9Cn0KIyAyMTQgIi9ob21lNS9rcmFr b3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr L2JpdHMvYmFzaWNfaW9zLmgiIDIgMwojIDQ3ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9pb3MuaCIg MiAzCiMgNDAgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX29zdHJlYW0uaCIgMiAzCgpuYW1lc3BhY2Ug c3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg Y2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9U cmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9U cmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJU LCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hh clQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRl cmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBu dW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5 cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAg YmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7IHRoaXMtPmluaXQo X19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX29zdHJlYW0oKSB7IH0KCgogICAg ICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoKCiAgICAgIF9fb3N0 cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0 cmVhbV90eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19p b3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg ICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikgKGlvc19iYXNlJikpOwoKCiAgICAgIF9f b3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVh bV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0 cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGJvb2wgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90 eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikKICAgICAgewogICAgICAgIGlvc19iYXNl OjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwog ICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4 KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQg bG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNp Z25lZCBzaG9ydD4oX19uKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiB0aGlzLT5v cGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAgICB9CgogICAgICBfX29zdHJl YW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBfX24pCiAgICAgIHsgcmV0 dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0K CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGludCBfX24pCiAgICAgIHsK ICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jh c2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10 ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRp Y19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAg cmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0K CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBfX24p CiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u Zz4oX19uKSk7IH0KIyAxMzUgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX29zdHJlYW0uaCIgMwogICAg ICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChkb3VibGUgX19mKTsKCiAgICAgIF9f b3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGZsb2F0IF9fZikKICAgICAgeyByZXR1cm4g dGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxkb3VibGU+KF9fZikpOyB9CgogICAgICBfX29z dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX2YpOwoKICAgICAgX19v c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoY29uc3Qgdm9pZCogX19wKTsKCiAgICAgIF9f b3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpOwoK CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBwdXQoY2hhcl90eXBlIF9fYyk7CgogICAgICBf X29zdHJlYW1fdHlwZSYKICAgICAgd3JpdGUoY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNp emUgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBmbHVzaCgpOwoKCiAgICAgIHBv c190eXBlCiAgICAgIHRlbGxwKCk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3Ao cG9zX3R5cGUpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtwKG9mZl90eXBlLCBp b3NfYmFzZTo6c2Vla2Rpcik7CgogICAgcHJpdmF0ZToKCgogICAgICBfX29zdHJlYW1fdHlwZSYK ICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fb3N0cmVhbV90eXBlJik7CgogICAgICBiYXNpY19vc3Ry ZWFtKGNvbnN0IF9fb3N0cmVhbV90eXBlJik7CgogICAgfTsKCgogIHRlbXBsYXRlIDx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OnNlbnRyeQogICAgewoKICAgICAgYm9vbCBfTV9vazsKICAgICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9NX29zOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGlj aXQKICAgICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zKTsKCiAg ICAgIH5zZW50cnkoKQogICAgICB7CgogICAgICAgIGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jh c2U6OnVuaXRidWYgJiYgIXVuY2F1Z2h0X2V4Y2VwdGlvbigpKQogICAgICAgICAgewoKICAgICAg ICAgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01fb3MucmRidWYoKS0+cHVic3luYygpID09IC0x KQogICAgICAgICAgICAgIF9NX29zLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg ICAgfQogICAgICB9CgogICAgICBvcGVyYXRvciBib29sKCkKICAgICAgeyByZXR1cm4gX01fb2s7 IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYyk7CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgX19vdXQud2lkZW4o X19jKSk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxj aGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz PiYgX19vdXQsIGNoYXIgX19jKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNp Y19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNo YXIsIF9UcmFpdHM+JiBfX291dCwgc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0 IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+ CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19v c3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgdW5zaWduZWQgY2hhciBfX2MpCiAgICB7IHJl dHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m IF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAmCiAg ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0 IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh bTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJh aXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRz PgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHNpZ25lZCBjaGFyKiBfX3MpCiAg ICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7 IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry YWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291 dCwgY29uc3QgdW5zaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50 ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBlbmRsKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsg cmV0dXJuIGZsdXNoKF9fb3MucHV0KF9fb3Mud2lkZW4oJ1xuJykpKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBlbmRzKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19v cykKICAgIHsgcmV0dXJuIF9fb3MucHV0KF9DaGFyVCgpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBmbHVzaChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAg ICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0KCn0KCgoKCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9v c3RyZWFtLnRjYyIgMSAzCiMgMzIgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvb3N0cmVhbS50Y2MiIDMKIyAx ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu MC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzCiMgMzggIi9ob21lNS9rcmFrb3cv bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2Jp dHMvc3RkX2xvY2FsZS5oIiAzCgojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlZndkLmgiIDEg MwojIDQwICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9sb2NhbGUuaCIgMiAzCiMgMSAiL2hvbWU1L2ty YWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9n KysvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDEgMwojIDQxICIvaG9tZTUva3Jha293L2xvY2FsL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9s b2NhbGUuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMSAz CiMgMzUgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKIyAxICIvaG9tZTUv a3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl L2crKy9iaXRzL3N0ZF9jZXJybm8uaCIgMSAzCiMgMzggIi9ob21lNS9rcmFrb3cvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2Nl cnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEgMyA0CiMgMTcgIi91c3IvaW5j bHVkZS9lcnJuby5oIiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWVycm5vLmgJMS4xNgk5OS8wNy8y NiBTTUkiCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2Vycm5vLmgiIDEgMyA0CiMgMTEgIi91 c3IvaW5jbHVkZS9zeXMvZXJybm8uaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIyllcnJuby5oCTEu MjAJMDAvMDIvMTQgU01JIgojIDM1ICIvdXNyL2luY2x1ZGUvc3lzL2Vycm5vLmgiIDMgNApleHRl cm4gIkMiIHsKIyAxOTIgIi91c3IvaW5jbHVkZS9zeXMvZXJybm8uaCIgMyA0Cn0KIyAyNCAiL3Vz ci9pbmNsdWRlL2Vycm5vLmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CiMgMzggIi91c3IvaW5jbHVk ZS9lcnJuby5oIiAzIDQKZXh0ZXJuIGludCAqX19fZXJybm8oKTsKIyA0OSAiL3Vzci9pbmNsdWRl L2Vycm5vLmgiIDMgNAp9CiMgMzkgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NlcnJuby5oIiAyIDMK IyAzNiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu OC8zLjAvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL2hvbWU1 L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk ZS9nKysvYml0cy9zdGRfY2xvY2FsZS5oIiAxIDMKIyAzOCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRf Y2xvY2FsZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAxIDMgNAojIDkgIi91c3Iv aW5jbHVkZS9sb2NhbGUuaCIgMyA0CiNwcmFnbWEgaWRlbnQgIkAoIylsb2NhbGUuaAkxLjE5CTk5 LzA4LzEwIFNNSSIKIyA0NiAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKIyAxICIvdXNyL2lu Y2x1ZGUvaXNvL2xvY2FsZV9pc28uaCIgMSAzIDQKIyA0NSAiL3Vzci9pbmNsdWRlL2lzby9sb2Nh bGVfaXNvLmgiIDMgNAojcHJhZ21hIGlkZW50ICJAKCMpbG9jYWxlX2lzby5oCTEuMQk5OS8wOC8w OSBTTUkiCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZV90ZXN0cy5oIiAxIDMgNAojIDQ4 ICIvdXNyL2luY2x1ZGUvaXNvL2xvY2FsZV9pc28uaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsKCgoK CgoKc3RydWN0IGxjb252IHsKICAgICAgICBjaGFyICpkZWNpbWFsX3BvaW50OwogICAgICAgIGNo YXIgKnRob3VzYW5kc19zZXA7CiAgICAgICAgY2hhciAqZ3JvdXBpbmc7CiAgICAgICAgY2hhciAq aW50X2N1cnJfc3ltYm9sOwogICAgICAgIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsKICAgICAgICBj aGFyICptb25fZGVjaW1hbF9wb2ludDsKICAgICAgICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsK ICAgICAgICBjaGFyICptb25fZ3JvdXBpbmc7CiAgICAgICAgY2hhciAqcG9zaXRpdmVfc2lnbjsK ICAgICAgICBjaGFyICpuZWdhdGl2ZV9zaWduOwogICAgICAgIGNoYXIgaW50X2ZyYWNfZGlnaXRz OwogICAgICAgIGNoYXIgZnJhY19kaWdpdHM7CiAgICAgICAgY2hhciBwX2NzX3ByZWNlZGVzOwog ICAgICAgIGNoYXIgcF9zZXBfYnlfc3BhY2U7CiAgICAgICAgY2hhciBuX2NzX3ByZWNlZGVzOwog ICAgICAgIGNoYXIgbl9zZXBfYnlfc3BhY2U7CiAgICAgICAgY2hhciBwX3NpZ25fcG9zbjsKICAg ICAgICBjaGFyIG5fc2lnbl9wb3NuOwp9OwojIDk1ICIvdXNyL2luY2x1ZGUvaXNvL2xvY2FsZV9p c28uaCIgMyA0CmV4dGVybiBjaGFyICpzZXRsb2NhbGUoaW50LCBjb25zdCBjaGFyICopOwpleHRl cm4gc3RydWN0IGxjb252ICpsb2NhbGVjb252KHZvaWQpOwojIDEwNyAiL3Vzci9pbmNsdWRlL2lz by9sb2NhbGVfaXNvLmgiIDMgNAp9CiMgNDcgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzIDQK CgoKCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8zLjAvaW5jbHVkZS9saWJpbnRsLmgiIDEgMyA0CiMgMjAgIi9ob21lNS9rcmFrb3cvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvbGliaW50bC5o IiAzIDQKI3ByYWdtYSBpZGVudCAiQCgjKWxpYmludGwuaAkxLjEyCTk3LzA4LzIwIFNNSSIKCiMg MSAiL3Vzci9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNAojIDIzICIvaG9tZTUva3Jha293 L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2xpYmlu dGwuaCIgMiAzIDQKCgpleHRlcm4gIkMiIHsKIyA0NCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9saWJpbnRsLmgiIDMgNApl eHRlcm4gY2hhciAqZGNnZXR0ZXh0KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBp bnQpOwpleHRlcm4gY2hhciAqZGdldHRleHQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpl eHRlcm4gY2hhciAqZ2V0dGV4dChjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqdGV4dGRvbWFp bihjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqYmluZHRleHRkb21haW4oY29uc3QgY2hhciAq LCBjb25zdCBjaGFyICopOwoKCgpleHRlcm4gaW50IHdkaW5pdCh2b2lkKTsKZXh0ZXJuIGludCB3 ZGNoa2luZCh3Y2hhcl90KTsKZXh0ZXJuIGludCB3ZGJpbmRmKHdjaGFyX3QsIHdjaGFyX3QsIGlu dCk7CmV4dGVybiB3Y2hhcl90ICp3ZGRlbGltKHdjaGFyX3QsIHdjaGFyX3QsIGludCk7CmV4dGVy biB3Y2hhcl90IG1jZmlsbGVyKHZvaWQpOwpleHRlcm4gaW50IG1jd3JhcCh2b2lkKTsKIyA3OCAi L2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv aW5jbHVkZS9saWJpbnRsLmgiIDMgNAp9CiMgNTIgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAz IDQKIyA2NSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKZXh0ZXJuICJDIiB7CiMgNzUgIi91 c3IvaW5jbHVkZS9sb2NhbGUuaCIgMyA0Cn0KIyAzOSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfY2xv Y2FsZS5oIiAyIDMKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Omxjb252OwogIHVzaW5n IDo6c2V0bG9jYWxlOwogIHVzaW5nIDo6bG9jYWxlY29udjsKfQojIDM3ICIvaG9tZTUva3Jha293 L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9i aXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jc3Rk bGliLmgiIDEgMwojIDM4ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMK IyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzMuMC9pbmNsdWRlL2crKy9zcGFyYy1zdW4tc29sYXJpczIuOC9iaXRzL3N0ZF9saW1pdHMuaCIg MSAzCiMgNDUgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvc3RkX2xpbWl0 cy5oIiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvc3BhcmMtc3VuLXNvbGFyaXMyLjgvYml0cy9jKytjb25m aWcuaCIgMSAzCiMgNDYgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvc3Rk X2xpbWl0cy5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jZmxvYXQuaCIgMSAzCiMg MzggIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv My4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NmbG9hdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Zs b2F0LmgiIDEgMyA0CiMgMTYgIi91c3IvaW5jbHVkZS9mbG9hdC5oIiAzIDQKI3ByYWdtYSBpZGVu dCAiQCgjKWZsb2F0LmgJMS4xOAk5OS8wNS8wNCBTTUkiCgoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0 ZXJuIGludCBfX2ZsdF9yb3VuZHModm9pZCk7CiMgOTcgIi91c3IvaW5jbHVkZS9mbG9hdC5oIiAz IDQKfQojIDM5ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9jZmxvYXQuaCIgMiAzCiMgNDcgIi9ob21l NS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1 ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvc3RkX2xpbWl0cy5oIiAyIDMKCm5hbWVz cGFjZSBzdGQgewoKICAgIGVudW0gZmxvYXRfcm91bmRfc3R5bGUgewogICAgICAgIHJvdW5kX2lu ZGV0ZXJtaW5hdGUgPSAtMSwKICAgICAgICByb3VuZF90b3dhcmRfemVybyA9IDAsCiAgICAgICAg cm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICAgICAgcm91bmRfdG93YXJkX2luZmluaXR5ID0gMiwK ICAgICAgICByb3VuZF90b3dhcmRfbmVnX2luZmluaXR5ID0gMwogICAgfTsKCiAgICBlbnVtIGZs b2F0X2Rlbm9ybV9zdHlsZSB7CiAgICAgICAgZGVub3JtX2luZGV0ZXJtaW5hdGUgPSAtMSwKICAg ICAgICBkZW5vcm1fYWJzZW50ID0gMCwKICAgICAgICBkZW5vcm1fcHJlc2VudCA9IDEKICAgIH07 CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgbnVtZXJpY19saW1pdHMgewogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gZmFsc2U7CgogICAgICAgIHN0 YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAg ICAgICAgc3RhdGljIF9UcCBtYXgoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4o MCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAwOwogICAgICAgIHN0YXRp YyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Np Z25lZCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxz ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICAgIHN0 YXRpYyBjb25zdCBpbnQgcmFkaXggPSAwOwoKICAgICAgICBzdGF0aWMgX1RwIGVwc2lsb24oKSB0 aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgICBzdGF0aWMgX1Rw IHJvdW5kX2Vycm9yKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9Cgog ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1h eF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9 IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj b25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0 YXRpYyBfVHAgaW5maW5pdHkoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7 IH0KICAgICAgICBzdGF0aWMgX1RwIHF1aWV0X05hTigpIHRocm93KCkgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8X1RwPigwKTsgfQogICAgICAgIHN0YXRpYyBfVHAgc2lnbmFsaW5nX05hTigpIHRocm93 KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICAgIHN0YXRpYyBfVHAgZGVu b3JtX21pbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQoKICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf bW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7 CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAg ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93 YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fbGltaXRz X2luZmluaXR5KCk7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19xdWll dF9OYU4oKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fbGltaXRzX3NpZ25hbGlu Z19OYU4oKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fbGltaXRzX2Rlbm9ybV9t aW4oKTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxib29sPiB7CiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0 aWMgYm9vbCBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICBz dGF0aWMgYm9vbCBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gdHJ1ZTsgfQoKICAgICAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDg7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBk aWdpdHMxMCA9IDI7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7 CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg cmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBib29sIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAg eyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyBib29sIHJvdW5kX2Vycm9yKCkgdGhyb3coKQog ICAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l bnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h TiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt ID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xv c3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oMCk7IH0KICAgICAgICBzdGF0aWMgYm9vbCBx dWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oMCk7 IH0KICAgICAgICBzdGF0aWMgYm9vbCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9CiAgICAgICAgc3RhdGljIGJvb2wgZGVub3Jt X21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPigwKTsgfQoK ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX21vZHVsbyA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1 ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAg ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90 b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8 Y2hhcj4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsK CiAgICAgICAgc3RhdGljIGNoYXIgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuICgtMTI4 KTsgfQogICAgICAgIHN0YXRpYyBjaGFyIG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiAx Mjc7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAgICAgIHN0YXRp YyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Np Z25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7 CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRp YyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJv dygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyBjaGFyIHJvdW5kX2Vycm9y KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGlu dCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50 MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAg ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu YWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls ZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNoYXIgaW5maW5pdHkoKSB0 aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0KICAgICAgICBz dGF0aWMgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8Y2hhcj4oMCk7IH0KICAgICAgICBzdGF0aWMgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3co KQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGlj IGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxj aGFyPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsK ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y ZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBu dW1lcmljX2xpbWl0czxzaWduZWQgY2hhcj4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1pbigpIHRo cm93KCkKICAgICAgICB7IHJldHVybiAoLTEyOCk7IH0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNo YXIgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEyNzsgfQoKICAgICAgICBzdGF0aWMg Y29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9 IDI7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7 CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyBy ZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93 KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4 cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsK ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGlj IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll dF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05h TiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl bm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9y bV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBpbmZpbml0eSgpIHRo cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAg ICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyBzaWduZWQg Y2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBkZW5vcm1fbWlu KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsg fQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMg PSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNl OwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJv dW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xp bWl0czx1bnNpZ25lZCBjaGFyPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh bGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0aHJvdygp CiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1heCgp IHRocm93KCkKICAgICAgICB7IHJldHVybiAyNTU7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGlu dCBkaWdpdHMgPSA4OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOwogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAg ICBzdGF0aWMgdW5zaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJu IDA7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkK ICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNv bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O YU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9 IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y bSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s b3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGluZmluaXR5KCkgdGhy b3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAg ICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIHVu c2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFy IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgY2hhcj4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFs c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2Jl Zm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVj dCBudW1lcmljX2xpbWl0czxzaG9ydD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Nw ZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRocm93KCkKICAg ICAgICB7IHJldHVybiAoLTMyNzY3LTEpOyB9CiAgICAgICAgc3RhdGljIHNob3J0IG1heCgpIHRo cm93KCkKICAgICAgICB7IHJldHVybiAzMjc2NzsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0cyA9IDE1OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA0OwogICAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf ZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAg IHN0YXRpYyBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KICAg ICAgICBzdGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g MDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0 IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u ZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBz dGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50 OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAg ICAgICBzdGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8c2hvcnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHNob3J0IHF1aWV0X05hTigpIHRo cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0KICAgICAgICBz dGF0aWMgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDxzaG9ydD4oMCk7IH0KICAgICAgICBzdGF0aWMgc2hvcnQgZGVub3JtX21pbigpIHRo cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0KCiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k dWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAg ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBz dGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRf emVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWdu ZWQgc2hvcnQ+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy dWU7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAgICAg eyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtYXgoKSB0aHJvdygp CiAgICAgICAgeyByZXR1cm4gNjU1MzU7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp dHMgPSAxNjsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsKICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFj dCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3Rh dGljIHVuc2lnbmVkIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsg fQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAg ICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50 ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAg ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0 IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p bmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9 IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz ID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0eSgpIHRocm93 KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAg ICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyB1 bnNpZ25lZCBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBz aG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu c2lnbmVkIHNob3J0PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkg PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAg ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5l c3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxl IHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4g c3RydWN0IG51bWVyaWNfbGltaXRzPGludD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGludCBtaW4oKSB0aHJvdygpCiAg ICAgICAgeyByZXR1cm4gKC0yMTQ3NDgzNjQ3LTEpOyB9CiAgICAgICAgc3RhdGljIGludCBtYXgo KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0NzsgfQoKICAgICAgICBzdGF0aWMg Y29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg PSA5OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy OwogICAgICAgIHN0YXRpYyBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAw OyB9CiAgICAgICAgc3RhdGljIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJl dHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAg ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMg Y29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf ZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9 IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsK ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9h YnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7 CgogICAgICAgIHN0YXRpYyBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICAgIHN0YXRpYyBpbnQgcXVpZXRfTmFOKCkgdGhy b3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgICBzdGF0 aWMgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8aW50PigwKTsgfQogICAgICAgIHN0YXRpYyBpbnQgZGVub3JtX21pbigpIHRocm93KCkKICAg ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91 bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7 CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3Qg ZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07 CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50PiB7CiAg ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBz dGF0aWMgdW5zaWduZWQgaW50IG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAg ICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g KDIxNDc0ODM2NDcgKiAyVSArIDEpOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz ID0gMzI7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg PSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRp YyB1bnNpZ25lZCBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAg ICAgICAgc3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7 IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsK ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0 aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt YXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0 eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxz ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwog ICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9y bV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFs c2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICAgIHN0YXRp YyB1bnNpZ25lZCBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRp Y19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNp Z25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgaW50PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVub3JtX21pbigpIHRo cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9Cgog ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rv d2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxs b25nPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK ICAgICAgICBzdGF0aWMgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKC0yMTQ3 NDgzNjQ3TC0xKTsgfQogICAgICAgIHN0YXRpYyBsb25nIG1heCgpIHRocm93KCkKICAgICAgICB7 IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9 IDMxOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0 cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBs b25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRp YyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAg ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4 cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsK CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0 IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGlj IGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9u Zz4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBzaWdu YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDAp OyB9CiAgICAgICAgc3RhdGljIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19pZWM1NTkgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0 cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3Jv dW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRl bXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+IHsKICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyB1 bnNpZ25lZCBsb25nIG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAgICAg c3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuICgyMTQ3 NDgzNjQ3TCAqIDJVTCArIDEpOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g MzI7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0 cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyB1 bnNpZ25lZCBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAg ICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsg cmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwog ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1h eF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5 ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAg ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3Jt X2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxz ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0 aWMgdW5zaWduZWQgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9u ZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu c2lnbmVkIGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVub3JtX21p bigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigw KTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBz ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz ZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy b3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19s aW1pdHM8ZmxvYXQ+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9 IHRydWU7CgogICAgICAgIHN0YXRpYyBmbG9hdCBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1 cm4gMS4xNzU0OTQzNTFFLTM4RjsgfQogICAgICAgIHN0YXRpYyBmbG9hdCBtYXgoKSB0aHJvdygp CiAgICAgICAgeyByZXR1cm4gMy40MDI4MjM0NjZFKzM4RjsgfQoKICAgICAgICBzdGF0aWMgY29u c3QgaW50IGRpZ2l0cyA9IDI0OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA3 OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7 CiAgICAgICAgc3RhdGljIGZsb2F0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g MS4xOTIwOTI4OTZFLTA3RjsgfQogICAgICAgIHN0YXRpYyBmbG9hdCByb3VuZF9lcnJvcigpIHRo cm93KCkKICAgICAgICB7IHJldHVybiAxLjBmOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWluX2V4cG9uZW50ID0gLTEyNTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu dDEwID0gLTM3OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTI4Owog ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzODsKCiAgICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh c19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGZsb2F0IGluZmlu aXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PigwKTsgfQog ICAgICAgIHN0YXRpYyBmbG9hdCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9CiAgICAgICAgc3RhdGljIGZsb2F0IHNpZ25hbGluZ19O YU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9CiAg ICAgICAgc3RhdGljIGZsb2F0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8ZmxvYXQ+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ll YzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBz dGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29s IHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1w bGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3VibGU+IHsKICAgICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyBkb3VibGUgbWlu KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDIuMjI1MDczODU4NTA3MjAxNEUtMzA4OyB9CiAg ICAgICAgc3RhdGljIGRvdWJsZSBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMS43OTc2 OTMxMzQ4NjIzMTU3RSszMDg7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA1 MzsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTU7CiAgICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19pbnRlZ2VyID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBm YWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMg ZG91YmxlIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMi4yMjA0NDYwNDkyNTAz MTMxRS0xNjsgfQogICAgICAgIHN0YXRpYyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAg ICAgICAgeyByZXR1cm4gMS4wOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u ZW50ID0gLTEwMjE7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0z MDc7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMDI0OwogICAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzMDg7CgogICAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2ln bmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5 bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBkb3VibGUgaW5maW5pdHko KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPigwKTsgfQogICAg ICAgIHN0YXRpYyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0aWMgZG91YmxlIHNpZ25hbGluZ19O YU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPigwKTsgfQog ICAgICAgIHN0YXRpYyBkb3VibGUgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxkb3VibGU+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2llYzU1OSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0 cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAg ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9y b3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0 ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT4gewogICAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGxv bmcgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAzLjM2MjEwMzE0MzExMjA5 MzUwNjI2MjY3NzgxNzMyMTc1MjYwM0UtNDkzMkw7IH0KICAgICAgICBzdGF0aWMgbG9uZyBkb3Vi bGUgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMxNzY1MDg1 NzU5MzI2NjI4MDA3MDE2RSs0OTMyTDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0 cyA9IDExMzsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMzQ7CiAgICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh Y3QgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBz dGF0aWMgbG9uZyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAxLjky NTkyOTk0NDM4NzIzNTg1MzA1NTk3Nzk0MjU4NDkyNzMxOUUtMzRMOyB9CiAgICAgICAgc3RhdGlj IGxvbmcgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuMEw7 IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTYzODE7CiAgICAg ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC00OTMxOwogICAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTYzODQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGlu dCBtYXhfZXhwb25lbnQxMCA9IDQ5MzI7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p bmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9 IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz ID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkK ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oMCk7IH0KICAgICAgICBz dGF0aWMgbG9uZyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PGxvbmcgZG91YmxlPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBz aWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcg ZG91YmxlPigwKTsgfQogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhy b3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgZG91YmxlPigwKTsgfQoKICAg ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxz ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAg ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90 b3dhcmRfemVybzsKICAgIH07Cgp9CiMgMzkgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0 cy50Y2MiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX21lbW9yeS5oIiAxIDMKIyA0MCAi L2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv aW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL2hvbWU1L2tyYWtv dy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysv Yml0cy9zYnVmX2l0ZXIuaCIgMSAzCiMgNDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0 cy50Y2MiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX2NjdHlwZS5oIiAxIDMKIyA0MiAi L2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv aW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL2hvbWU1L2tyYWtv dy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysv dHlwZWluZm8iIDEgMwojIDMzICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy90eXBlaW5mbyIgMwojIDEgIi9ob21lNS9r cmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUv ZysrL2V4Y2VwdGlvbiIgMSAzCiMgMzQgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL3R5cGVpbmZvIiAyIDMKCmV4dGVy biAiQysrIiB7CgpuYW1lc3BhY2UgX19jeHhhYml2MQp7CiAgY2xhc3MgX19jbGFzc190eXBlX2lu Zm87Cn0KIyA1MCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOC8zLjAvaW5jbHVkZS9nKysvdHlwZWluZm8iIDMKbmFtZXNwYWNlIHN0ZAp7CiAgY2xh c3MgdHlwZV9pbmZvCiAgewogIHB1YmxpYzoKCgoKCiAgICB2aXJ0dWFsIH50eXBlX2luZm8oKTsK CiAgcHJpdmF0ZToKCiAgICB0eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsK ICAgIHR5cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKCiAgcHJvdGVjdGVkOgogICAgY29uc3Qg Y2hhciAqX19uYW1lOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdCB0eXBlX2luZm8oY29uc3Qg Y2hhciAqX19uKTogX19uYW1lKF9fbikgeyB9CgogIHB1YmxpYzoKCiAgICBjb25zdCBjaGFyKiBu YW1lKCkgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZTsgfQojIDg2ICIvaG9tZTUva3Jha293L2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy90eXBl aW5mbyIgMwogICAgYm9vbCBiZWZvcmUoY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAg IHsgcmV0dXJuIF9fbmFtZSA8IF9fYXJnLl9fbmFtZTsgfQogICAgYm9vbCBvcGVyYXRvcj09KGNv bnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiBfX25hbWUgPT0gX19hcmcu X19uYW1lOyB9CgogICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNv bnN0CiAgICB7IHJldHVybiAhb3BlcmF0b3I9PShfX2FyZyk7IH0KCgogIHB1YmxpYzoKCiAgICB2 aXJ0dWFsIGJvb2wgX19pc19wb2ludGVyX3AoKSBjb25zdDsKCiAgICB2aXJ0dWFsIGJvb2wgX19p c19mdW5jdGlvbl9wKCkgY29uc3Q7CgoKCgoKCgogICAgdmlydHVhbCBib29sIF9fZG9fY2F0Y2go Y29uc3QgdHlwZV9pbmZvICpfX3Rocl90eXBlLCB2b2lkICoqX190aHJfb2JqLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgX19vdXRlcikgY29uc3Q7CgoKICAgIHZpcnR1YWwg Ym9vbCBfX2RvX3VwY2FzdChjb25zdCBfX2N4eGFiaXYxOjpfX2NsYXNzX3R5cGVfaW5mbyAqX190 YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKl9fb2JqX3B0cikgY29u c3Q7CiAgfTsKCiAgY2xhc3MgYmFkX2Nhc3QgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1Ymxp YzoKICAgIGJhZF9jYXN0KCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJhZF9jYXN0KCkgdGhy b3coKTsKICB9OwoKICBjbGFzcyBiYWRfdHlwZWlkIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBw dWJsaWM6CiAgICBiYWRfdHlwZWlkICgpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5iYWRfdHlw ZWlkICgpIHRocm93KCk7CiAgfTsKfQoKfQojIDQzICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZV9m YWNldHMudGNjIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF92ZWN0b3IuaCIgMSAzCiMg MzEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv My4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3ZlY3Rvci5oIiAzCgojIDEgIi9ob21lNS9rcmFrb3cv bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2Jp dHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvZnVuY3RleGNlcHQu aCIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvZysrL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvaG9t ZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs dWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQK ICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxs b2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9f dGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9f cyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2 b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9f dGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19y YW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3Io Y29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNo YXIqIF9fcyk7Cn0KIyAzMyAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEg Ii9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4w L2luY2x1ZGUvZysrL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDM0ICIvaG9tZTUva3Jha293 L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9i aXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGxfYWxsb2MuaCIg MSAzCiMgMzUgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvaG9tZTUv a3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl L2crKy9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzYgIi9ob21lNS9rcmFrb3cvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3Rk X3ZlY3Rvci5oIiAyIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgi IDEgMwojIDM3ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL2hvbWU1 L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVk ZS9nKysvYml0cy9zdGxfdmVjdG9yLmgiIDEgMwojIDM0ICIvaG9tZTUva3Jha293L2xvY2FsL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0bF92 ZWN0b3IuaCIgMwojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3Mu aCIgMSAzCiMgMzUgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKIyAxICIvaG9t ZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNs dWRlL2crKy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvaG9tZTUva3Jha293L2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2Z1 bmN0ZXhjZXB0LmgiIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMK IyAzNSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu OC8zLjAvaW5jbHVkZS9nKysvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQK ewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhy b3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7Cgog IHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dp Y19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3Io Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciog X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7Cgog IHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df b3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJm bG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVy ZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgMzYgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX3ZlY3Rvci5o IiAyIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzcgIi9o b21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2lu Y2x1ZGUvZysrL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDQ4ICIv aG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9p bmNsdWRlL2crKy9iaXRzL3N0bF92ZWN0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNlIHsK cHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+ OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5 cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9Cgog IF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9k YXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zf c3RvcmFnZSgwKQogIHt9Cgpwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9hbGxv Y2F0b3I7CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2VuZF9v Zl9zdG9yYWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBf TV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKF9U cCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5kZWFs bG9jYXRlKF9fcCwgX19uKTsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs b2NhdG9yPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVlPiB7 CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9y Pjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90 eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9Cgog IF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0YXJ0 KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KCnByb3RlY3RlZDoK ICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0b3Jh Z2U7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+Ojpf QWxsb2NfdHlwZSBfQWxsb2NfdHlwZTsKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAg ICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVhbGxv Y2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUo X19wLCBfX24pO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0 IF9WZWN0b3JfYmFzZQogIDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46 Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0Fs bG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxs b2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVuYW1l IF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9iYXNlKGNv bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0b3JfYmFzZShz aXplX3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgewogICAg X01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID0gX01fc3RhcnQ7CiAg ICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9WZWN0b3JfYmFz ZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFy dCk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8 X1RwPiA+CmNsYXNzIHZlY3RvciA6IHByb3RlY3RlZCBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+ CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCnByaXZhdGU6CiAgdHlwZWRlZiBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNlOwog IHR5cGVkZWYgdmVjdG9yPF9UcCwgX0FsbG9jPiB2ZWN0b3JfdHlwZTsKcHVibGljOgogIHR5cGVk ZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVk ZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9fbm9ybWFsX2l0 ZXJhdG9yPHBvaW50ZXIsIHZlY3Rvcl90eXBlPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9fbm9ybWFs X2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIHZlY3Rvcl90eXBlPiBjb25zdF9pdGVyYXRvcjsKICB0 eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUm IGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBw dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxv Y2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9y KCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKICB0eXBlZGVmIHJl dmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAg dHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKcHJv dGVjdGVkOgogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fZGVh bGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgdXNpbmcgX0Jhc2U6Ol9NX2Zpbmlz aDsKICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7Cgpwcm90ZWN0ZWQ6CiAgdm9pZCBf TV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KTsKICB2b2lk IF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbik7CgpwdWJsaWM6CiAgaXRlcmF0b3Ig YmVnaW4oKSB7IHJldHVybiBpdGVyYXRvciAoX01fc3RhcnQpOyB9CiAgY29uc3RfaXRlcmF0b3Ig YmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX3N0YXJ0KTsgfQog IGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9maW5pc2gpOyB9CiAgY29uc3Rf aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX2ZpbmlzaCk7 IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVy YXRvcihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAg ICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIHJldmVyc2VfaXRl cmF0b3IgcmVuZCgpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAg Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3Jl dmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdAogICAg eyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICBzaXplX3R5cGUgbWF4X3Np emUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVvZihfVHApOyB9CiAg c2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShjb25zdF9p dGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSkgLSBiZWdpbigpKTsgfQogIGJvb2wgZW1wdHkoKSBj b25zdAogICAgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICByZWZlcmVuY2Ugb3BlcmF0 b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CiAgY29uc3Rf cmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihiZWdp bigpICsgX19uKTsgfQoKICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0 IHsKICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICBfX3Rocm93X291dF9vZl9yYW5n ZSgidmVjdG9yIik7CiAgfQoKICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikKICAgIHsgX01f cmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogIGNvbnN0X3JlZmVyZW5j ZSBhdChzaXplX3R5cGUgX19uKSBjb25zdAogICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1 cm4gKCp0aGlzKVtfX25dOyB9CgogIGV4cGxpY2l0IHZlY3Rvcihjb25zdCBhbGxvY2F0b3JfdHlw ZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKSB7fQoKICB2ZWN0b3Io c2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICBjb25zdCBhbGxvY2F0 b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19uLCBfX2EpCiAg ICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFs dWUpOyB9CgogIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQogICAgOiBfQmFzZShfX24s IGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9u KF9NX3N0YXJ0LCBfX24sIF9UcCgpKTsgfQoKICB2ZWN0b3IoY29uc3QgdmVjdG9yPF9UcCwgX0Fs bG9jPiYgX194KQogICAgOiBfQmFzZShfX3guc2l6ZSgpLCBfX3guZ2V0X2FsbG9jYXRvcigpKQog ICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9feC5lbmQo KSwgX01fc3RhcnQpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdmVj dG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg ICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpIDogX0Jhc2Uo X19hKSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6 X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luaXRpYWxpemVfYXV4KF9fZmlyc3QsIF9fbGFz dCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQg X01faW5pdGlhbGl6ZV9hdXgoX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3RydWVf dHlwZSkgewogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29mX3N0 b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmls bF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxz ZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVy YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKICB+dmVjdG9yKCkgeyBkZXN0cm95KF9NX3N0 YXJ0LCBfTV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShjb25z dCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19u KSB7CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUgX19v bGRfc2l6ZSA9IHNpemUoKTsKICAgICAgcG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9j b3B5KF9fbiwgX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQsIF9N X2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdl IC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9maW5pc2ggPSBf X3RtcCArIF9fb2xkX3NpemU7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBf X247CiAgICB9CiAgfQoKCgoKCgogIHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9U cCYgX192YWwpIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KICB2b2lkIF9NX2ZpbGxf YXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpOwoKICB0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwg X0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2Vy PF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2Fzc2lnbl9kaXNw YXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFz cyBfSW50ZWdlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRl Z2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlwZSkg X19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgdm9p ZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz dCwgX19mYWxzZV90eXBlKQogICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19p dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3Rh Zyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWdu X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogIHJlZmVyZW5jZSBm cm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29u c3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICooZW5k KCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQo KSAtIDEpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KSB7CiAgICBpZiAoX01f ZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gs IF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRf YXV4KGVuZCgpLCBfX3gpOwogIH0KICB2b2lkIHB1c2hfYmFjaygpIHsKICAgIGlmIChfTV9maW5p c2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7CiAg ICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVuZCgp KTsKICB9CiAgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkgewogICAgc3RkOjpz d2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwgX194 Ll9NX2ZpbmlzaCk7CiAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRf b2Zfc3RvcmFnZSk7CiAgfQoKICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwg Y29uc3QgX1RwJiBfX3gpIHsKICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4o KTsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9 PSBlbmQoKSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19NX2Zp bmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bvc2l0 aW9uKSwgX194KTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KICBpdGVyYXRvciBpbnNl cnQoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24g LSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bv c2l0aW9uID09IGVuZCgpKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOwogICAgICArK19N X2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bv c2l0aW9uKSk7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CgogIHRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRl cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVu YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAg IF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7 CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0 Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9z LCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewog ICAgX01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0 ZWdvcnkoX19maXJzdCkpOwogIH0KCiAgdm9pZCBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXpl X3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9f biwgX194KTsgfQoKICB2b2lkIF9NX2ZpbGxfaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90 eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOwoKICB2b2lkIHBvcF9iYWNrKCkgewogICAgLS1fTV9m aW5pc2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJh dG9yIF9fcG9zaXRpb24pIHsKICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAg Y29weShfX3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOwogICAgLS1fTV9maW5pc2g7 CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAgaXRl cmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBpdGVy YXRvciBfX2koY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KSk7CiAgICBkZXN0cm95KF9faSwg ZW5kKCkpOwogICAgX01fZmluaXNoID0gX01fZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3QpOwog ICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6 ZSwgY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAgICBl cmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5kKCkpOwogICAgZWxzZQogICAgICBpbnNlcnQo ZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgfQogIHZvaWQgcmVzaXplKHNpemVf dHlwZSBfX25ld19zaXplKSB7IHJlc2l6ZShfX25ld19zaXplLCBfVHAoKSk7IH0KICB2b2lkIGNs ZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KCnByb3RlY3RlZDoKCiAgdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgcG9pbnRlciBfTV9hbGxvY2F0ZV9hbmRfY29weShz aXplX3R5cGUgX19uLCBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAg ewogICAgcG9pbnRlciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkgewogICAg ICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAgIHJl dHVybiBfX3Jlc3VsdDsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9kZWFsbG9jYXRlKF9fcmVz dWx0LCBfX24pOyB0aHJvdzsgfTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRv cj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVy YXRvcl90YWcpCiAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog ICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShfRm9yd2FyZEl0ZXJhdG9yIF9f Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0 LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICB7CiAgICBzaXplX3R5cGUgX19uID0gMDsKICAgIGRp c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUo X19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICBfTV9maW5p c2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAgfQoK ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQo aXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19m aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0 X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZv aWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwp9OwoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IHZlY3Rv cjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAg cmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgICBlcXVhbChfX3guYmVn aW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxv Yz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxleGlj b2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0Fs bG9jPiYgX194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9y IT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxs b2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj4oY29uc3QgdmVjdG9yPF9UcCwg X0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4g X195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi b29sCm9wZXJhdG9yPD0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0 b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPj0oY29uc3Qg dmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kp IHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2M+CnZlY3RvcjxfVHAsX0FsbG9jPiYKdmVjdG9yPF9UcCxfQWxsb2M+OjpvcGVyYXRvcj0o Y29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3ggIT0gdGhpcykgewog ICAgY29uc3Qgc2l6ZV90eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CiAgICBpZiAoX194bGVuID4g Y2FwYWNpdHkoKSkgewogICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHko X194bGVuLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICAgICAgZGVzdHJveShfTV9zdGFydCwg X01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3Jh Z2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2VuZF9vZl9z dG9yYWdlID0gX01fc3RhcnQgKyBfX3hsZW47CiAgICB9CiAgICBlbHNlIGlmIChzaXplKCkgPj0g X194bGVuKSB7CiAgICAgIGl0ZXJhdG9yIF9faShjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCks IGJlZ2luKCkpKTsKICAgICAgZGVzdHJveShfX2ksIGVuZCgpKTsKICAgIH0KICAgIGVsc2Ugewog ICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSArIHNpemUoKSwgX01fc3RhcnQpOwog ICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5lbmQoKSwg X01fZmluaXNoKTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX194bGVuOwogIH0K ICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9p ZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBjb25zdCB2 YWx1ZV90eXBlJiBfX3ZhbCkKewogIGlmIChfX24gPiBjYXBhY2l0eSgpKSB7CiAgICB2ZWN0b3I8 X1RwLCBfQWxsb2M+IF9fdG1wKF9fbiwgX192YWwsIGdldF9hbGxvY2F0b3IoKSk7CiAgICBfX3Rt cC5zd2FwKCp0aGlzKTsKICB9CiAgZWxzZSBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICBmaWxsKGJl Z2luKCksIGVuZCgpLCBfX3ZhbCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxf bihfTV9maW5pc2gsIF9fbiAtIHNpemUoKSwgX192YWwpOwogIH0KICBlbHNlCiAgICBlcmFzZShm aWxsX24oYmVnaW4oKSwgX19uLCBfX3ZhbCksIGVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZCB2ZWN0b3I8 X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9p dGVyYXRvcl90YWcpIHsKICBpdGVyYXRvciBfX2N1cihiZWdpbigpKTsKICBmb3IgKCA7IF9fZmly c3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAgICAq X19jdXIgPSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBlcmFzZShfX2N1 ciwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh cmRJdGVyPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5cGUgX19sZW4gPSAw OwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwoKICBpZiAoX19sZW4gPiBjYXBh Y2l0eSgpKSB7CiAgICBwb2ludGVyIF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBf X2ZpcnN0LCBfX2xhc3QpKTsKICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICBf TV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAg IF9NX3N0YXJ0ID0gX190bXA7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2ZpbmlzaCA9IF9N X3N0YXJ0ICsgX19sZW47CiAgfQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikgewogICAgaXRl cmF0b3IgX19uZXdfZmluaXNoKGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCkpOwogICAg ZGVzdHJveShfX25ld19maW5pc2gsIGVuZCgpKTsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2Zpbmlz aC5iYXNlKCk7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19maXJzdDsK ICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBfTV9z dGFydCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwg X01fZmluaXNoKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9p ZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24s IGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkg ewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19NX2Zp bmlzaDsKICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlv biwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksIGl0ZXJhdG9yKF9NX2ZpbmlzaC0gMSkpOwogICAg Kl9fcG9zaXRpb24gPSBfX3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUg X19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3Np emUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9N X2FsbG9jYXRlKF9fbGVuKSk7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQp OwogICAgdHJ5IHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJh dG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaC5iYXNl KCksIF9feCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1bmlu aXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICB9CiAgICBj YXRjaCguLi4pIHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01fZGVhbGxv Y2F0ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pKTsgdGhyb3c7IH07CgogICAgZGVzdHJveShi ZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3Rv cmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAg X01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g X19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVy YXRvciBfX3Bvc2l0aW9uKQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkg ewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19NX2Zp bmlzaDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0g MiksCiAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKF9NX2ZpbmlzaCAtIDEpKTsKICAgICpfX3Bv c2l0aW9uID0gX1RwKCk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3Np emUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAg PyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBwb2ludGVyIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2Nh dGUoX19sZW4pOwogICAgcG9pbnRlciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAgIHRy eSB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9z dGFydCksIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOwogICAgICArK19f bmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9z aXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7IChkZXN0cm95 KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19s ZW4pKTsgdGhyb3c7IH07CgogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFs bG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0 YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICBfTV9l bmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fZmlsbF9p bnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIGlmIChfX24gIT0g MCkgewogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0g X19uKSB7CiAgICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f ZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2Zp bmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAgICAg IHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNo KTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3Np dGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGZpbGwoX19w b3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2Ug ewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gX19lbGVtc19h ZnRlciwgX194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVy OwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9N X2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgZmls bChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAg ZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBj b25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7 CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0 ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAgX19u ZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIF9fbmV3 X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfX25l d19maW5pc2gsIF9fbiwgX194KTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0gdW5p bml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX25ld19maW5pc2gpOwogICAgICB9 CiAgICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCBf TV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICAg IGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3Rh cnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3 X3N0YXJ0LmJhc2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAg ICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0K ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2luc2Vy dChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr K19fZmlyc3QpIHsKICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICArK19f cG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9yYW5n ZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19maXJz dCAhPSBfX2xhc3QpIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19maXJz dCwgX19sYXN0LCBfX24pOwogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9N X2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0g ZW5kKCkgLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2goX01fZmluaXNo KTsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRpYWxpemVk X2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01f ZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xkX2Zp bmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwg X19wb3NpdGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRv ciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgX19lbGVtc19hZnRlcik7 CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7CiAg ICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0aWFs aXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBf TV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBf X3Bvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlw ZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29s ZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0 KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19z dGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9j b3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2ZpbmlzaCA9 IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3X2ZpbmlzaCk7CiAgICAg ICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9u LCBpdGVyYXRvcihfTV9maW5pc2gpLCBfX25ld19maW5pc2gpOwogICAgICB9CiAgICAgIGNhdGNo KC4uLikgeyAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9jYXRl KF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICAgIGRlc3Ryb3koX01f c3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9v Zl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2Uo KTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01fZW5kX29m X3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0KCn0KIyAz OCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9nKysvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi9ob21lNS9rcmFrb3cv bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2Jp dHMvc3RsX2J2ZWN0b3IuaCIgMSAzCiMgMzQgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RsX2J2ZWN0b3Iu aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnN0YXRpYyBjb25zdCBpbnQgX19XT1JEX0JJVCA9IGludCg4 KnNpemVvZih1bnNpZ25lZCBpbnQpKTsKCnN0cnVjdCBfQml0X3JlZmVyZW5jZSB7CiAgdW5zaWdu ZWQgaW50KiBfTV9wOwogIHVuc2lnbmVkIGludCBfTV9tYXNrOwogIF9CaXRfcmVmZXJlbmNlKHVu c2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfTV9wKF9feCksIF9NX21h c2soX195KSB7fQoKcHVibGljOgogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNr KDApIHt9CiAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEoISgqX01fcCAmIF9NX21h c2spKTsgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oYm9vbCBfX3gpCiAgewogICAgaWYg KF9feCkgKl9NX3AgfD0gX01fbWFzazsKICAgIGVsc2UgKl9NX3AgJj0gfl9NX21hc2s7CiAgICBy ZXR1cm4gKnRoaXM7CiAgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oY29uc3QgX0JpdF9y ZWZlcmVuY2UmIF9feCkKICAgIHsgcmV0dXJuICp0aGlzID0gYm9vbChfX3gpOyB9CiAgYm9vbCBv cGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBi b29sKCp0aGlzKSA9PSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X3Jl ZmVyZW5jZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIWJvb2woKnRoaXMpICYmIGJvb2woX194 KTsKICB9CiAgdm9pZCBmbGlwKCkgeyAqX01fcCBePSBfTV9tYXNrOyB9Cn07CgppbmxpbmUgdm9p ZCBzd2FwKF9CaXRfcmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQp7CiAgYm9vbCBf X3RtcCA9IF9feDsKICBfX3ggPSBfX3k7CiAgX195ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0X2l0 ZXJhdG9yX2Jhc2UgOiBwdWJsaWMgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcjxib29sLCBwdHJkaWZm X3Q+CnsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9NX29mZnNldDsKCiAg X0JpdF9pdGVyYXRvcl9iYXNlKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KQog ICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CgogIHZvaWQgX01fYnVtcF91cCgpIHsK ICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0gMSkgewogICAgICBfTV9vZmZzZXQg PSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgX01fYnVtcF9kb3duKCkgewogICAg aWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX19XT1JEX0JJVCAtIDE7 CiAgICAgIC0tX01fcDsKICAgIH0KICB9CgogIHZvaWQgX01faW5jcihwdHJkaWZmX3QgX19pKSB7 CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19pICsgX01fb2Zmc2V0OwogICAgX01fcCArPSBf X24gLyBfX1dPUkRfQklUOwogICAgX19uID0gX19uICUgX19XT1JEX0JJVDsKICAgIGlmIChfX24g PCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7 CiAgICAgIC0tX01fcDsKICAgIH0gZWxzZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50 KSBfX247CiAgfQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBf X2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA9PSBf X2kuX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X2l0ZXJhdG9yX2Jh c2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPCBfX2kuX01fcCB8fCAoX01fcCA9PSBf X2kuX01fcCAmJiBfTV9vZmZzZXQgPCBfX2kuX01fb2Zmc2V0KTsKICB9CiAgYm9vbCBvcGVyYXRv ciE9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gISgq dGhpcyA9PSBfX2kpOwogIH0KICBib29sIG9wZXJhdG9yPihjb25zdCBfQml0X2l0ZXJhdG9yX2Jh c2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9faSA8ICp0aGlzOwogIH0KICBib29sIG9wZXJh dG9yPD0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAh KF9faSA8ICp0aGlzKTsKICB9CiAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IF9CaXRfaXRlcmF0b3Jf YmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gISgqdGhpcyA8IF9faSk7CiAgfQp9OwoKaW5s aW5lIHB0cmRpZmZfdApvcGVyYXRvci0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3gsIGNv bnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KSB7CiAgcmV0dXJuIF9fV09SRF9CSVQgKiAoX194 Ll9NX3AgLSBfX3kuX01fcCkgKyBfX3guX01fb2Zmc2V0IC0gX195Ll9NX29mZnNldDsKfQoKCnN0 cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3JfYmFzZQp7CiAgdHlwZWRl ZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9p bnRlcjsKICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7CgogIF9CaXRfaXRlcmF0b3Io KSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfaXRlcmF0b3IodW5zaWduZWQg aW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gs IF9feSkge30KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5j ZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOyB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAg ICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9y KysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF91cCgpOwog ICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItLSgpIHsKICAgIF9NX2J1 bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVyYXRvci0tKGlu dCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfZG93bigpOwogICAg cmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUg X19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9y JiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAg ICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUg X19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1w ICs9IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNv bnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgLT0gX19p OwogIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgeyByZXR1 cm4gKigqdGhpcyArIF9faSk7IH0KfTsKCmlubGluZSBfQml0X2l0ZXJhdG9yCm9wZXJhdG9yKyhw dHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9f bjsgfQoKCnN0cnVjdCBfQml0X2NvbnN0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3Jf YmFzZQp7CiAgdHlwZWRlZiBib29sIHJlZmVyZW5jZTsKICB0eXBlZGVmIGJvb2wgY29uc3RfcmVm ZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgYm9vbCogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfY29u c3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogIF9CaXRfY29uc3RfaXRlcmF0b3IoKSA6IF9C aXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IodW5zaWduZWQg aW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gs IF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkK ICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3guX01fb2Zmc2V0KSB7fQoKICBj b25zdF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgcmV0dXJuIF9CaXRfcmVmZXJl bmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRv cisrKCkgewogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9p dGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhp czsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0 b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsK ICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9y IF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiBfX3RtcDsKICB9 CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAg X01faW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3Bl cmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0 dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBl IF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVy biBfX3RtcCArPSBfX2k7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNl X3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAg cmV0dXJuIF9fdG1wIC09IF9faTsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlm ZmVyZW5jZV90eXBlIF9faSkgewogICAgcmV0dXJuICooKnRoaXMgKyBfX2kpOwogIH0KfTsKCmlu bGluZSBfQml0X2NvbnN0X2l0ZXJhdG9yCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBf Qml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsgfQoKCgoKCgp0ZW1w bGF0ZSA8Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfX2lzX3N0YXRpYz4KY2xhc3MgX0J2ZWN0b3Jf YWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9v bCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsK ICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9h bGxvY2F0b3I7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYg X19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgpLCBfTV9maW5pc2go KSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB1bnNpZ25lZCBpbnQqIF9N X2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxs b2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUKTsgfQogIHZvaWQgX01fZGVh bGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfTV9kYXRhX2FsbG9jYXRv ci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9CgogIHR5cGVuYW1l IF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUK ICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAg X0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFn ZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvcj4KY2xhc3MgX0J2ZWN0b3JfYWxsb2Nf YmFzZTxfQWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxv Y190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxv Y2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1 cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9j YXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9y YWdlKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPHVu c2lnbmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlCiAgICAgICAgICBfQWxsb2NfdHlw ZTsKCiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJu IF9BbGxvY190eXBlOjphbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQp OyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAg IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfQoKICBf Qml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIHVuc2ln bmVkIGludCogX01fZW5kX29mX3N0b3JhZ2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpj bGFzcyBfQnZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxv Yz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxs b2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0Fs bG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVm IHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX0J2ZWN0 b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30KICB+X0J2 ZWN0b3JfYmFzZSgpIHsgX0Jhc2U6Ol9NX2RlYWxsb2NhdGUoKTsgfQp9OwoKfQoKCiMgMSAiL2hv bWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5j bHVkZS9nKysvYml0cy9zdGxfdmVjdG9yLmgiIDEgMwojIDMxOCAiL2hvbWU1L2tyYWtvdy9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9z dGxfYnZlY3Rvci5oIiAyIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0Fs bG9jPgogIGNsYXNzIHZlY3Rvcjxib29sLCBfQWxsb2M+IDogcHVibGljIF9CdmVjdG9yX2Jhc2U8 X0FsbG9jPgogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIGJvb2wgdmFsdWVfdHlwZTsKICAgIHR5 cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2Vf dHlwZTsKICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgdHlwZWRlZiBi b29sIGNvbnN0X3JlZmVyZW5jZTsKICAgIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UqIHBvaW50ZXI7 CiAgICB0eXBlZGVmIGNvbnN0IGJvb2wqIGNvbnN0X3BvaW50ZXI7CgogICAgdHlwZWRlZiBfQml0 X2l0ZXJhdG9yIGl0ZXJhdG9yOwogICAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9yIGNvbnN0 X2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4g Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVy YXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9CdmVjdG9yX2Jh c2U8X0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgICBhbGxvY2F0b3Jf dHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgewogICAgICByZXR1cm4gX0J2ZWN0b3JfYmFzZTxf QWxsb2M+OjpnZXRfYWxsb2NhdG9yKCk7CiAgICB9CgogIHByb3RlY3RlZDoKICAgIHVzaW5nIF9C dmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fYml0X2FsbG9jOwogICAgdXNpbmcgX0J2ZWN0b3JfYmFz ZTxfQWxsb2M+OjpfTV9kZWFsbG9jYXRlOwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+ OjpfTV9zdGFydDsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fZmluaXNoOwog ICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgcHJv dGVjdGVkOgogICAgdm9pZCBfTV9pbml0aWFsaXplKHNpemVfdHlwZSBfX24pIHsKICAgICAgdW5z aWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01fZW5kX29mX3N0b3Jh Z2UgPSBfX3EgKyAoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgIF9NX3N0 YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgX01fZmluaXNoID0gX01fc3RhcnQgKyBkaWZm ZXJlbmNlX3R5cGUoX19uKTsKICAgIH0KICAgIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBf X3Bvc2l0aW9uLCBib29sIF9feCkgewogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5k X29mX3N0b3JhZ2UpIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9NX2Zpbmlz aCwgX01fZmluaXNoICsgMSk7CiAgICAgICAgKl9fcG9zaXRpb24gPSBfX3g7CiAgICAgICAgKytf TV9maW5pc2g7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0g c2l6ZSgpID8gMiAqIHNpemUoKSA6IF9fV09SRF9CSVQ7CiAgICAgICAgdW5zaWduZWQgaW50KiBf X3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVn aW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgKl9faSsrID0gX194 OwogICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAg ICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9f bGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAgX01fc3RhcnQgPSBpdGVy YXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnB1dF9pdGVyYXRvcl90YWcpIHsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcigpOwogICAgICBf TV9maW5pc2ggPSBpdGVyYXRvcigpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IDA7CiAgICAg IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBwdXNoX2JhY2so Kl9fZmlyc3QpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgog ICAgdm9pZCBfTV9pbml0aWFsaXplX3JhbmdlKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0Zv cndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2Fy ZF9pdGVyYXRvcl90YWcpIHsKICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICAgIGRpc3RhbmNl KF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBj b3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9fcG9z LAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0 SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf dGFnKSB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAg ICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAgICAgKytfX3BvczsKICAg ICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgdm9p ZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBp ZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBzaXplX3R5cGUgX19uID0gMDsKICAgICAg ICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICAgICAgaWYgKGNhcGFjaXR5KCkg LSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVu ZCgpLCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAgICBjb3B5KF9f Zmlyc3QsIF9fbGFzdCwgX19wb3NpdGlvbik7CiAgICAgICAgICBfTV9maW5pc2ggKz0gZGlmZmVy ZW5jZV90eXBlKF9fbik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgc2l6ZV90 eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAgICAgICAgIHVuc2lnbmVk IGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAgIGl0ZXJhdG9yIF9faSA9 IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgICBf X2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAgIF9NX2ZpbmlzaCA9IGNv cHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAg ICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9CSVQgLSAx KS9fX1dPUkRfQklUOwogICAgICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAg ICAgIH0KICAgICAgfQogICAgfQoKICBwdWJsaWM6CiAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0 dXJuIF9NX3N0YXJ0OyB9CiAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu IF9NX3N0YXJ0OyB9CiAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9maW5pc2g7IH0KICAg IGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQoKICAgIHJl dmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7 IH0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgewogICAgICByZXR1 cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7CiAgICB9CiAgICByZXZlcnNlX2l0ZXJh dG9yIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgICBjb25z dF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7CiAgICAgIHJldHVybiBjb25zdF9yZXZl cnNlX2l0ZXJhdG9yKGJlZ2luKCkpOwogICAgfQoKICAgIHNpemVfdHlwZSBzaXplKCkgY29uc3Qg eyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICAgIHNpemVfdHlwZSBtYXhf c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KICAgIHNpemVfdHlwZSBjYXBh Y2l0eSgpIGNvbnN0IHsKICAgICAgcmV0dXJuIHNpemVfdHlwZShjb25zdF9pdGVyYXRvcihfTV9l bmRfb2Zfc3RvcmFnZSwgMCkgLSBiZWdpbigpKTsKICAgIH0KICAgIGJvb2wgZW1wdHkoKSBjb25z dCB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9CgogICAgcmVmZXJlbmNlIG9wZXJhdG9yW10o c2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBl KF9fbikpOyB9CiAgICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBj b25zdAogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0K CiAgICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNvbnN0IHsKICAgICAgaWYg KF9fbiA+PSB0aGlzLT5zaXplKCkpCiAgICAgICAgX190aHJvd19yYW5nZV9lcnJvcigidmVjdG9y PGJvb2w+Iik7CiAgICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAgICAgIHsg X01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogICAgY29uc3RfcmVm ZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19u KTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0IHZlY3Rvcihjb25zdCBhbGxv Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNl PF9BbGxvYz4oX19hKSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUgX19uLCBib29sIF9fdmFsdWUs CiAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBl KCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsKICAgICAgX01faW5p dGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdl LCBfX3ZhbHVlID8gfjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNpdCB2ZWN0b3Ioc2l6ZV90eXBl IF9fbikKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxsb2NhdG9yX3R5cGUoKSkKICAg IHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9N X2VuZF9vZl9zdG9yYWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3IoY29uc3QgdmVjdG9yJiBfX3gp IDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2NhdG9yKCkpIHsKICAgICAgX01f aW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmVuZCgp LCBfTV9zdGFydCk7CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2 b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsIF9f dHJ1ZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgZmlsbChfTV9zdGFy dC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgIH0KCiAgICB0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0 Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9pbml0aWFs aXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7 CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdmVjdG9yKF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg IGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9C dmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lz X2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9p bml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoK ICAgIH52ZWN0b3IoKSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9yPShjb25zdCB2ZWN0b3ImIF9f eCkgewogICAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAgICAgIGlmIChfX3gu c2l6ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBf TV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICB9CiAgICAgIGNvcHkoX194LmJlZ2luKCks IF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9IGJlZ2luKCkgKyBkaWZmZXJl bmNlX3R5cGUoX194LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoKCgoKICAg IHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9f biA+IHNpemUoKSkgewogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3Jh Z2UsIF9feCA/IH4wIDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX24gLSBzaXplKCksIF9f eCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbiwgZW5k KCkpOwogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/ IH4wIDogMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2lnbihzaXplX3QgX19uLCBib29s IF9feCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf SW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdl cjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2Fzc2lnbl9k aXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB0ZW1wbGF0 ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBf X24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAgeyBfTV9maWxsX2Fzc2lnbigo c2l6ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu cHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBfTV9hc3NpZ25fYXV4KF9fZmly c3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgICB0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRl cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7 CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19j dXIsICsrX19maXJzdCkKICAgICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgICAgaWYgKF9fZmly c3QgPT0gX19sYXN0KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgICAgIGVsc2UKICAg ICAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogICAgdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJ dGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19sZW4gPSAw OwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICAgICAgaWYgKF9fbGVu IDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGNvcHkoX19maXJzdCwgX19sYXN0LCBiZWdpbigpKSwg ZW5kKCkpOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlkID0gX19m aXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgICAgIGNvcHkoX19maXJz dCwgX19taWQsIGJlZ2luKCkpOwogICAgICAgIGluc2VydChlbmQoKSwgX19taWQsIF9fbGFzdCk7 CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikgewogICAgICBp ZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0 X2FsbG9jKF9fbik7CiAgICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRl cmF0b3IoX19xLCAwKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX3N0YXJ0 ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChf X24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgfQogICAgfQoKICAgIHJlZmVy ZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgZnJv bnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQogICAgcmVmZXJlbmNlIGJhY2soKSB7IHJl dHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyBy ZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgICB2b2lkIHB1c2hfYmFjayhib29sIF9feCkgewogICAg ICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UpCiAgICAgICAgKl9NX2Zp bmlzaCsrID0gX194OwogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194 KTsKICAgIH0KICAgIHZvaWQgc3dhcCh2ZWN0b3I8Ym9vbCwgX0FsbG9jPiYgX194KSB7CiAgICAg IHN0ZDo6c3dhcChfTV9zdGFydCwgX194Ll9NX3N0YXJ0KTsKICAgICAgc3RkOjpzd2FwKF9NX2Zp bmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICAgIHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwg X194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICAgIH0KICAgIGl0ZXJhdG9yIGluc2VydChpdGVyYXRv ciBfX3Bvc2l0aW9uLCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBkaWZmZXJlbmNlX3R5cGUg X19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBf TV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKQogICAgICAgICpfTV9maW5p c2grKyA9IF9feDsKICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwg X194KTsKICAgICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8 Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bv cywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3RydWVfdHlwZSkgewogICAgICBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOwog ICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5z ZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2luc2VydF9yYW5nZShf X3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAg IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGluc2VydChp dGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2lu dGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9pbnNl cnRfZGlzcGF0Y2goX19wb3NpdGlvbiwgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAg ICB9CgogICAgdm9pZCBfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5 cGUgX19uLCBib29sIF9feCkgewogICAgICBpZiAoX19uID09IDApIHJldHVybjsKICAgICAgaWYg KGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bv c2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAg IGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIGRpZmZlcmVuY2VfdHlwZShfX24pLCBfX3gp OwogICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAgfQogICAg ICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBf X24pOwogICAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAg ICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9f cSwgMCkpOwogICAgICAgIGZpbGxfbihfX2ksIF9fbiwgX194KTsKICAgICAgICBfTV9maW5pc2gg PSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kgKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAg ICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsg KF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAgX01fc3RhcnQgPSBp dGVyYXRvcihfX3EsIDApOwogICAgICB9CiAgICB9CgogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3Ig X19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAgX01fZmlsbF9pbnNl cnQoX19wb3NpdGlvbiwgX19uLCBfX3gpOwogICAgfQoKICAgIHZvaWQgcG9wX2JhY2soKSB7IC0t X01fZmluaXNoOyB9CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAg ICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAgICAgICBjb3B5KF9fcG9zaXRpb24g KyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgICAgLS1fTV9maW5pc2g7CiAgICAgIHJldHVy biBfX3Bvc2l0aW9uOwogICAgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwg aXRlcmF0b3IgX19sYXN0KSB7CiAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19sYXN0LCBlbmQoKSwg X19maXJzdCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQogICAgdm9pZCByZXNpemUoc2l6 ZV90eXBlIF9fbmV3X3NpemUsIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGlmIChfX25ld19z aXplIDwgc2l6ZSgpKQogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX19u ZXdfc2l6ZSksIGVuZCgpKTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwgX19uZXdf c2l6ZSAtIHNpemUoKSwgX194KTsKICAgIH0KICAgIHZvaWQgZmxpcCgpIHsKICAgICAgZm9yICh1 bnNpZ25lZCBpbnQqIF9fcCA9IF9NX3N0YXJ0Ll9NX3A7IF9fcCAhPSBfTV9lbmRfb2Zfc3RvcmFn ZTsgKytfX3ApCiAgICAgICAgKl9fcCA9IH4qX19wOwogICAgfQoKICAgIHZvaWQgY2xlYXIoKSB7 IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQogIH07CgoKdHlwZWRlZiB2ZWN0b3I8Ym9vbCwgYWxs b2M+IGJpdF92ZWN0b3I7Cgp9CiMgMzkgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvc3RkX3ZlY3Rvci5oIiAy IDMKIyA0NCAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCgoKbmFtZXNw YWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9jYWxlCiAgICBsb2Nh bGU6OmNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKQogICAgewogICAgICBsb2NhbGUgX19j b3B5KCp0aGlzKTsKICAgICAgX19jb3B5Ll9NX2ltcGwtPl9NX3JlcGxhY2VfZmFjZXQoX19vdGhl ci5fTV9pbXBsLCAmX0ZhY2V0OjppZCk7CiAgICAgIHJldHVybiBfX2NvcHk7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgYm9vbAogICAgbG9jYWxlOjpvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3QKICAgIHsK ICAgICAgdHlwZWRlZiBzdGQ6OmNvbGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsKICAgICAg Y29uc3QgX19jb2xsYXRlX3R5cGUqIF9fZmNvbGwgPSAmdXNlX2ZhY2V0PF9fY29sbGF0ZV90eXBl PigqdGhpcyk7CiAgICAgIHJldHVybiAoX19mY29sbC0+Y29tcGFyZShfX3MxLmRhdGEoKSwgX19z MS5kYXRhKCkgKyBfX3MxLmxlbmd0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19zMi5kYXRhKCksIF9fczIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0 KGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIHR5cGVkZWYgbG9jYWxlOjpfSW1wbDo6 X192ZWNfZmFjZXQgX192ZWNfZmFjZXQ7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9N X2luZGV4OwogICAgICBfX3ZlY19mYWNldCogX19mYWNldCA9IF9fbG9jLl9NX2ltcGwtPl9NX2Zh Y2V0czsKICAgICAgY29uc3QgbG9jYWxlOjpmYWNldCogX19mcCA9ICgqX19mYWNldClbX19pXTsK ICAgICAgaWYgKF9fZnAgPT0gMCB8fCBfX2kgPj0gX19mYWNldC0+c2l6ZSgpKQogICAgICAgIF9f dGhyb3dfYmFkX2Nhc3QoKTsKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IF9GYWNldCY+ KCpfX2ZwKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAg aGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCkKICAgIHsKICAgICAgdHlwZWRl ZiBsb2NhbGU6Ol9JbXBsOjpfX3ZlY19mYWNldCBfX3ZlY19mYWNldDsKICAgICAgc2l6ZV90IF9f aSA9IF9GYWNldDo6aWQuX01faW5kZXg7CiAgICAgIF9fdmVjX2ZhY2V0KiBfX2ZhY2V0ID0gX19s b2MuX01faW1wbC0+X01fZmFjZXRzOwogICAgICByZXR1cm4gKF9faSA8IF9fZmFjZXQtPnNpemUo KSAmJiAoKl9fZmFjZXQpW19faV0gIT0gMCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9Jbkl0ZXIsIHR5cGVuYW1lIF9DaGFyVD4KICAgIF9Jbkl0ZXIKICAgIF9fbWF0Y2hfcGFy YWxsZWwoX0luSXRlciBfX3MsIF9Jbkl0ZXIgX19lbmQsIGludCBfX250YXJncywKICAgICAgICAg ICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVD4qIF9fdGFyZ2V0cywKICAgICAg ICAgICAgICAgICAgICAgaW50KiBfX21hdGNoZXMsIGludCYgX19yZW1haW4sIGJvb2wmIF9fZW9m KQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7 CiAgICAgIF9fZW9mID0gZmFsc2U7CiAgICAgIGZvciAoaW50IF9fdGkgPSAwOyBfX3RpIDwgX19u dGFyZ3M7ICsrX190aSkKICAgICAgICBfX21hdGNoZXNbX190aV0gPSBfX3RpOwogICAgICBfX3Jl bWFpbiA9IF9fbnRhcmdzOwogICAgICBzaXplX3QgX19wb3MgPSAwOwogICAgICBkbwogICAgICAg IHsKICAgICAgICAgIGludCBfX3RpID0gMDsKICAgICAgICAgIHdoaWxlIChfX3RpIDwgX19yZW1h aW4gJiYgX19wb3MgPT0gX190YXJnZXRzW19fbWF0Y2hlc1tfX3RpXV0uc2l6ZSgpKQogICAgICAg ICAgICArK19fdGk7CiAgICAgICAgICBpZiAoX190aSA9PSBfX3JlbWFpbikKICAgICAgICAgICAg ewogICAgICAgICAgICAgIGlmIChfX3BvcyA9PSAwKSBfX3JlbWFpbiA9IDA7CiAgICAgICAgICAg ICAgcmV0dXJuIF9fczsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fcyA9PSBfX2VuZCkK ICAgICAgICAgICAgX19lb2YgPSB0cnVlOwogICAgICAgICAgYm9vbCBfX21hdGNoZWQgPSBmYWxz ZTsKICAgICAgICAgIGZvciAoaW50IF9fdGkyID0gMDsgX190aTIgPCBfX3JlbWFpbjsgKQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgX19zdHJpbmdfdHlwZSYgX190YXJnZXQgPSBf X3RhcmdldHNbX19tYXRjaGVzW19fdGkyXV07CiAgICAgICAgICAgICAgaWYgKF9fcG9zIDwgX190 YXJnZXQuc2l6ZSgpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoX19l b2YgfHwgX190YXJnZXRbX19wb3NdICE9ICpfX3MpCiAgICAgICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICAgX19tYXRjaGVzW19fdGkyXSA9IF9fbWF0Y2hlc1stLV9fcmVtYWlu XTsKICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgX19tYXRjaGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICArK19fdGkyOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19tYXRjaGVk KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKytfX3M7CiAgICAgICAgICAgICAgKytfX3Bv czsKICAgICAgICAgICAgfQogICAgICAgICAgZm9yIChpbnQgX190aTMgPSAwOyBfX3RpMyA8IF9f cmVtYWluOykKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX3BvcyA+IF9fdGFyZ2V0 c1tfX21hdGNoZXNbX190aTNdXS5zaXplKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgIF9fbWF0Y2hlc1tfX3RpM10gPSBfX21hdGNoZXNbLS1fX3JlbWFpbl07CiAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICsrX190 aTM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHdoaWxlIChfX3JlbWFpbik7CiAgICAg IHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9Gb3Jt YXRfY2FjaGU8X0NoYXJUPjo6X0Zvcm1hdF9jYWNoZSgpCiAgICA6IF9NX3ZhbGlkKHRydWUpLCBf TV91c2VfZ3JvdXBpbmcoZmFsc2UpCiAgICB7IH0KCiAgdGVtcGxhdGU8PgogICAgX0Zvcm1hdF9j YWNoZTxjaGFyPjo6X0Zvcm1hdF9jYWNoZSgpOwoKICB0ZW1wbGF0ZTw+CiAgICBfRm9ybWF0X2Nh Y2hlPHdjaGFyX3Q+OjpfRm9ybWF0X2NhY2hlKCk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIHZvaWQKICAgIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X01fcG9wdWxhdGUoaW9zX2Jh c2UmIF9faW8pCiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jICgpOwogICAg ICBudW1wdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFy VD4gPihfX2xvYyk7CiAgICAgIF9NX3RydWVuYW1lID0gX19ucC50cnVlbmFtZSgpOwogICAgICBf TV9mYWxzZW5hbWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICAgICBfTV90aG91c2FuZHNfc2VwID0g X19ucC50aG91c2FuZHNfc2VwKCk7CiAgICAgIF9NX2RlY2ltYWxfcG9pbnQgPSBfX25wLmRlY2lt YWxfcG9pbnQoKTsKICAgICAgX01fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIF9N X3VzZV9ncm91cGluZyA9IF9NX2dyb3VwaW5nLnNpemUoKSAhPSAwICYmIF9NX2dyb3VwaW5nLmRh dGEoKVswXSAhPSAwOwogICAgICBfTV92YWxpZCA9IHRydWU7CiAgICB9CgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgdm9pZAogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjoKICAg IF9TX2NhbGxiYWNrKGlvc19iYXNlOjpldmVudCBfX2V2LCBpb3NfYmFzZSYgX19pb3MsIGludCBf X2l4KSB0aHJvdygpCiAgICB7CiAgICAgIHZvaWQqJiBfX3AgPSBfX2lvcy5wd29yZChfX2l4KTsK ICAgICAgc3dpdGNoIChfX2V2KQogICAgICAgIHsKICAgICAgICBjYXNlIGlvc19iYXNlOjplcmFz ZV9ldmVudDoKICAgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxfRm9ybWF0X2NhY2hlPF9DaGFy VD4qPihfX3ApOwogICAgICAgICAgX19wID0gMDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNh c2UgaW9zX2Jhc2U6OmNvcHlmbXRfZXZlbnQ6CgogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsg X19wID0gbmV3IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjsgfQogICAgICAgICAgY2F0Y2goLi4uKQog ICAgICAgICAgICB7IH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgaW9zX2Jhc2U6Omlt YnVlX2V2ZW50OgogICAgICAgICAgc3RhdGljX2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4o X19wKS0+X01fdmFsaWQgPSBmYWxzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kgog ICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19nZXQoaW9zX2Jhc2UmIF9faW9zKQogICAgewog ICAgICBpZiAoIV9TX3B3b3JkX2l4KQogICAgICAgIF9TX3B3b3JkX2l4ID0gaW9zX2Jhc2U6Onhh bGxvYygpOwogICAgICB2b2lkKiYgX19wID0gX19pb3MucHdvcmQoX1NfcHdvcmRfaXgpOwoKCiAg ICAgIGlmIChfX3AgPT0gMCkKICAgICAgICB7CiAgICAgICAgICBhdXRvX3B0cjxfRm9ybWF0X2Nh Y2hlPF9DaGFyVD4gPiBfX2FwKG5ldyBfRm9ybWF0X2NhY2hlPF9DaGFyVD4pOwogICAgICAgICAg X19pb3MucmVnaXN0ZXJfY2FsbGJhY2soJl9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X1NfY2FsbGJh Y2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19wd29yZF9peCk7CiAgICAg ICAgICBfX3AgPSBfX2FwLnJlbGVhc2UoKTsKICAgICAgICB9CiAgICAgIF9Gb3JtYXRfY2FjaGU8 X0NoYXJUPiogX19uY3AgPSBzdGF0aWNfY2FzdDxfRm9ybWF0X2NhY2hlPF9DaGFyVD4qPihfX3Ap OwogICAgICBpZiAoIV9fbmNwLT5fTV92YWxpZCkKICAgICAgICBfX25jcC0+X01fcG9wdWxhdGUo X19pb3MpOwoKICAgICAgcmV0dXJuIF9fbmNwOwogICAgfQojIDI1MCAiL2hvbWU1L2tyYWtvdy9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0 cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX0luSXRlcj4KICAgIHZvaWQKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBf TV9leHRyYWN0KF9Jbkl0ZXIgLCBfSW5JdGVyICwgaW9zX2Jhc2UmICwKICAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmICwgY2hhciogLAogICAgICAgICAgICAgICBpbnQmICwgYm9vbCAp IGNvbnN0CiAgICB7CgogICAgfQoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBudW1fZ2V0PGNo YXIsIGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcj4gPjo6CiAgICBfTV9leHRyYWN0KGlzdHJlYW1i dWZfaXRlcmF0b3I8Y2hhcj4gX19iZWcsCiAgICAgICAgICAgICAgIGlzdHJlYW1idWZfaXRlcmF0 b3I8Y2hhcj4gX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIGNoYXIqIF9feHRyYywgaW50JiBfX2Jhc2UsCiAgICAgICAgICAgICAg IGJvb2wgX19mcCkgY29uc3Q7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg IGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s CiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0CiAg ICB7CgogICAgICBpZiAoIShfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSkKICAg ICAgICB7CgoKCgoKCiAgICAgICAgICBjaGFyIF9feHRyY1szMl0gPSB7J1wwJ307CiAgICAgICAg ICBpbnQgX19iYXNlOwogICAgICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9f ZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgICAgICBjaGFyKiBfX3Nhbml0eTsK ICAgICAgICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7CiAgICAgICAgICBsb25nIF9fbCA9IHN0cnRv bChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgICAgIGlmICghKF9fZXJyICYgaW9z X2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgJiYgX19sIDw9IDEKICAgICAgICAgICAgICAm JiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCooX19fZXJybm8o KSkpID09IDApCiAgICAgICAgICAgIF9fdiA9IF9fbDsKICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIGVsc2UKICAg ICAgICB7CiAgICAgICAgICB0eXBlZGVmIF9Gb3JtYXRfY2FjaGU8Y2hhcl90eXBlPiBfX2ZjYWNo ZV90eXBlOwogICAgICAgICAgX19mY2FjaGVfdHlwZSogX19mbXQgPSBfX2ZjYWNoZV90eXBlOjpf U19nZXQoX19pbyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdHJ1ZSA9IF9fZm10LT5f TV90cnVlbmFtZS5jX3N0cigpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2ZhbHNlID0g X19mbXQtPl9NX2ZhbHNlbmFtZS5jX3N0cigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdHJ1 ZWxlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX3RydWUpIC0gMTsKICAgICAgICAgIGNvbnN0 IHNpemVfdCBfX2ZhbHNlbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fZmFsc2UpIC0gMTsK CiAgICAgICAgICBmb3IgKHNpemVfdCBfX3BvcyA9IDA7IF9fYmVnICE9IF9fZW5kOyArK19fcG9z KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZysrOwog ICAgICAgICAgICAgIGJvb2wgX190ZXN0ZiA9IF9fYyA9PSBfX2ZhbHNlW19fcG9zXTsKICAgICAg ICAgICAgICBib29sIF9fdGVzdHQgPSBfX2MgPT0gX190cnVlW19fcG9zXTsKICAgICAgICAgICAg ICBpZiAoIShfX3Rlc3RmIHx8IF9fdGVzdHQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0ZiAmJiBf X3BvcyA9PSBfX2ZhbHNlbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBf X3YgPSAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICBlbHNlIGlmIChfX3Rlc3R0ICYmIF9fcG9zID09IF9fdHJ1ZWxlbikKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192ID0gMTsKICAgICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX2JlZyA9 PSBfX2VuZCkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgICB9 CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0 ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh c2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzaG9ydCYgX192 KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50 IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0 cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKihfX19l cnJubygpKSkgPSAwOwogICAgICBsb25nIF9fbCA9IHN0cnRvbChfX3h0cmMsICZfX3Nhbml0eSwg X19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAg ICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKihfX19lcnJu bygpKSkgPT0gMAogICAgICAgICAgJiYgX19sID49ICgtMzI3NjctMSkgJiYgX19sIDw9IDMyNzY3 KQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHNob3J0PihfX2wpOwogICAgICBlbHNlCiAgICAg ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0 ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9f YmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwgaW50JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194 dHJjWzMyXSA9IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2Jl ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNo YXIqIF9fc2FuaXR5OwogICAgICAoKihfX19lcnJubygpKSkgPSAwOwogICAgICBsb25nIF9fbCA9 IHN0cnRvbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBp b3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19z YW5pdHkgPT0gJ1wwJyAmJiAoKihfX19lcnJubygpKSkgPT0gMAogICAgICAgICAgJiYgX19sID49 ICgtMjE0NzQ4MzY0NyAtMSkgJiYgX19sIDw9IDIxNDc0ODM2NDcpCiAgICAgICAgX192ID0gc3Rh dGljX2Nhc3Q8aW50PihfX2wpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6 OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy VCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxv bmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAg ICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vy ciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAg KCooX19fZXJybm8oKSkpID0gMDsKICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19z YW5pdHksIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAg ICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCoo X19fZXJybm8oKSkpID09IDApCiAgICAgICAgX192ID0gX19sOwogICAgICBlbHNlCiAgICAgICAg X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CiMg NDUwICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzMuMC9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxf Q2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1sz Ml09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19l bmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9f c2FuaXR5OwogICAgICAoKihfX19lcnJubygpKSkgPSAwOwogICAgICB1bnNpZ25lZCBsb25nIF9f dWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2Vy ciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYm ICpfX3Nhbml0eSA9PSAnXDAnICYmICgqKF9fX2Vycm5vKCkpKSA9PSAwCiAgICAgICAgICAmJiBf X3VsIDw9IDY1NTM1KQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pihf X3VsKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAg ICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Ogog ICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p bywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192 KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50 IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0 cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKihfX19l cnJubygpKSkgPSAwOwogICAgICB1bnNpZ25lZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywg Jl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0 KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYm ICgqKF9fX2Vycm5vKCkpKSA9PSAwCiAgICAgICAgICAmJiBfX3VsIDw9ICgyMTQ3NDgzNjQ3ICog MlUgKyAxKSkKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fdWwpOwog ICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1 cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu SXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19n ZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25z dAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl0gPSB7J1wwJ307CiAgICAgIGludCBfX2Jh c2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBf X2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCooX19fZXJybm8o KSkpID0gMDsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsID0gc3RydG91bChfX3h0cmMsICZfX3Nh bml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAg ICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKihf X19lcnJubygpKSkgPT0gMCkKICAgICAgICBfX3YgPSBfX3VsOwogICAgICBlbHNlCiAgICAgICAg X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CiMg NTU4ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzMuMC9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxf Q2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCBmbG9hdCYgX192KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAn fTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8s IF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgdHJ1ZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAg ICAgICgqKF9fX2Vycm5vKCkpKSA9IDA7CgoKCiAgICAgIGZsb2F0IF9fZiA9IHN0YXRpY19jYXN0 PGZsb2F0PihzdHJ0b2QoX194dHJjLCAmX19zYW5pdHkpKTsKCiAgICAgIGlmICghKF9fZXJyICYg aW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9f c2FuaXR5ID09ICdcMCcgJiYgKCooX19fZXJybm8oKSkpID09IDApCiAgICAgICAgX192ID0gX19m OwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICBy ZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBk b19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAg ICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwog ICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNl LCB0cnVlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCooX19fZXJybm8oKSkpID0g MDsKICAgICAgZG91YmxlIF9fZCA9IHN0cnRvZChfX3h0cmMsICZfX3Nhbml0eSk7CiAgICAgIGlm ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBf X3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCooX19fZXJybm8oKSkpID09IDApCiAgICAg ICAgX192ID0gX19kOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi aXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CiMgNjQxICIvaG9tZTUva3Jha293L2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL2xv Y2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf SW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRv X2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25z dAogICAgewoKICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7 CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jh c2UsIHRydWUpOwoKCiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8u ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgIGNvbnN0IGNoYXIqIF9fY29udjsK ICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpvY3QpCiAgICAgICAgX19jb252ID0g IiVMbyI7CiAgICAgIGVsc2UgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpCiAgICAg ICAgX19jb252ID0gIiVMWCI7CiAgICAgIGVsc2UgaWYgKF9fYmFzZWZpZWxkID09IDApCiAgICAg ICAgX19jb252ID0gIiVMaSI7CiAgICAgIGVsc2UKICAgICAgICBfX2NvbnYgPSAiJUxnIjsKCgog ICAgICBsb25nIGRvdWJsZSBfX2xkOwogICAgICBpbnQgX19wID0gc3NjYW5mKF9feHRyYywgX19j b252LCAmX19sZCk7CiAgICAgIGlmIChfX3AKICAgICAgICAgICYmIHN0YXRpY19jYXN0PHR5cGVu YW1lIF9fdHJhaXRzX3R5cGU6OmludF90eXBlPihfX3ApCiAgICAgICAgIT0gX190cmFpdHNfdHlw ZTo6ZW9mKCkpCiAgICAgICAgX192ID0gX19sZDsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9 IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm IF9fZXJyLCB2b2lkKiYgX192KSBjb25zdAogICAgewoKICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6 Zm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygpOwog ICAgICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6 OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVy Y2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbXQgJiBfX2Zt dG1hc2sgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwoKCgoKICAgICAg Y2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJh Y3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgog ICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCooX19fZXJybm8oKSkpID0gMDsKICAgICAgdm9p ZCogX192cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0cnRvdWwoX194dHJjLCAmX19zYW5p dHksIF9fYmFzZSkpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAg ICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqKF9f X2Vycm5vKCkpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fdnA7CiAgICAgIGVsc2UKICAgICAgICBf X2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCgogICAgICBfX2lvLmZsYWdzKF9fZm10KTsKICAg ICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX091dEl0ZXI+CiAgICBpbmxpbmUgX091dEl0ZXIKICAgIF9fcGFkKF9PdXRJdGVyIF9f cywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZyk7CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9SYUl0ZXI+CiAgICBfUmFJdGVyCiAgICBfX3BhZChfUmFJdGVyIF9f cywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZywKICAgICAgICAgIHJhbmRvbV9hY2Nlc3Nf aXRlcmF0b3JfdGFnKQogICAgewogICAgICBmaWxsX24oX19zLCBfX2ZpbGwpOwogICAgICByZXR1 cm4gX19zICsgX19wYWRkaW5nOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfT3V0SXRlciwgdHlwZW5hbWUgX1RhZz4KICAgIF9PdXRJdGVyCiAgICBfX3BhZChf T3V0SXRlciBfX3MsIF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcsIF9UYWcpCiAgICB7CiAg ICAgIHdoaWxlICgtLV9fcGFkZGluZyA+PSAwKSB7ICpfX3MgPSBfX2ZpbGw7ICsrX19zOyB9CiAg ICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9PdXRJdGVyPgogICAgaW5saW5lIF9PdXRJdGVyCiAgICBfX3BhZChfT3V0SXRlciBfX3Ms IF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcpCiAgICB7CiAgICAgIHJldHVybiBfX3BhZChf X3MsIF9fZmlsbCwgX19wYWRkaW5nLAogICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9PdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7CiAgICB9CgogIHRlbXBs YXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAg IF9fcGFkX251bWVyaWMoX091dEl0ZXIgX19zLCBpb3NfYmFzZTo6Zm10ZmxhZ3MgLAogICAgICAg ICAgICAgICAgICBfQ2hhclQgLCBpbnQgLAogICAgICAgICAgICAgICAgICBfQ2hhclQgY29uc3Qq ICwgX0NoYXJUIGNvbnN0KiAsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogKQogIHsK CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJUPgog ICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+CiAgICBfX3BhZF9udW1lcmljKG9zdHJlYW1i dWZfaXRlcmF0b3I8X0NoYXJUPiBfX3MsIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzLAogICAg ICAgICAgICAgICAgICBfQ2hhclQgX19maWxsLCBpbnQgX193aWR0aCwgX0NoYXJUIGNvbnN0KiBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICBfQ2hhclQgY29uc3QqIF9fbWlkZGxlLCBfQ2hhclQg Y29uc3QqIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9D aGFyVD4gX19vdXRfaXRlcjsKICAgICAgaW50IF9fcGFkZGluZyA9IF9fd2lkdGggLSAoX19sYXN0 IC0gX19maXJzdCk7CiAgICAgIGlmIChfX3BhZGRpbmcgPCAwKQogICAgICAgIF9fcGFkZGluZyA9 IDA7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2FmbGFncyA9IF9fZmxhZ3MgJiBpb3NfYmFz ZTo6YWRqdXN0ZmllbGQ7CiAgICAgIGJvb2wgX190ZXN0ZmllbGQgPSBfX3BhZGRpbmcgPT0gMCB8 fCBfX2FmbGFncyA9PSBpb3NfYmFzZTo6bGVmdAogICAgICAgICAgICAgICAgICAgICAgICAgfHwg X19hZmxhZ3MgPT0gaW9zX2Jhc2U6OmludGVybmFsOwoKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9f bWlkZGxlKQogICAgICAgIHsKICAgICAgICAgIGlmICghX190ZXN0ZmllbGQpCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAgICAg ICAgICBfX3BhZGRpbmcgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICBjb3B5KF9fZmlyc3Qs IF9fbWlkZGxlLCBfX3MpOwogICAgICAgIH0KICAgICAgX19vdXRfaXRlciBfX3MyID0gX19zOwoK ICAgICAgaWYgKF9fcGFkZGluZyAmJiBfX2FmbGFncyAhPSBpb3NfYmFzZTo6bGVmdCkKICAgICAg ICB7CiAgICAgICAgICBfX3BhZChfX3MyLCBfX2ZpbGwsIF9fcGFkZGluZyk7CiAgICAgICAgICBf X3BhZGRpbmcgPSAwOwogICAgICAgIH0KICAgICAgX19vdXRfaXRlciBfX3MzID0gY29weShfX21p ZGRsZSwgX19sYXN0LCBfX3MyKTsKICAgICAgaWYgKF9fcGFkZGluZykKICAgICAgICBfX3BhZChf X3MzLCBfX2ZpbGwsIF9fcGFkZGluZyk7CiAgICAgIHJldHVybiBfX3MzOwogICAgfQoKICB0ZW1w bGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAg ICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBp b3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICB7CiAg ICAgIGNvbnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0X2NhY2hlPF9D aGFyVD46Ol9TX2dldChfX2lvKTsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBf X2lvLmZsYWdzKCk7CgogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9 PSAwKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAgICAg ICAgIHJldHVybiBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19pbywgX19maWxsLCBmYWxzZSwgX191 dik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgY29uc3QgY2hhcl90 eXBlKiBfX2ZpcnN0OwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2xhc3Q7CiAgICAgICAg ICBpZiAoX192KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19maXJzdCA9IF9fZm10LT5f TV90cnVlbmFtZS5kYXRhKCk7CiAgICAgICAgICAgICAgX19sYXN0ID0gX19maXJzdCArIF9fZm10 LT5fTV90cnVlbmFtZS5zaXplKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgewogICAgICAgICAgICAgIF9fZmlyc3QgPSBfX2ZtdC0+X01fZmFsc2VuYW1lLmRhdGEo KTsKICAgICAgICAgICAgICBfX2xhc3QgPSBfX2ZpcnN0ICsgX19mbXQtPl9NX2ZhbHNlbmFtZS5z aXplKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Mp OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKCgogIHRlbXBsYXRlIDx0eXBl bmFtZSBfQ2hhclQ+CiAgICBfQ2hhclQqCiAgICBfX2dyb3VwX2RpZ2l0cyhfQ2hhclQqIF9fcywg X0NoYXJUIF9fZ3JzZXAsIGNoYXIgY29uc3QqIF9fZ3JvdXBpbmcsCiAgICAgICAgICAgICAgICAg ICAgY2hhciBjb25zdCogX19ncmVuZCwgX0NoYXJUIGNvbnN0KiBfX2ZpcnN0LAogICAgICAgICAg ICAgICAgICAgIF9DaGFyVCBjb25zdCogX19sYXN0KQogICAgewogICAgICBpZiAoX19sYXN0IC0g X19maXJzdCA+ICpfX2dyb3VwaW5nKQogICAgICAgIHsKICAgICAgICAgIF9fcyA9IF9fZ3JvdXBf ZGlnaXRzKF9fcywgX19ncnNlcCwKICAgICAgICAgICAgICAoX19ncm91cGluZyArIDEgPT0gX19n cmVuZCA/IF9fZ3JvdXBpbmcgOiBfX2dyb3VwaW5nICsgMSksCiAgICAgICAgICAgICAgX19ncmVu ZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ3JvdXBpbmcpOwogICAgICAgICAgX19maXJzdCA9IF9f bGFzdCAtICpfX2dyb3VwaW5nOwogICAgICAgICAgKl9fcysrID0gX19ncnNlcDsKICAgICAgICB9 CiAgICAgIGRvCiAgICAgICAgewogICAgICAgICAgKl9fcysrID0gKl9fZmlyc3QrKzsKICAgICAg ICB9CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCk7CiAgICAgIHJldHVybiBfX3M7CiAg ICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyLCB0eXBl bmFtZSBfVmFsdWVUPgogICAgX091dEl0ZXIKICAgIF9fb3V0cHV0X2ludGVnZXIoX091dEl0ZXIg X19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgYm9vbCBfX25lZywKICAgICAgICAg ICAgICBfVmFsdWVUIF9fdikKICAgIHsKCiAgICAgIGNvbnN0IGxvbmcgX01fcm9vbSA9IG51bWVy aWNfbGltaXRzPF9WYWx1ZVQ+OjpkaWdpdHMxMCAqIDIgKyA0OwogICAgICBfQ2hhclQgX19kaWdp dHNbX01fcm9vbV07CiAgICAgIF9DaGFyVCogX19mcm9udCA9IF9fZGlnaXRzICsgX01fcm9vbTsK ICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7CiAgICAgIGNv bnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0X2NhY2hlPF9DaGFyVD46 Ol9TX2dldChfX2lvKTsKICAgICAgY2hhciBjb25zdCogX190YWJsZSA9IF9fZm10LT5fU19saXRl cmFscyArIF9fZm10LT5fU19kaWdpdHM7CgogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNl ZmllbGQgPSAoX19mbGFncyAmIF9faW8uYmFzZWZpZWxkKTsKICAgICAgX0NoYXJUKiBfX3NpZ25f ZW5kID0gX19mcm9udDsKICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpCiAg ICAgICAgewogICAgICAgICAgaWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6dXBwZXJjYXNlKQogICAg ICAgICAgICBfX3RhYmxlICs9IDE2OwogICAgICAgICAgZG8KICAgICAgICAgICAgKi0tX19mcm9u dCA9IF9fdGFibGVbX192ICYgMTVdOwogICAgICAgICAgd2hpbGUgKChfX3YgPj49IDQpICE9IDAp OwogICAgICAgICAgX19zaWduX2VuZCA9IF9fZnJvbnQ7CiAgICAgICAgICBpZiAoX19mbGFncyAm IGlvc19iYXNlOjpzaG93YmFzZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICotLV9fZnJv bnQgPSBfX2ZtdC0+X1NfbGl0ZXJhbHNbX19mbXQtPl9TX3ggKwogICAgICAgICAgICAgICAgICAg ICAgICgoX19mbGFncyAmIGlvc19iYXNlOjp1cHBlcmNhc2UpID8gMSA6IDApXTsKICAgICAgICAg ICAgICAqLS1fX2Zyb250ID0gX190YWJsZVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCkKICAgICAgICB7CiAgICAg ICAgICBkbwogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVtfX3YgJiA3XTsKICAgICAg ICAgIHdoaWxlICgoX192ID4+PSAzKSAhPSAwKTsKICAgICAgICAgIGlmIChfX2ZsYWdzICYgaW9z X2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8Y2hhcj4oKl9fZnJv bnQpICE9IF9fdGFibGVbMF0pCiAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlWzBdOwog ICAgICAgICAgX19zaWduX2VuZCA9IF9fZnJvbnQ7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg ICAgewoKICAgICAgICAgIGRvCiAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlW19fdiAl IDEwXTsKICAgICAgICAgIHdoaWxlICgoX192IC89IDEwKSAhPSAwKTsKICAgICAgICAgIF9fc2ln bl9lbmQgPSBfX2Zyb250OwoKICAgICAgICAgIGlmIChfX25lZyB8fCAoX19mbGFncyAmIGlvc19i YXNlOjpzaG93cG9zKSkKICAgICAgICAgICAgKi0tX19mcm9udCA9IF9fZm10LT5fU19saXRlcmFs c1tfX2ZtdC0+X1NfcGx1cyAtIF9fbmVnXTsKICAgICAgICB9CgoKICAgICAgaWYgKCFfX2ZtdC0+ X01fdXNlX2dyb3VwaW5nICYmICFfX2lvLndpZHRoKCkpCiAgICAgICAgcmV0dXJuIGNvcHkoX19m cm9udCwgX19kaWdpdHMgKyBfTV9yb29tLCBfX3MpOwoKICAgICAgaWYgKCFfX2ZtdC0+X01fdXNl X2dyb3VwaW5nKQogICAgICAgIHJldHVybiBfX3BhZF9udW1lcmljKF9fcywgX19mbGFncywgX19m aWxsLCBfX2lvLndpZHRoKDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnJvbnQs IF9fc2lnbl9lbmQsIF9fZGlnaXRzICsgX01fcm9vbSk7CgogICAgICBfQ2hhclQqIF9fcCA9IF9f ZGlnaXRzOwogICAgICB3aGlsZSAoX19mcm9udCA8IF9fc2lnbl9lbmQpCiAgICAgICAgKl9fcCsr ID0gKl9fZnJvbnQrKzsKICAgICAgY29uc3QgY2hhciogX19nciA9IF9fZm10LT5fTV9ncm91cGlu Zy5kYXRhKCk7CiAgICAgIF9fZnJvbnQgPSBfX2dyb3VwX2RpZ2l0cyhfX3AsIF9fZm10LT5fTV90 aG91c2FuZHNfc2VwLCBfX2dyLAogICAgICAgIF9fZ3IgKyBfX2ZtdC0+X01fZ3JvdXBpbmcuc2l6 ZSgpLCBfX3NpZ25fZW5kLCBfX2RpZ2l0cyArIF9NX3Jvb20pOwogICAgICByZXR1cm4gX19wYWRf bnVtZXJpYyhfX3MsIF9fZmxhZ3MsIF9fZmlsbCwgX19pby53aWR0aCgwKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19kaWdpdHMsIF9fcCwgX19mcm9udCk7CiAgICB9CgogIHRlbXBsYXRl IDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51 bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i YXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsKICAgICAg dW5zaWduZWQgbG9uZyBfX3V2ID0gX192OwogICAgICBib29sIF9fbmVnID0gZmFsc2U7CiAgICAg IGlmIChfX3YgPCAwKQogICAgICAgIHsKICAgICAgICAgIF9fbmVnID0gdHJ1ZTsKICAgICAgICAg IF9fdXYgPSAtX191djsKICAgICAgICB9CiAgICAgIHJldHVybiBfX291dHB1dF9pbnRlZ2VyKF9f cywgX19pbywgX19maWxsLCBfX25lZywgX191dik7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0No YXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lv LCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25zdAog ICAgeyByZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFsc2UsIF9f dik7IH0KIyA5NjcgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9PdXRJdGVy PgogICAgX091dEl0ZXIKICAgIF9fb3V0cHV0X2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2Um IF9faW8sIF9DaGFyVCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19z cHRyLCBzaXplX3QgX19zbGVuKQogICAgewoKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIG9zdHJlYW1idWZf aXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPgogICAgX19vdXRwdXRfZmxvYXQob3N0cmVhbWJ1Zl9p dGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fcywgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg ICAgICAgICBfQ2hhclQgX19maWxsLCBjb25zdCBjaGFyKiBfX3NwdHIsIHNpemVfdCBfX3NsZW4p CiAgICB7CiAgICAgIHNpemVfdCBfX3BhZGRpbmcgPSBfX2lvLndpZHRoKCkgPiBzdHJlYW1zaXpl KF9fc2xlbikgPwogICAgICAgICAgICAgICAgICAgICAgICAgX19pby53aWR0aCgpIC1fX3NsZW4g OiAwOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hh clQ+IGNvbnN0JiBfX2N0ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAg IGlvc19iYXNlOjpmbXRmbGFncyBfX2FkamZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6 OmFkanVzdGZpZWxkOwogICAgICBjb25zdCBjaGFyKiBjb25zdCBfX2VwdHIgPSBfX3NwdHIgKyBf X3NsZW47CgogICAgICBpZiAoX19hZGpmaWVsZCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwpCiAgICAg ICB7CgogICAgICAgICBpZiAoX19zcHRyIDwgX19lcHRyICYmICgqX19zcHRyID09ICcrJyB8fCAq X19zcHRyID09ICctJykpCiAgICAgICAgICAgewogICAgICAgICAgICAgX19zID0gX19jdC53aWRl bigqX19zcHRyKTsKICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgKytfX3NwdHI7CiAg ICAgICAgICAgfQogICAgICAgICBfX3MgPSBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsK ICAgICAgICAgX19wYWRkaW5nID0gMDsKICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19hZGpmaWVs ZCAhPSBpb3NfYmFzZTo6bGVmdCkKICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfX3BhZChfX3Ms IF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAgfQoK ICAgICAgY2hhciBfX2RlY2ltYWxfcG9pbnQgPSAqKGxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9wb2lu dCk7CiAgICAgIGNvbnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0X2Nh Y2hlPF9DaGFyVD46Ol9TX2dldChfX2lvKTsKICAgICAgZm9yICg7IF9fc3B0ciAhPSBfX2VwdHI7 ICsrX19zLCArK19fc3B0cikKICAgICAgIHsKCiAgICAgICAgIGlmICgqX19zcHRyID09IF9fZGVj aW1hbF9wb2ludCkKICAgICAgICAgICBfX3MgPSBfX2ZtdC0+X01fZGVjaW1hbF9wb2ludDsKCiAg ICAgICAgIGVsc2UKICAgICAgICAgICBfX3MgPSBfX2N0LndpZGVuKCpfX3NwdHIpOwogICAgICAg fQoKICAgICAgaWYgKF9fcGFkZGluZykKICAgICAgICBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRk aW5nKTsKICAgICAgX19pby53aWR0aCgwKTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgYm9v bAogIF9fYnVpbGRfZmxvYXRfZm9ybWF0KGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNo YXIgX19tb2RpZmllciwKICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7 CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091 dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlw ZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25z dAogICAgewogICAgICBjb25zdCBzdHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmljX2xpbWl0 czxkb3VibGU+OjpkaWdpdHMxMCArIDM7CiAgICAgIHN0cmVhbXNpemUgX19wcmVjID0gX19pby5w cmVjaXNpb24oKTsKCiAgICAgIGlmIChfX3ByZWMgPiBfX21heF9wcmVjKQogICAgICAgIF9fcHJl YyA9IF9fbWF4X3ByZWM7CgogICAgICBjaGFyIF9fc2J1ZltfX21heF9wcmVjICogMl07CiAgICAg IHNpemVfdCBfX3NsZW47CgogICAgICBjaGFyIF9fZmJ1ZlsxNl07CiAgICAgIGlmIChfX2J1aWxk X2Zsb2F0X2Zvcm1hdChfX2lvLCBfX2ZidWYsIDAsIF9fcHJlYykpCiAgICAgICAgX19zbGVuID0g c3ByaW50ZihfX3NidWYsIF9fZmJ1ZiwgX19wcmVjLCBfX3YpOwogICAgICBlbHNlCiAgICAgICAg X19zbGVuID0gc3ByaW50ZihfX3NidWYsIF9fZmJ1ZiwgX192KTsKCiAgICAgIHJldHVybiBfX291 dHB1dF9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwgX19zYnVmLCBfX3NsZW4pOwogICAgfQoKICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVy CiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19z LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJs ZSBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19tYXhfcHJlYyA9IG51 bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6ZGlnaXRzMTAgKyAzOwogICAgICBzdHJlYW1zaXpl IF9fcHJlYyA9IF9faW8ucHJlY2lzaW9uKCk7CgogICAgICBpZiAoX19wcmVjID4gX19tYXhfcHJl YykKICAgICAgICBfX3ByZWMgPSBfX21heF9wcmVjOwoKICAgICAgY2hhciBfX3NidWZbX19tYXhf cHJlYyAqIDJdOwogICAgICBzaXplX3QgX19zbGVuOwoKICAgICAgY2hhciBfX2ZidWZbMTZdOwoK ICAgICAgaWYgKF9fYnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgJ0wnLCBfX3ByZWMp KQogICAgICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fcHJlYywgX192KTsK ICAgICAgZWxzZQogICAgICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fdik7 CgogICAgICByZXR1cm4gX19vdXRwdXRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fc2J1Ziwg X19zbGVuKTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091 dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBk b19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAg ICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGlvc19i YXNlOjpmbXRmbGFncyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdz KCk7CiAgICAgIGZtdGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3Nf YmFzZTo6YmFzZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6 dXBwZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZtdCAm IF9fZm10bWFzayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7CiAgICAg IHRyeSB7CiAgICAgICAgX091dEl0ZXIgX19zMiA9IF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2lv LCBfX2ZpbGwsIGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRl cnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICBfX2lvLmZsYWdzKF9fZm10 KTsKICAgICAgICByZXR1cm4gX19zMjsKICAgICAgfQogICAgICBjYXRjaCAoLi4uKSB7CiAgICAg ICAgX19pby5mbGFncyhfX2ZtdCk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgIH0KCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0R1bW15ID0gaW50PgogICAgc3Ry dWN0IF9XZWVrZGF5bmFtZXM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIHN0cnVj dCBfV2Vla2RheW5hbWVzPGNoYXIsIF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0IGNoYXIqIGNv bnN0IF9TX25hbWVzWzE0XTsgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgY29u c3QgY2hhciogY29uc3QKICAgIF9XZWVrZGF5bmFtZXM8Y2hhciwgX0R1bW15Pjo6X1NfbmFtZXNb MTRdID0KICAgIHsKICAgICAgIlN1biIsICJTdW5kYXkiLAogICAgICAiTW9uIiwgIk1vbmRheSIs ICJUdWUiLCAiVHVlc2RheSIsICJXZWQiLCAiV2VkbmVzZGF5IiwKICAgICAgIlRodSIsICJUaHVy c2RheSIsICJGcmkiLCAiRnJpZGF5IiwgIlNhdCIsICJTYXR1cmRheSIKICAgIH07CiMgMTEzNSAi L2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAv aW5jbHVkZS9nKysvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX0R1bW15ID0gaW50PgogICAgc3RydWN0IF9Nb250aG5hbWVzOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBzdHJ1Y3QgX01vbnRobmFtZXM8Y2hhcixf RHVtbXk+CiAgICB7IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBfU19uYW1lc1syNF07IH07Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIGNvbnN0IGNoYXIqIGNvbnN0CiAgICBfTW9u dGhuYW1lczxjaGFyLF9EdW1teT46Ol9TX25hbWVzWzI0XSA9CiAgICB7CiAgICAgICJKYW4iLCAi SmFudWFyeSIsICJGZWIiLCAiRmVicnVhcnkiLCAiTWFyIiwgIk1hcmNoIiwKICAgICAgIkFwciIs ICJBcHJpbCIsICJNYXkiLCAiTWF5IiwgIkp1biIsICJKdW5lIiwKICAgICAgIkp1bCIsICJKdWx5 IiwgIkF1ZyIsICJBdWd1c3QiLCAiU2VwIiwgIlNlcHRlbWJlciIsCiAgICAgICJPY3QiLCAiT2N0 b2JlciIsICJOb3YiLCAiTm92ZW1iZXIiLCAiRGVjIiwgIkRlY2VtYmVyIgogICAgfTsKIyAxMTY4 ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMu MC9pbmNsdWRlL2crKy9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0No YXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUgX19zLCBpdGVyX3R5 cGUgX19lbmQsCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdAogICAgewogICAgICBpZiAoIV9NX2RheW5hbWVz KQogICAgICAgIHsKICAgICAgICAgIF9NX2RheW5hbWVzID0gbmV3IGJhc2ljX3N0cmluZzxfQ2hh clQ+WzE0XTsKICAgICAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IDE0OyArK19faSkKICAg ICAgICAgICAgX01fZGF5bmFtZXNbX19pXSA9IF9XZWVrZGF5bmFtZXM8X0NoYXJUPjo6X1NfbmFt ZXNbX19pXTsKICAgICAgICB9CiAgICAgIGJvb2wgX19hdF9lb2YgPSBmYWxzZTsKICAgICAgaW50 IF9fcmVtYWluID0gMDsKICAgICAgaW50IF9fbWF0Y2hlc1sxNF07CiAgICAgIGl0ZXJfdHlwZSBf X291dCA9IF9fbWF0Y2hfcGFyYWxsZWwoX19zLCBfX2VuZCwgMTQsIF9NX2RheW5hbWVzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWF0Y2hlcywgX19yZW1haW4s IF9fYXRfZW9mKTsKICAgICAgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZSgwKTsKICAgICAgaWYg KF9fYXRfZW9mKSBfX2VyciB8PSBfX2lvLmVvZmJpdDsKICAgICAgaWYgKF9fcmVtYWluID09IDEg fHwKICAgICAgICAgIF9fcmVtYWluID09IDIgJiYgKF9fbWF0Y2hlc1swXT4+MSkgPT0gKF9fbWF0 Y2hlc1sxXT4+MSkpCiAgICAgICAgX190LT50bV93ZGF5ID0gKF9fbWF0Y2hlc1swXT4+MSk7CiAg ICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBfX2lvLmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX291 dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog ICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfbW9u dGhuYW1lKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAgICAg ICAgaW9zX2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29u c3QKICAgIHsKICAgICAgaWYgKCFfTV9tb250aG5hbWVzKQogICAgICAgIHsKICAgICAgICAgIF9N X21vbnRobmFtZXMgPSBuZXcgYmFzaWNfc3RyaW5nPF9DaGFyVD5bMjRdOwogICAgICAgICAgZm9y IChpbnQgX19pID0gMDsgX19pIDwgMjQ7ICsrX19pKQogICAgICAgICAgICBfTV9tb250aG5hbWVz W19faV0gPSBfTW9udGhuYW1lczxfQ2hhclQ+OjpfU19uYW1lc1tfX2ldOwogICAgICAgIH0KICAg ICAgYm9vbCBfX2F0X2VvZiA9IGZhbHNlOwogICAgICBpbnQgX19yZW1haW4gPSAwOwogICAgICBp bnQgX19tYXRjaGVzWzI0XTsKICAgICAgaXRlcl90eXBlIF9fb3V0ID0gX19tYXRjaF9wYXJhbGxl bCggX19zLCBfX2VuZCwgMjQsIF9NX21vbnRobmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbWF0Y2hlcywgX19yZW1haW4sIF9fYXRfZW9mKTsKICAgICAg X19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZSgwKTsKICAgICAgaWYgKF9fYXRfZW9mKSBfX2VyciB8 PSBfX2lvLmVvZmJpdDsKICAgICAgaWYgKF9fcmVtYWluID09IDEgfHwKICAgICAgICAgIF9fcmVt YWluID09IDIgJiYgKF9fbWF0Y2hlc1swXT4+MSkgPT0gKF9fbWF0Y2hlc1sxXT4+MSkpCiAgICAg ICAgX190LT50bV9tb24gPSAoX19tYXRjaGVzWzBdPj4xKTsKICAgICAgZWxzZQogICAgICAgIF9f ZXJyIHw9IF9faW8uZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQp9CiMgNDIgIi9o b21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2lu Y2x1ZGUvZysrL2JpdHMvc3RkX2xvY2FsZS5oIiAyIDMKIyAzMyAiL2hvbWU1L2tyYWtvdy9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9v c3RyZWFtLnRjYyIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OnNlbnRyeTo6CiAgICBzZW50cnkoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3Mp CiAgICA6IF9NX29rKF9fb3MuZ29vZCgpKSwgX01fb3MoX19vcykKICAgIHsKCiAgICAgIGlmIChf TV9vayAmJiBfX29zLnRpZSgpKQogICAgICAgIF9fb3MudGllKCktPmZsdXNoKCk7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBl JikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQog ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAg ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikp CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAg ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjoKICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkKICAgIHsK ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9w ZXJhdG9yPDwoYm9vbCBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAg ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAg aWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWls ZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBfX24pCiAgICB7CiAg ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRo aXMtPmZpbGwoKTsKICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlz LT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICAgICAgICBpZiAoX01fY2hl Y2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg IGJvb2wgX19iID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNl OjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX19sID0gc3RhdGljX2Nhc3Q8dW5zaWdu ZWQgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1 dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVt cHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7CiAgICAgICAgICAgICAg ICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9w ZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo aXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAg ICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwg X19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQojIDI2NCAiL2hvbWU1L2tyYWtvdy9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9v c3RyZWFtLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQogICAgewogICAgICBzZW50 cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0 cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt cHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0 aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRv cjw8KGxvbmcgZG91YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAg ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAg ICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZh aWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0 KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX24p CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2No ZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1 dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAg ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46Om9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYmluKQogICAgewogICAg ICBzdHJlYW1zaXplIF9feHRyY3QgPSAwOwogICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0 ID0gdGhpcy0+cmRidWYoKTsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChf X3NiaW4gJiYgX19jZXJiKQogICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhp cywgX19zYmluLCBfX3Nib3V0KTsKICAgICAgaWYgKCFfX3NiaW4gfHwgIV9feHRyY3QpCiAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6cHV0KGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGludF90eXBlIF9f cHV0ID0gcmRidWYoKS0+c3B1dGMoX19jKTsKICAgICAgICAgIGlmIChfX3B1dCAhPSB0cmFpdHNf dHlwZTo6dG9faW50X3R5cGUoX19jKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6d3Jp dGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzZW50cnkg X19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBzdHJl YW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24pOwogICAgICAgICAg aWYgKCBfX3B1dCAhPSBfX24pCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmZsdXNoKCkK ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg ICAgewogICAgICAgICAgaWYgKHRoaXMtPnJkYnVmKCkgJiYgdGhpcy0+cmRidWYoKS0+cHVic3lu YygpID09IC0xKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ Ojp0ZWxscCgpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAg ICBib29sIF9fdGVzdG9rID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7CgogICAgICBpZiAoX190ZXN0 b2spCiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNl OjpjdXIsIGlvc19iYXNlOjpvdXQpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNl ZWtwKHBvc190eXBlIF9fcG9zKQogICAgewogICAgICBib29sIF9fdGVzdG9rID0gdGhpcy0+ZmFp bCgpICE9IHRydWU7CgogICAgICBpZiAoX190ZXN0b2spCiAgICAgICAgewoKCiAgICAgICAgICBw b3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNl OjpvdXQpOwoKCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkK ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0 dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla3Aob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNl OjpzZWVrZGlyIF9fZCkKICAgIHsKICAgICAgYm9vbCBfX3Rlc3RvayA9IHRoaXMtPmZhaWwoKSAh PSB0cnVlOwoKICAgICAgaWYgKF9fdGVzdG9rKQogICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5 cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om91 dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShmYWlsYml0KTsKICAgICAgICB9CgogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CiMgNDU3ICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL29zdHJlYW0udGNjIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgX19w YWRfY2hhcihiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX19pb3MsCiAgICAgICAgICAgICAg IF9DaGFyVCogX19uZXdzLCBjb25zdCBfQ2hhclQqIF9fb2xkcywKICAgICAgICAgICAgICAgY29u c3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxlbikKICAgIHsK ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJh aXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGlu dF90eXBlOwoKICAgICAgaW50X3R5cGUgX19wbGVuID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihfX25l d2xlbiAtIF9fb2xkbGVuKTsKICAgICAgY2hhcl90eXBlKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxj aGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihjaGFyX3R5cGUpICogX19wbGVuKSk7 CiAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX19wYWRzLCBfX3BsZW4sIF9faW9zLmZpbGwoKSk7 CgogICAgICBjaGFyX3R5cGUqIF9fYmVnOwogICAgICBjaGFyX3R5cGUqIF9fZW5kOwogICAgICBz aXplX3QgX19tb2QgPSAwOwogICAgICBzaXplX3QgX19iZWdsZW47CiAgICAgIGlvc19iYXNlOjpm bXRmbGFncyBfX2ZtdCA9IF9faW9zLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7Cgog ICAgICBpZiAoX19mbXQgPT0gaW9zX2Jhc2U6OmxlZnQpCiAgICAgICAgewoKICAgICAgICAgIF9f YmVnID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOwogICAgICAgICAgX19iZWdsZW4g PSBfX29sZGxlbjsKICAgICAgICAgIF9fZW5kID0gX19wYWRzOwogICAgICAgIH0KICAgICAgZWxz ZSBpZiAoX19mbXQgPT0gaW9zX2Jhc2U6OmludGVybmFsKQogICAgICAgIHsKCgoKICAgICAgICAg IHR5cGVkZWYgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+IF9fY2FjaGVfdHlwZTsKICAgICAgICAgIF9f Y2FjaGVfdHlwZSBjb25zdCogX19mbXQgPSBfX2NhY2hlX3R5cGU6Ol9TX2dldChfX2lvcyk7CiAg ICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbWludXMgPSB0cmFpdHNfdHlwZTo6ZmluZChfX29s ZHMsIF9fb2xkbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19mbXQtPl9TX21pbnVzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog X19wbHVzID0gdHJhaXRzX3R5cGU6OmZpbmQoX19vbGRzLCBfX29sZGxlbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mbXQtPl9TX3BsdXMp OwogICAgICAgICAgYm9vbCBfX3Rlc3RzaWduID0gX19taW51cyB8fCBfX3BsdXM7CiAgICAgICAg ICBib29sIF9fdGVzdGhleCA9IF9fb2xkc1swXSA9PSAnMCcKICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgKF9fb2xkc1sxXSA9PSAneCcgfHwgX19vbGRzWzFdID09ICdYJyk7CgogICAgICAg ICAgaWYgKF9fdGVzdGhleCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbmV3c1swXSA9 IF9fb2xkc1swXTsKICAgICAgICAgICAgICBfX25ld3NbMV0gPSBfX29sZHNbMV07CiAgICAgICAg ICAgICAgX19tb2QgKz0gMjsKICAgICAgICAgICAgICBfX2JlZyA9IGNvbnN0X2Nhc3Q8Y2hhcl90 eXBlKj4oX19vbGRzICsgX19tb2QpOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19vbGRsZW4g LSBfX21vZDsKICAgICAgICAgICAgICBfX2VuZCA9IF9fcGFkczsKICAgICAgICAgICAgfQogICAg ICAgICAgZWxzZSBpZiAoX190ZXN0c2lnbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9f bW9kICs9IF9fcGxlbjsKICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fc2lnbiA9IF9f bWludXMgPyBfX21pbnVzICsgMTogX19wbHVzICsgMTsKICAgICAgICAgICAgICBfX2JlZyA9IGNv bnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzKTsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9f c2lnbiAtIF9fb2xkczsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBl Kj4oX19zaWduICsgX19wbGVuKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX25l d3MgKyBfX2JlZ2xlbiwgX19wYWRzLCBfX3BsZW4pOwogICAgICAgICAgICB9CiAgICAgICAgICBl bHNlCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAg ICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0 PGNoYXJfdHlwZSo+KF9fb2xkcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UK ICAgICAgICB7CgogICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICBfX2JlZ2xlbiA9 IF9fcGxlbjsKICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMp OwogICAgICAgIH0KCiAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fbmV3cywgX19iZWcsIF9fYmVn bGVuKTsKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19uZXdzICsgX19iZWdsZW4sIF9fZW5kLCBf X25ld2xlbiAtIF9fYmVnbGVuIC0gX19tb2QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQs IF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2Vu dHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0Lndp ZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQq PihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7CiAgICAgICAgICAgICAg X19wYWRzWzBdID0gX19jOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwogICAg ICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCAmX19jLCBfX3csIF9fbGVuKTsKICAgICAg ICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg X19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg ICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg ICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CiAgICBi YXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt PGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz aWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUg X19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQog ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFt c2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIGNoYXIqIF9fcGFkcyA9IHN0 YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fdyArIDEpKTsKICAgICAgICAgICAg ICBfX3BhZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAg ICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsICZfX2MsIF9fdywgX19sZW4pOwogICAg ICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgw KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog ICAgICByZXR1cm4gX19vdXQ7CiAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBv cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IF9D aGFyVCogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRy eSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0 aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4o X19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwogICAgICAgICAgICAgIHN0 cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgo X19zKSk7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9fcywgX193LCBfX2xl bik7CiAgICAgICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19s ZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19z LCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAg ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg ICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo KF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0Owog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAgICAg dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CgoK ICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyPiBfX2N0cmFpdHNfdHlwZTsKCiAgICAgIHR5 cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9f Y2VyYikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19jbGVuID0gX19jdHJhaXRzX3R5cGU6 Omxlbmd0aChfX3MpOwogICAgICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8X0NoYXJU Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX2NsZW4gKyAxKSkpOwogICAg ICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDw9IF9fY2xlbjsgKytfX2kpCiAgICAgICAg ICAgIF9fd3NbX19pXSA9IF9fb3V0LndpZGVuKF9fc1tfX2ldKTsKICAgICAgICAgIF9DaGFyVCog X19zdHIgPSBfX3dzOwoKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg c3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fY2xlbik7CiAgICAg ICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9D aGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXpl b2YoX0NoYXJUKSAqIF9fdykpOwoKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFkcywg X193cywgX193LCBfX2xlbik7CiAgICAgICAgICAgICAgICAgIF9fc3RyID0gX19wYWRzOwogICAg ICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICBfX291dC53cml0ZShfX3N0ciwgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDAp OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBi YXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt PGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKQogICAgewogICAgICB0eXBl ZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5 cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9f Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg IHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBjaGFyKiBfX3Bh ZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cpKTsKICAgICAgICAg ICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6 bGVuZ3RoKF9fcykpOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3MsIF9f dywgX19sZW4pOwogICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAg ICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0Lndy aXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAg ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg ICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg ICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBf X291dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LAogICAg ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X3N0cikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g X19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19j ZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBjb25zdCBf Q2hhclQqIF9fcyA9IF9fc3RyLmRhdGEoKTsKICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19v dXQud2lkdGgoKTsKICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJU Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwogICAgICAgICAgc3Ry ZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fc3RyLnNpemUoKSk7CgoK CiAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBf X3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9fcywgX193LCBfX2xlbik7CiAgICAgICAgICAgICAg X19zID0gX19wYWRzOwogICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICB9CiAg ICAgICAgICBzdHJlYW1zaXplIF9fcmVzID0gX19vdXQucmRidWYoKS0+c3B1dG4oX19zLCBfX2xl bik7CiAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgIGlmIChfX3JlcyAhPSBfX2xl bikKICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAg IH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQp9CiMgMjc5ICIvaG9tZTUva3Jha293L2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0 ZF9vc3RyZWFtLmgiIDIgMwojIDQxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAy IDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9pc3RyZWFtLmgiIDEgMwojIDM4ICIvaG9tZTUv a3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRl L2crKy9iaXRzL3N0ZF9pc3RyZWFtLmgiIDMKCiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9z LmgiIDEgMwojIDQwICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9pc3RyZWFtLmgiIDIgMwojIDEgIi9o b21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2lu Y2x1ZGUvZysrL3NwYXJjLXN1bi1zb2xhcmlzMi44L2JpdHMvc3RkX2xpbWl0cy5oIiAxIDMKIyA0 MSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaXN0cmVhbS5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBi YXNpY19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4K ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRy YWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0 cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBfVHJh aXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9D aGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxf Q2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwogICAgICB0eXBlZGVmIGN0 eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIHN0cmVhbXNp emUgX01fZ2NvdW50OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lz dHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgewogICAgICAgIHRoaXMtPmluaXQo X19zYik7CiAgICAgICAgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsKICAgICAgfQoKICAgICAg dmlydHVhbAogICAgICB+YmFzaWNfaXN0cmVhbSgpCiAgICAgIHsgX01fZ2NvdW50ID0gc3RyZWFt c2l6ZSgwKTsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRy eTsKCgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5 cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg ICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBf X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFz ZSYpKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihib29sJiBfX24p OwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbik7Cgog ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19u KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsKCiAg ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19uKTsK CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7CgogICAg ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pOwoj IDEyNiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu OC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaXN0cmVhbS5oIiAzCiAgICAgIF9faXN0cmVhbV90 eXBlJgogICAgICBvcGVyYXRvcj4+KGZsb2F0JiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUm CiAgICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg ICAgIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmIF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK ICAgICAgb3BlcmF0b3I+Pih2b2lkKiYgX19wKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAg ICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpOwoKCiAgICAgIGlubGluZSBzdHJl YW1zaXplCiAgICAgIGdjb3VudCh2b2lkKSBjb25zdAogICAgICB7IHJldHVybiBfTV9nY291bnQ7 IH0KCiAgICAgIGludF90eXBlCiAgICAgIGdldCh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBl JgogICAgICBnZXQoY2hhcl90eXBlJiBfX2MpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAg IGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsK CiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBz dHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gZ2V0KF9fcywgX19uLCB0aGlzLT53aWRlbign XG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoX19zdHJlYW1idWZfdHlw ZSYgX19zYiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBl JgogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYikKICAgICAgeyByZXR1cm4gZ2V0KF9f c2IsIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdl dGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7 CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldGxpbmUoY2hhcl90eXBlKiBf X3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiBnZXRsaW5lKF9fcywgX19uLCB0aGlz LT53aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBpZ25vcmUoc3Ry ZWFtc2l6ZSBfX24gPSAxLCBpbnRfdHlwZSBfX2RlbGltID0gdHJhaXRzX3R5cGU6OmVvZigpKTsK CiAgICAgIGludF90eXBlCiAgICAgIHBlZWsodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK ICAgICAgcmVhZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgc3RyZWFt c2l6ZQogICAgICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAg ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHB1dGJhY2soY2hhcl90eXBlIF9fYyk7CgogICAgICBf X2lzdHJlYW1fdHlwZSYKICAgICAgdW5nZXQodm9pZCk7CgogICAgICBpbnQKICAgICAgc3luYyh2 b2lkKTsKCiAgICAgIHBvc190eXBlCiAgICAgIHRlbGxnKHZvaWQpOwoKICAgICAgX19pc3RyZWFt X3R5cGUmCiAgICAgIHNlZWtnKHBvc190eXBlKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAg ICBzZWVrZyhvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwoKICAgIHByaXZhdGU6CgoKICAg ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX2lzdHJlYW1fdHlwZSYp OwoKICAgICAgYmFzaWNfaXN0cmVhbShjb25zdCBfX2lzdHJlYW1fdHlwZSYpOwoKICAgIH07Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJsaWM6CiAg ICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJl YW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRl ZiBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhwbGljaXQK ICAgICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgYm9vbCBf X25vc2tpcHdzID0gZmFsc2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuIF9NX29r OyB9CgogICAgcHJpdmF0ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19pbiwgX0NoYXJUJiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFz aWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxj aGFyLCBfVHJhaXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9f aW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3Mg X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+ KGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2MpCiAg ICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRz PgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19p c3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0 dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRl PGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAgICBvcGVy YXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9f cykKICAgIHsgcmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz cyBiYXNpY19pb3N0cmVhbQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp dHM+LAogICAgICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAg ICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBf X2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4gX19vc3RyZWFtX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVhbShi YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJlYW1f dHlwZShfX3NiKSwgX19vc3RyZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2aXJ0dWFs CiAgICAgIH5iYXNpY19pb3N0cmVhbSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7Cn0KCgoK CiMgMSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu OC8zLjAvaW5jbHVkZS9nKysvYml0cy9pc3RyZWFtLnRjYyIgMSAzCiMgMzIgIi9ob21lNS9rcmFr b3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysr L2JpdHMvaXN0cmVhbS50Y2MiIDMKIyAxICIvaG9tZTUva3Jha293L2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzMuMC9pbmNsdWRlL2crKy9iaXRzL3N0ZF9sb2NhbGUuaCIg MSAzCiMgMzMgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvaXN0cmVhbS50Y2MiIDIgMwojIDEgIi9ob21lNS9r cmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUv ZysrL2JpdHMvc3RkX29zdHJlYW0uaCIgMSAzCiMgMzQgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMvaXN0cmVh bS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50 cnk6OgogICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgYm9v bCBfX25vc2tpcHdzKQogICAgewogICAgICBpZiAoX19pbi5nb29kKCkpCiAgICAgICAgewogICAg ICAgICAgaWYgKF9faW4udGllKCkpCiAgICAgICAgICAgIF9faW4udGllKCktPmZsdXNoKCk7CiAg ICAgICAgICBpZiAoIV9fbm9za2lwd3MgJiYgKF9faW4uZmxhZ3MoKSAmIGlvc19iYXNlOjpza2lw d3MpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9 IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9f Y3R5cGUgPSBfX2luLl9NX2dldF9mY3R5cGVfaW9zKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1i dWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgICAgICBfX2ludF90eXBlIF9f YyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdoaWxlIChfX2MgIT0gX19lb2YgJiYg X19jdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAgICAgICBfX2Mg PSBfX3NiLT5zbmV4dGMoKTsKCgoKICAgICAgICAgICAgICBpZiAoX19jID09IF9fZW9mKQogICAg ICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKCiAgICAgICAgICAg IH0KICAgICAgICB9CgogICAgICBpZiAoX19pbi5nb29kKCkpCiAgICAgICAgX01fb2sgPSB0cnVl OwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX01fb2sgPSBmYWxzZTsKICAgICAgICAg IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgIH0KICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSkK ICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpCiAgICB7CiAg ICAgIF9fcGYoKnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVy YXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpCiAgICB7CiAgICAgIF9fcGYoKnRo aXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGJvb2wm IF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAo X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6 Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQog ICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9f bik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAg ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdl dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y Pj4odW5zaWduZWQgc2hvcnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg ZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6 aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2Zh Y2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAw LCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIp OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW50JiBfX24pCiAg ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikK ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQp OwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAg ICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19uKQogICAgewogICAgICBzZW50cnkg X19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBp ZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0 LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+ Pihsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9z X2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt Z2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9f ZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAg ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbikKICAg IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQog ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAg ICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAg ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBj YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KIyAz NDQgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv My4wL2luY2x1ZGUvZysrL2JpdHMvaXN0cmVhbS50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihm bG9hdCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19i YXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdl dCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vy ciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAg IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0 aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fbikKICAgIHsKICAgICAg c2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01f Zm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9w ZXJhdG9yPj4obG9uZyBkb3VibGUmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp cywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr X2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlz LCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19l cnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odm9pZComIF9f bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19j ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29v ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAg ICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7 CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAg ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYm91dCkKICAgIHsK ICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0ID0gMDsKICAgICAgX19zdHJlYW1idWZfdHlwZSogX19z YmluID0gdGhpcy0+cmRidWYoKTsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwog ICAgICBpZiAoX19zYm91dCAmJiBfX2NlcmIpCiAgICAgICAgX194dHJjdCA9IF9fY29weV9zdHJl YW1idWZzKCp0aGlzLCBfX3NiaW4sIF9fc2JvdXQpOwogICAgICBpZiAoIV9fc2JvdXQgfHwgIV9f eHRyY3QpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICBy ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQodm9pZCkKICAgIHsKICAg ICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIGludF90 eXBlIF9fYyA9IF9fZW9mOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJi KCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fYyA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygp OwoKICAgICAgICAgICAgICBpZiAoX19jICE9IF9fZW9mKQogICAgICAgICAgICAgICAgX01fZ2Nv dW50ID0gMTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAg ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX2M7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6CiAgICBnZXQoY2hhcl90eXBlJiBfX2MpCiAgICB7CiAgICAgIF9NX2djb3VudCA9 IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQog ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3Qg aW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgaW50X3R5 cGUgX19idWZ2YWwgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYg KF9fYnVmdmFsICE9IF9fZW9mKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBf TV9nY291bnQgPSAxOwogICAgICAgICAgICAgICAgICBfX2MgPSB0cmFpdHNfdHlwZTo6dG9fY2hh cl90eXBlKF9fYnVmdmFsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6 OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChjaGFyX3R5cGUq IF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9n Y291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9f Y2VyYiAmJiBfX24gPiAxKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50 X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFp dHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRo aXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7 CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAg ICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAgICAgICAgICAgICAgd2hp bGUgKF9NX2djb3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0ZGVsaW0pCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0 b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAg ICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICBfX3Rlc3Rl b2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgIF9fdGVzdGRlbGltID0gX19jID09 IF9faWRlbGltOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChfX3Rlc3RkZWxp bSB8fCBfTV9nY291bnQgPT0gX19uIC0gMSkKICAgICAgICAgICAgICAgIF9fc2ItPnNwdXRiYWNr YyhfX2MpOwogICAgICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0 Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93 OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAqX19zID0gY2hhcl90eXBlKCk7CiAgICAg IGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0 KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KF9fc3RyZWFtYnVmX3R5 cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICBpbnRfdHlwZSBfX2M7CiAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBf X3RoaXNfc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRf dHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0 c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX2MgPSBfX3RoaXNfc2ItPnNidW1wYygpOwog ICAgICAgICAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAg ICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgYm9vbCBf X3Rlc3RwdXQgPSB0cnVlOwoKICAgICAgICAgICAgICB3aGlsZSAoIV9fdGVzdGVvZiAmJiAhX190 ZXN0ZGVsaW0KICAgICAgICAgICAgICAgICAgICAmJiAoX190ZXN0cHV0ID0gX19zYi5zcHV0Yyh0 cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpCiAgICAgICAgICAgICAgICAgICAgICAgICAh PSBfX2VvZikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50 OwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3RoaXNfc2ItPnNidW1wYygpOwogICAgICAgICAg ICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgIF9fdGVz dGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg IGlmIChfX3Rlc3RkZWxpbSB8fCAhX190ZXN0cHV0KQogICAgICAgICAgICAgICAgX190aGlzX3Ni LT5zcHV0YmFja2ModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAg ICBpZiAoX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls KQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9fdGhpc19zYi0+c3B1dGJhY2tjKHRyYWl0 c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg IGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0 KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0bGluZShjaGFyX3R5cGUq IF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9n Y291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9f Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg IF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlu dF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICsrX01fZ2NvdW50Owog ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2lu dF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJh aXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBfX2MgPT0g X19pZGVsaW07CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7Cgog ICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBfX24gJiYgIV9fdGVzdGVvZiAmJiAhX190 ZXN0ZGVsaW0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRy YWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgX19jID0gX19z Yi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAg ICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgIF9fdGVzdGRl bGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBp ZiAoX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAtLV9NX2dj b3VudDsKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoIV9fdGVzdGRlbGltKQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAtLV9NX2djb3VudDsKICAgICAgICAg ICAgICAgICAgX19zYi0+c3B1dGJhY2tjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7 CiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9 CiAgICAgICAgfQogICAgICAqX19zID0gY2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50 KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgaWdub3JlKHN0cmVhbXNpemUgX19uLCBpbnRfdHlwZSBf X2RlbGltKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0 aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX24gPiAwKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVs aW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29u c3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19z dHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5 cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9 IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBf X2VvZjsKCiAgICAgICAgICAgICAgX19uID0gbWluKF9fbiwgbnVtZXJpY19saW1pdHM8c3RyZWFt c2l6ZT46Om1heCgpKTsKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uIC0gMSAm JiAhX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1w YygpOwogICAgICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAg ICAgICAgICAgIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgIGlmICgoX01fZ2NvdW50ID09IF9fbiAtIDEgJiYgIV9fdGVzdGVvZikg fHwgX190ZXN0ZGVsaW0pCiAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAg ICBpZiAoX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcGVlayh2 b2lkKQogICAgewogICAgICBpbnRfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAg IF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBp ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fYyA9IHRo aXMtPnJkYnVmKCktPnNnZXRjKCk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg ICAgIH0KICAgICAgcmV0dXJuIF9fYzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHJlYWQoY2hhcl90eXBlKiBf X3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50 cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg ICAgICBpZiAoX19uID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHRyeQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0 c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9 IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNi dW1wYygpOwogICAgICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsK CiAgICAgICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBfX24gLSAxICYmICFfX3Rlc3Rl b2YpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgKl9fcysrID0g dHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICAgICAgKytf TV9nY291bnQ7CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAg ICAgICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0 KTsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAg ICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAg ICAgICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg ICAgICAgICAgICAgICB7CgoKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJl YW1zaXplCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcmVhZHNvbWUo Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBjb25zdCBpbnRfdHlw ZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAg c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog ICAgICAgICAgaWYgKF9fbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0cnkKICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX251bSA9IHRoaXMt PnJkYnVmKCktPmluX2F2YWlsKCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX251bSAhPSBzdGF0 aWNfY2FzdDxzdHJlYW1zaXplPihfX2VvZikpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAg ICAgICAgICAgICAgICAgX19udW0gPSBtaW4oX19udW0sIF9fbik7CiAgICAgICAgICAgICAgICAg ICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbnVtKTsKICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgICAgIHsKCgog ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh PSAwKQogICAgICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX01fZ2NvdW50OwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcHV0 YmFjayhjaGFyX3R5cGUgX19jKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigp OwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwog ICAgICAgICAgICAgIGlmICghX19zYiB8fCBfX3NiLT5zcHV0YmFja2MoX19jKSA9PSBfX2VvZikK ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UK ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAq dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+OjoKICAgIHVuZ2V0KHZvaWQpCiAgICB7CiAgICAgIF9NX2djb3VudCA9 IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQog ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3Qg aW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJl YW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKCFfX3Ni IHx8IF9fZW9mID09IF9fc2ItPnN1bmdldGMoKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW50CiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3luYyh2b2lkKQogICAgewogICAgICBpbnQgX19yZXQg PSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBf X2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9 IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiIHx8IF9fcmV0ID09IF9fc2It PnB1YnN5bmMoKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fcmV0ID0gMDsKICAgICAg ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1 cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5 cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB0ZWxsZyh2b2lkKQog ICAgewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAgICAgX01fZ2NvdW50 ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIp CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgIF9fcmV0 ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6 aW4pOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9 CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrZyhwb3NfdHlwZSBfX3Bv cykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg dHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg ICAgIHsKCgogICAgICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVi c2Vla3BvcyhfX3BvcywgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgICAgIGlmIChfX2VyciA9 PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo ZmFpbGJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKG9mZl90eXBl IF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikKICAgIHsKICAgICAgX01fZ2NvdW50ID0g MDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHBvc190 eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kaXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19i YXNlOjppbik7CgoKICAgICAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUo LTEpKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGZhaWxiaXQpOwoKICAgICAgICAg ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpCiAgICB7CiAg ICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBl OwogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxz ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg IHsgX19pbi5nZXQoX19jKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp dCk7CiAgICAgICAgICAgICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K ICAgICAgZWxzZQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAg ICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0 b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKQog ICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJl YW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1i dWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6 OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg IHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CiAgICAgIHN0cmVhbXNpemUgX19l eHRyYWN0ZWQgPSAwOwoKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2Nl cmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy eQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19udW0gPSBfX2luLndp ZHRoKCk7CiAgICAgICAgICAgICAgaWYgKF9fbnVtID09IDApCiAgICAgICAgICAgICAgICBfX251 bSA9IG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKTsKCiAgICAgICAgICAgICAgX19z dHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgICAgICBjb25zdCBf X2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBfX2luLl9NX2dldF9mY3R5cGVfaW9zKCk7CiAgICAgICAg ICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgY29uc3Qg aW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAgICAgICBib29sIF9fdGVz dHNwID0gX19jdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAgICAgICAgICAgICAg Ym9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAgICAgIHdoaWxlIChfX2V4 dHJhY3RlZCA8IF9fbnVtIC0gMSAmJiAhX190ZXN0ZW9mICYmICFfX3Rlc3RzcCkKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gX19jOwogICAgICAgICAgICAgICAg ICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsK ICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAg ICAgICBfX3Rlc3RzcCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOwogICAg ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBpZiAoIV9fdGVzdGVvZikKICAgICAgICAgICAg ICAgIF9fc2ItPnNwdXRiYWNrYyhfX2MpOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg ICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgoKCiAgICAgICAgICAgICAgKl9f cyA9IGNoYXJfdHlwZSgpOwoKICAgICAgICAgICAgICBfX2luLndpZHRoKDApOwogICAgICAgICAg ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg ICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg ICBpZiAoKF9faW4uZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAoIV9fZXh0 cmFjdGVkKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICBy ZXR1cm4gX19pbjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgd3MoYmFzaWNf aXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faW4pCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0 eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBl IF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmNoYXJf dHlwZSBfX2NoYXJfdHlwZTsKCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJk YnVmKCk7CiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19jdHlwZSA9IF9faW4uX01fZ2V0X2Zj dHlwZV9pb3MoKTsKICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigp OwogICAgICBfX2ludF90eXBlIF9fYzsKICAgICAgYm9vbCBfX3Rlc3Rlb2Y7CiAgICAgIGJvb2wg X190ZXN0c3A7CgogICAgICBkbwogICAgICAgIHsKICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1w YygpOwogICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgX190ZXN0 c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsKICAgICAgICB9CiAgICAg IHdoaWxlICghX190ZXN0ZW9mICYmIF9fdGVzdHNwKTsKCiAgICAgIGlmICghX190ZXN0ZW9mICYm ICFfX3Rlc3RzcCkKICAgICAgICBfX3NiLT5zcHV0YmFja2MoX19jKTsKICAgICAgZWxzZQogICAg ICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICByZXR1cm4gX19pbjsK ICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3Bl cmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAg ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewog ICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRf dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZf dHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90 eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6 ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpz ZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg ICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX2luLndp ZHRoKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX247CiAgICAgICAgICBfX24gPSBfX3cgPiAw ID8gc3RhdGljX2Nhc3Q8X19zaXplX3R5cGU+KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOwoKICAg ICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBj b25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBfX2luLl9NX2dldF9mY3R5cGVfaW9zKCk7CiAg ICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgY29uc3Qg X19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgYm9vbCBfX3Rlc3Rz cCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOwogICAgICAgICAgYm9vbCBf X3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwg X19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdHNwKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgX19zdHIgKz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytf X2V4dHJhY3RlZDsKICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAg ICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgX190ZXN0c3AgPSBf X2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsKICAgICAgICAgICAgfQogICAgICAg ICAgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAgICAgIF9fc2ItPnNwdXRiYWNrYyhfX2MpOwogICAg ICAgICAgZWxzZQogICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwog ICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICB9CgoKICAgICAgaWYgKCFfX2V4dHJhY3Rl ZCkKICAgICAgICBfX2luLnNldHN0YXRlIChpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICByZXR1 cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAg ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFy VCBfX2RlbGltKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlw ZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1f dHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0 eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXpl X3R5cGU7CgogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7CiAgICAgIGJvb2wgX190 ZXN0ZGVsaW0gPSBmYWxzZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBf X2NlcmIoX19pbiwgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg X19zdHIuZXJhc2UoKTsKICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbiA9IF9fc3RyLm1heF9zaXpl KCk7CgogICAgICAgICAgX19pbnRfdHlwZSBfX2lkZWxpbSA9IF9UcmFpdHM6OnRvX2ludF90eXBl KF9fZGVsaW0pOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYo KTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICBj b25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICBfX3Rlc3Rk ZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09 IF9fZW9mOwoKICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8PSBfX24gJiYgIV9fdGVzdGVv ZiAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBf VHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwog ICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgIF9fdGVzdGVv ZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lk ZWxpbTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAg X19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICB9CiAgICAgIGlmICghX19l eHRyYWN0ZWQgJiYgIV9fdGVzdGRlbGltKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6 OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0No YXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVh bTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYgX19pbiwKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxv Yz4mIF9fc3RyKQogICAgeyByZXR1cm4gZ2V0bGluZShfX2luLCBfX3N0ciwgX19pbi53aWRlbign XG4nKSk7IH0KfQojIDI5MSAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8zLjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaXN0cmVhbS5oIiAyIDMKIyA0 MiAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9nKysvYml0cy9zdGRfaW9zdHJlYW0uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK ICBleHRlcm4gaXN0cmVhbSBjaW47CiAgZXh0ZXJuIG9zdHJlYW0gY291dDsKICBleHRlcm4gb3N0 cmVhbSBjZXJyOwogIGV4dGVybiBvc3RyZWFtIGNsb2c7CiMgNTcgIi9ob21lNS9rcmFrb3cvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JpdHMv c3RkX2lvc3RyZWFtLmgiIDMKICBzdGF0aWMgaW9zX2Jhc2U6OkluaXQgX19pb2luaXQ7Cn0KIyAz MyAiL2hvbWU1L2tyYWtvdy9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8z LjAvaW5jbHVkZS9nKysvYmFja3dhcmQvaW9zdHJlYW0uaCIgMiAzCgp1c2luZyBzdGQ6Omlvc3Ry ZWFtOwp1c2luZyBzdGQ6Om9zdHJlYW07CnVzaW5nIHN0ZDo6aXN0cmVhbTsKdXNpbmcgc3RkOjpp b3M7CnVzaW5nIHN0ZDo6c3RyZWFtYnVmOwoKdXNpbmcgc3RkOjpjb3V0Owp1c2luZyBzdGQ6OmNp bjsKdXNpbmcgc3RkOjpjZXJyOwp1c2luZyBzdGQ6OmNsb2c7CgoKCgoKCgp1c2luZyBzdGQ6Ondz Owp1c2luZyBzdGQ6OmVuZGw7CnVzaW5nIHN0ZDo6ZW5kczsKdXNpbmcgc3RkOjpmbHVzaDsKIyAx MCAiQTA0Mzk1ODkuQyIgMgojIDEgIi9ob21lNS9rcmFrb3cvbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMy4wL2luY2x1ZGUvZysrL2JhY2t3YXJkL2lvc3RyZWFtLmgiIDEg MwojIDExICJBMDQzOTU4OS5DIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMgNAoj IDEyICJBMDQzOTU4OS5DIiAyCiMgMSAiQTA0Mzk1ODkuaCIgMQojaWRlbnQgIkAoIylBMDQzOTU4 OS5oCTEuMS4xLjEgb2YgMDAvMDMvMjkiCgojIDEgIkEwNDM5NTg5LnVuZGVyLmgiIDEKI2lkZW50 ICJAKCMpQTA0Mzk1ODkudW5kZXIuaAkxLjEuMS4xIG9mIDAwLzAzLzI5IgojIDQgIkEwNDM5NTg5 LmgiIDIKCgoKCmludCBiaXJnaXQ7CiMgMTMgIkEwNDM5NTg5LkMiIDIKIyAxICJBMDQzOTU4OS5o IiAxCiNpZGVudCAiQCgjKUEwNDM5NTg5LmgJMS4xLjEuMSBvZiAwMC8wMy8yOSIKCiMgMSAiQTA0 Mzk1ODkudW5kZXIuaCIgMQojaWRlbnQgIkAoIylBMDQzOTU4OS51bmRlci5oCTEuMS4xLjEgb2Yg MDAvMDMvMjkiCiMgNCAiQTA0Mzk1ODkuaCIgMgojIDE0ICJBMDQzOTU4OS5DIiAyCiMgMSAiQTA0 Mzk1ODkuaCIgMQojaWRlbnQgIkAoIylBMDQzOTU4OS5oCTEuMS4xLjEgb2YgMDAvMDMvMjkiCgoj IDEgIkEwNDM5NTg5LnVuZGVyLmgiIDEKI2lkZW50ICJAKCMpQTA0Mzk1ODkudW5kZXIuaAkxLjEu MS4xIG9mIDAwLzAzLzI5IgojIDQgIkEwNDM5NTg5LmgiIDIKIyAxNSAiQTA0Mzk1ODkuQyIgMgoj IDEgIkEwNDM5NTg5LmgiIDEKI2lkZW50ICJAKCMpQTA0Mzk1ODkuaAkxLjEuMS4xIG9mIDAwLzAz LzI5IgoKIyAxICJBMDQzOTU4OS51bmRlci5oIiAxCiNpZGVudCAiQCgjKUEwNDM5NTg5LnVuZGVy LmgJMS4xLjEuMSBvZiAwMC8wMy8yOSIKIyA0ICJBMDQzOTU4OS5oIiAyCiMgMTYgIkEwNDM5NTg5 LkMiIDIKIyAxICJBMDQzOTU4OS5oIiAxCiNpZGVudCAiQCgjKUEwNDM5NTg5LmgJMS4xLjEuMSBv ZiAwMC8wMy8yOSIKCiMgMSAiQTA0Mzk1ODkudW5kZXIuaCIgMQojaWRlbnQgIkAoIylBMDQzOTU4 OS51bmRlci5oCTEuMS4xLjEgb2YgMDAvMDMvMjkiCiMgNCAiQTA0Mzk1ODkuaCIgMgojIDE3ICJB MDQzOTU4OS5DIiAyCiMgMSAiQTA0Mzk1ODkuaCIgMQojaWRlbnQgIkAoIylBMDQzOTU4OS5oCTEu MS4xLjEgb2YgMDAvMDMvMjkiCgojIDEgIkEwNDM5NTg5LnVuZGVyLmgiIDEKI2lkZW50ICJAKCMp QTA0Mzk1ODkudW5kZXIuaAkxLjEuMS4xIG9mIDAwLzAzLzI5IgojIDQgIkEwNDM5NTg5LmgiIDIK IyAxOCAiQTA0Mzk1ODkuQyIgMgojIDEgIkEwNDM5NTg5LmgiIDEKI2lkZW50ICJAKCMpQTA0Mzk1 ODkuaAkxLjEuMS4xIG9mIDAwLzAzLzI5IgoKIyAxICJBMDQzOTU4OS51bmRlci5oIiAxCiNpZGVu dCAiQCgjKUEwNDM5NTg5LnVuZGVyLmgJMS4xLjEuMSBvZiAwMC8wMy8yOSIKIyA0ICJBMDQzOTU4 OS5oIiAyCiMgMTkgIkEwNDM5NTg5LkMiIDIKIyAxICJBMDQzOTU4OS5oIiAxCiNpZGVudCAiQCgj KUEwNDM5NTg5LmgJMS4xLjEuMSBvZiAwMC8wMy8yOSIKCiMgMSAiQTA0Mzk1ODkudW5kZXIuaCIg MQojaWRlbnQgIkAoIylBMDQzOTU4OS51bmRlci5oCTEuMS4xLjEgb2YgMDAvMDMvMjkiCiMgNCAi QTA0Mzk1ODkuaCIgMgojIDIwICJBMDQzOTU4OS5DIiAyCiMgMSAiQTA0Mzk1ODkuaCIgMQojaWRl bnQgIkAoIylBMDQzOTU4OS5oCTEuMS4xLjEgb2YgMDAvMDMvMjkiCgojIDEgIkEwNDM5NTg5LnVu ZGVyLmgiIDEKI2lkZW50ICJAKCMpQTA0Mzk1ODkudW5kZXIuaAkxLjEuMS4xIG9mIDAwLzAzLzI5 IgojIDQgIkEwNDM5NTg5LmgiIDIKIyAyMSAiQTA0Mzk1ODkuQyIgMgojIDEgIkEwNDM5NTg5Lmgi IDEKI2lkZW50ICJAKCMpQTA0Mzk1ODkuaAkxLjEuMS4xIG9mIDAwLzAzLzI5IgoKIyAxICJBMDQz OTU4OS51bmRlci5oIiAxCiNpZGVudCAiQCgjKUEwNDM5NTg5LnVuZGVyLmgJMS4xLjEuMSBvZiAw MC8wMy8yOSIKIyA0ICJBMDQzOTU4OS5oIiAyCiMgMjIgIkEwNDM5NTg5LkMiIDIKIyAxICJBMDQz OTU4OS5oIiAxCiNpZGVudCAiQCgjKUEwNDM5NTg5LmgJMS4xLjEuMSBvZiAwMC8wMy8yOSIKCiMg MSAiQTA0Mzk1ODkudW5kZXIuaCIgMQojaWRlbnQgIkAoIylBMDQzOTU4OS51bmRlci5oCTEuMS4x LjEgb2YgMDAvMDMvMjkiCiMgNCAiQTA0Mzk1ODkuaCIgMgojIDIzICJBMDQzOTU4OS5DIiAyCgoK CgoKIG5hbWVzcGFjZSBTUEFDRTEgewogICAgICBuYW1lc3BhY2UgVkFSSTEgewogICAgICAgICAg ICAgICAgaW50IHZhcl8xOwogICAgICAgICAgIG5hbWVzcGFjZSBWQVJJMiB7CiAgICAgICAgICAg ICAgICAgICAgIGludCB2YXJfMjsKICAgICAgICAgICAgICAgIG5hbWVzcGFjZSBWQVJJMyB7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhcl8zOwogICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgY2hhcl8zWzIwXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Owog bmFtZXNwYWNlIGFsaTAgPSBWQVJJMzsKICAgICAgICAgICAgICAgIG5hbWVzcGFjZSBWQVJJTiB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhcl9uOwogICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgY2hhcl9uWzIwXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 OwogbmFtZXNwYWNlIGFsaTEgPSBWQVJJTjsKIG5hbWVzcGFjZSBhbGkyID0gVkFSSU47CiAgICAg ICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAg ICAgICAgICAgICB9OwogbmFtZXNwYWNlIHF1YWxpMCA9IFNQQUNFMTo6VkFSSTE6OlZBUkkyOjpW QVJJMzsKIG5hbWVzcGFjZSBxdWFsaTEgPSBTUEFDRTE6OlZBUkkxOjpWQVJJMjo6VkFSSU47CgoK CiBuYW1lc3BhY2UgU1BBQ0UyIHsKICAgICAgdXNpbmcgbmFtZXNwYWNlIFNQQUNFMTsKICAgICAg aW50IHZhcl9zcDI7CiAgICAgIGNoYXIgY2hhcl9zcDJbMjBdOwogICAgICAgICAgICAgICAgICB9 OwogbmFtZXNwYWNlIGFsaTMgPSBTUEFDRTI7CiBuYW1lc3BhY2UgYWxpNCA9IFNQQUNFMjsKIG5h bWVzcGFjZSBhbGk1ID0gU1BBQ0UyOwogbmFtZXNwYWNlIGFsaTYgPSBTUEFDRTI7CgoKCiBuYW1l c3BhY2UgewogICAgIGludCB2YXJfc3B1OwogICAgICBjaGFyIGNoYXJfc3B1WzIwXTsKICAgICAg ICAgICAgICB9OwoKCgppbnQgdmFyXzEsIHZhcl8yLCB2YXJfMzsKCgoKCm5hbWVzcGFjZSBNIHsK Y2xhc3MgbWFubjsKICAgICAgICAgICAgfTsKbmFtZXNwYWNlIGFsaTcgPSBNOwpuYW1lc3BhY2Ug RiB7CnVzaW5nIG5hbWVzcGFjZSBhbGk3OwpjbGFzcyBmcmF1CnsKIHByaXZhdGU6CiAgY2hhciB2 bmFtZVsxMF07CiAgY2hhciBubmFtZVsxMF07CiAgY2hhciBob2JieVsyMF07CiBwdWJsaWM6CiAg ZG91YmxlIGdlaGFsdDsKICBmcmF1KHZvaWQpOwogIGZyYXUoY2hhciAqIGZuLCBjaGFyICogbG4s IGNoYXIgKiBybmc9IiIsIGRvdWJsZSBpbmMgPSAwKTsKICB+ZnJhdSh2b2lkKTsKICB2b2lkIHpl aWdlX2ZyYXUoKTsKfTsKCiB9Cm5hbWVzcGFjZSBhbGk4ID0gRjsKbmFtZXNwYWNlIE0gewp1c2lu ZyBuYW1lc3BhY2UgYWxpODsKY2xhc3MgbWFubgp7CiBwcml2YXRlOgogIGNoYXIgdm5hbWVbMTBd OwogIGNoYXIgbm5hbWVbMTBdOwogIGNoYXIgc3BvcnRbMjBdOwogcHVibGljOgogIGRvdWJsZSBn ZWhhbHQ7CiAgbWFubih2b2lkKTsKICBtYW5uKGNoYXIgKiBmbiwgY2hhciAqIGxuLCBjaGFyICog cm5nPSIiLCBkb3VibGUgaW5jID0gMCk7CiAgfm1hbm4odm9pZCk7CiAgdm9pZCB6ZWlnZV9tYW5u KCk7Cn07CiB9Cm5hbWVzcGFjZSBhbGk5ID0gTTsKCnVzaW5nIG5hbWVzcGFjZSBGOwp1c2luZyBu YW1lc3BhY2UgTTsKCmZyYXU6OmZyYXUoKQp7Cn0KCmZyYXU6OmZyYXUoY2hhciAqIGZuLCBjaGFy ICogbG4sIGNoYXIgKiBybmcsIGRvdWJsZSBpbmMpCnsKIHN0cmNweSh2bmFtZSwgZm4pOwogc3Ry Y3B5KG5uYW1lLCBsbik7CiBzdHJjcHkoaG9iYnksIHJuZyk7CiBnZWhhbHQgPSBpbmM7Cn0KCmZy YXU6On5mcmF1KHZvaWQpCnsKfQoKdm9pZCBmcmF1Ojp6ZWlnZV9mcmF1KCkKewogY291dCA8PCAi KiogRnJhdSAiIDw8IHZuYW1lIDw8ICIgIiA8PCBubmFtZSA8PCAiIG1pdCBIb2JieSAiIDw8IGhv YmJ5OwogY291dCA8PCAiIHZlcmRpZW50IERNICIgPDwgZ2VoYWx0IDw8ICIgcHJvIEphaHJcbiI7 Cn0KCgptYW5uOjptYW5uKCkKewp9CgptYW5uOjptYW5uKGNoYXIgKiBmbiwgY2hhciAqIGxuLCBj aGFyICogcm5nLCBkb3VibGUgaW5jKQp7CiBzdHJjcHkodm5hbWUsIGZuKTsKIHN0cmNweShubmFt ZSwgbG4pOwogc3RyY3B5KHNwb3J0LCBybmcpOwogZ2VoYWx0ID0gaW5jOwp9CgptYW5uOjp+bWFu bih2b2lkKQp7Cn0KCnZvaWQgbWFubjo6emVpZ2VfbWFubigpCnsKIGNvdXQgPDwgIioqIE1hbm4g IiA8PCB2bmFtZSA8PCAiICIgPDwgbm5hbWUgPDwgIiBtaXQgU3BvcnQgIiA8PCBzcG9ydDsKIGNv dXQgPDwgIiB2ZXJkaWVudCBETSAiIDw8IGdlaGFsdCA8PCAiIHBybyBKYWhyXG4iOwp9Cgpkb3Vi bGUgZ2VzYW10X2dlaGFsdChjb25zdCBmcmF1ICYgZDEsIGNvbnN0IG1hbm4gJiBkMikKewogcmV0 dXJuIGQxLmdlaGFsdCArIGQyLmdlaGFsdDsKfQoKIGZyYXUgZWhlZnJhdSgiU3VzaSIsICJNYWll ciIsICJLb2VjaGluIiwgNTY3ODkuMCk7CiBtYW5uIGVoZW1hbm4oIlBhdWwiLCAiTWFpZXIiLCAi VGF1Y2hlciIsIDQzMjExLjApOwoKIHZvaWQgZnVua3Rpb25fb3R0byh2b2lkKTsKCgoKCgppbnQg bWFpbigpCnsKCgoKIDo6dmFyXzEgPSAxMDsgOjp2YXJfMiA9IDIwOyA6OnZhcl8zID0gMzA7CgoK CiBpbnQgdmFyXzE7CiB2YXJfMSA9IDE7CiBpbnQgdmFyXzI7CiB2YXJfMiA9IHZhcl8xOwogdmFy XzIrKzsKIGludCB2YXJfMzsKIHZhcl8zID0gdmFyXzEgKyB2YXJfMjsKIGNvdXQgPDwgIiMjIyAg ICBsb2thbGUgVmFyaWFibGVuICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyIgPDwgIlxuIjsKIGNv dXQgPDwgInZhcl8xOiAgICAgICAgICAiIDw8IHZhcl8xIDw8ICJcbiI7CiBjb3V0IDw8ICJ2YXJf MjogICAgICAgICAgIiA8PCB2YXJfMiA8PCAiXG4iOwogY291dCA8PCAidmFyXzM6ICAgICAgICAg ICIgPDwgdmFyXzMgPDwgIlxuIjsKIGNvdXQgPDwgIiMjIyAgICBnbG9iYWxlIFZhcmlhYmxlbiAg ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyIgPDwgIlxuIjsKIGNvdXQgPDwgIjo6dmFyXzE6ICAgICAg ICAiIDw8IDo6dmFyXzEgPDwgIlxuIjsKIGNvdXQgPDwgIjo6dmFyXzI6ICAgICAgICAiIDw8IDo6 dmFyXzIgPDwgIlxuIjsKIGNvdXQgPDwgIjo6dmFyXzM6ICAgICAgICAiIDw8IDo6dmFyXzMgPDwg IlxuIjsKCgoKCgogU1BBQ0UxOjpWQVJJMTo6VkFSSTI6OlZBUklOOjp2YXJfbiA9IDk5OTsKIGNv dXQgPDwgIiMjIyAgICBTUEFDRTE6OlZBUkkxOjpWQVJJMjo6VkFSSU46OnZhcl9uICAgICMjIyIg PDwgIlxuIjsKIGNvdXQgPDwgIkFMSUFTLWFsaTE6ICAgICAiOwogY291dCA8PCBTUEFDRTE6OlZB UkkxOjpWQVJJMjo6YWxpMTo6dmFyX24gPDwgIlxuIjsKIHF1YWxpMTo6dmFyX24gPSAxMjM7CiBj b3V0IDw8ICJBTElBUy1xdWFsaTE6ICAgIiA8PCBxdWFsaTE6OnZhcl9uIDw8ICJcbiI7CiB1c2lu ZyBuYW1lc3BhY2UgU1BBQ0UxOjpWQVJJMTo6VkFSSTI6OmFsaTI7CiB2YXJfbiA9IDMyMTsKIG1l bWNweShjaGFyX24sIk5BTUVTUEFDRSBWQVJJTiAiLHNpemVvZihjaGFyX24pKTsKIGNvdXQgPDwg IiAgICAgICBuYWNoIHVzaW5nIG1pdCBBTElBUy1hbGkyICIgPDwgIlxuIjsKIGNvdXQgPDwgInZh cl9uOiAgICAgICAgICAiIDw8IHZhcl9uIDw8ICJcbiI7CiBjb3V0IDw8ICJjaGFyX246ICAgICAg ICAgIiA8PCBjaGFyX24gPDwgIlxuIjsKCgoKIGNvdXQgPDwgIiMjIyAgICBTUEFDRTE6OlZBUkkx OjpWQVJJMjo6VkFSSTM6OmNoYXJfbiAgICMjIyIgPDwgIlxuIjsKIHVzaW5nIFNQQUNFMTo6VkFS STE6OlZBUkkyOjphbGkwOjpjaGFyXzM7CiBtZW1jcHkoY2hhcl8zLCJOQU1FU1BBQ0UgVkFSSTMg IixzaXplb2YoY2hhcl8zKSk7CiBjb3V0IDw8ICIgICAgICAgbmFjaCB1c2luZyBtaXQgQUxJQVMt YWxpMCAiIDw8ICJcbiI7CiBjb3V0IDw8ICJjaGFyXzM6ICAgICAgICAgIiA8PCBjaGFyXzMgPDwg IlxuIjsKIGNvdXQgPDwgIkFMSUFTLXF1YWxpMDogICAiIDw8IHF1YWxpMDo6Y2hhcl8zIDw8ICJc biI7CgoKCiBhbGk1Ojp2YXJfc3AyID0gMjIyOwogY291dCA8PCAiIyMjICAgIFNQQUNFMjo6dmFy X3NwMiAgYXVjaCBtaXQgQUxJQVMgICAgICAgIyMjIiA8PCAiXG4iOwogY291dCA8PCAiU1BBQ0Uy Ojp2YXJfc3AyOiIgPDwgU1BBQ0UyOjp2YXJfc3AyIDw8ICJcbiI7CiBjb3V0IDw8ICJhbGkzOjp2 YXJfc3AyOiAgIiA8PCBhbGkzOjp2YXJfc3AyIDw8ICJcbiI7CiBjb3V0IDw8ICJhbGk0Ojp2YXJf c3AyOiAgIiA8PCBhbGk0Ojp2YXJfc3AyIDw8ICJcbiI7CiBjb3V0IDw8ICJhbGk1Ojp2YXJfc3Ay OiAgIiA8PCBhbGk1Ojp2YXJfc3AyIDw8ICJcbiI7CiBjb3V0IDw8ICJhbGk2Ojp2YXJfc3AyOiAg IiA8PCBhbGk2Ojp2YXJfc3AyIDw8ICJcbiI7CiBtZW1jcHkoYWxpNDo6Y2hhcl9zcDIsIk5BTUVT UEFDRSBTUEFDRTIgIixzaXplb2YoYWxpNjo6Y2hhcl9zcDIpKTsKIGNvdXQgPDwgIiMjIyAgICBT UEFDRTI6OmNoYXJfc3AyICBhdWNoIG1pdCBBTElBUyAgICAgICMjIyIgPDwgIlxuIjsKIGNvdXQg PDwgIlNQQUNFMjo6Y2hhcl9zcDI6ICIgPDwgU1BBQ0UyOjpjaGFyX3NwMiA8PCAiXG4iOwogY291 dCA8PCAiYWxpMzo6Y2hhcl9zcDI6ICIgPDwgYWxpMzo6Y2hhcl9zcDIgPDwgIlxuIjsKIGNvdXQg PDwgImFsaTQ6OmNoYXJfc3AyOiAiIDw8IGFsaTQ6OmNoYXJfc3AyIDw8ICJcbiI7CiBjb3V0IDw8 ICJhbGk1OjpjaGFyX3NwMjogIiA8PCBhbGk1OjpjaGFyX3NwMiA8PCAiXG4iOwogY291dCA8PCAi YWxpNjo6Y2hhcl9zcDI6ICIgPDwgYWxpNjo6Y2hhcl9zcDIgPDwgIlxuIjsKCgoKIGNvdXQgPDwg IiMjIyAgICBBdXNnYWJlIGFsbGVyIHZhcl8zICAgICAgICAgICAgICAgICAgICMjIyIgPDwgIlxu IjsKIGNvdXQgPDwgInZhcl8zOiAgICAgICAgICAiIDw8IHZhcl8zIDw8ICJcbiI7CiBjb3V0IDw8 ICI6OnZhcl8zOiAgICAgICAgIiA8PCA6OnZhcl8zIDw8ICJcbiI7CiBTUEFDRTE6OlZBUkkxOjpW QVJJMjo6VkFSSTM6OnZhcl8zID0gMzMzOwogY291dCA8PCAiYXVzIFNQQUNFMTogICAgICI7CiBj b3V0IDw8IFNQQUNFMTo6VkFSSTE6OlZBUkkyOjpWQVJJMzo6dmFyXzMgPDwgIlxuIjsKCgoKIHZh cl9zcHUgPSA5OTk7CiBtZW1jcHkoY2hhcl9zcHUsIk5BTUVTUEFDRSBVTk5BTUVEICIsc2l6ZW9m KGNoYXJfc3B1KSk7CiBjb3V0IDw8ICIjIyMgICAgQXVzIHVuYmVuYW5udGVtIE5hbWVzcGFjZSAg ICAgICAgICAgICAjIyMiIDw8ICJcbiI7CiBjb3V0IDw8ICJ2YXJfc3B1OiAgICAgICAgIiA8PCB2 YXJfc3B1IDw8ICJcbiI7CiBjb3V0IDw8ICJjaGFyX3NwdTogICAgICAgIiA8PCBjaGFyX3NwdSA8 PCAiXG4iOwoKCgogY291dCA8PCAiIyMjICAgIEtsYXNzZW4gaW4gTmFtZXNwYWNlcyAoZnVua3Qu IG90dG8pICAgIyMjIiA8PCAiXG4iOwogZnVua3Rpb25fb3R0bygpOwogcmV0dXJuIDA7Cn0KCgoK CnZvaWQgZnVua3Rpb25fb3R0bygpCnsKIGNvdXQgPDwgIioqIGluIGZ1bmt0aW9uX290dG8gICAg ICIgPDwgIlxuIjsKIHVzaW5nIG5hbWVzcGFjZSBhbGk5OwogZWhlZnJhdS56ZWlnZV9mcmF1KCk7 CiBlaGVtYW5uLnplaWdlX21hbm4oKTsKCiBjb3V0IDw8ICIqKiBHZXNhbXRnZWhhbHQ6ICI7CiBj b3V0IDw8IGdlc2FtdF9nZWhhbHQoZWhlZnJhdSxlaGVtYW5uKSA8PCAiIERNIiA8PCAiXG4iOwp9 Cg==