From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1132 invoked by alias); 18 Mar 2003 16:26:01 -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 1076 invoked by uid 71); 18 Mar 2003 16:26:01 -0000 Resent-Date: 18 Mar 2003 16:26:01 -0000 Resent-Message-ID: <20030318162601.1074.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, hagan@cih.com Received: (qmail 27785 invoked by uid 48); 18 Mar 2003 16:19:18 -0000 Message-Id: <20030318161918.27784.qmail@sources.redhat.com> Date: Tue, 18 Mar 2003 16:26:00 -0000 From: hagan@cih.com Reply-To: hagan@cih.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c/10137: -m128bit-long-double leads to coredump building glibc (snippet contained) X-SW-Source: 2003-03/txt/msg01225.txt.bz2 List-Id: >Number: 10137 >Category: c >Synopsis: -m128bit-long-double leads to coredump building glibc (snippet contained) >Confidential: no >Severity: non-critical >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Tue Mar 18 16:26:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: hagan@cih.com >Release: gcc-3.2.2 >Organization: >Environment: gentoo linux 1.4pre >Description: gcc -m128bit-long-double -c -o gscanner.bug.o gscanner.bug.c gscanner.c: In function `g_scanner_get_token_i': gscanner.c:1197: internal error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See for instructions. (fault) gcc -c -o gscanner.bug.o gscanner.bug.c (success) gcc -v Reading specs from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.2/specs Configured with: /var/tmp/portage/gcc-3.2.2/work/gcc-3.2.2/configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/gcc-bin/3.2 --includedir=/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.2/include --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/3.2 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info --enable-shared --host=i686-pc-linux-gnu --target=i686-pc-linux-gnu --with-system-zlib --enable-languages=c,c++,ada,f77,objc,java --enable-threads=posix --enable-long-long --disable-checking --enable-cstdio=stdio --enable-clocale=generic --enable-__cxa_atexit --enable-version-specific-runtime-libs --with-gxx-include-dir=/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.2/include/g++-v3 --with-local-prefix=/usr/local --enable-shared --enable-nls --without-included-gettext Thread model: posix gcc version 3.2.2 >How-To-Repeat: readily reproducible with attached file >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="gscanner.bug.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="gscanner.bug.c" IyAxICJnc2Nhbm5lci5jIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMg MSAiZ3NjYW5uZXIuYyIKIyAzNCAiZ3NjYW5uZXIuYyIKIyAxICIuLi9jb25maWcuaCIgMQojIDM1 ICJnc2Nhbm5lci5jIiAyCgojIDEgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAxIDMKIyAyOSAiL3Vz ci9pbmNsdWRlL2Vycm5vLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg MjkxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2Rl ZnMuaCIgMSAzCiMgMjkyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzIwICIvdXNy L2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAz CiMgMzIxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzAgIi91c3IvaW5jbHVkZS9l cnJuby5oIiAyIDMKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAxIDMKIyAy NSAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9l cnJuby5oIiAxIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEgMwojIDUgIi91 c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAyIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJy bm8uaCIgMiAzCiMgMzggIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKZXh0ZXJuIGludCAq X19lcnJub19sb2NhdGlvbiAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDM3 ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAzCiMgNTkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAz CgojIDM3ICJnc2Nhbm5lci5jIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAz MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMTMgIi91c3IvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVm IHVuc2lnbmVkIGludCBzaXplX3Q7CiMgMzI1ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBsb25nIGludCB3Y2hhcl90 OwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCiMgOTMgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVt OwogIH0gZGl2X3Q7CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAg IGxvbmcgaW50IHJlbTsKICB9IGxkaXZfdDsKCgoKIyAxMzcgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMwpleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIDsKCgoKCmV4 dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFy ICpfX25wdHIpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCl9fZXh0ZW5zaW9uX18g ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAq Kl9fcmVzdHJpY3QgX19lbmRwdHIpIDsKCiMgMTc0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK CgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50 IF9fYmFzZSkgOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKCgpfX2V4dGVu c2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQg bG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9u ZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50 IF9fYmFzZSkgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBz dHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQg X19iYXNlKQogICAgIDsKCiMgMjY0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGRv dWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsIGludCBfX2dyb3VwKQogICAgIDsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICA7CmV4 dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19ncm91cCkgOwoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCmV4dGVybiB1bnNp Z25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgoKX19leHRlbnNpb25f XwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIDsKCgoKX19leHRlbnNpb25f XwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChfX2Nv bnN0IGNoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBf X2dyb3VwKQogICAgIDsKCgoKCgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp CnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4 dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpCnsK ICByZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7 Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg ICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2Vu ZHB0ciwgX19iYXNlLCAwKTsKfQoKIyAzNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpfX2V4 dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg ICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19l bmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWdu ZWQgbG9uZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJl dHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9 CgoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvbGwg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLAogICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAo X19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lu bGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKiBfX3Jl c3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICBpbnQg X19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs IF9fYmFzZSwgMCk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBj aGFyICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSAoKHZvaWQg KikwKSk7Cn0KZXh0ZXJuIF9faW5saW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikK ewogIHJldHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAx MCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CmF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRy KQp7CiAgcmV0dXJuIHN0cnRvbCAoX19ucHRyLCAoY2hhciAqKikgKCh2b2lkICopMCksIDEwKTsK fQoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAo X19jb25zdCBjaGFyICpfX25wdHIpCnsKICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAq KikgKCh2b2lkICopMCksIDEwKTsKfQoKIyA0MDggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpl eHRlcm4gY2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSA7CgoKZXh0ZXJuIGxvbmcgaW50IGE2NGwg KF9fY29uc3QgY2hhciAqX19zKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5j bHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90 eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5z aWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VfaW50Owp0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWdu ZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBs b25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBl ZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90 Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNo b3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVm IHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBs b25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxv bmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5 cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRl ZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3Vf aW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50 IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7 CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRl ZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVm IHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50 IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190 aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGlu dCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9u ZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50 IF9fdGltZXJfdDsKCgoKCgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVk IHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsK CgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2Nu dDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRf dCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRl ZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0 X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rf c2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBl ZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoK CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzCiMgMjMgIi91c3Iv aW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2No ZWQuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMKc3RydWN0IF9fc2No ZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwojIDI0ICIvdXNyL2lu Y2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAzCgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2Nr CnsKICBsb25nIGludCBfX3N0YXR1czsKICBpbnQgX19zcGlubG9jazsKCn07CgoKCnR5cGVkZWYg c3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCgoKdHlwZWRl ZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAgaW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9f c2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBf X2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50 IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3Np emU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJl YWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRo cmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFk X2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0 eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9w dGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFk X2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QK ewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGlu dCBwdGhyZWFkX29uY2VfdDsKIyAxNDAgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5o IiAzCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDE0NCAiL3Vzci9pbmNs dWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAz CgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0 eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9f cXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNp ZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgoKCnR5cGVkZWYgX19p bm82NF90IGlub190OwojIDYxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBf X2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21v ZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBf X3VpZF90IHVpZF90OwoKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmX3Q7CiMgOTkgIi91c3Iv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0eXBlZGVm IF9faWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVm IF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVk ZWYgX19rZXlfdCBrZXlfdDsKIyAxMzIgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEg Ii91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDc0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoK dHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CgoKCiMgOTIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK dHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgMTA0ICIvdXNyL2luY2x1ZGUvdGltZS5o IiAzCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDIgMwojIDE0NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK IyAxNDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgdW5zaWduZWQg bG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxOTAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0 eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5 cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5 cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5 cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7CgoK dHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf X1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgo X19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9fYXR0 cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2lu dDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIGludCBy ZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CiMgMjEyICIv dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEg MwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9l bmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMjEzICIvdXNy L2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu aCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIg MwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDIzICIvdXNyL2luY2x1 ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVk ZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNp emVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdzZXRfdDsKIyAzNSAiL3Vzci9p bmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsK CgoKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDExNiAiL3Vzci9pbmNsdWRlL3Rp bWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25n IGludCB0dl9uc2VjOwogIH07CiMgNDUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoK IyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvYml0 cy90aW1lLmgiIDMKc3RydWN0IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBf X3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu aCIgMiAzCgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCnR5cGVkZWYg bG9uZyBpbnQgX19mZF9tYXNrOwojIDY3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCnR5 cGVkZWYgc3RydWN0CiAgewoKCgoKCgogICAgX19mZF9tYXNrIF9fZmRzX2JpdHNbMTAyNCAvICg4 ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2Zk X21hc2sgZmRfbWFzazsKIyA5OSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwoKCgoKCgoK ZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRm ZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAg ICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAg ICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgOwojIDEyMiAi L3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwoKIyAyMTYgIi91c3IvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAyMTkg Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCiMgMjQzICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDMKdHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2Js a2NudDY0X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudF90 OwojIDI2MiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCgojIDQxNSAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRvbSAodm9pZCkgOwoKCmV4 dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIDsKCgoKCgpleHRlcm4gY2hh ciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgOwoKCgpleHRlcm4gY2hhciAq c2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIDsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQog IHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3Rh dGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2Vw OwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0 IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQz Ml90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWdu ZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgOwoKZXh0ZXJuIGludCBp bml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBfX3N0YXRl YnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSA7Cgpl eHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIDsK CgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSA7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWdu ZWQgaW50IF9fc2VlZCkgOwoKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19z ZWVkKSA7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIDsKZXh0ZXJuIGRvdWJs ZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25n IGludCBscmFuZDQ4ICh2b2lkKSA7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBz aG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSA7 CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkg OwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgOwpleHRlcm4gdW5z aWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10p IDsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIDsK CgoKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFsz XTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQg aW50IF9fYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25n IGxvbmcgaW50IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0 OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91Ymxl ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgZXJhbmQ0OF9yICh1bnNpZ25lZCBz aG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4 X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUg Kl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRy YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxv bmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNp Z25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBk cmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBs b25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChz dHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAg ICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJuIGludCBqcmFuZDQ4 X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAg ICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBzcmFu ZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIp CiAgICAgOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2 dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIp IDsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwK ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CgoK CgoKCgoKCmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18g KChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6 ZV90IF9fc2l6ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgoKZXh0 ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSBfX2F0dHJpYnV0 ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIDsKCgoK CmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgOwoKCgojIDEgIi91c3IvaW5jbHVkZS9h bGxvY2EuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi91c3IvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg MjYgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKCgoKCgpleHRlcm4gdm9pZCAqYWxsb2Nh IChzaXplX3QgX19zaXplKSA7CgoKCgoKCiMgNTc3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIg MwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgX19hdHRyaWJ1dGVfXyAo KF9fbWFsbG9jX18pKTsKIyA1OTAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwoKCmV4dGVybiB2 b2lkIGFib3J0ICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCmV4dGVy biBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIDsKCgoKCgpleHRlcm4gaW50IG9u X2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAq X19hcmcpCiAgICAgOwoKCgoKCgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIF9fYXR0 cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCiMgNjIyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDMKCgpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgoKZXh0 ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoKCgpl eHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIDsKCgoKCgpleHRlcm4gaW50IHNldGVu diAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVw bGFjZSkKICAgICA7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUp IDsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgOwojIDY2MSAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKIyA2 NzIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9f dGVtcGxhdGUpIF9fYXNtX18gKCIiICJta3N0ZW1wNjQiKTsKIyA2ODggIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgOwoKCgoK CmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgOwoKIyA3MTIgIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0 cmljdCBfX3Jlc29sdmVkKSA7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9f Y29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKCgoKCgoKCmV4dGVybiB2b2lkICpic2Vh cmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90 IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9f bm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9f Y29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCgoKCgoKCgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1l ciwgaW50IF9fZGVub20pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4g bGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIyA3NzYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg MwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpf X3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19z aWduKSA7CgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp dCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz dHJpY3QgX19zaWduKSA7CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGlu dCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBk b3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19y ZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CmV4dGVybiBjaGFyICpx ZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAg ICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CmV4 dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFy ICpfX2J1ZikgOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u ZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpf X3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX2xlbikgOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGlu dCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBp bnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAg ICAgICAgICAgc2l6ZV90IF9fbGVuKSA7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91Ymxl IF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp Y3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBj aGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBxZmN2dF9y IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAg aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAg ICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CgoKCgoK CgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgOwoKCmV4 dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAg ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVy biBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgOwoKCgpleHRlcm4gc2l6 ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoKZXh0 ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24p CiAgICAgOwoKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3Bv bnNlKSA7CiMgOTA4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBnZXRsb2Fk YXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSA7CgoKCgoKCiMgMzggImdzY2Fu bmVyLmMiIDIKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2lu Y2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuMi4yL2luY2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBf X2dudWNfdmFfbGlzdDsKIyAxMTAgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4yLjIvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7 CiMgMzkgImdzY2FubmVyLmMiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI4 ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5j bHVkZS9zdHJpbmcuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lkICpfX3Jlc3Ry aWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0 IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVz dCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICA7CgoKCgoKCmV4dGVybiB2 b2lkICptZW1jY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCB2b2lkICpfX3Jl c3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAgaW50IF9fYywgc2l6ZV90IF9fbikK ICAgICA7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXpl X3QgX19uKSA7CgoKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25z dCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCmV4dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXpl X3QgX19uKQogICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCiMgODAgIi91c3IvaW5j bHVkZS9zdHJpbmcuaCIgMwoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3Qg X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgOwoKZXh0ZXJuIGNo YXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJu IGNoYXIgKnN0cmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX3NyYykKICAgICA7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19yZXN0 cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFy ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy ICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4 dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIp CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0g KGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoKIyAxMjYgIi91c3IvaW5jbHVk ZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgX19h dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNjAgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIg MwoKCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNo YXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKCgoKCgoK ZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpf X3JlamVjdCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90 IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25z dCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgX19hdHRyaWJ1dGVfXyAo KF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3Rh Y2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICA7CgoKCgpleHRlcm4gY2hhciAqX19zdHJ0 b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hh ciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsKIyAyMjgg Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0 IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgojIDI0MSAiL3Vzci9pbmNs dWRlL3N0cmluZy5oIiAzCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIDsK CgoKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBz aXplX3QgX19idWZsZW4pIDsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6 ZV90IF9fbikgOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9p ZCAqX19kZXN0LCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywg c2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2Nv bnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBj aGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4g aW50IGZmcyAoaW50IF9faSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDI4NyAiL3Vz ci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFy ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0 IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CiMgMzA5ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hh ciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgOwojIDM3MiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nLmgiIDEgMwojIDM3MyAiL3Vzci9pbmNsdWRl L3N0cmluZy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMSAzCiMg Mzg5ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIHZvaWQgKl9fcmF3bWVt Y2hyIChjb25zdCB2b2lkICpfX3MsIGludCBfX2MpOwojIDkxOSAiL3Vzci9pbmNsdWRlL2JpdHMv c3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJjc3BuX2MxIChfX2NvbnN0 IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0KTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cmNz cG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QpCnsKICByZWdpc3RlciBzaXpl X3QgX19yZXN1bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcgJiYgX19zW19f cmVzdWx0XSAhPSBfX3JlamVjdCkKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9 CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3RyY3Nwbl9jMiAoX19jb25zdCBjaGFyICpfX3Ms IGludCBfX3JlamVjdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg X19yZWplY3QyKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cmNzcG5fYzIgKF9fY29uc3Qg Y2hhciAqX19zLCBpbnQgX19yZWplY3QxLCBpbnQgX19yZWplY3QyKQp7CiAgcmVnaXN0ZXIgc2l6 ZV90IF9fcmVzdWx0ID0gMDsKICB3aGlsZSAoX19zW19fcmVzdWx0XSAhPSAnXDAnICYmIF9fc1tf X3Jlc3VsdF0gIT0gX19yZWplY3QxCiAgICAgICAgICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWpl Y3QyKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBfX2lubGlu ZSBzaXplX3QgX19zdHJjc3BuX2MzIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3JlamVjdDIsIGludCBf X3JlamVjdDMpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMyAoX19jb25zdCBj aGFyICpfX3MsIGludCBfX3JlamVjdDEsIGludCBfX3JlamVjdDIsCiAgICAgICAgICAgICAgaW50 IF9fcmVqZWN0MykKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CiAgd2hpbGUgKF9f c1tfX3Jlc3VsdF0gIT0gJ1wwJyAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MQogICAgICAg ICAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0MiAmJiBfX3NbX19yZXN1bHRdICE9IF9fcmVq ZWN0MykKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CiMgOTc2ICIvdXNyL2lu Y2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cnNwbl9j MSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdCk7CmV4dGVybiBfX2lubGluZSBzaXpl X3QKX19zdHJzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQpCnsKICByZWdp c3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19fcmVzdWx0XSA9PSBfX2Fj Y2VwdCkKICAgICsrX19yZXN1bHQ7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpleHRlcm4gX19pbmxp bmUgc2l6ZV90IF9fc3Ryc3BuX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWNjZXB0Mik7CmV4dGVy biBfX2lubGluZSBzaXplX3QKX19zdHJzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19h Y2NlcHQxLCBpbnQgX19hY2NlcHQyKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsK CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gPT0gX19hY2NlcHQxIHx8IF9fc1tfX3Jlc3VsdF0gPT0g X19hY2NlcHQyKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVybiBf X2lubGluZSBzaXplX3QgX19zdHJzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2Nl cHQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQyLCBp bnQgX19hY2NlcHQzKTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9jMyAoX19jb25z dCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIsIGludCBfX2FjY2VwdDMp CnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwoKICB3aGlsZSAoX19zW19fcmVzdWx0 XSA9PSBfX2FjY2VwdDEgfHwgX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDIKICAgICAgICAgfHwg X19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDMpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jl c3VsdDsKfQojIDEwMzMgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19p bmxpbmUgY2hhciAqX19zdHJwYnJrX2MyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0 MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FjY2VwdDIpOwpl eHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RycGJya19jMiAoX19jb25zdCBjaGFyICpfX3MsIGlu dCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIpCnsKCiAgd2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAq X19zICE9IF9fYWNjZXB0MSAmJiAqX19zICE9IF9fYWNjZXB0MikKICAgICsrX19zOwogIHJldHVy biAqX19zID09ICdcMCcgPyAoKHZvaWQgKikwKSA6IChjaGFyICopIChzaXplX3QpIF9fczsKfQoK ZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RycGJya19jMyAoX19jb25zdCBjaGFyICpfX3MsIGlu dCBfX2FjY2VwdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19h Y2NlcHQyLCBpbnQgX19hY2NlcHQzKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnBicmtf YzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQxLCBpbnQgX19hY2NlcHQyLAogICAg ICAgICAgICAgIGludCBfX2FjY2VwdDMpCnsKCiAgd2hpbGUgKCpfX3MgIT0gJ1wwJyAmJiAqX19z ICE9IF9fYWNjZXB0MSAmJiAqX19zICE9IF9fYWNjZXB0MgogICAgICAgICAmJiAqX19zICE9IF9f YWNjZXB0MykKICAgICsrX19zOwogIHJldHVybiAqX19zID09ICdcMCcgPyAoKHZvaWQgKikwKSA6 IChjaGFyICopIChzaXplX3QpIF9fczsKfQojIDEwODUgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmlu ZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJ0b2tfcl8xYyAoY2hhciAqX19zLCBj aGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJ0 b2tfcl8xYyAoY2hhciAqX19zLCBjaGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCkKewogIGNoYXIg Kl9fcmVzdWx0OwogIGlmIChfX3MgPT0gKCh2b2lkICopMCkpCiAgICBfX3MgPSAqX19uZXh0cDsK ICB3aGlsZSAoKl9fcyA9PSBfX3NlcCkKICAgICsrX19zOwogIF9fcmVzdWx0ID0gKCh2b2lkICop MCk7CiAgaWYgKCpfX3MgIT0gJ1wwJykKICAgIHsKICAgICAgX19yZXN1bHQgPSBfX3MrKzsKICAg ICAgd2hpbGUgKCpfX3MgIT0gJ1wwJykKICAgICAgICBpZiAoKl9fcysrID09IF9fc2VwKQogICAg ICAgICAgewogICAgICAgICAgICBfX3NbLTFdID0gJ1wwJzsKICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICB9CiAgICAgICpfX25leHRwID0gX19zOwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsK fQojIDExMTcgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gY2hhciAqX19z dHJzZXBfZyAoY2hhciAqKl9fc3RyaW5ncCwgX19jb25zdCBjaGFyICpfX2RlbGltKTsKIyAxMTM1 ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9f c3Ryc2VwXzFjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0KTsKZXh0ZXJuIF9faW5saW5lIGNo YXIgKgpfX3N0cnNlcF8xYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdCkKewogIHJlZ2lzdGVy IGNoYXIgKl9fcmV0dmFsID0gKl9fczsKICBpZiAoX19yZXR2YWwgIT0gKCh2b2lkICopMCkgJiYg KCpfX3MgPSAoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKF9fcmVqZWN0KSAm JiAoX19yZWplY3QpID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAoX19yZXR2YWwsIF9f cmVqZWN0KSA6IHN0cmNociAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSAhPSAoKHZvaWQgKikwKSkK ICAgICooKl9fcykrKyA9ICdcMCc7CiAgcmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19pbmxp bmUgY2hhciAqX19zdHJzZXBfMmMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9f cmVqZWN0Mik7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJzZXBfMmMgKGNoYXIgKipfX3Ms IGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MikKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0 dmFsID0gKl9fczsKICBpZiAoX19yZXR2YWwgIT0gKCh2b2lkICopMCkpCiAgICB7CiAgICAgIHJl Z2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKICAgICAgd2hpbGUgKDEpCiAgICAgICAgewog ICAgICAgICAgaWYgKCpfX2NwID09ICdcMCcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBf X2NwID0gKCh2b2lkICopMCk7CiAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAg ICAgaWYgKCpfX2NwID09IF9fcmVqZWN0MSB8fCAqX19jcCA9PSBfX3JlamVjdDIpCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAqX19jcCsrID0gJ1wwJzsKICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgfQogICAgICAgICAgKytfX2NwOwogICAgICAgIH0KICAgICAgKl9fcyA9IF9f Y3A7CiAgICB9CiAgcmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19z dHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fcmVqZWN0Myk7CmV4dGVybiBf X2lubGluZSBjaGFyICoKX19zdHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBj aGFyIF9fcmVqZWN0MiwgY2hhciBfX3JlamVjdDMpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZh bCA9ICpfX3M7CiAgaWYgKF9fcmV0dmFsICE9ICgodm9pZCAqKTApKQogICAgewogICAgICByZWdp c3RlciBjaGFyICpfX2NwID0gX19yZXR2YWw7CiAgICAgIHdoaWxlICgxKQogICAgICAgIHsKICAg ICAgICAgIGlmICgqX19jcCA9PSAnXDAnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19j cCA9ICgodm9pZCAqKTApOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAg IGlmICgqX19jcCA9PSBfX3JlamVjdDEgfHwgKl9fY3AgPT0gX19yZWplY3QyIHx8ICpfX2NwID09 IF9fcmVqZWN0MykKICAgICAgICAgICAgewogICAgICAgICAgICAgICpfX2NwKysgPSAnXDAnOwog ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICArK19fY3A7CiAgICAg ICAgfQogICAgICAqX19zID0gX19jcDsKICAgIH0KICByZXR1cm4gX19yZXR2YWw7Cn0KIyAxMjE2 ICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIGNoYXIgKl9fc3RyZHVwIChf X2NvbnN0IGNoYXIgKl9fc3RyaW5nKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDEy MzUgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gY2hhciAqX19zdHJuZHVw IChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18g KChfX21hbGxvY19fKSk7CiMgMzc2ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgoKIyA0 MCAiZ3NjYW5uZXIuYyIgMgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv My4yLjIvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAzOSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKCiMgMSAiL3Vzci9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0NCAi L3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgi IDIgMwojIDUzICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1 ZGUvc3RkaW8uaCIgMwoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CgoKCgoKIyA3MSAi L3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgi IDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX19GSUxFOwojIDgxICIvdXNyL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5j bHVkZS9saWJpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDE0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi IDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUv c3RkZGVmLmgiIDEgMwojIDM1NCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAx NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2Nv bmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4y LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMK CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93 Y2hhci5oIiAyIDMKIyA3MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QK ewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBf X3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUv X0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19t YnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0 X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vz ci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwoj IDI4ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAx IDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2lu Y2x1ZGUvd2NoYXIuaCIgMiAzCiMgMjkgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgojIDEg Ii91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoKCgplbnVtCnsKICBfX0dD T05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIsCiAgX19HQ09OVl9O T01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VUUFVULAogIF9f R0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQsCgogIF9fR0NP TlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IKfTsKCgoKZW51 bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9 IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19nY29udl9zdGVwX2Rh dGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2djb252X3RyYW5zX2Rh dGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICos IHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAqLCBpbnQsIGlu dCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3Rl cCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3Rl cCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVjdCBfX2djb252 X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX2djb252 X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29u dl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQg Y2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5z X3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgq X19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7CnR5cGVkZWYg dm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3QgX19nY29udl90 cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAgX19nY29udl90 cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNfZW5k X2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBfX2djb252X3Ry YW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAgc3RydWN0IF9f Z2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBjaGFyICpfX21v ZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwogIGNoYXIgKl9f dG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2ZjdCBfX2luaXRf ZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9fbWluX25lZWRlZF9m cm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVkX3RvOwogIGlu dCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAqX19kYXRhOwp9 OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVm OwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2ZsYWdzOwoKCgogIGlu dCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91c2U7CgogIF9fbWJz dGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0cnVjdCBfX2dj b252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZfaW5m bwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9fc3RlcHM7CiAg X19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhIFtdOwp9ICpfX2dj b252X3Q7CiMgNDUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5cGVkZWYgdW5pb24K ewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19n Y29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0g X19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0 dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0df dWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5z aWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkp OwojIDMzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgMTYyICIvdXNyL2luY2x1ZGUvbGli aW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9JT19GSUxFOwojIDE3MiAiL3Vzci9p bmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9J T19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUg Kl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5NSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsK CgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBfX2NvZGVjdnRfcGFy dGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9OwojIDI2MyAiL3Vz ci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoK ICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19y ZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsK ICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9f YnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7 CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7Cgog IHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKCgoKICBpbnQgX2ZsYWdz MjsKCiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVt bjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoK ICBfSU9fbG9ja190ICpfbG9jazsKIyAzMTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19v ZmY2NF90IF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3BhZDE7CiAgdm9pZCAqX19wYWQyOwoKICBp bnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9m ICh2b2lkICopXTsKCn07CgoKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX0lPX0ZJTEU7CgoKc3Ry dWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9z dGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVy biBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzUwICIvdXNyL2luY2x1 ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29v a2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6 ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVk ZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGlu dCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKIyA0 MDIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19G SUxFICopIDsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX19v dmVyZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSA7CmV4dGVybiB3aW50X3QgX193dW5kZXJmbG93IChf SU9fRklMRSAqKSA7CmV4dGVybiB3aW50X3QgX193dWZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJu IHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSA7CiMgNDMyICIvdXNyL2lu Y2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgOwpl eHRlcm4gaW50IF9JT19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50 IF9JT19mZW9mIChfSU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19G SUxFICpfX2ZwKSA7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2Zw KSA7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgOwpleHRlcm4g dm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICopIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxv Y2tmaWxlIChfSU9fRklMRSAqKSA7CiMgNDYyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRl cm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBf X3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpf X3Jlc3RyaWN0KSA7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmlj dCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251 Y192YV9saXN0KSA7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGludCwg X19zc2l6ZV90KSA7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICos IHNpemVfdCkgOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19v ZmY2NF90LCBpbnQsIGludCkgOwpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklM RSAqLCBfX29mZjY0X3QsIGludCkgOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEg KF9JT19GSUxFICopIDsKIyA4MiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDk1ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwoKCgoKdHlwZWRlZiBfR19mcG9zNjRf dCBmcG9zX3Q7CgoKIyAxNDcgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4y LjIvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgi IDEgMwojIDE0OCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNs dWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRpbjsKZXh0ZXJu IHN0cnVjdCBfSU9fRklMRSAqc3Rkb3V0OwpleHRlcm4gc3RydWN0IF9JT19GSUxFICpzdGRlcnI7 CgoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSA7Cgpl eHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpfX25l dykgOwoKCgoKCgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgX19hc21fXyAoIiIgInRt cGZpbGU2NCIpOwoKCgoKCgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIDsKCiMgMTkw ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8u aCIgMwpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgOwojIDIwMiAiL3Vzci9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJu IGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngp CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gaW50IGZjbG9z ZSAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkg OwoKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CiMgMjI1 ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8u aCIgMwoKIyAyMzYgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5j bHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZmlsZW5hbWUsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSBfX2FzbV9f ICgiIiAiZm9wZW42NCIpOwoKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19maWxlbmFtZSwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsIEZJ TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIF9fYXNtX18gKCIiICJmcmVvcGVuNjQiKTsKIyAyNDgg Ii91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5o IiAzCgojIDI1OSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNs dWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hh ciAqX19tb2RlcykgOwojIDI4MCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jl c3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCmV4dGVybiBpbnQg c2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1 ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgOwoKCgoKCmV4 dGVybiB2b2lkIHNldGJ1ZmZlciAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19y ZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zaXplKSA7CgoK ZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gaW50 IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgcHJp bnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGlu dCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKCmV4dGVybiBpbnQgdmZwcmlu dGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt YXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSA7CgpleHRlcm4g aW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3Zh X2xpc3QgX19hcmcpCiAgICAgOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmlj dCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg ICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIDsKCgoKCgpleHRlcm4gaW50IHNucHJpbnRmIChj aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICBfX2F0dHJpYnV0 ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJp bnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlz dCBfX2FyZykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywg MCkpKTsKCiMgMzU4ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2lu Y2x1ZGUvc3RkaW8uaCIgMwoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y bWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv cm1hdCwgLi4uKSA7CgojIDM4OCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKCgpleHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVh bSkgOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBnZXRj aGFyICh2b2lkKSA7CgoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0 cmVhbSkgOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIDsKCgoKCmV4dGVybiBp bnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgoKZXh0ZXJuIGludCBmcHV0 YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBG SUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgOwoKCgoKCgoK CmV4dGVybiBpbnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoK CgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CmV4 dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgOwoKCgoKCmV4dGVybiBpbnQgZ2V0 dyAoRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9f c3RyZWFtKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywg aW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAgICA7CgoKCmV4dGVybiBjaGFy ICpnZXRzIChjaGFyICpfX3MpIDsKCiMgNDg0ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAg OwoKCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpfX3MpIDsKCgoKZXh0ZXJuIGludCB1 bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBzaXplX3QgZnJlYWQg KHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCmV4dGVybiBzaXpl X3QgZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs CiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykg OwoKIyA1MTMgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVk ZS9zdGRpby5oIiAzCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJp Y3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKZXh0ZXJuIHNpemVfdCBmd3Jp dGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6 ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwg bG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChG SUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgOwoK IyA1NTMgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9z dGRpby5oIiAzCgojIDU2MiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIu Mi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpIF9fYXNtX18gKCIiICJmZ2V0cG9z NjQiKTsKCmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190 ICpfX3BvcykgX19hc21fXyAoIiIgImZzZXRwb3M2NCIpOwoKCgoKCgoKCiMgNTgyICIvdXNyL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwoKCmV4 dGVybiB2b2lkIGNsZWFyZXJyIChGSUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZW9mIChG SUxFICpfX3N0cmVhbSkgOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSA7CgoK CgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJu IGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZlcnJvcl91 bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29u c3QgY2hhciAqX19zKSA7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3lzX2Vycmxpc3Qu aCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL3N5c19lcnJsaXN0LmgiIDMKZXh0ZXJuIGlu dCBzeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtdOwoj IDYwOSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0 ZGlvLmgiIDIgMwoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpl eHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgoKZXh0ZXJu IEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21v ZGVzKSA7CgoKZXh0ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgoKZXh0ZXJu IGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgOwojIDY2MiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIHZvaWQgZmxvY2tm aWxlIChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAq X19zdHJlYW0pIDsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIDsK IyA2ODMgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9z dGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMSAzCiMgMzMgIi91c3Iv aW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDMKZXh0ZXJuIF9faW5saW5lIGludAp2cHJpbnRmIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQp7CiAgcmV0 dXJuIHZmcHJpbnRmIChzdGRvdXQsIF9fZm10LCBfX2FyZyk7Cn0KCgpleHRlcm4gX19pbmxpbmUg aW50CmdldGNoYXIgKHZvaWQpCnsKICByZXR1cm4gX0lPX2dldGMgKHN0ZGluKTsKfQoKCgoKZXh0 ZXJuIF9faW5saW5lIGludApnZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKQp7CiAgcmV0dXJuICgo X19mcCktPl9JT19yZWFkX3B0ciA+PSAoX19mcCktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKF9f ZnApIDogKih1bnNpZ25lZCBjaGFyICopIChfX2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKZXh0 ZXJuIF9faW5saW5lIGludApnZXRjaGFyX3VubG9ja2VkICh2b2lkKQp7CiAgcmV0dXJuICgoc3Rk aW4pLT5fSU9fcmVhZF9wdHIgPj0gKHN0ZGluKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoc3Rk aW4pIDogKih1bnNpZ25lZCBjaGFyICopIChzdGRpbiktPl9JT19yZWFkX3B0cisrKTsKfQoKCgoK ZXh0ZXJuIF9faW5saW5lIGludApwdXRjaGFyIChpbnQgX19jKQp7CiAgcmV0dXJuIF9JT19wdXRj IChfX2MsIHN0ZG91dCk7Cn0KCgoKCmV4dGVybiBfX2lubGluZSBpbnQKZnB1dGNfdW5sb2NrZWQg KGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dy aXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3Ry ZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFt KS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmV4dGVybiBfX2lubGluZSBpbnQK cHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19z dHJlYW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19v dmVyZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hh cikgKCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKZXh0ZXJuIF9f aW5saW5lIGludApwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKQp7CiAgcmV0dXJuICgoKHN0ZG91 dCktPl9JT193cml0ZV9wdHIgPj0gKHN0ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxv dyAoc3Rkb3V0LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHN0 ZG91dCktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KIyAxMTEgIi91c3IvaW5jbHVkZS9i aXRzL3N0ZGlvLmgiIDMKZXh0ZXJuIF9faW5saW5lIGludApmZW9mX3VubG9ja2VkIChGSUxFICpf X3N0cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MTApICE9IDApOwp9 CgoKZXh0ZXJuIF9faW5saW5lIGludApmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKQp7 CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgyMCkgIT0gMCk7Cn0KIyA2ODQgIi91 c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAy IDMKCgoKIyA0MSAiZ3NjYW5uZXIuYyIgMgoKIyAxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDEg MwojIDI4ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKCiMgMTc1ICIvdXNyL2luY2x1ZGUvdW5p c3RkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeF9vcHQuaCIgMSAzCiMgMTc2ICIv dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwojIDE5OSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAz CiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKIyAyMDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMjQwICIvdXNy L2luY2x1ZGUvdW5pc3RkLmgiIDMKdHlwZWRlZiBfX2ludHB0cl90IGludHB0cl90OwoKCgoKCgp0 eXBlZGVmIF9fc29ja2xlbl90IHNvY2tsZW5fdDsKIyAyNjAgIi91c3IvaW5jbHVkZS91bmlzdGQu aCIgMwpleHRlcm4gaW50IGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUp IDsKIyAyOTMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmY2NF90IGxzZWVr IChpbnQgX19mZCwgX19vZmY2NF90IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpIF9fYXNtX18gKCIi ICJsc2VlazY0Iik7CiMgMzA2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBj bG9zZSAoaW50IF9fZmQpIDsKCgoKZXh0ZXJuIHNzaXplX3QgcmVhZCAoaW50IF9fZmQsIHZvaWQg Kl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpIDsKCgpleHRlcm4gc3NpemVfdCB3cml0ZSAoaW50IF9f ZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24pIDsKIyAzNTMgIi91c3IvaW5jbHVk ZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHBpcGUgKGludCBfX3BpcGVkZXNbMl0pIDsKIyAzNjIg Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gdW5zaWduZWQgaW50IGFsYXJtICh1bnNp Z25lZCBpbnQgX19zZWNvbmRzKSA7CiMgMzcxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0 ZXJuIHVuc2lnbmVkIGludCBzbGVlcCAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgOwoKCgoKCgpl eHRlcm4gX191c2Vjb25kc190IHVhbGFybSAoX191c2Vjb25kc190IF9fdmFsdWUsIF9fdXNlY29u ZHNfdCBfX2ludGVydmFsKQogICAgIDsKCgoKZXh0ZXJuIGludCB1c2xlZXAgKF9fdXNlY29uZHNf dCBfX3VzZWNvbmRzKSA7CgoKCgoKZXh0ZXJuIGludCBwYXVzZSAodm9pZCkgOwoKCgpleHRlcm4g aW50IGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90 IF9fZ3JvdXApCiAgICAgOwoKCgpleHRlcm4gaW50IGZjaG93biAoaW50IF9fZmQsIF9fdWlkX3Qg X19vd25lciwgX19naWRfdCBfX2dyb3VwKSA7CgoKCgpleHRlcm4gaW50IGxjaG93biAoX19jb25z dCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKQogICAgIDsK CgoKCmV4dGVybiBpbnQgY2hkaXIgKF9fY29uc3QgY2hhciAqX19wYXRoKSA7CgoKCmV4dGVybiBp bnQgZmNoZGlyIChpbnQgX19mZCkgOwojIDQyMyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4 dGVybiBjaGFyICpnZXRjd2QgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19zaXplKSA7CiMgNDM2ICIv dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGNoYXIgKmdldHdkIChjaGFyICpfX2J1Zikg OwoKCgoKZXh0ZXJuIGludCBkdXAgKGludCBfX2ZkKSA7CgoKZXh0ZXJuIGludCBkdXAyIChpbnQg X19mZCwgaW50IF9fZmQyKSA7CgoKZXh0ZXJuIGNoYXIgKipfX2Vudmlyb247CgoKCgoKCgpleHRl cm4gaW50IGV4ZWN2ZSAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2 W10sCiAgICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0IF9fZW52cFtdKSA7CiMgNDY3ICIv dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBleGVjdiAoX19jb25zdCBjaGFyICpf X3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10pIDsKCgoKZXh0ZXJuIGludCBleGVjbGUgKF9f Y29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pIDsKCgoKZXh0ZXJu IGludCBleGVjbCAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4u LikgOwoKCgpleHRlcm4gaW50IGV4ZWN2cCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIGNoYXIgKl9f Y29uc3QgX19hcmd2W10pIDsKCgoKCmV4dGVybiBpbnQgZXhlY2xwIChfX2NvbnN0IGNoYXIgKl9f ZmlsZSwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSA7CgoKCgpleHRlcm4gaW50IG5pY2UgKGlu dCBfX2luYykgOwoKCgoKZXh0ZXJuIHZvaWQgX2V4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1 dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvY29uZm5h bWUuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2NvbmZuYW1lLmgiIDMKZW51bQogIHsK ICAgIF9QQ19MSU5LX01BWCwKCiAgICBfUENfTUFYX0NBTk9OLAoKICAgIF9QQ19NQVhfSU5QVVQs CgogICAgX1BDX05BTUVfTUFYLAoKICAgIF9QQ19QQVRIX01BWCwKCiAgICBfUENfUElQRV9CVUYs CgogICAgX1BDX0NIT1dOX1JFU1RSSUNURUQsCgogICAgX1BDX05PX1RSVU5DLAoKICAgIF9QQ19W RElTQUJMRSwKCiAgICBfUENfU1lOQ19JTywKCiAgICBfUENfQVNZTkNfSU8sCgogICAgX1BDX1BS SU9fSU8sCgogICAgX1BDX1NPQ0tfTUFYQlVGLAoKICAgIF9QQ19GSUxFU0laRUJJVFMsCgogICAg X1BDX1JFQ19JTkNSX1hGRVJfU0laRSwKCiAgICBfUENfUkVDX01BWF9YRkVSX1NJWkUsCgogICAg X1BDX1JFQ19NSU5fWEZFUl9TSVpFLAoKICAgIF9QQ19SRUNfWEZFUl9BTElHTiwKCiAgICBfUENf QUxMT0NfU0laRV9NSU4sCgogICAgX1BDX1NZTUxJTktfTUFYCgogIH07CgoKZW51bQogIHsKICAg IF9TQ19BUkdfTUFYLAoKICAgIF9TQ19DSElMRF9NQVgsCgogICAgX1NDX0NMS19UQ0ssCgogICAg X1NDX05HUk9VUFNfTUFYLAoKICAgIF9TQ19PUEVOX01BWCwKCiAgICBfU0NfU1RSRUFNX01BWCwK CiAgICBfU0NfVFpOQU1FX01BWCwKCiAgICBfU0NfSk9CX0NPTlRST0wsCgogICAgX1NDX1NBVkVE X0lEUywKCiAgICBfU0NfUkVBTFRJTUVfU0lHTkFMUywKCiAgICBfU0NfUFJJT1JJVFlfU0NIRURV TElORywKCiAgICBfU0NfVElNRVJTLAoKICAgIF9TQ19BU1lOQ0hST05PVVNfSU8sCgogICAgX1ND X1BSSU9SSVRJWkVEX0lPLAoKICAgIF9TQ19TWU5DSFJPTklaRURfSU8sCgogICAgX1NDX0ZTWU5D LAoKICAgIF9TQ19NQVBQRURfRklMRVMsCgogICAgX1NDX01FTUxPQ0ssCgogICAgX1NDX01FTUxP Q0tfUkFOR0UsCgogICAgX1NDX01FTU9SWV9QUk9URUNUSU9OLAoKICAgIF9TQ19NRVNTQUdFX1BB U1NJTkcsCgogICAgX1NDX1NFTUFQSE9SRVMsCgogICAgX1NDX1NIQVJFRF9NRU1PUllfT0JKRUNU UywKCiAgICBfU0NfQUlPX0xJU1RJT19NQVgsCgogICAgX1NDX0FJT19NQVgsCgogICAgX1NDX0FJ T19QUklPX0RFTFRBX01BWCwKCiAgICBfU0NfREVMQVlUSU1FUl9NQVgsCgogICAgX1NDX01RX09Q RU5fTUFYLAoKICAgIF9TQ19NUV9QUklPX01BWCwKCiAgICBfU0NfVkVSU0lPTiwKCiAgICBfU0Nf UEFHRVNJWkUsCgoKICAgIF9TQ19SVFNJR19NQVgsCgogICAgX1NDX1NFTV9OU0VNU19NQVgsCgog ICAgX1NDX1NFTV9WQUxVRV9NQVgsCgogICAgX1NDX1NJR1FVRVVFX01BWCwKCiAgICBfU0NfVElN RVJfTUFYLAoKCgoKICAgIF9TQ19CQ19CQVNFX01BWCwKCiAgICBfU0NfQkNfRElNX01BWCwKCiAg ICBfU0NfQkNfU0NBTEVfTUFYLAoKICAgIF9TQ19CQ19TVFJJTkdfTUFYLAoKICAgIF9TQ19DT0xM X1dFSUdIVFNfTUFYLAoKICAgIF9TQ19FUVVJVl9DTEFTU19NQVgsCgogICAgX1NDX0VYUFJfTkVT VF9NQVgsCgogICAgX1NDX0xJTkVfTUFYLAoKICAgIF9TQ19SRV9EVVBfTUFYLAoKICAgIF9TQ19D SEFSQ0xBU1NfTkFNRV9NQVgsCgoKICAgIF9TQ18yX1ZFUlNJT04sCgogICAgX1NDXzJfQ19CSU5E LAoKICAgIF9TQ18yX0NfREVWLAoKICAgIF9TQ18yX0ZPUlRfREVWLAoKICAgIF9TQ18yX0ZPUlRf UlVOLAoKICAgIF9TQ18yX1NXX0RFViwKCiAgICBfU0NfMl9MT0NBTEVERUYsCgoKICAgIF9TQ19Q SUksCgogICAgX1NDX1BJSV9YVEksCgogICAgX1NDX1BJSV9TT0NLRVQsCgogICAgX1NDX1BJSV9J TlRFUk5FVCwKCiAgICBfU0NfUElJX09TSSwKCiAgICBfU0NfUE9MTCwKCiAgICBfU0NfU0VMRUNU LAoKICAgIF9TQ19VSU9fTUFYSU9WLAoKICAgIF9TQ19JT1ZfTUFYID0gX1NDX1VJT19NQVhJT1Ys CgogICAgX1NDX1BJSV9JTlRFUk5FVF9TVFJFQU0sCgogICAgX1NDX1BJSV9JTlRFUk5FVF9ER1JB TSwKCiAgICBfU0NfUElJX09TSV9DT1RTLAoKICAgIF9TQ19QSUlfT1NJX0NMVFMsCgogICAgX1ND X1BJSV9PU0lfTSwKCiAgICBfU0NfVF9JT1ZfTUFYLAoKCgogICAgX1NDX1RIUkVBRFMsCgogICAg X1NDX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUywKCiAgICBfU0NfR0VUR1JfUl9TSVpFX01BWCwKCiAg ICBfU0NfR0VUUFdfUl9TSVpFX01BWCwKCiAgICBfU0NfTE9HSU5fTkFNRV9NQVgsCgogICAgX1ND X1RUWV9OQU1FX01BWCwKCiAgICBfU0NfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUywKCiAg ICBfU0NfVEhSRUFEX0tFWVNfTUFYLAoKICAgIF9TQ19USFJFQURfU1RBQ0tfTUlOLAoKICAgIF9T Q19USFJFQURfVEhSRUFEU19NQVgsCgogICAgX1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUiwKCiAg ICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFLAoKICAgIF9TQ19USFJFQURfUFJJT1JJVFlfU0NI RURVTElORywKCiAgICBfU0NfVEhSRUFEX1BSSU9fSU5IRVJJVCwKCiAgICBfU0NfVEhSRUFEX1BS SU9fUFJPVEVDVCwKCiAgICBfU0NfVEhSRUFEX1BST0NFU1NfU0hBUkVELAoKCiAgICBfU0NfTlBS T0NFU1NPUlNfQ09ORiwKCiAgICBfU0NfTlBST0NFU1NPUlNfT05MTiwKCiAgICBfU0NfUEhZU19Q QUdFUywKCiAgICBfU0NfQVZQSFlTX1BBR0VTLAoKICAgIF9TQ19BVEVYSVRfTUFYLAoKICAgIF9T Q19QQVNTX01BWCwKCgogICAgX1NDX1hPUEVOX1ZFUlNJT04sCgogICAgX1NDX1hPUEVOX1hDVV9W RVJTSU9OLAoKICAgIF9TQ19YT1BFTl9VTklYLAoKICAgIF9TQ19YT1BFTl9DUllQVCwKCiAgICBf U0NfWE9QRU5fRU5IX0kxOE4sCgogICAgX1NDX1hPUEVOX1NITSwKCgogICAgX1NDXzJfQ0hBUl9U RVJNLAoKICAgIF9TQ18yX0NfVkVSU0lPTiwKCiAgICBfU0NfMl9VUEUsCgoKICAgIF9TQ19YT1BF Tl9YUEcyLAoKICAgIF9TQ19YT1BFTl9YUEczLAoKICAgIF9TQ19YT1BFTl9YUEc0LAoKCiAgICBf U0NfQ0hBUl9CSVQsCgogICAgX1NDX0NIQVJfTUFYLAoKICAgIF9TQ19DSEFSX01JTiwKCiAgICBf U0NfSU5UX01BWCwKCiAgICBfU0NfSU5UX01JTiwKCiAgICBfU0NfTE9OR19CSVQsCgogICAgX1ND X1dPUkRfQklULAoKICAgIF9TQ19NQl9MRU5fTUFYLAoKICAgIF9TQ19OWkVSTywKCiAgICBfU0Nf U1NJWkVfTUFYLAoKICAgIF9TQ19TQ0hBUl9NQVgsCgogICAgX1NDX1NDSEFSX01JTiwKCiAgICBf U0NfU0hSVF9NQVgsCgogICAgX1NDX1NIUlRfTUlOLAoKICAgIF9TQ19VQ0hBUl9NQVgsCgogICAg X1NDX1VJTlRfTUFYLAoKICAgIF9TQ19VTE9OR19NQVgsCgogICAgX1NDX1VTSFJUX01BWCwKCgog ICAgX1NDX05MX0FSR01BWCwKCiAgICBfU0NfTkxfTEFOR01BWCwKCiAgICBfU0NfTkxfTVNHTUFY LAoKICAgIF9TQ19OTF9OTUFYLAoKICAgIF9TQ19OTF9TRVRNQVgsCgogICAgX1NDX05MX1RFWFRN QVgsCgoKICAgIF9TQ19YQlM1X0lMUDMyX09GRjMyLAoKICAgIF9TQ19YQlM1X0lMUDMyX09GRkJJ RywKCiAgICBfU0NfWEJTNV9MUDY0X09GRjY0LAoKICAgIF9TQ19YQlM1X0xQQklHX09GRkJJRywK CgogICAgX1NDX1hPUEVOX0xFR0FDWSwKCiAgICBfU0NfWE9QRU5fUkVBTFRJTUUsCgogICAgX1ND X1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMsCgoKICAgIF9TQ19BRFZJU09SWV9JTkZPLAoKICAgIF9T Q19CQVJSSUVSUywKCiAgICBfU0NfQkFTRSwKCiAgICBfU0NfQ19MQU5HX1NVUFBPUlQsCgogICAg X1NDX0NfTEFOR19TVVBQT1JUX1IsCgogICAgX1NDX0NMT0NLX1NFTEVDVElPTiwKCiAgICBfU0Nf Q1BVVElNRSwKCiAgICBfU0NfVEhSRUFEX0NQVVRJTUUsCgogICAgX1NDX0RFVklDRV9JTywKCiAg ICBfU0NfREVWSUNFX1NQRUNJRklDLAoKICAgIF9TQ19ERVZJQ0VfU1BFQ0lGSUNfUiwKCiAgICBf U0NfRkRfTUdNVCwKCiAgICBfU0NfRklGTywKCiAgICBfU0NfUElQRSwKCiAgICBfU0NfRklMRV9B VFRSSUJVVEVTLAoKICAgIF9TQ19GSUxFX0xPQ0tJTkcsCgogICAgX1NDX0ZJTEVfU1lTVEVNLAoK ICAgIF9TQ19NT05PVE9OSUNfQ0xPQ0ssCgogICAgX1NDX01VTFRJX1BST0NFU1MsCgogICAgX1ND X1NJTkdMRV9QUk9DRVNTLAoKICAgIF9TQ19ORVRXT1JLSU5HLAoKICAgIF9TQ19SRUFERVJfV1JJ VEVSX0xPQ0tTLAoKICAgIF9TQ19TUElOX0xPQ0tTLAoKICAgIF9TQ19SRUdFWFAsCgogICAgX1ND X1JFR0VYX1ZFUlNJT04sCgogICAgX1NDX1NIRUxMLAoKICAgIF9TQ19TSUdOQUxTLAoKICAgIF9T Q19TUEFXTiwKCiAgICBfU0NfU1BPUkFESUNfU0VSVkVSLAoKICAgIF9TQ19USFJFQURfU1BPUkFE SUNfU0VSVkVSLAoKICAgIF9TQ19TWVNURU1fREFUQUJBU0UsCgogICAgX1NDX1NZU1RFTV9EQVRB QkFTRV9SLAoKICAgIF9TQ19USU1FT1VUUywKCiAgICBfU0NfVFlQRURfTUVNT1JZX09CSkVDVFMs CgogICAgX1NDX1VTRVJfR1JPVVBTLAoKICAgIF9TQ19VU0VSX0dST1VQU19SLAoKICAgIF9TQ18y X1BCUywKCiAgICBfU0NfMl9QQlNfQUNDT1VOVElORywKCiAgICBfU0NfMl9QQlNfTE9DQVRFLAoK ICAgIF9TQ18yX1BCU19NRVNTQUdFLAoKICAgIF9TQ18yX1BCU19UUkFDSywKCiAgICBfU0NfU1lN TE9PUF9NQVgsCgogICAgX1NDX1NUUkVBTVMsCgogICAgX1NDXzJfUEJTX0NIRUNLUE9JTlQsCgoK ICAgIF9TQ19WNl9JTFAzMl9PRkYzMiwKCiAgICBfU0NfVjZfSUxQMzJfT0ZGQklHLAoKICAgIF9T Q19WNl9MUDY0X09GRjY0LAoKICAgIF9TQ19WNl9MUEJJR19PRkZCSUcsCgoKICAgIF9TQ19IT1NU X05BTUVfTUFYLAoKICAgIF9TQ19UUkFDRSwKCiAgICBfU0NfVFJBQ0VfRVZFTlRfRklMVEVSLAoK ICAgIF9TQ19UUkFDRV9JTkhFUklULAoKICAgIF9TQ19UUkFDRV9MT0cKCiAgfTsKCgoKCgplbnVt CiAgewogICAgX0NTX1BBVEgsCgoKCgogICAgX0NTX0xGU19DRkxBR1MgPSAxMDAwLAoKICAgIF9D U19MRlNfTERGTEFHUywKCiAgICBfQ1NfTEZTX0xJQlMsCgogICAgX0NTX0xGU19MSU5URkxBR1Ms CgogICAgX0NTX0xGUzY0X0NGTEFHUywKCiAgICBfQ1NfTEZTNjRfTERGTEFHUywKCiAgICBfQ1Nf TEZTNjRfTElCUywKCiAgICBfQ1NfTEZTNjRfTElOVEZMQUdTLAojIDU2MyAiL3Vzci9pbmNsdWRl L2JpdHMvY29uZm5hbWUuaCIgMwogICAgX0NTX1Y2X1dJRFRIX1JFU1RSSUNURURfRU5WUwoKICB9 OwojIDUwMSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgpleHRlcm4gbG9uZyBpbnQgcGF0 aGNvbmYgKF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKSA7CgoKZXh0ZXJuIGxvbmcg aW50IGZwYXRoY29uZiAoaW50IF9fZmQsIGludCBfX25hbWUpIDsKCgpleHRlcm4gbG9uZyBpbnQg c3lzY29uZiAoaW50IF9fbmFtZSkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRl cm4gc2l6ZV90IGNvbmZzdHIgKGludCBfX25hbWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4p IDsKCgoKCmV4dGVybiBfX3BpZF90IGdldHBpZCAodm9pZCkgOwoKCmV4dGVybiBfX3BpZF90IGdl dHBwaWQgKHZvaWQpIDsKCgoKCmV4dGVybiBfX3BpZF90IGdldHBncnAgKHZvaWQpIDsKIyA1MzYg Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19waWRfdCBfX2dldHBnaWQgKF9fcGlk X3QgX19waWQpIDsKIyA1NDUgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHNl dHBnaWQgKF9fcGlkX3QgX19waWQsIF9fcGlkX3QgX19wZ2lkKSA7CiMgNTYyICIvdXNyL2luY2x1 ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBzZXRwZ3JwICh2b2lkKSA7CiMgNTgwICIvdXNyL2lu Y2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fcGlkX3Qgc2V0c2lkICh2b2lkKSA7CgoKCgoKCgpl eHRlcm4gX191aWRfdCBnZXR1aWQgKHZvaWQpIDsKCgpleHRlcm4gX191aWRfdCBnZXRldWlkICh2 b2lkKSA7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lkICh2b2lkKSA7CgoKZXh0ZXJuIF9fZ2lkX3Qg Z2V0ZWdpZCAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBnZXRncm91cHMgKGludCBfX3NpemUsIF9f Z2lkX3QgX19saXN0W10pIDsKIyA2MTMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4g aW50IHNldHVpZCAoX191aWRfdCBfX3VpZCkgOwoKCgoKZXh0ZXJuIGludCBzZXRyZXVpZCAoX191 aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19ldWlkKSA7CgoKCgpleHRlcm4gaW50IHNldGV1aWQgKF9f dWlkX3QgX191aWQpIDsKCgoKCgoKZXh0ZXJuIGludCBzZXRnaWQgKF9fZ2lkX3QgX19naWQpIDsK CgoKCmV4dGVybiBpbnQgc2V0cmVnaWQgKF9fZ2lkX3QgX19yZ2lkLCBfX2dpZF90IF9fZWdpZCkg OwoKCgoKZXh0ZXJuIGludCBzZXRlZ2lkIChfX2dpZF90IF9fZ2lkKSA7CgoKCgoKCmV4dGVybiBf X3BpZF90IGZvcmsgKHZvaWQpIDsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgdmZvcmsgKHZvaWQpIDsK CgoKCgpleHRlcm4gY2hhciAqdHR5bmFtZSAoaW50IF9fZmQpIDsKCgoKZXh0ZXJuIGludCB0dHlu YW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSA7CgoKCmV4dGVy biBpbnQgaXNhdHR5IChpbnQgX19mZCkgOwoKCgoKCmV4dGVybiBpbnQgdHR5c2xvdCAodm9pZCkg OwoKCgoKZXh0ZXJuIGludCBsaW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFy ICpfX3RvKSA7CgoKCmV4dGVybiBpbnQgc3ltbGluayAoX19jb25zdCBjaGFyICpfX2Zyb20sIF9f Y29uc3QgY2hhciAqX190bykgOwoKCgoKZXh0ZXJuIGludCByZWFkbGluayAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fcGF0aCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IF9fbGVuKSA7CgoKCmV4dGVybiBpbnQgdW5saW5rIChfX2NvbnN0IGNo YXIgKl9fbmFtZSkgOwoKCmV4dGVybiBpbnQgcm1kaXIgKF9fY29uc3QgY2hhciAqX19wYXRoKSA7 CgoKCmV4dGVybiBfX3BpZF90IHRjZ2V0cGdycCAoaW50IF9fZmQpIDsKCgpleHRlcm4gaW50IHRj c2V0cGdycCAoaW50IF9fZmQsIF9fcGlkX3QgX19wZ3JwX2lkKSA7CgoKCmV4dGVybiBjaGFyICpn ZXRsb2dpbiAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBnZXRsb2dpbl9yIChjaGFyICpfX25hbWUs IHNpemVfdCBfX25hbWVfbGVuKSA7CgoKCgpleHRlcm4gaW50IHNldGxvZ2luIChfX2NvbnN0IGNo YXIgKl9fbmFtZSkgOwojIDcyNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2dldG9wdC5oIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVy biBjaGFyICpvcHRhcmc7CiMgNjEgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwpleHRlcm4gaW50 IG9wdGluZDsKCgoKCmV4dGVybiBpbnQgb3B0ZXJyOwoKCgpleHRlcm4gaW50IG9wdG9wdDsKIyAx NDUgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwpleHRlcm4gaW50IGdldG9wdCAoaW50IF9fX2Fy Z2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LCBjb25zdCBjaGFyICpfX3Nob3J0b3B0cyk7CiMgNzI3 ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgoKCgoKZXh0ZXJuIGludCBnZXRob3N0bmFt ZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIDsKCgoKCgoKZXh0ZXJuIGludCBzZXRob3N0 bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgOwoKCgpleHRlcm4gaW50 IHNldGhvc3RpZCAobG9uZyBpbnQgX19pZCkgOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFt ZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBzZXRkb21haW5uYW1l IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSA7CgoKCgoKZXh0ZXJuIGludCB2 aGFuZ3VwICh2b2lkKSA7CgoKZXh0ZXJuIGludCByZXZva2UgKF9fY29uc3QgY2hhciAqX19maWxl KSA7CgoKCgoKCgpleHRlcm4gaW50IHByb2ZpbCAodW5zaWduZWQgc2hvcnQgaW50ICpfX3NhbXBs ZV9idWZmZXIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vZmZz ZXQsIHVuc2lnbmVkIGludCBfX3NjYWxlKSA7CgoKCgoKZXh0ZXJuIGludCBhY2N0IChfX2NvbnN0 IGNoYXIgKl9fbmFtZSkgOwoKCgpleHRlcm4gY2hhciAqZ2V0dXNlcnNoZWxsICh2b2lkKSA7CmV4 dGVybiB2b2lkIGVuZHVzZXJzaGVsbCAodm9pZCkgOwpleHRlcm4gdm9pZCBzZXR1c2Vyc2hlbGwg KHZvaWQpIDsKCgoKCgpleHRlcm4gaW50IGRhZW1vbiAoaW50IF9fbm9jaGRpciwgaW50IF9fbm9j bG9zZSkgOwoKCgoKCgpleHRlcm4gaW50IGNocm9vdCAoX19jb25zdCBjaGFyICpfX3BhdGgpIDsK CgoKZXh0ZXJuIGNoYXIgKmdldHBhc3MgKF9fY29uc3QgY2hhciAqX19wcm9tcHQpIDsKCgoKCgpl eHRlcm4gaW50IGZzeW5jIChpbnQgX19mZCkgOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgZ2V0aG9z dGlkICh2b2lkKSA7CgoKZXh0ZXJuIHZvaWQgc3luYyAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBn ZXRwYWdlc2l6ZSAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKZXh0 ZXJuIGludCB0cnVuY2F0ZSAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmNjRfdCBfX2xlbmd0 aCkgX19hc21fXyAoIiIgInRydW5jYXRlNjQiKTsKIyA4NDQgIi91c3IvaW5jbHVkZS91bmlzdGQu aCIgMwpleHRlcm4gaW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX2xlbmd0aCkg X19hc21fXyAoIiIgImZ0cnVuY2F0ZTY0Iik7CiMgODU3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi IDMKZXh0ZXJuIGludCBnZXRkdGFibGVzaXplICh2b2lkKSA7CiMgODY2ICIvdXNyL2luY2x1ZGUv dW5pc3RkLmgiIDMKZXh0ZXJuIGludCBicmsgKHZvaWQgKl9fYWRkcikgOwoKCgoKCmV4dGVybiB2 b2lkICpzYnJrIChpbnRwdHJfdCBfX2RlbHRhKSA7CiMgODg3ICIvdXNyL2luY2x1ZGUvdW5pc3Rk LmgiIDMKZXh0ZXJuIGxvbmcgaW50IHN5c2NhbGwgKGxvbmcgaW50IF9fc3lzbm8sIC4uLikgOwoj IDkxMCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgbG9ja2YgKGludCBfX2Zk LCBpbnQgX19jbWQsIF9fb2ZmNjRfdCBfX2xlbikgX19hc21fXyAoIiIgImxvY2tmNjQiKTsKIyA5 MzggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGZkYXRhc3luYyAoaW50IF9f ZmlsZGVzKSA7CiMgOTgzICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBwdGhy ZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgOwoKCgojIDQzICJnc2Nhbm5lci5jIiAyCgoKCgoK IyAxICJnbGliLmgiIDEKIyAzMCAiZ2xpYi5oIgojIDEgIi4uL2dsaWIvZ2FsbG9jYS5oIiAxCiMg MzAgIi4uL2dsaWIvZ2FsbG9jYS5oIgojIDEgIi4uL2dsaWIvZ3R5cGVzLmgiIDEKIyAzMCAiLi4v Z2xpYi9ndHlwZXMuaCIKIyAxICIuLi9nbGliY29uZmlnLmgiIDEKIyA5ICIuLi9nbGliY29uZmln LmgiCiMgMSAiLi4vZ2xpYi9nbWFjcm9zLmgiIDEKIyAzNiAiLi4vZ2xpYi9nbWFjcm9zLmgiCiMg MSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMKIyAxNTEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIv aW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMgMzcgIi4uL2dsaWIv Z21hY3Jvcy5oIiAyCiMgMTAgIi4uL2dsaWJjb25maWcuaCIgMgoKIyAxICIvdXNyL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIv dXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgi IDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUv c3lzbGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4yLjIvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTMyICIvdXNyL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvbGltaXRzLmgiIDEgMwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9i aXRzL3Bvc2l4MV9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAx IDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvbGludXgvbGltaXRzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0u aCIgMiAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAi L3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3Np eDJfbGltLmgiIDEgMwojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAxMzMgIi91 c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yLjIvaW5jbHVkZS9saW1pdHMuaCIg MiAzCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRl L3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjIuMi9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAxMiAiLi4vZ2xpYmNvbmZpZy5oIiAyCiMg MSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIuMi9pbmNsdWRlL2Zsb2F0 LmgiIDEgMwojIDEzICIuLi9nbGliY29uZmlnLmgiIDIKCgoKCiMgMzYgIi4uL2dsaWJjb25maWcu aCIKdHlwZWRlZiBzaWduZWQgY2hhciBnaW50ODsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGd1aW50 ODsKdHlwZWRlZiBzaWduZWQgc2hvcnQgZ2ludDE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGd1 aW50MTY7CgoKdHlwZWRlZiBzaWduZWQgaW50IGdpbnQzMjsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg Z3VpbnQzMjsKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGdpbnQ2 NDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBndWludDY0OwojIDU5 ICIuLi9nbGliY29uZmlnLmgiCnR5cGVkZWYgc2lnbmVkIGludCBnc3NpemU7CnR5cGVkZWYgdW5z aWduZWQgaW50IGdzaXplOwojIDExMyAiLi4vZ2xpYmNvbmZpZy5oIgp0eXBlZGVmIHN0cnVjdCBf R1N0YXRpY011dGV4IEdTdGF0aWNNdXRleDsKc3RydWN0IF9HU3RhdGljTXV0ZXgKewogIHN0cnVj dCBfR011dGV4ICpydW50aW1lX211dGV4OwogIHVuaW9uIHsKICAgIGNoYXIgcGFkWzI0XTsKICAg IGRvdWJsZSBkdW1teV9kb3VibGU7CiAgICB2b2lkICpkdW1teV9wb2ludGVyOwogICAgbG9uZyBk dW1teV9sb25nOwogIH0gc3RhdGljX211dGV4Owp9OwoKCgoKCgp0eXBlZGVmIHVuaW9uIF9HU3lz dGVtVGhyZWFkIEdTeXN0ZW1UaHJlYWQ7CnVuaW9uIF9HU3lzdGVtVGhyZWFkCnsKICBjaGFyIGRh dGFbNF07CiAgZG91YmxlIGR1bW15X2RvdWJsZTsKICB2b2lkICpkdW1teV9wb2ludGVyOwogIGxv bmcgZHVtbXlfbG9uZzsKfTsKIyAxNzAgIi4uL2dsaWJjb25maWcuaCIKCiMgMzEgIi4uL2dsaWIv Z3R5cGVzLmgiIDIKCgojIDQxICIuLi9nbGliL2d0eXBlcy5oIgp0eXBlZGVmIGNoYXIgZ2NoYXI7 CnR5cGVkZWYgc2hvcnQgZ3Nob3J0Owp0eXBlZGVmIGxvbmcgZ2xvbmc7CnR5cGVkZWYgaW50IGdp bnQ7CnR5cGVkZWYgZ2ludCBnYm9vbGVhbjsKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBndWNoYXI7 CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgZ3VzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGd1 bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgZ3VpbnQ7Cgp0eXBlZGVmIGZsb2F0IGdmbG9hdDsK dHlwZWRlZiBkb3VibGUgZ2RvdWJsZTsKIyA2NiAiLi4vZ2xpYi9ndHlwZXMuaCIKdHlwZWRlZiB2 b2lkKiBncG9pbnRlcjsKdHlwZWRlZiBjb25zdCB2b2lkICpnY29uc3Rwb2ludGVyOwoKdHlwZWRl ZiBnaW50ICgqR0NvbXBhcmVGdW5jKSAoZ2NvbnN0cG9pbnRlciBhLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBiKTsKdHlwZWRl ZiBnaW50ICgqR0NvbXBhcmVEYXRhRnVuYykgKGdjb25zdHBvaW50ZXIgYSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgYiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVz ZXJfZGF0YSk7CnR5cGVkZWYgZ2Jvb2xlYW4gKCpHRXF1YWxGdW5jKSAoZ2NvbnN0cG9pbnRlciBh LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0 cG9pbnRlciBiKTsKdHlwZWRlZiB2b2lkICgqR0Rlc3Ryb3lOb3RpZnkpIChncG9pbnRlciBkYXRh KTsKdHlwZWRlZiB2b2lkICgqR0Z1bmMpIChncG9pbnRlciBkYXRhLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKdHlw ZWRlZiBndWludCAoKkdIYXNoRnVuYykgKGdjb25zdHBvaW50ZXIga2V5KTsKdHlwZWRlZiB2b2lk ICgqR0hGdW5jKSAoZ3BvaW50ZXIga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwp0eXBlZGVmIHZv aWQgKCpHRnJlZUZ1bmMpIChncG9pbnRlciBkYXRhKTsKIyAzMjkgIi4uL2dsaWIvZ3R5cGVzLmgi CnR5cGVkZWYgdW5pb24gX0dEb3VibGVJRUVFNzU0IEdEb3VibGVJRUVFNzU0Owp0eXBlZGVmIHVu aW9uIF9HRmxvYXRJRUVFNzU0IEdGbG9hdElFRUU3NTQ7CgoKCgoKdW5pb24gX0dGbG9hdElFRUU3 NTQKewogIGdmbG9hdCB2X2Zsb2F0OwogIHN0cnVjdCB7CiAgICBndWludCBtYW50aXNzYSA6IDIz OwogICAgZ3VpbnQgYmlhc2VkX2V4cG9uZW50IDogODsKICAgIGd1aW50IHNpZ24gOiAxOwogIH0g bXBuOwp9Owp1bmlvbiBfR0RvdWJsZUlFRUU3NTQKewogIGdkb3VibGUgdl9kb3VibGU7CiAgc3Ry dWN0IHsKICAgIGd1aW50IG1hbnRpc3NhX2xvdyA6IDMyOwogICAgZ3VpbnQgbWFudGlzc2FfaGln aCA6IDIwOwogICAgZ3VpbnQgYmlhc2VkX2V4cG9uZW50IDogMTE7CiAgICBndWludCBzaWduIDog MTsKICB9IG1wbjsKfTsKIyAzNzkgIi4uL2dsaWIvZ3R5cGVzLmgiCnR5cGVkZWYgc3RydWN0IF9H VGltZVZhbCBHVGltZVZhbDsKCnN0cnVjdCBfR1RpbWVWYWwKewogIGdsb25nIHR2X3NlYzsKICBn bG9uZyB0dl91c2VjOwp9OwoKCiMgMzEgIi4uL2dsaWIvZ2FsbG9jYS5oIiAyCiMgMzEgImdsaWIu aCIgMgojIDEgIi4uL2dsaWIvZ2FycmF5LmgiIDEKIyAzMiAiLi4vZ2xpYi9nYXJyYXkuaCIKCgp0 eXBlZGVmIHN0cnVjdCBfR0FycmF5IEdBcnJheTsKdHlwZWRlZiBzdHJ1Y3QgX0dCeXRlQXJyYXkg R0J5dGVBcnJheTsKdHlwZWRlZiBzdHJ1Y3QgX0dQdHJBcnJheSBHUHRyQXJyYXk7CgpzdHJ1Y3Qg X0dBcnJheQp7CiAgZ2NoYXIgKmRhdGE7CiAgZ3VpbnQgbGVuOwp9OwoKc3RydWN0IF9HQnl0ZUFy cmF5CnsKICBndWludDggKmRhdGE7CiAgZ3VpbnQgbGVuOwp9OwoKc3RydWN0IF9HUHRyQXJyYXkK ewogIGdwb2ludGVyICpwZGF0YTsKICBndWludCBsZW47Cn07CiMgNjYgIi4uL2dsaWIvZ2FycmF5 LmgiCkdBcnJheSogZ19hcnJheV9uZXcgKGdib29sZWFuIHplcm9fdGVybWluYXRlZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBjbGVhcl8sCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgZWxlbWVudF9zaXplKTsKR0FycmF5KiBnX2Fy cmF5X3NpemVkX25ldyAoZ2Jvb2xlYW4gemVyb190ZXJtaW5hdGVkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdib29sZWFuIGNsZWFyXywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBndWludCBlbGVtZW50X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ3VpbnQgcmVzZXJ2ZWRfc2l6ZSk7CmdjaGFyKiBnX2FycmF5X2ZyZWUgKEdB cnJheSAqYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4g ZnJlZV9zZWdtZW50KTsKR0FycmF5KiBnX2FycmF5X2FwcGVuZF92YWxzIChHQXJyYXkgKmFycmF5 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBsZW4pOwpHQXJyYXkqIGdf YXJyYXlfcHJlcGVuZF92YWxzIChHQXJyYXkgKmFycmF5LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBndWludCBsZW4pOwpHQXJyYXkqIGdfYXJyYXlfaW5zZXJ0X3ZhbHMgKEdBcnJh eSAqYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgaW5kZXhf LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBsZW4pOwpHQXJyYXkqIGdf YXJyYXlfc2V0X3NpemUgKEdBcnJheSAqYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ3VpbnQgbGVuZ3RoKTsKR0FycmF5KiBnX2FycmF5X3JlbW92ZV9pbmRleCAoR0Fy cmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBpbmRl eF8pOwpHQXJyYXkqIGdfYXJyYXlfcmVtb3ZlX2luZGV4X2Zhc3QgKEdBcnJheSAqYXJyYXksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgaW5kZXhfKTsKdm9pZCBnX2Fy cmF5X3NvcnQgKEdBcnJheSAqYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR0NvbXBhcmVGdW5jIGNvbXBhcmVfZnVuYyk7CnZvaWQgZ19hcnJheV9zb3J0X3dpdGhfZGF0 YSAoR0FycmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ29t cGFyZURhdGFGdW5jIGNvbXBhcmVfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwoKCgoKCgoKR1B0ckFycmF5KiBnX3B0cl9hcnJheV9u ZXcgKHZvaWQpOwpHUHRyQXJyYXkqIGdfcHRyX2FycmF5X3NpemVkX25ldyAoZ3VpbnQgcmVzZXJ2 ZWRfc2l6ZSk7Cmdwb2ludGVyKiBnX3B0cl9hcnJheV9mcmVlIChHUHRyQXJyYXkgKmFycmF5LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gZnJlZV9z ZWcpOwp2b2lkIGdfcHRyX2FycmF5X3NldF9zaXplIChHUHRyQXJyYXkgKmFycmF5LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBsZW5ndGgpOwpncG9pbnRl ciBnX3B0cl9hcnJheV9yZW1vdmVfaW5kZXggKEdQdHJBcnJheSAqYXJyYXksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBpbmRleF8pOwpncG9pbnRlciBn X3B0cl9hcnJheV9yZW1vdmVfaW5kZXhfZmFzdCAoR1B0ckFycmF5ICphcnJheSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IGluZGV4Xyk7Cmdib29sZWFu IGdfcHRyX2FycmF5X3JlbW92ZSAoR1B0ckFycmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpOwpnYm9vbGVhbiBnX3B0cl9h cnJheV9yZW1vdmVfZmFzdCAoR1B0ckFycmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpOwp2b2lkIGdfcHRyX2FycmF5X2Fk ZCAoR1B0ckFycmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdwb2ludGVyIGRhdGEpOwp2b2lkIGdfcHRyX2FycmF5X3NvcnQgKEdQdHJBcnJheSAq YXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ29tcGFy ZUZ1bmMgY29tcGFyZV9mdW5jKTsKdm9pZCBnX3B0cl9hcnJheV9zb3J0X3dpdGhfZGF0YSAoR1B0 ckFycmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdDb21wYXJlRGF0YUZ1bmMgY29tcGFyZV9mdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKCgoKCgoKR0J5dGVBcnJheSog Z19ieXRlX2FycmF5X25ldyAodm9pZCk7CkdCeXRlQXJyYXkqIGdfYnl0ZV9hcnJheV9zaXplZF9u ZXcgKGd1aW50IHJlc2VydmVkX3NpemUpOwpndWludDgqIGdfYnl0ZV9hcnJheV9mcmVlIChHQnl0 ZUFycmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnYm9vbGVhbiBmcmVlX3NlZ21lbnQpOwpHQnl0ZUFycmF5KiBnX2J5dGVfYXJyYXlfYXBwZW5k IChHQnl0ZUFycmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBndWludDggKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ3VpbnQgbGVuKTsKR0J5dGVBcnJheSogZ19ieXRlX2FycmF5X3ByZXBl bmQgKEdCeXRlQXJyYXkgKmFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGd1aW50OCAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBndWludCBsZW4pOwpHQnl0ZUFycmF5KiBnX2J5dGVfYXJyYXlfc2V0 X3NpemUgKEdCeXRlQXJyYXkgKmFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGd1aW50IGxlbmd0aCk7CkdCeXRlQXJyYXkqIGdfYnl0ZV9hcnJheV9yZW1v dmVfaW5kZXggKEdCeXRlQXJyYXkgKmFycmF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGd1aW50IGluZGV4Xyk7CkdCeXRlQXJyYXkqIGdfYnl0ZV9hcnJheV9y ZW1vdmVfaW5kZXhfZmFzdCAoR0J5dGVBcnJheSAqYXJyYXksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgaW5kZXhfKTsKdm9pZCBnX2J5dGVfYXJyYXlf c29ydCAoR0J5dGVBcnJheSAqYXJyYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgR0NvbXBhcmVGdW5jIGNvbXBhcmVfZnVuYyk7CnZvaWQgZ19ieXRlX2FycmF5 X3NvcnRfd2l0aF9kYXRhIChHQnl0ZUFycmF5ICphcnJheSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHQ29tcGFyZURhdGFGdW5jIGNvbXBhcmVfZnVuYywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2Rh dGEpOwoKCgojIDMyICJnbGliLmgiIDIKIyAxICIuLi9nbGliL2dhc3luY3F1ZXVlLmgiIDEKIyAz MCAiLi4vZ2xpYi9nYXN5bmNxdWV1ZS5oIgojIDEgIi4uL2dsaWIvZ3RocmVhZC5oIiAxCiMgMzAg Ii4uL2dsaWIvZ3RocmVhZC5oIgojIDEgIi4uL2dsaWIvZ2Vycm9yLmgiIDEKIyAyNCAiLi4vZ2xp Yi9nZXJyb3IuaCIKIyAxICIuLi9nbGliL2dxdWFyay5oIiAxCiMgMzIgIi4uL2dsaWIvZ3F1YXJr LmgiCgoKdHlwZWRlZiBndWludDMyIEdRdWFyazsKCgoKR1F1YXJrIGdfcXVhcmtfdHJ5X3N0cmlu ZyAoY29uc3QgZ2NoYXIgKnN0cmluZyk7CkdRdWFyayBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmlu ZyAoY29uc3QgZ2NoYXIgKnN0cmluZyk7CkdRdWFyayBnX3F1YXJrX2Zyb21fc3RyaW5nIChjb25z dCBnY2hhciAqc3RyaW5nKTsKY29uc3QgZ2NoYXIqIGdfcXVhcmtfdG9fc3RyaW5nIChHUXVhcmsg cXVhcmspIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwoKCiMgMjUgIi4uL2dsaWIvZ2Vycm9y LmgiIDIKCgoKdHlwZWRlZiBzdHJ1Y3QgX0dFcnJvciBHRXJyb3I7CgpzdHJ1Y3QgX0dFcnJvcgp7 CiAgR1F1YXJrIGRvbWFpbjsKICBnaW50IGNvZGU7CiAgZ2NoYXIgKm1lc3NhZ2U7Cn07CgpHRXJy b3IqIGdfZXJyb3JfbmV3IChHUXVhcmsgZG9tYWluLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdpbnQgY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn Y2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikgX19hdHRy aWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCkdFcnJvciogZ19lcnJv cl9uZXdfbGl0ZXJhbCAoR1F1YXJrIGRvbWFpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnaW50IGNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2No YXIgKm1lc3NhZ2UpOwoKdm9pZCBnX2Vycm9yX2ZyZWUgKEdFcnJvciAqZXJyb3IpOwpHRXJyb3Iq IGdfZXJyb3JfY29weSAoY29uc3QgR0Vycm9yICplcnJvcik7CgpnYm9vbGVhbiBnX2Vycm9yX21h dGNoZXMgKGNvbnN0IEdFcnJvciAqZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR1F1YXJrIGRvbWFpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGNv ZGUpOwoKCgoKdm9pZCBnX3NldF9lcnJvciAoR0Vycm9yICoqZXJyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdRdWFyayBkb21haW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2ludCBjb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdj aGFyICpmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSBfX2F0dHJp YnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCA0LCA1KSkpOwoKCgp2b2lkIGdfcHJvcGFn YXRlX2Vycm9yIChHRXJyb3IgKipkZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdFcnJvciAqc3JjKTsKCgp2b2lkIGdfY2xlYXJfZXJyb3IgKEdFcnJvciAqKmVycik7CgoKCiMg MzEgIi4uL2dsaWIvZ3RocmVhZC5oIiAyCgoKCgoKCgpleHRlcm4gR1F1YXJrIGdfdGhyZWFkX2Vy cm9yX3F1YXJrICh2b2lkKTsKCgp0eXBlZGVmIGVudW0KewogIEdfVEhSRUFEX0VSUk9SX0FHQUlO Cn0gR1RocmVhZEVycm9yOwoKdHlwZWRlZiBncG9pbnRlciAoKkdUaHJlYWRGdW5jKSAoZ3BvaW50 ZXIgZGF0YSk7Cgp0eXBlZGVmIGVudW0KewogIEdfVEhSRUFEX1BSSU9SSVRZX0xPVywKICBHX1RI UkVBRF9QUklPUklUWV9OT1JNQUwsCiAgR19USFJFQURfUFJJT1JJVFlfSElHSCwKICBHX1RIUkVB RF9QUklPUklUWV9VUkdFTlQKfSBHVGhyZWFkUHJpb3JpdHk7Cgp0eXBlZGVmIHN0cnVjdCBfR1Ro cmVhZCBHVGhyZWFkOwpzdHJ1Y3QgX0dUaHJlYWQKewoKICBHVGhyZWFkRnVuYyBmdW5jOwogIGdw b2ludGVyIGRhdGE7CiAgZ2Jvb2xlYW4gam9pbmFibGU7CiAgR1RocmVhZFByaW9yaXR5IHByaW9y aXR5Owp9OwoKdHlwZWRlZiBzdHJ1Y3QgX0dNdXRleCBHTXV0ZXg7CnR5cGVkZWYgc3RydWN0IF9H Q29uZCBHQ29uZDsKdHlwZWRlZiBzdHJ1Y3QgX0dQcml2YXRlIEdQcml2YXRlOwp0eXBlZGVmIHN0 cnVjdCBfR1N0YXRpY1ByaXZhdGUgR1N0YXRpY1ByaXZhdGU7Cgp0eXBlZGVmIHN0cnVjdCBfR1Ro cmVhZEZ1bmN0aW9ucyBHVGhyZWFkRnVuY3Rpb25zOwpzdHJ1Y3QgX0dUaHJlYWRGdW5jdGlvbnMK ewogIEdNdXRleCogKCptdXRleF9uZXcpICh2b2lkKTsKICB2b2lkICgqbXV0ZXhfbG9jaykgKEdN dXRleCAqbXV0ZXgpOwogIGdib29sZWFuICgqbXV0ZXhfdHJ5bG9jaykgKEdNdXRleCAqbXV0ZXgp OwogIHZvaWQgKCptdXRleF91bmxvY2spIChHTXV0ZXggKm11dGV4KTsKICB2b2lkICgqbXV0ZXhf ZnJlZSkgKEdNdXRleCAqbXV0ZXgpOwogIEdDb25kKiAoKmNvbmRfbmV3KSAodm9pZCk7CiAgdm9p ZCAoKmNvbmRfc2lnbmFsKSAoR0NvbmQgKmNvbmQpOwogIHZvaWQgKCpjb25kX2Jyb2FkY2FzdCkg KEdDb25kICpjb25kKTsKICB2b2lkICgqY29uZF93YWl0KSAoR0NvbmQgKmNvbmQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR011dGV4ICptdXRleCk7CiAgZ2Jvb2xlYW4gKCpj b25kX3RpbWVkX3dhaXQpIChHQ29uZCAqY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHTXV0ZXggKm11dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdUaW1lVmFsICplbmRfdGltZSk7CiAgdm9pZCAoKmNvbmRfZnJlZSkgKEdDb25kICpjb25kKTsK ICBHUHJpdmF0ZSogKCpwcml2YXRlX25ldykgKEdEZXN0cm95Tm90aWZ5IGRlc3RydWN0b3IpOwog IGdwb2ludGVyICgqcHJpdmF0ZV9nZXQpIChHUHJpdmF0ZSAqcHJpdmF0ZV9rZXkpOwogIHZvaWQg KCpwcml2YXRlX3NldCkgKEdQcml2YXRlICpwcml2YXRlX2tleSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKTsKICB2b2lkICgqdGhyZWFkX2NyZWF0ZSkg KEdUaHJlYWRGdW5jIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bv aW50ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWxvbmcgc3Rh Y2tfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBqb2lu YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBib3VuZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVGhyZWFkUHJpb3JpdHkgcHJpb3Jp dHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdGhyZWFkLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsKICB2b2lk ICgqdGhyZWFkX3lpZWxkKSAodm9pZCk7CiAgdm9pZCAoKnRocmVhZF9qb2luKSAoZ3BvaW50ZXIg dGhyZWFkKTsKICB2b2lkICgqdGhyZWFkX2V4aXQpICh2b2lkKTsKICB2b2lkICgqdGhyZWFkX3Nl dF9wcmlvcml0eSkoZ3BvaW50ZXIgdGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdUaHJlYWRQcmlvcml0eSBwcmlvcml0eSk7CiAgdm9pZCAoKnRocmVhZF9zZWxmKSAo Z3BvaW50ZXIgdGhyZWFkKTsKICBnYm9vbGVhbiAoKnRocmVhZF9lcXVhbCkgKGdwb2ludGVyIHRo cmVhZDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdGhyZWFk Mik7Cn07CgpleHRlcm4gR1RocmVhZEZ1bmN0aW9ucyBnX3RocmVhZF9mdW5jdGlvbnNfZm9yX2ds aWJfdXNlOwpleHRlcm4gZ2Jvb2xlYW4gZ190aHJlYWRfdXNlX2RlZmF1bHRfaW1wbDsKZXh0ZXJu IGdib29sZWFuIGdfdGhyZWFkc19nb3RfaW5pdGlhbGl6ZWQ7CgoKCgoKdm9pZCBnX3RocmVhZF9p bml0IChHVGhyZWFkRnVuY3Rpb25zICp2dGFibGUpOwojIDEyNyAiLi4vZ2xpYi9ndGhyZWFkLmgi CnZvaWQgZ190aHJlYWRfaW5pdF93aXRoX2Vycm9yY2hlY2tfbXV0ZXhlcyAoR1RocmVhZEZ1bmN0 aW9ucyogdnRhYmxlKTsKIyAxMzcgIi4uL2dsaWIvZ3RocmVhZC5oIgpHTXV0ZXgqIGdfc3RhdGlj X211dGV4X2dldF9tdXRleF9pbXBsIChHTXV0ZXggKiptdXRleCk7CiMgMjAzICIuLi9nbGliL2d0 aHJlYWQuaCIKR1RocmVhZCogZ190aHJlYWRfY3JlYXRlX2Z1bGwgKEdUaHJlYWRGdW5jIGZ1bmMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBndWxvbmcgc3RhY2tfc2l6ZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnYm9vbGVhbiBqb2luYWJsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnYm9vbGVhbiBib3VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHVGhyZWFkUHJpb3JpdHkgcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR0Vycm9yICoqZXJyb3IpOwpHVGhyZWFkKiBnX3RocmVhZF9zZWxmICh2b2lkKTsKdm9pZCBn X3RocmVhZF9leGl0IChncG9pbnRlciByZXR2YWwpOwpncG9pbnRlciBnX3RocmVhZF9qb2luIChH VGhyZWFkICp0aHJlYWQpOwoKdm9pZCBnX3RocmVhZF9zZXRfcHJpb3JpdHkgKEdUaHJlYWQgKnRo cmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVGhyZWFkUHJpb3JpdHkgcHJp b3JpdHkpOwojIDIyOCAiLi4vZ2xpYi9ndGhyZWFkLmgiCnZvaWQgZ19zdGF0aWNfbXV0ZXhfaW5p dCAoR1N0YXRpY011dGV4ICptdXRleCk7CnZvaWQgZ19zdGF0aWNfbXV0ZXhfZnJlZSAoR1N0YXRp Y011dGV4ICptdXRleCk7CgpzdHJ1Y3QgX0dTdGF0aWNQcml2YXRlCnsKCiAgZ3VpbnQgaW5kZXg7 Cn07Cgp2b2lkIGdfc3RhdGljX3ByaXZhdGVfaW5pdCAoR1N0YXRpY1ByaXZhdGUgKnByaXZhdGVf a2V5KTsKZ3BvaW50ZXIgZ19zdGF0aWNfcHJpdmF0ZV9nZXQgKEdTdGF0aWNQcml2YXRlICpwcml2 YXRlX2tleSk7CnZvaWQgZ19zdGF0aWNfcHJpdmF0ZV9zZXQgKEdTdGF0aWNQcml2YXRlICpwcml2 YXRlX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50 ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ry b3lOb3RpZnkgbm90aWZ5KTsKdm9pZCBnX3N0YXRpY19wcml2YXRlX2ZyZWUgKEdTdGF0aWNQcml2 YXRlICpwcml2YXRlX2tleSk7Cgp0eXBlZGVmIHN0cnVjdCBfR1N0YXRpY1JlY011dGV4IEdTdGF0 aWNSZWNNdXRleDsKc3RydWN0IF9HU3RhdGljUmVjTXV0ZXgKewoKICBHU3RhdGljTXV0ZXggbXV0 ZXg7CiAgZ3VpbnQgZGVwdGg7CiAgR1N5c3RlbVRocmVhZCBvd25lcjsKfTsKCgp2b2lkIGdfc3Rh dGljX3JlY19tdXRleF9pbml0IChHU3RhdGljUmVjTXV0ZXggKm11dGV4KTsKdm9pZCBnX3N0YXRp Y19yZWNfbXV0ZXhfbG9jayAoR1N0YXRpY1JlY011dGV4ICptdXRleCk7Cmdib29sZWFuIGdfc3Rh dGljX3JlY19tdXRleF90cnlsb2NrIChHU3RhdGljUmVjTXV0ZXggKm11dGV4KTsKdm9pZCBnX3N0 YXRpY19yZWNfbXV0ZXhfdW5sb2NrIChHU3RhdGljUmVjTXV0ZXggKm11dGV4KTsKdm9pZCBnX3N0 YXRpY19yZWNfbXV0ZXhfbG9ja19mdWxsIChHU3RhdGljUmVjTXV0ZXggKm11dGV4LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IGRlcHRoKTsKZ3VpbnQgZ19z dGF0aWNfcmVjX211dGV4X3VubG9ja19mdWxsIChHU3RhdGljUmVjTXV0ZXggKm11dGV4KTsKdm9p ZCBnX3N0YXRpY19yZWNfbXV0ZXhfZnJlZSAoR1N0YXRpY1JlY011dGV4ICptdXRleCk7Cgp0eXBl ZGVmIHN0cnVjdCBfR1N0YXRpY1JXTG9jayBHU3RhdGljUldMb2NrOwpzdHJ1Y3QgX0dTdGF0aWNS V0xvY2sKewoKICBHU3RhdGljTXV0ZXggbXV0ZXg7CiAgR0NvbmQgKnJlYWRfY29uZDsKICBHQ29u ZCAqd3JpdGVfY29uZDsKICBndWludCByZWFkX2NvdW50ZXI7CiAgZ2Jvb2xlYW4gaGF2ZV93cml0 ZXI7CiAgZ3VpbnQgd2FudF90b19yZWFkOwogIGd1aW50IHdhbnRfdG9fd3JpdGU7Cn07CgoKCnZv aWQgZ19zdGF0aWNfcndfbG9ja19pbml0IChHU3RhdGljUldMb2NrKiBsb2NrKTsKdm9pZCBnX3N0 YXRpY19yd19sb2NrX3JlYWRlcl9sb2NrIChHU3RhdGljUldMb2NrKiBsb2NrKTsKZ2Jvb2xlYW4g Z19zdGF0aWNfcndfbG9ja19yZWFkZXJfdHJ5bG9jayAoR1N0YXRpY1JXTG9jayogbG9jayk7CnZv aWQgZ19zdGF0aWNfcndfbG9ja19yZWFkZXJfdW5sb2NrIChHU3RhdGljUldMb2NrKiBsb2NrKTsK dm9pZCBnX3N0YXRpY19yd19sb2NrX3dyaXRlcl9sb2NrIChHU3RhdGljUldMb2NrKiBsb2NrKTsK Z2Jvb2xlYW4gZ19zdGF0aWNfcndfbG9ja193cml0ZXJfdHJ5bG9jayAoR1N0YXRpY1JXTG9jayog bG9jayk7CnZvaWQgZ19zdGF0aWNfcndfbG9ja193cml0ZXJfdW5sb2NrIChHU3RhdGljUldMb2Nr KiBsb2NrKTsKdm9pZCBnX3N0YXRpY19yd19sb2NrX2ZyZWUgKEdTdGF0aWNSV0xvY2sqIGxvY2sp OwojIDI5NiAiLi4vZ2xpYi9ndGhyZWFkLmgiCmV4dGVybiB2b2lkIGdsaWJfZHVtbXlfZGVjbCAo dm9pZCk7CiMgMzM4ICIuLi9nbGliL2d0aHJlYWQuaCIKCiMgMzEgIi4uL2dsaWIvZ2FzeW5jcXVl dWUuaCIgMgoKCgp0eXBlZGVmIHN0cnVjdCBfR0FzeW5jUXVldWUgR0FzeW5jUXVldWU7CgoKCgoK R0FzeW5jUXVldWUqIGdfYXN5bmNfcXVldWVfbmV3ICh2b2lkKTsKCgoKCgp2b2lkIGdfYXN5bmNf cXVldWVfbG9jayAoR0FzeW5jUXVldWUgKnF1ZXVlKTsKdm9pZCBnX2FzeW5jX3F1ZXVlX3VubG9j ayAoR0FzeW5jUXVldWUgKnF1ZXVlKTsKIyA1NiAiLi4vZ2xpYi9nYXN5bmNxdWV1ZS5oIgp2b2lk IGdfYXN5bmNfcXVldWVfcmVmIChHQXN5bmNRdWV1ZSAqcXVldWUpOwp2b2lkIGdfYXN5bmNfcXVl dWVfcmVmX3VubG9ja2VkIChHQXN5bmNRdWV1ZSAqcXVldWUpOwp2b2lkIGdfYXN5bmNfcXVldWVf dW5yZWYgKEdBc3luY1F1ZXVlICpxdWV1ZSk7CnZvaWQgZ19hc3luY19xdWV1ZV91bnJlZl9hbmRf dW5sb2NrIChHQXN5bmNRdWV1ZSAqcXVldWUpOwoKCnZvaWQgZ19hc3luY19xdWV1ZV9wdXNoIChH QXN5bmNRdWV1ZSAqcXVldWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdwb2ludGVyIGRhdGEpOwp2b2lkIGdfYXN5bmNfcXVldWVfcHVzaF91bmxvY2tl ZCAoR0FzeW5jUXVldWUgKnF1ZXVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKTsKCgoKZ3BvaW50ZXIgZ19hc3luY19xdWV1ZV9w b3AgKEdBc3luY1F1ZXVlICpxdWV1ZSk7Cmdwb2ludGVyIGdfYXN5bmNfcXVldWVfcG9wX3VubG9j a2VkIChHQXN5bmNRdWV1ZSAqcXVldWUpOwoKCmdwb2ludGVyIGdfYXN5bmNfcXVldWVfdHJ5X3Bv cCAoR0FzeW5jUXVldWUgKnF1ZXVlKTsKZ3BvaW50ZXIgZ19hc3luY19xdWV1ZV90cnlfcG9wX3Vu bG9ja2VkIChHQXN5bmNRdWV1ZSAqcXVldWUpOwoKCgpncG9pbnRlciBnX2FzeW5jX3F1ZXVlX3Rp bWVkX3BvcCAoR0FzeW5jUXVldWUgKnF1ZXVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHVGltZVZhbCAqZW5kX3RpbWUpOwpncG9pbnRlciBnX2FzeW5j X3F1ZXVlX3RpbWVkX3BvcF91bmxvY2tlZCAoR0FzeW5jUXVldWUgKnF1ZXVlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVGltZVZhbCAqZW5kX3RpbWUp OwoKCgoKCgoKZ2ludCBnX2FzeW5jX3F1ZXVlX2xlbmd0aCAoR0FzeW5jUXVldWUgKnF1ZXVlKTsK Z2ludCBnX2FzeW5jX3F1ZXVlX2xlbmd0aF91bmxvY2tlZCAoR0FzeW5jUXVldWUgKnF1ZXVlKTsK CgojIDMzICJnbGliLmgiIDIKIyAxICIuLi9nbGliL2diYWNrdHJhY2UuaCIgMQojIDMyICIuLi9n bGliL2diYWNrdHJhY2UuaCIKCiMgNDMgIi4uL2dsaWIvZ2JhY2t0cmFjZS5oIgp2b2lkIGdfb25f ZXJyb3JfcXVlcnkgKGNvbnN0IGdjaGFyICpwcmdfbmFtZSk7CnZvaWQgZ19vbl9lcnJvcl9zdGFj a190cmFjZSAoY29uc3QgZ2NoYXIgKnByZ19uYW1lKTsKIyA1OSAiLi4vZ2xpYi9nYmFja3RyYWNl LmgiCgojIDM0ICJnbGliLmgiIDIKIyAxICIuLi9nbGliL2djYWNoZS5oIiAxCiMgMzAgIi4uL2ds aWIvZ2NhY2hlLmgiCiMgMSAiLi4vZ2xpYi9nbGlzdC5oIiAxCiMgMzAgIi4uL2dsaWIvZ2xpc3Qu aCIKIyAxICIuLi9nbGliL2dtZW0uaCIgMQojIDMyICIuLi9nbGliL2dtZW0uaCIKCgp0eXBlZGVm IHN0cnVjdCBfR0FsbG9jYXRvciBHQWxsb2NhdG9yOwp0eXBlZGVmIHN0cnVjdCBfR01lbUNodW5r IEdNZW1DaHVuazsKdHlwZWRlZiBzdHJ1Y3QgX0dNZW1WVGFibGUgR01lbVZUYWJsZTsKIyA0OCAi Li4vZ2xpYi9nbWVtLmgiCmdwb2ludGVyIGdfbWFsbG9jIChndWxvbmcgbl9ieXRlcyk7Cmdwb2lu dGVyIGdfbWFsbG9jMCAoZ3Vsb25nIG5fYnl0ZXMpOwpncG9pbnRlciBnX3JlYWxsb2MgKGdwb2lu dGVyIG1lbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vsb25nIG5fYnl0ZXMpOwp2b2lk IGdfZnJlZSAoZ3BvaW50ZXIgbWVtKTsKZ3BvaW50ZXIgZ190cnlfbWFsbG9jIChndWxvbmcgbl9i eXRlcyk7Cmdwb2ludGVyIGdfdHJ5X3JlYWxsb2MgKGdwb2ludGVyIG1lbSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ3Vsb25nIG5fYnl0ZXMpOwojIDcyICIuLi9nbGliL2dtZW0uaCIKc3Ry dWN0IF9HTWVtVlRhYmxlCnsKICBncG9pbnRlciAoKm1hbGxvYykgKGdzaXplIG5fYnl0ZXMpOwog IGdwb2ludGVyICgqcmVhbGxvYykgKGdwb2ludGVyIG1lbSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ3NpemUgbl9ieXRlcyk7CiAgdm9pZCAoKmZyZWUpIChncG9pbnRlciBtZW0pOwoKICBn cG9pbnRlciAoKmNhbGxvYykgKGdzaXplIG5fYmxvY2tzLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBnc2l6ZSBuX2Jsb2NrX2J5dGVzKTsKICBncG9pbnRlciAoKnRyeV9tYWxsb2MpIChnc2l6 ZSBuX2J5dGVzKTsKICBncG9pbnRlciAoKnRyeV9yZWFsbG9jKSAoZ3BvaW50ZXIgbWVtLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBuX2J5dGVzKTsKfTsKdm9pZCBnX21lbV9zZXRf dnRhYmxlIChHTWVtVlRhYmxlICp2dGFibGUpOwpnYm9vbGVhbiBnX21lbV9pc19zeXN0ZW1fbWFs bG9jICh2b2lkKTsKCgoKZXh0ZXJuIEdNZW1WVGFibGUgKmdsaWJfbWVtX3Byb2ZpbGVyX3RhYmxl Owp2b2lkIGdfbWVtX3Byb2ZpbGUgKHZvaWQpOwojIDEzNSAiLi4vZ2xpYi9nbWVtLmgiCkdNZW1D aHVuayogZ19tZW1fY2h1bmtfbmV3IChjb25zdCBnY2hhciAqbmFtZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnaW50IGF0b21fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBndWxvbmcgYXJlYV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdpbnQgdHlwZSk7CnZvaWQgZ19tZW1fY2h1bmtfZGVzdHJveSAoR01lbUNodW5rICptZW1fY2h1 bmspOwpncG9pbnRlciBnX21lbV9jaHVua19hbGxvYyAoR01lbUNodW5rICptZW1fY2h1bmspOwpn cG9pbnRlciBnX21lbV9jaHVua19hbGxvYzAgKEdNZW1DaHVuayAqbWVtX2NodW5rKTsKdm9pZCBn X21lbV9jaHVua19mcmVlIChHTWVtQ2h1bmsgKm1lbV9jaHVuaywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBncG9pbnRlciBtZW0pOwp2b2lkIGdfbWVtX2NodW5rX2NsZWFuIChHTWVt Q2h1bmsgKm1lbV9jaHVuayk7CnZvaWQgZ19tZW1fY2h1bmtfcmVzZXQgKEdNZW1DaHVuayAqbWVt X2NodW5rKTsKdm9pZCBnX21lbV9jaHVua19wcmludCAoR01lbUNodW5rICptZW1fY2h1bmspOwp2 b2lkIGdfbWVtX2NodW5rX2luZm8gKHZvaWQpOwojIDE1NyAiLi4vZ2xpYi9nbWVtLmgiCnZvaWQg Z19ibG93X2NodW5rcyAodm9pZCk7CgoKCgpHQWxsb2NhdG9yKiBnX2FsbG9jYXRvcl9uZXcgKGNv bnN0IGdjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgbl9w cmVhbGxvY3MpOwp2b2lkIGdfYWxsb2NhdG9yX2ZyZWUgKEdBbGxvY2F0b3IgKmFsbG9jYXRvcik7 CgoKCgoKCgoKIyAzMSAiLi4vZ2xpYi9nbGlzdC5oIiAyCgoKCnR5cGVkZWYgc3RydWN0IF9HTGlz dCBHTGlzdDsKCnN0cnVjdCBfR0xpc3QKewogIGdwb2ludGVyIGRhdGE7CiAgR0xpc3QgKm5leHQ7 CiAgR0xpc3QgKnByZXY7Cn07CgoKCnZvaWQgZ19saXN0X3B1c2hfYWxsb2NhdG9yIChHQWxsb2Nh dG9yICphbGxvY2F0b3IpOwp2b2lkIGdfbGlzdF9wb3BfYWxsb2NhdG9yICh2b2lkKTsKR0xpc3Qq IGdfbGlzdF9hbGxvYyAodm9pZCk7CnZvaWQgZ19saXN0X2ZyZWUgKEdMaXN0ICpsaXN0KTsKdm9p ZCBnX2xpc3RfZnJlZV8xIChHTGlzdCAqbGlzdCk7CkdMaXN0KiBnX2xpc3RfYXBwZW5kIChHTGlz dCAqbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKTsK R0xpc3QqIGdfbGlzdF9wcmVwZW5kIChHTGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBncG9pbnRlciBkYXRhKTsKR0xpc3QqIGdfbGlzdF9pbnNlcnQgKEdMaXN0ICps aXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBwb3NpdGlvbik7CkdMaXN0KiBnX2xpc3Rf aW5zZXJ0X3NvcnRlZCAoR0xpc3QgKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ3BvaW50ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ29tcGFy ZUZ1bmMgZnVuYyk7CkdMaXN0KiBnX2xpc3RfaW5zZXJ0X2JlZm9yZSAoR0xpc3QgKmxpc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpc3QgKnNpYmxpbmcsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSk7CkdMaXN0KiBnX2xpc3RfY29uY2F0 IChHTGlzdCAqbGlzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpc3QgKmxp c3QyKTsKR0xpc3QqIGdfbGlzdF9yZW1vdmUgKEdMaXN0ICpsaXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSk7CkdMaXN0KiBnX2xpc3RfcmVtb3Zl X2FsbCAoR0xpc3QgKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0 cG9pbnRlciBkYXRhKTsKR0xpc3QqIGdfbGlzdF9yZW1vdmVfbGluayAoR0xpc3QgKmxpc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpc3QgKmxsaW5rKTsKR0xpc3QqIGdfbGlz dF9kZWxldGVfbGluayAoR0xpc3QgKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR0xpc3QgKmxpbmtfKTsKR0xpc3QqIGdfbGlzdF9yZXZlcnNlIChHTGlzdCAqbGlzdCk7CkdM aXN0KiBnX2xpc3RfY29weSAoR0xpc3QgKmxpc3QpOwpHTGlzdCogZ19saXN0X250aCAoR0xpc3Qg Kmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgbik7CkdMaXN0KiBn X2xpc3RfbnRoX3ByZXYgKEdMaXN0ICpsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGd1aW50IG4pOwpHTGlzdCogZ19saXN0X2ZpbmQgKEdMaXN0ICpsaXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSk7CkdMaXN0KiBnX2xpc3Rf ZmluZF9jdXN0b20gKEdMaXN0ICpsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdjb25zdHBvaW50ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ29t cGFyZUZ1bmMgZnVuYyk7CmdpbnQgZ19saXN0X3Bvc2l0aW9uIChHTGlzdCAqbGlzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlzdCAqbGxpbmspOwpnaW50IGdfbGlzdF9pbmRl eCAoR0xpc3QgKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9p bnRlciBkYXRhKTsKR0xpc3QqIGdfbGlzdF9sYXN0IChHTGlzdCAqbGlzdCk7CkdMaXN0KiBnX2xp c3RfZmlyc3QgKEdMaXN0ICpsaXN0KTsKZ3VpbnQgZ19saXN0X2xlbmd0aCAoR0xpc3QgKmxpc3Qp Owp2b2lkIGdfbGlzdF9mb3JlYWNoIChHTGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHRnVuYyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdw b2ludGVyIHVzZXJfZGF0YSk7CkdMaXN0KiBnX2xpc3Rfc29ydCAoR0xpc3QgKmxpc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NvbXBhcmVGdW5jIGNvbXBhcmVfZnVuYyk7CkdM aXN0KiBnX2xpc3Rfc29ydF93aXRoX2RhdGEgKEdMaXN0ICpsaXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdDb21wYXJlRGF0YUZ1bmMgY29tcGFyZV9mdW5jLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Cmdwb2ludGVyIGdfbGlz dF9udGhfZGF0YSAoR0xpc3QgKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z3VpbnQgbik7CgoKCgoKIyAzMSAiLi4vZ2xpYi9nY2FjaGUuaCIgMgoKCgp0eXBlZGVmIHN0cnVj dCBfR0NhY2hlIEdDYWNoZTsKCnR5cGVkZWYgZ3BvaW50ZXIgKCpHQ2FjaGVOZXdGdW5jKSAoZ3Bv aW50ZXIga2V5KTsKdHlwZWRlZiBncG9pbnRlciAoKkdDYWNoZUR1cEZ1bmMpIChncG9pbnRlciB2 YWx1ZSk7CnR5cGVkZWYgdm9pZCAoKkdDYWNoZURlc3Ryb3lGdW5jKSAoZ3BvaW50ZXIgdmFsdWUp OwoKCgpHQ2FjaGUqIGdfY2FjaGVfbmV3IChHQ2FjaGVOZXdGdW5jIHZhbHVlX25ld19mdW5jLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDYWNoZURlc3Ryb3lGdW5jIHZhbHVlX2Rl c3Ryb3lfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FjaGVEdXBGdW5j IGtleV9kdXBfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FjaGVEZXN0 cm95RnVuYyBrZXlfZGVzdHJveV9mdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdIYXNoRnVuYyBoYXNoX2tleV9mdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdIYXNoRnVuYyBoYXNoX3ZhbHVlX2Z1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR0VxdWFsRnVuYyBrZXlfZXF1YWxfZnVuYyk7CnZvaWQgZ19jYWNoZV9kZXN0cm95IChHQ2Fj aGUgKmNhY2hlKTsKZ3BvaW50ZXIgZ19jYWNoZV9pbnNlcnQgKEdDYWNoZSAqY2FjaGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIga2V5KTsKdm9pZCBnX2NhY2hlX3Jl bW92ZSAoR0NhY2hlICpjYWNoZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY29u c3Rwb2ludGVyIHZhbHVlKTsKdm9pZCBnX2NhY2hlX2tleV9mb3JlYWNoIChHQ2FjaGUgKmNhY2hl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdIRnVuYyBmdW5jLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CnZvaWQgZ19jYWNoZV92 YWx1ZV9mb3JlYWNoIChHQ2FjaGUgKmNhY2hlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdIRnVuYyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVy IHVzZXJfZGF0YSk7CgoKIyAzNSAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xpYi9nY29tcGxldGlvbi5o IiAxCiMgMzIgIi4uL2dsaWIvZ2NvbXBsZXRpb24uaCIKCgp0eXBlZGVmIHN0cnVjdCBfR0NvbXBs ZXRpb24gR0NvbXBsZXRpb247Cgp0eXBlZGVmIGdjaGFyKiAoKkdDb21wbGV0aW9uRnVuYykgKGdw b2ludGVyKTsKCgoKCnR5cGVkZWYgZ2ludCAoKkdDb21wbGV0aW9uU3RybmNtcEZ1bmMpIChjb25z dCBnY2hhciAqczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBnY2hhciAqczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6 ZSBuKTsKCnN0cnVjdCBfR0NvbXBsZXRpb24KewogIEdMaXN0KiBpdGVtczsKICBHQ29tcGxldGlv bkZ1bmMgZnVuYzsKCiAgZ2NoYXIqIHByZWZpeDsKICBHTGlzdCogY2FjaGU7CiAgR0NvbXBsZXRp b25TdHJuY21wRnVuYyBzdHJuY21wX2Z1bmM7Cn07CgpHQ29tcGxldGlvbiogZ19jb21wbGV0aW9u X25ldyAoR0NvbXBsZXRpb25GdW5jIGZ1bmMpOwp2b2lkIGdfY29tcGxldGlvbl9hZGRfaXRlbXMg KEdDb21wbGV0aW9uKiBjbXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHTGlzdCogaXRlbXMpOwp2b2lkIGdfY29tcGxldGlvbl9yZW1vdmVfaXRlbXMgKEdDb21wbGV0 aW9uKiBjbXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlzdCog aXRlbXMpOwp2b2lkIGdfY29tcGxldGlvbl9jbGVhcl9pdGVtcyAoR0NvbXBsZXRpb24qIGNtcCk7 CkdMaXN0KiBnX2NvbXBsZXRpb25fY29tcGxldGUgKEdDb21wbGV0aW9uKiBjbXAsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogcHJlZml4LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIqKiBuZXdfcHJlZml4KTsK dm9pZCBnX2NvbXBsZXRpb25fc2V0X2NvbXBhcmUgKEdDb21wbGV0aW9uICpjbXAsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDb21wbGV0aW9uU3RybmNtcEZ1bmMgc3Ry bmNtcF9mdW5jKTsKdm9pZCBnX2NvbXBsZXRpb25fZnJlZSAoR0NvbXBsZXRpb24qIGNtcCk7CgoK IyAzNiAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xpYi9nY29udmVydC5oIiAxCiMgMzAgIi4uL2dsaWIv Z2NvbnZlcnQuaCIKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi4y L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMxICIuLi9nbGliL2djb252ZXJ0LmgiIDIKCgoKCnR5 cGVkZWYgZW51bQp7CiAgR19DT05WRVJUX0VSUk9SX05PX0NPTlZFUlNJT04sCiAgR19DT05WRVJU X0VSUk9SX0lMTEVHQUxfU0VRVUVOQ0UsCiAgR19DT05WRVJUX0VSUk9SX0ZBSUxFRCwKICBHX0NP TlZFUlRfRVJST1JfUEFSVElBTF9JTlBVVCwKICBHX0NPTlZFUlRfRVJST1JfQkFEX1VSSSwKICBH X0NPTlZFUlRfRVJST1JfTk9UX0FCU09MVVRFX1BBVEgKfSBHQ29udmVydEVycm9yOwoKCkdRdWFy ayBnX2NvbnZlcnRfZXJyb3JfcXVhcmsgKHZvaWQpOwoKCgp0eXBlZGVmIHN0cnVjdCBfR0lDb252 ICpHSUNvbnY7CgpHSUNvbnYgZ19pY29udl9vcGVuIChjb25zdCBnY2hhciAqdG9fY29kZXNldCwK ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqZnJvbV9jb2Rlc2V0KTsKc2l6ZV90 IGdfaWNvbnYgKEdJQ29udiBjb252ZXJ0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIg KippbmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAqaW5ieXRlc19sZWZ0LAogICAg ICAgICAgICAgICAgICAgICAgIGdjaGFyICoqb3V0YnVmLAogICAgICAgICAgICAgICAgICAgICAg IGdzaXplICpvdXRieXRlc19sZWZ0KTsKZ2ludCBnX2ljb252X2Nsb3NlIChHSUNvbnYgY29udmVy dGVyKTsKCgpnY2hhciogZ19jb252ZXJ0IChjb25zdCBnY2hhciAqc3RyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgZ2NoYXIgKnRvX2NvZGVzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgZ2NoYXIgKmZyb21fY29kZXNldCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnc2l6ZSAqYnl0ZXNfcmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnc2l6ZSAqYnl0ZXNfd3JpdHRlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH RXJyb3IgKiplcnJvcik7CmdjaGFyKiBnX2NvbnZlcnRfd2l0aF9pY29udiAoY29uc3QgZ2NoYXIg KnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NpemUgbGVuLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdJQ29udiBjb252ZXJ0ZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ3NpemUgKmJ5dGVzX3JlYWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ3NpemUgKmJ5dGVzX3dyaXR0ZW4sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwpnY2hhciogZ19jb252ZXJ0X3dpdGhfZmFsbGJhY2sg KGNvbnN0IGdjaGFyICpzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzaXpl IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqdG9fY29k ZXNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqZnJvbV9j b2Rlc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICpmYWxsYmFjaywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAqYnl0ZXNfcmVhZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAqYnl0ZXNfd3JpdHRlbiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7CgoKCgpnY2hhciogZ19sb2Nh bGVfdG9fdXRmOCAoY29uc3QgZ2NoYXIgKm9wc3lzc3RyaW5nLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBnc3NpemUgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAqYnl0 ZXNfcmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgKmJ5dGVzX3dyaXR0ZW4s CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsKZ2NoYXIqIGdfbG9j YWxlX2Zyb21fdXRmOCAoY29uc3QgZ2NoYXIgKnV0ZjhzdHJpbmcsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdzc2l6ZSBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplICpi eXRlc19yZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAqYnl0ZXNfd3JpdHRl biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwoKCgoKZ2NoYXIq IGdfZmlsZW5hbWVfdG9fdXRmOCAoY29uc3QgZ2NoYXIgKm9wc3lzc3RyaW5nLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ3NpemUgKmJ5dGVzX3JlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUg KmJ5dGVzX3dyaXR0ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJy b3IpOwpnY2hhciogZ19maWxlbmFtZV9mcm9tX3V0ZjggKGNvbnN0IGdjaGFyICp1dGY4c3RyaW5n LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBsZW4sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ3NpemUgKmJ5dGVzX3JlYWQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ3NpemUgKmJ5dGVzX3dyaXR0ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R0Vycm9yICoqZXJyb3IpOwoKZ2NoYXIgKmdfZmlsZW5hbWVfZnJvbV91cmkgKGNvbnN0IGNoYXIg KnVyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipob3N0bmFtZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsKCmdjaGFyICpnX2ZpbGVuYW1l X3RvX3VyaSAoY29uc3QgY2hhciAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICpob3N0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJv ciAqKmVycm9yKTsKCgoKIyAzNyAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xpYi9nZGF0YXNldC5oIiAx CiMgMzIgIi4uL2dsaWIvZ2RhdGFzZXQuaCIKCgp0eXBlZGVmIHN0cnVjdCBfR0RhdGEgR0RhdGE7 Cgp0eXBlZGVmIHZvaWQgKCpHRGF0YUZvcmVhY2hGdW5jKSAoR1F1YXJrIGtleV9pZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRl ciB1c2VyX2RhdGEpOwoKCgp2b2lkIGdfZGF0YWxpc3RfaW5pdCAoR0RhdGEgKipkYXRhbGlzdCk7 CnZvaWQgZ19kYXRhbGlzdF9jbGVhciAoR0RhdGEgKipkYXRhbGlzdCk7Cmdwb2ludGVyIGdfZGF0 YWxpc3RfaWRfZ2V0X2RhdGEgKEdEYXRhICoqZGF0YWxpc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdRdWFyayBrZXlfaWQpOwp2b2lkIGdfZGF0YWxpc3RfaWRf c2V0X2RhdGFfZnVsbCAoR0RhdGEgKipkYXRhbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR1F1YXJrIGtleV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgZGVzdHJveV9mdW5jKTsKZ3BvaW50ZXIg Z19kYXRhbGlzdF9pZF9yZW1vdmVfbm9fbm90aWZ5IChHRGF0YSAqKmRhdGFsaXN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUXVhcmsga2V5X2lkKTsKdm9pZCBn X2RhdGFsaXN0X2ZvcmVhY2ggKEdEYXRhICoqZGF0YWxpc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdEYXRhRm9yZWFjaEZ1bmMgZnVuYywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKIyA3MyAi Li4vZ2xpYi9nZGF0YXNldC5oIgp2b2lkIGdfZGF0YXNldF9kZXN0cm95IChnY29uc3Rwb2ludGVy IGRhdGFzZXRfbG9jYXRpb24pOwpncG9pbnRlciBnX2RhdGFzZXRfaWRfZ2V0X2RhdGEgKGdjb25z dHBvaW50ZXIgZGF0YXNldF9sb2NhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHUXVhcmsga2V5X2lkKTsKdm9pZCBnX2RhdGFzZXRfaWRfc2V0X2RhdGFfZnVs bCAoZ2NvbnN0cG9pbnRlciBkYXRhc2V0X2xvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdRdWFyayBrZXlfaWQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBkZXN0cm95X2Z1bmMpOwpncG9pbnRlciBn X2RhdGFzZXRfaWRfcmVtb3ZlX25vX25vdGlmeSAoZ2NvbnN0cG9pbnRlciBkYXRhc2V0X2xvY2F0 aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdRdWFyayBrZXlf aWQpOwp2b2lkIGdfZGF0YXNldF9mb3JlYWNoIChnY29uc3Rwb2ludGVyIGRhdGFzZXRfbG9jYXRp b24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RhdGFGb3JlYWNo RnVuYyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2lu dGVyIHVzZXJfZGF0YSk7CiMgMTAwICIuLi9nbGliL2dkYXRhc2V0LmgiCgojIDM4ICJnbGliLmgi IDIKIyAxICIuLi9nbGliL2dkYXRlLmgiIDEKIyAzMiAiLi4vZ2xpYi9nZGF0ZS5oIgoKIyA0MyAi Li4vZ2xpYi9nZGF0ZS5oIgp0eXBlZGVmIGdpbnQzMiBHVGltZTsKdHlwZWRlZiBndWludDE2IEdE YXRlWWVhcjsKdHlwZWRlZiBndWludDggR0RhdGVEYXk7CnR5cGVkZWYgc3RydWN0IF9HRGF0ZSBH RGF0ZTsKCnN0cnVjdCB0bTsKCgp0eXBlZGVmIGVudW0KewogIEdfREFURV9EQVkgPSAwLAogIEdf REFURV9NT05USCA9IDEsCiAgR19EQVRFX1lFQVIgPSAyCn0gR0RhdGVETVk7CgoKdHlwZWRlZiBl bnVtCnsKICBHX0RBVEVfQkFEX1dFRUtEQVkgPSAwLAogIEdfREFURV9NT05EQVkgPSAxLAogIEdf REFURV9UVUVTREFZID0gMiwKICBHX0RBVEVfV0VETkVTREFZID0gMywKICBHX0RBVEVfVEhVUlNE QVkgPSA0LAogIEdfREFURV9GUklEQVkgPSA1LAogIEdfREFURV9TQVRVUkRBWSA9IDYsCiAgR19E QVRFX1NVTkRBWSA9IDcKfSBHRGF0ZVdlZWtkYXk7CnR5cGVkZWYgZW51bQp7CiAgR19EQVRFX0JB RF9NT05USCA9IDAsCiAgR19EQVRFX0pBTlVBUlkgPSAxLAogIEdfREFURV9GRUJSVUFSWSA9IDIs CiAgR19EQVRFX01BUkNIID0gMywKICBHX0RBVEVfQVBSSUwgPSA0LAogIEdfREFURV9NQVkgPSA1 LAogIEdfREFURV9KVU5FID0gNiwKICBHX0RBVEVfSlVMWSA9IDcsCiAgR19EQVRFX0FVR1VTVCA9 IDgsCiAgR19EQVRFX1NFUFRFTUJFUiA9IDksCiAgR19EQVRFX09DVE9CRVIgPSAxMCwKICBHX0RB VEVfTk9WRU1CRVIgPSAxMSwKICBHX0RBVEVfREVDRU1CRVIgPSAxMgp9IEdEYXRlTW9udGg7CiMg OTYgIi4uL2dsaWIvZ2RhdGUuaCIKc3RydWN0IF9HRGF0ZQp7CiAgZ3VpbnQganVsaWFuX2RheXMg OiAzMjsKCgoKCgogIGd1aW50IGp1bGlhbiA6IDE7CiAgZ3VpbnQgZG15IDogMTsKCgogIGd1aW50 IGRheSA6IDY7CiAgZ3VpbnQgbW9udGggOiA0OwogIGd1aW50IHllYXIgOiAxNjsKfTsKCgoKCgpH RGF0ZSogZ19kYXRlX25ldyAodm9pZCk7CkdEYXRlKiBnX2RhdGVfbmV3X2RteSAoR0RhdGVEYXkg ZGF5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RhdGVNb250 aCBtb250aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRl WWVhciB5ZWFyKTsKR0RhdGUqIGdfZGF0ZV9uZXdfanVsaWFuIChndWludDMyIGp1bGlhbl9kYXkp Owp2b2lkIGdfZGF0ZV9mcmVlIChHRGF0ZSAqZGF0ZSk7CgoKCgoKCmdib29sZWFuIGdfZGF0ZV92 YWxpZCAoY29uc3QgR0RhdGUgKmRhdGUpOwpnYm9vbGVhbiBnX2RhdGVfdmFsaWRfZGF5IChHRGF0 ZURheSBkYXkpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpnYm9vbGVhbiBnX2RhdGVfdmFs aWRfbW9udGggKEdEYXRlTW9udGggbW9udGgpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpn Ym9vbGVhbiBnX2RhdGVfdmFsaWRfeWVhciAoR0RhdGVZZWFyIHllYXIpIF9fYXR0cmlidXRlX18o KF9fY29uc3RfXykpOwpnYm9vbGVhbiBnX2RhdGVfdmFsaWRfd2Vla2RheSAoR0RhdGVXZWVrZGF5 IHdlZWtkYXkpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpnYm9vbGVhbiBnX2RhdGVfdmFs aWRfanVsaWFuIChndWludDMyIGp1bGlhbl9kYXRlKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18p KTsKZ2Jvb2xlYW4gZ19kYXRlX3ZhbGlkX2RteSAoR0RhdGVEYXkgZGF5LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0RhdGVNb250aCBtb250aCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRlWWVhciB5ZWFyKSBfX2F0dHJp YnV0ZV9fKChfX2NvbnN0X18pKTsKCkdEYXRlV2Vla2RheSBnX2RhdGVfZ2V0X3dlZWtkYXkgKGNv bnN0IEdEYXRlICpkYXRlKTsKR0RhdGVNb250aCBnX2RhdGVfZ2V0X21vbnRoIChjb25zdCBHRGF0 ZSAqZGF0ZSk7CkdEYXRlWWVhciBnX2RhdGVfZ2V0X3llYXIgKGNvbnN0IEdEYXRlICpkYXRlKTsK R0RhdGVEYXkgZ19kYXRlX2dldF9kYXkgKGNvbnN0IEdEYXRlICpkYXRlKTsKZ3VpbnQzMiBnX2Rh dGVfZ2V0X2p1bGlhbiAoY29uc3QgR0RhdGUgKmRhdGUpOwpndWludCBnX2RhdGVfZ2V0X2RheV9v Zl95ZWFyIChjb25zdCBHRGF0ZSAqZGF0ZSk7CgoKCgoKCmd1aW50IGdfZGF0ZV9nZXRfbW9uZGF5 X3dlZWtfb2ZfeWVhciAoY29uc3QgR0RhdGUgKmRhdGUpOwpndWludCBnX2RhdGVfZ2V0X3N1bmRh eV93ZWVrX29mX3llYXIgKGNvbnN0IEdEYXRlICpkYXRlKTsKCgoKCgp2b2lkIGdfZGF0ZV9jbGVh ciAoR0RhdGUgKmRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBndWludCBuX2RhdGVzKTsKCgoKCgp2b2lkIGdfZGF0ZV9zZXRfcGFyc2UgKEdEYXRlICpkYXRl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIg KnN0cik7CnZvaWQgZ19kYXRlX3NldF90aW1lIChHRGF0ZSAqZGF0ZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUaW1lIHRpbWVfKTsKdm9pZCBnX2RhdGVfc2V0 X21vbnRoIChHRGF0ZSAqZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdEYXRlTW9udGggbW9udGgpOwp2b2lkIGdfZGF0ZV9zZXRfZGF5IChHRGF0ZSAqZGF0 ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRlRGF5IGRh eSk7CnZvaWQgZ19kYXRlX3NldF95ZWFyIChHRGF0ZSAqZGF0ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdEYXRlWWVhciB5ZWFyKTsKdm9pZCBnX2RhdGVfc2V0 X2RteSAoR0RhdGUgKmRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHRGF0ZURheSBkYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHRGF0ZU1vbnRoIG1vbnRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR0RhdGVZZWFyIHkpOwp2b2lkIGdfZGF0ZV9zZXRfanVsaWFuIChHRGF0ZSAqZGF0 ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50MzIganVs aWFuX2RhdGUpOwpnYm9vbGVhbiBnX2RhdGVfaXNfZmlyc3Rfb2ZfbW9udGggKGNvbnN0IEdEYXRl ICpkYXRlKTsKZ2Jvb2xlYW4gZ19kYXRlX2lzX2xhc3Rfb2ZfbW9udGggKGNvbnN0IEdEYXRlICpk YXRlKTsKCgp2b2lkIGdfZGF0ZV9hZGRfZGF5cyAoR0RhdGUgKmRhdGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBuX2RheXMpOwp2b2lkIGdfZGF0ZV9z dWJ0cmFjdF9kYXlzIChHRGF0ZSAqZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGd1aW50IG5fZGF5cyk7CgoKdm9pZCBnX2RhdGVfYWRkX21vbnRocyAoR0Rh dGUgKmRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWlu dCBuX21vbnRocyk7CnZvaWQgZ19kYXRlX3N1YnRyYWN0X21vbnRocyAoR0RhdGUgKmRhdGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBuX21vbnRocyk7 CgoKdm9pZCBnX2RhdGVfYWRkX3llYXJzIChHRGF0ZSAqZGF0ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IG5feWVhcnMpOwp2b2lkIGdfZGF0ZV9zdWJ0 cmFjdF95ZWFycyAoR0RhdGUgKmRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBndWludCBuX3llYXJzKTsKZ2Jvb2xlYW4gZ19kYXRlX2lzX2xlYXBfeWVhciAo R0RhdGVZZWFyIHllYXIpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpndWludDggZ19kYXRl X2dldF9kYXlzX2luX21vbnRoIChHRGF0ZU1vbnRoIG1vbnRoLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR0RhdGVZZWFyIHllYXIpIF9fYXR0cmlidXRlX18oKF9f Y29uc3RfXykpOwpndWludDggZ19kYXRlX2dldF9tb25kYXlfd2Vla3NfaW5feWVhciAoR0RhdGVZ ZWFyIHllYXIpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpndWludDggZ19kYXRlX2dldF9z dW5kYXlfd2Vla3NfaW5feWVhciAoR0RhdGVZZWFyIHllYXIpIF9fYXR0cmlidXRlX18oKF9fY29u c3RfXykpOwoKCgpnaW50IGdfZGF0ZV9kYXlzX2JldHdlZW4gKGNvbnN0IEdEYXRlICpkYXRlMSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdEYXRlICpk YXRlMik7CgoKZ2ludCBnX2RhdGVfY29tcGFyZSAoY29uc3QgR0RhdGUgKmxocywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdEYXRlICpyaHMpOwp2b2lk IGdfZGF0ZV90b19zdHJ1Y3RfdG0gKGNvbnN0IEdEYXRlICpkYXRlLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICp0bSk7Cgp2b2lkIGdfZGF0ZV9j bGFtcCAoR0RhdGUgKmRhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBHRGF0ZSAqbWluX2RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBHRGF0ZSAqbWF4X2RhdGUpOwoKCnZvaWQgZ19kYXRlX29yZGVy IChHRGF0ZSAqZGF0ZTEsIEdEYXRlICpkYXRlMik7CgoKCgpnc2l6ZSBnX2RhdGVfc3RyZnRpbWUg KGdjaGFyICpzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Np emUgc2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGdjaGFyICpmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBHRGF0ZSAqZGF0ZSk7CiMgMjQ5ICIuLi9nbGliL2dkYXRlLmgiCgojIDM5ICJnbGli LmgiIDIKIyAxICIuLi9nbGliL2dkaXIuaCIgMQojIDI4ICIuLi9nbGliL2dkaXIuaCIKCgp0eXBl ZGVmIHN0cnVjdCBfR0RpciBHRGlyOwoKR0RpciAqIGdfZGlyX29wZW4gKGNvbnN0IGdjaGFyICpw YXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IGZsYWdz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9y KTsKY29uc3QgZ2NoYXIgKmdfZGlyX3JlYWRfbmFtZSAoR0RpciAqZGlyKTsKdm9pZCBnX2Rpcl9y ZXdpbmQgKEdEaXIgKmRpcik7CnZvaWQgZ19kaXJfY2xvc2UgKEdEaXIgKmRpcik7CgoKIyA0MCAi Z2xpYi5oIiAyCgojIDEgIi4uL2dsaWIvZ2ZpbGV1dGlscy5oIiAxCiMgMjYgIi4uL2dsaWIvZ2Zp bGV1dGlscy5oIgoKCgoKdHlwZWRlZiBlbnVtCnsKICBHX0ZJTEVfRVJST1JfRVhJU1QsCiAgR19G SUxFX0VSUk9SX0lTRElSLAogIEdfRklMRV9FUlJPUl9BQ0NFUywKICBHX0ZJTEVfRVJST1JfTkFN RVRPT0xPTkcsCiAgR19GSUxFX0VSUk9SX05PRU5ULAogIEdfRklMRV9FUlJPUl9OT1RESVIsCiAg R19GSUxFX0VSUk9SX05YSU8sCiAgR19GSUxFX0VSUk9SX05PREVWLAogIEdfRklMRV9FUlJPUl9S T0ZTLAogIEdfRklMRV9FUlJPUl9UWFRCU1ksCiAgR19GSUxFX0VSUk9SX0ZBVUxULAogIEdfRklM RV9FUlJPUl9MT09QLAogIEdfRklMRV9FUlJPUl9OT1NQQywKICBHX0ZJTEVfRVJST1JfTk9NRU0s CiAgR19GSUxFX0VSUk9SX01GSUxFLAogIEdfRklMRV9FUlJPUl9ORklMRSwKICBHX0ZJTEVfRVJS T1JfQkFERiwKICBHX0ZJTEVfRVJST1JfSU5WQUwsCiAgR19GSUxFX0VSUk9SX1BJUEUsCiAgR19G SUxFX0VSUk9SX0FHQUlOLAogIEdfRklMRV9FUlJPUl9JTlRSLAogIEdfRklMRV9FUlJPUl9JTywK ICBHX0ZJTEVfRVJST1JfUEVSTSwKICBHX0ZJTEVfRVJST1JfRkFJTEVECn0gR0ZpbGVFcnJvcjsK CgoKCgp0eXBlZGVmIGVudW0KewogIEdfRklMRV9URVNUX0lTX1JFR1VMQVIgPSAxIDw8IDAsCiAg R19GSUxFX1RFU1RfSVNfU1lNTElOSyA9IDEgPDwgMSwKICBHX0ZJTEVfVEVTVF9JU19ESVIgPSAx IDw8IDIsCiAgR19GSUxFX1RFU1RfSVNfRVhFQ1VUQUJMRSA9IDEgPDwgMywKICBHX0ZJTEVfVEVT VF9FWElTVFMgPSAxIDw8IDQKfSBHRmlsZVRlc3Q7CgpHUXVhcmsgZ19maWxlX2Vycm9yX3F1YXJr ICh2b2lkKTsKCkdGaWxlRXJyb3IgZ19maWxlX2Vycm9yX2Zyb21fZXJybm8gKGdpbnQgZXJyX25v KTsKCmdib29sZWFuIGdfZmlsZV90ZXN0IChjb25zdCBnY2hhciAqZmlsZW5hbWUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdGaWxlVGVzdCB0ZXN0KTsKZ2Jvb2xlYW4gZ19maWxlX2dl dF9jb250ZW50cyAoY29uc3QgZ2NoYXIgKmZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnY2hhciAqKmNvbnRlbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn c2l6ZSAqbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnJv cik7CgoKCmludCBnX21rc3RlbXAgKGNoYXIgKnRtcGwpOwoKCmludCBnX2ZpbGVfb3Blbl90bXAg KGNvbnN0IGNoYXIgKnRtcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipu YW1lX3VzZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsK CmdjaGFyICpnX2J1aWxkX3BhdGggKGNvbnN0IGdjaGFyICpzZXBhcmF0b3IsCiAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBnY2hhciAqZmlyc3RfZWxlbWVudCwKICAgICAgICAgICAgICAg ICAgICAgICAgIC4uLik7CmdjaGFyICpnX2J1aWxkX2ZpbGVuYW1lIChjb25zdCBnY2hhciAqZmly c3RfZWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CgoKIyA0MiAiZ2xpYi5o IiAyCiMgMSAiLi4vZ2xpYi9naGFzaC5oIiAxCiMgMzIgIi4uL2dsaWIvZ2hhc2guaCIKCgp0eXBl ZGVmIHN0cnVjdCBfR0hhc2hUYWJsZSBHSGFzaFRhYmxlOwoKdHlwZWRlZiBnYm9vbGVhbiAoKkdI UkZ1bmMpIChncG9pbnRlciBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9p bnRlciB2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJf ZGF0YSk7CgoKCkdIYXNoVGFibGUqIGdfaGFzaF90YWJsZV9uZXcgKEdIYXNoRnVuYyBoYXNoX2Z1 bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VxdWFsRnVu YyBrZXlfZXF1YWxfZnVuYyk7CkdIYXNoVGFibGUqIGdfaGFzaF90YWJsZV9uZXdfZnVsbCAoR0hh c2hGdW5jIGhhc2hfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHRXF1YWxGdW5jIGtleV9lcXVhbF9mdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdEZXN0cm95Tm90aWZ5IGtleV9kZXN0cm95X2Z1bmMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgdmFs dWVfZGVzdHJveV9mdW5jKTsKdm9pZCBnX2hhc2hfdGFibGVfZGVzdHJveSAoR0hhc2hUYWJsZSAq aGFzaF90YWJsZSk7CnZvaWQgZ19oYXNoX3RhYmxlX2luc2VydCAoR0hhc2hUYWJsZSAqaGFzaF90 YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRl ciBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50 ZXIgdmFsdWUpOwp2b2lkIGdfaGFzaF90YWJsZV9yZXBsYWNlIChHSGFzaFRhYmxlICpoYXNoX3Rh YmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVy IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRl ciB2YWx1ZSk7Cmdib29sZWFuIGdfaGFzaF90YWJsZV9yZW1vdmUgKEdIYXNoVGFibGUgKmhhc2hf dGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0 cG9pbnRlciBrZXkpOwpnYm9vbGVhbiBnX2hhc2hfdGFibGVfc3RlYWwgKEdIYXNoVGFibGUgKmhh c2hfdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Nv bnN0cG9pbnRlciBrZXkpOwpncG9pbnRlciBnX2hhc2hfdGFibGVfbG9va3VwIChHSGFzaFRhYmxl ICpoYXNoX3RhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdjb25zdHBvaW50ZXIga2V5KTsKZ2Jvb2xlYW4gZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRl ZCAoR0hhc2hUYWJsZSAqaGFzaF90YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIGxvb2t1cF9rZXksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgKm9yaWdfa2V5LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICp2YWx1ZSk7CnZvaWQg Z19oYXNoX3RhYmxlX2ZvcmVhY2ggKEdIYXNoVGFibGUgKmhhc2hfdGFibGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0hGdW5jIGZ1bmMsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKZ3Vp bnQgZ19oYXNoX3RhYmxlX2ZvcmVhY2hfcmVtb3ZlIChHSGFzaFRhYmxlICpoYXNoX3RhYmxlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdIUkZ1bmMgZnVuYywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2Vy X2RhdGEpOwpndWludCBnX2hhc2hfdGFibGVfZm9yZWFjaF9zdGVhbCAoR0hhc2hUYWJsZSAqaGFz aF90YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSFJG dW5jIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bv aW50ZXIgdXNlcl9kYXRhKTsKZ3VpbnQgZ19oYXNoX3RhYmxlX3NpemUgKEdIYXNoVGFibGUgKmhh c2hfdGFibGUpOwojIDg3ICIuLi9nbGliL2doYXNoLmgiCmdib29sZWFuIGdfc3RyX2VxdWFsIChn Y29uc3Rwb2ludGVyIHYsCiAgICAgICAgICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIHYyKTsK Z3VpbnQgZ19zdHJfaGFzaCAoZ2NvbnN0cG9pbnRlciB2KTsKCmdib29sZWFuIGdfaW50X2VxdWFs IChnY29uc3Rwb2ludGVyIHYsCiAgICAgICAgICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIHYy KTsKZ3VpbnQgZ19pbnRfaGFzaCAoZ2NvbnN0cG9pbnRlciB2KTsKCgoKCgoKCmd1aW50IGdfZGly ZWN0X2hhc2ggKGdjb25zdHBvaW50ZXIgdikgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7Cmdi b29sZWFuIGdfZGlyZWN0X2VxdWFsIChnY29uc3Rwb2ludGVyIHYsCiAgICAgICAgICAgICAgICAg ICAgICAgICBnY29uc3Rwb2ludGVyIHYyKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKCgoj IDQzICJnbGliLmgiIDIKIyAxICIuLi9nbGliL2dob29rLmgiIDEKIyAzMiAiLi4vZ2xpYi9naG9v ay5oIgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0dIb29rIEdIb29rOwp0eXBlZGVmIHN0cnVjdCBfR0hv b2tMaXN0IEdIb29rTGlzdDsKCnR5cGVkZWYgZ2ludCAoKkdIb29rQ29tcGFyZUZ1bmMpIChHSG9v ayAqbmV3X2hvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHSG9vayAqc2libGluZyk7CnR5cGVkZWYgZ2Jvb2xlYW4gKCpHSG9va0ZpbmRGdW5jKSAo R0hvb2sgKmhvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBncG9pbnRlciBkYXRhKTsKdHlwZWRlZiB2b2lkICgqR0hvb2tNYXJzaGFsbGVyKSAoR0hv b2sgKmhvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBncG9pbnRlciBtYXJzaGFsX2RhdGEpOwp0eXBlZGVmIGdib29sZWFuICgqR0hvb2tDaGVja01h cnNoYWxsZXIpIChHSG9vayAqaG9vaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdwb2ludGVyIG1hcnNoYWxfZGF0YSk7CnR5cGVkZWYgdm9pZCAoKkdI b29rRnVuYykgKGdwb2ludGVyIGRhdGEpOwp0eXBlZGVmIGdib29sZWFuICgqR0hvb2tDaGVja0Z1 bmMpIChncG9pbnRlciBkYXRhKTsKdHlwZWRlZiB2b2lkICgqR0hvb2tGaW5hbGl6ZUZ1bmMpIChH SG9va0xpc3QgKmhvb2tfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdIb29rICpob29rKTsKdHlwZWRlZiBlbnVtCnsKICBHX0hPT0tfRkxBR19B Q1RJVkUgPSAxIDw8IDAsCiAgR19IT09LX0ZMQUdfSU5fQ0FMTCA9IDEgPDwgMSwKICBHX0hPT0tf RkxBR19NQVNLID0gMHgwZgp9IEdIb29rRmxhZ01hc2s7CgoKCgpzdHJ1Y3QgX0dIb29rTGlzdAp7 CiAgZ3Vsb25nIHNlcV9pZDsKICBndWludCBob29rX3NpemUgOiAxNjsKICBndWludCBpc19zZXR1 cCA6IDE7CiAgR0hvb2sgKmhvb2tzOwogIEdNZW1DaHVuayAqaG9va19tZW1jaHVuazsKICBHSG9v a0ZpbmFsaXplRnVuYyBmaW5hbGl6ZV9ob29rOwogIGdwb2ludGVyIGR1bW15WzJdOwp9OwpzdHJ1 Y3QgX0dIb29rCnsKICBncG9pbnRlciBkYXRhOwogIEdIb29rICpuZXh0OwogIEdIb29rICpwcmV2 OwogIGd1aW50IHJlZl9jb3VudDsKICBndWxvbmcgaG9va19pZDsKICBndWludCBmbGFnczsKICBn cG9pbnRlciBmdW5jOwogIEdEZXN0cm95Tm90aWZ5IGRlc3Ryb3k7Cn07CiMgMTAyICIuLi9nbGli L2dob29rLmgiCnZvaWQgZ19ob29rX2xpc3RfaW5pdCAoR0hvb2tMaXN0ICpob29rX2xpc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgaG9va19zaXplKTsK dm9pZCBnX2hvb2tfbGlzdF9jbGVhciAoR0hvb2tMaXN0ICpob29rX2xpc3QpOwpHSG9vayogZ19o b29rX2FsbG9jIChHSG9va0xpc3QgKmhvb2tfbGlzdCk7CnZvaWQgZ19ob29rX2ZyZWUgKEdIb29r TGlzdCAqaG9va19saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdIb29rICpob29rKTsKdm9pZCBnX2hvb2tfcmVmIChHSG9va0xpc3QgKmhvb2tfbGlzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSG9vayAqaG9vayk7CnZvaWQg Z19ob29rX3VucmVmIChHSG9va0xpc3QgKmhvb2tfbGlzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHSG9vayAqaG9vayk7Cmdib29sZWFuIGdfaG9va19kZXN0cm95 IChHSG9va0xpc3QgKmhvb2tfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBndWxvbmcgaG9va19pZCk7CnZvaWQgZ19ob29rX2Rlc3Ryb3lfbGluayAoR0hvb2tM aXN0ICpob29rX2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R0hvb2sgKmhvb2spOwp2b2lkIGdfaG9va19wcmVwZW5kIChHSG9va0xpc3QgKmhvb2tfbGlzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSG9vayAqaG9vayk7CnZv aWQgZ19ob29rX2luc2VydF9iZWZvcmUgKEdIb29rTGlzdCAqaG9va19saXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdIb29rICpzaWJsaW5nLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdIb29rICpob29rKTsKdm9pZCBnX2hvb2tf aW5zZXJ0X3NvcnRlZCAoR0hvb2tMaXN0ICpob29rX2xpc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgR0hvb2sgKmhvb2ssCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR0hvb2tDb21wYXJlRnVuYyBmdW5jKTsKR0hvb2sqIGdfaG9va19n ZXQgKEdIb29rTGlzdCAqaG9va19saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGd1bG9uZyBob29rX2lkKTsKR0hvb2sqIGdfaG9va19maW5kIChHSG9va0xpc3Qg Kmhvb2tfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9v bGVhbiBuZWVkX3ZhbGlkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHSG9va0ZpbmRGdW5jIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ3BvaW50ZXIgZGF0YSk7CkdIb29rKiBnX2hvb2tfZmluZF9kYXRhIChHSG9va0xpc3Qg Kmhvb2tfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9v bGVhbiBuZWVkX3ZhbGlkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBncG9pbnRlciBkYXRhKTsKR0hvb2sqIGdfaG9va19maW5kX2Z1bmMgKEdIb29rTGlzdCAqaG9v a19saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFu IG5lZWRfdmFsaWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdw b2ludGVyIGZ1bmMpOwpHSG9vayogZ19ob29rX2ZpbmRfZnVuY19kYXRhIChHSG9va0xpc3QgKmhv b2tfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVh biBuZWVkX3ZhbGlkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn cG9pbnRlciBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdw b2ludGVyIGRhdGEpOwoKR0hvb2sqIGdfaG9va19maXJzdF92YWxpZCAoR0hvb2tMaXN0ICpob29r X2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4g bWF5X2JlX2luX2NhbGwpOwoKCgpHSG9vayogZ19ob29rX25leHRfdmFsaWQgKEdIb29rTGlzdCAq aG9va19saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdIb29r ICpob29rLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFu IG1heV9iZV9pbl9jYWxsKTsKCmdpbnQgZ19ob29rX2NvbXBhcmVfaWRzIChHSG9vayAqbmV3X2hv b2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0hvb2sgKnNpYmxp bmcpOwoKCgoKCnZvaWQgZ19ob29rX2xpc3RfaW52b2tlIChHSG9va0xpc3QgKmhvb2tfbGlzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBtYXlfcmVj dXJzZSk7CgoKCnZvaWQgZ19ob29rX2xpc3RfaW52b2tlX2NoZWNrIChHSG9va0xpc3QgKmhvb2tf bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBt YXlfcmVjdXJzZSk7CgoKdm9pZCBnX2hvb2tfbGlzdF9tYXJzaGFsIChHSG9va0xpc3QgKmhvb2tf bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBt YXlfcmVjdXJzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSG9v a01hcnNoYWxsZXIgbWFyc2hhbGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBncG9pbnRlciBtYXJzaGFsX2RhdGEpOwp2b2lkIGdfaG9va19saXN0X21hcnNoYWxf Y2hlY2sgKEdIb29rTGlzdCAqaG9va19saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdib29sZWFuIG1heV9yZWN1cnNlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdIb29rQ2hlY2tNYXJzaGFsbGVyIG1hcnNoYWxsZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgbWFyc2hhbF9kYXRh KTsKCgojIDQ0ICJnbGliLmgiIDIKIyAxICIuLi9nbGliL2dpb2NoYW5uZWwuaCIgMQojIDMxICIu Li9nbGliL2dpb2NoYW5uZWwuaCIKIyAxICIuLi9nbGliL2dtYWluLmgiIDEKIyAyMyAiLi4vZ2xp Yi9nbWFpbi5oIgojIDEgIi4uL2dsaWIvZ3NsaXN0LmgiIDEKIyAzMiAiLi4vZ2xpYi9nc2xpc3Qu aCIKCgp0eXBlZGVmIHN0cnVjdCBfR1NMaXN0IEdTTGlzdDsKCnN0cnVjdCBfR1NMaXN0CnsKICBn cG9pbnRlciBkYXRhOwogIEdTTGlzdCAqbmV4dDsKfTsKCgoKdm9pZCBnX3NsaXN0X3B1c2hfYWxs b2NhdG9yIChHQWxsb2NhdG9yICphbGxvY2F0b3IpOwp2b2lkIGdfc2xpc3RfcG9wX2FsbG9jYXRv ciAodm9pZCk7CkdTTGlzdCogZ19zbGlzdF9hbGxvYyAodm9pZCk7CnZvaWQgZ19zbGlzdF9mcmVl IChHU0xpc3QgKmxpc3QpOwp2b2lkIGdfc2xpc3RfZnJlZV8xIChHU0xpc3QgKmxpc3QpOwpHU0xp c3QqIGdfc2xpc3RfYXBwZW5kIChHU0xpc3QgKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdwb2ludGVyIGRhdGEpOwpHU0xpc3QqIGdfc2xpc3RfcHJlcGVuZCAoR1NMaXN0 ICpsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKTsK R1NMaXN0KiBnX3NsaXN0X2luc2VydCAoR1NMaXN0ICpsaXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBncG9pbnRlciBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnaW50IHBvc2l0aW9uKTsKR1NMaXN0KiBnX3NsaXN0X2luc2VydF9zb3J0ZWQgKEdTTGlz dCAqbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NvbXBhcmVGdW5jIGZ1bmMpOwpHU0xp c3QqIGdfc2xpc3RfaW5zZXJ0X2JlZm9yZSAoR1NMaXN0ICpzbGlzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR1NMaXN0ICpzaWJsaW5nLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBncG9pbnRlciBkYXRhKTsKR1NMaXN0KiBnX3NsaXN0X2NvbmNhdCAoR1NMaXN0 ICpsaXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NMaXN0ICpsaXN0Mik7 CkdTTGlzdCogZ19zbGlzdF9yZW1vdmUgKEdTTGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKTsKR1NMaXN0KiBnX3NsaXN0X3JlbW92 ZV9hbGwgKEdTTGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Nv bnN0cG9pbnRlciBkYXRhKTsKR1NMaXN0KiBnX3NsaXN0X3JlbW92ZV9saW5rIChHU0xpc3QgKmxp c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTTGlzdCAqbGlua18pOwpHU0xp c3QqIGdfc2xpc3RfZGVsZXRlX2xpbmsgKEdTTGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR1NMaXN0ICpsaW5rXyk7CkdTTGlzdCogZ19zbGlzdF9yZXZlcnNlIChH U0xpc3QgKmxpc3QpOwpHU0xpc3QqIGdfc2xpc3RfY29weSAoR1NMaXN0ICpsaXN0KTsKR1NMaXN0 KiBnX3NsaXN0X250aCAoR1NMaXN0ICpsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBndWludCBuKTsKR1NMaXN0KiBnX3NsaXN0X2ZpbmQgKEdTTGlzdCAqbGlzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBkYXRhKTsKR1NMaXN0KiBn X3NsaXN0X2ZpbmRfY3VzdG9tIChHU0xpc3QgKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdjb25zdHBvaW50ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR0NvbXBhcmVGdW5jIGZ1bmMpOwpnaW50IGdfc2xpc3RfcG9zaXRpb24gKEdTTGlzdCAq bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NMaXN0ICpsbGluayk7Cmdp bnQgZ19zbGlzdF9pbmRleCAoR1NMaXN0ICpsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnY29uc3Rwb2ludGVyIGRhdGEpOwpHU0xpc3QqIGdfc2xpc3RfbGFzdCAoR1NMaXN0 ICpsaXN0KTsKZ3VpbnQgZ19zbGlzdF9sZW5ndGggKEdTTGlzdCAqbGlzdCk7CnZvaWQgZ19zbGlz dF9mb3JlYWNoIChHU0xpc3QgKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdGdW5jIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVz ZXJfZGF0YSk7CkdTTGlzdCogZ19zbGlzdF9zb3J0IChHU0xpc3QgKmxpc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdDb21wYXJlRnVuYyBjb21wYXJlX2Z1bmMpOwpHU0xpc3Qq IGdfc2xpc3Rfc29ydF93aXRoX2RhdGEgKEdTTGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR0NvbXBhcmVEYXRhRnVuYyBjb21wYXJlX2Z1bmMsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7Cmdwb2ludGVyIGdfc2xp c3RfbnRoX2RhdGEgKEdTTGlzdCAqbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ3VpbnQgbik7CgoKCiMgMjQgIi4uL2dsaWIvZ21haW4uaCIgMgoKCgoKdHlwZWRlZiBzdHJ1 Y3QgX0dNYWluQ29udGV4dCBHTWFpbkNvbnRleHQ7CnR5cGVkZWYgc3RydWN0IF9HTWFpbkxvb3Ag R01haW5Mb29wOwp0eXBlZGVmIHN0cnVjdCBfR1NvdXJjZSBHU291cmNlOwp0eXBlZGVmIHN0cnVj dCBfR1NvdXJjZUNhbGxiYWNrRnVuY3MgR1NvdXJjZUNhbGxiYWNrRnVuY3M7CnR5cGVkZWYgc3Ry dWN0IF9HU291cmNlRnVuY3MgR1NvdXJjZUZ1bmNzOwoKdHlwZWRlZiBnYm9vbGVhbiAoKkdTb3Vy Y2VGdW5jKSAoZ3BvaW50ZXIgZGF0YSk7CgpzdHJ1Y3QgX0dTb3VyY2UKewoKICBncG9pbnRlciBj YWxsYmFja19kYXRhOwogIEdTb3VyY2VDYWxsYmFja0Z1bmNzICpjYWxsYmFja19mdW5jczsKCiAg R1NvdXJjZUZ1bmNzICpzb3VyY2VfZnVuY3M7CiAgZ3VpbnQgcmVmX2NvdW50OwoKICBHTWFpbkNv bnRleHQgKmNvbnRleHQ7CgogIGdpbnQgcHJpb3JpdHk7CiAgZ3VpbnQgZmxhZ3M7CiAgZ3VpbnQg c291cmNlX2lkOwoKICBHU0xpc3QgKnBvbGxfZmRzOwoKICBHU291cmNlICpwcmV2OwogIEdTb3Vy Y2UgKm5leHQ7CgogIGdwb2ludGVyIHJlc2VydmVkMTsKICBncG9pbnRlciByZXNlcnZlZDI7Cn07 CgpzdHJ1Y3QgX0dTb3VyY2VDYWxsYmFja0Z1bmNzCnsKICB2b2lkICgqcmVmKSAoZ3BvaW50ZXIg Y2JfZGF0YSk7CiAgdm9pZCAoKnVucmVmKSAoZ3BvaW50ZXIgY2JfZGF0YSk7CiAgdm9pZCAoKmdl dCkgKGdwb2ludGVyIGNiX2RhdGEsCiAgICAgICAgICAgICAgICAgR1NvdXJjZSAqc291cmNlLAog ICAgICAgICAgICAgICAgIEdTb3VyY2VGdW5jICpmdW5jLAogICAgICAgICAgICAgICAgIGdwb2lu dGVyICpkYXRhKTsKfTsKCnR5cGVkZWYgdm9pZCAoKkdTb3VyY2VEdW1teU1hcnNoYWwpICh2b2lk KTsKCnN0cnVjdCBfR1NvdXJjZUZ1bmNzCnsKICBnYm9vbGVhbiAoKnByZXBhcmUpIChHU291cmNl ICpzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgKnRpbWVvdXRfKTsKICBnYm9v bGVhbiAoKmNoZWNrKSAoR1NvdXJjZSAqc291cmNlKTsKICBnYm9vbGVhbiAoKmRpc3BhdGNoKSAo R1NvdXJjZSAqc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICBHU291cmNlRnVuYyBjYWxs YmFjaywKICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKICB2b2lk ICgqZmluYWxpemUpIChHU291cmNlICpzb3VyY2UpOwoKCiAgR1NvdXJjZUZ1bmMgY2xvc3VyZV9j YWxsYmFjazsKICBHU291cmNlRHVtbXlNYXJzaGFsIGNsb3N1cmVfbWFyc2hhbDsKfTsKIyAxMTUg Ii4uL2dsaWIvZ21haW4uaCIKdHlwZWRlZiBzdHJ1Y3QgX0dQb2xsRkQgR1BvbGxGRDsKdHlwZWRl ZiBnaW50ICgqR1BvbGxGdW5jKSAoR1BvbGxGRCAqdWZkcywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ3VpbnQgbmZzZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z2ludCB0aW1lb3V0Xyk7CgpzdHJ1Y3QgX0dQb2xsRkQKewogIGdpbnQgZmQ7CiAgZ3VzaG9ydCBl dmVudHM7CiAgZ3VzaG9ydCByZXZlbnRzOwp9OwojIDEzNyAiLi4vZ2xpYi9nbWFpbi5oIgpHTWFp bkNvbnRleHQgKmdfbWFpbl9jb250ZXh0X25ldyAodm9pZCk7CnZvaWQgZ19tYWluX2NvbnRleHRf cmVmIChHTWFpbkNvbnRleHQgKmNvbnRleHQpOwp2b2lkIGdfbWFpbl9jb250ZXh0X3VucmVmIChH TWFpbkNvbnRleHQgKmNvbnRleHQpOwpHTWFpbkNvbnRleHQgKmdfbWFpbl9jb250ZXh0X2RlZmF1 bHQgKHZvaWQpOwoKZ2Jvb2xlYW4gZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChHTWFpbkNvbnRl eHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9v bGVhbiBtYXlfYmxvY2spOwpnYm9vbGVhbiBnX21haW5fY29udGV4dF9wZW5kaW5nIChHTWFpbkNv bnRleHQgKmNvbnRleHQpOwoKCgpHU291cmNlICpnX21haW5fY29udGV4dF9maW5kX3NvdXJjZV9i eV9pZCAoR01haW5Db250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgc291cmNlX2lkKTsKR1NvdXJj ZSAqZ19tYWluX2NvbnRleHRfZmluZF9zb3VyY2VfYnlfdXNlcl9kYXRhIChHTWFpbkNvbnRleHQg KmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwpHU291cmNlICpnX21haW5fY29udGV4 dF9maW5kX3NvdXJjZV9ieV9mdW5jc191c2VyX2RhdGEgKEdNYWluQ29udGV4dCAqY29udGV4dCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdTb3VyY2VGdW5jcyAqZnVuY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwoKCgp2b2lk IGdfbWFpbl9jb250ZXh0X3dha2V1cCAoR01haW5Db250ZXh0ICpjb250ZXh0KTsKZ2Jvb2xlYW4g Z19tYWluX2NvbnRleHRfYWNxdWlyZSAoR01haW5Db250ZXh0ICpjb250ZXh0KTsKdm9pZCBnX21h aW5fY29udGV4dF9yZWxlYXNlIChHTWFpbkNvbnRleHQgKmNvbnRleHQpOwpnYm9vbGVhbiBnX21h aW5fY29udGV4dF93YWl0IChHTWFpbkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdDb25kICpjb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHTXV0ZXggKm11dGV4KTsKCmdib29sZWFuIGdfbWFpbl9jb250ZXh0X3ByZXBhcmUgKEdN YWluQ29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdp bnQgKnByaW9yaXR5KTsKZ2ludCBnX21haW5fY29udGV4dF9xdWVyeSAoR01haW5Db250ZXh0ICpj b250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBtYXhfcHJpb3Jp dHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICp0aW1lb3V0XywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQb2xsRkQgKmZkcywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbl9mZHMpOwpnaW50IGdfbWFpbl9jb250ZXh0X2No ZWNrIChHTWFpbkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnaW50IG1heF9wcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdQb2xsRkQgKmZkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbl9m ZHMpOwp2b2lkIGdfbWFpbl9jb250ZXh0X2Rpc3BhdGNoIChHTWFpbkNvbnRleHQgKmNvbnRleHQp OwoKdm9pZCBnX21haW5fY29udGV4dF9zZXRfcG9sbF9mdW5jIChHTWFpbkNvbnRleHQgKmNvbnRl eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUG9sbEZ1bmMgZnVu Yyk7CkdQb2xsRnVuYyBnX21haW5fY29udGV4dF9nZXRfcG9sbF9mdW5jIChHTWFpbkNvbnRleHQg KmNvbnRleHQpOwoKCgp2b2lkIGdfbWFpbl9jb250ZXh0X2FkZF9wb2xsIChHTWFpbkNvbnRleHQg KmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1BvbGxGRCAqZmQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBwcmlvcml0eSk7CnZvaWQg Z19tYWluX2NvbnRleHRfcmVtb3ZlX3BvbGwgKEdNYWluQ29udGV4dCAqY29udGV4dCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUG9sbEZEICpmZCk7CgoKCkdNYWluTG9vcCAq Z19tYWluX2xvb3BfbmV3IChHTWFpbkNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gaXNfcnVubmluZyk7CnZvaWQgZ19tYWluX2xvb3Bf cnVuIChHTWFpbkxvb3AgKmxvb3ApOwp2b2lkIGdfbWFpbl9sb29wX3F1aXQgKEdNYWluTG9vcCAq bG9vcCk7CkdNYWluTG9vcCAqZ19tYWluX2xvb3BfcmVmIChHTWFpbkxvb3AgKmxvb3ApOwp2b2lk IGdfbWFpbl9sb29wX3VucmVmIChHTWFpbkxvb3AgKmxvb3ApOwpnYm9vbGVhbiBnX21haW5fbG9v cF9pc19ydW5uaW5nIChHTWFpbkxvb3AgKmxvb3ApOwpHTWFpbkNvbnRleHQgKmdfbWFpbl9sb29w X2dldF9jb250ZXh0IChHTWFpbkxvb3AgKmxvb3ApOwoKCgpHU291cmNlICpnX3NvdXJjZV9uZXcg KEdTb3VyY2VGdW5jcyAqc291cmNlX2Z1bmNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGd1aW50IHN0cnVjdF9zaXplKTsKR1NvdXJjZSAqZ19zb3VyY2VfcmVmIChHU291cmNl ICpzb3VyY2UpOwp2b2lkIGdfc291cmNlX3VucmVmIChHU291cmNlICpzb3VyY2UpOwoKZ3VpbnQg Z19zb3VyY2VfYXR0YWNoIChHU291cmNlICpzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgR01haW5Db250ZXh0ICpjb250ZXh0KTsKdm9pZCBnX3NvdXJjZV9kZXN0cm95 IChHU291cmNlICpzb3VyY2UpOwoKdm9pZCBnX3NvdXJjZV9zZXRfcHJpb3JpdHkgKEdTb3VyY2Ug KnNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IHByaW9yaXR5 KTsKZ2ludCBnX3NvdXJjZV9nZXRfcHJpb3JpdHkgKEdTb3VyY2UgKnNvdXJjZSk7CnZvaWQgZ19z b3VyY2Vfc2V0X2Nhbl9yZWN1cnNlIChHU291cmNlICpzb3VyY2UsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gY2FuX3JlY3Vyc2UpOwpnYm9vbGVhbiBnX3NvdXJj ZV9nZXRfY2FuX3JlY3Vyc2UgKEdTb3VyY2UgKnNvdXJjZSk7Cmd1aW50IGdfc291cmNlX2dldF9p ZCAoR1NvdXJjZSAqc291cmNlKTsKCkdNYWluQ29udGV4dCAqZ19zb3VyY2VfZ2V0X2NvbnRleHQg KEdTb3VyY2UgKnNvdXJjZSk7Cgp2b2lkIGdfc291cmNlX3NldF9jYWxsYmFjayAoR1NvdXJjZSAq c291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NvdXJjZUZ1bmMg ZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBub3Rp ZnkpOwoKCgp2b2lkIGdfc291cmNlX3NldF9jYWxsYmFja19pbmRpcmVjdCAoR1NvdXJjZSAqc291 cmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgY2FsbGJh Y2tfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTb3VyY2VDYWxs YmFja0Z1bmNzICpjYWxsYmFja19mdW5jcyk7Cgp2b2lkIGdfc291cmNlX2FkZF9wb2xsIChHU291 cmNlICpzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdQb2xsRkQg KmZkKTsKdm9pZCBnX3NvdXJjZV9yZW1vdmVfcG9sbCAoR1NvdXJjZSAqc291cmNlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUG9sbEZEICpmZCk7Cgp2b2lkIGdfc291cmNl X2dldF9jdXJyZW50X3RpbWUgKEdTb3VyY2UgKnNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR1RpbWVWYWwgKnRpbWV2YWwpOwoKCgoKCgoKR1NvdXJjZSAqZ19pZGxl X3NvdXJjZV9uZXcgKHZvaWQpOwpHU291cmNlICpnX3RpbWVvdXRfc291cmNlX25ldyAoZ3VpbnQg aW50ZXJ2YWwpOwoKCgp2b2lkIGdfZ2V0X2N1cnJlbnRfdGltZSAoR1RpbWVWYWwgKnJlc3VsdCk7 CiMgMjc3ICIuLi9nbGliL2dtYWluLmgiCmdib29sZWFuIGdfc291cmNlX3JlbW92ZSAoZ3VpbnQg dGFnKTsKZ2Jvb2xlYW4gZ19zb3VyY2VfcmVtb3ZlX2J5X3VzZXJfZGF0YSAoZ3BvaW50ZXIgdXNl cl9kYXRhKTsKZ2Jvb2xlYW4gZ19zb3VyY2VfcmVtb3ZlX2J5X2Z1bmNzX3VzZXJfZGF0YSAoR1Nv dXJjZUZ1bmNzICpmdW5jcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CgoKZ3VpbnQgZ190aW1lb3V0X2FkZF9mdWxsIChn aW50IHByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1 aW50IGludGVydmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdT b3VyY2VGdW5jIGZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdwb2ludGVyIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KTsKZ3VpbnQgZ190aW1lb3V0X2FkZCAoZ3VpbnQgaW50 ZXJ2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NvdXJjZUZ1 bmMgZnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bv aW50ZXIgZGF0YSk7Cmd1aW50IGdfaWRsZV9hZGQgKEdTb3VyY2VGdW5jIGZ1bmN0aW9uLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpOwpndWlu dCBnX2lkbGVfYWRkX2Z1bGwgKGdpbnQgcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR1NvdXJjZUZ1bmMgZnVuY3Rpb24sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBHRGVzdHJveU5vdGlmeSBub3RpZnkpOwpnYm9vbGVhbiBn X2lkbGVfcmVtb3ZlX2J5X2RhdGEgKGdwb2ludGVyIGRhdGEpOwoKCmV4dGVybiBHU291cmNlRnVu Y3MgZ190aW1lb3V0X2Z1bmNzOwpleHRlcm4gR1NvdXJjZUZ1bmNzIGdfaWRsZV9mdW5jczsKIyAz MTMgIi4uL2dsaWIvZ21haW4uaCIKCiMgMzIgIi4uL2dsaWIvZ2lvY2hhbm5lbC5oIiAyCiMgMSAi Li4vZ2xpYi9nc3RyaW5nLmgiIDEKIyAzMSAiLi4vZ2xpYi9nc3RyaW5nLmgiCiMgMSAiLi4vZ2xp Yi9ndW5pY29kZS5oIiAxCiMgMjggIi4uL2dsaWIvZ3VuaWNvZGUuaCIKCgp0eXBlZGVmIGd1aW50 MzIgZ3VuaWNoYXI7CnR5cGVkZWYgZ3VpbnQxNiBndW5pY2hhcjI7CgoKCgp0eXBlZGVmIGVudW0K ewogIEdfVU5JQ09ERV9DT05UUk9MLAogIEdfVU5JQ09ERV9GT1JNQVQsCiAgR19VTklDT0RFX1VO QVNTSUdORUQsCiAgR19VTklDT0RFX1BSSVZBVEVfVVNFLAogIEdfVU5JQ09ERV9TVVJST0dBVEUs CiAgR19VTklDT0RFX0xPV0VSQ0FTRV9MRVRURVIsCiAgR19VTklDT0RFX01PRElGSUVSX0xFVFRF UiwKICBHX1VOSUNPREVfT1RIRVJfTEVUVEVSLAogIEdfVU5JQ09ERV9USVRMRUNBU0VfTEVUVEVS LAogIEdfVU5JQ09ERV9VUFBFUkNBU0VfTEVUVEVSLAogIEdfVU5JQ09ERV9DT01CSU5JTkdfTUFS SywKICBHX1VOSUNPREVfRU5DTE9TSU5HX01BUkssCiAgR19VTklDT0RFX05PTl9TUEFDSU5HX01B UkssCiAgR19VTklDT0RFX0RFQ0lNQUxfTlVNQkVSLAogIEdfVU5JQ09ERV9MRVRURVJfTlVNQkVS LAogIEdfVU5JQ09ERV9PVEhFUl9OVU1CRVIsCiAgR19VTklDT0RFX0NPTk5FQ1RfUFVOQ1RVQVRJ T04sCiAgR19VTklDT0RFX0RBU0hfUFVOQ1RVQVRJT04sCiAgR19VTklDT0RFX0NMT1NFX1BVTkNU VUFUSU9OLAogIEdfVU5JQ09ERV9GSU5BTF9QVU5DVFVBVElPTiwKICBHX1VOSUNPREVfSU5JVElB TF9QVU5DVFVBVElPTiwKICBHX1VOSUNPREVfT1RIRVJfUFVOQ1RVQVRJT04sCiAgR19VTklDT0RF X09QRU5fUFVOQ1RVQVRJT04sCiAgR19VTklDT0RFX0NVUlJFTkNZX1NZTUJPTCwKICBHX1VOSUNP REVfTU9ESUZJRVJfU1lNQk9MLAogIEdfVU5JQ09ERV9NQVRIX1NZTUJPTCwKICBHX1VOSUNPREVf T1RIRVJfU1lNQk9MLAogIEdfVU5JQ09ERV9MSU5FX1NFUEFSQVRPUiwKICBHX1VOSUNPREVfUEFS QUdSQVBIX1NFUEFSQVRPUiwKICBHX1VOSUNPREVfU1BBQ0VfU0VQQVJBVE9SCn0gR1VuaWNvZGVU eXBlOwoKCgoKdHlwZWRlZiBlbnVtCnsKICBHX1VOSUNPREVfQlJFQUtfTUFOREFUT1JZLAogIEdf VU5JQ09ERV9CUkVBS19DQVJSSUFHRV9SRVRVUk4sCiAgR19VTklDT0RFX0JSRUFLX0xJTkVfRkVF RCwKICBHX1VOSUNPREVfQlJFQUtfQ09NQklOSU5HX01BUkssCiAgR19VTklDT0RFX0JSRUFLX1NV UlJPR0FURSwKICBHX1VOSUNPREVfQlJFQUtfWkVST19XSURUSF9TUEFDRSwKICBHX1VOSUNPREVf QlJFQUtfSU5TRVBBUkFCTEUsCiAgR19VTklDT0RFX0JSRUFLX05PTl9CUkVBS0lOR19HTFVFLAog IEdfVU5JQ09ERV9CUkVBS19DT05USU5HRU5ULAogIEdfVU5JQ09ERV9CUkVBS19TUEFDRSwKICBH X1VOSUNPREVfQlJFQUtfQUZURVIsCiAgR19VTklDT0RFX0JSRUFLX0JFRk9SRSwKICBHX1VOSUNP REVfQlJFQUtfQkVGT1JFX0FORF9BRlRFUiwKICBHX1VOSUNPREVfQlJFQUtfSFlQSEVOLAogIEdf VU5JQ09ERV9CUkVBS19OT05fU1RBUlRFUiwKICBHX1VOSUNPREVfQlJFQUtfT1BFTl9QVU5DVFVB VElPTiwKICBHX1VOSUNPREVfQlJFQUtfQ0xPU0VfUFVOQ1RVQVRJT04sCiAgR19VTklDT0RFX0JS RUFLX1FVT1RBVElPTiwKICBHX1VOSUNPREVfQlJFQUtfRVhDTEFNQVRJT04sCiAgR19VTklDT0RF X0JSRUFLX0lERU9HUkFQSElDLAogIEdfVU5JQ09ERV9CUkVBS19OVU1FUklDLAogIEdfVU5JQ09E RV9CUkVBS19JTkZJWF9TRVBBUkFUT1IsCiAgR19VTklDT0RFX0JSRUFLX1NZTUJPTCwKICBHX1VO SUNPREVfQlJFQUtfQUxQSEFCRVRJQywKICBHX1VOSUNPREVfQlJFQUtfUFJFRklYLAogIEdfVU5J Q09ERV9CUkVBS19QT1NURklYLAogIEdfVU5JQ09ERV9CUkVBS19DT01QTEVYX0NPTlRFWFQsCiAg R19VTklDT0RFX0JSRUFLX0FNQklHVU9VUywKICBHX1VOSUNPREVfQlJFQUtfVU5LTk9XTgp9IEdV bmljb2RlQnJlYWtUeXBlOwoKCgoKCgoKZ2Jvb2xlYW4gZ19nZXRfY2hhcnNldCAoY29uc3QgY2hh ciAqKmNoYXJzZXQpOwoKCgpnYm9vbGVhbiBnX3VuaWNoYXJfaXNhbG51bSAoZ3VuaWNoYXIgYykg X19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7Cmdib29sZWFuIGdfdW5pY2hhcl9pc2FscGhhIChn dW5pY2hhciBjKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKZ2Jvb2xlYW4gZ191bmljaGFy X2lzY250cmwgKGd1bmljaGFyIGMpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpnYm9vbGVh biBnX3VuaWNoYXJfaXNkaWdpdCAoZ3VuaWNoYXIgYykgX19hdHRyaWJ1dGVfXygoX19jb25zdF9f KSk7Cmdib29sZWFuIGdfdW5pY2hhcl9pc2dyYXBoIChndW5pY2hhciBjKSBfX2F0dHJpYnV0ZV9f KChfX2NvbnN0X18pKTsKZ2Jvb2xlYW4gZ191bmljaGFyX2lzbG93ZXIgKGd1bmljaGFyIGMpIF9f YXR0cmlidXRlX18oKF9fY29uc3RfXykpOwpnYm9vbGVhbiBnX3VuaWNoYXJfaXNwcmludCAoZ3Vu aWNoYXIgYykgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7Cmdib29sZWFuIGdfdW5pY2hhcl9p c3B1bmN0IChndW5pY2hhciBjKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKZ2Jvb2xlYW4g Z191bmljaGFyX2lzc3BhY2UgKGd1bmljaGFyIGMpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykp OwpnYm9vbGVhbiBnX3VuaWNoYXJfaXN1cHBlciAoZ3VuaWNoYXIgYykgX19hdHRyaWJ1dGVfXygo X19jb25zdF9fKSk7Cmdib29sZWFuIGdfdW5pY2hhcl9pc3hkaWdpdCAoZ3VuaWNoYXIgYykgX19h dHRyaWJ1dGVfXygoX19jb25zdF9fKSk7Cmdib29sZWFuIGdfdW5pY2hhcl9pc3RpdGxlIChndW5p Y2hhciBjKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKZ2Jvb2xlYW4gZ191bmljaGFyX2lz ZGVmaW5lZCAoZ3VuaWNoYXIgYykgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7Cmdib29sZWFu IGdfdW5pY2hhcl9pc3dpZGUgKGd1bmljaGFyIGMpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykp OwoKCgpndW5pY2hhciBnX3VuaWNoYXJfdG91cHBlciAoZ3VuaWNoYXIgYykgX19hdHRyaWJ1dGVf XygoX19jb25zdF9fKSk7Cmd1bmljaGFyIGdfdW5pY2hhcl90b2xvd2VyIChndW5pY2hhciBjKSBf X2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKZ3VuaWNoYXIgZ191bmljaGFyX3RvdGl0bGUgKGd1 bmljaGFyIGMpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwoKCgpnaW50IGdfdW5pY2hhcl9k aWdpdF92YWx1ZSAoZ3VuaWNoYXIgYykgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CgpnaW50 IGdfdW5pY2hhcl94ZGlnaXRfdmFsdWUgKGd1bmljaGFyIGMpIF9fYXR0cmlidXRlX18oKF9fY29u c3RfXykpOwoKCkdVbmljb2RlVHlwZSBnX3VuaWNoYXJfdHlwZSAoZ3VuaWNoYXIgYykgX19hdHRy aWJ1dGVfXygoX19jb25zdF9fKSk7CgoKR1VuaWNvZGVCcmVha1R5cGUgZ191bmljaGFyX2JyZWFr X3R5cGUgKGd1bmljaGFyIGMpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwoKCgoKCnZvaWQg Z191bmljb2RlX2Nhbm9uaWNhbF9vcmRlcmluZyAoZ3VuaWNoYXIgKnN0cmluZywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSBsZW4pOwoKCgoKZ3VuaWNoYXIgKmdfdW5p Y29kZV9jYW5vbmljYWxfZGVjb21wb3NpdGlvbiAoZ3VuaWNoYXIgY2gsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplICpyZXN1bHRfbGVuKTsKCgoKZXh0 ZXJuIGNvbnN0IGdjaGFyICogY29uc3QgZ191dGY4X3NraXA7CgoKCmd1bmljaGFyIGdfdXRmOF9n ZXRfY2hhciAoY29uc3QgZ2NoYXIgKnApOwpndW5pY2hhciBnX3V0ZjhfZ2V0X2NoYXJfdmFsaWRh dGVkIChjb25zdCBnY2hhciAqcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z3NzaXplIG1heF9sZW4pOwoKZ2NoYXIqIGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRlciAoY29uc3Qg Z2NoYXIgKnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9uZyBvZmZz ZXQpOwpnbG9uZyBnX3V0ZjhfcG9pbnRlcl90b19vZmZzZXQgKGNvbnN0IGdjaGFyICpzdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnBvcyk7CmdjaGFy KiBnX3V0ZjhfcHJldl9jaGFyIChjb25zdCBnY2hhciAqcCk7CmdjaGFyKiBnX3V0ZjhfZmluZF9u ZXh0X2NoYXIgKGNvbnN0IGdjaGFyICpwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGdjaGFyICplbmQpOwpnY2hhciogZ191dGY4X2ZpbmRfcHJldl9jaGFyIChjb25z dCBnY2hhciAqc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdj aGFyICpwKTsKCmdsb25nIGdfdXRmOF9zdHJsZW4gKGNvbnN0IGdjaGFyICpwLAogICAgICAgICAg ICAgICAgICAgICBnc3NpemUgbWF4KTsKCgpnY2hhciogZ191dGY4X3N0cm5jcHkgKGdjaGFyICpk ZXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpzcmMsCiAgICAgICAgICAg ICAgICAgICAgICAgZ3NpemUgbik7CgoKCmdjaGFyKiBnX3V0Zjhfc3RyY2hyIChjb25zdCBnY2hh ciAqcCwKICAgICAgICAgICAgICAgICAgICAgICBnc3NpemUgbGVuLAogICAgICAgICAgICAgICAg ICAgICAgIGd1bmljaGFyIGMpOwpnY2hhciogZ191dGY4X3N0cnJjaHIgKGNvbnN0IGdjaGFyICpw LAogICAgICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBsZW4sCiAgICAgICAgICAgICAgICAgICAg ICAgZ3VuaWNoYXIgYyk7CmdjaGFyKiBnX3V0Zjhfc3RycmV2ZXJzZSAoY29uc3QgZ2NoYXIgKnN0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NpemUgbGVuKTsKCmd1bmljaGFyMiAqZ191 dGY4X3RvX3V0ZjE2IChjb25zdCBnY2hhciAqc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdsb25nIGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9uZyAq aXRlbXNfcmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9uZyAqaXRlbXNf d3JpdHRlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7 Cmd1bmljaGFyICogZ191dGY4X3RvX3VjczQgKGNvbnN0IGdjaGFyICpzdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2xvbmcgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdsb25nICppdGVtc19yZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdsb25nICppdGVtc193cml0dGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdF cnJvciAqKmVycm9yKTsKZ3VuaWNoYXIgKiBnX3V0ZjhfdG9fdWNzNF9mYXN0IChjb25zdCBnY2hh ciAqc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb25nIGxlbiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9uZyAqaXRlbXNfd3JpdHRlbik7Cmd1bmljaGFy ICogZ191dGYxNl90b191Y3M0IChjb25zdCBndW5pY2hhcjIgKnN0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnbG9uZyBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2xvbmcgKml0ZW1zX3JlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xv bmcgKml0ZW1zX3dyaXR0ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9y ICoqZXJyb3IpOwpnY2hhciogZ191dGYxNl90b191dGY4IChjb25zdCBndW5pY2hhcjIgKnN0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9uZyBsZW4sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2xvbmcgKml0ZW1zX3JlYWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2xvbmcgKml0ZW1zX3dyaXR0ZW4sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwpndW5pY2hhcjIgKmdfdWNzNF90b191dGYxNiAoY29u c3QgZ3VuaWNoYXIgKnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9uZyBs ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvbmcgKml0ZW1zX3JlYWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvbmcgKml0ZW1zX3dyaXR0ZW4sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwpnY2hhciogZ191Y3M0 X3RvX3V0ZjggKGNvbnN0IGd1bmljaGFyICpzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2xvbmcgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb25nICpp dGVtc19yZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb25nICppdGVtc193 cml0dGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsK CgoKCgpnaW50IGdfdW5pY2hhcl90b191dGY4IChndW5pY2hhciBjLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdjaGFyICpvdXRidWYpOwoKCgoKCmdib29sZWFuIGdfdXRmOF92YWxpZGF0 ZSAoY29uc3QgZ2NoYXIgKnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NpemUgbWF4 X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqKmVuZCk7CgoKZ2Jv b2xlYW4gZ191bmljaGFyX3ZhbGlkYXRlIChndW5pY2hhciBjaCk7CgpnY2hhciAqZ191dGY4X3N0 cnVwIChjb25zdCBnY2hhciAqc3RyLAogICAgICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBsZW4p OwpnY2hhciAqZ191dGY4X3N0cmRvd24gKGNvbnN0IGdjaGFyICpzdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgZ3NzaXplIGxlbik7CmdjaGFyICpnX3V0ZjhfY2FzZWZvbGQgKGNvbnN0IGdjaGFy ICpzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBsZW4pOwoKdHlwZWRlZiBlbnVt IHsKICBHX05PUk1BTElaRV9ERUZBVUxULAogIEdfTk9STUFMSVpFX05GRCA9IEdfTk9STUFMSVpF X0RFRkFVTFQsCiAgR19OT1JNQUxJWkVfREVGQVVMVF9DT01QT1NFLAogIEdfTk9STUFMSVpFX05G QyA9IEdfTk9STUFMSVpFX0RFRkFVTFRfQ09NUE9TRSwKICBHX05PUk1BTElaRV9BTEwsCiAgR19O T1JNQUxJWkVfTkZLRCA9IEdfTk9STUFMSVpFX0FMTCwKICBHX05PUk1BTElaRV9BTExfQ09NUE9T RSwKICBHX05PUk1BTElaRV9ORktDID0gR19OT1JNQUxJWkVfQUxMX0NPTVBPU0UKfSBHTm9ybWFs aXplTW9kZTsKCmdjaGFyICpnX3V0Zjhfbm9ybWFsaXplIChjb25zdCBnY2hhciAqc3RyLAogICAg ICAgICAgICAgICAgICAgICAgICAgZ3NzaXplIGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAg IEdOb3JtYWxpemVNb2RlIG1vZGUpOwoKZ2ludCBnX3V0ZjhfY29sbGF0ZSAoY29uc3QgZ2NoYXIg KnN0cjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpzdHIyKTsKZ2No YXIgKmdfdXRmOF9jb2xsYXRlX2tleSAoY29uc3QgZ2NoYXIgKnN0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ3NzaXplIGxlbik7CgoKIyAzMiAiLi4vZ2xpYi9nc3RyaW5nLmgiIDIKCgoK dHlwZWRlZiBzdHJ1Y3QgX0dTdHJpbmcgR1N0cmluZzsKdHlwZWRlZiBzdHJ1Y3QgX0dTdHJpbmdD aHVuayBHU3RyaW5nQ2h1bms7CgpzdHJ1Y3QgX0dTdHJpbmcKewogIGdjaGFyICpzdHI7CiAgZ3Np emUgbGVuOwogIGdzaXplIGFsbG9jYXRlZF9sZW47Cn07CgoKCkdTdHJpbmdDaHVuayogZ19zdHJp bmdfY2h1bmtfbmV3IChnc2l6ZSBzaXplKTsKdm9pZCBnX3N0cmluZ19jaHVua19mcmVlIChHU3Ry aW5nQ2h1bmsgKmNodW5rKTsKZ2NoYXIqIGdfc3RyaW5nX2NodW5rX2luc2VydCAoR1N0cmluZ0No dW5rICpjaHVuaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBnY2hhciAqc3RyaW5nKTsKZ2NoYXIqIGdfc3RyaW5nX2NodW5rX2luc2VydF9jb25zdCAo R1N0cmluZ0NodW5rICpjaHVuaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBnY2hhciAqc3RyaW5nKTsKCgoKCkdTdHJpbmcqIGdfc3RyaW5nX25ldyAo Y29uc3QgZ2NoYXIgKmluaXQpOwpHU3RyaW5nKiBnX3N0cmluZ19uZXdfbGVuIChjb25zdCBnY2hh ciAqaW5pdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NpemUg bGVuKTsKR1N0cmluZyogZ19zdHJpbmdfc2l6ZWRfbmV3IChnc2l6ZSBkZmxfc2l6ZSk7CmdjaGFy KiBnX3N0cmluZ19mcmVlIChHU3RyaW5nICpzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gZnJlZV9zZWdtZW50KTsKZ2Jvb2xlYW4gZ19zdHJp bmdfZXF1YWwgKGNvbnN0IEdTdHJpbmcgKnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgR1N0cmluZyAqdjIpOwpndWludCBnX3N0cmluZ19oYXNoIChjb25z dCBHU3RyaW5nICpzdHIpOwpHU3RyaW5nKiBnX3N0cmluZ19hc3NpZ24gKEdTdHJpbmcgKnN0cmlu ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAq cnZhbCk7CkdTdHJpbmcqIGdfc3RyaW5nX3RydW5jYXRlIChHU3RyaW5nICpzdHJpbmcsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgbGVuKTsKR1N0cmluZyog Z19zdHJpbmdfc2V0X3NpemUgKEdTdHJpbmcgKnN0cmluZywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBnc2l6ZSBsZW4pOwpHU3RyaW5nKiBnX3N0cmluZ19pbnNlcnRf bGVuIChHU3RyaW5nICpzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ3NzaXplIHBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBnY2hhciAqdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdzc2l6ZSBsZW4pOwpHU3RyaW5nKiBnX3N0cmluZ19hcHBlbmQgKEdTdHJpbmcgKnN0cmlu ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAq dmFsKTsKR1N0cmluZyogZ19zdHJpbmdfYXBwZW5kX2xlbiAoR1N0cmluZyAqc3RyaW5nLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICp2YWwsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzaXplIGxlbik7CkdTdHJp bmcqIGdfc3RyaW5nX2FwcGVuZF9jIChHU3RyaW5nICpzdHJpbmcsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgYyk7CkdTdHJpbmcqIGdfc3RyaW5nX2FwcGVu ZF91bmljaGFyIChHU3RyaW5nICpzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ3VuaWNoYXIgd2MpOwpHU3RyaW5nKiBnX3N0cmluZ19wcmVwZW5kIChHU3Ry aW5nICpzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgZ2NoYXIgKnZhbCk7CkdTdHJpbmcqIGdfc3RyaW5nX3ByZXBlbmRfYyAoR1N0cmluZyAqc3Ry aW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyIGMpOwpH U3RyaW5nKiBnX3N0cmluZ19wcmVwZW5kX3VuaWNoYXIgKEdTdHJpbmcgKnN0cmluZywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndW5pY2hhciB3Yyk7CkdTdHJpbmcq IGdfc3RyaW5nX3ByZXBlbmRfbGVuIChHU3RyaW5nICpzdHJpbmcsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnZhbCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnc3NpemUgbGVuKTsKR1N0cmluZyogZ19zdHJpbmdf aW5zZXJ0IChHU3RyaW5nICpzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ3NzaXplIHBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBnY2hhciAqdmFsKTsKR1N0cmluZyogZ19zdHJpbmdfaW5zZXJ0X2MgKEdTdHJp bmcgKnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3Np emUgcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyIGMp OwpHU3RyaW5nKiBnX3N0cmluZ19pbnNlcnRfdW5pY2hhciAoR1N0cmluZyAqc3RyaW5nLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBwb3MsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VuaWNoYXIgd2MpOwpHU3RyaW5nKiBn X3N0cmluZ19lcmFzZSAoR1N0cmluZyAqc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdzc2l6ZSBwb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ3NzaXplIGxlbik7CkdTdHJpbmcqIGdfc3RyaW5nX2FzY2lpX2Rvd24gKEdT dHJpbmcgKnN0cmluZyk7CkdTdHJpbmcqIGdfc3RyaW5nX2FzY2lpX3VwIChHU3RyaW5nICpzdHJp bmcpOwp2b2lkIGdfc3RyaW5nX3ByaW50ZiAoR1N0cmluZyAqc3RyaW5nLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpmb3JtYXQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSBfX2F0dHJpYnV0ZV9fKChfX2Zv cm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwp2b2lkIGdfc3RyaW5nX2FwcGVuZF9wcmludGYg KEdTdHJpbmcgKnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBnY2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC4uLikgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykp KTsKIyAxMzEgIi4uL2dsaWIvZ3N0cmluZy5oIgoKIyAzMyAiLi4vZ2xpYi9naW9jaGFubmVsLmgi IDIKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0dJT0NoYW5uZWwgR0lPQ2hhbm5lbDsKdHlwZWRlZiBz dHJ1Y3QgX0dJT0Z1bmNzIEdJT0Z1bmNzOwoKdHlwZWRlZiBlbnVtCnsKICBHX0lPX0VSUk9SX05P TkUsCiAgR19JT19FUlJPUl9BR0FJTiwKICBHX0lPX0VSUk9SX0lOVkFMLAogIEdfSU9fRVJST1Jf VU5LTk9XTgp9IEdJT0Vycm9yOwoKCgp0eXBlZGVmIGVudW0KewoKICBHX0lPX0NIQU5ORUxfRVJS T1JfRkJJRywKICBHX0lPX0NIQU5ORUxfRVJST1JfSU5WQUwsCiAgR19JT19DSEFOTkVMX0VSUk9S X0lPLAogIEdfSU9fQ0hBTk5FTF9FUlJPUl9JU0RJUiwKICBHX0lPX0NIQU5ORUxfRVJST1JfTk9T UEMsCiAgR19JT19DSEFOTkVMX0VSUk9SX05YSU8sCiAgR19JT19DSEFOTkVMX0VSUk9SX09WRVJG TE9XLAogIEdfSU9fQ0hBTk5FTF9FUlJPUl9QSVBFLAoKICBHX0lPX0NIQU5ORUxfRVJST1JfRkFJ TEVECn0gR0lPQ2hhbm5lbEVycm9yOwoKdHlwZWRlZiBlbnVtCnsKICBHX0lPX1NUQVRVU19FUlJP UiwKICBHX0lPX1NUQVRVU19OT1JNQUwsCiAgR19JT19TVEFUVVNfRU9GLAogIEdfSU9fU1RBVFVT X0FHQUlOCn0gR0lPU3RhdHVzOwoKdHlwZWRlZiBlbnVtCnsKICBHX1NFRUtfQ1VSLAogIEdfU0VF S19TRVQsCiAgR19TRUVLX0VORAp9IEdTZWVrVHlwZTsKCnR5cGVkZWYgZW51bQp7CiAgR19JT19J TiA9MSwKICBHX0lPX09VVCA9NCwKICBHX0lPX1BSSSA9MiwKICBHX0lPX0VSUiA9OCwKICBHX0lP X0hVUCA9MTYsCiAgR19JT19OVkFMID0zMgp9IEdJT0NvbmRpdGlvbjsKCnR5cGVkZWYgZW51bQp7 CiAgR19JT19GTEFHX0FQUEVORCA9IDEgPDwgMCwKICBHX0lPX0ZMQUdfTk9OQkxPQ0sgPSAxIDw8 IDEsCiAgR19JT19GTEFHX0lTX1JFQURBQkxFID0gMSA8PCAyLAogIEdfSU9fRkxBR19JU19XUklU RUFCTEUgPSAxIDw8IDMsCiAgR19JT19GTEFHX0lTX1NFRUtBQkxFID0gMSA8PCA0LAogIEdfSU9f RkxBR19NQVNLID0gKDEgPDwgNSkgLSAxLAogIEdfSU9fRkxBR19HRVRfTUFTSyA9IEdfSU9fRkxB R19NQVNLLAogIEdfSU9fRkxBR19TRVRfTUFTSyA9IEdfSU9fRkxBR19BUFBFTkQgfCBHX0lPX0ZM QUdfTk9OQkxPQ0sKfSBHSU9GbGFnczsKCnN0cnVjdCBfR0lPQ2hhbm5lbAp7CgogIGd1aW50IHJl Zl9jb3VudDsKICBHSU9GdW5jcyAqZnVuY3M7CgogIGdjaGFyICplbmNvZGluZzsKICBHSUNvbnYg cmVhZF9jZDsKICBHSUNvbnYgd3JpdGVfY2Q7CiAgZ2NoYXIgKmxpbmVfdGVybTsKICBndWludCBs aW5lX3Rlcm1fbGVuOwoKICBnc2l6ZSBidWZfc2l6ZTsKICBHU3RyaW5nICpyZWFkX2J1ZjsKICBH U3RyaW5nICplbmNvZGVkX3JlYWRfYnVmOwogIEdTdHJpbmcgKndyaXRlX2J1ZjsKICBnY2hhciBw YXJ0aWFsX3dyaXRlX2J1Zls2XTsKCgoKICBndWludCB1c2VfYnVmZmVyIDogMTsKICBndWludCBk b19lbmNvZGUgOiAxOwogIGd1aW50IGNsb3NlX29uX3VucmVmIDogMTsKICBndWludCBpc19yZWFk YWJsZSA6IDE7CiAgZ3VpbnQgaXNfd3JpdGVhYmxlIDogMTsKICBndWludCBpc19zZWVrYWJsZSA6 IDE7CgogIGdwb2ludGVyIHJlc2VydmVkMTsKICBncG9pbnRlciByZXNlcnZlZDI7Cn07Cgp0eXBl ZGVmIGdib29sZWFuICgqR0lPRnVuYykgKEdJT0NoYW5uZWwgKnNvdXJjZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHSU9Db25kaXRpb24gY29uZGl0aW9uLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpOwpzdHJ1Y3QgX0dJT0Z1bmNzCnsKICBHSU9TdGF0 dXMgKCppb19yZWFkKSAoR0lPQ2hhbm5lbCAqY2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdjaGFyICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnc2l6ZSBjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplICpi eXRlc19yZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJy KTsKICBHSU9TdGF0dXMgKCppb193cml0ZSkgKEdJT0NoYW5uZWwgKmNoYW5uZWwsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqYnVmLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ3NpemUgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnc2l6ZSAqYnl0ZXNfd3JpdHRlbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdFcnJvciAqKmVycik7CiAgR0lPU3RhdHVzICgqaW9fc2VlaykgKEdJT0NoYW5u ZWwgKmNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50NjQgb2Zm c2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NlZWtUeXBlIHR5cGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnIpOwogIEdJT1N0YXR1 cyAoKmlvX2Nsb3NlKSAoR0lPQ2hhbm5lbCAqY2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdFcnJvciAqKmVycik7CiAgR1NvdXJjZSogKCppb19jcmVhdGVfd2F0Y2gp IChHSU9DaGFubmVsICpjaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R0lPQ29uZGl0aW9uIGNvbmRpdGlvbik7CiAgdm9pZCAoKmlvX2ZyZWUpIChHSU9DaGFubmVsICpj aGFubmVsKTsKICBHSU9TdGF0dXMgKCppb19zZXRfZmxhZ3MpIChHSU9DaGFubmVsICpjaGFubmVs LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0lPRmxhZ3MgZmxhZ3MsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnIpOwogIEdJT0ZsYWdzICgq aW9fZ2V0X2ZsYWdzKSAoR0lPQ2hhbm5lbCAqY2hhbm5lbCk7Cn07Cgp2b2lkIGdfaW9fY2hhbm5l bF9pbml0IChHSU9DaGFubmVsICpjaGFubmVsKTsKdm9pZCBnX2lvX2NoYW5uZWxfcmVmIChHSU9D aGFubmVsICpjaGFubmVsKTsKdm9pZCBnX2lvX2NoYW5uZWxfdW5yZWYgKEdJT0NoYW5uZWwgKmNo YW5uZWwpOwojIDE4NCAiLi4vZ2xpYi9naW9jaGFubmVsLmgiCkdJT1N0YXR1cyBnX2lvX2NoYW5u ZWxfc2h1dGRvd24gKEdJT0NoYW5uZWwgKmNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdib29sZWFuIGZsdXNoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHRXJyb3IgKiplcnIpOwpndWludCBnX2lvX2FkZF93YXRjaF9mdWxsIChHSU9DaGFubmVsICpj aGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IHByaW9yaXR5LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSU9Db25kaXRpb24gY29uZGl0aW9uLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSU9GdW5jIGZ1bmMsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgbm90aWZ5KTsKR1NvdXJjZSAqIGdfaW9f Y3JlYXRlX3dhdGNoIChHSU9DaGFubmVsICpjaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHSU9Db25kaXRpb24gY29uZGl0aW9uKTsKZ3VpbnQgZ19pb19hZGRfd2F0Y2gg KEdJT0NoYW5uZWwgKmNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdJ T0NvbmRpdGlvbiBjb25kaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdJ T0Z1bmMgZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNl cl9kYXRhKTsKCgoKCnZvaWQgZ19pb19jaGFubmVsX3NldF9idWZmZXJfc2l6ZSAoR0lPQ2hhbm5l bCAqY2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ3NpemUgc2l6ZSk7CmdzaXplIGdfaW9fY2hhbm5lbF9nZXRfYnVmZmVyX3Np emUgKEdJT0NoYW5uZWwgKmNoYW5uZWwpOwpHSU9Db25kaXRpb24gZ19pb19jaGFubmVsX2dldF9i dWZmZXJfY29uZGl0aW9uIChHSU9DaGFubmVsICpjaGFubmVsKTsKR0lPU3RhdHVzIGdfaW9fY2hh bm5lbF9zZXRfZmxhZ3MgKEdJT0NoYW5uZWwgKmNoYW5uZWwsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdJT0ZsYWdzIGZsYWdzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJy b3IgKiplcnJvcik7CkdJT0ZsYWdzIGdfaW9fY2hhbm5lbF9nZXRfZmxhZ3MgKEdJT0NoYW5uZWwg KmNoYW5uZWwpOwp2b2lkIGdfaW9fY2hhbm5lbF9zZXRfbGluZV90ZXJtIChHSU9DaGFubmVsICpj aGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBnY2hhciAqbGluZV90ZXJtLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGxlbmd0aCk7CmNvbnN0IGdjaGFy KiBnX2lvX2NoYW5uZWxfZ2V0X2xpbmVfdGVybSAoR0lPQ2hhbm5lbCAqY2hhbm5lbCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAq bGVuZ3RoKTsKdm9pZCBnX2lvX2NoYW5uZWxfc2V0X2J1ZmZlcmVkIChHSU9DaGFubmVsICpjaGFu bmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnYm9vbGVhbiBidWZmZXJlZCk7Cmdib29sZWFuIGdfaW9fY2hhbm5lbF9nZXRfYnVmZmVy ZWQgKEdJT0NoYW5uZWwgKmNoYW5uZWwpOwpHSU9TdGF0dXMgZ19pb19jaGFubmVsX3NldF9lbmNv ZGluZyAoR0lPQ2hhbm5lbCAqY2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKmVuY29kaW5nLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3Ig KiplcnJvcik7CmNvbnN0IGdjaGFyKiBnX2lvX2NoYW5uZWxfZ2V0X2VuY29kaW5nIChHSU9DaGFu bmVsICpjaGFubmVsKTsKdm9pZCBnX2lvX2NoYW5uZWxfc2V0X2Nsb3NlX29uX3VucmVmIChHSU9D aGFubmVsICpjaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnYm9vbGVhbiBkb19jbG9zZSk7Cmdib29sZWFuIGdfaW9fY2hhbm5l bF9nZXRfY2xvc2Vfb25fdW5yZWYgKEdJT0NoYW5uZWwgKmNoYW5uZWwpOwoKCkdJT1N0YXR1cyBn X2lvX2NoYW5uZWxfZmx1c2ggKEdJT0NoYW5uZWwgKmNoYW5uZWwsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7CkdJT1N0YXR1cyBnX2lv X2NoYW5uZWxfcmVhZF9saW5lIChHSU9DaGFubmVsICpjaGFubmVsLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgKipzdHJfcmV0dXJuLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgKmxlbmd0aCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplICp0ZXJtaW5hdG9yX3BvcywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9y KTsKR0lPU3RhdHVzIGdfaW9fY2hhbm5lbF9yZWFkX2xpbmVfc3RyaW5nIChHSU9DaGFubmVsICpj aGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1N0cmlu ZyAqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Np emUgKnRlcm1pbmF0b3JfcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR0Vycm9yICoqZXJyb3IpOwpHSU9TdGF0dXMgZ19pb19jaGFubmVsX3JlYWRfdG9fZW5k IChHSU9DaGFubmVsICpjaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ2NoYXIgKipzdHJfcmV0dXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ3NpemUgKmxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsKR0lPU3RhdHVzIGdfaW9fY2hhbm5lbF9y ZWFkX2NoYXJzIChHSU9DaGFubmVsICpjaGFubmVsLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2NoYXIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdzaXplIGNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ3NpemUgKmJ5dGVzX3JlYWQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7CkdJT1N0YXR1cyBnX2lvX2NoYW5u ZWxfcmVhZF91bmljaGFyIChHSU9DaGFubmVsICpjaGFubmVsLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ3VuaWNoYXIgKnRoZWNoYXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7CkdJT1N0YXR1cyBn X2lvX2NoYW5uZWxfd3JpdGVfY2hhcnMgKEdJT0NoYW5uZWwgKmNoYW5uZWwsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqYnVmLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzaXplIGNvdW50LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgKmJ5dGVzX3dyaXR0ZW4s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnJv cik7CkdJT1N0YXR1cyBnX2lvX2NoYW5uZWxfd3JpdGVfdW5pY2hhciAoR0lPQ2hhbm5lbCAqY2hh bm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1bmljaGFy IHRoZWNoYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJy b3IgKiplcnJvcik7CkdJT1N0YXR1cyBnX2lvX2NoYW5uZWxfc2Vla19wb3NpdGlvbiAoR0lPQ2hh bm5lbCAqY2hhbm5lbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdpbnQ2NCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBHU2Vla1R5cGUgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdFcnJvciAqKmVycm9yKTsKR0lPQ2hhbm5lbCogZ19pb19jaGFubmVsX25ld19maWxlIChj b25zdCBnY2hhciAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBnY2hhciAqbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsKCgoKR1F1YXJrIGdfaW9fY2hhbm5lbF9lcnJv cl9xdWFyayAodm9pZCk7CkdJT0NoYW5uZWxFcnJvciBnX2lvX2NoYW5uZWxfZXJyb3JfZnJvbV9l cnJubyAoZ2ludCBlbik7CiMgMjkwICIuLi9nbGliL2dpb2NoYW5uZWwuaCIKR0lPQ2hhbm5lbCog Z19pb19jaGFubmVsX3VuaXhfbmV3IChpbnQgZmQpOwpnaW50IGdfaW9fY2hhbm5lbF91bml4X2dl dF9mZCAoR0lPQ2hhbm5lbCAqY2hhbm5lbCk7CgoKCmV4dGVybiBHU291cmNlRnVuY3MgZ19pb193 YXRjaF9mdW5jczsKIyAzNTEgIi4uL2dsaWIvZ2lvY2hhbm5lbC5oIgoKIyA0NSAiZ2xpYi5oIiAy CgoKCiMgMSAiLi4vZ2xpYi9nbWFya3VwLmgiIDEKIyAyNiAiLi4vZ2xpYi9nbWFya3VwLmgiCgoK dHlwZWRlZiBlbnVtCnsKICBHX01BUktVUF9FUlJPUl9CQURfVVRGOCwKICBHX01BUktVUF9FUlJP Ul9FTVBUWSwKICBHX01BUktVUF9FUlJPUl9QQVJTRSwKCgoKICBHX01BUktVUF9FUlJPUl9VTktO T1dOX0VMRU1FTlQsCiAgR19NQVJLVVBfRVJST1JfVU5LTk9XTl9BVFRSSUJVVEUsCiAgR19NQVJL VVBfRVJST1JfSU5WQUxJRF9DT05URU5UCn0gR01hcmt1cEVycm9yOwoKCgpHUXVhcmsgZ19tYXJr dXBfZXJyb3JfcXVhcmsgKHZvaWQpOwoKdHlwZWRlZiBlbnVtCnsKCiAgR19NQVJLVVBfRE9fTk9U X1VTRV9USElTX1VOU1VQUE9SVEVEX0ZMQUcgPSAxIDw8IDAKCn0gR01hcmt1cFBhcnNlRmxhZ3M7 Cgp0eXBlZGVmIHN0cnVjdCBfR01hcmt1cFBhcnNlQ29udGV4dCBHTWFya3VwUGFyc2VDb250ZXh0 Owp0eXBlZGVmIHN0cnVjdCBfR01hcmt1cFBhcnNlciBHTWFya3VwUGFyc2VyOwoKc3RydWN0IF9H TWFya3VwUGFyc2VyCnsKCiAgdm9pZCAoKnN0YXJ0X2VsZW1lbnQpIChHTWFya3VwUGFyc2VDb250 ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICplbGVt ZW50X25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiphdHRyaWJ1 dGVfbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKiphdHRyaWJ1 dGVfdmFsdWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwK ICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7CgoKICB2b2lkICgqZW5k X2VsZW1lbnQpIChHTWFya3VwUGFyc2VDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGdjaGFyICplbGVtZW50X25hbWUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJv ciAqKmVycm9yKTsKCgoKICB2b2lkICgqdGV4dCkgKEdNYXJrdXBQYXJzZUNvbnRleHQgKmNvbnRl eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnRleHQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgZ3NpemUgdGV4dF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAg ICAgZ3BvaW50ZXIgdXNlcl9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAq KmVycm9yKTsKCgoKCgoKICB2b2lkICgqcGFzc3Rocm91Z2gpIChHTWFya3VwUGFyc2VDb250ZXh0 ICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpwYXNzdGhy b3VnaF90ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplIHRleHRfbGVuLAogICAg ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwKICAgICAgICAgICAgICAg ICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7CgoKCgogIHZvaWQgKCplcnJvcikgKEdNYXJrdXBQ YXJzZUNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICpl cnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwp9OwoK R01hcmt1cFBhcnNlQ29udGV4dCAqZ19tYXJrdXBfcGFyc2VfY29udGV4dF9uZXcgKGNvbnN0IEdN YXJrdXBQYXJzZXIgKnBhcnNlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR01hcmt1cFBhcnNlRmxhZ3MgZmxhZ3MsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lO b3RpZnkgdXNlcl9kYXRhX2Rub3RpZnkpOwp2b2lkIGdfbWFya3VwX3BhcnNlX2NvbnRleHRfZnJl ZSAoR01hcmt1cFBhcnNlQ29udGV4dCAqY29udGV4dCk7Cmdib29sZWFuIGdfbWFya3VwX3BhcnNl X2NvbnRleHRfcGFyc2UgKEdNYXJrdXBQYXJzZUNvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICp0ZXh0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3Np emUgdGV4dF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdFcnJvciAqKmVycm9yKTsKCmdib29sZWFuIGdfbWFya3VwX3BhcnNlX2NvbnRleHRf ZW5kX3BhcnNlIChHTWFya3VwUGFyc2VDb250ZXh0ICpjb250ZXh0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwpj b25zdCBnY2hhciAqZ19tYXJrdXBfcGFyc2VfY29udGV4dF9nZXRfZWxlbWVudCAoR01hcmt1cFBh cnNlQ29udGV4dCAqY29udGV4dCk7CgoKdm9pZCBnX21hcmt1cF9wYXJzZV9jb250ZXh0X2dldF9w b3NpdGlvbiAoR01hcmt1cFBhcnNlQ29udGV4dCAqY29udGV4dCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgKmxpbmVfbnVtYmVy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2ludCAqY2hhcl9udW1iZXIpOwoKCmdjaGFyKiBnX21hcmt1cF9lc2NhcGVfdGV4dCAoY29u c3QgZ2NoYXIgKnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzaXplIGxlbmd0 aCk7CgoKIyA0OSAiZ2xpYi5oIiAyCgojIDEgIi4uL2dsaWIvZ21lc3NhZ2VzLmgiIDEKIyAzOCAi Li4vZ2xpYi9nbWVzc2FnZXMuaCIgMwoKCgoKCgpnc2l6ZSBnX3ByaW50Zl9zdHJpbmdfdXBwZXJf Ym91bmQgKGNvbnN0IGdjaGFyKiBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2YV9saXN0IGFyZ3MpOwojIDU0ICIuLi9nbGliL2dtZXNzYWdlcy5oIiAzCnR5cGVk ZWYgZW51bQp7CgogIEdfTE9HX0ZMQUdfUkVDVVJTSU9OID0gMSA8PCAwLAogIEdfTE9HX0ZMQUdf RkFUQUwgPSAxIDw8IDEsCgoKICBHX0xPR19MRVZFTF9FUlJPUiA9IDEgPDwgMiwKICBHX0xPR19M RVZFTF9DUklUSUNBTCA9IDEgPDwgMywKICBHX0xPR19MRVZFTF9XQVJOSU5HID0gMSA8PCA0LAog IEdfTE9HX0xFVkVMX01FU1NBR0UgPSAxIDw8IDUsCiAgR19MT0dfTEVWRUxfSU5GTyA9IDEgPDwg NiwKICBHX0xPR19MRVZFTF9ERUJVRyA9IDEgPDwgNywKCiAgR19MT0dfTEVWRUxfTUFTSyA9IH4o R19MT0dfRkxBR19SRUNVUlNJT04gfCBHX0xPR19GTEFHX0ZBVEFMKQp9IEdMb2dMZXZlbEZsYWdz OwoKCgoKdHlwZWRlZiB2b2lkICgqR0xvZ0Z1bmMpIChjb25zdCBnY2hhciAqbG9nX2RvbWFpbiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMb2dMZXZl bEZsYWdzIGxvZ19sZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGdjaGFyICptZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKCgoKZ3VpbnQgZ19s b2dfc2V0X2hhbmRsZXIgKGNvbnN0IGdjaGFyICpsb2dfZG9tYWluLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdMb2dMZXZlbEZsYWdzIGxvZ19sZXZlbHMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xvZ0Z1bmMgbG9nX2Z1bmMsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRh KTsKdm9pZCBnX2xvZ19yZW1vdmVfaGFuZGxlciAoY29uc3QgZ2NoYXIgKmxvZ19kb21haW4sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgaGFuZGxlcl9pZCk7 CnZvaWQgZ19sb2dfZGVmYXVsdF9oYW5kbGVyIChjb25zdCBnY2hhciAqbG9nX2RvbWFpbiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTG9nTGV2ZWxGbGFncyBsb2df bGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2No YXIgKm1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bv aW50ZXIgdW51c2VkX2RhdGEpOwp2b2lkIGdfbG9nIChjb25zdCBnY2hhciAqbG9nX2RvbWFpbiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTG9nTGV2ZWxGbGFncyBs b2dfbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg Z2NoYXIgKmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu Li4pIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CnZvaWQg Z19sb2d2IChjb25zdCBnY2hhciAqbG9nX2RvbWFpbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBHTG9nTGV2ZWxGbGFncyBsb2dfbGV2ZWwsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKmZvcm1hdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFyZ3MpOwpHTG9nTGV2ZWxG bGFncyBnX2xvZ19zZXRfZmF0YWxfbWFzayAoY29uc3QgZ2NoYXIgKmxvZ19kb21haW4sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xvZ0xldmVsRmxhZ3MgZmF0YWxf bWFzayk7CkdMb2dMZXZlbEZsYWdzIGdfbG9nX3NldF9hbHdheXNfZmF0YWwgKEdMb2dMZXZlbEZs YWdzIGZhdGFsX21hc2spOwoKCnZvaWQgX2dfbG9nX2ZhbGxiYWNrX2hhbmRsZXIgKGNvbnN0IGdj aGFyICpsb2dfZG9tYWluLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTG9nTGV2 ZWxGbGFncyBsb2dfbGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGdjaGFyICptZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRl ciB1bnVzZWRfZGF0YSk7CiMgMTc4ICIuLi9nbGliL2dtZXNzYWdlcy5oIiAzCnR5cGVkZWYgdm9p ZCAoKkdQcmludEZ1bmMpIChjb25zdCBnY2hhciAqc3RyaW5nKTsKdm9pZCBnX3ByaW50IChjb25z dCBnY2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC4uLikgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZfXywgMSwgMikpKTsKR1By aW50RnVuYyBnX3NldF9wcmludF9oYW5kbGVyIChHUHJpbnRGdW5jIGZ1bmMpOwp2b2lkIGdfcHJp bnRlcnIgKGNvbnN0IGdjaGFyICpmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLi4uKSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAx LCAyKSkpOwpHUHJpbnRGdW5jIGdfc2V0X3ByaW50ZXJyX2hhbmRsZXIgKEdQcmludEZ1bmMgZnVu Yyk7CiMgMzQ1ICIuLi9nbGliL2dtZXNzYWdlcy5oIiAzCgojIDUxICJnbGliLmgiIDIKIyAxICIu Li9nbGliL2dub2RlLmgiIDEKIyAzMiAiLi4vZ2xpYi9nbm9kZS5oIgoKCnR5cGVkZWYgc3RydWN0 IF9HTm9kZSBHTm9kZTsKCgp0eXBlZGVmIGVudW0KewogIEdfVFJBVkVSU0VfTEVBRlMgPSAxIDw8 IDAsCiAgR19UUkFWRVJTRV9OT05fTEVBRlMgPSAxIDw8IDEsCiAgR19UUkFWRVJTRV9BTEwgPSBH X1RSQVZFUlNFX0xFQUZTIHwgR19UUkFWRVJTRV9OT05fTEVBRlMsCiAgR19UUkFWRVJTRV9NQVNL ID0gMHgwMwp9IEdUcmF2ZXJzZUZsYWdzOwoKCnR5cGVkZWYgZW51bQp7CiAgR19JTl9PUkRFUiwK ICBHX1BSRV9PUkRFUiwKICBHX1BPU1RfT1JERVIsCiAgR19MRVZFTF9PUkRFUgp9IEdUcmF2ZXJz ZVR5cGU7Cgp0eXBlZGVmIGdib29sZWFuICgqR05vZGVUcmF2ZXJzZUZ1bmMpIChHTm9kZSAqbm9k ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2lu dGVyIGRhdGEpOwp0eXBlZGVmIHZvaWQgKCpHTm9kZUZvcmVhY2hGdW5jKSAoR05vZGUgKm5vZGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRl ciBkYXRhKTsKCgoKc3RydWN0IF9HTm9kZQp7CiAgZ3BvaW50ZXIgZGF0YTsKICBHTm9kZSAqbmV4 dDsKICBHTm9kZSAqcHJldjsKICBHTm9kZSAqcGFyZW50OwogIEdOb2RlICpjaGlsZHJlbjsKfTsK CgoKCgoKdm9pZCBnX25vZGVfcHVzaF9hbGxvY2F0b3IgKEdBbGxvY2F0b3IgKmFsbG9jYXRvcik7 CnZvaWQgZ19ub2RlX3BvcF9hbGxvY2F0b3IgKHZvaWQpOwpHTm9kZSogZ19ub2RlX25ldyAoZ3Bv aW50ZXIgZGF0YSk7CnZvaWQgZ19ub2RlX2Rlc3Ryb3kgKEdOb2RlICpyb290KTsKdm9pZCBnX25v ZGVfdW5saW5rIChHTm9kZSAqbm9kZSk7CkdOb2RlKiBnX25vZGVfY29weSAoR05vZGUgKm5vZGUp OwpHTm9kZSogZ19ub2RlX2luc2VydCAoR05vZGUgKnBhcmVudCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2ludCBwb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR05vZGUgKm5vZGUpOwpHTm9kZSogZ19ub2RlX2luc2VydF9iZWZvcmUgKEdOb2RlICpw YXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOb2RlICpzaWJsaW5nLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTm9kZSAqbm9kZSk7CkdOb2RlKiBnX25v ZGVfaW5zZXJ0X2FmdGVyIChHTm9kZSAqcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHTm9kZSAqc2libGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R05vZGUgKm5vZGUpOwpHTm9kZSogZ19ub2RlX3ByZXBlbmQgKEdOb2RlICpwYXJlbnQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOb2RlICpub2RlKTsKZ3VpbnQgZ19ub2RlX25f bm9kZXMgKEdOb2RlICpyb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHJh dmVyc2VGbGFncyBmbGFncyk7CkdOb2RlKiBnX25vZGVfZ2V0X3Jvb3QgKEdOb2RlICpub2RlKTsK Z2Jvb2xlYW4gZ19ub2RlX2lzX2FuY2VzdG9yIChHTm9kZSAqbm9kZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR05vZGUgKmRlc2NlbmRhbnQpOwpndWludCBnX25vZGVfZGVwdGgg KEdOb2RlICpub2RlKTsKR05vZGUqIGdfbm9kZV9maW5kIChHTm9kZSAqcm9vdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR1RyYXZlcnNlVHlwZSBvcmRlciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgR1RyYXZlcnNlRmxhZ3MgZmxhZ3MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGEpOwojIDEyMCAiLi4vZ2xpYi9nbm9kZS5o Igp2b2lkIGdfbm9kZV90cmF2ZXJzZSAoR05vZGUgKnJvb3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdUcmF2ZXJzZVR5cGUgb3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdUcmF2ZXJzZUZsYWdzIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnaW50IG1heF9kZXB0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R05vZGVUcmF2ZXJzZUZ1bmMgZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z3BvaW50ZXIgZGF0YSk7CgoKCgoKCmd1aW50IGdfbm9kZV9tYXhfaGVpZ2h0IChHTm9kZSAqcm9v dCk7Cgp2b2lkIGdfbm9kZV9jaGlsZHJlbl9mb3JlYWNoIChHTm9kZSAqbm9kZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEdUcmF2ZXJzZUZsYWdzIGZsYWdzLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR05vZGVGb3JlYWNoRnVuYyBmdW5jLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSk7CnZvaWQgZ19ub2RlX3JldmVy c2VfY2hpbGRyZW4gKEdOb2RlICpub2RlKTsKZ3VpbnQgZ19ub2RlX25fY2hpbGRyZW4gKEdOb2Rl ICpub2RlKTsKR05vZGUqIGdfbm9kZV9udGhfY2hpbGQgKEdOb2RlICpub2RlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgbik7CkdOb2RlKiBnX25vZGVfbGFzdF9jaGls ZCAoR05vZGUgKm5vZGUpOwpHTm9kZSogZ19ub2RlX2ZpbmRfY2hpbGQgKEdOb2RlICpub2RlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RyYXZlcnNlRmxhZ3MgZmxhZ3MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBkYXRhKTsKZ2ludCBnX25v ZGVfY2hpbGRfcG9zaXRpb24gKEdOb2RlICpub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR05vZGUgKmNoaWxkKTsKZ2ludCBnX25vZGVfY2hpbGRfaW5kZXggKEdOb2RlICpu b2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSk7CgpH Tm9kZSogZ19ub2RlX2ZpcnN0X3NpYmxpbmcgKEdOb2RlICpub2RlKTsKR05vZGUqIGdfbm9kZV9s YXN0X3NpYmxpbmcgKEdOb2RlICpub2RlKTsKIyAxNjEgIi4uL2dsaWIvZ25vZGUuaCIKCiMgNTIg ImdsaWIuaCIgMgojIDEgIi4uL2dsaWIvZ3BhdHRlcm4uaCIgMQojIDI0ICIuLi9nbGliL2dwYXR0 ZXJuLmgiCgoKCnR5cGVkZWYgc3RydWN0IF9HUGF0dGVyblNwZWMgR1BhdHRlcm5TcGVjOwoKR1Bh dHRlcm5TcGVjKiBnX3BhdHRlcm5fc3BlY19uZXcgKGNvbnN0IGdjaGFyICpwYXR0ZXJuKTsKdm9p ZCBnX3BhdHRlcm5fc3BlY19mcmVlIChHUGF0dGVyblNwZWMgKnBzcGVjKTsKZ2Jvb2xlYW4gZ19w YXR0ZXJuX3NwZWNfZXF1YWwgKEdQYXR0ZXJuU3BlYyAqcHNwZWMxLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR1BhdHRlcm5TcGVjICpwc3BlYzIpOwpnYm9vbGVhbiBn X3BhdHRlcm5fbWF0Y2ggKEdQYXR0ZXJuU3BlYyAqcHNwZWMsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBndWludCBzdHJpbmdfbGVuZ3RoLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN0cmluZywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpzdHJpbmdfcmV2ZXJzZWQp OwpnYm9vbGVhbiBnX3BhdHRlcm5fbWF0Y2hfc3RyaW5nIChHUGF0dGVyblNwZWMgKnBzcGVjLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN0cmlu Zyk7Cmdib29sZWFuIGdfcGF0dGVybl9tYXRjaF9zaW1wbGUgKGNvbnN0IGdjaGFyICpwYXR0ZXJu LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN0 cmluZyk7CgoKIyA1MyAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xpYi9ncHJpbWVzLmgiIDEKIyAzMiAi Li4vZ2xpYi9ncHJpbWVzLmgiCgojIDQzICIuLi9nbGliL2dwcmltZXMuaCIKZ3VpbnQgZ19zcGFj ZWRfcHJpbWVzX2Nsb3Nlc3QgKGd1aW50IG51bSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7 CgoKIyA1NCAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xpYi9ncXNvcnQuaCIgMQojIDMzICIuLi9nbGli L2dxc29ydC5oIgoKCnZvaWQgZ19xc29ydF93aXRoX2RhdGEgKGdjb25zdHBvaW50ZXIgcGJhc2Us CiAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgdG90YWxfZWxlbXMsCiAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBHQ29tcGFyZURh dGFGdW5jIGNvbXBhcmVfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNl cl9kYXRhKTsKCgojIDU1ICJnbGliLmgiIDIKCiMgMSAiLi4vZ2xpYi9ncXVldWUuaCIgMQojIDMy ICIuLi9nbGliL2dxdWV1ZS5oIgoKCnR5cGVkZWYgc3RydWN0IF9HUXVldWUgR1F1ZXVlOwoKc3Ry dWN0IF9HUXVldWUKewogIEdMaXN0ICpoZWFkOwogIEdMaXN0ICp0YWlsOwogIGd1aW50IGxlbmd0 aDsKfTsKCgoKR1F1ZXVlKiBnX3F1ZXVlX25ldyAodm9pZCk7CnZvaWQgZ19xdWV1ZV9mcmVlIChH UXVldWUgKnF1ZXVlKTsKdm9pZCBnX3F1ZXVlX3B1c2hfaGVhZCAoR1F1ZXVlICpxdWV1ZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSk7CnZvaWQgZ19xdWV1 ZV9wdXNoX3RhaWwgKEdRdWV1ZSAqcXVldWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdwb2ludGVyIGRhdGEpOwpncG9pbnRlciBnX3F1ZXVlX3BvcF9oZWFkIChHUXVldWUgKnF1 ZXVlKTsKZ3BvaW50ZXIgZ19xdWV1ZV9wb3BfdGFpbCAoR1F1ZXVlICpxdWV1ZSk7Cmdib29sZWFu IGdfcXVldWVfaXNfZW1wdHkgKEdRdWV1ZSAqcXVldWUpOwpncG9pbnRlciBnX3F1ZXVlX3BlZWtf aGVhZCAoR1F1ZXVlICpxdWV1ZSk7Cmdwb2ludGVyIGdfcXVldWVfcGVla190YWlsIChHUXVldWUg KnF1ZXVlKTsKdm9pZCBnX3F1ZXVlX3B1c2hfaGVhZF9saW5rIChHUXVldWUgKnF1ZXVlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGlzdCAqbGlua18pOwp2b2lkIGdfcXVldWVf cHVzaF90YWlsX2xpbmsgKEdRdWV1ZSAqcXVldWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdMaXN0ICpsaW5rXyk7CkdMaXN0KiBnX3F1ZXVlX3BvcF9oZWFkX2xpbmsgKEdRdWV1 ZSAqcXVldWUpOwpHTGlzdCogZ19xdWV1ZV9wb3BfdGFpbF9saW5rIChHUXVldWUgKnF1ZXVlKTsK CgojIDU3ICJnbGliLmgiIDIKIyAxICIuLi9nbGliL2dyYW5kLmgiIDEKIyAzMiAiLi4vZ2xpYi9n cmFuZC5oIgoKCnR5cGVkZWYgc3RydWN0IF9HUmFuZCBHUmFuZDsKIyA0NSAiLi4vZ2xpYi9ncmFu ZC5oIgpHUmFuZCogZ19yYW5kX25ld193aXRoX3NlZWQgKGd1aW50MzIgc2VlZCk7CkdSYW5kKiBn X3JhbmRfbmV3ICh2b2lkKTsKdm9pZCBnX3JhbmRfZnJlZSAoR1JhbmQgKnJhbmRfKTsKdm9pZCBn X3JhbmRfc2V0X3NlZWQgKEdSYW5kICpyYW5kXywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGd1aW50MzIgc2VlZCk7CgoKCmd1aW50MzIgZ19yYW5kX2ludCAoR1JhbmQgKnJhbmRfKTsK Z2ludDMyIGdfcmFuZF9pbnRfcmFuZ2UgKEdSYW5kICpyYW5kXywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdpbnQzMiBiZWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdpbnQzMiBlbmQpOwpnZG91YmxlIGdfcmFuZF9kb3VibGUgKEdSYW5kICpyYW5kXyk7Cmdkb3Vi bGUgZ19yYW5kX2RvdWJsZV9yYW5nZSAoR1JhbmQgKnJhbmRfLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2RvdWJsZSBiZWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdkb3VibGUgZW5kKTsKdm9pZCBnX3JhbmRvbV9zZXRfc2VlZCAoZ3VpbnQzMiBzZWVkKTsKCgoK Z3VpbnQzMiBnX3JhbmRvbV9pbnQgKHZvaWQpOwpnaW50MzIgZ19yYW5kb21faW50X3JhbmdlIChn aW50MzIgYmVnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50MzIgZW5kKTsK Z2RvdWJsZSBnX3JhbmRvbV9kb3VibGUgKHZvaWQpOwpnZG91YmxlIGdfcmFuZG9tX2RvdWJsZV9y YW5nZSAoZ2RvdWJsZSBiZWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3Vi bGUgZW5kKTsKCgoKIyA1OCAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xpYi9ncmVsLmgiIDEKIyAzMiAi Li4vZ2xpYi9ncmVsLmgiCgoKdHlwZWRlZiBzdHJ1Y3QgX0dSZWxhdGlvbiBHUmVsYXRpb247CnR5 cGVkZWYgc3RydWN0IF9HVHVwbGVzIEdUdXBsZXM7CgpzdHJ1Y3QgX0dUdXBsZXMKewogIGd1aW50 IGxlbjsKfTsKIyA2NSAiLi4vZ2xpYi9ncmVsLmgiCkdSZWxhdGlvbiogZ19yZWxhdGlvbl9uZXcg KGdpbnQgZmllbGRzKTsKdm9pZCBnX3JlbGF0aW9uX2Rlc3Ryb3kgKEdSZWxhdGlvbiAqcmVsYXRp b24pOwp2b2lkIGdfcmVsYXRpb25faW5kZXggKEdSZWxhdGlvbiAqcmVsYXRpb24sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnaW50IGZpZWxkLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR0hhc2hGdW5jIGhhc2hfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEdFcXVhbEZ1bmMga2V5X2VxdWFsX2Z1bmMpOwp2b2lkIGdfcmVsYXRpb25faW5zZXJ0IChH UmVsYXRpb24gKnJlbGF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsK Z2ludCBnX3JlbGF0aW9uX2RlbGV0ZSAoR1JlbGF0aW9uICpyZWxhdGlvbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50ZXIga2V5LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2ludCBmaWVsZCk7CkdUdXBsZXMqIGdfcmVsYXRpb25fc2VsZWN0IChHUmVs YXRpb24gKnJlbGF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9p bnRlciBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGZpZWxkKTsKZ2lu dCBnX3JlbGF0aW9uX2NvdW50IChHUmVsYXRpb24gKnJlbGF0aW9uLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBrZXksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnaW50IGZpZWxkKTsKZ2Jvb2xlYW4gZ19yZWxhdGlvbl9leGlzdHMgKEdSZWxhdGlv biAqcmVsYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwp2b2lkIGdf cmVsYXRpb25fcHJpbnQgKEdSZWxhdGlvbiAqcmVsYXRpb24pOwoKdm9pZCBnX3R1cGxlc19kZXN0 cm95IChHVHVwbGVzICp0dXBsZXMpOwpncG9pbnRlciBnX3R1cGxlc19pbmRleCAoR1R1cGxlcyAq dHVwbGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBpbmRleF8sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGZpZWxkKTsKCgojIDU5ICJnbGliLmgiIDIK IyAxICIuLi9nbGliL2dzY2FubmVyLmgiIDEKIyAzMiAiLi4vZ2xpYi9nc2Nhbm5lci5oIgoKCnR5 cGVkZWYgc3RydWN0IF9HU2Nhbm5lciBHU2Nhbm5lcjsKdHlwZWRlZiBzdHJ1Y3QgX0dTY2FubmVy Q29uZmlnIEdTY2FubmVyQ29uZmlnOwp0eXBlZGVmIHVuaW9uIF9HVG9rZW5WYWx1ZSBHVG9rZW5W YWx1ZTsKCnR5cGVkZWYgdm9pZCAoKkdTY2FubmVyTXNnRnVuYykgKEdTY2FubmVyICpzY2FubmVy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIg Km1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnYm9vbGVhbiBlcnJvcik7CiMgNTkgIi4uL2dsaWIvZ3NjYW5uZXIuaCIKdHlwZWRlZiBlbnVt CnsKICBHX0VSUl9VTktOT1dOLAogIEdfRVJSX1VORVhQX0VPRiwKICBHX0VSUl9VTkVYUF9FT0Zf SU5fU1RSSU5HLAogIEdfRVJSX1VORVhQX0VPRl9JTl9DT01NRU5ULAogIEdfRVJSX05PTl9ESUdJ VF9JTl9DT05TVCwKICBHX0VSUl9ESUdJVF9SQURJWCwKICBHX0VSUl9GTE9BVF9SQURJWCwKICBH X0VSUl9GTE9BVF9NQUxGT1JNRUQKfSBHRXJyb3JUeXBlOwoKCnR5cGVkZWYgZW51bQp7CiAgR19U T0tFTl9FT0YgPSAwLAoKICBHX1RPS0VOX0xFRlRfUEFSRU4gPSAnKCcsCiAgR19UT0tFTl9SSUdI VF9QQVJFTiA9ICcpJywKICBHX1RPS0VOX0xFRlRfQ1VSTFkgPSAneycsCiAgR19UT0tFTl9SSUdI VF9DVVJMWSA9ICd9JywKICBHX1RPS0VOX0xFRlRfQlJBQ0UgPSAnWycsCiAgR19UT0tFTl9SSUdI VF9CUkFDRSA9ICddJywKICBHX1RPS0VOX0VRVUFMX1NJR04gPSAnPScsCiAgR19UT0tFTl9DT01N QSA9ICcsJywKCiAgR19UT0tFTl9OT05FID0gMjU2LAoKICBHX1RPS0VOX0VSUk9SLAoKICBHX1RP S0VOX0NIQVIsCiAgR19UT0tFTl9CSU5BUlksCiAgR19UT0tFTl9PQ1RBTCwKICBHX1RPS0VOX0lO VCwKICBHX1RPS0VOX0hFWCwKICBHX1RPS0VOX0ZMT0FULAogIEdfVE9LRU5fU1RSSU5HLAoKICBH X1RPS0VOX1NZTUJPTCwKICBHX1RPS0VOX0lERU5USUZJRVIsCiAgR19UT0tFTl9JREVOVElGSUVS X05VTEwsCgogIEdfVE9LRU5fQ09NTUVOVF9TSU5HTEUsCiAgR19UT0tFTl9DT01NRU5UX01VTFRJ LAogIEdfVE9LRU5fTEFTVAp9IEdUb2tlblR5cGU7Cgp1bmlvbiBfR1Rva2VuVmFsdWUKewogIGdw b2ludGVyIHZfc3ltYm9sOwogIGdjaGFyICp2X2lkZW50aWZpZXI7CiAgZ3Vsb25nIHZfYmluYXJ5 OwogIGd1bG9uZyB2X29jdGFsOwogIGd1bG9uZyB2X2ludDsKICBndWludDY0IHZfaW50NjQ7CiAg Z2RvdWJsZSB2X2Zsb2F0OwogIGd1bG9uZyB2X2hleDsKICBnY2hhciAqdl9zdHJpbmc7CiAgZ2No YXIgKnZfY29tbWVudDsKICBndWNoYXIgdl9jaGFyOwogIGd1aW50IHZfZXJyb3I7Cn07CgpzdHJ1 Y3QgX0dTY2FubmVyQ29uZmlnCnsKCgogIGdjaGFyICpjc2V0X3NraXBfY2hhcmFjdGVyczsKICBn Y2hhciAqY3NldF9pZGVudGlmaWVyX2ZpcnN0OwogIGdjaGFyICpjc2V0X2lkZW50aWZpZXJfbnRo OwogIGdjaGFyICpjcGFpcl9jb21tZW50X3NpbmdsZTsKCgoKICBndWludCBjYXNlX3NlbnNpdGl2 ZSA6IDE7CgoKCgogIGd1aW50IHNraXBfY29tbWVudF9tdWx0aSA6IDE7CiAgZ3VpbnQgc2tpcF9j b21tZW50X3NpbmdsZSA6IDE7CiAgZ3VpbnQgc2Nhbl9jb21tZW50X211bHRpIDogMTsKICBndWlu dCBzY2FuX2lkZW50aWZpZXIgOiAxOwogIGd1aW50IHNjYW5faWRlbnRpZmllcl8xY2hhciA6IDE7 CiAgZ3VpbnQgc2Nhbl9pZGVudGlmaWVyX05VTEwgOiAxOwogIGd1aW50IHNjYW5fc3ltYm9scyA6 IDE7CiAgZ3VpbnQgc2Nhbl9iaW5hcnkgOiAxOwogIGd1aW50IHNjYW5fb2N0YWwgOiAxOwogIGd1 aW50IHNjYW5fZmxvYXQgOiAxOwogIGd1aW50IHNjYW5faGV4IDogMTsKICBndWludCBzY2FuX2hl eF9kb2xsYXIgOiAxOwogIGd1aW50IHNjYW5fc3RyaW5nX3NxIDogMTsKICBndWludCBzY2FuX3N0 cmluZ19kcSA6IDE7CiAgZ3VpbnQgbnVtYmVyc18yX2ludCA6IDE7CiAgZ3VpbnQgaW50XzJfZmxv YXQgOiAxOwogIGd1aW50IGlkZW50aWZpZXJfMl9zdHJpbmcgOiAxOwogIGd1aW50IGNoYXJfMl90 b2tlbiA6IDE7CiAgZ3VpbnQgc3ltYm9sXzJfdG9rZW4gOiAxOwogIGd1aW50IHNjb3BlXzBfZmFs bGJhY2sgOiAxOwogIGd1aW50IHN0b3JlX2ludDY0IDogMTsKICBndWludCBwYWRkaW5nX2R1bW15 Owp9OwoKc3RydWN0IF9HU2Nhbm5lcgp7CgogIGdwb2ludGVyIHVzZXJfZGF0YTsKICBndWludCBt YXhfcGFyc2VfZXJyb3JzOwoKCiAgZ3VpbnQgcGFyc2VfZXJyb3JzOwoKCiAgY29uc3QgZ2NoYXIg KmlucHV0X25hbWU7CgoKICBHRGF0YSAqcWRhdGE7CgoKICBHU2Nhbm5lckNvbmZpZyAqY29uZmln OwoKCiAgR1Rva2VuVHlwZSB0b2tlbjsKICBHVG9rZW5WYWx1ZSB2YWx1ZTsKICBndWludCBsaW5l OwogIGd1aW50IHBvc2l0aW9uOwoKCiAgR1Rva2VuVHlwZSBuZXh0X3Rva2VuOwogIEdUb2tlblZh bHVlIG5leHRfdmFsdWU7CiAgZ3VpbnQgbmV4dF9saW5lOwogIGd1aW50IG5leHRfcG9zaXRpb247 CgoKICBHSGFzaFRhYmxlICpzeW1ib2xfdGFibGU7CiAgZ2ludCBpbnB1dF9mZDsKICBjb25zdCBn Y2hhciAqdGV4dDsKICBjb25zdCBnY2hhciAqdGV4dF9lbmQ7CiAgZ2NoYXIgKmJ1ZmZlcjsKICBn dWludCBzY29wZV9pZDsKCgogIEdTY2FubmVyTXNnRnVuYyBtc2dfaGFuZGxlcjsKfTsKCkdTY2Fu bmVyKiBnX3NjYW5uZXJfbmV3IChjb25zdCBHU2Nhbm5lckNvbmZpZyAqY29uZmlnX3RlbXBsKTsK dm9pZCBnX3NjYW5uZXJfZGVzdHJveSAoR1NjYW5uZXIgKnNjYW5uZXIpOwp2b2lkIGdfc2Nhbm5l cl9pbnB1dF9maWxlIChHU2Nhbm5lciAqc2Nhbm5lciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgaW5wdXRfZmQpOwp2b2lkIGdfc2Nhbm5lcl9z eW5jX2ZpbGVfb2Zmc2V0IChHU2Nhbm5lciAqc2Nhbm5lcik7CnZvaWQgZ19zY2FubmVyX2lucHV0 X3RleHQgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnRleHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCB0ZXh0X2xlbik7CkdUb2tlblR5cGUg Z19zY2FubmVyX2dldF9uZXh0X3Rva2VuIChHU2Nhbm5lciAqc2Nhbm5lcik7CkdUb2tlblR5cGUg Z19zY2FubmVyX3BlZWtfbmV4dF90b2tlbiAoR1NjYW5uZXIgKnNjYW5uZXIpOwpHVG9rZW5UeXBl IGdfc2Nhbm5lcl9jdXJfdG9rZW4gKEdTY2FubmVyICpzY2FubmVyKTsKR1Rva2VuVmFsdWUgZ19z Y2FubmVyX2N1cl92YWx1ZSAoR1NjYW5uZXIgKnNjYW5uZXIpOwpndWludCBnX3NjYW5uZXJfY3Vy X2xpbmUgKEdTY2FubmVyICpzY2FubmVyKTsKZ3VpbnQgZ19zY2FubmVyX2N1cl9wb3NpdGlvbiAo R1NjYW5uZXIgKnNjYW5uZXIpOwpnYm9vbGVhbiBnX3NjYW5uZXJfZW9mIChHU2Nhbm5lciAqc2Nh bm5lcik7Cmd1aW50IGdfc2Nhbm5lcl9zZXRfc2NvcGUgKEdTY2FubmVyICpzY2FubmVyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgc2NvcGVf aWQpOwp2b2lkIGdfc2Nhbm5lcl9zY29wZV9hZGRfc3ltYm9sIChHU2Nhbm5lciAqc2Nhbm5lciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHNj b3BlX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgZ2NoYXIgKnN5bWJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdwb2ludGVyIHZhbHVlKTsKdm9pZCBnX3NjYW5uZXJfc2NvcGVfcmVtb3Zl X3N5bWJvbCAoR1NjYW5uZXIgKnNjYW5uZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBndWludCBzY29wZV9pZCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpzeW1ib2wpOwpncG9pbnRl ciBnX3NjYW5uZXJfc2NvcGVfbG9va3VwX3N5bWJvbCAoR1NjYW5uZXIgKnNjYW5uZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBzY29wZV9p ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGdjaGFyICpzeW1ib2wpOwp2b2lkIGdfc2Nhbm5lcl9zY29wZV9mb3JlYWNoX3N5bWJvbCAoR1Nj YW5uZXIgKnNjYW5uZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBndWludCBzY29wZV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdIRnVuYyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKZ3BvaW50ZXIgZ19zY2Fu bmVyX2xvb2t1cF9zeW1ib2wgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN5bWJvbCk7CnZvaWQg Z19zY2FubmVyX3VuZXhwX3Rva2VuIChHU2Nhbm5lciAqc2Nhbm5lciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUb2tlblR5cGUgZXhwZWN0ZWRfdG9r ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBnY2hhciAqaWRlbnRpZmllcl9zcGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN5bWJvbF9zcGVjLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN5bWJvbF9u YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgZ2NoYXIgKm1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnaW50IGlzX2Vycm9yKTsKdm9pZCBnX3NjYW5uZXJfZXJyb3IgKEdTY2FubmVy ICpzY2FubmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgZ2NoYXIgKmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC4uLikgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoX19wcmludGZf XywgMiwgMykpKTsKdm9pZCBnX3NjYW5uZXJfd2FybiAoR1NjYW5uZXIgKnNjYW5uZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAq Zm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Li4uKSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwojIDI3 MSAiLi4vZ2xpYi9nc2Nhbm5lci5oIgoKIyA2MCAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xpYi9nc2hl bGwuaCIgMQojIDI2ICIuLi9nbGliL2dzaGVsbC5oIgoKCgoKdHlwZWRlZiBlbnVtCnsKCiAgR19T SEVMTF9FUlJPUl9CQURfUVVPVElORywKCiAgR19TSEVMTF9FUlJPUl9FTVBUWV9TVFJJTkcsCiAg R19TSEVMTF9FUlJPUl9GQUlMRUQKfSBHU2hlbGxFcnJvcjsKCkdRdWFyayBnX3NoZWxsX2Vycm9y X3F1YXJrICh2b2lkKTsKCmdjaGFyKiBnX3NoZWxsX3F1b3RlIChjb25zdCBnY2hhciAqdW5xdW90 ZWRfc3RyaW5nKTsKZ2NoYXIqIGdfc2hlbGxfdW5xdW90ZSAoY29uc3QgZ2NoYXIgKnF1b3RlZF9z dHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwpnYm9v bGVhbiBnX3NoZWxsX3BhcnNlX2FyZ3YgKGNvbnN0IGdjaGFyICpjb21tYW5kX2xpbmUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAqYXJnY3AsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ2NoYXIgKioqYXJndnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vy cm9yICoqZXJyb3IpOwoKCiMgNjEgImdsaWIuaCIgMgoKIyAxICIuLi9nbGliL2dzcGF3bi5oIiAx CiMgMjYgIi4uL2dsaWIvZ3NwYXduLmgiCgoKCgoKdHlwZWRlZiBlbnVtCnsKICBHX1NQQVdOX0VS Uk9SX0ZPUkssCiAgR19TUEFXTl9FUlJPUl9SRUFELAogIEdfU1BBV05fRVJST1JfQ0hESVIsCiAg R19TUEFXTl9FUlJPUl9BQ0NFUywKICBHX1NQQVdOX0VSUk9SX1BFUk0sCiAgR19TUEFXTl9FUlJP Ul8yQklHLAogIEdfU1BBV05fRVJST1JfTk9FWEVDLAogIEdfU1BBV05fRVJST1JfTkFNRVRPT0xP TkcsCiAgR19TUEFXTl9FUlJPUl9OT0VOVCwKICBHX1NQQVdOX0VSUk9SX05PTUVNLAogIEdfU1BB V05fRVJST1JfTk9URElSLAogIEdfU1BBV05fRVJST1JfTE9PUCwKICBHX1NQQVdOX0VSUk9SX1RY VEJVU1ksCiAgR19TUEFXTl9FUlJPUl9JTywKICBHX1NQQVdOX0VSUk9SX05GSUxFLAogIEdfU1BB V05fRVJST1JfTUZJTEUsCiAgR19TUEFXTl9FUlJPUl9JTlZBTCwKICBHX1NQQVdOX0VSUk9SX0lT RElSLAogIEdfU1BBV05fRVJST1JfTElCQkFELAogIEdfU1BBV05fRVJST1JfRkFJTEVECgoKfSBH U3Bhd25FcnJvcjsKCnR5cGVkZWYgdm9pZCAoKiBHU3Bhd25DaGlsZFNldHVwRnVuYykgKGdwb2lu dGVyIHVzZXJfZGF0YSk7Cgp0eXBlZGVmIGVudW0KewogIEdfU1BBV05fTEVBVkVfREVTQ1JJUFRP UlNfT1BFTiA9IDEgPDwgMCwKICBHX1NQQVdOX0RPX05PVF9SRUFQX0NISUxEID0gMSA8PCAxLAoK ICBHX1NQQVdOX1NFQVJDSF9QQVRIID0gMSA8PCAyLAoKICBHX1NQQVdOX1NURE9VVF9UT19ERVZf TlVMTCA9IDEgPDwgMywKICBHX1NQQVdOX1NUREVSUl9UT19ERVZfTlVMTCA9IDEgPDwgNCwKICBH X1NQQVdOX0NISUxEX0lOSEVSSVRTX1NURElOID0gMSA8PCA1LAogIEdfU1BBV05fRklMRV9BTkRf QVJHVl9aRVJPID0gMSA8PCA2Cn0gR1NwYXduRmxhZ3M7CgpHUXVhcmsgZ19zcGF3bl9lcnJvcl9x dWFyayAodm9pZCk7CgpnYm9vbGVhbiBnX3NwYXduX2FzeW5jIChjb25zdCBnY2hhciAqd29ya2lu Z19kaXJlY3RvcnksCiAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICoqYXJndiwKICAgICAg ICAgICAgICAgICAgICAgICAgZ2NoYXIgKiplbnZwLAogICAgICAgICAgICAgICAgICAgICAgICBH U3Bhd25GbGFncyBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgR1NwYXduQ2hpbGRTZXR1 cEZ1bmMgY2hpbGRfc2V0dXAsCiAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJf ZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCAqY2hpbGRfcGlkLAogICAgICAgICAg ICAgICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7CgoKCgoKZ2Jvb2xlYW4gZ19zcGF3bl9hc3lu Y193aXRoX3BpcGVzIChjb25zdCBnY2hhciAqd29ya2luZ19kaXJlY3RvcnksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgKiphcmd2LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdjaGFyICoqZW52cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHU3Bhd25GbGFncyBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHU3Bhd25DaGlsZFNldHVwRnVuYyBjaGlsZF9zZXR1cCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBncG9pbnRlciB1c2VyX2RhdGEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2ludCAqY2hpbGRfcGlkLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdpbnQgKnN0YW5kYXJkX2lucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdpbnQgKnN0YW5kYXJkX291dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnaW50ICpzdGFuZGFyZF9lcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBHRXJyb3IgKiplcnJvcik7CgoKCgoKCmdib29sZWFuIGdfc3Bhd25fc3luYyAo Y29uc3QgZ2NoYXIgKndvcmtpbmdfZGlyZWN0b3J5LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2NoYXIgKiphcmd2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIg KiplbnZwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NwYXduRmxhZ3MgZmxhZ3Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU3Bhd25DaGlsZFNldHVwRnVuYyBjaGls ZF9zZXR1cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0 YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICoqc3RhbmRhcmRfb3V0cHV0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgKipzdGFuZGFyZF9lcnJvciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgKmV4aXRfc3RhdHVzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwoKZ2Jvb2xlYW4gZ19zcGF3 bl9jb21tYW5kX2xpbmVfc3luYyAoY29uc3QgZ2NoYXIgKmNvbW1hbmRfbGluZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICoqc3RhbmRhcmRfb3V0cHV0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgKipzdGFuZGFyZF9lcnJvciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgKmV4aXRfc3RhdHVzLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICoqZXJyb3IpOwpnYm9v bGVhbiBnX3NwYXduX2NvbW1hbmRfbGluZV9hc3luYyAoY29uc3QgZ2NoYXIgKmNvbW1hbmRfbGlu ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsK CgoKIyA2MyAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xpYi9nc3RyZnVuY3MuaCIgMQojIDMzICIuLi9n bGliL2dzdHJmdW5jcy5oIgoKCgp0eXBlZGVmIGVudW0gewogIEdfQVNDSUlfQUxOVU0gPSAxIDw8 IDAsCiAgR19BU0NJSV9BTFBIQSA9IDEgPDwgMSwKICBHX0FTQ0lJX0NOVFJMID0gMSA8PCAyLAog IEdfQVNDSUlfRElHSVQgPSAxIDw8IDMsCiAgR19BU0NJSV9HUkFQSCA9IDEgPDwgNCwKICBHX0FT Q0lJX0xPV0VSID0gMSA8PCA1LAogIEdfQVNDSUlfUFJJTlQgPSAxIDw8IDYsCiAgR19BU0NJSV9Q VU5DVCA9IDEgPDwgNywKICBHX0FTQ0lJX1NQQUNFID0gMSA8PCA4LAogIEdfQVNDSUlfVVBQRVIg PSAxIDw8IDksCiAgR19BU0NJSV9YRElHSVQgPSAxIDw8IDEwCn0gR0FzY2lpVHlwZTsKCmV4dGVy biBjb25zdCBndWludDE2ICogY29uc3QgZ19hc2NpaV90YWJsZTsKIyA4NSAiLi4vZ2xpYi9nc3Ry ZnVuY3MuaCIKZ2NoYXIgZ19hc2NpaV90b2xvd2VyIChnY2hhciBjKSBfX2F0dHJpYnV0ZV9fKChf X2NvbnN0X18pKTsKZ2NoYXIgZ19hc2NpaV90b3VwcGVyIChnY2hhciBjKSBfX2F0dHJpYnV0ZV9f KChfX2NvbnN0X18pKTsKCmdpbnQgZ19hc2NpaV9kaWdpdF92YWx1ZSAoZ2NoYXIgYykgX19hdHRy aWJ1dGVfXygoX19jb25zdF9fKSk7CmdpbnQgZ19hc2NpaV94ZGlnaXRfdmFsdWUgKGdjaGFyIGMp IF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwoKCgoKCmdjaGFyKiBnX3N0cmRlbGltaXQgKGdj aGFyICpzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBnY2hhciAqZGVsaW1pdGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdjaGFyIG5ld19kZWxpbWl0ZXIpOwpnY2hhciogZ19zdHJjYW5vbiAoZ2NoYXIgKnN0cmlu ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICp2 YWxpZF9jaGFycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFy IHN1YnN0aXR1dG9yKTsKY29uc3QgZ2NoYXIqIGdfc3RyZXJyb3IgKGdpbnQgZXJybnVtKSBfX2F0 dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKY29uc3QgZ2NoYXIqIGdfc3Ryc2lnbmFsIChnaW50IHNp Z251bSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CmdjaGFyKiBnX3N0cnJldmVyc2UgKGdj aGFyICpzdHJpbmcpOwpnc2l6ZSBnX3N0cmxjcHkgKGdjaGFyICpkZXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnNyYywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzaXplIGRlc3Rfc2l6ZSk7CmdzaXplIGdfc3Ry bGNhdCAoZ2NoYXIgKmRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBnY2hhciAqc3JjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ3NpemUgZGVzdF9zaXplKTsKZ2NoYXIgKiBnX3N0cnN0cl9sZW4gKGNvbnN0IGdjaGFyICpo YXlzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBo YXlzdGFja19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBnY2hhciAqbmVlZGxlKTsKZ2NoYXIgKiBnX3N0cnJzdHIgKGNvbnN0IGdjaGFyICpoYXlzdGFj aywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpu ZWVkbGUpOwpnY2hhciAqIGdfc3RycnN0cl9sZW4gKGNvbnN0IGdjaGFyICpoYXlzdGFjaywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzc2l6ZSBoYXlzdGFja19sZW4s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqbmVl ZGxlKTsKCmdib29sZWFuIGdfc3RyX2hhc19zdWZmaXggKGNvbnN0IGdjaGFyICpzdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqc3VmZml4KTsK Z2Jvb2xlYW4gZ19zdHJfaGFzX3ByZWZpeCAoY29uc3QgZ2NoYXIgKnN0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpwcmVmaXgpOwoKCgpnZG91 YmxlIGdfc3RydG9kIChjb25zdCBnY2hhciAqbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdjaGFyICoqZW5kcHRyKTsKZ2RvdWJsZSBnX2FzY2lpX3N0cnRvZCAo Y29uc3QgZ2NoYXIgKm5wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnY2hhciAqKmVuZHB0cik7Cmd1aW50NjQgZ19hc2NpaV9zdHJ0b3VsbCAoY29uc3QgZ2NoYXIg Km5wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2hhciAqKmVu ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IGJhc2Up OwoKCgoKZ2NoYXIgKiBnX2FzY2lpX2R0b3N0ciAoZ2NoYXIgKmJ1ZmZlciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgYnVmX2xlbiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdkb3VibGUgZCk7CmdjaGFyICogZ19hc2NpaV9mb3Jt YXRkIChnY2hhciAqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ2ludCBidWZfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgZ2NoYXIgKmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdkb3VibGUgZCk7CgoKZ2NoYXIqIGdfc3RyY2h1ZyAoZ2NoYXIgKnN0cmluZyk7CgpnY2hh ciogZ19zdHJjaG9tcCAoZ2NoYXIgKnN0cmluZyk7CgoKCmdpbnQgZ19hc2NpaV9zdHJjYXNlY21w IChjb25zdCBnY2hhciAqczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBnY2hhciAqczIpOwpnaW50IGdfYXNjaWlfc3RybmNhc2VjbXAgKGNvbnN0IGdj aGFyICpzMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGdjaGFyICpzMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdz aXplIG4pOwpnY2hhciogZ19hc2NpaV9zdHJkb3duIChjb25zdCBnY2hhciAqc3RyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzaXplIGxlbik7CmdjaGFyKiBn X2FzY2lpX3N0cnVwIChjb25zdCBnY2hhciAqc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ3NzaXplIGxlbik7CiMgMTgyICIuLi9nbGliL2dzdHJmdW5jcy5o IgpnY2hhciogZ19zdHJkdXAgKGNvbnN0IGdjaGFyICpzdHIpOwpnY2hhciogZ19zdHJkdXBfcHJp bnRmIChjb25zdCBnY2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLi4uKSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAxLCAy KSkpOwpnY2hhciogZ19zdHJkdXBfdnByaW50ZiAoY29uc3QgZ2NoYXIgKmZvcm1hdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgYXJncyk7CmdjaGFyKiBn X3N0cm5kdXAgKGNvbnN0IGdjaGFyICpzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnc2l6ZSBuKTsKZ2NoYXIqIGdfc3RybmZpbGwgKGdzaXplIGxlbmd0aCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdjaGFyIGZpbGxfY2hhcik7Cmdj aGFyKiBnX3N0cmNvbmNhdCAoY29uc3QgZ2NoYXIgKnN0cmluZzEsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwpnY2hhciogZ19zdHJqb2luIChjb25zdCBnY2hh ciAqc2VwYXJhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4u KTsKCgoKCmdjaGFyKiBnX3N0cmNvbXByZXNzIChjb25zdCBnY2hhciAqc291cmNlKTsKIyAyMDkg Ii4uL2dsaWIvZ3N0cmZ1bmNzLmgiCmdjaGFyKiBnX3N0cmVzY2FwZSAoY29uc3QgZ2NoYXIgKnNv dXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFy ICpleGNlcHRpb25zKTsKCmdwb2ludGVyIGdfbWVtZHVwIChnY29uc3Rwb2ludGVyIG1lbSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IGJ5dGVfc2l6ZSk7CiMg MjIzICIuLi9nbGliL2dzdHJmdW5jcy5oIgpnY2hhcioqIGdfc3Ryc3BsaXQgKGNvbnN0IGdjaGFy ICpzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn Y2hhciAqZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z2ludCBtYXhfdG9rZW5zKTsKZ2NoYXIqIGdfc3Ryam9pbnYgKGNvbnN0IGdjaGFyICpzZXBhcmF0 b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2hhciAqKnN0cl9h cnJheSk7CnZvaWQgZ19zdHJmcmVldiAoZ2NoYXIgKipzdHJfYXJyYXkpOwpnY2hhcioqIGdfc3Ry ZHVwdiAoZ2NoYXIgKipzdHJfYXJyYXkpOwoKZ2NoYXIqIGdfc3RwY3B5IChnY2hhciAqZGVzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNyYyk7 CgoKIyA2NCAiZ2xpYi5oIiAyCgoKIyAxICIuLi9nbGliL2d0aHJlYWRwb29sLmgiIDEKIyAzMiAi Li4vZ2xpYi9ndGhyZWFkcG9vbC5oIgoKCnR5cGVkZWYgc3RydWN0IF9HVGhyZWFkUG9vbCBHVGhy ZWFkUG9vbDsKCgoKCgoKc3RydWN0IF9HVGhyZWFkUG9vbAp7CiAgR0Z1bmMgZnVuYzsKICBncG9p bnRlciB1c2VyX2RhdGE7CiAgZ2Jvb2xlYW4gZXhjbHVzaXZlOwp9OwoKCgoKCgpHVGhyZWFkUG9v bCogZ190aHJlYWRfcG9vbF9uZXcgKEdGdW5jIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgbWF4X3RocmVhZHMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gZXhjbHVz aXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJv ciAqKmVycm9yKTsKCgoKCgp2b2lkIGdfdGhyZWFkX3Bvb2xfcHVzaCAoR1RocmVhZFBvb2wgKnBv b2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50 ZXIgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH RXJyb3IgKiplcnJvcik7CgoKCgp2b2lkIGdfdGhyZWFkX3Bvb2xfc2V0X21heF90aHJlYWRzIChH VGhyZWFkUG9vbCAqcG9vbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnaW50IG1heF90aHJlYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEdFcnJvciAqKmVycm9yKTsKZ2ludCBnX3RocmVhZF9wb29sX2dldF9t YXhfdGhyZWFkcyAoR1RocmVhZFBvb2wgKnBvb2wpOwoKCgpndWludCBnX3RocmVhZF9wb29sX2dl dF9udW1fdGhyZWFkcyAoR1RocmVhZFBvb2wgKnBvb2wpOwoKCmd1aW50IGdfdGhyZWFkX3Bvb2xf dW5wcm9jZXNzZWQgKEdUaHJlYWRQb29sICpwb29sKTsKCgoKCgp2b2lkIGdfdGhyZWFkX3Bvb2xf ZnJlZSAoR1RocmVhZFBvb2wgKnBvb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2Jvb2xlYW4gaW1tZWRpYXRlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuIHdhaXQpOwoKCgp2b2lkIGdfdGhyZWFk X3Bvb2xfc2V0X21heF91bnVzZWRfdGhyZWFkcyAoZ2ludCBtYXhfdGhyZWFkcyk7CmdpbnQgZ190 aHJlYWRfcG9vbF9nZXRfbWF4X3VudXNlZF90aHJlYWRzICh2b2lkKTsKZ3VpbnQgZ190aHJlYWRf cG9vbF9nZXRfbnVtX3VudXNlZF90aHJlYWRzICh2b2lkKTsKCgp2b2lkIGdfdGhyZWFkX3Bvb2xf c3RvcF91bnVzZWRfdGhyZWFkcyAodm9pZCk7CgoKIyA2NyAiZ2xpYi5oIiAyCiMgMSAiLi4vZ2xp Yi9ndGltZXIuaCIgMQojIDMyICIuLi9nbGliL2d0aW1lci5oIgoKCgoKCgp0eXBlZGVmIHN0cnVj dCBfR1RpbWVyIEdUaW1lcjsKCgoKR1RpbWVyKiBnX3RpbWVyX25ldyAodm9pZCk7CnZvaWQgZ190 aW1lcl9kZXN0cm95IChHVGltZXIgKnRpbWVyKTsKdm9pZCBnX3RpbWVyX3N0YXJ0IChHVGltZXIg KnRpbWVyKTsKdm9pZCBnX3RpbWVyX3N0b3AgKEdUaW1lciAqdGltZXIpOwp2b2lkIGdfdGltZXJf cmVzZXQgKEdUaW1lciAqdGltZXIpOwpnZG91YmxlIGdfdGltZXJfZWxhcHNlZCAoR1RpbWVyICp0 aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgIGd1bG9uZyAqbWljcm9zZWNvbmRzKTsKCnZv aWQgZ191c2xlZXAgKGd1bG9uZyBtaWNyb3NlY29uZHMpOwoKdm9pZCBnX3RpbWVfdmFsX2FkZCAo R1RpbWVWYWwgKnRpbWVfLAogICAgICAgICAgICAgICAgICAgICAgICAgZ2xvbmcgbWljcm9zZWNv bmRzKTsKCgojIDY4ICJnbGliLmgiIDIKIyAxICIuLi9nbGliL2d0cmVlLmgiIDEKIyAzMiAiLi4v Z2xpYi9ndHJlZS5oIgoKCnR5cGVkZWYgc3RydWN0IF9HVHJlZSBHVHJlZTsKCnR5cGVkZWYgZ2Jv b2xlYW4gKCpHVHJhdmVyc2VGdW5jKSAoZ3BvaW50ZXIga2V5LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdwb2ludGVyIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdwb2ludGVyIGRhdGEpOwoKCgpHVHJlZSogZ190cmVlX25ldyAoR0NvbXBhcmVG dW5jIGtleV9jb21wYXJlX2Z1bmMpOwpHVHJlZSogZ190cmVlX25ld193aXRoX2RhdGEgKEdDb21w YXJlRGF0YUZ1bmMga2V5X2NvbXBhcmVfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ3BvaW50ZXIga2V5X2NvbXBhcmVfZGF0YSk7CkdUcmVlKiBnX3RyZWVfbmV3X2Z1bGwg KEdDb21wYXJlRGF0YUZ1bmMga2V5X2NvbXBhcmVfZnVuYywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ3BvaW50ZXIga2V5X2NvbXBhcmVfZGF0YSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkga2V5X2Rlc3Ryb3lfZnVuYywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR0Rlc3Ryb3lOb3RpZnkgdmFsdWVfZGVzdHJveV9mdW5j KTsKdm9pZCBnX3RyZWVfZGVzdHJveSAoR1RyZWUgKnRyZWUpOwp2b2lkIGdfdHJlZV9pbnNlcnQg KEdUcmVlICp0cmVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBr ZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHZhbHVlKTsKdm9p ZCBnX3RyZWVfcmVwbGFjZSAoR1RyZWUgKnRyZWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdwb2ludGVyIGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bv aW50ZXIgdmFsdWUpOwp2b2lkIGdfdHJlZV9yZW1vdmUgKEdUcmVlICp0cmVlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnY29uc3Rwb2ludGVyIGtleSk7CnZvaWQgZ190cmVlX3N0 ZWFsIChHVHJlZSAqdHJlZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0 cG9pbnRlciBrZXkpOwpncG9pbnRlciBnX3RyZWVfbG9va3VwIChHVHJlZSAqdHJlZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBrZXkpOwpnYm9vbGVhbiBn X3RyZWVfbG9va3VwX2V4dGVuZGVkIChHVHJlZSAqdHJlZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciBsb29rdXBfa2V5LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBncG9pbnRlciAqb3JpZ19rZXksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdwb2ludGVyICp2YWx1ZSk7CnZvaWQgZ190cmVlX2ZvcmVhY2ggKEdUcmVlICp0 cmVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVHJhdmVyc2VGdW5jIGZ1bmMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CiMg NzcgIi4uL2dsaWIvZ3RyZWUuaCIKZ3BvaW50ZXIgZ190cmVlX3NlYXJjaCAoR1RyZWUgKnRyZWUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDb21wYXJlRnVuYyBzZWFyY2hfZnVu YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciB1c2VyX2Rh dGEpOwpnaW50IGdfdHJlZV9oZWlnaHQgKEdUcmVlICp0cmVlKTsKZ2ludCBnX3RyZWVfbm5vZGVz IChHVHJlZSAqdHJlZSk7CgoKCgojIDY5ICJnbGliLmgiIDIKCgojIDEgIi4uL2dsaWIvZ3V0aWxz LmgiIDEKIyAzMyAiLi4vZ2xpYi9ndXRpbHMuaCIKCiMgMTE2ICIuLi9nbGliL2d1dGlscy5oIgpj b25zdCBnY2hhciogZ19nZXRfdXNlcl9uYW1lICh2b2lkKTsKY29uc3QgZ2NoYXIqIGdfZ2V0X3Jl YWxfbmFtZSAodm9pZCk7CmNvbnN0IGdjaGFyKiBnX2dldF9ob21lX2RpciAodm9pZCk7CmNvbnN0 IGdjaGFyKiBnX2dldF90bXBfZGlyICh2b2lkKTsKZ2NoYXIqIGdfZ2V0X3ByZ25hbWUgKHZvaWQp Owp2b2lkIGdfc2V0X3ByZ25hbWUgKGNvbnN0IGdjaGFyICpwcmduYW1lKTsKY29uc3QgZ2NoYXIq IGdfZ2V0X2FwcGxpY2F0aW9uX25hbWUgKHZvaWQpOwp2b2lkIGdfc2V0X2FwcGxpY2F0aW9uX25h bWUgKGNvbnN0IGdjaGFyICphcHBsaWNhdGlvbl9uYW1lKTsKCgp0eXBlZGVmIHN0cnVjdCBfR0Rl YnVnS2V5IEdEZWJ1Z0tleTsKc3RydWN0IF9HRGVidWdLZXkKewogIGdjaGFyICprZXk7CiAgZ3Vp bnQgdmFsdWU7Cn07CgoKCmd1aW50IGdfcGFyc2VfZGVidWdfc3RyaW5nIChjb25zdCBnY2hhciAq c3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IEdEZWJ1Z0tleSAqa2V5cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBndWludCBua2V5cyk7CgpnaW50IGdfc25wcmludGYgKGdjaGFyICpzdHJpbmcsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vsb25nIG4sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgY29uc3QgKmZvcm1hdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pIF9fYXR0cmli dXRlX18oKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CmdpbnQgZ192c25wcmludGYg KGdjaGFyICpzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZ3Vsb25nIG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z2NoYXIgY29uc3QgKmZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2YV9saXN0IGFyZ3MpOwoKCmdib29sZWFuIGdfcGF0aF9pc19hYnNvbHV0ZSAoY29u c3QgZ2NoYXIgKmZpbGVfbmFtZSk7CgoKY29uc3QgZ2NoYXIqIGdfcGF0aF9za2lwX3Jvb3QgKGNv bnN0IGdjaGFyICpmaWxlX25hbWUpOwojIDE2NiAiLi4vZ2xpYi9ndXRpbHMuaCIKZ2NoYXIqIGdf Z2V0X2N1cnJlbnRfZGlyICh2b2lkKTsKZ2NoYXIqIGdfcGF0aF9nZXRfYmFzZW5hbWUgKGNvbnN0 IGdjaGFyICpmaWxlX25hbWUpOwpnY2hhciogZ19wYXRoX2dldF9kaXJuYW1lIChjb25zdCBnY2hh ciAqZmlsZV9uYW1lKTsKCgoKdm9pZCBnX251bGxpZnlfcG9pbnRlciAoZ3BvaW50ZXIgKm51bGxp ZnlfbG9jYXRpb24pOwoKCgoKCgpjb25zdCBnY2hhciogZ19nZXRlbnYgKGNvbnN0IGdjaGFyICp2 YXJpYWJsZSk7CgoKCgoKCnR5cGVkZWYgdm9pZCAoKkdWb2lkRnVuYykgKHZvaWQpOwojIDE5NyAi Li4vZ2xpYi9ndXRpbHMuaCIKdm9pZCBnX2F0ZXhpdCAoR1ZvaWRGdW5jIGZ1bmMpOwoKCmdjaGFy KiBnX2ZpbmRfcHJvZ3JhbV9pbl9wYXRoIChjb25zdCBnY2hhciAqcHJvZ3JhbSk7CgoKCmV4dGVy biBpbmxpbmUgZ2ludCBnX2JpdF9udGhfbHNmIChndWxvbmcgbWFzaywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBudGhfYml0KTsKZXh0ZXJuIGlubGluZSBnaW50 IGdfYml0X250aF9tc2YgKGd1bG9uZyBtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnaW50IG50aF9iaXQpOwpleHRlcm4gaW5saW5lIGd1aW50IGdfYml0X3N0b3Jh Z2UgKGd1bG9uZyBudW1iZXIpOwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX0dUcmFzaFN0YWNrIEdUcmFz aFN0YWNrOwpzdHJ1Y3QgX0dUcmFzaFN0YWNrCnsKICBHVHJhc2hTdGFjayAqbmV4dDsKfTsKCmV4 dGVybiBpbmxpbmUgdm9pZCBnX3RyYXNoX3N0YWNrX3B1c2ggKEdUcmFzaFN0YWNrICoqc3RhY2tf cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2lu dGVyIGRhdGFfcCk7CmV4dGVybiBpbmxpbmUgZ3BvaW50ZXIgZ190cmFzaF9zdGFja19wb3AgKEdU cmFzaFN0YWNrICoqc3RhY2tfcCk7CmV4dGVybiBpbmxpbmUgZ3BvaW50ZXIgZ190cmFzaF9zdGFj a19wZWVrIChHVHJhc2hTdGFjayAqKnN0YWNrX3ApOwpleHRlcm4gaW5saW5lIGd1aW50IGdfdHJh c2hfc3RhY2tfaGVpZ2h0IChHVHJhc2hTdGFjayAqKnN0YWNrX3ApOwoKCgoKZXh0ZXJuIGlubGlu ZSBnaW50CmdfYml0X250aF9sc2YgKGd1bG9uZyBtYXNrLAogICAgICAgICAgICAgICBnaW50IG50 aF9iaXQpCnsKICBkbwogICAgewogICAgICBudGhfYml0Kys7CiAgICAgIGlmIChtYXNrICYgKDEg PDwgKGd1bG9uZykgbnRoX2JpdCkpCiAgICAgICAgcmV0dXJuIG50aF9iaXQ7CiAgICB9CiAgd2hp bGUgKG50aF9iaXQgPCAzMSk7CiAgcmV0dXJuIC0xOwp9CmV4dGVybiBpbmxpbmUgZ2ludApnX2Jp dF9udGhfbXNmIChndWxvbmcgbWFzaywKICAgICAgICAgICAgICAgZ2ludCBudGhfYml0KQp7CiAg aWYgKG50aF9iaXQgPCAwKQogICAgbnRoX2JpdCA9IDQgKiA4OwogIGRvCiAgICB7CiAgICAgIG50 aF9iaXQtLTsKICAgICAgaWYgKG1hc2sgJiAoMSA8PCAoZ3Vsb25nKSBudGhfYml0KSkKICAgICAg ICByZXR1cm4gbnRoX2JpdDsKICAgIH0KICB3aGlsZSAobnRoX2JpdCA+IDApOwogIHJldHVybiAt MTsKfQpleHRlcm4gaW5saW5lIGd1aW50CmdfYml0X3N0b3JhZ2UgKGd1bG9uZyBudW1iZXIpCnsK ICByZWdpc3RlciBndWludCBuX2JpdHMgPSAwOwoKICBkbwogICAgewogICAgICBuX2JpdHMrKzsK ICAgICAgbnVtYmVyID4+PSAxOwogICAgfQogIHdoaWxlIChudW1iZXIpOwogIHJldHVybiBuX2Jp dHM7Cn0KZXh0ZXJuIGlubGluZSB2b2lkCmdfdHJhc2hfc3RhY2tfcHVzaCAoR1RyYXNoU3RhY2sg KipzdGFja19wLAogICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGRhdGFfcCkKewogIEdUcmFz aFN0YWNrICpkYXRhID0gKEdUcmFzaFN0YWNrICopIGRhdGFfcDsKCiAgZGF0YS0+bmV4dCA9ICpz dGFja19wOwogICpzdGFja19wID0gZGF0YTsKfQpleHRlcm4gaW5saW5lIGdwb2ludGVyCmdfdHJh c2hfc3RhY2tfcG9wIChHVHJhc2hTdGFjayAqKnN0YWNrX3ApCnsKICBHVHJhc2hTdGFjayAqZGF0 YTsKCiAgZGF0YSA9ICpzdGFja19wOwogIGlmIChkYXRhKQogICAgewogICAgICAqc3RhY2tfcCA9 IGRhdGEtPm5leHQ7CgoKCiAgICAgIGRhdGEtPm5leHQgPSAoKHZvaWQgKikwKTsKICAgIH0KCiAg cmV0dXJuIGRhdGE7Cn0KZXh0ZXJuIGlubGluZSBncG9pbnRlcgpnX3RyYXNoX3N0YWNrX3BlZWsg KEdUcmFzaFN0YWNrICoqc3RhY2tfcCkKewogIEdUcmFzaFN0YWNrICpkYXRhOwoKICBkYXRhID0g KnN0YWNrX3A7CgogIHJldHVybiBkYXRhOwp9CmV4dGVybiBpbmxpbmUgZ3VpbnQKZ190cmFzaF9z dGFja19oZWlnaHQgKEdUcmFzaFN0YWNrICoqc3RhY2tfcCkKewogIEdUcmFzaFN0YWNrICpkYXRh OwogIGd1aW50IGkgPSAwOwoKICBmb3IgKGRhdGEgPSAqc3RhY2tfcDsgZGF0YTsgZGF0YSA9IGRh dGEtPm5leHQpCiAgICBpKys7CgogIHJldHVybiBpOwp9CgoKCgoKCmV4dGVybiBjb25zdCBndWlu dCBnbGliX21ham9yX3ZlcnNpb247CmV4dGVybiBjb25zdCBndWludCBnbGliX21pbm9yX3ZlcnNp b247CmV4dGVybiBjb25zdCBndWludCBnbGliX21pY3JvX3ZlcnNpb247CmV4dGVybiBjb25zdCBn dWludCBnbGliX2ludGVyZmFjZV9hZ2U7CmV4dGVybiBjb25zdCBndWludCBnbGliX2JpbmFyeV9h Z2U7CgoKCgoKCgoKIyA3MiAiZ2xpYi5oIiAyCiMgNDkgImdzY2FubmVyLmMiIDIKIyAxICJncHJp bnRmaW50LmgiIDEKIyA1MCAiZ3NjYW5uZXIuYyIgMgojIDY0ICJnc2Nhbm5lci5jIgp0eXBlZGVm IHN0cnVjdCBfR1NjYW5uZXJLZXkgR1NjYW5uZXJLZXk7CgpzdHJ1Y3QgX0dTY2FubmVyS2V5CnsK ICBndWludCBzY29wZV9pZDsKICBnY2hhciAqc3ltYm9sOwogIGdwb2ludGVyIHZhbHVlOwp9OwoK CgpzdGF0aWMgR1NjYW5uZXJDb25maWcgZ19zY2FubmVyX2NvbmZpZ190ZW1wbGF0ZSA9CnsKICAo CiAgICIgXHRcclxuIgogICApICwKICAoCiAgICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIK ICAgIl8iCiAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKICAgKSAsCiAgKAogICAiYWJj ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCiAgICJfIgogICAiQUJDREVGR0hJSktMTU5PUFFSU1RV VldYWVoiCiAgICIwMTIzNDU2Nzg5IgogICAiXDMzN1wzNDBcMzQxXDM0MlwzNDNcMzQ0XDM0NVwz NDYiICJcMzQ3XDM1MFwzNTFcMzUyXDM1M1wzNTRcMzU1XDM1NlwzNTdcMzYwIiAiXDM2MVwzNjJc MzYzXDM2NFwzNjVcMzY2IiAiXDM3MFwzNzFcMzcyXDM3M1wzNzRcMzc1XDM3NlwzNzciCiAgICJc MzAwXDMwMVwzMDJcMzAzXDMwNFwzMDVcMzA2IiAiXDMwN1wzMTBcMzExXDMxMlwzMTNcMzE0XDMx NVwzMTZcMzE3XDMyMCIgIlwzMjFcMzIyXDMyM1wzMjRcMzI1XDMyNiIgIlwzMzBcMzMxXDMzMlwz MzNcMzM0XDMzNVwzMzYiCiAgICkgLAogICggIiNcbiIgKSAsCgogICgwKSAsCgogICghKDApKSAs CiAgKCEoMCkpICwKICAoISgwKSkgLAogICghKDApKSAsCiAgKDApICwKICAoMCkgLAogICghKDAp KSAsCiAgKDApICwKICAoISgwKSkgLAogICghKDApKSAsCiAgKCEoMCkpICwKICAoMCkgLAogICgh KDApKSAsCiAgKCEoMCkpICwKICAoISgwKSkgLAogICgwKSAsCiAgKDApICwKICAoISgwKSkgLAog ICgwKSAsCiAgKDApICwKICAoMCkgLAp9OwoKCgpzdGF0aWMgaW5saW5lCkdTY2FubmVyS2V5KiBn X3NjYW5uZXJfbG9va3VwX2ludGVybmFsIChHU2Nhbm5lciAqc2Nhbm5lciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHNjb3BlX2lkLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN5bWJvbCk7CnN0 YXRpYyBnYm9vbGVhbiBnX3NjYW5uZXJfa2V5X2VxdWFsIChnY29uc3Rwb2ludGVyIHYxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciB2Mik7 CnN0YXRpYyBndWludCBnX3NjYW5uZXJfa2V5X2hhc2ggKGdjb25zdHBvaW50ZXIgdik7CnN0YXRp YyB2b2lkIGdfc2Nhbm5lcl9nZXRfdG9rZW5fbGwgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1Rva2VuVHlwZSAqdG9rZW5fcCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUb2tlblZhbHVlICp2 YWx1ZV9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQg KmxpbmVfcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50 ICpwb3NpdGlvbl9wKTsKc3RhdGljIHZvaWQgZ19zY2FubmVyX2dldF90b2tlbl9pIChHU2Nhbm5l ciAqc2Nhbm5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdU b2tlblR5cGUgKnRva2VuX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHVG9rZW5WYWx1ZSAqdmFsdWVfcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGd1aW50ICpsaW5lX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBndWludCAqcG9zaXRpb25fcCk7CgpzdGF0aWMgZ3VjaGFyIGdfc2Nhbm5l cl9wZWVrX25leHRfY2hhciAoR1NjYW5uZXIgKnNjYW5uZXIpOwpzdGF0aWMgZ3VjaGFyIGdfc2Nh bm5lcl9nZXRfY2hhciAoR1NjYW5uZXIgKnNjYW5uZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBndWludCAqbGluZV9wLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgKnBvc2l0aW9uX3ApOwpzdGF0aWMgdm9pZCBnX3Nj YW5uZXJfbXNnX2hhbmRsZXIgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ2NoYXIgKm1lc3NhZ2UsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBpc19lcnJvcik7CgoKCnN0YXRpYyBp bmxpbmUgZ2ludApnX3NjYW5uZXJfY2hhcl8yX251bSAoZ3VjaGFyIGMsCiAgICAgICAgICAgICAg ICAgICAgICBndWNoYXIgYmFzZSkKewogIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykKICAgIGMg LT0gJzAnOwogIGVsc2UgaWYgKGMgPj0gJ0EnICYmIGMgPD0gJ1onKQogICAgYyAtPSAnQScgLSAx MDsKICBlbHNlIGlmIChjID49ICdhJyAmJiBjIDw9ICd6JykKICAgIGMgLT0gJ2EnIC0gMTA7CiAg ZWxzZQogICAgcmV0dXJuIC0xOwoKICBpZiAoYyA8IGJhc2UpCiAgICByZXR1cm4gYzsKCiAgcmV0 dXJuIC0xOwp9CgpHU2Nhbm5lcioKZ19zY2FubmVyX25ldyAoY29uc3QgR1NjYW5uZXJDb25maWcg KmNvbmZpZ190ZW1wbCkKewogIEdTY2FubmVyICpzY2FubmVyOwoKICBpZiAoIWNvbmZpZ190ZW1w bCkKICAgIGNvbmZpZ190ZW1wbCA9ICZnX3NjYW5uZXJfY29uZmlnX3RlbXBsYXRlOwoKICBzY2Fu bmVyID0gKChHU2Nhbm5lciAqKSBnX21hbGxvYzAgKCgoZ3NpemUpIHNpemVvZiAoR1NjYW5uZXIp KSAqICgoZ3NpemUpICgxKSkpKTsKCiAgc2Nhbm5lci0+dXNlcl9kYXRhID0gKCh2b2lkICopMCk7 CiAgc2Nhbm5lci0+bWF4X3BhcnNlX2Vycm9ycyA9IDE7CiAgc2Nhbm5lci0+cGFyc2VfZXJyb3Jz ID0gMDsKICBzY2FubmVyLT5pbnB1dF9uYW1lID0gKCh2b2lkICopMCk7CiAgZ19kYXRhbGlzdF9p bml0ICgmc2Nhbm5lci0+cWRhdGEpOwoKICBzY2FubmVyLT5jb25maWcgPSAoKEdTY2FubmVyQ29u ZmlnICopIGdfbWFsbG9jMCAoKChnc2l6ZSkgc2l6ZW9mIChHU2Nhbm5lckNvbmZpZykpICogKChn c2l6ZSkgKDEpKSkpOwoKICBzY2FubmVyLT5jb25maWctPmNhc2Vfc2Vuc2l0aXZlID0gY29uZmln X3RlbXBsLT5jYXNlX3NlbnNpdGl2ZTsKICBzY2FubmVyLT5jb25maWctPmNzZXRfc2tpcF9jaGFy YWN0ZXJzID0gY29uZmlnX3RlbXBsLT5jc2V0X3NraXBfY2hhcmFjdGVyczsKICBpZiAoIXNjYW5u ZXItPmNvbmZpZy0+Y3NldF9za2lwX2NoYXJhY3RlcnMpCiAgICBzY2FubmVyLT5jb25maWctPmNz ZXRfc2tpcF9jaGFyYWN0ZXJzID0gIiI7CiAgc2Nhbm5lci0+Y29uZmlnLT5jc2V0X2lkZW50aWZp ZXJfZmlyc3QgPSBjb25maWdfdGVtcGwtPmNzZXRfaWRlbnRpZmllcl9maXJzdDsKICBzY2FubmVy LT5jb25maWctPmNzZXRfaWRlbnRpZmllcl9udGggPSBjb25maWdfdGVtcGwtPmNzZXRfaWRlbnRp Zmllcl9udGg7CiAgc2Nhbm5lci0+Y29uZmlnLT5jcGFpcl9jb21tZW50X3NpbmdsZSA9IGNvbmZp Z190ZW1wbC0+Y3BhaXJfY29tbWVudF9zaW5nbGU7CiAgc2Nhbm5lci0+Y29uZmlnLT5za2lwX2Nv bW1lbnRfbXVsdGkgPSBjb25maWdfdGVtcGwtPnNraXBfY29tbWVudF9tdWx0aTsKICBzY2FubmVy LT5jb25maWctPnNraXBfY29tbWVudF9zaW5nbGUgPSBjb25maWdfdGVtcGwtPnNraXBfY29tbWVu dF9zaW5nbGU7CiAgc2Nhbm5lci0+Y29uZmlnLT5zY2FuX2NvbW1lbnRfbXVsdGkgPSBjb25maWdf dGVtcGwtPnNjYW5fY29tbWVudF9tdWx0aTsKICBzY2FubmVyLT5jb25maWctPnNjYW5faWRlbnRp ZmllciA9IGNvbmZpZ190ZW1wbC0+c2Nhbl9pZGVudGlmaWVyOwogIHNjYW5uZXItPmNvbmZpZy0+ c2Nhbl9pZGVudGlmaWVyXzFjaGFyID0gY29uZmlnX3RlbXBsLT5zY2FuX2lkZW50aWZpZXJfMWNo YXI7CiAgc2Nhbm5lci0+Y29uZmlnLT5zY2FuX2lkZW50aWZpZXJfTlVMTCA9IGNvbmZpZ190ZW1w bC0+c2Nhbl9pZGVudGlmaWVyX05VTEw7CiAgc2Nhbm5lci0+Y29uZmlnLT5zY2FuX3N5bWJvbHMg PSBjb25maWdfdGVtcGwtPnNjYW5fc3ltYm9sczsKICBzY2FubmVyLT5jb25maWctPnNjYW5fYmlu YXJ5ID0gY29uZmlnX3RlbXBsLT5zY2FuX2JpbmFyeTsKICBzY2FubmVyLT5jb25maWctPnNjYW5f b2N0YWwgPSBjb25maWdfdGVtcGwtPnNjYW5fb2N0YWw7CiAgc2Nhbm5lci0+Y29uZmlnLT5zY2Fu X2Zsb2F0ID0gY29uZmlnX3RlbXBsLT5zY2FuX2Zsb2F0OwogIHNjYW5uZXItPmNvbmZpZy0+c2Nh bl9oZXggPSBjb25maWdfdGVtcGwtPnNjYW5faGV4OwogIHNjYW5uZXItPmNvbmZpZy0+c2Nhbl9o ZXhfZG9sbGFyID0gY29uZmlnX3RlbXBsLT5zY2FuX2hleF9kb2xsYXI7CiAgc2Nhbm5lci0+Y29u ZmlnLT5zY2FuX3N0cmluZ19zcSA9IGNvbmZpZ190ZW1wbC0+c2Nhbl9zdHJpbmdfc3E7CiAgc2Nh bm5lci0+Y29uZmlnLT5zY2FuX3N0cmluZ19kcSA9IGNvbmZpZ190ZW1wbC0+c2Nhbl9zdHJpbmdf ZHE7CiAgc2Nhbm5lci0+Y29uZmlnLT5udW1iZXJzXzJfaW50ID0gY29uZmlnX3RlbXBsLT5udW1i ZXJzXzJfaW50OwogIHNjYW5uZXItPmNvbmZpZy0+aW50XzJfZmxvYXQgPSBjb25maWdfdGVtcGwt PmludF8yX2Zsb2F0OwogIHNjYW5uZXItPmNvbmZpZy0+aWRlbnRpZmllcl8yX3N0cmluZyA9IGNv bmZpZ190ZW1wbC0+aWRlbnRpZmllcl8yX3N0cmluZzsKICBzY2FubmVyLT5jb25maWctPmNoYXJf Ml90b2tlbiA9IGNvbmZpZ190ZW1wbC0+Y2hhcl8yX3Rva2VuOwogIHNjYW5uZXItPmNvbmZpZy0+ c3ltYm9sXzJfdG9rZW4gPSBjb25maWdfdGVtcGwtPnN5bWJvbF8yX3Rva2VuOwogIHNjYW5uZXIt PmNvbmZpZy0+c2NvcGVfMF9mYWxsYmFjayA9IGNvbmZpZ190ZW1wbC0+c2NvcGVfMF9mYWxsYmFj azsKICBzY2FubmVyLT5jb25maWctPnN0b3JlX2ludDY0ID0gY29uZmlnX3RlbXBsLT5zdG9yZV9p bnQ2NDsKCiAgc2Nhbm5lci0+dG9rZW4gPSBHX1RPS0VOX05PTkU7CiAgc2Nhbm5lci0+dmFsdWUu dl9pbnQ2NCA9IDA7CiAgc2Nhbm5lci0+bGluZSA9IDE7CiAgc2Nhbm5lci0+cG9zaXRpb24gPSAw OwoKICBzY2FubmVyLT5uZXh0X3Rva2VuID0gR19UT0tFTl9OT05FOwogIHNjYW5uZXItPm5leHRf dmFsdWUudl9pbnQ2NCA9IDA7CiAgc2Nhbm5lci0+bmV4dF9saW5lID0gMTsKICBzY2FubmVyLT5u ZXh0X3Bvc2l0aW9uID0gMDsKCiAgc2Nhbm5lci0+c3ltYm9sX3RhYmxlID0gZ19oYXNoX3RhYmxl X25ldyAoZ19zY2FubmVyX2tleV9oYXNoLCBnX3NjYW5uZXJfa2V5X2VxdWFsKTsKICBzY2FubmVy LT5pbnB1dF9mZCA9IC0xOwogIHNjYW5uZXItPnRleHQgPSAoKHZvaWQgKikwKTsKICBzY2FubmVy LT50ZXh0X2VuZCA9ICgodm9pZCAqKTApOwogIHNjYW5uZXItPmJ1ZmZlciA9ICgodm9pZCAqKTAp OwogIHNjYW5uZXItPnNjb3BlX2lkID0gMDsKCiAgc2Nhbm5lci0+bXNnX2hhbmRsZXIgPSBnX3Nj YW5uZXJfbXNnX2hhbmRsZXI7CgogIHJldHVybiBzY2FubmVyOwp9CgpzdGF0aWMgaW5saW5lIHZv aWQKZ19zY2FubmVyX2ZyZWVfdmFsdWUgKEdUb2tlblR5cGUgKnRva2VuX3AsCiAgICAgICAgICAg ICAgICAgICAgICBHVG9rZW5WYWx1ZSAqdmFsdWVfcCkKewogIHN3aXRjaCAoKnRva2VuX3ApCiAg ICB7CiAgICBjYXNlIEdfVE9LRU5fU1RSSU5HOgogICAgY2FzZSBHX1RPS0VOX0lERU5USUZJRVI6 CiAgICBjYXNlIEdfVE9LRU5fSURFTlRJRklFUl9OVUxMOgogICAgY2FzZSBHX1RPS0VOX0NPTU1F TlRfU0lOR0xFOgogICAgY2FzZSBHX1RPS0VOX0NPTU1FTlRfTVVMVEk6CiAgICAgIGdfZnJlZSAo dmFsdWVfcC0+dl9zdHJpbmcpOwogICAgICBicmVhazsKCiAgICBkZWZhdWx0OgogICAgICBicmVh azsKICAgIH0KCiAgKnRva2VuX3AgPSBHX1RPS0VOX05PTkU7Cn0KCnN0YXRpYyB2b2lkCmdfc2Nh bm5lcl9kZXN0cm95X3N5bWJvbF90YWJsZV9lbnRyeSAoZ3BvaW50ZXIgX2tleSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBfdmFsdWUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgX2RhdGEpCnsKICBHU2Nhbm5lcktl eSAqa2V5ID0gX2tleTsKCiAgZ19mcmVlIChrZXktPnN5bWJvbCk7CiAgZ19mcmVlIChrZXkpOwp9 Cgp2b2lkCmdfc2Nhbm5lcl9kZXN0cm95IChHU2Nhbm5lciAqc2Nhbm5lcikKewogICh2b2lkKSh7 IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4dGVuc2lvbl9fICh7IGludCBfZ19ib29sZWFuX3Zh cl87IGlmIChzY2FubmVyICE9ICgodm9pZCAqKTApKSBfZ19ib29sZWFuX3Zhcl8gPSAxOyBlbHNl IF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5fdmFyXzsgfSksIDEpKSB7IH0gZWxzZSB7 IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FMLCAiZmlsZSAlczogbGluZSAlZCAo JXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3NjYW5uZXIuYyIsIDI3MywgX19QUkVUVFlf RlVOQ1RJT05fXywgInNjYW5uZXIgIT0gTlVMTCIpOyByZXR1cm47IH07IH0pOwoKICBnX2RhdGFs aXN0X2NsZWFyICgmc2Nhbm5lci0+cWRhdGEpOwogIGdfaGFzaF90YWJsZV9mb3JlYWNoIChzY2Fu bmVyLT5zeW1ib2xfdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGdfc2Nhbm5lcl9kZXN0 cm95X3N5bWJvbF90YWJsZV9lbnRyeSwgKCh2b2lkICopMCkpOwogIGdfaGFzaF90YWJsZV9kZXN0 cm95IChzY2FubmVyLT5zeW1ib2xfdGFibGUpOwogIGdfc2Nhbm5lcl9mcmVlX3ZhbHVlICgmc2Nh bm5lci0+dG9rZW4sICZzY2FubmVyLT52YWx1ZSk7CiAgZ19zY2FubmVyX2ZyZWVfdmFsdWUgKCZz Y2FubmVyLT5uZXh0X3Rva2VuLCAmc2Nhbm5lci0+bmV4dF92YWx1ZSk7CiAgZ19mcmVlIChzY2Fu bmVyLT5jb25maWcpOwogIGdfZnJlZSAoc2Nhbm5lci0+YnVmZmVyKTsKICBnX2ZyZWUgKHNjYW5u ZXIpOwp9CgpzdGF0aWMgdm9pZApnX3NjYW5uZXJfbXNnX2hhbmRsZXIgKEdTY2FubmVyICpzY2Fu bmVyLAogICAgICAgICAgICAgICAgICAgICAgIGdjaGFyICptZXNzYWdlLAogICAgICAgICAgICAg ICAgICAgICAgIGdib29sZWFuIGlzX2Vycm9yKQp7CiAgKHZvaWQpKHsgaWYgKF9fYnVpbHRpbl9l eHBlY3QgKF9fZXh0ZW5zaW9uX18gKHsgaW50IF9nX2Jvb2xlYW5fdmFyXzsgaWYgKHNjYW5uZXIg IT0gKCh2b2lkICopMCkpIF9nX2Jvb2xlYW5fdmFyXyA9IDE7IGVsc2UgX2dfYm9vbGVhbl92YXJf ID0gMDsgX2dfYm9vbGVhbl92YXJfOyB9KSwgMSkpIHsgfSBlbHNlIHsgZ19sb2cgKCJHTGliIiwg R19MT0dfTEVWRUxfQ1JJVElDQUwsICJmaWxlICVzOiBsaW5lICVkICglcyk6IGFzc2VydGlvbiBg JXMnIGZhaWxlZCIsICJnc2Nhbm5lci5jIiwgMjkxLCBfX1BSRVRUWV9GVU5DVElPTl9fLCAic2Nh bm5lciAhPSBOVUxMIik7IHJldHVybjsgfTsgfSk7CgogIGZwcmludGYgKHN0ZGVyciwgIiVzOiVk OiAiLAogICAgICAgICAgICAgIHNjYW5uZXItPmlucHV0X25hbWUgPyBzY2FubmVyLT5pbnB1dF9u YW1lIDogIjxtZW1vcnk+IiwKICAgICAgICAgICAgICBzY2FubmVyLT5saW5lKTsKICBpZiAoaXNf ZXJyb3IpCiAgICBmcHJpbnRmIChzdGRlcnIsICJlcnJvcjogIik7CiAgZnByaW50ZiAoc3RkZXJy LCAiJXNcbiIsIG1lc3NhZ2UpOwp9Cgp2b2lkCmdfc2Nhbm5lcl9lcnJvciAoR1NjYW5uZXIgKnNj YW5uZXIsCiAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKmZvcm1hdCwKICAgICAgICAgICAg ICAgICAuLi4pCnsKICAodm9pZCkoeyBpZiAoX19idWlsdGluX2V4cGVjdCAoX19leHRlbnNpb25f XyAoeyBpbnQgX2dfYm9vbGVhbl92YXJfOyBpZiAoc2Nhbm5lciAhPSAoKHZvaWQgKikwKSkgX2df Ym9vbGVhbl92YXJfID0gMTsgZWxzZSBfZ19ib29sZWFuX3Zhcl8gPSAwOyBfZ19ib29sZWFuX3Zh cl87IH0pLCAxKSkgeyB9IGVsc2UgeyBnX2xvZyAoIkdMaWIiLCBHX0xPR19MRVZFTF9DUklUSUNB TCwgImZpbGUgJXM6IGxpbmUgJWQgKCVzKTogYXNzZXJ0aW9uIGAlcycgZmFpbGVkIiwgImdzY2Fu bmVyLmMiLCAzMDYsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJzY2FubmVyICE9IE5VTEwiKTsgcmV0 dXJuOyB9OyB9KTsKICAodm9pZCkoeyBpZiAoX19idWlsdGluX2V4cGVjdCAoX19leHRlbnNpb25f XyAoeyBpbnQgX2dfYm9vbGVhbl92YXJfOyBpZiAoZm9ybWF0ICE9ICgodm9pZCAqKTApKSBfZ19i b29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5fdmFy XzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FM LCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3NjYW5u ZXIuYyIsIDMwNywgX19QUkVUVFlfRlVOQ1RJT05fXywgImZvcm1hdCAhPSBOVUxMIik7IHJldHVy bjsgfTsgfSk7CgogIHNjYW5uZXItPnBhcnNlX2Vycm9ycysrOwoKICBpZiAoc2Nhbm5lci0+bXNn X2hhbmRsZXIpCiAgICB7CiAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgZ2NoYXIgKnN0cmluZzsK CiAgICAgIF9fYnVpbHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLGZvcm1hdCk7CiAgICAgIHN0cmlu ZyA9IGdfc3RyZHVwX3ZwcmludGYgKGZvcm1hdCwgYXJncyk7CiAgICAgIF9fYnVpbHRpbl92YV9l bmQgKGFyZ3MpOwoKICAgICAgc2Nhbm5lci0+bXNnX2hhbmRsZXIgKHNjYW5uZXIsIHN0cmluZywg KCEoMCkpKTsKCiAgICAgIGdfZnJlZSAoc3RyaW5nKTsKICAgIH0KfQoKdm9pZApnX3NjYW5uZXJf d2FybiAoR1NjYW5uZXIgKnNjYW5uZXIsCiAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqZm9y bWF0LAogICAgICAgICAgICAgICAgLi4uKQp7CiAgKHZvaWQpKHsgaWYgKF9fYnVpbHRpbl9leHBl Y3QgKF9fZXh0ZW5zaW9uX18gKHsgaW50IF9nX2Jvb2xlYW5fdmFyXzsgaWYgKHNjYW5uZXIgIT0g KCh2b2lkICopMCkpIF9nX2Jvb2xlYW5fdmFyXyA9IDE7IGVsc2UgX2dfYm9vbGVhbl92YXJfID0g MDsgX2dfYm9vbGVhbl92YXJfOyB9KSwgMSkpIHsgfSBlbHNlIHsgZ19sb2cgKCJHTGliIiwgR19M T0dfTEVWRUxfQ1JJVElDQUwsICJmaWxlICVzOiBsaW5lICVkICglcyk6IGFzc2VydGlvbiBgJXMn IGZhaWxlZCIsICJnc2Nhbm5lci5jIiwgMzMxLCBfX1BSRVRUWV9GVU5DVElPTl9fLCAic2Nhbm5l ciAhPSBOVUxMIik7IHJldHVybjsgfTsgfSk7CiAgKHZvaWQpKHsgaWYgKF9fYnVpbHRpbl9leHBl Y3QgKF9fZXh0ZW5zaW9uX18gKHsgaW50IF9nX2Jvb2xlYW5fdmFyXzsgaWYgKGZvcm1hdCAhPSAo KHZvaWQgKikwKSkgX2dfYm9vbGVhbl92YXJfID0gMTsgZWxzZSBfZ19ib29sZWFuX3Zhcl8gPSAw OyBfZ19ib29sZWFuX3Zhcl87IH0pLCAxKSkgeyB9IGVsc2UgeyBnX2xvZyAoIkdMaWIiLCBHX0xP R19MRVZFTF9DUklUSUNBTCwgImZpbGUgJXM6IGxpbmUgJWQgKCVzKTogYXNzZXJ0aW9uIGAlcycg ZmFpbGVkIiwgImdzY2FubmVyLmMiLCAzMzIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJmb3JtYXQg IT0gTlVMTCIpOyByZXR1cm47IH07IH0pOwoKICBpZiAoc2Nhbm5lci0+bXNnX2hhbmRsZXIpCiAg ICB7CiAgICAgIHZhX2xpc3QgYXJnczsKICAgICAgZ2NoYXIgKnN0cmluZzsKCiAgICAgIF9fYnVp bHRpbl9zdGRhcmdfc3RhcnQoKGFyZ3MpLGZvcm1hdCk7CiAgICAgIHN0cmluZyA9IGdfc3RyZHVw X3ZwcmludGYgKGZvcm1hdCwgYXJncyk7CiAgICAgIF9fYnVpbHRpbl92YV9lbmQgKGFyZ3MpOwoK ICAgICAgc2Nhbm5lci0+bXNnX2hhbmRsZXIgKHNjYW5uZXIsIHN0cmluZywgKDApKTsKCiAgICAg IGdfZnJlZSAoc3RyaW5nKTsKICAgIH0KfQoKc3RhdGljIGdib29sZWFuCmdfc2Nhbm5lcl9rZXlf ZXF1YWwgKGdjb25zdHBvaW50ZXIgdjEsCiAgICAgICAgICAgICAgICAgICAgIGdjb25zdHBvaW50 ZXIgdjIpCnsKICBjb25zdCBHU2Nhbm5lcktleSAqa2V5MSA9IHYxOwogIGNvbnN0IEdTY2FubmVy S2V5ICprZXkyID0gdjI7CgogIHJldHVybiAoa2V5MS0+c2NvcGVfaWQgPT0ga2V5Mi0+c2NvcGVf aWQpICYmIChfX2V4dGVuc2lvbl9fICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1 aWx0aW5fY29uc3RhbnRfcCAoa2V5MS0+c3ltYm9sKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAo a2V5Mi0+c3ltYm9sKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKGtleTEtPnN5bWJvbCksIF9fczJf bGVuID0gc3RybGVuIChrZXkyLT5zeW1ib2wpLCAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKChr ZXkxLT5zeW1ib2wpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGtleTEtPnN5bWJvbCkg PT0gMSkgfHwgX19zMV9sZW4gPj0gNCkgJiYgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoa2V5 Mi0+c3ltYm9sKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShrZXkyLT5zeW1ib2wpID09 IDEpIHx8IF9fczJfbGVuID49IDQpKSA/IG1lbWNtcCAoKF9fY29uc3QgY2hhciAqKSAoa2V5MS0+ c3ltYm9sKSwgKF9fY29uc3QgY2hhciAqKSAoa2V5Mi0+c3ltYm9sKSwgKF9fczFfbGVuIDwgX19z Ml9sZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9w IChrZXkxLT5zeW1ib2wpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChrZXkxLT5zeW1ib2wp ICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGtleTEtPnN5bWJvbCkgPT0gMSkgJiYgKF9f czFfbGVuID0gc3RybGVuIChrZXkxLT5zeW1ib2wpLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRp bl9jb25zdGFudF9wIChrZXkyLT5zeW1ib2wpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChr ZXkyLT5zeW1ib2wpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGtleTItPnN5bWJvbCkg PT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoa2V5MS0+c3ltYm9sKSlbMF0g LSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKGtleTItPnN5bWJv bCkpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0g KCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGtleTEtPnN5bWJv bCkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoa2V5 Mi0+c3ltYm9sKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19y ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoa2V5 MS0+c3ltYm9sKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopIChrZXkyLT5zeW1ib2wpKVsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0g MCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoa2V5MS0+c3ltYm9sKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChrZXkyLT5zeW1ib2wpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0 ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrZXkyLT5zeW1ib2wpOyByZWdpc3RlciBpbnQg X19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo a2V5MS0+c3ltYm9sKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3Vs dCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKGtleTEtPnN5bWJvbCkpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+IDEg JiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopIChrZXkxLT5zeW1ib2wpKVsyXSAtIF9fczJbMl0pOyBpZiAoX19z MV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGtleTEtPnN5bWJvbCkpWzNdIC0gX19zMlszXSk7 IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoa2V5Mi0+c3ltYm9s KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoa2V5Mi0+c3ltYm9sKSArIDEpIC0gKHNpemVf dCkoY29uc3Qgdm9pZCAqKShrZXkyLT5zeW1ib2wpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxl biAoa2V5Mi0+c3ltYm9sKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAo a2V5MS0+c3ltYm9sKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoa2V5MS0+c3ltYm9sKSAr IDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShrZXkxLT5zeW1ib2wpID09IDEpID8gKF9fZXh0 ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKGtleTEtPnN5bWJvbCkpWzBdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKShrZXkyLT5zeW1ib2wpKVswXSk7IGlmIChf X3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChrZXkxLT5zeW1ib2wpKVsxXSAtICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGtleTItPnN5bWJvbCkpWzFd KTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGtleTEtPnN5bWJvbCkpWzJd IC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoa2V5Mi0+c3lt Ym9sKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0g KCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGtleTEtPnN5bWJv bCkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoa2V5 Mi0+c3ltYm9sKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9f Y29uc3QgdW5zaWduZWQgY2hhciAqX19zMSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoa2V5MS0+c3ltYm9sKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19z MVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGtleTIt PnN5bWJvbCkpWzBdOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1 bHQgPSAoX19zMVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKGtleTItPnN5bWJvbCkpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAw KSB7IF9fcmVzdWx0ID0gKF9fczFbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChrZXkyLT5zeW1ib2wpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19y ZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKGtleTItPnN5bWJvbCkpWzNdKTsgfSB9IF9fcmVzdWx0OyB9 KSkpIDogc3RyY21wIChrZXkxLT5zeW1ib2wsIGtleTItPnN5bWJvbCkpKSk7IH0pID09IDApOwp9 CgpzdGF0aWMgZ3VpbnQKZ19zY2FubmVyX2tleV9oYXNoIChnY29uc3Rwb2ludGVyIHYpCnsKICBj b25zdCBHU2Nhbm5lcktleSAqa2V5ID0gdjsKICBnY2hhciAqYzsKICBndWludCBoOwoKICBoID0g a2V5LT5zY29wZV9pZDsKICBmb3IgKGMgPSBrZXktPnN5bWJvbDsgKmM7IGMrKykKICAgIGggPSAo aCA8PCA1KSAtIGggKyAqYzsKCiAgcmV0dXJuIGg7Cn0KCnN0YXRpYyBpbmxpbmUgR1NjYW5uZXJL ZXkqCmdfc2Nhbm5lcl9sb29rdXBfaW50ZXJuYWwgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICBndWludCBzY29wZV9pZCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgZ2NoYXIgKnN5bWJvbCkKewogIEdTY2FubmVyS2V5ICprZXlfcDsKICBHU2Nh bm5lcktleSBrZXk7CgogIGtleS5zY29wZV9pZCA9IHNjb3BlX2lkOwoKICBpZiAoIXNjYW5uZXIt PmNvbmZpZy0+Y2FzZV9zZW5zaXRpdmUpCiAgICB7CiAgICAgIGdjaGFyICpkOwogICAgICBjb25z dCBnY2hhciAqYzsKCiAgICAgIGtleS5zeW1ib2wgPSAoKGdjaGFyICopIGdfbWFsbG9jICgoKGdz aXplKSBzaXplb2YgKGdjaGFyKSkgKiAoKGdzaXplKSAoc3RybGVuIChzeW1ib2wpICsgMSkpKSk7 CiAgICAgIGZvciAoZCA9IGtleS5zeW1ib2wsIGMgPSBzeW1ib2w7ICpjOyBjKyssIGQrKykKICAg ICAgICAqZCA9ICggKGd1Y2hhcikgKCAoICgoKGd1Y2hhcikoKmMpKT49J0EnICYmICgoZ3VjaGFy KSgqYykpPD0nWicpICogKCdhJy0nQScpICkgfCAoICgoKGd1Y2hhcikoKmMpKT49MTkyICYmICgo Z3VjaGFyKSgqYykpPD0yMTQpICogKDIyNC0xOTIpICkgfCAoICgoKGd1Y2hhcikoKmMpKT49MjE2 ICYmICgoZ3VjaGFyKSgqYykpPD0yMjIpICogKDI0OC0yMTYpICkgfCAoKGd1Y2hhcikoKmMpKSAp ICk7CiAgICAgICpkID0gMDsKICAgICAga2V5X3AgPSBnX2hhc2hfdGFibGVfbG9va3VwIChzY2Fu bmVyLT5zeW1ib2xfdGFibGUsICZrZXkpOwogICAgICBnX2ZyZWUgKGtleS5zeW1ib2wpOwogICAg fQogIGVsc2UKICAgIHsKICAgICAga2V5LnN5bWJvbCA9IChnY2hhciopIHN5bWJvbDsKICAgICAg a2V5X3AgPSBnX2hhc2hfdGFibGVfbG9va3VwIChzY2FubmVyLT5zeW1ib2xfdGFibGUsICZrZXkp OwogICAgfQoKICByZXR1cm4ga2V5X3A7Cn0KCnZvaWQKZ19zY2FubmVyX3Njb3BlX2FkZF9zeW1i b2wgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQg c2NvcGVfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqc3ltYm9s LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgdmFsdWUpCnsKICBHU2Nhbm5l cktleSAqa2V5OwoKICAodm9pZCkoeyBpZiAoX19idWlsdGluX2V4cGVjdCAoX19leHRlbnNpb25f XyAoeyBpbnQgX2dfYm9vbGVhbl92YXJfOyBpZiAoc2Nhbm5lciAhPSAoKHZvaWQgKikwKSkgX2df Ym9vbGVhbl92YXJfID0gMTsgZWxzZSBfZ19ib29sZWFuX3Zhcl8gPSAwOyBfZ19ib29sZWFuX3Zh cl87IH0pLCAxKSkgeyB9IGVsc2UgeyBnX2xvZyAoIkdMaWIiLCBHX0xPR19MRVZFTF9DUklUSUNB TCwgImZpbGUgJXM6IGxpbmUgJWQgKCVzKTogYXNzZXJ0aW9uIGAlcycgZmFpbGVkIiwgImdzY2Fu bmVyLmMiLCA0MTIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJzY2FubmVyICE9IE5VTEwiKTsgcmV0 dXJuOyB9OyB9KTsKICAodm9pZCkoeyBpZiAoX19idWlsdGluX2V4cGVjdCAoX19leHRlbnNpb25f XyAoeyBpbnQgX2dfYm9vbGVhbl92YXJfOyBpZiAoc3ltYm9sICE9ICgodm9pZCAqKTApKSBfZ19i b29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5fdmFy XzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FM LCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3NjYW5u ZXIuYyIsIDQxMywgX19QUkVUVFlfRlVOQ1RJT05fXywgInN5bWJvbCAhPSBOVUxMIik7IHJldHVy bjsgfTsgfSk7CgogIGtleSA9IGdfc2Nhbm5lcl9sb29rdXBfaW50ZXJuYWwgKHNjYW5uZXIsIHNj b3BlX2lkLCBzeW1ib2wpOwoKICBpZiAoIWtleSkKICAgIHsKICAgICAga2V5ID0gKChHU2Nhbm5l cktleSAqKSBnX21hbGxvYyAoKChnc2l6ZSkgc2l6ZW9mIChHU2Nhbm5lcktleSkpICogKChnc2l6 ZSkgKDEpKSkpOwogICAgICBrZXktPnNjb3BlX2lkID0gc2NvcGVfaWQ7CiAgICAgIGtleS0+c3lt Ym9sID0gZ19zdHJkdXAgKHN5bWJvbCk7CiAgICAgIGtleS0+dmFsdWUgPSB2YWx1ZTsKICAgICAg aWYgKCFzY2FubmVyLT5jb25maWctPmNhc2Vfc2Vuc2l0aXZlKQogICAgICAgIHsKICAgICAgICAg IGdjaGFyICpjOwoKICAgICAgICAgIGMgPSBrZXktPnN5bWJvbDsKICAgICAgICAgIHdoaWxlICgq YyAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKmMgPSAoIChndWNoYXIpICggKCAo KChndWNoYXIpKCpjKSk+PSdBJyAmJiAoKGd1Y2hhcikoKmMpKTw9J1onKSAqICgnYSctJ0EnKSAp IHwgKCAoKChndWNoYXIpKCpjKSk+PTE5MiAmJiAoKGd1Y2hhcikoKmMpKTw9MjE0KSAqICgyMjQt MTkyKSApIHwgKCAoKChndWNoYXIpKCpjKSk+PTIxNiAmJiAoKGd1Y2hhcikoKmMpKTw9MjIyKSAq ICgyNDgtMjE2KSApIHwgKChndWNoYXIpKCpjKSkgKSApOwogICAgICAgICAgICAgIGMrKzsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgZ19oYXNoX3RhYmxlX2luc2VydCAoc2Nhbm5lci0+ c3ltYm9sX3RhYmxlLCBrZXksIGtleSk7CiAgICB9CiAgZWxzZQogICAga2V5LT52YWx1ZSA9IHZh bHVlOwp9Cgp2b2lkCmdfc2Nhbm5lcl9zY29wZV9yZW1vdmVfc3ltYm9sIChHU2Nhbm5lciAqc2Nh bm5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHNjb3BlX2lkLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN5bWJvbCkKewogIEdTY2Fu bmVyS2V5ICprZXk7CgogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4dGVuc2lv bl9fICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9ICgodm9pZCAqKTApKSBf Z19ib29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5f dmFyXzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJ Q0FMLCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3Nj YW5uZXIuYyIsIDQ0NywgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5uZXIgIT0gTlVMTCIpOyBy ZXR1cm47IH07IH0pOwogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4dGVuc2lv bl9fICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzeW1ib2wgIT0gKCh2b2lkICopMCkpIF9n X2Jvb2xlYW5fdmFyXyA9IDE7IGVsc2UgX2dfYm9vbGVhbl92YXJfID0gMDsgX2dfYm9vbGVhbl92 YXJfOyB9KSwgMSkpIHsgfSBlbHNlIHsgZ19sb2cgKCJHTGliIiwgR19MT0dfTEVWRUxfQ1JJVElD QUwsICJmaWxlICVzOiBsaW5lICVkICglcyk6IGFzc2VydGlvbiBgJXMnIGZhaWxlZCIsICJnc2Nh bm5lci5jIiwgNDQ4LCBfX1BSRVRUWV9GVU5DVElPTl9fLCAic3ltYm9sICE9IE5VTEwiKTsgcmV0 dXJuOyB9OyB9KTsKCiAga2V5ID0gZ19zY2FubmVyX2xvb2t1cF9pbnRlcm5hbCAoc2Nhbm5lciwg c2NvcGVfaWQsIHN5bWJvbCk7CgogIGlmIChrZXkpCiAgICB7CiAgICAgIGdfaGFzaF90YWJsZV9y ZW1vdmUgKHNjYW5uZXItPnN5bWJvbF90YWJsZSwga2V5KTsKICAgICAgZ19mcmVlIChrZXktPnN5 bWJvbCk7CiAgICAgIGdfZnJlZSAoa2V5KTsKICAgIH0KfQoKZ3BvaW50ZXIKZ19zY2FubmVyX2xv b2t1cF9zeW1ib2wgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgZ2NoYXIgKnN5bWJvbCkKewogIEdTY2FubmVyS2V5ICprZXk7CiAgZ3VpbnQgc2NvcGVf aWQ7CgogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4dGVuc2lvbl9fICh7IGlu dCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9ICgodm9pZCAqKTApKSBfZ19ib29sZWFu X3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5fdmFyXzsgfSks IDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FMLCAiZmls ZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3NjYW5uZXIuYyIs IDQ2NywgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5uZXIgIT0gTlVMTCIpOyByZXR1cm4gKCgo dm9pZCAqKTApKTsgfTsgfSk7CgogIGlmICghc3ltYm9sKQogICAgcmV0dXJuICgodm9pZCAqKTAp OwoKICBzY29wZV9pZCA9IHNjYW5uZXItPnNjb3BlX2lkOwogIGtleSA9IGdfc2Nhbm5lcl9sb29r dXBfaW50ZXJuYWwgKHNjYW5uZXIsIHNjb3BlX2lkLCBzeW1ib2wpOwogIGlmICgha2V5ICYmIHNj b3BlX2lkICYmIHNjYW5uZXItPmNvbmZpZy0+c2NvcGVfMF9mYWxsYmFjaykKICAgIGtleSA9IGdf c2Nhbm5lcl9sb29rdXBfaW50ZXJuYWwgKHNjYW5uZXIsIDAsIHN5bWJvbCk7CgogIGlmIChrZXkp CiAgICByZXR1cm4ga2V5LT52YWx1ZTsKICBlbHNlCiAgICByZXR1cm4gKCh2b2lkICopMCk7Cn0K Cmdwb2ludGVyCmdfc2Nhbm5lcl9zY29wZV9sb29rdXBfc3ltYm9sIChHU2Nhbm5lciAqc2Nhbm5l ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHNjb3BlX2lkLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN5bWJvbCkKewogIEdTY2FubmVy S2V5ICprZXk7CgogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4dGVuc2lvbl9f ICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9ICgodm9pZCAqKTApKSBfZ19i b29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5fdmFy XzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FM LCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3NjYW5u ZXIuYyIsIDQ5MCwgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5uZXIgIT0gTlVMTCIpOyByZXR1 cm4gKCgodm9pZCAqKTApKTsgfTsgfSk7CgogIGlmICghc3ltYm9sKQogICAgcmV0dXJuICgodm9p ZCAqKTApOwoKICBrZXkgPSBnX3NjYW5uZXJfbG9va3VwX2ludGVybmFsIChzY2FubmVyLCBzY29w ZV9pZCwgc3ltYm9sKTsKCiAgaWYgKGtleSkKICAgIHJldHVybiBrZXktPnZhbHVlOwogIGVsc2UK ICAgIHJldHVybiAoKHZvaWQgKikwKTsKfQoKZ3VpbnQKZ19zY2FubmVyX3NldF9zY29wZSAoR1Nj YW5uZXIgKnNjYW5uZXIsCiAgICAgICAgICAgICAgICAgICAgIGd1aW50IHNjb3BlX2lkKQp7CiAg Z3VpbnQgb2xkX3Njb3BlX2lkOwoKICAodm9pZCkoeyBpZiAoX19idWlsdGluX2V4cGVjdCAoX19l eHRlbnNpb25fXyAoeyBpbnQgX2dfYm9vbGVhbl92YXJfOyBpZiAoc2Nhbm5lciAhPSAoKHZvaWQg KikwKSkgX2dfYm9vbGVhbl92YXJfID0gMTsgZWxzZSBfZ19ib29sZWFuX3Zhcl8gPSAwOyBfZ19i b29sZWFuX3Zhcl87IH0pLCAxKSkgeyB9IGVsc2UgeyBnX2xvZyAoIkdMaWIiLCBHX0xPR19MRVZF TF9DUklUSUNBTCwgImZpbGUgJXM6IGxpbmUgJWQgKCVzKTogYXNzZXJ0aW9uIGAlcycgZmFpbGVk IiwgImdzY2FubmVyLmMiLCA1MDksIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJzY2FubmVyICE9IE5V TEwiKTsgcmV0dXJuICgwKTsgfTsgfSk7CgogIG9sZF9zY29wZV9pZCA9IHNjYW5uZXItPnNjb3Bl X2lkOwogIHNjYW5uZXItPnNjb3BlX2lkID0gc2NvcGVfaWQ7CgogIHJldHVybiBvbGRfc2NvcGVf aWQ7Cn0KCnN0YXRpYyB2b2lkCmdfc2Nhbm5lcl9mb3JlYWNoX2ludGVybmFsIChncG9pbnRlciBf a2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgX3ZhbHVlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgX3VzZXJfZGF0YSkKewogIEdTY2FubmVyS2V5 ICprZXk7CiAgZ3BvaW50ZXIgKmQ7CiAgR0hGdW5jIGZ1bmM7CiAgZ3BvaW50ZXIgdXNlcl9kYXRh OwogIGd1aW50ICpzY29wZV9pZDsKCiAgZCA9IF91c2VyX2RhdGE7CiAgZnVuYyA9IChHSEZ1bmMp IGRbMF07CiAgdXNlcl9kYXRhID0gZFsxXTsKICBzY29wZV9pZCA9IGRbMl07CiAga2V5ID0gX3Zh bHVlOwoKICBpZiAoa2V5LT5zY29wZV9pZCA9PSAqc2NvcGVfaWQpCiAgICBmdW5jIChrZXktPnN5 bWJvbCwga2V5LT52YWx1ZSwgdXNlcl9kYXRhKTsKfQoKdm9pZApnX3NjYW5uZXJfc2NvcGVfZm9y ZWFjaF9zeW1ib2wgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGd1aW50IHNjb3BlX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdI RnVuYyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIHVzZXJf ZGF0YSkKewogIGdwb2ludGVyIGRbM107CgogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0 IChfX2V4dGVuc2lvbl9fICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9ICgo dm9pZCAqKTApKSBfZ19ib29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7 IF9nX2Jvb2xlYW5fdmFyXzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9H X0xFVkVMX0NSSVRJQ0FMLCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBm YWlsZWQiLCAiZ3NjYW5uZXIuYyIsIDU0NiwgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5uZXIg IT0gTlVMTCIpOyByZXR1cm47IH07IH0pOwoKICBkWzBdID0gKGdwb2ludGVyKSBmdW5jOwogIGRb MV0gPSB1c2VyX2RhdGE7CiAgZFsyXSA9ICZzY29wZV9pZDsKCiAgZ19oYXNoX3RhYmxlX2ZvcmVh Y2ggKHNjYW5uZXItPnN5bWJvbF90YWJsZSwgZ19zY2FubmVyX2ZvcmVhY2hfaW50ZXJuYWwsIGQp Owp9CgpHVG9rZW5UeXBlCmdfc2Nhbm5lcl9wZWVrX25leHRfdG9rZW4gKEdTY2FubmVyICpzY2Fu bmVyKQp7CiAgKHZvaWQpKHsgaWYgKF9fYnVpbHRpbl9leHBlY3QgKF9fZXh0ZW5zaW9uX18gKHsg aW50IF9nX2Jvb2xlYW5fdmFyXzsgaWYgKHNjYW5uZXIgIT0gKCh2b2lkICopMCkpIF9nX2Jvb2xl YW5fdmFyXyA9IDE7IGVsc2UgX2dfYm9vbGVhbl92YXJfID0gMDsgX2dfYm9vbGVhbl92YXJfOyB9 KSwgMSkpIHsgfSBlbHNlIHsgZ19sb2cgKCJHTGliIiwgR19MT0dfTEVWRUxfQ1JJVElDQUwsICJm aWxlICVzOiBsaW5lICVkICglcyk6IGFzc2VydGlvbiBgJXMnIGZhaWxlZCIsICJnc2Nhbm5lci5j IiwgNTU4LCBfX1BSRVRUWV9GVU5DVElPTl9fLCAic2Nhbm5lciAhPSBOVUxMIik7IHJldHVybiAo R19UT0tFTl9FT0YpOyB9OyB9KTsKCiAgaWYgKHNjYW5uZXItPm5leHRfdG9rZW4gPT0gR19UT0tF Tl9OT05FKQogICAgewogICAgICBzY2FubmVyLT5uZXh0X2xpbmUgPSBzY2FubmVyLT5saW5lOwog ICAgICBzY2FubmVyLT5uZXh0X3Bvc2l0aW9uID0gc2Nhbm5lci0+cG9zaXRpb247CiAgICAgIGdf c2Nhbm5lcl9nZXRfdG9rZW5faSAoc2Nhbm5lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmc2Nhbm5lci0+bmV4dF90b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Nh bm5lci0+bmV4dF92YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Nhbm5lci0+ bmV4dF9saW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzY2FubmVyLT5uZXh0X3Bv c2l0aW9uKTsKICAgIH0KCiAgcmV0dXJuIHNjYW5uZXItPm5leHRfdG9rZW47Cn0KCkdUb2tlblR5 cGUKZ19zY2FubmVyX2dldF9uZXh0X3Rva2VuIChHU2Nhbm5lciAqc2Nhbm5lcikKewogICh2b2lk KSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4dGVuc2lvbl9fICh7IGludCBfZ19ib29sZWFu X3Zhcl87IGlmIChzY2FubmVyICE9ICgodm9pZCAqKTApKSBfZ19ib29sZWFuX3Zhcl8gPSAxOyBl bHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5fdmFyXzsgfSksIDEpKSB7IH0gZWxz ZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FMLCAiZmlsZSAlczogbGluZSAl ZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3NjYW5uZXIuYyIsIDU3NywgX19QUkVU VFlfRlVOQ1RJT05fXywgInNjYW5uZXIgIT0gTlVMTCIpOyByZXR1cm4gKEdfVE9LRU5fRU9GKTsg fTsgfSk7CgogIGlmIChzY2FubmVyLT5uZXh0X3Rva2VuICE9IEdfVE9LRU5fTk9ORSkKICAgIHsK ICAgICAgZ19zY2FubmVyX2ZyZWVfdmFsdWUgKCZzY2FubmVyLT50b2tlbiwgJnNjYW5uZXItPnZh bHVlKTsKCiAgICAgIHNjYW5uZXItPnRva2VuID0gc2Nhbm5lci0+bmV4dF90b2tlbjsKICAgICAg c2Nhbm5lci0+dmFsdWUgPSBzY2FubmVyLT5uZXh0X3ZhbHVlOwogICAgICBzY2FubmVyLT5saW5l ID0gc2Nhbm5lci0+bmV4dF9saW5lOwogICAgICBzY2FubmVyLT5wb3NpdGlvbiA9IHNjYW5uZXIt Pm5leHRfcG9zaXRpb247CiAgICAgIHNjYW5uZXItPm5leHRfdG9rZW4gPSBHX1RPS0VOX05PTkU7 CiAgICB9CiAgZWxzZQogICAgZ19zY2FubmVyX2dldF90b2tlbl9pIChzY2FubmVyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAmc2Nhbm5lci0+dG9rZW4sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICZzY2FubmVyLT52YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNjYW5u ZXItPmxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZzY2FubmVyLT5wb3NpdGlvbik7 CgogIHJldHVybiBzY2FubmVyLT50b2tlbjsKfQoKR1Rva2VuVHlwZQpnX3NjYW5uZXJfY3VyX3Rv a2VuIChHU2Nhbm5lciAqc2Nhbm5lcikKewogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0 IChfX2V4dGVuc2lvbl9fICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9ICgo dm9pZCAqKTApKSBfZ19ib29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7 IF9nX2Jvb2xlYW5fdmFyXzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9H X0xFVkVMX0NSSVRJQ0FMLCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBm YWlsZWQiLCAiZ3NjYW5uZXIuYyIsIDYwMiwgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5uZXIg IT0gTlVMTCIpOyByZXR1cm4gKEdfVE9LRU5fRU9GKTsgfTsgfSk7CgogIHJldHVybiBzY2FubmVy LT50b2tlbjsKfQoKR1Rva2VuVmFsdWUKZ19zY2FubmVyX2N1cl92YWx1ZSAoR1NjYW5uZXIgKnNj YW5uZXIpCnsKICBHVG9rZW5WYWx1ZSB2OwoKICB2LnZfaW50NjQgPSAwOwoKICAodm9pZCkoeyBp ZiAoX19idWlsdGluX2V4cGVjdCAoX19leHRlbnNpb25fXyAoeyBpbnQgX2dfYm9vbGVhbl92YXJf OyBpZiAoc2Nhbm5lciAhPSAoKHZvaWQgKikwKSkgX2dfYm9vbGVhbl92YXJfID0gMTsgZWxzZSBf Z19ib29sZWFuX3Zhcl8gPSAwOyBfZ19ib29sZWFuX3Zhcl87IH0pLCAxKSkgeyB9IGVsc2UgeyBn X2xvZyAoIkdMaWIiLCBHX0xPR19MRVZFTF9DUklUSUNBTCwgImZpbGUgJXM6IGxpbmUgJWQgKCVz KTogYXNzZXJ0aW9uIGAlcycgZmFpbGVkIiwgImdzY2FubmVyLmMiLCA2MTQsIF9fUFJFVFRZX0ZV TkNUSU9OX18sICJzY2FubmVyICE9IE5VTEwiKTsgcmV0dXJuICh2KTsgfTsgfSk7CgoKCiAgdiA9 IHNjYW5uZXItPnZhbHVlOwoKICByZXR1cm4gdjsKfQoKZ3VpbnQKZ19zY2FubmVyX2N1cl9saW5l IChHU2Nhbm5lciAqc2Nhbm5lcikKewogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChf X2V4dGVuc2lvbl9fICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9ICgodm9p ZCAqKTApKSBfZ19ib29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9n X2Jvb2xlYW5fdmFyXzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xF VkVMX0NSSVRJQ0FMLCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWls ZWQiLCAiZ3NjYW5uZXIuYyIsIDYyNiwgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5uZXIgIT0g TlVMTCIpOyByZXR1cm4gKDApOyB9OyB9KTsKCiAgcmV0dXJuIHNjYW5uZXItPmxpbmU7Cn0KCmd1 aW50Cmdfc2Nhbm5lcl9jdXJfcG9zaXRpb24gKEdTY2FubmVyICpzY2FubmVyKQp7CiAgKHZvaWQp KHsgaWYgKF9fYnVpbHRpbl9leHBlY3QgKF9fZXh0ZW5zaW9uX18gKHsgaW50IF9nX2Jvb2xlYW5f dmFyXzsgaWYgKHNjYW5uZXIgIT0gKCh2b2lkICopMCkpIF9nX2Jvb2xlYW5fdmFyXyA9IDE7IGVs c2UgX2dfYm9vbGVhbl92YXJfID0gMDsgX2dfYm9vbGVhbl92YXJfOyB9KSwgMSkpIHsgfSBlbHNl IHsgZ19sb2cgKCJHTGliIiwgR19MT0dfTEVWRUxfQ1JJVElDQUwsICJmaWxlICVzOiBsaW5lICVk ICglcyk6IGFzc2VydGlvbiBgJXMnIGZhaWxlZCIsICJnc2Nhbm5lci5jIiwgNjM0LCBfX1BSRVRU WV9GVU5DVElPTl9fLCAic2Nhbm5lciAhPSBOVUxMIik7IHJldHVybiAoMCk7IH07IH0pOwoKICBy ZXR1cm4gc2Nhbm5lci0+cG9zaXRpb247Cn0KCmdib29sZWFuCmdfc2Nhbm5lcl9lb2YgKEdTY2Fu bmVyICpzY2FubmVyKQp7CiAgKHZvaWQpKHsgaWYgKF9fYnVpbHRpbl9leHBlY3QgKF9fZXh0ZW5z aW9uX18gKHsgaW50IF9nX2Jvb2xlYW5fdmFyXzsgaWYgKHNjYW5uZXIgIT0gKCh2b2lkICopMCkp IF9nX2Jvb2xlYW5fdmFyXyA9IDE7IGVsc2UgX2dfYm9vbGVhbl92YXJfID0gMDsgX2dfYm9vbGVh bl92YXJfOyB9KSwgMSkpIHsgfSBlbHNlIHsgZ19sb2cgKCJHTGliIiwgR19MT0dfTEVWRUxfQ1JJ VElDQUwsICJmaWxlICVzOiBsaW5lICVkICglcyk6IGFzc2VydGlvbiBgJXMnIGZhaWxlZCIsICJn c2Nhbm5lci5jIiwgNjQyLCBfX1BSRVRUWV9GVU5DVElPTl9fLCAic2Nhbm5lciAhPSBOVUxMIik7 IHJldHVybiAoKCEoMCkpKTsgfTsgfSk7CgogIHJldHVybiBzY2FubmVyLT50b2tlbiA9PSBHX1RP S0VOX0VPRiB8fCBzY2FubmVyLT50b2tlbiA9PSBHX1RPS0VOX0VSUk9SOwp9Cgp2b2lkCmdfc2Nh bm5lcl9pbnB1dF9maWxlIChHU2Nhbm5lciAqc2Nhbm5lciwKICAgICAgICAgICAgICAgICAgICAg IGdpbnQgaW5wdXRfZmQpCnsKICAodm9pZCkoeyBpZiAoX19idWlsdGluX2V4cGVjdCAoX19leHRl bnNpb25fXyAoeyBpbnQgX2dfYm9vbGVhbl92YXJfOyBpZiAoc2Nhbm5lciAhPSAoKHZvaWQgKikw KSkgX2dfYm9vbGVhbl92YXJfID0gMTsgZWxzZSBfZ19ib29sZWFuX3Zhcl8gPSAwOyBfZ19ib29s ZWFuX3Zhcl87IH0pLCAxKSkgeyB9IGVsc2UgeyBnX2xvZyAoIkdMaWIiLCBHX0xPR19MRVZFTF9D UklUSUNBTCwgImZpbGUgJXM6IGxpbmUgJWQgKCVzKTogYXNzZXJ0aW9uIGAlcycgZmFpbGVkIiwg ImdzY2FubmVyLmMiLCA2NTEsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJzY2FubmVyICE9IE5VTEwi KTsgcmV0dXJuOyB9OyB9KTsKICAodm9pZCkoeyBpZiAoX19idWlsdGluX2V4cGVjdCAoX19leHRl bnNpb25fXyAoeyBpbnQgX2dfYm9vbGVhbl92YXJfOyBpZiAoaW5wdXRfZmQgPj0gMCkgX2dfYm9v bGVhbl92YXJfID0gMTsgZWxzZSBfZ19ib29sZWFuX3Zhcl8gPSAwOyBfZ19ib29sZWFuX3Zhcl87 IH0pLCAxKSkgeyB9IGVsc2UgeyBnX2xvZyAoIkdMaWIiLCBHX0xPR19MRVZFTF9DUklUSUNBTCwg ImZpbGUgJXM6IGxpbmUgJWQgKCVzKTogYXNzZXJ0aW9uIGAlcycgZmFpbGVkIiwgImdzY2FubmVy LmMiLCA2NTIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJpbnB1dF9mZCA+PSAwIik7IHJldHVybjsg fTsgfSk7CgogIGlmIChzY2FubmVyLT5pbnB1dF9mZCA+PSAwKQogICAgZ19zY2FubmVyX3N5bmNf ZmlsZV9vZmZzZXQgKHNjYW5uZXIpOwoKICBzY2FubmVyLT50b2tlbiA9IEdfVE9LRU5fTk9ORTsK ICBzY2FubmVyLT52YWx1ZS52X2ludDY0ID0gMDsKICBzY2FubmVyLT5saW5lID0gMTsKICBzY2Fu bmVyLT5wb3NpdGlvbiA9IDA7CiAgc2Nhbm5lci0+bmV4dF90b2tlbiA9IEdfVE9LRU5fTk9ORTsK CiAgc2Nhbm5lci0+aW5wdXRfZmQgPSBpbnB1dF9mZDsKICBzY2FubmVyLT50ZXh0ID0gKCh2b2lk ICopMCk7CiAgc2Nhbm5lci0+dGV4dF9lbmQgPSAoKHZvaWQgKikwKTsKCiAgaWYgKCFzY2FubmVy LT5idWZmZXIpCiAgICBzY2FubmVyLT5idWZmZXIgPSAoKGdjaGFyICopIGdfbWFsbG9jICgoKGdz aXplKSBzaXplb2YgKGdjaGFyKSkgKiAoKGdzaXplKSAoKDQwMDApICsgMSkpKSk7Cn0KCnZvaWQK Z19zY2FubmVyX2lucHV0X3RleHQgKEdTY2FubmVyICpzY2FubmVyLAogICAgICAgICAgICAgICAg ICAgICAgY29uc3QgZ2NoYXIgKnRleHQsCiAgICAgICAgICAgICAgICAgICAgICBndWludCB0ZXh0 X2xlbikKewogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4dGVuc2lvbl9fICh7 IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9ICgodm9pZCAqKTApKSBfZ19ib29s ZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5fdmFyXzsg fSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FMLCAi ZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3NjYW5uZXIu YyIsIDY3NiwgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5uZXIgIT0gTlVMTCIpOyByZXR1cm47 IH07IH0pOwogIGlmICh0ZXh0X2xlbikKICAgICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0 IChfX2V4dGVuc2lvbl9fICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmICh0ZXh0ICE9ICgodm9p ZCAqKTApKSBfZ19ib29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9n X2Jvb2xlYW5fdmFyXzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xF VkVMX0NSSVRJQ0FMLCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWls ZWQiLCAiZ3NjYW5uZXIuYyIsIDY3OCwgX19QUkVUVFlfRlVOQ1RJT05fXywgInRleHQgIT0gTlVM TCIpOyByZXR1cm47IH07IH0pOwogIGVsc2UKICAgIHRleHQgPSAoKHZvaWQgKikwKTsKCiAgaWYg KHNjYW5uZXItPmlucHV0X2ZkID49IDApCiAgICBnX3NjYW5uZXJfc3luY19maWxlX29mZnNldCAo c2Nhbm5lcik7CgogIHNjYW5uZXItPnRva2VuID0gR19UT0tFTl9OT05FOwogIHNjYW5uZXItPnZh bHVlLnZfaW50NjQgPSAwOwogIHNjYW5uZXItPmxpbmUgPSAxOwogIHNjYW5uZXItPnBvc2l0aW9u ID0gMDsKICBzY2FubmVyLT5uZXh0X3Rva2VuID0gR19UT0tFTl9OT05FOwoKICBzY2FubmVyLT5p bnB1dF9mZCA9IC0xOwogIHNjYW5uZXItPnRleHQgPSB0ZXh0OwogIHNjYW5uZXItPnRleHRfZW5k ID0gdGV4dCArIHRleHRfbGVuOwoKICBpZiAoc2Nhbm5lci0+YnVmZmVyKQogICAgewogICAgICBn X2ZyZWUgKHNjYW5uZXItPmJ1ZmZlcik7CiAgICAgIHNjYW5uZXItPmJ1ZmZlciA9ICgodm9pZCAq KTApOwogICAgfQp9CgpzdGF0aWMgZ3VjaGFyCmdfc2Nhbm5lcl9wZWVrX25leHRfY2hhciAoR1Nj YW5uZXIgKnNjYW5uZXIpCnsKICBpZiAoc2Nhbm5lci0+dGV4dCA8IHNjYW5uZXItPnRleHRfZW5k KQogICAgewogICAgICByZXR1cm4gKnNjYW5uZXItPnRleHQ7CiAgICB9CiAgZWxzZSBpZiAoc2Nh bm5lci0+aW5wdXRfZmQgPj0gMCkKICAgIHsKICAgICAgZ2ludCBjb3VudDsKICAgICAgZ2NoYXIg KmJ1ZmZlcjsKCiAgICAgIGJ1ZmZlciA9IHNjYW5uZXItPmJ1ZmZlcjsKICAgICAgZG8KICAgICAg ICB7CiAgICAgICAgICBjb3VudCA9IHJlYWQgKHNjYW5uZXItPmlucHV0X2ZkLCBidWZmZXIsICg0 MDAwKSk7CiAgICAgICAgfQogICAgICB3aGlsZSAoY291bnQgPT0gLTEgJiYgKCgqX19lcnJub19s b2NhdGlvbiAoKSkgPT0gNCB8fCAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDExKSk7CgogICAg ICBpZiAoY291bnQgPCAxKQogICAgICAgIHsKICAgICAgICAgIHNjYW5uZXItPmlucHV0X2ZkID0g LTE7CgogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewog ICAgICAgICAgc2Nhbm5lci0+dGV4dCA9IGJ1ZmZlcjsKICAgICAgICAgIHNjYW5uZXItPnRleHRf ZW5kID0gYnVmZmVyICsgY291bnQ7CgogICAgICAgICAgcmV0dXJuICpidWZmZXI7CiAgICAgICAg fQogICAgfQogIGVsc2UKICAgIHJldHVybiAwOwp9Cgp2b2lkCmdfc2Nhbm5lcl9zeW5jX2ZpbGVf b2Zmc2V0IChHU2Nhbm5lciAqc2Nhbm5lcikKewogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhw ZWN0IChfX2V4dGVuc2lvbl9fICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9 ICgodm9pZCAqKTApKSBfZ19ib29sZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9 IDA7IF9nX2Jvb2xlYW5fdmFyXzsgfSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdf TE9HX0xFVkVMX0NSSVRJQ0FMLCAiZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVz JyBmYWlsZWQiLCAiZ3NjYW5uZXIuYyIsIDc0MiwgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5u ZXIgIT0gTlVMTCIpOyByZXR1cm47IH07IH0pOwoKCgoKCgoKICBpZiAoc2Nhbm5lci0+aW5wdXRf ZmQgPj0gMCAmJiBzY2FubmVyLT50ZXh0X2VuZCA+IHNjYW5uZXItPnRleHQpCiAgICB7CiAgICAg IGdpbnQgYnVmZmVyZWQ7CgogICAgICBidWZmZXJlZCA9IHNjYW5uZXItPnRleHRfZW5kIC0gc2Nh bm5lci0+dGV4dDsKICAgICAgaWYgKGxzZWVrIChzY2FubmVyLT5pbnB1dF9mZCwgLSBidWZmZXJl ZCwgMSkgPj0gMCkKICAgICAgICB7CgogICAgICAgICAgc2Nhbm5lci0+dGV4dCA9ICgodm9pZCAq KTApOwogICAgICAgICAgc2Nhbm5lci0+dGV4dF9lbmQgPSAoKHZvaWQgKikwKTsKICAgICAgICB9 CiAgICAgIGVsc2UKICAgICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAgIH0KfQoK c3RhdGljIGd1Y2hhcgpnX3NjYW5uZXJfZ2V0X2NoYXIgKEdTY2FubmVyICpzY2FubmVyLAogICAg ICAgICAgICAgICAgICAgIGd1aW50ICpsaW5lX3AsCiAgICAgICAgICAgICAgICAgICAgZ3VpbnQg KnBvc2l0aW9uX3ApCnsKICBndWNoYXIgZmNoYXI7CgogIGlmIChzY2FubmVyLT50ZXh0IDwgc2Nh bm5lci0+dGV4dF9lbmQpCiAgICBmY2hhciA9ICooc2Nhbm5lci0+dGV4dCsrKTsKICBlbHNlIGlm IChzY2FubmVyLT5pbnB1dF9mZCA+PSAwKQogICAgewogICAgICBnaW50IGNvdW50OwogICAgICBn Y2hhciAqYnVmZmVyOwoKICAgICAgYnVmZmVyID0gc2Nhbm5lci0+YnVmZmVyOwogICAgICBkbwog ICAgICAgIHsKICAgICAgICAgIGNvdW50ID0gcmVhZCAoc2Nhbm5lci0+aW5wdXRfZmQsIGJ1ZmZl ciwgKDQwMDApKTsKICAgICAgICB9CiAgICAgIHdoaWxlIChjb3VudCA9PSAtMSAmJiAoKCpfX2Vy cm5vX2xvY2F0aW9uICgpKSA9PSA0IHx8ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMTEpKTsK CiAgICAgIGlmIChjb3VudCA8IDEpCiAgICAgICAgewogICAgICAgICAgc2Nhbm5lci0+aW5wdXRf ZmQgPSAtMTsKICAgICAgICAgIGZjaGFyID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAg ICB7CiAgICAgICAgICBzY2FubmVyLT50ZXh0ID0gYnVmZmVyICsgMTsKICAgICAgICAgIHNjYW5u ZXItPnRleHRfZW5kID0gYnVmZmVyICsgY291bnQ7CiAgICAgICAgICBmY2hhciA9ICpidWZmZXI7 CiAgICAgICAgICBpZiAoIWZjaGFyKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZ19zY2Fu bmVyX3N5bmNfZmlsZV9vZmZzZXQgKHNjYW5uZXIpOwogICAgICAgICAgICAgIHNjYW5uZXItPnRl eHRfZW5kID0gc2Nhbm5lci0+dGV4dDsKICAgICAgICAgICAgICBzY2FubmVyLT5pbnB1dF9mZCA9 IC0xOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogIGVsc2UKICAgIGZjaGFyID0gMDsK CiAgaWYgKGZjaGFyID09ICdcbicpCiAgICB7CiAgICAgICgqcG9zaXRpb25fcCkgPSAwOwogICAg ICAoKmxpbmVfcCkrKzsKICAgIH0KICBlbHNlIGlmIChmY2hhcikKICAgIHsKICAgICAgKCpwb3Np dGlvbl9wKSsrOwogICAgfQoKICByZXR1cm4gZmNoYXI7Cn0KCnZvaWQKZ19zY2FubmVyX3VuZXhw X3Rva2VuIChHU2Nhbm5lciAqc2Nhbm5lciwKICAgICAgICAgICAgICAgICAgICAgICBHVG9rZW5U eXBlIGV4cGVjdGVkX3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpp ZGVudGlmaWVyX3NwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnN5bWJv bF9zcGVjLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICpzeW1ib2xfbmFtZSwK ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqbWVzc2FnZSwKICAgICAgICAgICAg ICAgICAgICAgICBnaW50IGlzX2Vycm9yKQp7CiAgZ2NoYXIgKnRva2VuX3N0cmluZzsKICBndWlu dCB0b2tlbl9zdHJpbmdfbGVuOwogIGdjaGFyICpleHBlY3RlZF9zdHJpbmc7CiAgZ3VpbnQgZXhw ZWN0ZWRfc3RyaW5nX2xlbjsKICBnY2hhciAqbWVzc2FnZV9wcmVmaXg7CiAgZ2Jvb2xlYW4gcHJp bnRfdW5leHA7CiAgdm9pZCAoKm1zZ19oYW5kbGVyKSAoR1NjYW5uZXIqLCBjb25zdCBnY2hhcios IC4uLik7CgogICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4dGVuc2lvbl9fICh7 IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChzY2FubmVyICE9ICgodm9pZCAqKTApKSBfZ19ib29s ZWFuX3Zhcl8gPSAxOyBlbHNlIF9nX2Jvb2xlYW5fdmFyXyA9IDA7IF9nX2Jvb2xlYW5fdmFyXzsg fSksIDEpKSB7IH0gZWxzZSB7IGdfbG9nICgiR0xpYiIsIEdfTE9HX0xFVkVMX0NSSVRJQ0FMLCAi ZmlsZSAlczogbGluZSAlZCAoJXMpOiBhc3NlcnRpb24gYCVzJyBmYWlsZWQiLCAiZ3NjYW5uZXIu YyIsIDgzOCwgX19QUkVUVFlfRlVOQ1RJT05fXywgInNjYW5uZXIgIT0gTlVMTCIpOyByZXR1cm47 IH07IH0pOwoKICBpZiAoaXNfZXJyb3IpCiAgICBtc2dfaGFuZGxlciA9IGdfc2Nhbm5lcl9lcnJv cjsKICBlbHNlCiAgICBtc2dfaGFuZGxlciA9IGdfc2Nhbm5lcl93YXJuOwoKICBpZiAoIWlkZW50 aWZpZXJfc3BlYykKICAgIGlkZW50aWZpZXJfc3BlYyA9ICJpZGVudGlmaWVyIjsKICBpZiAoIXN5 bWJvbF9zcGVjKQogICAgc3ltYm9sX3NwZWMgPSAic3ltYm9sIjsKCiAgdG9rZW5fc3RyaW5nX2xl biA9IDU2OwogIHRva2VuX3N0cmluZyA9ICgoZ2NoYXIgKikgZ19tYWxsb2MgKCgoZ3NpemUpIHNp emVvZiAoZ2NoYXIpKSAqICgoZ3NpemUpICh0b2tlbl9zdHJpbmdfbGVuICsgMSkpKSk7CiAgZXhw ZWN0ZWRfc3RyaW5nX2xlbiA9IDY0OwogIGV4cGVjdGVkX3N0cmluZyA9ICgoZ2NoYXIgKikgZ19t YWxsb2MgKCgoZ3NpemUpIHNpemVvZiAoZ2NoYXIpKSAqICgoZ3NpemUpIChleHBlY3RlZF9zdHJp bmdfbGVuICsgMSkpKSk7CiAgcHJpbnRfdW5leHAgPSAoISgwKSk7CgogIHN3aXRjaCAoc2Nhbm5l ci0+dG9rZW4pCiAgICB7CiAgICBjYXNlIEdfVE9LRU5fRU9GOgogICAgICBzbnByaW50ZiAodG9r ZW5fc3RyaW5nLCB0b2tlbl9zdHJpbmdfbGVuLCAiZW5kIG9mIGZpbGUiKTsKICAgICAgYnJlYWs7 CgogICAgZGVmYXVsdDoKICAgICAgaWYgKHNjYW5uZXItPnRva2VuID49IDEgJiYgc2Nhbm5lci0+ dG9rZW4gPD0gMjU1KQogICAgICAgIHsKICAgICAgICAgIGlmICgoc2Nhbm5lci0+dG9rZW4gPj0g JyAnICYmIHNjYW5uZXItPnRva2VuIDw9ICd+JykgfHwKICAgICAgICAgICAgICAoX19leHRlbnNp b25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKHNjYW5uZXItPnRva2VuKSAmJiAoc2Nhbm5lci0+ dG9rZW4pID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAoc2Nhbm5lci0+Y29uZmlnLT5j c2V0X2lkZW50aWZpZXJfZmlyc3QsIHNjYW5uZXItPnRva2VuKSA6IHN0cmNociAoc2Nhbm5lci0+ Y29uZmlnLT5jc2V0X2lkZW50aWZpZXJfZmlyc3QsIHNjYW5uZXItPnRva2VuKSkpIHx8CiAgICAg ICAgICAgICAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzY2FubmVyLT50 b2tlbikgJiYgKHNjYW5uZXItPnRva2VuKSA9PSAnXDAnID8gKGNoYXIgKikgX19yYXdtZW1jaHIg KHNjYW5uZXItPmNvbmZpZy0+Y3NldF9pZGVudGlmaWVyX250aCwgc2Nhbm5lci0+dG9rZW4pIDog c3RyY2hyIChzY2FubmVyLT5jb25maWctPmNzZXRfaWRlbnRpZmllcl9udGgsIHNjYW5uZXItPnRv a2VuKSkpKQogICAgICAgICAgICBzbnByaW50ZiAodG9rZW5fc3RyaW5nLCB0b2tlbl9zdHJpbmdf bGVuLCAiY2hhcmFjdGVyIGAlYyciLCBzY2FubmVyLT50b2tlbik7CiAgICAgICAgICBlbHNlCiAg ICAgICAgICAgIHNucHJpbnRmICh0b2tlbl9zdHJpbmcsIHRva2VuX3N0cmluZ19sZW4sICJjaGFy YWN0ZXIgYFxcJW8nIiwgc2Nhbm5lci0+dG9rZW4pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAg fQogICAgICBlbHNlIGlmICghc2Nhbm5lci0+Y29uZmlnLT5zeW1ib2xfMl90b2tlbikKICAgICAg ICB7CiAgICAgICAgICBzbnByaW50ZiAodG9rZW5fc3RyaW5nLCB0b2tlbl9zdHJpbmdfbGVuLCAi KHVua25vd24pIHRva2VuIDwlZD4iLCBzY2FubmVyLT50b2tlbik7CiAgICAgICAgICBicmVhazsK ICAgICAgICB9CgogICAgY2FzZSBHX1RPS0VOX1NZTUJPTDoKICAgICAgaWYgKGV4cGVjdGVkX3Rv a2VuID09IEdfVE9LRU5fU1lNQk9MIHx8CiAgICAgICAgICAoc2Nhbm5lci0+Y29uZmlnLT5zeW1i b2xfMl90b2tlbiAmJgogICAgICAgICAgIGV4cGVjdGVkX3Rva2VuID4gR19UT0tFTl9MQVNUKSkK ICAgICAgICBwcmludF91bmV4cCA9ICgwKTsKICAgICAgaWYgKHN5bWJvbF9uYW1lKQogICAgICAg IHNucHJpbnRmICh0b2tlbl9zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgIHRva2VuX3N0cmlu Z19sZW4sCiAgICAgICAgICAgICAgICAgICAgICIlcyVzIGAlcyciLAogICAgICAgICAgICAgICAg ICAgICBwcmludF91bmV4cCA/ICIiIDogImludmFsaWQgIiwKICAgICAgICAgICAgICAgICAgICAg c3ltYm9sX3NwZWMsCiAgICAgICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lKTsKICAgICAgZWxz ZQogICAgICAgIHNucHJpbnRmICh0b2tlbl9zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgIHRv a2VuX3N0cmluZ19sZW4sCiAgICAgICAgICAgICAgICAgICAgICIlcyVzIiwKICAgICAgICAgICAg ICAgICAgICAgcHJpbnRfdW5leHAgPyAiIiA6ICJpbnZhbGlkICIsCiAgICAgICAgICAgICAgICAg ICAgIHN5bWJvbF9zcGVjKTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBHX1RPS0VOX0VSUk9SOgog ICAgICBwcmludF91bmV4cCA9ICgwKTsKICAgICAgZXhwZWN0ZWRfdG9rZW4gPSBHX1RPS0VOX05P TkU7CiAgICAgIHN3aXRjaCAoc2Nhbm5lci0+dmFsdWUudl9lcnJvcikKICAgICAgICB7CiAgICAg ICAgY2FzZSBHX0VSUl9VTkVYUF9FT0Y6CiAgICAgICAgICBzbnByaW50ZiAodG9rZW5fc3RyaW5n LCB0b2tlbl9zdHJpbmdfbGVuLCAic2Nhbm5lcjogdW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwog ICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgR19FUlJfVU5FWFBfRU9GX0lOX1NUUklORzoK ICAgICAgICAgIHNucHJpbnRmICh0b2tlbl9zdHJpbmcsIHRva2VuX3N0cmluZ19sZW4sICJzY2Fu bmVyOiB1bnRlcm1pbmF0ZWQgc3RyaW5nIGNvbnN0YW50Iik7CiAgICAgICAgICBicmVhazsKCiAg ICAgICAgY2FzZSBHX0VSUl9VTkVYUF9FT0ZfSU5fQ09NTUVOVDoKICAgICAgICAgIHNucHJpbnRm ICh0b2tlbl9zdHJpbmcsIHRva2VuX3N0cmluZ19sZW4sICJzY2FubmVyOiB1bnRlcm1pbmF0ZWQg Y29tbWVudCIpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgR19FUlJfTk9OX0RJR0lU X0lOX0NPTlNUOgogICAgICAgICAgc25wcmludGYgKHRva2VuX3N0cmluZywgdG9rZW5fc3RyaW5n X2xlbiwgInNjYW5uZXI6IG5vbiBkaWdpdCBpbiBjb25zdGFudCIpOwogICAgICAgICAgYnJlYWs7 CgogICAgICAgIGNhc2UgR19FUlJfRkxPQVRfUkFESVg6CiAgICAgICAgICBzbnByaW50ZiAodG9r ZW5fc3RyaW5nLCB0b2tlbl9zdHJpbmdfbGVuLCAic2Nhbm5lcjogaW52YWxpZCByYWRpeCBmb3Ig ZmxvYXRpbmcgY29uc3RhbnQiKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIEdfRVJS X0ZMT0FUX01BTEZPUk1FRDoKICAgICAgICAgIHNucHJpbnRmICh0b2tlbl9zdHJpbmcsIHRva2Vu X3N0cmluZ19sZW4sICJzY2FubmVyOiBtYWxmb3JtZWQgZmxvYXRpbmcgY29uc3RhbnQiKTsKICAg ICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIEdfRVJSX0RJR0lUX1JBRElYOgogICAgICAgICAg c25wcmludGYgKHRva2VuX3N0cmluZywgdG9rZW5fc3RyaW5nX2xlbiwgInNjYW5uZXI6IGRpZ2l0 IGlzIGJleW9uZCByYWRpeCIpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgR19FUlJf VU5LTk9XTjoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgc25wcmludGYgKHRva2VuX3N0cmlu ZywgdG9rZW5fc3RyaW5nX2xlbiwgInNjYW5uZXI6IHVua25vd24gZXJyb3IiKTsKICAgICAgICAg IGJyZWFrOwogICAgICAgIH0KICAgICAgYnJlYWs7CgogICAgY2FzZSBHX1RPS0VOX0NIQVI6CiAg ICAgIHNucHJpbnRmICh0b2tlbl9zdHJpbmcsIHRva2VuX3N0cmluZ19sZW4sICJjaGFyYWN0ZXIg YCVjJyIsIHNjYW5uZXItPnZhbHVlLnZfY2hhcik7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgR19U T0tFTl9JREVOVElGSUVSOgogICAgY2FzZSBHX1RPS0VOX0lERU5USUZJRVJfTlVMTDoKICAgICAg aWYgKGV4cGVjdGVkX3Rva2VuID09IEdfVE9LRU5fSURFTlRJRklFUiB8fAogICAgICAgICAgZXhw ZWN0ZWRfdG9rZW4gPT0gR19UT0tFTl9JREVOVElGSUVSX05VTEwpCiAgICAgICAgcHJpbnRfdW5l eHAgPSAoMCk7CiAgICAgIHNucHJpbnRmICh0b2tlbl9zdHJpbmcsCiAgICAgICAgICAgICAgICAg IHRva2VuX3N0cmluZ19sZW4sCiAgICAgICAgICAgICAgICAgICIlcyVzIGAlcyciLAogICAgICAg ICAgICAgICAgICBwcmludF91bmV4cCA/ICIiIDogImludmFsaWQgIiwKICAgICAgICAgICAgICAg ICAgaWRlbnRpZmllcl9zcGVjLAogICAgICAgICAgICAgICAgICBzY2FubmVyLT50b2tlbiA9PSBH X1RPS0VOX0lERU5USUZJRVIgPyBzY2FubmVyLT52YWx1ZS52X3N0cmluZyA6ICJudWxsIik7CiAg ICAgIGJyZWFrOwoKICAgIGNhc2UgR19UT0tFTl9CSU5BUlk6CiAgICBjYXNlIEdfVE9LRU5fT0NU QUw6CiAgICBjYXNlIEdfVE9LRU5fSU5UOgogICAgY2FzZSBHX1RPS0VOX0hFWDoKICAgICAgaWYg KHNjYW5uZXItPmNvbmZpZy0+c3RvcmVfaW50NjQpCiAgICAgICAgc25wcmludGYgKHRva2VuX3N0 cmluZywgdG9rZW5fc3RyaW5nX2xlbiwgIm51bWJlciBgJSIgImxsdSIgIiciLCBzY2FubmVyLT52 YWx1ZS52X2ludDY0KTsKICAgICAgZWxzZQogICAgICAgIHNucHJpbnRmICh0b2tlbl9zdHJpbmcs IHRva2VuX3N0cmluZ19sZW4sICJudW1iZXIgYCVsdSciLCBzY2FubmVyLT52YWx1ZS52X2ludCk7 CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgR19UT0tFTl9GTE9BVDoKICAgICAgc25wcmludGYgKHRv a2VuX3N0cmluZywgdG9rZW5fc3RyaW5nX2xlbiwgIm51bWJlciBgJS4zZiciLCBzY2FubmVyLT52 YWx1ZS52X2Zsb2F0KTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBHX1RPS0VOX1NUUklORzoKICAg ICAgaWYgKGV4cGVjdGVkX3Rva2VuID09IEdfVE9LRU5fU1RSSU5HKQogICAgICAgIHByaW50X3Vu ZXhwID0gKDApOwogICAgICBzbnByaW50ZiAodG9rZW5fc3RyaW5nLAogICAgICAgICAgICAgICAg ICAgdG9rZW5fc3RyaW5nX2xlbiwKICAgICAgICAgICAgICAgICAgICIlcyVzc3RyaW5nIGNvbnN0 YW50IFwiJXNcIiIsCiAgICAgICAgICAgICAgICAgICBwcmludF91bmV4cCA/ICIiIDogImludmFs aWQgIiwKICAgICAgICAgICAgICAgICAgIHNjYW5uZXItPnZhbHVlLnZfc3RyaW5nWzBdID09IDAg PyAiZW1wdHkgIiA6ICIiLAogICAgICAgICAgICAgICAgICAgc2Nhbm5lci0+dmFsdWUudl9zdHJp bmcpOwogICAgICB0b2tlbl9zdHJpbmdbdG9rZW5fc3RyaW5nX2xlbiAtIDJdID0gJyInOwogICAg ICB0b2tlbl9zdHJpbmdbdG9rZW5fc3RyaW5nX2xlbiAtIDFdID0gMDsKICAgICAgYnJlYWs7Cgog ICAgY2FzZSBHX1RPS0VOX0NPTU1FTlRfU0lOR0xFOgogICAgY2FzZSBHX1RPS0VOX0NPTU1FTlRf TVVMVEk6CiAgICAgIHNucHJpbnRmICh0b2tlbl9zdHJpbmcsIHRva2VuX3N0cmluZ19sZW4sICJj b21tZW50Iik7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgR19UT0tFTl9OT05FOgoKCgoKCgogICAg ICAodm9pZCkoeyBnX2xvZyAoIkdMaWIiLCBHX0xPR19MRVZFTF9FUlJPUiwgImZpbGUgJXM6IGxp bmUgJWQgKCVzKTogc2hvdWxkIG5vdCBiZSByZWFjaGVkIiwgImdzY2FubmVyLmMiLCA5OTUsIF9f UFJFVFRZX0ZVTkNUSU9OX18pOyB9KTsKICAgICAgYnJlYWs7CiAgICB9CgoKICBzd2l0Y2ggKGV4 cGVjdGVkX3Rva2VuKQogICAgewogICAgICBnYm9vbGVhbiBuZWVkX3ZhbGlkOwogICAgICBnY2hh ciAqdHN0cmluZzsKICAgIGNhc2UgR19UT0tFTl9FT0Y6CiAgICAgIHNucHJpbnRmIChleHBlY3Rl ZF9zdHJpbmcsIGV4cGVjdGVkX3N0cmluZ19sZW4sICJlbmQgb2YgZmlsZSIpOwogICAgICBicmVh azsKICAgIGRlZmF1bHQ6CiAgICAgIGlmIChleHBlY3RlZF90b2tlbiA+PSAxICYmIGV4cGVjdGVk X3Rva2VuIDw9IDI1NSkKICAgICAgICB7CiAgICAgICAgICBpZiAoKGV4cGVjdGVkX3Rva2VuID49 ICcgJyAmJiBleHBlY3RlZF90b2tlbiA8PSAnficpIHx8CiAgICAgICAgICAgICAgKF9fZXh0ZW5z aW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChleHBlY3RlZF90b2tlbikgJiYgKGV4cGVjdGVk X3Rva2VuKSA9PSAnXDAnID8gKGNoYXIgKikgX19yYXdtZW1jaHIgKHNjYW5uZXItPmNvbmZpZy0+ Y3NldF9pZGVudGlmaWVyX2ZpcnN0LCBleHBlY3RlZF90b2tlbikgOiBzdHJjaHIgKHNjYW5uZXIt PmNvbmZpZy0+Y3NldF9pZGVudGlmaWVyX2ZpcnN0LCBleHBlY3RlZF90b2tlbikpKSB8fAogICAg ICAgICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoZXhwZWN0ZWRf dG9rZW4pICYmIChleHBlY3RlZF90b2tlbikgPT0gJ1wwJyA/IChjaGFyICopIF9fcmF3bWVtY2hy IChzY2FubmVyLT5jb25maWctPmNzZXRfaWRlbnRpZmllcl9udGgsIGV4cGVjdGVkX3Rva2VuKSA6 IHN0cmNociAoc2Nhbm5lci0+Y29uZmlnLT5jc2V0X2lkZW50aWZpZXJfbnRoLCBleHBlY3RlZF90 b2tlbikpKSkKICAgICAgICAgICAgc25wcmludGYgKGV4cGVjdGVkX3N0cmluZywgZXhwZWN0ZWRf c3RyaW5nX2xlbiwgImNoYXJhY3RlciBgJWMnIiwgZXhwZWN0ZWRfdG9rZW4pOwogICAgICAgICAg ZWxzZQogICAgICAgICAgICBzbnByaW50ZiAoZXhwZWN0ZWRfc3RyaW5nLCBleHBlY3RlZF9zdHJp bmdfbGVuLCAiY2hhcmFjdGVyIGBcXCVvJyIsIGV4cGVjdGVkX3Rva2VuKTsKICAgICAgICAgIGJy ZWFrOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIXNjYW5uZXItPmNvbmZpZy0+c3ltYm9sXzJf dG9rZW4pCiAgICAgICAgewogICAgICAgICAgc25wcmludGYgKGV4cGVjdGVkX3N0cmluZywgZXhw ZWN0ZWRfc3RyaW5nX2xlbiwgIih1bmtub3duKSB0b2tlbiA8JWQ+IiwgZXhwZWN0ZWRfdG9rZW4p OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgIGNhc2UgR19UT0tFTl9TWU1CT0w6CiAg ICAgIG5lZWRfdmFsaWQgPSAoc2Nhbm5lci0+dG9rZW4gPT0gR19UT0tFTl9TWU1CT0wgfHwKICAg ICAgICAgICAgICAgICAgICAoc2Nhbm5lci0+Y29uZmlnLT5zeW1ib2xfMl90b2tlbiAmJgogICAg ICAgICAgICAgICAgICAgICBzY2FubmVyLT50b2tlbiA+IEdfVE9LRU5fTEFTVCkpOwogICAgICBz bnByaW50ZiAoZXhwZWN0ZWRfc3RyaW5nLAogICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3Ry aW5nX2xlbiwKICAgICAgICAgICAgICAgICAgICIlcyVzIiwKICAgICAgICAgICAgICAgICAgIG5l ZWRfdmFsaWQgPyAidmFsaWQgIiA6ICIiLAogICAgICAgICAgICAgICAgICAgc3ltYm9sX3NwZWMp OwoKICAgICAgYnJlYWs7CiAgICBjYXNlIEdfVE9LRU5fQ0hBUjoKICAgICAgc25wcmludGYgKGV4 cGVjdGVkX3N0cmluZywgZXhwZWN0ZWRfc3RyaW5nX2xlbiwgIiVzY2hhcmFjdGVyIiwKICAgICAg ICAgICAgICAgICAgIHNjYW5uZXItPnRva2VuID09IEdfVE9LRU5fQ0hBUiA/ICJ2YWxpZCAiIDog IiIpOwogICAgICBicmVhazsKICAgIGNhc2UgR19UT0tFTl9CSU5BUlk6CiAgICAgIHRzdHJpbmcg PSAiYmluYXJ5IjsKICAgICAgc25wcmludGYgKGV4cGVjdGVkX3N0cmluZywgZXhwZWN0ZWRfc3Ry aW5nX2xlbiwgIiVzbnVtYmVyICglcykiLAogICAgICAgICAgICAgICAgICAgc2Nhbm5lci0+dG9r ZW4gPT0gZXhwZWN0ZWRfdG9rZW4gPyAidmFsaWQgIiA6ICIiLCB0c3RyaW5nKTsKICAgICAgYnJl YWs7CiAgICBjYXNlIEdfVE9LRU5fT0NUQUw6CiAgICAgIHRzdHJpbmcgPSAib2N0YWwiOwogICAg ICBzbnByaW50ZiAoZXhwZWN0ZWRfc3RyaW5nLCBleHBlY3RlZF9zdHJpbmdfbGVuLCAiJXNudW1i ZXIgKCVzKSIsCiAgICAgICAgICAgICAgICAgICBzY2FubmVyLT50b2tlbiA9PSBleHBlY3RlZF90 b2tlbiA/ICJ2YWxpZCAiIDogIiIsIHRzdHJpbmcpOwogICAgICBicmVhazsKICAgIGNhc2UgR19U T0tFTl9JTlQ6CiAgICAgIHRzdHJpbmcgPSAiaW50ZWdlciI7CiAgICAgIHNucHJpbnRmIChleHBl Y3RlZF9zdHJpbmcsIGV4cGVjdGVkX3N0cmluZ19sZW4sICIlc251bWJlciAoJXMpIiwKICAgICAg ICAgICAgICAgICAgIHNjYW5uZXItPnRva2VuID09IGV4cGVjdGVkX3Rva2VuID8gInZhbGlkICIg OiAiIiwgdHN0cmluZyk7CiAgICAgIGJyZWFrOwogICAgY2FzZSBHX1RPS0VOX0hFWDoKICAgICAg dHN0cmluZyA9ICJoZXhhZGVjaW1hbCI7CiAgICAgIHNucHJpbnRmIChleHBlY3RlZF9zdHJpbmcs IGV4cGVjdGVkX3N0cmluZ19sZW4sICIlc251bWJlciAoJXMpIiwKICAgICAgICAgICAgICAgICAg IHNjYW5uZXItPnRva2VuID09IGV4cGVjdGVkX3Rva2VuID8gInZhbGlkICIgOiAiIiwgdHN0cmlu Zyk7CiAgICAgIGJyZWFrOwogICAgY2FzZSBHX1RPS0VOX0ZMT0FUOgogICAgICB0c3RyaW5nID0g ImZsb2F0IjsKICAgICAgc25wcmludGYgKGV4cGVjdGVkX3N0cmluZywgZXhwZWN0ZWRfc3RyaW5n X2xlbiwgIiVzbnVtYmVyICglcykiLAogICAgICAgICAgICAgICAgICAgc2Nhbm5lci0+dG9rZW4g PT0gZXhwZWN0ZWRfdG9rZW4gPyAidmFsaWQgIiA6ICIiLCB0c3RyaW5nKTsKICAgICAgYnJlYWs7 CiAgICBjYXNlIEdfVE9LRU5fU1RSSU5HOgogICAgICBzbnByaW50ZiAoZXhwZWN0ZWRfc3RyaW5n LAogICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3RyaW5nX2xlbiwKICAgICAgICAgICAgICAg ICAgICIlc3N0cmluZyBjb25zdGFudCIsCiAgICAgICAgICAgICAgICAgICBzY2FubmVyLT50b2tl biA9PSBHX1RPS0VOX1NUUklORyA/ICJ2YWxpZCAiIDogIiIpOwogICAgICBicmVhazsKICAgIGNh c2UgR19UT0tFTl9JREVOVElGSUVSOgogICAgY2FzZSBHX1RPS0VOX0lERU5USUZJRVJfTlVMTDoK ICAgICAgbmVlZF92YWxpZCA9IChzY2FubmVyLT50b2tlbiA9PSBHX1RPS0VOX0lERU5USUZJRVJf TlVMTCB8fAogICAgICAgICAgICAgICAgICAgIHNjYW5uZXItPnRva2VuID09IEdfVE9LRU5fSURF TlRJRklFUik7CiAgICAgIHNucHJpbnRmIChleHBlY3RlZF9zdHJpbmcsCiAgICAgICAgICAgICAg ICAgICBleHBlY3RlZF9zdHJpbmdfbGVuLAogICAgICAgICAgICAgICAgICAgIiVzJXMiLAogICAg ICAgICAgICAgICAgICAgbmVlZF92YWxpZCA/ICJ2YWxpZCAiIDogIiIsCiAgICAgICAgICAgICAg ICAgICBpZGVudGlmaWVyX3NwZWMpOwogICAgICBicmVhazsKICAgIGNhc2UgR19UT0tFTl9DT01N RU5UX1NJTkdMRToKICAgICAgdHN0cmluZyA9ICJzaW5nbGUtbGluZSI7CiAgICAgIHNucHJpbnRm IChleHBlY3RlZF9zdHJpbmcsIGV4cGVjdGVkX3N0cmluZ19sZW4sICIlc2NvbW1lbnQgKCVzKSIs CiAgICAgICAgICAgICAgICAgICBzY2FubmVyLT50b2tlbiA9PSBleHBlY3RlZF90b2tlbiA/ICJ2 YWxpZCAiIDogIiIsIHRzdHJpbmcpOwogICAgICBicmVhazsKICAgIGNhc2UgR19UT0tFTl9DT01N RU5UX01VTFRJOgogICAgICB0c3RyaW5nID0gIm11bHRpLWxpbmUiOwogICAgICBzbnByaW50ZiAo ZXhwZWN0ZWRfc3RyaW5nLCBleHBlY3RlZF9zdHJpbmdfbGVuLCAiJXNjb21tZW50ICglcykiLAog ICAgICAgICAgICAgICAgICAgc2Nhbm5lci0+dG9rZW4gPT0gZXhwZWN0ZWRfdG9rZW4gPyAidmFs aWQgIiA6ICIiLCB0c3RyaW5nKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIEdfVE9LRU5fTk9ORToK ICAgIGNhc2UgR19UT0tFTl9FUlJPUjoKCiAgICAgIGJyZWFrOwogICAgfQoKICBpZiAobWVzc2Fn ZSAmJiBtZXNzYWdlWzBdICE9IDApCiAgICBtZXNzYWdlX3ByZWZpeCA9ICIgLSAiOwogIGVsc2UK ICAgIHsKICAgICAgbWVzc2FnZV9wcmVmaXggPSAiIjsKICAgICAgbWVzc2FnZSA9ICIiOwogICAg fQogIGlmIChleHBlY3RlZF90b2tlbiA9PSBHX1RPS0VOX0VSUk9SKQogICAgewogICAgICBtc2df aGFuZGxlciAoc2Nhbm5lciwKICAgICAgICAgICAgICAgICAgICJmYWlsdXJlIGFyb3VuZCAlcyVz JXMiLAogICAgICAgICAgICAgICAgICAgdG9rZW5fc3RyaW5nLAogICAgICAgICAgICAgICAgICAg bWVzc2FnZV9wcmVmaXgsCiAgICAgICAgICAgICAgICAgICBtZXNzYWdlKTsKICAgIH0KICBlbHNl IGlmIChleHBlY3RlZF90b2tlbiA9PSBHX1RPS0VOX05PTkUpCiAgICB7CiAgICAgIGlmIChwcmlu dF91bmV4cCkKICAgICAgICBtc2dfaGFuZGxlciAoc2Nhbm5lciwKICAgICAgICAgICAgICAgICAg ICAgInVuZXhwZWN0ZWQgJXMlcyVzIiwKICAgICAgICAgICAgICAgICAgICAgdG9rZW5fc3RyaW5n LAogICAgICAgICAgICAgICAgICAgICBtZXNzYWdlX3ByZWZpeCwKICAgICAgICAgICAgICAgICAg ICAgbWVzc2FnZSk7CiAgICAgIGVsc2UKICAgICAgICBtc2dfaGFuZGxlciAoc2Nhbm5lciwKICAg ICAgICAgICAgICAgICAgICAgIiVzJXMlcyIsCiAgICAgICAgICAgICAgICAgICAgIHRva2VuX3N0 cmluZywKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZV9wcmVmaXgsCiAgICAgICAgICAgICAg ICAgICAgIG1lc3NhZ2UpOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgaWYgKHByaW50X3VuZXhw KQogICAgICAgIG1zZ19oYW5kbGVyIChzY2FubmVyLAogICAgICAgICAgICAgICAgICAgICAidW5l eHBlY3RlZCAlcywgZXhwZWN0ZWQgJXMlcyVzIiwKICAgICAgICAgICAgICAgICAgICAgdG9rZW5f c3RyaW5nLAogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9zdHJpbmcsCiAgICAgICAgICAg ICAgICAgICAgIG1lc3NhZ2VfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICBtZXNzYWdlKTsK ICAgICAgZWxzZQogICAgICAgIG1zZ19oYW5kbGVyIChzY2FubmVyLAogICAgICAgICAgICAgICAg ICAgICAiJXMsIGV4cGVjdGVkICVzJXMlcyIsCiAgICAgICAgICAgICAgICAgICAgIHRva2VuX3N0 cmluZywKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfc3RyaW5nLAogICAgICAgICAgICAg ICAgICAgICBtZXNzYWdlX3ByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSk7CiAg ICB9CgogIGdfZnJlZSAodG9rZW5fc3RyaW5nKTsKICBnX2ZyZWUgKGV4cGVjdGVkX3N0cmluZyk7 Cn0KCnN0YXRpYyB2b2lkCmdfc2Nhbm5lcl9nZXRfdG9rZW5faSAoR1NjYW5uZXIgKnNjYW5uZXIs CiAgICAgICAgICAgICAgICAgICAgICAgR1Rva2VuVHlwZSAqdG9rZW5fcCwKICAgICAgICAgICAg ICAgICAgICAgICBHVG9rZW5WYWx1ZSAqdmFsdWVfcCwKICAgICAgICAgICAgICAgICAgICAgICBn dWludCAqbGluZV9wLAogICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICpwb3NpdGlvbl9wKQp7 CiAgZG8KICAgIHsKICAgICAgZ19zY2FubmVyX2ZyZWVfdmFsdWUgKHRva2VuX3AsIHZhbHVlX3Ap OwogICAgICBnX3NjYW5uZXJfZ2V0X3Rva2VuX2xsIChzY2FubmVyLCB0b2tlbl9wLCB2YWx1ZV9w LCBsaW5lX3AsIHBvc2l0aW9uX3ApOwogICAgfQogIHdoaWxlICgoKCp0b2tlbl9wID4gMCAmJiAq dG9rZW5fcCA8IDI1NikgJiYKICAgICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29u c3RhbnRfcCAoKnRva2VuX3ApICYmICgqdG9rZW5fcCkgPT0gJ1wwJyA/IChjaGFyICopIF9fcmF3 bWVtY2hyIChzY2FubmVyLT5jb25maWctPmNzZXRfc2tpcF9jaGFyYWN0ZXJzLCAqdG9rZW5fcCkg OiBzdHJjaHIgKHNjYW5uZXItPmNvbmZpZy0+Y3NldF9za2lwX2NoYXJhY3RlcnMsICp0b2tlbl9w KSkpKSB8fAogICAgICAgICAoKnRva2VuX3AgPT0gR19UT0tFTl9DSEFSICYmCiAgICAgICAgICAo X19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKHZhbHVlX3AtPnZfY2hhcikgJiYg KHZhbHVlX3AtPnZfY2hhcikgPT0gJ1wwJyA/IChjaGFyICopIF9fcmF3bWVtY2hyIChzY2FubmVy LT5jb25maWctPmNzZXRfc2tpcF9jaGFyYWN0ZXJzLCB2YWx1ZV9wLT52X2NoYXIpIDogc3RyY2hy IChzY2FubmVyLT5jb25maWctPmNzZXRfc2tpcF9jaGFyYWN0ZXJzLCB2YWx1ZV9wLT52X2NoYXIp KSkpIHx8CiAgICAgICAgICgqdG9rZW5fcCA9PSBHX1RPS0VOX0NPTU1FTlRfTVVMVEkgJiYKICAg ICAgICAgIHNjYW5uZXItPmNvbmZpZy0+c2tpcF9jb21tZW50X211bHRpKSB8fAogICAgICAgICAo KnRva2VuX3AgPT0gR19UT0tFTl9DT01NRU5UX1NJTkdMRSAmJgogICAgICAgICAgc2Nhbm5lci0+ Y29uZmlnLT5za2lwX2NvbW1lbnRfc2luZ2xlKSk7CgogIHN3aXRjaCAoKnRva2VuX3ApCiAgICB7 CiAgICBjYXNlIEdfVE9LRU5fSURFTlRJRklFUjoKICAgICAgaWYgKHNjYW5uZXItPmNvbmZpZy0+ aWRlbnRpZmllcl8yX3N0cmluZykKICAgICAgICAqdG9rZW5fcCA9IEdfVE9LRU5fU1RSSU5HOwog ICAgICBicmVhazsKCiAgICBjYXNlIEdfVE9LRU5fU1lNQk9MOgogICAgICBpZiAoc2Nhbm5lci0+ Y29uZmlnLT5zeW1ib2xfMl90b2tlbikKICAgICAgICAqdG9rZW5fcCA9IChHVG9rZW5UeXBlKSB2 YWx1ZV9wLT52X3N5bWJvbDsKICAgICAgYnJlYWs7CgogICAgY2FzZSBHX1RPS0VOX0JJTkFSWToK ICAgIGNhc2UgR19UT0tFTl9PQ1RBTDoKICAgIGNhc2UgR19UT0tFTl9IRVg6CiAgICAgIGlmIChz Y2FubmVyLT5jb25maWctPm51bWJlcnNfMl9pbnQpCiAgICAgICAgKnRva2VuX3AgPSBHX1RPS0VO X0lOVDsKICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgYnJlYWs7CiAgICB9CgogIGlm ICgqdG9rZW5fcCA9PSBHX1RPS0VOX0lOVCAmJgogICAgICBzY2FubmVyLT5jb25maWctPmludF8y X2Zsb2F0KQogICAgewogICAgICAqdG9rZW5fcCA9IEdfVE9LRU5fRkxPQVQ7CiAgICAgIGlmIChz Y2FubmVyLT5jb25maWctPnN0b3JlX2ludDY0KQogICAgICAgIHZhbHVlX3AtPnZfZmxvYXQgPSB2 YWx1ZV9wLT52X2ludDY0OwogICAgICBlbHNlCiAgICAgICAgdmFsdWVfcC0+dl9mbG9hdCA9IHZh bHVlX3AtPnZfaW50OwogICAgfQoKICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKfQoKc3Rh dGljIHZvaWQKZ19zY2FubmVyX2dldF90b2tlbl9sbCAoR1NjYW5uZXIgKnNjYW5uZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICBHVG9rZW5UeXBlICp0b2tlbl9wLAogICAgICAgICAgICAgICAg ICAgICAgICAgR1Rva2VuVmFsdWUgKnZhbHVlX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICBn dWludCAqbGluZV9wLAogICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgKnBvc2l0aW9uX3Ap CnsKICBHU2Nhbm5lckNvbmZpZyAqY29uZmlnOwogIEdUb2tlblR5cGUgdG9rZW47CiAgZ2Jvb2xl YW4gaW5fY29tbWVudF9tdWx0aTsKICBnYm9vbGVhbiBpbl9jb21tZW50X3NpbmdsZTsKICBnYm9v bGVhbiBpbl9zdHJpbmdfc3E7CiAgZ2Jvb2xlYW4gaW5fc3RyaW5nX2RxOwogIEdTdHJpbmcgKmdz dHJpbmc7CiAgR1Rva2VuVmFsdWUgdmFsdWU7CiAgZ3VjaGFyIGNoOwoKICBjb25maWcgPSBzY2Fu bmVyLT5jb25maWc7CiAgKCp2YWx1ZV9wKS52X2ludDY0ID0gMDsKCiAgaWYgKChzY2FubmVyLT50 ZXh0ID49IHNjYW5uZXItPnRleHRfZW5kICYmIHNjYW5uZXItPmlucHV0X2ZkIDwgMCkgfHwKICAg ICAgc2Nhbm5lci0+dG9rZW4gPT0gR19UT0tFTl9FT0YpCiAgICB7CiAgICAgICp0b2tlbl9wID0g R19UT0tFTl9FT0Y7CiAgICAgIHJldHVybjsKICAgIH0KCiAgaW5fY29tbWVudF9tdWx0aSA9ICgw KTsKICBpbl9jb21tZW50X3NpbmdsZSA9ICgwKTsKICBpbl9zdHJpbmdfc3EgPSAoMCk7CiAgaW5f c3RyaW5nX2RxID0gKDApOwogIGdzdHJpbmcgPSAoKHZvaWQgKikwKTsKCiAgZG8KICAgIHsKICAg ICAgZ2Jvb2xlYW4gZG90dGVkX2Zsb2F0ID0gKDApOwoKICAgICAgY2ggPSBnX3NjYW5uZXJfZ2V0 X2NoYXIgKHNjYW5uZXIsIGxpbmVfcCwgcG9zaXRpb25fcCk7CgogICAgICB2YWx1ZS52X2ludDY0 ID0gMDsKICAgICAgdG9rZW4gPSBHX1RPS0VOX05PTkU7CgoKCgoKICAgICAgaWYgKGNvbmZpZy0+ c2Nhbl9pZGVudGlmaWVyICYmCiAgICAgICAgICBjaCAmJiAoX19leHRlbnNpb25fXyAoX19idWls dGluX2NvbnN0YW50X3AgKGNoKSAmJiAoY2gpID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNo ciAoY29uZmlnLT5jc2V0X2lkZW50aWZpZXJfZmlyc3QsIGNoKSA6IHN0cmNociAoY29uZmlnLT5j c2V0X2lkZW50aWZpZXJfZmlyc3QsIGNoKSkpKQogICAgICAgIGdvdG8gaWRlbnRpZmllcl9wcmVj ZWRlbmNlOwoKICAgICAgc3dpdGNoIChjaCkKICAgICAgICB7CiAgICAgICAgY2FzZSAwOgogICAg ICAgICAgdG9rZW4gPSBHX1RPS0VOX0VPRjsKICAgICAgICAgICgqcG9zaXRpb25fcCkrKzsKCiAg ICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnLyc6CiAgICAgICAgICBpZiAoIWNvbmZpZy0+ c2Nhbl9jb21tZW50X211bHRpIHx8CiAgICAgICAgICAgICAgZ19zY2FubmVyX3BlZWtfbmV4dF9j aGFyIChzY2FubmVyKSAhPSAnKicpCiAgICAgICAgICAgIGdvdG8gZGVmYXVsdF9jYXNlOwogICAg ICAgICAgZ19zY2FubmVyX2dldF9jaGFyIChzY2FubmVyLCBsaW5lX3AsIHBvc2l0aW9uX3ApOwog ICAgICAgICAgdG9rZW4gPSBHX1RPS0VOX0NPTU1FTlRfTVVMVEk7CiAgICAgICAgICBpbl9jb21t ZW50X211bHRpID0gKCEoMCkpOwogICAgICAgICAgZ3N0cmluZyA9IGdfc3RyaW5nX25ldyAoIiIp OwogICAgICAgICAgd2hpbGUgKChjaCA9IGdfc2Nhbm5lcl9nZXRfY2hhciAoc2Nhbm5lciwgbGlu ZV9wLCBwb3NpdGlvbl9wKSkgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChj aCA9PSAnKicgJiYgZ19zY2FubmVyX3BlZWtfbmV4dF9jaGFyIChzY2FubmVyKSA9PSAnLycpCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGdfc2Nhbm5lcl9nZXRfY2hhciAoc2Nh bm5lciwgbGluZV9wLCBwb3NpdGlvbl9wKTsKICAgICAgICAgICAgICAgICAgaW5fY29tbWVudF9t dWx0aSA9ICgwKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZ3N0cmluZyA9IGdfc3RyaW5nX2FwcGVu ZF9jIChnc3RyaW5nLCBjaCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNoID0gMDsKICAgICAg ICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdcJyc6CiAgICAgICAgICBpZiAoIWNvbmZpZy0+c2Nh bl9zdHJpbmdfc3EpCiAgICAgICAgICAgIGdvdG8gZGVmYXVsdF9jYXNlOwogICAgICAgICAgdG9r ZW4gPSBHX1RPS0VOX1NUUklORzsKICAgICAgICAgIGluX3N0cmluZ19zcSA9ICghKDApKTsKICAg ICAgICAgIGdzdHJpbmcgPSBnX3N0cmluZ19uZXcgKCIiKTsKICAgICAgICAgIHdoaWxlICgoY2gg PSBnX3NjYW5uZXJfZ2V0X2NoYXIgKHNjYW5uZXIsIGxpbmVfcCwgcG9zaXRpb25fcCkpICE9IDAp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoY2ggPT0gJ1wnJykKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgaW5fc3RyaW5nX3NxID0gKDApOwogICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICBnc3RyaW5nID0gZ19zdHJpbmdfYXBwZW5kX2MgKGdzdHJpbmcsIGNoKTsKICAgICAg ICAgICAgfQogICAgICAgICAgY2ggPSAwOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2Ug JyInOgogICAgICAgICAgaWYgKCFjb25maWctPnNjYW5fc3RyaW5nX2RxKQogICAgICAgICAgICBn b3RvIGRlZmF1bHRfY2FzZTsKICAgICAgICAgIHRva2VuID0gR19UT0tFTl9TVFJJTkc7CiAgICAg ICAgICBpbl9zdHJpbmdfZHEgPSAoISgwKSk7CiAgICAgICAgICBnc3RyaW5nID0gZ19zdHJpbmdf bmV3ICgiIik7CiAgICAgICAgICB3aGlsZSAoKGNoID0gZ19zY2FubmVyX2dldF9jaGFyIChzY2Fu bmVyLCBsaW5lX3AsIHBvc2l0aW9uX3ApKSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgaWYgKGNoID09ICciJykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaW5f c3RyaW5nX2RxID0gKDApOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg IGlmIChjaCA9PSAnXFwnKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgIGNoID0gZ19zY2FubmVyX2dldF9jaGFyIChzY2FubmVyLCBsaW5lX3AsIHBvc2l0aW9uX3Ap OwogICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjaCkKICAgICAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IGk7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgZ3VpbnQgZmNoYXI7CgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBj YXNlICdcXCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0cmluZyA9IGdfc3RyaW5nX2Fw cGVuZF9jIChnc3RyaW5nLCAnXFwnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAgICAgICAg ICAgIGdzdHJpbmcgPSBnX3N0cmluZ19hcHBlbmRfYyAoZ3N0cmluZywgJ1xuJyk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0 JzoKICAgICAgICAgICAgICAgICAgICAgICAgICBnc3RyaW5nID0gZ19zdHJpbmdfYXBwZW5kX2Mg KGdzdHJpbmcsICdcdCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAg ICAgICAgICAgICAgICAgICAgY2FzZSAncic6CiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0 cmluZyA9IGdfc3RyaW5nX2FwcGVuZF9jIChnc3RyaW5nLCAnXHInKTsKICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2InOgogICAg ICAgICAgICAgICAgICAgICAgICAgIGdzdHJpbmcgPSBnX3N0cmluZ19hcHBlbmRfYyAoZ3N0cmlu ZywgJ1xiJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAg ICAgICAgICAgICBjYXNlICdmJzoKICAgICAgICAgICAgICAgICAgICAgICAgICBnc3RyaW5nID0g Z19zdHJpbmdfYXBwZW5kX2MgKGdzdHJpbmcsICdcZicpOwogICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMCc6CiAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgJzEnOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcyJzoK ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMyc6CiAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgJzQnOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc1JzoKICAgICAgICAgICAg ICAgICAgICAgICAgY2FzZSAnNic6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzcnOgog ICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBjaCAtICcwJzsKICAgICAgICAgICAgICAgICAg ICAgICAgICBmY2hhciA9IGdfc2Nhbm5lcl9wZWVrX25leHRfY2hhciAoc2Nhbm5lcik7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGZjaGFyID49ICcwJyAmJiBmY2hhciA8PSAnNycpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoID0gZ19zY2FubmVyX2dldF9jaGFyIChzY2FubmVyLCBsaW5lX3AsIHBvc2l0aW9uX3ApOwog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaSAqIDggKyBjaCAtICcwJzsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZmNoYXIgPSBnX3NjYW5uZXJfcGVla19uZXh0X2NoYXIg KHNjYW5uZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmNoYXIgPj0gJzAn ICYmIGZjaGFyIDw9ICc3JykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IGdfc2Nhbm5lcl9nZXRfY2hhciAoc2Nh bm5lciwgbGluZV9wLCBwb3NpdGlvbl9wKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGkgPSBpICogOCArIGNoIC0gJzAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg ICBnc3RyaW5nID0gZ19zdHJpbmdfYXBwZW5kX2MgKGdzdHJpbmcsIGkpOwogICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAg ICAgICAgICAgICAgICAgICAgICAgICBnc3RyaW5nID0gZ19zdHJpbmdfYXBwZW5kX2MgKGdzdHJp bmcsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgICAgIGdzdHJpbmcgPSBnX3N0cmluZ19hcHBlbmRfYyAoZ3N0cmluZywg Y2gpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjaCA9IDA7CiAg ICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnLic6CiAgICAgICAgICBpZiAoIWNvbmZpZy0+ c2Nhbl9mbG9hdCkKICAgICAgICAgICAgZ290byBkZWZhdWx0X2Nhc2U7CiAgICAgICAgICB0b2tl biA9IEdfVE9LRU5fRkxPQVQ7CiAgICAgICAgICBkb3R0ZWRfZmxvYXQgPSAoISgwKSk7CiAgICAg ICAgICBjaCA9IGdfc2Nhbm5lcl9nZXRfY2hhciAoc2Nhbm5lciwgbGluZV9wLCBwb3NpdGlvbl9w KTsKICAgICAgICAgIGdvdG8gbnVtYmVyX3BhcnNpbmc7CgogICAgICAgIGNhc2UgJyQnOgogICAg ICAgICAgaWYgKCFjb25maWctPnNjYW5faGV4X2RvbGxhcikKICAgICAgICAgICAgZ290byBkZWZh dWx0X2Nhc2U7CiAgICAgICAgICB0b2tlbiA9IEdfVE9LRU5fSEVYOwogICAgICAgICAgY2ggPSBn X3NjYW5uZXJfZ2V0X2NoYXIgKHNjYW5uZXIsIGxpbmVfcCwgcG9zaXRpb25fcCk7CiAgICAgICAg ICBnb3RvIG51bWJlcl9wYXJzaW5nOwoKICAgICAgICBjYXNlICcwJzoKICAgICAgICAgIGlmIChj b25maWctPnNjYW5fb2N0YWwpCiAgICAgICAgICAgIHRva2VuID0gR19UT0tFTl9PQ1RBTDsKICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgdG9rZW4gPSBHX1RPS0VOX0lOVDsKICAgICAgICAgIGNo ID0gZ19zY2FubmVyX3BlZWtfbmV4dF9jaGFyIChzY2FubmVyKTsKICAgICAgICAgIGlmIChjb25m aWctPnNjYW5faGV4ICYmIChjaCA9PSAneCcgfHwgY2ggPT0gJ1gnKSkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIHRva2VuID0gR19UT0tFTl9IRVg7CiAgICAgICAgICAgICAgZ19zY2FubmVy X2dldF9jaGFyIChzY2FubmVyLCBsaW5lX3AsIHBvc2l0aW9uX3ApOwogICAgICAgICAgICAgIGNo ID0gZ19zY2FubmVyX2dldF9jaGFyIChzY2FubmVyLCBsaW5lX3AsIHBvc2l0aW9uX3ApOwogICAg ICAgICAgICAgIGlmIChjaCA9PSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICB0b2tlbiA9IEdfVE9LRU5fRVJST1I7CiAgICAgICAgICAgICAgICAgIHZhbHVlLnZfZXJyb3Ig PSBHX0VSUl9VTkVYUF9FT0Y7CiAgICAgICAgICAgICAgICAgICgqcG9zaXRpb25fcCkrKzsKICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYg KGdfc2Nhbm5lcl9jaGFyXzJfbnVtIChjaCwgMTYpIDwgMCkKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgdG9rZW4gPSBHX1RPS0VOX0VSUk9SOwogICAgICAgICAgICAgICAgICB2 YWx1ZS52X2Vycm9yID0gR19FUlJfRElHSVRfUkFESVg7CiAgICAgICAgICAgICAgICAgIGNoID0g MDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg IH0KICAgICAgICAgIGVsc2UgaWYgKGNvbmZpZy0+c2Nhbl9iaW5hcnkgJiYgKGNoID09ICdiJyB8 fCBjaCA9PSAnQicpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdG9rZW4gPSBHX1RPS0VO X0JJTkFSWTsKICAgICAgICAgICAgICBnX3NjYW5uZXJfZ2V0X2NoYXIgKHNjYW5uZXIsIGxpbmVf cCwgcG9zaXRpb25fcCk7CiAgICAgICAgICAgICAgY2ggPSBnX3NjYW5uZXJfZ2V0X2NoYXIgKHNj YW5uZXIsIGxpbmVfcCwgcG9zaXRpb25fcCk7CiAgICAgICAgICAgICAgaWYgKGNoID09IDApCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHRva2VuID0gR19UT0tFTl9FUlJPUjsK ICAgICAgICAgICAgICAgICAgdmFsdWUudl9lcnJvciA9IEdfRVJSX1VORVhQX0VPRjsKICAgICAg ICAgICAgICAgICAgKCpwb3NpdGlvbl9wKSsrOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoZ19zY2FubmVyX2NoYXJfMl9udW0gKGNo LCAxMCkgPCAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICB0b2tlbiA9IEdf VE9LRU5fRVJST1I7CiAgICAgICAgICAgICAgICAgIHZhbHVlLnZfZXJyb3IgPSBHX0VSUl9OT05f RElHSVRfSU5fQ09OU1Q7CiAgICAgICAgICAgICAgICAgIGNoID0gMDsKICAgICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgY2ggPSAnMCc7CgogICAgICAgIGNhc2UgJzEnOgogICAgICAgIGNhc2UgJzIn OgogICAgICAgIGNhc2UgJzMnOgogICAgICAgIGNhc2UgJzQnOgogICAgICAgIGNhc2UgJzUnOgog ICAgICAgIGNhc2UgJzYnOgogICAgICAgIGNhc2UgJzcnOgogICAgICAgIGNhc2UgJzgnOgogICAg ICAgIGNhc2UgJzknOgogICAgICAgIG51bWJlcl9wYXJzaW5nOgogICAgICAgIHsKICAgICAgICAg IGdib29sZWFuIGluX251bWJlciA9ICghKDApKTsKICAgICAgICAgIGdjaGFyICplbmRwdHI7Cgog ICAgICAgICAgaWYgKHRva2VuID09IEdfVE9LRU5fTk9ORSkKICAgICAgICAgICAgdG9rZW4gPSBH X1RPS0VOX0lOVDsKCiAgICAgICAgICBnc3RyaW5nID0gZ19zdHJpbmdfbmV3IChkb3R0ZWRfZmxv YXQgPyAiMC4iIDogIiIpOwogICAgICAgICAgZ3N0cmluZyA9IGdfc3RyaW5nX2FwcGVuZF9jIChn c3RyaW5nLCBjaCk7CgogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGdi b29sZWFuIGlzX0U7CgogICAgICAgICAgICAgIGlzX0UgPSB0b2tlbiA9PSBHX1RPS0VOX0ZMT0FU ICYmIChjaCA9PSAnZScgfHwgY2ggPT0gJ0UnKTsKCiAgICAgICAgICAgICAgY2ggPSBnX3NjYW5u ZXJfcGVla19uZXh0X2NoYXIgKHNjYW5uZXIpOwoKICAgICAgICAgICAgICBpZiAoZ19zY2FubmVy X2NoYXJfMl9udW0gKGNoLCAzNikgPj0gMCB8fAogICAgICAgICAgICAgICAgICAoY29uZmlnLT5z Y2FuX2Zsb2F0ICYmIGNoID09ICcuJykgfHwKICAgICAgICAgICAgICAgICAgKGlzX0UgJiYgKGNo ID09ICcrJyB8fCBjaCA9PSAnLScpKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgY2ggPSBnX3NjYW5uZXJfZ2V0X2NoYXIgKHNjYW5uZXIsIGxpbmVfcCwgcG9zaXRpb25fcCk7 CgogICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKQogICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICBjYXNlICcuJzoKICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tl biAhPSBHX1RPS0VOX0lOVCAmJiB0b2tlbiAhPSBHX1RPS0VOX09DVEFMKQogICAgICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudl9lcnJvciA9IHRv a2VuID09IEdfVE9LRU5fRkxPQVQgPyBHX0VSUl9GTE9BVF9NQUxGT1JNRUQgOiBHX0VSUl9GTE9B VF9SQURJWDsKICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IEdfVE9LRU5fRVJST1I7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fbnVtYmVyID0gKDApOwogICAgICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IEdfVE9LRU5fRkxPQVQ7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0cmluZyA9IGdfc3RyaW5nX2FwcGVuZF9jIChn c3RyaW5nLCBjaCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICcwJzoKICAgICAgICAgICAgICAg ICAgICBjYXNlICcxJzoKICAgICAgICAgICAgICAgICAgICBjYXNlICcyJzoKICAgICAgICAgICAg ICAgICAgICBjYXNlICczJzoKICAgICAgICAgICAgICAgICAgICBjYXNlICc0JzoKICAgICAgICAg ICAgICAgICAgICBjYXNlICc1JzoKICAgICAgICAgICAgICAgICAgICBjYXNlICc2JzoKICAgICAg ICAgICAgICAgICAgICBjYXNlICc3JzoKICAgICAgICAgICAgICAgICAgICBjYXNlICc4JzoKICAg ICAgICAgICAgICAgICAgICBjYXNlICc5JzoKICAgICAgICAgICAgICAgICAgICAgIGdzdHJpbmcg PSBnX3N0cmluZ19hcHBlbmRfYyAoZ3N0cmluZywgY2gpOwogICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJy0nOgogICAgICAgICAgICAgICAgICAg IGNhc2UgJysnOgogICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuICE9IEdfVE9LRU5fRkxP QVQpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0 b2tlbiA9IEdfVE9LRU5fRVJST1I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudl9l cnJvciA9IEdfRVJSX05PTl9ESUdJVF9JTl9DT05TVDsKICAgICAgICAgICAgICAgICAgICAgICAg ICBpbl9udW1iZXIgPSAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgZ3N0cmluZyA9IGdfc3RyaW5n X2FwcGVuZF9jIChnc3RyaW5nLCBjaCk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAg ICAgICAgICAgICAgICAgICAgY2FzZSAnZSc6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRSc6 CiAgICAgICAgICAgICAgICAgICAgICBpZiAoKHRva2VuICE9IEdfVE9LRU5fSEVYICYmICFjb25m aWctPnNjYW5fZmxvYXQpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgKHRva2VuICE9IEdf VE9LRU5fSEVYICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuICE9IEdfVE9LRU5f T0NUQUwgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gIT0gR19UT0tFTl9GTE9B VCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiAhPSBHX1RPS0VOX0lOVCkpCiAg ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9 IEdfVE9LRU5fRVJST1I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudl9lcnJvciA9 IEdfRVJSX05PTl9ESUdJVF9JTl9DT05TVDsKICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9u dW1iZXIgPSAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg ICAgIGlmICh0b2tlbiAhPSBHX1RPS0VOX0hFWCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRva2VuID0gR19UT0tFTl9GTE9BVDsKICAgICAgICAgICAgICAgICAgICAgICAgICBnc3RyaW5n ID0gZ19zdHJpbmdfYXBwZW5kX2MgKGdzdHJpbmcsIGNoKTsKICAgICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGRl ZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT0gR19UT0tFTl9IRVgpCiAg ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9 IEdfVE9LRU5fRVJST1I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUudl9lcnJvciA9 IEdfRVJSX05PTl9ESUdJVF9JTl9DT05TVDsKICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9u dW1iZXIgPSAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgZ3N0cmluZyA9IGdfc3RyaW5nX2FwcGVu ZF9jIChnc3RyaW5nLCBjaCk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgaW5fbnVtYmVyID0gKDApOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAo aW5fbnVtYmVyKTsKCiAgICAgICAgICBlbmRwdHIgPSAoKHZvaWQgKikwKTsKICAgICAgICAgIGlm ICh0b2tlbiA9PSBHX1RPS0VOX0ZMT0FUKQogICAgICAgICAgICB2YWx1ZS52X2Zsb2F0ID0gZ19z dHJ0b2QgKGdzdHJpbmctPnN0ciwgJmVuZHB0cik7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBndWludDY0IHVpNjQgPSAwOwogICAgICAgICAgICAgIHN3aXRjaCAo dG9rZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjYXNlIEdfVE9LRU5fQklO QVJZOgogICAgICAgICAgICAgICAgICB1aTY0ID0gZ19hc2NpaV9zdHJ0b3VsbCAoZ3N0cmluZy0+ c3RyLCAmZW5kcHRyLCAyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg ICBjYXNlIEdfVE9LRU5fT0NUQUw6CiAgICAgICAgICAgICAgICAgIHVpNjQgPSBnX2FzY2lpX3N0 cnRvdWxsIChnc3RyaW5nLT5zdHIsICZlbmRwdHIsIDgpOwogICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgIGNhc2UgR19UT0tFTl9JTlQ6CiAgICAgICAgICAgICAgICAgIHVp NjQgPSBnX2FzY2lpX3N0cnRvdWxsIChnc3RyaW5nLT5zdHIsICZlbmRwdHIsIDEwKTsKICAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIEdfVE9LRU5fSEVYOgogICAg ICAgICAgICAgICAgICB1aTY0ID0gZ19hc2NpaV9zdHJ0b3VsbCAoZ3N0cmluZy0+c3RyLCAmZW5k cHRyLCAxNik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVs dDogOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzY2FubmVyLT5jb25maWct PnN0b3JlX2ludDY0KQogICAgICAgICAgICAgICAgdmFsdWUudl9pbnQ2NCA9IHVpNjQ7CiAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdmFsdWUudl9pbnQgPSB1aTY0OwogICAgICAg ICAgICB9CiAgICAgICAgICBpZiAoZW5kcHRyICYmICplbmRwdHIpCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICB0b2tlbiA9IEdfVE9LRU5fRVJST1I7CiAgICAgICAgICAgICAgaWYgKCplbmRw dHIgPT0gJ2UnIHx8ICplbmRwdHIgPT0gJ0UnKQogICAgICAgICAgICAgICAgdmFsdWUudl9lcnJv ciA9IEdfRVJSX05PTl9ESUdJVF9JTl9DT05TVDsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICB2YWx1ZS52X2Vycm9yID0gR19FUlJfRElHSVRfUkFESVg7CiAgICAgICAgICAgIH0K ICAgICAgICAgIGdfc3RyaW5nX2ZyZWUgKGdzdHJpbmcsICghKDApKSk7CiAgICAgICAgICBnc3Ry aW5nID0gKCh2b2lkICopMCk7CiAgICAgICAgICBjaCA9IDA7CiAgICAgICAgfQogICAgICAgIGJy ZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgIGRlZmF1bHRfY2FzZToKICAgICAgICB7CiAg ICAgICAgICBpZiAoY29uZmlnLT5jcGFpcl9jb21tZW50X3NpbmdsZSAmJgogICAgICAgICAgICAg IGNoID09IGNvbmZpZy0+Y3BhaXJfY29tbWVudF9zaW5nbGVbMF0pCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICB0b2tlbiA9IEdfVE9LRU5fQ09NTUVOVF9TSU5HTEU7CiAgICAgICAgICAgICAg aW5fY29tbWVudF9zaW5nbGUgPSAoISgwKSk7CiAgICAgICAgICAgICAgZ3N0cmluZyA9IGdfc3Ry aW5nX25ldyAoIiIpOwogICAgICAgICAgICAgIGNoID0gZ19zY2FubmVyX2dldF9jaGFyIChzY2Fu bmVyLCBsaW5lX3AsIHBvc2l0aW9uX3ApOwogICAgICAgICAgICAgIHdoaWxlIChjaCAhPSAwKQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gY29uZmlnLT5jcGFp cl9jb21tZW50X3NpbmdsZVsxXSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICBpbl9jb21tZW50X3NpbmdsZSA9ICgwKTsKICAgICAgICAgICAgICAgICAgICAgIGNo ID0gMDsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0K CiAgICAgICAgICAgICAgICAgIGdzdHJpbmcgPSBnX3N0cmluZ19hcHBlbmRfYyAoZ3N0cmluZywg Y2gpOwogICAgICAgICAgICAgICAgICBjaCA9IGdfc2Nhbm5lcl9nZXRfY2hhciAoc2Nhbm5lciwg bGluZV9wLCBwb3NpdGlvbl9wKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg ICAgICAgZWxzZSBpZiAoY29uZmlnLT5zY2FuX2lkZW50aWZpZXIgJiYgY2ggJiYKICAgICAgICAg ICAgICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoY2gpICYmIChj aCkgPT0gJ1wwJyA/IChjaGFyICopIF9fcmF3bWVtY2hyIChjb25maWctPmNzZXRfaWRlbnRpZmll cl9maXJzdCwgY2gpIDogc3RyY2hyIChjb25maWctPmNzZXRfaWRlbnRpZmllcl9maXJzdCwgY2gp KSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgaWRlbnRpZmllcl9wcmVjZWRlbmNlOgoKICAg ICAgICAgICAgICBpZiAoY29uZmlnLT5jc2V0X2lkZW50aWZpZXJfbnRoICYmIGNoICYmCiAgICAg ICAgICAgICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoZ19zY2Fu bmVyX3BlZWtfbmV4dF9jaGFyIChzY2FubmVyKSkgJiYgKGdfc2Nhbm5lcl9wZWVrX25leHRfY2hh ciAoc2Nhbm5lcikpID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNociAoY29uZmlnLT5jc2V0 X2lkZW50aWZpZXJfbnRoLCBnX3NjYW5uZXJfcGVla19uZXh0X2NoYXIgKHNjYW5uZXIpKSA6IHN0 cmNociAoY29uZmlnLT5jc2V0X2lkZW50aWZpZXJfbnRoLCBnX3NjYW5uZXJfcGVla19uZXh0X2No YXIgKHNjYW5uZXIpKSkpKQoKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgdG9r ZW4gPSBHX1RPS0VOX0lERU5USUZJRVI7CiAgICAgICAgICAgICAgICAgIGdzdHJpbmcgPSBnX3N0 cmluZ19uZXcgKCIiKTsKICAgICAgICAgICAgICAgICAgZ3N0cmluZyA9IGdfc3RyaW5nX2FwcGVu ZF9jIChnc3RyaW5nLCBjaCk7CiAgICAgICAgICAgICAgICAgIGRvCiAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgY2ggPSBnX3NjYW5uZXJfZ2V0X2NoYXIgKHNjYW5u ZXIsIGxpbmVfcCwgcG9zaXRpb25fcCk7CiAgICAgICAgICAgICAgICAgICAgICBnc3RyaW5nID0g Z19zdHJpbmdfYXBwZW5kX2MgKGdzdHJpbmcsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgIGNo ID0gZ19zY2FubmVyX3BlZWtfbmV4dF9jaGFyIChzY2FubmVyKTsKICAgICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgIHdoaWxlIChjaCAmJiAoX19leHRlbnNpb25fXyAoX19idWls dGluX2NvbnN0YW50X3AgKGNoKSAmJiAoY2gpID09ICdcMCcgPyAoY2hhciAqKSBfX3Jhd21lbWNo ciAoY29uZmlnLT5jc2V0X2lkZW50aWZpZXJfbnRoLCBjaCkgOiBzdHJjaHIgKGNvbmZpZy0+Y3Nl dF9pZGVudGlmaWVyX250aCwgY2gpKSkpOwogICAgICAgICAgICAgICAgICBjaCA9IDA7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlnLT5zY2FuX2lkZW50aWZp ZXJfMWNoYXIpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHRva2VuID0gR19U T0tFTl9JREVOVElGSUVSOwogICAgICAgICAgICAgICAgICB2YWx1ZS52X2lkZW50aWZpZXIgPSAo KGdjaGFyICopIGdfbWFsbG9jMCAoKChnc2l6ZSkgc2l6ZW9mIChnY2hhcikpICogKChnc2l6ZSkg KDIpKSkpOwogICAgICAgICAgICAgICAgICB2YWx1ZS52X2lkZW50aWZpZXJbMF0gPSBjaDsKICAg ICAgICAgICAgICAgICAgY2ggPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAg ICAgICAgICBpZiAoY2gpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoY29uZmlnLT5j aGFyXzJfdG9rZW4pCiAgICAgICAgICAgICAgICB0b2tlbiA9IGNoOwogICAgICAgICAgICAgIGVs c2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgdG9rZW4gPSBHX1RPS0VOX0NI QVI7CiAgICAgICAgICAgICAgICAgIHZhbHVlLnZfY2hhciA9IGNoOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgIGNoID0gMDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBi cmVhazsKICAgICAgICB9CiAgICAgICh2b2lkKSh7IGlmIChfX2J1aWx0aW5fZXhwZWN0IChfX2V4 dGVuc2lvbl9fICh7IGludCBfZ19ib29sZWFuX3Zhcl87IGlmIChjaCA9PSAwICYmIHRva2VuICE9 IEdfVE9LRU5fTk9ORSkgX2dfYm9vbGVhbl92YXJfID0gMTsgZWxzZSBfZ19ib29sZWFuX3Zhcl8g PSAwOyBfZ19ib29sZWFuX3Zhcl87IH0pLCAxKSkgeyB9IGVsc2UgZ19sb2cgKCJHTGliIiwgR19M T0dfTEVWRUxfRVJST1IsICJmaWxlICVzOiBsaW5lICVkICglcyk6IGFzc2VydGlvbiBmYWlsZWQ6 ICglcykiLCAiZ3NjYW5uZXIuYyIsIDE2NzMsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJjaCA9PSAw ICYmIHRva2VuICE9IEdfVE9LRU5fTk9ORSIpOyB9KTsKICAgIH0KICB3aGlsZSAoY2ggIT0gMCk7 CgogIGlmIChpbl9jb21tZW50X211bHRpIHx8IGluX2NvbW1lbnRfc2luZ2xlIHx8CiAgICAgIGlu X3N0cmluZ19zcSB8fCBpbl9zdHJpbmdfZHEpCiAgICB7CiAgICAgIHRva2VuID0gR19UT0tFTl9F UlJPUjsKICAgICAgaWYgKGdzdHJpbmcpCiAgICAgICAgewogICAgICAgICAgZ19zdHJpbmdfZnJl ZSAoZ3N0cmluZywgKCEoMCkpKTsKICAgICAgICAgIGdzdHJpbmcgPSAoKHZvaWQgKikwKTsKICAg ICAgICB9CiAgICAgICgqcG9zaXRpb25fcCkrKzsKICAgICAgaWYgKGluX2NvbW1lbnRfbXVsdGkg fHwgaW5fY29tbWVudF9zaW5nbGUpCiAgICAgICAgdmFsdWUudl9lcnJvciA9IEdfRVJSX1VORVhQ X0VPRl9JTl9DT01NRU5UOwogICAgICBlbHNlCiAgICAgICAgdmFsdWUudl9lcnJvciA9IEdfRVJS X1VORVhQX0VPRl9JTl9TVFJJTkc7CiAgICB9CgogIGlmIChnc3RyaW5nKQogICAgewogICAgICB2 YWx1ZS52X3N0cmluZyA9IGdzdHJpbmctPnN0cjsKICAgICAgZ19zdHJpbmdfZnJlZSAoZ3N0cmlu ZywgKDApKTsKICAgICAgZ3N0cmluZyA9ICgodm9pZCAqKTApOwogICAgfQoKICBpZiAodG9rZW4g PT0gR19UT0tFTl9JREVOVElGSUVSKQogICAgewogICAgICBpZiAoY29uZmlnLT5zY2FuX3N5bWJv bHMpCiAgICAgICAgewogICAgICAgICAgR1NjYW5uZXJLZXkgKmtleTsKICAgICAgICAgIGd1aW50 IHNjb3BlX2lkOwoKICAgICAgICAgIHNjb3BlX2lkID0gc2Nhbm5lci0+c2NvcGVfaWQ7CiAgICAg ICAgICBrZXkgPSBnX3NjYW5uZXJfbG9va3VwX2ludGVybmFsIChzY2FubmVyLCBzY29wZV9pZCwg dmFsdWUudl9pZGVudGlmaWVyKTsKICAgICAgICAgIGlmICgha2V5ICYmIHNjb3BlX2lkICYmIHNj YW5uZXItPmNvbmZpZy0+c2NvcGVfMF9mYWxsYmFjaykKICAgICAgICAgICAga2V5ID0gZ19zY2Fu bmVyX2xvb2t1cF9pbnRlcm5hbCAoc2Nhbm5lciwgMCwgdmFsdWUudl9pZGVudGlmaWVyKTsKCiAg ICAgICAgICBpZiAoa2V5KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZ19mcmVlICh2YWx1 ZS52X2lkZW50aWZpZXIpOwogICAgICAgICAgICAgIHRva2VuID0gR19UT0tFTl9TWU1CT0w7CiAg ICAgICAgICAgICAgdmFsdWUudl9zeW1ib2wgPSBrZXktPnZhbHVlOwogICAgICAgICAgICB9CiAg ICAgICAgfQoKICAgICAgaWYgKHRva2VuID09IEdfVE9LRU5fSURFTlRJRklFUiAmJgogICAgICAg ICAgY29uZmlnLT5zY2FuX2lkZW50aWZpZXJfTlVMTCAmJgogICAgICAgICAgc3RybGVuICh2YWx1 ZS52X2lkZW50aWZpZXIpID09IDQpCiAgICAgICAgewogICAgICAgICAgZ2NoYXIgKm51bGxfdXBw ZXIgPSAiTlVMTCI7CiAgICAgICAgICBnY2hhciAqbnVsbF9sb3dlciA9ICJudWxsIjsKCiAgICAg ICAgICBpZiAoc2Nhbm5lci0+Y29uZmlnLT5jYXNlX3NlbnNpdGl2ZSkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGlmICh2YWx1ZS52X2lkZW50aWZpZXJbMF0gPT0gbnVsbF91cHBlclswXSAm JgogICAgICAgICAgICAgICAgICB2YWx1ZS52X2lkZW50aWZpZXJbMV0gPT0gbnVsbF91cHBlclsx XSAmJgogICAgICAgICAgICAgICAgICB2YWx1ZS52X2lkZW50aWZpZXJbMl0gPT0gbnVsbF91cHBl clsyXSAmJgogICAgICAgICAgICAgICAgICB2YWx1ZS52X2lkZW50aWZpZXJbM10gPT0gbnVsbF91 cHBlclszXSkKICAgICAgICAgICAgICAgIHRva2VuID0gR19UT0tFTl9JREVOVElGSUVSX05VTEw7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAg IGlmICgodmFsdWUudl9pZGVudGlmaWVyWzBdID09IG51bGxfdXBwZXJbMF0gfHwKICAgICAgICAg ICAgICAgICAgIHZhbHVlLnZfaWRlbnRpZmllclswXSA9PSBudWxsX2xvd2VyWzBdKSAmJgogICAg ICAgICAgICAgICAgICAodmFsdWUudl9pZGVudGlmaWVyWzFdID09IG51bGxfdXBwZXJbMV0gfHwK ICAgICAgICAgICAgICAgICAgIHZhbHVlLnZfaWRlbnRpZmllclsxXSA9PSBudWxsX2xvd2VyWzFd KSAmJgogICAgICAgICAgICAgICAgICAodmFsdWUudl9pZGVudGlmaWVyWzJdID09IG51bGxfdXBw ZXJbMl0gfHwKICAgICAgICAgICAgICAgICAgIHZhbHVlLnZfaWRlbnRpZmllclsyXSA9PSBudWxs X2xvd2VyWzJdKSAmJgogICAgICAgICAgICAgICAgICAodmFsdWUudl9pZGVudGlmaWVyWzNdID09 IG51bGxfdXBwZXJbM10gfHwKICAgICAgICAgICAgICAgICAgIHZhbHVlLnZfaWRlbnRpZmllclsz XSA9PSBudWxsX2xvd2VyWzNdKSkKICAgICAgICAgICAgICAgIHRva2VuID0gR19UT0tFTl9JREVO VElGSUVSX05VTEw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICp0b2tlbl9wID0g dG9rZW47CiAgKnZhbHVlX3AgPSB2YWx1ZTsKfQo=