From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11480 invoked by alias); 10 Nov 2002 20:16:02 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 11449 invoked by uid 71); 10 Nov 2002 20:16:01 -0000 Resent-Date: 10 Nov 2002 20:16:01 -0000 Resent-Message-ID: <20021110201601.11448.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, klaas.decanniere@pandora.be Received: (qmail 9230 invoked by uid 61); 10 Nov 2002 20:14:39 -0000 Message-Id: <20021110201439.9229.qmail@sources.redhat.com> Date: Sun, 10 Nov 2002 12:16:00 -0000 From: klaas.decanniere@pandora.be Reply-To: klaas.decanniere@pandora.be To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c/8518: Segmentation fault in gcc when compiling mplayer X-SW-Source: 2002-11/txt/msg00483.txt.bz2 List-Id: >Number: 8518 >Category: c >Synopsis: Segmentation fault in gcc when compiling mplayer >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Sun Nov 10 12:16:01 PST 2002 >Closed-Date: >Last-Modified: >Originator: Klaas Decanniere >Release: 3.2 >Organization: >Environment: System: Linux otty 2.4.19-4GB #1 Fri Sep 13 13:19:15 UTC 2002 i686 unknown Architecture: i686 host: i486-suse-linux-gnu build: i486-suse-linux-gnu target: i486-suse-linux-gnu configured with: ../configure --enable-threads=posix --prefix=/usr --with-local- prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/us r/lib --enable-languages=c,c++,f77,objc,java,ada --enable-libgcj --with-gxx-incl ude-dir=/usr/include/g++ --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit i486-suse-linux >Description: gcc itself asks me to report this - I 'm doing the best I can... compiling mplayer source code. using make problem occurs when compiling the libavcodec (CVS checkout of ffmpeg from today, november 10 2002, integrated into the mplayer source code as instruced) Gcc exits with Segmentation fault to generate the preprocessor file, I descended in the relevant directory and manually issued the gcc command gcc -v -save-temps -O4 -march=athlon-xp -mcpu=athlon-xp -pipe -ffast-math -fomit-frame-pointer -D_REENTRANT -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -g -DHAVE_AV_CONFIG_H -I.. -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE -c -o utils.o utils.c the utils.i file is attached. gcc output is gcc: warning: -pipe ignored because -save-temps specified Reading specs from /usr/lib/gcc-lib/i486-suse-linux/3.2/specs Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --enable-languages=c,c++,f77,objc,java,ada --enable-libgcj --with-gxx-include-dir=/usr/include/g++ --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit i486-suse-linux Thread model: posix gcc version 3.2 /usr/lib/gcc-lib/i486-suse-linux/3.2/cpp0 -lang-c -v -I.. -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=0 -D__GXX_ABI_VERSION=102 -D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -D__ELF__ -D__unix__ -D__gnu_linux__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__OPTIMIZE__ -D__FAST_MATH__ -D__STDC_HOSTED__=1 -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__athlon -D__athlon__ -D__athlon_sse__ -D__tune_athlon__ -D__tune_athlon_sse__ -D__SSE__ -D__MMX__ -D__3dNOW__ -D__3dNOW_A__ -D_REENTRANT -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE utils.c -Wall utils.i GNU CPP version 3.2 (cpplib) (i386 Linux/ELF) #include "..." search starts here: #include <...> search starts here: .. /usr/local/include /usr/lib/gcc-lib/i486-suse-linux/3.2/include /usr/i486-suse-linux/include /usr/include End of search list. /usr/lib/gcc-lib/i486-suse-linux/3.2/cc1 -fpreprocessed utils.i -quiet -dumpbase utils.c -march=athlon-xp -mcpu=athlon-xp -g -O4 -Wall -version -ffast-math -fomit-frame-pointer -o utils.s GNU CPP version 3.2 (cpplib) (i386 Linux/ELF) GNU C version 3.2 (i486-suse-linux) compiled by GNU C version 3.2. In file included from utils.c:20: dsputil.h:277: warning: static declaration for `lrintf' follows non-static dsputil.h: In function `lrintf': dsputil.h:279: internal error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See for instructions. >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="utils.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="utils.i" IyAxICJ1dGlscy5jIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMgMSAi dXRpbHMuYyIKIyAxOSAidXRpbHMuYyIKIyAxICJhdmNvZGVjLmgiIDEKCgoKIyAxICJjb21tb24u aCIgMQojIDIwICJjb21tb24uaCIKIyAxICIuLi9jb25maWcuaCIgMQojIDIxICJjb21tb24uaCIg MgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjgzICIvdXNyL2lu Y2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMg Mjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzEyICIvdXNyL2luY2x1ZGUvZmVh dHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMgMzEzICIvdXNy L2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAz CgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMi9pbmNsdWRl L3N0ZGRlZi5oIiAxIDMKIyAyMDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMu Mi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyAyOTQg Ii91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAz CnR5cGVkZWYgbG9uZyBpbnQgd2NoYXJfdDsKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAy IDMKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRmbGFncy5oIiAxIDMKIyA0MyAi L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3Rh dHVzLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9l bmRpYW4uaCIgMiAzCiMgNjQgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMiAzCgp1 bmlvbiB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAg ICAgdW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19j b3JlZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0Y29kZTo4OwogICAgICAgIHVu c2lnbmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rlcm1pbmF0ZWQ7CiAgICBzdHJ1 Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3B2YWw6ODsKICAgICAgICB1 bnNpZ25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoK CiAgICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsKIyA0NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAyIDMKIyA2OCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCnR5cGVkZWYgdW5pb24KICB7CiAg ICB1bmlvbiB3YWl0ICpfX3VwdHI7CiAgICBpbnQgKl9faXB0cjsKICB9IF9fV0FJVF9TVEFUVVMg X19hdHRyaWJ1dGVfXyAoKF9fdHJhbnNwYXJlbnRfdW5pb25fXykpOwojIDk0ICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCBy ZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90Owog ICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBz dHJ1Y3QKICB7CiAgICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJlbTsK ICB9IGxsZGl2X3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVf dCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSA7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAo X19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJu IGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50 IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikg OwoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgOwoKZXh0 ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikg OwoKCgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fYmFzZSkgOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKCl9fZXh0 ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25l ZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIDsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4g bG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fYmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu dCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp bnQgX19iYXNlKQogICAgIDsKIyAyMTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAz CnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAq X19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwog IGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVy Owp9ICpfX2xvY2FsZV90OwojIDIxMiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKZXh0 ZXJuIGxvbmcgaW50IF9fc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2Mp IDsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSA7CgpfX2V4dGVuc2lvbl9fCmV4 dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2xvY2FsZV90IF9fbG9jKSA7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25n IGxvbmcgaW50IF9fc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIDsKCmV4dGVybiBkb3VibGUgX19z dHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykK ICAgICA7CgpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLCBfX2xvY2FsZV90IF9fbG9jKSA7CgpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2wg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgOwoKCgoKCgpleHRlcm4gZG91YmxlIF9fc3Ry dG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f Z3JvdXApCiAgICAgOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIDsKZXh0ZXJuIGxvbmcg ZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X2dyb3VwKSA7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcg aW50IF9fc3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBs b25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1 bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAq CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApCiAg ICAgOwoKCgoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQpzdHJ0b2QgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKQp7CiAgcmV0dXJu IF9fc3RydG9kX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxp bmUgbG9uZyBpbnQKc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9f c3RydG9sX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CmV4dGVybiBf X2lubGluZSB1bnNpZ25lZCBsb25nIGludApzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFz ZSkKewogIHJldHVybiBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFz ZSwgMCk7Cn0KCgpleHRlcm4gX19pbmxpbmUgZmxvYXQKc3RydG9mIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikKewogIHJldHVybiBf X3N0cnRvZl9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5l IGxvbmcgZG91YmxlCnN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKQp7CiAgcmV0dXJuIF9fc3RydG9sZF9pbnRlcm5hbCAo X19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUg bG9uZyBsb25nIGludApzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4g X19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0 ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91cSAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsCiAgICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAo X19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBf X2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKQp7 CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAw KTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50 CnN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG91 bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgpleHRlcm4gX19p bmxpbmUgZG91YmxlCmF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIHN0cnRv ZCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCkpOwp9CmV4dGVybiBfX2lubGluZSBpbnQK YXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1cm4gKGludCkgc3RydG9sIChfX25w dHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwgMTApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGlu dAphdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVybiBzdHJ0b2wgKF9fbnB0ciwg KGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0KCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lu bGluZSBsb25nIGxvbmcgaW50CmF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKewogIHJldHVy biBzdHJ0b2xsIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQgKikwKSwgMTApOwp9CiMgMzg0ICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikg OwoKCmV4dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI4 ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5 cGVzLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9s aWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMw ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIg X191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2ln bmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVu c2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVu c2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRl L2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVu c2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90 Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBp bnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNp b25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25f XyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19x dWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9f dV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcg X19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlu a190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7 CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3Vf bG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191 X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9f ZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7 CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29u ZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9f c3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xv Y2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKCgoKdHlwZWRlZiBpbnQgX19rZXlf dDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBs b25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlw ZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250 X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25n IF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVk ZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoK dHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQg X190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWdu ZWQgaW50IF9fc29ja2xlbl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlw ZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9iaXRzL3Nj aGVkLmgiIDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0 eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAzCgoKc3Ry dWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBpbnQgX19zcGlu bG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJl YWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAgaW50IF9f ZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0g X19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXpl X3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRk cjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3Ry dWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVz Y3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBp bnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQg cHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsK ICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tp bmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhf dDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4 YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoKCnR5cGVkZWYgc3RydWN0 IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19yd19sb2Nr OwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZXI7CiAgX3B0 aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0 ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNoYXJlZDsKfSBwdGhyZWFk X3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7CiAgaW50IF9f cHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVkZWYgdm9sYXRpbGUgaW50 IHB0aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgc3RydWN0IF9wdGhyZWFk X2Zhc3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9yZXF1aXJlZDsKICBpbnQgX19iYV9wcmVz ZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsKfSBwdGhyZWFkX2JhcnJpZXJfdDsK Cgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX2JhcnJpZXJhdHRy X3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTQ0ICIvdXNy L2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5o IiAyIDMKCgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hv cnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVk ZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYg X19mc2lkX3QgZnNpZF90OwoKCgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCgoKdHlwZWRl ZiBfX2lubzY0X3QgaW5vX3Q7CgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm82NF90OwoKCgoKdHlw ZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRl ZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlw ZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmX3Q7CgoKCgp0 eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoK dHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoKCgoK dHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoK Cgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTMyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyA1OSAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMwp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190OwojIDcwICIvdXNyL2luY2x1ZGUvdGltZS5o IiAzCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwojIDgyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz CnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDk0ICIvdXNyL2luY2x1ZGUvdGltZS5o IiAzCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDIgMwoKCgp0eXBlZGVmIF9fdXNlY29uZHNfdCB1c2Vjb25kc190OwoKCgp0eXBlZGVm IF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0 ODYtc3VzZS1saW51eC8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0 eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVp bnQ7CiMgMTkwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQg aW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVm IHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18p KSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl X18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDIxNSAiL3Vzci9pbmNsdWRlL3N5cy90 eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMzEgIi91c3Iv aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIg MSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIg Mwp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAg dW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9u ZyBpbnQpKSldOwogIH0gX19zaWdzZXRfdDsKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu aCIgMiAzCgoKCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgoKCgojIDEgIi91c3IvaW5j bHVkZS90aW1lLmgiIDEgMwojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGlt ZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07 CiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy90aW1lLmgiIDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDMKc3RydWN0 IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3Vz ZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCiMgNTUgIi91c3Iv aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKdHlwZWRlZiBsb25nIGludCBfX2ZkX21hc2s7CgoKCgoK Cgp0eXBlZGVmIHN0cnVjdAogIHsKCgoKICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0IC8gKDgg KiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCgoKCgogIH0gZmRfc2V0OwoKCgoKCgp0eXBlZGVmIF9f ZmRfbWFzayBmZF9tYXNrOwojIDk1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCgoKCgoK CgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVh ZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAog ICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAg ICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSA7CgoKCgoK ZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFk ZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAog ICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAg ICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0 LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdt YXNrKSA7CgoKCiMgMjE2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vz ci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMjE5ICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7CiMgMjQzICIvdXNy L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250X3Q7CgoK CnR5cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250 NjRfdCBmc2ZpbGNudF90OwoKCgoKCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0X3Q7CnR5 cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxjbnQ2NF90 IGZzZmlsY250NjRfdDsKCgoKIyAzOTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoK CmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQpIDsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1 bnNpZ25lZCBpbnQgX19zZWVkKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWdu ZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fc3RhdGVsZW4pIDsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChjaGFyICpfX3N0 YXRlYnVmKSA7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEKICB7CiAgICBpbnQzMl90ICpmcHRy OwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0YXRlOwogICAgaW50IHJhbmRfdHlw ZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3NlcDsKICAgIGludDMyX3QgKmVuZF9w dHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0 cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqX19yZXN0cmljdCBfX3Jl c3VsdCkgOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0cnVj dCByYW5kb21fZGF0YSAqX19idWYpIDsKCmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgKHVuc2lnbmVk IGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9y IChjaGFyICpfX3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCgoKZXh0ZXJuIGludCByYW5k ICh2b2lkKSA7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoKCgpl eHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIDsKCgoKCgoKCmV4dGVybiBk b3VibGUgZHJhbmQ0OCAodm9pZCkgOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVkIHNo b3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIDsK ZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7 CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGxvbmcgaW50IGpyYW5k NDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSA7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0 OCAobG9uZyBpbnQgX19zZWVkdmFsKSA7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0 OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgOwpleHRlcm4gdm9pZCBsY29uZzQ4 ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2Rh dGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwogICAgdW5zaWduZWQgc2hvcnQg aW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQg c2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoK ZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19i dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQp IDsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAog ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1 ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkg OwoKCmV4dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0 IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19y ZXN1bHQpIDsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJp WzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmlj dCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9f cmVzdWx0KSA7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f cmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0 cmljdCBfX3Jlc3VsdCkgOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50 IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf X3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVz dHJpY3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVk dmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICA7CgpleHRlcm4gaW50IHNl ZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgOwoKZXh0ZXJuIGludCBsY29uZzQ4 X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddLAogICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpIDsKIyA1MjcgIi91c3IvaW5jbHVkZS9zdGRs aWIuaCIgMwpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3QgX19zaXplKSBfX2F0dHJpYnV0ZV9f ICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNp emVfdCBfX3NpemUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRl cm4gdm9pZCAqcmVhbGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRl X18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgOwoKCgpl eHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIDsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxs b2NhLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIvdXNyL2xpYi9n Y2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjYgIi91 c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKCgoKCgpleHRlcm4gdm9pZCAqYWxsb2NhIChzaXpl X3QgX19zaXplKSA7CgoKCgoKCiMgNTQ3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoK ZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs bG9jX18pKTsKCgoKCmV4dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwg c2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplKQogICAgIF9fYXR0cmlidXRlX18gKChf X21hbGxvY19fKSk7CgoKCmV4dGVybiB2b2lkIGFib3J0ICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgo X19ub3JldHVybl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9p ZCkpIDsKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1 cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICA7CgoKCgoKZXh0ZXJuIHZvaWQgZXhp dCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRl cm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f KSk7CgoKCgpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgpl eHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgoK CmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgOwoKCgoKCmV4dGVybiBpbnQgc2V0 ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19y ZXBsYWNlKQogICAgIDsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFt ZSkgOwoKCgoKCgpleHRlcm4gaW50IGNsZWFyZW52ICh2b2lkKSA7CiMgNjIzICIvdXNyL2luY2x1 ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgOwoj IDYzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAq X190ZW1wbGF0ZSkgX19hc21fXyAoIiIgIm1rc3RlbXA2NCIpOwoKCgoKCmV4dGVybiBpbnQgbWtz dGVtcDY0IChjaGFyICpfX3RlbXBsYXRlKSA7CiMgNjUwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKCgoKCmV4dGVybiBp bnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgOwoKCgoKCgpleHRlcm4gY2hhciAq Y2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKIyA2NzIgIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0 cmljdCBfX3Jlc29sdmVkKSA7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9f Y29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90IGNv bXBhcmlzb25fZm5fdDsKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpf X2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVy biB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXpl LAogICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBp bnQgYWJzIChpbnQgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25n IGludCBsYWJzIChsb25nIGludCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9f ZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194 KQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRp diAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rl bm9tKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0 ZXJuIGxsZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKIyA3MjggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRl cm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3Ry aWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7 CgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50 ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg X19zaWduKSA7CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k aWdpdCwgY2hhciAqX19idWYpIDsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUg X192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmlj dCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CmV4dGVybiBjaGFyICpxZmN2dCAo bG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGlu dCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CmV4dGVybiBj aGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1 ZikgOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs IGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry aWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX2xlbikgOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9f cmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fbGVuKSA7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFs dWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19k ZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpf X3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25n IGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpf X3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAg ICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CgoKCgoKCmV4dGVy biBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGlu dCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCB3 Y3RvbWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSA7CgoKCmV4dGVybiBzaXplX3QgbWJz dG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSA7CgpleHRlcm4gc2l6 ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikKICAgICA7 CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkgOwoj IDgwOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFy ICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX2Nv bnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX192YWx1ZXApIDsKCgoKCgpleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29uc3QgY2hh ciAqX19rZXkpIDsKCgoKCgoKCmV4dGVybiBpbnQgcG9zaXhfb3BlbnB0IChpbnQgX19vZmxhZykg OwoKCgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgOwoKCgpleHRlcm4gaW50IHVu bG9ja3B0IChpbnQgX19mZCkgOwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25hbWUgKGludCBfX2ZkKSA7 CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVf dCBfX2J1ZmxlbikgOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIDsKCgoKCgoKZXh0ZXJuIGlu dCBnZXRsb2FkYXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSA7CgoKCgoKCiMg MjMgImNvbW1vbi5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDMwICIvdXNy L2luY2x1ZGUvc3RkaW8uaCIgMwoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1s aW51eC8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9zdGRpby5o IiAyIDMKIyA0NSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJ TEUgRklMRTsKIyA1NSAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX0lP X0ZJTEUgX19GSUxFOwojIDY1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5j bHVkZS9saWJpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDE0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi IDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjIvaW5jbHVkZS9zdGRk ZWYuaCIgMSAzCiMgMzIxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjIvaW5j bHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CiMgMTUgIi91c3Iv aW5jbHVkZS9fR19jb25maWcuaCIgMiAzCiMgMjQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIg MwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFy LmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjIvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMK IyA2NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2Nv dW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAg fSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi IDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19z dGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAg X19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRlL19H X2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwojIDI4ICIvdXNyL2lu Y2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vz ci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51 eC8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAy IDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxp Yi9pNDg2LXN1c2UtbGludXgvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMyICIvdXNyL2lu Y2x1ZGUvZ2NvbnYuaCIgMiAzCgoKCgoKZW51bQp7CiAgX19HQ09OVl9PSyA9IDAsCiAgX19HQ09O Vl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgogIF9fR0NPTlZfRU1Q VFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lMTEVHQUxfSU5QVVQs CiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVHQUxfREVTQ1JJUFRP UiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07CgoKCmVudW0KewogIF9fR0NPTlZfSVNfTEFT VCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIKfTsKCgoKc3RydWN0 IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1Y3QgX19nY29udl9s b2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0eXBlZGVmIGludCAo Kl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3QgX19nY29udl9zdGVw X2RhdGEgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgq X19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAo Kl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50 ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFy ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3Qp ICh2b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBj aGFyICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0 IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9m Y3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X3RyYW5z X2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7CgogIF9fZ2Nv bnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190 cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190cmFuc19lbmRfZmN0 OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX25leHQ7Cn07 CgoKCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Qg Kl9fc2hsaWJfaGFuZGxlOwogIF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoKICBpbnQgX19jb3Vu dGVyOwoKICBjaGFyICpfX2Zyb21fbmFtZTsKICBjaGFyICpfX3RvX25hbWU7CgogIF9fZ2NvbnZf ZmN0IF9fZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2djb252X2VuZF9m Y3QgX19lbmRfZmN0OwoKCgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQgX19tYXhfbmVl ZGVkX2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVlZGVkX3RvOwoK CiAgaW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0IF9fZ2NvbnZf c3RlcF9kYXRhCnsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25lZCBjaGFyICpf X291dGJ1ZmVuZDsKCgoKICBpbnQgX19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0aW9uX2NvdW50 ZXI7CgoKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19zdGF0ZXA7CiAg X19tYnN0YXRlX3QgX19zdGF0ZTsKCgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhICpfX3Ry YW5zOwp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVfdCBfX25zdGVw czsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9uX18gc3RydWN0 IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbXTsKfSAqX19nY29udl90OwojIDQ1ICIvdXNyL2lu Y2x1ZGUvX0dfY29uZmlnLmgiIDIgMwp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9p bmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAg c3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNv bnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf X0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f IChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRl X18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJf dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKIyAzMyAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDIgMwojIDUzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvbGli L2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzMuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAi L3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMy4yL2luY2x1ZGUvc3RkYXJnLmgiIDMK dHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1NCAiL3Vzci9pbmNs dWRlL2xpYmlvLmgiIDIgMwojIDE2MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9J T19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAz CnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1 Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQg X3BvczsKIyAxOTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVjdnRf cmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0 X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKIyAyNjEgIi91c3IvaW5jbHVkZS9saWJpby5o IiAzCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRf cHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIq IF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRl X2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIg Kl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZl X2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUg Kl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9v ZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0 YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7 CiMgMzA1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKCgoK CiAgdm9pZCAqX19wYWQxOwogIHZvaWQgKl9fcGFkMjsKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91 bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCnR5 cGVkZWYgc3RydWN0IF9JT19GSUxFIF9JT19GSUxFOwoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoK ZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0 IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3Bs dXMgX0lPXzJfMV9zdGRlcnJfOwojIDM0NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRl ZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNp emVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2 b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4g KHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGlu dCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9fcmVhZF9m biBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29va2llX3dy aXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1bmN0aW9u X3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKCgp0eXBl ZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4gKndyaXRl OwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBfSU9fY29v a2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29v a2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRlcm4gdm9p ZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBf X3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19jb29raWUs IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKCgoKZXh0ZXJuIGludCBfX3Vu ZGVyZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopIDsK ZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIDsKZXh0ZXJuIHdpbnRfdCBf X3d1bmRlcmZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJ TEUgKikgOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklMRSAqLCB3aW50X3QpIDsK IyA0MjYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dldGMgKF9JT19G SUxFICpfX2ZwKSA7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2Zw KSA7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19GSUxFICpfX2ZwKSA7CmV4dGVybiBpbnQgX0lP X2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIDsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAo X0lPX0ZJTEUgKl9fZnApIDsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklM RSAqKSA7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgOwpleHRlcm4g aW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxFICopIDsKIyA0NTYgIi91c3IvaW5jbHVkZS9s aWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwg Y29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192 YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIDsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19G SUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIDsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lP X0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIDsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19G SUxFICosIHZvaWQgKiwgc2l6ZV90KSA7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChf SU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSA7CmV4dGVybiBfX29mZjY0X3QgX0lPX3Nl ZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSA7CgpleHRlcm4gdm9pZCBfSU9fZnJl ZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgOwojIDY2ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIg MiAzCgoKCgp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CiMgODIgIi91c3IvaW5jbHVk ZS9zdGRpby5oIiAzCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvc190OwoKCnR5cGVkZWYgX0dfZnBv czY0X3QgZnBvczY0X3Q7CiMgMTI5ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxMzAgIi91c3IvaW5jbHVkZS9zdGRpby5o IiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4g RklMRSAqc3RkZXJyOwoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2Zp bGVuYW1lKSA7CgpleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25z dCBjaGFyICpfX25ldykgOwoKCgoKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIF9fYXNt X18gKCIiICJ0bXBmaWxlNjQiKTsKCgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSA7 CgoKZXh0ZXJuIGNoYXIgKnRtcG5hbSAoY2hhciAqX19zKSA7CgoKCgpleHRlcm4gY2hhciAqdG1w bmFtX3IgKGNoYXIgKl9fcykgOwojIDE3OCAiL3Vzci9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJu IGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngp CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgZmNsb3Nl IChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSA7 CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0 ZXJuIGludCBmY2xvc2VhbGwgKHZvaWQpIDsKIyAyMDkgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAz CmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUs IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSBfX2FzbV9fICgiIiAiZm9wZW42NCIp OwoKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxl bmFtZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsIEZJTEUgKl9fcmVzdHJpY3Qg X19zdHJlYW0pIF9fYXNtX18gKCIiICJmcmVvcGVuNjQiKTsKIyAyMjIgIi91c3IvaW5jbHVkZS9z dGRpby5oIiAzCmV4dGVybiBGSUxFICpmb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX21vZGVzKSA7CmV4dGVybiBGSUxFICpmcmVvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3Qg Y2hhciAqX19tb2RlcykgOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbmNvb2tpZSAodm9pZCAqX19y ZXN0cmljdCBfX21hZ2ljX2Nvb2tpZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSU9f Y29va2llX2lvX2Z1bmN0aW9uc190IF9faW9fZnVuY3MpIDsKCgpleHRlcm4gRklMRSAqZm1lbW9w ZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIDsKCgoK CmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAoY2hhciAqKl9fcmVzdHJpY3QgX19idWZsb2Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxv YykgOwoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwg Y2hhciAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgpleHRlcm4gaW50IHNldHZidWYgKEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAg ICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIDsKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZl ciAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zaXplKSA7CgoKZXh0ZXJuIHZvaWQgc2V0bGlu ZWJ1ZiAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHNwcmludGYgKGNoYXIgKl9f cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2Zvcm1hdCwgLi4uKSA7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmlj dCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIDsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICA7 CgpleHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz dCBfX2FyZykgOwoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywg c2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w cmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0 IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICBfX2F0dHJp YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgpleHRlcm4gaW50 IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2YsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAg ICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJu IGludCBfX2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICBfX2F0dHJp YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3By aW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zv cm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBpbnQgdmRwcmludGYgKGludCBf X2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAgICAgICAgICAgICAgICAgICAg IF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChf X3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpf X3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgc2NhbmYgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19y ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAg ICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19m b3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5mIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIF9f YXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDApKSk7CgoKZXh0ZXJuIGlu dCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19h cmcpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsK CgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZ2V0YyAo RklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIDsKCgoKCgoKCmV4 dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBnZXRj aGFyX3VubG9ja2VkICh2b2lkKSA7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChGSUxF ICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJl YW0pIDsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVy biBpbnQgcHV0Y2hhciAoaW50IF9fYykgOwoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tl ZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgcHV0Y191bmxvY2tl ZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2Vk IChpbnQgX19jKSA7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgOwoKCmV4 dGVybiBpbnQgcHV0dyAoaW50IF9fdywgRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBjaGFy ICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3Qg X19zdHJlYW0pCiAgICAgOwoKCgpleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9f cmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgoKCmV4dGVybiBjaGFyICpnZXRzIChjaGFyICpfX3Mp IDsKIyA0MjYgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBfX3NzaXplX3QgX19nZXRk ZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwpleHRl cm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVs aW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0pIDsKCgpleHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9f bGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBf X24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt KSA7CgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIDsKCgoKZXh0ZXJuIGludCBmcHV0c191bmxv Y2tlZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IHB1dHMgKF9f Y29uc3QgY2hhciAqX19zKSA7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpf X3N0cmVhbSkgOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRy LCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpf X3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2b2lk ICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIDsKCgoKZXh0ZXJuIHNpemVfdCBmcmVh ZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSkgOwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jl c3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGlu dCBmc2VlayAoRklMRSAqX19zdHJlYW0sIGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIDsK CmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiB2b2lkIHJl d2luZCAoRklMRSAqX19zdHJlYW0pIDsKIyA1MDIgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAzCmV4 dGVybiBpbnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmY2NF90IF9fb2ZmLCBpbnQgX193 aGVuY2UpIF9fYXNtX18gKCIiICJmc2Vla282NCIpOwoKCmV4dGVybiBfX29mZjY0X3QgZnRlbGxv IChGSUxFICpfX3N0cmVhbSkgX19hc21fXyAoIiIgImZ0ZWxsbzY0Iik7CgpleHRlcm4gaW50IGZn ZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3NfdCAqX19yZXN0cmljdCBfX3Bv cykgX19hc21fXyAoIiIgImZnZXRwb3M2NCIpOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpf X3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSBfX2FzbV9fICgiIiAiZnNldHBvczY0Iik7 CiMgNTIzICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbzY0IChGSUxF ICpfX3N0cmVhbSwgX19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpIDsKZXh0ZXJuIF9fb2Zm NjRfdCBmdGVsbG82NCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJ TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAg IDsKZXh0ZXJuIGludCBmc2V0cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3M2NF90 ICpfX3BvcykgOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0pIDsKCmV4 dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxF ICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19z dHJlYW0pIDsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRl cm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiB2b2lk IHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz L3N5c19lcnJsaXN0LmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy9zeXNfZXJybGlzdC5o IiAzCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lz X2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAq X19jb25zdCBfc3lzX2Vycmxpc3RbXTsKIyA1NTMgIi91c3IvaW5jbHVkZS9zdGRpby5oIiAyIDMK CgoKCmV4dGVybiBpbnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBm aWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgoKCmV4dGVybiBGSUxFICpwb3Bl biAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgOwoKCmV4 dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKCmV4dGVybiBjaGFyICpjdGVy bWlkIChjaGFyICpfX3MpIDsKCgoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19zKSA7 CgoKCgpzdHJ1Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChzdHJ1Y3Qg b2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CmV4dGVybiBpbnQgb2Jz dGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpIDsKCgoK CgoKCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIGlu dCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2Zp bGUgKEZJTEUgKl9fc3RyZWFtKSA7CiMgNjI1ICIvdXNyL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvYml0cy9z dGRpby5oIiAzCmV4dGVybiBfX2lubGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKewogIHJldHVybiB2ZnByaW50ZiAo c3Rkb3V0LCBfX2ZtdCwgX19hcmcpOwp9CgoKZXh0ZXJuIF9faW5saW5lIGludApnZXRjaGFyICh2 b2lkKQp7CiAgcmV0dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBp bnQKZ2V0Y191bmxvY2tlZCAoRklMRSAqX19mcCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVh ZF9wdHIgPj0gKF9fZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWdu ZWQgY2hhciAqKSAoX19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoKCmV4dGVybiBfX2lubGluZSBp bnQKZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRf cHRyID49IChzdGRpbiktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWdu ZWQgY2hhciAqKSAoc3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmV4dGVybiBfX2lubGlu ZSBpbnQKcHV0Y2hhciAoaW50IF9fYykKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQp Owp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxF ICpfX3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9f c3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVk IGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9w dHIrKyA9IChfX2MpKSk7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQg KGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dy aXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3Ry ZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFt KS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKcHV0 Y2hhcl91bmxvY2tlZCAoaW50IF9fYykKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVf cHRyID49IChzdGRvdXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVu c2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3Jp dGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoKZXh0ZXJuIF9faW5saW5lIF9fc3NpemVfdApnZXRs aW5lIChjaGFyICoqX19saW5lcHRyLCBzaXplX3QgKl9fbiwgRklMRSAqX19zdHJlYW0pCnsKICBy ZXR1cm4gX19nZXRkZWxpbSAoX19saW5lcHRyLCBfX24sICdcbicsIF9fc3RyZWFtKTsKfQoKCgoK CmV4dGVybiBfX2lubGluZSBpbnQKZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pCnsKICBy ZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmV4dGVybiBfX2lu bGluZSBpbnQKZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAoKChf X3N0cmVhbSktPl9mbGFncyAmIDB4MjApICE9IDApOwp9CiMgNjI2ICIvdXNyL2luY2x1ZGUvc3Rk aW8uaCIgMiAzCgoKCiMgMjQgImNvbW1vbi5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5o IiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCgoKCgoKIyAxICIvdXNyL2xpYi9n Y2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91 c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9f cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVz dHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gdm9pZCAqbWVtbW92ZSAodm9pZCAq X19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIDsKCgoKCgpleHRl cm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAq X19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBf X24pCiAgICAgOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBz aXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19j b25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCmV4dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBz aXplX3QgX19uKQogICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB2 b2lkICpyYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtcmNociAoX19jb25zdCB2b2lkICpfX3Ms IGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hh ciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChj aGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQog ICAgIDsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fbikgOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3Qg Y2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQg c3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBf X24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xs IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmlj dCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fc3JjLCBzaXplX3QgX19uKSA7CiMgMTExICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0 ZXJuIGludCBfX3N0cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f czIsIF9fbG9jYWxlX3QgX19sKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0 ZXJuIHNpemVfdCBfX3N0cnhmcm1fbCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3Jj LCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbCkg OwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIF9fYXR0cmlidXRl X18gKChfX21hbGxvY19fKSk7CgoKCgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNo YXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19f KSk7CiMgMTU1ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNociAo X19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK ZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjaHJudWwgKF9fY29uc3Qg Y2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVy biBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19yZWpl Y3QpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJz cG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hh ciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBf X2NvbnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2Nv bnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpl eHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgOwoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hh ciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fc2F2ZV9wdHIpIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAqX19yZXN0 cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsKCgoKCgoKZXh0ZXJuIHZv aWQgKm1lbW1lbSAoX19jb25zdCB2b2lkICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xl biwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX25lZWRsZSwgc2l6ZV90IF9f bmVlZGxlbGVuKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9p ZCAqX19tZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CmV4dGVy biB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoKCgoK ZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFyICpfX3N0 cmluZywgc2l6ZV90IF9fbWF4bGVuKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIDsKCgoKZXh0ZXJuIGNoYXIg KnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbikg OwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSA7CgoKCmV4 dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVf dCBfX24pIDsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSA7CgoK ZXh0ZXJuIGludCBiY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwg c2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hh ciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f YykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZzIChpbnQgX19p KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcg aW50IF9fbCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRl cm4gaW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9fbGwpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEs IF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpl eHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq X19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpl eHRlcm4gaW50IF9fc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh ciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBfbCAoX19j b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0 IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZGVsaW0pIDsKCgoKCmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3Mx LCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK ZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSA7CgoKZXh0ZXJuIGNoYXIgKl9fc3Rw Y3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f c3JjKQogICAgIDsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3Qs IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgoKCmV4dGVybiBjaGFyICpf X3N0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKZXh0ZXJuIGNo YXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJu IGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIDsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAo dm9pZCAqX19zLCBzaXplX3QgX19uKSA7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19j b25zdCBjaGFyICpfX2ZpbGVuYW1lKSA7CiMgMzU3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcuaCIgMSAzCiMgMzU4ICIvdXNyL2luY2x1ZGUv c3RyaW5nLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAxIDMKIyAz ODcgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gdm9pZCAqX19yYXdtZW1j aHIgKGNvbnN0IHZvaWQgKl9fcywgaW50IF9fYyk7CiMgOTE3ICIvdXNyL2luY2x1ZGUvYml0cy9z dHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzEgKF9fY29uc3Qg Y2hhciAqX19zLCBpbnQgX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nw bl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdCkKewogIHJlZ2lzdGVyIHNpemVf dCBfX3Jlc3VsdCA9IDA7CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19y ZXN1bHRdICE9IF9fcmVqZWN0KQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0K CmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJjc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywg aW50IF9fcmVqZWN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X3JlamVjdDIpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMiAoX19jb25zdCBj aGFyICpfX3MsIGludCBfX3JlamVjdDEsIGludCBfX3JlamVjdDIpCnsKICByZWdpc3RlciBzaXpl X3QgX19yZXN1bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19f cmVzdWx0XSAhPSBfX3JlamVjdDEKICAgICAgICAgJiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVj dDIpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9faW5saW5l IHNpemVfdCBfX3N0cmNzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcmVqZWN0MiwgaW50IF9f cmVqZWN0Myk7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MzIChfX2NvbnN0IGNo YXIgKl9fcywgaW50IF9fcmVqZWN0MSwgaW50IF9fcmVqZWN0MiwKICAgICAgICAgICAgICBpbnQg X19yZWplY3QzKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICB3aGlsZSAoX19z W19fcmVzdWx0XSAhPSAnXDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QxCiAgICAgICAg ICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QyICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWpl Y3QzKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KIyA5NzQgIi91c3IvaW5j bHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2Mx IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0KTsKZXh0ZXJuIF9faW5saW5lIHNpemVf dApfX3N0cnNwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdCkKewogIHJlZ2lz dGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1bHRdID09IF9fYWNj ZXB0KQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lubGlu ZSBzaXplX3QgX19zdHJzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyKTsKZXh0ZXJu IF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9jMiAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Fj Y2VwdDEsIGludCBfX2FjY2VwdDIpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoK ICB3aGlsZSAoX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDEgfHwgX19zW19fcmVzdWx0XSA9PSBf X2FjY2VwdDIpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJuIF9f aW5saW5lIHNpemVfdCBfX3N0cnNwbl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2Vw dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIsIGlu dCBfX2FjY2VwdDMpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3Ryc3BuX2MzIChfX2NvbnN0 IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MiwgaW50IF9fYWNjZXB0MykK ewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1bHRd ID09IF9fYWNjZXB0MSB8fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MgogICAgICAgICB8fCBf X3NbX19yZXN1bHRdID09IF9fYWNjZXB0MykKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVz dWx0Owp9CiMgMTAzMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lu bGluZSBjaGFyICpfX3N0cnBicmtfYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0Mik7CmV4 dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJrX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50 IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MikKewoKICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpf X3MgIT0gX19hY2NlcHQxICYmICpfX3MgIT0gX19hY2NlcHQyKQogICAgKytfX3M7CiAgcmV0dXJu ICpfX3MgPT0gJ1wwJyA/ICgodm9pZCAqKTApIDogKGNoYXIgKikgKHNpemVfdCkgX19zOwp9Cgpl eHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJwYnJrX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50 IF9fYWNjZXB0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Fj Y2VwdDIsIGludCBfX2FjY2VwdDMpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RycGJya19j MyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIsCiAgICAg ICAgICAgICAgaW50IF9fYWNjZXB0MykKewoKICB3aGlsZSAoKl9fcyAhPSAnXDAnICYmICpfX3Mg IT0gX19hY2NlcHQxICYmICpfX3MgIT0gX19hY2NlcHQyCiAgICAgICAgICYmICpfX3MgIT0gX19h Y2NlcHQzKQogICAgKytfX3M7CiAgcmV0dXJuICpfX3MgPT0gJ1wwJyA/ICgodm9pZCAqKTApIDog KGNoYXIgKikgKHNpemVfdCkgX19zOwp9CiMgMTA4MyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5n Mi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnRva19yXzFjIChjaGFyICpfX3MsIGNo YXIgX19zZXAsIGNoYXIgKipfX25leHRwKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnRv a19yXzFjIChjaGFyICpfX3MsIGNoYXIgX19zZXAsIGNoYXIgKipfX25leHRwKQp7CiAgY2hhciAq X19yZXN1bHQ7CiAgaWYgKF9fcyA9PSAoKHZvaWQgKikwKSkKICAgIF9fcyA9ICpfX25leHRwOwog IHdoaWxlICgqX19zID09IF9fc2VwKQogICAgKytfX3M7CiAgX19yZXN1bHQgPSAoKHZvaWQgKikw KTsKICBpZiAoKl9fcyAhPSAnXDAnKQogICAgewogICAgICBfX3Jlc3VsdCA9IF9fcysrOwogICAg ICB3aGlsZSAoKl9fcyAhPSAnXDAnKQogICAgICAgIGlmICgqX19zKysgPT0gX19zZXApCiAgICAg ICAgICB7CiAgICAgICAgICAgIF9fc1stMV0gPSAnXDAnOwogICAgICAgICAgICBicmVhazsKICAg ICAgICAgIH0KICAgICAgKl9fbmV4dHAgPSBfX3M7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9 CiMgMTExNSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBjaGFyICpfX3N0 cnNlcF9nIChjaGFyICoqX19zdHJpbmdwLCBfX2NvbnN0IGNoYXIgKl9fZGVsaW0pOwojIDExMzMg Ii91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgY2hhciAqX19z dHJzZXBfMWMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgY2hh ciAqCl9fc3Ryc2VwXzFjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0KQp7CiAgcmVnaXN0ZXIg Y2hhciAqX19yZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZhbCAhPSAoKHZvaWQgKikwKSAmJiAo Kl9fcyA9IChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19yZWplY3QpICYm IChfX3JlamVjdCkgPT0gJ1wwJyA/IChjaGFyICopIF9fcmF3bWVtY2hyIChfX3JldHZhbCwgX19y ZWplY3QpIDogc3RyY2hyIChfX3JldHZhbCwgX19yZWplY3QpKSkpICE9ICgodm9pZCAqKTApKQog ICAgKigqX19zKSsrID0gJ1wwJzsKICByZXR1cm4gX19yZXR2YWw7Cn0KCmV4dGVybiBfX2lubGlu ZSBjaGFyICpfX3N0cnNlcF8yYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19y ZWplY3QyKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnNlcF8yYyAoY2hhciAqKl9fcywg Y2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyKQp7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXR2 YWwgPSAqX19zOwogIGlmIChfX3JldHZhbCAhPSAoKHZvaWQgKikwKSkKICAgIHsKICAgICAgcmVn aXN0ZXIgY2hhciAqX19jcCA9IF9fcmV0dmFsOwogICAgICB3aGlsZSAoMSkKICAgICAgICB7CiAg ICAgICAgICBpZiAoKl9fY3AgPT0gJ1wwJykKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9f Y3AgPSAoKHZvaWQgKikwKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAg ICBpZiAoKl9fY3AgPT0gX19yZWplY3QxIHx8ICpfX2NwID09IF9fcmVqZWN0MikKICAgICAgICAg ICAgewogICAgICAgICAgICAgICpfX2NwKysgPSAnXDAnOwogICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICB9CiAgICAgICAgICArK19fY3A7CiAgICAgICAgfQogICAgICAqX19zID0gX19j cDsKICAgIH0KICByZXR1cm4gX19yZXR2YWw7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0 cnNlcF8zYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19yZWplY3QzKTsKZXh0ZXJuIF9f aW5saW5lIGNoYXIgKgpfX3N0cnNlcF8zYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNo YXIgX19yZWplY3QyLCBjaGFyIF9fcmVqZWN0MykKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFs ID0gKl9fczsKICBpZiAoX19yZXR2YWwgIT0gKCh2b2lkICopMCkpCiAgICB7CiAgICAgIHJlZ2lz dGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKICAgICAgd2hpbGUgKDEpCiAgICAgICAgewogICAg ICAgICAgaWYgKCpfX2NwID09ICdcMCcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2Nw ID0gKCh2b2lkICopMCk7CiAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAg aWYgKCpfX2NwID09IF9fcmVqZWN0MSB8fCAqX19jcCA9PSBfX3JlamVjdDIgfHwgKl9fY3AgPT0g X19yZWplY3QzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9fY3ArKyA9ICdcMCc7CiAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICsrX19jcDsKICAgICAg ICB9CiAgICAgICpfX3MgPSBfX2NwOwogICAgfQogIHJldHVybiBfX3JldHZhbDsKfQojIDEyMTQg Ii91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gY2hhciAqX19zdHJkdXAgKF9f Y29uc3QgY2hhciAqX19zdHJpbmcpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CiMgMTIz MyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBjaGFyICpfX3N0cm5kdXAg KF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAo KF9fbWFsbG9jX18pKTsKIyAzNjEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCgojIDI1 ICJjb21tb24uaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMzIgIi91c3Iv aW5jbHVkZS9lcnJuby5oIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDEg MwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xp bnV4L2Vycm5vLmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAzCiMg NSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0 cy9lcnJuby5oIiAyIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpleHRlcm4g aW50IGVycm5vOwoKCmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMwojIDU1 ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gY2hhciAqcHJvZ3JhbV9pbnZvY2F0aW9u X25hbWUsICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKCgoKCiMgNjkgIi91c3IvaW5j bHVkZS9lcnJuby5oIiAzCnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgMjcgImNvbW1vbi5oIiAyCgoK CiMgMSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9tYXRoLmgi IDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMSAzCiMgMzQgIi91c3Iv aW5jbHVkZS9tYXRoLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL25hbi5oIiAxIDMK IyAzOCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9t YXRoZGVmLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDMKdHlwZWRl ZiBsb25nIGRvdWJsZSBmbG9hdF90OwoKdHlwZWRlZiBsb25nIGRvdWJsZSBkb3VibGVfdDsKIyA0 MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVk ZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBkb3VibGUgYWNvcyAoZG91YmxlIF9feCkgOyBl eHRlcm4gZG91YmxlIF9fYWNvcyAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBhc2luIChk b3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19hc2luIChkb3VibGUgX194KSA7CgpleHRlcm4g ZG91YmxlIGF0YW4gKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4gKGRvdWJsZSBf X3gpIDsKCmV4dGVybiBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIDsgZXh0 ZXJuIGRvdWJsZSBfX2F0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGRv dWJsZSBjb3MgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2NvcyAoZG91YmxlIF9feCkg OwoKZXh0ZXJuIGRvdWJsZSBzaW4gKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3NpbiAo ZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRv dWJsZSBfX3RhbiAoZG91YmxlIF9feCkgOwoKCgpleHRlcm4gdm9pZCBzaW5jb3MgKGRvdWJsZSBf X3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkgOyBleHRlcm4gdm9pZCBfX3NpbmNv cyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSA7CgoKCgoKCmV4 dGVybiBkb3VibGUgY29zaCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fY29zaCAoZG91 YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUgX194KSA7IGV4dGVybiBkb3Vi bGUgX19zaW5oIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHRhbmggKGRvdWJsZSBfX3gp IDsgZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGRvdWJsZSBh Y29zaCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYWNvc2ggKGRvdWJsZSBfX3gpIDsK CmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2FzaW5o IChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIGF0YW5oIChkb3VibGUgX194KSA7IGV4dGVy biBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkgOwoKCgoKCmV4dGVybiBkb3VibGUgZXhwIChk b3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19leHAgKGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJu IGRvdWJsZSBleHAxMCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fZXhwMTAgKGRvdWJs ZSBfX3gpIDsKCmV4dGVybiBkb3VibGUgcG93MTAgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJs ZSBfX3BvdzEwIChkb3VibGUgX194KSA7CgoKCmV4dGVybiBkb3VibGUgZnJleHAgKGRvdWJsZSBf X3gsIGludCAqX19leHBvbmVudCkgOyBleHRlcm4gZG91YmxlIF9fZnJleHAgKGRvdWJsZSBfX3gs IGludCAqX19leHBvbmVudCkgOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSBfX3gsIGlu dCBfX2V4cG9uZW50KSA7IGV4dGVybiBkb3VibGUgX19sZGV4cCAoZG91YmxlIF9feCwgaW50IF9f ZXhwb25lbnQpIDsKCgpleHRlcm4gZG91YmxlIGxvZyAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91 YmxlIF9fbG9nIChkb3VibGUgX194KSA7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxMCAoZG91YmxlIF9f eCkgOyBleHRlcm4gZG91YmxlIF9fbG9nMTAgKGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91Ymxl IG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSA7IGV4dGVybiBkb3VibGUgX19tb2Rm IChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgOwoKCgpleHRlcm4gZG91YmxlIGV4cG0xIChk b3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91YmxlIF9feCkgOwoKCmV4dGVy biBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwIChkb3Vi bGUgX194KSA7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChkb3VibGUgX194KSA7IGV4dGVybiBkb3Vi bGUgX19sb2diIChkb3VibGUgX194KSA7CgoKCgpleHRlcm4gZG91YmxlIGV4cDIgKGRvdWJsZSBf X3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91Ymxl IGxvZzIgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2xvZzIgKGRvdWJsZSBfX3gpIDsK CgoKCgoKZXh0ZXJuIGRvdWJsZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJu IGRvdWJsZSBfX3BvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCmV4dGVybiBkb3VibGUg c3FydCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91YmxlIF9feCkgOwoK CgpleHRlcm4gZG91YmxlIGh5cG90IChkb3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVybiBk b3VibGUgX19oeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCgoKZXh0ZXJuIGRvdWJs ZSBjYnJ0IChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19jYnJ0IChkb3VibGUgX194KSA7 CgoKCgoKCmV4dGVybiBkb3VibGUgY2VpbCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9f Y2VpbCAoZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3VibGUgZmFicyAoZG91YmxlIF9feCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmFicyAoZG91YmxlIF9f eCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZmxvb3IgKGRv dWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194KSA7CgoKZXh0ZXJu IGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVybiBkb3VibGUgX19m bW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKCgpleHRlcm4gaW50IF9faXNpbmYgKGRv dWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBf X2Zpbml0ZSAoZG91YmxlIF9fdmFsdWUpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK CmV4dGVybiBpbnQgaXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUg X195KSA7IGV4dGVybiBkb3VibGUgX19kcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoK CmV4dGVybiBkb3VibGUgc2lnbmlmaWNhbmQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBf X3NpZ25pZmljYW5kIChkb3VibGUgX194KSA7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChk b3VibGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy biBkb3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSBuYW4gKF9fY29uc3QgY2hhciAqX190 YWdiKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9f Y29uc3QgY2hhciAqX190YWdiKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRl cm4gaW50IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSA7IGV4dGVybiBkb3VibGUg X19qMCAoZG91YmxlKSA7CmV4dGVybiBkb3VibGUgajEgKGRvdWJsZSkgOyBleHRlcm4gZG91Ymxl IF9fajEgKGRvdWJsZSkgOwpleHRlcm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSkgOyBleHRlcm4g ZG91YmxlIF9fam4gKGludCwgZG91YmxlKSA7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSkgOyBl eHRlcm4gZG91YmxlIF9feTAgKGRvdWJsZSkgOwpleHRlcm4gZG91YmxlIHkxIChkb3VibGUpIDsg ZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUpIDsKZXh0ZXJuIGRvdWJsZSB5biAoaW50LCBkb3Vi bGUpIDsgZXh0ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRvdWJsZSkgOwoKCgoKCmV4dGVybiBkb3Vi bGUgZXJmIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAoZG91YmxlKSA7CmV4dGVybiBk b3VibGUgZXJmYyAoZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUpIDsKZXh0 ZXJuIGRvdWJsZSBsZ2FtbWEgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hIChkb3Vi bGUpIDsKCgoKZXh0ZXJuIGRvdWJsZSB0Z2FtbWEgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9f dGdhbW1hIChkb3VibGUpIDsKCgoKCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSkgOyBleHRl cm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSkgOwoKCgoKCgpleHRlcm4gZG91YmxlIGxnYW1tYV9y IChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hX3IgKGRv dWJsZSwgaW50ICpfX3NpZ25nYW1wKSA7CgoKCgoKCmV4dGVybiBkb3VibGUgcmludCAoZG91Ymxl IF9feCkgOyBleHRlcm4gZG91YmxlIF9fcmludCAoZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3Vi bGUgbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBf X3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBkb3VibGUgbmV4dHRvd2Fy ZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7IGV4dGVybiBkb3VibGUgX19uZXh0dG93YXJkIChkb3VibGUgX194LCBsb25nIGRvdWJsZSBf X3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGRvdWJsZSByZW1haW5k ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAo ZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCgpleHRlcm4gZG91YmxlIHNjYWxiIChkb3VibGUg X194LCBkb3VibGUgX19uKSA7IGV4dGVybiBkb3VibGUgX19zY2FsYiAoZG91YmxlIF9feCwgZG91 YmxlIF9fbikgOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24p IDsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibiAoZG91YmxlIF9feCwgaW50IF9fbikgOwoKCgpleHRl cm4gaW50IGlsb2diIChkb3VibGUgX194KSA7IGV4dGVybiBpbnQgX19pbG9nYiAoZG91YmxlIF9f eCkgOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24p IDsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgOwoK CgpleHRlcm4gZG91YmxlIG5lYXJieWludCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9f bmVhcmJ5aW50IChkb3VibGUgX194KSA7CgoKCmV4dGVybiBkb3VibGUgcm91bmQgKGRvdWJsZSBf X3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5kIChkb3VibGUgX194KSA7CgoKCmV4dGVybiBkb3Vi bGUgdHJ1bmMgKGRvdWJsZSBfX3gpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu IGRvdWJsZSBfX3RydW5jIChkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCgpleHRlcm4gZG91YmxlIHJlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpf X3F1bykgOyBleHRlcm4gZG91YmxlIF9fcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBp bnQgKl9fcXVvKSA7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9feCkgOyBl eHRlcm4gbG9uZyBpbnQgX19scmludCAoZG91YmxlIF9feCkgOwpleHRlcm4gbG9uZyBsb25nIGlu dCBsbHJpbnQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnQgKGRv dWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZCAoZG91YmxlIF9feCkgOyBleHRl cm4gbG9uZyBpbnQgX19scm91bmQgKGRvdWJsZSBfX3gpIDsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQg bGxyb3VuZCAoZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmQgKGRv dWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGRvdWJsZSBmZGltIChkb3VibGUgX194LCBkb3VibGUgX195 KSA7IGV4dGVybiBkb3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKZXh0 ZXJuIGRvdWJsZSBmbWF4IChkb3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVybiBkb3VibGUg X19mbWF4IChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChk b3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVybiBkb3VibGUgX19mbWluIChkb3VibGUgX194 LCBkb3VibGUgX195KSA7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5IChkb3VibGUgX192YWx1 ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25i aXQgKGRvdWJsZSBfX3ZhbHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK ZXh0ZXJuIGRvdWJsZSBmbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIDsg ZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feikg OwojIDY0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA4MiAiL3Vzci9pbmNsdWRlL21hdGgu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9p bmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCBfX3gp IDsgZXh0ZXJuIGZsb2F0IF9fYWNvc2YgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IGFzaW5m IChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCkgOwoKZXh0ZXJu IGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYgKGZsb2F0IF9f eCkgOwoKZXh0ZXJuIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIDsgZXh0ZXJu IGZsb2F0IF9fYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBj b3NmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fY29zZiAoZmxvYXQgX194KSA7CgpleHRl cm4gZmxvYXQgc2luZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9f eCkgOwoKZXh0ZXJuIGZsb2F0IHRhbmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX190YW5m IChmbG9hdCBfX3gpIDsKCgoKZXh0ZXJuIHZvaWQgc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAq X19zaW54LCBmbG9hdCAqX19jb3N4KSA7IGV4dGVybiB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194 LCBmbG9hdCAqX19zaW54LCBmbG9hdCAqX19jb3N4KSA7CgoKCgoKCmV4dGVybiBmbG9hdCBjb3No ZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gpIDsKCmV4dGVy biBmbG9hdCBzaW5oZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3NpbmhmIChmbG9hdCBf X3gpIDsKCmV4dGVybiBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3Rh bmhmIChmbG9hdCBfX3gpIDsKCgoKZXh0ZXJuIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSA7IGV4 dGVybiBmbG9hdCBfX2Fjb3NoZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgYXNpbmhmIChm bG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXNpbmhmIChmbG9hdCBfX3gpIDsKCmV4dGVybiBm bG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hdGFuaGYgKGZsb2F0IF9f eCkgOwoKCgoKCmV4dGVybiBmbG9hdCBleHBmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9f ZXhwZiAoZmxvYXQgX194KSA7CgoKCmV4dGVybiBmbG9hdCBleHAxMGYgKGZsb2F0IF9feCkgOyBl eHRlcm4gZmxvYXQgX19leHAxMGYgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IHBvdzEwZiAo ZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3BvdzEwZiAoZmxvYXQgX194KSA7CgoKCmV4dGVy biBmbG9hdCBmcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KSA7IGV4dGVybiBmbG9h dCBfX2ZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpIDsKCgpleHRlcm4gZmxvYXQg bGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSA7IGV4dGVybiBmbG9hdCBfX2xkZXhw ZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCkgOwoKCmV4dGVybiBmbG9hdCBsb2dmIChmbG9h dCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbG9nZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0 IGxvZzEwZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2xvZzEwZiAoZmxvYXQgX194KSA7 CgoKZXh0ZXJuIGZsb2F0IG1vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIDsgZXh0ZXJu IGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgOwoKCgpleHRlcm4gZmxv YXQgZXhwbTFmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFmIChmbG9hdCBfX3gp IDsKCgpleHRlcm4gZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbG9n MXBmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxvYXQgbG9nYmYgKGZsb2F0IF9feCkgOyBleHRl cm4gZmxvYXQgX19sb2diZiAoZmxvYXQgX194KSA7CgoKCgpleHRlcm4gZmxvYXQgZXhwMmYgKGZs b2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19leHAyZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZs b2F0IGxvZzJmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0IF9feCkg OwoKCgoKCgpleHRlcm4gZmxvYXQgcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJu IGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsKCgpleHRlcm4gZmxvYXQgc3Fy dGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19zcXJ0ZiAoZmxvYXQgX194KSA7CgoKCmV4 dGVybiBmbG9hdCBoeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBf X2h5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsKCgoKCmV4dGVybiBmbG9hdCBjYnJ0ZiAo ZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBfX3gpIDsKCgoKCgoKZXh0 ZXJuIGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fY2VpbGYgKGZsb2F0 IF9feCkgOwoKCmV4dGVybiBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2ZhYnNmIChmbG9hdCBfX3gpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpIDsgZXh0 ZXJuIGZsb2F0IF9fZmxvb3JmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxvYXQgZm1vZGYgKGZs b2F0IF9feCwgZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBfX2Ztb2RmIChmbG9hdCBfX3gsIGZs b2F0IF9feSkgOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1ZSkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVmIChmbG9hdCBfX3Zh bHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mZiAo ZmxvYXQgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQg ZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4 dGVybiBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9f ZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7CgoKCmV4dGVybiBmbG9hdCBzaWduaWZpY2Fu ZGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19zaWduaWZpY2FuZGYgKGZsb2F0IF9feCkg OwoKCgoKZXh0ZXJuIGZsb2F0IGNvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGZs b2F0IG5hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW5mIChmbG9hdCBfX3ZhbHVl KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5mIChmbG9h dCBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGow ZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9fajBmIChmbG9hdCkgOwpleHRlcm4gZmxvYXQgajFm IChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KSA7CmV4dGVybiBmbG9hdCBqbmYg KGludCwgZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9fam5mIChpbnQsIGZsb2F0KSA7CmV4dGVybiBm bG9hdCB5MGYgKGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX3kwZiAoZmxvYXQpIDsKZXh0ZXJuIGZs b2F0IHkxZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCkgOwpleHRlcm4gZmxv YXQgeW5mIChpbnQsIGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX3luZiAoaW50LCBmbG9hdCkgOwoK CgoKCmV4dGVybiBmbG9hdCBlcmZmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19lcmZmIChmbG9h dCkgOwpleHRlcm4gZmxvYXQgZXJmY2YgKGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX2VyZmNmIChm bG9hdCkgOwpleHRlcm4gZmxvYXQgbGdhbW1hZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9fbGdh bW1hZiAoZmxvYXQpIDsKCgoKZXh0ZXJuIGZsb2F0IHRnYW1tYWYgKGZsb2F0KSA7IGV4dGVybiBm bG9hdCBfX3RnYW1tYWYgKGZsb2F0KSA7CgoKCgpleHRlcm4gZmxvYXQgZ2FtbWFmIChmbG9hdCkg OyBleHRlcm4gZmxvYXQgX19nYW1tYWYgKGZsb2F0KSA7CgoKCgoKCmV4dGVybiBmbG9hdCBsZ2Ft bWFmX3IgKGZsb2F0LCBpbnQgKl9fc2lnbmdhbXApIDsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9y IChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSA7CgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAoZmxv YXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3JpbnRmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxv YXQgbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBmbG9hdCBuZXh0dG93YXJkZiAo ZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg ZXh0ZXJuIGZsb2F0IF9fbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCByZW1haW5kZXJmIChm bG9hdCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBf X3gsIGZsb2F0IF9feSkgOwoKCgpleHRlcm4gZmxvYXQgc2NhbGJmIChmbG9hdCBfX3gsIGZsb2F0 IF9fbikgOyBleHRlcm4gZmxvYXQgX19zY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKSA7CgoK CgpleHRlcm4gZmxvYXQgc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSA7IGV4dGVybiBmbG9h dCBfX3NjYWxibmYgKGZsb2F0IF9feCwgaW50IF9fbikgOwoKCgpleHRlcm4gaW50IGlsb2diZiAo ZmxvYXQgX194KSA7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0IF9feCkgOwoKCgoKZXh0ZXJu IGZsb2F0IHNjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbikgOyBleHRlcm4gZmxvYXQg X19zY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIDsKCgoKZXh0ZXJuIGZsb2F0IG5l YXJieWludGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19uZWFyYnlpbnRmIChmbG9hdCBf X3gpIDsKCgoKZXh0ZXJuIGZsb2F0IHJvdW5kZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBf X3JvdW5kZiAoZmxvYXQgX194KSA7CgoKCmV4dGVybiBmbG9hdCB0cnVuY2YgKGZsb2F0IF9feCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX190cnVuY2YgKGZsb2F0 IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGZsb2F0IHJlbXF1 b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKSA7IGV4dGVybiBmbG9hdCBfX3Jl bXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKSA7CgoKCgoKCmV4dGVybiBs b25nIGludCBscmludGYgKGZsb2F0IF9feCkgOyBleHRlcm4gbG9uZyBpbnQgX19scmludGYgKGZs b2F0IF9feCkgOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRmIChmbG9hdCBfX3gpIDsgZXh0 ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpIDsKCgoKZXh0ZXJuIGxvbmcg aW50IGxyb3VuZGYgKGZsb2F0IF9feCkgOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmRmIChmbG9h dCBfX3gpIDsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGYgKGZsb2F0IF9feCkgOyBleHRl cm4gbG9uZyBsb25nIGludCBfX2xscm91bmRmIChmbG9hdCBfX3gpIDsKCgoKZXh0ZXJuIGZsb2F0 IGZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19mZGltZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpIDsKCgpleHRlcm4gZmxvYXQgZm1heGYgKGZsb2F0IF9feCwgZmxv YXQgX195KSA7IGV4dGVybiBmbG9hdCBfX2ZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoK CmV4dGVybiBmbG9hdCBmbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0 IF9fZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNz aWZ5ZiAoZmxvYXQgX192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK ZXh0ZXJuIGludCBfX3NpZ25iaXRmIChmbG9hdCBfX3ZhbHVlKQogICAgIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0IGZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195 LCBmbG9hdCBfX3opIDsgZXh0ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ks IGZsb2F0IF9feikgOwojIDgzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA5OSAiL3Vzci9p bmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMK IyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcgZG91Ymxl IGFjb3NsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxv bmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sIChsb25nIGRvdWJsZSBf X3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0 ZXJuIGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW4y bCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBs b25nIGRvdWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f Y29zbCAobG9uZyBkb3VibGUgX194KSA7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAobG9uZyBk b3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkg OwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9u ZyBkb3VibGUgX190YW5sIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIHZvaWQgc2luY29z bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19j b3N4KSA7IGV4dGVybiB2b2lkIF9fc2luY29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs ZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSA7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJs ZSBjb3NobCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2hsIChs b25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUg X194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmhsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4 dGVybiBsb25nIGRvdWJsZSB0YW5obCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRv dWJsZSBfX3RhbmhsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGFj b3NobCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3NobCAobG9u ZyBkb3VibGUgX194KSA7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBf X3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4 dGVybiBsb25nIGRvdWJsZSBhdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBk b3VibGUgX19hdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgoKCmV4dGVybiBsb25nIGRvdWJs ZSBleHBsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAobG9u ZyBkb3VibGUgX194KSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHAxMGwgKGxvbmcgZG91Ymxl IF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHAxMGwgKGxvbmcgZG91YmxlIF9feCkgOwoK ZXh0ZXJuIGxvbmcgZG91YmxlIHBvdzEwbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25n IGRvdWJsZSBfX3BvdzEwbCAobG9uZyBkb3VibGUgX194KSA7CgoKCmV4dGVybiBsb25nIGRvdWJs ZSBmcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSA7IGV4dGVybiBsb25n IGRvdWJsZSBfX2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIDsKCgpl eHRlcm4gbG9uZyBkb3VibGUgbGRleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50 KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xkZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgX19l eHBvbmVudCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRvdWJsZSBfX3gpIDsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nbCAobG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxv bmcgZG91YmxlIGxvZzEwbCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBf X2xvZzEwbCAobG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG1vZGZsIChs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fbW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgOwoKCgpleHRl cm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9n MXBsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBsIChsb25n IGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcgZG91YmxlIF9f eCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dibCAobG9uZyBkb3VibGUgX194KSA7CgoKCgpl eHRlcm4gbG9uZyBkb3VibGUgZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBk b3VibGUgX19leHAybCAobG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxv ZzJsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMmwgKGxvbmcg ZG91YmxlIF9feCkgOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcG93bCAobG9uZyBkb3VibGUg X194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93bCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwg KGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zcXJ0bCAobG9uZyBkb3Vi bGUgX194KSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5cG90bCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjYnJ0bCAo bG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NicnRsIChsb25nIGRvdWJs ZSBfX3gpIDsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gp IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVy biBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBfX3gpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxvb3JsIChs b25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJs ZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Ztb2RsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3Vi bGUgX192YWx1ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19m aW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKCgpleHRlcm4gaW50IGlzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1 ZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBkcmVt bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKCmV4dGVybiBs b25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBk b3VibGUgX19zaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGNvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29weXNpZ25sIChs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5hbmwgKF9fY29uc3QgY2hhciAqX190YWdiKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25hbmwgKF9f Y29uc3QgY2hhciAqX190YWdiKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRl cm4gaW50IF9faXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGowbCAobG9uZyBk b3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSkgOwpleHRlcm4g bG9uZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19qMWwg KGxvbmcgZG91YmxlKSA7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwgbG9uZyBkb3VibGUp IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fam5sIChpbnQsIGxvbmcgZG91YmxlKSA7CmV4dGVybiBs b25nIGRvdWJsZSB5MGwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kwbCAo bG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAobG9uZyBkb3VibGUpIDsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9feTFsIChsb25nIGRvdWJsZSkgOwpleHRlcm4gbG9uZyBkb3VibGUg eW5sIChpbnQsIGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAoaW50LCBs b25nIGRvdWJsZSkgOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBlcmZsIChsb25nIGRvdWJsZSkg OyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZsIChsb25nIGRvdWJsZSkgOwpleHRlcm4gbG9uZyBk b3VibGUgZXJmY2wgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2VyZmNsIChs b25nIGRvdWJsZSkgOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpIDsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbCAobG9uZyBkb3VibGUpIDsKCgoKZXh0ZXJuIGxv bmcgZG91YmxlIHRnYW1tYWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Rn YW1tYWwgKGxvbmcgZG91YmxlKSA7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChsb25n IGRvdWJsZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSA7CgoK CgoKCmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2ln bmdhbXApIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50 ICpfX3NpZ25nYW1wKSA7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByaW50bCAobG9uZyBkb3Vi bGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsK CgpleHRlcm4gbG9uZyBkb3VibGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0dG93YXJkbCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBsb25n IGRvdWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOyBl eHRlcm4gbG9uZyBkb3VibGUgX19yZW1haW5kZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91 YmxlIF9feSkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9fbikgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYmwgKGxvbmcgZG91 YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSA7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJu bCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxi bmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgOwoKCgpleHRlcm4gaW50IGlsb2dibCAobG9u ZyBkb3VibGUgX194KSA7IGV4dGVybiBpbnQgX19pbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgOwoK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50 IF9fbikgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYmxubCAobG9uZyBkb3VibGUgX194LCBs b25nIGludCBfX24pIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5lYXJieWludGwgKGxvbmcgZG91 YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZWFyYnlpbnRsIChsb25nIGRvdWJsZSBf X3gpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJvdW5kbCAobG9uZyBkb3VibGUgX194KSA7IGV4 dGVybiBsb25nIGRvdWJsZSBfX3JvdW5kbCAobG9uZyBkb3VibGUgX194KSA7CgoKCmV4dGVybiBs b25nIGRvdWJsZSB0cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbXF1b2wg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSA7IGV4dGVybiBs b25nIGRvdWJsZSBfX3JlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBp bnQgKl9fcXVvKSA7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGwgKGxvbmcgZG91YmxlIF9f eCkgOyBleHRlcm4gbG9uZyBpbnQgX19scmludGwgKGxvbmcgZG91YmxlIF9feCkgOwpleHRlcm4g bG9uZyBsb25nIGludCBsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgbG9u ZyBpbnQgX19sbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGxvbmcgaW50IGxy b3VuZGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmRsIChsb25n IGRvdWJsZSBfX3gpIDsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGwgKGxvbmcgZG91Ymxl IF9feCkgOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRsIChsb25nIGRvdWJsZSBfX3gp IDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZkaW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91 YmxlIF9feSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19mZGltbCAobG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSBfX3kpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1heGwgKGxvbmcgZG91Ymxl IF9feCwgbG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtYXhsIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWlu bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKCmV4dGVybiBp bnQgX19mcGNsYXNzaWZ5bCAobG9uZyBkb3VibGUgX192YWx1ZSkKICAgICBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRsIChsb25nIGRvdWJsZSBfX3Zh bHVlKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGxvbmcgZG91 YmxlIGZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBf X3opIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1hbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgOwojIDEwMCAiL3Vzci9pbmNsdWRlL21hdGguaCIg MiAzCiMgMTEzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiBpbnQgc2lnbmdhbTsKIyAx NTQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZW51bQogIHsKICAgIEZQX05BTiwKCiAgICBGUF9J TkZJTklURSwKCiAgICBGUF9aRVJPLAoKICAgIEZQX1NVQk5PUk1BTCwKCiAgICBGUF9OT1JNQUwK CiAgfTsKIyAyNDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKdHlwZWRlZiBlbnVtCnsKICBfSUVF RV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAogIF9JU09DXwp9IF9MSUJf VkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBFIF9MSUJfVkVSU0lPTjsK IyAyNjUgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKc3RydWN0IGV4Y2VwdGlvbgoKICB7CiAgICBp bnQgdHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJnMTsKICAgIGRvdWJsZSBhcmcy OwogICAgZG91YmxlIHJldHZhbDsKICB9OwoKCgoKZXh0ZXJuIGludCBtYXRoZXJyIChzdHJ1Y3Qg ZXhjZXB0aW9uICpfX2V4Yyk7CiMgMzUwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAxIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRz L21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgaW50Cl9fc2lnbmJpdGYgKGZsb2F0IF9f eCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBmbG9hdCBfX2Y7IGludCBfX2k7IH0gX191ID0g eyBfX2Y6IF9feCB9OwogIHJldHVybiBfX3UuX19pIDwgMDsKfQpleHRlcm4gX19pbmxpbmUgaW50 Cl9fc2lnbmJpdCAoZG91YmxlIF9feCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBkb3VibGUg X19kOyBpbnQgX19pWzJdOyB9IF9fdSA9IHsgX19kOiBfX3ggfTsKICByZXR1cm4gX191Ll9faVsx XSA8IDA7Cn0KZXh0ZXJuIF9faW5saW5lIGludApfX3NpZ25iaXRsIChsb25nIGRvdWJsZSBfX3gp CnsKICBfX2V4dGVuc2lvbl9fIHVuaW9uIHsgbG9uZyBkb3VibGUgX19sOyBpbnQgX19pWzNdOyB9 IF9fdSA9IHsgX19sOiBfX3ggfTsKICByZXR1cm4gKF9fdS5fX2lbMl0gJiAweDgwMDApICE9IDA7 Cn0KIyAyOTEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxp bmUgZG91YmxlIF9fc2duIChkb3VibGUpIDsgZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBfX3NnbiAo ZG91YmxlIF9feCkgeyByZXR1cm4gX194ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAg OiAtMS4wKTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgX19zZ25mIChmbG9hdCkgOyBleHRlcm4g X19pbmxpbmUgZmxvYXQgX19zZ25mIChmbG9hdCBfX3gpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAw LjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCk7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91 YmxlIF9fc2dubCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9f c2dubCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+ IDAuMCA/IDEuMCA6IC0xLjApOyB9CgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIF9fcG93MiAo ZG91YmxlKSA7IGV4dGVybiBfX2lubGluZSBkb3VibGUgX19wb3cyIChkb3VibGUgX194KSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25l bnQ7IF9fZXh0ZW5zaW9uX18gbG9uZyBsb25nIGludCBfX3AgPSAobG9uZyBsb25nIGludCkgX194 OyBpZiAoX194ID09IChsb25nIGRvdWJsZSkgX19wKSB7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZz Y2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoMS4wKSwgInUiIChfX3gpKTsgcmV0dXJuIF9f dmFsdWU7IH0gX19hc20gX192b2xhdGlsZV9fICgiZmxkCSUlc3QoMClcblx0IiAiZnJuZGludAkJ CSMgaW50KHgpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHgpXG5cdCIg ImYyeG0xCQkJIyAyXihmcmFjdCh4KSkgLSAxXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAo X19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX3ZhbHVlICs9IDEuMDsgX19hc20gX192b2xhdGls ZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4 cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBfX3BvdzJm IChmbG9hdCkgOyBleHRlcm4gX19pbmxpbmUgZmxvYXQgX19wb3cyZiAoZmxvYXQgX194KSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25l bnQ7IF9fZXh0ZW5zaW9uX18gbG9uZyBsb25nIGludCBfX3AgPSAobG9uZyBsb25nIGludCkgX194 OyBpZiAoX194ID09IChsb25nIGRvdWJsZSkgX19wKSB7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZz Y2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoMS4wKSwgInUiIChfX3gpKTsgcmV0dXJuIF9f dmFsdWU7IH0gX19hc20gX192b2xhdGlsZV9fICgiZmxkCSUlc3QoMClcblx0IiAiZnJuZGludAkJ CSMgaW50KHgpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHgpXG5cdCIg ImYyeG0xCQkJIyAyXihmcmFjdCh4KSkgLSAxXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAo X19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX3ZhbHVlICs9IDEuMDsgX19hc20gX192b2xhdGls ZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4 cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBf X3BvdzJsIChsb25nIGRvdWJsZSkgOyBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19wb3cy bCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lz dGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IF9fZXh0ZW5zaW9uX18gbG9uZyBsb25nIGludCBf X3AgPSAobG9uZyBsb25nIGludCkgX194OyBpZiAoX194ID09IChsb25nIGRvdWJsZSkgX19wKSB7 IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoMS4w KSwgInUiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19hc20gX192b2xhdGlsZV9fICgiZmxk CSUlc3QoMClcblx0IiAiZnJuZGludAkJCSMgaW50KHgpXG5cdCIgImZ4Y2hcblx0IiAiZnN1Ygkl JXN0KDEpCQkjIGZyYWN0KHgpXG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4KSkgLSAxXG5cdCIg OiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX3ZhbHVl ICs9IDEuMDsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDog IjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMgMzQz ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIHZvaWQK X19zaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkKewog IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fY29zcjsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19zaW5y OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2luY29zXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInRl c3RsCSQweDQwMCwgJSVlYXhcblx0IiAianoJMWZcblx0IiAiZmxkcGlcblx0IiAiZmFkZAklJXN0 KDApXG5cdCIgImZ4Y2gJJSVzdCgxKVxuXHQiICIyOiBmcHJlbTFcblx0IiAiZm5zdHN3CSUlYXhc blx0IiAidGVzdGwJJDB4NDAwLCAlJWVheFxuXHQiICJqbnoJMmJcblx0IiAiZnN0cAklJXN0KDEp XG5cdCIgImZzaW5jb3Ncblx0IiAiMToiIDogIj10IiAoX19jb3NyKSwgIj11IiAoX19zaW5yKSA6 ICIwIiAoX194KSk7ICpfX3NpbnggPSBfX3NpbnI7ICpfX2Nvc3ggPSBfX2Nvc3I7Cn0KCmV4dGVy biBfX2lubGluZSB2b2lkCl9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9h dCAqX19jb3N4KQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19jb3NyOyByZWdpc3RlciBsb25n IGRvdWJsZSBfX3NpbnI7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzaW5jb3Ncblx0IiAiZm5zdHN3 CSUlYXhcblx0IiAidGVzdGwJJDB4NDAwLCAlJWVheFxuXHQiICJqegkxZlxuXHQiICJmbGRwaVxu XHQiICJmYWRkCSUlc3QoMClcblx0IiAiZnhjaAklJXN0KDEpXG5cdCIgIjI6IGZwcmVtMVxuXHQi ICJmbnN0c3cJJSVheFxuXHQiICJ0ZXN0bAkkMHg0MDAsICUlZWF4XG5cdCIgImpuegkyYlxuXHQi ICJmc3RwCSUlc3QoMSlcblx0IiAiZnNpbmNvc1xuXHQiICIxOiIgOiAiPXQiIChfX2Nvc3IpLCAi PXUiIChfX3NpbnIpIDogIjAiIChfX3gpKTsgKl9fc2lueCA9IF9fc2lucjsgKl9fY29zeCA9IF9f Y29zcjsKfQoKZXh0ZXJuIF9faW5saW5lIHZvaWQKX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpCnsKICByZWdpc3RlciBs b25nIGRvdWJsZSBfX2Nvc3I7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fc2lucjsgX19hc20gX192 b2xhdGlsZV9fICgiZnNpbmNvc1xuXHQiICJmbnN0c3cJJSVheFxuXHQiICJ0ZXN0bAkkMHg0MDAs ICUlZWF4XG5cdCIgImp6CTFmXG5cdCIgImZsZHBpXG5cdCIgImZhZGQJJSVzdCgwKVxuXHQiICJm eGNoCSUlc3QoMSlcblx0IiAiMjogZnByZW0xXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInRlc3Rs CSQweDQwMCwgJSVlYXhcblx0IiAiam56CTJiXG5cdCIgImZzdHAJJSVzdCgxKVxuXHQiICJmc2lu Y29zXG5cdCIgIjE6IiA6ICI9dCIgKF9fY29zciksICI9dSIgKF9fc2lucikgOiAiMCIgKF9feCkp OyAqX19zaW54ID0gX19zaW5yOyAqX19jb3N4ID0gX19jb3NyOwp9CiMgMzg1ICIvdXNyL2luY2x1 ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIF9fZXhw bTFsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVn aXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1w OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihl KSkgLSAxXG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgx KVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1 YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3Qo eCAqIGxvZzIoZSkpKSAtIDFcblx0IiAiZnNjYWxlCQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihp bnQoeCAqIGxvZzIoZSkpKVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQp IDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlCQkJIyAyXmludCh4ICog bG9nMihlKSlcblx0IiA6ICI9dCIgKF9fdGVtcCkgOiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVu dCkpOyBfX3RlbXAgLT0gMS4wOyByZXR1cm4gX190ZW1wICsgX192YWx1ZSA/OiBfX3g7IH0KIyA0 MDUgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91 YmxlIGV4cCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdp c3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJ CQkjIGVeeCA9IDJeKHggKiBsb2cyKGUpKVxuXHQiICJmbXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIo ZSlcblx0IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMgaW50KHggKiBsb2cyKGUpKVxu XHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihlKSlcblx0IiAi ZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgOiAiPXQiIChfX3ZhbHVl KSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX3ZhbHVlICs9IDEuMDsgX19hc20g X192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwg InUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9h dCBleHBmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbDJlCQkJ IyBlXnggPSAyXih4ICogbG9nMihlKSlcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUp XG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0 IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIgImYy eG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiIDogIj10IiAoX192YWx1ZSks ICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7IF9fYXNtIF9f dm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1 IiAoX19leHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBk b3VibGUgZXhwbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs dWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAo ImZsZGwyZQkJCSMgZV54ID0gMl4oeCAqIGxvZzIoZSkpXG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4 ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJIyBpbnQoeCAqIGxv ZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUp KVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFcblx0IiA6ICI9dCIg KF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fdmFsdWUgKz0gMS4w OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9f dmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0KZXh0ZXJuIF9faW5s aW5lIGxvbmcgZG91YmxlIF9fZXhwbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcg ZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IF9fYXNtIF9f dm9sYXRpbGVfXyAoImZsZGwyZQkJCSMgZV54ID0gMl4oeCAqIGxvZzIoZSkpXG5cdCIgImZtdWwJ JSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQiICJmcm5kaW50CQkJ IyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0 KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDFc blx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9f dmFsdWUgKz0gMS4wOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1 ZSkgOiAiMCIgKF9fdmFsdWUpLCAidSIgKF9fZXhwb25lbnQpKTsgcmV0dXJuIF9fdmFsdWU7IH0K CgpleHRlcm4gX19pbmxpbmUgZG91YmxlIHRhbiAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25n IGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlMiBfX2F0dHJpYnV0 ZV9fICgoX191bnVzZWRfXykpOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcHRhbiIgOiAiPXQiIChf X3ZhbHVlMiksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0g ZXh0ZXJuIF9faW5saW5lIGZsb2F0IHRhbmYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlMiBfX2F0dHJpYnV0ZV9f ICgoX191bnVzZWRfXykpOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcHRhbiIgOiAiPXQiIChfX3Zh bHVlMiksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0 ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIHRhbmwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3Rl ciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlMiBfX2F0 dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcHRhbiIgOiAi PXQiIChfX3ZhbHVlMiksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFs dWU7IH0KIyA0MjUgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19p bmxpbmUgZG91YmxlIGF0YW4yIChkb3VibGUgX195LCBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChf X3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVl OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB7 IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRh biIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJl dHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcg ZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs dWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAo X194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CmV4dGVybiBfX2lu bGluZSBsb25nIGRvdWJsZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBf X3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgi ZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSki KTsgcmV0dXJuIF9fdmFsdWU7IH0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGZtb2QgKGRvdWJs ZSBfX3gsIGRvdWJsZSBfX3kpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20g X192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAiZm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQi ICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4Iiwg ImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBmbW9kZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20g X192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAiZm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQi ICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4Iiwg ImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBmbW9k bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi bGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW1cblx0IiAiZm5zdHN3CSUl YXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwg InUiIChfX3kpIDogImF4IiwgImNjIik7IHJldHVybiBfX3ZhbHVlOyB9CiMgNDQwICIvdXNyL2lu Y2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBzcXJ0IChk b3VibGUgX194KSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9f ICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0 OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGZs b2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3Vs dCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcg ZG91YmxlIHNxcnRsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19y ZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIw IiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUg X19zcXJ0bCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0 OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9f eCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KCgpleHRlcm4gX19pbmxpbmUgZG91YmxlIGZhYnMgKGRv dWJsZSBfX3gpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzIChfX3gpOyB9CmV4dGVybiBfX2lubGlu ZSBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YgKF9feCk7 IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHsg cmV0dXJuIF9fYnVpbHRpbl9mYWJzbCAoX194KTsgfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3Vi bGUgX19mYWJzbCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2wgKF9f eCk7IH0KCgoKCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgc2luIChkb3VibGUgX194KSB7IHJl Z2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNpbiIgOiAiPXQi IChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5s aW5lIGZsb2F0IHNpbmYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19h c20gX192b2xhdGlsZV9fICgiZnNpbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyBy ZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIHNpbmwgKGxvbmcg ZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xh dGlsZV9fICgiZnNpbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19y ZXN1bHQ7IH0KCmV4dGVybiBfX2lubGluZSBkb3VibGUgY29zIChkb3VibGUgX194KSB7IHJlZ2lz dGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmNvcyIgOiAiPXQiIChf X3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5l IGZsb2F0IGNvc2YgKGZsb2F0IF9feCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsgX19hc20g X192b2xhdGlsZV9fICgiZmNvcyIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1 cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGNvc2wgKGxvbmcgZG91 YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGls ZV9fICgiZmNvcyIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1 bHQ7IH0KCmV4dGVybiBfX2lubGluZSBkb3VibGUgbG9nIChkb3VibGUgX194KSB7IHJlZ2lzdGVy IGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbG4yOyBmeGNoOyBmeWwy eCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVz dWx0OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBsb2dmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIg ZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMjsgZnhjaDsgZnlsMngi IDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3Vs dDsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nbCAobG9uZyBkb3VibGUgX194KSB7 IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRs bjI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIp OyByZXR1cm4gX19yZXN1bHQ7IH0KZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBsb2cxMCAoZG91Ymxl IF9feCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZs ZGxnMjsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEp Iik7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgbG9nMTBmIChmbG9h dCBfX3gpIHsgcmVnaXN0ZXIgZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZs ZGxnMjsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEp Iik7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nMTBs IChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNt IF9fdm9sYXRpbGVfXyAoImZsZGxnMjsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDog IjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfQoKZXh0ZXJuIF9faW5saW5l IGRvdWJsZSBhc2luIChkb3VibGUgX194KSB7IHJldHVybiBfX2F0YW4ybCAoX194LCBfX3NxcnRs ICgxLjAgLSBfX3ggKiBfX3gpKTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgYXNpbmYgKGZsb2F0 IF9feCkgeyByZXR1cm4gX19hdGFuMmwgKF9feCwgX19zcXJ0bCAoMS4wIC0gX194ICogX194KSk7 IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGFzaW5sIChsb25nIGRvdWJsZSBfX3gpIHsg cmV0dXJuIF9fYXRhbjJsIChfX3gsIF9fc3FydGwgKDEuMCAtIF9feCAqIF9feCkpOyB9CmV4dGVy biBfX2lubGluZSBkb3VibGUgYWNvcyAoZG91YmxlIF9feCkgeyByZXR1cm4gX19hdGFuMmwgKF9f c3FydGwgKDEuMCAtIF9feCAqIF9feCksIF9feCk7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGFj b3NmIChmbG9hdCBfX3gpIHsgcmV0dXJuIF9fYXRhbjJsIChfX3NxcnRsICgxLjAgLSBfX3ggKiBf X3gpLCBfX3gpOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBhY29zbCAobG9uZyBkb3Vi bGUgX194KSB7IHJldHVybiBfX2F0YW4ybCAoX19zcXJ0bCAoMS4wIC0gX194ICogX194KSwgX194 KTsgfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkgeyByZWdpc3Rl ciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAi PXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9 IGV4dGVybiBfX2lubGluZSBmbG9hdCBhdGFuZiAoZmxvYXQgX194KSB7IHJlZ2lzdGVyIGZsb2F0 IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmcGF0YW4iIDogIj10IiAoX19y ZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBleHRlcm4g X19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBs b25nIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6 ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7 IH0KCmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbjFsIChsb25nIGRvdWJsZSkgOyBl eHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ24xbCAobG9uZyBkb3VibGUgX194KSB7IF9f ZXh0ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBfX3hsZDsgdW5zaWduZWQgaW50IF9feGlb M107IH0gX19uID0geyBfX3hsZDogX194IH07IF9fbi5fX3hpWzJdID0gKF9fbi5fX3hpWzJdICYg MHg4MDAwKSB8IDB4M2ZmZjsgX19uLl9feGlbMV0gPSAweDgwMDAwMDAwOyBfX24uX194aVswXSA9 IDA7IHJldHVybiBfX24uX194bGQ7IH0KIyA0NzkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxp bmUuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlIHNpbmggKGRvdWJsZSBfX3gpIHsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKF9fZmFic2wgKF9feCkpOyByZXR1cm4g MC41ICogKF9fZXhtMSAvIChfX2V4bTEgKyAxLjApICsgX19leG0xKSAqIF9fc2duMWwgKF9feCk7 IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IHNpbmhmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9u ZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKF9fZmFic2wgKF9feCkpOyByZXR1cm4gMC41ICog KF9fZXhtMSAvIChfX2V4bTEgKyAxLjApICsgX19leG0xKSAqIF9fc2duMWwgKF9feCk7IH0gZXh0 ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0 ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKF9fZmFic2wgKF9feCkpOyByZXR1cm4g MC41ICogKF9fZXhtMSAvIChfX2V4bTEgKyAxLjApICsgX19leG0xKSAqIF9fc2duMWwgKF9feCk7 IH0KCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBjb3NoIChkb3VibGUgX194KSB7IHJlZ2lzdGVy IGxvbmcgZG91YmxlIF9fZXggPSBfX2V4cGwgKF9feCk7IHJldHVybiAwLjUgKiAoX19leCArIDEu MCAvIF9fZXgpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBjb3NoZiAoZmxvYXQgX194KSB7IHJl Z2lzdGVyIGxvbmcgZG91YmxlIF9fZXggPSBfX2V4cGwgKF9feCk7IHJldHVybiAwLjUgKiAoX19l eCArIDEuMCAvIF9fZXgpOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBjb3NobCAobG9u ZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXggPSBfX2V4cGwgKF9feCk7 IHJldHVybiAwLjUgKiAoX19leCArIDEuMCAvIF9fZXgpOyB9CgoKCmV4dGVybiBfX2lubGluZSBk b3VibGUgdGFuaCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBf X2V4cG0xbCAoLV9fZmFic2wgKF9feCArIF9feCkpOyByZXR1cm4gX19leG0xIC8gKF9fZXhtMSAr IDIuMCkgKiBfX3NnbjFsICgtX194KTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgdGFuaGYgKGZs b2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoLV9fZmFi c2wgKF9feCArIF9feCkpOyByZXR1cm4gX19leG0xIC8gKF9fZXhtMSArIDIuMCkgKiBfX3NnbjFs ICgtX194KTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgdGFuaGwgKGxvbmcgZG91Ymxl IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoLV9fZmFic2wg KF9feCArIF9feCkpOyByZXR1cm4gX19leG0xIC8gKF9fZXhtMSArIDIuMCkgKiBfX3NnbjFsICgt X194KTsgfQoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBmbG9vciAoZG91YmxlIF9feCkgeyBy ZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGlu dCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3Zv bGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhm M2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3 dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAi IChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJl dHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkg eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0 IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBf X3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYg MHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChf X2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDog IjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7 IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZSBmbG9vcmwgKGxv bmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxl IHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBf X2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19j d3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3 ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9 dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6 IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMgNTAzICIvdXNyL2luY2x1ZGUvYml0 cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBjZWlsIChkb3VibGUgX194 KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hv cnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNt IF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cg JiAweGYzZmYpIHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIg KF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkg OiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cp KTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGNlaWxmIChmbG9hdCBf X3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBz aG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19h c20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19j dyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJt IiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVl KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19j dykpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgY2VpbGwg KGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0 aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGlu dCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsg X19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZs ZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6 ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUw IiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9CiMgNTIxICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZQpsZGV4cCAoZG91Ymxl IF9feCwgaW50IF9feSkKewogIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9f dm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgo bG9uZyBkb3VibGUpIF9feSkpOyByZXR1cm4gX192YWx1ZTsKfQoKCgoKCgpleHRlcm4gX19pbmxp bmUgZG91YmxlIGV4cG0xIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFs dWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fdGVtcDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbDJlCQkJIyBlXnggLSAxID0gMl4oeCAq IGxvZzIoZSkpIC0gMVxuXHQiICJmbXVsCSUlc3QoMSkJCSMgeCAqIGxvZzIoZSlcblx0IiAiZnN0 CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMgaW50KHggKiBsb2cyKGUpKVxuXHQiICJmeGNoXG5c dCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9nMihlKSlcblx0IiAiZjJ4bTEJCQkjIDJe KGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgImZzY2FsZQkJCSMgMl4oeCAqIGxvZzIoZSkp IC0gMl4oaW50KHggKiBsb2cyKGUpKSlcblx0IiA6ICI9dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4 cG9uZW50KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZQkJCSMgMl5p bnQoeCAqIGxvZzIoZSkpXG5cdCIgOiAiPXQiIChfX3RlbXApIDogIjAiICgxLjApLCAidSIgKF9f ZXhwb25lbnQpKTsgX190ZW1wIC09IDEuMDsgcmV0dXJuIF9fdGVtcCArIF9fdmFsdWUgPzogX194 OyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBleHBtMWYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBs b25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyByZWdp c3RlciBsb25nIGRvdWJsZSBfX3RlbXA7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGwyZQkJCSMg ZV54IC0gMSA9IDJeKHggKiBsb2cyKGUpKSAtIDFcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBs b2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihl KSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5c dCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiICJmc2NhbGUJCQkj IDJeKHggKiBsb2cyKGUpKSAtIDJeKGludCh4ICogbG9nMihlKSkpXG5cdCIgOiAiPXQiIChfX3Zh bHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlX18g KCJmc2NhbGUJCQkjIDJeaW50KHggKiBsb2cyKGUpKVxuXHQiIDogIj10IiAoX190ZW1wKSA6ICIw IiAoMS4wKSwgInUiIChfX2V4cG9uZW50KSk7IF9fdGVtcCAtPSAxLjA7IHJldHVybiBfX3RlbXAg KyBfX3ZhbHVlID86IF9feDsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgZXhwbTFsIChs b25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIg bG9uZyBkb3VibGUgX19leHBvbmVudDsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX190ZW1wOyBfX2Fz bSBfX3ZvbGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCAtIDEgPSAyXih4ICogbG9nMihlKSkgLSAx XG5cdCIgImZtdWwJJSVzdCgxKQkJIyB4ICogbG9nMihlKVxuXHQiICJmc3QJJSVzdCgxKVxuXHQi ICJmcm5kaW50CQkJIyBpbnQoeCAqIGxvZzIoZSkpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0 KDEpCQkjIGZyYWN0KHggKiBsb2cyKGUpKVxuXHQiICJmMnhtMQkJCSMgMl4oZnJhY3QoeCAqIGxv ZzIoZSkpKSAtIDFcblx0IiAiZnNjYWxlCQkJIyAyXih4ICogbG9nMihlKSkgLSAyXihpbnQoeCAq IGxvZzIoZSkpKVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAi IChfX3gpKTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlCQkJIyAyXmludCh4ICogbG9nMihl KSlcblx0IiA6ICI9dCIgKF9fdGVtcCkgOiAiMCIgKDEuMCksICJ1IiAoX19leHBvbmVudCkpOyBf X3RlbXAgLT0gMS4wOyByZXR1cm4gX190ZW1wICsgX192YWx1ZSA/OiBfX3g7IH0KCgoKCgoKZXh0 ZXJuIF9faW5saW5lIGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX3ZhbHVlOyBpZiAoX19mYWJzbCAoX194KSA+PSAxLjAgLSAwLjUgKiAxLjQxNDIxMzU2 MjM3MzA5NTA0ODgwTCkgX192YWx1ZSA9IGxvZ2wgKDEuMCArIF9feCk7IGVsc2UgX19hc20gX192 b2xhdGlsZV9fICgiZmxkbG4yXG5cdCIgImZ4Y2hcblx0IiAiZnlsMnhwMSIgOiAiPXQiIChfX3Zh bHVlKSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19p bmxpbmUgZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192 YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUw NDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVf XyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAi MCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGxv bmcgZG91YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fdmFsdWU7IGlmIChfX2ZhYnNsIChfX3gpID49IDEuMCAtIDAuNSAqIDEuNDE0MjEzNTYyMzcz MDk1MDQ4ODBMKSBfX3ZhbHVlID0gbG9nbCAoMS4wICsgX194KTsgZWxzZSBfX2FzbSBfX3ZvbGF0 aWxlX18gKCJmbGRsbjJcblx0IiAiZnhjaFxuXHQiICJmeWwyeHAxIiA6ICI9dCIgKF9fdmFsdWUp IDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CiMgNTUzICIvdXNyL2lu Y2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBhc2luaCAo ZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyBy ZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAx LjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBhc2lu aGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gp OyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkg KyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRv dWJsZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kg PSBfX2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9f eSAqIF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9CgoKCgpleHRl cm4gX19pbmxpbmUgZG91YmxlIGFjb3NoIChkb3VibGUgX194KSB7IHJldHVybiBsb2dsIChfX3gg KyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0gZXh0ZXJuIF9f aW5saW5lIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB7IHJldHVybiBsb2dsIChfX3ggKyBfX3Nx cnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0gZXh0ZXJuIF9faW5saW5l IGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUgX194KSB7IHJldHVybiBsb2dsIChfX3gg KyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0KCgpleHRlcm4g X19pbmxpbmUgZG91YmxlIGF0YW5oIChkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkg LyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBh dGFuaGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChf X3gpOyByZXR1cm4gLTAuNSAqIGxvZzFwbCAoLShfX3kgKyBfX3kpIC8gKDEuMCArIF9feSkpICog X19zZ24xbCAoX194KTsgfSBleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmhsIChsb25n IGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsg cmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2du MWwgKF9feCk7IH0KCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gs IGRvdWJsZSBfX3kpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0g ZXh0ZXJuIF9faW5saW5lIGZsb2F0IGh5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0 dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0gZXh0ZXJuIF9faW5saW5lIGxv bmcgZG91YmxlIGh5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0 dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0KCmV4dGVybiBfX2lubGluZSBk b3VibGUgbG9nYiAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBy ZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rc blx0IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJu IF9fdmFsdWU7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpIHsgcmVn aXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19qdW5rOyBf X2FzbSBfX3ZvbGF0aWxlX18gKCJmeHRyYWN0XG5cdCIgOiAiPXQiIChfX2p1bmspLCAiPXUiIChf X3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBfX3ZhbHVlOyB9IGV4dGVybiBfX2lubGluZSBs b25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUgX194KSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl IF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsgX19hc20gX192b2xhdGlsZV9f ICgiZnh0cmFjdFxuXHQiIDogIj10IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9f eCkpOyByZXR1cm4gX192YWx1ZTsgfQojIDU4MCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGlu ZS5oIiAzCmV4dGVybiBfX2lubGluZSBkb3VibGUgbG9nMiAoZG91YmxlIF9feCkgeyByZWdpc3Rl ciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZ4Y2g7IGZ5bDJ4 IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1 bHQ7IH0gZXh0ZXJuIF9faW5saW5lIGZsb2F0IGxvZzJmIChmbG9hdCBfX3gpIHsgcmVnaXN0ZXIg ZmxvYXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZ4Y2g7IGZ5bDJ4IiA6 ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7 IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGxvZzJsIChsb25nIGRvdWJsZSBfX3gpIHsg cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7 IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyBy ZXR1cm4gX19yZXN1bHQ7IH0KCgpleHRlcm4gX19pbmxpbmUgZmxvYXQKbGRleHBmIChmbG9hdCBf X3gsIGludCBfX3kpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3Zv bGF0aWxlX18gKCJmc2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxv bmcgZG91YmxlKSBfX3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KCmV4dGVybiBfX2lubGluZSBsb25n IGRvdWJsZQpsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9feSkKewogIHJlZ2lzdGVyIGxv bmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChf X3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgobG9uZyBkb3VibGUpIF9feSkpOyByZXR1cm4gX192 YWx1ZTsKfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3VibGUg X195LCBkb3VibGUgX196KSB7IHJldHVybiAoX194ICogX195KSArIF9fejsgfSBleHRlcm4gX19p bmxpbmUgZmxvYXQgZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgeyByZXR1 cm4gKF9feCAqIF9feSkgKyBfX3o7IH0gZXh0ZXJuIF9faW5saW5lIGxvbmcgZG91YmxlIGZtYWwg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3opIHsgcmV0 dXJuIChfX3ggKiBfX3kpICsgX196OyB9CgpleHRlcm4gX19pbmxpbmUgZG91YmxlIHJpbnQgKGRv dWJsZSBfX3gpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18g KCJmcm5kaW50IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3Vs dDsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgcmludGYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBm bG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnJuZGludCIgOiAiPXQiIChfX3Jl c3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gZXh0ZXJuIF9faW5saW5lIGxv bmcgZG91YmxlIHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUg X19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZybmRpbnQiIDogIj10IiAoX19yZXN1bHQp IDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9CiMgNjA3ICIvdXNyL2luY2x1ZGUvYml0 cy9tYXRoaW5saW5lLmgiIDMKZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmxyaW50ZiAoZmxvYXQg X194KQp7CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0 cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9f bHJpbnRyZXM7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmxyaW50IChkb3VibGUgX194KQp7 CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGwgJTAi IDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbHJpbnRy ZXM7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmxyaW50bCAobG9uZyBkb3VibGUgX194KQp7 CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGwgJTAi IDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbHJpbnRy ZXM7Cn0KIyA2MzAgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMwpleHRlcm4gX19p bmxpbmUgbG9uZyBsb25nIGludApsbHJpbnRmIChmbG9hdCBfX3gpCnsKICBsb25nIGxvbmcgaW50 IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAo X19sbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xscmludHJlczsKfQpl eHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnQgKGRvdWJsZSBfX3gpCnsKICBsb25n IGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbGwgJTAi IDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xscmlu dHJlczsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnRsIChsb25nIGRvdWJs ZSBfX3gpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVf XyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7 IHJldHVybiBfX2xscmludHJlczsKfQoKCgoKCgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBkcmVt IChkb3VibGUgX194LCBkb3VibGUgX195KSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdp c3RlciBpbnQgX19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQi ICJmc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9 JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4g X192YWx1ZTsgfSBleHRlcm4gX19pbmxpbmUgZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQg X195KSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7 IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3RzdwklJWF4XG5cdCIgInNh aGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAi MCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfSBleHRlcm4gX19p bmxpbmUgbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQgX19jbG9iYmVyZWQ7IF9f YXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3RzdwklJWF4XG5cdCIgInNhaGZc blx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Nsb2JiZXJlZCkgOiAiMCIg KF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfQojIDY2NSAiL3Vzci9p bmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzCmV4dGVybiBfX2lubGluZSBpbnQKX19maW5pdGUg KGRvdWJsZSBfX3gpCnsKICByZXR1cm4gKF9fZXh0ZW5zaW9uX18KICAgICAgICAgICgoKCgodW5p b24geyBkb3VibGUgX19kOyBpbnQgX19pWzJdOyB9KSB7X19kOiBfX3h9KS5fX2lbMV0KICAgICAg ICAgICAgIHwgMHg4MDBmZmZmZnUpICsgMSkgPj4gMzEpKTsKfQoKCgpleHRlcm4gX19pbmxpbmUg ZG91YmxlIF9fY29zaG0xIChkb3VibGUpIDsgZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBfX2Nvc2ht MSAoZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAo X19mYWJzbCAoX194KSk7IHJldHVybiAwLjUgKiAoX19leG0xIC8gKF9fZXhtMSArIDEuMCkpICog X19leG0xOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBfX2Nvc2htMWYgKGZsb2F0KSA7IGV4dGVy biBfX2lubGluZSBmbG9hdCBfX2Nvc2htMWYgKGZsb2F0IF9feCkgeyByZWdpc3RlciBsb25nIGRv dWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194KSk7IHJldHVybiAwLjUgKiAoX19l eG0xIC8gKF9fZXhtMSArIDEuMCkpICogX19leG0xOyB9IGV4dGVybiBfX2lubGluZSBsb25nIGRv dWJsZSBfX2Nvc2htMWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBfX2lubGluZSBsb25nIGRvdWJs ZSBfX2Nvc2htMWwgKGxvbmcgZG91YmxlIF9feCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4 bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194KSk7IHJldHVybiAwLjUgKiAoX19leG0xIC8gKF9f ZXhtMSArIDEuMCkpICogX19leG0xOyB9CgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUgX19hY29z aDFwIChkb3VibGUpIDsgZXh0ZXJuIF9faW5saW5lIGRvdWJsZSBfX2Fjb3NoMXAgKGRvdWJsZSBf X3gpIHsgcmV0dXJuIGxvZzFwbCAoX194ICsgX19zcXJ0bCAoX194KSAqIF9fc3FydGwgKF9feCAr IDIuMCkpOyB9IGV4dGVybiBfX2lubGluZSBmbG9hdCBfX2Fjb3NoMXBmIChmbG9hdCkgOyBleHRl cm4gX19pbmxpbmUgZmxvYXQgX19hY29zaDFwZiAoZmxvYXQgX194KSB7IHJldHVybiBsb2cxcGwg KF9feCArIF9fc3FydGwgKF9feCkgKiBfX3NxcnRsIChfX3ggKyAyLjApKTsgfSBleHRlcm4gX19p bmxpbmUgbG9uZyBkb3VibGUgX19hY29zaDFwbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIF9faW5s aW5lIGxvbmcgZG91YmxlIF9fYWNvc2gxcGwgKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gbG9n MXBsIChfX3ggKyBfX3NxcnRsIChfX3gpICogX19zcXJ0bCAoX194ICsgMi4wKSk7IH0KIyAzNTEg Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDQxMSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwoK IyAzMSAiY29tbW9uLmgiIDIKIyA5NSAiY29tbW9uLmgiCiMgMSAiL3Vzci9pbmNsdWRlL2ludHR5 cGVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvaW50dHlwZXMuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9zdGRpbnQuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc3RkaW50 LmgiIDIgMwojIDQ5ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBj aGFyIHVpbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVpbnQxNl90OwoKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgdWludDMyX3Q7CgoKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2ln bmVkIGxvbmcgbG9uZyBpbnQgdWludDY0X3Q7CgoKCgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgaW50 X2xlYXN0OF90Owp0eXBlZGVmIHNob3J0IGludCBpbnRfbGVhc3QxNl90Owp0eXBlZGVmIGludCBp bnRfbGVhc3QzMl90OwoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRf bGVhc3Q2NF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9sZWFzdDhfdDsKdHlwZWRl ZiB1bnNpZ25lZCBzaG9ydCBpbnQgdWludF9sZWFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50 IHVpbnRfbGVhc3QzMl90OwoKCgpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBs b25nIGludCB1aW50X2xlYXN0NjRfdDsKCgoKCgoKdHlwZWRlZiBzaWduZWQgY2hhciBpbnRfZmFz dDhfdDsKCgoKCgp0eXBlZGVmIGludCBpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgaW50IGludF9mYXN0 MzJfdDsKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50X2Zhc3Q2NF90OwoK Cgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9mYXN0OF90OwoKCgoKCnR5cGVkZWYgdW5zaWdu ZWQgaW50IHVpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfZmFzdDMyX3Q7 Cl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRfZmFzdDY0 X3Q7CiMgMTI2ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKdHlwZWRlZiBpbnQgaW50cHRyX3Q7 CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludHB0cl90OwojIDEzOCAiL3Vzci9pbmNsdWRlL3N0 ZGludC5oIiAzCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcgaW50IGludG1heF90Owpf X2V4dGVuc2lvbl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50bWF4X3Q7CiMg MjkgIi91c3IvaW5jbHVkZS9pbnR0eXBlcy5oIiAyIDMKCgoKCgoKdHlwZWRlZiBsb25nIGludCBf X2d3Y2hhcl90OwojIDI3NCAiL3Vzci9pbmNsdWRlL2ludHR5cGVzLmgiIDMKCiMgMjg4ICIvdXNy L2luY2x1ZGUvaW50dHlwZXMuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBp bnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gaW1heGRpdl90OwoKCgoKCmV4dGVy biBpbnRtYXhfdCBpbWF4YWJzIChpbnRtYXhfdCBfX24pIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gaW1heGRpdl90IGltYXhkaXYgKGludG1heF90IF9fbnVtZXIsIGludG1h eF90IF9fZGVub20pCiAgICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g aW50bWF4X3Qgc3RydG9pbWF4IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f YmFzZSkgOwoKCmV4dGVybiB1aW50bWF4X3Qgc3RydG91bWF4IChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiBfX3Jlc3Ry aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7CgoKZXh0ZXJuIGludG1heF90IHdjc3RvaW1heCAo X19jb25zdCBfX2d3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19nd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAg ICAgOwoKCmV4dGVybiB1aW50bWF4X3Qgd2NzdG91bWF4IChfX2NvbnN0IF9fZ3djaGFyX3QgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nd2NoYXJfdCAq KiBfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIDsKIyAzOTYgIi91c3IvaW5j bHVkZS9pbnR0eXBlcy5oIiAzCmV4dGVybiBfX2lubGluZSBpbnRtYXhfdApzdHJ0b2ltYXggKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBucHRyLCBjaGFyICoqX19yZXN0cmljdCBlbmRwdHIsCiAg ICAgICAgICAgaW50IGJhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChucHRyLCBl bmRwdHIsIGJhc2UsIDApOwp9CiMgNDE0ICIvdXNyL2luY2x1ZGUvaW50dHlwZXMuaCIgMwpleHRl cm4gX19pbmxpbmUgdWludG1heF90CnN0cnRvdW1heCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IG5wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IGVuZHB0ciwKICAgICAgICAgICBpbnQgYmFzZSkKewog IHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChucHRyLCBlbmRwdHIsIGJhc2UsIDApOwp9CgoK Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0b2xsX2ludGVybmFsIChf X2NvbnN0IF9fZ3djaGFyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fZ3djaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKZXh0 ZXJuIF9faW5saW5lIGludG1heF90Cndjc3RvaW1heCAoX19jb25zdCBfX2d3Y2hhcl90ICpfX3Jl c3RyaWN0IG5wdHIsIF9fZ3djaGFyX3QgKipfX3Jlc3RyaWN0IGVuZHB0ciwKICAgICAgICAgICBp bnQgYmFzZSkKewogIHJldHVybiBfX3djc3RvbGxfaW50ZXJuYWwgKG5wdHIsIGVuZHB0ciwgYmFz ZSwgMCk7Cn0KCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg X193Y3N0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBfX2d3Y2hhcl90ICoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3djaGFy X3QgKioKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIDsKCgpleHRlcm4gX19pbmxpbmUgdWlu dG1heF90Cndjc3RvdW1heCAoX19jb25zdCBfX2d3Y2hhcl90ICpfX3Jlc3RyaWN0IG5wdHIsIF9f Z3djaGFyX3QgKipfX3Jlc3RyaWN0IGVuZHB0ciwKICAgICAgICAgICBpbnQgYmFzZSkKewogIHJl dHVybiBfX3djc3RvdWxsX2ludGVybmFsIChucHRyLCBlbmRwdHIsIGJhc2UsIDApOwp9CgoKCgoK IyA5NiAiY29tbW9uLmgiIDIKCgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVSU5UMTY7CnR5cGVk ZWYgc2lnbmVkIHNob3J0IElOVDE2OwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBVSU5UODsKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgVUlOVDMyOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBVSU5U NjQ7CnR5cGVkZWYgc2lnbmVkIGNoYXIgSU5UODsKdHlwZWRlZiBzaWduZWQgaW50IElOVDMyOwp0 eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgSU5UNjQ7CiMgMTE3ICJjb21tb24uaCIKIyAxICJmYXN0 bWVtY3B5LmgiIDEKIyAxICIuLi9saWJ2by9mYXN0bWVtY3B5LmgiIDEKCgoKIyAxICIuLi9jb25m aWcuaCIgMQojIDUgIi4uL2xpYnZvL2Zhc3RtZW1jcHkuaCIgMgoKCgoKIyAxICIvdXNyL2xpYi9n Y2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIv dXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0 eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMgMTAgIi4uL2xpYnZvL2Zhc3RtZW1jcHkuaCIgMgoKZXh0 ZXJuIHZvaWQgKiBmYXN0X21lbWNweSh2b2lkICogdG8sIGNvbnN0IHZvaWQgKiBmcm9tLCBzaXpl X3QgbGVuKTsKZXh0ZXJuIHZvaWQgKiBtZW0yYWdwY3B5KHZvaWQgKiB0bywgY29uc3Qgdm9pZCAq IGZyb20sIHNpemVfdCBsZW4pOwojIDIzICIuLi9saWJ2by9mYXN0bWVtY3B5LmgiCnN0YXRpYyBp bmxpbmUgdm9pZCAqIG1lbTJhZ3BjcHlfcGljKHZvaWQgKiBkc3QsIHZvaWQgKiBzcmMsIGludCBi eXRlc1BlckxpbmUsIGludCBoZWlnaHQsIGludCBkc3RTdHJpZGUsIGludCBzcmNTdHJpZGUpCnsK ICAgICAgICBpbnQgaTsKICAgICAgICB2b2lkICpyZXR2YWw9ZHN0OwoKICAgICAgICBpZihkc3RT dHJpZGUgPT0gc3JjU3RyaWRlKSBtZW0yYWdwY3B5KGRzdCwgc3JjLCBzcmNTdHJpZGUqaGVpZ2h0 KTsKICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAgICAgZm9yKGk9MDsgaTxoZWln aHQ7IGkrKykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWVtMmFn cGNweShkc3QsIHNyYywgYnl0ZXNQZXJMaW5lKTsKICAgICAgICAgICAgICAgICAgICAgICAgc3Jj Kz0gc3JjU3RyaWRlOwogICAgICAgICAgICAgICAgICAgICAgICBkc3QrPSBkc3RTdHJpZGU7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmV0dmFsOwp9CgpzdGF0 aWMgaW5saW5lIHZvaWQgKiBtZW1jcHlfcGljKHZvaWQgKiBkc3QsIHZvaWQgKiBzcmMsIGludCBi eXRlc1BlckxpbmUsIGludCBoZWlnaHQsIGludCBkc3RTdHJpZGUsIGludCBzcmNTdHJpZGUpCnsK ICAgICAgICBpbnQgaTsKICAgICAgICB2b2lkICpyZXR2YWw9ZHN0OwoKICAgICAgICBpZihkc3RT dHJpZGUgPT0gc3JjU3RyaWRlKSBmYXN0X21lbWNweShkc3Qsc3JjLHNyY1N0cmlkZSpoZWlnaHQp OwogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IoaT0wOyBpPGhlaWdo dDsgaSsrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBmYXN0X21l bWNweShkc3Qsc3JjLGJ5dGVzUGVyTGluZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNyYys9 IHNyY1N0cmlkZTsKICAgICAgICAgICAgICAgICAgICAgICAgZHN0Kz0gZHN0U3RyaWRlOwogICAg ICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJldHZhbDsKfQojIDIgImZh c3RtZW1jcHkuaCIgMgojIDExOCAiY29tbW9uLmgiIDIKCgoKCgoKCiMgMSAiYnN3YXAuaCIgMQoj IDkgImJzd2FwLmgiCmlubGluZSBzdGF0aWMgdW5zaWduZWQgc2hvcnQgQnl0ZVN3YXAxNih1bnNp Z25lZCBzaG9ydCB4KQp7CiAgX19hc20oInhjaGdiICViMCwlaDAiIDoKICAgICAgICAiPXEiICh4 KSA6CiAgICAgICAgIjAiICh4KSk7CiAgICByZXR1cm4geDsKfQoKCmlubGluZSBzdGF0aWMgdW5z aWduZWQgaW50IEJ5dGVTd2FwMzIodW5zaWduZWQgaW50IHgpCnsKCiBfX2FzbSgiYnN3YXAJJTAi OgogICAgICAiPXIiICh4KSA6CgoKCgoKCiAgICAgICIwIiAoeCkpOwogIHJldHVybiB4Owp9CgoK aW5saW5lIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgaW50IEJ5dGVTd2FwNjQodW5zaWduZWQg bG9uZyBsb25nIGludCB4KQp7CiAgcmVnaXN0ZXIgdW5pb24geyBfX2V4dGVuc2lvbl9fIHVpbnQ2 NF90IF9fbGw7CiAgICAgICAgICB1aW50MzJfdCBfX2xbMl07IH0gX194OwogIGFzbSgieGNoZ2wJ JTAsJTEiOgogICAgICAiPXIiKF9feC5fX2xbMF0pLCI9ciIoX194Ll9fbFsxXSk6CiAgICAgICIw IihCeXRlU3dhcDMyKCh1bnNpZ25lZCBsb25nKXgpKSwiMSIoQnl0ZVN3YXAzMigodW5zaWduZWQg bG9uZykoeD4+MzIpKSkpOwogIHJldHVybiBfX3guX19sbDsKfQojIDEyNiAiY29tbW9uLmgiIDIK IyAxMzkgImNvbW1vbi5oIgojIDEgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMSAzCiMgMTQwICJj b21tb24uaCIgMgojIDE2OSAiY29tbW9uLmgiCnN0YXRpYyBpbmxpbmUgaW50MzJfdCBORUdfU1NS MzIoIGludDMyX3QgYSwgaW50OF90IHMpewogICAgYXNtICgic2FybCAlMSwgJTBcblx0IgogICAg ICAgICA6ICIrciIgKGEpCiAgICAgICAgIDogImljIiAoKHVpbnQ4X3QpKC1zKSkKICAgICk7CiAg ICByZXR1cm4gYTsKfQpzdGF0aWMgaW5saW5lIHVpbnQzMl90IE5FR19VU1IzMih1aW50MzJfdCBh LCBpbnQ4X3Qgcyl7CiAgICBhc20gKCJzaHJsICUxLCAlMFxuXHQiCiAgICAgICAgIDogIityIiAo YSkKICAgICAgICAgOiAiaWMiICgodWludDhfdCkoLXMpKQogICAgKTsKICAgIHJldHVybiBhOwp9 CgoKCgoKCgpzdHJ1Y3QgUHV0Qml0Q29udGV4dDsKCnR5cGVkZWYgdm9pZCAoKldyaXRlRGF0YUZ1 bmMpKHZvaWQgKiwgVUlOVDggKiwgaW50KTsKCnR5cGVkZWYgc3RydWN0IFB1dEJpdENvbnRleHQg ewoKCgoKICAgIFVJTlQzMiBiaXRfYnVmOwogICAgaW50IGJpdF9sZWZ0OwogICAgVUlOVDggKmJ1 ZiwgKmJ1Zl9wdHIsICpidWZfZW5kOwoKICAgIElOVDY0IGRhdGFfb3V0X3NpemU7Cn0gUHV0Qml0 Q29udGV4dDsKCnZvaWQgaW5pdF9wdXRfYml0cyhQdXRCaXRDb250ZXh0ICpzLAogICAgICAgICAg ICAgICAgICAgVUlOVDggKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAg ICAgdm9pZCAqb3BhcXVlLAogICAgICAgICAgICAgICAgICAgdm9pZCAoKndyaXRlX2RhdGEpKHZv aWQgKiwgVUlOVDggKiwgaW50KSk7CgpJTlQ2NCBnZXRfYml0X2NvdW50KFB1dEJpdENvbnRleHQg KnMpOwp2b2lkIGFsaWduX3B1dF9iaXRzKFB1dEJpdENvbnRleHQgKnMpOwp2b2lkIGZsdXNoX3B1 dF9iaXRzKFB1dEJpdENvbnRleHQgKnMpOwp2b2lkIHB1dF9zdHJpbmcoUHV0Qml0Q29udGV4dCAq IHBiYywgY2hhciAqcyk7CgoKCnR5cGVkZWYgc3RydWN0IEdldEJpdENvbnRleHQgewogICAgVUlO VDggKmJ1ZmZlciwgKmJ1ZmZlcl9lbmQ7CgogICAgaW50IGluZGV4OwojIDIzMiAiY29tbW9uLmgi CiAgICBpbnQgc2l6ZTsKfSBHZXRCaXRDb250ZXh0OwoKc3RhdGljIGlubGluZSBpbnQgZ2V0X2Jp dHNfY291bnQoR2V0Qml0Q29udGV4dCAqcyk7CgoKCnR5cGVkZWYgc3RydWN0IFZMQyB7CiAgICBp bnQgYml0czsKICAgIElOVDE2ICgqdGFibGUpWzJdOwogICAgaW50IHRhYmxlX3NpemUsIHRhYmxl X2FsbG9jYXRlZDsKfSBWTEM7Cgp0eXBlZGVmIHN0cnVjdCBSTF9WTENfRUxFTSB7CiAgICBpbnQx Nl90IGxldmVsOwogICAgaW50OF90IGxlbjsKICAgIHVpbnQ4X3QgcnVuOwp9IFJMX1ZMQ19FTEVN OwojIDI3NSAiY29tbW9uLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfYml0cyhQdXRCaXRDb250 ZXh0ICpzLCBpbnQgbiwgdW5zaWduZWQgaW50IHZhbHVlKQp7CiAgICB1bnNpZ25lZCBpbnQgYml0 X2J1ZjsKICAgIGludCBiaXRfbGVmdDsKCgoKCgogICAgKCh2b2lkKSAoMCkpOwoKICAgIGJpdF9i dWYgPSBzLT5iaXRfYnVmOwogICAgYml0X2xlZnQgPSBzLT5iaXRfbGVmdDsKCgoKICAgIGlmIChu IDwgYml0X2xlZnQpIHsKICAgICAgICBiaXRfYnVmID0gKGJpdF9idWY8PG4pIHwgdmFsdWU7CiAg ICAgICAgYml0X2xlZnQtPW47CiAgICB9IGVsc2UgewogICAgICAgIGJpdF9idWY8PD1iaXRfbGVm dDsKICAgICAgICBiaXRfYnVmIHw9IHZhbHVlID4+IChuIC0gYml0X2xlZnQpOwogICAgICAgICoo VUlOVDMyICopcy0+YnVmX3B0ciA9IEJ5dGVTd2FwMzIoYml0X2J1Zik7CgogICAgICAgIHMtPmJ1 Zl9wdHIrPTQ7CiAgICAgICAgYml0X2xlZnQrPTMyIC0gbjsKICAgICAgICBiaXRfYnVmID0gdmFs dWU7CiAgICB9CgogICAgcy0+Yml0X2J1ZiA9IGJpdF9idWY7CiAgICBzLT5iaXRfbGVmdCA9IGJp dF9sZWZ0Owp9CiMgMzc3ICJjb21tb24uaCIKc3RhdGljIGlubGluZSB1aW50OF90KiBwYkJ1ZlB0 cihQdXRCaXRDb250ZXh0ICpzKQp7CgoKCiAgICAgICAgcmV0dXJuIHMtPmJ1Zl9wdHI7Cgp9CiMg NDY5ICJjb21tb24uaCIKc3RhdGljIGlubGluZSBpbnQgZ2V0X2JpdHNfY291bnQoR2V0Qml0Q29u dGV4dCAqcyl7CiAgICByZXR1cm4gcy0+aW5kZXg7Cn0KIyA1ODkgImNvbW1vbi5oIgpzdGF0aWMg aW5saW5lIHVuc2lnbmVkIGludCBnZXRfYml0cyhHZXRCaXRDb250ZXh0ICpzLCBpbnQgbil7CiAg ICByZWdpc3RlciBpbnQgdG1wOwogICAgaW50IHJlX2luZGV4PSAocyktPmluZGV4OyBpbnQgcmVf Y2FjaGU9IDA7CiAgICByZV9jYWNoZT0gQnl0ZVN3YXAzMigoKihVSU5UMzIqKSgoKHVpbnQ4X3Qg KikocyktPmJ1ZmZlcikrKHJlX2luZGV4Pj4zKSkpKSA8PCAocmVfaW5kZXgmMHgwNyk7CiAgICB0 bXA9IE5FR19VU1IzMihyZV9jYWNoZSwgbik7CiAgICByZV9pbmRleCArPSAobik7CiAgICAocykt PmluZGV4PSByZV9pbmRleDsKICAgIHJldHVybiB0bXA7Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWdu ZWQgaW50IHNob3dfYml0cyhHZXRCaXRDb250ZXh0ICpzLCBpbnQgbil7CiAgICByZWdpc3RlciBp bnQgdG1wOwogICAgaW50IHJlX2luZGV4PSAocyktPmluZGV4OyBpbnQgcmVfY2FjaGU9IDA7CiAg ICByZV9jYWNoZT0gQnl0ZVN3YXAzMigoKihVSU5UMzIqKSgoKHVpbnQ4X3QgKikocyktPmJ1ZmZl cikrKHJlX2luZGV4Pj4zKSkpKSA8PCAocmVfaW5kZXgmMHgwNyk7CiAgICB0bXA9IE5FR19VU1Iz MihyZV9jYWNoZSwgbik7CgogICAgcmV0dXJuIHRtcDsKfQoKc3RhdGljIGlubGluZSB2b2lkIHNr aXBfYml0cyhHZXRCaXRDb250ZXh0ICpzLCBpbnQgbil7CgogICAgaW50IHJlX2luZGV4PSAocykt PmluZGV4OyBpbnQgcmVfY2FjaGU9IDA7CiAgICByZV9jYWNoZT0gQnl0ZVN3YXAzMigoKihVSU5U MzIqKSgoKHVpbnQ4X3QgKikocyktPmJ1ZmZlcikrKHJlX2luZGV4Pj4zKSkpKSA8PCAocmVfaW5k ZXgmMHgwNyk7CiAgICByZV9pbmRleCArPSAobik7CiAgICAocyktPmluZGV4PSByZV9pbmRleDsK fQoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2JpdHMxKEdldEJpdENvbnRleHQgKnMp ewoKICAgIGludCBpbmRleD0gcy0+aW5kZXg7CiAgICB1aW50OF90IHJlc3VsdD0gcy0+YnVmZmVy WyBpbmRleD4+MyBdOwogICAgcmVzdWx0PDw9IChpbmRleCYweDA3KTsKICAgIHJlc3VsdD4+PSA4 IC0gMTsKICAgIGluZGV4Kys7CiAgICBzLT5pbmRleD0gaW5kZXg7CgogICAgcmV0dXJuIHJlc3Vs dDsKCgoKfQoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2hvd19iaXRzMShHZXRCaXRDb250 ZXh0ICpzKXsKICAgIHJldHVybiBzaG93X2JpdHMocywgMSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9p ZCBza2lwX2JpdHMxKEdldEJpdENvbnRleHQgKnMpewogICAgc2tpcF9iaXRzKHMsIDEpOwp9Cgp2 b2lkIGluaXRfZ2V0X2JpdHMoR2V0Qml0Q29udGV4dCAqcywKICAgICAgICAgICAgICAgICAgIFVJ TlQ4ICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSk7CgppbnQgY2hlY2tfbWFya2VyKEdldEJpdENv bnRleHQgKnMsIGNoYXIgKm1zZyk7CnZvaWQgYWxpZ25fZ2V0X2JpdHMoR2V0Qml0Q29udGV4dCAq cyk7CmludCBpbml0X3ZsYyhWTEMgKnZsYywgaW50IG5iX2JpdHMsIGludCBuYl9jb2RlcywKICAg ICAgICAgICAgIGNvbnN0IHZvaWQgKmJpdHMsIGludCBiaXRzX3dyYXAsIGludCBiaXRzX3NpemUs CiAgICAgICAgICAgICBjb25zdCB2b2lkICpjb2RlcywgaW50IGNvZGVzX3dyYXAsIGludCBjb2Rl c19zaXplKTsKdm9pZCBmcmVlX3ZsYyhWTEMgKnZsYyk7CiMgNzAzICJjb21tb24uaCIKc3RhdGlj IGlubGluZSBpbnQgZ2V0X3ZsYyhHZXRCaXRDb250ZXh0ICpzLCBWTEMgKnZsYykKewogICAgaW50 IGNvZGU7CiAgICBJTlQxNiAoKnRhYmxlKVsyXT0gdmxjLT50YWJsZTsKCiAgICBpbnQgcmVfaW5k ZXg9IChzKS0+aW5kZXg7IGludCByZV9jYWNoZT0gMDsKICAgIHJlX2NhY2hlPSBCeXRlU3dhcDMy KCgqKFVJTlQzMiopKCgodWludDhfdCAqKShzKS0+YnVmZmVyKSsocmVfaW5kZXg+PjMpKSkpIDw8 IChyZV9pbmRleCYweDA3KTsKCiAgICB7IGludCBuLCBpbmRleCwgbmJfYml0czsgaW5kZXg9IE5F R19VU1IzMihyZV9jYWNoZSwgdmxjLT5iaXRzKTsgY29kZSA9IHRhYmxlW2luZGV4XVswXTsgbiA9 IHRhYmxlW2luZGV4XVsxXTsgaWYoMyA+IDEgJiYgbiA8IDApeyByZV9pbmRleCArPSAodmxjLT5i aXRzKTsgcmVfY2FjaGU9IEJ5dGVTd2FwMzIoKCooVUlOVDMyKikoKCh1aW50OF90ICopKHMpLT5i dWZmZXIpKyhyZV9pbmRleD4+MykpKSkgPDwgKHJlX2luZGV4JjB4MDcpOyBuYl9iaXRzID0gLW47 IGluZGV4PSBORUdfVVNSMzIocmVfY2FjaGUsIG5iX2JpdHMpICsgY29kZTsgY29kZSA9IHRhYmxl W2luZGV4XVswXTsgbiA9IHRhYmxlW2luZGV4XVsxXTsgaWYoMyA+IDIgJiYgbiA8IDApeyByZV9p bmRleCArPSAobmJfYml0cyk7IHJlX2NhY2hlPSBCeXRlU3dhcDMyKCgqKFVJTlQzMiopKCgodWlu dDhfdCAqKShzKS0+YnVmZmVyKSsocmVfaW5kZXg+PjMpKSkpIDw8IChyZV9pbmRleCYweDA3KTsg bmJfYml0cyA9IC1uOyBpbmRleD0gTkVHX1VTUjMyKHJlX2NhY2hlLCBuYl9iaXRzKSArIGNvZGU7 IGNvZGUgPSB0YWJsZVtpbmRleF1bMF07IG4gPSB0YWJsZVtpbmRleF1bMV07IH0gfSB7IHJlX2Nh Y2hlIDw8PSAobik7IHJlX2luZGV4ICs9IChuKTsgfX0KCiAgICAocyktPmluZGV4PSByZV9pbmRl eDsKICAgIHJldHVybiBjb2RlOwp9CgpzdGF0aWMgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGlu ZSkpIGlubGluZSBpbnQgZ2V0X3ZsYzIoR2V0Qml0Q29udGV4dCAqcywgSU5UMTYgKCp0YWJsZSlb Ml0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0cywgaW50IG1heF9k ZXB0aCkKewogICAgaW50IGNvZGU7CgogICAgaW50IHJlX2luZGV4PSAocyktPmluZGV4OyBpbnQg cmVfY2FjaGU9IDA7CiAgICByZV9jYWNoZT0gQnl0ZVN3YXAzMigoKihVSU5UMzIqKSgoKHVpbnQ4 X3QgKikocyktPmJ1ZmZlcikrKHJlX2luZGV4Pj4zKSkpKSA8PCAocmVfaW5kZXgmMHgwNyk7Cgog ICAgeyBpbnQgbiwgaW5kZXgsIG5iX2JpdHM7IGluZGV4PSBORUdfVVNSMzIocmVfY2FjaGUsIGJp dHMpOyBjb2RlID0gdGFibGVbaW5kZXhdWzBdOyBuID0gdGFibGVbaW5kZXhdWzFdOyBpZihtYXhf ZGVwdGggPiAxICYmIG4gPCAwKXsgcmVfaW5kZXggKz0gKGJpdHMpOyByZV9jYWNoZT0gQnl0ZVN3 YXAzMigoKihVSU5UMzIqKSgoKHVpbnQ4X3QgKikocyktPmJ1ZmZlcikrKHJlX2luZGV4Pj4zKSkp KSA8PCAocmVfaW5kZXgmMHgwNyk7IG5iX2JpdHMgPSAtbjsgaW5kZXg9IE5FR19VU1IzMihyZV9j YWNoZSwgbmJfYml0cykgKyBjb2RlOyBjb2RlID0gdGFibGVbaW5kZXhdWzBdOyBuID0gdGFibGVb aW5kZXhdWzFdOyBpZihtYXhfZGVwdGggPiAyICYmIG4gPCAwKXsgcmVfaW5kZXggKz0gKG5iX2Jp dHMpOyByZV9jYWNoZT0gQnl0ZVN3YXAzMigoKihVSU5UMzIqKSgoKHVpbnQ4X3QgKikocyktPmJ1 ZmZlcikrKHJlX2luZGV4Pj4zKSkpKSA8PCAocmVfaW5kZXgmMHgwNyk7IG5iX2JpdHMgPSAtbjsg aW5kZXg9IE5FR19VU1IzMihyZV9jYWNoZSwgbmJfYml0cykgKyBjb2RlOyBjb2RlID0gdGFibGVb aW5kZXhdWzBdOyBuID0gdGFibGVbaW5kZXhdWzFdOyB9IH0geyByZV9jYWNoZSA8PD0gKG4pOyBy ZV9pbmRleCArPSAobik7IH19CgogICAgKHMpLT5pbmRleD0gcmVfaW5kZXg7CiAgICByZXR1cm4g Y29kZTsKfQojIDc1OCAiY29tbW9uLmgiCnN0YXRpYyBpbmxpbmUgaW50IGF2X2xvZzIodW5zaWdu ZWQgaW50IHYpCnsKICAgIGludCBuOwoKICAgIG4gPSAwOwogICAgaWYgKHYgJiAweGZmZmYwMDAw KSB7CiAgICAgICAgdiA+Pj0gMTY7CiAgICAgICAgbiArPSAxNjsKICAgIH0KICAgIGlmICh2ICYg MHhmZjAwKSB7CiAgICAgICAgdiA+Pj0gODsKICAgICAgICBuICs9IDg7CiAgICB9CiAgICBpZiAo diAmIDB4ZjApIHsKICAgICAgICB2ID4+PSA0OwogICAgICAgIG4gKz0gNDsKICAgIH0KICAgIGlm ICh2ICYgMHhjKSB7CiAgICAgICAgdiA+Pj0gMjsKICAgICAgICBuICs9IDI7CiAgICB9CiAgICBp ZiAodiAmIDB4MikgewogICAgICAgIG4rKzsKICAgIH0KICAgIHJldHVybiBuOwp9CgoKc3RhdGlj IGlubGluZSBpbnQgbWlkX3ByZWQoaW50IGEsIGludCBiLCBpbnQgYykKewogICAgaW50IHZtaW4s IHZtYXg7CiAgICB2bWF4ID0gdm1pbiA9IGE7CiAgICBpZiAoYiA8IHZtaW4pCiAgICAgICAgdm1p biA9IGI7CiAgICBlbHNlCiAgICAgICAgdm1heCA9IGI7CgogICAgaWYgKGMgPCB2bWluKQogICAg ICAgIHZtaW4gPSBjOwogICAgZWxzZSBpZiAoYyA+IHZtYXgpCiAgICAgICAgdm1heCA9IGM7Cgog ICAgcmV0dXJuIGEgKyBiICsgYyAtIHZtaW4gLSB2bWF4Owp9CgpzdGF0aWMgaW5saW5lIGludCBj bGlwKGludCBhLCBpbnQgYW1pbiwgaW50IGFtYXgpCnsKICAgIGlmIChhIDwgYW1pbikKICAgICAg ICByZXR1cm4gYW1pbjsKICAgIGVsc2UgaWYgKGEgPiBhbWF4KQogICAgICAgIHJldHVybiBhbWF4 OwogICAgZWxzZQogICAgICAgIHJldHVybiBhOwp9CgoKZXh0ZXJuIGNvbnN0IFVJTlQ4IGZmX3Nx cnRfdGFiWzEyOF07CgppbnQgZmZfZ2NkKGludCBhLCBpbnQgYik7CgpzdGF0aWMgaW5saW5lIGlu dCBmZl9zcXJ0KGludCBhKQp7CiAgICBpbnQgcmV0PTA7CiAgICBpbnQgczsKICAgIGludCByZXRf c3E9MDsKCiAgICBpZihhPDEyOCkgcmV0dXJuIGZmX3NxcnRfdGFiW2FdOwoKICAgIGZvcihzPTE1 OyBzPj0wOyBzLS0pewogICAgICAgIGludCBiPSByZXRfc3EgKyAoMTw8KHMqMikpICsgKHJldDw8 cykqMjsKICAgICAgICBpZihiPD1hKXsKICAgICAgICAgICAgcmV0X3NxPWI7CiAgICAgICAgICAg IHJldCs9IDE8PHM7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHJldDsKfQoKCgoKc3RhdGlj IGlubGluZSBpbnQgZmZfZ2V0X2ZvdXJjYyhjaGFyICpzKXsKICAgICgodm9pZCkgKDApKTsKCiAg ICByZXR1cm4gKHNbMF0pICsgKHNbMV08PDgpICsgKHNbMl08PDE2KSArIChzWzNdPDwyNCk7Cn0K IyA1ICJhdmNvZGVjLmgiIDIKCgoKCgoKZW51bSBDb2RlY0lEIHsKICAgIENPREVDX0lEX05PTkUs CiAgICBDT0RFQ19JRF9NUEVHMVZJREVPLAogICAgQ09ERUNfSURfSDI2MywKICAgIENPREVDX0lE X1JWMTAsCiAgICBDT0RFQ19JRF9NUDIsCiAgICBDT0RFQ19JRF9NUDNMQU1FLAogICAgQ09ERUNf SURfVk9SQklTLAogICAgQ09ERUNfSURfQUMzLAogICAgQ09ERUNfSURfTUpQRUcsCiAgICBDT0RF Q19JRF9NUEVHNCwKICAgIENPREVDX0lEX1JBV1ZJREVPLAogICAgQ09ERUNfSURfTVNNUEVHNFYx LAogICAgQ09ERUNfSURfTVNNUEVHNFYyLAogICAgQ09ERUNfSURfTVNNUEVHNFYzLAogICAgQ09E RUNfSURfV01WMSwKICAgIENPREVDX0lEX1dNVjIsCiAgICBDT0RFQ19JRF9IMjYzUCwKICAgIENP REVDX0lEX0gyNjNJLAogICAgQ09ERUNfSURfU1ZRMSwKICAgIENPREVDX0lEX0RWVklERU8sCiAg ICBDT0RFQ19JRF9EVkFVRElPLAogICAgQ09ERUNfSURfV01BVjEsCiAgICBDT0RFQ19JRF9XTUFW MiwKICAgIENPREVDX0lEX01BQ0UzLAogICAgQ09ERUNfSURfTUFDRTYsCgoKICAgIENPREVDX0lE X1BDTV9TMTZMRSwKICAgIENPREVDX0lEX1BDTV9TMTZCRSwKICAgIENPREVDX0lEX1BDTV9VMTZM RSwKICAgIENPREVDX0lEX1BDTV9VMTZCRSwKICAgIENPREVDX0lEX1BDTV9TOCwKICAgIENPREVD X0lEX1BDTV9VOCwKICAgIENPREVDX0lEX1BDTV9NVUxBVywKICAgIENPREVDX0lEX1BDTV9BTEFX LAoKCiAgICBDT0RFQ19JRF9BRFBDTV9JTUFfUVQsCiAgICBDT0RFQ19JRF9BRFBDTV9JTUFfV0FW LAogICAgQ09ERUNfSURfQURQQ01fTVMsCn07CgplbnVtIENvZGVjVHlwZSB7CiAgICBDT0RFQ19U WVBFX1VOS05PV04gPSAtMSwKICAgIENPREVDX1RZUEVfVklERU8sCiAgICBDT0RFQ19UWVBFX0FV RElPLAp9OwoKZW51bSBQaXhlbEZvcm1hdCB7CiAgICBQSVhfRk1UX0FOWSA9IC0xLAogICAgUElY X0ZNVF9ZVVY0MjBQLAogICAgUElYX0ZNVF9ZVVY0MjIsCiAgICBQSVhfRk1UX1JHQjI0LAogICAg UElYX0ZNVF9CR1IyNCwKICAgIFBJWF9GTVRfWVVWNDIyUCwKICAgIFBJWF9GTVRfWVVWNDQ0UCwK ICAgIFBJWF9GTVRfUkdCQTMyLAogICAgUElYX0ZNVF9CR1JBMzIsCiAgICBQSVhfRk1UX1lVVjQx MFAsCiAgICBQSVhfRk1UX1lVVjQxMVAKfTsKCgplbnVtIFNhbXBsZUZvcm1hdCB7CiAgICBTQU1Q TEVfRk1UX1MxNiA9IDAsCn07CiMgODkgImF2Y29kZWMuaCIKZW51bSBNb3Rpb25fRXN0X0lEIHsK ICAgIE1FX1pFUk8gPSAxLAogICAgTUVfRlVMTCwKICAgIE1FX0xPRywKICAgIE1FX1BIT0RTLAog ICAgTUVfRVBaUywKICAgIE1FX1gxCn07Cgp0eXBlZGVmIHN0cnVjdCBSY092ZXJyaWRlewogICAg aW50IHN0YXJ0X2ZyYW1lOwogICAgaW50IGVuZF9mcmFtZTsKICAgIGludCBxc2NhbGU7CiAgICBm bG9hdCBxdWFsaXR5X2ZhY3RvcjsKfSBSY092ZXJyaWRlOwoKCmV4dGVybiBpbnQgbW90aW9uX2Vz dGltYXRpb25fbWV0aG9kOwoKCnN0YXRpYyBjb25zdCBpbnQgTW90aW9uX0VzdF9RVGFiW10gPSB7 IE1FX1pFUk8sIE1FX1BIT0RTLCBNRV9MT0csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE1FX1gxLCBNRV9FUFpTLCBNRV9GVUxMIH07CiMgMTUyICJhdmNvZGVjLmgiCnR5 cGVkZWYgc3RydWN0IEFWQ29kZWNDb250ZXh0IHsKCgoKCgogICAgaW50IGJpdF9yYXRlOwoKCgoK CgoKICAgIGludCBiaXRfcmF0ZV90b2xlcmFuY2U7CgoKCgoKCiAgICBpbnQgZmxhZ3M7CgoKCgoK CiAgICBpbnQgc3ViX2lkOwoKCgoKCgogICAgaW50IG1lX21ldGhvZDsKIyAxOTcgImF2Y29kZWMu aCIKICAgIHZvaWQgKmV4dHJhZGF0YTsKICAgIGludCBleHRyYWRhdGFfc2l6ZTsKIyAyMDggImF2 Y29kZWMuaCIKICAgIGludCBmcmFtZV9yYXRlOwoKCgoKCiAgICBpbnQgd2lkdGgsIGhlaWdodDsK CgoKCgogICAgaW50IGFzcGVjdF9yYXRpb19pbmZvOwojIDIzMyAiYXZjb2RlYy5oIgogICAgaW50 IGdvcF9zaXplOwoKCgoKCgogICAgZW51bSBQaXhlbEZvcm1hdCBwaXhfZm10OwoKICAgIGludCBy ZXBlYXRfcGljdDsKIyAyNTQgImF2Y29kZWMuaCIKICAgIHZvaWQgKCpkcmF3X2hvcml6X2JhbmQp KHN0cnVjdCBBVkNvZGVjQ29udGV4dCAqcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJ TlQ4ICoqc3JjX3B0ciwgaW50IGxpbmVzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCk7CgoKICAgIGludCBzYW1wbGVfcmF0ZTsKICAg IGludCBjaGFubmVsczsKICAgIGludCBzYW1wbGVfZm10OwoKCiAgICBpbnQgZnJhbWVfc2l6ZTsK ICAgIGludCBmcmFtZV9udW1iZXI7CiAgICBpbnQgcmVhbF9waWN0X251bTsKCgoKCgoKCiAgICBp bnQga2V5X2ZyYW1lOwoKCgoKCgogICAgaW50IHBpY3RfdHlwZTsKIyAyOTQgImF2Y29kZWMuaCIK ICAgIGludCBkZWxheTsKCgoKCgoKCiAgICB1aW50OF90ICptYnNraXBfdGFibGU7CgoKCgoKCgog ICAgaW50IHF1YWxpdHk7CgoKCiAgICBmbG9hdCBxY29tcHJlc3M7CiAgICBmbG9hdCBxYmx1cjsK CgoKCgoKICAgIGludCBxbWluOwoKCgoKCgogICAgaW50IHFtYXg7CgoKCgoKCiAgICBpbnQgbWF4 X3FkaWZmOwoKCgoKCgoKICAgIGludCBtYXhfYl9mcmFtZXM7CgoKCgoKCiAgICBmbG9hdCBiX3F1 YW50X2ZhY3RvcjsKCgogICAgaW50IHJjX3N0cmF0ZWd5OwogICAgaW50IGJfZnJhbWVfc3RyYXRl Z3k7CgoKCgoKICAgIGludCBodXJyeV91cDsKCiAgICBzdHJ1Y3QgQVZDb2RlYyAqY29kZWM7Cgog ICAgdm9pZCAqcHJpdl9kYXRhOwoKCgogICAgaW50IHJ0cF9tb2RlOwoKCgogICAgaW50IHJ0cF9w YXlsb2FkX3NpemU7CiMgMzg1ICJhdmNvZGVjLmgiCiAgICB2b2lkICgqcnRwX2NhbGxiYWNrKSh2 b2lkICpkYXRhLCBpbnQgc2l6ZSwgaW50IHBhY2tldF9udW1iZXIpOwoKCgoKCgoKICAgIGludCBn ZXRfcHNucjsKICAgIGZsb2F0IHBzbnJfeTsKICAgIGZsb2F0IHBzbnJfY2I7CiAgICBmbG9hdCBw c25yX2NyOwoKCiAgICBpbnQgbXZfYml0czsKICAgIGludCBoZWFkZXJfYml0czsKICAgIGludCBp X3RleF9iaXRzOwogICAgaW50IHBfdGV4X2JpdHM7CiAgICBpbnQgaV9jb3VudDsKICAgIGludCBw X2NvdW50OwogICAgaW50IHNraXBfY291bnQ7CiAgICBpbnQgbWlzY19iaXRzOwoKCgoKCgogICAg aW50IGZyYW1lX2JpdHM7CgoKCgoKCiAgICB2b2lkICpvcGFxdWU7CgogICAgY2hhciBjb2RlY19u YW1lWzMyXTsKICAgIGVudW0gQ29kZWNUeXBlIGNvZGVjX3R5cGU7CiAgICBlbnVtIENvZGVjSUQg Y29kZWNfaWQ7CiAgICB1bnNpZ25lZCBpbnQgY29kZWNfdGFnOwoKCgoKCgogICAgaW50IHdvcmth cm91bmRfYnVnczsKIyA0NDYgImF2Y29kZWMuaCIKICAgIGludCBsdW1hX2VsaW1fdGhyZXNob2xk OwoKCgoKCiAgICBpbnQgY2hyb21hX2VsaW1fdGhyZXNob2xkOwoKCgoKCgogICAgaW50IHN0cmlj dF9zdGRfY29tcGxpYW5jZTsKIyA0NjggImF2Y29kZWMuaCIKICAgIGZsb2F0IGJfcXVhbnRfb2Zm c2V0OwoKCgoKCgoKICAgIGludCBlcnJvcl9yZXNpbGllbmNlOwoKCgoKICAgIGludCAqcXVhbnRf c3RvcmU7CgoKCgoKCiAgICBpbnQgcXN0cmlkZTsKIyA0OTcgImF2Y29kZWMuaCIKICAgIHVpbnQ4 X3QgKmRyX2J1ZmZlclszXTsKCgoKCgoKICAgIGludCBkcl9zdHJpZGU7CgoKCgoKCiAgICB2b2lk ICpkcl9vcGFxdWVfZnJhbWU7CgoKCgoKCiAgICBpbnQgKCpnZXRfYnVmZmVyX2NhbGxiYWNrKShz dHJ1Y3QgQVZDb2RlY0NvbnRleHQgKmMsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHBpY3Rf dHlwZSk7CgoKCgoKCiAgICBpbnQgaGFzX2JfZnJhbWVzOwoKCgoKCgogICAgaW50IGRyX3V2c3Ry aWRlOwoKCgoKCgogICAgaW50IGRyX2lwX2J1ZmZlcl9jb3VudDsKCiAgICBpbnQgYmxvY2tfYWxp Z247CgogICAgaW50IHBhcnNlX29ubHk7CiMgNTUyICJhdmNvZGVjLmgiCiAgICBpbnQgbXBlZ19x dWFudDsKCgoKCgoKICAgIGNoYXIgKnN0YXRzX291dDsKCgoKCgoKCiAgICBjaGFyICpzdGF0c19p bjsKCgoKCgoKCiAgICBmbG9hdCByY19xc3F1aXNoOwoKICAgIGZsb2F0IHJjX3Ftb2RfYW1wOwog ICAgaW50IHJjX3Ftb2RfZnJlcTsKCgoKCgoKICAgIFJjT3ZlcnJpZGUgKnJjX292ZXJyaWRlOwog ICAgaW50IHJjX292ZXJyaWRlX2NvdW50OwoKCgoKCgogICAgY2hhciAqcmNfZXE7CgoKCgoKCiAg ICBpbnQgcmNfbWF4X3JhdGU7CgoKCgoKCiAgICBpbnQgcmNfbWluX3JhdGU7CgoKCgoKCiAgICBp bnQgcmNfYnVmZmVyX3NpemU7CiAgICBmbG9hdCByY19idWZmZXJfYWdncmVzc2l2aXR5OwoKCgoK CgogICAgZmxvYXQgaV9xdWFudF9mYWN0b3I7CiMgNjMxICJhdmNvZGVjLmgiCiAgICBmbG9hdCBp X3F1YW50X29mZnNldDsKCgoKCgoKICAgIGZsb2F0IHJjX2luaXRpYWxfY3BseDsKCgoKCgoKICAg IGludCBhc3BlY3RlZF93aWR0aDsKICAgIGludCBhc3BlY3RlZF9oZWlnaHQ7CgoKCgoKCiAgICBp bnQgZGN0X2FsZ287CiMgNjY3ICJhdmNvZGVjLmgiCiAgICBsb25nIGxvbmcgaW50IHB0czsKCgoK CgoKICAgIGZsb2F0IGx1bWlfbWFza2luZzsKCgoKCgoKICAgIGZsb2F0IHRlbXBvcmFsX2NwbHhf bWFza2luZzsKCgoKCgoKICAgIGZsb2F0IHNwYXRpYWxfY3BseF9tYXNraW5nOwoKCgoKCgogICAg ZmxvYXQgcF9tYXNraW5nOwoKCgoKCgogICAgZmxvYXQgZGFya19tYXNraW5nOwoKCgoKCgoKICAg IGludCBmb3VyY2M7CgoKCgoKCiAgICBpbnQgaWRjdF9hbGdvOwojIDczMyAiYXZjb2RlYy5oIgog ICAgaW50IHNsaWNlX2NvdW50OwoKCgoKCiAgICBpbnQgKnNsaWNlX29mZnNldDsKCgoKCgoKICAg IGludCBlcnJvcl9jb25jZWFsbWVudDsKIyA3NTUgImF2Y29kZWMuaCIKICAgICBpbnQ4X3QgKmN1 cnJlbnRfcXNjYWxlX3RhYmxlOwoKCgoKCiAgICAgaW50OF90ICpkaXNwbGF5X3FzY2FsZV90YWJs ZTsKCgoKCgoKICAgIGludCBmb3JjZV90eXBlOwp9IEFWQ29kZWNDb250ZXh0OwoKdHlwZWRlZiBz dHJ1Y3QgQVZDb2RlYyB7CiAgICBjaGFyICpuYW1lOwogICAgaW50IHR5cGU7CiAgICBpbnQgaWQ7 CiAgICBpbnQgcHJpdl9kYXRhX3NpemU7CiAgICBpbnQgKCppbml0KShBVkNvZGVjQ29udGV4dCAq KTsKICAgIGludCAoKmVuY29kZSkoQVZDb2RlY0NvbnRleHQgKiwgVUlOVDggKmJ1ZiwgaW50IGJ1 Zl9zaXplLCB2b2lkICpkYXRhKTsKICAgIGludCAoKmNsb3NlKShBVkNvZGVjQ29udGV4dCAqKTsK ICAgIGludCAoKmRlY29kZSkoQVZDb2RlY0NvbnRleHQgKiwgdm9pZCAqb3V0ZGF0YSwgaW50ICpv dXRkYXRhX3NpemUsCiAgICAgICAgICAgICAgICAgIFVJTlQ4ICpidWYsIGludCBidWZfc2l6ZSk7 CiAgICBpbnQgY2FwYWJpbGl0aWVzOwogICAgc3RydWN0IEFWQ29kZWMgKm5leHQ7Cn0gQVZDb2Rl YzsKCgoKCgp0eXBlZGVmIHN0cnVjdCBBVlBpY3R1cmUgewogICAgVUlOVDggKmRhdGFbNF07CiAg ICBpbnQgbGluZXNpemVbNF07Cn0gQVZQaWN0dXJlOwoKZXh0ZXJuIEFWQ29kZWMgYWMzX2VuY29k ZXI7CmV4dGVybiBBVkNvZGVjIG1wMl9lbmNvZGVyOwpleHRlcm4gQVZDb2RlYyBtcDNsYW1lX2Vu Y29kZXI7CmV4dGVybiBBVkNvZGVjIG9nZ3ZvcmJpc19lbmNvZGVyOwpleHRlcm4gQVZDb2RlYyBt cGVnMXZpZGVvX2VuY29kZXI7CmV4dGVybiBBVkNvZGVjIGgyNjNfZW5jb2RlcjsKZXh0ZXJuIEFW Q29kZWMgaDI2M3BfZW5jb2RlcjsKZXh0ZXJuIEFWQ29kZWMgcnYxMF9lbmNvZGVyOwpleHRlcm4g QVZDb2RlYyBtanBlZ19lbmNvZGVyOwpleHRlcm4gQVZDb2RlYyBtcGVnNF9lbmNvZGVyOwpleHRl cm4gQVZDb2RlYyBtc21wZWc0djFfZW5jb2RlcjsKZXh0ZXJuIEFWQ29kZWMgbXNtcGVnNHYyX2Vu Y29kZXI7CmV4dGVybiBBVkNvZGVjIG1zbXBlZzR2M19lbmNvZGVyOwpleHRlcm4gQVZDb2RlYyB3 bXYxX2VuY29kZXI7CmV4dGVybiBBVkNvZGVjIHdtdjJfZW5jb2RlcjsKCmV4dGVybiBBVkNvZGVj IGgyNjNfZGVjb2RlcjsKZXh0ZXJuIEFWQ29kZWMgbXBlZzRfZGVjb2RlcjsKZXh0ZXJuIEFWQ29k ZWMgbXNtcGVnNHYxX2RlY29kZXI7CmV4dGVybiBBVkNvZGVjIG1zbXBlZzR2Ml9kZWNvZGVyOwpl eHRlcm4gQVZDb2RlYyBtc21wZWc0djNfZGVjb2RlcjsKZXh0ZXJuIEFWQ29kZWMgd212MV9kZWNv ZGVyOwpleHRlcm4gQVZDb2RlYyB3bXYyX2RlY29kZXI7CmV4dGVybiBBVkNvZGVjIG1wZWdfZGVj b2RlcjsKZXh0ZXJuIEFWQ29kZWMgaDI2M2lfZGVjb2RlcjsKZXh0ZXJuIEFWQ29kZWMgcnYxMF9k ZWNvZGVyOwpleHRlcm4gQVZDb2RlYyBzdnExX2RlY29kZXI7CmV4dGVybiBBVkNvZGVjIGR2dmlk ZW9fZGVjb2RlcjsKZXh0ZXJuIEFWQ29kZWMgZHZhdWRpb19kZWNvZGVyOwpleHRlcm4gQVZDb2Rl YyB3bWF2MV9kZWNvZGVyOwpleHRlcm4gQVZDb2RlYyB3bWF2Ml9kZWNvZGVyOwpleHRlcm4gQVZD b2RlYyBtanBlZ19kZWNvZGVyOwpleHRlcm4gQVZDb2RlYyBtcDJfZGVjb2RlcjsKZXh0ZXJuIEFW Q29kZWMgbXAzX2RlY29kZXI7CmV4dGVybiBBVkNvZGVjIG1hY2UzX2RlY29kZXI7CmV4dGVybiBB VkNvZGVjIG1hY2U2X2RlY29kZXI7CgoKCgoKCmV4dGVybiBBVkNvZGVjIHBjbV9zMTZsZV9kZWNv ZGVyOyBleHRlcm4gQVZDb2RlYyBwY21fczE2bGVfZW5jb2RlcjsKZXh0ZXJuIEFWQ29kZWMgcGNt X3MxNmJlX2RlY29kZXI7IGV4dGVybiBBVkNvZGVjIHBjbV9zMTZiZV9lbmNvZGVyOwpleHRlcm4g QVZDb2RlYyBwY21fdTE2bGVfZGVjb2RlcjsgZXh0ZXJuIEFWQ29kZWMgcGNtX3UxNmxlX2VuY29k ZXI7CmV4dGVybiBBVkNvZGVjIHBjbV91MTZiZV9kZWNvZGVyOyBleHRlcm4gQVZDb2RlYyBwY21f dTE2YmVfZW5jb2RlcjsKZXh0ZXJuIEFWQ29kZWMgcGNtX3M4X2RlY29kZXI7IGV4dGVybiBBVkNv ZGVjIHBjbV9zOF9lbmNvZGVyOwpleHRlcm4gQVZDb2RlYyBwY21fdThfZGVjb2RlcjsgZXh0ZXJu IEFWQ29kZWMgcGNtX3U4X2VuY29kZXI7CmV4dGVybiBBVkNvZGVjIHBjbV9hbGF3X2RlY29kZXI7 IGV4dGVybiBBVkNvZGVjIHBjbV9hbGF3X2VuY29kZXI7CmV4dGVybiBBVkNvZGVjIHBjbV9tdWxh d19kZWNvZGVyOyBleHRlcm4gQVZDb2RlYyBwY21fbXVsYXdfZW5jb2RlcjsKCgoKZXh0ZXJuIEFW Q29kZWMgYWRwY21faW1hX3F0X2RlY29kZXI7IGV4dGVybiBBVkNvZGVjIGFkcGNtX2ltYV9xdF9l bmNvZGVyOwpleHRlcm4gQVZDb2RlYyBhZHBjbV9pbWFfd2F2X2RlY29kZXI7IGV4dGVybiBBVkNv ZGVjIGFkcGNtX2ltYV93YXZfZW5jb2RlcjsKZXh0ZXJuIEFWQ29kZWMgYWRwY21fbXNfZGVjb2Rl cjsgZXh0ZXJuIEFWQ29kZWMgYWRwY21fbXNfZW5jb2RlcjsKCgoKCmV4dGVybiBBVkNvZGVjIHJh d3ZpZGVvX2NvZGVjOwoKCmV4dGVybiBBVkNvZGVjIGFjM19kZWNvZGVyOwoKCgpzdHJ1Y3QgUmVT YW1wbGVDb250ZXh0OwoKdHlwZWRlZiBzdHJ1Y3QgUmVTYW1wbGVDb250ZXh0IFJlU2FtcGxlQ29u dGV4dDsKClJlU2FtcGxlQ29udGV4dCAqYXVkaW9fcmVzYW1wbGVfaW5pdChpbnQgb3V0cHV0X2No YW5uZWxzLCBpbnQgaW5wdXRfY2hhbm5lbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgb3V0cHV0X3JhdGUsIGludCBpbnB1dF9yYXRlKTsKaW50IGF1ZGlvX3Jlc2Ft cGxlKFJlU2FtcGxlQ29udGV4dCAqcywgc2hvcnQgKm91dHB1dCwgc2hvcnQgKmlucHV0LCBpbnQg bmJfc2FtcGxlcyk7CnZvaWQgYXVkaW9fcmVzYW1wbGVfY2xvc2UoUmVTYW1wbGVDb250ZXh0ICpz KTsKCgoKc3RydWN0IEltZ1JlU2FtcGxlQ29udGV4dDsKCnR5cGVkZWYgc3RydWN0IEltZ1JlU2Ft cGxlQ29udGV4dCBJbWdSZVNhbXBsZUNvbnRleHQ7CgpJbWdSZVNhbXBsZUNvbnRleHQgKmltZ19y ZXNhbXBsZV9pbml0KGludCBvdXRwdXRfd2lkdGgsIGludCBvdXRwdXRfaGVpZ2h0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dF93aWR0aCwgaW50IGlucHV0 X2hlaWdodCk7CgpJbWdSZVNhbXBsZUNvbnRleHQgKmltZ19yZXNhbXBsZV9mdWxsX2luaXQoaW50 IG93aWR0aCwgaW50IG9oZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IGl3aWR0aCwgaW50IGloZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHRvcEJhbmQsIGludCBib3R0b21CYW5kLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBsZWZ0QmFuZCwgaW50IHJpZ2h0QmFuZCk7Cgp2b2lkIGlt Z19yZXNhbXBsZShJbWdSZVNhbXBsZUNvbnRleHQgKnMsCiAgICAgICAgICAgICAgICAgIEFWUGlj dHVyZSAqb3V0cHV0LCBBVlBpY3R1cmUgKmlucHV0KTsKCnZvaWQgaW1nX3Jlc2FtcGxlX2Nsb3Nl KEltZ1JlU2FtcGxlQ29udGV4dCAqcyk7Cgp2b2lkIGF2cGljdHVyZV9maWxsKEFWUGljdHVyZSAq cGljdHVyZSwgVUlOVDggKnB0ciwKICAgICAgICAgICAgICAgICAgICBpbnQgcGl4X2ZtdCwgaW50 IHdpZHRoLCBpbnQgaGVpZ2h0KTsKaW50IGF2cGljdHVyZV9nZXRfc2l6ZShpbnQgcGl4X2ZtdCwg aW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKCgppbnQgaW1nX2NvbnZlcnQoQVZQaWN0dXJlICpkc3Qs IGludCBkc3RfcGl4X2ZtdCwKICAgICAgICAgICAgICAgIEFWUGljdHVyZSAqc3JjLCBpbnQgcGl4 X2ZtdCwKICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCk7CgoKaW50IGF2cGlj dHVyZV9kZWludGVybGFjZShBVlBpY3R1cmUgKmRzdCwgQVZQaWN0dXJlICpzcmMsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IHBpeF9mbXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CgoK CmV4dGVybiBBVkNvZGVjICpmaXJzdF9hdmNvZGVjOwoKCnVuc2lnbmVkIGF2Y29kZWNfdmVyc2lv bih2b2lkKTsKCnVuc2lnbmVkIGF2Y29kZWNfYnVpbGQodm9pZCk7CnZvaWQgYXZjb2RlY19pbml0 KHZvaWQpOwoKdm9pZCBhdmNvZGVjX3NldF9iaXRfZXhhY3Qodm9pZCk7Cgp2b2lkIHJlZ2lzdGVy X2F2Y29kZWMoQVZDb2RlYyAqZm9ybWF0KTsKQVZDb2RlYyAqYXZjb2RlY19maW5kX2VuY29kZXIo ZW51bSBDb2RlY0lEIGlkKTsKQVZDb2RlYyAqYXZjb2RlY19maW5kX2VuY29kZXJfYnlfbmFtZShj b25zdCBjaGFyICpuYW1lKTsKQVZDb2RlYyAqYXZjb2RlY19maW5kX2RlY29kZXIoZW51bSBDb2Rl Y0lEIGlkKTsKQVZDb2RlYyAqYXZjb2RlY19maW5kX2RlY29kZXJfYnlfbmFtZShjb25zdCBjaGFy ICpuYW1lKTsKdm9pZCBhdmNvZGVjX3N0cmluZyhjaGFyICpidWYsIGludCBidWZfc2l6ZSwgQVZD b2RlY0NvbnRleHQgKmVuYywgaW50IGVuY29kZSk7CgpBVkNvZGVjQ29udGV4dCAqYXZjb2RlY19h bGxvY19jb250ZXh0KHZvaWQpOwppbnQgYXZjb2RlY19vcGVuKEFWQ29kZWNDb250ZXh0ICphdmN0 eCwgQVZDb2RlYyAqY29kZWMpOwppbnQgYXZjb2RlY19kZWNvZGVfYXVkaW8oQVZDb2RlY0NvbnRl eHQgKmF2Y3R4LCBJTlQxNiAqc2FtcGxlcywKICAgICAgICAgICAgICAgICAgICAgICAgIGludCAq ZnJhbWVfc2l6ZV9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UOCAqYnVmLCBpbnQg YnVmX3NpemUpOwppbnQgYXZjb2RlY19kZWNvZGVfdmlkZW8oQVZDb2RlY0NvbnRleHQgKmF2Y3R4 LCBBVlBpY3R1cmUgKnBpY3R1cmUsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmdvdF9w aWN0dXJlX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQ4ICpidWYsIGludCBidWZf c2l6ZSk7CmludCBhdmNvZGVjX3BhcnNlX2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgVUlO VDggKipwZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpkYXRhX3NpemVfcHRyLAog ICAgICAgICAgICAgICAgICAgICAgICBVSU5UOCAqYnVmLCBpbnQgYnVmX3NpemUpOwppbnQgYXZj b2RlY19lbmNvZGVfYXVkaW8oQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBVSU5UOCAqYnVmLCBpbnQg YnVmX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG9ydCAqc2FtcGxlcyk7 CmludCBhdmNvZGVjX2VuY29kZV92aWRlbyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsIFVJTlQ4ICpi dWYsIGludCBidWZfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWUGljdHVy ZSAqcGljdCk7CgppbnQgYXZjb2RlY19jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpOwoKdm9p ZCBhdmNvZGVjX3JlZ2lzdGVyX2FsbCh2b2lkKTsKCnZvaWQgYXZjb2RlY19mbHVzaF9idWZmZXJz KEFWQ29kZWNDb250ZXh0ICphdmN0eCk7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CgogICAgaW50 IHNpemU7CgogICAgaW50IGZyYW1lX3R5cGU7Cn0gYXZjX2VuY19yZXN1bHRfdDsKCgoKCgp0eXBl ZGVmIGVudW0gewoKICAgIEFWQ19PUEVOX0JZX05BTUUgPSAweEFDQTAwMCwKICAgIEFWQ19PUEVO X0JZX0NPREVDX0lELAogICAgQVZDX09QRU5fQllfRk9VUkNDLAogICAgQVZDX0NMT1NFLAoKICAg IEFWQ19GTFVTSCwKCgogICAgQVZDX0RFQ09ERSwKCgogICAgQVZDX0VOQ09ERSwKCgogICAgQVZD X0dFVF9WRVJTSU9OID0gMHhBQ0IwMDAsCiAgICBBVkNfR0VUX1dJRFRILAogICAgQVZDX0dFVF9I RUlHSFQsCiAgICBBVkNfR0VUX0RFTEFZLAogICAgQVZDX0dFVF9RVUFOVF9UQUJMRSwKCgoKICAg IEFWQ19HRVRfRlJBTUVfU0laRSA9IDB4QUJDMDAwLAoKCgoKCgoKICAgIEFWQ19TRVRfV0lEVEgg PSAweEFDRDAwMCwKICAgIEFWQ19TRVRfSEVJR0hULAoKCiAgICBBVkNfU0VUX0ZSQU1FX1JBVEUg PSAweEFDRDgwMCwKICAgIEFWQ19TRVRfUVVBTElUWSwKICAgIEFWQ19TRVRfSFVSUllfVVAsCgoK ICAgIEFWQ19TRVRfU0FNUExFX1JBVEUgPSAweEFDRTAwMCwKICAgIEFWQ19TRVRfQ0hBTk5FTFMs Cgp9IGF2Y19jbWRfdDsKIyAxMDE3ICJhdmNvZGVjLmgiCmludCBhdmNvZGVjKHZvaWQqIGhhbmRs ZSwgYXZjX2NtZF90IGNtZCwgdm9pZCogcGluLCB2b2lkKiBwb3V0KTsKCgp2b2lkICphdl9tYWxs b2MoaW50IHNpemUpOwp2b2lkICphdl9tYWxsb2N6KGludCBzaXplKTsKdm9pZCBhdl9mcmVlKHZv aWQgKnB0cik7CnZvaWQgX19hdl9mcmVlcCh2b2lkICoqcHRyKTsKIyAyMCAidXRpbHMuYyIgMgoj IDEgImRzcHV0aWwuaCIgMQojIDI3ICJkc3B1dGlsLmgiCnR5cGVkZWYgc2hvcnQgRENURUxFTTsK CnZvaWQgZmRjdF9pZmFzdCAoRENURUxFTSAqZGF0YSk7CnZvaWQgZmZfanBlZ19mZGN0X2lzbG93 IChEQ1RFTEVNICpkYXRhKTsKCnZvaWQgal9yZXZfZGN0IChEQ1RFTEVNICpkYXRhKTsKCnZvaWQg ZmZfZmRjdF9tbXgoRENURUxFTSAqYmxvY2spOwoKCmV4dGVybiBjb25zdCBVSU5UOCBmZl9hbHRl cm5hdGVfaG9yaXpvbnRhbF9zY2FuWzY0XTsKZXh0ZXJuIGNvbnN0IFVJTlQ4IGZmX2FsdGVybmF0 ZV92ZXJ0aWNhbF9zY2FuWzY0XTsKZXh0ZXJuIGNvbnN0IFVJTlQ4IGZmX3ppZ3phZ19kaXJlY3Rb NjRdOwoKCgoKCmV4dGVybiBVSU5UMzIgc3F1YXJlVGJsWzUxMl07CmV4dGVybiBVSU5UOCBjcm9w VGJsWzI1NiArIDIgKiAzODRdOwoKdm9pZCBkc3B1dGlsX2luaXQodm9pZCk7CiMgNjEgImRzcHV0 aWwuaCIKZXh0ZXJuIHZvaWQgKCpnZXRfcGl4ZWxzKShEQ1RFTEVNICpibG9jayAsIGNvbnN0IFVJ TlQ4ICpwaXhlbHMgLCBpbnQgbGluZV9zaXplKTsKZXh0ZXJuIHZvaWQgKCpkaWZmX3BpeGVscyko RENURUxFTSAqYmxvY2sgLCBjb25zdCBVSU5UOCAqczEgLCBjb25zdCBVSU5UOCAqczIgLCBpbnQg c3RyaWRlKTsKZXh0ZXJuIHZvaWQgKCpwdXRfcGl4ZWxzX2NsYW1wZWQpKGNvbnN0IERDVEVMRU0g KmJsb2NrICwgVUlOVDggKnBpeGVscyAsIGludCBsaW5lX3NpemUpOwpleHRlcm4gdm9pZCAoKmFk ZF9waXhlbHNfY2xhbXBlZCkoY29uc3QgRENURUxFTSAqYmxvY2sgLCBVSU5UOCAqcGl4ZWxzICwg aW50IGxpbmVfc2l6ZSk7CmV4dGVybiB2b2lkICgqZmZfZ21jMSkoVUlOVDggKmRzdCAsIFVJTlQ4 ICpzcmMgLCBpbnQgc3JjU3RyaWRlLCBpbnQgaCwgaW50IHgxNiwgaW50IHkxNiwgaW50IHJvdW5k ZXIpOwpleHRlcm4gdm9pZCAoKmZmX2dtYyApKFVJTlQ4ICpkc3QgLCBVSU5UOCAqc3JjICwgaW50 IHN0cmlkZSwgaW50IGgsIGludCBveCwgaW50IG95LAogICAgICAgICAgICAgICAgICBpbnQgZHh4 LCBpbnQgZHh5LCBpbnQgZHl4LCBpbnQgZHl5LCBpbnQgc2hpZnQsIGludCByLCBpbnQgd2lkdGgs IGludCBoZWlnaHQpOwpleHRlcm4gdm9pZCAoKmNsZWFyX2Jsb2NrcykoRENURUxFTSAqYmxvY2tz ICk7CmV4dGVybiBpbnQgKCpwaXhfc3VtKShVSU5UOCAqIHBpeCwgaW50IGxpbmVfc2l6ZSk7CmV4 dGVybiBpbnQgKCpwaXhfbm9ybTEpKFVJTlQ4ICogcGl4LCBpbnQgbGluZV9zaXplKTsKCgoKdm9p ZCBnZXRfcGl4ZWxzX2MoRENURUxFTSAqYmxvY2ssIGNvbnN0IFVJTlQ4ICpwaXhlbHMsIGludCBs aW5lX3NpemUpOwp2b2lkIGRpZmZfcGl4ZWxzX2MoRENURUxFTSAqYmxvY2ssIGNvbnN0IFVJTlQ4 ICpzMSwgY29uc3QgVUlOVDggKnMyLCBpbnQgc3RyaWRlKTsKdm9pZCBwdXRfcGl4ZWxzX2NsYW1w ZWRfYyhjb25zdCBEQ1RFTEVNICpibG9jaywgVUlOVDggKnBpeGVscywgaW50IGxpbmVfc2l6ZSk7 CnZvaWQgYWRkX3BpeGVsc19jbGFtcGVkX2MoY29uc3QgRENURUxFTSAqYmxvY2ssIFVJTlQ4ICpw aXhlbHMsIGludCBsaW5lX3NpemUpOwp2b2lkIGNsZWFyX2Jsb2Nrc19jKERDVEVMRU0gKmJsb2Nr cyk7CgoKCnR5cGVkZWYgdm9pZCAoKm9wX3BpeGVsc19mdW5jKShVSU5UOCAqYmxvY2sgLCBjb25z dCBVSU5UOCAqcGl4ZWxzICwgaW50IGxpbmVfc2l6ZSwgaW50IGgpOwp0eXBlZGVmIHZvaWQgKCpx cGVsX21jX2Z1bmMpKFVJTlQ4ICpkc3QgLCBVSU5UOCAqc3JjICwgaW50IHN0cmlkZSk7CgpleHRl cm4gb3BfcGl4ZWxzX2Z1bmMgcHV0X3BpeGVsc190YWJbMl1bNF07CmV4dGVybiBvcF9waXhlbHNf ZnVuYyBhdmdfcGl4ZWxzX3RhYlsyXVs0XTsKZXh0ZXJuIG9wX3BpeGVsc19mdW5jIHB1dF9ub19y bmRfcGl4ZWxzX3RhYlsyXVs0XTsKZXh0ZXJuIG9wX3BpeGVsc19mdW5jIGF2Z19ub19ybmRfcGl4 ZWxzX3RhYlsyXVs0XTsKZXh0ZXJuIHFwZWxfbWNfZnVuYyBwdXRfcXBlbF9waXhlbHNfdGFiWzJd WzE2XTsKZXh0ZXJuIHFwZWxfbWNfZnVuYyBhdmdfcXBlbF9waXhlbHNfdGFiWzJdWzE2XTsKZXh0 ZXJuIHFwZWxfbWNfZnVuYyBwdXRfbm9fcm5kX3FwZWxfcGl4ZWxzX3RhYlsyXVsxNl07CmV4dGVy biBxcGVsX21jX2Z1bmMgYXZnX25vX3JuZF9xcGVsX3BpeGVsc190YWJbMl1bMTZdOwojIDEwMiAi ZHNwdXRpbC5oIgp0eXBlZGVmIGludCAoKm9wX3BpeGVsc19hYnNfZnVuYykoVUlOVDggKmJsazEg LCBVSU5UOCAqYmxrMiAsIGludCBsaW5lX3NpemUpOwoKZXh0ZXJuIG9wX3BpeGVsc19hYnNfZnVu YyBwaXhfYWJzMTZ4MTY7CmV4dGVybiBvcF9waXhlbHNfYWJzX2Z1bmMgcGl4X2FiczE2eDE2X3gy OwpleHRlcm4gb3BfcGl4ZWxzX2Fic19mdW5jIHBpeF9hYnMxNngxNl95MjsKZXh0ZXJuIG9wX3Bp eGVsc19hYnNfZnVuYyBwaXhfYWJzMTZ4MTZfeHkyOwpleHRlcm4gb3BfcGl4ZWxzX2Fic19mdW5j IHBpeF9hYnM4eDg7CmV4dGVybiBvcF9waXhlbHNfYWJzX2Z1bmMgcGl4X2Ficzh4OF94MjsKZXh0 ZXJuIG9wX3BpeGVsc19hYnNfZnVuYyBwaXhfYWJzOHg4X3kyOwpleHRlcm4gb3BfcGl4ZWxzX2Fi c19mdW5jIHBpeF9hYnM4eDhfeHkyOwoKaW50IHBpeF9hYnMxNngxNl9jKFVJTlQ4ICpibGsxLCBV SU5UOCAqYmxrMiwgaW50IGx4KTsKaW50IHBpeF9hYnMxNngxNl94Ml9jKFVJTlQ4ICpibGsxLCBV SU5UOCAqYmxrMiwgaW50IGx4KTsKaW50IHBpeF9hYnMxNngxNl95Ml9jKFVJTlQ4ICpibGsxLCBV SU5UOCAqYmxrMiwgaW50IGx4KTsKaW50IHBpeF9hYnMxNngxNl94eTJfYyhVSU5UOCAqYmxrMSwg VUlOVDggKmJsazIsIGludCBseCk7CgoKCgoKdm9pZCBmZl9ibG9ja19wZXJtdXRlKElOVDE2ICpi bG9jaywgVUlOVDggKnBlcm11dGF0aW9uLCBjb25zdCBVSU5UOCAqc2NhbnRhYmxlLCBpbnQgbGFz dCk7CiMgMTMyICJkc3B1dGlsLmgiCmV4dGVybiBpbnQgbW1fZmxhZ3M7CgppbnQgbW1fc3VwcG9y dCh2b2lkKTsKCnN0YXRpYyBpbmxpbmUgdm9pZCBlbW1zKHZvaWQpCnsKICAgIF9fYXNtIF9fdm9s YXRpbGUgKCJlbW1zOyI6OjoibWVtb3J5Iik7Cn0KIyAxNDkgImRzcHV0aWwuaCIKdm9pZCBkc3B1 dGlsX2luaXRfbW14KHZvaWQpOwp2b2lkIGRzcHV0aWxfc2V0X2JpdF9leGFjdF9tbXgodm9pZCk7 CiMgMjAzICJkc3B1dGlsLmgiCnN0cnVjdCB1bmFsaWduZWRfNjQgeyB1aW50NjRfdCBsOyB9IF9f YXR0cmlidXRlX18oKHBhY2tlZCkpOwpzdHJ1Y3QgdW5hbGlnbmVkXzMyIHsgdWludDMyX3QgbDsg fSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIyAyMjEgImRzcHV0aWwuaCIKdm9pZCBnZXRfcHNu cihVSU5UOCAqb3JpZ19pbWFnZVszXSwgVUlOVDggKmNvZGVkX2ltYWdlWzNdLAogICAgICAgICAg ICAgIGludCBvcmlnX2xpbmVzaXplWzNdLCBpbnQgY29kZWRfbGluZXNpemUsCiAgICAgICAgICAg ICAgQVZDb2RlY0NvbnRleHQgKmF2Y3R4KTsKCgoKCgp0eXBlZGVmIGZsb2F0IEZGVFNhbXBsZTsK CnR5cGVkZWYgc3RydWN0IEZGVENvbXBsZXggewogICAgRkZUU2FtcGxlIHJlLCBpbTsKfSBGRlRD b21wbGV4OwoKdHlwZWRlZiBzdHJ1Y3QgRkZUQ29udGV4dCB7CiAgICBpbnQgbmJpdHM7CiAgICBp bnQgaW52ZXJzZTsKICAgIHVpbnQxNl90ICpyZXZ0YWI7CiAgICBGRlRDb21wbGV4ICpleHB0YWI7 CiAgICBGRlRDb21wbGV4ICpleHB0YWIxOwogICAgdm9pZCAoKmZmdF9jYWxjKShzdHJ1Y3QgRkZU Q29udGV4dCAqcywgRkZUQ29tcGxleCAqeik7Cn0gRkZUQ29udGV4dDsKCmludCBmZnRfaW5pdChG RlRDb250ZXh0ICpzLCBpbnQgbmJpdHMsIGludCBpbnZlcnNlKTsKdm9pZCBmZnRfcGVybXV0ZShG RlRDb250ZXh0ICpzLCBGRlRDb21wbGV4ICp6KTsKdm9pZCBmZnRfY2FsY19jKEZGVENvbnRleHQg KnMsIEZGVENvbXBsZXggKnopOwp2b2lkIGZmdF9jYWxjX3NzZShGRlRDb250ZXh0ICpzLCBGRlRD b21wbGV4ICp6KTsKc3RhdGljIGlubGluZSB2b2lkIGZmdF9jYWxjKEZGVENvbnRleHQgKnMsIEZG VENvbXBsZXggKnopCnsKICAgIHMtPmZmdF9jYWxjKHMsIHopOwp9CnZvaWQgZmZ0X2VuZChGRlRD b250ZXh0ICpzKTsKCgoKdHlwZWRlZiBzdHJ1Y3QgTURDVENvbnRleHQgewogICAgaW50IG47CiAg ICBpbnQgbmJpdHM7CgogICAgRkZUU2FtcGxlICp0Y29zOwogICAgRkZUU2FtcGxlICp0c2luOwog ICAgRkZUQ29udGV4dCBmZnQ7Cn0gTURDVENvbnRleHQ7CgppbnQgZmZfbWRjdF9pbml0KE1EQ1RD b250ZXh0ICpzLCBpbnQgbmJpdHMsIGludCBpbnZlcnNlKTsKdm9pZCBmZl9pbWRjdF9jYWxjKE1E Q1RDb250ZXh0ICpzLCBGRlRTYW1wbGUgKm91dHB1dCwKICAgICAgICAgICAgICAgIGNvbnN0IEZG VFNhbXBsZSAqaW5wdXQsIEZGVFNhbXBsZSAqdG1wKTsKdm9pZCBmZl9tZGN0X2NhbGMoTURDVENv bnRleHQgKnMsIEZGVFNhbXBsZSAqb3V0LAogICAgICAgICAgICAgICBjb25zdCBGRlRTYW1wbGUg KmlucHV0LCBGRlRTYW1wbGUgKnRtcCk7CnZvaWQgZmZfbWRjdF9lbmQoTURDVENvbnRleHQgKnMp OwoKCgoKCnN0YXRpYyBpbmxpbmUgbG9uZyBpbnQgbHJpbnRmKGZsb2F0IHgpCnsKICAgIHJldHVy biAoaW50KShyaW50KHgpKTsKfQojIDIxICJ1dGlscy5jIiAyCiMgMSAibXBlZ3ZpZGVvLmgiIDEK IyAyNSAibXBlZ3ZpZGVvLmgiCmVudW0gT3V0cHV0Rm9ybWF0IHsKICAgIEZNVF9NUEVHMSwKICAg IEZNVF9IMjYzLAogICAgRk1UX01KUEVHLAp9OwojIDQ4ICJtcGVndmlkZW8uaCIKdHlwZWRlZiBz dHJ1Y3QgUHJlZGljdG9yewogICAgZG91YmxlIGNvZWZmOwogICAgZG91YmxlIGNvdW50OwogICAg ZG91YmxlIGRlY2F5Owp9IFByZWRpY3RvcjsKCnR5cGVkZWYgc3RydWN0IFJhdGVDb250cm9sRW50 cnl7CiAgICBpbnQgcGljdF90eXBlOwogICAgZmxvYXQgcXNjYWxlOwogICAgaW50IG12X2JpdHM7 CiAgICBpbnQgaV90ZXhfYml0czsKICAgIGludCBwX3RleF9iaXRzOwogICAgaW50IG1pc2NfYml0 czsKICAgIFVJTlQ2NCBleHBlY3RlZF9iaXRzOwogICAgaW50IG5ld19waWN0X3R5cGU7CiAgICBm bG9hdCBuZXdfcXNjYWxlOwogICAgaW50IG1jX21iX3Zhcl9zdW07CiAgICBpbnQgbWJfdmFyX3N1 bTsKICAgIGludCBpX2NvdW50OwogICAgaW50IGZfY29kZTsKICAgIGludCBiX2NvZGU7Cn1SYXRl Q29udHJvbEVudHJ5OwoKdHlwZWRlZiBzdHJ1Y3QgUmF0ZUNvbnRyb2xDb250ZXh0ewogICAgRklM RSAqc3RhdHNfZmlsZTsKICAgIGludCBudW1fZW50cmllczsKICAgIFJhdGVDb250cm9sRW50cnkg KmVudHJ5OwogICAgaW50IGJ1ZmZlcl9pbmRleDsKICAgIFByZWRpY3RvciBwcmVkWzVdOwogICAg ZG91YmxlIHNob3J0X3Rlcm1fcXN1bTsKICAgIGRvdWJsZSBzaG9ydF90ZXJtX3Fjb3VudDsKICAg IGRvdWJsZSBwYXNzMV9yY19lcV9vdXRwdXRfc3VtOwogICAgZG91YmxlIHBhc3MxX3dhbnRlZF9i aXRzOwogICAgZG91YmxlIGxhc3RfcXNjYWxlOwogICAgZG91YmxlIGxhc3RfcXNjYWxlX2Zvcls1 XTsKICAgIGludCBsYXN0X21jX21iX3Zhcl9zdW07CiAgICBpbnQgbGFzdF9tYl92YXJfc3VtOwog ICAgVUlOVDY0IGlfY3BseF9zdW1bNV07CiAgICBVSU5UNjQgcF9jcGx4X3N1bVs1XTsKICAgIFVJ TlQ2NCBtdl9iaXRzX3N1bVs1XTsKICAgIFVJTlQ2NCBxc2NhbGVfc3VtWzVdOwogICAgaW50IGZy YW1lX2NvdW50WzVdOwogICAgaW50IGxhc3Rfbm9uX2JfcGljdF90eXBlOwp9UmF0ZUNvbnRyb2xD b250ZXh0OwoKdHlwZWRlZiBzdHJ1Y3QgUmVvcmRlckJ1ZmZlcnsKICAgIFVJTlQ4ICpwaWN0dXJl WzNdOwogICAgaW50IHBpY3RfdHlwZTsKICAgIGludCBxc2NhbGU7CiAgICBpbnQgZm9yY2VfdHlw ZTsKICAgIGludCBwaWN0dXJlX251bWJlcjsKICAgIGludCBwaWN0dXJlX2luX2dvcF9udW1iZXI7 Cn0gUmVvcmRlckJ1ZmZlcjsKCnR5cGVkZWYgc3RydWN0IFNjYW5UYWJsZXsKICAgIGNvbnN0IFVJ TlQ4ICpzY2FudGFibGU7CiAgICBVSU5UOCBwZXJtdXRhdGVkWzY0XTsKICAgIFVJTlQ4IHJhc3Rl cl9lbmRbNjRdOwoKCgoKfSBTY2FuVGFibGU7Cgp0eXBlZGVmIHN0cnVjdCBQYXJzZUNvbnRleHR7 CiAgICBVSU5UOCAqYnVmZmVyOwogICAgaW50IGluZGV4OwogICAgaW50IGxhc3RfaW5kZXg7CiAg ICBpbnQgYnVmZmVyX3NpemU7CiAgICBpbnQgc3RhdGU7CiAgICBpbnQgZnJhbWVfc3RhcnRfZm91 bmQ7Cn0gUGFyc2VDb250ZXh0OwoKdHlwZWRlZiBzdHJ1Y3QgTXBlZ0VuY0NvbnRleHQgewogICAg c3RydWN0IEFWQ29kZWNDb250ZXh0ICphdmN0eDsKCiAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAg IGludCBnb3Bfc2l6ZTsKICAgIGludCBmcmFtZV9yYXRlOwogICAgaW50IGludHJhX29ubHk7CiAg ICBpbnQgYml0X3JhdGU7CiAgICBpbnQgYml0X3JhdGVfdG9sZXJhbmNlOwogICAgZW51bSBPdXRw dXRGb3JtYXQgb3V0X2Zvcm1hdDsKICAgIGludCBoMjYzX3ByZWQ7CgoKICAgIGludCBoMjYzX3Bs dXM7CiAgICBpbnQgaDI2M19ydjEwOwogICAgaW50IGgyNjNfbXNtcGVnNDsKICAgIGludCBoMjYz X2ludGVsOwoKICAgIGludCBjb2RlY19pZDsKICAgIGludCBmaXhlZF9xc2NhbGU7CiAgICBmbG9h dCBxY29tcHJlc3M7CiAgICBmbG9hdCBxYmx1cjsKICAgIGludCBxbWluOwogICAgaW50IHFtYXg7 CiAgICBpbnQgbWF4X3FkaWZmOwogICAgaW50IGVuY29kaW5nOwogICAgaW50IGZsYWdzOwogICAg aW50IGZvcmNlX2lucHV0X3R5cGU7CiAgICBpbnQgbWF4X2JfZnJhbWVzOwogICAgaW50IGJfZnJh bWVfc3RyYXRlZ3k7CiAgICBpbnQgbHVtYV9lbGltX3RocmVzaG9sZDsKICAgIGludCBjaHJvbWFf ZWxpbV90aHJlc2hvbGQ7CiAgICBpbnQgc3RyaWN0X3N0ZF9jb21wbGlhbmNlOwogICAgaW50IHdv cmthcm91bmRfYnVnczsKCgoKICAgIFB1dEJpdENvbnRleHQgcGI7CgoKICAgIGludCBjb250ZXh0 X2luaXRpYWxpemVkOwogICAgaW50IGlucHV0X3BpY3R1cmVfbnVtYmVyOwogICAgaW50IGlucHV0 X3BpY3R1cmVfaW5fZ29wX251bWJlcjsKICAgIGludCBwaWN0dXJlX251bWJlcjsKICAgIGludCBm YWtlX3BpY3R1cmVfbnVtYmVyOwogICAgaW50IGdvcF9waWN0dXJlX251bWJlcjsKICAgIGludCBw aWN0dXJlX2luX2dvcF9udW1iZXI7CiAgICBpbnQgYl9mcmFtZXNfc2luY2Vfbm9uX2I7CiAgICBp bnQgbWJfd2lkdGgsIG1iX2hlaWdodDsKICAgIGludCBoX2VkZ2VfcG9zLCB2X2VkZ2VfcG9zOwog ICAgaW50IG1iX251bTsKICAgIGludCBsaW5lc2l6ZTsKICAgIGludCB1dmxpbmVzaXplOwogICAg VUlOVDggKm5ld19waWN0dXJlWzNdOwogICAgVUlOVDggKnBpY3R1cmVfYnVmZmVyWyg0ICsyKV1b M107CiAgICBpbnQgcGljdHVyZV9idWZmZXJfaW5kZXg7CiAgICBSZW9yZGVyQnVmZmVyIGNvZGVk X29yZGVyWyg0ICsyKV07CiAgICBVSU5UOCAqbGFzdF9waWN0dXJlWzNdOwogICAgVUlOVDggKmxh c3RfcGljdHVyZV9iYXNlWzNdOwogICAgVUlOVDggKm5leHRfcGljdHVyZVszXTsKICAgIFVJTlQ4 ICpuZXh0X3BpY3R1cmVfYmFzZVszXTsKICAgIFVJTlQ4ICphdXhfcGljdHVyZVszXTsKICAgIFVJ TlQ4ICphdXhfcGljdHVyZV9iYXNlWzNdOwogICAgVUlOVDggKmN1cnJlbnRfcGljdHVyZVszXTsK ICAgIHZvaWQgKmxhc3RfZHJfb3BhcXVlOwogICAgdm9pZCAqbmV4dF9kcl9vcGFxdWU7CiAgICBp bnQgaXBfYnVmZmVyX2NvdW50OwogICAgaW50IG51bV9hdmFpbGFibGVfYnVmZmVyczsKICAgIGlu dCBsYXN0X2RjWzNdOwogICAgSU5UMTYgKmRjX3ZhbFszXTsKICAgIGludCB5X2RjX3NjYWxlLCBj X2RjX3NjYWxlOwogICAgVUlOVDggKnlfZGNfc2NhbGVfdGFibGU7CiAgICBVSU5UOCAqY19kY19z Y2FsZV90YWJsZTsKICAgIFVJTlQ4ICpjb2RlZF9ibG9jazsKICAgIElOVDE2ICgqYWNfdmFsWzNd KVsxNl07CiAgICBpbnQgYWNfcHJlZDsKICAgIGludCBtYl9za2lwZWQ7CiAgICBVSU5UOCAqbWJz a2lwX3RhYmxlOwoKICAgIFVJTlQ4ICptYmludHJhX3RhYmxlOwogICAgVUlOVDggKmNicF90YWJs ZTsKICAgIFVJTlQ4ICpwcmVkX2Rpcl90YWJsZTsKICAgIElOVDggKnFzY2FsZV90YWJsZTsKICAg IElOVDggKmF1eF9xc2NhbGVfdGFibGU7CiAgICBJTlQ4ICpuZXh0X3FzY2FsZV90YWJsZTsKICAg IElOVDggKmxhc3RfcXNjYWxlX3RhYmxlOwogICAgVUlOVDggKmVkZ2VfZW11X2J1ZmZlcjsKCiAg ICBpbnQgaW5wdXRfcXNjYWxlOwogICAgaW50IGlucHV0X3BpY3RfdHlwZTsKICAgIGludCBmb3Jj ZV90eXBlOwogICAgaW50IHFzY2FsZTsKICAgIGZsb2F0IGZyYW1lX3FzY2FsZTsKICAgIGludCBh ZGFwdGl2ZV9xdWFudDsKICAgIGludCBkcXVhbnQ7CiAgICBpbnQgcGljdF90eXBlOwogICAgaW50 IGxhc3RfcGljdF90eXBlOwogICAgaW50IGxhc3Rfbm9uX2JfcGljdF90eXBlOwogICAgaW50IGZy YW1lX3JhdGVfaW5kZXg7CgogICAgaW50IHVucmVzdHJpY3RlZF9tdjsKICAgIGludCBoMjYzX2xv bmdfdmVjdG9yczsKCiAgICBpbnQgZl9jb2RlOwogICAgaW50IGJfY29kZTsKICAgIElOVDE2ICgq bW90aW9uX3ZhbClbMl07CiAgICBJTlQxNiAoKnBfbXZfdGFibGUpWzJdOwogICAgSU5UMTYgKCpi X2ZvcndfbXZfdGFibGUpWzJdOwogICAgSU5UMTYgKCpiX2JhY2tfbXZfdGFibGUpWzJdOwogICAg SU5UMTYgKCpiX2JpZGlyX2ZvcndfbXZfdGFibGUpWzJdOwogICAgSU5UMTYgKCpiX2JpZGlyX2Jh Y2tfbXZfdGFibGUpWzJdOwogICAgSU5UMTYgKCpiX2RpcmVjdF9mb3J3X212X3RhYmxlKVsyXTsK ICAgIElOVDE2ICgqYl9kaXJlY3RfYmFja19tdl90YWJsZSlbMl07CiAgICBJTlQxNiAoKmJfZGly ZWN0X212X3RhYmxlKVsyXTsKICAgIGludCBtZV9tZXRob2Q7CiAgICB1aW50OF90ICptZV9zY3Jh dGNocGFkOwogICAgdWludDMyX3QgKm1lX21hcDsKICAgIHVpbnQxNl90ICptZV9zY29yZV9tYXA7 CiAgICBpbnQgbWVfbWFwX2dlbmVyYXRpb247CiAgICBpbnQgc2tpcF9tZTsKICAgIGludCBzY2Vu ZV9jaGFuZ2Vfc2NvcmU7CiAgICBpbnQgbXZfZGlyOwoKCgogICAgaW50IG12X3R5cGU7CiMgMjU3 ICJtcGVndmlkZW8uaCIKICAgIGludCBtdlsyXVs0XVsyXTsKICAgIGludCBmaWVsZF9zZWxlY3Rb Ml1bMl07CiAgICBpbnQgbGFzdF9tdlsyXVsyXVsyXTsKICAgIFVJTlQxNiAoKm12X3BlbmFsdHkp WzIwNDgqMisxXTsKICAgIFVJTlQ4ICpmY29kZV90YWI7CgogICAgaW50IGhhc19iX2ZyYW1lczsK ICAgIGludCBub19yb3VuZGluZzsKCgogICAgaW50IGh1cnJ5X3VwOwoKCgogICAgaW50IG1iX3gs IG1iX3k7CiAgICBpbnQgbWJfaW5jcjsKICAgIGludCBtYl9pbnRyYTsKICAgIFVJTlQxNiAqbWJf dmFyOwogICAgVUlOVDE2ICptY19tYl92YXI7CiAgICBVSU5UOCAqbWJfbWVhbjsKICAgIFVJTlQ4 ICptYl90eXBlOwojIDI4OSAibXBlZ3ZpZGVvLmgiCiAgICBpbnQgYmxvY2tfaW5kZXhbNl07CiAg ICBpbnQgYmxvY2tfd3JhcFs2XTsKCgogICAgVUlOVDE2IGludHJhX21hdHJpeFs2NF07CiAgICBV SU5UMTYgY2hyb21hX2ludHJhX21hdHJpeFs2NF07CiAgICBVSU5UMTYgaW50ZXJfbWF0cml4WzY0 XTsKICAgIFVJTlQxNiBjaHJvbWFfaW50ZXJfbWF0cml4WzY0XTsKCiAgICBpbnQgaW50cmFfcXVh bnRfYmlhczsKICAgIGludCBpbnRlcl9xdWFudF9iaWFzOwogICAgaW50IG1pbl9xY29lZmY7CiAg ICBpbnQgbWF4X3Fjb2VmZjsKCiAgICBpbnQgX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKDgpKSkg cV9pbnRyYV9tYXRyaXhbMzJdWzY0XTsKICAgIGludCBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAo OCkpKSBxX2ludGVyX21hdHJpeFszMl1bNjRdOwoKICAgIFVJTlQxNiBfX2F0dHJpYnV0ZV9fICgo YWxpZ25lZCAoOCkpKSBxX2ludHJhX21hdHJpeDE2WzMyXVs2NF07CiAgICBVSU5UMTYgX19hdHRy aWJ1dGVfXyAoKGFsaWduZWQgKDgpKSkgcV9pbnRlcl9tYXRyaXgxNlszMl1bNjRdOwogICAgVUlO VDE2IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg4KSkpIHFfaW50cmFfbWF0cml4MTZfYmlhc1sz Ml1bNjRdOwogICAgVUlOVDE2IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg4KSkpIHFfaW50ZXJf bWF0cml4MTZfYmlhc1szMl1bNjRdOwogICAgaW50IGJsb2NrX2xhc3RfaW5kZXhbNl07CgogICAg U2NhblRhYmxlIF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg4KSkpIGludHJhX3NjYW50YWJsZTsK ICAgIFNjYW5UYWJsZSBpbnRyYV9oX3NjYW50YWJsZTsKICAgIFNjYW5UYWJsZSBpbnRyYV92X3Nj YW50YWJsZTsKICAgIFNjYW5UYWJsZSBpbnRlcl9zY2FudGFibGU7CiAgICBVSU5UOCBpZGN0X3Bl cm11dGF0aW9uWzY0XTsKICAgIGludCBpZGN0X3Blcm11dGF0aW9uX3R5cGU7CgoKCgoKICAgIHZv aWQgKm9wYXF1ZTsKCgogICAgaW50IElfZnJhbWVfYml0czsKICAgIGludCBtYl92YXJfc3VtOwog ICAgaW50IG1jX21iX3Zhcl9zdW07CiAgICBJTlQ2NCB3YW50ZWRfYml0czsKICAgIElOVDY0IHRv dGFsX2JpdHM7CiAgICBpbnQgZnJhbWVfYml0czsKICAgIFJhdGVDb250cm9sQ29udGV4dCByY19j b250ZXh0OwoKCiAgICBpbnQgbXZfYml0czsKICAgIGludCBoZWFkZXJfYml0czsKICAgIGludCBp X3RleF9iaXRzOwogICAgaW50IHBfdGV4X2JpdHM7CiAgICBpbnQgaV9jb3VudDsKICAgIGludCBm X2NvdW50OwogICAgaW50IGJfY291bnQ7CiAgICBpbnQgc2tpcF9jb3VudDsKICAgIGludCBtaXNj X2JpdHM7CiAgICBpbnQgbGFzdF9iaXRzOwoKCiAgICBVSU5UOCAqZXJyb3Jfc3RhdHVzX3RhYmxl OwojIDM1NyAibXBlZ3ZpZGVvLmgiCiAgICBpbnQgcmVzeW5jX21iX3g7CiAgICBpbnQgcmVzeW5j X21iX3k7CiAgICBHZXRCaXRDb250ZXh0IGxhc3RfcmVzeW5jX2diOwogICAgaW50IG1iX251bV9s ZWZ0OwogICAgaW50IG5leHRfcF9mcmFtZV9kYW1hZ2VkOwogICAgaW50IGVycm9yX3Jlc2lsaWVu Y2U7CgogICAgUGFyc2VDb250ZXh0IHBhcnNlX2NvbnRleHQ7CgoKICAgIGludCBnb2JfbnVtYmVy OwogICAgaW50IGdvYl9pbmRleDsKCgogICAgaW50IHVtdnBsdXM7CiAgICBpbnQgdW12cGx1c19k ZWM7CiAgICBpbnQgaDI2M19haWM7CiAgICBpbnQgaDI2M19haWNfZGlyOwoKCiAgICBpbnQgdGlt ZV9pbmNyZW1lbnRfcmVzb2x1dGlvbjsKICAgIGludCB0aW1lX2luY3JlbWVudF9iaXRzOwogICAg aW50IGxhc3RfdGltZV9iYXNlOwogICAgaW50IHRpbWVfYmFzZTsKICAgIElOVDY0IHRpbWU7CiAg ICBJTlQ2NCBsYXN0X25vbl9iX3RpbWU7CiAgICBVSU5UMTYgcHBfdGltZTsKICAgIFVJTlQxNiBw Yl90aW1lOwogICAgVUlOVDE2IHBwX2ZpZWxkX3RpbWU7CiAgICBVSU5UMTYgcGJfZmllbGRfdGlt ZTsKICAgIGludCBzaGFwZTsKICAgIGludCB2b2xfc3ByaXRlX3VzYWdlOwogICAgaW50IHNwcml0 ZV93aWR0aDsKICAgIGludCBzcHJpdGVfaGVpZ2h0OwogICAgaW50IHNwcml0ZV9sZWZ0OwogICAg aW50IHNwcml0ZV90b3A7CiAgICBpbnQgc3ByaXRlX2JyaWdodG5lc3NfY2hhbmdlOwogICAgaW50 IG51bV9zcHJpdGVfd2FycGluZ19wb2ludHM7CiAgICBpbnQgcmVhbF9zcHJpdGVfd2FycGluZ19w b2ludHM7CiAgICBpbnQgc3ByaXRlX29mZnNldFsyXVsyXTsKICAgIGludCBzcHJpdGVfZGVsdGFb Ml1bMl07CiAgICBpbnQgc3ByaXRlX3NoaWZ0WzJdOwogICAgaW50IG1jc2VsOwogICAgaW50IHF1 YW50X3ByZWNpc2lvbjsKICAgIGludCBxdWFydGVyX3NhbXBsZTsKICAgIGludCBzY2FsYWJpbGl0 eTsKICAgIGludCBoaWVyYWNoeV90eXBlOwogICAgaW50IGVuaGFuY2VtZW50X3R5cGU7CiAgICBp bnQgbmV3X3ByZWQ7CiAgICBpbnQgcmVkdWNlZF9yZXNfdm9wOwogICAgaW50IGFzcGVjdF9yYXRp b19pbmZvOwogICAgaW50IGFzcGVjdGVkX3dpZHRoOwogICAgaW50IGFzcGVjdGVkX2hlaWdodDsK ICAgIGludCBzcHJpdGVfd2FycGluZ19hY2N1cmFjeTsKICAgIGludCBsb3dfbGF0ZW5jeV9zcHJp dGU7CiAgICBpbnQgZGF0YV9wYXJ0aXRpb25pbmc7CiAgICBpbnQgcGFydGl0aW9uZWRfZnJhbWU7 CiAgICBpbnQgcnZsYzsKICAgIGludCByZXN5bmNfbWFya2VyOwogICAgaW50IGxvd19kZWxheTsK ICAgIGludCB2b190eXBlOwogICAgaW50IHZvbF9jb250cm9sX3BhcmFtZXRlcnM7CiAgICBQdXRC aXRDb250ZXh0IHRleF9wYjsKICAgIFB1dEJpdENvbnRleHQgcGIyOwoKICAgIHVpbnQ4X3QgKnRl eF9wYl9idWZmZXI7CiAgICB1aW50OF90ICpwYjJfYnVmZmVyOwogICAgaW50IG1wZWdfcXVhbnQ7 CgoKICAgIElOVDggKmNvX2xvY2F0ZWRfdHlwZV90YWJsZTsKICAgIElOVDE2ICgqZmllbGRfbXZf dGFibGUpWzJdWzJdOwogICAgSU5UOCAoKmZpZWxkX3NlbGVjdF90YWJsZSlbMl07CiAgICBpbnQg dF9mcmFtZTsKICAgIGludCBwYWRkaW5nX2J1Z19zY29yZTsKCgogICAgaW50IGRpdnhfdmVyc2lv bjsKICAgIGludCBkaXZ4X2J1aWxkOwoKICAgIFVJTlQ4ICpiaXRzdHJlYW1fYnVmZmVyOwogICAg aW50IGJpdHN0cmVhbV9idWZmZXJfc2l6ZTsKCiAgICBpbnQgeHZpZF9idWlsZDsKCgogICAgaW50 IGZmbXBlZ192ZXJzaW9uOwogICAgaW50IGxhdmNfYnVpbGQ7CgoKICAgIGludCBydjEwX3ZlcnNp b247CiAgICBpbnQgcnYxMF9maXJzdF9kY19jb2RlZFszXTsKCgogICAgc3RydWN0IE1KcGVnQ29u dGV4dCAqbWpwZWdfY3R4OwogICAgaW50IG1qcGVnX3ZzYW1wbGVbM107CiAgICBpbnQgbWpwZWdf aHNhbXBsZVszXTsKICAgIGludCBtanBlZ193cml0ZV90YWJsZXM7CgogICAgaW50IG1qcGVnX2Rh dGFfb25seV9mcmFtZXM7CgoKICAgIGludCBtdl90YWJsZV9pbmRleDsKICAgIGludCBybF90YWJs ZV9pbmRleDsKICAgIGludCBybF9jaHJvbWFfdGFibGVfaW5kZXg7CiAgICBpbnQgZGNfdGFibGVf aW5kZXg7CiAgICBpbnQgdXNlX3NraXBfbWJfY29kZTsKICAgIGludCBzbGljZV9oZWlnaHQ7CiAg ICBpbnQgZmlyc3Rfc2xpY2VfbGluZTsKICAgIGludCBmbGlwZmxvcF9yb3VuZGluZzsKICAgIGlu dCBtc21wZWc0X3ZlcnNpb247CiAgICBpbnQgcGVyX21iX3JsX3RhYmxlOwogICAgaW50IGVzYzNf bGV2ZWxfbGVuZ3RoOwogICAgaW50IGVzYzNfcnVuX2xlbmd0aDsKCiAgICBpbnQgKCphY19zdGF0 cylbMl1bNjQgKzFdWzY0ICsxXVsyXTsKICAgIGludCBpbnRlcl9pbnRyYV9wcmVkOwoKCiAgICBH ZXRCaXRDb250ZXh0IGdiOwoKCiAgICBpbnQgcHJvZ3Jlc3NpdmVfc2VxdWVuY2U7CiAgICBpbnQg bXBlZ19mX2NvZGVbMl1bMl07CiAgICBpbnQgcGljdHVyZV9zdHJ1Y3R1cmU7CgoKCgoKICAgIGlu dCBpbnRyYV9kY19wcmVjaXNpb247CiAgICBpbnQgZnJhbWVfcHJlZF9mcmFtZV9kY3Q7CiAgICBp bnQgdG9wX2ZpZWxkX2ZpcnN0OwogICAgaW50IGNvbmNlYWxtZW50X21vdGlvbl92ZWN0b3JzOwog ICAgaW50IHFfc2NhbGVfdHlwZTsKICAgIGludCBpbnRyYV92bGNfZm9ybWF0OwogICAgaW50IGFs dGVybmF0ZV9zY2FuOwogICAgaW50IHJlcGVhdF9maXJzdF9maWVsZDsKICAgIGludCBjaHJvbWFf NDIwX3R5cGU7CiAgICBpbnQgcHJvZ3Jlc3NpdmVfZnJhbWU7CiAgICBpbnQgbXBlZzI7CiAgICBp bnQgZnVsbF9wZWxbMl07CiAgICBpbnQgaW50ZXJsYWNlZF9kY3Q7CiAgICBpbnQgbGFzdF9xc2Nh bGU7CiAgICBpbnQgZmlyc3Rfc2xpY2U7CgoKCiAgICBpbnQgcnRwX21vZGU7CiAgICBpbnQgcnRw X3BheWxvYWRfc2l6ZTsKICAgIHZvaWQgKCpydHBfY2FsbGJhY2spKHZvaWQgKmRhdGEsIGludCBz aXplLCBpbnQgcGFja2V0X251bWJlcik7CiAgICBVSU5UOCAqcHRyX2xhc3Rnb2I7CiAgICBVSU5U OCAqcHRyX2xhc3RfbWJfbGluZTsKICAgIFVJTlQzMiBtYl9saW5lX2F2Z3NpemU7CgogICAgRENU RUxFTSAoKmJsb2NrKVs2NF07CiAgICBEQ1RFTEVNIGJsb2Nrc1syXVs2XVs2NF0gX19hdHRyaWJ1 dGVfXyAoKGFsaWduZWQgKDgpKSk7CiAgICBpbnQgKCpkZWNvZGVfbWIpKHN0cnVjdCBNcGVnRW5j Q29udGV4dCAqcywgRENURUxFTSBibG9ja1s2XVs2NF0pOwoKCgoKCiAgICB2b2lkICgqZGN0X3Vu cXVhbnRpemVfbXBlZzEpKHN0cnVjdCBNcGVnRW5jQ29udGV4dCAqcywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgRENURUxFTSAqYmxvY2ssIGludCBuLCBpbnQgcXNjYWxlKTsKICAgIHZvaWQg KCpkY3RfdW5xdWFudGl6ZV9tcGVnMikoc3RydWN0IE1wZWdFbmNDb250ZXh0ICpzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICpibG9jaywgaW50IG4sIGludCBxc2NhbGUpOwog ICAgdm9pZCAoKmRjdF91bnF1YW50aXplX2gyNjMpKHN0cnVjdCBNcGVnRW5jQ29udGV4dCAqcywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgRENURUxFTSAqYmxvY2ssIGludCBuLCBpbnQgcXNj YWxlKTsKICAgIHZvaWQgKCpkY3RfdW5xdWFudGl6ZSkoc3RydWN0IE1wZWdFbmNDb250ZXh0ICpz LAogICAgICAgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICpibG9jaywgaW50IG4sIGludCBx c2NhbGUpOwogICAgaW50ICgqZGN0X3F1YW50aXplKShzdHJ1Y3QgTXBlZ0VuY0NvbnRleHQgKnMs IERDVEVMRU0gKmJsb2NrLCBpbnQgbiwgaW50IHFzY2FsZSwgaW50ICpvdmVyZmxvdyk7CiAgICB2 b2lkICgqZmRjdCkoRENURUxFTSAqYmxvY2sgKTsKICAgIHZvaWQgKCppZGN0X3B1dCkoVUlOVDgg KmRlc3QgLCBpbnQgbGluZV9zaXplLCBEQ1RFTEVNICpibG9jayApOwogICAgdm9pZCAoKmlkY3Rf YWRkKShVSU5UOCAqZGVzdCAsIGludCBsaW5lX3NpemUsIERDVEVMRU0gKmJsb2NrICk7Cn0gTXBl Z0VuY0NvbnRleHQ7CgoKaW50IERDVF9jb21tb25faW5pdChNcGVnRW5jQ29udGV4dCAqcyk7Cmlu dCBNUFZfY29tbW9uX2luaXQoTXBlZ0VuY0NvbnRleHQgKnMpOwp2b2lkIE1QVl9jb21tb25fZW5k KE1wZWdFbmNDb250ZXh0ICpzKTsKdm9pZCBNUFZfZGVjb2RlX21iKE1wZWdFbmNDb250ZXh0ICpz LCBEQ1RFTEVNIGJsb2NrWzZdWzY0XSk7CmludCBNUFZfZnJhbWVfc3RhcnQoTXBlZ0VuY0NvbnRl eHQgKnMsIEFWQ29kZWNDb250ZXh0ICphdmN0eCk7CnZvaWQgTVBWX2ZyYW1lX2VuZChNcGVnRW5j Q29udGV4dCAqcyk7Cgp2b2lkIE1QVl9jb21tb25faW5pdF9tbXgoTXBlZ0VuY0NvbnRleHQgKnMp OwojIDU1NiAibXBlZ3ZpZGVvLmgiCmV4dGVybiB2b2lkICgqZHJhd19lZGdlcykoVUlOVDggKmJ1 ZiwgaW50IHdyYXAsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHcpOwp2b2lkIGZmX2NvbmNl YWxfcGFzdF9lcnJvcnMoTXBlZ0VuY0NvbnRleHQgKnMsIGludCBjb25jZWFsX2FsbCk7CnZvaWQg ZmZfY29weV9iaXRzKFB1dEJpdENvbnRleHQgKnBiLCBVSU5UOCAqc3JjLCBpbnQgbGVuZ3RoKTsK dm9pZCBmZl9jbGVhbl9pbnRyYV90YWJsZV9lbnRyaWVzKE1wZWdFbmNDb250ZXh0ICpzKTsKdm9p ZCBmZl9pbml0X3NjYW50YWJsZShNcGVnRW5jQ29udGV4dCAqcywgU2NhblRhYmxlICpzdCwgY29u c3QgVUlOVDggKnNyY19zY2FudGFibGUpOwp2b2lkIGZmX2Vycm9yX3Jlc2lsaWVuY2UoTXBlZ0Vu Y0NvbnRleHQgKnMpOwp2b2lkIGZmX2RyYXdfaG9yaXpfYmFuZChNcGVnRW5jQ29udGV4dCAqcyk7 CgpleHRlcm4gaW50IGZmX2JpdF9leGFjdDsKCnN0YXRpYyBpbmxpbmUgdm9pZCBmZl9pbml0X2Js b2NrX2luZGV4KE1wZWdFbmNDb250ZXh0ICpzKXsKICAgIHMtPmJsb2NrX2luZGV4WzBdPSBzLT5i bG9ja193cmFwWzBdKihzLT5tYl95KjIgKyAxKSAtIDEgKyBzLT5tYl94KjI7CiAgICBzLT5ibG9j a19pbmRleFsxXT0gcy0+YmxvY2tfd3JhcFswXSoocy0+bWJfeSoyICsgMSkgKyBzLT5tYl94KjI7 CiAgICBzLT5ibG9ja19pbmRleFsyXT0gcy0+YmxvY2tfd3JhcFswXSoocy0+bWJfeSoyICsgMikg LSAxICsgcy0+bWJfeCoyOwogICAgcy0+YmxvY2tfaW5kZXhbM109IHMtPmJsb2NrX3dyYXBbMF0q KHMtPm1iX3kqMiArIDIpICsgcy0+bWJfeCoyOwogICAgcy0+YmxvY2tfaW5kZXhbNF09IHMtPmJs b2NrX3dyYXBbNF0qKHMtPm1iX3kgKyAxKSArIHMtPmJsb2NrX3dyYXBbMF0qKHMtPm1iX2hlaWdo dCoyICsgMikgKyBzLT5tYl94OwogICAgcy0+YmxvY2tfaW5kZXhbNV09IHMtPmJsb2NrX3dyYXBb NF0qKHMtPm1iX3kgKyAxICsgcy0+bWJfaGVpZ2h0ICsgMikgKyBzLT5ibG9ja193cmFwWzBdKihz LT5tYl9oZWlnaHQqMiArIDIpICsgcy0+bWJfeDsKfQoKc3RhdGljIGlubGluZSB2b2lkIGZmX3Vw ZGF0ZV9ibG9ja19pbmRleChNcGVnRW5jQ29udGV4dCAqcyl7CiAgICBzLT5ibG9ja19pbmRleFsw XSs9MjsKICAgIHMtPmJsb2NrX2luZGV4WzFdKz0yOwogICAgcy0+YmxvY2tfaW5kZXhbMl0rPTI7 CiAgICBzLT5ibG9ja19pbmRleFszXSs9MjsKICAgIHMtPmJsb2NrX2luZGV4WzRdKys7CiAgICBz LT5ibG9ja19pbmRleFs1XSsrOwp9CgoKCnZvaWQgZmZfZXN0aW1hdGVfcF9mcmFtZV9tb3Rpb24o TXBlZ0VuY0NvbnRleHQgKiBzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYl94 LCBpbnQgbWJfeSk7CnZvaWQgZmZfZXN0aW1hdGVfYl9mcmFtZV9tb3Rpb24oTXBlZ0VuY0NvbnRl eHQgKiBzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYl94LCBpbnQgbWJfeSk7 CmludCBmZl9nZXRfYmVzdF9mY29kZShNcGVnRW5jQ29udGV4dCAqIHMsIGludDE2X3QgKCptdl90 YWJsZSlbMl0sIGludCB0eXBlKTsKdm9pZCBmZl9maXhfbG9uZ19wX212cyhNcGVnRW5jQ29udGV4 dCAqIHMpOwp2b2lkIGZmX2ZpeF9sb25nX2JfbXZzKE1wZWdFbmNDb250ZXh0ICogcywgaW50MTZf dCAoKm12X3RhYmxlKVsyXSwgaW50IGZfY29kZSwgaW50IHR5cGUpOwoKCgpleHRlcm4gY29uc3Qg SU5UMTYgZmZfbXBlZzFfZGVmYXVsdF9pbnRyYV9tYXRyaXhbNjRdOwpleHRlcm4gY29uc3QgSU5U MTYgZmZfbXBlZzFfZGVmYXVsdF9ub25faW50cmFfbWF0cml4WzY0XTsKZXh0ZXJuIFVJTlQ4IGZm X21wZWcxX2RjX3NjYWxlX3RhYmxlWzEyOF07Cgp2b2lkIG1wZWcxX2VuY29kZV9waWN0dXJlX2hl YWRlcihNcGVnRW5jQ29udGV4dCAqcywgaW50IHBpY3R1cmVfbnVtYmVyKTsKdm9pZCBtcGVnMV9l bmNvZGVfbWIoTXBlZ0VuY0NvbnRleHQgKnMsCiAgICAgICAgICAgICAgICAgICAgIERDVEVMRU0g YmxvY2tbNl1bNjRdLAogICAgICAgICAgICAgICAgICAgICBpbnQgbW90aW9uX3gsIGludCBtb3Rp b25feSk7CnZvaWQgZmZfbXBlZzFfZW5jb2RlX2luaXQoTXBlZ0VuY0NvbnRleHQgKnMpOwoKCgp0 eXBlZGVmIHN0cnVjdCBSTFRhYmxlIHsKICAgIGludCBuOwogICAgaW50IGxhc3Q7CiAgICBjb25z dCBVSU5UMTYgKCp0YWJsZV92bGMpWzJdOwogICAgY29uc3QgSU5UOCAqdGFibGVfcnVuOwogICAg Y29uc3QgSU5UOCAqdGFibGVfbGV2ZWw7CiAgICBVSU5UOCAqaW5kZXhfcnVuWzJdOwogICAgSU5U OCAqbWF4X2xldmVsWzJdOwogICAgSU5UOCAqbWF4X3J1blsyXTsKICAgIFZMQyB2bGM7CiAgICBS TF9WTENfRUxFTSAqcmxfdmxjWzMyXTsKfSBSTFRhYmxlOwoKdm9pZCBpbml0X3JsKFJMVGFibGUg KnJsKTsKdm9pZCBpbml0X3ZsY19ybChSTFRhYmxlICpybCk7CgpzdGF0aWMgaW5saW5lIGludCBn ZXRfcmxfaW5kZXgoY29uc3QgUkxUYWJsZSAqcmwsIGludCBsYXN0LCBpbnQgcnVuLCBpbnQgbGV2 ZWwpCnsKICAgIGludCBpbmRleDsKICAgIGluZGV4ID0gcmwtPmluZGV4X3J1bltsYXN0XVtydW5d OwogICAgaWYgKGluZGV4ID49IHJsLT5uKQogICAgICAgIHJldHVybiBybC0+bjsKICAgIGlmIChs ZXZlbCA+IHJsLT5tYXhfbGV2ZWxbbGFzdF1bcnVuXSkKICAgICAgICByZXR1cm4gcmwtPm47CiAg ICByZXR1cm4gaW5kZXggKyBsZXZlbCAtIDE7Cn0KCmV4dGVybiBVSU5UOCBmZl9tcGVnNF95X2Rj X3NjYWxlX3RhYmxlWzMyXTsKZXh0ZXJuIFVJTlQ4IGZmX21wZWc0X2NfZGNfc2NhbGVfdGFibGVb MzJdOwpleHRlcm4gY29uc3QgSU5UMTYgZmZfbXBlZzRfZGVmYXVsdF9pbnRyYV9tYXRyaXhbNjRd OwpleHRlcm4gY29uc3QgSU5UMTYgZmZfbXBlZzRfZGVmYXVsdF9ub25faW50cmFfbWF0cml4WzY0 XTsKdm9pZCBoMjYzX2VuY29kZV9tYihNcGVnRW5jQ29udGV4dCAqcywKICAgICAgICAgICAgICAg ICAgICBEQ1RFTEVNIGJsb2NrWzZdWzY0XSwKICAgICAgICAgICAgICAgICAgICBpbnQgbW90aW9u X3gsIGludCBtb3Rpb25feSk7CnZvaWQgbXBlZzRfZW5jb2RlX21iKE1wZWdFbmNDb250ZXh0ICpz LAogICAgICAgICAgICAgICAgICAgIERDVEVMRU0gYmxvY2tbNl1bNjRdLAogICAgICAgICAgICAg ICAgICAgIGludCBtb3Rpb25feCwgaW50IG1vdGlvbl95KTsKdm9pZCBoMjYzX2VuY29kZV9waWN0 dXJlX2hlYWRlcihNcGVnRW5jQ29udGV4dCAqcywgaW50IHBpY3R1cmVfbnVtYmVyKTsKaW50IGgy NjNfZW5jb2RlX2dvYl9oZWFkZXIoTXBlZ0VuY0NvbnRleHQgKiBzLCBpbnQgbWJfbGluZSk7CklO VDE2ICpoMjYzX3ByZWRfbW90aW9uKE1wZWdFbmNDb250ZXh0ICogcywgaW50IGJsb2NrLAogICAg ICAgICAgICAgICAgICAgICAgICBpbnQgKnB4LCBpbnQgKnB5KTsKdm9pZCBtcGVnNF9wcmVkX2Fj KE1wZWdFbmNDb250ZXh0ICogcywgSU5UMTYgKmJsb2NrLCBpbnQgbiwKICAgICAgICAgICAgICAg ICAgIGludCBkaXIpOwp2b2lkIGZmX3NldF9tcGVnNF90aW1lKE1wZWdFbmNDb250ZXh0ICogcywg aW50IHBpY3R1cmVfbnVtYmVyKTsKdm9pZCBtcGVnNF9lbmNvZGVfcGljdHVyZV9oZWFkZXIoTXBl Z0VuY0NvbnRleHQgKnMsIGludCBwaWN0dXJlX251bWJlcik7CnZvaWQgaDI2M19lbmNvZGVfaW5p dChNcGVnRW5jQ29udGV4dCAqcyk7CnZvaWQgaDI2M19kZWNvZGVfaW5pdF92bGMoTXBlZ0VuY0Nv bnRleHQgKnMpOwppbnQgaDI2M19kZWNvZGVfcGljdHVyZV9oZWFkZXIoTXBlZ0VuY0NvbnRleHQg KnMpOwppbnQgZmZfaDI2M19kZWNvZGVfZ29iX2hlYWRlcihNcGVnRW5jQ29udGV4dCAqcyk7Cmlu dCBmZl9tcGVnNF9kZWNvZGVfcGljdHVyZV9oZWFkZXIoTXBlZ0VuY0NvbnRleHQgKiBzLCBHZXRC aXRDb250ZXh0ICpnYik7CgoKaW50IGludGVsX2gyNjNfZGVjb2RlX3BpY3R1cmVfaGVhZGVyKE1w ZWdFbmNDb250ZXh0ICpzKTsKaW50IGZmX2gyNjNfZGVjb2RlX21iKE1wZWdFbmNDb250ZXh0ICpz LAogICAgICAgICAgICAgICAgICAgICAgRENURUxFTSBibG9ja1s2XVs2NF0pOwppbnQgaDI2M19n ZXRfcGljdHVyZV9mb3JtYXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKdm9pZCBmZl9tcGVnNF9l bmNvZGVfdmlkZW9fcGFja2V0X2hlYWRlcihNcGVnRW5jQ29udGV4dCAqcyk7CnZvaWQgZmZfbXBl ZzRfY2xlYW5fYnVmZmVycyhNcGVnRW5jQ29udGV4dCAqcyk7CnZvaWQgZmZfbXBlZzRfc3R1ZmZp bmcoUHV0Qml0Q29udGV4dCAqIHBiYyk7CnZvaWQgZmZfbXBlZzRfaW5pdF9wYXJ0aXRpb25zKE1w ZWdFbmNDb250ZXh0ICpzKTsKdm9pZCBmZl9tcGVnNF9tZXJnZV9wYXJ0aXRpb25zKE1wZWdFbmND b250ZXh0ICpzKTsKdm9pZCBmZl9jbGVhbl9tcGVnNF9xc2NhbGVzKE1wZWdFbmNDb250ZXh0ICpz KTsKdm9pZCBmZl9jbGVhbl9oMjYzX3FzY2FsZXMoTXBlZ0VuY0NvbnRleHQgKnMpOwppbnQgZmZf bXBlZzRfZGVjb2RlX3BhcnRpdGlvbnMoTXBlZ0VuY0NvbnRleHQgKnMpOwppbnQgZmZfbXBlZzRf Z2V0X3ZpZGVvX3BhY2tldF9wcmVmaXhfbGVuZ3RoKE1wZWdFbmNDb250ZXh0ICpzKTsKaW50IGZm X2gyNjNfcmVzeW5jKE1wZWdFbmNDb250ZXh0ICpzKTsKaW50IGZmX2gyNjNfZ2V0X2dvYl9oZWln aHQoTXBlZ0VuY0NvbnRleHQgKnMpOwoKCgp2b2lkIHJ2MTBfZW5jb2RlX3BpY3R1cmVfaGVhZGVy KE1wZWdFbmNDb250ZXh0ICpzLCBpbnQgcGljdHVyZV9udW1iZXIpOwppbnQgcnZfZGVjb2RlX2Rj KE1wZWdFbmNDb250ZXh0ICpzLCBpbnQgbik7CgoKCnZvaWQgbXNtcGVnNF9lbmNvZGVfcGljdHVy ZV9oZWFkZXIoTXBlZ0VuY0NvbnRleHQgKiBzLCBpbnQgcGljdHVyZV9udW1iZXIpOwp2b2lkIG1z bXBlZzRfZW5jb2RlX2V4dF9oZWFkZXIoTXBlZ0VuY0NvbnRleHQgKiBzKTsKdm9pZCBtc21wZWc0 X2VuY29kZV9tYihNcGVnRW5jQ29udGV4dCAqIHMsCiAgICAgICAgICAgICAgICAgICAgICAgRENU RUxFTSBibG9ja1s2XVs2NF0sCiAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vdGlvbl94LCBp bnQgbW90aW9uX3kpOwppbnQgbXNtcGVnNF9kZWNvZGVfcGljdHVyZV9oZWFkZXIoTXBlZ0VuY0Nv bnRleHQgKiBzKTsKaW50IG1zbXBlZzRfZGVjb2RlX2V4dF9oZWFkZXIoTXBlZ0VuY0NvbnRleHQg KiBzLCBpbnQgYnVmX3NpemUpOwppbnQgZmZfbXNtcGVnNF9kZWNvZGVfaW5pdChNcGVnRW5jQ29u dGV4dCAqcyk7CnZvaWQgZmZfbXNtcGVnNF9lbmNvZGVfaW5pdChNcGVnRW5jQ29udGV4dCAqcyk7 CgoKCmludCBtanBlZ19pbml0KE1wZWdFbmNDb250ZXh0ICpzKTsKdm9pZCBtanBlZ19jbG9zZShN cGVnRW5jQ29udGV4dCAqcyk7CnZvaWQgbWpwZWdfZW5jb2RlX21iKE1wZWdFbmNDb250ZXh0ICpz LAogICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNIGJsb2NrWzZdWzY0XSk7CnZvaWQgbWpwZWdf cGljdHVyZV9oZWFkZXIoTXBlZ0VuY0NvbnRleHQgKnMpOwp2b2lkIG1qcGVnX3BpY3R1cmVfdHJh aWxlcihNcGVnRW5jQ29udGV4dCAqcyk7CgoKCmludCBmZl9yYXRlX2NvbnRyb2xfaW5pdChNcGVn RW5jQ29udGV4dCAqcyk7CmZsb2F0IGZmX3JhdGVfZXN0aW1hdGVfcXNjYWxlKE1wZWdFbmNDb250 ZXh0ICpzKTsKdm9pZCBmZl93cml0ZV9wYXNzMV9zdGF0cyhNcGVnRW5jQ29udGV4dCAqcyk7CnZv aWQgZmZfcmF0ZV9jb250cm9sX3VuaW5pdChNcGVnRW5jQ29udGV4dCAqcyk7CmRvdWJsZSBmZl9l dmFsKGNoYXIgKnMsIGRvdWJsZSAqY29uc3RfdmFsdWUsIGNoYXIgKipjb25zdF9uYW1lLAogICAg ICAgICAgICAgICBkb3VibGUgKCoqZnVuYzEpKHZvaWQgKiwgZG91YmxlKSwgY2hhciAqKmZ1bmMx X25hbWUsCiAgICAgICAgICAgICAgIGRvdWJsZSAoKipmdW5jMikodm9pZCAqLCBkb3VibGUsIGRv dWJsZSksIGNoYXIgKipmdW5jMl9uYW1lLAogICAgICAgICAgICAgICB2b2lkICpvcGFxdWUpOwoj IDIyICJ1dGlscy5jIiAyCgp2b2lkICphdl9tYWxsb2N6KGludCBzaXplKQp7CiAgICB2b2lkICpw dHI7CiAgICBwdHIgPSBhdl9tYWxsb2Moc2l6ZSk7CiAgICBpZiAoIXB0cikKICAgICAgICByZXR1 cm4gKCh2b2lkICopMCk7CiAgICAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3Ag KHNpemUpICYmIChzaXplKSA8PSAxNiA/ICgoc2l6ZSkgPT0gMSA/ICh7IHZvaWQgKl9fcyA9IChw dHIpOyAqKChfX3VpbnQ4X3QgKikgX19zKSA9IChfX3VpbnQ4X3QpIDA7IF9fczsgfSkgOiAoeyB2 b2lkICpfX3MgPSAocHRyKTsgdW5pb24geyB1bnNpZ25lZCBpbnQgX191aTsgdW5zaWduZWQgc2hv cnQgaW50IF9fdXNpOyB1bnNpZ25lZCBjaGFyIF9fdWM7IH0gKl9fdSA9IF9fczsgX191aW50OF90 IF9fYyA9IChfX3VpbnQ4X3QpICgwKTsgc3dpdGNoICgodW5zaWduZWQgaW50KSAoc2l6ZSkpIHsg Y2FzZSAxNTogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25f XyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTE6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAx MDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDc6IF9fdS0+ X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9f dSArIDQpOyBjYXNlIDM6IF9fdS0+X191c2kgPSAodW5zaWduZWQgc2hvcnQgaW50KSBfX2MgKiAw eDAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOyBfX3UtPl9fdWMg PSAodW5zaWduZWQgY2hhcikgX19jOyBicmVhazsgY2FzZSAxNDogX191LT5fX3VpID0gX19jICog MHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2Ug MTA6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2 b2lkICopIF9fdSArIDQpOyBjYXNlIDY6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9f dSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDI6IF9fdS0+X191c2kg PSAodW5zaWduZWQgc2hvcnQgaW50KSBfX2MgKiAweDAxMDE7IGJyZWFrOyBjYXNlIDEzOiBfX3Ut Pl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBf X3UgKyA0KTsgY2FzZSA5OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4 dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA1OiBfX3UtPl9fdWkgPSBfX2MgKiAw eDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAx OiBfX3UtPl9fdWMgPSAodW5zaWduZWQgY2hhcikgX19jOyBicmVhazsgY2FzZSAxNjogX191LT5f X3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191 ICsgNCk7IGNhc2UgMTI6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0 ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDg6IF9fdS0+X191aSA9IF9fYyAqIDB4 MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDQ6 IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IGNhc2UgMDogYnJlYWs7IH0gX19zOyB9KSkg OiAoX19idWlsdGluX2NvbnN0YW50X3AgKDApICYmICgwKSA9PSAnXDAnID8gKHsgdm9pZCAqX19z ID0gKHB0cik7IF9fYnVpbHRpbl9tZW1zZXQgKF9fcywgJ1wwJywgc2l6ZSk7IF9fczsgfSkgOiBt ZW1zZXQgKHB0ciwgMCwgc2l6ZSkpKSk7CiAgICByZXR1cm4gcHRyOwp9CgoKdm9pZCBfX2F2X2Zy ZWVwKHZvaWQgKipwdHIpCnsKICAgIGF2X2ZyZWUoKnB0cik7CiAgICAqcHRyID0gKCh2b2lkICop MCk7Cn0KCgpBVkNvZGVjICpmaXJzdF9hdmNvZGVjOwoKdm9pZCByZWdpc3Rlcl9hdmNvZGVjKEFW Q29kZWMgKmZvcm1hdCkKewogICAgQVZDb2RlYyAqKnA7CiAgICBwID0gJmZpcnN0X2F2Y29kZWM7 CiAgICB3aGlsZSAoKnAgIT0gKCh2b2lkICopMCkpIHAgPSAmKCpwKS0+bmV4dDsKICAgICpwID0g Zm9ybWF0OwogICAgZm9ybWF0LT5uZXh0ID0gKCh2b2lkICopMCk7Cn0KCnZvaWQgYXZjb2RlY19n ZXRfY29udGV4dF9kZWZhdWx0cyhBVkNvZGVjQ29udGV4dCAqcyl7CiAgICBzLT5iaXRfcmF0ZT0g ODAwKjEwMDA7CiAgICBzLT5iaXRfcmF0ZV90b2xlcmFuY2U9IHMtPmJpdF9yYXRlKjEwOwogICAg cy0+cW1pbj0gMjsKICAgIHMtPnFtYXg9IDMxOwogICAgcy0+cmNfZXE9ICJ0ZXhecUNvbXAiOwog ICAgcy0+cWNvbXByZXNzPSAwLjU7CiAgICBzLT5tYXhfcWRpZmY9IDM7CiAgICBzLT5iX3F1YW50 X2ZhY3Rvcj0xLjI1OwogICAgcy0+Yl9xdWFudF9vZmZzZXQ9MS4yNTsKICAgIHMtPmlfcXVhbnRf ZmFjdG9yPS0wLjg7CiAgICBzLT5pX3F1YW50X29mZnNldD0wLjA7CiAgICBzLT5lcnJvcl9jb25j ZWFsbWVudD0gMzsKICAgIHMtPmVycm9yX3Jlc2lsaWVuY2U9IDE7CiAgICBzLT53b3JrYXJvdW5k X2J1Z3M9IDE7CiAgICBzLT5mcmFtZV9yYXRlID0gMjUgKiAxMDAwMDsKICAgIHMtPmdvcF9zaXpl PSA1MDsKICAgIHMtPm1lX21ldGhvZD0gTUVfRVBaUzsKfQoKCgoKCkFWQ29kZWNDb250ZXh0ICph dmNvZGVjX2FsbG9jX2NvbnRleHQodm9pZCl7CiAgICBBVkNvZGVjQ29udGV4dCAqYXZjdHg9IGF2 X21hbGxvY3ooc2l6ZW9mKEFWQ29kZWNDb250ZXh0KSk7CgogICAgaWYoYXZjdHg9PSgodm9pZCAq KTApKSByZXR1cm4gKCh2b2lkICopMCk7CgogICAgYXZjb2RlY19nZXRfY29udGV4dF9kZWZhdWx0 cyhhdmN0eCk7CgogICAgcmV0dXJuIGF2Y3R4Owp9CgppbnQgYXZjb2RlY19vcGVuKEFWQ29kZWND b250ZXh0ICphdmN0eCwgQVZDb2RlYyAqY29kZWMpCnsKICAgIGludCByZXQ7CgogICAgYXZjdHgt PmNvZGVjID0gY29kZWM7CiAgICBhdmN0eC0+ZnJhbWVfbnVtYmVyID0gMDsKICAgIGlmIChjb2Rl Yy0+cHJpdl9kYXRhX3NpemUgPiAwKSB7CiAgICAgICAgYXZjdHgtPnByaXZfZGF0YSA9IGF2X21h bGxvY3ooY29kZWMtPnByaXZfZGF0YV9zaXplKTsKICAgICAgICBpZiAoIWF2Y3R4LT5wcml2X2Rh dGEpCiAgICAgICAgICAgIHJldHVybiAtMTI7CiAgICB9IGVsc2UgewogICAgICAgIGF2Y3R4LT5w cml2X2RhdGEgPSAoKHZvaWQgKikwKTsKICAgIH0KICAgIHJldCA9IGF2Y3R4LT5jb2RlYy0+aW5p dChhdmN0eCk7CiAgICBpZiAocmV0IDwgMCkgewogICAgICAgIF9fYXZfZnJlZXAoKHZvaWQgKiop KCZhdmN0eC0+cHJpdl9kYXRhKSk7CiAgICAgICAgcmV0dXJuIHJldDsKICAgIH0KICAgIHJldHVy biAwOwp9CgppbnQgYXZjb2RlY19lbmNvZGVfYXVkaW8oQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBV SU5UOCAqYnVmLCBpbnQgYnVmX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz aG9ydCAqc2FtcGxlcykKewogICAgaW50IHJldDsKCiAgICByZXQgPSBhdmN0eC0+Y29kZWMtPmVu Y29kZShhdmN0eCwgYnVmLCBidWZfc2l6ZSwgKHZvaWQgKilzYW1wbGVzKTsKICAgIGF2Y3R4LT5m cmFtZV9udW1iZXIrKzsKICAgIHJldHVybiByZXQ7Cn0KCmludCBhdmNvZGVjX2VuY29kZV92aWRl byhBVkNvZGVjQ29udGV4dCAqYXZjdHgsIFVJTlQ4ICpidWYsIGludCBidWZfc2l6ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWUGljdHVyZSAqcGljdCkKewogICAgaW50IHJldDsK CiAgICByZXQgPSBhdmN0eC0+Y29kZWMtPmVuY29kZShhdmN0eCwgYnVmLCBidWZfc2l6ZSwgKHZv aWQgKilwaWN0KTsKCiAgICB7IGlmIChtbV9mbGFncyAmIDB4MDAwMSkgZW1tcygpO307CgogICAg YXZjdHgtPmZyYW1lX251bWJlcisrOwogICAgcmV0dXJuIHJldDsKfQoKCgoKaW50IGF2Y29kZWNf ZGVjb2RlX3ZpZGVvKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZQaWN0dXJlICpwaWN0dXJlLAog ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpnb3RfcGljdHVyZV9wdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICBVSU5UOCAqYnVmLCBpbnQgYnVmX3NpemUpCnsKICAgIGludCByZXQ7Cgog ICAgcmV0ID0gYXZjdHgtPmNvZGVjLT5kZWNvZGUoYXZjdHgsIHBpY3R1cmUsIGdvdF9waWN0dXJl X3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgYnVmX3NpemUpOwoKICAg IHsgaWYgKG1tX2ZsYWdzICYgMHgwMDAxKSBlbW1zKCk7fTsKCiAgICBpZiAoKmdvdF9waWN0dXJl X3B0cikKICAgICAgICBhdmN0eC0+ZnJhbWVfbnVtYmVyKys7CiAgICByZXR1cm4gcmV0Owp9CgoK CgoKaW50IGF2Y29kZWNfZGVjb2RlX2F1ZGlvKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgSU5UMTYg KnNhbXBsZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmZyYW1lX3NpemVfcHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgVUlOVDggKmJ1ZiwgaW50IGJ1Zl9zaXplKQp7CiAgICBp bnQgcmV0OwoKICAgIHJldCA9IGF2Y3R4LT5jb2RlYy0+ZGVjb2RlKGF2Y3R4LCBzYW1wbGVzLCBm cmFtZV9zaXplX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgYnVmX3Np emUpOwogICAgYXZjdHgtPmZyYW1lX251bWJlcisrOwogICAgcmV0dXJuIHJldDsKfQoKaW50IGF2 Y29kZWNfY2xvc2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQp7CiAgICBpZiAoYXZjdHgtPmNvZGVj LT5jbG9zZSkKICAgICAgICBhdmN0eC0+Y29kZWMtPmNsb3NlKGF2Y3R4KTsKICAgIF9fYXZfZnJl ZXAoKHZvaWQgKiopKCZhdmN0eC0+cHJpdl9kYXRhKSk7CiAgICBhdmN0eC0+Y29kZWMgPSAoKHZv aWQgKikwKTsKICAgIHJldHVybiAwOwp9CgpBVkNvZGVjICphdmNvZGVjX2ZpbmRfZW5jb2Rlcihl bnVtIENvZGVjSUQgaWQpCnsKICAgIEFWQ29kZWMgKnA7CiAgICBwID0gZmlyc3RfYXZjb2RlYzsK ICAgIHdoaWxlIChwKSB7CiAgICAgICAgaWYgKHAtPmVuY29kZSAhPSAoKHZvaWQgKikwKSAmJiBw LT5pZCA9PSBpZCkKICAgICAgICAgICAgcmV0dXJuIHA7CiAgICAgICAgcCA9IHAtPm5leHQ7CiAg ICB9CiAgICByZXR1cm4gKCh2b2lkICopMCk7Cn0KCkFWQ29kZWMgKmF2Y29kZWNfZmluZF9lbmNv ZGVyX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKewogICAgQVZDb2RlYyAqcDsKICAgIHAgPSBm aXJzdF9hdmNvZGVjOwogICAgd2hpbGUgKHApIHsKICAgICAgICBpZiAocC0+ZW5jb2RlICE9ICgo dm9pZCAqKTApICYmIF9fZXh0ZW5zaW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsg KF9fYnVpbHRpbl9jb25zdGFudF9wIChuYW1lKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAocC0+ bmFtZSkgJiYgKF9fczFfbGVuID0gc3RybGVuIChuYW1lKSwgX19zMl9sZW4gPSBzdHJsZW4gKHAt Pm5hbWUpLCAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKChuYW1lKSArIDEpIC0gKHNpemVfdCko Y29uc3Qgdm9pZCAqKShuYW1lKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90 KShjb25zdCB2b2lkICopKChwLT5uYW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShw LT5uYW1lKSA9PSAxKSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0IGNoYXIg KikgKG5hbWUpLCAoX19jb25zdCBjaGFyICopIChwLT5uYW1lKSwgKF9fczFfbGVuIDwgX19zMl9s ZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChu YW1lKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmFtZSkgKyAxKSAtIChzaXplX3QpKGNv bnN0IHZvaWQgKikobmFtZSkgPT0gMSkgJiYgKF9fczFfbGVuID0gc3RybGVuIChuYW1lKSwgX19z MV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAocC0+bmFtZSkgJiYgKChzaXplX3Qp KGNvbnN0IHZvaWQgKikoKHAtPm5hbWUpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHAt Pm5hbWUpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0g KCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVswXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikocC0+bmFtZSkpWzBd KTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsxXSAtICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHAtPm5hbWUpKVsxXSk7IGlm IChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMl0gLSAoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwLT5uYW1lKSlbMl0pOyBpZiAoX19z MV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVszXSAtICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHAtPm5hbWUpKVszXSk7IH0gfSBfX3Jlc3VsdDsg fSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwLT5uYW1lKTsgcmVnaXN0 ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKG5hbWUpKVswXSAtIF9fczJbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAobmFtZSkpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1 bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChuYW1lKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jl c3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChuYW1lKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9f YnVpbHRpbl9jb25zdGFudF9wIChwLT5uYW1lKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgo cC0+bmFtZSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikocC0+bmFtZSkgPT0gMSkgJiYg KF9fczJfbGVuID0gc3RybGVuIChwLT5uYW1lKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5f Y29uc3RhbnRfcCAobmFtZSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKG5hbWUpICsgMSkg LSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5hbWUpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsg cmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKG5hbWUpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikocC0+bmFtZSkpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9 PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKG5hbWUpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKHAtPm5hbWUpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkg eyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop IChuYW1lKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop IChwLT5uYW1lKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUp KVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHAtPm5h bWUpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1 bnNpZ25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopIChuYW1lKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHAtPm5hbWUpKVswXTsgaWYgKF9f czJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwLT5uYW1lKSlbMV0pOyBp ZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHAtPm5hbWUpKVsy XSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVsz XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHAtPm5hbWUp KVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IHN0cmNtcCAobmFtZSwgcC0+bmFtZSkpKSk7IH0p ID09IDApCiAgICAgICAgICAgIHJldHVybiBwOwogICAgICAgIHAgPSBwLT5uZXh0OwogICAgfQog ICAgcmV0dXJuICgodm9pZCAqKTApOwp9CgpBVkNvZGVjICphdmNvZGVjX2ZpbmRfZGVjb2Rlcihl bnVtIENvZGVjSUQgaWQpCnsKICAgIEFWQ29kZWMgKnA7CiAgICBwID0gZmlyc3RfYXZjb2RlYzsK ICAgIHdoaWxlIChwKSB7CiAgICAgICAgaWYgKHAtPmRlY29kZSAhPSAoKHZvaWQgKikwKSAmJiBw LT5pZCA9PSBpZCkKICAgICAgICAgICAgcmV0dXJuIHA7CiAgICAgICAgcCA9IHAtPm5leHQ7CiAg ICB9CiAgICByZXR1cm4gKCh2b2lkICopMCk7Cn0KCkFWQ29kZWMgKmF2Y29kZWNfZmluZF9kZWNv ZGVyX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKewogICAgQVZDb2RlYyAqcDsKICAgIHAgPSBm aXJzdF9hdmNvZGVjOwogICAgd2hpbGUgKHApIHsKICAgICAgICBpZiAocC0+ZGVjb2RlICE9ICgo dm9pZCAqKTApICYmIF9fZXh0ZW5zaW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsg KF9fYnVpbHRpbl9jb25zdGFudF9wIChuYW1lKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAocC0+ bmFtZSkgJiYgKF9fczFfbGVuID0gc3RybGVuIChuYW1lKSwgX19zMl9sZW4gPSBzdHJsZW4gKHAt Pm5hbWUpLCAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKChuYW1lKSArIDEpIC0gKHNpemVfdCko Y29uc3Qgdm9pZCAqKShuYW1lKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90 KShjb25zdCB2b2lkICopKChwLT5uYW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShw LT5uYW1lKSA9PSAxKSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0IGNoYXIg KikgKG5hbWUpLCAoX19jb25zdCBjaGFyICopIChwLT5uYW1lKSwgKF9fczFfbGVuIDwgX19zMl9s ZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChu YW1lKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmFtZSkgKyAxKSAtIChzaXplX3QpKGNv bnN0IHZvaWQgKikobmFtZSkgPT0gMSkgJiYgKF9fczFfbGVuID0gc3RybGVuIChuYW1lKSwgX19z MV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAocC0+bmFtZSkgJiYgKChzaXplX3Qp KGNvbnN0IHZvaWQgKikoKHAtPm5hbWUpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHAt Pm5hbWUpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0g KCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVswXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikocC0+bmFtZSkpWzBd KTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsxXSAtICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHAtPm5hbWUpKVsxXSk7IGlm IChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMl0gLSAoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwLT5uYW1lKSlbMl0pOyBpZiAoX19z MV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVszXSAtICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHAtPm5hbWUpKVszXSk7IH0gfSBfX3Jlc3VsdDsg fSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwLT5uYW1lKTsgcmVnaXN0 ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKG5hbWUpKVswXSAtIF9fczJbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAobmFtZSkpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1 bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChuYW1lKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jl c3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChuYW1lKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9f YnVpbHRpbl9jb25zdGFudF9wIChwLT5uYW1lKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgo cC0+bmFtZSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikocC0+bmFtZSkgPT0gMSkgJiYg KF9fczJfbGVuID0gc3RybGVuIChwLT5uYW1lKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5f Y29uc3RhbnRfcCAobmFtZSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKG5hbWUpICsgMSkg LSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5hbWUpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsg cmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKG5hbWUpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikocC0+bmFtZSkpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9 PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKG5hbWUpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKHAtPm5hbWUpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkg eyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop IChuYW1lKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop IChwLT5uYW1lKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUp KVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHAtPm5h bWUpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1 bnNpZ25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopIChuYW1lKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHAtPm5hbWUpKVswXTsgaWYgKF9f czJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwLT5uYW1lKSlbMV0pOyBp ZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHAtPm5hbWUpKVsy XSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVsz XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHAtPm5hbWUp KVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IHN0cmNtcCAobmFtZSwgcC0+bmFtZSkpKSk7IH0p ID09IDApCiAgICAgICAgICAgIHJldHVybiBwOwogICAgICAgIHAgPSBwLT5uZXh0OwogICAgfQog ICAgcmV0dXJuICgodm9pZCAqKTApOwp9CgpBVkNvZGVjICphdmNvZGVjX2ZpbmQoZW51bSBDb2Rl Y0lEIGlkKQp7CiAgICBBVkNvZGVjICpwOwogICAgcCA9IGZpcnN0X2F2Y29kZWM7CiAgICB3aGls ZSAocCkgewogICAgICAgIGlmIChwLT5pZCA9PSBpZCkKICAgICAgICAgICAgcmV0dXJuIHA7CiAg ICAgICAgcCA9IHAtPm5leHQ7CiAgICB9CiAgICByZXR1cm4gKCh2b2lkICopMCk7Cn0KCmNvbnN0 IGNoYXIgKnBpeF9mbXRfc3RyW10gPSB7CiAgICAieXV2NDIwcCIsCiAgICAieXV2NDIyIiwKICAg ICJyZ2IyNCIsCiAgICAiYmdyMjQiLAogICAgInl1djQyMnAiLAogICAgInl1djQ0NHAiLAogICAg InJnYmEzMiIsCiAgICAiYmdyYTMyIiwKICAgICJ5dXY0MTBwIiwKICAgICJ5dXY0MTFwIiwKfTsK CnZvaWQgYXZjb2RlY19zdHJpbmcoY2hhciAqYnVmLCBpbnQgYnVmX3NpemUsIEFWQ29kZWNDb250 ZXh0ICplbmMsIGludCBlbmNvZGUpCnsKICAgIGNvbnN0IGNoYXIgKmNvZGVjX25hbWU7CiAgICBB VkNvZGVjICpwOwogICAgY2hhciBidWYxWzMyXTsKICAgIGNoYXIgY2hhbm5lbHNfc3RyWzEwMF07 CiAgICBpbnQgYml0cmF0ZTsKCiAgICBpZiAoZW5jb2RlKQogICAgICAgIHAgPSBhdmNvZGVjX2Zp bmRfZW5jb2RlcihlbmMtPmNvZGVjX2lkKTsKICAgIGVsc2UKICAgICAgICBwID0gYXZjb2RlY19m aW5kX2RlY29kZXIoZW5jLT5jb2RlY19pZCk7CgogICAgaWYgKHApIHsKICAgICAgICBjb2RlY19u YW1lID0gcC0+bmFtZTsKICAgIH0gZWxzZSBpZiAoZW5jLT5jb2RlY19uYW1lWzBdICE9ICdcMCcp IHsKICAgICAgICBjb2RlY19uYW1lID0gZW5jLT5jb2RlY19uYW1lOwogICAgfSBlbHNlIHsKCiAg ICAgICAgaWYgKGVuYy0+Y29kZWNfdHlwZSA9PSBDT0RFQ19UWVBFX1ZJREVPKSB7CiAgICAgICAg ICAgIHNucHJpbnRmKGJ1ZjEsIHNpemVvZihidWYxKSwgIiVjJWMlYyVjIiwKICAgICAgICAgICAg ICAgICAgICAgZW5jLT5jb2RlY190YWcgJiAweGZmLAogICAgICAgICAgICAgICAgICAgICAoZW5j LT5jb2RlY190YWcgPj4gOCkgJiAweGZmLAogICAgICAgICAgICAgICAgICAgICAoZW5jLT5jb2Rl Y190YWcgPj4gMTYpICYgMHhmZiwKICAgICAgICAgICAgICAgICAgICAgKGVuYy0+Y29kZWNfdGFn ID4+IDI0KSAmIDB4ZmYpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNucHJpbnRmKGJ1 ZjEsIHNpemVvZihidWYxKSwgIjB4JTA0eCIsIGVuYy0+Y29kZWNfdGFnKTsKICAgICAgICB9CiAg ICAgICAgY29kZWNfbmFtZSA9IGJ1ZjE7CiAgICB9CgogICAgc3dpdGNoKGVuYy0+Y29kZWNfdHlw ZSkgewogICAgY2FzZSBDT0RFQ19UWVBFX1ZJREVPOgogICAgICAgIHNucHJpbnRmKGJ1ZiwgYnVm X3NpemUsCiAgICAgICAgICAgICAgICAgIlZpZGVvOiAlcyVzIiwKICAgICAgICAgICAgICAgICBj b2RlY19uYW1lLCBlbmMtPmZsYWdzICYgMHgwMDAxID8gIiAoaHEpIiA6ICIiKTsKICAgICAgICBp ZiAoZW5jLT5jb2RlY19pZCA9PSBDT0RFQ19JRF9SQVdWSURFTykgewogICAgICAgICAgICBzbnBy aW50ZihidWYgKyBzdHJsZW4oYnVmKSwgYnVmX3NpemUgLSBzdHJsZW4oYnVmKSwKICAgICAgICAg ICAgICAgICAgICAgIiwgJXMiLAogICAgICAgICAgICAgICAgICAgICBwaXhfZm10X3N0cltlbmMt PnBpeF9mbXRdKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVuYy0+d2lkdGgpIHsKICAgICAgICAg ICAgc25wcmludGYoYnVmICsgc3RybGVuKGJ1ZiksIGJ1Zl9zaXplIC0gc3RybGVuKGJ1ZiksCiAg ICAgICAgICAgICAgICAgICAgICIsICVkeCVkLCAlMC4yZiBmcHMiLAogICAgICAgICAgICAgICAg ICAgICBlbmMtPndpZHRoLCBlbmMtPmhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgKGZsb2F0 KWVuYy0+ZnJhbWVfcmF0ZSAvIDEwMDAwKTsKICAgICAgICB9CiAgICAgICAgaWYgKGVuY29kZSkg ewogICAgICAgICAgICBzbnByaW50ZihidWYgKyBzdHJsZW4oYnVmKSwgYnVmX3NpemUgLSBzdHJs ZW4oYnVmKSwKICAgICAgICAgICAgICAgICAgICAgIiwgcT0lZC0lZCIsIGVuYy0+cW1pbiwgZW5j LT5xbWF4KTsKICAgICAgICB9CiAgICAgICAgYml0cmF0ZSA9IGVuYy0+Yml0X3JhdGU7CiAgICAg ICAgYnJlYWs7CiAgICBjYXNlIENPREVDX1RZUEVfQVVESU86CiAgICAgICAgc25wcmludGYoYnVm LCBidWZfc2l6ZSwKICAgICAgICAgICAgICAgICAiQXVkaW86ICVzIiwKICAgICAgICAgICAgICAg ICBjb2RlY19uYW1lKTsKICAgICAgICBzd2l0Y2ggKGVuYy0+Y2hhbm5lbHMpIHsKICAgICAgICAg ICAgY2FzZSAxOgogICAgICAgICAgICAgICAgc3RyY3B5KGNoYW5uZWxzX3N0ciwgIm1vbm8iKTsK ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAg ICBzdHJjcHkoY2hhbm5lbHNfc3RyLCAic3RlcmVvIik7CiAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgc3RyY3B5KGNoYW5uZWxzX3N0ciwg IjU6MSIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg ICAgICAgICAgICBzcHJpbnRmKGNoYW5uZWxzX3N0ciwgIiVkIGNoYW5uZWxzIiwgZW5jLT5jaGFu bmVscyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKGVuYy0+ c2FtcGxlX3JhdGUpIHsKICAgICAgICAgICAgc25wcmludGYoYnVmICsgc3RybGVuKGJ1ZiksIGJ1 Zl9zaXplIC0gc3RybGVuKGJ1ZiksCiAgICAgICAgICAgICAgICAgICAgICIsICVkIEh6LCAlcyIs CiAgICAgICAgICAgICAgICAgICAgIGVuYy0+c2FtcGxlX3JhdGUsCiAgICAgICAgICAgICAgICAg ICAgIGNoYW5uZWxzX3N0cik7CiAgICAgICAgfQoKCiAgICAgICAgc3dpdGNoKGVuYy0+Y29kZWNf aWQpIHsKICAgICAgICBjYXNlIENPREVDX0lEX1BDTV9TMTZMRToKICAgICAgICBjYXNlIENPREVD X0lEX1BDTV9TMTZCRToKICAgICAgICBjYXNlIENPREVDX0lEX1BDTV9VMTZMRToKICAgICAgICBj YXNlIENPREVDX0lEX1BDTV9VMTZCRToKICAgICAgICAgICAgYml0cmF0ZSA9IGVuYy0+c2FtcGxl X3JhdGUgKiBlbmMtPmNoYW5uZWxzICogMTY7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNh c2UgQ09ERUNfSURfUENNX1M4OgogICAgICAgIGNhc2UgQ09ERUNfSURfUENNX1U4OgogICAgICAg IGNhc2UgQ09ERUNfSURfUENNX0FMQVc6CiAgICAgICAgY2FzZSBDT0RFQ19JRF9QQ01fTVVMQVc6 CiAgICAgICAgICAgIGJpdHJhdGUgPSBlbmMtPnNhbXBsZV9yYXRlICogZW5jLT5jaGFubmVscyAq IDg7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGJpdHJh dGUgPSBlbmMtPmJpdF9yYXRlOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAg YnJlYWs7CiAgICBkZWZhdWx0OgogICAgICAgIGRvIHsgZnByaW50ZihzdGRlcnIsICJBYm9ydCBh dCAlczolZFxuIiwgInV0aWxzLmMiLCAzNDUpOyBhYm9ydCgpOyB9IHdoaWxlICgwKTsKICAgIH0K ICAgIGlmIChlbmNvZGUpIHsKICAgICAgICBpZiAoZW5jLT5mbGFncyAmIDB4MDIwMCkKICAgICAg ICAgICAgc25wcmludGYoYnVmICsgc3RybGVuKGJ1ZiksIGJ1Zl9zaXplIC0gc3RybGVuKGJ1Ziks CiAgICAgICAgICAgICAgICAgICAgICIsIHBhc3MgMSIpOwogICAgICAgIGlmIChlbmMtPmZsYWdz ICYgMHgwNDAwKQogICAgICAgICAgICBzbnByaW50ZihidWYgKyBzdHJsZW4oYnVmKSwgYnVmX3Np emUgLSBzdHJsZW4oYnVmKSwKICAgICAgICAgICAgICAgICAgICAgIiwgcGFzcyAyIik7CiAgICB9 CiAgICBpZiAoYml0cmF0ZSAhPSAwKSB7CiAgICAgICAgc25wcmludGYoYnVmICsgc3RybGVuKGJ1 ZiksIGJ1Zl9zaXplIC0gc3RybGVuKGJ1ZiksCiAgICAgICAgICAgICAgICAgIiwgJWQga2IvcyIs IGJpdHJhdGUgLyAxMDAwKTsKICAgIH0KfQoKCnZvaWQgYXZwaWN0dXJlX2ZpbGwoQVZQaWN0dXJl ICpwaWN0dXJlLCBVSU5UOCAqcHRyLAogICAgICAgICAgICAgICAgICAgIGludCBwaXhfZm10LCBp bnQgd2lkdGgsIGludCBoZWlnaHQpCnsKICAgIGludCBzaXplOwoKICAgIHNpemUgPSB3aWR0aCAq IGhlaWdodDsKICAgIHN3aXRjaChwaXhfZm10KSB7CiAgICBjYXNlIFBJWF9GTVRfWVVWNDIwUDoK ICAgICAgICBwaWN0dXJlLT5kYXRhWzBdID0gcHRyOwogICAgICAgIHBpY3R1cmUtPmRhdGFbMV0g PSBwaWN0dXJlLT5kYXRhWzBdICsgc2l6ZTsKICAgICAgICBwaWN0dXJlLT5kYXRhWzJdID0gcGlj dHVyZS0+ZGF0YVsxXSArIHNpemUgLyA0OwogICAgICAgIHBpY3R1cmUtPmxpbmVzaXplWzBdID0g d2lkdGg7CiAgICAgICAgcGljdHVyZS0+bGluZXNpemVbMV0gPSB3aWR0aCAvIDI7CiAgICAgICAg cGljdHVyZS0+bGluZXNpemVbMl0gPSB3aWR0aCAvIDI7CiAgICAgICAgYnJlYWs7CiAgICBjYXNl IFBJWF9GTVRfWVVWNDIyUDoKICAgICAgICBwaWN0dXJlLT5kYXRhWzBdID0gcHRyOwogICAgICAg IHBpY3R1cmUtPmRhdGFbMV0gPSBwaWN0dXJlLT5kYXRhWzBdICsgc2l6ZTsKICAgICAgICBwaWN0 dXJlLT5kYXRhWzJdID0gcGljdHVyZS0+ZGF0YVsxXSArIHNpemUgLyAyOwogICAgICAgIHBpY3R1 cmUtPmxpbmVzaXplWzBdID0gd2lkdGg7CiAgICAgICAgcGljdHVyZS0+bGluZXNpemVbMV0gPSB3 aWR0aCAvIDI7CiAgICAgICAgcGljdHVyZS0+bGluZXNpemVbMl0gPSB3aWR0aCAvIDI7CiAgICAg ICAgYnJlYWs7CiAgICBjYXNlIFBJWF9GTVRfWVVWNDQ0UDoKICAgICAgICBwaWN0dXJlLT5kYXRh WzBdID0gcHRyOwogICAgICAgIHBpY3R1cmUtPmRhdGFbMV0gPSBwaWN0dXJlLT5kYXRhWzBdICsg c2l6ZTsKICAgICAgICBwaWN0dXJlLT5kYXRhWzJdID0gcGljdHVyZS0+ZGF0YVsxXSArIHNpemU7 CiAgICAgICAgcGljdHVyZS0+bGluZXNpemVbMF0gPSB3aWR0aDsKICAgICAgICBwaWN0dXJlLT5s aW5lc2l6ZVsxXSA9IHdpZHRoOwogICAgICAgIHBpY3R1cmUtPmxpbmVzaXplWzJdID0gd2lkdGg7 CiAgICAgICAgYnJlYWs7CiAgICBjYXNlIFBJWF9GTVRfUkdCMjQ6CiAgICBjYXNlIFBJWF9GTVRf QkdSMjQ6CiAgICAgICAgcGljdHVyZS0+ZGF0YVswXSA9IHB0cjsKICAgICAgICBwaWN0dXJlLT5k YXRhWzFdID0gKCh2b2lkICopMCk7CiAgICAgICAgcGljdHVyZS0+ZGF0YVsyXSA9ICgodm9pZCAq KTApOwogICAgICAgIHBpY3R1cmUtPmxpbmVzaXplWzBdID0gd2lkdGggKiAzOwogICAgICAgIGJy ZWFrOwogICAgY2FzZSBQSVhfRk1UX1JHQkEzMjoKICAgIGNhc2UgUElYX0ZNVF9CR1JBMzI6CiAg ICAgICAgcGljdHVyZS0+ZGF0YVswXSA9IHB0cjsKICAgICAgICBwaWN0dXJlLT5kYXRhWzFdID0g KCh2b2lkICopMCk7CiAgICAgICAgcGljdHVyZS0+ZGF0YVsyXSA9ICgodm9pZCAqKTApOwogICAg ICAgIHBpY3R1cmUtPmxpbmVzaXplWzBdID0gd2lkdGggKiA0OwogICAgICAgIGJyZWFrOwogICAg Y2FzZSBQSVhfRk1UX1lVVjQyMjoKICAgICAgICBwaWN0dXJlLT5kYXRhWzBdID0gcHRyOwogICAg ICAgIHBpY3R1cmUtPmRhdGFbMV0gPSAoKHZvaWQgKikwKTsKICAgICAgICBwaWN0dXJlLT5kYXRh WzJdID0gKCh2b2lkICopMCk7CiAgICAgICAgcGljdHVyZS0+bGluZXNpemVbMF0gPSB3aWR0aCAq IDI7CiAgICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICAgIHBpY3R1cmUtPmRhdGFbMF0g PSAoKHZvaWQgKikwKTsKICAgICAgICBwaWN0dXJlLT5kYXRhWzFdID0gKCh2b2lkICopMCk7CiAg ICAgICAgcGljdHVyZS0+ZGF0YVsyXSA9ICgodm9pZCAqKTApOwogICAgICAgIGJyZWFrOwogICAg fQp9CgppbnQgYXZwaWN0dXJlX2dldF9zaXplKGludCBwaXhfZm10LCBpbnQgd2lkdGgsIGludCBo ZWlnaHQpCnsKICAgIGludCBzaXplOwoKICAgIHNpemUgPSB3aWR0aCAqIGhlaWdodDsKICAgIHN3 aXRjaChwaXhfZm10KSB7CiAgICBjYXNlIFBJWF9GTVRfWVVWNDIwUDoKICAgICAgICBzaXplID0g KHNpemUgKiAzKSAvIDI7CiAgICAgICAgYnJlYWs7CiAgICBjYXNlIFBJWF9GTVRfWVVWNDIyUDoK ICAgICAgICBzaXplID0gKHNpemUgKiAyKTsKICAgICAgICBicmVhazsKICAgIGNhc2UgUElYX0ZN VF9ZVVY0NDRQOgogICAgICAgIHNpemUgPSAoc2l6ZSAqIDMpOwogICAgICAgIGJyZWFrOwogICAg Y2FzZSBQSVhfRk1UX1JHQjI0OgogICAgY2FzZSBQSVhfRk1UX0JHUjI0OgogICAgICAgIHNpemUg PSAoc2l6ZSAqIDMpOwogICAgICAgIGJyZWFrOwogICAgY2FzZSBQSVhfRk1UX1JHQkEzMjoKICAg IGNhc2UgUElYX0ZNVF9CR1JBMzI6CiAgICAgICAgc2l6ZSA9IChzaXplICogNCk7CiAgICAgICAg YnJlYWs7CiAgICBjYXNlIFBJWF9GTVRfWVVWNDIyOgogICAgICAgIHNpemUgPSAoc2l6ZSAqIDIp OwogICAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgICBzaXplID0gLTE7CiAgICAgICAg YnJlYWs7CiAgICB9CiAgICByZXR1cm4gc2l6ZTsKfQoKdW5zaWduZWQgYXZjb2RlY192ZXJzaW9u KCB2b2lkICkKewogIHJldHVybiAweDAwMDQwNjsKfQoKdW5zaWduZWQgYXZjb2RlY19idWlsZCgg dm9pZCApCnsKICByZXR1cm4gNDYzNzsKfQoKCnZvaWQgYXZjb2RlY19pbml0KHZvaWQpCnsKICAg IHN0YXRpYyBpbnQgaW5pdGVkID0gMDsKCiAgICBpZiAoaW5pdGVkICE9IDApCiAgICAgICAgcmV0 dXJuOwogICAgaW5pdGVkID0gMTsKCiAgICBkc3B1dGlsX2luaXQoKTsKfQoKCnZvaWQgYXZjb2Rl Y19mbHVzaF9idWZmZXJzKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKewogICAgTXBlZ0VuY0NvbnRl eHQgKnMgPSBhdmN0eC0+cHJpdl9kYXRhOwogICAgcy0+bnVtX2F2YWlsYWJsZV9idWZmZXJzPTA7 Cn0KCgpzdGF0aWMgaW50IHJhd19lbmNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAqcykKewogICAg cmV0dXJuIDA7Cn0KCnN0YXRpYyBpbnQgcmF3X2RlY29kZV9mcmFtZShBVkNvZGVjQ29udGV4dCAq YXZjdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLCBpbnQgKmRhdGFf c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVJTlQ4ICpidWYsIGludCBidWZfc2l6 ZSkKewogICAgcmV0dXJuIC0xOwp9CgpzdGF0aWMgaW50IHJhd19lbmNvZGVfZnJhbWUoQVZDb2Rl Y0NvbnRleHQgKmF2Y3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hh ciAqZnJhbWUsIGludCBidWZfc2l6ZSwgdm9pZCAqZGF0YSkKewogICAgcmV0dXJuIC0xOwp9CgpB VkNvZGVjIHJhd3ZpZGVvX2NvZGVjID0gewogICAgInJhd3ZpZGVvIiwKICAgIENPREVDX1RZUEVf VklERU8sCiAgICBDT0RFQ19JRF9SQVdWSURFTywKICAgIDAsCiAgICByYXdfZW5jb2RlX2luaXQs CiAgICByYXdfZW5jb2RlX2ZyYW1lLAogICAgKCh2b2lkICopMCksCiAgICByYXdfZGVjb2RlX2Zy YW1lLAp9Owo=