From mboxrd@z Thu Jan 1 00:00:00 1970 From: ltuikov@yahoo.com To: gcc-gnats@gcc.gnu.org Subject: c++/3101: ICE -- seg. fault compiling and encountering C::Angle(...) Date: Sat, 09 Jun 2001 15:36:00 -0000 Message-id: <20010609223306.32419.qmail@sourceware.cygnus.com> X-SW-Source: 2001-06/msg00349.html List-Id: >Number: 3101 >Category: c++ >Synopsis: ICE -- seg. fault compiling and encountering C::Angle(...) >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Sat Jun 09 15:36:00 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Luben Tuikov >Release: gcc version 2.96 20000731 (Red Hat Linux 7.0) >Organization: >Environment: RH7, 2.4.4, P2, 384 MB RAM. >Description: luben@lt1 ~/c/sgeom>g++ -save-temps -v -c -o box.o box.cpp Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs gcc version 2.96 20000731 (Red Hat Linux 7.0) /usr/lib/gcc-lib/i386-redhat-linux/2.96/cpp0 -lang-c++ -D__GNUG__=2 -v -D__GNUC__=2 -D__GNUC_MINOR__=96 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem(posix) -Acpu(i386) -Amachine(i386) -Di386 -D__i386 -D__i386__ -D__tune_i386__ box.cpp box.ii GNU CPP version 2.96 20000731 (Red Hat Linux 7.0) (cpplib) (i386 Linux/ELF) ignoring nonexistent directory "/usr/i386-redhat-linux/include" #include "..." search starts here: #include <...> search starts here: /usr/include/g++-3 /usr/local/include /usr/lib/gcc-lib/i386-redhat-linux/2.96/include /usr/include End of search list. /usr/lib/gcc-lib/i386-redhat-linux/2.96/cc1plus box.ii -quiet -dumpbase box.cpp -version -o box.s GNU C++ version 2.96 20000731 (Red Hat Linux 7.0) (i386-redhat-linux) compiled by GNU C version 2.96 20000731 (Red Hat Linux 7.0). In file included from box.cpp:2: cdefs.h:137: Internal error: Segmentation fault. Please submit a full bug report. See for instructions. If I comment out line 137 (Angle(...)) then it compiles until it encounters calls to Angle() and it complains, as it should... >How-To-Repeat: Apparently a method with the name of Angle() will cause it to crash... >Fix: ... I am looking for one.. :-) >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="box.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="box.ii" IyAxICJib3guY3BwIgoKIyA1ICJjZGVmcy5oIiAxCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzEyICIvdXNyL2lu Y2x1ZGUvZmVhdHVyZXMuaCIgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDM0 ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxOTkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1y ZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKdHlwZWRlZiB1bnNpZ25lZCBp bnQgc2l6ZV90OwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKZXh0ZXJuICJDIiB7 CgojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBp bnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAg ICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwojIDEzMyAiL3Vz ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21h eCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpf X25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBh dG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBs b25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq X19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgojIDE2MyAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAzCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3Vs IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAg dGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9f ZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhy b3cgKCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoK X19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAg IHRocm93ICgpOwojIDI1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBkb3VibGUg X19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp bnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFs IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0 aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBf X3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91 cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJu YWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQg X19ncm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50 IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i YXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2ln bmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0 aHJvdyAoKTsKIyAzODUgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbDY0 YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25z dCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgojIDI4 ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwpleHRlcm4gIkMiIHsKCgojIDMwICIvdXNy L2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2No YXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGlu dCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9f IHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9f IHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMv dHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVk IGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBl ZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19p bnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0 eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3Qg Kl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9fdV9pbnQg X191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcgX19pbm9f dDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190Owp0 eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVk ZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3VfbG9uZyBf X3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191X2ludCBf X2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90 OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVk ZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29uZHNfdDsK dHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtf dDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90 OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBf X2ZkX21hc2s7CgoKIyAxMDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBz dHJ1Y3QKICB7CgoKCgoKCiAgICBfX2ZkX21hc2sgX19mZHNfYml0c1sxMDI0IC8gKDggKiBzaXpl b2YgKF9fZmRfbWFzaykpXTsKCgogIH0gX19mZF9zZXQ7CgoKdHlwZWRlZiBpbnQgX19rZXlfdDsK Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBsb25n IGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRl ZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7 CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9f ZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYg X191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlw ZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190 X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQg aW50IF9fc29ja2xlbl90OwoKCgoKCiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBl cy5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCnN0cnVjdCBfX3Nj aGVkX3BhcmFtCiAgewogICAgaW50IHNjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5j bHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sK ewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBz dHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVm IHN0cnVjdAp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3Ry dWN0IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBp bnQgX19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsK ICB2b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRy X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xv Y2s7CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5 cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAg aW50IF9fbV9yZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9v d25lcjsKICBpbnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2Nr Owp9IHB0aHJlYWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2lu ZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsK CgojIDE0MCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKdHlwZWRlZiB1bnNp Z25lZCBsb25nIGludCBwdGhyZWFkX3Q7CgojIDE2NiAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu aCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiBfX3Vf Y2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1 X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0 eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCnR5 cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CiMgNTggIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBl ZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVk ZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlw ZWRlZiBfX29mZl90IG9mZl90OwojIDk2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlw ZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYg X19zc2l6ZV90IHNzaXplX3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVm IF9fY2FkZHJfdCBjYWRkcl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTI3ICIvdXNy L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyA3MCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCnR5 cGVkZWYgX190aW1lX3QgdGltZV90OwoKIyA4MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBl ZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsKCiMgOTQgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK dHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKCiMgMTI3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDIgMwojIDE0MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgoKCnR5cGVkZWYgdW5z aWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsK dHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxODQgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18p KSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18p KSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18p KSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18p KSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k ZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu dCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVm IGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CgoK CgoKCgoKCgoKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAyMDcgIi91c3IvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi IDEgMwoKCgojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCnR5cGVkZWYgaW50 IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25n IGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAg fSBfX3NpZ3NldF90OwoKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCgoj IDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIGxv bmcgaW50IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKCiMgMzkgIi91c3IvaW5j bHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKc3RydWN0IHRpbWV2YWw7 Cgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoKCnR5cGVkZWYgX19mZF9zZXQgZmRfc2V0OwoK CiMgNzQgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuIGludCBzZWxlY3QgKGlu dCBfX25mZHMsIF9fZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAg ICAgIF9fZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICBf X2ZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgIHN0cnVj dCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgojIDkyICIvdXNyL2lu Y2x1ZGUvc3lzL3NlbGVjdC5oIiAzCn0KCiMgMjEwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi IDIgMwoKCgojIDIyNCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19ibGtj bnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlw ZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTYgIi91c3IvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMwp9CgojIDM5MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJu IGludDMyX3QgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1 bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRl ICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzZXRz dGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2Rh dGEKICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3Qg KnN0YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5k X3NlcDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0 cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAg aW50MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNyYW5k b21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhy b3cgKCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFy ICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf X3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9f cmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpf X3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRv bV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHJhbmQg KHZvaWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQp IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIHRo cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0 ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cg KCk7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9u ZyBpbnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoK CmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50 IGpyYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRl cm4gdm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpleHRlcm4gdW5z aWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10p IHRocm93ICgpOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJh bVs3XSkgdGhyb3cgKCk7CgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNo b3J0IGludCB4WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IGFbM107CiAgICB1bnNpZ25lZCBz aG9ydCBpbnQgYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBvbGRfeFszXTsKICAgIGludCBpbml0 OwogIH07CgoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jl c3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0 IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0 IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0 YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19y ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVj dCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg ICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgbnJh bmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAg ICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm ZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkg dGhyb3cgKCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3Vi aVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJp Y3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBf X3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2Vl ZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgdGhyb3cgKCk7CgpleHRl cm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7Cgpl eHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7 CiMgNTI2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6 ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVy biB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxs b2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoK CgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgoKIyAyNiAiL3Vz ci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKCmV4dGVybiAiQyIgewoKCgoKCmV4dGVybiB2b2lkICph bGxvY2EgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCn0KCiMgNTQ2ICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyA1NjAgIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVu YykgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19vbl9leGl0ICh2b2lkICgqX19m dW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93 ICgpOwpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZv aWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg ZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f KSk7CgojIDU4OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpnZXRlbnYg KF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJl X2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg cHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYg KF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxh Y2UpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAq X19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgdGhyb3cg KCk7CiMgNjI0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rdGVtcCAo Y2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNo YXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY1MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz CmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKIyA2 NzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq X19yZXN0cmljdCBfX3Jlc29sdmVkKSB0aHJvdyAoKTsKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2Nv bXBhcl9mbl90KSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKTsKCgoKCgoKCgpleHRl cm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jh c2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwg X19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jh c2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19j b21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25n IGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyA3MTEgIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50 IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRl cm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDcyOSAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19y ZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAg ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hh ciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93 ICgpOwoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp Z2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9f cmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJs ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry aWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hh ciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYp IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9f bmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAq X19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9f dmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAg ICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAog ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcWVj dnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAg ICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAg ICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhy b3cgKCk7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp Z2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9f cmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19i dWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29u c3QgY2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAo d2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0 b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXpl X3QgbWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAo KTsKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXpl X3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0 IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDg1MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAzCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxl bSkgdGhyb3cgKCk7CgoKCgoKfQoKIyA1ICJjZGVmcy5oIiAyCgojIDI4ICIvdXNyL2luY2x1ZGUv c3RyaW5nLmgiIDEgMwpleHRlcm4gIkMiIHsKCgoKCgoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2 b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lk ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAq bWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQog ICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0 IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAg ICAgICAgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lk ICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBz aXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4 dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19u KQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCiMgNzcgIi91c3Iv aW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0 IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoK ZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0 aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNo YXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f czIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50 IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3Qg X19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBp bnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhm cm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgojIDEyMCAi L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hh ciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAiL3Vz ci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAq X19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy biBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgojIDE2NyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz CmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAq X19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0 ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNj ZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNo YXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0 cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCgoKCmV4dGVybiBj aGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19kZWxpbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNo YXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hh ciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgp OwojIDIxOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBzaXplX3Qgc3RybGVuIChf X2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgoj IDIyOSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50 IF9fZXJybnVtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RyZXJyb3JfciAoaW50IF9f ZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGNo YXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxl bikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBf X24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywg dm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBiemVybyAo dm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29u c3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19j b25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBfX2ZmcyAo aW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CmV4dGVybiBpbnQgZmZz IChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKIyAyNzQgIi91 c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hh ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19z MSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwojIDI5NiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVy biBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRocm93ICgpOwojIDM2 NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KCiMgNiAiY2RlZnMuaCIgMgoKCiMgNSAibWF0 aGZ1bnMuaCIgMQojIDI5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKZXh0ZXJuICJDIiB7CgoK CgoKCgoKCgoKIyA2NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDU0ICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoY2FsbHMuaCIgMSAzCmV4dGVybiBkb3VibGUgYWNvcyAoIGRvdWJsZSBfX3gpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fYWNvcyAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0 ZXJuIGRvdWJsZSBhc2luICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19h c2luICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW4gKCBkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4gKCBkb3VibGUgX194KSB0aHJvdyAo KTsKCmV4dGVybiBkb3VibGUgYXRhbjIgKCBkb3VibGUgX195LCBkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4yICggZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGRvdWJsZSBjb3MgKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX2NvcyAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW4gKCBk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbiAoIGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX3RhbiAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKIyA3OCAiL3Vzci9pbmNsdWRl L2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBjb3NoICggZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBkb3VibGUgX19jb3NoICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRl cm4gZG91YmxlIHNpbmggKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3Np bmggKCBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgdGFuaCAoIGRvdWJsZSBf X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuaCAoIGRvdWJsZSBfX3gpIHRocm93ICgp OwoKCgpleHRlcm4gZG91YmxlIGFjb3NoICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk b3VibGUgX19hY29zaCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2lu aCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbmggKCBkb3VibGUg X194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbmggKCBkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW5oICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGRvdWJsZSBleHAgKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4 cCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKIyAxMDYgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhj YWxscy5oIiAzCmV4dGVybiBkb3VibGUgZnJleHAgKCBkb3VibGUgX194LCBpbnQgKl9fZXhwb25l bnQpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZnJleHAgKCBkb3VibGUgX194LCBpbnQgKl9f ZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKCBkb3VibGUgX194LCBp bnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZGV4cCAoIGRvdWJsZSBf X3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZyAoIGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nICggZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fbG9nMTAgKCBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG1v ZGYgKCBkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg X19tb2RmICggZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4g ZG91YmxlIGV4cG0xICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHBt MSAoIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMXAgKCBkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwICggZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2diICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk b3VibGUgX19sb2diICggZG91YmxlIF9feCkgdGhyb3cgKCk7CiMgMTQzICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIHBvdyAoIGRvdWJsZSBfX3gsIGRvdWJs ZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93ICggZG91YmxlIF9feCwgZG91Ymxl IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBzcXJ0ICggZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBkb3VibGUgX19zcXJ0ICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVy biBkb3VibGUgaHlwb3QgKCBkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX2h5cG90ICggZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gZG91YmxlIGNicnQgKCBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf X2NicnQgKCBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjZWlsICgg ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19jZWlsICggZG91YmxlIF9feCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJzICggZG91YmxlIF9feCkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmFicyAoIGRvdWJsZSBf X3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91Ymxl IGZsb29yICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbG9vciAoIGRv dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1vZCAoIGRvdWJsZSBfX3gsIGRv dWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1vZCAoIGRvdWJsZSBfX3gsIGRv dWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1 ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19m aW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192YWx1 ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGRv dWJsZSBpbmZuYW4gKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7IGV4dGVybiBkb3VibGUgX19pbmZuYW4gKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBkcmVtICggZG91YmxlIF9f eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19kcmVtICggZG91YmxlIF9f eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKCBk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpZ25pZmljYW5kICggZG91Ymxl IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduICggZG91YmxlIF9feCwg ZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g ZG91YmxlIF9fY29weXNpZ24gKCBkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMjE3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2Fs bHMuaCIgMwpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3Zh bHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJs ZSBqMCAoIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qMCAoIGRvdWJsZSkgdGhy b3cgKCk7CmV4dGVybiBkb3VibGUgajEgKCBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl IF9fajEgKCBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSkg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qbiAoaW50LCBkb3VibGUpIHRocm93ICgpOwpleHRl cm4gZG91YmxlIHkwICggZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kwICggZG91 YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MSAoIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy biBkb3VibGUgX195MSAoIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeW4gKGludCwg ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRvdWJsZSkgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBlcmYgKCBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9fZXJmICggZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBlcmZjICggZG91Ymxl KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZmMgKCBkb3VibGUpIHRocm93ICgpOwpleHRl cm4gZG91YmxlIGxnYW1tYSAoIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sZ2Ft bWEgKCBkb3VibGUpIHRocm93ICgpOwojIDI0NiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxz LmgiIDMKZXh0ZXJuIGRvdWJsZSBnYW1tYSAoIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi bGUgX19nYW1tYSAoIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgbGdhbW1h X3IgKCBkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19s Z2FtbWFfciAoIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu IGRvdWJsZSByaW50ICggZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yaW50 ICggZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIgKCBkb3Vi bGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKCBkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGRvdWJsZSByZW1h aW5kZXIgKCBkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf X3JlbWFpbmRlciAoIGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4g ZG91YmxlIHNjYWxiICggZG91YmxlIF9feCwgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBk b3VibGUgX19zY2FsYiAoIGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGRvdWJsZSBzY2FsYm4gKCBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX3NjYWxibiAoIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRl cm4gaW50IGlsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diIChk b3VibGUgX194KSB0aHJvdyAoKTsKIyA2NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgODMg Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxz LmgiIDEgMwpleHRlcm4gZmxvYXQgYWNvc2YgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g ZmxvYXQgX19hY29zZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXNpbmYg KCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luZiAoIGZsb2F0IF9feCkg dGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRhbmYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19hdGFuZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRh bjJmICggZmxvYXQgX195LCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFu MmYgKCBmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2Yg KCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jb3NmICggZmxvYXQgX194KSB0 aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzaW5mICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGZsb2F0IF9fc2luZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuZiAo IGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3RhbmYgKCBmbG9hdCBfX3gpIHRo cm93ICgpOwoKIyA3OCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZs b2F0IGNvc2hmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKCBm bG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmhmICggZmxvYXQgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2luaGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJu IGZsb2F0IHRhbmhmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYg KCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgYWNvc2hmICggZmxvYXQgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNvc2hmICggZmxvYXQgX194KSB0aHJvdyAoKTsK CmV4dGVybiBmbG9hdCBhc2luaGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19hc2luaGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5oZiAoIGZs b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW5oZiAoIGZsb2F0IF9feCkgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGV4cGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19leHBmICggZmxvYXQgX194KSB0aHJvdyAoKTsKCiMgMTA2ICIvdXNyL2luY2x1 ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgZnJleHBmICggZmxvYXQgX194LCBp bnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mcmV4cGYgKCBmbG9hdCBf X3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoIGZs b2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZGV4cGYg KCBmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9n ZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKCBmbG9hdCBfX3gp IHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cxMGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX19sb2cxMGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9h dCBtb2RmZiAoIGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX21vZGZmICggZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGZsb2F0IGV4cG0xZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cG0x ZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzFwZiAoIGZsb2F0IF9f eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzFwZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGZsb2F0IGxvZ2JmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0 IF9fbG9nYmYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwojIDE0MyAiL3Vzci9pbmNsdWRlL2JpdHMv bWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IHBvd2YgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Bvd2YgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IHNxcnRmICggZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGZsb2F0IF9fc3FydGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgaHlw b3RmICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19oeXBv dGYgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY2Jy dGYgKCBmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoIGZsb2F0IF9f eCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjZWlsZiAoIGZsb2F0IF9feCkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX2NlaWxmICggZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g ZmxvYXQgZmFic2YgKCBmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsgZXh0ZXJuIGZsb2F0IF9fZmFic2YgKCBmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZmxvb3JmICggZmxvYXQgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZmxvb3JmICggZmxvYXQgX194KSB0aHJvdyAoKTsKCgpl eHRlcm4gZmxvYXQgZm1vZGYgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVy biBmbG9hdCBfX2Ztb2RmICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mZiAo ZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4 dGVybiBpbnQgZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGZsb2F0IGluZm5hbmYgKGludCBfX2Vycm9yKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2luZm5h bmYgKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK ZXh0ZXJuIGZsb2F0IGRyZW1mICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19kcmVtZiAoIGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGZsb2F0IHNpZ25pZmljYW5kZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX3NpZ25pZmljYW5kZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQg Y29weXNpZ25mICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mICggZmxvYXQgX194LCBmbG9h dCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAyMTcgIi91c3Iv aW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9f dmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGlu dCBpc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gZmxvYXQgajBmICggZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19qMGYgKCBmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBqMWYgKCBmbG9hdCkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX2oxZiAoIGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGpu ZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCkg dGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX3kwZiAoIGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkxZiAoIGZsb2F0KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9feTFmICggZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQg eW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feW5mIChpbnQsIGZsb2F0 KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXJmZiAoIGZsb2F0KSB0aHJvdyAoKTsgZXh0 ZXJuIGZsb2F0IF9fZXJmZiAoIGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGVyZmNmICgg ZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZjZiAoIGZsb2F0KSB0aHJvdyAoKTsK ZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xn YW1tYWYgKCBmbG9hdCkgdGhyb3cgKCk7CiMgMjQ2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2Fs bHMuaCIgMwpleHRlcm4gZmxvYXQgZ2FtbWFmICggZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxv YXQgX19nYW1tYWYgKCBmbG9hdCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBsZ2FtbWFm X3IgKCBmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdh bW1hZl9yICggZmxvYXQsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBm bG9hdCByaW50ZiAoIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JpbnRmICgg ZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbmV4dGFmdGVyZiAoIGZsb2F0IF9f eCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy biBmbG9hdCBfX25leHRhZnRlcmYgKCBmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmICgg ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJm ICggZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc2NhbGJm ICggZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmYg KCBmbG9hdCBfX3gsIGZsb2F0IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJu ZiAoIGZsb2F0IF9feCwgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYg KCBmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diZiAoZmxv YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194KSB0aHJvdyAo KTsKIyA4MyAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgMTAwICIvdXNyL2luY2x1ZGUvbWF0 aC5oIiAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKZXh0ZXJuIGxv bmcgZG91YmxlIGFjb3NsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fYWNvc2wgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg ZG91YmxlIGFzaW5sICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fYXNpbmwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91 YmxlIGF0YW5sICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fYXRhbmwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl IGF0YW4ybCAoIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsICggbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NsICggbG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zbCAoIGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAoIGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93 ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK CiMgNzggIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJs ZSBjb3NobCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X2Nvc2hsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBz aW5obCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Np bmhsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5o bCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Rhbmhs ICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3No bCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3No bCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmhs ICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmhs ICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwg KCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuaGwg KCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBs ICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAo IGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgojIDEwNiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0 aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91YmxlIGZyZXhwbCAoIGxvbmcgZG91YmxlIF9feCwg aW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsICgg bG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25n IGRvdWJsZSBsZGV4cGwgKCBsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAo KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGRleHBsICggbG9uZyBkb3VibGUgX194LCBpbnQgX19l eHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKCBsb25nIGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsICggbG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMTBsICggbG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMTBsICggbG9uZyBkb3VibGUg X194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKCBsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19t b2RmbCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7CgoK CmV4dGVybiBsb25nIGRvdWJsZSBleHBtMWwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CmV4dGVybiBsb25nIGRvdWJsZSBsb2cxcGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19sb2cxcGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK CmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKIyAx NDMgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBsb25nIGRvdWJsZSBw b3dsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4g bG9uZyBkb3VibGUgX19wb3dsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo cm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBzcXJ0bCAoIGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsICggbG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGh5cG90bCAoIGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlwb3RsICggbG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGNicnRsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fY2JydGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9u ZyBkb3VibGUgY2VpbGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19jZWlsbCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGZhYnNsICggbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsICggbG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91 YmxlIGZsb29ybCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2Zsb29ybCAoIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91 YmxlIGZtb2RsICggbG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19mbW9kbCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxvbmcgZG91YmxlIF9fdmFs dWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9f ZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWwg KGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBpbmZuYW5sIChpbnQgX19lcnJvcikgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19pbmZu YW5sIChpbnQgX19lcnJvcikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CmV4dGVybiBsb25nIGRvdWJsZSBkcmVtbCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKCBsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWdu aWZpY2FuZGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg X19zaWduaWZpY2FuZGwgKCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxv bmcgZG91YmxlIGNvcHlzaWdubCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBf X2NvcHlzaWdubCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CiMgMjE3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo Y2FsbHMuaCIgMwpleHRlcm4gaW50IF9faXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5sIChs b25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGowbCAoIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fajBsICggbG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBk b3VibGUgajFsICggbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19q MWwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwg bG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9u ZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsICggbG9uZyBkb3VibGUp IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MGwgKCBsb25nIGRvdWJsZSkgdGhyb3cg KCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MWwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX3kxbCAoIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg ZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91 YmxlIGVyZmwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Vy ZmwgKCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZjbCAoIGxv bmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmY2wgKCBsb25nIGRv dWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsICggbG9uZyBkb3VibGUp IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsICggbG9uZyBkb3VibGUpIHRo cm93ICgpOwojIDI0NiAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxv bmcgZG91YmxlIGdhbW1hbCAoIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fZ2FtbWFsICggbG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBk b3VibGUgbGdhbW1hbF9yICggbG9uZyBkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWxfciAoIGxvbmcgZG91YmxlLCBpbnQgKl9fc2ln bmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKCBsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yaW50bCAoIGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHRhZnRlcmwgKCBsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsICggbG9uZyBkb3VibGUg X194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCAoIGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVy bCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIHNjYWxibCAoIGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsICggbG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwg KCBsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg X19zY2FsYm5sICggbG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9n YmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CiMgMTAwICIvdXNyL2luY2x1ZGUvbWF0aC5o IiAyIDMKIyAxMTMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuIGludCBzaWduZ2FtOwoj IDIzNiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp0eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0x LAogIF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJWF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9O X1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9OX1RZUEUgX0xJQl9WRVJTSU9OOwojIDI1OSAi L3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1Y3QgX19leGNlcHRpb24KCgoKICB7CiAgICBpbnQg dHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwog ICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhj ZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgMjkwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMg NzkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL2Zsb2F0 LmgiIDEgMwp1bmlvbiBfX2NvbnZlcnRfbG9uZ19kb3VibGUgewogIHVuc2lnbmVkIF9fY29udmVy dF9sb25nX2RvdWJsZV9pWzRdOwogIGxvbmcgZG91YmxlIF9fY29udmVydF9sb25nX2RvdWJsZV9k Owp9OwojIDI5MCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNDA5ICIvdXNyL2luY2x1ZGUv bWF0aC5oIiAzCn0KCgojIDUgIm1hdGhmdW5zLmgiIDIKCmNsYXNzIFNTZWc7CmNsYXNzIFNQb2lu dDsKY2xhc3MgU1ZlY3RvcjsKY2xhc3MgU1BsYW5lOwoKZXh0ZXJuIGRvdWJsZSBfc3NfZ2xvYmFs X3RvbDsKZXh0ZXJuIGRvdWJsZSBfc3NfY29ubmVjdF90b2w7CmV4dGVybiBkb3VibGUgU1NfVElO WTsKCiMgMzAgIm1hdGhmdW5zLmgiCnRlbXBsYXRlPGNsYXNzIF9fU1NfVD4gaW5saW5lCl9fU1Nf VCBtYXgoX19TU19UIGEsIF9fU1NfVCBiKSB7IGlmIChhID4gYikgcmV0dXJuIGE7IHJldHVybiBi OyB9Cgp0ZW1wbGF0ZTxjbGFzcyBfX1NTX1Q+IGlubGluZQpfX1NTX1QgbWluKF9fU1NfVCBhLCBf X1NTX1QgYikgeyBpZiAoYSA+IGIpIHJldHVybiBiOyByZXR1cm4gYTsgfQoKdGVtcGxhdGU8Y2xh c3MgX19TU19UPiBpbmxpbmUKaW50IGFicyhfX1NTX1QgYSkgeyByZXR1cm4gKChhKSA8IDApID8g KC0oYSkpIDogKGEpO30KCnRlbXBsYXRlPGNsYXNzIF9fU1NfVD4gaW5saW5lCnZvaWQgc3dhcChf X1NTX1QgJmEsIF9fU1NfVCAmYikge19fU1NfVCB0ID0gYTsgYSA9IGI7IGIgPSB0O30KCmNvbnN0 IGRvdWJsZSBTX1BJQlkyID0gYWNvcygwLjApOwpjb25zdCBkb3VibGUgU19QSSA9IDIuMCphY29z KDAuMCk7CmNvbnN0IGRvdWJsZSBTXzNQSUJZMiA9IFNfUEkrU19QSUJZMjsKY29uc3QgZG91Ymxl IFNfMlBJID0gNC4wKmFjb3MoMC4wKTsKCmRvdWJsZSBTc2V0VG9sKGRvdWJsZSB0KTsKaW50IFN0 b2xDb21wKGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIHRvbD1fc3NfZ2xvYmFsX3RvbCk7CmRv dWJsZSBzcShkb3VibGUgeCk7CmRvdWJsZSBTbW9kMnBpKGRvdWJsZSB4KTsKZG91YmxlIFNzd2Vl cChkb3VibGUgc2EsIGRvdWJsZSBlYSk7CmRvdWJsZSBTdWxlbihkb3VibGUgdTEsIGRvdWJsZSB1 Mik7CmRvdWJsZSBTYXRhbjIoZG91YmxlIHksIGRvdWJsZSB4KTsKZG91YmxlIFNzaWduKGRvdWJs ZSB1KTsKZG91YmxlIGxpbWl0MTEoZG91YmxlIGEpOwoKU1NlZyogU21ha2VTZWcoY29uc3QgU1Bv aW50ICZzcCwgY29uc3QgU1BvaW50ICZtcCwgY29uc3QgU1BvaW50ICZlcCwgY29uc3QgU1BsYW5l ICZwbCk7CgppbnQgY21wYnl4KGNvbnN0IHZvaWQgKmVsMSwgY29uc3Qgdm9pZCAqZWwyKTsKaW50 IENtcENQZXJpbShjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKaW50IENtcENBcmVhKGNv bnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOwppbnQgQ21wQnlVMShjb25zdCB2b2lkICphLCBj b25zdCB2b2lkICpiKTsKaW50IENtcEJ5VTIoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7 CmludCBDbXBEYmwoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7CgojIDggImNkZWZzLmgi IDIKCiMgNiAiY29udGFpbmVyLmgiIDEKdHlwZWRlZiBpbnQgKCpwQ29tcGZfdCkoY29uc3Qgdm9p ZCAqZTEsIGNvbnN0IHZvaWQgKmUyKTsKIyAxNSAiY29udGFpbmVyLmgiCnRlbXBsYXRlPGNsYXNz IFQ+CmNsYXNzIFNDb250YWluZXJQIHsKCnByb3RlY3RlZDoKICBUICoqYXA7CiAgaW50IHN6Owog IGludCBtZW1zaXplOwogIGludCBjaHVuazsKCiAgaW50IEdyb3coKQogIHsKICAgIFQgKip0ID0g KFQgKiopIHJlYWxsb2MoYXAsIChtZW1zaXplICsgY2h1bmspICogc2l6ZW9mKFQgKikpOwoKICAg IGlmICghdCkKICAgICAgcmV0dXJuIC0xOwoKICAgIG1lbXNpemUgKz0gY2h1bms7CgogICAgaWYg KHQgIT0gYXApCiAgICAgIGFwID0gdDsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgaW50IFNocmlu aygpCiAgewogICAgaWYgKChtZW1zaXplLWNodW5rKSA8IDEpCiAgICAgIHJldHVybiAtMTsKCiAg ICBUICoqdCA9IChUICoqKSByZWFsbG9jKGFwLCAobWVtc2l6ZSAtIGNodW5rKSAqIHNpemVvZihU ICopKTsKCiAgICBpZiAoIXQpCiAgICAgIHJldHVybiAtMTsKCiAgICBtZW1zaXplIC09IGNodW5r OwoKICAgIGlmICh0ICE9IGFwKQogICAgICBhcCA9IHQ7CgogICAgcmV0dXJuIDA7CiAgfQoKCgog IGludCBtaW5teigpCiAgewogICAgcmVnaXN0ZXIgaW50IHMgPSAoKHN6LTEpL2NodW5rICsgMSkq Y2h1bms7CiAgICByZXR1cm4gKHMgPCBjaHVuaykgPyBjaHVuayA6IHM7CiAgfQoKCgpwdWJsaWM6 CiAgU0NvbnRhaW5lclAoaW50IGNodW4gPSAzMCkKICB7CiAgICBjaHVuayA9IGNodW47CiAgICBz eiA9IDA7CiAgICBtZW1zaXplID0gbWlubXooKTsKICAgIGFwID0gKFQgKiopIG1hbGxvYyhtZW1z aXplICogc2l6ZW9mKFQqKSk7CiAgfQoKCgogIFNDb250YWluZXJQKGNvbnN0IFNDb250YWluZXJQ PFQ+ICZzYykKICB7CiAgICByZWdpc3RlciBpbnQgaTsKCiAgICBjaHVuayA9IHNjLmNodW5rOwog ICAgc3ogPSBzYy5zejsKICAgIG1lbXNpemUgPSBtaW5teigpOwogICAgYXAgPSAoVCAqKikgbWFs bG9jKHNpemVvZihUKikgKiBtZW1zaXplKTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgc2Muc3o7IGkr KykKICAgICAgYXBbaV0gPSBuZXcgVCgqc2MuYXBbaV0pOwogIH0KCgoKICB2aXJ0dWFsIH5TQ29u dGFpbmVyUCgpCiAgewogICAgd2hpbGUgKHN6LS0gPiAwKSB7CiAgICAgIGFwW3N6XS0+flQoKTsK ICAgICAgZGVsZXRlIGFwW3N6XTsKICAgICAgYXBbc3pdPTA7CiAgICB9CiAgICBmcmVlKGFwKTsK ICAgIGFwID0gMDsKICAgIHN6ID0gMDsKICAgIG1lbXNpemUgPSAwOwogIH0KCgoKICB2aXJ0dWFs IHZvaWQgUmVzZXQoKQogIHsKICAgIHdoaWxlIChzei0tID4gMCkgewogICAgICBhcFtzel0tPn5U KCk7CiAgICAgIGRlbGV0ZSBhcFtzel07CiAgICAgIGFwW3N6XT0wOwogICAgfQogICAgZnJlZShh cCk7CiAgICBzeiA9IDA7CiAgICBtZW1zaXplID0gY2h1bmsgPiAwID8gY2h1bmsgOiAzMDsKICAg IGFwID0gKFQgKiopIG1hbGxvYyhtZW1zaXplICogc2l6ZW9mKFQqKSk7CiAgfQoKCgogIHZpcnR1 YWwgU0NvbnRhaW5lclA8VD4mIG9wZXJhdG9yPShjb25zdCBTQ29udGFpbmVyUDxUPiAmc2MpCiAg ewogICAgdGhpcy0+flNDb250YWluZXJQKCk7CgogICAgcmVnaXN0ZXIgaW50IGk7CgogICAgY2h1 bmsgPSBzYy5jaHVuazsKICAgIHN6ID0gc2Muc3o7CiAgICBtZW1zaXplID0gbWlubXooKTsKICAg IGFwID0gKFQgKiopIG1hbGxvYyhzaXplb2YoVCopICogbWVtc2l6ZSk7CgogICAgZm9yIChpID0g MDsgaSA8IHNjLnN6OyBpKyspCiAgICAgIGFwW2ldID0gbmV3IFQoKnNjLmFwW2ldKTsKCiAgICBy ZXR1cm4gKnRoaXM7CiAgfQoKCgogIHZpcnR1YWwgU0NvbnRhaW5lclA8VD4gb3BlcmF0b3IrKGNv bnN0IFNDb250YWluZXJQPFQ+ICZzYykgY29uc3QKICB7CiAgICByZWdpc3RlciBpbnQgaTsKICAg IFNDb250YWluZXJQPFQ+IGNzYyA9ICp0aGlzOwoKICAgIGZvciAoaSA9IDA7IGkgPCBzYy5zejsg aSsrKQogICAgICBjc2MuQWRkKG5ldyBUKCpzYy5hcFtpXSkpOwoKICAgIHJldHVybiBjc2M7CiAg fQoKCgogIHZpcnR1YWwgU0NvbnRhaW5lclA8VD4mIG9wZXJhdG9yKz0oY29uc3QgU0NvbnRhaW5l clA8VD4gJnNjKQogIHsKICAgIHJlZ2lzdGVyIGludCBpOwoKICAgIGZvciAoaSA9IDA7IGkgPCBz Yy5zejsgaSsrKQogICAgICBBZGQobmV3IFQoKnNjLmFwW2ldKSk7CgogICAgcmV0dXJuICp0aGlz OwogIH0KCgoKICB2aXJ0dWFsIFQqIG9wZXJhdG9yW10oaW50IGkpIGNvbnN0CiAgewogICAgaWYg KChpIDwgMCkgfHwgKGkgPiAoc3otMSkpKQogICAgICByZXR1cm4gMDsKCiAgICByZXR1cm4gYXBb aV07CiAgfQoKCgogIHZpcnR1YWwgU0NvbnRhaW5lclA8VD4gQ29weShpbnQgaSwgaW50IGopIGNv bnN0CiAgewogICAgU0NvbnRhaW5lclA8VD4gc2M7CiAgICBmb3IgKCA7IGkgPiAtMSAmJiBpIDwg aiAmJiBpIDwgc3o7IGkrKykKICAgICAgc2MuQWRkKG5ldyBUKCphcFtpXSkpOwogICAgcmV0dXJu IHNjOwogIH0KCgoKICB2aXJ0dWFsIGludCBTaXplKCkgY29uc3QKICB7CiAgICByZXR1cm4gc3o7 CiAgfQoKCgogIHZpcnR1YWwgaW50IEFkZChUKiBhKQogIHsKICAgIGlmICghYSkKICAgICAgcmV0 dXJuIC0xOwoKICAgIGlmIChzeiA+PSBtZW1zaXplKQogICAgICBpZiAoR3JvdygpICE9IDApCiAg ICAgICAgcmV0dXJuIC0xOwogICAgYXBbc3pdID0gYTsKICAgIHN6Kys7CgogICAgcmV0dXJuIDA7 CiAgfQoKCgogIHZpcnR1YWwgaW50IEluc0FmdGVyKGludCBzbiwgVCogYSkKICB7CiAgICBpZiAo KHNuIDwgMCkgfHwgKHNuID4gKHN6LTEpKSB8fCAhYSkKICAgICAgcmV0dXJuIC0xOwoKICAgIGlm IChzeiA+PSBtZW1zaXplKSB7CiAgICAgIGlmIChHcm93KCkgIT0gMCkKICAgICAgICByZXR1cm4g LTE7CiAgICB9CgogICAgcmVnaXN0ZXIgaW50IGk7CgogICAgZm9yIChpID0gc3o7IGkgPiAoc24r MSk7IGktLSkKICAgICAgYXBbaV0gPSBhcFtpLTFdOwoKICAgIGFwW3NuKzFdID0gYTsKICAgIHN6 Kys7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIHZpcnR1YWwgaW50IEluc0JlZm9yZShpbnQgc2Is IFQqIGEpCiAgewogICAgaWYgKChzYiA8IDApIHx8IChzYiA+IChzei0xKSkgfHwgIWEpCiAgICAg IHJldHVybiAtMTsKCiAgICBpZiAoc3ogPj0gbWVtc2l6ZSkgewogICAgICBpZiAoR3JvdygpICE9 IDApCiAgICAgICAgcmV0dXJuIC0xOwogICAgfQoKICAgIHJlZ2lzdGVyIGludCBpOwoKICAgIGZv ciAoaSA9IHN6OyBpID4gc2I7IGktLSkKICAgICAgYXBbaV0gPSBhcFtpLTFdOwoKICAgIGFwW3Ni XSA9IGE7CiAgICBzeisrOwoKICAgIHJldHVybiAwOwogIH0KCgoKICB2aXJ0dWFsIGludCBEZWxl dGUoaW50IGspCiAgewogICAgaWYgKHN6IDwgMSkKICAgICAgcmV0dXJuIC0xOwoKICAgIGlmICgo ayA8IDApIHx8IChrID4gKHN6LTEpKSkKICAgICAgcmV0dXJuIC0xOwoKICAgIHJlZ2lzdGVyIGlu dCBpOwoKICAgIGFwW2tdLT5+VCgpOwogICAgZGVsZXRlIGFwW2tdOwoKICAgIGZvciAoaSA9IGs7 IGkgPCAoc3otMSk7IGkrKykKICAgICAgYXBbaV0gPSBhcFtpKzFdOwoKICAgIHN6LS07CgogICAg aWYgKG1pbm16KCkgPCBtZW1zaXplKQogICAgICBTaHJpbmsoKTsKCiAgICByZXR1cm4gMDsKICB9 CgoKCiAgdmlydHVhbCB2b2lkIFN3YXAoaW50IGEsIGludCBiKQogIHsKICAgIFQqIHBhID0gYXBb YV07CgogICAgYXBbYV0gPSBhcFtiXTsKICAgIGFwW2JdID0gcGE7CiAgfQoKCgogIHZpcnR1YWwg dm9pZCBTb3J0KHBDb21wZl90IGNvbXBmKQogIHsKICAgIHFzb3J0KGFwLCBzeiwgc2l6ZW9mKFQq KSwgY29tcGYpOwogIH0KCgoKICB2aXJ0dWFsIHZvaWQgQ2xlYW5TYW1lKCkKICB7CiAgICByZWdp c3RlciBpbnQgaSwgajsKICAgIGZvciAoaSA9IDA7IGkgPCAoc3otMSk7IGkrKykKICAgICAgZm9y IChqID0gaSsxOyBqIDwgc3o7IGorKykKICAgICAgICBpZiAoKihhcFtpXSkgPT0gKihhcFtqXSkp CiAgICAgICAgICBEZWxldGUoai0tKTsKICB9Cgp9OwojIDMyMCAiY29udGFpbmVyLmgiCnRlbXBs YXRlPGNsYXNzIFQ+CmNsYXNzIFNDb250YWluZXIgewoKcHJvdGVjdGVkOgogIFQgKmFwOwogIGlu dCBzejsKICBpbnQgbWVtc2l6ZTsKICBpbnQgY2h1bms7CgogIGludCBHcm93KCkKICB7CiAgICBU ICp0ID0gKFQgKikgcmVhbGxvYyhhcCwgKG1lbXNpemUgKyBjaHVuaykgKiBzaXplb2YoVCkpOwoK ICAgIGlmICghdCkKICAgICAgcmV0dXJuIC0xOwoKICAgIG1lbXNpemUgKz0gY2h1bms7CgogICAg aWYgKHQgIT0gYXApCiAgICAgIGFwID0gdDsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgaW50IFNo cmluaygpCiAgewogICAgaWYgKChtZW1zaXplLWNodW5rKSA8IDEpCiAgICAgIHJldHVybiAtMTsK CiAgICBUICp0ID0gKFQgKikgcmVhbGxvYyhhcCwgKG1lbXNpemUgLSBjaHVuaykgKiBzaXplb2Yo VCkpOwoKICAgIGlmICghdCkKICAgICAgcmV0dXJuIC0xOwoKICAgIG1lbXNpemUgLT0gY2h1bms7 CgogICAgaWYgKHQgIT0gYXApCiAgICAgIGFwID0gdDsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAg aW50IG1pbm16KCkKICB7CiAgICByZWdpc3RlciBpbnQgcyA9ICgoc3otMSkvY2h1bmsgKyAxKSpj aHVuazsKICAgIHJldHVybiAocyA8IGNodW5rKSA/IGNodW5rIDogczsKICB9CgoKCnB1YmxpYzoK ICBTQ29udGFpbmVyKGludCBjaHVuID0gMzApCiAgewogICAgY2h1bmsgPSBjaHVuOwogICAgc3og PSAwOwogICAgbWVtc2l6ZSA9IG1pbm16KCk7CiAgICBhcCA9IChUICopIG1hbGxvYyhtZW1zaXpl ICogc2l6ZW9mKFQpKTsKICB9CgoKCiAgU0NvbnRhaW5lcihjb25zdCBTQ29udGFpbmVyPFQ+ICZz YykKICB7CiAgICByZWdpc3RlciBpbnQgaTsKCiAgICBjaHVuayA9IHNjLmNodW5rOwogICAgc3og PSBzYy5zejsKICAgIG1lbXNpemUgPSBtaW5teigpOwogICAgYXAgPSAoVCAqKSBtYWxsb2Moc2l6 ZW9mKFQpICogbWVtc2l6ZSk7CgogICAgZm9yIChpID0gMDsgaSA8IHNjLnN6OyBpKyspCiAgICAg IGFwW2ldID0gc2MuYXBbaV07CiAgfQoKCgogIHZpcnR1YWwgflNDb250YWluZXIoKQogIHsKICAg IHdoaWxlIChzei0tID4gMCkKICAgICAgYXBbc3pdLn5UKCk7CiAgICBmcmVlKGFwKTsKICAgIGFw ID0gMDsKICAgIHN6ID0gMDsKICAgIG1lbXNpemUgPSAwOwogIH0KCgoKICB2aXJ0dWFsIHZvaWQg UmVzZXQoKQogIHsKICAgIHdoaWxlIChzei0tID4gMCkKICAgICAgYXBbc3pdLn5UKCk7CiAgICBm cmVlKGFwKTsKICAgIHN6ID0gMDsKICAgIG1lbXNpemUgPSBjaHVuayA+IDAgPyBjaHVuayA6IDMw OwogICAgYXAgPSAoVCAqKSBtYWxsb2MobWVtc2l6ZSAqIHNpemVvZihUKSk7CiAgfQoKCgogIHZp cnR1YWwgU0NvbnRhaW5lcjxUPiYgb3BlcmF0b3I9KGNvbnN0IFNDb250YWluZXI8VD4gJnNjKQog IHsKICAgIHRoaXMtPn5TQ29udGFpbmVyKCk7CgogICAgcmVnaXN0ZXIgaW50IGk7CgogICAgY2h1 bmsgPSBzYy5jaHVuazsKICAgIHN6ID0gc2Muc3o7CiAgICBtZW1zaXplID0gbWlubXooKTsKICAg IGFwID0gKFQgKikgbWFsbG9jKHNpemVvZihUKSAqIG1lbXNpemUpOwoKICAgIGZvciAoaSA9IDA7 IGkgPCBzYy5zejsgaSsrKQogICAgICBhcFtpXSA9IHNjLmFwW2ldOwoKICAgIHJldHVybiAqdGhp czsKICB9CgoKCiAgdmlydHVhbCBTQ29udGFpbmVyPFQ+JiBvcGVyYXRvcisoY29uc3QgU0NvbnRh aW5lcjxUPiAmc2MpIGNvbnN0CiAgewogICAgcmVnaXN0ZXIgaW50IGk7CiAgICBTQ29udGFpbmVy PFQ+ICpwc2MgPSBuZXcgU0NvbnRhaW5lcjxUPigqdGhpcyk7CgogICAgZm9yIChpID0gMDsgaSA8 IHNjLnN6OyBpKyspCiAgICAgIHBzYy0+QWRkKHNjLmFwW2ldKTsKCiAgICByZXR1cm4gKnBzYzsK ICB9CgoKCiAgdmlydHVhbCBTQ29udGFpbmVyPFQ+JiBvcGVyYXRvcis9KGNvbnN0IFNDb250YWlu ZXI8VD4gJnNjKQogIHsKICAgIHJlZ2lzdGVyIGludCBpOwoKICAgIGZvciAoaSA9IDA7IGkgPCBz Yy5zejsgaSsrKQogICAgICBBZGQoc2MuYXBbaV0pOwoKICAgIHJldHVybiAqdGhpczsKICB9CgoK CiAgdmlydHVhbCBUJiBvcGVyYXRvcltdKGludCBpKSBjb25zdAogIHsKICAgIHJldHVybiBhcFtp XTsKICB9CgoKCiAgdmlydHVhbCBpbnQgU2l6ZSgpIGNvbnN0CiAgewogICAgcmV0dXJuIHN6Owog IH0KCgoKICB2aXJ0dWFsIGludCBBZGQoVCBhKQogIHsKICAgIGlmIChzeiA+PSBtZW1zaXplKQog ICAgICBpZiAoR3JvdygpICE9IDApCiAgICAgICAgcmV0dXJuIC0xOwogICAgYXBbc3pdID0gYTsK ICAgIHN6Kys7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIHZpcnR1YWwgaW50IEluc0FmdGVyKGlu dCBzbiwgVCBhKQogIHsKICAgIGlmICgoc24gPCAwKSB8fCAoc24gPiAoc3otMSkpKQogICAgICBy ZXR1cm4gLTE7CgogICAgaWYgKHN6ID49IG1lbXNpemUpIHsKICAgICAgaWYgKEdyb3coKSAhPSAw KQogICAgICAgIHJldHVybiAtMTsKICAgIH0KCiAgICByZWdpc3RlciBpbnQgaTsKCiAgICBmb3Ig KGkgPSBzejsgaSA+IChzbisxKTsgaS0tKQogICAgICBhcFtpXSA9IGFwW2ktMV07CgogICAgYXBb c24rMV0gPSBhOwogICAgc3orKzsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdmlydHVhbCBpbnQg SW5zQmVmb3JlKGludCBzYiwgVCBhKQogIHsKICAgIGlmICgoc2IgPCAwKSB8fCAoc2IgPiAoc3ot MSkpKQogICAgICByZXR1cm4gLTE7CgogICAgaWYgKHN6ID49IG1lbXNpemUpIHsKICAgICAgaWYg KEdyb3coKSAhPSAwKQogICAgICAgIHJldHVybiAtMTsKICAgIH0KCiAgICByZWdpc3RlciBpbnQg aTsKCiAgICBmb3IgKGkgPSBzejsgaSA+IHNiOyBpLS0pCiAgICAgIGFwW2ldID0gYXBbaS0xXTsK CiAgICBhcFtzYl0gPSBhOwogICAgc3orKzsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdmlydHVh bCBpbnQgRGVsZXRlKGludCBrKQogIHsKICAgIGlmIChzeiA8IDEpCiAgICAgIHJldHVybiAtMTsK CiAgICBpZiAoKGsgPCAwKSB8fCAoayA+IChzei0xKSkpCiAgICAgIHJldHVybiAtMTsKCiAgICBy ZWdpc3RlciBpbnQgaTsKCiAgICBhcFtrXS5+VCgpOwoKICAgIGZvciAoaSA9IGs7IGkgPCAoc3ot MSk7IGkrKykKICAgICAgYXBbaV0gPSBhcFtpKzFdOwoKICAgIHN6LS07CgogICAgaWYgKG1pbm16 KCkgPCBtZW1zaXplKQogICAgICBTaHJpbmsoKTsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdmly dHVhbCB2b2lkIFN3YXAoaW50IGEsIGludCBiKQogIHsKICAgIFQgZWwgPSBhcFthXTsKCiAgICBh cFthXSA9IGFwW2JdOwogICAgYXBbYl0gPSBlbDsKICB9CgoKCiAgdmlydHVhbCB2b2lkIFNvcnQo cENvbXBmX3QgY29tcGYpCiAgewogICAgcXNvcnQoYXAsIHN6LCBzaXplb2YoVCksIGNvbXBmKTsK ICB9CgoKCiAgdmlydHVhbCB2b2lkIENsZWFuU2FtZSgpCiAgewogICAgcmVnaXN0ZXIgaW50IGks ajsKICAgIGZvciAoaSA9IDA7IGkgPCAoc3otMSk7IGkrKykKICAgICAgZm9yIChqID0gaSsxOyBq IDwgc3o7IGorKykKICAgICAgaWYgKGFwW2ldID09IGFwW2pdKQogICAgICAgIERlbGV0ZShqLS0p OwogIH0KCn07CgojIDkgImNkZWZzLmgiIDIKCgoKY2xhc3MgU0FyYzsKY2xhc3MgU0JveDsKY2xh c3MgU0NpcmNsZTsKY2xhc3MgU0N1cnZlOwpjbGFzcyBTRXJyb3I7CmNsYXNzIFNJbmZMaW5lOwpj bGFzcyBTSW50ZXJzZWN0OwpjbGFzcyBTSXNlY3Q7CmNsYXNzIFNMaW5lOwpjbGFzcyBTTWF0cml4 OwpjbGFzcyBTUGxhbmU7CmNsYXNzIFNQb2ludDsKY2xhc3MgU1JheTsKY2xhc3MgU1NlZzsKY2xh c3MgU1NlZ0NvbnQ7CmNsYXNzIFNWZWN0b3I7CgplbnVtIFNfT3JpZW50IHtTX0NXID0gLTEsIFNf Q0NXID0gMX07CgplbnVtIFNTZWdfdCB7U0xJTkUsIFNDSVJDTEUsIFNBUkMsIFNDVVJWRX07Cgp0 eXBlZGVmIFNDb250YWluZXJQPFNQb2ludD4gU1BvaW50Q29udDsKCmNsYXNzIFNQb2ludCB7CnBy aXZhdGU6CiAgY2hhciBtX2xheWVyWzMzXTsKICBpbnQgbV9jb2xvcjsKcHVibGljOgogIGludCBm bGFnczsKICBpbnQgYXBmbGFnczsKICB1bmlvbiB7CiAgICBkb3VibGUgcFszXTsKICAgIHN0cnVj dCB7CiAgICAgIGRvdWJsZSB4OwogICAgICBkb3VibGUgeTsKICAgICAgZG91YmxlIHo7CiAgICB9 OwogIH07CgogIFNQb2ludChjb25zdCBTUG9pbnQmIHApOwogIFNQb2ludChkb3VibGUgeD0wLjAs IGRvdWJsZSB5PTAuMCwgZG91YmxlIHo9MC4wKSB7dGhpcy0+eD14O3RoaXMtPnk9eTt0aGlzLT56 PXo7bV9sYXllclswXT0nXDAnO2FwZmxhZ3M9ZmxhZ3M9MDt9CiAgU1BvaW50KGNvbnN0IFNWZWN0 b3ImIHYpOwoKICBTUG9pbnQmIG9wZXJhdG9yPShjb25zdCBTUG9pbnQgJnApOwogIFNQb2ludCYg b3BlcmF0b3I9KGNvbnN0IFNWZWN0b3IgJnYpOwogIGJvb2wgb3BlcmF0b3I9PShpbnQgb3JpZ2lu KSBjb25zdCB7IHJldHVybiAhb3JpZ2luICYmICgqdGhpcyk9PVNQb2ludCgwLjApOyB9CiAgYm9v bCBvcGVyYXRvciE9KGludCBvcmlnaW4pIGNvbnN0IHsgcmV0dXJuICFvcmlnaW4gJiYgKCp0aGlz KSE9U1BvaW50KDAuMCk7IH0KICBib29sIG9wZXJhdG9yPT0oY29uc3QgU1BvaW50JiBwKSBjb25z dCB7cmV0dXJuICEoU3RvbENvbXAoeCxwLngpIHx8IFN0b2xDb21wKHkscC55KSB8fCBTdG9sQ29t cCh6LHAueikpO30KICBib29sIG9wZXJhdG9yIT0oY29uc3QgU1BvaW50JiBwKSBjb25zdCB7cmV0 dXJuIFN0b2xDb21wKHgscC54KSB8fCBTdG9sQ29tcCh5LHAueSkgfHwgU3RvbENvbXAoeixwLnop O30KICBTUG9pbnQgb3BlcmF0b3IrKGNvbnN0IFNQb2ludCYgcCkgY29uc3Q7CiAgU1BvaW50JiBv cGVyYXRvcis9KGNvbnN0IFNQb2ludCYgcCk7CiAgU1BvaW50IG9wZXJhdG9yKyhjb25zdCBTVmVj dG9yJiBwKTsKICBTUG9pbnQmIG9wZXJhdG9yKz0oY29uc3QgU1ZlY3RvciYgcCk7CiAgU1BvaW50 IG9wZXJhdG9yLSgpIGNvbnN0OwogIFNQb2ludCBvcGVyYXRvci0oY29uc3QgU1BvaW50JiBwKSBj b25zdDsKICBTUG9pbnQgb3BlcmF0b3ItKGNvbnN0IFNWZWN0b3ImIHApIGNvbnN0OwogIFNQb2lu dCYgb3BlcmF0b3ItPShjb25zdCBTUG9pbnQmIHApOwogIFNQb2ludCBvcGVyYXRvciooZG91Ymxl IGspIGNvbnN0OwogIFNQb2ludCYgb3BlcmF0b3IqPShkb3VibGUgayk7CiAgU1BvaW50IG9wZXJh dG9yLyhkb3VibGUgaykgY29uc3Q7CiAgU1BvaW50JiBvcGVyYXRvci89KGRvdWJsZSBrKTsKICBk b3VibGUmIG9wZXJhdG9yW10oaW50IGkpOwoKICBkb3VibGUgZGlzdChjb25zdCBTUG9pbnQgJnAp IGNvbnN0OwogIFNQb2ludCBQcm9qKGNvbnN0IFNQbGFuZSAmcCkgY29uc3Q7CiAgYm9vbCBJbnNp ZGUoY29uc3QgU1NlZyAqcHMpIGNvbnN0OwoKICBjb25zdCBjaGFyKiBMYXllcigpIGNvbnN0IHty ZXR1cm4gKGNvbnN0IGNoYXIgKikgbV9sYXllcjt9CiAgdm9pZCBTZXRMYXllcihjb25zdCBjaGFy ICpzKSB7aWYgKHMpIHtzdHJuY3B5KG1fbGF5ZXIsIHMsIDMzLTEpOyBtX2xheWVyWzMzLTFdID0g J1wwJzt9fQogIGludCBDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KICB2b2lkIFNl dENvbG9yKGludCBjKSB7IG1fY29sb3IgPSBjOyB9Cn07CgoKY2xhc3MgU1ZlY3RvciB7CnByaXZh dGU6CiAgU1ZlY3RvciYgc2V0dzEoKTsKcHVibGljOgogIHVuaW9uIHsKICAgIGRvdWJsZSB2WzRd OwogICAgc3RydWN0IHsKICAgICAgZG91YmxlIHg7CiAgICAgIGRvdWJsZSB5OwogICAgICBkb3Vi bGUgejsKICAgICAgZG91YmxlIHc7CiAgICB9OwogIH07CgogIFNWZWN0b3IoZG91YmxlIHg9MC4w LCBkb3VibGUgeT0wLjAsIGRvdWJsZSB6PTAuMCwgZG91YmxlIHc9MS4wKSB7dGhpcy0+eD14O3Ro aXMtPnk9eTt0aGlzLT56PXo7dGhpcy0+dz13O30KICBTVmVjdG9yKGNvbnN0IFNWZWN0b3IgJnYp IHt4PXYueDsgeT12Lnk7IHo9di56OyB3PXYudzt9CiAgU1ZlY3Rvcihjb25zdCBTUG9pbnQgJnAp IHt4PXAueDsgeT1wLnk7IHo9cC56OyB3PTEuMDt9CiAgU1ZlY3Rvcihjb25zdCBTUG9pbnQgJmEs IGNvbnN0IFNQb2ludCAmYikge3g9Yi54LWEueDt5PWIueS1hLnk7ej1iLnotYS56O3c9MS4wO30K CiAgU1ZlY3RvciB3MSgpIGNvbnN0OwoKICBTVmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgU1ZlY3Rv ciAmdikge3g9di54OyB5PXYueTsgej12Lno7IHc9di53OyByZXR1cm4gKnRoaXM7fQogIFNWZWN0 b3ImIG9wZXJhdG9yPShjb25zdCBTUG9pbnQgJnApIHt4PXAueDsgeT1wLnk7IHo9cC56OyB3PTEu MDtyZXR1cm4gKnRoaXM7fQogIGJvb2wgb3BlcmF0b3I9PShpbnQgb3JpZ2luKSBjb25zdCB7cmV0 dXJuICFvcmlnaW4gJiYgKCp0aGlzKT09U1ZlY3RvcigwLjApO30KICBib29sIG9wZXJhdG9yIT0o aW50IG9yaWdpbikgY29uc3Qge3JldHVybiAhb3JpZ2luICYmICgqdGhpcykhPVNWZWN0b3IoMC4w KTt9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNWZWN0b3IgJnYpIGNvbnN0OwogIGJvb2wgb3Bl cmF0b3IhPShjb25zdCBTVmVjdG9yICZ2KSBjb25zdCB7cmV0dXJuICEoKnRoaXM9PXYpO30KICBT VmVjdG9yIG9wZXJhdG9yKyhjb25zdCBTVmVjdG9yICZ2KSBjb25zdDsKICBTVmVjdG9yJiBvcGVy YXRvcis9KGNvbnN0IFNWZWN0b3IgJnYpOwogIFNQb2ludCBvcGVyYXRvcisoY29uc3QgU1BvaW50 ICZwKSBjb25zdDsKICBTVmVjdG9yIG9wZXJhdG9yLSgpIGNvbnN0OwogIFNWZWN0b3Igb3BlcmF0 b3ItKGNvbnN0IFNWZWN0b3IgJnApIGNvbnN0OwogIFNWZWN0b3ImIG9wZXJhdG9yLT0oY29uc3Qg U1ZlY3RvciAmcCk7CiAgU1ZlY3RvciBvcGVyYXRvciooZG91YmxlIGspIGNvbnN0OwogIFNWZWN0 b3ImIG9wZXJhdG9yKj0oZG91YmxlIGspOwogIFNWZWN0b3Igb3BlcmF0b3IvKGRvdWJsZSBrKSBj b25zdDsKICBTVmVjdG9yJiBvcGVyYXRvci89KGRvdWJsZSBrKTsKICBkb3VibGUmIG9wZXJhdG9y W10oaW50IGkpOwoKICBTVmVjdG9yIG9wZXJhdG9yKihjb25zdCBTVmVjdG9yICZwKSBjb25zdDsK ICBkb3VibGUgZHAoY29uc3QgU1ZlY3RvciAmcCkgY29uc3Q7CgogIGRvdWJsZSBNYWcoKSBjb25z dDsKICBTVmVjdG9yIFVuaXQoKSBjb25zdDsKCiAgU1ZlY3RvciBSaWdodChjb25zdCBTVmVjdG9y ICZub3JtYWwpIGNvbnN0OwogIFNWZWN0b3IgTGVmdChjb25zdCBTVmVjdG9yICZub3JtYWwpIGNv bnN0OwoKICBTVmVjdG9yIFJpZ2h0WFkoKSBjb25zdCB7IHJldHVybiBSaWdodChTVmVjdG9yKDAu MCwwLjAsMS4wKSk7IH0KICBTVmVjdG9yIExlZnRYWSgpIGNvbnN0IHsgcmV0dXJuIExlZnQoU1Zl Y3RvcigwLjAsMC4wLDEuMCkpOyB9CgogIGRvdWJsZSBBbmdsZShjb25zdCBTVmVjdG9yICZ2LCBj b25zdCBTVmVjdG9yICZub3JtYWwgPSBTVmVjdG9yKDAuMCwwLjAsMS4wKSkgY29uc3Q7CgogIGRv dWJsZSBBbmdsZVgoKSBjb25zdDsKICBkb3VibGUgQW5nbGVZKCkgY29uc3Q7CiAgZG91YmxlIEFu Z2xlWigpIGNvbnN0OwoKICBkb3VibGUgQW5nbGVYWSgpIGNvbnN0OwogIGRvdWJsZSBBbmdsZVpY KCkgY29uc3Q7CiAgZG91YmxlIEFuZ2xlWVooKSBjb25zdDsKCiAgU1ZlY3RvciBBcmJYQXhpcygp IGNvbnN0OwogIFNWZWN0b3IgQXJiWUF4aXMoKSBjb25zdDsKCiAgU1ZlY3RvciBQcm9qKGNvbnN0 IFNWZWN0b3IgJnYpIGNvbnN0OwogIFNWZWN0b3IgUHJvaihjb25zdCBTUGxhbmUgJnBsYW5lKSBj b25zdDsKICBTVmVjdG9yIFByb2ooY29uc3QgU0luZkxpbmUgJmwpIGNvbnN0Owp9OwoKCmNvbnN0 IFNWZWN0b3IgU19JKDEuMCwwLjAsMC4wKTsKY29uc3QgU1ZlY3RvciBTX0ooMC4wLDEuMCwwLjAp Owpjb25zdCBTVmVjdG9yIFNfSygwLjAsMC4wLDEuMCk7CgoKY2xhc3MgU1BsYW5lIHsKcHJpdmF0 ZToKICBTVmVjdG9yIG1fbm9ybWFsOwogIFNQb2ludCBtX3B0b25wbGFuZTsKcHVibGljOgogIFNQ bGFuZSgpIHttX25vcm1hbD1TX0s7IG1fcHRvbnBsYW5lPVNQb2ludCgwLjApO30KICBTUGxhbmUo Y29uc3QgU1BsYW5lICZhKSB7IG1fbm9ybWFsID0gYS5tX25vcm1hbC5Vbml0KCk7IG1fcHRvbnBs YW5lID0gYS5tX3B0b25wbGFuZTsgfQogIFNQbGFuZShjb25zdCBTVmVjdG9yICZuLCBjb25zdCBT UG9pbnQgJnApIHttX25vcm1hbD1uLlVuaXQoKTsgbV9wdG9ucGxhbmU9cDt9CiAgU1BsYW5lKGNv bnN0IFNQb2ludCAmcCwgY29uc3QgU1ZlY3RvciAmbikge21fbm9ybWFsPW4uVW5pdCgpOyBtX3B0 b25wbGFuZT1wO30KCiAgU1BsYW5lJiBvcGVyYXRvcj0oY29uc3QgU1BsYW5lICZwKSB7bV9ub3Jt YWw9cC5tX25vcm1hbC5Vbml0KCk7IG1fcHRvbnBsYW5lPXAubV9wdG9ucGxhbmU7IHJldHVybiAq dGhpczt9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNQbGFuZSAmcCkgY29uc3Qge3JldHVybiBt X25vcm1hbC5Vbml0KCk9PXAubV9ub3JtYWwuVW5pdCgpICYmIE9uUGxhbmUocC5tX3B0b25wbGFu ZSk7fQoKICBTVmVjdG9yIEdldE5vcm1hbCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9ybWFsOyB9CiAg U1BvaW50IEdldFB0T25QbGFuZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRvbnBsYW5lOyB9CiAgdm9p ZCBTZXROb3JtYWwoY29uc3QgU1ZlY3RvciAmdikgeyBtX25vcm1hbCA9IHYuVW5pdCgpOyB9CiAg dm9pZCBTZXRQdE9uUGxhbmUoY29uc3QgU1BvaW50ICZwKSB7IG1fcHRvbnBsYW5lID0gcDsgfQoK ICBpbnQgVHJhbnNmb3JtKGNvbnN0IFNNYXRyaXggJm0pOwoKICBTUG9pbnQgR2V0UmFuZFAoKSBj b25zdDsKICBTVmVjdG9yIEdldFJhbmRWKCkgY29uc3Q7CgogIGRvdWJsZSBkaXN0KGNvbnN0IFNQ b2ludCAmcCkgY29uc3Q7CgogIGJvb2wgT25QbGFuZShjb25zdCBTUG9pbnQgJnApIGNvbnN0Owog IGJvb2wgT25QbGFuZShjb25zdCBTSW5mTGluZSAmbCkgY29uc3Q7CiAgYm9vbCBPblBsYW5lKGNv bnN0IFNQbGFuZSAmcCkgY29uc3Q7CiAgYm9vbCBQYXJhbGxlbChjb25zdCBTSW5mTGluZSAmbCkg Y29uc3Q7CiAgYm9vbCBQYXJhbGxlbChjb25zdCBTUGxhbmUgJnApIGNvbnN0OwogIGJvb2wgSW50 ZXJzZWN0KGNvbnN0IFNJbmZMaW5lICZsLCBTUG9pbnQgJnAsIGRvdWJsZSAmdGwpIGNvbnN0Owog IGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNQbGFuZSAmcGxhbmUsIFNJbmZMaW5lICZsKSBjb25zdDsK Cn07CgoKY29uc3QgU1BsYW5lIFNYWVBMQU5FKFNQb2ludCgwLjApLCBTX0spOwpjb25zdCBTUGxh bmUgU1pYUExBTkUoU1BvaW50KDAuMCksIFNfSik7CmNvbnN0IFNQbGFuZSBTWVpQTEFORShTUG9p bnQoMC4wKSwgU19JKTsKCgpjbGFzcyBTQm94IHsKcHJpdmF0ZToKICBTUG9pbnQgbV9wOwogIFNW ZWN0b3IgbV92OwogIGJvb2wgbV9jdXJyZW50OwpwdWJsaWM6CiAgU0JveCgpIHttX2N1cnJlbnQg PSBmYWxzZTt9CiAgU0JveChjb25zdCBTU2VnICpwcyk7CiAgU0JveChjb25zdCBTQm94ICZyKSB7 bV9wID0gci5tX3A7IG1fdiA9IHIubV92OyBtX2N1cnJlbnQgPSByLm1fY3VycmVudDt9CgogIFNC b3gmIG9wZXJhdG9yPShjb25zdCBTQm94JiByKSB7bV9wID0gci5tX3A7IG1fdiA9IHIubV92OyBt X2N1cnJlbnQgPSByLm1fY3VycmVudDtyZXR1cm4gKnRoaXM7fQogIGJvb2wgb3BlcmF0b3I9PShj b25zdCBTQm94JiBiKSBjb25zdCB7cmV0dXJuIChtX3A9PWIubV9wICYmIG1fdj09Yi5tX3YpIHx8 IChtX3A9PWIubV9wK2IubV92ICYmIG1fdj09LWIubV92KTt9CgogIGRvdWJsZSBabGVuKCkgY29u c3Qge3JldHVybiBmYWJzKG1fdi56KTt9CiAgZG91YmxlIFlsZW4oKSBjb25zdCB7cmV0dXJuIGZh YnMobV92LnkpO30KICBkb3VibGUgWGxlbigpIGNvbnN0IHtyZXR1cm4gZmFicyhtX3YueCk7fQog IFNWZWN0b3IgR2V0VigpIGNvbnN0IHtyZXR1cm4gbV92O30KICBTUG9pbnQgR2V0UCgpIGNvbnN0 IHtyZXR1cm4gbV9wO30KCiAgYm9vbCBPdmVybGFwWChjb25zdCBTQm94ICZyKSBjb25zdDsKICBi b29sIE92ZXJsYXBZKGNvbnN0IFNCb3ggJnIpIGNvbnN0OwogIGJvb2wgT3ZlcmxhcFooY29uc3Qg U0JveCAmcikgY29uc3Q7CgogIGJvb2wgSW5zaWRlWChjb25zdCBTQm94ICZyKSBjb25zdDsKICBi b29sIEluc2lkZVkoY29uc3QgU0JveCAmcikgY29uc3Q7CiAgYm9vbCBJbnNpZGVaKGNvbnN0IFNC b3ggJnIpIGNvbnN0OwoKICBib29sIE92ZXJsYXBYWShjb25zdCBTQm94ICZyKSBjb25zdCB7cmV0 dXJuIE92ZXJsYXBYKHIpICYmIE92ZXJsYXBZKHIpO30KICBib29sIE92ZXJsYXBZWihjb25zdCBT Qm94ICZyKSBjb25zdCB7cmV0dXJuIE92ZXJsYXBZKHIpICYmIE92ZXJsYXBaKHIpO30KICBib29s IE92ZXJsYXBaWChjb25zdCBTQm94ICZyKSBjb25zdCB7cmV0dXJuIE92ZXJsYXBaKHIpICYmIE92 ZXJsYXBYKHIpO30KCiAgYm9vbCBJbnNpZGVYWShjb25zdCBTQm94ICZyKSBjb25zdCB7cmV0dXJu IEluc2lkZVgocikgJiYgSW5zaWRlWShyKTt9CiAgYm9vbCBJbnNpZGVZWihjb25zdCBTQm94ICZy KSBjb25zdCB7cmV0dXJuIEluc2lkZVkocikgJiYgSW5zaWRlWihyKTt9CiAgYm9vbCBJbnNpZGVa WChjb25zdCBTQm94ICZyKSBjb25zdCB7cmV0dXJuIEluc2lkZVoocikgJiYgSW5zaWRlWChyKTt9 CgogIGJvb2wgT3ZlcmxhcChjb25zdCBTQm94ICZyKSBjb25zdCB7cmV0dXJuIE92ZXJsYXBYWShy KSAmJiBPdmVybGFwWVoocikgJiYgT3ZlcmxhcFpYKHIpO30KICBib29sIEluc2lkZShjb25zdCBT Qm94ICZyKSBjb25zdCB7cmV0dXJuIEluc2lkZVhZKHIpICYmIEluc2lkZVlaKHIpICYmIEluc2lk ZVpYKHIpO30KCiAgU0JveCYgVW5pb24oY29uc3QgU0JveCAmYik7CgogIFNQb2ludCBDZW50ZXIo KSBjb25zdCB7cmV0dXJuIG1fcCttX3YqMC41O30KICB2b2lkIEdldDhQb2ludHMoU1BvaW50ICpw cCkgY29uc3Q7CiAgdm9pZCBHZXRCb3hDb250KFNTZWdDb250ICZjYykgY29uc3Q7Cgp9OwoKCmNs YXNzIFNTZWcgewpwcm90ZWN0ZWQ6CiAgU1BsYW5lIG1fcGxhbmU7CiAgY2hhciBtX2xheWVyWzMz XTsKICBpbnQgbV9jb2xvcjsKICBTQm94IG1fYm94OwogIGRvdWJsZSBtX2FyZWE7CiAgZG91Ymxl IG1fbGVuZ3RoOwogIGludCBtX2ZsYWdzOwogIGZyaWVuZCBjbGFzcyBTQ3VydmU7CnB1YmxpYzoK CiAgZG91YmxlIG1fdTsKICBTU2VnICpwcmV2LCAqbmV4dDsKCiAgaW50IGFwZmxhZ3M7CgogIHZp cnR1YWwgflNTZWcoKSB7bV9mbGFncz0wLG1fYXJlYT1tX2xlbmd0aD0wLjAsKm1fbGF5ZXI9J1ww Jzt9CgogIHZpcnR1YWwgU1NlZ190IFR5cGUoKSBjb25zdCA9IDA7CiAgdmlydHVhbCBjb25zdCBj aGFyKiBMYXllcigpIGNvbnN0IHtyZXR1cm4gKGNvbnN0IGNoYXIgKikgbV9sYXllcjt9CiAgdmly dHVhbCB2b2lkIFNldExheWVyKGNvbnN0IGNoYXIgKnMpIHtpZiAocykge3N0cm5jcHkobV9sYXll ciwgcywgMzMtMSk7bV9sYXllclszMy0xXT0nXDAnO319CiAgdmlydHVhbCBpbnQgR2V0Q29sb3Io KSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAgdmlydHVhbCB2b2lkIFNldENvbG9yKGludCBj KSB7IG1fY29sb3IgPSBjOyB9CiAgdmlydHVhbCB2b2lkIFNldGFwZmxhZ3NCaXQoaW50IGJpdG1h c2ssIGludCB2YWwpIHtpZiAodmFsKSBhcGZsYWdzIHw9IGJpdG1hc2s7IGVsc2UgYXBmbGFncyAm PSB+Yml0bWFzazt9CiAgdmlydHVhbCBpbnQgVGVzdGFwZmxhZ3NCaXQoaW50IGJpdG1hc2spIGNv bnN0IHtyZXR1cm4gYXBmbGFncyAmIGJpdG1hc2s7fQoKICB2aXJ0dWFsIHZvaWQgVXBkYXRlKCkg PSAwOwoKICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTU2VnJiBzKSBjb25zdCB7cmV0 dXJuIGZhbHNlO30KCgogIHZpcnR1YWwgU1BvaW50IFBvaW50KGRvdWJsZSB1KSBjb25zdCA9IDA7 CiAgdmlydHVhbCBTUG9pbnQgU3RhcnRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIFBvaW50KDAuMCk7 IH0KICB2aXJ0dWFsIFNQb2ludCBNaWRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIFBvaW50KDAuNSk7 IH0KICB2aXJ0dWFsIFNQb2ludCBFbmRQb2ludCgpIGNvbnN0IHsgcmV0dXJuIFBvaW50KDEuMCk7 IH0KICB2aXJ0dWFsIFNWZWN0b3IgR2V0Tm9ybWFsKCkgY29uc3QgeyByZXR1cm4gbV9wbGFuZS5H ZXROb3JtYWwoKTt9CgogIHZpcnR1YWwgU0JveCBHZXRCb3goKSBjb25zdCB7IHJldHVybiBtX2Jv eDsgfQoKICB2aXJ0dWFsIGRvdWJsZSBMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsg fQogIHZpcnR1YWwgZG91YmxlIEFyZWEoKSBjb25zdCB7IHJldHVybiBtX2FyZWE7IH0KICB2aXJ0 dWFsIHZvaWQgVHJhbnNmb3JtKGNvbnN0IFNNYXRyaXggJm0pID0gMDsKICB2aXJ0dWFsIFNWZWN0 b3IgVGFuZ2VudChkb3VibGUgdSkgY29uc3QgPSAwOwogIHZpcnR1YWwgU1BsYW5lIEdldFBsYW5l KCkgY29uc3QgeyByZXR1cm4gbV9wbGFuZTsgfQogIHZpcnR1YWwgdm9pZCBTZXRQbGFuZShjb25z dCBTUGxhbmUgJnBsKSA9IDA7CgogIHZpcnR1YWwgU1NlZyogUHJvaihjb25zdCBTUGxhbmUgJnBs KSBjb25zdCA9IDA7CiAgdmlydHVhbCBTU2VnKiBUcmltU3RhcnQoZG91YmxlIHUpIGNvbnN0ID0g MDsKICB2aXJ0dWFsIFNTZWcqIFRyaW1FbmQoZG91YmxlIHUpIGNvbnN0ID0gMDsKICB2aXJ0dWFs IFNTZWcqIEdldFBhcnQoZG91YmxlIHUwLCBkb3VibGUgdTEpIGNvbnN0ID0gMDsKICB2aXJ0dWFs IGludCBPZmZzZXQoU1NlZ0NvbnQgJmNhLCBkb3VibGUgb2ZmcywgZG91YmxlIHRpbnkgPSBTU19U SU5ZKSBjb25zdCA9IDA7CgogIHZpcnR1YWwgdm9pZCBTZXRTcChjb25zdCBTUG9pbnQgJnApID0g MDsKICB2aXJ0dWFsIHZvaWQgU2V0TXAoY29uc3QgU1BvaW50ICZwKSA9IDA7CiAgdmlydHVhbCB2 b2lkIFNldEVwKGNvbnN0IFNQb2ludCAmcCkgPSAwOwogIHZpcnR1YWwgaW50IFNldDNQdHMoY29u c3QgU1BvaW50ICZhLCBjb25zdCBTUG9pbnQgJmIsIGNvbnN0IFNQb2ludCAmYykgPSAwOwogIHZp cnR1YWwgaW50IFNldEJ5UHRzKGNvbnN0IFNDb250YWluZXJQPFNQb2ludD4gJnNldHApID0gMDsK CiAgdmlydHVhbCBib29sIEluc2lkZShjb25zdCBTU2VnICpwcykgY29uc3QgPSAwOwogIHZpcnR1 YWwgaW50IEFidXRCKGNvbnN0IFNTZWcgKnBzLCBTU2VnQ29udCAmY2MpIGNvbnN0ID0gMDsKICB2 aXJ0dWFsIGludCBBb3JCKGNvbnN0IFNTZWcgKnBzLCBTU2VnQ29udCAmY2MpIGNvbnN0ID0gMDsK CiAgdmlydHVhbCBpbnQgT3JpZW50KCkgY29uc3QgeyByZXR1cm4gMDsgfQogIHZpcnR1YWwgdm9p ZCBSZXZlcnNlKCkgPSAwOwogIHZpcnR1YWwgdm9pZCBTZXRPcmllbnQoaW50IG8pIHsgfQoKICB2 aXJ0dWFsIGJvb2wgUG9pbnRPblNlZyhjb25zdCBTUG9pbnQgJnAsIGRvdWJsZSAmdSwgU1BvaW50 ICZhKSBjb25zdCA9IDA7CiAgdmlydHVhbCBib29sIEludGVyc2VjdChjb25zdCBTU2VnICpzZWcs IFNJbnRlcnNlY3QgJmlzZWN0cykgY29uc3QgPSAwOwoKICB2aXJ0dWFsIFNTZWcqIGNsb25lKCkg Y29uc3QgPSAwOwoKfTsKCgpjbGFzcyBTRXJyb3IgewpwdWJsaWM6CiAgZW51bSBFcnJvckluZGV4 IHtCQURVX1BPSU5ULCBCQURVX1RBTkdFTlQsIEJBRE1BRywgQkFEU0VHX0JFTE9OR1N9OwogIGNv bnN0IGNoYXIgKkVycm9yTWVzOwoKICBTRXJyb3IoRXJyb3JJbmRleCBpKSB7CiAgICBjb25zdCBz dGF0aWMgY2hhciAqZW1bXSA9IHsKICAgICAgInNnZW9tIGxpYnJhcnk6IEJhZCB1IHZhbHVlIGZy b20gUG9pbnQoKSAodSA+IDEuMCBvciB1IDwgMC4wKS5cbiIsCiAgICAgICJzZ2VvbSBsaWJyYXJ5 OiBCYWQgdSB2YWx1ZSBmcm9tIFRhbmdlbnQoKSAodSA+IDEuMCBvciB1IDwgMC4wKS5cbiIsCiAg ICAgICJzZ2VvbSBsaWJyYXJ5OiBWZWN0b3Igd2l0aCBtYWduaXR1ZGUgMC5cbiIsCiAgICAgICJz Z2VvbSBsaWJyYXJ5OiBTZWdtZW50IDB4MCBpbiBVQmVsb25ncygpLlxuIgogICAgfTsKICAgIEVy cm9yTWVzID0gZW1baV07CiAgfQp9OwoKIyAyICJib3guY3BwIiAyCgojIDUgImNpcmNhcmMuaCIg MQojIDExICJtYXRyaXguaCIgMQpjbGFzcyBTTWF0cml4IHsKcHVibGljOgogIGRvdWJsZSBtWzRd WzRdOwoKICBTTWF0cml4KCk7CiAgU01hdHJpeChkb3VibGUgYSk7CiAgU01hdHJpeChjb25zdCBT TWF0cml4ICZiKTsKCiAgU01hdHJpeCBvcGVyYXRvcisoY29uc3QgU01hdHJpeCAmYikgY29uc3Q7 CiAgU01hdHJpeCBvcGVyYXRvci0oY29uc3QgU01hdHJpeCAmYikgY29uc3Q7CiAgU01hdHJpeCBv cGVyYXRvci0oKSBjb25zdDsKICBTTWF0cml4IG9wZXJhdG9yKihjb25zdCBTTWF0cml4ICZiKSBj b25zdDsKICBTVmVjdG9yIG9wZXJhdG9yKihjb25zdCBTVmVjdG9yICZ2KSBjb25zdDsKICBTUG9p bnQgb3BlcmF0b3IqKGNvbnN0IFNQb2ludCAmcCkgY29uc3Q7CiAgU01hdHJpeCYgb3BlcmF0b3I9 KGNvbnN0IFNNYXRyaXggJmIpOwogIGRvdWJsZSYgb3BlcmF0b3IoKShpbnQgaSwgaW50IGopOwoK ICBTTWF0cml4IFNldFNjYWxlKGRvdWJsZSBhKSBjb25zdDsKICBTTWF0cml4IFNldFNjYWxlKGNv bnN0IFNWZWN0b3IgJnYpIGNvbnN0OwoKICBTTWF0cml4IFNldFRyYW5zbChjb25zdCBTVmVjdG9y ICZ2KSBjb25zdDsKCiAgU01hdHJpeCBTZXRSb3RYKGRvdWJsZSBhKSBjb25zdDsKICBTTWF0cml4 IFNldFJvdFkoZG91YmxlIGEpIGNvbnN0OwogIFNNYXRyaXggU2V0Um90Wihkb3VibGUgYSkgY29u c3Q7CiAgU01hdHJpeCBTZXRSb3QoY29uc3QgU1ZlY3RvciAmdiwgZG91YmxlIGEpIGNvbnN0OwoK ICB2b2lkIFNldFJvdyhpbnQgciwgY29uc3QgU1ZlY3RvciAmdik7CiAgdm9pZCBTZXRDb2woaW50 IGMsIGNvbnN0IFNWZWN0b3IgJnYpOwoKICBTTWF0cml4IFRyYW5zZlRvSyhjb25zdCBTVmVjdG9y ICZ2KSBjb25zdDsKICBTTWF0cml4IFRyYW5zZihjb25zdCBTVmVjdG9yICZmcm9tLCBjb25zdCBT VmVjdG9yICZ0bykgY29uc3Q7CiAgU01hdHJpeCBUcmFuc2ZUb0koY29uc3QgU1ZlY3RvciB2KSBj b25zdCB7IHJldHVybiBUcmFuc2YodiwgU19JKTsgfQogIFNNYXRyaXggVHJhbnNmVG9KKGNvbnN0 IFNWZWN0b3IgdikgY29uc3QgeyByZXR1cm4gVHJhbnNmKHYsIFNfSik7IH0KCiAgU01hdHJpeCBU cmFuc3Bvc2UoKSBjb25zdDsKICBpbnQgTFVQKFNNYXRyaXggJkwsIFNNYXRyaXggJlUsIFNNYXRy aXggJlApIGNvbnN0OwogIGludCBTb2x2ZUxVUChjb25zdCBTVmVjdG9yICZiLCBTVmVjdG9yICZ4 LCBjb25zdCBTTWF0cml4ICZMLCBjb25zdCBTTWF0cml4ICZVLCBjb25zdCBTTWF0cml4ICZQKSBj b25zdDsKICBpbnQgU29sdmUoY29uc3QgU1ZlY3RvciAmYiwgU1ZlY3RvciAmeCkgY29uc3Q7CiAg aW50IEludmVyc2UoU01hdHJpeCAmbSkgY29uc3Q7Cn07CgojIDUgImNpcmNhcmMuaCIgMgoKY2xh c3MgU0NpcmNsZSA6IHB1YmxpYyBTU2VnIHsKcHJpdmF0ZToKICBTTWF0cml4IG1fTTsKICBTUG9p bnQgbV9jdHI7CiAgZG91YmxlIG1fcmFkOwogIGludCBtX3N3cDsKICBkb3VibGUgY2FsY0FyZWEo KTsKICBkb3VibGUgY2FsY1BlcmltKCk7CiAgdm9pZCBjb3B5ZXNzKFNDaXJjbGUgJmMpOwogIHZv aWQgU2V0Q3RyQW5kUGxhbmUoY29uc3QgU1BvaW50ICZjZW50ZXIsIGNvbnN0IFNQbGFuZSAmcGwp OwoKcHVibGljOgogIGZyaWVuZCBjbGFzcyBTQXJjOwogIGZyaWVuZCBjbGFzcyBTQ3VydmU7Cgog IFNDaXJjbGUoKTsKICBTQ2lyY2xlKGNvbnN0IFNQb2ludCAmYywgZG91YmxlIHIgPSAxLjAsIGNv bnN0IFNQbGFuZSAmcGxhbmUgPSBTWFlQTEFORSk7CiAgU0NpcmNsZShjb25zdCBTQ2lyY2xlICZj aXJjKTsKICBTQ2lyY2xlKGNvbnN0IFNBcmMgJmFyYyk7CiAgU0NpcmNsZShjb25zdCBTUG9pbnQg JnNwLCBjb25zdCBTUG9pbnQgJm1wLCBjb25zdCBTUG9pbnQgJmVwKSB7IFNldExheWVyKCIiKTtt X2ZsYWdzPWFwZmxhZ3M9MDtwcmV2PW5leHQ9MDsgU2V0M1B0cyhzcCwgbXAsIGVwKTsgfQoKICBk b3VibGUgQW5nbGVBdFUoZG91YmxlIHUpIGNvbnN0IHsgZG91YmxlIGE9U21vZDJwaShTXzJQSStT bW9kMnBpKHUqU18yUEkpKTsgcmV0dXJuIG1fc3dwPT1TX0NDVyA/IGEgOiBTXzJQSS1hO30KICBk b3VibGUgVUF0QW5nbGUoZG91YmxlIGFuZ2xlKSBjb25zdCB7IGRvdWJsZSB1PVNtb2QycGkoYW5n bGUpL1NfMlBJOyByZXR1cm4gbV9zd3A9PVNfQ0NXID8gdSA6IDEuMC11OyB9CgogIFNTZWdfdCBU eXBlKCkgY29uc3QgeyByZXR1cm4gU0NJUkNMRTsgfQoKICBkb3VibGUgUGVyaW0oKSBjb25zdCB7 cmV0dXJuIG1fbGVuZ3RoO30KCiAgU1BvaW50IEdldEN0cigpIGNvbnN0IHtyZXR1cm4gbV9jdHI7 fQogIGRvdWJsZSBHZXRSYWQoKSBjb25zdCB7cmV0dXJuIG1fcmFkO30KICB2b2lkIFNldFBsYW5l KGNvbnN0IFNQbGFuZSAmcGwsIGNvbnN0IFNQb2ludCAmY2VudGVyKSB7U2V0Q3RyQW5kUGxhbmUo Y2VudGVyLCBwbCk7IFVwZGF0ZSgpO30KICB2b2lkIFNldFBsYW5lKGNvbnN0IFNQbGFuZSAmcGwp IHsgU2V0UGxhbmUocGwsIG1fY3RyKTsgVXBkYXRlKCk7IH0KICB2b2lkIFNldFJhZChkb3VibGUg cmFkKSB7IG1fcmFkID0gcmFkOyBVcGRhdGUoKTsgfQogIHZvaWQgU2V0Q3RyKGNvbnN0IFNQb2lu dCAmcCkgeyBTZXRDdHJBbmRQbGFuZShwLCBtX3BsYW5lKTsgVXBkYXRlKCk7IH0KCiAgU0NpcmNs ZSYgb3BlcmF0b3I9KGNvbnN0IFNDaXJjbGUgJmMpOwogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBT Q2lyY2xlICZjKSBjb25zdCB7cmV0dXJuIG1fY3RyPT1jLm1fY3RyICYmIFN0b2xDb21wKG1fcmFk LGMubV9yYWQpPT0wICYmIG1fcGxhbmU9PWMubV9wbGFuZTsgfQoKICB2b2lkIFVwZGF0ZSgpIHtj YWxjQXJlYSgpOyBjYWxjUGVyaW0oKTttX2JveD1TQm94KHRoaXMpO30KCiAgU1BvaW50IFBvaW50 KGRvdWJsZSB1KSBjb25zdCB7cmV0dXJuIFBvaW50QXRBKEFuZ2xlQXRVKHUpKTt9CiAgU1BvaW50 IFBvaW50QXRBKGRvdWJsZSBhbmdsZSkgY29uc3Q7CiAgdm9pZCBUcmFuc2Zvcm0oY29uc3QgU01h dHJpeCAmbSk7CiAgU1ZlY3RvciBUYW5nZW50KGRvdWJsZSB1KSBjb25zdDsKCiAgU1NlZyogUHJv aihjb25zdCBTUGxhbmUgJnBsKSBjb25zdCB7cmV0dXJuIG5ldyBTQ2lyY2xlKG1fY3RyLlByb2oo cGwpLCBtX3JhZCwgcGwpO30KICBTU2VnKiBUcmltU3RhcnQoZG91YmxlIHUpIGNvbnN0OwogIFNT ZWcqIFRyaW1FbmQoZG91YmxlIHUpIGNvbnN0OwogIFNTZWcqIEdldFBhcnQoZG91YmxlIHUwLCBk b3VibGUgdTEpIGNvbnN0OwogIGludCBPZmZzZXQoU1NlZ0NvbnQgJmNhLCBkb3VibGUgb2Zmcywg ZG91YmxlIHRpbnkgPSBTU19USU5ZKSBjb25zdDsKCiAgdm9pZCBTZXRTcChjb25zdCBTUG9pbnQg JnApOwogIHZvaWQgU2V0TXAoY29uc3QgU1BvaW50ICZwKTsKICB2b2lkIFNldEVwKGNvbnN0IFNQ b2ludCAmcCkgeyBTZXRTcChwKTsgfQogIGludCBTZXQzUHRzKGNvbnN0IFNQb2ludCAmYSwgY29u c3QgU1BvaW50ICZiLCBjb25zdCBTUG9pbnQgJmMpOwogIGludCBTZXRCeVB0cyhjb25zdCBTQ29u dGFpbmVyUDxTUG9pbnQ+ICZzZXRwKTsKCiAgaW50IE9yaWVudCgpIGNvbnN0IHtyZXR1cm4gbV9z d3A7IH0KICB2b2lkIFJldmVyc2UoKSB7IG1fc3dwID0gbV9zd3A9PVNfQ0NXID8gU19DVyA6IFNf Q0NXOyB9CiAgdm9pZCBGbGlwKCkgeyBTUGxhbmUgcGwgPSBTUGxhbmUobV9jdHIsIC1HZXROb3Jt YWwoKSk7IFNldFBsYW5lKHBsLCBtX2N0cik7IH0KICB2b2lkIFNldE9yaWVudChpbnQgbykgeyBp ZiAoT3JpZW50KCkgIT0gbykgUmV2ZXJzZSgpOyB9CgogIGJvb2wgUG9pbnRPblNlZyhjb25zdCBT UG9pbnQgJnAsIGRvdWJsZSAmdSwgU1BvaW50ICZhKSBjb25zdDsKCiAgYm9vbCBJbnNpZGUoY29u c3QgU1NlZyAqcHMpIGNvbnN0OwogIGludCBBYnV0Qihjb25zdCBTU2VnICpwQiwgU1NlZ0NvbnQg JmNjKSBjb25zdDsKICBpbnQgQW9yQihjb25zdCBTU2VnICpwQiwgU1NlZ0NvbnQgJmNjKSBjb25z dDsKCiAgYm9vbCBJbnRlcnNlY3QoY29uc3QgU0luZkxpbmUgJmwsIFNJbnRlcnNlY3QgJmlzZWN0 cykgY29uc3Q7CiAgYm9vbCBJbnRlcnNlY3QoY29uc3QgU1JheSAmciwgU0ludGVyc2VjdCAmaXNl Y3RzKSBjb25zdDsKICBib29sIEludGVyc2VjdChjb25zdCBTTGluZSAmbCwgU0ludGVyc2VjdCAm aXNlY3RzKSBjb25zdDsKICBib29sIEludGVyc2VjdChjb25zdCBTQ2lyY2xlICZjLCBTSW50ZXJz ZWN0ICZpc2VjdHMpIGNvbnN0OwogIGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNBcmMgJmFyYywgU0lu dGVyc2VjdCAmaXNlY3RzKSBjb25zdDsKICBib29sIEludGVyc2VjdChjb25zdCBTU2VnICpwc2Vn LCBTSW50ZXJzZWN0ICZpc2VjdHMpIGNvbnN0OwoKICBTU2VnKiBjbG9uZSgpIGNvbnN0IHsgcmV0 dXJuIG5ldyBTQ2lyY2xlKCp0aGlzKTsgfQoKfTsKCgpjbGFzcyBTQXJjIDogcHVibGljIFNTZWcg ewpwcml2YXRlOgogIFNNYXRyaXggbV9NOwogIFNQb2ludCBtX2N0cjsKICBkb3VibGUgbV9yYWQ7 CiAgZG91YmxlIG1fc2E7CiAgZG91YmxlIG1fc3dwOwogIGRvdWJsZSBjYWxjQXJlYSgpOwogIGRv dWJsZSBjYWxjUGVyaW0oKTsKICB2b2lkIGNvcHllc3MoU0FyYyAmYSk7CiAgdm9pZCBTZXRDdHJB bmRQbGFuZShjb25zdCBTUG9pbnQgJmNlbnRlciwgY29uc3QgU1BsYW5lICZwbCk7CgpwdWJsaWM6 CiAgZnJpZW5kIGNsYXNzIFNDaXJjbGU7CiAgZnJpZW5kIGNsYXNzIFNDdXJ2ZTsKCiAgU0FyYygp OwogIFNBcmMoY29uc3QgU1BvaW50ICZjLCBkb3VibGUgciwgZG91YmxlIHNhLCBkb3VibGUgc3dw LCBjb25zdCBTUGxhbmUgJnBsYW5lID0gU1hZUExBTkUpOwogIFNBcmMoY29uc3QgU0FyYyAmYXJj KTsKICBTQXJjKGNvbnN0IFNQb2ludCAmc3AsIGNvbnN0IFNQb2ludCAmbXAsIGNvbnN0IFNQb2lu dCAmZXApIHtTZXRMYXllcigiIik7bV9mbGFncz1hcGZsYWdzPTA7cHJldj1uZXh0PTA7U2V0M1B0 cyhzcCwgbXAsIGVwKTt9CiAgU0FyYyhjb25zdCBTUG9pbnQgJmMsIGRvdWJsZSByLCBjb25zdCBT VmVjdG9yICZzdiwgZG91YmxlIHN3cCwgY29uc3QgU1BsYW5lICZwbGFuZSA9IFNYWVBMQU5FKTsK ICBTQXJjKGNvbnN0IFNQb2ludCAmYywgZG91YmxlIHIsIGNvbnN0IFNWZWN0b3IgJnN2LCBjb25z dCBTVmVjdG9yICZldiwgY29uc3QgU1BsYW5lICZwbGFuZSA9IFNYWVBMQU5FKTsKCiAgZG91Ymxl IEFuZ2xlQXRVKGRvdWJsZSB1KSBjb25zdCB7IHJldHVybiBTbW9kMnBpKFNfMlBJICsgbV9zYSAr IFNtb2QycGkodSptX3N3cCkpOyB9CiAgZG91YmxlIFVBdEFuZ2xlKGRvdWJsZSBhbmdsZSkgY29u c3Q7CgogIGJvb2wgQU9uU3dlZXAoZG91YmxlIGEpIGNvbnN0OwogIGJvb2wgQUluU3dlZXAoZG91 YmxlIGEpIGNvbnN0OwoKICBTU2VnX3QgVHlwZSgpIGNvbnN0IHsgcmV0dXJuIFNBUkM7IH0KCiAg ZG91YmxlIFBlcmltKCkgY29uc3Qge3JldHVybiBtX2xlbmd0aDt9CgogIFNQb2ludCBHZXRDdHIo KSBjb25zdCB7cmV0dXJuIG1fY3RyO30KICBkb3VibGUgR2V0UmFkKCkgY29uc3Qge3JldHVybiBt X3JhZDt9CiAgZG91YmxlIEdldFNhKCkgY29uc3Qge3JldHVybiBtX3NhO30KICBkb3VibGUgR2V0 U3dwKCkgY29uc3Qge3JldHVybiBtX3N3cDt9CiAgdm9pZCBTZXRQbGFuZShjb25zdCBTUGxhbmUg JnBsLCBjb25zdCBTUG9pbnQgJmNlbnRlcikge1NldEN0ckFuZFBsYW5lKGNlbnRlciwgcGwpOyBV cGRhdGUoKTt9CiAgdm9pZCBTZXRQbGFuZShjb25zdCBTUGxhbmUgJnBsKSB7IFNldFBsYW5lKHBs LCBtX2N0cik7IFVwZGF0ZSgpOyB9CiAgdm9pZCBTZXRSYWQoZG91YmxlIHJhZCkgeyBtX3JhZCA9 IHJhZDsgVXBkYXRlKCk7IH0KICB2b2lkIFNldEN0cihjb25zdCBTUG9pbnQgJnApIHsgU2V0Q3Ry QW5kUGxhbmUocCwgbV9wbGFuZSk7IFVwZGF0ZSgpOyB9CgogIFNBcmMmIG9wZXJhdG9yPShjb25z dCBTQXJjICZhKTsKICBib29sIG9wZXJhdG9yPT0oY29uc3QgU0FyYyAmYSkgY29uc3Q7CiAgU0Fy YyBvcGVyYXRvci0oKSBjb25zdCB7U0FyYyBhKCp0aGlzKTthLlJldmVyc2UoKTtyZXR1cm4gYTt9 CgogIHZvaWQgVXBkYXRlKCkge2NhbGNBcmVhKCk7Y2FsY1BlcmltKCk7bV9ib3g9U0JveCh0aGlz KTt9CgogIFNQb2ludCBQb2ludChkb3VibGUgdSkgY29uc3Qge3JldHVybiBQb2ludEF0QShBbmds ZUF0VSh1KSk7fQogIFNQb2ludCBQb2ludEF0QShkb3VibGUgYW5nbGUpIGNvbnN0OwogIHZvaWQg VHJhbnNmb3JtKGNvbnN0IFNNYXRyaXggJm0pOwogIFNWZWN0b3IgVGFuZ2VudChkb3VibGUgdSkg Y29uc3Q7CiAgU1NlZyogUHJvaihjb25zdCBTUGxhbmUgJnBsKSBjb25zdDsKICBkb3VibGUgQXJj SGVpZ2h0KCkgY29uc3Qge3JldHVybiBtX3JhZCooMS4wLWNvcyhmYWJzKG1fc3dwKS8yLjApKTt9 CiAgZG91YmxlIEFyY0Rpdihkb3VibGUgaGVpZ2h0dG9sKSBjb25zdCB7cmV0dXJuIGNlaWwoZmFi cyhtX3N3cCkvKDIuMCphY29zKDEuMC1oZWlnaHR0b2wvbV9yYWQpKSk7IH0KCiAgU1NlZyogVHJp bVN0YXJ0KGRvdWJsZSB1KSBjb25zdDsKICBTU2VnKiBUcmltRW5kKGRvdWJsZSB1KSBjb25zdDsK ICBTU2VnKiBHZXRQYXJ0KGRvdWJsZSB1MCwgZG91YmxlIHUxKSBjb25zdDsKICBpbnQgT2Zmc2V0 KFNTZWdDb250ICZjYSwgZG91YmxlIG9mZnMsIGRvdWJsZSB0aW55ID0gU1NfVElOWSkgY29uc3Q7 CgogIHZvaWQgU2V0U3AoY29uc3QgU1BvaW50ICZwKTsKICB2b2lkIFNldE1wKGNvbnN0IFNQb2lu dCAmcCk7CiAgdm9pZCBTZXRFcChjb25zdCBTUG9pbnQgJnApOwogIGludCBTZXQzUHRzKGNvbnN0 IFNQb2ludCAmYSwgY29uc3QgU1BvaW50ICZiLCBjb25zdCBTUG9pbnQgJmMpOwogIGludCBTZXRC eVB0cyhjb25zdCBTQ29udGFpbmVyUDxTUG9pbnQ+ICZzZXRwKTsKICBpbnQgU2V0QnlUYW5nKFNM aW5lICZsc3AsIFNMaW5lICZsZXAsIGRvdWJsZSByYWQpOwoKICBpbnQgT3JpZW50KCkgY29uc3Qg eyByZXR1cm4gbV9zd3A+PTAuMD9TX0NDVzpTX0NXOyB9CiAgdm9pZCBGbGlwKCk7CiAgdm9pZCBS ZXZlcnNlKCkge21fc2E9U21vZDJwaShTXzJQSSttX3NhK21fc3dwKTsgbV9zd3AgPSAtbV9zd3A7 fQogIHZvaWQgU2V0T3JpZW50KGludCBvKSB7IGlmIChPcmllbnQoKSAhPSBvKSBSZXZlcnNlKCk7 IH0KCiAgYm9vbCBQb2ludE9uU2VnKGNvbnN0IFNQb2ludCAmcCwgZG91YmxlICZ1LCBTUG9pbnQg JmEpIGNvbnN0OwoKICBib29sIEluc2lkZShjb25zdCBTU2VnICpwcykgY29uc3Q7CiAgaW50IEFi dXRCKGNvbnN0IFNTZWcgKnBCLCBTU2VnQ29udCAmY2MpIGNvbnN0OwogIGludCBBb3JCKGNvbnN0 IFNTZWcgKnBCLCBTU2VnQ29udCAmY2MpIGNvbnN0OwoKICBib29sIEludGVyc2VjdChjb25zdCBT SW5mTGluZSAmbCwgU0ludGVyc2VjdCAmaXNlY3RzKSBjb25zdDsKICBib29sIEludGVyc2VjdChj b25zdCBTUmF5ICZyLCBTSW50ZXJzZWN0ICZpc2VjdHMpIGNvbnN0OwogIGJvb2wgSW50ZXJzZWN0 KGNvbnN0IFNMaW5lICZsLCBTSW50ZXJzZWN0ICZpc2VjdHMpIGNvbnN0OwogIGJvb2wgSW50ZXJz ZWN0KGNvbnN0IFNDaXJjbGUgJmMsIFNJbnRlcnNlY3QgJmlzZWN0cykgY29uc3Q7CiAgYm9vbCBJ bnRlcnNlY3QoY29uc3QgU0FyYyAmYXJjLCBTSW50ZXJzZWN0ICZpc2VjdHMpIGNvbnN0OwogIGJv b2wgSW50ZXJzZWN0KGNvbnN0IFNTZWcgKnNlZywgU0ludGVyc2VjdCAmaXNlY3RzKSBjb25zdDsK CiAgU1NlZyogY2xvbmUoKSBjb25zdCB7IHJldHVybiBuZXcgU0FyYygqdGhpcyk7IH0KCn07Cgoj IDMgImJveC5jcHAiIDIKCiMgNyAiY3VydmUuaCIgMQojIDcgImNvbnRhaW5lcjIuaCIgMQpleHRl cm4gY29uc3QgZG91YmxlIG5vX2NpcmNyYWRbXTsKZXh0ZXJuIGNvbnN0IGludCBjbnVtOwoKaW50 IGNtcGJ5eChjb25zdCB2b2lkICplbDEsIGNvbnN0IHZvaWQgKmVsMik7CmludCBDbXBDUGVyaW0o Y29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7CmludCBDbXBDQXJlYShjb25zdCB2b2lkICph LCBjb25zdCB2b2lkICpiKTsKCmNsYXNzIFNTZWdDb250IHsKcHJpdmF0ZToKICBmcmllbmQgY2xh c3MgU0N1cnZlOwogIFNTZWcgKiphcDsKICBpbnQgc3o7CiAgaW50IG1lbXNpemU7CiAgaW50IGNo dW5rOwogIGNoYXIgbGF5ZXJbMzNdOwogIGludCBjb2xvcjsKCiAgaW50IEdyb3coKQogIHsKICAg IFNTZWcgKip0ID0gKFNTZWcgKiopIHJlYWxsb2MoYXAsIChtZW1zaXplICsgY2h1bmspICogc2l6 ZW9mKFNTZWcgKikpOwoKICAgIGlmICghdCkKICAgICAgcmV0dXJuIC0xOwoKICAgIG1lbXNpemUg Kz0gY2h1bms7CgogICAgaWYgKHQgIT0gYXApCiAgICAgIGFwID0gdDsKCiAgICByZXR1cm4gMDsK ICB9CgoKCiAgaW50IFNocmluaygpCiAgewogICAgaWYgKChtZW1zaXplLWNodW5rKSA8IDEpCiAg ICAgIHJldHVybiAtMTsKCiAgICBTU2VnICoqdCA9IChTU2VnICoqKSByZWFsbG9jKGFwLCAobWVt c2l6ZSAtIGNodW5rKSAqIHNpemVvZihTU2VnICopKTsKCiAgICBpZiAoIXQpCiAgICAgIHJldHVy biAtMTsKCiAgICBtZW1zaXplIC09IGNodW5rOwoKICAgIGlmICh0ICE9IGFwKQogICAgICBhcCA9 IHQ7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIGludCBtaW5teigpCiAgewogICAgcmVnaXN0ZXIg aW50IHMgPSAoKHN6LTEpL2NodW5rICsgMSkqY2h1bms7CiAgICByZXR1cm4gKHMgPCBjaHVuaykg PyBjaHVuayA6IHM7CiAgfQoKCgpwdWJsaWM6CiAgY29uc3QgY2hhciogTGF5ZXIoKSBjb25zdCB7 IHJldHVybiAoY29uc3QgY2hhciAqKSBsYXllcjsgfQogIHZvaWQgU2V0TGF5ZXIoY29uc3QgY2hh ciAqcykKICB7CiAgICBpZiAoIXMpCiAgICAgIHJldHVybjsKICAgIGVsc2UgewogICAgICByZWdp c3RlciBpbnQgaTsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCBzejsgaSsrKQogICAgICAgIGFwW2ld LT5TZXRMYXllcihzKTsKCiAgICAgIHN0cm5jcHkobGF5ZXIsIHMsIDMzLTEpOwogICAgICBsYXll clszMy0xXT0nXDAnOwogICAgfQogIH0KCgoKICBpbnQgQ29sb3IoKSBjb25zdCB7IHJldHVybiBj b2xvcjsgfQoKICB2b2lkIFNldENvbG9yKGludCBjKSB7IGNvbG9yID0gYzsgfQoKCgogIFNTZWdD b250KGludCBjaHVuID0gMzApCiAgewogICAgY2h1bmsgPSBjaHVuOwogICAgc3ogPSAwOwogICAg bWVtc2l6ZSA9IG1pbm16KCk7CiAgICBhcCA9IChTU2VnICoqKSBtYWxsb2MobWVtc2l6ZSAqIHNp emVvZihTU2VnKikpOwogICAgbGF5ZXJbMF0gPSAnXDAnOwogICAgY29sb3IgPSAyNTY7CiAgfQoK CgogIFNTZWdDb250KGNvbnN0IFNTZWdDb250ICZzYykKICB7CiAgICByZWdpc3RlciBpbnQgaTsK CiAgICBjaHVuayA9IHNjLmNodW5rOwogICAgc3ogPSBzYy5zejsKICAgIG1lbXNpemUgPSBtaW5t eigpOwogICAgYXAgPSAoU1NlZyAqKikgbWFsbG9jKHNpemVvZihTU2VnKikgKiBtZW1zaXplKTsK CiAgICBmb3IgKGkgPSAwOyBpIDwgc2Muc3o7IGkrKykKICAgICAgYXBbaV0gPSBzYy5hcFtpXS0+ Y2xvbmUoKTsKICAgIHN0cm5jcHkobGF5ZXIsIHNjLmxheWVyLCAzMy0xKTsKICAgIGxheWVyWzMz LTFdID0gJ1wwJzsKICB9CgoKCiAgdmlydHVhbCB+U1NlZ0NvbnQoKQogIHsKICAgIHdoaWxlIChz ei0tID4gMCkgewogICAgICBhcFtzel0tPn5TU2VnKCk7CiAgICAgIGRlbGV0ZSBhcFtzel07CiAg ICAgIGFwW3N6XT0wOwogICAgfQogICAgZnJlZShhcCk7CiAgICBhcCA9IDA7CiAgICBzeiA9IDA7 CiAgICBtZW1zaXplID0gMDsKICAgIGxheWVyWzBdID0gJ1wwJzsKICB9CgoKCiAgdmlydHVhbCB2 b2lkIFJlc2V0KCkKICB7CiAgICB3aGlsZSAoc3otLSA+IDApIHsKICAgICAgYXBbc3pdLT5+U1Nl ZygpOwogICAgICBkZWxldGUgYXBbc3pdOwogICAgICBhcFtzel09MDsKICAgIH0KICAgIGZyZWUo YXApOwogICAgc3ogPSAwOwogICAgbWVtc2l6ZSA9IGNodW5rID4gMCA/IGNodW5rIDogMzA7CiAg ICBhcCA9IChTU2VnICoqKSBtYWxsb2MobWVtc2l6ZSAqIHNpemVvZihTU2VnKikpOwogICAgbGF5 ZXJbMF0gPSAnXDAnOwogIH0KCgoKICB2aXJ0dWFsIFNTZWdDb250JiBvcGVyYXRvcj0oY29uc3Qg U1NlZ0NvbnQgJnNjKQogIHsKICAgIHRoaXMtPn5TU2VnQ29udCgpOwoKICAgIHJlZ2lzdGVyIGlu dCBpOwoKICAgIGNodW5rID0gc2MuY2h1bms7CiAgICBzeiA9IHNjLnN6OwogICAgbWVtc2l6ZSA9 IG1pbm16KCk7CiAgICBhcCA9IChTU2VnICoqKSBtYWxsb2Moc2l6ZW9mKFNTZWcqKSAqIG1lbXNp emUpOwoKICAgIGZvciAoaSA9IDA7IGkgPCBzYy5zejsgaSsrKQogICAgICBhcFtpXSA9IHNjLmFw W2ldLT5jbG9uZSgpOwogICAgc3RybmNweShsYXllciwgc2MubGF5ZXIsIDMzKTsKICAgIGxheWVy WzMzLTFdID0gJ1wwJzsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCiAgdmlydHVhbCBTU2VnQ29u dCBvcGVyYXRvcisoY29uc3QgU1NlZ0NvbnQgJnNjKSBjb25zdAogIHsKICAgIHJlZ2lzdGVyIGlu dCBpOwogICAgU1NlZ0NvbnQgY3NjID0gKnRoaXM7CgogICAgZm9yIChpID0gMDsgaSA8IHNjLnN6 OyBpKyspCiAgICAgIGNzYy5BZGQoc2MuYXBbaV0tPmNsb25lKCkpOwoKICAgIHJldHVybiBjc2M7 CiAgfQoKCgogIHZpcnR1YWwgU1NlZ0NvbnQmIG9wZXJhdG9yKz0oY29uc3QgU1NlZ0NvbnQgJnNj KQogIHsKICAgIHJlZ2lzdGVyIGludCBpOwoKICAgIGZvciAoaSA9IDA7IGkgPCBzYy5zejsgaSsr KQogICAgICBBZGQoc2MuYXBbaV0tPmNsb25lKCkpOwoKICAgIHJldHVybiAqdGhpczsKICB9CgoK CiAgdmlydHVhbCBTU2VnKiBvcGVyYXRvcltdKGludCBpKSBjb25zdAogIHsKICAgIGlmICgoaSA8 IDApIHx8IChpID4gKHN6LTEpKSkKICAgICAgcmV0dXJuIDA7CgogICAgcmV0dXJuIGFwW2ldOwog IH0KCgoKICB2aXJ0dWFsIGludCBTaXplKCkgY29uc3QKICB7CiAgICByZXR1cm4gc3o7CiAgfQoK CgogIHZpcnR1YWwgaW50IEFkZChTU2VnKiBhKQogIHsKICAgIGlmICghYSkKICAgICAgcmV0dXJu IC0xOwoKICAgIGlmIChzeiA+PSBtZW1zaXplKQogICAgICBpZiAoR3JvdygpICE9IDApCiAgICAg ICAgcmV0dXJuIC0xOwoKICAgIGFwW3N6XSA9IGE7CiAgICBzeisrOwoKICAgIHJldHVybiAwOwog IH0KCgoKICB2aXJ0dWFsIGludCBJbnNBZnRlcihpbnQgc24sIFNTZWcqIGEpCiAgewogICAgaWYg KHN6IDwgMSkKICAgICAgcmV0dXJuIEFkZChhKTsKCiAgICBpZiAoKHNuIDwgMCkgfHwgKHNuID4g KHN6LTEpKSB8fCAhYSkKICAgICAgcmV0dXJuIC0xOwoKICAgIGlmIChzeiA+PSBtZW1zaXplKSB7 CiAgICAgIGlmIChHcm93KCkgIT0gMCkKICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgcmVn aXN0ZXIgaW50IGk7CgogICAgZm9yIChpID0gc3o7IGkgPiAoc24rMSk7IGktLSkKICAgICAgYXBb aV0gPSBhcFtpLTFdOwoKICAgIGFwW3NuKzFdID0gYTsKICAgIHN6Kys7CgogICAgcmV0dXJuIDA7 CiAgfQoKCgogIHZpcnR1YWwgaW50IEluc0JlZm9yZShpbnQgc2IsIFNTZWcqIGEpCiAgewogICAg aWYgKHN6IDwgMSkKICAgICAgcmV0dXJuIEFkZChhKTsKCiAgICBpZiAoKHNiIDwgMCkgfHwgKHNi ID4gKHN6LTEpKSB8fCAhYSkKICAgICAgcmV0dXJuIC0xOwoKICAgIGlmIChzeiA+PSBtZW1zaXpl KSB7CiAgICAgIGlmIChHcm93KCkgIT0gMCkKICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAg cmVnaXN0ZXIgaW50IGk7CgogICAgZm9yIChpID0gc3o7IGkgPiBzYjsgaS0tKQogICAgICBhcFtp XSA9IGFwW2ktMV07CgogICAgYXBbc2JdID0gYTsKICAgIHN6Kys7CgogICAgcmV0dXJuIDA7CiAg fQoKCgogIHZpcnR1YWwgaW50IERlbGV0ZShpbnQgaykKICB7CiAgICBpZiAoc3ogPCAxKQogICAg ICByZXR1cm4gLTE7CgogICAgaWYgKChrIDwgMCkgfHwgKGsgPiAoc3otMSkpKQogICAgICByZXR1 cm4gLTE7CgogICAgcmVnaXN0ZXIgaW50IGk7CgogICAgYXBba10tPn5TU2VnKCk7CiAgICBkZWxl dGUgYXBba107CgogICAgZm9yIChpID0gazsgaSA8IChzei0xKTsgaSsrKQogICAgICBhcFtpXSA9 IGFwW2krMV07CgogICAgc3otLTsKCiAgICBpZiAobWlubXooKSA8IG1lbXNpemUpCiAgICAgIFNo cmluaygpOwoKICAgIHJldHVybiAwOwogIH0KCgoKICB2aXJ0dWFsIGludCBSZXBsYWNlKGludCBr LCBTU2VnICpwcykKICB7CiAgICBpZiAoc3ogPCAxKQogICAgICByZXR1cm4gLTE7CgogICAgaWYg KChrIDwgMCkgfHwgKGsgPiAoc3otMSkpIHx8ICFwcykKICAgICAgcmV0dXJuIC0xOwoKICAgIGFw W2tdLT5+U1NlZygpOwogICAgZGVsZXRlIGFwW2tdOwoKICAgIGFwW2tdID0gcHM7CgogICAgcmV0 dXJuIDA7CiAgfQoKCgogIHZpcnR1YWwgaW50IFN3YXAoaW50IGEsIGludCBiKQogIHsKICAgIFNT ZWcqIHBhID0gYXBbYV07CgogICAgaWYgKCFwYSB8fCAhYXBbYl0pCiAgICAgIHJldHVybiAtMTsK CiAgICBhcFthXSA9IGFwW2JdOwogICAgYXBbYl0gPSBwYTsKCiAgICByZXR1cm4gMDsKICB9CgoK CiAgdmlydHVhbCB2b2lkIFNvcnQocENvbXBmX3QgY29tcGYpCiAgewogICAgcXNvcnQoYXAsIHN6 LCBzaXplb2YoU1NlZyopLCBjb21wZik7CiAgfQoKCgogIHZpcnR1YWwgdm9pZCBTb3J0QnlYKCkK ICB7CiAgICBTb3J0KGNtcGJ5eCk7CiAgfQoKCgogIGludCBDbGVhblNhbWUoKQogIHsKICAgIHJl Z2lzdGVyIGludCBpLCBrLCBkZWxzOwoKICAgIGlmIChzeiA8IDIpCiAgICAgIHJldHVybiAwOwoK ICAgIGRlbHMgPSAwOwogICAgZm9yIChpID0gMDsgaSA8IChzei0xKTsgaSsrKSB7CgogICAgICBk b3VibGUgaWFyZWEgPSBhcFtpXS0+QXJlYSgpOwogICAgICBkb3VibGUgaWxlbiA9IGFwW2ldLT5M ZW5ndGgoKTsKCiAgICAgIGZvciAoayA9IGkrMTsgayA8IHN6OyBrKyspIHsKCiAgICAgICAgZG91 YmxlIGthcmVhID0gYXBba10tPkFyZWEoKTsKICAgICAgICBkb3VibGUga2xlbiA9IGFwW2tdLT5M ZW5ndGgoKTsKCiAgICAgICAgaWYgKCBTdG9sQ29tcChpYXJlYSwga2FyZWEpID09IDAKICAgICAg ICAgICYmIFN0b2xDb21wKGlsZW4sIGtsZW4pID09IDAKICAgICAgICAgICYmIChhcFtrXS0+R2V0 Qm94KCkgPT0gYXBbaV0tPkdldEJveCgpKSkgewoKCgogICAgICAgICAgRGVsZXRlKGstLSksIGRl bHMrKzsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZGVsczsKICB9CgoKCiAg aW50IFJlbW92ZVN0YXJ0Q2lyKCkKICB7CiAgICByZWdpc3RlciBpbnQgaSwgaiwgZGVsczsKCiAg ICBkZWxzID0gMDsKICAgIGZvciAoaSA9IDA7IGkgPCBzejsgaSsrKSB7CiAgICAgIGlmIChhcFtp XS0+VHlwZSgpID09IFNDSVJDTEUpIHsKCiAgICAgICAgU0NpcmNsZSAqY2lyYyA9IChTQ2lyY2xl ICopIGFwW2ldOwoKICAgICAgICBmb3IgKGogPSAwOyBqIDwgY251bTsgaisrKQogICAgICAgICAg aWYgKFN0b2xDb21wKGNpcmMtPkdldFJhZCgpLCBub19jaXJjcmFkW2pdKSA9PSAwKSB7CiAgICAg ICAgICAgIERlbGV0ZShpLS0pLCBkZWxzKys7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg fQogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGRlbHM7CiAgfQoKCgogIGludCBTb3J0QnlQZXJp bSgpCiAgewogICAgaWYgKHN6IDwgMSkKICAgICAgcmV0dXJuIC0xOwoKICAgIHFzb3J0KGFwLCBz eiwgc2l6ZW9mKFNTZWcqKSwgQ21wQ1BlcmltKTsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgaW50 IFNvcnRCeUFyZWEoKQogIHsKICAgIGlmIChzeiA8IDEpCiAgICAgIHJldHVybiAtMTsKCiAgICBx c29ydChhcCwgc3osIHNpemVvZihTU2VnKiksIENtcENBcmVhKTsKCiAgICByZXR1cm4gMDsKICB9 CgoKCiAgdm9pZCBUcmFuc2Zvcm0oY29uc3QgU01hdHJpeCYgbSkKICB7CiAgICByZWdpc3RlciBp bnQgaTsKCiAgICBpZiAoc3ogPCAxKQogICAgICByZXR1cm47CgogICAgZm9yIChpID0gMDsgaSA8 IHN6OyBpKyspCiAgICAgIGFwW2ldLT5UcmFuc2Zvcm0obSk7CgogIH0KCgoKICBTQm94IEdldEJv eCgpCiAgewogICAgU0JveCBiOwogICAgcmVnaXN0ZXIgaW50IGk7CiAgICBmb3IgKGkgPSAwOyBp IDwgc3o7IGkrKykKICAgICAgYi5VbmlvbihhcFtpXS0+R2V0Qm94KCkpOwogICAgcmV0dXJuIGI7 CiAgfQoKCgogIHZvaWQgU2V0YXBmbGFnc0JpdChpbnQgYml0bWFzaywgaW50IHZhbCkKICB7CiAg ICByZWdpc3RlciBpbnQgaTsKCiAgICBmb3IgKGk9MDsgaSA8IHN6OyBpKyspCiAgICAgIGlmICh2 YWwpCiAgICAgICAgYXBbaV0tPmFwZmxhZ3MgfD0gYml0bWFzazsKICAgICAgZWxzZQogICAgICAg IGFwW2ldLT5hcGZsYWdzICY9IH5iaXRtYXNrOwogIH0KCgoKICBpbnQgQWRkQnlHZW9tKFNTZWcg KnBzKQogIHsKICAgIGlmICghcHMpCiAgICAgIHJldHVybiAtMTsKCiAgICBpZiAoc3ogPCAxKQog ICAgICByZXR1cm4gQWRkKHBzKTsKCiAgICBTUG9pbnQgc3NwID0gcHMtPlN0YXJ0UG9pbnQoKTsK ICAgIFNQb2ludCBzZXAgPSBwcy0+RW5kUG9pbnQoKTsKICAgIHJlZ2lzdGVyIGludCBpOwoKCiAg ICBpID0gc3otMTsKICAgIHsKICAgICAgU1BvaW50IHNwID0gYXBbaV0tPlN0YXJ0UG9pbnQoKTsK ICAgICAgU1BvaW50IGVwID0gYXBbaV0tPkVuZFBvaW50KCk7CgogICAgICBpZiAoc2VwID09IHNw KSB7CiAgICAgICAgcmV0dXJuIEluc0JlZm9yZShpLCBwcyk7CiAgICAgIH0gZWxzZSBpZiAoc3Nw ID09IGVwKSB7CiAgICAgICAgcmV0dXJuIEluc0FmdGVyKGksIHBzKTsKICAgICAgfSBlbHNlIGlm IChzZXAgPT0gZXApIHsKICAgICAgICBwcy0+UmV2ZXJzZSgpOwogICAgICAgIHJldHVybiBJbnNB ZnRlcihpLCBwcyk7CiAgICAgIH0gZWxzZSBpZiAoc3NwID09IHNwKSB7CiAgICAgICAgcHMtPlJl dmVyc2UoKTsKICAgICAgICByZXR1cm4gSW5zQmVmb3JlKGksIHBzKTsKICAgICAgfQogICAgfQog ICAgaWYgKHN6IDwgMikKICAgICAgcmV0dXJuIC0xOwoKICAgIGkgPSAwOwogICAgewogICAgICBT UG9pbnQgc3AgPSBhcFtpXS0+U3RhcnRQb2ludCgpOwogICAgICBTUG9pbnQgZXAgPSBhcFtpXS0+ RW5kUG9pbnQoKTsKCiAgICAgIGlmIChzZXAgPT0gc3ApIHsKICAgICAgICByZXR1cm4gSW5zQmVm b3JlKGksIHBzKTsKICAgICAgfSBlbHNlIGlmIChzc3AgPT0gZXApIHsKICAgICAgICByZXR1cm4g SW5zQWZ0ZXIoaSwgcHMpOwogICAgICB9IGVsc2UgaWYgKHNlcCA9PSBlcCkgewogICAgICAgIHBz LT5SZXZlcnNlKCk7CiAgICAgICAgcmV0dXJuIEluc0FmdGVyKGksIHBzKTsKICAgICAgfSBlbHNl IGlmIChzc3AgPT0gc3ApIHsKICAgICAgICBwcy0+UmV2ZXJzZSgpOwogICAgICAgIHJldHVybiBJ bnNCZWZvcmUoaSwgcHMpOwogICAgICB9CiAgICB9CiAgICBpZiAoc3ogPCAzKQogICAgICByZXR1 cm4gLTE7CgogICAgZm9yIChpID0gMTsgaSA8IChzei0xKTsgaSsrKSB7CiAgICAgIFNQb2ludCBz cCA9IGFwW2ldLT5TdGFydFBvaW50KCk7CiAgICAgIFNQb2ludCBlcCA9IGFwW2ldLT5FbmRQb2lu dCgpOwoKICAgICAgaWYgKHNlcCA9PSBzcCkgewogICAgICAgIHJldHVybiBJbnNCZWZvcmUoaSwg cHMpOwogICAgICB9IGVsc2UgaWYgKHNzcCA9PSBlcCkgewogICAgICAgIHJldHVybiBJbnNBZnRl cihpLCBwcyk7CiAgICAgIH0gZWxzZSBpZiAoc2VwID09IGVwKSB7CiAgICAgICAgcHMtPlJldmVy c2UoKTsKICAgICAgICByZXR1cm4gSW5zQWZ0ZXIoaSwgcHMpOwogICAgICB9IGVsc2UgaWYgKHNz cCA9PSBzcCkgewogICAgICAgIHBzLT5SZXZlcnNlKCk7CiAgICAgICAgcmV0dXJuIEluc0JlZm9y ZShpLCBwcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAtMTsKICB9CgoKCiAgdm9pZCByb3Io aW50IGkpCiAgewogICAgaWYgKHN6IDwgMiB8fCBpIDwgMSkKICAgICAgcmV0dXJuOwogICAgaSAl PSBzejsKICAgIGlmIChpIDwgMSkKICAgICAgcmV0dXJuOwoKICAgIHJlZ2lzdGVyIGludCBrOwog ICAgU1NlZ0NvbnQgc2Moc3opOwoKICAgIGZvciAoayA9IDA7IGsgPCBzejsgaysrKQogICAgICBz Yy5hcFsoaytpKSVzel0gPSBhcFtrXTsKICAgIGZvciAoayA9IDA7IGsgPCBzejsgaysrKQogICAg ICBhcFtrXSA9IHNjLmFwW2tdOwogICAgZGVsZXRlIHNjLmFwOwogICAgc2MuYXAgPSAwOwogICAg c2Muc3ogPSAwOwogICAgc2MubWVtc2l6ZSA9IDA7CiAgfQoKCgogIHZvaWQgcm9sKGludCBpKQog IHsKICAgIHJvcihzei1pKTsKICB9CgoKCiAgdm9pZCBTZXRMYXJnZXN0QXJlYUZpcnN0KCkgewog ICAgcmVnaXN0ZXIgaW50IGksIGsgPSAwOwogICAgcmVnaXN0ZXIgZG91YmxlIG1hID0gMC4wOwog ICAgZm9yIChpPTA7IGkgPCBTaXplKCk7IGkrKykKICAgICAgaWYgKGFwW2ldLT5BcmVhKCkgPiBt YSkgewogICAgICAgIG1hID0gYXBbaV0tPkFyZWEoKTsKICAgICAgICBrID0gaTsKICAgICAgfQog ICAgaWYgKGsgPiAwKQogICAgICBTd2FwKDAsIGspOwogIH0KCgoKfTsKCiMgNyAiY3VydmUuaCIg MgoKIyA1ICJpc2VjdC5oIiAxCiMgMTIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1yZWRoYXQtbGlu dXgvMi45Ni9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyA4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYt cmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAzCiMgMTMxICIvdXNyL2xp Yi9nY2MtbGliL2kzODYtcmVkaGF0LWxpbnV4LzIuOTYvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMg MTQ1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMv cG9zaXgxX2xpbS5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDEg MwojIDEyNyAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKIyAxNDUgIi91c3Iv aW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCgojIDEzMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJl ZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDggIi91c3IvbGliL2djYy1s aWIvaTM4Ni1yZWRoYXQtbGludXgvMi45Ni9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAi L3Vzci9saWIvZ2NjLWxpYi9pMzg2LXJlZGhhdC1saW51eC8yLjk2L2luY2x1ZGUvbGltaXRzLmgi IDIgMwojIDUgImlzZWN0LmgiIDIKCgoKCmNsYXNzIFNJc2VjdCB7CnB1YmxpYzoKICBTSXNlY3Qo KSB7c3RoaXM9c290aGVyPTA7dXRoaXM9dW90aGVyPS0xLjA7fQogIFNJc2VjdChjb25zdCBTSXNl Y3QgJmlzKSB7c3RoaXM9aXMuc3RoaXM7c290aGVyPWlzLnNvdGhlcjt1dGhpcz1pcy51dGhpczt1 b3RoZXI9aXMudW90aGVyO30KICBTSXNlY3QmIG9wZXJhdG9yPShjb25zdCBTSXNlY3QgJmlzKSB7 c3RoaXM9aXMuc3RoaXM7c290aGVyPWlzLnNvdGhlcjt1dGhpcz1pcy51dGhpczt1b3RoZXI9aXMu dW90aGVyO3JldHVybiAqdGhpczt9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNJc2VjdCAmaXMp IHtyZXR1cm4gc3RoaXM9PWlzLnN0aGlzICYmIHNvdGhlcj09aXMuc290aGVyICYmICFTdG9sQ29t cCh1dGhpcywgaXMudXRoaXMpICYmICFTdG9sQ29tcCh1b3RoZXIsIGlzLnVvdGhlcik7IH0KICBj b25zdCBTU2VnICpzdGhpczsKICBjb25zdCBTU2VnICpzb3RoZXI7CiAgZG91YmxlIHV0aGlzOwog IGRvdWJsZSB1b3RoZXI7Cn07CgoKCmNsYXNzIFNVU2VnIHsKcHVibGljOgogIFNVU2VnKCkge3Uw PXUxPS0xLjA7IHBzPTA7IHZhbHVlPWZsYWdzPTA7fQogIFNVU2VnKGRvdWJsZSB1MCwgZG91Ymxl IHUxLCBjb25zdCBTU2VnICpwcywgY29uc3QgU0lzZWN0ICZpczAsIGNvbnN0IFNJc2VjdCAmaXMx KQogIHsKICAgIHRoaXMtPnUwPXUwOwogICAgdGhpcy0+dTE9dTE7CiAgICB0aGlzLT5wcz0oU1Nl ZyopcHM7CiAgICB2YWx1ZT1mbGFncz0wOwogICAgdGhpcy0+aXMwID0gKFNJc2VjdCkgaXMwOwog ICAgdGhpcy0+aXMxID0gKFNJc2VjdCkgaXMxOwogIH0KICBTVVNlZyhjb25zdCBTVVNlZyAmdXMp CiAgewogICAgdTAgPSB1cy51MDsKICAgIHUxID0gdXMudTE7CiAgICBwcyA9IHVzLnBzOwogICAg aXMwID0gKFNJc2VjdCkgdXMuaXMwOwogICAgaXMxID0gKFNJc2VjdCkgdXMuaXMxOwogICAgdmFs dWUgPSB1cy52YWx1ZTsKICAgIGZsYWdzID0gdXMuZmxhZ3M7CiAgfQogIGRvdWJsZSB1MDsKICBk b3VibGUgdTE7CiAgU1NlZyAqcHM7CiAgU0lzZWN0IGlzMDsKICBTSXNlY3QgaXMxOwogIGludCB2 YWx1ZTsKICBpbnQgZmxhZ3M7CiAgYm9vbCBvcGVyYXRvcj09KFNVU2VnICZzdSkgeyByZXR1cm4g IVN0b2xDb21wKHUwLCBzdS51MCkgJiYgIVN0b2xDb21wKHUxLCBzdS51MSkgJiYgaXMwPT1pczE7 IH0KfTsKCgoKY2xhc3MgU0ludGVyc2VjdCA6IHB1YmxpYyBTQ29udGFpbmVyUDxTSXNlY3Q+IHsK cHVibGljOgogIHZvaWQgU3dhcElzZWN0cygpCiAgewogICAgcmVnaXN0ZXIgaW50IGs7CiAgICBm b3IgKGs9MDsgayA8IFNpemUoKTsgaysrKSB7CiAgICAgIHN3YXA8ZG91YmxlPihhcFtrXS0+dXRo aXMsIGFwW2tdLT51b3RoZXIpOwogICAgICBTU2VnICp0ID0gKFNTZWcgKikgYXBba10tPnN0aGlz OwogICAgICBhcFtrXS0+c3RoaXMgPSAoU1NlZyAqKSBhcFtrXS0+c290aGVyOwogICAgICBhcFtr XS0+c290aGVyID0gdDsKICAgIH0KICB9CgoKCgoKCgogIHZvaWQgRGJsSXNlY3RzKCkKICB7CiAg ICByZWdpc3RlciBpbnQgaSwgazsKICAgIFNJbnRlcnNlY3QgaXMyOwoKICAgIGlzMiA9ICp0aGlz OwogICAgaXMyLlN3YXBJc2VjdHMoKTsKICAgICp0aGlzICs9IGlzMjsKICAgIFNvcnQoQ21wQnlV MSk7CiAgICBmb3IgKGsgPSAwOyBrIDwgKFNpemUoKS0xKTsgaysrKSB7CiAgICAgIGZvciAoaT1r KzE7IGkgPCBTaXplKCk7IGkrKykKICAgICAgICBpZiAoU3RvbENvbXAoYXBba10tPnV0aGlzLCBh cFtpXS0+dXRoaXMpID09IDApIHsKICAgICAgICAgIERlbGV0ZShpLS0pOwogICAgICAgIH0KICAg IH0KICB9CgoKCiAgaW50IERlbFRyaXZpYWwoKQogIHsKICAgIHJlZ2lzdGVyIGludCBpLCBkZWxz OwogICAgZm9yIChkZWxzPWk9MDsgaSA8IFNpemUoKTsgaSsrKSB7CiAgICAgIGlmIChTdG9sQ29t cChmYWJzKGFwW2ldLT51dGhpcy1hcFtpXS0+dW90aGVyKSwgMS4wKSA9PSAwKQogICAgICAgIERl bGV0ZShpLS0pLCBkZWxzKys7CiAgICB9CiAgICByZXR1cm4gZGVsczsKICB9CgogIGludCBEZWxQ b2ludHNOZWFyKGNvbnN0IFNQb2ludCAmcCwgZG91YmxlIHRvbCA9IF9zc19nbG9iYWxfdG9sKQog IHsKICAgIHJlZ2lzdGVyIGludCBpLCBkZWxzOwogICAgZm9yIChpPWRlbHM9MDsgaSA8IFNpemUo KTsgaSsrKQogICAgICBpZiAoU3RvbENvbXAocC5kaXN0KGFwW2ldLT5zdGhpcy0+UG9pbnQoYXBb aV0tPnV0aGlzKSksIDAuMCwgdG9sKSA8PSAwKQogICAgICAgIERlbGV0ZShpLS0pLCBkZWxzKys7 CiAgICByZXR1cm4gZGVsczsKICB9Cgp9OwoKCgpjbGFzcyBTVVNlZ0NvbnQgOiBwdWJsaWMgU0Nv bnRhaW5lclA8U1VTZWc+IHsKcHVibGljOgoKCiAgaW50IE1ha2VDb3VudChjb25zdCBTVmVjdG9y ICZOLCBpbnQgaW5jcmVtZW50b3IpCiAgewogICAgcmVnaXN0ZXIgaW50IG0gPSAyMTQ3NDgzNjQ3 OwogICAgcmVnaXN0ZXIgaW50IGksIGN2ID0gMDsKCiAgICBmb3IgKGkgPSAwOyBpIDwgU2l6ZSgp OyBpKyspIHsKICAgICAgU1ZlY3RvciB2MSA9IGFwW2ldLT5wcy0+VGFuZ2VudChhcFtpXS0+dTAp OwogICAgICBTVmVjdG9yIHYyID0gYXBbaV0tPmlzMC5zb3RoZXItPlRhbmdlbnQoYXBbaV0tPmlz MC51b3RoZXIpOwogICAgICBkb3VibGUgYSA9IHYxLkFuZ2xlKHYyLCBOKTsKCiAgICAgIGlmIChT dG9sQ29tcChhLCBTX1BJKSA+IDApCiAgICAgICAgbSA9IG1pbjxpbnQ+KGFwW2ldLT52YWx1ZSA9 IChjdiArPSBpbmNyZW1lbnRvciksIG0pOwogICAgICBlbHNlCiAgICAgICAgbSA9IG1pbjxpbnQ+ KGFwW2ldLT52YWx1ZSA9IChjdiAtPSBpbmNyZW1lbnRvciksIG0pOwogICAgfQogICAgcmV0dXJu IG07CiAgfQoKCgogIHZvaWQgQWRkVmFsKGludCB2YWwpCiAgewogICAgcmVnaXN0ZXIgaW50IGk7 CiAgICBmb3IgKGkgPSAwOyBpIDwgU2l6ZSgpOyBpKyspCiAgICAgIGFwW2ldLT52YWx1ZSArPSB2 YWw7CiAgfQoKCgoKICBpbnQgTWFrZVVTZWdzVGhpcyhTSW50ZXJzZWN0ICZpc2VjdHMpCiAgewog ICAgaWYgKGlzZWN0cy5TaXplKCkgPCAxKQogICAgICByZXR1cm4gLTE7CiAgICBTSW50ZXJzZWN0 IGlzMiA9IGlzZWN0czsKICAgIGlzMi5Tb3J0KENtcEJ5VTEpOwoKICAgIHJlZ2lzdGVyIGludCBp OwogICAgZm9yIChpPTA7IGk8aXMyLlNpemUoKTsgaSsrKQogICAgICBBZGQobmV3IFNVU2VnKGlz MltpXS0+dXRoaXMsIGlzMlsoaSsxKSVpczIuU2l6ZSgpXS0+dXRoaXMsIGlzMltpXS0+c3RoaXMs ICooaXMyW2ldKSwgKihpczJbKGkrMSklaXMyLlNpemUoKV0pKSk7CgogICAgcmV0dXJuIDA7CiAg fQoKCgoKCgogIGludCBNYWtlVVNlZ3NPdGhlcihTSW50ZXJzZWN0ICZpc2VjdHMpCiAgewogICAg aWYgKGlzZWN0cy5TaXplKCkgPCAxKQogICAgICByZXR1cm4gLTE7CiAgICBTSW50ZXJzZWN0IGlz MiA9IGlzZWN0czsKICAgIGlzMi5Tb3J0KENtcEJ5VTIpOwoKICAgIHJlZ2lzdGVyIGludCBpOwog ICAgZm9yIChpPTA7IGk8aXMyLlNpemUoKTsgaSsrKSB7CiAgICAgIFNJc2VjdCBpeDEgPSAqKGlz MltpXSk7CiAgICAgIFNJc2VjdCBpeDIgPSAqKGlzMlsoaSsxKSVpczIuU2l6ZSgpXSk7CiAgICAg IFNTZWcgKnQ7CiAgICAgIHN3YXA8ZG91YmxlPihpeDEudXRoaXMsIGl4MS51b3RoZXIpOwogICAg ICB0ID0gKFNTZWcgKikgaXgxLnN0aGlzOwogICAgICBpeDEuc3RoaXMgPSBpeDEuc290aGVyOwog ICAgICBpeDEuc290aGVyID0gdDsKICAgICAgc3dhcDxkb3VibGU+KGl4Mi51dGhpcywgaXgyLnVv dGhlcik7CiAgICAgIHQgPSAoU1NlZyAqKSBpeDIuc3RoaXM7CiAgICAgIGl4Mi5zdGhpcyA9IGl4 Mi5zb3RoZXI7CiAgICAgIGl4Mi5zb3RoZXIgPSB0OwogICAgICBBZGQobmV3IFNVU2VnKGlzMltp XS0+dW90aGVyLCBpczJbKGkrMSklaXMyLlNpemUoKV0tPnVvdGhlciwgaXMyW2ldLT5zb3RoZXIs IGl4MSwgaXgyKSk7CiAgICB9CgogICAgcmV0dXJuIDA7CiAgfQoKfTsKCiMgOCAiY3VydmUuaCIg MgoKY2xhc3MgU0N1cnZlIDogcHVibGljIFNTZWcgewpwcml2YXRlOgogIFNTZWdDb250IG1fc2xp c3Q7CiAgYm9vbCBtX2N1cnJlbnQ7CiAgY2xhc3MgX191cGQgewogIHB1YmxpYzoKICAgIF9fdXBk KCkgeyB2YWxpZF9jbG9zZWQgPSB2YWxpZF9ib3ggPSB2YWxpZF9sZW4gPSB2YWxpZF9hcmVhID0g ZmFsc2U7IH0KICAgIHZvaWQgRmFsc2VBbGwoKSB7IHZhbGlkX2Nsb3NlZCA9IHZhbGlkX2JveCA9 IHZhbGlkX2xlbiA9IHZhbGlkX2FyZWEgPSBmYWxzZTsgfQogICAgYm9vbCB2YWxpZF9jbG9zZWQ7 CiAgICBib29sIHZhbGlkX2JveDsKICAgIGJvb2wgdmFsaWRfbGVuOwogICAgYm9vbCB2YWxpZF9h cmVhOwogIH0gbV91cGQ7CiAgYm9vbCBtX2Nsb3NlZDsKICBpbnQgbV9vcmllbnRhdGlvbjsKCiAg ZG91YmxlIGxhcmVhKFNMaW5lICpwbCkgY29uc3Q7CiAgZG91YmxlIGFhcmVhKFNBcmMgKnBhKSBj b25zdDsKICBib29sIGl4c2VnKGNvbnN0IFNTZWcgKnBzLCBTSW50ZXJzZWN0ICZpc2VjdHMsIGRv dWJsZSB0b2wgPSBfc3NfZ2xvYmFsX3RvbCkgY29uc3Q7CiAgYm9vbCBpeHNlbGYoU0ludGVyc2Vj dCAmaXNlY3RzKSBjb25zdDsKICBib29sIGl4b3RoZXIoY29uc3QgU0N1cnZlICpwYywgU0ludGVy c2VjdCAmaXNlY3RzKSBjb25zdDsKICB2b2lkIHNldFAoKTsKICBpbnQgY2xlYW5Ucml2aWFsRnJv bU9mZnNldCgpOwoKICB2b2lkIFNldFUoKTsKICBkb3VibGUgY2FsY0FyZWEoKTsKICBkb3VibGUg Y2FsY0xlbmd0aCgpOwoKcHVibGljOgogIFNDdXJ2ZSgpIHsgbV9jdXJyZW50ID0gZmFsc2U7IG1f ZmxhZ3MgPSBhcGZsYWdzID0gMDsgbV9jb2xvciA9IDI1NjsgfQogIFNDdXJ2ZShjb25zdCBTQ3Vy dmUgJmMpOwogIFNDdXJ2ZShTU2VnICpwcyk7CiAgU0N1cnZlKGNvbnN0IFNTZWdDb250ICZzbCkg eyBtX3NsaXN0ID0gc2w7IG1fY3VycmVudCA9IGZhbHNlOyBtX2NvbG9yID0gc2wuQ29sb3IoKTsg VXBkYXRlKCk7IH0KICB2aXJ0dWFsIH5TQ3VydmUoKSB7IERlc3Ryb3koKTsgfQoKICBlbnVtIENv bW1vbkZsYWdzIHsgT0ZGU0VUX0lOU0VSVEVEX0lOVkFSQz0oaW50KTEgfTsKCiAgU1NlZ190IFR5 cGUoKSBjb25zdCB7IHJldHVybiBTQ1VSVkU7IH0KCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFND dXJ2ZSAmYykgY29uc3Q7CgogIFNDdXJ2ZSYgb3BlcmF0b3I9KGNvbnN0IFNDdXJ2ZSAmYyk7CiAg U0N1cnZlIG9wZXJhdG9yKyhjb25zdCBTQ3VydmUgJmMpIGNvbnN0OwogIFNDdXJ2ZSYgb3BlcmF0 b3IrPShjb25zdCBTQ3VydmUgJmMpOwogIFNTZWcqIG9wZXJhdG9yW10oaW50IGkpIGNvbnN0IHsg cmV0dXJuIG1fc2xpc3RbaV07IH0KICBpbnQgU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2xpc3Qu U2l6ZSgpOyB9CiAgaW50IEFkZChTU2VnKiBwcyk7CiAgaW50IEluc0FmdGVyKGludCBpLCBTU2Vn ICpwcyk7CiAgaW50IEluc0JlZm9yZShpbnQgaSwgU1NlZyAqcHMpOwogIGludCBEZWxldGUoaW50 IGkpOwogIHZvaWQgU3dhcChpbnQgaSwgaW50IGopOwogIHZvaWQgUmVwbGFjZShpbnQgaSwgU1Nl ZyAqcHMpOwogIHZvaWQgRGVzdHJveSgpIHttX2FyZWE9bV9sZW5ndGg9bV91PW1fb3JpZW50YXRp b249bV9mbGFncz1hcGZsYWdzPTA7bV9zbGlzdC5+U1NlZ0NvbnQoKTttX2N1cnJlbnQ9ZmFsc2U7 fQogIHZvaWQgcm9sKGludCBpKSB7IG1fc2xpc3Qucm9sKGkpOyBzZXRQKCk7IG1fY3VycmVudCA9 IGZhbHNlOyB9CiAgdm9pZCByb3IoaW50IGkpIHsgbV9zbGlzdC5yb3IoaSk7IHNldFAoKTsgbV9j dXJyZW50ID0gZmFsc2U7IH0KCiAgdm9pZCBTZXRQbGFuZShjb25zdCBTUGxhbmUgJnApIHttX3Bs YW5lPXA7fQogIGludCBHZXRNZmxhZ3MoKSBjb25zdCB7cmV0dXJuIG1fZmxhZ3M7fQoKICBpbnQg QWRkQnlHZW9tKFNTZWcgKnBzKTsKCiAgdm9pZCBVcGRhdGUoKSB7IGlmICghbV9jdXJyZW50KSB7 c2V0UCgpOyBTZXRVKCk7IG1fY3VycmVudD10cnVlOyBtX3VwZC5GYWxzZUFsbCgpO319CiAgYm9v bCBDbG9zZWQoKSBjb25zdDsKICBTQm94IEdldEJveCgpIGNvbnN0OwogIGRvdWJsZSBMZW5ndGgo KSBjb25zdDsKICBkb3VibGUgQXJlYSgpIGNvbnN0OwogIGRvdWJsZSBFbGV2YXRpb24oKSBjb25z dDsKICB2b2lkIFNldEVsZXZhdGlvbihkb3VibGUgZWxlKSB7IFRyYW5zZm9ybShTTWF0cml4KCku U2V0VHJhbnNsKEdldE5vcm1hbCgpKmVsZSkpOyBtX2N1cnJlbnQ9ZmFsc2U7IH0KCiAgaW50IE9y aWVudCgpIGNvbnN0OwogIHZvaWQgUmV2ZXJzZSgpOwogIHZvaWQgU2V0T3JpZW50KGludCBvKSB7 IGlmIChPcmllbnQoKSAhPSBvKSBSZXZlcnNlKCk7IH0KCiAgaW50IEluZGV4KGNvbnN0IFNTZWcg KnBzKSBjb25zdDsKICBkb3VibGUgVUxpbWl0KGRvdWJsZSB1KSBjb25zdCB7aW50IGM9Q2xvc2Vk KCk7IGlmIChTdG9sQ29tcCh1LDEuMCk9PTApIHJldHVybiBjPzAuMDoxLjA7IHJldHVybiBmbW9k KDEuMCtmbW9kKHUsMS4wKSwxLjApO30KICBkb3VibGUgVUxvY2FsKGRvdWJsZSB1Z2xvYmFsLCBT U2VnKiYgcHMsIGludCAqcGkgPSAwKSBjb25zdDsKICBkb3VibGUgVUdsb2JhbChkb3VibGUgdWxv Y2FsLCBjb25zdCBTU2VnKiBwcykgY29uc3Q7CiAgZG91YmxlIFVHbG9iYWwoZG91YmxlIHVsb2Nh bCwgaW50IGkpIGNvbnN0OwogIGJvb2wgVUJlbG9uZ3MoZG91YmxlIHVnbG9iYWwsIGNvbnN0IFNT ZWcgKiBjb25zdCBwcykgY29uc3Q7CgogIFNQb2ludCBQb2ludChkb3VibGUgdSkgY29uc3Q7CiAg U1NlZyogU2VnQXRVKGRvdWJsZSB1LCBpbnQgKnBpID0gMCkgY29uc3Q7CgogIHZvaWQgVHJhbnNm b3JtKGNvbnN0IFNNYXRyaXggJm0pOwogIFNWZWN0b3IgVGFuZ2VudChkb3VibGUgdSkgY29uc3Q7 CgogIFNTZWcqIFByb2ooY29uc3QgU1BsYW5lICZwbCkgY29uc3Q7CiAgU1NlZyogVHJpbVN0YXJ0 KGRvdWJsZSB1KSBjb25zdDsKICBTU2VnKiBUcmltRW5kKGRvdWJsZSB1KSBjb25zdDsKICBTU2Vn KiBHZXRQYXJ0KGRvdWJsZSB1MCwgZG91YmxlIHUxKSBjb25zdDsKICBib29sIEluc05vZGUoZG91 YmxlIHUpOwoKICB2b2lkIFNldFNwKGNvbnN0IFNQb2ludCAmcCk7CiAgdm9pZCBTZXRNcChjb25z dCBTUG9pbnQgJnApOwogIHZvaWQgU2V0RXAoY29uc3QgU1BvaW50ICZwKTsKICBpbnQgU2V0M1B0 cyhjb25zdCBTUG9pbnQgJmEsIGNvbnN0IFNQb2ludCAmYiwgY29uc3QgU1BvaW50ICZjKTsKICBp bnQgU2V0QnlQdHMoY29uc3QgU0NvbnRhaW5lclA8U1BvaW50PiAmc2V0cCk7CgogIGJvb2wgUG9p bnRPblNlZyhjb25zdCBTUG9pbnQgJnAsIGRvdWJsZSAmdSwgU1BvaW50ICZhKSBjb25zdDsKICBi b29sIEludGVyc2VjdChjb25zdCBTU2VnICpwcywgU0ludGVyc2VjdCAmaXNlY3RzKSBjb25zdDsK ICBpbnQgTWFrZUN1cnZlcyhTU2VnQ29udCAmY2MpIGNvbnN0OwogIGludCBEaXNzb2x2ZShTU2Vn Q29udCAmY2MpIGNvbnN0OwoKICBTU2VnKiBjbG9uZSgpIGNvbnN0IHsgU0N1cnZlICpwYyA9IG5l dyBTQ3VydmUoKnRoaXMpOyByZXR1cm4gcGM7fQoKICBib29sIEluc2lkZShjb25zdCBTU2VnICpw cykgY29uc3Q7CiAgaW50IEFidXRCKGNvbnN0IFNTZWcgKnBCLCBTU2VnQ29udCAmY2MpIGNvbnN0 OwogIGludCBBb3JCKGNvbnN0IFNTZWcgKnBCLCBTU2VnQ29udCAmY2MpIGNvbnN0OwoKICBkb3Vi bGUgV2FsbHRoKGNvbnN0IFNQb2ludCAmcCwgU1BvaW50ICpwQ2VudGVyID0gMCwgU1BvaW50ICpw cDAgPSAwLCBTUG9pbnQgKnBwMSA9IDAsIGNvbnN0IFNTZWdDb250ICpwQWdhaW5zdCA9IDApIGNv bnN0OwogIGRvdWJsZSBXYWxsdGgoZG91YmxlIHUsIFNQb2ludCAqcENlbnRlciA9IDAsIFNQb2lu dCAqcHAwID0gMCwgU1BvaW50ICpwcDEgPSAwLCBjb25zdCBTU2VnQ29udCAqcEFnYWluc3QgPSAw KSBjb25zdCB7IHJldHVybiBXYWxsdGgoUG9pbnQodSksIHBDZW50ZXIsIHBwMCwgcHAxLCBwQWdh aW5zdCk7IH0KCiAgaW50IElubmVyKFNTZWdDb250ICZjYywgYm9vbCBzZXRfb3JpZW50YXRpb25f Y2N3ID0gdHJ1ZSkgY29uc3Q7CiAgaW50IE91dGVyKFNTZWdDb250ICZjYywgYm9vbCBzZXRfb3Jp ZW50YXRpb25fY2N3ID0gdHJ1ZSkgY29uc3Q7CiAgaW50IGNydWRlT2Zmc2V0KFNDdXJ2ZSAmd2Ms IGRvdWJsZSBvZmZzLCBkb3VibGUgdGlueSA9IFNTX1RJTlkpIGNvbnN0OwogIGludCBPZmZzZXQo U1NlZ0NvbnQgJmNjLCBkb3VibGUgb2ZmcywgZG91YmxlIHRpbnkgPSBTU19USU5ZKSBjb25zdDsK ICBkb3VibGUgTGFyZ2VzdENpcmNsZShTUG9pbnQgJmN0ciwgZG91YmxlIHRpbnkgPSAwLjAwMSkg Y29uc3Q7CiAgZG91YmxlIExvY2FsTGFyZ2VzdENpcmNsZShkb3VibGUgdSwgU1BvaW50ICpwQ2Vu dGVyLCBTUG9pbnQgKnBwMCwgU1BvaW50ICpwcDEsIGNvbnN0IFNTZWdDb250ICpwQWdhaW5zdCA9 IDAsIGNvbnN0IGRvdWJsZSBpbml0X3N0ZXAgPSAwLjUsIGNvbnN0IGRvdWJsZSBwYXJhdG9sX3Jh ZGlhbnMgPSAwLjAxNzQ1MzI5MiwgY29uc3QgZG91YmxlIGNpcl90b2wgPSBfc3NfZ2xvYmFsX3Rv bCkgY29uc3Q7CgogIGludCBSbTBsZW5zZWdzKGRvdWJsZSB0b2wgPSBfc3NfY29ubmVjdF90b2wp OwogIGludCBGbGF0dGVuQXJjcyhkb3VibGUgYXJjaGVpZ2h0dG9sKTsKICBpbnQgQ29ubmVjdE5v ZGVzKGRvdWJsZSB0b2wgPSBfc3NfY29ubmVjdF90b2wpOwogIGludCBDb2xsYXBzZUFyY3MoZG91 YmxlIGNlbnRlcl9kaXN0X3RvbCA9IDAuMSk7CiAgaW50IENvbGxhcHNlTGluZXMoZG91YmxlIGRl Z3RvbCA9IDEwLjApOwogIHZvaWQgQ2xvc2VJdCgpOwogIGludCBSZW1vdmVTdGFydENpcigpIHsg cmV0dXJuIG1fc2xpc3QuUmVtb3ZlU3RhcnRDaXIoKTsgfQogIGludCBDbGVhblNhbWUoKSB7IHJl dHVybiBtX3NsaXN0LkNsZWFuU2FtZSgpOyB9CiAgaW50IEZpeEhlYWRUYWlsKCk7Cgp9OwoKCgpj bGFzcyBTQ3VydmVTb3J0IHsKcHJpdmF0ZToKICBpbnQgc3o7CiAgaW50ICppbmRleDsKICBpbnQg SW5pdChjb25zdCBTQ3VydmUgJmMpOwoKcHVibGljOgogIFNDdXJ2ZVNvcnQoKTsKICB2aXJ0dWFs IH5TQ3VydmVTb3J0KCk7CgogIGludCBTb3J0QnlYKGNvbnN0IFNDdXJ2ZSAmYyk7CiAgaW50IFNv cnRCeVkoY29uc3QgU0N1cnZlICZjKTsKICBpbnQgU29ydEJ5Wihjb25zdCBTQ3VydmUgJmMpOwog IGludCBTb3J0KGNvbnN0IFNDdXJ2ZSAmYyk7CgogIGludCBTaXplKCkgY29uc3QgeyByZXR1cm4g c3o7IH0KICBpbnQgb3BlcmF0b3JbXShpbnQgaSkgY29uc3QgeyByZXR1cm4gaW5kZXhbaV07IH0K Cn07CgoKCiMgNCAiYm94LmNwcCIgMgoKIyA4ICJsaW5lLmgiIDEKY2xhc3MgU0luZkxpbmUgewpw cm90ZWN0ZWQ6CiAgU1BvaW50IHNwOwogIFNWZWN0b3IgZGlydjsKcHVibGljOgoKICBmcmllbmQg Y2xhc3MgU1BsYW5lOwoKICBTSW5mTGluZSgpIHsgfTsKICBTSW5mTGluZShjb25zdCBTUG9pbnQg JnNwLCBjb25zdCBTVmVjdG9yICZkaXJ2KTsKICBTSW5mTGluZShjb25zdCBTVmVjdG9yICZzcCwg Y29uc3QgU1ZlY3RvciAmZGlydik7CiAgU0luZkxpbmUoY29uc3QgU1ZlY3RvciAmZGlydiwgY29u c3QgU1BvaW50ICZzcCk7CiAgU0luZkxpbmUoY29uc3QgU1BvaW50ICZzcCwgY29uc3QgU1BvaW50 ICZlcCk7CiAgdmlydHVhbCB+U0luZkxpbmUoKSB7IH07CgogIHZpcnR1YWwgU1BvaW50IFBvaW50 KGRvdWJsZSB1KSBjb25zdCB7IHJldHVybiBTUG9pbnQoc3ArZGlydip1KTsgfQogIHZpcnR1YWwg U1BvaW50IEdldFNwKCkgY29uc3Qge3JldHVybiBzcDt9CiAgdmlydHVhbCBTVmVjdG9yIEdldERp cnYoKSBjb25zdCB7cmV0dXJuIGRpcnY7fQoKICB2aXJ0dWFsIGRvdWJsZSBkaXN0KGNvbnN0IFNQ b2ludCAmcCkgY29uc3Q7CiAgdmlydHVhbCBkb3VibGUgZGlzdChjb25zdCBTSW5mTGluZSAmbCkg Y29uc3Q7CiAgdmlydHVhbCBib29sIFBvaW50T24oY29uc3QgU1BvaW50ICZwKSBjb25zdCB7IHJl dHVybiBTdG9sQ29tcChkaXN0KHApLCAwLjApID09IDAuMDt9CiAgdmlydHVhbCBib29sIFBhcmFs bGVsKGNvbnN0IFNJbmZMaW5lICZsKSBjb25zdDsKICB2aXJ0dWFsIGJvb2wgQ29saW5lYXIoY29u c3QgU0luZkxpbmUgJmwpIGNvbnN0OwogIHZpcnR1YWwgYm9vbCBQZXJwZW5kaWN1bGFyKGNvbnN0 IFNJbmZMaW5lICZsKSBjb25zdDsKICB2aXJ0dWFsIGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNJbmZM aW5lICZsLCBTUG9pbnQgJnAsIGRvdWJsZSAmdCwgZG91YmxlICZ0bCkgY29uc3Q7Cn07CgpjbGFz cyBTUmF5IDogcHVibGljIFNJbmZMaW5lIHsKcHVibGljOgogIFNSYXkoKSB7IH07CiAgU1JheShj b25zdCBTUG9pbnQgJmEsIGNvbnN0IFNQb2ludCAmYikgOiBTSW5mTGluZShhLCBiKSB7fQogIFNS YXkoY29uc3QgU1ZlY3RvciAmYSwgY29uc3QgU1ZlY3RvciAmYikgOiBTSW5mTGluZShhLCBiKSB7 fQogIFNSYXkoY29uc3QgU1BvaW50ICZhLCBjb25zdCBTVmVjdG9yICZiKSA6IFNJbmZMaW5lKGEs IGIpIHt9CiAgU1JheShjb25zdCBTVmVjdG9yICZhLCBjb25zdCBTUG9pbnQgJmIpIDogU0luZkxp bmUoYSwgYikge30KCiAgdmlydHVhbCB+U1JheSgpIHsgfTsKCiAgdmlydHVhbCBTUG9pbnQgUG9p bnQoZG91YmxlIHUpIGNvbnN0IHsgcmV0dXJuIFNQb2ludChzcCtkaXJ2KnUpOyB9CiAgdmlydHVh bCBTUG9pbnQgR2V0U3AoKSBjb25zdCB7cmV0dXJuIHNwO30KICB2aXJ0dWFsIFNWZWN0b3IgR2V0 RGlydigpIGNvbnN0IHtyZXR1cm4gZGlydjt9CgogIHZpcnR1YWwgYm9vbCBQb2ludE9uKGNvbnN0 IFNQb2ludCAmcCkgY29uc3Q7CgogIHZpcnR1YWwgYm9vbCBJbnRlcnNlY3QoY29uc3QgU0luZkxp bmUgJmwsIFNQb2ludCAmcCwgZG91YmxlICZ0LCBkb3VibGUgJnRsKSBjb25zdDsKICB2aXJ0dWFs IGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNSYXkgJnIsIFNQb2ludCAmcCwgZG91YmxlICZ0LCBkb3Vi bGUgJnRyKSBjb25zdDsKfTsKCmNsYXNzIFNMaW5lIDogcHJvdGVjdGVkIFNSYXksIHB1YmxpYyBT U2VnIHsKcHJvdGVjdGVkOgogIFNQb2ludCBlcDsKICB2b2lkIHNldHNlZ3YoY29uc3QgU1BsYW5l ICZwbCk7CnB1YmxpYzoKCiAgU0xpbmUoKSB7IH07CiAgU0xpbmUoY29uc3QgU1BvaW50ICZzcCwg Y29uc3QgU1BvaW50ICZlcCwgY29uc3QgU1BsYW5lICZwbGFuZSA9IFNYWVBMQU5FKSB7U0xpbmU6 OnNwPXNwO1NMaW5lOjplcD1lcDtkaXJ2PWVwLXNwO3NldHNlZ3YocGxhbmUpO3ByZXY9bmV4dD0w O21fY29sb3I9MjU2O30KICBTTGluZShjb25zdCBTUG9pbnQgJnAsIGNvbnN0IFNWZWN0b3IgJmRp ciwgY29uc3QgU1BsYW5lICZwbGFuZSA9IFNYWVBMQU5FKSB7c3A9cDtlcD1wK2RpcjtkaXJ2PWRp cjtzZXRzZWd2KHBsYW5lKTtwcmV2PW5leHQ9MDttX2NvbG9yPTI1Njt9CiAgU0xpbmUoY29uc3Qg U0xpbmUgJmwpOwogIHZpcnR1YWwgflNMaW5lKCkgeyB9OwoKICB2aXJ0dWFsIFNTZWdfdCBUeXBl KCkgY29uc3QgeyByZXR1cm4gU0xJTkU7fQoKICBTUG9pbnQgR2V0U3AoKSBjb25zdCB7cmV0dXJu IHNwO30KICBTUG9pbnQgR2V0RXAoKSBjb25zdCB7cmV0dXJuIGVwO30KICBTVmVjdG9yIEdldERp cnYoKSBjb25zdCB7cmV0dXJuIGRpcnY7fQoKICBTTGluZSYgb3BlcmF0b3I9KGNvbnN0IFNMaW5l ICZsKTsKICBib29sIG9wZXJhdG9yPT0oY29uc3QgU0xpbmUgJmwpIGNvbnN0IHsgcmV0dXJuIHNw PT1sLnNwICYmIGVwPT1sLmVwOyB9CiAgU0xpbmUgb3BlcmF0b3ItKCkgY29uc3QgeyBTTGluZSBs KCp0aGlzKTsgbC5SZXZlcnNlKCk7IHJldHVybiBsOyB9CgogIHZvaWQgVXBkYXRlKCkgeyBtX2Fy ZWEgPSAwLjA7IG1fbGVuZ3RoID0gc3AuZGlzdChlcCk7IG1fYm94ID0gU0JveCh0aGlzKTsgfQog IHZvaWQgU2V0UGxhbmUoY29uc3QgU1BsYW5lICZwKSB7bV9wbGFuZT1wO30KCiAgdmlydHVhbCBT UG9pbnQgUG9pbnQoZG91YmxlIHUpIGNvbnN0IHsgcmV0dXJuIFNQb2ludChzcCtkaXJ2KnUpOyB9 CgogIHZvaWQgVHJhbnNmb3JtKGNvbnN0IFNNYXRyaXggJm0pOwogIFNWZWN0b3IgVGFuZ2VudChk b3VibGUgdSkgY29uc3QgeyByZXR1cm4gZGlydi5Vbml0KCk7fQogIFNTZWcqIFByb2ooY29uc3Qg U1BsYW5lICZwKSBjb25zdCB7cmV0dXJuIG5ldyBTTGluZShzcC5Qcm9qKHApLCBlcC5Qcm9qKHAp LCBwKTt9CgogIFNTZWcqIFRyaW1TdGFydChkb3VibGUgdSkgY29uc3Qge1NMaW5lICpwbD1uZXcg U0xpbmUoUG9pbnQodSksIGVwLCBtX3BsYW5lKTtwbC0+U2V0TGF5ZXIobV9sYXllcik7cGwtPlNl dFBsYW5lKG1fcGxhbmUpO3JldHVybiBwbDt9CiAgU1NlZyogVHJpbUVuZChkb3VibGUgdSkgY29u c3Qge1NMaW5lICpwbD1uZXcgU0xpbmUoc3AsIFBvaW50KHUpLCBtX3BsYW5lKTtwbC0+U2V0TGF5 ZXIobV9sYXllcik7cGwtPlNldFBsYW5lKG1fcGxhbmUpO3JldHVybiBwbDt9CiAgU1NlZyogR2V0 UGFydChkb3VibGUgdTAsIGRvdWJsZSB1MSkgY29uc3Qge1NMaW5lICpwbD1uZXcgU0xpbmUoUG9p bnQodTApLCBQb2ludCh1MSksIG1fcGxhbmUpO3BsLT5TZXRMYXllcihtX2xheWVyKTtwbC0+U2V0 UGxhbmUobV9wbGFuZSk7cmV0dXJuIHBsO30KICBpbnQgT2Zmc2V0KFNTZWdDb250ICZjYSwgZG91 YmxlIG9mZnMsIGRvdWJsZSB0aW55ID0gU1NfVElOWSkgY29uc3Q7CgogIHZvaWQgU2V0U3AoY29u c3QgU1BvaW50ICZwKTsKICB2b2lkIFNldE1wKGNvbnN0IFNQb2ludCAmcCk7CiAgdm9pZCBTZXRF cChjb25zdCBTUG9pbnQgJnApOwogIGludCBTZXQzUHRzKGNvbnN0IFNQb2ludCAmYSwgY29uc3Qg U1BvaW50ICZiLCBjb25zdCBTUG9pbnQgJmMpOwogIGludCBTZXRCeVB0cyhjb25zdCBTQ29udGFp bmVyUDxTUG9pbnQ+ICZzZXRwKTsKCiAgdm9pZCBSZXZlcnNlKCk7CiAgYm9vbCBQb2ludE9uU2Vn KGNvbnN0IFNQb2ludCAmcCwgZG91YmxlICZ1LCBTUG9pbnQgJmEpIGNvbnN0OwoKICBib29sIElu c2lkZShjb25zdCBTU2VnICpwcykgY29uc3Q7CiAgaW50IEFidXRCKGNvbnN0IFNTZWcgKnBCLCBT U2VnQ29udCAmY2MpIGNvbnN0OwogIGludCBBb3JCKGNvbnN0IFNTZWcgKnBCLCBTU2VnQ29udCAm Y2MpIGNvbnN0OwoKICBib29sIEludGVyc2VjdChjb25zdCBTSW5mTGluZSAmbCwgU1BvaW50ICZw LCBkb3VibGUgJnQsIGRvdWJsZSAmdGwpIGNvbnN0OwogIGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNS YXkgJnIsIFNQb2ludCAmcCwgZG91YmxlICZ0LCBkb3VibGUgJnRyKSBjb25zdDsKICBib29sIElu dGVyc2VjdChjb25zdCBTTGluZSAmbCwgU1BvaW50ICZwLCBkb3VibGUgJnQsIGRvdWJsZSAmdHIp IGNvbnN0OwogIGJvb2wgSW50ZXJzZWN0KGNvbnN0IFNTZWcgKnBzZWcsIFNJbnRlcnNlY3QgJmlz ZWN0cykgY29uc3Q7CgogIFNTZWcqIGNsb25lKCkgY29uc3QgeyByZXR1cm4gbmV3IFNMaW5lKCp0 aGlzKTt9Cn07CgojIDUgImJveC5jcHAiIDIKCgoKU0JveDo6U0JveChjb25zdCBTU2VnICpwcykK ewogIHN3aXRjaCAocHMtPlR5cGUoKSkgewogIGNhc2UgU0xJTkU6CiAgICB7CiAgICAgIG1fcCA9 IHBzLT5TdGFydFBvaW50KCk7CiAgICAgIG1fdiA9IFNWZWN0b3IobV9wLCBwcy0+RW5kUG9pbnQo KSk7CiAgICAgIG1fY3VycmVudCA9IHRydWU7CiAgICB9CiAgICBicmVhazsKICBjYXNlIFNBUkM6 CiAgICB7CiAgICAgIFNBcmMgKnBhID0gKFNBcmMgKikgcHM7CiAgICAgIFNQb2ludCBjdHIgPSBw YS0+R2V0Q3RyKCksIGE7CiAgICAgIGRvdWJsZSByYWQgPSBwYS0+R2V0UmFkKCksIHU7CiAgICAg IFNWZWN0b3IgaSA9IFNfSS5Qcm9qKHBhLT5HZXRQbGFuZSgpKS5Vbml0KCkqcmFkOwogICAgICBT VmVjdG9yIGogPSBTX0ouUHJvaihwYS0+R2V0UGxhbmUoKSkuVW5pdCgpKnJhZDsKICAgICAgU1Zl Y3RvciBrID0gU19LLlByb2oocGEtPkdldFBsYW5lKCkpLlVuaXQoKSpyYWQ7CiAgICAgIFNQb2lu dCBzcCA9IHBhLT5TdGFydFBvaW50KCk7CiAgICAgIFNQb2ludCBlcCA9IHBhLT5FbmRQb2ludCgp OwoKICAgICAgaWYgKHBhLT5Qb2ludE9uU2VnKGN0citpLCB1LCBhKSkKICAgICAgICBtX3YueCA9 IChjdHIraSkueDsKICAgICAgZWxzZQogICAgICAgIG1fdi54ID0gbWF4PGRvdWJsZT4oc3AueCwg ZXAueCk7CiAgICAgIGlmIChwYS0+UG9pbnRPblNlZyhjdHItaSwgdSwgYSkpCiAgICAgICAgbV9w LnggPSAoY3RyLWkpLng7CiAgICAgIGVsc2UKICAgICAgICBtX3AueCA9IG1pbjxkb3VibGU+KHNw LngsIGVwLngpOwoKICAgICAgaWYgKHBhLT5Qb2ludE9uU2VnKGN0citqLCB1LCBhKSkKICAgICAg ICBtX3YueSA9IChjdHIraikueTsKICAgICAgZWxzZQogICAgICAgIG1fdi55ID0gbWF4PGRvdWJs ZT4oc3AueSwgZXAueSk7CiAgICAgIGlmIChwYS0+UG9pbnRPblNlZyhjdHItaiwgdSwgYSkpCiAg ICAgICAgbV9wLnkgPSAoY3RyLWopLnk7CiAgICAgIGVsc2UKICAgICAgICBtX3AueSA9IG1pbjxk b3VibGU+KHNwLnksIGVwLnkpOwoKICAgICAgaWYgKHBhLT5Qb2ludE9uU2VnKGN0citrLCB1LCBh KSkKICAgICAgICBtX3YueiA9IChjdHIraykuejsKICAgICAgZWxzZQogICAgICAgIG1fdi56ID0g bWF4PGRvdWJsZT4oc3AueiwgZXAueik7CiAgICAgIGlmIChwYS0+UG9pbnRPblNlZyhjdHItaywg dSwgYSkpCiAgICAgICAgbV9wLnogPSAoY3RyLWspLno7CiAgICAgIGVsc2UKICAgICAgICBtX3Au eiA9IG1pbjxkb3VibGU+KHNwLnosIGVwLnopOwoKICAgICAgbV92IC09IG1fcDsKICAgICAgbV9j dXJyZW50ID0gdHJ1ZTsKICAgIH0KICAgIGJyZWFrOwogIGNhc2UgU0NJUkNMRToKICAgIHsKICAg ICAgU0NpcmNsZSAqcG8gPSAoU0NpcmNsZSAqKSBwczsKICAgICAgU1BvaW50IGN0ciA9IHBvLT5H ZXRDdHIoKTsKICAgICAgZG91YmxlIHJhZCA9IHBvLT5HZXRSYWQoKTsKICAgICAgU1ZlY3RvciBp ID0gU19JLlByb2oocG8tPkdldFBsYW5lKCkpLlVuaXQoKSpyYWQ7CiAgICAgIFNWZWN0b3IgaiA9 IFNfSi5Qcm9qKHBvLT5HZXRQbGFuZSgpKS5Vbml0KCkqcmFkOwogICAgICBTVmVjdG9yIGsgPSBT X0suUHJvaihwby0+R2V0UGxhbmUoKSkuVW5pdCgpKnJhZDsKCiAgICAgIG1fdi56ID0gKGN0citr KS56OwogICAgICBtX3AueiA9IChjdHItaykuejsKICAgICAgbV92LnggPSAoY3RyK2kpLng7CiAg ICAgIG1fcC54ID0gKGN0ci1pKS54OwogICAgICBtX3YueSA9IChjdHIraikueTsKICAgICAgbV9w LnkgPSAoY3RyLWopLnk7CiAgICAgIG1fdiAtPSBtX3A7CiAgICAgIG1fY3VycmVudCA9IHRydWU7 CiAgICB9CiAgICBicmVhazsKICBjYXNlIFNDVVJWRToKICAgIHsKICAgICAgU0N1cnZlICpwYyA9 IChTQ3VydmUgKikgcHM7CiAgICAgIHJlZ2lzdGVyIGludCBpOwoKICAgICAgbV9jdXJyZW50ID0g ZmFsc2U7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBwYy0+U2l6ZSgpOyBpKyspCiAgICAgICAgdGhp cy0+VW5pb24oU0JveCgoKnBjKVtpXSkpOwogICAgfQogICAgYnJlYWs7CiAgZGVmYXVsdDoKICAg IGJyZWFrOwogIH0KfQoKCgpib29sIFNCb3g6Ok92ZXJsYXBYKGNvbnN0IFNCb3ggJnIpIGNvbnN0 CnsKICBkb3VibGUgbWlueDEgPSBtaW48ZG91YmxlPihtX3AueCwgbV9wLngrbV92LngpOwogIGRv dWJsZSBtYXh4MSA9IG1heDxkb3VibGU+KG1fcC54LCBtX3AueCttX3YueCk7CiAgZG91YmxlIG1p bngyID0gbWluPGRvdWJsZT4oci5tX3AueCwgci5tX3AueCtyLm1fdi54KTsKICBkb3VibGUgbWF4 eDIgPSBtYXg8ZG91YmxlPihyLm1fcC54LCByLm1fcC54K3IubV92LngpOwogIGRvdWJsZSBtaW5l cCA9IG1pbjxkb3VibGU+KG1heHgxLCBtYXh4Mik7CiAgZG91YmxlIG1heHNwID0gbWF4PGRvdWJs ZT4obWlueDEsIG1pbngyKTsKCiAgcmV0dXJuIFN0b2xDb21wKG1pbmVwLCBtYXhzcCkgPj0gMDsK fQoKCgpib29sIFNCb3g6Ok92ZXJsYXBZKGNvbnN0IFNCb3ggJnIpIGNvbnN0CnsKICBkb3VibGUg bWlueTEgPSBtaW48ZG91YmxlPihtX3AueSwgbV9wLnkrbV92LnkpOwogIGRvdWJsZSBtYXh5MSA9 IG1heDxkb3VibGU+KG1fcC55LCBtX3AueSttX3YueSk7CiAgZG91YmxlIG1pbnkyID0gbWluPGRv dWJsZT4oci5tX3AueSwgci5tX3AueStyLm1fdi55KTsKICBkb3VibGUgbWF4eTIgPSBtYXg8ZG91 YmxlPihyLm1fcC55LCByLm1fcC55K3IubV92LnkpOwogIGRvdWJsZSBtaW5lcCA9IG1pbjxkb3Vi bGU+KG1heHkxLCBtYXh5Mik7CiAgZG91YmxlIG1heHNwID0gbWF4PGRvdWJsZT4obWlueTEsIG1p bnkyKTsKCiAgcmV0dXJuIFN0b2xDb21wKG1pbmVwLCBtYXhzcCkgPj0gMDsKfQoKCgpib29sIFNC b3g6Ok92ZXJsYXBaKGNvbnN0IFNCb3ggJnIpIGNvbnN0CnsKICBkb3VibGUgbWluejEgPSBtaW48 ZG91YmxlPihtX3AueiwgbV9wLnorbV92LnopOwogIGRvdWJsZSBtYXh6MSA9IG1heDxkb3VibGU+ KG1fcC56LCBtX3AueittX3Yueik7CiAgZG91YmxlIG1pbnoyID0gbWluPGRvdWJsZT4oci5tX3Au eiwgci5tX3AueityLm1fdi56KTsKICBkb3VibGUgbWF4ejIgPSBtYXg8ZG91YmxlPihyLm1fcC56 LCByLm1fcC56K3IubV92LnopOwogIGRvdWJsZSBtaW5lcCA9IG1pbjxkb3VibGU+KG1heHoxLCBt YXh6Mik7CiAgZG91YmxlIG1heHNwID0gbWF4PGRvdWJsZT4obWluejEsIG1pbnoyKTsKCiAgcmV0 dXJuIFN0b2xDb21wKG1pbmVwLCBtYXhzcCkgPj0gMDsKfQoKCgpib29sIFNCb3g6Okluc2lkZVgo Y29uc3QgU0JveCAmcikgY29uc3QKewogIGRvdWJsZSBtaW54MSA9IG1pbjxkb3VibGU+KG1fcC54 LCBtX3AueCttX3YueCk7CiAgZG91YmxlIG1heHgxID0gbWF4PGRvdWJsZT4obV9wLngsIG1fcC54 K21fdi54KTsKICBkb3VibGUgbWlueDIgPSBtaW48ZG91YmxlPihyLm1fcC54LCByLm1fcC54K3Iu bV92LngpOwogIGRvdWJsZSBtYXh4MiA9IG1heDxkb3VibGU+KHIubV9wLngsIHIubV9wLngrci5t X3YueCk7CgogIHJldHVybiBTdG9sQ29tcChtaW54MiwgbWlueDEpIDw9IDAgJiYgU3RvbENvbXAo bWF4eDEsIG1heHgyKSA8PSAwOwp9CgoKCmJvb2wgU0JveDo6SW5zaWRlWShjb25zdCBTQm94ICZy KSBjb25zdAp7CiAgZG91YmxlIG1pbnkxID0gbWluPGRvdWJsZT4obV9wLnksIG1fcC55K21fdi55 KTsKICBkb3VibGUgbWF4eTEgPSBtYXg8ZG91YmxlPihtX3AueSwgbV9wLnkrbV92LnkpOwogIGRv dWJsZSBtaW55MiA9IG1pbjxkb3VibGU+KHIubV9wLnksIHIubV9wLnkrci5tX3YueSk7CiAgZG91 YmxlIG1heHkyID0gbWF4PGRvdWJsZT4oci5tX3AueSwgci5tX3AueStyLm1fdi55KTsKCiAgcmV0 dXJuIFN0b2xDb21wKG1pbnkyLCBtaW55MSkgPD0gMCAmJiBTdG9sQ29tcChtYXh5MSwgbWF4eTIp IDw9IDA7Cn0KCgoKYm9vbCBTQm94OjpJbnNpZGVaKGNvbnN0IFNCb3ggJnIpIGNvbnN0CnsKICBk b3VibGUgbWluejEgPSBtaW48ZG91YmxlPihtX3AueiwgbV9wLnorbV92LnopOwogIGRvdWJsZSBt YXh6MSA9IG1heDxkb3VibGU+KG1fcC56LCBtX3AueittX3Yueik7CiAgZG91YmxlIG1pbnoyID0g bWluPGRvdWJsZT4oci5tX3Aueiwgci5tX3AueityLm1fdi56KTsKICBkb3VibGUgbWF4ejIgPSBt YXg8ZG91YmxlPihyLm1fcC56LCByLm1fcC56K3IubV92LnopOwoKICByZXR1cm4gU3RvbENvbXAo bWluejIsIG1pbnoxKSA8PSAwICYmIFN0b2xDb21wKG1heHoxLCBtYXh6MikgPD0gMDsKfQoKCgpT Qm94JiBTQm94OjpVbmlvbihjb25zdCBTQm94ICZyKQp7CiAgaWYgKCFtX2N1cnJlbnQpIHsKICAg ICp0aGlzID0gcjsKICAgIG1fY3VycmVudCA9IHRydWU7CiAgfSBlbHNlIHsKICAgIGRvdWJsZSBt aW54MSA9IG1pbjxkb3VibGU+KG1fcC54LCBtX3AueCttX3YueCk7CiAgICBkb3VibGUgbWF4eDEg PSBtYXg8ZG91YmxlPihtX3AueCwgbV9wLngrbV92LngpOwogICAgZG91YmxlIG1pbngyID0gbWlu PGRvdWJsZT4oci5tX3AueCwgci5tX3AueCtyLm1fdi54KTsKICAgIGRvdWJsZSBtYXh4MiA9IG1h eDxkb3VibGU+KHIubV9wLngsIHIubV9wLngrci5tX3YueCk7CgogICAgZG91YmxlIG1pbnkxID0g bWluPGRvdWJsZT4obV9wLnksIG1fcC55K21fdi55KTsKICAgIGRvdWJsZSBtYXh5MSA9IG1heDxk b3VibGU+KG1fcC55LCBtX3AueSttX3YueSk7CiAgICBkb3VibGUgbWlueTIgPSBtaW48ZG91Ymxl PihyLm1fcC55LCByLm1fcC55K3IubV92LnkpOwogICAgZG91YmxlIG1heHkyID0gbWF4PGRvdWJs ZT4oci5tX3AueSwgci5tX3AueStyLm1fdi55KTsKCiAgICBkb3VibGUgbWluejEgPSBtaW48ZG91 YmxlPihtX3AueiwgbV9wLnorbV92LnopOwogICAgZG91YmxlIG1heHoxID0gbWF4PGRvdWJsZT4o bV9wLnosIG1fcC56K21fdi56KTsKICAgIGRvdWJsZSBtaW56MiA9IG1pbjxkb3VibGU+KHIubV9w LnosIHIubV9wLnorci5tX3Yueik7CiAgICBkb3VibGUgbWF4ejIgPSBtYXg8ZG91YmxlPihyLm1f cC56LCByLm1fcC56K3IubV92LnopOwoKICAgIG1fcC54ID0gbWluPGRvdWJsZT4obWlueDEsIG1p bngyKTsKICAgIG1fcC55ID0gbWluPGRvdWJsZT4obWlueTEsIG1pbnkyKTsKICAgIG1fcC56ID0g bWluPGRvdWJsZT4obWluejEsIG1pbnoyKTsKCiAgICBtX3YueCA9IG1heDxkb3VibGU+KG1heHgx LCBtYXh4Mik7CiAgICBtX3YueSA9IG1heDxkb3VibGU+KG1heHkxLCBtYXh5Mik7CiAgICBtX3Yu eiA9IG1heDxkb3VibGU+KG1heHoxLCBtYXh6Mik7CgogICAgbV92IC09IG1fcDsKICB9CgogIHJl dHVybiAqdGhpczsKfQoKCgp2b2lkIFNCb3g6OkdldDhQb2ludHMoU1BvaW50ICpwcCkgY29uc3QK ewogIFNWZWN0b3IgeGEsIHlhLCB6YTsKICB4YSA9IFNfSSAqIG1fdi54OwogIHlhID0gU19KICog bV92Lnk7CiAgemEgPSBTX0sgKiBtX3YuejsKICBwcFswXSA9IG1fcDsKICBwcFsxXSA9IG1fcCt4 YTsKICBwcFsyXSA9IHBwWzFdK3lhOwogIHBwWzNdID0gcHBbMl0teGE7CiAgcHBbNF0gPSBwcFsw XSt6YTsKICBwcFs1XSA9IHBwWzFdK3phOwogIHBwWzZdID0gcHBbMl0remE7CiAgcHBbN10gPSBw cFszXSt6YTsKfQoKCgp2b2lkIFNCb3g6OkdldEJveENvbnQoU1NlZ0NvbnQgJmNjKSBjb25zdAp7 CiAgU1BvaW50IHBzWzhdOwogIEdldDhQb2ludHMocHMpOwogIGNjLkFkZChuZXcgU0xpbmUocHNb MF0sIHBzWzFdKSk7CiAgY2MuQWRkKG5ldyBTTGluZShwc1sxXSwgcHNbMl0pKTsKICBjYy5BZGQo bmV3IFNMaW5lKHBzWzJdLCBwc1szXSkpOwogIGNjLkFkZChuZXcgU0xpbmUocHNbM10sIHBzWzBd KSk7CiAgY2MuQWRkKG5ldyBTTGluZShwc1s0XSwgcHNbNV0pKTsKICBjYy5BZGQobmV3IFNMaW5l KHBzWzVdLCBwc1s2XSkpOwogIGNjLkFkZChuZXcgU0xpbmUocHNbNl0sIHBzWzddKSk7CiAgY2Mu QWRkKG5ldyBTTGluZShwc1s3XSwgcHNbNF0pKTsKICBjYy5BZGQobmV3IFNMaW5lKHBzWzBdLCBw c1s0XSkpOwogIGNjLkFkZChuZXcgU0xpbmUocHNbMV0sIHBzWzVdKSk7CiAgY2MuQWRkKG5ldyBT TGluZShwc1syXSwgcHNbNl0pKTsKICBjYy5BZGQobmV3IFNMaW5lKHBzWzNdLCBwc1s3XSkpOwp9 Cg==