From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25589 invoked by alias); 30 Apr 2002 04:06: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 25572 invoked by uid 71); 30 Apr 2002 04:06:01 -0000 Resent-Date: 30 Apr 2002 04:06:01 -0000 Resent-Message-ID: <20020430040601.25570.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, nick.orlov@mail.ru Received:(qmail 23954 invoked by uid 61); 30 Apr 2002 03:56:06 -0000 Message-Id:<20020430035606.23953.qmail@sources.redhat.com> Date: Mon, 29 Apr 2002 21:06:00 -0000 From: nick.orlov@mail.ru Reply-To: nick.orlov@mail.ru To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version:gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/6513: sigfaults on trivial code X-SW-Source: 2002-04/txt/msg01618.txt.bz2 List-Id: >Number: 6513 >Category: c++ >Synopsis: sigfaults on trivial code >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: wrong-code >Submitter-Id: net >Arrival-Date: Mon Apr 29 21:06:00 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Nick Orlov >Release: gcc version 3.1 20020429 (prerelease) >Organization: >Environment: i686-linux, binutils 2.12.90.0.1 Configured with: ./configure --enable-languages=c,c++ --prefix=/opt --program-suffix=-3.1 --with-gnu-as --with-gnu-ld --enable-shared --enable-threads=posix --enable-long-long --enable-nls --without-included-gettext i386-linux >Description: Program always segfaults on vector constructor. Doublecheked with 0422 & 0415 snapshots (segfaults also). Same code compiled with g++-2.95.3 / g++-3.0.4 runs fine. ======================================== #include #include using namespace std; int main() { const char* c_strings[5] = { "1", "2", "3", "4", "5" }; vector strings(c_strings, c_strings + 5); return 0; } ======================================== backtrace: #0 std::string::operator=(char const*) (this=0x8049fc0, __s=0x8048b20 "1") at /opt/src/build/gcc/i386-linux/libstdc++-v3/include/bits/basic_string.h:154 #1 0x08048abc in __copy (__first=0xbffffa14, __last=0xbffffa28, __result=0x8049fc0) at /usr/local/include/g++-v3/bits/stl_algobase.h:241 #2 0x08048a8b in __copy_aux2 (__first=0xbffffa14, __last=0xbffffa28, __result=0x8049fc0) at /usr/local/include/g++-v3/bits/stl_algobase.h:266 #3 0x08048a58 in __copy_ni2 (__first=0xbffffa14, __last=0xbffffa28, __result=0x8049fc0) at /usr/local/include/g++-v3/bits/stl_algobase.h:303 #4 0x08048a34 in __copy_ni1 (__first=0xbffffa14, __last=0xbffffa28, __result=0x8049fc0) at /usr/local/include/g++-v3/bits/stl_algobase.h:323 #5 0x08048a10 in copy (__first=0xbffffa14, __last=0xbffffa28, __result=0x8049fc0) at /usr/local/include/g++-v3/bits/stl_algobase.h:349 #6 0x080489ed in __uninitialized_copy_aux ( __first=0xbffffa14, __last=0xbffffa28, __result=0x8049fc0) at /usr/local/include/g++-v3/bits/stl_uninitialized.h:76 #7 0x0804896c in uninitialized_copy ( __first=0xbffffa14, __last=0xbffffa28, __result=0x8049fc0) ======================================== P.S. I'm not sure if it is g++ or libstdc++ bug. >How-To-Repeat: g++ -o test test.cpp; ./test >Fix: I have no idea >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="main.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="main.ii" IyAxICJtYWluLmNwcCIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21tYW5kIGxpbmU+IgojIDEg Im1haW4uY3BwIgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvdmVjdG9yIiAxIDMKIyA2 NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My92ZWN0b3IiIDMKCiMgMSAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lk CiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Fs bG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBf X3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihj b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hh ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBf X3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf X3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df cmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3df ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9y KGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBj aGFyKiBfX3MpOwp9CiMgNjcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvdmVjdG9yIiAyIDMK IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwoj IDY0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKIyAx ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2kzODYtbGludXgvYml0cy9jKytjb25maWcuaCIg MSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTM4Ni1saW51eC9iaXRzL2MrK2Nv bmZpZy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pMzg2LWxpbnV4L2JpdHMv b3NfZGVmaW5lcy5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pMzg2LWxp bnV4L2JpdHMvb3NfZGVmaW5lcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEg MwojIDI4MyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lz L2NkZWZzLmgiIDEgMwojIDI4NCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDMxMiAi L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgi IDEgMwojIDMxMyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDQwICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2kzODYtbGludXgvYml0cy9vc19kZWZpbmVzLmgiIDIgMwojIDM1ICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2kzODYtbGludXgvYml0cy9jKytjb25maWcuaCIgMiAz CiMgNjUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAz CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9jc3RyaW5nIiAxIDMKIyA0OCAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9jc3RyaW5nIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvY3N0ZGRlZiIgMSAzCiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvY3N0ZGRl ZiIgMwoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUv c3RkZGVmLmgiIDEgMwojIDE0NyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMu MS9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAyMDEgIi91c3Iv bG9jYWwvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBl ZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgNDkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv Y3N0ZGRlZiIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsKICB1c2lu ZyA6OnNpemVfdDsKfQojIDUwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2NzdHJpbmciIDIg MwoKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3Ry aW5nLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4 Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdHJp bmcuaCIgMiAzCgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0 LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNp emVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rlc3Qs IF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQg Kl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3Qg X19uKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBp bnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25z dCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19j b25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHZvaWQgKnJhd21lbWNociAoX19jb25z dCB2b2lkICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6 ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpl eHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkg KGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hh ciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9f cmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNtcCAo X19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hh ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBj aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3Qg X19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2Fs ZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBf X2xvY2FsZV9zdHJ1Y3QKewoKICBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoK ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5 cGVfdG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsK IyAxMDkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKZXh0ZXJuIGludCBfX3N0cmNvbGxf bCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIF9fbG9jYWxlX3QgX19s KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVf dCBfX3N0cnhmcm1fbCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3Qg X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9f Y29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNTUgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRl cm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBj aGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJj c3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAo X19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25z dCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIg Kl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0 IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19z LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVs aW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRy KSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3Ms IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9p ZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrbGVu LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19u ZWVkbGVsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4 dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p IHRocm93ICgpOwpleHRlcm4gdm9pZCAqbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3Qs CiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNp emVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hh ciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBz aXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIg KnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc3RyZXJy b3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAo KTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cg KCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rl c3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3Ms IHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpf X3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIg Kl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0 ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBmZnNsIChs b25nIGludCBfX2wpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0 ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGludCBfX2xsKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgc3RyY2FzZWNt cCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19j b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX3N0cmNh c2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBfX3N0cm5jYXNlY21wX2wgKF9fY29uc3QgY2hh ciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmlj dCBfX3N0cmluZ3AsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2RlbGltKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBj aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSB0aHJv dyAoKTsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBjaGFy ICpzdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cG5jcHkgKGNoYXIg Kl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3Rw bmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy biBjaGFyICpzdHJmcnkgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAq bWVtZnJvYiAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNo YXIgKmJhc2VuYW1lIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwojIDM2NCAi L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KIyA1MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9jc3RyaW5nIiAyIDMKIyA3NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9jc3RyaW5nIiAz Cm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWVtY3B5OwogIHVzaW5nIDo6bWVtbW92ZTsKICB1 c2luZyA6OnN0cmNweTsKICB1c2luZyA6OnN0cm5jcHk7CiAgdXNpbmcgOjpzdHJjYXQ7CiAgdXNp bmcgOjpzdHJuY2F0OwogIHVzaW5nIDo6bWVtY21wOwogIHVzaW5nIDo6c3RyY21wOwogIHVzaW5n IDo6c3RyY29sbDsKICB1c2luZyA6OnN0cm5jbXA7CiAgdXNpbmcgOjpzdHJ4ZnJtOwogIHVzaW5n IDo6c3RyY3NwbjsKICB1c2luZyA6OnN0cnNwbjsKICB1c2luZyA6OnN0cnRvazsKICB1c2luZyA6 Om1lbXNldDsKICB1c2luZyA6OnN0cmVycm9yOwogIHVzaW5nIDo6c3RybGVuOwoKICB1c2luZyA6 Om1lbWNocjsKCiAgaW5saW5lIHZvaWQqCiAgbWVtY2hyKHZvaWQqIF9fcCwgaW50IF9fYywgc2l6 ZV90IF9fbikKICB7IHJldHVybiBtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB2b2lkKj4oX19wKSwg X19jLCBfX24pOyB9CgogIHVzaW5nIDo6c3RyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJjaHIo Y2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RyY2hyKGNvbnN0X2Nh c3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3RycGJyazsKCiAgaW5s aW5lIGNoYXIqCiAgc3RycGJyayhjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0 dXJuIF9fYnVpbHRpbl9zdHJwYnJrKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3My KTsgfQoKICB1c2luZyA6OnN0cnJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cnJjaHIoY2hhciog X19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycmNocihjb25zdF9jYXN0PGNv bnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnN0cjsKCiAgaW5saW5lIGNo YXIqCiAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19i dWlsdGluX3N0cnN0cihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KfQoj IDY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoj IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvY2xpbWl0cyIgMSAzCiMgNDggIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvY2xpbWl0cyIgMwoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli L2kzODYtbGludXgvMy4xL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2xvY2FsL2xp Yi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwoK CgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9s aW1pdHMuaCIgMSAzCiMgMTMyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4x L2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDE0 NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgx X2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2Jp dHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMwoj IDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3ICIvdXNyL2luY2x1 ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAy IDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEgMwojIDE0OSAiL3Vz ci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9s aW0uaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYml0cy94 b3Blbl9saW0uaCIgMiAzCiMgMTM2ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDEzNyAiL3Vzci9pbmNsdWRl L2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMK IyAxMzMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9saW1p dHMuaCIgMiAzCiMgOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNs dWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LWxp bnV4LzMuMS9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9jbGltaXRzIiAyIDMKIyA2NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2NzdGRsaWIi IDEgMwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2NzdGRsaWIiIDMKCgoKCiMgMSAi L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCmV4dGVybiAiQyIgewoK CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRmbGFncy5oIiAxIDMKIyA0MyAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgi IDEgMwojIDYzICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZW5kaWFuLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4u aCIgMiAzCiMgNjQgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMiAzCgp1bmlvbiB3 YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5z aWduZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19jb3JlZHVt cDoxOwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0Y29kZTo4OwogICAgICAgIHVuc2lnbmVk IGludDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rlcm1pbmF0ZWQ7CiAgICBzdHJ1Y3QKICAg ICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3B2YWw6ODsKICAgICAgICB1bnNpZ25l ZCBpbnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCiAgICAg IH0gX193YWl0X3N0b3BwZWQ7CiAgfTsKIyA0NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMK IyA5NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50 IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0gZGl2X3Q7CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAg bG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgaW50IHJlbTsKICB9IGxkaXZfdDsKCgoKCgpfX2V4dGVu c2lvbl9fIHR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBsb25nIGludCBxdW90OwogICAgbG9u ZyBsb25nIGludCByZW07CiAgfSBsbGRpdl90OwojIDEzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkgdGhyb3cgKCk7 CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBhdG9pIChfX2NvbnN0IGNoYXIg Kl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gbG9u ZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xs IChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpleHRlcm4g dW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVy biBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25n IGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVy biBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxv bmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKIyAyMTUgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfbCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0 b3VsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xv YykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9s bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAo KTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3Vs bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9j YWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2wgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cg KCk7CgpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRv bGRfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu IGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQgX19zdHJ0b2Zf aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3Vw KQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKZXh0ZXJuIGxv bmcgaW50IF9fc3RydG9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGlu dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91 bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jh c2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcg bG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRl cm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChfX2NvbnN0IGNo YXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3Vw KQogICAgIHRocm93ICgpOwojIDM4NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBj aGFyICpsNjRhIChsb25nIGludCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBhNjRs IChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUv c3lzL3R5cGVzLmgiIDMKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz LmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9sb2Nh bC9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAi L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9f dV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNp b25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNp b25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9i aXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNp Z25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsK dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50 IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9u X18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18g dHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVh ZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3Vf aW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9f aW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtf dDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0 eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgX191X2xv bmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0eXBlZGVmIF9fdV9p bnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2Zz aWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0 eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRz X3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3 YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVmIGludCBfX2Nsb2Nr aWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7 CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKCnR5cGVkZWYgbG9u ZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVk ZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90 Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBf X2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsKCgp0eXBlZGVm IF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKCnR5 cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9f dF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVk IGludCBfX3NvY2tsZW5fdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hl ZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7 CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIgMwoKdHlwZWRl ZiBpbnQgX19hdG9taWNfbG9ja190OwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9u ZyBpbnQgX19zdGF0dXM7CiAgX19hdG9taWNfbG9ja190IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBl ZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5 cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGlu dCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBp bnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwog IGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3Rh Y2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9w dGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9 IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRo cmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoK CgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsK ICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRo cmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3Ry dWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRl ZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tf dAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndfbG9jazsKICBpbnQgX19yd19yZWFk ZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndf cmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQg X19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2tfdDsKCgoKdHlw ZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5kOwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVh ZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZvbGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2Nr X3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2JhX2xv Y2s7CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50IF9fYmFfcHJlc2VudDsKICBfcHRocmVhZF9k ZXNjciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVhZF9iYXJyaWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3Qg ewogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9iYXJyaWVyYXR0cl90OwoKCgoKCnR5cGVkZWYg dW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDE0NCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw ZXMuaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYg X191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9p bnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRf dDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsK CgoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoK CgoKCnR5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7 CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsK CgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7 CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2 NF90OwoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsK CgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFk ZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJfdDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5 X3Q7CiMgMTMyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv dGltZS5oIiAxIDMKIyA1OSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fY2xvY2tf dCBjbG9ja190OwojIDcwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX190aW1lX3Qg dGltZV90OwojIDgyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX19jbG9ja2lkX3Qg Y2xvY2tpZF90OwojIDk0ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5cGVkZWYgX190aW1lcl90 IHRpbWVyX3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVm IF9fdXNlY29uZHNfdCB1c2Vjb25kc190OwoKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNv bmRzX3Q7CgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4xL2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMK CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9y dCBpbnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE5MCAiL3Vzci9pbmNs dWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19t b2RlX18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0dHJp YnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQx Nl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVk IGludCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVk ZWYgdW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElf XykpKTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChf X3dvcmRfXykpKTsKIyAyMTUgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2luY2x1 ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAx IDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKdHlwZWRlZiBpbnQgX19zaWdf YXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9f dmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2ln c2V0X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgp0eXBlZGVmIF9f c2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAx MDYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRpbWVzcGVjCiAgewogICAgX190aW1l X3QgdHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9OwojIDQ1ICIvdXNyL2luY2x1ZGUv c3lzL3NlbGVjdC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA2 NyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCnN0cnVjdCB0aW1ldmFsCiAgewogICAgX190 aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07CiMgNDcgIi91c3Iv aW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwojIDU1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o IiAzCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7 CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2sp KV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKIyA5 NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgoKZXh0ZXJu IGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAg ICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAg ICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAg ICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91dCkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFk ZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAog ICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAg ICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0 LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdt YXNrKSB0aHJvdyAoKTsKCgp9CiMgMjE2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoK CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMjE5ICIvdXNyL2luY2x1 ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7CgoK CgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3Qg ZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTcgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90 Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250 NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDM5MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMK CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRvbSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZv aWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNo YXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgpleHRl cm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3Ry dWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7 CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7 CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50 IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAg ICAgICAgICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0 ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0 YSAqX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50 IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJh bmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2V0c3Rh dGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGludCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25l ZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGlu dCAqX19zZWVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkg dGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1 YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAo KTsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNd KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4 dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhy b3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAo KTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg X19zZWVkMTZ2WzNdKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hv cnQgaW50IF9fcGFyYW1bN10pIHRocm93ICgpOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7 CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9f b2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hvcnQg aW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0ZXJu IGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIs CiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93 ICgpOwpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10s CiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9f YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0 KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAq X19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jl c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVk IHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5k NDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcg aW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1yYW5kNDhf ciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAg ICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJu IGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAg ICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJh bmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2VlZDQ4X3Ig KHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sCiAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgbGNvbmc0 OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKIyA1MjcgIi91c3IvaW5j bHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3QgX19zaXplKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgKmNhbGxvYyAo c2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmVhbGxvYyAodm9pZCAqX19wdHIs IHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7Cgpl eHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNm cmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5o IiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyNiAiL3Vzci9p bmNsdWRlL2FsbG9jYS5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCmV4dGVybiB2b2lkICphbGxv Y2EgKHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCn0KIyA1NDcgIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXplX3QgX19zaXplKSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBwb3NpeF9t ZW1hbGlnbiAodm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGlnbm1lbnQsIHNpemVfdCBfX3Np emUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJu IHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18p KTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZv aWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg ZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f KSk7CgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0 IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYg KF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAo Y2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0 IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAg IHRocm93ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0 aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgdGhyb3cgKCk7CiMgNjIz ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAqX190 ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVt cGxhdGUpIHRocm93ICgpOwojIDY0MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBp bnQgbWtzdGVtcDY0IChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2NTAgIi91c3IvaW5j bHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQp IHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoX19j b25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDY3MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFt ZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRo cm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQg KiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJpc29uX2Zu X3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29uc3Qgdm9pZCAqX19rZXksIF9fY29u c3Qgdm9pZCAqX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbm1lbWIsIHNp emVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4gdm9pZCBxc29y dCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAg ICAgICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4gaW50IGFicyAoaW50 IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBp bnQgbGFicyAobG9uZyBpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGxsYWJzIChsb25nIGxvbmcg aW50IF9feCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoK CmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBp bnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2IChsb25n IGxvbmcgaW50IF9fbnVtZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv bmcgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CiMgNzI4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmVjdnQg KGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAog ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpl eHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jl c3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWdu KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9f bmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcWVjdnQgKGxv bmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQg Kl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4 dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAg ICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3Qg X19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVl LCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZWN2 dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNw dCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVz dHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwpl eHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jl c3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWdu LCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVu KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcWVjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50 IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBp bnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJp Y3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgcWZjdnRfciAobG9u ZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAq X19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAg ICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoK CgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24p IHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hh cikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNo YXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgoK ZXh0ZXJuIGludCBycG1hdGNoIChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwoj IDgwOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFy ICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX2Nv bnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldGtleSAoX19j b25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHBvc2l4X29wZW5w dCAoaW50IF9fb2ZsYWcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQg X19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5sb2NrcHQgKGludCBfX2ZkKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxl bikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRwdCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhy b3cgKCk7CgoKCgoKfQojIDUzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2NzdGRsaWIiIDIg MwojIDg0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2NzdGRsaWIiIDMKbmFtZXNwYWNlIHN0 ZAp7CiAgdXNpbmcgOjpkaXZfdDsKICB1c2luZyA6OmxkaXZfdDsKCiAgdXNpbmcgOjphYm9ydDsK ICB1c2luZyA6OmFiczsKICB1c2luZyA6OmF0ZXhpdDsKICB1c2luZyA6OmF0b2Y7CiAgdXNpbmcg OjphdG9pOwogIHVzaW5nIDo6YXRvbDsKICB1c2luZyA6OmJzZWFyY2g7CiAgdXNpbmcgOjpjYWxs b2M7CiAgdXNpbmcgOjpkaXY7CiAgdXNpbmcgOjpleGl0OwogIHVzaW5nIDo6ZnJlZTsKICB1c2lu ZyA6OmdldGVudjsKICB1c2luZyA6OmxhYnM7CiAgdXNpbmcgOjpsZGl2OwogIHVzaW5nIDo6bWFs bG9jOwogIHVzaW5nIDo6bWJsZW47CiAgdXNpbmcgOjptYnN0b3djczsKICB1c2luZyA6Om1idG93 YzsKICB1c2luZyA6OnFzb3J0OwogIHVzaW5nIDo6cmFuZDsKICB1c2luZyA6OnJlYWxsb2M7CiAg dXNpbmcgOjpzcmFuZDsKICB1c2luZyA6OnN0cnRvZDsKICB1c2luZyA6OnN0cnRvbDsKICB1c2lu ZyA6OnN0cnRvdWw7CiAgdXNpbmcgOjpzeXN0ZW07CiAgdXNpbmcgOjp3Y3N0b21iczsKICB1c2lu ZyA6OndjdG9tYjsKCiAgaW5saW5lIGxvbmcKICBhYnMobG9uZyBfX2kpIHsgcmV0dXJuIGxhYnMo X19pKTsgfQoKICBpbmxpbmUgbGRpdl90CiAgZGl2KGxvbmcgX19pLCBsb25nIF9faikgeyByZXR1 cm4gbGRpdihfX2ksIF9faik7IH0KfQojIDEzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9j c3RkbGliIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6bGxkaXZfdDsKICB1c2lu ZyA6Ol9FeGl0OwoKICBpbmxpbmUgbG9uZyBsb25nCiAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0 dXJuIF9feCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbG9uZyBsb25nCiAgbGxhYnMo bG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGlu ZSBsbGRpdl90CiAgZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90 IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBf X3E7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBsbGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcg X19kKQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19u ICUgX19kOyByZXR1cm4gX19xOyB9CgogIHVzaW5nIDo6YXRvbGw7CiAgdXNpbmcgOjpzdHJ0b2Y7 CiAgdXNpbmcgOjpzdHJ0b2xsOwogIHVzaW5nIDo6c3RydG91bGw7CiAgdXNpbmcgOjpzdHJ0b2xk Owp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2X3Q7CiAgdXNpbmcg X19nbnVfY3h4OjpfRXhpdDsKICB1c2luZyBfX2dudV9jeHg6OmFiczsKICB1c2luZyBfX2dudV9j eHg6OmxsYWJzOwogIHVzaW5nIF9fZ251X2N4eDo6ZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6bGxk aXY7CiAgdXNpbmcgX19nbnVfY3h4OjphdG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvZjsK ICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b3VsbDsK ICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGQ7Cn0KIyA2OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9uZXciIDEgMwojIDQyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL25ldyIgMwojIDEg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAxIDMKIyA0MCAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBz dGQKewoKCgoKCgogIGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNlcHRpb24o KSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKCgogICAgdmly dHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNsYXNzIGJh ZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9leGNl cHRpb24oKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhyb3co KTsKICB9OwoKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoKICB0eXBl ZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hhbmRsZXIg c2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdGVybWlu YXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3RlZF9oYW5k bGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQg dW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA5OCAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDMKICBib29sIHVuY2F1Z2h0X2V4Y2VwdGlv bigpIHRocm93KCk7Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewojIDExMSAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9leGNlcHRpb24iIDMKICB2b2lkIF9fdmVyYm9zZV90ZXJtaW5hdGVfaGFu ZGxlciAoKTsKfQoKfQojIDQzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL25ldyIgMiAzCgpl eHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJs aWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9CgoK ICAgIHZpcnR1YWwgfmJhZF9hbGxvYygpIHRocm93KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3df dCB7IH07CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OwoKCiAgdHlwZWRlZiB2b2lk ICgqbmV3X2hhbmRsZXIpKCk7CgogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFu ZGxlcik7Cn0KIyA3OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9uZXciIDMKdm9pZCogb3Bl cmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkKiBvcGVy YXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVy YXRvciBkZWxldGUodm9pZCopIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCop IHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Ro cm93X3QmKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qg c3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgY29u c3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQq LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgoKaW5saW5lIHZvaWQqIG9wZXJhdG9y IG5ldyhzdGQ6OnNpemVfdCwgdm9pZCogX19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQppbmxp bmUgdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7 IHJldHVybiBfX3A7IH0KCn0KIyA3MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2lvc2Z3ZCIg MSAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaW9zZndkIiAzCgoKIyAxICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDQzICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7 CiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNoYXJfdHJhaXRzOwoKICB0ZW1w bGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPjsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hh cl90cmFpdHM8d2NoYXJfdD47CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFz cyBhbGxvY2F0b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxs b2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nOwoKICB0eXBlZGVmIGJhc2lj X3N0cmluZzxjaGFyPiBzdHJpbmc7CiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8d2NoYXJfdD4gd3N0 cmluZzsKfQojIDQ2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2lvc2Z3ZCIgMiAzCiMgMSAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMSAzCiMgNDMgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9mcG9zLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9pMzg2LWxpbnV4L2JpdHMvYysraW8uaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvaTM4Ni1saW51eC9iaXRzL2MrK2lvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2NzdGRpbyIgMSAzCiMgNDggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv Y3N0ZGlvIiAzCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEv aW5jbHVkZS9zdGRpby5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LWxp bnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9sb2Nh bC9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0NCAi L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDIg MwojIDU0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3Rk aW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwojIDY0ICIvdXNyL2xvY2FsL2xp Yi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVj dCBfSU9fRklMRSBfX0ZJTEU7CiMgNzQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1saW51 eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMwoj IDMyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcu aCIgMSAzCiMgMTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvbG9jYWwv bGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIxICIv dXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDMK dHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmln LmgiIDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9s b2NhbC9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0 OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hh ci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDY3ICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7 CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19t YnN0YXRlX3Q7CiMgMjUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgp0eXBlZGVmIHN0 cnVjdAp7CiAgX19vZmZfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwp9IF9HX2Zwb3Nf dDsKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmNjRfdCBfX3BvczsKICBfX21ic3RhdGVfdCBfX3N0 YXRlOwp9IF9HX2Zwb3M2NF90OwojIDQ0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9p bmNsdWRlL2djb252LmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LWxp bnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2djb252Lmgi IDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9f R0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9f R0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5D T01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9J TlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAg X19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7 CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsK c3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkg KHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3Qg dW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hh ciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9m Y3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9m Y3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJh bnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2ln bmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7 CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBl ZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29u c3QgY2hhciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl X3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwg Y29uc3QgY2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9p ZCAqKTsKCnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBf X3RyYW5zX2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9m Y3Q7CiAgX19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2Rh dGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19n Y29udl9zdGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRs ZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAq X19mcm9tX25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBf X2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsK CgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGlu dCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRl ZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAg dW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoK CiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBf X2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9f c3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlw ZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9f Z2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBf ZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZp Zy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0 cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252 X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVm IGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBl ZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0 eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g KF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVf XyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMK IyA1MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli L2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvdXNyL2xvY2FsL2xp Yi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1 aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi IDIgMwojIDE2MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0 cnVjdCBfSU9fRklMRTsKIyAxNzAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9p ZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtl ciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTMg Ii91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBf X2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9f Y29kZWN2dF9ub2NvbnYKfTsKCgoKCnN0cnVjdCBfSU9fY29kZWN2dAp7CiAgdm9pZCAoKl9fY29k ZWN2dF9kZXN0cikgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBlbnVtIF9fY29kZWN2dF9yZXN1 bHQgKCpfX2NvZGVjdnRfZG9fb3V0KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hh cl90ICoqLCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0 X2RvX3Vuc2hpZnQpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICosIGNoYXIgKiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAq Kik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX2luKSAoc3RydWN0IF9J T19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqLCB3Y2hhcl90ICosCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqLCB3Y2hhcl90ICoqKTsKICBp bnQgKCpfX2NvZGVjdnRfZG9fZW5jb2RpbmcpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50 ICgqX19jb2RlY3Z0X2RvX2Fsd2F5c19ub2NvbnYpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAg aW50ICgqX19jb2RlY3Z0X2RvX2xlbmd0aCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLCBfX21ic3Rh dGVfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0 IGNoYXIgKiwgc2l6ZV90KTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fbWF4X2xlbmd0aCkgKHN0cnVj dCBfSU9fY29kZWN2dCAqKTsKCiAgX0dfaWNvbnZfdCBfX2NkX2luOwogIF9HX2ljb252X3QgX19j ZF9vdXQ7Cn07CgoKc3RydWN0IF9JT193aWRlX2RhdGEKewogIHdjaGFyX3QgKl9JT19yZWFkX3B0 cjsKICB3Y2hhcl90ICpfSU9fcmVhZF9lbmQ7CiAgd2NoYXJfdCAqX0lPX3JlYWRfYmFzZTsKICB3 Y2hhcl90ICpfSU9fd3JpdGVfYmFzZTsKICB3Y2hhcl90ICpfSU9fd3JpdGVfcHRyOwogIHdjaGFy X3QgKl9JT193cml0ZV9lbmQ7CiAgd2NoYXJfdCAqX0lPX2J1Zl9iYXNlOwogIHdjaGFyX3QgKl9J T19idWZfZW5kOwoKICB3Y2hhcl90ICpfSU9fc2F2ZV9iYXNlOwogIHdjaGFyX3QgKl9JT19iYWNr dXBfYmFzZTsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfZW5kOwoKICBfX21ic3RhdGVfdCBfSU9fc3Rh dGU7CiAgX19tYnN0YXRlX3QgX0lPX2xhc3Rfc3RhdGU7CiAgc3RydWN0IF9JT19jb2RlY3Z0IF9j b2RlY3Z0OwoKICB3Y2hhcl90IF9zaG9ydGJ1ZlsxXTsKCiAgc3RydWN0IF9JT19qdW1wX3QgKl93 aWRlX3Z0YWJsZTsKfTsKCgpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNo YXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRf YmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNo YXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZf ZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBj aGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3Ry dWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBf X29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNp Z25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19s b2NrX3QgKl9sb2NrOwojIDMwNSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKICBfX29mZjY0X3Qg X29mZnNldDsKCgogIHN0cnVjdCBfSU9fY29kZWN2dCAqX2NvZGVjdnQ7CiAgc3RydWN0IF9JT193 aWRlX2RhdGEgKl93aWRlX2RhdGE7CgoKCgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsx NSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgoKCgpzdHJ1Y3Qg X0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGlu XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0 cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsKIyAzNDQgIi91c3IvaW5jbHVkZS9s aWJpby5oIiAzCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUs IGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3Qg X19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBp bnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9f dyk7CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAqX19jb29raWUpOwoKCgoKdHlw ZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dy aXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29r aWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1 bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lv X3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAq Y2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lv X2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsKCnN0cnVjdCBfSU9fY29va2llX2Zp bGU7CgoKZXh0ZXJuIHZvaWQgX0lPX2Nvb2tpZV9pbml0IChzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxl ICpfX2NmaWxlLCBpbnQgX19yZWFkX3dyaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZvaWQgKl9fY29va2llLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9fZm5zKTsKCgoKCmV4 dGVybiAiQyIgewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgp OwpleHRlcm4gaW50IF9fdWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9f b3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dW5k ZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lP X0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICos IHdpbnRfdCkgdGhyb3cgKCk7CiMgNDI2ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4g aW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3B1 dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVv ZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19G SUxFICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAoX0lPX0ZJ TEUgKl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19G SUxFICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnVubG9ja2ZpbGUgKF9JT19GSUxFICop IHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93 ICgpOwojIDQ1NiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2Fu ZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKICAgICAg ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cg KCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3Qg Y2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0 KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBf X3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwg dm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAo X0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGludCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0 X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4 dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgpl eHRlcm4gd2ludF90IF9JT19nZXR3YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4g d2ludF90IF9JT19wdXR3YyAod2NoYXJfdCBfX3djLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7 CmV4dGVybiBpbnQgX0lPX2Z3aWRlIChfSU9fRklMRSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cg KCk7CiMgNTA1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZndzY2Fu ZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRo cm93ICgpOwpleHRlcm4gaW50IF9JT192ZndwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBj b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251 Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fd3BhZG4gKF9JT19GSUxF ICosIHdpbnRfdCwgX19zc2l6ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfd2Jh Y2t1cF9hcmVhIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgoKfQojIDc1ICIvdXNyL2xvY2FsL2xp Yi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0eXBlZGVm IF9fZ251Y192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA4OSAiL3Vzci9sb2NhbC9saWIvZ2Nj LWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBfR19mcG9zX3Qg ZnBvc190OwoKCgoKdHlwZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxMzggIi91c3IvbG9j YWwvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDEzOSAiL3Vzci9sb2NhbC9saWIvZ2Nj LWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gRklMRSAq c3RkaW47CmV4dGVybiBGSUxFICpzdGRvdXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7CgoKCgoKCmV4 dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwoKZXh0 ZXJuIGludCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcp IHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE2 NyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgi IDMKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIg KnRtcG5hbSAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICp0bXBuYW1fciAo Y2hhciAqX19zKSB0aHJvdyAoKTsKIyAxODcgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1s aW51eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0 IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJl YW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBmZmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g RklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsK CmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFt ZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVz LAogICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg KCk7CiMgMjMxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUv c3RkaW8uaCIgMwpleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVuNjQgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqZmRvcGVuIChp bnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklM RSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lvX2Z1bmNz KSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9f bGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKm9w ZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9f cmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNldHZidWYgKEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAg ICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQg c2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9f YnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4 dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7Cgpl eHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p IHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19n bnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRo cm93ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVj X3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpf X3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNu cHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFf bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w cmludGZfXywgMywgMCkpKTsKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVz dHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2YsCiAgICAgICAgICAgICAg ICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBfX2FzcHJpbnRm IChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50ZiAo Y2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBpbnQgdmRwcmludGYgKGlu dCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAgICAgICAgICAgICAgICAg ICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYgKGludCBf X2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoKCmV4dGVy biBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0 ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRo cm93ICgpOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ms CiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u LikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3Ms IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBf X2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5mIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDApKSk7CgoKZXh0 ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xp c3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2Nh bmZfXywgMiwgMCkpKTsKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0Y191bmxv Y2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2Nr ZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywgRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpOwoK CgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0p IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpf X3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK CgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBGSUxF ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZmdl dHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgNDM1ICIvdXNyL2xvY2Fs L2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19z c2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGlt aXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0pIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0 cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jl c3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBfX3NzaXplX3Qg Z2V0bGluZSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBm cHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHV0cyAoX19jb25z dCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50IF9fYywgRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jl c3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qg ZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykgdGhy b3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3Qg X19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gc2l6ZV90 IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3Qg X19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxF ICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRl cm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lk IHJld2luZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDQ5OCAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vl a28gKEZJTEUgKl9fc3RyZWFtLCBfX29mZl90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgp OwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jl c3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpf X3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1MzIgIi91c3IvbG9j YWwvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBp bnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5j ZSkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0s IGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZz ZXRwb3M2NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4 dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJy b3IgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5s b2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2Vk IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3Qg Y2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2Nv bnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsK ZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4g aW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxl bm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUg KnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK CgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVy biBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7 CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3Qg X19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRm IChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpIHRocm93ICgpOwoKCgoKCgoK ZXh0ZXJuIHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZv aWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2NDIgIi91c3IvbG9j YWwvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCn0KIyA1MyAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9jc3RkaW8iIDIgMwojIDk3ICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2NzdGRpbyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OkZJTEU7CiAg dXNpbmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAgdXNpbmcgOjpmY2xvc2U7CiAg dXNpbmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVycm9yOwogIHVzaW5nIDo6ZmZsdXNoOwogIHVzaW5n IDo6ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6ZmdldHM7CiAgdXNpbmcgOjpm b3BlbjsKICB1c2luZyA6OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0YzsKICB1c2luZyA6OmZwdXRz OwogIHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwogIHVzaW5nIDo6ZnNjYW5mOwog IHVzaW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVzaW5nIDo6ZnRlbGw7CiAgdXNp bmcgOjpmd3JpdGU7CiAgdXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6Z2V0Y2hhcjsKICB1c2luZyA6 OmdldHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAgdXNpbmcgOjpwcmludGY7CiAgdXNpbmcgOjpwdXRj OwogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAgdXNpbmcgOjpyZW1vdmU7CiAg dXNpbmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNpbmcgOjpzY2FuZjsKICB1c2lu ZyA6OnNldGJ1ZjsKICB1c2luZyA6OnNldHZidWY7CiAgdXNpbmcgOjpzcHJpbnRmOwogIHVzaW5n IDo6c3NjYW5mOwogIHVzaW5nIDo6dG1wZmlsZTsKICB1c2luZyA6OnRtcG5hbTsKICB1c2luZyA6 OnVuZ2V0YzsKICB1c2luZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6dnByaW50ZjsKICB1c2luZyA6 OnZzcHJpbnRmOwp9CiMgMTUzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2NzdGRpbyIgMwpu YW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6OnNucHJpbnRmOwogIHVzaW5nIDo6dmZzY2Fu ZjsKICB1c2luZyA6OnZzY2FuZjsKICB1c2luZyA6OnZzbnByaW50ZjsKICB1c2luZyA6OnZzc2Nh bmY7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6c25wcmludGY7CiAgdXNp bmcgX19nbnVfY3h4Ojp2ZnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNjYW5mOwogIHVzaW5n IF9fZ251X2N4eDo6dnNucHJpbnRmOwogIHVzaW5nIF9fZ251X2N4eDo6dnNzY2FuZjsKfQojIDM2 ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2kzODYtbGludXgvYml0cy9jKytpby5oIiAyIDMK CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pMzg2LWxpbnV4L2JpdHMvZ3Roci5oIiAx IDMKIyA5OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pMzg2LWxpbnV4L2JpdHMvZ3Roci5o IiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pMzg2LWxpbnV4L2JpdHMvZ3Roci1k ZWZhdWx0LmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2kzODYtbGludXgv Yml0cy9ndGhyLWRlZmF1bHQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMwoj IDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgi IDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1l LmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpz dHJ1Y3Qgc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9OwoKZXh0 ZXJuICJDIiB7CgoKCmV4dGVybiBpbnQgY2xvbmUgKGludCAoKl9fZm4pICh2b2lkICpfX2FyZyks IHZvaWQgKl9fY2hpbGRfc3RhY2ssCiAgICAgICAgICAgICAgICAgIGludCBfX2ZsYWdzLCB2b2lk ICpfX2FyZykgdGhyb3cgKCk7CgoKfQojIDMzICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoK CgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IHNjaGVkX3NldHBhcmFtIChfX3BpZF90IF9fcGlk LCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFy YW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyIChf X3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBzY2hlZF9nZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgc2NoZWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0 X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNj aGVkX2dldF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19waWQsIHN0cnVjdCB0aW1lc3Bl YyAqX190KSB0aHJvdyAoKTsKCn0KIyAyMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMg MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK ZXh0ZXJuICJDIiB7CgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTM4Ni1saW51 eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIg MwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVk ZS90aW1lLmgiIDIgMwojIDExOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdG0Kewog IGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBpbnQgdG1fbWRheTsK ICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0bV95ZGF5 OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2NvbnN0IGNoYXIg KnRtX3pvbmU7CgoKCgp9OwoKCgoKc3RydWN0IGl0aW1lcnNwZWMKICB7CiAgICBzdHJ1Y3QgdGlt ZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7CiAgfTsKCgpz dHJ1Y3Qgc2lnZXZlbnQ7CiMgMTYzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBjbG9j a190IGNsb2NrICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAq X190aW1lcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90IF9fdGlt ZTEsIHRpbWVfdCBfX3RpbWUwKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90 IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAq X19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJwdGltZSAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAqX190cCkKICAgICB0aHJvdyAoKTsK CgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAq X190aW1lcikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25z dCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0 bSAqbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhy b3cgKCk7CgoKCgpleHRlcm4gY2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHAp IHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIp IHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0 bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3Ry aWN0IF9fYnVmKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1l X3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz dHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRl cm4gaW50IF9fZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJu IGNoYXIgKnR6bmFtZVsyXTsKCgoKZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoK CgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0 ZXJuIGludCBzdGltZSAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMgMjcxICIv dXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9f dHApIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHAp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgZHlzaXplIChpbnQgX195ZWFyKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29u c3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLAogICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg Y2xvY2tfZ2V0cmVzIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3Jl cykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgX19jbG9j a19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2Nr X3NldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAq X190cCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAgKGNsb2Nr aWRfdCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tf Z2V0Y3B1Y2xvY2tpZCAocGlkX3QgX19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkgdGhyb3cg KCk7CgoKCgpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJpY3QgX19ldnAs CiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl90ICpfX3Jlc3RyaWN0IF9fdGltZXJpZCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBp bnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBpdGlt ZXJzcGVjICpfX3Jlc3RyaWN0IF9fdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX19vdmFsdWUpIHRocm93ICgpOwoKCmV4dGVybiBp bnQgdGltZXJfZ2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQsIHN0cnVjdCBpdGltZXJzcGVjICpf X3ZhbHVlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGlt ZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwojIDM0MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpl eHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUgKF9f Y29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwojIDM1NyAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMwpleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Ry aW5nLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVm cCkgdGhyb3cgKCk7CgoKCn0KIyAyMiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKIyAx ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgi IDMKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAz NCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKIyAzNzEgIi91c3IvaW5jbHVkZS9zaWduYWwu aCIgMwp9CiMgMjUgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaW5pdHNwaW4uaCIgMSAzCiMgMjcgIi91c3IvaW5j bHVkZS9wdGhyZWFkLmgiIDIgMwoKCmV4dGVybiAiQyIgewojIDU5ICIvdXNyL2luY2x1ZGUvcHRo cmVhZC5oIiAzCmVudW0KewogIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFLAoKICBQVEhSRUFEX0NS RUFURV9ERVRBQ0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURfSU5IRVJJVF9TQ0hFRCwKCiAgUFRI UkVBRF9FWFBMSUNJVF9TQ0hFRAoKfTsKCmVudW0KewogIFBUSFJFQURfU0NPUEVfU1lTVEVNLAoK ICBQVEhSRUFEX1NDT1BFX1BST0NFU1MKCn07CgplbnVtCnsKICBQVEhSRUFEX01VVEVYX1RJTUVE X05QLAogIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JD SEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QCgogICwKICBQVEhSRUFEX01VVEVY X05PUk1BTCA9IFBUSFJFQURfTVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJ VkUgPSBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hF Q0sgPSBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9ERUZBVUxU ID0gUFRIUkVBRF9NVVRFWF9OT1JNQUwKCgoKICAsIFBUSFJFQURfTVVURVhfRkFTVF9OUCA9IFBU SFJFQURfTVVURVhfQURBUFRJVkVfTlAKCn07CgplbnVtCnsKICBQVEhSRUFEX1BST0NFU1NfUFJJ VkFURSwKCiAgUFRIUkVBRF9QUk9DRVNTX1NIQVJFRAoKfTsKCgplbnVtCnsKICBQVEhSRUFEX1JX TE9DS19QUkVGRVJfUkVBREVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTlAs CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OT05SRUNVUlNJVkVfTlAsCiAgUFRIUkVB RF9SV0xPQ0tfREVGQVVMVF9OUCA9IFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTlAKfTsK IyAxMzEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKc3RydWN0IF9wdGhyZWFkX2NsZWFudXBf YnVmZmVyCnsKICB2b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKTsKICB2b2lkICpfX2FyZzsKICBp bnQgX19jYW5jZWx0eXBlOwogIHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19wcmV2 Owp9OwoKCgplbnVtCnsKICBQVEhSRUFEX0NBTkNFTF9FTkFCTEUsCgogIFBUSFJFQURfQ0FOQ0VM X0RJU0FCTEUKCn07CmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0RFRkVSUkVELAoKICBQVEhSRUFE X0NBTkNFTF9BU1lOQ0hST05PVVMKCn07CiMgMTYzICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAz CmV4dGVybiBpbnQgcHRocmVhZF9jcmVhdGUgKHB0aHJlYWRfdCAqX19yZXN0cmljdCBfX3RocmVh ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19y ZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKigqX19zdGFy dF9yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19y ZXN0cmljdCBfX2FyZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYg KHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9lcXVhbCAocHRocmVhZF90IF9f dGhyZWFkMSwgcHRocmVhZF90IF9fdGhyZWFkMikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgcHRo cmVhZF9leGl0ICh2b2lkICpfX3JldHZhbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfam9pbiAocHRocmVhZF90IF9f dGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRo cmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQg cHRocmVhZF9hdHRyX2luaXQgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlIChwdGhyZWFk X2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IF9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dl dGRldGFjaHN0YXRlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fZGV0YWNoc3RhdGUpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfYXR0cl90 ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw dGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0 cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19y ZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X3NldHNjaGVkcG9saWN5IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19wb2xpY3kpCiAg ICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9f Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5KQogICAgIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAocHRocmVh ZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19pbmhlcml0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRp bmhlcml0c2NoZWQgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBf X2luaGVyaXQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2Nv cGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3Njb3BlKQogICAgIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90 ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCAqX19yZXN0cmljdCBfX3Njb3BlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0 dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2d1YXJkc2l6ZSkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90 ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRy LCBzaXplX3QgKl9fcmVzdHJpY3QgX19ndWFyZHNpemUpCiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4 dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkciAocHRocmVhZF9hdHRyX3QgKl9fYXR0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3N0YWNrYWRk cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyIChfX2Nv bnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19hdHRyLCB2b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRkcikKICAgICB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFjayAocHRocmVhZF9h dHRyX3QgKl9fYXR0ciwgdm9pZCAqX19zdGFja2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9hdHRyX2dldHN0YWNrIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipfX3Jlc3RyaWN0 IF9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpf X3Jlc3RyaWN0IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRf YXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUgKF9fY29uc3QgcHRocmVhZF9hdHRy X3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0 dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX3N0YWNrc2l6ZSkKICAgICB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGludCBwdGhyZWFkX2dldGF0dHJfbnAgKHB0aHJlYWRfdCBfX3RoLCBwdGhyZWFkX2F0dHJf dCAqX19hdHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNjaGVkcGFy YW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFt KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFtIChwdGhy ZWFkX3QgX190YXJnZXRfdGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25jdXJyZW5jeSAodm9pZCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5IChpbnQgX19sZXZlbCkgdGhyb3cgKCk7 CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0 IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRf bXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f bXV0ZXhfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kg KHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X211dGV4X3RyeWxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90aW1lZGxvY2sgKHB0aHJlYWRfbXV0 ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0 aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoK CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgKHB0aHJlYWRfbXV0ZXhhdHRy X3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0 cm95IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9tdXRleGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90 ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz dHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRy X3NldHBzaGFyZWQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUgKHB0aHJlYWRfbXV0ZXhhdHRyX3Qg Kl9fYXR0ciwgaW50IF9fa2luZCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf bXV0ZXhhdHRyX2dldHR5cGUgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmlj dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jl c3RyaWN0IF9fa2luZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9p bml0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uZF9hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHB0aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWduYWwgKHB0aHJlYWRfY29uZF90ICpfX2Nv bmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVh ZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dh aXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgpIHRocm93ICgp OwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9jb25kX3Qg Kl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0 aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRf Y29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0 dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfc2V0cHNoYXJlZCAocHRocmVh ZF9jb25kYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9y d2xvY2tfaW5pdCAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpf X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyKSB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrX3Qg Kl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3JkbG9jayAo cHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9yd2xvY2tfdHJ5cmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWRyZGxvY2sgKHB0aHJlYWRfcndsb2Nr X3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3cmxvY2sgKHB0aHJlYWRfcnds b2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190 aW1lZHdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMg Kl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0 aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja191bmxvY2sgKHB0aHJl YWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRf cndsb2NrYXR0cl9pbml0IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95IChwdGhyZWFkX3J3bG9ja2F0 dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9n ZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQgKHB0 aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9yd2xvY2thdHRyX2dldGtpbmRfbnAgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3By ZWYpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldGtpbmRfbnAg KHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX3ByZWYpIHRocm93ICgpOwojIDUwOSAiL3Vzci9pbmNsdWRl L3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9pbml0IChwdGhyZWFkX3NwaW5s b2NrX3QgKl9fbG9jaywgaW50IF9fcHNoYXJlZCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfc3Bpbl9kZXN0cm95IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fbG9jayAocHRocmVhZF9zcGlubG9ja190ICpf X2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX3RyeWxvY2sgKHB0aHJl YWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bp bl91bmxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgcHRocmVhZF9iYXJyaWVyX2luaXQgKHB0aHJlYWRfYmFycmllcl90ICpfX3Jlc3RyaWN0 IF9fYmFycmllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhy ZWFkX2JhcnJpZXJhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19hdHRyLCB1bnNpZ25lZCBpbnQgX19jb3VudCkgdGhyb3cgKCk7CgpleHRlcm4gaW50 IHB0aHJlYWRfYmFycmllcl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJfdCAqX19iYXJyaWVyKSB0 aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9pbml0IChwdGhyZWFkX2Jh cnJpZXJhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmll cmF0dHJfZGVzdHJveSAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoK ZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVh ZF9iYXJyaWVyYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgpleHRlcm4gaW50 IHB0aHJlYWRfYmFycmllcmF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpf X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19w c2hhcmVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX3dhaXQgKHB0aHJl YWRfYmFycmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwojIDU1NiAiL3Vzci9pbmNsdWRlL3B0 aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0ZSAocHRocmVhZF9rZXlfdCAq X19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19kZXN0cl9mdW5j dGlvbikgKHZvaWQgKikpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfZGVsZXRl IChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0 c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCB2b2lkICpfX3BvaW50ZXIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICpw dGhyZWFkX2dldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKIyA1NzYg Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJl YWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg KCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhy ZWFkX3NldGNhbmNlbHN0YXRlIChpbnQgX19zdGF0ZSwgaW50ICpfX29sZHN0YXRlKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKGludCBfX3R5cGUsIGludCAq X19vbGR0eXBlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsIChwdGhyZWFk X3QgX190aHJlYWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2Vs ICh2b2lkKSB0aHJvdyAoKTsKIyA2MTAgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJu IHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZm ZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpf X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKl9fYXJnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBf cG9wIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CiMgNjMxICIv dXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVz aF9kZWZlciAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5lKSAodm9p ZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Fy ZykgdGhyb3cgKCk7CiMgNjQyICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lk IF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1 ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjcHVj bG9ja2lkIChwdGhyZWFkX3QgX190aHJlYWRfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIHRocm93ICgpOwoKCgoKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3Ro cmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrIChpbnQgX19ob3csCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19uZXdt YXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zaWdzZXRfdCAqX19yZXN0cmljdCBf X29sZG1hc2spdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2tpbGwgKHB0aHJlYWRfdCBf X3RocmVhZCwgaW50IF9fc2lnbm8pIHRocm93ICgpOwojIDY1NiAiL3Vzci9pbmNsdWRlL3B0aHJl YWQuaCIgMiAzCiMgNjcxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRo cmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcHRo cmVhZF9raWxsX290aGVyX3RocmVhZHNfbnAgKHZvaWQpIHRocm93ICgpOwoKfQojIDM4ICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2kzODYtbGludXgvYml0cy9ndGhyLWRlZmF1bHQuaCIgMiAz Cgp0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19ndGhyZWFkX2tleV90Owp0eXBlZGVmIHB0aHJlYWRf b25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7CnR5cGVkZWYgcHRocmVhZF9tdXRleF90IF9fZ3RocmVh ZF9tdXRleF90OwoKCgoKCgojcHJhZ21hIHdlYWsgcHRocmVhZF9vbmNlCiNwcmFnbWEgd2VhayBw dGhyZWFkX2tleV9jcmVhdGUKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfa2V5X2RlbGV0ZQojcHJhZ21h IHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9zZXRzcGVjaWZp YwojcHJhZ21hIHdlYWsgcHRocmVhZF9jcmVhdGUKCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4 X2xvY2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3RyeWxvY2sgCiNwcmFnbWEgd2VhayBw dGhyZWFkX211dGV4X3VubG9jayAKIyA4MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9pMzg2 LWxpbnV4L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFk X2FjdGl2ZV9wICh2b2lkKQp7CiAgc3RhdGljIHZvaWQgKmNvbnN0IF9fZ3RocmVhZF9hY3RpdmVf cHRyID0gKHZvaWQgKikgJnB0aHJlYWRfY3JlYXRlOwogIHJldHVybiBfX2d0aHJlYWRfYWN0aXZl X3B0ciAhPSAwOwp9CiMgNDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2kzODYtbGludXgv Yml0cy9ndGhyLWRlZmF1bHQuaCIgMwpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfb25jZSAo X19ndGhyZWFkX29uY2VfdCAqb25jZSwgdm9pZCAoKmZ1bmMpICh2b2lkKSkKewogIGlmIChfX2d0 aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9vbmNlIChvbmNlLCBmdW5jKTsK ICBlbHNlCiAgICByZXR1cm4gLTE7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlf Y3JlYXRlIChfX2d0aHJlYWRfa2V5X3QgKmtleSwgdm9pZCAoKmR0b3IpICh2b2lkICopKQp7CiAg cmV0dXJuIHB0aHJlYWRfa2V5X2NyZWF0ZSAoa2V5LCBkdG9yKTsKfQoKc3RhdGljIGlubGluZSBp bnQKX19ndGhyZWFkX2tleV9kdG9yIChfX2d0aHJlYWRfa2V5X3Qga2V5LCB2b2lkICpwdHIpCnsK CiAgaWYgKHB0cikKICAgIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmljIChrZXksIDApOwogIGVs c2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5X2RlbGV0 ZSAoX19ndGhyZWFkX2tleV90IGtleSkKewogIHJldHVybiBwdGhyZWFkX2tleV9kZWxldGUgKGtl eSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCAqCl9fZ3RocmVhZF9nZXRzcGVjaWZpYyAoX19ndGhy ZWFkX2tleV90IGtleSkKewogIHJldHVybiBwdGhyZWFkX2dldHNwZWNpZmljIChrZXkpOwp9Cgpz dGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfc2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBr ZXksIGNvbnN0IHZvaWQgKnB0cikKewogIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmljIChrZXks IHB0cik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF9sb2NrIChfX2d0aHJl YWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0 dXJuIHB0aHJlYWRfbXV0ZXhfbG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9Cgpz dGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19ndGhyZWFkX211dGV4 X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhy ZWFkX211dGV4X3RyeWxvY2sgKG11dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGlj IGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3VubG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11 dGV4KQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211 dGV4X3VubG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CiMgOTkgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvaTM4Ni1saW51eC9iaXRzL2d0aHIuaCIgMiAzCiMgMzggIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvaTM4Ni1saW51eC9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNw YWNlIHN0ZAp7CgogIHR5cGVkZWYgbG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qg c3RyZWFtc2l6ZTsKCiAgdHlwZWRlZiBwdHJkaWZmX3Qgd3N0cmVhbXNpemU7CgogIHR5cGVkZWYg ZnBvc190IF9fY19zdHJlYW1wb3M7CgogIHR5cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19jX2xv Y2s7CgoKICB0eXBlZGVmIEZJTEUgX19jX2ZpbGU7CgoKICBzdHJ1Y3QgX19pb3NfZmxhZ3MKICB7 CiAgICB0eXBlZGVmIHNob3J0IF9faW50X3R5cGU7CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5 cGUgX1NfYm9vbGFscGhhID0gMHgwMDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf ZGVjID0gMHgwMDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAw MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19oZXggPSAweDAwMDg7CiAgICBzdGF0 aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbnRlcm5hbCA9IDB4MDAxMDsKICAgIHN0YXRpYyBjb25z dCBfX2ludF90eXBlIF9TX2xlZnQgPSAweDAwMjA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19vY3QgPSAweDAwNDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19yaWdodCA9 IDB4MDA4MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NjaWVudGlmaWMgPSAweDAx MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsKICAg IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb2ludCA9IDB4MDQwMDsKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX3Nob3dwb3MgPSAweDA4MDA7CiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19za2lwd3MgPSAweDEwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU191bml0YnVmID0gMHgyMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBw ZXJjYXNlID0gMHg0MDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYWRqdXN0Zmll bGQgPSAweDAwMjAgfCAweDAwODAgfCAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw ZSBfU19iYXNlZmllbGQgPSAweDAwMDIgfCAweDAwNDAgfCAweDAwMDg7CiAgICBzdGF0aWMgY29u c3QgX19pbnRfdHlwZSBfU19mbG9hdGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0OwoKCiAgICBzdGF0 aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYWRiaXQgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9f aW50X3R5cGUgX1NfZW9mYml0ID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2ZhaWxiaXQgPSAweDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hcHAgPSAw eDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXRlID0gMHgwMjsKICAgIHN0YXRp YyBjb25zdCBfX2ludF90eXBlIF9TX2JpbiA9IDB4MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRf dHlwZSBfU19pbiA9IDB4MDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAw eDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIwOwogIH07Cn0K IyA0NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMiAzCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9jd2NoYXIiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2N3Y2hhciIgMwoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvY3Rp bWUiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2N0aW1lIiAzCiMgNjQgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvY3RpbWUiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg OjpjbG9ja190OwogIHVzaW5nIDo6dGltZV90OwogIHVzaW5nIDo6dG07CgogIHVzaW5nIDo6Y2xv Y2s7CiAgdXNpbmcgOjpkaWZmdGltZTsKICB1c2luZyA6Om1rdGltZTsKICB1c2luZyA6OnRpbWU7 CiAgdXNpbmcgOjphc2N0aW1lOwogIHVzaW5nIDo6Y3RpbWU7CiAgdXNpbmcgOjpnbXRpbWU7CiAg dXNpbmcgOjpsb2NhbHRpbWU7CiAgdXNpbmcgOjpzdHJmdGltZTsKfQojIDUyICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2N3Y2hhciIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg MSAzCiMgNDAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2Nj LWxpYi9pMzg2LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MSAiL3Vzci9pbmNs dWRlL3djaGFyLmgiIDIgMwoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2kzODYt bGludXgvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMiAzCiMgODUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgX19tYnN0YXRlX3Qg bWJzdGF0ZV90OwojIDEwNSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKc3RydWN0IHRtOwoKCmV4 dGVybiAiQyIgewoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9f cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90 ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3 Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoK ZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBz aXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChfX2NvbnN0IHdj aGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3Y2hhcl90 ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgd2NzY2FzZWNtcCAoX19j b25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgd2NzbmNhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hh cl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gaW50IF9fd2NzY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9f Y29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVf dCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9fd2NzbmNhc2VjbXBfbCAoX19jb25zdCB3 Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgd2NzY29sbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9f czIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IF9fd2NzY29s bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAg ICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCmV4dGVybiBz aXplX3QgX193Y3N4ZnJtX2wgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykg dGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19jb25zdCB3Y2hhcl90ICpfX3Mp IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB3Y2hhcl90 ICp3Y3NjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NyY2hy IChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hybnVsIChf X2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0IHdj aGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChfX2NvbnN0 IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9f Y29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nzc3Ry IChfX2NvbnN0IHdjaGFyX3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB3Y2hh cl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3Y2hhcl90 ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK ZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGltLAogICAg ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3B0cikgdGhyb3cgKCk7 CgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NubGVuIChfX2Nv bnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIgKF9fY29uc3Qg d2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHdtZW1jbXAgKF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJf dCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5ICh3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3 bWVtbW92ZSAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19u KQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpfX3Ms IHdjaGFyX3QgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3 bWVtcGNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRo cm93ICgpOwoKCgoKCmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IHdjdG9iICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBtYnNp bml0IChfX2NvbnN0IG1ic3RhdGVfdCAqX19wcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBf X3B3YywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z LCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19wKSB0aHJv dyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjcnRvbWIgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCB3Y2hh cl90IF9fd2MsCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9f cHMpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVf dCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBtYnJsZW4gKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAg ICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CiMgMjk3ICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMwpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAqX19yZXN0cmlj dCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJp Y3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVf dCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NydG9tYnMg KGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAg ICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVf dCBfX25tYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4sIG1ic3RhdGVf dCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJz IChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fbndjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWJz dGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHdjd2lk dGggKHdjaGFyX3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3N3aWR0aCAoX19jb25z dCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUg d2NzdG9kIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRl cm4gZmxvYXQgd2NzdG9mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7 CmV4dGVybiBsb25nIGRvdWJsZSB3Y3N0b2xkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg X19lbmRwdHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGludCB3Y3N0b2wgKF9fY29uc3Qg d2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFy X3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0 cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9u X18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgd2NzdG9xIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9f CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdXEgKF9fY29uc3Qgd2NoYXJfdCAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgpfX2V4dGVuc2lvbl9fCmV4 dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4 dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsKIyA0MTAgIi91c3IvaW5jbHVkZS93 Y2hhci5oIiAzCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBf X3djc3RvdWxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xv Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp bnQgX193Y3N0b2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxl X3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBs b25nIGludCBfX3djc3RvdWxsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVy biBkb3VibGUgX193Y3N0b2RfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwg X19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3djc3RvZl9s IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAg ICAgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2wgKF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBfX3dj c3RvZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs IGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQgX193Y3N0b2ZfaW50ZXJu YWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3Vw KQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2ludGVybmFsIChf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCmV4 dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoq X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25n IGludCBfX3djc3RvdWxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNp b25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfaW50ZXJuYWwgKF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgp OwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91 bGxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKIyA1MjggIi91c3IvaW5jbHVkZS93Y2hhci5o IiAzCmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hh cl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3BuY3B5ICh3Y2hhcl90 ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg KCk7CgoKCgoKCgpleHRlcm4gaW50IGZ3aWRlIChfX0ZJTEUgKl9fZnAsIGludCBfX21vZGUpIHRo cm93ICgpOwoKCgpleHRlcm4gaW50IGZ3cHJpbnRmIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zv cm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3ByaW50ZiAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJu IGludCBzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4u KQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZmd3ByaW50ZiAoX19GSUxFICpfX3Jlc3Ry aWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj dCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQog ICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdndwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19h cmcpCiAgICAgdGhyb3cgKCkgOwoKCmV4dGVybiBpbnQgdnN3cHJpbnRmICh3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192 YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgoKZXh0ZXJuIGludCBmd3NjYW5mIChfX0ZJ TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGlu dCB3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAg IHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKCgpleHRlcm4gaW50IHZmd3NjYW5mIChf X0ZJTEUgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9s aXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdndzY2FuZiAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgIF9fZ251Y192 YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgdnN3c2NhbmYgKF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg d2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVj X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKCgoKZXh0ZXJuIHdpbnRfdCBmZ2V0d2Mg KF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IGdldHdjIChfX0ZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IGdldHdjaGFyICh2b2lkKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBmcHV0d2MgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0 cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgcHV0d2MgKHdjaGFyX3QgX193YywgX19GSUxF ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhciAod2NoYXJfdCBf X3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90ICpmZ2V0d3MgKHdjaGFyX3QgKl9fcmVz dHJpY3QgX193cywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jl c3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGZwdXR3cyAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsCiAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVz dHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHVuZ2V0d2MgKHdpbnRf dCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gd2ludF90IGdl dHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBn ZXR3Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBmZ2V0d2Nf dW5sb2NrZWQgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgZnB1 dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK CgpleHRlcm4gd2ludF90IHB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IHB1dHdjaGFyX3VubG9ja2VkICh3Y2hhcl90 IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdzX3VubG9ja2VkICh3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBmcHV0d3NfdW5sb2NrZWQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NmdGltZSAod2NoYXJfdCAqX19yZXN0cmljdCBf X3MsIHNpemVfdCBfX21heHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CiMgNjgwICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMwp9CiMgNTUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvY3djaGFyIiAy IDMKIyA2OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0 ZAp7CiAgdXNpbmcgOjptYnN0YXRlX3Q7Cn0KIyAxMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvY3djaGFyIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6 OmJ0b3djOwogIHVzaW5nIDo6ZmdldHdjOwogIHVzaW5nIDo6ZmdldHdzOwogIHVzaW5nIDo6ZnB1 dHdjOwogIHVzaW5nIDo6ZnB1dHdzOwogIHVzaW5nIDo6ZndpZGU7CiAgdXNpbmcgOjpmd3ByaW50 ZjsKICB1c2luZyA6OmZ3c2NhbmY7CiAgdXNpbmcgOjpnZXR3YzsKICB1c2luZyA6OmdldHdjaGFy OwogIHVzaW5nIDo6bWJybGVuOwogIHVzaW5nIDo6bWJydG93YzsKICB1c2luZyA6Om1ic2luaXQ7 CiAgdXNpbmcgOjptYnNydG93Y3M7CiAgdXNpbmcgOjpwdXR3YzsKICB1c2luZyA6OnB1dHdjaGFy OwogIHVzaW5nIDo6c3dwcmludGY7CiAgdXNpbmcgOjpzd3NjYW5mOwogIHVzaW5nIDo6dW5nZXR3 YzsKICB1c2luZyA6OnZmd3ByaW50ZjsKICB1c2luZyA6OnZmd3NjYW5mOwogIHVzaW5nIDo6dnN3 cHJpbnRmOwogIHVzaW5nIDo6dnN3c2NhbmY7CiAgdXNpbmcgOjp2d3ByaW50ZjsKICB1c2luZyA6 OnZ3c2NhbmY7CiAgdXNpbmcgOjp3Y3J0b21iOwogIHVzaW5nIDo6d2NzY2F0OwogIHVzaW5nIDo6 d2NzY21wOwogIHVzaW5nIDo6d2NzY29sbDsKICB1c2luZyA6Ondjc2NweTsKICB1c2luZyA6Ondj c2NzcG47CiAgdXNpbmcgOjp3Y3NmdGltZTsKICB1c2luZyA6Ondjc2xlbjsKICB1c2luZyA6Ondj c25jYXQ7CiAgdXNpbmcgOjp3Y3NuY21wOwogIHVzaW5nIDo6d2NzbmNweTsKICB1c2luZyA6Ondj c3J0b21iczsKICB1c2luZyA6Ondjc3NwbjsKICB1c2luZyA6Ondjc3RvZDsKICB1c2luZyA6Ondj c3RvZjsKICB1c2luZyA6Ondjc3RvazsKICB1c2luZyA6Ondjc3RvbDsKICB1c2luZyA6Ondjc3Rv dWw7CiAgdXNpbmcgOjp3Y3N4ZnJtOwogIHVzaW5nIDo6d2N0b2I7CiAgdXNpbmcgOjp3bWVtY21w OwogIHVzaW5nIDo6d21lbWNweTsKICB1c2luZyA6OndtZW1tb3ZlOwogIHVzaW5nIDo6d21lbXNl dDsKICB1c2luZyA6OndwcmludGY7CiAgdXNpbmcgOjp3c2NhbmY7CgogIHVzaW5nIDo6d2NzY2hy OwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NjaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykK ICB7IHJldHVybiB3Y3NjaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsg fQoKICB1c2luZyA6Ondjc3Bicms7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3Bicmsod2NoYXJf dCogX19zMSwgd2NoYXJfdCogX19zMikKICB7IHJldHVybiB3Y3NwYnJrKGNvbnN0X2Nhc3Q8Y29u c3Qgd2NoYXJfdCo+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6Ondjc3JjaHI7CgogIGlubGlu ZSB3Y2hhcl90KgogIHdjc3JjaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVy biB3Y3NyY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNp bmcgOjp3Y3NzdHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3N0cih3Y2hhcl90KiBfX3MxLCB3 Y2hhcl90KiBfX3MyKQogIHsgcmV0dXJuIHdjc3N0cihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3Qq PihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3bWVtY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoK ICB3bWVtY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1 cm4gd21lbWNocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MsIF9fbik7IH0K fQoKCgoKCgoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjp3Y3N0b2xkOwogIHVzaW5n IDo6d2NzdG9sbDsKICB1c2luZyA6Ondjc3RvdWxsOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2lu ZyBfX2dudV9jeHg6Ondjc3RvbGQ7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b2xsOwogIHVzaW5n IF9fZ251X2N4eDo6d2NzdG91bGw7Cn0KIyA0NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i aXRzL2Zwb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf U3RhdGVUPgogICAgY2xhc3MgZnBvcwogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBf U3RhdGVUIF9fc3RhdGVfdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1vZmYgX01fb2Zm OwogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7CgogICAgcHVibGljOgogICAgICBfX3N0YXRlX3R5 cGUKICAgICAgc3RhdGUoKSBjb25zdCB7IHJldHVybiBfTV9zdDsgfQoKICAgICAgdm9pZAogICAg ICBzdGF0ZShfX3N0YXRlX3R5cGUgX19zdCkgeyBfTV9zdCA9IF9fc3Q7IH0KCgoKICAgICAgZnBv cygpOiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChfX3N0YXRlX3R5cGUoKSkgeyB9CgogICAg ICBmcG9zKHN0cmVhbW9mZiBfX29mZiwgX19zdGF0ZV90eXBlIF9fc3QgPSBfX3N0YXRlX3R5cGUo KSkKICAgICAgOiBfTV9vZmYoX19vZmYpLCBfTV9zdChfX3N0KSB7IH0KCiAgICAgIG9wZXJhdG9y IHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgZnBvcyYKICAgICAg b3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmICs9IF9fb2ZmOyByZXR1cm4gKnRo aXM7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yLT0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9N X29mZiAtPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9y KyhzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAg ICAgX190ICs9IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGZwb3MK ICAgICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgX190 KCp0aGlzKTsKICAgICAgICBfX3QgLT0gX19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAg fQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAog ICAgICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBib29sCiAgICAg IG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29m ZiAhPSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIHN0cmVhbW9mZgogICAgICBfTV9wb3NpdGlvbigp IGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgdm9pZAogICAgICBfTV9wb3NpdGlvbihz dHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmID0gX19vZmY7IH0KICAgIH07CgoKICB0eXBlZGVmIGZw b3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7CgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHdzdHJl YW1wb3M7Cgp9CiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaW9zZndkIiAyIDMKIyAx ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNl IHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAg X190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lk KTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93 X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50 KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBj aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19z KTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2 b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190 aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191 bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19m YWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA0OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9pb3Nmd2QiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp Y19pb3M7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo YXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf b3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g Y2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU PiwKICAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAg Y2xhc3MgYmFzaWNfc3RyaW5nYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9B bGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh aXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFy VD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAg ICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19z dHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZjsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No YXJUPiA+CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBi YXNpY19vZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19mc3RyZWFtOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxf Q2hhclQ+ID4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I7CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAg Y2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsKCgoKICBjbGFzcyBpb3NfYmFzZTsKCgogIHR5cGVk ZWYgYmFzaWNfaW9zPGNoYXI+IGlvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiBz dHJlYW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXI+IGlzdHJlYW07CiAgdHlwZWRl ZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxj aGFyPiBpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPiBzdHJpbmdidWY7 CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+IGlzdHJpbmdzdHJlYW07CiAgdHlw ZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IG9zdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBi YXNpY19zdHJpbmdzdHJlYW08Y2hhcj4gc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZmls ZWJ1ZjxjaGFyPiBmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08Y2hhcj4gaWZzdHJl YW07CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBvZnN0cmVhbTsKICB0eXBlZGVmIGJh c2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsKCiAgdHlwZWRlZiBiYXNpY19pb3M8d2NoYXJfdD4g d2lvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiB3c3RyZWFtYnVmOwogIHR5 cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiB3aXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29z dHJlYW08d2NoYXJfdD4gd29zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTx3Y2hhcl90 PiB3aW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8d2NoYXJfdD4gd3N0cmluZ2J1 ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08d2NoYXJfdD4gd2lzdHJpbmdzdHJlYW07 CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdvc3RyaW5nc3RyZWFtOwog IHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdzdHJpbmdzdHJlYW07CiAgdHlw ZWRlZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IHdmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZz dHJlYW08d2NoYXJfdD4gd2lmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08d2NoYXJf dD4gd29mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTx3Y2hhcl90PiB3ZnN0cmVhbTsK fQojIDcxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcGFpci5oIiAxIDMKIyA2 NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNwYWNl IHN0ZAp7CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7CiAg dHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAgX1Qx IGZpcnN0OwogIF9UMiBzZWNvbmQ7CgoKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9 CgoKCgogIHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSks IHNlY29uZChfX2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFp cihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChf X3Auc2Vjb25kKSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5l IGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9U MSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNl Y29uZCA9PSBfX3kuc2Vjb25kOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpp bmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFp cjxfVDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwKICAg ICAgICAgKCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29u ZCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJh dG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9f eSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xh c3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwg Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCgp0ZW1w bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3Qg cGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVy biAhKF9feSA8IF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGlu ZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxf VDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KIyAxNDAgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcGFpci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVDEs IGNsYXNzIF9UMj4KCgppbmxpbmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKF9UMSBfX3gsIF9U MiBfX3kpCgoKCnsKICByZXR1cm4gcGFpcjxfVDEsIF9UMj4oX194LCBfX3kpOwp9Cgp9CiMgNzIg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDUzICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMwojIDkwICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMwpzdHJ1Y3QgX190cnVl X3R5cGUge307CnN0cnVjdCBfX2ZhbHNlX3R5cGUge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz dHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9t ZW1iZXJfbXVzdF9iZV9maXJzdDsKIyAxMTMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy90eXBlX3RyYWl0cy5oIiAzCiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rl ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Nv cHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Fzc2ln bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGhhc190cml2aWFsX2Rlc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKdGVtcGxh dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxib29sPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5 cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5z aWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf X3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8 PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0 ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIHNob3J0PiB7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBp c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8aW50PiB7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5z aWduZWQgaW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f dHlwZV90cmFpdHM8bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9 OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGxvbmc+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBs b25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190 eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rl ZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29w eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91YmxlPiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0Rf dHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzPF9UcCo+ IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVj dCBfSXNfaW50ZWdlciB7CiAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Y2hhcj4gewogIHR5 cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2lu dGVnZXI8c2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVm IF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2Vy PHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50 ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4g ewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qg X0lzX2ludGVnZXI8aW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0 ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9f dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxv bmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3Ry dWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4gewog IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz X2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50 ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJh dG9yIHsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX05vcm1hbDsKfTsKCgpuYW1lc3BhY2UgX19n bnVfY3h4CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWlu ZXI+IGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0 b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CnN0cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yPCBfX2du dV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgX05vcm1hbDsKfTsKIyA3MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNjggIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCgpuYW1lc3Bh Y2Ugc3RkCnsKIyA4MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRv cl9iYXNlX3R5cGVzLmgiIDMKICBzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1 Y3Qgb3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFn IDogcHVibGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGJpZGlyZWN0aW9uYWxf aXRlcmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3Qg cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRv cl90YWcge307CiMgMTAwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJh dG9yX2Jhc2VfdHlwZXMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DYXRlZ29yeSwgdHlwZW5h bWUgX1RwLCB0eXBlbmFtZSBfRGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICAgdHlwZW5h bWUgX1BvaW50ZXIgPSBfVHAqLCB0eXBlbmFtZSBfUmVmZXJlbmNlID0gX1RwJj4KICAgIHN0cnVj dCBpdGVyYXRvciB7CgogICAgICB0eXBlZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsK CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICB0eXBlZGVmIF9EaXN0YW5jZSBk aWZmZXJlbmNlX3R5cGU7CgogICAgICB0eXBlZGVmIF9Qb2ludGVyIHBvaW50ZXI7CgogICAgICB0 eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29y eTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZm ZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBv aW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVmZXJl bmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9y X3RyYWl0czxfVHAqPiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcg aXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5 cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBfVHAqIHBvaW50 ZXI7CiAgICAgIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsKICAgICAg dHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAg ICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVy ZW5jZV90eXBlOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRl ZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9JdGVyPgogICAgaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJh dG9yX2NhdGVnb3J5CiAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJikKICAgIHsg cmV0dXJuIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5 KCk7IH0KCn0KIyA3NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFz ZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9y X2Jhc2VfZnVuY3MuaCIgMSAzCiMgNjggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDMKIyA2OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7 CnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICBfX2Rpc3RhbmNl KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRl cmF0b3JfdGFnKQogIHsKCiAgIAoKICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgd2hpbGUgKF9fZmlyc3QgIT0g X19sYXN0KSB7CiAgICAgICsrX19maXJzdDsgKytfX247CiAgICB9CiAgICByZXR1cm4gX19uOwog IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICBpbmxpbmUgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2Vf dHlwZQogIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y X3RhZykKICB7CgogICAKICAgIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0OwogIH0KIyAxMTEgIi91 c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAz CnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICBkaXN0YW5jZShf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgewoKICAgIHJl dHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2Zp cnN0KSk7CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Rpc3Rh bmNlPgogIGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9JbnB1dEl0ZXImIF9faSwgX0Rpc3RhbmNl IF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAogICAgd2hpbGUgKF9fbi0tKSArK19f aTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFt ZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX0JpZGlyZWN0aW9uYWxJdGVy YXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh dG9yX3RhZykKICB7CgogICAKCiAgICBpZiAoX19uID4gMCkKICAgICAgd2hpbGUgKF9fbi0tKSAr K19faTsKICAgIGVsc2UKICAgICAgd2hpbGUgKF9fbisrKSAtLV9faTsKICB9Cgp0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxp bmUgdm9pZAogIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNl IF9fbiwKICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgewoKICAgCiAg ICBfX2kgKz0gX19uOwogIH0KIyAxNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJh dG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBhZHZhbmNlKF9JbnB1dEl0 ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24pCiAgewoKICAgIF9fYWR2YW5jZShfX2ksIF9fbiwg X19pdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKICB9Cgp9CiMgNzUgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAxIDMKIyA2OCAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDg5ICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBjbGFzcyByZXZlcnNlX2l0ZXJhdG9yCiAgICA6IHB1Ymxp YyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3Jf Y2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAg ICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAg ICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpy ZWZlcmVuY2U+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBjdXJyZW50OwoK ICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90 eXBlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAg IHB1YmxpYzoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcigpIHsgfQoKCgoKICAgICAgZXhwbGlj aXQKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9f eCkgeyB9CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3Im IF9feCkKICAgICAgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7IH0KCgoKCgogICAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2Vf aXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICAgICAgOiBjdXJyZW50KF9feC5iYXNlKCkpIHsgfQoK CgoKICAgICAgaXRlcmF0b3JfdHlwZQogICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVu dDsgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAg ewogICAgICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICotLV9f dG1wOwogICAgICB9CgoKCgoKCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0 IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Im CiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgLS1jdXJyZW50OwogICAgICAgIHJl dHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9w ZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0 aGlzOwogICAgICAgIC0tY3VycmVudDsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCgoK CgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItLSgpCiAgICAgIHsKICAg ICAgICArK2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAg IHJldmVyc2VfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpCiAgICAgIHsKICAgICAgICByZXZlcnNl X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVy biBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJh dG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0 ZXJhdG9yKGN1cnJlbnQgLSBfX24pOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAg ICAgIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJl bnQgLT0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZl cnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAog ICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgKyBfX24pOyB9CgoKCgoKCiAg ICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9f bikKICAgICAgewogICAgICAgIGN1cnJlbnQgKz0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsK ICAgICAgfQoKCgoKCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShkaWZmZXJlbmNl X3R5cGUgX19uKSBjb25zdCB7IHJldHVybiAqKCp0aGlzICsgX19uKTsgfQogICAgfTsKIyAyNjkg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNv bnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICBjb25z dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5iYXNl KCkgPT0gX195LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBp bmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y PiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg X195KQogICAgeyByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3Qg cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPT0gX195 KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAg b3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAg ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1 cm4gX195IDwgX194OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg X194LAogICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf X3kpCiAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0 ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9pdGVy YXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0 b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJh dG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgb3BlcmF0b3ItKGNvbnN0IHJldmVy c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2Vf aXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2UoKSAtIF9feC5i YXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIHJldmVy c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgogICAgb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2VfaXRl cmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgICBjb25z dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkKICAgIHsgcmV0dXJuIHJldmVyc2Vf aXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0gX19uKTsgfQojIDMyNyAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1Ymxp YyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgog ICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CgogICAgcHVi bGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCiAgICAgIGV4 cGxpY2l0CiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250 YWluZXIoJl9feCkgeyB9CiMgMzUzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2l0ZXJhdG9yLmgiIDMKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9y PSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewog ICAgICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOwogICAgICAgIHJldHVybiAqdGhp czsKICAgICAgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcioo KSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBv cGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRv cgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgMzg0ICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9D b250YWluZXI+CiAgICBiYWNrX2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAgIHsgcmV0dXJu IGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7IH0KIyAzOTcgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3IKICAgIDogcHVi bGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+ CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsKCiAgICBw dWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CgoKICAgICAg ZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWlu ZXIoJl9feCkgeyB9CiMgNDIyICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0 ZXJhdG9yLmgiIDMKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0o dHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAg ICAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0aGlz OwogICAgICB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcioo KSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAgICAg b3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJh dG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyA0NTMg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9y PF9Db250YWluZXI+CiAgICBmcm9udF9pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpCiAgICB7IHJl dHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDQ3MCAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGluc2VydF9pdGVyYXRvcgogICAgOiBwdWJs aWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4K ICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVyOwogICAgICB0 eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5 cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgoKCgogICAgICBpbnNlcnRfaXRlcmF0 b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2kpCiAg ICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30KIyA1MTIgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBpbnNlcnRfaXRlcmF0b3Im CiAgICAgIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVu Y2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVy LCBfX3ZhbHVlKTsKICAgICAgICArK2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9 CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhp czsgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJu ICp0aGlzOyB9CgoKICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkg eyByZXR1cm4gKnRoaXM7IH0KICAgIH07CiMgNTQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyLCB0 eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+ CiAgICBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCiAgICB7CiAgICAg IHJldHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yKF9f aSkpOwogICAgfQp9CgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKCgoKCgoKCiAgdXNpbmcgc3RkOjpp dGVyYXRvcl90cmFpdHM7CiAgdXNpbmcgc3RkOjppdGVyYXRvcjsKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBfX25vcm1hbF9pdGVy YXRvcgogICAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0 ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAgICAg ICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5j ZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAgIHByb3RlY3RlZDoK ICAgICAgX0l0ZXJhdG9yIF9NX2N1cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyIHBvaW50ZXI7CgogICAgICBfX25vcm1h bF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkgeyB9CgogICAgICBleHBsaWNp dAogICAgICBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfSXRlcmF0b3ImIF9faSkgOiBfTV9jdXJy ZW50KF9faSkgeyB9CgoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICAgIGlubGlu ZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRh aW5lcj4mIF9faSkKICAgICAgICA6IF9NX2N1cnJlbnQoX19pLmJhc2UoKSkgeyB9CgoKICAgICAg cmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9 CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBfTV9jdXJy ZW50OyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgKytf TV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAg IG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50Kysp OyB9CgoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKSB7IC0tX01f Y3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBv cGVyYXRvci0tKGludCkgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudC0tKTsg fQoKCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKGNvbnN0IGRpZmZlcmVuY2VfdHlw ZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyZW50W19fbl07IH0KCiAgICAgIF9f bm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYg X19uKQogICAgICB7IF9NX2N1cnJlbnQgKz0gX19uOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9f bm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9f bikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCArIF9f bik7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGNvbnN0IGRp ZmZlcmVuY2VfdHlwZSYgX19uKQogICAgICB7IF9NX2N1cnJlbnQgLT0gX19uOyByZXR1cm4gKnRo aXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLShjb25zdCBkaWZm ZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3Io X01fY3VycmVudCAtIF9fbik7IH0KCiAgICAgIGRpZmZlcmVuY2VfdHlwZQogICAgICBvcGVyYXRv ci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3ImIF9faSkgY29uc3QKICAgICAgeyByZXR1cm4gX01f Y3VycmVudCAtIF9faS5fTV9jdXJyZW50OyB9CgogICAgICBjb25zdCBfSXRlcmF0b3ImCiAgICAg IGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CiAgICB9OwojIDY0OSAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5l cj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0 ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxf aXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhz LmJhc2UoKSA9PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y LCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I9PShjb25zdCBf X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAg ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhz KQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA9PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRh aW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8 X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3Jt YWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9f bGhzLmJhc2UoKSAhPSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh dG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3IhPShjb25z dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAg ICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9f cmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAhPSBfX3Jocy5iYXNlKCk7IH0KCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9D b250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0 b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25v cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4g X19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy YXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPChjb25z dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAg ICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9f cmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29u dGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y PF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgY29uc3QgX19ub3Jt YWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9f bGhzLmJhc2UoKSA+IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0 b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj4oY29uc3Qg X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAg ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhz KQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFp bmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf SXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19s aHMuYmFzZSgpIDw9IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0 b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjw9KGNvbnN0 IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAg ICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19y aHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDw9IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29u dGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRv cjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25v cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4g X19saHMuYmFzZSgpID49IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl cmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj49KGNv bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAg ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYg X19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID49IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIF9f bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4KICBvcGVyYXRvcisodHlwZW5h bWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90 eXBlIF9fbiwKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf Q29udGFpbmVyPiYgX19pKQogIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwg X0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0KfQojIDc2ICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewojIDkx ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAg aW5saW5lIHZvaWQKICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVy MiBfX2IpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3 YXJkSXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsK CgogICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgX1ZhbHVlVHlwZTEgX190bXAgPSAqX19h OwogICAgICAqX19hID0gKl9fYjsKICAgICAgKl9fYiA9IF9fdG1wOwogICAgfQojIDExOCAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19i KQogICAgewoKICAgICAKCiAgICAgIF9UcCBfX3RtcCA9IF9fYTsKICAgICAgX19hID0gX19iOwog ICAgICBfX2IgPSBfX3RtcDsKICAgIH0KIyAxNDYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGlu ZSBjb25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAg ewoKICAgICAKCiAgICAgIGlmIChfX2IgPCBfX2EpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAg ICB9CiMgMTY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgbWF4 KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBpZiAo X19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE4NiAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtaW4o Y29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7Cgog ICAgICBpZiAoX19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0K IyAyMDQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29u c3QgX1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUg X19jb21wKQogICAgewoKICAgICAgaWYgKF9fY29tcChfX2EsIF9fYikpIHJldHVybiBfX2I7IHJl dHVybiBfX2E7CiAgICB9CiMgMjIxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf T3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5KF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQsCiAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBmb3IgKCA7IF9f Zmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAgICAgKl9fcmVzdWx0 ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5l IF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAg ICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlw ZQogICAgICAgICAgX0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3Qg LSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0 OwogICAgICAgICsrX19maXJzdDsKICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJl dHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5l IF9UcCoKICAgIF9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBf X2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmly c3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgICAgcmV0dXJuIF9fcmVz dWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAg X19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJldHVy biBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShf X2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091 dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9hdXgyKF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19s YXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKF9UcCogX19m aXJzdCwgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0LCBfX3RydWVf dHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1 bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAqCiAgICBfX2Nv cHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LAogICAgICAgICAg ICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfdHJp dmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgog ICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBl CiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFp dHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAg IF9Ucml2aWFsOwogICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5X2F1eDIoX19maXJzdCwg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQuYmFz ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSkpOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl cj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs dCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNfdHJpdmlhbF9h c3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAgcmV0dXJuIF9fY29w eV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0 LAogICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9P dXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkK ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJ dGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdC5i YXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxp bmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2Vf dHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9P dXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIoX19m aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CiMgMzM5ICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0 SXRlcgogICAgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfT3V0 cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsK ICAgICAgIHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fTm9y bWFsKCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIx LCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFs SXRlcjIKICAgIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIF9C aWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVy YXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICAq LS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0JpZGlyZWN0aW9u YWxJdGVyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcgogICAgX19jb3B5X2JhY2t3YXJk KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAg ICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX247 CiAgICAgIGZvciAoX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAg ICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0K CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUg X0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQm9vbFR5cGU+CiAgICBz dHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCiAgICB7CiAgICAgIHN0YXRpYyBfQmlkaXJl Y3Rpb25hbEl0ZXIyCiAgICAgIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlk aXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f cmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAg ICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19jb3B5X2Jh Y2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAgewogICAgICBzdGF0 aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3Qs IF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAgICAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9f bGFzdCAtIF9fZmlyc3Q7CiAgICAgICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3Qs IHNpemVvZihfVHApICogX051bSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICAg ICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9i YWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAg ICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCog X19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNr d2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgICAgICAgIDo6Y29weShf X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFj a3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czx0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Omhh c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IgX1RyaXZpYWw7CiAgICAgIHJldHVybiBfX2Nv cHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAg ICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGUg PHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5 X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1 bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX0JJMihfX2NvcHlfYmFja3dhcmRfYXV4KF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFzZSgpKSk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1l IF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJk X291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFs c2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0 LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+ CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRv cihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFs OwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19m aXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgogIHRl bXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAg IF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkx IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBf X3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19u b3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2Nv cHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJ Mj4KICAgIGlubGluZSBfQkkyCiAgICBjb3B5X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJMSBf X2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMT46Ol9Ob3JtYWwgX19Ob3Jt YWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQojIDUwOSAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBmaWxsKF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7 CgogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAg ICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgIH0KIyA1MzEgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJ dGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIGZp bGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkK ICAgIHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAg ICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoK ICBpbmxpbmUgdm9pZAogIGZpbGwodW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hh ciogX19sYXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgdW5zaWduZWQgY2hh ciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJz dCk7CiAgfQoKICBpbmxpbmUgdm9pZAogIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25l ZCBjaGFyKiBfX2xhc3QsIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgc2lnbmVkIGNo YXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQg Y2hhcj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmls bChjaGFyKiBfX2ZpcnN0LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykKICB7CiAgICBj aGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVk IGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfU2l6ZT4KICAgIGlubGluZSB1bnNpZ25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2lnbmVkIGNo YXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogICAgewog ICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2Zp cnN0ICsgX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBz aWduZWQgY2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHNp Z25lZCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwg X19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9TaXplPgogICAgaW5saW5lIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1Np emUgX19uLCBjb25zdCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJz dCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMgNjA2ICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBwYWlyPF9J bnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4KICAgIG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIp CiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEg IT0gX19sYXN0MSAmJiAqX19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgICArK19fZmlyc3QyOwogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0 ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKICAgIH0KIyA2NDAgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0JpbmFy eVByZWRpY2F0ZT4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0 Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19i aW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0g X19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAg ICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4gcGFp cjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMg NjY4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBp bmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f bGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAg CiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwg KytfX2ZpcnN0MikKICAgICAgICBpZiAoISgqX19maXJzdDEgPT0gKl9fZmlyc3QyKSkKICAgICAg ICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNjk5ICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQ cmVkaWNhdGU+CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEs IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAg ICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAg CgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJz dDIpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAg ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNzMyICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBs ZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy LCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoK ICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIK ICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICAgICAgaWYgKCpfX2Zp cnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmICgqX19m aXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAg cmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0K IyA3NjcgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5w dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAg ICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh c3QyCiAgICAgICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmIChf X2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg ICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFs c2U7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIg IT0gX19sYXN0MjsKICAgIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFy ZShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgdW5zaWduZWQgY2hhciogX19s YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2Zp cnN0MiwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKICB7CiAgICBjb25zdCBzaXplX3Qg X19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogICAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9f bGFzdDIgLSBfX2ZpcnN0MjsKICAgIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0 MSwgX19maXJzdDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOwogICAgcmV0dXJuIF9fcmVzdWx0ICE9 IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7CiAgfQoKICBpbmxpbmUgYm9vbAog IGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFy KiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3Qy LCBjb25zdCBjaGFyKiBfX2xhc3QyKQogIHsKCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2Nv bXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xh c3QyKTsKCgoKCgoKICB9Cgp9CiMgNjggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvdmVjdG9y IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEg MwojIDg0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAx ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Nhc3NlcnQiIDEgMwojIDQ3ICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2Nhc3NlcnQiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAx IDMKIyA2NSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2 b2lkIF9fYXNzZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hh ciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5l LCBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fbm9yZXR1cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQg X19lcnJudW0sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hh ciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQojIDQ5ICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2Nhc3NlcnQiIDIgMwojIDg1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv Yml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i aXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2V4Y2Vw dGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv ZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFk X2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgog IHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlw ZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19z KTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv aWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93 X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1l X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBf X3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQoj IDg2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAxIDMKIyA1NCAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNl IHN0ZAp7CgoKCgogIHN0cnVjdCBfUmVmY291bnRfQmFzZQogIHsKCiAgICB0eXBlZGVmIHNpemVf dCBfUkNfdDsKCgogICAgdm9sYXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCiAgICBfX2d0aHJl YWRfbXV0ZXhfdCBfTV9yZWZfY291bnRfbG9jazsKCiAgICBfUmVmY291bnRfQmFzZShfUkNfdCBf X24pIDogX01fcmVmX2NvdW50KF9fbikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9f dG1wID0gezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fTsKICAgICAg X01fcmVmX2NvdW50X2xvY2sgPSBfX3RtcDsKCgoKCgogICAgfQoKICAgIHZvaWQKICAgIF9NX2lu Y3IoKQogICAgewogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fcmVmX2NvdW50X2xvY2sp OwogICAgICArK19NX3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01f cmVmX2NvdW50X2xvY2spOwogICAgfQoKICAgIF9SQ190CiAgICBfTV9kZWNyKCkKICAgIHsKICAg ICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgdm9sYXRp bGUgX1JDX3QgX190bXAgPSAtLV9NX3JlZl9jb3VudDsKICAgICAgX19ndGhyZWFkX211dGV4X3Vu bG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgfTsK IyAxMDkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAg dGVtcGxhdGU8aW50IF9fZHVtbXk+CiAgICBzdHJ1Y3QgX1N3YXBfbG9ja19zdHJ1Y3QKICAgIHsg c3RhdGljIF9fZ3RocmVhZF9tdXRleF90IF9TX3N3YXBfbG9jazsgfTsKCiAgdGVtcGxhdGU8aW50 IF9fZHVtbXk+CiAgICBfX2d0aHJlYWRfbXV0ZXhfdAogICAgX1N3YXBfbG9ja19zdHJ1Y3Q8X19k dW1teT46Ol9TX3N3YXBfbG9jayA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7 IDAsIDAgfX07CgoKCiAgaW5saW5lIHVuc2lnbmVkIGxvbmcKICBfQXRvbWljX3N3YXAodW5zaWdu ZWQgbG9uZyAqIF9fcCwgdW5zaWduZWQgbG9uZyBfX3EpCiAgewogICAgX19ndGhyZWFkX211dGV4 X2xvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xvY2spOwogICAgdW5zaWduZWQg bG9uZyBfX3Jlc3VsdCA9ICpfX3A7CiAgICAqX19wID0gX19xOwogICAgX19ndGhyZWFkX211dGV4 X3VubG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICByZXR1cm4g X19yZXN1bHQ7CiAgfQojIDE1MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90 aHJlYWRzLmgiIDMKICBzdHJ1Y3QgX1NUTF9tdXRleF9sb2NrCiAgewoKCgoKCiAgICBfX2d0aHJl YWRfbXV0ZXhfdCBfTV9sb2NrOwoKICAgIHZvaWQKICAgIF9NX2luaXRpYWxpemUoKQogICAgewoj IDE4NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICAg IH0KCiAgICB2b2lkCiAgICBfTV9hY3F1aXJlX2xvY2soKQogICAgewoKCgogICAgICBfX2d0aHJl YWRfbXV0ZXhfbG9jaygmX01fbG9jayk7CiAgICB9CgogICAgdm9pZAogICAgX01fcmVsZWFzZV9s b2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fbG9jayk7CiAg ICB9CiAgfTsKIyAyMjAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFk cy5oIiAzCiAgc3RydWN0IF9TVExfYXV0b19sb2NrCiAgewogICAgX1NUTF9tdXRleF9sb2NrJiBf TV9sb2NrOwoKICAgIF9TVExfYXV0b19sb2NrKF9TVExfbXV0ZXhfbG9jayYgX19sb2NrKSA6IF9N X2xvY2soX19sb2NrKQogICAgeyBfTV9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9CgogICAgfl9T VExfYXV0b19sb2NrKCkgeyBfTV9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9CgogIHByaXZhdGU6 CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBfU1RMX2F1dG9fbG9jayYpOwogICAgX1NUTF9hdXRv X2xvY2soY29uc3QgX1NUTF9hdXRvX2xvY2smKTsKICB9OwoKfQojIDg3ICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgOTgg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwogIGNsYXNzIF9f bmV3X2FsbG9jCiAgewogIHB1YmxpYzoKICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6 ZV90IF9fbikKICAgIHsgcmV0dXJuIDo6b3BlcmF0b3IgbmV3KF9fbik7IH0KCiAgICBzdGF0aWMg dm9pZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCkKICAgIHsgOjpvcGVyYXRvciBk ZWxldGUoX19wKTsgfQogIH07CiMgMTIxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIGNsYXNzIF9fbWFsbG9j X2FsbG9jX3RlbXBsYXRlCiAgICB7CiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgdm9pZCogX1Nf b29tX21hbGxvYyhzaXplX3QpOwogICAgICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9p ZCosIHNpemVfdCk7CiAgICAgIHN0YXRpYyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5k bGVyKSgpOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNp emVfdCBfX24pCiAgICAgIHsKICAgICAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwog ICAgICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxsb2MoX19uKTsK ICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAg IGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgKQogICAgICB7IGZyZWUoX19wKTsgfQoKICAg ICAgc3RhdGljIHZvaWQqCiAgICAgIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgLCBzaXpl X3QgX19uZXdfc3opCiAgICAgIHsKICAgICAgICB2b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19w LCBfX25ld19zeik7CiAgICAgICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29t X3JlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9 CgogICAgICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgp KSkoKQogICAgICB7CiAgICAgICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29v bV9oYW5kbGVyOwogICAgICAgIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOwogICAg ICAgIHJldHVybihfX29sZCk7CiAgICAgIH0KICAgIH07CgoKICB0ZW1wbGF0ZSA8aW50IF9faW5z dD4KICAgIHZvaWQgKCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2Nf YWxsb2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZv aWQqCiAgICBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNp emVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAg ICAgdm9pZCogX19yZXN1bHQ7CgogICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIF9f bXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICAg IGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpCiAgICAgICAgICAgIHN0ZDo6X190aHJvd19i YWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAg IF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAg ICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZSA8aW50IF9f aW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19v b21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQgKCogX19t eV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCogX19yZXN1bHQ7CgogICAgICBmb3IgKDs7 KQogICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxv Y19vb21faGFuZGxlcjsKICAgICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpCiAg ICAgICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9tYWxs b2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAg ICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAg ICAgfQogICAgfQoKCgoKCgogIHR5cGVkZWYgX19uZXdfYWxsb2MgX19tZW1faW50ZXJmYWNlOwoj IDIxOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVt cGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CiAgY2xhc3MgX19zaW1wbGVfYWxsb2MKICB7 CiAgcHVibGljOgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0 dXJuIDAgPT0gX19uID8gMCA6IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZiAo X1RwKSk7IH0KCiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZSgpCiAgICB7IHJldHVybiAoX1RwKikg X0FsbG9jOjphbGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9CgogICAgc3RhdGljIHZvaWQgZGVhbGxv Y2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgaWYgKDAgIT0gX19uKSBfQWxsb2M6OmRl YWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9CgogICAgc3RhdGljIHZvaWQgZGVh bGxvY2F0ZShfVHAqIF9fcCkKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChf VHApKTsgfQogIH07CiMgMjUxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs bG9jLmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgogIGNsYXNzIF9fZGVidWdfYWxsb2MK ICB7CiAgcHJpdmF0ZToKICAgIGVudW0ge19TX2V4dHJhID0gOH07CgoKICBwdWJsaWM6CgogICAg c3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7CiAgICAgIGNoYXIqIF9fcmVz dWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAg ICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247CiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQp IF9TX2V4dHJhOwogICAgfQoKICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBz aXplX3QgX19uKQogICAgewogICAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50 KSBfU19leHRyYTsKICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVhbF9w ID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19u IiwgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIsIDI3MCwgX19Q UkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxf cCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgfQoKICAgIHN0YXRpYyB2b2lkKiByZWFsbG9j YXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opCiAgICB7CiAg ICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgICAo c3RhdGljX2Nhc3Q8dm9pZD4gKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRfc3opID8gMCA6 IChfX2Fzc2VydF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6IiwgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIsIDI3NywgX19QUkVUVFlfRlVO Q1RJT05fXyksIDApKSk7CiAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKQogICAgICAgIF9B bGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50KSBfU19leHRyYSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N6ICsgKGludCkgX1NfZXh0 cmEpOwogICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAgICAgcmV0dXJuIF9f cmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgICB9CiAgfTsKIyAzMjQgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywg aW50IF9faW5zdD4KICBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGUKICB7CiAgcHJpdmF0 ZToKICAgIGVudW0ge19BTElHTiA9IDh9OwogICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAg ICBlbnVtIHtfTkZSRUVMSVNUUyA9IF9NQVhfQllURVMgLyBfQUxJR059OwoKICAgIHVuaW9uIF9P YmoKICAgIHsKICAgICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgIGNoYXIg X01fY2xpZW50X2RhdGFbMV07CiAgICB9OwoKICAgIHN0YXRpYyBfT2JqKiB2b2xhdGlsZSBfU19m cmVlX2xpc3RbX05GUkVFTElTVFNdOwoKCiAgICBzdGF0aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsK ICAgIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICAgIHN0YXRpYyBzaXplX3QgX1NfaGVhcF9z aXplOwoKICAgIHN0YXRpYyBfU1RMX211dGV4X2xvY2sgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jazsK CiAgICBzdGF0aWMgc2l6ZV90CiAgICBfU19yb3VuZF91cChzaXplX3QgX19ieXRlcykKICAgIHsg cmV0dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdCkgX0FMSUdOLTEpICYgfigoc2l6ZV90KSBfQUxJ R04gLSAxKSk7IH0KCiAgICBzdGF0aWMgc2l6ZV90CiAgICBfU19mcmVlbGlzdF9pbmRleChzaXpl X3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdClfQUxJR04tMSkv KHNpemVfdClfQUxJR04gLSAxKTsgfQoKCgogICAgc3RhdGljIHZvaWQqCiAgICBfU19yZWZpbGwo c2l6ZV90IF9fbik7CgoKCiAgICBzdGF0aWMgY2hhcioKICAgIF9TX2NodW5rX2FsbG9jKHNpemVf dCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgoKCiAgICBjbGFzcyBfTG9jawogICAgewogICAgcHVi bGljOgogICAgICBfTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9j ay5fTV9hY3F1aXJlX2xvY2soKTsgfQogICAgICB+X0xvY2soKSB7IGlmIChfX3RocmVhZHMpIF9T X25vZGVfYWxsb2NhdG9yX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0KICAgIH0gX19hdHRyaWJ1 dGVfXyAoKF9fdW51c2VkX18pKTsKICAgIGZyaWVuZCBjbGFzcyBfTG9jazsKCiAgcHVibGljOgoK ICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9p ZCogX19yZXQgPSAwOwoKICAgICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpCiAgICAg ICAgX19yZXQgPSBfX21lbV9pbnRlcmZhY2U6OmFsbG9jYXRlKF9fbik7CiAgICAgIGVsc2UKICAg ICAgICB7CiAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPSBfU19mcmVl X2xpc3QKICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCgogICAgICAgICAg X0xvY2sgX19sb2NrX2luc3RhbmNlOwogICAgICAgICAgX09iaiogX19yZXN0cmljdF9fIF9fcmVz dWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgaWYgKF9fcmVzdWx0ID09IDApCiAgICAg ICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAgICAgICAgZWxz ZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQg LT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgX19yZXQgPSBfX3Jlc3VsdDsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfTsKCgogICAgc3Rh dGljIHZvaWQKICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewogICAg ICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykKICAgICAgICBfX21lbV9pbnRlcmZhY2U6 OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX09i aiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0CiAgICAgICAgICAgID0gX1NfZnJlZV9saXN0ICsg X1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAgICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7 CgoKCiAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICBfX3EgLT4gX01f ZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAqX19teV9mcmVlX2xp c3QgPSBfX3E7CiAgICAgICAgfQogICAgfQoKICAgIHN0YXRpYyB2b2lkKgogICAgcmVhbGxvY2F0 ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsKICB9OwoKCiAg dGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAg b3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu c3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0PiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPGJvb2wgX190 aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3Qg X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAg ICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQog ICAgeyByZXR1cm4gZmFsc2U7IH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQg X19pbnN0PgogICAgY2hhcioKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs IF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9i anMpCiAgICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0OwogICAgICBzaXplX3QgX190b3RhbF9ieXRl cyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19lbmRf ZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxf Ynl0ZXMpCiAgICAgIHsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAg X1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7 CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkKICAgICAgICB7 CiAgICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAgICAgICAg ICBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgICAgICAgIF9fcmVzdWx0ID0g X1Nfc3RhcnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsK ICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg ewogICAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAgICAgICAgMiAqIF9fdG90 YWxfYnl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7CgogICAgICAgICAgaWYg KF9fYnl0ZXNfbGVmdCA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfT2JqKiB2b2xh dGlsZSogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1Nf ZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICAgKChfT2JqKilfU19z dGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAg ICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICAg ICAgfQogICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKikgX19tZW1faW50ZXJmYWNlOjph bGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9mcmVl KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgICBf T2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgX09iaiogX19wOwoK CgogICAgICAgICAgICAgIF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICBmb3IgKDsgX19pIDw9 IChzaXplX3QpIF9NQVhfQllURVM7IF9faSArPSAoc2l6ZV90KSBfQUxJR04pCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsg X1NfZnJlZWxpc3RfaW5kZXgoX19pKTsKICAgICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJl ZV9saXN0OwogICAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3ApCiAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2Zy ZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFy KilfX3A7CiAgICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUg KyBfX2k7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXpl LCBfX25vYmpzKSk7CgoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSAwOwogICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUg PSAoY2hhciopX19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CgoKICAg ICAgICAgICAgfQogICAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0OwogICAg ICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAg ICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICAgICAgfQog ICAgfQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB2b2lk KgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVm aWxsKHNpemVfdCBfX24pCiAgICB7CiAgICAgIGludCBfX25vYmpzID0gMjA7CiAgICAgIGNoYXIq IF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAgICBfT2JqKiB2b2xh dGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgIF9PYmoqIF9fcmVzdWx0OwogICAgICBfT2JqKiBf X2N1cnJlbnRfb2JqOwogICAgICBfT2JqKiBfX25leHRfb2JqOwogICAgICBpbnQgX19pOwoKICAg ICAgaWYgKDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmspOwogICAgICBfX215X2ZyZWVfbGlz dCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKICAgICAgX19yZXN1 bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9 IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykgewog ICAgICAgIF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAgIF9fbmV4dF9vYmogPSAo X09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2JqcyAtIDEg PT0gX19pKSB7CiAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0g MDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfX2N1cnJlbnRf b2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIH0K ICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KCgogIHRlbXBsYXRlPGJvb2wgdGhyZWFkcywg aW50IGluc3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMs IGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vbGRfc3osCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3 X3N6KQogICAgewogICAgICB2b2lkKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fY29weV9zejsK CiAgICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAo c2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19z eikpOwogICAgICB9CiAgICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRf dXAoX19uZXdfc3opKSByZXR1cm4oX19wKTsKICAgICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25l d19zeik7CiAgICAgIF9fY29weV9zeiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDog X19uZXdfc3o7CiAgICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgICBk ZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfQoK ICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBfU1RMX211dGV4X2xvY2sK ICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2RlX2Fs bG9jYXRvcl9sb2NrCiAgPSB7IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAs IDAgfX0gfTsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgY2hhciog X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfc3RhcnRfZnJl ZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIGNoYXIqIF9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0g MDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgc2l6ZV90IF9fZGVm YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7 CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIHR5cGVuYW1lIF9fZGVm YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCiAg X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZnJlZV9saXN0 W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwg MD4gX19hbGxvYzsKICB0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwgMD4g X19zaW5nbGVfY2xpZW50X2FsbG9jOwojIDYxMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFsbG9jYXRvcgp7 CiAgdHlwZWRlZiBfX2FsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNpemVf dHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAq IHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBf VHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5 cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmVi aW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFsbG9jYXRv cigpIHRocm93KCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQog IHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+Jikg dGhyb3coKSB7fQogIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhy ZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRy ZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICBfVHAq IGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9f biAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2Yo X1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShw b2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwg X19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93 KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0 cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwp OyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1w bGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBz aXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg dm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlw ZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmVi aW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07Cn07CgoKdGVtcGxh dGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFs bG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj b25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiBm YWxzZTsKfQojIDY5NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5o IiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9y CnsKICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5 cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBw b2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1Rw JiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBl ZGVmIF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmlu ZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAg X19hbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3Im IF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19h bGxvYykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihjb25zdCBfX2Fs bG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2Fs bG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7 fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsg fQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJl dHVybiAmX194OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQq ID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihf X3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDog MDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAg ICB7IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkp OyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNp emVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwg Y29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95 KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9j PgpjbGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNpemVfdCBzaXpl X3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9p ZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRl ZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5k IHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09 KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19h MS5fX3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z dCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191 bmRlcmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoKCgp0ZW1w bGF0ZSA8aW50IGluc3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19tYWxsb2NfYWxs b2NfdGVtcGxhdGU8aW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9j X2FsbG9jX3RlbXBsYXRlPGluc3Q+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8aW50 IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX21hbGxvY19hbGxvY190ZW1w bGF0ZTxfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxv Y190ZW1wbGF0ZTxfX2luc3Q+JikKewogIHJldHVybiBmYWxzZTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxv Yz4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYp IHsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wg b3BlcmF0b3IhPShjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0K IyA4NDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0cwp7 CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgdHlwZWRlZiB0 eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgYWxsb2NhdG9y X3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjb25zdCBi b29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoKCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwg YWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9 IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+IF9BbGxvY190eXBl OwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFs bG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5z dGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2Nf YWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0 b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7 Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnN0 cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk cywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVl OwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8 X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19h bGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxv Yz4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBl ZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5 cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFs bG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgaW50 IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICBf X2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPgp7CiAg c3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2lt cGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190 eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf X2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg X1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAog ICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRl ZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2lu c3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBhbGxvY2F0 b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFzcyBfQWxs b2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgX19kZWJ1Z19h bGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0g dHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8 X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz IGFsbG9jYXRvcjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPHdjaGFy X3Q+OwoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8 dHJ1ZSwgMD47Cgp9CiMgNjkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvdmVjdG9yIiAyIDMK IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMK IyA2NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwpu YW1lc3BhY2Ugc3RkCnsKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CiAg ICBpbmxpbmUgdm9pZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVl KQogICAgeyBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoX192YWx1ZSk7IH0KCgoK CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UMT4KICAgIGlubGluZSB2b2lkCiAgICBfQ29uc3RydWN0 KF9UMSogX19wKQogICAgeyBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEoKTsgfQoj IDk4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAg dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19k ZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19s YXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m aXJzdCkgX0Rlc3Ryb3koJipfX2ZpcnN0KTsgfQojIDExMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRv ciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpCiAgICB7IH0KCgoKCgoKICB0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9UcCogX19wb2ludGVy KQogICAgeyBfX3BvaW50ZXItPn5fVHAoKTsgfQojIDEzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19m aXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAg ICAgICAgICAgICAgICAgX1ZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBl X3RyYWl0czxfVmFsdWVfdHlwZT46Omhhc190cml2aWFsX2Rlc3RydWN0b3IKICAgICAgICAgICAg ICAgICAgICAgICBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKCiAgICAgIF9fZGVzdHJveV9hdXgo X19maXJzdCwgX19sYXN0LCBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcigpKTsKICAgIH0KfQojIDcw ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3ZlY3RvciIgMiAzCiMgMSAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDY2ICIvdXNyL2xv Y2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwpuYW1lc3BhY2Ug c3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9h dXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwg X19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9G b3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4 KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19y ZXN1bHQ7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf X2ZpcnN0LCArK19fY3VyKQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7 CiAgICAgICAgcmV0dXJuIF9fY3VyOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7 CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAg ICAgICAgfQogICAgfQojIDEwNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91 bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt ZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICB1bmluaXRpYWxpemVk X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0ZvcndhcmRJdGVy IF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIHJl dHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg X0lzX1BPRCgpKTsKICAgIH0KCiAgaW5saW5lIGNoYXIqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNv bnN0IGNoYXIqIF9fZmlyc3QsIGNvbnN0IGNoYXIqIF9fbGFzdCwgY2hhciogX19yZXN1bHQpCiAg ewogICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgICBy ZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgd2NoYXJf dCoKICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2No YXJfdCogX19sYXN0LAogICAgICAgICAgICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKICB7 CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0 IC0gX19maXJzdCkpOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwog IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAg IGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgeyBmaWxsKF9fZmlyc3QsIF9fbGFzdCwg X194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4K ICAgIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIg PSBfX2ZpcnN0OwogICAgICB0cnkgewogICAgICAgIGZvciAoIDsgX19jdXIgIT0gX19sYXN0OyAr K19fY3VyKQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICB9CiAgICAg IGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7 CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMgMTY0ICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l IF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHVuaW5pdGlh bGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29u c3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAg ICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3gsIF9Jc19QT0Qo KSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf U2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRp YWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKICAg IHsKICAgICAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCk7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4K ICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1 ciA9IF9fZmlyc3Q7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwg KytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAgICAgICByZXR1 cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9E ZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0K IyAyMTAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlw ZW5hbWUgX1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9maWxs X24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZh bHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRz PF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4gX191bmluaXRp YWxpemVkX2ZpbGxfbl9hdXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CiMg MjI3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmlu aXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs IF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gdW5pbml0 aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIHRyeSB7CiAg ICAgICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQp OwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShf X3Jlc3VsdCwgX19taWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0lu cHV0SXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9maWxs X2NvcHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQogICAgewog ICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwogICAgICB0cnkg ewogICAgICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX21p ZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95 KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw ZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2ZpbGwo X0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3Qy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKICAgIHsKICAg ICAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19s YXN0MSwgX19maXJzdDIpOwogICAgICB0cnkgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChf X21pZDIsIF9fbGFzdDIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsK ICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QyLCBfX21pZDIpOwogICAgICAgICAgdGhyb3c7CiAg ICAgICAgfQogICAgfQoKfQojIDcxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3ZlY3RvciIg MiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMSAz CiMgNjUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKIyAx ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNl IHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAg X190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lk KTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93 X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50 KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBj aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19z KTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2 b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190 aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191 bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19m YWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA2NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CiMgNzggIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfSXNTdGF0aWM+CmNsYXNzIF9WZWN0b3JfYWxsb2Nf YmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxs b2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9j YXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRv cjsgfQoKICBfVmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAg IDogX01fZGF0YV9hbGxvY2F0b3IoX19hKSwgX01fc3RhcnQoMCksIF9NX2ZpbmlzaCgwKSwgX01f ZW5kX29mX3N0b3JhZ2UoMCkKICB7fQoKcHJvdGVjdGVkOgogIGFsbG9jYXRvcl90eXBlIF9NX2Rh dGFfYWxsb2NhdG9yOwogIF9UcCogX01fc3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBf TV9lbmRfb2Zfc3RvcmFnZTsKCiAgX1RwKiBfTV9hbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyBy ZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVhbGxv Y2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgaWYgKF9fcCkgX01fZGF0YV9hbGxvY2F0 b3IuZGVhbGxvY2F0ZShfX3AsIF9fbik7IH0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX0FsbG9jYXRvcj4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jYXRvciwg dHJ1ZT4gewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0Fs bG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxv Y2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUo KTsgfQoKICBfVmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKQogICAgOiBf TV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKQogIHt9Cgpwcm90 ZWN0ZWQ6CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2VuZF9v Zl9zdG9yYWdlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2Nh dG9yPjo6X0FsbG9jX3R5cGUgX0FsbG9jX3R5cGU7CiAgX1RwKiBfTV9hbGxvY2F0ZShzaXplX3Qg X19uKQogICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9N X2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICB7IF9BbGxvY190eXBlOjpkZWFs bG9jYXRlKF9fcCwgX19uKTt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+ CnN0cnVjdCBfVmVjdG9yX2Jhc2UKICA6IHB1YmxpYyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBf QWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBf QWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CnsKICB0eXBlZGVmIF9WZWN0b3JfYWxsb2NfYmFzZTxf VHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9U cCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRlZiB0 eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9WZWN0b3Jf YmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkge30KICBfVmVjdG9y X2Jhc2Uoc2l6ZV90IF9fbiwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2Ep IHsKICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2ZpbmlzaCA9IF9NX3N0 YXJ0OwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICB9CgogIH5fVmVj dG9yX2Jhc2UoKSB7IF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0g X01fc3RhcnQpOyB9Cn07CiMgMTY1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X3ZlY3Rvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRv cjxfVHA+ID4KY2xhc3MgdmVjdG9yIDogcHJvdGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxv Yz4KewoKIAoKcHJpdmF0ZToKICB0eXBlZGVmIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4gX0Jh c2U7CiAgdHlwZWRlZiB2ZWN0b3I8X1RwLCBfQWxsb2M+IHZlY3Rvcl90eXBlOwpwdWJsaWM6CiAg dHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAg dHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX19nbnVf Y3h4OjpfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCB2ZWN0b3JfdHlwZT4gaXRlcmF0b3I7CiAg dHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIHZlY3Rv cl90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwog IHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgc2l6 ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogIHR5 cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFs bG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2Fs bG9jYXRvcigpOyB9CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4g Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0 b3I+IHJldmVyc2VfaXRlcmF0b3I7Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9j YXRlOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpfTV9zdGFy dDsKICB1c2luZyBfQmFzZTo6X01fZmluaXNoOwogIHVzaW5nIF9CYXNlOjpfTV9lbmRfb2Zfc3Rv cmFnZTsKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlv biwgY29uc3QgX1RwJiBfX3gpOwogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0 aW9uKTsKCnB1YmxpYzoKCgoKCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvciAo X01fc3RhcnQpOyB9CgoKCgoKICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CiAgICB7IHJl dHVybiBjb25zdF9pdGVyYXRvciAoX01fc3RhcnQpOyB9CgoKCgoKICBpdGVyYXRvciBlbmQoKSB7 IHJldHVybiBpdGVyYXRvciAoX01fZmluaXNoKTsgfQoKCgoKCiAgY29uc3RfaXRlcmF0b3IgZW5k KCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX2ZpbmlzaCk7IH0KCgoKCgogIHJl dmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5k KCkpOyB9CgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0CiAgICB7 IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoKCgoKCgogIHJldmVyc2Vf aXRlcmF0b3IgcmVuZCgpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9 CgoKCgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAgIHsgcmV0dXJu IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCgogIHNpemVfdHlwZSBzaXplKCkg Y29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9CgoKICBzaXpl X3R5cGUgbWF4X3NpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVv ZihfVHApOyB9CgoKCgoKICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdAogICAgeyByZXR1cm4g c2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlKSAtIGJlZ2luKCkpOyB9 CgoKCgogIGJvb2wgZW1wdHkoKSBjb25zdAogICAgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsg fQojIDI4OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwog IHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIHsgcmV0dXJuICooYmVnaW4oKSAr IF9fbik7IH0KIyAzMDAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9y LmgiIDMKICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25zdCB7 IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CgogIHZvaWQgX01fcmFuZ2VfY2hlY2soc2l6ZV90 eXBlIF9fbikgY29uc3QgewogICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCiAgICAgIF9fdGhy b3dfb3V0X29mX3JhbmdlKCJ2ZWN0b3IiKTsKICB9CiMgMzE2ICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24p CiAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KIyAzMjgg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICBjb25zdF9y ZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsgX01fcmFuZ2VfY2hlY2soX19u KTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKCiAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFsbG9j YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpIHt9Cgog IHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICAgIGNvbnN0 IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX24s IF9fYSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9f biwgX192YWx1ZSk7IH0KCiAgZXhwbGljaXQgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICA6IF9C YXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXpl ZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9CgogIHZlY3Rvcihjb25zdCB2ZWN0b3I8 X1RwLCBfQWxsb2M+JiBfX3gpCiAgICA6IF9CYXNlKF9feC5zaXplKCksIF9feC5nZXRfYWxsb2Nh dG9yKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4oKSwg X194LmVuZCgpLCBfTV9zdGFydCk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRv cj4KICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh c3QsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBl KCkpCiAgICAgICAgOiBfQmFzZShfX2EpCiAgICAgICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAg X01faW5pdGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9Cgog IHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0lu dGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3RydWVfdHlwZSkKICAgICAgICB7CiAgICAg IF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBf TV9zdGFydCArIF9fbjsKICAgICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01f c3RhcnQsIF9fbiwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJh dG9yPgogICAgdm9pZAogICAgICAgIF9NX2luaXRpYWxpemVfYXV4KF9JbnB1dEl0ZXJhdG9yIF9f Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgICAgIHsKICAg ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6 aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJDYXRlZ29yeTsKICAgICAgICAgIF9NX3JhbmdlX2luaXRp YWxpemUoX19maXJzdCwgX19sYXN0LCBfSXRlckNhdGVnb3J5KCkpOwogICAgICAgIH0KCiAgfnZl Y3RvcigpCiAgeyBfRGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsgfQoKICB2ZWN0b3I8X1Rw LCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KTsKIyAz OTMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lk IHJlc2VydmUoc2l6ZV90eXBlIF9fbikgewogICAgaWYgKGNhcGFjaXR5KCkgPCBfX24pIHsKICAg ICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgIHBvaW50ZXIgX190 bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX24sIF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAg ICBfRGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9z dGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190 bXA7CiAgICAgIF9NX2ZpbmlzaCA9IF9fdG1wICsgX19vbGRfc2l6ZTsKICAgICAgX01fZW5kX29m X3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIH0KICB9CiMgNDIxICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCBhc3NpZ24oc2l6ZV90eXBl IF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQog IHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7Cgog IHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgYXNzaWduKF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50 ZWdyYWw7CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3Jh bCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkCiAgICAgX01f YXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBl KQogICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0K CiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcj4KICAgIHZvaWQKICAgIF9NX2Fzc2lnbl9kaXNw YXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUp CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+ OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5OwogICAgICBfTV9hc3NpZ25fYXV4KF9f Zmlyc3QsIF9fbGFzdCwgX0l0ZXJDYXRlZ29yeSgpKTsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIGlucHV0 X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAg dm9pZAogICAgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJk SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7 CgoKCgoKICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQoKCgoKCiAgY29u c3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KCgoKCgogIHJl ZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9CgoKCgoKICBjb25zdF9yZWZl cmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQojIDQ4OCAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQKICBwdXNoX2Jh Y2soY29uc3QgX1RwJiBfX3gpCiAgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3Rv cmFnZSkgewogICAgICBfQ29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5p c2g7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgfQoj IDUxOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHZv aWQKICBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkKICB7CiAgICBzdGQ6OnN3YXAoX01f c3RhcnQsIF9feC5fTV9zdGFydCk7CiAgICBzdGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmlu aXNoKTsKICAgIHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwgX194Ll9NX2VuZF9vZl9zdG9y YWdlKTsKICB9CiMgNTM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rv ci5oIiAzCiAgaXRlcmF0b3IKICBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1Rw JiBfX3gpCiAgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAg aWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgp KSB7CiAgICAgIF9Db25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19NX2ZpbmlzaDsK ICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bvc2l0aW9uKSwg X194KTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KIyA1NjIgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICBpdGVyYXRvcgogIGluc2VydChpdGVy YXRvciBfX3Bvc2l0aW9uKQogIHsKICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVn aW4oKTsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlv biA9PSBlbmQoKSkgewogICAgICBfQ29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmlu aXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRp b24pKTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KCgogIHRlbXBsYXRlPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgICAgIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lu cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3Jh bCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19s YXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAg IHZvaWQKICAgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2Vy IF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBfTV9maWxsX2luc2VydChf X3Bvcywgc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX24pLCBzdGF0aWNfY2FzdDxfVHA+KF9fdmFs KSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkCiAgICAgICAg X01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29y eSBfSXRlckNhdGVnb3J5OwogICAgICBfTV9yYW5nZV9pbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9f bGFzdCwgX0l0ZXJDYXRlZ29yeSgpKTsKICAgIH0KIyA2MTIgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lkIGluc2VydCAoaXRlcmF0b3IgX19wb3Ms IHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQogICAgeyBfTV9maWxsX2luc2VydChfX3Bv cywgX19uLCBfX3gpOyB9CgogIHZvaWQgX01fZmlsbF9pbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBz aXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7CiMgNjI2ICIvdXNyL2xvY2FsL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCBwb3BfYmFjaygpIHsKICAgIC0tX01f ZmluaXNoOwogICAgX0Rlc3Ryb3koX01fZmluaXNoKTsKICB9CiMgNjQ1ICIvdXNyL2xvY2FsL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0 b3IgX19wb3NpdGlvbikgewogICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICBj b3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAtLV9NX2ZpbmlzaDsK ICAgIF9EZXN0cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiMgNjY4 ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgaXRlcmF0 b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBpdGVyYXRv ciBfX2koY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KSk7CiAgICBfRGVzdHJveShfX2ksIGVu ZCgpKTsKICAgIF9NX2ZpbmlzaCA9IF9NX2ZpbmlzaCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsKICAg IHJldHVybiBfX2ZpcnN0OwogIH0KIyA2ODUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgY29u c3QgX1RwJiBfX3gpIHsKICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAgICBlcmFzZShi ZWdpbigpICsgX19uZXdfc2l6ZSwgZW5kKCkpOwogICAgZWxzZQogICAgICBpbnNlcnQoZW5kKCks IF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgfQojIDcwMSAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25l d19zaXplKSB7IHJlc2l6ZShfX25ld19zaXplLCBfVHAoKSk7IH0KCgoKCgoKCiAgdm9pZCBjbGVh cigpIHsgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9Cgpwcm90ZWN0ZWQ6CgogIHRlbXBsYXRlIDxj bGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHBvaW50ZXIgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6 ZV90eXBlIF9fbiwgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogIHsK ICAgIHBvaW50ZXIgX19yZXN1bHQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgdHJ5IHsKICAgICAg dW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICByZXR1 cm4gX19yZXN1bHQ7CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBfTV9kZWFs bG9jYXRlKF9fcmVzdWx0LCBfX24pOwogICAgICAgIHRocm93OwogICAgICB9CiAgfQoKICB0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKICAgIGZvciAoIDsgX19maXJz dCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICB9CgoK ICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRp YWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgewogICAg c2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICBfTV9zdGFydCA9 IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19u OwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01f c3RhcnQpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01f cmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3Ig X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKfTsK CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I9 PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxv Yz4mIF9feSkKewogIHJldHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICAg ZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPChjb25zdCB2ZWN0 b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewog IHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKHZl Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgX194 LnN3YXAoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUg Ym9vbApvcGVyYXRvciE9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVj dG9yPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+KGNvbnN0 IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195 KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs bG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9f eCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194 KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVy YXRvcj49KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwg X0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0FsbG9jPgp2ZWN0b3I8X1RwLF9BbGxvYz4mCnZlY3RvcjxfVHAsX0FsbG9j Pjo6b3BlcmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkKewogIGlmICgmX194 ICE9IHRoaXMpIHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6ZSgpOwogICAg aWYgKF9feGxlbiA+IGNhcGFjaXR5KCkpIHsKICAgICAgcG9pbnRlciBfX3RtcCA9IF9NX2FsbG9j YXRlX2FuZF9jb3B5KF9feGxlbiwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7CiAgICAgIF9EZXN0 cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBf TV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAg ICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9feGxlbjsKICAgIH0KICAgIGVsc2Ug aWYgKHNpemUoKSA+PSBfX3hsZW4pIHsKICAgICAgaXRlcmF0b3IgX19pKGNvcHkoX194LmJlZ2lu KCksIF9feC5lbmQoKSwgYmVnaW4oKSkpOwogICAgICBfRGVzdHJveShfX2ksIGVuZCgpKTsKICAg IH0KICAgIGVsc2UgewogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSArIHNpemUo KSwgX01fc3RhcnQpOwogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXpl KCksIF9feC5lbmQoKSwgX01fZmluaXNoKTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0 ICsgX194bGVuOwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYz4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2Fzc2lnbihzaXpl X3QgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbCkKewogIGlmIChfX24gPiBjYXBhY2l0eSgp KSB7CiAgICB2ZWN0b3I8X1RwLCBfQWxsb2M+IF9fdG1wKF9fbiwgX192YWwsIGdldF9hbGxvY2F0 b3IoKSk7CiAgICBfX3RtcC5zd2FwKCp0aGlzKTsKICB9CiAgZWxzZSBpZiAoX19uID4gc2l6ZSgp KSB7CiAgICBmaWxsKGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CiAgICBfTV9maW5pc2ggPSB1bmlu aXRpYWxpemVkX2ZpbGxfbihfTV9maW5pc2gsIF9fbiAtIHNpemUoKSwgX192YWwpOwogIH0KICBl bHNlCiAgICBlcmFzZShmaWxsX24oYmVnaW4oKSwgX19uLCBfX3ZhbCksIGVuZCgpKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl cj4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICBpdGVyYXRvciBfX2N1cihiZWdpbigpKTsK ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCAr K19fZmlyc3QpCiAgICAqX19jdXIgPSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp CiAgICBlcmFzZShfX2N1ciwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJz dCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2ln bl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXpl X3R5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwoKICBpZiAoX19sZW4gPiBj YXBhY2l0eSgpKSB7CiAgICBwb2ludGVyIF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVu LCBfX2ZpcnN0LCBfX2xhc3QpKTsKICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwog ICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7 CiAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9maW5pc2gg PSBfTV9zdGFydCArIF9fbGVuOwogIH0KICBlbHNlIGlmIChzaXplKCkgPj0gX19sZW4pIHsKICAg IGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpKTsK ICAgIF9EZXN0cm95KF9fbmV3X2ZpbmlzaCwgZW5kKCkpOwogICAgX01fZmluaXNoID0gX19uZXdf ZmluaXNoLmJhc2UoKTsKICB9CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSBfX2Zp cnN0OwogICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgIGNvcHkoX19maXJzdCwgX19taWQs IF9NX3N0YXJ0KTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX21pZCwgX19s YXN0LCBfTV9maW5pc2gpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j Pgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3Np dGlvbiwgY29uc3QgX1RwJiBfX3gpCnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9y YWdlKSB7CiAgICBfQ29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICAr K19NX2ZpbmlzaDsKICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgIGNvcHlfYmFja3dhcmQoX19w b3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksIGl0ZXJhdG9yKF9NX2ZpbmlzaC0gMSkp OwogICAgKl9fcG9zaXRpb24gPSBfX3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXpl X3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9f b2xkX3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0 YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdf c3RhcnQpOwogICAgdHJ5IHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5 KGl0ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgX0NvbnN0cnVjdChfX25ld19maW5p c2guYmFzZSgpLCBfX3gpOwogICAgICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNo ID0gdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAg fQogICAgY2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgX0Rlc3Ryb3koX19uZXdfc3RhcnQsX19u ZXdfZmluaXNoKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xl bik7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgIF9EZXN0cm95KGJlZ2luKCksIGVuZCgpKTsK ICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQp OwogICAgX01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7CiAgICBfTV9maW5pc2ggPSBfX25l d19maW5pc2guYmFzZSgpOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNl KCkgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9p ZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24p CnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBfQ29uc3RydWN0 KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsKICAgIGNvcHlf YmFja3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksCiAgICAgICAgICAg ICAgICAgIGl0ZXJhdG9yKF9NX2ZpbmlzaCAtIDEpKTsKICAgICpfX3Bvc2l0aW9uID0gX1RwKCk7 CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAg ICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6 ZSA6IDE7CiAgICBwb2ludGVyIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwogICAg cG9pbnRlciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAgIHRyeSB7CiAgICAgIF9fbmV3 X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9zdGFydCksIF9fcG9zaXRp b24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCk7 CiAgICAgIF9Db25zdHJ1Y3QoX19uZXdfZmluaXNoKTsKICAgICAgKytfX25ld19maW5pc2g7CiAg ICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBpdGVyYXRv cihfTV9maW5pc2gpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19u ZXdfZmluaXNoKTsKICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIF9EZXN0cm95 KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19z dGFydCxfX2xlbik7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgIF9EZXN0cm95KGJlZ2luKCks IGVuZCgpKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0g X01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgIF9NX2ZpbmlzaCA9IF9f bmV3X2ZpbmlzaDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsK ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCB2ZWN0b3I8X1Rw LCBfQWxsb2M+OjpfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUg X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg X194KQp7CiAgaWYgKF9fbiAhPSAwKSB7CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9y YWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgX1RwIF9feF9jb3B5ID0gX194OwogICAg ICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgpIC0gX19wb3NpdGlvbjsKICAg ICAgaXRlcmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7CiAgICAgIGlmIChfX2VsZW1zX2Fm dGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAtIF9fbiwg X01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX247CiAgICAgICAg Y29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2ggLSBfX24sIF9fb2xkX2Zpbmlz aCk7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgX19uLCBfX3hfY29weSk7 CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fZmlu aXNoLCBfX24gLSBfX2VsZW1zX2FmdGVyLCBfX3hfY29weSk7CiAgICAgICAgX01fZmluaXNoICs9 IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRp b24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19lbGVt c19hZnRlcjsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX194X2NvcHkp OwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3Np emUgPSBzaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBt YXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2Nh dGUoX19sZW4pKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAg ICAgdHJ5IHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoYmVnaW4o KSwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5p dGlhbGl6ZWRfZmlsbF9uKF9fbmV3X2ZpbmlzaCwgX19uLCBfX3gpOwogICAgICAgIF9fbmV3X2Zp bmlzaAogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9f bmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAg IF9EZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgICBfTV9kZWFsbG9j YXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9 CiAgICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRl KF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQg PSBfX25ld19zdGFydC5iYXNlKCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNl KCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47 CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9yYW5n ZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9f bGFzdDsgKytfX2ZpcnN0KSB7CiAgICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwog ICAgKytfX3BvczsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6 X01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYg KF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19maXJz dCwgX19sYXN0KTsKICAgIGlmIChzaXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5p c2gpID49IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgp IC0gX19wb3NpdGlvbjsKICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7CiAg ICAgIGlmIChfX2VsZW1zX2FmdGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5 KF9NX2ZpbmlzaCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2Zpbmlz aCArPSBfX247CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gg LSBfX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9z aXRpb24pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19t aWQgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxlbXNfYWZ0ZXIpOwogICAg ICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwogICAgICAg IF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRf Y29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmlu aXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgX19wb3Np dGlvbik7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICBjb25zdCBzaXplX3R5cGUgX19v bGRfc2l6ZSA9IHNpemUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6 ZSArIG1heChfX29sZF9zaXplLCBfX24pOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9h bGxvY2F0ZShfX2xlbikpOwogICAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQp OwogICAgICB0cnkgewogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShp dGVyYXRvcihfTV9zdGFydCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmlu aXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX25ld19maW5pc2gpOwogICAgICAgIF9f bmV3X2ZpbmlzaAogICAgICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRl cmF0b3IoX01fZmluaXNoKSwgX19uZXdfZmluaXNoKTsKICAgICAgfQogICAgICBjYXRjaCguLi4p CiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKTsK ICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLCBfX2xlbik7CiAgICAg ICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gp OwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0 YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7CiAgICAgIF9NX2Zpbmlz aCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdf c3RhcnQuYmFzZSgpICsgX19sZW47CiAgICB9CiAgfQp9Cgp9CiMgNzIgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvdmVjdG9yIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2J2ZWN0b3IuaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfYnZlY3Rvci5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHR5cGVkZWYgdW5zaWduZWQgbG9u ZyBfQml0X3R5cGU7CiAgZW51bSB7IF9NX3dvcmRfYml0ID0gaW50KDggKiBzaXplb2YoX0JpdF90 eXBlKSkgfTsKCnN0cnVjdCBfQml0X3JlZmVyZW5jZSB7CgogIF9CaXRfdHlwZSAqIF9NX3A7CiAg X0JpdF90eXBlIF9NX21hc2s7CiAgX0JpdF9yZWZlcmVuY2UoX0JpdF90eXBlICogX194LCBfQml0 X3R5cGUgX195KQogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7fQoKcHVibGljOgogIF9C aXRfcmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNrKDApIHt9CiAgb3BlcmF0b3IgYm9vbCgp IGNvbnN0IHsgcmV0dXJuICEhKCpfTV9wICYgX01fbWFzayk7IH0KICBfQml0X3JlZmVyZW5jZSYg b3BlcmF0b3I9KGJvb2wgX194KQogIHsKICAgIGlmIChfX3gpICpfTV9wIHw9IF9NX21hc2s7CiAg ICBlbHNlICpfTV9wICY9IH5fTV9tYXNrOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfQml0X3Jl ZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpCiAgICB7IHJldHVy biAqdGhpcyA9IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0X3JlZmVy ZW5jZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gYm9vbCgqdGhpcykgPT0gYm9vbChfX3gpOyB9 CiAgYm9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3QKICAgIHsg cmV0dXJuICFib29sKCp0aGlzKSAmJiBib29sKF9feCk7IH0KICB2b2lkIGZsaXAoKSB7ICpfTV9w IF49IF9NX21hc2s7IH0KfTsKCmlubGluZSB2b2lkIHN3YXAoX0JpdF9yZWZlcmVuY2UgX194LCBf Qml0X3JlZmVyZW5jZSBfX3kpCnsKICBib29sIF9fdG1wID0gX194OwogIF9feCA9IF9feTsKICBf X3kgPSBfX3RtcDsKfQoKc3RydWN0IF9CaXRfaXRlcmF0b3JfYmFzZSA6IHB1YmxpYyBpdGVyYXRv cjxyYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgYm9vbD4KewogIF9CaXRfdHlwZSAqIF9NX3A7 CiAgdW5zaWduZWQgaW50IF9NX29mZnNldDsKCiAgX0JpdF9pdGVyYXRvcl9iYXNlKF9CaXRfdHlw ZSAqIF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX01fcChfX3gpLCBfTV9vZmZzZXQoX195 KSB7fQoKICB2b2lkIF9NX2J1bXBfdXAoKSB7CiAgICBpZiAoX01fb2Zmc2V0KysgPT0gX01fd29y ZF9iaXQgLSAxKSB7CiAgICAgIF9NX29mZnNldCA9IDA7CiAgICAgICsrX01fcDsKICAgIH0KICB9 CiAgdm9pZCBfTV9idW1wX2Rvd24oKSB7CiAgICBpZiAoX01fb2Zmc2V0LS0gPT0gMCkgewogICAg ICBfTV9vZmZzZXQgPSBfTV93b3JkX2JpdCAtIDE7CiAgICAgIC0tX01fcDsKICAgIH0KICB9Cgog IHZvaWQgX01faW5jcihwdHJkaWZmX3QgX19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0g X19pICsgX01fb2Zmc2V0OwogICAgX01fcCArPSBfX24gLyBfTV93b3JkX2JpdDsKICAgIF9fbiA9 IF9fbiAlIF9NX3dvcmRfYml0OwogICAgaWYgKF9fbiA8IDApIHsKICAgICAgX01fb2Zmc2V0ID0g KHVuc2lnbmVkIGludCkgX19uICsgX01fd29yZF9iaXQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxz ZQogICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247CiAgfQoKICBib29sIG9wZXJh dG9yPT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBf TV9wID09IF9faS5fTV9wICYmIF9NX29mZnNldCA9PSBfX2kuX01fb2Zmc2V0OwogIH0KICBib29s IG9wZXJhdG9yPChjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0 dXJuIF9NX3AgPCBfX2kuX01fcCB8fCAoX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPCBf X2kuX01fb2Zmc2V0KTsKICB9CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9CaXRfaXRlcmF0b3Jf YmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gISgqdGhpcyA9PSBfX2kpOwogIH0KICBib29s IG9wZXJhdG9yPihjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0 dXJuIF9faSA8ICp0aGlzOwogIH0KICBib29sIG9wZXJhdG9yPD0oY29uc3QgX0JpdF9pdGVyYXRv cl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKF9faSA8ICp0aGlzKTsKICB9CiAgYm9v bCBvcGVyYXRvcj49KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICBy ZXR1cm4gISgqdGhpcyA8IF9faSk7CiAgfQp9OwoKaW5saW5lIHB0cmRpZmZfdApvcGVyYXRvci0o Y29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3gsIGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYg X195KSB7CiAgcmV0dXJuIF9NX3dvcmRfYml0ICogKF9feC5fTV9wIC0gX195Ll9NX3ApICsgX194 Ll9NX29mZnNldCAtIF9feS5fTV9vZmZzZXQ7Cn0KCgpzdHJ1Y3QgX0JpdF9pdGVyYXRvciA6IHB1 YmxpYyBfQml0X2l0ZXJhdG9yX2Jhc2UKewogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJl bmNlOwogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UqIHBvaW50ZXI7CiAgdHlwZWRlZiBfQml0X2l0 ZXJhdG9yIGl0ZXJhdG9yOwoKICBfQml0X2l0ZXJhdG9yKCkgOiBfQml0X2l0ZXJhdG9yX2Jhc2Uo MCwgMCkge30KICBfQml0X2l0ZXJhdG9yKF9CaXRfdHlwZSAqIF9feCwgdW5zaWduZWQgaW50IF9f eSkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQoKICByZWZlcmVuY2Ugb3Bl cmF0b3IqKCkgY29uc3QgeyByZXR1cm4gcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7 IH0KICBpdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVy biAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGl0ZXJhdG9yIF9f dG1wID0gKnRoaXM7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0 ZXJhdG9yJiBvcGVyYXRvci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRo aXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9 ICp0aGlzOwogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJh dG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIF9NX2luY3IoX19pKTsK ICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90 eXBlIF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRl cmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9y IF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBpdGVyYXRvciBv cGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgaXRlcmF0b3IgX190bXAg PSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQoKICByZWZlcmVuY2Ugb3BlcmF0 b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSB7IHJldHVybiAqKCp0aGlzICsgX19pKTsgfQp9OwoK aW5saW5lIF9CaXRfaXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRf aXRlcmF0b3ImIF9feCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoKc3RydWN0IF9CaXRfY29uc3Rf aXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIGJvb2wgcmVm ZXJlbmNlOwogIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBi b29sKiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRv cjsKCiAgX0JpdF9jb25zdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9 CiAgX0JpdF9jb25zdF9pdGVyYXRvcihfQml0X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kp CiAgICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJh dG9yKGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9f eC5fTV9wLCBfX3guX01fb2Zmc2V0KSB7fQoKICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkg Y29uc3QgewogICAgcmV0dXJuIF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7 CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fYnVtcF91cCgpOwog ICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgewog ICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJl dHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBfTV9i dW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0 b3ItLShpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1w X2Rvd24oKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9y Kz0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgX01faW5jcihfX2kpOwogICAgcmV0dXJuICp0 aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19p KSB7CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVy YXRvciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRl cmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBfX2k7CiAgfQogIGNvbnN0 X2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25z dF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9CiAg Y29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgcmV0 dXJuICooKnRoaXMgKyBfX2kpOwogIH0KfTsKCmlubGluZSBfQml0X2NvbnN0X2l0ZXJhdG9yCm9w ZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsg cmV0dXJuIF9feCArIF9fbjsgfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvciwgYm9v bCBfX2lzX3N0YXRpYz4KY2xhc3MgX0J2ZWN0b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBl ZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90 eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh dG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX0J2ZWN0b3JfYWxs b2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRv cihfX2EpLCBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30K CnByb3RlY3RlZDoKICBfQml0X3R5cGUgKiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikKICAgIHsg cmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRlKChfX24gKyBfTV93b3JkX2JpdCAtIDEp L19NX3dvcmRfYml0KTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFy dC5fTV9wKQogICAgICBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3As CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBf TV9zdGFydC5fTV9wKTsKICB9CgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X0JpdF90eXBlLCBf QWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOwog IF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgX0Jp dF90eXBlICogX01fZW5kX29mX3N0b3JhZ2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0 b3I+CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jYXRvciwgdHJ1ZT4gewpwdWJsaWM6 CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxv Y2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0 X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX0J2ZWN0 b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0YXJ0KCksIF9N X2ZpbmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVkOgogIHR5cGVkZWYg dHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfQml0X3R5cGUsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlw ZQogICAgICAgICAgX0FsbG9jX3R5cGU7CgogIF9CaXRfdHlwZSAqIF9NX2JpdF9hbGxvYyhzaXpl X3QgX19uKQogICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKChfX24gKyBfTV93b3Jk X2JpdCAtIDEpL19NX3dvcmRfYml0KTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlm IChfTV9zdGFydC5fTV9wKQogICAgICBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfTV9zdGFydC5f TV9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9N X3N0YXJ0Ll9NX3ApOwogIH0KCiAgX0JpdF9pdGVyYXRvciBfTV9zdGFydDsKICBfQml0X2l0ZXJh dG9yIF9NX2ZpbmlzaDsKICBfQml0X3R5cGUgKiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCnRlbXBs YXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9CdmVjdG9yX2Jhc2UKICA6IHB1YmxpYyBfQnZlY3Rv cl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxv Y190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfQnZl Y3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Fs bG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFz ZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9j YXRvcl90eXBlOwoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDog X0Jhc2UoX19hKSB7fQogIH5fQnZlY3Rvcl9iYXNlKCkgeyBfQmFzZTo6X01fZGVhbGxvY2F0ZSgp OyB9Cn07Cgp9CgoKCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPHR5cGVuYW1lIF9BbGxvYz4K ICBjbGFzcyB2ZWN0b3I8Ym9vbCwgX0FsbG9jPiA6IHB1YmxpYyBfQnZlY3Rvcl9iYXNlPF9BbGxv Yz4KICB7CiAgcHVibGljOgogICAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7CiAgICB0eXBlZGVm IHNpemVfdCBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7 CiAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgYm9vbCBj b25zdF9yZWZlcmVuY2U7CiAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogICAg dHlwZWRlZiBjb25zdCBib29sKiBjb25zdF9wb2ludGVyOwoKICAgIHR5cGVkZWYgX0JpdF9pdGVy YXRvciBpdGVyYXRvcjsKICAgIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVy YXRvcjsKCiAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0 X3JldmVyc2VfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+ IHJldmVyc2VfaXRlcmF0b3I7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBfQnZlY3Rvcl9iYXNlPF9B bGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogICAgYWxsb2NhdG9yX3R5cGUg Z2V0X2FsbG9jYXRvcigpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9CdmVjdG9yX2Jhc2U8X0FsbG9j Pjo6Z2V0X2FsbG9jYXRvcigpOwogICAgfQoKICBwcm90ZWN0ZWQ6CiAgICB1c2luZyBfQnZlY3Rv cl9iYXNlPF9BbGxvYz46Ol9NX2JpdF9hbGxvYzsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0Fs bG9jPjo6X01fZGVhbGxvY2F0ZTsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01f c3RhcnQ7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2ZpbmlzaDsKICAgIHVz aW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fZW5kX29mX3N0b3JhZ2U7CgogIHByb3RlY3Rl ZDoKICAgIHZvaWQgX01faW5pdGlhbGl6ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIF9CaXRfdHlw ZSAqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9f cSArIChfX24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0OwogICAgICBfTV9zdGFydCA9 IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgZGlmZmVyZW5j ZV90eXBlKF9fbik7CiAgICB9CiAgICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3Np dGlvbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9z dG9yYWdlKSB7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9N X2ZpbmlzaCArIDEpOwogICAgICAgICpfX3Bvc2l0aW9uID0gX194OwogICAgICAgICsrX01fZmlu aXNoOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUo KQogICAgICAgICAgICAgICAgICAgICAgICAgID8gMiAqIHNpemUoKSA6IHN0YXRpY19jYXN0PHNp emVfdHlwZT4oX01fd29yZF9iaXQpOwogICAgICAgIF9CaXRfdHlwZSAqIF9fcSA9IF9NX2JpdF9h bGxvYyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0 aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICAqX19pKysgPSBfX3g7CiAgICAgICAgX01f ZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKICAgICAgICBfTV9kZWFsbG9j YXRlKCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfTV93b3Jk X2JpdCAtIDEpL19NX3dvcmRfYml0OwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAw KTsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAg IHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0 b3JfdGFnKSB7CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoKTsKICAgICAgX01fZmluaXNoID0g aXRlcmF0b3IoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSAwOwogICAgICBmb3IgKCA7IF9f Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsK ICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHZvaWQgX01f aW5pdGlhbGl6ZV9yYW5nZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0 b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf dGFnKSB7CiAgICAgIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwog ICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9z dGFydCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9p ZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgICAgZm9yICggOyBfX2Zp cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICAgICAgX19wb3MgPSBpbnNlcnQoX19wb3Ms ICpfX2ZpcnN0KTsKICAgICAgICArK19fcG9zOwogICAgICB9CiAgICB9CgogICAgdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRv ciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg IGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewog ICAgICAgIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAg IGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9fbikgewogICAgICAgICAgY29weV9iYWNrd2Fy ZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwog ICAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwogICAgICAgICAgX01f ZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAgIH0KICAgICAgICBlbHNlIHsK ICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAg ICAgICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgICAg aXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDAp KTsKICAgICAgICAgIF9faSA9IGNvcHkoX19maXJzdCwgX19sYXN0LCBfX2kpOwogICAgICAgICAg X01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKICAgICAgICAgIF9NX2Rl YWxsb2NhdGUoKTsKICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsg X01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0 b3IoX19xLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgcHVibGljOgogICAgaXRlcmF0 b3IgYmVnaW4oKSB7IHJldHVybiBfTV9zdGFydDsgfQogICAgY29uc3RfaXRlcmF0b3IgYmVnaW4o KSBjb25zdCB7IHJldHVybiBfTV9zdGFydDsgfQogICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4g X01fZmluaXNoOyB9CiAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9m aW5pc2g7IH0KCiAgICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2Vf aXRlcmF0b3IoZW5kKCkpOyB9CiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNv bnN0IHsKICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOwogICAgfQog ICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdp bigpKTsgfQogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgewogICAgICBy ZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKICAgIH0KCiAgICBzaXplX3R5 cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9CiAg ICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAg ICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdCB7CiAgICAgIHJldHVybiBzaXplX3R5cGUoY29u c3RfaXRlcmF0b3IoX01fZW5kX29mX3N0b3JhZ2UsIDApIC0gYmVnaW4oKSk7CiAgICB9CiAgICBi b29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICAgIHJlZmVy ZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSAr IGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10o c2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5j ZV90eXBlKF9fbikpOyB9CgogICAgdm9pZCBfTV9yYW5nZV9jaGVjayhzaXplX3R5cGUgX19uKSBj b25zdCB7CiAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfb3V0 X29mX3JhbmdlKCJ2ZWN0b3I8Ym9vbD4iKTsKICAgIH0KCiAgICByZWZlcmVuY2UgYXQoc2l6ZV90 eXBlIF9fbikKICAgICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25d OyB9CiAgICBjb25zdF9yZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgeyBf TV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CgogICAgZXhwbGljaXQg dmVjdG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAg ICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpIHt9CgogICAgdmVjdG9yKHNpemVfdHlwZSBf X24sIGJvb2wgX192YWx1ZSwKICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19h ID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKQog ICAgewogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwg X01fZW5kX29mX3N0b3JhZ2UsIF9fdmFsdWUgPyB+MCA6IDApOwogICAgfQoKICAgIGV4cGxpY2l0 IHZlY3RvcihzaXplX3R5cGUgX19uKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihhbGxv Y2F0b3JfdHlwZSgpKQogICAgewogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGZpbGwo X01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIDApOwogICAgfQoKICAgIHZlY3Rvcihj b25zdCB2ZWN0b3ImIF9feCkgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX194LmdldF9hbGxvY2F0 b3IoKSkgewogICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICBjb3B5KF9feC5i ZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxjbGFz cyBfSW50ZWdlcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW50ZWdlciBfX24s IF9JbnRlZ2VyIF9feCwgX190cnVlX3R5cGUpIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwog ICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDAp OwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01f aW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7 CiAgICAgIF9NX2luaXRpYWxpemVfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2Nh dGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CiAgICB2ZWN0b3IoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90 eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50 ZWdyYWw7CiAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50 ZWdyYWwoKSk7CiAgICB9CgogICAgfnZlY3RvcigpIHsgfQoKICAgIHZlY3RvciYgb3BlcmF0b3I9 KGNvbnN0IHZlY3RvciYgX194KSB7CiAgICAgIGlmICgmX194ID09IHRoaXMpIHJldHVybiAqdGhp czsKICAgICAgaWYgKF9feC5zaXplKCkgPiBjYXBhY2l0eSgpKSB7CiAgICAgICAgX01fZGVhbGxv Y2F0ZSgpOwogICAgICAgIF9NX2luaXRpYWxpemUoX194LnNpemUoKSk7CiAgICAgIH0KICAgICAg Y29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBiZWdpbigpKTsKICAgICAgX01fZmluaXNoID0g YmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX3guc2l6ZSgpKTsKICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKCgoKCgogICAgdm9pZCBfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBib29sIF9f eCkgewogICAgICBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICAgICAgZmlsbChfTV9zdGFydC5fTV9w LCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgICAgICBpbnNlcnQoZW5kKCks IF9fbiAtIHNpemUoKSwgX194KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBlcmFzZShi ZWdpbigpICsgX19uLCBlbmQoKSk7CiAgICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRf b2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgYXNzaWdu KHNpemVfdCBfX24sIGJvb2wgX194KSB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX194KTsgfQoKICAg IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgYXNzaWduKF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsK ICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwog ICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rp c3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgICB7 IF9NX2ZpbGxfYXNzaWduKChzaXplX3QpIF9fbiwgKGJvb2wpIF9fdmFsKTsgfQoKICAgIHRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyPgogICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgICB7IF9N X2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3Qp KTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01fYXNz aWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGl0ZXJhdG9y IF9fY3VyID0gYmVnaW4oKTsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1 ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQogICAgICAgICpfX2N1ciA9ICpfX2ZpcnN0 OwogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgZXJhc2UoX19jdXIsIGVuZCgp KTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKICAg IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHZvaWQgX01fYXNz aWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIHNp emVfdHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChfX2xl biA8IHNpemUoKSkKICAgICAgICBlcmFzZShjb3B5KF9fZmlyc3QsIF9fbGFzdCwgYmVnaW4oKSks IGVuZCgpKTsKICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9f Zmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgICAgICBjb3B5KF9fZmly c3QsIF9fbWlkLCBiZWdpbigpKTsKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbWlkLCBfX2xhc3Qp OwogICAgICB9CiAgICB9CgogICAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgICAg aWYgKGNhcGFjaXR5KCkgPCBfX24pIHsKICAgICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRf YWxsb2MoX19uKTsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KGJlZ2luKCksIGVuZCgpLCBpdGVy YXRvcihfX3EsIDApKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fc3RhcnQg PSBpdGVyYXRvcihfX3EsIDApOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9f biArIF9NX3dvcmRfYml0IC0gMSkvX01fd29yZF9iaXQ7CiAgICAgIH0KICAgIH0KCiAgICByZWZl cmVuY2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGZy b250KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICAgIHJlZmVyZW5jZSBiYWNrKCkgeyBy ZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsg cmV0dXJuICooZW5kKCkgLSAxKTsgfQogICAgdm9pZCBwdXNoX2JhY2soYm9vbCBfX3gpIHsKICAg ICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKQogICAgICAgICpfTV9m aW5pc2grKyA9IF9feDsKICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9f eCk7CiAgICB9CiAgICB2b2lkIHN3YXAodmVjdG9yPGJvb2wsIF9BbGxvYz4mIF9feCkgewogICAg ICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFydCk7CiAgICAgIHN0ZDo6c3dhcChfTV9m aW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2Us IF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7CiAgICB9CiAgICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0 b3IgX19wb3NpdGlvbiwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgICAgZGlmZmVyZW5jZV90eXBl IF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0g X01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkKICAgICAgICAqX01fZmlu aXNoKysgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24s IF9feCk7CiAgICAgIHJldHVybiBiZWdpbigpICsgX19uOwogICAgfQoKCgogICAgdGVtcGxhdGUg PGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19w b3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX190cnVlX3R5cGUpIHsKICAgICAgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsK ICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2lu c2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9pbnNlcnRfcmFuZ2Uo X19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAg ICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBpbnNlcnQo aXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19p bnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5z ZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwog ICAgfQoKICAgIHZvaWQgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90 eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9fbiA9PSAwKSByZXR1cm47CiAgICAgIGlm IChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9fbikgewogICAgICAgIGNvcHlfYmFja3dhcmQoX19w b3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAg ICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX194 KTsKICAgICAgICBfTV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgIH0KICAg ICAgZWxzZSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwg X19uKTsKICAgICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAg ICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19x LCAwKSk7CiAgICAgICAgZmlsbF9uKF9faSwgX19uLCBfX3gpOwogICAgICAgIF9NX2ZpbmlzaCA9 IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAg ICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAo X19sZW4gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0OwogICAgICAgIF9NX3N0YXJ0ID0g aXRlcmF0b3IoX19xLCAwKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9y IF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJvb2wgX194KSB7CiAgICAgIF9NX2ZpbGxfaW5z ZXJ0KF9fcG9zaXRpb24sIF9fbiwgX194KTsKICAgIH0KCiAgICB2b2lkIHBvcF9iYWNrKCkgeyAt LV9NX2ZpbmlzaDsgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewog ICAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAgICAgICAgY29weShfX3Bvc2l0aW9u ICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOwogICAgICAgIC0tX01fZmluaXNoOwogICAgICByZXR1 cm4gX19wb3NpdGlvbjsKICAgIH0KICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3Qs IGl0ZXJhdG9yIF9fbGFzdCkgewogICAgICBfTV9maW5pc2ggPSBjb3B5KF9fbGFzdCwgZW5kKCks IF9fZmlyc3QpOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KICAgIHZvaWQgcmVzaXplKHNp emVfdHlwZSBfX25ld19zaXplLCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBpZiAoX19uZXdf c2l6ZSA8IHNpemUoKSkKICAgICAgICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9f bmV3X3NpemUpLCBlbmQoKSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbmV3 X3NpemUgLSBzaXplKCksIF9feCk7CiAgICB9CiAgICB2b2lkIGZsaXAoKSB7CiAgICAgIGZvciAo X0JpdF90eXBlICogX19wID0gX01fc3RhcnQuX01fcDsgX19wICE9IF9NX2VuZF9vZl9zdG9yYWdl OyArK19fcCkKICAgICAgICAqX19wID0gfipfX3A7CiAgICB9CgogICAgdm9pZCBjbGVhcigpIHsg ZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9CiAgfTsKCgp0eXBlZGVmIHZlY3Rvcjxib29sLCBfX2Fs bG9jPiBiaXRfdmVjdG9yOwoKfQojIDczICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3ZlY3Rv ciIgMiAzCiMgMiAibWFpbi5jcHAiIDIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3N0 cmluZyIgMSAzCiMgNDQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAzCgoKCiMg MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDEgMwojIDQz ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIgMwoKCgoKbmFt ZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNoYXJf dHJhaXRzCiAgICB7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIHR5cGVk ZWYgdW5zaWduZWQgbG9uZyBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9zX3R5 cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIG1ic3Rh dGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJfdHlw ZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBfX2MyOyB9Cgog ICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNo YXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0 aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYg X19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnQKICAg ICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwg c2l6ZV90IF9fbikKICAgICAgewogICAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9f bjsgKytfX2kpCiAgICAgICAgICBpZiAoIWVxKF9fczFbX19pXSwgX19zMltfX2ldKSkKICAgICAg ICAgICAgcmV0dXJuIGx0KF9fczFbX19pXSwgX19zMltfX2ldKSA/IC0xIDogMTsKICAgICAgICBy ZXR1cm4gMDsKICAgICAgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3Qg Y2hhcl90eXBlKiBfX3MpCiAgICAgIHsKICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9f czsKICAgICAgICB3aGlsZSAoKl9fcCkgKytfX3A7CiAgICAgICAgcmV0dXJuIChfX3AgLSBfX3Mp OwogICAgICB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0 IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAgICAg ewogICAgICAgIGZvciAoY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7IHNpemVfdChfX3AgLSBf X3MpIDwgX19uOyArK19fcCkKICAgICAgICAgIGlmICgqX19wID09IF9fYSkgcmV0dXJuIF9fcDsK ICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAg bW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikK ICAgICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbW1vdmUoX19zMSwgX19zMiwgX19uICogc2l6 ZW9mKGNoYXJfdHlwZSkpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNo YXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7 IHJldHVybiAoY2hhcl90eXBlKikgbWVtY3B5KF9fczEsIF9fczIsIF9fbiAqIHNpemVvZihjaGFy X3R5cGUpKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlw ZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7CiAgICAgICAgZm9yIChj aGFyX3R5cGUqIF9fcCA9IF9fczsgX19wIDwgX19zICsgX19uOyArK19fcCkKICAgICAgICAgIGFz c2lnbigqX19wLCBfX2EpOwogICAgICAgIHJldHVybiBfX3M7CiAgICAgIH0KCiAgICAgIHN0YXRp YyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAg IHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAg dG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIHsgcmV0dXJuIGludF90eXBlKF9fYyk7 IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBf X2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9 CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 aW50X3R5cGU+KC0xKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29u c3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gZXFfaW50X3R5cGUoX19jLCBlb2YoKSkg PyBpbnRfdHlwZSgwKSA6IF9fYzsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3Qg Y2hhcl90cmFpdHM8Y2hhcj4KICAgIHsKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICAg ICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBl OwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRl X3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUm IF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAg ICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFy X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGlj IGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9f YzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAg IGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNp emVfdCBfX24pCiAgICAgIHsgcmV0dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9CgogICAg ICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAg eyByZXR1cm4gc3RybGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAg ICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlw ZSYgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFyX3R5cGUqPihtZW1j aHIoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBtb3Zl KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEsIF9fczIsIF9f bikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19z MSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0 YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwg Y2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVt c2V0KF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19j aGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 Y2hhcl90eXBlPihfX2MpOyB9CgoKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRf dHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50 X3R5cGU+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9CgogICAgICBzdGF0aWMg Ym9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5 cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGlu dF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoLTEpKTsg fQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9f YykKICAgICAgeyByZXR1cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDogX19jOyB9CiAgfTsKCgoKICB0 ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD4KICAgIHsKICAgICAgdHlw ZWRlZiB3Y2hhcl90IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB3aW50X3QgaW50X3R5cGU7CiAg ICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIHdzdHJlYW1wb3Mg cG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0 aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9f YzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNv bnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVy biBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJf dHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwg X19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSog X19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiB3 bWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVu Z3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiB3Y3NsZW4oX19zKTsgfQoK ICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUq IF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHdt ZW1jaHIoX19zLCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1v dmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIGludF90eXBlIF9fbikK ICAgICAgeyByZXR1cm4gd21lbW1vdmUoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGlj IGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSog X19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gd21lbWNweShfX3MxLCBfX3MyLCBfX24p OyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3Ms IHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1zZXQoX19zLCBf X2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNv bnN0IGludF90eXBlJiBfX2MpIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9CgogICAgICBzdGF0 aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIHsgcmV0 dXJuIGludF90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBl KGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1 cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyBy ZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KCgweGZmZmZmZmZmdSkpOyB9CgogICAgICBzdGF0 aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJl dHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IDAgOiBfX2M7IH0KICB9OwoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9DaGFyX3Ry YWl0c19tYXRjaAogICAgewogICAgICBfQ2hhclQgX01fYzsKICAgICAgX0NoYXJfdHJhaXRzX21h dGNoKF9DaGFyVCBjb25zdCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAgICAgIGJvb2wKICAgICAg b3BlcmF0b3IoKShfQ2hhclQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0czo6ZXEoX01fYywg X19hKTsgfQogICAgfTsKfQojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3N0cmluZyIg MiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9tZW1vcnkiIDEgMwojIDUzICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL21lbW9yeSIgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAxIDMKIyA2NCAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDMKbmFtZXNw YWNlIHN0ZAp7CgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBf VHA+CiAgY2xhc3MgcmF3X3N0b3JhZ2VfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91 dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90 ZWN0ZWQ6CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX01faXRlcjsKCiAgICBwdWJsaWM6CiAgICAg IGV4cGxpY2l0CiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9Gb3J3YXJkSXRlcmF0b3IgX194 KSA6IF9NX2l0ZXIoX194KSB7fQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImCiAgICAgIG9w ZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvciYK ICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX19lbGVtZW50KQogICAgICB7CiAgICAgICAgX0Nv bnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxlbWVudCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg ICB9CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+Jgog ICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgICsrX01faXRlcjsKICAgICAgICByZXR1 cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRl cmF0b3IsIF9UcD4KICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICByYXdfc3Rv cmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+IF9fdG1wID0gKnRoaXM7CiAgICAg ICAgKytfTV9pdGVyOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQogICAgfTsKfQojIDYw ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL21lbW9yeSIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK CgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KICBwYWlyPF9UcCosIHB0cmRpZmZfdD4KICBf X2dldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbiwgX1RwKikKICB7CiAgICBpZiAo X19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkKICAgICAgX19sZW4g PSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAg ICBfVHAqIF9fdG1wID0gKF9UcCopIHN0ZDo6bWFsbG9jKChzdGQ6OnNpemVfdClfX2xlbiAqIHNp emVvZihfVHApKTsKICAgICAgaWYgKF9fdG1wICE9IDApCiAgICAgICAgcmV0dXJuIHBhaXI8X1Rw KiwgcHRyZGlmZl90PihfX3RtcCwgX19sZW4pOwogICAgICBfX2xlbiAvPSAyOwogICAgfQoKICAg IHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oKF9UcCopMCwgMCk7CiAgfQojIDEwMiAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9tZW1vcnkiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgog IGlubGluZSBwYWlyPF9UcCosIHB0cmRpZmZfdD4gZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlm Zl90IF9fbGVuKSB7CiAgICByZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9U cCopIDApOwogIH0KIyAxMTQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvbWVtb3J5IiAzCiAg dGVtcGxhdGUgPGNsYXNzIF9UcD4KICB2b2lkIHJldHVybl90ZW1wb3JhcnlfYnVmZmVyKF9UcCog X19wKSB7CiAgICBzdGQ6OmZyZWUoX19wKTsKICB9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAg c3RydWN0IGF1dG9fcHRyX3JlZgp7CiAgIF9UcDEqIF9NX3B0cjsKICAgZXhwbGljaXQgYXV0b19w dHJfcmVmKF9UcDEqIF9fcCkgOiBfTV9wdHIoX19wKSB7fQp9OwoKCgoKdGVtcGxhdGUgPGNsYXNz IF9UcD4KICBjbGFzcyBhdXRvX3B0cgp7CnByaXZhdGU6CiAgX1RwKiBfTV9wdHI7CgpwdWJsaWM6 CiAgdHlwZWRlZiBfVHAgZWxlbWVudF90eXBlOwoKICBleHBsaWNpdCBhdXRvX3B0cihfVHAqIF9f cCA9IDApIHRocm93KCkgOiBfTV9wdHIoX19wKSB7fQogIGF1dG9fcHRyKGF1dG9fcHRyJiBfX2Ep IHRocm93KCkgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9U cDE+IGF1dG9fcHRyKGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkKICAgIDogX01fcHRyKF9f YS5yZWxlYXNlKCkpIHt9CgogIGF1dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19wdHImIF9fYSkgdGhy b3coKSB7CiAgICByZXNldChfX2EucmVsZWFzZSgpKTsKICAgIHJldHVybiAqdGhpczsKICB9Cgog IHRlbXBsYXRlIDxjbGFzcyBfVHAxPgogIGF1dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19wdHI8X1Rw MT4mIF9fYSkgdGhyb3coKSB7CiAgICByZXNldChfX2EucmVsZWFzZSgpKTsKICAgIHJldHVybiAq dGhpczsKICB9CgoKCgoKICB+YXV0b19wdHIoKSB7IGRlbGV0ZSBfTV9wdHI7IH0KCiAgX1RwJiBv cGVyYXRvciooKSBjb25zdCB0aHJvdygpIHsKICAgIHJldHVybiAqX01fcHRyOwogIH0KICBfVHAq IG9wZXJhdG9yLT4oKSBjb25zdCB0aHJvdygpIHsKICAgIHJldHVybiBfTV9wdHI7CiAgfQogIF9U cCogZ2V0KCkgY29uc3QgdGhyb3coKSB7CiAgICByZXR1cm4gX01fcHRyOwogIH0KICBfVHAqIHJl bGVhc2UoKSB0aHJvdygpIHsKICAgIF9UcCogX190bXAgPSBfTV9wdHI7CiAgICBfTV9wdHIgPSAw OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICB2b2lkIHJlc2V0KF9UcCogX19wID0gMCkgdGhyb3co KSB7CiAgICBpZiAoX19wICE9IF9NX3B0cikgewogICAgICBkZWxldGUgX01fcHRyOwogICAgICBf TV9wdHIgPSBfX3A7CiAgICB9CiAgfQoKcHVibGljOgogIGF1dG9fcHRyKGF1dG9fcHRyX3JlZjxf VHA+IF9fcmVmKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX3JlZi5fTV9wdHIpIHt9CgogIGF1dG9f cHRyJiBvcGVyYXRvcj0oYXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRocm93KCkgewogICAgaWYg KF9fcmVmLl9NX3B0ciAhPSB0aGlzLT5nZXQoKSkgewogICAgICBkZWxldGUgX01fcHRyOwogICAg ICBfTV9wdHIgPSBfX3JlZi5fTV9wdHI7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0 ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gb3BlcmF0b3IgYXV0b19wdHJfcmVmPF9UcDE+KCkgdGhyb3co KQogICAgeyByZXR1cm4gYXV0b19wdHJfcmVmPF9UcD4odGhpcy0+cmVsZWFzZSgpKTsgfQogIHRl bXBsYXRlIDxjbGFzcyBfVHAxPiBvcGVyYXRvciBhdXRvX3B0cjxfVHAxPigpIHRocm93KCkKICAg IHsgcmV0dXJuIGF1dG9fcHRyPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0KfTsKCn0KIyA0OSAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9zdHJpbmciIDIgMwoKCgojIDEgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMSAzCiMgNjQgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyAx MDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1w bGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9uIHsK ICB0eXBlZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5 cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVz dWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3Vt ZW50X3R5cGU7CiAgdHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVm IF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07CiMgMTI3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IHBsdXMg OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCko Y29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggKyBfX3k7 IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMgYmluYXJ5 X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbXVsdGlwbGllcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248 X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw JiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAqIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf VHA+CnN0cnVjdCBkaXZpZGVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4g ewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3Qg eyByZXR1cm4gX194IC8gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1v ZHVsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPgp7CiAgX1RwIG9wZXJh dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg JSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbmVnYXRlIDogcHVibGlj IHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f eCkgY29uc3QgeyByZXR1cm4gLV9feDsgfQp9OwojIDE3MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBl cXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBv cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g X194ID09IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1YWxf dG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0 b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAh PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlciA6IHB1Ymxp YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0 IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07 CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3MgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyX2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf VHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9U cCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPj0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNz IF9UcD4Kc3RydWN0IGxlc3NfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp IGNvbnN0IHsgcmV0dXJuIF9feCA8PSBfX3k7IH0KfTsKIyAyMjIgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1 Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4Kewog IGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg cmV0dXJuIF9feCAmJiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9n aWNhbF9vciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBv cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g X194IHx8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25v dCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShj b25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gIV9feDsgfQp9OwojIDI3MSAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf UHJlZGljYXRlPgpjbGFzcyB1bmFyeV9uZWdhdGUKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0 eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlLCBib29sPiB7CnByb3RlY3RlZDoKICBf UHJlZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3Qg X1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25z dCB0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJl dHVybiAhX01fcHJlZChfX3gpOwogIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4K aW5saW5lIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPgpub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9f cHJlZCkKewogIHJldHVybiB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKCnRl bXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpjbGFzcyBiaW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMg YmluYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9h cmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBib29sPiB7CnByb3RlY3Rl ZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCBiaW5hcnlfbmVnYXRl KGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9y KCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194LAog ICAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1l bnRfdHlwZSYgX195KSBjb25zdAogIHsKICAgIHJldHVybiAhX01fcHJlZChfX3gsIF9feSk7CiAg fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgYmluYXJ5X25lZ2F0ZTxf UHJlZGljYXRlPgpub3QyKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiBiaW5h cnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KIyAzNDkgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlv bj4KY2xhc3MgYmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09w ZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg dHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRp b24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsK cHVibGljOgogIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNv bnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAg OiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5 cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVu dF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsKICB9CgoKICB0 eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09w ZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9w KHZhbHVlLCBfX3gpOwogIH0KCn07CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNz IF9UcD4KaW5saW5lIGJpbmRlcjFzdDxfT3BlcmF0aW9uPgpiaW5kMXN0KGNvbnN0IF9PcGVyYXRp b24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9u OjpmaXJzdF9hcmd1bWVudF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjFzdDxfT3Bl cmF0aW9uPihfX2ZuLCBfQXJnMV90eXBlKF9feCkpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVy YXRpb24+CmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1l IF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVy YXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFs dWU7CnB1YmxpYzoKICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAg ICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KQog ICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1 bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJn dW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoK CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKHR5cGVuYW1l IF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJu IG9wKF9feCwgdmFsdWUpOwogIH0KCn07CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNs YXNzIF9UcD4KaW5saW5lIGJpbmRlcjJuZDxfT3BlcmF0aW9uPgpiaW5kMm5kKGNvbnN0IF9PcGVy YXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0 aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90eXBlOwogIHJldHVybiBiaW5kZXIybmQ8 X09wZXJhdGlvbj4oX19mbiwgX0FyZzJfdHlwZShfX3gpKTsKfQojIDQzOCAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfQXJn LCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVibGlj IHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQgKCpf TV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9CiAg ZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJnKSkg OiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3QgeyBy ZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jl c3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gcHRy X2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkKewogIHJldHVybiBwb2ludGVyX3RvX3VuYXJ5X2Z1 bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNs YXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlv biA6CiAgcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3Rl Y3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBv aW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmlu YXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01fcHRy KF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29u c3QgewogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90 b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4KcHRyX2Z1bihfUmVzdWx0ICgq X194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9u PF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1 Y3QgX0lkZW50aXR5IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBfVHAmIG9w ZXJhdG9yKCkoX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQogIGNvbnN0IF9UcCYgb3Bl cmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u PF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZT4gewogIHR5cGVuYW1lIF9QYWlyOjpm aXJzdF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3gu Zmlyc3Q7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigp KGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQp9OwoK dGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1bmFyeV9m dW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgdHlwZW5hbWUg X1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJl dHVybiBfX3guc2Vjb25kOwogIH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUm IG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNv bmQ7CiAgfQp9OwojIDUyOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5j dGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5f dCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0 IG1lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9w ZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZh dGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh c3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29u c3QgX1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3QoX1JldCAo X1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNv bnN0IF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgog IF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs YXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAs X1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3Bm KSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsg cmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9 OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5f cmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxp Y2l0IGNvbnN0X21lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9m KF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVy biAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsK fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBt ZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9BcmcsX1JldD4gewpwdWJs aWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9m KF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyBy ZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShf QXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpj bGFzcyBjb25zdF9tZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxjb25zdCBfVHAq LF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfdChfUmV0IChf VHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigp KGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIChfX3AtPipfTV9m KShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoK dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1 bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGlj OgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9N X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7 IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZiko X0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K Y2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf QXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KF9SZXQg KF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9y KCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShf X3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKdGVt cGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5h cnlfZnVuY3Rpb248X1RwKix2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Qodm9p ZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCog X19wKSBjb25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01f ZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3Q8dm9p ZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLHZvaWQ+IHsKcHVibGlj OgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6 IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsg KF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9 OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6 IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVt X2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9w ZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZv aWQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3Rf bWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lk PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9f cGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAm IF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01f ZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBt ZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCos X0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9f cGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9B cmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1Rw OjoqX01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xh c3MgY29uc3RfbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1 bmN0aW9uPGNvbnN0IF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9t ZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30K ICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3At PipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7 Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVm X3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2 b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3Bm KShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJn IF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoq X01fZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3Mg Y29uc3RfbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9m dW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVu MV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAg dm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipf TV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07 CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fdDxf UmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl90 PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxp bmUgY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSBj b25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBs YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3JlZl90PF9SZXQsX1Rw PiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl9yZWZf dDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5s aW5lIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6 Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPihf X2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxp bmUgbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0Fy ZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1 bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3Qp CiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFf cmVmX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkK ICB7IHJldHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1 bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJn KSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihf X2YpOyB9CgoKCn0KIyA1MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9zdHJpbmciIDIgMwoj IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMSAzCiMg NDQgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwoKIyAx ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2kzODYtbGludXgvYml0cy9hdG9taWNpdHkuaCIg MSAzCiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvaTM4Ni1saW51eC9iaXRzL2F0b21p Y2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNfd29yZDsKCnN0YXRpYyBpbmxpbmUgX0F0b21p Y193b3JkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19leGNoYW5nZV9hbmRfYWRkICh2 b2xhdGlsZSBfQXRvbWljX3dvcmQgKl9fbWVtLCBpbnQgX192YWwpCnsKICByZWdpc3RlciBfQXRv bWljX3dvcmQgX19yZXN1bHQ7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyB4YWRkbCAl MCwlMiIKICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChfX3Jlc3VsdCkKICAgICAgICAg ICAgICAgICAgICAgICAgOiAiMCIgKF9fdmFsKSwgIm0iICgqX19tZW0pCiAgICAgICAgICAgICAg ICAgICAgICAgIDogIm1lbW9yeSIpOwogIHJldHVybiBfX3Jlc3VsdDsKfQoKc3RhdGljIGlubGlu ZSB2b2lkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19hdG9taWNfYWRkICh2b2xhdGls ZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwpCnsKICBfX2FzbV9fIF9fdm9sYXRpbGVf XyAoImxvY2s7IGFkZGwgJTAsJTEiCiAgICAgICAgICAgICAgICAgICAgICAgIDogOiAiaXIiIChf X3ZhbCksICJtIiAoKl9fbWVtKSA6ICJtZW1vcnkiKTsKfQojIDQ2ICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgODgg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgY2xhc3MgYmFzaWNfc3RyaW5nCiAgICB7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9U cmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6Y2hhcl90 eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOwogICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsK ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIgcG9pbnRlcjsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICAgICAg dHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBvaW50ZXIsIGJhc2ljX3N0cmlu Zz4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxj b25zdF9wb2ludGVyLCBiYXNpY19zdHJpbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBl ZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0 b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVy YXRvcjsKCiAgICBwcml2YXRlOgojIDEyMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgIHN0cnVjdCBfUmVwCiAgICAgIHsKCiAgICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxjaGFyPjo6b3RoZXIgX1Jhd19i eXRlc19hbGxvYzsKIyAxNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19z dHJpbmcuaCIgMwogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgX1NfbWF4X3NpemU7CiAg ICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5hbDsKCiAgICAgICAgc2l6ZV90eXBl IF9NX2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUgX01fY2FwYWNpdHk7CiAgICAgICAgX0F0b21p Y193b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19sZWFrZWQo KSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPCAwOyB9CgogICAgICAgIGJv b2wKICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVy ZW5jZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRfbGVha2VkKCkKICAgICAg ICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X3No YXJhYmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAwOyB9CgogICAgICAgIF9DaGFyVCoK ICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHJlaW50ZXJwcmV0 X2Nhc3Q8X0NoYXJUKj4odGhpcyArIDEpOyB9CgogICAgICAgIF9DaGFyVCYKICAgICAgICBvcGVy YXRvcltdKHNpemVfdCBfX3MpIHRocm93KCkKICAgICAgICB7IHJldHVybiBfTV9yZWZkYXRhKCkg W19fc107IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2dyYWIoY29uc3QgX0FsbG9jJiBf X2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikKICAgICAgICB7CiAgICAgICAgICByZXR1 cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2FsbG9jMikKICAgICAgICAgICAg ICAgICAgPyBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9jMSk7CiAgICAgICAgfQoKCiAg ICAgICAgc3RhdGljIF9SZXAqCiAgICAgICAgX1NfY3JlYXRlKHNpemVfdCwgY29uc3QgX0FsbG9j Jik7CgogICAgICAgIHZvaWQKICAgICAgICBfTV9kaXNwb3NlKGNvbnN0IF9BbGxvYyYgX19hKQog ICAgICAgIHsKICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMs IC0xKSA8PSAwKQogICAgICAgICAgICBfTV9kZXN0cm95KF9fYSk7CiAgICAgICAgfQoKICAgICAg ICB2b2lkCiAgICAgICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmKSB0aHJvdygpOwoKICAgICAg ICBfQ2hhclQqCiAgICAgICAgX01fcmVmY29weSgpIHRocm93KCkKICAgICAgICB7CiAgICAgICAg ICBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOwogICAgICAgICAgcmV0dXJuIF9NX3Jl ZmRhdGEoKTsKICAgICAgICB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9jbG9uZShjb25z dCBfQWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAwKTsKICAgICAgfTsKCgogICAgICBzdHJ1Y3Qg X0FsbG9jX2hpZGVyIDogX0FsbG9jCiAgICAgIHsKICAgICAgICBfQWxsb2NfaGlkZXIoX0NoYXJU KiBfX2RhdCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgOiBfQWxsb2MoX19hKSwgX01fcChf X2RhdCkgeyB9CgogICAgICAgIF9DaGFyVCogX01fcDsKICAgICAgfTsKCiAgICBwdWJsaWM6CgoK CiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9IHN0YXRpY19jYXN0PHNpemVfdHlw ZT4oLTEpOwoKICAgIHByaXZhdGU6CgogICAgICBtdXRhYmxlIF9BbGxvY19oaWRlciBfTV9kYXRh cGx1czsKCgoKICAgICAgc3RhdGljIHNpemVfdHlwZSBfU19lbXB0eV9yZXBfc3RvcmFnZVsoc2l6 ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVv ZihzaXplX3R5cGUpXTsKCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0YSgpIGNvbnN0CiAgICAg IHsgcmV0dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0KCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0 YShfQ2hhclQqIF9fcCkKICAgICAgeyByZXR1cm4gKF9NX2RhdGFwbHVzLl9NX3AgPSBfX3ApOyB9 CgogICAgICBfUmVwKgogICAgICBfTV9yZXAoKSBjb25zdAogICAgICB7IHJldHVybiAmKChyZWlu dGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFdKTsgfQoKCgogICAgICBpdGVyYXRv cgogICAgICBfTV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOyB9 CgogICAgICBpdGVyYXRvcgogICAgICBfTV9pZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io X01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9sZWFrKCkK ICAgICAgewogICAgICAgIGlmICghX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgICAg X01fbGVha19oYXJkKCk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2NoZWNrKHNp emVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNp emUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Ol9NX2No ZWNrIik7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19wb3M7CiAgICAgIH0KCgogICAg ICBpdGVyYXRvcgogICAgICBfTV9mb2xkKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fb2Zm KSBjb25zdAogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvZmYgPSBfX29mZiA8IHRoaXMtPnNp emUoKSAtIF9fcG9zOwogICAgICAgIHNpemVfdHlwZSBfX25ld29mZiA9IF9fdGVzdG9mZiA/IF9f b2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIChfTV9pYmVnaW4oKSAr IF9fcG9zICsgX19uZXdvZmYpOwogICAgICB9CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JdGVy YXRvcj4KICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBf X3AsIF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikKICAgICAgICB7CiAgICAgICAgICBm b3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQogICAgICAgICAgICB0cmFpdHNfdHlw ZTo6YXNzaWduKCpfX3AsICpfX2sxKTsKICAgICAgICB9CgogICAgICBzdGF0aWMgdm9pZAogICAg ICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2sy KQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9 CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25z dF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hh cnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAog ICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19r MikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoK ICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3Qg X0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNv cHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fbXV0YXRl KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMik7Cgog ICAgICB2b2lkCiAgICAgIF9NX2xlYWtfaGFyZCgpOwoKICAgICAgc3RhdGljIF9SZXAmCiAgICAg IF9TX2VtcHR5X3JlcCgpCiAgICAgIHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PF9SZXAqPigm X1NfZW1wdHlfcmVwX3N0b3JhZ2UpOyB9CgogICAgcHVibGljOgoKCgoKICAgICAgaW5saW5lCiAg ICAgIGJhc2ljX3N0cmluZygpOwoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nKGNv bnN0IF9BbGxvYyYgX19hKTsKCgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0cik7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBz aXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uID0gbnBvcyk7 CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg X19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9f YSk7CgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24s CiAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAg YmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxv YygpKTsKICAgICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0 IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRl cmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJ dGVyYXRvciBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBf QWxsb2MoKSk7CgogICAgICB+YmFzaWNfc3RyaW5nKCkKICAgICAgeyBfTV9yZXAoKS0+X01fZGlz cG9zZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg IG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0aGlzLT5hc3Np Z24oX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBf Q2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0 cmluZyYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbigx LCBfX2MpOyB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4oKQogICAgICB7CiAgICAgICAg X01fbGVhaygpOwogICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOwogICAgICB9Cgog ICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNv bnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpCiAg ICAgIHsKICAgICAgICAgX01fbGVhaygpOwogICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0 YSgpICsgdGhpcy0+c2l6ZSgpKTsKICAgICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAg ZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpICsgdGhp cy0+c2l6ZSgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKQogICAg ICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAgY29uc3Rf cmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25z dF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRv cgogICAgICByZW5kKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdp bigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkgY29uc3QK ICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoK ICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkgY29uc3QgeyByZXR1cm4g X01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGxlbmd0aCgpIGNv bnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAg ICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9TX21heF9zaXplOyB9CgogICAgICB2 b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHZvaWQK ICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24pIHsgdGhpcy0+cmVzaXplKF9fbiwgX0NoYXJUKCkp OyB9CgogICAgICBzaXplX3R5cGUKICAgICAgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBfTV9y ZXAoKS0+X01fY2FwYWNpdHk7IH0KCiAgICAgIHZvaWQKICAgICAgcmVzZXJ2ZShzaXplX3R5cGUg X19yZXNfYXJnID0gMCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFyKCkgeyBfTV9tdXRhdGUoMCwg dGhpcy0+c2l6ZSgpLCAwKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0IHsgcmV0 dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9CgoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIG9w ZXJhdG9yW10gKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGF0YSgp W19fcG9zXTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9f cG9zKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClb X19wb3NdOwogICAgICB9CgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBl IF9fbikgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAg ICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAgICBy ZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBhdChz aXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgaWYgKF9fbiA+PSBzaXplKCkpCiAgICAgICAg ICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOwogICAgICAgIF9NX2xl YWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCgogICAgICBiYXNp Y19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyBy ZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBv cGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zKTsg fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KF9DaGFyVCBfX2MpIHsgcmV0 dXJuIHRoaXMtPmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmlu ZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNf c3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBl IF9fcG9zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5k KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYK ICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5hcHBl bmQoX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcm CiAgICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRl PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhcHBl bmQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAg IHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9f bGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKF9DaGFyVCBfX2MpCiAgICAgIHsg dGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgMSwgX19jKTsgfQoKICAgICAgYmFz aWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CgogICAg ICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBz aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXpl X3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+IF9fc3Ry c2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmFzc2ln biIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0biA9IF9fbiA8IF9fc3Ryc2l6ZSAtIF9fcG9z OwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19z dHJzaXplIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0ci5fTV9kYXRh KCkgKyBfX3BvcywgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg ICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAg ICBpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vy cm9yKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNf c2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAgICAg ICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpLCBf X3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSwgX01faWVu ZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICAgICAgZWxzZQogICAgICAgICAgewoKICAgICAgICAg ICAgY29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01fZGF0YSgpOwogICAgICAgICAgICBp ZiAoX19wb3MgPj0gX19uKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX2RhdGEo KSwgX19zLCBfX24pOwogICAgICAgICAgICBlbHNlIGlmIChfX3BvcykKICAgICAgICAgICAgICB0 cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCksIF9fcywgX19uKTsKICAgICAgICAgICAgX01fcmVw KCktPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgICAgICAgX01fZGF0YSgpW19fbl0gPSBfUmVwOjpf U190ZXJtaW5hbDsKICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgfQogICAgICB9 CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcykKICAg ICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsg fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgX0NoYXJU IF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVnaW4oKSwgX01faWVuZCgp LCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAg ICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwg X0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01f aWJlZ2luKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICAgICAgdm9pZAogICAg ICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7 IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsgfQoKICAgICAgdGVtcGxhdGU8Y2xh c3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wLCBfSW5w dXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQpCiAgICAgICAgeyB0aGlzLT5y ZXBsYWNlKF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg ICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQog ICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ciwgMCwgX19zdHIuc2l6ZSgp KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwg Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIs IHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXpl ID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChfX3BvczIgPiBfX3N0cnNpemUpCiAgICAgICAg ICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBj b25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgICAgY29u c3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBfX24gOiBfX3N0cnNpemUgLSBfX3Bv czI7CiAgICAgICAgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvczEsIF9fc3RyLl9NX2RhdGEoKSAr IF9fcG9zMiwgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBp bnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikK ICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg ICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2Uo ImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9fc2l6ZSA+IHRoaXMtPm1heF9z aXplKCkgLSBfX24pCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5n OjppbnNlcnQiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IGxlc3M8 Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAgICAgfHwgbGVzczxjb25z dCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAgICAgICAgIHJldHVybiBf TV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBfX3BvcywK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24pOwogICAgICAg IGVsc2UKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2ZmID0g X19zIC0gX01fZGF0YSgpOwogICAgICAgICAgICBfTV9tdXRhdGUoX19wb3MsIDAsIF9fbik7CiAg ICAgICAgICAgIF9fcyA9IF9NX2RhdGEoKSArIF9fb2ZmOwogICAgICAgICAgICBfQ2hhclQqIF9f cCA9IF9NX2RhdGEoKSArIF9fcG9zOwogICAgICAgICAgICBpZiAoX19zICsgX19uIDw9IF9fcCkK ICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywgX19uKTsKICAgICAgICAg ICAgZWxzZSBpZiAoX19zID49IF9fcCkKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShf X3AsIF9fcyArIF9fbiwgX19uKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zLCBfX3AgLSBfX3MpOwogICAg ICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wICsgKF9fcCAtIF9fcyksIF9fcCArIF9f biwgX19uIC0gKF9fcCAtIF9fcykpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJu ICp0aGlzOwogICAgICAgICAgfQogICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBp bnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4g dGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAg ICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl IF9fbiwgX0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhf X3BvcyksIF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGl0 ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBfX2MgPSBfQ2hhclQoKSkK ICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9fcCAtIF9NX2liZWdpbigpOwogICAg ICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlwZSgxKSwgX19jKTsKICAg ICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJldHVybiB0aGlzLT5fTV9p YmVnaW4oKSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGVyYXNl KHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQogICAgICB7CiAgICAg ICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBf X24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsK ICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikK ICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9uIC0gX01faWJlZ2luKCk7 CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgMSwgX01fZGF0 YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAg ICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAg ICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICAgIHsKICAgICAg ICBzaXplX3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPnJl cGxhY2UoX19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01f cmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsK ICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bv cywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgeyByZXR1 cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uLCBfX3N0ci5fTV9kYXRhKCksIF9fc3RyLnNpemUo KSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3Mx LCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAg ICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMik7CgogICAgICBiYXNpY19zdHJpbmcm CiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0No YXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpCiAgICAgIHsKICAgICAgICBj b25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+ IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJl cGxhY2UiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4xID0gX19uMSA8IF9fc2l6ZSAtIF9f cG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRuMSA9IF9fdGVzdG4xID8gX19uMSA6 IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGlmIChfX3NpemUgLSBfX2ZvbGRuMSA+IHRoaXMtPm1h eF9zaXplKCkgLSBfX24yKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0 cmluZzo6cmVwbGFjZSIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwg bGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNz PGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBfX3MpKQogICAgICAgICAgcmV0 dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9zLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfTV9pYmVnaW4oKSArIF9fcG9zICsgX19mb2xkbjEsIF9fcywgX19z ICsgX19uMik7CiAgICAgICAgZWxzZSByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3Bv cyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19zLCBfX3MgKyBfX24yKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBy ZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19z KQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24xLCBfX3MsIHRyYWl0c190 eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShz aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9f YykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQo X19wb3MsIF9fbjEpLCBfX24yLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3N0ci5fTV9k YXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFj ZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+ cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX3MsIF9fbik7IH0KCiAg ICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBf X2kyLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kx LCBfX2kyLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0 cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5 cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9y PgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0 ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJ dGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2UoX19pMSwgX19pMiwgX19r MSwgX19rMiwKICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy YXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9CgogICAgcHJpdmF0ZToKICAgICAgdGVtcGxh dGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9N X3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19r MSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0ZXJhdG9y X3RhZyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICAgIGJh c2ljX3N0cmluZyYKICAgICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0 b3IgX19pMiwgX0ZvcndhcmRJdGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0Zvcndh cmRJdGVyYXRvciBfX2syKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAg ICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywg X0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX2ZhbHNlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X0luSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CiAgICAgICAgICBy ZXR1cm4gX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOwogICAgICAgIH0K CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAg ICAgICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0 IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICAg ICAgewogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+ KF9fYmVnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVf dHlwZT4oX19lbmQpLCBfX2EpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0 ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBf X2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRl Z3JhbDsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19h LCBfSW50ZWdyYWwoKSk7CiAgICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+ CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19i ZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAg ICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+ CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0ZXIgX19i ZWcsIF9Gd2RJdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAg ICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgX1Nf Y29uc3RydWN0KHNpemVfdHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2Ep OwoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBjb3B5KF9DaGFyVCogX19zLCBz aXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHZvaWQKICAg ICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MpOwoKCiAg ICAgIGNvbnN0IF9DaGFyVCoKICAgICAgY19zdHIoKSBjb25zdAogICAgICB7CgogICAgICAgIHNp emVfdHlwZSBfX24gPSB0aGlzLT5zaXplKCk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihf TV9kYXRhKClbX19uXSwgX1JlcDo6X1NfdGVybWluYWwpOwogICAgICAgIHJldHVybiBfTV9kYXRh KCk7CiAgICAgIH0KCiAgICAgIGNvbnN0IF9DaGFyVCoKICAgICAgZGF0YSgpIGNvbnN0IHsgcmV0 dXJuIF9NX2RhdGEoKTsgfQoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRv cigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFwbHVzOyB9CgogICAgICBzaXplX3R5cGUKICAgICAg ZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBj b25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19z dHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQo X19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAg ICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAg ICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChf X3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBl IF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+cmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoK ICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg X19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5k KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5yZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykp OyB9CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9f cG9zID0gbnBvcykgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihj b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3Ry LnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9D aGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAg c2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw ZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19z LCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAg ICAgIGZpbmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBl CiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg X19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19z dHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAg IGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5 cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3Qg X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmZpbmRfbGFzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykp OyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVf dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fYywg X19wb3MpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3Qg YmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIu c2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0 IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHNp emVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90 X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7 IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6 bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2Yo X0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUK ICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5 cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90 X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlw ZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19w b3MsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CiAgICAgIHNp emVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5 cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90 X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVf dHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9 IG5wb3MpIGNvbnN0OwoKICAgICAgYmFzaWNfc3RyaW5nCiAgICAgIHN1YnN0cihzaXplX3R5cGUg X19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykgY29uc3QKICAgICAgewogICAgICAgIGlm IChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJi YXNpY19zdHJpbmc6OnN1YnN0ciIpOwogICAgICAgIHJldHVybiBiYXNpY19zdHJpbmcoKnRoaXMs IF9fcG9zLCBfX24pOwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBiYXNp Y19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9 IHRoaXMtPnNpemUoKTsKICAgICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsK ICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zaXplLCBfX29zaXplKTsKCiAgICAgICAg aW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBf X2xlbik7CiAgICAgICAgaWYgKCFfX3IpCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXpl OwogICAgICAgIHJldHVybiBfX3I7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikg Y29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5 cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5 cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFy ZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3Q7CgoKCiAgICAgIGludAogICAgICBjb21wYXJlKHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsK CiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEs IGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsK ICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6CiAgICBiYXNpY19zdHJpbmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAo KS5fTV9yZWZjb3B5KCksIF9BbGxvYygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19z dHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0No YXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFp dHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0 cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8 X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICBjb25z dCBfQ2hhclQqIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAg cmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsIF9DaGFyVCBfX3JocykKICAgIHsKICAgICAgdHlw ZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90 eXBlOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5k KF9fc2l6ZV90eXBlKDEpLCBfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMu Y29tcGFyZShfX3JocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv cj09KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29t cGFyZShfX2xocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09 KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAg ICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFy ZShfX3JocykgPT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShj b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAg ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19y aHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAg ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp CiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAg ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhz KSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNv bnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19s aHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhz LmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv cj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBh cmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29u c3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19s aHMpIDwgMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAg ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l IGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7 IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1 cm4gX19yaHMuY29tcGFyZShfX2xocykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAog ICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAw OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0 IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xo cywKICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19yaHMpCiAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPiYgX19vcywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9U cmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMs CiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3Ry LCBfQ2hhclQgX19kZWxpbSk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJU LF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f aXMsCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f c3RyKTsKfQojIDU0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL3N0cmluZyIgMiAzCgoKIyAx ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2FsZ29yaXRobSIgMSAzCiMgNjUgIi91c3IvbG9j YWwvaW5jbHVkZS9nKystdjMvYWxnb3JpdGhtIiAzCgoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAxIDMKIyA2NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9hbGdvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RsX2hlYXAuaCIgMSAzCiMgNjMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfaGVhcC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k b21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+CiAgICB2 b2lkCiAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAg ICAgICAgICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9U cCBfX3ZhbHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXgg LSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgKihfX2Zp cnN0ICsgX19wYXJlbnQpIDwgX192YWx1ZSkgewogICAgICAgICooX19maXJzdCArIF9faG9sZUlu ZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fcGFy ZW50OwogICAgICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB9CiAg ICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBwdXNo X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S YW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRv cj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAg ICAKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9f Zmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5 cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwLAogICAgICAgICAg ICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nl c3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAg ICBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAg IHsKICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAg ICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmIF9fY29tcCgqKF9fZmlyc3QgKyBf X3BhcmVudCksIF9fdmFsdWUpKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0g KihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAg ICAgICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihf X2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2 b2lkCiAgICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAg ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl cmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNl X3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCgogICAgICBfX3B1c2hfaGVh cChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFu Y2VUeXBlKDApLAogICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpLCBf X2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3Is IHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX19hZGp1c3Rf aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4 LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQogICAgewog ICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogICAgICBfRGlzdGFuY2Ug X19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgICAgIHdoaWxlIChfX3NlY29u ZENoaWxkIDwgX19sZW4pIHsKICAgICAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkg PCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hp bGQtLTsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3Nl Y29uZENoaWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAg X19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAgICAgIGlm IChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5k ZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5k ZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0 LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZv aWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlz dGFuY2U7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICBfX2FkanVzdF9oZWFwKF9f Zmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3ZhbHVl KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAg aW5saW5lIHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1 ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAt IDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwK ICAgICAgICAgICB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAg X19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9f aG9sZUluZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVl LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19o b2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4 ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgICAgIGlmIChf X2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENo aWxkIC0gMSkpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICAgICAqKF9fZmlyc3Qg KyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgICAgICBfX2hv bGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19z ZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAgICAgIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVu KSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vj b25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsK ICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRl eCwgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5l IHZvaWQKICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6 ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAg ICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0 IC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX192YWx1ZSwgX19jb21wKTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29t cGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21w YXJlIF9fY29tcCkKICAgIHsKCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwog ICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5 cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S YW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIG1ha2VfaGVhcChfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9y Pjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl CiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fbGFz dCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xh c3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikv MjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBf X3BhcmVudCwgX19sZW4sIF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7CiAgICAg ICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwogICAgICB9 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5h bWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1Zh bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoK CiAgICAgCgoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9E aXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBl IF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAg X19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sCiAgICAgICAgICAgICAgICAg ICAgICBfVmFsdWVUeXBlKCooX19maXJzdCArIF9fcGFyZW50KSksIF9fY29tcCk7CiAgICAgICAg aWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwogICAgICB9CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQK ICAgIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2xh c3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUg X0NvbXBhcmU+CiAgICB2b2lkCiAgICBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBh cmUgX19jb21wKQogICAgewoKICAgICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+ IDEpCiAgICAgICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0sIF9fY29tcCk7CiAgICB9Cgp9 CiMgNjUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAyIDMKIyAx ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMgNjQg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCm5hbWVzcGFj ZSBzdGQKewojIDc0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYu aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNz IF9UZW1wb3JhcnlfYnVmZmVyCnsKCiAKCiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xlbjsKICBw dHJkaWZmX3QgX01fbGVuOwogIF9UcCogX01fYnVmZmVyOwoKCiAgdm9pZCBfTV9hbGxvY2F0ZV9i dWZmZXIoKSB7CiAgICBfTV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47CiAgICBfTV9idWZmZXIgPSAw OwoKICAgIGlmIChfTV9sZW4gPiAocHRyZGlmZl90KSgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkp KQogICAgICBfTV9sZW4gPSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9N X2xlbiA+IDApIHsKICAgICAgX01fYnVmZmVyID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXpl b2YoX1RwKSk7CiAgICAgIGlmIChfTV9idWZmZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xl biAvPSAyOwogICAgfQogIH0KCiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAm LCBfX3RydWVfdHlwZSkge30KICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYg dmFsLCBfX2ZhbHNlX3R5cGUpIHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwg X01fbGVuLCB2YWwpOwogIH0KCnB1YmxpYzoKCiAgcHRyZGlmZl90IHNpemUoKSBjb25zdCB7IHJl dHVybiBfTV9sZW47IH0KCiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1 cm4gX01fb3JpZ2luYWxfbGVuOyB9CgogIF9UcCogYmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7 IH0KCiAgX1RwKiBlbmQoKSB7IHJldHVybiBfTV9idWZmZXIgKyBfTV9sZW47IH0KCiAgX1RlbXBv cmFyeV9idWZmZXIoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9f bGFzdCkgewoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJp dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yCiAgICAgICAgICAgIF9Ucml2aWFsOwoKICAgIHRyeSB7 CiAgICAgIF9NX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9NX2FsbG9j YXRlX2J1ZmZlcigpOwogICAgICBpZiAoX01fbGVuID4gMCkKICAgICAgICBfTV9pbml0aWFsaXpl X2J1ZmZlcigqX19maXJzdCwgX1RyaXZpYWwoKSk7CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAg IHsKICAgICAgICBmcmVlKF9NX2J1ZmZlcik7CiAgICAgICAgX01fYnVmZmVyID0gMDsKICAgICAg ICBfTV9sZW4gPSAwOwogICAgICAgIHRocm93OwogICAgICB9CiAgfQoKICB+X1RlbXBvcmFyeV9i dWZmZXIoKSB7CiAgICBfRGVzdHJveShfTV9idWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7CiAg ICBmcmVlKF9NX2J1ZmZlcik7CiAgfQoKcHJpdmF0ZToKCiAgX1RlbXBvcmFyeV9idWZmZXIoY29u c3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3Jh cnlfYnVmZmVyJikge30KfTsKCn0KIyA2NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9hbGdvLmgiIDIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKIyA4NCAiL3Vzci9sb2NhbC9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg aW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAm IF9fYiwgY29uc3QgX1RwJiBfX2MpCiAgICB7CgogICAgIAogICAgICBpZiAoX19hIDwgX19iKQog ICAgICAgIGlmIChfX2IgPCBfX2MpCiAgICAgICAgICByZXR1cm4gX19iOwogICAgICAgIGVsc2Ug aWYgKF9fYSA8IF9fYykKICAgICAgICAgIHJldHVybiBfX2M7CiAgICAgICAgZWxzZQogICAgICAg ICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICAgIHJldHVybiBf X2E7CiAgICAgIGVsc2UgaWYgKF9fYiA8IF9fYykKICAgICAgICByZXR1cm4gX19jOwogICAgICBl bHNlCiAgICAgICAgcmV0dXJuIF9fYjsKICAgIH0KIyAxMTggIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBfX21lZGlhbihjb25zdCBfVHAm IF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBfX2NvbXApCiAg ICB7CgogICAgIAogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkKICAgICAgICBpZiAoX19jb21w KF9fYiwgX19jKSkKICAgICAgICAgIHJldHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19jb21w KF9fYSwgX19jKSkKICAgICAgICAgIHJldHVybiBfX2M7CiAgICAgICAgZWxzZQogICAgICAgICAg cmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgICByZXR1 cm4gX19hOwogICAgICBlbHNlIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgICAgIHJldHVybiBf X2M7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX19iOwogICAgfQojIDE1MCAiL3Vzci9sb2Nh bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5wdXRJdGVyLCB0eXBlbmFtZSBfRnVuY3Rpb24+CiAgICBfRnVuY3Rpb24KICAgIGZvcl9lYWNo KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9GdW5jdGlvbiBfX2YpCiAg ICB7CgogICAgIAogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg ICAgICAgX19mKCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZjsKICAgIH0KCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0lucHV0 SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7 CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKCpfX2ZpcnN0ID09IF9fdmFsKSkK ICAgICAgICArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxp bmUgX0lucHV0SXRlcgogICAgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgaW5wdXRf aXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIV9f cHJlZCgqX19maXJzdCkpCiAgICAgICAgKytfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdDsK ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h bWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9f dmFsLAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBl IF9fdHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogICAgICBm b3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgICAgIGlmICgq X19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAg ICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19m aXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAg ICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9f Zmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CgogICAgICBzd2l0Y2goX19sYXN0IC0g X19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy ZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMjoKICAgICAgICBp ZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsK ICAgICAgY2FzZSAxOgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmly c3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAgICAgIGRlZmF1bHQ6CiAgICAg ICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX1JhbmRvbUFjY2Vz c0l0ZXIKICAgIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAg cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQK ICAgICAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAgICAgZm9yICggOyBfX3RyaXBf Y291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0 KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVk KCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBp ZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoK ICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytf X2ZpcnN0OwogICAgICB9CgogICAgICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogICAgICBj YXNlIDM6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAg ICAgICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3Qp KSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMToKICAgICAg ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0 OwogICAgICBjYXNlIDA6CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAg ICAgfQogICAgfQojIDI4OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBp bmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAKICAgICAKCiAg ICAgIHJldHVybiBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9faXRlcmF0b3JfY2F0ZWdv cnkoX19maXJzdCkpOwogICAgfQojIDMwOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf UHJlZGljYXRlPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmRfaWYoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQp CiAgICB7CgogICAgIAogICAgIAoKICAgICAgcmV0dXJuIGZpbmRfaWYoX19maXJzdCwgX19sYXN0 LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMyOSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAg IAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAg ICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAh PSBfX2xhc3QpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKICAgICAgICAgIHJl dHVybiBfX2ZpcnN0OwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgICAgcmV0 dXJuIF9fbGFzdDsKICAgIH0KIyAzNTggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf QmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGphY2VudF9maW5kKF9Gb3J3 YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBf QmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAg IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICBfRm9y d2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0 KSB7CiAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICAg ICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAg ICByZXR1cm4gX19sYXN0OwogICAgfQojIDM4NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt ZSBfVHA+CiAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVu Y2VfdHlwZQogICAgY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwg Y29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCiAgICAgIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7 CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAo Kl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgICAgICsrX19uOwogICAgICByZXR1cm4gX19uOwog ICAgfQojIDQxMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAg IGNvdW50X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNh dGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0 KSkKICAgICAgICAgICsrX19uOwogICAgICByZXR1cm4gX19uOwogICAgfQojIDQ1MCAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVy MQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0 MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFz dDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9f bGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoK ICAgICAgX0ZvcndhcmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAg IGlmIChfX3RtcCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QxLCBfX2xh c3QxLCAqX19maXJzdDIpOwoKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgICAg IF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQg PSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAg X19maXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwogICAgICAgIGlm IChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAg IF9fcCA9IF9fcDE7CiAgICAgICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgICAgICAgaWYgKCsr X19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAg d2hpbGUgKCpfX2N1cnJlbnQgPT0gKl9fcCkgewogICAgICAgICAgaWYgKCsrX19wID09IF9fbGFz dDIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgICAgIGlmICgrK19fY3VycmVu dCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgICB9CgogICAg ICAgICsrX19maXJzdDE7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDUy MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLCB0eXBlbmFt ZSBfQmluYXJ5UHJlZD4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIx IF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0ZvcndhcmRJdGVy MiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIF9CaW5hcnlQcmVk IF9fcHJlZGljYXRlKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKCiAgICAgIGlmIChfX2Zp cnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9f Zmlyc3QxOwoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICAgICArK19f dG1wOwogICAgICBpZiAoX190bXAgPT0gX19sYXN0MikgewogICAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAg ICAgICArK19fZmlyc3QxOwogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgfQoKCgogICAg ICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3Ax OwoKICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxl IChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz dDEpIHsKICAgICAgICAgIGlmIChfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAg d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9f Zmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgaWYgKF9fZmlyc3QxID09IF9f bGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsKICAg ICAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19s YXN0MSkgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJy ZW50LCAqX19wKSkgewogICAgICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgICAg IHJldHVybiBfX2ZpcnN0MTsKICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQog ICAgICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJzdDE7 CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDU5NiAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y d2FyZEl0ZXIsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0 ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsK CiAgICAgCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fY291bnQgPD0gMCkKICAgICAgICByZXR1 cm4gX19maXJzdDsKICAgICAgZWxzZSB7CiAgICAgICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwg X19sYXN0LCBfX3ZhbCk7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAg ICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgICAgIF9Gb3J3YXJkSXRlciBf X2kgPSBfX2ZpcnN0OwogICAgICAgICAgKytfX2k7CiAgICAgICAgICB3aGlsZSAoX19pICE9IF9f bGFzdCAmJiBfX24gIT0gMCAmJiAqX19pID09IF9fdmFsKSB7CiAgICAgICAgICAgICsrX19pOwog ICAgICAgICAgICAtLV9fbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX24gPT0gMCkKICAg ICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZmly c3QgPSBmaW5kKF9faSwgX19sYXN0LCBfX3ZhbCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBf X2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2NDMgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt ZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVk PgogICAgX0ZvcndhcmRJdGVyCiAgICBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9U cCYgX192YWwsCiAgICAgICAgICAgICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9wcmVkKQogICAgewoK ICAgICAKICAgICAKCgogICAgICBpZiAoX19jb3VudCA8PSAwKQogICAgICAgIHJldHVybiBfX2Zp cnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAg ICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCBfX3ZhbCkpCiAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJz dCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAg ICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICAgICArK19faTsKICAgICAg ICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9f aSwgX192YWwpKSB7CiAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICAtLV9fbjsKICAgICAg ICAgIH0KICAgICAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7 CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QpIHsKICAg ICAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpCiAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICArK19faTsKICAgICAgICAgICAgfQogICAgICAgICAgICBf X2ZpcnN0ID0gX19pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gX19sYXN0 OwogICAgICB9CiAgICB9CiMgNjk3ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9G b3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIyCiAgICBzd2FwX3JhbmdlcyhfRm9yd2FyZEl0 ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICBfRm9y d2FyZEl0ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKCgog ICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIp CiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBfX2Zp cnN0MjsKICAgIH0KIyA3MzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0 ZXIsIHR5cGVuYW1lIF9VbmFyeU9wZXJhdGlvbj4KICAgIF9PdXRwdXRJdGVyCiAgICB0cmFuc2Zv cm0oX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBf T3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3BlcmF0aW9uIF9fdW5hcnlfb3ApCiAgICB7Cgog ICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qs ICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gX191bmFyeV9vcCgqX19maXJzdCk7CiAg ICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3NjUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5 cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBl bmFtZSBfQmluYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAgIHRyYW5zZm9ybShfSW5w dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5w dXRJdGVyMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgX0Jp bmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAg ICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0Miwg KytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19maXJzdDEsICpf X2ZpcnN0Mik7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3OTYgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNlKF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICBjb25zdCBfVHAmIF9f b2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAg ICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAg IGlmICgqX19maXJzdCA9PSBfX29sZF92YWx1ZSkKICAgICAgICAgICpfX2ZpcnN0ID0gX19uZXdf dmFsdWU7CiAgICB9CiMgODI1ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Fs Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRp Y2F0ZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgcmVwbGFjZV9pZihfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBf X3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAK CgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYg KF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwogICAg fQojIDg1NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5h bWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0LAogICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYg X19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9f Zmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0 ID0gKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAg ICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgODg4ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu YW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1l IF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICByZXBsYWNlX2NvcHlfaWYoX0lucHV0SXRlciBfX2Zp cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1Rw JiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1 bHQgPSBfX3ByZWQoKl9fZmlyc3QpID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICAgICAgcmV0 dXJuIF9fcmVzdWx0OwogICAgfQojIDkxOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l IF9HZW5lcmF0b3I+CiAgICB2b2lkCiAgICBnZW5lcmF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwg X0ZvcndhcmRJdGVyIF9fbGFzdCwgX0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAgICAgCiAgICAg CgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgICpf X2ZpcnN0ID0gX19nZW4oKTsKICAgIH0KIyA5NDIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMv Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVu YW1lIF9TaXplLCB0eXBlbmFtZSBfR2VuZXJhdG9yPgogICAgX091dHB1dEl0ZXIKICAgIGdlbmVy YXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKQog ICAgewoKICAgICAKCgoKICAgICAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQog ICAgICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMg OTY5ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBf VHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBj b25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3Ig KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCEoKl9fZmlyc3Qg PT0gX192YWx1ZSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICAg KytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyAxMDAz ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJl ZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgog ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCFf X3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAg ICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMg MTAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRl cgogICAgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoK CiAgICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CiAgICAgIF9G b3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3Qg PyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5KCsr X19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOwogICAgfQojIDEwNzMgIi91c3IvbG9jYWwv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICByZW1v dmVfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIF9fZmly c3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICAgICAgX0ZvcndhcmRJdGVy IF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytfX2ksIF9f bGFzdCwgX19maXJzdCwgX19wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgX191 bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgb3V0cHV0 X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w dXRJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3VsdCA9 IF9fdmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgh KF9fdmFsdWUgPT0gKl9fZmlyc3QpKSB7CiAgICAgICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAg ICAgICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgICAgfQogICAgICByZXR1cm4gKytf X3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw ZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9J bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9G b3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90 YWcpCiAgICB7CgogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19m aXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkKICAg ICAgICAgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19fcmVzdWx0Owog ICAgfQojIDExNDUgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAg ICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkK ICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwoKICAg ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgIHJldHVybiBf X3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9JdGVyVHlwZSgpKTsKICAg IH0KIyAxMTcwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBl bmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIF9fdW5pcXVlX2NvcHko X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg X091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg X19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKICAg IHsKCiAgICAgCgoKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6 dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3VsdCA9IF9fdmFsdWU7 CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5hcnlf cHJlZChfX3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsK ICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJldHVybiAr K19fcmVzdWx0OwogICAgfQojIDExOTkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Zv cndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAg ICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg X0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICBmb3J3YXJk X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0 OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoIV9fYmluYXJ5 X3ByZWQoKl9fcmVzdWx0LCAqX19maXJzdCkpICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAg IHJldHVybiArK19fcmVzdWx0OwogICAgfQojIDEyMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw ZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUg X091dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAg ICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAg CgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXI+Ojpp dGVyYXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp IHJldHVybiBfX3Jlc3VsdDsKICAgICAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19s YXN0LApfX3Jlc3VsdCwgX19iaW5hcnlfcHJlZCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDEyNjMg Ii91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgICAgICAKICAg ICAgICAgCgoKICAgICAgICAgIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFz dCk7CiAgICAgICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0 KTsKICAgIH0KIyAxMjkwICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVBy ZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5h cnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIF9fZmlyc3QgPSBhZGphY2VudF9m aW5kKF9fZmlyc3QsIF9fbGFzdCwgX19iaW5hcnlfcHJlZCk7CiAgICAgIHJldHVybiB1bmlxdWVf Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QsIF9fYmluYXJ5X3ByZWQpOwogICAgfQoKCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBf X3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90 YWcpCiAgICB7CiAgICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgICAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xhc3QpCiAgICAgICAgICAgICAgICAgIHJldHVy bjsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCsr LCBfX2xhc3QpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9t X2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgICAgICB3aGlsZSAoX19maXJzdCA8IF9f bGFzdCkKICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgLS1fX2xhc3QpOwogICAgfQoj IDEzNDkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJl dmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh c3QpCiAgICB7CgogICAgICAgICAKCiAgICAgICAgICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0 LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KIyAxMzc0ICIvdXNyL2xvY2Fs L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9C aWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgog ICAgcmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xh c3QpIHsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAg ICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEz OTkgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0V1Y2xpZGVhblJpbmdFbGVtZW50PgogICAgX0V1Y2xpZGVhblJpbmdFbGVt ZW50CiAgICBfX2djZChfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLCBfRXVjbGlkZWFuUmluZ0Vs ZW1lbnQgX19uKQogICAgewogICAgICB3aGlsZSAoX19uICE9IDApIHsKICAgICAgICBfRXVjbGlk ZWFuUmluZ0VsZW1lbnQgX190ID0gX19tICUgX19uOwogICAgICAgIF9fbSA9IF9fbjsKICAgICAg ICBfX24gPSBfX3Q7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbTsKICAgIH0KCgoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfRm9yd2Fy ZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwKICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv cl90YWcpCiAgICB7CiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9 PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3Qy ID0gX19taWRkbGU7CiAgICAgIGRvIHsKICAgICAgICBzd2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0 MisrKTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgICAgIF9fbWlkZGxl ID0gX19maXJzdDI7CiAgICAgIH0gd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCk7CgogICAgICBf X2ZpcnN0MiA9IF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCkgewog ICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAgIGlmIChfX2ZpcnN0 ID09IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAgICAgICBlbHNl IGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAgICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwog ICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy PgogICAgdm9pZAogICAgX19yb3RhdGUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf dGFnKQogICAgewoKICAgICAKCgogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRkbGUpIHx8IChf X2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAgIF9fcmV2ZXJzZShfX2Zp cnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIF9fcmV2 ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKCiAg ICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9IF9fbGFzdCkKICAg ICAgICBzd2FwICgqX19maXJzdCsrLCAqLS1fX2xhc3QpOwoKICAgICAgaWYgKF9fZmlyc3QgPT0g X19taWRkbGUpIHsKICAgICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rp b25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19yZXZl cnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAg ICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgog ICAgdm9pZAogICAgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAg ICB7CgogICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9 PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl cj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIF9EaXN0YW5jZSBfX24gPSBfX2xhc3Qg LSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBfX2ZpcnN0OwogICAg ICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19rOwoKICAgICAgaWYgKF9fayA9PSBfX2wpIHsKICAg ICAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRkbGUpOwogICAgICAgIHJl dHVybjsKICAgICAgfQoKICAgICAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwgX19rKTsKCiAg ICAgIGZvciAoX0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8IF9fZDsgX19pKyspIHsKICAgICAgICBf VmFsdWVUeXBlIF9fdG1wID0gKl9fZmlyc3Q7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19w ID0gX19maXJzdDsKCiAgICAgICAgaWYgKF9fayA8IF9fbCkgewogICAgICAgICAgZm9yIChfRGlz dGFuY2UgX19qID0gMDsgX19qIDwgX19sL19fZDsgX19qKyspIHsKICAgICAgICAgICAgaWYgKF9f cCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAgICAgICAgICAqX19wID0gKihfX3AgLSBfX2wpOwog ICAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICpfX3Ag PSAqKF9fcCArIF9fayk7CiAgICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAgICB9CiAgICAg ICAgfQoKICAgICAgICBlbHNlIHsKICAgICAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9f aiA8IF9fay9fX2QgLSAxOyBfX2ogKyspIHsKICAgICAgICAgICAgaWYgKF9fcCA8IF9fbGFzdCAt IF9faykgewogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICAgICAg X19wICs9IF9fazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9ICogKF9fcCAtIF9f bCk7CiAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAg ICAqX19wID0gX190bXA7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTU2MSAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcm90YXRlKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9Gb3J3YXJkSXRlciBfX2xhc3Qp CiAgICB7CgogICAgIAoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv cndhcmRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwogICAgICBfX3JvdGF0ZShf X2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTU4OSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIK ICAgIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRk bGUsCiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jl c3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19t aWRkbGUsIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19yZXN1bHQpKTsKICAgIH0KIyAxNjEyICIv dXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlubGluZSBfRGlzdGFuY2UKICAgIF9fcmFuZG9tX251bWJl cihfRGlzdGFuY2UgX19uKQogICAgewoKICAgICAgcmV0dXJuIGxyYW5kNDgoKSAlIF9fbjsKCgoK ICAgIH0KIyAxNjM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQK ICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0 KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7 IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBf X3JhbmRvbV9udW1iZXIoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQojIDE2NjAgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CiAg ICB2b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2Vu ZXJhdG9yJiBfX3JhbmQpCiAgICB7CgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz dCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAx OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsg X19yYW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVy CiAgICBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgZm9y d2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0 dXJuIF9fZmlyc3Q7CgogICAgICB3aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICBpZiAo KytfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICBfRm9yd2FyZEl0ZXIg X19uZXh0ID0gX19maXJzdDsKCiAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCiAgICAg ICAgaWYgKF9fcHJlZCgqX19uZXh0KSkgewogICAgICAgICAgc3dhcCgqX19maXJzdCwgKl9fbmV4 dCk7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9fZmlyc3Q7 CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBl bmFtZSBfUHJlZGljYXRlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyCiAgICBfX3BhcnRpdGlvbihf QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgYmlkaXJlY3Rp b25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hp bGUgKHRydWUpCiAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgICAgIHJl dHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZSBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAg ICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAg ICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09 IF9fbGFzdCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmICgh X19wcmVkKCpfX2xhc3QpKQogICAgICAgICAgICAtLV9fbGFzdDsKICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAg ICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTc0OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs IHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBwYXJ0aXRp b24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHJldHVybiBf X3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShf X2ZpcnN0KSk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg dHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0ZvcndhcmRJdGVy CiAgICBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNh dGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pCiAgICB7CiAgICAgIGlmIChfX2xlbiA9PSAxKQog ICAgICAgIHJldHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0IDogX19maXJzdDsKICAgICAg X0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgYWR2YW5jZShfX21pZGRsZSwg X19sZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBfX2lucGxhY2Vfc3RhYmxl X3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyKTsKICAgICAgX0Zv cndhcmRJdGVyIF9fZW5kID0gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19taWRkbGUsIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMik7CiAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21pZGRs ZSwgX19lbmQpOwogICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2Vu ZCkpOwogICAgICByZXR1cm4gX19iZWdpbjsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLAog ICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX19zdGFi bGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk LCBfRGlzdGFuY2UgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50 ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9f YnVmZmVyX3NpemUpCiAgICB7CiAgICAgIGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAg ICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0MSA9IF9fZmlyc3Q7CiAgICAgICAgX1BvaW50ZXIg X19yZXN1bHQyID0gX19idWZmZXI7CiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCA7 ICsrX19maXJzdCkKICAgICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgICAg ICpfX3Jlc3VsdDEgPSAqX19maXJzdDsKICAgICAgICAgICAgKytfX3Jlc3VsdDE7CiAgICAgICAg ICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0Owog ICAgICAgICAgICArK19fcmVzdWx0MjsKICAgICAgICAgIH0KICAgICAgICBjb3B5KF9fYnVmZmVy LCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0MTsKICAgICAg fQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0Owog ICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICAgICAgX0ZvcndhcmRJdGVy IF9fYmVnaW4gPSBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAg ICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKCBfX21p ZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlciwgX19i dWZmZXJfc2l6ZSk7CiAgICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiAg ICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0YW5jZShfX21pZGRsZSwgX19lbmQpKTsKICAgICAg ICByZXR1cm4gX19iZWdpbjsKICAgICAgfQogICAgfQojIDE4NDggIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBzdGFibGVfcGFy dGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAg ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBl bHNlCiAgICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y d2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5j ZVR5cGU7CgogICAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1ZhbHVlVHlw ZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgICBpZiAoX19idWYuc2l6ZSgpID4gMCkK ICAgICAgICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19s YXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9fYnVmLnNpemUoKSk7 CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9u KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19idWYucmVxdWVzdGVkX3NpemUoKSkpOwogICAg ICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5 cGVuYW1lIF9UcD4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRp b24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90KQogICAgewogICAgICB3aGlsZSAo dHJ1ZSkgewogICAgICAgIHdoaWxlICgqX19maXJzdCA8IF9fcGl2b3QpCiAgICAgICAgICArK19f Zmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9fcGl2b3QgPCAqX19sYXN0 KQogICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAg ICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0 KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4K ICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHdo aWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkpCiAg ICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgd2hpbGUgKF9fY29t cChfX3Bpdm90LCAqX19sYXN0KSkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAgIGlmICghKF9f Zmlyc3QgPCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgaXRlcl9z d2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMg MTkyOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICBlbnVt IHsgX01fdGhyZXNob2xkID0gMTYgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX191bmd1YXJkZWRfbGluZWFy X2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkKICAgIHsKICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAg d2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkgewogICAgICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAg ICAgIF9fbGFzdCA9IF9fbmV4dDsKICAgICAgICAtLV9fbmV4dDsKICAgICAgfQogICAgICAqX19s YXN0ID0gX192YWw7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3Vu Z3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFs LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9 IF9fbGFzdDsKICAgICAgLS1fX25leHQ7CiAgICAgIHdoaWxlIChfX2NvbXAoX192YWwsICpfX25l eHQpKSB7CiAgICAgICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0 OwogICAgICAgIC0tX19uZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0K CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAg IF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsK CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBf X2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9S YW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9f dmFsIDwgKl9fZmlyc3QpIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBf X2kgKyAxKTsKICAgICAgICAgICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVs c2UKICAgICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCk7CiAgICAg IH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nl c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp IHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7 IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAg ICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJk KF9fZmlyc3QsIF9faSwgX19pICsgMSk7CiAgICAgICAgICAqX19maXJzdCA9IF9fdmFsOwogICAg ICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9f aSwgX192YWwsIF9fY29tcCk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9pbnNl cnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChfUmFuZG9t QWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBf X3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICB9CgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21w YXJlPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl IF9WYWx1ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7 IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQo X19pLCBfVmFsdWVUeXBlKCpfX2kpLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25f c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp CiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAg ICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkKTsKICAg ICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBf X2xhc3QpOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly c3QsIF9fbGFzdCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25f c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg aWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlv bl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fY29tcCk7CiAgICAgICAg X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9NX3RocmVzaG9sZCwgX19sYXN0 LCBfX2NvbXApOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9f Zmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf U2l6ZT4KICAgIGlubGluZSBfU2l6ZQogICAgX19sZyhfU2l6ZSBfX24pCiAgICB7CiAgICAgIF9T aXplIF9fazsKICAgICAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsK ICAgICAgcmV0dXJuIF9fazsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29w KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl IF9WYWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9s ZCkgewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxf c29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAg fQogICAgICAgIC0tX19kZXB0aF9saW1pdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1 dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9f Zmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIF9faW50 cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgX19kZXB0aF9saW1pdCk7CiAgICAgICAgX19sYXN0 ID0gX19jdXQ7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAog ICAgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQs IF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICB3 aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChfX2Rl cHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3Qs IF9fbGFzdCwgX19jb21wKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1f X2RlcHRoX2xpbWl0OwogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAg IF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xh c3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgICAgIF9fY29tcCk7 CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0LCBf X2NvbXApOwogICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICB9CiMgMjE2NiAiL3Vz ci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzb3J0KF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1 ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19maXJzdCAhPSBf X2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhf X2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAgICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19m aXJzdCwgX19sYXN0KTsKICAgICAgfQogICAgfQojIDIxOTcgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBf X2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAg ICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2Zp cnN0LCBfX2xhc3QsIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyLCBfX2NvbXApOwogICAgICAg IF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9 CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAg dm9pZAogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly c3QgPCAxNSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAg ICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBf X2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9z b3J0KF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlk ZGxlLCBfX2xhc3QpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2Zp cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKICAg IH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUg X0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly c3QgPCAxNSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2Nv bXApOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21p ZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vf c3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIF9faW5wbGFjZV9z dGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0LCBfX2NvbXApOwogICAgICBfX21lcmdlX3dpdGhv dXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fbGFzdCAtIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZv aWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LCBfUmFu ZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz c0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUpCiAgICB7CiAgICAgIF9EaXN0 YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAt IF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJz dCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJz dCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAg ICAgICAgIF9fcmVzdWx0KTsKICAgICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0K CiAgICAgIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19z dGVwX3NpemUpOwogICAgICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9f Zmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMSwgdHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0Nv bXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlcjEg X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAogICAg ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2Ug X190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2Zp cnN0ID49IF9fdHdvX3N0ZXApIHsKICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9f Zmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBf X3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19m aXJzdCArPSBfX3R3b19zdGVwOwogICAgICB9CiAgICAgIF9fc3RlcF9zaXplID0gbWluKF9EaXN0 YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwoKICAgICAgbWVyZ2UoX19maXJz dCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3Np emUsIF9fbGFzdCwKICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgIF9fY29tcCk7CiAg ICB9CgogIGVudW0geyBfTV9jaHVua19zaXplID0gNyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19jaHVu a19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5r X3NpemUpCiAgICB7CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6 ZSkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtf c2l6ZSk7CiAgICAgICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgICAgIH0KICAgICAgX19p bnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFy ZT4KICAgIHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg IHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgICAgIF9faW5z ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsKICAg ICAgICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9z b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19tZXJn ZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1 ZmZlcikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv bUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwoKICAgICAgX0Rpc3RhbmNl IF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9 IF9fYnVmZmVyICsgX19sZW47CgogICAgICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVu a19zaXplOwogICAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19z dGVwX3NpemUpOwoKICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAgICBf X21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSk7 CiAgICAgICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1 ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3Rl cF9zaXplICo9IDI7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQK ICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Bv aW50ZXIgX19idWZmZXIsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUg X0Rpc3RhbmNlOwoKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAg ICAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogICAgICBfRGlz dGFuY2UgX19zdGVwX3NpemUgPSBfTV9jaHVua19zaXplOwogICAgICBfX2NodW5rX2luc2VydGlv bl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogICAgICB3aGls ZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmly c3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3Rl cF9zaXplICo9IDI7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVy X2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgICAgIF9fc3RlcF9zaXpl ICo9IDI7CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBf X3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19i dWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBfRGlzdGFuY2UgX19s ZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3Np emUpIHsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBf X2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShf X21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgIH0KICAgICAg ZWxzZSB7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxl LCBfX2J1ZmZlcik7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBf X2xhc3QsIF9fYnVmZmVyKTsKICAgICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBf X2J1ZmZlcl9zaXplKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0 ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsCiAgICAgICAgICAgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9z aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg ICAgIF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogICAgICBf UmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAgaWYgKF9f bGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19m aXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9f bWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX21l cmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2NvbXAp OwogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1 ZmZlciwgX19jb21wKTsKICAgICAgfQogICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAg ICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1 ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CiMgMjQzMCAi L3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzdGFibGVfc29y dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VU eXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vz c0l0ZXIsIF9WYWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJl Z2luKCkgPT0gMCkKICAgICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0 KTsKICAgICAgZWxzZQogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19s YXN0LCBidWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSk7CiAgICB9CiMgMjQ2 NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxp bmUgdm9pZAogICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBf VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t QWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAg IAoKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBl PiBidWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICAg ICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAg ZWxzZQogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYu YmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29tcCk7CiAgICB9CiMgMjUwMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl cj4KICAgIHZvaWQKICAgIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5 cGU7CgoKICAgICAKCiAgICAgCgogICAgICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUpOwog ICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7 ICsrX19pKQogICAgICAgIGlmICgqX19pIDwgKl9fZmlyc3QpCiAgICAgICAgICBfX3BvcF9oZWFw KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9WYWx1ZVR5cGUoKl9faSkpOwogICAgICBzb3J0X2hl YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgfQojIDI1NDAgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz c0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgcGFydGlhbF9zb3J0KF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19taWRkbGUsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5 cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBf X2NvbXApOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kg PCBfX2xhc3Q7ICsrX19pKQogICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9fZmlyc3QpKQogICAg ICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kp LCBfX2NvbXApOwogICAgICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAg ICB9CiMgMjU3OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl cj4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t QWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6 dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VU eXBlOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgogICAgICBpZiAoX19yZXN1bHRfZmlyc3Qg PT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nl c3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShf X2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkg ewogICAgICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICAgICArK19fcmVz dWx0X3JlYWxfbGFzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgICAgbWFrZV9oZWFw KF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogICAgICB3aGlsZSAoX19maXJz dCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHRfZmlyc3QpCiAg ICAgICAgICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAog ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAt IF9fcmVzdWx0X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBl KCpfX2ZpcnN0KSk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAgIHNvcnRfaGVhcChf X3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0 X3JlYWxfbGFzdDsKICAgIH0KIyAyNjMzICIvdXNyL2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9S YW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVy CiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmly c3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfSW5w dXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf dHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAgaWYg KF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0Owog ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJz dDsKICAgICAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9 IF9fcmVzdWx0X2xhc3QpIHsKICAgICAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7 CiAgICAgICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9 CiAgICAgIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2Nv bXApOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoX19jb21w KCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQogICAgICAgICAgX19hZGp1c3RfaGVhcChfX3Jl c3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgwKSwKICAgICAgICAgICAgICAgICAgICAgICAgX0Rp c3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAg ICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVlVHlwZSgqX19maXJzdCksCiAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAgIHNvcnRf aGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogICAgICBy ZXR1cm4gX19yZXN1bHRfcmVhbF9sYXN0OwogICAgfQojIDI2ODYgIi91c3IvbG9jYWwvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFj Y2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAg ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVU eXBlOwoKCiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsK ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9w YXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkv MiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq KF9fbGFzdCAtIDEpKSkpOwogICAgICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgICAgIF9f Zmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAg ICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CiMgMjcy OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lk CiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl c3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCiAgICAgCgoKICAgICAgd2hp bGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19j dXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihf X2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCkpLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgaWYgKF9fY3V0IDw9IF9fbnRo KQogICAgICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGFz dCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0 LCBfX2NvbXApOwogICAgfQojIDI3NjggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf VHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewogICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9W YWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgoKCgogICAgIAogICAgIAog ICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFz dCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRk bGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4g MTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwg X19oYWxmKTsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmly c3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19s ZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX2xlbiA9 IF9faGFsZjsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyODE2ICIvdXNy L2xvY2FsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9G b3J3YXJkSXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBf X2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3 YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5 cGU7CgoKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShf X2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0Zvcndh cmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFs ZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFu Y2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFs KSkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0Owog ICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVs c2UKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0 OwogICAgfQojIDI4NTYgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBf Rm9yd2FyZEl0ZXIKICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRp ZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAg X0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9E aXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3 aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBf X21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg ICAgICBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAg ICAgICBlbHNlIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19m aXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAg ICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyOTAxICIvdXNyL2xvY2FsL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgog ICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZh bHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAK ICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xh c3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlk ZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+ IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUs IF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAg IF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19maXJzdCA9IF9fbWlk ZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFs ZiAtIDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI5 NDggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBwYWlyPF9Gb3J3YXJk SXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1Zh bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAgICAgCiAgICAgCiAgICAg CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsK ICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwg X19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFs ZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFu Y2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAg ICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAg ICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAo X192YWwgPCAqX19taWRkbGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNl IHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3Zh bCk7CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgICAgIF9fcmlnaHQg PSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCk7CiAgICAgICAgICByZXR1 cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAg ICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0 ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwogICAgfQojIDMwMDMgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgcGFpcjxfRm9yd2FyZEl0ZXIs IF9Gb3J3YXJkSXRlcj4KICAgIGVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgX0NvbXBh cmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf Rm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFu Y2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0g ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAg ICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUg KF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRk bGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAg aWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlk ZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFs ZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxl KSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19s ZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogICAg ICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgICAgICAgICBfX3JpZ2h0ID0gdXBwZXJf Ym91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwsIF9fY29tcCk7CiAgICAgICAgICByZXR1 cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAg ICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0 ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwogICAgfQojIDMwNTIgIi91c3IvbG9jYWwvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfVHA+CiAgICBib29sCiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBjb25zdCBfVHAm IF9fdmFsKQogICAgewoKCiAgICAgCiAgICAgCgogICAgIAoKICAgICAgX0ZvcndhcmRJdGVyIF9f aSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogICAgICByZXR1cm4gX19p ICE9IF9fbGFzdCAmJiAhKF9fdmFsIDwgKl9faSk7CiAgICB9CiMgMzA4MyAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y d2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBi aW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7 CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91 bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9faSAhPSBf X2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9faSk7CiAgICB9CiMgMzExNSAiL3Vzci9sb2NhbC9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAg X091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf X2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz dDIsCiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAg ICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg X19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEp IHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7 CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx OwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAg ICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwg X19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KIyAzMTY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0 eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEgX19m aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0 MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoK CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy KSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAg ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQog ICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAg KytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICBy ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y ZXN1bHQpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0 ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZm ZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp c3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikKICAgIHsKICAgICAgaWYgKF9fbGVuMSA9 PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKF9fbGVuMSArIF9f bGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICAgICAg ICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9 CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNl IF9fbGVuMTEgPSAwOwogICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xl bjEgPiBfX2xlbjIpIHsKICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZh bmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9i b3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgIF9fbGVuMjIgPSBk aXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgfQogICAgICBlbHNlIHsKICAg ICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwg X19sZW4yMik7CiAgICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21p ZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3Qs IF9fZmlyc3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxl LCBfX3NlY29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0g X19maXJzdF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBkaXN0YW5jZShfX21pZGRs ZSwgX19zZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwg X19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2xlbjExLCBfX2xlbjIyKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRk bGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f bGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIpOwogICAgfQoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0 aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVu MSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg X19jb21wKQogICAgewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICAg ICAgcmV0dXJuOwogICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgICAgICBpZiAo X19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2Zp cnN0LCBfX21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAg ICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAg ICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBf X2xlbjExKTsKICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19s YXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9f bWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbGVu MjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsK ICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19z ZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBf X2ZpcnN0X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwg X19zZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9IF9f Zmlyc3RfY3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFuY2UoX19taWRkbGUs IF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9f Zmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s ZW4xMSwgX19sZW4yMiwgX19jb21wKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25l d19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29tcCk7CiAgICB9CgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0Jp ZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfQmlk aXJlY3Rpb25hbEl0ZXIxCiAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIx IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbWlk ZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAog ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAgICAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyX2VuZDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMiAm JiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fYnVmZmVyX2VuZCA9IGNvcHko X19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJz dCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVm ZmVyX2VuZCwgX19maXJzdCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19sZW4xIDw9IF9fYnVm ZmVyX3NpemUpIHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxl LCBfX2J1ZmZlcik7CiAgICAgICAgY29weShfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAg ICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3Qp OwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwg X19sYXN0KTsKICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xh c3QpKTsKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs SXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMz4KICAgIF9CaWRp cmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBf X2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFz dDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMgX19yZXN1bHQpCiAg ICB7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2Jh Y2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0MiA9 PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3Qx LCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3aGls ZSAodHJ1ZSkgewogICAgICAgIGlmICgqX19sYXN0MiA8ICpfX2xhc3QxKSB7CiAgICAgICAgICAq LS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEp CiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19fbGFzdDIsIF9f cmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAg ICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYgKF9fZmlyc3QyID09 IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCArK19f bGFzdDEsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAgICB9CiAgICAgIH0K ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBl bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaWRpcmVjdGlv bmFsSXRlcjMsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMwogICAg X19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl cjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg X0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAg ICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwog ICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2Fy ZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICAgIC0t X19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2xhc3Qy LCAqX19sYXN0MSkpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgICAg ICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dh cmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QxOwog ICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7 CiAgICAgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIGNv cHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAgICAgLS1f X2xhc3QyOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRl cj4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly c3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAg ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAg ICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAg ewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3Np emUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBf X21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJf ZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAgICAgIH0KICAgICAgICAgIGVs c2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9f YnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgICAg ICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJf ZW5kLCBfX2xhc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9CaWRp cmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rpc3Rh bmNlIF9fbGVuMTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAg ICAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9 IF9fbGVuMSAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVu MTEpOwogICAgICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRs ZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gZGlz dGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAg ZWxzZSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgICAg ICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgICAgICAgICAg IF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9j dXQpOwogICAgICAgICAgICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJz dF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25l d19taWRkbGUgPQogICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1 dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21lcmdl X2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3Np emUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRf Y3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAg fQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlw ZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRlciwKICAgICAgICAgICB0eXBlbmFtZSBf Q29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVy IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRs ZSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAg ICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXpl LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgICAgICBp ZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAg ICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1 ZmZlcik7CiAgICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxl LCBfX2xhc3QsIF9fZmlyc3QsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlm IChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZl cl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICAgICAgX19t ZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bXApOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVu MTEgPSAwOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgICAgICAgIGlm IChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAv IDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAg ICAgICAgICAgICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0 LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBkaXN0 YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBl bHNlIHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgICAg ICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICAgICAgICAgICAg X19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1 dCwgX19jb21wKTsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3Qs IF9fZmlyc3RfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19uZXdfbWlkZGxlID0KICAgICAgICAgICAgICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19m aXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbGVuMSAtIF9fbGVuMTEsIF9fbGVuMjIsIF9fYnVmZmVyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAg X19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xl bjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1 ZmZlcl9zaXplLCBfX2NvbXApOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21p ZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3Np emUsIF9fY29tcCk7CiAgICAgICAgICB9CiAgICB9CiMgMzUwOCAiL3Vzci9sb2NhbC9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rp b25hbEl0ZXI+CiAgICB2b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAg ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVl X3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAg X0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlk ZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgICAgICByZXR1cm47CgogICAgICBfRGlzdGFu Y2VUeXBlIF9fbGVuMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3Rh bmNlVHlwZSBfX2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9UZW1w b3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJz dCwgX19sYXN0KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21lcmdl X3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4y KTsKICAgICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUs IF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5i ZWdpbigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSkpOwogICAgfQojIDM1NTkgIi91c3Iv bG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIGlu cGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAg ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0 ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUK ICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgaWYgKF9fZmly c3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAg ICAgIF9EaXN0YW5jZVR5cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwog ICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoK ICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBf X2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAg ICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19s ZW4xLCBfX2xlbjIsIF9fY29tcCk7CiAgICAgIGVsc2UKICAgICAgICBfX21lcmdlX2FkYXB0aXZl KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAg ICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAog ICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBp bmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoK ICAgICAKICAgICAKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2Zp cnN0MSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmKCpfX2ZpcnN0MSA8 ICpfX2ZpcnN0MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAgICAgICAg KytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3Qy OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0 SXRlcjIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lucHV0SXRl cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQogICAgewoK ICAgICAKICAgICAKICAgICAKCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19s YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qy LCAqX19maXJzdDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoX19j b21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg ZWxzZQogICAgICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2Zp cnN0MiA9PSBfX2xhc3QyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0 ZXIKICAgIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0 MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0 MiwKICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAg CiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg JiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJz dDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJz dDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewog ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAg ICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAg ICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAg ICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0 MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0 cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAg ICBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19jb21w KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx OwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21w KCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qy OwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAg ICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAg KytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICBy ZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19y ZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1l IF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBz ZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIg X19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7 CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0 MSA8ICpfX2ZpcnN0MikKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoKl9f Zmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsK ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAg ICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAg IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEs IHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0 eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJzZWN0aW9uKF9J bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK CiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgq X19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2Ug aWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwog ICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAg KytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0Owog ICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy PgogICAgX091dHB1dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAg ICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAg ICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAg ICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAg KytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg ICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFz dDEsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5 cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBl bmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAg ICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEs ICpfX2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAg ICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNl IGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsK ICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3Qy OwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0 KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1 dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfc3lt bWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAg ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAg ICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAg ICAgICAgfQogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAg ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAg ICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2Zp cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0 eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9P dXRwdXRJdGVyCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoK ICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g X19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAg ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg ICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJz dDIsICpfX2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAg ICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBl bHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAg IH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9f bGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk SXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl c3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAg IGlmICgqX19yZXN1bHQgPCAqX19maXJzdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsK ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVu dChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3Vs dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlm IChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+ CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJz dCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQg PSBfX2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAo Kl9fZmlyc3QgPCAqX19yZXN1bHQpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAg IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBf Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9 PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBf X2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19j b21wKCpfX2ZpcnN0LCAqX19yZXN1bHQpKQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0Owog ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRp cmVjdGlvbmFsSXRlcj4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9u YWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAog ICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7 CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAg ICAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBf X2xhc3Q7CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2kgPCAqX19p aSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAg IHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9z d2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAg IHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAg ICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsK ICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u YWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24o X0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoK CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYg KF9faSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7 CiAgICAgIC0tX19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9faWkgPSBfX2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAqX19p aSkpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAg ICB3aGlsZSAoIV9fY29tcCgqX19pLCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAg aXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAg ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3Qp IHsKICAgICAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBm YWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25h bEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAg ICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsK ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAg ICBpZiAoX19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9f bGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIgX19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faWkgPCAqX19p KSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAg d2hpbGUgKCEoKi0tX19qIDwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3 YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAg cmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAg ICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwog ICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h bEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihf QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoK ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAo X19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsK ICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2lpLCAqX19p KSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAg IHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBp dGVyX3N3YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAg ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkg ewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZh bHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmly c3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAg ICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyKQogICAg ewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx OyArK19fZmlyc3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3Qy OyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoKl9fZmlyc3QxID09 ICpfX2l0ZXIpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFz dDE7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3 YXJkSXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9JbnB1dEl0ZXIKICAgIGZp bmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAg ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3Qy LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAg CiAgICAgCiAgICAgCgoKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx OyArK19fZmlyc3QxKQogICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3Qy OyBfX2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoX19jb21wKCpfX2Zp cnN0MSwgKl9faXRlcikpCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJu IF9fbGFzdDE7CiAgICB9CiMgNDIwMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0 ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg Zm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBp ZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxz ZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hp bGUgKDEpIHsKICAgICAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAg ID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAgICAg ICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3Vs dDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsK ICAgICAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJz dDE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAgdHlw ZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQo X0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg ICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAg ICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAg ICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2Zp cnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAg ICAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkg ewogICAgICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFy Y2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICAg ICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1 bHQ7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7 CiAgICAgICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmly c3QxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4K ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVy MSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIs CiAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFs X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2Vf aXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJl dmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jl dkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmly c3QyKTsKICAgICAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0 MSksIF9fcmxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVy MihfX2xhc3QyKSwgX19ybGFzdDIpOwoKICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkK ICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jl c3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVz dWx0OwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl cjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Jp bmFyeVByZWRpY2F0ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0Jp ZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAog ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25h bEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp Y2F0ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0 ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZl cnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJ dGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0 Mik7CiAgICAgIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEp LCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIo X19sYXN0MiksIF9fcmxhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29tcCk7CgogICAgICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVybiBf X2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0 ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2Uo X19maXJzdDIsIF9fbGFzdDIpKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KICAg IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2Fy ZEl0ZXIyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRl cjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJk SXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAg CiAgICAgCgoKCiAgICAgIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2Zp cnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29y eShfX2ZpcnN0MSksCiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnko X19maXJzdDIpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlw ZW5hbWUgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRl PgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19m aXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIg X19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQcmVk aWNhdGUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgcmV0dXJuIF9f ZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAg ICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAg ICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MiksCiAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29tcCk7CiAgICB9Cgp9CiMgNzAgIi91c3IvbG9jYWwvaW5jbHVkZS9nKyst djMvYWxnb3JpdGhtIiAyIDMKIyA1NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9zdHJpbmci IDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNj IiAxIDMKIyA0NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy50 Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9TX21heF9zaXplID0gKCgobnBv cyAtIHNpemVvZihfUmVwKSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkgLyA0OwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNv bnN0IF9DaGFyVAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg ICBfUmVwOjpfU190ZXJtaW5hbCA9IF9DaGFyVCgpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1l IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvczsKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5 cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1NfZW1wdHlfcmVwX3N0 b3JhZ2VbCiAgICAoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90 eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlw ZW5hbWUgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0 ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl cmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBf QWxsb2MoKSkKICAgICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7Cgog ICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOwogICAgICAgIHNpemVfdHlwZSBfX2kgPSAwOwogICAg ICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBzaXplb2YoX19idWYpIC8gc2l6ZW9m KF9DaGFyVCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fYnVmW19faSsrXSA9ICpfX2JlZzsK ICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgIH0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVw OjpfU19jcmVhdGUoX19pLCBfX2EpOwogICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01f cmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsKICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9faTsKICAg ICAgICB0cnkKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19y LT5fTV9sZW5ndGg7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fbGFzdCA9IF9fci0+X01fcmVm ZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsKICAgICAgICAgICAgICAgIGZvciAoOzspCiAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAg ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fbGVu Z3RoID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICpf X3AgPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9f ci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg ICAgIGlmIChfX3AgPT0gX19sYXN0KQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICAgICAgKl9fcCsrID0gKl9fYmVnOwogICAgICAgICAgICAgICAgICAgICsrX19i ZWc7CiAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4g PSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgIF9SZXAqIF9fYW5vdGhl ciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fYSk7CiAgICAgICAgICAgICAgICB0cmFp dHNfdHlwZTo6Y29weShfX2Fub3RoZXItPl9NX3JlZmRhdGEoKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fci0+X01fcmVmZGF0YSgpLCBfX2xlbik7CiAgICAgICAgICAgICAg ICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgICAgIF9fciA9IF9fYW5vdGhlcjsK ICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19sZW47CiAgICAgICAgICAgICAgfQog ICAgICAgICAgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19y LT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAg IHJldHVybiAwOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXI+CiAg ICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBf QWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAg ICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlz dGFuY2UoX19iZWcsIF9fZW5kKSk7CgoKICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX2Jl ZyA9PSBfSW5JdGVyKDApLCAwKSkKICAgICAgICAgIF9fdGhyb3dfbG9naWNfZXJyb3IoImF0dGVt cHQgdG8gY3JlYXRlIHN0cmluZyB3aXRoIG51bGwgcG9pbnRlciIpOwoKICAgICAgICBpZiAoX19i ZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5 X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0 ZShfX2RuZXcsIF9fYSk7CiAgICAgICAgdHJ5CiAgICAgICAgICB7IF9TX2NvcHlfY2hhcnMoX19y LT5fTV9yZWZkYXRhKCksIF9fYmVnLCBfX2VuZCk7IH0KICAgICAgICBjYXRjaCguLi4pCiAgICAg ICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICB0aHJv dzsKICAgICAgICAgIH0KICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fZG5ldzsKCiAgICAgICAg X19yLT5fTV9yZWZkYXRhKClbX19kbmV3XSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgIHJl dHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIF9DaGFyVCoKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1NfY29uc3RydWN0KHNp emVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgewogICAgICBp ZiAoX19uID09IDAgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgIHJldHVybiBfU19lbXB0eV9y ZXAoKS5fTV9yZWZjb3B5KCk7CgoKICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9f biwgX19hKTsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgaWYgKF9fbikKICAgICAgICAg ICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfX3ItPl9NX3JlZmRhdGEoKSwgX19uLCBfX2MpOwogICAg ICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9fci0+X01fZGVzdHJv eShfX2EpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICBfX3ItPl9NX2xlbmd0aCA9 IF9fbjsKICAgICAgX19yLT5fTV9yZWZkYXRhKClbX19uXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwog ICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0cikKICAgIDogX01fZGF0YXBsdXMoX19zdHIuX01fcmVwKCktPl9NX2dy YWIoX0FsbG9jKCksIF9fc3RyLmdldF9hbGxvY2F0b3IoKSksCiAgICAgICAgICAgICAgICAgX19z dHIuZ2V0X2FsbG9jYXRvcigpKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2Ep CiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChzaXplX3R5cGUoKSwgX0NoYXJUKCksIF9f YSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3Ry dWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9BbGxvYygpKSwgX0FsbG9jKCkpCiAgICB7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJh c2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAg ICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9N X2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfX2EpLCBfX2Ep CiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwgY29u c3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyAr IF9fbiwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIGNv bnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBfX3Mg PyBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykgOiAwLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwg X0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0 cnVjdChfX24sIF9fYywgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlcj4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46OgogICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXIgX19iZWcsIF9JbnB1dEl0ZXIgX19lbmQs IGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19iZWcs IF9fZW5kLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6YXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICB7CiAgICAgIGlmIChf TV9yZXAoKSAhPSBfX3N0ci5fTV9yZXAoKSkKICAgICAgICB7CgogICAgICAgICAgYWxsb2NhdG9y X3R5cGUgX19hID0gdGhpcy0+Z2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX0NoYXJUKiBfX3Rt cCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9fYSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKTsK ICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9f dG1wKTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lk CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9N X2Rlc3Ryb3koY29uc3QgX0FsbG9jJiBfX2EpIHRocm93ICgpCiAgICB7CiAgICAgIHNpemVfdHlw ZSBfX3NpemUgPSBzaXplb2YoX1JlcCkgKyAoX01fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hh clQpOwogICAgICBfUmF3X2J5dGVzX2FsbG9jKF9fYSkuZGVhbGxvY2F0ZShyZWludGVycHJldF9j YXN0PGNoYXIqPih0aGlzKSwgX19zaXplKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfTV9sZWFrX2hhcmQoKQogICAgewog ICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQogICAgICAgIF9NX211dGF0ZSgwLCAw LCAwKTsKICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgIH0KCgoKCgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg IF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBf X2xlbjIpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhpcy0+c2l6ZSgpOwog ICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdfc2l6ZSA9IF9fb2xkX3NpemUgKyBfX2xlbjIgLSBf X2xlbjE7CiAgICAgIGNvbnN0IF9DaGFyVCogX19zcmMgPSBfTV9kYXRhKCkgKyBfX3BvcyArIF9f bGVuMTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9faG93X211Y2ggPSBfX29sZF9zaXplIC0gX19w b3MgLSBfX2xlbjE7CgogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IF9fbmV3 X3NpemUgPiBjYXBhY2l0eSgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBf X2EgPSBnZXRfYWxsb2NhdG9yKCk7CgoKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2Vz aXplID0gNDA5NjsKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6 ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsKCiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdl X2NhcGFjaXR5ID0gKF9fcGFnZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6ZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHNpemVvZihfUmVwKSAtIHNpemVv ZihfQ2hhclQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv IHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX1JlcCogX19yOwogICAgICAgICAgaWYgKF9fbmV3 X3NpemUgPiBjYXBhY2l0eSgpICYmIF9fbmV3X3NpemUgPiBfX3BhZ2VfY2FwYWNpdHkpCgogICAg ICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSA+IDIqY2FwYWNpdHkoKSA/ CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zaXplIDogMipjYXBhY2l0 eSgpLCBfX2EpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVh dGUoX19uZXdfc2l6ZSwgX19hKTsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgaWYgKF9fcG9zKQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5f TV9yZWZkYXRhKCksIF9NX2RhdGEoKSwgX19wb3MpOwogICAgICAgICAgICAgIGlmIChfX2hvd19t dWNoKQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCkg KyBfX3BvcyArIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3Jj LCBfX2hvd19tdWNoKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgX19yLT5fTV9kaXNwb3NlKGdldF9hbGxvY2F0b3IoKSk7CiAg ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9NX3JlcCgpLT5fTV9k aXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fci0+X01fcmVmZGF0YSgpKTsKICAgICAg fQogICAgICBlbHNlIGlmIChfX2hvd19tdWNoICYmIF9fbGVuMSAhPSBfX2xlbjIpCiAgICAgICAg ewoKICAgICAgICAgIHRyYWl0c190eXBlOjptb3ZlKF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4y LCBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgfQogICAgICBfTV9yZXAoKS0+X01fc2V0X3No YXJhYmxlKCk7CiAgICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX25ld19zaXplOwogICAgICBf TV9kYXRhKClbX19uZXdfc2l6ZV0gPSBfUmVwOjpfU190ZXJtaW5hbDsKCiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzZXJ2 ZShzaXplX3R5cGUgX19yZXMpCiAgICB7CiAgICAgIGlmIChfX3JlcyA+IHRoaXMtPmNhcGFjaXR5 KCkgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChf X3JlcyA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9y KCJiYXNpY19zdHJpbmc6OnJlc2VydmUiKTsKCiAgICAgICAgICBpZiAoX19yZXMgPCB0aGlzLT5z aXplKCkpCiAgICAgICAgICAgIF9fcmVzID0gdGhpcy0+c2l6ZSgpOwogICAgICAgICAgYWxsb2Nh dG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9 IF9NX3JlcCgpLT5fTV9jbG9uZShfX2EsIF9fcmVzIC0gdGhpcy0+c2l6ZSgpKTsKICAgICAgICAg IF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAg ICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+Ojpzd2FwKGJhc2ljX3N0cmluZyYgX19zKQogICAgewogICAgICBpZiAoX01fcmVw KCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsK ICAgICAgaWYgKF9fcy5fTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgX19zLl9NX3Jl cCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYgKHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9 PSBfX3MuZ2V0X2FsbG9jYXRvcigpKQogICAgICAgIHsKICAgICAgICAgIF9DaGFyVCogX190bXAg PSBfTV9kYXRhKCk7CiAgICAgICAgICBfTV9kYXRhKF9fcy5fTV9kYXRhKCkpOwogICAgICAgICAg X19zLl9NX2RhdGEoX190bXApOwogICAgICAgIH0KCiAgICAgIGVsc2UKICAgICAgICB7CiAgICAg ICAgICBiYXNpY19zdHJpbmcgX190bXAxKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcy5nZXRf YWxsb2NhdG9yKCkpOwogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMihfX3MuX01faWJlZ2lu KCksIF9fcy5fTV9pZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmdl dF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAqdGhpcyA9IF9fdG1wMjsKICAgICAgICAgIF9fcyA9 IF9fdG1wMTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX1NfY3JlYXRlKHNpemVfdCBfX2NhcGFjaXR5 LCBjb25zdCBfQWxsb2MmIF9fYWxsb2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwoKCiAgICAgIGlmIChfX2Nh cGFjaXR5ID4gX1NfbWF4X3NpemUpCgoKCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJh c2ljX3N0cmluZzo6X1NfY3JlYXRlIik7CgoKCgogICAgICBzaXplX3QgX19zaXplID0gKF9fY2Fw YWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwojIDQyMSAiL3Vzci9s b2NhbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKICAgICAgY29uc3Qg c2l6ZV90IF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25zdCBzaXplX3QgX19zdWJwYWdlc2l6 ZSA9IDEyODsKICAgICAgY29uc3Qgc2l6ZV90IF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNp emVvZiAodm9pZCopOwogICAgICBpZiAoKF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSA+ IF9fcGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fZXh0cmEgPQogICAgICAg ICAgICAoX19wYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpICUgX19w YWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19wYWdlc2l6ZTsKICAgICAgICAgIF9fY2FwYWNpdHkg Kz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX19zaXplID0gKF9fY2FwYWNp dHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwogICAgICAgIH0KICAgICAg ZWxzZSBpZiAoX19zaXplID4gX19zdWJwYWdlc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXpl X3QgX19leHRyYSA9CiAgICAgICAgICAgIChfX3N1YnBhZ2VzaXplIC0gKChfX3NpemUgKyBfX21h bGxvY19oZWFkZXJfc2l6ZSkgJSBfX3N1YnBhZ2VzaXplKSkKICAgICAgICAgICAgJSBfX3N1YnBh Z2VzaXplOwogICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFyVCk7 CiAgICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBz aXplb2YoX1JlcCk7CiAgICAgICAgfQoKCgogICAgICB2b2lkKiBfX3BsYWNlID0gX1Jhd19ieXRl c19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOwogICAgICBfUmVwICpfX3AgPSBuZXcg KF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01fY2FwYWNpdHkgPSBfX2NhcGFjaXR5OwogICAg ICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfX3AtPl9NX2xlbmd0aCA9IDA7CiAgICAg IHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9jbG9uZShjb25zdCBfQWxsb2Mm IF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAgIHsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBf X3JlcXVlc3RlZF9jYXAgPSBfTV9sZW5ndGggKyBfX3JlczsKCiAgICAgIGNvbnN0IHNpemVfdHlw ZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRl cl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFn ZV9jYXBhY2l0eSA9CiAgICAgICAgKF9fcGFnZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6ZSAt IHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7 CiAgICAgIF9SZXAqIF9fcjsKICAgICAgaWYgKF9fcmVxdWVzdGVkX2NhcCA+IF9NX2NhcGFjaXR5 ICYmIF9fcmVxdWVzdGVkX2NhcCA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAgX19yID0gX1Jl cDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCA+IDIqX01fY2FwYWNpdHkgPwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3JlcXVlc3RlZF9jYXAgOiAyKl9NX2NhcGFjaXR5LCBfX2Fs bG9jKTsKICAgICAgZWxzZQogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3Rl ZF9jYXAsIF9fYWxsb2MpOwoKICAgICAgaWYgKF9NX2xlbmd0aCkKICAgICAgICB7CiAgICAgICAg ICB0cnkKICAgICAgICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwg X01fcmVmZGF0YSgpLCBfTV9sZW5ndGgpOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hbGxvYyk7CiAgICAgICAgICAg ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0g X01fbGVuZ3RoOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzaXpl KHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmIChfX24gPiBtYXhfc2l6 ZSgpKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2l6ZSIp OwogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXpl IDwgX19uKQogICAgICAgIHRoaXMtPmFwcGVuZChfX24gLSBfX3NpemUsIF9fYyk7CiAgICAgIGVs c2UgaWYgKF9fbiA8IF9fc2l6ZSkKICAgICAgICB0aGlzLT5lcmFzZShfX24pOwoKICAgIH0KIyA1 MDggIi91c3IvbG9jYWwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBf X2kyLCBfSW5wdXRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2syLCBp bnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKCiAgICAgICAgYmFzaWNfc3RyaW5nIF9fcyhfX2sx LCBfX2syKTsKICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9faTEsIF9faTIsIF9fcy5f TV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSk7CiAgICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6CiAgICAgIF9NX3JlcGxhY2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBf Rm9yd2FyZEl0ZXIgX19rMSwKICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2sy KQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlw ZT4oZGlzdGFuY2UoX19rMSwgX19rMikpOwogICAgICAgIHNpemVfdHlwZSBfX2RvbGQgPSBfX2ky IC0gX19pMTsKICAgICAgICBzaXplX3R5cGUgX19kbWF4ID0gdGhpcy0+bWF4X3NpemUoKTsKCiAg ICAgICAgaWYgKF9fZG1heCA8PSBfX2RuZXcpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJv cigiYmFzaWNfc3RyaW5nOjpfTV9yZXBsYWNlIik7CiAgICAgICAgc2l6ZV90eXBlIF9fb2ZmID0g X19pMSAtIF9NX2liZWdpbigpOwogICAgICAgIF9NX211dGF0ZShfX29mZiwgX19kb2xkLCBfX2Ru ZXcpOwoKCiAgICAgICAgaWYgKF9fZG5ldykKICAgICAgICAgIF9TX2NvcHlfY2hhcnMoX01fZGF0 YSgpICsgX19vZmYsIF9fazEsIF9fazIpOwoKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKHNpemVfdHlw ZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAg ICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikKICAgIHsKICAgICAgY29u c3Qgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMiA+ IF9fc3Ryc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpy ZXBsYWNlIik7CiAgICAgIGNvbnN0IGJvb2wgX190ZXN0bjIgPSBfX24yIDwgX19zdHJzaXplIC0g X19wb3MyOwogICAgICBjb25zdCBzaXplX3R5cGUgX19mb2xkbjIgPSBfX3Rlc3RuMiA/IF9fbjIg OiBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zMSwg X19uMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZGF0YSgpICsgX19wb3My LCBfX2ZvbGRuMik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICB7CgoKCiAgICAgIHNpemVf dHlwZSBfX3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc2l6 ZSArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAg ICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShf TV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01faWJlZ2luKCksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19zdHIuX01faWVuZCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6 ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19s ZW4gPSBtaW4oX19zdHIuc2l6ZSgpIC0gX19wb3MsIF9fbikgKyB0aGlzLT5zaXplKCk7CiAgICAg IGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xl bik7CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9f c3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5f TV9mb2xkKF9fcG9zLCBfX24pKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6CiAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICB7 CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9f bGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAg ICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zLCBfX3Mg KyBfX24pOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFw cGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgewogICAgICBzaXplX3R5cGUgX19s ZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5 KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgICByZXR1cm4gdGhpcy0+cmVw bGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBf Q2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90 eXBlIF9fbGVuID0gX1RyYWl0czo6bGVuZ3RoKF9fbGhzKTsKICAgICAgX19zdHJpbmdfdHlwZSBf X3N0cjsKICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIF9fcmhzLnNpemUoKSk7CiAgICAgIF9f c3RyLmFwcGVuZChfX2xocywgX19saHMgKyBfX2xlbik7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jo cyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAg dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6 ZV90eXBlOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBfX3NpemVfdHlwZSBfX2xl biA9IF9fcmhzLnNpemUoKTsKICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIDEpOwogICAgICBf X3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9f cmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6 ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX24xID0gX19p MiAtIF9faTE7CiAgICAgIHNpemVfdHlwZSBfX29mZjEgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAg ICAgIGlmIChtYXhfc2l6ZSgpIC0gKHRoaXMtPnNpemUoKSAtIF9fbjEpIDw9IF9fbjIpCiAgICAg ICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICBf TV9tdXRhdGUgKF9fb2ZmMSwgX19uMSwgX19uMik7CgogICAgICBpZiAoX19uMikKICAgICAgICB0 cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKSArIF9fb2ZmMSwgX19uMiwgX19jKTsKICAgICAg cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBz aXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUo KSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb3B5Iik7Cgog ICAgICBpZiAoX19uID4gdGhpcy0+c2l6ZSgpIC0gX19wb3MpCiAgICAgICAgX19uID0gdGhpcy0+ c2l6ZSgpIC0gX19wb3M7CgogICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3MsIF9NX2RhdGEoKSAr IF9fcG9zLCBfX24pOwoKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFt ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZChjb25zdCBfQ2hh clQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAg ICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3QgX194cG9zID0g X19wb3M7CiAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICBmb3Ig KDsgX194cG9zICsgX19uIDw9IF9fc2l6ZTsgKytfX3hwb3MpCiAgICAgICAgaWYgKHRyYWl0c190 eXBlOjpjb21wYXJlKF9fZGF0YSArIF9feHBvcywgX19zLCBfX24pID09IDApCiAgICAgICAgICBy ZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFt ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZChfQ2hhclQgX19j LCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0 aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX3JldCA9IG5wb3M7CiAgICAgIGlmIChfX3Bv cyA8IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9N X2RhdGEoKTsKICAgICAgICAgIHNpemVfdHlwZSBfX24gPSBfX3NpemUgLSBfX3BvczsKICAgICAg ICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19kYXRhICsgX19wb3Ms IF9fbiwgX19jKTsKICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIF9fcmV0ID0gX19wIC0g X19kYXRhOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0 eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUK ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmZpbmQoY29u c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAg IHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbiA8 PSBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19wb3MgPSBzdGQ6Om1pbihfX3NpemUgLSBf X24sIF9fcG9zKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwog ICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6 Y29tcGFyZShfX2RhdGEgKyBfX3BvcywgX19zLCBfX24pID09IDApCiAgICAgICAgICAgICAgICBy ZXR1cm4gX19wb3M7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3Bvcy0tID4gMCk7 CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmZpbmQoX0NoYXJUIF9fYywg c2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp cy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBf X3hwb3MgPSBfX3NpemUgLSAxOwogICAgICAgICAgaWYgKF9feHBvcyA+IF9fcG9zKQogICAgICAg ICAgICBfX3hwb3MgPSBfX3BvczsKCiAgICAgICAgICBmb3IgKCsrX194cG9zOyBfX3hwb3MtLSA+ IDA7ICkKICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX194cG9zXSwg X19jKSkKICAgICAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICAgIH0KICAgICAgcmV0dXJu IG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgZm9yICg7IF9fbiAmJiBf X3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykKICAgICAgICB7CiAgICAgICAgICBjb25zdCBf Q2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19wb3Nd KTsKICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICB9 CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBf X3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6 ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pCiAg ICAgICAgewogICAgICAgICAgaWYgKC0tX19zaXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6 ZSA9IF9fcG9zOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICh0 cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAg ICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6 ZS0tICE9IDApOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg dHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBl CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmly c3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf X24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7 IF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlw ZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19feHBvc10pKQogICAgICAgICAgcmV0dXJuIF9f eHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKF9DaGFy VCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9feHBvcyA9 IF9fcG9zOwogICAgICBmb3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19feHBvcykKICAg ICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX194cG9zXSwgX19jKSkKICAgICAg ICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5 cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rf bm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p IGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg IGlmIChfX3NpemUpCiAgICAgICAgewogICAgICAgICAgaWYgKC0tX19zaXplID4gX19wb3MpCiAg ICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAg ICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Np emVdKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAg ICAgIHdoaWxlIChfX3NpemUtLSk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgZmluZF9sYXN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAg ICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3Np emUpCiAgICAgICAgewogICAgICAgICAgaWYgKC0tX19zaXplID4gX19wb3MpCiAgICAgICAgICAg IF9fc2l6ZSA9IF9fcG9zOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAg IGlmICghdHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3NpemVdLCBfX2MpKQogICAgICAgICAg ICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6 ZS0tKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNp emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikg Y29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAg c2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6 ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7 CgogICAgICBzaXplX3R5cGUgX19yc2l6ZT0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24pOwogICAg ICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3Ig PSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zdHIuZGF0YSgpLCBf X2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwog ICAgICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNp emVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICBzaXpl X3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBl IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5z aXplKCk7CiAgICAgIGlmIChfX3BvczEgPiBfX3NpemUgfHwgX19wb3MyID4gX19vc2l6ZSkKICAg ICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAg ICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvczEsIF9fbjEpOwogICAgICBz aXplX3R5cGUgX19yb3NpemUgPSBtaW4oX19vc2l6ZSAtIF9fcG9zMiwgX19uMik7CiAgICAgIHNp emVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX3Jvc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0 cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvczEsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3N0ci5kYXRhKCkgKyBfX3BvczIsIF9fbGVuKTsKICAgICAg aWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fcm9zaXplOwogICAgICByZXR1cm4g X19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OgogICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAgIHsK ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaW50IF9fciA9IHRy YWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zLCBfX3NpemUpOwogICAgICBpZiAoIV9f cikKICAgICAgICBfX3IgPSBfX3NpemUgLSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAg IHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVf dHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBl IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAg IF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNp emVfdHlwZSBfX29zaXplID0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwogICAgICBzaXplX3R5 cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBf X2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBl Ojpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3Ip CiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j Pjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9D aGFyVCogX19zLAogICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3QKICAgIHsKICAgICAg c2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXpl KQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsK CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gbWluKHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSwg X19uMik7CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24x KTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBp bnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19s ZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAg ICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1Ry YWl0cywgY2xhc3MgX0FsbG9jPgogICAgdm9pZAogICAgX1Nfc3RyaW5nX2NvcHkoY29uc3QgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsCiAgICAgICAgICAgICAg ICAgICBfQ2hhclQqIF9fYnVmLCB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBfX2J1ZnNpeikK ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7 CiAgICAgIHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIHNpemVfdHlw ZSBfX2J5dGVzID0gbWluKF9fc3Ryc2l6ZSwgX19idWZzaXogLSAxKTsKICAgICAgX1RyYWl0czo6 Y29weShfX2J1ZiwgX19zdHIuZGF0YSgpLCBfX2J5dGVzKTsKICAgICAgX19idWZbX19ieXRlc10g PSBfQ2hhclQoKTsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmlu ZzxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAgICBv cGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxh dGUKICAgIGJhc2ljX29zdHJlYW08Y2hhcj4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08 Y2hhcj4mLCBjb25zdCBzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJl YW08Y2hhcj4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmLCBjaGFy KTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAgICBnZXRsaW5l KGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz IGJhc2ljX3N0cmluZzx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJl YW08d2NoYXJfdD4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3Ry aW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+JgogICAg b3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPHdjaGFyX3Q+JiwgY29uc3Qgd3N0cmluZyYpOwogIGV4 dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIGdldGxpbmUoYmFz aWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcmLCB3Y2hhcl90KTsKICBleHRlcm4gdGVtcGxh dGUKICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08 d2NoYXJfdD4mLCB3c3RyaW5nJik7Cn0KIyA1OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2crKy12My9z dHJpbmciIDIgMwojIDMgIm1haW4uY3BwIiAyCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmludCBt YWluKCkKewogIGNvbnN0IGNoYXIqIGNfc3RyaW5nc1s1XSA9IHsgIjEiLCAiMiIsICIzIiwgIjQi LCAiNSIgfTsKICB2ZWN0b3I8c3RyaW5nPiBzdHJpbmdzKGNfc3RyaW5ncywgY19zdHJpbmdzICsg NSk7CiAgcmV0dXJuIDA7Cn0K