From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24097 invoked by alias); 19 Aug 2002 10:26:05 -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 24063 invoked by uid 71); 19 Aug 2002 10:26:03 -0000 Resent-Date: 19 Aug 2002 10:26:03 -0000 Resent-Message-ID: <20020819102603.24055.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, joele@sources.redhat.com, at@sources.redhat.com, uma@sources.redhat.com, dot@sources.redhat.com, com@sources.redhat.com Received: (qmail 23886 invoked by uid 61); 19 Aug 2002 10:25:13 -0000 Message-Id: <20020819102513.23885.qmail@sources.redhat.com> Date: Mon, 19 Aug 2002 04:02:00 -0000 From: joele@sources.redhat.com, at@sources.redhat.com, uma@sources.redhat.com, dot@sources.redhat.com, com@sources.redhat.com Reply-To: joele@sources.redhat.com, at@sources.redhat.com, uma@sources.redhat.com, dot@sources.redhat.com, com@sources.redhat.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/7631: gcc 2.95.3 crashes when compiling a file in the Palm OS emulator X-SW-Source: 2002-08/txt/msg00373.txt.bz2 List-Id: >Number: 7631 >Category: c++ >Synopsis: gcc 2.95.3 crashes when compiling a file in the Palm OS emulator >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Mon Aug 19 03:26:02 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Joel Estes >Release: unknown-1.0 >Organization: >Environment: UltraSparc II/Solaris 8 >Description: There is a problem compiling the ./SrcShared/MetaMemory.cpp file in the Palm OS Emulator. It gets the following error: gcc -DHAVE_DIRENT_H=1 -DSTDC_HEADERS=1 -DHAVE_SYS_ISA_DEFS_H=1 -DHAVE_FCNTL_H=1 -DHAVE_LIMITS_H=1 -DHAVE_STRINGS_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_UNISTD_H=1 -DHAVE_TYPE_SOCKLEN_T=1 -DHAVE_ALLOCA_H=1 -DHAVE_ALLOCA=1 -DHAVE_MKDIR=1 -DHAVE_MKSTEMP=1 -DHAVE_TEMPNAM=1 -DHAVE_GL=1 -DHAVE_GL_GLU_H=1 -DHAVE_LIBFLTK=1 -I. -I. -I./../SrcShared -I./../SrcShared/Hardware -I./../SrcShared/Hardware/TRG -I./../SrcShared/Palm/Device -I./../SrcShared/Palm/Platform -I./../SrcShared/Palm/Platform/Core/Hardware/IncsPrv -I./../SrcShared/Palm/Platform/Core/System/IncsPrv -I./../SrcShared/Palm/Platform/Incs -I./../SrcShared/Palm/Platform/Incs/Core -I./../SrcShared/Palm/Platform/Incs/Core/Hardware -I./../SrcShared/Palm/Platform/Incs/Core/System -I./../SrcShared/Palm/Platform/Incs/Core/UI -I./../SrcShared/Palm/Platform/Incs/Libraries -I./../SrcShared/Gzip -I./../SrcShared/jpeg -I./../SrcShared/omnithread -I./../SrcShared/Patches -I./../SrcShared/UAE -I./../SrcUnix -I./../SrcUnix/espws-2.0 --save-temps -DPLATFORM_UNIX=1 -D__PALMOS_TRAPS__=0 -DEMULATION_LEVEL=EMULATION_UNIX -O2 -DHAS_PROFILING=0 -DNDEBUG -fexceptions -Wall -Wno-multichar -Wno-unknown-pragmas -Wno-conversion -fpermissive -g -D_REENTRANT -DPthreadDraftVersion=10 -DPthreadSupportThreadPriority -I/usr/openwin/include -c ./../SrcShared/MetaMemory.cpp ./../SrcShared/MetaMemory.cpp: In function `static enum Errors::EAccessType MetaMemory::AllowForBugs(long unsigned int, long int, int, Errors::EAccessType)': ./../SrcShared/MetaMemory.cpp:435: Internal compiler error. ./../SrcShared/MetaMemory.cpp:435: Please submit a full bug report. ./../SrcShared/MetaMemory.cpp:435: See for instructions. make[1]: *** [MetaMemory.o] Error 1 make[1]: Leaving directory `/export/home/local1/pkgs_32/POSE/Emulator_Src_3.4/BuildUnix' make: *** [all-recursive] Error 1 (The compiler was built from source distribution using the plain ./configure command, with no special options, and I have used it to successfully build several dozen other packages under Solaris 8 ) Attached is the file MetaMemory.ii. >How-To-Repeat: The POSE 3.4 distribution is available from the following URL: http://www.palmos.com/dev/tools/emulator/emulator_archive.html It requires fltk, as well. >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="MetaMemory.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="MetaMemory.ii" IyAxICIuLy4uL1NyY1NoYXJlZC9NZXRhTWVtb3J5LmNwcCIKIAogCgoKCgoKCgoKCgoKIyAxICIu Li9TcmNTaGFyZWQvRW1Db21tb24uaCIgMQogCiAKCgoKCgoKCgoKCgoKCgogCgogCiAKIAoKIAog CiAKIAoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKCiMgMSAiLi4vU3JjU2hhcmVkL1N3aXRj aGVzLmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCgogCiAKCiMgMzQgIi4uL1NyY1No YXJlZC9Td2l0Y2hlcy5oIgoKCgkgCgkKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAxIDMgNAogCgoK CgoKCgojcHJhZ21hIGlkZW50CSJAKCMpaXNhX2RlZnMuaAkxLjIwCTk5LzA1LzA0IFNNSSIKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKIAoKCgoKCiMg MjY3ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9p bmNsdWRlL3N5cy9pc2FfZGVmcy5oIiAzIDQKCgogCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgog CgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCiAKCgoK IyAzNjYgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4z L2luY2x1ZGUvc3lzL2lzYV9kZWZzLmgiIDMgNAoKCiAKCgoKCgoKCgoKCgp9CgoKCiMgMzcgIi4u L1NyY1NoYXJlZC9Td2l0Y2hlcy5oIiAyCgoKIyA1MyAiLi4vU3JjU2hhcmVkL1N3aXRjaGVzLmgi CgoKIAoKIyA3MSAiLi4vU3JjU2hhcmVkL1N3aXRjaGVzLmgiCgoKCQoJCgkKCgkKCQkKCQoKCgoK CgoKCgoKIyAxMjAgIi4uL1NyY1NoYXJlZC9Td2l0Y2hlcy5oIgoKCQoJCgoKCiAKIAogCiAKCgoJ CgoKCgogCiAKIAoKCgoKCQoKCgogCiAKIAogCgoKCgogCiAKCgoKCiAKIAoKCgoKIAoKCgoKIAog CiAKIAoKCgoKIAoKCgoKCQoKCgogCiAKCgoJCgoKCgoKIAoKCgogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIyA1MCAiLi4vU3JjU2hhcmVkL0VtQ29tbW9uLmgiIDIKCgoKIAogCiAKCgoK CgoKCgojIDkzICIuLi9TcmNTaGFyZWQvRW1Db21tb24uaCIKCgogCiAKIAoKIyAxICIuLi9TcmNT aGFyZWQvRW1UeXBlcy5oIiAxCiAKIAoKCgoKCgoKCgoKCgoKCiAKIAogCgogCgoJdHlwZWRlZglz aWduZWQgY2hhcgkJCWludDg7Cgl0eXBlZGVmCXVuc2lnbmVkIGNoYXIJCXVpbnQ4OwoKCXR5cGVk ZWYgc2lnbmVkIHNob3J0CQlpbnQxNjsKCXR5cGVkZWYgdW5zaWduZWQgc2hvcnQJCXVpbnQxNjsK Cgl0eXBlZGVmIHNpZ25lZCBsb25nCQkJaW50MzI7Cgl0eXBlZGVmIHVuc2lnbmVkIGxvbmcJCXVp bnQzMjsKCgoKCgoJdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nCWludDY0OwoJdHlwZWRlZiB1bnNp Z25lZCBsb25nIGxvbmcJdWludDY0OwoKCnR5cGVkZWYgdWludDMyCQkJCWVtdXB0cjsKCnR5cGVk ZWYgaW50IAkJCQlCb29sOwoKdHlwZWRlZiBpbnQzMgkJCQlFcnJDb2RlOwp0eXBlZGVmIGludDMy CQkJCVN0ckNvZGU7Cgp0eXBlZGVmIHVpbnQ4CQkJCVNjYWxlVHlwZTsKdHlwZWRlZiBpbnQzMgkJ CQlSQU1TaXplVHlwZTsKdHlwZWRlZiBpbnQzMgkJCQlFbUNvb3JkOwoKCgoKCiAKCmVudW0gQ2xv c2VBY3Rpb25UeXBlCnsKCWtTYXZlQWx3YXlzLAoJa1NhdmVBc2ssCglrU2F2ZU5ldmVyCn07CgoK ZW51bSBMb2dnaW5nVHlwZQp7CglrTm9ybWFsTG9nZ2luZwk9IDB4MDEsCglrR3JlbWxpbkxvZ2dp bmcJPSAweDAyLAoJa0FsbExvZ2dpbmcJCT0ga05vcm1hbExvZ2dpbmcgfCBrR3JlbWxpbkxvZ2dp bmcKfTsKCgplbnVtIEVtUmVzZXRUeXBlCnsKCWtSZXNldFN5cywJCQkgCglrUmVzZXRTb2Z0LAkJ CSAKCWtSZXNldEhhcmQsCQkJIAoJa1Jlc2V0RGVidWcsCQkgCgoJa1Jlc2V0VHlwZU1hc2sJCT0g MHgwNywKCWtSZXNldEV4dE1hc2sJCT0gMHgwOCwKCWtSZXNldE5vRXh0CQkJPSAweDA4LAoKCWtS ZXNldFN5c05vRXh0CQk9IGtSZXNldE5vRXh0IHwga1Jlc2V0U3lzLAkgCglrUmVzZXRTb2Z0Tm9F eHQJCT0ga1Jlc2V0Tm9FeHQgfCBrUmVzZXRTb2Z0LAkgCglrUmVzZXRIYXJkTm9FeHQJCT0ga1Jl c2V0Tm9FeHQgfCBrUmVzZXRIYXJkLAkgCglrUmVzZXREZWJ1Z05vRXh0CT0ga1Jlc2V0Tm9FeHQg fCBrUmVzZXREZWJ1ZwkgCn07CgoKZW51bSBFbUVycm9ySGFuZGxpbmdPcHRpb24KewoJa1Nob3cs CglrQ29udGludWUsCglrUXVpdCwKCWtTd2l0Y2gKfTsKCgoKIyA5OSAiLi4vU3JjU2hhcmVkL0Vt Q29tbW9uLmgiIDIKCiAKCgogCiAKIAoKCgoKCgoJCiMgMSAiLi4vU3JjVW5peC9FbUNvbW1vblVu aXguaCIgMQogCiAKCgoKCgoKCgoKCgoKCgogCgogCiAKIAogCiAKIAoKCgoKIAoKIyAxICIuLi9T cmNTaGFyZWQvUGFsbS5oIiAxCiAKIAoKCgoKCgoKCgoKCgoKCiMgMSAiLi4vU3JjU2hhcmVkL1Bh bG1QYWNrLmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgcGFjaygyKQoKIyAx NyAiLi4vU3JjU2hhcmVkL1BhbG0uaCIgMgoKCiAKCgoKCiAKCgoKCgoKCgoKCgogCgogCiAKCgkK IyAxICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0J1aWxkRGVmaW5lcy5oIiAxCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgogCiAKCgoKCgoKCiAKIAogCiAKIAogCgoK CgogCgoKCgogCiAKCgoKCiAKIAoKCgoKCiAKIAoKCgoKCgoKCgogCiAKIAogCgoKCgoKIAogCiAK IAogCgoKCgoKIAogCgoKCgogCiAKIAogCgoKCgoKIAogCiAKCgoKCiAKIAoKCgoKIAogCgoKCgog CiAKCgoKCiAKCgoKCgogCiAKIAogCgoKCgoKCgoKCgojIDQxICIuLi9TcmNTaGFyZWQvUGFsbS5o IiAyCgoKCSAKCSAKCSAKCSAKCgkKCgoJCQoJCgoKCgoKCQojIDEgIi4uL1NyY1NoYXJlZC9QYWxt L1BsYXRmb3JtL0luY3MvUGFsbVR5cGVzLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK CiAKIAogCgogCiAKIAogCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9CdWls ZERlZmF1bHRzLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAoKIAogCiAKIAog CiAKCgogCgoKCgoKCgoKCgoKCgoKCQoKCgoKCgkKCgkKIyA3MyAiLi4vU3JjU2hhcmVkL1BhbG0v UGxhdGZvcm0vSW5jcy9CdWlsZERlZmF1bHRzLmgiCgoKCgoKCgogCgoKCgogCiAKCgoKCiAKCgoK CiAKCgkKCgogCgoJCgoKIAoKCQoKCgoJCgkgCgkgCgkgCgkKCgogCgoKICAgCgoKCgoKCgkgICAK ICAgCgojIDE0MCAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9CdWlsZERlZmF1bHRz LmgiCgoKCiAKCiAgIAoKCgkgICAKICAgCgoKCgoJCgoKIAoKCQoKCiAKCgkKCgoKCQoKCgoJCgoK CgkKCgoKIAogCiAKIAoKCgkKCgogCgoJCgoKIAoKCQoKCiAKIAoKCQoKCgoKCQoJIAoJIAoJIAoJ CgoKCgogCiAKIAoKCQoKCgoJCgoKCgkKCgoKCQoKCiAKCgkKCgogCgoJCgoKIAoKCQoKCiAKCgkg CgkKCgogCgoJIAoJCgoKIAoKCSAKCQoKCiAKCgkgCgkKCgogCgoJIAoJCgoKIAoKCQoKCiAKCgkK CgogCiAKIAoKCgoKCgoJCgoKCiAKIAogCiAKIAoKCiMgMzUgIi4uL1NyY1NoYXJlZC9QYWxtL1Bs YXRmb3JtL0luY3MvUGFsbVR5cGVzLmgiIDIKCgoKIAoKCgoKCgoKCgoKCgogCgoKIAoKCgoKCgoK IAp0eXBlZGVmIHNpZ25lZCBjaGFyCQlJbnQ4Owp0eXBlZGVmIHNpZ25lZCBzaG9ydAkJSW50MTY7 CQp0eXBlZGVmIHNpZ25lZCBsb25nCQlJbnQzMjsKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJVUlu dDg7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgIFVJbnQxNjsKdHlwZWRlZiB1bnNpZ25lZCBsb25n ICAgVUludDMyOwoKCgogCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIJQm9vbGVhbjsKCgp0eXBlZGVm IGNoYXIJCQkJQ2hhcjsKdHlwZWRlZiBVSW50MTYJCQkJV0NoYXI7CQkgCgp0eXBlZGVmIFVJbnQx NgkJCQlFcnI7Cgp0eXBlZGVmIFVJbnQzMgkJCQlMb2NhbElEOwkJIAoKdHlwZWRlZiBJbnQxNiAJ CQkJQ29vcmQ7CQkgCgoKdHlwZWRlZiB2b2lkICoJCQkJTWVtUHRyOwkJIAp0eXBlZGVmIHN0cnVj dCBfb3BhcXVlICpNZW1IYW5kbGU7CSAKCgoKdHlwZWRlZiBJbnQzMiAoKlByb2NQdHIpKCk7CgoK CiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgogCgoJCiMgMTMyICIuLi9TcmNTaGFyZWQvUGFsbS9Q bGF0Zm9ybS9JbmNzL1BhbG1UeXBlcy5oIgoKICAgICAgCgoKCgoJCgoKCgoKIAoKCgogCiAKCgoK IAoKCgoKCgoKIAoKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCQoKCgkJCgkKCgoKIAoKCgoKCgoK CgoKCgoKCiAKCgkKCQoJCgoJCgoKCgkKCgoKCgkKCgoKCgogCgoKCgoKCgojIDI0OCAiLi4vU3Jj U2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9QYWxtVHlwZXMuaCIKCgojIDI2NCAiLi4vU3JjU2hh cmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9QYWxtVHlwZXMuaCIKCgoKCgoKCgojIDI4MiAiLi4vU3Jj U2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9QYWxtVHlwZXMuaCIKCgoKIAoKCgoKCgoKIAoKCgoJ CgoKCgkKCgojIDU4ICIuLi9TcmNTaGFyZWQvUGFsbS5oIiAyCgogCiAKCgkgCgogCiAKCQkKIyAx ICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVtL0JpdG1hcC5oIiAx CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0v SW5jcy9Db3JlL0NvcmVUcmFwcy5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIAogCgogCgoKCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZv cm0vSW5jcy9Db3JlL0hhcmR3YXJlL002OEtId3IuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKIAoK CgogCgoKCgoKIAoKCnR5cGVkZWYgc3RydWN0IE02OEtFeGNUYWJsZVR5cGUgewoJVUludDMyCWlu aXRTdGFjazsJCQkJCQkJCSAKCVVJbnQzMglpbml0UEM7CQkJCQkJCQkJIAoJCglVSW50MzIJYnVz RXJyOwkJCQkJCQkJCSAKCVVJbnQzMglhZGRyZXNzRXJyOwkJCQkJCQkJIAoJVUludDMyCWlsbGVn YWxJbnN0cjsJCQkJCQkJIAoJVUludDMyCWRpdmlkZUJ5WmVybzsJCQkJCQkJIAoJVUludDMyCWNo azsJCQkJCQkJCQkJIAoJVUludDMyCXRyYXA7CQkJCQkJCQkJCSAKCVVJbnQzMglwcml2aWxlZ2U7 CQkJCQkJCQkgCglVSW50MzIJdHJhY2U7CQkJCQkJCQkJIAoJVUludDMyCWFUcmFwOwkJCQkJCQkJ CSAKCVVJbnQzMglmVHJhcDsJCQkJCQkJCQkgCglVSW50MzIJcmVzZXJ2ZWQxMjsJCQkJCQkJCSAK CVVJbnQzMgljb3Byb2M7CQkJCQkJCQkJIAoJVUludDMyCWZvcm1hdEVycjsJCQkJCQkJCSAKCVVJ bnQzMgl1bml0aWFsaXplZEludDsJCQkJCQkgCgkKCVVJbnQzMglyZXNlcnZlZFs4XTsJCQkJCQkJ IAoJCglVSW50MzIJc3B1cmlvdXNJbnQ7CQkJCQkJCSAKCVVJbnQzMglhdXRvVmVjMTsJCQkJCQkJ CSAKCVVJbnQzMglhdXRvVmVjMjsJCQkJCQkJCSAKCVVJbnQzMglhdXRvVmVjMzsJCQkJCQkJCSAK CVVJbnQzMglhdXRvVmVjNDsJCQkJCQkJCSAKCVVJbnQzMglhdXRvVmVjNTsJCQkJCQkJCSAKCVVJ bnQzMglhdXRvVmVjNjsJCQkJCQkJCSAKCVVJbnQzMglhdXRvVmVjNzsJCQkJCQkJCSAKCQoJVUlu dDMyCXRyYXBOWzE2XTsJCQkJCQkJCSAKCQoJVUludDMyCXVuYXNzaWduZWRbMTZdOwkJCQkJCSAK CX0gTTY4S0V4Y1RhYmxlVHlwZTsKIAogCgogCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBNNjhLUmVn c1R5cGUgewoJVUludDMyCWRbOF07CQkJCQkJCSAKCVVJbnQzMglhWzddOwkJCQkJCQkgCglVSW50 MzIJdXNwOwkJCQkJCQkgCglVSW50MzIJc3NwOwkJCQkJCQkgCglVSW50MzIJcGM7CQkJCQkJCSAK CVVJbnQxNglzcjsJCQkJCQkJIAp9IE02OEtSZWdzVHlwZTsKCgoKIAogCgoKCiAKCgoKIAoKCiAK CgoKIAoKCgoKCgoKCgojIDU3ICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUv Q29yZVRyYXBzLmgiIDIKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAoKCgoKCgog CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCiAKCiAKCgoKCiAKCgoKCgoKCiAKCgoKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgoKIAoKCiAKIAoKCgoKIAoKCgoKIAoKCgoKCgogCgoKCgoKCiAKCgoKIAoKCgoK IAoKCiAKCgoKCgogCgoKCiAKCgoKCiAKCiAKCgogCgoKIAoKCiAKCgoKCgkJCiAKIAogCgogCiAK IAoJCgoKCgoKCiAKIAogCiAKCiAKCgogCgoKIAoKCiAKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoK CgoKCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKCiAKIAoKCiAKCgoKIAoKCiAKCgoKCgoKCgoKCgoK CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAK CgoKCiAKCgogCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCiAKCgogCgoKIAogCiAKCgoKCgoKCgoK CQoKCiMgMjQgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vQml0 bWFwLmgiIDIKCgojIDEgIi4uL1NyY1NoYXJlZC9QYWxtT3B0RXJyb3JDaGVja0xldmVsLmgiIDEK IAogCgoKCgoKCgoKCgoKCgoKCgoJCgkJCgkJCgkKCgkKCQkKCQoKCiMgMjYgIi4uL1NyY1NoYXJl ZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vQml0bWFwLmgiIDIKCgoKIAogCiAKCiAK CgoKCiAKdHlwZWRlZiBlbnVtIHsKCUJpdG1hcENvbXByZXNzaW9uVHlwZVNjYW5MaW5lID0gMCwK CUJpdG1hcENvbXByZXNzaW9uVHlwZVJMRSwKCQoJQml0bWFwQ29tcHJlc3Npb25UeXBlTm9uZSA9 IDB4RkYKfSBCaXRtYXBDb21wcmVzc2lvblR5cGU7CgoKIAoKdHlwZWRlZiBzdHJ1Y3QgQml0bWFw RmxhZ3NUeXBlIHsKCVVJbnQxNiBjb21wcmVzc2VkOjE7ICAJCQkgCglVSW50MTYgaGFzQ29sb3JU YWJsZToxOwkJCSAKCVVJbnQxNiBoYXNUcmFuc3BhcmVuY3k6MTsJCSAKCVVJbnQxNiBpbmRpcmVj dDoxOwkJCQkgCglVSW50MTYgZm9yU2NyZWVuOjE7CQkJCSAKCVVJbnQxNiByZXNlcnZlZDoxMTsK fSBCaXRtYXBGbGFnc1R5cGU7CgogCnR5cGVkZWYgc3RydWN0IEJpdG1hcFR5cGUgewoJSW50MTYg IAkJCQl3aWR0aDsKCUludDE2ICAJCQkJaGVpZ2h0OwoJVUludDE2ICAJCQkJcm93Qnl0ZXM7CglC aXRtYXBGbGFnc1R5cGUJZmxhZ3M7CglVSW50OAkJCQkJcGl4ZWxTaXplOwkJCSAKCVVJbnQ4CQkJ CQl2ZXJzaW9uOwkJCQkgCglVSW50MTYJIAkJCW5leHREZXB0aE9mZnNldDsJIAoJCQkJCQkJCQkJ CQkJIAoJVUludDgJCQkJCXRyYW5zcGFyZW50SW5kZXg7CSAKCQkJCQkJCQkJCQkJCSAKCVVJbnQ4 CQkJCQljb21wcmVzc2lvblR5cGU7CSAKCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkKCVVJ bnQxNgkgCQkJcmVzZXJ2ZWQ7CQkJIAoJCgkgCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgkJCQkJCQkJ CQkJCQkgCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCn0gQml0bWFwVHlwZTsKCnR5cGVkZWYgQml0 bWFwVHlwZSAqQml0bWFwUHRyOwoKCiAKIAogCgp0eXBlZGVmIHN0cnVjdCBSR0JDb2xvclR5cGUg ewoJVUludDgJaW5kZXg7CQkJCQkJCQkJIAoJVUludDgJcjsJCQkJCQkJCQkJCSAKCVVJbnQ4CWc7 CQkJCQkJCQkJCQkgCglVSW50OAliOwkJCQkJCQkJCQkJIAp9IFJHQkNvbG9yVHlwZTsKCgp0eXBl ZGVmIHN0cnVjdCBDb2xvclRhYmxlVHlwZSB7CgkJCQkJCQkJCQkJCQkJIAoJVUludDE2CQkJCQkJ bnVtRW50cmllczsJCSAKCSAKCQkJCQkJCQkJCQkJCQkgCn0gQ29sb3JUYWJsZVR5cGU7CgoKIAoK CiMgMTQ5ICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVtL0JpdG1h cC5oIgoKCgojIDY2ICIuLi9TcmNTaGFyZWQvUGFsbS5oIiAyCgoJCQojIDEgIi4uL1NyY1NoYXJl ZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vQ2hhckF0dHIuaCIgMQogCgoKCgoKCgoK CgoKCgoKCgoKCiAKCgoKIAogCiAKIAogCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIAogCiAK CiAKCiMgNzQgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vQ2hh ckF0dHIuaCIKCgoKCgoKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgojIDEyNiAiLi4vU3JjU2hhcmVk L1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9DaGFyQXR0ci5oIgoKCgoKIyA2NyAiLi4v U3JjU2hhcmVkL1BhbG0uaCIgMgoKCQkKIyAxICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9J bmNzL0NvcmUvU3lzdGVtL0NoYXJzLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiAKIAogCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgogCgoKCiAKCgoKCiAKCgoKCQkJCQkJCQkJCQkJCQkJIAogCgoJCQkJCQkJCQkJCQkJCQkg CgkJCQkJCQkJCQkJCQkJCSAKCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoKCgoK CiAKIAogCgoKCgoKCgoKCgoJCQkJCQkJCQkJCQkJCQkJIAoKCgoKCgogCiAKIAogCiAKIAoKCgog CgoKCiAKCgoKIAoKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKCgojIDM1MCAiLi4vU3JjU2hhcmVk L1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9DaGFycy5oIgoKCiMgMzYxICIuLi9TcmNT aGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVtL0NoYXJzLmgiCgogCmVudW0gc3lt Ym9sQ2hhcnMgewoJc3ltYm9sTGVmdEFycm93ID0gMywKCXN5bWJvbFJpZ2h0QXJyb3csCglzeW1i b2xVcEFycm93LAoJc3ltYm9sRG93bkFycm93LAoJc3ltYm9sU21hbGxEb3duQXJyb3csCglzeW1i b2xTbWFsbFVwQXJyb3csCglzeW1ib2xNZW1vID0gOSwKCXN5bWJvbEhlbHAsCglzeW1ib2xOb3Rl LAoJc3ltYm9sTm90ZVNlbGVjdGVkLAoJc3ltYm9sQ2Fwc0xvY2ssCglzeW1ib2xOdW1Mb2NrLAoJ c3ltYm9sU2hpZnRVcHBlciwKCXN5bWJvbFNoaWZ0UHVuYywKCXN5bWJvbFNoaWZ0RXh0LAoJc3lt Ym9sU2hpZnROb25lLAoJc3ltYm9sTm9UaW1lLAoJc3ltYm9sQWxhcm0sCglzeW1ib2xSZXBlYXQs CglzeW1ib2xDaGVja01hcmssCgkgCgkgCglzeW1ib2xEaWFtb25kQ2hyLAoJc3ltYm9sQ2x1YkNo ciwKCXN5bWJvbEhlYXJ0Q2hyLAoJc3ltYm9sU3BhZGVDaHIKCX07CgogCmVudW0gc3ltYm9sN0No YXJzIHsKCXN5bWJvbDdTY3JvbGxVcCA9IDEsCglzeW1ib2w3U2Nyb2xsRG93biwKCXN5bWJvbDdT Y3JvbGxVcERpc2FibGVkLAoJc3ltYm9sN1Njcm9sbERvd25EaXNhYmxlZAoJfTsKCiAKZW51bSBz eW1ib2wxMUNoYXJzIHsKCXN5bWJvbENoZWNrYm94T2ZmID0gMCwKCXN5bWJvbENoZWNrYm94T24s CglzeW1ib2wxMUxlZnRBcnJvdywKCXN5bWJvbDExUmlnaHRBcnJvdywKCXN5bWJvbDExTGVmdEFy cm93RGlzYWJsZWQsCQkgCglzeW1ib2wxMVJpZ2h0QXJyb3dEaXNhYmxlZAkJIAoJfTsKCgoKIyA2 OCAiLi4vU3JjU2hhcmVkL1BhbG0uaCIgMgoKIAogCgkJCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0v UGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9DcmMuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoK IAoKCgoKCgogCgoKCgoKCmV4dGVybiAiQyIgewoKCgoJCgogCiAKIAoKCiAKIAogCiAKVUludDE2 CQlDcmMxNkNhbGNCbG9jayhjb25zdCB2b2lkICpidWZQLCBVSW50MTYgY291bnQsIFVJbnQxNiBj cmMpCgkJCQkJCQkgIDsKClVJbnQxNgkJQ3JjMTZDYWxjQmlnQmxvY2sodm9pZCAqYnVmUCwgVUlu dDMyIGNvdW50LCBVSW50MTYgY3JjKTsKCgoKfQoKCgoKCiMgNzEgIi4uL1NyY1NoYXJlZC9QYWxt LmgiIDIKCgkJCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3Rl bS9EYXRhTWdyLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKIyAxICIuLi9TcmNTaGFyZWQv UGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVtL0Vycm9yQmFzZS5oIiAxCiAKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc2V0 am1wLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc2V0 am1wLmgJMS4zNgk5OS8wOC8xMCBTTUkiCQoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL2lzby9zZXRqbXBfaXNvLmgiIDEgMyA0 CiAKIAoKIAogCiAKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc2V0 am1wX2lzby5oCTEuMQk5OS8wOC8wOSBTTUkiCiAKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0 dXJlX3Rlc3RzLmgiIDEgMyA0CiAKCgoKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpZmVh dHVyZV90ZXN0cy5oCTEuMTgJOTkvMDcvMjYgU01JIgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoK CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgp9CgoKCiMgMzEg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1 ZGUvaXNvL3NldGptcF9pc28uaCIgMiAzIDQKCgoKZXh0ZXJuICJDIiB7CgoKCgogCgoKCgojIDU0 ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNs dWRlL2lzby9zZXRqbXBfaXNvLmgiIDMgNAoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGludAlqbXBf YnVmWzEyIF07CgoKCgoKCgoKCmV4dGVybiBpbnQgc2V0am1wKGptcF9idWYpOwojcHJhZ21hIHVu a25vd25fY29udHJvbF9mbG93KHNldGptcCkKZXh0ZXJuIGludCBfc2V0am1wKGptcF9idWYpOwoj cHJhZ21hIHVua25vd25fY29udHJvbF9mbG93KF9zZXRqbXApCmV4dGVybiB2b2lkIGxvbmdqbXAo am1wX2J1ZiwgaW50KTsKZXh0ZXJuIHZvaWQgX2xvbmdqbXAoam1wX2J1ZiwgaW50KTsKCiMgOTUg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1 ZGUvaXNvL3NldGptcF9pc28uaCIgMyA0CgoKCgoKCgoKCgoKCgoKCgoKfQoKCgojIDE5ICIvdXNy L2luY2x1ZGUvc2V0am1wLmgiIDIgMyA0CgoKIAoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKCgoK IAoKCgoKdHlwZWRlZiBpbnQgc2lnam1wX2J1ZlsxOSBdOwoKCmV4dGVybiBpbnQgc2lnc2V0am1w KHNpZ2ptcF9idWYsIGludCk7CiNwcmFnbWEgdW5rbm93bl9jb250cm9sX2Zsb3coc2lnc2V0am1w KQpleHRlcm4gdm9pZCBzaWdsb25nam1wKHNpZ2ptcF9idWYsIGludCk7CgoKIyA2MyAiL3Vzci9p bmNsdWRlL3NldGptcC5oIiAzIDQKCgoKfQoKCgojIDEwMyAiLi4vU3JjU2hhcmVkL1BhbG0vUGxh dGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9FcnJvckJhc2UuaCIgMgoKCgogCgoKCiAKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK CgoKCgoKCgoKCgkKCgkKCgoKCQogCnR5cGVkZWYgc3RydWN0IEVyckV4Y2VwdGlvblR5cGUgewoJ c3RydWN0IEVyckV4Y2VwdGlvblR5cGUqCW5leHRQOwkgCglqbXBfYnVmIAkJCQkJCXN0YXRlOwkg CglJbnQzMgkJCQkJCQkJZXJyOwkJIAoJfSBFcnJFeGNlcHRpb25UeXBlOwp0eXBlZGVmIEVyckV4 Y2VwdGlvblR5cGUgKkVyckV4Y2VwdGlvblB0cjsKCgogCgoKCgoKCgoKCQkKIAogCiAKIAogCiAK CgoKCgoKCQkJCgkJCQoKCgoKCgogCgoKIyAyODkgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3Jt L0luY3MvQ29yZS9TeXN0ZW0vRXJyb3JCYXNlLmgiCgoKCgoKCiMgMjMgIi4uL1NyY1NoYXJlZC9Q YWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vRGF0YU1nci5oIiAyCgoKIAojIDEgIi4uL1Ny Y1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vTWVtb3J5TWdyLmgiIDEKIAoK CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgp0eXBlZGVmIGVudW0gewltZW1JRFB0ciwgbWVt SURIYW5kbGUgfSBMb2NhbElES2luZDsKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCiMgMzM1ICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNz L0NvcmUvU3lzdGVtL01lbW9yeU1nci5oIgoKCgoKCgoKIyAyNiAiLi4vU3JjU2hhcmVkL1BhbG0v UGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9EYXRhTWdyLmgiIDIKCgoKdHlwZWRlZiBVSW50MzIJ RG1SZXNUeXBlOwp0eXBlZGVmIFVJbnQxNglEbVJlc0lEOwoKIAoKCgoKCgoKCgoKCgoKIAogCiAK IAogCiAKIAogCiAKIAoKCgoKCgogCgoKCgoKIAoKCgogCgoKCgogCiAKIAogCiAKIAoKCgoJCQkJ CQkJCQkJCQkJCQkgCgoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCgkJCQkJCQkJ CQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJ CSAKCgkJCQkJCQkJCQkJCQkJCSAKCgoKCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJ IAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCgkJCQkJCQkJCQkJCQkJCSAKCQkJ CQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgoKCgogCgojIDEyMyAiLi4vU3JjU2hhcmVk L1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9EYXRhTWdyLmgiCgkJCQkJCQkJCQkJCQkK IAoKCgoKIAoKCgoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJ CQkJIAoKCQkJCQkJCQkJCQkJCQkJIAoKCgogCgoKCgoKCgoKCiAKdHlwZWRlZgl2b2lkICoJCQkJ CQlEbU9wZW5SZWY7CgoKIAoKCgp0eXBlZGVmIHN0cnVjdCB7CglVSW50MzIJCWluZm9bOF07Cgl9 IERtU2VhcmNoU3RhdGVUeXBlOwp0eXBlZGVmIERtU2VhcmNoU3RhdGVUeXBlKglEbVNlYXJjaFN0 YXRlUHRyOwkKCgoKIAoKCnR5cGVkZWYgc3RydWN0IHsKCVVJbnQ4CQkJYXR0cmlidXRlczsJCQkJ CQkJIAoJVUludDgJCQl1bmlxdWVJRFszXTsJCQkJCQkgCgl9IFNvcnRSZWNvcmRJbmZvVHlwZTsK CnR5cGVkZWYgU29ydFJlY29yZEluZm9UeXBlICpTb3J0UmVjb3JkSW5mb1B0cjsKCnR5cGVkZWYg SW50MTYgRG1Db21wYXJGICh2b2lkICosIHZvaWQgKiwgSW50MTYgb3RoZXIsIFNvcnRSZWNvcmRJ bmZvUHRyLCAKCQkJCQkJCQlTb3J0UmVjb3JkSW5mb1B0ciwgTWVtSGFuZGxlIGFwcEluZm9IKTsK CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCiMgNTM4ICIu Li9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVtL0RhdGFNZ3IuaCIKCgoK IyA3MiAiLi4vU3JjU2hhcmVkL1BhbG0uaCIgMgoKCQkKIyAxICIuLi9TcmNTaGFyZWQvUGFsbS9Q bGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVtL0RhdGVUaW1lLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgp0eXBlZGVmIGVudW0gCgl7Cgl0ZkNvbG9uLAoJdGZDb2xvbkFNUE0sCQkJIAoJdGZDb2xv bjI0aCwJCQkJIAoJdGZEb3QsCgl0ZkRvdEFNUE0sCQkJCSAKCXRmRG90MjRoLAkJCQkgCgl0Zkhv dXJzQU1QTSwJCQkgCgl0ZkhvdXJzMjRoLAkJCQkgCgl0ZkNvbW1hMjRoCQkJCSAKCX0gVGltZUZv cm1hdFR5cGU7CgoKdHlwZWRlZiBlbnVtIHsKCWRzTm9uZSwJCQkJCSAKCWRzVVNBLAkJCQkJIAoJ ZHNBdXN0cmFsaWEsCQkJIAoJZHNXZXN0ZXJuRXVyb3BlYW4sCSAKCWRzTWlkZGxlRXVyb3BlYW4s CQkgCglkc0Vhc3Rlcm5FdXJvcGVhbiwJIAoJZHNHcmVhdEJyaXRhaW4sCQkgCglkc1J1bWFuaWEs CQkJCSAKCWRzVHVya2V5LAkJCQkgCglkc0F1c3RyYWxpYVNoaWZ0ZWQJIAoJfSBEYXlsaWdodFNh dmluZ3NUeXBlczsKCgogCgoKCgp0eXBlZGVmIGVudW0gewoJZGZNRFlXaXRoU2xhc2hlcywJCSAK CWRmRE1ZV2l0aFNsYXNoZXMsCQkgCglkZkRNWVdpdGhEb3RzLAkJCSAKCWRmRE1ZV2l0aERhc2hl cywJCSAKCWRmWU1EV2l0aFNsYXNoZXMsCQkgCglkZllNRFdpdGhEb3RzLAkJCSAKCWRmWU1EV2l0 aERhc2hlcywJCSAKCglkZk1EWUxvbmdXaXRoQ29tbWEsCSAKCWRmRE1ZTG9uZywJCQkJIAoJZGZE TVlMb25nV2l0aERvdCwJCSAKCWRmRE1ZTG9uZ05vRGF5LAkJIAoJZGZETVlMb25nV2l0aENvbW1h LAkgCglkZllNRExvbmdXaXRoRG90LAkJIAoJZGZZTURMb25nV2l0aFNwYWNlLAkgCgoJZGZNWU1l ZCwJCQkJCSAKCWRmTVlNZWROb1Bvc3QJCQkgCgl9IERhdGVGb3JtYXRUeXBlOwoKdHlwZWRlZiBz dHJ1Y3QgewoJSW50MTYgc2Vjb25kOwoJSW50MTYgbWludXRlOwoJSW50MTYgaG91cjsKCUludDE2 IGRheTsKCUludDE2IG1vbnRoOwoJSW50MTYgeWVhcjsKCUludDE2IHdlZWtEYXk7CQkgCgl9IERh dGVUaW1lVHlwZTsKCQp0eXBlZGVmIERhdGVUaW1lVHlwZSAqRGF0ZVRpbWVQdHI7CgoKIAogCiAK dHlwZWRlZiBzdHJ1Y3QgewoJVUludDggICAgICAgIGhvdXJzOwoJVUludDggICAgICAgIG1pbnV0 ZXM7Cn0gVGltZVR5cGU7Cgp0eXBlZGVmIFRpbWVUeXBlICpUaW1lUHRyOwoKCgoKIAogCiAKdHlw ZWRlZiBzdHJ1Y3QgewoJVUludDE2IHllYXIgIDo3OyAgICAgICAgICAgICAgICAgICAgCglVSW50 MTYgbW9udGggOjQ7IAoJVUludDE2IGRheSAgIDo1Owp9IERhdGVUeXBlOwoKdHlwZWRlZiBEYXRl VHlwZSAqRGF0ZVB0cjsKCgogCgoKCiAKIAoKCgoKCgoKCgoKCgoKIAogCgoKCgoKIAoKCgoKCgoK CgoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiAKdHlwZWRlZiBlbnVtIHsKCWRvbTFzdFN1 biwgZG9tMXN0TW9uLCBkb20xc3RUdWUsIGRvbTFzdFdlbiwgZG9tMXN0VGh1LCBkb20xc3RGcmks IGRvbTFzdFNhdCwKCWRvbTJuZFN1biwgZG9tMm5kTW9uLCBkb20ybmRUdWUsIGRvbTJuZFdlbiwg ZG9tMm5kVGh1LCBkb20ybmRGcmksIGRvbTJuZFNhdCwKCWRvbTNyZFN1biwgZG9tM3JkTW9uLCBk b20zcmRUdWUsIGRvbTNyZFdlbiwgZG9tM3JkVGh1LCBkb20zcmRGcmksIGRvbTNyZFNhdCwKCWRv bTR0aFN1biwgZG9tNHRoTW9uLCBkb200dGhUdWUsIGRvbTR0aFdlbiwgZG9tNHRoVGh1LCBkb200 dGhGcmksIGRvbTR0aFNhdCwKCWRvbUxhc3RTdW4sIGRvbUxhc3RNb24sIGRvbUxhc3RUdWUsIGRv bUxhc3RXZW4sIGRvbUxhc3RUaHUsIGRvbUxhc3RGcmksIAoJZG9tTGFzdFNhdAoJfSBEYXlPZldl ZWtUeXBlOwoKIAoKCmVudW0gewoJZGF0ZVRlbXBsYXRlRGF5TnVtID0gJzAnLAoJZGF0ZVRlbXBs YXRlRE9XTmFtZSwKCWRhdGVUZW1wbGF0ZU1vbnRoTmFtZSwKCWRhdGVUZW1wbGF0ZU1vbnRoTnVt LAoJZGF0ZVRlbXBsYXRlWWVhck51bQp9OwoKCgoKCgogCiAKIAoKIAogCiAKIAogCiAKIAogCgog CiAKIAojIDI4MCAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9E YXRlVGltZS5oIgoKCgoKIyA3MyAiLi4vU3JjU2hhcmVkL1BhbG0uaCIgMgoKIAogCgkJCiAKIAog CgkJCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9GZWF0 dXJlTWdyLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKIyA4 NyAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9GZWF0dXJlTWdy LmgiCgoKCiMgODAgIi4uL1NyY1NoYXJlZC9QYWxtLmgiIDIKCiAKIAoJCQojIDEgIi4uL1NyY1No YXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vRm9udC5oIiAxCiAKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIAoKCiAKCgp0eXBlZGVmIHN0cnVjdCB7CglJbnQ4CQlvZmZzZXQ7CglJ bnQ4CQl3aWR0aDsKfSBGb250Q2hhckluZm9UeXBlLCAqIEZvbnRDaGFySW5mb1B0cjsKCnR5cGVk ZWYgc3RydWN0IHsKCUludDE2IGZvbnRUeXBlOyAJCQkgCglJbnQxNiBmaXJzdENoYXI7IAkJCSAK CUludDE2IGxhc3RDaGFyOyAJCQkgCglJbnQxNiBtYXhXaWR0aDsgCQkJIAoJSW50MTYga2Vybk1h eDsgCQkJIAoJSW50MTYgbkRlc2NlbnQ7IAkJCSAKCUludDE2IGZSZWN0V2lkdGg7IAkJIAoJSW50 MTYgZlJlY3RIZWlnaHQ7IAkJIAoJSW50MTYgb3dUTG9jOyAJCQkJIAoJSW50MTYgYXNjZW50OyAJ CQkJIAoJSW50MTYgZGVzY2VudDsgCQkJIAoJSW50MTYgbGVhZGluZzsgCQkJIAoJSW50MTYgcm93 V29yZHM7IAkJCSAKfSBGb250VHlwZTsKCnR5cGVkZWYgRm9udFR5cGUgKkZvbnRQdHI7Cgp0eXBl ZGVmIEZvbnRQdHIgKkZvbnRUYWJsZVB0cjsKCmVudW0gZm9udElEIHsgCglzdGRGb250ID0gMHgw MCwJCQkJCSAKCWJvbGRGb250LCAJCQkJCQkJIAoJbGFyZ2VGb250LAkJCQkJCQkgCglzeW1ib2xG b250LAkJCQkJCQkgCglzeW1ib2wxMUZvbnQsIAkJCQkJCSAKCXN5bWJvbDdGb250LAkJCQkJCSAK CWxlZEZvbnQsCQkJCQkJCQkgCglsYXJnZUJvbGRGb250LAkJCQkJCSAKCWZudEFwcEZvbnRDdXN0 b21CYXNlID0gMHg4MAkgCn07Cgp0eXBlZGVmIGVudW0gZm9udElEIEZvbnRJRDsKCgoKCgoKCiAK IAogCiAKIAoKIyAxNDcgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0 ZW0vRm9udC5oIgoKCgoKIyA4MyAiLi4vU3JjU2hhcmVkL1BhbG0uaCIgMgoKIAogCiAKCQkKIyAx ICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVtL0ludGxNZ3IuaCIg MQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKCgoJCgoKCQkKCQoKCiAKCgoKIAoK CgogCgoKCgoKCQoKCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK IyAxMTEgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vSW50bE1n ci5oIgoKCgojIDg3ICIuLi9TcmNTaGFyZWQvUGFsbS5oIiAyCgogCgkJCiMgMSAiLi4vU3JjU2hh cmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9LZXlNZ3IuaCIgMQogCgoKCgoKCgoK CgoKCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiMgNzMgIi4uL1NyY1No YXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vS2V5TWdyLmgiCgoKCQoKIyA4OSAi Li4vU3JjU2hhcmVkL1BhbG0uaCIgMgoKCQkKIyAxICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9y bS9JbmNzL0NvcmUvU3lzdGVtL0xvY2FsaXplLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoK CiAKIAp0eXBlZGVmIGVudW0gewoJbmZDb21tYVBlcmlvZCwKCW5mUGVyaW9kQ29tbWEsCgluZlNw YWNlQ29tbWEsCgluZkFwb3N0cm9waGVQZXJpb2QsCgluZkFwb3N0cm9waGVDb21tYQoJfSBOdW1i ZXJGb3JtYXRUeXBlOwoKCQoKIyA1MSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9D b3JlL1N5c3RlbS9Mb2NhbGl6ZS5oIgoKCgoKIyA5MCAiLi4vU3JjU2hhcmVkL1BhbG0uaCIgMgoK CQkKIAoJCQojIDEgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0v TmV0Qml0VXRpbHMuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi4uL1Ny Y1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vTmV0TWdyLmgiIDEKIAoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0lu Y3MvTGlicmFyaWVzL0xpYlRyYXBzLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgogCiAKCiAKCgoKCgoK IAogCiAKIAoKdHlwZWRlZiBlbnVtIHsKCXN5c0xpYlRyYXBOYW1lID0gMHhBODAwICwKCXN5c0xp YlRyYXBPcGVuLAoJc3lzTGliVHJhcENsb3NlLAoJc3lzTGliVHJhcFNsZWVwLAoJc3lzTGliVHJh cFdha2UsCglzeXNMaWJUcmFwQ3VzdG9tCgl9IFN5c0xpYlRyYXBOdW1iZXI7CgoKCgojIDI5ICIu Li9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVtL05ldE1nci5oIiAyCgoj IDEgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vU3lzRXZlbnQu aCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIuLi9TcmNTaGFyZWQv UGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVtL1JlY3QuaCIgMQogCgoKCgoKCgoKCgoKCgoK CgoKCgoKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgQWJzUmVjdFR5cGUgewogIENvb3JkIGxlZnQ7CiAg Q29vcmQgdG9wOwogIENvb3JkIHJpZ2h0OwogIENvb3JkIGJvdHRvbTsKfSBBYnNSZWN0VHlwZTsK Cgp0eXBlZGVmIHN0cnVjdCBQb2ludFR5cGUgewogIENvb3JkIHg7CiAgQ29vcmQgeTsKfSBQb2lu dFR5cGU7CgoKdHlwZWRlZiBzdHJ1Y3QgUmVjdGFuZ2xlVHlwZSB7CiAgUG9pbnRUeXBlICB0b3BM ZWZ0OwogIFBvaW50VHlwZSAgZXh0ZW50Owp9IFJlY3RhbmdsZVR5cGU7Cgp0eXBlZGVmIFJlY3Rh bmdsZVR5cGUgKlJlY3RhbmdsZVB0cjsKCgoKIyA4MCAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZv cm0vSW5jcy9Db3JlL1N5c3RlbS9SZWN0LmgiCgoKCgojIDM0ICIuLi9TcmNTaGFyZWQvUGFsbS9Q bGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVtL1N5c0V2ZW50LmgiIDIKCiMgMSAiLi4vU3JjU2hhcmVk L1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9XaW5kb3cuaCIgMQogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAp0eXBlZGVmIGVudW0geyB3aW5VcCA9IDAsIHdpbkRv d24sIHdpbkxlZnQsIHdpblJpZ2h0IH0gV2luRGlyZWN0aW9uVHlwZTsKCgogCnR5cGVkZWYgZW51 bSB7IHNjcmVlbkZvcm1hdCA9IDAsIGdlbmVyaWNGb3JtYXQgfSBXaW5kb3dGb3JtYXRUeXBlOwoK CiAKdHlwZWRlZiBlbnVtIHt3aW5Mb2NrQ29weSwgd2luTG9ja0VyYXNlLCB3aW5Mb2NrRG9udENh cmV9IFdpbkxvY2tJbml0VHlwZTsKCgogCnR5cGVkZWYgZW51bSB7Cgl3aW5TY3JlZW5Nb2RlR2V0 RGVmYXVsdHMsCgl3aW5TY3JlZW5Nb2RlR2V0LAoJd2luU2NyZWVuTW9kZVNldFRvRGVmYXVsdHMs Cgl3aW5TY3JlZW5Nb2RlU2V0LAoJd2luU2NyZWVuTW9kZUdldFN1cHBvcnRlZERlcHRocywKCXdp blNjcmVlbk1vZGVHZXRTdXBwb3J0c0NvbG9yCn0gV2luU2NyZWVuTW9kZU9wZXJhdGlvbjsKCiAK CgoKCiAKdHlwZWRlZiBlbnVtIHt3aW5QYWludCwgd2luRXJhc2UsIHdpbk1hc2ssIHdpbkludmVy dCwgd2luT3ZlcmxheSwgd2luUGFpbnRJbnZlcnNlLCB3aW5Td2FwfSBXaW5EcmF3T3BlcmF0aW9u OwoKCnR5cGVkZWYgZW51bSB7IGJsYWNrUGF0dGVybiwgd2hpdGVQYXR0ZXJuLCBncmF5UGF0dGVy biwgY3VzdG9tUGF0dGVybiB9IFBhdHRlcm5UeXBlOwoKCgoKCiAKIAogCnR5cGVkZWYgZW51bSB7 IG5vVW5kZXJsaW5lLCBncmF5VW5kZXJsaW5lLCBzb2xpZFVuZGVybGluZSwgY29sb3JVbmRlcmxp bmUgfSBVbmRlcmxpbmVNb2RlVHlwZTsKCgoKCnR5cGVkZWYgVUludDggSW5kZXhlZENvbG9yVHlw ZTsJCQkJIAoKdHlwZWRlZiBVSW50OCBDdXN0b21QYXR0ZXJuVHlwZSBbOF07CQkgCgogCgoKIAog CiAKCgp0eXBlZGVmIHN0cnVjdCBEcmF3U3RhdGVUeXBlIHsKCVdpbkRyYXdPcGVyYXRpb24JdHJh bnNmZXJNb2RlOwoJUGF0dGVyblR5cGUJCQlwYXR0ZXJuOwoJVW5kZXJsaW5lTW9kZVR5cGUJdW5k ZXJsaW5lTW9kZTsKCUZvbnRJRAkJCQlmb250SWQ7CglGb250UHRyCQkJCWZvbnQ7CglDdXN0b21Q YXR0ZXJuVHlwZQlwYXR0ZXJuRGF0YTsKCUluZGV4ZWRDb2xvclR5cGUJZm9yZUNvbG9yOwoJSW5k ZXhlZENvbG9yVHlwZQliYWNrQ29sb3I7CglJbmRleGVkQ29sb3JUeXBlCXRleHRDb2xvcjsKCVVJ bnQ4CQkJCQlyZXNlcnZlZDsJCn0gRHJhd1N0YXRlVHlwZTsKCgoKCgoKCiAKIAogCgoKIAoKdHlw ZWRlZiB1bmlvbiBGcmFtZUJpdHNUeXBlIHsKCXN0cnVjdCB7CgkJVUludDE2IGNvcm5lckRpYW0J CTogODsJCQkJIAoJCVVJbnQxNiByZXNlcnZlZF8zCQk6IDM7IAoJCVVJbnQxNiB0aHJlZUQJCQk6 IDE7CQkJCSAKCQlVSW50MTYgc2hhZG93V2lkdGgJOiAyOwkJCQkgCgkJVUludDE2IHdpZHRoCQkJ OiAyOwkJCQkgCgl9IGJpdHM7CglVSW50MTYgd29yZDsJCQkJCQkJCQkgCn0gRnJhbWVCaXRzVHlw ZTsKCnR5cGVkZWYgVUludDE2IEZyYW1lVHlwZTsKCiAKCgoKCgoKCgoKCgoKCgogCgp0eXBlZGVm IHN0cnVjdCBXaW5kb3dGbGFnc1R5cGUgewoJVUludDE2IGZvcm1hdDoxOyAgICAgICAKCVVJbnQx NiBvZmZzY3JlZW46MTsgICAgCglVSW50MTYgbW9kYWw6MTsgICAgICAgIAoJVUludDE2IGZvY3Vz YWJsZToxOyAgICAKCVVJbnQxNiBlbmFibGVkOjE7ICAgICAgCglVSW50MTYgdmlzaWJsZToxOyAg ICAgIAoJVUludDE2IGRpYWxvZzoxOyAgICAgICAKCVVJbnQxNiBmcmVlQml0bWFwOjE7CSAgCglV SW50MTYgcmVzZXJ2ZWQgOjg7Cn0gV2luZG93RmxhZ3NUeXBlOwoKdHlwZWRlZiBzdHJ1Y3QgV2lu ZG93VHlwZSB7CiAgQ29vcmQJCQkJCQkJZGlzcGxheVdpZHRoVjIwOwkJIAogIENvb3JkCQkJCQkJ CWRpc3BsYXlIZWlnaHRWMjA7CQkgCiAgdm9pZCAqCQkJCQkJCWRpc3BsYXlBZGRyVjIwOwkJIAog IFdpbmRvd0ZsYWdzVHlwZQkJCQl3aW5kb3dGbGFnczsKICBSZWN0YW5nbGVUeXBlCQkJCXdpbmRv d0JvdW5kczsKICBBYnNSZWN0VHlwZQkJCQkJY2xpcHBpbmdCb3VuZHM7CiAgQml0bWFwUHRyCQkJ CQkJYml0bWFwUDsKICBGcmFtZUJpdHNUeXBlICAgCQkJZnJhbWVUeXBlOwogIERyYXdTdGF0ZVR5 cGUgKgkJCQlkcmF3U3RhdGVQOwkJCQkgCiAgc3RydWN0IFdpbmRvd1R5cGUgKgkJbmV4dFdpbmRv dzsKfSBXaW5kb3dUeXBlOwoKdHlwZWRlZiBXaW5kb3dUeXBlICpXaW5QdHI7CnR5cGVkZWYgV2lu ZG93VHlwZSAqV2luSGFuZGxlOwoKCiAKIAogCnR5cGVkZWYgc3RydWN0IFdpbkxpbmVUeXBlIHsK CUNvb3JkIHgxOwoJQ29vcmQgeTE7CglDb29yZCB4MjsKCUNvb3JkIHkyOwp9IFdpbkxpbmVUeXBl OwoKIAoKCgogCiAKIAoKIAogCiAKdHlwZWRlZiBzdHJ1Y3QgR3JhcGhpY1N0YXRlVHlwZSB7CglE cmF3U3RhdGVUeXBlICoJZHJhd1N0YXRlUDsKCURyYXdTdGF0ZVR5cGUgKglkcmF3U3RhdGVTdGFj a1A7CglJbnQxNgkJCQkJZHJhd1N0YXRlSW5kZXg7CglVSW50MTYJCQkJc2NyZWVuTG9ja0NvdW50 Owp9IEdyYXBoaWNTdGF0ZVR5cGU7CgogCiAKIAoKCgoKIAogCiAKCiAKIAoKCgoKCgoKCgoKCgkK CQoJCiMgNTU2ICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVtL1dp bmRvdy5oIgoKCgoKIyAzNSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5 c3RlbS9TeXNFdmVudC5oIiAyCgoKCiAKIAoKCnR5cGVkZWYgZW51bSB7CglzeXNFdmVudE5pbEV2 ZW50ID0gMCwKCXN5c0V2ZW50UGVuRG93bkV2ZW50LAoJc3lzRXZlbnRQZW5VcEV2ZW50LAoJc3lz RXZlbnRQZW5Nb3ZlRXZlbnQsCglzeXNFdmVudEtleURvd25FdmVudCwKCXN5c0V2ZW50V2luRW50 ZXJFdmVudCwKCXN5c0V2ZW50V2luRXhpdEV2ZW50LAoJc3lzRXZlbnRBcHBTdG9wRXZlbnQgPSAy MiwKCXN5c0V2ZW50VHNtQ29uZmlybUV2ZW50ID0gMzUsCglzeXNFdmVudFRzbUZlcEJ1dHRvbkV2 ZW50LAoJc3lzRXZlbnRUc21GZXBNb2RlRXZlbnQsCgoJIAoJIAoJc3lzRXZlbnROZXh0VUlFdmVu dCA9IDB4MDgwMCwKCgkgCglzeXNFdmVudEZpcnN0SU5ldExpYkV2ZW50ID0gMHgxMDAwLAoJc3lz RXZlbnRGaXJzdFdlYkxpYkV2ZW50ID0gMHgxMTAwLAoJCgkgCgkgCglzeXNFdmVudEZpcnN0VXNl ckV2ZW50ID0gMHg2MDAwCn0gU3lzRXZlbnRzRW51bTsKCgoKIAoKCgoKCgoKCgoKCgogCgoKCiAK CgoKc3RydWN0IF9HZW5lcmljRXZlbnRUeXBlIHsKCVVJbnQxNiAgICAgICAgIGRhdHVtWzhdOwog ICB9OwoKc3RydWN0IF9QZW5VcEV2ZW50VHlwZSB7CiAgIFBvaW50VHlwZSAgICAgIHN0YXJ0OyAg ICAgICAgICAgICAKICAgUG9pbnRUeXBlICAgICAgZW5kOyAgICAgICAgICAgICAgIAogICB9OwoK c3RydWN0IF9LZXlEb3duRXZlbnRUeXBlIHsKICAgV0NoYXIgICAgICAgICAgY2hyOyAgICAgICAg ICAgICAgIAogICBVSW50MTYgICAgICAgICBrZXlDb2RlOyAgICAgICAgICAgCiAgIFVJbnQxNiAg ICAgICAgIG1vZGlmaWVyczsKICAgfTsKCnN0cnVjdCBfV2luRW50ZXJFdmVudFR5cGUgewogICBX aW5IYW5kbGUgICAgICBlbnRlcldpbmRvdzsKICAgV2luSGFuZGxlICAgICAgZXhpdFdpbmRvdzsK ICAgfTsKCnN0cnVjdCBfV2luRXhpdEV2ZW50VHlwZSB7CiAgIFdpbkhhbmRsZSAgICAgIGVudGVy V2luZG93OwogICBXaW5IYW5kbGUgICAgICBleGl0V2luZG93OwogICB9OwoKc3RydWN0IF9UU01D b25maXJtVHlwZSB7CglDaGFyICoJCQl5b21pVGV4dDsKCVVJbnQxNgkJCWZvcm1JRDsKICAgfTsK CnN0cnVjdCBfVFNNRmVwQnV0dG9uVHlwZSB7CglVSW50MTYJCQlidXR0b25JRDsKICAgfTsKCnN0 cnVjdCBfVFNNRmVwTW9kZUV2ZW50VHlwZSB7CglVSW50MTYgICAgICAgICBtb2RlOwkJCQkJIAog ICB9OwoKCiAKdHlwZWRlZiBzdHJ1Y3QgU3lzRXZlbnRUeXBlIHsKICAgU3lzRXZlbnRzRW51bSAg ZVR5cGU7CiAgIEJvb2xlYW4gICAgICAgIHBlbkRvd247CiAgIFVJbnQ4ICAgICAgICAgIHRhcENv dW50OwogICBDb29yZCAgICAgICAgICBzY3JlZW5YOwogICBDb29yZCAgICAgICAgICBzY3JlZW5Z OwogICB1bmlvbiB7CiAgICAgIHN0cnVjdCBfR2VuZXJpY0V2ZW50VHlwZQkJZ2VuZXJpYzsKCiAg ICAgIHN0cnVjdCBfUGVuVXBFdmVudFR5cGUJCQlwZW5VcDsKICAgICAgc3RydWN0IF9LZXlEb3du RXZlbnRUeXBlCQlrZXlEb3duOwogICAgICBzdHJ1Y3QgX1dpbkVudGVyRXZlbnRUeXBlCQl3aW5F bnRlcjsKICAgICAgc3RydWN0IF9XaW5FeGl0RXZlbnRUeXBlCQl3aW5FeGl0OwogICAgICBzdHJ1 Y3QgX1RTTUNvbmZpcm1UeXBlCQkJdHNtQ29uZmlybTsKICAgICAgc3RydWN0IF9UU01GZXBCdXR0 b25UeXBlCQl0c21GZXBCdXR0b247CiAgICAgIHN0cnVjdCBfVFNNRmVwTW9kZUV2ZW50VHlwZQl0 c21GZXBNb2RlOwoKICAgICAgfSBkYXRhOwoKfSBTeXNFdmVudFR5cGU7CgoKIAp0eXBlZGVmICBz dHJ1Y3QgewogICBTeXNFdmVudFR5cGUgICBldmVudDsKICAgVUludDMyICAgICAgICAgaWQ7ICAg ICAgICAgICAgICAgICAgIAogICB9IFN5c0V2ZW50U3RvcmVUeXBlOwoKCgogCiAKIAoKIyAxOTUg Ii4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vU3lzRXZlbnQuaCIK CgoKIAoKCgoKCgojIDMwICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvU3lz dGVtL05ldE1nci5oIiAyCgoKIAogCgoKCgogCgoKIAogCiAKCgogCiAKCgoJCQkgCgkJCSAKCQkJ IAoJCQkgCgkJCSAKCQkJIAoKCiAKCgoKCiAKCgogCgoKCiAKCgoKIAogCiAKCgogCiAKIAogCgoK IAogCiAKCgoKCgoKCgogCiAKIAogCgoKCgoKCgogCiAKIAoKCgogCiAKIAogCiAKIAoKIAp0eXBl ZGVmIGVudW0gewoJIAoJbmV0U29ja2V0T3B0SVBPcHRpb25zID0gMSwJCQkJCQkgCgkKCSAKCW5l dFNvY2tldE9wdFRDUE5vRGVsYXkgPSAxLAkJCQkJIAoJbmV0U29ja2V0T3B0VENQTWF4U2VnID0g MiwJCQkJCQkgCgoJIAoJbmV0U29ja2V0T3B0U29ja0RlYnVnID0gMHgwMDAxLAkJCQkgCgluZXRT b2NrZXRPcHRTb2NrQWNjZXB0Q29ubiA9IDB4MDAwMiwJCSAKCW5ldFNvY2tldE9wdFNvY2tSZXVz ZUFkZHIgPSAweDAwMDQsCQkJIAoJbmV0U29ja2V0T3B0U29ja0tlZXBBbGl2ZSA9IDB4MDAwOCwJ CQkgCgluZXRTb2NrZXRPcHRTb2NrRG9udFJvdXRlID0gMHgwMDEwLAkJCSAKCW5ldFNvY2tldE9w dFNvY2tCcm9hZGNhc3QgPSAweDAwMjAsCQkJIAoJbmV0U29ja2V0T3B0U29ja1VzZUxvb3BiYWNr ID0gMHgwMDQwLAkJIAoJbmV0U29ja2V0T3B0U29ja0xpbmdlciA9IDB4MDA4MCwJCQkJIAoJbmV0 U29ja2V0T3B0U29ja09PQkluTGluZSA9IDB4MDEwMCwJCQkgCgkKCW5ldFNvY2tldE9wdFNvY2tT bmRCdWZTaXplID0gMHgxMDAxLAkJIAoJbmV0U29ja2V0T3B0U29ja1JjdkJ1ZlNpemUgPSAweDEw MDIsCQkgCgluZXRTb2NrZXRPcHRTb2NrU25kTG93V2F0ZXIgPSAweDEwMDMsCQkgCgluZXRTb2Nr ZXRPcHRTb2NrUmN2TG93V2F0ZXIgPSAweDEwMDQsCQkgCgluZXRTb2NrZXRPcHRTb2NrU25kVGlt ZW91dCA9IDB4MTAwNSwJCSAKCW5ldFNvY2tldE9wdFNvY2tSY3ZUaW1lb3V0ID0gMHgxMDA2LAkJ IAoJbmV0U29ja2V0T3B0U29ja0Vycm9yU3RhdHVzPSAweDEwMDcsCQkgCgluZXRTb2NrZXRPcHRT b2NrU29ja2V0VHlwZSA9IDB4MTAwOCwJCSAKCQoJIAoJbmV0U29ja2V0T3B0U29ja05vbkJsb2Nr aW5nID0gMHgyMDAwLAkJIAoJbmV0U29ja2V0T3B0U29ja1JlcXVpcmVFcnJDbGVhciA9IDB4MjAw MSwJIAoJCQkJCQkJCQkJCQkJCQkgCgluZXRTb2NrZXRPcHRTb2NrTXVsdGlQa3RBZGRyID0gMHgy MDAyCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoJfSBOZXRTb2NrZXRPcHRF bnVtOwoKCgoKIAp0eXBlZGVmIGVudW0gewoJbmV0U29ja2V0T3B0TGV2ZWxJUCA9IDAsCQkJCQkg CgluZXRTb2NrZXRPcHRMZXZlbFRDUCA9IDYsCQkJCQkgCgluZXRTb2NrZXRPcHRMZXZlbFNvY2tl dCA9IDB4RkZGRgkJCSAKCX0gTmV0U29ja2V0T3B0TGV2ZWxFbnVtOwoKCiAKdHlwZWRlZiBzdHJ1 Y3QgewoJSW50MTYJCW9uT2ZmOwkJCQkJCQkJIAoJSW50MTYJCXRpbWU7CQkJCQkJCQkJIAoJfSBO ZXRTb2NrZXRMaW5nZXJUeXBlOwoKIAogCiAKdHlwZWRlZiBlbnVtIHsKCW5ldFNvY2tldEFkZHJS YXc9MCwJCQkJCQkJCQkgCgluZXRTb2NrZXRBZGRySU5FVD0yCQkJCQkJCQkJIAoJfSBOZXRTb2Nr ZXRBZGRyRW51bTsKCnR5cGVkZWYgZW51bSB7CgluZXRTb2NrZXRUeXBlU3RyZWFtPTEsCQkJCQkJ CQkgCgluZXRTb2NrZXRUeXBlRGF0YWdyYW09MiwJCQkJCQkJIAoJbmV0U29ja2V0VHlwZVJhdz0z LAkJCQkJCQkJCSAKCW5ldFNvY2tldFR5cGVSZWxpYWJsZU1zZz00LAkJCQkJCSAKCW5ldFNvY2tl dFR5cGVMaWNlbnNlZT04CQkJCQkJCQkgCgl9IE5ldFNvY2tldFR5cGVFbnVtOwoKIAoKCgoKCgog CiAKIAp0eXBlZGVmIGVudW0gewoJbmV0U29ja2V0RGlySW5wdXQ9MCwKCW5ldFNvY2tldERpck91 dHB1dD0xLAoJbmV0U29ja2V0RGlyQm90aD0yCgl9IE5ldFNvY2tldERpckVudW07CgoKIAogCiAK IAp0eXBlZGVmCUludDE2CQkJTmV0U29ja2V0UmVmOwkJCgogCnR5cGVkZWYJVUludDMyCQlOZXRJ UEFkZHI7CQkgCgoKCiAKIAogCiAKIAp0eXBlZGVmIHN0cnVjdCBOZXRTb2NrZXRBZGRySU5UeXBl IHsKCUludDE2CQkJZmFtaWx5OwkJCQkJIAoJVUludDE2CQlwb3J0OwkJCQkJCSAKCU5ldElQQWRk cglhZGRyOwkJCQkJCSAKCX0gTmV0U29ja2V0QWRkcklOVHlwZTsKCQogCgoKCiAKIAogCnR5cGVk ZWYgc3RydWN0ICBOZXRTb2NrZXRBZGRyVHlwZSB7CglJbnQxNgkJCWZhbWlseTsJCQkJCSAKCVVJ bnQ4CQkJZGF0YVsxNF07CQkJCSAKCX0gTmV0U29ja2V0QWRkclR5cGU7CgkKCiAKIAogCiAKIAp0 eXBlZGVmIHN0cnVjdCBOZXRTb2NrZXRBZGRyUmF3VHlwZSB7CglJbnQxNgkJCWZhbWlseTsJCQkJ CSAKCVVJbnQxNgkJaWZJbnN0YW5jZTsJCQkJIAoJVUludDMyCQlpZkNyZWF0b3I7CQkJCSAKCX0g TmV0U29ja2V0QWRkclJhd1R5cGU7CgkKCQoJCiAKIAogCiAKIAoKIAogCiAKdHlwZWRlZiBzdHJ1 Y3QgTmV0SU9WZWNUeXBlIHsKCVVJbnQ4ICoJCQlidWZQOwkJCQkJCQkgCglVSW50MTYJCQlidWZM ZW47CQkJCQkJIAoJfSBOZXRJT1ZlY1R5cGUsICpOZXRJT1ZlY1B0cjsKCQoKCiAKdHlwZWRlZiBz dHJ1Y3QgewoJVUludDggKgkJCWFkZHJQOwkJCQkJCSAKCVVJbnQxNgkJCWFkZHJMZW47CQkJCQkJ IAoJTmV0SU9WZWNQdHIJCWlvdjsJCQkJCQkJIAoJVUludDE2CQkJaW92TGVuOwkJCQkJCSAKCVVJ bnQ4ICoJCQlhY2Nlc3NSaWdodHM7CQkJCSAKCVVJbnQxNgkJCWFjY2Vzc1JpZ2h0c0xlbjsJCQkg Cgl9IE5ldElPUGFyYW1UeXBlLCAqTmV0SU9QYXJhbVB0cjsKCQogCgoKCgoKCQkJCQkJCiAKIAog CgogCgoKCgoKCgogCiAKdHlwZWRlZiBzdHJ1Y3QgIHsKCUNoYXIgKgkJbmFtZVA7CQkJCQkJCQkg CglDaGFyICoqCQluYW1lQWxpYXNlc1A7CQkJCQkJIAoJVUludDE2CQlhZGRyVHlwZTsJCQkJCQkJ IAoJVUludDE2CQlhZGRyTGVuOwkJCQkJCQkJIAoJVUludDggKioJCWFkZHJMaXN0UDsJCQkJCQkJ IAoJfSBOZXRIb3N0SW5mb1R5cGUsICpOZXRIb3N0SW5mb1B0cjsKCQoKIAp0eXBlZGVmIHN0cnVj dCB7CglOZXRIb3N0SW5mb1R5cGUJaG9zdEluZm87CQkJCQkgCgoJIAoJIAoJQ2hhcgluYW1lWzI1 NSArMV07CQkJIAoKCUNoYXIgKmFsaWFzTGlzdFsxICsxXTsJCSAKCUNoYXIJYWxpYXNlc1sxIF1b MjU1ICsxXTsKCglOZXRJUEFkZHIqCWFkZHJlc3NMaXN0WzQgXTsKCU5ldElQQWRkcglhZGRyZXNz WzQgXTsKCgl9IE5ldEhvc3RJbmZvQnVmVHlwZSwgKk5ldEhvc3RJbmZvQnVmUHRyOwoJCgkKIAog CiAKCiAKCgoKCgogCiAKdHlwZWRlZiBzdHJ1Y3QgewoJQ2hhciAqCQluYW1lUDsJCQkJCQkJCSAK CUNoYXIgKioJCW5hbWVBbGlhc2VzUDsJCQkJCQkgCglVSW50MTYJCXBvcnQ7CQkJCQkJCQkJIAoJ Q2hhciAqCQlwcm90b1A7CQkJCQkJCQkgCgl9IE5ldFNlcnZJbmZvVHlwZSwgKk5ldFNlcnZJbmZv UHRyOwoJCiAKdHlwZWRlZiBzdHJ1Y3QgewoJTmV0U2VydkluZm9UeXBlCXNlcnZJbmZvOwkJCQkJ IAoKCSAKCSAKCUNoYXIJCQluYW1lWzE1ICsxXTsJCQkJCSAKCglDaGFyICoJCWFsaWFzTGlzdFsx ICsxXTsJCSAKCUNoYXIJCQlhbGlhc2VzWzEgXVsxNSBdOwoJQ2hhcgkJCXByb3RvTmFtZVsxNSAr MV07CgoJVUludDgJCQlyZXNlcnZlZDsKCX0gTmV0U2VydkluZm9CdWZUeXBlLCAqTmV0U2Vydklu Zm9CdWZQdHI7CgkKCgogCiAKIAogCgp0eXBlZGVmIHN0cnVjdCB7CglDaGFyCQkJbmFtZVszMiBd OwkJCSAgIAoJfSBOZXRDb25maWdOYW1lVHlwZSwgKk5ldENvbmZpZ05hbWVQdHI7CgoKCiAKCgoK CgoKCgkJCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJ CQkgCgkJCQkJCQkJCQkJCQkJCQkJIAoKCgkJCQkJCQkJCQkJCQkJCQkJIAoKCQkJCQkJCQkJCQkJ CQkJCQkgCgkJCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJ CQkJCQkgCgoJCQkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJ CQkJCQkJIAoKCQkJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJ CQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJCQkgCgoJCQkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJ CQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkJCSAKCgkJCQkJCQkJ CQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJ CQkJCQkJCQkJIAoKCiAKCgoKIAoKCgoKCiNwcmFnbWEgbWFyayBNYXN0ZXIKdHlwZWRlZiBlbnVt IHsKCSAKCW5ldE1hc3RlckludGVyZmFjZUluZm8sCgluZXRNYXN0ZXJJbnRlcmZhY2VTdGF0cywK CW5ldE1hc3RlcklQU3RhdHMsCgluZXRNYXN0ZXJJQ01QU3RhdHMsCgluZXRNYXN0ZXJVRFBTdGF0 cywKCW5ldE1hc3RlclRDUFN0YXRzLAoJCgkgCgluZXRNYXN0ZXJUcmFjZUV2ZW50R2V0CQkJCQkg CgoJfSBOZXRNYXN0ZXJFbnVtOwoJCgkKdHlwZWRlZiBzdHJ1Y3QgTmV0TWFzdGVyUEJUeXBlIHsK CgkgCgl1bmlvbiB7CgkKCQkgCgkJIAoJCSAKCQlzdHJ1Y3QgIHsKCQkJVUludDE2CQlpbmRleDsJ CQkJCSAKCQkJVUludDMyCQljcmVhdG9yOwkJCQkJIAoJCQlVSW50MTYJCWluc3RhbmNlOwkJCQkg CgkJCXZvaWQgKgkJbmV0SUZQOwkJCQkJIAoJCQkKCQkJIAoJCQlDaGFyCQkJZHJ2ck5hbWVbOCBd OwkJIAoJCQlDaGFyCQkJaHdOYW1lWzE2IF07CQkJIAoJCQlVSW50OAkJCWxvY2FsTmV0SGRyTGVu OwkJIAoJCQlVSW50OAkJCWxvY2FsTmV0VHJhaWxlckxlbjsJIAoJCQlVSW50MTYJCWxvY2FsTmV0 TWF4RnJhbWU7CQkgCgkJCQoJCQkgCgkJCUNoYXIJCQlpZk5hbWVbMTAgXTsgCgkJCUJvb2xlYW4J CWRyaXZlclVwOwkJCQkgCgkJCUJvb2xlYW4JCWlmVXA7CQkJCQkJIAoJCQlVSW50MTYJCWh3QWRk ckxlbjsJCQkJIAoJCQlVSW50OAkJCWh3QWRkclsxNCBdOwkJIAoJCQlVSW50MTYJCW10dTsJCQkJ CQkgCgkJCVVJbnQzMgkJc3BlZWQ7CQkJCQkgCgkJCVVJbnQzMgkJbGFzdFN0YXRlQ2hhbmdlOwkJ IAoJCQkKCQkJIAoJCQlOZXRJUEFkZHIJaXBBZGRyOwkJCQkJIAoJCQlOZXRJUEFkZHIJc3VibmV0 TWFzazsJCQkJIAoJCQlOZXRJUEFkZHIJYnJvYWRjYXN0OwkJCQkgCgkJCX0gaW50ZXJmYWNlSW5m bzsKCQkJCgkJIAoJCSAKCQkgCgkJc3RydWN0ICB7CgkJCVVJbnQxNgkJaW5kZXg7CQkJCQkgCgkJ CVVJbnQzMgkJaW5PY3RldHM7CQkJCSAKCQkJVUludDMyCQlpblVjYXN0UGt0czsKCQkJVUludDMy CQlpbk5VY2FzdFBrdHM7CgkJCVVJbnQzMgkJaW5EaXNjYXJkczsKCQkJVUludDMyCQlpbkVycm9y czsKCQkJVUludDMyCQlpblVua25vd25Qcm90b3M7CgkJCVVJbnQzMgkJb3V0T2N0ZXRzOwoJCQlV SW50MzIJCW91dFVjYXN0UGt0czsKCQkJVUludDMyCQlvdXROVWNhc3RQa3RzOwoJCQlVSW50MzIJ CW91dERpc2NhcmRzOwoJCQlVSW50MzIJCW91dEVycm9yczsKCQkJfSBpbnRlcmZhY2VTdGF0czsK CQkJCQkJCgkJIAoJCSAKCQkgCgkJc3RydWN0ICB7CgkJCVVJbnQzMgkJaXBJblJlY2VpdmVzOwkK CQkJVUludDMyCQlpcEluSGRyRXJyb3JzOwoJCQlVSW50MzIJCWlwSW5BZGRyRXJyb3JzOwoJCQlV SW50MzIJCWlwRm9yd0RhdGFncmFtczsKCQkJVUludDMyCQlpcEluVW5rbm93blByb3RvczsKCQkJ VUludDMyCQlpcEluRGlzY2FyZHM7CgkJCVVJbnQzMgkJaXBJbkRlbGl2ZXJzOwoJCQlVSW50MzIJ CWlwT3V0UmVxdWVzdHM7CgkJCVVJbnQzMgkJaXBPdXREaXNjYXJkczsKCQkJVUludDMyIAkJaXBP dXROb1JvdXRlczsKCQkJVUludDMyIAkJaXBSZWFzbVJlcWRzOwoJCQlVSW50MzIgCQlpcFJlYXNt T0tzOwoJCQlVSW50MzIgCQlpcFJlYXNtRmFpbHM7CgkJCVVJbnQzMgkJaXBGcmFnT0tzOwoJCQlV SW50MzIgCQlpcEZyYWdGYWlsczsKCQkJVUludDMyIAkJaXBGcmFnQ3JlYXRlczsKCQkJVUludDMy IAkJaXBSb3V0aW5nRGlzY2FyZHM7CgkJCVVJbnQzMiAJCWlwRGVmYXVsdFRUTDsgICAgICAgIAoJ CQlVSW50MzIgCQlpcFJlYXNtVGltZW91dDsgICAgICAKCQkJfSBpcFN0YXRzOwoJCQkJCQkKCQkg CgkJIAoJCSAKCQlzdHJ1Y3QgIHsKCQkJVUludDMyCQkJaWNtcEluTXNnczsKCQkJVUludDMyCQkJ aWNtcEluRXJyb3JzOwoJCQlVSW50MzIJCQlpY21wSW5EZXN0VW5yZWFjaHM7CgkJCVVJbnQzMgkJ CWljbXBJblRpbWVFeGNkczsKCQkJVUludDMyCQkJaWNtcEluUGFybVByb2JzOwoJCQlVSW50MzIJ CQlpY21wSW5TcmNRdWVuY2hzOwoJCQlVSW50MzIJCQlpY21wSW5SZWRpcmVjdHM7CgkJCVVJbnQz MgkJCWljbXBJbkVjaG9zOwoJCQlVSW50MzIJCQlpY21wSW5FY2hvUmVwczsKCQkJVUludDMyCQkJ aWNtcEluVGltZXN0YW1wczsKCQkJVUludDMyCQkJaWNtcEluVGltZXN0YW1wUmVwczsKCQkJVUlu dDMyCQkJaWNtcEluQWRkck1hc2tzOwoJCQlVSW50MzIJCQlpY21wSW5BZGRyTWFza1JlcHM7CgkJ CVVJbnQzMgkJCWljbXBPdXRNc2dzOwoJCQlVSW50MzIJCQlpY21wT3V0RXJyb3JzOwoJCQlVSW50 MzIJCQlpY21wT3V0RGVzdFVucmVhY2hzOwoJCQlVSW50MzIJCQlpY21wT3V0VGltZUV4Y2RzOwoJ CQlVSW50MzIJCQlpY21wT3V0UGFybVByb2JzOwoJCQlVSW50MzIJCQlpY21wT3V0U3JjUXVlbmNo czsKCQkJVUludDMyCQkJaWNtcE91dFJlZGlyZWN0czsKCQkJVUludDMyCQkJaWNtcE91dEVjaG9z OwoJCQlVSW50MzIJCQlpY21wT3V0RWNob1JlcHM7CgkJCVVJbnQzMgkJCWljbXBPdXRUaW1lc3Rh bXBzOwoJCQlVSW50MzIJCQlpY21wT3V0VGltZXN0YW1wUmVwczsKCQkJVUludDMyCQkJaWNtcE91 dEFkZHJNYXNrczsKCQkJVUludDMyCQkJaWNtcE91dEFkZHJNYXNrUmVwczsKCQkJfSBpY21wU3Rh dHM7CgkJCQkJCQoJCSAKCQkgCgkJIAoJCXN0cnVjdCAgewoJCQlVSW50MzIJCQl1ZHBJbkRhdGFn cmFtczsKCQkJVUludDMyCQkJdWRwTm9Qb3J0czsKCQkJVUludDMyCQkJdWRwSW5FcnJvcnM7CgkJ CVVJbnQzMgkJCXVkcE91dERhdGFncmFtczsKCQkJfSB1ZHBTdGF0czsKCQkJCQkJCgkJIAoJCSAK CQkgCgkJc3RydWN0ICB7CgkJCVVJbnQzMgkJCXRjcFJ0b0FsZ29yaXRobTsKCQkJVUludDMyCQkJ dGNwUnRvTWluOwoJCQlVSW50MzIJCQl0Y3BSdG9NYXg7CgkJCVVJbnQzMgkJCXRjcE1heENvbm47 CgkJCVVJbnQzMgkJCXRjcEFjdGl2ZU9wZW5zOwoJCQlVSW50MzIJCQl0Y3BQYXNzaXZlT3BlbnM7 CgkJCVVJbnQzMgkJCXRjcEF0dGVtcHRGYWlsczsKCQkJVUludDMyCQkJdGNwRXN0YWJSZXNldHM7 CgkJCVVJbnQzMgkJCXRjcEN1cnJFc3RhYjsKCQkJVUludDMyCQkJdGNwSW5TZWdzOwoJCQlVSW50 MzIJCQl0Y3BPdXRTZWdzOwoJCQlVSW50MzIJCQl0Y3BSZXRyYW5zU2VnczsKCQkJVUludDMyCQkJ dGNwSW5FcnJzOwoJCQlVSW50MzIJCQl0Y3BPdXRSc3RzOwoJCQl9IHRjcFN0YXRzOwoJCQkJCQkK CQkgCgkJIAoJCSAKCQlzdHJ1Y3QgIHsKCQkJVUludDE2CQlpbmRleDsJCQkJIAoJCQlDaGFyICoJ CXRleHRQOwkJCQkgCgkJCX0gdHJhY2VFdmVudEdldDsKCQkJCgkJfSBwYXJhbTsKCgl9IE5ldE1h c3RlclBCVHlwZSwgKk5ldE1hc3RlclBCUHRyOwoJCgkKCgkKCQogCiAKIAojcHJhZ21hIG1hcmsg U2V0dGluZ3MKIAogCiAKIAp0eXBlZGVmIGVudW0gewkKCW5ldFNldHRpbmdSZXNldEFsbCwJCQkJ CQkgCgkJCQkJCQkJCQkJCQkgCgoJbmV0U2V0dGluZ1ByaW1hcnlETlMsCQkJCQkgCgluZXRTZXR0 aW5nU2Vjb25kYXJ5RE5TLAkJCQkJIAoJbmV0U2V0dGluZ0RlZmF1bHRSb3V0ZXIsCQkJCSAKCW5l dFNldHRpbmdEZWZhdWx0SUZDcmVhdG9yLAkJCSAKCW5ldFNldHRpbmdEZWZhdWx0SUZJbnN0YW5j ZSwJCQkgCgluZXRTZXR0aW5nSG9zdE5hbWUsCQkJCQkJIAoJbmV0U2V0dGluZ0RvbWFpbk5hbWUs CQkJCQkgCgluZXRTZXR0aW5nSG9zdFRibCwJCQkJCQkgCgluZXRTZXR0aW5nQ2xvc2VXYWl0VGlt ZSwJCQkJIAoJbmV0U2V0dGluZ0luaXRpYWxUQ1BSZXNlbmRUaW1lLAkJIAoJCQkJCQkJCQkJCQkJ IAoJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJIAoJCgkKCSAKCSAK CW5ldFNldHRpbmdUcmFjZUJpdHMgPSAweDEwMDAsCQkJIAoJbmV0U2V0dGluZ1RyYWNlU2l6ZSwJ CQkJCQkgCgkJCQkJCQkJCQkJCQkgCgluZXRTZXR0aW5nVHJhY2VTdGFydCwJCQkJCSAKCW5ldFNl dHRpbmdUcmFjZVJvbGwsCQkJCQkJIAoJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCgluZXRT ZXR0aW5nUlRQcmltYXJ5RE5TLAkJCQkJIAoJCQkJCQkJCQkJCQkJIAoJbmV0U2V0dGluZ1JUU2Vj b25kYXJ5RE5TLAkJCQkgCgkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkKCW5ldFNldHRpbmdD b25maWdUYWJsZQkJCQkJIAoJCQkJCQkJCQkJCQkJIAoKCX0gTmV0U2V0dGluZ0VudW07CgoKIAog CiAKdHlwZWRlZiBlbnVtIHsKCSAKCSAKCSAKCW5ldElGU2V0dGluZ1Jlc2V0QWxsLAkJCQkJIAoJ CQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCgkgCgkgCgkgCgluZXRJRlNldHRpbmdVcCwJCQkJ CQkJIAoJbmV0SUZTZXR0aW5nTmFtZSwJCQkJCQkJIAoKCSAKCSAKCSAKCW5ldElGU2V0dGluZ1Jl cUlQQWRkciwJCQkJCSAKCW5ldElGU2V0dGluZ1N1Ym5ldE1hc2ssCQkJCQkgCgluZXRJRlNldHRp bmdCcm9hZGNhc3QsCQkJCQkgCgoJIAoJIAoJIAoJbmV0SUZTZXR0aW5nVXNlcm5hbWUsCQkJCQkg CgkJCQkJCQkJCQkJCQkgCgluZXRJRlNldHRpbmdQYXNzd29yZCwJCQkJCSAKCQkJCQkJCQkJCQkJ CSAKCW5ldElGU2V0dGluZ0RpYWxiYWNrVXNlcm5hbWUsCQkJIAoJCQkJCQkJCQkJCQkJIAoJbmV0 SUZTZXR0aW5nRGlhbGJhY2tQYXNzd29yZCwJCQkgCgkJCQkJCQkJCQkJCQkgCgluZXRJRlNldHRp bmdBdXRoVXNlcm5hbWUsCQkJCSAKCQkJCQkJCQkJCQkJCSAKCW5ldElGU2V0dGluZ0F1dGhQYXNz d29yZCwJCQkJIAoJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJIAoJ CQkJCQkJCQkJCQkJIAoJCgkgCgkgCgkgCgluZXRJRlNldHRpbmdTZXJ2aWNlTmFtZSwJCQkJIAoJ bmV0SUZTZXR0aW5nTG9naW5TY3JpcHQsCQkJCSAKCW5ldElGU2V0dGluZ0Nvbm5lY3RMb2csCQkJ CQkgCgluZXRJRlNldHRpbmdJbmFjdGl2aXR5VGltZW91dCwJCSAKCQkJCQkJCQkJCQkJCSAKCQkJ CQkJCQkJCQkJCSAKCW5ldElGU2V0dGluZ0VzdGFibGlzaG1lbnRUaW1lb3V0LAkgCgkJCQkJCQkJ CQkJCQkgCgkKCSAKCW5ldElGU2V0dGluZ0R5bmFtaWNJUCwJCQkJCSAKCQkJCQkJCQkJCQkJCSAK CW5ldElGU2V0dGluZ1ZKQ29tcEVuYWJsZSwJCQkJIAoJCQkJCQkJCQkJCQkJIAoJbmV0SUZTZXR0 aW5nVkpDb21wU2xvdHMsCQkJCSAKCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCSAKCW5ldElG U2V0dGluZ01UVSwJCQkJCQkJIAoJCQkJCQkJCQkJCQkJIAoJbmV0SUZTZXR0aW5nQXN5bmNDdGxN YXAsCQkJCSAKCQkJCQkJCQkJCQkJCSAKCgkgCgluZXRJRlNldHRpbmdQb3J0TnVtLAkJCQkJCSAK CW5ldElGU2V0dGluZ0JhdWRSYXRlLAkJCQkJIAoJbmV0SUZTZXR0aW5nRmxvd0NvbnRyb2wsCQkJ CSAKCQkJCQkJCQkJCQkJCSAKCW5ldElGU2V0dGluZ1N0b3BCaXRzLAkJCQkJIAoJbmV0SUZTZXR0 aW5nUGFyaXR5T24sCQkJCQkgCgluZXRJRlNldHRpbmdQYXJpdHlFdmVuLAkJCQkJIAoKCSAKCW5l dElGU2V0dGluZ1VzZU1vZGVtLAkJCQkJIAoJbmV0SUZTZXR0aW5nUHVsc2VEaWFsLAkJCQkJIAoJ bmV0SUZTZXR0aW5nTW9kZW1Jbml0LAkJCQkJIAoJbmV0SUZTZXR0aW5nTW9kZW1QaG9uZSwJCQkJ CSAKCW5ldElGU2V0dGluZ1JlZGlhbENvdW50LAkJCQkgCgkKCgkgCgkgCgkgCgkgCgluZXRJRlNl dHRpbmdQb3dlclVwLAkJCQkJCSAKCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCSAKCQkJCQkJ CQkJCQkJCSAKCQkJCQkJCQkJCQkJCgkgCgkgCgkgCgluZXRJRlNldHRpbmdXaXJlbGVzcywJCQkJ CSAKCQoKCgkgCgluZXRJRlNldHRpbmdETlNRdWVyeSwJCQkJCSAKCgoJIAoJIAoJIAoJIAoJCQkJ CQkJCQkJCQkKCW5ldElGU2V0dGluZ1F1aXRPblR4RmFpbCwJCQkJIAoJbmV0SUZTZXR0aW5nUXVl dWVTaXplLAkJCQkJIAoJbmV0SUZTZXR0aW5nVHhJblF1ZXVlLAkJCQkJIAoJbmV0SUZTZXR0aW5n VHhTZW50LAkJCQkJCSAKCW5ldElGU2V0dGluZ1R4RGlzY2FyZCwJCQkJCSAKCW5ldElGU2V0dGlu Z1Jzc2ksCQkJCQkJCSAKCW5ldElGU2V0dGluZ1Jzc2lBc1BlcmNlbnQsCQkJCSAKCW5ldElGU2V0 dGluZ1JhZGlvU3RhdGUsCQkJCQkgCgluZXRJRlNldHRpbmdCYXNlLAkJCQkJCQkgCgluZXRJRlNl dHRpbmdSYWRpb0lELAkJCQkJCSAKCW5ldElGU2V0dGluZ0JhdHRlcnksCQkJCQkJIAoJbmV0SUZT ZXR0aW5nTmV0d29ya0xvYWQsCQkJCSAKCgkgCgkgCgkgCgoJbmV0SUZTZXR0aW5nQ29ubmVjdGlv bk5hbWUsCQkJIAoKCgkgCgkgCgkgCgkgCgluZXRJRlNldHRpbmdUcmFjZUJpdHMgPSAweDEwMDAs CQkgCgluZXRJRlNldHRpbmdHbG9iYWxzUHRyLAkJCQkJIAoJbmV0SUZTZXR0aW5nQWN0dWFsSVBB ZGRyLAkJCQkgCgkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkgCglu ZXRJRlNldHRpbmdTZXJ2ZXJJUEFkZHIsCQkJCSAKCQkJCQkJCQkJCQkJCSAKCQoJCgkgCgkgCglu ZXRJRlNldHRpbmdCcmluZ0Rvd25PblBvd2VyRG93biwJIAoJCQkJCQkJCQkJCQkJIAoJCQkJCQkJ CQkJCQkJCgkgCgkgCgkgCgluZXRJRlNldHRpbmdSYXdNb2RlLAkJCQkJCSAKCQkJCQkJCQkJCQkJ CSAKCgkgCgkgCgkgCgluZXRJRlNldHRpbmdDdXN0b20gPSAweDgwMDAKCQoJfSBOZXRJRlNldHRp bmdFbnVtOwoKCgogCiAKIAogCiAKIAp0eXBlZGVmIGVudW0JewoJbmV0UmFkaW9TdGF0ZU9mZk5v dENvbm5lY3RlZD0wLAoJbmV0UmFkaW9TdGF0ZU9uTm90Q29ubmVjdGVkLAkJCSAKCW5ldFJhZGlv U3RhdGVPbkNvbm5lY3RlZCwJCQkJIAoJbmV0UmFkaW9TdGF0ZU9mZkNvbm5lY3RlZAoJfSBOZXRS YWRpb1N0YXRlRW51bTsgCgoKCiAKCgogCgoKCiAKdHlwZWRlZiBVSW50MzIJCQkJCU5ldEZEU2V0 VHlwZTsKCgoKCgoKCgoKIAogCiAKI3ByYWdtYSBtYXJrIEVycm9yQ29kZXMKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgogCiAKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK IAoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCiAKIAogCiAKIAogCiAKIAojcHJhZ21hIG1h cmsgVHJhcHMKdHlwZWRlZiBlbnVtIHsKCW5ldExpYlRyYXBBZGRySU5Ub0EgPSBzeXNMaWJUcmFw Q3VzdG9tLAoJbmV0TGliVHJhcEFkZHJBVG9JTiwKCQoJbmV0TGliVHJhcFNvY2tldE9wZW4sCglu ZXRMaWJUcmFwU29ja2V0Q2xvc2UsCgluZXRMaWJUcmFwU29ja2V0T3B0aW9uU2V0LAoJbmV0TGli VHJhcFNvY2tldE9wdGlvbkdldCwKCW5ldExpYlRyYXBTb2NrZXRCaW5kLAoJbmV0TGliVHJhcFNv Y2tldENvbm5lY3QsCgluZXRMaWJUcmFwU29ja2V0TGlzdGVuLAoJbmV0TGliVHJhcFNvY2tldEFj Y2VwdCwKCW5ldExpYlRyYXBTb2NrZXRTaHV0ZG93biwKCQoJbmV0TGliVHJhcFNlbmRQQiwKCW5l dExpYlRyYXBTZW5kLAoJbmV0TGliVHJhcFJlY2VpdmVQQiwKCW5ldExpYlRyYXBSZWNlaXZlLAoJ bmV0TGliVHJhcERtUmVjZWl2ZSwKCW5ldExpYlRyYXBTZWxlY3QsCgoJbmV0TGliVHJhcFByZWZz R2V0LAoJbmV0TGliVHJhcFByZWZzU2V0LAoKCSAKCSAKCW5ldExpYlRyYXBEcnZyV2FrZSwKCW5l dExpYlRyYXBJbnRlcmZhY2VQdHIsCgluZXRMaWJUcmFwTWFzdGVyLAoJCgkgCgluZXRMaWJUcmFw R2V0SG9zdEJ5TmFtZSwKCW5ldExpYlRyYXBTZXR0aW5nR2V0LAoJbmV0TGliVHJhcFNldHRpbmdT ZXQsCgluZXRMaWJUcmFwSUZBdHRhY2gsCgluZXRMaWJUcmFwSUZEZXRhY2gsCgluZXRMaWJUcmFw SUZHZXQsCgluZXRMaWJUcmFwSUZTZXR0aW5nR2V0LAoJbmV0TGliVHJhcElGU2V0dGluZ1NldCwK CW5ldExpYlRyYXBJRlVwLAoJbmV0TGliVHJhcElGRG93biwKCW5ldExpYlRyYXBJRk1lZGlhVXAs CgluZXRMaWJUcmFwU2NyaXB0RXhlY3V0ZVYzMiwKCW5ldExpYlRyYXBHZXRIb3N0QnlBZGRyLAoJ bmV0TGliVHJhcEdldFNlcnZCeU5hbWUsCgluZXRMaWJUcmFwU29ja2V0QWRkciwKCW5ldExpYlRy YXBGaW5pc2hDbG9zZVdhaXQsCgluZXRMaWJUcmFwR2V0TWFpbEV4Y2hhbmdlQnlOYW1lLAoJbmV0 TGliVHJhcFByZWZzQXBwZW5kLAoJbmV0TGliVHJhcElGTWVkaWFEb3duLAoJbmV0TGliVHJhcE9w ZW5Db3VudCwKCQoJbmV0TGliVHJhcFRyYWNlUHJpbnRGLAoJbmV0TGliVHJhcFRyYWNlUHV0UywK CQoJbmV0TGliVHJhcE9wZW5JZkNsb3NlV2FpdCwKCW5ldExpYlRyYXBIYW5kbGVQb3dlck9mZiwK CQoJbmV0TGliVHJhcENvbm5lY3Rpb25SZWZyZXNoLAoJCgkgCgluZXRMaWJUcmFwQml0TW92ZSwK CW5ldExpYlRyYXBCaXRQdXRGaXhlZCwKCW5ldExpYlRyYXBCaXRHZXRGaXhlZCwKCW5ldExpYlRy YXBCaXRQdXRVSW50ViwKCW5ldExpYlRyYXBCaXRHZXRVSW50ViwKCW5ldExpYlRyYXBCaXRQdXRJ bnRWLAoJbmV0TGliVHJhcEJpdEdldEludFYsCgkKCSAKCW5ldExpYk9wZW5Db25maWcsCgluZXRM aWJDb25maWdNYWtlQWN0aXZlLAoJbmV0TGliQ29uZmlnTGlzdCwKCW5ldExpYkNvbmZpZ0luZGV4 RnJvbU5hbWUsCgluZXRMaWJDb25maWdEZWxldGUsCgluZXRMaWJDb25maWdTYXZlQXMsCgluZXRM aWJDb25maWdSZW5hbWUsCgluZXRMaWJDb25maWdBbGlhc1NldCwKCW5ldExpYkNvbmZpZ0FsaWFz R2V0LAoJCgkgCgluZXRMaWJUcmFwU2NyaXB0RXhlY3V0ZSwKCQoJbmV0TGliVHJhcExhc3QKCX0g TmV0TGliVHJhcE51bWJlckVudW07CgoKCiAKCiAKI3ByYWdtYSBtYXJrIEZ1bmN0aW9ucwojIDE1 MDkgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vTmV0TWdyLmgi CgoKCiAKIyAxICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVtL05l dEJpdFV0aWxzLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxMzUgIi4uL1NyY1NoYXJl ZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vTmV0Qml0VXRpbHMuaCIKCiMgMTUxMyAi Li4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9OZXRNZ3IuaCIgMgoK CgojIDMwICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVtL05ldEJp dFV0aWxzLmgiIDIKCgogCgoKCiAKIAoKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAoKCQoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCiMgMTMyICIuLi9TcmNTaGFy ZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVtL05ldEJpdFV0aWxzLmgiCgoKCgojIDkz ICIuLi9TcmNTaGFyZWQvUGFsbS5oIiAyCgoJCQoJCQogCgkJCiMgMSAiLi4vU3JjU2hhcmVkL1Bh bG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9PdmVybGF5TWdyLmgiIDEKIAoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoKCgogCgoKCiAKCgogCgoK IAoKCiAKCgogCiAKCgoKIAogCgoKCiAKCgoKCgogCgoKCgoKCgkKCgoKIAogCnR5cGVkZWYgZW51 bSB7CglvbUluaXQgPSAwLAoJb21PcGVuT3ZlcmxheURhdGFiYXNlLAoJb21Mb2NhbGVUb092ZXJs YXlEQk5hbWUsCglvbU92ZXJsYXlEQk5hbWVUb0xvY2FsZSwKCW9tR2V0Q3VycmVudExvY2FsZSwK CW9tR2V0SW5kZXhlZExvY2FsZSwKCW9tR2V0U3lzdGVtTG9jYWxlLAoJb21TZXRTeXN0ZW1Mb2Nh bGUsCglvbUdldFJvdXRpbmVBZGRyZXNzLAoJCglvbU1heFNlbGVjdG9yID0gb21HZXRSb3V0aW5l QWRkcmVzcywKCW9tQmlnU2VsZWN0b3IgPSAweDdGRkYJIAp9IE9tU2VsZWN0b3I7CgogCgoKCnR5 cGVkZWYgVUludDE2IE9tT3ZlcmxheUtpbmQ7CgoKIAogCiAKCgp0eXBlZGVmIHN0cnVjdCB7CglP bU92ZXJsYXlLaW5kCW92ZXJsYXlUeXBlOwkJIAoJVUludDMyCQkJcnNjVHlwZTsJCQkJIAoJVUlu dDE2CQkJcnNjSUQ7CQkJCSAKCVVJbnQzMgkJCXJzY0xlbmd0aDsJCQkgCglVSW50MzIJCQlyc2ND aGVja3N1bTsJCSAKfSBPbU92ZXJsYXlSc2NUeXBlOwoKdHlwZWRlZiBzdHJ1Y3QgewoJVUludDE2 CQkJbGFuZ3VhZ2U7CQkJIAoJVUludDE2CQkJY291bnRyeTsJCQkJIAp9IE9tTG9jYWxlVHlwZTsK CiAKdHlwZWRlZiBzdHJ1Y3QgewoJVUludDE2CQkJCXZlcnNpb247CQkJCSAKCVVJbnQzMgkJCQlm bGFnczsJCQkJIAoJVUludDMyCQkJCWJhc2VDaGVja3N1bTsJCSAKCU9tTG9jYWxlVHlwZQkJdGFy Z2V0TG9jYWxlOwkJIAoJVUludDMyCQkJCWJhc2VEQlR5cGU7CQkJIAoJVUludDMyCQkJCWJhc2VE QkNyZWF0b3I7CQkgCglVSW50MzIJCQkJYmFzZURCQ3JlYXRlRGF0ZTsgIAoJVUludDMyCQkJCWJh c2VEQk1vZERhdGU7CQkgCglVSW50MTYJCQkJbnVtT3ZlcmxheXM7CQkgCglPbU92ZXJsYXlSc2NU eXBlCW92ZXJsYXlzWzBdOwkJIAp9IE9tT3ZlcmxheVNwZWNUeXBlOwoKCiAKCgoKIyAyMTIgIi4u L1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vT3ZlcmxheU1nci5oIgoK CgojIDk3ICIuLi9TcmNTaGFyZWQvUGFsbS5oIiAyCgoJCQojIDEgIi4uL1NyY1NoYXJlZC9QYWxt L1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vUGFsbUxvY2FsZS5oIiAxCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgoKCgoKCgoKIAogCgoKCiAKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgkKCgoKCgog CgoKCiAKCgoKCgoKCgogCiAKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgogCgoKCgoKCgoKCgoKCgoKCiAKCgogCgoKIAogCgogCgog CgogCgogCgoKIAogCgogCgogCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAK CgoKCiAKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKIAoKCgoKCiAK CgoKCgoKIAoKCgoKIAoKCgoKCiAKCgoKCiAKIAoKIAoKCgojIDEyNTYgIi4uL1NyY1NoYXJlZC9Q YWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vUGFsbUxvY2FsZS5oIgoKCgojIDk4ICIuLi9T cmNTaGFyZWQvUGFsbS5oIiAyCgogCgkJCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0v SW5jcy9Db3JlL1N5c3RlbS9QZW5NZ3IuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgog CgoKCgoKCgoKIAoKCiMgODcgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9T eXN0ZW0vUGVuTWdyLmgiCgoKCQogCgoKCgoKCgoKIyAxMDAgIi4uL1NyY1NoYXJlZC9QYWxtLmgi IDIKCgkJCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9Q cmVmZXJlbmNlcy5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9D b3JlL1N5c3RlbS9TeXN0ZW1NZ3IuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgogCgoKCiAKIyAxICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVt L1N5c3RlbVJlc291cmNlcy5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog CiAKIAoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoK CgoKCgoKCgoKCgkJCQkJCQkJCQkJCSAKCgoKCgoKCgoKCgoKCgoKCgoJCQkJCQkJCQkJCQkJCQkJ IAoKCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoJCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkJIAoJ CQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkJIAoKCgkJCQkJCQkJCQkJCQkJCQkgCgoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKIAogCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCiAKIAogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK CgoKCgogCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgogCgoKCgoJCQkJCQkJCQkJCQkJCQkJIAoKIAoK CgogCgoKCQkJCQkJCQkJCQkJCQkJCSAKCiAKCgoKCgoKCiAKCgoKIAogCiAKIAogCiAKCiAKCiAK CgoKCgoKCgoKIyAzOCAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3Rl bS9TeXN0ZW1NZ3IuaCIgMgoKCgogCgoKCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0v SW5jcy9Db3JlL1VJL0luc1BvaW50LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIyA1 OCAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1VJL0luc1BvaW50LmgiCgoK CiMgNDUgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vU3lzdGVt TWdyLmgiIDIKCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1VJL0V2 ZW50LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgZW51bSB7Cglu aWxFdmVudCA9IDAsCQkJCSAKCXBlbkRvd25FdmVudCwJCQkJIAoJcGVuVXBFdmVudCwJCQkJCSAK CXBlbk1vdmVFdmVudCwJCQkJIAoJa2V5RG93bkV2ZW50LAkJCQkgCgl3aW5FbnRlckV2ZW50LAkJ CQkgCgl3aW5FeGl0RXZlbnQsCQkJCSAKCWN0bEVudGVyRXZlbnQsCgljdGxFeGl0RXZlbnQsCglj dGxTZWxlY3RFdmVudCwKCWN0bFJlcGVhdEV2ZW50LAoJbHN0RW50ZXJFdmVudCwKCWxzdFNlbGVj dEV2ZW50LAoJbHN0RXhpdEV2ZW50LAoJcG9wU2VsZWN0RXZlbnQsCglmbGRFbnRlckV2ZW50LAoJ ZmxkSGVpZ2h0Q2hhbmdlZEV2ZW50LAoJZmxkQ2hhbmdlZEV2ZW50LAoJdGJsRW50ZXJFdmVudCwK CXRibFNlbGVjdEV2ZW50LAoJZGF5U2VsZWN0RXZlbnQsCgltZW51RXZlbnQsCglhcHBTdG9wRXZl bnQgPSAyMiwJCQkgCglmcm1Mb2FkRXZlbnQsCglmcm1PcGVuRXZlbnQsCglmcm1Hb3RvRXZlbnQs Cglmcm1VcGRhdGVFdmVudCwKCWZybVNhdmVFdmVudCwKCWZybUNsb3NlRXZlbnQsCglmcm1UaXRs ZUVudGVyRXZlbnQsCglmcm1UaXRsZVNlbGVjdEV2ZW50LAoJdGJsRXhpdEV2ZW50LAoJc2NsRW50 ZXJFdmVudCwKCXNjbEV4aXRFdmVudCwKCXNjbFJlcGVhdEV2ZW50LAoJdHNtQ29uZmlybUV2ZW50 ID0gMzUsCQkgCgl0c21GZXBCdXR0b25FdmVudCwJCQkgCgl0c21GZXBNb2RlRXZlbnQsCQkJCSAK IAoJYXR0bkluZGljYXRvckVudGVyRXZlbnQsCSAKCWF0dG5JbmRpY2F0b3JTZWxlY3RFdmVudCwJ IAoJCgkgCgkgCgltZW51Q21kQmFyT3BlbkV2ZW50ID0gMHgwODAwLAoJbWVudU9wZW5FdmVudCwK CW1lbnVDbG9zZUV2ZW50LAoJZnJtR2FkZ2V0RW50ZXJFdmVudCwKCWZybUdhZGdldE1pc2NFdmVu dCwKCgkgCglmaXJzdElOZXRMaWJFdmVudCA9IDB4MTAwMCwKCWZpcnN0V2ViTGliRXZlbnQgPSAw eDExMDAsCgkKCSAKCSAKCWZpcnN0VXNlckV2ZW50ID0gMHg2MDAwCn0gZXZlbnRzRW51bTsKCgog CnR5cGVkZWYgc3RydWN0IEV2ZW50VHlwZSB7CiAKICAgSW50MTYJCWVUeXBlOwogICBCb29sZWFu ICAgICAgICBwZW5Eb3duOwogICBVSW50OCAgICAgICAgICB0YXBDb3VudDsKICAgSW50MTYgICAg ICAgICAgc2NyZWVuWDsKICAgSW50MTYgICAgICAgICAgc2NyZWVuWTsKICAgdW5pb24gewogICAg ICBzdHJ1Y3QgX0dlbmVyaWNFdmVudFR5cGUJCWdlbmVyaWM7CiAgICAgIHN0cnVjdCBfUGVuVXBF dmVudFR5cGUgICAgICAgIHBlblVwOwogICAgICBzdHJ1Y3QgX0tleURvd25FdmVudFR5cGUgICAg ICBrZXlEb3duOwogICAgICBzdHJ1Y3QgX1dpbkVudGVyRXZlbnRUeXBlICAgICB3aW5FbnRlcjsK ICAgICAgc3RydWN0IF9XaW5FeGl0RXZlbnRUeXBlICAgICAgd2luRXhpdDsKICAgICAgc3RydWN0 IF9UU01Db25maXJtVHlwZQkJCXRzbUNvbmZpcm07CiAgICAgIHN0cnVjdCBfVFNNRmVwQnV0dG9u VHlwZQkJdHNtRmVwQnV0dG9uOwogICAgICBzdHJ1Y3QgX1RTTUZlcE1vZGVFdmVudFR5cGUJdHNt RmVwTW9kZTsKCiAgICAgIHN0cnVjdCBjdGxFbnRlciB7CiAgICAgICAgIFVJbnQxNiAgICAgICAg ICAgIGNvbnRyb2xJRDsKICAgICAgICAgc3RydWN0IENvbnRyb2xUeXBlICpwQ29udHJvbDsKICAg ICAgICAgfSBjdGxFbnRlcjsKCiAgICAgIHN0cnVjdCBjdGxTZWxlY3QgewogICAgICAgICBVSW50 MTYgICAgICAgICAgICBjb250cm9sSUQ7CiAgICAgICAgIHN0cnVjdCBDb250cm9sVHlwZSAqcENv bnRyb2w7CiAgICAgICAgIEJvb2xlYW4gICAgICAgICAgIG9uOwogICAgICAgICBVSW50OCAgICAg ICAgICAgICByZXNlcnZlZDE7CiAgICAgICAgIFVJbnQxNgkJCQl2YWx1ZTsJCSAKICAgICAgICAg fSBjdGxTZWxlY3Q7CgogICAgICBzdHJ1Y3QgY3RsUmVwZWF0IHsKICAgICAgICAgVUludDE2ICAg ICAgICAgICAgY29udHJvbElEOwogICAgICAgICBzdHJ1Y3QgQ29udHJvbFR5cGUgKnBDb250cm9s OwogICAgICAgICBVSW50MzIgICAgICAgICAgICB0aW1lOwogICAgICAgICBVSW50MTYJCQkJdmFs dWU7CQkgCiAgICAgICAgIH0gY3RsUmVwZWF0OwoKICAgICAgc3RydWN0IGN0bEV4aXQgewogICAg ICAgICBVSW50MTYgICAgICAgICAgICBjb250cm9sSUQ7CiAgICAgICAgIHN0cnVjdCBDb250cm9s VHlwZSAqcENvbnRyb2w7CiAgICAgICAgIH0gY3RsRXhpdDsKCiAgICAgIHN0cnVjdCBmbGRFbnRl ciB7CiAgICAgICAgIFVJbnQxNiAgICAgICAgICAgIGZpZWxkSUQ7CiAgICAgICAgIHN0cnVjdCBG aWVsZFR5cGUgCSpwRmllbGQ7CiAgICAgICAgIH0gZmxkRW50ZXI7CgogICAgICBzdHJ1Y3QgZmxk SGVpZ2h0Q2hhbmdlZCB7CiAgICAgICAgIFVJbnQxNiAgICAgICAgICAgIGZpZWxkSUQ7CiAgICAg ICAgIHN0cnVjdCBGaWVsZFR5cGUgCSpwRmllbGQ7CiAgICAgICAgIEludDE2ICAgICAgICAgICAg IG5ld0hlaWdodDsKICAgICAgICAgVUludDE2ICAgICAgICAgICAgY3VycmVudFBvczsKICAgICAg ICAgfSBmbGRIZWlnaHRDaGFuZ2VkOwoKICAgICAgc3RydWN0IGZsZENoYW5nZWQgewogICAgICAg ICBVSW50MTYgICAgICAgICAgICBmaWVsZElEOwogICAgICAgICBzdHJ1Y3QgRmllbGRUeXBlIAkq cEZpZWxkOwogICAgICAgICB9IGZsZENoYW5nZWQ7CgogICAgICBzdHJ1Y3QgZmxkRXhpdCB7CiAg ICAgICAgIFVJbnQxNiAgICAgICAgICAgIGZpZWxkSUQ7CiAgICAgICAgIHN0cnVjdCBGaWVsZFR5 cGUJKnBGaWVsZDsKICAgICAgICAgfSBmbGRFeGl0OwoKICAgICAgc3RydWN0IGxzdEVudGVyIHsK ICAgICAgICAgVUludDE2ICAgICAgICAgICAgbGlzdElEOwogICAgICAgICBzdHJ1Y3QgTGlzdFR5 cGUgCSpwTGlzdDsKICAgICAgICAgSW50MTYgICAgICAgICAgICAgc2VsZWN0aW9uOwogICAgICAg ICB9IGxzdEVudGVyOwoKICAgICAgc3RydWN0IGxzdEV4aXQgewogICAgICAgICBVSW50MTYgICAg ICAgICAgICBsaXN0SUQ7CiAgICAgICAgIHN0cnVjdCBMaXN0VHlwZSAJKnBMaXN0OwogICAgICAg ICB9IGxzdEV4aXQ7CgogICAgICBzdHJ1Y3QgbHN0U2VsZWN0IHsKICAgICAgICAgVUludDE2ICAg ICAgICAgICAgbGlzdElEOwogICAgICAgICBzdHJ1Y3QgTGlzdFR5cGUgCSpwTGlzdDsKICAgICAg ICAgSW50MTYgICAgICAgICAgICAgc2VsZWN0aW9uOwogICAgICAgICB9IGxzdFNlbGVjdDsKCiAg ICAgIHN0cnVjdCB0YmxFbnRlciB7CiAgICAgICAgIFVJbnQxNiAgICAgICAgICAgIHRhYmxlSUQ7 CiAgICAgICAgIHN0cnVjdCBUYWJsZVR5cGUJKnBUYWJsZTsKICAgICAgICAgSW50MTYgICAgICAg ICAgICAgcm93OwogICAgICAgICBJbnQxNiAgICAgICAgICAgICBjb2x1bW47CiAgICAgICAgIH0g dGJsRW50ZXI7CgogICAgICBzdHJ1Y3QgdGJsRXhpdCB7CiAgICAgICAgIFVJbnQxNiAgICAgICAg ICAgIHRhYmxlSUQ7CiAgICAgICAgIHN0cnVjdCBUYWJsZVR5cGUgCSpwVGFibGU7CiAgICAgICAg IEludDE2ICAgICAgICAgICAgIHJvdzsKICAgICAgICAgSW50MTYgICAgICAgICAgICAgY29sdW1u OwogICAgICAgICB9IHRibEV4aXQ7CgogICAgICBzdHJ1Y3QgdGJsU2VsZWN0IHsKICAgICAgICAg VUludDE2ICAgICAgICAgICAgdGFibGVJRDsKICAgICAgICAgc3RydWN0IFRhYmxlVHlwZSAJKnBU YWJsZTsKICAgICAgICAgSW50MTYgICAgICAgICAgICAgcm93OwogICAgICAgICBJbnQxNiAgICAg ICAgICAgICBjb2x1bW47CiAgICAgICAgIH0gdGJsU2VsZWN0OwoKICAgICAgc3RydWN0IGZybUxv YWQgewogICAgICAgICBVSW50MTYgICAgICAgICAgICBmb3JtSUQ7CiAgICAgICAgIH0gZnJtTG9h ZDsKCiAgICAgIHN0cnVjdCBmcm1PcGVuIHsKICAgICAgICAgVUludDE2ICAgICAgICAgICAgZm9y bUlEOwogICAgICAgICB9IGZybU9wZW47CgogICAgICBzdHJ1Y3QgZnJtR290byB7CiAgICAgICAg IFVJbnQxNiAgICAgICAgICAgIGZvcm1JRDsKICAgICAgICAgVUludDE2ICAgICAgICAgICAgcmVj b3JkTnVtOyAgICAgICAgIAogICAgICAgICBVSW50MTYgICAgICAgICAgICBtYXRjaFBvczsgICAg ICAgICAgCiAgICAgICAgIFVJbnQxNiAgICAgICAgICAgIG1hdGNoTGVuOyAgICAgICAgICAKICAg ICAgICAgVUludDE2ICAgICAgICAgICAgbWF0Y2hGaWVsZE51bTsgICAgIAogICAgICAgICBVSW50 MzIgICAgICAgICAgICBtYXRjaEN1c3RvbTsgICAgICAgCiAgICAgICAgIH0gZnJtR290bzsKCiAg ICAgIHN0cnVjdCBmcm1DbG9zZSB7CiAgICAgICAgIFVJbnQxNiAgICAgICAgICAgIGZvcm1JRDsK ICAgICAgICAgfSBmcm1DbG9zZTsKCiAgICAgIHN0cnVjdCBmcm1VcGRhdGUgewogICAgICAgICBV SW50MTYgICAgICAgICAgICBmb3JtSUQ7CiAgICAgICAgIFVJbnQxNiAgICAgICAgICAgIHVwZGF0 ZUNvZGU7ICAgICAgICAKICAgICAgICAgfSBmcm1VcGRhdGU7CgogICAgICBzdHJ1Y3QgZnJtVGl0 bGVFbnRlciB7CiAgICAgICAgIFVJbnQxNiAgICAgICAgICAgIGZvcm1JRDsKICAgICAgICAgfSBm cm1UaXRsZUVudGVyOwoKICAgICAgc3RydWN0IGZybVRpdGxlU2VsZWN0IHsKICAgICAgICAgVUlu dDE2ICAgICAgICAgICAgZm9ybUlEOwogICAgICAgICB9IGZybVRpdGxlU2VsZWN0OwoKICAgICAg IHN0cnVjdCBhdHRuSW5kaWNhdG9yRW50ZXIgewogICAgICAgICBVSW50MTYgICAgICAgICAgICBm b3JtSUQ7CiAgICAgIAl9IGF0dG5JbmRpY2F0b3JFbnRlcjsKCiAgICAgc3RydWN0IGF0dG5JbmRp Y2F0b3JTZWxlY3QgewogICAgICAgICBVSW50MTYgICAgICAgICAgICBmb3JtSUQ7CiAgICAgIAl9 IGF0dG5JbmRpY2F0b3JTZWxlY3Q7CgogICAgICBzdHJ1Y3QgZGF5U2VsZWN0IHsKICAgICAgICAg c3RydWN0IERheVNlbGVjdG9yVHlwZSAqcFNlbGVjdG9yOwogICAgICAgICBJbnQxNiAgICAgICAg ICAgICBzZWxlY3Rpb247CiAgICAgICAgIEJvb2xlYW4gICAgICAgICAgIHVzZVRoaXNEYXRlOwog ICAgICAgICBVSW50OCAgICAgICAgICAgICByZXNlcnZlZDE7CiAgICAgICAgIH0gZGF5U2VsZWN0 OwoKICAgICAgc3RydWN0IG1lbnUgewogICAgICAgICBVSW50MTYgICAgICAgICAgICBpdGVtSUQ7 CiAgICAgICAgIH0gbWVudTsKCiAgICAgIHN0cnVjdCBwb3BTZWxlY3QgewogICAgICAgICBVSW50 MTYgICAgICAgICAgICBjb250cm9sSUQ7CiAgICAgICAgIHN0cnVjdCBDb250cm9sVHlwZSAqY29u dHJvbFA7CiAgICAgICAgIFVJbnQxNiAgICAgICAgICAgIGxpc3RJRDsKICAgICAgICAgc3RydWN0 IExpc3RUeXBlIAkqbGlzdFA7CiAgICAgICAgIEludDE2ICAgICAgICAgICAgIHNlbGVjdGlvbjsK ICAgICAgICAgSW50MTYgICAgICAgICAgICAgcHJpb3JTZWxlY3Rpb247CiAgICAgICAgIH0gcG9w U2VsZWN0OwoKICAgICAgc3RydWN0IHNjbEVudGVyIHsKICAgICAgICAgVUludDE2ICAgICAgICAg ICAgc2Nyb2xsQmFySUQ7CiAgICAgICAgIHN0cnVjdCBTY3JvbGxCYXJUeXBlICpwU2Nyb2xsQmFy OwogICAgICAgICB9IHNjbEVudGVyOwoKICAgICAgc3RydWN0IHNjbEV4aXQgewogICAgICAgICBV SW50MTYgICAgICAgICAgICBzY3JvbGxCYXJJRDsKICAgICAgICAgc3RydWN0IFNjcm9sbEJhclR5 cGUgKnBTY3JvbGxCYXI7CiAgICAgICAgIEludDE2ICAgICAgICAgICAgIHZhbHVlOwogICAgICAg ICBJbnQxNiAgICAgICAgICAgICBuZXdWYWx1ZTsKICAgICAgICAgfSBzY2xFeGl0OwoKICAgICAg c3RydWN0IHNjbFJlcGVhdCB7CiAgICAgICAgIFVJbnQxNiAgICAgICAgICAgIHNjcm9sbEJhcklE OwogICAgICAgICBzdHJ1Y3QgU2Nyb2xsQmFyVHlwZSAqcFNjcm9sbEJhcjsKICAgICAgICAgSW50 MTYgICAgICAgICAgICAgdmFsdWU7CiAgICAgICAgIEludDE2ICAgICAgICAgICAgIG5ld1ZhbHVl OwogICAgICAgICBJbnQzMiAgICAgICAgICAgICB0aW1lOwogICAgICAgICB9IHNjbFJlcGVhdDsK CgkJc3RydWN0IG1lbnVDbWRCYXJPcGVuIHsKCQkJQm9vbGVhbiBwcmV2ZW50RmllbGRCdXR0b25z OyAgIAoJCQlVSW50OCAgIHJlc2VydmVkOwkJCQkJIAoJCQl9IG1lbnVDbWRCYXJPcGVuOwoJCQoJ CXN0cnVjdCBtZW51T3BlbiB7CgkJCVVJbnQxNgkJCQltZW51UnNjSUQ7CgkJCSAKCQkJSW50MTYJ CQkJCWNhdXNlOwoJCQl9IG1lbnVPcGVuOwoJCQoJCXN0cnVjdCBnYWRnZXRFbnRlciB7CiAgICAg ICAgIFVJbnQxNiAgICAgICAgICAgIGdhZGdldElEOwkJCSAKICAgICAgICAgc3RydWN0IEZvcm1H YWRnZXRUeXBlICoJZ2FkZ2V0UDsJCSAKCQkJfSBnYWRnZXRFbnRlcjsKCQkJCgkJc3RydWN0IGdh ZGdldE1pc2MgewogICAgICAgICBVSW50MTYgICAgICAgICAgICBnYWRnZXRJRDsJCQkgCiAgICAg ICAgIHN0cnVjdCBGb3JtR2FkZ2V0VHlwZSAqCWdhZGdldFA7CQkgCiAgICAgICAgIFVJbnQxNgkJ CQlzZWxlY3RvcjsKICAgICAgICAgdm9pZCAqCQkJCWRhdGFQOwoJCQl9IGdhZGdldE1pc2M7CgkJ CQogICAgICB9IGRhdGE7Cgp9IEV2ZW50VHlwZTsKCnR5cGVkZWYgRXZlbnRUeXBlICpFdmVudFB0 cjsKCiAKIAogCiAKIAoKCiMgMzQ0ICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0Nv cmUvVUkvRXZlbnQuaCIKCgoKCiMgNDYgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3Mv Q29yZS9TeXN0ZW0vU3lzdGVtTWdyLmgiIDIKCgoKCgogCgoKCiAKIAogCiAKIAoKIAogCiAKCgoK CgoKCgkKCSAKCgoKCgkKCQogCgoKCgogCiAKIAogCiAKIAogCiAKIAogCgoKIAoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIAogCgogCgoKCgoKCgoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJ CQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAK CQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJ CQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJ CQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoJ CQkJCQkJCQkJCQkJCQkgCgoKCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoJCQkJ CQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJ CQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkg CgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoKCgkJCQkJCQkJCQkJCQkJCSAKCQkJ CQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJ CQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJ IAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoJCQkJ CQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCgoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJ CQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJ CSAKCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJ CQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJ CQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJ IAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoJCQkJ CQkJCQkJCQkJCQkgCgoKCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJ CQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJ CSAKCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJ CQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJ CQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJ IAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCgoKCgkJCQkJCQkJCQkJCQkJCSAK CgoKCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoKCgkJCQkJCQkJCQkJCQkJCSAK CQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJ CQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJ CQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoJ CQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJ CQkJCQkJCQkgCgoKCQkJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCQkJCQogCiAKIAoK CgkJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCQkgCgoK CgoKCgoKCQkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJCSAKCgoJCQkJCQkJCQkJCQkJ CQkJIAoJCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkJ IAoKCgoKIAogCgogCgogCgoKCgoKCgoKCgoKCiAKIAoKIAoKIAoKIAogCgogCiAKCgoKCiAKIAog CiAKCgoKCgogCiAKIAoKCgkJCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkJCSAKCQkJ CQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkJCSAKCgoJ CQkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCQkJIAoJ CQkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJCQkKCgkJCQkJCQkJCQkJCQkJCQkJIAoJ CQkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCQkJIAoJ CQkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCQkJIAoK CgkJCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJCQkg CgkJCQkJCQkJCQkJCQkJCQkJIAoKCgkJCQkJCQkJCQkJCQkJCQkJIAoKCQkJCQkJCQkJCQkJCQkJ CQkKIAoKIAogCiAKCgogCiAKIAogCiAKIAogCiAKCgoKIAogCiAKCgoJCQkJCQkJCQkJCQkJCQkg CgoKCQkJCQkJCQkJCQkJCQkJIAoKCQkJCQkJCQkJCQkJCQkJIAoKCQkJCQkJCQkJCQkJCQkJIAoJ CQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJ CQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJ CQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCiAKCgoKCiAKIAogCiAKIAoK IAp0eXBlZGVmIHN0cnVjdCB7CglCb29sZWFuCQl1aUNvbWluZzsJCQkJCQkJIAoJCQkJCQkJCQkJ CQkJCQkgCglVSW50OAkJCXJlc2VydmVkMTsKCX0gU3lzQXBwTGF1bmNoQ21kU2F2ZURhdGFUeXBl OwoJCiAKdHlwZWRlZiBzdHJ1Y3QgewoJQm9vbGVhbgkJaGFyZFJlc2V0OwkJCQkJCQkgCglCb29s ZWFuCQljcmVhdGVEZWZhdWx0REI7CQkJCQkgCgl9IFN5c0FwcExhdW5jaENtZFN5c3RlbVJlc2V0 VHlwZTsKCQoKIAp0eXBlZGVmIHN0cnVjdCBTeXNBcHBMYXVuY2hDbWRJbml0RGF0YWJhc2VUeXBl IHsKCURtT3BlblJlZglkYlA7CQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJ CQkJCSAKCQkJCQkJCQkJCQkJCQkJIAoJVUludDMyCQljcmVhdG9yOwkJCQkJCQkJIAoJVUludDMy CQl0eXBlOwkJCQkJCQkJCSAKCVVJbnQxNgkJdmVyc2lvbjsJCQkJCQkJCSAKCX0gU3lzQXBwTGF1 bmNoQ21kSW5pdERhdGFiYXNlVHlwZTsKCgogCiAKIAp0eXBlZGVmIHN0cnVjdCBTeXNBcHBMYXVu Y2hDbWRTeW5jQ2FsbEFwcGxpY2F0aW9uVHlwZVYxMCB7CglVSW50MTYJCWFjdGlvbjsJCQkJCSAK CVVJbnQxNgkJcGFyYW1TaXplOwkJCQkgCgl2b2lkICoJCXBhcmFtUDsJCQkJCSAKCVVJbnQ4CQkJ cmVtb3RlU29ja2V0OwkJCSAKCVVJbnQ4CQkJdGlkOwkJCQkJCSAKCUJvb2xlYW4JCWhhbmRsZWQ7 CQkJCQkgCglVSW50OAkJCXJlc2VydmVkMTsKCX0gU3lzQXBwTGF1bmNoQ21kU3luY0NhbGxBcHBs aWNhdGlvblR5cGVWMTA7CgoKIAogCiAKdHlwZWRlZiBzdHJ1Y3QgU3lzQXBwTGF1bmNoQ21kSGFu ZGxlU3luY0NhbGxBcHBUeXBlIHsKCVVJbnQxNgkJcGJTaXplOwkJCQkJIAoJVUludDE2CQlhY3Rp b247CQkJCQkgCgl2b2lkICoJCXBhcmFtUDsJCQkJCSAKCVVJbnQzMgkJZHdQYXJhbVNpemU7CQkJ IAoJdm9pZCAqCQlkbFJlZlA7CQkJCQkgCgkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCglCb29s ZWFuCQloYW5kbGVkOwkJCQkJIAoJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJ CQkJIAoJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJ CQkgCgkKCVVJbnQ4CQkJcmVzZXJ2ZWQxOwoJCQkJCQkJCQkJCQoJRXJyCQkJcmVwbHlFcnI7CQkJ CSAKCQoJIAoJVUludDMyCQlkd1Jlc2VydmVkMTsJCQkgCglVSW50MzIJCWR3UmVzZXJ2ZWQyOwkJ CSAKCgkgCgkgCgkKCQlVSW50MzIJCWNyZWF0b3I7CgkJVUludDMyCQl0eXBlOwoJCgoJfSBTeXNB cHBMYXVuY2hDbWRIYW5kbGVTeW5jQ2FsbEFwcFR5cGU7CgogCnR5cGVkZWYgc3RydWN0IAoJewoJ VUludDMyCQljcmVhdG9yOwoJVUludDMyCQl0eXBlOwoJRXJyCQkJcmVzdWx0OwoJfSBTeXNBcHBM YXVuY2hDbWRGYWlsZWRBcHBOb3RpZnlUeXBlOwoJCgkKIAp0eXBlZGVmIHN0cnVjdCAKCXsKCVVJ bnQxNgkJY2FyZE5vOwoJTG9jYWxJRAkJZGJJRDsKCX0gU3lzQXBwTGF1bmNoQ21kT3BlbkRCVHlw ZTsKCQoKIAoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBTeXNBcHBJbmZvVHlwZSB7CglJ bnQxNgkJCQljbWQ7CQkJCQkJCSAKCU1lbVB0cgkJCWNtZFBCUDsJCQkJCQkgCglVSW50MTYJCQls YXVuY2hGbGFnczsJCQkJIAoJCglVSW50MzIJCQl0YXNrSUQ7CQkJCQkJIAoJTWVtSGFuZGxlCQlj b2RlSDsJCQkJCQkgCglEbU9wZW5SZWYJCWRiUDsJCQkJCQkJIAoJVUludDgJCQkJKnN0YWNrUDsJ CQkJCQkgCglVSW50OAkJCQkqZ2xvYmFsc0NodW5rUDsJCQkgCgoJVUludDE2CQkJbWVtT3duZXJJ RDsJCQkJCSAKCU1lbVB0cgkJCWRtQWNjZXNzUDsJCQkJCSAKCUVycgkJCQlkbUxhc3RFcnI7CQkJ CQkgCglNZW1QdHIJCQllcnJFeGNlcHRpb25QOwkJCQkgCgoJIAoJVUludDgJCQkJKmE1UHRyOwkJ CQkJCSAKCVVJbnQ4CQkJCSpzdGFja0VuZFA7CQkJCQkgCglVSW50OAkJCQkqZ2xvYmFsRW5kUDsJ CQkJIAoJc3RydWN0IFN5c0FwcEluZm9UeXBlICpyb290UDsJCQkJIAoJCQkJCQkJCQkJCQkJCSAK CU1lbVB0cgkJCWV4dHJhUDsJCQkJCQkgCgl9IFN5c0FwcEluZm9UeXBlOwp0eXBlZGVmIFN5c0Fw cEluZm9UeXBlICpTeXNBcHBJbmZvUHRyOwoKCiAKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAK dHlwZWRlZiBzdHJ1Y3QgU3lzTGliVGJsRW50cnlUeXBlIHsKCU1lbVB0cgkJKmRpc3BhdGNoVGJs UDsJCQkJCSAKCXZvaWQJCQkqZ2xvYmFsc1A7CQkJCQkJIAoJCgkgCglMb2NhbElECQlkYklEOwkJ CQkJCQkJIAoJdm9pZAkJCSpjb2RlUnNjSDsJCQkJCQkgCgl9IFN5c0xpYlRibEVudHJ5VHlwZTsK dHlwZWRlZiBTeXNMaWJUYmxFbnRyeVR5cGUqCVN5c0xpYlRibEVudHJ5UHRyOwoKIAogCgp0eXBl ZGVmIHN0cnVjdCBTaW1EaXNwYXRjaFRhYmxlVHlwZSB7CglVSW50MzIJbnVtRW50cmllczsJCQkJ CQkJIAoJdm9pZAkJKmVudHJpZXNbMV07CQkJCQkJIAoJCQkJCQkJCQkJCQkJCSAKICAgfSBTaW1E aXNwYXRjaFRhYmxlVHlwZTsKdHlwZWRlZiBTaW1EaXNwYXRjaFRhYmxlVHlwZSoJU2ltRGlzcGF0 Y2hUYWJsZVB0cjsKCgoKIAp0eXBlZGVmIEVyciAoKlN5c0xpYkVudHJ5UHJvY1B0cikoVUludDE2 IHJlZk51bSwgU3lzTGliVGJsRW50cnlQdHIgZW50cnlQKTsKCiAKCgogCgoKIAoKCgogCgoKIAp0 eXBlZGVmIHZvaWQgKCpTeXNUZXJtUHJvY1B0cikoVUludDMyIHRhc2tJRCwgSW50MzIgcmVhc29u KTsKCiAKdHlwZWRlZiB2b2lkICgqU3lzVGltZXJQcm9jUHRyKShJbnQzMiB0aW1lcklELCBJbnQz MiBwYXJhbSk7CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCiAKCgoKCgog CgoKCgogCgoKCgoKCgogCgoKCgoKCQkJIAoJCQkgCgkJCSAKCQkJIAoJCQkgCgkJCSAKCgoJCQkg CgoKCgoKCgkJCSAKCgoKCgoJCQkgCgkJCSAKCQkJIAoJCQkgCgkJCQoKCQkJIAoJCQkgCgkJCSAK CQkJIAoJCQkgCgkJCSAKCQkJIAoKCgkJCSAKCQkJIAoJCQkKCgoJCQkKCgkJCSAKCQkJIAoKCgkJ CSAKCQkJIAoJCQkgCgkJCQoKCQkJIAoKCgkJCSAKCgoJCQkgCgkJCSAKCQkJIAoJCQkgCgoKCQkJ IAoKCQkJIAoKCgoJCQkgCgkJCQoKCQkJCgoJCQkgCgkJCSAKCgoJCQkgCgkJCSAKCgoKCgoJCQkK IAoKCiAKCgoKIAoKCgogCgoKCgoKCiAKIAogCiAKCgoKCgoKCgoKCiAKIAogCiAKCgoKCgoKCgoK IAoKCiAKIAp0eXBlZGVmIGVudW0gewoJc3lzQmF0dGVyeUtpbmRBbGthbGluZT0wLAoJc3lzQmF0 dGVyeUtpbmROaUNhZCwKCXN5c0JhdHRlcnlLaW5kTGlJb24sCglzeXNCYXR0ZXJ5S2luZFJlY2hB bGssCglzeXNCYXR0ZXJ5S2luZE5pTUgsCglzeXNCYXR0ZXJ5S2luZExpSW9uMTQwMCwKCXN5c0Jh dHRlcnlLaW5kTGFzdD0weEZGICAgIAoJfSBTeXNCYXR0ZXJ5S2luZDsKCQogCnR5cGVkZWYgZW51 bSB7CglzeXNCYXR0ZXJ5U3RhdGVOb3JtYWw9MCwKCXN5c0JhdHRlcnlTdGF0ZUxvd0JhdHRlcnks CglzeXNCYXR0ZXJ5U3RhdGVDcml0QmF0dGVyeSwKCXN5c0JhdHRlcnlTdGF0ZVNodXRkb3duCgl9 IFN5c0JhdHRlcnlTdGF0ZTsKCgogCnR5cGVkZWYgc3RydWN0IAoJewoJQ2hhcgkJCW5hbWVbMzIg XTsKCVVJbnQzMgkJY3JlYXRvcjsKCVVJbnQzMgkJdHlwZTsKCVVJbnQxNgkJdmVyc2lvbjsKCUxv Y2FsSUQJCWRiSUQ7CglVSW50MTYgCQljYXJkTm87CglCaXRtYXBQdHIJaWNvblA7Cgl9IFN5c0RC TGlzdEl0ZW1UeXBlOwoJCgogCiAKIAogCnR5cGVkZWYgc3RydWN0IHsKCVVJbnQzMgkJZGF0YVsz XTsKCX0gU3lzTWFpbGJveE1zZ1R5cGU7CgkKCiAKCgoKIAoKCgoKCiAKCgoKCgoKCiAKCgojIDEx NzQgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vU3lzdGVtTWdy LmgiCgoKCgogCgoKCgoKCgoKCgoKCgojIDYwICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9J bmNzL0NvcmUvU3lzdGVtL1ByZWZlcmVuY2VzLmgiIDIKCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0v UGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9Mb2NhbGVNZ3IuaCIgMQogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgogCgoKCiAKCgoKIAoKCgogCgoK CiAKCgoKdHlwZWRlZiBVSW50MTYgTG1Mb2NhbGVTZXR0aW5nQ2hvaWNlOwoKIAoKCgogCgoKCgoJ CgoKIAoKCgogCgoKCiAKCgoKIAoKCgogCgoKCiAKCgoKIAoKCgogCgoKCiAKCgoKIAoKCgogCgoK CiAKCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoJCgoKCgoJCgoKCgoKIAoKCiAKdHlwZWRlZiBVSW50 MTYgTG1Sb3V0aW5lU2VsZWN0b3I7CgoKCgoKCgogCgoKCnR5cGVkZWYgVUludDggTGFuZ3VhZ2VU eXBlOwp0eXBlZGVmIFVJbnQ4IENvdW50cnlUeXBlOwoKdHlwZWRlZiBzdHJ1Y3QgX0xtTG9jYWxl VHlwZSBMbUxvY2FsZVR5cGU7CnN0cnVjdCBfTG1Mb2NhbGVUeXBlCnsKCVVJbnQxNglsYW5ndWFn ZTsJCSAKCVVJbnQxNgljb3VudHJ5OwkJCSAKfTsKCiAKCgoKIyAyMjggIi4uL1NyY1NoYXJlZC9Q YWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vTG9jYWxlTWdyLmgiCgoKCiMgNjEgIi4uL1Ny Y1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vUHJlZmVyZW5jZXMuaCIgMgoK IyAxICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvVUkvQXR0ZW50aW9uTWdy LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoJCgog CgoKCgoKCgoKCgoKCgoKCQkJCgkJCQogCgoKCnR5cGVkZWYgVUludDMyIEF0dG5GbGFnc1R5cGU7 CgoKCgoKCSAKCgoKCiAKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVm IFVJbnQxNiBBdHRuTGV2ZWxUeXBlOwoJCgkKCnR5cGVkZWYgVUludDE2IEF0dG5Db21tYW5kVHlw ZTsKCQoJCgkKCQoJCgkKCQoJCgp0eXBlZGVmIHVuaW9uIEF0dG5Db21tYW5kQXJnc1RhZyB7Cglz dHJ1Y3QgQXR0bkNvbW1hbmRBcmdzRHJhd0RldGFpbFRhZ3sKCQlSZWN0YW5nbGVUeXBlIGJvdW5k czsKCQlCb29sZWFuIGZpcnN0VGltZTsKCQlBdHRuRmxhZ3NUeXBlIGZsYWdzOwoJfSBkcmF3RGV0 YWlsOwoJCglzdHJ1Y3QgQXR0bkNvbW1hbmRBcmdzRHJhd0xpc3RUYWcgewoJCVJlY3RhbmdsZVR5 cGUgYm91bmRzOwoJCUJvb2xlYW4gZmlyc3RUaW1lOwoJCUF0dG5GbGFnc1R5cGUgZmxhZ3M7CgkJ Qm9vbGVhbiBzZWxlY3RlZDsKCX0gZHJhd0xpc3Q7CgkKCXN0cnVjdCBBdHRuQ29tbWFuZEFyZ3NH b3RJdFRhZyB7CgkJQm9vbGVhbiBkaXNtaXNzZWRCeVVzZXI7Cgl9IGdvdEl0OwoJCglzdHJ1Y3Qg QXR0bkNvbW1hbmRBcmdzSXRlcmF0ZVRhZyB7CgkJVUludDMyIGl0ZXJhdGlvbkRhdGE7Cgl9IGl0 ZXJhdGU7Cn0gQXR0bkNvbW1hbmRBcmdzVHlwZTsKCnR5cGVkZWYgc3RydWN0IHsKCUF0dG5Db21t YW5kVHlwZSBjb21tYW5kOwoJVUludDMyIHVzZXJEYXRhOwoJQXR0bkNvbW1hbmRBcmdzVHlwZSAq Y29tbWFuZEFyZ3NQOwp9IEF0dG5MYXVuY2hDb2RlQXJnc1R5cGU7Cgp0eXBlZGVmIEVyciBBdHRu Q2FsbGJhY2tQcm9jIChBdHRuQ29tbWFuZFR5cGUgY29tbWFuZCwgVUludDMyIHVzZXJEYXRhLCBB dHRuQ29tbWFuZEFyZ3NUeXBlICpjb21tYW5kQXJnc1ApOwoKIAp0eXBlZGVmIHN0cnVjdCB7CglB dHRuRmxhZ3NUeXBlIGZsYWdzOwp9IEF0dG5Ob3RpZnlEZXRhaWxzVHlwZTsKCgogCgoKIyAyMDcg Ii4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9VSS9BdHRlbnRpb25NZ3IuaCIK CgoKIyA2MiAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9QcmVm ZXJlbmNlcy5oIiAyCgoKIAoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCQoJ CgkKCgoJCgoKCgoKCQoJCgkKCgp0eXBlZGVmIGVudW0KCXsKCXVuaXRzRW5nbGlzaCA9IDAsCQkg Cgl1bml0c01ldHJpYwkJCQkgCgl9IE1lYXN1cmVtZW50U3lzdGVtVHlwZTsKCgogCiAKIAp0eXBl ZGVmIGVudW0gewoJc2xPbiA9IDAsCglzbE9mZiA9IDEKCX0gU291bmRMZXZlbFR5cGVWMjA7CgkK IAp0eXBlZGVmIGVudW0gewogICBuZXZlciA9IDAsCQkJCQkgCiAgIHVwb25Qb3dlck9mZiwJCQkJ IAogICBhdFByZXNldFRpbWUsCQkJCSAKICAgYWZ0ZXJQcmVzZXREZWxheQkJCQkgCiAgIH0gU2Vj dXJpdHlBdXRvTG9ja1R5cGU7CgoKIAogCnR5cGVkZWYgZW51bSB7CglhbE9mZiwJCQkJCQkJCQkg CglhbEV2ZW50c09ubHksCQkJCQkJCSAKCWFsRXZlbnRzQW5kUmFuZG9tLAkJCQkJIAoJYWxFdmVu dHNBbmRNb3JlUmFuZG9tCQkJCSAKCX0gQW5pbWF0aW9uTGV2ZWxUeXBlOwoKCnR5cGVkZWYgZW51 bSAKCXsKCXByZWZWZXJzaW9uLAoJcHJlZkNvdW50cnksCglwcmVmRGF0ZUZvcm1hdCwKCXByZWZM b25nRGF0ZUZvcm1hdCwKCXByZWZXZWVrU3RhcnREYXksCglwcmVmVGltZUZvcm1hdCwKCXByZWZO dW1iZXJGb3JtYXQsCglwcmVmQXV0b09mZkR1cmF0aW9uLAkJCQkJIAoJcHJlZlN5c1NvdW5kTGV2 ZWxWMjAsCQkJCSAKCXByZWZHYW1lU291bmRMZXZlbFYyMCwJCQkJIAoJcHJlZkFsYXJtU291bmRM ZXZlbFYyMCwJCQkJIAoJcHJlZkhpZGVQcml2YXRlUmVjb3Jkc1YzMywKCXByZWZEZXZpY2VMb2Nr ZWQsCglwcmVmTG9jYWxTeW5jUmVxdWlyZXNQYXNzd29yZCwKCXByZWZSZW1vdGVTeW5jUmVxdWly ZXNQYXNzd29yZCwKCXByZWZTeXNCYXR0ZXJ5S2luZCwKCXByZWZBbGxvd0Vhc3RlckVnZ3MsCglw cmVmTWludXRlc1dlc3RPZkdNVCwJCQkJIAoJcHJlZkRheWxpZ2h0U2F2aW5ncywJCQkJCSAKCXBy ZWZSb25hbWF0aWNDaGFyLAoJcHJlZkhhcmQxQ2hhckFwcENyZWF0b3IsCQkJIAoJcHJlZkhhcmQy Q2hhckFwcENyZWF0b3IsCQkJIAoJcHJlZkhhcmQzQ2hhckFwcENyZWF0b3IsCQkJIAoJcHJlZkhh cmQ0Q2hhckFwcENyZWF0b3IsCQkJIAoJcHJlZkNhbGNDaGFyQXBwQ3JlYXRvciwJCQkJIAoJcHJl ZkhhcmRDcmFkbGVDaGFyQXBwQ3JlYXRvciwJCSAKCXByZWZMYXVuY2hlckFwcENyZWF0b3IsCQkJ CSAKCXByZWZTeXNQcmVmRmxhZ3MsCQkKCXByZWZIYXJkQ3JhZGxlMkNoYXJBcHBDcmVhdG9yLAkg CglwcmVmQW5pbWF0aW9uTGV2ZWwsCgoJIAoJcHJlZlN5c1NvdW5kVm9sdW1lLAkJCQkJIAoJcHJl ZkdhbWVTb3VuZFZvbHVtZSwJCQkJCSAKCXByZWZBbGFybVNvdW5kVm9sdW1lLAkJCQkgCglwcmVm QmVhbVJlY2VpdmUsCQkJCQkJIAoJcHJlZkNhbGlicmF0ZURpZ2l0aXplckF0UmVzZXQsCSAKCXBy ZWZTeXN0ZW1LZXlib2FyZElELAkJCQkgCglwcmVmRGVmU2VyaWFsUGx1Z0luLAkJCQkJIAoKCSAK CXByZWZTdGF5T25XaGVuUGx1Z2dlZEluLAkJCSAKCXByZWZTdGF5TGl0V2hlblBsdWdnZWRJbiwJ CQkgCgoJIAoJcHJlZkFudGVubmFDaGFyQXBwQ3JlYXRvciwJCQkgCgoJIAoJcHJlZk1lYXN1cmVt ZW50U3lzdGVtLAkJCQkgCgkKCSAKCXByZWZTaG93UHJpdmF0ZVJlY29yZHMsCQkJCSAKCXByZWZB dXRvT2ZmRHVyYXRpb25TZWNzLAkJCSAKCQoJIAoJcHJlZlRpbWVab25lLAkJCQkJCQkgCglwcmVm RGF5bGlnaHRTYXZpbmdBZGp1c3RtZW50LAkJIAoKCXByZWZBdXRvTG9ja1R5cGUsCQkJCQkJIAoJ cHJlZkF1dG9Mb2NrVGltZSwJCQkJCQkgCglwcmVmQXV0b0xvY2tUaW1lRmxhZywgICAgCQkJIAoK CXByZWZMYW5ndWFnZSwJCQkJCQkJIAoJcHJlZkxvY2FsZSwJCQkJCQkJCSAKCQoJcHJlZlRpbWVa b25lQ291bnRyeSwJCQkJCSAKCQoJcHJlZkF0dGVudGlvbkZsYWdzLAkJCQkJIAoKCXByZWZEZWZh dWx0QXBwQ3JlYXRvcgkJCQkgCgoJfSBTeXN0ZW1QcmVmZXJlbmNlc0Nob2ljZTsKCQoJCnR5cGVk ZWYgc3RydWN0IHsKCVVJbnQxNiB2ZXJzaW9uOwkJCQkJCSAKCQoJIAoJQ291bnRyeVR5cGUgY291 bnRyeTsJCQkJCSAKCURhdGVGb3JtYXRUeXBlIGRhdGVGb3JtYXQ7CQkJIAoJRGF0ZUZvcm1hdFR5 cGUgbG9uZ0RhdGVGb3JtYXQ7CSAKCVVJbnQ4IHdlZWtTdGFydERheTsJCQkJCSAKCVRpbWVGb3Jt YXRUeXBlIHRpbWVGb3JtYXQ7CQkJIAoJTnVtYmVyRm9ybWF0VHlwZSBudW1iZXJGb3JtYXQ7CSAK CQoJIAoJVUludDggYXV0b09mZkR1cmF0aW9uOwkJCQkgCglTb3VuZExldmVsVHlwZVYyMCBzeXNT b3VuZExldmVsOwkJIAoJU291bmRMZXZlbFR5cGVWMjAgYWxhcm1Tb3VuZExldmVsOwkgCglCb29s ZWFuIGhpZGVTZWNyZXRSZWNvcmRzOwkJCSAKCQkJCQkJCQkJCQkJIAoJQm9vbGVhbiBkZXZpY2VM b2NrZWQ7CQkJCSAKCQkJCQkJCQkJCQkJIAoJVUludDggcmVzZXJ2ZWQxOwoJVUludDE2IHN5c1By ZWZGbGFnczsJCQkJCSAKCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkgCglTeXNCYXR0ZXJ5S2lu ZAlzeXNCYXR0ZXJ5S2luZDsJIAoJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCSAKCVVJbnQ4IHJl c2VydmVkMjsKCQoJfSBTeXN0ZW1QcmVmZXJlbmNlc1R5cGVWMTA7CgoKIAogCiAKIAogCiAKIAog Cgp0eXBlZGVmIHN0cnVjdCAKCXsKCVVJbnQxNiB2ZXJzaW9uOwkJCQkJCSAKCQoJIAoJQ291bnRy eVR5cGUgY291bnRyeTsJCQkJCSAKCURhdGVGb3JtYXRUeXBlIGRhdGVGb3JtYXQ7CQkJIAoJRGF0 ZUZvcm1hdFR5cGUgbG9uZ0RhdGVGb3JtYXQ7CSAKCUludDggd2Vla1N0YXJ0RGF5OwkJCQkJIAoJ VGltZUZvcm1hdFR5cGUgdGltZUZvcm1hdDsJCQkgCglOdW1iZXJGb3JtYXRUeXBlIG51bWJlckZv cm1hdDsJIAoJCgkgCglVSW50OCBhdXRvT2ZmRHVyYXRpb247CQkJCSAKCVNvdW5kTGV2ZWxUeXBl VjIwIHN5c1NvdW5kTGV2ZWxWMjA7CQkgCglTb3VuZExldmVsVHlwZVYyMCBnYW1lU291bmRMZXZl bFYyMDsJIAoJU291bmRMZXZlbFR5cGVWMjAgYWxhcm1Tb3VuZExldmVsVjIwOwkgCglCb29sZWFu IGhpZGVTZWNyZXRSZWNvcmRzOwkJCSAKCQkJCQkJCQkJCQkJIAoJQm9vbGVhbiBkZXZpY2VMb2Nr ZWQ7CQkJCSAKCQkJCQkJCQkJCQkJIAoJQm9vbGVhbiBsb2NhbFN5bmNSZXF1aXJlc1Bhc3N3b3Jk OwkgCglCb29sZWFuIHJlbW90ZVN5bmNSZXF1aXJlc1Bhc3N3b3JkOwkgCglVSW50MTYgc3lzUHJl ZkZsYWdzOwkJCQkJIAoJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJIAoJ U3lzQmF0dGVyeUtpbmQJc3lzQmF0dGVyeUtpbmQ7CSAKCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJ CQkgCglVSW50OCByZXNlcnZlZDE7CglVSW50MzIgbWludXRlc1dlc3RPZkdNVDsJCQkgCglEYXls aWdodFNhdmluZ3NUeXBlcwlkYXlsaWdodFNhdmluZ3M7CSAKCVVJbnQ4IHJlc2VydmVkMjsKCVVJ bnQxNiByb25hbWF0aWNDaGFyOwkJCQkgCgkJCQkJCQkJCQkJCSAKCVVJbnQzMgloYXJkMUNoYXJB cHBDcmVhdG9yOwkJIAoJCQkJCQkJCQkJCQkgCglVSW50MzIJaGFyZDJDaGFyQXBwQ3JlYXRvcjsJ CSAKCQkJCQkJCQkJCQkJIAoJVUludDMyCWhhcmQzQ2hhckFwcENyZWF0b3I7CQkgCgkJCQkJCQkJ CQkJCSAKCVVJbnQzMgloYXJkNENoYXJBcHBDcmVhdG9yOwkJIAoJCQkJCQkJCQkJCQkgCglVSW50 MzIJY2FsY0NoYXJBcHBDcmVhdG9yOwkJIAoJCQkJCQkJCQkJCQkgCglVSW50MzIJaGFyZENyYWRs ZUNoYXJBcHBDcmVhdG9yOwkgCgkJCQkJCQkJCQkJCSAKCVVJbnQzMglsYXVuY2hlckNoYXJBcHBD cmVhdG9yOwkJIAoJCQkJCQkJCQkJCQkgCglVSW50MzIJaGFyZENyYWRsZTJDaGFyQXBwQ3JlYXRv cjsJIAoJCQkJCQkJCQkJCQkgCglBbmltYXRpb25MZXZlbFR5cGUgYW5pbWF0aW9uTGV2ZWw7CSAK CQoJQm9vbGVhbgltYXNrUHJpdmF0ZVJlY29yZHM7CQkJIAoJCQkJCQkJCQkJCQkJIAoJCQkJCQkJ CQkJCQkJIAoJCQkJCQkJCQkJCQkJCgkKCSAKCVVJbnQxNiBzeXNTb3VuZFZvbHVtZTsJCQkJCSAK CVVJbnQxNiBnYW1lU291bmRWb2x1bWU7CQkJCQkgCglVSW50MTYgYWxhcm1Tb3VuZFZvbHVtZTsJ CQkJIAoJQm9vbGVhbiBiZWFtUmVjZWl2ZTsJCQkJCQkgCglCb29sZWFuIGNhbGlicmF0ZURpZ2l0 aXplckF0UmVzZXQ7CSAKCVVJbnQxNiBzeXN0ZW1LZXlib2FyZElEOwkJCQkgCglVSW50MzIgZGVm U2VyaWFsUGx1Z0luOwkJCQkJIAoKCSAKCUJvb2xlYW4gc3RheU9uV2hlblBsdWdnZWRJbjsJCQkg CglCb29sZWFuIHN0YXlMaXRXaGVuUGx1Z2dlZEluOwkJCSAKCgkgCglVSW50MzIJYW50ZW5uYUNo YXJBcHBDcmVhdG9yOwkJIAoJCQkJCQkJCQkJCQkJIAoKCSAKCU1lYXN1cmVtZW50U3lzdGVtVHlw ZSBtZWFzdXJlbWVudFN5c3RlbTsJIAoJVUludDgJCQkJCQlyZXNlcnZlZDM7CQkJCQoJVUludDE2 IGF1dG9PZmZEdXJhdGlvblNlY3M7CQkJCQkgCgkKCSAKCUludDE2IHRpbWVab25lOwkJCQkJCQkg CglJbnQxNglkYXlsaWdodFNhdmluZ0FkanVzdG1lbnQ7CQkgCglDb3VudHJ5VHlwZSB0aW1lWm9u ZUNvdW50cnk7CQkJIAoJU2VjdXJpdHlBdXRvTG9ja1R5cGUgIGF1dG9Mb2NrVHlwZTsJCSAKCVVJ bnQzMgkJCQlhdXRvTG9ja1RpbWU7CQkgCglCb29sZWFuCQkJCWF1dG9Mb2NrVGltZUZsYWc7CSAK CUxhbmd1YWdlVHlwZQkJbGFuZ3VhZ2U7CQkJIAoKCUF0dG5GbGFnc1R5cGUJCWF0dGVudGlvbkZs YWdzOwkJIAoJCglVSW50MzIJCQkJZGVmYXVsdEFwcENyZWF0b3I7CSAKCQkJCQkJCQkJCQkgCgl9 IFN5c3RlbVByZWZlcmVuY2VzVHlwZTsKCgoJCnR5cGVkZWYgU3lzdGVtUHJlZmVyZW5jZXNUeXBl ICpTeXN0ZW1QcmVmZXJlbmNlc1B0cjsKCgogCnR5cGVkZWYgc3RydWN0IHsKCVVJbnQxNiBrZXlD b2RlOwkJCQkJCSAKCVVJbnQzMiBjcmVhdG9yOwkJCQkJCSAKfSBCdXR0b25EZWZhdWx0QXBwVHlw ZTsKCnR5cGVkZWYgc3RydWN0IHsKCVVJbnQxNiBudW1CdXR0b25zOwkJCQkJIAoJQnV0dG9uRGVm YXVsdEFwcFR5cGUgYnV0dG9uWzFdOwkgCn0gQnV0dG9uRGVmYXVsdExpc3RUeXBlOwoKCiAKIAog CgojIDQyNiAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9QcmVm ZXJlbmNlcy5oIgoKCgojIDEwMSAiLi4vU3JjU2hhcmVkL1BhbG0uaCIgMgoKCQkKIAogCgkJCiMg MSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9TZXJpYWxNZ3Iu aCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgogCiAK IAoKCgoKCgoKCgoKIAoKCgoKCgoKCQkKCiAKCgoKIAoKCgkKCgoKCgoKCgoKCgoKCgoJCQkJCQkJ CQkJCQkJCQkJCQkJCSAKCgogCgoKCgkJCQkJCQkJCQkJCQoKCgogCgoKCgoKCgogCiAKIAoKCgoK CgoKCnR5cGVkZWYgc3RydWN0IERldmljZUluZm9UeXBlIHsKCVVJbnQzMiBzZXJEZXZDcmVhdG9y OwkJCQkJCQkJIAoJVUludDMyIHNlckRldkZ0ckluZm87CQkJCQkJCQkgCglVSW50MzIgc2VyRGV2 TWF4QmF1ZFJhdGU7CQkJCQkJCSAKCVVJbnQzMiBzZXJEZXZIYW5kc2hha2VCYXVkOwkJCQkJCSAK CUNoYXIgKnNlckRldlBvcnRJbmZvU3RyOwkJCQkJCQkgCglVSW50OCByZXNlcnZlZFs4XTsJCQkJ CQkJCQkgCn0gRGV2aWNlSW5mb1R5cGU7Cgp0eXBlZGVmIERldmljZUluZm9UeXBlICpEZXZpY2VJ bmZvUHRyOwoKCiAKCgoKdHlwZWRlZiB2b2lkICgqV2FrZXVwSGFuZGxlclByb2NQdHIpKFVJbnQz MiByZWZDb24pOwoKIAoKCgoKCgoKCgoKCnR5cGVkZWYgQm9vbGVhbiAoKkJsb2NraW5nSG9va1By b2NQdHIpICAoVUludDMyIHVzZXJSZWYpOwoKCiAKCgoKIAoKCnR5cGVkZWYgc3RydWN0IFNybUNh bGxiYWNrRW50cnlUeXBlIHsKCUJsb2NraW5nSG9va1Byb2NQdHIJZnVuY1A7CQkJCQkgCglVSW50 MzIJCQkJCXVzZXJSZWY7CQkJCQkgCn0gU3JtQ2FsbGJhY2tFbnRyeVR5cGU7CnR5cGVkZWYgU3Jt Q2FsbGJhY2tFbnRyeVR5cGUqCVNybUNhbGxiYWNrRW50cnlQdHI7CgoKdHlwZWRlZiBlbnVtIFNy bUN0bEVudW0gewoJc3JtQ3RsRmlyc3RSZXNlcnZlZCA9IDAsCQkgCgkKCXNybUN0bFNldEJhdWRS YXRlLAkJCQkgCgkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQoJc3JtQ3RsR2V0QmF1ZFJhdGUsCQkJ CSAKCQkJCQkJCQkJCQkKCXNybUN0bFNldEZsYWdzLAkJCQkJIAoJCglzcm1DdGxHZXRGbGFncywJ CQkJCSAKCQoJc3JtQ3RsU2V0Q3RzVGltZW91dCwJCQkJIAoJCglzcm1DdGxHZXRDdHNUaW1lb3V0 LAkJCQkgCgkKCXNybUN0bFN0YXJ0QnJlYWssCQkJCQkgCgkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJ CSAKCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCglzcm1DdGxTdG9wQnJlYWssCQkJCQkgCgkJCQkJ CQkJCQkJIAoKCXNybUN0bFN0YXJ0TG9jYWxMb29wYmFjaywJCSAKCQkJCQkJCQkJCQkgCgkJCQkJ CQkJCQkJCglzcm1DdGxTdG9wTG9jYWxMb29wYmFjaywJCSAKCQkJCQkJCQkJCQkgCgoKCXNybUN0 bElyREFFbmFibGUsCQkJCQkgCgkJCQkJCQkJCQkJIAoKCXNybUN0bElyREFEaXNhYmxlLAkJCQkg CgkJCQkJCQkJCQkJIAoKCXNybUN0bFJ4RW5hYmxlLAkJCQkJIAoJCglzcm1DdGxSeERpc2FibGUs CQkJCQkgCgoJc3JtQ3RsRW11U2V0QmxvY2tpbmdIb29rLAkJIAoJCQkJCQkJCQkJCSAKCQkJCQkJ CQkJCQkgCgkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJ IAoKCXNybUN0bFVzZXJEZWYsCQkJCQkJIAoJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkgCgkJCQkJ CQkJCQkJIAoJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkKCXNybUN0bEdldE9wdGltYWxUcmFuc21p dFNpemUsCSAKCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCSAKCQkJCQkJCQkJ CQkgCgkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCSAKCQoJc3JtQ3RsU2V0RFRSQXNzZXJ0ZWQsCQkJ IAoJCglzcm1DdGxHZXREVFJBc3NlcnRlZCwJCQkgCgkKCXNybUN0bExBU1QJCQkJCQkJIAoJCn0g U3JtQ3RsRW51bTsKCgoKIAoKCgoKCgoJCgoKCgoKIAogCiAKCnR5cGVkZWYgZW51bSB7CQkJCQkg CglzeXNTZXJpYWxJbnN0YWxsID0gMCwKCXN5c1NlcmlhbE9wZW4sCglzeXNTZXJpYWxPcGVuQmtn bmQsCQoJc3lzU2VyaWFsQ2xvc2UsCglzeXNTZXJpYWxTbGVlcCwKCXN5c1NlcmlhbFdha2UsCglz eXNTZXJpYWxHZXREZXZpY2VDb3VudCwKCXN5c1NlcmlhbEdldERldmljZUluZm8sCglzeXNTZXJp YWxHZXRTdGF0dXMsCglzeXNTZXJpYWxDbGVhckVyciwKCXN5c1NlcmlhbENvbnRyb2wsCglzeXNT ZXJpYWxTZW5kLAoJc3lzU2VyaWFsU2VuZFdhaXQsCglzeXNTZXJpYWxTZW5kQ2hlY2ssCglzeXNT ZXJpYWxTZW5kRmx1c2gsCglzeXNTZXJpYWxSZWNlaXZlLAoJc3lzU2VyaWFsUmVjZWl2ZVdhaXQs CglzeXNTZXJpYWxSZWNlaXZlQ2hlY2ssCglzeXNTZXJpYWxSZWNlaXZlRmx1c2gsCglzeXNTZXJp YWxTZXRSY3ZCdWZmZXIsCglzeXNTZXJpYWxSY3ZXaW5kb3dPcGVuLAoJc3lzU2VyaWFsUmN2V2lu ZG93Q2xvc2UsCglzeXNTZXJpYWxTZXRXYWtldXBIYW5kbGVyLAoJc3lzU2VyaWFsUHJpbWVXYWtl dXBIYW5kbGVyLAoJCgltYXhTZXJpYWxTZWxlY3RvciA9IHN5c1NlcmlhbFByaW1lV2FrZXVwSGFu ZGxlcgkJIAp9IHN5c1NlcmlhbFNlbGVjdG9yOwoJCgojIDM2OSAiLi4vU3JjU2hhcmVkL1BhbG0v UGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9TZXJpYWxNZ3IuaCIKCgoKIyAxMDUgIi4uL1NyY1No YXJlZC9QYWxtLmgiIDIKCgkJCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9D b3JlL1N5c3RlbS9TZXJpYWxMaW5rTWdyLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK IAogCiAKCgoKCgoKCiAKIAogCgoKCgoKCgogCiAKIAogCiAKIAogCiAKCiAKIAogCiAKIAoKdHlw ZWRlZglVSW50OAlTbGtQa3RIZWFkZXJDaGVja3N1bTsKCnR5cGVkZWYgc3RydWN0IFNsa1BrdEhl YWRlclR5cGUgewoJVUludDE2CQkJCQlzaWduYXR1cmUxOwkJCQkgCglVSW50OAkJCQkJCXNpZ25h dHVyZTI7CQkJCSAKCVVJbnQ4CQkJCQkJZGVzdDsJCQkJCQkgCglVSW50OAkJCQkJCXNyYzsJCQkJ CQkgCglVSW50OAkJCQkJCXR5cGU7CQkJCQkJIAoJVUludDE2CQkJCQlib2R5U2l6ZTsJCQkJIAoJ VUludDgJCQkJCQl0cmFuc0lkOwkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCglTbGtQa3RIZWFkZXJD aGVja3N1bQljaGVja3N1bTsJCQkJIAoJfSBTbGtQa3RIZWFkZXJUeXBlOwoKdHlwZWRlZiBTbGtQ a3RIZWFkZXJUeXBlKglTbGtQa3RIZWFkZXJQdHI7CgoKCgoKCgoKIAogCiAKdHlwZWRlZiBzdHJ1 Y3QgU2xrUGt0Rm9vdGVyVHlwZSB7CglVSW50MTYJCWNyYzE2OwkJCQkgCgl9IFNsa1BrdEZvb3Rl clR5cGU7Cgp0eXBlZGVmIFNsa1BrdEZvb3RlclR5cGUqCVNsa1BrdEZvb3RlclB0cjsKCgogCiAK IAogCiAKIAogCiAKdHlwZWRlZiBzdHJ1Y3QgU2xrV3JpdGVEYXRhVHlwZSB7CglVSW50MTYJc2l6 ZTsJCQkJCSAKCXZvaWQqCQlkYXRhUDsJCQkJIAoJfSBTbGtXcml0ZURhdGFUeXBlOwp0eXBlZGVm IFNsa1dyaXRlRGF0YVR5cGUqCVNsa1dyaXRlRGF0YVB0cjsKCgoKCiAKIAogCiAKIAoKIAogCiAK CgoKCiMgMTMyICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVtL1Nl cmlhbExpbmtNZ3IuaCIKCgoKCgoKIyAxNDggIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0lu Y3MvQ29yZS9TeXN0ZW0vU2VyaWFsTGlua01nci5oIgoKCgoKCgoKCgoKCgoKCgoJCgoKCQoKCgkK CgoKCgoKCgoKCgoKCgoKCgoKCiAKIAogCgoKCgoKIyAyMTAgIi4uL1NyY1NoYXJlZC9QYWxtL1Bs YXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vU2VyaWFsTGlua01nci5oIgoKCgoKCgojIDIzMCAiLi4v U3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9TZXJpYWxMaW5rTWdyLmgi CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCQkJCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkJCQkgCgoKCgogCgoK CnR5cGVkZWYJdm9pZCAoKlNsa1NvY2tldExpc3RlbmVyUHJvY1B0cikKCQkJKFNsa1BrdEhlYWRl clB0ciBoZWFkZXJQLCB2b2lkICpib2R5UCk7CgkJCQp0eXBlZGVmIHN0cnVjdCBTbGtTb2NrZXRM aXN0ZW5UeXBlIHsKCVNsa1NvY2tldExpc3RlbmVyUHJvY1B0ciAJbGlzdGVuZXJQOwoJU2xrUGt0 SGVhZGVyUHRyCQkJCWhlYWRlckJ1ZmZlclA7CQkgCgl2b2lkKgkJCQkJCQkJYm9keUJ1ZmZlclA7 CQkgCglVSW50MzIJCQkJCQkJYm9keUJ1ZmZlclNpemU7Cgl9IFNsa1NvY2tldExpc3RlblR5cGU7 CnR5cGVkZWYgU2xrU29ja2V0TGlzdGVuVHlwZSoJU2xrU29ja2V0TGlzdGVuUHRyOwoKCgogCgoK IyA0MzQgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9TeXN0ZW0vU2VyaWFs TGlua01nci5oIgoKCQoJCgojIDEwNiAiLi4vU3JjU2hhcmVkL1BhbG0uaCIgMgoKIAogCgkJCiMg MSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9Tb3VuZE1nci5o IiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgogCgogCgoKCgoKIAoKCgoKIAog CiAKdHlwZWRlZiBlbnVtIFNuZENtZElEVHlwZSB7CgkJCQkJCQkJCQoJc25kQ21kRnJlcUR1cmF0 aW9uQW1wID0gMSwJCSAKCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCSAKCQkJ CQkJCQkJCQkKCSAKCSAKCSAKCSAKCSAKCSAKCSAKCSAKCSAKCSAKCXNuZENtZE5vdGVPbiwJCQkJ CQkgCgkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJIAoJ CQkJCQkJCQkJCSAKCQoJc25kQ21kRnJxT24sCQkJCQkJIAoJCQkJCQkJCQkJCSAKCQkJCQkJCQkJ CQkgCgkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkgCgkKCXNuZENtZFF1aWV0 CQkJCQkJCSAKCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCSAKCgl9IFNuZENt ZElEVHlwZTsKCgoJCgogCiAKIAoKdHlwZWRlZiBzdHJ1Y3QgU25kQ29tbWFuZFR5cGUgewogClVJ bnQ4CWNtZDsJCQkJCQkgClVJbnQ4IAkJCXJlc2VydmVkOwpJbnQzMgkJCQlwYXJhbTE7CQkJCQkg ClVJbnQxNgkJCXBhcmFtMjsJCQkJCSAKVUludDE2CQkJcGFyYW0zOwkJCQkJIAp9IFNuZENvbW1h bmRUeXBlOwoKdHlwZWRlZiBTbmRDb21tYW5kVHlwZSoJCVNuZENvbW1hbmRQdHI7CgoKIAogCiAK CnR5cGVkZWYgZW51bSBTbmRTeXNCZWVwVHlwZSB7CglzbmRJbmZvID0gMSwKCXNuZFdhcm5pbmcs CglzbmRFcnJvciwKCXNuZFN0YXJ0VXAsCglzbmRBbGFybSwKCXNuZENvbmZpcm1hdGlvbiwKCXNu ZENsaWNrCgl9IFNuZFN5c0JlZXBUeXBlOwoKCiAKCgoKCiAKIAogCiAKIAogCiAKCnR5cGVkZWYg c3RydWN0IFNuZE1pZGlSZWNIZHJUeXBlIHsKCVVJbnQzMgkJc2lnbmF0dXJlOwkJCQkgCglVSW50 OAkJCWJEYXRhT2Zmc2V0OwkJCSAKCQkJCQkJCQkJCQkJIAoJVUludDgJCQlyZXNlcnZlZDsJCQkJ IAoJfSBTbmRNaWRpUmVjSGRyVHlwZTsKCnR5cGVkZWYgc3RydWN0IFNuZE1pZGlSZWNUeXBlIHsK CVNuZE1pZGlSZWNIZHJUeXBlCQloZHI7CQkJIAoJCQkJCQkJCQkJCQkgCglDaGFyCQkJbmFtZVsy XTsJCQkJCSAKCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCSAKCX0gU25k TWlkaVJlY1R5cGU7CgoKIAp0eXBlZGVmIHN0cnVjdCBTbmRNaWRpTGlzdEl0ZW1UeXBlCgl7CglD aGFyCQkJbmFtZVszMiBdOwkJCSAKCVVJbnQzMgkJdW5pcXVlUmVjSUQ7CglMb2NhbElECQlkYklE OwoJVUludDE2IAkJY2FyZE5vOwoJfSBTbmRNaWRpTGlzdEl0ZW1UeXBlOwoKCiAKdHlwZWRlZiBl bnVtIFNuZFNtZkNtZEVudW0gewoJc25kU21mQ21kUGxheSA9IDEsCQkJCQkgCglzbmRTbWZDbWRE dXJhdGlvbgkJCQkJCSAKCX0gU25kU21mQ21kRW51bTsKCnR5cGVkZWYgdm9pZCBTbmRDb21wbEZ1 bmNUeXBlKHZvaWQgKmNoYW5QLCBVSW50MzIgZHdVc2VyRGF0YSk7CnR5cGVkZWYgU25kQ29tcGxG dW5jVHlwZSAqU25kQ29tcGxGdW5jUHRyOwoKCiAKdHlwZWRlZiBCb29sZWFuIFNuZEJsb2NraW5n RnVuY1R5cGUodm9pZCAqY2hhblAsIFVJbnQzMiBkd1VzZXJEYXRhLCBJbnQzMiBzeXNUaWNrc0F2 YWlsYWJsZSk7CnR5cGVkZWYgU25kQmxvY2tpbmdGdW5jVHlwZSAqU25kQmxvY2tpbmdGdW5jUHRy OwoKdHlwZWRlZiBzdHJ1Y3QgU25kQ2FsbGJhY2tJbmZvVHlwZSB7CglNZW1QdHIJCWZ1bmNQOwkJ CSAKCVVJbnQzMglkd1VzZXJEYXRhOwkJIAoJfSBTbmRDYWxsYmFja0luZm9UeXBlOwoKCnR5cGVk ZWYgc3RydWN0IFNuZFNtZkNhbGxiYWNrc1R5cGUgewoJU25kQ2FsbGJhY2tJbmZvVHlwZQljb21w bGV0aW9uOwkJIAoJU25kQ2FsbGJhY2tJbmZvVHlwZQlibG9ja2luZzsJCSAKCVNuZENhbGxiYWNr SW5mb1R5cGUJcmVzZXJ2ZWQ7CQkgCgl9IFNuZFNtZkNhbGxiYWNrc1R5cGU7CgoKCgp0eXBlZGVm IHN0cnVjdCBTbmRTbWZPcHRpb25zVHlwZSB7CgkgCgkgCglVSW50MzIJZHdTdGFydE1pbGxpU2Vj OwkJCQkgCglVSW50MzIJZHdFbmRNaWxsaVNlYzsJCQkJCSAKCQkJCQkJCQkJCQkJCSAKCQkJCQkJ CQkJCQkJCSAKCQoJIAoJVUludDE2CWFtcGxpdHVkZTsJCQkJCQkgCgkJCQkJCQkJCQkJCQkgCgkJ CQkJCQkJCQkJCQkgCgkKCUJvb2xlYW4JaW50ZXJydXB0aWJsZTsJCQkJCSAKCQkJCQkJCQkJCQkJ CSAKCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQoJVUludDgJCXJl c2VydmVkMTsKCVVJbnQzMglyZXNlcnZlZDsJCQkJCQkgCgl9IFNuZFNtZk9wdGlvbnNUeXBlOwoK CnR5cGVkZWYgc3RydWN0IFNuZFNtZkNoYW5SYW5nZVR5cGUgewoJVUludDgJYkZpcnN0Q2hhbjsJ CQkJCQkJIAoJVUludDgJYkxhc3RDaGFuOwkJCQkJCQkgCgl9IFNuZFNtZkNoYW5SYW5nZVR5cGU7 CgoKCgogCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgojIDMwOCAiLi4vU3JjU2hhcmVkL1BhbG0vUGxh dGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9Tb3VuZE1nci5oIgoKCgoKIAoKCgoKCiMgMTA5ICIuLi9T cmNTaGFyZWQvUGFsbS5oIiAyCgogCgkJCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0v SW5jcy9Db3JlL1N5c3RlbS9TeXNFdnRNZ3IuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAK CgoKCgoKCiAKCgp0eXBlZGVmIGVudW0KewoJU2V0QXRMZWFzdCwJCSAKCVNldEV4YWN0bHksCQkg CglTZXRBdE1vc3QsCQkgCglTZXREZWZhdWx0LAkJIAoJUmVzZXRUaW1lcgkJIAoJCn0gRXZ0U2V0 QXV0b09mZkNtZDsKCgogCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgUGVuQnRuSW5mb1R5cGUgewoJUmVj dGFuZ2xlVHlwZQlib3VuZHNSOwkJCQkJCSAKCVdDaGFyCQkJCWFzY2lpQ29kZTsJCQkJCSAKCVVJ bnQxNgkJCWtleUNvZGU7CQkJCQkJIAoJVUludDE2CQkJbW9kaWZpZXJzOwkJCQkJIAoJfSBQZW5C dG5JbmZvVHlwZTsKdHlwZWRlZiBQZW5CdG5JbmZvVHlwZSogUGVuQnRuSW5mb1B0cjsKCQp0eXBl ZGVmIHN0cnVjdCBQZW5CdG5MaXN0VHlwZSB7CglVSW50MTYJCQludW1CdXR0b25zOwkJCQkJIAoJ UGVuQnRuSW5mb1R5cGUJYnV0dG9uc1sxXTsJCQkJCSAKCX0gUGVuQnRuTGlzdFR5cGU7CgoKIAoK CgoKIAogCiAKCgoKIAoKCgogCiAKIAp0eXBlZGVmIHN0cnVjdCBTaWxrc2NyZWVuQXJlYVR5cGUg ewoJUmVjdGFuZ2xlVHlwZQkJCWJvdW5kczsKCVVJbnQzMgkJCQkJYXJlYVR5cGU7CSAKCVVJbnQx NgkJCQkJaW5kZXg7Cgl9IFNpbGtzY3JlZW5BcmVhVHlwZTsKCQoKIAoKCiMgMjQxICIuLi9TcmNT aGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVtL1N5c0V2dE1nci5oIgoKCgogCgoK CgoKCgoKIyAxMTEgIi4uL1NyY1NoYXJlZC9QYWxtLmgiIDIKCgkJCgkJCgkJCiMgMSAiLi4vU3Jj U2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9TeXN0ZW1Qa3QuaCIgMQogCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAogCgogCiAKCgogCiAKIAoKCgogCgoKCgogCiAKIAoK IAoKCgoJCgogCnR5cGVkZWYgc3RydWN0IFN5c1BrdEJvZHlUeXBlIHsKCVVJbnQ4CWNvbW1hbmQ7 CVVJbnQ4CV9maWxsZXIgOwoJVUludDgJCQkJZGF0YVsoMjU2ICsxNikgLTJdOwoJfSBTeXNQa3RC b2R5VHlwZTsKdHlwZWRlZiBTeXNQa3RCb2R5VHlwZSoJU3lzUGt0Qm9keVB0cjsKCgoKIAogCiAK IAoKCgoKIAogCiAKCiAKIAogCgoKCiAKIAogCgoKCQkJCQp0eXBlZGVmIHN0cnVjdCBTeXNQa3RS ZWFkTWVtQ21kVHlwZSB7CglVSW50OAljb21tYW5kOwlVSW50OAlfZmlsbGVyIDsJCQkJCQkJCSAK CXZvaWQqCQkJCQlhZGRyZXNzOwkJCQkJCSAKCVVJbnQxNgkJCQkJbnVtQnl0ZXM7CQkJCQkgCgl9 IFN5c1BrdFJlYWRNZW1DbWRUeXBlOwp0eXBlZGVmIFN5c1BrdFJlYWRNZW1DbWRUeXBlKglTeXNQ a3RSZWFkTWVtQ21kUHRyOwoKdHlwZWRlZiBzdHJ1Y3QgU3lzUGt0UmVhZE1lbVJzcFR5cGUgewoJ VUludDgJY29tbWFuZDsJVUludDgJX2ZpbGxlciA7CQkJCQkJCQkgCgkgCgl9IFN5c1BrdFJlYWRN ZW1Sc3BUeXBlOwp0eXBlZGVmIFN5c1BrdFJlYWRNZW1Sc3BUeXBlKglTeXNQa3RSZWFkTWVtUnNw UHRyOwoKCiAKIAogCgoKCnR5cGVkZWYgc3RydWN0IFN5c1BrdFdyaXRlTWVtQ21kVHlwZSB7CglV SW50OAljb21tYW5kOwlVSW50OAlfZmlsbGVyIDsJCQkJCQkJCSAKCXZvaWQqCQkJCQlhZGRyZXNz OwkJCQkJCSAKCVVJbnQxNgkJCQludW1CeXRlczsJCQkJCSAKCSAKCX0gU3lzUGt0V3JpdGVNZW1D bWRUeXBlOwp0eXBlZGVmIFN5c1BrdFdyaXRlTWVtQ21kVHlwZSoJU3lzUGt0V3JpdGVNZW1DbWRQ dHI7Cgp0eXBlZGVmIHN0cnVjdCBTeXNQa3RXcml0ZU1lbVJzcFR5cGUgewoJVUludDgJY29tbWFu ZDsJVUludDgJX2ZpbGxlciA7CQkJCQkJCQkgCgl9IFN5c1BrdFdyaXRlTWVtUnNwVHlwZTsKdHlw ZWRlZiBTeXNQa3RXcml0ZU1lbVJzcFR5cGUqCVN5c1BrdFdyaXRlTWVtUnNwUHRyOwoKCiAKIAog CgogCgogCiAKIAoKCgogCiAKIAoKCgoKIAogCiAKCgoKIAogCiAKCiAKCgogCiAKIAoKCgp0eXBl ZGVmIHN0cnVjdCBTeXNQa3RSUENQYXJhbUluZm8gewoJVUludDggYnlSZWY7CQkJCQkJCSAKCVVJ bnQ4CXNpemU7CQkJCQkJCQkgCglVSW50MTYJZGF0YVsxXTsJCQkJCQkgCgl9IFN5c1BrdFJQQ1Bh cmFtVHlwZTsKCQp0eXBlZGVmIHN0cnVjdCBTeXNQa3RSUENUeXBlIHsKCVVJbnQ4CWNvbW1hbmQ7 CVVJbnQ4CV9maWxsZXIgOwkJCQkJIAoJVUludDE2CXRyYXBXb3JkOwkJCQkJIAoJVUludDMyCXJl c3VsdEQwOwkJCQkJIAoJVUludDMyCXJlc3VsdEEwOwkJCQkJIAoJVUludDE2CW51bVBhcmFtczsJ CQkJCSAKCSAKCVN5c1BrdFJQQ1BhcmFtVHlwZQlwYXJhbVsxXTsKCX0gU3lzUGt0UlBDVHlwZTsK CgogCiAKIAoKCgoKCgogCiAKIAogCiAKCgp0eXBlZGVmIHN0cnVjdCBTeXNQa3RSZW1vdGVVSVVw ZENtZFR5cGUgewoJVUludDgJY29tbWFuZDsJVUludDgJX2ZpbGxlciA7CQkJCQkJCQkgCgogICAK ICAJVUludDE2CXJvd0J5dGVzOwkJCQkJCSAKCVVJbnQxNglmcm9tWTsJCQkJCQkJIAoJVUludDE2 CWZyb21YOwkJCQkJCQkgCglVSW50MTYJdG9ZOwkJCQkJCQkJIAoJVUludDE2CXRvWDsJCQkJCQkJ CSAKCVVJbnQxNgloZWlnaHQ7CQkJCQkJCSAKCVVJbnQxNgl3aWR0aDsJCQkJCQkJIAoJCiAgIAog IAlVSW50MTYJcGl4ZWxzOwkJCQkJCQkgCgkKCX0gU3lzUGt0UmVtb3RlVUlVcGRDbWRUeXBlOwoK CgoKdHlwZWRlZiBzdHJ1Y3QgU3lzUGt0UmVtb3RlRXZ0Q21kVHlwZSB7CglVSW50OAljb21tYW5k OwlVSW50OAlfZmlsbGVyIDsJCQkJCQkgCgogICAKICAgCiAgIEJvb2xlYW4gCXBlbkRvd247CQkJ CQkJCSAKCVVJbnQ4IAlwYWRkaW5nMTsKICAJSW50MTYJCXBlblg7CQkJCQkJCQkgCiAgCUludDE2 CQlwZW5ZOwkJCQkJCQkJIAogIAkKICAJQm9vbGVhbglrZXlQcmVzczsJCQkJCQkgCglVSW50OCAJ cGFkZGluZzI7CiAgCVVJbnQxNglrZXlNb2RpZmllcnM7CQkJCQkgCiAgCVdDaGFyCQlrZXlBc2Np aTsJCQkJCQkgCiAgCVVJbnQxNglrZXlDb2RlOwkJCQkJCQkgCiAgCQoJfSBTeXNQa3RSZW1vdGVF dnRDbWRUeXBlOwoKCiAKIAogCgoKCgogCiAKIAogCiAKIAoKCgoKIAogCiAKCgoKdHlwZWRlZiBz dHJ1Y3QgU3lzUGt0Q29tbUNtZFR5cGUgewoJVUludDgJY29tbWFuZDsJVUludDgJX2ZpbGxlciA7 CQkJCQkJCQkgCglCb29sZWFuCQkJCQkJc2V0OwkJCQkJIAoJVUludDggCQkJCQkJcGFkZGluZzsK CVVJbnQzMgkJCQkJCWJhdWRSYXRlOwkJCSAKCVVJbnQzMgkJCQkJCWZsYWdzOwkJCQkgCgl9IFN5 c1BrdENvbW1DbWRUeXBlOwp0eXBlZGVmIFN5c1BrdENvbW1DbWRUeXBlICpTeXNQa3RDb21tQ21k UHRyOwoKdHlwZWRlZiBzdHJ1Y3QgU3lzUGt0Q29tbVJzcFR5cGUgewoJVUludDgJY29tbWFuZDsJ VUludDgJX2ZpbGxlciA7CQkJCQkJCQkgCglVSW50MzIJCQkJCQliYXVkUmF0ZTsJCQkgCglVSW50 MzIJCQkJCQlmbGFnczsJCQkJIAoJfSBTeXNQa3RDb21tUnNwVHlwZTsKdHlwZWRlZiBTeXNQa3RD b21tUnNwVHlwZSAqU3lzUGt0Q29tbVJzcFB0cjsKCgogCiAKIAoKCgoKCgogCiAKIAogCiAKCgp0 eXBlZGVmIHN0cnVjdCBTeXNQa3RHcmVtbGluc0NtZFR5cGUgewoJVUludDgJY29tbWFuZDsJVUlu dDgJX2ZpbGxlciA7CQkJCQkJCQkgCgogICAKICBVSW50MTYJYWN0aW9uOwogIFVJbnQ4CWRhdGFb MzJdOwoJCgl9IFN5c1BrdEdyZW1saW5zQ21kVHlwZTsKCQogCgoKCgogCiAKIAoKCgp0eXBlZGVm IHN0cnVjdCBTeXNQa3RGaW5kQ21kVHlwZSB7CglVSW50OAljb21tYW5kOwlVSW50OAlfZmlsbGVy IDsJCQkJCQkJCSAKCglVSW50MzIJZmlyc3RBZGRyOwkJCQkJCQkJIAoJVUludDMyCWxhc3RBZGRy OwkJCQkJCQkJIAoJVUludDE2CW51bUJ5dGVzOwkJCQkJCQkJIAoJQm9vbGVhbgljYXNlSW5zZW5z aXRpdmU7CQkJCQkJIAoJVUludDggCXBhZGRpbmc7Cgl9IFN5c1BrdEZpbmRDbWRUeXBlOwp0eXBl ZGVmIFN5c1BrdEZpbmRDbWRUeXBlKgkJCVN5c1BrdEZpbmRDbWRQdHI7Cgp0eXBlZGVmIHN0cnVj dCBTeXNQa3RGaW5kUnNwVHlwZSB7CglVSW50OAljb21tYW5kOwlVSW50OAlfZmlsbGVyIDsJCQkJ CQkJCSAKCiAgVUludDMyCQlhZGRyOwkJCQkJCQkJCQkgCiAgQm9vbGVhbglmb3VuZDsJCQkJCQkJ CQkgCiAgVUludDggCQlwYWRkaW5nOwoJCgl9IFN5c1BrdEZpbmRSc3BUeXBlOwp0eXBlZGVmIFN5 c1BrdEZpbmRSc3BUeXBlKgkJCVN5c1BrdEZpbmRSc3BQdHI7CgoKIAogCiAKIAogCiAKCgoKCgoK IAogCiAKIAoKCgp0eXBlZGVmIHN0cnVjdCBTeXNQa3RDaGVja3N1bVR5cGUgewoJVUludDgJY29t bWFuZDsJVUludDgJX2ZpbGxlciA7CQkJCQkJCQkgCgoJVUludDMyCWZpcnN0QWRkcjsJCQkJCQkJ CSAKCVVJbnQxNgludW1CeXRlczsJCQkJCQkJCSAKCVVJbnQxNglzZWVkOwkJCQkJCQkJCQkgCglV SW50MTYJY2hlY2tzdW07CQkJCQkJCQkgCgl9IFN5c1BrdENoZWNrc3VtVHlwZTsKdHlwZWRlZiBT eXNQa3RDaGVja3N1bVR5cGUqCVN5c1BrdENoZWNrc3VtUHRyOwoKCiAKIAogCiAKIAoKCgoKIAog CiAKCgoKIAogCiAKIAp0eXBlZGVmIHN0cnVjdCBTeXNQa3RSZW1vdGVNc2dDbWRUeXBlIHsKCVVJ bnQ4CWNvbW1hbmQ7CVVJbnQ4CV9maWxsZXIgOwkJCQkJCQkJIAoJIAoJfSBTeXNQa3RSZW1vdGVN c2dDbWRUeXBlOwp0eXBlZGVmIFN5c1BrdFJlbW90ZU1zZ0NtZFR5cGUgKlN5c1BrdFJlbW90ZU1z Z0NtZFB0cjsKCgoKCgogCgoKIyA0MjYgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3Mv Q29yZS9TeXN0ZW0vU3lzdGVtUGt0LmgiCgoKCgoKIyAxMTQgIi4uL1NyY1NoYXJlZC9QYWxtLmgi IDIKCiAKCQkKIyAxICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvU3lzdGVt L1RleHRNZ3IuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIAoKCgogCiAKdHlwZWRlZiBVSW50OCBDaGFyRW5jb2RpbmdUeXBlOwoK IAogCiAKdHlwZWRlZiBVSW50MTYgVHJhbnNsaXRPcFR5cGU7CgogCgoKCgoKCgogCiAKCgoKCQkJ CQkJCQkJCSAKCiAKIAoKCnR5cGVkZWYgc3RydWN0IHsKCVVJbnQ4CQlpb1NyY1N0YXRlWzMyIF07 CglVSW50OAkJaW9Ec3RTdGF0ZVszMiBdOwp9IFR4dENvbnZlcnRTdGF0ZVR5cGU7CgogCgoKCgoK IAogCiAKCgoKCgogCiAKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAogCiAKIAogCgoKIAoKCiAKCgoK CgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAogCgoKCiAKIAogCiAKCgoKCgoKIAoKCgojIDQwOSAi Li4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9UZXh0TWdyLmgiCgoK CiMgMTE2ICIuLi9TcmNTaGFyZWQvUGFsbS5oIiAyCgogCiAKCQkKCgkgCgoJCQoKIAogCiAKCQkK IyAxICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvVUkvQ29udHJvbC5oIiAx CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CglVSW50OCB1c2Fi bGUJCQkJOjE7CSAKCVVJbnQ4IGVuYWJsZWQJCQkJOjE7CSAKCVVJbnQ4IHZpc2libGUJCQkJOjE7 CSAKCVVJbnQ4IG9uCQkJCQkJOjE7CSAKCVVJbnQ4IGxlZnRBbmNob3IJCQk6MTsJIAoJICAgICAg ICAgICAgICAgICAgICAgICAgCQkgCiAgIFVJbnQ4IGZyYW1lCQkJCQk6MzsKCVVJbnQ4IGRyYXdu QXNTZWxlY3RlZAk6MTsJIAoJCQkJCQkJCQkJCSAKCVVJbnQ4IGdyYXBoaWNhbAkJCToxOwkgCglV SW50OCB2ZXJ0aWNhbAkJCQk6MTsJIAoJVUludDggcmVzZXJ2ZWQJCQkJOjU7Cn0gQ29udHJvbEF0 dHJUeXBlOwoKCmVudW0gY29udHJvbFN0eWxlcyB7YnV0dG9uQ3RsLCBwdXNoQnV0dG9uQ3RsLCBj aGVja2JveEN0bCwgcG9wdXBUcmlnZ2VyQ3RsLAoJCQkJCQkgIHNlbGVjdG9yVHJpZ2dlckN0bCwg cmVwZWF0aW5nQnV0dG9uQ3RsLCBzbGlkZXJDdGwsCgkJCQkJCSAgZmVlZGJhY2tTbGlkZXJDdGwg fTsKdHlwZWRlZiBlbnVtIGNvbnRyb2xTdHlsZXMgQ29udHJvbFN0eWxlVHlwZTsKCmVudW0gYnV0 dG9uRnJhbWVzIHtub0J1dHRvbkZyYW1lLCBzdGFuZGFyZEJ1dHRvbkZyYW1lLCBib2xkQnV0dG9u RnJhbWUsCgkJCQkJCSByZWN0YW5nbGVCdXR0b25GcmFtZX07CnR5cGVkZWYgZW51bSBidXR0b25G cmFtZXMgQnV0dG9uRnJhbWVUeXBlOwoKCnR5cGVkZWYgc3RydWN0IENvbnRyb2xUeXBlIHsKCVVJ bnQxNgkJCQkJaWQ7CglSZWN0YW5nbGVUeXBlCQkJYm91bmRzOwoJQ2hhciAqCQkJCSAgIHRleHQ7 CQoJQ29udHJvbEF0dHJUeXBlCQlhdHRyOwoJQ29udHJvbFN0eWxlVHlwZQkJc3R5bGU7CglGb250 SUQJCQkJCWZvbnQ7CglVSW50OAkJCQkJCWdyb3VwOwoJVUludDggCQkJCQlyZXNlcnZlZDsKfSBD b250cm9sVHlwZTsKCnR5cGVkZWYgQ29udHJvbFR5cGUgKiBQYWxtX0NvbnRyb2xQdHIgOwkJCQkg CgoKIAogCgp0eXBlZGVmIHN0cnVjdCBHcmFwaGljQ29udHJvbFR5cGUgewoJVUludDE2CQkJCQlp ZDsKCVJlY3RhbmdsZVR5cGUJCQlib3VuZHM7CglEbVJlc0lECQkJCQliaXRtYXBJRDsJCQkgCglE bVJlc0lECQkJCQlzZWxlY3RlZEJpdG1hcElEOwkgCglDb250cm9sQXR0clR5cGUJCWF0dHI7CglD b250cm9sU3R5bGVUeXBlCQlzdHlsZTsKCUZvbnRJRAkJCQkJdW51c2VkOwoJVUludDgJCQkJCQln cm91cDsKCVVJbnQ4IAkJCQkJcmVzZXJ2ZWQ7Cn0gR3JhcGhpY0NvbnRyb2xUeXBlOwoKCiAKIAoK dHlwZWRlZiBzdHJ1Y3QgU2xpZGVyQ29udHJvbFR5cGUgewoJVUludDE2CQkJCQlpZDsKCVJlY3Rh bmdsZVR5cGUJCQlib3VuZHM7CglEbVJlc0lECQkJCQl0aHVtYklEOwkJCSAKCURtUmVzSUQJCQkJ CWJhY2tncm91bmRJRDsJIAoJQ29udHJvbEF0dHJUeXBlCQlhdHRyOwkJCQkgCglDb250cm9sU3R5 bGVUeXBlCQlzdHlsZTsJCQkgCglVSW50OAkJCQkJCXJlc2VydmVkOwkJCglJbnQxNgkJCQkJCW1p blZhbHVlOwoJSW50MTYJCQkJCQltYXhWYWx1ZTsKCUludDE2CQkJCQkJcGFnZVNpemU7CglJbnQx NgkJCQkJCXZhbHVlOwoJTWVtUHRyCQkJCQlhY3RpdmVTbGlkZXJQOwp9IFNsaWRlckNvbnRyb2xU eXBlOwoKCiAKIAogCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQgQ3RsRHJhd0NvbnRyb2wg KENvbnRyb2xUeXBlICpjb250cm9sUCkKCQkJCQkJCSAgOwoKZXh0ZXJuIHZvaWQgQ3RsRXJhc2VD b250cm9sIChDb250cm9sVHlwZSAqY29udHJvbFApCgkJCQkJCQkgIDsKCmV4dGVybiB2b2lkIEN0 bEhpZGVDb250cm9sIChDb250cm9sVHlwZSAqY29udHJvbFApCgkJCQkJCQkgIDsKCmV4dGVybiB2 b2lkIEN0bFNob3dDb250cm9sIChDb250cm9sVHlwZSAqY29udHJvbFApCgkJCQkJCQkgIDsKCmV4 dGVybiBCb29sZWFuIEN0bEVuYWJsZWQgKGNvbnN0IENvbnRyb2xUeXBlICpjb250cm9sUCkKCQkJ CQkJCSAgOwoKZXh0ZXJuIHZvaWQgQ3RsU2V0RW5hYmxlZCAoQ29udHJvbFR5cGUgKmNvbnRyb2xQ LCBCb29sZWFuIHVzYWJsZSkKCQkJCQkJCSAgOwoKZXh0ZXJuIHZvaWQgQ3RsU2V0VXNhYmxlIChD b250cm9sVHlwZSAqY29udHJvbFAsIEJvb2xlYW4gdXNhYmxlKQoJCQkJCQkJICA7CgpleHRlcm4g SW50MTYgQ3RsR2V0VmFsdWUgKGNvbnN0IENvbnRyb2xUeXBlICpjb250cm9sUCkKCQkJCQkJCSAg OwoKZXh0ZXJuIHZvaWQgQ3RsU2V0VmFsdWUgKENvbnRyb2xUeXBlICpjb250cm9sUCwgSW50MTYg bmV3VmFsdWUpCgkJCQkJCQkgIDsKCmV4dGVybiBjb25zdCBDaGFyICpDdGxHZXRMYWJlbCAoY29u c3QgQ29udHJvbFR5cGUgKmNvbnRyb2xQKQoJCQkJCQkJICA7CgpleHRlcm4gdm9pZCBDdGxTZXRM YWJlbCAoQ29udHJvbFR5cGUgKmNvbnRyb2xQLCBjb25zdCBDaGFyICpuZXdMYWJlbCkKCQkJCQkJ CSAgOwoKZXh0ZXJuIHZvaWQgQ3RsU2V0R3JhcGhpY3MgKENvbnRyb2xUeXBlICpjdGxQLAoJRG1S ZXNJRCBuZXdCaXRtYXBJRCwgRG1SZXNJRCBuZXdTZWxlY3RlZEJpdG1hcElEKQoJCQkJCQkJICA7 CgpleHRlcm4gdm9pZCBDdGxTZXRTbGlkZXJWYWx1ZXMoQ29udHJvbFR5cGUgKmN0bFAsIGNvbnN0 IFVJbnQxNiAqbWluVmFsdWVQLCBjb25zdCBVSW50MTYgKm1heFZhbHVlUCwKCQkJCQljb25zdCBV SW50MTYgKnBhZ2VTaXplUCwgY29uc3QgVUludDE2ICp2YWx1ZVApCgkJCQkJCQkgIDsKCmV4dGVy biB2b2lkIEN0bEdldFNsaWRlclZhbHVlcyhjb25zdCBDb250cm9sVHlwZSAqY3RsUCwgVUludDE2 ICptaW5WYWx1ZVAsIFVJbnQxNiAqbWF4VmFsdWVQLAoJCQkJCVVJbnQxNiAqcGFnZVNpemVQLCBV SW50MTYgKnZhbHVlUCkKCQkJCQkJCSAgOwoKZXh0ZXJuIHZvaWQgQ3RsSGl0Q29udHJvbCAoY29u c3QgQ29udHJvbFR5cGUgKmNvbnRyb2xQKQoJCQkJCQkJICA7CgpleHRlcm4gQm9vbGVhbiBDdGxI YW5kbGVFdmVudCAoQ29udHJvbFR5cGUgKmNvbnRyb2xQLCBFdmVudFR5cGUgKnBFdmVudCkKCQkJ CQkJCSAgOwoKZXh0ZXJuIEJvb2xlYW4gQ3RsVmFsaWRhdGVQb2ludGVyIChjb25zdCBDb250cm9s VHlwZSAqY29udHJvbFApCgkJCQkJCQkgIDsKCmV4dGVybiBDb250cm9sVHlwZSAqQ3RsTmV3Q29u dHJvbCAodm9pZCAqKmZvcm1QUCwgVUludDE2IElELCAKIAlDb250cm9sU3R5bGVUeXBlIHN0eWxl LCBjb25zdCBDaGFyICp0ZXh0UCwgCglDb29yZCB4LCBDb29yZCB5LCBDb29yZCB3aWR0aCwgQ29v cmQgaGVpZ2h0LCAKCUZvbnRJRCBmb250LCBVSW50OCBncm91cCwgQm9vbGVhbiBsZWZ0QW5jaG9y KQoJCQkJCQkJICA7CgpleHRlcm4gR3JhcGhpY0NvbnRyb2xUeXBlICpDdGxOZXdHcmFwaGljQ29u dHJvbCAodm9pZCAqKmZvcm1QUCwgVUludDE2IElELCAKICAgQ29udHJvbFN0eWxlVHlwZSBzdHls ZSwgRG1SZXNJRCBiaXRtYXBJRCwgRG1SZXNJRCBzZWxlY3RlZEJpdG1hcElELCAKICAgQ29vcmQg eCwgQ29vcmQgeSwgQ29vcmQgd2lkdGgsIENvb3JkIGhlaWdodCwgCiAgIFVJbnQ4IGdyb3VwLCBC b29sZWFuIGxlZnRBbmNob3IpCgkJCQkJCQkgIDsKCmV4dGVybiBTbGlkZXJDb250cm9sVHlwZSAq Q3RsTmV3U2xpZGVyQ29udHJvbCAodm9pZCAqKmZvcm1QUCwgVUludDE2IElELCAKICAgQ29udHJv bFN0eWxlVHlwZSBzdHlsZSwgRG1SZXNJRCB0aHVtYklELCBEbVJlc0lEIGJhY2tncm91bmRJRCwg CiAgIENvb3JkIHgsIENvb3JkIHksIENvb3JkIHdpZHRoLCBDb29yZCBoZWlnaHQsIFVJbnQxNiBt aW5WYWx1ZSwgVUludDE2IG1heFZhbHVlLAogICBVSW50MTYgcGFnZVNpemUsIFVJbnQxNiB2YWx1 ZSkKCQkJCQkJCSAgOwoKCn0KCgoKCiMgMTI4ICIuLi9TcmNTaGFyZWQvUGFsbS5oIiAyCgogCgkJ CgkJCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1VJL0ZhdGFsQWxl cnQuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIyA0MSAiLi4vU3JjU2hhcmVkL1Bh bG0vUGxhdGZvcm0vSW5jcy9Db3JlL1VJL0ZhdGFsQWxlcnQuaCIKCgoKIyAxMzEgIi4uL1NyY1No YXJlZC9QYWxtLmgiIDIKCgkJCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9D b3JlL1VJL0ZpZWxkLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgogCmVudW0g anVzdGlmaWNhdGlvbnMge2xlZnRBbGlnbiwgY2VudGVyQWxpZ24sIHJpZ2h0QWxpZ259Owp0eXBl ZGVmIGVudW0ganVzdGlmaWNhdGlvbnMgSnVzdGlmaWNhdGlvblR5cGU7CgoKCgp0eXBlZGVmIGVu dW0geyB1bmRvTm9uZSwgdW5kb1R5cGluZywgdW5kb0JhY2tzcGFjZSwgdW5kb0RlbGV0ZSwKCQkJ CQl1bmRvUGFzdGUsIHVuZG9DdXQsIHVuZG9JbnB1dCB9IFVuZG9Nb2RlOwoKdHlwZWRlZiBzdHJ1 Y3QgewoJVW5kb01vZGUJCW1vZGU7CglVSW50OCAJCXJlc2VydmVkOwoJVUludDE2CQlzdGFydDsK CVVJbnQxNgkJZW5kOwoJVUludDE2CQlidWZmZXJMZW47CglDaGFyIAkJCSpidWZmZXI7Cgl9IEZp ZWxkVW5kb1R5cGU7CgoKdHlwZWRlZiBzdHJ1Y3QgewoJVUludDE2IHVzYWJsZQkJCToxOwkgCglV SW50MTYgdmlzaWJsZQkJCToxOwkgCglVSW50MTYgZWRpdGFibGUJCToxOwkgCglVSW50MTYgc2lu Z2xlTGluZQkJOjE7CSAKCVVJbnQxNiBoYXNGb2N1cyAgICAgIDoxOyAgICAKCVVJbnQxNiBkeW5h bWljU2l6ZQk6MTsgICAgCglVSW50MTYgaW5zUHRWaXNpYmxlCToxOwkgCglVSW50MTYgZGlydHkJ CQk6MTsJIAoJVUludDE2IHVuZGVybGluZWQJCToyOwkgCglVSW50MTYganVzdGlmaWNhdGlvbgk6 MjsJIAoJVUludDE2IGF1dG9TaGlmdAkJOjE7CSAKCVVJbnQxNiBoYXNTY3JvbGxCYXIJOjE7CSAK CVVJbnQxNiBudW1lcmljCQkJOjE7CSAKfSBGaWVsZEF0dHJUeXBlOwoKdHlwZWRlZiBGaWVsZEF0 dHJUeXBlICpGaWVsZEF0dHJQdHI7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgVUludDE2CXN0YXJ0OwkJ CSAKICBVSW50MTYJbGVuZ3RoOwkJCSAKfSBMaW5lSW5mb1R5cGU7Cgp0eXBlZGVmIExpbmVJbmZv VHlwZSAqTGluZUluZm9QdHI7CgoKdHlwZWRlZiBzdHJ1Y3QgRmllbGRUeXBlIHsKCVVJbnQxNgkJ CQlpZDsKCVJlY3RhbmdsZVR5cGUJCXJlY3Q7CglGaWVsZEF0dHJUeXBlCQlhdHRyOwoJQ2hhciAJ CQkJCSp0ZXh0OwkJCQkJIAoJTWVtSGFuZGxlCQkJdGV4dEhhbmRsZTsJCQkJIAoJTGluZUluZm9Q dHIJCQlsaW5lczsKCVVJbnQxNgkJCQl0ZXh0TGVuOwoJVUludDE2CQkJCXRleHRCbG9ja1NpemU7 CglVSW50MTYJCQkJbWF4Q2hhcnM7CglVSW50MTYJCQkJc2VsRmlyc3RQb3M7CglVSW50MTYJCQkJ c2VsTGFzdFBvczsKCVVJbnQxNgkJCQlpbnNQdFhQb3M7CglVSW50MTYJCQkJaW5zUHRZUG9zOwoJ Rm9udElECQkJCWZvbnRJRDsKCVVJbnQ4IAkJCQlyZXNlcnZlZDsKfSBGaWVsZFR5cGU7CgoKdHlw ZWRlZiBGaWVsZFR5cGUgKkZpZWxkUHRyOwkJCQkJIAoKCiAKIAogCgojIDI3MyAiLi4vU3JjU2hh cmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1VJL0ZpZWxkLmgiCgoKCiMgMTMyICIuLi9TcmNT aGFyZWQvUGFsbS5oIiAyCgoJCQojIDEgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3Mv Q29yZS9VSS9GaW5kLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgc3Ry dWN0IHsKCVVJbnQxNgkJCWFwcENhcmRObzsJCQkgCglMb2NhbElECQkJYXBwRGJJRDsJCQkJIAoJ Qm9vbGVhbgkJCWZvdW5kSW5DYWxsZXI7CQkgCglVSW50OCAJCQlyZXNlcnZlZDsKCglVSW50MTYJ CQlkYkNhcmRObzsJCQkgCglMb2NhbElECQkJZGJJRDsJCQkJCSAKCVVJbnQxNiAJCQlyZWNvcmRO dW07CQkJIAoJVUludDE2CQkJbWF0Y2hQb3M7CQkJIAoJVUludDE2CQkJbWF0Y2hGaWVsZE51bTsJ CSAKCVVJbnQzMgkJCW1hdGNoQ3VzdG9tOwkJIAoJfSBGaW5kTWF0Y2hUeXBlOwoKdHlwZWRlZiBG aW5kTWF0Y2hUeXBlICpGaW5kTWF0Y2hQdHI7Cgp0eXBlZGVmIHN0cnVjdCB7CgoJIAoJVUludDE2 CQkJZGJBY2Nlc01vZGU7CQkgCglVSW50MTYgCQkJcmVjb3JkTnVtOwkJCSAKCUJvb2xlYW4JCQlt b3JlOwkJCQkJIAoJQ2hhcgkJCQlzdHJBc1R5cGVkIFsxNiArMV07CSAKCUNoYXIJCQkJc3RyVG9G aW5kIFsxNiArMV07CSAKCVVJbnQ4IAkJCXJlc2VydmVkMTsKCgoJIAoJIAoJIAoJVUludDE2CQkJ bnVtTWF0Y2hlczsJCQkgCglVSW50MTYJCQlsaW5lTnVtYmVyOwkJCSAKCUJvb2xlYW4JCQljb250 aW51YXRpb247CQkgCglCb29sZWFuCQkJc2VhcmNoZWRDYWxsZXI7CSAKCglMb2NhbElECQkJY2Fs bGVyQXBwRGJJRDsJCSAKCVVJbnQxNgkJCWNhbGxlckFwcENhcmRObzsJIAoKCUxvY2FsSUQJCQlh cHBEYklEOwkJCQkgCglVSW50MTYJCQlhcHBDYXJkTm87CQkJIAoJCglCb29sZWFuCQkJbmV3U2Vh cmNoOwkJCSAKCVVJbnQ4IAkJCXJlc2VydmVkMjsKCURtU2VhcmNoU3RhdGVUeXBlCXNlYXJjaFN0 YXRlOwkgCglGaW5kTWF0Y2hUeXBlCW1hdGNoIFs5IF07Cn0gRmluZFBhcmFtc1R5cGU7Cgp0eXBl ZGVmIEZpbmRQYXJhbXNUeXBlICpGaW5kUGFyYW1zUHRyOwoKCiAKdHlwZWRlZiBzdHJ1Y3QgewoJ SW50MTYJCQkJc2VhcmNoU3RyTGVuOwkJIAoJVUludDE2CQkJZGJDYXJkTm87CQkJIAoJTG9jYWxJ RAkJCWRiSUQ7CQkJCQkgCglVSW50MTYgCQkJcmVjb3JkTnVtOwkJCSAKCVVJbnQxNgkJCW1hdGNo UG9zOwkJCSAKCVVJbnQxNgkJCW1hdGNoRmllbGROdW07CQkgCglVSW50MzIJCQltYXRjaEN1c3Rv bTsJCSAKCX0gR29Ub1BhcmFtc1R5cGU7Cgp0eXBlZGVmIEdvVG9QYXJhbXNUeXBlICpHb1RvUGFy YW1zUHRyOwoKCiAKIAogCgojIDEyMiAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9D b3JlL1VJL0ZpbmQuaCIKCgoKIyAxMzMgIi4uL1NyY1NoYXJlZC9QYWxtLmgiIDIKCiAKCQkKIyAx ICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvVUkvRm9ybS5oIiAxCiAKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3Mv Q29yZS9VSS9MaXN0LmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAoKdHlw ZWRlZiBzdHJ1Y3QgewoJVUludDE2IHVzYWJsZQkJCQk6MTsJCSAKCVVJbnQxNiBlbmFibGVkCQkJ CToxOwkJIAoJVUludDE2IHZpc2libGUJCQkJOjE7CQkgCiAgIFVJbnQxNiBwb3BwZWRVcAkJCTox OyAgICAgCSAKCVVJbnQxNiBoYXNTY3JvbGxCYXIJCToxOwkJIAoJVUludDE2IHNlYXJjaAkJCQk6 MTsJCSAKICAgVUludDE2IHJlc2VydmVkCQkJOjI7Cn0gTGlzdEF0dHJUeXBlOwoKCiAKdHlwZWRl ZiB2b2lkIExpc3REcmF3RGF0YUZ1bmNUeXBlIChJbnQxNiBpdGVtTnVtLCBSZWN0YW5nbGVUeXBl ICpib3VuZHMsIAoJQ2hhciAqKml0ZW1zVGV4dCk7CgkKdHlwZWRlZiBMaXN0RHJhd0RhdGFGdW5j VHlwZSAqTGlzdERyYXdEYXRhRnVuY1B0cjsKCgp0eXBlZGVmIHN0cnVjdCBMaXN0VHlwZSB7CglV SW50MTYJCQkJCWlkOwogICBSZWN0YW5nbGVUeXBlCQkJYm91bmRzOwogICBMaXN0QXR0clR5cGUJ CQlhdHRyOwogICBDaGFyICoJCQkJCSppdGVtc1RleHQ7CiAgIEludDE2CQkJCQkJbnVtSXRlbXM7 ICAgICAgICAJCSAKICAgSW50MTYgCSAgCQkJCWN1cnJlbnRJdGVtOyAgICAgCQkgCiAgIEludDE2 ICAgCQkJCQl0b3BJdGVtOyAgICAgICAgIAkJIAogICBGb250SUQgICAgICAgICAgIAkJZm9udDsJ CQkJCQkgCglVSW50OCAJCQkJCXJlc2VydmVkOwoJV2luSGFuZGxlICAgCQkJcG9wdXBXaW47CQkJ CSAKICAgTGlzdERyYXdEYXRhRnVuY1B0cglkcmF3SXRlbXNDYWxsYmFjazsJIAp9IExpc3RUeXBl OwoKdHlwZWRlZiBMaXN0VHlwZSAqIFBhbG1fTGlzdFB0ciA7CgoKIAogCiAKCmV4dGVybiAiQyIg ewoKCmV4dGVybiB2b2lkIExzdERyYXdMaXN0IChMaXN0VHlwZSAqbGlzdFApCgkJCQkJCQkgIDsK CmV4dGVybiB2b2lkIExzdEVyYXNlTGlzdCAoTGlzdFR5cGUgKmxpc3RQKQoJCQkJCQkJICA7Cgpl eHRlcm4gSW50MTYgTHN0R2V0U2VsZWN0aW9uIChjb25zdCBMaXN0VHlwZSAqbGlzdFApCgkJCQkJ CQkgIDsKCmV4dGVybiBDaGFyICogTHN0R2V0U2VsZWN0aW9uVGV4dCAoY29uc3QgTGlzdFR5cGUg Kmxpc3RQLCBJbnQxNiBpdGVtTnVtKQoJCQkJCQkJICA7CgpleHRlcm4gQm9vbGVhbiBMc3RIYW5k bGVFdmVudCAoTGlzdFR5cGUgKmxpc3RQLCBjb25zdCBFdmVudFR5cGUgKmV2ZW50UCkKCQkJCQkJ CSAgOwoKZXh0ZXJuIHZvaWQgTHN0U2V0SGVpZ2h0IChMaXN0VHlwZSAqbGlzdFAsIEludDE2IHZp c2libGVJdGVtcykKCQkJCQkJCSAgOwoKZXh0ZXJuIHZvaWQgTHN0U2V0UG9zaXRpb24gKExpc3RU eXBlICpsaXN0UCwgQ29vcmQgeCwgQ29vcmQgeSkKCQkJCQkJCSAgOwoKZXh0ZXJuIHZvaWQgTHN0 U2V0U2VsZWN0aW9uIChMaXN0VHlwZSAqbGlzdFAsIEludDE2IGl0ZW1OdW0pCgkJCQkJCQkgIDsK CmV4dGVybiB2b2lkIExzdFNldExpc3RDaG9pY2VzIChMaXN0VHlwZSAqbGlzdFAsIENoYXIgKipp dGVtc1RleHQsIEludDE2IG51bUl0ZW1zKQoJCQkJCQkJICA7CgpleHRlcm4gdm9pZCBMc3RTZXRE cmF3RnVuY3Rpb24gKExpc3RUeXBlICpsaXN0UCwgTGlzdERyYXdEYXRhRnVuY1B0ciBmdW5jKQoJ CQkJCQkJICA7CgpleHRlcm4gdm9pZCBMc3RTZXRUb3BJdGVtIChMaXN0VHlwZSAqbGlzdFAsIElu dDE2IGl0ZW1OdW0pCgkJCQkJCQkgIDsKCmV4dGVybiB2b2lkIExzdE1ha2VJdGVtVmlzaWJsZSAo TGlzdFR5cGUgKmxpc3RQLCBJbnQxNiBpdGVtTnVtKQoJCQkJCQkJICA7CgpleHRlcm4gSW50MTYg THN0R2V0TnVtYmVyT2ZJdGVtcyAoY29uc3QgTGlzdFR5cGUgKmxpc3RQKQoJCQkJCQkJICA7Cgpl eHRlcm4gSW50MTYgTHN0UG9wdXBMaXN0IChMaXN0VHlwZSAqbGlzdFApCgkJCQkJCQkgIDsKCmV4 dGVybiBCb29sZWFuIExzdFNjcm9sbExpc3QoTGlzdFR5cGUgKmxpc3RQLCBXaW5EaXJlY3Rpb25U eXBlIGRpcmVjdGlvbiwgSW50MTYgaXRlbUNvdW50KQoJCQkJCQkJICA7CgpleHRlcm4gSW50MTYg THN0R2V0VmlzaWJsZUl0ZW1zIChjb25zdCBMaXN0VHlwZSAqbGlzdFApCgkJCQkJCQkgIDsKCmV4 dGVybiBFcnIgTHN0TmV3TGlzdCAodm9pZCAqKmZvcm1QUCwgVUludDE2IGlkLCAKCUNvb3JkIHgs IENvb3JkIHksIENvb3JkIHdpZHRoLCBDb29yZCBoZWlnaHQsIAoJRm9udElEIGZvbnQsIEludDE2 IHZpc2libGVJdGVtcywgSW50MTYgdHJpZ2dlcklkKQoJCQkJCQkJICA7CgoKCgp9CgoKCiMgMjUg Ii4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0luY3MvQ29yZS9VSS9Gb3JtLmgiIDIKCiMgMSAi Li4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1VJL1Njcm9sbEJhci5oIiAxCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGVudW0geyBzY2xVcEFycm93LCBzY2xEb3du QXJyb3csIHNjbFVwUGFnZSwgc2NsRG93blBhZ2UsIHNjbENhciB9IAoJU2Nyb2xsQmFyUmVnaW9u VHlwZTsKCgp0eXBlZGVmIHN0cnVjdCB7CglVSW50MTYgdXNhYmxlCQkJOjE7CQkgCglVSW50MTYg dmlzaWJsZQkJCToxOwkJIAoJVUludDE2IGhpbGlnaHRlZAkJOjE7CQkgCglVSW50MTYgc2hvd24J CQk6MTsJCSAKCVVJbnQxNiBhY3RpdmVSZWdpb24JOjQ7CQkgCn0gU2Nyb2xsQmFyQXR0clR5cGU7 CgoKdHlwZWRlZiBzdHJ1Y3QgU2Nyb2xsQmFyVHlwZSB7CglSZWN0YW5nbGVUeXBlCQlib3VuZHM7 CglVSW50MTYJCQkJaWQ7CglTY3JvbGxCYXJBdHRyVHlwZQlhdHRyOwoJSW50MTYJCQkJCXZhbHVl OwoJSW50MTYJCQkJCW1pblZhbHVlOwoJSW50MTYJCQkJCW1heFZhbHVlOwoJSW50MTYJCQkJCXBh Z2VTaXplOwoJSW50MTYJCQkJCXBlblBvc0luQ2FyOwoJSW50MTYJCQkJCXNhdmVQb3M7Cn0gU2Ny b2xsQmFyVHlwZTsKCnR5cGVkZWYgU2Nyb2xsQmFyVHlwZSAqU2Nyb2xsQmFyUHRyOwoKIyA3NCAi Li4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1VJL1Njcm9sbEJhci5oIgoKCgoK IyAyNiAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1VJL0Zvcm0uaCIgMgoK IyAxICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvVUkvVGFibGUuaCIgMQog CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAoKCgoKCgoKCiAKIAplbnVtIHRhYmxlSXRlbVN0 eWxlcyB7IGNoZWNrYm94VGFibGVJdGVtLCAKICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21U YWJsZUl0ZW0sIAogICAgICAgICAgICAgICAgICAgICAgIGRhdGVUYWJsZUl0ZW0sIAogICAgICAg ICAgICAgICAgICAgICAgIGxhYmVsVGFibGVJdGVtLAogICAgICAgICAgICAgICAgICAgICAgIG51 bWVyaWNUYWJsZUl0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgcG9wdXBUcmlnZ2VyVGFibGVJ dGVtLAogICAgICAgICAgICAgICAgICAgICAgIHRleHRUYWJsZUl0ZW0sCiAgICAgICAgICAgICAg ICAgICAgICAgdGV4dFdpdGhOb3RlVGFibGVJdGVtLAogICAgICAgICAgICAgICAgICAgICAgIHRp bWVUYWJsZUl0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgbmFycm93VGV4dFRhYmxlSXRlbQog ICAgICAgICAgICAgICAgICAgICAgIH07CnR5cGVkZWYgZW51bSB0YWJsZUl0ZW1TdHlsZXMgVGFi bGVJdGVtU3R5bGVUeXBlOwoKCnR5cGVkZWYgc3RydWN0IHsKCVRhYmxlSXRlbVN0eWxlVHlwZQlp dGVtVHlwZTsJCQogICBGb250SUQJCQkJCWZvbnRJRDsJCSAKCUludDE2CQkJCQkJaW50VmFsdWU7 CglDaGFyICogIAkJCQkJcHRyOwp9IFRhYmxlSXRlbVR5cGU7CnR5cGVkZWYgVGFibGVJdGVtVHlw ZSAqVGFibGVJdGVtUHRyOwoKCiAKdHlwZWRlZiB2b2lkIFRhYmxlRHJhd0l0ZW1GdW5jVHlwZSAg CgkJKHZvaWQgKnRhYmxlUCwgSW50MTYgcm93LCBJbnQxNiBjb2x1bW4sIFJlY3RhbmdsZVR5cGUg KmJvdW5kcyk7Cgp0eXBlZGVmIFRhYmxlRHJhd0l0ZW1GdW5jVHlwZSAqVGFibGVEcmF3SXRlbUZ1 bmNQdHI7CgoKIAp0eXBlZGVmIEVyciBUYWJsZUxvYWREYXRhRnVuY1R5cGUgCgkJKHZvaWQgKnRh YmxlUCwgSW50MTYgcm93LCBJbnQxNiBjb2x1bW4sIEJvb2xlYW4gZWRpdGFibGUsIAoJCU1lbUhh bmRsZSAqIGRhdGFILCBJbnQxNiAqZGF0YU9mZnNldCwgSW50MTYgKmRhdGFTaXplLCBGaWVsZFB0 ciBmbGQpOwoKdHlwZWRlZiBUYWJsZUxvYWREYXRhRnVuY1R5cGUgKlRhYmxlTG9hZERhdGFGdW5j UHRyOwoKCiAKdHlwZWRlZglCb29sZWFuIFRhYmxlU2F2ZURhdGFGdW5jVHlwZQoJCSh2b2lkICp0 YWJsZVAsIEludDE2IHJvdywgSW50MTYgY29sdW1uKTsKCnR5cGVkZWYgVGFibGVTYXZlRGF0YUZ1 bmNUeXBlICpUYWJsZVNhdmVEYXRhRnVuY1B0cjsKCnR5cGVkZWYgc3RydWN0IHsKCUNvb3JkCQkJ CQkJCXdpZHRoOwkJCQkJIAoJVUludDE2CQkJCQkJcmVzZXJ2ZWQxIAkJOiA1OwoJVUludDE2CQkJ CQkJbWFza2VkCQkJOiAxOyAgIAoJVUludDE2CQkJCQkJZWRpdEluZGljYXRvcgk6IDE7CglVSW50 MTYJCQkJCQl1c2FibGUgCQkJOiAxOwoJVUludDE2CQkJCQkJcmVzZXJ2ZWQyCQk6IDg7CglDb29y ZAkJCQkJCQlzcGFjaW5nOwkJCQkJIAoJVGFibGVEcmF3SXRlbUZ1bmNQdHIJCWRyYXdDYWxsYmFj azsKCVRhYmxlTG9hZERhdGFGdW5jUHRyCQlsb2FkRGF0YUNhbGxiYWNrOwoJVGFibGVTYXZlRGF0 YUZ1bmNQdHIJCXNhdmVEYXRhQ2FsbGJhY2s7Cgp9IFRhYmxlQ29sdW1uQXR0clR5cGU7CgoKdHlw ZWRlZiBzdHJ1Y3QgewoJVUludDE2CQkJCQkJaWQ7CglDb29yZAkJCQkJCQloZWlnaHQ7CQkJCQkg CglVSW50MzIJCQkJCQlkYXRhOwoKCVVJbnQxNgkJCQkJCXJlc2VydmVkMQkJOiA3OwoJVUludDE2 CQkJCQkJdXNhYmxlCQkJOiAxOwoJVUludDE2CQkJCQkJcmVzZXJ2ZWQyCQk6IDQ7CglVSW50MTYJ CQkJCQltYXNrZWQJCQk6IDE7ICAgCglVSW50MTYJCQkJCQlpbnZhbGlkCQkJOiAxOwkgCglVSW50 MTYgCQkJCQkJc3RhdGljSGVpZ2h0CTogMTsgICAKCVVJbnQxNgkJCQkJCXNlbGVjdGFibGUJCTog MTsKCglVSW50MTYJCQkJCQlyZXNlcnZlZDM7Cgp9IFRhYmxlUm93QXR0clR5cGU7CgoKdHlwZWRl ZiBzdHJ1Y3QgewoJVUludDE2IAkJCQkJCXZpc2libGU6MTsJCQkgCiAgIFVJbnQxNiAJCQkJCQll ZGl0YWJsZToxOwkJCSAKCVVJbnQxNiAJCQkJCQllZGl0aW5nOjE7CQkJIAoJVUludDE2IAkJCQkJ CXNlbGVjdGVkOjE7CQkJIAoJVUludDE2CQkJCQkJaGFzU2Nyb2xsQmFyOjE7CSAKCVVJbnQxNgkJ CQkJCXJlc2VydmVkOjExOwp9IFRhYmxlQXR0clR5cGU7CgoKdHlwZWRlZiBzdHJ1Y3QgVGFibGVU eXBlIHsKCVVJbnQxNgkJCQkJCWlkOwogICBSZWN0YW5nbGVUeXBlCQkJCWJvdW5kczsKICAgVGFi bGVBdHRyVHlwZQkJCQlhdHRyOwoJSW50MTYJCQkJCQkJbnVtQ29sdW1uczsKCUludDE2CQkJCQkJ CW51bVJvd3M7CglJbnQxNgkJCQkJCQljdXJyZW50Um93OwoJSW50MTYJCQkJCQkJY3VycmVudENv bHVtbjsKCUludDE2CQkJCQkJCXRvcFJvdzsKCVRhYmxlQ29sdW1uQXR0clR5cGUgKgljb2x1bW5B dHRyczsKICAgVGFibGVSb3dBdHRyVHlwZSAqICAgIAlyb3dBdHRyczsKCVRhYmxlSXRlbVB0cgkJ CQlpdGVtczsKCUZpZWxkVHlwZQkJCQkJY3VycmVudEZpZWxkOwp9IFRhYmxlVHlwZTsKCnR5cGVk ZWYgVGFibGVUeXBlICpUYWJsZVB0cjsKCgogCiAKIAojIDMxNyAiLi4vU3JjU2hhcmVkL1BhbG0v UGxhdGZvcm0vSW5jcy9Db3JlL1VJL1RhYmxlLmgiCgoKCiMgMjcgIi4uL1NyY1NoYXJlZC9QYWxt L1BsYXRmb3JtL0luY3MvQ29yZS9VSS9Gb3JtLmgiIDIKCgoKCgoKCiAKCgogCgoKCgogCmVudW0g YWxlcnRUeXBlcyB7CglpbmZvcm1hdGlvbkFsZXJ0LAoJY29uZmlybWF0aW9uQWxlcnQsCgl3YXJu aW5nQWxlcnQsCgllcnJvckFsZXJ0IH07CnR5cGVkZWYgZW51bSBhbGVydFR5cGVzIFBhbG1fQWxl cnRUeXBlIDsKCnR5cGVkZWYgc3RydWN0IHsKCVVJbnQxNgkJYWxlcnRUeXBlOwoJVUludDE2CQlo ZWxwUnNjSUQ7CglVSW50MTYJCW51bUJ1dHRvbnM7CglVSW50MTYJCWRlZmF1bHRCdXR0b247Cn0g QWxlcnRUZW1wbGF0ZVR5cGU7CgoKIAplbnVtIGZvcm1PYmplY3RzIHsKCWZybUZpZWxkT2JqLAoJ ZnJtQ29udHJvbE9iaiwKCWZybUxpc3RPYmosCglmcm1UYWJsZU9iaiwKCWZybUJpdG1hcE9iaiwK CWZybUxpbmVPYmosCglmcm1GcmFtZU9iaiwKCWZybVJlY3RhbmdsZU9iaiwKCWZybUxhYmVsT2Jq LAoJZnJtVGl0bGVPYmosCglmcm1Qb3B1cE9iaiwKCWZybUdyYWZmaXRpU3RhdGVPYmosCglmcm1H YWRnZXRPYmosCglmcm1TY3JvbGxCYXJPYmogfTsKdHlwZWRlZiBlbnVtIGZvcm1PYmplY3RzIEZv cm1PYmplY3RLaW5kOwoKCnR5cGVkZWYgc3RydWN0IHsKCVVJbnQxNiB1c2FibGUJCQk6MTsJIAoJ VUludDE2IHJlc2VydmVkCQk6MTU7CSAKfSBGb3JtT2JqQXR0clR5cGU7CgoKIAoKCgoKCgp0eXBl ZGVmIHN0cnVjdCB7CglVSW50MTYgdXNhYmxlCQkJOjE7CSAKCVVJbnQxNiBleHRlbmRlZAkJOjE7 CSAKCVVJbnQxNiB2aXNpYmxlCQkJOjE7CSAKCVVJbnQxNiByZXNlcnZlZAkJOjEzOwkgCn0gRm9y bUdhZGdldEF0dHJUeXBlOwoKc3RydWN0IEZvcm1UeXBlOyAgCnR5cGVkZWYgQm9vbGVhbiAoRm9y bUdhZGdldEhhbmRsZXJUeXBlKSAoc3RydWN0IEZvcm1HYWRnZXRUeXBlICpnYWRnZXRQLCBVSW50 MTYgY21kLCB2b2lkICpwYXJhbVApOwoKc3RydWN0IEZvcm1HYWRnZXRUeXBlIHsKCVVJbnQxNgkJ CQkJCWlkOwoJRm9ybUdhZGdldEF0dHJUeXBlCQlhdHRyOwoJUmVjdGFuZ2xlVHlwZQkJCQlyZWN0 OwoJY29uc3Qgdm9pZCAqCQkJICAgZGF0YTsKCUZvcm1HYWRnZXRIYW5kbGVyVHlwZQkqaGFuZGxl cjsKfTsKdHlwZWRlZiBzdHJ1Y3QgRm9ybUdhZGdldFR5cGUgRm9ybUdhZGdldFR5cGU7CgoKIAoK dHlwZWRlZiBzdHJ1Y3QgewoJRm9ybU9iakF0dHJUeXBlCQkJYXR0cjsKCVBvaW50VHlwZQkJCQkJ cG9zOwoJVUludDE2CQkgICAgIAkJCXJzY0lEOwp9IEZvcm1CaXRtYXBUeXBlOwoKCnR5cGVkZWYg c3RydWN0IHsKCUZvcm1PYmpBdHRyVHlwZQkJCWF0dHI7CglQb2ludFR5cGUJICAgICAgCQlwb2lu dDE7CSAgIAoJUG9pbnRUeXBlCSAgICAgIAkJcG9pbnQyOwkgICAKfSBGb3JtTGluZVR5cGU7CgoK dHlwZWRlZiBzdHJ1Y3QgewoJVUludDE2CQkJCQkJaWQ7CglGb3JtT2JqQXR0clR5cGUJCQlhdHRy OwoJUmVjdGFuZ2xlVHlwZQkJCQlyZWN0OwoJVUludDE2ICAgICAJCQkJCWZyYW1lVHlwZTsKfSBG b3JtRnJhbWVUeXBlOwoKCnR5cGVkZWYgc3RydWN0IHsKCUZvcm1PYmpBdHRyVHlwZQkJCWF0dHI7 CglSZWN0YW5nbGVUeXBlCQkJCXJlY3Q7Cn0gRm9ybVJlY3RhbmdsZVR5cGU7CgoKdHlwZWRlZiBz dHJ1Y3QgewoJVUludDE2CQkJCQkJaWQ7CglQb2ludFR5cGUJCQkJCXBvczsKCUZvcm1PYmpBdHRy VHlwZQkJCWF0dHI7CglGb250SUQJCQkJCQlmb250SUQ7CglVSW50OCAJCQkJCQlyZXNlcnZlZDsK CUNoYXIgKgkJCQkJCXRleHQ7Cn0gRm9ybUxhYmVsVHlwZTsKCgp0eXBlZGVmIHN0cnVjdCB7CglS ZWN0YW5nbGVUeXBlCQkJCXJlY3Q7CglDaGFyICoJCQkJCQl0ZXh0Owp9IEZvcm1UaXRsZVR5cGU7 CgoKdHlwZWRlZiBzdHJ1Y3QgewoJVUludDE2CQkJCQkJY29udHJvbElEOwoJVUludDE2CQkJCQkJ bGlzdElEOwp9IEZvcm1Qb3B1cFR5cGU7CgoKdHlwZWRlZiBzdHJ1Y3QgewoJUG9pbnRUeXBlCQkJ CQlwb3M7Cn0gRnJtR3JhZmZpdGlTdGF0ZVR5cGU7CgoKdHlwZWRlZiB1bmlvbiB7Cgl2b2lkICog ICAgICAgICAgICAJCXB0cjsKCUZpZWxkVHlwZSAqCQkJCQlmaWVsZDsKCUNvbnRyb2xUeXBlICoJ CQkJY29udHJvbDsKCUdyYXBoaWNDb250cm9sVHlwZSAqCQlncmFwaGljQ29udHJvbDsKCVNsaWRl ckNvbnRyb2xUeXBlICoJCXNsaWRlckNvbnRyb2w7CglMaXN0VHlwZQkqCQkJCQlsaXN0OwoJVGFi bGVUeXBlICoJCQkJCXRhYmxlOwoJRm9ybUJpdG1hcFR5cGUgKgkJCWJpdG1hcDsKIAogCiAKCUZv cm1MYWJlbFR5cGUgKgkJCWxhYmVsOwoJRm9ybVRpdGxlVHlwZSAqCQkJdGl0bGU7CQoJRm9ybVBv cHVwVHlwZSAqCQkJcG9wdXA7CglGcm1HcmFmZml0aVN0YXRlVHlwZSAqCWdyZlN0YXRlOwoJRm9y bUdhZGdldFR5cGUgKgkJCWdhZGdldDsKCVNjcm9sbEJhclR5cGUgKgkJCXNjcm9sbEJhcjsKfSBG b3JtT2JqZWN0VHlwZTsKCiAKCgp0eXBlZGVmIHN0cnVjdCB7CglGb3JtT2JqZWN0S2luZAkJCQlv YmplY3RUeXBlOwoJVUludDggCQkJCQkJcmVzZXJ2ZWQ7CglGb3JtT2JqZWN0VHlwZQkJCQlvYmpl Y3Q7Cn0gRm9ybU9iakxpc3RUeXBlOwoKCnR5cGVkZWYgc3RydWN0IHsKCVVJbnQxNiB1c2FibGUJ CQk6MTsJIAoJVUludDE2IGVuYWJsZWQJCQk6MTsJIAoJVUludDE2IHZpc2libGUJCQk6MTsJIAoJ VUludDE2IGRpcnR5CQkJOjE7CSAKCVVJbnQxNiBzYXZlQmVoaW5kCQk6MTsJIAoJVUludDE2IGdy YWZmaXRpU2hpZnQJOjE7ICAgIAoJVUludDE2IGdsb2JhbHNBdmFpbGFibGU6MTsgIAoJCQkJCQkJ CQkJIAoJVUludDE2IGRvaW5nRGlhbG9nCToxOwkgCglVSW50MTYgZXhpdERpYWxvZwkJOjE7CSAK CVVJbnQxNiByZXNlcnZlZAkJOjc7CSAKCVVJbnQxNiByZXNlcnZlZDI7CQkJCSAKfSBGb3JtQXR0 clR5cGU7CgoKdHlwZWRlZiBCb29sZWFuIEZvcm1FdmVudEhhbmRsZXJUeXBlIChFdmVudFR5cGUg KmV2ZW50UCk7Cgp0eXBlZGVmIEZvcm1FdmVudEhhbmRsZXJUeXBlICpGb3JtRXZlbnRIYW5kbGVy UHRyOwoKc3RydWN0IEZvcm1UeXBlIHsKCVdpbmRvd1R5cGUJCQkJCXdpbmRvdzsKCVVJbnQxNgkJ CQkJCWZvcm1JZDsKICAgRm9ybUF0dHJUeXBlCQkJCWF0dHI7CglXaW5IYW5kbGUJICAgICAgIAkJ Yml0c0JlaGluZEZvcm07CglGb3JtRXZlbnRIYW5kbGVyVHlwZSAqCWhhbmRsZXI7CglVSW50MTYJ CQkJCQlmb2N1czsKCVVJbnQxNgkJCQkJCWRlZmF1bHRCdXR0b247CglVSW50MTYJCQkJCQloZWxw UnNjSWQ7CglVSW50MTYJCQkJCQltZW51UnNjSWQ7CglVSW50MTYJCQkJCQludW1PYmplY3RzOwoJ Rm9ybU9iakxpc3RUeXBlICoJCQlvYmplY3RzOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgRm9ybVR5cGUg Rm9ybVR5cGU7CnR5cGVkZWYgRm9ybVR5cGUgKkZvcm1QdHI7CgoKIAogCiAKIAogCnR5cGVkZWYg c3RydWN0IEZvcm1BY3RpdmVTdGF0ZVR5cGUgewoJVUludDE2CWRhdGFbMTFdOwoJfSBGb3JtQWN0 aXZlU3RhdGVUeXBlOwoJCgogCnR5cGVkZWYgQm9vbGVhbiBGb3JtQ2hlY2tSZXNwb25zZUZ1bmNU eXBlIAoJCShJbnQxNiBidXR0b24sIENoYXIgKiBhdHRlbXB0KTsKCnR5cGVkZWYgRm9ybUNoZWNr UmVzcG9uc2VGdW5jVHlwZSAqRm9ybUNoZWNrUmVzcG9uc2VGdW5jUHRyOwoKCiAKIAogCgoKCgoK CgogCiAKIAogCiAKCiMgNTA4ICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUv VUkvRm9ybS5oIgoKCgojIDEzNSAiLi4vU3JjU2hhcmVkL1BhbG0uaCIgMgoKIAogCgkJCiAKIAoJ CQogCiAKIAogCgkJCiAKIAoJCQogCiAKCQkKIyAxICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9y bS9JbmNzL0NvcmUvVUkvVUlSZXNvdXJjZXMuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCiAKCgoKIAogCiAKCgoKIAogCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAK IAoKCgoJCQkJCQkJCQkJCQkJCQkgCgoKCgoKIAoKIAoKIAogCiAKCgoKCgogCiAKIAoKCgogCiAK IAogCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgogCgoKIAoKCgoKCgoKCgoK CgoKCiAKCgoKIAoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgogCgoKCgoKCgoKCgogCgoK CiAKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgogCgoK CgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKIAoKCgoKCgoKCgoKCiAKIAogCiMgMzIw ICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvVUkvVUlSZXNvdXJjZXMuaCIK CgoKIyAxNTIgIi4uL1NyY1NoYXJlZC9QYWxtLmgiIDIKCgogCgoJIAplbnVtIGNsaXBib2FyZEZv cm1hdHMgeyBjbGlwYm9hcmRUZXh0LCBjbGlwYm9hcmRJbmssIGNsaXBib2FyZEJpdG1hcCB9Owp0 eXBlZGVmIGVudW0gY2xpcGJvYXJkRm9ybWF0cyBDbGlwYm9hcmRGb3JtYXRUeXBlOwoKCgoJCgkJ CQkJCQkJIAoJCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vQ29yZS9TeXN0ZW0vSW5j c1Bydi9EZWJ1Z1Bydi5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK CgogCgoKdHlwZWRlZiBzdHJ1Y3QgQnJlYWtwb2ludFR5cGUgewoJTWVtUHRyCQlhZGRyOwkJCQkJ CQkJCSAKCUJvb2xlYW4JZW5hYmxlZDsJCQkJCQkJCSAKCUJvb2xlYW4JaW5zdGFsbGVkOwkJCQkJ CQkgCgl9IEJyZWFrcG9pbnRUeXBlOwoKCgoKCiAKCgogCgogCiAKIAogCiAKIAoKCgp0eXBlZGVm IHN0cnVjdCBTeXNQa3RTdGF0ZUNtZFR5cGUgewoJVUludDgJY29tbWFuZDsJVUludDgJX2ZpbGxl ciA7CQkJCQkJCQkgCgl9IFN5c1BrdFN0YXRlQ21kQ21kVHlwZTsKdHlwZWRlZiBTeXNQa3RTdGF0 ZUNtZENtZFR5cGUqCVN5c1BrdFN0YXRlQ21kQ21kUHRyOwoKCiAKdHlwZWRlZiBzdHJ1Y3QgU3lz UGt0U3RhdGVSc3BUeXBlIHsKCVVJbnQ4CWNvbW1hbmQ7CVVJbnQ4CV9maWxsZXIgOwkJCQkJCQkJ IAoJQm9vbGVhbgkJCQkJCXJlc2V0dGVkOwkJCSAKCVVJbnQ4IAkJCQkJCXJlc2VydmVkMTsKCVVJ bnQxNgkJCQkJCWV4Y2VwdGlvbklkOwkJIAoJCQkJCQkJCQkJCQkJCQkgCglNNjhLUmVnc1R5cGUJ CQkJcmVnOwkJCQkJIAoJVUludDE2CQkJCQkJaW5zdFsxNSBdOwoJCQkJCQkJCQkJCQkJCQkgCgkJ CQkJCQkJCQkJCQkJCSAKCUJyZWFrcG9pbnRUeXBlCQkJCWJwWyg1ICArMSkgXTsJIAoKCXZvaWQJ CQkJCQkJKnN0YXJ0QWRkcjsJCQkgCgl2b2lkCQkJCQkJCSplbmRBZGRyOwkJCSAKCWNoYXIJCQkJ CQkJbmFtZVszMiBdOwoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJ CQkJCQkJIAoJVUludDgJCQkJCQkJdHJhcFRhYmxlUmV2OwkJIAoJCQkJCQkJCQkJCQkJCQkgCglV SW50OCAJCQkJCQlyZXNlcnZlZDI7Cgl9IFN5c1BrdFN0YXRlUnNwVHlwZTsKdHlwZWRlZiBTeXNQ a3RTdGF0ZVJzcFR5cGUqCVN5c1BrdFN0YXRlUnNwUHRyOwoKIAogCiAKIAogCiAKIAp0eXBlZGVm IHN0cnVjdCBTeXNQa3RSdG5OYW1lQ21kVHlwZSB7CglVSW50OAljb21tYW5kOwlVSW50OAlfZmls bGVyIDsJCQkJCQkJIAoJdm9pZAkJCQkJCQkqYWRkcmVzczsJCSAKCX0gU3lzUGt0UnRuTmFtZUNt ZFR5cGU7CnR5cGVkZWYgU3lzUGt0UnRuTmFtZUNtZFR5cGUqCVN5c1BrdFJ0bk5hbWVDbWRQdHI7 Cgp0eXBlZGVmIHN0cnVjdCBTeXNQa3RSdG5OYW1lUnNwVHlwZSB7CglVSW50OAljb21tYW5kOwlV SW50OAlfZmlsbGVyIDsJCQkJCQkJIAoJdm9pZAkJCQkJCQkqYWRkcmVzczsJCSAKCXZvaWQJCQkJ CQkJKnN0YXJ0QWRkcjsJCSAKCXZvaWQJCQkJCQkJKmVuZEFkZHI7CQkgCgljaGFyCQkJCQkJCW5h bWVbMzIgXTsgICAJCSAKCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJIAoJfSBTeXNQa3RS dG5OYW1lUnNwVHlwZTsKdHlwZWRlZiBTeXNQa3RSdG5OYW1lUnNwVHlwZSoJU3lzUGt0UnRuTmFt ZVJzcFB0cjsKCgogCiAKIAogCiAKdHlwZWRlZglzdHJ1Y3QgU3lzUGt0UmVhZFJlZ3NDbWRUeXBl IHsKCVVJbnQ4CWNvbW1hbmQ7CVVJbnQ4CV9maWxsZXIgOwkJCQkJCQkJIAoJfSBTeXNQa3RSZWFk UmVnc0NtZFR5cGU7CnR5cGVkZWYgU3lzUGt0UmVhZFJlZ3NDbWRUeXBlICoJU3lzUGt0UmVhZFJl Z3NDbWRQdHI7Cgp0eXBlZGVmCXN0cnVjdCBTeXNQa3RSZWFkUmVnc1JzcFR5cGUgewoJVUludDgJ Y29tbWFuZDsJVUludDgJX2ZpbGxlciA7CQkJCQkJCQkgCgkgCgl9IFN5c1BrdFJlYWRSZWdzUnNw VHlwZTsKdHlwZWRlZiBTeXNQa3RSZWFkUmVnc1JzcFR5cGUgKglTeXNQa3RSZWFkUmVnc1JzcFB0 cjsKCgoKIAogCiAKIAogCnR5cGVkZWYJc3RydWN0IFN5c1BrdFdyaXRlUmVnc0NtZFR5cGUgewoJ VUludDgJY29tbWFuZDsJVUludDgJX2ZpbGxlciA7CQkJCQkJCQkgCglNNjhLUmVnc1R5cGUJCXJl ZzsJCQkJCQkJIAoJfSBTeXNQa3RXcml0ZVJlZ3NDbWRUeXBlOwp0eXBlZGVmIFN5c1BrdFdyaXRl UmVnc0NtZFR5cGUgKglTeXNQa3RXcml0ZVJlZ3NDbWRQdHI7CgoKIAp0eXBlZGVmCXN0cnVjdCBT eXNQa3RXcml0ZVJlZ3NSc3BUeXBlIHsKCVVJbnQ4CWNvbW1hbmQ7CVVJbnQ4CV9maWxsZXIgOwkJ CQkJCQkJIAoJfSBTeXNQa3RXcml0ZVJlZ3NSc3BUeXBlOwp0eXBlZGVmIFN5c1BrdFdyaXRlUmVn c1JzcFR5cGUgKglTeXNQa3RXcml0ZVJlZ3NSc3BQdHI7CgoKIAogCiAKIAogCnR5cGVkZWYgc3Ry dWN0IFN5c1BrdENvbnRpbnVlQ21kVHlwZSB7CglVSW50OAljb21tYW5kOwlVSW50OAlfZmlsbGVy IDsJCQkJCQkJCQkgCglNNjhLUmVnc1R5cGUJIAkJcmVnczsJCQkJCQkJIAoJQm9vbGVhbgkJCQkJ c3RlcFNweTsJCQkJCQkgCglVSW50OCAJCQkJCXJlc2VydmVkOwoJVUludDMyCQkJCQlzc0FkZHI7 CQkJCQkJIAoJVUludDMyCQkJCQlzc0NvdW50OwkJCQkJCSAKCVVJbnQzMgkJCQkJc3NDaGVja1N1 bTsJCQkJCSAKCX0gU3lzUGt0Q29udGludWVDbWRUeXBlOwoKdHlwZWRlZiBTeXNQa3RDb250aW51 ZUNtZFR5cGUgKlN5c1BrdENvbnRpbnVlQ21kUHRyOwoKCiAKIAogCiAKIAp0eXBlZGVmIHN0cnVj dCBTeXNQa3RHZXRCcmVha3BvaW50c0NtZFR5cGUgewoJVUludDgJY29tbWFuZDsJVUludDgJX2Zp bGxlciA7CQkJCQkJCQkgCgl9IFN5c1BrdEdldEJyZWFrcG9pbnRzQ21kVHlwZTsKdHlwZWRlZiBT eXNQa3RHZXRCcmVha3BvaW50c0NtZFR5cGUqCVN5c1BrdEdldEJyZWFrcG9pbnRzQ21kUHRyOwoK dHlwZWRlZiBzdHJ1Y3QgU3lzUGt0R2V0QnJlYWtwb2ludHNSc3BUeXBlIHsKCVVJbnQ4CWNvbW1h bmQ7CVVJbnQ4CV9maWxsZXIgOwkJCQkJCQkJIAoJIAoJfSBTeXNQa3RHZXRCcmVha3BvaW50c1Jz cFR5cGU7CnR5cGVkZWYgU3lzUGt0R2V0QnJlYWtwb2ludHNSc3BUeXBlKglTeXNQa3RHZXRCcmVh a3BvaW50c1JzcFB0cjsKCgogCiAKIAogCiAKdHlwZWRlZiBzdHJ1Y3QgU3lzUGt0U2V0QnJlYWtw b2ludHNDbWRUeXBlIHsKCVVJbnQ4CWNvbW1hbmQ7CVVJbnQ4CV9maWxsZXIgOwkJCQkJCQkJIAoJ IAoJfSBTeXNQa3RTZXRCcmVha3BvaW50c0NtZFR5cGU7CnR5cGVkZWYgU3lzUGt0U2V0QnJlYWtw b2ludHNDbWRUeXBlKglTeXNQa3RTZXRCcmVha3BvaW50c0NtZFB0cjsKCnR5cGVkZWYgc3RydWN0 IFN5c1BrdFNldEJyZWFrcG9pbnRzUnNwVHlwZSB7CglVSW50OAljb21tYW5kOwlVSW50OAlfZmls bGVyIDsJCQkJCQkJCSAKCX0gU3lzUGt0U2V0QnJlYWtwb2ludHNSc3BUeXBlOwp0eXBlZGVmIFN5 c1BrdFNldEJyZWFrcG9pbnRzUnNwVHlwZSoJU3lzUGt0U2V0QnJlYWtwb2ludHNSc3BQdHI7CgoK CgogCiAKIAogCnR5cGVkZWYgc3RydWN0IFN5c1BrdERiZ0JyZWFrVG9nZ2xlQ21kVHlwZSB7CglV SW50OAljb21tYW5kOwlVSW50OAlfZmlsbGVyIDsJCQkJCQkJCSAKCX0gU3lzUGt0RGJnQnJlYWtU b2dnbGVDbWRUeXBlOwp0eXBlZGVmIFN5c1BrdERiZ0JyZWFrVG9nZ2xlQ21kVHlwZSoJU3lzUGt0 RGJnQnJlYWtUb2dnbGVDbWRQdHI7Cgp0eXBlZGVmIHN0cnVjdCBTeXNQa3REYmdCcmVha1RvZ2ds ZVJzcFR5cGUgewoJVUludDgJY29tbWFuZDsJVUludDgJX2ZpbGxlciA7CQkJCQkJCQkgCglCb29s ZWFuCQluZXdTdGF0ZTsKCVVJbnQ4IAkJCXJlc2VydmVkOwoJfSBTeXNQa3REYmdCcmVha1RvZ2ds ZVJzcFR5cGU7CnR5cGVkZWYgU3lzUGt0RGJnQnJlYWtUb2dnbGVSc3BUeXBlKglTeXNQa3REYmdC cmVha1RvZ2dsZVJzcFB0cjsKCgogCiAKIAogCiAKIAogCiAKIAp0eXBlZGVmIHN0cnVjdCBTeXNQ a3RGbGFzaFdyaXRlVHlwZSB7CglVSW50OAljb21tYW5kOwlVSW50OAlfZmlsbGVyIDsJCQkJCQkJ CSAKCVVJbnQxNgkJbnVtQnl0ZXM7CQkJCQkJCSAKCVVJbnQzMgkJZmxhc2hCYXNlOwkJCQkJCQkg CglVSW50MzIJCXNyY0FkZHI7CQkJCQkJCQkgCglVSW50MzIJCWRzdEFkZHI7CQkJCQkJCQkgCglV SW50OAkJCW1hbnVmOwkJCQkJCQkJIAoJVUludDgJCQlkZXZpY2U7CQkJCQkJCQkgCglVSW50OAkJ CXdpZHRoOwkJCQkJCQkJIAoJVUludDgJCQlmaWxsZXI7CglVSW50MzIJCXJhbVNwYWNlUDsJCQkJ CQkJIAoJfSBTeXNQa3RGbGFzaFdyaXRlVHlwZTsKdHlwZWRlZiBTeXNQa3RGbGFzaFdyaXRlVHlw ZSAqU3lzUGt0Rmxhc2hXcml0ZVB0cjsKCgogCiAKIAogCiAKIAp0eXBlZGVmIHN0cnVjdCBzeXNQ a3RFeGVjRmxhc2hUeXBlIHsKCVVJbnQ4CWNvbW1hbmQ7CVVJbnQ4CV9maWxsZXIgOwkJCQkJCQkJ IAoJVUludDE2CQludW1CeXRlczsJCQkJCQkJIAoJVUludDMyCQlmbGFzaEJhc2U7CQkJCQkJCSAK CVVJbnQzMgkJc3JjQWRkcjsJCQkJCQkJCSAKCVVJbnQzMgkJZHN0QWRkcjsJCQkJCQkJCSAKCVVJ bnQzMgkJY29kZUFkZHI7CQkJCQkJCSAKCVVJbnQxNgkJZmxhc2hSZXNJRDsJCQkJCQkJIAoJVUlu dDgJCQltYW51ZjsJCQkJCQkJCSAKCVVJbnQ4CQkJZGV2aWNlOwkJCQkJCQkJIAoJVUludDgJCQlk ZXZJbmZvOwkJCQkJCQkJIAoJVUludDgJCQlyZW1vdGVDbWQ7CQkJCQkJCSAKCVVJbnQ4CQkJcmVz cG9uc2U7CQkJCQkJCSAKCVVJbnQ4CQkJc3BhcmVCeXRlOwkJCQkJCQkgCglVSW50MzIJCXNwYXJl RFdvcmQ7CQkJCQkJCSAKCX0gc3lzUGt0RXhlY0ZsYXNoVHlwZTsKdHlwZWRlZiBzeXNQa3RFeGVj Rmxhc2hUeXBlICpzeXNQa3RFeGVjRmxhc2hQdHI7CgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKIAog CiAKIAogCnR5cGVkZWYgc3RydWN0IFN5c1BrdEdldFRyYXBCcmVha3NDbWRUeXBlIHsKCVVJbnQ4 CWNvbW1hbmQ7CVVJbnQ4CV9maWxsZXIgOwkJCQkJCQkJIAoJfSBTeXNQa3RHZXRUcmFwQnJlYWtz Q21kVHlwZTsKdHlwZWRlZiBTeXNQa3RHZXRUcmFwQnJlYWtzQ21kVHlwZSoJU3lzUGt0R2V0VHJh cEJyZWFrc0NtZFB0cjsKCnR5cGVkZWYgc3RydWN0IFN5c1BrdEdldFRyYXBCcmVha3NSc3BUeXBl IHsKCVVJbnQ4CWNvbW1hbmQ7CVVJbnQ4CV9maWxsZXIgOwkJCQkJCQkJIAoJIAoJfSBTeXNQa3RH ZXRUcmFwQnJlYWtzUnNwVHlwZTsKdHlwZWRlZiBTeXNQa3RHZXRUcmFwQnJlYWtzUnNwVHlwZSoJ U3lzUGt0R2V0VHJhcEJyZWFrc1JzcFB0cjsKCgogCiAKIAogCiAKdHlwZWRlZiBzdHJ1Y3QgU3lz UGt0U2V0VHJhcEJyZWFrc0NtZFR5cGUgewoJVUludDgJY29tbWFuZDsJVUludDgJX2ZpbGxlciA7 CQkJCQkJCQkgCgkgCgl9IFN5c1BrdFNldFRyYXBCcmVha3NDbWRUeXBlOwp0eXBlZGVmIFN5c1Br dFNldFRyYXBCcmVha3NDbWRUeXBlKglTeXNQa3RTZXRUcmFwQnJlYWtzQ21kUHRyOwoKdHlwZWRl ZiBzdHJ1Y3QgU3lzUGt0U2V0VHJhcEJyZWFrc1JzcFR5cGUgewoJVUludDgJY29tbWFuZDsJVUlu dDgJX2ZpbGxlciA7CQkJCQkJCQkgCgl9IFN5c1BrdFNldFRyYXBCcmVha3NSc3BUeXBlOwp0eXBl ZGVmIFN5c1BrdFNldFRyYXBCcmVha3NSc3BUeXBlKglTeXNQa3RTZXRUcmFwQnJlYWtzUnNwUHRy OwoKCgogCiAKIAogCiAKIAogCiAKdHlwZWRlZiBzdHJ1Y3QgU3lzUGt0R2V0VHJhcENvbmRpdGlv bnNDbWRUeXBlIHsKCVVJbnQ4CWNvbW1hbmQ7CVVJbnQ4CV9maWxsZXIgOwkJCQkJCQkJIAoJfSBT eXNQa3RHZXRUcmFwQ29uZGl0aW9uc0NtZFR5cGU7CnR5cGVkZWYgU3lzUGt0R2V0VHJhcENvbmRp dGlvbnNDbWRUeXBlKglTeXNQa3RHZXRUcmFwQ29uZGl0aW9uc0NtZFB0cjsKCnR5cGVkZWYgc3Ry dWN0IFN5c1BrdEdldFRyYXBDb25kaXRpb25zUnNwVHlwZSB7CglVSW50OAljb21tYW5kOwlVSW50 OAlfZmlsbGVyIDsJCQkJCQkJCSAKCSAKCX0gU3lzUGt0R2V0VHJhcENvbmRpdGlvbnNSc3BUeXBl Owp0eXBlZGVmIFN5c1BrdEdldFRyYXBDb25kaXRpb25zUnNwVHlwZSoJU3lzUGt0R2V0VHJhcENv bmRpdGlvbnNSc3BQdHI7CgoKIAogCiAKIAogCiAKIAogCnR5cGVkZWYgc3RydWN0IFN5c1BrdFNl dFRyYXBDb25kaXRpb25zQ21kVHlwZSB7CglVSW50OAljb21tYW5kOwlVSW50OAlfZmlsbGVyIDsJ CQkJCQkJCSAKCSAKCX0gU3lzUGt0U2V0VHJhcENvbmRpdGlvbnNDbWRUeXBlOwp0eXBlZGVmIFN5 c1BrdFNldFRyYXBDb25kaXRpb25zQ21kVHlwZSoJU3lzUGt0U2V0VHJhcENvbmRpdGlvbnNDbWRQ dHI7Cgp0eXBlZGVmIHN0cnVjdCBTeXNQa3RTZXRUcmFwQ29uZGl0aW9uc1JzcFR5cGUgewoJVUlu dDgJY29tbWFuZDsJVUludDgJX2ZpbGxlciA7CQkJCQkJCQkgCgl9IFN5c1BrdFNldFRyYXBDb25k aXRpb25zUnNwVHlwZTsKdHlwZWRlZiBTeXNQa3RTZXRUcmFwQ29uZGl0aW9uc1JzcFR5cGUqCVN5 c1BrdFNldFRyYXBDb25kaXRpb25zUnNwUHRyOwoKCgoKCiAKIAogCiAKIAogCgoKCgogCgoKc3Ry dWN0IERiZ0dsb2JhbHNUeXBlIHsKCSAKCU02OEtSZWdzVHlwZQlyZWc7CgkKCSAKCUJvb2xlYW4J CQlyb21CUDsKCUJvb2xlYW4JCQlzdGVwT3ZlckJQOwkJCQkJCQkgCglCcmVha3BvaW50VHlwZQli cFsoNSAgKzEpIF07CglVSW50MTYJCQlicE9wY29kZVsoNSAgKzEpIF07CgkKCSAKCVVJbnQxNgkJ CXRyYXBCcmVha1s1IF07CglVSW50MTYJCQl0cmFwUGFyYW1bNSBdOwoJVUludDMyCQkJb2xkRGlz cGF0Y2hlcjsJCQkJCQkgCglCb29sZWFuCQkJYnJlYWtpbmdPbkFUcmFwOwkJCQkJIAoJCgkgCglC b29sZWFuCQkJaWdub3JlRGJnQnJlYWtzOwkJCQkJIAoJQm9vbGVhbgkJCWNvbW1PcGVuZWQ7CQkJ CQkJCSAKCQkJCQkJCQkJCQkJCQkJCSAKCQoJIAoJQm9vbGVhbgkJCXN0ZXBTcHk7CQkJCQkJCQkg CglVSW50MzIJCQlzc0FkZHI7CQkJCQkJCQkgCglVSW50MzIJCQlzc1ZhbHVlOwkJCQkJCQkJIAoJ CgkgCglVSW50MTYJCQlleGNUeXBlOwkJCQkJCQkJIAoJVUludDgJCQkJcmVFbnRlcmVkOwkJCQkJ CQkgCglVSW50OAkJCQlmaXJzdEVudHJhbmNlOwkJCQkJCSAKCgkgCglVSW50OAkJCQlzZXJHbG9i YWxzWzY0IF07CSAKCQoJIAoJVUludDMyCQkJYnVzRXJyU3RhY2tbMl07CQkJCQkgCgkKCSAKCVVJ bnQ4CQkJCXN0YWNrWzB4MDM4MCBdOwkJCQkgCglVSW50MTYJCQlzdGFja0VuZDsJCQkJCQkJIAoJ Cgl9OwoJCnR5cGVkZWYgc3RydWN0IERiZ0dsb2JhbHNUeXBlIERiZ0dsb2JhbHNUeXBlOwoJCnR5 cGVkZWYgRGJnR2xvYmFsc1R5cGUqCQlEYmdHbG9iYWxzUHRyOwoKCgoKCiMgMTY0ICIuLi9TcmNT aGFyZWQvUGFsbS5oIiAyCgoJCiMgMSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vQ29yZS9T eXN0ZW0vSW5jc1Bydi9TeXN0ZW1QcnYuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCiAKIyAxICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9Db3JlL1N5c3Rl bS9JbmNzUHJ2L0dsb2JhbHMuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCiAKIAogCiAKCiAKIAoKCgoKIAoKCnR5cGVkZWYgc3RydWN0IEZpeGVkR2xvYmFsc1R5cGUg ewoKCSAKCVVJbnQ4CQkJCQkJbWVtQ2FyZFNsb3RzOwkJCQkJCQkgCglVSW50OAkJCQkJCWRiZ1dh c0VudGVyZWQ7CQkJCQkJCSAKCXZvaWQgKgkJCQkJbWVtQ2FyZEluZm9QOwkJCQkJCQkgCglVSW50 MzIJCQkJCW1lbVNlbWFwaG9yZUlEOwkJCQkJCSAKCVVJbnQxNgkJCQkJbWVtRGVidWdNb2RlOwkJ CQkJCQkgCgoJIAoJdm9pZCAqCQkJCQlkbU9wZW5MaXN0OwkJCQkJCQkJIAoJCgkgCglVSW50OAkJ CQkJCWRiZ0luRGVidWdnZXI7CQkJCQkJCSAKCVVJbnQ4CQkJCQkJZGJnVHJhY2luZzsJCQkJCQkJ CSAKCXZvaWQgKgkJCQkJZGJnR2xvYmFsc1A7CQkJCQkJCSAKCXZvaWQgKgkJCQkJZGJnU2VyR2xv YmFsc1A7CQkJCQkJIAoJCgkKCSAKCXZvaWQgKgkJCQkJc3lzQXBwSW5mb1A7CQkJCQkJCSAKCXZv aWQgKgkJCQkJc3lzS2VybmVsRGF0YVA7CQkJCQkJIAoJdm9pZCAqKgkJCQkJc3lzRGlzcGF0Y2hU YWJsZVA7CQkJCQkgCglVSW50MzIJCQkJCXN5c093bmVySURzSW5Vc2U7CQkJCQkJIAoJdm9pZCAq CQkJCQlzeXNBTVhBcHBJbmZvUDsJCQkJCQkgCglVSW50MzIJCQkJCXN5c0Nsb2NrRnJlcTsJCQkJ CQkJIAoJVUludDMyICoJCQkJCXN5c0hhcmRLZXlDcmVhdG9yczsJCQkJCSAKCglJbnQxNgkJCQkJ CXN5c0JhdHRlcnlDaGVja1RpbWVyOwkJCQkgCglVSW50OAkJCQkJCXN5c0JhdHRlcnlNaW5UaHJl c2hvbGQ7CQkJCSAKCVVJbnQ4CQkJCQkJaHdyQmF0dGVyeUxldmVsOwkJCQkJCSAKCUludDE2CQkJ CQkJc3lzTmV4dEJhdHRlcnlBbGVydFRpbWVyOwkJCSAKCVVJbnQ4CQkJCQkJc3lzQmF0dGVyeVdh cm5UaHJlc2hvbGQ7CQkJIAoKCVVJbnQ4CQkJCQkJc3lzRGlzcGF0Y2hUYWJsZVJldjsJCQkJCSAK CQkJCQkJCQkJCQkJCQkJCQkJCSAKCVVJbnQxNgkJCQkJc3lzRGlzcGF0Y2hUYWJsZVNpemU7CQkJ CSAKCXZvaWQgKgkJCQkJc3lzTGliVGFibGVQOwkJCQkJCQkgCglVSW50MTYJCQkJCXN5c0xpYlRh YmxlRW50cmllczsJCQkJCSAKCXZvaWQgKgkJCQkJc3lzQ29uc29sZVN0YWNrQ2h1bmtQOwkJCQkg Cgl2b2lkICoJCQkJCXN5c1VJU2hlbGxBcHBJbmZvUDsJCQkJCSAKCQoJVUludDMyCQkJCQlzeXNU aW1lcklEOwkJCQkJCQkJIAoJVUludDMyCQkJCQlzeXNBdXRvT2ZmRXZ0VGlja3M7CQkJCQkgCglV SW50MTYJCQkJCXN5c0F1dG9PZmZTZWNvbmRzOwkJCQkJIAoJCglJbnQzMgkJCQkJCXN5c1JhbmRv bVNlZWQ7CQkJCQkJCSAKCQoJCgkKCSAKCXZvaWQgKgkJCQkJc2xrR2xvYmFsc1A7CQkJCQkJCSAK CXZvaWQgKgkJCQkJc2VyR2xvYmFsc1A7CQkJCQkJCSAKCXZvaWQgKgkJCQkJc2NyR2xvYmFsc1A7 CQkJCQkJCSAKCXZvaWQgKgkJCQkJZnBsR2xvYmFsc1A7CQkJCQkJCSAKCXZvaWQgKgkJCQkJcGVu R2xvYmFsc1A7CQkJCQkJCSAKCXZvaWQgKgkJCQkJc3lzRXZ0TWdyR2xvYmFsc1A7CQkJCQkgCgl2 b2lkICoJCQkJCXNuZEdsb2JhbHNQOwkJCQkJCQkgCgl2b2lkICoJCQkJCXRpbUdsb2JhbHNQOwkJ CQkJCQkgCgl2b2lkICoJCQkJCWFsbUdsb2JhbHNQOwkJCQkJCQkgCgl2b2lkICoJCQkJCWZ0ckds b2JhbHNQOwkJCQkJCQkgCgl2b2lkICoJCQkJCWdyZkdsb2JhbHNQOwkJCQkJCQkgCgl2b2lkICoJ CQkJCWtleUdsb2JhbHNQOwkJCQkJCQkgCgkKCSAKCVVJbnQ4CQkJCQkJdWlHbG9iYWxzWzB4QjAg XTsJIAoJdm9pZCAqCQkJCQl1aUV4dGVuc2lvbnNQOwkJCQkJCQkgCgoKCSAKCgl2b2lkICoJCQkJ CWN1clVJQXBwSW5mb1A7CQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJCQkJCSAKCgoKCglVSW50MzIJ CQkJCW5leHRVSUFwcERCSUQ7CQkJCQkJCSAKCVVJbnQxNgkJCQkJbmV4dFVJQXBwQ21kOwkJCQkJ CQkgCgl2b2lkICoJCQkJCW5leHRVSUFwcENtZFBCUDsJCQkJCQkgCglVSW50OAkJCQkJCW5leHRV SUFwcENhcmRObzsJCQkJCQkgCgkKCQoJIAoJSW50OAkJCQkJCW1lbURhdGFXRUxldmVsOwkJCQkJ CSAKCVVJbnQxNgkJCQkJaHdyV2FrZVVwOwkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkJCQkJIAoJ VUludDgJCQkJCQlod3JDUFVEdXR5Q3ljbGU7CQkJCQkJIAoJVUludDgJCQkJCQlod3JQZW5Eb3du OwkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkJCQkJIAoJVUludDMyCQkJCQlod3JDdXJUaWNrczsJ CQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkJCQkJIAoJVUludDMyCQkJCQlod3JUb3RhbFJBTVNpemU7 CQkJCQkJIAoJVUludDMyCQkJCQlod3JEb3plU3ViVGlja3M7CQkJCQkJIAoJCQkJCQkJCQkJCQkJ CQkJCQkJIAoJCgkgCgkgCgkgCglVSW50MzIJCQkJCXNuZE9mZlRpY2tzOwkJCQkJCQkgCgoJIAoJ VUludDgJCQkJCQlzeXNSZXNldEZsYWdzOwkJCQkJCQkgCglVSW50OAkJCQkJCXN5c0JhdHRlcnlL aW5kOwkJCQkJCSAKCgkgCglVSW50MzIJCQkJCW1lbU1pbkR5bkhlYXBGcmVlOwkJCQkJIAoJCgkK CSAKCVVJbnQxNgkJCQkJc3lzUHJlZkZsYWdzOwkJCQkJCQkgCgkKCQoJIAoJdm9pZCAqCQkJCQlz eXNHbG9iYWxzUDsJCQkJCQkJIAoJCgkgCglVSW50MTYJCQkJCXN5c01pc2NGbGFnczsJCQkJCQkJ IAoJCgkKCSAKCSAKCSAKCVVJbnQxNgkJCQkJc3lzTGliTmV0OwkJCQkJCQkJIAoJdm9pZCAqCQkJ CQluZXRQa3RGcmVlUTsJCQkJCQkJIAoJCgoJIAoJIAoJVUludDMyCQkJCQlzeXNFdkdyb3VwSUQ7 CQkJCQkJCSAKCQoJCgl2b2lkICoJCQkJCWlycTNHbG9iYWxzUDsJCQkJCQkJIAoJCgkgCgkgCgkg CglVSW50MzIJCQkJCXN5c0xhc3RCYXR0ZXJ5V2FybmluZzsJCQkJIAoJCgkgCgkgCglVSW50MzIJ CQkJCXN5c0xvd01lbUNoZWNrc3VtOwkJCQkJIAoKCSAKCSAKCVVJbnQxNgkJCQkJaHdySGFyZHdh cmVSZXY7CQkJCQkJIAoJCgkKCSAKCU1lbUhhbmRsZQkJCQlkbVByb3RlY3RMaXN0SDsJCQkJCQkg CgkJCQkJCQkJCQkJCQkJCQkJCQkgCgkgCglVSW50MTYJCQkJCWh3ck1pc2NGbGFnczsJCQkJCQkJ IAoJCgkgCglVSW50MzIJCQkJCXN5c1Byb2ZpbGVSZWZjb247CQkJCQkJIAoJdm9pZCAqCQkJCQlz eXNQcm9maWxlUHJvY1A7CQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkJCQkJIAoKCSAKCSAKCSAKCSAK CVVJbnQzMgkJCQkJCWZscFNvZnRGUFNDUjsKCgoJIAoJIAoJIAoJdm9pZCAqCQkJCQlpckxpYkds b2JhbHNQOwkJCQkJCQkgCglVSW50MTYJCQkJCWV4Z0FjdGl2ZUxpYjsJCQkJCQkJIAoKCVVJbnQx NgkJCQkJdWlCdXN5Q291bnQ7CQkJCQkJCSAKCQoJdm9pZCAqCQkJCQlpcnExR2xvYmFsc1A7CQkJ CQkJCSAKCXZvaWQgKgkJCQkJaXJxMkdsb2JhbHNQOwkJCQkJCQkgCgl2b2lkICoJCQkJCWlycTZH bG9iYWxzUDsJCQkJCQkJIAoKCgkgCgkgCgkgCgoJIAoJdm9pZCAqCQkJCQlpbnRsTWdyR2xvYmFs c1A7CQkJCQkJIAoKCSAKCVVJbnQxNgkJCQkJaW5saW5lU3RhcnQ7CQkJCQkJCSAKCVVJbnQxNgkJ CQkJaW5saW5lRW5kOwkJCQkJCQkJIAoJQm9vbGVhbgkJCQkJaW5saW5lQWN0aXZlOwkJCQkJCQkg CglVSW50OAkJCQkJCWlubGluZURlZlRlcm07CQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJCQkJCSAK CXZvaWQgKgkJCQkJdHNtRmVwTGliU3RhdHVzUDsJCQkJCQkgCglVSW50MTYJCQkJCXRzbUZlcExp YlJlZk51bTsJCQkJCQkgCglVSW50MTYJCQkJCWlubGluZUhpZ2hsaWdodExlbjsJCQkJCSAKCgkg Cgl2b2lkICoJCQkJCXN5c0JhdHRlcnlEYXRhUDsJCQkJCQkgCgl2b2lkICoJCQkJCXN5c0JhdHRl cnlWYWxpZEtpbmRzUDsJCQkJIAoKCSAKCUJvb2xlYW4JCQkJCXN5c0luU2h1dGRvd247CQkJCQkJ CSAKCVVJbnQ4CQkJCQkJc3lzTWluV2FrZXVwVGhyZXNob2xkOwkJCQkgCgoJIAoJVUludDMyCQkJ CQlod3JNaXNjRmxhZ3NFeHQ7CQkJCQkJIAoJCgkgCglCb29sZWFuCQkJCQlzeXNVc2VDcml0V2Fy blRpbWVyOwoJQm9vbGVhbgkJCQkJc3lzQ3JpdFdhcm5UaW1lclJ1bm5pbmc7CglJbnQxNgkJCQkJ CXN5c0NyaXRXYXJuUlRDRGF5U3RhcnRlZDsKCUludDMyCQkJCQkJc3lzQ3JpdFdhcm5UaWNrVGlt ZXI7CglVSW50MzIJCQkJCXN5c0NyaXRXYXJuTGFzdFRpY2s7CglCb29sZWFuCQkJCQlzeXNDaGFy Z2luZzsKCUJvb2xlYW4JCQkJCXN5c1VwZGF0ZVZvbHRhZ2VMZXZlbDsKCgkgCglNZW1IYW5kbGUJ CQkJbm90aWZ5R2xvYmFsc0g7CQkJIAoJCgkgCglVSW50MzIJCQkJCXN5c1Jlc2VydmVkMzFEV29y ZDE7CglVSW50MzIJCQkJCXN5c1Jlc2VydmVkMzFEV29yZDI7CglVSW50MzIJCQkJCXN5c1Jlc2Vy dmVkMzFEV29yZDM7CglVSW50MzIJCQkJCXN5c1Jlc2VydmVkMzFEV29yZDQ7CgoKCSAKCSAKCSAK CgkgCgl2b2lkICoJCQkJCXJhbUdsb2JhbHNQOwkJCQkJCQkgCgkKCSAKCXZvaWQgKgkJCQkJaHdy QmF0dGVyeUdsb2JhbHNQOwkJCQkJIAoKCSAKCVVJbnQ4CQkJCQkJaHdyQmF0dGVyeVBlcmNlbnQ7 CgoJIAoJIAoJVUludDgJCQkJCQljb21tQWN0aXZpdHlGbGFnczsKCQoJIAoJIAoJdm9pZCAqCQkJ CQl1YXJ0MzI4R2xvYmFsc1A7CgkKCQoJIAoJVUludDMyCQkJCQlzeXNPRU1HbG9iYWwxOwkJCQkg CglVSW50MzIJCQkJCXN5c09FTUdsb2JhbDI7CQkJCSAKCQoJIAoJIAoJIAoJVUludDE2CQkJCQlo d3JCYXR0ZXJ5U3RlcHNQZXJWb2x0OwoJCgkgCgkgCgkgCgkgCgkgCgkgCgl2b2lkICoJCQkJCXN5 c1BlbmRpbmdTdGFja0ZyZWVzOwoKCgkgCgkgCgkgCgoJIAoJVUludDE2CQkJCQlzeXNEYXlDb3Vu dGVyOwoJCgkgCgkgCglJbnQxNgkJCQkJCXN5c0JhdHRlcnlDaGVja1BlcmlvZDsKCQoJIAoJVUlu dDE2CQkJCQlod3JKZXJyeVBsZFNoYWRvdzsKCgkgCgl2b2lkICoJCQkJCXJhZGlvR2xvYmFsc1A7 CgoKCSAKCSAKCSAKCgkgCgl2b2lkICoJCQkJCWZhdGFsQWxlcnRUZW1wbGF0ZVA7CglVSW50MTYJ CQkJCWZhdGFsQWxlcnRCdG5XaWR0aDsKCQoJIAoJdm9pZCAqCQkJCQlzaWxrc2NyZWVuSW5mb1A7 CgoJIAoJVUludDE2CQkJCQlpbmxpbmVEZWZDaGVja3N1bTsKCXZvaWQgKgkJCQkJaW5saW5lRGVm RmllbGQ7CgkKCSAKCUJvb2xlYW4JCQkJCW5vdGlmeUJyb2FkY2FzdFBlbmRpbmc7CgkKCVVJbnQ4 CQkJCQkJc3lzUmVzZXJ2ZWQzNUJ5dGUxOwoKCSAKCVVJbnQzMgkJCQkJaHdyT0VNQ29tcGFueUlE OwoJVUludDMyCQkJCQlod3JPRU1EZXZpY2VJRDsKCVVJbnQzMgkJCQkJaHdyT0VNSEFMSUQ7CgoJ IAoJdm9pZCAqCQkJCQlzeXNVcGRhdGVHbG9iYWxzUDsKCQoJIAoJVUludDE2CQkJCQlzbWFsbFJP TUNoZWNrc3VtOwoJCgkgCgkgCgkgCgkgCgoJfSBGaXhlZEdsb2JhbHNUeXBlOwoJCgkJCiAKCgoK CgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgTG93TWVtSGRyVHlwZSB7CgkgCgkgCgkgCglNNjhL RXhjVGFibGVUeXBlCQl2ZWN0b3JzOwkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJCSAKCQoJIAoJIAoJ IAoJRml4ZWRHbG9iYWxzVHlwZQkJZ2xvYmFsczsJCQkJCQkgCgkKCX0gTG93TWVtSGRyVHlwZTsK CgoKCgoKCQoJCWV4dGVybiAiQyIJdm9pZCAqUGlsb3RHbG9iYWxzUDsJCQkJCQkgCgkKCgoKCgoK CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDQyICIuLi9TcmNT aGFyZWQvUGFsbS9QbGF0Zm9ybS9Db3JlL1N5c3RlbS9JbmNzUHJ2L1N5c3RlbVBydi5oIiAyCgoK CgogCgoKCgoKCiAKIAogCiAKIAogCiAKCgoKCgoKCgoKIAogCiAKIAogCgoKCgogCgoKCgogCiAK CgoKIAogCiAKCgoKIAogCgoKCiAKCgoKCnR5cGVkZWYgc3RydWN0IFN5c0FwcFByZWZzIHsKCVVJ bnQxNglwcmlvcml0eTsJCQkJCSAKCVVJbnQzMglzdGFja1NpemU7CQkJCQkgCglVSW50MzIJbWlu SGVhcFNwYWNlOwkJCQkgCgl9IFN5c0FwcFByZWZzVHlwZTsKdHlwZWRlZiBTeXNBcHBQcmVmc1R5 cGUgKlN5c0FwcFByZWZzUHRyOwoKCiAKIAoKCiAKCgoKCgoKCgogCgoKdHlwZWRlZiBzdHJ1Y3Qg U3lzRXh0UHJlZnNUeXBlIHsKCVVJbnQxNgl2ZXJzaW9uOwkJCQkJCSAKCVVJbnQzMglmbGFnczsJ CQkJCQkgCgl9IFN5c0V4dFByZWZzVHlwZTsKCiAKCgoKCgp0eXBlZGVmIHN0cnVjdCBTeXNUQ0JV c2VySW5mb1R5cGUgewoJU3lzQXBwSW5mb1B0cgl0bXBBcHBJbmZvUDsJCQkJIAoJU3lzQXBwSW5m b1B0cglyb290QXBwSW5mb1A7CQkJCSAKCVVJbnQzMgkJCWluaXRpYWxBNTsJCQkJCSAKCX0gU3lz VENCVXNlckluZm9UeXBlOwp0eXBlZGVmIFN5c1RDQlVzZXJJbmZvVHlwZSAqU3lzVENCVXNlcklu Zm9QdHI7CgoKIAoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgU3lzRXhpdGluZ1Rhc2tJbmZvVHlwZSB7 CglVSW50MzIgKgkJCXN0YWNrSW5Vc2VCeVA7CQkJCSAKCX0gU3lzRXhpdGluZ1Rhc2tJbmZvVHlw ZTsKdHlwZWRlZiBTeXNFeGl0aW5nVGFza0luZm9UeXBlICpTeXNFeGl0aW5nVGFza0luZm9QdHI7 CgoKIAogCiAKCiAKdHlwZWRlZiBlbnVtCSB7CglzeXNLZXJuZWxJbmZvU2VsQ3VyVGFza0luZm8s CglzeXNLZXJuZWxJbmZvU2VsVGFza0luZm8sCglzeXNLZXJuZWxJbmZvU2VsU2VtYXBob3JlSW5m bywKCXN5c0tlcm5lbEluZm9TZWxUaW1lckluZm8KCX0gU3lzS2VybmVsSW5mb1NlbGVjdG9yOwoK dHlwZWRlZiBzdHJ1Y3QgU3lzS2VybmVsSW5mb1R5cGUgewogCglVSW50OAlzZWxlY3RvcjsJCSAK CVVJbnQ4IAkJCQkJCXJlc2VydmVkOwoJVUludDMyCQkJCQkJaWQ7CQkJCSAKCQoJdW5pb24gewoJ CXN0cnVjdCB7CgkJCVVJbnQzMglpZDsJCQkJCQkJIAoJCQlVSW50MzIJbmV4dElEOwkJCQkJCSAK CQkJCgkJCVVJbnQzMgl0YWc7CQkJCQkJCSAKCQkJVUludDMyCXN0YXR1czsJCQkJCQkgCgkJCVVJ bnQzMgl0aW1lcjsJCQkJCQkgCgkJCVVJbnQzMgl0aW1lU2xpY2U7CQkJCQkgCgkJCUludDE2CQlw cmlvcml0eTsJCQkJCSAKCQkJVUludDE2CWF0dHJpYnV0ZXM7CQkJCQkgCgkJCUludDE2CQlwZW5k aW5nQ2FsbHM7CQkJCSAKCQkJVUludDMyCXNlbmRlclRhc2tJRDsJCQkJIAoJCQlVSW50MzIJbXNn RXhjaGFuZ2VJRDsJCQkJIAoJCQkKCQkJVUludDMyCXRjYlA7CQkJCQkJCSAKCQkJVUludDMyCXN0 YWNrUDsJCQkJCQkgCgkJCVVJbnQzMglzdGFja1N0YXJ0OwkJCQkJIAoJCQlVSW50MzIJc3RhY2tT aXplOwkJCQkJIAoJCQl9IHRhc2s7CgoJCXN0cnVjdCB7CgkJCVVJbnQzMglpZDsKCQkJVUludDMy CW5leHRJRDsJCQkJCQkgCgoJCQlVSW50MzIJdGFnOwkJCQkJCQkgCgkJCUludDE2CQlpbml0VmFs dWU7CQkJCQkgCgkJCQkJCQkJCQkJCQkJIAoJCQlJbnQxNgkJY3VyVmFsdWU7CQkJCQkgCgkJCQkJ CQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkgCgkJCUludDE2CQluZXN0 TGV2ZWw7CQkJCQkgCgkJCVVJbnQzMglvd25lcklEOwkJCQkJCSAKCQkJCQkJCQkJCQkJCQkgCgkJ CX0gc2VtYXBob3JlOwoJCQkKCQlzdHJ1Y3QgewoJCQlVSW50MzIJaWQ7CgkJCVVJbnQzMgluZXh0 SUQ7CQkJCQkJIAoJCQkKCQkJVUludDMyCXRhZzsJCQkJCQkJIAoJCQlVSW50MzIJdGlja3NMZWZ0 OwkJCQkJIAoJCQlVSW50MzIJcGVyaW9kOwkJCQkJCSAKCQkJVUludDMyCXByb2M7CQkJCQkJCSAK CQkJfSB0aW1lcjsKCQl9IHBhcmFtOwoJCQoJfSBTeXNLZXJuZWxJbmZvVHlwZTsKCQoJCnR5cGVk ZWYgU3lzS2VybmVsSW5mb1R5cGUqCVN5c0tlcm5lbEluZm9QdHI7CgoKCgogCiAKIAoKCgoKCiAK CgoKCgoKCgoKCgogCiAKIAoKCgoKCgoKCiAKCgoKCgoKIAp0eXBlZGVmIHN0cnVjdCBTeXNOVlBh cmFtc1R5cGUgewoJVUludDMyCXJ0Y0hvdXJzOwkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJCSAK CQkJCQkJCQkJCQkJCQkJCSAKCVVJbnQzMglydGNIb3VyTWluU2VjQ29weTsJCQkJCQkgCgkJCQkJ CQkJCQkJCQkJCQkgCglVSW50OAkJc3dyTENEQ29udHJhc3RWYWx1ZTsJCQkJCQkgCgkJCQkJCQkJ CQkJCQkJCQkgCglVSW50OCAJc3dyTENEQnJpZ2h0bmVzc1ZhbHVlOwkJCQkJIAoJCgkgCgkgCgl2 b2lkKgkJc3BsYXNoU2NyZWVuUHRyOwkJCQkJCQkgCgl2b2lkKgkJaGFyZFJlc2V0U2NyZWVuUHRy OwkJCQkJCSAKCVVJbnQxNglsb2NhbGVMYW5ndWFnZTsJCQkJCQkJIAoJVUludDE2CWxvY2FsZUNv dW50cnk7CQkJCQkJCQkgCgkKCSAKCSAKCVVJbnQzMglzeXNOVk9FTVN0b3JhZ2UxOwkJCQkJCQkg CglVSW50MzIJc3lzTlZPRU1TdG9yYWdlMjsJCQkJCQkJIAoKCX0gU3lzTlZQYXJhbXNUeXBlOwp0 eXBlZGVmIFN5c05WUGFyYW1zVHlwZSAqU3lzTlZQYXJhbXNQdHI7CgoKCiAKCgoKCgogCgoKCgoK CgogCgoKCgoKCgkJCQkJCQkJCQkJCQkJCQkgCgoKIAogCiAKIAoKCgoKIAoKCgoKCgoKCgoKCgoK CiAKIyAxICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9Db3JlL1N5c3RlbS9JbmNzUHJ2L1Nl cmlhbExpbmtQcnYuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAogCgoKCgoKIAoK CgoKCgoKCgoKIAogCiAKIAp0eXBlZGVmIHN0cnVjdCBTbGtSZWZJbmZvVHlwZSB7CglVSW50MTYJ cmVmTnVtOwkJCQkJCQkJCSAKCUludDgJCWRlc3RJRDsJCQkJCQkJCQkgCglVSW50OCAJCXBhZGRp bmc7Cgl9IFNsa1JlZkluZm9UeXBlOwp0eXBlZGVmIFNsa1JlZkluZm9UeXBlICpTbGtSZWZJbmZv UHRyOwkKCnR5cGVkZWYgc3RydWN0IFNsa0dsb2JhbHNUeXBlIHsKCVVJbnQxNgkJCQkJb3BlbkNv dW50OwoJCglVSW50MTYJCQkJCXNvY2tldFJlZk51bVs2IF07CglCb29sZWFuCQkJCQlzb2NrZXRP cGVuWzYgXTsKCVNsa1NvY2tldExpc3RlblB0cglzb2NrZXRMaXN0ZW5QWzYgXTsKCVVJbnQxNgkJ CQkJc29ja2V0VGltZW91dFs2IF07CQkgCgkKCQoJIAoJIAoJIAoJU2xrUmVmSW5mb1R5cGUJCQly ZWZJbmZvWzYgIF07CgkKCVVJbnQ4CQkJCQkJdHJhbnNJZDsJCQkJCSAKCVVJbnQ4IAkJCQkJcGFk ZGluZzsKCVVJbnQzMgkJCQkJeG1pdFNlbWFwaG9yZUlEOwkJIAoJVUludDE2CQkJCQludW1SZWNl aXZlZDsJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCSAKCSAKCSAKCUJvb2xlYW4JCQkJCXNvY2tldFdh bnRzQnVmZmVyaW5nWzYgXTsKCglVSW50OAkJCQkJCSpzZW5kQnVmZmVyUDsJCQkJIAoJVUludDE2 CQkJCQlzZW5kQnVmZmVyU2l6ZTsJCQkgCgkKCX0gU2xrR2xvYmFsc1R5cGU7Cgp0eXBlZGVmIFNs a0dsb2JhbHNUeXBlKglTbGtHbG9iYWxzUHRyOwoKCgkKCgoKIyAzNDkgIi4uL1NyY1NoYXJlZC9Q YWxtL1BsYXRmb3JtL0NvcmUvU3lzdGVtL0luY3NQcnYvU3lzdGVtUHJ2LmgiIDIKCiMgMSAiLi4v U3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vQ29yZS9TeXN0ZW0vSW5jc1Bydi9NZW1vcnlQcnYuaCIg MQogCgoKCgoKCgoKCgoKCgoKCgoKIAogCgoKCgoKCgoKIAoKCgogCgoKCgoKIAoKCgoKCgogCgoK CgoKCnR5cGVkZWYgc3RydWN0IHsKCVVJbnQxNgkJbnVtRW50cmllczsJCQkJIAoJVUludDMyCQlu ZXh0VGJsT2Zmc2V0OwkJCSAKCSAKCX0gTWVtTXN0clB0clRhYmxlVHlwZTsKdHlwZWRlZiBNZW1N c3RyUHRyVGFibGVUeXBlKglNZW1Nc3RyUHRyVGFibGVQdHI7CgoKIAoKCgoKdHlwZWRlZiBzdHJ1 Y3QgewoJVUludDE2CQludW1FbnRyaWVzOwkJCQkgCglVSW50MTYJCW5leHRUYmxPZmZzZXQ7CQkJ IAoJIAoJfSBNZW0xTXN0clB0clRhYmxlVHlwZTsKdHlwZWRlZiBNZW0xTXN0clB0clRhYmxlVHlw ZSoJTWVtMU1zdHJQdHJUYWJsZVB0cjsKCgoKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgewoJVUludDMy CWZyZWUJCQk6MTsJCQkJIAoJVUludDMyCW1vdmVkCQkJOjE7CQkJCSAKCVVJbnQzMgl1bnVzZWQy CQk6MTsJCQkJIAoJVUludDMyCXVudXNlZDMJCToxOwkJCQkgCglVSW50MzIJc2l6ZUFkagkJOjQ7 CQkJCSAKCVVJbnQzMglzaXplCQkJOjI0OwkJCQkgCgkKCVVJbnQzMglsb2NrQ291bnQJOjQ7CQkJ CSAKCVVJbnQzMglvd25lcgkJCTo0OwkJCQkgCglJbnQzMgkJaE9mZnNldAkJOjI0OwkJCQkgCgkJ CQkJCQkJCQkJCQkgCgl9IE1lbUNodW5rSGVhZGVyVHlwZTsKCiMgMTE3ICIuLi9TcmNTaGFyZWQv UGFsbS9QbGF0Zm9ybS9Db3JlL1N5c3RlbS9JbmNzUHJ2L01lbW9yeVBydi5oIgoKCnR5cGVkZWYg TWVtQ2h1bmtIZWFkZXJUeXBlICoJCU1lbUNodW5rSGVhZGVyUHRyOyAKCiAKIAp0eXBlZGVmIFVJ bnQzMglNZW1IZWFwVGVybWluYXRvclR5cGU7CgogCiAKCgogCgoKCQogCgoKIAoKCgoKIAogCgoK IAoKCiMgMTU3ICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9Db3JlL1N5c3RlbS9JbmNzUHJ2 L01lbW9yeVBydi5oIgoKCiAKCgoKCgogCgoKIAoKCgogCiAKIAoKCgogCgoKCgp0eXBlZGVmIHN0 cnVjdCB7CglVSW50MTYJCXNpemU7CQkJCSAKCVVJbnQ4CQkJbG9ja093bmVyOwkJIAoJVUludDgJ CQlmbGFnczsJCQkgCglJbnQxNgkJCWhPZmZzZXQ7CQkJIAoJfQlNZW0xQ2h1bmtIZWFkZXJUeXBl Owp0eXBlZGVmIE1lbTFDaHVua0hlYWRlclR5cGUqCU1lbTFDaHVua0hlYWRlclB0cjsKCgoKIAoK CgoKIAoKCgoKCgoKCiAKCgp0eXBlZGVmIHN0cnVjdCB7CglVSW50MTYJCQkJCWZsYWdzOwkJCQkJ IAoJVUludDMyCQkJCQlzaXplOwkJCQkJCSAKCVVJbnQzMgkJCQkJZmlyc3RGcmVlQ2h1bmtPZmZz ZXQ7IAoJTWVtTXN0clB0clRhYmxlVHlwZQltc3RyUHRyVGJsOwkJCQkgCgl9IE1lbUhlYXBIZWFk ZXJUeXBlOwp0eXBlZGVmIE1lbUhlYXBIZWFkZXJUeXBlICogCU1lbUhlYXBIZWFkZXJQdHI7CgoK IAoKCgoKCgoKCgoKCiAKCgoKCnR5cGVkZWYgc3RydWN0IHsKCVVJbnQxNgkJCQkJZmxhZ3M7CQkJ IAoJVUludDE2CQkJCQlzaXplOwkJCQkgCglNZW0xTXN0clB0clRhYmxlVHlwZQltc3RyUHRyVGJs OwkJIAoJfSBNZW0xSGVhcEhlYWRlclR5cGU7CnR5cGVkZWYgTWVtMUhlYXBIZWFkZXJUeXBlICog CQlNZW0xSGVhcEhlYWRlclB0cjsKCgogCgoKCgp0eXBlZGVmIHN0cnVjdCB7CglVSW50MTYJCQkJ CWZsYWdzOwkJCQkJIAoJVUludDMyCQkJCQlzaXplOwkJCQkJCSAKCU1lbU1zdHJQdHJUYWJsZVR5 cGUJbXN0clB0clRibDsJCQkJIAoJfSBNZW0ySGVhcEhlYWRlclR5cGU7CnR5cGVkZWYgTWVtMkhl YXBIZWFkZXJUeXBlICogCU1lbTJIZWFwSGVhZGVyUHRyOwoKCiAKCgoKCgoKCgoKCgoKIAogCnR5 cGVkZWYgc3RydWN0IHsKCXVuaW9uIHsKCQlNZW1Nc3RyUHRyVGFibGVUeXBlCXZlcjI7CgkJTWVt MU1zdHJQdHJUYWJsZVR5cGUgCXZlcjE7CgkJfSBoZWFkZXI7Cgl9IE1lbU1zdHJQdHJUYWJsZVVu aW9uVHlwZTsKCgoKIAoKCgoKCgogCiAKIAp0eXBlZGVmIHN0cnVjdCB7Cgl1bmlvbiB7CgkJTWVt SGVhcEhlYWRlclR5cGUJCXZlcjM7CgkJTWVtMkhlYXBIZWFkZXJUeXBlCXZlcjI7CgkJTWVtMUhl YXBIZWFkZXJUeXBlIAl2ZXIxOwoJCX0gaGVhZGVyOwoJfSBNZW1IZWFwSGVhZGVyVW5pb25UeXBl OwoKCgoKCgkKCgogCgoKCQoKCgkKCgoJCgoKCQoJCgkKIAogCnR5cGVkZWYJc3RydWN0IHsKCXVu aW9uIHsKCQlNZW1DaHVua0hlYWRlclR5cGUJdmVyMjsKCQlNZW0xQ2h1bmtIZWFkZXJUeXBlCXZl cjE7CgkJfSBoZWFkZXI7Cgl9IE1lbUNodW5rSGVhZGVyVW5pb25UeXBlOwoJCgoKIAoKCgkKCgoJ CgoKCQoKCgkKCgoKCgoKCgoKCgoKIAoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgQ2FyZEhlYWRlclR5 cGUgewoJVUludDMyCQlpbml0U3RhY2s7CQkJCQkgCglVSW50MzIJCXJlc2V0VmVjdG9yOwkJCQkg CglVSW50MzIJCXNpZ25hdHVyZTsJCQkJCSAKCVVJbnQxNgkJaGRyVmVyc2lvbjsJCQkJCSAKCVVJ bnQxNgkJZmxhZ3M7CQkJCQkJIAoJVUludDgJCQluYW1lWzMyIF07CQkgCglVSW50OAkJCW1hbnVm WzMyIF07CSAKCVVJbnQxNgkJdmVyc2lvbjsJCQkJCQkgCglVSW50MzIJCWNyZWF0aW9uRGF0ZTsJ CQkJIAoJVUludDE2CQludW1SQU1CbG9ja3M7CQkJCSAKCVVJbnQzMgkJYmxvY2tMaXN0T2Zmc2V0 OwkJCSAKCVVJbnQzMgkJcmVhZFdyaXRlUGFybXNPZmZzZXQ7CSAKCVVJbnQzMgkJcmVhZFdyaXRl UGFybXNTaXplOwkJIAoJVUludDMyCQlyZWFkT25seVBhcm1zT2Zmc2V0OwkJIAoJVUludDMyCQli aWdST01PZmZzZXQ7CQkJCSAKCQkJCQkJCQkJCQkJCSAKCVVJbnQzMgkJY2hlY2tzdW1CeXRlczsJ CQkJIAoJVUludDE2CQljaGVja3N1bVZhbHVlOwkJCQkgCgoJVUludDMyCQlyZWFkV3JpdGVXb3Jr aW5nT2Zmc2V0OwkgCglVSW50MzIJCXJlYWRXcml0ZVdvcmtpbmdTaXplOwkgCgoJVUludDMyCQlo YWxDb2RlT2Zmc2V0OwkJCQkgCgkKCVVJbnQ4CQkJcmVzZXJ2ZWRbMTMwXTsJCQkJIAoJfSBDYXJk SGVhZGVyVHlwZTsKdHlwZWRlZiBDYXJkSGVhZGVyVHlwZSoJCUNhcmRIZWFkZXJQdHI7CgoKCgoK CgoKIAoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHsKCVVJbnQzMgkJc2lnbmF0dXJlOwkJCQkJIAoJ VUludDE2CQl2ZXJzaW9uOwkJCQkJCSAKCVVJbnQxNgkJZmxhZ3M7CQkJCQkJIAoJVUludDgJCQlu YW1lWzMyIF07CQkgCglVSW50MzIJCWNyZWF0aW9uRGF0ZTsJCQkJIAoJVUludDMyCQliYWNrdXBE YXRlOwkJCQkJIAoJVUludDMyCQloZWFwTGlzdE9mZnNldDsJCQkgCglVSW50MzIJCWluaXRDb2Rl T2Zmc2V0MTsJCQkgCglVSW50MzIJCWluaXRDb2RlT2Zmc2V0MjsJCQkgCglMb2NhbElECQlkYXRh YmFzZURpcklEOwkJCQkgCglVSW50MzIJCXJzdlNwYWNlOwkJCQkJIAoJVUludDMyCQlkeW5IZWFw U3BhY2U7CQkJCSAKCQkJCQkJCQkJCQkJCSAKCVVJbnQzMgkJZmlyc3RSQU1CbG9ja1NpemU7CQkg CgkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkKCSAKCSAKCSAKCSAK CSAKCVN5c05WUGFyYW1zVHlwZQludlBhcmFtczsKCQoJIAoJIAoJVUludDgJCQlyZXNlcnZlZFsx NzYtc2l6ZW9mKFN5c05WUGFyYW1zVHlwZSldOwkJCgoJIAoJVUludDMyCQljcmM7CQkJCQkJCSAK CX0gU3RvcmFnZUhlYWRlclR5cGU7CnR5cGVkZWYgU3RvcmFnZUhlYWRlclR5cGUqCQlTdG9yYWdl SGVhZGVyUHRyOwoKCgoKIAogCnR5cGVkZWYgc3RydWN0IHsKCVVJbnQxNgkJCQludW1IZWFwczsJ CQkgCglVSW50MzIJCQkJaGVhcE9mZnNldFsxXTsJCSAKCX0gSGVhcExpc3RUeXBlOwoJCgkKCiAK CgoKCgoKCnR5cGVkZWYgc3RydWN0IENhcmRJbmZvVHlwZSB7CgoJIAoJIAoJVUludDgJCQkqYmFz ZVA7CQkJCQkJIAoJVUludDMyCQlzaXplOwkJCQkJCQkgCglVSW50MzIJCWZpcnN0UkFNQmxvY2tT aXplOwkJIAoJVUludDMyCQl0YXJnZXRST01TaGlmdDsJCQkgCgkJCQkJCQkJCQkJCQkgCgkJCQkJ CQkJCQkJCQkgCgoJCglVSW50MzIJCWNhcmRIZWFkZXJPZmZzZXQ7CQkJIAoJCQkJCQkJCQkJCQkJ IAoJCQkJCQkJCQkJCQkKCVVJbnQzMgkJcnN2U3BhY2U7CQkJCQkgCglVSW50MzIJCWR5bkhlYXBT cGFjZTsJCQkJIAoJU3RvcmFnZUhlYWRlclB0cgkJcmFtU3RvcmVQOwkJIAoJCQkJCQkJCQkJCQkJ IAoJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkKCSAKCSAKCSAKCVVJ bnQxNgkJbnVtUkFNSGVhcHM7CQkJCSAKCVVJbnQzMiAJCSpyYW1IZWFwT2Zmc2V0c1A7CQkJIAoJ VUludDE2CQludW1ST01IZWFwczsJCQkJIAoJVUludDMyIAkJKnJvbUhlYXBPZmZzZXRzUDsJCQkg CgoJIAoJIAoJVUludDMyCQljYXJkT2Zmc2V0TWFzazsJCQkgCgoJfSBDYXJkSW5mb1R5cGU7CnR5 cGVkZWYgQ2FyZEluZm9UeXBlKglDYXJkSW5mb1B0cjsKCiAKIAoKCgoKIAoKCiAKCgogCiAKIAog CgoKCgogCgoKCgoKCgoKCgoKCgoJCgoJCgoKCgoKCQoKCgkKCQkKCgkKCgoKCQkKIyA1NjIgIi4u L1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0NvcmUvU3lzdGVtL0luY3NQcnYvTWVtb3J5UHJ2Lmgi CgoKCgoKIAoKCgoKCiAKCgoKIyA2MDAgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0NvcmUv U3lzdGVtL0luY3NQcnYvTWVtb3J5UHJ2LmgiCgoKCgojIDM1MCAiLi4vU3JjU2hhcmVkL1BhbG0v UGxhdGZvcm0vQ29yZS9TeXN0ZW0vSW5jc1Bydi9TeXN0ZW1QcnYuaCIgMgoKCiMgMSAiLi4vU3Jj U2hhcmVkL1BhbG0vUGxhdGZvcm0vQ29yZS9TeXN0ZW0vSW5jc1Bydi9EZWJ1Z1Bydi5oIiAxCiAK CgoKCgoKCgoKCgoKCgoKIyA0MzggIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0NvcmUvU3lz dGVtL0luY3NQcnYvRGVidWdQcnYuaCIKCgojIDM1MiAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZv cm0vQ29yZS9TeXN0ZW0vSW5jc1Bydi9TeXN0ZW1QcnYuaCIgMgoKIyAxICIuLi9TcmNTaGFyZWQv UGFsbS9QbGF0Zm9ybS9Db3JlL0hhcmR3YXJlL0luY3NQcnYvSGFyZHdhcmUuaCIgMQogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0 Zm9ybS9JbmNzL0NvcmUvSGFyZHdhcmUvSEFMLmgiIDEKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCiAK CgoKCgoKCiAKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAJCgoKCiAK dHlwZWRlZiB2b2lkICgqSHdySW5pdFByb2NQdHIpKHZvaWQpOwoKCiAKCgojIDk0ICIuLi9TcmNT aGFyZWQvUGFsbS9QbGF0Zm9ybS9JbmNzL0NvcmUvSGFyZHdhcmUvSEFMLmgiCgoKCgoKIAojIDM3 ICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9Db3JlL0hhcmR3YXJlL0luY3NQcnYvSGFyZHdh cmUuaCIgMgoKCgogCgoKCgoKCgogCgoKIAogCiAKCgoKCgogCgoKIyAxNDQgIi4uL1NyY1NoYXJl ZC9QYWxtL1BsYXRmb3JtL0NvcmUvSGFyZHdhcmUvSW5jc1Bydi9IYXJkd2FyZS5oIgoKCgogCgoK CgoKCgoKCiMgMzUzICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9Db3JlL1N5c3RlbS9JbmNz UHJ2L1N5c3RlbVBydi5oIiAyCgp0eXBlZGVmIHN0cnVjdCBMb3dNZW1UeXBlIHsKCgoJIAoJTG93 TWVtSGRyVHlwZQkJCWZpeGVkOyAKCQoKCSAKCSAKCSAKCSAKCUNhcmRJbmZvVHlwZQkJCW1lbUNh cmRJbmZvWzIgXTsJCSAKCQoJU2xrR2xvYmFsc1R5cGUJCQlzbGtHbG9iYWxzOwkJCQkJCQkJIAoJ CglEYmdHbG9iYWxzVHlwZQkJCWRiZ0dsb2JhbHM7CQkJCQkJCQkgCgkKCVN5c0FwcEluZm9UeXBl CQkJc3lzQXBwSW5mbzsJCQkJCQkJCSAKCQoJTWVtUHRyCQkJCQlzeXNEaXNwYXRjaFRhYmxlWygw eEE0NUEgIC0gMHhBMDAwICkgXTsJIAoJCgl9IExvd01lbVR5cGU7CgkKCiAKCgoKCgoKCgogCgoK CgogCiAKCgoKCiAKCgoKCQkJCQkJCQkJCQkJCQkJCQkJCSAKCgkJCQkJCQkJCQkJCQkJCQkJCQkg CgkJCQkJCQkJCQkJCQkJCQkJCQkgCgoKIAoKCgkJCQkJCQkJCQkJCQkJCQkJCQkgCgoKCgoKCgoK IAoKIAogCiAKCgoKIAoKIAoKIAoKCiAKCgojIDQ1OSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZv cm0vQ29yZS9TeXN0ZW0vSW5jc1Bydi9TeXN0ZW1QcnYuaCIKCgogCgoKCgoKCgoKCgoKCgojIDE2 NSAiLi4vU3JjU2hhcmVkL1BhbG0uaCIgMgoKCgkKIyAxICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0 Zm9ybS9Db3JlL1N5c3RlbS9JbmNzUHJ2L0RhdGFQcnYuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoK CgoKIAogCiAKCgoKIAoKCgoKCgoKIAoKCnR5cGVkZWYgc3RydWN0IHsKCUxvY2FsSUQJCWxvY2Fs Q2h1bmtJRDsJCQkJIAoJVUludDgJCQlhdHRyaWJ1dGVzOwkJCQkJIAoJVUludDgJCQl1bmlxdWVJ RFszXTsJCQkJIAoJCQkJCQkJCQkJCQkJIAoJfSBSZWNvcmRFbnRyeVR5cGU7CnR5cGVkZWYgUmVj b3JkRW50cnlUeXBlKglSZWNvcmRFbnRyeVB0cjsKCgoKIAoKCnR5cGVkZWYgc3RydWN0IHsKCVVJ bnQzMgkJdHlwZTsJCQkJCQkJIAoJVUludDE2CQlpZDsJCQkJCQkJIAoJTG9jYWxJRAkJbG9jYWxD aHVua0lEOwkJCQkgCgl9IFJzcmNFbnRyeVR5cGU7CnR5cGVkZWYgUnNyY0VudHJ5VHlwZSoJUnNy Y0VudHJ5UHRyOwoKIAoKCgoKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgewoJTG9jYWxJRAkJCQluZXh0 UmVjb3JkTGlzdElEOwkJCSAKCVVJbnQxNgkJCQludW1SZWNvcmRzOwkJCQkJIAoJVUludDE2CQkJ CWZpcnN0RW50cnk7CQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAKCX0gUmVjb3JkTGlzdFR5cGU7CnR5 cGVkZWYgUmVjb3JkTGlzdFR5cGUqCVJlY29yZExpc3RQdHI7CgoKCgogCgoKdHlwZWRlZiBzdHJ1 Y3QgewoJVUludDgJCQluYW1lWzMyIF07CSAKCVVJbnQxNgkJYXR0cmlidXRlczsJCQkJCSAKCVVJ bnQxNgkJdmVyc2lvbjsJCQkJCQkgCgoJVUludDMyCQljcmVhdGlvbkRhdGU7CQkJCSAKCVVJbnQz MgkJbW9kaWZpY2F0aW9uRGF0ZTsJCQkgCglVSW50MzIJCWxhc3RCYWNrdXBEYXRlOwkJCSAKCVVJ bnQzMgkJbW9kaWZpY2F0aW9uTnVtYmVyOwkJIAoKCUxvY2FsSUQJCWFwcEluZm9JRDsJCQkJCSAK CUxvY2FsSUQJCXNvcnRJbmZvSUQ7CQkJCQkgCgoJVUludDMyCQl0eXBlOwkJCQkJCQkgCglVSW50 MzIJCWNyZWF0b3I7CQkJCQkJIAoJCglVSW50MzIJCXVuaXF1ZUlEU2VlZDsJCQkJIAoJCQkJCQkJ CQkJCQkJIAoJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJIAoJCQkJ CQkJCQkJCQkJIAoKCVJlY29yZExpc3RUeXBlCXJlY29yZExpc3Q7CQkJCSAKCX0gRGF0YWJhc2VI ZHJUeXBlOwkJCgp0eXBlZGVmIERhdGFiYXNlSGRyVHlwZSoJRGF0YWJhc2VIZHJQdHI7CgoKCgoK IAoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgewoJTG9jYWxJRAliYXNlSUQ7Cgl9IERhdGFiYXNlRGly RW50cnlUeXBlOwoKdHlwZWRlZiBzdHJ1Y3QgewoJTG9jYWxJRAkJCQkJCW5leHREYXRhYmFzZUxp c3RJRDsJCSAKCVVJbnQxNgkJCQkJCW51bURhdGFiYXNlczsJCQkJIAoJRGF0YWJhc2VEaXJFbnRy eVR5cGUJCWRhdGFiYXNlSURbMV07CQkJCSAKCX0gRGF0YWJhc2VEaXJUeXBlOwoKdHlwZWRlZiBE YXRhYmFzZURpclR5cGUqCURhdGFiYXNlRGlyUHRyOwoKCgoKIAoKCgoKCnR5cGVkZWYgc3RydWN0 ICB7Cgl2b2lkICoJCQkJbmV4dDsJCQkJCQkJIAoJVUludDE2CQkJCW9wZW5Db3VudDsJCQkJCSAK CVVJbnQzMgkJCQlvd25lclRhc2tJRDsJCQkJIAoJVUludDE2CQkJCWV4Y2x1c2l2ZSAJOiAxOwkJ CSAKCVVJbnQxNgkJCQl3cml0ZUFjY2VzcyA6IDE7CQkJIAoJVUludDE2CQkJCXJlc0RCCQkgCTog MTsJCQkgCglMb2NhbElECQkJCWhkcklEOwkJCQkJCSAKCU1lbUhhbmRsZQkJCWhkckg7CQkJCQkJ CSAKCURhdGFiYXNlSGRyUHRyCQloZHJQOwkJCQkJCQkgCglVSW50MTYJCQkJY2FyZE5vOwkJCQkJ CSAKCVVJbnQxNgkJCQludW1SZWNvcmRzOyAJCQkJIAoJTWVtUHRyCQkJCWhkck1hc3RlclA7CQkJ CQkgCglNZW1QdHIqCQkJCWhhbmRsZVRhYmxlUDsJCQkJIAoJfSBEbU9wZW5JbmZvVHlwZTsKCnR5 cGVkZWYgRG1PcGVuSW5mb1R5cGUqCQlEbU9wZW5JbmZvUHRyOwoKCiAKCgoKCgoKCgp0eXBlZGVm IHN0cnVjdCBEbUFjY2Vzc1R5cGUgewoJc3RydWN0IERtQWNjZXNzVHlwZSoJbmV4dDsJCQkJCQkg CglVSW50MTYJCQkJCW1vZGU7CQkJCQkJIAoJRG1PcGVuSW5mb1B0cgkJCW9wZW5QOwkJCQkJIAoJ CgkgCglVSW50MzIJCQkJCXNhdmVkTW9kTnVtOwkJCSAKCQkJCQkJCQkJCQkJCQkJIAoJCgkgCglV SW50OAkJCQkJCW9wZW5UeXBlOwkJCQkgCglVSW50OAkJCQkJCXJlc2VydmVkOwkJCQoJfSBEbUFj Y2Vzc1R5cGU7Cgp0eXBlZGVmIERtQWNjZXNzVHlwZSoJCURtQWNjZXNzUHRyOwoKCgogCgoKCgoK CgoKCgoKIAp0eXBlZGVmIHN0cnVjdCB7CgkJVUludDE2CWluZGV4ZXNbKDIgICogMiApIF07CgkJ VUludDE2CWNhcmROb3NbKDIgICogMiApIF07CQkJCQkJIAoJCVVJbnQzMglsYXRlc3RWZXJzaW9u Q2FuZGlkYXRlVHlwZTsJCQkgCgkJVUludDMyCWxhdGVzdFZlcnNpb25DYW5kaWRhdGVDcmVhdG9y OwkJIAoJCUludDE2CQlsYXRlc3RWZXJzaW9uQ2FuZGlkYXRlU3RvcmU7CQkJIAoJCX0gRG1QcnZT ZWFyY2hTdGF0ZVR5cGU7CnR5cGVkZWYgRG1QcnZTZWFyY2hTdGF0ZVR5cGUqCURtUHJ2U2VhcmNo U3RhdGVQdHI7CQoJCgogCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CgkJVUludDgJCQlwcm90ZWN0 Q291bnQ7CgkJVUludDgJCQljYXJkTm87CgkJTG9jYWxJRAkJZGJJRDsKCQl9IERtUHJvdGVjdEVu dHJ5VHlwZSwgKkRtUHJvdGVjdEVudHJ5UHRyOwoJCgogCgoKCgoKCnR5cGVkZWYgc3RydWN0IHsK CSAKCVVJbnQzMgl0eXBlOwkJCQkJCQkgCglVSW50MzIJY3JlYXRvcjsJCQkJCQkgCglMb2NhbElE CWRiSUQ7CQkJCQkJIAoJVUludDE2IAljYXJkTm87CQkJCQkJIAoJVUludDE2CWRiQXR0cnM7CQkJ CQkJIAoJVUludDE2CXZlcnNpb247CQkJCQkJIAoJVUludDgJCWRiTmFtZVszMiBdOwkgCgkKCSAK CVVJbnQxNglsZ0ljb25PZmZzZXQ7CQkJCSAKCVVJbnQxNglzbUljb25PZmZzZXQ7CQkJCSAKCVVJ bnQ4CQlpY29uTmFtZVszMiBdOwkJIAoJQ2hhcgkJdmVyc2lvblN0clsxNiBdOwkgCglVSW50OAkJ ZmxhZ3M7CQkJCQkJCQkgCglVSW50OAkJcmVzZXJ2ZWQ7CgkKCSAKCSAKCQoJfSBEbUxhdW5jaERC UmVjb3JkVHlwZSwgKkRtTGF1bmNoREJSZWNvcmRQdHI7CgogCgoJCQkJCQkJCQkJCQkJCSAKCgkJ CQkJCQkJCQkJCQkJIAoKCQkJCQkJCQkJCQkJCQkgCgoJCQkJCQkJCQkJCQkJCSAKCgogCgoKCgoK IAp0eXBlZGVmIEludDE2ICgqRG1TZWFyY2hGdW5jUHRyKSAodm9pZCBjb25zdCAqIHNlYXJjaERh dGEsIHZvaWQgY29uc3QgKiBkYkRhdGEsIEludDMyIG90aGVyKTsKCiAKCgoKCgoKCgogCgoKIyAz MDQgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0NvcmUvU3lzdGVtL0luY3NQcnYvRGF0YVBy di5oIgoKCgoKCiMgMTY3ICIuLi9TcmNTaGFyZWQvUGFsbS5oIiAyCgoJCQkJCQkJCSAKCQoJCiMg MSAiLi4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9ETENvbW1vbi5o IiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKIAogCiAKIAogCiAKIAp0eXBlZGVm IGVudW0gRGxwRnVuY0lEIHsKCglkbHBSZXNlcnZlZEZ1bmMgPSAweDBGLAkJCSAKCgkgCglkbHBS ZWFkVXNlckluZm8sCgkKCWRscFdyaXRlVXNlckluZm8sCgkKCWRscFJlYWRTeXNJbmZvLAoJCglk bHBHZXRTeXNEYXRlVGltZSwKCQoJZGxwU2V0U3lzRGF0ZVRpbWUsCgkKCWRscFJlYWRTdG9yYWdl SW5mbywKCQoJZGxwUmVhZERCTGlzdCwKCQoJZGxwT3BlbkRCLAoJCglkbHBDcmVhdGVEQiwKCQoJ ZGxwQ2xvc2VEQiwKCQoJZGxwRGVsZXRlREIsCgkKCWRscFJlYWRBcHBCbG9jaywKCQoJZGxwV3Jp dGVBcHBCbG9jaywKCglkbHBSZWFkU29ydEJsb2NrLAoKCWRscFdyaXRlU29ydEJsb2NrLAoKCWRs cFJlYWROZXh0TW9kaWZpZWRSZWMsCgoJZGxwUmVhZFJlY29yZCwKCglkbHBXcml0ZVJlY29yZCwK CglkbHBEZWxldGVSZWNvcmQsCgoJZGxwUmVhZFJlc291cmNlLAoKCWRscFdyaXRlUmVzb3VyY2Us CgoJZGxwRGVsZXRlUmVzb3VyY2UsCgoJZGxwQ2xlYW5VcERhdGFiYXNlLAoKCWRscFJlc2V0U3lu Y0ZsYWdzLAoKCWRscENhbGxBcHBsaWNhdGlvbiwKCglkbHBSZXNldFN5c3RlbSwKCQoJZGxwQWRk U3luY0xvZ0VudHJ5LAoJCglkbHBSZWFkT3BlbkRCSW5mbywKCQoJZGxwTW92ZUNhdGVnb3J5LAoJ CglkbHBQcm9jZXNzUlBDLAkJCQkJIAoJCglkbHBPcGVuQ29uZHVpdCwJCQkJIAoJCglkbHBFbmRP ZlN5bmMsCQkJCQkgCgkKCWRscFJlc2V0UmVjb3JkSW5kZXgsCQkJIAoJCglkbHBSZWFkUmVjb3Jk SURMaXN0LAkJCSAKCQoJCgkgCglkbHBSZWFkTmV4dFJlY0luQ2F0ZWdvcnksCSAKCQoJZGxwUmVh ZE5leHRNb2RpZmllZFJlY0luQ2F0ZWdvcnksCSAKCQoJZGxwUmVhZEFwcFByZWZlcmVuY2UsCQkg CgkKCWRscFdyaXRlQXBwUHJlZmVyZW5jZSwJCSAKCQoJZGxwUmVhZE5ldFN5bmNJbmZvLAkJCSAK CQoJZGxwV3JpdGVOZXRTeW5jSW5mbywJCQkgCgoJZGxwUmVhZEZlYXR1cmUsCQkJCSAKCQoJCgkg CglkbHBGaW5kREIsCQkJCQkJIAoJCQkJCQkJCQkJIAoJZGxwU2V0REJJbmZvLAkJCQkJIAoJCQkJ CQkJCQkJIAoKCQoJCgkKCWRscExhc3RGdW5jCQkJCQkJIAoKCX0gRGxwRnVuY0lEOwoKCgoKIAog CnR5cGVkZWYgZW51bSBEbHBSZXNwRXJyb3JDb2RlIHsKCWRscFJlc3BFcnJOb25lID0gMCwJCQkJ CSAKCWRscFJlc3BFcnJTeXN0ZW0sCQkJCQkJIAoJZGxwUmVzcEVycklsbGVnYWxSZXEsCQkJCSAK CWRscFJlc3BFcnJNZW1vcnksCQkJCQkJIAoJZGxwUmVzcEVyclBhcmFtLAkJCQkJCSAKCWRscFJl c3BFcnJOb3RGb3VuZCwJCQkJCSAKCWRscFJlc3BFcnJOb25lT3BlbiwJCQkJCSAKCWRscFJlc3BF cnJEYXRhYmFzZU9wZW4sCQkJCSAKCWRscFJlc3BFcnJUb29NYW55T3BlbkRhdGFiYXNlcywJIAoJ ZGxwUmVzcEVyckFscmVhZHlFeGlzdHMsCQkJIAoJZGxwUmVzcEVyckNhbnRPcGVuLAkJCQkJIAoJ ZGxwUmVzcEVyclJlY29yZERlbGV0ZWQsCQkJIAoJZGxwUmVzcEVyclJlY29yZEJ1c3ksCQkJCSAK CWRscFJlc3BFcnJOb3RTdXBwb3J0ZWQsCQkJCSAKCQkJCQkJCQkJCQkJIAoJZGxwUmVzcEVyclVu dXNlZDEsCQkJCQkgCglkbHBSZXNwRXJyUmVhZE9ubHksCQkJCQkgCglkbHBSZXNwRXJyTm90RW5v dWdoU3BhY2UsCQkJIAoJZGxwUmVzcEVyckxpbWl0RXhjZWVkZWQsCQkJIAoJZGxwUmVzcEVyckNh bmNlbFN5bmMsCQkJCSAKCQoJZGxwUmVzcEVyckJhZFdyYXBwZXIsCQkJCSAKCWRscFJlc3BFcnJB cmdNaXNzaW5nLAkJCQkgCglkbHBSZXNwRXJyQXJnU2l6ZSwJCQkJCSAKCQoJZGxwUmVzcEVyckxh c3RSZXNlcnZlZCA9IDEyNwkJIAoJCQkJCQkJCQkJCQkgCgl9IERscFJlc3BFcnJvckNvZGU7CgoK IAogCiAKCgoKCgoJCQkJCQkJCQkJCQkJCSAKCgoJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJ CQkgCgoKCQkJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCSAK CQkJCQkJCQkJCQkJCQkJIAoKCgkJCQkJCQkJCQkJCQkJCSAKCgoJCQkJCQkJCQkJCQkJCQkgCgoK CgoKCiAKCgoKCgoKCiAKIAogCiAKCnR5cGVkZWYgc3RydWN0IERscERhdGVUaW1lVHlwZSB7CSAK CVVJbnQxNgl5ZWFyOwkJCQkJCSAKCVVJbnQ4CQltb250aDsJCQkJCSAKCVVJbnQ4CQlkYXk7CQkJ CQkJIAoJVUludDgJCWhvdXI7CQkJCQkJIAoJVUludDgJCW1pbnV0ZTsJCQkJCSAKCVVJbnQ4CQlz ZWNvbmQ7CQkJCQkgCglVSW50OAkJdW51c2VkOwkJCQkJIAoJfSBEbHBEYXRlVGltZVR5cGU7CQkJ CSAKCgogCnR5cGVkZWYgc3RydWN0IERscFZlcnNpb25UeXBlIHsKCQkJCQkJCQkJCQkJIAoJVUlu dDE2CQkJCXdNYWpvcjsJCQkgCglVSW50MTYJCQkJd01pbm9yOwkJCSAKCQkJCQkJCQkJCQkJIAoJ fSBEbHBWZXJzaW9uVHlwZTsKCiAKIAoKCgoKCgoKIAogCnR5cGVkZWYgc3RydWN0IERscFJlcUhl YWRlclR5cGUgewoJCQkJCQkJCQkJCQkgCglVSW50OAkJCQkJaWQ7CQkJCSAKCVVJbnQ4CQkJCQlh cmdjOwkJCQkgCgkJCQkJCQkJCQkJCSAKCX0gRGxwUmVxSGVhZGVyVHlwZTsKCnR5cGVkZWYgRGxw UmVxSGVhZGVyVHlwZSoJCURscFJlcUhlYWRlclB0cjsKCnR5cGVkZWYgc3RydWN0IERscFJlcVR5 cGUgewoJCQkJCQkJCQkJCQkgCglEbHBSZXFIZWFkZXJUeXBlCWhlYWRlcjsJCQkgCgkJCQkJCQkJ CQkJCSAKCVVJbnQ4CQkJCQlhcmdzWzJdOwkJCSAKCX0gRGxwUmVxVHlwZTsKCnR5cGVkZWYgRGxw UmVxVHlwZSoJCURscFJlcVB0cjsKIAogCiAKdHlwZWRlZiBzdHJ1Y3QgRGxwUmVzcEhlYWRlclR5 cGUgewoJCQkJCQkJCQkJCQkgCglVSW50OAkJCQkJaWQ7CQkJCSAKCVVJbnQ4CQkJCQlhcmdjOwkJ CQkgCglVSW50MTYJCQkJZXJyb3JDb2RlOwkJIAoJCQkJCQkJCQkJCQkgCgl9IERscFJlc3BIZWFk ZXJUeXBlOwoKdHlwZWRlZiBEbHBSZXNwSGVhZGVyVHlwZSoJCURscFJlc3BIZWFkZXJQdHI7Cgp0 eXBlZGVmIHN0cnVjdCBEbHBSZXNwVHlwZSB7CgkJCQkJCQkJCQkJCSAKCURscFJlc3BIZWFkZXJU eXBlCWhlYWRlcjsJCQkgCgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQlhcmdzWzJdOwkJCSAKCX0g RGxwUmVzcFR5cGU7CgkKdHlwZWRlZiBEbHBSZXNwVHlwZSoJCURscFJlc3BQdHI7CgoKIAogCnR5 cGVkZWYgdW5pb24gRGxwR2VuZXJpY0JvZHlUeXBlIHsKCVVJbnQ4CQkJCQlpZDsJCQkJIAoJRGxw UmVxVHlwZQkJCXJlcTsJCQkJIAoJRGxwUmVzcFR5cGUJCQlyZXNwOwkJCQkgCgl9IERscEdlbmVy aWNCb2R5VHlwZTsKCQp0eXBlZGVmIERscEdlbmVyaWNCb2R5VHlwZSoJCURscEdlbmVyaWNCb2R5 UHRyOwoKCiAKIAogCiAKIAoKCiAKCgogCiAKIAoKCgogCgoKCgoKCgoKCiAKIAogCgoKIAogCgoK CiAKIAogCgoKIAogCgoKCiAKIAogCgogCgoKCgoKCiAKIAp0eXBlZGVmIHN0cnVjdCBEbHBUaW55 QXJnV3JhcHBlclR5cGUgewoJCQkJCQkJCQkJCQkgCglVSW50OAkJCQkJYklEOwkJCQkgCglVSW50 OAkJCQkJYlNpemU7CQkJIAoJCQkJCQkJCQkJCQkgCgl9IERscFRpbnlBcmdXcmFwcGVyVHlwZTsK CQp0eXBlZGVmIHN0cnVjdCBEbHBUaW55QXJnVHlwZSB7CglEbHBUaW55QXJnV3JhcHBlclR5cGUJ d3JhcHBlcjsJIAoJVUludDgJCQkJCQkJZGF0YVsyXTsJIAoJfSBEbHBUaW55QXJnVHlwZTsKCQoK IAogCiAKdHlwZWRlZiBzdHJ1Y3QgRGxwU21hbGxBcmdXcmFwcGVyVHlwZSB7CgkJCQkJCQkJCQkJ CSAKCVVJbnQ4CQkJCQliSUQ7CQkJCSAKCVVJbnQ4CQkJCQl1bnVzZWQ7CQkJIAoJVUludDE2CQkJ CQl3U2l6ZTsJCQkgCgkJCQkJCQkJCQkJCSAKCX0gRGxwU21hbGxBcmdXcmFwcGVyVHlwZTsKCnR5 cGVkZWYgc3RydWN0IERscFNtYWxsQXJnVHlwZSB7CglEbHBTbWFsbEFyZ1dyYXBwZXJUeXBlCXdy YXBwZXI7CSAKCVVJbnQ4CQkJCQkJCWRhdGFbMl07CSAKCX0gRGxwU21hbGxBcmdUeXBlOwoKIAp0 eXBlZGVmIHVuaW9uIERscFNob3J0QXJnV3JhcHBlclR5cGUgewoJVUludDgJCQkJCQkJYklEOwkJ IAoJRGxwVGlueUFyZ1dyYXBwZXJUeXBlCXRpbnk7CQkgCglEbHBTbWFsbEFyZ1dyYXBwZXJUeXBl CXNtYWxsOwkgCgl9IERscFNob3J0QXJnV3JhcHBlclR5cGU7CnR5cGVkZWYgRGxwU2hvcnRBcmdX cmFwcGVyVHlwZSoJRGxwU2hvcnRBcmdXcmFwcGVyUHRyOwoJCnR5cGVkZWYgdW5pb24gRGxwU2hv cnRBcmdUeXBlIHsKCVVJbnQ4CQkJCQkJCWJJRDsJCSAKCURscFRpbnlBcmdUeXBlCQkJCXRpbnk7 CQkgCglEbHBTbWFsbEFyZ1R5cGUJCQlzbWFsbDsJIAoJfSBEbHBTaG9ydEFyZ1R5cGU7Cgp0eXBl ZGVmIERscFNob3J0QXJnVHlwZSoJCQlEbHBTaG9ydEFyZ1B0cjsKCgoKIAogCiAKIAogCiAKIAog CiAKIAoKIAoKCnR5cGVkZWYgc3RydWN0IERscExvbmdBcmdXcmFwcGVyVHlwZSB7CgkJCQkJCQkJ CQkJCSAKCVVJbnQxNgkJCQl3SUQ7CQkJCSAKCVVJbnQzMgkJCQlkd1NpemU7CQkJIAoJCQkJCQkJ CQkJCQkgCgl9IERscExvbmdBcmdXcmFwcGVyVHlwZTsKdHlwZWRlZiBEbHBMb25nQXJnV3JhcHBl clR5cGUqCQlEbHBMb25nQXJnV3JhcHBlclB0cjsKCnR5cGVkZWYgc3RydWN0IERscExvbmdBcmdU eXBlIHsKCQkJCQkJCQkJCQkJIAoJRGxwTG9uZ0FyZ1dyYXBwZXJUeXBlCXdyYXBwZXI7CSAKCVVJ bnQ4CQkJCQkJCWRhdGFbMl07CSAKCX0gRGxwTG9uZ0FyZ1R5cGU7CnR5cGVkZWYgRGxwTG9uZ0Fy Z1R5cGUqCURscExvbmdBcmdQdHI7CgoKIAogCiAKCiAKdHlwZWRlZiB1bmlvbiBEbHBHZW5lcmlj QXJnV3JhcHBlclR5cGUgewoJRGxwU2hvcnRBcmdXcmFwcGVyVHlwZQlzaG9ydFdyYXA7CSAKCURs cExvbmdBcmdXcmFwcGVyVHlwZQlsb25nV3JhcDsJIAoJfSBEbHBHZW5lcmljQXJnV3JhcHBlclR5 cGU7CnR5cGVkZWYgRGxwR2VuZXJpY0FyZ1dyYXBwZXJUeXBlKgkJRGxwR2VuZXJpY0FyZ1dyYXBw ZXJQdHI7CgoKIAp0eXBlZGVmIHVuaW9uIERscEdlbmVyaWNBcmdUeXBlIHsKCURscFNob3J0QXJn VHlwZQkJCXNob3J0QXJnOwkgCglEbHBMb25nQXJnVHlwZQkJCQlsb25nQXJnOwkJIAoJfSBEbHBH ZW5lcmljQXJnVHlwZTsKdHlwZWRlZiBEbHBHZW5lcmljQXJnVHlwZSoJCQlEbHBHZW5lcmljQXJn UHRyOwoKCiAKCgoKIAogCiAKCgoKCiAKCgoKCiAKIAogCiAKIAogCiAKIAogCiAKCiAKIAogCgkK IAogCgoKdHlwZWRlZiBzdHJ1Y3QgRGxwUmVhZFVzZXJJbmZvUmVzcEhkclR5cGUgewoJCQkJCQkJ CQkJCQkgCglVSW50MzIJCQkJdXNlcklEOwkJCSAKCVVJbnQzMgkJCQl2aWV3ZXJJRDsJCSAKCVVJ bnQzMgkJCQlsYXN0U3luY1BDOwkJIAoJRGxwRGF0ZVRpbWVUeXBlCXN1Y2NTeW5jRGF0ZTsJIAoJ RGxwRGF0ZVRpbWVUeXBlCWxhc3RTeW5jRGF0ZTsJIAoJVUludDgJCQkJCXVzZXJOYW1lTGVuOwkg CgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQlwYXNzd29yZExlbjsJIAoJCQkJCQkJCQkJCQkgCgkJ CQkJCQkJCQkJCSAKCX0gRGxwUmVhZFVzZXJJbmZvUmVzcEhkclR5cGU7Cgp0eXBlZGVmIHN0cnVj dCBEbHBSZWFkVXNlckluZm9SZXNwVHlwZSB7CgkJCQkJCQkJCQkJCSAKCURscFJlYWRVc2VySW5m b1Jlc3BIZHJUeXBlCQkJIAoJCQkJCQkJaGVhZGVyOwkJCSAKCQkJCQkJCQkJCQkJIAoJVUludDgJ CQkJCW5hbWVBbmRQYXNzd29yZFsyXTsJIAoJIAoJIAoJIAoJfSBEbHBSZWFkVXNlckluZm9SZXNw VHlwZTsKCgoJCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAogCgoKCgp0eXBlZGVmIHN0 cnVjdCBEbHBXcml0ZVVzZXJJbmZvUmVxSGRyVHlwZSB7CgkJCQkJCQkJCQkJCSAKCVVJbnQzMgkJ CQl1c2VySUQ7CQkJIAoJVUludDMyCQkJCXZpZXdlcklEOwkJIAoJVUludDMyCQkJCWxhc3RTeW5j UEM7CQkgCglEbHBEYXRlVGltZVR5cGUJbGFzdFN5bmNEYXRlOwkgCglVSW50OAkJCQkJbW9kRmxh Z3M7CQkgCgkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJIAoJVUludDgJCQkJCXVzZXJOYW1lTGVu OwkgCgkJCQkJCQkJCQkJCSAKCX0gRGxwV3JpdGVVc2VySW5mb1JlcUhkclR5cGU7CgogCiAKIAog CgoKCgoKCnR5cGVkZWYgc3RydWN0IERscFdyaXRlVXNlckluZm9SZXFUeXBlIHsKCQkJCQkJCQkJ CQkJIAoJRGxwV3JpdGVVc2VySW5mb1JlcUhkclR5cGUKCQkJCQkJCWhlYWRlcjsJCQkgCgkJCQkJ CQkJCQkJCSAKCVVJbnQ4CQkJCQl1c2VyTmFtZVsyXTsJIAoJIAoJfSBEbHBXcml0ZVVzZXJJbmZv UmVxVHlwZTsKCgkKIAogCiAKCgoJCiAKIAogCiAKIAogCiAKCiAKIAogCgplbnVtIHsKCSAKCWRs cFJlYWRTeXNJbmZvUmVxQXJnSUQJCT0gMHgyMCAKCX07CgoKIAogCnR5cGVkZWYgc3RydWN0IERs cFJlYWRTeXNJbmZvUmVxVHlwZSB7CgkJCQkJCQkJCQkJCSAKCURscFZlcnNpb25UeXBlCQlkbHBW ZXI7CQkJIAoJCQkJCQkJCQkJCQkgCgl9IERscFJlYWRTeXNJbmZvUmVxVHlwZTsKCQoJCiAKIAog CmVudW0gewoJZGxwUmVhZFN5c0luZm9SZXNwQXJnSUQJCT0gMHgyMCAsCgkKCSAKCWRscFJlYWRT eXNJbmZvVmVyUmVzcEFyZ0lECgl9OwoKIAogCnR5cGVkZWYgc3RydWN0IERscFJlYWRTeXNJbmZv UmVzcFR5cGUgewoJCQkJCQkJCQkJCQkgCglVSW50MzIJCQkJcm9tU1dWZXJzaW9uOwkgCglVSW50 MzIJCQkJbG9jYWxpemF0aW9uSUQ7IAoJVUludDgJCQkJCXVudXNlZDsJCQkgCglVSW50OAkJCQkJ cHJvZElEU2l6ZTsJCSAKCVVJbnQzMgkJCQlwcm9kSUQ7CQkJIAoJCQkJCQkJCQkJCQkgCgl9IERs cFJlYWRTeXNJbmZvUmVzcFR5cGU7CgkKCiAKIAp0eXBlZGVmIHN0cnVjdCBEbHBSZWFkU3lzSW5m b1ZlclJlc3BUeXBlIHsKCQkJCQkJCQkJCQkJIAoJRGxwVmVyc2lvblR5cGUJCWRscFZlcjsJCQkg CglEbHBWZXJzaW9uVHlwZQkJY29tcFZlcjsJCQkgCglVSW50MzIJCQkJZHdNYXhSZWNTaXplOwkg CgkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkgCgl9IERscFJlYWRTeXNJ bmZvVmVyUmVzcFR5cGU7CgoKCiAKIAogCiAKIAoKIAogCiAKCQogCiAKCgp0eXBlZGVmIHN0cnVj dCBEbHBHZXRTeXNEYXRlVGltZVJlc3BUeXBlIHsKCQkJCQkJCQkJCQkJIAoJRGxwRGF0ZVRpbWVU eXBlCWRhdGVUaW1lOwkJIAoJCQkJCQkJCQkJCQkgCgl9IERscEdldFN5c0RhdGVUaW1lUmVzcFR5 cGU7CgoKCiAKIAogCiAKIAogCiAKIAogCiAKCiAKIAoKCnR5cGVkZWYgc3RydWN0IERscFNldFN5 c0RhdGVUaW1lUmVxVHlwZSB7CgkJCQkJCQkJCQkJCSAKCURscERhdGVUaW1lVHlwZQlkYXRlVGlt ZTsJCSAKCQkJCQkJCQkJCQkJIAoJfSBEbHBTZXRTeXNEYXRlVGltZVJlcVR5cGU7Cgp0eXBlZGVm IERscFNldFN5c0RhdGVUaW1lUmVxVHlwZSoJRGxwU2V0U3lzRGF0ZVRpbWVSZXFQdHI7CgkKIAog CiAKCgoJCiAKIAogCiAKIAogCiAKIAoKIAogCmVudW0gewoJZGxwUmVhZFN0b3JhZ2VJbmZvUmVx QXJnSUQJCT0gMHgyMCAKCX07Cgp0eXBlZGVmIHN0cnVjdCBEbHBSZWFkU3RvckluZm9SZXFUeXBl IHsKCQkJCQkJCQkJCQkJIAoJVUludDgJCQkJCXN0YXJ0Q2FyZE5vOwkgCgkJCQkJCQkJCQkJCSAK CVVJbnQ4CQkJCQl1bnVzZWQ7CQkJIAoJCQkJCQkJCQkJCQkgCgl9IERscFJlYWRTdG9ySW5mb1Jl cVR5cGU7CgoKIAogCmVudW0gewoJZGxwUmVhZFN0b3JhZ2VJbmZvUmVzcEFyZ0lECQk9IDB4MjAg LAoJZGxwUmVhZFN0b3JhZ2VJbmZvRXhSZXNwQXJnSUQJCSAKCX07CgogCiAKIAoKIAp0eXBlZGVm IHN0cnVjdCBEbHBDYXJkSW5mb0hkclR5cGUgewoJCQkJCQkJCQkJCQkgCglVSW50OAkJCQkJdG90 YWxTaXplOwkJIAoJCQkJCQkJCQkJCQkgCglVSW50OAkJCQkJY2FyZE5vOwkJCSAKCVVJbnQxNgkJ CQljYXJkVmVyc2lvbjsJIAoJRGxwRGF0ZVRpbWVUeXBlCWNyRGF0ZTsJCQkgCglVSW50MzIJCQkJ cm9tU2l6ZTsJCQkgCglVSW50MzIJCQkJcmFtU2l6ZTsJCQkgCglVSW50MzIJCQkJZnJlZVJhbTsJ CQkgCgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQljYXJkTmFtZVNpemU7CSAKCVVJbnQ4CQkJCQlt YW51Zk5hbWVTaXplOwkgCgkJCQkJCQkJCQkJCSAKCX0gRGxwQ2FyZEluZm9IZHJUeXBlOwoKdHlw ZWRlZiBzdHJ1Y3QgRGxwQ2FyZEluZm9UeXBlIHsKCQkJCQkJCQkJCQkJIAoJRGxwQ2FyZEluZm9I ZHJUeXBlCQkJCQkgCgkJCQkJCQloZWFkZXI7CQkJIAoJCQkJCQkJCQkJCQkgCglVSW50OAkJCQkJ Y2FyZE5hbWVBbmRNYW51ZlsyXTsKCQkJCQkJCQkJCQkJIAoJIAoJIAoJfSBEbHBDYXJkSW5mb1R5 cGU7CgoJCnR5cGVkZWYgc3RydWN0IERscFJlYWRTdG9ySW5mb1Jlc3BIZHJUeXBlIHsKCQkJCQkJ CQkJCQkJIAoJVUludDgJCQkJCWxhc3RDYXJkTm87CQkgCglVSW50OAkJCQkJbW9yZTsJCQkJIAoJ VUludDgJCQkJCXVudXNlZDsJCQkgCglVSW50OAkJCQkJYWN0Q291bnQ7CQkgCgkJCQkJCQkJCQkJ CSAKCX0gRGxwUmVhZFN0b3JJbmZvUmVzcEhkclR5cGU7Cgp0eXBlZGVmIHN0cnVjdCBEbHBSZWFk U3RvckluZm9SZXNwVHlwZSB7CgkJCQkJCQkJCQkJCSAKCURscFJlYWRTdG9ySW5mb1Jlc3BIZHJU eXBlCQkJIAoJCQkJCQkJaGVhZGVyOwkJCSAKCQkJCQkJCQkJCQkJIAoJRGxwQ2FyZEluZm9UeXBl CWNhcmRJbmZvWzFdOwkgCgl9IERscFJlYWRTdG9ySW5mb1Jlc3BUeXBlOwoKCiAKIAogCnR5cGVk ZWYgc3RydWN0IERscFJlYWRTdG9ySW5mb0V4UmVzcFR5cGUgewoJCQkJCQkJCQkJCQkgCglVSW50 MTYJCQkJcm9tREJDb3VudDsJCSAKCVVJbnQxNgkJCQlyYW1EQkNvdW50OwkJIAoJVUludDMyCQkJ CWR3UmVzZXJ2ZWQxOwkgCglVSW50MzIJCQkJZHdSZXNlcnZlZDI7CSAKCVVJbnQzMgkJCQlkd1Jl c2VydmVkMzsJIAoJVUludDMyCQkJCWR3UmVzZXJ2ZWQ0OwkgCgkJCQkJCQkJCQkJCSAKCX0gRGxw UmVhZFN0b3JJbmZvRXhSZXNwVHlwZTsKCQoJCgkKCQogCiAKIAogCiAKIAogCiAKCiAKIAoKCnR5 cGVkZWYgc3RydWN0IERscFJlYWREQkxpc3RSZXFUeXBlIHsKCQkJCQkJCQkJCQkJIAoJVUludDgJ CQkJCXNyY2hGbGFnczsJCSAKCVVJbnQ4CQkJCQljYXJkTm87CQkJIAoJVUludDE2CQkJCXN0YXJ0 SW5kZXg7CQkgCgkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJIAoJfSBEbHBSZWFkREJMaXN0UmVx VHlwZTsKCgoKCgoKIAogCgoKIAp0eXBlZGVmIHN0cnVjdCBEbHBEQkluZm9IZHJUeXBlIHsKCQkJ CQkJCQkJCQkJIAoJVUludDgJCQkJCXRvdGFsU2l6ZTsJCSAKCQkJCQkJCQkJCQkJIAoJVUludDgJ CQkJCW1pc2NGbGFnczsJCSAKCVVJbnQxNgkJCQlkYkZsYWdzOwkJCSAKCQkJCQkJCQkJCQkJIAoJ CQkJCQkJCQkJCQkgCglVSW50MzIJCQkJdHlwZTsJCQkJIAoJVUludDMyCQkJCWNyZWF0b3I7CQkJ IAoJVUludDE2CQkJCXZlcnNpb247CQkJIAoJVUludDMyCQkJCW1vZE51bTsJCQkgCglEbHBEYXRl VGltZVR5cGUJY3JEYXRlOwkJCSAKCURscERhdGVUaW1lVHlwZQltb2REYXRlOwkJCSAKCURscERh dGVUaW1lVHlwZQliYWNrdXBEYXRlOwkJIAoJVUludDE2CQkJCWRiSW5kZXg7CQkJIAoJCQkJCQkJ CQkJCQkgCgl9IERscERCSW5mb0hkclR5cGU7CgogCgoKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgRGxw REJJbmZvVHlwZSB7CgkJCQkJCQkJCQkJCSAKCURscERCSW5mb0hkclR5cGUJaGVhZGVyOwkJCSAK CQkJCQkJCQkJCQkJIAoJVUludDgJCQkJCW5hbWVbMl07CQkJIAoJCQkJCQkJCQkJCQkgCgl9IERs cERCSW5mb1R5cGU7CgoJCnR5cGVkZWYgc3RydWN0IERscFJlYWREQkxpc3RSZXNwSGRyVHlwZSB7 CgkJCQkJCQkJCQkJCSAKCVVJbnQxNgkJCQlsYXN0SW5kZXg7CQkgCglVSW50OAkJCQkJZmxhZ3M7 CQkJIAoJVUludDgJCQkJCWFjdENvdW50OwkJIAoJCQkJCQkJCQkJCQkgCgl9IERscFJlYWREQkxp c3RSZXNwSGRyVHlwZTsKCiAKIAogCgoJCnR5cGVkZWYgc3RydWN0IERscFJlYWREQkxpc3RSZXNw VHlwZSB7CgkJCQkJCQkJCQkJCSAKCURscFJlYWREQkxpc3RSZXNwSGRyVHlwZQkJCSAKCQkJCQkJ CWhlYWRlcjsJCQkgCgkJCQkJCQkJCQkJCSAKCURscERCSW5mb1R5cGUJCWRiSW5mb1sxXTsJCSAK CX0gRGxwUmVhZERCTGlzdFJlc3BUeXBlOwoJCgogCiAKIAogCiAKIAogCiAKIAogCiAKCiAKIAoK CnR5cGVkZWYgc3RydWN0IERscE9wZW5EQlJlcUhkclR5cGUgewoJCQkJCQkJCQkJCQkgCglVSW50 OAkJCQkJY2FyZE5vOwkJCSAKCVVJbnQ4CQkJCQltb2RlOwkJCQkgCgkJCQkJCQkJCQkJCSAKCX0g RGxwT3BlbkRCUmVxSGRyVHlwZTsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IERscE9wZW5EQlJlcVR5 cGUgewoJCQkJCQkJCQkJCQkgCglEbHBPcGVuREJSZXFIZHJUeXBlCQkJCQkgCgkJCQkJCQloZWFk ZXI7CQkJIAoJCQkJCQkJCQkJCQkgCglVSW50OAkJCQkJbmFtZVsyXTsJCQkgCgkJCQkJCQkJCQkJ CSAKCX0gRGxwT3BlbkRCUmVxVHlwZTsKCnR5cGVkZWYgRGxwT3BlbkRCUmVxVHlwZSoJCURscE9w ZW5EQlJlcVB0cjsKCgkKIAogCgogCiAKIAoKCQoJCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgog CiAKCgp0eXBlZGVmIHN0cnVjdCBEbHBDcmVhdGVEQlJlcUhkclR5cGUgewoJCQkJCQkJCQkJCQkg CglVSW50MzIJCQkJY3JlYXRvcjsJCQkgCglVSW50MzIJCQkJdHlwZTsJCQkJIAoJVUludDgJCQkJ CWNhcmRObzsJCQkgCglVSW50OAkJCQkJdW51c2VkOwkJCSAKCVVJbnQxNgkJCQlkYkZsYWdzOwkJ CSAKCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkgCglVSW50MTYJCQkJdmVyc2lvbjsJCQkgCgkJ CQkJCQkJCQkJCSAKCX0gRGxwQ3JlYXRlREJSZXFIZHJUeXBlOwoKdHlwZWRlZiBzdHJ1Y3QgRGxw Q3JlYXRlREJSZXFUeXBlIHsKCQkJCQkJCQkJCQkJIAoJRGxwQ3JlYXRlREJSZXFIZHJUeXBlCQkJ CSAKCQkJCQkJCWhlYWRlcjsJCQkgCgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQluYW1lWzJdOwkJ CSAKCQkJCQkJCQkJCQkJIAoJfSBEbHBDcmVhdGVEQlJlcVR5cGU7Cgp0eXBlZGVmIERscENyZWF0 ZURCUmVxVHlwZSoJCURscENyZWF0ZURCUmVxUHRyOwoKCQogCiAKCgogCiAKCgoJCiAKIAogCiAK IAogCiAKIAogCgogCiAKdHlwZWRlZiBlbnVtIHsKCWRscENsb3NlREJSZXFBcmdJRCA9IDB4MjAg LAkJCQkgCglkbHBDbG9zZURCQWxsUmVxQXJnSUQsCQkJCQkJCQkgCglkbHBDbG9zZURCRXhSZXFB cmdJRAkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJCSAKCX0gRGxwQ2xvc2VEQlJlcUFyZ0lEOwoK IAogCiAKIAp0eXBlZGVmIFVJbnQ4IERscENsb3NlREJSZXFUeXBlOwoKIAogCiAKCgogCnR5cGVk ZWYgc3RydWN0IERscENsb3NlREJFeFJlcVR5cGUgewoJCQkJCQkJCQkJCQkgCglVSW50OAkJCQkJ ZGJJRDsJCQkJIAoJVUludDgJCQkJCWJPcHRGbGFnczsJCSAKCQkJCQkJCQkJCQkJIAoJfSBEbHBD bG9zZURCRXhSZXFUeXBlOwoKIAoKCgoKCgoKIAogCiAKCgoJCiAKIAogCiAKIAogCiAKIAogCiAK CiAKIAoKCnR5cGVkZWYgc3RydWN0IERscERlbGV0ZURCUmVxSGRyVHlwZSB7CgkJCQkJCQkJCQkJ CSAKCVVJbnQ4CQkJCQljYXJkTm87CQkJIAoJVUludDgJCQkJCXVudXNlZDsJCQkgCgkJCQkJCQkJ CQkJCSAKCX0gRGxwRGVsZXRlREJSZXFIZHJUeXBlOwoKCnR5cGVkZWYgc3RydWN0IERscERlbGV0 ZURCUmVxVHlwZSB7CgkJCQkJCQkJCQkJCSAKCURscERlbGV0ZURCUmVxSGRyVHlwZQkJCQkgCgkJ CQkJCQloZWFkZXI7CQkJIAoJCQkJCQkJCQkJCQkgCglVSW50OAkJCQkJbmFtZVsyXTsJCQkgCgkJ CQkJCQkJCQkJCSAKCX0gRGxwRGVsZXRlREJSZXFUeXBlOwoKdHlwZWRlZiBEbHBEZWxldGVEQlJl cVR5cGUqCQlEbHBEZWxldGVEQlJlcVB0cjsKCgogCiAKIAoKCiAKIAogCiAKIAogCiAKIAoKIAog CgoKIAogCgkKCiAKIAoKCgp0eXBlZGVmIHN0cnVjdCBEbHBSZWFkT3BlbkRCSW5mb1Jlc3BUeXBl IHsKCQkJCQkJCQkJCQkJIAoJVUludDE2CQkJCW51bVJlYzsJCQkgCgkJCQkJCQkJCQkJCSAKCX0g RGxwUmVhZE9wZW5EQkluZm9SZXNwVHlwZTsKCgkKIAogCiAKIAogCiAKIAogCiAKCiAKIAoKCnR5 cGVkZWYgc3RydWN0IERscE1vdmVDYXRlZ29yeVJlcVR5cGUgewoJCQkJCQkJCQkJCQkgCglVSW50 OAkJCQkJZGJJRDsJCQkJIAoJVUludDgJCQkJCWZyb21DYXRlZ29yeTsJIAoJVUludDgJCQkJCXRv Q2F0ZWdvcnk7CQkgCglVSW50OAkJCQkJdW51c2VkOwkJCSAKCQkJCQkJCQkJCQkJIAoJfSBEbHBN b3ZlQ2F0ZWdvcnlSZXFUeXBlOwoJCgogCiAKIAoKCQogCiAKIAogCiAKIAogCiAKIAogCgogCiAK Cgp0eXBlZGVmIHN0cnVjdCBEbHBSZWFkQmxvY2tSZXFUeXBlIHsKCQkJCQkJCQkJCQkJIAoJVUlu dDgJCQkJCWRiSUQ7CQkJCSAKCVVJbnQ4CQkJCQl1bnVzZWQ7CQkJIAoJVUludDE2CQkJCW9mZnNl dDsJCQkgCglVSW50MTYJCQkJbnVtQnl0ZXM7CQkgCgkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJ IAoJfSBEbHBSZWFkQmxvY2tSZXFUeXBlOwoJCgogCiAKCgp0eXBlZGVmIHN0cnVjdCBEbHBSZWFk QmxvY2tSZXNwSGRyVHlwZSB7CgkJCQkJCQkJCQkJCSAKCVVJbnQxNgkJCQlibG9ja1NpemU7CQkg CgkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJIAoJfSBEbHBSZWFkQmxvY2tSZXNwSGRyVHlwZTsK CnR5cGVkZWYgc3RydWN0IERscFJlYWRCbG9ja1Jlc3BUeXBlIHsKCQkJCQkJCQkJCQkJIAoJRGxw UmVhZEJsb2NrUmVzcEhkclR5cGUJCQkJIAoJCQkJCQkJaGVhZGVyOwkJCSAKCQkJCQkJCQkJCQkJ IAoJVUludDgJCQkJCWRhdGFbMl07CQkJIAoJfSBEbHBSZWFkQmxvY2tSZXNwVHlwZTsKCgkKIAog CiAKIAogCiAKIAogCiAKIAoKIAogCgoKdHlwZWRlZiBzdHJ1Y3QgRGxwV3JpdGVCbG9ja1JlcUhk clR5cGUgewoJCQkJCQkJCQkJCQkgCglVSW50OAkJCQkJZGJJRDsJCQkJIAoJVUludDgJCQkJCXVu dXNlZDsJCQkgCglVSW50MTYJCQkJYmxvY2tTaXplOwkJIAoJCQkJCQkJCQkJCQkgCgl9IERscFdy aXRlQmxvY2tSZXFIZHJUeXBlOwoKCnR5cGVkZWYgc3RydWN0IERscFdyaXRlQmxvY2tSZXFUeXBl IHsKCQkJCQkJCQkJCQkJIAoJRGxwV3JpdGVCbG9ja1JlcUhkclR5cGUJCQkJIAoJCQkJCQkJaGVh ZGVyOwkJCSAKCQkJCQkJCQkJCQkJIAoJVUludDgJCQkJCWRhdGFbMl07CQkJIAoJfSBEbHBXcml0 ZUJsb2NrUmVxVHlwZTsKCgogCiAKIAoKCgogCiAKIAogCiAKIAogCiAKIAoKIAogCiAKCgogCiAK IAoKCiAKIAogCiAKIAogCiAKIAogCgogCiAKIAoKCiAKIAogCgoKCiAKIAogCiAKIAogCiAKCiAK IAoKIAogCgoKIAogCiAKCiAKCgoKIAogCiAKIAogCiAKIAogCgogCiAKCgogCiAKCiAKIAogCgoK CiAKIAogCiAKIAogCiAKIAogCiAKIAogCgp0eXBlZGVmIGVudW0gewoJZGxwUmVhZFJlY29yZElk QXJnSUQgPSAweDIwICwKCWRscFJlYWRSZWNvcmRJbmRleEFyZ0lECgl9IERscFJlYWRSZWNvcmRS ZXFBcmdJRDsKCiAKIAp0eXBlZGVmIHN0cnVjdCBEbHBSZWFkUmVjb3JkQnlJRFJlcVR5cGUgewoJ CQkJCQkJCQkJCQkgCglVSW50OAkJCQkJZGJJRDsJCQkJIAoJVUludDgJCQkJCXVudXNlZDsJCQkg CglVSW50MzIJCQkJcmVjb3JkSUQ7CQkgCglVSW50MTYJCQkJb2Zmc2V0OwkJCSAKCVVJbnQxNgkJ CQludW1CeXRlczsJCSAKCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkgCgl9IERscFJlYWRSZWNv cmRCeUlEUmVxVHlwZTsKCiAKIAp0eXBlZGVmIHN0cnVjdCBEbHBSZWFkUmVjb3JkQnlJbmRleFJl cVR5cGUgewoJCQkJCQkJCQkJCQkgCglVSW50OAkJCQkJZGJJRDsJCQkJIAoJVUludDgJCQkJCXVu dXNlZDsJCQkgCglVSW50MTYJCQkJaW5kZXg7CQkJIAoJVUludDE2CQkJCW9mZnNldDsJCQkgCglV SW50MTYJCQkJbnVtQnl0ZXM7CQkgCgkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJIAoJfSBEbHBS ZWFkUmVjb3JkQnlJbmRleFJlcVR5cGU7CgoKIAogCgoKdHlwZWRlZiBzdHJ1Y3QgRGxwUmVhZFJl Y29yZFJlc3BIZHJUeXBlIHsKCQkJCQkJCQkJCQkJIAoJVUludDMyCQkJCXJlY29yZElEOwkJIAoJ VUludDE2CQkJCWluZGV4OwkJCSAKCVVJbnQxNgkJCQlyZWNTaXplOwkJCSAKCVVJbnQ4CQkJCQlh dHRyaWJ1dGVzOwkJIAoJVUludDgJCQkJCWNhdGVnb3J5OwkJIAoJCQkJCQkJCQkJCQkgCgl9IERs cFJlYWRSZWNvcmRSZXNwSGRyVHlwZTsKCnR5cGVkZWYgc3RydWN0IERscFJlYWRSZWNvcmRSZXNw VHlwZSB7CgkJCQkJCQkJCQkJCSAKCURscFJlYWRSZWNvcmRSZXNwSGRyVHlwZQkJCSAKCQkJCQkJ CWhlYWRlcjsJCQkgCgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQlkYXRhWzJdOwkJCSAKCX0gRGxw UmVhZFJlY29yZFJlc3BUeXBlOwoKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgogCiAKdHlw ZWRlZiBzdHJ1Y3QgRGxwUmVhZFJlY29yZElETGlzdFJlcVR5cGUgewoJCQkJCQkJCQkJCQkgCglV SW50OAkJCQkJZGJJRDsJCQkJIAoJVUludDgJCQkJCWZsYWdzOwkJCSAKCVVJbnQxNgkJCQlzdGFy dDsJCQkgCglVSW50MTYJCQkJbWF4RW50cmllczsJCSAKCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJ CQkgCgl9IERscFJlYWRSZWNvcmRJRExpc3RSZXFUeXBlOwoKIAogCgoKCiAKIAoKCnR5cGVkZWYg c3RydWN0IERscFJlYWRSZWNvcmRJRExpc3RSZXNwSGRyVHlwZSB7CgkJCQkJCQkJCQkJCSAKCVVJ bnQxNgkJCQludW1FbnRyaWVzOwkJIAoJCQkJCQkJCQkJCQkgCgl9IERscFJlYWRSZWNvcmRJRExp c3RSZXNwSGRyVHlwZTsKCnR5cGVkZWYgc3RydWN0IERscFJlYWRSZWNvcmRJRExpc3RSZXNwVHlw ZSB7CgkJCQkJCQkJCQkJCSAKCURscFJlYWRSZWNvcmRJRExpc3RSZXNwSGRyVHlwZQkgCgkJCQkJ CQloZWFkZXI7CQkJIAoJCQkJCQkJCQkJCQkgCglVSW50MzIJCQkJcmVjSURbMV07CQkgCgl9IERs cFJlYWRSZWNvcmRJRExpc3RSZXNwVHlwZTsKCgkKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgog CiAKCgogCnR5cGVkZWYgc3RydWN0IERscFdyaXRlUmVjb3JkUmVxSGRyVHlwZSB7CgkJCQkJCQkJ CQkJCSAKCVVJbnQ4CQkJCQlkYklEOwkJCQkgCglVSW50OAkJCQkJZmxhZ3M7CQkJIAoJVUludDMy CQkJCXJlY29yZElEOwkJIAoJVUludDgJCQkJCWF0dHJpYnV0ZXM7CQkgCgkJCQkJCQkJCQkJCSAK CQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQljYXRl Z29yeTsJCSAKCQkJCQkJCQkJCQkJIAoJfSBEbHBXcml0ZVJlY29yZFJlcUhkclR5cGU7CgoKCQkJ CQkJCQkJCQkJCQkJCSAKCnR5cGVkZWYgc3RydWN0IERscFdyaXRlUmVjb3JkUmVxVHlwZSB7CgkJ CQkJCQkJCQkJCSAKCURscFdyaXRlUmVjb3JkUmVxSGRyVHlwZQkJCSAKCQkJCQkJCWhlYWRlcjsJ CQkgCgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQlkYXRhWzJdOwkJCSAKCX0gRGxwV3JpdGVSZWNv cmRSZXFUeXBlOwoKCiAKIAoKCnR5cGVkZWYgc3RydWN0IERscFdyaXRlUmVjb3JkUmVzcFR5cGUg ewoJCQkJCQkJCQkJCQkgCglVSW50MzIJCQkJcmVjb3JkSUQ7CQkgCgkJCQkJCQkJCQkJCSAKCX0g RGxwV3JpdGVSZWNvcmRSZXNwVHlwZTsKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAKIAoK CiAKdHlwZWRlZiBzdHJ1Y3QgRGxwRGVsZXRlUmVjb3JkUmVxVHlwZSB7CgkJCQkJCQkJCQkJCSAK CVVJbnQ4CQkJCQlkYklEOwkJCQkgCglVSW50OAkJCQkJZmxhZ3M7CQkJIAoJVUludDMyCQkJCXJl Y29yZElEOwkJIAoJCQkJCQkJCQkJCQkgCgl9IERscERlbGV0ZVJlY29yZFJlcVR5cGU7CgogCiAK CgogCiAKCgogCiAKIAoKCgogCiAKIAogCiAKIAogCiAKIAoKdHlwZWRlZiBlbnVtIHsKCWRscFJl YWRSZXNvdXJjZUluZGV4QXJnSUQgPSAweDIwICwKCWRscFJlYWRSZXNvdXJjZVR5cGVBcmdJRAoJ fSBEbHBSZWFkUmVzb3VyY2VSZXFBcmdJRDsKCiAKIAp0eXBlZGVmIHN0cnVjdCBEbHBSZWFkUmVz b3VyY2VCeUluZGV4UmVxVHlwZSB7CgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQlkYklEOwkJCQkg CglVSW50OAkJCQkJdW51c2VkOwkJCSAKCVVJbnQxNgkJCQlpbmRleDsJCQkgCglVSW50MTYJCQkJ b2Zmc2V0OwkJCSAKCVVJbnQxNgkJCQludW1CeXRlczsJCSAKCQkJCQkJCQkJCQkJIAoJCQkJCQkJ CQkJCQkgCgl9IERscFJlYWRSZXNvdXJjZUJ5SW5kZXhSZXFUeXBlOwoKIAogCnR5cGVkZWYgc3Ry dWN0IERscFJlYWRSZXNvdXJjZUJ5VHlwZVJlcVR5cGUgewoJCQkJCQkJCQkJCQkgCglVSW50OAkJ CQkJZGJJRDsJCQkJIAoJVUludDgJCQkJCXVudXNlZDsJCQkgCglVSW50MzIJCQkJdHlwZTsJCQkJ IAoJVUludDE2CQkJCWlkOwkJCQkgCglVSW50MTYJCQkJb2Zmc2V0OwkJCSAKCVVJbnQxNgkJCQlu dW1CeXRlczsJCSAKCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkgCgl9IERscFJlYWRSZXNvdXJj ZUJ5VHlwZVJlcVR5cGU7CgkKCiAKIAoKCnR5cGVkZWYgc3RydWN0IERscFJlYWRSZXNvdXJjZVJl c3BIZHJUeXBlIHsKCQkJCQkJCQkJCQkJIAoJVUludDMyCQkJCXR5cGU7CQkJCSAKCVVJbnQxNgkJ CQlpZDsJCQkJIAoJVUludDE2CQkJCWluZGV4OwkJCSAKCVVJbnQxNgkJCQlyZXNTaXplOwkJCSAK CQkJCQkJCQkJCQkJIAoJfSBEbHBSZWFkUmVzb3VyY2VSZXNwSGRyVHlwZTsKCnR5cGVkZWYgc3Ry dWN0IERscFJlYWRSZXNvdXJjZVJlc3BUeXBlIHsKCQkJCQkJCQkJCQkJIAoJRGxwUmVhZFJlc291 cmNlUmVzcEhkclR5cGUJCQkgCgkJCQkJCQloZWFkZXI7CQkJIAoJCQkJCQkJCQkJCQkgCglVSW50 OAkJCQkJcmVzRGF0YVsyXTsJCSAKCX0gRGxwUmVhZFJlc291cmNlUmVzcFR5cGU7CgoKCiAKIAog CiAKIAogCiAKIAogCgogCiAKCgp0eXBlZGVmIHN0cnVjdCBEbHBXcml0ZVJlc291cmNlUmVxSGRy VHlwZSB7CgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQlkYklEOwkJCQkgCglVSW50OAkJCQkJdW51 c2VkOwkJCSAKCVVJbnQzMgkJCQl0eXBlOwkJCQkgCglVSW50MTYJCQkJaWQ7CQkJCSAKCVVJbnQx NgkJCQlyZXNTaXplOwkJCSAKCQkJCQkJCQkJCQkJIAoJfSBEbHBXcml0ZVJlc291cmNlUmVxSGRy VHlwZTsKCnR5cGVkZWYgc3RydWN0IERscFdyaXRlUmVzb3VyY2VSZXFUeXBlIHsKCQkJCQkJCQkJ CQkJIAoJRGxwV3JpdGVSZXNvdXJjZVJlcUhkclR5cGUJCQkgCgkJCQkJCQloZWFkZXI7CQkJIAoJ CQkJCQkJCQkJCQkgCglVSW50OAkJCQkJZGF0YVsyXTsJCQkgCgl9IERscFdyaXRlUmVzb3VyY2VS ZXFUeXBlOwoKIAogCiAKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCgogCiAKCgp0eXBlZGVmIHN0 cnVjdCBEbHBEZWxldGVSZXNvdXJjZVJlcVR5cGUgewoJCQkJCQkJCQkJCQkgCglVSW50OAkJCQkJ ZGJJRDsJCQkJIAoJVUludDgJCQkJCWZsYWdzOwkJCSAKCVVJbnQzMgkJCQl0eXBlOwkJCQkgCglV SW50MTYJCQkJaWQ7CQkJCSAKCQkJCQkJCQkJCQkJIAoJfSBEbHBEZWxldGVSZXNvdXJjZVJlcVR5 cGU7CgogCgoKCiAKIAogCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogCiAKCgogCiAKCiAK IAogCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAoKIAogCgoKIAogCgoKIAogCiAKCgoKIAogCiAK IAogCiAKIAogCiAKIAoKIAogCmVudW0JewoJZGxwQ2FsbEFwcGxpY2F0aW9uUmVxQXJnSURWMTAg PSAweDIwICwJIAoJZGxwQ2FsbEFwcFJlcUFyZ0lECQkJCQkJCQkJCSAKCX07CgogCnR5cGVkZWYg c3RydWN0IERscENhbGxBcHBsaWNhdGlvblJlcUhkclR5cGVWMTAgewoJCQkJCQkJCQkJCQkgCglV SW50MzIJCQkJY3JlYXRvcjsJCQkgCglVSW50MTYJCQkJYWN0aW9uOwkJCSAKCVVJbnQxNgkJCQlw YXJhbVNpemU7CQkgCgkJCQkJCQkJCQkJCSAKCX0gRGxwQ2FsbEFwcGxpY2F0aW9uUmVxSGRyVHlw ZVYxMDsKCnR5cGVkZWYgc3RydWN0IERscENhbGxBcHBsaWNhdGlvblJlcVR5cGVWMTAgewoJCQkJ CQkJCQkJCQkgCglEbHBDYWxsQXBwbGljYXRpb25SZXFIZHJUeXBlVjEwCSAKCQkJCQkJCWhlYWRl cjsJCQkgCgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQlwYXJhbURhdGFbMl07CSAKCX0gRGxwQ2Fs bEFwcGxpY2F0aW9uUmVxVHlwZVYxMDsKCgogCnR5cGVkZWYgc3RydWN0IERscENhbGxBcHBSZXFI ZHJUeXBlIHsKCQkJCQkJCQkJCQkJIAoJVUludDMyCQkJCWNyZWF0b3I7CQkJIAoJVUludDMyCQkJ CXR5cGU7CQkJCSAKCVVJbnQxNgkJCQlhY3Rpb247CQkJIAoJVUludDMyCQkJCWR3UGFyYW1TaXpl OwkgCglVSW50MzIJCQkJZHdSZXNlcnZlZDE7CSAKCVVJbnQzMgkJCQlkd1Jlc2VydmVkMjsJIAoJ CQkJCQkJCQkJCQkgCgl9IERscENhbGxBcHBSZXFIZHJUeXBlOwoKdHlwZWRlZiBzdHJ1Y3QgRGxw Q2FsbEFwcFJlcVR5cGUgewoJCQkJCQkJCQkJCQkgCglEbHBDYWxsQXBwUmVxSGRyVHlwZQkJCQkJ IAoJCQkJCQkJaGRyOwkJCQkgCgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQlwYXJhbURhdGFbMl07 CSAKCX0gRGxwQ2FsbEFwcFJlcVR5cGU7CgoKCiAKIAplbnVtCXsKCWRscENhbGxBcHBsaWNhdGlv blJlc3BBcmdJRFYxMCA9IDB4MjAgLAkJIAoJZGxwQ2FsbEFwcFJlc3BBcmdJRAkJCQkJCQkJCQkJ IAoJfTsKCiAKdHlwZWRlZiBzdHJ1Y3QgRGxwQ2FsbEFwcGxpY2F0aW9uUmVzcEhkclR5cGVWMTAg ewoJCQkJCQkJCQkJCQkgCglVSW50MTYJCQkJYWN0aW9uOwkJCSAKCVVJbnQxNgkJCQlyZXN1bHRD b2RlOwkJIAoJVUludDE2CQkJCXJlc3VsdFNpemU7CQkgCgkJCQkJCQkJCQkJCSAKCX0gRGxwQ2Fs bEFwcGxpY2F0aW9uUmVzcEhkclR5cGVWMTA7Cgp0eXBlZGVmIHN0cnVjdCBEbHBDYWxsQXBwbGlj YXRpb25SZXNwVHlwZVYxMCB7CgkJCQkJCQkJCQkJCSAKCURscENhbGxBcHBsaWNhdGlvblJlc3BI ZHJUeXBlVjEwCSAKCQkJCQkJCWhlYWRlcjsJCQkgCgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQly ZXN1bHREYXRhWzJdOwkgCgl9IERscENhbGxBcHBsaWNhdGlvblJlc3BUeXBlVjEwOwoKIAp0eXBl ZGVmIHN0cnVjdCBEbHBDYWxsQXBwUmVzcEhkclR5cGUgewoJCQkJCQkJCQkJCQkgCglVSW50MzIJ CQkJCWR3UmVzdWx0Q29kZTsJIAoJVUludDMyCQkJCQlkd1Jlc3VsdFNpemU7CSAKCVVJbnQzMgkJ CQkJZHdSZXNlcnZlZDE7CSAKCVVJbnQzMgkJCQkJZHdSZXNlcnZlZDI7CSAKCQkJCQkJCQkJCQkJ IAoJfSBEbHBDYWxsQXBwUmVzcEhkclR5cGU7Cgp0eXBlZGVmIHN0cnVjdCBEbHBDYWxsQXBwUmVz cFR5cGUgewoJCQkJCQkJCQkJCQkgCglEbHBDYWxsQXBwUmVzcEhkclR5cGUJCQkJIAoJCQkJCQkJ aGRyOwkJCQkgCgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQlyZXN1bHREYXRhWzJdOwkgCgl9IERs cENhbGxBcHBSZXNwVHlwZTsKCgoKIAogCiAKIAogCiAKCiAKIAogCgogCiAKIAoKCgogCiAKIAog CiAKIAogCiAKIAoKIAogCgoKdHlwZWRlZiBzdHJ1Y3QgRGxwQWRkU3luY0xvZ0VudHJ5UmVxVHlw ZSB7CgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQl0ZXh0WzJdOwkJCSAKCQkJCQkJCQkJCQkJIAoJ fSBEbHBBZGRTeW5jTG9nRW50cnlSZXFUeXBlOwoKIAogCiAKCgoKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAoKIAogCiAKCiAKIAogCgoJCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAog CgogCiAKIAoKIAogCiAKCgoJCiAKIAogCiAKIAogCiAKIAogCiAKCiAKIAoKCnR5cGVkZWYgZW51 bSBEbHBTeW5jVGVybUNvZGUgewoJZGxwVGVybUNvZGVOb3JtYWwgPSAwLAkJCQkgCglkbHBUZXJt Q29kZU91dE9mTWVtb3J5LAkJCQkgCglkbHBUZXJtQ29kZVVzZXJDYW4sCQkJCQkgCglkbHBUZXJt Q29kZU90aGVyLAkJCQkJCSAKCWRscFRlcm1Db2RlSW5jb21wYXRpYmxlUHJvZHVjdHMJIAoJfSBE bHBTeW5jVGVybUNvZGU7CgkKCQp0eXBlZGVmIHN0cnVjdCBEbHBFbmRPZlN5bmNSZXFUeXBlIHsK CQkJCQkJCQkJCQkJIAoJVUludDE2CQkJCXRlcm1Db2RlOwkJIAoJCQkJCQkJCQkJCQkgCgl9IERs cEVuZE9mU3luY1JlcVR5cGU7CgoKIAogCiAKCgoKIAogCiAKIAogCiAKCgoKIAogCnR5cGVkZWYg c3RydWN0IERscFJlYWROZXh0UmVjSW5DYXRlZ29yeVJlcVR5cGUgewoJCQkJCQkJCQkJCQkgCglV SW50OAkJCQkJZGJJRDsJCQkJIAoJVUludDgJCQkJCWNhdGVnb3J5OwkJIAoJCQkJCQkJCQkJCQkg Cgl9IERscFJlYWROZXh0UmVjSW5DYXRlZ29yeVJlcVR5cGU7CgoKIAogCiAKCiAKCgoKIAogCiAK IAogCiAKCiAKIAogCgogCiAKIAoKCgogCiAKIAogCiAKIAogCiAKIAoKCgogCiAKdHlwZWRlZiBz dHJ1Y3QgRGxwUmVhZEFwcFByZWZlcmVuY2VSZXFUeXBlIHsKCQkJCQkJCQkJCQkJIAoJVUludDMy CQkJCWNyZWF0b3I7CQkJIAoJVUludDE2CQkJCWlkOwkJCQkgCglVSW50MTYJCQkJcmVxQnl0ZXM7 CQkgCgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQlmbGFnczsJCQkgCglVSW50OAkJCQkJdW51c2Vk OwkJCSAKCQkJCQkJCQkJCQkJIAoJfSBEbHBSZWFkQXBwUHJlZmVyZW5jZVJlcVR5cGU7CgoKCgog CiAKCgp0eXBlZGVmIHN0cnVjdCBEbHBSZWFkQXBwUHJlZmVyZW5jZVJlc3BIZHJUeXBlIHsKCQkJ CQkJCQkJCQkJIAoJVUludDE2CQkJCXZlcnNpb247CQkJIAoJVUludDE2CQkJCWFjdHVhbFNpemU7 CQkgCglVSW50MTYJCQkJcmV0Qnl0ZXM7CQkgCgkJCQkJCQkJCQkJCSAKCX0gRGxwUmVhZEFwcFBy ZWZlcmVuY2VSZXNwSGRyVHlwZTsKCnR5cGVkZWYgc3RydWN0IERscFJlYWRBcHBQcmVmZXJlbmNl UmVzcFR5cGUgewoJCQkJCQkJCQkJCQkgCglEbHBSZWFkQXBwUHJlZmVyZW5jZVJlc3BIZHJUeXBl CSAKCQkJCQkJCWhlYWRlcjsJCQkgCgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQlkYXRhWzJdOwkJ CSAKCX0gRGxwUmVhZEFwcFByZWZlcmVuY2VSZXNwVHlwZTsKCgkKIAogCiAKIAogCiAKIAogCgog CiAKCgp0eXBlZGVmIHN0cnVjdCBEbHBXcml0ZUFwcFByZWZlcmVuY2VSZXFIZHJUeXBlIHsKCQkJ CQkJCQkJCQkJIAoJVUludDMyCQkJCWNyZWF0b3I7CQkJIAoJVUludDE2CQkJCWlkOwkJCQkgCglV SW50MTYJCQkJdmVyc2lvbjsJCQkgCglVSW50MTYJCQkJcHJlZlNpemU7CQkgCglVSW50OAkJCQkJ ZmxhZ3M7CQkJIAoJVUludDgJCQkJCXVudXNlZDsJCQkgCgkJCQkJCQkJCQkJCSAKCX0gRGxwV3Jp dGVBcHBQcmVmZXJlbmNlUmVxSGRyVHlwZTsKCnR5cGVkZWYgc3RydWN0IERscFdyaXRlQXBwUHJl ZmVyZW5jZVJlcVR5cGUgewoJCQkJCQkJCQkJCQkgCglEbHBXcml0ZUFwcFByZWZlcmVuY2VSZXFI ZHJUeXBlCSAKCQkJCQkJCWhlYWRlcjsJCQkgCgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQlkYXRh WzJdOwkJCSAKCX0gRGxwV3JpdGVBcHBQcmVmZXJlbmNlUmVxVHlwZTsKCgogCiAKIAoKCgogCiAK IAogCiAKIAogCiAKIAogCgogCiAKIAoJCiAKIAoKCnR5cGVkZWYgc3RydWN0IERscFJlYWROZXRT eW5jSW5mb1Jlc3BIZHJUeXBlIHsKCQkJCQkJCQkJCQkJIAoJVUludDgJCQkJCWxhblN5bmNPbjsJ CSAKCVVJbnQ4CQkJCQliUmVzZXJ2ZWQxOwkJIAoJVUludDMyCQkJCWR3UmVzZXJ2ZWQxOwkgCglV SW50MzIJCQkJZHdSZXNlcnZlZDI7CSAKCVVJbnQzMgkJCQlkd1Jlc2VydmVkMzsJIAoJVUludDMy CQkJCWR3UmVzZXJ2ZWQ0OwkgCglVSW50MTYJCQkJc3luY1BDTmFtZVNpemU7IAoJCQkJCQkJCQkJ CQkgCglVSW50MTYJCQkJc3luY1BDQWRkclNpemU7IAoJCQkJCQkJCQkJCQkgCglVSW50MTYJCQkJ c3luY1BDTWFza1NpemU7IAoJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJCSAKCX0gRGxwUmVhZE5l dFN5bmNJbmZvUmVzcEhkclR5cGU7Cgp0eXBlZGVmIHN0cnVjdCBEbHBSZWFkTmV0U3luY0luZm9S ZXNwVHlwZSB7CgkJCQkJCQkJCQkJCSAKCURscFJlYWROZXRTeW5jSW5mb1Jlc3BIZHJUeXBlCQkg CgkJCQkJCQloZHI7CQkJCSAKCQkJCQkJCQkJCQkJIAoJVUludDgJCQkJCXN5bmNBZGRyWzJdOwkg CgkJCQkJCQkJCQkJCSAKCX0gRGxwUmVhZE5ldFN5bmNJbmZvUmVzcFR5cGU7CgoKCQogCiAKIAog CiAKIAogCiAKIAogCiAKCiAKIAoKCgoKdHlwZWRlZiBzdHJ1Y3QgRGxwV3JpdGVOZXRTeW5jSW5m b1JlcUhkclR5cGUgewoJCQkJCQkJCQkJCQkgCglVSW50OAkJCQkJbW9kRmxhZ3M7CQkgCgkJCQkJ CQkJCQkJCSAKCQkJCQkJCQkJCQkJIAoJVUludDgJCQkJCWxhblN5bmNPbjsJCSAKCVVJbnQzMgkJ CQlkd1Jlc2VydmVkMTsJIAoJVUludDMyCQkJCWR3UmVzZXJ2ZWQyOwkgCglVSW50MzIJCQkJZHdS ZXNlcnZlZDM7CSAKCVVJbnQzMgkJCQlkd1Jlc2VydmVkNDsJIAoJVUludDE2CQkJCXN5bmNQQ05h bWVTaXplOyAKCQkJCQkJCQkJCQkJIAoJVUludDE2CQkJCXN5bmNQQ0FkZHJTaXplOyAKCQkJCQkJ CQkJCQkJIAoJVUludDE2CQkJCXN5bmNQQ01hc2tTaXplOyAKCQkJCQkJCQkJCQkJIAoJCQkJCQkJ CQkJCQkgCgl9IERscFdyaXRlTmV0U3luY0luZm9SZXFIZHJUeXBlOwoKIAogCiAKIAoKCgoKCnR5 cGVkZWYgc3RydWN0IERscFdyaXRlTmV0U3luY0luZm9SZXFUeXBlIHsKCQkJCQkJCQkJCQkJIAoJ RGxwV3JpdGVOZXRTeW5jSW5mb1JlcUhkclR5cGUKCQkJCQkJCWhkcjsJCQkJIAoJCQkJCQkJCQkJ CQkgCglVSW50OAkJCQkJc3luY0FkZHJbMl07CSAKCQkJCQkJCQkJCQkJIAoJfSBEbHBXcml0ZU5l dFN5bmNJbmZvUmVxVHlwZTsKCgkKIAogCiAKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCgogCiAK Cgp0eXBlZGVmIHN0cnVjdCBEbHBSZWFkRmVhdHVyZVJlcVR5cGUgewoJCQkJCQkJCQkJCQkgCglV SW50MzIJCQkJZHdGdHJDcmVhdG9yOwkgCglVSW50MTYJCQkJd0Z0ck51bTsJCQkgCgkJCQkJCQkJ CQkJCSAKCX0gRGxwUmVhZEZlYXR1cmVSZXFUeXBlOwoJCgkKIAogCgoKdHlwZWRlZiBzdHJ1Y3Qg RGxwUmVhZEZlYXR1cmVSZXNwVHlwZSB7CgkJCQkJCQkJCQkJCSAKCVVJbnQzMgkJCQlkd0ZlYXR1 cmU7CQkgCgkJCQkJCQkJCQkJCSAKCX0gRGxwUmVhZEZlYXR1cmVSZXNwVHlwZTsKCgoKIAogCiAK IAogCiAKIAogCiAKIAogCgogCiAKCiAKIAplbnVtCXsKCWRscEZpbmREQkJ5TmFtZVJlcUFyZ0lE ID0gMHgyMCAsCQkgCglkbHBGaW5kREJCeU9wZW5IYW5kbGVSZXFBcmdJRCwJCQkJCSAKCWRscEZp bmREQkJ5VHlwZUNyZWF0b3JSZXFBcmdJRAkJCQkJIAoJfTsKCiAKCgkJCQkJCQkJCQkJCQkJCQkg CgkJCQkJCQkJCQkJCQkJCQkgCgoKCQkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJCSAK CQkJCQkJCQkJCQkJCQkJCQoKCQkJCQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJCSAKCQkJ CQkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJCQkJCSAKCiAKdHlwZWRlZiBzdHJ1Y3QgRGxwRmlu ZERCQnlOYW1lUmVxSGRyVHlwZSB7CgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQliT3B0RmxhZ3M7 CQkgCglVSW50OAkJCQkJYkNhcmRObzsJCQkgCgkJCQkJCQkJCQkJCSAKCX0gRGxwRmluZERCQnlO YW1lUmVxSGRyVHlwZTsKCnR5cGVkZWYgc3RydWN0IERscEZpbmREQkJ5TmFtZVJlcVR5cGUgewoJ CQkJCQkJCQkJCQkgCglEbHBGaW5kREJCeU5hbWVSZXFIZHJUeXBlCQkJIAoJCQkJCQkJaGVhZGVy OwkJCSAKCQkJCQkJCQkJCQkJIAoJVUludDgJCQkJCW5hbWVbMl07CQkJIAoJfSBEbHBGaW5kREJC eU5hbWVSZXFUeXBlOwoKCiAKdHlwZWRlZiBzdHJ1Y3QgRGxwRmluZERCQnlPcGVuSGFuZGxlUmVx VHlwZSB7CgkJCQkJCQkJCQkJCSAKCVVJbnQ4CQkJCQliT3B0RmxhZ3M7CQkgCglVSW50OAkJCQkJ YkRiSUQ7CQkJIAoJCQkJCQkJCQkJCQkgCgl9IERscEZpbmREQkJ5T3BlbkhhbmRsZVJlcVR5cGU7 CgoKIAp0eXBlZGVmIHN0cnVjdCBEbHBGaW5kREJCeVR5cGVDcmVhdG9yUmVxVHlwZSB7CgkJCQkJ CQkJCQkJCSAKCVVJbnQ4CQkJCQliT3B0RmxhZ3M7CQkgCglVSW50OAkJCQkJYlNyY2hGbGFnczsJ CSAKCVVJbnQzMgkJCQlkd1R5cGU7CQkJIAoJVUludDMyCQkJCWR3Q3JlYXRvcjsJCSAKCQkJCQkJ CQkJCQkJIAoJfSBEbHBGaW5kREJCeVR5cGVDcmVhdG9yUmVxVHlwZTsKCgoKCgkKCQogCiAKIApl bnVtCXsKCWRscEZpbmREQkJhc2ljUmVzcEFyZ0lEID0gMHgyMCAsCQkgCgkJCQkJCQkJCQkJCQkJ CQkgCglkbHBGaW5kREJTaXplUmVzcEFyZ0lECQkJCQkJCQkgCgkJCQkJCQkJCQkJCQkJCQkgCgkJ CQkJCQkJCQkJCQkJCQkgCgl9OwoKCiAKCnR5cGVkZWYgc3RydWN0IERscEZpbmREQkJhc2ljUmVz cEhkclR5cGUgewoJCQkJCQkJCQkJCQkgCglVSW50OAkJCQkJYkNhcmRObzsJCQkgCglVSW50OAkJ CQkJYlJlc2VydmVkOwkJIAoJVUludDMyCQkJCWR3TG9jYWxJRDsJCSAKCVVJbnQzMgkJCQlkd09w ZW5SZWY7CQkgCgkJCQkJCQkJCQkJCSAKCQkJCQkJCQkJCQkJIAoJRGxwREJJbmZvSGRyVHlwZQlp bmZvOwkJCQkgCgkJCQkJCQkJCQkJCSAKCX0gRGxwRmluZERCQmFzaWNSZXNwSGRyVHlwZTsKCnR5 cGVkZWYgc3RydWN0IERscEZpbmREQkJhc2ljUmVzcFR5cGUgewoJCQkJCQkJCQkJCQkgCglEbHBG aW5kREJCYXNpY1Jlc3BIZHJUeXBlCQkJIAoJCQkJCQkJaGVhZGVyOwkJCSAKCQkJCQkJCQkJCQkJ IAoJVUludDgJCQkJCW5hbWVbMl07CQkJIAoJfSBEbHBGaW5kREJCYXNpY1Jlc3BUeXBlOwoKCgog Cgp0eXBlZGVmIHN0cnVjdCBEbHBGaW5kREJTaXplUmVzcFR5cGUgewoJCQkJCQkJCQkJCQkgCgkK CSAKCSAKCVVJbnQzMgkJCQlkd051bVJlY29yZHM7CSAKCVVJbnQzMgkJCQlkd1RvdGFsQnl0ZXM7 CSAKCVVJbnQzMgkJCQlkd0RhdGFCeXRlczsJIAoJCgkgCgkgCglVSW50MzIJCQkJZHdBcHBCbGtT aXplOwkgCgkJCQkJCQkJCQkJCSAKCVVJbnQzMgkJCQlkd1NvcnRCbGtTaXplOwkgCgkJCQkJCQkJ CQkJCSAKCQkJCQkJCQkJCQkJIAoJIAoJIAoJVUludDMyCQkJCWR3TWF4UmVjU2l6ZTsJIAoJCQkJ CQkJCQkJCQkgCgkJCQkJCQkJCQkJCSAKCX0gRGxwRmluZERCU2l6ZVJlc3BUeXBlOwoKCgoKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCiAKIAoKZW51bQl7CglkbHBTZXREQkluZm9SZXFB cmdJRCA9IDB4MjAgCgl9OwoKCnR5cGVkZWYgc3RydWN0IERscFNldERCSW5mb1JlcUhkclR5cGUg ewoJCQkJCQkJCQkJCQkgCglVSW50OAkJCQkJZGJJRDsJCQkJIAoJVUludDgJCQkJCWJSZXNlcnZl ZDsJCSAKCVVJbnQxNgkJCQl3Q2xyRGJGbGFnczsJIAoJCQkJCQkJCQkJCQkgCgkJCQkJCQkJCQkJ CSAKCQkJCQkJCQkJCQkJIAoJVUludDE2CQkJCXdTZXREYkZsYWdzOwkgCgkJCQkJCQkJCQkJCSAK CQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkgCglVSW50MTYJCQkJd0RiVmVyc2lvbjsJCSAKCURs cERhdGVUaW1lVHlwZQljckRhdGU7CQkJIAoJRGxwRGF0ZVRpbWVUeXBlCW1vZERhdGU7CQkJIAoJ RGxwRGF0ZVRpbWVUeXBlCWJja1VwRGF0ZTsJCSAKCVVJbnQzMgkJCQlkd1R5cGU7CQkJIAoJVUlu dDMyCQkJCWR3Q3JlYXRvcjsJCSAKCQkJCQkJCQkJCQkJIAoJfSBEbHBTZXREQkluZm9SZXFIZHJU eXBlOwoKCgp0eXBlZGVmIHN0cnVjdCBEbHBTZXREQkluZm9SZXFUeXBlIHsKCQkJCQkJCQkJCQkJ IAoJRGxwU2V0REJJbmZvUmVxSGRyVHlwZQkJCQkgCgkJCQkJCQloZWFkZXI7CQkJIAoJCQkJCQkJ CQkJCQkgCglVSW50OAkJCQkJbmFtZVsyXTsJCQkgCgl9IERscFNldERCSW5mb1JlcVR5cGU7CgoK IAogCiAKCgoKIAoKCgoKCiMgMTcwICIuLi9TcmNTaGFyZWQvUGFsbS5oIiAyCgoJCiMgMSAiLi4v U3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9ETFNlcnZlci5oIiAxCiAK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgojcHJhZ21hIG1hcmsgKkVycm9yIENvZGVz KgoKCgoKCgoKCgoKCgoKIAoKCgojcHJhZ21hIG1hcmsgKlVzZXIgSW5mbyBQcmVmZXJlbmNlKgoK CgoKCgoKCgoKdHlwZWRlZiBlbnVtIERsa1N5bmNTdGF0ZVR5cGUgewoJZGxrU3luY1N0YXRlTmV2 ZXJTeW5jZWQgPSAwLAkJIAoJZGxrU3luY1N0YXRlSW5Qcm9ncmVzcywJCQkJIAoJZGxrU3luY1N0 YXRlTG9zdENvbm5lY3Rpb24sCQkgCglkbGtTeW5jU3RhdGVMb2NhbENhbiwJCQkJIAoJZGxrU3lu Y1N0YXRlUmVtb3RlQ2FuLAkJCQkgCglkbGtTeW5jU3RhdGVMb3dNZW1vcnlPblRELAkJCSAKCWRs a1N5bmNTdGF0ZUFib3J0ZWQsCQkJCQkgCglkbGtTeW5jU3RhdGVDb21wbGV0ZWQsCQkJCSAKCQoJ IAoJZGxrU3luY1N0YXRlSW5jb21wYXRpYmxlUHJvZHVjdHMJIAoJCQkJCQkJCQkJCQkgCgkJCQkJ CQkJCQkJCSAKCX0gRGxrU3luY1N0YXRlVHlwZTsKCgoKdHlwZWRlZiBzdHJ1Y3QgRGxrVXNlcklu Zm9IZHJUeXBlIHsKCVVJbnQxNgkJCQl2ZXJzaW9uOwkJCSAKCVVJbnQzMgkJCQl1c2VySUQ7CQkJ IAoJVUludDMyCQkJCXZpZXdlcklEOwkJIAoJVUludDMyCQkJCWxhc3RTeW5jUEM7CQkgCglVSW50 MzIJCQkJc3VjY1N5bmNEYXRlOwkgCglVSW50MzIJCQkJbGFzdFN5bmNEYXRlOwkgCglEbGtTeW5j U3RhdGVUeXBlCWxhc3RTeW5jU3RhdGU7CSAKCVVJbnQ4CQkJCQlyZXNlcnZlZDE7CQkgCglVSW50 MTYJCQkJbGFuU3luY0VuYWJsZWQ7IAoJVUludDMyCQkJCWhzVGNwUG9ydE51bTsJIAoJVUludDMy CQkJCWR3UmVzZXJ2ZWQxOwkgCglVSW50MzIJCQkJZHdSZXNlcnZlZDI7CSAKCVVJbnQ4CQkJCQl1 c2VyTmFtZUxlbjsJIAoJVUludDgJCQkJCXJlc2VydmVkMjsJCSAKCVVJbnQxNgkJCQlzeW5jTG9n TGVuOwkJIAoJfSBEbGtVc2VySW5mb0hkclR5cGU7Cgp0eXBlZGVmIHN0cnVjdCBEbGtVc2VySW5m b1R5cGUgewoJRGxrVXNlckluZm9IZHJUeXBlCWhlYWRlcjsJCQkgCglDaGFyCQkJCQkJbmFtZUFu ZExvZ1syXTsJIAoJCQkJCQkJCQkJCQkJIAoJfSBEbGtVc2VySW5mb1R5cGU7Cgp0eXBlZGVmIERs a1VzZXJJbmZvVHlwZSoJCURsa1VzZXJJbmZvUHRyOwkJIAoKCiAKCgoKI3ByYWdtYSBtYXJrICpD b25kdWl0IEZpbHRlciBQcmVmZXJlbmNlKgoKIAogCiAKCiAKIAoKdHlwZWRlZiBzdHJ1Y3QgRGxr Q29uZEZpbHRlclRhYmxlSGRyVHlwZSB7CglVSW50MTYJCQllbnRyeUNvdW50OwoJfSBEbGtDb25k RmlsdGVyVGFibGVIZHJUeXBlOwp0eXBlZGVmIERsa0NvbmRGaWx0ZXJUYWJsZUhkclR5cGUqCURs a0NvbmRGaWx0ZXJUYWJsZUhkclB0cjsKCQp0eXBlZGVmIHN0cnVjdCBEbGtDb25kRmlsdGVyRW50 cnlUeXBlIHsKCVVJbnQzMgkJCWNyZWF0b3I7CglVSW50MzIJCQl0eXBlOwoJfSBEbGtDb25kRmls dGVyRW50cnlUeXBlOwp0eXBlZGVmIERsa0NvbmRGaWx0ZXJFbnRyeVR5cGUqCURsa0NvbmRGaWx0 ZXJFbnRyeVB0cjsKCnR5cGVkZWYgc3RydWN0IERsa0NvbmRGaWx0ZXJUYWJsZVR5cGUgewoJRGxr Q29uZEZpbHRlclRhYmxlSGRyVHlwZQoJCQkJCQkJaGRyOwkJCQkgCglEbGtDb25kRmlsdGVyRW50 cnlUeXBlCgkJCQkJCQllbnRyeVsxXTsJCSAKCX0gRGxrQ29uZEZpbHRlclRhYmxlVHlwZTsKdHlw ZWRlZiBEbGtDb25kRmlsdGVyVGFibGVUeXBlKglEbGtDb25kRmlsdGVyVGFibGVQdHI7CgoKCiAK CgojcHJhZ21hIG1hcmsgKlNlc3Npb24gU3RydWN0dXJlcyoKCgogCiAKdHlwZWRlZiBlbnVtIHsK CWRsa0V2ZW50T3BlbmluZ0NvbmR1aXQgPSAxLAkJCSAKCQkJCQkJCQkJCQkJCSAKCQoJZGxrRXZl bnREYXRhYmFzZU9wZW5lZCwJCQkJCSAKCQkJCQkJCQkJCQkJCSAKCglkbGtFdmVudENsZWFuaW5n VXAsCQkJCQkJIAoJCQkJCQkJCQkJCQkJIAoJCglkbGtFdmVudFN5c3RlbVJlc2V0UmVxdWVzdGVk CQkJIAoJCQkJCQkJCQkJCQkJIAoJCQkJCQkJCQkJCQkJIAoJfSBEbGtFdmVudFR5cGU7CgogCnR5 cGVkZWYgSW50MTYgKCpEbGtFdmVudFByb2NQdHIpKFVJbnQzMiBldmVudFJlZiwgRGxrRXZlbnRU eXBlIGRsa0V2ZW50LAoJCXZvaWQgKiBwYXJhbVApOwoKIAogCnR5cGVkZWYgc3RydWN0IERsa0V2 ZW50RGF0YWJhc2VPcGVuZWRUeXBlIHsKCURtT3BlblJlZglkYlI7CQkJCQkgCglDaGFyICoJCWRi TmFtZVA7CQkJCSAKCVVJbnQzMgkJZGJUeXBlOwkJCQkgCglVSW50MzIJCWRiQ3JlYXRvcjsJCQkg Cgl9IERsa0V2ZW50RGF0YWJhc2VPcGVuZWRUeXBlOwoJCgogCnR5cGVkZWYgSW50MTYgKCpEbGtV c2VyQ2FuUHJvY1B0cikoVUludDMyIGNhblJlZik7CgoKIAogCiAKdHlwZWRlZiBzdHJ1Y3QgRGxr REJDcmVhdG9yTGlzdCB7CglVSW50MTYJCWNvdW50OwkJCQkgCglNZW1IYW5kbGUJCWxpc3RIOwkJ CQkgCgl9IERsa0RCQ3JlYXRvckxpc3Q7CgoKIAogCiAKCgoKIAogCiAKdHlwZWRlZiBzdHJ1Y3Qg RGxrU2VydmVyU2Vzc2lvblR5cGUgewogCVVJbnQxNgkJCQlodGFsTGliUmVmTnVtOwkJIAogCVVJ bnQzMgkJCQltYXhIdGFsWGZlclNpemU7CSAKCiAJIAogCURsa0V2ZW50UHJvY1B0cglldmVudFBy b2NQOwkJIAogCVVJbnQzMgkJCQlldmVudFJlZjsJCSAKCURsa1VzZXJDYW5Qcm9jUHRyCWNhblBy b2NQOwkJIAoJVUludDMyCQkJCWNhblJlZjsJCQkgCglNZW1IYW5kbGUJCQkJY29uZEZpbHRlckg7 CSAKCgkgCiAJVUludDgJCQkJCWRsa0RCSUQ7CQkJIAoJVUludDgJCQkJCXJlc2VydmVkMTsKIAlE bU9wZW5SZWYJCQlkYlI7CQkJCSAKIAlVSW50MTYJCQkJY2FyZE5vOwkJCSAKIAlVSW50MzIJCQkJ ZGJDcmVhdG9yOwkJIAogIAlDaGFyCQkJCQlkYk5hbWVbMzIgXTsJIAogIAlVSW50MTYJCQkJZGJP cGVuTW9kZTsJCSAKIAlCb29sZWFuCQkJCWNyZWF0ZWQ7CQkJIAogCUJvb2xlYW4JCQkJaXNSZXNE QjsJCQkgCiAJQm9vbGVhbgkJCQlyYW1CYXNlZDsJCSAKIAlCb29sZWFuCQkJCXJlYWRPbmx5OwkJ IAogCUxvY2FsSUQJCQkJZGJMb2NhbElEOwkJIAogCVVJbnQzMgkJCQlpbml0aWFsTW9kTnVtOwkg CiAgCVVJbnQzMgkJCQljdXJSZWNJbmRleDsJIAogIAkJCQkJCQkJCQkJCSAKICAJCiAgCSAKICAJ RGxrREJDcmVhdG9yTGlzdAljcmVhdG9yTGlzdDsKIAoJIAogCglVSW50OAlzeW5jU3RhdGU7CQkg CgkKIAlCb29sZWFuCQkJCWNvbXBsZXRlOwkJIAogCQkJCQkJCQkJCQkJIAogCQogCUJvb2xlYW4J CQkJY29uZHVpdE9wZW5lZDsJIAogCQkJCQkJCQkJCQkJIAogCQkJCQkJCQkJCQkJCiAJQm9vbGVh bgkJCQlsb2dDbGVhcmVkOwkJIAogCQkJCQkJCQkJCQkJIAoJCQkgCgkJCSAKCQkJIAoJCQkgCgkJ CSAKIAkJCQkJCQkJCQkJCQogCUJvb2xlYW4JCQkJcmVzZXRQZW5kaW5nOwkgCiAJCQkJCQkJCQkJ CQkgCiAJCQkJCQkJCQkJCQkgCiAJCQkJCQkJCQkJCQkKCSAKIAlCb29sZWFuCQkJCWdvdENvbW1h bmQ7CQkgCiAJVUludDgJCQkJCWNtZFRJRDsJCQkgCglVSW50OAkJCQkJcmVzZXJ2ZWQyOwogCVVJ bnQxNgkJCQljbWRMZW47CQkJIAogCXZvaWQgKgkJCQljbWRQOwkJCQkgCiAJTWVtSGFuZGxlCQkJ CWNtZEg7CQkJCSAKIAkKIAkgCiAJVUludDE2CQkJCXdTdGF0ZUZsYWdzOwkgCiAJRG1TZWFyY2hT dGF0ZVR5cGUJZGJTZWFyY2hTdGF0ZTsJIAogCQkJCQkJCQkJCQkJIAogCX0gRGxrU2VydmVyU2Vz c2lvblR5cGU7IAoKdHlwZWRlZiBEbGtTZXJ2ZXJTZXNzaW9uVHlwZSoJRGxrU2VydmVyU2Vzc2lv blB0cjsKCgogCgoKI3ByYWdtYSBtYXJrICpGdW5jdGlvbiBQYXJhbWV0ZXIgU3RydWN0dXJlcyoK CiAKIAogCnR5cGVkZWYgZW51bSBEbGtDdGxFbnVtIHsKCWRsa0N0bEZpcnN0ID0gMCwJCQkJIAoJ CgkgCgkgCgkgCglkbGtDdGxHZXRQQ0hvc3ROYW1lLAkJCSAKCQkJCQkJCQkJCSAKCQkJCQkJCQkJ CSAKCQkJCQkJCQkJCglkbGtDdGxTZXRQQ0hvc3ROYW1lLAkJCSAKCQkJCQkJCQkJCSAKCQoJZGxr Q3RsR2V0Q29uZEZpbHRlclRhYmxlLAkgCgkJCQkJCQkJCQkgCgkJCQkJCQkJCQkgCgkKCWRsa0N0 bFNldENvbmRGaWx0ZXJUYWJsZSwJIAoJCQkJCQkJCQkJIAoJCglkbGtDdGxHZXRMQU5TeW5jLAkJ CQkgCgkJCQkJCQkJCQkgCgkKCWRsa0N0bFNldExBTlN5bmMsCQkJCSAKCQkJCQkJCQkJCSAKCQoJ ZGxrQ3RsR2V0SFNUQ1BQb3J0LAkJCSAKCQkJCQkJCQkJCSAKCQoJZGxrQ3RsU2V0SFNUQ1BQb3J0 LAkJCSAKCQkJCQkJCQkJCSAKCQoJZGxrQ3RsU2VuZENhbGxBcHBSZXBseSwJCSAKCQkJCQkJCQkJ CSAKCQkJCQkJCQkJCSAKCQkJCQkJCQkJCSAKCQkJCQkJCQkJCSAKCgoJZGxrQ3RsR2V0UENIb3N0 QWRkciwJCQkgCgkJCQkJCQkJCQkgCgkJCQkJCQkJCQkgCgkJCQkJCQkJCQoJZGxrQ3RsU2V0UENI b3N0QWRkciwJCQkgCgkJCQkJCQkJCQkgCgoKCWRsa0N0bEdldFBDSG9zdE1hc2ssCQkJIAoJCQkJ CQkJCQkJIAoJCQkJCQkJCQkJIAoJCQkJCQkJCQkKCWRsa0N0bFNldFBDSG9zdE1hc2ssCQkJIAoJ CQkJCQkJCQkJIAoJCgkKCWRsa0N0bExBU1QJCQkJCQkgCgkKfSBEbGtDdGxFbnVtOwoKCiAKIAog CnR5cGVkZWYgc3RydWN0IERsa1NlcnZlclBhcmFtVHlwZSB7CiAJVUludDE2CQkJCWh0YWxMaWJS ZWZOdW07CSAKIAlEbGtFdmVudFByb2NQdHIJZXZlbnRQcm9jUDsJCSAKIAlVSW50MzIJCQkJZXZl bnRSZWY7CQkgCglVSW50MzIJCQkJcmVzZXJ2ZWQxOwkJIAoJVUludDMyCQkJCXJlc2VydmVkMjsJ CSAKCU1lbUhhbmRsZQkJCQljb25kRmlsdGVySDsJIAogCX0gRGxrU2VydmVyUGFyYW1UeXBlOwog CnR5cGVkZWYgRGxrU2VydmVyUGFyYW1UeXBlKgkJRGxrU2VydmVyUGFyYW1QdHI7CgoKCiAKIAog CnR5cGVkZWYgc3RydWN0IERsa0NhbGxBcHBSZXBseVBhcmFtVHlwZSB7CglVSW50MTYJCQkJcGJT aXplOwkJCSAKCVVJbnQzMgkJCQlkd1Jlc3VsdENvZGU7CSAKCXZvaWQgKgkJCQlyZXN1bHRQOwkJ CSAKCVVJbnQzMgkJCQlkd1Jlc3VsdFNpemU7CSAKCXZvaWQgKgkJCQlkbFJlZlA7CQkJIAoJCQkJ CQkJCQkJCQkgCglVSW50MzIJCQkJZHdSZXNlcnZlZDE7CSAKCX0gRGxrQ2FsbEFwcFJlcGx5UGFy YW1UeXBlOwoKCiAKCgojcHJhZ21hIG1hcmsgKkZ1bmN0aW9uIFByb3RvdHlwZXMqCgojIDQwOSAi Li4vU3JjU2hhcmVkL1BhbG0vUGxhdGZvcm0vSW5jcy9Db3JlL1N5c3RlbS9ETFNlcnZlci5oIgoK CgogCgoKCgoKCiMgMTcxICIuLi9TcmNTaGFyZWQvUGFsbS5oIiAyCgoKCQojIDEgIi4uL1NyY1No YXJlZC9QYWxtL0RldmljZS9FWkF1c3Rpbi9JbmNzUHJ2L1NFRDEzNzVId3IuaCIgMQogCgoKCgoK CgoKCgoKCgoKIAogCiAKCnR5cGVkZWYgc3RydWN0IFNFRDEzNzVSZWdzVHlwZSB7CglVSW50OCBw cm9kdWN0UmV2aXNpb25Db2RlOwkJCQkgCglVSW50OCBtb2RlMDsJCQkJCQkJCSAKCQoJVUludDgg bW9kZTE7CQkJCQkJCQkgCglVSW50OCBtb2RlMjsJCQkJCQkJCSAKCQoJVUludDggaG9yaXpvbnRh bFBhbmVsU2l6ZTsJCQkJIAoJVUludDggdmVydGljYWxQYW5lbFNpemVMU0I7CQkJIAoJCglVSW50 OCB2ZXJ0aWNhbFBhbmVsU2l6ZU1TQjsJCQkgCglVSW50OCBGUExpbmVTdGFydFBvc2l0aW9uOwkJ CQkgCgkKCVVJbnQ4IGhvcml6b250YWxOb25EaXNwbGF5UGVyaW9kOwkgCglVSW50OCBGUEZSQU1F U3RhcnRQb3NpdGlvbjsJCQkgCgkJCglVSW50OCB2ZXJ0aWNhbE5vbkRpc3BsYXlQZXJpb2Q7CQkg CglVSW50OCBNT0RSYXRlOwkJCQkJCQkJIAoJCglVSW50OCBzY3JlZW4xU3RhcnRBZGRyZXNzTFNC OwkJCSAKCVVJbnQ4IHNjcmVlbjFTdGFydEFkZHJlc3NNU0I7CQkJIAoJCglVSW50OCBzY3JlZW4y U3RhcnRBZGRyZXNzTFNCOwkJCSAKCVVJbnQ4IHNjcmVlbjJTdGFydEFkZHJlc3NNU0I7CQkJIAoK CVVJbnQ4IHNjcmVlbjFTdGFydEFkZHJlc3NNU0JpdDsJCSAKCVVJbnQ4IG1lbW9yeUFkZHJlc3NP ZmZzZXQ7CQkJCSAKCQoJVUludDggc2NyZWVuMVZlcnRpY2FsU2l6ZUxTQjsJCQkgCglVSW50OCBz Y3JlZW4xVmVydGljYWxTaXplTVNCOwkJCSAKCQoJVUludDggdW51c2VkMTsJCQkJCQkJCSAKCVVJ bnQ4IGxvb2tVcFRhYmxlQWRkcmVzczsJCQkJIAoJCQoJVUludDggdW51c2VkMjsJCQkJCQkJCSAK CVVJbnQ4IGxvb2tVcFRhYmxlRGF0YTsJCQkJCSAKCQoJVUludDggR1BJT0NvbmZpZ3VyYXRpb25D b250cm9sOwkJIAoJVUludDggR1BJT1N0YXR1c0NvbnRyb2w7CQkJCSAKCQoJVUludDggc2NyYXRj aFBhZDsJCQkJCQkJIAoJVUludDggcG9ydHJhaXRNb2RlOwkJCQkJCSAKCQoJVUludDggbGluZUJ5 dGVDb3VudFJlZ2lzdGVyOwkJCSAKCVVJbnQ4IHVudXNlZDM7CQkJCQkJCQkgCgoJVUludDggdW51 c2VkNDsJCQkJCQkJCSAKCVVJbnQ4IHVudXNlZDU7CQkJCQkJCQkgCn0gU0VEMTM3NVJlZ3NUeXBl OwoKdHlwZWRlZiB2b2xhdGlsZSBTRUQxMzc1UmVnc1R5cGUgKlNFRDEzNzVSZWdzUHRyOwoKCiAK IAogCgoKCgoKCgoKIAogCgoKCgoKCgogCiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgogCgoK CgoKCiAKIAoKCgogCiAKIAoKCgoKIAoKCgogCgoKCgogCgoKCiAKCgoKCgogCgoKCiAKIAoKCgog CiAKCgoKIAoKCiAKIAoKCgogCgoKCgoKCgogCgoKCgoKCiAKCgoKIAoKCgogCgoKCgogCgoKIAoK CgoKCgoKCiAKCgogCgoKCgoKCgoKCgogCgoKCgoKCiMgMTczICIuLi9TcmNTaGFyZWQvUGFsbS5o IiAyCgoKCQojIDEgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0NvcmUvSGFyZHdhcmUvSW5j c1Bydi9NNjgzMjhId3IuaCIgMQogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgog CgoKc3RydWN0IEh3ck02ODMyOFR5cGUgewoKCVVJbnQ4CQlzY3I7CQkJCQkJCQkgCglVSW50OAkJ CQkJCQkJCQkJX19fZmlsbGVyMFsweDAwNC0weDAwMV07CgoJIAoJVUludDgJCQljaGlwSUQ7CQkJ CQkJCSAKCVVJbnQ4CQkJbWFza0lEOwkJCQkJCQkgCglVSW50MTYJCXN3SUQ7CQkJCQkJCQkgCglV SW50OAkJCQkJCQkJCQkJX19fZmlsbGVyMVsweDEwMC0weDAwOF07CQkJCSAKCQoJVUludDE2CQlj c0FHcm91cEJhc2U7CQkJCQkgCglVSW50MTYJCWNzQkdyb3VwQmFzZTsJCQkJCSAKCVVJbnQxNgkJ Y3NDR3JvdXBCYXNlOwkJCQkJIAoJVUludDE2CQljc0RHcm91cEJhc2U7CQkJCQkgCgkKCVVJbnQx NgkJY3NBR3JvdXBNYXNrOwkJCQkJIAoJVUludDE2CQljc0JHcm91cE1hc2s7CQkJCQkgCglVSW50 MTYJCWNzQ0dyb3VwTWFzazsJCQkJCSAKCVVJbnQxNgkJY3NER3JvdXBNYXNrOwkJCQkJIAoJCglV SW50MzIJCWNzQVNlbGVjdDA7CQkJCQkJIAoJVUludDMyCQljc0FTZWxlY3QxOwkJCQkJCSAKCVVJ bnQzMgkJY3NBU2VsZWN0MjsJCQkJCQkgCglVSW50MzIJCWNzQVNlbGVjdDM7CQkJCQkJIAoJCglV SW50MzIJCWNzQlNlbGVjdDA7CQkJCQkJIAoJVUludDMyCQljc0JTZWxlY3QxOwkJCQkJCSAKCVVJ bnQzMgkJY3NCU2VsZWN0MjsJCQkJCQkgCglVSW50MzIJCWNzQlNlbGVjdDM7CQkJCQkJIAoJCglV SW50MzIJCWNzQ1NlbGVjdDA7CQkJCQkJIAoJVUludDMyCQljc0NTZWxlY3QxOwkJCQkJCSAKCVVJ bnQzMgkJY3NDU2VsZWN0MjsJCQkJCQkgCglVSW50MzIJCWNzQ1NlbGVjdDM7CQkJCQkJIAoJCglV SW50MzIJCWNzRFNlbGVjdDA7CQkJCQkJIAoJVUludDMyCQljc0RTZWxlY3QxOwkJCQkJCSAKCVVJ bnQzMgkJY3NEU2VsZWN0MjsJCQkJCQkgCglVSW50MzIJCWNzRFNlbGVjdDM7CQkJCQkJIAoJCglV SW50MTYJCWNzRGVidWc7CQkJCQkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIyWzB4MjAw LTB4MTUyXTsJCQoJCglVSW50MTYJCXBsbENvbnRyb2w7CQkJCQkJIAoJVUludDE2CQlwbGxGcmVx U2VsOwkJCQkJCSAKCVVJbnQxNgkJcGxsVGVzdDsJCQkJCQkJIAoJVUludDgJCQkJCQkJCQkJCV9f ZmlsbGVyNDQ7CglVSW50OAkJCXB3ckNvbnRyb2w7CQkJCQkJIAoJCglVSW50OAkJCQkJCQkJCQkJ X19fZmlsbGVyM1sweDMwMC0weDIwOF07CgkKCVVJbnQ4CQkJaW50VmVjdG9yOwkJCQkJCSAKCVVJ bnQ4CQkJCQkJCQkJCQlfX19maWxsZXI0OwoJVUludDE2CQlpbnRDb250cm9sOwkJCQkJCSAKCVVJ bnQxNgkJaW50TWFza0hpOwkJCQkJCSAKCVVJbnQxNgkJaW50TWFza0xvOwkJCQkJCSAKCVVJbnQx NgkJaW50V2FrZXVwRW5IaTsJCQkJCSAKCVVJbnQxNgkJaW50V2FrZXVwRW5MbzsJCQkJCSAKCVVJ bnQxNgkJaW50U3RhdHVzSGk7CQkJCQkgCglVSW50MTYJCWludFN0YXR1c0xvOwkJCQkJIAoJVUlu dDE2CQlpbnRQZW5kaW5nSGk7CQkJCQkgCglVSW50MTYJCWludFBlbmRpbmdMbzsJCQkJCSAKCQoJ VUludDggCQkJCQkJCQkJCQlfX19maWxsZXI0YVsweDQwMC0weDMxNF07CgkKCVVJbnQ4CQlwb3J0 QURpcjsJCQkJCQkgCglVSW50OAkJcG9ydEFEYXRhOwkJCQkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlf X19maWxsZXI1OwoJVUludDgJCXBvcnRBU2VsZWN0OwkJCQkJIAoJCglVSW50OAkJCQkJCQkJCQkJ X19fZmlsbGVyNls0XTsKCQoJVUludDgJCXBvcnRCRGlyOwkJCQkJCSAKCVVJbnQ4CQlwb3J0QkRh dGE7CQkJCQkJIAoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjc7CglVSW50OAkJcG9ydEJTZWxl Y3Q7CQkJCQkgCgkKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXI4WzRdOwoJCglVSW50OAkJcG9y dENEaXI7CQkJCQkJIAoJVUludDgJCXBvcnRDRGF0YTsJCQkJCQkgCglVSW50OAkJCQkJCQkJCQkJ X19fZmlsbGVyOTsKCVVJbnQ4CQlwb3J0Q1NlbGVjdDsJCQkJCSAKCQoJVUludDgJCQkJCQkJCQkJ CV9fX2ZpbGxlcjEwWzRdOwoJCglVSW50OAkJcG9ydEREaXI7CQkJCQkJIAoJVUludDgJCXBvcnRE RGF0YTsJCQkJCQkgCglVSW50OAkJcG9ydERQdWxsdXBFbjsJCQkJCSAKCVVJbnQ4CQkJCQkJCQkJ CQlfX19maWxsZXIxMTsKCVVJbnQ4CQlwb3J0RFBvbGFyaXR5OwkJCQkJIAoJVUludDgJCXBvcnRE SW50UmVxRW47CQkJCQkgCglVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVyMTI7CglVSW50OAkJcG9y dERJbnRFZGdlOwkJCQkJIAoJCglVSW50OAkJcG9ydEVEaXI7CQkJCQkJIAoJVUludDgJCXBvcnRF RGF0YTsJCQkJCQkgCglVSW50OAkJcG9ydEVQdWxsdXBFbjsJCQkJCSAKCVVJbnQ4CQlwb3J0RVNl bGVjdDsJCQkJCSAKCQoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjE0WzRdOwoJCglVSW50OAkJ cG9ydEZEaXI7CQkJCQkJIAoJVUludDgJCXBvcnRGRGF0YTsJCQkJCQkgCglVSW50OAkJcG9ydEZQ dWxsdXBFbjsJCQkJCSAKCVVJbnQ4CQlwb3J0RlNlbGVjdDsJCQkJCSAKCQoJVUludDgJCQkJCQkJ CQkJCV9fX2ZpbGxlcjE2WzRdOwoJCglVSW50OAkJcG9ydEdEaXI7CQkJCQkJIAoJVUludDgJCXBv cnRHRGF0YTsJCQkJCQkgCglVSW50OAkJcG9ydEdQdWxsdXBFbjsJCQkJCSAKCVVJbnQ4CQlwb3J0 R1NlbGVjdDsJCQkJCSAKCQoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjE4WzRdOwoJCglVSW50 OAkJcG9ydEpEaXI7CQkJCQkJIAoJVUludDgJCXBvcnRKRGF0YTsJCQkJCQkgCglVSW50OAkJCQkJ CQkJCQkJX19fZmlsbGVyMTk7CglVSW50OAkJcG9ydEpTZWxlY3Q7CQkJCQkgCgkKCVVJbnQ4CQkJ CQkJCQkJCQlfX19maWxsZXIxOWFbNF07CgkKCVVJbnQ4CQlwb3J0S0RpcjsJCQkJCQkgCglVSW50 OAkJcG9ydEtEYXRhOwkJCQkJCSAKCVVJbnQ4CQlwb3J0S1B1bGx1cEVuOwkJCQkJIAoJVUludDgJ CXBvcnRLU2VsZWN0OwkJCQkJIAoJCglVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVyMjFbNF07CgkK CVVJbnQ4CQlwb3J0TURpcjsJCQkJCQkgCglVSW50OAkJcG9ydE1EYXRhOwkJCQkJCSAKCVVJbnQ4 CQlwb3J0TVB1bGx1cEVuOwkJCQkJIAoJVUludDgJCXBvcnRNU2VsZWN0OwkJCQkJIAoJCglVSW50 OAkJCQkJCQkJCQkJX19fZmlsbGVyMjJbNF07CgkKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIy M1sweDUwMC0weDQ1MF07CgkKCVVJbnQxNgkJcHdtQ29udHJvbDsJCQkJCQkgCglVSW50MTYJCXB3 bVBlcmlvZDsJCQkJCQkgCglVSW50MTYJCXB3bVdpZHRoOwkJCQkJCSAKCVVJbnQxNgkJcHdtQ291 bnRlcjsJCQkJCQkgCgkKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIyNFsweDYwMC0weDUwOF07 CgkKCVVJbnQxNgkJdG1yMUNvbnRyb2w7CQkJCQkgCglVSW50MTYJCXRtcjFQcmVzY2FsZXI7CQkJ CQkgCglVSW50MTYJCXRtcjFDb21wYXJlOwkJCQkJIAoJVUludDE2CQl0bXIxQ2FwdHVyZTsJCQkJ CSAKCVVJbnQxNgkJdG1yMUNvdW50ZXI7CQkJCQkgCglVSW50MTYJCXRtcjFTdGF0dXM7CQkJCQkJ IAoJCglVSW50MTYJCXRtcjJDb250cm9sOwkJCQkJIAoJVUludDE2CQl0bXIyUHJlc2NhbGVyOwkJ CQkJIAoJVUludDE2CQl0bXIyQ29tcGFyZTsJCQkJCSAKCVVJbnQxNgkJdG1yMkNhcHR1cmU7CQkJ CQkgCglVSW50MTYJCXRtcjJDb3VudGVyOwkJCQkJIAoJVUludDE2CQl0bXIyU3RhdHVzOwkJCQkJ CSAKCQoJVUludDE2CQl3ZENvbnRyb2w7CQkJCQkJIAoJVUludDE2CQl3ZFJlZmVyZW5jZTsJCQkJ CSAKCVVJbnQxNgkJd2RDb3VudGVyOwkJCQkJCSAKCQoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxl cjI1WzB4NzAwLTB4NjFFXTsKCQoJVUludDE2CQlzcGlTbGF2ZTsJCQkJCQkgCgkKCVVJbnQ4CQkJ CQkJCQkJCQlfX19maWxsZXIyNlsweDgwMC0weDcwMl07CgkKCVVJbnQxNgkJc3BpTWFzdGVyRGF0 YTsJCQkJCSAKCVVJbnQxNgkJc3BpTWFzdGVyQ29udHJvbDsJCQkJIAoJCglVSW50OAkJCQkJCQkJ CQkJX19fZmlsbGVyMjdbMHg5MDAtMHg4MDRdOwoJCglVSW50MTYJCXVDb250cm9sOwkJCQkJCSAK CVVJbnQxNgkJdUJhdWQ7CQkJCQkJCSAKCVVJbnQxNgkJdVJlY2VpdmU7CQkJCQkJIAoJVUludDE2 CQl1VHJhbnNtaXQ7CQkJCQkJIAoJVUludDE2CQl1TWlzYzsJCQkJCQkJIAoJCglVSW50OAkJCQkJ CQkJCQkJX19fZmlsbGVyMjhbMHhBMDAtMHg5MEFdOwoJCglVSW50MzIJCWxjZFN0YXJ0QWRkcjsJ CQkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIyOTsKCVVJbnQ4CQkJbGNkUGFnZVdpZHRo OwkJCQkJIAoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjMwWzJdOwoJVUludDE2CQlsY2RTY3Jl ZW5XaWR0aDsJCQkJIAoJVUludDE2CQlsY2RTY3JlZW5IZWlnaHQ7CQkJCSAKCVVJbnQ4CQkJCQkJ CQkJCQlfX19maWxsZXIzMVsweEExOC0weEEwQ107CglVSW50MTYJCWxjZEN1cnNvclhQb3M7CQkJ CQkgCglVSW50MTYJCWxjZEN1cnNvcllQb3M7CQkJCQkgCglVSW50MTYJCWxjZEN1cnNvcldpZHRo SGVpZ2h0OwkJIAoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjMyOwoJVUludDgJCWxjZEJsaW5r Q29udHJvbDsJCQkJIAoJVUludDgJCWxjZFBhbmVsQ29udHJvbDsJCQkJIAoJVUludDgJCWxjZFBv bGFyaXR5OwkJCQkJIAoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjMzOwkJCQkJCQoJVUludDgJ CWxjZEFDRFJhdGU7CQkJCQkJIAoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjM0OwoJVUludDgJ CWxjZFBpeGVsQ2xvY2s7CQkJCQkgCglVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVyMzU7CglVSW50 OAkJbGNkQ2xvY2tDb250cm9sOwkJCQkgCglVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVyMzY7CglV SW50OAkJbGNkTGFzdEJ1ZmZlckFkZHI7CQkJIAoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjM3 OwoJVUludDgJCWxjZE9jdGV0VGVybUNvdW50OwkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxs ZXIzODsKCVVJbnQ4CQlsY2RQYW5uaW5nT2Zmc2V0OwkJCQkgCglVSW50OAkJCQkJCQkJCQkJX19f ZmlsbGVyMzlbM107CglVSW50OAkJbGNkRnJhbWVSYXRlOwkJCQkJIAoJVUludDE2CWxjZEdyYXlQ YWxldHRlOwkJCQkgCglVSW50OAkJbGNkUmVzZXJ2ZWQ7CQkJCQkgCgkKCVVJbnQ4CQkJCQkJCQkJ CQlfX19maWxsZXI0MFsweEIwMC0weEEzNV07CgkKCVVJbnQzMgkJcnRjSG91ck1pblNlYzsJCQkJ CSAKCVVJbnQzMgkJcnRjQWxhcm07CQkJCQkJIAoJVUludDMyCQlydGNSZXNlcnZlZDsJCQkJCSAK CVVJbnQxNgkJcnRjQ29udHJvbDsJCQkJCQkgCglVSW50MTYJCXJ0Y0ludFN0YXR1czsJCQkJCSAK CVVJbnQxNgkJcnRjSW50RW5hYmxlOwkJCQkJIAoJVUludDE2CQlzdG9wV2F0Y2g7CQkJCQkJIAp9 OwoKdHlwZWRlZiB2b2xhdGlsZSBzdHJ1Y3QgSHdyTTY4MzI4VHlwZSoJSHdyTTY4MzI4UHRyOwoK CgoKIAoKCgoKIAoKCgoJCgkKCQoJCgoKCgkKCQoJCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgogCgoKIAogCiAKIAogCgoKCgoKCgoKCiAKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgogCiAKIAoKCgoKCgoKCgoKIAoKCgoKCgkKCQoJCgkKCgoKCQoJCgkKCQoJCgoKCgoK CgoKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoK CgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgogCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgog CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgogCgoKCgoKIAoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCiAK CgoKCgoKCgogCgoKCgkKCQoJCgkKCQoJCgkKCQoKCgoKCgoKCgogCgoKCgoKCgoKCgogCgoKCgoK CgoKCgoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgogCgoKCgoKIyAxNzUgIi4uL1NyY1No YXJlZC9QYWxtLmgiIDIKCgkKCQoKCQojIDEgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0Nv cmUvSGFyZHdhcmUvSW5jc1Bydi9NNjhFWjMyOEh3ci5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKIAoKCgogCgoKc3RydWN0IEh3ck02OEVaMzI4VHlwZSB7CgoJVUludDgJCXNjcjsJ CQkJCQkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIwWzB4MDA0LTB4MDAxXTsKCVVJbnQ4 CQljaGlwSUQ7CQkJCQkJCSAKCVVJbnQ4CQltYXNrSUQ7CQkJCQkJCSAKCVVJbnQxNglzd0lEOwkJ CQkJCQkJIAoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjFbMHgxMDAtMHgwMDhdOwkJCQkgCgkK CVVJbnQxNgljc0FHcm91cEJhc2U7CQkJCQkgCglVSW50MTYJY3NCR3JvdXBCYXNlOwkJCQkJIAoJ VUludDE2CWNzQ0dyb3VwQmFzZTsJCQkJCSAKCVVJbnQxNgljc0RHcm91cEJhc2U7CQkJCQkgCgoJ VUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjZbMHgxMTAtMHgxMDhdOwoKCVVJbnQxNgljc0FTZWxl Y3Q7CQkJCQkJIAoJVUludDE2CWNzQlNlbGVjdDsJCQkJCQkgCglVSW50MTYJY3NDU2VsZWN0OwkJ CQkJCSAKCVVJbnQxNgljc0RTZWxlY3Q7CQkJCQkJIAoJCglVSW50MTYJZW11Q1M7CQkJCQkJICAg IAoJCglVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVyMlsweDIwMC0weDExQV07CQkKCQoJVUludDE2 CXBsbENvbnRyb2w7CQkJCQkJIAoJVUludDE2CXBsbEZyZXFTZWw7CQkJCQkJIAoJVUludDE2CXBs bFRlc3Q7CQkJCQkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXI0NDsKCVVJbnQ4CQlwd3JD b250cm9sOwkJCQkJCSAKCQoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjNbMHgzMDAtMHgyMDhd OwoJCglVSW50OAkJaW50VmVjdG9yOwkJCQkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXI0 OwoJVUludDE2CWludENvbnRyb2w7CQkJCQkJIAoJVUludDE2CWludE1hc2tIaTsJCQkJCQkgCglV SW50MTYJaW50TWFza0xvOwkJCQkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXI3WzB4MzBj LTB4MzA4XTsKCVVJbnQxNglpbnRTdGF0dXNIaTsJCQkJCSAKCVVJbnQxNglpbnRTdGF0dXNMbzsJ CQkJCSAKCVVJbnQxNglpbnRQZW5kaW5nSGk7CQkJCQkgCglVSW50MTYJaW50UGVuZGluZ0xvOwkJ CQkJIAoJCglVSW50OCAJCQkJCQkJCQkJCV9fX2ZpbGxlcjRhWzB4NDAwLTB4MzE0XTsKCQoJVUlu dDgJCXBvcnRBRGlyOwkJCQkJCSAKCVVJbnQ4CQlwb3J0QURhdGE7CQkJCQkJIAoJVUludDgJCXBv cnRBUHVsbHVwRW47CQkJCQkgCglVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVyOFs1XTsJCgkKCVVJ bnQ4CQlwb3J0QkRpcjsJCQkJCQkgCglVSW50OAkJcG9ydEJEYXRhOwkJCQkJCSAKCVVJbnQ4CQlw b3J0QlB1bGx1cEVuOwkJCQkJIAoJVUludDgJCXBvcnRCU2VsZWN0OwkJCQkJIAoJCglVSW50OAkJ CQkJCQkJCQkJX19fZmlsbGVyOVs0XTsKCQoJVUludDgJCXBvcnRDRGlyOwkJCQkJCSAKCVVJbnQ4 CQlwb3J0Q0RhdGE7CQkJCQkJIAoJVUludDgJCXBvcnRDUHVsbGRuRW47CQkJCQkgCglVSW50OAkJ cG9ydENTZWxlY3Q7CQkJCQkgCgkKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIxMFs0XTsKCQoJ VUludDgJCXBvcnRERGlyOwkJCQkJCSAKCVVJbnQ4CQlwb3J0RERhdGE7CQkJCQkJIAoJVUludDgJ CXBvcnREUHVsbHVwRW47CQkJCQkgCglVSW50OAkJcG9ydERTZWxlY3Q7CQkJCQkgCglVSW50OAkJ cG9ydERQb2xhcml0eTsJCQkJCSAKCVVJbnQ4CQlwb3J0REludFJlcUVuOwkJCQkJIAoJVUludDgJ CXBvcnRES2JkSW50RW47CQkJCQkgCglVSW50OAkJcG9ydERJbnRFZGdlOwkJCQkJIAoJCglVSW50 OAkJcG9ydEVEaXI7CQkJCQkJIAoJVUludDgJCXBvcnRFRGF0YTsJCQkJCQkgCglVSW50OAkJcG9y dEVQdWxsdXBFbjsJCQkJCSAKCVVJbnQ4CQlwb3J0RVNlbGVjdDsJCQkJCSAKCQoJVUludDgJCQkJ CQkJCQkJCV9fX2ZpbGxlcjE0WzRdOwoJCglVSW50OAkJcG9ydEZEaXI7CQkJCQkJIAoJVUludDgJ CXBvcnRGRGF0YTsJCQkJCQkgCglVSW50OAkJcG9ydEZQdWxsdXBkbkVuOwkJCQkgCglVSW50OAkJ cG9ydEZTZWxlY3Q7CQkJCQkgCgkKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIxNls0XTsKCQkK CVVJbnQ4CQlwb3J0R0RpcjsJCQkJCQkgCglVSW50OAkJcG9ydEdEYXRhOwkJCQkJCSAKCVVJbnQ4 CQlwb3J0R1B1bGx1cEVuOwkJCQkJIAoJVUludDgJCXBvcnRHU2VsZWN0OwkJCQkJIAoJCglVSW50 OAkJCQkJCQkJCQkJX19fZmlsbGVyMjAwMFsweDUwMC0weDQzNF07CgoJVUludDE2CXB3bUNvbnRy b2w7CQkJCQkJIAoJVUludDgJCXB3bVNhbXBsZUhpOyAgICAJCQkJIAoJVUludDgJCXB3bVNhbXBs ZUxvOwkJCQkJIAoJVUludDgJCXB3bVBlcmlvZDsJCQkJCQkgCglVSW50OAkJcHdtQ291bnRlcjsJ CQkJCQkgCgkKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIyNFsweDYwMC0weDUwNl07CgkKCVVJ bnQxNgl0bXIxQ29udHJvbDsJCQkJCSAKCVVJbnQxNgl0bXIxUHJlc2NhbGVyOwkJCQkJIAoJVUlu dDE2CXRtcjFDb21wYXJlOwkJCQkJIAoJVUludDE2CXRtcjFDYXB0dXJlOwkJCQkJIAoJVUludDE2 CXRtcjFDb3VudGVyOwkJCQkJIAoJVUludDE2CXRtcjFTdGF0dXM7CQkJCQkJIAoJCglVSW50OAkJ CQkJCQkJCQkJX19fZmlsbGVyMjVbMHg4MDAtMHg2MENdOwoJCQoJVUludDE2CXNwaU1hc3RlckRh dGE7CQkJCQkgCglVSW50MTYJc3BpTWFzdGVyQ29udHJvbDsJCQkJIAoJCglVSW50OAkJCQkJCQkJ CQkJX19fZmlsbGVyMjdbMHg5MDAtMHg4MDRdOwoJCglVSW50MTYJdUNvbnRyb2w7CQkJCQkJIAoJ VUludDE2CXVCYXVkOwkJCQkJCQkgCglVSW50MTYJdVJlY2VpdmU7CQkJCQkJIAoJVUludDE2CXVU cmFuc21pdDsJCQkJCQkgCglVSW50MTYJdU1pc2M7CQkJCQkJCSAKCVVJbnQxNgl1Tm9uSW50UHJl c2M7CQkJCQkgCgkKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIyOFsweEEwMC0weDkwQ107CgkK CVVJbnQzMglsY2RTdGFydEFkZHI7CQkJCQkgCglVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVyMjk7 CglVSW50OAkJbGNkUGFnZVdpZHRoOwkJCQkJIAoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjMw WzJdOwoJVUludDE2CWxjZFNjcmVlbldpZHRoOwkJCQkgCglVSW50MTYJbGNkU2NyZWVuSGVpZ2h0 OwkJCQkgCglVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVyMzFbMHhBMTgtMHhBMENdOwoJVUludDE2 CWxjZEN1cnNvclhQb3M7CQkJCQkgCglVSW50MTYJbGNkQ3Vyc29yWVBvczsJCQkJCSAKCVVJbnQx NglsY2RDdXJzb3JXaWR0aEhlaWdodDsJCSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIzMjsK CVVJbnQ4CQlsY2RCbGlua0NvbnRyb2w7CQkJCSAKCVVJbnQ4CQlsY2RQYW5lbENvbnRyb2w7CQkJ CSAKCVVJbnQ4CQlsY2RQb2xhcml0eTsJCQkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIz MzsJCQkJCQkKCVVJbnQ4CQlsY2RBQ0RSYXRlOwkJCQkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19m aWxsZXIzNDsKCVVJbnQ4CQlsY2RQaXhlbENsb2NrOwkJCQkJIAoJVUludDgJCQkJCQkJCQkJCV9f X2ZpbGxlcjM1OwoJVUludDgJCWxjZENsb2NrQ29udHJvbDsJCQkJIAoJVUludDgJCQkJCQkJCQkJ CV9fX2ZpbGxlcjM2OwoJVUludDgJCWxjZFJlZnJlc2hSYXRlQWRqOwkJCSAKCVVJbnQ4CQkJCQkJ CQkJCQlfX19maWxsZXIyMDAzWzB4QTJELTB4QTJBXTsKCVVJbnQ4ICAgIGxjZFBhbm5pbmdPZmZz ZXQ7CQkJCSAKCQoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjM3WzB4QTMxLTB4QTJFXTsKCQoJ VUludDgJCWxjZEZyYW1lUmF0ZTsJCQkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIyMDA0 OwoJVUludDgJCWxjZEdyYXlQYWxldHRlOwkJCQkgCglVSW50OAkJbGNkUmVzZXJ2ZWQ7CQkJCQkg CglVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVyMjAwNTsKCVVJbnQxNglsY2RDb250cmFzdENvbnRy b2xQV007CQkgCgkKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXI0MFsweEIwMC0weEEzOF07CgkK CVVJbnQzMglydGNIb3VyTWluU2VjOwkJCQkJIAoJVUludDMyCXJ0Y0FsYXJtOwkJCQkJCSAKCVVJ bnQ4CQkJCQkJCQkJCQlfX19maWxsZXIyMDAxWzB4QjBBLTB4QjA4XTsKCVVJbnQxNiAgIHJ0Y1dh dGNoRG9nOyAgICAgICAgICAgICAgICAKCVVJbnQxNglydGNDb250cm9sOwkJCQkJCSAKCVVJbnQx NglydGNJbnRTdGF0dXM7CQkJCQkgCglVSW50MTYJcnRjSW50RW5hYmxlOwkJCQkJIAoJVUludDE2 CXN0b3BXYXRjaDsJCQkJCQkgCglVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVyMjAwMlsweEIxQS0w eEIxNF07CglVSW50MTYJcnRjRGF5OwkJCQkJCQkgCglVSW50MTYgICBydGNEYXlBbGFybTsJCQkJ CSAKCQogICBVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVyNDFbMHhDMDAtMHhCMUVdOwoKICAgVUlu dDE2CWRyYW1Db25maWc7ICAgICAgICAgICAgICAgICAKICAgVUludDE2ICAgZHJhbUNvbnRyb2w7 ICAgICAgICAgICAgICAgIAoKICAgVUludDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fX2ZpbGxlcjQyWzB4RDAwLTB4QzA0XTsKCQoJVUludDMyCWVtdUFkZHJDb21wYXJlOwkJCQkg CglVSW50MzIJZW11QWRkck1hc2s7CQkJCQkgCglVSW50MTYJZW11Q29udHJvbENvbXBhcmU7CQkJ IAoJVUludDE2CWVtdUNvbnRyb2xNYXNrOwkJCQkgCglVSW50MTYJZW11Q29udHJvbDsJCQkJCQkg CglVSW50MTYJZW11U3RhdHVzOwkJCQkJCSAKfTsKCnR5cGVkZWYgdm9sYXRpbGUgc3RydWN0IEh3 ck02OEVaMzI4VHlwZSoJSHdyTTY4RVozMjhQdHI7CgoKCgoKIAoKCnR5cGVkZWYgc3RydWN0IEh3 ckplcnJ5UExEVHlwZSB7CgoJVUludDggZHNwT247CQkJIAoJVUludDggdW51c2VkMTsKCVVJbnQ4 CWNoYXJnZU9uOwkJIAoJVUludDgJdW51c2VkMjsKCVVJbnQ4IHJlZk9uOwkJCSAKCVVJbnQ4CXVu dXNlZDM7CglVSW50OAlwaXBhQmlhc0VuYWJsZTsJIAoJVUludDgJdW51c2VkNDsKCVVJbnQ4CWRz cFJlc2V0OwkJIAoJVUludDgJdW51c2VkNTsKCVVJbnQ4CWV6VG9Ec2w7CQkJIAoJVUludDggdW51 c2VkNjsKCVVJbnQ4CXJzMjMyU2hkbjsJCSAKCVVJbnQ4CXVudXNlZDc7CglVSW50OAlzcGFyZU91 dDsJCSAKCVVJbnQ4CXVudXNlZDg7CglVSW50MTYJZFRvM1NsbjsJCQkgCglVSW50MTYJaVh0cm5s MjsJCQkgCn0JSHdySmVycnlQTERUeXBlOwoKdHlwZWRlZgl2b2xhdGlsZSBId3JKZXJyeVBMRFR5 cGUqCUh3ckplcnJ5UGxkUHRyOwoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgog CgogCgoKCgoKCiAKIAoKCiAKCgkKCQoJCgkKCgoJCgogICAKCgogCgoKCiAKCgkKCQoJCgoKCiAK CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCiAKIAogCiAKIAoKCgoKCgoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgogCgoKCgoKCgkK CQoJCgkKCgoKCQoJCgkKCQoJCgoKCgoKCgoKIAoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAog CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoK CgoKIAoKCgoKCgoKCgoKCgoKCgogCiAKIAoKIAogCiAKIAogCgoKCgoKCgogCgoKIAoKCgoKIAoK CgoKCiAKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKIAoKCgoK CiAKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCgogCgoK CiAKCgoKCgoKIAoKCgoJCgkKCQoJCgkKCQoJCgkKCgoKCgoKCgoKCgoKIyAxNzkgIi4uL1NyY1No YXJlZC9QYWxtLmgiIDIKCgkKCQoKCQojIDEgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3JtL0Nv cmUvSGFyZHdhcmUvSW5jc1Bydi9NNjhWWjMyOEh3ci5oIiAxCiAKCgoKCgoKCgoKCgoKCgoKCiAg CgoKCgoKCgoKCgoKIAoKCgogCgoKc3RydWN0IEh3ck02OFZaMzI4VHlwZSB7CgoJVUludDgJCXNj cjsJCQkJCQkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIwWzB4MDAzLTB4MDAxXTsKCVVJ bnQ4CQlwY3I7CQkJCQkJCQkgCglVSW50OAkJY2hpcElEOwkJCQkJCQkgCglVSW50OAkJbWFza0lE OwkJCQkJCQkgCglVSW50MTYJc3dJRDsJCQkJCQkJCSAKCVVJbnQxNglpb0RyaXZlQ29udHJvbDsJ CQkJIAoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjFbMHgxMDAtMHgwMEFdOwkJCQkgCgkKCVVJ bnQxNgljc0FHcm91cEJhc2U7CQkJCQkgCglVSW50MTYJY3NCR3JvdXBCYXNlOwkJCQkJIAoJVUlu dDE2CWNzQ0dyb3VwQmFzZTsJCQkJCSAKCVVJbnQxNgljc0RHcm91cEJhc2U7CQkJCQkgCgkKCVVJ bnQxNgljc1VHcm91cEJhc2U7CQkJCQkgCgkKCVVJbnQxNgljc0NvbnRyb2wxOwkJCQkJCSAKCVVJ bnQxNgljc0NvbnRyb2wyOwkJCQkJCSAKCQoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjJbMHgx MTAtMHgxMEVdOwoKCVVJbnQxNgljc0FTZWxlY3Q7CQkJCQkJIAoJVUludDE2CWNzQlNlbGVjdDsJ CQkJCQkgCglVSW50MTYJY3NDU2VsZWN0OwkJCQkJCSAKCVVJbnQxNgljc0RTZWxlY3Q7CQkJCQkJ IAoJCglVSW50MTYJZW11Q1M7CQkJCQkJICAgIAoJCglVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVy M1sweDE1MC0weDExQV07CQkKCQoJVUludDE2CWNzQ29udHJvbDM7CQkJCQkJIAoKCVVJbnQ4CQkJ CQkJCQkJCQlfX19maWxsZXIzYVsweDIwMC0weDE1Ml07CQkKCQoJVUludDE2CXBsbENvbnRyb2w7 CQkJCQkJIAoJVUludDE2CXBsbEZyZXFTZWw7CQkJCQkJIAoJCglVSW50OAkJCQkJCQkJCQkJX19f ZmlsbGVyNFsweDIwNy0weDIwNF07CgkKCVVJbnQ4CQlwd3JDb250cm9sOwkJCQkJCSAKCQoJVUlu dDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjVbMHgzMDAtMHgyMDhdOwoJCglVSW50OAkJaW50VmVjdG9y OwkJCQkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXI2OwoJVUludDE2CWludENvbnRyb2w7 CQkJCQkJIAoJVUludDE2CWludE1hc2tIaTsJCQkJCQkgCglVSW50MTYJaW50TWFza0xvOwkJCQkJ CSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXI3WzB4MzBjLTB4MzA4XTsKCVVJbnQxNglpbnRT dGF0dXNIaTsJCQkJCSAKCVVJbnQxNglpbnRTdGF0dXNMbzsJCQkJCSAKCVVJbnQxNglpbnRQZW5k aW5nSGk7CQkJCQkgCglVSW50MTYJaW50UGVuZGluZ0xvOwkJCQkJIAoJVUludDE2CWludExldmVs Q29udHJvbDsJCQkJIAoJCglVSW50OCAJCQkJCQkJCQkJX19fZmlsbGVyNGFbMHg0MDAtMHgzMTZd OwoJCglVSW50OAkJcG9ydEFEaXI7CQkJCQkJIAoJVUludDgJCXBvcnRBRGF0YTsJCQkJCQkgCglV SW50OAkJcG9ydEFQdWxsdXBFbjsJCQkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXI4WzVd OwkKCQoJVUludDgJCXBvcnRCRGlyOwkJCQkJCSAKCVVJbnQ4CQlwb3J0QkRhdGE7CQkJCQkJIAoJ VUludDgJCXBvcnRCUHVsbHVwRW47CQkJCQkgCglVSW50OAkJcG9ydEJTZWxlY3Q7CQkJCQkgCgkK CVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXI5WzRdOwoJCglVSW50OAkJcG9ydENEaXI7CQkJCQkJ IAoJVUludDgJCXBvcnRDRGF0YTsJCQkJCQkgCglVSW50OAkJcG9ydENQdWxsZG5FbjsJCQkJCSAK CVVJbnQ4CQlwb3J0Q1NlbGVjdDsJCQkJCSAKCQoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjEw WzRdOwoJCglVSW50OAkJcG9ydEREaXI7CQkJCQkJIAoJVUludDgJCXBvcnRERGF0YTsJCQkJCQkg CglVSW50OAkJcG9ydERQdWxsdXBFbjsJCQkJCSAKCVVJbnQ4CQlwb3J0RFNlbGVjdDsJCQkJCSAK CVVJbnQ4CQlwb3J0RFBvbGFyaXR5OwkJCQkJIAoJVUludDgJCXBvcnRESW50UmVxRW47CQkJCQkg CglVSW50OAkJcG9ydERLYmRJbnRFbjsJCQkJCSAKCVVJbnQ4CQlwb3J0REludEVkZ2U7CQkJCQkg CgkKCVVJbnQ4CQlwb3J0RURpcjsJCQkJCQkgCglVSW50OAkJcG9ydEVEYXRhOwkJCQkJCSAKCVVJ bnQ4CQlwb3J0RVB1bGx1cEVuOwkJCQkJIAoJVUludDgJCXBvcnRFU2VsZWN0OwkJCQkJIAoJCglV SW50OAkJCQkJCQkJCQkJX19fZmlsbGVyMTRbNF07CgkKCVVJbnQ4CQlwb3J0RkRpcjsJCQkJCQkg CglVSW50OAkJcG9ydEZEYXRhOwkJCQkJCSAKCVVJbnQ4CQlwb3J0RlB1bGx1cGRuRW47CQkJCSAK CVVJbnQ4CQlwb3J0RlNlbGVjdDsJCQkJCSAKCQoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjE2 WzRdOwoJCQoJVUludDgJCXBvcnRHRGlyOwkJCQkJCSAKCVVJbnQ4CQlwb3J0R0RhdGE7CQkJCQkJ IAoJVUludDgJCXBvcnRHUHVsbHVwRW47CQkJCQkgCglVSW50OAkJcG9ydEdTZWxlY3Q7CQkJCQkg CgkKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIxN1sweDQzOC0weDQzNF07CgkJCglVSW50OAkJ cG9ydEpEaXI7CQkJCQkJIAoJVUludDgJCXBvcnRKRGF0YTsJCQkJCQkgCglVSW50OAkJcG9ydEpQ dWxsdXBFbjsJCQkJCSAKCVVJbnQ4CQlwb3J0SlNlbGVjdDsJCQkJCSAKCQoJVUludDgJCQkJCQkJ CQkJCV9fX2ZpbGxlcjE4WzB4NDQwLTB4NDNDXTsKCQkKCVVJbnQ4CQlwb3J0S0RpcjsJCQkJCQkg CglVSW50OAkJcG9ydEtEYXRhOwkJCQkJCSAKCVVJbnQ4CQlwb3J0S1B1bGx1cGRuRW47CQkJCSAK CVVJbnQ4CQlwb3J0S1NlbGVjdDsJCQkJCSAKCQoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjE5 WzB4NDQ4LTB4NDQ0XTsKCQkKCVVJbnQ4CQlwb3J0TURpcjsJCQkJCQkgCglVSW50OAkJcG9ydE1E YXRhOwkJCQkJCSAKCVVJbnQ4CQlwb3J0TVB1bGx1cGRuRW47CQkJCSAKCVVJbnQ4CQlwb3J0TVNl bGVjdDsJCQkJCSAKCQoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjIwWzB4NTAwLTB4NDRDXTsK CglVSW50MTYJcHdtQ29udHJvbDsJCQkJCQkgCglVSW50OAkJcHdtU2FtcGxlSGk7ICAgIAkJCQkg CglVSW50OAkJcHdtU2FtcGxlTG87CQkJCQkgCglVSW50OAkJcHdtUGVyaW9kOwkJCQkJCSAKCVVJ bnQ4CQlwd21Db3VudGVyOwkJCQkJCSAKCQoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjIyWzB4 NTEwLTB4NTA2XTsKCglVSW50MTYJcHdtMkNvbnRyb2w7CQkJCQkgCglVSW50MTYJcHdtMlBlcmlv ZDsJCQkJCQkgCglVSW50MTYJcHdtMldpZHRoOwkJCQkJCSAKCVVJbnQxNglwd20yQ291bnRlcjsJ CQkJCSAKCglVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVyMjNbMHg2MDAtMHg1MThdOwoJCglVSW50 MTYJdG1yMUNvbnRyb2w7CQkJCQkgCglVSW50MTYJdG1yMVByZXNjYWxlcjsJCQkJCSAKCVVJbnQx Ngl0bXIxQ29tcGFyZTsJCQkJCSAKCVVJbnQxNgl0bXIxQ2FwdHVyZTsJCQkJCSAKCVVJbnQxNgl0 bXIxQ291bnRlcjsJCQkJCSAKCVVJbnQxNgl0bXIxU3RhdHVzOwkJCQkJCSAKCQoJVUludDgJCQkJ CQkJCQkJCV9fX2ZpbGxlcjI0WzB4NjEwLTB4NjBDXTsKCQkKCVVJbnQxNgl0bXIyQ29udHJvbDsJ CQkJCSAKCVVJbnQxNgl0bXIyUHJlc2NhbGVyOwkJCQkJIAoJVUludDE2CXRtcjJDb21wYXJlOwkJ CQkJIAoJVUludDE2CXRtcjJDYXB0dXJlOwkJCQkJIAoJVUludDE2CXRtcjJDb3VudGVyOwkJCQkJ IAoJVUludDE2CXRtcjJTdGF0dXM7CQkJCQkJIAoJCglVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVy MjVbMHg3MDAtMHg2MUNdOwoJCglVSW50MTYJc3BpUnhEOwkJCQkJCSAKCVVJbnQxNglzcGlUeEQ7 CQkJCQkJIAoJVUludDE2CXNwaUNvbnQxOwkJCQkJIAoJVUludDE2CXNwaUludENTOwkJCQkJIAoJ VUludDE2CXNwaVRlc3Q7CQkJCQkgCglVSW50MTYJc3BpU3BjOwkJCQkJCSAKCQkKCVVJbnQ4CQkJ CQkJCQkJCQlfX19maWxsZXIyNlsweDgwMC0weDcwQ107CgkKCVVJbnQxNglzcGlNYXN0ZXJEYXRh OwkJCQkJIAoJVUludDE2CXNwaU1hc3RlckNvbnRyb2w7CQkJCSAKCQoJVUludDgJCQkJCQkJCQkJ CV9fX2ZpbGxlcjI3WzB4OTAwLTB4ODA0XTsKCQoJVUludDE2CXVDb250cm9sOwkJCQkJCSAKCVVJ bnQxNgl1QmF1ZDsJCQkJCQkJIAoJVUludDE2CXVSZWNlaXZlOwkJCQkJCSAKCVVJbnQxNgl1VHJh bnNtaXQ7CQkJCQkJIAoJVUludDE2CXVNaXNjOwkJCQkJCQkgCglVSW50MTYJdU5vbkludFByZXNj OwkJCQkJIAoJCglVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVyMjhbMHg5MTAtMHg5MENdOwoJCglV SW50MTYJdTJDb250cm9sOwkJCQkJCSAKCVVJbnQxNgl1MkJhdWQ7CQkJCQkJCSAKCVVJbnQxNgl1 MlJlY2VpdmU7CQkJCQkJIAoJVUludDE2CXUyVHJhbnNtaXQ7CQkJCQkJIAoJVUludDE2CXUyTWlz YzsJCQkJCQkJIAoJVUludDE2CXUyTm9uSW50UHJlc2M7CQkJCQkgCglVSW50MTYJdTJGSUZPSE1h cms7CQkJCQkgCgkKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIyOGFbMHhBMDAtMHg5MUVdOwoJ CglVSW50MzIJbGNkU3RhcnRBZGRyOwkJCQkJIAoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjI5 OwoJVUludDgJCWxjZFBhZ2VXaWR0aDsJCQkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIz MFsyXTsKCVVJbnQxNglsY2RTY3JlZW5XaWR0aDsJCQkJIAoJVUludDE2CWxjZFNjcmVlbkhlaWdo dDsJCQkJIAoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjMxWzB4QTE4LTB4QTBDXTsKCVVJbnQx NglsY2RDdXJzb3JYUG9zOwkJCQkJIAoJVUludDE2CWxjZEN1cnNvcllQb3M7CQkJCQkgCglVSW50 MTYJbGNkQ3Vyc29yV2lkdGhIZWlnaHQ7CQkgCglVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVyMzI7 CglVSW50OAkJbGNkQmxpbmtDb250cm9sOwkJCQkgCglVSW50OAkJbGNkUGFuZWxDb250cm9sOwkJ CQkgCglVSW50OAkJbGNkUG9sYXJpdHk7CQkJCQkgCglVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVy MzM7CQkJCQkJCglVSW50OAkJbGNkQUNEUmF0ZTsJCQkJCQkgCglVSW50OAkJCQkJCQkJCQkJX19f ZmlsbGVyMzQ7CglVSW50OAkJbGNkUGl4ZWxDbG9jazsJCQkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlf X19maWxsZXIzNTsKCVVJbnQ4CQlsY2RDbG9ja0NvbnRyb2w7CQkJCSAKIAoJVUludDE2CWxjZFJl ZnJlc2hSYXRlQWRqOwkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIzNzsKCVVJbnQ4CQls Y2RSZXNlcnZlZDE7CQkJCQkgCglVSW50OAkJCQkJCQkJCQkJX19fZmlsbGVyMzg7CglVSW50OCAg ICBsY2RQYW5uaW5nT2Zmc2V0OwkJCQkgCgkKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIzOVsw eEEzMS0weEEyRV07CgkKCVVJbnQ4CQlsY2RGcmFtZVJhdGU7CQkJCQkgCglVSW50OAkJCQkJCQkJ CQkJX19fZmlsbGVyMjAwNDsKCVVJbnQ4CQlsY2RHcmF5UGFsZXR0ZTsJCQkJIAoJVUludDgJCWxj ZFJlc2VydmVkMjsJCQkJCSAKCVVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXIyMDA1OwoJVUludDE2 CWxjZENvbnRyYXN0Q29udHJvbFBXTTsJCSAKCVVJbnQ4CQlsY2RSZWZyZXNoTW9kZUNvbnRyb2w7 CQkgCglVSW50OAkJbGNkRE1BQ29udHJvbDsJCQkJCSAKCQoJVUludDgJCQkJCQkJCQkJCV9fX2Zp bGxlcjQwWzB4QjAwLTB4QTNhXTsKCQoJVUludDMyCXJ0Y0hvdXJNaW5TZWM7CQkJCQkgCglVSW50 MzIJcnRjQWxhcm07CQkJCQkJIAoJVUludDgJCQkJCQkJCQkJCV9fX2ZpbGxlcjIwMDFbMHhCMEEt MHhCMDhdOwoJVUludDE2ICAgcnRjV2F0Y2hEb2c7ICAgICAgICAgICAgICAgIAoJVUludDE2CXJ0 Y0NvbnRyb2w7CQkJCQkJIAoJVUludDE2CXJ0Y0ludFN0YXR1czsJCQkJCSAKCVVJbnQxNglydGNJ bnRFbmFibGU7CQkJCQkgCglVSW50MTYJc3RvcFdhdGNoOwkJCQkJCSAKCVVJbnQ4CQkJCQkJCQkJ CQlfX19maWxsZXIyMDAyWzB4QjFBLTB4QjE0XTsKCVVJbnQxNglydGNEYXk7CQkJCQkJCSAKCVVJ bnQxNiAgIHJ0Y0RheUFsYXJtOwkJCQkJIAoJCiAgIFVJbnQ4CQkJCQkJCQkJCQlfX19maWxsZXI0 MVsweEMwMC0weEIxRV07CgogICBVSW50MTYJZHJhbUNvbmZpZzsgICAgICAgICAgICAgICAgIAog ICBVSW50MTYgICBkcmFtQ29udHJvbDsgICAgICAgICAgICAgICAgCiAgIFVJbnQxNiAgIHNkcmFt Q29udHJvbDsgICAgICAgICAgICAgICAKICAgVUludDE2ICAgc2RyYW1Qd0RuOyAgICAgICAgICAg ICAgCSAKCiAgIFVJbnQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19maWxsZXI0 MlsweEQwMC0weEMwOF07CgkKCVVJbnQzMgllbXVBZGRyQ29tcGFyZTsJCQkJIAoJVUludDMyCWVt dUFkZHJNYXNrOwkJCQkJIAoJVUludDE2CWVtdUNvbnRyb2xDb21wYXJlOwkJCSAKCVVJbnQxNgll bXVDb250cm9sTWFzazsJCQkJIAoJVUludDE2CWVtdUNvbnRyb2w7CQkJCQkJIAoJVUludDE2CWVt dVN0YXR1czsJCQkJCQkgCn07Cgp0eXBlZGVmIHZvbGF0aWxlIHN0cnVjdCBId3JNNjhWWjMyOFR5 cGUqCUh3ck02OFZaMzI4UHRyOwoKCgoKCiMgMzY0ICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9y bS9Db3JlL0hhcmR3YXJlL0luY3NQcnYvTTY4VlozMjhId3IuaCIKCgogCgoKIAoKIAoKCgoKCgog CiAKCgogCgoJCgkKCQoJCgoKCQoKICAgCgoKIAoKCgogCgoJCgkKCQoKCgogCgoKCgoKIAoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgogCiAKIAogCiAKCgoKCgoKCgogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgoJCQkg CgoKCgkJCSAKCQkJIAoJCQkgCgoJCQkgCgkJCSAKCgoKIAoKCgkJCSAKCQkJIAoJCQkgCgkJCSAK CQkJIAoJCQkgCgkJCSAKCQkJIAoJCQkgCgkJCSAKCQkJIAoKCiAKCgoKCgoKCQoJCgkKCQoKCgoJ CgkKCQoJCgkKCgoKCgoKCgogCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKCgoKCgoKCgog CgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoK CgoKCgoKCgoKCiAKIAogCgogCiAKIAogCiAKCgoKCgoKCiAKCgogCgoKCgogCgoKCgoKIAoKCgoK IAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKCgogCgoKCgoK CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKIAoKCgogCgoKCgoK CiAKCgoKCQoJCgkKCQoJCgkKCQoJCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxODMgIi4uL1Ny Y1NoYXJlZC9QYWxtLmgiIDIKCgkKCQoKCQojIDEgIi4uL1NyY1NoYXJlZC9QYWxtL1BsYXRmb3Jt L0NvcmUvSGFyZHdhcmUvSW5jc1Bydi9NNjhTWjMyOEh3ci5oIiAxCiAKCgoKCgoKCgoKCgoKCgog IAoKCgoKCgoKIyAxMDc0ICIuLi9TcmNTaGFyZWQvUGFsbS9QbGF0Zm9ybS9Db3JlL0hhcmR3YXJl L0luY3NQcnYvTTY4U1ozMjhId3IuaCIKCgoKCgojIDE4NyAiLi4vU3JjU2hhcmVkL1BhbG0uaCIg MgoKCQoJCgoKCnN0cnVjdCBId3JCYXRDbWRSZWFkVHlwZQkgCnsKCVVJbnQxNgltVm9sdHM7CSAK CVVJbnQxNglhYnM7CSAKfTsKCgojIDEgIi4uL1NyY1NoYXJlZC9QYWxtUGFja1BvcC5oIiAxCiAK IAoKCgoKCgoKCgoKCgojcHJhZ21hIHBhY2soKQoKCgoKCgoKCgojIDIwMCAiLi4vU3JjU2hhcmVk L1BhbG0uaCIgMgoKCgoKCgogCgoKCgoKCgoKCgoKIAoKCgoKIAogCgoKCiAKIAoKCgoKIyAzMSAi Li4vU3JjVW5peC9FbUNvbW1vblVuaXguaCIgMgoKCgogCgogCiAKIAogCgogCiAKIAogCiAKIAoK IAogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKCgoKCgogCiAKIAoKIyAxICIvdXNyL2xvY2FsL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL3N5cy90eXBlcy5o IiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpdHlwZXMuaAkx LjY3CTAxLzA3LzA3IFNNSSIKCgoKCiAKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvbWFjaHR5cGVz LmgiIDEgMyA0CiAKCgoKCiAKIAoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIyltYWNodHlw ZXMuaAkxLjEzCTk5LzA1LzA0IFNNSSIKCgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgp0eXBl ZGVmCXN0cnVjdAlfbGFiZWxfdCB7IGxvbmcgdmFsWzJdOyB9IGxhYmVsX3Q7CgoKCnR5cGVkZWYJ dW5zaWduZWQgY2hhcglsb2NrX3Q7CQkgCgoKfQoKCgojIDI0ICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMg NAoKCiAKCgoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2ludF90eXBlcy5oIiAxIDMgNAog CgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpaW50X3R5cGVzLmgJMS42CTk3LzA4LzIwIFNNSSIK CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoK CgoKCgoKCgoKdHlwZWRlZiBjaGFyCQkJaW50OF90OwoKCgoKCnR5cGVkZWYgc2hvcnQJCQlpbnQx Nl90Owp0eXBlZGVmIGludAkJCWludDMyX3Q7CgoKCgp0eXBlZGVmCWxvbmcgbG9uZwkJaW50NjRf dDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyCQl1aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNo b3J0CQl1aW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQJCXVpbnQzMl90OwoKCgoKdHlwZWRl ZiB1bnNpZ25lZCBsb25nIGxvbmcJdWludDY0X3Q7CgoKCiAKCgoKCnR5cGVkZWYgaW50NjRfdAkJ CWludG1heF90Owp0eXBlZGVmIHVpbnQ2NF90CQl1aW50bWF4X3Q7CgoKCgoKIAoKCgoKCgoKCnR5 cGVkZWYJaW50CQkJaW50cHRyX3Q7CnR5cGVkZWYJdW5zaWduZWQgaW50CQl1aW50cHRyX3Q7CgoK IAoKCgoKdHlwZWRlZiBjaGFyCQkJaW50X2xlYXN0OF90OwoKCgoKCnR5cGVkZWYgc2hvcnQJCQlp bnRfbGVhc3QxNl90Owp0eXBlZGVmIGludAkJCWludF9sZWFzdDMyX3Q7CgoKCgp0eXBlZGVmIGxv bmcgbG9uZwkJaW50X2xlYXN0NjRfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyCQl1aW50X2xl YXN0OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0CQl1aW50X2xlYXN0MTZfdDsKdHlwZWRlZiB1 bnNpZ25lZCBpbnQJCXVpbnRfbGVhc3QzMl90OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxv bmcJdWludF9sZWFzdDY0X3Q7CgoKCgp9CgoKCiMgMzYgIi91c3IvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoK CgoKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKCnR5cGVkZWYJbG9uZyBsb25nCQlsb25nbG9uZ190 Owp0eXBlZGVmCXVuc2lnbmVkIGxvbmcgbG9uZwl1X2xvbmdsb25nX3Q7CiMgNjUgIi91c3IvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDMgNAoKCiAKCgoKCgoKCgp0eXBlZGVmIGxvbmcJCXRfc2NhbGFyX3Q7CSAKdHlwZWRl ZiB1bnNpZ25lZCBsb25nCXRfdXNjYWxhcl90OwoKCiAKCgp0eXBlZGVmCXVuc2lnbmVkIGNoYXIJ dWNoYXJfdDsKdHlwZWRlZgl1bnNpZ25lZCBzaG9ydAl1c2hvcnRfdDsKdHlwZWRlZgl1bnNpZ25l ZCBpbnQJdWludF90Owp0eXBlZGVmCXVuc2lnbmVkIGxvbmcJdWxvbmdfdDsKCnR5cGVkZWYJY2hh cgkJKmNhZGRyX3Q7CSAKdHlwZWRlZglsb25nCQlkYWRkcl90OwkgCnR5cGVkZWYJc2hvcnQJCWNu dF90OwkJIAoKCnR5cGVkZWYJdWxvbmdfdAkJcGFkZHJfdDsJIAoKCgoKCgoKCgoKCgoKCgp0eXBl ZGVmIGludCBwdHJkaWZmX3Q7CQkgCgoKCiAKCgp0eXBlZGVmCXVsb25nX3QJCXBmbl90OwkJIAp0 eXBlZGVmCXVsb25nX3QJCXBnY250X3Q7CSAKdHlwZWRlZglsb25nCQlzcGdjbnRfdDsJIAoKdHlw ZWRlZgl1Y2hhcl90CQl1c2VfdDsJCSAKdHlwZWRlZglzaG9ydAkJc3lzaWRfdDsKdHlwZWRlZglz aG9ydAkJaW5kZXhfdDsKdHlwZWRlZiB2b2lkCQkqdGltZW91dF9pZF90OwkgCnR5cGVkZWYgdm9p ZAkJKmJ1ZmNhbGxfaWRfdDsJIAoKIAoKCgoKCgoKCgoKCnR5cGVkZWYgbG9uZwkJb2ZmX3Q7CQkg CgoKCgoKCgoKdHlwZWRlZiBsb25nbG9uZ190CW9mZjY0X3Q7CSAKCgoKCgoKdHlwZWRlZiB1bG9u Z190CQlpbm9fdDsJCSAKdHlwZWRlZiBsb25nCQlibGtjbnRfdDsJIAp0eXBlZGVmIHVsb25nX3QJ CWZzYmxrY250X3Q7CSAKdHlwZWRlZiB1bG9uZ190CQlmc2ZpbGNudF90OwkgCgoKCgoKCgoKCgoK CgoKdHlwZWRlZiB1X2xvbmdsb25nX3QJaW5vNjRfdDsJIAp0eXBlZGVmIGxvbmdsb25nX3QJYmxr Y250NjRfdDsJIAp0eXBlZGVmIHVfbG9uZ2xvbmdfdAlmc2Jsa2NudDY0X3Q7CSAKdHlwZWRlZiB1 X2xvbmdsb25nX3QJZnNmaWxjbnQ2NF90OwkgCgoKCgoKCnR5cGVkZWYJbG9uZwkJYmxrc2l6ZV90 OwkgCgoKCgoKdHlwZWRlZiBlbnVtIHsgQl9GQUxTRSwgQl9UUlVFIH0gYm9vbGVhbl90OwoKCiAK CgoKCgoKCnR5cGVkZWYgaW50NjRfdAkJcGFkNjRfdDsKdHlwZWRlZgl1aW50NjRfdAl1cGFkNjRf dDsKIyAyMTAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45 NS4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAoKCnR5cGVkZWYJbG9uZ2xvbmdfdAlvZmZzZXRf dDsKdHlwZWRlZgl1X2xvbmdsb25nX3QJdV9vZmZzZXRfdDsKdHlwZWRlZiB1X2xvbmdsb25nX3QJ bGVuX3Q7CnR5cGVkZWYJbG9uZ2xvbmdfdAlkaXNrYWRkcl90OwoKIAoKCgoKIyAyMzAgIi91c3Iv bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1ZGUvc3lz L3R5cGVzLmgiIDMgNAoKCgp0eXBlZGVmIHVuaW9uIHsKCW9mZnNldF90CV9mOwkgCglzdHJ1Y3Qg ewoJCWludDMyX3QJX3U7CSAKCQlpbnQzMl90CV9sOwkgCgl9IF9wOwp9IGxsb2ZmX3Q7CgoKIyAy NTAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAoKCgp0eXBlZGVmIHVuaW9uIHsKCWRpc2thZGRyX3QJX2Y7 CSAKCXN0cnVjdCB7CgkJaW50MzJfdAlfdTsJIAoJCWludDMyX3QJX2w7CSAKCX0gX3A7Cn0gbGxk YWRkcl90OwoKCnR5cGVkZWYgdWludF90IGtfZmx0c2V0X3Q7CSAKCiAKCgoKCgoKCgoKCgp0eXBl ZGVmCWxvbmcJCWlkX3Q7CQkgCgoKIAoKCgp0eXBlZGVmIHVpbnRfdAkJdXNlY29uZHNfdDsJIAoK Cgp0eXBlZGVmIGxvbmcJc3VzZWNvbmRzX3Q7CSAKCgogCgoKCgoKCnR5cGVkZWYgdWxvbmdfdAlt YWpvcl90OwkgCnR5cGVkZWYgdWxvbmdfdAltaW5vcl90OwkgCgoKIAoKCnR5cGVkZWYgc2hvcnQJ cHJpX3Q7CgogCgoKCgoKCgoKCgp0eXBlZGVmCXVzaG9ydF90IG9fbW9kZV90OwkJIAp0eXBlZGVm IHNob3J0CW9fZGV2X3Q7CQkgCnR5cGVkZWYJdXNob3J0X3Qgb191aWRfdDsJCSAKdHlwZWRlZglv X3VpZF90CW9fZ2lkX3Q7CQkgCnR5cGVkZWYJc2hvcnQJb19ubGlua190OwkJIAp0eXBlZGVmIHNo b3J0CW9fcGlkX3Q7CQkgCnR5cGVkZWYgdXNob3J0X3Qgb19pbm9fdDsJCSAKCgogCgoKdHlwZWRl ZglpbnQJa2V5X3Q7CQkJIAoKCgp0eXBlZGVmCXVsb25nX3QJbW9kZV90OwkJCSAKCgoKCgoKCnR5 cGVkZWYJbG9uZwl1aWRfdDsJCQkgCgoKCnR5cGVkZWYJdWlkX3QJZ2lkX3Q7CQkJIAoKdHlwZWRl ZiBpZF90ICAgIHRhc2tpZF90Owp0eXBlZGVmIGlkX3QgICAgcHJvamlkX3Q7CgogCgoKCgp0eXBl ZGVmCXVpbnRfdAlwdGhyZWFkX3Q7CSAKdHlwZWRlZgl1aW50X3QJcHRocmVhZF9rZXlfdDsJIAoK dHlwZWRlZglzdHJ1Y3QgX3B0aHJlYWRfbXV0ZXggewkJIAoJc3RydWN0IHsKCQl1aW50MTZfdAlf X3B0aHJlYWRfbXV0ZXhfZmxhZzE7CgkJdWludDhfdAkJX19wdGhyZWFkX211dGV4X2ZsYWcyOwoJ CXVpbnQ4X3QJCV9fcHRocmVhZF9tdXRleF9jZWlsaW5nOwoJCXVpbnQxNl90IAlfX3B0aHJlYWRf bXV0ZXhfdHlwZTsKCQl1aW50MTZfdCAJX19wdGhyZWFkX211dGV4X21hZ2ljOwoJfSBfX3B0aHJl YWRfbXV0ZXhfZmxhZ3M7Cgl1bmlvbiB7CgkJc3RydWN0IHsKCQkJdWludDhfdAlfX3B0aHJlYWRf bXV0ZXhfcGFkWzhdOwoJCX0gX19wdGhyZWFkX211dGV4X2xvY2s2NDsKCQlzdHJ1Y3QgewoJCQl1 aW50MzJfdCBfX3B0aHJlYWRfb3duZXJwaWQ7CgkJCXVpbnQzMl90IF9fcHRocmVhZF9sb2Nrd29y ZDsKCQl9IF9fcHRocmVhZF9tdXRleF9sb2NrMzI7CgkJdXBhZDY0X3QgX19wdGhyZWFkX211dGV4 X293bmVyNjQ7Cgl9IF9fcHRocmVhZF9tdXRleF9sb2NrOwoJdXBhZDY0X3QgX19wdGhyZWFkX211 dGV4X2RhdGE7Cn0gcHRocmVhZF9tdXRleF90OwoKdHlwZWRlZglzdHJ1Y3QgX3B0aHJlYWRfY29u ZCB7CQkgCglzdHJ1Y3QgewoJCXVpbnQ4X3QJCV9fcHRocmVhZF9jb25kX2ZsYWdbNF07CgkJdWlu dDE2X3QgCV9fcHRocmVhZF9jb25kX3R5cGU7CgkJdWludDE2X3QgCV9fcHRocmVhZF9jb25kX21h Z2ljOwoJfSBfX3B0aHJlYWRfY29uZF9mbGFnczsKCXVwYWQ2NF90IF9fcHRocmVhZF9jb25kX2Rh dGE7Cn0gcHRocmVhZF9jb25kX3Q7CgogCgoKdHlwZWRlZglzdHJ1Y3QgX3B0aHJlYWRfcndsb2Nr IHsJIAoJaW50MzJfdAkJX19wdGhyZWFkX3J3bG9ja19yZWFkZXJzOwoJdWludDE2X3QJX19wdGhy ZWFkX3J3bG9ja190eXBlOwoJdWludDE2X3QJX19wdGhyZWFkX3J3bG9ja19tYWdpYzsKCXVwYWQ2 NF90CV9fcHRocmVhZF9yd2xvY2tfcGFkMVszXTsKCXVwYWQ2NF90CV9fcHRocmVhZF9yd2xvY2tf cGFkMlsyXTsKCXVwYWQ2NF90CV9fcHRocmVhZF9yd2xvY2tfcGFkM1syXTsKfSBwdGhyZWFkX3J3 bG9ja190OwoKIAoKCnR5cGVkZWYgc3RydWN0IHsKCXZvaWQJKl9fcHRocmVhZF9hdHRycDsKfSBw dGhyZWFkX2F0dHJfdDsKCiAKCgp0eXBlZGVmIHN0cnVjdCB7Cgl2b2lkCSpfX3B0aHJlYWRfbXV0 ZXhhdHRycDsKfSBwdGhyZWFkX211dGV4YXR0cl90OwoKIAoKCnR5cGVkZWYgc3RydWN0IHsKCXZv aWQJKl9fcHRocmVhZF9jb25kYXR0cnA7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKIAoKCnR5cGVk ZWYJc3RydWN0IHsKCXVwYWQ2NF90CV9fcHRocmVhZF9vbmNlX3BhZFs0XTsKfSBwdGhyZWFkX29u Y2VfdDsKCiAKCgoKdHlwZWRlZiBzdHJ1Y3QgewoJdm9pZAkqX19wdGhyZWFkX3J3bG9ja2F0dHJw Owp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKdHlwZWRlZiB1bG9uZ190CWRldl90OwkJCSAKCgoK Cgp0eXBlZGVmCXVsb25nX3QJbmxpbmtfdDsJCSAKdHlwZWRlZglsb25nCXBpZF90OwkJCSAKCgoK CiMgNDU2ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUu My9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKCgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6 ZV90OwkJIAoKCgoKCgoKCgp0eXBlZGVmIGludAlzc2l6ZV90OwkgCgoKCgoKdHlwZWRlZglsb25n CQl0aW1lX3Q7CSAKCgoKCnR5cGVkZWYJbG9uZwkJY2xvY2tfdDsgIAoKCgoKdHlwZWRlZglpbnQJ Y2xvY2tpZF90OwkgCgoKCgp0eXBlZGVmCWludAl0aW1lcl90OwkgCgoKCgoKIAp0eXBlZGVmCXVu c2lnbmVkIGNoYXIJdW5jaGFyOwp0eXBlZGVmCXVuc2lnbmVkIHNob3J0CXVzaG9ydDsKdHlwZWRl Zgl1bnNpZ25lZCBpbnQJdWludDsKdHlwZWRlZgl1bnNpZ25lZCBsb25nCXVsb25nOwogCgojIDUy OCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMyA0CgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKdHlwZWRl ZiB1bnNpZ25lZCBjaGFyCXVfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydAl1X3Nob3J0Owp0 eXBlZGVmIHVuc2lnbmVkIGludAl1X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nCXVfbG9uZzsK dHlwZWRlZiBzdHJ1Y3QgX3F1YWQgeyBpbnQgdmFsWzJdOyB9IHF1YWRfdDsJIAp0eXBlZGVmIHF1 YWRfdAkJcXVhZDsJCQkgCiAKCiAKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAx IDMgNAogCiAKIAoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzZWxlY3QuaAkxLjE2CTk4 LzA0LzI3IFNNSSIJCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAxIDMgNAogCiAK CiAKIAogCgogCgoKCgoKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXRpbWUuaAkyLjY2CTAx LzAxLzE3IFNNSSIJCgoKCiAKCgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgoKCgoKCgoKCnN0cnVj dCB0aW1ldmFsIHsKCXRpbWVfdAkJdHZfc2VjOwkJIAoJc3VzZWNvbmRzX3QJdHZfdXNlYzsJIAp9 OwoKIyA3NCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDMgNAoKCgoKCgoKCnN0cnVjdCB0aW1l em9uZSB7CglpbnQJdHpfbWludXRlc3dlc3Q7CSAKCWludAl0el9kc3R0aW1lOwkgCn07CgoKCgoK fQoKCiAKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMi45NS4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCiMg NTg2ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9p bmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKCiMgMTAwICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIg MiAzIDQKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKIAoKCgoKCgoJCQkJIAoJCQkJIAoKCQkJCSAKCQkJCSAKCgpzdHJ1Y3QJaXRpbWVydmFsIHsK CXN0cnVjdAl0aW1ldmFsIGl0X2ludGVydmFsOwkgCglzdHJ1Y3QJdGltZXZhbCBpdF92YWx1ZTsJ IAp9OwoKIyAxODEgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5oIiAzIDQKCgoKCgoKCiAKCgoKCgoK CgoKCgogCgoKdHlwZWRlZglsb25nbG9uZ190CWhydGltZV90OwoKIyAzMTUgIi91c3IvaW5jbHVk ZS9zeXMvdGltZS5oIiAzIDQKCgoKCgppbnQgYWRqdGltZShzdHJ1Y3QgdGltZXZhbCAqLCBzdHJ1 Y3QgdGltZXZhbCAqKTsKCgoKCgoKCgoKCmludCBnZXRpdGltZXIoaW50LCBzdHJ1Y3QgaXRpbWVy dmFsICopOwppbnQgdXRpbWVzKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKik7 CgoKCmludCBzZXRpdGltZXIoaW50LCBzdHJ1Y3QgaXRpbWVydmFsICosIHN0cnVjdCBpdGltZXJ2 YWwgKik7CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCmludCBzZXR0aW1lb2ZkYXko c3RydWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsKCmhydGltZV90CWdldGhydGltZSh2b2lkKTsKaHJ0 aW1lX3QJZ2V0aHJ2dGltZSh2b2lkKTsKCgoKCgoKCgoKCgoKCgoKCmludCBnZXR0aW1lb2ZkYXko c3RydWN0IHRpbWV2YWwgKiwgdm9pZCAqKTsKCgoKCgoKCiAKCgoKCgoKCgoKCgoKIyAxICIvdXNy L2luY2x1ZGUvdGltZS5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgojcHJhZ21hIGlkZW50 CSJAKCMpdGltZS5oCTEuMzkJOTkvMDgvMTAgU01JIgkKCgojIDEgIi91c3IvbG9jYWwvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEg MyA0CiAKIAoKIAogCiAKCiAKCgoKCiMgNTg2ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKCiMgMTkgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9pc28vdGltZV9pc28u aCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaWRlbnQJ IkAoIyl0aW1lX2lzby5oCTEuMQk5OS8wOC8wOSBTTUkiIAoKCgoKZXh0ZXJuICJDIiB7CgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0CXRtIHsJIAoJaW50CXRtX3NlYzsK CWludAl0bV9taW47CglpbnQJdG1faG91cjsKCWludAl0bV9tZGF5OwoJaW50CXRtX21vbjsKCWlu dAl0bV95ZWFyOwoJaW50CXRtX3dkYXk7CglpbnQJdG1feWRheTsKCWludAl0bV9pc2RzdDsKfTsK CgoKCmV4dGVybiBjaGFyICphc2N0aW1lKGNvbnN0IHN0cnVjdCB0bSAqKTsKZXh0ZXJuIGNsb2Nr X3QgY2xvY2sodm9pZCk7CmV4dGVybiBjaGFyICpjdGltZShjb25zdCB0aW1lX3QgKik7CmV4dGVy biBkb3VibGUgZGlmZnRpbWUodGltZV90LCB0aW1lX3QpOwpleHRlcm4gc3RydWN0IHRtICpnbXRp bWUoY29uc3QgdGltZV90ICopOwpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUoY29uc3QgdGlt ZV90ICopOwpleHRlcm4gdGltZV90IG1rdGltZShzdHJ1Y3QgdG0gKik7CmV4dGVybiB0aW1lX3Qg dGltZSh0aW1lX3QgKik7CmV4dGVybiBzaXplX3Qgc3RyZnRpbWUoY2hhciAqLCBzaXplX3QsIGNv bnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRtICopOwoKIyAxMDYgIi91c3IvaW5jbHVkZS9pc28v dGltZV9pc28uaCIgMyA0CgoKCgoKCgp9CgoKCiMgMjAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIg MyA0CgoKIAoKCgojIDQwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKCgoKZXh0ZXJuICJDIiB7 CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfcihjb25zdCB0aW1lX3Qg Kiwgc3RydWN0IHRtICopOwpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWVfcihjb25zdCB0aW1l X3QgKiwgc3RydWN0IHRtICopOwoKCgoKCmV4dGVybiBjaGFyICpzdHJwdGltZShjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKiwgc3RydWN0IHRtICopOwoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3Iv aW5jbHVkZS9zeXMvdGltZV9pbXBsLmgiIDEgMyA0CiAKCgoKCiAKCgoKCgoKCgojcHJhZ21hIGlk ZW50CSJAKCMpdGltZV9pbXBsLmgJMS41CTk5LzEwLzA1IFNNSSIKCgoKCmV4dGVybiAiQyIgewoK CgoKCgoKCgogCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgIHRpbWVzcGVjIHsJCSAKCXRpbWVfdAkJdHZf c2VjOwkJIAoJbG9uZwkJdHZfbnNlYzsJIAp9IHRpbWVzcGVjX3Q7CgojIDU4ICIvdXNyL2luY2x1 ZGUvc3lzL3RpbWVfaW1wbC5oIiAzIDQKCgp0eXBlZGVmIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3Ry dWNfdDsJIAoKCgogCgoKCgoKCgoKCiAKCgoKCnR5cGVkZWYgc3RydWN0IGl0aW1lcnNwZWMgewkJ IAoJc3RydWN0IHRpbWVzcGVjCWl0X2ludGVydmFsOwkgCglzdHJ1Y3QgdGltZXNwZWMJaXRfdmFs dWU7CSAKfSBpdGltZXJzcGVjX3Q7CgojIDEwMCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lX2ltcGwu aCIgMyA0CgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgp9CgoKCiMgODMgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDIgMyA0CgoKIAoKCgoKCgoKCgoKCgp1bmlvbiBzaWd2YWwgewoJ aW50CXNpdmFsX2ludDsJIAoJdm9pZAkqc2l2YWxfcHRyOwkgCn07CgoKCgpzdHJ1Y3Qgc2lnZXZl bnQgewoJaW50CQlzaWdldl9ub3RpZnk7CSAKCWludAkJc2lnZXZfc2lnbm87CSAKCXVuaW9uIHNp Z3ZhbAlzaWdldl92YWx1ZTsJIAoJdm9pZAkJKCpzaWdldl9ub3RpZnlfZnVuY3Rpb24pKHVuaW9u IHNpZ3ZhbCk7CglwdGhyZWFkX2F0dHJfdAkqc2lnZXZfbm90aWZ5X2F0dHJpYnV0ZXM7CglpbnQJ CV9fc2lnZXZfcGFkMjsKfTsKCgpleHRlcm4gaW50IGNsb2NrX2dldHJlcyhjbG9ja2lkX3QsIHN0 cnVjdCB0aW1lc3BlYyAqKTsKZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lKGNsb2NraWRfdCwgc3Ry dWN0IHRpbWVzcGVjICopOwpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUoY2xvY2tpZF90LCBjb25z dCBzdHJ1Y3QgdGltZXNwZWMgKik7CmV4dGVybiBpbnQgdGltZXJfY3JlYXRlKGNsb2NraWRfdCwg c3RydWN0IHNpZ2V2ZW50ICosIHRpbWVyX3QgKik7CmV4dGVybiBpbnQgdGltZXJfZGVsZXRlKHRp bWVyX3QpOwpleHRlcm4gaW50IHRpbWVyX2dldG92ZXJydW4odGltZXJfdCk7CmV4dGVybiBpbnQg dGltZXJfZ2V0dGltZSh0aW1lcl90LCBzdHJ1Y3QgaXRpbWVyc3BlYyAqKTsKZXh0ZXJuIGludCB0 aW1lcl9zZXR0aW1lKHRpbWVyX3QsIGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKiwKCQlz dHJ1Y3QgaXRpbWVyc3BlYyAqKTsKZXh0ZXJuIGludCBuYW5vc2xlZXAoY29uc3Qgc3RydWN0IHRp bWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAqKTsKCgoKCmV4dGVybiB2b2lkIHR6c2V0KHZvaWQp OwoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgpleHRlcm4gbG9uZyBfc3lzY29uZihpbnQpOwkg CgoJCQkJIAoKCgoKZXh0ZXJuIGxvbmcgdGltZXpvbmU7CmV4dGVybiBpbnQgZGF5bGlnaHQ7CgoK CgoKZXh0ZXJuIGludCBjZnRpbWUoY2hhciAqLCBjaGFyICosIGNvbnN0IHRpbWVfdCAqKTsKZXh0 ZXJuIGludCBhc2NmdGltZShjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRtICop OwpleHRlcm4gbG9uZyBhbHR6b25lOwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ2V0ZGF0ZShjb25z dCBjaGFyICopOwoKCgoKZXh0ZXJuIGludCAqX2dldGRhdGVfZXJyX2FkZHIodm9pZCk7CgoKCgoK IyAyMDYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIyAyNzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAoKCmV4dGVy biBjaGFyICphc2N0aW1lX3IoY29uc3Qgc3RydWN0IHRtICosIGNoYXIgKiwgaW50KTsKZXh0ZXJu IGNoYXIgKmN0aW1lX3IoY29uc3QgdGltZV90ICosIGNoYXIgKiwgaW50KTsKCgoKIyAzMTMgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDMgNAoKCgoKCn0KCgoKIyA0MTAgIi91c3IvaW5jbHVkZS9zeXMv dGltZS5oIiAyIDMgNAoKCgogCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu aCIgMSAzIDQKIAogCiAKCiAKIAogCgojIDEwNyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIg MyA0CgojIDQyMyAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgiIDIgMyA0CgoKCgoKCn0KCgoKIyAx NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzIDQKCgoKCmV4dGVybiAiQyIgewoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmCWxvbmcJZmRfbWFzazsKCnR5cGVkZWYJbG9uZwlm ZHNfbWFzazsKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmCXN0cnVjdCBmZF9zZXQg ewoKCgoJbG9uZwlmZHNfYml0c1soKCggMTAyNCAgKSsoKCAgKHNpemVvZiAoZmRzX21hc2spICog OCApICApLTEpKS8oICAoc2l6ZW9mIChmZHNfbWFzaykgKiA4ICkgICkpIF07Cn0gZmRfc2V0OwoK CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IHNlbGVjdChpbnQsIGZkX3NldCAqLCBmZF9zZXQg KiwgZmRfc2V0ICosIHN0cnVjdCB0aW1ldmFsICopOwoKCgoKCgp9CgoKCiMgNTY2ICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL3N5cy90 eXBlcy5oIiAyIDMgNAoKCgoKIAoKCgoKCgoKCiAKCgoKfQoKCgojIDcxICIuLi9TcmNVbml4L0Vt Q29tbW9uVW5peC5oIiAyCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDEgMyA0CiAK CgoKCiAKIAoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzb2NrZXQuaAkxLjU0CTAxLzAz LzEyIFNNSSIJCgogCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdWlv LmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIyl1aW8uaAkx LjI5CTk3LzA2LzI5IFNNSSIJCgoKCgpleHRlcm4gIkMiIHsKCgoKCiAKCgoKCgoKCgoKCgoKdHlw ZWRlZiBzdHJ1Y3QgaW92ZWMgewoJY2FkZHJfdAlpb3ZfYmFzZTsKCgoKCWxvbmcJaW92X2xlbjsK Cn0gaW92ZWNfdDsKCgojIDU4ICIvdXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAzIDQKCgoKIAoKCnR5 cGVkZWYgZW51bSB1aW9fc2VnIHsgVUlPX1VTRVJTUEFDRSwgVUlPX1NZU1NQQUNFLCBVSU9fVVNF UklTUEFDRSB9IHVpb19zZWdfdDsKCnR5cGVkZWYgc3RydWN0IHVpbyB7Cglpb3ZlY190CSp1aW9f aW92OwkgCglpbnQJdWlvX2lvdmNudDsJIAoJbGxvZmZfdAlfdWlvX29mZnNldDsJIAoJdWlvX3Nl Z190IHVpb19zZWdmbGc7CSAKCXNob3J0CXVpb19mbW9kZTsJIAoJbGxkYWRkcl90IF91aW9fbGlt aXQ7CSAKCXNzaXplX3QJdWlvX3Jlc2lkOwkgCn0gdWlvX3Q7CgoKCgoKCgoKCgoKCgoKCiAKCgp0 eXBlZGVmIGVudW0gdWlvX3J3IHsgVUlPX1JFQUQsIFVJT19XUklURSB9IHVpb19yd190OwoKCiMg MTA4ICIvdXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAzIDQKCgoKCmV4dGVybiBzc2l6ZV90IHJlYWR2 KGludCwgY29uc3Qgc3RydWN0IGlvdmVjICosIGludCk7CmV4dGVybiBzc2l6ZV90IHdyaXRldihp bnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQpOwoKCgoKCgoKCgoKCn0KCgoKIyAzOCAiL3Vz ci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMiAzIDQKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9u ZXRjb25maWcuaCIgMSAzIDQKIAogCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKW5ldGNv bmZpZy5oCTEuMjAJOTkvMDQvMjcgU01JIgkKCgpleHRlcm4gIkMiIHsKCgoKCgpzdHJ1Y3QgIG5l dGNvbmZpZyB7CgljaGFyCQkqbmNfbmV0aWQ7CSAKCXVuc2lnbmVkIGludAluY19zZW1hbnRpY3M7 CSAKCXVuc2lnbmVkIGludAluY19mbGFnOwkgCgljaGFyCQkqbmNfcHJvdG9mbWx5OwkgCgljaGFy CQkqbmNfcHJvdG87CSAKCWNoYXIJCSpuY19kZXZpY2U7CSAKCXVuc2lnbmVkIGludAluY19ubG9v a3VwczsJIAoJY2hhcgkJKipuY19sb29rdXBzOwkgCgl1bnNpZ25lZCBpbnQJbmNfdW51c2VkWzhd OwkgCn07Cgp0eXBlZGVmIHN0cnVjdCB7CglzdHJ1Y3QgbmV0Y29uZmlnICoqbmNfaGVhZDsKCXN0 cnVjdCBuZXRjb25maWcgKipuY19jdXJyOwp9IE5DT05GX0hBTkRMRTsKCiAKCgoKCgoKCgogCgoK CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgpleHRlcm4gdm9p ZAkJKnNldG5ldGNvbmZpZyh2b2lkKTsKZXh0ZXJuIGludAkJZW5kbmV0Y29uZmlnKHZvaWQgKik7 CmV4dGVybiBzdHJ1Y3QgbmV0Y29uZmlnCSpnZXRuZXRjb25maWcodm9pZCAqKTsKZXh0ZXJuIHN0 cnVjdCBuZXRjb25maWcJKmdldG5ldGNvbmZpZ2VudChjaGFyICopOwpleHRlcm4gdm9pZAkJZnJl ZW5ldGNvbmZpZ2VudChzdHJ1Y3QgbmV0Y29uZmlnICopOwpleHRlcm4gdm9pZAkJKnNldG5ldHBh dGgodm9pZCk7CmV4dGVybiBpbnQJCWVuZG5ldHBhdGgodm9pZCAqKTsKZXh0ZXJuIHN0cnVjdCBu ZXRjb25maWcgKmdldG5ldHBhdGgodm9pZCAqKTsKZXh0ZXJuIHZvaWQJCW5jX3BlcnJvcihjb25z dCBjaGFyICopOwpleHRlcm4gY2hhcgkJKm5jX3NwZXJyb3Iodm9pZCk7CgojIDExOCAiL3Vzci9p bmNsdWRlL3N5cy9uZXRjb25maWcuaCIgMyA0CgoKCn0KCgoKIyA0MiAiL3Vzci9pbmNsdWRlL3N5 cy9zb2NrZXQuaCIgMiAzIDQKCgoKCgpleHRlcm4gIkMiIHsKCgoKCnR5cGVkZWYgdWludDE2X3QJ c2FfZmFtaWx5X3Q7CgoKCgoKCgoKdHlwZWRlZgl1aW50MzJfdAlzb2NrbGVuX3Q7CgoKCgoKdHlw ZWRlZgl2b2lkCQkqUHNvY2tsZW5fdDsKCgoKCiAKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK IAoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgogCgoKc3RydWN0 CWxpbmdlciB7CglpbnQJbF9vbm9mZjsJCSAKCWludAlsX2xpbmdlcjsJCSAKfTsKCiAKCgoKCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKc3RydWN0IHNvY2thZGRyIHsK CXNhX2ZhbWlseV90CXNhX2ZhbWlseTsJIAoJY2hhcgkJc2FfZGF0YVsxNF07CSAKfTsKCgojIDEg Ii91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDEgMyA0CiAKCgoKIAoKCgoKCgoKCgoKCiAKCgoK CgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWluLmgJMS4zMQkwMC8xMC8yOCBTTUkiCgoKCgoK CmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RyZWFtLmgiIDEgMyA0CiAK IAoKIAogCiAKCiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzdHJlYW0uaAkxLjg2CTAwLzEw LzIzIFNNSSIJCgogCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy92bm9kZS5oIiAxIDMgNAogCiAK CiAKIAogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXZu b2RlLmgJMS44NQk5OS8wNy8zMCBTTUkiCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RfbG9jay5o IiAxIDMgNAogCgoKCgogCgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXRfbG9jay5oCTEuNDUJ OTgvMDIvMDEgU01JIgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9tYWNobG9jay5oIiAxIDMgNAog CgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpbWFjaGxvY2suaAkxLjIxCTAwLzA0LzI3IFNNSSIK CgpleHRlcm4gIkMiIHsKCgoKCgoKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9tYWNobG9jay5oIiAz IDQKCgoKCgoKCnR5cGVkZWYJbG9ja190CWRpc3BfbG9ja190OwkJIAoKIAoKCgoKCiAKCgoKCgoK CiAKCgpleHRlcm4JaW50CWhyZXNfbG9jazsKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK IAoKCgoKCgoKCgoKCgoKfQoKCgojIDE4ICIvdXNyL2luY2x1ZGUvc3lzL3RfbG9jay5oIiAyIDMg NAoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3BhcmFtLmgiIDEgMyA0CiAKCgoKCiAKIAoKIAogCiAK CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpcGFyYW0uaAkxLjc2 CTAwLzAyLzE0IFNNSSIKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoJCQkJIAoJCQkJIAoJCQkJIAoKIAoKCgoKCgogCgoK CgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoK CgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoK IyAyNzkgIi91c3IvaW5jbHVkZS9zeXMvcGFyYW0uaCIgMyA0CgoKCn0KCgogCgoKCgojIDQwMyAi L3Vzci9pbmNsdWRlL3N5cy9wYXJhbS5oIiAzIDQKCgogCgoKCgoKCgojIDEgIi91c3IvaW5jbHVk ZS9zeXMvdW5pc3RkLmgiIDEgMyA0CiAKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCiNwcmFnbWEg aWRlbnQJIkAoIyl1bmlzdGQuaAkxLjM3CTk4LzEwLzI4IFNNSSIJCgoKCgpleHRlcm4gIkMiIHsK CgogCgoKCiAKCgogCgoKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgogCgoKCgoKCgoK IAoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiAKCgoKIAoKCgoKCiAKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK CgoKCgoKCgoKCgoKCiAKCgoKCgoKCgogCgogCgoKCgoKCgoKCiAKCgoKCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKfQoKCgojIDQxMyAiL3Vzci9pbmNsdWRlL3N5cy9w YXJhbS5oIiAyIDMgNAoKCgpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIGxvbmcgX3N5c2NvbmYoaW50 KTsJIAoKCgoKCgoKCgoKfQoKCgoKCiMgMTkgIi91c3IvaW5jbHVkZS9zeXMvdF9sb2NrLmgiIDIg MyA0CgojIDEgIi91c3IvaW5jbHVkZS9zeXMvbXV0ZXguaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdt YSBpZGVudAkiQCgjKW11dGV4LmgJMS4yMAk5OC8wMi8wMSBTTUkiCgoKCgoKCmV4dGVybiAiQyIg ewoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgZW51bSB7CglNVVRFWF9BREFQVElWRSA9 IDAsCSAKCU1VVEVYX1NQSU4gPSAxLAkJIAoJTVVURVhfRFJJVkVSID0gNCwJIAoJTVVURVhfREVG QVVMVCA9IDYJIAp9IGttdXRleF90eXBlX3Q7Cgp0eXBlZGVmIHN0cnVjdCBtdXRleCB7CgoKCgl2 b2lkCSpfb3BhcXVlWzJdOwoKfSBrbXV0ZXhfdDsKCiMgNjcgIi91c3IvaW5jbHVkZS9zeXMvbXV0 ZXguaCIgMyA0CgoKCgoKfQoKCgojIDIwICIvdXNyL2luY2x1ZGUvc3lzL3RfbG9jay5oIiAyIDMg NAoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3J3bG9jay5oIiAxIDMgNAogCgoKCgoKCgojcHJhZ21h IGlkZW50CSJAKCMpcndsb2NrLmgJMS45CTk4LzAyLzE4IFNNSSIKCiAKCgoKCgoKZXh0ZXJuICJD IiB7CgoKCgp0eXBlZGVmIGVudW0gewoJUldfRFJJVkVSID0gMiwJCSAKCVJXX0RFRkFVTFQgPSA0 CQkgCn0ga3J3X3R5cGVfdDsKCnR5cGVkZWYgZW51bSB7CglSV19XUklURVIsCglSV19SRUFERVIK fSBrcndfdDsKCnR5cGVkZWYgc3RydWN0IF9rcndsb2NrIHsKCXZvaWQJKl9vcGFxdWVbMV07Cn0g a3J3bG9ja190OwoKIyA1OCAiL3Vzci9pbmNsdWRlL3N5cy9yd2xvY2suaCIgMyA0CgoKCgoKfQoK CgojIDIxICIvdXNyL2luY2x1ZGUvc3lzL3RfbG9jay5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1 ZGUvc3lzL3NlbWFwaG9yZS5oIiAxIDMgNAogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc2Vt YXBob3JlLmgJMS41CTk4LzAyLzAxIFNNSSIKCiAKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCnR5 cGVkZWYgZW51bSB7CglTRU1BX0RFRkFVTFQsCglTRU1BX0RSSVZFUgp9IGtzZW1hX3R5cGVfdDsK CnR5cGVkZWYgc3RydWN0IF9rc2VtYSB7Cgl2b2lkCSogX29wYXF1ZVsyXTsJIAp9IGtzZW1hX3Q7 CgojIDQ2ICIvdXNyL2luY2x1ZGUvc3lzL3NlbWFwaG9yZS5oIiAzIDQKCgoKfQoKCgoKCiMgMjIg Ii91c3IvaW5jbHVkZS9zeXMvdF9sb2NrLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9zeXMv Y29uZHZhci5oIiAxIDMgNAogCgoKCgogCgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpY29u ZHZhci5oCTEuMTMJMDEvMDMvMTUgU01JIgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKCgogCgoK CnR5cGVkZWYgc3RydWN0IF9rY29uZHZhciB7Cgl1c2hvcnRfdAlfb3BhcXVlOwp9IGtjb25kdmFy X3Q7Cgp0eXBlZGVmCWVudW0gewoJQ1ZfREVGQVVMVCwKCUNWX0RSSVZFUgp9IGtjdl90eXBlX3Q7 CgoKIyA2NSAiL3Vzci9pbmNsdWRlL3N5cy9jb25kdmFyLmgiIDMgNAoKCgoKCn0KCgoKIyAyMyAi L3Vzci9pbmNsdWRlL3N5cy90X2xvY2suaCIgMiAzIDQKCgoKCmV4dGVybiAiQyIgewoKCgoKIAoK CgoKCgoKCgojIDc2ICIvdXNyL2luY2x1ZGUvc3lzL3RfbG9jay5oIiAzIDQKCgoKCgp9CgoKCiMg MzggIi91c3IvaW5jbHVkZS9zeXMvdm5vZGUuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9z eXMvY3JlZC5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoj cHJhZ21hIGlkZW50CSJAKCMpY3JlZC5oCTEuMjEJOTcvMDEvMDkgU01JIgkKCgoKCgoKZXh0ZXJu ICJDIiB7CgoKIAoKCgoKCnR5cGVkZWYgc3RydWN0IGNyZWQgewoJdWludF90CWNyX3JlZjsJCQkg Cgl1aWRfdAljcl91aWQ7CQkJIAoJZ2lkX3QJY3JfZ2lkOwkJCSAKCXVpZF90CWNyX3J1aWQ7CQkg CglnaWRfdAljcl9yZ2lkOwkJIAoJdWlkX3QJY3Jfc3VpZDsJCSAKCWdpZF90CWNyX3NnaWQ7CQkg Cgl1aW50X3QJY3Jfbmdyb3VwczsJCSAKCWdpZF90CWNyX2dyb3Vwc1sxXTsJCSAKfSBjcmVkX3Q7 CgojIDg5ICIvdXNyL2luY2x1ZGUvc3lzL2NyZWQuaCIgMyA0CgoKCn0KCgoKIyA0MCAiL3Vzci9p bmNsdWRlL3N5cy92bm9kZS5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJj ZS5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpcmVzb3Vy Y2UuaAkxLjI1CTk4LzA2LzMwIFNNSSIJCgoKCgoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoK IAoKCgoKCgoKCgoKCgoKCiMgNTkgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0CgoK IAoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZwlybGltX3Q7CgoKCgoKIyA4MSAiL3Vzci9pbmNs dWRlL3N5cy9yZXNvdXJjZS5oIiAzIDQKCgoKCiMgMTAwICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291 cmNlLmgiIDMgNAoKCnN0cnVjdCBybGltaXQgewoJcmxpbV90CXJsaW1fY3VyOwkJIAoJcmxpbV90 CXJsaW1fbWF4OwkJIAp9OwoKIAoKCnR5cGVkZWYgdV9sb25nbG9uZ190CXJsaW02NF90OwoKCgoK CnN0cnVjdCBybGltaXQ2NCB7CglybGltNjRfdAlybGltX2N1cjsJIAoJcmxpbTY0X3QJcmxpbV9t YXg7CSAKfTsKCgoKIyAxMzggIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIgMyA0CgoKCgoK c3RydWN0CXJ1c2FnZSB7CglzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsJIAoJc3RydWN0IHRpbWV2 YWwgcnVfc3RpbWU7CSAKCWxvbmcJcnVfbWF4cnNzOwkJIAoJbG9uZwlydV9peHJzczsJCSAKCWxv bmcJcnVfaWRyc3M7CQkgCglsb25nCXJ1X2lzcnNzOwkJIAoJbG9uZwlydV9taW5mbHQ7CQkgCgls b25nCXJ1X21hamZsdDsJCSAKCWxvbmcJcnVfbnN3YXA7CQkgCglsb25nCXJ1X2luYmxvY2s7CQkg Cglsb25nCXJ1X291YmxvY2s7CQkgCglsb25nCXJ1X21zZ3NuZDsJCSAKCWxvbmcJcnVfbXNncmN2 OwkJIAoJbG9uZwlydV9uc2lnbmFsczsJCSAKCWxvbmcJcnVfbnZjc3c7CQkgCglsb25nCXJ1X25p dmNzdzsJCSAKfTsKCiMgMTc0ICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNAoKCiMg MTg5ICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMgNAoKCgoKZXh0ZXJuIGludCBzZXRy bGltaXQoaW50LCBjb25zdCBzdHJ1Y3QgcmxpbWl0ICopOwpleHRlcm4gaW50IGdldHJsaW1pdChp bnQsIHN0cnVjdCBybGltaXQgKik7CgogCgoKZXh0ZXJuIGludCBzZXRybGltaXQ2NChpbnQsIGNv bnN0IHN0cnVjdCBybGltaXQ2NCAqKTsKZXh0ZXJuIGludCBnZXRybGltaXQ2NChpbnQsIHN0cnVj dCBybGltaXQ2NCAqKTsKCgpleHRlcm4gaW50IGdldHByaW9yaXR5KGludCwgaWRfdCk7CmV4dGVy biBpbnQgc2V0cHJpb3JpdHkoaW50LCBpZF90LCBpbnQpOwpleHRlcm4gaW50IGdldHJ1c2FnZShp bnQsIHN0cnVjdCBydXNhZ2UgKik7CgojIDIyMyAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5o IiAzIDQKCgoKCgp9CgoKCiMgNDIgIi91c3IvaW5jbHVkZS9zeXMvdm5vZGUuaCIgMiAzIDQKCiMg MSAiL3Vzci9pbmNsdWRlL3ZtL3NlZ19lbnVtLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzZWdfZW51bS5oCTEuMwk5NS8x Mi8yMiBTTUkiCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoKIAoKCgoKZW51bSBmYXVsdF90eXBlIHsK CUZfSU5WQUwsCQkgCglGX1BST1QsCQkJIAoJRl9TT0ZUTE9DSywJCSAKCUZfU09GVFVOTE9DSwkJ IAp9OwoKIAoKCmVudW0gbG9ja190eXBlIHsKCUxfUEFHRUxPQ0ssCQkgCglMX1BBR0VVTkxPQ0ss CQkgCglMX1BBR0VSRUNMQUlNCQkgCn07CgogCgoKZW51bSBzZWdfcncgewoJU19PVEhFUiwJCSAK CVNfUkVBRCwJCQkgCglTX1dSSVRFLAkJIAoJU19FWEVDLAkJCSAKCVNfQ1JFQVRFCQkgCn07CgoK fQoKCgojIDQzICIvdXNyL2luY2x1ZGUvc3lzL3Zub2RlLmgiIDIgMyA0CgoKCgoKCmV4dGVybiAi QyIgewoKCgogCgoKCgoKIAoKCgp0eXBlZGVmIGVudW0gdnR5cGUgewoJVk5PTgk9IDAsCglWUkVH CT0gMSwKCVZESVIJPSAyLAoJVkJMSwk9IDMsCglWQ0hSCT0gNCwKCVZMTksJPSA1LAoJVkZJRk8J PSA2LAoJVkRPT1IJPSA3LAoJVlBST0MJPSA4LAoJVlNPQ0sJPSA5LAoJVkJBRAk9IDEwCn0gdnR5 cGVfdDsKCiAKCgoKCgoKCgogCnR5cGVkZWYgc3RydWN0IHZub2RlIHsKCWttdXRleF90CXZfbG9j azsJCQkgCgl1c2hvcnRfdAl2X2ZsYWc7CQkJIAoJdWludF90CQl2X2NvdW50OwkJIAoJc3RydWN0 IHZmcwkqdl92ZnNtb3VudGVkaGVyZTsJIAoJc3RydWN0IHZub2Rlb3BzCSp2X29wOwkJCSAKCXN0 cnVjdCB2ZnMJKnZfdmZzcDsJCSAKCXN0cnVjdCBzdGRhdGEJKnZfc3RyZWFtOwkJIAoJc3RydWN0 IHBhZ2UJKnZfcGFnZXM7CQkgCgllbnVtIHZ0eXBlCXZfdHlwZTsJCQkgCglkZXZfdAkJdl9yZGV2 OwkJCSAKCWNhZGRyX3QJCXZfZGF0YTsJCQkgCglzdHJ1Y3QgZmlsb2NrCSp2X2ZpbG9ja3M7CQkg CglzdHJ1Y3Qgc2hybG9ja2xpc3QgKnZfc2hybG9ja3M7CQkgCglrY29uZHZhcl90CXZfY3Y7CQkJ IAoJdm9pZAkJKnZfbG9jYWxpdHk7CQkgCn0gdm5vZGVfdDsKCiAKCgoKCgoKCgoKCgoKCiAKCgoK CgogCgoKCgogCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgogCgoKCgoKCnR5cGVkZWYgc3RydWN0IHZh dHRyIHsKCXVpbnRfdAkJdmFfbWFzazsJIAoJdnR5cGVfdAkJdmFfdHlwZTsJIAoJbW9kZV90CQl2 YV9tb2RlOwkgCgl1aWRfdAkJdmFfdWlkOwkJIAoJZ2lkX3QJCXZhX2dpZDsJCSAKCWRldl90CQl2 YV9mc2lkOwkgCgl1X2xvbmdsb25nX3QJdmFfbm9kZWlkOwkgCglubGlua190CQl2YV9ubGluazsJ IAoJdV9vZmZzZXRfdAl2YV9zaXplOwkgCgl0aW1lc3RydWNfdAl2YV9hdGltZTsJIAoJdGltZXN0 cnVjX3QJdmFfbXRpbWU7CSAKCXRpbWVzdHJ1Y190CXZhX2N0aW1lOwkgCglkZXZfdAkJdmFfcmRl djsJIAoJdWludF90CQl2YV9ibGtzaXplOwkgCgl1X2xvbmdsb25nX3QJdmFfbmJsb2NrczsJIAoJ dWludF90CQl2YV92Y29kZTsJIAp9IHZhdHRyX3Q7CgojIDIwMCAiL3Vzci9pbmNsdWRlL3N5cy92 bm9kZS5oIiAzIDQKCgp0eXBlZGVmIHZhdHRyX3QJCXZhdHRyMzJfdDsKCgogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCiAKCgplbnVtIHJt CQl7IFJNRklMRSwgUk1ESVJFQ1RPUlkgfTsJIAplbnVtIHN5bWZvbGxvdwl7IE5PX0ZPTExPVywg Rk9MTE9XIH07CQkgCmVudW0gdmNleGNsCXsgTk9ORVhDTCwgRVhDTCB9OwkJIAplbnVtIGNyZWF0 ZQl7IENSQ1JFQVQsIENSTUtOT0QsIENSTUtESVIgfTsJIAoKdHlwZWRlZiBlbnVtIHJtCQlybV90 Owp0eXBlZGVmIGVudW0gc3ltZm9sbG93CXN5bWZvbGxvd190Owp0eXBlZGVmIGVudW0gdmNleGNs CXZjZXhjbF90Owp0eXBlZGVmIGVudW0gY3JlYXRlCWNyZWF0ZV90OwoKIAoKCgp0eXBlZGVmIHN0 cnVjdCB2c2VjYXR0ciB7Cgl1aW50X3QJCXZzYV9tYXNrOwkgCglpbnQJCXZzYV9hY2xjbnQ7CSAK CXZvaWQJCSp2c2FfYWNsZW50cDsJIAoJaW50CQl2c2FfZGZhY2xjbnQ7CSAKCXZvaWQJCSp2c2Ff ZGZhY2xlbnRwOwkgCn0gdnNlY2F0dHJfdDsKCiAKCgoKCgogCgoKc3RydWN0IHBhdGhuYW1lOwpz dHJ1Y3QgZmlkOwpzdHJ1Y3QgZmxvY2s2NDsKc3RydWN0IHNocmxvY2s7CnN0cnVjdCBwYWdlOwpz dHJ1Y3Qgc2VnOwpzdHJ1Y3QgYXM7CnN0cnVjdCBwb2xsaGVhZDsKCiAKCgp0eXBlZGVmIHN0cnVj dCB2bm9kZW9wcyB7CglpbnQJKCp2b3Bfb3Blbikoc3RydWN0IHZub2RlICoqdnBwLCBpbnQgZmxh Zywgc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9jbG9zZSkoc3RydWN0IHZub2RlICp2cCwg aW50IGZsYWcsIGludCBjb3VudCwKCQkJCW9mZnNldF90IG9mZnNldCwgc3RydWN0IGNyZWQgKmNy KTsKCWludAkoKnZvcF9yZWFkKShzdHJ1Y3Qgdm5vZGUgKnZwLCBzdHJ1Y3QgdWlvICp1aW9wLCBp bnQgaW9mbGFnLAoJCQkgICAgc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF93cml0ZSkoc3Ry dWN0IHZub2RlICp2cCwgc3RydWN0IHVpbyAqdWlvcCwgaW50IGlvZmxhZywKCQkJCXN0cnVjdCBj cmVkICpjcik7CglpbnQJKCp2b3BfaW9jdGwpKHN0cnVjdCB2bm9kZSAqdnAsIGludCBjbWQsIGlu dHB0cl90IGFyZywgaW50IGZsYWcsCgkJCQlzdHJ1Y3QgY3JlZCAqY3IsIGludCAqcnZhbHApOwoJ aW50CSgqdm9wX3NldGZsKShzdHJ1Y3Qgdm5vZGUgKnZwLCBpbnQgb2ZsYWdzLCBpbnQgbmZsYWdz LAoJCQkJc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9nZXRhdHRyKShzdHJ1Y3Qgdm5vZGUg KnZwLCBzdHJ1Y3QgdmF0dHIgKnZhcCwgaW50IGZsYWdzLAoJCQkJc3RydWN0IGNyZWQgKmNyKTsK CWludAkoKnZvcF9zZXRhdHRyKShzdHJ1Y3Qgdm5vZGUgKnZwLCBzdHJ1Y3QgdmF0dHIgKnZhcCwg aW50IGZsYWdzLAoJCQkJc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9hY2Nlc3MpKHN0cnVj dCB2bm9kZSAqdnAsIGludCBtb2RlLCBpbnQgZmxhZ3MsCgkJCQlzdHJ1Y3QgY3JlZCAqY3IpOwoJ aW50CSgqdm9wX2xvb2t1cCkoc3RydWN0IHZub2RlICpkdnAsIGNoYXIgKm5tLCBzdHJ1Y3Qgdm5v ZGUgKip2cHAsCgkJCQlzdHJ1Y3QgcGF0aG5hbWUgKnBucCwgaW50IGZsYWdzLAoJCQkJc3RydWN0 IHZub2RlICpyZGlyLCBzdHJ1Y3QgY3JlZCAqKTsKCWludAkoKnZvcF9jcmVhdGUpKHN0cnVjdCB2 bm9kZSAqZHZwLCBjaGFyICpuYW1lLCBzdHJ1Y3QgdmF0dHIgKnZhcCwKCQkJCXZjZXhjbF90IGV4 Y2wsIGludCBtb2RlLCBzdHJ1Y3Qgdm5vZGUgKip2cHAsCgkJCQlzdHJ1Y3QgY3JlZCAqY3IsIGlu dCBmbGFnKTsKCWludAkoKnZvcF9yZW1vdmUpKHN0cnVjdCB2bm9kZSAqdnAsIGNoYXIgKm5tLCBz dHJ1Y3QgY3JlZCAqY3IpOwoJaW50CSgqdm9wX2xpbmspKHN0cnVjdCB2bm9kZSAqdGR2cCwgc3Ry dWN0IHZub2RlICpzdnAsIGNoYXIgKnRubSwKCQkJCXN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2 b3BfcmVuYW1lKShzdHJ1Y3Qgdm5vZGUgKnNkdnAsIGNoYXIgKnNubSwKCQkJCXN0cnVjdCB2bm9k ZSAqdGR2cCwgY2hhciAqdG5tLCBzdHJ1Y3QgY3JlZCAqY3IpOwoJaW50CSgqdm9wX21rZGlyKShz dHJ1Y3Qgdm5vZGUgKmR2cCwgY2hhciAqZGlybmFtZSwKCQkJCXN0cnVjdCB2YXR0ciAqdmFwLCBz dHJ1Y3Qgdm5vZGUgKip2cHAsCgkJCQlzdHJ1Y3QgY3JlZCAqY3IpOwoJaW50CSgqdm9wX3JtZGly KShzdHJ1Y3Qgdm5vZGUgKnZwLCBjaGFyICpubSwgc3RydWN0IHZub2RlICpjZGlyLAoJCQkJc3Ry dWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9yZWFkZGlyKShzdHJ1Y3Qgdm5vZGUgKnZwLCBzdHJ1 Y3QgdWlvICp1aW9wLAoJCQkJc3RydWN0IGNyZWQgKmNyLCBpbnQgKmVvZnApOwoJaW50CSgqdm9w X3N5bWxpbmspKHN0cnVjdCB2bm9kZSAqZHZwLCBjaGFyICpsaW5rbmFtZSwKCQkJCXN0cnVjdCB2 YXR0ciAqdmFwLCBjaGFyICp0YXJnZXQsCgkJCQlzdHJ1Y3QgY3JlZCAqY3IpOwoJaW50CSgqdm9w X3JlYWRsaW5rKShzdHJ1Y3Qgdm5vZGUgKnZwLCBzdHJ1Y3QgdWlvICp1aW9wLAoJCQkJc3RydWN0 IGNyZWQgKmNyKTsKCWludAkoKnZvcF9mc3luYykoc3RydWN0IHZub2RlICp2cCwgaW50IHN5bmNm bGFnLCBzdHJ1Y3QgY3JlZCAqY3IpOwoJdm9pZAkoKnZvcF9pbmFjdGl2ZSkoc3RydWN0IHZub2Rl ICp2cCwgc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9maWQpKHN0cnVjdCB2bm9kZSAqdnAs IHN0cnVjdCBmaWQgKmZpZHApOwoJdm9pZAkoKnZvcF9yd2xvY2spKHN0cnVjdCB2bm9kZSAqdnAs IGludCB3cml0ZV9sb2NrKTsKCXZvaWQJKCp2b3Bfcnd1bmxvY2spKHN0cnVjdCB2bm9kZSAqdnAs IGludCB3cml0ZV9sb2NrKTsKCWludAkoKnZvcF9zZWVrKShzdHJ1Y3Qgdm5vZGUgKnZwLCBvZmZz ZXRfdCBvb2ZmLCBvZmZzZXRfdCAqbm9mZnApOwoJaW50CSgqdm9wX2NtcCkoc3RydWN0IHZub2Rl ICp2cDEsIHN0cnVjdCB2bm9kZSAqdnAyKTsKCWludAkoKnZvcF9mcmxvY2spKHN0cnVjdCB2bm9k ZSAqdnAsIGludCBjbWQsIHN0cnVjdCBmbG9jazY0ICpiZnAsCgkJCQlpbnQgZmxhZywgb2Zmc2V0 X3Qgb2Zmc2V0LCBzdHJ1Y3QgY3JlZCAqY3IpOwoJaW50CSgqdm9wX3NwYWNlKShzdHJ1Y3Qgdm5v ZGUgKnZwLCBpbnQgY21kLCBzdHJ1Y3QgZmxvY2s2NCAqYmZwLAoJCQkJaW50IGZsYWcsIG9mZnNl dF90IG9mZnNldCwgc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9yZWFsdnApKHN0cnVjdCB2 bm9kZSAqdnAsIHN0cnVjdCB2bm9kZSAqKnZwcCk7CglpbnQJKCp2b3BfZ2V0cGFnZSkoc3RydWN0 IHZub2RlICp2cCwgb2Zmc2V0X3Qgb2ZmLCBzaXplX3QgbGVuLAoJCQkJdWludF90ICpwcm90cCwg c3RydWN0IHBhZ2UgKipwbGFyciwgc2l6ZV90IHBsc3osCgkJCQlzdHJ1Y3Qgc2VnICpzZWcsIGNh ZGRyX3QgYWRkciwgZW51bSBzZWdfcncgcncsCgkJCQlzdHJ1Y3QgY3JlZCAqY3IpOwoJaW50CSgq dm9wX3B1dHBhZ2UpKHN0cnVjdCB2bm9kZSAqdnAsIG9mZnNldF90IG9mZiwgc2l6ZV90IGxlbiwK CQkJCWludCBmbGFncywgc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9tYXApKHN0cnVjdCB2 bm9kZSAqdnAsIG9mZnNldF90IG9mZiwgc3RydWN0IGFzICphcywKCQkJICAgIGNhZGRyX3QgKmFk ZHJwLCBzaXplX3QgbGVuLCB1Y2hhcl90IHByb3QsCgkJCSAgICB1Y2hhcl90IG1heHByb3QsIHVp bnRfdCBmbGFncywgc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9hZGRtYXApKHN0cnVjdCB2 bm9kZSAqdnAsIG9mZnNldF90IG9mZiwgc3RydWN0IGFzICphcywKCQkJCWNhZGRyX3QgYWRkciwg c2l6ZV90IGxlbiwgdWNoYXJfdCBwcm90LAoJCQkJdWNoYXJfdCBtYXhwcm90LCB1aW50X3QgZmxh Z3MsIHN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3BfZGVsbWFwKShzdHJ1Y3Qgdm5vZGUgKnZw LCBvZmZzZXRfdCBvZmYsIHN0cnVjdCBhcyAqYXMsCgkJCQljYWRkcl90IGFkZHIsIHNpemVfdCBs ZW4sIHVpbnRfdCBwcm90LAoJCQkJdWludF90IG1heHByb3QsIHVpbnRfdCBmbGFncywgc3RydWN0 IGNyZWQgKmNyKTsKCWludAkoKnZvcF9wb2xsKShzdHJ1Y3Qgdm5vZGUgKnZwLCBzaG9ydCBldiwg aW50IGFueSwgc2hvcnQgKnJldnAsCgkJCXN0cnVjdCBwb2xsaGVhZCAqKnBocHApOwoJaW50CSgq dm9wX2R1bXApKHN0cnVjdCB2bm9kZSAqdnAsIGNhZGRyX3QgYWRkciwgaW50IGxiZG4sCgkJCQlp bnQgZGJsa3MpOwoJaW50CSgqdm9wX3BhdGhjb25mKShzdHJ1Y3Qgdm5vZGUgKnZwLCBpbnQgY21k LCB1bG9uZ190ICp2YWxwLAoJCQkJc3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9wYWdlaW8p KHN0cnVjdCB2bm9kZSAqdnAsIHN0cnVjdCBwYWdlICpwcCwKCQkJCXVfb2Zmc2V0X3QgaW9fb2Zm LCBzaXplX3QgaW9fbGVuLCBpbnQgZmxhZ3MsCgkJCQlzdHJ1Y3QgY3JlZCAqY3IpOwoJaW50CSgq dm9wX2R1bXBjdGwpKHN0cnVjdCB2bm9kZSAqdnAsIGludCBhY3Rpb24sIGludCAqYmxrcCk7Cgl2 b2lkCSgqdm9wX2Rpc3Bvc2UpKHN0cnVjdCB2bm9kZSAqdnAsIHN0cnVjdCBwYWdlICpwcCwgaW50 IGZsYWcsCgkJCQlpbnQgZG4sIHN0cnVjdCBjcmVkICpjcik7CglpbnQJKCp2b3Bfc2V0c2VjYXR0 cikoc3RydWN0IHZub2RlICp2cCwgdnNlY2F0dHJfdCAqdnNhcCwgaW50IGZsYWcsCgkJCQkgICAg c3RydWN0IGNyZWQgKmNyKTsKCWludAkoKnZvcF9nZXRzZWNhdHRyKShzdHJ1Y3Qgdm5vZGUgKnZw LCB2c2VjYXR0cl90ICp2c2FwLCBpbnQgZmxhZywKCQkJCSAgICBzdHJ1Y3QgY3JlZCAqY3IpOwoJ aW50CSgqdm9wX3NocmxvY2spKHN0cnVjdCB2bm9kZSAqdnAsIGludCBjbWQsIHN0cnVjdCBzaHJs b2NrICpzaHIsCgkJCQlpbnQgZmxhZyk7Cn0gdm5vZGVvcHNfdDsKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK CiAKCgoKCgoKIAoKCiMgNTAxICIvdXNyL2luY2x1ZGUvc3lzL3Zub2RlLmgiIDMgNAoKCgoKCgoK CgoKCgoKIyA1MjMgIi91c3IvaW5jbHVkZS9zeXMvdm5vZGUuaCIgMyA0CgogCgoKCgoKCgogCgoK CgoKCgoKIAoKCgoKCgojIDU3NyAiL3Vzci9pbmNsdWRlL3N5cy92bm9kZS5oIiAzIDQKCgoKfQoK CgojIDIyICIvdXNyL2luY2x1ZGUvc3lzL3N0cmVhbS5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1 ZGUvc3lzL3BvbGwuaCIgMSAzIDQKIAogCgogCiAKIAoKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAki QCgjKXBvbGwuaAkxLjI4CTk4LzExLzIzIFNNSSIJCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgp0eXBl ZGVmIHN0cnVjdCBwb2xsZmQgewoJaW50IGZkOwkJCQkgCglzaG9ydCBldmVudHM7CQkJIAoJc2hv cnQgcmV2ZW50czsJCQkgCn0gcG9sbGZkX3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcJbmZkc190 OwoKIAoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCiMgNjggIi91c3IvaW5jbHVkZS9zeXMvcG9sbC5o IiAzIDQKCgojIDEyMCAiL3Vzci9pbmNsdWRlL3N5cy9wb2xsLmgiIDMgNAoKCgoKaW50IHBvbGwo c3RydWN0IHBvbGxmZCAqLCBuZmRzX3QsIGludCk7CgoKCgoKCn0KCgoKIyAyMyAiL3Vzci9pbmNs dWRlL3N5cy9zdHJlYW0uaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zdHJtZGVwLmgi IDEgMyA0CiAKCgoKCiAKIAoKIAogCiAKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzdHJtZGVwLmgJ MS4xMAk5OC8wMS8wNiBTTUkiCQoKCmV4dGVybiAiQyIgewoKCiAKCgoKCiAKCgoKCgogCgoKCgoK IAoKCgoKCgp9CgoKCiMgMjQgIi91c3IvaW5jbHVkZS9zeXMvc3RyZWFtLmgiIDIgMyA0CgoKCiMg MSAiL3Vzci9pbmNsdWRlL3N5cy9tb2RlbC5oIiAxIDMgNAogCgoKCgoKCgojcHJhZ21hIGlkZW50 CSJAKCMpbW9kZWwuaAkxLjIwCTk3LzA5LzIyIFNNSSIKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgoj IDQ1ICIvdXNyL2luY2x1ZGUvc3lzL21vZGVsLmgiIDMgNAoKCgogCgoKCgoKdHlwZWRlZiB1bnNp Z25lZCBpbnQgbW9kZWxfdDsKCgoKIyAxOTkgIi91c3IvaW5jbHVkZS9zeXMvbW9kZWwuaCIgMyA0 CgoKCn0KCgoKIyAyNyAiL3Vzci9pbmNsdWRlL3N5cy9zdHJlYW0uaCIgMiAzIDQKCiMgMSAiL3Vz ci9pbmNsdWRlL3N5cy9zdHJmdC5oIiAxIDMgNAogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMp c3RyZnQuaAkxLjIJMDAvMTAvMjMgU01JIgoKIAoKCgoKCgoKCmV4dGVybiAiQyIgewoKCiAKCgoK CgoKCnR5cGVkZWYgaHJ0aW1lX3QgdGRlbHRhX3QgWzEyIF1bMl07Cgp0eXBlZGVmIGhydGltZV90 IHRzX3Q7CgpleHRlcm4gdHNfdCBfdHN0YW1wX2M7CSAKCQkJIAoKCgoKCgoKCgoKCgoKCgoKCgoj IDg4ICIvdXNyL2luY2x1ZGUvc3lzL3N0cmZ0LmgiIDMgNAoKCiMgMTMzICIvdXNyL2luY2x1ZGUv c3lzL3N0cmZ0LmgiIDMgNAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKc3RydWN0IGZ0ZXZudCB7 Cgl0c190IHRzOwkgCgljaGFyICptaWQ7CSAKCXVzaG9ydF90IGV2bnQ7CSAKCXVzaG9ydF90IGRh dGE7CSAKfTsKCiAKCgpzdHJ1Y3QgZnRibGsgewoJc3RydWN0IGZ0YmxrICpueHQ7CSAKCWludCBp eDsJCQkgCglzdHJ1Y3QgZnRldm50IGV2WzB4OSBdOwp9OwoKIAoKCgoKCgoKCgpzdHJ1Y3QgZnRo ZHIgewoJc3RydWN0IGZ0YmxrICp0YWlsOwoJdW5zaWduZWQgaGFzaDsJCSAKCXZvaWQgKnRocmVh ZDsKCWludCBjcHVfc2VxaWQ7CglzdHJ1Y3QgZnRibGsgZmlyc3Q7Cn07CgogCgoKCgpzdHJ1Y3Qg ZnRmbHdlIHsKCWNoYXIgKm1pZDsKCXVzaG9ydF90IGV2bnQ7Cgl1c2hvcnRfdCBkYXRhOwoJdGRl bHRhX3QgdGQ7Cn07CgpzdHJ1Y3QgZnRmbHcgewoJc3RydWN0IGZ0Zmx3ICpueHQ7CglpbnQgaGFz aDsKCWludCBjb3VudDsKCXN0cnVjdCBmdGZsd2UgZXZbMV07CSAKfTsKCnR5cGVkZWYgc3RydWN0 IGZ0ZXZudCBmdGV2bnRfdDsKdHlwZWRlZiBzdHJ1Y3QgZnRibGsgZnRibGtfdDsKdHlwZWRlZiBz dHJ1Y3QgZnRoZHIgZnRoZHJfdDsKdHlwZWRlZiBzdHJ1Y3QgZnRmbHdlIGZ0Zmx3ZV90Owp0eXBl ZGVmIHN0cnVjdCBmdGZsdyBmdGZsd190Owp0eXBlZGVmIHN0cnVjdCBmdGV2ZW50cyBmdGV2ZW50 c190OwoKIyAzNTggIi91c3IvaW5jbHVkZS9zeXMvc3RyZnQuaCIgMyA0CgoKCn0KCgoKIyAyOCAi L3Vzci9pbmNsdWRlL3N5cy9zdHJlYW0uaCIgMiAzIDQKCgoKZXh0ZXJuICJDIiB7CgoKIAoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgp0eXBlZGVmIHN0cnVjdAlxdWV1ZSB7CglzdHJ1 Y3QJcWluaXQJKnFfcWluZm87CSAKCXN0cnVjdAltc2diCSpxX2ZpcnN0OwkgCglzdHJ1Y3QJbXNn YgkqcV9sYXN0OwkgCglzdHJ1Y3QJcXVldWUJKnFfbmV4dDsJIAoJc3RydWN0CXF1ZXVlCSpxX2xp bms7CSAKCXZvaWQJCSpxX3B0cjsJCSAKCXNpemVfdAkJcV9jb3VudDsJIAoJdWludF90CQlxX2Zs YWc7CQkgCglzc2l6ZV90CQlxX21pbnBzejsJIAoJCQkJCSAKCXNzaXplX3QJCXFfbWF4cHN6Owkg CgkJCQkJIAoJc2l6ZV90CQlxX2hpd2F0OwkgCglzaXplX3QJCXFfbG93YXQ7CSAKCXN0cnVjdCBx YmFuZAkqcV9iYW5kcDsJIAoJa211dGV4X3QJcV9sb2NrOwkJIAoJc3RydWN0IHN0ZGF0YSAJKnFf c3RyZWFtOwkgCglzdHJ1Y3QJc3luY3EJKnFfc3luY3E7CSAKCXVuc2lnbmVkIGNoYXIJcV9uYmFu ZDsJIAoJa2NvbmR2YXJfdAlxX3dhaXQ7CQkgCglrY29uZHZhcl90CXFfc3luYzsJCSAKCXN0cnVj dAlxdWV1ZQkqcV9uZnNydjsJIAoJc3RydWN0CXF1ZXVlCSpxX25ic3J2OwkgCgl1c2hvcnRfdAlx X2RyYWluaW5nOwkgCglzaG9ydAkJcV9zdHJ1aW90OwkgCgl1aW50X3QJCXFfc3luY3Ftc2dzOwkg CglzaXplX3QJCXFfbWJsa2NudDsJIAoJIAoKCgoKCgoKCXN0cnVjdCBtc2diCSpxX3NxaGVhZDsJ IAoJc3RydWN0IG1zZ2IJKnFfc3F0YWlsOwkgCgl1aW50X3QJCXFfc3FmbGFnczsJIAoJc2l6ZV90 CQlxX3JlZmNudDsJIAoJCQkJCSAKCSAKCgoKCXN0cnVjdCBxdWV1ZQkqcV9zcW5leHQ7CSAKCXN0 cnVjdCBxdWV1ZQkqcV9zcXByZXY7CSAKCXByaV90CQlxX3Nwcmk7CQkgCn0gcXVldWVfdDsKCiAK CgoKCgoKCgoKCQkJCQkgCgoKCQkJCQkgCgoKCgoKCgkJCQkJIAoKCgoKCgoKCgoKCiAKCgoJCQkJ CSAKCQkJCQkgCgkJCQkJIAoKIAoKCgp0eXBlZGVmIHN0cnVjdCBxYmFuZCB7CglzdHJ1Y3QgcWJh bmQJKnFiX25leHQ7CSAKCXNpemVfdAkJcWJfY291bnQ7CSAKCXN0cnVjdCBtc2diCSpxYl9maXJz dDsJIAoJc3RydWN0IG1zZ2IJKnFiX2xhc3Q7CSAKCXNpemVfdAkJcWJfaGl3YXQ7CSAKCXNpemVf dAkJcWJfbG93YXQ7CSAKCXVpbnRfdAkJcWJfZmxhZzsJIAoJc2l6ZV90CQlxYl9tYmxrY250Owkg Cn0gcWJhbmRfdDsKCiAKCgoKCgoKIAoKCgoKIAoKCnR5cGVkZWYgZW51bSBxZmllbGRzIHsKCVFI SVdBVAk9IDAsCQkgCglRTE9XQVQJPSAxLAkJIAoJUU1BWFBTWgk9IDIsCQkgCglRTUlOUFNaCT0g MywJCSAKCVFDT1VOVAk9IDQsCQkgCglRRklSU1QJPSA1LAkJIAoJUUxBU1QJPSA2LAkJIAoJUUZM QUcJPSA3LAkJIAoJUVNUUlVJT1QgPSA4LAkJIAoJUUJBRAk9IDkKfSBxZmllbGRzX3Q7CgogCgoK c3RydWN0IG1vZHVsZV9pbmZvIHsKCXVzaG9ydF90IG1pX2lkbnVtOwkJIAoJY2hhciAJKm1pX2lk bmFtZTsJCSAKCXNzaXplX3QJbWlfbWlucHN6OwkJIAoJc3NpemVfdAltaV9tYXhwc3o7CQkgCglz aXplX3QJbWlfaGl3YXQ7CQkgCglzaXplX3QgCW1pX2xvd2F0OwkJIAp9OwoKIAoKCnN0cnVjdAlx aW5pdCB7CglpbnQJKCpxaV9wdXRwKSgpOwkJIAoJaW50CSgqcWlfc3J2cCkoKTsJCSAKCWludAko KnFpX3FvcGVuKSgpOwkJIAoJaW50CSgqcWlfcWNsb3NlKSgpOwkJIAoJaW50CSgqcWlfcWFkbWlu KSgpOwkJIAoJc3RydWN0IG1vZHVsZV9pbmZvICpxaV9taW5mbzsJIAoJc3RydWN0IG1vZHVsZV9z dGF0ICpxaV9tc3RhdDsJIAoJaW50CSgqcWlfcndwKSgpOwkJIAoJaW50CSgqcWlfaW5mb3ApKCk7 CQkgCglpbnQJcWlfc3RydWlvdDsJCSAKfTsKCiAKCgoKCgoKCiAKCgoKc3RydWN0IHN0cmVhbXRh YiB7CglzdHJ1Y3QgcWluaXQgKnN0X3JkaW5pdDsKCXN0cnVjdCBxaW5pdCAqc3Rfd3Jpbml0OwoJ c3RydWN0IHFpbml0ICpzdF9tdXhyaW5pdDsKCXN0cnVjdCBxaW5pdCAqc3RfbXV4d2luaXQ7Cn07 CgogCgoKCnN0cnVjdCBsaW5rYmxrIHsKCXF1ZXVlX3QgKmxfcXRvcDsJIAoJCQkJIAoJcXVldWVf dCAqbF9xYm90OwkgCglpbnQJbF9pbmRleDsJIAp9OwoKIAoKCnR5cGVkZWYgc3RydWN0IGZyZWVf cnRuIHsKCXZvaWQJKCpmcmVlX2Z1bmMpKCk7CgljYWRkcl90CWZyZWVfYXJnOwp9IGZydG5fdDsK CiAKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBkYXRhYiB7CglmcnRuX3QJCSpkYl9mcnRucDsKCXVu c2lnbmVkIGNoYXIJKmRiX2Jhc2U7Cgl1bnNpZ25lZCBjaGFyCSpkYl9saW07Cgl1bnNpZ25lZCBj aGFyCWRiX3JlZjsKCXVuc2lnbmVkIGNoYXIJZGJfdHlwZTsKCXVuc2lnbmVkIGNoYXIJZGJfZmxh Z3M7Cgl1bnNpZ25lZCBjaGFyCWRiX3N0cnVpb2ZsYWc7Cgl2b2lkCQkqZGJfY2FjaGU7CSAKCXN0 cnVjdCBtc2diCSpkYl9tYmxrOwoJdm9pZAkJKCpkYl9mcmVlKShzdHJ1Y3QgbXNnYiAqLCBzdHJ1 Y3QgZGF0YWIgKik7Cgl2b2lkCQkoKmRiX2xhc3RmcmVlKShzdHJ1Y3QgbXNnYiAqLCBzdHJ1Y3Qg ZGF0YWIgKik7CgoJdm9pZAkJKmRiX3BhZDsJIAoKCXVuc2lnbmVkIGNoYXIJKmRiX3N0cnVpb2Jh c2U7Cgl1bnNpZ25lZCBjaGFyCSpkYl9zdHJ1aW9saW07Cgl1bnNpZ25lZCBjaGFyCSpkYl9zdHJ1 aW9wdHI7Cgl1bmlvbiB7CgkJZG91YmxlIGVuZm9yY2VfYWxpZ25tZW50OwoJCXVuc2lnbmVkIGNo YXIgZGF0YVs4XTsKCQl1bnNpZ25lZCB1MTY6MTY7CSAKCQkgCgoKCX0gZGJfc3RydWlvdW47Cglm dGhkcl90CQkqZGJfZnRoZHI7CglmdGZsd190CQkqKipkYl9mdGZsdzsKCXVpZF90CQlkYl91aWQ7 CQkgCgkgCgl1aWRfdAkJZGJfbGlkOwp9IGRibGtfdDsKCiAKCgp0eXBlZGVmIHN0cnVjdAltc2di IHsKCXN0cnVjdAltc2diCSpiX25leHQ7CglzdHJ1Y3QgIG1zZ2IJKmJfcHJldjsKCXN0cnVjdAlt c2diCSpiX2NvbnQ7Cgl1bnNpZ25lZCBjaGFyCSpiX3JwdHI7Cgl1bnNpZ25lZCBjaGFyCSpiX3dw dHI7CglzdHJ1Y3QgZGF0YWIgCSpiX2RhdGFwOwoJdW5zaWduZWQgY2hhcgliX2JhbmQ7Cgl1bnNp Z25lZCBjaGFyCWJfZnRmbGFnOwkgCgl1bnNpZ25lZCBzaG9ydAliX2ZsYWc7CglxdWV1ZV90CQkq Yl9xdWV1ZTsJIAp9IG1ibGtfdDsKCiAKCgoKdHlwZWRlZglzdHJ1Y3QJYmNhY2hlIHsKCWttdXRl eF90CQltdXRleDsKCXN0cnVjdCBrbWVtX2NhY2hlCSpidWZmZXJfY2FjaGU7CglzdHJ1Y3Qga21l bV9jYWNoZQkqZGJsa19jYWNoZTsKCWludAkJCWFsbG9jOwoJaW50CQkJZGVzdHJveTsKCXNpemVf dAkJCXNpemU7Cgl1aW50X3QJCQlhbGlnbjsKfSBiY2FjaGVfdDsKCiAKCgoKCiAKCgoKCgoKCgog CgoKCgoJCQkJCSAKCgoKCgogCgoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgoKIAoKCgoKCiAKCgojIDQyNiAiL3Vzci9pbmNsdWRlL3N5cy9zdHJlYW0uaCIgMyA0 CgpzdHJ1Y3QgaW9jYmxrIHsKCWludCAJaW9jX2NtZDsJCSAKCWNyZWRfdAkqaW9jX2NyOwkJIAoJ dWludF90CWlvY19pZDsJCQkgCglzaXplX3QJaW9jX2NvdW50OwkJIAoJaW50CWlvY19lcnJvcjsJ CSAKCWludAlpb2NfcnZhbDsJCSAKCWludAlpb2NfZmlsbDE7Cgl1aW50X3QJaW9jX2ZsYWc7CQkg CglpbnQJaW9jX2ZpbGxlclsyXTsJCSAKfTsKCgp0eXBlZGVmCXN0cnVjdCBpb2NibGsJKklPQ1A7 CgoKCgogCgoKCgoKCgogCgoKCgoKIAoKCiMgNDcyICIvdXNyL2luY2x1ZGUvc3lzL3N0cmVhbS5o IiAzIDQKCnN0cnVjdCBjb3B5cmVxIHsKCWludAljcV9jbWQ7CQkJIAoJY3JlZF90CSpjcV9jcjsJ CQkgCgl1aW50X3QJY3FfaWQ7CQkJIAoJY2FkZHJfdAljcV9hZGRyOwkJIAoJc2l6ZV90CWNxX3Np emU7CQkgCgl1aW50X3QJY3FfZmxhZzsJCSAKCW1ibGtfdAkqY3FfcHJpdmF0ZTsJCSAKCWludAlj cV9maWxsZXJbNF07CQkgCn07CgoKCgoKIAoKCgkJCQkJIAoKCQkJCQkgCgkJCQkJIAoKIAoKCiMg NTA5ICIvdXNyL2luY2x1ZGUvc3lzL3N0cmVhbS5oIiAzIDQKCnN0cnVjdCBjb3B5cmVzcCB7Cglp bnQJY3BfY21kOwkJCSAKCWNyZWRfdAkqY3BfY3I7CQkJIAoJdWludF90CWNwX2lkOwkJCSAKCWNh ZGRyX3QJY3BfcnZhbDsJCSAKCQkJCQkgCglzaXplX3QJY3BfcGFkMTsKCXVpbnRfdAljcF9wYWQy OwoJbWJsa190ICpjcF9wcml2YXRlOwkJIAoJdWludF90CWNwX2ZsYWc7CQkgCglpbnQJY3BfZmls bGVyWzNdOwp9OwoKCgoKCiAKCgoKCnVuaW9uIGlvY3R5cGVzIHsKCXN0cnVjdCBpb2NibGsJaW9j YmxrOwoJc3RydWN0IGNvcHlyZXEJY29weXJlcTsKCXN0cnVjdCBjb3B5cmVzcAljb3B5cmVzcDsK fTsKCiAKCgoKCnN0cnVjdCBzdHJvcHRpb25zIHsKCXVpbnRfdAlzb19mbGFnczsJCSAKCXNob3J0 CXNvX3JlYWRvcHQ7CQkgCgl1c2hvcnRfdCBzb193cm9mZjsJCSAKCXNzaXplX3QJc29fbWlucHN6 OwkJIAoJc3NpemVfdAlzb19tYXhwc3o7CQkgCglzaXplX3QJc29faGl3YXQ7CQkgCglzaXplX3QJ c29fbG93YXQ7CQkgCgl1bnNpZ25lZCBjaGFyIHNvX2JhbmQ7CQkgCgl1c2hvcnRfdCBzb19lcnJv cHQ7CQkgCglzc2l6ZV90CXNvX21heGJsazsJCSAKCXVzaG9ydF90IHNvX2NvcHlvcHQ7CQkgCn07 CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNjE2ICIvdXNyL2luY2x1ZGUvc3lzL3N0cmVh bS5oIiAzIDQKCgogCgoKCiAKCgoKCgoKIAoKCgoKCgoKCiAKCgoKCgoKCQkJCQkgCgogCgoKCgog CgoKCgoKIAoKCgoKIAoKCgoKCiAKCgoKCiAKCgoKCgogCgoKCiAKCgoKCiAKCgoKCgoKIAoKCgoK CgoKCgogCgoKCgogCgoKCgogCgoKCgogCgoKCiMgODAzICIvdXNyL2luY2x1ZGUvc3lzL3N0cmVh bS5oIiAzIDQKCgogCgoKZXh0ZXJuIGludCBuc3RycHVzaDsJCQkgCgoKfQoKCgojIDQxICIvdXNy L2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMgNAoKCiAKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5 cy9ieXRlb3JkZXIuaCIgMSAzIDQKIAogCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWJ5 dGVvcmRlci5oCTEuMTQJOTgvMDQvMTkgU01JIgkKCgoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoK CgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCgoKIyA3NCAiL3Vzci9pbmNsdWRlL3N5cy9ieXRlb3Jk ZXIuaCIgMyA0CgoKCn0KCgoKIyA0OCAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaCIgMiAzIDQK CgoKCgp0eXBlZGVmCXVpbnQxNl90CWluX3BvcnRfdDsKCgogCgoKCgoKCgoKCgoKCnR5cGVkZWYJ dWludDMyX3QJaW5fYWRkcl90OwoKCgoKdHlwZWRlZiB1aW50MzJfdCBpcGFkZHJfdDsKCgoKCnN0 cnVjdCBpbjZfYWRkciB7Cgl1bmlvbiB7CgkJIAoKCgoKCgoKCgoKCgoKCgkJdWludDhfdAkJX1M2 X3U4WzE2XTsJIAoJCXVpbnQzMl90CV9TNl91MzJbNF07CSAKCgkJdWludDMyX3QJX19TNl9hbGln bjsJIAoJfSBfUzZfdW47Cn07CgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBpbjZfYWRkciBpbjZfYWRk cl90OwoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoK CgoKCgogCgoKCgoKCgoKCgogCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKCgogCgoKCgoKCiAKCgoK CgoKCgoKCgoKCgpzdHJ1Y3QgaW5fYWRkciB7Cgl1bmlvbiB7CgkJc3RydWN0IHsgdWludDhfdCBz X2IxLCBzX2IyLCBzX2IzLCBzX2I0OyB9IFNfdW5fYiA7CgkJc3RydWN0IHsgdWludDE2X3Qgc193 MSwgc193MjsgfSBTX3VuX3cgOwoKCQl1aW50MzJfdCBTX2FkZHIgOwoKCgoJfSBTX3VuIDsKCgoK CgoKfTsKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoK CgoKIAoKCnN0cnVjdCBzb2NrYWRkcl9pbiB7CglzYV9mYW1pbHlfdAlzaW5fZmFtaWx5OwoJaW5f cG9ydF90CXNpbl9wb3J0OwoJc3RydWN0CWluX2FkZHIgc2luX2FkZHI7CgoJY2hhcgkJc2luX3pl cm9bOF07CgoKCn07CgoKIAoKCnN0cnVjdCBzb2NrYWRkcl9pbjYgewoJc2FfZmFtaWx5X3QJc2lu Nl9mYW1pbHk7Cglpbl9wb3J0X3QJc2luNl9wb3J0OwoJdWludDMyX3QJc2luNl9mbG93aW5mbzsK CXN0cnVjdCBpbjZfYWRkcglzaW42X2FkZHI7Cgl1aW50MzJfdAlzaW42X3Njb3BlX2lkOyAgIAoJ dWludDMyX3QJX19zaW42X3NyY19pZDsJIAp9OwoKIAoKCgoKCgogCgoKCgoKCgoKCgoKIAoKCgoK CgoKCgoKIyAzNTcgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMgNAoKCgoKCgoKCgoKCgoK IAoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK CgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKIyA2MDcgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMgNAoKCiAKCgoKCgoKCgoK CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAK CgoKCgp0eXBlZGVmIHN0cnVjdCBpcHNlY19yZXEgewoJdWludF90IAkJaXBzcl9haF9yZXE7CQkg Cgl1aW50X3QgCQlpcHNyX2VzcF9yZXE7CQkgCgl1aW50X3QJCWlwc3Jfc2VsZl9lbmNhcF9yZXE7 CSAKCXVpbnQ4X3QJCWlwc3JfYXV0aF9hbGc7CQkgCgl1aW50OF90CQlpcHNyX2VzcF9hbGc7CQkg Cgl1aW50OF90CQlpcHNyX2VzcF9hdXRoX2FsZzsJIAp9IGlwc2VjX3JlcV90OwoKCiAKCgoKCgog CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgogCgoKc3RydWN0IGlwX21y ZXEgewoJc3RydWN0IGluX2FkZHIJaW1yX211bHRpYWRkcjsJIAoJc3RydWN0IGluX2FkZHIJaW1y X2ludGVyZmFjZTsJIAp9OwoKIAoKCgpzdHJ1Y3QgaXB2Nl9tcmVxIHsKCXN0cnVjdCBpbjZfYWRk cglpcHY2bXJfbXVsdGlhZGRyOwkgCgl1bnNpZ25lZCBpbnQJaXB2Nm1yX2ludGVyZmFjZTsJIAp9 OwoKIAoKCnN0cnVjdCBpbjZfcGt0aW5mbyB7CglzdHJ1Y3QgaW42X2FkZHIJCWlwaTZfYWRkcjsJ IAoJdW5zaWduZWQgaW50CQlpcGk2X2lmaW5kZXg7CSAKfTsKCiAKCgoKCgoKIAoKCgoKdHlwZWRl ZiBzdHJ1Y3QgewoJc3RydWN0IGluX2FkZHIJaW5fcHJlZml4X2FkZHI7Cgl1bnNpZ25lZCBpbnQJ aW5fcHJlZml4X2xlbjsKfSBpbl9wcmVmaXhfdDsKCgoKIAoKCgoJCQkJCSAKCQkJCQkgCgoJCQkJ CSAKCQkJCQkgCgoJCQkJCSAKCQkJCQkgCgoJCQkJCSAKCQkJCQkgCgoJCQkJCSAKCgkJCQkJIAog CgoKCgoKCQkJCQkgCgoJCQkJCSAKCgoJCQkJCSAKCgoKCgkJCQkJIAoKCgkJCQkJIAoKCgoKCgoK CgogCgoKCgoJCQkJCSAKCgkJCQkJIAoKIAoKCgoJCQkJCSAKCgkJCQkJIAoKCgoKIAoKCgoKZXh0 ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2FueTsKZXh0ZXJuIGNvbnN0IHN0cnVj dCBpbjZfYWRkciBpbjZhZGRyX2xvb3BiYWNrOwoKCgoKfQoKCgojIDIwMCAiL3Vzci9pbmNsdWRl L3N5cy9zb2NrZXQuaCIgMiAzIDQKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy91bi5oIiAxIDMgNAog CiAKCiAKIAogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMp dW4uaAkxLjkJOTYvMDcvMTIgU01JIgkKCgpleHRlcm4gIkMiIHsKCgoKCgoKCiAKCgpzdHJ1Y3QJ c29ja2FkZHJfdW4gewoJc2FfZmFtaWx5X3QJc3VuX2ZhbWlseTsJCSAKCWNoYXIJCXN1bl9wYXRo WzEwOF07CQkgCn07CgoKCgoKCn0KCgoKIyAyMDEgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0Lmgi IDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9uZXQvaWZfZGwuaCIgMSAzIDQKIAoKCgogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKWlmX2RsLmgJ MS43CTk4LzAxLzA2IFNNSSIKIAoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgoKCgoKCgoKCgog CgoKc3RydWN0IHNvY2thZGRyX2RsIHsKCXVzaG9ydF90IHNkbF9mYW1pbHk7CSAKCXVzaG9ydF90 IHNkbF9pbmRleDsJIAoJdWNoYXJfdAlzZGxfdHlwZTsJIAoJdWNoYXJfdAlzZGxfbmxlbjsJIAoJ dWNoYXJfdAlzZGxfYWxlbjsJIAoJdWNoYXJfdAlzZGxfc2xlbjsJIAoJY2hhcglzZGxfZGF0YVsy NDRdOwkgCn07CgoKCgp9CgoKCiMgMjAyICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMg NAoKCiAKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCnR5cGVkZWYJZG91YmxlCQlzb2NrYWRkcl9t YXhhbGlnbl90OwoKCgogCgoKCgoKCnN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHsKCXNhX2ZhbWls eV90CXNzX2ZhbWlseTsJIAoJIAoJY2hhcgkJX3NzX3BhZDFbKChzaXplb2YgKHNvY2thZGRyX21h eGFsaWduX3QpKSAgLSBzaXplb2YgKHNhX2ZhbWlseV90KSkgXTsKCXNvY2thZGRyX21heGFsaWdu X3QgX3NzX2FsaWduOwoJY2hhcgkJX3NzX3BhZDJbKDI1NiAgLSAoc2l6ZW9mIChzYV9mYW1pbHlf dCkrICgoc2l6ZW9mIChzb2NrYWRkcl9tYXhhbGlnbl90KSkgIC0gc2l6ZW9mIChzYV9mYW1pbHlf dCkpICArIChzaXplb2YgKHNvY2thZGRyX21heGFsaWduX3QpKSApKSBdOwp9OwoKCiAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiAKCgpzdHJ1Y3QgbXNnaGRyIHsKCXZv aWQJCSptc2dfbmFtZTsJCSAKCXNvY2tsZW5fdAltc2dfbmFtZWxlbjsJCSAKCXN0cnVjdCBpb3Zl YwkqbXNnX2lvdjsJCSAKCWludAkJbXNnX2lvdmxlbjsJCSAKCgoKCgoKCWNhZGRyX3QJCW1zZ19h Y2NyaWdodHM7CSAKCWludAkJbXNnX2FjY3JpZ2h0c2xlbjsKCn07CgojIDM0OSAiL3Vzci9pbmNs dWRlL3N5cy9zb2NrZXQuaCIgMyA0CgoKCgoKIAoKCgoKIAoKCgoKCiAKCgoKCnN0cnVjdCBjbXNn aGRyIHsKCXNvY2tsZW5fdAljbXNnX2xlbjsJIAoJaW50CQljbXNnX2xldmVsOwkgCglpbnQJCWNt c2dfdHlwZTsJIAp9OwoKIyAzODQgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDMgNAoKCiMg NDA3ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAzIDQKCgojIDQzMCAiL3Vzci9pbmNsdWRl L3N5cy9zb2NrZXQuaCIgMyA0CgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgYWNjZXB0KGludCwgc3Ry dWN0IHNvY2thZGRyICosIFBzb2NrbGVuX3QpOwpleHRlcm4gaW50IGJpbmQoaW50LCBjb25zdCBz dHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90KTsKZXh0ZXJuIGludCBjb25uZWN0KGludCwgY29u c3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCk7CmV4dGVybiBpbnQgZ2V0cGVlcm5hbWUo aW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgUHNvY2tsZW5fdCk7CmV4dGVybiBpbnQgZ2V0c29ja25h bWUoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgUHNvY2tsZW5fdCk7CmV4dGVybiBpbnQgZ2V0c29j a29wdChpbnQsIGludCwgaW50LCB2b2lkICosIFBzb2NrbGVuX3QpOwpleHRlcm4gaW50IGxpc3Rl bihpbnQsIGludCk7CSAKZXh0ZXJuIGludCBzb2NrZXRwYWlyKGludCwgaW50LCBpbnQsIGludCAq KTsKZXh0ZXJuIHNzaXplX3QgcmVjdihpbnQsIHZvaWQgKiwgc2l6ZV90LCBpbnQpOwpleHRlcm4g c3NpemVfdCByZWN2ZnJvbShpbnQsIHZvaWQgKiwgc2l6ZV90LCBpbnQsIHN0cnVjdCBzb2NrYWRk ciAqLAoJUHNvY2tsZW5fdCk7CmV4dGVybiBzc2l6ZV90IHJlY3Ztc2coaW50LCBzdHJ1Y3QgbXNn aGRyICosIGludCk7CmV4dGVybiBzc2l6ZV90IHNlbmQoaW50LCBjb25zdCB2b2lkICosIHNpemVf dCwgaW50KTsKZXh0ZXJuIHNzaXplX3Qgc2VuZG1zZyhpbnQsIGNvbnN0IHN0cnVjdCBtc2doZHIg KiwgaW50KTsKZXh0ZXJuIHNzaXplX3Qgc2VuZHRvKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3Qs IGludCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICosCglzb2NrbGVuX3QpOwpleHRlcm4gaW50IHNl dHNvY2tvcHQoaW50LCBpbnQsIGludCwgY29uc3Qgdm9pZCAqLCBzb2NrbGVuX3QpOwpleHRlcm4g aW50IHNodXRkb3duKGludCwgaW50KTsKZXh0ZXJuIGludCBzb2NrZXQoaW50LCBpbnQsIGludCk7 CiMgNDc5ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAzIDQKCgoKCn0KCgoKIyA3MiAiLi4v U3JjVW5peC9FbUNvbW1vblVuaXguaCIgMgoKCgoKCgp0eXBlZGVmIGludAkJCQlTT0NLRVQ7CgoK CgoKCgoKCgoKCiMgMTEyICIuLi9TcmNTaGFyZWQvRW1Db21tb24uaCIgMgoKCgoKCgoKdXNpbmcg bmFtZXNwYWNlIHN0ZDsKCiAKCiMgMSAiLi4vU3JjU2hhcmVkL0VtQXNzZXJ0LmgiIDEKIAogCgoK CgoKCgoKCgoKCgoKCmV4dGVybiAiQyIKCnZvaWQgTXlBc3NlcnRGYWlsZWQgKAoJY29uc3QgY2hh ciogYXNzZXJ0aW9uLAoJY29uc3QgY2hhciogZmlsZSwKCXVuc2lnbmVkIGludCBsaW5lKTsKCiAK IAogCiAKCgoKCgoKCgoJCgoKCgoKCgoKIyAxMjMgIi4uL1NyY1NoYXJlZC9FbUNvbW1vbi5oIiAy CgoKCiAKCmV4dGVybiBjaGFyIGNoZWNrMQlbc2l6ZW9mKGludDgpID09IDEgPyAxIDogMF07CmV4 dGVybiBjaGFyIGNoZWNrMglbc2l6ZW9mKGludDE2KSA9PSAyID8gMSA6IDBdOwpleHRlcm4gY2hh ciBjaGVjazMJW3NpemVvZihpbnQzMikgPT0gNCA/IDEgOiAwXTsKZXh0ZXJuIGNoYXIgY2hlY2s0 CVtzaXplb2YoaW50NjQpID09IDggPyAxIDogMF07CgpleHRlcm4gY2hhciBjaGVjazUJW3NpemVv Zih1aW50OCkgPT0gMSA/IDEgOiAwXTsKZXh0ZXJuIGNoYXIgY2hlY2s2CVtzaXplb2YodWludDE2 KSA9PSAyID8gMSA6IDBdOwpleHRlcm4gY2hhciBjaGVjazcJW3NpemVvZih1aW50MzIpID09IDQg PyAxIDogMF07CmV4dGVybiBjaGFyIGNoZWNrOAlbc2l6ZW9mKHVpbnQ2NCkgPT0gOCA/IDEgOiAw XTsKCmV4dGVybiBjaGFyIGNoZWNrOQlbc2l6ZW9mKGVtdXB0cikgPT0gNCA/IDEgOiAwXTsKCgoK IyAxNCAiLi8uLi9TcmNTaGFyZWQvTWV0YU1lbW9yeS5jcHAiIDIKCiMgMSAiLi4vU3JjU2hhcmVk L01ldGFNZW1vcnkuaCIgMQogCiAKCgoKCgoKCgoKCgoKCgojIDEgIi4uL1NyY1NoYXJlZC9IYXJk d2FyZS9FbU1lbW9yeS5oIiAxCiAKIAoKCgoKCgoKCgoKCgoKCiAKIAogCiAKCgoKCgojIDEgIi4u L1NyY1NoYXJlZC9VQUUvc3lzY29uZmlnLmgiIDEKCgoKCQkJCQkJIAoKCgoKCgkKCgoKCgoKIyAx ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCgoKCiNwcmFn bWEgaWRlbnQJIkAoIylzdHJpbmcuaAkxLjI0CTk5LzA4LzEwIFNNSSIJCgojIDEgIi91c3IvaW5j bHVkZS9pc28vc3RyaW5nX2lzby5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgogCgoKCgoKCgoK CgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXN0cmluZ19pc28uaAkxLjIJOTkvMTEvMDkgU01JIgog CgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiBpbnQgbWVt Y21wKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCAqbWVt Y3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCAqbWVtbW92ZSh2 b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKZXh0ZXJuIHZvaWQgKm1lbXNldCh2b2lkICos IGludCwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnN0cmNhdChjaGFyICosIGNvbnN0IGNoYXIgKik7 CmV4dGVybiBpbnQgc3RyY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNo YXIgKnN0cmNweShjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgc3RyY29sbChjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBzaXplX3Qgc3RyY3Nwbihjb25zdCBjaGFy ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpzdHJlcnJvcihpbnQpOwpleHRlcm4gc2l6 ZV90IHN0cmxlbihjb25zdCBjaGFyICopOwpleHRlcm4gY2hhciAqc3RybmNhdChjaGFyICosIGNv bnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBzdHJuY21wKGNvbnN0IGNoYXIgKiwgY29u c3QgY2hhciAqLCBzaXplX3QpOwpleHRlcm4gY2hhciAqc3RybmNweShjaGFyICosIGNvbnN0IGNo YXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHNpemVfdCBzdHJzcG4oY29uc3QgY2hhciAqLCBjb25zdCBj aGFyICopOwpleHRlcm4gY2hhciAqc3RydG9rKGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJu IHNpemVfdCBzdHJ4ZnJtKGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwojIDExMSAiL3Vz ci9pbmNsdWRlL2lzby9zdHJpbmdfaXNvLmgiIDMgNAoKZXh0ZXJuIHZvaWQgKm1lbWNocihjb25z dCB2b2lkICosIGludCwgc2l6ZV90KTsKZXh0ZXJuIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICos IGludCk7CmV4dGVybiBjaGFyICpzdHJwYnJrKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsK ZXh0ZXJuIGNoYXIgKnN0cnJjaHIoY29uc3QgY2hhciAqLCBpbnQpOwpleHRlcm4gY2hhciAqc3Ry c3RyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKCgojIDE0NCAiL3Vzci9pbmNsdWRlL2lz by9zdHJpbmdfaXNvLmgiIDMgNAoKCgoKCgoKfQoKCgojIDE4ICIvdXNyL2luY2x1ZGUvc3RyaW5n LmgiIDIgMyA0CgoKIAoKCgojIDQ4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNAoKCgpleHRl cm4gIkMiIHsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnRva19yKGNoYXIgKiwgY29uc3QgY2hhciAq LCBjaGFyICoqKTsKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAq LCBpbnQsIHNpemVfdCk7CgoKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsKGludCk7CmV4dGVybiBp bnQgZmZzKGludCk7CmV4dGVybiBpbnQgc3RyY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKik7CmV4dGVybiBpbnQgc3RybmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICos IHNpemVfdCk7CmV4dGVybiBzaXplX3Qgc3RybGNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6 ZV90KTsKZXh0ZXJuIHNpemVfdCBzdHJsY2F0KGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3Qp OwoKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAoY29uc3QgY2hhciAqKTsKCgojIDExMCAiL3Vzci9p bmNsdWRlL3N0cmluZy5oIiAzIDQKCgoKfQoKCgojIDE3ICIuLi9TcmNTaGFyZWQvVUFFL3N5c2Nv bmZpZy5oIiAyCgoKCgoKCgoKCgoKCQoKCgoKCiMgMjYgIi4uL1NyY1NoYXJlZC9IYXJkd2FyZS9F bU1lbW9yeS5oIiAyCgoKCmV4dGVybiAiQyIgewoKCiAKIAogCgp0eXBlZGVmIHVpbnQzMgkoKkVt TWVtR2V0RnVuYykJCQkJKGVtdXB0cik7CnR5cGVkZWYgdm9pZAkoKkVtTWVtUHV0RnVuYykJCQkJ KGVtdXB0ciwgdWludDMyKTsKdHlwZWRlZiB1aW50OCoJKCpFbU1lbVRyYW5zbGF0ZUZ1bmMpCQko ZW11cHRyKTsKdHlwZWRlZiBpbnQJCSgqRW1NZW1DaGVja0Z1bmMpCQkJKGVtdXB0ciwgdWludDMy KTsKdHlwZWRlZiB2b2lkCSgqRW1NZW1DeWNsZUZ1bmMpCQkJKHZvaWQpOwp0eXBlZGVmIHVpbnQ4 KgkoKkVtTWVtVHJhbnNsYXRlTWV0YUZ1bmMpCShlbXVwdHIpOwoKdHlwZWRlZiBzdHJ1Y3QgRW1B ZGRyZXNzQmFuawp7CgkgCglFbU1lbUdldEZ1bmMJCQlsZ2V0LCB3Z2V0LCBiZ2V0OwoJRW1NZW1Q dXRGdW5jCQkJbHB1dCwgd3B1dCwgYnB1dDsKCgkgCgoKCglFbU1lbVRyYW5zbGF0ZUZ1bmMJCXhs YXRlYWRkcjsKCgkgCgoKCglFbU1lbUNoZWNrRnVuYwkJCWNoZWNrYWRkcjsKCglFbU1lbVRyYW5z bGF0ZU1ldGFGdW5jCXhsYXRlbWV0YWFkZHI7CglFbU1lbUN5Y2xlRnVuYwkJCUVtTWVtQWRkT3Bj b2RlQ3ljbGVzOwp9IEVtQWRkcmVzc0Jhbms7CgoKCgoJZXh0ZXJuIEVtQWRkcmVzc0JhbmsqCWdF bU1lbUJhbmtzWzY1NTM2XTsKCgoKCgoKCgogCiAKIAoKCgoJCgoJCgkKCgoKCgoKCgoKCgoKCgog CiAKIAoKc3RhdGljIGlubGluZSAgIHVpbnQzMiBFbU1lbUdldDMyKGVtdXB0ciBhZGRyKQp7CiAg ICByZXR1cm4gKCgqICgqZ0VtTWVtQmFua3NbKCgoZW11cHRyKSggICAgYWRkciAgICkpID4+IDE2 KSBdKSAuIGxnZXQgKSggIGFkZHIgKSkgOwp9CgogCiAKIAoKc3RhdGljIGlubGluZSAgIHVpbnQz MiBFbU1lbUdldDE2KGVtdXB0ciBhZGRyKQp7CiAgICByZXR1cm4gKCgqICgqZ0VtTWVtQmFua3Nb KCgoZW11cHRyKSggICAgYWRkciAgICkpID4+IDE2KSBdKSAuIHdnZXQgKSggIGFkZHIgKSkgOwp9 CgogCiAKIAoKc3RhdGljIGlubGluZSAgIHVpbnQzMiBFbU1lbUdldDgoZW11cHRyIGFkZHIpCnsK ICAgIHJldHVybiAoKCogKCpnRW1NZW1CYW5rc1soKChlbXVwdHIpKCAgICBhZGRyICAgKSkgPj4g MTYpIF0pIC4gYmdldCApKCAgYWRkciApKSA7Cn0KCiAKIAogCgpzdGF0aWMgaW5saW5lICAgdm9p ZCBFbU1lbVB1dDMyKGVtdXB0ciBhZGRyLCB1aW50MzIgbCkKewogICAgKCgqICgqZ0VtTWVtQmFu a3NbKCgoZW11cHRyKSggICAgYWRkciAgICkpID4+IDE2KSBdKSAuIGxwdXQgKSggIGFkZHIgLCAg IGwgKSkgOwp9CgogCiAKIAoKc3RhdGljIGlubGluZSAgIHZvaWQgRW1NZW1QdXQxNihlbXVwdHIg YWRkciwgdWludDMyIHcpCnsKICAgICgoKiAoKmdFbU1lbUJhbmtzWygoKGVtdXB0cikoICAgIGFk ZHIgICApKSA+PiAxNikgXSkgLiB3cHV0ICkoICBhZGRyICwgICB3ICkpIDsKfQoKIAogCiAKCnN0 YXRpYyBpbmxpbmUgICB2b2lkIEVtTWVtUHV0OChlbXVwdHIgYWRkciwgdWludDMyIGIpCnsKICAg ICgoKiAoKmdFbU1lbUJhbmtzWygoKGVtdXB0cikoICAgIGFkZHIgICApKSA+PiAxNikgXSkgLiBi cHV0ICkoICBhZGRyICwgICBiICkpIDsKfQoKIAogCiAKCnN0YXRpYyBpbmxpbmUgICB1aW50OCog RW1NZW1HZXRSZWFsQWRkcmVzcyhlbXVwdHIgYWRkcikKewogICAgcmV0dXJuICgqZ0VtTWVtQmFu a3NbKCgoZW11cHRyKSggIGFkZHIgICkpID4+IDE2KSBdKSAueGxhdGVhZGRyKGFkZHIpOwp9Cgog CiAKIAoKc3RhdGljIGlubGluZSAgIGludCBFbU1lbUNoZWNrQWRkcmVzcyhlbXVwdHIgYWRkciwg dWludDMyIHNpemUpCnsKICAgIHJldHVybiAoKmdFbU1lbUJhbmtzWygoKGVtdXB0cikoICBhZGRy ICApKSA+PiAxNikgXSkgLmNoZWNrYWRkcihhZGRyLCBzaXplKTsKfQoKIAogCiAKCnN0YXRpYyBp bmxpbmUgICB2b2lkIEVtTWVtQWRkT3Bjb2RlQ3ljbGVzKGVtdXB0ciBhZGRyKQp7CgkoKHZvaWQp IDApIDsKICAgICgqZ0VtTWVtQmFua3NbKCgoZW11cHRyKSggIGFkZHIgICkpID4+IDE2KSBdKSAu RW1NZW1BZGRPcGNvZGVDeWNsZXMoKTsKfQoKIAogCiAKCnN0YXRpYyBpbmxpbmUgICB1aW50OCog RW1NZW1HZXRNZXRhQWRkcmVzcyhlbXVwdHIgYWRkcikKewoJKCh2b2lkKSAwKSA7CiAgICByZXR1 cm4gKCpnRW1NZW1CYW5rc1soKChlbXVwdHIpKCAgYWRkciAgKSkgPj4gMTYpIF0pIC54bGF0ZW1l dGFhZGRyKGFkZHIpOwp9CgogCiAKIAoKc3RhdGljIGlubGluZSAgIHVpbnQzMiBFbU1lbURvR2V0 MzIgKHZvaWQqIGEpCnsKCglyZXR1cm4JKCgodWludDMyKSAqKCgodWludDE2KikgYSkgKyAwKSkg PDwgMTYpIHwKCQkJKCgodWludDMyKSAqKCgodWludDE2KikgYSkgKyAxKSkpOwoKCgp9CgogCiAK IAoKc3RhdGljIGlubGluZSAgIHVpbnQxNiBFbU1lbURvR2V0MTYgKHZvaWQqIGEpCnsKCXJldHVy biAqKHVpbnQxNiopIGE7Cn0KCiAKIAogCgpzdGF0aWMgaW5saW5lICAgdWludDggRW1NZW1Eb0dl dDggKHZvaWQqIGEpCnsKCgoKCXJldHVybiAqKHVpbnQ4KikgYTsKCn0KCiAKIAogCgpzdGF0aWMg aW5saW5lICAgdm9pZCBFbU1lbURvUHV0MzIgKHZvaWQqIGEsIHVpbnQzMiB2KQp7CgoJKigoKHVp bnQxNiopIGEpICsgMCkgPSAodWludDE2KSAodiA+PiAxNik7CgkqKCgodWludDE2KikgYSkgKyAx KSA9ICh1aW50MTYpICh2KTsKCgoKfQoKIAogCiAKCnN0YXRpYyBpbmxpbmUgICB2b2lkIEVtTWVt RG9QdXQxNiAodm9pZCogYSwgdWludDE2IHYpCnsKCSoodWludDE2KikgYSA9IHY7Cn0KCiAKIAog CgpzdGF0aWMgaW5saW5lICAgdm9pZCBFbU1lbURvUHV0OCAodm9pZCogYSwgdWludDggdikKewoK CgoJKih1aW50OCopIGEgPSB2OwoKfQoKCgp9CgoKCgoKY2xhc3MgRW1TdHJlYW07CgoKIAoKIAog CiAKIAogCgpzdHJ1Y3QgTWVtQWNjZXNzRmxhZ3MKewoJQm9vbAkJCQlmVmFsaWRhdGVfRHVtbXlH ZXQ7CglCb29sCQkJCWZWYWxpZGF0ZV9EdW1teVNldDsKCUJvb2wJCQkJZlZhbGlkYXRlX1JlZ2lz dGVyR2V0OwoJQm9vbAkJCQlmVmFsaWRhdGVfUmVnaXN0ZXJTZXQ7CglCb29sCQkJCWZWYWxpZGF0 ZV9EUkFNR2V0OwoJQm9vbAkJCQlmVmFsaWRhdGVfRFJBTVNldDsKCUJvb2wJCQkJZlZhbGlkYXRl X1NSQU1HZXQ7CglCb29sCQkJCWZWYWxpZGF0ZV9TUkFNU2V0OwoJQm9vbAkJCQlmVmFsaWRhdGVf Uk9NR2V0OwoJQm9vbAkJCQlmVmFsaWRhdGVfUk9NU2V0OwoKIAogCiAKIAogCiAKCUJvb2wJCQkJ ZlByb3RlY3RfU1JBTUdldDsKCUJvb2wJCQkJZlByb3RlY3RfU1JBTVNldDsKCUJvb2wJCQkJZlBy b3RlY3RfUk9NR2V0OwoJQm9vbAkJCQlmUHJvdGVjdF9ST01TZXQ7CglCb29sCQkJCWZQcm90ZWN0 X1JlZ2lzdGVyR2V0OwoJQm9vbAkJCQlmUHJvdGVjdF9SZWdpc3RlclNldDsKCiAKIAogCiAKCiAK IAogCiAKIAogCiAKIAoJQm9vbAkJCQlmUHJvdGVjdF9TeXNST01HZXQ7CglCb29sCQkJCWZQcm90 ZWN0X1N5c1JPTVNldDsKIAogCn07CgoKIAoKZXh0ZXJuIE1lbUFjY2Vzc0ZsYWdzCWdNZW1BY2Nl c3NGbGFnczsKZXh0ZXJuIEJvb2wJCQkJZ1BDSW5SQU07CmV4dGVybiBCb29sCQkJCWdQQ0luUk9N OwoKIyAzNTQgIi4uL1NyY1NoYXJlZC9IYXJkd2FyZS9FbU1lbW9yeS5oIgoKCnN0cnVjdCBFbUFk ZHJlc3NCYW5rOwpjbGFzcyBTZXNzaW9uRmlsZTsKCiAKCmNsYXNzIE1lbW9yeQp7CglwdWJsaWM6 CgkJc3RhdGljIHZvaWQJCQkJSW5pdGlhbGl6ZQkJCShFbVN0cmVhbSYgaFJPTSwKCQkJCQkJCQkJ CQkJCSBSQU1TaXplVHlwZSByYW1TaXplKTsKCQlzdGF0aWMgdm9pZAkJCQlSZXNldAkJCQkoQm9v bCBoYXJkd2FyZVJlc2V0KTsKCQlzdGF0aWMgdm9pZAkJCQlTYXZlCQkJCShTZXNzaW9uRmlsZSYp OwoJCXN0YXRpYyB2b2lkCQkJCUxvYWQJCQkJKFNlc3Npb25GaWxlJik7CgkJc3RhdGljIHZvaWQJ CQkJRGlzcG9zZQkJCQkodm9pZCk7CgoJCXN0YXRpYyB2b2lkCQkJCUluaXRpYWxpemVCYW5rcwkJ KEVtQWRkcmVzc0JhbmsmIGlCYW5rSW5pdGlhbGl6ZXIsCgkJCQkJCQkJCQkJCQkgaW50MzIgaVN0 YXJ0aW5nQmFua0luZGV4LAoJCQkJCQkJCQkJCQkJIGludDMyIGlOdW1iZXJPZkJhbmtzKTsKCgkJ c3RhdGljIHZvaWQJCQkJUmVzZXRCYW5rSGFuZGxlcnMJKHZvaWQpOwoKCQlzdGF0aWMgdm9pZAkJ CQlNYXBQaHlzaWNhbE1lbW9yeQkoY29uc3Qgdm9pZCosIHVpbnQzMik7CgkJc3RhdGljIHZvaWQJ CQkJVW5tYXBQaHlzaWNhbE1lbW9yeQkoY29uc3Qgdm9pZCopOwoJCXN0YXRpYyB2b2lkCQkJCUdl dE1hcHBpbmdJbmZvCQkoZW11cHRyLCB2b2lkKiosIHVpbnQzMiopOwoKCQlzdGF0aWMgdm9pZAkJ CQlDaGVja05ld1BDCQkJKGVtdXB0ciBuZXdQQyk7CgkJc3RhdGljIGludAkJCQlJc1BDSW5SQU0J CQkodm9pZCkgeyByZXR1cm4gZ1BDSW5SQU07IH0KCQlzdGF0aWMgaW50CQkJCUlzUENJblJPTQkJ CSh2b2lkKSB7IHJldHVybiBnUENJblJPTTsgfQp9OwoKdHlwZWRlZiBNZW1vcnkgRW1NZW1vcnk7 CgoKIAogCiAKIAogCiAKIAogCiAKIAoKY2xhc3MgQ0VuYWJsZUZ1bGxBY2Nlc3MKewoJcHVibGlj OgoJCQkJCQkJCUNFbmFibGVGdWxsQWNjZXNzICh2b2lkKTsKCQkJCQkJCQl+Q0VuYWJsZUZ1bGxB Y2Nlc3MgKHZvaWQpOwoKCQlzdGF0aWMgQm9vbAkJCQlBY2Nlc3NPSyAodm9pZCk7CgoJcHJpdmF0 ZToKCQlNZW1BY2Nlc3NGbGFncwkJCWZPbGRNZW1BY2Nlc3NGbGFnczsKCgoKCgoJCXN0YXRpYyBs b25nCQkJCWZnQWNjZXNzQ291bnQ7Cn07CgoKIAogCgplbXVwdHIJRW1NZW1fbWVtc2V0KGVtdXB0 ciBkc3QsIGludCB2YWwsIHNpemVfdCBsZW4pOwoKZW11cHRyCUVtTWVtX21lbWNocihlbXVwdHIg c3JjLCBpbnQgdmFsLCBzaXplX3QgbGVuKTsKCnRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+ CmludAkJRW1NZW1fbWVtY21wKFQxIHNyYzEsIFQyIHNyYzIsIHNpemVfdCBsZW4pOwoKdGVtcGxh dGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KVDEJCUVtTWVtX21lbWNweSAoVDEgZHN0LCBUMiBzcmMs IHNpemVfdCBsZW4pOwoKdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KVDEJCUVtTWVtX21l bW1vdmUgKFQxIGRzdCwgVDIgc3JjLCBzaXplX3QgbGVuKTsKCnNpemVfdAlFbU1lbV9zdHJsZW4o ZW11cHRyIHN0cik7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPgpUMQkJRW1NZW1fc3Ry Y3B5KFQxIGRzdCwgVDIgc3JjKTsKCnRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+ClQxCQlF bU1lbV9zdHJuY3B5KFQxIGRzdCwgVDIgc3JjLCBzaXplX3QgbGVuKTsKCnRlbXBsYXRlIDxjbGFz cyBUMSwgY2xhc3MgVDI+ClQxCQlFbU1lbV9zdHJjYXQoVDEgZHN0LCBUMiBzcmMpOwoKdGVtcGxh dGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KVDEJCUVtTWVtX3N0cm5jYXQoVDEgZHN0LCBUMiBzcmMs IHNpemVfdCBsZW4pOwoKdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KaW50CQlFbU1lbV9z dHJjbXAoVDEgZHN0LCBUMiBzcmMpOwoKdGVtcGxhdGUgPGNsYXNzIFQxLCBjbGFzcyBUMj4KaW50 CQlFbU1lbV9zdHJuY21wKFQxIGRzdCwgVDIgc3JjLCBzaXplX3QgbGVuKTsKCgoKCiMgMTcgIi4u L1NyY1NoYXJlZC9NZXRhTWVtb3J5LmgiIDIKCiMgMSAiLi4vU3JjU2hhcmVkL0VtUGFsbUhlYXAu aCIgMQogCiAKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdmVjdG9yIiAx IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z L3N0bF9hbGdvYmFzZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMv Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDEgMwogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCiAKIAog CiAKIAogCiAKIAogCiAKIAoKCiAKCiAKIAogCiAKIAogCiAKCgoKCgoKCgojIDE0OCAiL3Vzci9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9zcGFyYy1zdW4tc29s YXJpczIuOC9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMgNAogIAoKCgoKCgoKCgp0eXBlZGVmICAg ICAgICAgIGludCAgIF9HX2ludDhfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1FJX18pKSk7 CnR5cGVkZWYgdW5zaWduZWQgaW50ICBfR191aW50OF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9f KF9fUUlfXykpKTsKdHlwZWRlZiAgICAgICAgICBpbnQgIF9HX2ludDE2X3QgX19hdHRyaWJ1dGVf XygoX19tb2RlX18oX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBf X2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0hJX18pKSk7CnR5cGVkZWYgICAgICAgICAgaW50ICBf R19pbnQzMl90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNp Z25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOwp0 eXBlZGVmICAgICAgICAgIGludCAgX0dfaW50NjRfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhf X0RJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQ2NF90IF9fYXR0cmlidXRlX18o KF9fbW9kZV9fKF9fRElfXykpKTsKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgX0df bGxvbmc7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgX0dfdWxsb25n OwoKCgoKCgoKCnR5cGVkZWYgbG9uZyBfR19jbG9ja190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg X0dfZGV2X3Q7CnR5cGVkZWYgbG9uZyBfR19mcG9zX3Q7CnR5cGVkZWYgbG9uZyBfR19naWRfdDsK dHlwZWRlZiB1bnNpZ25lZCBsb25nIF9HX2lub190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX0df bW9kZV90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX0dfbmxpbmtfdDsKdHlwZWRlZiBsb25nIF9H X29mZl90Owp0eXBlZGVmIGxvbmcgX0dfcGlkX3Q7CgoKCnR5cGVkZWYgaW50IF9HX3B0cmRpZmZf dDsKdHlwZWRlZiBpbnQgICBfR19zaWdzZXRfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0df c2l6ZV90Owp0eXBlZGVmIGxvbmcgX0dfdGltZV90Owp0eXBlZGVmIGxvbmcgX0dfdWlkX3Q7CnR5 cGVkZWYgbG9uZyBpbnQgX0dfd2NoYXJfdDsKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBpbnQgX0df c3NpemVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfd2ludF90Owp0eXBlZGVmIHZvaWQgKiBf R192YV9saXN0OwoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKCgoKCgoK IAoKCiMgMTkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45 NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL3N0ZGRl Zi5oIiAzIDQKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoKIyAxMzEg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1 ZGUvc3RkZGVmLmgiIDMgNAoKCiAKCiAKCiMgMTkwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgoKIAoKCgoK IAoKIyAyNzEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45 NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAoKCiMgMjgzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgogCgog CgojIDMxNyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1 LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgODYg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4u Ly4uLy4uL3NwYXJjLXN1bi1zb2xhcmlzMi44L2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMyA0CgoK IyAxNTEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4z Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2NvbmZpZy5oIiAyIDMKCgoKCgoKCgoKCgoK CgoKCgojIDE3OCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8y Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDIzNCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29u ZmlnLmgiIDMKCgojIDI0OCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uZmlnLmgiIDMKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAogCiMgMjk1ICIvdXNyL2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs dWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCgoKCgoKCgoKIAogCiMgMzE2ICIvdXNyL2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs dWRlL2crKy0zL3N0bF9jb25maWcuaCIgMwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiAKIAogCiMgMzYgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIg MwoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45 NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3JlbG9wcy5oIiAxIDMKIAoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUg Ym9vbCBvcGVyYXRvciE9KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVy biAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVy YXRvcj4oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9f eDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBf VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IF9UcCYgX194LCBj b25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCiAKCgoKIAogCiAKIyAz OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4v Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAiL3Vzci9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9zdGxfcGFpci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK IAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsK ICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBf VDEgZmlyc3Q7CiAgX1QyIHNlY29uZDsKICBwYWlyKCkgOiBmaXJzdChfVDEoKSksIHNlY29uZChf VDIoKSkge30KICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJzdChf X2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgog IHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNv bmQoX19wLnNlY29uZCkge30KCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+Cmlu bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFp cjxfVDEsIF9UMj4mIF9feSkKeyAKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBf X3guc2Vjb25kID09IF9feS5zZWNvbmQ7IAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf VDI+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25z dCBwYWlyPF9UMSwgX1QyPiYgX195KQp7IAogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3Qg fHwgCiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9f eS5zZWNvbmQpOyAKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgcGFp cjxfVDEsIF9UMj4gbWFrZV9wYWlyKGNvbnN0IF9UMSYgX194LCBjb25zdCBfVDImIF9feSkKewog IHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCiAKCgoKIAogCiAKIyA0MiAiL3Vz ci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4v Li4vaW5jbHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAiL3Vzci9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy90eXBlX3RyYWl0cy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX190cnVlX3R5cGUgewp9OwoKc3RydWN0 IF9fZmFsc2VfdHlwZSB7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3Ry YWl0cyB7IAogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgICB0aGlzX2R1bW15X21lbWJlcl9tdXN0 X2JlX2ZpcnN0OwogICAgICAgICAgICAgICAgICAgIAoKCgoKCiAgICAKCgoKCgoKCgogCgogICB0 eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y OwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0 eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCgoKIAogCiAKCgoKdGVtcGxh dGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl ICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAg aXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNoYXI+ IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3Ry dWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg ICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl ICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg ICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQg Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29u c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50 X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRl PD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg IGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaG9y dD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBz dHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg ICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+ IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3Ry dWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg ICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl ICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBp c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0 IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg ICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg ICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl ICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNf UE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9u Zz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBz dHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0 czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25t ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0 ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90 eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBk b3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29u c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVu dF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0czxfVHAqPiB7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCiMgMjk1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3R5cGVf dHJhaXRzLmgiIDMKCgoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVn ZXIgewogIHR5cGVkZWYgX19mYWxzZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAg c3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh bDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVm IF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdl cjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt cGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9f dHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2Vy PHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxh dGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBf SW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hv cnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0 cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK fTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50 ZWdlcjxsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0 ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVl X3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9u ZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCgoKIAogCiAKIyA0NSAiL3Vzci9sb2NhbC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst My9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiAKCgogCgoK CgoKIAojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45 NS4zL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMyA0CiAKCgoKCiAKIAoKIAogCiAKCgoKCiNwcmFn bWEgaWRlbnQJIkAoIylsaW1pdHMuaAkxLjUxCTk5LzEwLzA4IFNNSSIJCgoKCiMgMSAiL3Vzci9p bmNsdWRlL2lzby9saW1pdHNfaXNvLmgiIDEgMyA0CiAKCgoKCiAKIAoKIAogCiAKCiAKCgoKCgoK CgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpbGltaXRzX2lzby5oCTEuMQk5OS8wOC8wOSBTTUki IAoKCmV4dGVybiAiQyIgewoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgkJ CQkJIAoKCgoKCn0KCgoKIyAyMCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOC8yLjk1LjMvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQKCgogCgoKCgoKCgoKCiMg MSAiL3Vzci9pbmNsdWRlL3N5cy9pbnRfbGltaXRzLmgiIDEgMyA0CiAKCgoKCgoKCiNwcmFnbWEg aWRlbnQJIkAoIylpbnRfbGltaXRzLmgJMS42CTk5LzA4LzA2IFNNSSIKCiAKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgogCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoK CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCn0KCgoKIyAzMiAiL3Vzci9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvaW5jbHVkZS9zeXNs aW1pdHMuaCIgMiAzIDQKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgkJCQkgCgoKCgoKCgoKCgoKCgoKCgoK CgoKCQkJCQkJIAoKCgoJCQkJCQkgCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyNDAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1ZGUvc3lzbGltaXRzLmgiIDMgNAoKCgoKCiAKCgoK CgoKCgogCgoKCiMgMjc3ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzIuOTUuMy9pbmNsdWRlL3N5c2xpbWl0cy5oIiAzIDQKCgoKfQoKCgojIDExICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL2xpbWl0 cy5oIiAyIDMgNAoKCgoKCiAKCgoKIAoKCgogCgoKCgogCgoKCgoKIAoKCgogCgoKCgoKCgoKCgoK CiAKCiAKCgoKCiAKCgoKIAoKCgoKCgoKCiAKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoK CgoKCiAKCgoKCgoKIAoKCgoKCgoKCgojIDQ5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdv YmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMgNAogCgoKCgogCiAK CiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc3RkbGliLmgJMS40Nwk5OS8xMS8wMyBTTUki CQoKIyAxICIvdXNyL2luY2x1ZGUvaXNvL3N0ZGxpYl9pc28uaCIgMSAzIDQKIAoKCgoKIAogCgog CiAKIAoKIAoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzdGRsaWJfaXNvLmgJMS4x CTk5LzA4LzA5IFNNSSIgCgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKdHlwZWRlZglzdHJ1Y3QgewoJ aW50CXF1b3Q7CglpbnQJcmVtOwp9IGRpdl90OwoKdHlwZWRlZiBzdHJ1Y3QgewoJbG9uZwlxdW90 OwoJbG9uZwlyZW07Cn0gbGRpdl90OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVm IGxvbmcJd2NoYXJfdDsKCgoKCgpleHRlcm4gdW5zaWduZWQgY2hhcglfX2N0eXBlW107CgoKZXh0 ZXJuIHZvaWQgYWJvcnQodm9pZCk7CmV4dGVybiBpbnQgYWJzKGludCk7CmV4dGVybiBpbnQgYXRl eGl0KHZvaWQgKCopKHZvaWQpKTsKZXh0ZXJuIGRvdWJsZSBhdG9mKGNvbnN0IGNoYXIgKik7CmV4 dGVybiBpbnQgYXRvaShjb25zdCBjaGFyICopOwpleHRlcm4gbG9uZyBpbnQgYXRvbChjb25zdCBj aGFyICopOwpleHRlcm4gdm9pZCAqYnNlYXJjaChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwg c2l6ZV90LCBzaXplX3QsCglpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CmV4 dGVybiB2b2lkICpjYWxsb2Moc2l6ZV90LCBzaXplX3QpOwpleHRlcm4gZGl2X3QgZGl2KGludCwg aW50KTsKZXh0ZXJuIHZvaWQgZXhpdChpbnQpOwpleHRlcm4gdm9pZCBmcmVlKHZvaWQgKik7CmV4 dGVybiBjaGFyICpnZXRlbnYoY29uc3QgY2hhciAqKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMobG9u Zyk7CmV4dGVybiBsZGl2X3QgbGRpdihsb25nLCBsb25nKTsKZXh0ZXJuIHZvaWQgKm1hbGxvYyhz aXplX3QpOwpleHRlcm4gaW50IG1ibGVuKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIHNp emVfdCBtYnN0b3djcyh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGlu dCBtYnRvd2Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CmV4dGVybiB2b2lkIHFz b3J0KHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsCglpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qg dm9pZCAqKSk7CmV4dGVybiBpbnQgcmFuZCh2b2lkKTsKZXh0ZXJuIHZvaWQgKnJlYWxsb2Modm9p ZCAqLCBzaXplX3QpOwpleHRlcm4gdm9pZCBzcmFuZCh1bnNpZ25lZCBpbnQpOwpleHRlcm4gZG91 YmxlIHN0cnRvZChjb25zdCBjaGFyICosIGNoYXIgKiopOwpleHRlcm4gbG9uZyBpbnQgc3RydG9s KGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0 cnRvdWwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpleHRlcm4gaW50IHN5c3RlbShjb25z dCBjaGFyICopOwpleHRlcm4gaW50IHdjdG9tYihjaGFyICosIHdjaGFyX3QpOwpleHRlcm4gc2l6 ZV90IHdjc3RvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOwoKIyAxNTAgIi91 c3IvaW5jbHVkZS9pc28vc3RkbGliX2lzby5oIiAzIDQKCgoKCgoKCn0KCgoKIyAxOCAiL3Vzci9p bmNsdWRlL3N0ZGxpYi5oIiAyIDMgNAoKCgoKCgoKIAoKCgojIDYxICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDMgNAoKCgpleHRlcm4gIkMiIHsKCgoKdHlwZWRlZiBzdHJ1Y3QgewoJbG9uZyBsb25n CXF1b3Q7Cglsb25nIGxvbmcJcmVtOwp9IGxsZGl2X3Q7CgoKCgoKCgoKCgoKCgogCiMgOTQgIi91 c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CgoKIAojIDEwNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAzIDQKCgoKCmV4dGVybiBpbnQgcmFuZF9yKHVuc2lnbmVkIGludCAqKTsKCgpleHRlcm4gdm9p ZCBfZXhpdGhhbmRsZSh2b2lkKTsKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCh2b2lkKTsKZXh0 ZXJuIGRvdWJsZSBlcmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gbG9uZyBqcmFuZDQ4 KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gdm9pZCBsY29uZzQ4KHVuc2lnbmVkIHNob3J0ICop OwpleHRlcm4gbG9uZyBscmFuZDQ4KHZvaWQpOwpleHRlcm4gbG9uZyBtcmFuZDQ4KHZvaWQpOwpl eHRlcm4gbG9uZyBucmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOwpleHRlcm4gdW5zaWduZWQgc2hv cnQgKnNlZWQ0OCh1bnNpZ25lZCBzaG9ydCAqKTsKZXh0ZXJuIHZvaWQgc3JhbmQ0OChsb25nKTsK ZXh0ZXJuIGludCBwdXRlbnYoY2hhciAqKTsKZXh0ZXJuIHZvaWQgc2V0a2V5KGNvbnN0IGNoYXIg Kik7CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gdm9pZCBzd2FiKGNvbnN0IGNoYXIgKiwgY2hhciAq LCBzc2l6ZV90KTsKCgoKCgpleHRlcm4gaW50CW1rc3RlbXAoY2hhciAqKTsKCgoKCmV4dGVybiBp bnQJbWtzdGVtcDY0KGNoYXIgKik7CgoKCgoKZXh0ZXJuIGxvbmcgYTY0bChjb25zdCBjaGFyICop OwpleHRlcm4gY2hhciAqZWN2dChkb3VibGUsIGludCwgaW50ICosIGludCAqKTsKZXh0ZXJuIGNo YXIgKmZjdnQoZG91YmxlLCBpbnQsIGludCAqLCBpbnQgKik7CmV4dGVybiBjaGFyICpnY3Z0KGRv dWJsZSwgaW50LCBjaGFyICopOwpleHRlcm4gaW50IGdldHN1Ym9wdChjaGFyICoqLCBjaGFyICpj b25zdCAqLCBjaGFyICoqKTsKZXh0ZXJuIGludCAgZ3JhbnRwdChpbnQpOwpleHRlcm4gY2hhciAq aW5pdHN0YXRlKHVuc2lnbmVkLCBjaGFyICosIHNpemVfdCk7CmV4dGVybiBjaGFyICpsNjRhKGxv bmcpOwpleHRlcm4gY2hhciAqbWt0ZW1wKGNoYXIgKik7CmV4dGVybiBjaGFyICpwdHNuYW1lKGlu dCk7CmV4dGVybiBsb25nIHJhbmRvbSh2b2lkKTsKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoKGNvbnN0 IGNoYXIgKiwgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKnNldHN0YXRlKGNvbnN0IGNoYXIgKik7CmV4 dGVybiB2b2lkIHNyYW5kb20odW5zaWduZWQpOwpleHRlcm4gaW50IHR0eXNsb3Qodm9pZCk7CmV4 dGVybiBpbnQgIHVubG9ja3B0KGludCk7CmV4dGVybiB2b2lkICp2YWxsb2Moc2l6ZV90KTsKCgoK CmV4dGVybiBpbnQgZHVwMihpbnQsIGludCk7CmV4dGVybiBjaGFyICpxZWN2dChsb25nIGRvdWJs ZSwgaW50LCBpbnQgKiwgaW50ICopOwpleHRlcm4gY2hhciAqcWZjdnQobG9uZyBkb3VibGUsIGlu dCwgaW50ICosIGludCAqKTsKZXh0ZXJuIGNoYXIgKnFnY3Z0KGxvbmcgZG91YmxlLCBpbnQsIGNo YXIgKik7CmV4dGVybiBjaGFyICpnZXRjd2QoY2hhciAqLCBzaXplX3QpOwpleHRlcm4gY29uc3Qg Y2hhciAqZ2V0ZXhlY25hbWUodm9pZCk7CmV4dGVybiBjaGFyICpnZXRsb2dpbih2b2lkKTsKZXh0 ZXJuIGludCBnZXRvcHQoaW50LCBjaGFyICpjb25zdCAqLCBjb25zdCBjaGFyICopOwpleHRlcm4g Y2hhciAqb3B0YXJnOwpleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CmV4dGVybiBj aGFyICpnZXRwYXNzKGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyICpnZXRwYXNzcGhyYXNlKGNv bnN0IGNoYXIgKik7CmV4dGVybiBpbnQgZ2V0cHcodWlkX3QsIGNoYXIgKik7CmV4dGVybiBpbnQg aXNhdHR5KGludCk7CmV4dGVybiB2b2lkICptZW1hbGlnbihzaXplX3QsIHNpemVfdCk7CmV4dGVy biBjaGFyICp0dHluYW1lKGludCk7CgoKZXh0ZXJuIGxvbmcgbG9uZyBhdG9sbChjb25zdCBjaGFy ICopOwpleHRlcm4gbG9uZyBsb25nIGxsYWJzKGxvbmcgbG9uZyk7CmV4dGVybiBsbGRpdl90IGxs ZGl2KGxvbmcgbG9uZywgbG9uZyBsb25nKTsKZXh0ZXJuIGNoYXIgKmxsdG9zdHIobG9uZyBsb25n LCBjaGFyICopOwpleHRlcm4gbG9uZyBsb25nIHN0cnRvbGwoY29uc3QgY2hhciAqLCBjaGFyICoq LCBpbnQpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHN0cnRvdWxsKGNvbnN0IGNoYXIgKiwg Y2hhciAqKiwgaW50KTsKZXh0ZXJuIGNoYXIgKnVsbHRvc3RyKHVuc2lnbmVkIGxvbmcgbG9uZywg Y2hhciAqKTsKCgoKCiMgMzA1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAoKCgp9CgoKCiMg NTAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4u Ly4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMgNAoKCgoKCgogCgoKCgoKCgogCgogCgoKCgogCgoKIAoKCgoKCiAKCgojIDYxICIv dXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRl L3N0ZGRlZi5oIiAzIDQKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoKIAoK CiMgMTI2ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUu My9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCgogCgoKCgogCgogCgoKCiMgMTg3ICIvdXNyL2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5o IiAzIDQKCgoKCgoKIAoKCgoKIAoKCgojIDI2OCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgoKCgoKCgoKCgoK CnR5cGVkZWYgdW5zaWduZWQgaW50ICB3aW50X3Q7CgoKCgogCgogCgojIDMxNyAiL3Vzci9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYu aCIgMyA0CgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDUxICIvdXNyL2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr Ky0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8yLjk1LjMvaW5jbHVkZS9uZXcuaCIgMSAzIDQKIAoKCgoKIyAxICIv dXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRl L25ldyIgMSAzIDQKIAogCgoKCgojcHJhZ21hIGludGVyZmFjZSAibmV3IgojIDEgIi91c3IvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1ZGUvc3RkZGVm LmgiIDEgMyA0CiMgMzQyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCiMgOCAiL3Vzci9sb2NhbC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvaW5jbHVkZS9uZXciIDIgMyA0CgojIDEg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1 ZGUvZXhjZXB0aW9uIiAxIDMgNAogCiAKCgoKCiNwcmFnbWEgaW50ZXJmYWNlICJleGNlcHRpb24i CgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZCB7CgpjbGFzcyBleGNlcHRpb24gewpwdWJs aWM6CiAgZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgfmV4Y2VwdGlvbiAoKSB7IH0KICB2aXJ0 dWFsIGNvbnN0IGNoYXIqIHdoYXQgKCkgY29uc3Q7Cn07CgpjbGFzcyBiYWRfZXhjZXB0aW9uIDog cHVibGljIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBiYWRfZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1 YWwgfmJhZF9leGNlcHRpb24gKCkgeyB9Cn07Cgp0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVfaGFu ZGxlcikgKCk7CnR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7Cgp0ZXJtaW5h dGVfaGFuZGxlciBzZXRfdGVybWluYXRlICh0ZXJtaW5hdGVfaGFuZGxlcik7CnZvaWQgdGVybWlu YXRlICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKdW5leHBlY3RlZF9oYW5kbGVy IHNldF91bmV4cGVjdGVkICh1bmV4cGVjdGVkX2hhbmRsZXIpOwp2b2lkIHVuZXhwZWN0ZWQgKCkg X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwpib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbiAo KTsKCn0gIAoKfSAgCgoKIyA5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi44LzIuOTUuMy9pbmNsdWRlL25ldyIgMiAzIDQKCgpleHRlcm4gIkMrKyIgewoKbmFtZXNw YWNlIHN0ZCB7CgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1YmxpYyBleGNlcHRpb24gewogIHB1Ymxp YzoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4g ImJhZF9hbGxvYyI7IH0KICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190IHt9OwogIGV4dGVybiBjb25z dCBub3Rocm93X3Qgbm90aHJvdzsKICB0eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsKICBu ZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRsZXIgKG5ld19oYW5kbGVyKTsKCn0gIAoKIAp2b2lkICpv cGVyYXRvciBuZXcgKHNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCAqb3BlcmF0 b3IgbmV3W10gKHNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBk ZWxldGUgKHZvaWQgKikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSAodm9pZCAqKSB0 aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXcgKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3Qm KSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXdbXSAoc2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhy b3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICosIGNvbnN0IHN0ZDo6 bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSAodm9pZCAqLCBjb25z dCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgogCmlubGluZSB2b2lkICpvcGVyYXRvciBuZXco c2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQppbmxpbmUgdm9p ZCAqb3BlcmF0b3IgbmV3W10oc2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBw bGFjZTsgfQp9ICAKCgojIDYgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFy aXMyLjgvMi45NS4zL2luY2x1ZGUvbmV3LmgiIDIgMyA0CgoKdXNpbmcgc3RkOjpuZXdfaGFuZGxl cjsKdXNpbmcgc3RkOjpzZXRfbmV3X2hhbmRsZXI7CgoKIyA1MiAiL3Vzci9sb2NhbC9saWIvZ2Nj LWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKyst My9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0u aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoKCiMg MSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4v Li4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCiAgIAoKCgpleHRlcm4gIkMiIHsKIyAxICIv dXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8u Li8uLi9pbmNsdWRlL2crKy0zL2xpYmlvLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNTUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIg MwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgojIDEwNCAiL3Vzci9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5j bHVkZS9nKystMy9saWJpby5oIiAzCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKc3RydWN0IF9JT19qdW1wX3Q7ICBzdHJ1Y3QgX0lPX0ZJ TEU7CgogCiMgMTc1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2xpYmlvLmgiIDMKCgoKCgoKCgoKICAg IHR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCiAKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBz dHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKICAgCgog ICAKICBpbnQgX3BvczsKIyAyMDggIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvbGliaW8uaCIgMwoKfTsK CnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsJCSAKCgogICAKICAgCiAgY2hhciogX0lP X3JlYWRfcHRyOwkgCiAgY2hhciogX0lPX3JlYWRfZW5kOwkgCiAgY2hhciogX0lPX3JlYWRfYmFz ZTsJIAogIGNoYXIqIF9JT193cml0ZV9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRlX3B0cjsJIAog IGNoYXIqIF9JT193cml0ZV9lbmQ7CSAKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CSAKICBjaGFyKiBf SU9fYnVmX2VuZDsJIAogICAKICBjaGFyICpfSU9fc2F2ZV9iYXNlOyAgCiAgY2hhciAqX0lPX2Jh Y2t1cF9iYXNlOyAgIAogIGNoYXIgKl9JT19zYXZlX2VuZDsgIAoKICBzdHJ1Y3QgX0lPX21hcmtl ciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsK ICBpbnQgX2Jsa3NpemU7CgoKCiAgX0dfb2ZmX3QgIF9vZmZzZXQ7CgoKCiAgIAogIHVuc2lnbmVk IHNob3J0IF9jdXJfY29sdW1uOwogIGNoYXIgX3VudXNlZDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsK CiAgIAoKCgoKCgoKCn07CgoKCgoKCgoKCgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CmV4dGVybiBz dHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fc3RkaW5fLCBfSU9fc3Rkb3V0XywgX0lPX3N0ZGVycl87 CgoKCgoKIAp0eXBlZGVmIHN0cnVjdAp7CiAgX0dfc3NpemVfdCAgKCpyZWFkKSAgKHN0cnVjdCBf SU9fRklMRSAqLCB2b2lkICosIF9HX3NzaXplX3QgKSAgOwogIF9HX3NzaXplX3QgICgqd3JpdGUp ICAoc3RydWN0IF9JT19GSUxFICosIGNvbnN0IHZvaWQgKiwgX0dfc3NpemVfdCApICA7CiAgX0df b2ZmX3QgICgqc2VlaykgIChzdHJ1Y3QgX0lPX0ZJTEUgKiwgX0dfb2ZmX3QgLCBpbnQpICA7CiAg aW50ICgqY2xvc2UpICAoc3RydWN0IF9JT19GSUxFICopICA7Cn0gX0lPX2Nvb2tpZV9pb19mdW5j dGlvbnNfdDsKCiAKc3RydWN0IF9JT19jb29raWVfZmlsZQp7CiAgc3RydWN0IF9JT19GSUxFIGZp bGU7CiAgY29uc3Qgdm9pZCAqdnRhYmxlOwogIHZvaWQgKmNvb2tpZTsKICBfSU9fY29va2llX2lv X2Z1bmN0aW9uc190IGlvX2Z1bmN0aW9uczsKfTsKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGlu dCBfX3VuZGVyZmxvdyAgKF9JT19GSUxFICopICA7CmV4dGVybiBpbnQgX191ZmxvdyAgKF9JT19G SUxFICopICA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAgKF9JT19GSUxFICosIGludCkgIDsKCgoK CgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9JT19nZXRjICAoX0lPX0ZJTEUgKl9fZnApICA7CmV4 dGVybiBpbnQgX0lPX3B1dGMgIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgIDsKZXh0ZXJuIGlu dCBfSU9fZmVvZiAgKF9JT19GSUxFICpfX2ZwKSAgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgIChf SU9fRklMRSAqX19mcCkgIDsKCmV4dGVybiBpbnQgX0lPX3BlZWtjX2xvY2tlZCAgKF9JT19GSUxF ICpfX2ZwKSAgOwoKIAoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlICAoX0lPX0ZJTEUgKikg IDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKZXh0ZXJuIGlu dCBfSU9fZnRyeWxvY2tmaWxlICAoX0lPX0ZJTEUgKikgIDsKCgoKCgoKCgoKCgoKCmV4dGVybiBp bnQgX0lPX3Zmc2NhbmYgIChfSU9fRklMRSAqLCBjb25zdCBjaGFyICosIF9HX3ZhX2xpc3QgLCBp bnQgKikgIDsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgIChfSU9fRklMRSAqLCBjb25zdCBjaGFy ICosIF9HX3ZhX2xpc3QgKSAgOwpleHRlcm4gX0dfc3NpemVfdCAgX0lPX3BhZG4gIChfSU9fRklM RSAqLCBpbnQsIF9HX3NzaXplX3QgKSAgOwpleHRlcm4gX0dfc2l6ZV90ICBfSU9fc2dldG4gIChf SU9fRklMRSAqLCB2b2lkICosIF9HX3NpemVfdCApICA7CgoKCgoKZXh0ZXJuIF9HX29mZl90ICBf SU9fc2Vla29mZiAgKF9JT19GSUxFICosIF9HX29mZl90ICwgaW50LCBpbnQpICA7CmV4dGVybiBf R19vZmZfdCAgX0lPX3NlZWtwb3MgIChfSU9fRklMRSAqLCBfR19vZmZfdCAsIGludCkgIDsKCgpl eHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAgKF9JT19GSUxFICopICA7CgoKfQoKCgoj IDM2ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8u Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0cmVhbWJ1Zi5oIiAyIDMKCn0KIAoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07ICAKY2xhc3Mgb3N0 cmVhbTsgY2xhc3Mgc3RyZWFtYnVmOwoKIAoKCgoKCgoKdHlwZWRlZiBfR19vZmZfdCAgc3RyZWFt b2ZmOwp0eXBlZGVmIF9HX29mZl90ICBzdHJlYW1wb3M7Cgp0eXBlZGVmIF9HX3NzaXplX3QgIHN0 cmVhbXNpemU7Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19mbXRmbGFnczsKdHlwZWRlZiB1bnNp Z25lZCBjaGFyIF9faW9zdGF0ZTsKCnN0cnVjdCBfaW9zX2ZpZWxkcwp7ICAKICAgIHN0cmVhbWJ1 ZiAqX3N0cmJ1ZjsKICAgIG9zdHJlYW0qIF90aWU7CiAgICBpbnQgX3dpZHRoOwogICAgX19mbXRm bGFncyBfZmxhZ3M7CiAgICBzaG9ydCAgX2ZpbGw7CiAgICBfX2lvc3RhdGUgX3N0YXRlOwogICAg X19pb3N0YXRlIF9leGNlcHRpb25zOwogICAgaW50IF9wcmVjaXNpb247CgogICAgdm9pZCAqX2Fy cmF5czsgIAp9OwoKCgoKCgoKCgoKCgoKCgojIDEyNCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJl YW1idWYuaCIgMwoKCmNsYXNzIGlvcyA6IHB1YmxpYyBfaW9zX2ZpZWxkcyB7CiAgaW9zJiBvcGVy YXRvcj0oaW9zJik7ICAgCiAgaW9zIChjb25zdCBpb3MmKTsgIAogIHB1YmxpYzoKICAgIHR5cGVk ZWYgX19mbXRmbGFncyBmbXRmbGFnczsKICAgIHR5cGVkZWYgaW50IGlvc3RhdGU7CiAgICB0eXBl ZGVmIGludCBvcGVubW9kZTsKICAgIHR5cGVkZWYgX0dfc3NpemVfdCAgc3RyZWFtc2l6ZTsKICAg IGVudW0gaW9fc3RhdGUgewoJZ29vZGJpdCA9IDAgLAoJZW9mYml0ID0gMSAsCglmYWlsYml0ID0g MiAsCgliYWRiaXQgPSA0ICB9OwogICAgZW51bSBvcGVuX21vZGUgewoJaW4gPSAxICwKCW91dCA9 IDIgLAoJYXRlID0gNCAsCglhcHAgPSA4ICwKCXRydW5jID0gMTYgLAoJbm9jcmVhdGUgPSAzMiAs Cglub3JlcGxhY2UgPSA2NCAsCgliaW4gPSAxMjggLCAgCgliaW5hcnkgPSAxMjggIH07CiAgICBl bnVtIHNlZWtfZGlyIHsgYmVnLCBjdXIsIGVuZH07CiAgICB0eXBlZGVmIGVudW0gc2Vla19kaXIg c2Vla2RpcjsKICAgICAKICAgIGVudW0geyBza2lwd3M9IDAxICwKCSAgIGxlZnQ9IDAyICwgcmln aHQ9IDA0ICwgaW50ZXJuYWw9IDAxMCAsCgkgICBkZWM9IDAyMCAsIG9jdD0gMDQwICwgaGV4PSAw MTAwICwKCSAgIHNob3diYXNlPSAwMjAwICwgc2hvd3BvaW50PSAwNDAwICwKCSAgIHVwcGVyY2Fz ZT0gMDEwMDAgLCBzaG93cG9zPSAwMjAwMCAsCgkgICBzY2llbnRpZmljPSAwNDAwMCAsIGZpeGVk PSAwMTAwMDAgLAoJICAgdW5pdGJ1Zj0gMDIwMDAwICwgc3RkaW89IDA0MDAwMCAKCgoKCSAgIH07 CiAgICBlbnVtIHsgIAoJYmFzZWZpZWxkPWRlYytvY3QraGV4LAoJZmxvYXRmaWVsZCA9IHNjaWVu dGlmaWMrZml4ZWQsCglhZGp1c3RmaWVsZCA9IGxlZnQrcmlnaHQraW50ZXJuYWwKICAgIH07Cgoj IDE3NyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMv Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJlYW1idWYuaCIgMwoKCiAgICBvc3RyZWFtKiB0 aWUoKSBjb25zdCB7IHJldHVybiBfdGllOyB9CiAgICBvc3RyZWFtKiB0aWUob3N0cmVhbSogdmFs KSB7IG9zdHJlYW0qIHNhdmU9X3RpZTsgX3RpZT12YWw7IHJldHVybiBzYXZlOyB9CgogICAgIAog ICAgc2hvcnQgIGZpbGwoKSBjb25zdCB7IHJldHVybiBfZmlsbDsgfQogICAgc2hvcnQgIGZpbGwo c2hvcnQgIG5ld2YpCgl7c2hvcnQgIG9sZGYgPSBfZmlsbDsgX2ZpbGwgPSBuZXdmOyByZXR1cm4g b2xkZjt9CiAgICBmbXRmbGFncyBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9mbGFnczsgfQogICAg Zm10ZmxhZ3MgZmxhZ3MoZm10ZmxhZ3MgbmV3X3ZhbCkgewoJZm10ZmxhZ3Mgb2xkX3ZhbCA9IF9m bGFnczsgX2ZsYWdzID0gbmV3X3ZhbDsgcmV0dXJuIG9sZF92YWw7IH0KICAgIGludCBwcmVjaXNp b24oKSBjb25zdCB7IHJldHVybiBfcHJlY2lzaW9uOyB9CiAgICBpbnQgcHJlY2lzaW9uKGludCBu ZXdwKSB7Cgl1bnNpZ25lZCBzaG9ydCBvbGRwID0gX3ByZWNpc2lvbjsgX3ByZWNpc2lvbiA9ICh1 bnNpZ25lZCBzaG9ydCluZXdwOwoJcmV0dXJuIG9sZHA7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10 ZmxhZ3MgdmFsKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzIHw9IHZhbDsg cmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHNldGYoZm10ZmxhZ3MgdmFsLCBmbXRmbGFn cyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdzID0gKF9mbGFncyAm IH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsgcmV0dXJuIG9sZGJpdHM7IH0KICAgIGZtdGZsYWdzIHVu c2V0ZihmbXRmbGFncyBtYXNrKSB7CglmbXRmbGFncyBvbGRiaXRzID0gX2ZsYWdzOwoJX2ZsYWdz ICY9IH5tYXNrOyByZXR1cm4gb2xkYml0czsgfQogICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1 cm4gX3dpZHRoOyB9CiAgICBpbnQgd2lkdGgoaW50IHZhbCkgeyBpbnQgc2F2ZSA9IF93aWR0aDsg X3dpZHRoID0gdmFsOyByZXR1cm4gc2F2ZTsgfQoKCgoKICAgIHZvaWQgX3Rocm93X2ZhaWx1cmUo KSBjb25zdCB7IH0KCiAgICB2b2lkIGNsZWFyKGlvc3RhdGUgc3RhdGUgPSAwKSB7Cglfc3RhdGUg PSBfc3RyYnVmID8gc3RhdGUgOiBzdGF0ZXxiYWRiaXQ7CglpZiAoX3N0YXRlICYgX2V4Y2VwdGlv bnMpIF90aHJvd19mYWlsdXJlKCk7IH0KICAgIHZvaWQgc2V0KGlvc3RhdGUgZmxhZykgeyBfc3Rh dGUgfD0gZmxhZzsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsg fQogICAgdm9pZCBzZXRzdGF0ZShpb3N0YXRlIGZsYWcpIHsgX3N0YXRlIHw9IGZsYWc7ICAKCWlm IChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgaW50IGdvb2Qo KSBjb25zdCB7IHJldHVybiBfc3RhdGUgPT0gMDsgfQogICAgaW50IGVvZigpIGNvbnN0IHsgcmV0 dXJuIF9zdGF0ZSAmIGlvczo6ZW9mYml0OyB9CiAgICBpbnQgZmFpbCgpIGNvbnN0IHsgcmV0dXJu IF9zdGF0ZSAmIChpb3M6OmJhZGJpdHxpb3M6OmZhaWxiaXQpOyB9CiAgICBpbnQgYmFkKCkgY29u c3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjpiYWRiaXQ7IH0KICAgIGlvc3RhdGUgcmRzdGF0ZSgp IGNvbnN0IHsgcmV0dXJuIF9zdGF0ZTsgfQogICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdCB7IHJl dHVybiBmYWlsKCkgPyAodm9pZCopMCA6ICh2b2lkKikoLTEpOyB9CiAgICBpbnQgb3BlcmF0b3Ih KCkgY29uc3QgeyByZXR1cm4gZmFpbCgpOyB9CiAgICBpb3N0YXRlIGV4Y2VwdGlvbnMoKSBjb25z dCB7IHJldHVybiBfZXhjZXB0aW9uczsgfQogICAgdm9pZCBleGNlcHRpb25zKGlvc3RhdGUgZW5h YmxlKSB7CglfZXhjZXB0aW9ucyA9IGVuYWJsZTsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykg X3Rocm93X2ZhaWx1cmUoKTsgfQoKICAgIHN0cmVhbWJ1ZiogcmRidWYoKSBjb25zdCB7IHJldHVy biBfc3RyYnVmOyB9CiAgICBzdHJlYW1idWYqIHJkYnVmKHN0cmVhbWJ1ZiAqX3MpIHsKICAgICAg c3RyZWFtYnVmICpfb2xkID0gX3N0cmJ1ZjsgX3N0cmJ1ZiA9IF9zOyBjbGVhciAoKTsgcmV0dXJu IF9vbGQ7IH0KCiAgICBzdGF0aWMgaW50IHN5bmNfd2l0aF9zdGRpbyhpbnQgb24pOwogICAgc3Rh dGljIHZvaWQgc3luY193aXRoX3N0ZGlvKCkgeyBzeW5jX3dpdGhfc3RkaW8oMSk7IH0KICAgIHN0 YXRpYyBmbXRmbGFncyBiaXRhbGxvYygpOwogICAgc3RhdGljIGludCB4YWxsb2MoKTsKICAgIHZv aWQqJiBwd29yZChpbnQpOwogICAgdm9pZCogcHdvcmQoaW50KSBjb25zdDsKICAgIGxvbmcmIGl3 b3JkKGludCk7CiAgICBsb25nIGl3b3JkKGludCkgY29uc3Q7CgoKCgoKCgoKCiAgICAgCiAgICBj bGFzcyBJbml0IHsKICAgIHB1YmxpYzoKICAgICAgSW5pdCAoKSB7IH0KICAgIH07CgogIHByb3Rl Y3RlZDoKICAgIGlubGluZSBpb3Moc3RyZWFtYnVmKiBzYiA9IDAsIG9zdHJlYW0qIHRpZV90byA9 IDApOwogICAgaW5saW5lIHZpcnR1YWwgfmlvcygpOwogICAgaW5saW5lIHZvaWQgaW5pdChzdHJl YW1idWYqIHNiLCBvc3RyZWFtKiB0aWUgPSAwKTsKfTsKCgoKCnR5cGVkZWYgaW9zOjpzZWVrX2Rp ciBfc2Vla19kaXI7CgoKIAogCiAKIAogCgogCiAKY2xhc3Mgc3RyZWFtbWFya2VyIDogcHJpdmF0 ZSBfSU9fbWFya2VyIHsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1idWY7CiAgICB2b2lkIHNldF9v ZmZzZXQoaW50IG9mZnNldCkgeyBfcG9zID0gb2Zmc2V0OyB9CiAgcHVibGljOgogICAgc3RyZWFt bWFya2VyKHN0cmVhbWJ1ZiAqc2IpOwogICAgfnN0cmVhbW1hcmtlcigpOwogICAgaW50IHNhdmlu ZygpIHsgcmV0dXJuICAxOyB9CiAgICBpbnQgZGVsdGEoc3RyZWFtbWFya2VyJik7CiAgICBpbnQg ZGVsdGEoKTsKfTsKCnN0cnVjdCBzdHJlYW1idWYgOiBwdWJsaWMgX0lPX0ZJTEUgeyAgCiAgICBm cmllbmQgY2xhc3MgaW9zOwogICAgZnJpZW5kIGNsYXNzIGlzdHJlYW07CiAgICBmcmllbmQgY2xh c3Mgb3N0cmVhbTsKICAgIGZyaWVuZCBjbGFzcyBzdHJlYW1tYXJrZXI7CiAgICBjb25zdCB2b2lk IComX3Z0YWJsZSgpIHsgcmV0dXJuICooY29uc3Qgdm9pZCoqKSgoX0lPX0ZJTEUqKXRoaXMgKyAx KTsgfQogIHByb3RlY3RlZDoKICAgIHN0YXRpYyBzdHJlYW1idWYqIF9saXN0X2FsbDsgIAogICAg X0lPX0ZJTEUqJiB4Y2hhaW4oKSB7IHJldHVybiBfY2hhaW47IH0KICAgIHZvaWQgX3VuX2xpbmso KTsKICAgIHZvaWQgX2xpbmtfaW4oKTsKICAgIGNoYXIqIGdwdHIoKSBjb25zdAogICAgICB7IHJl dHVybiBfZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfYmFzZSA6IF9JT19yZWFkX3B0cjsgfQog ICAgY2hhciogcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9wdHI7IH0KICAgIGNoYXIq IGVncHRyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZl X2VuZCA6IF9JT19yZWFkX2VuZDsgfQogICAgY2hhciogZXBwdHIoKSBjb25zdCB7IHJldHVybiBf SU9fd3JpdGVfZW5kOyB9CiAgICBjaGFyKiBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0 ZV9iYXNlOyB9CiAgICBjaGFyKiBlYmFjaygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAg JiAweDEwMCAgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTt9CiAgICBjaGFyKiBiYXNl KCkgY29uc3QgeyByZXR1cm4gX0lPX2J1Zl9iYXNlOyB9CiAgICBjaGFyKiBlYnVmKCkgY29uc3Qg eyByZXR1cm4gX0lPX2J1Zl9lbmQ7IH0KICAgIGludCBibGVuKCkgY29uc3QgeyByZXR1cm4gX0lP X2J1Zl9lbmQgLSBfSU9fYnVmX2Jhc2U7IH0KICAgIHZvaWQgeHB1dF9jaGFyKGNoYXIgYykgeyAq X0lPX3dyaXRlX3B0cisrID0gYzsgfQogICAgaW50IHhmbGFncygpIHsgcmV0dXJuIF9mbGFncyA7 IH0KICAgIGludCB4ZmxhZ3MoaW50IGYpIHtpbnQgZmwgPSBfZmxhZ3MgOyBfZmxhZ3MgID0gZjsg cmV0dXJuIGZsO30KICAgIHZvaWQgeHNldGZsYWdzKGludCBmKSB7IF9mbGFncyAgfD0gZjsgfQog ICAgdm9pZCB4c2V0ZmxhZ3MoaW50IGYsIGludCBtYXNrKQogICAgICB7IF9mbGFncyAgPSAoX2Zs YWdzICAmIH5tYXNrKSB8IChmICYgbWFzayk7IH0KICAgIHZvaWQgZ2J1bXAoaW50IG4pCiAgICAg IHsgX2ZsYWdzICAmIDB4MTAwICA/IChfSU9fc2F2ZV9iYXNlKz1uKTooX0lPX3JlYWRfcHRyKz1u KTt9CiAgICB2b2lkIHBidW1wKGludCBuKSB7IF9JT193cml0ZV9wdHIgKz0gbjsgfQogICAgdm9p ZCBzZXRiKGNoYXIqIGIsIGNoYXIqIGViLCBpbnQgYT0wKTsKICAgIHZvaWQgc2V0cChjaGFyKiBw LCBjaGFyKiBlcCkKICAgICAgeyBfSU9fd3JpdGVfYmFzZT1fSU9fd3JpdGVfcHRyPXA7IF9JT193 cml0ZV9lbmQ9ZXA7IH0KICAgIHZvaWQgc2V0ZyhjaGFyKiBlYiwgY2hhciogZywgY2hhciAqZWcp IHsKICAgICAgaWYgKF9mbGFncyAgJiAweDEwMCApIF9JT19mcmVlX2JhY2t1cF9hcmVhKHRoaXMp OyAKICAgICAgX0lPX3JlYWRfYmFzZSA9IGViOyBfSU9fcmVhZF9wdHIgPSBnOyBfSU9fcmVhZF9l bmQgPSBlZzsgfQogICAgY2hhciAqc2hvcnRidWYoKSB7IHJldHVybiBfc2hvcnRidWY7IH0KCiAg ICBpbnQgaW5fYmFja3VwKCkgeyByZXR1cm4gX2ZsYWdzICYgMHgxMDAgOyB9CiAgICAgCiAgICBj aGFyICpHYmFzZSgpIHsgcmV0dXJuIGluX2JhY2t1cCgpID8gX0lPX3NhdmVfYmFzZSA6IF9JT19y ZWFkX2Jhc2U7IH0KICAgICAKICAgIGNoYXIgKmVHcHRyKCkgeyByZXR1cm4gaW5fYmFja3VwKCkg PyBfSU9fc2F2ZV9lbmQgOiBfSU9fcmVhZF9lbmQ7IH0KICAgICAKICAgIGNoYXIgKkJiYXNlKCkg eyByZXR1cm4gaW5fYmFja3VwKCkgPyBfSU9fcmVhZF9iYXNlIDogX0lPX3NhdmVfYmFzZTsgfQog ICAgY2hhciAqQnB0cigpIHsgcmV0dXJuIF9JT19iYWNrdXBfYmFzZTsgfQogICAgIAogICAgY2hh ciAqZUJwdHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFkX2VuZCA6IF9JT19zYXZl X2VuZDsgfQogICAgY2hhciAqTmJhc2UoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBj aGFyICplTnB0cigpIHsgcmV0dXJuIF9JT19zYXZlX2VuZDsgfQogICAgaW50IGhhdmVfYmFja3Vw KCkgeyByZXR1cm4gX0lPX3NhdmVfYmFzZSAhPSBfX251bGwgOyB9CiAgICBpbnQgaGF2ZV9tYXJr ZXJzKCkgeyByZXR1cm4gX21hcmtlcnMgIT0gX19udWxsIDsgfQogICAgdm9pZCBmcmVlX2JhY2t1 cF9hcmVhKCk7CiAgICB2b2lkIHVuc2F2ZV9tYXJrZXJzKCk7ICAKICAgIGludCBwdXRfbW9kZSgp IHsgcmV0dXJuIF9mbGFncyAmIDB4ODAwIDsgfQogICAgaW50IHN3aXRjaF90b19nZXRfbW9kZSgp OwogICAgCiAgICBzdHJlYW1idWYoaW50IGZsYWdzPTApOwogIHB1YmxpYzoKICAgIHN0YXRpYyBp bnQgZmx1c2hfYWxsKCk7CiAgICBzdGF0aWMgdm9pZCBmbHVzaF9hbGxfbGluZWJ1ZmZlcmVkKCk7 ICAKICAgIHZpcnR1YWwgfnN0cmVhbWJ1ZigpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50 IGMgPSAoLTEpICk7ICAKICAgIHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOyAgCiAgICB2aXJ0dWFs IGludCB1ZmxvdygpOyAgCiAgICB2aXJ0dWFsIGludCBwYmFja2ZhaWwoaW50IGMpOwogCiAgICB2 aXJ0dWFsIHN0cmVhbXNpemUgeHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAg ICB2aXJ0dWFsIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAgICB2 aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1p b3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtwb3Moc3RyZWFtcG9z IHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6b3V0KTsKCiAgICBzdHJlYW1wb3MgcHVic2Vl a29mZihzdHJlYW1vZmYgbywgX3NlZWtfZGlyIGQsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQp CiAgICAgIHsgcmV0dXJuIF9JT19zZWVrb2ZmICh0aGlzLCBvLCBkLCBtb2RlKTsgfQogICAgc3Ry ZWFtcG9zIHB1YnNlZWtwb3Moc3RyZWFtcG9zIHBvcywgaW50IG1vZGUgPSBpb3M6OmlufGlvczo6 b3V0KQogICAgICB7IHJldHVybiBfSU9fc2Vla3BvcyAodGhpcywgcG9zLCBtb2RlKTsgfQogICAg c3RyZWFtcG9zIHNzZWVrb2ZmKHN0cmVhbW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6Omlu fGlvczo6b3V0KTsKICAgIHN0cmVhbXBvcyBzc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9k ZSA9IGlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFy KiBwLCBpbnQgbGVuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICAgIHZpcnR1YWwgaW50IGRv YWxsb2NhdGUoKTsKCiAgICBpbnQgc2Vla21hcmsoc3RyZWFtbWFya2VyJiBtYXJrLCBpbnQgZGVs dGEgPSAwKTsKICAgIGludCBzcHV0YmFja2MoY2hhciBjKTsKICAgIGludCBzdW5nZXRjKCk7CiAg ICBpbnQgdW5idWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFncyAmIDIgID8gMSA6IDA7IH0KICAgIGlu dCBsaW5lYnVmZmVyZWQoKSB7IHJldHVybiBfZmxhZ3MgJiAweDIwMCAgPyAxIDogMDsgfQogICAg dm9pZCB1bmJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdzIHw9IDIgOyBlbHNlIF9mbGFn cyAmPSB+MiA7IH0KICAgIHZvaWQgbGluZWJ1ZmZlcmVkKGludCBpKQoJeyBpZiAoaSkgX2ZsYWdz IHw9IDB4MjAwIDsgZWxzZSBfZmxhZ3MgJj0gfjB4MjAwIDsgfQogICAgaW50IGFsbG9jYXRlKCkg eyAgCglpZiAoYmFzZSgpIHx8IHVuYnVmZmVyZWQoKSkgcmV0dXJuIDA7CgllbHNlIHJldHVybiBk b2FsbG9jYXRlKCk7IH0KICAgICAKICAgIHZvaWQgYWxsb2NidWYoKSB7IGlmIChiYXNlKCkgPT0g X19udWxsICkgZG9hbGxvY2J1ZigpOyB9CiAgICB2b2lkIGRvYWxsb2NidWYoKTsKICAgIGludCBp bl9hdmFpbCgpIHsgcmV0dXJuIF9JT19yZWFkX2VuZCAtIF9JT19yZWFkX3B0cjsgfQogICAgaW50 IG91dF93YWl0aW5nKCkgeyByZXR1cm4gX0lPX3dyaXRlX3B0ciAtIF9JT193cml0ZV9iYXNlOyB9 CiAgICBzdHJlYW1zaXplIHNwdXRuKGNvbnN0IGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyByZXR1 cm4geHNwdXRuKHMsIG4pOyB9CiAgICBzdHJlYW1zaXplIHBhZG4oY2hhciBwYWQsIHN0cmVhbXNp emUgbikgeyByZXR1cm4gX0lPX3BhZG4odGhpcywgcGFkLCBuKTsgfQogICAgc3RyZWFtc2l6ZSBz Z2V0bihjaGFyKiBzLCBzdHJlYW1zaXplIG4pIHsgcmV0dXJuIF9JT19zZ2V0bih0aGlzLCBzLCBu KTsgfQogICAgaW50IGlnbm9yZShpbnQpOwogICAgaW50IGdldF9jb2x1bW4oKTsKICAgIGludCBz ZXRfY29sdW1uKGludCk7CiAgICBsb25nIHNnZXRsaW5lKGNoYXIqIGJ1ZiwgX0dfc2l6ZV90ICBu LCBjaGFyIGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7CiAgICBpbnQgc3B1dGMoaW50IGMpIHsg cmV0dXJuIF9JT19wdXRjKGMsIHRoaXMpOyB9CiAgICBpbnQgc2J1bXBjKCkgeyByZXR1cm4gX0lP X2dldGModGhpcyk7IH0KICAgIGludCBzZ2V0YygpIHsgcmV0dXJuICgoICB0aGlzICApLT5fSU9f cmVhZF9wdHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRfZW5kICYmIF9fdW5kZXJmbG93ICggIHRo aXMgICkgPT0gKC0xKSAgPyAoLTEpICA6ICoodW5zaWduZWQgY2hhciAqKSAoICB0aGlzICApLT5f SU9fcmVhZF9wdHIpICA7IH0KICAgIGludCBzbmV4dGMoKSB7CglpZiAoX0lPX3JlYWRfcHRyID49 IF9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlzKSA9PSAoLTEpICkKCSAgcmV0dXJuICgt MSkgOwoJZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyssIHNnZXRjKCk7IH0KICAgIHZvaWQgc3Rv c3NjKCkgeyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3JlYWRfZW5kKSBfSU9fcmVhZF9wdHIrKzsg fQogICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwLCBpb3MqIHN0 cmVhbSA9IF9fbnVsbCApOwogICAgaW50IHNjYW4oY2hhciBjb25zdCAqZm10MCAuLi4pOwogICAg aW50IHZmb3JtKGNoYXIgY29uc3QgKmZtdDAsIF9HX3ZhX2xpc3QgIGFwKTsKICAgIGludCBmb3Jt KGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKCgoKCiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3Jl YWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJlYW1zaXplIHN5 c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBz eXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rpcik7CiAgICB2aXJ0dWFsIGludCBzeXNfY2xvc2Uo KTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAoKCgoKfTsKCiAKIAoKY2xhc3Mg ZmlsZWJ1ZiA6IHB1YmxpYyBzdHJlYW1idWYgewogIHByb3RlY3RlZDoKICAgIHZvaWQgaW5pdCgp OwogIHB1YmxpYzoKICAgIHN0YXRpYyBjb25zdCBpbnQgb3BlbnByb3Q7ICAKICAgIGZpbGVidWYo KTsKICAgIGZpbGVidWYoaW50IGZkKTsKICAgIGZpbGVidWYoaW50IGZkLCBjaGFyKiBwLCBpbnQg bGVuKTsKCgoKICAgIH5maWxlYnVmKCk7CiAgICBmaWxlYnVmKiBhdHRhY2goaW50IGZkKTsKICAg IGZpbGVidWYqIG9wZW4oY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOwog ICAgZmlsZWJ1Ziogb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW9zOjpvcGVubW9kZSBtb2Rl LCBpbnQgcHJvdCA9IDA2NjQpOwogICAgdmlydHVhbCBpbnQgdW5kZXJmbG93KCk7CiAgICB2aXJ0 dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkgKTsKICAgIGludCBpc19vcGVuKCkgY29uc3Qg eyByZXR1cm4gX2ZpbGVubyA+PSAwOyB9CiAgICBpbnQgZmQoKSBjb25zdCB7IHJldHVybiBpc19v cGVuKCkgPyBfZmlsZW5vIDogKC0xKSA7IH0KICAgIGZpbGVidWYqIGNsb3NlKCk7CiAgICB2aXJ0 dWFsIGludCBkb2FsbG9jYXRlKCk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzZWVrb2ZmKHN0cmVh bW9mZiwgX3NlZWtfZGlyLCBpbnQgbW9kZT1pb3M6OmlufGlvczo6b3V0KTsKICAgIHZpcnR1YWwg c3RyZWFtYnVmKiBzZXRidWYoY2hhciogcCwgaW50IGxlbik7CiAgICBzdHJlYW1zaXplIHhzcHV0 bihjb25zdCBjaGFyKiBzLCBzdHJlYW1zaXplIG4pOwogICAgc3RyZWFtc2l6ZSB4c2dldG4oY2hh ciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgaW50IHN5bmMoKTsKICBwcm90ZWN0ZWQ6 ICAKIAogICAgaW50IGlzX3JlYWRpbmcoKSB7IHJldHVybiBlYmFjaygpICE9IGVncHRyKCk7IH0K ICAgIGNoYXIqIGN1cl9wdHIoKSB7IHJldHVybiBpc19yZWFkaW5nKCkgPyAgZ3B0cigpIDogcHB0 cigpOyB9CiAgICAgCiAgICBjaGFyKiBmaWxlX3B0cigpIHsgcmV0dXJuIGVHcHRyKCk7IH0KICAg ICAKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUg c2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXBvcyBzeXNfc2VlayhzdHJlYW1vZmYsIF9zZWVrX2Rp cik7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJlYW1z aXplKTsKICAgIHZpcnR1YWwgaW50IHN5c19zdGF0KHZvaWQqKTsgIAogICAgdmlydHVhbCBpbnQg c3lzX2Nsb3NlKCk7CgoKCgp9OwoKaW5saW5lIHZvaWQgaW9zOjppbml0KHN0cmVhbWJ1Ziogc2Is IG9zdHJlYW0qIHRpZV90bykgewoJCV9zdGF0ZSA9IHNiID8gaW9zOjpnb29kYml0IDogaW9zOjpi YWRiaXQ7IF9leGNlcHRpb25zPTA7CgkJX3N0cmJ1Zj1zYjsgX3RpZSA9IHRpZV90bzsgX3dpZHRo PTA7IF9maWxsPScgJzsKCgkJX2ZsYWdzPWlvczo6c2tpcHdzfGlvczo6ZGVjOwoKCgoJCV9wcmVj aXNpb249NjsgX2FycmF5cyA9IDA7IH0KCmlubGluZSBpb3M6OmlvcyhzdHJlYW1idWYqIHNiLCBv c3RyZWFtKiB0aWVfdG8pIHsgaW5pdChzYiwgdGllX3RvKTsgfQoKaW5saW5lIGlvczo6fmlvcygp IHsKCgoKICAgICAKICAgICAKICAgIG9wZXJhdG9yIGRlbGV0ZVtdIChfYXJyYXlzKTsKfQp9ICAK CiMgMzEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4z Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvaW9zdHJlYW0uaCIgMiAzCgoKZXh0ZXJuICJDKysi IHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKdHlwZWRlZiBpb3MmICgqX19tYW5pcCko aW9zJik7CnR5cGVkZWYgaXN0cmVhbSYgKCpfX2ltYW5pcCkoaXN0cmVhbSYpOwp0eXBlZGVmIG9z dHJlYW0mICgqX19vbWFuaXApKG9zdHJlYW0mKTsKCmV4dGVybiBpc3RyZWFtJiB3cyhpc3RyZWFt JiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgZmx1c2gob3N0cmVhbSYgb3V0cyk7CmV4dGVybiBvc3Ry ZWFtJiBlbmRsKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kcyhvc3RyZWFtJiBv dXRzKTsKCmNsYXNzIG9zdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBpb3MKewogICAgIAogICAgdm9p ZCBkb19vc2Z4KCk7CiAgcHVibGljOgogICAgb3N0cmVhbSgpIHsgfQogICAgb3N0cmVhbShzdHJl YW1idWYqIHNiLCBvc3RyZWFtKiB0aWVkPSBfX251bGwgKTsKICAgIGludCBvcGZ4KCkgewoJaWYg KCFnb29kKCkpIHJldHVybiAwOwoJZWxzZSB7IGlmIChfdGllKSBfdGllLT5mbHVzaCgpOyAgOyBy ZXR1cm4gMTt9IH0KICAgIHZvaWQgb3NmeCgpIHsgIDsKCQkgIGlmIChmbGFncygpICYgKGlvczo6 dW5pdGJ1Znxpb3M6OnN0ZGlvKSkKCQkgICAgICBkb19vc2Z4KCk7IH0KICAgIG9zdHJlYW0mIGZs dXNoKCk7CiAgICBvc3RyZWFtJiBwdXQoY2hhciBjKSB7IF9zdHJidWYtPnNwdXRjKGMpOyByZXR1 cm4gKnRoaXM7IH0KCgoKCgogICAgb3N0cmVhbSYgd3JpdGUoY29uc3QgY2hhciAqcywgc3RyZWFt c2l6ZSBuKTsKICAgIG9zdHJlYW0mIHdyaXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnMsIHN0cmVh bXNpemUgbikKICAgICAgeyByZXR1cm4gd3JpdGUoKGNvbnN0IGNoYXIqKXMsIG4pO30KICAgIG9z dHJlYW0mIHdyaXRlKGNvbnN0IHNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsg cmV0dXJuIHdyaXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25z dCB2b2lkICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdyaXRlKChjb25zdCBjaGFy KilzLCBuKTt9CiAgICBvc3RyZWFtJiBzZWVrcChzdHJlYW1wb3MpOwogICAgb3N0cmVhbSYgc2Vl a3Aoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9zIHRlbGxwKCk7CiAgICBvc3Ry ZWFtJiBmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgb3N0cmVhbSYgdmZvcm0oY29u c3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBhcmdzKTsKCiAgICBvc3RyZWFtJiBvcGVyYXRv cjw8KGNoYXIgYyk7CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGNoYXIgYykgeyBy ZXR1cm4gKCp0aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KHNpZ25l ZCBjaGFyIGMpIHsgcmV0dXJuICgqdGhpcykgPDwgKGNoYXIpYzsgfQogICAgb3N0cmVhbSYgb3Bl cmF0b3I8PChjb25zdCBjaGFyICpzKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgdW5z aWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7IH0KICAg IG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgc2lnbmVkIGNoYXIgKnMpCgl7IHJldHVybiAoKnRo aXMpIDw8IChjb25zdCBjaGFyKilzOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IHZv aWQgKnApOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChpbnQgbik7CiAgICBvc3RyZWFtJiBvcGVy YXRvcjw8KHVuc2lnbmVkIGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBuKTsK ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBuKTsKCiAgICBfX2V4dGVuc2lv bl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwobG9uZyBsb25nIG4pOwogICAgX19leHRlbnNpb25fXyBv c3RyZWFtJiBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBuKTsKCiAgICBvc3RyZWFtJiBv cGVyYXRvcjw8KHNob3J0IG4pIHtyZXR1cm4gb3BlcmF0b3I8PCgoaW50KW4pO30KICAgIG9zdHJl YW0mIG9wZXJhdG9yPDwodW5zaWduZWQgc2hvcnQgbikge3JldHVybiBvcGVyYXRvcjw8KCh1bnNp Z25lZCBpbnQpbik7fQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoYm9vbCBiKSB7IHJldHVybiBv cGVyYXRvcjw8KChpbnQpYik7IH0KCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGRvdWJsZSBuKTsK ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZmxvYXQgbikgeyByZXR1cm4gb3BlcmF0b3I8PCgoZG91 YmxlKW4pOyB9CgoKCiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIG4pIHsgcmV0 dXJuIG9wZXJhdG9yPDwoKGRvdWJsZSluKTsgfQoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoX19v bWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhpcyk7IH0KICAgIG9zdHJlYW0mIG9wZXJh dG9yPDwoX19tYW5pcCBmdW5jKSB7KCpmdW5jKSgqdGhpcyk7IHJldHVybiAqdGhpczt9CiAgICBv c3RyZWFtJiBvcGVyYXRvcjw8KHN0cmVhbWJ1ZiopOwoKCgp9OwoKY2xhc3MgaXN0cmVhbSA6IHZp cnR1YWwgcHVibGljIGlvcwp7CiAgICAgCnByb3RlY3RlZDoKICAgIF9HX3NpemVfdCAgX2djb3Vu dDsKCiAgICBpbnQgX3NraXBfd3MoKTsKICBwdWJsaWM6CiAgICBpc3RyZWFtKCk6IF9nY291bnQg KDApIHsgfQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IF9fbnVsbCAp OwogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicp OwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxp bSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlz dHJlYW0mIGdldChjaGFyJiBjKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFyJiBjKSB7 IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKGNoYXIqIHB0ciwg aW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0bGluZSh1bnNpZ25l ZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0bGlu ZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBjaGFy JiBjKSAgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBj aGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0KChjaGFy KilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKHNpZ25lZCBjaGFyKiBw dHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0bGluZSgoY2hhciop cHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVhZChjaGFyICpwdHIsIHN0cmVhbXNp emUgbik7CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBu KQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiByZWFk KHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hh ciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpwdHIsIHN0cmVhbXNpemUgbikK ICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgZ2V0KHN0 cmVhbWJ1ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldHMoY2hhciAq KnMsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4KGludCBuZWVkID0gMCkgewoJaWYg KCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsK CSAgaWYgKF90aWUgJiYgKG5lZWQgPT0gMCB8fCByZGJ1ZigpLT5pbl9hdmFpbCgpIDwgbmVlZCkp IF90aWUtPmZsdXNoKCk7CgkgIGlmICghbmVlZCAmJiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSkg cmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICBpbnQgaXBm eDAoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJ ZWxzZSB7CgkgICA7CgkgIGlmIChfdGllKSBfdGllLT5mbHVzaCgpOwoJICBpZiAoZmxhZ3MoKSAm IGlvczo6c2tpcHdzKSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1cm4gMTsKCX0KICAg IH0KICAgIGludCBpcGZ4MSgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7 IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgcmRidWYoKS0+aW5fYXZh aWwoKSA9PSAwKSBfdGllLT5mbHVzaCgpOwoJICByZXR1cm4gMTsKCX0KICAgIH0KICAgIHZvaWQg aXNmeCgpIHsgIDsgfQogICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgpKSByZXR1cm4gKC0xKSA7 CgkJZWxzZSB7IGludCBjaCA9IF9zdHJidWYtPnNidW1wYygpOwoJCSAgICAgICBpZiAoY2ggPT0g KC0xKSApIHNldChpb3M6OmVvZmJpdCk7CgkJICAgICAgIGlzZngoKTsKCQkgICAgICAgcmV0dXJu IGNoOwoJCSAgICAgfSB9CiAgICBpbnQgcGVlaygpOwogICAgX0dfc2l6ZV90ICBnY291bnQoKSB7 IHJldHVybiBfZ2NvdW50OyB9CiAgICBpc3RyZWFtJiBpZ25vcmUoaW50IG49MSwgaW50IGRlbGlt ID0gKC0xKSApOwogICAgaW50IHN5bmMgKCk7CiAgICBpc3RyZWFtJiBzZWVrZyhzdHJlYW1wb3Mp OwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgc3RyZWFtcG9z IHRlbGxnKCk7CiAgICBpc3RyZWFtJiBwdXRiYWNrKGNoYXIgY2gpIHsKCWlmIChnb29kKCkgJiYg X3N0cmJ1Zi0+c3B1dGJhY2tjKGNoKSA9PSAoLTEpICkgY2xlYXIoaW9zOjpiYWRiaXQpOwoJcmV0 dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIHVuZ2V0KCkgewoJaWYgKGdvb2QoKSAmJiBfc3RyYnVm LT5zdW5nZXRjKCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0KTsKCXJldHVybiAqdGhpczt9 CiAgICBpc3RyZWFtJiBzY2FuKGNvbnN0IGNoYXIgKmZvcm1hdCAuLi4pOwogICAgaXN0cmVhbSYg dnNjYW4oY29uc3QgY2hhciAqZm9ybWF0LCBfR192YV9saXN0ICBhcmdzKTsKCgoKCgoKICAgIGlz dHJlYW0mIG9wZXJhdG9yPj4oY2hhciopOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25l ZCBjaGFyKiBwKSB7IHJldHVybiBvcGVyYXRvcj4+KChjaGFyKilwKTsgfQogICAgaXN0cmVhbSYg b3BlcmF0b3I+PihzaWduZWQgY2hhcipwKSB7IHJldHVybiBvcGVyYXRvcj4+KChjaGFyKilwKTsg fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyJiBjKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9y Pj4odW5zaWduZWQgY2hhciYgYykge3JldHVybiBvcGVyYXRvcj4+KChjaGFyJiljKTt9CiAgICBp c3RyZWFtJiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4oKGNo YXImKWMpO30KICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oaW50Jik7CiAgICBpc3RyZWFtJiBvcGVy YXRvcj4+KGxvbmcmKTsKCiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9yPj4obG9u ZyBsb25nJik7CiAgICBfX2V4dGVuc2lvbl9fIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5zaWduZWQg bG9uZyBsb25nJik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihzaG9ydCYpOwogICAgaXN0cmVh bSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4odW5z aWduZWQgbG9uZyYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYpOwoK ICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oYm9vbCYpOwoKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4o ZmxvYXQmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oZG91YmxlJik7CiAgICBpc3RyZWFtJiBv cGVyYXRvcj4+KGxvbmcgZG91YmxlJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KCBfX21hbmlw IGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAgIGlzdHJlYW0mIG9wZXJh dG9yPj4oX19pbWFuaXAgZnVuYykgeyByZXR1cm4gKCpmdW5jKSgqdGhpcyk7IH0KICAgIGlzdHJl YW0mIG9wZXJhdG9yPj4oc3RyZWFtYnVmKik7Cn07CgpjbGFzcyBpb3N0cmVhbSA6IHB1YmxpYyBp c3RyZWFtLCBwdWJsaWMgb3N0cmVhbQp7CiAgcHVibGljOgogICAgaW9zdHJlYW0oKSB7IH0KICAg IGlvc3RyZWFtKHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qdGllZD0gX19udWxsICk7Cn07CgpjbGFz cyBfSU9faXN0cmVhbV93aXRoYXNzaWduIDogcHVibGljIGlzdHJlYW0gewpwdWJsaWM6CiAgX0lP X2lzdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KGlzdHJlYW0mKTsKICBfSU9faXN0cmVhbV93 aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQogICAgeyBy ZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxpc3RyZWFtJj4gKHJocykpOyB9Cn07CgpjbGFz cyBfSU9fb3N0cmVhbV93aXRoYXNzaWduIDogcHVibGljIG9zdHJlYW0gewpwdWJsaWM6CiAgX0lP X29zdHJlYW1fd2l0aGFzc2lnbiYgb3BlcmF0b3I9KG9zdHJlYW0mKTsKICBfSU9fb3N0cmVhbV93 aXRoYXNzaWduJiBvcGVyYXRvcj0oX0lPX29zdHJlYW1fd2l0aGFzc2lnbiYgcmhzKQogICAgeyBy ZXR1cm4gb3BlcmF0b3I9IChzdGF0aWNfY2FzdDxvc3RyZWFtJj4gKHJocykpOyB9Cn07CgpleHRl cm4gX0lPX2lzdHJlYW1fd2l0aGFzc2lnbiBjaW47CiAKZXh0ZXJuIF9JT19vc3RyZWFtX3dpdGhh c3NpZ24gY291dCwgY2VycjsKCmV4dGVybiBfSU9fb3N0cmVhbV93aXRoYXNzaWduIGNsb2cKCgoK OwoKZXh0ZXJuIGlzdHJlYW0mIGxvY2soaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIGlzdHJlYW0mIHVu bG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gb3N0cmVhbSYgbG9jayhvc3RyZWFtJiBvdXRzKTsK ZXh0ZXJuIG9zdHJlYW0mIHVubG9jayhvc3RyZWFtJiBvdXRzKTsKCnN0cnVjdCBJb3N0cmVhbV9p bml0IHsgfSA7ICAgCgppbmxpbmUgaW9zJiBkZWMoaW9zJiBpKQp7IGkuc2V0Zihpb3M6OmRlYywg aW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBoZXgo aW9zJiBpKQp7IGkuc2V0Zihpb3M6OmhleCwgaW9zOjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyBy ZXR1cm4gaTsgfQppbmxpbmUgaW9zJiBvY3QoaW9zJiBpKQp7IGkuc2V0Zihpb3M6Om9jdCwgaW9z OjpkZWN8aW9zOjpoZXh8aW9zOjpvY3QpOyByZXR1cm4gaTsgfQp9ICAKCgojIDUzICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr Ky0zL3N0bF9pdGVyYXRvci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK CgogCgpzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9y X3RhZyB7fTsKc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDogcHVibGljIGlucHV0X2l0ZXJh dG9yX3RhZyB7fTsKc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIDogcHVibGljIGZv cndhcmRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcg OiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcge307CgogCiAKIAogCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7CiAg dHlwZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBf VHAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSAgICAgICAg ICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgcG9pbnRlcjsK ICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07CgpzdHJ1Y3Qgb3V0cHV0 X2l0ZXJhdG9yIHsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv cnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2 b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAg ICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNl Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgZm9yd2Fy ZF9pdGVyYXRvciB7CiAgdHlwZWRlZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl Z29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRl ZiBfRGlzdGFuY2UgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAg ICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgcmVm ZXJlbmNlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0 IGJpZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRv cl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAg ICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAgICAgICAgZGlm ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRl cjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IHJhbmRvbV9hY2Nlc3Nf aXRlcmF0b3IgewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3Jf Y2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBl OwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwog IHR5cGVkZWYgX1RwKiAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9U cCYgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCiMgOTggIi91c3IvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+ CnN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpp dGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9J dGVyYXRvcjo6dmFsdWVfdHlwZSAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1l IF9JdGVyYXRvcjo6ZGlmZmVyZW5jZV90eXBlICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYg dHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYg dHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgICAgICAgICByZWZlcmVuY2U7Cn07Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsKICB0eXBlZGVm IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYg X1RwICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZm X3QgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAg ICAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAg ICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGl0ZXJh dG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9y X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAg ICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90ICAgICAgICAgICAgICAgICAgIGRp ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogICAgICAgICAgICAgICAgICBwb2lu dGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsK CiAKIAogCiAKCiAKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cl9faXRlcmF0b3JfY2F0ZWdvcnko Y29uc3QgX0l0ZXImKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+ OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAgcmV0dXJuIF9DYXRlZ29yeSgpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0 ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCl9fZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYpCnsKICBy ZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVy ZW5jZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqCl9fdmFsdWVfdHlwZShjb25zdCBf SXRlciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J dGVyPjo6dmFsdWVfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQppdGVyYXRv cl9jYXRlZ29yeShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX2l0ZXJhdG9yX2NhdGVnb3J5 KF9faSk7IH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0 ZXImIF9faSkgeyByZXR1cm4gX19kaXN0YW5jZV90eXBlKF9faSk7IH0KCnRlbXBsYXRlIDxjbGFz cyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5 cGUqCnZhbHVlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX192YWx1ZV90eXBlKF9f aSk7IH0KCgoKCgojIDI1OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfaXRlcmF0b3IuaCIgMwoK CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUg dm9pZCBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgaW5wdXRfaXRlcmF0 b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7ICsrX19maXJzdDsgKytfX247 IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh bmNlPgppbmxpbmUgdm9pZCBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0 LCAKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCAK ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2FjY2Vzc19pdGVy YXRvcl90YWcpCnsKICBfX24gKz0gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGRpc3RhbmNlKF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRv ciBfX2xhc3QsIF9EaXN0YW5jZSYgX19uKQp7CiAgX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qs IF9fbiwgaXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy YXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7 CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fZmlyc3Q7ICsrX19uOwogIH0K ICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgpp bmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRp ZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRl cmF0b3JfdGFnKSB7CiAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ dGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5IAogICAgX0NhdGVnb3J5Owog IHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwp9CgoKCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9f YWR2YW5jZShfSW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5jZSBfX24sIGlucHV0X2l0ZXJhdG9yX3Rh ZykgewogIHdoaWxlIChfX24tLSkgKytfX2k7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGly ZWN0aW9uYWxJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2Uo X0JpZGlyZWN0aW9uYWxJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLCAKICAgICAgICAgICAg ICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgaWYgKF9fbiA+PSAwKQog ICAgd2hpbGUgKF9fbi0tKSArK19faTsKICBlbHNlCiAgICB3aGlsZSAoX19uKyspIC0tX19pOwp9 CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh bmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ksIF9E aXN0YW5jZSBfX24sIAogICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRv cl90YWcpIHsKICBfX2kgKz0gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3Is IGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYgX19p LCBfRGlzdGFuY2UgX19uKSB7CiAgX19hZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRlZ29y eShfX2kpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGJhY2tfaW5zZXJ0 X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKcHVibGljOgog IHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAgICBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91 dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAg ICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZl cmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBl ZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBleHBsaWNpdCBiYWNrX2luc2Vy dF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHt9CiAgYmFja19p bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9D b250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsgCiAgICBjb250YWluZXItPnB1c2hfYmFj ayhfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8 X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgYmFja19pbnNlcnRf aXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGJh Y2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4g KnRoaXM7IH0KfTsKCiMgMzc4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAz CgoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmlubGluZSBiYWNrX2luc2VydF9pdGVyYXRv cjxfQ29udGFpbmVyPiBiYWNrX2luc2VydGVyKF9Db250YWluZXImIF9feCkgewogIHJldHVybiBi YWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0NvbnRhaW5lcj4KY2xhc3MgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9D b250YWluZXIqIGNvbnRhaW5lcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciAgICAgICAg ICBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3Jf Y2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlw ZWRlZiB2b2lkICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQg ICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgcmVm ZXJlbmNlOwoKICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194 KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy PiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFsdWVfdHlwZSYgX192 YWx1ZSkgeyAKICAgIGNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgIHJldHVybiAq dGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcioo KSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYg b3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9D b250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCiMgNDE3ICIv dXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8u Li8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9D b250YWluZXI+CmlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gZnJvbnRf aW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRv cjxfQ29udGFpbmVyPihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3Mg aW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKICB0 eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29u dGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9y X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFs dWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwog IHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAg ICAgICAgICAgICByZWZlcmVuY2U7CgogIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gs IHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkgCiAgICA6IGNvbnRhaW5lcigmX194 KSwgaXRlcihfX2kpIHt9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9y PShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7IAogICAg aXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOwogICAgKytpdGVyOwogICAg cmV0dXJuICp0aGlzOwogIH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9y KigpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVy YXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4m IG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoKIyA0NTkgIi91c3IvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lciwg Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgCmluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBpbnNl cnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCnsKICB0eXBlZGVmIHR5cGVuYW1l IF9Db250YWluZXI6Oml0ZXJhdG9yIF9faXRlcjsKICByZXR1cm4gaW5zZXJ0X2l0ZXJhdG9yPF9D b250YWluZXI+KF9feCwgX19pdGVyKF9faSkpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj dGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5jZSA9IF9UcCYsIAogICAg ICAgICAgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90PiAKCgoKCmNsYXNzIHJldmVyc2VfYmlk aXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRl cmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgX1RwLCAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+ICBfU2VsZjsKcHJvdGVj dGVkOgogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYg YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBf VHAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNl ICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiAgICAgICAg ICAgICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgICAgICAgICAgICAg ICAgIHJlZmVyZW5jZTsKCiAgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKCkge30KICBl eHBsaWNpdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoX0JpZGlyZWN0aW9uYWxJdGVy YXRvciBfX3gpCiAgICA6IGN1cnJlbnQoX194KSB7fQogIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3Ig YmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICBfUmVmZXJlbmNlIG9wZXJhdG9yKigp IGNvbnN0IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAg cmV0dXJuICotLV9fdG1wOwogIH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1 cm4gJihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJl bnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBf U2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0K ICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsK ICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAg ICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKIyA1NTAgIi91c3IvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1 ZGUvZysrLTMvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpSXRlciwgY2xh c3MgX1RwLCBjbGFzcyBfUmVmLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9v bCBvcGVyYXRvcj09KAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9C aUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX194LCAKICAgIGNvbnN0IHJldmVyc2VfYmlk aXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlJdGVyLCBfVHAsIF9SZWYsIF9EaXN0YW5jZT4mIF9feSkK ewogIHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7Cn0KCgoKIAogCiAKIAogCgp0ZW1w bGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpjbGFzcyByZXZlcnNlX2l0ZXJhdG9yIAp7CnByb3RlY3Rl ZDoKICBfSXRlcmF0b3IgY3VycmVudDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICBpdGVyYXRv cl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+ Ojp2YWx1ZV90eXBlCiAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgZGlmZmVy ZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46 OnBvaW50ZXIKICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlCiAgICAgICAgICByZWZlcmVuY2U7CgogIHR5cGVk ZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5cGU7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9J dGVyYXRvcj4gX1NlbGY7CgpwdWJsaWM6CiAgcmV2ZXJzZV9pdGVyYXRvcigpIHt9CiAgZXhwbGlj aXQgcmV2ZXJzZV9pdGVyYXRvcihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkge30K CiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBfU2VsZiYgX194KSA6IGN1cnJlbnQoX194LmN1cnJl bnQpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0 IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICA6IGN1cnJlbnQoX194LmJhc2UoKSkg e30KCiAgICAKICBpdGVyYXRvcl90eXBlIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9 CiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIF9JdGVyYXRvciBfX3RtcCA9IGN1 cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQoKICBwb2ludGVyIG9wZXJhdG9yLT4oKSBj b25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7 CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKyso aW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJu IF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJl dHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1w ID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBfU2VsZiBv cGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJuIF9TZWxmKGN1 cnJlbnQgLSBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19u KSB7CiAgICBjdXJyZW50IC09IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3Bl cmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBfU2VsZihjdXJy ZW50ICsgX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9fbikg ewogICAgY3VycmVudCArPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIHJlZmVyZW5jZSBv cGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRoaXMgKyBf X24pOyB9ICAKfTsgCiAKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3Bl cmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsK ICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0 ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl cmF0b3I+JiBfX3gsIAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRv cjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0ZXJh dG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9p dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsIAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRv cjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNlKCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy YXRvcj4gCm9wZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRp ZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVy YXRvcj4mIF9feCkgewogIHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJh c2UoKSAtIF9fbik7Cn0KCiMgODA1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5o IiAzCgoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdCA9IHB0cmRpZmZfdD4g CmNsYXNzIGlzdHJlYW1faXRlcmF0b3IgewogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gPD4gIChj b25zdCBpc3RyZWFtX2l0ZXJhdG9yJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJik7CnByb3RlY3RlZDoKICBpc3Ry ZWFtKiBfTV9zdHJlYW07CiAgX1RwIF9NX3ZhbHVlOwogIGJvb2wgX01fZW5kX21hcmtlcjsKICB2 b2lkIF9NX3JlYWQoKSB7CiAgICBfTV9lbmRfbWFya2VyID0gKCpfTV9zdHJlYW0pID8gdHJ1ZSA6 IGZhbHNlOwogICAgaWYgKF9NX2VuZF9tYXJrZXIpICpfTV9zdHJlYW0gPj4gX01fdmFsdWU7CiAg ICBfTV9lbmRfbWFya2VyID0gKCpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogIH0KcHVibGlj OgogIHR5cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnICBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl ZGVmIF9UcCAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0ICAgICAg ICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgY29uc3QgX1RwKiAgICAgICAgICBw b2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiAgICAgICAgICByZWZlcmVuY2U7CgogIGlzdHJl YW1faXRlcmF0b3IoKSA6IF9NX3N0cmVhbSgmY2luKSwgX01fZW5kX21hcmtlcihmYWxzZSkge30K ICBpc3RyZWFtX2l0ZXJhdG9yKGlzdHJlYW0mIF9fcykgOiBfTV9zdHJlYW0oJl9fcykgeyBfTV9y ZWFkKCk7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX01fdmFsdWU7 IH0KCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7 IH0KCiAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0PiYgb3BlcmF0b3IrKygpIHsgCiAgICBf TV9yZWFkKCk7IAogICAgcmV0dXJuICp0aGlzOwogIH0KICBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwg X0Rpc3Q+IG9wZXJhdG9yKysoaW50KSAgewogICAgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0 PiBfX3RtcCA9ICp0aGlzOwogICAgX01fcmVhZCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsK CiMgODY0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUu My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0 IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdGFuY2U+JiBfX3gsCiAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0YW5jZT4mIF9feSkgewogIHJl dHVybiAoX194Ll9NX3N0cmVhbSA9PSBfX3kuX01fc3RyZWFtICYmCiAgICAgICAgICBfX3guX01f ZW5kX21hcmtlciA9PSBfX3kuX01fZW5kX21hcmtlcikgfHwKICAgICAgICAgX194Ll9NX2VuZF9t YXJrZXIgPT0gZmFsc2UgJiYgX195Ll9NX2VuZF9tYXJrZXIgPT0gZmFsc2U7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfVHA+CmNsYXNzIG9zdHJlYW1faXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgb3N0cmVh bSogX01fc3RyZWFtOwogIGNvbnN0IGNoYXIqIF9NX3N0cmluZzsKcHVibGljOgogIHR5cGVkZWYg b3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAg ICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlm ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5 cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIG9zdHJlYW1faXRlcmF0b3Io b3N0cmVhbSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9CiAgb3N0cmVh bV9pdGVyYXRvcihvc3RyZWFtJiBfX3MsIGNvbnN0IGNoYXIqIF9fYykgCiAgICA6IF9NX3N0cmVh bSgmX19zKSwgX01fc3RyaW5nKF9fYykgIHt9CiAgb3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVy YXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVlKSB7IAogICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVlOwog ICAgaWYgKF9NX3N0cmluZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICByZXR1cm4gKnRo aXM7CiAgfQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRo aXM7IH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhp czsgfSAKICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAq dGhpczsgfSAKfTsKCiMgOTA3ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9pdGVyYXRvci5oIiAz CgoKIAoKCgogCiAKIAojIDU2ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGdvYmFzZS5oIiAy IDMKCgoKIAoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJk SXRlcjIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBf X2EsIF9Gb3J3YXJkSXRlcjIgX19iLCBfVHAqKSB7CiAgX1RwIF9fdG1wID0gKl9fYTsKICAqX19h ID0gKl9fYjsKICAqX19iID0gX190bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIx LCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgdm9pZCBpdGVyX3N3YXAoX0ZvcndhcmRJdGVy MSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iKSB7CiAgX19pdGVyX3N3YXAoX19hLCBfX2IsIF9fdmFs dWVfdHlwZSggX19hICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgc3dh cChfVHAmIF9fYSwgX1RwJiBfX2IpIHsKICBfVHAgX190bXAgPSBfX2E7CiAgX19hID0gX19iOwog IF9fYiA9IF9fdG1wOwp9CgogCiAKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNv bnN0IF9UcCYgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikgewogIHJldHVybiBf X2IgPCBfX2EgPyBfX2IgOiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBjb25z dCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IpIHsKICByZXR1cm4gIF9f YSA8IF9fYiA/IF9fYiA6IF9fYTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29t cGFyZT4KaW5saW5lIGNvbnN0IF9UcCYgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9f YiwgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0dXJuIF9fY29tcChfX2IsIF9fYSkgPyBfX2IgOiBf X2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3Qg X1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXAp IHsKICByZXR1cm4gX19jb21wKF9fYSwgX19iKSA/IF9fYiA6IF9fYTsKfQoKIAogCgogCiAKIAog CiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNs YXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weShfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ dGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3Rh ZywgX0Rpc3RhbmNlKikKewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19yZXN1bHQs ICsrX19maXJzdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsK fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwg Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIKX19jb3B5KF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgIF9PdXRwdXRJdGVy IF9fcmVzdWx0LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZv ciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKSB7CiAg ICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7CiAg fQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIF9UcCoK X19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1Rw KiBfX3Jlc3VsdCkgewogIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICog KF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJz dCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBj bGFzcyBfQm9vbFR5cGU+CnN0cnVjdCBfX2NvcHlfZGlzcGF0Y2ggewogIHN0YXRpYyBfT3V0cHV0 SXRlciBjb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0 ZWdvcnk7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6 ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgIHJldHVybiBfX2NvcHkoX19maXJzdCwgX19s YXN0LCBfX3Jlc3VsdCwgX0NhdGVnb3J5KCksIChfRGlzdGFuY2UqKSAwKTsKICB9Cn07Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1 ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9U cCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19m aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry dWN0IF9fY29weV9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0 YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1Rw KiBfX3Jlc3VsdCkgewogICAgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwg X19yZXN1bHQpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0 cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQpIHsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFs dWVfdHlwZSBfVHA7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogIHJldHVybiBf X2NvcHlfZGlzcGF0Y2g8X0lucHV0SXRlciwgX091dHB1dEl0ZXIsIF9Ucml2aWFsPgogICAgOjpj b3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9CgojIDIxMyAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n KystMy9zdGxfYWxnb2Jhc2UuaCIgMwoKCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv bmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsIAogICAgICAgICAgY2xhc3MgX0Rp c3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2NvcHlfYmFja3dhcmQoX0JpZGly ZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LCAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0 ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E aXN0YW5jZSopCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAqLS1fX3Jlc3VsdCA9 ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t QWNjZXNzSXRlciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cmlu bGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgZm9yIChf RGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAqLS1f X3Jlc3VsdCA9ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKIAogCiAKIAoKdGVt cGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl cjIsCiAgICAgICAgICBjbGFzcyBfQm9vbFR5cGU+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlz cGF0Y2gKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFs SXRlcjE+OjppdGVyYXRvcl9jYXRlZ29yeSAKICAgICAgICAgIF9DYXQ7CiAgdHlwZWRlZiB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46OmRpZmZlcmVuY2VfdHlw ZQogICAgICAgICAgX0Rpc3RhbmNlOwoKICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJdGVyMiBjb3B5 KF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KSB7CiAgICByZXR1cm4g X19jb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9DYXQoKSwgKF9EaXN0 YW5jZSopIDApOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfYmFj a3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBj b3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQp IHsKICAgIGNvbnN0IHB0cmRpZmZfdCBfTnVtID0gX19sYXN0IC0gX19maXJzdDsKICAgIG1lbW1v dmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIF9OdW0pOwogICAgcmV0 dXJuIF9fcmVzdWx0IC0gX051bTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg X19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7 CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0 LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxf VHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y ZXN1bHQpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQkkxLCBjbGFzcyBfQkkyPgppbmxpbmUg X0JJMiBjb3B5X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1 bHQpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9CSTI+Ojp2YWx1ZV90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogIHJldHVybiBf X2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAg ICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9CgojIDMwMyAiL3Vzci9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5j bHVkZS9nKystMy9zdGxfYWxnb2Jhc2UuaCIgMwoKCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KcGFpcjxfSW5wdXRJdGVyLCBf T3V0cHV0SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf dGFnKSB7CiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1fX2NvdW50KSB7CiAgICAqX19yZXN1bHQg PSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBw YWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2ZpcnN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGlu ZSBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfUkFJdGVyIF9fZmlyc3QsIF9T aXplIF9fY291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICByYW5k b21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0ZXIgX19sYXN0ID0gX19maXJzdCArIF9f Y291bnQ7CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+KF9fbGFzdCwgY29weShf X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy LCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIs IF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQs IF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291 bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2Zp cnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFz cyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+CmNvcHlf bihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0 KSB7CiAgcmV0dXJuIF9fY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0KTsKfQoKIAog CgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIGZpbGwoX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1 ZSkgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICpfX2ZpcnN0 ID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfU2l6ZSwg Y2xhc3MgX1RwPgpfT3V0cHV0SXRlciBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUg X19uLCBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19f Zmlyc3QpCiAgICAqX19maXJzdCA9IF9fdmFsdWU7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCiAKIAoK dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KcGFpcjxfSW5w dXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly c3QyKSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpfX2Zp cnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVybiBwYWly PF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVBy ZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0 ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgd2hpbGUgKF9fZmlyc3Qx ICE9IF9fbGFzdDEgJiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAg ICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVy MSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0 ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5w dXRJdGVyMiBfX2ZpcnN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2Zp cnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICgqX19maXJzdDEgIT0gKl9fZmlyc3QyKQogICAgICBy ZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBib29s IGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFy eV9wcmVkKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19f Zmlyc3QyKQogICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAg ICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9CgogCiAKIAoKdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29t cGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s YXN0MikgewogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh c3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICBpZiAoKl9fZmlyc3Qx IDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICgqX19maXJzdDIgPCAqX19m aXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFz dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgbGV4aWNvZ3JhcGhpY2Fs X2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7 CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAg ICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qx LCAqX19maXJzdDIpKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qy LCAqX19maXJzdDEpKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2ZpcnN0MSA9 PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCmlubGluZSBib29sIApsZXhpY29n cmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsCiAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsKICBjb25zdCBzaXplX3Qg X19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xh c3QyIC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBf X2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBf X3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7Cn0KCmlubGluZSBib29sIGxleGljb2dyYXBo aWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0Miwg Y29uc3QgY2hhciogX19sYXN0MikKewoKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUo KGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoKCgoK fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW50IF9f bGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0 SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewogIHdoaWxlIChfX2ZpcnN0MSAh PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19maXJzdDEgPCAq X19maXJzdDIpCiAgICAgIHJldHVybiAtMTsKICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEp CiAgICAgIHJldHVybiAxOwogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIGlm IChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7CiAgICByZXR1cm4gIShfX2ZpcnN0MSA9PSBfX2xhc3Qx KTsKICB9CiAgZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9CgppbmxpbmUgaW50Cl9fbGV4aWNv Z3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2Zp cnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq IF9fbGFzdDIpCnsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3Qx OwogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgY29uc3Qg aW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19s ZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCAKICAgICAgICAgICAgICAg ICAgICAgICA6IChfX2xlbjEgPT0gX19sZW4yID8gMCA6IChfX2xlbjEgPCBfX2xlbjIgPyAtMSA6 IDEpKTsKfQoKaW5saW5lIGludCAKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0 IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsK CiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheSgKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3Qy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9f bGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1 dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2Zp cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKICByZXR1cm4g X19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0 MiwgX19sYXN0Mik7Cn0KCiAKCgoKIAogCiAKIyAzMCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy92ZWN0 b3IiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAxIDMKIAoKCgoK CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKIAogCiAKIAoKCgoKCgoKCgoKCgoKIyAx ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNs dWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0MiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgojIDUzICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9p bmNsdWRlL2crKy0zL3N0bF9hbGxvYy5oIiAyIDMKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9zcGFyYy1zdW4tc29s YXJpczIuOC9pbmNsdWRlL2Fzc2VydC5oIiAxIDMgNAogCgoKCgoKCiMgNTQgIi91c3IvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL3NwYXJj LXN1bi1zb2xhcmlzMi44L2luY2x1ZGUvYXNzZXJ0LmgiIDMgNAoKIyA1NiAiL3Vzci9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9zdGxfYWxsb2MuaCIgMiAzCgoKCgoKCgoKCgoKIyA3OCAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n KystMy9zdGxfYWxsb2MuaCIgMwoKIyA4NyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2Mu aCIgMwoKIyA5NyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8y Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYWxsb2MuaCIgMwoKIyAxMTUgIi91 c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4u Ly4uL2luY2x1ZGUvZysrLTMvc3RsX2FsbG9jLmgiIDMKCgogCgoKCgoKCiAKCgoKCgogCiAKCgoK CgoKCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl IHsKCnByaXZhdGU6CgogIHN0YXRpYyB2b2lkKiBfU19vb21fbWFsbG9jKHNpemVfdCk7CiAgc3Rh dGljIHZvaWQqIF9TX29vbV9yZWFsbG9jKHZvaWQqLCBzaXplX3QpOwoKCiAgc3RhdGljIHZvaWQg KCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7CgoKcHVibGljOgoKICBzdGF0aWMgdm9p ZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhf X24pOwogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24p OwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lk KiBfX3AsIHNpemVfdCAgKQogIHsKICAgIGZyZWUoX19wKTsKICB9CgogIHN0YXRpYyB2b2lkKiBy ZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICAsIHNpemVfdCBfX25ld19zeikKICB7CiAgICB2 b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICBpZiAoMCA9PSBfX3Jl c3VsdCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIHJldHVy biBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5kbGVyKHZv aWQgKCpfX2YpKCkpKSgpCiAgewogICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9j X29vbV9oYW5kbGVyOwogICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICBy ZXR1cm4oX19vbGQpOwogIH0KCn07CgogCgoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZvaWQgKCog X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxsb2Nfb29tX2hhbmRs ZXIpKCkgPSAwOwoKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKgpfX21hbGxvY19hbGxvY190 ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCog X19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAoOzsp IHsKICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRs ZXI7CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyBjZXJyIDw8ICJvdXQg b2YgbWVtb3J5IiA8PCBlbmRsOyBleGl0KDEpIDsgfQogICAgICAgICgqX19teV9tYWxsb2NfaGFu ZGxlcikoKTsKICAgICAgICBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmIChfX3Jl c3VsdCkgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KfQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnZv aWQqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9jKHZvaWQq IF9fcCwgc2l6ZV90IF9fbikKewogICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwog ICAgdm9pZCogX19yZXN1bHQ7CgogICAgZm9yICg7OykgewogICAgICAgIF9fbXlfbWFsbG9jX2hh bmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBpZiAoMCA9PSBfX215 X21hbGxvY19oYW5kbGVyKSB7IGNlcnIgPDwgIm91dCBvZiBtZW1vcnkiIDw8IGVuZGw7IGV4aXQo MSkgOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0 ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1 bHQpOwogICAgfQp9Cgp0eXBlZGVmIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPDA+IG1hbGxvY19h bGxvYzsKCnRlbXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBzaW1wbGVfYWxs b2MgewoKcHVibGljOgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAg eyByZXR1cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6 ZW9mIChfVHApKTsgfQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkKICAgICAgeyByZXR1 cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZv aWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAhPSBfX24p IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAgIHN0YXRp YyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9f cCwgc2l6ZW9mIChfVHApKTsgfQp9OwoKIAogCiAKIAogCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+ CmNsYXNzIGRlYnVnX2FsbG9jIHsKCnByaXZhdGU6CgogIGVudW0ge19TX2V4dHJhID0gOH07ICAg CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAoKcHVi bGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBf X3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIF9TX2V4dHJhKTsKICAgICoo c2l6ZV90KilfX3Jlc3VsdCA9IF9fbjsKICAgIHJldHVybiBfX3Jlc3VsdCArIF9TX2V4dHJhOwog IH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgewog ICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gX1NfZXh0cmE7CiAgICAoKHZvaWQpIDAp IDsKICAgIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgX1NfZXh0cmEpOwogIH0K CiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNp emVfdCBfX25ld19zeikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSBfU19l eHRyYTsKICAgICgodm9pZCkgMCkgOwogICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopCiAgICAg IF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyBfU19leHRyYSwgX19uZXdf c3ogKyBfU19leHRyYSk7CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAgIHJl dHVybiBfX3Jlc3VsdCArIF9TX2V4dHJhOwogIH0KCn07CgoKCgoKCgoKCgogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKCiAKIAogCiAKIAogCiAKIAogCgoKCgoKCgp0ZW1wbGF0ZSA8Ym9vbCB0 aHJlYWRzLCBpbnQgaW5zdD4KY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlIHsKCnByaXZh dGU6CiAgIAogICAKCiAgICBlbnVtIHtfQUxJR04gPSA4fTsKICAgIGVudW0ge19NQVhfQllURVMg PSAxMjh9OwogICAgZW51bSB7X05GUkVFTElTVFMgPSBfTUFYX0JZVEVTL19BTElHTn07CgogIHN0 YXRpYyBzaXplX3QKICBfU19yb3VuZF91cChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgo KF9fYnl0ZXMpICsgX0FMSUdOLTEpICYgfihfQUxJR04gLSAxKSk7IH0KCnByaXZhdGUgOgogIHVu aW9uIF9PYmogewogICAgICAgIHVuaW9uIF9PYmoqIF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAg IGNoYXIgX01fY2xpZW50X2RhdGFbMV07ICAgICAKICB9Owpwcml2YXRlOgoKCgoKICAgIHN0YXRp YyBfT2JqKiAgIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgogIHN0YXRpYyAgc2l6ZV90IF9T X2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKSB7CiAgICAgICAgcmV0dXJuICgoKF9fYnl0 ZXMpICsgX0FMSUdOLTEpL19BTElHTiAtIDEpOwogIH0KCiAgIAogIHN0YXRpYyB2b2lkKiBfU19y ZWZpbGwoc2l6ZV90IF9fbik7CiAgIAogICAKICBzdGF0aWMgY2hhciogX1NfY2h1bmtfYWxsb2Mo c2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCiAgIAogIHN0YXRpYyBjaGFyKiBfU19zdGFy dF9mcmVlOwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICBzdGF0aWMgc2l6ZV90IF9TX2hl YXBfc2l6ZTsKCgoKCgoKCgoKCgoKCgoKIyAzODkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Fs bG9jLmgiIDMKCgogICAgY2xhc3MgX0xvY2sgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAg X0xvY2soKSB7ICA7IH0KICAgICAgICAgICAgfl9Mb2NrKCkgeyAgOyB9CiAgICB9OwogICAgZnJp ZW5kIGNsYXNzIF9Mb2NrOwoKcHVibGljOgoKICAgCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNp emVfdCBfX24pCiAgewogICAgX09iaiogICogX19teV9mcmVlX2xpc3Q7CiAgICBfT2JqKiAgIF9f cmVzdWx0OwoKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0 dXJuKG1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19uKSk7CiAgICB9CiAgICBfX215X2ZyZWVfbGlz dCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAgCiAgICAgCiAg ICAgCgoKCgogICAgX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7CiAgICBpZiAoX19yZXN1bHQg PT0gMCkgewogICAgICAgIHZvaWQqIF9fciA9IF9TX3JlZmlsbChfU19yb3VuZF91cChfX24pKTsK ICAgICAgICByZXR1cm4gX19yOwogICAgfQogICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQg LT4gX01fZnJlZV9saXN0X2xpbms7CiAgICByZXR1cm4gKF9fcmVzdWx0KTsKICB9OwoKICAgCiAg c3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgewogICAgX09i aiogX19xID0gKF9PYmoqKV9fcDsKICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0OwoKICAgIGlm IChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgbWFsbG9jX2FsbG9jOjpkZWFs bG9jYXRlKF9fcCwgX19uKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBfX215X2ZyZWVfbGlz dCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAgCgoKCgogICAg X19xIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgKl9fbXlfZnJl ZV9saXN0ID0gX19xOwogICAgIAogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCog X19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeik7Cgp9IDsKCnR5cGVkZWYgX19k ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPCBmYWxzZSAsIDA+IGFsbG9jOwp0eXBlZGVmIF9fZGVmYXVs dF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwgMD4gc2luZ2xlX2NsaWVudF9hbGxvYzsKCgoKIAogCiAK IAp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqCl9fZGVmYXVsdF9h bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBf X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCYgX19ub2JqcykKewogICAgY2hhciogX19yZXN1bHQ7CiAgICBzaXplX3Qg X190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICBzaXplX3QgX19ieXRlc19sZWZ0 ID0gX1NfZW5kX2ZyZWUgLSBfU19zdGFydF9mcmVlOwoKICAgIGlmIChfX2J5dGVzX2xlZnQgPj0g X190b3RhbF9ieXRlcykgewogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAg ICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0 KTsKICAgIH0gZWxzZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkgewogICAgICAgIF9fbm9i anMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsKICAgICAgICBfX3RvdGFsX2J5dGVzID0g X19zaXplICogX19ub2JqczsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAg ICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3Vs dCk7CiAgICB9IGVsc2UgewogICAgICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CgkgIDIgKiBf X3RvdGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwogICAgICAgICAK ICAgICAgICBpZiAoX19ieXRlc19sZWZ0ID4gMCkgewogICAgICAgICAgICBfT2JqKiAgKiBfX215 X2ZyZWVfbGlzdCA9CiAgICAgICAgICAgICAgICAgICAgICAgIF9TX2ZyZWVfbGlzdCArIF9TX2Zy ZWVsaXN0X2luZGV4KF9fYnl0ZXNfbGVmdCk7CgogICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0 X2ZyZWUpIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAg ICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICB9CiAgICAg ICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKiltYWxsb2MoX19ieXRlc190b19nZXQpOwogICAgICAg IGlmICgwID09IF9TX3N0YXJ0X2ZyZWUpIHsKICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAg ICAgICAgX09iaiogICogX19teV9mcmVlX2xpc3Q7CgkgICAgX09iaiogX19wOwogICAgICAgICAg ICAgCiAgICAgICAgICAgICAKICAgICAgICAgICAgIAogICAgICAgICAgICBmb3IgKF9faSA9IF9f c2l6ZTsgX19pIDw9IF9NQVhfQllURVM7IF9faSArPSBfQUxJR04pIHsKICAgICAgICAgICAgICAg IF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19pKTsK ICAgICAgICAgICAgICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAgIGlm ICgwICE9IF9fcCkgewogICAgICAgICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcCAt PiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0g KGNoYXIqKV9fcDsKICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2Zy ZWUgKyBfX2k7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuKF9TX2NodW5rX2FsbG9jKF9fc2l6 ZSwgX19ub2JqcykpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCSAgICBfU19lbmRfZnJlZSA9IDA7CSAK ICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKiltYWxsb2NfYWxsb2M6OmFsbG9jYXRl KF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAg ICAKICAgICAgICB9CiAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0OwogICAg ICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAgICAg IHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAgIH0KfQoKCiAKIAog CnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kdm9pZCoKX19kZWZhdWx0X2Fs bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pCnsK ICAgIGludCBfX25vYmpzID0gMjA7CiAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2Mo X19uLCBfX25vYmpzKTsKICAgIF9PYmoqICAqIF9fbXlfZnJlZV9saXN0OwogICAgX09iaiogX19y ZXN1bHQ7CiAgICBfT2JqKiBfX2N1cnJlbnRfb2JqOwogICAgX09iaiogX19uZXh0X29iajsKICAg IGludCBfX2k7CgogICAgaWYgKDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmspOwogICAgX19t eV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKICAg ICAKICAgICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0 ID0gX19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0g MTsgOyBfX2krKykgewogICAgICAgIF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAg IF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBp ZiAoX19ub2JqcyAtIDEgPT0gX19pKSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01f ZnJlZV9saXN0X2xpbmsgPSAwOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2Ugewog ICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29i ajsKICAgICAgICB9CiAgICAgIH0KICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxi b29sIHRocmVhZHMsIGludCBpbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dGhy ZWFkcywgaW5zdD46OnJlYWxsb2NhdGUodm9pZCogX19wLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fb2xkX3N6LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6 KQp7CiAgICB2b2lkKiBfX3Jlc3VsdDsKICAgIHNpemVfdCBfX2NvcHlfc3o7CgogICAgaWYgKF9f b2xkX3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUyAmJiBfX25ld19zeiA+IChzaXplX3QpIF9NQVhf QllURVMpIHsKICAgICAgICByZXR1cm4ocmVhbGxvYyhfX3AsIF9fbmV3X3N6KSk7CiAgICB9CiAg ICBpZiAoX1Nfcm91bmRfdXAoX19vbGRfc3opID09IF9TX3JvdW5kX3VwKF9fbmV3X3N6KSkgcmV0 dXJuKF9fcCk7CiAgICBfX3Jlc3VsdCA9IGFsbG9jYXRlKF9fbmV3X3N6KTsKICAgIF9fY29weV9z eiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDogX19uZXdfc3o7CiAgICBtZW1jcHko X19yZXN1bHQsIF9fcCwgX19jb3B5X3N6KTsKICAgIGRlYWxsb2NhdGUoX19wLCBfX29sZF9zeik7 CiAgICByZXR1cm4oX19yZXN1bHQpOwp9CgoKCgoKCgoKCgoKCgoKCiMgNjAyICIvdXNyL2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNs dWRlL2crKy0zL3N0bF9hbGxvYy5oIiAzCgoKIyA2ODkgIi91c3IvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3Rs X2FsbG9jLmgiIDMKCgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIq IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3N0YXJ0X2Zy ZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKiBfX2Rl ZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19lbmRfZnJlZSA9IDA7 Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnNpemVfdCBfX2RlZmF1bHRf YWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19oZWFwX3NpemUgPSAwOwoKdGVt cGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8X190aHJlYWRzLCBfX2luc3Q+OjpfT2JqKiAgCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf X3RocmVhZHMsIF9faW5zdD4gOjpfU19mcmVlX2xpc3RbCiAgICBfTkZSRUVMSVNUUwpdID0gezAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIH07CiAKIAogCgoK CgoKCgoKCgogCiAKIAogCiAKIAogCgojIDEwNDMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Fs bG9jLmgiIDMKCgoKCgoKIAoKCgoKCiAKIAogCiMgMzEgIi91c3IvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdmVj dG9yIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIu OC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfY29uc3RydWN0LmgiIDEgMwog CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKIAoKIAogCgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgppbmxpbmUgdm9pZCBkZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX19wb2ludGVy LT5+X1RwKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHZvaWQg Y29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKICBuZXcgKF9fcCkgX1Qx KF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBjb25zdHJ1Y3Qo X1QxKiBfX3ApIHsKICBuZXcgKF9fcCkgX1QxKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXJhdG9yPgppbmxpbmUgdm9pZApfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19m aXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKewogIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGRlc3Ryb3koJipfX2ZpcnN0KTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIF9fZGVzdHJveV9h dXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpIHt9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApf X2Rlc3Ryb3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFz dCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJp dmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICBfVHJpdmlhbF9kZXN0cnVjdG9yOwogIF9fZGVzdHJv eV9hdXgoX19maXJzdCwgX19sYXN0LCBfVHJpdmlhbF9kZXN0cnVjdG9yKCkpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgZGVzdHJveShfRm9yd2FyZEl0 ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAgX19kZXN0cm95KF9f Zmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKaW5saW5lIHZvaWQg ZGVzdHJveShjaGFyKiwgY2hhciopIHt9CmlubGluZSB2b2lkIGRlc3Ryb3kod2NoYXJfdCosIHdj aGFyX3QqKSB7fQoKIAoKCgogCiAKIAojIDMyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3ZlY3RvciIg MiAzCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45 NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKIAoKIAogCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIgCl9f dW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAg ICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCnsKICByZXR1cm4gY29weShfX2ZpcnN0 LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz IF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIApfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFs c2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogIHRyeSAgewogICAg Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3VyKQogICAgICBjb25z dHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIF9fY3VyOwogIH0KICBjYXRjaCgu Li4pIHsgIGRlc3Ryb3koX19yZXN1bHQsIF9fY3VyKSA7IHRocm93OyB9IDsKfQoKCnRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5l IF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1 bHQsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aXNfUE9E X3R5cGUgX0lzX1BPRDsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9fZmlyc3Qs IF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0QoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIKICB1bmluaXRpYWxp emVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQp7CiAgcmV0dXJuIF9fdW5pbml0aWFs aXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19yZXN1bHQgKSApOwp9CgppbmxpbmUgY2hhciogdW5p bml0aWFsaXplZF9jb3B5KGNvbnN0IGNoYXIqIF9fZmlyc3QsIGNvbnN0IGNoYXIqIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBfX3Jlc3VsdCkgewogIG1lbW1v dmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmlyc3QpOwogIHJldHVybiBfX3Jlc3Vs dCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHdjaGFyX3QqIAp1bmluaXRpYWxpemVk X2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAg ICAgICAgICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpCnsKICBtZW1tb3ZlKF9fcmVzdWx0LCBf X2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBf X3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CnBhaXI8X0lucHV0SXRlciwg X0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwg X1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1 bHQsCiAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgX0Zvcndh cmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiAgdHJ5ICB7CiAgICBmb3IgKCA7IF9fY291bnQgPiAw IDsgLS1fX2NvdW50LCArK19fZmlyc3QsICsrX19jdXIpIAogICAgICBjb25zdHJ1Y3QoJipfX2N1 ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPihf X2ZpcnN0LCBfX2N1cik7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX3Jlc3VsdCwgX19j dXIpIDsgdGhyb3c7IH0gOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs YXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9SYW5kb21BY2Nlc3NJ dGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX1JhbmRvbUFjY2Vzc0l0 ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy ZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVy YXRvcl90YWcpIHsKICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3Vu dDsKICByZXR1cm4gcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPigKICAgICAg ICAgICAgICAgICBfX2xhc3QsCiAgICAgICAgICAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9f Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs IGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIs IF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3Qs IF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3Vs dCkgewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdv cnkoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Np emUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJ dGVyPgp1bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291 bnQsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgewogIHJldHVy biBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3Qg KSApOwp9CgogCiAKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxp bmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G b3J3YXJkSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf X3gsIF9fdHJ1ZV90eXBlKQp7CiAgZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4Kdm9pZApfX3VuaW5pdGlhbGl6ZWRf ZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIAogICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKewogIF9G b3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgdHJ5ICB7CiAgICBmb3IgKCA7IF9fY3VyICE9 IF9fbGFzdDsgKytfX2N1cikKICAgICAgY29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgfQogIGNh dGNoKC4uLikgeyAgZGVzdHJveShfX2ZpcnN0LCBfX2N1cikgOyB0aHJvdzsgfSA7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4KaW5saW5lIHZv aWQgX191bmluaXRpYWxpemVkX2ZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9f eCwgX1RwMSopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwMT46OmlzX1BP RF90eXBlIF9Jc19QT0Q7CiAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9fZmlyc3QsIF9fbGFz dCwgX194LCBfSXNfUE9EKCkpOwogICAgICAgICAgICAgICAgICAgCn0KCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgdW5pbml0aWFsaXplZF9maWxs KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zv cndhcmRJdGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf VHAmIF9feCkKewogIF9fdW5pbml0aWFsaXplZF9maWxsKF9fZmlyc3QsIF9fbGFzdCwgX194LCBf X3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9CgogCiAKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5p dGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsKICBy ZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFs aXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9y d2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSAgewogICAgZm9yICggOyBfX24gPiAwOyAt LV9fbiwgKytfX2N1cikKICAgICAgY29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICByZXR1cm4g X19jdXI7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX2ZpcnN0LCBfX2N1cikgOyB0aHJv dzsgfSA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFz cyBfVHAsIGNsYXNzIF9UcDE+CmlubGluZSBfRm9yd2FyZEl0ZXIgCl9fdW5pbml0aWFsaXplZF9m aWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gsIF9U cDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlw ZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBf X24sIF9feCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh c3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlciAKdW5pbml0aWFsaXplZF9m aWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gpCnsK ICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCwgX192YWx1 ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKIAogCgogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBf Rm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAg ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmlu aXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICB0cnkgIHsKICAg IHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsKICB9 CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fcmVzdWx0LCBfX21pZCkgOyB0aHJvdzsgfSA7Cn0K CiAKIAogCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0lu cHV0SXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlciAKX191bmluaXRpYWxpemVkX2ZpbGxfY29weShf Rm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBfVHAmIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQp7CiAgdW5pbml0aWFsaXplZF9maWxs KF9fcmVzdWx0LCBfX21pZCwgX194KTsKICB0cnkgIHsKICAgIHJldHVybiB1bmluaXRpYWxpemVk X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX21pZCk7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJv eShfX3Jlc3VsdCwgX19taWQpIDsgdGhyb3c7IH0gOwp9CgogCiAKIAp0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9f dW5pbml0aWFsaXplZF9jb3B5X2ZpbGwoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBf X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0Miwg X0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw JiBfX3gpCnsKICBfRm9yd2FyZEl0ZXIgX19taWQyID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmly c3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CiAgdHJ5ICB7CiAgICB1bmluaXRpYWxpemVkX2ZpbGwo X19taWQyLCBfX2xhc3QyLCBfX3gpOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19maXJz dDIsIF9fbWlkMikgOyB0aHJvdzsgfSA7Cn0KCiAKCgoKIAogCiAKIyAzMyAiL3Vzci9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy92ZWN0b3IiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3Iu aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKICAKCgoKCgoKIAogCiAK IAogCgojIDExOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8y Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfdmVjdG9yLmgiIDMKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IApjbGFzcyBfVmVjdG9yX2Jhc2UgewpwdWJsaWM6 CiAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2Fs bG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX1ZlY3Rvcl9i YXNlKGNvbnN0IF9BbGxvYyYpCiAgICA6IF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2Vu ZF9vZl9zdG9yYWdlKDApIHt9CiAgX1ZlY3Rvcl9iYXNlKHNpemVfdCBfX24sIGNvbnN0IF9BbGxv YyYpCiAgICA6IF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDAp IAogIHsKICAgIF9NX3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgIF9NX2ZpbmlzaCA9IF9N X3N0YXJ0OwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICB9CgogIH5f VmVjdG9yX2Jhc2UoKSB7IF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdl IC0gX01fc3RhcnQpOyB9Cgpwcm90ZWN0ZWQ6CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2Zp bmlzaDsKICBfVHAqIF9NX2VuZF9vZl9zdG9yYWdlOwoKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxf VHAsIF9BbGxvYz4gX01fZGF0YV9hbGxvY2F0b3I7CiAgX1RwKiBfTV9hbGxvY2F0ZShzaXplX3Qg X19uKQogICAgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I6OmFsbG9jYXRlKF9fbik7IH0KICB2 b2lkIF9NX2RlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pIAogICAgeyBfTV9kYXRhX2Fs bG9jYXRvcjo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7IH0KfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jID0gYWxsb2MgID4KY2xhc3MgdmVjdG9yIDogcHJvdGVjdGVkIF9WZWN0 b3JfYmFzZTxfVHAsIF9BbGxvYz4gCnsKcHJpdmF0ZToKICB0eXBlZGVmIF9WZWN0b3JfYmFzZTxf VHAsIF9BbGxvYz4gX0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5 cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNv bnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBpdGVyYXRvcjsKICB0eXBlZGVmIGNv bnN0IHZhbHVlX3R5cGUqIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVm ZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5 cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5 cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90 eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFz ZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3Rf aXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh dG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKCgoKCgoKcHJvdGVjdGVkOgoKICB1c2lu ZyBfQmFzZTo6X01fYWxsb2NhdGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2RlYWxsb2NhdGU7CiAgdXNp bmcgX0Jhc2U6Ol9NX3N0YXJ0OwogIHVzaW5nIF9CYXNlOjpfTV9maW5pc2g7CiAgdXNpbmcgX0Jh c2U6Ol9NX2VuZF9vZl9zdG9yYWdlOwoKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luc2VydF9hdXgo aXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOwogIHZvaWQgX01faW5zZXJ0X2F1 eChpdGVyYXRvciBfX3Bvc2l0aW9uKTsKCnB1YmxpYzoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0 dXJuIF9NX3N0YXJ0OyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBf TV9zdGFydDsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQogIGNvbnN0 X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQoKICByZXZlcnNlX2l0 ZXJhdG9yIHJiZWdpbigpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQog IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAg IHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0 ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihi ZWdpbigpKTsgfQoKICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5 cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAgICB7 IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KICBzaXplX3R5cGUgY2FwYWNp dHkoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gYmVn aW4oKSk7IH0KICBib29sIGVtcHR5KCkgY29uc3QKICAgIHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5k KCk7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgeyByZXR1cm4gKihi ZWdpbigpICsgX19uKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBf X24pIGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KCiAgZXhwbGljaXQgdmVjdG9y KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFz ZShfX2EpIHt9CgogIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUsCiAg ICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKSAKICAg IDogX0Jhc2UoX19uLCBfX2EpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9u KF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOyB9CgogIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUg X19uKQogICAgOiBfQmFzZShfX24sIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX2ZpbmlzaCA9 IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9UcCgpKTsgfQoKICB2ZWN0b3Io Y29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KSAKICAgIDogX0Jhc2UoX194LnNpemUoKSwg X194LmdldF9hbGxvY2F0b3IoKSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5 KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsgfQoKCiAgIAogIHRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2ZWN0b3IoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lu cHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0g YWxsb2NhdG9yX3R5cGUoKSkgOiBfQmFzZShfX2EpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lz X2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5p dGlhbGl6ZV9hdXgoX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0 ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW50ZWdlciBfX24s IF9JbnRlZ2VyIF9fdmFsdWUsIF9fdHJ1ZV90eXBlKSB7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9j YXRlKF9fbik7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOyAKICAgIF9N X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOwog IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6 ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbml0aWFs aXplKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7CiAg fQoKCgoKCgoKCiAgfnZlY3RvcigpIHsgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsgfQoK ICB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9j PiYgX194KTsKICB2b2lkIHJlc2VydmUoc2l6ZV90eXBlIF9fbikgewogICAgaWYgKGNhcGFjaXR5 KCkgPCBfX24pIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAg ICAgIGl0ZXJhdG9yIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwg X01fZmluaXNoKTsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01f ZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAg IF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2ZpbmlzaCA9IF9fdG1wICsgX19vbGRfc2l6ZTsK ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIH0KICB9CgogICAK ICAgCiAgIAogICAKCiAgdm9pZCBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3Zh bCk7CgoKICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24o X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBl ZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRl Z3JhbDsKICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgp KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNw YXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgIHsgYXNz aWduKChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgIHsgX01fYXNzaWduX2F1eChfX2Zp cnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOyB9CgogIHRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0lucHV0SXRl cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv cj4KICB2b2lkIF9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2Fy ZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90 YWcpOyAKCgoKICByZWZlcmVuY2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQogIGNvbnN0 X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgcmVmZXJlbmNl IGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICBjb25zdF9yZWZlcmVuY2UgYmFjaygp IGNvbnN0IHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQoKICB2b2lkIHB1c2hfYmFjayhjb25zdCBf VHAmIF9feCkgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAg ICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAg IGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChlbmQoKSwgX194KTsKICB9CiAgdm9pZCBwdXNoX2Jh Y2soKSB7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNv bnN0cnVjdChfTV9maW5pc2gpOwogICAgICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAg ICAgX01faW5zZXJ0X2F1eChlbmQoKSk7CiAgfQogIHZvaWQgc3dhcCh2ZWN0b3I8X1RwLCBfQWxs b2M+JiBfX3gpIHsKICAgICA6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFydCk7CiAgICAgOjpz d2FwKF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICAgOjpzd2FwKF9NX2VuZF9vZl9zdG9y YWdlLCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogIH0KCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJh dG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KSB7CiAgICBzaXplX3R5cGUgX19uID0gX19w b3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdl ICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgX194 KTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgo X19wb3NpdGlvbiwgX194KTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KICBpdGVyYXRv ciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9z aXRpb24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAm JiBfX3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOwogICAg ICArK19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0 aW9uKTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KCiAgIAogIHRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRl cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVu YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAg IF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7 CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0 Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAgIGluc2VydChfX3BvcywgKHNpemVf dHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl cmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgX01f cmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnko IF9fZmlyc3QgKSApOwogIH0KCgoKCgogIHZvaWQgaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6 ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOwoKICB2b2lkIHBvcF9iYWNrKCkgewogICAgLS1f TV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0 ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAg ICAgY29weShfX3Bvc2l0aW9uICsgMSwgX01fZmluaXNoLCBfX3Bvc2l0aW9uKTsKICAgIC0tX01f ZmluaXNoOwogICAgZGVzdHJveShfTV9maW5pc2gpOwogICAgcmV0dXJuIF9fcG9zaXRpb247CiAg fQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewog ICAgaXRlcmF0b3IgX19pID0gY29weShfX2xhc3QsIF9NX2ZpbmlzaCwgX19maXJzdCk7CiAgICBk ZXN0cm95KF9faSwgX01fZmluaXNoKTsKICAgIF9NX2ZpbmlzaCA9IF9NX2ZpbmlzaCAtIChfX2xh c3QgLSBfX2ZpcnN0KTsKICAgIHJldHVybiBfX2ZpcnN0OwogIH0KCiAgdm9pZCByZXNpemUoc2l6 ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IF9UcCYgX194KSB7CiAgICBpZiAoX19uZXdfc2l6ZSA8 IHNpemUoKSkgCiAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX25ld19zaXplLCBlbmQoKSk7CiAgICBl bHNlCiAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKICB9CiAg dm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpIHsgcmVzaXplKF9fbmV3X3NpemUsIF9U cCgpKTsgfQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQoKcHJvdGVj dGVkOgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgaXRlcmF0b3IgX01f YWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBlIF9fbiwgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0 LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy ZEl0ZXJhdG9yIF9fbGFzdCkKewogICAgaXRlcmF0b3IgX19yZXN1bHQgPSBfTV9hbGxvY2F0ZShf X24pOwogICAgdHJ5ICB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQogICAgY2F0Y2goLi4uKSB7 ICBfTV9kZWFsbG9jYXRlKF9fcmVzdWx0LCBfX24pIDsgdGhyb3c7IH0gOwogIH0KIyA0NDAgIi91 c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4u Ly4uL2luY2x1ZGUvZysrLTMvc3RsX3ZlY3Rvci5oIiAzCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0b3Ig X19maXJzdCwgIAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xh c3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0 OyArK19fZmlyc3QpCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgfQoKICAgCiAgdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9G b3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh cmRJdGVyYXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogIHsKICAgIHNpemVfdHlw ZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAgX01fc3Rh cnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCAr IF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3Qs IF9NX3N0YXJ0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lk IF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAg ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh dG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7 CgoKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgCm9w ZXJhdG9yPT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1Rw LCBfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAg ICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCAKb3BlcmF0b3I8KGNv bnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYg X195KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3gu ZW5kKCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195 LmVuZCgpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2 b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBf X3kpCnsKICBfX3guc3dhcChfX3kpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B bGxvYz4KdmVjdG9yPF9UcCxfQWxsb2M+JiAKdmVjdG9yPF9UcCxfQWxsb2M+OjpvcGVyYXRvcj0o Y29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3ggIT0gdGhpcykgewog ICAgY29uc3Qgc2l6ZV90eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CiAgICBpZiAoX194bGVuID4g Y2FwYWNpdHkoKSkgewogICAgICBpdGVyYXRvciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5 KF9feGxlbiwgX194LmJlZ2luKCksIF9feC5lbmQoKSk7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQs IF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9y YWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9lbmRfb2Zf c3RvcmFnZSA9IF9NX3N0YXJ0ICsgX194bGVuOwogICAgfQogICAgZWxzZSBpZiAoc2l6ZSgpID49 IF9feGxlbikgewogICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5k KCksIGJlZ2luKCkpOwogICAgICBkZXN0cm95KF9faSwgX01fZmluaXNoKTsKICAgIH0KICAgIGVs c2UgewogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSArIHNpemUoKSwgX01fc3Rh cnQpOwogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5l bmQoKSwgX01fZmluaXNoKTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX194bGVu OwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv Yz4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+Ojphc3NpZ24oc2l6ZV90IF9fbiwgY29uc3QgdmFs dWVfdHlwZSYgX192YWwpIHsKICBpZiAoX19uID4gY2FwYWNpdHkoKSkgewogICAgdmVjdG9yPF9U cCwgX0FsbG9jPiBfX3RtcChfX24sIF9fdmFsLCBnZXRfYWxsb2NhdG9yKCkpOwogICAgX190bXAu c3dhcCgqdGhpcyk7CiAgfQogIGVsc2UgaWYgKF9fbiA+IHNpemUoKSkgewogICAgZmlsbChiZWdp bigpLCBlbmQoKSwgX192YWwpOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24o X01fZmluaXNoLCBfX24gLSBzaXplKCksIF9fdmFsKTsKICB9CiAgZWxzZQogICAgZXJhc2UoZmls bF9uKGJlZ2luKCksIF9fbiwgX192YWwpLCBlbmQoKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZCB2ZWN0b3I8 X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9p dGVyYXRvcl90YWcpIHsKICBpdGVyYXRvciBfX2N1ciA9IGJlZ2luKCk7CiAgZm9yICggOyBfX2Zp cnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQogICAg Kl9fY3VyID0gKl9fZmlyc3Q7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgZXJhc2UoX19j dXIsIGVuZCgpKTsKICBlbHNlCiAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgc2l6ZV90eXBlIF9fbGVuID0g MDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKCiAgaWYgKF9fbGVuID4gY2Fw YWNpdHkoKSkgewogICAgaXRlcmF0b3IgX190bXAgPSBfTV9hbGxvY2F0ZV9hbmRfY29weShfX2xl biwgX19maXJzdCwgX19sYXN0KTsKICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAg ICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsK ICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2ZpbmlzaCA9 IF9NX3N0YXJ0ICsgX19sZW47CiAgfQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikgewogICAg aXRlcmF0b3IgX19uZXdfZmluaXNoID0gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsK ICAgIGRlc3Ryb3koX19uZXdfZmluaXNoLCBfTV9maW5pc2gpOwogICAgX01fZmluaXNoID0gX19u ZXdfZmluaXNoOwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IF9fZmlyc3Q7 CiAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgY29weShfX2ZpcnN0LCBfX21pZCwgX01f c3RhcnQpOwogICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3Qs IF9NX2ZpbmlzaCk7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K dm9pZCAKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0 aW9uLCBjb25zdCBfVHAmIF9feCkKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3Jh Z2UpIHsKICAgIGNvbnN0cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOwogICAgKytf TV9maW5pc2g7CiAgICBfVHAgX194X2NvcHkgPSBfX3g7CiAgICBjb3B5X2JhY2t3YXJkKF9fcG9z aXRpb24sIF9NX2ZpbmlzaCAtIDIsIF9NX2ZpbmlzaCAtIDEpOwogICAgKl9fcG9zaXRpb24gPSBf X3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNp emUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBf X29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19s ZW4pOwogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3RhcnQ7CiAgICB0cnkgIHsK ICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9NX3N0YXJ0LCBfX3Bvc2l0 aW9uLCBfX25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gsIF9feCk7CiAg ICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2Nv cHkoX19wb3NpdGlvbiwgX01fZmluaXNoLCBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2go Li4uKSB7ICAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCAKICAgICAgICAgICAg ICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbikpIDsgdGhyb3c7IH0gOwogICAg ZGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9l bmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAg ICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3 X3N0YXJ0ICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+ CnZvaWQgCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3Np dGlvbikKewogIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgIGNvbnN0 cnVjdChfTV9maW5pc2gsICooX01fZmluaXNoIC0gMSkpOwogICAgKytfTV9maW5pc2g7CiAgICBj b3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9NX2ZpbmlzaCAtIDIsIF9NX2ZpbmlzaCAtIDEpOwog ICAgKl9fcG9zaXRpb24gPSBfVHAoKTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUg X19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3Np emUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0g X01fYWxsb2NhdGUoX19sZW4pOwogICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19uZXdfc3Rh cnQ7CiAgICB0cnkgIHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9N X3N0YXJ0LCBfX3Bvc2l0aW9uLCBfX25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19m aW5pc2gpOwogICAgICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0 aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsKICAgIH0K ICAgIGNhdGNoKC4uLikgeyAgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgCiAg ICAgICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKSA7IHRocm93 OyB9IDsKICAgIGRlc3Ryb3koYmVnaW4oKSwgZW5kKCkpOwogICAgX01fZGVhbGxvY2F0ZShfTV9z dGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9IF9fbmV3 X3N0YXJ0OwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoOwogICAgX01fZW5kX29mX3N0b3Jh Z2UgPSBfX25ld19zdGFydCArIF9fbGVuOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Omluc2VydChpdGVyYXRvciBfX3Bv c2l0aW9uLCBzaXplX3R5cGUgX19uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX1RwJiBfX3gpCnsKICBpZiAoX19uICE9IDApIHsKICAgIGlmIChzaXplX3R5cGUoX01f ZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5pc2gpID49IF9fbikgewogICAgICBfVHAgX194X2NvcHkg PSBfX3g7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0gX01fZmluaXNoIC0g X19wb3NpdGlvbjsKICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNoOwogICAg ICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShf TV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2gg Kz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoIC0g X19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGZpbGwoX19wb3NpdGlvbiwgX19wb3NpdGlvbiAr IF9fbiwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHVuaW5pdGlhbGl6 ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gX19lbGVtc19hZnRlciwgX194X2NvcHkpOwogICAg ICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6 ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01f ZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9m aW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNp emVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOyAgICAgICAgCiAgICAgIGNvbnN0IHNpemVfdHlw ZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0 b3IgX19uZXdfc3RhcnQgPSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3 X2ZpbmlzaCA9IF9fbmV3X3N0YXJ0OwogICAgICB0cnkgIHsKICAgICAgICBfX25ld19maW5pc2gg PSB1bmluaXRpYWxpemVkX2NvcHkoX01fc3RhcnQsIF9fcG9zaXRpb24sIF9fbmV3X3N0YXJ0KTsK ICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfX25ld19maW5pc2gs IF9fbiwgX194KTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0gdW5pbml0aWFsaXpl ZF9jb3B5KF9fcG9zaXRpb24sIF9NX2ZpbmlzaCwgX19uZXdfZmluaXNoKTsKICAgICAgfQogICAg ICBjYXRjaCguLi4pIHsgIChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIAogICAg ICAgICAgICAgICAgICAgIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQsX19sZW4pKSA7IHRocm93 OyB9IDsKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxv Y2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0 YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAg X01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydCArIF9fbGVuOwogICAgfQogIH0KfQoKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyYXRvcj4Kdm9pZCAKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJh dG9yIF9fcG9zLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu cHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp cnN0KSB7CiAgICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgKytfX3BvczsK ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNz IF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQgCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2lu c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0ICE9 IF9fbGFzdCkgewogICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBf X2xhc3QsIF9fbik7CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmlu aXNoKSA+PSBfX24pIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBfTV9m aW5pc2ggLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2ggPSBfTV9maW5p c2g7CiAgICAgIGlmIChfX2VsZW1zX2FmdGVyID4gX19uKSB7CiAgICAgICAgdW5pbml0aWFsaXpl ZF9jb3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9N X2ZpbmlzaCArPSBfX247CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfX29sZF9m aW5pc2ggLSBfX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3Qs IF9fcG9zaXRpb24pOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0 b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIF9fZWxlbXNfYWZ0ZXIp OwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwog ICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlh bGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAg X01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwg X19wb3NpdGlvbik7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICBjb25zdCBzaXplX3R5 cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19v bGRfc2l6ZSArIG1heChfX29sZF9zaXplLCBfX24pOwogICAgICBpdGVyYXRvciBfX25ld19zdGFy dCA9IF9NX2FsbG9jYXRlKF9fbGVuKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX19u ZXdfc3RhcnQ7CiAgICAgIHRyeSAgewogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6 ZWRfY29weShfTV9zdGFydCwgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3 X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3X2Zpbmlz aCk7CiAgICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShf X3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0KICAgICAgY2F0Y2go Li4uKSB7ICAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCAKICAgICAgICAgICAg ICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LF9fbGVuKSkgOyB0aHJvdzsgfSA7CiAg ICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01f c3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9f bmV3X3N0YXJ0OwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICAgIF9NX2VuZF9v Zl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKICAgIH0KICB9Cn0KCiMgODEwICIvdXNy L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8u Li9pbmNsdWRlL2crKy0zL3N0bF92ZWN0b3IuaCIgMwoKCgoKCgoKICAKCgoKIAogCiAKIyAzNCAi L3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4v Li4vLi4vaW5jbHVkZS9nKystMy92ZWN0b3IiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0z L3N0bF9idmVjdG9yLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAg CgpzdGF0aWMgY29uc3QgaW50IF9fV09SRF9CSVQgPSBpbnQoOCAqc2l6ZW9mKHVuc2lnbmVkIGlu dCkpOwoKCgoKCgpzdHJ1Y3QgX0JpdF9yZWZlcmVuY2UgewogIHVuc2lnbmVkIGludCogX01fcDsK ICB1bnNpZ25lZCBpbnQgX01fbWFzazsKICBfQml0X3JlZmVyZW5jZSh1bnNpZ25lZCBpbnQqIF9f eCwgdW5zaWduZWQgaW50IF9feSkgCiAgICA6IF9NX3AoX194KSwgX01fbWFzayhfX3kpIHt9Cgpw dWJsaWM6CiAgX0JpdF9yZWZlcmVuY2UoKSA6IF9NX3AoMCksIF9NX21hc2soMCkge30KICBvcGVy YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISghKCpfTV9wICYgX01fbWFzaykpOyB9CiAgX0Jp dF9yZWZlcmVuY2UmIG9wZXJhdG9yPShib29sIF9feCkKICB7CiAgICBpZiAoX194KSAgKl9NX3Ag fD0gX01fbWFzazsKICAgIGVsc2UgICAgICAqX01fcCAmPSB+X01fbWFzazsKICAgIHJldHVybiAq dGhpczsKICB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBfQml0X3JlZmVyZW5j ZSYgX194KSAKICAgIHsgcmV0dXJuICp0aGlzID0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRv cj09KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBib29sKCp0 aGlzKSA9PSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0X3JlZmVyZW5j ZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIWJvb2woKnRoaXMpICYmIGJvb2woX194KTsKICB9 CiAgdm9pZCBmbGlwKCkgeyAqX01fcCBePSBfTV9tYXNrOyB9Cn07CgppbmxpbmUgdm9pZCBzd2Fw KF9CaXRfcmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195KQp7CiAgYm9vbCBfX3RtcCA9 IF9feDsKICBfX3ggPSBfX3k7CiAgX195ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0X2l0ZXJhdG9y IDogcHVibGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRyZGlmZl90PiB7CiAgdHlw ZWRlZiBfQml0X3JlZmVyZW5jZSAgcmVmZXJlbmNlOwogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2Uq IHBvaW50ZXI7CiAgdHlwZWRlZiBfQml0X2l0ZXJhdG9yICAgaXRlcmF0b3I7CgogIHVuc2lnbmVk IGludCogX01fcDsKICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0OwogIHZvaWQgYnVtcF91cCgpIHsK ICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0gMSkgewogICAgICBfTV9vZmZzZXQg PSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgYnVtcF9kb3duKCkgewogICAgaWYg KF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX19XT1JEX0JJVCAtIDE7CiAg ICAgIC0tX01fcDsKICAgIH0KICB9CgogIF9CaXRfaXRlcmF0b3IoKSA6IF9NX3AoMCksIF9NX29m ZnNldCgwKSB7fQogIF9CaXRfaXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGlu dCBfX3kpIAogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CiAgcmVmZXJlbmNlIG9w ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQp OyB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4g KnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBfX3Rt cCA9ICp0aGlzOwogICAgYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRv ciYgb3BlcmF0b3ItLSgpIHsKICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0K ICBpdGVyYXRvciBvcGVyYXRvci0tKGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsK ICAgIGJ1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0 b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19p ICsgX01fb2Zmc2V0OwogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOwogICAgX19uID0gX19u ICUgX19XT1JEX0JJVDsKICAgIGlmIChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNp Z25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxzZQogICAg ICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQog IGl0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9 IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJl bmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0 dXJuIF9fdG1wICs9IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlw ZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190 bXAgLT0gX19pOwogIH0KICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGl0ZXJhdG9yIF9feCkg Y29uc3QgewogICAgcmV0dXJuIF9fV09SRF9CSVQgKiAoX01fcCAtIF9feC5fTV9wKSArIF9NX29m ZnNldCAtIF9feC5fTV9vZmZzZXQ7CiAgfQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVu Y2VfdHlwZSBfX2kpIHsgcmV0dXJuICooKnRoaXMgKyBfX2kpOyB9CiAgYm9vbCBvcGVyYXRvcj09 KGNvbnN0IGl0ZXJhdG9yJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wID09IF9feC5fTV9w ICYmIF9NX29mZnNldCA9PSBfX3guX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yIT0oY29u c3QgaXRlcmF0b3ImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgIT0gX194Ll9NX3AgfHwg X01fb2Zmc2V0ICE9IF9feC5fTV9vZmZzZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGl0ZXJhdG9y IF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPCBfX3guX01fcCB8fCAoX01fcCA9PSBfX3gu X01fcCAmJiBfTV9vZmZzZXQgPCBfX3guX01fb2Zmc2V0KTsKICB9Cn07CgpzdHJ1Y3QgX0JpdF9j b25zdF9pdGVyYXRvcgogIDogcHVibGljIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3I8Ym9vbCwgcHRy ZGlmZl90Pgp7CiAgdHlwZWRlZiBib29sICAgICAgICAgICAgICAgICByZWZlcmVuY2U7CiAgdHlw ZWRlZiBib29sICAgICAgICAgICAgICAgICBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25z dCBib29sKiAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciAg Y29uc3RfaXRlcmF0b3I7CgogIHVuc2lnbmVkIGludCogX01fcDsKICB1bnNpZ25lZCBpbnQgX01f b2Zmc2V0OwogIHZvaWQgYnVtcF91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRf QklUIC0gMSkgewogICAgICBfTV9vZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQog IHZvaWQgYnVtcF9kb3duKCkgewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01f b2Zmc2V0ID0gX19XT1JEX0JJVCAtIDE7CiAgICAgIC0tX01fcDsKICAgIH0KICB9CgogIF9CaXRf Y29uc3RfaXRlcmF0b3IoKSA6IF9NX3AoMCksIF9NX29mZnNldCgwKSB7fQogIF9CaXRfY29uc3Rf aXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpIAogICAgOiBfTV9w KF9feCksIF9NX29mZnNldChfX3kpIHt9CiAgX0JpdF9jb25zdF9pdGVyYXRvcihjb25zdCBfQml0 X2l0ZXJhdG9yJiBfX3gpIAogICAgOiBfTV9wKF9feC5fTV9wKSwgX01fb2Zmc2V0KF9feC5fTV9v ZmZzZXQpIHt9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsKICAgIHJldHVy biBfQml0X3JlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOwogIH0KICBjb25zdF9pdGVy YXRvciYgb3BlcmF0b3IrKygpIHsKICAgIGJ1bXBfdXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9 CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9f dG1wID0gKnRoaXM7CiAgICBidW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGNvbnN0 X2l0ZXJhdG9yJiBvcGVyYXRvci0tKCkgewogICAgYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRo aXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBjb25zdF9pdGVy YXRvciBfX3RtcCA9ICp0aGlzOwogICAgYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAg fQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAg IGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7CiAgICBfTV9wICs9IF9fbiAv IF9fV09SRF9CSVQ7CiAgICBfX24gPSBfX24gJSBfX1dPUkRfQklUOwogICAgaWYgKF9fbiA8IDAp IHsKICAgICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uICsgX19XT1JEX0JJVDsKICAg ICAgLS1fTV9wOwogICAgfSBlbHNlCiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9f bjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlm ZmVyZW5jZV90eXBlIF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsK ICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0 IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0g X19pOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkg Y29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3Rt cCAtPSBfX2k7CiAgfQogIGRpZmZlcmVuY2VfdHlwZSBvcGVyYXRvci0oY29uc3RfaXRlcmF0b3Ig X194KSBjb25zdCB7CiAgICByZXR1cm4gX19XT1JEX0JJVCAqIChfTV9wIC0gX194Ll9NX3ApICsg X01fb2Zmc2V0IC0gX194Ll9NX29mZnNldDsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9y W10oZGlmZmVyZW5jZV90eXBlIF9faSkgeyAKICAgIHJldHVybiAqKCp0aGlzICsgX19pKTsgCiAg fQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVyYXRvciYgX194KSBjb25zdCB7CiAg ICByZXR1cm4gX01fcCA9PSBfX3guX01fcCAmJiBfTV9vZmZzZXQgPT0gX194Ll9NX29mZnNldDsK ICB9CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNvbnN0X2l0ZXJhdG9yJiBfX3gpIGNvbnN0IHsK ICAgIHJldHVybiBfTV9wICE9IF9feC5fTV9wIHx8IF9NX29mZnNldCAhPSBfX3guX01fb2Zmc2V0 OwogIH0KICBib29sIG9wZXJhdG9yPChjb25zdF9pdGVyYXRvciBfX3gpIGNvbnN0IHsKICAgIHJl dHVybiBfTV9wIDwgX194Ll9NX3AgfHwgKF9NX3AgPT0gX194Ll9NX3AgJiYgX01fb2Zmc2V0IDwg X194Ll9NX29mZnNldCk7CiAgfQp9OwoKIAogCgojIDMxOSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z dGxfYnZlY3Rvci5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgX0J2ZWN0b3Jf YmFzZQp7CnB1YmxpYzoKICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0 b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsg fQoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQo KSwgX01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9CiAgfl9CdmVjdG9yX2Jhc2Uo KSB7IF9NX2RlYWxsb2NhdGUoKTsgfQoKcHJvdGVjdGVkOgogIHR5cGVkZWYgc2ltcGxlX2FsbG9j PHVuc2lnbmVkIGludCwgX0FsbG9jPiBfQWxsb2NfdHlwZTsKICAKICB1bnNpZ25lZCBpbnQqIF9N X2JpdF9hbGxvYyhzaXplX3QgX19uKSAKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0 ZSgoX19uICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9j YXRlKCkgewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9BbGxvY190eXBlOjpkZWFsbG9j YXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9v Zl9zdG9yYWdlIC0gX01fc3RhcnQuX01fcCk7CiAgfQoKICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0 OwogIF9CaXRfaXRlcmF0b3IgX01fZmluaXNoOwogIHVuc2lnbmVkIGludCogX01fZW5kX29mX3N0 b3JhZ2U7ICAKfTsKCgoKIAogCiAKIAoKCgoKCgoKCgoKICAgICAgICAKCiAgICAgICAgCnRlbXBs YXRlPGNsYXNzIF9BbGxvYz4gY2xhc3MgdmVjdG9yPGJvb2wsX0FsbG9jPgogIDogcHVibGljIF9C dmVjdG9yX2Jhc2U8X0FsbG9jPgoKCgoKewoKICB0eXBlZGVmIF9CdmVjdG9yX2Jhc2U8X0FsbG9j PiBfQmFzZTsKCgoKcHVibGljOgogIHR5cGVkZWYgYm9vbCB2YWx1ZV90eXBlOwogIHR5cGVkZWYg c2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7IAog IHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgYm9vbCBjb25zdF9y ZWZlcmVuY2U7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICB0eXBlZGVmIGNv bnN0IGJvb2wqIGNvbnN0X3BvaW50ZXI7CgogIHR5cGVkZWYgX0JpdF9pdGVyYXRvciAgICAgICAg ICAgICAgICBpdGVyYXRvcjsKICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgICAgICAgICAg Y29uc3RfaXRlcmF0b3I7CgoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0 b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0 ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKCgoKCgoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNl OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxs b2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKcHJvdGVj dGVkOgoKCgoKCgoKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luaXRpYWxpemUoc2l6ZV90eXBlIF9f bikgewogICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgIF9NX2Vu ZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwog ICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgX01fZmluaXNoID0gX01fc3RhcnQg KyBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICB9CiAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9y IF9fcG9zaXRpb24sIGJvb2wgX194KSB7CiAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5k X29mX3N0b3JhZ2UpIHsKICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfTV9maW5pc2gs IF9NX2ZpbmlzaCArIDEpOwogICAgICAqX19wb3NpdGlvbiA9IF9feDsKICAgICAgKytfTV9maW5p c2g7CiAgICB9CiAgICBlbHNlIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpID8gMiAq IHNpemUoKSA6IF9fV09SRF9CSVQ7CiAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2Fs bG9jKF9fbGVuKTsKICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9u LCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgKl9faSsrID0gX194OwogICAgICBfTV9maW5pc2gg PSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOwogICAgICBfTV9kZWFsbG9jYXRlKCk7CiAg ICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEpL19f V09SRF9CSVQ7CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgIH0KICB9CgoK ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbml0aWFsaXplX3Jh bmdlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICBfTV9zdGFydCA9 IGl0ZXJhdG9yKCk7CiAgICBfTV9maW5pc2ggPSBpdGVyYXRvcigpOwogICAgX01fZW5kX29mX3N0 b3JhZ2UgPSAwOwogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSAKICAg ICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9yYW5nZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmly c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBm b3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0YW5j ZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICBjb3B5 KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9fcG9zLAogICAgICAg ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgIGZv ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAgICBfX3BvcyA9IGluc2Vy dChfX3BvcywgKl9fZmlyc3QpOwogICAgICArK19fcG9zOwogICAgfQogIH0KCiAgdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3Ig X19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmly c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGZvcndh cmRfaXRlcmF0b3JfdGFnKSB7CiAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgc2l6 ZV90eXBlIF9fbiA9IDA7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAg ICAgaWYgKGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgICAgY29weV9iYWNrd2Fy ZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwog ICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgICBfTV9maW5p c2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAg c2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAgICAgICB1bnNp Z25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3IgX19p ID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICBf X2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5 KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAg ICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9CSVQgLSAxKS9fX1dP UkRfQklUOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgfQogICAg fQogIH0gICAgICAKCgoKcHVibGljOgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fc3Rh cnQ7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3N0YXJ0OyB9 CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fZmluaXNoOyB9CiAgY29uc3RfaXRlcmF0b3Ig ZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmJl Z2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNl X2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgCiAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVy YXRvcihlbmQoKSk7IAogIH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7IHJldHVybiByZXZl cnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkg Y29uc3QgeyAKICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyAKICB9 CgogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVn aW4oKSk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUo LTEpOyB9CiAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QgewogICAgcmV0dXJuIHNpemVfdHlw ZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSwgMCkgLSBiZWdpbigpKTsKICB9CiAg Ym9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KICByZWZlcmVu Y2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSB7CiAgICByZXR1cm4gKihiZWdpbigpICsgZGlm ZmVyZW5jZV90eXBlKF9fbikpOwogIH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXpl X3R5cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBl KF9fbikpOwogIH0KCiAgZXhwbGljaXQgdmVjdG9yIChjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19h ID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKSB7fQoKICB2ZWN0b3IgKHNpemVf dHlwZSBfX24sIGJvb2wgX192YWx1ZSwKICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUm IF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fYSkKICB7CiAgICBfTV9pbml0 aWFsaXplKF9fbik7CiAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBf X3ZhbHVlID8gfjAgOiAwKTsKICB9CgogIGV4cGxpY2l0IHZlY3RvciAoc2l6ZV90eXBlIF9fbikK ICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSkKICB7CiAgICBfTV9pbml0aWFsaXplKF9fbik7 CiAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCAwKTsKICB9CgogIHZl Y3RvciAoY29uc3QgdmVjdG9yICYgX194KSA6IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpIHsK ICAgIF9NX2luaXRpYWxpemUoX194LnNpemUoKSk7CiAgICBjb3B5KF9feC5iZWdpbigpLCBfX3gu ZW5kKCksIF9NX3N0YXJ0KTsKICB9CgoKICAgCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh dG9yPgogIHZlY3RvciAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5 cGUoKSkKICAgIDogX0Jhc2UoX19hKQogIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVn ZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5pdGlhbGl6 ZV9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CiAgICAKICB0ZW1w bGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnRl Z2VyIF9fbiwgX0ludGVnZXIgX194LCBfX3RydWVfdHlwZSkgewogICAgX01faW5pdGlhbGl6ZShf X24pOwogICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAg OiAwKTsKICB9CiAgICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBf TV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh dG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7 CiAgICBfTV9pbml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRl Z29yeSggX19maXJzdCApICk7CiAgfQojIDU4NyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfYnZl Y3Rvci5oIiAzCgoKICB+dmVjdG9yICgpIHsgfQoKICB2ZWN0b3IgJiBvcGVyYXRvcj0oY29uc3Qg dmVjdG9yICYgX194KSB7CiAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRoaXM7CiAgICBp ZiAoX194LnNpemUoKSA+IGNhcGFjaXR5KCkpIHsKICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAg ICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgfQogICAgY29weShfX3guYmVnaW4oKSwg X194LmVuZCgpLCBiZWdpbigpKTsKICAgIF9NX2ZpbmlzaCA9IGJlZ2luKCkgKyBkaWZmZXJlbmNl X3R5cGUoX194LnNpemUoKSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICAgCiAgIAogICAKICAg CgogIHZvaWQgYXNzaWduKHNpemVfdCBfX24sIGJvb2wgX194KSB7CiAgICBpZiAoX19uID4gc2l6 ZSgpKSB7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/ IH4wIDogMCk7CiAgICAgIGluc2VydChlbmQoKSwgX19uIC0gc2l6ZSgpLCBfX3gpOwogICAgfQog ICAgZWxzZSB7CiAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX24sIGVuZCgpKTsKICAgICAgZmlsbChf TV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgIH0KICB9 CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgYXNzaWduKF9JbnB1 dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0 eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7 CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAg fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2go X0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICB7IGFzc2lnbigo c2l6ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXI+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9f bGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7IH0KCiAgdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBf X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGlucHV0 X2l0ZXJhdG9yX3RhZykgewogICAgaXRlcmF0b3IgX19jdXIgPSBiZWdpbigpOwogICAgZm9yICgg OyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0 KQogICAgICAqX19jdXIgPSAqX19maXJzdDsKICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAg ICAgZXJhc2UoX19jdXIsIGVuZCgpKTsKICAgIGVsc2UKICAgICAgaW5zZXJ0KGVuZCgpLCBfX2Zp cnN0LCBfX2xhc3QpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAg dm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVy YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7 CiAgICBzaXplX3R5cGUgX19sZW4gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf X2xlbik7CiAgICBpZiAoX19sZW4gPCBzaXplKCkpCiAgICAgIGVyYXNlKGNvcHkoX19maXJzdCwg X19sYXN0LCBiZWdpbigpKSwgZW5kKCkpOwogICAgZWxzZSB7CiAgICAgIF9Gb3J3YXJkSXRlcmF0 b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICBhZHZhbmNlKF9fbWlkLCBzaXplKCkpOwogICAgICBj b3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdpbigpKTsKICAgICAgaW5zZXJ0KGVuZCgpLCBfX21pZCwg X19sYXN0KTsKICAgIH0KICB9ICAgIAoKCgogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7 CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9N X2JpdF9hbGxvYyhfX24pOwogICAgICBfTV9maW5pc2ggPSBjb3B5KGJlZ2luKCksIGVuZCgpLCBp dGVyYXRvcihfX3EsIDApKTsKICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICBfTV9zdGFydCA9 IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbiAr IF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgfQogIH0KCiAgcmVmZXJlbmNlIGZyb250 KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7 IHJldHVybiAqYmVnaW4oKTsgfQogIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAt IDEpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0g MSk7IH0KICB2b2lkIHB1c2hfYmFjayhib29sIF9feCkgewogICAgaWYgKF9NX2ZpbmlzaC5fTV9w ICE9IF9NX2VuZF9vZl9zdG9yYWdlKQogICAgICAqX01fZmluaXNoKysgPSBfX3g7CiAgICBlbHNl CiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgfQogIHZvaWQgc3dhcCh2ZWN0b3Ig JiBfX3gpIHsKICAgICA6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFydCk7CiAgICAgOjpzd2Fw KF9NX2ZpbmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICAgOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdl LCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3Ig X19wb3NpdGlvbiwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX24g PSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRf b2Zfc3RvcmFnZSAmJiBfX3Bvc2l0aW9uID09IGVuZCgpKQogICAgICAqX01fZmluaXNoKysgPSBf X3g7CiAgICBlbHNlCiAgICAgIF9NX2luc2VydF9hdXgoX19wb3NpdGlvbiwgX194KTsKICAgIHJl dHVybiBiZWdpbigpICsgX19uOwogIH0KCgogICAKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl cmF0b3I+CiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICBf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVk ZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVn cmFsOwogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCwg X0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01f aW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9f eCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkgewogICAgaW5zZXJ0KF9f cG9zLCAoc2l6ZV90eXBlKSBfX24sIChib29sKSBfX3gpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1 dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUp IHsKICAgIF9NX2luc2VydF9yYW5nZShfX3BvcywgX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9y X2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKICB9CiMgNzYxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGli L3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0 bF9idmVjdG9yLmgiIDMKCiAgCiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6 ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOwogICAgaWYg KGNhcGFjaXR5KCkgLSBzaXplKCkgPj0gX19uKSB7CiAgICAgIGNvcHlfYmFja3dhcmQoX19wb3Np dGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgZmls bChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7CiAg ICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgIH0KICAgIGVsc2Ugewog ICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICB1 bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgIGl0ZXJhdG9yIF9f aSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgIGZp bGxfbihfX2ksIF9fbiwgX194KTsKICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBl bmQoKSwgX19pICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICBfTV9kZWFsbG9jYXRlKCk7 CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEp L19fV09SRF9CSVQ7CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgIH0KICB9 CgogIHZvaWQgcG9wX2JhY2soKSB7IC0tX01fZmluaXNoOyB9CiAgaXRlcmF0b3IgZXJhc2UoaXRl cmF0b3IgX19wb3NpdGlvbikgewogICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAg ICBjb3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgIC0tX01fZmlu aXNoOwogICAgcmV0dXJuIF9fcG9zaXRpb247CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9y IF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fZmluaXNoID0gY29weShfX2xhc3Qs IGVuZCgpLCBfX2ZpcnN0KTsKICAgIHJldHVybiBfX2ZpcnN0OwogIH0KICB2b2lkIHJlc2l6ZShz aXplX3R5cGUgX19uZXdfc2l6ZSwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgIGlmIChfX25ld19z aXplIDwgc2l6ZSgpKSAKICAgICAgZXJhc2UoYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX25l d19zaXplKSwgZW5kKCkpOwogICAgZWxzZQogICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUg LSBzaXplKCksIF9feCk7CiAgfQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgp KTsgfQp9OwoKCgp0eXBlZGVmIHZlY3Rvcjxib29sLCBhbGxvYz4gYml0X3ZlY3RvcjsKCiMgODIy ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8u Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9idmVjdG9yLmgiIDMKCgoKCgoKCgoKCiAgCgoKCiAK IAogCiMgMzUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45 NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvdmVjdG9yIiAyIDMKCgoKCiAKIAogCiMgMTcg Ii4uL1NyY1NoYXJlZC9FbVBhbG1IZWFwLmgiIDIKCgpjbGFzcyBTZXNzaW9uRmlsZTsKCmNsYXNz IEVtUGFsbUNodW5rOwpjbGFzcyBFbVBhbG1NUFQ7CmNsYXNzIEVtUGFsbUhlYXA7Cgp0eXBlZGVm IHZlY3RvcjxFbVBhbG1DaHVuaz4JCUVtUGFsbUNodW5rTGlzdDsKdHlwZWRlZiB2ZWN0b3I8RW1Q YWxtTVBUPgkJRW1QYWxtTVBUTGlzdDsKdHlwZWRlZiB2ZWN0b3I8RW1QYWxtSGVhcD4JCUVtUGFs bUhlYXBMaXN0OwoKY2xhc3MgRW1TdHJlYW07CkVtU3RyZWFtJiBvcGVyYXRvciA8PCAoRW1TdHJl YW0mLCBjb25zdCBFbVBhbG1DaHVuayYpOwpFbVN0cmVhbSYgb3BlcmF0b3IgPj4gKEVtU3RyZWFt JiwgRW1QYWxtQ2h1bmsmKTsKCkVtU3RyZWFtJiBvcGVyYXRvciA8PCAoRW1TdHJlYW0mLCBjb25z dCBFbVBhbG1NUFQmKTsKRW1TdHJlYW0mIG9wZXJhdG9yID4+IChFbVN0cmVhbSYsIEVtUGFsbU1Q VCYpOwoKRW1TdHJlYW0mIG9wZXJhdG9yIDw8IChFbVN0cmVhbSYsIGNvbnN0IEVtUGFsbUhlYXAm KTsKRW1TdHJlYW0mIG9wZXJhdG9yID4+IChFbVN0cmVhbSYsIEVtUGFsbUhlYXAmKTsKCgpjbGFz cyBFbVBhbG1IZWFwCnsKIAoKCXB1YmxpYzoKCgkJc3RhdGljIHZvaWQJCQkJSW5pdGlhbGl6ZQkJ CQkodm9pZCk7CgkJc3RhdGljIHZvaWQJCQkJUmVzZXQJCQkJCSh2b2lkKTsKCQlzdGF0aWMgdm9p ZAkJCQlTYXZlCQkJCQkoU2Vzc2lvbkZpbGUmKTsKCQlzdGF0aWMgdm9pZAkJCQlMb2FkCQkJCQko U2Vzc2lvbkZpbGUmKTsKCQlzdGF0aWMgdm9pZAkJCQlEaXNwb3NlCQkJCQkodm9pZCk7CgoJCXN0 YXRpYyBFbVBhbG1IZWFwTGlzdDo6Y29uc3RfaXRlcmF0b3IKCQkJCQkJCQlHZXRIZWFwTGlzdEJl Z2luCQkodm9pZCk7CgkJc3RhdGljIEVtUGFsbUhlYXBMaXN0Ojpjb25zdF9pdGVyYXRvcgoJCQkJ CQkJCUdldEhlYXBMaXN0RW5kCQkJKHZvaWQpOwoKCQlzdGF0aWMgY29uc3QgRW1QYWxtSGVhcCoK CQkJCQkJCQlHZXRIZWFwQnlJRAkJCQkoVUludDE2KTsKCQlzdGF0aWMgY29uc3QgRW1QYWxtSGVh cCoKCQkJCQkJCQlHZXRIZWFwQnlQdHIJCQkoZW11cHRyKTsKCQlzdGF0aWMgY29uc3QgRW1QYWxt SGVhcCoKCQkJCQkJCQlHZXRIZWFwQnlQdHIJCQkoTWVtUHRyKTsKCQlzdGF0aWMgY29uc3QgRW1Q YWxtSGVhcCoKCQkJCQkJCQlHZXRIZWFwQnlIZGwJCQkoTWVtSGFuZGxlKTsKCgkJc3RhdGljIHZv aWQJCQkJTWVtSW5pdEhlYXBUYWJsZQkJKFVJbnQxNiBjYXJkTm8pOwoJCXN0YXRpYyB2b2lkCQkJ CU1lbUhlYXBJbml0CQkJCShVSW50MTYgaGVhcElELAoJCQkJCQkJCQkJCQkJCSBJbnQxNiBudW1I YW5kbGVzLAoJCQkJCQkJCQkJCQkJCSBCb29sZWFuIGluaXRDb250ZW50cyk7CgkJc3RhdGljIHZv aWQJCQkJTWVtSGVhcENvbXBhY3QJCQkoVUludDE2IGhlYXBJRCwKCQkJCQkJCQkJCQkJCQkgRW1Q YWxtQ2h1bmtMaXN0KiA9IF9fbnVsbCApOwoJCXN0YXRpYyB2b2lkCQkJCU1lbUhlYXBGcmVlQnlP d25lcklECShVSW50MTYgaGVhcElELAoJCQkJCQkJCQkJCQkJCSBVSW50MTYgb3duZXJJRCwKCQkJ CQkJCQkJCQkJCQkgRW1QYWxtQ2h1bmtMaXN0KiA9IF9fbnVsbCApOwoJCXN0YXRpYyB2b2lkCQkJ CU1lbUhlYXBTY3JhbWJsZQkJCShVSW50MTYgaGVhcElELAoJCQkJCQkJCQkJCQkJCSBFbVBhbG1D aHVua0xpc3QqID0gX19udWxsICk7CgoJCXN0YXRpYyB2b2lkCQkJCU1lbUNodW5rTmV3CQkJCShV SW50MTYgaGVhcElELAoJCQkJCQkJCQkJCQkJCSBNZW1QdHIsCgkJCQkJCQkJCQkJCQkJIFVJbnQx NiBhdHRyaWJ1dGVzLAoJCQkJCQkJCQkJCQkJCSBFbVBhbG1DaHVua0xpc3QqID0gX19udWxsICk7 CgkJc3RhdGljIHZvaWQJCQkJTWVtQ2h1bmtGcmVlCQkJKEVtUGFsbUhlYXAqIGhlYXAsCgkJCQkJ CQkJCQkJCQkJIEVtUGFsbUNodW5rTGlzdCogPSBfX251bGwgKTsKCgkJc3RhdGljIHZvaWQJCQkJ TWVtUHRyTmV3CQkJCShNZW1QdHIsCgkJCQkJCQkJCQkJCQkJIEVtUGFsbUNodW5rTGlzdCogPSBf X251bGwgKTsKCQlzdGF0aWMgdm9pZAkJCQlNZW1QdHJSZXNpemUJCQkoTWVtUHRyLAoJCQkJCQkJ CQkJCQkJCSBFbVBhbG1DaHVua0xpc3QqID0gX19udWxsICk7CgoJCXN0YXRpYyB2b2lkCQkJCU1l bUhhbmRsZU5ldwkJCShNZW1IYW5kbGUsCgkJCQkJCQkJCQkJCQkJIEVtUGFsbUNodW5rTGlzdCog PSBfX251bGwgKTsKCQlzdGF0aWMgdm9pZAkJCQlNZW1IYW5kbGVSZXNpemUJCQkoTWVtSGFuZGxl LAoJCQkJCQkJCQkJCQkJCSBFbVBhbG1DaHVua0xpc3QqID0gX19udWxsICk7CgkJc3RhdGljIHZv aWQJCQkJTWVtSGFuZGxlRnJlZQkJCShFbVBhbG1IZWFwKiBoZWFwLAoJCQkJCQkJCQkJCQkJCSBF bVBhbG1DaHVua0xpc3QqID0gX19udWxsICk7CgoJCXN0YXRpYyB2b2lkCQkJCU1lbUxvY2FsSURU b0xvY2tlZFB0cgkoTWVtUHRyLAoJCQkJCQkJCQkJCQkJCSBFbVBhbG1DaHVua0xpc3QqID0gX19u dWxsICk7CgkJc3RhdGljIHZvaWQJCQkJTWVtSGFuZGxlTG9jawkJCShNZW1IYW5kbGUsCgkJCQkJ CQkJCQkJCQkJIEVtUGFsbUNodW5rTGlzdCogPSBfX251bGwgKTsKCQlzdGF0aWMgdm9pZAkJCQlN ZW1IYW5kbGVVbmxvY2sJCQkoTWVtSGFuZGxlLAoJCQkJCQkJCQkJCQkJCSBFbVBhbG1DaHVua0xp c3QqID0gX19udWxsICk7CgkJc3RhdGljIHZvaWQJCQkJTWVtSGFuZGxlUmVzZXRMb2NrCQkoTWVt SGFuZGxlLAoJCQkJCQkJCQkJCQkJCSBFbVBhbG1DaHVua0xpc3QqID0gX19udWxsICk7CgkJc3Rh dGljIHZvaWQJCQkJTWVtUHRyUmVzZXRMb2NrCQkJKE1lbVB0ciwKCQkJCQkJCQkJCQkJCQkgRW1Q YWxtQ2h1bmtMaXN0KiA9IF9fbnVsbCApOwoJCXN0YXRpYyB2b2lkCQkJCU1lbVB0clVubG9jawkJ CShNZW1QdHIsCgkJCQkJCQkJCQkJCQkJIEVtUGFsbUNodW5rTGlzdCogPSBfX251bGwgKTsKCQlz dGF0aWMgdm9pZAkJCQlNZW1QdHJTZXRPd25lcgkJCShNZW1QdHIsCgkJCQkJCQkJCQkJCQkJIEVt UGFsbUNodW5rTGlzdCogPSBfX251bGwgKTsKCgkJc3RhdGljIHZvaWQJCQkJVmFsaWRhdGVBbGxI ZWFwcwkJKHZvaWQpOwoKCQlzdGF0aWMgTWVtUHRyCQkJRGVyZWZIYW5kbGUJCQkJKE1lbUhhbmRs ZSBoKTsKCQlzdGF0aWMgTWVtSGFuZGxlCQlSZWNvdmVySGFuZGxlCQkJKE1lbVB0ciBwKTsKCglw cml2YXRlOgoJCXN0YXRpYyB2b2lkCQkJCUFkZEhlYXAJCQkJCShVSW50MTYgaGVhcElEKTsKCQlz dGF0aWMgbG9uZwkJCQlHZXRIZWFwVmVyc2lvbgkJCShlbXVwdHIJaGVhcEhkcik7CgoJcHJpdmF0 ZToKCQoJCXN0YXRpYyBFbVBhbG1IZWFwTGlzdAlmZ0hlYXBMaXN0OwoKCiAKCglwdWJsaWM6CgoJ CQkJCQkJCUVtUGFsbUhlYXAJCQkJKHZvaWQpOwoJCQkJCQkJCUVtUGFsbUhlYXAJCQkJKFVJbnQx NiBoZWFwSUQpOwoJCQkJCQkJCUVtUGFsbUhlYXAJCQkJKGVtdXB0ciBoZWFwSGRyKTsKCQkJCQkJ CQlFbVBhbG1IZWFwCQkJCShjb25zdCBFbVBhbG1IZWFwJik7CgkJCQkJCQkJfkVtUGFsbUhlYXAJ CQkJKHZvaWQpOwoKCQlFbVBhbG1DaHVua0xpc3Q6OmNvbnN0X2l0ZXJhdG9yCgkJCQkJCQkJR2V0 Q2h1bmtMaXN0QmVnaW4JCSh2b2lkKSBjb25zdDsKCQlFbVBhbG1DaHVua0xpc3Q6OmNvbnN0X2l0 ZXJhdG9yCgkJCQkJCQkJR2V0Q2h1bmtMaXN0RW5kCQkJKHZvaWQpIGNvbnN0OwoKCQljb25zdCBF bVBhbG1DaHVuayoJCUdldENodW5rUmVmZXJlbmNlZEJ5CShNZW1IYW5kbGUpIGNvbnN0OwoJCWNv bnN0IEVtUGFsbUNodW5rKgkJR2V0Q2h1bmtDb250YWluaW5nCQkoZW11cHRyKSBjb25zdDsKCQlj b25zdCBFbVBhbG1DaHVuayoJCUdldENodW5rQm9keUNvbnRhaW5pbmcJKGVtdXB0cikgY29uc3Q7 CgoJCUVtUGFsbU1QVExpc3Q6OmNvbnN0X2l0ZXJhdG9yCgkJCQkJCQkJR2V0TVBUTGlzdEJlZ2lu CQkJKHZvaWQpIGNvbnN0OwoJCUVtUGFsbU1QVExpc3Q6OmNvbnN0X2l0ZXJhdG9yCgkJCQkJCQkJ R2V0TVBUTGlzdEVuZAkJCSh2b2lkKSBjb25zdDsKCgkJQm9vbAkJCQkJVHJhY2tlZAkJCQkJKHZv aWQpIGNvbnN0OwoJCUJvb2wJCQkJCVJlYWRPbmx5CQkJCSh2b2lkKSBjb25zdDsKCQlCb29sCQkJ CQlEeW5hbWljCQkJCQkodm9pZCkgY29uc3Q7CgoJCWVtdXB0cgkJCQkJU3RhcnQJCQkJCSh2b2lk KSBjb25zdAkJeyByZXR1cm4gZkhlYXBIZHJTdGFydDsgfQoJCWVtdXB0cgkJCQkJRW5kCQkJCQkJ KHZvaWQpIGNvbnN0CQl7IHJldHVybiBmSGVhcEhkclN0YXJ0ICsgZlNpemU7IH0KCQl1aW50MzIJ CQkJCVNpemUJCQkJCSh2b2lkKSBjb25zdAkJeyByZXR1cm4gRW5kICgpIC0gU3RhcnQgKCk7IH0K CQlCb29sCQkJCQlDb250YWlucwkJCQkoZW11cHRyIHApIGNvbnN0CXsgcmV0dXJuICgocCA+PSBT dGFydCAoKSkgJiYgKHAgPCBFbmQgKCkpKTsgfQoKCQllbXVwdHIJCQkJCUhlYWRlclN0YXJ0CQkJ CSh2b2lkKSBjb25zdAkJeyByZXR1cm4gZkhlYXBIZHJTdGFydDsgfQoJCWVtdXB0cgkJCQkJSGVh ZGVyRW5kCQkJCSh2b2lkKSBjb25zdAkJeyByZXR1cm4gZkhlYXBIZHJTdGFydCArIGZIZWFwSGRy U2l6ZTsgfQoJCXVpbnQzMgkJCQkJSGVhZGVyU2l6ZQkJCQkodm9pZCkgY29uc3QJCXsgcmV0dXJu IEhlYWRlckVuZCAoKSAtIEhlYWRlclN0YXJ0ICgpOyB9CgkJQm9vbAkJCQkJSGVhZGVyQ29udGFp bnMJCQkoZW11cHRyIHApIGNvbnN0CXsgcmV0dXJuICgocCA+PSBIZWFkZXJTdGFydCAoKSkgJiYg KHAgPCBIZWFkZXJFbmQgKCkpKTsgfQoKCQllbXVwdHIJCQkJCU1wdFN0YXJ0CQkJCSh2b2lkKSBj b25zdAkJeyByZXR1cm4gZkhlYXBIZHJTdGFydCArIGZIZWFwSGRyU2l6ZTsgfQoJCWVtdXB0cgkJ CQkJTXB0RW5kCQkJCQkodm9pZCkgY29uc3QJCXsgcmV0dXJuIGZGaXJzdENodW5rOyB9CgkJdWlu dDMyCQkJCQlNcHRTaXplCQkJCQkodm9pZCkgY29uc3QJCXsgcmV0dXJuIE1wdEVuZCAoKSAtIE1w dFN0YXJ0ICgpOyB9CgkJQm9vbAkJCQkJTXB0Q29udGFpbnMJCQkJKGVtdXB0ciBwKSBjb25zdAl7 IHJldHVybiAoKHAgPj0gTXB0U3RhcnQgKCkpICYmIChwIDwgTXB0RW5kICgpKSk7IH0KCgkJZW11 cHRyCQkJCQlEYXRhU3RhcnQJCQkJKHZvaWQpIGNvbnN0CQl7IHJldHVybiBmRmlyc3RDaHVuazsg fQoJCWVtdXB0cgkJCQkJRGF0YUVuZAkJCQkJKHZvaWQpIGNvbnN0CQl7IHJldHVybiBmSGVhcEhk clN0YXJ0ICsgZlNpemU7IH0KCQl1aW50MzIJCQkJCURhdGFTaXplCQkJCSh2b2lkKSBjb25zdAkJ eyByZXR1cm4gRGF0YUVuZCAoKSAtIERhdGFTdGFydCAoKTsgfQoJCUJvb2wJCQkJCURhdGFDb250 YWlucwkJCShlbXVwdHIgcCkgY29uc3QJeyByZXR1cm4gKChwID49IERhdGFTdGFydCAoKSkgJiYg KHAgPCBEYXRhRW5kICgpKSk7IH0KCgkJZW51bQoJCXsKCQkJa1ZlcnNpb25Vbmtub3duLAoJCQlr VmVyc2lvbjEsCSAKCQkJa1ZlcnNpb24yLAkgCgkJCWtWZXJzaW9uMywJIAoJCQlrVmVyc2lvbjQJ IAoJCX07CgoJCWxvbmcJCQkJCVZlcnNpb24JCQkJCSh2b2lkKSBjb25zdAkJeyByZXR1cm4gZlZl cnNpb247IH0KCQlsb25nCQkJCQlIZWFwSUQJCQkJCSh2b2lkKSBjb25zdAkJeyByZXR1cm4gZkhl YXBJRDsgfQoJCWxvbmcJCQkJCUNodW5rSGVhZGVyU2l6ZQkJCSh2b2lkKSBjb25zdAkJeyByZXR1 cm4gZkNodW5rSGRyU2l6ZTsgfQoKCQl2b2lkCQkJCQlWYWxpZGF0ZQkJCQkodm9pZCk7CgoJcHJp dmF0ZToKCgkJdm9pZAkJCQkJR2V0SGVhcEhlYWRlckluZm8JCShVSW50MTYJaGVhcElEKTsKCQl2 b2lkCQkJCQlHZXRIZWFwSGVhZGVySW5mbwkJKGVtdXB0cgloZWFwSGRyKTsKCgkJdm9pZAkJCQkJ UmVzeW5jQWxsCQkJCShFbVBhbG1DaHVua0xpc3QqIGRlbHRhKTsKCQl2b2lkCQkJCQlSZXN5bmNN UFRMaXN0CQkJKHZvaWQpOwoJCXZvaWQJCQkJCVJlc3luY0NodW5rTGlzdAkJCShFbVBhbG1DaHVu a0xpc3QqIGRlbHRhKTsKCQl2b2lkCQkJCQlSZXN5bmNQdHIJCQkJKE1lbVB0ciwKCQkJCQkJCQkJ CQkJCQkgRW1QYWxtQ2h1bmtMaXN0KiBkZWx0YSk7CgkJdm9pZAkJCQkJUmVzeW5jSGRsCQkJCShN ZW1IYW5kbGUsCgkJCQkJCQkJCQkJCQkJIEVtUGFsbUNodW5rTGlzdCogZGVsdGEpOwoKCQl2b2lk CQkJCQlHZW5lcmF0ZURlbHRhcwkJCShjb25zdCBFbVBhbG1DaHVua0xpc3QmIG9sZExpc3QsCgkJ CQkJCQkJCQkJCQkJIGNvbnN0IEVtUGFsbUNodW5rTGlzdCYgbmV3TGlzdCwKCQkJCQkJCQkJCQkJ CQkgRW1QYWxtQ2h1bmtMaXN0JiBkZWx0YSk7CgoKCXByaXZhdGU6CgkJZnJpZW5kIEVtU3RyZWFt JiBvcGVyYXRvciA8PCAoRW1TdHJlYW0mLCBjb25zdCBFbVBhbG1IZWFwJik7CgkJZnJpZW5kIEVt U3RyZWFtJiBvcGVyYXRvciA+PiAoRW1TdHJlYW0mLCBFbVBhbG1IZWFwJik7CgoJCWxvbmcJCQkJ CWZWZXJzaW9uOwoJCWxvbmcJCQkJCWZIZWFwSUQ7CgoJCWVtdXB0cgkJCQkJZkhlYXBIZHJTdGFy dDsKCQl1aW50MzIJCQkJCWZIZWFwSGRyU2l6ZTsJCSAKCQllbXVwdHIJCQkJCWZGaXJzdENodW5r OwkJIAoKCQlVSW50MTYJCQkJCWZGbGFnczsKCQlVSW50MzIJCQkJCWZTaXplOwoJCVVJbnQzMgkJ CQkJZkZpcnN0RnJlZTsKCQlVSW50MTYJCQkJCWZDaHVua0hkclNpemU7CgoJCUVtUGFsbUNodW5r TGlzdAkJCWZDaHVua0xpc3Q7CgkJRW1QYWxtTVBUTGlzdAkJCWZNUFRMaXN0Owp9OwoKCiAKCgoK CgoKCgoKCgoKCgoKCgpjbGFzcyBFbVBhbG1NUFQKewoJcHVibGljOgoJCQkJCQkJCUVtUGFsbU1Q VAkJCQkodm9pZCk7CgkJCQkJCQkJRW1QYWxtTVBUCQkJCShjb25zdCBFbVBhbG1IZWFwJiwKCQkJ CQkJCQkJCQkJCQkgZW11cHRyIG1wdEhkcik7CgkJCQkJCQkJRW1QYWxtTVBUCQkJCShjb25zdCBF bVBhbG1NUFQmKTsKCQkJCQkJCQl+RW1QYWxtTVBUCQkJCSh2b2lkKTsKCgkJdm9pZAkJCQkJVmFs aWRhdGUJCQkJKGNvbnN0IEVtUGFsbUhlYXAmIGhlYXApIGNvbnN0OwoKCQllbXVwdHIJCQkJCVN0 YXJ0CQkJCQkodm9pZCkgY29uc3QJCXsgcmV0dXJuIGZNcHRIZHJTdGFydDsgfQoJCWVtdXB0cgkJ CQkJRW5kCQkJCQkJKHZvaWQpIGNvbnN0CQl7IHJldHVybiBmTXB0SGRyU3RhcnQgKyBmU2l6ZTsg fQoJCXVpbnQzMgkJCQkJU2l6ZQkJCQkJKHZvaWQpIGNvbnN0CQl7IHJldHVybiBFbmQgKCkgLSBT dGFydCAoKTsgfQoJCUJvb2wJCQkJCUNvbnRhaW5zCQkJCShlbXVwdHIgcCkgY29uc3QJeyByZXR1 cm4gKChwID49IFN0YXJ0ICgpKSAmJiAocCA8IEVuZCAoKSkpOyB9CgoJCWVtdXB0cgkJCQkJSGVh ZGVyU3RhcnQJCQkJKHZvaWQpIGNvbnN0CQl7IHJldHVybiBmTXB0SGRyU3RhcnQ7IH0KCQllbXVw dHIJCQkJCUhlYWRlckVuZAkJCQkodm9pZCkgY29uc3QJCXsgcmV0dXJuIGZNcHRIZHJTdGFydCAr IGZNcHRIZHJTaXplOyB9CgkJdWludDMyCQkJCQlIZWFkZXJTaXplCQkJCSh2b2lkKSBjb25zdAkJ eyByZXR1cm4gSGVhZGVyRW5kICgpIC0gSGVhZGVyU3RhcnQgKCk7IH0KCQlCb29sCQkJCQlIZWFk ZXJDb250YWlucwkJCShlbXVwdHIgcCkgY29uc3QJeyByZXR1cm4gKChwID49IEhlYWRlclN0YXJ0 ICgpKSAmJiAocCA8IEhlYWRlckVuZCAoKSkpOyB9CgoJCWVtdXB0cgkJCQkJVGFibGVTdGFydAkJ CQkodm9pZCkgY29uc3QJCXsgcmV0dXJuIGZNcHRIZHJTdGFydCArIGZNcHRIZHJTaXplOyB9CgkJ ZW11cHRyCQkJCQlUYWJsZUVuZAkJCQkodm9pZCkgY29uc3QJCXsgcmV0dXJuIGZNcHRIZHJTdGFy dCArIGZTaXplOyB9CgkJdWludDMyCQkJCQlUYWJsZVNpemUJCQkJKHZvaWQpIGNvbnN0CQl7IHJl dHVybiBUYWJsZUVuZCAoKSAtIFRhYmxlU3RhcnQgKCk7IH0KCQlCb29sCQkJCQlUYWJsZUNvbnRh aW5zCQkJKGVtdXB0ciBwKSBjb25zdAl7IHJldHVybiAoKHAgPj0gVGFibGVTdGFydCAoKSkgJiYg KHAgPCBUYWJsZUVuZCAoKSkpOyB9CgoJCWVudW0KCQl7CgkJCWtWZXJzaW9uVW5rbm93biwKCQkJ a1ZlcnNpb24xLAkgCgkJCWtWZXJzaW9uMgkgCgkJfTsKCgkJbG9uZwkJCQkJVmVyc2lvbgkJCQkJ KHZvaWQpIGNvbnN0CQl7IHJldHVybiBmVmVyc2lvbjsgfQoJCVVJbnQzMgkJCQkJTmV4dFRhYmxl T2Zmc2V0CQkJKHZvaWQpIGNvbnN0CQl7IHJldHVybiBmTmV4dFRibE9mZnNldDsgfQoKCXByaXZh dGU6CgkJdm9pZAkJCQkJR2V0TVBUSW5mbwkJCQkoY29uc3QgRW1QYWxtSGVhcCYsCgkJCQkJCQkJ CQkJCQkJIGVtdXB0ciBtcHRIZHIpOwoKCXByaXZhdGU6CgkJZnJpZW5kIEVtU3RyZWFtJiBvcGVy YXRvciA8PCAoRW1TdHJlYW0mLCBjb25zdCBFbVBhbG1NUFQmKTsKCQlmcmllbmQgRW1TdHJlYW0m IG9wZXJhdG9yID4+IChFbVN0cmVhbSYsIEVtUGFsbU1QVCYpOwoKCQlsb25nCQlmVmVyc2lvbjsK CgkJZW11cHRyCQlmTXB0SGRyU3RhcnQ7CgkJdWludDMyCQlmTXB0SGRyU2l6ZTsJCQkgCgkJdWlu dDMyCQlmU2l6ZTsJCQkJCSAKCgkJVUludDE2CQlmTnVtRW50cmllczsKCQlVSW50MzIJCWZOZXh0 VGJsT2Zmc2V0Owp9OwoKCmNsYXNzIEVtUGFsbUNodW5rCnsKCXB1YmxpYzoKCQkJCQkJCQlFbVBh bG1DaHVuawkJCQkodm9pZCk7CgkJCQkJCQkJRW1QYWxtQ2h1bmsJCQkJKGNvbnN0IEVtUGFsbUhl YXAmLAoJCQkJCQkJCQkJCQkJCSBlbXVwdHIgY2h1bmtIZHIpOwoJCQkJCQkJCUVtUGFsbUNodW5r CQkJCShjb25zdCBFbVBhbG1DaHVuayYpOwoJCQkJCQkJCX5FbVBhbG1DaHVuawkJCSh2b2lkKTsK CgkJdm9pZAkJCQkJVmFsaWRhdGUJCQkJKGNvbnN0IEVtUGFsbUhlYXAmIGhlYXApIGNvbnN0OwoJ CUJvb2wJCQkJCUNvbXBhcmVGb3JEZWx0YQkJCShjb25zdCBFbVBhbG1DaHVuayYgbGhzKSBjb25z dDsKCgkJZW11cHRyCQkJCQlTdGFydAkJCQkJKHZvaWQpIGNvbnN0CQl7IHJldHVybiBmQ2h1bmtI ZHJTdGFydDsgfQoJCWVtdXB0cgkJCQkJRW5kCQkJCQkJKHZvaWQpIGNvbnN0CQl7IHJldHVybiBm Q2h1bmtIZHJTdGFydCArIGZTaXplOyB9CgkJdWludDMyCQkJCQlTaXplCQkJCQkodm9pZCkgY29u c3QJCXsgcmV0dXJuIEVuZCAoKSAtIFN0YXJ0ICgpOyB9CgkJQm9vbAkJCQkJQ29udGFpbnMJCQkJ KGVtdXB0ciBwKSBjb25zdAl7IHJldHVybiAoKHAgPj0gU3RhcnQgKCkpICYmIChwIDwgRW5kICgp KSk7IH0KCgkJZW11cHRyCQkJCQlIZWFkZXJTdGFydAkJCQkodm9pZCkgY29uc3QJCXsgcmV0dXJu IGZDaHVua0hkclN0YXJ0OyB9CgkJZW11cHRyCQkJCQlIZWFkZXJFbmQJCQkJKHZvaWQpIGNvbnN0 CQl7IHJldHVybiBmQ2h1bmtIZHJTdGFydCArIGZDaHVua0hkclNpemU7IH0KCQl1aW50MzIJCQkJ CUhlYWRlclNpemUJCQkJKHZvaWQpIGNvbnN0CQl7IHJldHVybiBIZWFkZXJFbmQgKCkgLSBIZWFk ZXJTdGFydCAoKTsgfQoJCUJvb2wJCQkJCUhlYWRlckNvbnRhaW5zCQkJKGVtdXB0ciBwKSBjb25z dAl7IHJldHVybiAoKHAgPj0gSGVhZGVyU3RhcnQgKCkpICYmIChwIDwgSGVhZGVyRW5kICgpKSk7 IH0KCgkJZW11cHRyCQkJCQlCb2R5U3RhcnQJCQkJKHZvaWQpIGNvbnN0CQl7IHJldHVybiBmQ2h1 bmtIZHJTdGFydCArIGZDaHVua0hkclNpemU7IH0KCQllbXVwdHIJCQkJCUJvZHlFbmQJCQkJCSh2 b2lkKSBjb25zdAkJeyByZXR1cm4gZkNodW5rSGRyU3RhcnQgKyBmU2l6ZSAtIGZTaXplQWRqOyB9 CgkJdWludDMyCQkJCQlCb2R5U2l6ZQkJCQkodm9pZCkgY29uc3QJCXsgcmV0dXJuIEJvZHlFbmQg KCkgLSBCb2R5U3RhcnQgKCk7IH0KCQlCb29sCQkJCQlCb2R5Q29udGFpbnMJCQkoZW11cHRyIHAp IGNvbnN0CXsgcmV0dXJuICgocCA+PSBCb2R5U3RhcnQgKCkpICYmIChwIDwgQm9keUVuZCAoKSkp OyB9CgoJCWVtdXB0cgkJCQkJVHJhaWxlclN0YXJ0CQkJKHZvaWQpIGNvbnN0CQl7IHJldHVybiBm Q2h1bmtIZHJTdGFydCArIGZTaXplIC0gZlNpemVBZGo7IH0KCQllbXVwdHIJCQkJCVRyYWlsZXJF bmQJCQkJKHZvaWQpIGNvbnN0CQl7IHJldHVybiBmQ2h1bmtIZHJTdGFydCArIGZTaXplOyB9CgkJ dWludDMyCQkJCQlUcmFpbGVyU2l6ZQkJCQkodm9pZCkgY29uc3QJCXsgcmV0dXJuIFRyYWlsZXJF bmQgKCkgLSBUcmFpbGVyU3RhcnQgKCk7IH0KCQlCb29sCQkJCQlUcmFpbGVyQ29udGFpbnMJCQko ZW11cHRyIHApIGNvbnN0CXsgcmV0dXJuICgocCA+PSBUcmFpbGVyU3RhcnQgKCkpICYmIChwIDwg VHJhaWxlckVuZCAoKSkpOyB9CgoJCWVudW0KCQl7CgkJCWtWZXJzaW9uVW5rbm93biwKCQkJa1Zl cnNpb24xLAkgCgkJCWtWZXJzaW9uMgkgCgkJfTsKCgkJbG9uZwkJCQkJVmVyc2lvbgkJCQkJKHZv aWQpIGNvbnN0CQl7IHJldHVybiBmVmVyc2lvbjsgfQoJCUJvb2wJCQkJCUZyZWUJCQkJCSh2b2lk KSBjb25zdAkJeyByZXR1cm4gZkZyZWU7IH0KCQl1aW50OAkJCQkJTG9ja0NvdW50CQkJCSh2b2lk KSBjb25zdAkJeyByZXR1cm4gZkxvY2tDb3VudDsgfQoJCXVpbnQ4CQkJCQlPd25lcgkJCQkJKHZv aWQpIGNvbnN0CQl7IHJldHVybiBmT3duZXI7IH0KCQlpbnQzMgkJCQkJSE9mZnNldAkJCQkJKHZv aWQpIGNvbnN0CQl7IHJldHVybiBmSE9mZnNldDsgfQoKCXByaXZhdGU6CgkJdm9pZAkJCQkJR2V0 Q2h1bmtJbmZvCQkJKGNvbnN0IEVtUGFsbUhlYXAmLAoJCQkJCQkJCQkJCQkJCSBlbXVwdHIgY2h1 bmtIZHIpOwoKCXByaXZhdGU6CgkJZnJpZW5kIEVtU3RyZWFtJiBvcGVyYXRvciA8PCAoRW1TdHJl YW0mLCBjb25zdCBFbVBhbG1DaHVuayYpOwoJCWZyaWVuZCBFbVN0cmVhbSYgb3BlcmF0b3IgPj4g KEVtU3RyZWFtJiwgRW1QYWxtQ2h1bmsmKTsKCgkJbG9uZwkJZlZlcnNpb247CgoJCWVtdXB0cgkJ ZkNodW5rSGRyU3RhcnQ7CgkJdWludDMyCQlmQ2h1bmtIZHJTaXplOwoKCQlib29sCQlmRnJlZTsJ CQkJIAoJCWJvb2wJCWZNb3ZlZDsJCQkJIAoJCWJvb2wJCWZVbnVzZWQyOwkJCSAKCQlib29sCQlm VW51c2VkMzsJCQkgCgkJdWludDgJCWZTaXplQWRqOwkJCSAKCQl1aW50MzIJCWZTaXplOwkJCQkg CgoJCXVpbnQ4CQlmTG9ja0NvdW50OwkJCSAKCQl1aW50OAkJZk93bmVyOwkJCQkgCgkJaW50MzIJ CWZIT2Zmc2V0OwkJCSAKCQkJCQkJCQkJCSAKCn07CgoKIyAxOCAiLi4vU3JjU2hhcmVkL01ldGFN ZW1vcnkuaCIgMgoKIyAxICIuLi9TcmNTaGFyZWQvRXJyb3JIYW5kbGluZy5oIiAxCiAKIAoKCgoK CgoKCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RyaW5nIiAxIDMKIAoKCgoKIyAx ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8u Li8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5oIiAxIDMKIAogCgogCiAKIAogCiAK CiAKIAogCiAKCiAKIAogCgogCiAKIAogCiAKCiAKIAoKCgoKCiNwcmFnbWEgaW50ZXJmYWNlCgoK IyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8u Li8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdGRkZWYiIDEgMwogCiAKCgoKIyAxICIvdXNyL2xv Y2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMgNAojIDM0MiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJp czIuOC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0CgojIDYgIi91c3IvbG9jYWwvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr LTMvY3N0ZGRlZiIgMiAzCgoKIyAzNSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcu aCIgMiAzCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMSAzCiAKIAoK IAogCiAKIAogCgogCiAKIAogCgogCiAKIAoKIAogCiAKIAogCgogCiAKCgoKCgogCiNwcmFnbWEg aW50ZXJmYWNlICJzdGQvc3RyYWl0cy5oIgoKCgoKZXh0ZXJuICJDKysiIHsKdGVtcGxhdGUgPGNs YXNzIGNoYXJUPgpzdHJ1Y3Qgc3RyaW5nX2NoYXJfdHJhaXRzIHsKICB0eXBlZGVmIGNoYXJUIGNo YXJfdHlwZTsgIAoKICAgCgogIHN0YXRpYyB2b2lkIGFzc2lnbiAoY2hhcl90eXBlJiBjMSwgY29u c3QgY2hhcl90eXBlJiBjMikKICAgIHsgYzEgPSBjMjsgfQogIHN0YXRpYyBib29sIGVxIChjb25z dCBjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFyX3R5cGUmIGMyKQogICAgeyByZXR1cm4gKGMxID09 IGMyKTsgfQogIHN0YXRpYyBib29sIG5lIChjb25zdCBjaGFyX3R5cGUmIGMxLCBjb25zdCBjaGFy X3R5cGUmIGMyKQogICAgeyByZXR1cm4gIShjMSA9PSBjMik7IH0KICBzdGF0aWMgYm9vbCBsdCAo Y29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChj MSA8IGMyKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUgZW9zICgpIHsgcmV0dXJuIGNoYXJfdHlwZSgp OyB9ICAKICBzdGF0aWMgYm9vbCBpc19kZWwoY2hhcl90eXBlIGEpIHsgcmV0dXJuIDA7IH0KICAg CiAgCiAgIAoKICBzdGF0aWMgaW50IGNvbXBhcmUgKGNvbnN0IGNoYXJfdHlwZSogczEsIGNvbnN0 IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgewogICAgICBzaXplX3QgaTsKICAgICAgZm9y IChpID0gMDsgaSA8IG47ICsraSkKCWlmIChuZSAoczFbaV0sIHMyW2ldKSkKCSAgcmV0dXJuIGx0 IChzMVtpXSwgczJbaV0pID8gLTEgOiAxOwoKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICAKICBz dGF0aWMgc2l6ZV90IGxlbmd0aCAoY29uc3QgY2hhcl90eXBlKiBzKQogICAgewogICAgICBzaXpl X3QgbCA9IDA7CiAgICAgIHdoaWxlIChuZSAoKnMrKywgZW9zICgpKSkKCSsrbDsKICAgICAgcmV0 dXJuIGw7CiAgICB9CgogIHN0YXRpYyBjaGFyX3R5cGUqIGNvcHkgKGNoYXJfdHlwZSogczEsIGNv bnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgewogICAgICBmb3IgKDsgbi0tOyApCglh c3NpZ24gKHMxW25dLCBzMltuXSk7CiAgICAgIHJldHVybiBzMTsKICAgIH0KCiAgc3RhdGljIGNo YXJfdHlwZSogbW92ZSAoY2hhcl90eXBlKiBzMSwgY29uc3QgY2hhcl90eXBlKiBzMiwgc2l6ZV90 IG4pCiAgICB7CiAgICAgIGNoYXJfdHlwZSBhW25dOwogICAgICBzaXplX3QgaTsKICAgICAgZm9y IChpID0gMDsgaSA8IG47ICsraSkKCWFzc2lnbiAoYVtpXSwgczJbaV0pOwogICAgICBmb3IgKGkg PSAwOyBpIDwgbjsgKytpKQoJYXNzaWduIChzMVtpXSwgYVtpXSk7CiAgICAgIHJldHVybiBzMTsK ICAgIH0KCiAgc3RhdGljIGNoYXJfdHlwZSogc2V0IChjaGFyX3R5cGUqIHMxLCBjb25zdCBjaGFy X3R5cGUmIGMsIHNpemVfdCBuKQogICAgewogICAgICBmb3IgKDsgbi0tOyApCglhc3NpZ24gKHMx W25dLCBjKTsKICAgICAgcmV0dXJuIHMxOwogICAgfQp9OwoKY2xhc3MgaXN0cmVhbTsKY2xhc3Mg b3N0cmVhbTsKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NjdHlwZSIgMSAzCiAKIAoKCgojIDEg Ii91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgojcHJhZ21h IGlkZW50CSJAKCMpY3R5cGUuaAkxLjMzCTk5LzA4LzEwIFNNSSIJCgojIDEgIi91c3IvaW5jbHVk ZS9pc28vY3R5cGVfaXNvLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCiAKCgoKCgoKCgoKCgoK CgojcHJhZ21hIGlkZW50CSJAKCMpY3R5cGVfaXNvLmgJMS4xCTk5LzA4LzA5IFNNSSIgCgoKCgpl eHRlcm4gIkMiIHsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IGlzYWxu dW0oaW50KTsKZXh0ZXJuIGludCBpc2FscGhhKGludCk7CmV4dGVybiBpbnQgaXNjbnRybChpbnQp OwpleHRlcm4gaW50IGlzZGlnaXQoaW50KTsKZXh0ZXJuIGludCBpc2dyYXBoKGludCk7CmV4dGVy biBpbnQgaXNsb3dlcihpbnQpOwpleHRlcm4gaW50IGlzcHJpbnQoaW50KTsKZXh0ZXJuIGludCBp c3B1bmN0KGludCk7CmV4dGVybiBpbnQgaXNzcGFjZShpbnQpOwpleHRlcm4gaW50IGlzdXBwZXIo aW50KTsKZXh0ZXJuIGludCBpc3hkaWdpdChpbnQpOwoKCgoKCgoKZXh0ZXJuIGludCB0b2xvd2Vy KGludCk7CmV4dGVybiBpbnQgdG91cHBlcihpbnQpOwoKCgoKCmV4dGVybiB1bnNpZ25lZCBjaGFy CV9fY3R5cGVbXTsKZXh0ZXJuIHVuc2lnbmVkIGludAkqX19jdHlwZV9tYXNrOwpleHRlcm4gaW50 CQkqX190cmFuc191cHBlcjsKZXh0ZXJuIGludAkJKl9fdHJhbnNfbG93ZXI7CgoKCiMgMTI5ICIv dXNyL2luY2x1ZGUvaXNvL2N0eXBlX2lzby5oIiAzIDQKCgojIDE0NCAiL3Vzci9pbmNsdWRlL2lz by9jdHlwZV9pc28uaCIgMyA0CgoKCgoKCgoKCgoKCgoKCgoKCgojIDE4MyAiL3Vzci9pbmNsdWRl L2lzby9jdHlwZV9pc28uaCIgMyA0CgoKCn0KCgoKIyAxOCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi IDIgMyA0CgoKIAoKCgojIDM4ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CgoKCmV4dGVybiAi QyIgewoKCgoKCgoKZXh0ZXJuIGludCBpc2FzY2lpKGludCk7CmV4dGVybiBpbnQgdG9hc2NpaShp bnQpOwpleHRlcm4gaW50IF90b2xvd2VyKGludCk7CmV4dGVybiBpbnQgX3RvdXBwZXIoaW50KTsK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDg3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CgoK Cn0KCgoKIyA2ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIu OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NjdHlwZSIgMiAzCgoKIyAxMDUgIi91c3Iv bG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4u L2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvbGliL2dj Yy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysr LTMvY3N0cmluZyIgMSAzCiAKIAoKCgoKCgojIDk0ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3Nw YXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2NzdHJp bmciIDMKCgoKIyAxMDYgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL3N0cmFpdHMuaCIgMiAzCgoK c3RydWN0IHN0cmluZ19jaGFyX3RyYWl0cyA8Y2hhcj4gewogIHR5cGVkZWYgY2hhciBjaGFyX3R5 cGU7CgogIHN0YXRpYyB2b2lkIGFzc2lnbiAoY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBl JiBjMikKICAgIHsgYzEgPSBjMjsgfQogIHN0YXRpYyBib29sIGVxIChjb25zdCBjaGFyX3R5cGUg JiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA9PSBjMik7IH0KICBz dGF0aWMgYm9vbCBuZSAoY29uc3QgY2hhcl90eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikK ICAgIHsgcmV0dXJuIChjMSAhPSBjMik7IH0KICBzdGF0aWMgYm9vbCBsdCAoY29uc3QgY2hhcl90 eXBlJiBjMSwgY29uc3QgY2hhcl90eXBlJiBjMikKICAgIHsgcmV0dXJuIChjMSA8IGMyKTsgfQog IHN0YXRpYyBjaGFyX3R5cGUgZW9zICgpIHsgcmV0dXJuIDA7IH0KICBzdGF0aWMgYm9vbCBpc19k ZWwoY2hhcl90eXBlIGEpIHsgcmV0dXJuICgoX19jdHlwZSArIDEpWyBhIF0gJiAweDAwMDAwMDA4 ICkgOyB9CgogIHN0YXRpYyBpbnQgY29tcGFyZSAoY29uc3QgY2hhcl90eXBlKiBzMSwgY29uc3Qg Y2hhcl90eXBlKiBzMiwgc2l6ZV90IG4pCiAgICB7IHJldHVybiBtZW1jbXAgKHMxLCBzMiwgbik7 IH0KICBzdGF0aWMgc2l6ZV90IGxlbmd0aCAoY29uc3QgY2hhcl90eXBlKiBzKQogICAgeyByZXR1 cm4gc3RybGVuIChzKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUqIGNvcHkgKGNoYXJfdHlwZSogczEs IGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgeyByZXR1cm4gKGNoYXJfdHlwZSop IG1lbWNweSAoczEsIHMyLCBuKTsgfQogIHN0YXRpYyBjaGFyX3R5cGUqIG1vdmUgKGNoYXJfdHlw ZSogczEsIGNvbnN0IGNoYXJfdHlwZSogczIsIHNpemVfdCBuKQogICAgeyByZXR1cm4gKGNoYXJf dHlwZSopIG1lbW1vdmUgKHMxLCBzMiwgbik7IH0KICBzdGF0aWMgY2hhcl90eXBlKiBzZXQgKGNo YXJfdHlwZSogczEsIGNvbnN0IGNoYXJfdHlwZSYgYywgc2l6ZV90IG4pCiAgICB7IHJldHVybiAo Y2hhcl90eXBlKikgbWVtc2V0IChzMSwgYywgbik7IH0KfTsKCiMgMTU5ICIvdXNyL2xvY2FsL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL3N0ZC9zdHJhaXRzLmgiIDMKCn0gIAoKIyAzNiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9z dGQvYmFzdHJpbmcuaCIgMiAzCgoKIAojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxsb2MuaCIg MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNDAgIi91c3IvbG9jYWwvbGliL2djYy1saWIv c3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvYWxs b2MuaCIgMwoKCgoKIAogCiAKIyAzOSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFzdHJpbmcu aCIgMiAzCgoKZXh0ZXJuICJDKysiIHsKY2xhc3MgaXN0cmVhbTsgY2xhc3Mgb3N0cmVhbTsKCiMg MSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4v Li4vLi4vLi4vaW5jbHVkZS9nKystMy9pdGVyYXRvciIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzIuOTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0MiAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvaW5jbHVkZS9zdGRkZWYuaCIgMyA0 CgojIDMyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUu My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2l0ZXJhdG9yIiAyIDMKCgoKCgoKCgoKCiAKIAog CiMgNDQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4z Ly4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RkL2Jhc3RyaW5nLmgiIDIgMwoKCgoKZXh0ZXJu IHZvaWQgX19vdXRfb2ZfcmFuZ2UgKGNvbnN0IGNoYXIgKik7CmV4dGVybiB2b2lkIF9fbGVuZ3Ro X2Vycm9yIChjb25zdCBjaGFyICopOwoKCgoKCgoKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBjaGFy VCwgY2xhc3MgdHJhaXRzID0gc3RyaW5nX2NoYXJfdHJhaXRzPGNoYXJUPiwKCSAgY2xhc3MgQWxs b2NhdG9yID0gYWxsb2MgPgpjbGFzcyBiYXNpY19zdHJpbmcKewpwcml2YXRlOgogIHN0cnVjdCBS ZXAgewogICAgc2l6ZV90IGxlbiwgcmVzLCByZWY7CiAgICBib29sIHNlbGZpc2g7CgogICAgY2hh clQqIGRhdGEgKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyVCAqPih0aGlzICsgMSk7 IH0KICAgIGNoYXJUJiBvcGVyYXRvcltdIChzaXplX3QgcykgeyByZXR1cm4gZGF0YSAoKSBbc107 IH0KICAgIGNoYXJUKiBncmFiICgpIHsgaWYgKHNlbGZpc2gpIHJldHVybiBjbG9uZSAoKTsgKyty ZWY7IHJldHVybiBkYXRhICgpOyB9CiMgMTA4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0 cmluZy5oIiAzCgogICAgdm9pZCByZWxlYXNlICgpIHsgaWYgKC0tcmVmID09IDApIGRlbGV0ZSB0 aGlzOyB9CgoKICAgIGlubGluZSBzdGF0aWMgdm9pZCAqIG9wZXJhdG9yIG5ldyAoc2l6ZV90LCBz aXplX3QpOwogICAgaW5saW5lIHN0YXRpYyB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqKTsK ICAgIGlubGluZSBzdGF0aWMgUmVwKiBjcmVhdGUgKHNpemVfdCk7CiAgICBjaGFyVCogY2xvbmUg KCk7CgogICAgaW5saW5lIHZvaWQgY29weSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3Qp OwogICAgaW5saW5lIHZvaWQgbW92ZSAoc2l6ZV90LCBjb25zdCBjaGFyVCAqLCBzaXplX3QpOwog ICAgaW5saW5lIHZvaWQgc2V0ICAoc2l6ZV90LCBjb25zdCBjaGFyVCwgICBzaXplX3QpOwoKICAg IGlubGluZSBzdGF0aWMgYm9vbCBleGNlc3Nfc2xvcCAoc2l6ZV90LCBzaXplX3QpOwogICAgaW5s aW5lIHN0YXRpYyBzaXplX3QgZnJvYl9zaXplIChzaXplX3QpOwoKICBwcml2YXRlOgogICAgUmVw ICZvcGVyYXRvcj0gKGNvbnN0IFJlcCAmKTsKICB9OwoKcHVibGljOgogCiAgdHlwZWRlZgkgICB0 cmFpdHMJCXRyYWl0c190eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzOjpjaGFyX3R5cGUJ dmFsdWVfdHlwZTsKICB0eXBlZGVmCSAgIEFsbG9jYXRvcgkJYWxsb2NhdG9yX3R5cGU7CgogIHR5 cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5 cGU7CiAgdHlwZWRlZiBjaGFyVCYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgY2hhclQmIGNv bnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIGNoYXJUKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qg Y2hhclQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBwb2ludGVyIGl0ZXJhdG9yOwogIHR5cGVk ZWYgY29uc3RfcG9pbnRlciBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVy YXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIDo6cmV2ZXJzZV9pdGVy YXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICBzdGF0aWMgY29u c3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsKCnByaXZhdGU6 CiAgUmVwICpyZXAgKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZXAgKj4oZGF0 KSAtIDE7IH0KICB2b2lkIHJlcHVwIChSZXAgKnApIHsgcmVwICgpLT5yZWxlYXNlICgpOyBkYXQg PSBwLT5kYXRhICgpOyB9CgpwdWJsaWM6CiAgY29uc3QgY2hhclQqIGRhdGEgKCkgY29uc3QKICAg IHsgcmV0dXJuIHJlcCAoKS0+ZGF0YSgpOyB9CiAgc2l6ZV90eXBlIGxlbmd0aCAoKSBjb25zdAog ICAgeyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgc2l6ZSAoKSBjb25zdAogICAg eyByZXR1cm4gcmVwICgpLT5sZW47IH0KICBzaXplX3R5cGUgY2FwYWNpdHkgKCkgY29uc3QKICAg IHsgcmV0dXJuIHJlcCAoKS0+cmVzOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplICgpIGNvbnN0CiAg ICB7IHJldHVybiAobnBvcyAtIDEpL3NpemVvZiAoY2hhclQpOyB9CQkgCiAgYm9vbCBlbXB0eSAo KSBjb25zdAogICAgeyByZXR1cm4gc2l6ZSAoKSA9PSAwOyB9CgogCiAgYmFzaWNfc3RyaW5nJiBv cGVyYXRvcj0gKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyKQogICAgewogICAgICBpZiAoJnN0ciAh PSB0aGlzKSB7IHJlcCAoKS0+cmVsZWFzZSAoKTsgZGF0ID0gc3RyLnJlcCAoKS0+Z3JhYiAoKTsg fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIGV4cGxpY2l0IGJhc2ljX3N0cmluZyAoKTog ZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyB9CiAgYmFzaWNfc3RyaW5nIChjb25zdCBiYXNpY19zdHJp bmcmIHN0cik6IGRhdCAoc3RyLnJlcCAoKS0+Z3JhYiAoKSkgeyB9CiAgYmFzaWNfc3RyaW5nIChj b25zdCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4gPSBucG9z KQogICAgOiBkYXQgKG5pbFJlcC5ncmFiICgpKSB7IGFzc2lnbiAoc3RyLCBwb3MsIG4pOyB9CiAg YmFzaWNfc3RyaW5nIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICA6IGRhdCAobmls UmVwLmdyYWIgKCkpIHsgYXNzaWduIChzLCBuKTsgfQogIGJhc2ljX3N0cmluZyAoY29uc3QgY2hh clQqIHMpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkpIHsgYXNzaWduIChzKTsgfQogIGJhc2lj X3N0cmluZyAoc2l6ZV90eXBlIG4sIGNoYXJUIGMpCiAgICA6IGRhdCAobmlsUmVwLmdyYWIgKCkp IHsgYXNzaWduIChuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0ZXJhdG9yPgogICAg YmFzaWNfc3RyaW5nKElucHV0SXRlcmF0b3IgX19iZWdpbiwgSW5wdXRJdGVyYXRvciBfX2VuZCkK CgoKICAgIDogZGF0IChuaWxSZXAuZ3JhYiAoKSkgeyBhc3NpZ24gKF9fYmVnaW4sIF9fZW5kKTsg fQoKICB+YmFzaWNfc3RyaW5nICgpCiAgICB7IHJlcCAoKS0+cmVsZWFzZSAoKTsgfQoKICB2b2lk IHN3YXAgKGJhc2ljX3N0cmluZyAmcykgeyBjaGFyVCAqZCA9IGRhdDsgZGF0ID0gcy5kYXQ7IHMu ZGF0ID0gZDsgfQoKICBiYXNpY19zdHJpbmcmIGFwcGVuZCAoY29uc3QgYmFzaWNfc3RyaW5nJiBz dHIsIHNpemVfdHlwZSBwb3MgPSAwLAoJCQlzaXplX3R5cGUgbiA9IG5wb3MpCiAgICB7IHJldHVy biByZXBsYWNlIChsZW5ndGggKCksIDAsIHN0ciwgcG9zLCBuKTsgfQogIGJhc2ljX3N0cmluZyYg YXBwZW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIG4pCiAgICB7IHJldHVybiByZXBsYWNl IChsZW5ndGggKCksIDAsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhcHBlbmQgKGNvbnN0IGNo YXJUKiBzKQogICAgeyByZXR1cm4gYXBwZW5kIChzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAg YmFzaWNfc3RyaW5nJiBhcHBlbmQgKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4g cmVwbGFjZSAobGVuZ3RoICgpLCAwLCBuLCBjKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBJbnB1dEl0 ZXJhdG9yPgogICAgYmFzaWNfc3RyaW5nJiBhcHBlbmQoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5w dXRJdGVyYXRvciBsYXN0KQoKCgogICAgeyByZXR1cm4gcmVwbGFjZSAoaWVuZCAoKSwgaWVuZCAo KSwgZmlyc3QsIGxhc3QpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNoYXJUIF9fYykKICB7IGFwcGVu ZCgxLCBfX2MpOyB9CiAgCiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGJhc2ljX3N0cmlu ZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwKCQkJc2l6ZV90eXBlIG4gPSBucG9zKQogICAgeyBy ZXR1cm4gcmVwbGFjZSAoMCwgbnBvcywgc3RyLCBwb3MsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBh c3NpZ24gKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgbikKICAgIHsgcmV0dXJuIHJlcGxhY2Ug KDAsIG5wb3MsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiBhc3NpZ24gKGNvbnN0IGNoYXJUKiBz KQogICAgeyByZXR1cm4gYXNzaWduIChzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgYmFzaWNf c3RyaW5nJiBhc3NpZ24gKHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAgeyByZXR1cm4gcmVwbGFj ZSAoMCwgbnBvcywgbiwgYyk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4KICAg IGJhc2ljX3N0cmluZyYgYXNzaWduKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3Ig bGFzdCkKCgoKICAgIHsgcmV0dXJuIHJlcGxhY2UgKGliZWdpbiAoKSwgaWVuZCAoKSwgZmlyc3Qs IGxhc3QpOyB9CgogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3I9IChjb25zdCBjaGFyVCogcykKICAg IHsgcmV0dXJuIGFzc2lnbiAocyk7IH0KICBiYXNpY19zdHJpbmcmIG9wZXJhdG9yPSAoY2hhclQg YykKICAgIHsgcmV0dXJuIGFzc2lnbiAoMSwgYyk7IH0KCiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRv cis9IChjb25zdCBiYXNpY19zdHJpbmcmIHJocykKICAgIHsgcmV0dXJuIGFwcGVuZCAocmhzKTsg fQogIGJhc2ljX3N0cmluZyYgb3BlcmF0b3IrPSAoY29uc3QgY2hhclQqIHMpCiAgICB7IHJldHVy biBhcHBlbmQgKHMpOyB9CiAgYmFzaWNfc3RyaW5nJiBvcGVyYXRvcis9IChjaGFyVCBjKQogICAg eyByZXR1cm4gYXBwZW5kICgxLCBjKTsgfQoKICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6ZV90 eXBlIHBvczEsIGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLAoJCQlzaXplX3R5cGUgcG9zMiA9IDAs IHNpemVfdHlwZSBuID0gbnBvcykKICAgIHsgcmV0dXJuIHJlcGxhY2UgKHBvczEsIDAsIHN0ciwg cG9zMiwgbik7IH0KICBiYXNpY19zdHJpbmcmIGluc2VydCAoc2l6ZV90eXBlIHBvcywgY29uc3Qg Y2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zLCAwLCBzLCBu KTsgfQogIGJhc2ljX3N0cmluZyYgaW5zZXJ0IChzaXplX3R5cGUgcG9zLCBjb25zdCBjaGFyVCog cykKICAgIHsgcmV0dXJuIGluc2VydCAocG9zLCBzLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAg YmFzaWNfc3RyaW5nJiBpbnNlcnQgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuLCBjaGFyVCBj KQogICAgeyByZXR1cm4gcmVwbGFjZSAocG9zLCAwLCBuLCBjKTsgfQogIGl0ZXJhdG9yIGluc2Vy dChpdGVyYXRvciBwLCBjaGFyVCBjKQogICAgeyBzaXplX3R5cGUgX19vID0gcCAtIGliZWdpbiAo KTsKICAgICAgaW5zZXJ0IChwIC0gaWJlZ2luICgpLCAxLCBjKTsgc2VsZmlzaCAoKTsKICAgICAg cmV0dXJuIGliZWdpbiAoKSArIF9fbzsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwLCBz aXplX3R5cGUgbiwgY2hhclQgYykKICAgIHsgc2l6ZV90eXBlIF9fbyA9IHAgLSBpYmVnaW4gKCk7 CiAgICAgIGluc2VydCAocCAtIGliZWdpbiAoKSwgbiwgYyk7IHNlbGZpc2ggKCk7CiAgICAgIHJl dHVybiBpYmVnaW4gKCkgKyBfX287IH0KCiAgdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdGVyYXRvcj4K ICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIHAsIElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRl cmF0b3IgbGFzdCkKCgoKICAgIHsgcmVwbGFjZSAocCwgcCwgZmlyc3QsIGxhc3QpOyB9CgogIGJh c2ljX3N0cmluZyYgZXJhc2UgKHNpemVfdHlwZSBwb3MgPSAwLCBzaXplX3R5cGUgbiA9IG5wb3Mp CiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4sIChzaXplX3R5cGUpMCwgKGNoYXJUKTApOyB9 CiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgcCkKICAgIHsgc2l6ZV90eXBlIF9fbyA9IHAgLSBi ZWdpbigpOwogICAgICByZXBsYWNlIChfX28sIDEsIChzaXplX3R5cGUpMCwgKGNoYXJUKTApOyBz ZWxmaXNoICgpOwogICAgICByZXR1cm4gaWJlZ2luKCkgKyBfX287IH0KICBpdGVyYXRvciBlcmFz ZShpdGVyYXRvciBmLCBpdGVyYXRvciBsKQogICAgeyBzaXplX3R5cGUgX19vID0gZiAtIGliZWdp bigpOwogICAgICByZXBsYWNlIChfX28sIGwtZiwgKHNpemVfdHlwZSkwLCAoY2hhclQpMCk7c2Vs ZmlzaCAoKTsKICAgICAgcmV0dXJuIGliZWdpbigpICsgX19vOyB9CgogIGJhc2ljX3N0cmluZyYg cmVwbGFjZSAoc2l6ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSwgY29uc3QgYmFzaWNfc3RyaW5n JiBzdHIsCgkJCSBzaXplX3R5cGUgcG9zMiA9IDAsIHNpemVfdHlwZSBuMiA9IG5wb3MpOwogIGJh c2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBjb25zdCBj aGFyVCogcywKCQkJIHNpemVfdHlwZSBuMik7CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChzaXpl X3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gcmVw bGFjZSAocG9zLCBuMSwgcywgdHJhaXRzOjpsZW5ndGggKHMpKTsgfQogIGJhc2ljX3N0cmluZyYg cmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBzaXplX3R5cGUgbjIsIGNoYXJU IGMpOwogIGJhc2ljX3N0cmluZyYgcmVwbGFjZSAoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4s IGNoYXJUIGMpCiAgICB7IHJldHVybiByZXBsYWNlIChwb3MsIG4sIDEsIGMpOyB9CiAgYmFzaWNf c3RyaW5nJiByZXBsYWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGJhc2ljX3N0 cmluZyYgc3RyKQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEs IHN0cik7IH0KICBiYXNpY19zdHJpbmcmIHJlcGxhY2UgKGl0ZXJhdG9yIGkxLCBpdGVyYXRvciBp MiwgY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuKQogICAgeyByZXR1cm4gcmVwbGFjZSAoaTEg LSBpYmVnaW4gKCksIGkyIC0gaTEsIHMsIG4pOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBsYWNlIChp dGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIGNvbnN0IGNoYXJUKiBzKQogICAgeyByZXR1cm4gcmVw bGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIHMpOyB9CiAgYmFzaWNfc3RyaW5nJiByZXBs YWNlIChpdGVyYXRvciBpMSwgaXRlcmF0b3IgaTIsIHNpemVfdHlwZSBuLCBjaGFyVCBjKQogICAg eyByZXR1cm4gcmVwbGFjZSAoaTEgLSBpYmVnaW4gKCksIGkyIC0gaTEsIG4sIGMpOyB9CgogIHRl bXBsYXRlPGNsYXNzIElucHV0SXRlcmF0b3I+CiAgICBiYXNpY19zdHJpbmcmIHJlcGxhY2UoaXRl cmF0b3IgaTEsIGl0ZXJhdG9yIGkyLAoJCQkgIElucHV0SXRlcmF0b3IgajEsIElucHV0SXRlcmF0 b3IgajIpOwoKCgoKCnByaXZhdGU6CiAgc3RhdGljIGNoYXJUIGVvcyAoKSB7IHJldHVybiB0cmFp dHM6OmVvcyAoKTsgfQogIHZvaWQgdW5pcXVlICgpIHsgaWYgKHJlcCAoKS0+cmVmID4gMSkgYWxs b2MgKGxlbmd0aCAoKSwgdHJ1ZSk7IH0KICB2b2lkIHNlbGZpc2ggKCkgeyB1bmlxdWUgKCk7IHJl cCAoKS0+c2VsZmlzaCA9IHRydWU7IH0KCnB1YmxpYzoKICBjaGFyVCBvcGVyYXRvcltdIChzaXpl X3R5cGUgcG9zKSBjb25zdAogICAgewogICAgICBpZiAocG9zID09IGxlbmd0aCAoKSkKCXJldHVy biBlb3MgKCk7CiAgICAgIHJldHVybiBkYXRhICgpW3Bvc107CiAgICB9CgogIHJlZmVyZW5jZSBv cGVyYXRvcltdIChzaXplX3R5cGUgcG9zKQogICAgeyBzZWxmaXNoICgpOyByZXR1cm4gKCpyZXAg KCkpW3Bvc107IH0KCiAgcmVmZXJlbmNlIGF0IChzaXplX3R5cGUgcG9zKQogICAgewogICAgICBk byB7IGlmICggcG9zID49IGxlbmd0aCAoKSApIF9fb3V0X29mX3JhbmdlICgicG9zID49IGxlbmd0 aCAoKSIpOyB9IHdoaWxlICgwKSA7CiAgICAgIHJldHVybiAoKnRoaXMpW3Bvc107CiAgICB9CiAg Y29uc3RfcmVmZXJlbmNlIGF0IChzaXplX3R5cGUgcG9zKSBjb25zdAogICAgewogICAgICBkbyB7 IGlmICggcG9zID49IGxlbmd0aCAoKSApIF9fb3V0X29mX3JhbmdlICgicG9zID49IGxlbmd0aCAo KSIpOyB9IHdoaWxlICgwKSA7CiAgICAgIHJldHVybiBkYXRhICgpW3Bvc107CiAgICB9Cgpwcml2 YXRlOgogIHZvaWQgdGVybWluYXRlICgpIGNvbnN0CiAgICB7IHRyYWl0czo6YXNzaWduICgoKnJl cCAoKSlbbGVuZ3RoICgpXSwgZW9zICgpKTsgfQoKcHVibGljOgogIGNvbnN0IGNoYXJUKiBjX3N0 ciAoKSBjb25zdAogICAgeyBpZiAobGVuZ3RoICgpID09IDApIHJldHVybiAiIjsgdGVybWluYXRl ICgpOyByZXR1cm4gZGF0YSAoKTsgfQogIHZvaWQgcmVzaXplIChzaXplX3R5cGUgbiwgY2hhclQg Yyk7CiAgdm9pZCByZXNpemUgKHNpemVfdHlwZSBuKQogICAgeyByZXNpemUgKG4sIGVvcyAoKSk7 IH0KICB2b2lkIHJlc2VydmUgKHNpemVfdHlwZSkgeyB9CgogIHNpemVfdHlwZSBjb3B5IChjaGFy VCogcywgc2l6ZV90eXBlIG4sIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdDsKCiAgc2l6ZV90eXBl IGZpbmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gMCkgY29uc3QK ICAgIHsgcmV0dXJuIGZpbmQgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNp emVfdHlwZSBmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4p IGNvbnN0OwogIHNpemVfdHlwZSBmaW5kIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9 IDApIGNvbnN0CiAgICB7IHJldHVybiBmaW5kIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7 IH0KICBzaXplX3R5cGUgZmluZCAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0OwoK ICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9z ID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5s ZW5ndGgoKSk7IH0KICBzaXplX3R5cGUgcmZpbmQgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUg cG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6ZV90eXBlIHJmaW5kIChjb25zdCBjaGFyVCog cywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiByZmluZCAocywgcG9z LCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIHJmaW5kIChjaGFyVCBjLCBzaXpl X3R5cGUgcG9zID0gbnBvcykgY29uc3Q7CgogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X29mIChjb25z dCBiYXNpY19zdHJpbmcmIHN0ciwgc2l6ZV90eXBlIHBvcyA9IDApIGNvbnN0CiAgICB7IHJldHVy biBmaW5kX2ZpcnN0X29mIChzdHIuZGF0YSgpLCBwb3MsIHN0ci5sZW5ndGgoKSk7IH0KICBzaXpl X3R5cGUgZmluZF9maXJzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVf dHlwZSBuKSBjb25zdDsKICBzaXplX3R5cGUgZmluZF9maXJzdF9vZiAoY29uc3QgY2hhclQqIHMs IHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9maXJzdF9vZiAocywg cG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CiAgc2l6ZV90eXBlIGZpbmRfZmlyc3Rfb2YgKGNo YXJUIGMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZCAoYywgcG9z KTsgfQoKICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjb25zdCBiYXNpY19zdHJpbmcmIHN0ciwg c2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBmaW5kX2xhc3Rfb2YgKHN0 ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2xhc3Rfb2Yg KGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3Q7CiAgc2l6 ZV90eXBlIGZpbmRfbGFzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSBucG9z KSBjb25zdAogICAgeyByZXR1cm4gZmluZF9sYXN0X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3Ro IChzKSk7IH0KICBzaXplX3R5cGUgZmluZF9sYXN0X29mIChjaGFyVCBjLCBzaXplX3R5cGUgcG9z ID0gbnBvcykgY29uc3QKICAgIHsgcmV0dXJuIHJmaW5kIChjLCBwb3MpOyB9CgogIHNpemVfdHlw ZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBw b3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gZmluZF9maXJzdF9ub3Rfb2YgKHN0ci5kYXRhKCks IHBvcywgc3RyLmxlbmd0aCgpKTsgfQogIHNpemVfdHlwZSBmaW5kX2ZpcnN0X25vdF9vZiAoY29u c3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBzaXplX3R5 cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNvbnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zID0gMCkg Y29uc3QKICAgIHsgcmV0dXJuIGZpbmRfZmlyc3Rfbm90X29mIChzLCBwb3MsIHRyYWl0czo6bGVu Z3RoIChzKSk7IH0KICBzaXplX3R5cGUgZmluZF9maXJzdF9ub3Rfb2YgKGNoYXJUIGMsIHNpemVf dHlwZSBwb3MgPSAwKSBjb25zdDsKCiAgc2l6ZV90eXBlIGZpbmRfbGFzdF9ub3Rfb2YgKGNvbnN0 IGJhc2ljX3N0cmluZyYgc3RyLCBzaXplX3R5cGUgcG9zID0gbnBvcykgY29uc3QKICAgIHsgcmV0 dXJuIGZpbmRfbGFzdF9ub3Rfb2YgKHN0ci5kYXRhKCksIHBvcywgc3RyLmxlbmd0aCgpKTsgfQog IHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBv cywgc2l6ZV90eXBlIG4pIGNvbnN0OwogIHNpemVfdHlwZSBmaW5kX2xhc3Rfbm90X29mIChjb25z dCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0CiAgICB7IHJldHVybiBmaW5k X2xhc3Rfbm90X29mIChzLCBwb3MsIHRyYWl0czo6bGVuZ3RoIChzKSk7IH0KICBzaXplX3R5cGUg ZmluZF9sYXN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcyA9IG5wb3MpIGNvbnN0OwoK ICBiYXNpY19zdHJpbmcgc3Vic3RyIChzaXplX3R5cGUgcG9zID0gMCwgc2l6ZV90eXBlIG4gPSBu cG9zKSBjb25zdAogICAgeyByZXR1cm4gYmFzaWNfc3RyaW5nICgqdGhpcywgcG9zLCBuKTsgfQoK ICBpbnQgY29tcGFyZSAoY29uc3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MgPSAw LCBzaXplX3R5cGUgbiA9IG5wb3MpIGNvbnN0OwogICAKICBpbnQgY29tcGFyZSAoY29uc3QgY2hh clQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdDsKICBpbnQgY29tcGFyZSAo Y29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MgPSAwKSBjb25zdAogICAgeyByZXR1cm4gY29t cGFyZSAocywgcG9zLCB0cmFpdHM6Omxlbmd0aCAocykpOyB9CgogIGl0ZXJhdG9yIGJlZ2luICgp IHsgc2VsZmlzaCAoKTsgcmV0dXJuICYoKnRoaXMpWzBdOyB9CiAgaXRlcmF0b3IgZW5kICgpIHsg c2VsZmlzaCAoKTsgcmV0dXJuICYoKnRoaXMpW2xlbmd0aCAoKV07IH0KCnByaXZhdGU6CiAgaXRl cmF0b3IgaWJlZ2luICgpIGNvbnN0IHsgcmV0dXJuICYoKnJlcCAoKSlbMF07IH0KICBpdGVyYXRv ciBpZW5kICgpIGNvbnN0IHsgcmV0dXJuICYoKnJlcCAoKSlbbGVuZ3RoICgpXTsgfQoKcHVibGlj OgogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luICgpIGNvbnN0IHsgcmV0dXJuIGliZWdpbiAoKTsgfQog IGNvbnN0X2l0ZXJhdG9yIGVuZCAoKSBjb25zdCB7IHJldHVybiBpZW5kICgpOyB9CgogIHJldmVy c2VfaXRlcmF0b3IgICAgICAgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvciAoZW5k ICgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0 dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgKGVuZCAoKSk7IH0KICByZXZlcnNlX2l0ZXJhdG9y ICAgICAgIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yIChiZWdpbiAoKSk7IH0KICBj b25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfcmV2 ZXJzZV9pdGVyYXRvciAoYmVnaW4gKCkpOyB9Cgpwcml2YXRlOgogIHZvaWQgYWxsb2MgKHNpemVf dHlwZSBzaXplLCBib29sIHNhdmUpOwogIHN0YXRpYyBzaXplX3R5cGUgX2ZpbmQgKGNvbnN0IGNo YXJUKiBwdHIsIGNoYXJUIGMsIHNpemVfdHlwZSB4cG9zLCBzaXplX3R5cGUgbGVuKTsKICBpbmxp bmUgYm9vbCBjaGVja19yZWFsbG9jIChzaXplX3R5cGUgcykgY29uc3Q7CgogIHN0YXRpYyBSZXAg bmlsUmVwOwogIGNoYXJUICpkYXQ7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0 cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4gdGVtcGxhdGUgPGNsYXNzIElucHV0SXRlcmF0b3I+CmJh c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgYmFzaWNfc3RyaW5nIDxjaGFy VCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVwbGFjZSAoaXRlcmF0b3IgaTEsIGl0ZXJhdG9yIGky LCBJbnB1dEl0ZXJhdG9yIGoxLCBJbnB1dEl0ZXJhdG9yIGoyKQoKCgoKCnsKICBjb25zdCBzaXpl X3R5cGUgbGVuID0gbGVuZ3RoICgpOwogIHNpemVfdHlwZSBwb3MgPSBpMSAtIGliZWdpbiAoKTsK ICBzaXplX3R5cGUgbjEgPSBpMiAtIGkxOwogIHNpemVfdHlwZSBuMiA9IGoyIC0gajE7CgogIGRv IHsgaWYgKCBwb3MgPiBsZW4gKSBfX291dF9vZl9yYW5nZSAoInBvcyA+IGxlbiIpOyB9IHdoaWxl ICgwKSA7CiAgaWYgKG4xID4gbGVuIC0gcG9zKQogICAgbjEgPSBsZW4gLSBwb3M7CiAgZG8geyBp ZiAoIGxlbiAtIG4xID4gbWF4X3NpemUgKCkgLSBuMiApIF9fbGVuZ3RoX2Vycm9yICgibGVuIC0g bjEgPiBtYXhfc2l6ZSAoKSAtIG4yIik7IH0gd2hpbGUgKDApIDsKICBzaXplX3QgbmV3bGVuID0g bGVuIC0gbjEgKyBuMjsKCiAgaWYgKGNoZWNrX3JlYWxsb2MgKG5ld2xlbikpCiAgICB7CiAgICAg IFJlcCAqcCA9IFJlcDo6Y3JlYXRlIChuZXdsZW4pOwogICAgICBwLT5jb3B5ICgwLCBkYXRhICgp LCBwb3MpOwogICAgICBwLT5jb3B5IChwb3MgKyBuMiwgZGF0YSAoKSArIHBvcyArIG4xLCBsZW4g LSAocG9zICsgbjEpKTsKICAgICAgZm9yICg7IGoxICE9IGoyOyArK2oxLCArK3BvcykKCXRyYWl0 czo6YXNzaWduICgoKnApW3Bvc10sICpqMSk7CiAgICAgIHJlcHVwIChwKTsKICAgIH0KICBlbHNl CiAgICB7CiAgICAgIHJlcCAoKS0+bW92ZSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwg bGVuIC0gKHBvcyArIG4xKSk7CiAgICAgIGZvciAoOyBqMSAhPSBqMjsgKytqMSwgKytwb3MpCgl0 cmFpdHM6OmFzc2lnbiAoKCpyZXAgKCkpW3Bvc10sICpqMSk7CiAgICB9CiAgcmVwICgpLT5sZW4g PSBuZXdsZW47CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFz cyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPiYgbGhzLAoJICAgY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh aXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj4gc3RyIChsaHMpOwogIHN0ci5hcHBlbmQgKHJocyk7CiAgcmV0dXJuIHN0cjsKfQoK dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5s aW5lIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPgpvcGVyYXRvcisgKGNv bnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh dG9yPiYgcmhzKQp7CiAgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0 ciAobGhzKTsKICBzdHIuYXBwZW5kIChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxj bGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19z dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjaGFyVCBsaHMsIGNv bnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgYmFz aWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+IHN0ciAoMSwgbGhzKTsKICBzdHIu YXBwZW5kIChyaHMpOwogIHJldHVybiBzdHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBiYXNpY19zdHJpbmcgPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj4Kb3BlcmF0b3IrIChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0 cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIGJhc2ljX3N0cmlu ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAocmhz KTsKICByZXR1cm4gc3RyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg Y2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv Y2F0b3I+Cm9wZXJhdG9yKyAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxv Y2F0b3I+JiBsaHMsIGNoYXJUIHJocykKewogIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg QWxsb2NhdG9yPiBzdHIgKGxocyk7CiAgc3RyLmFwcGVuZCAoMSwgcmhzKTsKICByZXR1cm4gc3Ry Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y PgppbmxpbmUgYm9vbApvcGVyYXRvcj09IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp dHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFp dHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPT0gMCk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+ CmlubGluZSBib29sCm9wZXJhdG9yPT0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0 cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29t cGFyZSAobGhzKSA9PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs IGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PSAoY29uc3QgYmFzaWNfc3Ry aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsK ICByZXR1cm4gKGxocy5jb21wYXJlIChyaHMpID09IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hh clQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvciE9 IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgIT0gMCk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGlu ZSBib29sCm9wZXJhdG9yIT0gKGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxs b2NhdG9yPiYgbGhzLCBjb25zdCBjaGFyVCogcmhzKQp7CiAgcmV0dXJuIChsaHMuY29tcGFyZSAo cmhzKSAhPSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz IEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBiYXNpY19zdHJpbmcgPGNo YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJpbmcgPGNo YXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJo cykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFs bG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBi YXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAo cmhzLmNvbXBhcmUgKGxocykgPiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0 cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8IChjb25zdCBiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJo cykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNz IGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0 b3I+IChjb25zdCBjaGFyVCogbGhzLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs IEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAocmhzLmNvbXBhcmUgKGxocykgPCAwKTsKfQoK dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5s aW5lIGJvb2wKb3BlcmF0b3I+IChjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj4mIGxocywgY29uc3QgY2hhclQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUg KHJocykgPiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz IEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PSAoY29uc3QgY2hhclQqIGxocywgY29u c3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1 cm4gKHJocy5jb21wYXJlIChsaHMpID49IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcjw9IChjb25z dCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywgY29uc3QgY2hh clQqIHJocykKewogIHJldHVybiAobGhzLmNvbXBhcmUgKHJocykgPD0gMCk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29s Cm9wZXJhdG9yPj0gKGNvbnN0IGNoYXJUKiBsaHMsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQs IHRyYWl0cywgQWxsb2NhdG9yPiYgcmhzKQp7CiAgcmV0dXJuIChyaHMuY29tcGFyZSAobGhzKSA8 PSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9j YXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PSAoY29uc3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwg dHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsIGNvbnN0IGNoYXJUKiByaHMpCnsKICByZXR1cm4gKGxo cy5jb21wYXJlIChyaHMpID49IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy YWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvciE9IChjb25zdCBiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNp Y19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhz LmNvbXBhcmUgKHJocykgIT0gMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSBib29sCm9wZXJhdG9yPiAoY29uc3QgYmFzaWNf c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkgICBjb25zdCBiYXNpY19z dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNv bXBhcmUgKHJocykgPiAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMs IGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PSAoY29uc3QgYmFzaWNfc3Ry aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiBsaHMsCgkgICAgY29uc3QgYmFzaWNfc3Ry aW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiByaHMpCnsKICByZXR1cm4gKGxocy5jb21w YXJlIChyaHMpIDw9IDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywg Y2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYm9vbApvcGVyYXRvcj49IChjb25zdCBiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIGxocywKCSAgICBjb25zdCBiYXNpY19zdHJp bmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mIHJocykKewogIHJldHVybiAobGhzLmNvbXBh cmUgKHJocykgPj0gMCk7Cn0KCmNsYXNzIGlzdHJlYW07IGNsYXNzIG9zdHJlYW07CnRlbXBsYXRl IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+IGlzdHJlYW0mCm9w ZXJhdG9yPj4gKGlzdHJlYW0mLCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv cj4mKTsKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRv cj4gb3N0cmVhbSYKb3BlcmF0b3I8PCAob3N0cmVhbSYsIGNvbnN0IGJhc2ljX3N0cmluZyA8Y2hh clQsIHRyYWl0cywgQWxsb2NhdG9yPiYpOwp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRy YWl0cywgY2xhc3MgQWxsb2NhdG9yPiBpc3RyZWFtJgpnZXRsaW5lIChpc3RyZWFtJiwgYmFzaWNf c3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+JiwgY2hhclQgZGVsaW0gPSAnXG4nKTsK Cn0gIAoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIu OTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0ZC9iYXN0cmluZy5jYyIgMSAzCiAKIAoK IAogCiAKIAogCgogCiAKIAogCgogCiAKIAoKIAogCiAKIAogCgogCiAKCmV4dGVybiAiQysrIiB7 CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cmlu bGluZSB2b2lkICogYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6 OgpvcGVyYXRvciBuZXcgKHNpemVfdCBzLCBzaXplX3QgZXh0cmEpCnsKICByZXR1cm4gQWxsb2Nh dG9yOjphbGxvY2F0ZShzICsgZXh0cmEgKiBzaXplb2YgKGNoYXJUKSk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlubGluZSB2b2lkIGJh c2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoKb3BlcmF0b3IgZGVs ZXRlICh2b2lkICogcHRyKQp7CiAgQWxsb2NhdG9yOjpkZWFsbG9jYXRlKHB0ciwgc2l6ZW9mKFJl cCkgKwoJCQlyZWludGVycHJldF9jYXN0PFJlcCAqPihwdHIpLT5yZXMgKgoJCQlzaXplb2YgKGNo YXJUKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv Y2F0b3I+CmlubGluZSBzaXplX3QgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0 b3I+OjpSZXA6Ogpmcm9iX3NpemUgKHNpemVfdCBzKQp7CiAgc2l6ZV90IGkgPSAxNjsKICB3aGls ZSAoaSA8IHMpIGkgKj0gMjsKICByZXR1cm4gaTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJhc2ljX3N0cmluZyA8Y2hhclQs IHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwICoKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB bGxvY2F0b3I+OjpSZXA6OgpjcmVhdGUgKHNpemVfdCBleHRyYSkKewogIGV4dHJhID0gZnJvYl9z aXplIChleHRyYSArIDEpOwogIFJlcCAqcCA9IG5ldyAoZXh0cmEpIFJlcDsKICBwLT5yZXMgPSBl eHRyYTsKICBwLT5yZWYgPSAxOwogIHAtPnNlbGZpc2ggPSBmYWxzZTsKICByZXR1cm4gcDsKfQoK dGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KY2hh clQgKiBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJlcDo6CmNsb25l ICgpCnsKICBSZXAgKnAgPSBSZXA6OmNyZWF0ZSAobGVuKTsKICBwLT5jb3B5ICgwLCBkYXRhICgp LCBsZW4pOwogIHAtPmxlbiA9IGxlbjsKICByZXR1cm4gcC0+ZGF0YSAoKTsKfQoKdGVtcGxhdGUg PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaW5saW5lIGJvb2wg YmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpSZXA6OgpleGNlc3Nfc2xv cCAoc2l6ZV90IHMsIHNpemVfdCByKQp7CiAgcmV0dXJuIDIgKiAocyA8PSAxNiA/IDE2IDogcykg PCByOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2Nh dG9yPgppbmxpbmUgYm9vbCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46 OgpjaGVja19yZWFsbG9jIChiYXNpY19zdHJpbmc6OnNpemVfdHlwZSBzKSBjb25zdAp7CiAgcyAr PSBzaXplb2YgKGNoYXJUKTsKICByZXAgKCktPnNlbGZpc2ggPSBmYWxzZTsKICByZXR1cm4gKHJl cCAoKS0+cmVmID4gMQoJICB8fCBzID4gY2FwYWNpdHkgKCkKCSAgfHwgUmVwOjpleGNlc3Nfc2xv cCAocywgY2FwYWNpdHkgKCkpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFp dHMsIGNsYXNzIEFsbG9jYXRvcj4Kdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj46OgphbGxvYyAoYmFzaWNfc3RyaW5nOjpzaXplX3R5cGUgX19zaXplLCBib29sIF9f c2F2ZSkKewogIGlmICghIGNoZWNrX3JlYWxsb2MgKF9fc2l6ZSkpCiAgICByZXR1cm47CgogIFJl cCAqcCA9IFJlcDo6Y3JlYXRlIChfX3NpemUpOwoKICBpZiAoX19zYXZlKQogICAgewogICAgICBw LT5jb3B5ICgwLCBkYXRhICgpLCBsZW5ndGggKCkpOwogICAgICBwLT5sZW4gPSBsZW5ndGggKCk7 CiAgICB9CiAgZWxzZQogICAgcC0+bGVuID0gMDsKCiAgcmVwdXAgKHApOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcg PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj4mCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg QWxsb2NhdG9yPjo6CnJlcGxhY2UgKHNpemVfdHlwZSBwb3MxLCBzaXplX3R5cGUgbjEsCgkgY29u c3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MyLCBzaXplX3R5cGUgbjIpCnsKICBj b25zdCBzaXplX3QgbGVuMiA9IHN0ci5sZW5ndGggKCk7CgogIGlmIChwb3MxID09IDAgJiYgbjEg Pj0gbGVuZ3RoICgpICYmIHBvczIgPT0gMCAmJiBuMiA+PSBsZW4yKQogICAgcmV0dXJuIG9wZXJh dG9yPSAoc3RyKTsKCiAgZG8geyBpZiAoIHBvczIgPiBsZW4yICkgX19vdXRfb2ZfcmFuZ2UgKCJw b3MyID4gbGVuMiIpOyB9IHdoaWxlICgwKSA7CgogIGlmIChuMiA+IGxlbjIgLSBwb3MyKQogICAg bjIgPSBsZW4yIC0gcG9zMjsKCiAgcmV0dXJuIHJlcGxhY2UgKHBvczEsIG4xLCBzdHIuZGF0YSAo KSArIHBvczIsIG4yKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs YXNzIEFsbG9jYXRvcj4KaW5saW5lIHZvaWQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB bGxvY2F0b3I+OjpSZXA6Ogpjb3B5IChzaXplX3QgcG9zLCBjb25zdCBjaGFyVCAqcywgc2l6ZV90 IG4pCnsKICBpZiAobikKICAgIHRyYWl0czo6Y29weSAoZGF0YSAoKSArIHBvcywgcywgbik7Cn0K CnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cmlu bGluZSB2b2lkIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6UmVwOjoK bW92ZSAoc2l6ZV90IHBvcywgY29uc3QgY2hhclQgKnMsIHNpemVfdCBuKQp7CiAgaWYgKG4pCiAg ICB0cmFpdHM6Om1vdmUgKGRhdGEgKCkgKyBwb3MsIHMsIG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg Y2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJU LCB0cmFpdHMsIEFsbG9jYXRvcj4mCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh dG9yPjo6CnJlcGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQq IHMsIHNpemVfdHlwZSBuMikKewogIGNvbnN0IHNpemVfdHlwZSBsZW4gPSBsZW5ndGggKCk7CiAg ZG8geyBpZiAoIHBvcyA+IGxlbiApIF9fb3V0X29mX3JhbmdlICgicG9zID4gbGVuIik7IH0gd2hp bGUgKDApIDsKICBpZiAobjEgPiBsZW4gLSBwb3MpCiAgICBuMSA9IGxlbiAtIHBvczsKICBkbyB7 IGlmICggbGVuIC0gbjEgPiBtYXhfc2l6ZSAoKSAtIG4yICkgX19sZW5ndGhfZXJyb3IgKCJsZW4g LSBuMSA+IG1heF9zaXplICgpIC0gbjIiKTsgfSB3aGlsZSAoMCkgOwogIHNpemVfdCBuZXdsZW4g PSBsZW4gLSBuMSArIG4yOwoKICBpZiAoY2hlY2tfcmVhbGxvYyAobmV3bGVuKSkKICAgIHsKICAg ICAgUmVwICpwID0gUmVwOjpjcmVhdGUgKG5ld2xlbik7CiAgICAgIHAtPmNvcHkgKDAsIGRhdGEg KCksIHBvcyk7CiAgICAgIHAtPmNvcHkgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxl biAtIChwb3MgKyBuMSkpOwogICAgICBwLT5jb3B5IChwb3MsIHMsIG4yKTsKICAgICAgcmVwdXAg KHApOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVwICgpLT5tb3ZlIChwb3MgKyBuMiwgZGF0 YSAoKSArIHBvcyArIG4xLCBsZW4gLSAocG9zICsgbjEpKTsKICAgICAgcmVwICgpLT5jb3B5IChw b3MsIHMsIG4yKTsKICAgIH0KICByZXAgKCktPmxlbiA9IG5ld2xlbjsKCiAgcmV0dXJuICp0aGlz Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9y PgppbmxpbmUgdm9pZCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OlJl cDo6CnNldCAoc2l6ZV90IHBvcywgY29uc3QgY2hhclQgYywgc2l6ZV90IG4pCnsKICB0cmFpdHM6 OnNldCAgKGRhdGEgKCkgKyBwb3MsIGMsIG4pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNs YXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMs IEFsbG9jYXRvcj4mIGJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CnJl cGxhY2UgKHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuMSwgc2l6ZV90eXBlIG4yLCBjaGFyVCBj KQp7CiAgY29uc3Qgc2l6ZV90IGxlbiA9IGxlbmd0aCAoKTsKICBkbyB7IGlmICggcG9zID4gbGVu ICkgX19vdXRfb2ZfcmFuZ2UgKCJwb3MgPiBsZW4iKTsgfSB3aGlsZSAoMCkgOwogIGlmIChuMSA+ IGxlbiAtIHBvcykKICAgIG4xID0gbGVuIC0gcG9zOwogIGRvIHsgaWYgKCBsZW4gLSBuMSA+IG1h eF9zaXplICgpIC0gbjIgKSBfX2xlbmd0aF9lcnJvciAoImxlbiAtIG4xID4gbWF4X3NpemUgKCkg LSBuMiIpOyB9IHdoaWxlICgwKSA7CiAgc2l6ZV90IG5ld2xlbiA9IGxlbiAtIG4xICsgbjI7Cgog IGlmIChjaGVja19yZWFsbG9jIChuZXdsZW4pKQogICAgewogICAgICBSZXAgKnAgPSBSZXA6OmNy ZWF0ZSAobmV3bGVuKTsKICAgICAgcC0+Y29weSAoMCwgZGF0YSAoKSwgcG9zKTsKICAgICAgcC0+ Y29weSAocG9zICsgbjIsIGRhdGEgKCkgKyBwb3MgKyBuMSwgbGVuIC0gKHBvcyArIG4xKSk7CiAg ICAgIHAtPnNldCAgKHBvcywgYywgbjIpOwogICAgICByZXB1cCAocCk7CiAgICB9CiAgZWxzZQog ICAgewogICAgICByZXAgKCktPm1vdmUgKHBvcyArIG4yLCBkYXRhICgpICsgcG9zICsgbjEsIGxl biAtIChwb3MgKyBuMSkpOwogICAgICByZXAgKCktPnNldCAgKHBvcywgYywgbjIpOwogICAgfQog IHJlcCAoKS0+bGVuID0gbmV3bGVuOwoKICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFz cyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CnZvaWQgYmFzaWNfc3RyaW5n IDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmVzaXplIChzaXplX3R5cGUgbiwgY2hhclQg YykKewogIGRvIHsgaWYgKCBuID4gbWF4X3NpemUgKCkgKSBfX2xlbmd0aF9lcnJvciAoIm4gPiBt YXhfc2l6ZSAoKSIpOyB9IHdoaWxlICgwKSA7CgogIGlmIChuID4gbGVuZ3RoICgpKQogICAgYXBw ZW5kIChuIC0gbGVuZ3RoICgpLCBjKTsKICBlbHNlCiAgICBlcmFzZSAobik7Cn0KCnRlbXBsYXRl IDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmlu ZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hh clQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmNvcHkgKGNoYXJUKiBzLCBzaXplX3R5cGUgbiwgc2l6 ZV90eXBlIHBvcykgY29uc3QKewogIGRvIHsgaWYgKCBwb3MgPiBsZW5ndGggKCkgKSBfX291dF9v Zl9yYW5nZSAoInBvcyA+IGxlbmd0aCAoKSIpOyB9IHdoaWxlICgwKSA7CgogIGlmIChuID4gbGVu Z3RoICgpIC0gcG9zKQogICAgbiA9IGxlbmd0aCAoKSAtIHBvczsKCiAgdHJhaXRzOjpjb3B5IChz LCBkYXRhICgpICsgcG9zLCBuKTsKICByZXR1cm4gbjsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJU LCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh aXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB bGxvY2F0b3I+OjoKZmluZCAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlw ZSBuKSBjb25zdAp7CiAgc2l6ZV90IHhwb3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgKyBuIDw9IGxl bmd0aCAoKTsgKyt4cG9zKQogICAgaWYgKHRyYWl0czo6ZXEgKGRhdGEgKCkgW3hwb3NdLCAqcykK CSYmIHRyYWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHhwb3MsIHMsIG4pID09IDApCiAgICAgIHJl dHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz IHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgppbmxpbmUgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJh aXRzLCBBbGxvY2F0b3I+OjpzaXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBB bGxvY2F0b3I+OjoKX2ZpbmQgKGNvbnN0IGNoYXJUKiBwdHIsIGNoYXJUIGMsIHNpemVfdHlwZSB4 cG9zLCBzaXplX3R5cGUgbGVuKQp7CiAgZm9yICg7IHhwb3MgPCBsZW47ICsreHBvcykKICAgIGlm ICh0cmFpdHM6OmVxIChwdHIgW3hwb3NdLCBjKSkKICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJu IG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxv Y2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBl CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6CmZpbmQgKGNoYXJUIGMs IHNpemVfdHlwZSBwb3MpIGNvbnN0CnsKICByZXR1cm4gX2ZpbmQgKGRhdGEgKCksIGMsIHBvcywg bGVuZ3RoICgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNz IEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjpzaXpl X3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKcmZpbmQgKGNv bnN0IGNoYXJUKiBzLCBzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbikgY29uc3QKewogIGlmIChu ID4gbGVuZ3RoICgpKQogICAgcmV0dXJuIG5wb3M7CgogIHNpemVfdCB4cG9zID0gbGVuZ3RoICgp IC0gbjsKICBpZiAoeHBvcyA+IHBvcykKICAgIHhwb3MgPSBwb3M7CgogIGZvciAoKyt4cG9zOyB4 cG9zLS0gPiAwOyApCiAgICBpZiAodHJhaXRzOjplcSAoZGF0YSAoKSBbeHBvc10sICpzKQoJJiYg dHJhaXRzOjpjb21wYXJlIChkYXRhICgpICsgeHBvcywgcywgbikgPT0gMCkKICAgICAgcmV0dXJu IHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2Nh dG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywgQWxsb2NhdG9yPjo6 CnJmaW5kIChjaGFyVCBjLCBzaXplX3R5cGUgcG9zKSBjb25zdAp7CiAgaWYgKDEgPiBsZW5ndGgg KCkpCiAgICByZXR1cm4gbnBvczsKCiAgc2l6ZV90IHhwb3MgPSBsZW5ndGggKCkgLSAxOwogIGlm ICh4cG9zID4gcG9zKQogICAgeHBvcyA9IHBvczsKCiAgZm9yICgrK3hwb3M7IHhwb3MtLSA+IDA7 ICkKICAgIGlmICh0cmFpdHM6OmVxIChkYXRhICgpIFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4 cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0 cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv cj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46Ogpm aW5kX2ZpcnN0X29mIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4p IGNvbnN0CnsKICBzaXplX3QgeHBvcyA9IHBvczsKICBmb3IgKDsgeHBvcyA8IGxlbmd0aCAoKTsg Kyt4cG9zKQogICAgaWYgKF9maW5kIChzLCBkYXRhICgpIFt4cG9zXSwgMCwgbikgIT0gbnBvcykK ICAgICAgcmV0dXJuIHhwb3M7CiAgcmV0dXJuIG5wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFy VCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg QWxsb2NhdG9yPjo6CmZpbmRfbGFzdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3Ms IHNpemVfdHlwZSBuKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBv czsKICBzaXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4 cG9zID0gcG9zOwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOykKICAgIGlmIChfZmluZCAocywg ZGF0YSAoKSBbeHBvc10sIDAsIG4pICE9IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVy biBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxs b2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlw ZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2ZpcnN0X25v dF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7 CiAgc2l6ZV90IHhwb3MgPSBwb3M7CiAgZm9yICg7IHhwb3MgPCBsZW5ndGggKCk7ICsreHBvcykK ICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBbeHBvc10sIDAsIG4pID09IG5wb3MpCiAgICAgIHJl dHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNz IHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv cj46OgpmaW5kX2ZpcnN0X25vdF9vZiAoY2hhclQgYywgc2l6ZV90eXBlIHBvcykgY29uc3QKewog IHNpemVfdCB4cG9zID0gcG9zOwogIGZvciAoOyB4cG9zIDwgbGVuZ3RoICgpOyArK3hwb3MpCiAg ICBpZiAodHJhaXRzOjpuZSAoZGF0YSAoKSBbeHBvc10sIGMpKQogICAgICByZXR1cm4geHBvczsK ICByZXR1cm4gbnBvczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNs YXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+Ojpz aXplX3R5cGUKYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKZmluZF9s YXN0X25vdF9vZiAoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBj b25zdAp7CiAgaWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBvczsKICBzaXplX3QgeHBv cyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4cG9zID0gcG9zOwogIGZv ciAoKyt4cG9zOyB4cG9zLS0gPiAwOykKICAgIGlmIChfZmluZCAocywgZGF0YSAoKSBbeHBvc10s IDAsIG4pID09IG5wb3MpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpiYXNpY19z dHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OnNpemVfdHlwZQpiYXNpY19zdHJpbmcg PGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46OgpmaW5kX2xhc3Rfbm90X29mIChjaGFyVCBjLCBz aXplX3R5cGUgcG9zKSBjb25zdAp7CiAgaWYgKGxlbmd0aCgpID09IDApCiAgICByZXR1cm4gbnBv czsKICBzaXplX3QgeHBvcyA9IGxlbmd0aCAoKSAtIDE7CiAgaWYgKHhwb3MgPiBwb3MpCiAgICB4 cG9zID0gcG9zOwogIGZvciAoKyt4cG9zOyB4cG9zLS0gPiAwOykKICAgIGlmICh0cmFpdHM6Om5l IChkYXRhICgpIFt4cG9zXSwgYykpCiAgICAgIHJldHVybiB4cG9zOwogIHJldHVybiBucG9zOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgQWxsb2NhdG9yPgpp bnQgYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRzLCBBbGxvY2F0b3I+OjoKY29tcGFyZSAoY29u c3QgYmFzaWNfc3RyaW5nJiBzdHIsIHNpemVfdHlwZSBwb3MsIHNpemVfdHlwZSBuKSBjb25zdAp7 CiAgZG8geyBpZiAoIHBvcyA+IGxlbmd0aCAoKSApIF9fb3V0X29mX3JhbmdlICgicG9zID4gbGVu Z3RoICgpIik7IH0gd2hpbGUgKDApIDsKCiAgc2l6ZV90IHJsZW4gPSBsZW5ndGggKCkgLSBwb3M7 CiAgaWYgKHJsZW4gPiBuKQogICAgcmxlbiA9IG47CiAgaWYgKHJsZW4gPiBzdHIubGVuZ3RoICgp KQogICAgcmxlbiA9IHN0ci5sZW5ndGggKCk7CiAgaW50IHIgPSB0cmFpdHM6OmNvbXBhcmUgKGRh dGEgKCkgKyBwb3MsIHN0ci5kYXRhICgpLCBybGVuKTsKICBpZiAociAhPSAwKQogICAgcmV0dXJu IHI7CiAgaWYgKHJsZW4gPT0gbikKICAgIHJldHVybiAwOwogIHJldHVybiAobGVuZ3RoICgpIC0g cG9zKSAtIHN0ci5sZW5ndGggKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJh aXRzLCBjbGFzcyBBbGxvY2F0b3I+CmludCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj46Ogpjb21wYXJlIChjb25zdCBjaGFyVCogcywgc2l6ZV90eXBlIHBvcywgc2l6ZV90 eXBlIG4pIGNvbnN0CnsKICBkbyB7IGlmICggcG9zID4gbGVuZ3RoICgpICkgX19vdXRfb2ZfcmFu Z2UgKCJwb3MgPiBsZW5ndGggKCkiKTsgfSB3aGlsZSAoMCkgOwoKICBzaXplX3QgcmxlbiA9IGxl bmd0aCAoKSAtIHBvczsKICBpZiAocmxlbiA+IG4pCiAgICBybGVuID0gbjsKICBpbnQgciA9IHRy YWl0czo6Y29tcGFyZSAoZGF0YSAoKSArIHBvcywgcywgcmxlbik7CiAgaWYgKHIgIT0gMCkKICAg IHJldHVybiByOwogIHJldHVybiAobGVuZ3RoICgpIC0gcG9zKSAtIG47Cn0KCgoKdGVtcGxhdGUg PGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KaXN0cmVhbSAmCm9w ZXJhdG9yPj4gKGlzdHJlYW0gJmlzLCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9j YXRvcj4gJnMpCnsKICBpbnQgdyA9IGlzLndpZHRoICgwKTsKICBpZiAoaXMuaXBmeDAgKCkpCiAg ICB7CiAgICAgIHJlZ2lzdGVyIHN0cmVhbWJ1ZiAqc2IgPSBpcy5yZGJ1ZiAoKTsKICAgICAgcy5y ZXNpemUgKDApOwogICAgICB3aGlsZSAoMSkKCXsKCSAgaW50IGNoID0gc2ItPnNidW1wYyAoKTsK CSAgaWYgKGNoID09ICgtMSkgKQoJICAgIHsKCSAgICAgIGlzLnNldHN0YXRlIChpb3M6OmVvZmJp dCk7CgkgICAgICBicmVhazsKCSAgICB9CgkgIGVsc2UgaWYgKHRyYWl0czo6aXNfZGVsIChjaCkp CgkgICAgewoJICAgICAgc2ItPnN1bmdldGMgKCk7CgkgICAgICBicmVhazsKCSAgICB9CgkgIHMg Kz0gc3RhdGljX2Nhc3Q8Y2hhclQ+IChjaCk7CgkgIGlmICgtLXcgPT0gMSkKCSAgICBicmVhazsK CX0KICAgIH0KCiAgaXMuaXNmeCAoKTsKICBpZiAocy5sZW5ndGggKCkgPT0gMCkKICAgIGlzLnNl dHN0YXRlIChpb3M6OmZhaWxiaXQpOwoKICByZXR1cm4gaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBj aGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+Cm9zdHJlYW0gJgpvcGVyYXRvcjw8 IChvc3RyZWFtICZvLCBjb25zdCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRv cj4mIHMpCnsKICByZXR1cm4gby53cml0ZSAocy5kYXRhICgpLCBzLmxlbmd0aCAoKSk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmlzdHJl YW0mCmdldGxpbmUgKGlzdHJlYW0gJmlzLCBiYXNpY19zdHJpbmcgPGNoYXJULCB0cmFpdHMsIEFs bG9jYXRvcj4mIHMsIGNoYXJUIGRlbGltKQp7CiAgaWYgKGlzLmlwZngxICgpKQogICAgewogICAg ICBfR19zaXplX3QgIGNvdW50ID0gMDsKICAgICAgc3RyZWFtYnVmICpzYiA9IGlzLnJkYnVmICgp OwogICAgICBzLnJlc2l6ZSAoMCk7CgogICAgICB3aGlsZSAoMSkKCXsKCSAgaW50IGNoID0gc2It PnNidW1wYyAoKTsKCSAgaWYgKGNoID09ICgtMSkgKQoJICAgIHsKCSAgICAgIGlzLnNldHN0YXRl IChjb3VudCA9PSAwCgkJCSAgID8gKGlvczo6ZmFpbGJpdHxpb3M6OmVvZmJpdCkKCQkJICAgOiBp b3M6OmVvZmJpdCk7CgkgICAgICBicmVhazsKCSAgICB9CgoJICArK2NvdW50OwoKCSAgaWYgKGNo ID09IGRlbGltKQoJICAgIGJyZWFrOwoKCSAgcyArPSBzdGF0aWNfY2FzdDxjaGFyVD4gKGNoKTsK CgkgIGlmIChzLmxlbmd0aCAoKSA9PSBzLm5wb3MgLSAxKQoJICAgIHsKCSAgICAgIGlzLnNldHN0 YXRlIChpb3M6OmZhaWxiaXQpOwoJICAgICAgYnJlYWs7CgkgICAgfQoJfQogICAgfQoKICAgCiAg IAogIGlzLmlzZnggKCk7CgogIHJldHVybiBpczsKfQoKdGVtcGxhdGUgPGNsYXNzIGNoYXJULCBj bGFzcyB0cmFpdHMsIGNsYXNzIEFsbG9jYXRvcj4KYmFzaWNfc3RyaW5nIDxjaGFyVCwgdHJhaXRz LCBBbGxvY2F0b3I+OjpSZXAKYmFzaWNfc3RyaW5nPGNoYXJULCB0cmFpdHMsIEFsbG9jYXRvcj46 Om5pbFJlcCA9IHsgMCwgMCwgMSwgZmFsc2UgfTsKCnRlbXBsYXRlIDxjbGFzcyBjaGFyVCwgY2xh c3MgdHJhaXRzLCBjbGFzcyBBbGxvY2F0b3I+CmNvbnN0IGJhc2ljX3N0cmluZyA8Y2hhclQsIHRy YWl0cywgQWxsb2NhdG9yPjo6c2l6ZV90eXBlCmJhc2ljX3N0cmluZyA8Y2hhclQsIHRyYWl0cywg QWxsb2NhdG9yPjo6bnBvczsKCn0gIAojIDY1NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGQvYmFz dHJpbmcuaCIgMiAzCgoKCiMgNiAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdHJpbmciIDIgMwoKCmV4 dGVybiAiQysrIiB7CnR5cGVkZWYgYmFzaWNfc3RyaW5nIDxjaGFyPiBzdHJpbmc7CiAKfSAgCgoK IyAxOCAiLi4vU3JjU2hhcmVkL0Vycm9ySGFuZGxpbmcuaCIgMgoKCiMgMSAiLi4vU3JjU2hhcmVk L0hhcmR3YXJlL0VtQ1BVNjhLLmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKIyAxICIuLi9TcmNTaGFy ZWQvSGFyZHdhcmUvRW1DUFUuaCIgMQogCiAKCgoKCgoKCgoKCgoKCgpjbGFzcyBFbVNlc3Npb247 CmNsYXNzIFNlc3Npb25GaWxlOwoKY2xhc3MgRW1DUFU7CmV4dGVybiBFbUNQVSoJZ0NQVTsKCmNs YXNzIEVtQ1BVCnsKCXB1YmxpYzoKCQkgCgkJIAoJCSAKCgkJCQkJCQkJRW1DUFUgCQkJCShFbVNl c3Npb24qKTsKCQl2aXJ0dWFsIAkJCQl+RW1DUFUJCQkJKHZvaWQpOwoKCQkgCgkJIAoJCSAKCgkJ IAoJCSAKCQkgCgkJIAoJCSAKCQkgCgoJCXZpcnR1YWwgdm9pZCAJCQlSZXNldAkJCQkoQm9vbCBo YXJkd2FyZVJlc2V0KTsKCQl2aXJ0dWFsIHZvaWQgCQkJU2F2ZQkJCQkoU2Vzc2lvbkZpbGUmKTsK CQl2aXJ0dWFsIHZvaWQgCQkJTG9hZAkJCQkoU2Vzc2lvbkZpbGUmKTsKCgkJIAoKCQl2aXJ0dWFs IHZvaWQgCQkJRXhlY3V0ZSAJCQkodm9pZCkgPSAwOwoJCXZpcnR1YWwgdm9pZCAJCQlDaGVja0Fm dGVyQ3ljbGUJCSh2b2lkKSA9IDA7CgoJCSAKCgkJdmlydHVhbCBlbXVwdHIJCQlHZXRQQwkJCQko dm9pZCkgPSAwOwoJCXZpcnR1YWwgZW11cHRyCQkJR2V0U1AJCQkJKHZvaWQpID0gMDsKCQl2aXJ0 dWFsIHVpbnQzMgkJCUdldFJlZ2lzdGVyCQkJKGludCkgPSAwOwoKCQl2aXJ0dWFsIHZvaWQJCQlT ZXRQQwkJCQkoZW11cHRyKSA9IDA7CgkJdmlydHVhbCB2b2lkCQkJU2V0U1AJCQkJKGVtdXB0cikg PSAwOwoJCXZpcnR1YWwgdm9pZAkJCVNldFJlZ2lzdGVyCQkJKGludCwgdWludDMyKSA9IDA7CgoJ CXZpcnR1YWwgQm9vbAkJCVN0b3BwZWQJCQkJKHZvaWQpID0gMDsKCglwcm90ZWN0ZWQ6CgkJRW1T ZXNzaW9uKgkJCQlmU2Vzc2lvbjsKfTsKCgojIDE3ICIuLi9TcmNTaGFyZWQvSGFyZHdhcmUvRW1D UFU2OEsuaCIgMgoKCgoKCgoKc3RydWN0IHJlZ3N0cnVjdDsKCgpjb25zdCB1aW50MTYJa0FUcmFw UmV0dXJuVHJhcE51bQk9IDB4MEM7CgogCgoKCmVudW0gRW1DUFU2OEtSZWdJRAp7CgllNjhLUmVn SURfSW52YWxpZAkJPSAwLAkgCgllNjhLUmVnSURfRDAgCQkJPSAxLAoJZTY4S1JlZ0lEX0QxCQkJ PSAyLAoJZTY4S1JlZ0lEX0QyCQkJPSAzLAoJZTY4S1JlZ0lEX0QzCQkJPSA0LAoJZTY4S1JlZ0lE X0Q0IAkJCT0gNSwKCWU2OEtSZWdJRF9ENQkJCT0gNiwKCWU2OEtSZWdJRF9ENgkJCT0gNywKCWU2 OEtSZWdJRF9ENwkJCT0gOCwKCWU2OEtSZWdJRF9BMCAJCQk9IDksCgllNjhLUmVnSURfQTEJCQk9 IDEwLAoJZTY4S1JlZ0lEX0EyCQkJPSAxMSwKCWU2OEtSZWdJRF9BMwkJCT0gMTIsCgllNjhLUmVn SURfQTQgCQkJPSAxMywKCWU2OEtSZWdJRF9BNQkJCT0gMTQsCgllNjhLUmVnSURfQTYJCQk9IDE1 LAoJZTY4S1JlZ0lEX1VTUAkJCT0gMTYsCgllNjhLUmVnSURfU1NQCQkJPSAxNywKCWU2OEtSZWdJ RF9QQwkJCT0gMTgsCgllNjhLUmVnSURfU1IJCQk9IDE5Cn07CgoKZW51bSBFeGNlcHRpb25OdW1i ZXIKewoJa0V4Y2VwdGlvbl9CdXNFcnIJPSAyLAkJIAoJa0V4Y2VwdGlvbl9BZGRyZXNzRXJyLAkJ CSAKCWtFeGNlcHRpb25fSWxsZWdhbEluc3RyLAkJIAoJa0V4Y2VwdGlvbl9EaXZpZGVCeVplcm8s CQkgCglrRXhjZXB0aW9uX0NoaywgCQkJCSAKCWtFeGNlcHRpb25fVHJhcCwJCQkJIAoJa0V4Y2Vw dGlvbl9Qcml2aWxlZ2UsCQkJIAoJa0V4Y2VwdGlvbl9UcmFjZSwJCQkJIAoJa0V4Y2VwdGlvbl9B VHJhcCwJCQkJIAoJa0V4Y2VwdGlvbl9GVHJhcCwJCQkJIAoJa0V4Y2VwdGlvbl9SZXNldmVkMTIs CQkJIAoJa0V4Y2VwdGlvbl9Db3Byb2MsCQkJCSAKCWtFeGNlcHRpb25fRm9ybWF0RXJyLAkJCSAK CWtFeGNlcHRpb25fVW5pbml0aWFsaXplZEludCwJIAoKCWtFeGNlcHRpb25fUmVzZXJ2ZWQwLAkJ CSAKCWtFeGNlcHRpb25fUmVzZXJ2ZWQxLAoJa0V4Y2VwdGlvbl9SZXNlcnZlZDIsCglrRXhjZXB0 aW9uX1Jlc2VydmVkMywKCWtFeGNlcHRpb25fUmVzZXJ2ZWQ0LAoJa0V4Y2VwdGlvbl9SZXNlcnZl ZDUsCglrRXhjZXB0aW9uX1Jlc2VydmVkNiwKCWtFeGNlcHRpb25fUmVzZXJ2ZWQ3LAoKCWtFeGNl cHRpb25fU3B1cmlvdXNJbnQsIAkJIAoJa0V4Y2VwdGlvbl9BdXRvVmVjMSwJCQkgCglrRXhjZXB0 aW9uX0F1dG9WZWMyLAkJCSAKCWtFeGNlcHRpb25fQXV0b1ZlYzMsCQkJIAoJa0V4Y2VwdGlvbl9B dXRvVmVjNCwJCQkgCglrRXhjZXB0aW9uX0F1dG9WZWM1LAkJCSAKCWtFeGNlcHRpb25fQXV0b1Zl YzYsCQkJIAoJa0V4Y2VwdGlvbl9BdXRvVmVjNywJCQkgCgoJa0V4Y2VwdGlvbl9UcmFwMCwJCQkJ IAoJa0V4Y2VwdGlvbl9UcmFwMSwKCWtFeGNlcHRpb25fVHJhcDIsCglrRXhjZXB0aW9uX1RyYXAz LAoJa0V4Y2VwdGlvbl9UcmFwNCwKCWtFeGNlcHRpb25fVHJhcDUsCglrRXhjZXB0aW9uX1RyYXA2 LAoJa0V4Y2VwdGlvbl9UcmFwNywKCWtFeGNlcHRpb25fVHJhcDgsCQkJCSAKCWtFeGNlcHRpb25f VHJhcDksCglrRXhjZXB0aW9uX1RyYXAxMCwKCWtFeGNlcHRpb25fVHJhcDExLAoJa0V4Y2VwdGlv bl9UcmFwMTIsCglrRXhjZXB0aW9uX1RyYXAxMywJCQkJIAoJa0V4Y2VwdGlvbl9UcmFwMTQsCglr RXhjZXB0aW9uX1RyYXAxNSwJCQkJIAoKCWtFeGNlcHRpb25fVW5hc3NpZ25lZDAsIAkJIAoJa0V4 Y2VwdGlvbl9VbmFzc2lnbmVkMSwKCWtFeGNlcHRpb25fVW5hc3NpZ25lZDIsCglrRXhjZXB0aW9u X1VuYXNzaWduZWQzLAoJa0V4Y2VwdGlvbl9VbmFzc2lnbmVkNCwKCWtFeGNlcHRpb25fVW5hc3Np Z25lZDUsCglrRXhjZXB0aW9uX1VuYXNzaWduZWQ2LAoJa0V4Y2VwdGlvbl9VbmFzc2lnbmVkNywK CWtFeGNlcHRpb25fVW5hc3NpZ25lZDgsCglrRXhjZXB0aW9uX1VuYXNzaWduZWQ5LAoJa0V4Y2Vw dGlvbl9VbmFzc2lnbmVkMTAsCglrRXhjZXB0aW9uX1VuYXNzaWduZWQxMSwKCWtFeGNlcHRpb25f VW5hc3NpZ25lZDEyLAoJa0V4Y2VwdGlvbl9VbmFzc2lnbmVkMTMsCglrRXhjZXB0aW9uX1VuYXNz aWduZWQxNCwKCWtFeGNlcHRpb25fVW5hc3NpZ25lZDE1LAoKCWtFeGNlcHRpb25fTGFzdEV4Y2Vw dGlvbiwKCglrRXhjZXB0aW9uX1NvZnRCcmVhawk9IGtFeGNlcHRpb25fVHJhcDAgKyAwICwKCWtF eGNlcHRpb25fSGFyZEJyZWFrCT0ga0V4Y2VwdGlvbl9UcmFwMCArIDggLAoJa0V4Y2VwdGlvbl9T eXNDYWxsCQk9IGtFeGNlcHRpb25fVHJhcDAgKyAxNSAsCglrRXhjZXB0aW9uX0FUcmFwUmV0dXJu CT0ga0V4Y2VwdGlvbl9UcmFwMCArIGtBVHJhcFJldHVyblRyYXBOdW0KfTsKCiAKCgoKCgoKCgoK CgoKIyAxNTcgIi4uL1NyY1NoYXJlZC9IYXJkd2FyZS9FbUNQVTY4Sy5oIgoKCQogCnR5cGVkZWYg dWludDMyCUVtT3Bjb2RlNjhLOwoKZW51bSBFbVN0YWNrQ2hhbmdlVHlwZQp7CglrU3RhY2tQb2lu dGVyQ2hhbmdlZCwKCWtTdGFja1BvaW50ZXJJbmNyZW1lbnRlZCwKCWtTdGFja1BvaW50ZXJEZWNy ZW1lbnRlZCwKCWtTdGFja1BvaW50ZXJLZXJuZWxTdGFja0hhY2sKfTsKCmNsYXNzIEVtQ1BVNjhL Owp0eXBlZGVmIEJvb2wgKCpIb29rNjhLRXhjZXB0aW9uKQkoRXhjZXB0aW9uTnVtYmVyKTsKdHlw ZWRlZiBCb29sICgqSG9vazY4S0pTUikJCQkoZW11cHRyIG9sZFBDLCBlbXVwdHIgZGVzdCk7CnR5 cGVkZWYgQm9vbCAoKkhvb2s2OEtKU1JfSW5kKQkJKGVtdXB0ciBvbGRQQywgZW11cHRyIGRlc3Qp Owp0eXBlZGVmIHZvaWQgKCpIb29rNjhLTElOSykJCQkoaW50IGxpbmtTaXplKTsKdHlwZWRlZiBC b29sICgqSG9vazY4S1JURSkJCQkoZW11cHRyIGRlc3QpOwp0eXBlZGVmIEJvb2wgKCpIb29rNjhL UlRTKQkJCShlbXVwdHIgZGVzdCk7CnR5cGVkZWYgdm9pZCAoKkhvb2s2OEtOZXdQQykJCShlbXVw dHIgZGVzdCk7CnR5cGVkZWYgdm9pZCAoKkhvb2s2OEtOZXdTUCkJCShFbVN0YWNrQ2hhbmdlVHlw ZSk7Cgp0eXBlZGVmIHZlY3RvcjxIb29rNjhLRXhjZXB0aW9uPglIb29rNjhLRXhjZXB0aW9uTGlz dDsKdHlwZWRlZiB2ZWN0b3I8SG9vazY4S0pTUj4JCQlIb29rNjhLSlNSTGlzdDsKdHlwZWRlZiB2 ZWN0b3I8SG9vazY4S0pTUl9JbmQ+CQlIb29rNjhLSlNSX0luZExpc3Q7CnR5cGVkZWYgdmVjdG9y PEhvb2s2OEtMSU5LPgkJCUhvb2s2OEtMSU5LTGlzdDsKdHlwZWRlZiB2ZWN0b3I8SG9vazY4S1JU RT4JCQlIb29rNjhLUlRFTGlzdDsKdHlwZWRlZiB2ZWN0b3I8SG9vazY4S1JUUz4JCQlIb29rNjhL UlRTTGlzdDsKdHlwZWRlZiB2ZWN0b3I8SG9vazY4S05ld1BDPgkJSG9vazY4S05ld1BDTGlzdDsK dHlwZWRlZiB2ZWN0b3I8SG9vazY4S05ld1NQPgkJSG9vazY4S05ld1NQTGlzdDsKCmNsYXNzIEVt Q1BVNjhLOwpleHRlcm4gRW1DUFU2OEsqCWdDUFU2OEs7CgogCiAKIAogCiAKIAoKZXh0ZXJuICJD IiB1aW50MzIJZ1N0YWNrSGlnaDsKZXh0ZXJuICJDIiB1aW50MzIJZ1N0YWNrTG93V2FybjsKZXh0 ZXJuICJDIiB1aW50MzIJZ1N0YWNrTG93OwpleHRlcm4gIkMiIHVpbnQzMglnS2VybmVsU3RhY2tP dmVyZmxvd2VkOwoKCmNsYXNzIEVtQ1BVNjhLIDogcHVibGljIEVtQ1BVCnsKCXB1YmxpYzoKCQkg CgkJIAoJCSAKCgkJCQkJCQkJRW1DUFU2OEsgCQkJKEVtU2Vzc2lvbiopOwoJCXZpcnR1YWwgCQkJ CX5FbUNQVTY4SwkJCSh2b2lkKTsKCgkJIAoJCSAKCQkgCgoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJ IAoKCQl2aXJ0dWFsIHZvaWQgCQkJUmVzZXQJCQkJKEJvb2wgaGFyZHdhcmVSZXNldCk7CgkJdmly dHVhbCB2b2lkIAkJCVNhdmUJCQkJKFNlc3Npb25GaWxlJik7CgkJdmlydHVhbCB2b2lkIAkJCUxv YWQJCQkJKFNlc3Npb25GaWxlJik7CgoJCSAKCgkJdmlydHVhbCB2b2lkIAkJCUV4ZWN1dGUgCQkJ KHZvaWQpOwoJCXZpcnR1YWwgdm9pZCAJCQlDaGVja0FmdGVyQ3ljbGUJCSh2b2lkKTsKCgkJIAoK CQl2aXJ0dWFsIGVtdXB0cgkJCUdldFBDCQkJCSh2b2lkKTsKCQl2aXJ0dWFsIGVtdXB0cgkJCUdl dFNQCQkJCSh2b2lkKTsKCQl2aXJ0dWFsIHVpbnQzMgkJCUdldFJlZ2lzdGVyCQkJKGludCk7CgoJ CXZpcnR1YWwgdm9pZAkJCVNldFBDCQkJCShlbXVwdHIpOwoJCXZpcnR1YWwgdm9pZAkJCVNldFNQ CQkJCShlbXVwdHIpOwoJCXZpcnR1YWwgdm9pZAkJCVNldFJlZ2lzdGVyCQkJKGludCwgdWludDMy KTsKCgkJdmlydHVhbCBCb29sCQkJU3RvcHBlZAkJCQkodm9pZCk7CgoJCSAKCgkJdm9pZAkJCQkJ UHJvY2Vzc0V4Y2VwdGlvbgkJCShFeGNlcHRpb25OdW1iZXIpOwoJCXZvaWQJCQkJCVByb2Nlc3NJ bGxlZ2FsSW5zdHJ1Y3Rpb24JKEVtT3Bjb2RlNjhLIG9wY29kZSk7CgkJaW50CQkJCQkJUHJvY2Vz c0pTUgkJCQkJKGVtdXB0ciBvbGRQQywgZW11cHRyIGRlc3QpOwoJCWludAkJCQkJCVByb2Nlc3NK U1JfSW5kCQkJCShlbXVwdHIgb2xkUEMsIGVtdXB0ciBkZXN0KTsKCQl2b2lkCQkJCQlQcm9jZXNz TElOSwkJCQkJKGludCBsaW5rU2l6ZSk7CgkJaW50CQkJCQkJUHJvY2Vzc1JURQkJCQkJKGVtdXB0 ciBkZXN0KTsKCQlpbnQJCQkJCQlQcm9jZXNzUlRTCQkJCQkoZW11cHRyIGRlc3QpOwoJCXZvaWQJ CQkJCUNoZWNrTmV3UEMJCQkJCShlbXVwdHIgZGVzdCk7CgkJdm9pZAkJCQkJQ2hlY2tOZXdTUAkJ CQkJKEVtU3RhY2tDaGFuZ2VUeXBlKTsKCgkJIAoJCSAKCgkJdm9pZAkJCQkJSW5zdGFsbEhvb2tF eGNlcHRpb24JKEV4Y2VwdGlvbk51bWJlciwKCQkJCQkJCQkJCQkJCQkgSG9vazY4S0V4Y2VwdGlv bik7CgoJCXZvaWQJCQkJCUluc3RhbGxIb29rSlNSCQkJKEhvb2s2OEtKU1IpOwoJCXZvaWQJCQkJ CUluc3RhbGxIb29rSlNSX0luZAkJKEhvb2s2OEtKU1JfSW5kKTsKCQl2b2lkCQkJCQlJbnN0YWxs SG9va0xJTksJCQkoSG9vazY4S0xJTkspOwoJCXZvaWQJCQkJCUluc3RhbGxIb29rUlRTCQkJKEhv b2s2OEtSVEUpOwoJCXZvaWQJCQkJCUluc3RhbGxIb29rUlRFCQkJKEhvb2s2OEtSVFMpOwoJCXZv aWQJCQkJCUluc3RhbGxIb29rTmV3UEMJCShIb29rNjhLTmV3UEMpOwoJCXZvaWQJCQkJCUluc3Rh bGxIb29rTmV3U1AJCShIb29rNjhLTmV3U1ApOwoKCQl2b2lkCQkJCQlSZW1vdmVIb29rRXhjZXB0 aW9uCQkoRXhjZXB0aW9uTnVtYmVyLAoJCQkJCQkJCQkJCQkJCSBIb29rNjhLRXhjZXB0aW9uKTsK CgkJdm9pZAkJCQkJUmVtb3ZlSG9va0pTUgkJCShIb29rNjhLSlNSKTsKCQl2b2lkCQkJCQlSZW1v dmVIb29rSlNSX0luZAkJKEhvb2s2OEtKU1JfSW5kKTsKCQl2b2lkCQkJCQlSZW1vdmVIb29rTElO SwkJCShIb29rNjhLTElOSyk7CgkJdm9pZAkJCQkJUmVtb3ZlSG9va1JUUwkJCShIb29rNjhLUlRF KTsKCQl2b2lkCQkJCQlSZW1vdmVIb29rUlRFCQkJKEhvb2s2OEtSVFMpOwoJCXZvaWQJCQkJCVJl bW92ZUhvb2tOZXdQQwkJCShIb29rNjhLTmV3UEMpOwoJCXZvaWQJCQkJCVJlbW92ZUhvb2tOZXdT UAkJCShIb29rNjhLTmV3U1ApOwoKCQkgCgkJIAoJCSAKCgkJdm9pZAkJCQkJR2V0UmVnaXN0ZXJz CQkJKHJlZ3N0cnVjdCYgcmVnaXN0ZXJzKTsKCQl2b2lkCQkJCQlTZXRSZWdpc3RlcnMJCQkocmVn c3RydWN0JiByZWdpc3RlcnMpOwoJCXZvaWQJCQkJCVVwZGF0ZVNSRnJvbVJlZ2lzdGVycwkodm9p ZCk7CgkJdm9pZAkJCQkJVXBkYXRlUmVnaXN0ZXJzRnJvbVNSCSh2b2lkKTsKCgkJdWludDMyCQkJ CQlHZXRDeWNsZUNvdW50CQkJKHZvaWQpOwoKCQl2b2lkCQkJCQlCdXNFcnJvcgkJCQkoZW11cHRy IGFkZHJlc3MsIGxvbmcgc2l6ZSwgQm9vbCBmb3JSZWFkKTsKCQl2b2lkCQkJCQlBZGRyZXNzRXJy b3IJCQkoZW11cHRyIGFkZHJlc3MsIGxvbmcgc2l6ZSwgQm9vbCBmb3JSZWFkKTsKCglwcml2YXRl OgoJCUJvb2wgCQkJCQlFeGVjdXRlU3BlY2lhbAkJCSh2b2lkKTsKCQlCb29sCSAJCQkJRXhlY3V0 ZVN0b3BwZWRMb29wCQkodm9pZCk7CgoJCXZvaWQJCQkJCUN5Y2xlU2xvd2x5CQkJCShCb29sIHNs ZWVwaW5nKTsKCQlCb29sCQkJCQlDaGVja0ZvckJyZWFrCQkJKHZvaWQpOwoKCQl2b2lkCQkJCQlQ cm9jZXNzSW50ZXJydXB0CQkoaW50MzIgaW50ZXJydXB0KTsKCgkJdm9pZAkJCQkJSW5pdGlhbGl6 ZVVBRVRhYmxlcwkJKHZvaWQpOwoKCXByaXZhdGU6CgkJZW11cHRyCQkJCQlmTGFzdFRyYWNlQWRk cmVzczsKCQl1aW50MzIJCQkJCWZDeWNsZUNvdW50OwoJCUhvb2s2OEtFeGNlcHRpb25MaXN0CWZF eGNlcHRpb25IYW5kbGVyc1trRXhjZXB0aW9uX0xhc3RFeGNlcHRpb25dOwoJCUhvb2s2OEtKU1JM aXN0CQkJZkhvb2tKU1I7CgkJSG9vazY4S0pTUl9JbmRMaXN0CQlmSG9va0pTUl9JbmQ7CgkJSG9v azY4S0xJTktMaXN0CQkJZkhvb2tMSU5LOwoJCUhvb2s2OEtSVEVMaXN0CQkJZkhvb2tSVEU7CgkJ SG9vazY4S1JUU0xpc3QJCQlmSG9va1JUUzsKCQlIb29rNjhLTmV3UENMaXN0CQlmSG9va05ld1BD OwoJCUhvb2s2OEtOZXdTUExpc3QJCWZIb29rTmV3U1A7CgoKCgoKCgoKCgoKCn07CgoKIyAyMCAi Li4vU3JjU2hhcmVkL0Vycm9ySGFuZGxpbmcuaCIgMgoKIyAxICIuLi9TcmNTaGFyZWQvRW1EbGcu aCIgMQogCiAKCgoKCgoKCgoKCgoKCgojIDEgIi4uL1NyY1NoYXJlZC9FbUZpbGVJbXBvcnQuaCIg MQogCiAKCgoKCgoKCgoKCgoKCgojIDEgIi4uL1NyY1NoYXJlZC9FbURpclJlZi5oIiAxCiAKIAoK CgoKCgoKCgoKCgoKCgoKCmNsYXNzIEVtRmlsZVJlZjsKY2xhc3MgRW1EaXJSZWY7Cgp0eXBlZGVm IHZlY3RvcjxFbUZpbGVSZWY+CUVtRmlsZVJlZkxpc3Q7CnR5cGVkZWYgdmVjdG9yPEVtRGlyUmVm PglFbURpclJlZkxpc3Q7CgpjbGFzcyBFbURpclJlZgp7CglwdWJsaWM6CgkJCQkJCQkJRW1EaXJS ZWYJCSh2b2lkKTsKCQkJCQkJCQlFbURpclJlZgkJKGNvbnN0IEVtRGlyUmVmJik7CgkJCQkJCQkJ RW1EaXJSZWYJCShjb25zdCBjaGFyKik7CgkJCQkJCQkJRW1EaXJSZWYJCShjb25zdCBzdHJpbmcm KTsKCQkJCQkJCQlFbURpclJlZgkJKGNvbnN0IEVtRGlyUmVmJiwgY29uc3QgY2hhciopOwoJCQkJ CQkJCUVtRGlyUmVmCQkoY29uc3QgRW1EaXJSZWYmLCBjb25zdCBzdHJpbmcmKTsKCgoKCgoJCQkJ CQkJCX5FbURpclJlZgkJKHZvaWQpOwoKCQlFbURpclJlZiYJCQkJb3BlcmF0b3I9CQkoY29uc3Qg RW1EaXJSZWYmKTsKCgkJQm9vbAkJCQkJSXNTcGVjaWZpZWQJCSh2b2lkKSBjb25zdDsKCQlCb29s CQkJCQlFeGlzdHMJCQkodm9pZCkgY29uc3Q7CgkJdm9pZAkJCQkJQ3JlYXRlCQkJKHZvaWQpIGNv bnN0OwoKCQlzdHJpbmcJCQkJCUdldE5hbWUJCQkodm9pZCkgY29uc3Q7CgkJRW1EaXJSZWYJCQkJ R2V0UGFyZW50CQkodm9pZCkgY29uc3Q7CgkJc3RyaW5nCQkJCQlHZXRGdWxsUGF0aAkJKHZvaWQp IGNvbnN0OwoKCQl2b2lkCQkJCQlHZXRDaGlsZHJlbgkJKEVtRmlsZVJlZkxpc3QqLCBFbURpclJl Zkxpc3QqKSBjb25zdDsKCgkJYm9vbAkJCQkJb3BlcmF0b3I9PQkJKGNvbnN0IEVtRGlyUmVmJikg Y29uc3Q7CgkJYm9vbAkJCQkJb3BlcmF0b3IhPQkJKGNvbnN0IEVtRGlyUmVmJikgY29uc3Q7CgkJ Ym9vbAkJCQkJb3BlcmF0b3I8CQkoY29uc3QgRW1EaXJSZWYmKSBjb25zdDsKCQlib29sCQkJCQlv cGVyYXRvcj4JCShjb25zdCBFbURpclJlZiYpIGNvbnN0OwoKCQlib29sCQkJCQlGcm9tUHJlZlN0 cmluZwkoY29uc3Qgc3RyaW5nJik7CgkJc3RyaW5nCQkJCQlUb1ByZWZTdHJpbmcJKHZvaWQpIGNv bnN0OwoKCQlzdGF0aWMgRW1EaXJSZWYJCQlHZXRFbXVsYXRvckRpcmVjdG9yeQkodm9pZCk7CgkJ c3RhdGljIEVtRGlyUmVmCQkJR2V0UHJlZnNEaXJlY3RvcnkJCSh2b2lkKTsKCiMgNzkgIi4uL1Ny Y1NoYXJlZC9FbURpclJlZi5oIgoKCgoJcHJpdmF0ZToKCQl2b2lkCQkJCQlNYXliZUFwcGVuZFNs YXNoCSh2b2lkKTsKCQl2b2lkCQkJCQlNYXliZVJlc29sdmVMaW5rCSh2b2lkKTsKCglwcml2YXRl OgoJCXN0cmluZwkJCQkJZkRpclBhdGg7Cgp9OwoKCiMgMTcgIi4uL1NyY1NoYXJlZC9FbUZpbGVJ bXBvcnQuaCIgMgoKCgpjbGFzcyBFbUV4Z01ncjsKY2xhc3MgRW1FeGdNZ3JJbXBvcnRXcmFwcGVy OwpjbGFzcyBFbVN0cmVhbTsKCmVudW0gRW1GaWxlSW1wb3J0TWV0aG9kCnsKCWtNZXRob2RCZXN0 LAoJa01ldGhvZEhvbWVicmV3LAoJa01ldGhvZEV4Z01ncgp9OwoKCmNsYXNzIEVtRmlsZUltcG9y dAp7CglwdWJsaWM6CgkJCQkJCQkJRW1GaWxlSW1wb3J0CQkJKEVtU3RyZWFtJiBzdHJlYW0sCgkJ CQkJCQkJCQkJCQkJIEVtRmlsZUltcG9ydE1ldGhvZCBtZXRob2QpOwoJCQkJCQkJCX5FbUZpbGVJ bXBvcnQJCQkodm9pZCk7CgoJCXN0YXRpYyBFcnJDb2RlCQkJTG9hZFBhbG1GaWxlCQkJKGNvbnN0 IHZvaWQqLCB1aW50MzIsIEVtRmlsZUltcG9ydE1ldGhvZCwgTG9jYWxJRCYpOwoJCXN0YXRpYyBF cnJDb2RlCQkJTG9hZFBhbG1GaWxlTGlzdAkJKGNvbnN0IEVtRmlsZVJlZkxpc3QmLCBFbUZpbGVJ bXBvcnRNZXRob2QsIHZlY3RvcjxMb2NhbElEPiYpOwoKCQlzdGF0aWMgRXJyQ29kZQkJCUluc3Rh bGxFeGdNZ3JMaWIJCSh2b2lkKTsKCQlzdGF0aWMgQm9vbAkJCQlDYW5Vc2VFeGdNZ3IJCQkodm9p ZCk7CgoJCSAKCgkJRXJyQ29kZQkJCQkJQ29udGludWUJCQkJKHZvaWQpOwoJCUVyckNvZGUJCQkJ CUNhbmNlbAkJCQkJKHZvaWQpOwoJCUJvb2wJCQkJCURvbmUJCQkJCSh2b2lkKTsKCQlsb25nCQkJ CQlHZXRQcm9ncmVzcwkJCQkodm9pZCk7CgkJTG9jYWxJRAkJCQkJR2V0TG9jYWxJRAkJCQkodm9p ZCk7CgoJCXZvaWQJCQkJCVNldFJlc3VsdAkJCQkoRXJyKTsKCQl2b2lkCQkJCQlTZXRSZXN1bHQJ CQkJKEVyckNvZGUpOwoJCXZvaWQJCQkJCVNldERvbmUJCQkJCSh2b2lkKTsKCgkJc3RhdGljIGxv bmcJCQkJQ2FsY3VsYXRlUHJvZ3Jlc3NNYXgJKGNvbnN0IEVtRmlsZVJlZkxpc3QmLCBFbUZpbGVJ bXBvcnRNZXRob2QgbWV0aG9kKTsKCglwcml2YXRlOgoJCXZvaWQJCQkJCUluY3JlbWVudGFsSW5z dGFsbAkJKHZvaWQpOwoKCQl2b2lkCQkJCQlFeGdNZ3JJbnN0YWxsU3RhcnQJCSh2b2lkKTsKCQl2 b2lkCQkJCQlFeGdNZ3JJbnN0YWxsTWlkZGxlCQkodm9pZCk7CgkJdm9pZAkJCQkJRXhnTWdySW5z dGFsbEVuZAkJKHZvaWQpOwoJCXZvaWQJCQkJCUV4Z01nckluc3RhbGxDYW5jZWwJCSh2b2lkKTsK CgkJdm9pZAkJCQkJSG9tZUJyZXdJbnN0YWxsU3RhcnQJKHZvaWQpOwoJCXZvaWQJCQkJCUhvbWVC cmV3SW5zdGFsbE1pZGRsZQkodm9pZCk7CgkJdm9pZAkJCQkJSG9tZUJyZXdJbnN0YWxsRW5kCQko dm9pZCk7CgkJdm9pZAkJCQkJSG9tZUJyZXdJbnN0YWxsQ2FuY2VsCSh2b2lkKTsKCgkJdm9pZAkJ CQkJVmFsaWRhdGVTdHJlYW0JCQkodm9pZCk7CgkJdm9pZAkJCQkJRGVsZXRlQ3VycmVudERhdGFi YXNlCSh2b2lkKTsKCglwcml2YXRlOgoJCUJvb2wJCQkJCWZVc2luZ0V4Z01ncjsKCQlCb29sCQkJ CQlmR290b1doZW5Eb25lOwoJCWxvbmcJCQkJCWZTdGF0ZTsKCQlFcnJDb2RlCQkJCQlmRXJyb3I7 CgkJRW1TdHJlYW0mCQkJCWZTdHJlYW07CgoJCSAKCQlFbUV4Z01ncioJCQkJZkV4Z01nclN0cmVh bTsKCQlFbUV4Z01nckltcG9ydFdyYXBwZXIqCWZFeGdNZ3JJbXBvcnQ7CgkJQm9vbAkJCQkJZk9s ZEFjY2VwdEJlYW1TdGF0ZTsKCgkJIAoJCXZvaWQqCQkJCQlmRmlsZUJ1ZmZlcjsKCQlsb25nCQkJ CQlmRmlsZUJ1ZmZlclNpemU7CgkJTG9jYWxJRAkJCQkJZkRCSUQ7CgkJVUludDE2CQkJCQlmQ2Fy ZE5vOwoJCURtT3BlblJlZgkJCQlmT3BlbklEOwoJCWxvbmcJCQkJCWZDdXJyZW50RW50cnk7Cn07 CgoKIyAxNyAiLi4vU3JjU2hhcmVkL0VtRGxnLmgiIDIKCiMgMSAiLi4vU3JjU2hhcmVkL0VtRmls ZVJlZi5oIiAxCiAKIAoKCgoKCgoKCgoKCgoKCgoKCmVudW0gRW1GaWxlQ3JlYXRvcgp7CglrRmls ZUNyZWF0b3JOb25lLAoJa0ZpbGVDcmVhdG9yRW11bGF0b3IsCglrRmlsZUNyZWF0b3JJbnN0YWxs ZXIsCglrRmlsZUNyZWF0b3JUZWFjaFRleHQsCglrRmlsZUNyZWF0b3JDb2RlV2FycmlvciwKCWtG aWxlQ3JlYXRvckNvZGVXYXJyaW9yUHJvZmlsZXIsCgkKCWtGaWxlQ3JlYXRvckxhc3QKfTsKdHlw ZWRlZiB2ZWN0b3I8RW1GaWxlQ3JlYXRvcj4JRW1GaWxlQ3JlYXRvckxpc3Q7CgplbnVtIEVtRmls ZVR5cGUKewoJa0ZpbGVUeXBlTm9uZSwKCWtGaWxlVHlwZUFwcGxpY2F0aW9uLAoJa0ZpbGVUeXBl Uk9NLAoJa0ZpbGVUeXBlU2Vzc2lvbiwKCWtGaWxlVHlwZUV2ZW50cywKCWtGaWxlVHlwZVByZWZl cmVuY2UsCglrRmlsZVR5cGVQYWxtQXBwLAoJa0ZpbGVUeXBlUGFsbURCLAoJa0ZpbGVUeXBlUGFs bVFBLAoJa0ZpbGVUeXBlVGV4dCwKCWtGaWxlVHlwZVBpY3R1cmUsCglrRmlsZVR5cGVTa2luLAoJ a0ZpbGVUeXBlUHJvZmlsZSwKCWtGaWxlVHlwZVBhbG1BbGwsCglrRmlsZVR5cGVBbGwsCgkKCWtG aWxlVHlwZUxhc3QKfTsKCmVudW0gRW1GaWxlQXR0cgp7CglrRmlsZUF0dHJSZWFkT25seT0xLAoJ a0ZpbGVBdHRySGlkZGVuPTIsCglrRmlsZUF0dHJTeXN0ZW09NCwKCQoJa0ZpbGVBdHRyTGFzdAp9 OwoKdHlwZWRlZiB2ZWN0b3I8RW1GaWxlVHlwZT4JCUVtRmlsZVR5cGVMaXN0OwoKY2xhc3MgRW1G aWxlUmVmCnsKCXB1YmxpYzoKCQkJCQkJCQlFbUZpbGVSZWYJCSh2b2lkKTsKCQkJCQkJCQlFbUZp bGVSZWYJCShjb25zdCBFbUZpbGVSZWYmKTsKCQkJCQkJCQlFbUZpbGVSZWYJCShjb25zdCBjaGFy Kik7CgkJCQkJCQkJRW1GaWxlUmVmCQkoY29uc3Qgc3RyaW5nJik7CgkJCQkJCQkJRW1GaWxlUmVm CQkoY29uc3QgRW1EaXJSZWYmLCBjb25zdCBjaGFyKik7CgkJCQkJCQkJRW1GaWxlUmVmCQkoY29u c3QgRW1EaXJSZWYmLCBjb25zdCBzdHJpbmcmKTsKCgoKCgoJCQkJCQkJCX5FbUZpbGVSZWYJCSh2 b2lkKTsKCgkJRW1GaWxlUmVmJgkJCQlvcGVyYXRvcj0JCShjb25zdCBFbUZpbGVSZWYmKTsKCgkJ Qm9vbAkJCQkJSXNTcGVjaWZpZWQJCSh2b2lkKSBjb25zdDsKCQlCb29sCQkJCQlFeGlzdHMJCQko dm9pZCkgY29uc3Q7CgkJdm9pZAkJCQkJRGVsZXRlCQkJKHZvaWQpIGNvbnN0OwoKCQlCb29sCQkJ CQlJc1R5cGUJCQkoRW1GaWxlVHlwZSkgY29uc3Q7CgkJdm9pZAkJCQkJU2V0Q3JlYXRvckFuZFR5 cGUoRW1GaWxlQ3JlYXRvciBjcmVhdG9yLAoJCQkJCQkJCQkJCQkgRW1GaWxlVHlwZSBmaWxlVHlw ZSkgY29uc3Q7CgkJaW50CQkJCQkJR2V0QXR0cgkJCShpbnQgKiBhdHRyKSBjb25zdDsKCQlpbnQJ CQkJCQlTZXRBdHRyCQkJKGludCBhdHRyKSBjb25zdDsKCgkJc3RyaW5nCQkJCQlHZXROYW1lCQkJ KHZvaWQpIGNvbnN0OwoJCUVtRGlyUmVmCQkJCUdldFBhcmVudAkJKHZvaWQpIGNvbnN0OwoJCXN0 cmluZwkJCQkJR2V0RnVsbFBhdGgJCSh2b2lkKSBjb25zdDsKCgkJYm9vbAkJCQkJb3BlcmF0b3I9 PQkJKGNvbnN0IEVtRmlsZVJlZiYpIGNvbnN0OwoJCWJvb2wJCQkJCW9wZXJhdG9yIT0JCShjb25z dCBFbUZpbGVSZWYmKSBjb25zdDsKCQlib29sCQkJCQlvcGVyYXRvcjwJCShjb25zdCBFbUZpbGVS ZWYmKSBjb25zdDsKCQlib29sCQkJCQlvcGVyYXRvcj4JCShjb25zdCBFbUZpbGVSZWYmKSBjb25z dDsKCgkJYm9vbAkJCQkJRnJvbVByZWZTdHJpbmcJKGNvbnN0IHN0cmluZyYpOwoJCXN0cmluZwkJ CQkJVG9QcmVmU3RyaW5nCSh2b2lkKSBjb25zdDsKCgkJc3RhdGljIHZvaWQJCQkJU2V0RW11bGF0 b3JSZWYJKGNvbnN0IEVtRmlsZVJlZiYpOwoJCXN0YXRpYyBFbUZpbGVSZWYJCUdldEVtdWxhdG9y UmVmCSh2b2lkKTsKCiMgMTI0ICIuLi9TcmNTaGFyZWQvRW1GaWxlUmVmLmgiCgoKCglwcml2YXRl OgoJCXZvaWQJCQkJCU1heWJlUHJlcGVuZEN1cnJlbnREaXJlY3RvcnkgKHZvaWQpOwoJCXZvaWQJ CQkJCU1heWJlUmVzb2x2ZUxpbmsJKHZvaWQpOwoJCXZvaWQJCQkJCU1heWJlTm9ybWFsaXplCQko dm9pZCk7CgoJcHJpdmF0ZToKCQlzdHJpbmcJCQkJCWZGaWxlUGF0aDsKCn07CgoKIyAxOCAiLi4v U3JjU2hhcmVkL0VtRGxnLmgiIDIKCiMgMSAiLi4vU3JjU2hhcmVkL0VtVHJhbnNwb3J0LmgiIDEK IAogCgoKCgoKCgoKCgoKCgoKCgoKCgoKZW51bSBFbVRyYW5zcG9ydFR5cGUKewoJa1RyYW5zcG9y dE51bGwsCQkgCglrVHJhbnNwb3J0U2VyaWFsLAkgCglrVHJhbnNwb3J0U29ja2V0LAkgCglrVHJh bnNwb3J0VVNCLAkJIAoKCWtUcmFuc3BvcnRVbmtub3duCn07CgpjbGFzcyBFbVRyYW5zcG9ydDsK CgogCiAKCmNsYXNzIEVtVHJhbnNwb3J0RGVzY3JpcHRvcgp7CglwdWJsaWM6CgkJCQkJCQkJRW1U cmFuc3BvcnREZXNjcmlwdG9yCSh2b2lkKTsKCQkJCQkJCQlFbVRyYW5zcG9ydERlc2NyaXB0b3IJ KEVtVHJhbnNwb3J0VHlwZSk7CgkJCQkJCQkJRW1UcmFuc3BvcnREZXNjcmlwdG9yCShFbVRyYW5z cG9ydFR5cGUsIGNvbnN0IHN0cmluZyYpOwoJCQkJCQkJCUVtVHJhbnNwb3J0RGVzY3JpcHRvcgko Y29uc3Qgc3RyaW5nJik7CgkJCQkJCQkJRW1UcmFuc3BvcnREZXNjcmlwdG9yCShjb25zdCBFbVRy YW5zcG9ydERlc2NyaXB0b3ImKTsKCQkJCQkJCQl+RW1UcmFuc3BvcnREZXNjcmlwdG9yCSh2b2lk KTsKCQlFbVRyYW5zcG9ydERlc2NyaXB0b3ImCW9wZXJhdG9yPQkJCQkoY29uc3QgRW1UcmFuc3Bv cnREZXNjcmlwdG9yJik7CgoJCUVtVHJhbnNwb3J0KgkJCUNyZWF0ZVRyYW5zcG9ydAkJCSh2b2lk KSBjb25zdDsKCgkJc3RyaW5nCQkJCQlHZXRNZW51TmFtZQkJCQkodm9pZCkgY29uc3Q7CSAKCQlz dHJpbmcJCQkJCUdldERlc2NyaXB0b3IJCQkodm9pZCkgY29uc3Q7CSAKCQlzdHJpbmcJCQkJCUdl dFNjaGVtZQkJCQkodm9pZCkgY29uc3Q7CSAKCQlzdHJpbmcJCQkJCUdldFNjaGVtZVNwZWNpZmlj CQkodm9pZCkgY29uc3Q7CSAKCQlFbVRyYW5zcG9ydFR5cGUJCQlHZXRUeXBlCQkJCQkodm9pZCkg Y29uc3Q7CSAKCgkJc3RhdGljIHN0cmluZwkJCUdldFNjaGVtZVByZWZpeAkJCShFbVRyYW5zcG9y dFR5cGUpOwkgCgoJCWJvb2wJCQkJCW9wZXJhdG9yPT0JCQkJKGNvbnN0IEVtVHJhbnNwb3J0RGVz Y3JpcHRvciYpIGNvbnN0OwoKCXByaXZhdGU6CgkJQm9vbAkJCQkJUHJ2VGVzdFR5cGUJCQkJKEVt VHJhbnNwb3J0VHlwZSB0eXBlKSBjb25zdDsKCglwcml2YXRlOgoJCXN0cmluZwkJCQkJZkRlc2Ny aXB0b3I7Cn07Cgp0eXBlZGVmIHZlY3RvcjxFbVRyYW5zcG9ydERlc2NyaXB0b3I+CUVtVHJhbnNw b3J0RGVzY3JpcHRvckxpc3Q7CgoKY2xhc3MgRW1UcmFuc3BvcnQKewoJcHVibGljOgoJCXN0cnVj dCBDb25maWcKCQl7CgkJCQkJCQkJCUNvbmZpZwkJCSh2b2lkKSB7fTsKCQkJdmlydHVhbAkJCQkJ fkNvbmZpZwkJCSh2b2lkKSB7fTsKCgkJCXZpcnR1YWwgRW1UcmFuc3BvcnQqCU5ld1RyYW5zcG9y dAkodm9pZCkgPSAwOwoJCQl2aXJ0dWFsIEVtVHJhbnNwb3J0KglHZXRUcmFuc3BvcnQJKHZvaWQp ID0gMDsKCQl9OwoKCXB1YmxpYzoKCQkJCQkJCQlFbVRyYW5zcG9ydAkJCSh2b2lkKTsKCQl2aXJ0 dWFsCQkJCQl+RW1UcmFuc3BvcnQJCSh2b2lkKTsKCgkJdmlydHVhbCBFcnJDb2RlCQkJT3BlbgkJ CQkodm9pZCk7CgkJdmlydHVhbCBFcnJDb2RlCQkJQ2xvc2UJCQkJKHZvaWQpOwoKCQl2aXJ0dWFs IEVyckNvZGUJCQlSZWFkCQkJCShsb25nJiwgdm9pZCopOwoJCXZpcnR1YWwgRXJyQ29kZQkJCVdy aXRlCQkJCShsb25nJiwgY29uc3Qgdm9pZCopOwoKCQl2aXJ0dWFsIEJvb2wJCQlDYW5SZWFkCQkJ CSh2b2lkKTsKCQl2aXJ0dWFsIEJvb2wJCQlDYW5Xcml0ZQkJCSh2b2lkKTsKCgkJdmlydHVhbCBs b25nCQkJQnl0ZXNJbkJ1ZmZlcgkJKGxvbmcgbWluQnl0ZXMpOwoKCQl2aXJ0dWFsIHN0cmluZwkJ CUdldFNwZWNpZmljTmFtZQkJKHZvaWQpID0gMDsKCgkJc3RhdGljIHZvaWQJCQkJQ2xvc2VBbGxU cmFuc3BvcnRzCSh2b2lkKTsKfTsKCgpjbGFzcyBFbVRyYW5zcG9ydE51bGwgOiBwdWJsaWMgRW1U cmFuc3BvcnQKewoJcHVibGljOgoKCQkgCgkJIAoJCXN0cnVjdCBDb25maWdOdWxsIDogcHVibGlj IEVtVHJhbnNwb3J0OjpDb25maWcKCQl7CgkJCQkJCQkJCUNvbmZpZ051bGwJCSh2b2lkKSB7fTsK CQkJdmlydHVhbAkJCQkJfkNvbmZpZ051bGwJCSh2b2lkKSB7fTsKCgkJCXZpcnR1YWwgRW1UcmFu c3BvcnQqCU5ld1RyYW5zcG9ydAkodm9pZCkgeyByZXR1cm4gbmV3IEVtVHJhbnNwb3J0TnVsbDsg fTsKCQkJdmlydHVhbCBFbVRyYW5zcG9ydCoJR2V0VHJhbnNwb3J0CSh2b2lkKTsKCQl9OwoKCXB1 YmxpYzoKCQkJCQkJCQlFbVRyYW5zcG9ydE51bGwJCQkodm9pZCk7CgkJCQkJCQkJRW1UcmFuc3Bv cnROdWxsCQkJKGNvbnN0IEVtVHJhbnNwb3J0RGVzY3JpcHRvciYpOwoJCQkJCQkJCUVtVHJhbnNw b3J0TnVsbAkJCShjb25zdCBDb25maWdOdWxsJik7CgkJdmlydHVhbAkJCQkJfkVtVHJhbnNwb3J0 TnVsbAkJKHZvaWQpOwoKCQl2aXJ0dWFsIEVyckNvZGUJCQlPcGVuCQkJCQkodm9pZCk7CgkJdmly dHVhbCBFcnJDb2RlCQkJQ2xvc2UJCQkJCSh2b2lkKTsKCgkJdmlydHVhbCBFcnJDb2RlCQkJUmVh ZAkJCQkJKGxvbmcmLCB2b2lkKik7CgkJdmlydHVhbCBFcnJDb2RlCQkJV3JpdGUJCQkJCShsb25n JiwgY29uc3Qgdm9pZCopOwoKCQl2aXJ0dWFsIEJvb2wJCQlDYW5SZWFkCQkJCQkodm9pZCk7CgkJ dmlydHVhbCBCb29sCQkJQ2FuV3JpdGUJCQkJKHZvaWQpOwoKCQl2aXJ0dWFsIGxvbmcJCQlCeXRl c0luQnVmZmVyCQkJKGxvbmcgbWluQnl0ZXMpOwoKCQl2aXJ0dWFsIHN0cmluZwkJCUdldFNwZWNp ZmljTmFtZQkJCSh2b2lkKTsKCgkJc3RhdGljIHZvaWQJCQkJR2V0RGVzY3JpcHRvckxpc3QJCShF bVRyYW5zcG9ydERlc2NyaXB0b3JMaXN0Jik7Cn07CgoKCiMgMTkgIi4uL1NyY1NoYXJlZC9FbURs Zy5oIiAyCgojIDEgIi4uL1NyY1NoYXJlZC9FbVRyYW5zcG9ydFNlcmlhbC5oIiAxCiAKIAoKCgoK CgoKCgoKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL21hcCIgMSAzCiAKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3Vu LXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3RyZWUuaCIg MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv Mi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2Z1bmN0aW9uLmgiIDEgMwogCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBj bGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZyBhcmd1 bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCnRlbXBsYXRlIDxj bGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBiaW5hcnlfZnVu Y3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9B cmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsK fTsgICAgICAKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194 LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf VHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195 KSBjb25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0 cnVjdCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewog IF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyBy ZXR1cm4gX194ICogX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRl cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3Io KShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAvIF9f eTsgfQp9OwoKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gaW5saW5lIF9UcCBpZGVudGl0eV9lbGVt ZW50KHBsdXM8X1RwPikgewogIHJldHVybiBfVHAoMCk7Cn0KdGVtcGxhdGUgPGNsYXNzIF9UcD4g aW5saW5lIF9UcCBpZGVudGl0eV9lbGVtZW50KG11bHRpcGxpZXM8X1RwPikgewogIHJldHVybiBf VHAoMSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJp bmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gCnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAm IF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKdGVt cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxf VHAsX1RwPiAKewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVy biAtX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZXF1YWxfdG8gOiBwdWJs aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29u c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qgbm90X2VxdWFsX3RvIDogcHVibGljIGJp bmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9U cCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoK dGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNv bnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJv b2w+IAp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg Y29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1 Y3QgZ3JlYXRlcl9lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7 CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3Qg eyByZXR1cm4gX194ID49IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxl c3NfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29s IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVy biBfX3ggPD0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9h bmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0 b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAm JiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVi bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29u c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9ub3QgOiBwdWJsaWMgdW5h cnlfZnVuY3Rpb248X1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gp IGNvbnN0IHsgcmV0dXJuICFfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpj bGFzcyB1bmFyeV9uZWdhdGUKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJl ZGljYXRlOjphcmd1bWVudF90eXBlLCBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9N X3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCB1bmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYg X194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBf UHJlZGljYXRlOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiAhX01fcHJl ZChfX3gpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlf bmVnYXRlPF9QcmVkaWNhdGU+IApub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJl dHVybiB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9QcmVkaWNhdGU+IApjbGFzcyBiaW5hcnlfbmVnYXRlIAogIDogcHVibGljIGJpbmFyeV9mdW5j dGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlw ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRp Y2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0ZShjb25zdCBfUHJl ZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5 cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCwgCiAgICAgICAgICAg ICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBf X3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsgCiAgfQp9OwoKdGVt cGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+ IApub3QyKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJldHVybiBiaW5hcnlfbmVnYXRl PF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPiAKY2xh c3MgYmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlv bjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5h bWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7 CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVibGlj OgogIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0IHR5 cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAgOiBvcChf X3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBv cGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBl JiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsgCiAgfQp9OwoKdGVtcGxh dGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjFzdDxfT3BlcmF0 aW9uPiAKYmluZDFzdChjb25zdCBfT3BlcmF0aW9uJiBfX29wZXIsIGNvbnN0IF9UcCYgX194KSAK ewogIHR5cGVkZWYgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJn MV90eXBlOwogIHJldHVybiBiaW5kZXIxc3Q8X09wZXJhdGlvbj4oX19vcGVyLCBfQXJnMV90eXBl KF9feCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4gCmNsYXNzIGJpbmRlcjJuZAog IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3Vt ZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6 cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09w ZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIybmQo Y29uc3QgX09wZXJhdGlvbiYgX194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0 aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX195KSAKICAgICAgOiBvcChfX3gpLCB2YWx1ZShf X3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNv bnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qg ewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOyAKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09w ZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+IApiaW5kMm5k KGNvbnN0IF9PcGVyYXRpb24mIF9fb3BlciwgY29uc3QgX1RwJiBfX3gpIAp7CiAgdHlwZWRlZiB0 eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90eXBlOwogIHJl dHVybiBiaW5kZXIybmQ8X09wZXJhdGlvbj4oX19vcGVyLCBfQXJnMl90eXBlKF9feCkpOwp9Cgog Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yPgpjbGFzcyB1 bmFyeV9jb21wb3NlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlv bjI6OmFyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09w ZXJhdGlvbjE6OnJlc3VsdF90eXBlPiAKewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbjEgX19vcDE7 CiAgX09wZXJhdGlvbjIgX19vcDI7CnB1YmxpYzoKICB1bmFyeV9jb21wb3NlKGNvbnN0IF9PcGVy YXRpb24xJiBfX3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3kpIAogICAgOiBfX29wMShfX3gpLCBf X29wMihfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBlCiAgb3BlcmF0 b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSYgX194KSBjb25z dCB7CiAgICByZXR1cm4gX19vcDEoX19vcDIoX194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz IF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KaW5saW5lIHVuYXJ5X2NvbXBvc2U8X09w ZXJhdGlvbjEsX09wZXJhdGlvbjI+IApjb21wb3NlMShjb25zdCBfT3BlcmF0aW9uMSYgX19vcDEs IGNvbnN0IF9PcGVyYXRpb24yJiBfX29wMikKewogIHJldHVybiB1bmFyeV9jb21wb3NlPF9PcGVy YXRpb24xLF9PcGVyYXRpb24yPihfX29wMSwgX19vcDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09w ZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0aW9uMz4KY2xhc3MgYmlu YXJ5X2NvbXBvc2UKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9u Mjo6YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3Bl cmF0aW9uMTo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24xIF9NX29wMTsK ICBfT3BlcmF0aW9uMiBfTV9vcDI7CiAgX09wZXJhdGlvbjMgX01fb3AzOwpwdWJsaWM6CiAgYmlu YXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJhdGlvbjImIF9f eSwgCiAgICAgICAgICAgICAgICAgY29uc3QgX09wZXJhdGlvbjMmIF9feikgCiAgICA6IF9NX29w MShfX3gpLCBfTV9vcDIoX195KSwgX01fb3AzKF9feikgeyB9CiAgdHlwZW5hbWUgX09wZXJhdGlv bjE6OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6 YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fb3AxKF9NX29wMihfX3gp LCBfTV9vcDMoX194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFz cyBfT3BlcmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CmlubGluZSBiaW5hcnlfY29tcG9zZTxf T3BlcmF0aW9uMSwgX09wZXJhdGlvbjIsIF9PcGVyYXRpb24zPiAKY29tcG9zZTIoY29uc3QgX09w ZXJhdGlvbjEmIF9fb3AxLCBjb25zdCBfT3BlcmF0aW9uMiYgX19vcDIsIAogICAgICAgICBjb25z dCBfT3BlcmF0aW9uMyYgX19vcDMpCnsKICByZXR1cm4gYmluYXJ5X2NvbXBvc2U8X09wZXJhdGlv bjEsX09wZXJhdGlvbjIsX09wZXJhdGlvbjM+CiAgICAoX19vcDEsIF9fb3AyLCBfX29wMyk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX3Vu YXJ5X2Z1bmN0aW9uIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHsKcHJv dGVjdGVkOgogIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9pbnRlcl90b191 bmFyeV9mdW5jdGlvbigpIHt9CiAgZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbihf UmVzdWx0ICgqX194KShfQXJnKSkgOiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQgb3BlcmF0b3Io KShfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCnRlbXBsYXRlIDxj bGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b191bmFyeV9mdW5jdGlv bjxfQXJnLCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcpKQp7CiAgcmV0dXJu IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4oX194KTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRl cl90b19iaW5hcnlfZnVuY3Rpb24gOiAKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9B cmcyLF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9B cmcyKTsKcHVibGljOgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQogICAgZXhw bGljaXQgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9B cmcyKSkgCiAgICAgIDogX01fcHRyKF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJn MSBfX3gsIF9BcmcyIF9feSkgY29uc3QgewogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsK ICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1 bHQ+CmlubGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0 PiAKcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0dXJuIHBvaW50 ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7Cn0KCiAKdGVt cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlv bjxfVHAsX1RwPiB7CiAgY29uc3QgX1RwJiBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25z dCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBpZGVudGl0 eSA6IHB1YmxpYyBfSWRlbnRpdHk8X1RwPiB7fTsKCiAKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpz dHJ1Y3QgX1NlbGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUg X1BhaXI6OmZpcnN0X3R5cGU+IHsKICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYg b3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0 OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3QybmQgOiBwdWJs aWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZT4Kewog IGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFp ciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1BhaXI+IHN0cnVjdCBzZWxlY3Qxc3QgOiBwdWJsaWMgX1NlbGVjdDFzdDxfUGFpcj4g e307CnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDJuZCA6IHB1YmxpYyBfU2Vs ZWN0Mm5kPF9QYWlyPiB7fTsKCiAKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4K c3RydWN0IF9Qcm9qZWN0MXN0IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIs IF9BcmcxPiB7CiAgX0FyZzEgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYgX194LCBjb25zdCBfQXJn MiYpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFz cyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0Mm5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJn MSwgX0FyZzIsIF9BcmcyPiB7CiAgX0FyZzIgb3BlcmF0b3IoKShjb25zdCBfQXJnMSYsIGNvbnN0 IF9BcmcyJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9B cmcxLCBjbGFzcyBfQXJnMj4gCnN0cnVjdCBwcm9qZWN0MXN0IDogcHVibGljIF9Qcm9qZWN0MXN0 PF9BcmcxLCBfQXJnMj4ge307Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpz dHJ1Y3QgcHJvamVjdDJuZCA6IHB1YmxpYyBfUHJvamVjdDJuZDxfQXJnMSwgX0FyZzI+IHt9OwoK IAogCiAKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBjb25zdGFudF92b2lkX2Z1bgp7 CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9fdmFsOwogIGNv bnN0YW50X3ZvaWRfZnVuKGNvbnN0IHJlc3VsdF90eXBlJiBfX3YpIDogX192YWwoX192KSB7fQog IGNvbnN0IHJlc3VsdF90eXBlJiBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4gX192YWw7IH0K fTsgIAoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJndW1lbnQgPSBfUmVzdWx0 PgoKCgpzdHJ1Y3QgY29uc3RhbnRfdW5hcnlfZnVuIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9B cmd1bWVudCwgX1Jlc3VsdD4gewogIF9SZXN1bHQgX01fdmFsOwogIGNvbnN0YW50X3VuYXJ5X2Z1 bihjb25zdCBfUmVzdWx0JiBfX3YpIDogX01fdmFsKF9fdikge30KICBjb25zdCBfUmVzdWx0JiBv cGVyYXRvcigpKGNvbnN0IF9Bcmd1bWVudCYpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbDsgfQp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LCBjbGFzcyBfQXJnMSA9IF9SZXN1bHQsIGNsYXNzIF9B cmcyID0gX0FyZzE+CgoKCnN0cnVjdCBjb25zdGFudF9iaW5hcnlfZnVuIDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9SZXN1bHQ+IHsKICBfUmVzdWx0IF9NX3ZhbDsKICBj b25zdGFudF9iaW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikgOiBfTV92YWwoX192KSB7fQog IGNvbnN0IF9SZXN1bHQmIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmLCBjb25zdCBfQXJnMiYpIGNv bnN0IHsKICAgIHJldHVybiBfTV92YWw7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+ CmlubGluZSBjb25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PiBjb25zdGFudDAoY29uc3QgX1Jlc3Vs dCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4oX192YWwpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X3VuYXJ5X2Z1bjxfUmVz dWx0LF9SZXN1bHQ+IGNvbnN0YW50MShjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBj b25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0PihfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0LF9SZXN1bHQs X1Jlc3VsdD4gCmNvbnN0YW50Mihjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25z dGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0PihfX3ZhbCk7Cn0KCiAKIApj bGFzcyBzdWJ0cmFjdGl2ZV9ybmcgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dW5zaWduZWQgaW50 LCB1bnNpZ25lZCBpbnQ+IHsKcHJpdmF0ZToKICB1bnNpZ25lZCBpbnQgX01fdGFibGVbNTVdOwog IHNpemVfdCBfTV9pbmRleDE7CiAgc2l6ZV90IF9NX2luZGV4MjsKcHVibGljOgogIHVuc2lnbmVk IGludCBvcGVyYXRvcigpKHVuc2lnbmVkIGludCBfX2xpbWl0KSB7CiAgICBfTV9pbmRleDEgPSAo X01faW5kZXgxICsgMSkgJSA1NTsKICAgIF9NX2luZGV4MiA9IChfTV9pbmRleDIgKyAxKSAlIDU1 OwogICAgX01fdGFibGVbX01faW5kZXgxXSA9IF9NX3RhYmxlW19NX2luZGV4MV0gLSBfTV90YWJs ZVtfTV9pbmRleDJdOwogICAgcmV0dXJuIF9NX3RhYmxlW19NX2luZGV4MV0gJSBfX2xpbWl0Owog IH0KCiAgdm9pZCBfTV9pbml0aWFsaXplKHVuc2lnbmVkIGludCBfX3NlZWQpCiAgewogICAgdW5z aWduZWQgaW50IF9fayA9IDE7CiAgICBfTV90YWJsZVs1NF0gPSBfX3NlZWQ7CiAgICBzaXplX3Qg X19pOwogICAgZm9yIChfX2kgPSAwOyBfX2kgPCA1NDsgX19pKyspIHsKICAgICAgICBzaXplX3Qg X19paSA9ICgyMSAqIChfX2kgKyAxKSAlIDU1KSAtIDE7CiAgICAgICAgX01fdGFibGVbX19paV0g PSBfX2s7CiAgICAgICAgX19rID0gX19zZWVkIC0gX19rOwogICAgICAgIF9fc2VlZCA9IF9NX3Rh YmxlW19faWldOwogICAgfQogICAgZm9yIChpbnQgX19sb29wID0gMDsgX19sb29wIDwgNDsgX19s b29wKyspIHsKICAgICAgICBmb3IgKF9faSA9IDA7IF9faSA8IDU1OyBfX2krKykKICAgICAgICAg ICAgX01fdGFibGVbX19pXSA9IF9NX3RhYmxlW19faV0gLSBfTV90YWJsZVsoMSArIF9faSArIDMw KSAlIDU1XTsKICAgIH0KICAgIF9NX2luZGV4MSA9IDA7CiAgICBfTV9pbmRleDIgPSAzMTsKICB9 CgogIHN1YnRyYWN0aXZlX3JuZyh1bnNpZ25lZCBpbnQgX19zZWVkKSB7IF9NX2luaXRpYWxpemUo X19zZWVkKTsgfQogIHN1YnRyYWN0aXZlX3JuZygpIHsgX01faW5pdGlhbGl6ZSgxNjE4MDMzOTh1 KTsgfQp9OwoKCiAKCiAKIAogCiAKIAogCiAKCiAKIAogCiAKIAoKIAogCiAKIAogCgoKdGVtcGxh dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5 X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQg KF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9f cCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6 OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29u c3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX1JldD4gewpw dWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29u c3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29u c3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9m KSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1l bV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgog IGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYp IHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9m KSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFz cyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5h cnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5f cmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBv cGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9 CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFz cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMg YmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1f ZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9w ZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZiko X194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUg PGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFf dCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsKcHVibGlj OgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29u c3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0Fy ZyBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgog IF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs IGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmlu YXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4x X3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9w ZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShf X3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9y ZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAg ZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29u c3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0Fy ZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0 IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xh c3MgbWVtX2Z1bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKix2b2lk PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBf TV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IChfX3AtPipf TV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5 X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVt X2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQg b3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2 YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpjbGFzcyBtZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248 X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoq X19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25z dCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoK dGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+ IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBj b25zdF9tZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3Bm KSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9m KSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJn PiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4 cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7 fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9N X2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCnRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9pZCwg X1RwLCBfQXJnPiAKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZv aWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19w ZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBf VHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToK ICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1 YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQg bWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQog IHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZiko X194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8dm9pZCwg X1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1 YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShf QXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg X19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9p ZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFz cyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1Jl dCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoK dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0X21lbV9mdW5fdDxf UmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29u c3RfbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh c3MgX1RwPgppbmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAo X1RwOjoqX19mKSgpKSAKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9y ZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsg cmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxj bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQs X1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1f ZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz cyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+ IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9t ZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJn PiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4x X3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz cyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxf QXJnPgptZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJu IGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxj bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQs X1RwLF9Bcmc+IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVt X2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xh c3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJn PiBtZW1fZnVuMShfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0 X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs IGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9B cmc+IG1lbV9mdW4xX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9m dW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj bGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9U cCxfQXJnPgptZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJl dHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9CgogCgoKCiAK IAogCiMgNTkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45 NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3RyZWUuaCIgMiAzCgoKICAKCgoKCgp0 eXBlZGVmIGJvb2wgX1JiX3RyZWVfQ29sb3JfdHlwZTsKY29uc3QgX1JiX3RyZWVfQ29sb3JfdHlw ZSBfU19yYl90cmVlX3JlZCA9IGZhbHNlOwpjb25zdCBfUmJfdHJlZV9Db2xvcl90eXBlIF9TX3Ji X3RyZWVfYmxhY2sgPSB0cnVlOwoKc3RydWN0IF9SYl90cmVlX25vZGVfYmFzZQp7CiAgdHlwZWRl ZiBfUmJfdHJlZV9Db2xvcl90eXBlIF9Db2xvcl90eXBlOwogIHR5cGVkZWYgX1JiX3RyZWVfbm9k ZV9iYXNlKiBfQmFzZV9wdHI7CgogIF9Db2xvcl90eXBlIF9NX2NvbG9yOyAKICBfQmFzZV9wdHIg X01fcGFyZW50OwogIF9CYXNlX3B0ciBfTV9sZWZ0OwogIF9CYXNlX3B0ciBfTV9yaWdodDsKCiAg c3RhdGljIF9CYXNlX3B0ciBfU19taW5pbXVtKF9CYXNlX3B0ciBfX3gpCiAgewogICAgd2hpbGUg KF9feC0+X01fbGVmdCAhPSAwKSBfX3ggPSBfX3gtPl9NX2xlZnQ7CiAgICByZXR1cm4gX194Owog IH0KCiAgc3RhdGljIF9CYXNlX3B0ciBfU19tYXhpbXVtKF9CYXNlX3B0ciBfX3gpCiAgewogICAg d2hpbGUgKF9feC0+X01fcmlnaHQgIT0gMCkgX194ID0gX194LT5fTV9yaWdodDsKICAgIHJldHVy biBfX3g7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZT4Kc3RydWN0IF9SYl90cmVlX25v ZGUgOiBwdWJsaWMgX1JiX3RyZWVfbm9kZV9iYXNlCnsKICB0eXBlZGVmIF9SYl90cmVlX25vZGU8 X1ZhbHVlPiogX0xpbmtfdHlwZTsKICBfVmFsdWUgX01fdmFsdWVfZmllbGQ7Cn07CgoKc3RydWN0 IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3IKewogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlOjpf QmFzZV9wdHIgX0Jhc2VfcHRyOwogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcg aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwog IF9CYXNlX3B0ciBfTV9ub2RlOwoKICB2b2lkIF9NX2luY3JlbWVudCgpCiAgewogICAgaWYgKF9N X25vZGUtPl9NX3JpZ2h0ICE9IDApIHsKICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0 OwogICAgICB3aGlsZSAoX01fbm9kZS0+X01fbGVmdCAhPSAwKQogICAgICAgIF9NX25vZGUgPSBf TV9ub2RlLT5fTV9sZWZ0OwogICAgfQogICAgZWxzZSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBf TV9ub2RlLT5fTV9wYXJlbnQ7CiAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fcmlnaHQp IHsKICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgIF9feSA9IF9feS0+X01fcGFyZW50Owog ICAgICB9CiAgICAgIGlmIChfTV9ub2RlLT5fTV9yaWdodCAhPSBfX3kpCiAgICAgICAgX01fbm9k ZSA9IF9feTsKICAgIH0KICB9CgogIHZvaWQgX01fZGVjcmVtZW50KCkKICB7CiAgICBpZiAoX01f bm9kZS0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQgJiYKICAgICAgICBfTV9ub2RlLT5fTV9w YXJlbnQtPl9NX3BhcmVudCA9PSBfTV9ub2RlKQogICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01f cmlnaHQ7CiAgICBlbHNlIGlmIChfTV9ub2RlLT5fTV9sZWZ0ICE9IDApIHsKICAgICAgX0Jhc2Vf cHRyIF9feSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICAgIHdoaWxlIChfX3ktPl9NX3JpZ2h0ICE9 IDApCiAgICAgICAgX195ID0gX195LT5fTV9yaWdodDsKICAgICAgX01fbm9kZSA9IF9feTsKICAg IH0KICAgIGVsc2UgewogICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFyZW50Owog ICAgICB3aGlsZSAoX01fbm9kZSA9PSBfX3ktPl9NX2xlZnQpIHsKICAgICAgICBfTV9ub2RlID0g X195OwogICAgICAgIF9feSA9IF9feS0+X01fcGFyZW50OwogICAgICB9CiAgICAgIF9NX25vZGUg PSBfX3k7CiAgICB9CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX1JlZiwg Y2xhc3MgX1B0cj4Kc3RydWN0IF9SYl90cmVlX2l0ZXJhdG9yIDogcHVibGljIF9SYl90cmVlX2Jh c2VfaXRlcmF0b3IKewogIHR5cGVkZWYgX1ZhbHVlIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfUmVm IHJlZmVyZW5jZTsKICB0eXBlZGVmIF9QdHIgcG9pbnRlcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0 ZXJhdG9yPF9WYWx1ZSwgX1ZhbHVlJiwgX1ZhbHVlKj4gICAgICAgICAgICAgCiAgICBpdGVyYXRv cjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29u c3QgX1ZhbHVlKj4gCiAgICBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJh dG9yPF9WYWx1ZSwgX1JlZiwgX1B0cj4gICAgICAgICAgICAgICAgICAgCiAgICBfU2VsZjsKICB0 eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbHVlPiogX0xpbmtfdHlwZTsKCiAgX1JiX3RyZWVfaXRl cmF0b3IoKSB7fQogIF9SYl90cmVlX2l0ZXJhdG9yKF9MaW5rX3R5cGUgX194KSB7IF9NX25vZGUg PSBfX3g7IH0KICBfUmJfdHJlZV9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX19pdCkgeyBfTV9u b2RlID0gX19pdC5fTV9ub2RlOyB9CgogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJl dHVybiBfTGlua190eXBlKF9NX25vZGUpLT5fTV92YWx1ZV9maWVsZDsgfQoKICBwb2ludGVyIG9w ZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCiAgX1NlbGYmIG9w ZXJhdG9yKysoKSB7IF9NX2luY3JlbWVudCgpOyByZXR1cm4gKnRoaXM7IH0KICBfU2VsZiBvcGVy YXRvcisrKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIF9NX2luY3JlbWVudCgp OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICAgIAogIF9TZWxmJiBvcGVyYXRvci0tKCkgeyBfTV9k ZWNyZW1lbnQoKTsgcmV0dXJuICp0aGlzOyB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAg IF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICBfTV9kZWNyZW1lbnQoKTsKICAgIHJldHVybiBfX3Rt cDsKICB9Cn07CgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2Jhc2VfaXRl cmF0b3ImIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9iYXNlX2l0 ZXJhdG9yJiBfX3kpIHsKICByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7Cn0KCmlu bGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvciYgX194LAog ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3ImIF9feSkg ewogIHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9kZTsKfQoKIyAyMTQgIi91c3IvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2lu Y2x1ZGUvZysrLTMvc3RsX3RyZWUuaCIgMwoKCmlubGluZSB2b2lkIApfUmJfdHJlZV9yb3RhdGVf bGVmdChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290 KQp7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3JpZ2h0OwogIF9feC0+X01f cmlnaHQgPSBfX3ktPl9NX2xlZnQ7CiAgaWYgKF9feS0+X01fbGVmdCAhPTApCiAgICBfX3ktPl9N X2xlZnQtPl9NX3BhcmVudCA9IF9feDsKICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50 OwoKICBpZiAoX194ID09IF9fcm9vdCkKICAgIF9fcm9vdCA9IF9feTsKICBlbHNlIGlmIChfX3gg PT0gX194LT5fTV9wYXJlbnQtPl9NX2xlZnQpCiAgICBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCA9 IF9feTsKICBlbHNlCiAgICBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7CiAgX195LT5f TV9sZWZ0ID0gX194OwogIF9feC0+X01fcGFyZW50ID0gX195Owp9CgppbmxpbmUgdm9pZCAKX1Ji X3RyZWVfcm90YXRlX3JpZ2h0KF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2Rl X2Jhc2UqJiBfX3Jvb3QpCnsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fbGVm dDsKICBfX3gtPl9NX2xlZnQgPSBfX3ktPl9NX3JpZ2h0OwogIGlmIChfX3ktPl9NX3JpZ2h0ICE9 IDApCiAgICBfX3ktPl9NX3JpZ2h0LT5fTV9wYXJlbnQgPSBfX3g7CiAgX195LT5fTV9wYXJlbnQg PSBfX3gtPl9NX3BhcmVudDsKCiAgaWYgKF9feCA9PSBfX3Jvb3QpCiAgICBfX3Jvb3QgPSBfX3k7 CiAgZWxzZSBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9yaWdodCkKICAgIF9feC0+X01f cGFyZW50LT5fTV9yaWdodCA9IF9feTsKICBlbHNlCiAgICBfX3gtPl9NX3BhcmVudC0+X01fbGVm dCA9IF9feTsKICBfX3ktPl9NX3JpZ2h0ID0gX194OwogIF9feC0+X01fcGFyZW50ID0gX195Owp9 CgppbmxpbmUgdm9pZCAKX1JiX3RyZWVfcmViYWxhbmNlKF9SYl90cmVlX25vZGVfYmFzZSogX194 LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCnsKICBfX3gtPl9NX2NvbG9yID0gX1NfcmJf dHJlZV9yZWQ7CiAgd2hpbGUgKF9feCAhPSBfX3Jvb3QgJiYgX194LT5fTV9wYXJlbnQtPl9NX2Nv bG9yID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICBpZiAoX194LT5fTV9wYXJlbnQgPT0gX194LT5f TV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdCkgewogICAgICBfUmJfdHJlZV9ub2RlX2Jhc2Uq IF9feSA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICBpZiAoX195 ICYmIF9feS0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICBfX3gtPl9NX3Bh cmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feS0+X01fY29sb3Ig PSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9N X2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQtPl9N X3BhcmVudDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBpZiAoX194ID09IF9feC0+X01f cGFyZW50LT5fTV9yaWdodCkgewogICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQ7CiAgICAg ICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gsIF9fcm9vdCk7CiAgICAgICAgfQogICAgICAg IF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX194 LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAg ICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudCwgX19yb290 KTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195 ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdDsKICAgICAgaWYgKF9feSAmJiBf X3ktPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICAgICAgX194LT5fTV9wYXJlbnQt Pl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3ktPl9NX2NvbG9yID0gX1Nf cmJfdHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xv ciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJl bnQ7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVu dC0+X01fbGVmdCkgewogICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQ7CiAgICAgICAgICBf UmJfdHJlZV9yb3RhdGVfcmlnaHQoX194LCBfX3Jvb3QpOwogICAgICAgIH0KICAgICAgICBfX3gt Pl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01f cGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX1Ji X3RyZWVfcm90YXRlX2xlZnQoX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudCwgX19yb290KTsKICAg ICAgfQogICAgfQogIH0KICBfX3Jvb3QtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKfQoK aW5saW5lIF9SYl90cmVlX25vZGVfYmFzZSoKX1JiX3RyZWVfcmViYWxhbmNlX2Zvcl9lcmFzZShf UmJfdHJlZV9ub2RlX2Jhc2UqIF9feiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmJf dHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Ji X3RyZWVfbm9kZV9iYXNlKiYgX19sZWZ0bW9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3JpZ2h0bW9zdCkKewogIF9SYl90cmVlX25vZGVfYmFz ZSogX195ID0gX196OwogIF9SYl90cmVlX25vZGVfYmFzZSogX194ID0gMDsKICBfUmJfdHJlZV9u b2RlX2Jhc2UqIF9feF9wYXJlbnQgPSAwOwogIGlmIChfX3ktPl9NX2xlZnQgPT0gMCkgICAgICAK ICAgIF9feCA9IF9feS0+X01fcmlnaHQ7ICAgICAgCiAgZWxzZQogICAgaWYgKF9feS0+X01fcmln aHQgPT0gMCkgICAKICAgICAgX194ID0gX195LT5fTV9sZWZ0OyAgICAgCiAgICBlbHNlIHsgICAg ICAgICAgICAgICAgICAgIAogICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0OyAgICAKICAgICAgd2hp bGUgKF9feS0+X01fbGVmdCAhPSAwKQogICAgICAgIF9feSA9IF9feS0+X01fbGVmdDsKICAgICAg X194ID0gX195LT5fTV9yaWdodDsKICAgIH0KICBpZiAoX195ICE9IF9feikgeyAgICAgICAgICAg CiAgICBfX3otPl9NX2xlZnQtPl9NX3BhcmVudCA9IF9feTsgCiAgICBfX3ktPl9NX2xlZnQgPSBf X3otPl9NX2xlZnQ7CiAgICBpZiAoX195ICE9IF9fei0+X01fcmlnaHQpIHsKICAgICAgX194X3Bh cmVudCA9IF9feS0+X01fcGFyZW50OwogICAgICBpZiAoX194KSBfX3gtPl9NX3BhcmVudCA9IF9f eS0+X01fcGFyZW50OwogICAgICBfX3ktPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feDsgICAgICAg CiAgICAgIF9feS0+X01fcmlnaHQgPSBfX3otPl9NX3JpZ2h0OwogICAgICBfX3otPl9NX3JpZ2h0 LT5fTV9wYXJlbnQgPSBfX3k7CiAgICB9CiAgICBlbHNlCiAgICAgIF9feF9wYXJlbnQgPSBfX3k7 ICAKICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAgICBfX3Jvb3QgPSBfX3k7CiAgICBlbHNlIGlm IChfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgIF9fei0+X01fcGFyZW50LT5f TV9sZWZ0ID0gX195OwogICAgZWxzZSAKICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0g X195OwogICAgX195LT5fTV9wYXJlbnQgPSBfX3otPl9NX3BhcmVudDsKICAgICA6OnN3YXAoX195 LT5fTV9jb2xvciwgX196LT5fTV9jb2xvcik7CiAgICBfX3kgPSBfX3o7CiAgICAgCiAgfQogIGVs c2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIF9feF9wYXJlbnQgPSBfX3ktPl9NX3Bh cmVudDsKICAgIGlmIChfX3gpIF9feC0+X01fcGFyZW50ID0gX195LT5fTV9wYXJlbnQ7ICAgCiAg ICBpZiAoX19yb290ID09IF9feikKICAgICAgX19yb290ID0gX194OwogICAgZWxzZSAKICAgICAg aWYgKF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID09IF9feikKICAgICAgICBfX3otPl9NX3BhcmVu dC0+X01fbGVmdCA9IF9feDsKICAgICAgZWxzZQogICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9y aWdodCA9IF9feDsKICAgIGlmIChfX2xlZnRtb3N0ID09IF9feikgCiAgICAgIGlmIChfX3otPl9N X3JpZ2h0ID09IDApICAgICAgICAgCiAgICAgICAgX19sZWZ0bW9zdCA9IF9fei0+X01fcGFyZW50 OwogICAgIAogICAgICBlbHNlCiAgICAgICAgX19sZWZ0bW9zdCA9IF9SYl90cmVlX25vZGVfYmFz ZTo6X1NfbWluaW11bShfX3gpOwogICAgaWYgKF9fcmlnaHRtb3N0ID09IF9feikgIAogICAgICBp ZiAoX196LT5fTV9sZWZ0ID09IDApICAgICAgICAgIAogICAgICAgIF9fcmlnaHRtb3N0ID0gX196 LT5fTV9wYXJlbnQ7ICAKICAgICAKICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgCiAg ICAgICAgX19yaWdodG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194KTsK ICB9CiAgaWYgKF9feS0+X01fY29sb3IgIT0gX1NfcmJfdHJlZV9yZWQpIHsgCiAgICB3aGlsZSAo X194ICE9IF9fcm9vdCAmJiAoX194ID09IDAgfHwgX194LT5fTV9jb2xvciA9PSBfU19yYl90cmVl X2JsYWNrKSkKICAgICAgaWYgKF9feCA9PSBfX3hfcGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgICAg X1JiX3RyZWVfbm9kZV9iYXNlKiBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICBp ZiAoX193LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgICAgX193LT5fTV9j b2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9 IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194X3BhcmVu dCwgX19yb290KTsKICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAg IH0KICAgICAgICBpZiAoKF9fdy0+X01fbGVmdCA9PSAwIHx8IAogICAgICAgICAgICAgX193LT5f TV9sZWZ0LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSAmJgogICAgICAgICAgICAoX193 LT5fTV9yaWdodCA9PSAwIHx8IAogICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3Ig PT0gX1NfcmJfdHJlZV9ibGFjaykpIHsKICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90 cmVlX3JlZDsKICAgICAgICAgIF9feCA9IF9feF9wYXJlbnQ7CiAgICAgICAgICBfX3hfcGFyZW50 ID0gX194X3BhcmVudC0+X01fcGFyZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAo X193LT5fTV9yaWdodCA9PSAwIHx8IAogICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2Nv bG9yID09IF9TX3JiX3RyZWVfYmxhY2spIHsKICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkg X193LT5fTV9sZWZ0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICAgIF9f dy0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRl X3JpZ2h0KF9fdywgX19yb290KTsKICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmln aHQ7CiAgICAgICAgICB9CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX194X3BhcmVudC0+X01f Y29sb3I7CiAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7 CiAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCkgX193LT5fTV9yaWdodC0+X01fY29sb3IgPSBf U19yYl90cmVlX2JsYWNrOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194X3BhcmVu dCwgX19yb290KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsgICAg ICAgICAgICAgICAgICAgCiAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3cgPSBfX3hfcGFy ZW50LT5fTV9sZWZ0OwogICAgICAgIGlmIChfX3ctPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVk KSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAg IF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICBfUmJfdHJl ZV9yb3RhdGVfcmlnaHQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgIF9fdyA9IF9feF9w YXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgfQogICAgICAgIGlmICgoX193LT5fTV9yaWdodCA9PSAw IHx8IAogICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9i bGFjaykgJiYKICAgICAgICAgICAgKF9fdy0+X01fbGVmdCA9PSAwIHx8IAogICAgICAgICAgICAg X193LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSkgewogICAgICAgICAg X193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX194ID0gX194X3BhcmVu dDsKICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3hfcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAg fSBlbHNlIHsKICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQgPT0gMCB8fCAKICAgICAgICAgICAg ICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spIHsKICAgICAgICAg ICAgaWYgKF9fdy0+X01fcmlnaHQpIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID0gX1NfcmJfdHJl ZV9ibGFjazsKICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAg ICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3csIF9fcm9vdCk7CiAgICAgICAgICAgIF9f dyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICB9CiAgICAgICAgICBfX3ctPl9NX2Nv bG9yID0gX194X3BhcmVudC0+X01fY29sb3I7CiAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xv ciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0KSBfX3ctPl9N X2xlZnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgIF9SYl90cmVlX3Jv dGF0ZV9yaWdodChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAg fQogICAgICB9CiAgICBpZiAoX194KSBfX3gtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsK ICB9CiAgcmV0dXJuIF9feTsKfQoKIAogCiAKIAoKIyA0OTYgIi91c3IvbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMv c3RsX3RyZWUuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0 IF9SYl90cmVlX2Jhc2UKewogIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOwogIGFsbG9j YXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgp OyB9CgogIF9SYl90cmVlX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKSAKICAgIDogX01faGVh ZGVyKDApIHsgX01faGVhZGVyID0gX01fZ2V0X25vZGUoKTsgfQogIH5fUmJfdHJlZV9iYXNlKCkg eyBfTV9wdXRfbm9kZShfTV9oZWFkZXIpOyB9Cgpwcm90ZWN0ZWQ6CiAgX1JiX3RyZWVfbm9kZTxf VHA+KiBfTV9oZWFkZXI7CgogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9SYl90cmVlX25vZGU8X1Rw PiwgX0FsbG9jPiBfQWxsb2NfdHlwZTsKCiAgX1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9nZXRfbm9k ZSgpCiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KICB2b2lkIF9NX3B1 dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19wKQogICAgeyBfQWxsb2NfdHlwZTo6ZGVhbGxv Y2F0ZShfX3AsIDEpOyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUs IGNsYXNzIF9LZXlPZlZhbHVlLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9BbGxv YyA9IGFsbG9jICA+CmNsYXNzIF9SYl90cmVlIDogcHJvdGVjdGVkIF9SYl90cmVlX2Jhc2U8X1Zh bHVlLCBfQWxsb2M+IHsKICB0eXBlZGVmIF9SYl90cmVlX2Jhc2U8X1ZhbHVlLCBfQWxsb2M+IF9C YXNlOwpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsK ICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbHVlPiBfUmJfdHJlZV9ub2RlOwogIHR5cGVkZWYg X1JiX3RyZWVfQ29sb3JfdHlwZSBfQ29sb3JfdHlwZTsKcHVibGljOgogIHR5cGVkZWYgX0tleSBr ZXlfdHlwZTsKICB0eXBlZGVmIF9WYWx1ZSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdmFsdWVfdHlw ZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0X3BvaW50ZXI7CiAg dHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBl JiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlKiBfTGlua190eXBlOwog IHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl X3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRv cl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBf QmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9Cgpwcm90ZWN0ZWQ6CgoKCgoKCnByb3RlY3RlZDoKCiAg X0xpbmtfdHlwZSBfTV9jcmVhdGVfbm9kZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgewogICAg X0xpbmtfdHlwZSBfX3RtcCA9IF9NX2dldF9ub2RlKCk7CiAgICB0cnkgIHsKICAgICAgY29uc3Ry dWN0KCZfX3RtcC0+X01fdmFsdWVfZmllbGQsIF9feCk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsg IF9NX3B1dF9ub2RlKF9fdG1wKSA7IHRocm93OyB9IDsKICAgIHJldHVybiBfX3RtcDsKICB9Cgog IF9MaW5rX3R5cGUgX01fY2xvbmVfbm9kZShfTGlua190eXBlIF9feCkKICB7CiAgICBfTGlua190 eXBlIF9fdG1wID0gX01fY3JlYXRlX25vZGUoX194LT5fTV92YWx1ZV9maWVsZCk7CiAgICBfX3Rt cC0+X01fY29sb3IgPSBfX3gtPl9NX2NvbG9yOwogICAgX190bXAtPl9NX2xlZnQgPSAwOwogICAg X190bXAtPl9NX3JpZ2h0ID0gMDsKICAgIHJldHVybiBfX3RtcDsKICB9CgogIHZvaWQgZGVzdHJv eV9ub2RlKF9MaW5rX3R5cGUgX19wKQogIHsKICAgIGRlc3Ryb3koJl9fcC0+X01fdmFsdWVfZmll bGQpOwogICAgX01fcHV0X25vZGUoX19wKTsKICB9Cgpwcm90ZWN0ZWQ6CiAgc2l6ZV90eXBlIF9N X25vZGVfY291bnQ7ICAKICBfQ29tcGFyZSBfTV9rZXlfY29tcGFyZTsKCiAgX0xpbmtfdHlwZSYg X01fcm9vdCgpIGNvbnN0IAogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9N X3BhcmVudDsgfQogIF9MaW5rX3R5cGUmIF9NX2xlZnRtb3N0KCkgY29uc3QgCiAgICB7IHJldHVy biAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fbGVmdDsgfQogIF9MaW5rX3R5cGUmIF9NX3Jp Z2h0bW9zdCgpIGNvbnN0IAogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9N X3JpZ2h0OyB9CgogIHN0YXRpYyBfTGlua190eXBlJiBfU19sZWZ0KF9MaW5rX3R5cGUgX194KQog ICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CiAgc3RhdGljIF9MaW5r X3R5cGUmIF9TX3JpZ2h0KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUm KShfX3gtPl9NX3JpZ2h0KTsgfQogIHN0YXRpYyBfTGlua190eXBlJiBfU19wYXJlbnQoX0xpbmtf dHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcGFyZW50KTsgfQog IHN0YXRpYyByZWZlcmVuY2UgX1NfdmFsdWUoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiBf X3gtPl9NX3ZhbHVlX2ZpZWxkOyB9CiAgc3RhdGljIGNvbnN0IF9LZXkmIF9TX2tleShfTGlua190 eXBlIF9feCkKICAgIHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX194KSk7IH0KICBz dGF0aWMgX0NvbG9yX3R5cGUmIF9TX2NvbG9yKF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4g KF9Db2xvcl90eXBlJikoX194LT5fTV9jb2xvcik7IH0KCiAgc3RhdGljIF9MaW5rX3R5cGUmIF9T X2xlZnQoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9s ZWZ0KTsgfQogIHN0YXRpYyBfTGlua190eXBlJiBfU19yaWdodChfQmFzZV9wdHIgX194KQogICAg eyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3JpZ2h0KTsgfQogIHN0YXRpYyBfTGlua190 eXBlJiBfU19wYXJlbnQoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJiko X194LT5fTV9wYXJlbnQpOyB9CiAgc3RhdGljIHJlZmVyZW5jZSBfU192YWx1ZShfQmFzZV9wdHIg X194KQogICAgeyByZXR1cm4gKChfTGlua190eXBlKV9feCktPl9NX3ZhbHVlX2ZpZWxkOyB9CiAg c3RhdGljIGNvbnN0IF9LZXkmIF9TX2tleShfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gX0tl eU9mVmFsdWUoKShfU192YWx1ZShfTGlua190eXBlKF9feCkpKTt9IAogIHN0YXRpYyBfQ29sb3Jf dHlwZSYgX1NfY29sb3IoX0Jhc2VfcHRyIF9feCkKICAgIHsgcmV0dXJuIChfQ29sb3JfdHlwZSYp KF9MaW5rX3R5cGUoX194KS0+X01fY29sb3IpOyB9CgogIHN0YXRpYyBfTGlua190eXBlIF9TX21p bmltdW0oX0xpbmtfdHlwZSBfX3gpIAogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpICBfUmJfdHJl ZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsgfQoKICBzdGF0aWMgX0xpbmtfdHlwZSBfU19t YXhpbXVtKF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVl X25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOyB9CgpwdWJsaWM6CiAgdHlwZWRlZiBfUmJfdHJl ZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCByZWZlcmVuY2UsIHBvaW50ZXI+IGl0ZXJhdG9yOwogIHR5 cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgY29uc3RfcmVmZXJlbmNlLCBjb25z dF9wb2ludGVyPiAKICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yOwoKCiAgdHlwZWRlZiByZXZlcnNl X2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVk ZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCgoKCgoKCiAK CnByaXZhdGU6CiAgaXRlcmF0b3IgX01faW5zZXJ0KF9CYXNlX3B0ciBfX3gsIF9CYXNlX3B0ciBf X3ksIGNvbnN0IHZhbHVlX3R5cGUmIF9fdik7CiAgX0xpbmtfdHlwZSBfTV9jb3B5KF9MaW5rX3R5 cGUgX194LCBfTGlua190eXBlIF9fcCk7CiAgdm9pZCBfTV9lcmFzZShfTGlua190eXBlIF9feCk7 CgpwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIF9SYl90cmVlKCkK ICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9j b21wYXJlKCkKICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogIF9SYl90cmVlKGNvbnN0 IF9Db21wYXJlJiBfX2NvbXApCiAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2Rl X2NvdW50KDApLCBfTV9rZXlfY29tcGFyZShfX2NvbXApIAogICAgeyBfTV9lbXB0eV9pbml0aWFs aXplKCk7IH0KCiAgX1JiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwgY29uc3QgYWxsb2Nh dG9yX3R5cGUmIF9fYSkKICAgIDogX0Jhc2UoX19hKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5 X2NvbXBhcmUoX19jb21wKSAKICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9CgogIF9SYl90 cmVlKGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv Yz4mIF9feCkgCiAgICA6IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpLAogICAgICBfTV9ub2Rl X2NvdW50KDApLCBfTV9rZXlfY29tcGFyZShfX3guX01fa2V5X2NvbXBhcmUpCiAgeyAKICAgIGlm IChfX3guX01fcm9vdCgpID09IDApCiAgICAgIF9NX2VtcHR5X2luaXRpYWxpemUoKTsKICAgIGVs c2UgewogICAgICBfU19jb2xvcihfTV9oZWFkZXIpID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgIF9N X3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX3Jvb3QoKSwgX01faGVhZGVyKTsKICAgICAgX01fbGVm dG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBf U19tYXhpbXVtKF9NX3Jvb3QoKSk7CiAgICB9CiAgICBfTV9ub2RlX2NvdW50ID0gX194Ll9NX25v ZGVfY291bnQ7CiAgfQogIH5fUmJfdHJlZSgpIHsgY2xlYXIoKTsgfQogIF9SYl90cmVlPF9LZXks X1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIAogIG9wZXJhdG9yPShjb25zdCBf UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpOwoK cHJpdmF0ZToKICB2b2lkIF9NX2VtcHR5X2luaXRpYWxpemUoKSB7CiAgICBfU19jb2xvcihfTV9o ZWFkZXIpID0gX1NfcmJfdHJlZV9yZWQ7ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAogICAgX01fcm9vdCgpID0gMDsKICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9o ZWFkZXI7CiAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRlcjsKICB9CgpwdWJsaWM6ICAgIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBfQ29tcGFyZSBrZXlfY29tcCgpIGNv bnN0IHsgcmV0dXJuIF9NX2tleV9jb21wYXJlOyB9CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy biBfTV9sZWZ0bW9zdCgpOyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy biBfTV9sZWZ0bW9zdCgpOyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01faGVhZGVyOyB9 CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01faGVhZGVyOyB9CiAgcmV2 ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsg fQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyAKICAgIHJldHVybiBj b25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgCiAgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVu ZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICBjb25zdF9yZXZlcnNl X2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IAogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0 b3IoYmVnaW4oKSk7CiAgfSAKICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9j b3VudCA9PSAwOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlX2Nv dW50OyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0x KTsgfQoKICB2b2lkIHN3YXAoX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh cmUsX0FsbG9jPiYgX190KSB7CiAgICAgOjpzd2FwKF9NX2hlYWRlciwgX190Ll9NX2hlYWRlcik7 CiAgICAgOjpzd2FwKF9NX25vZGVfY291bnQsIF9fdC5fTV9ub2RlX2NvdW50KTsKICAgICA6OnN3 YXAoX01fa2V5X2NvbXBhcmUsIF9fdC5fTV9rZXlfY29tcGFyZSk7CiAgfQogICAgCnB1YmxpYzoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgcGFpcjxpdGVyYXRvcixib29sPiBp bnNlcnRfdW5pcXVlKGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiAgaXRlcmF0b3IgaW5zZXJ0X2Vx dWFsKGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogIGl0ZXJhdG9yIGluc2VydF91bmlxdWUoaXRl cmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKICBpdGVyYXRvciBpbnNl cnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCgog IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydF91bmlxdWUoX0lu cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKICB0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnRfZXF1YWwoX0lucHV0SXRlcmF0b3Ig X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKCgoKCgoKCiAgdm9pZCBlcmFzZShpdGVy YXRvciBfX3Bvc2l0aW9uKTsKICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCk7 CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpOwogIHZvaWQg ZXJhc2UoY29uc3Qga2V5X3R5cGUqIF9fZmlyc3QsIGNvbnN0IGtleV90eXBlKiBfX2xhc3QpOwog IHZvaWQgY2xlYXIoKSB7CiAgICBpZiAoX01fbm9kZV9jb3VudCAhPSAwKSB7CiAgICAgIF9NX2Vy YXNlKF9NX3Jvb3QoKSk7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgIF9N X3Jvb3QoKSA9IDA7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogICAgICBfTV9u b2RlX2NvdW50ID0gMDsKICAgIH0KICB9ICAgICAgCgpwdWJsaWM6CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAg Y29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKICBzaXplX3R5 cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgaXRlcmF0b3IgbG93ZXJfYm91 bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29u c3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5 X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUm IF9feCkgY29uc3Q7CiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qg a2V5X3R5cGUmIF9feCk7CiAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IGVx dWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKcHVibGljOgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKICBib29sIF9fcmJfdmVyaWZ5KCkgY29uc3Q7Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAg ICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCAKb3BlcmF0 b3I9PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+JiBfX3gsIAogICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh bHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKewogIHJldHVybiBfX3guc2l6ZSgpID09IF9feS5z aXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJlZ2lu KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW YWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v bCAKb3BlcmF0b3I8KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21w YXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhp Y2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFz cyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNz IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIApzd2FwKF9SYl90cmVlPF9LZXks X1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgX1JiX3RyZWU8 X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQp7CiAgX194LnN3 YXAoX195KTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3Mg X0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KX1Ji X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgCl9SYl90cmVl PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Om9wZXJhdG9yPShj b25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBf X3gpCnsKICBpZiAodGhpcyAhPSAmX194KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgY2xlYXIoKTsKICAgIF9NX25vZGVfY291bnQgPSAwOwogICAgX01fa2V5X2NvbXBh cmUgPSBfX3guX01fa2V5X2NvbXBhcmU7ICAgICAgICAKICAgIGlmIChfX3guX01fcm9vdCgpID09 IDApIHsKICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRl cjsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICB9CiAgICBlbHNlIHsKICAg ICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBfTV9oZWFkZXIpOwogICAgICBf TV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAgICBfTV9yaWdodG1vc3Qo KSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgICAgX01fbm9kZV9jb3VudCA9IF9feC5fTV9u b2RlX2NvdW50OwogICAgfQogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf S2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9D b21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlP ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9L ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2luc2VydChfQmFzZV9wdHIgX194Xywg X0Jhc2VfcHRyIF9feV8sIGNvbnN0IF9WYWx1ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3ggPSAo X0xpbmtfdHlwZSkgX194XzsKICBfTGlua190eXBlIF9feSA9IChfTGlua190eXBlKSBfX3lfOwog IF9MaW5rX3R5cGUgX196OwoKICBpZiAoX195ID09IF9NX2hlYWRlciB8fCBfX3ggIT0gMCB8fCAK ICAgICAgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX195KSkpIHsK ICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICBfU19sZWZ0KF9feSkgPSBfX3o7ICAg ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg IGlmIChfX3kgPT0gX01faGVhZGVyKSB7CiAgICAgIF9NX3Jvb3QoKSA9IF9fejsKICAgICAgX01f cmlnaHRtb3N0KCkgPSBfX3o7CiAgICB9CiAgICBlbHNlIGlmIChfX3kgPT0gX01fbGVmdG1vc3Qo KSkKICAgICAgX01fbGVmdG1vc3QoKSA9IF9fejsgICAgCiAgfQogIGVsc2UgewogICAgX196ID0g X01fY3JlYXRlX25vZGUoX192KTsKICAgIF9TX3JpZ2h0KF9feSkgPSBfX3o7CiAgICBpZiAoX195 ID09IF9NX3JpZ2h0bW9zdCgpKQogICAgICBfTV9yaWdodG1vc3QoKSA9IF9fejsgICAKICB9CiAg X1NfcGFyZW50KF9feikgPSBfX3k7CiAgX1NfbGVmdChfX3opID0gMDsKICBfU19yaWdodChfX3op ID0gMDsKICBfUmJfdHJlZV9yZWJhbGFuY2UoX196LCBfTV9oZWFkZXItPl9NX3BhcmVudCk7CiAg KytfTV9ub2RlX2NvdW50OwogIHJldHVybiBpdGVyYXRvcihfX3opOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFz cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1 ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjppbnNlcnRfZXF1YWwoY29uc3QgX1Zh bHVlJiBfX3YpCnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9f eCA9IF9NX3Jvb3QoKTsKICB3aGlsZSAoX194ICE9IDApIHsKICAgIF9feSA9IF9feDsKICAgIF9f eCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkpID8gCiAg ICAgICAgICAgIF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CiAgfQogIHJldHVybiBfTV9p bnNlcnQoX194LCBfX3ksIF9fdik7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg X0FsbG9jPgpwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9D b21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yLCAKICAgICBib29sPgpfUmJfdHJlZTxfS2V5LF9WYWx1 ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjppbnNlcnRfdW5pcXVlKGNvbnN0IF9W YWx1ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBf X3ggPSBfTV9yb290KCk7CiAgYm9vbCBfX2NvbXAgPSB0cnVlOwogIHdoaWxlIChfX3ggIT0gMCkg ewogICAgX195ID0gX194OwogICAgX19jb21wID0gX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUo KShfX3YpLCBfU19rZXkoX194KSk7CiAgICBfX3ggPSBfX2NvbXAgPyBfU19sZWZ0KF9feCkgOiBf U19yaWdodChfX3gpOwogIH0KICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihfX3kpOyAgIAogIGlm IChfX2NvbXApCiAgICBpZiAoX19qID09IGJlZ2luKCkpICAgICAKICAgICAgcmV0dXJuIHBhaXI8 aXRlcmF0b3IsYm9vbD4oX01faW5zZXJ0KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICAgIGVsc2UK ICAgICAgLS1fX2o7CiAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfX2ouX01fbm9kZSksIF9L ZXlPZlZhbHVlKCkoX192KSkpCiAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfTV9pbnNl cnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9f aiwgZmFsc2UpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9L ZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVu YW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6 aXRlcmF0b3IgCl9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0Fs bG9jPgogIDo6aW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBf X3YpCnsKICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVmdCkgeyAg CiAgICBpZiAoc2l6ZSgpID4gMCAmJiAKICAgICAgICBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1 ZSgpKF9fdiksIF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkKICAgICAgcmV0dXJuIF9NX2lu c2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKICAgICAK ICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICB9IGVsc2Ug aWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpIHsgIAogICAgaWYgKF9NX2tleV9j b21wYXJlKF9TX2tleShfTV9yaWdodG1vc3QoKSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAg IHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICBlbHNlCiAgICAg IHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgfSBlbHNlIHsKICAgIGl0ZXJhdG9y IF9fYmVmb3JlID0gX19wb3NpdGlvbjsKICAgIC0tX19iZWZvcmU7CiAgICBpZiAoX01fa2V5X2Nv bXBhcmUoX1Nfa2V5KF9fYmVmb3JlLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpIAogICAg ICAgICYmIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRp b24uX01fbm9kZSkpKSB7CiAgICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAw KQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsgCiAg ICAgIGVsc2UKICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19w b3NpdGlvbi5fTV9ub2RlLCBfX3YpOwogICAgIAogICAgfSBlbHNlCiAgICAgIHJldHVybiBpbnNl cnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg X1ZhbCwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNz IF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJl LF9BbGxvYz46Oml0ZXJhdG9yIApfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBh cmUsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9W YWwmIF9fdikKewogIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9sZWZ0 KSB7ICAKICAgIGlmIChzaXplKCkgPiAwICYmIAogICAgICAgIF9NX2tleV9jb21wYXJlKF9LZXlP ZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSkpKQogICAgICByZXR1cm4g X01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBfX3YpOwog ICAgIAogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgfSBlbHNlIGlm IChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyKSB7IAogICAgaWYgKCFfTV9rZXlfY29t cGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfTV9yaWdodG1vc3QoKSkpKQogICAgICBy ZXR1cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwogICAgZWxzZQogICAgICBy ZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgfSBlbHNlIHsKICAgIGl0ZXJhdG9yIF9fYmVmb3Jl ID0gX19wb3NpdGlvbjsKICAgIC0tX19iZWZvcmU7CiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9L ZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fYmVmb3JlLl9NX25vZGUpKQogICAgICAgICYmICFf TV9rZXlfY29tcGFyZShfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShf X3YpKSkgewogICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUuX01fbm9kZSkgPT0gMCkKICAgICAg ICByZXR1cm4gX01faW5zZXJ0KDAsIF9fYmVmb3JlLl9NX25vZGUsIF9fdik7IAogICAgICBlbHNl CiAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24u X01fbm9kZSwgX192KTsKICAgICAKICAgIH0gZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X2VxdWFs KF9fdik7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBf S29WLCBjbGFzcyBfQ21wLCBjbGFzcyBfQWxsb2M+CiAgdGVtcGxhdGU8Y2xhc3MgX0lJPgp2b2lk IF9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKF9J SSBfX2ZpcnN0LCBfSUkgX19sYXN0KQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf X2ZpcnN0KQogICAgaW5zZXJ0X2VxdWFsKCpfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9L ZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9DbXAsIGNsYXNzIF9BbGxvYz4gCiAg dGVtcGxhdGU8Y2xhc3MgX0lJPgp2b2lkIF9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9DbXAsX0Fs bG9jPgogIDo6aW5zZXJ0X3VuaXF1ZShfSUkgX19maXJzdCwgX0lJIF9fbGFzdCkgewogIGZvciAo IDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGluc2VydF91bmlxdWUoKl9fZmly c3QpOwp9CgojIDEwMjEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMy LjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX3RyZWUuaCIgMwoKICAgICAg ICAgCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVl LCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIF9S Yl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmVyYXNl KGl0ZXJhdG9yIF9fcG9zaXRpb24pCnsKICBfTGlua190eXBlIF9feSA9IAogICAgKF9MaW5rX3R5 cGUpIF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX19wb3NpdGlvbi5fTV9ub2RlLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9w YXJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9o ZWFkZXItPl9NX2xlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfTV9oZWFkZXItPl9NX3JpZ2h0KTsKICBkZXN0cm95X25vZGUoX195KTsKICAtLV9NX25v ZGVfY291bnQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9L ZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVu YW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OnNp emVfdHlwZSAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j Pjo6ZXJhc2UoY29uc3QgX0tleSYgX194KQp7CiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gX19w ID0gZXF1YWxfcmFuZ2UoX194KTsKICBzaXplX3R5cGUgX19uID0gMDsKICBkaXN0YW5jZShfX3Au Zmlyc3QsIF9fcC5zZWNvbmQsIF9fbik7CiAgZXJhc2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsK ICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3Mg X0tvViwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tl eSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46Ol9MaW5rX3R5cGUgCl9SYl90cmVlPF9L ZXksX1ZhbCxfS29WLF9Db21wYXJlLF9BbGxvYz4KICA6Ol9NX2NvcHkoX0xpbmtfdHlwZSBfX3gs IF9MaW5rX3R5cGUgX19wKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICBfTGlua190eXBl IF9fdG9wID0gX01fY2xvbmVfbm9kZShfX3gpOwogIF9fdG9wLT5fTV9wYXJlbnQgPSBfX3A7CiAK ICB0cnkgIHsKICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICBfX3RvcC0+X01fcmlnaHQgPSBf TV9jb3B5KF9TX3JpZ2h0KF9feCksIF9fdG9wKTsKICAgIF9fcCA9IF9fdG9wOwogICAgX194ID0g X1NfbGVmdChfX3gpOwoKICAgIHdoaWxlIChfX3ggIT0gMCkgewogICAgICBfTGlua190eXBlIF9f eSA9IF9NX2Nsb25lX25vZGUoX194KTsKICAgICAgX19wLT5fTV9sZWZ0ID0gX195OwogICAgICBf X3ktPl9NX3BhcmVudCA9IF9fcDsKICAgICAgaWYgKF9feC0+X01fcmlnaHQpCiAgICAgICAgX195 LT5fTV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX195KTsKICAgICAgX19wID0gX195 OwogICAgICBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICB9CiAgfQogIGNhdGNoKC4uLikgeyAgX01f ZXJhc2UoX190b3ApIDsgdGhyb3c7IH0gOwoKICByZXR1cm4gX190b3A7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNs YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6X01fZXJhc2UoX0xpbmtfdHlwZSBfX3gpCnsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgd2hpbGUgKF9feCAhPSAwKSB7CiAg ICBfTV9lcmFzZShfU19yaWdodChfX3gpKTsKICAgIF9MaW5rX3R5cGUgX195ID0gX1NfbGVmdChf X3gpOwogICAgZGVzdHJveV9ub2RlKF9feCk7CiAgICBfX3ggPSBfX3k7CiAgfQp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAg ICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp2b2lkIF9SYl90cmVlPF9LZXksX1ZhbHVl LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmVyYXNlKGl0ZXJhdG9yIF9fZmlyc3Qs IGl0ZXJhdG9yIF9fbGFzdCkKewogIGlmIChfX2ZpcnN0ID09IGJlZ2luKCkgJiYgX19sYXN0ID09 IGVuZCgpKQogICAgY2xlYXIoKTsKICBlbHNlCiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qp IGVyYXNlKF9fZmlyc3QrKyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUs IGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs b2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j PgogIDo6ZXJhc2UoY29uc3QgX0tleSogX19maXJzdCwgY29uc3QgX0tleSogX19sYXN0KSAKewog IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgZXJhc2UoKl9fZmlyc3QrKyk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAg IGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1Zh bHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yIApfUmJfdHJlZTxfS2V5 LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpmaW5kKGNvbnN0IF9LZXkmIF9f aykKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOyAgICAgICAKICBfTGlua190eXBlIF9f eCA9IF9NX3Jvb3QoKTsgICAgICAgCgogIHdoaWxlIChfX3ggIT0gMCkgCiAgICBpZiAoIV9NX2tl eV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xl ZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgaXRlcmF0b3Ig X19qID0gaXRlcmF0b3IoX195KTsgICAKICByZXR1cm4gKF9faiA9PSBlbmQoKSB8fCBfTV9rZXlf Y29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/IAogICAgIGVuZCgpIDogX19qOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwg CiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJl ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRv ciAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Zmlu ZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsg IAogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOyAgCgogIHdoaWxlIChfX3ggIT0gMCkgewog ICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgX195ID0gX194 LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7 CiAgfQogIGNvbnN0X2l0ZXJhdG9yIF9faiA9IGNvbnN0X2l0ZXJhdG9yKF9feSk7ICAgCiAgcmV0 dXJuIChfX2ogPT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25v ZGUpKSkgPwogICAgZW5kKCkgOiBfX2o7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf VmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFz cyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21w YXJlLF9BbGxvYz46OnNpemVfdHlwZSAKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPgogIDo6Y291bnQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgcGFp cjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9fayk7 CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kLCBf X24pOwogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUs IGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs b2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B bGxvYz46Oml0ZXJhdG9yIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy ZSxfQWxsb2M+CiAgOjpsb3dlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spCnsKICBfTGlua190eXBl IF9feSA9IF9NX2hlYWRlcjsgIAogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOyAgCgogIHdo aWxlIChfX3ggIT0gMCkgCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2sp KQogICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194 ID0gX1NfcmlnaHQoX194KTsKCiAgcmV0dXJuIGl0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNs YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVl LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yIApfUmJfdHJlZTxf S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpsb3dlcl9ib3VuZChj b25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsgIAog IF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOyAgCgogIHdoaWxlIChfX3ggIT0gMCkgCiAgICBp ZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gsIF9f eCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAg cmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz cyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCAKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBj bGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9D b21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yIApfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1 ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spCnsKICBf TGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsgIAogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgp OyAgCgogICB3aGlsZSAoX194ICE9IDApIAogICAgIGlmIChfTV9rZXlfY29tcGFyZShfX2ssIF9T X2tleShfX3gpKSkKICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgIGVs c2UKICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICByZXR1cm4gaXRlcmF0b3IoX195KTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUs IAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3Ry ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0 b3IgCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6 OnVwcGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykgY29uc3QKewogIF9MaW5rX3R5cGUgX195ID0g X01faGVhZGVyOyAgCiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7ICAKCiAgIHdoaWxlIChf X3ggIT0gMCkgCiAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQogICAg ICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgZWxzZQogICAgICAgX194ID0g X1NfcmlnaHQoX194KTsKCiAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgCiAgICAgICAg ICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgCnBhaXI8dHlwZW5hbWUgX1Ji X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3Is CiAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs X0FsbG9jPjo6aXRlcmF0b3I+Cl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21w YXJlLF9BbGxvYz4KICA6OmVxdWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykKewogIHJldHVybiBw YWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4obG93ZXJfYm91bmQoX19rKSwgdXBwZXJfYm91bmQoX19r KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9Lb1YsIGNs YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSAKcGFpcjx0eXBlbmFtZSBfUmJfdHJl ZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciwK ICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxs b2M+Ojpjb25zdF9pdGVyYXRvcj4KX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS29WLCBfQ29tcGFy ZSwgX0FsbG9jPgogIDo6ZXF1YWxfcmFuZ2UoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgcmV0 dXJuIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+KGxvd2VyX2JvdW5kKF9fayks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5k KF9faykpOwp9CgppbmxpbmUgaW50IApfX2JsYWNrX2NvdW50KF9SYl90cmVlX25vZGVfYmFzZSog X19ub2RlLCBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fcm9vdCkKewogIGlmIChfX25vZGUgPT0gMCkK ICAgIHJldHVybiAwOwogIGVsc2UgewogICAgaW50IF9fYmMgPSBfX25vZGUtPl9NX2NvbG9yID09 IF9TX3JiX3RyZWVfYmxhY2sgPyAxIDogMDsKICAgIGlmIChfX25vZGUgPT0gX19yb290KQogICAg ICByZXR1cm4gX19iYzsKICAgIGVsc2UKICAgICAgcmV0dXJuIF9fYmMgKyBfX2JsYWNrX2NvdW50 KF9fbm9kZS0+X01fcGFyZW50LCBfX3Jvb3QpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXks IGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIAogICAgICAgICAgY2xhc3MgX0NvbXBh cmUsIGNsYXNzIF9BbGxvYz4KYm9vbCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf Q29tcGFyZSxfQWxsb2M+OjpfX3JiX3ZlcmlmeSgpIGNvbnN0CnsKICBpZiAoX01fbm9kZV9jb3Vu dCA9PSAwIHx8IGJlZ2luKCkgPT0gZW5kKCkpCiAgICByZXR1cm4gX01fbm9kZV9jb3VudCA9PSAw ICYmIGJlZ2luKCkgPT0gZW5kKCkgJiYKICAgICAgX01faGVhZGVyLT5fTV9sZWZ0ID09IF9NX2hl YWRlciAmJiBfTV9oZWFkZXItPl9NX3JpZ2h0ID09IF9NX2hlYWRlcjsKICAKICBpbnQgX19sZW4g PSBfX2JsYWNrX2NvdW50KF9NX2xlZnRtb3N0KCksIF9NX3Jvb3QoKSk7CiAgZm9yIChjb25zdF9p dGVyYXRvciBfX2l0ID0gYmVnaW4oKTsgX19pdCAhPSBlbmQoKTsgKytfX2l0KSB7CiAgICBfTGlu a190eXBlIF9feCA9IChfTGlua190eXBlKSBfX2l0Ll9NX25vZGU7CiAgICBfTGlua190eXBlIF9f TCA9IF9TX2xlZnQoX194KTsKICAgIF9MaW5rX3R5cGUgX19SID0gX1NfcmlnaHQoX194KTsKCiAg ICBpZiAoX194LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkKICAgICAgaWYgKChfX0wgJiYg X19MLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgfHwKICAgICAgICAgIChfX1IgJiYgX19S LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkpCiAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAg IGlmIChfX0wgJiYgX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9TX2tleShfX0wpKSkKICAg ICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKF9fUiAmJiBfTV9rZXlfY29tcGFyZShfU19rZXkoX19S KSwgX1Nfa2V5KF9feCkpKQogICAgICByZXR1cm4gZmFsc2U7CgogICAgaWYgKCFfX0wgJiYgIV9f UiAmJiBfX2JsYWNrX2NvdW50KF9feCwgX01fcm9vdCgpKSAhPSBfX2xlbikKICAgICAgcmV0dXJu IGZhbHNlOwogIH0KCiAgaWYgKF9NX2xlZnRtb3N0KCkgIT0gX1JiX3RyZWVfbm9kZV9iYXNlOjpf U19taW5pbXVtKF9NX3Jvb3QoKSkpCiAgICByZXR1cm4gZmFsc2U7CiAgaWYgKF9NX3JpZ2h0bW9z dCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfTV9yb290KCkpKQogICAgcmV0 dXJuIGZhbHNlOwoKICByZXR1cm4gdHJ1ZTsKfQoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg Y2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAg ICBjbGFzcyBfQWxsb2MgPSBhbGxvYyAgPgpzdHJ1Y3QgcmJfdHJlZSA6IHB1YmxpYyBfUmJfdHJl ZTxfS2V5LCBfVmFsdWUsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPgp7CiAgdHlwZWRl ZiBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPiBf QmFzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3Jf dHlwZTsKCiAgcmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wID0gX0NvbXBhcmUoKSwKICAg ICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAg OiBfQmFzZShfX2NvbXAsIF9fYSkge30KICAKICB+cmJfdHJlZSgpIHt9Cn07CgoKCgoKICAKCgoK IAogCiAKIyAzMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8y Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9tYXAiIDIgMwoKCiMgMSAiL3Vzci9sb2Nh bC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5j bHVkZS9nKystMy9zdGxfbWFwLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoK CgoKCiAKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w YXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jICA+CgoKCgpj bGFzcyBtYXAgewpwdWJsaWM6CgogCgogIHR5cGVkZWYgX0tleSAgICAgICAgICAgICAgICAgIGtl eV90eXBlOwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgIGRhdGFfdHlwZTsKICB0eXBl ZGVmIF9UcCAgICAgICAgICAgICAgICAgICBtYXBwZWRfdHlwZTsKICB0eXBlZGVmIHBhaXI8Y29u c3QgX0tleSwgX1RwPiB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0NvbXBhcmUgICAgICAgICAgICAg IGtleV9jb21wYXJlOwogICAgCiAgY2xhc3MgdmFsdWVfY29tcGFyZQogICAgOiBwdWJsaWMgYmlu YXJ5X2Z1bmN0aW9uPHZhbHVlX3R5cGUsIHZhbHVlX3R5cGUsIGJvb2w+IHsKICBmcmllbmQgY2xh c3MgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVjdGVkIDoKICAgIF9Db21w YXJlIF9NX2NvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBfTV9jb21wKF9f Yykge30KICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVfdHlwZSYgX194 LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9NX2NvbXAoX194 LmZpcnN0LCBfX3kuZmlyc3QpOwogICAgfQogIH07Cgpwcml2YXRlOgogIHR5cGVkZWYgX1JiX3Ry ZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsIAogICAgICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2 YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBf TV90OyAgIApwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9p bnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9w b2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNl OwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVm ZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsK ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0 b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJz ZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9p dGVyYXRvciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90 eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpk aWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90 eXBlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgIAoKICBtYXAoKSA6IF9NX3Qo X0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBtYXAoY29uc3QgX0Nv bXBhcmUmIF9fY29tcCwKICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9 IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CgoKICB0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J bnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlw ZSgpKQogICAgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQoKICB0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgY29u c3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19j b21wLCBfX2EpIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KIyAxMjMg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4u Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX21hcC5oIiAzCgoKICBtYXAoY29uc3QgbWFwPF9LZXks X1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5fTV90KSB7fQogIG1hcDxfS2V5 LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtYXA8X0tleSwgX1RwLCBf Q29tcGFyZSwgX0FsbG9jPiYgX194KQogIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVy biAqdGhpczsgCiAgfQoKICAgCgogIGtleV9jb21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1 cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3Qg eyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9jb21wKCkpOyB9CiAgYWxsb2NhdG9yX3R5 cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9 CgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgY29uc3RfaXRl cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBpdGVyYXRvciBl bmQoKSB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qg eyByZXR1cm4gX01fdC5lbmQoKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1 cm4gX01fdC5yYmVnaW4oKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29u c3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsg cmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29u c3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4g X01fdC5lbXB0eSgpOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNp emUoKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3Np emUoKTsgfQogIF9UcCYgb3BlcmF0b3JbXShjb25zdCBrZXlfdHlwZSYgX19rKSB7CiAgICBpdGVy YXRvciBfX2kgPSBsb3dlcl9ib3VuZChfX2spOwogICAgIAogICAgaWYgKF9faSA9PSBlbmQoKSB8 fCBrZXlfY29tcCgpKF9faywgKCpfX2kpLmZpcnN0KSkKICAgICAgX19pID0gaW5zZXJ0KF9faSwg dmFsdWVfdHlwZShfX2ssIF9UcCgpKSk7CiAgICByZXR1cm4gKCpfX2kpLnNlY29uZDsKICB9CiAg dm9pZCBzd2FwKG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2Fw KF9feC5fTV90KTsgfQoKICAgCgogIHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0KGNvbnN0IHZh bHVlX3R5cGUmIF9feCkgCiAgICB7IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUoX194KTsgfQog IGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194 KQogICAgeyByZXR1cm4gX01fdC5pbnNlcnRfdW5pcXVlKHBvc2l0aW9uLCBfX3gpOyB9CgogIHRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X3VuaXF1 ZShfX2ZpcnN0LCBfX2xhc3QpOwogIH0KCgoKCgoKCgoKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9f cG9zaXRpb24pIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsgfQogIHNpemVfdHlwZSBlcmFzZShj b25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmVyYXNlKF9feCk7IH0KICB2b2lkIGVy YXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgIHsgX01fdC5lcmFzZShf X2ZpcnN0LCBfX2xhc3QpOyB9CiAgdm9pZCBjbGVhcigpIHsgX01fdC5jbGVhcigpOyB9CgogICAK CiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQo X194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qg eyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5 cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5jb3VudChfX3gpOyB9CiAgaXRlcmF0b3IgbG93 ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9f eCk7IH0KICBjb25zdF9pdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBj b25zdCB7CiAgICByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyAKICB9CiAgaXRlcmF0b3Ig dXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90LnVwcGVyX2JvdW5k KF9feCk7IH0KICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194 KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyAKICB9CiAgCiAgcGFp cjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewog ICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25zdF9pdGVyYXRv cixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qg ewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgZnJpZW5kIGJvb2wgb3Bl cmF0b3I9PSA8PiAgKGNvbnN0IG1hcCYsIGNvbnN0IG1hcCYpOwogIGZyaWVuZCBib29sIG9wZXJh dG9yPCA8PiAgKGNvbnN0IG1hcCYsIGNvbnN0IG1hcCYpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9L ZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wg b3BlcmF0b3I9PShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg X195KSB7CiAgcmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v bCBvcGVyYXRvcjwoY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg X195KSB7CiAgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7Cn0KCgoKdGVtcGxhdGUgPGNsYXNz IF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZv aWQgc3dhcChtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LCAKICAgICAgICAgICAg ICAgICBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195 KTsKfQoKCgoKCgoKCiAKCgoKIAogCiAKIyAzMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFy Yy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9tYXAiIDIg MwoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUu My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9tdWx0aW1hcC5oIiAxIDMKIAoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFzcyBf QWxsb2MgPSBhbGxvYyAgPgoKCgoKY2xhc3MgbXVsdGltYXAgewpwdWJsaWM6CgogCgogIHR5cGVk ZWYgX0tleSAgICAgICAgICAgICAgICAgIGtleV90eXBlOwogIHR5cGVkZWYgX1RwICAgICAgICAg ICAgICAgICAgIGRhdGFfdHlwZTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICBtYXBw ZWRfdHlwZTsKICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tleSwgX1RwPiB2YWx1ZV90eXBlOwogIHR5 cGVkZWYgX0NvbXBhcmUgICAgICAgICAgICAgIGtleV9jb21wYXJlOwoKICBjbGFzcyB2YWx1ZV9j b21wYXJlIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCBi b29sPiB7CiAgZnJpZW5kIGNsYXNzIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47 CiAgcHJvdGVjdGVkOgogICAgX0NvbXBhcmUgX01fY29tcDsKICAgIHZhbHVlX2NvbXBhcmUoX0Nv bXBhcmUgX19jKSA6IF9NX2NvbXAoX19jKSB7fQogIHB1YmxpYzoKICAgIGJvb2wgb3BlcmF0b3Io KShjb25zdCB2YWx1ZV90eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3Qgewog ICAgICByZXR1cm4gX01fY29tcChfX3guZmlyc3QsIF9feS5maXJzdCk7CiAgICB9CiAgfTsKCnBy aXZhdGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwgCiAgICAgICAg ICAgICAgICAgIF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9S ZXBfdHlwZTsKICBfUmVwX3R5cGUgX01fdDsgICAKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUg X1JlcF90eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6 OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlw ZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29u c3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlw ZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0 X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOyAKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6 cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1Jl cF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAg dHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAg dHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBl OwoKIAoKICBtdWx0aW1hcCgpIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7 IH0KICBleHBsaWNpdCBtdWx0aW1hcChjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICAgICAg ICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQog ICAgOiBfTV90KF9fY29tcCwgX19hKSB7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy YXRvcj4KICBtdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf X2xhc3QpCiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01f dC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcmF0b3I+CiAgbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl cmF0b3IgX19sYXN0LAogICAgICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAg ICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9N X3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoj IDEyMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMv Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfbXVsdGltYXAuaCIgMwoKCiAgbXVsdGltYXAo Y29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194 Ll9NX3QpIHsgfQogIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0 b3I9KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgewogICAg X01fdCA9IF9feC5fTV90OwogICAgcmV0dXJuICp0aGlzOyAKICB9CgogICAKCiAga2V5X2NvbXBh cmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9j b21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJldHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5 X2NvbXAoKSk7IH0KICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1 cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBf TV90LmJlZ2luKCk7IH0KICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9N X3QuYmVnaW4oKTsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KICBj b25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJz ZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgY29uc3RfcmV2 ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAg cmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBjb25zdF9y ZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGJv b2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6 ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkg Y29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CiAgdm9pZCBzd2FwKG11bHRpbWFwPF9L ZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgeyBfTV90LnN3YXAoX194Ll9NX3QpOyB9Cgog ICAKCiAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgeyByZXR1cm4gX01f dC5pbnNlcnRfZXF1YWwoX194KTsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0 aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90Lmluc2VydF9lcXVh bChfX3Bvc2l0aW9uLCBfX3gpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y PgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCkgewogICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsKICB9CgoKCgoK CgoKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgX01fdC5lcmFzZShfX3Bvc2l0 aW9uKTsgfQogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBf TV90LmVyYXNlKF9feCk7IH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9y IF9fbGFzdCkKICAgIHsgX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgdm9pZCBjbGVh cigpIHsgX01fdC5jbGVhcigpOyB9CgogICAKCiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlw ZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGZpbmQo Y29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBz aXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5j b3VudChfX3gpOyB9CiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkg e3JldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciBsb3dlcl9i b3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5sb3dlcl9i b3VuZChfX3gpOyAKICB9CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9f eCkge3JldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciB1cHBl cl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC51cHBl cl9ib3VuZChfX3gpOyAKICB9CiAgIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3Jhbmdl KGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7 CiAgfQogIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNv bnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9f eCk7CiAgfQogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gPD4gIChjb25zdCBtdWx0aW1hcCYsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlt YXAmKTsKICBmcmllbmQgYm9vbCBvcGVyYXRvcjwgPD4gIChjb25zdCBtdWx0aW1hcCYsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcCYp Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNs YXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBtdWx0aW1hcDxfS2V5LF9U cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsIAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11 bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01f dCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3Mg X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRp bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1 cm4gX194Ll9NX3QgPCBfX3kuX01fdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg X1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKG11bHRp bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwgCiAgICAgICAgICAgICAgICAgbXVs dGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsK fQoKCgoKCgoKCiAKCgoKIAogCiAKIyAzNCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9tYXAiIDIgMwoK CgoKIAogCiAKIyAxOSAiLi4vU3JjU2hhcmVkL0VtVHJhbnNwb3J0U2VyaWFsLmgiIDIKCgoKCmNs YXNzIEVtSG9zdFRyYW5zcG9ydFNlcmlhbDsKCmNsYXNzIEVtVHJhbnNwb3J0U2VyaWFsIDogcHVi bGljIEVtVHJhbnNwb3J0CnsKCXB1YmxpYzoKCQl0eXBlZGVmIHN0cmluZwlQb3J0TmFtZTsKCQl0 eXBlZGVmIGxvbmcJQmF1ZDsKCQl0eXBlZGVmIGxvbmcJU3RvcEJpdHM7CgkJdHlwZWRlZiBsb25n CURhdGFCaXRzOwoJCXR5cGVkZWYgbG9uZwlId3JIYW5kc2hha2U7CgoJCXR5cGVkZWYgdmVjdG9y PFBvcnROYW1lPglQb3J0TmFtZUxpc3Q7CgkJdHlwZWRlZiB2ZWN0b3I8QmF1ZD4JCUJhdWRMaXN0 OwoKCQllbnVtIFBhcml0eQoJCXsKCQkJa05vUGFyaXR5LAoJCQlrT2RkUGFyaXR5LAoJCQlrRXZl blBhcml0eQoJCX07CgoJCWVudW0gUlRTQ29udHJvbAoJCXsKCQkJa1JUU09mZiwKCQkJa1JUU09u LAoJCQlrUlRTQXV0bwoJCX07CgoJCSAKCQkgCgkJc3RydWN0IENvbmZpZ1NlcmlhbCA6IHB1Ymxp YyBFbVRyYW5zcG9ydDo6Q29uZmlnCgkJewoJCQkJCQkJCQlDb25maWdTZXJpYWwJKHZvaWQpOwoJ CQl2aXJ0dWFsCQkJCQl+Q29uZmlnU2VyaWFsCSh2b2lkKTsKCgkJCXZpcnR1YWwgRW1UcmFuc3Bv cnQqCU5ld1RyYW5zcG9ydAkodm9pZCk7CgkJCXZpcnR1YWwgRW1UcmFuc3BvcnQqCUdldFRyYW5z cG9ydAkodm9pZCk7CgoJCQlib29sIG9wZXJhdG9yPT0oY29uc3QgQ29uZmlnU2VyaWFsJiBvdGhl cikgY29uc3Q7CgoJCQlQb3J0TmFtZQkJZlBvcnQ7CgkJCUJhdWQJCQlmQmF1ZDsKCQkJUGFyaXR5 CQkJZlBhcml0eTsKCQkJU3RvcEJpdHMJCWZTdG9wQml0czsKCQkJRGF0YUJpdHMJCWZEYXRhQml0 czsKCQkJSHdySGFuZHNoYWtlCWZId3JIYW5kc2hha2U7CgkJfTsKCgkJdHlwZWRlZiBtYXA8UG9y dE5hbWUsIEVtVHJhbnNwb3J0U2VyaWFsKj4JT3BlblBvcnRMaXN0OwoKCXB1YmxpYzoKCQkJCQkJ CQlFbVRyYW5zcG9ydFNlcmlhbAkJKHZvaWQpOwoJCQkJCQkJCUVtVHJhbnNwb3J0U2VyaWFsCQko Y29uc3QgRW1UcmFuc3BvcnREZXNjcmlwdG9yJik7CgkJCQkJCQkJRW1UcmFuc3BvcnRTZXJpYWwJ CShjb25zdCBDb25maWdTZXJpYWwmKTsKCQl2aXJ0dWFsCQkJCQl+RW1UcmFuc3BvcnRTZXJpYWwJ CSh2b2lkKTsKCgkJdmlydHVhbCBFcnJDb2RlCQkJT3BlbgkJCQkJKHZvaWQpOwoJCXZpcnR1YWwg RXJyQ29kZQkJCUNsb3NlCQkJCQkodm9pZCk7CgoJCXZpcnR1YWwgRXJyQ29kZQkJCVJlYWQJCQkJ CShsb25nJiwgdm9pZCopOwoJCXZpcnR1YWwgRXJyQ29kZQkJCVdyaXRlCQkJCQkobG9uZyYsIGNv bnN0IHZvaWQqKTsKCgkJdmlydHVhbCBCb29sCQkJQ2FuUmVhZAkJCQkJKHZvaWQpOwoJCXZpcnR1 YWwgQm9vbAkJCUNhbldyaXRlCQkJCSh2b2lkKTsKCQl2aXJ0dWFsIGxvbmcJCQlCeXRlc0luQnVm ZmVyCQkJKGxvbmcgbWluQnl0ZXMpOwoJCXZpcnR1YWwgc3RyaW5nCQkJR2V0U3BlY2lmaWNOYW1l CQkJKHZvaWQpOwoKCQlFcnJDb2RlCQkJCQlTZXRDb25maWcJCQkJKGNvbnN0IENvbmZpZ1Nlcmlh bCYpOwoJCXZvaWQJCQkJCUdldENvbmZpZwkJCQkoQ29uZmlnU2VyaWFsJik7CgoJCXZvaWQJCQkJ CVNldFJUUwkJCQkJKFJUU0NvbnRyb2wgc3RhdGUpOwoJCXZvaWQJCQkJCVNldERUUgkJCQkJKEJv b2wgc3RhdGUpOwoJCXZvaWQJCQkJCVNldEJyZWFrCQkJCShCb29sIHN0YXRlKTsKCgkJQm9vbAkJ CQkJR2V0Q1RTCQkJCQkodm9pZCk7CgkJQm9vbAkJCQkJR2V0RFNSCQkJCQkodm9pZCk7CgoJCXN0 YXRpYyBFbVRyYW5zcG9ydFNlcmlhbCoJR2V0VHJhbnNwb3J0CQkoY29uc3QgQ29uZmlnU2VyaWFs Jik7CgkJc3RhdGljIHZvaWQJCQkJR2V0RGVzY3JpcHRvckxpc3QJCShFbVRyYW5zcG9ydERlc2Ny aXB0b3JMaXN0Jik7CgkJc3RhdGljIHZvaWQJCQkJR2V0U2VyaWFsQmF1ZExpc3QJCShCYXVkTGlz dCYpOwoKCXByaXZhdGU6CgkJdm9pZAkJCQkJSG9zdENvbnN0cnVjdAkJCSh2b2lkKTsKCQl2b2lk CQkJCQlIb3N0RGVzdHJ1Y3QJCQkodm9pZCk7CgoJCUVyckNvZGUJCQkJCUhvc3RPcGVuCQkJCSh2 b2lkKTsKCQlFcnJDb2RlCQkJCQlIb3N0Q2xvc2UJCQkJKHZvaWQpOwoKCQlFcnJDb2RlCQkJCQlI b3N0UmVhZAkJCQkobG9uZyYsIHZvaWQqKTsKCQlFcnJDb2RlCQkJCQlIb3N0V3JpdGUJCQkJKGxv bmcmLCBjb25zdCB2b2lkKik7CgkJbG9uZwkJCQkJSG9zdEJ5dGVzSW5CdWZmZXIJCShsb25nIG1p bkJ5dGVzKTsKCgkJRXJyQ29kZQkJCQkJSG9zdFNldENvbmZpZwkJCShjb25zdCBDb25maWdTZXJp YWwmKTsKCgkJdm9pZAkJCQkJSG9zdFNldFJUUwkJCQkoUlRTQ29udHJvbCBzdGF0ZSk7CgkJdm9p ZAkJCQkJSG9zdFNldERUUgkJCQkoQm9vbCBzdGF0ZSk7CgkJdm9pZAkJCQkJSG9zdFNldEJyZWFr CQkJKEJvb2wgc3RhdGUpOwoKCQlCb29sCQkJCQlIb3N0R2V0Q1RTCQkJCSh2b2lkKTsKCQlCb29s CQkJCQlIb3N0R2V0RFNSCQkJCSh2b2lkKTsKCgkJc3RhdGljIHZvaWQJCQkJSG9zdEdldFBvcnRO YW1lTGlzdAkJKFBvcnROYW1lTGlzdCYpOwoJCXN0YXRpYyB2b2lkCQkJCUhvc3RHZXRTZXJpYWxC YXVkTGlzdAkoQmF1ZExpc3QmKTsKCgkJRW1Ib3N0VHJhbnNwb3J0U2VyaWFsKglmSG9zdDsKCQlD b25maWdTZXJpYWwJCQlmQ29uZmlnOwoJCUJvb2wJCQkJCWZDb21tRXN0YWJsaXNoZWQ7CgoJCXN0 YXRpYyBPcGVuUG9ydExpc3QJCWZnT3BlblBvcnRzOwp9OwoKCiMgMjAgIi4uL1NyY1NoYXJlZC9F bURsZy5oIiAyCgoKIyAxICIuLi9TcmNTaGFyZWQvRW1TdHJ1Y3RzLmgiIDEKIAogCgoKCgoKCgoK CgoKCgoKCiMgMSAiLi4vU3JjU2hhcmVkL0VtRGV2aWNlLmgiIDEKIAogCgoKCgoKCgoKCgoKCgoK CiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMv Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy91dGlsaXR5IiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIyAxOCAiLi4vU3JjU2hhcmVkL0VtRGV2aWNlLmgiIDIK CgoKY2xhc3MgRW1DUFU7CmNsYXNzIEVtRmlsZVJlZjsKY2xhc3MgRW1SZWdzOwpjbGFzcyBFbVNl c3Npb247CnN0cnVjdCBEZXZpY2VJbmZvOwoKY2xhc3MgRW1ST01SZWFkZXI7CgpjbGFzcyBFbURl dmljZTsKdHlwZWRlZiB2ZWN0b3I8RW1EZXZpY2U+CUVtRGV2aWNlTGlzdDsKCgpjbGFzcyBFbURl dmljZQp7CglwdWJsaWM6CgkJCQkJCQkJRW1EZXZpY2UJCQkodm9pZCk7CgkJCQkJCQkJRW1EZXZp Y2UJCQkoY29uc3QgY2hhciopOwoJCQkJCQkJCUVtRGV2aWNlCQkJKGNvbnN0IHN0cmluZyYpOwoJ CQkJCQkJCUVtRGV2aWNlCQkJKGNvbnN0IEVtRGV2aWNlJik7CgkJCQkJCQkJfkVtRGV2aWNlCQkJ KHZvaWQpOwoKCQlib29sCQkJCQlvcGVyYXRvcj09CQkJKGNvbnN0IEVtRGV2aWNlJikgY29uc3Q7 CgkJYm9vbAkJCQkJb3BlcmF0b3IhPQkJCShjb25zdCBFbURldmljZSYpIGNvbnN0OwoKCQlCb29s CQkJCQlTdXBwb3J0ZWQJCQkodm9pZCkgY29uc3Q7CgoJCUJvb2wJCQkJCVN1cHBvcnRzNjgzMjgJ CSh2b2lkKSBjb25zdDsKCQlCb29sCQkJCQlTdXBwb3J0czY4RVozMjgJCSh2b2lkKSBjb25zdDsK CQlCb29sCQkJCQlTdXBwb3J0czY4VlozMjgJCSh2b2lkKSBjb25zdDsKCQlCb29sCQkJCQlTdXBw b3J0czY4U1ozMjgJCSh2b2lkKSBjb25zdDsKCQlCb29sCQkJCQlTdXBwb3J0c0FSTQkJCSh2b2lk KSBjb25zdDsKCgkJQm9vbAkJCQkJUHJpc21QbGF0aW51bUVkZ2VIYWNrCSh2b2lkKSBjb25zdDsK CQlCb29sCQkJCQlFZGdlSGFjawkJCQkodm9pZCkgY29uc3Q7CgoJCUJvb2wJCQkJCVN1cHBvcnRz Uk9NCQkJKGNvbnN0IEVtRmlsZVJlZiYpIGNvbnN0OwoJCUJvb2wJCQkJCVN1cHBvcnRzUk9NCQkJ KGNvbnN0IEVtUk9NUmVhZGVyJikgY29uc3Q7CgoJCUVtQ1BVKgkJCQkJQ3JlYXRlQ1BVCQkJKEVt U2Vzc2lvbiopIGNvbnN0OwoJCXZvaWQJCQkJCUNyZWF0ZVJlZ3MJCQkodm9pZCkgY29uc3Q7CgoJ CUJvb2wJCQkJCUhhc0ZsYXNoCQkJKHZvaWQpIGNvbnN0OwoKCQlSQU1TaXplVHlwZQkJCQlNaW5S QU1TaXplCQkJKHZvaWQpIGNvbnN0OwoKCQlsb25nCQkJCQlIYXJkd2FyZUlECQkJKHZvaWQpIGNv bnN0OwoJCWxvbmcJCQkJCUhhcmR3YXJlU3ViSUQJCSh2b2lkKSBjb25zdDsKCgkJc3RyaW5nCQkJ CQlHZXRNZW51U3RyaW5nCQkodm9pZCkgY29uc3Q7CgkJc3RyaW5nCQkJCQlHZXRJRFN0cmluZwkJ CSh2b2lkKSBjb25zdDsKCQl2ZWN0b3I8c3RyaW5nPgkJCUdldElEU3RyaW5ncwkJKHZvaWQpIGNv bnN0OwoKCXB1YmxpYzoKCQlzdGF0aWMgRW1EZXZpY2VMaXN0CQlHZXREZXZpY2VMaXN0CQkodm9p ZCk7CgoJcHJpdmF0ZToKCQkJCQkJCQlFbURldmljZQkJCShpbnQpOwoJCWNvbnN0IERldmljZUlu Zm8qCQlHZXREZXZpY2VJbmZvCQkodm9pZCkgY29uc3Q7CgkJaW50CQkJCQkJR2V0RGV2aWNlSUQJ CQkoY29uc3QgY2hhciopIGNvbnN0OwoKCQlpbnQJCQkJCQlmRGV2aWNlSUQ7Cn07CgoKIyAxOCAi Li4vU3JjU2hhcmVkL0VtU3RydWN0cy5oIiAyCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxp Yi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9k ZXF1ZSIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2lu Y2x1ZGUvZysrLTMvc3RsX2RlcXVlLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgog CgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK ICAKCgoKCgoKIAogCmlubGluZSBzaXplX3QKX19kZXF1ZV9idWZfc2l6ZShzaXplX3QgX19uLCBz aXplX3QgX19zaXplKQp7CiAgcmV0dXJuIF9fbiAhPSAwID8gX19uIDogKF9fc2l6ZSA8IDUxMiA/ IHNpemVfdCg1MTIgLyBfX3NpemUpIDogc2l6ZV90KDEpKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHIsIHNpemVfdCBfX2J1ZnNpej4Kc3RydWN0IF9EZXF1 ZV9pdGVyYXRvciB7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLF9UcCYsX1RwKixfX2J1 ZnNpej4gICAgICAgICAgICAgaXRlcmF0b3I7CiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1Rw LGNvbnN0IF9UcCYsY29uc3QgX1RwKixfX2J1ZnNpej4gY29uc3RfaXRlcmF0b3I7CiAgc3RhdGlj IHNpemVfdCAKICAgIF9TX2J1ZmZlcl9zaXplKCkgeyByZXR1cm4gX19kZXF1ZV9idWZfc2l6ZShf X2J1ZnNpeiwgc2l6ZW9mKF9UcCkpOyB9CgoKCgoKCgoKCiAgdHlwZWRlZiByYW5kb21fYWNjZXNz X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl OwogIHR5cGVkZWYgX1B0ciBwb2ludGVyOwogIHR5cGVkZWYgX1JlZiByZWZlcmVuY2U7CiAgdHlw ZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlw ZTsKICB0eXBlZGVmIF9UcCoqIF9NYXBfcG9pbnRlcjsKCiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0 b3IgX1NlbGY7CgogIF9UcCogX01fY3VyOwogIF9UcCogX01fZmlyc3Q7CiAgX1RwKiBfTV9sYXN0 OwogIF9NYXBfcG9pbnRlciBfTV9ub2RlOwoKICBfRGVxdWVfaXRlcmF0b3IoX1RwKiBfX3gsIF9N YXBfcG9pbnRlciBfX3kpIAogICAgOiBfTV9jdXIoX194KSwgX01fZmlyc3QoKl9feSksCiAgICAg IF9NX2xhc3QoKl9feSArIF9TX2J1ZmZlcl9zaXplKCkpLCBfTV9ub2RlKF9feSkge30KICBfRGVx dWVfaXRlcmF0b3IoKSA6IF9NX2N1cigwKSwgX01fZmlyc3QoMCksIF9NX2xhc3QoMCksIF9NX25v ZGUoMCkge30KICBfRGVxdWVfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9feCkKICAgIDogX01f Y3VyKF9feC5fTV9jdXIpLCBfTV9maXJzdChfX3guX01fZmlyc3QpLCAKICAgICAgX01fbGFzdChf X3guX01fbGFzdCksIF9NX25vZGUoX194Ll9NX25vZGUpIHt9CgogIHJlZmVyZW5jZSBvcGVyYXRv ciooKSBjb25zdCB7IHJldHVybiAqX01fY3VyOyB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNv bnN0IHsgcmV0dXJuIF9NX2N1cjsgfQoKCiAgZGlmZmVyZW5jZV90eXBlIG9wZXJhdG9yLShjb25z dCBfU2VsZiYgX194KSBjb25zdCB7CiAgICByZXR1cm4gZGlmZmVyZW5jZV90eXBlKF9TX2J1ZmZl cl9zaXplKCkpICogKF9NX25vZGUgLSBfX3guX01fbm9kZSAtIDEpICsKICAgICAgKF9NX2N1ciAt IF9NX2ZpcnN0KSArIChfX3guX01fbGFzdCAtIF9feC5fTV9jdXIpOwogIH0KCiAgX1NlbGYmIG9w ZXJhdG9yKysoKSB7CiAgICArK19NX2N1cjsKICAgIGlmIChfTV9jdXIgPT0gX01fbGFzdCkgewog ICAgICBfTV9zZXRfbm9kZShfTV9ub2RlICsgMSk7CiAgICAgIF9NX2N1ciA9IF9NX2ZpcnN0Owog ICAgfQogICAgcmV0dXJuICp0aGlzOyAKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpICB7CiAg ICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKysqdGhpczsKICAgIHJldHVybiBfX3RtcDsKICB9 CgogIF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgaWYgKF9NX2N1ciA9PSBfTV9maXJzdCkgewog ICAgICBfTV9zZXRfbm9kZShfTV9ub2RlIC0gMSk7CiAgICAgIF9NX2N1ciA9IF9NX2xhc3Q7CiAg ICB9CiAgICAtLV9NX2N1cjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3It LShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLSp0aGlzOwogICAgcmV0dXJu IF9fdG1wOwogIH0KCiAgX1NlbGYmIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBlIF9fbikKICB7 CiAgICBkaWZmZXJlbmNlX3R5cGUgX19vZmZzZXQgPSBfX24gKyAoX01fY3VyIC0gX01fZmlyc3Qp OwogICAgaWYgKF9fb2Zmc2V0ID49IDAgJiYgX19vZmZzZXQgPCBkaWZmZXJlbmNlX3R5cGUoX1Nf YnVmZmVyX3NpemUoKSkpCiAgICAgIF9NX2N1ciArPSBfX247CiAgICBlbHNlIHsKICAgICAgZGlm ZmVyZW5jZV90eXBlIF9fbm9kZV9vZmZzZXQgPQogICAgICAgIF9fb2Zmc2V0ID4gMCA/IF9fb2Zm c2V0IC8gZGlmZmVyZW5jZV90eXBlKF9TX2J1ZmZlcl9zaXplKCkpCiAgICAgICAgICAgICAgICAg ICA6IC1kaWZmZXJlbmNlX3R5cGUoKC1fX29mZnNldCAtIDEpIC8gX1NfYnVmZmVyX3NpemUoKSkg LSAxOwogICAgICBfTV9zZXRfbm9kZShfTV9ub2RlICsgX19ub2RlX29mZnNldCk7CiAgICAgIF9N X2N1ciA9IF9NX2ZpcnN0ICsgCiAgICAgICAgKF9fb2Zmc2V0IC0gX19ub2RlX29mZnNldCAqIGRp ZmZlcmVuY2VfdHlwZShfU19idWZmZXJfc2l6ZSgpKSk7CiAgICB9CiAgICByZXR1cm4gKnRoaXM7 CiAgfQoKICBfU2VsZiBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKICB7CiAg ICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9fbjsKICB9CgogIF9T ZWxmJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsgcmV0dXJuICp0aGlzICs9IC1f X247IH0KIAogIF9TZWxmIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAg ICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9fbjsKICB9CgogIHJl ZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICoo KnRoaXMgKyBfX24pOyB9CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfU2VsZiYgX194KSBjb25z dCB7IHJldHVybiBfTV9jdXIgPT0gX194Ll9NX2N1cjsgfQogIGJvb2wgb3BlcmF0b3IhPShjb25z dCBfU2VsZiYgX194KSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IF9feCk7IH0KICBib29sIG9w ZXJhdG9yPChjb25zdCBfU2VsZiYgX194KSBjb25zdCB7CiAgICByZXR1cm4gKF9NX25vZGUgPT0g X194Ll9NX25vZGUpID8gCiAgICAgIChfTV9jdXIgPCBfX3guX01fY3VyKSA6IChfTV9ub2RlIDwg X194Ll9NX25vZGUpOwogIH0KCiAgdm9pZCBfTV9zZXRfbm9kZShfTWFwX3BvaW50ZXIgX19uZXdf bm9kZSkgewogICAgX01fbm9kZSA9IF9fbmV3X25vZGU7CiAgICBfTV9maXJzdCA9ICpfX25ld19u b2RlOwogICAgX01fbGFzdCA9IF9NX2ZpcnN0ICsgZGlmZmVyZW5jZV90eXBlKF9TX2J1ZmZlcl9z aXplKCkpOwogIH0KfTsKCiMgMjYyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9kZXF1ZS5oIiAz CgoKIAogCiAKIAogCgojIDM2NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29s YXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9zdGxfZGVxdWUuaCIgMwoK CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYywgc2l6ZV90IF9fYnVmc2l6PgpjbGFz cyBfRGVxdWVfYmFzZSB7CnB1YmxpYzoKCiAgdHlwZWRlZiBfRGVxdWVfaXRlcmF0b3I8X1RwLF9U cCYsX1RwKixfX2J1ZnNpej4gICAgICAgICAgICAgIGl0ZXJhdG9yOwogIHR5cGVkZWYgX0RlcXVl X2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9UcCosIF9fYnVmc2l6PiBjb25zdF9pdGVy YXRvcjsKCgoKCgogIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90 eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9Cgog IF9EZXF1ZV9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiwgc2l6ZV90IF9fbnVtX2VsZW1lbnRz KQogICAgOiBfTV9tYXAoMCksIF9NX21hcF9zaXplKDApLCAgX01fc3RhcnQoKSwgX01fZmluaXNo KCkgewogICAgX01faW5pdGlhbGl6ZV9tYXAoX19udW1fZWxlbWVudHMpOwogIH0KICBfRGVxdWVf YmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX21hcCgwKSwgX01fbWFwX3NpemUo MCksICBfTV9zdGFydCgpLCBfTV9maW5pc2goKSB7fQogIH5fRGVxdWVfYmFzZSgpOyAgICAKCnBy b3RlY3RlZDoKICB2b2lkIF9NX2luaXRpYWxpemVfbWFwKHNpemVfdCk7CiAgdm9pZCBfTV9jcmVh dGVfbm9kZXMoX1RwKiogX19uc3RhcnQsIF9UcCoqIF9fbmZpbmlzaCk7CiAgdm9pZCBfTV9kZXN0 cm95X25vZGVzKF9UcCoqIF9fbnN0YXJ0LCBfVHAqKiBfX25maW5pc2gpOwogIGVudW0geyBfU19p bml0aWFsX21hcF9zaXplID0gOCB9OwoKcHJvdGVjdGVkOgogIF9UcCoqIF9NX21hcDsKICBzaXpl X3QgX01fbWFwX3NpemU7ICAKICBpdGVyYXRvciBfTV9zdGFydDsKICBpdGVyYXRvciBfTV9maW5p c2g7CgogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX0FsbG9jPiAgX05vZGVfYWxsb2NfdHlw ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAqLCBfQWxsb2M+IF9NYXBfYWxsb2NfdHlwZTsK CiAgX1RwKiBfTV9hbGxvY2F0ZV9ub2RlKCkKICAgIHsgcmV0dXJuIF9Ob2RlX2FsbG9jX3R5cGU6 OmFsbG9jYXRlKF9fZGVxdWVfYnVmX3NpemUoX19idWZzaXosIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoX1RwKSkpOyB9CiAg dm9pZCBfTV9kZWFsbG9jYXRlX25vZGUoX1RwKiBfX3ApCiAgICB7IF9Ob2RlX2FsbG9jX3R5cGU6 OmRlYWxsb2NhdGUoX19wLCBfX2RlcXVlX2J1Zl9zaXplKF9fYnVmc2l6LCAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKF9UcCkp KTsgfQogIF9UcCoqIF9NX2FsbG9jYXRlX21hcChzaXplX3QgX19uKSAKICAgIHsgcmV0dXJuIF9N YXBfYWxsb2NfdHlwZTo6YWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZV9tYXAo X1RwKiogX19wLCBzaXplX3QgX19uKSAKICAgIHsgX01hcF9hbGxvY190eXBlOjpkZWFsbG9jYXRl KF9fcCwgX19uKTsgfQp9OwoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2Ms IHNpemVfdCBfX2J1ZnNpej4KX0RlcXVlX2Jhc2U8X1RwLF9BbGxvYyxfX2J1ZnNpej46On5fRGVx dWVfYmFzZSgpIHsKICBpZiAoX01fbWFwKSB7CiAgICBfTV9kZXN0cm95X25vZGVzKF9NX3N0YXJ0 Ll9NX25vZGUsIF9NX2ZpbmlzaC5fTV9ub2RlICsgMSk7CiAgICBfTV9kZWFsbG9jYXRlX21hcChf TV9tYXAsIF9NX21hcF9zaXplKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B bGxvYywgc2l6ZV90IF9fYnVmc2l6Pgp2b2lkCl9EZXF1ZV9iYXNlPF9UcCxfQWxsb2MsX19idWZz aXo+OjpfTV9pbml0aWFsaXplX21hcChzaXplX3QgX19udW1fZWxlbWVudHMpCnsKICBzaXplX3Qg X19udW1fbm9kZXMgPSAKICAgIF9fbnVtX2VsZW1lbnRzIC8gX19kZXF1ZV9idWZfc2l6ZShfX2J1 ZnNpeiwgc2l6ZW9mKF9UcCkpICsgMTsKCiAgX01fbWFwX3NpemUgPSBtYXgoKHNpemVfdCkgX1Nf aW5pdGlhbF9tYXBfc2l6ZSwgX19udW1fbm9kZXMgKyAyKTsKICBfTV9tYXAgPSBfTV9hbGxvY2F0 ZV9tYXAoX01fbWFwX3NpemUpOwoKICBfVHAqKiBfX25zdGFydCA9IF9NX21hcCArIChfTV9tYXBf c2l6ZSAtIF9fbnVtX25vZGVzKSAvIDI7CiAgX1RwKiogX19uZmluaXNoID0gX19uc3RhcnQgKyBf X251bV9ub2RlczsKICAgIAogIHRyeSAgewogICAgX01fY3JlYXRlX25vZGVzKF9fbnN0YXJ0LCBf X25maW5pc2gpOwogIH0KICBjYXRjaCguLi4pIHsgIChfTV9kZWFsbG9jYXRlX21hcChfTV9tYXAs IF9NX21hcF9zaXplKSwgCiAgICAgICAgICAgICAgICBfTV9tYXAgPSAwLCBfTV9tYXBfc2l6ZSA9 IDApIDsgdGhyb3c7IH0gOwogIF9NX3N0YXJ0Ll9NX3NldF9ub2RlKF9fbnN0YXJ0KTsKICBfTV9m aW5pc2guX01fc2V0X25vZGUoX19uZmluaXNoIC0gMSk7CiAgX01fc3RhcnQuX01fY3VyID0gX01f c3RhcnQuX01fZmlyc3Q7CiAgX01fZmluaXNoLl9NX2N1ciA9IF9NX2ZpbmlzaC5fTV9maXJzdCAr CiAgICAgICAgICAgICAgIF9fbnVtX2VsZW1lbnRzICUgX19kZXF1ZV9idWZfc2l6ZShfX2J1ZnNp eiwgc2l6ZW9mKF9UcCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MsIHNp emVfdCBfX2J1ZnNpej4Kdm9pZApfRGVxdWVfYmFzZTxfVHAsX0FsbG9jLF9fYnVmc2l6Pjo6X01f Y3JlYXRlX25vZGVzKF9UcCoqIF9fbnN0YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9UcCoqIF9fbmZpbmlzaCkKewogIF9UcCoqIF9fY3VyOwog IHRyeSAgewogICAgZm9yIChfX2N1ciA9IF9fbnN0YXJ0OyBfX2N1ciA8IF9fbmZpbmlzaDsgKytf X2N1cikKICAgICAgKl9fY3VyID0gX01fYWxsb2NhdGVfbm9kZSgpOwogIH0KICBjYXRjaCguLi4p IHsgIF9NX2Rlc3Ryb3lfbm9kZXMoX19uc3RhcnQsIF9fY3VyKSA7IHRocm93OyB9IDsKfQoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jLCBzaXplX3QgX19idWZzaXo+CnZvaWQgCl9E ZXF1ZV9iYXNlPF9UcCxfQWxsb2MsX19idWZzaXo+OjpfTV9kZXN0cm95X25vZGVzKF9UcCoqIF9f bnN0YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfVHAqKiBfX25maW5pc2gpCnsKICBmb3IgKF9UcCoqIF9fbiA9IF9fbnN0YXJ0OyBfX24gPCBf X25maW5pc2g7ICsrX19uKQogICAgX01fZGVhbGxvY2F0ZV9ub2RlKCpfX24pOwp9CgogCiAKIAp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvYyAsIAogICAgICAgICAgc2l6 ZV90IF9fYnVmc2l6ID0gMD4gCmNsYXNzIGRlcXVlIDogcHJvdGVjdGVkIF9EZXF1ZV9iYXNlPF9U cCwgX0FsbG9jLCBfX2J1ZnNpej4gewogIHR5cGVkZWYgX0RlcXVlX2Jhc2U8X1RwLCBfQWxsb2Ms IF9fYnVmc2l6PiBfQmFzZTsKcHVibGljOiAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgdHlw ZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlw ZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFsdWVfdHlw ZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNl OwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl bmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9j YXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy biBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgpwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAg ICAgICAKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjppdGVyYXRvciAgICAgICBpdGVyYXRvcjsK ICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsK CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJz ZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2Vf aXRlcmF0b3I7CgoKCgoKCgoKcHJvdGVjdGVkOiAgICAgICAgICAgICAgICAgICAgICAgCiAgdHlw ZWRlZiBwb2ludGVyKiBfTWFwX3BvaW50ZXI7CiAgc3RhdGljIHNpemVfdCBfU19idWZmZXJfc2l6 ZSgpCiAgICB7IHJldHVybiBfX2RlcXVlX2J1Zl9zaXplKF9fYnVmc2l6LCBzaXplb2YoX1RwKSk7 IH0KCnByb3RlY3RlZDoKIyA1MjggIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNv bGFyaXMyLjgvMi45NS4zLy4uLy4uLy4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2RlcXVlLmgiIDMK CgpwdWJsaWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAKICBpdGVyYXRvciBiZWdpbigpIHsg cmV0dXJuIF9NX3N0YXJ0OyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fZmluaXNoOyB9 CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9zdGFydDsgfQogIGNv bnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQoKICByZXZlcnNl X2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoX01fZmluaXNoKTsg fQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoX01f c3RhcnQpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCAKICAgIHsg cmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoX01fZmluaXNoKTsgfQogIGNvbnN0X3JldmVy c2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IAogICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVy YXRvcihfTV9zdGFydCk7IH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikK ICAgIHsgcmV0dXJuIF9NX3N0YXJ0W2RpZmZlcmVuY2VfdHlwZShfX24pXTsgfQogIGNvbnN0X3Jl ZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNvbnN0IAogICAgeyByZXR1cm4gX01f c3RhcnRbZGlmZmVyZW5jZV90eXBlKF9fbildOyB9CgogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0 dXJuICpfTV9zdGFydDsgfQogIHJlZmVyZW5jZSBiYWNrKCkgewogICAgaXRlcmF0b3IgX190bXAg PSBfTV9maW5pc2g7CiAgICAtLV9fdG1wOwogICAgcmV0dXJuICpfX3RtcDsKICB9CiAgY29uc3Rf cmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyByZXR1cm4gKl9NX3N0YXJ0OyB9CiAgY29uc3RfcmVm ZXJlbmNlIGJhY2soKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9IF9NX2Zpbmlz aDsKICAgIC0tX190bXA7CiAgICByZXR1cm4gKl9fdG1wOwogIH0KCiAgc2l6ZV90eXBlIHNpemUo KSBjb25zdCB7IHJldHVybiBfTV9maW5pc2ggLSBfTV9zdGFydDs7IH0KICBzaXplX3R5cGUgbWF4 X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAgYm9vbCBlbXB0eSgpIGNv bnN0IHsgcmV0dXJuIF9NX2ZpbmlzaCA9PSBfTV9zdGFydDsgfQoKcHVibGljOiAgICAgICAgICAg ICAgICAgICAgICAgICAgCiAgZXhwbGljaXQgZGVxdWUoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f YSA9IGFsbG9jYXRvcl90eXBlKCkpIAogICAgOiBfQmFzZShfX2EsIDApIHt9CiAgZGVxdWUoY29u c3QgZGVxdWUmIF9feCkgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpLCBfX3guc2l6ZSgpKSAK ICAgIHsgdW5pbml0aWFsaXplZF9jb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9NX3N0YXJ0 KTsgfQogIGRlcXVlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsdWUsCiAg ICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpIDogX0Jh c2UoX19hLCBfX24pCiAgICB7IF9NX2ZpbGxfaW5pdGlhbGl6ZShfX3ZhbHVlKTsgfQogIGV4cGxp Y2l0IGRlcXVlKHNpemVfdHlwZSBfX24pIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSwgX19uKQog ICAgeyBfTV9maWxsX2luaXRpYWxpemUodmFsdWVfdHlwZSgpKTsgfQoKCgogICAKICB0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgZGVxdWUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwg X0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2Eg PSBhbGxvY2F0b3JfdHlwZSgpKSA6IF9CYXNlKF9fYSkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBf SXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9p bml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAg dGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChf SW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwgX190cnVlX3R5cGUpIHsKICAgIF9NX2luaXRpYWxp emVfbWFwKF9fbik7CiAgICBfTV9maWxsX2luaXRpYWxpemUoX194KTsKICB9CgogIHRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyPgogIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19s YXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKICB9CgojIDYwOSAiL3Vzci9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4v aW5jbHVkZS9nKystMy9zdGxfZGVxdWUuaCIgMwoKCiAgfmRlcXVlKCkgeyBkZXN0cm95KF9NX3N0 YXJ0LCBfTV9maW5pc2gpOyB9CgogIGRlcXVlJiBvcGVyYXRvcj0gKGNvbnN0IGRlcXVlJiBfX3gp IHsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKTsKICAgIGlmICgmX194ICE9IHRo aXMpIHsKICAgICAgaWYgKF9fbGVuID49IF9feC5zaXplKCkpCiAgICAgICAgZXJhc2UoY29weShf X3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCksIF9NX2ZpbmlzaCk7CiAgICAgIGVsc2Ug ewogICAgICAgIGNvbnN0X2l0ZXJhdG9yIF9fbWlkID0gX194LmJlZ2luKCkgKyBkaWZmZXJlbmNl X3R5cGUoX19sZW4pOwogICAgICAgIGNvcHkoX194LmJlZ2luKCksIF9fbWlkLCBfTV9zdGFydCk7 CiAgICAgICAgaW5zZXJ0KF9NX2ZpbmlzaCwgX19taWQsIF9feC5lbmQoKSk7CiAgICAgIH0KICAg IH0KICAgIHJldHVybiAqdGhpczsKICB9ICAgICAgICAKCiAgdm9pZCBzd2FwKGRlcXVlJiBfX3gp IHsKICAgICA6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFydCk7CiAgICAgOjpzd2FwKF9NX2Zp bmlzaCwgX194Ll9NX2ZpbmlzaCk7CiAgICAgOjpzd2FwKF9NX21hcCwgX194Ll9NX21hcCk7CiAg ICAgOjpzd2FwKF9NX21hcF9zaXplLCBfX3guX01fbWFwX3NpemUpOwogIH0KCnB1YmxpYzogCiAg IAogICAKICAgCiAgIAoKICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9f dmFsKSB7CiAgICBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICAgIGZpbGwoYmVnaW4oKSwgZW5kKCks IF9fdmFsKTsKICAgICAgaW5zZXJ0KGVuZCgpLCBfX24gLSBzaXplKCksIF9fdmFsKTsKICAgIH0K ICAgIGVsc2UgewogICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQoKSk7CiAgICAgIGZpbGwo YmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgIH0KICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPgogIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1 dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5w dXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9hc3NpZ25fZGlzcGF0Y2go X19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKcHJpdmF0ZTogICAgICAgICAgICAg ICAgICAgICAgICAgCgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2Fzc2ln bl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAg IHsgYXNzaWduKChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192YWwpOyB9CgogIHRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVy YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgX19mYWxzZV90eXBlKSB7CiAgICBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwg X19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl cmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBf TV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICBz aXplX3R5cGUgX19sZW4gPSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7 CiAgICBpZiAoX19sZW4gPiBzaXplKCkpIHsKICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9 IF9fZmlyc3Q7CiAgICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICAgIGNvcHkoX19maXJz dCwgX19taWQsIGJlZ2luKCkpOwogICAgICBpbnNlcnQoZW5kKCksIF9fbWlkLCBfX2xhc3QpOwog ICAgfQogICAgZWxzZQogICAgICBlcmFzZShjb3B5KF9fZmlyc3QsIF9fbGFzdCwgYmVnaW4oKSks IGVuZCgpKTsKICB9CgoKCnB1YmxpYzogICAgICAgICAgICAgICAgICAgICAgICAgIAogIAogIHZv aWQgcHVzaF9iYWNrKGNvbnN0IHZhbHVlX3R5cGUmIF9fdCkgewogICAgaWYgKF9NX2ZpbmlzaC5f TV9jdXIgIT0gX01fZmluaXNoLl9NX2xhc3QgLSAxKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5p c2guX01fY3VyLCBfX3QpOwogICAgICArK19NX2ZpbmlzaC5fTV9jdXI7CiAgICB9CiAgICBlbHNl CiAgICAgIF9NX3B1c2hfYmFja19hdXgoX190KTsKICB9CgogIHZvaWQgcHVzaF9iYWNrKCkgewog ICAgaWYgKF9NX2ZpbmlzaC5fTV9jdXIgIT0gX01fZmluaXNoLl9NX2xhc3QgLSAxKSB7CiAgICAg IGNvbnN0cnVjdChfTV9maW5pc2guX01fY3VyKTsKICAgICAgKytfTV9maW5pc2guX01fY3VyOwog ICAgfQogICAgZWxzZQogICAgICBfTV9wdXNoX2JhY2tfYXV4KCk7CiAgfQoKICB2b2lkIHB1c2hf ZnJvbnQoY29uc3QgdmFsdWVfdHlwZSYgX190KSB7CiAgICBpZiAoX01fc3RhcnQuX01fY3VyICE9 IF9NX3N0YXJ0Ll9NX2ZpcnN0KSB7CiAgICAgIGNvbnN0cnVjdChfTV9zdGFydC5fTV9jdXIgLSAx LCBfX3QpOwogICAgICAtLV9NX3N0YXJ0Ll9NX2N1cjsKICAgIH0KICAgIGVsc2UKICAgICAgX01f cHVzaF9mcm9udF9hdXgoX190KTsKICB9CgogIHZvaWQgcHVzaF9mcm9udCgpIHsKICAgIGlmIChf TV9zdGFydC5fTV9jdXIgIT0gX01fc3RhcnQuX01fZmlyc3QpIHsKICAgICAgY29uc3RydWN0KF9N X3N0YXJ0Ll9NX2N1ciAtIDEpOwogICAgICAtLV9NX3N0YXJ0Ll9NX2N1cjsKICAgIH0KICAgIGVs c2UKICAgICAgX01fcHVzaF9mcm9udF9hdXgoKTsKICB9CgoKICB2b2lkIHBvcF9iYWNrKCkgewog ICAgaWYgKF9NX2ZpbmlzaC5fTV9jdXIgIT0gX01fZmluaXNoLl9NX2ZpcnN0KSB7CiAgICAgIC0t X01fZmluaXNoLl9NX2N1cjsKICAgICAgZGVzdHJveShfTV9maW5pc2guX01fY3VyKTsKICAgIH0K ICAgIGVsc2UKICAgICAgX01fcG9wX2JhY2tfYXV4KCk7CiAgfQoKICB2b2lkIHBvcF9mcm9udCgp IHsKICAgIGlmIChfTV9zdGFydC5fTV9jdXIgIT0gX01fc3RhcnQuX01fbGFzdCAtIDEpIHsKICAg ICAgZGVzdHJveShfTV9zdGFydC5fTV9jdXIpOwogICAgICArK19NX3N0YXJ0Ll9NX2N1cjsKICAg IH0KICAgIGVsc2UgCiAgICAgIF9NX3BvcF9mcm9udF9hdXgoKTsKICB9CgpwdWJsaWM6ICAgICAg ICAgICAgICAgICAgICAgICAgICAKCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHBvc2l0aW9u LCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAgIGlmIChwb3NpdGlvbi5fTV9jdXIgPT0gX01f c3RhcnQuX01fY3VyKSB7CiAgICAgIHB1c2hfZnJvbnQoX194KTsKICAgICAgcmV0dXJuIF9NX3N0 YXJ0OwogICAgfQogICAgZWxzZSBpZiAocG9zaXRpb24uX01fY3VyID09IF9NX2ZpbmlzaC5fTV9j dXIpIHsKICAgICAgcHVzaF9iYWNrKF9feCk7CiAgICAgIGl0ZXJhdG9yIF9fdG1wID0gX01fZmlu aXNoOwogICAgICAtLV9fdG1wOwogICAgICByZXR1cm4gX190bXA7CiAgICB9CiAgICBlbHNlIHsK ICAgICAgcmV0dXJuIF9NX2luc2VydF9hdXgocG9zaXRpb24sIF9feCk7CiAgICB9CiAgfQoKICBp dGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgIHsgcmV0dXJuIGluc2VydChf X3Bvc2l0aW9uLCB2YWx1ZV90eXBlKCkpOyB9CgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9z LCBzaXplX3R5cGUgX19uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOyAKCgoKICAgCiAgdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVk ZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVn cmFsOwogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRl Z3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2luc2Vy dF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3gsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAgIGluc2VydChfX3Bvcywg KHNpemVfdHlwZSkgX19uLCAodmFsdWVfdHlwZSkgX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3Bv cywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBl KSB7CiAgICBpbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29y eSggX19maXJzdCApICk7CiAgfQoKCgoKCgoKCgoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19u ZXdfc2l6ZSwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19s ZW4gPSBzaXplKCk7CiAgICBpZiAoX19uZXdfc2l6ZSA8IF9fbGVuKSAKICAgICAgZXJhc2UoX01f c3RhcnQgKyBfX25ld19zaXplLCBfTV9maW5pc2gpOwogICAgZWxzZQogICAgICBpbnNlcnQoX01f ZmluaXNoLCBfX25ld19zaXplIC0gX19sZW4sIF9feCk7CiAgfQoKICB2b2lkIHJlc2l6ZShzaXpl X3R5cGUgbmV3X3NpemUpIHsgcmVzaXplKG5ld19zaXplLCB2YWx1ZV90eXBlKCkpOyB9CgpwdWJs aWM6ICAgICAgICAgICAgICAgICAgICAgICAgICAKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBf X3BvcykgewogICAgaXRlcmF0b3IgX19uZXh0ID0gX19wb3M7CiAgICArK19fbmV4dDsKICAgIGRp ZmZlcmVuY2VfdHlwZSBfX2luZGV4ID0gX19wb3MgLSBfTV9zdGFydDsKICAgIGlmIChzdGF0aWNf Y2FzdDxzaXplX3R5cGU+KF9faW5kZXgpIDwgKHNpemUoKSA+PiAxKSkgewogICAgICBjb3B5X2Jh Y2t3YXJkKF9NX3N0YXJ0LCBfX3BvcywgX19uZXh0KTsKICAgICAgcG9wX2Zyb250KCk7CiAgICB9 CiAgICBlbHNlIHsKICAgICAgY29weShfX25leHQsIF9NX2ZpbmlzaCwgX19wb3MpOwogICAgICBw b3BfYmFjaygpOwogICAgfQogICAgcmV0dXJuIF9NX3N0YXJ0ICsgX19pbmRleDsKICB9CgogIGl0 ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7CiAgdm9pZCBj bGVhcigpOyAKCnByb3RlY3RlZDogICAgICAgICAgICAgICAgICAgICAgICAgCgogIHZvaWQgX01f ZmlsbF9pbml0aWFsaXplKGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsdWUpOwoKCgogIHRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0 SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRvciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgZm9y d2FyZF9pdGVyYXRvcl90YWcpOwoKCgpwcm90ZWN0ZWQ6ICAgICAgICAgICAgICAgICAgICAgICAg IAoKICB2b2lkIF9NX3B1c2hfYmFja19hdXgoY29uc3QgdmFsdWVfdHlwZSYpOwogIHZvaWQgX01f cHVzaF9iYWNrX2F1eCgpOwogIHZvaWQgX01fcHVzaF9mcm9udF9hdXgoY29uc3QgdmFsdWVfdHlw ZSYpOwogIHZvaWQgX01fcHVzaF9mcm9udF9hdXgoKTsKICB2b2lkIF9NX3BvcF9iYWNrX2F1eCgp OwogIHZvaWQgX01fcG9wX2Zyb250X2F1eCgpOwoKcHJvdGVjdGVkOiAgICAgICAgICAgICAgICAg ICAgICAgICAKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNl cnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y IF9fbGFzdCwKICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKICB0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywKICAg ICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCgoKICBpdGVyYXRvciBf TV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwogIGl0 ZXJhdG9yIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3MpOwogIHZvaWQgX01faW5zZXJ0X2F1 eChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsK CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9h dXgoaXRlcmF0b3IgX19wb3MsIAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9y IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBz aXplX3R5cGUgX19uKTsKCiMgODkzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9kZXF1ZS5oIiAz CgoKICBpdGVyYXRvciBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2Zyb250KHNpemVfdHlwZSBfX24p IHsKICAgIHNpemVfdHlwZSBfX3ZhY2FuY2llcyA9IF9NX3N0YXJ0Ll9NX2N1ciAtIF9NX3N0YXJ0 Ll9NX2ZpcnN0OwogICAgaWYgKF9fbiA+IF9fdmFjYW5jaWVzKSAKICAgICAgX01fbmV3X2VsZW1l bnRzX2F0X2Zyb250KF9fbiAtIF9fdmFjYW5jaWVzKTsKICAgIHJldHVybiBfTV9zdGFydCAtIGRp ZmZlcmVuY2VfdHlwZShfX24pOwogIH0KCiAgaXRlcmF0b3IgX01fcmVzZXJ2ZV9lbGVtZW50c19h dF9iYWNrKHNpemVfdHlwZSBfX24pIHsKICAgIHNpemVfdHlwZSBfX3ZhY2FuY2llcyA9IChfTV9m aW5pc2guX01fbGFzdCAtIF9NX2ZpbmlzaC5fTV9jdXIpIC0gMTsKICAgIGlmIChfX24gPiBfX3Zh Y2FuY2llcykKICAgICAgX01fbmV3X2VsZW1lbnRzX2F0X2JhY2soX19uIC0gX192YWNhbmNpZXMp OwogICAgcmV0dXJuIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pOwogIH0KCiAgdm9p ZCBfTV9uZXdfZWxlbWVudHNfYXRfZnJvbnQoc2l6ZV90eXBlIF9fbmV3X2VsZW1lbnRzKTsKICB2 b2lkIF9NX25ld19lbGVtZW50c19hdF9iYWNrKHNpemVfdHlwZSBfX25ld19lbGVtZW50cyk7Cgpw cm90ZWN0ZWQ6ICAgICAgICAgICAgICAgICAgICAgICAKCiAgIAogICAKICAgCgogIHZvaWQgX01f cmVzZXJ2ZV9tYXBfYXRfYmFjayAoc2l6ZV90eXBlIF9fbm9kZXNfdG9fYWRkID0gMSkgewogICAg aWYgKF9fbm9kZXNfdG9fYWRkICsgMSA+IF9NX21hcF9zaXplIC0gKF9NX2ZpbmlzaC5fTV9ub2Rl IC0gX01fbWFwKSkKICAgICAgX01fcmVhbGxvY2F0ZV9tYXAoX19ub2Rlc190b19hZGQsIGZhbHNl KTsKICB9CgogIHZvaWQgX01fcmVzZXJ2ZV9tYXBfYXRfZnJvbnQgKHNpemVfdHlwZSBfX25vZGVz X3RvX2FkZCA9IDEpIHsKICAgIGlmIChfX25vZGVzX3RvX2FkZCA+IHNpemVfdHlwZShfTV9zdGFy dC5fTV9ub2RlIC0gX01fbWFwKSkKICAgICAgX01fcmVhbGxvY2F0ZV9tYXAoX19ub2Rlc190b19h ZGQsIHRydWUpOwogIH0KCiAgdm9pZCBfTV9yZWFsbG9jYXRlX21hcChzaXplX3R5cGUgX19ub2Rl c190b19hZGQsIGJvb2wgX19hZGRfYXRfZnJvbnQpOwogCiMgOTQxICIvdXNyL2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr Ky0zL3N0bF9kZXF1ZS5oIiAzCgp9OwoKIAoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2MsIHNpemVfdCBfX2J1ZnNpemU+CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lk IGRlcXVlPF9UcCwgX0FsbG9jLCBfX2J1ZnNpemU+CiAgOjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIGl0 ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9f Y3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAgICAqX19jdXIgPSAqX19maXJzdDsK ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBlcmFzZShfX2N1ciwgZW5kKCkpOwogIGVsc2UK ICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQWxsb2MsIHNpemVfdCBfX2J1ZnNpemU+CnZvaWQgCmRlcXVlPF9UcCwgX0Fs bG9jLCBfX2J1ZnNpemU+OjppbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgdmFsdWVfdHlwZSYgX194 KQp7CiAgaWYgKF9fcG9zLl9NX2N1ciA9PSBfTV9zdGFydC5fTV9jdXIpIHsKICAgIGl0ZXJhdG9y IF9fbmV3X3N0YXJ0ID0gX01fcmVzZXJ2ZV9lbGVtZW50c19hdF9mcm9udChfX24pOwogICAgdW5p bml0aWFsaXplZF9maWxsKF9fbmV3X3N0YXJ0LCBfTV9zdGFydCwgX194KTsKICAgIF9NX3N0YXJ0 ID0gX19uZXdfc3RhcnQ7CiAgfQogIGVsc2UgaWYgKF9fcG9zLl9NX2N1ciA9PSBfTV9maW5pc2gu X01fY3VyKSB7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfTV9yZXNlcnZlX2VsZW1lbnRz X2F0X2JhY2soX19uKTsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfTV9maW5pc2gsIF9fbmV3X2Zp bmlzaCwgX194KTsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICB9CiAgZWxzZSAKICAg IF9NX2luc2VydF9hdXgoX19wb3MsIF9fbiwgX194KTsKfQoKIyAxMDM4ICIvdXNyL2xvY2FsL2xp Yi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRl L2crKy0zL3N0bF9kZXF1ZS5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j LCBzaXplX3QgX19idWZzaXplPgpkZXF1ZTxfVHAsX0FsbG9jLF9fYnVmc2l6ZT46Oml0ZXJhdG9y IApkZXF1ZTxfVHAsX0FsbG9jLF9fYnVmc2l6ZT46OmVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0 ZXJhdG9yIF9fbGFzdCkKewogIGlmIChfX2ZpcnN0ID09IF9NX3N0YXJ0ICYmIF9fbGFzdCA9PSBf TV9maW5pc2gpIHsKICAgIGNsZWFyKCk7CiAgICByZXR1cm4gX01fZmluaXNoOwogIH0KICBlbHNl IHsKICAgIGRpZmZlcmVuY2VfdHlwZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgZGlmZmVy ZW5jZV90eXBlIF9fZWxlbXNfYmVmb3JlID0gX19maXJzdCAtIF9NX3N0YXJ0OwogICAgaWYgKHN0 YXRpY19jYXN0PHNpemVfdHlwZT4oX19lbGVtc19iZWZvcmUpIDwgKHNpemUoKSAtIF9fbikgLyAy KSB7CiAgICAgIGNvcHlfYmFja3dhcmQoX01fc3RhcnQsIF9fZmlyc3QsIF9fbGFzdCk7CiAgICAg IGl0ZXJhdG9yIF9fbmV3X3N0YXJ0ID0gX01fc3RhcnQgKyBfX247CiAgICAgIGRlc3Ryb3koX01f c3RhcnQsIF9fbmV3X3N0YXJ0KTsKICAgICAgX01fZGVzdHJveV9ub2RlcyhfX25ld19zdGFydC5f TV9ub2RlLCBfTV9zdGFydC5fTV9ub2RlKTsKICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsK ICAgIH0KICAgIGVsc2UgewogICAgICBjb3B5KF9fbGFzdCwgX01fZmluaXNoLCBfX2ZpcnN0KTsK ICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoID0gX01fZmluaXNoIC0gX19uOwogICAgICBkZXN0 cm95KF9fbmV3X2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgX01fZGVzdHJveV9ub2RlcyhfX25l d19maW5pc2guX01fbm9kZSArIDEsIF9NX2ZpbmlzaC5fTV9ub2RlICsgMSk7CiAgICAgIF9NX2Zp bmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIH0KICAgIHJldHVybiBfTV9zdGFydCArIF9fZWxlbXNf YmVmb3JlOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jLCBzaXplX3Qg X19idWZzaXplPgp2b2lkIGRlcXVlPF9UcCxfQWxsb2MsX19idWZzaXplPjo6Y2xlYXIoKQp7CiAg Zm9yIChfTWFwX3BvaW50ZXIgX19ub2RlID0gX01fc3RhcnQuX01fbm9kZSArIDE7CiAgICAgICBf X25vZGUgPCBfTV9maW5pc2guX01fbm9kZTsKICAgICAgICsrX19ub2RlKSB7CiAgICBkZXN0cm95 KCpfX25vZGUsICpfX25vZGUgKyBfU19idWZmZXJfc2l6ZSgpKTsKICAgIF9NX2RlYWxsb2NhdGVf bm9kZSgqX19ub2RlKTsKICB9CgogIGlmIChfTV9zdGFydC5fTV9ub2RlICE9IF9NX2ZpbmlzaC5f TV9ub2RlKSB7CiAgICBkZXN0cm95KF9NX3N0YXJ0Ll9NX2N1ciwgX01fc3RhcnQuX01fbGFzdCk7 CiAgICBkZXN0cm95KF9NX2ZpbmlzaC5fTV9maXJzdCwgX01fZmluaXNoLl9NX2N1cik7CiAgICBf TV9kZWFsbG9jYXRlX25vZGUoX01fZmluaXNoLl9NX2ZpcnN0KTsKICB9CiAgZWxzZQogICAgZGVz dHJveShfTV9zdGFydC5fTV9jdXIsIF9NX2ZpbmlzaC5fTV9jdXIpOwoKICBfTV9maW5pc2ggPSBf TV9zdGFydDsKfQoKIAogCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYywgc2l6ZV90 IF9fYnVmc2l6ZT4Kdm9pZCAKZGVxdWU8X1RwLF9BbGxvYyxfX2J1ZnNpemU+OjpfTV9maWxsX2lu aXRpYWxpemUoY29uc3QgdmFsdWVfdHlwZSYgX192YWx1ZSkgewogIF9NYXBfcG9pbnRlciBfX2N1 cjsKICB0cnkgIHsKICAgIGZvciAoX19jdXIgPSBfTV9zdGFydC5fTV9ub2RlOyBfX2N1ciA8IF9N X2ZpbmlzaC5fTV9ub2RlOyArK19fY3VyKQogICAgICB1bmluaXRpYWxpemVkX2ZpbGwoKl9fY3Vy LCAqX19jdXIgKyBfU19idWZmZXJfc2l6ZSgpLCBfX3ZhbHVlKTsKICAgIHVuaW5pdGlhbGl6ZWRf ZmlsbChfTV9maW5pc2guX01fZmlyc3QsIF9NX2ZpbmlzaC5fTV9jdXIsIF9fdmFsdWUpOwogIH0K ICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX01fc3RhcnQsIGl0ZXJhdG9yKCpfX2N1ciwgX19jdXIp KSA7IHRocm93OyB9IDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MsIHNp emVfdCBfX2J1ZnNpemU+CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4Kdm9pZApkZXF1 ZTxfVHAsX0FsbG9jLF9fYnVmc2l6ZT46Ol9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0 b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIF9NX2luaXRpYWxpemVf bWFwKDApOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIHB1c2hf YmFjaygqX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYywgc2l6 ZV90IF9fYnVmc2l6ZT4KdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQKZGVx dWU8X1RwLF9BbGxvYyxfX2J1ZnNpemU+OjpfTV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRl cmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBzaXplX3R5 cGUgX19uID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgX01faW5pdGlh bGl6ZV9tYXAoX19uKTsKCiAgX01hcF9wb2ludGVyIF9fY3VyX25vZGU7CiAgdHJ5ICB7CiAgICBm b3IgKF9fY3VyX25vZGUgPSBfTV9zdGFydC5fTV9ub2RlOyAKICAgICAgICAgX19jdXJfbm9kZSA8 IF9NX2ZpbmlzaC5fTV9ub2RlOyAKCSArK19fY3VyX25vZGUpIHsKICAgICAgX0ZvcndhcmRJdGVy YXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgIGFkdmFuY2UoX19taWQsIF9TX2J1ZmZlcl9zaXpl KCkpOwogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19taWQsICpfX2N1cl9ub2Rl KTsKICAgICAgX19maXJzdCA9IF9fbWlkOwogICAgfQogICAgdW5pbml0aWFsaXplZF9jb3B5KF9f Zmlyc3QsIF9fbGFzdCwgX01fZmluaXNoLl9NX2ZpcnN0KTsKICB9CiAgY2F0Y2goLi4uKSB7ICBk ZXN0cm95KF9NX3N0YXJ0LCBpdGVyYXRvcigqX19jdXJfbm9kZSwgX19jdXJfbm9kZSkpIDsgdGhy b3c7IH0gOwp9CgoKCiAKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jLCBzaXplX3Qg X19idWZzaXplPgp2b2lkCmRlcXVlPF9UcCxfQWxsb2MsX19idWZzaXplPjo6X01fcHVzaF9iYWNr X2F1eChjb25zdCB2YWx1ZV90eXBlJiBfX3QpCnsKICB2YWx1ZV90eXBlIF9fdF9jb3B5ID0gX190 OwogIF9NX3Jlc2VydmVfbWFwX2F0X2JhY2soKTsKICAqKF9NX2ZpbmlzaC5fTV9ub2RlICsgMSkg PSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgdHJ5ICB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLl9N X2N1ciwgX190X2NvcHkpOwogICAgX01fZmluaXNoLl9NX3NldF9ub2RlKF9NX2ZpbmlzaC5fTV9u b2RlICsgMSk7CiAgICBfTV9maW5pc2guX01fY3VyID0gX01fZmluaXNoLl9NX2ZpcnN0OwogIH0K ICBjYXRjaCguLi4pIHsgIF9NX2RlYWxsb2NhdGVfbm9kZSgqKF9NX2ZpbmlzaC5fTV9ub2RlICsg MSkpIDsgdGhyb3c7IH0gOwp9CgogCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYywg c2l6ZV90IF9fYnVmc2l6ZT4Kdm9pZApkZXF1ZTxfVHAsX0FsbG9jLF9fYnVmc2l6ZT46Ol9NX3B1 c2hfYmFja19hdXgoKQp7CiAgX01fcmVzZXJ2ZV9tYXBfYXRfYmFjaygpOwogICooX01fZmluaXNo Ll9NX25vZGUgKyAxKSA9IF9NX2FsbG9jYXRlX25vZGUoKTsKICB0cnkgIHsKICAgIGNvbnN0cnVj dChfTV9maW5pc2guX01fY3VyKTsKICAgIF9NX2ZpbmlzaC5fTV9zZXRfbm9kZShfTV9maW5pc2gu X01fbm9kZSArIDEpOwogICAgX01fZmluaXNoLl9NX2N1ciA9IF9NX2ZpbmlzaC5fTV9maXJzdDsK ICB9CiAgY2F0Y2goLi4uKSB7ICBfTV9kZWFsbG9jYXRlX25vZGUoKihfTV9maW5pc2guX01fbm9k ZSArIDEpKSA7IHRocm93OyB9IDsKfQoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs b2MsIHNpemVfdCBfX2J1ZnNpemU+CnZvaWQgCmRlcXVlPF9UcCxfQWxsb2MsX19idWZzaXplPjo6 X01fcHVzaF9mcm9udF9hdXgoY29uc3QgdmFsdWVfdHlwZSYgX190KQp7CiAgdmFsdWVfdHlwZSBf X3RfY29weSA9IF9fdDsKICBfTV9yZXNlcnZlX21hcF9hdF9mcm9udCgpOwogICooX01fc3RhcnQu X01fbm9kZSAtIDEpID0gX01fYWxsb2NhdGVfbm9kZSgpOwogIHRyeSAgewogICAgX01fc3RhcnQu X01fc2V0X25vZGUoX01fc3RhcnQuX01fbm9kZSAtIDEpOwogICAgX01fc3RhcnQuX01fY3VyID0g X01fc3RhcnQuX01fbGFzdCAtIDE7CiAgICBjb25zdHJ1Y3QoX01fc3RhcnQuX01fY3VyLCBfX3Rf Y29weSk7CiAgfQogIGNhdGNoKC4uLikgeyAgKCsrX01fc3RhcnQsIF9NX2RlYWxsb2NhdGVfbm9k ZSgqKF9NX3N0YXJ0Ll9NX25vZGUgLSAxKSkpIDsgdGhyb3c7IH0gOwp9IAoKIAp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MsIHNpemVfdCBfX2J1ZnNpemU+CnZvaWQgCmRlcXVlPF9U cCxfQWxsb2MsX19idWZzaXplPjo6X01fcHVzaF9mcm9udF9hdXgoKQp7CiAgX01fcmVzZXJ2ZV9t YXBfYXRfZnJvbnQoKTsKICAqKF9NX3N0YXJ0Ll9NX25vZGUgLSAxKSA9IF9NX2FsbG9jYXRlX25v ZGUoKTsKICB0cnkgIHsKICAgIF9NX3N0YXJ0Ll9NX3NldF9ub2RlKF9NX3N0YXJ0Ll9NX25vZGUg LSAxKTsKICAgIF9NX3N0YXJ0Ll9NX2N1ciA9IF9NX3N0YXJ0Ll9NX2xhc3QgLSAxOwogICAgY29u c3RydWN0KF9NX3N0YXJ0Ll9NX2N1cik7CiAgfQogIGNhdGNoKC4uLikgeyAgKCsrX01fc3RhcnQs IF9NX2RlYWxsb2NhdGVfbm9kZSgqKF9NX3N0YXJ0Ll9NX25vZGUgLSAxKSkpIDsgdGhyb3c7IH0g Owp9IAoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MsIHNpemVfdCBfX2J1ZnNp emU+CnZvaWQgCmRlcXVlPF9UcCxfQWxsb2MsX19idWZzaXplPjo6X01fcG9wX2JhY2tfYXV4KCkK ewogIF9NX2RlYWxsb2NhdGVfbm9kZShfTV9maW5pc2guX01fZmlyc3QpOwogIF9NX2ZpbmlzaC5f TV9zZXRfbm9kZShfTV9maW5pc2guX01fbm9kZSAtIDEpOwogIF9NX2ZpbmlzaC5fTV9jdXIgPSBf TV9maW5pc2guX01fbGFzdCAtIDE7CiAgZGVzdHJveShfTV9maW5pc2guX01fY3VyKTsKfQoKIAog CiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MsIHNpemVfdCBfX2J1ZnNpemU+ CnZvaWQgCmRlcXVlPF9UcCxfQWxsb2MsX19idWZzaXplPjo6X01fcG9wX2Zyb250X2F1eCgpCnsK ICBkZXN0cm95KF9NX3N0YXJ0Ll9NX2N1cik7CiAgX01fZGVhbGxvY2F0ZV9ub2RlKF9NX3N0YXJ0 Ll9NX2ZpcnN0KTsKICBfTV9zdGFydC5fTV9zZXRfbm9kZShfTV9zdGFydC5fTV9ub2RlICsgMSk7 CiAgX01fc3RhcnQuX01fY3VyID0gX01fc3RhcnQuX01fZmlyc3Q7Cn0gICAgICAKCgoKdGVtcGxh dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jLCBzaXplX3QgX19idWZzaXplPgp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CnZvaWQgCmRlcXVlPF9UcCxfQWxsb2MsX19idWZzaXplPjo6 aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIGNvcHkoX19maXJzdCwgX19sYXN0LCBpbnNl cnRlcigqdGhpcywgX19wb3MpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j LCBzaXplX3QgX19idWZzaXplPgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9p ZCAKZGVxdWU8X1RwLF9BbGxvYyxfX2J1ZnNpemU+OjppbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0 b3JfdGFnKSB7CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0 LCBfX24pOwogIGlmIChfX3Bvcy5fTV9jdXIgPT0gX01fc3RhcnQuX01fY3VyKSB7CiAgICBpdGVy YXRvciBfX25ld19zdGFydCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfZnJvbnQoX19uKTsKICAg IHRyeSAgewogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX25ld19z dGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICB9CiAgICBjYXRjaCguLi4p IHsgIF9NX2Rlc3Ryb3lfbm9kZXMoX19uZXdfc3RhcnQuX01fbm9kZSwgX01fc3RhcnQuX01fbm9k ZSkgOyB0aHJvdzsgfSA7CiAgfQogIGVsc2UgaWYgKF9fcG9zLl9NX2N1ciA9PSBfTV9maW5pc2gu X01fY3VyKSB7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfTV9yZXNlcnZlX2VsZW1lbnRz X2F0X2JhY2soX19uKTsKICAgIHRyeSAgewogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJz dCwgX19sYXN0LCBfTV9maW5pc2gpOwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAg ICB9CiAgICBjYXRjaCguLi4pIHsgIF9NX2Rlc3Ryb3lfbm9kZXMoX01fZmluaXNoLl9NX25vZGUg KyAxLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaC5fTV9u b2RlICsgMSkgOyB0aHJvdzsgfSA7CiAgfQogIGVsc2UKICAgIF9NX2luc2VydF9hdXgoX19wb3Ms IF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2MsIHNpemVfdCBfX2J1ZnNpemU+CnR5cGVuYW1lIGRlcXVlPF9UcCwgX0FsbG9jLCBfX2J1 ZnNpemU+OjppdGVyYXRvcgpkZXF1ZTxfVHAsX0FsbG9jLF9fYnVmc2l6ZT46Ol9NX2luc2VydF9h dXgoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCnsKICBkaWZmZXJlbmNlX3R5cGUgX19pbmRleCA9 IF9fcG9zIC0gX01fc3RhcnQ7CiAgdmFsdWVfdHlwZSBfX3hfY29weSA9IF9feDsKICBpZiAoc3Rh dGljX2Nhc3Q8c2l6ZV90eXBlPihfX2luZGV4KSA8IHNpemUoKSAvIDIpIHsKICAgIHB1c2hfZnJv bnQoZnJvbnQoKSk7CiAgICBpdGVyYXRvciBfX2Zyb250MSA9IF9NX3N0YXJ0OwogICAgKytfX2Zy b250MTsKICAgIGl0ZXJhdG9yIF9fZnJvbnQyID0gX19mcm9udDE7CiAgICArK19fZnJvbnQyOwog ICAgX19wb3MgPSBfTV9zdGFydCArIF9faW5kZXg7CiAgICBpdGVyYXRvciBfX3BvczEgPSBfX3Bv czsKICAgICsrX19wb3MxOwogICAgY29weShfX2Zyb250MiwgX19wb3MxLCBfX2Zyb250MSk7CiAg fQogIGVsc2UgewogICAgcHVzaF9iYWNrKGJhY2soKSk7CiAgICBpdGVyYXRvciBfX2JhY2sxID0g X01fZmluaXNoOwogICAgLS1fX2JhY2sxOwogICAgaXRlcmF0b3IgX19iYWNrMiA9IF9fYmFjazE7 CiAgICAtLV9fYmFjazI7CiAgICBfX3BvcyA9IF9NX3N0YXJ0ICsgX19pbmRleDsKICAgIGNvcHlf YmFja3dhcmQoX19wb3MsIF9fYmFjazIsIF9fYmFjazEpOwogIH0KICAqX19wb3MgPSBfX3hfY29w eTsKICByZXR1cm4gX19wb3M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYywg c2l6ZV90IF9fYnVmc2l6ZT4KdHlwZW5hbWUgZGVxdWU8X1RwLF9BbGxvYyxfX2J1ZnNpemU+Ojpp dGVyYXRvcgpkZXF1ZTxfVHAsX0FsbG9jLF9fYnVmc2l6ZT46Ol9NX2luc2VydF9hdXgoaXRlcmF0 b3IgX19wb3MpCnsKICBkaWZmZXJlbmNlX3R5cGUgX19pbmRleCA9IF9fcG9zIC0gX01fc3RhcnQ7 CiAgaWYgKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19pbmRleCkgPCBzaXplKCkgLyAyKSB7CiAg ICBwdXNoX2Zyb250KGZyb250KCkpOwogICAgaXRlcmF0b3IgX19mcm9udDEgPSBfTV9zdGFydDsK ICAgICsrX19mcm9udDE7CiAgICBpdGVyYXRvciBfX2Zyb250MiA9IF9fZnJvbnQxOwogICAgKytf X2Zyb250MjsKICAgIF9fcG9zID0gX01fc3RhcnQgKyBfX2luZGV4OwogICAgaXRlcmF0b3IgX19w b3MxID0gX19wb3M7CiAgICArK19fcG9zMTsKICAgIGNvcHkoX19mcm9udDIsIF9fcG9zMSwgX19m cm9udDEpOwogIH0KICBlbHNlIHsKICAgIHB1c2hfYmFjayhiYWNrKCkpOwogICAgaXRlcmF0b3Ig X19iYWNrMSA9IF9NX2ZpbmlzaDsKICAgIC0tX19iYWNrMTsKICAgIGl0ZXJhdG9yIF9fYmFjazIg PSBfX2JhY2sxOwogICAgLS1fX2JhY2syOwogICAgX19wb3MgPSBfTV9zdGFydCArIF9faW5kZXg7 CiAgICBjb3B5X2JhY2t3YXJkKF9fcG9zLCBfX2JhY2syLCBfX2JhY2sxKTsKICB9CiAgKl9fcG9z ID0gdmFsdWVfdHlwZSgpOwogIHJldHVybiBfX3BvczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0FsbG9jLCBzaXplX3QgX19idWZzaXplPgp2b2lkCmRlcXVlPF9UcCxfQWxsb2MsX19i dWZzaXplPjo6X01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCnsKICBjb25z dCBkaWZmZXJlbmNlX3R5cGUgX19lbGVtc19iZWZvcmUgPSBfX3BvcyAtIF9NX3N0YXJ0OwogIHNp emVfdHlwZSBfX2xlbmd0aCA9IHNpemUoKTsKICB2YWx1ZV90eXBlIF9feF9jb3B5ID0gX194Owog IGlmIChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fZWxlbXNfYmVmb3JlKSA8IF9fbGVuZ3RoIC8g MikgewogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQgPSBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2Zy b250KF9fbik7CiAgICBpdGVyYXRvciBfX29sZF9zdGFydCA9IF9NX3N0YXJ0OwogICAgX19wb3Mg PSBfTV9zdGFydCArIF9fZWxlbXNfYmVmb3JlOwogICAgdHJ5ICB7CiAgICAgIGlmIChfX2VsZW1z X2JlZm9yZSA+PSBkaWZmZXJlbmNlX3R5cGUoX19uKSkgewogICAgICAgIGl0ZXJhdG9yIF9fc3Rh cnRfbiA9IF9NX3N0YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgdW5pbml0aWFs aXplZF9jb3B5KF9NX3N0YXJ0LCBfX3N0YXJ0X24sIF9fbmV3X3N0YXJ0KTsKICAgICAgICBfTV9z dGFydCA9IF9fbmV3X3N0YXJ0OwogICAgICAgIGNvcHkoX19zdGFydF9uLCBfX3BvcywgX19vbGRf c3RhcnQpOwogICAgICAgIGZpbGwoX19wb3MgLSBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX19wb3Ms IF9feF9jb3B5KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX3VuaW5pdGlhbGl6ZWRf Y29weV9maWxsKF9NX3N0YXJ0LCBfX3BvcywgX19uZXdfc3RhcnQsIAoJICAgICAgICAgICAgICAg ICAgICAgICAgICBfTV9zdGFydCwgX194X2NvcHkpOwogICAgICAgIF9NX3N0YXJ0ID0gX19uZXdf c3RhcnQ7CiAgICAgICAgZmlsbChfX29sZF9zdGFydCwgX19wb3MsIF9feF9jb3B5KTsKICAgICAg fQogICAgfQogICAgY2F0Y2goLi4uKSB7ICBfTV9kZXN0cm95X25vZGVzKF9fbmV3X3N0YXJ0Ll9N X25vZGUsIF9NX3N0YXJ0Ll9NX25vZGUpIDsgdGhyb3c7IH0gOwogIH0KICBlbHNlIHsKICAgIGl0 ZXJhdG9yIF9fbmV3X2ZpbmlzaCA9IF9NX3Jlc2VydmVfZWxlbWVudHNfYXRfYmFjayhfX24pOwog ICAgaXRlcmF0b3IgX19vbGRfZmluaXNoID0gX01fZmluaXNoOwogICAgY29uc3QgZGlmZmVyZW5j ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSAKICAgICAgZGlmZmVyZW5jZV90eXBlKF9fbGVuZ3RoKSAt IF9fZWxlbXNfYmVmb3JlOwogICAgX19wb3MgPSBfTV9maW5pc2ggLSBfX2VsZW1zX2FmdGVyOwog ICAgdHJ5ICB7CiAgICAgIGlmIChfX2VsZW1zX2FmdGVyID4gZGlmZmVyZW5jZV90eXBlKF9fbikp IHsKICAgICAgICBpdGVyYXRvciBfX2ZpbmlzaF9uID0gX01fZmluaXNoIC0gZGlmZmVyZW5jZV90 eXBlKF9fbik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fZmluaXNoX24sIF9NX2Zpbmlz aCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICAgICAg Y29weV9iYWNrd2FyZChfX3BvcywgX19maW5pc2hfbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBm aWxsKF9fcG9zLCBfX3BvcyArIGRpZmZlcmVuY2VfdHlwZShfX24pLCBfX3hfY29weSk7CiAgICAg IH0KICAgICAgZWxzZSB7CiAgICAgICAgX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfTV9maW5p c2gsIF9fcG9zICsgZGlmZmVyZW5jZV90eXBlKF9fbiksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3hfY29weSwgX19wb3MsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNo ID0gX19uZXdfZmluaXNoOwogICAgICAgIGZpbGwoX19wb3MsIF9fb2xkX2ZpbmlzaCwgX194X2Nv cHkpOwogICAgICB9CiAgICB9CiAgICBjYXRjaCguLi4pIHsgIF9NX2Rlc3Ryb3lfbm9kZXMoX01f ZmluaXNoLl9NX25vZGUgKyAxLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f bmV3X2ZpbmlzaC5fTV9ub2RlICsgMSkgOyB0aHJvdzsgfSA7CiAgfQp9CgoKCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvYywgc2l6ZV90IF9fYnVmc2l6ZT4KdGVtcGxhdGUgPGNsYXNz IF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQKZGVxdWU8X1RwLF9BbGxvYyxfX2J1ZnNpemU+OjpfTV9p bnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKQp7CiAgY29u c3QgZGlmZmVyZW5jZV90eXBlIF9fZWxlbXNiZWZvcmUgPSBfX3BvcyAtIF9NX3N0YXJ0OwogIHNp emVfdHlwZSBfX2xlbmd0aCA9IHNpemUoKTsKICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihf X2VsZW1zYmVmb3JlKSA8IF9fbGVuZ3RoIC8gMikgewogICAgaXRlcmF0b3IgX19uZXdfc3RhcnQg PSBfTV9yZXNlcnZlX2VsZW1lbnRzX2F0X2Zyb250KF9fbik7CiAgICBpdGVyYXRvciBfX29sZF9z dGFydCA9IF9NX3N0YXJ0OwogICAgX19wb3MgPSBfTV9zdGFydCArIF9fZWxlbXNiZWZvcmU7CiAg ICB0cnkgIHsKICAgICAgaWYgKF9fZWxlbXNiZWZvcmUgPj0gZGlmZmVyZW5jZV90eXBlKF9fbikp IHsKICAgICAgICBpdGVyYXRvciBfX3N0YXJ0X24gPSBfTV9zdGFydCArIGRpZmZlcmVuY2VfdHlw ZShfX24pOyAKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX01fc3RhcnQsIF9fc3RhcnRfbiwg X19uZXdfc3RhcnQpOwogICAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICAgICAgY29w eShfX3N0YXJ0X24sIF9fcG9zLCBfX29sZF9zdGFydCk7CiAgICAgICAgY29weShfX2ZpcnN0LCBf X2xhc3QsIF9fcG9zIC0gZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICB9CiAgICAgIGVsc2Ug ewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFu Y2UoX19taWQsIGRpZmZlcmVuY2VfdHlwZShfX24pIC0gX19lbGVtc2JlZm9yZSk7CiAgICAgICAg X191bmluaXRpYWxpemVkX2NvcHlfY29weShfTV9zdGFydCwgX19wb3MsIF9fZmlyc3QsIF9fbWlk LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3RhcnQpOwogICAgICAg IF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICAgICAgY29weShfX21pZCwgX19sYXN0LCBfX29s ZF9zdGFydCk7CiAgICAgIH0KICAgIH0KICAgIGNhdGNoKC4uLikgeyAgX01fZGVzdHJveV9ub2Rl cyhfX25ld19zdGFydC5fTV9ub2RlLCBfTV9zdGFydC5fTV9ub2RlKSA7IHRocm93OyB9IDsKICB9 CiAgZWxzZSB7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2ggPSBfTV9yZXNlcnZlX2VsZW1lbnRz X2F0X2JhY2soX19uKTsKICAgIGl0ZXJhdG9yIF9fb2xkX2ZpbmlzaCA9IF9NX2ZpbmlzaDsKICAg IGNvbnN0IGRpZmZlcmVuY2VfdHlwZSBfX2VsZW1zYWZ0ZXIgPSAKICAgICAgZGlmZmVyZW5jZV90 eXBlKF9fbGVuZ3RoKSAtIF9fZWxlbXNiZWZvcmU7CiAgICBfX3BvcyA9IF9NX2ZpbmlzaCAtIF9f ZWxlbXNhZnRlcjsKICAgIHRyeSAgewogICAgICBpZiAoX19lbGVtc2FmdGVyID4gZGlmZmVyZW5j ZV90eXBlKF9fbikpIHsKICAgICAgICBpdGVyYXRvciBfX2ZpbmlzaF9uID0gX01fZmluaXNoIC0g ZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fZmluaXNo X24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggPSBfX25ld19maW5p c2g7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3BvcywgX19maW5pc2hfbiwgX19vbGRfZmluaXNo KTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19wb3MpOwogICAgICB9CiAgICAgIGVs c2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAgIGFk dmFuY2UoX19taWQsIF9fZWxlbXNhZnRlcik7CiAgICAgICAgX191bmluaXRpYWxpemVkX2NvcHlf Y29weShfX21pZCwgX19sYXN0LCBfX3BvcywgX01fZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAg IF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBf X3Bvcyk7CiAgICAgIH0KICAgIH0KICAgIGNhdGNoKC4uLikgeyAgX01fZGVzdHJveV9ub2Rlcyhf TV9maW5pc2guX01fbm9kZSArIDEsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19uZXdfZmluaXNoLl9NX25vZGUgKyAxKSA7IHRocm93OyB9IDsKICB9Cn0KCiMgMTU3MiAiL3Vz ci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4v Li4vaW5jbHVkZS9nKystMy9zdGxfZGVxdWUuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvYywgc2l6ZV90IF9fYnVmc2l6ZT4Kdm9pZCAKZGVxdWU8X1RwLF9BbGxvYyxfX2J1 ZnNpemU+OjpfTV9uZXdfZWxlbWVudHNfYXRfZnJvbnQoc2l6ZV90eXBlIF9fbmV3X2VsZW1zKQp7 CiAgc2l6ZV90eXBlIF9fbmV3X25vZGVzCiAgICAgID0gKF9fbmV3X2VsZW1zICsgX1NfYnVmZmVy X3NpemUoKSAtIDEpIC8gX1NfYnVmZmVyX3NpemUoKTsKICBfTV9yZXNlcnZlX21hcF9hdF9mcm9u dChfX25ld19ub2Rlcyk7CiAgc2l6ZV90eXBlIF9faTsKICB0cnkgIHsKICAgIGZvciAoX19pID0g MTsgX19pIDw9IF9fbmV3X25vZGVzOyArK19faSkKICAgICAgKihfTV9zdGFydC5fTV9ub2RlIC0g X19pKSA9IF9NX2FsbG9jYXRlX25vZGUoKTsKICB9CgogIGNhdGNoKC4uLikgewogICAgZm9yIChz aXplX3R5cGUgX19qID0gMTsgX19qIDwgX19pOyArK19faikKICAgICAgX01fZGVhbGxvY2F0ZV9u b2RlKCooX01fc3RhcnQuX01fbm9kZSAtIF9faikpOyAgICAgIAogICAgdGhyb3c7CiAgfQoKfQoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jLCBzaXplX3QgX19idWZzaXplPgp2b2lk IApkZXF1ZTxfVHAsX0FsbG9jLF9fYnVmc2l6ZT46Ol9NX25ld19lbGVtZW50c19hdF9iYWNrKHNp emVfdHlwZSBfX25ld19lbGVtcykKewogIHNpemVfdHlwZSBfX25ld19ub2RlcwogICAgICA9IChf X25ld19lbGVtcyArIF9TX2J1ZmZlcl9zaXplKCkgLSAxKSAvIF9TX2J1ZmZlcl9zaXplKCk7CiAg X01fcmVzZXJ2ZV9tYXBfYXRfYmFjayhfX25ld19ub2Rlcyk7CiAgc2l6ZV90eXBlIF9faTsKICB0 cnkgIHsKICAgIGZvciAoX19pID0gMTsgX19pIDw9IF9fbmV3X25vZGVzOyArK19faSkKICAgICAg KihfTV9maW5pc2guX01fbm9kZSArIF9faSkgPSBfTV9hbGxvY2F0ZV9ub2RlKCk7CiAgfQoKICBj YXRjaCguLi4pIHsKICAgIGZvciAoc2l6ZV90eXBlIF9faiA9IDE7IF9faiA8IF9faTsgKytfX2op CiAgICAgIF9NX2RlYWxsb2NhdGVfbm9kZSgqKF9NX2ZpbmlzaC5fTV9ub2RlICsgX19qKSk7ICAg ICAgCiAgICB0aHJvdzsKICB9Cgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2Ms IHNpemVfdCBfX2J1ZnNpemU+CnZvaWQgCmRlcXVlPF9UcCxfQWxsb2MsX19idWZzaXplPjo6X01f cmVhbGxvY2F0ZV9tYXAoc2l6ZV90eXBlIF9fbm9kZXNfdG9fYWRkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBfX2FkZF9hdF9mcm9udCkKewogIHNp emVfdHlwZSBfX29sZF9udW1fbm9kZXMgPSBfTV9maW5pc2guX01fbm9kZSAtIF9NX3N0YXJ0Ll9N X25vZGUgKyAxOwogIHNpemVfdHlwZSBfX25ld19udW1fbm9kZXMgPSBfX29sZF9udW1fbm9kZXMg KyBfX25vZGVzX3RvX2FkZDsKCiAgX01hcF9wb2ludGVyIF9fbmV3X25zdGFydDsKICBpZiAoX01f bWFwX3NpemUgPiAyICogX19uZXdfbnVtX25vZGVzKSB7CiAgICBfX25ld19uc3RhcnQgPSBfTV9t YXAgKyAoX01fbWFwX3NpemUgLSBfX25ld19udW1fbm9kZXMpIC8gMiAKICAgICAgICAgICAgICAg ICAgICAgKyAoX19hZGRfYXRfZnJvbnQgPyBfX25vZGVzX3RvX2FkZCA6IDApOwogICAgaWYgKF9f bmV3X25zdGFydCA8IF9NX3N0YXJ0Ll9NX25vZGUpCiAgICAgIGNvcHkoX01fc3RhcnQuX01fbm9k ZSwgX01fZmluaXNoLl9NX25vZGUgKyAxLCBfX25ld19uc3RhcnQpOwogICAgZWxzZQogICAgICBj b3B5X2JhY2t3YXJkKF9NX3N0YXJ0Ll9NX25vZGUsIF9NX2ZpbmlzaC5fTV9ub2RlICsgMSwgCiAg ICAgICAgICAgICAgICAgICAgX19uZXdfbnN0YXJ0ICsgX19vbGRfbnVtX25vZGVzKTsKICB9CiAg ZWxzZSB7CiAgICBzaXplX3R5cGUgX19uZXdfbWFwX3NpemUgPSAKICAgICAgX01fbWFwX3NpemUg KyBtYXgoX01fbWFwX3NpemUsIF9fbm9kZXNfdG9fYWRkKSArIDI7CgogICAgX01hcF9wb2ludGVy IF9fbmV3X21hcCA9IF9NX2FsbG9jYXRlX21hcChfX25ld19tYXBfc2l6ZSk7CiAgICBfX25ld19u c3RhcnQgPSBfX25ld19tYXAgKyAoX19uZXdfbWFwX3NpemUgLSBfX25ld19udW1fbm9kZXMpIC8g MgogICAgICAgICAgICAgICAgICAgICAgICAgKyAoX19hZGRfYXRfZnJvbnQgPyBfX25vZGVzX3Rv X2FkZCA6IDApOwogICAgY29weShfTV9zdGFydC5fTV9ub2RlLCBfTV9maW5pc2guX01fbm9kZSAr IDEsIF9fbmV3X25zdGFydCk7CiAgICBfTV9kZWFsbG9jYXRlX21hcChfTV9tYXAsIF9NX21hcF9z aXplKTsKCiAgICBfTV9tYXAgPSBfX25ld19tYXA7CiAgICBfTV9tYXBfc2l6ZSA9IF9fbmV3X21h cF9zaXplOwogIH0KCiAgX01fc3RhcnQuX01fc2V0X25vZGUoX19uZXdfbnN0YXJ0KTsKICBfTV9m aW5pc2guX01fc2V0X25vZGUoX19uZXdfbnN0YXJ0ICsgX19vbGRfbnVtX25vZGVzIC0gMSk7Cn0K CgogCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYywgc2l6ZV90IF9fYnVmc2l6 Pgpib29sIG9wZXJhdG9yPT0oY29uc3QgZGVxdWU8X1RwLCBfQWxsb2MsIF9fYnVmc2l6PiYgX194 LAogICAgICAgICAgICAgICAgY29uc3QgZGVxdWU8X1RwLCBfQWxsb2MsIF9fYnVmc2l6PiYgX195 KQp7CiAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgICBlcXVhbChf X3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf VHAsIGNsYXNzIF9BbGxvYywgc2l6ZV90IF9fYnVmc2l6Pgpib29sIG9wZXJhdG9yPChjb25zdCBk ZXF1ZTxfVHAsIF9BbGxvYywgX19idWZzaXo+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IGRl cXVlPF9UcCwgX0FsbG9jLCBfX2J1ZnNpej4mIF9feSkKewogIHJldHVybiBsZXhpY29ncmFwaGlj YWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLCAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0KCgoKCgoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jLCBzaXplX3QgX19idWZzaXo+CmlubGluZSB2b2lkIApzd2Fw KGRlcXVlPF9UcCxfQWxsb2MsX19idWZzaXo+JiBfX3gsIGRlcXVlPF9UcCxfQWxsb2MsX19idWZz aXo+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9CgoKCgoKCgogICAgICAgICAgCiAgCiAgCgoK IAogCiAKIyAzNCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8y Ljk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9kZXF1ZSIgMiAzCgoKCgogCiAKIAojIDIx ICIuLi9TcmNTaGFyZWQvRW1TdHJ1Y3RzLmgiIDIKCgoKCgogCgp0eXBlZGVmIHZlY3RvcjxTY2Fs ZVR5cGU+CQlTY2FsZUxpc3Q7CnR5cGVkZWYgdmVjdG9yPFJBTVNpemVUeXBlPgkJUkFNU2l6ZUxp c3Q7Cgp0eXBlZGVmIHZlY3Rvcjx1aW50OD4JCQlCeXRlTGlzdDsKdHlwZWRlZiB2ZWN0b3I8c3Ry aW5nPgkJCVN0cmluZ0xpc3Q7Cgp0eXBlZGVmIG1hcDxzdHJpbmcsIHN0cmluZz4JCVN0cmluZ1N0 cmluZ01hcDsKdHlwZWRlZiB2ZWN0b3I8Q2xvc2VBY3Rpb25UeXBlPglDbG9zZUFjdGlvbkxpc3Q7 CnR5cGVkZWYgdmVjdG9yPExvZ2dpbmdUeXBlPgkJTG9nZ2luZ0xpc3Q7CgoKIAoKc3RydWN0IFJH QlR5cGUKewoJUkdCVHlwZSAodm9pZCkge30KCVJHQlR5cGUgKHVpbnQ4IHJlZCwgdWludDggZ3Jl ZW4sIHVpbnQ4IGJsdWUpIDoKCQlmUmVkIChyZWQpLAoJCWZHcmVlbiAoZ3JlZW4pLAoJCWZCbHVl IChibHVlKQoJe30KCglib29sIG9wZXJhdG9yPT0gKGNvbnN0IFJHQlR5cGUmIHJocykgY29uc3QK CXsKCQlyZXR1cm4gZlJlZCA9PSByaHMuZlJlZCAmJiBmR3JlZW4gPT0gcmhzLmZHcmVlbiAmJiBm Qmx1ZSA9PSByaHMuZkJsdWU7Cgl9CgoJYm9vbCBvcGVyYXRvciE9IChjb25zdCBSR0JUeXBlJiBy aHMpIGNvbnN0Cgl7CgkJcmV0dXJuICEoKnRoaXMgPT0gcmhzKTsKCX0KCgl1aW50OAkJZlJlZDsK CXVpbnQ4CQlmR3JlZW47Cgl1aW50OAkJZkJsdWU7Cgl1aW50OAkJZkZpbGxlcjsJIAp9Owp0eXBl ZGVmIHZlY3RvcjxSR0JUeXBlPglSR0JMaXN0OwoKCiAKCnN0cnVjdCBTeXN0ZW1DYWxsQ29udGV4 dAp7CgllbXVwdHIJCWZQQzsJCQkgCgllbXVwdHIJCWZOZXh0UEM7CQkgCgllbXVwdHIJCWZEZXN0 UEMxOwkJIAoJZW11cHRyCQlmRGVzdFBDMjsJCSAKCXVpbnQxNgkJZlRyYXBXb3JkOwkJIAoJdWlu dDE2CQlmVHJhcEluZGV4OwkJIAoJZW11cHRyCQlmRXh0cmE7CQkJIAoJQm9vbAkJZlZpYVRyYXA7 CQkgCglCb29sCQlmVmlhSnNyQTE7CQkgCgoJbG9uZwkJZkVycm9yOwkJCSAKCWxvbmcJCWZMaWJJ bmRleDsJCSAKCWxvbmcJCWZNYXhSZWZOdW07CQkgCn07CnR5cGVkZWYgdmVjdG9yPFN5c3RlbUNh bGxDb250ZXh0PglTeXN0ZW1DYWxsQ29udGV4dExpc3Q7CgoKIAoKc3RydWN0IERhdGFiYXNlSW5m bwp7CglVSW50MzIJCWNyZWF0b3I7CglVSW50MzIJCXR5cGU7CglVSW50MTYJCXZlcnNpb247CglM b2NhbElECQlkYklEOwoJVUludDE2IAkJY2FyZE5vOwoJVUludDMyCQltb2REYXRlOwoJVUludDE2 CQlkYkF0dHJzOwoKCWNoYXIJCW5hbWVbMzIgXTsKCWNoYXIJCWRiTmFtZVszMiBdOwoKCUJvb2wg b3BlcmF0b3IgPCAoY29uc3QgRGF0YWJhc2VJbmZvJiBvdGhlcikgY29uc3QKCQl7IGlmIChjcmVh dG9yIDwgb3RoZXIuY3JlYXRvcikgcmV0dXJuIHRydWU7CgkJICBpZiAoY3JlYXRvciA+IG90aGVy LmNyZWF0b3IpIHJldHVybiBmYWxzZTsKCQkgIGlmICh0eXBlIDwgb3RoZXIudHlwZSkgcmV0dXJu IHRydWU7CgkJICByZXR1cm4gZmFsc2U7IH0KCglCb29sIG9wZXJhdG9yID09IChjb25zdCBEYXRh YmFzZUluZm8mIG90aGVyKSBjb25zdAoJCXsgcmV0dXJuIChjcmVhdG9yID09IG90aGVyLmNyZWF0 b3IpICYmCgkJCQkgKHR5cGUgPT0gb3RoZXIudHlwZSk7IH0KfTsKdHlwZWRlZiB2ZWN0b3I8RGF0 YWJhc2VJbmZvPglEYXRhYmFzZUluZm9MaXN0OwoKCiAKCnN0cnVjdCBTbG90SW5mb1R5cGUKewoJ bG9uZwkJZlNsb3ROdW1iZXI7CglCb29sCQlmU2xvdE9jY3VwaWVkOwoJRW1EaXJSZWYJZlNsb3RS b290Owp9Owp0eXBlZGVmIHZlY3RvcjxTbG90SW5mb1R5cGU+CVNsb3RJbmZvTGlzdDsKCgogCgpz dHJ1Y3QgQ29uZmlndXJhdGlvbgp7CglDb25maWd1cmF0aW9uICgpIDoKCQlmRGV2aWNlICgpLAoJ CWZSQU1TaXplICgxMDI0KSwKCQlmUk9NRmlsZSAoKQoJewoJfQoKCUNvbmZpZ3VyYXRpb24gKGNv bnN0IENvbmZpZ3VyYXRpb24mIGNmZykgOgoJCWZEZXZpY2UgKGNmZy5mRGV2aWNlKSwKCQlmUkFN U2l6ZSAoY2ZnLmZSQU1TaXplKSwKCQlmUk9NRmlsZSAoY2ZnLmZST01GaWxlKQoJewoJfQoKCUNv bmZpZ3VyYXRpb24gKGNvbnN0IEVtRGV2aWNlJiBkdCwgbG9uZyBzaXplLCBjb25zdCBFbUZpbGVS ZWYmIHJvbSkgOgoJCWZEZXZpY2UgKGR0KSwKCQlmUkFNU2l6ZSAoc2l6ZSksCgkJZlJPTUZpbGUg KHJvbSkKCXsKCX0KCglCb29sIElzVmFsaWQgKHZvaWQpIGNvbnN0Cgl7CgkJIAoJCSAKCgkJaWYg KCFmRGV2aWNlLlN1cHBvcnRlZCAoKSkKCQkJcmV0dXJuIGZhbHNlOwoKCQlpZiAoZlJBTVNpemUg PD0gMCkKCQkJcmV0dXJuIGZhbHNlOwoKCQlpZiAoIWZST01GaWxlLklzU3BlY2lmaWVkICgpKQoJ CQlyZXR1cm4gZmFsc2U7CgoJCWlmICghZlJPTUZpbGUuRXhpc3RzICgpKQoJCQlyZXR1cm4gZmFs c2U7CgoJCWlmICghZkRldmljZS5TdXBwb3J0c1JPTSAoZlJPTUZpbGUpKQoJCQlyZXR1cm4gZmFs c2U7CgoJCXJldHVybiB0cnVlOwoJfQoKCUVtRGV2aWNlCQkJCWZEZXZpY2U7CglSQU1TaXplVHlw ZQkJCQlmUkFNU2l6ZTsKCUVtRmlsZVJlZgkJCQlmUk9NRmlsZTsKfTsKdHlwZWRlZiB2ZWN0b3I8 Q29uZmlndXJhdGlvbj4JQ29uZmlndXJhdGlvbkxpc3Q7CgoKIAoKc3RydWN0IEdyZW1saW5JbmZv CnsKCUdyZW1saW5JbmZvICgpIDoKCQlmTnVtYmVyICgwKSwKCQlmU3RlcHMgKC0xKSwKCQlmRmlu YWwgKC0xKSwKCQlmU2F2ZUZyZXF1ZW5jeSAoMTAwMDApLAoJCWZBcHBMaXN0ICgpCgl7Cgl9CgoJ bG9uZwkJCQlmTnVtYmVyOwoJbG9uZwkJCQlmU3RlcHM7Cglsb25nCQkJCWZGaW5hbDsKCWxvbmcJ CQkJZlNhdmVGcmVxdWVuY3k7CglEYXRhYmFzZUluZm9MaXN0CWZBcHBMaXN0Owp9Owp0eXBlZGVm IHZlY3RvcjxHcmVtbGluSW5mbz4JR3JlbWxpbkluZm9MaXN0OwoKCiAKCnN0cnVjdCBIb3JkZUlu Zm8KewoJSG9yZGVJbmZvICgpIDoKCQlmU3RhcnROdW1iZXIgKDApLAoJCWZTdG9wTnVtYmVyICgw KSwKCQlmRGVwdGhTd2l0Y2ggKDMwMDAwKSwKCQlmRGVwdGhTYXZlICgxMDAwMCksCgkJZkRlcHRo U3RvcCAoMTAwMDAwMCksCgkJZkNhblN3aXRjaCAoZmFsc2UpLAoJCWZDYW5TYXZlIChmYWxzZSks CgkJZkNhblN0b3AgKGZhbHNlKSwKCQlmQXBwTGlzdCAoKSwKCQlmU2F2ZUZyZXF1ZW5jeSAoMCks CSAKCQlmU3dpdGNoRGVwdGggKDApLAkgCgkJZk1heERlcHRoICgwKSwJCSAKCQlmRmlyc3RMYXVu Y2hlZEFwcE5hbWUgKCIiKQoJewoJCU5ld1RvT2xkICgpOwoJfQoKCWxvbmcJCQkJZlN0YXJ0TnVt YmVyOwoJbG9uZwkJCQlmU3RvcE51bWJlcjsKCglsb25nCQkJCWZEZXB0aFN3aXRjaDsKCWxvbmcJ CQkJZkRlcHRoU2F2ZTsKCWxvbmcJCQkJZkRlcHRoU3RvcDsKCglCb29sCQkJCWZDYW5Td2l0Y2g7 CglCb29sCQkJCWZDYW5TYXZlOwoJQm9vbAkJCQlmQ2FuU3RvcDsKCglEYXRhYmFzZUluZm9MaXN0 CWZBcHBMaXN0OwoKCSAKCSAKCglsb25nCQkJCWZTYXZlRnJlcXVlbmN5OwoJbG9uZwkJCQlmU3dp dGNoRGVwdGg7Cglsb25nCQkJCWZNYXhEZXB0aDsKCgkgCgkgCgoJc3RyaW5nCQkJCWZGaXJzdExh dW5jaGVkQXBwTmFtZTsKCgl2b2lkIE5ld1RvT2xkICh2b2lkKQoJewoJCWZTd2l0Y2hEZXB0aAk9 IGZDYW5Td2l0Y2ggPyBmRGVwdGhTd2l0Y2ggOiAtMTsKCQlmU2F2ZUZyZXF1ZW5jeQk9IGZDYW5T YXZlID8gZkRlcHRoU2F2ZSA6IDA7CgkJZk1heERlcHRoCQk9IGZDYW5TdG9wID8gZkRlcHRoU3Rv cCA6IC0xOwoJfQoKCXZvaWQgT2xkVG9OZXcgKHZvaWQpCgl7CgkJZkNhblN3aXRjaCA9IGZTd2l0 Y2hEZXB0aCA+IDA7CgkJZkRlcHRoU3dpdGNoID0gZkNhblN3aXRjaCA/IGZTd2l0Y2hEZXB0aCA6 IDMwMDAwOwoKCQlmQ2FuU2F2ZSA9IGZTYXZlRnJlcXVlbmN5ID4gMDsKCQlmRGVwdGhTYXZlID0g ZkNhblNhdmUgPyBmU2F2ZUZyZXF1ZW5jeSA6IDEwMDAwOwoKCQlmQ2FuU3RvcCA9IGZNYXhEZXB0 aCA+IDA7CgkJZkRlcHRoU3RvcCA9IGZDYW5TdG9wID8gZk1heERlcHRoIDogMTAwMDAwMDsKCX0K fTsKdHlwZWRlZiB2ZWN0b3I8SG9yZGVJbmZvPglIb3JkZUluZm9MaXN0OwoKCiAKCnN0cnVjdCBF bUdyZW1saW5UaHJlYWRJbmZvCnsKCUJvb2wJZkhhbHRlZDsKCUludDMyCWZFcnJvckV2ZW50OwoJ U3RyQ29kZQlmTWVzc2FnZUlEOwp9OwoKCiAKCnN0cnVjdCBFbUdyZW1saW5FcnJvckZyZXF1ZW5j eUluZm8KewoJSW50MzIJZkNvdW50OwoJSW50MzIJZkVycm9yRnJlcXVlbmN5OwoJSW50MzIJZkZp cnN0RXJyYW50R3JlbWxpbkluZGV4Owp9OwoKCiAKCnR5cGVkZWYgc3RydWN0IFN5c0xpYlRibEVu dHJ5VHlwZVYxMCB7CglNZW1QdHIqCQkJZGlzcGF0Y2hUYmxQOwkJCQkJIAoJdm9pZCoJCQlnbG9i YWxzUDsJCQkJCQkgCgl9IFN5c0xpYlRibEVudHJ5VHlwZVYxMDsKdHlwZWRlZiBTeXNMaWJUYmxF bnRyeVR5cGVWMTAqCVN5c0xpYlRibEVudHJ5VjEwUHRyOwoKCiAKCnN0cnVjdCBFbVN0YWNrRnJh bWUKewoJZW11cHRyCWZBZGRyZXNzSW5GdW5jdGlvbjsKCWVtdXB0cglmQTY7Cn07Cgp0eXBlZGVm IHZlY3RvcjxFbVN0YWNrRnJhbWU+CUVtU3RhY2tGcmFtZUxpc3Q7CgoKCgojIDIyICIuLi9TcmNT aGFyZWQvRW1EbGcuaCIgMgoKIyAxICIuLi9TcmNTaGFyZWQvTG9nZ2luZy5oIiAxCiAKIAoKCgoK CgoKCgoKCgoKCiMgMSAiLi4vU3JjU2hhcmVkL0hvcmRlcy5oIiAxCiAKIAoKCgoKCgoKCgoKCgoK CgoKIyAxICIuLi9TcmNTaGFyZWQvQ0dyZW1saW5zLmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKIyAx ICIuLi9TcmNTaGFyZWQvRW1TdHJlYW0uaCIgMQogCiAKIAogCiAKIAoKCgoKCgoKIyAxICIvdXNy L2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8u Li9pbmNsdWRlL2crKy0zL2xpc3QiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUu My8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9saXN0LmgiIDEgMwogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0 IF9MaXN0X25vZGUgewogIHR5cGVkZWYgdm9pZCogX1ZvaWRfcG9pbnRlcjsKICBfVm9pZF9wb2lu dGVyIF9NX25leHQ7CiAgX1ZvaWRfcG9pbnRlciBfTV9wcmV2OwogIF9UcCBfTV9kYXRhOwp9OwoK dGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBfUHRyPgpzdHJ1Y3QgX0xpc3Rf aXRlcmF0b3IgewogIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9UcCYsX1RwKj4gICAgICAg ICAgICAgaXRlcmF0b3I7CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsY29uc3QgX1RwJixj b25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxf UmVmLF9QdHI+ICAgICAgICAgICAgIF9TZWxmOwoKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRl cmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAg dHlwZWRlZiBfUHRyIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmIHJlZmVyZW5jZTsKICB0eXBlZGVm IF9MaXN0X25vZGU8X1RwPiBfTm9kZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlw ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICBfTm9kZSogX01fbm9kZTsKCiAgX0xp c3RfaXRlcmF0b3IoX05vZGUqIF9feCkgOiBfTV9ub2RlKF9feCkge30KICBfTGlzdF9pdGVyYXRv cigpIHt9CiAgX0xpc3RfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9feCkgOiBfTV9ub2RlKF9f eC5fTV9ub2RlKSB7fQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX1NlbGYmIF9feCkgY29uc3Qg eyByZXR1cm4gX01fbm9kZSA9PSBfX3guX01fbm9kZTsgfQogIGJvb2wgb3BlcmF0b3IhPShjb25z dCBfU2VsZiYgX194KSBjb25zdCB7IHJldHVybiBfTV9ub2RlICE9IF9feC5fTV9ub2RlOyB9CiAg cmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICgqX01fbm9kZSkuX01fZGF0YTsg fQoKCiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7 IH0KCgogIF9TZWxmJiBvcGVyYXRvcisrKCkgeyAKICAgIF9NX25vZGUgPSAoX05vZGUqKShfTV9u b2RlLT5fTV9uZXh0KTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhp bnQpIHsgCiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgKysqdGhpczsKICAgIHJldHVybiBf X3RtcDsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLS0oKSB7IAogICAgX01fbm9kZSA9IChfTm9kZSop KF9NX25vZGUtPl9NX3ByZXYpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRv ci0tKGludCkgeyAKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLSp0aGlzOwogICAgcmV0 dXJuIF9fdG1wOwogIH0KfTsKCiMgMTIwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9saXN0Lmgi IDMKCgoKIAogCiAKIAogCiAKCiMgMTk5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9saXN0Lmgi IDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmNsYXNzIF9MaXN0X2Jhc2Ug CnsKcHVibGljOgogIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90 eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9Cgog IF9MaXN0X2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKSB7CiAgICBfTV9ub2RlID0gX01fZ2V0 X25vZGUoKTsKICAgIF9NX25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwogICAgX01fbm9kZS0+X01f cHJldiA9IF9NX25vZGU7CiAgfQogIH5fTGlzdF9iYXNlKCkgewogICAgY2xlYXIoKTsKICAgIF9N X3B1dF9ub2RlKF9NX25vZGUpOwogIH0KCiAgdm9pZCBjbGVhcigpOwoKcHJvdGVjdGVkOgogIHR5 cGVkZWYgc2ltcGxlX2FsbG9jPF9MaXN0X25vZGU8X1RwPiwgX0FsbG9jPiBfQWxsb2NfdHlwZTsK ICBfTGlzdF9ub2RlPF9UcD4qIF9NX2dldF9ub2RlKCkgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFs bG9jYXRlKDEpOyB9CiAgdm9pZCBfTV9wdXRfbm9kZShfTGlzdF9ub2RlPF9UcD4qIF9fcCkgeyBf QWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIDEpOyB9IAoKcHJvdGVjdGVkOgogIF9MaXN0X25v ZGU8X1RwPiogX01fbm9kZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9j Pgp2b2lkIApfTGlzdF9iYXNlPF9UcCxfQWxsb2M+OjpjbGVhcigpIAp7CiAgX0xpc3Rfbm9kZTxf VHA+KiBfX2N1ciA9IChfTGlzdF9ub2RlPF9UcD4qKSBfTV9ub2RlLT5fTV9uZXh0OwogIHdoaWxl IChfX2N1ciAhPSBfTV9ub2RlKSB7CiAgICBfTGlzdF9ub2RlPF9UcD4qIF9fdG1wID0gX19jdXI7 CiAgICBfX2N1ciA9IChfTGlzdF9ub2RlPF9UcD4qKSBfX2N1ci0+X01fbmV4dDsKICAgIGRlc3Ry b3koJl9fdG1wLT5fTV9kYXRhKTsKICAgIF9NX3B1dF9ub2RlKF9fdG1wKTsKICB9CiAgX01fbm9k ZS0+X01fbmV4dCA9IF9NX25vZGU7CiAgX01fbm9kZS0+X01fcHJldiA9IF9NX25vZGU7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jICA+CmNsYXNzIGxpc3QgOiBw cm90ZWN0ZWQgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz4gewogIHR5cGVkZWYgX0xpc3RfYmFzZTxf VHAsIF9BbGxvYz4gX0Jhc2U7CnByb3RlY3RlZDoKICB0eXBlZGVmIHZvaWQqIF9Wb2lkX3BvaW50 ZXI7CgpwdWJsaWM6ICAgICAgCiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZh bHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2lu dGVyOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFs dWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX0xpc3Rfbm9kZTxfVHA+IF9Ob2Rl OwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl bmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9j YXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy biBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgpwdWJsaWM6CiAgdHlwZWRlZiBfTGlzdF9pdGVy YXRvcjxfVHAsX1RwJixfVHAqPiAgICAgICAgICAgICBpdGVyYXRvcjsKICB0eXBlZGVmIF9MaXN0 X2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9UcCo+IGNvbnN0X2l0ZXJhdG9yOwoKCiAg dHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0 ZXJhdG9yOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gICAgICAgcmV2ZXJz ZV9pdGVyYXRvcjsKCgoKCgoKCgoKcHJvdGVjdGVkOgoKICB1c2luZyBfQmFzZTo6X01fbm9kZTsK ICB1c2luZyBfQmFzZTo6X01fcHV0X25vZGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2dldF9ub2RlOwoK CnByb3RlY3RlZDoKICBfTm9kZSogX01fY3JlYXRlX25vZGUoY29uc3QgX1RwJiBfX3gpCiAgewog ICAgX05vZGUqIF9fcCA9IF9NX2dldF9ub2RlKCk7CiAgICB0cnkgIHsKICAgICAgY29uc3RydWN0 KCZfX3AtPl9NX2RhdGEsIF9feCk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgIF9NX3B1dF9ub2Rl KF9fcCkgOyB0aHJvdzsgfSA7CiAgICByZXR1cm4gX19wOwogIH0KCiAgX05vZGUqIF9NX2NyZWF0 ZV9ub2RlKCkKICB7CiAgICBfTm9kZSogX19wID0gX01fZ2V0X25vZGUoKTsKICAgIHRyeSAgewog ICAgICBjb25zdHJ1Y3QoJl9fcC0+X01fZGF0YSk7CiAgICB9CiAgICBjYXRjaCguLi4pIHsgIF9N X3B1dF9ub2RlKF9fcCkgOyB0aHJvdzsgfSA7CiAgICByZXR1cm4gX19wOwogIH0KCnB1YmxpYzoK ICBleHBsaWNpdCBsaXN0KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlw ZSgpKSA6IF9CYXNlKF9fYSkge30KCiAgaXRlcmF0b3IgYmVnaW4oKSAgICAgICAgICAgICB7IHJl dHVybiAoX05vZGUqKShfTV9ub2RlLT5fTV9uZXh0KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2lu KCkgY29uc3QgeyByZXR1cm4gKF9Ob2RlKikoX01fbm9kZS0+X01fbmV4dCk7IH0KCiAgaXRlcmF0 b3IgZW5kKCkgICAgICAgICAgICAgeyByZXR1cm4gX01fbm9kZTsgfQogIGNvbnN0X2l0ZXJhdG9y IGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGU7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVn aW4oKSAKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgY29uc3RfcmV2 ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCAKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2Vf aXRlcmF0b3IoZW5kKCkpOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpCiAgICB7IHJldHVy biByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciBy ZW5kKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7 IH0KCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGUtPl9NX25leHQgPT0gX01f bm9kZTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgewogICAgc2l6ZV90eXBlIF9fcmVzdWx0 ID0gMDsKICAgIGRpc3RhbmNlKGJlZ2luKCksIGVuZCgpLCBfX3Jlc3VsdCk7CiAgICByZXR1cm4g X19yZXN1bHQ7CiAgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVf dHlwZSgtMSk7IH0KCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICBj b25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQogIHJlZmVy ZW5jZSBiYWNrKCkgeyByZXR1cm4gKigtLWVuZCgpKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNr KCkgY29uc3QgeyByZXR1cm4gKigtLWVuZCgpKTsgfQoKICB2b2lkIHN3YXAobGlzdDxfVHAsIF9B bGxvYz4mIF9feCkgeyAgOjpzd2FwKF9NX25vZGUsIF9feC5fTV9ub2RlKTsgfQoKICBpdGVyYXRv ciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpIHsKICAgIF9Ob2Rl KiBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9feCk7CiAgICBfX3RtcC0+X01fbmV4dCA9IF9fcG9z aXRpb24uX01fbm9kZTsKICAgIF9fdG1wLT5fTV9wcmV2ID0gX19wb3NpdGlvbi5fTV9ub2RlLT5f TV9wcmV2OwogICAgKChfTm9kZSopIChfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYpKS0+X01f bmV4dCA9IF9fdG1wOwogICAgX19wb3NpdGlvbi5fTV9ub2RlLT5fTV9wcmV2ID0gX190bXA7CiAg ICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9u KSB7IHJldHVybiBpbnNlcnQoX19wb3NpdGlvbiwgX1RwKCkpOyB9CgogICAKCiAgdGVtcGxhdGU8 Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3Ms IF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9f dHJ1ZV90eXBlKSB7CiAgICBpbnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX194 KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2Vy dF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgX19mYWxzZV90eXBlKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh dG9yPgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVn ZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5zZXJ0X2Rp c3BhdGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgoKCgoKCiAg dm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194 KTsKIAogIHZvaWQgcHVzaF9mcm9udChjb25zdCBfVHAmIF9feCkgeyBpbnNlcnQoYmVnaW4oKSwg X194KTsgfQogIHZvaWQgcHVzaF9mcm9udCgpIHtpbnNlcnQoYmVnaW4oKSk7fQogIHZvaWQgcHVz aF9iYWNrKGNvbnN0IF9UcCYgX194KSB7IGluc2VydChlbmQoKSwgX194KTsgfQogIHZvaWQgcHVz aF9iYWNrKCkge2luc2VydChlbmQoKSk7fQoKICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX3Bv c2l0aW9uKSB7CiAgICBfTm9kZSogX19uZXh0X25vZGUgPSAoX05vZGUqKSAoX19wb3NpdGlvbi5f TV9ub2RlLT5fTV9uZXh0KTsKICAgIF9Ob2RlKiBfX3ByZXZfbm9kZSA9IChfTm9kZSopIChfX3Bv c2l0aW9uLl9NX25vZGUtPl9NX3ByZXYpOwogICAgX19wcmV2X25vZGUtPl9NX25leHQgPSBfX25l eHRfbm9kZTsKICAgIF9fbmV4dF9ub2RlLT5fTV9wcmV2ID0gX19wcmV2X25vZGU7CiAgICBkZXN0 cm95KCZfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX2RhdGEpOwogICAgX01fcHV0X25vZGUoX19wb3Np dGlvbi5fTV9ub2RlKTsKICAgIHJldHVybiBpdGVyYXRvcihfX25leHRfbm9kZSk7CiAgfQogIGl0 ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7CiAgdm9pZCBj bGVhcigpIHsgX0Jhc2U6OmNsZWFyKCk7IH0KCiAgdm9pZCByZXNpemUoc2l6ZV90eXBlIF9fbmV3 X3NpemUsIGNvbnN0IF9UcCYgX194KTsKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6 ZSkgeyByZXNpemUoX19uZXdfc2l6ZSwgX1RwKCkpOyB9CgogIHZvaWQgcG9wX2Zyb250KCkgeyBl cmFzZShiZWdpbigpKTsgfQogIHZvaWQgcG9wX2JhY2soKSB7IAogICAgaXRlcmF0b3IgX190bXAg PSBlbmQoKTsKICAgIGVyYXNlKC0tX190bXApOwogIH0KICBsaXN0KHNpemVfdHlwZSBfX24sIGNv bnN0IF9UcCYgX192YWx1ZSwKICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxv Y2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpCiAgICB7IGluc2VydChiZWdpbigpLCBfX24s IF9fdmFsdWUpOyB9CiAgZXhwbGljaXQgbGlzdChzaXplX3R5cGUgX19uKQogICAgOiBfQmFzZShh bGxvY2F0b3JfdHlwZSgpKQogICAgeyBpbnNlcnQoYmVnaW4oKSwgX19uLCBfVHAoKSk7IH0KCgoK ICAgCiAgIAogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBsaXN0KF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgIGNvbnN0IGFsbG9j YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpCiAgICB7 IGluc2VydChiZWdpbigpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgojIDQzMyAiL3Vzci9sb2NhbC9s aWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVk ZS9nKystMy9zdGxfbGlzdC5oIiAzCgogIGxpc3QoY29uc3QgbGlzdDxfVHAsIF9BbGxvYz4mIF9f eCkgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKQogICAgeyBpbnNlcnQoYmVnaW4oKSwgX194 LmJlZ2luKCksIF9feC5lbmQoKSk7IH0KCiAgfmxpc3QoKSB7IH0KCiAgbGlzdDxfVHAsIF9BbGxv Yz4mIG9wZXJhdG9yPShjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194KTsKCnB1YmxpYzoKICAg CiAgIAogICAKICAgCgogIHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192 YWwpOwoKCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGFzc2lnbihf SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVk ZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVn cmFsOwogICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkp OwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNzaWduX2Rpc3Bh dGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBhc3Np Z24oKHNpemVfdHlwZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXJhdG9yIF9f Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf X2ZhbHNlX3R5cGUpOwoKCgpwcm90ZWN0ZWQ6CiAgdm9pZCB0cmFuc2ZlcihpdGVyYXRvciBfX3Bv c2l0aW9uLCBpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIGlmIChfX3Bv c2l0aW9uICE9IF9fbGFzdCkgewogICAgICAgCiAgICAgICgoX05vZGUqKSAoX19sYXN0Ll9NX25v ZGUtPl9NX3ByZXYpKS0+X01fbmV4dCAgICAgPSBfX3Bvc2l0aW9uLl9NX25vZGU7CiAgICAgICgo X05vZGUqKSAoX19maXJzdC5fTV9ub2RlLT5fTV9wcmV2KSktPl9NX25leHQgICAgPSBfX2xhc3Qu X01fbm9kZTsKICAgICAgKChfTm9kZSopIChfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYpKS0+ X01fbmV4dCA9IF9fZmlyc3QuX01fbm9kZTsgCgogICAgICAgCiAgICAgIF9Ob2RlKiBfX3RtcCA9 IChfTm9kZSopIChfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYpOwogICAgICBfX3Bvc2l0aW9u Ll9NX25vZGUtPl9NX3ByZXYgPSBfX2xhc3QuX01fbm9kZS0+X01fcHJldjsKICAgICAgX19sYXN0 Ll9NX25vZGUtPl9NX3ByZXYgICAgICA9IF9fZmlyc3QuX01fbm9kZS0+X01fcHJldjsgCiAgICAg IF9fZmlyc3QuX01fbm9kZS0+X01fcHJldiAgICA9IF9fdG1wOwogICAgfQogIH0KCnB1YmxpYzoK ICB2b2lkIHNwbGljZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBsaXN0JiBfX3gpIHsKICAgIGlmICgh X194LmVtcHR5KCkpIAogICAgICB0cmFuc2ZlcihfX3Bvc2l0aW9uLCBfX3guYmVnaW4oKSwgX194 LmVuZCgpKTsKICB9CiAgdm9pZCBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYsIGl0 ZXJhdG9yIF9faSkgewogICAgaXRlcmF0b3IgX19qID0gX19pOwogICAgKytfX2o7CiAgICBpZiAo X19wb3NpdGlvbiA9PSBfX2kgfHwgX19wb3NpdGlvbiA9PSBfX2opIHJldHVybjsKICAgIHRyYW5z ZmVyKF9fcG9zaXRpb24sIF9faSwgX19qKTsKICB9CiAgdm9pZCBzcGxpY2UoaXRlcmF0b3IgX19w b3NpdGlvbiwgbGlzdCYsIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAg aWYgKF9fZmlyc3QgIT0gX19sYXN0KSAKICAgICAgdHJhbnNmZXIoX19wb3NpdGlvbiwgX19maXJz dCwgX19sYXN0KTsKICB9CiAgdm9pZCByZW1vdmUoY29uc3QgX1RwJiBfX3ZhbHVlKTsKICB2b2lk IHVuaXF1ZSgpOwogIHZvaWQgbWVyZ2UobGlzdCYgX194KTsKICB2b2lkIHJldmVyc2UoKTsKICB2 b2lkIHNvcnQoKTsKCgogIHRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPiB2b2lkIHJlbW92ZV9p ZihfUHJlZGljYXRlKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4gdm9pZCB1 bmlxdWUoX0JpbmFyeVByZWRpY2F0ZSk7CiAgdGVtcGxhdGUgPGNsYXNzIF9TdHJpY3RXZWFrT3Jk ZXJpbmc+IHZvaWQgbWVyZ2UobGlzdCYsIF9TdHJpY3RXZWFrT3JkZXJpbmcpOwogIHRlbXBsYXRl IDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPiB2b2lkIHNvcnQoX1N0cmljdFdlYWtPcmRlcmlu Zyk7CgoKICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IDw+ICAoCiAgICBjb25zdCBsaXN0JiBfX3gs IGNvbnN0IGxpc3QmIF9feSk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+ CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LAogICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkKewogIHR5cGVk ZWYgdHlwZW5hbWUgbGlzdDxfVHAsX0FsbG9jPjo6X05vZGUgX05vZGU7CiAgX05vZGUqIF9fZTEg PSBfX3guX01fbm9kZTsKICBfTm9kZSogX19lMiA9IF9feS5fTV9ub2RlOwogIF9Ob2RlKiBfX24x ID0gKF9Ob2RlKikgX19lMS0+X01fbmV4dDsKICBfTm9kZSogX19uMiA9IChfTm9kZSopIF9fZTIt Pl9NX25leHQ7CiAgZm9yICggOyBfX24xICE9IF9fZTEgJiYgX19uMiAhPSBfX2UyIDsKICAgICAg ICAgIF9fbjEgPSAoX05vZGUqKSBfX24xLT5fTV9uZXh0LCBfX24yID0gKF9Ob2RlKikgX19uMi0+ X01fbmV4dCkKICAgIGlmIChfX24xLT5fTV9kYXRhICE9IF9fbjItPl9NX2RhdGEpCiAgICAgIHJl dHVybiBmYWxzZTsKICByZXR1cm4gX19uMSA9PSBfX2UxICYmIF9fbjIgPT0gX19lMjsKfQoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29u c3QgbGlzdDxfVHAsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlz dDxfVHAsX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9f eC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f eS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B bGxvYz4KaW5saW5lIHZvaWQgCnN3YXAobGlzdDxfVHAsIF9BbGxvYz4mIF9feCwgbGlzdDxfVHAs IF9BbGxvYz4mIF9feSkKewogIF9feC5zd2FwKF9feSk7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lkIApsaXN0 PF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2ZhbHNlX3R5cGUpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg ICBpbnNlcnQoX19wb3NpdGlvbiwgKl9fZmlyc3QpOwp9CgojIDU4MiAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n KystMy9zdGxfbGlzdC5oIiAzCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2 b2lkIApsaXN0PF9UcCwgX0FsbG9jPjo6aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVf dHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQp7CiAgZm9yICggOyBfX24gPiAwOyAtLV9fbikKICAg IGluc2VydChfX3Bvc2l0aW9uLCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2M+Cmxpc3Q8X1RwLF9BbGxvYz46Oml0ZXJhdG9yIGxpc3Q8X1RwLCBfQWxsb2M+OjplcmFz ZShpdGVyYXRvciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGl0ZXJhdG9yIF9fbGFzdCkKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9f bGFzdCkKICAgIGVyYXNlKF9fZmlyc3QrKyk7CiAgcmV0dXJuIF9fbGFzdDsKfQoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+OjpyZXNpemUo c2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IF9UcCYgX194KQp7CiAgaXRlcmF0b3IgX19pID0g YmVnaW4oKTsKICBzaXplX3R5cGUgX19sZW4gPSAwOwogIGZvciAoIDsgX19pICE9IGVuZCgpICYm IF9fbGVuIDwgX19uZXdfc2l6ZTsgKytfX2ksICsrX19sZW4pCiAgICA7CiAgaWYgKF9fbGVuID09 IF9fbmV3X3NpemUpCiAgICBlcmFzZShfX2ksIGVuZCgpKTsKICBlbHNlICAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBfX2xlbiwgX194KTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpsaXN0PF9UcCwgX0FsbG9jPiYg bGlzdDxfVHAsIF9BbGxvYz46Om9wZXJhdG9yPShjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194 KQp7CiAgaWYgKHRoaXMgIT0gJl9feCkgewogICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigp OwogICAgaXRlcmF0b3IgX19sYXN0MSA9IGVuZCgpOwogICAgY29uc3RfaXRlcmF0b3IgX19maXJz dDIgPSBfX3guYmVnaW4oKTsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7 CiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSAK ICAgICAgKl9fZmlyc3QxKysgPSAqX19maXJzdDIrKzsKICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xh c3QyKQogICAgICBlcmFzZShfX2ZpcnN0MSwgX19sYXN0MSk7CiAgICBlbHNlCiAgICAgIGluc2Vy dChfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+Ojph c3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCkgewogIGl0ZXJhdG9yIF9faSA9 IGJlZ2luKCk7CiAgZm9yICggOyBfX2kgIT0gZW5kKCkgJiYgX19uID4gMDsgKytfX2ksIC0tX19u KQogICAgKl9faSA9IF9fdmFsOwogIGlmIChfX24gPiAwKQogICAgaW5zZXJ0KGVuZCgpLCBfX24s IF9fdmFsKTsKICBlbHNlCiAgICBlcmFzZShfX2ksIGVuZCgpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2b2lkCmxp c3Q8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0Miwg X0lucHV0SXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fZmFsc2VfdHlwZSkKewogIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICBpdGVyYXRv ciBfX2xhc3QxID0gZW5kKCk7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly c3QyICE9IF9fbGFzdDI7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAqX19maXJzdDEgPSAq X19maXJzdDI7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICBlcmFzZShfX2ZpcnN0MSwg X19sYXN0MSk7CiAgZWxzZQogICAgaW5zZXJ0KF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsK fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9B bGxvYz46OnJlbW92ZShjb25zdCBfVHAmIF9fdmFsdWUpCnsKICBpdGVyYXRvciBfX2ZpcnN0ID0g YmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QpIHsKICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICArK19fbmV4dDsKICAg IGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKSBlcmFzZShfX2ZpcnN0KTsKICAgIF9fZmlyc3QgPSBf X25leHQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlz dDxfVHAsIF9BbGxvYz46OnVuaXF1ZSgpCnsKICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsK ICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVy bjsKICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fbmV4dCAhPSBfX2xh c3QpIHsKICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAgICBlcmFzZShfX25leHQpOwog ICAgZWxzZQogICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgX19uZXh0ID0gX19maXJzdDsKICB9 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0Fs bG9jPjo6bWVyZ2UobGlzdDxfVHAsIF9BbGxvYz4mIF9feCkKewogIGl0ZXJhdG9yIF9fZmlyc3Qx ID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgaXRlcmF0b3IgX19maXJz dDIgPSBfX3guYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOwogIHdoaWxl IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9f Zmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3QyOwog ICAgICB0cmFuc2ZlcihfX2ZpcnN0MSwgX19maXJzdDIsICsrX19uZXh0KTsKICAgICAgX19maXJz dDIgPSBfX25leHQ7CiAgICB9CiAgICBlbHNlCiAgICAgICsrX19maXJzdDE7CiAgaWYgKF9fZmly c3QyICE9IF9fbGFzdDIpIHRyYW5zZmVyKF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+ OjpyZXZlcnNlKCkgCnsKICAgCiAgaWYgKF9NX25vZGUtPl9NX25leHQgIT0gX01fbm9kZSAmJgog ICAgICAoKF9Ob2RlKikgKF9NX25vZGUtPl9NX25leHQpKS0+X01fbmV4dCAhPSBfTV9ub2RlKSB7 CiAgICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICAgICsrX19maXJzdDsKICAgIHdoaWxl IChfX2ZpcnN0ICE9IGVuZCgpKSB7CiAgICAgIGl0ZXJhdG9yIF9fb2xkID0gX19maXJzdDsKICAg ICAgKytfX2ZpcnN0OwogICAgICB0cmFuc2ZlcihiZWdpbigpLCBfX29sZCwgX19maXJzdCk7CiAg ICB9CiAgfQp9ICAgIAoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxp c3Q8X1RwLCBfQWxsb2M+Ojpzb3J0KCkKewogICAKICBpZiAoX01fbm9kZS0+X01fbmV4dCAhPSBf TV9ub2RlICYmCiAgICAgICgoX05vZGUqKSAoX01fbm9kZS0+X01fbmV4dCkpLT5fTV9uZXh0ICE9 IF9NX25vZGUpIHsKICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9fY2Fycnk7CiAgICBsaXN0PF9UcCwg X0FsbG9jPiBfX2NvdW50ZXJbNjRdOwogICAgaW50IF9fZmlsbCA9IDA7CiAgICB3aGlsZSAoIWVt cHR5KCkpIHsKICAgICAgX19jYXJyeS5zcGxpY2UoX19jYXJyeS5iZWdpbigpLCAqdGhpcywgYmVn aW4oKSk7CiAgICAgIGludCBfX2kgPSAwOwogICAgICB3aGlsZShfX2kgPCBfX2ZpbGwgJiYgIV9f Y291bnRlcltfX2ldLmVtcHR5KCkpIHsKICAgICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2Nh cnJ5KTsKICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faSsrXSk7CiAgICAgIH0KICAg ICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ldKTsgICAgICAgICAKICAgICAgaWYgKF9faSA9 PSBfX2ZpbGwpICsrX19maWxsOwogICAgfSAKCiAgICBmb3IgKGludCBfX2kgPSAxOyBfX2kgPCBf X2ZpbGw7ICsrX19pKQogICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NvdW50ZXJbX19pLTFd KTsKICAgIHN3YXAoX19jb3VudGVyW19fZmlsbC0xXSk7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CnZvaWQgbGlz dDxfVHAsIF9BbGxvYz46OnJlbW92ZV9pZihfUHJlZGljYXRlIF9fcHJlZCkKewogIGl0ZXJhdG9y IF9fZmlyc3QgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdCA9IGVuZCgpOwogIHdoaWxlIChf X2ZpcnN0ICE9IF9fbGFzdCkgewogICAgaXRlcmF0b3IgX19uZXh0ID0gX19maXJzdDsKICAgICsr X19uZXh0OwogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIGVyYXNlKF9fZmlyc3QpOwogICAgX19m aXJzdCA9IF9fbmV4dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4g dGVtcGxhdGUgPGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46 OnVuaXF1ZShfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKICBpdGVyYXRvciBfX2Zp cnN0ID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QgPSBlbmQoKTsKICBpZiAoX19maXJzdCA9 PSBfX2xhc3QpIHJldHVybjsKICBpdGVyYXRvciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxlICgr K19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19u ZXh0KSkKICAgICAgZXJhc2UoX19uZXh0KTsKICAgIGVsc2UKICAgICAgX19maXJzdCA9IF9fbmV4 dDsKICAgIF9fbmV4dCA9IF9fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgp2b2lkIGxpc3Q8 X1RwLCBfQWxsb2M+OjptZXJnZShsaXN0PF9UcCwgX0FsbG9jPiYgX194LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkKewogIGl0ZXJhdG9y IF9fZmlyc3QxID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgaXRlcmF0 b3IgX19maXJzdDIgPSBfX3guYmVnaW4oKTsKICBpdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgp OwogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAg ICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICBpdGVyYXRvciBfX25l eHQgPSBfX2ZpcnN0MjsKICAgICAgdHJhbnNmZXIoX19maXJzdDEsIF9fZmlyc3QyLCArK19fbmV4 dCk7CiAgICAgIF9fZmlyc3QyID0gX19uZXh0OwogICAgfQogICAgZWxzZQogICAgICArK19fZmly c3QxOwogIGlmIChfX2ZpcnN0MiAhPSBfX2xhc3QyKSB0cmFuc2ZlcihfX2xhc3QxLCBfX2ZpcnN0 MiwgX19sYXN0Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxh dGUgPGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnNv cnQoX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKICAgCiAgaWYgKF9NX25vZGUtPl9NX25l eHQgIT0gX01fbm9kZSAmJgogICAgICAoKF9Ob2RlKikgKF9NX25vZGUtPl9NX25leHQpKS0+X01f bmV4dCAhPSBfTV9ub2RlKSB7CiAgICBsaXN0PF9UcCwgX0FsbG9jPiBfX2NhcnJ5OwogICAgbGlz dDxfVHAsIF9BbGxvYz4gX19jb3VudGVyWzY0XTsKICAgIGludCBfX2ZpbGwgPSAwOwogICAgd2hp bGUgKCFlbXB0eSgpKSB7CiAgICAgIF9fY2Fycnkuc3BsaWNlKF9fY2FycnkuYmVnaW4oKSwgKnRo aXMsIGJlZ2luKCkpOwogICAgICBpbnQgX19pID0gMDsKICAgICAgd2hpbGUoX19pIDwgX19maWxs ICYmICFfX2NvdW50ZXJbX19pXS5lbXB0eSgpKSB7CiAgICAgICAgX19jb3VudGVyW19faV0ubWVy Z2UoX19jYXJyeSwgX19jb21wKTsKICAgICAgICBfX2NhcnJ5LnN3YXAoX19jb3VudGVyW19faSsr XSk7CiAgICAgIH0KICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltfX2ldKTsgICAgICAgICAK ICAgICAgaWYgKF9faSA9PSBfX2ZpbGwpICsrX19maWxsOwogICAgfSAKCiAgICBmb3IgKGludCBf X2kgPSAxOyBfX2kgPCBfX2ZpbGw7ICsrX19pKSAKICAgICAgX19jb3VudGVyW19faV0ubWVyZ2Uo X19jb3VudGVyW19faS0xXSwgX19jb21wKTsKICAgIHN3YXAoX19jb3VudGVyW19fZmlsbC0xXSk7 CiAgfQp9CgoKCgoKCgoKICAKCgoKIAogCiAKIyAzNCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9z cGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9saXN0 IiAyIDMKCgoKCiAKIAogCiMgMTQgIi4uL1NyY1NoYXJlZC9FbVN0cmVhbS5oIiAyCgoKCgogCgpl bnVtIFN0cmVhbUZyb21UeXBlCnsKCWtTdHJlYW1Gcm9tU3RhcnQgPSAxLAoJa1N0cmVhbUZyb21F bmQsCglrU3RyZWFtRnJvbU1hcmtlcgp9OwoKIAoKY2xhc3MgRW1TdHJlYW0KewoJcHVibGljOgoJ CQkJCQkJCUVtU3RyZWFtCQkodm9pZCk7CgkJdmlydHVhbAkJCQkJfkVtU3RyZWFtCQkodm9pZCk7 CgoJCXZpcnR1YWwgdm9pZAkJCVNldE1hcmtlcgkJKGludDMyCQkJaW5PZmZzZXQsCgkJCQkJCQkJ CQkJCSBTdHJlYW1Gcm9tVHlwZQlpbkZyb21XaGVyZSk7CgkJdmlydHVhbCBpbnQzMgkJCUdldE1h cmtlcgkJKHZvaWQpIGNvbnN0OwoKCQl2aXJ0dWFsIHZvaWQJCQlTZXRMZW5ndGgJCShpbnQzMgkJ CWluTGVuZ3RoKTsKCQl2aXJ0dWFsIGludDMyCQkJR2V0TGVuZ3RoCQkodm9pZCkgY29uc3Q7CgoJ CUJvb2wJCQkJCUF0RW5kCQkJKHZvaWQpIGNvbnN0CgkJCQkJCQkJewoJCQkJCQkJCQlyZXR1cm4g R2V0TWFya2VyICgpID49IEdldExlbmd0aCAoKTsKCQkJCQkJCQl9CgoJCQkJCQkgCgoJCXZpcnR1 YWwgRXJyQ29kZQkJCVB1dEJ5dGVzCQkoY29uc3Qgdm9pZCoJaW5CdWZmZXIsCgkJCQkJCQkJCQkJ CSBpbnQzMgkJCWlvQnl0ZUNvdW50KTsKCgkJRW1TdHJlYW0mCQkJCW9wZXJhdG9yIDw8CQkoY29u c3QgY2hhciogaW5TdHJpbmcpOwoJCUVtU3RyZWFtJgkJCQlvcGVyYXRvciA8PAkJKGNvbnN0IHN0 cmluZyYgaW5TdHJpbmcpOwoJCUVtU3RyZWFtJgkJCQlvcGVyYXRvciA8PAkJKGludDggaW5OdW0p OwoJCUVtU3RyZWFtJgkJCQlvcGVyYXRvciA8PAkJKHVpbnQ4IGluTnVtKTsKCQlFbVN0cmVhbSYJ CQkJb3BlcmF0b3IgPDwJCShjaGFyIGluQ2hhcik7CgkJRW1TdHJlYW0mCQkJCW9wZXJhdG9yIDw8 CQkoaW50MTYgaW5OdW0pOwoJCUVtU3RyZWFtJgkJCQlvcGVyYXRvciA8PAkJKHVpbnQxNiBpbk51 bSk7CgkJRW1TdHJlYW0mCQkJCW9wZXJhdG9yIDw8CQkoaW50MzIgaW5OdW0pOwoJCUVtU3RyZWFt JgkJCQlvcGVyYXRvciA8PAkJKHVpbnQzMiBpbk51bSk7CgkJRW1TdHJlYW0mCQkJCW9wZXJhdG9y IDw8CQkoaW50NjQgaW5OdW0pOwoJCUVtU3RyZWFtJgkJCQlvcGVyYXRvciA8PAkJKHVpbnQ2NCBp bk51bSk7CgkJRW1TdHJlYW0mCQkJCW9wZXJhdG9yIDw8CQkoYm9vbCBpbkJvb2wpOwoKCQkJCQkJ IAoKCQl2aXJ0dWFsIEVyckNvZGUJCQlHZXRCeXRlcwkJKHZvaWQqCW91dEJ1ZmZlciwKCQkJCQkJ CQkJCQkJIGludDMyCWlvQnl0ZUNvdW50KTsKCQlpbnQzMgkJCQkJUGVla0RhdGEJCSh2b2lkKglv dXRCdXR0ZXIsCgkJCQkJCQkJCQkJCSBpbnQzMglpbkJ5dGVDb3VudCk7CgoJCUVtU3RyZWFtJgkJ CQlvcGVyYXRvciA+PgkJKGNoYXIqIG91dFN0cmluZyk7CgkJRW1TdHJlYW0mCQkJCW9wZXJhdG9y ID4+CQkoc3RyaW5nJiBvdXRTdHJpbmcpOwoJCUVtU3RyZWFtJgkJCQlvcGVyYXRvciA+PgkJKGlu dDggJm91dE51bSk7CgkJRW1TdHJlYW0mCQkJCW9wZXJhdG9yID4+CQkodWludDggJm91dE51bSk7 CgkJRW1TdHJlYW0mCQkJCW9wZXJhdG9yID4+CQkoY2hhciAmb3V0Q2hhcik7CgkJRW1TdHJlYW0m CQkJCW9wZXJhdG9yID4+CQkoaW50MTYgJm91dE51bSk7CgkJRW1TdHJlYW0mCQkJCW9wZXJhdG9y ID4+CQkodWludDE2ICZvdXROdW0pOwoJCUVtU3RyZWFtJgkJCQlvcGVyYXRvciA+PgkJKGludDMy ICZvdXROdW0pOwoJCUVtU3RyZWFtJgkJCQlvcGVyYXRvciA+PgkJKHVpbnQzMiAmb3V0TnVtKTsK CQlFbVN0cmVhbSYJCQkJb3BlcmF0b3IgPj4JCShpbnQ2NCAmb3V0TnVtKTsKCQlFbVN0cmVhbSYJ CQkJb3BlcmF0b3IgPj4JCSh1aW50NjQgJm91dE51bSk7CgkJRW1TdHJlYW0mCQkJCW9wZXJhdG9y ID4+CQkoYm9vbCAmb3V0Qm9vbCk7CgoJCXRlbXBsYXRlIDxjbGFzcyBUPgoJCUVtU3RyZWFtJgkJ CQlvcGVyYXRvciA+PgkJKGRlcXVlPFQ+JiBjb250YWluZXIpCgkJCQkJCQkJewoJCQkJCQkJCQlJ bnQzMgludW1FbGVtZW50czsKCQkJCQkJCQkJKnRoaXMgPj4gbnVtRWxlbWVudHM7CgoJCQkJCQkJ CQljb250YWluZXIucmVzaXplIChudW1FbGVtZW50cyk7CgoJCQkJCQkJCQlkZXF1ZTxUPjo6aXRl cmF0b3IJaXRlciA9IGNvbnRhaW5lci5iZWdpbiAoKTsKCQkJCQkJCQkJd2hpbGUgKGl0ZXIgIT0g Y29udGFpbmVyLmVuZCAoKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJKnRoaXMgPj4gKml0ZXI7CgkJ CQkJCQkJCQkrK2l0ZXI7CgkJCQkJCQkJCX0KCgkJCQkJCQkJCXJldHVybiAqdGhpczsKCQkJCQkJ CQl9CgoJCXRlbXBsYXRlIDxjbGFzcyBUPgoJCUVtU3RyZWFtJgkJCQlvcGVyYXRvciA+PgkJKGxp c3Q8VD4mIGNvbnRhaW5lcikKCQkJCQkJCQl7CgkJCQkJCQkJCUludDMyCW51bUVsZW1lbnRzOwoJ CQkJCQkJCQkqdGhpcyA+PiBudW1FbGVtZW50czsKCgkJCQkJCQkJCWNvbnRhaW5lci5yZXNpemUg KG51bUVsZW1lbnRzKTsKCgkJCQkJCQkJCWxpc3Q8VD46Oml0ZXJhdG9yCWl0ZXIgPSBjb250YWlu ZXIuYmVnaW4gKCk7CgkJCQkJCQkJCXdoaWxlIChpdGVyICE9IGNvbnRhaW5lci5lbmQgKCkpCgkJ CQkJCQkJCXsKCQkJCQkJCQkJCSp0aGlzID4+ICppdGVyOwoJCQkJCQkJCQkJKytpdGVyOwoJCQkJ CQkJCQl9CgoJCQkJCQkJCQlyZXR1cm4gKnRoaXM7CgkJCQkJCQkJfQoKCQl0ZW1wbGF0ZSA8Y2xh c3MgVD4KCQlFbVN0cmVhbSYJCQkJb3BlcmF0b3IgPj4JCSh2ZWN0b3I8VD4mIGNvbnRhaW5lcikK CQkJCQkJCQl7CgkJCQkJCQkJCUludDMyCW51bUVsZW1lbnRzOwoJCQkJCQkJCQkqdGhpcyA+PiBu dW1FbGVtZW50czsKCgkJCQkJCQkJCWNvbnRhaW5lci5yZXNpemUgKG51bUVsZW1lbnRzKTsKCgkJ CQkJCQkJCXZlY3RvcjxUPjo6aXRlcmF0b3IJaXRlciA9IGNvbnRhaW5lci5iZWdpbiAoKTsKCQkJ CQkJCQkJd2hpbGUgKGl0ZXIgIT0gY29udGFpbmVyLmVuZCAoKSkKCQkJCQkJCQkJewoJCQkJCQkJ CQkJKnRoaXMgPj4gKml0ZXI7CgkJCQkJCQkJCQkrK2l0ZXI7CgkJCQkJCQkJCX0KCgkJCQkJCQkJ CXJldHVybiAqdGhpczsKCQkJCQkJCQl9CgoJCXRlbXBsYXRlIDxjbGFzcyBUPgoJCUVtU3RyZWFt JgkJCQlvcGVyYXRvciA8PAkJKGNvbnN0IGRlcXVlPFQ+JiBjb250YWluZXIpCgkJCQkJCQkJewoJ CQkJCQkJCQlJbnQzMgludW1FbGVtZW50cyA9IGNvbnRhaW5lci5zaXplICgpOwoKCQkJCQkJCQkJ KnRoaXMgPDwgbnVtRWxlbWVudHM7CgoJCQkJCQkJCQlkZXF1ZTxUPjo6Y29uc3RfaXRlcmF0b3IJ aXRlciA9IGNvbnRhaW5lci5iZWdpbiAoKTsKCQkJCQkJCQkJd2hpbGUgKGl0ZXIgIT0gY29udGFp bmVyLmVuZCAoKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJKnRoaXMgPDwgKml0ZXI7CgkJCQkJCQkJ CQkrK2l0ZXI7CgkJCQkJCQkJCX0KCgkJCQkJCQkJCXJldHVybiAqdGhpczsKCQkJCQkJCQl9CgoJ CXRlbXBsYXRlIDxjbGFzcyBUPgoJCUVtU3RyZWFtJgkJCQlvcGVyYXRvciA8PAkJKGNvbnN0IGxp c3Q8VD4mIGNvbnRhaW5lcikKCQkJCQkJCQl7CgkJCQkJCQkJCUludDMyCW51bUVsZW1lbnRzID0g Y29udGFpbmVyLnNpemUgKCk7CgoJCQkJCQkJCQkqdGhpcyA8PCBudW1FbGVtZW50czsKCgkJCQkJ CQkJCWxpc3Q8VD46OmNvbnN0X2l0ZXJhdG9yCWl0ZXIgPSBjb250YWluZXIuYmVnaW4gKCk7CgkJ CQkJCQkJCXdoaWxlIChpdGVyICE9IGNvbnRhaW5lci5lbmQgKCkpCgkJCQkJCQkJCXsKCQkJCQkJ CQkJCSp0aGlzIDw8ICppdGVyOwoJCQkJCQkJCQkJKytpdGVyOwoJCQkJCQkJCQl9CgoJCQkJCQkJ CQlyZXR1cm4gKnRoaXM7CgkJCQkJCQkJfQoKCQl0ZW1wbGF0ZSA8Y2xhc3MgVD4KCQlFbVN0cmVh bSYJCQkJb3BlcmF0b3IgPDwJCShjb25zdCB2ZWN0b3I8VD4mIGNvbnRhaW5lcikKCQkJCQkJCQl7 CgkJCQkJCQkJCUludDMyCW51bUVsZW1lbnRzID0gY29udGFpbmVyLnNpemUgKCk7CgoJCQkJCQkJ CQkqdGhpcyA8PCBudW1FbGVtZW50czsKCgkJCQkJCQkJCXZlY3RvcjxUPjo6Y29uc3RfaXRlcmF0 b3IJaXRlciA9IGNvbnRhaW5lci5iZWdpbiAoKTsKCQkJCQkJCQkJd2hpbGUgKGl0ZXIgIT0gY29u dGFpbmVyLmVuZCAoKSkKCQkJCQkJCQkJewoJCQkJCQkJCQkJKnRoaXMgPDwgKml0ZXI7CgkJCQkJ CQkJCQkrK2l0ZXI7CgkJCQkJCQkJCX0KCgkJCQkJCQkJCXJldHVybiAqdGhpczsKCQkJCQkJCQl9 CgoKCQkgCgkJIAoJCSAKCQkgCgoJCWludDMyCQkJCQlXcml0ZUNTdHJpbmcJKGNvbnN0IGNoYXIq CWluU3RyaW5nKTsKCQlpbnQzMgkJCQkJUmVhZENTdHJpbmcJCShjaGFyKgkJCW91dFN0cmluZyk7 CgoJCWludDMyCQkJCQlXcml0ZVN0cmluZwkJKGNvbnN0IHN0cmluZyYJaW5TdHJpbmcpOwoJCWlu dDMyCQkJCQlSZWFkU3RyaW5nCQkoc3RyaW5nJgkJb3V0U3RyaW5nKTsKCgkJaW50CQkJCQkJUHJp bnRGCQkJKGNvbnN0IGNoYXIqIGZtdCwgLi4uKTsKCQlpbnQJCQkJCQlTY2FuRgkJCShjb25zdCBj aGFyKiBmbXQsIC4uLik7CgoJCWludAkJCQkJCVB1dEMJCQkoaW50KTsKCQlpbnQJCQkJCQlHZXRD CQkJKHZvaWQpOwoKCQlpbnQJCQkJCQlQdXRTCQkJKGNvbnN0IGNoYXIqKTsKCQljaGFyKgkJCQkJ R2V0UwkJCShjaGFyKiwgaW50IG4pOwoKCXByb3RlY3RlZDoKCQlpbnQzMgkJCQkJbU1hcmtlcjsK CQlpbnQzMgkJCQkJbUxlbmd0aDsKfTsKCgoKCmlubGluZSBFbVN0cmVhbSYgb3BlcmF0b3IgPDwg KEVtU3RyZWFtJiBzLCBjb25zdCBNZW1QdHImIHApCnsKCXMgPDwgKGVtdXB0cikgcDsKCglyZXR1 cm4gczsKfQoKaW5saW5lIEVtU3RyZWFtJiBvcGVyYXRvciA+PiAoRW1TdHJlYW0mIHMsIE1lbVB0 ciYgcCkKewoJZW11cHRyCXQ7CglzID4+IHQ7CgoJcCA9IChNZW1QdHIpIHQ7CgoJcmV0dXJuIHM7 Cn0KCmlubGluZSBFbVN0cmVhbSYgb3BlcmF0b3IgPDwgKEVtU3RyZWFtJiBzLCBjb25zdCBNZW1I YW5kbGUmIGgpCnsKCXMgPDwgKGVtdXB0cikgaDsKCglyZXR1cm4gczsKfQoKaW5saW5lIEVtU3Ry ZWFtJiBvcGVyYXRvciA+PiAoRW1TdHJlYW0mIHMsIE1lbUhhbmRsZSYgaCkKewoJZW11cHRyCXQ7 CglzID4+IHQ7CgoJaCA9IChNZW1IYW5kbGUpIHQ7CgoJcmV0dXJuIHM7Cn0KCgojIDM2NiAiLi4v U3JjU2hhcmVkL0VtU3RyZWFtLmgiCgoKY2xhc3MgRW1TdHJlYW1CbG9jayA6IHB1YmxpYyBFbVN0 cmVhbQp7CglwdWJsaWM6CgkJCQkJCQkJRW1TdHJlYW1CbG9jawkodm9pZCosIGludDMyKTsKCQl2 aXJ0dWFsCQkJCQl+RW1TdHJlYW1CbG9jawkodm9pZCk7CgoJCXZpcnR1YWwgdm9pZAkJCVNldExl bmd0aAkJKGludDMyCQkJaW5MZW5ndGgpOwoKCQl2aXJ0dWFsIEVyckNvZGUJCQlQdXRCeXRlcwkJ KGNvbnN0IHZvaWQqCWluQnVmZmVyLAoJCQkJCQkJCQkJCQkgaW50MzIJCQlpb0J5dGVDb3VudCk7 CgkJdmlydHVhbCBFcnJDb2RlCQkJR2V0Qnl0ZXMJCSh2b2lkKgkJCW91dEJ1ZmZlciwKCQkJCQkJ CQkJCQkJIGludDMyCQkJaW9CeXRlQ291bnQpOwoKCXByaXZhdGU6CgkJdm9pZCoJCQkJCWZEYXRh Owp9OwoKCgoKIyAxNyAiLi4vU3JjU2hhcmVkL0NHcmVtbGlucy5oIiAyCgoKCmNsYXNzIFNlc3Np b25GaWxlOwoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBnR3JlbWxpbk5leHQ7CgpjbGFzcyBH cmVtbGlucwp7CnB1YmxpYzoKCQkJCUdyZW1saW5zKCk7CgkJCQl+R3JlbWxpbnMoKTsKCgl2b2lk CQlOZXcoY29uc3QgR3JlbWxpbkluZm8mIGluZm8pOwoKCUJvb2xlYW4JCUlzSW5pdGlhbGl6ZWQo KSBjb25zdDsKCXZvaWQJCUluaXRpYWxpemUoVUludDE2IG5ld051bWJlciA9IC0xLCBVSW50MzIg dW50aWxTdGVwID0gLTEsIFVJbnQzMiBmaW5hbFZhbCA9IC0xKTsKCXZvaWQJCVJlc2V0ICh2b2lk KTsKCgl2b2lkCQlTYXZlKFNlc3Npb25GaWxlICZmKTsKCUJvb2xlYW4JCUxvYWQoU2Vzc2lvbkZp bGUgJmYpOwoKCXZvaWQJCVN0YXR1cyhVSW50MTYgKmN1cnJlbnROdW1iZXIsIFVJbnQzMiAqY3Vy cmVudFN0ZXAsCgkJCQkJVUludDMyICpjdXJyZW50VW50aWwpOwoJQm9vbGVhbgkJU2V0U2VlZChV SW50MzIgbmV3U2VlZCk7Cgl2b2lkCQlTZXRVbnRpbChVSW50MzIgbmV3VW50aWwpOwoJdm9pZAkJ UmVzdG9yZUZpbmFsVW50aWwodm9pZCk7CgoJdm9pZCAJCVN0ZXAoKTsKCXZvaWQJCVJlc3VtZSgp OwoJdm9pZAkJU3RvcCgpOwoKCUJvb2xlYW4JCUdldEZha2VFdmVudCgpOwoJdm9pZAkJR2V0UGVu TW92ZW1lbnQoKTsKCUJvb2xlYW4gCVNlbmRDaGFyc1RvVHlwZSgpOwoKCXZvaWQJCUJ1bXBDb3Vu dGVyKCk7CgoJVUludDMyCUdldFN0YXJ0VGltZSgpCQl7IHJldHVybiBncmVtbGluU3RhcnRUaW1l OyB9CglVSW50MzIJR2V0U3RvcFRpbWUoKQkJeyByZXR1cm4gZ3JlbWxpblN0b3BUaW1lOyAgfQoK CnByaXZhdGU6CgoJVUludDE2CQlrZXlQcm9iYWJpbGl0aWVzU3VtOwkgCiAKCUludDE2CQlsYXN0 UG9pbnRYLCBsYXN0UG9pbnRZOwoJQm9vbGVhbgkJbGFzdFBlbkRvd247CQkJIAoJVUludDE2CQlu dW1iZXI7CQkJCQkgCglVSW50MzIJCWNvdW50ZXI7CQkJCSAKCVVJbnQzMgkJdW50aWw7CQkJCQkg CglVSW50MzIJCWZpbmFsVW50aWw7CQkJCSAKCVVJbnQzMgkJc2F2ZVVudGlsOwoJQm9vbGVhbgkJ aW5pdGVkOwkJCQkJIAoJQm9vbGVhbgkJY2F0Y2hVcDsJCQkJIAoJQm9vbGVhbgkJbmVlZFBlblVw OwkJCQkgCgljaGFyCQljaGFyc1RvVHlwZVsyMDQ4XTsJCSAKCglVSW50MzIJCWdyZW1saW5TdGFy dFRpbWU7CglVSW50MzIJCWdyZW1saW5TdG9wVGltZTsKfTsKCgoKZXh0ZXJuICJDIiB7CgoKZXh0 ZXJuIHZvaWQgR3JlbWxpbnNTZW5kRXZlbnQgKHZvaWQpOwoKZXh0ZXJuIHZvaWQgR3JlbWxpbnNQ cm9jZXNzUGFja2V0ICh2b2lkKiBwa3RCb2R5UCk7CgoKfQoKCgoKIyAxOSAiLi4vU3JjU2hhcmVk L0hvcmRlcy5oIiAyCgoKCmVudW0gSG9yZGVGaWxlVHlwZQp7CglrSG9yZGVQcm9ncmVzc0ZpbGUJ CT0gMHgwMCwKCWtIb3JkZVJvb3RGaWxlCQkJPSAweDAxLAoJa0hvcmRlU3VzcGVuZEZpbGUJCT0g MHgwMiwKCWtIb3JkZUV2ZW50RmlsZQkJCT0gMHgwMywKCWtIb3JkZU1pbmltYWxFdmVudEZpbGUJ PSAweDA0LAoJa0hvcmRlQXV0b0N1cnJlbnRGaWxlCT0gMHgwNQp9OwoKCgogCiAKCmNsYXNzIFNl c3Npb25GaWxlOwoKIApleHRlcm4JbG9uZwkJCQlnR3JlbWxpblNhdmVGcmVxdWVuY3k7CmV4dGVy bglEYXRhYmFzZUluZm9MaXN0CWdHcmVtbGluQXBwTGlzdDsKCmV4dGVybglCb29sCQkJCWdXYXJu aW5nSGFwcGVuZWQ7CmV4dGVybglCb29sCQkJCWdFcnJvckhhcHBlbmVkOwoKY2xhc3MgSG9yZGVz CnsKCXB1YmxpYzoKCQlzdGF0aWMgdm9pZAkJCQlJbml0aWFsaXplCSh2b2lkKTsKCQlzdGF0aWMg dm9pZAkJCQlSZXNldAkJKHZvaWQpOwoJCXN0YXRpYyB2b2lkCQkJCVNhdmUJCShTZXNzaW9uRmls ZSYpOwoJCXN0YXRpYyB2b2lkCQkJCUxvYWQJCShTZXNzaW9uRmlsZSYpOwoJCXN0YXRpYyB2b2lk CQkJCURpc3Bvc2UJCSh2b2lkKTsKCgkJc3RhdGljIHZvaWQJCQkJTmV3CQkJCQkJKGNvbnN0IEhv cmRlSW5mbyYgaW5mbyk7CgoJCSAKCQkgCgoJCXN0YXRpYyB2b2lkCQkJCU5ld0dyZW1saW4JCQkJ KGNvbnN0IEdyZW1saW5JbmZvJiBpbmZvKTsKCgkJc3RhdGljIHZvaWQJCQkJU2F2ZVNlYXJjaFBy b2dyZXNzCQkodm9pZCk7CgkJc3RhdGljIHZvaWQJCQkJUmVzdW1lU2VhcmNoUHJvZ3Jlc3MJKGNv bnN0IEVtRmlsZVJlZiYgZik7CgkJCgkJc3RhdGljIEJvb2wJCQkJSXNPbgkJCQkJKHZvaWQpOwoJ CXN0YXRpYyBCb29sCQkJCUluU2luZ2xlR3JlbWxpbk1vZGUJCSh2b2lkKTsKCQlzdGF0aWMgQm9v bAkJCQlRdWl0V2hlbkRvbmUJCQkodm9pZCk7CgoJCXN0YXRpYyBCb29sCQkJCUNhbk5ldwkJCQkJ KHZvaWQpOwoJCXN0YXRpYyBCb29sCQkJCUNhblN1c3BlbmQJCQkJKHZvaWQpOwoJCXN0YXRpYyBC b29sCQkJCUNhblN0ZXAJCQkJCSh2b2lkKTsKCQlzdGF0aWMgQm9vbAkJCQlDYW5SZXN1bWUJCQkJ KHZvaWQpOwoJCXN0YXRpYyBCb29sCQkJCUNhblN0b3AJCQkJCSh2b2lkKTsKCgkJc3RhdGljIHZv aWQJCQkJU3RhdHVzCQkJCQkodW5zaWduZWQgc2hvcnQqIGN1cnJlbnROdW1iZXIsCgkJCQkJCQkJ CQkJCQkJIHVuc2lnbmVkIGxvbmcqIGN1cnJlbnRTdGVwLAoJCQkJCQkJCQkJCQkJCSB1bnNpZ25l ZCBsb25nKiBjdXJyZW50VW50aWwpOwoKCQlzdGF0aWMgdm9pZAkJCQlUdXJuT24JCQkJCShCb29s IGhvcmRlc09uKTsKCgkJc3RhdGljIGludDMyCQkJR3JlbWxpbk51bWJlcgkJCSh2b2lkKTsKCQlz dGF0aWMgaW50MzIJCQlFdmVudENvdW50ZXIJCQkodm9pZCk7CgkJc3RhdGljIGludDMyCQkJRXZl bnRMaW1pdAkJCQkodm9pZCk7CgoJCXN0YXRpYyB2b2lkCQkJCVN0b3BFdmVudFJlYWNoZWQJCSh2 b2lkKTsKCQlzdGF0aWMgdm9pZAkJCQlFcnJvckVuY291bnRlcmVkCQkodm9pZCk7CgkJc3RhdGlj IHZvaWQJCQkJUmVjb3JkRXJyb3JTdGF0cwkJKFN0ckNvZGUgbWVzc2FnZUlEID0gLTEpOwoKCQlz dGF0aWMgdm9pZCAJCQlTdXNwZW5kCQkJCQkodm9pZCk7CgkJc3RhdGljIHZvaWQgCQkJU3RlcAkJ CQkJKHZvaWQpOwoJCXN0YXRpYyB2b2lkCQkJCVJlc3VtZQkJCQkJKHZvaWQpOwoJCXN0YXRpYyB2 b2lkCQkJCVN0b3AJCQkJCSh2b2lkKTsKCgkJc3RhdGljIHN0cmluZwkJCVN1Z2dlc3RGaWxlTmFt ZQkJCShIb3JkZUZpbGVUeXBlIGNhdGVnb3J5LCB1aW50MzIgbnVtID0gMCk7CgkJc3RhdGljIEVt RmlsZVJlZgkJU3VnZ2VzdEZpbGVSZWYJCQkoSG9yZGVGaWxlVHlwZSBjYXRlZ29yeSwgdWludDMy IG51bSA9IDApOwoKCQlzdGF0aWMgdm9pZAkJCQlQb3N0TG9hZAkJCQkodm9pZCk7CgoJCXN0YXRp YyBCb29sCQkJCVBvc3RGYWtlRXZlbnQJCQkodm9pZCk7CgkJc3RhdGljIHZvaWQJCQkJUG9zdEZh a2VQZW5FdmVudAkJKHZvaWQpOwoJCXN0YXRpYyBCb29sCSAJCQlTZW5kQ2hhcnNUb1R5cGUJCQko dm9pZCk7CgkJc3RhdGljIHZvaWQJCQkJQnVtcENvdW50ZXIJCQkJKHZvaWQpOwoKCQlzdGF0aWMg dWludDMyCQkJRWxhcHNlZE1pbGxpc2Vjb25kcwkJKHZvaWQpOwoKCQlzdGF0aWMgQm9vbAkJCQlD YW5Td2l0Y2hUb0FwcAkJCShVSW50MTYgY2FyZE5vLCBMb2NhbElEIGRiSUQpOwoKCQlzdGF0aWMg dm9pZAkJCQlTZXRHcmVtbGluc0hvbWUJCQkoY29uc3QgRW1EaXJSZWYmIGdyZW1saW5zSG9tZSk7 CgkJc3RhdGljIHZvaWQJCQkJU2V0R3JlbWxpbnNIb21lVG9EZWZhdWx0KHZvaWQpOwoJCXN0YXRp YyBCb29sCQkJCUdldEdyZW1saW5zSG9tZQkJCShFbURpclJlZiYgb3V0UGF0aCk7CgoJCXN0YXRp YyB2b2lkCQkJCUF1dG9TYXZlU3RhdGUJCQkodm9pZCk7CgkJc3RhdGljIHZvaWQJCQkJU2F2ZVN1 c3BlbmRlZFN0YXRlCQkodm9pZCk7CgkJc3RhdGljIHZvaWQJCQkJU2F2ZVJvb3RTdGF0ZQkJCSh2 b2lkKTsKCQlzdGF0aWMgRXJyQ29kZQkJCUxvYWRSb290U3RhdGUJCQkodm9pZCk7CgkJc3RhdGlj IEVyckNvZGUJCQlMb2FkU3VzcGVuZGVkU3RhdGUJCSh2b2lkKTsKCgkJc3RhdGljIHZvaWQJCQkJ TG9hZEV2ZW50cwkJCQkodm9pZCk7CgkJc3RhdGljIHZvaWQJCQkJU2F2ZUV2ZW50cwkJCQkodm9p ZCk7CgoJCXN0YXRpYyB2b2lkCQkJCVN0YXJ0R3JlbWxpbkZyb21Mb2FkZWRSb290U3RhdGUJCSh2 b2lkKTsKCQlzdGF0aWMgdm9pZAkJCQlTdGFydEdyZW1saW5Gcm9tTG9hZGVkU3VzcGVuZGVkU3Rh dGUodm9pZCk7CgkJc3RhdGljIHZvaWQJCQkJU2V0R3JlbWxpblN0YXRlUGF0aEZyb21Db250cm9s RmlsZQkoRW1GaWxlUmVmJiBjb250cm9sRmlsZSk7CgoJCXN0YXRpYyBFbURpclJlZgkJCUdldEdy ZW1saW5EaXJlY3RvcnkJCSh2b2lkKTsKCQlzdGF0aWMgdm9pZCAJCQlVc2VOZXdBdXRvU2F2ZURp cmVjdG9yeSAodm9pZCk7CgkJc3RhdGljIERhdGFiYXNlSW5mb0xpc3QJR2V0QXBwTGlzdAkJCQko dm9pZCk7CgoJCXN0YXRpYyBzdHJpbmcJCQlUcmFuc2xhdGVFcnJvckNvZGUJCShVSW50MzIgZXJy Q29kZSk7CgoJcHJpdmF0ZToKCQlzdGF0aWMgdm9pZAkJCQlOZXh0R3JlbWxpbigpOwoJCXN0YXRp YyB2b2lkCQkJCVByb3Bvc2VOZXh0R3JlbWxpbgkJKGxvbmcmIG91dE5leHRHcmVtbGluLAoJCQkJ CQkJCQkJCQkJCSBsb25nJiBvdXROZXh0RGVwdGgsCgkJCQkJCQkJCQkJCQkJIGxvbmcgaW5Gcm9t R3JlbWxpbiwKCQkJCQkJCQkJCQkJCQkgbG9uZyBpbkZyb21EZXB0aCk7CgkJc3RhdGljIHZvaWQJ CQkJRW5kSG9yZGVzCQkJCSh2b2lkKTsKCgkJc3RhdGljIEVyckNvZGUJCQlMb2FkU3RhdGUJCQkJ KGNvbnN0IEVtRmlsZVJlZiYgcmVmKTsKCgkJc3RhdGljIHZvaWQJCQkJU3RhcnRMb2cJCQkJKHZv aWQpOwoJCXN0YXRpYyBzdHJpbmcJCQlHcmVtbGluc0ZsYWdzVG9TdHJpbmcJKHZvaWQpOwoJCXN0 YXRpYyB2b2lkCQkJCUdyZW1saW5zRmxhZ3NGcm9tU3RyaW5nCShzdHJpbmcmIGluRmxhZ3MpOwoJ CXN0YXRpYyB2b2lkCQkJCUNvbXB1dGVTdGF0aXN0aWNzCQkoaW50MzIgJm1pbiwKCQkJCQkJCQkJ CQkJCQkgaW50MzIgJm1heCwKCQkJCQkJCQkJCQkJCQkgaW50MzIgJmF2ZywKCQkJCQkJCQkJCQkJ CQkgaW50MzIgJnN0ZERldiwKCQkJCQkJCQkJCQkJCQkgaW50MzIgJnNtYWxsRXJyb3JJbmRleCk7 CgkJc3RhdGljIHZvaWQJCQkJR3JlbWxpblJlcG9ydAkJCSh2b2lkKTsKfTsKCgoKIyAxNyAiLi4v U3JjU2hhcmVkL0xvZ2dpbmcuaCIgMgoKIyAxICIuLi9TcmNTaGFyZWQvTWlzY2VsbGFuZW91cy5o IiAxCiAKIAoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgQ2h1bms7CmNsYXNzIEVtUmVjdDsKCmNsYXNz IFN0TWVtb3J5CnsKCXB1YmxpYzoKCQlTdE1lbW9yeQkJKAljaGFyKglpblB0ciA9IF9fbnVsbCAp OwoKCQlTdE1lbW9yeQkJKAlsb25nCWluU2l6ZSwKCQkJCQkJCUJvb2wJaW5DbGVhckJ5dGVzID0g ZmFsc2UpOwoKCQl+U3RNZW1vcnkJCSgpOwoKCQlvcGVyYXRvciBjaGFyKgkoKQkJCXsgcmV0dXJu IG1QdHI7IH0KCgkJY2hhcioJR2V0CQkoKSBjb25zdAl7IHJldHVybiBtUHRyOyB9CgkJQm9vbAlJ c093bmVyCSgpIGNvbnN0CXsgcmV0dXJuIG1Jc093bmVyOyB9CgkJQm9vbAlJc1ZhbGlkCSgpIGNv bnN0CXsgcmV0dXJuIChtUHRyICE9IF9fbnVsbCApOyB9CgoJCXZvaWQJQWRvcHQJKAljaGFyKglp blB0cik7CgkJY2hhcioJUmVsZWFzZQkoKSBjb25zdDsKCQl2b2lkCURpc3Bvc2UJKCk7CgoJcHJv dGVjdGVkOgoJCWNoYXIqCQkJbVB0cjsKCQltdXRhYmxlIEJvb2wJbUlzT3duZXI7CgoJcHJpdmF0 ZToKCQlTdE1lbW9yeQkoIGNvbnN0IFN0TWVtb3J5ICZpblBvaW50ZXJCbG9jayk7CgkJU3RNZW1v cnkmCW9wZXJhdG9yID0gKGNvbnN0IFN0TWVtb3J5ICZpblBvaW50ZXJCbG9jayk7Cn07CgoKY2xh c3MgU3RNZW1vcnlNYXBwZXIKewoJcHVibGljOgoJCVN0TWVtb3J5TWFwcGVyCShjb25zdCB2b2lk KiBtZW1vcnksIGxvbmcgc2l6ZSk7CgkJflN0TWVtb3J5TWFwcGVyCSh2b2lkKTsKCglwcml2YXRl OgoJCWNvbnN0IHZvaWQqCWZNZW1vcnk7Cn07CgpjbGFzcyBTdFdvcmRTd2FwcGVyCnsKCXB1Ymxp YzoKCQlTdFdvcmRTd2FwcGVyICh2b2lkKiBtZW1vcnksIGxvbmcgbGVuZ3RoKTsKCQl+U3RXb3Jk U3dhcHBlciAodm9pZCk7CgoJcHJpdmF0ZToKCQl2b2lkKglmTWVtb3J5OwoJCWxvbmcJZkxlbmd0 aDsKfTsKCgogCiAKIAogCiAKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIEVtVmFs dWVDaGFuZ2VyCnsKCXB1YmxpYzoKCQkJCQkJCQlFbVZhbHVlQ2hhbmdlcihUJiB2YXJpYWJsZSwg VCBuZXdWYWx1ZSkgOgoJCQkJCQkJCQlmVmFyaWFibGUodmFyaWFibGUpLAoJCSAgCQkJCQkJCWZP cmlnVmFsdWUodmFyaWFibGUpCgkJCQkJCQkJewoJCQkJCQkJCQlmVmFyaWFibGUgPSBuZXdWYWx1 ZTsKCQkJCQkJCQl9CgoJCQkJCQkJCX5FbVZhbHVlQ2hhbmdlcigpCgkJCQkJCQkJewoJCQkJCQkJ CQlmVmFyaWFibGUgPSBmT3JpZ1ZhbHVlOwoJCQkJCQkJCX0KCQoJcHJpdmF0ZToKCQlUJgkJCQkJ CWZWYXJpYWJsZTsKCQlUCQkJCQkJZk9yaWdWYWx1ZTsKfTsKCnZvaWQJCVZhbGlkYXRlRm9ybU9i amVjdHMJCShGb3JtUHRyIGZybSk7CnZvaWQJCUNvbGxlY3RPS09iamVjdHMJCShGb3JtUHRyIGZy bSwgdmVjdG9yPFVJbnQxNj4mIG9rT2JqZWN0cyk7CgpCb29sCQlQaW5SZWN0SW5SZWN0CQkJKEVt UmVjdCYgaW5uZXIsIGNvbnN0IEVtUmVjdCYgb3V0ZXIpOwoKY29uc3QgQm9vbAlrQWxsRGF0YWJh c2VzCQk9IGZhbHNlOwpjb25zdCBCb29sCWtBcHBsaWNhdGlvbnNPbmx5CT0gdHJ1ZTsKCnZvaWQJ CUdldERhdGFiYXNlcwkJCShEYXRhYmFzZUluZm9MaXN0JiBhcHBMaXN0LCBCb29sIGFwcGxpY2F0 aW9uc09ubHkpOwoKQm9vbAkJSXNFeGVjdXRhYmxlCQkJKFVJbnQzMiBkYlR5cGUsIFVJbnQzMiBk YkNyZWF0b3IsIFVJbnQxNiBkYkF0dHJzKTsKQm9vbAkJSXNWaXNpYmxlCQkJCShVSW50MzIgZGJU eXBlLCBVSW50MzIgZGJDcmVhdG9yLCBVSW50MTYgZGJBdHRycyk7CnZvaWQgCQlHZXRMb2FkYWJs ZUZpbGVMaXN0IAkoc3RyaW5nIGRpcmVjdG9yeU5hbWUsIEVtRmlsZVJlZkxpc3QmIGZpbGVMaXN0 KTsKdm9pZAkJR2V0RmlsZUNvbnRlbnRzCQkJKGNvbnN0IEVtRmlsZVJlZiYgZmlsZSwgQ2h1bmsm IGNvbnRlbnRzKTsKCnZvaWQJCUluc3RhbGxDYWxpYnJhdGlvbkluZm8JKHZvaWQpOwp2b2lkCQlS ZXNldENhbGlicmF0aW9uSW5mbwkodm9pZCk7CnZvaWQJCVJlc2V0Q2xvY2tzCQkJCSh2b2lkKTsK dm9pZAkJU2V0SG90U3luY1VzZXJOYW1lCQkoY29uc3QgY2hhciopOwoKdm9pZAkJU2VwYXJhdGVM aXN0CQkJKFN0cmluZ0xpc3QmIHN0cmluZ0xpc3QsIHN0cmluZyBzdHIsIGNoYXIgZGVsaW1pdGVy KTsKCnZvaWQJCVJ1bkxlbmd0aEVuY29kZQkJCSh2b2lkKiogc3JjUFAsIHZvaWQqKiBkc3RQUCwg bG9uZyBzcmNCeXRlcywgbG9uZyBkc3RCeXRlcyk7CnZvaWQJCVJ1bkxlbmd0aERlY29kZQkJCSh2 b2lkKiogc3JjUFAsIHZvaWQqKiBkc3RQUCwgbG9uZyBzcmNCeXRlcywgbG9uZyBkc3RCeXRlcyk7 CmxvbmcJCVJ1bkxlbmd0aFdvcnN0U2l6ZQkJKGxvbmcpOwoKdm9pZAkJR3ppcEVuY29kZQkJCQko dm9pZCoqIHNyY1BQLCB2b2lkKiogZHN0UFAsIGxvbmcgc3JjQnl0ZXMsIGxvbmcgZHN0Qnl0ZXMp Owp2b2lkCQlHemlwRGVjb2RlCQkJCSh2b2lkKiogc3JjUFAsIHZvaWQqKiBkc3RQUCwgbG9uZyBz cmNCeXRlcywgbG9uZyBkc3RCeXRlcyk7CmxvbmcJCUd6aXBXb3JzdFNpemUJCQkobG9uZyk7Cgpp bnQJCQlDb3VudEJpdHMJCQkJKHVpbnQzMiB2KTsKaW5saW5lIGludAlDb3VudEJpdHMJCQkJKHVp bnQxNiB2KSB7IHJldHVybiBDb3VudEJpdHMgKCh1aW50MzIpICh1aW50MTYpIHYpOyB9CmlubGlu ZSBpbnQJQ291bnRCaXRzCQkJCSh1aW50OCB2KSB7IHJldHVybiBDb3VudEJpdHMgKCh1aW50MzIp ICh1aW50OCkgdik7IH0KCmlubGluZSBpbnQJQ291bnRCaXRzCQkJCShpbnQzMiB2KSB7IHJldHVy biBDb3VudEJpdHMgKCh1aW50MzIpICh1aW50MzIpIHYpOyB9CmlubGluZSBpbnQJQ291bnRCaXRz CQkJCShpbnQxNiB2KSB7IHJldHVybiBDb3VudEJpdHMgKCh1aW50MzIpICh1aW50MTYpIHYpOyB9 CmlubGluZSBpbnQJQ291bnRCaXRzCQkJCShpbnQ4IHYpIHsgcmV0dXJuIENvdW50Qml0cyAoKHVp bnQzMikgKHVpbnQ4KSB2KTsgfQoKaW5saW5lIEJvb2wJSXNFdmVuCQkJCQkodWludDMyIHYpIHsg cmV0dXJuICh2ICYgMSkgPT0gMDsgfQppbmxpbmUgQm9vbAlJc09kZAkJCQkJKHVpbnQzMiB2KSB7 IHJldHVybiAodiAmIDEpICE9IDA7IH0KCnVpbnQzMgkJTmV4dFBvd2VyT2YyCQkJKHVpbnQzMiB4 KTsKdWludDMyCQlEYXRlVG9EYXlzCQkJCSh1aW50MzIgeWVhciwgdWludDMyIG1vbnRoLCB1aW50 MzIgZGF5KTsKCnN0cmluZwkJR2V0TGlicmFyeU5hbWUJCQkodWludDE2IHJlZk51bSk7CgpCb29s CQlHZXRTeXN0ZW1DYWxsQ29udGV4dAkoZW11cHRyLCBTeXN0ZW1DYWxsQ29udGV4dCYpOwoKdm9p ZAkJR2V0SG9zdFRpbWUJCQkJKGxvbmcqIGhvdXIsIGxvbmcqIG1pbiwgbG9uZyogc2VjKTsKdm9p ZAkJR2V0SG9zdERhdGUJCQkJKGxvbmcqIHllYXIsIGxvbmcqIG1vbnRoLCBsb25nKiBkYXkpOwoK Qm9vbAkJU3RhcnRzV2l0aAkJCQkoY29uc3QgY2hhciogcywgY29uc3QgY2hhciogcGF0dGVybik7 CkJvb2wJCUVuZHNXaXRoCQkJCShjb25zdCBjaGFyKiBzLCBjb25zdCBjaGFyKiBwYXR0ZXJuKTsK c3RyaW5nCQlTdHJpcAkJCQkJKGNvbnN0IGNoYXIqIHMsIGNvbnN0IGNoYXIqLCBCb29sIGxlYWRp bmcsIEJvb2wgdHJhaWxpbmcpOwpzdHJpbmcJCVN0cmlwCQkJCQkoY29uc3Qgc3RyaW5nJiBzLCBj b25zdCBjaGFyKiwgQm9vbCBsZWFkaW5nLCBCb29sIHRyYWlsaW5nKTsKc3RyaW5nCQlSZXBsYWNl U3RyaW5nCQkJKGNvbnN0IHN0cmluZyYgc291cmNlLAoJCQkJCQkJCQkgY29uc3Qgc3RyaW5nJiBw YXR0ZXJuLAoJCQkJCQkJCQkgY29uc3Qgc3RyaW5nJiByZXBsYWNlbWVudCk7CnZvaWQJCUZvcm1h dEludGVnZXIJCQkoY2hhciogZGVzdCwgdWludDMyIGludGVnZXIpOwpzdHJpbmcJCUZvcm1hdElu dGVnZXIJCQkodWludDMyIGludGVnZXIpOwpzdHJpbmcJCUZvcm1hdEVsYXBzZWRUaW1lCQkodWlu dDMyIG1TZWNzKTsKY29uc3QgY2hhcioJTGF1bmNoQ21kVG9TdHJpbmcJCShVSW50MTYgY21kKTsK dm9pZAkJU3RhY2tDcmF3bFN0cmluZ3MJCShjb25zdCBFbVN0YWNrRnJhbWVMaXN0JiBzdGFja0Ny YXdsLAoJCQkJCQkJCQkgU3RyaW5nTGlzdCYgc3RhY2tDcmF3bFN0cmluZ3MpOwpzdHJpbmcJCVN0 YWNrQ3Jhd2xTdHJpbmcgCQkoY29uc3QgRW1TdGFja0ZyYW1lTGlzdCYgc3RhY2tDcmF3bCwKCQkJ CQkJCQkJIGxvbmcgbWF4TGVuLCBCb29sIGluY2x1ZGVGcmFtZVNpemUsCgkJCQkJCQkJCSBlbXVw dHIgb2xkU3RhY2tMb3cpOwoKdHlwZWRlZiBwYWlyIDxSQU1TaXplVHlwZSwgc3RyaW5nPglNZW1v cnlUZXh0Owp0eXBlZGVmIHZlY3RvciA8TWVtb3J5VGV4dD4JCQlNZW1vcnlUZXh0TGlzdDsKCnZv aWQJCUdldE1lbW9yeVRleHRMaXN0CQkoTWVtb3J5VGV4dExpc3QmIG1lbW9yeUxpc3QpOwoKCiMg MTggIi4uL1NyY1NoYXJlZC9Mb2dnaW5nLmgiIDIKCiMgMSAiLi4vU3JjU2hhcmVkL1ByZWZlcmVu Y2VNZ3IuaCIgMQogCiAKCgoKCgoKCgoKCgoKCgoKCiMgMSAiLi4vU3JjU2hhcmVkL0hhcmR3YXJl L0VtSEFMLmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKIyAxICIuLi9TcmNTaGFyZWQvU2tpbnMuaCIg MQogCiAKCgoKCgoKCgoKCgoKCgoKIyAxICIuLi9TcmNTaGFyZWQvRW1SZWN0LmgiIDEKIAogCgoK CgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi4uL1NyY1No YXJlZC9FbVBvaW50LmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoJCgoKdGVtcGxhdGUgPGNsYXNzIGNvb3JkPgpjbGFzcyBFbVBvaW50 VGVtcGwKewoJcHVibGljOgoJCQkJCQkJCUVtUG9pbnRUZW1wbAkodm9pZCkKCQkJCQkJCQl7fQoJ CQkJCQkJCUVtUG9pbnRUZW1wbAkoY29vcmQgeCwgY29vcmQgeSkgOgoKCgoKCQkJCQkJCQkgICAg ZlkgKHkpLAoJCQkJCQkJCQlmWCAoeCkKCgkJCQkJCQkJe30KCQkJCQkJCQlFbVBvaW50VGVtcGwJ KGNvbnN0IEVtUG9pbnRUZW1wbDxjb29yZD4mIHB0KSA6CgoKCgoJCQkJCQkJCSAgICBmWSAocHQu ZlkpLAoJCQkJCQkJCQlmWCAocHQuZlgpCgoJCQkJCQkJCXt9CiAKCQkJIAoJCQkgCgkJCSAKCQkJ CgkJdm9pZAkJCQkJT2Zmc2V0CQkJKGNvb3JkIHgsIGNvb3JkIHkpOwoJCQkgCgkJCSAKCgkJRW1Q b2ludFRlbXBsPGNvb3JkPgkJb3BlcmF0b3IrCQkoY29uc3QgRW1Qb2ludFRlbXBsPGNvb3JkPiYg cHQpIGNvbnN0OwoJCUVtUG9pbnRUZW1wbDxjb29yZD4JCW9wZXJhdG9yLQkJKGNvbnN0IEVtUG9p bnRUZW1wbDxjb29yZD4mIHB0KSBjb25zdDsKCQkJIAoJCQkgCgoJCUVtUG9pbnRUZW1wbDxjb29y ZD4JCW9wZXJhdG9yLQkJKHZvaWQpIGNvbnN0OwoJCQkgCgoJCUVtUG9pbnRUZW1wbDxjb29yZD4m CW9wZXJhdG9yKz0JCShjb25zdCBFbVBvaW50VGVtcGw8Y29vcmQ+JiBwdCk7CgkJRW1Qb2ludFRl bXBsPGNvb3JkPiYJb3BlcmF0b3ItPQkJKGNvbnN0IEVtUG9pbnRUZW1wbDxjb29yZD4mIHB0KTsK CQkJIAoJCQkgCgoJCUVtUG9pbnRUZW1wbDxjb29yZD4JCW9wZXJhdG9yKgkJKGNvbnN0IEVtUG9p bnRUZW1wbDxjb29yZD4mIHB0KSBjb25zdDsKCQlFbVBvaW50VGVtcGw8Y29vcmQ+CQlvcGVyYXRv ci8JCShjb25zdCBFbVBvaW50VGVtcGw8Y29vcmQ+JiBwdCkgY29uc3Q7CgkJRW1Qb2ludFRlbXBs PGNvb3JkPiYJb3BlcmF0b3IqPQkJKGNvbnN0IEVtUG9pbnRUZW1wbDxjb29yZD4mIHB0KTsKCQlF bVBvaW50VGVtcGw8Y29vcmQ+JglvcGVyYXRvci89CQkoY29uc3QgRW1Qb2ludFRlbXBsPGNvb3Jk PiYgcHQpOwoJCQkgCgoJCUJvb2xlYW4JCQkJCW9wZXJhdG9yIT0JCShjb25zdCBFbVBvaW50VGVt cGw8Y29vcmQ+JiBwdCkgY29uc3Q7CgkJQm9vbGVhbgkJCQkJb3BlcmF0b3I9PQkJKGNvbnN0IEVt UG9pbnRUZW1wbDxjb29yZD4mIHB0KSBjb25zdDsKCQkJIAoJCQkgCgoJCQkgCgoKCgoJCWNvb3Jk CWZZOwoJCWNvb3JkCWZYOwoKfTsKCgogCiAKIAoKc3RydWN0CXRhZ1NJWkU7CnR5cGVkZWYJc3Ry dWN0IHRhZ1NJWkUgU0laRTsKY2xhc3MJQ1NpemU7CgpzdHJ1Y3QJdGFnUE9JTlQ7CnR5cGVkZWYg c3RydWN0IHRhZ1BPSU5UIFBPSU5UOwpjbGFzcwlDUG9pbnQ7CgpzdHJ1Y3QJU0RpbWVuc2lvbjE2 OwpzdHJ1Y3QJU0RpbWVuc2lvbjMyOwoKc3RydWN0CVBvaW50Owp0eXBlZGVmIFBvaW50CVNQb2lu dDE2OwoKc3RydWN0CVNQb2ludDMyOwpzdHJ1Y3QJVlBvaW50OwoKCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoJCgkKCgogCiAKIAoKY2xh c3MgRW1Qb2ludCA6IHB1YmxpYyBFbVBvaW50VGVtcGw8RW1Db29yZD4KewoJcHVibGljOgoJCUVt UG9pbnQoKSB7fTsKCQlFbVBvaW50KEVtQ29vcmQgeCwgRW1Db29yZCB5KSA6IEVtUG9pbnRUZW1w bDxFbUNvb3JkPih4LCB5KSB7fTsKCQlFbVBvaW50KGNvbnN0IEVtUG9pbnRUZW1wbDxFbUNvb3Jk PiYgcHQpIDogRW1Qb2ludFRlbXBsPEVtQ29vcmQ+KHB0KSB7fTsKIAoKCSAKCSAKCSAKCSAKCSAK CQkKCQkKCgoKCQlFbVBvaW50KGNvbnN0ICBTRGltZW5zaW9uMTYgJik7CWNvbnN0IEVtUG9pbnQm IG9wZXJhdG9yPShjb25zdCAgU0RpbWVuc2lvbjE2ICYpOyAJRW1Qb2ludChjb25zdCAgUG9pbnRU eXBlICYpOwljb25zdCBFbVBvaW50JiBvcGVyYXRvcj0oY29uc3QgIFBvaW50VHlwZSAmKTsgIAoJ CUVtUG9pbnQoY29uc3QgIFNJWkUgJik7CWNvbnN0IEVtUG9pbnQmIG9wZXJhdG9yPShjb25zdCAg U0laRSAmKTsgCUVtUG9pbnQoY29uc3QgIENTaXplICYpOwljb25zdCBFbVBvaW50JiBvcGVyYXRv cj0oY29uc3QgIENTaXplICYpOyAJRW1Qb2ludChjb25zdCAgU0RpbWVuc2lvbjMyICYpOwljb25z dCBFbVBvaW50JiBvcGVyYXRvcj0oY29uc3QgIFNEaW1lbnNpb24zMiAmKTsgCUVtUG9pbnQoY29u c3QgIFBPSU5UICYpOwljb25zdCBFbVBvaW50JiBvcGVyYXRvcj0oY29uc3QgIFBPSU5UICYpOyAJ RW1Qb2ludChjb25zdCAgQ1BvaW50ICYpOwljb25zdCBFbVBvaW50JiBvcGVyYXRvcj0oY29uc3Qg IENQb2ludCAmKTsgCUVtUG9pbnQoY29uc3QgIFNQb2ludDMyICYpOwljb25zdCBFbVBvaW50JiBv cGVyYXRvcj0oY29uc3QgIFNQb2ludDMyICYpOyAgCgkJRW1Qb2ludChjb25zdCAgUG9pbnQgJik7 CWNvbnN0IEVtUG9pbnQmIG9wZXJhdG9yPShjb25zdCAgUG9pbnQgJik7ICAKCQlFbVBvaW50KGNv bnN0ICBWUG9pbnQgJik7CWNvbnN0IEVtUG9pbnQmIG9wZXJhdG9yPShjb25zdCAgVlBvaW50ICYp OyAgCgoJIAoJIAoJIAoJIAoJCQoJCQoKCgkJb3BlcmF0b3IgIFNJWkUgKCkgY29uc3Q7IAlvcGVy YXRvciAgQ1NpemUgKCkgY29uc3Q7IAlvcGVyYXRvciAgU0RpbWVuc2lvbjMyICgpIGNvbnN0OyAJ b3BlcmF0b3IgIFBPSU5UICgpIGNvbnN0OyAJb3BlcmF0b3IgIENQb2ludCAoKSBjb25zdDsgCW9w ZXJhdG9yICBTUG9pbnQzMiAoKSBjb25zdDsgIAoJCW9wZXJhdG9yICBWUG9pbnQgKCkgY29uc3Q7 ICAKCQlvcGVyYXRvciAgU0RpbWVuc2lvbjE2ICgpIGNvbnN0OyAJb3BlcmF0b3IgIFBvaW50VHlw ZSAoKSBjb25zdDsgIAoJCW9wZXJhdG9yICBQb2ludCAoKSBjb25zdDsgIAoKCSAKCSAKCSAKCSAK CQkKCQkKCgoKCgoJCW9wZXJhdG9yIGNvbnN0ICBWUG9pbnQgKigpIGNvbnN0OwlvcGVyYXRvciAg VlBvaW50ICooKTsJb3BlcmF0b3IgY29uc3QgIFZQb2ludCAmKCkgY29uc3Q7CW9wZXJhdG9yICBW UG9pbnQgJigpOyAgIAp9OwoKCiMgNDggIi4uL1NyY1NoYXJlZC9FbVJlY3QuaCIgMgoKCgoKCgkK CgoKCnRlbXBsYXRlIDxjbGFzcyBjb29yZD4KY2xhc3MgRW1SZWN0VGVtcGwKewoJcHVibGljOgoJ CQkJCQkJCUVtUmVjdFRlbXBsCSgpCgkJCQkJCQkJe30KCQkJCQkJCQlFbVJlY3RUZW1wbAkoY29v cmQgbGVmdCwgY29vcmQgdG9wLCBjb29yZCByaWdodCwgY29vcmQgYm90dG9tKSA6CgoKCgoKCgkJ CQkJCQkJCWZUb3AgKHRvcCksCgkJCQkJCQkJCWZMZWZ0IChsZWZ0KSwKCQkJCQkJCQkJZkJvdHRv bSAoYm90dG9tKSwKCQkJCQkJCQkJZlJpZ2h0IChyaWdodCkKCgkJCQkJCQkJe30KCQkJCQkJCQlF bVJlY3RUZW1wbAkoY29uc3QgRW1Qb2ludFRlbXBsPGNvb3JkPiYgdG9wTGVmdCwgY29uc3QgRW1Q b2ludFRlbXBsPGNvb3JkPiYgYm90dG9tUmlnaHQpIDoKCgoKCgoKCQkJCQkJCQkJZlRvcCAodG9w TGVmdC5mWSksCgkJCQkJCQkJCWZMZWZ0ICh0b3BMZWZ0LmZYKSwKCQkJCQkJCQkJZkJvdHRvbSAo Ym90dG9tUmlnaHQuZlkpLAoJCQkJCQkJCQlmUmlnaHQgKGJvdHRvbVJpZ2h0LmZYKQoKCQkJCQkJ CQl7fQoJCQkJCQkJCUVtUmVjdFRlbXBsCShjb25zdCBFbVJlY3RUZW1wbDxjb29yZD4mIG90aGVy KSA6CgoKCgoKCgkJCQkJCQkJCWZUb3AgKG90aGVyLmZUb3ApLAoJCQkJCQkJCQlmTGVmdCAob3Ro ZXIuZkxlZnQpLAoJCQkJCQkJCQlmQm90dG9tIChvdGhlci5mQm90dG9tKSwKCQkJCQkJCQkJZlJp Z2h0IChvdGhlci5mUmlnaHQpCgoJCQkJCQkJCXt9CgogCgkJCSAKCQkJIAoJCQkgCgoJCWNvb3Jk CQkJCQlXaWR0aAkJKHZvaWQpIGNvbnN0OwoJCWNvb3JkCQkJCQlIZWlnaHQJCSh2b2lkKSBjb25z dDsKCQkJIAoJCQkgCgoJCUVtUG9pbnRUZW1wbDxjb29yZD4JCVNpemUJCSh2b2lkKSBjb25zdDsK CQkJIAoJCQkgCgoJCUVtUG9pbnRUZW1wbDxjb29yZD4JCVRvcExlZnQJCSh2b2lkKSBjb25zdDsK CQlFbVBvaW50VGVtcGw8Y29vcmQ+CQlUb3BSaWdodAkodm9pZCkgY29uc3Q7CgkJRW1Qb2ludFRl bXBsPGNvb3JkPgkJQm90dG9tTGVmdAkodm9pZCkgY29uc3Q7CgkJRW1Qb2ludFRlbXBsPGNvb3Jk PgkJQm90dG9tUmlnaHQJKHZvaWQpIGNvbnN0OwoJCUVtUG9pbnRUZW1wbDxjb29yZD4JCU5vcnRo CQkodm9pZCkgY29uc3Q7CgkJRW1Qb2ludFRlbXBsPGNvb3JkPgkJU291dGgJCSh2b2lkKSBjb25z dDsKCQlFbVBvaW50VGVtcGw8Y29vcmQ+CQlFYXN0CQkodm9pZCkgY29uc3Q7CgkJRW1Qb2ludFRl bXBsPGNvb3JkPgkJV2VzdAkJKHZvaWQpIGNvbnN0OwoJCUVtUG9pbnRUZW1wbDxjb29yZD4JCUNl bnRlcgkJKHZvaWQpIGNvbnN0OwoJCQkgCgkJCSAKCQkJIAoJCQkgCgkJCSAKCQkJIAoJCQkgCgkJ CSAKCQkJIAoJCQkgCgkJCSAKCQkJIAoKCQlCb29sCQkJCQlJc0VtcHR5CQkodm9pZCkgY29uc3Q7 CgkJCSAKCQkJIAoKCQlCb29sCQkJCQlJc051bGwJCSh2b2lkKSBjb25zdDsKCQkJIAoKCQlCb29s CQkJCQlJc0VxdWFsCQkoY29uc3QgRW1SZWN0VGVtcGw8Y29vcmQ+JiBvdGhlcikgY29uc3Q7CgkJ CSAKCQkJIAoKCQlCb29sCQkJCQlDb250YWlucwkoY29uc3QgRW1Qb2ludFRlbXBsPGNvb3JkPiYp IGNvbnN0OwoJCUJvb2wJCQkJCUNvbnRhaW5zCShjb25zdCBFbVJlY3RUZW1wbDxjb29yZD4mKSBj b25zdDsKCQkJIAoJCQkgCgoJCUJvb2wJCQkJCUludGVyc2VjdHMJKGNvbnN0IEVtUmVjdFRlbXBs PGNvb3JkPiYpIGNvbnN0OwoJCQkgCgoJCXZvaWQJCQkJCVNldAkJCShjb29yZCBsZWZ0LCBjb29y ZCB0b3AsIGNvb3JkIHJpZ2h0LCBjb29yZCBib3R0b20pOwoJCXZvaWQJCQkJCVNldAkJCShjb25z dCBFbVBvaW50VGVtcGw8Y29vcmQ+JiB0b3BMZWZ0LCBjb25zdCBFbVBvaW50VGVtcGw8Y29vcmQ+ JiBib3R0b21SaWdodCk7CgkJCSAKCQkJIAoKCQl2b2lkCQkJCQlCZUVtcHR5CQkodm9pZCk7CgkJ CSAKCQkJIAoJCQkgCgoJCXZvaWQJCQkJCUluc2V0CQkoY29vcmQgeCwgY29vcmQgeSk7CgkJCSAK CgkJdm9pZAkJCQkJT2Zmc2V0CQkoY29vcmQgeCwgY29vcmQgeSk7CgkJCSAKCQkJIAoKCQl2b2lk CQkJCQlTY2FsZVVwCQkoY29vcmQgeCwgY29vcmQgeSk7CgkJCSAKCQkJIAoKCQl2b2lkCQkJCQlT Y2FsZURvd24JKGNvb3JkIHgsIGNvb3JkIHkpOwoJCQkgCgkJCSAKCgkJdm9pZAkJCQkJSW50ZXJz ZWN0V2l0aChjb25zdCBFbVJlY3RUZW1wbDxjb29yZD4mIG90aGVyKTsKCQkJIAoJCQkgCgkJCSAK CQkJIAoKCQl2b2lkCQkJCQlVbmlvbldpdGgJKGNvbnN0IEVtUmVjdFRlbXBsPGNvb3JkPiYgb3Ro ZXIpOwoJCQkgCgkJCSAKCQkJIAoJCQkgCgoJCXZvaWQJCQkJCUV4dGVuZFRvCShjb25zdCBFbVBv aW50VGVtcGw8Y29vcmQ+JiBwdCk7CgkJdm9pZAkJCQkJRXh0ZW5kVG8JKGNvbnN0IEVtUmVjdFRl bXBsPGNvb3JkPiYgb3RoZXIpOwoJCQkgCgkJCSAKCQkJIAoJCQkgCgoJCXZvaWQJCQkJCU5vcm1h bGl6ZQkodm9pZCk7CgkJCSAKCQkJIAoKCQlFbVJlY3RUZW1wbDxjb29yZD4JCW9wZXJhdG9yKwko Y29uc3QgRW1Qb2ludFRlbXBsPGNvb3JkPiYgcHQpIGNvbnN0OwoJCUVtUmVjdFRlbXBsPGNvb3Jk PgkJb3BlcmF0b3ItCShjb25zdCBFbVBvaW50VGVtcGw8Y29vcmQ+JiBwdCkgY29uc3Q7CgkJRW1S ZWN0VGVtcGw8Y29vcmQ+JgkJb3BlcmF0b3IrPQkoY29uc3QgRW1Qb2ludFRlbXBsPGNvb3JkPiYg cHQpOwoJCUVtUmVjdFRlbXBsPGNvb3JkPiYJCW9wZXJhdG9yLT0JKGNvbnN0IEVtUG9pbnRUZW1w bDxjb29yZD4mIHB0KTsKCQkJIAoJCQkgCgkJCSAKCQkJIAoKCQlFbVJlY3RUZW1wbDxjb29yZD4J CW9wZXJhdG9yKgkoY29uc3QgRW1Qb2ludFRlbXBsPGNvb3JkPiYgcHQpIGNvbnN0OwoJCUVtUmVj dFRlbXBsPGNvb3JkPgkJb3BlcmF0b3IvCShjb25zdCBFbVBvaW50VGVtcGw8Y29vcmQ+JiBwdCkg Y29uc3Q7CgkJRW1SZWN0VGVtcGw8Y29vcmQ+JgkJb3BlcmF0b3IqPQkoY29uc3QgRW1Qb2ludFRl bXBsPGNvb3JkPiYgcHQpOwoJCUVtUmVjdFRlbXBsPGNvb3JkPiYJCW9wZXJhdG9yLz0JKGNvbnN0 IEVtUG9pbnRUZW1wbDxjb29yZD4mIHB0KTsKCQkJIAoJCQkgCgkJCSAKCQkJIAoKCQlCb29sCQkJ CQlvcGVyYXRvcj09CShjb25zdCBFbVJlY3RUZW1wbDxjb29yZD4mIHJ0KSBjb25zdDsKCQlCb29s CQkJCQlvcGVyYXRvciE9CShjb25zdCBFbVJlY3RUZW1wbDxjb29yZD4mIHJ0KSBjb25zdDsKCQkJ IAoJCQkgCgoJCUVtUmVjdFRlbXBsPGNvb3JkPgkJb3BlcmF0b3ImCShjb25zdCBFbVJlY3RUZW1w bDxjb29yZD4mIHJ0KSBjb25zdDsJIAoJCUVtUmVjdFRlbXBsPGNvb3JkPgkJb3BlcmF0b3J8CShj b25zdCBFbVJlY3RUZW1wbDxjb29yZD4mIHJ0KSBjb25zdDsJIAoJCUVtUmVjdFRlbXBsPGNvb3Jk PiYJCW9wZXJhdG9yJj0JKGNvbnN0IEVtUmVjdFRlbXBsPGNvb3JkPiYgcnQpOwoJCUVtUmVjdFRl bXBsPGNvb3JkPiYJCW9wZXJhdG9yfD0JKGNvbnN0IEVtUmVjdFRlbXBsPGNvb3JkPiYgcnQpOwoJ CQkgCgkJCSAKCQkJIAoKCQkJIAoKCgoKCgoJCWNvb3JkCWZUb3A7CgkJY29vcmQJZkxlZnQ7CgkJ Y29vcmQJZkJvdHRvbTsKCQljb29yZAlmUmlnaHQ7Cgp9OwoKCiAKIAogCgpzdHJ1Y3QJdGFnUkVD VDsKdHlwZWRlZiBzdHJ1Y3QgdGFnUkVDVCBSRUNUOwpjbGFzcwlDUmVjdDsKCnN0cnVjdAlSZWN0 OwpzdHJ1Y3QJVlJlY3Q7CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoJCgkKCgogCiAKIAoKY2xhc3MgRW1SZWN0IDogcHVibGljIEVtUmVjdFRl bXBsPEVtQ29vcmQ+CnsKCXB1YmxpYzoKCQkJCQkJCQlFbVJlY3QJKCkKCQkJCQkJCQl7fQoJCQkJ CQkJCUVtUmVjdAkoRW1Db29yZCBsZWZ0LCBFbUNvb3JkIHRvcCwgRW1Db29yZCByaWdodCwgRW1D b29yZCBib3R0b20pIDoKCQkJCQkJCQkJRW1SZWN0VGVtcGw8RW1Db29yZD4gKGxlZnQsIHRvcCwg cmlnaHQsIGJvdHRvbSkKCQkJCQkJCQl7fQoJCQkJCQkJCUVtUmVjdAkoY29uc3QgUmVjdGFuZ2xl VHlwZSYgcikgOgoJCQkJCQkJCQlFbVJlY3RUZW1wbDxFbUNvb3JkPiAoCXIudG9wTGVmdC54LCBy LnRvcExlZnQueSwKCQkJCQkJCQkJCQkJCQkJci50b3BMZWZ0LnggKyByLmV4dGVudC54LAoJCQkJ CQkJCQkJCQkJCQlyLnRvcExlZnQueSArIHIuZXh0ZW50LnkpCgkJCQkJCQkJe30KCQkJCQkJCQlF bVJlY3QJKGNvbnN0IEVtUG9pbnRUZW1wbDxFbUNvb3JkPiYgdG9wTGVmdCwgY29uc3QgRW1Qb2lu dFRlbXBsPEVtQ29vcmQ+JiBib3R0b21SaWdodCkgOgoJCQkJCQkJCQlFbVJlY3RUZW1wbDxFbUNv b3JkPih0b3BMZWZ0LCBib3R0b21SaWdodCkKCQkJCQkJCQl7fQoJCQkJCQkJCUVtUmVjdAkoY29u c3QgRW1SZWN0VGVtcGw8RW1Db29yZD4mIHIpIDoKCQkJCQkJCQkJRW1SZWN0VGVtcGw8RW1Db29y ZD4ocikKCQkJCQkJCQl7fQoKIAoKCSAKCSAKCSAKCSAKCSAKCQkKCQkKCgoKCQlFbVJlY3QgKGNv bnN0ICBBYnNSZWN0VHlwZSAmKTsgY29uc3QgRW1SZWN0JiBvcGVyYXRvcj0gKGNvbnN0ICBBYnNS ZWN0VHlwZSAmKTsgIAoJCUVtUmVjdCAoY29uc3QgIFJFQ1QgJik7IGNvbnN0IEVtUmVjdCYgb3Bl cmF0b3I9IChjb25zdCAgUkVDVCAmKTsgCUVtUmVjdCAoY29uc3QgIENSZWN0ICYpOyBjb25zdCBF bVJlY3QmIG9wZXJhdG9yPSAoY29uc3QgIENSZWN0ICYpOyAgCgkJRW1SZWN0IChjb25zdCAgUmVj dCAmKTsgY29uc3QgRW1SZWN0JiBvcGVyYXRvcj0gKGNvbnN0ICBSZWN0ICYpOyAgCgkJRW1SZWN0 IChjb25zdCAgVlJlY3QgJik7IGNvbnN0IEVtUmVjdCYgb3BlcmF0b3I9IChjb25zdCAgVlJlY3Qg Jik7ICAKCgkgCgkgCgkgCgkgCgkJCgkJCgoKCQlvcGVyYXRvciAgUkVDVCAgKCkgY29uc3Q7IAlv cGVyYXRvciAgQ1JlY3QgICgpIGNvbnN0OyAgCgkJb3BlcmF0b3IgIFZSZWN0ICAoKSBjb25zdDsg IAoJCW9wZXJhdG9yICBBYnNSZWN0VHlwZSAgKCkgY29uc3Q7ICAKCQlvcGVyYXRvciAgUmVjdCAg KCkgY29uc3Q7ICAKCgkgCgkgCgkgCgkgCgkJCgkJCgoKCgoKCQlvcGVyYXRvciBjb25zdCAgVlJl Y3QgKiAoKSBjb25zdDsgb3BlcmF0b3IgIFZSZWN0ICogKCk7IG9wZXJhdG9yIGNvbnN0ICBWUmVj dCAmICgpIGNvbnN0OyBvcGVyYXRvciAgVlJlY3QgJiAoKTsgICAKfTsKCgojIDE4ICIuLi9TcmNT aGFyZWQvU2tpbnMuaCIgMgoKCgpjbGFzcyBFbVN0cmVhbTsKCmVudW0gU2tpbkVsZW1lbnRUeXBl CnsKCWtFbGVtZW50X0ZpcnN0LAoKCWtFbGVtZW50X1Bvd2VyQnV0dG9uID0ga0VsZW1lbnRfRmly c3QsCglrRWxlbWVudF9VcEJ1dHRvbiwKCWtFbGVtZW50X0Rvd25CdXR0b24sCglrRWxlbWVudF9B cHAxQnV0dG9uLAoJa0VsZW1lbnRfQXBwMkJ1dHRvbiwKCWtFbGVtZW50X0FwcDNCdXR0b24sCglr RWxlbWVudF9BcHA0QnV0dG9uLAoJa0VsZW1lbnRfQ3JhZGxlQnV0dG9uLAoJa0VsZW1lbnRfQW50 ZW5uYSwKCWtFbGVtZW50X0NvbnRyYXN0QnV0dG9uLAoKCQkgCglrRWxlbWVudF9UcmlnZ2VyTGVm dCwKCWtFbGVtZW50X1RyaWdnZXJDZW50ZXIsCglrRWxlbWVudF9UcmlnZ2VyUmlnaHQsCglrRWxl bWVudF9VcEJ1dHRvbkxlZnQsCglrRWxlbWVudF9VcEJ1dHRvblJpZ2h0LAoJa0VsZW1lbnRfRG93 bkJ1dHRvbkxlZnQsCglrRWxlbWVudF9Eb3duQnV0dG9uUmlnaHQsCgoJa0VsZW1lbnRfVG91Y2hz Y3JlZW4sCglrRWxlbWVudF9MQ0QsCglrRWxlbWVudF9MRUQsCgoJa0VsZW1lbnRfTnVtRWxlbWVu dHMsCgoJa0VsZW1lbnRfRnJhbWUJPSAtMSwKCWtFbGVtZW50X05vbmUJPSAtMgp9OwoKaW5saW5l ICBTa2luRWxlbWVudFR5cGUgCW9wZXJhdG9yKysoIFNraW5FbGVtZW50VHlwZSAmIHgpCXsJeCA9 ICBTa2luRWxlbWVudFR5cGUgICh4ICsgMSk7CXJldHVybiB4Owl9CWlubGluZSAgU2tpbkVsZW1l bnRUeXBlIAlvcGVyYXRvcisrKCBTa2luRWxlbWVudFR5cGUgJiB4LCBpbnQpCXsJIFNraW5FbGVt ZW50VHlwZSAgcmVzdWx0ID0geDsJeCA9ICBTa2luRWxlbWVudFR5cGUgICh4ICsgMSk7CXJldHVy biByZXN1bHQ7CX0JaW5saW5lICBTa2luRWxlbWVudFR5cGUgCW9wZXJhdG9yLS0oIFNraW5FbGVt ZW50VHlwZSAmIHgpCXsJeCA9ICBTa2luRWxlbWVudFR5cGUgICh4IC0gMSk7CXJldHVybiB4Owl9 CWlubGluZSAgU2tpbkVsZW1lbnRUeXBlIAlvcGVyYXRvci0tKCBTa2luRWxlbWVudFR5cGUgJiB4 LCBpbnQpCXsJIFNraW5FbGVtZW50VHlwZSAgcmVzdWx0ID0geDsJeCA9ICBTa2luRWxlbWVudFR5 cGUgICh4IC0gMSk7CXJldHVybiByZXN1bHQ7CX0gCgoKdHlwZWRlZiBzdHJpbmcJCQkJU2tpbk5h bWU7CnR5cGVkZWYgdmVjdG9yPFNraW5OYW1lPglTa2luTmFtZUxpc3Q7CgoKU2tpbk5hbWUJCVNr aW5HZXRTa2luTmFtZQkJCShjb25zdCBFbURldmljZSYpOwpTa2luTmFtZQkJU2tpbkdldERlZmF1 bHRTa2luTmFtZQkoY29uc3QgRW1EZXZpY2UmKTsKdm9pZAkJCVNraW5HZXRTa2luTmFtZXMJCShj b25zdCBFbURldmljZSYsIFNraW5OYW1lTGlzdCYpOwoKdm9pZAkJCVNraW5TZXRTa2luCQkJCSh2 b2lkKTsKdm9pZAkJCVNraW5TZXRTa2luCQkJCShjb25zdCBFbURldmljZSYsIFNjYWxlVHlwZSBz Y2FsZSwgY29uc3QgU2tpbk5hbWUmKTsKdm9pZAkJCVNraW5TZXRTa2luTmFtZQkJCShjb25zdCBF bURldmljZSYsIGNvbnN0IFNraW5OYW1lJik7CgpFbUZpbGVSZWYJCVNraW5HZXRTa2luZm9GaWxl CQkodm9pZCk7CkVtRmlsZVJlZgkJU2tpbkdldFNraW5GaWxlCQkJKHZvaWQpOwpFbUZpbGVSZWYJ CVNraW5HZXRTa2luRmlsZQkJCShTY2FsZVR5cGUgc2NhbGUpOwoKRW1TdHJlYW0qCQlTa2luR2V0 U2tpblN0cmVhbQkJKHZvaWQpOwpFbVN0cmVhbSoJCVNraW5HZXRTa2luU3RyZWFtCQkoU2NhbGVU eXBlIHNjYWxlKTsKCkJvb2wJCQlTa2luVmFsaWRTa2luCQkJKGNvbnN0IEVtRGV2aWNlJiwgY29u c3QgU2tpbk5hbWUmKTsKClJHQlR5cGUJCQlTa2luR2V0QmFja2dyb3VuZENvbG9yCSh2b2lkKTsK UkdCVHlwZQkJCVNraW5HZXRIaWdobGlnaHRDb2xvcgkodm9pZCk7CgpTa2luRWxlbWVudFR5cGUJ U2tpblRlc3RQb2ludAkJCShjb25zdCBFbVBvaW50JiB3aW5kb3dQdCk7CkVtUG9pbnQJCQlTa2lu V2luZG93VG9Ub3VjaHNjcmVlbgkoY29uc3QgRW1Qb2ludCYgd2luZG93UHQpOwpFbVBvaW50CQkJ U2tpblRvdWNoc2NyZWVuVG9XaW5kb3cJKGNvbnN0IEVtUG9pbnQmIGxjZFB0KTsKQm9vbAkJCVNr aW5HZXRFbGVtZW50SW5mbwkJKGludCBpbmRleCwgU2tpbkVsZW1lbnRUeXBlJiwgRW1SZWN0Jik7 CgpFbVBvaW50CQkJU2tpblNjYWxlRG93bgkJCShjb25zdCBFbVBvaW50Jik7CkVtUmVjdAkJCVNr aW5TY2FsZURvd24JCQkoY29uc3QgRW1SZWN0Jik7CgpFbVBvaW50CQkJU2tpblNjYWxlVXAJCQkJ KGNvbnN0IEVtUG9pbnQmKTsKRW1SZWN0CQkJU2tpblNjYWxlVXAJCQkJKGNvbnN0IEVtUmVjdCYp OwoKCiMgMTcgIi4uL1NyY1NoYXJlZC9IYXJkd2FyZS9FbUhBTC5oIiAyCgoKY2xhc3MgRW1IQUw7 CmNsYXNzIEVtUGl4TWFwOwpjbGFzcyBFbVNjcmVlblVwZGF0ZUluZm87CgplbnVtCnsKCWtMRURP ZmYJCT0gMHgwMCwKCWtMRURHcmVlbgk9IDB4MDEsCglrTEVEUmVkCQk9IDB4MDIKfTsKCmVudW0g RW1VQVJURGV2aWNlVHlwZQp7CglrVUFSVEJlZ2luCQk9IDAsCgoJa1VBUlRTZXJpYWwJCT0ga1VB UlRCZWdpbiwKCWtVQVJUSVIsCglrVUFSVEJsdWV0b290aCwKCWtVQVJUTXlzdGVyeSwKCWtVQVJU Tm9uZSwKCglrVUFSVEVuZAp9OwoKaW5saW5lICBFbVVBUlREZXZpY2VUeXBlIAlvcGVyYXRvcisr KCBFbVVBUlREZXZpY2VUeXBlICYgeCkJewl4ID0gIEVtVUFSVERldmljZVR5cGUgICh4ICsgMSk7 CXJldHVybiB4Owl9CWlubGluZSAgRW1VQVJURGV2aWNlVHlwZSAJb3BlcmF0b3IrKyggRW1VQVJU RGV2aWNlVHlwZSAmIHgsIGludCkJewkgRW1VQVJURGV2aWNlVHlwZSAgcmVzdWx0ID0geDsJeCA9 ICBFbVVBUlREZXZpY2VUeXBlICAoeCArIDEpOwlyZXR1cm4gcmVzdWx0Owl9CWlubGluZSAgRW1V QVJURGV2aWNlVHlwZSAJb3BlcmF0b3ItLSggRW1VQVJURGV2aWNlVHlwZSAmIHgpCXsJeCA9ICBF bVVBUlREZXZpY2VUeXBlICAoeCAtIDEpOwlyZXR1cm4geDsJfQlpbmxpbmUgIEVtVUFSVERldmlj ZVR5cGUgCW9wZXJhdG9yLS0oIEVtVUFSVERldmljZVR5cGUgJiB4LCBpbnQpCXsJIEVtVUFSVERl dmljZVR5cGUgIHJlc3VsdCA9IHg7CXggPSAgRW1VQVJURGV2aWNlVHlwZSAgKHggLSAxKTsJcmV0 dXJuIHJlc3VsdDsJfSAKCmNsYXNzIEVtSEFMSGFuZGxlcgp7CglwdWJsaWM6CgkJCQkJCQkJRW1I QUxIYW5kbGVyCQkJKHZvaWQpOwoJCXZpcnR1YWwJCQkJCX5FbUhBTEhhbmRsZXIJCQkodm9pZCk7 CgoJCXZpcnR1YWwgdm9pZAkJCUN5Y2xlCQkJCQkoQm9vbCBzbGVlcGluZyk7CgkJdmlydHVhbCB2 b2lkCQkJQ3ljbGVTbG93bHkJCQkJKEJvb2wgc2xlZXBpbmcpOwoKCQl2aXJ0dWFsIHZvaWQJCQlC dXR0b25FdmVudAkJCQkoU2tpbkVsZW1lbnRUeXBlLCBCb29sIGJ1dHRvbklzRG93bik7CgkJdmly dHVhbCB2b2lkCQkJVHVyblNvdW5kT2ZmCQkJKHZvaWQpOwoJCXZpcnR1YWwgdm9pZAkJCVJlc2V0 VGltZXIJCQkJKHZvaWQpOwoJCXZpcnR1YWwgdm9pZAkJCVJlc2V0UlRDCQkJCSh2b2lkKTsKCgkJ dmlydHVhbCBpbnQzMgkJCUdldEludGVycnVwdExldmVsCQkodm9pZCk7CgkJdmlydHVhbCBpbnQz MgkJCUdldEludGVycnVwdEJhc2UJCSh2b2lkKTsKCgkJdmlydHVhbCBCb29sCQkJR2V0TENEU2Ny ZWVuT24JCQkodm9pZCk7CgkJdmlydHVhbCBCb29sCQkJR2V0TENEQmFja2xpZ2h0T24JCSh2b2lk KTsKCQl2aXJ0dWFsIEJvb2wJCQlHZXRMQ0RIYXNGcmFtZQkJCSh2b2lkKTsKCQl2aXJ0dWFsIHZv aWQJCQlHZXRMQ0RCZWdpbkVuZAkJCShlbXVwdHImLCBlbXVwdHImKTsKCQl2aXJ0dWFsIHZvaWQJ CQlHZXRMQ0RTY2FubGluZXMJCQkoRW1TY3JlZW5VcGRhdGVJbmZvJiBpbmZvKTsKCgkJdmlydHVh bCBpbnQzMgkJCUdldER5bmFtaWNIZWFwU2l6ZQkJKHZvaWQpOwoJCXZpcnR1YWwgaW50MzIJCQlH ZXRST01TaXplCQkJCSh2b2lkKTsKCQl2aXJ0dWFsIGVtdXB0cgkJCUdldFJPTUJhc2VBZGRyZXNz CQkodm9pZCk7CgkJdmlydHVhbCBCb29sCQkJQ2hpcFNlbGVjdHNDb25maWd1cmVkCSh2b2lkKTsK CQl2aXJ0dWFsIGludDMyCQkJR2V0U3lzdGVtQ2xvY2tGcmVxdWVuY3kJKHZvaWQpOwoJCXZpcnR1 YWwgQm9vbAkJCUdldENhblN0b3AJCQkJKHZvaWQpOwoJCXZpcnR1YWwgQm9vbAkJCUdldEFzbGVl cAkJCQkodm9pZCk7CgoJCXZpcnR1YWwgdWludDgJCQlHZXRQb3J0SW5wdXRWYWx1ZQkJKGludCk7 CgkJdmlydHVhbCB1aW50OAkJCUdldFBvcnRJbnRlcm5hbFZhbHVlCShpbnQpOwoJCXZpcnR1YWwg dm9pZAkJCVBvcnREYXRhQ2hhbmdlZAkJCShpbnQsIHVpbnQ4LCB1aW50OCk7CgkJdmlydHVhbCB2 b2lkCQkJR2V0S2V5SW5mbwkJCQkoaW50KiBudW1Sb3dzLCBpbnQqIG51bUNvbHMsCgkJCQkJCQkJ CQkJCQkJIHVpbnQxNioga2V5TWFwLCBCb29sKiByb3dzKTsKCgkJdmlydHVhbCBCb29sCQkJR2V0 TGluZURyaXZlclN0YXRlCQkoRW1VQVJURGV2aWNlVHlwZSk7CgkJdmlydHVhbCBFbVVBUlREZXZp Y2VUeXBlCUdldFVBUlREZXZpY2UJCShpbnQgdWFydE51bSk7CgoJCXZpcnR1YWwgQm9vbAkJCUdl dERUUgkJCQkJKGludCB1YXJ0TnVtKTsKCgkJdmlydHVhbCBCb29sCQkJR2V0VmlicmF0ZU9uCQkJ KHZvaWQpOwoJCXZpcnR1YWwgdWludDE2CQkJR2V0TEVEU3RhdGUJCQkJKHZvaWQpOwoKCXByb3Rl Y3RlZDoKCQlFbUhBTEhhbmRsZXIqCQkJR2V0TmV4dEhhbmRsZXIJCQkodm9pZCkgeyByZXR1cm4g Zk5leHRIYW5kbGVyOyB9CgoJcHJpdmF0ZToKCQlFbUhBTEhhbmRsZXIqCQkJZk5leHRIYW5kbGVy OwoJCUVtSEFMSGFuZGxlcioJCQlmUHJldkhhbmRsZXI7CgoJCWZyaWVuZCBjbGFzcyBFbUhBTDsK fTsKCgpjbGFzcyBFbUhBTAp7CglwdWJsaWM6CgkJc3RhdGljIHZvaWQJCQkJQWRkSGFuZGxlcgkJ CQkoRW1IQUxIYW5kbGVyKik7CgkJc3RhdGljIHZvaWQJCQkJUmVtb3ZlSGFuZGxlcgkJCShFbUhB TEhhbmRsZXIqKTsKCQlzdGF0aWMgdm9pZAkJCQlFbnN1cmVDb3ZlcmFnZQkJCSh2b2lkKTsKCgkJ c3RhdGljIHZvaWQJCQkJQ3ljbGUJCQkJCShCb29sIHNsZWVwaW5nKTsKCQlzdGF0aWMgdm9pZAkJ CQlDeWNsZVNsb3dseQkJCQkoQm9vbCBzbGVlcGluZyk7CgoJCXN0YXRpYyB2b2lkCQkJCUJ1dHRv bkV2ZW50CQkJCShTa2luRWxlbWVudFR5cGUsIEJvb2wgYnV0dG9uSXNEb3duKTsKCQlzdGF0aWMg dm9pZAkJCQlUdXJuU291bmRPZmYJCQkodm9pZCk7CgkJc3RhdGljIHZvaWQJCQkJUmVzZXRUaW1l cgkJCQkodm9pZCk7CgkJc3RhdGljIHZvaWQJCQkJUmVzZXRSVEMJCQkJKHZvaWQpOwoKCQlzdGF0 aWMgaW50MzIJCQlHZXRJbnRlcnJ1cHRMZXZlbAkJKHZvaWQpOwoJCXN0YXRpYyBpbnQzMgkJCUdl dEludGVycnVwdEJhc2UJCSh2b2lkKTsKCgkJc3RhdGljIEJvb2wJCQkJR2V0TENEU2NyZWVuT24J CQkodm9pZCk7CgkJc3RhdGljIEJvb2wJCQkJR2V0TENEQmFja2xpZ2h0T24JCSh2b2lkKTsKCQlz dGF0aWMgQm9vbAkJCQlHZXRMQ0RIYXNGcmFtZQkJCSh2b2lkKTsKCQlzdGF0aWMgdm9pZAkJCQlH ZXRMQ0RCZWdpbkVuZAkJCShlbXVwdHImLCBlbXVwdHImKTsKCQlzdGF0aWMgdm9pZAkJCQlHZXRM Q0RTY2FubGluZXMJCQkoRW1TY3JlZW5VcGRhdGVJbmZvJiBpbmZvKTsKCgkJc3RhdGljIGludDMy CQkJR2V0RHluYW1pY0hlYXBTaXplCQkodm9pZCk7CgkJc3RhdGljIGludDMyCQkJR2V0Uk9NU2l6 ZQkJCQkodm9pZCk7CgkJc3RhdGljIGVtdXB0cgkJCUdldFJPTUJhc2VBZGRyZXNzCQkodm9pZCk7 CgkJc3RhdGljIEJvb2wJCQkJQ2hpcFNlbGVjdHNDb25maWd1cmVkCSh2b2lkKTsKCQlzdGF0aWMg aW50MzIJCQlHZXRTeXN0ZW1DbG9ja0ZyZXF1ZW5jeQkodm9pZCk7CgkJc3RhdGljIEJvb2wJCQkJ R2V0Q2FuU3RvcAkJCQkodm9pZCk7CgkJc3RhdGljIEJvb2wJCQkJR2V0QXNsZWVwCQkJCSh2b2lk KTsKCgkJc3RhdGljIHVpbnQ4CQkJR2V0UG9ydElucHV0VmFsdWUJCShpbnQpOwoJCXN0YXRpYyB1 aW50OAkJCUdldFBvcnRJbnRlcm5hbFZhbHVlCShpbnQpOwoJCXN0YXRpYyB2b2lkCQkJCVBvcnRE YXRhQ2hhbmdlZAkJCShpbnQsIHVpbnQ4LCB1aW50OCk7CgkJc3RhdGljIHZvaWQJCQkJR2V0S2V5 SW5mbwkJCQkoaW50KiBudW1Sb3dzLCBpbnQqIG51bUNvbHMsCgkJCQkJCQkJCQkJCQkJIHVpbnQx Nioga2V5TWFwLCBCb29sKiByb3dzKTsKCgkJc3RhdGljIHZvaWQJCQkJTGluZURyaXZlckNoYW5n ZWQJCShFbVVBUlREZXZpY2VUeXBlKTsKCQlzdGF0aWMgQm9vbAkJCQlHZXRMaW5lRHJpdmVyU3Rh dGUJCShFbVVBUlREZXZpY2VUeXBlKTsKCQlzdGF0aWMgRW1VQVJURGV2aWNlVHlwZQlHZXRVQVJU RGV2aWNlCQkJKGludCB1YXJ0TnVtKTsKCgkJc3RhdGljIHZvaWQJCQkJR2V0TGluZURyaXZlclN0 YXRlcwkJKEJvb2wqIHN0YXRlcyk7CgkJc3RhdGljIHZvaWQJCQkJQ29tcGFyZUxpbmVEcml2ZXJT dGF0ZXMJKGNvbnN0IEJvb2wqIG9sZFN0YXRlcyk7CgoJCXN0YXRpYyBCb29sCQkJCUdldERUUgkJ CQkJKGludCB1YXJ0TnVtKTsKCQlzdGF0aWMgdm9pZAkJCQlEVFJDaGFuZ2VkCQkJCShpbnQgdWFy dE51bSk7CgoJCXN0YXRpYyBCb29sCQkJCUdldFZpYnJhdGVPbgkJCSh2b2lkKTsKCQlzdGF0aWMg dWludDE2CQkJR2V0TEVEU3RhdGUJCQkJKHZvaWQpOwoKCXByaXZhdGU6CgkJc3RhdGljIEVtSEFM SGFuZGxlcioJR2V0Um9vdEhhbmRsZXIJCQkodm9pZCkgeyByZXR1cm4gZmdSb290SGFuZGxlcjsg fQoJCXN0YXRpYyBFbUhBTEhhbmRsZXIqCWZnUm9vdEhhbmRsZXI7Cn07CgppbmxpbmUgdm9pZCBF bUhBTDo6Q3ljbGUgKEJvb2wgc2xlZXBpbmcpCnsKCSgodm9pZCkgMCkgOwoJRW1IQUw6OkdldFJv b3RIYW5kbGVyKCktPkN5Y2xlIChzbGVlcGluZyk7Cn0KCgoKIyAxOSAiLi4vU3JjU2hhcmVkL1By ZWZlcmVuY2VNZ3IuaCIgMgoKCgojIDEgIi4uL1NyY1NoYXJlZC9vbW5pdGhyZWFkL29tbml0aHJl YWQuaCIgMQogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgogCiAK IAogCiAKIAogCiAKIAogCgoKCgoKCgoKY2xhc3Mgb21uaV9tdXRleDsKY2xhc3Mgb21uaV9jb25k aXRpb247CmNsYXNzIG9tbmlfc2VtYXBob3JlOwpjbGFzcyBvbW5pX3RocmVhZDsKCiAKIAogCiAK IAogCgoKCgoKIAogCiAKIAogCiAKIAoKCiMgMTEwICIuLi9TcmNTaGFyZWQvb21uaXRocmVhZC9v bW5pdGhyZWFkLmgiCgojIDEgIi4uL1NyY1NoYXJlZC9vbW5pdGhyZWFkL3NvbGFyaXMuaCIgMQog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCgoKIyAxICIv dXNyL2luY2x1ZGUvdGhyZWFkLmgiIDEgMyA0CiAKCgoKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50 CSJAKCMpdGhyZWFkLmgJMS40Nwk5OC8wOC8xNCBTTUkiCgogCgoKCgoKCiMgMSAiL3Vzci9pbmNs dWRlL3N5cy9zaWduYWwuaCIgMSAzIDQKIAoKCgoKIAogCgogCiAKIAoKCgoKI3ByYWdtYSBpZGVu dAkiQCgjKXNpZ25hbC5oCTEuNTQJOTkvMDcvMjYgU01JIgkKCgojIDEgIi91c3IvaW5jbHVkZS9z eXMvaXNvL3NpZ25hbF9pc28uaCIgMSAzIDQKIAoKCgoKIAogCgogCiAKIAoKIAoKCgoKCgoKCgoK CgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzaWduYWxfaXNvLmgJMS4xCTk5LzA4LzA5IFNNSSIgCgoK CgpleHRlcm4gIkMiIHsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CiAKCgpleHRlcm4gbG9uZyBfc3lzY29uZihpbnQpOwkgCgoKCgoKdHlwZWRlZgl2b2lkIFNJR19G VU5DX1RZUChpbnQpOwp0eXBlZGVmCVNJR19GVU5DX1RZUCAqU0lHX1RZUDsKCgoKCgoKCiMgMTA5 ICIvdXNyL2luY2x1ZGUvc3lzL2lzby9zaWduYWxfaXNvLmgiIDMgNAoKCgoKCgoKCgoKCgoKCn0K CgoKIyAxOSAiL3Vzci9pbmNsdWRlL3N5cy9zaWduYWwuaCIgMiAzIDQKCgoKZXh0ZXJuICJDIiB7 CgoKCgoKCgoKCiAKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2lnaW5mby5oIiAxIDMgNAogCiAK CiAKCgoKCiAKIAogCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc2lnaW5mby5oCTEuNTQJOTgvMDMv MjcgU01JIgkKCgoKCgpleHRlcm4gIkMiIHsKCgoKCgogCgoKCgoKCgoKCgoKIyA0OSAiL3Vzci9p bmNsdWRlL3N5cy9zaWdpbmZvLmgiIDMgNAoKCgoKCgoKCgoKCgoKCiAKCgoKIyA3NyAiL3Vzci9p bmNsdWRlL3N5cy9zaWdpbmZvLmgiIDMgNAoKCiAKCgoKCiMgOTcgIi91c3IvaW5jbHVkZS9zeXMv c2lnaW5mby5oIiAzIDQKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCiMgMSAiL3Vzci9p bmNsdWRlL3N5cy9tYWNoc2lnLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCgoKCiNwcmFnbWEg aWRlbnQJIkAoIyltYWNoc2lnLmgJMS4xNQk5OS8wOC8xNSBTTUkiCgoKCgpleHRlcm4gIkMiIHsK CgogCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgogCgoKCgoKCgoK CgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgp9CgoKCiMgMTI2ICIvdXNyL2luY2x1 ZGUvc3lzL3NpZ2luZm8uaCIgMiAzIDQKCgogCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgog CgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK IAoKCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCBzaWdpbmZvIHsgCQkgCgoKCglpbnQJc2lfc2lnbm87 CQkJIAoJaW50IAlzaV9jb2RlOwkJCSAKCWludAlzaV9lcnJubzsJCQkgCgoKCgl1bmlvbiB7CgoJ CWludAlfX3BhZFsoKDEyOCAgLyBzaXplb2YgKGludCkpIC0gMykgXTsJCSAKCgkJc3RydWN0IHsJ CQkgCgkJCXBpZF90CV9fcGlkOwkJIAoJCQl1bmlvbiB7CgkJCQlzdHJ1Y3QgewoJCQkJCXVpZF90 CV9fdWlkOwoKCgkJCQkJdW5pb24gc2lndmFsCV9fdmFsdWU7CgoKCgkJCQl9IF9fa2lsbDsKCQkJ CXN0cnVjdCB7CgkJCQkJY2xvY2tfdCBfX3V0aW1lOwoJCQkJCWludAlfX3N0YXR1czsKCQkJCQlj bG9ja190IF9fc3RpbWU7CgkJCQl9IF9fY2xkOwoJCQl9IF9fcGRhdGE7CgkJfSBfX3Byb2M7CgoJ CXN0cnVjdCB7CSAKCQkJdm9pZCAJKl9fYWRkcjsJIAoJCQlpbnQJX190cmFwbm87CSAKCQkJY2Fk ZHJfdAlfX3BjOwkJIAoJCX0gX19mYXVsdDsKCgkJc3RydWN0IHsJCQkgCgkJIAoJCQlpbnQJX19m ZDsJCSAKCQkJbG9uZwlfX2JhbmQ7CgkJfSBfX2ZpbGU7CgoJCXN0cnVjdCB7CQkJIAoJCQljYWRk cl90CV9fZmFkZHI7CSAKCgoJCQl0aW1lc3RydWNfdCBfX3RzdGFtcDsJIAoKCgoJCQlzaG9ydAlf X3N5c2NhbGw7CSAKCQkJY2hhcglfX25zeXNhcmc7CSAKCQkJY2hhcglfX2ZhdWx0OwkgCgkJCWxv bmcJX19zeXNhcmdbOF07CSAKCQkJaW50CV9fbXN0YXRlWzEwXTsJIAoJCX0gX19wcm9mOwoKCX0g X19kYXRhOwoKfSBzaWdpbmZvX3Q7CgojIDM0NCAiL3Vzci9pbmNsdWRlL3N5cy9zaWdpbmZvLmgi IDMgNAoKCiAKCgoKCgoKCnR5cGVkZWYgc3RydWN0IGtfc2lnaW5mbyB7CglpbnQJc2lfc2lnbm87 CQkJIAoJaW50IAlzaV9jb2RlOwkJCSAKCWludAlzaV9lcnJubzsJCQkgCgoKCgl1bmlvbiB7CgkJ c3RydWN0IHsJCQkgCgkJCXBpZF90CV9fcGlkOwkJIAoJCQl1bmlvbiB7CgkJCQlzdHJ1Y3QgewoJ CQkJCXVpZF90CV9fdWlkOwoJCQkJCXVuaW9uIHNpZ3ZhbAlfX3ZhbHVlOwoJCQkJfSBfX2tpbGw7 CgkJCQlzdHJ1Y3QgewoJCQkJCWNsb2NrX3QgX191dGltZTsKCQkJCQlpbnQJX19zdGF0dXM7CgkJ CQkJY2xvY2tfdCBfX3N0aW1lOwoJCQkJfSBfX2NsZDsKCQkJfSBfX3BkYXRhOwoJCX0gX19wcm9j OwoKCQlzdHJ1Y3QgewkgCgkJCXZvaWQgCSpfX2FkZHI7CSAKCQkJaW50CV9fdHJhcG5vOwkgCgkJ CWNhZGRyX3QJX19wYzsJCSAKCQl9IF9fZmF1bHQ7CgoJCXN0cnVjdCB7CQkJIAoJCSAKCQkJaW50 CV9fZmQ7CQkgCgkJCWxvbmcJX19iYW5kOwoJCX0gX19maWxlOwoKCQlzdHJ1Y3QgewkJCSAKCQkJ Y2FkZHJfdAlfX2ZhZGRyOwkgCgoKCgkJCXRpbWVzdHJ1Y190IF9fdHN0YW1wOwkgCgoKCgkJCXNo b3J0CV9fc3lzY2FsbDsJIAoJCQljaGFyCV9fbnN5c2FyZzsJIAoJCQljaGFyCV9fZmF1bHQ7CSAK CQkJIAoJCQkgCgkJCSAKCQl9IF9fcHJvZjsKCgl9IF9fZGF0YTsKCn0ga19zaWdpbmZvX3Q7Cgp0 eXBlZGVmIHN0cnVjdCBzaWdxdWV1ZSB7CglzdHJ1Y3Qgc2lncXVldWUJKnNxX25leHQ7CglrX3Np Z2luZm9fdAlzcV9pbmZvOwoJdm9pZAkJKCpzcV9mdW5jKShzdHJ1Y3Qgc2lncXVldWUgKik7ICAK CXZvaWQJCSpzcV9iYWNrcHRyOwkgCgkJCQkJIAp9IHNpZ3F1ZXVlX3Q7CgogCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKfQoKCgojIDM1ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25h bC5oIiAyIDMgNAoKCgoKIAoKCnR5cGVkZWYgc3RydWN0IHsJCSAKCXVuc2lnbmVkIGludAlfX3Np Z2JpdHNbNF07Cn0gc2lnc2V0X3Q7CgojIDU0ICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAz IDQKCgoKCnR5cGVkZWYJc3RydWN0IHsKCXVuc2lnbmVkIGludAlfX3NpZ2JpdHNbMl07Cn0ga19z aWdzZXRfdDsKCiAKCgoKCgoKCgoKCiAKCgpzdHJ1Y3Qgc2lnYWN0aW9uIHsKCWludCBzYV9mbGFn czsKCXVuaW9uIHsKCgkJdm9pZCAoKl9oYW5kbGVyKShpbnQpOwoKCgoKCgoJCXZvaWQgKCpfc2ln YWN0aW9uKShpbnQsIHNpZ2luZm9fdCAqLCB2b2lkICopOwoKCX0JX2Z1bmNwdHI7CglzaWdzZXRf dCBzYV9tYXNrOwoKCWludCBzYV9yZXN2WzJdOwoKfTsKCgoKIyAxMTIgIi91c3IvaW5jbHVkZS9z eXMvc2lnbmFsLmgiIDMgNAoKCiAKCgoKCgoKCgkJCSAKCiAKCgoKCgoKCgoKCgoKCgoKIAoKCiAK CgoKIAoKCgoKCgkJCSAKCQkJIAoJCQkgCgoKCgoKCgoKCgoKCgogCgoKCnR5cGVkZWYgc3RydWN0 IHNpZ2FsdHN0YWNrIHsKCgoKCXZvaWQJKnNzX3NwOwoJc2l6ZV90CXNzX3NpemU7CglpbnQJc3Nf ZmxhZ3M7Cn0gc3RhY2tfdDsKCiMgMTkyICIvdXNyL2luY2x1ZGUvc3lzL3NpZ25hbC5oIiAzIDQK CgoKCgoKCgoKIAp0eXBlZGVmIHN0cnVjdCBzaWdub3RpZnlfaWQgewkJIAoJcGlkX3QJc25fcGlk OwkJCSAKCWludAlzbl9pbmRleDsJCSAKCWludAlzbl9wYWQ7CQkJIAp9IHNpZ25vdGlmeV9pZF90 OwoKIyAyMTggIi91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMgNAoKCiAKCgoKCgoKCiAKCgoK c3RydWN0IHNpZ3N0YWNrIHsKCXZvaWQJKnNzX3NwOwoJaW50CXNzX29uc3RhY2s7Cn07CgoKIAoK CgoKCgoKIyAzMDkgIi91c3IvaW5jbHVkZS9zeXMvc2lnbmFsLmgiIDMgNAoKCgp9CgoKCiMgMjIg Ii91c3IvaW5jbHVkZS90aHJlYWQuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9zeW5jaC5o IiAxIDMgNAogCgoKCgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc3luY2guaAkxLjQ3CTAxLzA3LzA3 IFNNSSIKCiAKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeW5jaC5oIiAxIDMgNAogCgoK CgoKCgojcHJhZ21hIGlkZW50CSJAKCMpc3luY2guaAkxLjM4CTAxLzA3LzA3IFNNSSIKCgoKCgoK CmV4dGVybiAiQyIgewoKCgogCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX2x3cF9tdXRl eCB7CglzdHJ1Y3QgewoJCXVpbnQxNl90CWZsYWcxOwoJCXVpbnQ4X3QJCWZsYWcyOwoJCXVpbnQ4 X3QJCWNlaWxpbmc7CgkJdW5pb24gewoJCQl1aW50MTZfdCBiY3B0eXBlOwoJCQlzdHJ1Y3QgewoJ CQkJdWludDhfdAljb3VudF90eXBlMTsKCQkJCXVpbnQ4X3QJY291bnRfdHlwZTI7CgkJCX0gbXR5 cGVfcmNvdW50OwoJCX0gbWJjcF90eXBlX3VuOwoJCXVpbnQxNl90CW1hZ2ljOwoJfSBmbGFnczsK CXVuaW9uIHsKCQlzdHJ1Y3QgewoJCQl1aW50OF90CXBhZFs4XTsKCQl9IGxvY2s2NDsKCQlzdHJ1 Y3QgewoJCQl1aW50MzJfdCBvd25lcnBpZDsKCQkJdWludDMyX3QgbG9ja3dvcmQ7CgkJfSBsb2Nr MzI7CgkJdXBhZDY0X3Qgb3duZXI2NDsKCX0gbG9jazsKCXVwYWQ2NF90IGRhdGE7Cn0gbHdwX211 dGV4X3Q7CgogCgoKCgoKCnR5cGVkZWYgc3RydWN0IF9sd3BfY29uZCB7CglzdHJ1Y3QgewoJCXVp bnQ4X3QJCWZsYWdbNF07CgkJdWludDE2X3QgCXR5cGU7CgkJdWludDE2X3QgCW1hZ2ljOwoJfSBm bGFnczsKCXVwYWQ2NF90IGRhdGE7Cn0gbHdwX2NvbmRfdDsKCiAKCgp0eXBlZGVmIHN0cnVjdCBf bHdwX3NlbWEgewoJdWludDMyX3QJY291bnQ7CQkgCgl1aW50MTZfdCAJdHlwZTsKCXVpbnQxNl90 IAltYWdpYzsKCXVpbnQ4X3QJCWZsYWdzWzhdOwkgCgl1cGFkNjRfdAlkYXRhOwkJIAp9IGx3cF9z ZW1hX3Q7CgoKIAoKCgoKCiAKCgoKCgoKIAoKCgoKCgoKIAoKCgoKCgoKCn0KCgoKIyAxOSAiL3Vz ci9pbmNsdWRlL3N5bmNoLmgiIDIgMyA0CgoKCgpleHRlcm4gIkMiIHsKCgoKCiAKCgp0eXBlZGVm IHN0cnVjdCBfc2VtYSB7CgkgCgl1aW50MzJfdAljb3VudDsJCSAKCXVpbnQxNl90CXR5cGU7Cgl1 aW50MTZfdAltYWdpYzsKCXVwYWQ2NF90CXBhZDFbM107CSAKCXVwYWQ2NF90IAlwYWQyWzJdOwkg Cn0gc2VtYV90OwoKIAoKCgoKCgoKCgoKdHlwZWRlZiBsd3BfbXV0ZXhfdCBtdXRleF90Owp0eXBl ZGVmIGx3cF9jb25kX3QgY29uZF90OwoKIAoKCgoKCgp0eXBlZGVmIHN0cnVjdCBfcndsb2NrIHsK CWludDMyX3QJCXJlYWRlcnM7CSAKCXVpbnQxNl90CXR5cGU7Cgl1aW50MTZfdAltYWdpYzsKCXVp bnQxNl90CXBhZDFbNF07CSAKCXVwYWQ2NF90CXBhZDEwWzJdOwkgCgl1aW50MTZfdAlwYWQyWzRd OwkgCgl1cGFkNjRfdAlwYWQyMDsJCSAKCXVpbnQxNl90CXBhZDNbNF07CSAKCXVwYWQ2NF90CXBh ZDMwOwkJIAp9IHJ3bG9ja190OwoKCmludAlfbHdwX211dGV4X2xvY2sobHdwX211dGV4X3QgKik7 CmludAlfbHdwX211dGV4X3VubG9jayhsd3BfbXV0ZXhfdCAqKTsKaW50CV9sd3BfbXV0ZXhfdHJ5 bG9jayhsd3BfbXV0ZXhfdCAqKTsKaW50CV9sd3BfY29uZF93YWl0KGx3cF9jb25kX3QgKiwgbHdw X211dGV4X3QgKik7CmludAlfbHdwX2NvbmRfdGltZWR3YWl0KGx3cF9jb25kX3QgKiwgbHdwX211 dGV4X3QgKiwgdGltZXN0cnVjX3QgKik7CmludAlfbHdwX2NvbmRfcmVsdGltZWR3YWl0KGx3cF9j b25kX3QgKiwgbHdwX211dGV4X3QgKiwgdGltZXN0cnVjX3QgKik7CmludAlfbHdwX2NvbmRfc2ln bmFsKGx3cF9jb25kX3QgKik7CmludAlfbHdwX2NvbmRfYnJvYWRjYXN0KGx3cF9jb25kX3QgKik7 CmludAlfbHdwX3NlbWFfaW5pdChsd3Bfc2VtYV90ICosIGludCk7CmludAlfbHdwX3NlbWFfd2Fp dChsd3Bfc2VtYV90ICopOwppbnQJX2x3cF9zZW1hX3RyeXdhaXQobHdwX3NlbWFfdCAqKTsKaW50 CV9sd3Bfc2VtYV9wb3N0KGx3cF9zZW1hX3QgKik7CmludAljb25kX2luaXQoY29uZF90ICosIGlu dCwgdm9pZCAqKTsKaW50CWNvbmRfZGVzdHJveShjb25kX3QgKik7CmludAljb25kX3dhaXQoY29u ZF90ICosIG11dGV4X3QgKik7CmludAljb25kX3RpbWVkd2FpdChjb25kX3QgKiwgbXV0ZXhfdCAq LCB0aW1lc3RydWNfdCAqKTsKaW50CWNvbmRfcmVsdGltZWR3YWl0KGNvbmRfdCAqLCBtdXRleF90 ICosIHRpbWVzdHJ1Y190ICopOwppbnQJY29uZF9zaWduYWwoY29uZF90ICopOwppbnQJY29uZF9i cm9hZGNhc3QoY29uZF90ICopOwppbnQJbXV0ZXhfaW5pdChtdXRleF90ICosIGludCwgdm9pZCAq KTsKaW50CW11dGV4X2Rlc3Ryb3kobXV0ZXhfdCAqKTsKaW50CW11dGV4X2xvY2sobXV0ZXhfdCAq KTsKaW50CW11dGV4X3RyeWxvY2sobXV0ZXhfdCAqKTsKaW50CW11dGV4X3VubG9jayhtdXRleF90 ICopOwppbnQJcndsb2NrX2luaXQocndsb2NrX3QgKiwgaW50LCB2b2lkICopOwppbnQJcndsb2Nr X2Rlc3Ryb3kocndsb2NrX3QgKik7CmludAlyd19yZGxvY2socndsb2NrX3QgKik7CmludAlyd193 cmxvY2socndsb2NrX3QgKik7CmludAlyd191bmxvY2socndsb2NrX3QgKik7CmludAlyd190cnly ZGxvY2socndsb2NrX3QgKik7CmludAlyd190cnl3cmxvY2socndsb2NrX3QgKik7CmludAlzZW1h X2luaXQoc2VtYV90ICosIHVuc2lnbmVkIGludCwgaW50LCB2b2lkICopOwppbnQJc2VtYV9kZXN0 cm95KHNlbWFfdCAqKTsKaW50CXNlbWFfd2FpdChzZW1hX3QgKik7CmludAlzZW1hX3Bvc3Qoc2Vt YV90ICopOwppbnQJc2VtYV90cnl3YWl0KHNlbWFfdCAqKTsKCiMgMTUwICIvdXNyL2luY2x1ZGUv c3luY2guaCIgMyA0CgoKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK CiAKCgoKCgoKCgoKCgoKCgoKCmludCBfc2VtYV9oZWxkKHNlbWFfdCAqKTsKaW50IF9yd19yZWFk X2hlbGQocndsb2NrX3QgKik7CmludCBfcndfd3JpdGVfaGVsZChyd2xvY2tfdCAqKTsKaW50IF9t dXRleF9oZWxkKG11dGV4X3QgKik7CgoKCgoKCgoKCgoKCgp9CgoKCiMgMjQgIi91c3IvaW5jbHVk ZS90aHJlYWQuaCIgMiAzIDQKCgoKCmV4dGVybiAiQyIgewoKCgp0eXBlZGVmIHVuc2lnbmVkIGlu dCB0aHJlYWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdGhyZWFkX2tleV90OwoKCgoKCmV4dGVy biBpbnQgdGhyX2NyZWF0ZSh2b2lkICosIHNpemVfdCwgdm9pZCAqKCopKHZvaWQgKiksIHZvaWQg KiwgbG9uZywKCQkJdGhyZWFkX3QgKik7CmV4dGVybiBpbnQgdGhyX2pvaW4odGhyZWFkX3QsIHRo cmVhZF90ICosIHZvaWQgKiopOwpleHRlcm4gaW50IHRocl9zZXRjb25jdXJyZW5jeShpbnQpOwpl eHRlcm4gaW50IHRocl9nZXRjb25jdXJyZW5jeSh2b2lkKTsKZXh0ZXJuIHZvaWQgdGhyX2V4aXQo dm9pZCAqKTsKZXh0ZXJuIHRocmVhZF90IHRocl9zZWxmKHZvaWQpOwoKIAoKCgoKCmV4dGVybiBp bnQgdGhyX3NpZ3NldG1hc2soaW50LCBjb25zdCBzaWdzZXRfdCAqLCBzaWdzZXRfdCAqKTsKCgog CgoKCgoKZXh0ZXJuIGludCB0aHJfc3Rrc2VnbWVudChzdGFja190ICopOwoKCmV4dGVybiBpbnQg dGhyX21haW4odm9pZCk7CmV4dGVybiBpbnQgdGhyX2tpbGwodGhyZWFkX3QsIGludCk7CmV4dGVy biBpbnQgdGhyX3N1c3BlbmQodGhyZWFkX3QpOwpleHRlcm4gaW50IHRocl9jb250aW51ZSh0aHJl YWRfdCk7CmV4dGVybiB2b2lkIHRocl95aWVsZCh2b2lkKTsKZXh0ZXJuIGludCB0aHJfc2V0cHJp byh0aHJlYWRfdCwgaW50KTsKZXh0ZXJuIGludCB0aHJfZ2V0cHJpbyh0aHJlYWRfdCwgaW50ICop OwpleHRlcm4gaW50IHRocl9rZXljcmVhdGUodGhyZWFkX2tleV90ICosIHZvaWQoKikodm9pZCAq KSk7CmV4dGVybiBpbnQgdGhyX3NldHNwZWNpZmljKHRocmVhZF9rZXlfdCwgdm9pZCAqKTsKZXh0 ZXJuIGludCB0aHJfZ2V0c3BlY2lmaWModGhyZWFkX2tleV90LCB2b2lkICoqKTsKZXh0ZXJuIHNp emVfdCB0aHJfbWluX3N0YWNrKHZvaWQpOwoKIyA5OSAiL3Vzci9pbmNsdWRlL3RocmVhZC5oIiAz IDQKCgoKCiAKCgogCgoKCgoKCgoKCgoKIAoKCgoKCgoKCn0KCgoKIyAyOSAiLi4vU3JjU2hhcmVk L29tbml0aHJlYWQvc29sYXJpcy5oIiAyCgoKZXh0ZXJuICJDIiB2b2lkKiBvbW5pX3RocmVhZF93 cmFwcGVyKHZvaWQqIHB0cik7CgoKCgoKCgoKCgoKCgoKCgojIDExMSAiLi4vU3JjU2hhcmVkL29t bml0aHJlYWQvb21uaXRocmVhZC5oIiAyCgogCiMgMTYyICIuLi9TcmNTaGFyZWQvb21uaXRocmVh ZC9vbW5pdGhyZWFkLmgiCgoKCgoKCgoKCgoKCgoKIAogCiAKCmNsYXNzICAgb21uaV90aHJlYWRf ZmF0YWwgewpwdWJsaWM6CiAgICBpbnQgZXJyb3I7CiAgICBvbW5pX3RocmVhZF9mYXRhbChpbnQg ZSA9IDApIDogZXJyb3IoZSkge30KfTsKCgogCiAKIAogCgpjbGFzcyAgIG9tbmlfdGhyZWFkX2lu dmFsaWQge307CgoKIAogCiAKIAogCgpjbGFzcyAgIG9tbmlfbXV0ZXggewoKcHVibGljOgogICAg b21uaV9tdXRleCh2b2lkKTsKICAgIH5vbW5pX211dGV4KHZvaWQpOwoKICAgIHZvaWQgbG9jayh2 b2lkKTsKICAgIHZvaWQgdW5sb2NrKHZvaWQpOwogICAgdm9pZCBhY3F1aXJlKHZvaWQpIHsgbG9j aygpOyB9CiAgICB2b2lkIHJlbGVhc2Uodm9pZCkgeyB1bmxvY2soKTsgfQoJIAoJIAoKICAgIGZy aWVuZCBjbGFzcyBvbW5pX2NvbmRpdGlvbjsKCnByaXZhdGU6CiAgICAgCiAgICBvbW5pX211dGV4 KGNvbnN0IG9tbmlfbXV0ZXgmKTsKICAgIG9tbmlfbXV0ZXgmIG9wZXJhdG9yPShjb25zdCBvbW5p X211dGV4Jik7Cgpwcml2YXRlIDoKICAgIG11dGV4X3Qgc29sX211dGV4OyAKfTsKCiAKIAogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgpjbGFzcyAgIG9tbmlfbXV0ZXhfbG9jayB7CiAg ICBvbW5pX211dGV4JiBtdXRleDsKcHVibGljOgogICAgb21uaV9tdXRleF9sb2NrKG9tbmlfbXV0 ZXgmIG0pIDogbXV0ZXgobSkgeyBtdXRleC5sb2NrKCk7IH0KICAgIH5vbW5pX211dGV4X2xvY2so dm9pZCkgeyBtdXRleC51bmxvY2soKTsgfQpwcml2YXRlOgogICAgIAogICAgb21uaV9tdXRleF9s b2NrKGNvbnN0IG9tbmlfbXV0ZXhfbG9jayYpOwogICAgb21uaV9tdXRleF9sb2NrJiBvcGVyYXRv cj0oY29uc3Qgb21uaV9tdXRleF9sb2NrJik7Cn07CgoKIAogCgpjbGFzcyAgIG9tbmlfbXV0ZXhf dW5sb2NrIHsKICAgIG9tbmlfbXV0ZXgmIG11dGV4OwpwdWJsaWM6CiAgICBvbW5pX211dGV4X3Vu bG9jayhvbW5pX211dGV4JiBtKSA6IG11dGV4KG0pIHsgbXV0ZXgudW5sb2NrKCk7IH0KICAgIH5v bW5pX211dGV4X3VubG9jayh2b2lkKSB7IG11dGV4LmxvY2soKTsgfQpwcml2YXRlOgogICAgIAog ICAgb21uaV9tdXRleF91bmxvY2soY29uc3Qgb21uaV9tdXRleF91bmxvY2smKTsKICAgIG9tbmlf bXV0ZXhfdW5sb2NrJiBvcGVyYXRvcj0oY29uc3Qgb21uaV9tdXRleF91bmxvY2smKTsKfTsKCiAK IAogCiAKIAoKY2xhc3MgICBvbW5pX2NvbmRpdGlvbiB7CgogICAgb21uaV9tdXRleCogbXV0ZXg7 CgpwdWJsaWM6CiAgICBvbW5pX2NvbmRpdGlvbihvbW5pX211dGV4KiBtKTsKCSAKCSAKCSAKCiAg ICB+b21uaV9jb25kaXRpb24odm9pZCk7CgogICAgdm9pZCB3YWl0KHZvaWQpOwoJIAoJIAoJIAoJ IAoKICAgIGludCB0aW1lZHdhaXQodW5zaWduZWQgbG9uZyBzZWNzLCB1bnNpZ25lZCBsb25nIG5h bm9zZWNzID0gMCk7CgkgCgkgCgkgCgkgCgkgCgogICAgdm9pZCBzaWduYWwodm9pZCk7CgkgCgkg CgkgCgogICAgdm9pZCBicm9hZGNhc3Qodm9pZCk7CgkgCgkgCgpwcml2YXRlOgogICAgIAogICAg b21uaV9jb25kaXRpb24oY29uc3Qgb21uaV9jb25kaXRpb24mKTsKICAgIG9tbmlfY29uZGl0aW9u JiBvcGVyYXRvcj0oY29uc3Qgb21uaV9jb25kaXRpb24mKTsKCnByaXZhdGUgOgogICAgY29uZF90 IHNvbF9jb25kOyAKfTsKCgogCiAKIAogCiAKCmNsYXNzICAgb21uaV9zZW1hcGhvcmUgewoKcHVi bGljOgogICAgb21uaV9zZW1hcGhvcmUodW5zaWduZWQgaW50IGluaXRpYWwgPSAxKTsKICAgIH5v bW5pX3NlbWFwaG9yZSh2b2lkKTsKCiAgICB2b2lkIHdhaXQodm9pZCk7CgkgCgkgCgogICAgaW50 IHRyeXdhaXQodm9pZCk7CgkgCgkgCgogICAgdm9pZCBwb3N0KHZvaWQpOwoJIAoJIAoKcHJpdmF0 ZToKICAgICAKICAgIG9tbmlfc2VtYXBob3JlKGNvbnN0IG9tbmlfc2VtYXBob3JlJik7CiAgICBv bW5pX3NlbWFwaG9yZSYgb3BlcmF0b3I9KGNvbnN0IG9tbmlfc2VtYXBob3JlJik7Cgpwcml2YXRl IDoKICAgIHNlbWFfdCBzb2xfc2VtOyAKfTsKCiAKIAogCgpjbGFzcyAgIG9tbmlfc2VtYXBob3Jl X2xvY2sgewogICAgb21uaV9zZW1hcGhvcmUmIHNlbTsKcHVibGljOgogICAgb21uaV9zZW1hcGhv cmVfbG9jayhvbW5pX3NlbWFwaG9yZSYgcykgOiBzZW0ocykgeyBzZW0ud2FpdCgpOyB9CiAgICB+ b21uaV9zZW1hcGhvcmVfbG9jayh2b2lkKSB7IHNlbS5wb3N0KCk7IH0KcHJpdmF0ZToKICAgICAK ICAgIG9tbmlfc2VtYXBob3JlX2xvY2soY29uc3Qgb21uaV9zZW1hcGhvcmVfbG9jayYpOwogICAg b21uaV9zZW1hcGhvcmVfbG9jayYgb3BlcmF0b3I9KGNvbnN0IG9tbmlfc2VtYXBob3JlX2xvY2sm KTsKfTsKCgogCiAKIAogCiAKCmNsYXNzICAgb21uaV90aHJlYWQgewoKcHVibGljOgoKICAgIGVu dW0gcHJpb3JpdHlfdCB7CglQUklPUklUWV9MT1csCglQUklPUklUWV9OT1JNQUwsCglQUklPUklU WV9ISUdICiAgICB9OwoKICAgIGVudW0gc3RhdGVfdCB7CglTVEFURV9ORVcsCQkgCgkJCQkgCglT VEFURV9SVU5OSU5HLAkJIAoJU1RBVEVfVEVSTUlOQVRFRAkgCgkJCQkgCiAgICB9OwoKICAgICAK ICAgICAKICAgICAKICAgICAKICAgICAKCiAgICBvbW5pX3RocmVhZCh2b2lkICgqZm4pKHZvaWQq KSwgdm9pZCogYXJnID0gX19udWxsICwKCQlwcmlvcml0eV90IHByaSA9IFBSSU9SSVRZX05PUk1B TCk7CiAgICBvbW5pX3RocmVhZCh2b2lkKiAoKmZuKSh2b2lkKiksIHZvaWQqIGFyZyA9IF9fbnVs bCAsCgkJcHJpb3JpdHlfdCBwcmkgPSBQUklPUklUWV9OT1JNQUwpOwoJIAoJIAoJIAoJIAoJIAoJ IAoKICAgIHZvaWQgc3RhcnQodm9pZCk7CgkgCgkgCgpwcm90ZWN0ZWQ6CgogICAgb21uaV90aHJl YWQodm9pZCogYXJnID0gX19udWxsICwgcHJpb3JpdHlfdCBwcmkgPSBQUklPUklUWV9OT1JNQUwp OwoJIAoJIAoJIAoKICAgIHZvaWQgc3RhcnRfdW5kZXRhY2hlZCh2b2lkKTsKCSAKCSAKCSAKCiAg ICB2aXJ0dWFsIH5vbW5pX3RocmVhZCh2b2lkKTsKCSAKCSAKCSAKCSAKCSAKCSAKCnB1YmxpYzoK CiAgICB2b2lkIGpvaW4odm9pZCoqKTsKCSAKCSAKCSAKCSAKCiAgICB2b2lkIHNldF9wcmlvcml0 eShwcmlvcml0eV90KTsKCSAKCiAgICBzdGF0aWMgb21uaV90aHJlYWQqIGNyZWF0ZSh2b2lkICgq Zm4pKHZvaWQqKSwgdm9pZCogYXJnID0gX19udWxsICwKCQkJICAgICAgIHByaW9yaXR5X3QgcHJp ID0gUFJJT1JJVFlfTk9STUFMKTsKICAgIHN0YXRpYyBvbW5pX3RocmVhZCogY3JlYXRlKHZvaWQq ICgqZm4pKHZvaWQqKSwgdm9pZCogYXJnID0gX19udWxsICwKCQkJICAgICAgIHByaW9yaXR5X3Qg cHJpID0gUFJJT1JJVFlfTk9STUFMKTsKCSAKCSAKCSAKCSAKCiAgICBzdGF0aWMgdm9pZCBleGl0 KHZvaWQqIHJldHVybl92YWx1ZSA9IF9fbnVsbCApOwoJIAoKICAgIHN0YXRpYyBvbW5pX3RocmVh ZCogc2VsZih2b2lkKTsKCSAKCSAKCSAKCiAgICBzdGF0aWMgdm9pZCB5aWVsZCh2b2lkKTsKCSAK CiAgICBzdGF0aWMgdm9pZCBzbGVlcCh1bnNpZ25lZCBsb25nIHNlY3MsIHVuc2lnbmVkIGxvbmcg bmFub3NlY3MgPSAwKTsKCSAKCiAgICBzdGF0aWMgdm9pZCBnZXRfdGltZSh1bnNpZ25lZCBsb25n KiBhYnNfc2VjLCB1bnNpZ25lZCBsb25nKiBhYnNfbnNlYywKCQkJIHVuc2lnbmVkIGxvbmcgcmVs X3NlYyA9IDAsIHVuc2lnbmVkIGxvbmcgcmVsX25zZWM9MCk7CgkgCgkgCgkgCgpwcml2YXRlOgoK ICAgIHZpcnR1YWwgdm9pZCBydW4odm9pZCogICkge30KICAgIHZpcnR1YWwgdm9pZCogcnVuX3Vu ZGV0YWNoZWQodm9pZCogICkgeyByZXR1cm4gX19udWxsIDsgfQoJIAoJIAoJIAoKICAgIHZvaWQg Y29tbW9uX2NvbnN0cnVjdG9yKHZvaWQqIGFyZywgcHJpb3JpdHlfdCBwcmksIGludCBkZXQpOwoJ IAoKICAgIG9tbmlfbXV0ZXggbXV0ZXg7CgkgCgkgCgogICAgc3RhdGVfdCBfc3RhdGU7CiAgICBw cmlvcml0eV90IF9wcmlvcml0eTsKCglzdGF0aWMgb21uaV90aHJlYWQqIHJvb3RfdGhyZWFkOwog ICAgc3RhdGljIG9tbmlfbXV0ZXgqIG5leHRfaWRfbXV0ZXg7CiAgICBzdGF0aWMgaW50IG5leHRf aWQ7CiAgICBpbnQgX2lkOwoKICAgIHZvaWQgKCpmbl92b2lkKSh2b2lkKik7CiAgICB2b2lkKiAo KmZuX3JldCkodm9pZCopOwogICAgdm9pZCogdGhyZWFkX2FyZzsKICAgIGludCBkZXRhY2hlZDsK CnB1YmxpYzoKCiAgICBwcmlvcml0eV90IHByaW9yaXR5KHZvaWQpIHsKCgkgCgoJb21uaV9tdXRl eF9sb2NrIGwobXV0ZXgpOwoJcmV0dXJuIF9wcmlvcml0eTsKICAgIH0KCiAgICBzdGF0ZV90IHN0 YXRlKHZvaWQpIHsKCgkgCgoJb21uaV9tdXRleF9sb2NrIGwobXV0ZXgpOwoJcmV0dXJuIF9zdGF0 ZTsKICAgIH0KCiAgICBpbnQgaWQodm9pZCkgeyByZXR1cm4gX2lkOyB9CgkgCgoKICAgICAKICAg ICAKCiAgICBjbGFzcyAgIGluaXRfdCB7CglzdGF0aWMgaW50IGNvdW50OwogICAgcHVibGljOgoJ aW5pdF90KHZvaWQpOwoJfmluaXRfdCAodm9pZCk7CiAgICB9OwoKICAgIGZyaWVuZCBjbGFzcyBp bml0X3Q7Cgpwcml2YXRlIDoKICAgIHRocmVhZF90IHNvbF90aHJlYWQ7CXN0YXRpYyBpbnQgc29s X3ByaW9yaXR5KHByaW9yaXR5X3QpOwlmcmllbmQgdm9pZCogb21uaV90aHJlYWRfd3JhcHBlcih2 b2lkKiBwdHIpOyAKfTsKCnN0YXRpYyBvbW5pX3RocmVhZDo6aW5pdF90IG9tbmlfdGhyZWFkX2lu aXQ7CgoKIyAyMiAiLi4vU3JjU2hhcmVkL1ByZWZlcmVuY2VNZ3IuaCIgMgoKCiMgMSAiL3Vzci9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvaW5jbHVkZS9zdGRp by5oIiAxIDMgNAoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzIuOTUuMy9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMgNAogCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgv Mi45NS4zL2luY2x1ZGUvdmEtc3BhcmMuaCIgMSAzIDQKIAoKCiAKCgoKCgoKCgogCgp0eXBlZGVm IHZvaWQgKiBfX2dudWNfdmFfbGlzdDsKCgoKIAoKIyAxNjUgIi91c3IvbG9jYWwvbGliL2djYy1s aWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1ZGUvdmEtc3BhcmMuaCIgMyA0Cgoj IDMwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9p bmNsdWRlL3N0ZGFyZy5oIiAyIDMgNAoKIyAxMzUgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1ZGUvc3RkYXJnLmgiIDMgNAoKCgoKCgoKIyAy MDkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2lu Y2x1ZGUvc3RkYXJnLmgiIDMgNAoKCgoKIyAyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJj LXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0CgogCiAKCiAKIAog CgogCgoKCgogCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzdGRpby5oCTEuNzgJOTkvMTIvMDgg U01JIgkKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8y Ljk1LjMvaW5jbHVkZS9pc28vc3RkaW9faXNvLmgiIDEgMyA0CiAKIAoKIAogCiAKCiAKCgoKCiAK CgoKCgoKCgoKCgogCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzdGRpb19pc28uaAkxLjIJOTkv MTAvMjUgU01JIgogCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3ZhX2xpc3QuaCIgMSAzIDQKIAoK CgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXZhX2xpc3QuaAkxLjEyCTk5LzA1LzA0IFNNSSIKCiAK CgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgp0eXBlZGVmIHZvaWQgKl9fdmFfbGlzdDsKCgoKCgp9 CgoKCiMgMzYgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45 NS4zL2luY2x1ZGUvaXNvL3N0ZGlvX2lzby5oIiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvc3Rk aW9fdGFnLmgiIDEgMyA0CiAKCgoKCgoKCiNwcmFnbWEgaWRlbnQJIkAoIylzdGRpb190YWcuaAkx LjMJOTgvMDQvMjAgU01JIgoKCmV4dGVybiAiQyIgewoKCgoKCgoKCnR5cGVkZWYgc3RydWN0IEZJ TEUgIF9fRklMRTsKCgoKfQoKCgojIDM3ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMiAzIDQKCiMgMSAi L3Vzci9pbmNsdWRlL3N0ZGlvX2ltcGwuaCIgMSAzIDQKIAoKCgoKCgoKI3ByYWdtYSBpZGVudAki QCgjKXN0ZGlvX2ltcGwuaAkxLjgJOTkvMDYvMTAgU01JIgoKCgoKZXh0ZXJuICJDIiB7CgoKCgoK CgoKCgoKIyAzNiAiL3Vzci9pbmNsdWRlL3N0ZGlvX2ltcGwuaCIgMyA0CgoKc3RydWN0IEZJTEUg CSAKewoKCgoKCXNzaXplX3QJCV9jbnQ7CSAKCXVuc2lnbmVkIGNoYXIJKl9wdHI7CSAKCgl1bnNp Z25lZCBjaGFyCSpfYmFzZTsJIAoJdW5zaWduZWQgY2hhcglfZmxhZzsJIAoJdW5zaWduZWQgY2hh cglfZmlsZTsJIAoJdW5zaWduZWQJX19vcmllbnRhdGlvbjoyOyAgCgl1bnNpZ25lZAlfX2lvbm9s b2NrOjE7CSAKCXVuc2lnbmVkCV9fZmlsbGVyOjU7Cn07CgoKCgp9CgoKCiMgMzggIi91c3IvbG9j YWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1ZGUvaXNvL3N0 ZGlvX2lzby5oIiAyIDMgNAoKCiAKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKIAoKCgoKCnR5cGVk ZWYJbG9uZyBsb25nCV9fbG9uZ2xvbmdfdDsKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZglfX0ZJTEUg RklMRTsKCgoKCgoKCgoKCgoKdHlwZWRlZiBsb25nCQlmcG9zX3Q7CgoKCgoKCgoKCgoKCgoKCgoK CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIF9fRklMRQlf X2lvYlsyMCBdOwoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIGludAlyZW1vdmUoY29uc3QgY2hhciAq KTsKZXh0ZXJuIGludAlyZW5hbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4g RklMRQkqdG1wZmlsZSh2b2lkKTsKZXh0ZXJuIGNoYXIJKnRtcG5hbShjaGFyICopOwpleHRlcm4g aW50CWZjbG9zZShGSUxFICopOwpleHRlcm4gaW50CWZmbHVzaChGSUxFICopOwpleHRlcm4gRklM RQkqZm9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gRklMRQkqZnJlb3Bl bihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKZXh0ZXJuIHZvaWQJc2V0YnVm KEZJTEUgKiwgY2hhciAqKTsKZXh0ZXJuIGludAlzZXR2YnVmKEZJTEUgKiwgY2hhciAqLCBpbnQs IHNpemVfdCk7CiAKZXh0ZXJuIGludAlmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4p OwogCmV4dGVybiBpbnQJZnNjYW5mKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogCmV4dGVy biBpbnQJcHJpbnRmKGNvbnN0IGNoYXIgKiwgLi4uKTsKIApleHRlcm4gaW50CXNjYW5mKGNvbnN0 IGNoYXIgKiwgLi4uKTsKIApleHRlcm4gaW50CXNwcmludGYoY2hhciAqLCBjb25zdCBjaGFyICos IC4uLik7CiAKZXh0ZXJuIGludAlzc2NhbmYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4u Lik7CmV4dGVybiBpbnQJdmZwcmludGYoRklMRSAqLCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCk7 CmV4dGVybiBpbnQJdnByaW50Zihjb25zdCBjaGFyICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQJ dnNwcmludGYoY2hhciAqLCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCk7CmV4dGVybiBpbnQJZmdl dGMoRklMRSAqKTsKZXh0ZXJuIGNoYXIJKmZnZXRzKGNoYXIgKiwgaW50LCBGSUxFICopOwpleHRl cm4gaW50CWZwdXRjKGludCwgRklMRSAqKTsKZXh0ZXJuIGludAlmcHV0cyhjb25zdCBjaGFyICos IEZJTEUgKik7CgoKZXh0ZXJuIGludAlnZXRjKEZJTEUgKik7CmV4dGVybiBpbnQJcHV0YyhpbnQs IEZJTEUgKik7CgoKCmV4dGVybiBpbnQJZ2V0Y2hhcih2b2lkKTsKZXh0ZXJuIGludAlwdXRjaGFy KGludCk7CgpleHRlcm4gY2hhcgkqZ2V0cyhjaGFyICopOwpleHRlcm4gaW50CXB1dHMoY29uc3Qg Y2hhciAqKTsKZXh0ZXJuIGludAl1bmdldGMoaW50LCBGSUxFICopOwpleHRlcm4gc2l6ZV90CWZy ZWFkKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7CmV4dGVybiBzaXplX3QJZndyaXRl KGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7CmV4dGVybiBpbnQJZmdldHBv cyhGSUxFICosIGZwb3NfdCAqKTsKZXh0ZXJuIGludAlmc2VlayhGSUxFICosIGxvbmcsIGludCk7 CmV4dGVybiBpbnQJZnNldHBvcyhGSUxFICosIGNvbnN0IGZwb3NfdCAqKTsKZXh0ZXJuIGxvbmcJ ZnRlbGwoRklMRSAqKTsKZXh0ZXJuIHZvaWQJcmV3aW5kKEZJTEUgKik7CgoKZXh0ZXJuIHZvaWQJ Y2xlYXJlcnIoRklMRSAqKTsKZXh0ZXJuIGludAlmZW9mKEZJTEUgKik7CmV4dGVybiBpbnQJZmVy cm9yKEZJTEUgKik7CgpleHRlcm4gdm9pZAlwZXJyb3IoY29uc3QgY2hhciAqKTsKCgpleHRlcm4g aW50CV9fZmlsYnVmKEZJTEUgKik7CmV4dGVybiBpbnQJX19mbHNidWYoaW50LCBGSUxFICopOwoK CiMgMjc1ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUu My9pbmNsdWRlL2lzby9zdGRpb19pc28uaCIgMyA0CgoKCgoKCgoKIyAzMzEgIi91c3IvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1ZGUvaXNvL3N0ZGlv X2lzby5oIiAzIDQKCgoKCgp9CgoKCiMgMjQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMt c3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgogCgoKCgoKCgog CgoKCiMgODMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45 NS4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0CgoKCmV4dGVybiAiQyIgewoKCgojIDEwNCAiL3Vzci9s b2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvaW5jbHVkZS9zdGRp by5oIiAzIDQKCgoKCgoKCnR5cGVkZWYgX19sb25nbG9uZ190CWZwb3M2NF90OwoKCgogCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKZXh0ZXJuIHVuc2lnbmVkIGNoYXIJIF9zaWJ1ZltdLCBfc29idWZb XTsKCgogCiMgMTc4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44 LzIuOTUuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoKCgpleHRlcm4gdW5zaWduZWQgY2hhcgkqX2J1 ZmVuZHRhYltdOwpleHRlcm4gRklMRQkJKl9sYXN0YnVmOwoKCiAKIyAyMDggIi91c3IvbG9jYWwv bGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1ZGUvc3RkaW8uaCIg MyA0CgoKCgoKZXh0ZXJuIGNoYXIJKnRtcG5hbV9yKGNoYXIgKik7CgoKCmV4dGVybiB2b2lkIHNl dGJ1ZmZlcihGSUxFICosIGNoYXIgKiwgc2l6ZV90KTsKZXh0ZXJuIGludCBzZXRsaW5lYnVmKEZJ TEUgKik7CgoKCgogCmV4dGVybiBpbnQJc25wcmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNo YXIgKiwgLi4uKTsKCgoKCmV4dGVybiBpbnQJdnNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25z dCBjaGFyICosIF9fZ251Y192YV9saXN0KTsKCgogCgoKCgoKZXh0ZXJuIEZJTEUJKmZkb3Blbihp bnQsIGNvbnN0IGNoYXIgKik7CmV4dGVybiBjaGFyCSpjdGVybWlkKGNoYXIgKik7CmV4dGVybiBp bnQJZmlsZW5vKEZJTEUgKik7CgoKCiAKCgoKCmV4dGVybiB2b2lkCWZsb2NrZmlsZShGSUxFICop OwpleHRlcm4gaW50CWZ0cnlsb2NrZmlsZShGSUxFICopOwpleHRlcm4gdm9pZAlmdW5sb2NrZmls ZShGSUxFICopOwpleHRlcm4gaW50CWdldGNfdW5sb2NrZWQoRklMRSAqKTsKZXh0ZXJuIGludAln ZXRjaGFyX3VubG9ja2VkKHZvaWQpOwpleHRlcm4gaW50CXB1dGNfdW5sb2NrZWQoaW50LCBGSUxF ICopOwpleHRlcm4gaW50CXB1dGNoYXJfdW5sb2NrZWQoaW50KTsKCgoKIAoKCgoKZXh0ZXJuIEZJ TEUJKnBvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIJKmN1c2Vy aWQoY2hhciAqKTsKZXh0ZXJuIGNoYXIJKnRlbXBuYW0oY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICopOwpleHRlcm4gaW50CWdldG9wdChpbnQsIGNoYXIgKmNvbnN0ICosIGNvbnN0IGNoYXIgKik7 CgpleHRlcm4gaW50CWdldHN1Ym9wdChjaGFyICoqLCBjaGFyICpjb25zdCAqLCBjaGFyICoqKTsK CmV4dGVybiBjaGFyCSpvcHRhcmc7CmV4dGVybiBpbnQJb3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsK ZXh0ZXJuIGludAlnZXR3KEZJTEUgKik7CmV4dGVybiBpbnQJcHV0dyhpbnQsIEZJTEUgKik7CmV4 dGVybiBpbnQJcGNsb3NlKEZJTEUgKik7CgoKCiAKCgoKZXh0ZXJuIGludAlmc2Vla28oRklMRSAq LCBvZmZfdCwgaW50KTsKZXh0ZXJuIG9mZl90CWZ0ZWxsbyhGSUxFICopOwoKCiAKCgoKCgpleHRl cm4gRklMRQkqZm9wZW42NChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBGSUxF CSpmcmVvcGVuNjQoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIEZJTEUgKik7CmV4dGVybiBG SUxFCSp0bXBmaWxlNjQodm9pZCk7CmV4dGVybiBpbnQJZmdldHBvczY0KEZJTEUgKiwgZnBvczY0 X3QgKik7CmV4dGVybiBpbnQJZnNldHBvczY0KEZJTEUgKiwgY29uc3QgZnBvczY0X3QgKik7CmV4 dGVybiBpbnQJZnNlZWtvNjQoRklMRSAqLCBvZmY2NF90LCBpbnQpOwpleHRlcm4gb2ZmNjRfdAlm dGVsbG82NChGSUxFICopOwoKCiMgMzY4ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNAoKCgoKCgoKCgoKCgoKCgoj IDM5MSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMv aW5jbHVkZS9zdGRpby5oIiAzIDQKCgoKCgoKCgoKfQoKCgojIDI0ICIuLi9TcmNTaGFyZWQvUHJl ZmVyZW5jZU1nci5oIiAyCgoKCgpjbGFzcyBFbVRyYW5zcG9ydDsKCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgp0eXBlZGVmIGNvbnN0IGNoYXIq IFByZWZLZXlUeXBlOwoKYm9vbCBQcmVmS2V5c0VxdWFsIChQcmVmS2V5VHlwZSwgUHJlZktleVR5 cGUpOwoKY2xhc3MgQmFzZVByZWZlcmVuY2UKewoJcHVibGljOgoJCQkJCQkJCUJhc2VQcmVmZXJl bmNlCQkoUHJlZktleVR5cGUgbmFtZSwgYm9vbCA9IHRydWUpOwoJCQkJCQkJCUJhc2VQcmVmZXJl bmNlCQkobG9uZyBpbmRleCwgYm9vbCA9IHRydWUpOwoJCXZpcnR1YWwgCQkJCX5CYXNlUHJlZmVy ZW5jZSAJKHZvaWQpOwoKCQlib29sCQkJCQlMb2FkZWQJCQkJKHZvaWQpCXsgcmV0dXJuIGZMb2Fk ZWQ7IH0KCgkJdm9pZAkJCQkJRmx1c2gJCQkJKHZvaWQpCXsgdGhpcy0+U2F2ZSAoKTsgfQoKCXBy b3RlY3RlZDoKCQl2b2lkCQkJCQlMb2FkCQkJCSh2b2lkKTsKCQl2b2lkCQkJCQlTYXZlCQkJCSh2 b2lkKTsKCglwcm90ZWN0ZWQ6CgkJdmlydHVhbCBib29sCQkJRG9Mb2FkCQkJCSh2b2lkKSA9IDA7 CgkJdmlydHVhbCB2b2lkCQkJRG9TYXZlCQkJCSh2b2lkKSA9IDA7CgoJcHJvdGVjdGVkOgoJCXN0 cmluZwkJCQkJZk5hbWU7CgkJYm9vbAkJCQkJZkxvYWRlZDsKCQlib29sCQkJCQlmQ2hhbmdlZDsK CQlib29sCQkJCQlmQWNxdWlyZUxvY2s7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgUHJl ZmVyZW5jZSA6IHB1YmxpYyBCYXNlUHJlZmVyZW5jZQp7CglwdWJsaWM6CgkJCQkJCQkJUHJlZmVy ZW5jZQkJCShQcmVmS2V5VHlwZSBuYW1lLCBib29sID0gdHJ1ZSk7CgkJCQkJCQkJUHJlZmVyZW5j ZQkJCShsb25nIGluZGV4LCBib29sID0gdHJ1ZSk7CgkJdmlydHVhbCAJCQkJflByZWZlcmVuY2Ug CQkodm9pZCk7CgoJIAoJIAoJIAoJIAogCiAKCQljb25zdCBUJgkJCQlvcGVyYXRvciooKSBjb25z dAkJCXsgcmV0dXJuICpHZXRWYWx1ZSAoKTsgfQoJCWNvbnN0IFQqCQkJCW9wZXJhdG9yLT4oKSBj b25zdAkJCXsgcmV0dXJuIEdldFZhbHVlICgpOyB9CgoJCWNvbnN0IFQqCQkJCUdldFZhbHVlICgp IGNvbnN0CQkJeyAoKHZvaWQpIDApIDsgcmV0dXJuICZmVmFsdWU7IH0KCgkJY29uc3QgVCYJCQkJ b3BlcmF0b3I9KGNvbnN0IFQmIHJocykgCXsgZlZhbHVlID0gcmhzOwoJCQkJCQkJCQkJCQkJCQkg IGZMb2FkZWQgPSB0cnVlOwoJCQkJCQkJCQkJCQkJCQkgIGZDaGFuZ2VkID0gdHJ1ZTsKCQkJCQkJ CQkJCQkJCQkJICB0aGlzLT5GbHVzaCAoKTsKCQkJCQkJCQkJCQkJCQkJICByZXR1cm4gZlZhbHVl OyB9CgoJcHJvdGVjdGVkOgoJCXZpcnR1YWwgYm9vbAkJCURvTG9hZAkJCQkodm9pZCk7CgkJdmly dHVhbCB2b2lkCQkJRG9TYXZlCQkJCSh2b2lkKTsKCglwcml2YXRlOgoJCVQJCQkJCQlmVmFsdWU7 Cn07Cgp0eXBlZGVmIHZvaWQqCQlQcmVmUmVmQ29uOwp0eXBlZGVmIHZvaWQJCSgqUHJlZk5vdGlm eUZ1bmMpKFByZWZLZXlUeXBlLCBQcmVmUmVmQ29uKTsKdHlwZWRlZiBTdHJpbmdMaXN0CVByZWZL ZXlMaXN0OwoKZW51bQp7CglNUlVfQ09VTlQgPSA5Cn07CgpjbGFzcyBQcmVmZXJlbmNlcwp7Cglw dWJsaWM6CgkJCQkJCQkJUHJlZmVyZW5jZXMgCQkodm9pZCk7CgkJdmlydHVhbCAJCQkJflByZWZl cmVuY2VzCQkodm9pZCk7CgoJCXZpcnR1YWwgdm9pZAkJCUxvYWQJCQkJKHZvaWQpOwoJCXZpcnR1 YWwgdm9pZAkJCVNhdmUJCQkJKHZvaWQpOwoKIAogCiAKCXB1YmxpYzoKCQlib29sCQkJCQlHZXRQ cmVmIAkJCShjb25zdCBzdHJpbmcmIGtleSwgc3RyaW5nJiB2YWx1ZSk7CgkJdm9pZAkJCQkJU2V0 UHJlZiAJCQkoY29uc3Qgc3RyaW5nJiBrZXksIGNvbnN0IHN0cmluZyYgdmFsdWUpOwoJCXZvaWQJ CQkJCURlbGV0ZVByZWYJCQkoY29uc3Qgc3RyaW5nJiBrZXkpOwoKCXB1YmxpYzoKCQl2b2lkCQkJ CQlQdXNoUHJlZml4CQkJKGNvbnN0IHN0cmluZyYgcHJlZml4KTsKCQl2b2lkCQkJCQlQdXNoUHJl Zml4CQkJKGxvbmcgaW5kZXgpOwoJCXZvaWQJCQkJCVBvcFByZWZpeAkJCSh2b2lkKTsKCgkJc3Ry aW5nCQkJCQlFeHBhbmRLZXkJCQkoY29uc3Qgc3RyaW5nJiBuYW1lKTsKCQlzdHJpbmcJCQkJCUFw cGVuZE5hbWUJCQkoc3RyaW5nIGtleSwgY29uc3Qgc3RyaW5nJiBuYW1lKTsKCglwdWJsaWM6CgkJ dm9pZAkJCQkJQWRkTm90aWZpY2F0aW9uCQkoUHJlZk5vdGlmeUZ1bmMsIFByZWZLZXlUeXBlLCBQ cmVmUmVmQ29uID0gX19udWxsICk7CgkJdm9pZAkJCQkJQWRkTm90aWZpY2F0aW9uCQkoUHJlZk5v dGlmeUZ1bmMsIGNvbnN0IFByZWZLZXlMaXN0JiwgUHJlZlJlZkNvbiA9IF9fbnVsbCApOwoJCXZv aWQJCQkJCVJlbW92ZU5vdGlmaWNhdGlvbgkoUHJlZk5vdGlmeUZ1bmMpOwoJCXZvaWQJCQkJCVJl bW92ZU5vdGlmaWNhdGlvbgkoUHJlZk5vdGlmeUZ1bmMsIFByZWZLZXlUeXBlKTsKCQl2b2lkCQkJ CQlSZW1vdmVOb3RpZmljYXRpb24JKFByZWZOb3RpZnlGdW5jLCBjb25zdCBQcmVmS2V5TGlzdCYp OwoJCXZvaWQJCQkJCURvTm90aWZ5CQkJKGNvbnN0IHN0cmluZyYga2V5KTsKCglwcm90ZWN0ZWQ6 CgkJdmlydHVhbCBCb29sCQkJUmVhZFByZWZlcmVuY2VzCQkoU3RyaW5nU3RyaW5nTWFwJik7CgkJ dmlydHVhbCB2b2lkCQkJV3JpdGVQcmVmZXJlbmNlcwkoY29uc3QgU3RyaW5nU3RyaW5nTWFwJik7 CgkJdmlydHVhbCBFbUZpbGVSZWYJCUdldFByZWZSZWYJCQkodm9pZCk7CgkJdmlydHVhbCB2b2lk CQkJV3JpdGVCYW5uZXIgCQkoRklMRSopOwoJCXZpcnR1YWwgQm9vbAkJCVJlYWRCYW5uZXIJCQko RklMRSopOwoJCXZpcnR1YWwgdm9pZAkJCVN0cmlwVW51c2VkIAkJKHZvaWQpOwoKCXByb3RlY3Rl ZDoKCQl0eXBlZGVmIFN0cmluZ1N0cmluZ01hcAkJCVByZWZMaXN0OwoJCXR5cGVkZWYgUHJlZkxp c3Q6OnZhbHVlX3R5cGUJUHJlZlBhaXJUeXBlOwoJCXR5cGVkZWYgUHJlZkxpc3Q6Oml0ZXJhdG9y CQlpdGVyYXRvcjsKCgkJUHJlZkxpc3QJCQkJZlByZWZlcmVuY2VzOwoKCQl0eXBlZGVmIFN0cmlu Z0xpc3QJCVByZWZpeFR5cGU7CgkJUHJlZml4VHlwZQkJCQlmUHJlZml4ZXM7CgoJCXN0cnVjdCBQ cmVmTm90aWZ5VHlwZQoJCXsKCQkJUHJlZk5vdGlmeUZ1bmMJCWZGdW5jOwoJCQlQcmVmS2V5TGlz dAkJCWZLZXlMaXN0OwoJCQlQcmVmUmVmQ29uCQkJZlJlZkNvbjsKCQl9OwoJCXR5cGVkZWYgdmVj dG9yPFByZWZOb3RpZnlUeXBlPglQcmVmTm90aWZ5TGlzdDsKCgkJUHJlZk5vdGlmeUxpc3QJCQlm Tm90aWZpY2F0aW9uczsKCglwdWJsaWM6CgkJc3RhdGljIG9tbmlfbXV0ZXgJCWZnUHJlZnNNdXRl eDsKfTsKCmV4dGVybiBQcmVmZXJlbmNlcyogZ1ByZWZzOwoKCmNsYXNzIEVtdWxhdG9yUHJlZmVy ZW5jZXMgOiBwdWJsaWMgUHJlZmVyZW5jZXMKewoJcHVibGljOgoJCQkJCQkJCUVtdWxhdG9yUHJl ZmVyZW5jZXMgKHZvaWQpOwoJCXZpcnR1YWwgCQkJCX5FbXVsYXRvclByZWZlcmVuY2VzKHZvaWQp OwoKCQl2aXJ0dWFsIHZvaWQJCQlMb2FkCQkJCSh2b2lkKTsKCgkJdm9pZAkJCQkJR2V0RGF0YWJh c2VNUlUJCShFbUZpbGVSZWZMaXN0Jik7CgkJdm9pZAkJCQkJR2V0U2Vzc2lvbk1SVQkJKEVtRmls ZVJlZkxpc3QmKTsKCQl2b2lkCQkJCQlHZXRST01NUlUJCQkoRW1GaWxlUmVmTGlzdCYpOwoKCQlF bUZpbGVSZWYJCQkJR2V0SW5kUFJDTVJVCQkoaW50KTsKCQlFbUZpbGVSZWYJCQkJR2V0SW5kUkFN TVJVCQkoaW50KTsKCQlFbUZpbGVSZWYJCQkJR2V0SW5kUk9NTVJVCQkoaW50KTsKCQlFbUZpbGVS ZWYJCQkJR2V0SW5kTVJVCQkJKGNvbnN0IEVtRmlsZVJlZkxpc3QmLCBpbnQpOwoKCQl2b2lkCQkJ CQlVcGRhdGVQUkNNUlUJCShjb25zdCBFbUZpbGVSZWYmKTsKCQl2b2lkCQkJCQlVcGRhdGVSQU1N UlUJCShjb25zdCBFbUZpbGVSZWYmKTsKCQl2b2lkCQkJCQlVcGRhdGVST01NUlUJCShjb25zdCBF bUZpbGVSZWYmKTsKCQl2b2lkCQkJCQlVcGRhdGVNUlUJCQkoRW1GaWxlUmVmTGlzdCYsIGNvbnN0 IEVtRmlsZVJlZiYpOwoKCQl2b2lkCQkJCQlSZW1vdmVQUkNNUlUJCShjb25zdCBFbUZpbGVSZWYm KTsKCQl2b2lkCQkJCQlSZW1vdmVSQU1NUlUJCShjb25zdCBFbUZpbGVSZWYmKTsKCQl2b2lkCQkJ CQlSZW1vdmVST01NUlUJCShjb25zdCBFbUZpbGVSZWYmKTsKCQl2b2lkCQkJCQlSZW1vdmVNUlUJ CQkoRW1GaWxlUmVmTGlzdCYsIGNvbnN0IEVtRmlsZVJlZiYpOwoKCQl2b2lkCQkJCQlTZXRUcmFu c3BvcnRzCQkodm9pZCk7CgoJCXZvaWQJCQkJCVNldFRyYW5zcG9ydEZvckRldmljZQkoRW1VQVJU RGV2aWNlVHlwZSwgRW1UcmFuc3BvcnQqKTsKCQlFbVRyYW5zcG9ydCoJCQlHZXRUcmFuc3BvcnRG b3JEZXZpY2UJKEVtVUFSVERldmljZVR5cGUpOwoKCQkgCgoJCUJvb2wJCQkJCUxvZ01lc3NhZ2UJ CQkoQm9vbCBpc0ZhdGFsKTsKCQlCb29sCQkJCQlTaG91bGRRdWl0CQkJKEJvb2wgaXNGYXRhbCk7 CgkJQm9vbAkJCQkJU2hvdWxkQ29udGludWUJCShCb29sIGlzRmF0YWwpOwoJCUJvb2wJCQkJCVNo b3VsZE5leHRHcmVtbGluCShCb29sIGlzRmF0YWwpOwoKCXByb3RlY3RlZDoKCQl2aXJ0dWFsIHZv aWQJCQlXcml0ZUJhbm5lciAJCShGSUxFKik7CgkJdmlydHVhbCBCb29sCQkJUmVhZEJhbm5lcgkJ CShGSUxFKik7CgkJdmlydHVhbCB2b2lkCQkJU3RyaXBVbnVzZWQgCQkodm9pZCk7CgkJdm9pZAkJ CQkJTWlncmF0ZU9sZFByZWZzCQkodm9pZCk7CgoJCUVtVHJhbnNwb3J0KgkJCWZUcmFuc3BvcnRz W2tVQVJURW5kXTsKfTsKCmV4dGVybiBFbXVsYXRvclByZWZlcmVuY2VzKiBnRW11UHJlZnM7CgoK IAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgNDA0ICIuLi9TcmNTaGFyZWQvUHJlZmVyZW5jZU1n ci5oIgoKIAoKICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlXaW5kb3dMb2NhdGlvbiA7IAkg IGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleUdDV0xvY2F0aW9uIDsgCSAgZXh0ZXJuIFByZWZL ZXlUeXBlIGtQcmVmS2V5TVBXTG9jYXRpb24gOyAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZL ZXlCYWNrZ3JvdW5kQ29sb3IgOyAgICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlIaWdobGln aHRDb2xvciA7ICAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlSZWRpcmVjdE5ldExpYiA7 IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleUVuYWJsZVNvdW5kcyA7IAkgIGV4dGVybiBQ cmVmS2V5VHlwZSBrUHJlZktleUNsb3NlQWN0aW9uIDsgCSAgZXh0ZXJuIFByZWZLZXlUeXBlIGtQ cmVmS2V5VXNlck5hbWUgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlQb3J0U2VyaWFs IDsgCSAgZXh0ZXJuIFByZWZLZXlUeXBlIGtQcmVmS2V5UG9ydElSIDsgCSAgZXh0ZXJuIFByZWZL ZXlUeXBlIGtQcmVmS2V5UG9ydE15c3RlcnkgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZL ZXlQb3J0RG93bmxvYWQgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlQb3J0U2VyaWFs U29ja2V0IDsgCSAgZXh0ZXJuIFByZWZLZXlUeXBlIGtQcmVmS2V5UG9ydElSU29ja2V0IDsgCSAg ZXh0ZXJuIFByZWZLZXlUeXBlIGtQcmVmS2V5UmVwb3J0RnJlZUNodW5rQWNjZXNzIDsgCSAgZXh0 ZXJuIFByZWZLZXlUeXBlIGtQcmVmS2V5UmVwb3J0SGFyZHdhcmVSZWdpc3RlckFjY2VzcyA7IAkg IGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleVJlcG9ydExvd01lbW9yeUFjY2VzcyA7IAkgIGV4 dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleVJlcG9ydExvd1N0YWNrQWNjZXNzIDsgCSAgZXh0ZXJu IFByZWZLZXlUeXBlIGtQcmVmS2V5UmVwb3J0TWVtTWdyRGF0YUFjY2VzcyA7IAkgIGV4dGVybiBQ cmVmS2V5VHlwZSBrUHJlZktleVJlcG9ydE1lbU1nckxlYWtzIDsgCSAgZXh0ZXJuIFByZWZLZXlU eXBlIGtQcmVmS2V5UmVwb3J0TWVtTWdyU2VtYXBob3JlIDsgCSAgZXh0ZXJuIFByZWZLZXlUeXBl IGtQcmVmS2V5UmVwb3J0T2Zmc2NyZWVuT2JqZWN0IDsgCSAgZXh0ZXJuIFByZWZLZXlUeXBlIGtQ cmVmS2V5UmVwb3J0T3ZlcmxheUVycm9ycyA7IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktl eVJlcG9ydFByb3NjcmliZWRGdW5jdGlvbiA7IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktl eVJlcG9ydFJPTUFjY2VzcyA7IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleVJlcG9ydFNj cmVlbkFjY2VzcyA7IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleVJlcG9ydFNpemVsZXNz T2JqZWN0IDsgCSAgZXh0ZXJuIFByZWZLZXlUeXBlIGtQcmVmS2V5UmVwb3J0U3RhY2tBbG1vc3RP dmVyZmxvdyA7IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleVJlcG9ydFN0cmljdEludGxD aGVja3MgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlSZXBvcnRTeXN0ZW1HbG9iYWxB Y2Nlc3MgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlSZXBvcnRVSU1nckRhdGFBY2Nl c3MgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlSZXBvcnRVbmxvY2tlZENodW5rQWNj ZXNzIDsgCSAgZXh0ZXJuIFByZWZLZXlUeXBlIGtQcmVmS2V5UmVwb3J0TG9ja2VkUmVjb3JkcyA7 IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleVJlcG9ydFN5c0ZhdGFsQWxlcnQgOyAJICBl eHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlJbnRlcmNlcHRTeXNGYXRhbEFsZXJ0IDsgCSAgZXh0 ZXJuIFByZWZLZXlUeXBlIGtQcmVmS2V5RGlhbG9nQmVlcCA7IAkgIGV4dGVybiBQcmVmS2V5VHlw ZSBrUHJlZktleUxvZ0Vycm9yTWVzc2FnZXMgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZL ZXlMb2dXYXJuaW5nTWVzc2FnZXMgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlMb2dH cmVtbGlucyA7IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleUxvZ0NQVU9wY29kZXMgOyAJ ICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlMb2dFbnF1ZXVlZEV2ZW50cyA7IAkgIGV4dGVy biBQcmVmS2V5VHlwZSBrUHJlZktleUxvZ0RlcXVldWVkRXZlbnRzIDsgCSAgZXh0ZXJuIFByZWZL ZXlUeXBlIGtQcmVmS2V5TG9nU3lzdGVtQ2FsbHMgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1By ZWZLZXlMb2dBcHBsaWNhdGlvbkNhbGxzIDsgCSAgZXh0ZXJuIFByZWZLZXlUeXBlIGtQcmVmS2V5 TG9nU2VyaWFsIDsgCSAgZXh0ZXJuIFByZWZLZXlUeXBlIGtQcmVmS2V5TG9nU2VyaWFsRGF0YSA7 IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleUxvZ05ldExpYiA7IAkgIGV4dGVybiBQcmVm S2V5VHlwZSBrUHJlZktleUxvZ05ldExpYkRhdGEgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1By ZWZLZXlMb2dFeGdNZ3IgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlMb2dFeGdNZ3JE YXRhIDsgCSAgZXh0ZXJuIFByZWZLZXlUeXBlIGtQcmVmS2V5TG9nSExEZWJ1Z2dlciA7IAkgIGV4 dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleUxvZ0hMRGVidWdnZXJEYXRhIDsgCSAgZXh0ZXJuIFBy ZWZLZXlUeXBlIGtQcmVmS2V5TG9nTExEZWJ1Z2dlciA7IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBr UHJlZktleUxvZ0xMRGVidWdnZXJEYXRhIDsgCSAgZXh0ZXJuIFByZWZLZXlUeXBlIGtQcmVmS2V5 TG9nUlBDIDsgCSAgZXh0ZXJuIFByZWZLZXlUeXBlIGtQcmVmS2V5TG9nUlBDRGF0YSA7IAkgIGV4 dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleUxvZ0ZpbGVTaXplIDsgCSAgZXh0ZXJuIFByZWZLZXlU eXBlIGtQcmVmS2V5TG9nRGVmYXVsdERpciA7IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktl eURlYnVnZ2VyU29ja2V0UG9ydCA7IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleVJQQ1Nv Y2tldFBvcnQgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlXYXJuQWJvdXRTa2luc0Rp ciA7IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleUFza0Fib3V0U3RhcnRNZW51IDsgCSAg ZXh0ZXJuIFByZWZLZXlUeXBlIGtQcmVmS2V5U3RhcnRNZW51SXRlbSA7IAkgIGV4dGVybiBQcmVm S2V5VHlwZSBrUHJlZktleUZpbGxOZXdCbG9ja3MgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1By ZWZLZXlGaWxsUmVzaXplZEJsb2NrcyA7IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleUZp bGxEaXNwb3NlZEJsb2NrcyA7IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleUZpbGxTdGFj ayA7IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleUxhc3RDb25maWd1cmF0aW9uIDsgCSAg ZXh0ZXJuIFByZWZLZXlUeXBlIGtQcmVmS2V5R3JlbWxpbkluZm8gOyAJICBleHRlcm4gUHJlZktl eVR5cGUga1ByZWZLZXlIb3JkZUluZm8gOyAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlM YXN0UFNGIDsgCSAgZXh0ZXJuIFByZWZLZXlUeXBlIGtQcmVmS2V5Uk9NX01SVSA7IAkgIGV4dGVy biBQcmVmS2V5VHlwZSBrUHJlZktleVBSQ19NUlUgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1By ZWZLZXlQU0ZfTVJVIDsgCSAgZXh0ZXJuIFByZWZLZXlUeXBlIGtQcmVmS2V5U2tpbnMgOyAJICBl eHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlTY2FsZSA7IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBr UHJlZktleURpbVdoZW5JbmFjdGl2ZSA7IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleVNo b3dEZWJ1Z01vZGUgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlTaG93R3JlbWxpbk1v ZGUgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlTdGF5T25Ub3AgOyAJICBleHRlcm4g UHJlZktleVR5cGUga1ByZWZLZXlXYXJuaW5nT2ZmIDsgCSAgZXh0ZXJuIFByZWZLZXlUeXBlIGtQ cmVmS2V5RXJyb3JPZmYgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlXYXJuaW5nT24g OyAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlFcnJvck9uIDsgCSAgZXh0ZXJuIFByZWZL ZXlUeXBlIGtQcmVmS2V5TGFzdFRyYWNlclR5cGUgOyAJICBleHRlcm4gUHJlZktleVR5cGUga1By ZWZLZXlUcmFjZXJUeXBlcyA7IAkgIGV4dGVybiBQcmVmS2V5VHlwZSBrUHJlZktleUZmc0hvbWUg OyAJICBleHRlcm4gUHJlZktleVR5cGUga1ByZWZLZXlTbG90TGlzdCA7ICAgCgoKIyAxOSAiLi4v U3JjU2hhcmVkL0xvZ2dpbmcuaCIgMgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3Bh cmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1ZGUvc3RkYXJnLmgiIDEgMyA0CiAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1z dW4tc29sYXJpczIuOC8yLjk1LjMvaW5jbHVkZS92YS1zcGFyYy5oIiAxIDMgNAogCgoKIAoKIyAx NyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvaW5j bHVkZS92YS1zcGFyYy5oIiAzIDQKCgogCgoKCgoKIAoKCgoKCgoKCgojIDQ3ICIvdXNyL2xvY2Fs L2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL3ZhLXNwYXJj LmgiIDMgNAoKCgp2b2lkIHZhX2VuZCAoX19nbnVjX3ZhX2xpc3QpOwkJIAoKIAoKZW51bSBfX3Zh X3R5cGVfY2xhc3NlcyB7CiAgX19ub190eXBlX2NsYXNzID0gLTEsCiAgX192b2lkX3R5cGVfY2xh c3MsCiAgX19pbnRlZ2VyX3R5cGVfY2xhc3MsCiAgX19jaGFyX3R5cGVfY2xhc3MsCiAgX19lbnVt ZXJhbF90eXBlX2NsYXNzLAogIF9fYm9vbGVhbl90eXBlX2NsYXNzLAogIF9fcG9pbnRlcl90eXBl X2NsYXNzLAogIF9fcmVmZXJlbmNlX3R5cGVfY2xhc3MsCiAgX19vZmZzZXRfdHlwZV9jbGFzcywK ICBfX3JlYWxfdHlwZV9jbGFzcywKICBfX2NvbXBsZXhfdHlwZV9jbGFzcywKICBfX2Z1bmN0aW9u X3R5cGVfY2xhc3MsCiAgX19tZXRob2RfdHlwZV9jbGFzcywKICBfX3JlY29yZF90eXBlX2NsYXNz LAogIF9fdW5pb25fdHlwZV9jbGFzcywKICBfX2FycmF5X3R5cGVfY2xhc3MsCiAgX19zdHJpbmdf dHlwZV9jbGFzcywKICBfX3NldF90eXBlX2NsYXNzLAogIF9fZmlsZV90eXBlX2NsYXNzLAogIF9f bGFuZ190eXBlX2NsYXNzCn07CgoKCgogCgoKCgogCgoKCgojIDEzNCAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvaW5jbHVkZS92YS1zcGFyYy5oIiAz IDQKCgoKCgogCgogCgoKCiMgMTU5ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1z b2xhcmlzMi44LzIuOTUuMy9pbmNsdWRlL3ZhLXNwYXJjLmgiIDMgNAoKCgogCgoKCiMgMzAgIi91 c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1ZGUv c3RkYXJnLmgiIDIgMyA0CgojIDEzNSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4t c29sYXJpczIuOC8yLjk1LjMvaW5jbHVkZS9zdGRhcmcuaCIgMyA0CgoKCgoKCgoKIAogCgoKCgoK CgoKCgoKCgoKIAoKCgoKCgoKCgoKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwoKCgoK IyAyMDcgIi91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4z L2luY2x1ZGUvc3RkYXJnLmgiIDMgNAoKCgoKCgojIDIyICIuLi9TcmNTaGFyZWQvTG9nZ2luZy5o IiAyCgoKCnR5cGVkZWYgZGVxdWU8dWludDg+CUJ5dGVEZXF1ZTsKCmNsYXNzIEVtU3RyZWFtRmls ZTsKCgpjbGFzcyBMb2dTdHJlYW1Jbm5lcgp7CgkgCgkgCgoJcHVibGljOgoJCQkJCQkJCUxvZ1N0 cmVhbUlubmVyCShjb25zdCBjaGFyKiBiYXNlTmFtZSk7CgkJCQkJCQkJfkxvZ1N0cmVhbUlubmVy CSh2b2lkKTsKCgkJaW50CQkJCQkJRHVtcEhleAkJCShjb25zdCB2b2lkKiwgbG9uZyBkYXRhTGVu KTsKCQlpbnQJCQkJCQlWUHJpbnRmCQkJKGNvbnN0IGNoYXIqIGZtdCwgdmFfbGlzdCBhcmdzLCBC b29sIHRpbWVzdGFtcCA9IHRydWUpOwoJCWludAkJCQkJCVdyaXRlCQkJKGNvbnN0IHZvaWQqIGJ1 ZmZlciwgbG9uZyBzaXplLCBCb29sIHRpbWVzdGFtcCA9IHRydWUpOwoKCQl2b2lkCQkJCQlDbGVh cgkJCSh2b2lkKTsKCgkJbG9uZwkJCQkJR2V0TG9nU2l6ZQkJKHZvaWQpOwoJCXZvaWQJCQkJCVNl dExvZ1NpemUJCShsb25nKTsKCgkJdm9pZAkJCQkJRW5zdXJlTmV3RmlsZQkodm9pZCk7CgkJdm9p ZAkJCQkJRHVtcFRvRmlsZQkJKHZvaWQpOwoKCXByaXZhdGU6CgkJdm9pZAkJCQkJRHVtcFRvRmls ZQkJCShFbVN0cmVhbUZpbGUmLCBjb25zdCBjaGFyKiwgbG9uZyBzaXplKTsKCQlFbUZpbGVSZWYJ CQkJQ3JlYXRlRmlsZVJlZmVyZW5jZQkodm9pZCk7CgkJdm9pZAkJCQkJVGltZXN0YW1wCQkJKHZv aWQpOwoJCXZvaWQJCQkJCU5ld0xpbmUJCQkJKHZvaWQpOwoJCXZvaWQJCQkJCUFwcGVuZAkJCQko Y29uc3QgY2hhciogYnVmZmVyLCBsb25nIHNpemUpOwoJCXZvaWQJCQkJCVRyaW1MZWFkaW5nCQkJ KHZvaWQpOwoKCQljb25zdCBjaGFyKgkJCQlmQmFzZU5hbWU7CgkJbG9uZwkJCQkJZkZpbGVJbmRl eDsKCgkJQnl0ZURlcXVlCQkJCWZCdWZmZXI7CgkJbG9uZwkJCQkJZkJ1ZmZlclNpemU7CgkJQm9v bAkJCQkJZkRpc2NhcmRlZDsKCgkJaW50MzIJCQkJCWZMYXN0R3JlbWxpbkV2ZW50Q291bnRlcjsK CQl1aW50MzIJCQkJCWZMYXN0VGltZXN0YW1wVGltZTsKCQl1aW50MzIJCQkJCWZCYXNlVGltZXN0 YW1wVGltZSA7CgkJY2hhcgkJCQkJZkxhc3RUaW1lc3RhbXBTdHJpbmdbMzBdOwp9OwoKY2xhc3Mg TG9nU3RyZWFtCnsKCXB1YmxpYzoKCQkJCQkJCQlMb2dTdHJlYW0JCShjb25zdCBjaGFyKiBiYXNl TmFtZSk7CgkJCQkJCQkJfkxvZ1N0cmVhbQkJKHZvaWQpOwoKCSAKCgkJaW50CQkJCQkJUHJpbnRm CQkJKGNvbnN0IGNoYXIqIG1zZywgLi4uKTsKCQlpbnQJCQkJCQlQcmludGZOb1RpbWUJKGNvbnN0 IGNoYXIqIG1zZywgLi4uKTsKCQlpbnQJCQkJCQlEYXRhUHJpbnRmCQkoY29uc3Qgdm9pZCosIGxv bmcgZGF0YUxlbiwgY29uc3QgY2hhciogbXNnLCAuLi4pOwoJCWludAkJCQkJCVZQcmludGYJCQko Y29uc3QgY2hhciogZm10LCB2YV9saXN0IGFyZ3MpOwoJCWludAkJCQkJCVdyaXRlCQkJKGNvbnN0 IHZvaWQqIGJ1ZmZlciwgbG9uZyBzaXplKTsKCgkJdm9pZAkJCQkJQ2xlYXIJCQkodm9pZCk7CgoJ CWxvbmcJCQkJCUdldExvZ1NpemUJCSh2b2lkKTsKCQl2b2lkCQkJCQlTZXRMb2dTaXplCQkobG9u Zyk7CgoJCXZvaWQJCQkJCUVuc3VyZU5ld0ZpbGUJKHZvaWQpOwoJCXZvaWQJCQkJCUR1bXBUb0Zp bGUJCSh2b2lkKTsKCglwcml2YXRlOgoJCXN0YXRpYyB2b2lkCQkJCVByZWZDaGFuZ2VkCQkJKFBy ZWZLZXlUeXBlLCBQcmVmUmVmQ29uKTsJCgoJcHJpdmF0ZToKCQlvbW5pX211dGV4CQkJCWZNdXRl eDsKCQlMb2dTdHJlYW1Jbm5lcgkJCWZJbm5lcjsKfTsKCnZvaWQJCUxvZ0V2dEFkZEV2ZW50VG9R dWV1ZQkJKGNvbnN0IEV2ZW50VHlwZSYgZXZlbnQpOwp2b2lkCQlMb2dFdnRBZGRVbmlxdWVFdmVu dFRvUXVldWUJKGNvbnN0IEV2ZW50VHlwZSYgZXZlbnQsIFVJbnQzMiwgQm9vbGVhbik7CnZvaWQJ CUxvZ0V2dEVucXVldWVLZXkJCQkoVUludDE2IGFzY2lpLCBVSW50MTYga2V5Y29kZSwgVUludDE2 IG1vZGlmaWVycyk7CnZvaWQJCUxvZ0V2dEVucXVldWVQZW5Qb2ludAkJKGNvbnN0IFBvaW50VHlw ZSYpOwoKdm9pZAkJTG9nRXZ0R2V0RXZlbnQJCQkJKGNvbnN0IEV2ZW50VHlwZSYgZXZlbnQsIElu dDMyIHRpbWVvdXQpOwp2b2lkCQlMb2dFdnRHZXRQZW4JCQkJKEludDE2LCBJbnQxNiwgQm9vbGVh bik7CnZvaWQJCUxvZ0V2dEdldFN5c0V2ZW50CQkJKGNvbnN0IEV2ZW50VHlwZSYgZXZlbnQsIElu dDMyIHRpbWVvdXQpOwoKTG9nU3RyZWFtKglMb2dHZXRTdGRMb2cJCQkJKHZvaWQpOwp2b2lkCQlM b2dTdGFydHVwCQkJCQkodm9pZCk7CnZvaWQJCUxvZ1NodXRkb3duCQkJCQkodm9pZCk7CgoKCgoK CgoKCgogCiAKIAogCiAKCgplbnVtCnsKCSAga0NhY2hlZFByZWZLZXlXaW5kb3dMb2NhdGlvbiAs IAkgIGtDYWNoZWRQcmVmS2V5R0NXTG9jYXRpb24gLCAJICBrQ2FjaGVkUHJlZktleU1QV0xvY2F0 aW9uICwgCSAga0NhY2hlZFByZWZLZXlCYWNrZ3JvdW5kQ29sb3IgLCAgICBrQ2FjaGVkUHJlZktl eUhpZ2hsaWdodENvbG9yICwgIAkgIGtDYWNoZWRQcmVmS2V5UmVkaXJlY3ROZXRMaWIgLCAJICBr Q2FjaGVkUHJlZktleUVuYWJsZVNvdW5kcyAsIAkgIGtDYWNoZWRQcmVmS2V5Q2xvc2VBY3Rpb24g LCAJICBrQ2FjaGVkUHJlZktleVVzZXJOYW1lICwgCSAga0NhY2hlZFByZWZLZXlQb3J0U2VyaWFs ICwgCSAga0NhY2hlZFByZWZLZXlQb3J0SVIgLCAJICBrQ2FjaGVkUHJlZktleVBvcnRNeXN0ZXJ5 ICwgCSAga0NhY2hlZFByZWZLZXlQb3J0RG93bmxvYWQgLCAJICBrQ2FjaGVkUHJlZktleVBvcnRT ZXJpYWxTb2NrZXQgLCAJICBrQ2FjaGVkUHJlZktleVBvcnRJUlNvY2tldCAsIAkgIGtDYWNoZWRQ cmVmS2V5UmVwb3J0RnJlZUNodW5rQWNjZXNzICwgCSAga0NhY2hlZFByZWZLZXlSZXBvcnRIYXJk d2FyZVJlZ2lzdGVyQWNjZXNzICwgCSAga0NhY2hlZFByZWZLZXlSZXBvcnRMb3dNZW1vcnlBY2Nl c3MgLCAJICBrQ2FjaGVkUHJlZktleVJlcG9ydExvd1N0YWNrQWNjZXNzICwgCSAga0NhY2hlZFBy ZWZLZXlSZXBvcnRNZW1NZ3JEYXRhQWNjZXNzICwgCSAga0NhY2hlZFByZWZLZXlSZXBvcnRNZW1N Z3JMZWFrcyAsIAkgIGtDYWNoZWRQcmVmS2V5UmVwb3J0TWVtTWdyU2VtYXBob3JlICwgCSAga0Nh Y2hlZFByZWZLZXlSZXBvcnRPZmZzY3JlZW5PYmplY3QgLCAJICBrQ2FjaGVkUHJlZktleVJlcG9y dE92ZXJsYXlFcnJvcnMgLCAJICBrQ2FjaGVkUHJlZktleVJlcG9ydFByb3NjcmliZWRGdW5jdGlv biAsIAkgIGtDYWNoZWRQcmVmS2V5UmVwb3J0Uk9NQWNjZXNzICwgCSAga0NhY2hlZFByZWZLZXlS ZXBvcnRTY3JlZW5BY2Nlc3MgLCAJICBrQ2FjaGVkUHJlZktleVJlcG9ydFNpemVsZXNzT2JqZWN0 ICwgCSAga0NhY2hlZFByZWZLZXlSZXBvcnRTdGFja0FsbW9zdE92ZXJmbG93ICwgCSAga0NhY2hl ZFByZWZLZXlSZXBvcnRTdHJpY3RJbnRsQ2hlY2tzICwgCSAga0NhY2hlZFByZWZLZXlSZXBvcnRT eXN0ZW1HbG9iYWxBY2Nlc3MgLCAJICBrQ2FjaGVkUHJlZktleVJlcG9ydFVJTWdyRGF0YUFjY2Vz cyAsIAkgIGtDYWNoZWRQcmVmS2V5UmVwb3J0VW5sb2NrZWRDaHVua0FjY2VzcyAsIAkgIGtDYWNo ZWRQcmVmS2V5UmVwb3J0TG9ja2VkUmVjb3JkcyAsIAkgIGtDYWNoZWRQcmVmS2V5UmVwb3J0U3lz RmF0YWxBbGVydCAsIAkgIGtDYWNoZWRQcmVmS2V5SW50ZXJjZXB0U3lzRmF0YWxBbGVydCAsIAkg IGtDYWNoZWRQcmVmS2V5RGlhbG9nQmVlcCAsIAkgIGtDYWNoZWRQcmVmS2V5TG9nRXJyb3JNZXNz YWdlcyAsIAkgIGtDYWNoZWRQcmVmS2V5TG9nV2FybmluZ01lc3NhZ2VzICwgCSAga0NhY2hlZFBy ZWZLZXlMb2dHcmVtbGlucyAsIAkgIGtDYWNoZWRQcmVmS2V5TG9nQ1BVT3Bjb2RlcyAsIAkgIGtD YWNoZWRQcmVmS2V5TG9nRW5xdWV1ZWRFdmVudHMgLCAJICBrQ2FjaGVkUHJlZktleUxvZ0RlcXVl dWVkRXZlbnRzICwgCSAga0NhY2hlZFByZWZLZXlMb2dTeXN0ZW1DYWxscyAsIAkgIGtDYWNoZWRQ cmVmS2V5TG9nQXBwbGljYXRpb25DYWxscyAsIAkgIGtDYWNoZWRQcmVmS2V5TG9nU2VyaWFsICwg CSAga0NhY2hlZFByZWZLZXlMb2dTZXJpYWxEYXRhICwgCSAga0NhY2hlZFByZWZLZXlMb2dOZXRM aWIgLCAJICBrQ2FjaGVkUHJlZktleUxvZ05ldExpYkRhdGEgLCAJICBrQ2FjaGVkUHJlZktleUxv Z0V4Z01nciAsIAkgIGtDYWNoZWRQcmVmS2V5TG9nRXhnTWdyRGF0YSAsIAkgIGtDYWNoZWRQcmVm S2V5TG9nSExEZWJ1Z2dlciAsIAkgIGtDYWNoZWRQcmVmS2V5TG9nSExEZWJ1Z2dlckRhdGEgLCAJ ICBrQ2FjaGVkUHJlZktleUxvZ0xMRGVidWdnZXIgLCAJICBrQ2FjaGVkUHJlZktleUxvZ0xMRGVi dWdnZXJEYXRhICwgCSAga0NhY2hlZFByZWZLZXlMb2dSUEMgLCAJICBrQ2FjaGVkUHJlZktleUxv Z1JQQ0RhdGEgLCAJICBrQ2FjaGVkUHJlZktleUxvZ0ZpbGVTaXplICwgCSAga0NhY2hlZFByZWZL ZXlMb2dEZWZhdWx0RGlyICwgCSAga0NhY2hlZFByZWZLZXlEZWJ1Z2dlclNvY2tldFBvcnQgLCAJ ICBrQ2FjaGVkUHJlZktleVJQQ1NvY2tldFBvcnQgLCAJICBrQ2FjaGVkUHJlZktleVdhcm5BYm91 dFNraW5zRGlyICwgCSAga0NhY2hlZFByZWZLZXlBc2tBYm91dFN0YXJ0TWVudSAsIAkgIGtDYWNo ZWRQcmVmS2V5U3RhcnRNZW51SXRlbSAsIAkgIGtDYWNoZWRQcmVmS2V5RmlsbE5ld0Jsb2NrcyAs IAkgIGtDYWNoZWRQcmVmS2V5RmlsbFJlc2l6ZWRCbG9ja3MgLCAJICBrQ2FjaGVkUHJlZktleUZp bGxEaXNwb3NlZEJsb2NrcyAsIAkgIGtDYWNoZWRQcmVmS2V5RmlsbFN0YWNrICwgCSAga0NhY2hl ZFByZWZLZXlMYXN0Q29uZmlndXJhdGlvbiAsIAkgIGtDYWNoZWRQcmVmS2V5R3JlbWxpbkluZm8g LCAJICBrQ2FjaGVkUHJlZktleUhvcmRlSW5mbyAsIAkgIGtDYWNoZWRQcmVmS2V5TGFzdFBTRiAs IAkgIGtDYWNoZWRQcmVmS2V5Uk9NX01SVSAsIAkgIGtDYWNoZWRQcmVmS2V5UFJDX01SVSAsIAkg IGtDYWNoZWRQcmVmS2V5UFNGX01SVSAsIAkgIGtDYWNoZWRQcmVmS2V5U2tpbnMgLCAJICBrQ2Fj aGVkUHJlZktleVNjYWxlICwgCSAga0NhY2hlZFByZWZLZXlEaW1XaGVuSW5hY3RpdmUgLCAJICBr Q2FjaGVkUHJlZktleVNob3dEZWJ1Z01vZGUgLCAJICBrQ2FjaGVkUHJlZktleVNob3dHcmVtbGlu TW9kZSAsIAkgIGtDYWNoZWRQcmVmS2V5U3RheU9uVG9wICwgCSAga0NhY2hlZFByZWZLZXlXYXJu aW5nT2ZmICwgCSAga0NhY2hlZFByZWZLZXlFcnJvck9mZiAsIAkgIGtDYWNoZWRQcmVmS2V5V2Fy bmluZ09uICwgCSAga0NhY2hlZFByZWZLZXlFcnJvck9uICwgCSAga0NhY2hlZFByZWZLZXlMYXN0 VHJhY2VyVHlwZSAsIAkgIGtDYWNoZWRQcmVmS2V5VHJhY2VyVHlwZXMgLCAJICBrQ2FjaGVkUHJl ZktleUZmc0hvbWUgLCAJICBrQ2FjaGVkUHJlZktleVNsb3RMaXN0ICwgICAKCWtDYWNoZWRQcmVm S2V5RHVtbXkKfTsKCmV4dGVybiB1aW50OCBnTG9nQ2FjaGVbXTsKaW5saW5lIEJvb2wgTG9nQ29t bW9uKGludCBrZXkpCnsKCWlmIChrZXkgPj0ga0NhY2hlZFByZWZLZXlMb2dFcnJvck1lc3NhZ2Vz ICYmCgkJa2V5IDw9IGtDYWNoZWRQcmVmS2V5TG9nUlBDRGF0YSkKCXsKCQlpZiAoSG9yZGVzOjpJ c09uICgpKQoJCQlyZXR1cm4gKGdMb2dDYWNoZVtrZXldICYga0dyZW1saW5Mb2dnaW5nKSAhPSAw OwoKCQlyZXR1cm4gKGdMb2dDYWNoZVtrZXldICYga05vcm1hbExvZ2dpbmcpICE9IDA7Cgl9CgoJ KCh2b2lkKSAwKSA7CgoJcmV0dXJuIDA7Cn0KCmlubGluZSBCb29sIFJlcG9ydENvbW1vbihpbnQg a2V5KQp7CglpZiAoa2V5ID49IGtDYWNoZWRQcmVmS2V5UmVwb3J0RnJlZUNodW5rQWNjZXNzICYm CgkJa2V5IDw9IGtDYWNoZWRQcmVmS2V5UmVwb3J0VW5sb2NrZWRDaHVua0FjY2VzcykKCXsKCQly ZXR1cm4gZ0xvZ0NhY2hlW2tleV0gIT0gMDsKCX0KCgkoKHZvaWQpIDApIDsKCglyZXR1cm4gMDsK fQoKCiMgMTg4ICIuLi9TcmNTaGFyZWQvTG9nZ2luZy5oIgoKCiMgMjA4ICIuLi9TcmNTaGFyZWQv TG9nZ2luZy5oIgoKCgoKCgoKCgoKCiBpbmxpbmUgQm9vbCAgTG9nRXJyb3JNZXNzYWdlcyAgKHZv aWQpIHsgcmV0dXJuIExvZ0NvbW1vbihrQ2FjaGVkUHJlZktleUxvZ0Vycm9yTWVzc2FnZXMgKTsg fSAJIGlubGluZSBCb29sICBMb2dXYXJuaW5nTWVzc2FnZXMgICh2b2lkKSB7IHJldHVybiBMb2dD b21tb24oa0NhY2hlZFByZWZLZXlMb2dXYXJuaW5nTWVzc2FnZXMgKTsgfSAJIGlubGluZSBCb29s ICBMb2dHcmVtbGlucyAgKHZvaWQpIHsgcmV0dXJuIExvZ0NvbW1vbihrQ2FjaGVkUHJlZktleUxv Z0dyZW1saW5zICk7IH0gCSBpbmxpbmUgQm9vbCAgTG9nQ1BVT3Bjb2RlcyAgKHZvaWQpIHsgcmV0 dXJuIExvZ0NvbW1vbihrQ2FjaGVkUHJlZktleUxvZ0NQVU9wY29kZXMgKTsgfSAJIGlubGluZSBC b29sICBMb2dFbnF1ZXVlZEV2ZW50cyAgKHZvaWQpIHsgcmV0dXJuIExvZ0NvbW1vbihrQ2FjaGVk UHJlZktleUxvZ0VucXVldWVkRXZlbnRzICk7IH0gCSBpbmxpbmUgQm9vbCAgTG9nRGVxdWV1ZWRF dmVudHMgICh2b2lkKSB7IHJldHVybiBMb2dDb21tb24oa0NhY2hlZFByZWZLZXlMb2dEZXF1ZXVl ZEV2ZW50cyApOyB9IAkgaW5saW5lIEJvb2wgIExvZ1N5c3RlbUNhbGxzICAodm9pZCkgeyByZXR1 cm4gTG9nQ29tbW9uKGtDYWNoZWRQcmVmS2V5TG9nU3lzdGVtQ2FsbHMgKTsgfSAJIGlubGluZSBC b29sICBMb2dBcHBsaWNhdGlvbkNhbGxzICAodm9pZCkgeyByZXR1cm4gTG9nQ29tbW9uKGtDYWNo ZWRQcmVmS2V5TG9nQXBwbGljYXRpb25DYWxscyApOyB9IAkgaW5saW5lIEJvb2wgIExvZ1Nlcmlh bCAgKHZvaWQpIHsgcmV0dXJuIExvZ0NvbW1vbihrQ2FjaGVkUHJlZktleUxvZ1NlcmlhbCApOyB9 IAkgaW5saW5lIEJvb2wgIExvZ1NlcmlhbERhdGEgICh2b2lkKSB7IHJldHVybiBMb2dDb21tb24o a0NhY2hlZFByZWZLZXlMb2dTZXJpYWxEYXRhICk7IH0gCSBpbmxpbmUgQm9vbCAgTG9nTmV0TGli ICAodm9pZCkgeyByZXR1cm4gTG9nQ29tbW9uKGtDYWNoZWRQcmVmS2V5TG9nTmV0TGliICk7IH0g CSBpbmxpbmUgQm9vbCAgTG9nTmV0TGliRGF0YSAgKHZvaWQpIHsgcmV0dXJuIExvZ0NvbW1vbihr Q2FjaGVkUHJlZktleUxvZ05ldExpYkRhdGEgKTsgfSAJIGlubGluZSBCb29sICBMb2dFeGdNZ3Ig ICh2b2lkKSB7IHJldHVybiBMb2dDb21tb24oa0NhY2hlZFByZWZLZXlMb2dFeGdNZ3IgKTsgfSAJ IGlubGluZSBCb29sICBMb2dFeGdNZ3JEYXRhICAodm9pZCkgeyByZXR1cm4gTG9nQ29tbW9uKGtD YWNoZWRQcmVmS2V5TG9nRXhnTWdyRGF0YSApOyB9IAkgaW5saW5lIEJvb2wgIExvZ0hMRGVidWdn ZXIgICh2b2lkKSB7IHJldHVybiBMb2dDb21tb24oa0NhY2hlZFByZWZLZXlMb2dITERlYnVnZ2Vy ICk7IH0gCSBpbmxpbmUgQm9vbCAgTG9nSExEZWJ1Z2dlckRhdGEgICh2b2lkKSB7IHJldHVybiBM b2dDb21tb24oa0NhY2hlZFByZWZLZXlMb2dITERlYnVnZ2VyRGF0YSApOyB9IAkgaW5saW5lIEJv b2wgIExvZ0xMRGVidWdnZXIgICh2b2lkKSB7IHJldHVybiBMb2dDb21tb24oa0NhY2hlZFByZWZL ZXlMb2dMTERlYnVnZ2VyICk7IH0gCSBpbmxpbmUgQm9vbCAgTG9nTExEZWJ1Z2dlckRhdGEgICh2 b2lkKSB7IHJldHVybiBMb2dDb21tb24oa0NhY2hlZFByZWZLZXlMb2dMTERlYnVnZ2VyRGF0YSAp OyB9IAkgaW5saW5lIEJvb2wgIExvZ1JQQyAgKHZvaWQpIHsgcmV0dXJuIExvZ0NvbW1vbihrQ2Fj aGVkUHJlZktleUxvZ1JQQyApOyB9IAkgaW5saW5lIEJvb2wgIExvZ1JQQ0RhdGEgICh2b2lkKSB7 IHJldHVybiBMb2dDb21tb24oa0NhY2hlZFByZWZLZXlMb2dSUENEYXRhICk7IH0gIAogaW5saW5l IEJvb2wgIFJlcG9ydEZyZWVDaHVua0FjY2VzcyAgKHZvaWQpIHsgcmV0dXJuIFJlcG9ydENvbW1v bihrQ2FjaGVkUHJlZktleVJlcG9ydEZyZWVDaHVua0FjY2VzcyApOyB9ICAgaW5saW5lIEJvb2wg IFJlcG9ydEhhcmR3YXJlUmVnaXN0ZXJBY2Nlc3MgICh2b2lkKSB7IHJldHVybiBSZXBvcnRDb21t b24oa0NhY2hlZFByZWZLZXlSZXBvcnRIYXJkd2FyZVJlZ2lzdGVyQWNjZXNzICk7IH0gCSBpbmxp bmUgQm9vbCAgUmVwb3J0TG93TWVtb3J5QWNjZXNzICAodm9pZCkgeyByZXR1cm4gUmVwb3J0Q29t bW9uKGtDYWNoZWRQcmVmS2V5UmVwb3J0TG93TWVtb3J5QWNjZXNzICk7IH0gICBpbmxpbmUgQm9v bCAgUmVwb3J0TG93U3RhY2tBY2Nlc3MgICh2b2lkKSB7IHJldHVybiBSZXBvcnRDb21tb24oa0Nh Y2hlZFByZWZLZXlSZXBvcnRMb3dTdGFja0FjY2VzcyApOyB9IAkgaW5saW5lIEJvb2wgIFJlcG9y dE1lbU1nckRhdGFBY2Nlc3MgICh2b2lkKSB7IHJldHVybiBSZXBvcnRDb21tb24oa0NhY2hlZFBy ZWZLZXlSZXBvcnRNZW1NZ3JEYXRhQWNjZXNzICk7IH0gCSBpbmxpbmUgQm9vbCAgUmVwb3J0TWVt TWdyTGVha3MgICh2b2lkKSB7IHJldHVybiBSZXBvcnRDb21tb24oa0NhY2hlZFByZWZLZXlSZXBv cnRNZW1NZ3JMZWFrcyApOyB9ICAgaW5saW5lIEJvb2wgIFJlcG9ydE1lbU1nclNlbWFwaG9yZSAg KHZvaWQpIHsgcmV0dXJuIFJlcG9ydENvbW1vbihrQ2FjaGVkUHJlZktleVJlcG9ydE1lbU1nclNl bWFwaG9yZSApOyB9ICAgaW5saW5lIEJvb2wgIFJlcG9ydE9mZnNjcmVlbk9iamVjdCAgKHZvaWQp IHsgcmV0dXJuIFJlcG9ydENvbW1vbihrQ2FjaGVkUHJlZktleVJlcG9ydE9mZnNjcmVlbk9iamVj dCApOyB9IAkgaW5saW5lIEJvb2wgIFJlcG9ydE92ZXJsYXlFcnJvcnMgICh2b2lkKSB7IHJldHVy biBSZXBvcnRDb21tb24oa0NhY2hlZFByZWZLZXlSZXBvcnRPdmVybGF5RXJyb3JzICk7IH0gCSBp bmxpbmUgQm9vbCAgUmVwb3J0UHJvc2NyaWJlZEZ1bmN0aW9uICAodm9pZCkgeyByZXR1cm4gUmVw b3J0Q29tbW9uKGtDYWNoZWRQcmVmS2V5UmVwb3J0UHJvc2NyaWJlZEZ1bmN0aW9uICk7IH0gCSBp bmxpbmUgQm9vbCAgUmVwb3J0Uk9NQWNjZXNzICAodm9pZCkgeyByZXR1cm4gUmVwb3J0Q29tbW9u KGtDYWNoZWRQcmVmS2V5UmVwb3J0Uk9NQWNjZXNzICk7IH0gCSBpbmxpbmUgQm9vbCAgUmVwb3J0 U2NyZWVuQWNjZXNzICAodm9pZCkgeyByZXR1cm4gUmVwb3J0Q29tbW9uKGtDYWNoZWRQcmVmS2V5 UmVwb3J0U2NyZWVuQWNjZXNzICk7IH0gCSBpbmxpbmUgQm9vbCAgUmVwb3J0U2l6ZWxlc3NPYmpl Y3QgICh2b2lkKSB7IHJldHVybiBSZXBvcnRDb21tb24oa0NhY2hlZFByZWZLZXlSZXBvcnRTaXpl bGVzc09iamVjdCApOyB9IAkgaW5saW5lIEJvb2wgIFJlcG9ydFN0YWNrQWxtb3N0T3ZlcmZsb3cg ICh2b2lkKSB7IHJldHVybiBSZXBvcnRDb21tb24oa0NhY2hlZFByZWZLZXlSZXBvcnRTdGFja0Fs bW9zdE92ZXJmbG93ICk7IH0gICBpbmxpbmUgQm9vbCAgUmVwb3J0U3RyaWN0SW50bENoZWNrcyAg KHZvaWQpIHsgcmV0dXJuIFJlcG9ydENvbW1vbihrQ2FjaGVkUHJlZktleVJlcG9ydFN0cmljdElu dGxDaGVja3MgKTsgfSAJIGlubGluZSBCb29sICBSZXBvcnRTeXN0ZW1HbG9iYWxBY2Nlc3MgICh2 b2lkKSB7IHJldHVybiBSZXBvcnRDb21tb24oa0NhY2hlZFByZWZLZXlSZXBvcnRTeXN0ZW1HbG9i YWxBY2Nlc3MgKTsgfSAJIGlubGluZSBCb29sICBSZXBvcnRVSU1nckRhdGFBY2Nlc3MgICh2b2lk KSB7IHJldHVybiBSZXBvcnRDb21tb24oa0NhY2hlZFByZWZLZXlSZXBvcnRVSU1nckRhdGFBY2Nl c3MgKTsgfSAJIGlubGluZSBCb29sICBSZXBvcnRVbmxvY2tlZENodW5rQWNjZXNzICAodm9pZCkg eyByZXR1cm4gUmVwb3J0Q29tbW9uKGtDYWNoZWRQcmVmS2V5UmVwb3J0VW5sb2NrZWRDaHVua0Fj Y2VzcyApOyB9ICAKCgojIDIzICIuLi9TcmNTaGFyZWQvRW1EbGcuaCIgMgoKCiAKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCmNsYXNzIEVtUk9NVHJhbnNmZXI7CgoKZW51bSBFbURsZ0NtZElECnsKCWtEbGdDbWROb25l CQkJCQk9IDAsCgoJa0RsZ0NtZEluaXQJCQkJCT0gMSwKCWtEbGdDbWRJZGxlCQkJCQk9IDIsCglr RGxnQ21kSXRlbVNlbGVjdGVkCQkJPSAzLAoJa0RsZ0NtZERlc3Ryb3kJCQkJPSA0LAoJa0RsZ0Nt ZFBhbmVsRW50ZXIJCQk9IDUsCglrRGxnQ21kUGFuZWxFeGl0CQkJPSA2Cn07CgplbnVtIEVtRGxn Rm5SZXN1bHQKewoJa0RsZ1Jlc3VsdE5vbmUJCQkJPSAwLAoKCWtEbGdSZXN1bHRDb250aW51ZQkJ CT0gMSwKCWtEbGdSZXN1bHRDbG9zZQkJCQk9IDIKfTsKCmVudW0gRW1EbGdJRAp7CglrRGxnTm9u ZQkJCQkJPSAwLAoKCWtEbGdBYm91dEJveAkJCQk9IDEsCglrRGxnU2Vzc2lvbk5ldwkJCQk9IDIs CglrRGxnU2Vzc2lvblNhdmUJCQkJPSAzLAoJa0RsZ0hvcmRlTmV3CQkJCT0gNCwKCWtEbGdEYXRh YmFzZUltcG9ydAkJCT0gNSwKCWtEbGdEYXRhYmFzZUV4cG9ydAkJCT0gNiwKCWtEbGdST01UcmFu c2ZlclF1ZXJ5CQk9IDcsCglrRGxnUk9NVHJhbnNmZXJQcm9ncmVzcwkJPSA4LAoJa0RsZ0dyZW1s aW5Db250cm9sCQkJPSA5LAoJa0RsZ0VkaXRQcmVmZXJlbmNlcwkJCT0gMTAsCglrRGxnRWRpdExv Z2dpbmcJCQkJPSAxMSwKCWtEbGdFZGl0RGVidWdnaW5nCQkJPSAxMiwKCWtEbGdFZGl0U2tpbnMJ CQkJPSAxMywKCWtEbGdDb21tb25EaWFsb2cJCQk9IDE0LAoJa0RsZ1NhdmVCb3VuZAkJCQk9IDE1 LAoJa0RsZ0VkaXRIb3N0RlMJCQkJPSAxNiwKCWtEbGdFZGl0QnJlYWtwb2ludHMJCQk9IDE3LAoJ a0RsZ0VkaXRDb2RlQnJlYWtwb2ludAkJPSAxOCwKCWtEbGdFZGl0VHJhY2luZ09wdGlvbnMJCT0g MTksCglrRGxnRWRpdFByZWZlcmVuY2VzRnVsbHlCb3VuZAk9IDIwLAoJa0RsZ1Jlc2V0CQkJCQk9 IDIxLAoJa0RsZ1Nlc3Npb25JbmZvCQkJCT0gMjIsCglrRGxnR2V0U29ja2V0QWRkcmVzcwkJPSAy MywKCWtEbGdFZGl0RXJyb3JIYW5kbGluZwkJPSAyNCwKCWtEbGdNaW5pbWl6ZVByb2dyZXNzCQk9 IDI1Cn07CgplbnVtIEVtRGxnUGFuZWxJRAp7CglrRGxnUGFuZWxOb25lCQkJCT0gMCwKCglrRGxn UGFuZWxBYnRNYWluCQkJPSAxLAoJa0RsZ1BhbmVsQWJ0V2luZG93cwkJCT0gMiwKCWtEbGdQYW5l bEFidE1hYwkJCQk9IDMsCglrRGxnUGFuZWxBYnRVQUUJCQkJPSA0LAoJa0RsZ1BhbmVsQWJ0UU5Y CQkJCT0gNQp9OwoKCmVudW0gRW1EbGdJdGVtSUQKewoJa0RsZ0l0ZW1Ob25lCQkJCT0gMCwKCglr RGxnSXRlbU9LCQkJCQk9IDB4MDEsCglrRGxnSXRlbUNhbmNlbAkJCQk9IDB4MDIsCglrRGxnSXRl bVllcwkJCQkJPSAweDAzLAoJa0RsZ0l0ZW1ObwkJCQkJPSAweDA0LAoJa0RsZ0l0ZW1Db250aW51 ZQkJCT0gMHgwNSwKCWtEbGdJdGVtRGVidWcJCQkJPSAweDA2LAoJa0RsZ0l0ZW1SZXNldAkJCQk9 IDB4MDcsCglrRGxnSXRlbU5leHRHcmVtbGluCQkJPSAweDA4LAoKCWtEbGdJdGVtQWJ0QXBwTmFt ZQkJCT0gKCgga0RsZ0Fib3V0Qm94ICkgKiAxMDApICArIDAsCglrRGxnSXRlbUFidFVSTFBhbG1X ZWIJCT0gKCgga0RsZ0Fib3V0Qm94ICkgKiAxMDApICArIDEsCglrRGxnSXRlbUFidFVSTFBhbG1N YWlsCQk9ICgoIGtEbGdBYm91dEJveCApICogMTAwKSAgKyAyLAoJa0RsZ0l0ZW1BYnRVUkxXaW5k b3dzV2ViCT0gKCgga0RsZ0Fib3V0Qm94ICkgKiAxMDApICArIDMsCglrRGxnSXRlbUFidFVSTFdp bmRvd3NNYWlsCT0gKCgga0RsZ0Fib3V0Qm94ICkgKiAxMDApICArIDQsCglrRGxnSXRlbUFidFVS TE1hY1dlYgkJPSAoKCBrRGxnQWJvdXRCb3ggKSAqIDEwMCkgICsgNSwKCWtEbGdJdGVtQWJ0VVJM TWFjTWFpbAkJPSAoKCBrRGxnQWJvdXRCb3ggKSAqIDEwMCkgICsgNiwKCWtEbGdJdGVtQWJ0VVJM VUFFV2ViCQk9ICgoIGtEbGdBYm91dEJveCApICogMTAwKSAgKyA3LAoJa0RsZ0l0ZW1BYnRVUkxV QUVNYWlsCQk9ICgoIGtEbGdBYm91dEJveCApICogMTAwKSAgKyA4LAoJa0RsZ0l0ZW1BYnRVUkxR TlhXZWIJCT0gKCgga0RsZ0Fib3V0Qm94ICkgKiAxMDApICArIDksCglrRGxnSXRlbUFidFVSTFFO WE1haWwJCT0gKCgga0RsZ0Fib3V0Qm94ICkgKiAxMDApICArIDEwLAoKCWtEbGdJdGVtTmV3RGV2 aWNlCQkJPSAoKCBrRGxnU2Vzc2lvbk5ldyApICogMTAwKSAgKyAwLAoJa0RsZ0l0ZW1OZXdTa2lu CQkJCT0gKCgga0RsZ1Nlc3Npb25OZXcgKSAqIDEwMCkgICsgMSwKCWtEbGdJdGVtTmV3TWVtb3J5 U2l6ZQkJPSAoKCBrRGxnU2Vzc2lvbk5ldyApICogMTAwKSAgKyAyLAoJa0RsZ0l0ZW1OZXdST00J CQkJPSAoKCBrRGxnU2Vzc2lvbk5ldyApICogMTAwKSAgKyAzLAoJa0RsZ0l0ZW1OZXdST01Ccm93 c2UJCT0gKCgga0RsZ1Nlc3Npb25OZXcgKSAqIDEwMCkgICsgNCwKCglrRGxnSXRlbUhyZEFwcExp c3QJCQk9ICgoIGtEbGdIb3JkZU5ldyApICogMTAwKSAgKyAwLAoJa0RsZ0l0ZW1IcmRTdGFydAkJ CT0gKCgga0RsZ0hvcmRlTmV3ICkgKiAxMDApICArIDEsCglrRGxnSXRlbUhyZFN0b3AJCQkJPSAo KCBrRGxnSG9yZGVOZXcgKSAqIDEwMCkgICsgMiwKCWtEbGdJdGVtSHJkQ2hlY2tTd2l0Y2gJCT0g KCgga0RsZ0hvcmRlTmV3ICkgKiAxMDApICArIDMsCglrRGxnSXRlbUhyZENoZWNrU2F2ZQkJPSAo KCBrRGxnSG9yZGVOZXcgKSAqIDEwMCkgICsgNCwKCWtEbGdJdGVtSHJkQ2hlY2tTdG9wCQk9ICgo IGtEbGdIb3JkZU5ldyApICogMTAwKSAgKyA1LAoJa0RsZ0l0ZW1IcmREZXB0aFN3aXRjaAkJPSAo KCBrRGxnSG9yZGVOZXcgKSAqIDEwMCkgICsgNiwKCWtEbGdJdGVtSHJkRGVwdGhTYXZlCQk9ICgo IGtEbGdIb3JkZU5ldyApICogMTAwKSAgKyA3LAoJa0RsZ0l0ZW1IcmREZXB0aFN0b3AJCT0gKCgg a0RsZ0hvcmRlTmV3ICkgKiAxMDApICArIDgsCglrRGxnSXRlbUhyZExvZ2dpbmcJCQk9ICgoIGtE bGdIb3JkZU5ldyApICogMTAwKSAgKyA5LAoJa0RsZ0l0ZW1IcmRGaXJzdExhdW5jaGVkQXBwCT0g KCgga0RsZ0hvcmRlTmV3ICkgKiAxMDApICArIDEwLAoJa0RsZ0l0ZW1IcmRTZWxlY3RBbGwJCT0g KCgga0RsZ0hvcmRlTmV3ICkgKiAxMDApICArIDExLAoJa0RsZ0l0ZW1IcmRTZWxlY3ROb25lCQk9 ICgoIGtEbGdIb3JkZU5ldyApICogMTAwKSAgKyAxMiwKCglrRGxnSXRlbUltcE51bUZpbGVzCQkJ PSAoKCBrRGxnRGF0YWJhc2VJbXBvcnQgKSAqIDEwMCkgICsgMCwKCWtEbGdJdGVtSW1wUHJvZ3Jl c3MJCQk9ICgoIGtEbGdEYXRhYmFzZUltcG9ydCApICogMTAwKSAgKyAxLAoKCWtEbGdJdGVtRXhw RGJMaXN0CQkJPSAoKCBrRGxnRGF0YWJhc2VFeHBvcnQgKSAqIDEwMCkgICsgMCwKCglrRGxnSXRl bURscUluc3RydWN0aW9ucwkJPSAoKCBrRGxnUk9NVHJhbnNmZXJRdWVyeSApICogMTAwKSAgKyAw LAoJa0RsZ0l0ZW1EbHFQb3J0TGlzdAkJCT0gKCgga0RsZ1JPTVRyYW5zZmVyUXVlcnkgKSAqIDEw MCkgICsgMSwKCWtEbGdJdGVtRGxxQmF1ZExpc3QJCQk9ICgoIGtEbGdST01UcmFuc2ZlclF1ZXJ5 ICkgKiAxMDApICArIDIsCgoJa0RsZ0l0ZW1EbHBNZXNzYWdlCQkJPSAoKCBrRGxnUk9NVHJhbnNm ZXJQcm9ncmVzcyApICogMTAwKSAgKyAwLAoJa0RsZ0l0ZW1EbHBQcm9ncmVzcwkJCT0gKCgga0Rs Z1JPTVRyYW5zZmVyUHJvZ3Jlc3MgKSAqIDEwMCkgICsgMSwKCglrRGxnSXRlbUdybU51bWJlcgkJ CT0gKCgga0RsZ0dyZW1saW5Db250cm9sICkgKiAxMDApICArIDAsCglrRGxnSXRlbUdybUV2ZW50 TnVtYmVyCQk9ICgoIGtEbGdHcmVtbGluQ29udHJvbCApICogMTAwKSAgKyAxLAoJa0RsZ0l0ZW1H cm1FbGFwc2VkVGltZQkJPSAoKCBrRGxnR3JlbWxpbkNvbnRyb2wgKSAqIDEwMCkgICsgMiwKCWtE bGdJdGVtR3JtU3RvcAkJCQk9ICgoIGtEbGdHcmVtbGluQ29udHJvbCApICogMTAwKSAgKyAzLAoJ a0RsZ0l0ZW1Hcm1SZXN1bWUJCQk9ICgoIGtEbGdHcmVtbGluQ29udHJvbCApICogMTAwKSAgKyA0 LAoJa0RsZ0l0ZW1Hcm1TdGVwCQkJCT0gKCgga0RsZ0dyZW1saW5Db250cm9sICkgKiAxMDApICAr IDUsCgoJa0RsZ0l0ZW1QcmZSZWRpcmVjdFNlcmlhbAk9ICgoIGtEbGdFZGl0UHJlZmVyZW5jZXMg KSAqIDEwMCkgICsgMCwKCWtEbGdJdGVtUHJmUmVkaXJlY3RJUgkJPSAoKCBrRGxnRWRpdFByZWZl cmVuY2VzICkgKiAxMDApICArIDEsCglrRGxnSXRlbVByZlJlZGlyZWN0TXlzdGVyeQk9ICgoIGtE bGdFZGl0UHJlZmVyZW5jZXMgKSAqIDEwMCkgICsgMiwKCWtEbGdJdGVtUHJmUmVkaXJlY3ROZXRM aWIJPSAoKCBrRGxnRWRpdFByZWZlcmVuY2VzICkgKiAxMDApICArIDksCglrRGxnSXRlbVByZkVu YWJsZVNvdW5kCQk9ICgoIGtEbGdFZGl0UHJlZmVyZW5jZXMgKSAqIDEwMCkgICsgMTAsCglrRGxn SXRlbVByZlNhdmVBbHdheXMJCT0gKCgga0RsZ0VkaXRQcmVmZXJlbmNlcyApICogMTAwKSAgKyAx MSwKCWtEbGdJdGVtUHJmU2F2ZUFzawkJCT0gKCgga0RsZ0VkaXRQcmVmZXJlbmNlcyApICogMTAw KSAgKyAxMiwKCWtEbGdJdGVtUHJmU2F2ZU5ldmVyCQk9ICgoIGtEbGdFZGl0UHJlZmVyZW5jZXMg KSAqIDEwMCkgICsgMTMsCglrRGxnSXRlbVByZlVzZXJOYW1lCQkJPSAoKCBrRGxnRWRpdFByZWZl cmVuY2VzICkgKiAxMDApICArIDE0LAoKCWtEbGdJdGVtTG9nTm9ybWFsCQkJPSAoKCBrRGxnRWRp dExvZ2dpbmcgKSAqIDEwMCkgICsgMCwKCWtEbGdJdGVtTG9nR3JlbWxpbnMJCQk9ICgoIGtEbGdF ZGl0TG9nZ2luZyApICogMTAwKSAgKyAxLAoJa0RsZ0l0ZW1Mb2dDaGVja0Jhc2UJCT0gKCgga0Rs Z0VkaXRMb2dnaW5nICkgKiAxMDApICArIDEwLAoKCgkga0RsZ0l0ZW1Mb2dMb2dFcnJvck1lc3Nh Z2VzICwgCSBrRGxnSXRlbUxvZ0xvZ1dhcm5pbmdNZXNzYWdlcyAsIAkga0RsZ0l0ZW1Mb2dMb2dH cmVtbGlucyAsIAkga0RsZ0l0ZW1Mb2dMb2dDUFVPcGNvZGVzICwgCSBrRGxnSXRlbUxvZ0xvZ0Vu cXVldWVkRXZlbnRzICwgCSBrRGxnSXRlbUxvZ0xvZ0RlcXVldWVkRXZlbnRzICwgCSBrRGxnSXRl bUxvZ0xvZ1N5c3RlbUNhbGxzICwgCSBrRGxnSXRlbUxvZ0xvZ0FwcGxpY2F0aW9uQ2FsbHMgLCAJ IGtEbGdJdGVtTG9nTG9nU2VyaWFsICwgCSBrRGxnSXRlbUxvZ0xvZ1NlcmlhbERhdGEgLCAJIGtE bGdJdGVtTG9nTG9nTmV0TGliICwgCSBrRGxnSXRlbUxvZ0xvZ05ldExpYkRhdGEgLCAJIGtEbGdJ dGVtTG9nTG9nRXhnTWdyICwgCSBrRGxnSXRlbUxvZ0xvZ0V4Z01nckRhdGEgLCAJIGtEbGdJdGVt TG9nTG9nSExEZWJ1Z2dlciAsIAkga0RsZ0l0ZW1Mb2dMb2dITERlYnVnZ2VyRGF0YSAsIAkga0Rs Z0l0ZW1Mb2dMb2dMTERlYnVnZ2VyICwgCSBrRGxnSXRlbUxvZ0xvZ0xMRGVidWdnZXJEYXRhICwg CSBrRGxnSXRlbUxvZ0xvZ1JQQyAsIAkga0RsZ0l0ZW1Mb2dMb2dSUENEYXRhICwgIAoKCWtEbGdJ dGVtRGJnRGlhbG9nQmVlcAkJPSAoKCBrRGxnRWRpdERlYnVnZ2luZyApICogMTAwKSAgKyAwLAoJ a0RsZ0l0ZW1EYmdDaGVja0Jhc2UJCT0gKCgga0RsZ0VkaXREZWJ1Z2dpbmcgKSAqIDEwMCkgICsg MTAsCgoKCSBrRGxnSXRlbURiZ1JlcG9ydEZyZWVDaHVua0FjY2VzcyAsICAga0RsZ0l0ZW1EYmdS ZXBvcnRIYXJkd2FyZVJlZ2lzdGVyQWNjZXNzICwgCSBrRGxnSXRlbURiZ1JlcG9ydExvd01lbW9y eUFjY2VzcyAsICAga0RsZ0l0ZW1EYmdSZXBvcnRMb3dTdGFja0FjY2VzcyAsIAkga0RsZ0l0ZW1E YmdSZXBvcnRNZW1NZ3JEYXRhQWNjZXNzICwgCSBrRGxnSXRlbURiZ1JlcG9ydE1lbU1nckxlYWtz ICwgICBrRGxnSXRlbURiZ1JlcG9ydE1lbU1nclNlbWFwaG9yZSAsICAga0RsZ0l0ZW1EYmdSZXBv cnRPZmZzY3JlZW5PYmplY3QgLCAJIGtEbGdJdGVtRGJnUmVwb3J0T3ZlcmxheUVycm9ycyAsIAkg a0RsZ0l0ZW1EYmdSZXBvcnRQcm9zY3JpYmVkRnVuY3Rpb24gLCAJIGtEbGdJdGVtRGJnUmVwb3J0 Uk9NQWNjZXNzICwgCSBrRGxnSXRlbURiZ1JlcG9ydFNjcmVlbkFjY2VzcyAsIAkga0RsZ0l0ZW1E YmdSZXBvcnRTaXplbGVzc09iamVjdCAsIAkga0RsZ0l0ZW1EYmdSZXBvcnRTdGFja0FsbW9zdE92 ZXJmbG93ICwgICBrRGxnSXRlbURiZ1JlcG9ydFN0cmljdEludGxDaGVja3MgLCAJIGtEbGdJdGVt RGJnUmVwb3J0U3lzdGVtR2xvYmFsQWNjZXNzICwgCSBrRGxnSXRlbURiZ1JlcG9ydFVJTWdyRGF0 YUFjY2VzcyAsIAkga0RsZ0l0ZW1EYmdSZXBvcnRVbmxvY2tlZENodW5rQWNjZXNzICwgIAoKCWtE bGdJdGVtU2tuU2tpbkxpc3QJCQk9ICgoIGtEbGdFZGl0U2tpbnMgKSAqIDEwMCkgICsgMCwKCWtE bGdJdGVtU2tuRG91YmxlU2NhbGUJCT0gKCgga0RsZ0VkaXRTa2lucyApICogMTAwKSAgKyAxLAoJ a0RsZ0l0ZW1Ta25XaGl0ZUJhY2tncm91bmQJPSAoKCBrRGxnRWRpdFNraW5zICkgKiAxMDApICAr IDIsCglrRGxnSXRlbVNrbkRpbQkJCQk9ICgoIGtEbGdFZGl0U2tpbnMgKSAqIDEwMCkgICsgMywK CWtEbGdJdGVtU2tuUmVkCQkJCT0gKCgga0RsZ0VkaXRTa2lucyApICogMTAwKSAgKyA0LAoJa0Rs Z0l0ZW1Ta25HcmVlbgkJCT0gKCgga0RsZ0VkaXRTa2lucyApICogMTAwKSAgKyA1LAoJa0RsZ0l0 ZW1Ta25TdGF5T25Ub3AJCT0gKCgga0RsZ0VkaXRTa2lucyApICogMTAwKSAgKyA2LAoKCWtEbGdJ dGVtQ21uVGV4dAkJCQk9ICgoIGtEbGdDb21tb25EaWFsb2cgKSAqIDEwMCkgICsgMCwKCWtEbGdJ dGVtQ21uSWNvblN0b3AJCQk9ICgoIGtEbGdDb21tb25EaWFsb2cgKSAqIDEwMCkgICsgMSwKCWtE bGdJdGVtQ21uSWNvbkNhdXRpb24JCT0gKCgga0RsZ0NvbW1vbkRpYWxvZyApICogMTAwKSAgKyAy LAoJa0RsZ0l0ZW1DbW5JY29uTm90ZQkJCT0gKCgga0RsZ0NvbW1vbkRpYWxvZyApICogMTAwKSAg KyAzLAoJa0RsZ0l0ZW1DbW5CdXR0b24xCQkJPSAoKCBrRGxnQ29tbW9uRGlhbG9nICkgKiAxMDAp ICArIDQsCglrRGxnSXRlbUNtbkJ1dHRvbjIJCQk9ICgoIGtEbGdDb21tb25EaWFsb2cgKSAqIDEw MCkgICsgNSwKCWtEbGdJdGVtQ21uQnV0dG9uMwkJCT0gKCgga0RsZ0NvbW1vbkRpYWxvZyApICog MTAwKSAgKyA2LAoJa0RsZ0l0ZW1DbW5CdXR0b25Db3B5CQk9ICgoIGtEbGdDb21tb25EaWFsb2cg KSAqIDEwMCkgICsgNywKCglrRGxnSXRlbUJuZFNhdmVST00JCQk9ICgoIGtEbGdTYXZlQm91bmQg KSAqIDEwMCkgICsgMCwKCWtEbGdJdGVtQm5kU2F2ZVJBTQkJCT0gKCgga0RsZ1NhdmVCb3VuZCAp ICogMTAwKSAgKyAxLAoKCWtEbGdJdGVtSGZzTGlzdAkJCQk9ICgoIGtEbGdFZGl0SG9zdEZTICkg KiAxMDApICArIDAsCglrRGxnSXRlbUhmc1BhdGgJCQkJPSAoKCBrRGxnRWRpdEhvc3RGUyApICog MTAwKSAgKyAxLAoJa0RsZ0l0ZW1IZnNNb3VudGVkCQkJPSAoKCBrRGxnRWRpdEhvc3RGUyApICog MTAwKSAgKyAyLAoJa0RsZ0l0ZW1IZnNCcm93c2UJCQk9ICgoIGtEbGdFZGl0SG9zdEZTICkgKiAx MDApICArIDMsCgoJa0RsZ0l0ZW1CcmtMaXN0CQkJCT0gKCgga0RsZ0VkaXRCcmVha3BvaW50cyAp ICogMTAwKSAgKyAwLAoJa0RsZ0l0ZW1CcmtCdXR0b25FZGl0CQk9ICgoIGtEbGdFZGl0QnJlYWtw b2ludHMgKSAqIDEwMCkgICsgMSwKCWtEbGdJdGVtQnJrQnV0dG9uQ2xlYXIJCT0gKCgga0RsZ0Vk aXRCcmVha3BvaW50cyApICogMTAwKSAgKyAyLAoJa0RsZ0l0ZW1CcmtDaGVja0VuYWJsZWQJCT0g KCgga0RsZ0VkaXRCcmVha3BvaW50cyApICogMTAwKSAgKyAzLAoJa0RsZ0l0ZW1CcmtTdGFydEFk ZHJlc3MJCT0gKCgga0RsZ0VkaXRCcmVha3BvaW50cyApICogMTAwKSAgKyA0LAoJa0RsZ0l0ZW1C cmtOdW1iZXJPZkJ5dGVzCT0gKCgga0RsZ0VkaXRCcmVha3BvaW50cyApICogMTAwKSAgKyA1LAoK CWtEbGdJdGVtQnJrQWRkcmVzcwkJCT0gKCgga0RsZ0VkaXRDb2RlQnJlYWtwb2ludCApICogMTAw KSAgKyAwLAoJa0RsZ0l0ZW1CcmtDb25kaXRpb24JCT0gKCgga0RsZ0VkaXRDb2RlQnJlYWtwb2lu dCApICogMTAwKSAgKyAxLAoKCWtEbGdJdGVtVHJjT3V0cHV0CQkJPSAoKCBrRGxnRWRpdFRyYWNp bmdPcHRpb25zICkgKiAxMDApICArIDAsCglrRGxnSXRlbVRyY1RhcmdldFRleHQJCT0gKCgga0Rs Z0VkaXRUcmFjaW5nT3B0aW9ucyApICogMTAwKSAgKyAxLAoJa0RsZ0l0ZW1UcmNUYXJnZXRWYWx1 ZQkJPSAoKCBrRGxnRWRpdFRyYWNpbmdPcHRpb25zICkgKiAxMDApICArIDIsCglrRGxnSXRlbVRy Y0luZm8JCQkJPSAoKCBrRGxnRWRpdFRyYWNpbmdPcHRpb25zICkgKiAxMDApICArIDMsCglrRGxn SXRlbVRyY0F1dG9Db25uZWN0CQk9ICgoIGtEbGdFZGl0VHJhY2luZ09wdGlvbnMgKSAqIDEwMCkg ICsgNCwKCglrRGxnSXRlbVJzdFNvZnQJCQkJPSAoKCBrRGxnUmVzZXQgKSAqIDEwMCkgICsgMCwK CWtEbGdJdGVtUnN0SGFyZAkJCQk9ICgoIGtEbGdSZXNldCApICogMTAwKSAgKyAxLAoJa0RsZ0l0 ZW1Sc3REZWJ1ZwkJCT0gKCgga0RsZ1Jlc2V0ICkgKiAxMDApICArIDIsCglrRGxnSXRlbVJzdE5v RXh0CQkJPSAoKCBrRGxnUmVzZXQgKSAqIDEwMCkgICsgMywKCglrRGxnSXRlbUluZkRldmljZUZs ZAkJPSAoKCBrRGxnU2Vzc2lvbkluZm8gKSAqIDEwMCkgICsgMCwKCWtEbGdJdGVtSW5mUkFNRmxk CQkJPSAoKCBrRGxnU2Vzc2lvbkluZm8gKSAqIDEwMCkgICsgMSwKCWtEbGdJdGVtSW5mUk9NRmxk CQkJPSAoKCBrRGxnU2Vzc2lvbkluZm8gKSAqIDEwMCkgICsgMiwKCWtEbGdJdGVtSW5mU2Vzc2lv bkZsZAkJPSAoKCBrRGxnU2Vzc2lvbkluZm8gKSAqIDEwMCkgICsgMywKCglrRGxnSXRlbVNvY2tl dEFkZHJlc3MJCT0gKCgga0RsZ0dldFNvY2tldEFkZHJlc3MgKSAqIDEwMCkgICsgMCwKCglrRGxn SXRlbUVycldhcm5pbmdPZmYJCT0gKCgga0RsZ0VkaXRFcnJvckhhbmRsaW5nICkgKiAxMDApICAr IDAsCglrRGxnSXRlbUVyckVycm9yT2ZmCQkJPSAoKCBrRGxnRWRpdEVycm9ySGFuZGxpbmcgKSAq IDEwMCkgICsgMSwKCWtEbGdJdGVtRXJyV2FybmluZ09uCQk9ICgoIGtEbGdFZGl0RXJyb3JIYW5k bGluZyApICogMTAwKSAgKyAyLAoJa0RsZ0l0ZW1FcnJFcnJvck9uCQkJPSAoKCBrRGxnRWRpdEVy cm9ySGFuZGxpbmcgKSAqIDEwMCkgICsgMywKCglrRGxnSXRlbU1pblBhc3NOdW1iZXIJCT0gKCgg a0RsZ01pbmltaXplUHJvZ3Jlc3MgKSAqIDEwMCkgICsgMCwKCWtEbGdJdGVtTWluRXZlbnROdW1i ZXIJCT0gKCgga0RsZ01pbmltaXplUHJvZ3Jlc3MgKSAqIDEwMCkgICsgMSwKCWtEbGdJdGVtTWlu RWxhcHNlZAkJCT0gKCgga0RsZ01pbmltaXplUHJvZ3Jlc3MgKSAqIDEwMCkgICsgMiwKCWtEbGdJ dGVtTWluUmFuZ2UJCQk9ICgoIGtEbGdNaW5pbWl6ZVByb2dyZXNzICkgKiAxMDApICArIDMsCglr RGxnSXRlbU1pbkRpc2NhcmRlZAkJPSAoKCBrRGxnTWluaW1pemVQcm9ncmVzcyApICogMTAwKSAg KyA0LAoJa0RsZ0l0ZW1NaW5Qcm9ncmVzcwkJCT0gKCgga0RsZ01pbmltaXplUHJvZ3Jlc3MgKSAq IDEwMCkgICsgNSwKCglrRGxnSXRlbUxhc3QKfTsKCgplbnVtIEVtQ29tbW9uRGlhbG9nRmxhZ3MK ewoJIAoJIAoJIAoJIAoJIAoJIAoKCSAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoJa0J1dHRv bk1hc2sJCQk9IDB4MEYsCgoJa0J1dHRvbkRlZmF1bHQJCT0gMHgxMCwKCWtCdXR0b25Fc2NhcGUJ CT0gMHgyMCwKCWtCdXR0b25WaXNpYmxlCQk9IDB4NDAsCglrQnV0dG9uRW5hYmxlZAkJPSAweDgw LAoKCWtCdXR0b25GaWVsZFNoaWZ0CT0gOCwKCWtCdXR0b25GaWVsZE1hc2sJPSAweDAwMDAwMEZG LAoKCSAKCSAKCSAKCSAKCSAKCSAKCSAKCSAKCSAKCSAKCgoKCgoKCgoKCWtEbGdGbGFnc19Ob25l CQkJCQk9IDAsCgoJa0RsZ0ZsYWdzX09LCQkJCQk9ICgoKGxvbmcpKCAgKCAga0RsZ0l0ZW1PSyAp IHwga0J1dHRvblZpc2libGUgfCBrQnV0dG9uRW5hYmxlZCB8IGtCdXR0b25EZWZhdWx0ICkgJiBr QnV0dG9uRmllbGRNYXNrKSA8PCAoa0J1dHRvbkZpZWxkU2hpZnQgKiAoICAwICApKSkgICwKCglr RGxnRmxhZ3NfQ0FOQ0VMCQkJCT0gKCgobG9uZykoICAoICBrRGxnSXRlbUNhbmNlbCApIHwga0J1 dHRvblZpc2libGUgfCBrQnV0dG9uRW5hYmxlZCB8IGtCdXR0b25EZWZhdWx0ICkgJiBrQnV0dG9u RmllbGRNYXNrKSA8PCAoa0J1dHRvbkZpZWxkU2hpZnQgKiAoICAwICApKSkgICwKCglrRGxnRmxh Z3NfT0tfQ2FuY2VsCQkJCT0gKCgobG9uZykoICAoICBrRGxnSXRlbU9LICkgfCBrQnV0dG9uVmlz aWJsZSB8IGtCdXR0b25FbmFibGVkIHwga0J1dHRvbkRlZmF1bHQgKSAmIGtCdXR0b25GaWVsZE1h c2spIDw8IChrQnV0dG9uRmllbGRTaGlmdCAqICggIDAgICkpKSAgCgkJCQkJCQkJCXwgKCgobG9u ZykoICAoICBrRGxnSXRlbUNhbmNlbCApIHwga0J1dHRvblZpc2libGUgfCBrQnV0dG9uRW5hYmxl ZCB8IGtCdXR0b25Fc2NhcGUgKSAmIGtCdXR0b25GaWVsZE1hc2spIDw8IChrQnV0dG9uRmllbGRT aGlmdCAqICggIDEgICkpKSAgLAoKCWtEbGdGbGFnc19Pa19DQU5DRUwJCQkJPSAoKChsb25nKSgg ICggIGtEbGdJdGVtT0sgKSB8IGtCdXR0b25WaXNpYmxlIHwga0J1dHRvbkVuYWJsZWQgKSAmIGtC dXR0b25GaWVsZE1hc2spIDw8IChrQnV0dG9uRmllbGRTaGlmdCAqICggIDAgICkpKSAgCgkJCQkJ CQkJCXwgKCgobG9uZykoICAoICBrRGxnSXRlbUNhbmNlbCApIHwga0J1dHRvblZpc2libGUgfCBr QnV0dG9uRW5hYmxlZCB8IGtCdXR0b25EZWZhdWx0ICkgJiBrQnV0dG9uRmllbGRNYXNrKSA8PCAo a0J1dHRvbkZpZWxkU2hpZnQgKiAoICAxICApKSkgICwKCglrRGxnRmxhZ3NfWUVTX05vCQkJCT0g KCgobG9uZykoICAoICBrRGxnSXRlbVllcyApIHwga0J1dHRvblZpc2libGUgfCBrQnV0dG9uRW5h YmxlZCB8IGtCdXR0b25EZWZhdWx0ICkgJiBrQnV0dG9uRmllbGRNYXNrKSA8PCAoa0J1dHRvbkZp ZWxkU2hpZnQgKiAoICAwICApKSkgIAoJCQkJCQkJCQl8ICgoKGxvbmcpKCAgKCAga0RsZ0l0ZW1O byApIHwga0J1dHRvblZpc2libGUgfCBrQnV0dG9uRW5hYmxlZCB8IGtCdXR0b25Fc2NhcGUgKSAm IGtCdXR0b25GaWVsZE1hc2spIDw8IChrQnV0dG9uRmllbGRTaGlmdCAqICggIDEgICkpKSAgLAoK CWtEbGdGbGFnc19ZZXNfTk8JCQkJPSAoKChsb25nKSggICggIGtEbGdJdGVtWWVzICkgfCBrQnV0 dG9uVmlzaWJsZSB8IGtCdXR0b25FbmFibGVkICkgJiBrQnV0dG9uRmllbGRNYXNrKSA8PCAoa0J1 dHRvbkZpZWxkU2hpZnQgKiAoICAwICApKSkgIAoJCQkJCQkJCQl8ICgoKGxvbmcpKCAgKCAga0Rs Z0l0ZW1ObyApIHwga0J1dHRvblZpc2libGUgfCBrQnV0dG9uRW5hYmxlZCB8IGtCdXR0b25EZWZh dWx0ICkgJiBrQnV0dG9uRmllbGRNYXNrKSA8PCAoa0J1dHRvbkZpZWxkU2hpZnQgKiAoICAxICAp KSkgICwKCglrRGxnRmxhZ3NfQ29udGludWVfREVCVUdfUmVzZXQJPSAoKChsb25nKSggICggIGtE bGdJdGVtQ29udGludWUgKSB8IGtCdXR0b25WaXNpYmxlIHwga0J1dHRvbkVuYWJsZWQgKSAmIGtC dXR0b25GaWVsZE1hc2spIDw8IChrQnV0dG9uRmllbGRTaGlmdCAqICggIDAgICkpKSAgCgkJCQkJ CQkJCXwgKCgobG9uZykoICAoICBrRGxnSXRlbURlYnVnICkgfCBrQnV0dG9uVmlzaWJsZSB8IGtC dXR0b25FbmFibGVkIHwga0J1dHRvbkRlZmF1bHQgKSAmIGtCdXR0b25GaWVsZE1hc2spIDw8IChr QnV0dG9uRmllbGRTaGlmdCAqICggIDEgICkpKSAgCgkJCQkJCQkJCXwgKCgobG9uZykoICAoICBr RGxnSXRlbVJlc2V0ICkgfCBrQnV0dG9uVmlzaWJsZSB8IGtCdXR0b25FbmFibGVkICkgJiBrQnV0 dG9uRmllbGRNYXNrKSA8PCAoa0J1dHRvbkZpZWxkU2hpZnQgKiAoICAyICApKSkgICwKCglrRGxn RmxhZ3NfY29udGludWVfREVCVUdfUmVzZXQJPSAoKChsb25nKSggICggIGtEbGdJdGVtQ29udGlu dWUgKSB8IGtCdXR0b25WaXNpYmxlICkgJiBrQnV0dG9uRmllbGRNYXNrKSA8PCAoa0J1dHRvbkZp ZWxkU2hpZnQgKiAoICAwICApKSkgIAoJCQkJCQkJCQl8ICgoKGxvbmcpKCAgKCAga0RsZ0l0ZW1E ZWJ1ZyApIHwga0J1dHRvblZpc2libGUgfCBrQnV0dG9uRW5hYmxlZCB8IGtCdXR0b25EZWZhdWx0 ICkgJiBrQnV0dG9uRmllbGRNYXNrKSA8PCAoa0J1dHRvbkZpZWxkU2hpZnQgKiAoICAxICApKSkg IAoJCQkJCQkJCQl8ICgoKGxvbmcpKCAgKCAga0RsZ0l0ZW1SZXNldCApIHwga0J1dHRvblZpc2li bGUgfCBrQnV0dG9uRW5hYmxlZCApICYga0J1dHRvbkZpZWxkTWFzaykgPDwgKGtCdXR0b25GaWVs ZFNoaWZ0ICogKCAgMiAgKSkpICAsCgoJa0RsZ0ZsYWdzX2NvbnRpbnVlX2RlYnVnX1JFU0VUCT0g KCgobG9uZykoICAoICBrRGxnSXRlbUNvbnRpbnVlICkgfCBrQnV0dG9uVmlzaWJsZSApICYga0J1 dHRvbkZpZWxkTWFzaykgPDwgKGtCdXR0b25GaWVsZFNoaWZ0ICogKCAgMCAgKSkpICAKCQkJCQkJ CQkJfCAoKChsb25nKSggICggIGtEbGdJdGVtRGVidWcgKSB8IGtCdXR0b25WaXNpYmxlICkgJiBr QnV0dG9uRmllbGRNYXNrKSA8PCAoa0J1dHRvbkZpZWxkU2hpZnQgKiAoICAxICApKSkgIAoJCQkJ CQkJCQl8ICgoKGxvbmcpKCAgKCAga0RsZ0l0ZW1SZXNldCApIHwga0J1dHRvblZpc2libGUgfCBr QnV0dG9uRW5hYmxlZCB8IGtCdXR0b25EZWZhdWx0ICkgJiBrQnV0dG9uRmllbGRNYXNrKSA8PCAo a0J1dHRvbkZpZWxkU2hpZnQgKiAoICAyICApKSkgIAp9OwoKdHlwZWRlZiB2ZWN0b3I8RW1EbGdJ dGVtSUQ+CQlFbURsZ0l0ZW1JRExpc3Q7Cgp0eXBlZGVmIGxvbmcJCQkJCUVtRGxnSXRlbUluZGV4 Owp0eXBlZGVmIHZlY3RvcjxFbURsZ0l0ZW1JbmRleD4JRW1EbGdJdGVtSW5kZXhMaXN0OwoKdHlw ZWRlZiBsb25nCQkJCQlFbURsZ0xpc3RJbmRleDsJIAp0eXBlZGVmIHZlY3RvcjxFbURsZ0xpc3RJ bmRleD4JRW1EbGdMaXN0SW5kZXhMaXN0Owpjb25zdCBFbURsZ0xpc3RJbmRleAkJCWtEbGdJdGVt TGlzdE5vbmUgPSAtMTsKCnN0cnVjdCBFbURsZ0NvbnRleHQ7Cgp0eXBlZGVmIEVtRGxnSXRlbUlE CQkJCSgqRW1EbGdUaHJlYWRGbikoY29uc3Qgdm9pZCopOwp0eXBlZGVmIEVtRGxnRm5SZXN1bHQJ CQkoKkVtRGxnRm4pKEVtRGxnQ29udGV4dCYpOwp0eXBlZGVmIHZvaWQqCQkJCQlFbURsZ1JlZjsK CmVudW0gRW1ST01GaWxlU3RhdHVzCnsKCWtST01GaWxlT0ssCglrUk9NRmlsZUR1YmlvdXMsCglr Uk9NRmlsZVVua25vd24KfTsKCnN0cnVjdCBFbURsZ0NvbnRleHQKewoJCQkJCQlFbURsZ0NvbnRl eHQgKHZvaWQpOwoJCQkJCQlFbURsZ0NvbnRleHQgKGNvbnN0IEVtRGxnQ29udGV4dCYpOwoKCUVt RGxnRm5SZXN1bHQJCUluaXQgKCk7CglFbURsZ0ZuUmVzdWx0CQlFdmVudCAoRW1EbGdJdGVtSUQp OwoJRW1EbGdGblJlc3VsdAkJSWRsZSAoKTsKCXZvaWQJCQkJRGVzdHJveSAoKTsKCUVtRGxnRm5S ZXN1bHQJCVBhbmVsRW50ZXIgKCk7CglFbURsZ0ZuUmVzdWx0CQlQYW5lbEV4aXQgKCk7CgoJRW1E bGdGbgkJCQlmRm47CglFbURsZ0ZuUmVzdWx0CQlmRm5SZXN1bHQ7CglFbURsZ1JlZgkJCWZEbGc7 CglFbURsZ0lECQkJCWZEbGdJRDsKCUVtRGxnUGFuZWxJRAkJZlBhbmVsSUQ7CglFbURsZ0l0ZW1J RAkJCWZJdGVtSUQ7CglFbURsZ0NtZElECQkJZkNvbW1hbmRJRDsKCWJvb2wJCQkJZk5lZWRzSWRs ZTsKCXZvaWQqCQkJCWZVc2VyRGF0YTsKCglFbURsZ0l0ZW1JRAkJCWZEZWZhdWx0SXRlbTsKCUVt RGxnSXRlbUlECQkJZkNhbmNlbEl0ZW07Cn07CgpzdHJ1Y3QgRG9HZXRGaWxlUGFyYW1ldGVycwp7 CglEb0dldEZpbGVQYXJhbWV0ZXJzIChFbUZpbGVSZWYmIHJlc3VsdCwKCQkJCQkJIGNvbnN0IHN0 cmluZyYgcHJvbXB0LAoJCQkJCQkgY29uc3QgRW1EaXJSZWYmIGRlZmF1bHRQYXRoLAoJCQkJCQkg Y29uc3QgRW1GaWxlVHlwZUxpc3QmIGZpbHRlckxpc3QpIDoKCQlmUmVzdWx0IChyZXN1bHQpLAoJ CWZQcm9tcHQgKHByb21wdCksCgkJZkRlZmF1bHRQYXRoIChkZWZhdWx0UGF0aCksCgkJZkZpbHRl ckxpc3QgKGZpbHRlckxpc3QpCgl7Cgl9CgoJRW1GaWxlUmVmJgkJCQlmUmVzdWx0OwoJY29uc3Qg c3RyaW5nJgkJCWZQcm9tcHQ7Cgljb25zdCBFbURpclJlZiYJCQlmRGVmYXVsdFBhdGg7Cgljb25z dCBFbUZpbGVUeXBlTGlzdCYJZkZpbHRlckxpc3Q7Cn07CgpzdHJ1Y3QgRG9HZXRGaWxlTGlzdFBh cmFtZXRlcnMKewoJRG9HZXRGaWxlTGlzdFBhcmFtZXRlcnMgKEVtRmlsZVJlZkxpc3QmIHJlc3Vs dHMsCgkJCQkJCQkgY29uc3Qgc3RyaW5nJiBwcm9tcHQsCgkJCQkJCQkgY29uc3QgRW1EaXJSZWYm IGRlZmF1bHRQYXRoLAoJCQkJCQkJIGNvbnN0IEVtRmlsZVR5cGVMaXN0JiBmaWx0ZXJMaXN0KSA6 CgkJZlJlc3VsdHMgKHJlc3VsdHMpLAoJCWZQcm9tcHQgKHByb21wdCksCgkJZkRlZmF1bHRQYXRo IChkZWZhdWx0UGF0aCksCgkJZkZpbHRlckxpc3QgKGZpbHRlckxpc3QpCgl7Cgl9CgoJRW1GaWxl UmVmTGlzdCYJCQlmUmVzdWx0czsKCWNvbnN0IHN0cmluZyYJCQlmUHJvbXB0OwoJY29uc3QgRW1E aXJSZWYmCQkJZkRlZmF1bHRQYXRoOwoJY29uc3QgRW1GaWxlVHlwZUxpc3QmCWZGaWx0ZXJMaXN0 Owp9OwoKc3RydWN0IERvUHV0RmlsZVBhcmFtZXRlcnMKewoJRG9QdXRGaWxlUGFyYW1ldGVycyAo RW1GaWxlUmVmJiByZXN1bHQsCgkJCQkJCSBjb25zdCBzdHJpbmcmIHByb21wdCwKCQkJCQkJIGNv bnN0IEVtRGlyUmVmJiBkZWZhdWx0UGF0aCwKCQkJCQkJIGNvbnN0IEVtRmlsZVR5cGVMaXN0JiBm aWx0ZXJMaXN0LAoJCQkJCQkgY29uc3Qgc3RyaW5nJiBkZWZhdWx0TmFtZSkgOgoJCWZSZXN1bHQg KHJlc3VsdCksCgkJZlByb21wdCAocHJvbXB0KSwKCQlmRGVmYXVsdFBhdGggKGRlZmF1bHRQYXRo KSwKCQlmRmlsdGVyTGlzdCAoZmlsdGVyTGlzdCksCgkJZkRlZmF1bHROYW1lIChkZWZhdWx0TmFt ZSkKCXsKCX0KCglFbUZpbGVSZWYmCQkJCWZSZXN1bHQ7Cgljb25zdCBzdHJpbmcmCQkJZlByb21w dDsKCWNvbnN0IEVtRGlyUmVmJgkJCWZEZWZhdWx0UGF0aDsKCWNvbnN0IEVtRmlsZVR5cGVMaXN0 JglmRmlsdGVyTGlzdDsKCWNvbnN0IHN0cmluZyYJCQlmRGVmYXVsdE5hbWU7Cn07CgpzdHJ1Y3Qg RG9HZXREaXJlY3RvcnlQYXJhbWV0ZXJzCnsKCURvR2V0RGlyZWN0b3J5UGFyYW1ldGVycyAoRW1E aXJSZWYmIHJlc3VsdCwKCQkJCQkJCSAgY29uc3Qgc3RyaW5nJiBwcm9tcHQsCgkJCQkJCQkgIGNv bnN0IEVtRGlyUmVmJiBkZWZhdWx0UGF0aCkgOgoJCWZSZXN1bHQgKHJlc3VsdCksCgkJZlByb21w dCAocHJvbXB0KSwKCQlmRGVmYXVsdFBhdGggKGRlZmF1bHRQYXRoKQoJewoJfQoKCUVtRGlyUmVm JgkJCQlmUmVzdWx0OwoJY29uc3Qgc3RyaW5nJgkJCWZQcm9tcHQ7Cgljb25zdCBFbURpclJlZiYJ CQlmRGVmYXVsdFBhdGg7Cn07CgpzdHJ1Y3QgRG9TZXNzaW9uU2F2ZVBhcmFtZXRlcnMKewoJRG9T ZXNzaW9uU2F2ZVBhcmFtZXRlcnMgKGNvbnN0IHN0cmluZyYgYXBwTmFtZSwKCQkJCQkJCSBjb25z dCBzdHJpbmcmIGRvY05hbWUsCgkJCQkJCQkgQm9vbCBxdWl0dGluZykgOgoJCWZBcHBOYW1lIChh cHBOYW1lKSwKCQlmRG9jTmFtZSAoZG9jTmFtZSksCgkJZlF1aXR0aW5nIChxdWl0dGluZykKCXsK CX0KCgljb25zdCBzdHJpbmcmCQkJZkFwcE5hbWU7Cgljb25zdCBzdHJpbmcmCQkJZkRvY05hbWU7 CglCb29sCQkJCQlmUXVpdHRpbmc7Cn07CgpzdHJ1Y3QgUnVuRGlhbG9nUGFyYW1ldGVycwp7CglS dW5EaWFsb2dQYXJhbWV0ZXJzIChFbURsZ0ZuIGZuLCB2b2lkKiB1c2VyRGF0YSwgRW1EbGdJRCBk bGdJRCkgOgoJCWZGbiAoZm4pLAoJCWZVc2VyRGF0YSAodXNlckRhdGEpLAoJCWZEbGdJRCAoZGxn SUQpCgl7Cgl9CgoJRW1EbGdGbgkJCQkJZkZuOwoJdm9pZCoJCQkJCWZVc2VyRGF0YTsKCUVtRGxn SUQJCQkJCWZEbGdJRDsKfTsKCiAKdHlwZWRlZiBEYXRhYmFzZUluZm9MaXN0CUVtRGF0YWJhc2VM aXN0OwpzdHJ1Y3QgRWRpdENvZGVCcmVha3BvaW50RGF0YTsKc3RydWN0IEVtRXJyb3JIYW5kbGlu Z01lbnVCdW5kbGU7CgpjbGFzcyBFbURsZwp7CglwdWJsaWM6CgkJc3RhdGljIEVtRGxnSXRlbUlE CQlEb0dldEZpbGUJCQkJCShFbUZpbGVSZWYmIHJlc3VsdCwKCQkJCQkJCQkJCQkJCQkJIGNvbnN0 IHN0cmluZyYgcHJvbXB0LAoJCQkJCQkJCQkJCQkJCQkgY29uc3QgRW1EaXJSZWYmIGRlZmF1bHRQ YXRoLAoJCQkJCQkJCQkJCQkJCQkgY29uc3QgRW1GaWxlVHlwZUxpc3QmIGZpbHRlckxpc3QpOwoJ CXN0YXRpYyBFbURsZ0l0ZW1JRAkJRG9HZXRGaWxlTGlzdAkJCQkoRW1GaWxlUmVmTGlzdCYgcmVz dWx0cywKCQkJCQkJCQkJCQkJCQkJIGNvbnN0IHN0cmluZyYgcHJvbXB0LAoJCQkJCQkJCQkJCQkJ CQkgY29uc3QgRW1EaXJSZWYmIGRlZmF1bHRQYXRoLAoJCQkJCQkJCQkJCQkJCQkgY29uc3QgRW1G aWxlVHlwZUxpc3QmIGZpbHRlckxpc3QpOwoJCXN0YXRpYyBFbURsZ0l0ZW1JRAkJRG9QdXRGaWxl CQkJCQkoRW1GaWxlUmVmJiByZXN1bHQsCgkJCQkJCQkJCQkJCQkJCSBjb25zdCBzdHJpbmcmIHBy b21wdCwKCQkJCQkJCQkJCQkJCQkJIGNvbnN0IEVtRGlyUmVmJiBkZWZhdWx0UGF0aCwKCQkJCQkJ CQkJCQkJCQkJIGNvbnN0IEVtRmlsZVR5cGVMaXN0JiBmaWx0ZXJMaXN0LAoJCQkJCQkJCQkJCQkJ CQkgY29uc3Qgc3RyaW5nJiBkZWZhdWx0TmFtZSk7CgkJc3RhdGljIEVtRGxnSXRlbUlECQlEb0dl dERpcmVjdG9yeQkJCQkoRW1EaXJSZWYmIHJlc3VsdCwKCQkJCQkJCQkJCQkJCQkJIGNvbnN0IHN0 cmluZyYgcHJvbXB0LAoJCQkJCQkJCQkJCQkJCQkgY29uc3QgRW1EaXJSZWYmIGRlZmF1bHRQYXRo KTsKCgkJc3RhdGljIEVtRGxnSXRlbUlECQlEb0Fib3V0Qm94CQkJCQkodm9pZCk7CgoJCXN0YXRp YyBFbURsZ0l0ZW1JRAkJRG9TZXNzaW9uTmV3CQkJCShDb25maWd1cmF0aW9uJik7CgkJc3RhdGlj IEVtRGxnSXRlbUlECQlEb1Nlc3Npb25TYXZlCQkJCShjb25zdCBzdHJpbmcmIGRvY05hbWUsCgkJ CQkJCQkJCQkJCQkJCSBCb29sIHF1aXR0aW5nKTsKCgkJc3RhdGljIEVtRGxnSXRlbUlECQlEb0hv cmRlTmV3CQkJCQkodm9pZCk7CgoJCXN0YXRpYyBFbURsZ0l0ZW1JRAkJRG9EYXRhYmFzZUltcG9y dAkJCShjb25zdCBFbUZpbGVSZWZMaXN0JiwKCQkJCQkJCQkJCQkJCQkJIEVtRmlsZUltcG9ydE1l dGhvZCBtZXRob2QpOwoJCXN0YXRpYyBFbURsZ0l0ZW1JRAkJRG9EYXRhYmFzZUV4cG9ydAkJCSh2 b2lkKTsKCQlzdGF0aWMgRW1EbGdJdGVtSUQJCURvUmVzZXQJCQkJCQkoRW1SZXNldFR5cGUmKTsK CQlzdGF0aWMgRW1EbGdJdGVtSUQJCURvUk9NVHJhbnNmZXJRdWVyeQkJCShFbVRyYW5zcG9ydDo6 Q29uZmlnKiYpOwoJCXN0YXRpYyBFbURsZ0l0ZW1JRAkJRG9ST01UcmFuc2ZlclByb2dyZXNzCQko RW1ST01UcmFuc2ZlciYpOwoKCQlzdGF0aWMgRW1EbGdJdGVtSUQJCURvRWRpdFByZWZlcmVuY2Vz CQkJKHZvaWQpOwoJCXN0YXRpYyBFbURsZ0l0ZW1JRAkJRG9FZGl0TG9nZ2luZ09wdGlvbnMJCShM b2dnaW5nVHlwZSk7CgkJc3RhdGljIEVtRGxnSXRlbUlECQlEb0VkaXREZWJ1Z2dpbmdPcHRpb25z CQkodm9pZCk7CgkJc3RhdGljIEVtRGxnSXRlbUlECQlEb0VkaXRFcnJvckhhbmRsaW5nCQkJKHZv aWQpOwoJCXN0YXRpYyBFbURsZ0l0ZW1JRAkJRG9FZGl0U2tpbnMJCQkJCSh2b2lkKTsKCQlzdGF0 aWMgRW1EbGdJdGVtSUQJCURvRWRpdEhvc3RGU09wdGlvbnMJCQkodm9pZCk7CgkJc3RhdGljIEVt RGxnSXRlbUlECQlEb0VkaXRCcmVha3BvaW50cwkJCSh2b2lkKTsKCQlzdGF0aWMgRW1EbGdJdGVt SUQJCURvRWRpdENvZGVCcmVha3BvaW50CQkoRWRpdENvZGVCcmVha3BvaW50RGF0YSYpOwoKCgoK CQlzdGF0aWMgRW1EbGdJdGVtSUQJCURvQ29tbW9uRGlhbG9nCQkJCShTdHJDb2RlIG1zZywKCQkJ CQkJCQkJCQkJCQkJIEVtQ29tbW9uRGlhbG9nRmxhZ3MpOwoJCXN0YXRpYyBFbURsZ0l0ZW1JRAkJ RG9Db21tb25EaWFsb2cJCQkJKGNvbnN0IGNoYXIqIG1zZywKCQkJCQkJCQkJCQkJCQkJIEVtQ29t bW9uRGlhbG9nRmxhZ3MpOwoJCXN0YXRpYyBFbURsZ0l0ZW1JRAkJRG9Db21tb25EaWFsb2cJCQkJ KGNvbnN0IHN0cmluZyYgbXNnLAoJCQkJCQkJCQkJCQkJCQkgRW1Db21tb25EaWFsb2dGbGFncyk7 CgoJCXN0YXRpYyBFbURsZ0l0ZW1JRAkJRG9TYXZlQm91bmQJCQkJCSh2b2lkKTsKCQlzdGF0aWMg RW1EbGdJdGVtSUQJCURvU2Vzc2lvbkluZm8JCQkJKHZvaWQpOwoJCXN0YXRpYyBFbURsZ0l0ZW1J RAkJRG9HZXRTb2NrZXRBZGRyZXNzCQkJKHN0cmluZyYpOwoKCQlzdGF0aWMgdm9pZAkJCQlHcmVt bGluQ29udHJvbE9wZW4JCQkodm9pZCk7CgkJc3RhdGljIHZvaWQJCQkJR3JlbWxpbkNvbnRyb2xD bG9zZQkJCSh2b2lkKTsKCgkJc3RhdGljIHZvaWQJCQkJTWluaW1pemVQcm9ncmVzc09wZW4JCSh2 b2lkKTsKCQlzdGF0aWMgdm9pZAkJCQlNaW5pbWl6ZVByb2dyZXNzQ2xvc2UJCSh2b2lkKTsKCgkJ c3RhdGljIEVtRGxnSXRlbUlECQlSdW5EaWFsb2cJCQkJCShFbURsZ0ZuLCB2b2lkKiwgRW1EbGdJ RCk7CgkJc3RhdGljIEVtRGxnSXRlbUlECQlSdW5EaWFsb2cJCQkJCShFbURsZ1RocmVhZEZuLCBj b25zdCB2b2lkKiBwYXJhbWV0ZXJzKTsKCgkJc3RhdGljIEVtRGxnUmVmCQkJRGlhbG9nT3BlbgkJ CQkJKEVtRGxnRm4sIHZvaWQqLCBFbURsZ0lEKTsKCQlzdGF0aWMgdm9pZAkJCQlEaWFsb2dDbG9z ZQkJCQkJKEVtRGxnUmVmKTsKCglwcml2YXRlOgoJCXN0YXRpYyBFbURsZ0l0ZW1JRAkJSG9zdFJ1 bkdldEZpbGUJCQkJKGNvbnN0IHZvaWQqIHBhcmFtZXRlcnMpOwoJCXN0YXRpYyBFbURsZ0l0ZW1J RAkJSG9zdFJ1bkdldEZpbGVMaXN0CQkJKGNvbnN0IHZvaWQqIHBhcmFtZXRlcnMpOwoJCXN0YXRp YyBFbURsZ0l0ZW1JRAkJSG9zdFJ1blB1dEZpbGUJCQkJKGNvbnN0IHZvaWQqIHBhcmFtZXRlcnMp OwoJCXN0YXRpYyBFbURsZ0l0ZW1JRAkJSG9zdFJ1bkdldERpcmVjdG9yeQkJCShjb25zdCB2b2lk KiBwYXJhbWV0ZXJzKTsKCQlzdGF0aWMgRW1EbGdJdGVtSUQJCUhvc3RSdW5BYm91dEJveAkJCQko Y29uc3Qgdm9pZCogcGFyYW1ldGVycyk7CgkJc3RhdGljIEVtRGxnSXRlbUlECQlIb3N0UnVuU2Vz c2lvblNhdmUJCQkoY29uc3Qgdm9pZCogcGFyYW1ldGVycyk7CgkJc3RhdGljIEVtRGxnSXRlbUlE CQlIb3N0UnVuRGlhbG9nCQkJCShjb25zdCB2b2lkKiBwYXJhbWV0ZXJzKTsKCgkJc3RhdGljIEVt RGxnUmVmCQkJSG9zdERpYWxvZ09wZW4JCQkJKEVtRGxnRm4sIHZvaWQqLCBFbURsZ0lEKTsKCQlz dGF0aWMgdm9pZAkJCQlIb3N0RGlhbG9nQ2xvc2UJCQkJKEVtRGxnUmVmKTsKCglwdWJsaWM6CSAK CQlzdGF0aWMgdm9pZAkJCQlIb3N0RGlhbG9nSW5pdAkJCQkoRW1EbGdDb250ZXh0Jik7CgkJc3Rh dGljIHZvaWQJCQkJSG9zdFN0YXJ0SWRsaW5nCQkJCShFbURsZ0NvbnRleHQmKTsKCQlzdGF0aWMg dm9pZAkJCQlIb3N0U3RvcElkbGluZwkJCQkoRW1EbGdDb250ZXh0Jik7CgojIDcyNiAiLi4vU3Jj U2hhcmVkL0VtRGxnLmgiCgoKCXByaXZhdGU6CgkJZnJpZW5kIHN0cnVjdCBFbURsZ0NvbnRleHQ7 CSAKCglwcml2YXRlOgoJCXN0YXRpYyBFbURsZ0ZuUmVzdWx0CVBydlNlc3Npb25OZXcJCQkJKEVt RGxnQ29udGV4dCYpOwoJCXN0YXRpYyBFbURsZ0ZuUmVzdWx0CVBydkhvcmRlTmV3CQkJCQkoRW1E bGdDb250ZXh0Jik7CgkJc3RhdGljIEVtRGxnRm5SZXN1bHQJUHJ2RGF0YWJhc2VJbXBvcnQJCQko RW1EbGdDb250ZXh0Jik7CgkJc3RhdGljIEVtRGxnRm5SZXN1bHQJUHJ2RGF0YWJhc2VFeHBvcnQJ CQkoRW1EbGdDb250ZXh0Jik7CgkJc3RhdGljIEVtRGxnRm5SZXN1bHQJUHJ2UmVzZXQJCQkJCShF bURsZ0NvbnRleHQmKTsKCQlzdGF0aWMgRW1EbGdGblJlc3VsdAlQcnZST01UcmFuc2ZlclF1ZXJ5 CQkJKEVtRGxnQ29udGV4dCYpOwoJCXN0YXRpYyBFbURsZ0ZuUmVzdWx0CVBydlJPTVRyYW5zZmVy UHJvZ3Jlc3MJCShFbURsZ0NvbnRleHQmKTsKCQlzdGF0aWMgRW1EbGdGblJlc3VsdAlQcnZFZGl0 UHJlZmVyZW5jZXMJCQkoRW1EbGdDb250ZXh0Jik7CgkJc3RhdGljIEVtRGxnRm5SZXN1bHQJUHJ2 RWRpdExvZ2dpbmdPcHRpb25zCQkoRW1EbGdDb250ZXh0Jik7CgkJc3RhdGljIEVtRGxnRm5SZXN1 bHQJUHJ2RWRpdERlYnVnZ2luZ09wdGlvbnMJCShFbURsZ0NvbnRleHQmKTsKCQlzdGF0aWMgRW1E bGdGblJlc3VsdAlQcnZFcnJvckhhbmRsaW5nCQkJKEVtRGxnQ29udGV4dCYpOwoJCXN0YXRpYyBF bURsZ0ZuUmVzdWx0CVBydkVkaXRTa2lucwkJCQkoRW1EbGdDb250ZXh0Jik7CgkJc3RhdGljIEVt RGxnRm5SZXN1bHQJUHJ2RWRpdEhvc3RGU09wdGlvbnMJCShFbURsZ0NvbnRleHQmKTsKCQlzdGF0 aWMgRW1EbGdGblJlc3VsdAlQcnZFZGl0QnJlYWtwb2ludHMJCQkoRW1EbGdDb250ZXh0Jik7CgkJ c3RhdGljIEVtRGxnRm5SZXN1bHQJUHJ2RWRpdENvZGVCcmVha3BvaW50CQkoRW1EbGdDb250ZXh0 Jik7CgoKCgkJc3RhdGljIEVtRGxnRm5SZXN1bHQJUHJ2Q29tbW9uRGlhbG9nCQkJCShFbURsZ0Nv bnRleHQmKTsKCQlzdGF0aWMgRW1EbGdGblJlc3VsdAlQcnZTYXZlQm91bmQJCQkJKEVtRGxnQ29u dGV4dCYpOwoJCXN0YXRpYyBFbURsZ0ZuUmVzdWx0CVBydlNlc3Npb25JbmZvCQkJCShFbURsZ0Nv bnRleHQmKTsKCQlzdGF0aWMgRW1EbGdGblJlc3VsdAlQcnZHZXRTb2NrZXRBZGRyZXNzCQkJKEVt RGxnQ29udGV4dCYpOwoJCXN0YXRpYyBFbURsZ0ZuUmVzdWx0CVBydkdyZW1saW5Db250cm9sCQkJ KEVtRGxnQ29udGV4dCYpOwoJCXN0YXRpYyBFbURsZ0ZuUmVzdWx0CVBydk1pbmltaXplUHJvZ3Jl c3MJCQkoRW1EbGdDb250ZXh0Jik7CgoJCSAKCgkJc3RhdGljIHZvaWQJCQkJUHJ2QnVpbGRST01N ZW51CQkJCShjb25zdCBFbURsZ0NvbnRleHQmKTsKCQlzdGF0aWMgdm9pZAkJCQlQcnZCdWlsZERl dmljZU1lbnUJCQkoY29uc3QgRW1EbGdDb250ZXh0Jik7CgkJc3RhdGljIHZvaWQJCQkJUHJ2QnVp bGRTa2luTWVudQkJCShjb25zdCBFbURsZ0NvbnRleHQmKTsKCQlzdGF0aWMgdm9pZAkJCQlQcnZC dWlsZE1lbW9yeVNpemVNZW51CQkoY29uc3QgRW1EbGdDb250ZXh0Jik7CgkJc3RhdGljIHZvaWQJ CQkJUHJ2TmV3U2Vzc2lvblNldE9LQnV0dG9uCShjb25zdCBFbURsZ0NvbnRleHQmKTsKCQlzdGF0 aWMgdm9pZAkJCQlQcnZGaWx0ZXJEZXZpY2VMaXN0CQkJKGNvbnN0IEVtRmlsZVJlZiYgcm9tRmls ZSwKCQkJCQkJCQkJCQkJCQkJIEVtRGV2aWNlTGlzdCYgZGV2aWNlcywKCQkJCQkJCQkJCQkJCQkJ IEVtRGV2aWNlTGlzdDo6aXRlcmF0b3ImIGRldmljZXNfZW5kLAoJCQkJCQkJCQkJCQkJCQkgdW5z aWduZWQgaW50JiB2ZXJzaW9uKTsKCQlzdGF0aWMgdm9pZAkJCQlQcnZGaWx0ZXJNZW1vcnlTaXpl cwkJKE1lbW9yeVRleHRMaXN0JiBzaXplcywKCQkJCQkJCQkJCQkJCQkJIGNvbnN0IENvbmZpZ3Vy YXRpb24mIGNmZyk7CgkJc3RhdGljIEVtUk9NRmlsZVN0YXR1cwlQcnZDYW5Vc2VST01GaWxlCQkJ KEVtRmlsZVJlZiYgdGVzdFJlZik7CgoJCSAKCgkJc3RhdGljIFVJbnQzMgkJCVBydlNlbGVjdGVk QXBwTmFtZVRvSW5kZXgJKEVtRGF0YWJhc2VMaXN0IGxpc3QsIGNvbnN0IHN0cmluZyYgYXBwTmFt ZSk7CgkJc3RhdGljIERhdGFiYXNlSW5mbwkJUHJ2U2VsZWN0ZWRJbmRleFRvQXBwCQkoRW1EYXRh YmFzZUxpc3QgbGlzdCwgdWludDMyIGluZGV4KTsKCQlzdGF0aWMgdm9pZAkJCQlQcnZTZWxlY3Rl ZExpc3QJCQkJKEVtRGF0YWJhc2VMaXN0IHNlbGVjdGVkQXBwcywKCQkJCQkJCQkJCQkJCQkJCVN0 cmluZ0xpc3QgJnNlbGVjdGVkQXBwU3RyaW5ncyk7CgoJCSAKCgkJc3RhdGljIEJvb2wJCQkJUHJ2 RXhwb3J0RmlsZQkJCQkoY29uc3QgRGF0YWJhc2VJbmZvJiBkYik7CgoJCSAKCgkJc3RhdGljIHZv aWQJCQkJUHJ2R2V0RGxxUG9ydEl0ZW1MaXN0CQkoRW1UcmFuc3BvcnREZXNjcmlwdG9yTGlzdCYg bWVudUl0ZW1zKTsKCQlzdGF0aWMgdm9pZAkJCQlQcnZDb252ZXJ0QmF1ZExpc3RUb1N0cmluZ3MJ KGNvbnN0IEVtVHJhbnNwb3J0U2VyaWFsOjpCYXVkTGlzdCYgYmF1ZExpc3QsCgkJCQkJCQkJCQkJ CQkJCSBTdHJpbmdMaXN0JiBiYXVkU3RyTGlzdCk7CgoJCSAKCgkJc3RhdGljIHZvaWQJCQkJUHJ2 RWRpdFByZWZUb0RpYWxvZwkJCShFbURsZ0NvbnRleHQmIGNvbnRleHQpOwoJCXN0YXRpYyB2b2lk CQkJCVBydkVkaXRQcmVmRnJvbURpYWxvZwkJKEVtRGxnQ29udGV4dCYgY29udGV4dCk7CgkJc3Rh dGljIHZvaWQJCQkJUHJ2QnVpbGREZXNjcmlwdG9yTGlzdHMJCShFbURsZ0NvbnRleHQmIGNvbnRl eHQpOwoJCXN0YXRpYyB2b2lkCQkJCVBydkdldEVkaXRQcmVmZXJlbmNlcwkJKEVtRGxnQ29udGV4 dCYgY29udGV4dCk7CgkJc3RhdGljIHZvaWQJCQkJUHJ2UHV0RWRpdFByZWZlcmVuY2VzCQkoRW1E bGdDb250ZXh0JiBjb250ZXh0KTsKCQlzdGF0aWMgQm9vbAkJCQlQcnZFZGl0UHJlZmVyZW5jZXNW YWxpZGF0ZQkoRW1EbGdDb250ZXh0JiBjb250ZXh0KTsKCQlzdGF0aWMgdm9pZAkJCQlQcnZHZXRQ cmVmU29ja2V0QWRkcmVzcwkJKEVtRGxnQ29udGV4dCYgY29udGV4dCk7CgoJCSAKCgkJc3RhdGlj IHZvaWQJCQkJUHJ2RmV0Y2hMb2dnaW5nUHJlZnMJCShFbURsZ0NvbnRleHQmIGNvbnRleHQpOwoJ CXN0YXRpYyB2b2lkCQkJCVBydkluc3RhbGxMb2dnaW5nUHJlZnMJCShFbURsZ0NvbnRleHQmIGNv bnRleHQpOwoJCXN0YXRpYyB2b2lkCQkJCVBydkxvZ2dpbmdQcmVmc1RvQnV0dG9ucwkoRW1EbGdD b250ZXh0JiBjb250ZXh0KTsKCQlzdGF0aWMgdm9pZAkJCQlQcnZMb2dnaW5nUHJlZnNGcm9tQnV0 dG9ucwkoRW1EbGdDb250ZXh0JiBjb250ZXh0KTsKCgkJIAoKCQlzdGF0aWMgdm9pZAkJCQlQcnZG ZXRjaERlYnVnZ2luZ1ByZWZzCQkoRW1EbGdDb250ZXh0JiBjb250ZXh0KTsKCQlzdGF0aWMgdm9p ZAkJCQlQcnZJbnN0YWxsRGVidWdnaW5nUHJlZnMJKEVtRGxnQ29udGV4dCYgY29udGV4dCk7CgkJ c3RhdGljIHZvaWQJCQkJUHJ2RGVidWdnaW5nUHJlZnNUb0J1dHRvbnMJKEVtRGxnQ29udGV4dCYg Y29udGV4dCk7CgkJc3RhdGljIHZvaWQJCQkJUHJ2RGVidWdnaW5nUHJlZnNGcm9tQnV0dG9ucyAo RW1EbGdDb250ZXh0JiBjb250ZXh0KTsKCgkJIAoKCQlzdGF0aWMgc3RyaW5nCQkJUHJ2TWVudUl0 ZW1UZXh0CQkJCShFbUVycm9ySGFuZGxpbmdPcHRpb24gaXRlbSk7CgkJc3RhdGljIHZvaWQJCQkJ UHJ2QnVpbGRNZW51CQkJCShFbUVycm9ySGFuZGxpbmdNZW51QnVuZGxlJgltZW51LAoJCQkJCQkJ CQkJCQkJCQkgU3RyaW5nTGlzdCYJCQkJaXRlbXMpOwoJCXN0YXRpYyBsb25nCQkJCVBydkZpbmRJ bmRleAkJCQkoRW1FcnJvckhhbmRsaW5nTWVudUJ1bmRsZSYJbWVudSwKCQkJCQkJCQkJCQkJCQkJ IEVtRXJyb3JIYW5kbGluZ09wdGlvbgkJdG9GaW5kKTsKCQlzdGF0aWMgdm9pZAkJCQlQcnZFcnJv ckhhbmRsaW5nVG9EaWFsb2cJKEVtRGxnQ29udGV4dCYJCQkJY29udGV4dCwKCQkJCQkJCQkJCQkJ CQkJIEVtRXJyb3JIYW5kbGluZ01lbnVCdW5kbGUmCW1lbnUpOwoJCXN0YXRpYyB2b2lkCQkJCVBy dkVycm9ySGFuZGxpbmdGcm9tRGlhbG9nCShFbURsZ0NvbnRleHQmCQkJCWNvbnRleHQsCgkJCQkJ CQkJCQkJCQkJCSBFbUVycm9ySGFuZGxpbmdNZW51QnVuZGxlJgltZW51KTsKCQlzdGF0aWMgRW1E bGdJdGVtSUQJCVBydkFza0NoYW5nZUxvZ2dpbmcJCQkodm9pZCk7CgkJc3RhdGljIHZvaWQJCQkJ UHJ2Q2hlY2tTZXR0aW5nCQkJCShFbURsZ0NvbnRleHQmCQkJCWNvbnRleHQsCgkJCQkJCQkJCQkJ CQkJCSBFbUVycm9ySGFuZGxpbmdNZW51QnVuZGxlJgltZW51KTsKCQlzdGF0aWMgQm9vbAkJCQlQ cnZDaGVja1NldHRpbmdzCQkJKEVtRGxnQ29udGV4dCYgY29udGV4dCk7CgkJc3RhdGljIHZvaWQJ CQkJUHJ2RW5hYmxlTG9nZ2luZ09wdGlvbgkJKEVtRXJyb3JIYW5kbGluZ01lbnVCdW5kbGUmIG1l bnUpOwoJCXN0YXRpYyB2b2lkCQkJCVBydkVuYWJsZUxvZ2dpbmdPcHRpb25zCQkodm9pZCk7CgoJ CSAKCgkJc3RhdGljIHZvaWQJCQkJUHJ2RWRpdEhvc3RGU09wdGlvbnNPSwkJKEVtRGxnQ29udGV4 dCYgY29udGV4dCk7CgoJCSAKCgkJc3RhdGljIHZvaWQJCQkJUHJ2RW5hYmxlQ29kZUJyZWFrcG9p bnRDb250cm9scwkoRW1EbGdDb250ZXh0JiBjb250ZXh0LCBib29sIGVuYWJsZSk7CgkJc3RhdGlj IHZvaWQJCQkJUHJ2RW5hYmxlRGF0YUJyZWFrcG9pbnRDb250cm9scwkoRW1EbGdDb250ZXh0JiBj b250ZXh0LCBib29sIGVuYWJsZSk7CgkJc3RhdGljIHZvaWQJCQkJUHJ2UmVmcmVzaENvZGVCcmVh a3BvaW50TGlzdAkoRW1EbGdDb250ZXh0JiBjb250ZXh0KTsKCQlzdGF0aWMgdm9pZAkJCQlQcnZH ZXRDb2RlQnJlYWtwb2ludHMJCShFbURsZ0NvbnRleHQmIGNvbnRleHQpOwoJCXN0YXRpYyB2b2lk CQkJCVBydlNldENvZGVCcmVha3BvaW50cwkJKEVtRGxnQ29udGV4dCYgY29udGV4dCk7CgoJCSAK CgoKCgoKCQkgCgoJCXN0YXRpYyB2b2lkCQkJCVBydkdybVVwZGF0ZUdyZW1saW5OdW1iZXIJKEVt RGxnQ29udGV4dCYgY29udGV4dCk7CgkJc3RhdGljIHZvaWQJCQkJUHJ2R3JtVXBkYXRlRXZlbnRO dW1iZXIJCShFbURsZ0NvbnRleHQmIGNvbnRleHQpOwoJCXN0YXRpYyB2b2lkCQkJCVBydkdybVVw ZGF0ZUVsYXBzZWRUaW1lCQkoRW1EbGdDb250ZXh0JiBjb250ZXh0KTsKCQlzdGF0aWMgdm9pZAkJ CQlQcnZHcm1VcGRhdGVBbGwJCQkJKEVtRGxnQ29udGV4dCYgY29udGV4dCk7CgoJCSAKCgkJc3Rh dGljIHZvaWQJCQkJUHJ2TWluVXBkYXRlUGFzc051bWJlcgkJKEVtRGxnQ29udGV4dCYgY29udGV4 dCk7CgkJc3RhdGljIHZvaWQJCQkJUHJ2TWluVXBkYXRlRXZlbnROdW1iZXIJCShFbURsZ0NvbnRl eHQmIGNvbnRleHQpOwoJCXN0YXRpYyB2b2lkCQkJCVBydk1pblVwZGF0ZUVsYXBzZWQJCQkoRW1E bGdDb250ZXh0JiBjb250ZXh0KTsKCQlzdGF0aWMgdm9pZAkJCQlQcnZNaW5VcGRhdGVSYW5nZQkJ CShFbURsZ0NvbnRleHQmIGNvbnRleHQpOwoJCXN0YXRpYyB2b2lkCQkJCVBydk1pblVwZGF0ZURp c2NhcmRlZAkJKEVtRGxnQ29udGV4dCYgY29udGV4dCk7CgkJc3RhdGljIHZvaWQJCQkJUHJ2TWlu VXBkYXRlUHJvZ3Jlc3MJCShFbURsZ0NvbnRleHQmIGNvbnRleHQpOwoJCXN0YXRpYyB2b2lkCQkJ CVBydk1pblVwZGF0ZUFsbAkJCQkoRW1EbGdDb250ZXh0JiBjb250ZXh0KTsKCglwdWJsaWM6CSAK CQlzdGF0aWMgdm9pZAkJCQlTZXREbGdCb3VuZHMJCQkJKEVtRGxnUmVmLCBjb25zdCBFbVJlY3Qm KTsKCQlzdGF0aWMgRW1SZWN0CQkJR2V0RGxnQm91bmRzCQkJCShFbURsZ1JlZik7CgkJc3RhdGlj IHZvaWQJCQkJTW92ZURsZ1RvCQkJCQkoRW1EbGdSZWYsIEVtQ29vcmQgeCwgRW1Db29yZCB5KTsK CQlzdGF0aWMgdm9pZAkJCQlNb3ZlRGxnVG8JCQkJCShFbURsZ1JlZiwgY29uc3QgRW1Qb2ludCYp OwoJCXN0YXRpYyB2b2lkCQkJCUNlbnRlckRsZwkJCQkJKEVtRGxnUmVmKTsKCQlzdGF0aWMgdm9p ZAkJCQlFbnN1cmVEbGdPbnNjcmVlbgkJCShFbURsZ1JlZik7CgoJCXN0YXRpYyB2b2lkCQkJCVNl dERsZ0RlZmF1bHRCdXR0b24JCQkoRW1EbGdDb250ZXh0JiwgRW1EbGdJdGVtSUQpOwoJCXN0YXRp YyB2b2lkCQkJCVNldERsZ0NhbmNlbEJ1dHRvbgkJCShFbURsZ0NvbnRleHQmLCBFbURsZ0l0ZW1J RCk7CgoJCXN0YXRpYyB2b2lkCQkJCVNldEl0ZW1NaW4JCQkJCShFbURsZ1JlZiwgRW1EbGdJdGVt SUQsIGxvbmcgbWF4KTsKCQlzdGF0aWMgdm9pZAkJCQlTZXRJdGVtVmFsdWUJCQkJKEVtRGxnUmVm LCBFbURsZ0l0ZW1JRCwgbG9uZyB2YWx1ZSk7CgkJc3RhdGljIHZvaWQJCQkJU2V0SXRlbU1heAkJ CQkJKEVtRGxnUmVmLCBFbURsZ0l0ZW1JRCwgbG9uZyBtYXgpOwoJCXN0YXRpYyB2b2lkCQkJCVNl dEl0ZW1Cb3VuZHMJCQkJKEVtRGxnUmVmLCBFbURsZ0l0ZW1JRCwgY29uc3QgRW1SZWN0Jik7CgoJ CXN0YXRpYyB2b2lkCQkJCVNldEl0ZW1UZXh0CQkJCQkoRW1EbGdSZWYsIEVtRGxnSXRlbUlELCBT dHJDb2RlKTsKCQlzdGF0aWMgdm9pZAkJCQlTZXRJdGVtVGV4dAkJCQkJKEVtRGxnUmVmLCBFbURs Z0l0ZW1JRCwgY29uc3QgY2hhciopOwoJCXN0YXRpYyB2b2lkCQkJCVNldEl0ZW1UZXh0CQkJCQko RW1EbGdSZWYsIEVtRGxnSXRlbUlELCBzdHJpbmcpOwoKCQlzdGF0aWMgbG9uZwkJCQlHZXRJdGVt TWluCQkJCQkoRW1EbGdSZWYsIEVtRGxnSXRlbUlEKTsKCQlzdGF0aWMgbG9uZwkJCQlHZXRJdGVt VmFsdWUJCQkJKEVtRGxnUmVmLCBFbURsZ0l0ZW1JRCk7CgkJc3RhdGljIGxvbmcJCQkJR2V0SXRl bU1heAkJCQkJKEVtRGxnUmVmLCBFbURsZ0l0ZW1JRCk7CgkJc3RhdGljIEVtUmVjdAkJCUdldEl0 ZW1Cb3VuZHMJCQkJKEVtRGxnUmVmLCBFbURsZ0l0ZW1JRCk7CgkJc3RhdGljIHN0cmluZwkJCUdl dEl0ZW1UZXh0CQkJCQkoRW1EbGdSZWYsIEVtRGxnSXRlbUlEKTsKCgkJc3RhdGljIHZvaWQJCQkJ RW5hYmxlSXRlbQkJCQkJKEVtRGxnUmVmLCBFbURsZ0l0ZW1JRCk7CgkJc3RhdGljIHZvaWQJCQkJ RGlzYWJsZUl0ZW0JCQkJCShFbURsZ1JlZiwgRW1EbGdJdGVtSUQpOwoJCXN0YXRpYyB2b2lkCQkJ CUVuYWJsZURpc2FibGVJdGVtCQkJKEVtRGxnUmVmLCBFbURsZ0l0ZW1JRCwgQm9vbCk7CgoJCXN0 YXRpYyB2b2lkCQkJCVNob3dJdGVtCQkJCQkoRW1EbGdSZWYsIEVtRGxnSXRlbUlEKTsKCQlzdGF0 aWMgdm9pZAkJCQlIaWRlSXRlbQkJCQkJKEVtRGxnUmVmLCBFbURsZ0l0ZW1JRCk7CgkJc3RhdGlj IHZvaWQJCQkJU2hvd0hpZGVJdGVtCQkJCShFbURsZ1JlZiwgRW1EbGdJdGVtSUQsIEJvb2wpOwoK CQlzdGF0aWMgdm9pZAkJCQlDbGVhck1lbnUJCQkJCShFbURsZ1JlZiwgRW1EbGdJdGVtSUQpOwoJ CXN0YXRpYyB2b2lkCQkJCUFwcGVuZFRvTWVudQkJCQkoRW1EbGdSZWYsIEVtRGxnSXRlbUlELCBj b25zdCBzdHJpbmcmKTsKCQlzdGF0aWMgdm9pZAkJCQlBcHBlbmRUb01lbnUJCQkJKEVtRGxnUmVm LCBFbURsZ0l0ZW1JRCwgY29uc3QgU3RyaW5nTGlzdCYpOwoJCXN0YXRpYyB2b2lkCQkJCUVuYWJs ZU1lbnVJdGVtCQkJCShFbURsZ1JlZiwgRW1EbGdJdGVtSUQsIGxvbmcpOwoJCXN0YXRpYyB2b2lk CQkJCURpc2FibGVNZW51SXRlbQkJCQkoRW1EbGdSZWYsIEVtRGxnSXRlbUlELCBsb25nKTsKCgkJ c3RhdGljIHZvaWQJCQkJQ2xlYXJMaXN0CQkJCQkoRW1EbGdSZWYsIEVtRGxnSXRlbUlEKTsKCQlz dGF0aWMgdm9pZAkJCQlBcHBlbmRUb0xpc3QJCQkJKEVtRGxnUmVmLCBFbURsZ0l0ZW1JRCwgY29u c3Qgc3RyaW5nJik7CgkJc3RhdGljIHZvaWQJCQkJQXBwZW5kVG9MaXN0CQkJCShFbURsZ1JlZiwg RW1EbGdJdGVtSUQsIGNvbnN0IFN0cmluZ0xpc3QmKTsKCQlzdGF0aWMgdm9pZAkJCQlTZWxlY3RM aXN0SXRlbQkJCQkoRW1EbGdSZWYsIEVtRGxnSXRlbUlELCBFbURsZ0xpc3RJbmRleCk7CgkJc3Rh dGljIHZvaWQJCQkJU2VsZWN0TGlzdEl0ZW1zCQkJCShFbURsZ1JlZiwgRW1EbGdJdGVtSUQsIGNv bnN0IEVtRGxnTGlzdEluZGV4TGlzdCYpOwoJCXN0YXRpYyB2b2lkCQkJCVVuc2VsZWN0TGlzdEl0 ZW0JCQkoRW1EbGdSZWYsIEVtRGxnSXRlbUlELCBFbURsZ0xpc3RJbmRleCk7CgkJc3RhdGljIHZv aWQJCQkJVW5zZWxlY3RMaXN0SXRlbXMJCQkoRW1EbGdSZWYsIEVtRGxnSXRlbUlELCBjb25zdCBF bURsZ0xpc3RJbmRleExpc3QmKTsKCQlzdGF0aWMgRW1EbGdMaXN0SW5kZXgJR2V0U2VsZWN0ZWRJ dGVtCQkJCShFbURsZ1JlZiwgRW1EbGdJdGVtSUQpOwoJCXN0YXRpYyB2b2lkCQkJCUdldFNlbGVj dGVkSXRlbXMJCQkoRW1EbGdSZWYsIEVtRGxnSXRlbUlELCBFbURsZ0xpc3RJbmRleExpc3QmKTsK CgkJc3RhdGljIGludAkJCQlHZXRUZXh0SGVpZ2h0CQkJCShFbURsZ1JlZiwgRW1EbGdJdGVtSUQs IGNvbnN0IHN0cmluZyYpOwoKCQlzdGF0aWMgQm9vbAkJCQlTdHJpbmdUb0xvbmcJCQkJKGNvbnN0 IGNoYXIqLCBsb25nKik7Cn07CgoKIyAyMSAiLi4vU3JjU2hhcmVkL0Vycm9ySGFuZGxpbmcuaCIg MgoKCgoKY2xhc3MgU2Vzc2lvbkZpbGU7CnN0cnVjdCBTeXN0ZW1DYWxsQ29udGV4dDsKCgogCiAK IAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCnR5cGVkZWYgdmVjdG9yPHN0cmluZz4JUGFy YW1MaXN0OwoKCiAKCmVudW0KewoJa1VubWFwcGVkQWRkcmVzcywKCWtOb3RJbkNvZGVTZWdtZW50 LAoJa09kZEFkZHJlc3MKfTsKCmNsYXNzIEVycm9ycwp7CglwdWJsaWM6CgkJc3RhdGljIHZvaWQJ CQkJSW5pdGlhbGl6ZQkJCSh2b2lkKTsKCQlzdGF0aWMgdm9pZAkJCQlSZXNldAkJCQkodm9pZCk7 CgkJc3RhdGljIHZvaWQJCQkJU2F2ZQkJCQkoU2Vzc2lvbkZpbGUmKTsKCQlzdGF0aWMgdm9pZAkJ CQlMb2FkCQkJCShTZXNzaW9uRmlsZSYpOwoJCXN0YXRpYyB2b2lkCQkJCURpc3Bvc2UJCQkJKHZv aWQpOwoKCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJ IAoKCQlzdGF0aWMgdm9pZAkJCQlSZXBvcnRJZkVycm9yCQkoU3RyQ29kZSBvcGVyYXRpb24sIEVy ckNvZGUgZXJyb3IsIFN0ckNvZGUgcmVjb3ZlcnkgPSAwLCBCb29sIHRocm93QWZ0ZXIgPSB0cnVl KTsKCQlzdGF0aWMgdm9pZAkJCQlSZXBvcnRJZlBhbG1FcnJvcgkoU3RyQ29kZSBvcGVyYXRpb24s IEVyciBlcnIsIFN0ckNvZGUgcmVjb3ZlcnkgPSAwLCBCb29sIHRocm93QWZ0ZXIgPSB0cnVlKTsK CQlzdGF0aWMgdm9pZAkJCQlSZXBvcnRJZk5VTEwJCShTdHJDb2RlIG9wZXJhdGlvbiwgdm9pZCog cCwgU3RyQ29kZSByZWNvdmVyeSA9IDAsIEJvb2wgdGhyb3dBZnRlciA9IHRydWUpOwoKCgkJIAoJ CSAKCQkgCgoJCQkgCgoJCXN0YXRpYyB2b2lkCQkJCVJlcG9ydEVyckJ1c0Vycm9yCQkJKGVtdXB0 ciBhZGRyZXNzLCBsb25nIHNpemUsIEJvb2wgZm9yUmVhZCk7CgkJc3RhdGljIHZvaWQJCQkJUmVw b3J0RXJyQWRkcmVzc0Vycm9yCQkoZW11cHRyIGFkZHJlc3MsIGxvbmcgc2l6ZSwgQm9vbCBmb3JS ZWFkKTsKCQlzdGF0aWMgdm9pZAkJCQlSZXBvcnRFcnJJbGxlZ2FsSW5zdHJ1Y3Rpb24JKHVpbnQx NiBvcGNvZGUpOwoJCXN0YXRpYyB2b2lkCQkJCVJlcG9ydEVyckRpdmlkZUJ5WmVybwkJKHZvaWQp OwoJCXN0YXRpYyB2b2lkCQkJCVJlcG9ydEVyckNIS0luc3RydWN0aW9uCQkodm9pZCk7CgkJc3Rh dGljIHZvaWQJCQkJUmVwb3J0RXJyVFJBUFZJbnN0cnVjdGlvbgkodm9pZCk7CgkJc3RhdGljIHZv aWQJCQkJUmVwb3J0RXJyUHJpdmlsZWdlVmlvbGF0aW9uCSh1aW50MTYgb3Bjb2RlKTsKCQlzdGF0 aWMgdm9pZAkJCQlSZXBvcnRFcnJUcmFjZQkJCQkodm9pZCk7CgkJc3RhdGljIHZvaWQJCQkJUmVw b3J0RXJyQVRyYXAJCQkJKHVpbnQxNiBvcGNvZGUpOwoJCXN0YXRpYyB2b2lkCQkJCVJlcG9ydEVy ckZUcmFwCQkJCSh1aW50MTYgb3Bjb2RlKTsKCQlzdGF0aWMgdm9pZAkJCQlSZXBvcnRFcnJUUkFQ eAkJCQkoaW50IGV4Y2VwdGlvbk51bWJlcik7CgoJCQkgCgoJCXN0YXRpYyB2b2lkCQkJCVJlcG9y dEVyclN0b3JhZ2VIZWFwCQkoZW11cHRyIGFkZHJlc3MsIGxvbmcgc2l6ZSwgQm9vbCBmb3JSZWFk KTsKCQlzdGF0aWMgdm9pZAkJCQlSZXBvcnRFcnJOb0RyYXdXaW5kb3cJCShlbXVwdHIgYWRkcmVz cywgbG9uZyBzaXplLCBCb29sIGZvclJlYWQpOwoJCXN0YXRpYyB2b2lkCQkJCVJlcG9ydEVyck5v R2xvYmFscwkJCShlbXVwdHIgYWRkcmVzcywgbG9uZyBzaXplLCBCb29sIGZvclJlYWQpOwoJCXN0 YXRpYyB2b2lkCQkJCVJlcG9ydEVyclNBTkUJCQkJKHZvaWQpOwoJCXN0YXRpYyB2b2lkCQkJCVJl cG9ydEVyclRSQVAwCQkJCSh2b2lkKTsKCQlzdGF0aWMgdm9pZAkJCQlSZXBvcnRFcnJUUkFQOAkJ CQkodm9pZCk7CgoJCQkgCgoJCXN0YXRpYyB2b2lkCQkJCVJlcG9ydEVyclN0YWNrT3ZlcmZsb3cJ CSh2b2lkKTsKCQlzdGF0aWMgdm9pZAkJCQlSZXBvcnRFcnJVbmltcGxlbWVudGVkVHJhcAkoY29u c3QgU3lzdGVtQ2FsbENvbnRleHQmKTsKCQlzdGF0aWMgdm9pZAkJCQlSZXBvcnRFcnJJbnZhbGlk UmVmTnVtCQkoY29uc3QgU3lzdGVtQ2FsbENvbnRleHQmKTsKCQlzdGF0aWMgdm9pZAkJCQlSZXBv cnRFcnJDb3JydXB0ZWRIZWFwCQkoRXJyQ29kZSwgZW11cHRyKTsKCQlzdGF0aWMgdm9pZAkJCQlS ZXBvcnRFcnJJbnZhbGlkUEMJCQkoZW11cHRyIGFkZHJlc3MsIGludCByZWFzb24pOwoKCQkJIAoK CQlzdGF0aWMgdm9pZAkJCQlSZXBvcnRFcnJMb3dNZW1vcnkJCQkoZW11cHRyIGFkZHJlc3MsIGxv bmcgc2l6ZSwgQm9vbCBmb3JSZWFkKTsKCQlzdGF0aWMgdm9pZAkJCQlSZXBvcnRFcnJTeXN0ZW1H bG9iYWxzCQkoZW11cHRyIGFkZHJlc3MsIGxvbmcgc2l6ZSwgQm9vbCBmb3JSZWFkKTsKCQlzdGF0 aWMgdm9pZAkJCQlSZXBvcnRFcnJTY3JlZW4JCQkJKGVtdXB0ciBhZGRyZXNzLCBsb25nIHNpemUs IEJvb2wgZm9yUmVhZCk7CgkJc3RhdGljIHZvaWQJCQkJUmVwb3J0RXJySGFyZHdhcmVSZWdpc3Rl cnMJKGVtdXB0ciBhZGRyZXNzLCBsb25nIHNpemUsIEJvb2wgZm9yUmVhZCk7CgkJc3RhdGljIHZv aWQJCQkJUmVwb3J0RXJyUk9NCQkJCShlbXVwdHIgYWRkcmVzcywgbG9uZyBzaXplLCBCb29sIGZv clJlYWQpOwoJCXN0YXRpYyB2b2lkCQkJCVJlcG9ydEVyck1lbU1nclN0cnVjdHVyZXMJKGVtdXB0 ciBhZGRyZXNzLCBsb25nIHNpemUsIEJvb2wgZm9yUmVhZCk7CgkJc3RhdGljIHZvaWQJCQkJUmVw b3J0RXJyTWVtTWdyTGVha3MJCShpbnQgbGVha3MpOwoJCXN0YXRpYyB2b2lkCQkJCVJlcG9ydEVy ck1lbU1nclNlbWFwaG9yZQkodm9pZCk7CgkJc3RhdGljIHZvaWQJCQkJUmVwb3J0RXJyRnJlZUNo dW5rCQkJKGVtdXB0ciBhZGRyZXNzLCBsb25nIHNpemUsIEJvb2wgZm9yUmVhZCk7CgkJc3RhdGlj IHZvaWQJCQkJUmVwb3J0RXJyVW5sb2NrZWRDaHVuawkJKGVtdXB0ciBhZGRyZXNzLCBsb25nIHNp emUsIEJvb2wgZm9yUmVhZCk7CgkJc3RhdGljIHZvaWQJCQkJUmVwb3J0RXJyTG93U3RhY2sJCQko ZW11cHRyIHN0YWNrTG93LCBlbXVwdHIgc3RhY2tQb2ludGVyLCBlbXVwdHIgc3RhY2tIaWdoLCBl bXVwdHIgYWRkcmVzcywgbG9uZyBzaXplLCBCb29sIGZvclJlYWQpOwoJCXN0YXRpYyB2b2lkCQkJ CVJlcG9ydEVyclN0YWNrRnVsbAkJCSh2b2lkKTsKCQlzdGF0aWMgdm9pZAkJCQlSZXBvcnRFcnJT aXplbGVzc09iamVjdAkJKHVpbnQxNiBpZCwgY29uc3QgRW1SZWN0Jik7CgkJc3RhdGljIHZvaWQJ CQkJUmVwb3J0RXJyT2Zmc2NyZWVuT2JqZWN0CSh1aW50MTYgaWQsIGNvbnN0IEVtUmVjdCYpOwoJ CXN0YXRpYyB2b2lkCQkJCVJlcG9ydEVyckZvcm1BY2Nlc3MJCQkoZW11cHRyIGZvcm1BZGRyZXNz LCBlbXVwdHIgYWRkcmVzcywgbG9uZyBzaXplLCBCb29sIGZvclJlYWQpOwoJCXN0YXRpYyB2b2lk CQkJCVJlcG9ydEVyckZvcm1PYmplY3RBY2Nlc3MJKGVtdXB0ciBvYmplY3RBZGRyZXNzLCBlbXVw dHIgZm9ybUFkZHJlc3MsIGVtdXB0ciBhZGRyZXNzLCBsb25nIHNpemUsIEJvb2wgZm9yUmVhZCk7 CgkJc3RhdGljIHZvaWQJCQkJUmVwb3J0RXJyV2luZG93QWNjZXNzCQkoZW11cHRyIHdpbmRvd0Fk ZHJlc3MsIGVtdXB0ciBhZGRyZXNzLCBsb25nIHNpemUsIEJvb2wgZm9yUmVhZCk7CgkJc3RhdGlj IHZvaWQJCQkJUmVwb3J0RXJyQml0bWFwQWNjZXNzCQkoZW11cHRyIGJpdG1hcEFkZHJlc3MsIGVt dXB0ciBhZGRyZXNzLCBsb25nIHNpemUsIEJvb2wgZm9yUmVhZCk7CgkJc3RhdGljIHZvaWQJCQkJ UmVwb3J0RXJyUHJvc2NyaWJlZEZ1bmN0aW9uCShjb25zdCBTeXN0ZW1DYWxsQ29udGV4dCYpOwoJ CXN0YXRpYyB2b2lkCQkJCVJlcG9ydEVyclN0ZXBTcHkJCQkoZW11cHRyIHdyaXRlQWRkcmVzcywg aW50IHdyaXRlQnl0ZXMsIGVtdXB0ciBzc0FkZHJlc3MsIHVpbnQzMiBzc1ZhbHVlLCB1aW50MzIg bmV3VmFsdWUpOwoJCXN0YXRpYyB2b2lkCQkJCVJlcG9ydEVycldhdGNocG9pbnQJCQkoZW11cHRy IHdyaXRlQWRkcmVzcywgaW50IHdyaXRlQnl0ZXMsIGVtdXB0ciB3YXRjaEFkZHJlc3MsIHVpbnQz MiB3YXRjaEJ5dGVzKTsKCgkJCSAKCgkJc3RhdGljIHZvaWQJCQkJUmVwb3J0RXJyU3lzRmF0YWxB bGVydAkJKGNvbnN0IGNoYXIqIGFwcE1zZyk7CgkJc3RhdGljIHZvaWQJCQkJUmVwb3J0RXJyRGJn TWVzc2FnZQkJCShjb25zdCBjaGFyKiBhcHBNc2cpOwoKCQkJIAoKCQlzdGF0aWMgdm9pZAkJCQlS ZXBvcnRFcnJBY2Nlc3NDb21tb24JCShTdHJDb2RlLCBFeGNlcHRpb25OdW1iZXIsIGludCBmbGFn cywgZW11cHRyIGFkZHJlc3MsIGxvbmcgc2l6ZSwgQm9vbCBmb3JSZWFkKTsKCQlzdGF0aWMgdm9p ZAkJCQlSZXBvcnRFcnJPYmplY3RDb21tb24JCShTdHJDb2RlLCBFeGNlcHRpb25OdW1iZXIsIGlu dCBmbGFncywgdWludDE2IGlkLCBjb25zdCBFbVJlY3QmKTsKCQlzdGF0aWMgdm9pZAkJCQlSZXBv cnRFcnJPcGNvZGVDb21tb24JCShTdHJDb2RlLCBFeGNlcHRpb25OdW1iZXIsIGludCBmbGFncywg dWludDE2IG9wY29kZSk7CgkJc3RhdGljIHZvaWQJCQkJUmVwb3J0RXJyU3RhY2tDb21tb24JCShT dHJDb2RlLCBFeGNlcHRpb25OdW1iZXIsIGludCBmbGFncyk7CgkJc3RhdGljIHZvaWQJCQkJUmVw b3J0RXJyQ29tbW9uCQkJCShTdHJDb2RlLCBFeGNlcHRpb25OdW1iZXIsIGludCBmbGFncyk7CgkJ c3RhdGljIEVtRGxnSXRlbUlECQlSZXBvcnRFcnJDb21tUG9ydAkJCShzdHJpbmcpOwoJCXN0YXRp YyBFbURsZ0l0ZW1JRAkJUmVwb3J0RXJyU29ja2V0cwkJCShzdHJpbmcpOwoKCQllbnVtCgkJewoJ CQlrRmF0YWwgPSAweDAxLAoJCQlrRW50ZXJEZWJ1Z2dlckZpcnN0ID0gMHgwMgoJCX07CgoJCWVu dW0gRUFjY2Vzc1R5cGUKCQl7CgkJCWtPS0FjY2VzcywKCgkJCWtMb3dNZW1BY2Nlc3MsCgkJCWtH bG9iYWxWYXJBY2Nlc3MsCgkJCWtTY3JlZW5BY2Nlc3MsCgkJCWtNZW1NZ3JBY2Nlc3MsCgkJCWtM b3dTdGFja0FjY2VzcywKCQkJa0ZyZWVDaHVua0FjY2VzcywKCQkJa1VubG9ja2VkQ2h1bmtBY2Nl c3MsCgoJCQlrVW5rbm93bkFjY2VzcwoJCX07CgoKCQkgCgkJIAoJCSAKCgkJc3RhdGljIHZvaWQJ CQkJU2V0UGFyYW1ldGVyCQkoY29uc3Qgc3RyaW5nJiBrZXksIGNvbnN0IHN0cmluZyYgdmFsdWUp OwoJCXN0YXRpYyB2b2lkCQkJCVNldFBhcmFtZXRlcgkJKGNvbnN0IHN0cmluZyYga2V5LCBjb25z dCBjaGFyKiB2YWx1ZSk7CgkJc3RhdGljIHZvaWQJCQkJU2V0UGFyYW1ldGVyCQkoY29uc3Qgc3Ry aW5nJiBrZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHZhbHVlKTsKCQlzdGF0aWMgdm9pZAkJCQlT ZXRQYXJhbWV0ZXIJCShjb25zdCBzdHJpbmcmIGtleSwgbG9uZyk7CgkJc3RhdGljIHZvaWQJCQkJ Q2xlYXJQYXJhbWV0ZXIJCShjb25zdCBzdHJpbmcmIGtleSk7CgkJc3RhdGljIHZvaWQJCQkJQ2xl YXJBbGxQYXJhbWV0ZXJzCSh2b2lkKTsKCQlzdGF0aWMgQm9vbAkJCQlTZXRFcnJvclBhcmFtZXRl cnMJKFN0ckNvZGUgb3BlcmF0aW9uLCBFcnJDb2RlIGVycm9yLCBTdHJDb2RlIHJlY292ZXJ5KTsK CQlzdGF0aWMgdm9pZAkJCQlTZXRTdGFuZGFyZFBhcmFtZXRlcnMJKHZvaWQpOwoKCQkgCgkJIAoK CQlzdGF0aWMgdm9pZAkJCQlIYW5kbGVEaWFsb2cJCShTdHJDb2RlIG1lc3NhZ2VJRCwKCQkJCQkJ CQkJCQkJCSBFeGNlcHRpb25OdW1iZXIgZXhjTnVtLAoJCQkJCQkJCQkJCQkJIEVtQ29tbW9uRGlh bG9nRmxhZ3MgZmxhZ3MsCgkJCQkJCQkJCQkJCQkgQm9vbCBlbnRlckRlYnVnZ2VyRmlyc3QpOwoK CQkgCgkJIAoKCQlzdGF0aWMgRW1EbGdJdGVtSUQJCURvRGlhbG9nCQkJKFN0ckNvZGUgbWVzc2Fn ZUlELCBFbUNvbW1vbkRpYWxvZ0ZsYWdzKTsKCQlzdGF0aWMgRW1EbGdJdGVtSUQJCURvRGlhbG9n CQkJKGNvbnN0IGNoYXIqIG1zZywgRW1Db21tb25EaWFsb2dGbGFncywgU3RyQ29kZSBtZXNzYWdl SUQgPSAtMSk7CgoKCQkgCgkJIAoKCQlzdGF0aWMgc3RyaW5nCQkJUmVwbGFjZVBhcmFtZXRlcnMJ KFN0ckNvZGUgdGVtcGxhdGVJRCk7CgkJc3RhdGljIHN0cmluZwkJCVJlcGxhY2VQYXJhbWV0ZXJz CShTdHJDb2RlIHRlbXBsYXRlSUQsIFBhcmFtTGlzdCYgcGFyYW1zKTsKCQlzdGF0aWMgc3RyaW5n CQkJUmVwbGFjZVBhcmFtZXRlcnMJKGNvbnN0IHN0cmluZyYsIFBhcmFtTGlzdCYgcGFyYW1zKTsK CgoJCSAKCgkJc3RhdGljIGludAkJCQlHZXRJREZvckVycm9yCQkoRXJyQ29kZSBlcnJvcik7CgkJ c3RhdGljIGludAkJCQlHZXRJREZvclJlY292ZXJ5CShFcnJDb2RlIGVycm9yKTsKCgoJCSAKCgkJ c3RhdGljIHZvaWQJCQkJR2V0QXBwTmFtZQkJCShzdHJpbmcmIGFwcE5hbWVVQywKCQkJCQkJCQkJ CQkJCSBzdHJpbmcmIGFwcE5hbWVMQyk7CgkJc3RhdGljIHZvaWQJCQkJR2V0QXBwVmVyc2lvbgkJ KHN0cmluZyYgYXBwVmVyc2lvbik7CgoJCXN0YXRpYyBCb29sCQkJCUxvb2tzTGlrZUE1QWNjZXNz CShlbXVwdHIgYWRkcmVzcywgbG9uZyBzaXplLCBCb29sIGZvclJlYWQpOwoKCgkJIAoJCSAKCgkJ c3RhdGljIHZvaWQJCQkJVGhyb3cJCQkJKEVyckNvZGUgZXJyb3IpOwoJCXN0YXRpYyB2b2lkCQkJ CVRocm93SWZFcnJvcgkJKEVyckNvZGUgZXJyb3IpOwoJCXN0YXRpYyB2b2lkCQkJCVRocm93SWZQ YWxtRXJyb3IJKEVyciBlcnJvcik7CgkJc3RhdGljIHZvaWQJCQkJVGhyb3dJZlN0ZENFcnJvcgko aW50IGVycm9yKTsKCQlzdGF0aWMgdm9pZAkJCQlUaHJvd0lmTlVMTAkJCSh2b2lkKik7CgoJCSAK CQkgCgkJIAoKCQlzdGF0aWMgdm9pZAkJCQlTY3JhbQkJCQkodm9pZCk7Cn07CgpjbGFzcyBFbURl ZmVycmVkRXJyCnsKCXB1YmxpYzoKCQkJCQkJCQlFbURlZmVycmVkRXJyCQkJCQkodm9pZCk7CgkJ dmlydHVhbAkJCQkJfkVtRGVmZXJyZWRFcnIJCQkJCSh2b2lkKTsKCgkJdmlydHVhbCB2b2lkCQkJ RG8JCQkJCQkJCSh2b2lkKSA9IDA7Cn07CgpjbGFzcyBFbURlZmVycmVkRXJyQWNjZXNzQ29tbW9u IDogcHVibGljIEVtRGVmZXJyZWRFcnIKewoJcHVibGljOgoJCQkJCQkJCUVtRGVmZXJyZWRFcnJB Y2Nlc3NDb21tb24JCShlbXVwdHIgYWRkcmVzcywgbG9uZyBzaXplLCBCb29sIGZvclJlYWQpOwoJ CXZpcnR1YWwJCQkJCX5FbURlZmVycmVkRXJyQWNjZXNzQ29tbW9uCQkodm9pZCk7CgoJcHJvdGVj dGVkOgoJCWVtdXB0cgkJCQkJZkFkZHJlc3M7CgkJbG9uZwkJCQkJZlNpemU7CgkJQm9vbAkJCQkJ ZkZvclJlYWQ7Cn07CgpjbGFzcyBFbURlZmVycmVkRXJyTG93TWVtb3J5IDogcHVibGljIEVtRGVm ZXJyZWRFcnJBY2Nlc3NDb21tb24KewoJcHVibGljOgoJCQkJCQkJCUVtRGVmZXJyZWRFcnJMb3dN ZW1vcnkJCQkoZW11cHRyIGFkZHJlc3MsIGxvbmcgc2l6ZSwgQm9vbCBmb3JSZWFkKTsKCQl2aXJ0 dWFsCQkJCQl+RW1EZWZlcnJlZEVyckxvd01lbW9yeQkJCSh2b2lkKTsKCgkJdmlydHVhbCB2b2lk CQkJRG8JCQkJCQkJCSh2b2lkKTsKfTsKCmNsYXNzIEVtRGVmZXJyZWRFcnJTeXN0ZW1HbG9iYWxz IDogcHVibGljIEVtRGVmZXJyZWRFcnJBY2Nlc3NDb21tb24KewoJcHVibGljOgoJCQkJCQkJCUVt RGVmZXJyZWRFcnJTeXN0ZW1HbG9iYWxzCQkoZW11cHRyIGFkZHJlc3MsIGxvbmcgc2l6ZSwgQm9v bCBmb3JSZWFkKTsKCQl2aXJ0dWFsCQkJCQl+RW1EZWZlcnJlZEVyclN5c3RlbUdsb2JhbHMJCSh2 b2lkKTsKCgkJdmlydHVhbCB2b2lkCQkJRG8JCQkJCQkJCSh2b2lkKTsKfTsKCmNsYXNzIEVtRGVm ZXJyZWRFcnJTY3JlZW4gOiBwdWJsaWMgRW1EZWZlcnJlZEVyckFjY2Vzc0NvbW1vbgp7CglwdWJs aWM6CgkJCQkJCQkJRW1EZWZlcnJlZEVyclNjcmVlbgkJCQkoZW11cHRyIGFkZHJlc3MsIGxvbmcg c2l6ZSwgQm9vbCBmb3JSZWFkKTsKCQl2aXJ0dWFsCQkJCQl+RW1EZWZlcnJlZEVyclNjcmVlbgkJ CSh2b2lkKTsKCgkJdmlydHVhbCB2b2lkCQkJRG8JCQkJCQkJCSh2b2lkKTsKfTsKCmNsYXNzIEVt RGVmZXJyZWRFcnJIYXJkd2FyZVJlZ2lzdGVycyA6IHB1YmxpYyBFbURlZmVycmVkRXJyQWNjZXNz Q29tbW9uCnsKCXB1YmxpYzoKCQkJCQkJCQlFbURlZmVycmVkRXJySGFyZHdhcmVSZWdpc3RlcnMJ KGVtdXB0ciBhZGRyZXNzLCBsb25nIHNpemUsIEJvb2wgZm9yUmVhZCk7CgkJdmlydHVhbAkJCQkJ fkVtRGVmZXJyZWRFcnJIYXJkd2FyZVJlZ2lzdGVycwkodm9pZCk7CgoJCXZpcnR1YWwgdm9pZAkJ CURvCQkJCQkJCQkodm9pZCk7Cn07CgpjbGFzcyBFbURlZmVycmVkRXJyUk9NIDogcHVibGljIEVt RGVmZXJyZWRFcnJBY2Nlc3NDb21tb24KewoJcHVibGljOgoJCQkJCQkJCUVtRGVmZXJyZWRFcnJS T00JCQkJKGVtdXB0ciBhZGRyZXNzLCBsb25nIHNpemUsIEJvb2wgZm9yUmVhZCk7CgkJdmlydHVh bAkJCQkJfkVtRGVmZXJyZWRFcnJST00JCQkJKHZvaWQpOwoKCQl2aXJ0dWFsIHZvaWQJCQlEbwkJ CQkJCQkJKHZvaWQpOwp9OwoKY2xhc3MgRW1EZWZlcnJlZEVyck1lbU1nclN0cnVjdHVyZXMgOiBw dWJsaWMgRW1EZWZlcnJlZEVyckFjY2Vzc0NvbW1vbgp7CglwdWJsaWM6CgkJCQkJCQkJRW1EZWZl cnJlZEVyck1lbU1nclN0cnVjdHVyZXMJKGVtdXB0ciBhZGRyZXNzLCBsb25nIHNpemUsIEJvb2wg Zm9yUmVhZCk7CgkJdmlydHVhbAkJCQkJfkVtRGVmZXJyZWRFcnJNZW1NZ3JTdHJ1Y3R1cmVzCSh2 b2lkKTsKCgkJdmlydHVhbCB2b2lkCQkJRG8JCQkJCQkJCSh2b2lkKTsKfTsKCmNsYXNzIEVtRGVm ZXJyZWRFcnJNZW1NZ3JTZW1hcGhvcmUgOiBwdWJsaWMgRW1EZWZlcnJlZEVycgp7CglwdWJsaWM6 CgkJCQkJCQkJRW1EZWZlcnJlZEVyck1lbU1nclNlbWFwaG9yZQkodm9pZCk7CgkJdmlydHVhbAkJ CQkJfkVtRGVmZXJyZWRFcnJNZW1NZ3JTZW1hcGhvcmUJKHZvaWQpOwoKCQl2aXJ0dWFsIHZvaWQJ CQlEbwkJCQkJCQkJKHZvaWQpOwp9OwoKY2xhc3MgRW1EZWZlcnJlZEVyckZyZWVDaHVuayA6IHB1 YmxpYyBFbURlZmVycmVkRXJyQWNjZXNzQ29tbW9uCnsKCXB1YmxpYzoKCQkJCQkJCQlFbURlZmVy cmVkRXJyRnJlZUNodW5rCQkJKGVtdXB0ciBhZGRyZXNzLCBsb25nIHNpemUsIEJvb2wgZm9yUmVh ZCk7CgkJdmlydHVhbAkJCQkJfkVtRGVmZXJyZWRFcnJGcmVlQ2h1bmsJCQkodm9pZCk7CgoJCXZp cnR1YWwgdm9pZAkJCURvCQkJCQkJCQkodm9pZCk7Cn07CgpjbGFzcyBFbURlZmVycmVkRXJyVW5s b2NrZWRDaHVuayA6IHB1YmxpYyBFbURlZmVycmVkRXJyQWNjZXNzQ29tbW9uCnsKCXB1YmxpYzoK CQkJCQkJCQlFbURlZmVycmVkRXJyVW5sb2NrZWRDaHVuawkJKGVtdXB0ciBhZGRyZXNzLCBsb25n IHNpemUsIEJvb2wgZm9yUmVhZCk7CgkJdmlydHVhbAkJCQkJfkVtRGVmZXJyZWRFcnJVbmxvY2tl ZENodW5rCQkodm9pZCk7CgoJCXZpcnR1YWwgdm9pZAkJCURvCQkJCQkJCQkodm9pZCk7Cn07Cgpj bGFzcyBFbURlZmVycmVkRXJyTG93U3RhY2sgOiBwdWJsaWMgRW1EZWZlcnJlZEVyckFjY2Vzc0Nv bW1vbgp7CglwdWJsaWM6CgkJCQkJCQkJRW1EZWZlcnJlZEVyckxvd1N0YWNrCQkJKGVtdXB0ciBz dGFja0xvdywgZW11cHRyIHN0YWNrUG9pbnRlciwgZW11cHRyIHN0YWNrSGlnaCwgZW11cHRyIGFk ZHJlc3MsIGxvbmcgc2l6ZSwgQm9vbCBmb3JSZWFkKTsKCQl2aXJ0dWFsCQkJCQl+RW1EZWZlcnJl ZEVyckxvd1N0YWNrCQkJKHZvaWQpOwoKCQl2aXJ0dWFsIHZvaWQJCQlEbwkJCQkJCQkJKHZvaWQp OwoKCXByaXZhdGU6CgkJZW11cHRyCQkJCQlmU3RhY2tMb3c7CgkJZW11cHRyCQkJCQlmU3RhY2tQ b2ludGVyOwoJCWVtdXB0cgkJCQkJZlN0YWNrSGlnaDsKfTsKCmNsYXNzIEVtRGVmZXJyZWRFcnJT dGFja0Z1bGwgOiBwdWJsaWMgRW1EZWZlcnJlZEVycgp7CglwdWJsaWM6CgkJCQkJCQkJRW1EZWZl cnJlZEVyclN0YWNrRnVsbAkJCSh2b2lkKTsKCQl2aXJ0dWFsCQkJCQl+RW1EZWZlcnJlZEVyclN0 YWNrRnVsbAkJCSh2b2lkKTsKCgkJdmlydHVhbCB2b2lkCQkJRG8JCQkJCQkJCSh2b2lkKTsKfTsK CmNsYXNzIEVtRGVmZXJyZWRFcnJPYmplY3RDb21tb24gOiBwdWJsaWMgRW1EZWZlcnJlZEVycgp7 CglwdWJsaWM6CgkJCQkJCQkJRW1EZWZlcnJlZEVyck9iamVjdENvbW1vbgkJKHVpbnQxNiBpZCwg Y29uc3QgRW1SZWN0Jik7CgkJdmlydHVhbAkJCQkJfkVtRGVmZXJyZWRFcnJPYmplY3RDb21tb24J CSh2b2lkKTsKCglwcm90ZWN0ZWQ6CgkJdWludDE2CQkJCQlmSUQ7CgkJRW1SZWN0CQkJCQlmUmVj dDsKfTsKCmNsYXNzIEVtRGVmZXJyZWRFcnJTaXplbGVzc09iamVjdCA6IHB1YmxpYyBFbURlZmVy cmVkRXJyT2JqZWN0Q29tbW9uCnsKCXB1YmxpYzoKCQkJCQkJCQlFbURlZmVycmVkRXJyU2l6ZWxl c3NPYmplY3QJCSh1aW50MTYgaWQsIGNvbnN0IEVtUmVjdCYpOwoJCXZpcnR1YWwJCQkJCX5FbURl ZmVycmVkRXJyU2l6ZWxlc3NPYmplY3QJKHZvaWQpOwoKCQl2aXJ0dWFsIHZvaWQJCQlEbwkJCQkJ CQkJKHZvaWQpOwp9OwoKY2xhc3MgRW1EZWZlcnJlZEVyck9mZnNjcmVlbk9iamVjdCA6IHB1Ymxp YyBFbURlZmVycmVkRXJyT2JqZWN0Q29tbW9uCnsKCXB1YmxpYzoKCQkJCQkJCQlFbURlZmVycmVk RXJyT2Zmc2NyZWVuT2JqZWN0CSh1aW50MTYgaWQsIGNvbnN0IEVtUmVjdCYpOwoJCXZpcnR1YWwJ CQkJCX5FbURlZmVycmVkRXJyT2Zmc2NyZWVuT2JqZWN0CSh2b2lkKTsKCgkJdmlydHVhbCB2b2lk CQkJRG8JCQkJCQkJCSh2b2lkKTsKfTsKCmNsYXNzIEVtRGVmZXJyZWRFcnJGb3JtQWNjZXNzIDog cHVibGljIEVtRGVmZXJyZWRFcnJBY2Nlc3NDb21tb24KewoJcHVibGljOgoJCQkJCQkJCUVtRGVm ZXJyZWRFcnJGb3JtQWNjZXNzCQkJKGVtdXB0ciBmb3JtQWRkcmVzcywKCQkJCQkJCQkJCQkJCQkJ CSBlbXVwdHIgYWRkcmVzcywKCQkJCQkJCQkJCQkJCQkJCSBsb25nIHNpemUsCgkJCQkJCQkJCQkJ CQkJCQkgQm9vbCBmb3JSZWFkKTsKCQl2aXJ0dWFsCQkJCQl+RW1EZWZlcnJlZEVyckZvcm1BY2Nl c3MJCSh2b2lkKTsKCgkJdmlydHVhbCB2b2lkCQkJRG8JCQkJCQkJCSh2b2lkKTsKCglwcm90ZWN0 ZWQ6CgkJZW11cHRyCQkJCQlmRm9ybUFkZHJlc3M7Cn07CgpjbGFzcyBFbURlZmVycmVkRXJyRm9y bU9iamVjdEFjY2VzcyA6IHB1YmxpYyBFbURlZmVycmVkRXJyQWNjZXNzQ29tbW9uCnsKCXB1Ymxp YzoKCQkJCQkJCQlFbURlZmVycmVkRXJyRm9ybU9iamVjdEFjY2VzcwkoZW11cHRyIG9iamVjdEFk ZHJlc3MsCgkJCQkJCQkJCQkJCQkJCQkgZW11cHRyIGZvcm1BZGRyZXNzLAoJCQkJCQkJCQkJCQkJ CQkJIGVtdXB0ciBhZGRyZXNzLAoJCQkJCQkJCQkJCQkJCQkJIGxvbmcgc2l6ZSwKCQkJCQkJCQkJ CQkJCQkJCSBCb29sIGZvclJlYWQpOwoJCXZpcnR1YWwJCQkJCX5FbURlZmVycmVkRXJyRm9ybU9i amVjdEFjY2Vzcwkodm9pZCk7CgoJCXZpcnR1YWwgdm9pZAkJCURvCQkJCQkJCQkodm9pZCk7CgoJ cHJvdGVjdGVkOgoJCWVtdXB0cgkJCQkJZk9iamVjdEFkZHJlc3M7CgkJZW11cHRyCQkJCQlmRm9y bUFkZHJlc3M7Cn07CgpjbGFzcyBFbURlZmVycmVkRXJyV2luZG93QWNjZXNzIDogcHVibGljIEVt RGVmZXJyZWRFcnJBY2Nlc3NDb21tb24KewoJcHVibGljOgoJCQkJCQkJCUVtRGVmZXJyZWRFcnJX aW5kb3dBY2Nlc3MJCShlbXVwdHIgd2luZG93QWRkcmVzcywKCQkJCQkJCQkJCQkJCQkJCSBlbXVw dHIgYWRkcmVzcywKCQkJCQkJCQkJCQkJCQkJCSBsb25nIHNpemUsCgkJCQkJCQkJCQkJCQkJCQkg Qm9vbCBmb3JSZWFkKTsKCQl2aXJ0dWFsCQkJCQl+RW1EZWZlcnJlZEVycldpbmRvd0FjY2VzcwkJ KHZvaWQpOwoKCQl2aXJ0dWFsIHZvaWQJCQlEbwkJCQkJCQkJKHZvaWQpOwoKCQllbXVwdHIJCQkJ CWZXaW5kb3dBZGRyZXNzOwp9OwoKY2xhc3MgRW1EZWZlcnJlZEVyckJpdG1hcEFjY2VzcyA6IHB1 YmxpYyBFbURlZmVycmVkRXJyQWNjZXNzQ29tbW9uCnsKCXB1YmxpYzoKCQkJCQkJCQlFbURlZmVy cmVkRXJyQml0bWFwQWNjZXNzCQkoZW11cHRyIGJpdG1hcEFkZHJlc3MsCgkJCQkJCQkJCQkJCQkJ CQkgZW11cHRyIGFkZHJlc3MsCgkJCQkJCQkJCQkJCQkJCQkgbG9uZyBzaXplLAoJCQkJCQkJCQkJ CQkJCQkJIEJvb2wgZm9yUmVhZCk7CgkJdmlydHVhbAkJCQkJfkVtRGVmZXJyZWRFcnJCaXRtYXBB Y2Nlc3MJCSh2b2lkKTsKCgkJdmlydHVhbCB2b2lkCQkJRG8JCQkJCQkJCSh2b2lkKTsKCgkJZW11 cHRyCQkJCQlmQml0bWFwQWRkcmVzczsKfTsKCmNsYXNzIEVtRGVmZXJyZWRFcnJQcm9zY3JpYmVk RnVuY3Rpb24gOiBwdWJsaWMgRW1EZWZlcnJlZEVycgp7CglwdWJsaWM6CgkJCQkJCQkJRW1EZWZl cnJlZEVyclByb3NjcmliZWRGdW5jdGlvbgkoY29uc3QgU3lzdGVtQ2FsbENvbnRleHQmKTsKCQl2 aXJ0dWFsCQkJCQl+RW1EZWZlcnJlZEVyclByb3NjcmliZWRGdW5jdGlvbih2b2lkKTsKCgkJdmly dHVhbCB2b2lkCQkJRG8JCQkJCQkJCSh2b2lkKTsKCgkJU3lzdGVtQ2FsbENvbnRleHQJCWZDb250 ZXh0Owp9OwoKY2xhc3MgRW1EZWZlcnJlZEVyclN0ZXBTcHkgOiBwdWJsaWMgRW1EZWZlcnJlZEVy cgp7CglwdWJsaWM6CgkJCQkJCQkJRW1EZWZlcnJlZEVyclN0ZXBTcHkJCQkoZW11cHRyIHdyaXRl QWRkcmVzcywKCQkJCQkJCQkJCQkJCQkJCSBpbnQgd3JpdGVCeXRlcywKCQkJCQkJCQkJCQkJCQkJ CSBlbXVwdHIgc3NBZGRyZXNzLAoJCQkJCQkJCQkJCQkJCQkJIHVpbnQzMiBzc1ZhbHVlLAoJCQkJ CQkJCQkJCQkJCQkJIHVpbnQzMiBuZXdWYWx1ZSk7CgkJdmlydHVhbAkJCQkJfkVtRGVmZXJyZWRF cnJTdGVwU3B5CQkJKHZvaWQpOwoKCQl2aXJ0dWFsIHZvaWQJCQlEbwkJCQkJCQkJKHZvaWQpOwoK CXByb3RlY3RlZDoKCQllbXVwdHIJCQkJCWZXcml0ZUFkZHJlc3M7CgkJaW50CQkJCQkJZldyaXRl Qnl0ZXM7CgkJZW11cHRyCQkJCQlmU1NBZGRyZXNzOwoJCXVpbnQzMgkJCQkJZlNTVmFsdWU7CgkJ dWludDMyCQkJCQlmTmV3VmFsdWU7Cn07CgpjbGFzcyBFbURlZmVycmVkRXJyV2F0Y2hwb2ludCA6 IHB1YmxpYyBFbURlZmVycmVkRXJyCnsKCXB1YmxpYzoKCQkJCQkJCQlFbURlZmVycmVkRXJyV2F0 Y2hwb2ludAkJCShlbXVwdHIgd3JpdGVBZGRyZXNzLAoJCQkJCQkJCQkJCQkJCQkJIGludCB3cml0 ZUJ5dGVzLAoJCQkJCQkJCQkJCQkJCQkJIGVtdXB0ciB3YXRjaEFkZHJlc3MsCgkJCQkJCQkJCQkJ CQkJCQkgdWludDMyIHdhdGNoQnl0ZXMpOwoJCXZpcnR1YWwJCQkJCX5FbURlZmVycmVkRXJyV2F0 Y2hwb2ludAkJKHZvaWQpOwoKCQl2aXJ0dWFsIHZvaWQJCQlEbwkJCQkJCQkJKHZvaWQpOwoKCXBy b3RlY3RlZDoKCQllbXVwdHIJCQkJCWZXcml0ZUFkZHJlc3M7CgkJaW50CQkJCQkJZldyaXRlQnl0 ZXM7CgkJZW11cHRyCQkJCQlmV2F0Y2hBZGRyZXNzOwoJCXVpbnQzMgkJCQkJZldhdGNoQnl0ZXM7 Cn07CgoKCiMgMTkgIi4uL1NyY1NoYXJlZC9NZXRhTWVtb3J5LmgiIDIKCgoKY2xhc3MgTWV0YU1l bW9yeQp7CglwdWJsaWM6CgkJc3RhdGljIHZvaWQJCQkJSW5pdGlhbGl6ZQkJCQkodm9pZCk7CgkJ c3RhdGljIHZvaWQJCQkJUmVzZXQJCQkJCSh2b2lkKTsKCQlzdGF0aWMgdm9pZAkJCQlTYXZlCQkJ CQkoU2Vzc2lvbkZpbGUmKTsKCQlzdGF0aWMgdm9pZAkJCQlMb2FkCQkJCQkoU2Vzc2lvbkZpbGUm KTsKCQlzdGF0aWMgdm9pZAkJCQlEaXNwb3NlCQkJCQkodm9pZCk7CgoJCSAKCgkJc3RhdGljIHZv aWQJCQkJTWFya1RvdGFsQWNjZXNzCQkJKGVtdXB0ciBiZWdpbiwgZW11cHRyIGVuZCk7CgoJCXN0 YXRpYyB2b2lkCQkJCVNldEFjY2VzcwkJCQkoZW11cHRyIGJlZ2luLCBlbXVwdHIgZW5kLCB1aW50 OCBiaXRzKTsKCgkJc3RhdGljIHZvaWQJCQkJTWFya0xvd01lbW9yeQkJCShlbXVwdHIgYmVnaW4s IGVtdXB0ciBlbmQpOwoJCXN0YXRpYyB2b2lkCQkJCU1hcmtTeXN0ZW1HbG9iYWxzCQkoZW11cHRy IGJlZ2luLCBlbXVwdHIgZW5kKTsKCQlzdGF0aWMgdm9pZAkJCQlNYXJrSGVhcEhlYWRlcgkJCShl bXVwdHIgYmVnaW4sIGVtdXB0ciBlbmQpOwoJCXN0YXRpYyB2b2lkCQkJCU1hcmtNUFQJCQkJCShl bXVwdHIgYmVnaW4sIGVtdXB0ciBlbmQpOwoJCXN0YXRpYyB2b2lkCQkJCU1hcmtDaHVua0hlYWRl cgkJCShlbXVwdHIgYmVnaW4sIGVtdXB0ciBlbmQpOwoJCXN0YXRpYyB2b2lkCQkJCU1hcmtDaHVu a1RyYWlsZXIJCShlbXVwdHIgYmVnaW4sIGVtdXB0ciBlbmQpOwoJCXN0YXRpYyB2b2lkCQkJCU1h cmtMb3dTdGFjawkJCShlbXVwdHIgYmVnaW4sIGVtdXB0ciBlbmQpOwoJCXN0YXRpYyB2b2lkCQkJ CU1hcmtVbmxvY2tlZENodW5rCQkoZW11cHRyIGJlZ2luLCBlbXVwdHIgZW5kKTsKCQlzdGF0aWMg dm9pZAkJCQlNYXJrRnJlZUNodW5rCQkJKGVtdXB0ciBiZWdpbiwgZW11cHRyIGVuZCk7CgoJCXN0 YXRpYyB2b2lkCQkJCU1hcmtTY3JlZW4JCQkJKGVtdXB0ciBiZWdpbiwgZW11cHRyIGVuZCk7CgkJ c3RhdGljIHZvaWQJCQkJVW5tYXJrU2NyZWVuCQkJKGVtdXB0ciBiZWdpbiwgZW11cHRyIGVuZCk7 CgoJCXN0YXRpYyB2b2lkCQkJCU1hcmtVSU9iamVjdAkJCShlbXVwdHIgYmVnaW4sIGVtdXB0ciBl bmQpOwoJCXN0YXRpYyB2b2lkCQkJCVVubWFya1VJT2JqZWN0CQkJKGVtdXB0ciBiZWdpbiwgZW11 cHRyIGVuZCk7CgoJCXN0YXRpYyB2b2lkCQkJCU1hcmtVSU9iamVjdHMJCQkodm9pZCk7CgkJc3Rh dGljIHZvaWQJCQkJVW5tYXJrVUlPYmplY3RzCQkJKHZvaWQpOwoKCQlzdGF0aWMgdm9pZAkJCQlN YXJrSW5zdHJ1Y3Rpb25CcmVhawkoZW11cHRyIG9wY29kZUxvY2F0aW9uKTsKCQlzdGF0aWMgdm9p ZAkJCQlVbm1hcmtJbnN0cnVjdGlvbkJyZWFrCShlbXVwdHIgb3Bjb2RlTG9jYXRpb24pOwoKCQlz dGF0aWMgdm9pZAkJCQlNYXJrRGF0YUJyZWFrCQkJKGVtdXB0ciBiZWdpbiwgZW11cHRyIGVuZCk7 CgkJc3RhdGljIHZvaWQJCQkJVW5tYXJrRGF0YUJyZWFrCQkJKGVtdXB0ciBiZWdpbiwgZW11cHRy IGVuZCk7CgoJCSAKCgoKCgoKCgoKCgkJIAoKCQlzdGF0aWMgdm9pZAkJCQlSZXN5bmMJCQkJCShj b25zdCBFbVBhbG1DaHVua0xpc3QmKTsKCgkJIAoJCSAKCQkgCgkJIAoKCQlzdGF0aWMgQm9vbAkJ CQlDYW5BcHBHZXRMb25nCQkJKHVpbnQ4Kik7CSAKCQlzdGF0aWMgQm9vbAkJCQlDYW5BcHBHZXRX b3JkCQkJKHVpbnQ4Kik7CSAKCQlzdGF0aWMgQm9vbAkJCQlDYW5BcHBHZXRCeXRlCQkJKHVpbnQ4 Kik7CSAKCgkJc3RhdGljIEJvb2wJCQkJQ2FuQXBwU2V0TG9uZwkJCSh1aW50OCopOwkgCgkJc3Rh dGljIEJvb2wJCQkJQ2FuQXBwU2V0V29yZAkJCSh1aW50OCopOwkgCgkJc3RhdGljIEJvb2wJCQkJ Q2FuQXBwU2V0Qnl0ZQkJCSh1aW50OCopOwkgCgoJCSAKCQkgCgkJIAoKCQlzdGF0aWMgQm9vbAkJ CQlDYW5TeXN0ZW1HZXRMb25nCQkodWludDgqKTsJIAoJCXN0YXRpYyBCb29sCQkJCUNhblN5c3Rl bUdldFdvcmQJCSh1aW50OCopOwkgCgkJc3RhdGljIEJvb2wJCQkJQ2FuU3lzdGVtR2V0Qnl0ZQkJ KHVpbnQ4Kik7CSAKCgkJc3RhdGljIEJvb2wJCQkJQ2FuU3lzdGVtU2V0TG9uZwkJKHVpbnQ4Kik7 CSAKCQlzdGF0aWMgQm9vbAkJCQlDYW5TeXN0ZW1TZXRXb3JkCQkodWludDgqKTsJIAoJCXN0YXRp YyBCb29sCQkJCUNhblN5c3RlbVNldEJ5dGUJCSh1aW50OCopOwkgCgoJCSAKCQkgCgoJCXN0YXRp YyBCb29sCQkJCUNhbk1lbU1nckdldExvbmcJCSh1aW50OCopOwkgCgkJc3RhdGljIEJvb2wJCQkJ Q2FuTWVtTWdyR2V0V29yZAkJKHVpbnQ4Kik7CSAKCQlzdGF0aWMgQm9vbAkJCQlDYW5NZW1NZ3JH ZXRCeXRlCQkodWludDgqKTsJIAoKCQlzdGF0aWMgQm9vbAkJCQlDYW5NZW1NZ3JTZXRMb25nCQko dWludDgqKTsJIAoJCXN0YXRpYyBCb29sCQkJCUNhbk1lbU1nclNldFdvcmQJCSh1aW50OCopOwkg CgkJc3RhdGljIEJvb2wJCQkJQ2FuTWVtTWdyU2V0Qnl0ZQkJKHVpbnQ4Kik7CSAKCgkJc3RhdGlj IEVycm9yczo6RUFjY2Vzc1R5cGUKCQkJCQkJCQlHZXRXaGF0SGFwcGVuZWQJCQkoZW11cHRyIGFk ZHJlc3MsIGxvbmcgc2l6ZSwgQm9vbCBmb3JSZWFkKTsKCQlzdGF0aWMgRXJyb3JzOjpFQWNjZXNz VHlwZQoJCQkJCQkJCUFsbG93Rm9yQnVncwkJCShlbXVwdHIgYWRkcmVzcywgbG9uZyBzaXplLCBC b29sIGZvclJlYWQsIEVycm9yczo6RUFjY2Vzc1R5cGUpOwoJCXN0YXRpYyB2b2lkCQkJCUNoZWNr VUlPYmplY3RBY2Nlc3MJCShlbXVwdHIgYWRkcmVzcywgc2l6ZV90IHNpemUsIEJvb2wgZm9yUmVh ZCwKCQkJCQkJCQkJCQkJCQkgQm9vbCYgaXNJblVJT2JqZWN0LCBCb29sJiBidXRJdHNPSyk7CgkJ c3RhdGljIEJvb2wJCQkJSW5SQU1PU0NvbXBvbmVudAkJKGVtdXB0ciBwYyk7CgkJc3RhdGljIHZv aWQJCQkJQ2h1bmtVbmxvY2tlZAkJCShlbXVwdHIgYWRkcik7CgoJCXN0YXRpYyB2b2lkCQkJCVJl Z2lzdGVyQml0bWFwSGFuZGxlCShNZW1IYW5kbGUpOwoJCXN0YXRpYyB2b2lkCQkJCVJlZ2lzdGVy Qml0bWFwUG9pbnRlcgkoTWVtUHRyKTsKCQlzdGF0aWMgQm9vbAkJCQlJc0JpdG1hcEhhbmRsZQkJ CShNZW1IYW5kbGUpOwoJCXN0YXRpYyBCb29sCQkJCUlzQml0bWFwUG9pbnRlcgkJCShNZW1QdHIp OwoJCXN0YXRpYyB2b2lkCQkJCVVucmVnaXN0ZXJCaXRtYXBIYW5kbGUJKE1lbUhhbmRsZSk7CgkJ c3RhdGljIHZvaWQJCQkJVW5yZWdpc3RlckJpdG1hcFBvaW50ZXIJKE1lbVB0cik7CgoJCSAKCgkJ c3RhdGljIGVtdXB0cgkJCUdldExvd01lbW9yeUJlZ2luCQkodm9pZCk7CgkJc3RhdGljIGVtdXB0 cgkJCUdldExvd01lbW9yeUVuZAkJCSh2b2lkKTsKCQlzdGF0aWMgZW11cHRyCQkJR2V0U3lzR2xv YmFsc0JlZ2luCQkodm9pZCk7CgkJc3RhdGljIGVtdXB0cgkJCUdldFN5c0dsb2JhbHNFbmQJCSh2 b2lkKTsKCQlzdGF0aWMgZW11cHRyCQkJR2V0SGVhcEhkckJlZ2luCQkJKFVJbnQxNiBoZWFwSUQp OwoJCXN0YXRpYyBlbXVwdHIJCQlHZXRIZWFwSGRyRW5kCQkJKFVJbnQxNiBoZWFwSUQpOwoKCQkg CgkJIAoKCQlzdGF0aWMgQm9vbAkJCQlJc0xvd01lbW9yeQkJCQkoZW11cHRyIHRlc3RBZGRyZXNz LCB1aW50MzIgc2l6ZSk7CgkJc3RhdGljIEJvb2wJCQkJSXNTeXN0ZW1HbG9iYWwJCQkoZW11cHRy IHRlc3RBZGRyZXNzLCB1aW50MzIgc2l6ZSk7CgkJc3RhdGljIEJvb2wJCQkJSXNTY3JlZW5CdWZm ZXIJCQkoZW11cHRyIHRlc3RBZGRyZXNzLCB1aW50MzIgc2l6ZSk7CgkJc3RhdGljIEJvb2wJCQkJ SXNNZW1NZ3JEYXRhCQkJKGVtdXB0ciB0ZXN0QWRkcmVzcywgdWludDMyIHNpemUpOwoJCXN0YXRp YyBCb29sCQkJCUlzVW5sb2NrZWRDaHVuawkJCShlbXVwdHIgdGVzdEFkZHJlc3MsIHVpbnQzMiBz aXplKTsKCQlzdGF0aWMgQm9vbAkJCQlJc0ZyZWVDaHVuawkJCQkoZW11cHRyIHRlc3RBZGRyZXNz LCB1aW50MzIgc2l6ZSk7CgkJc3RhdGljIEJvb2wJCQkJSXNVbmluaXRpYWxpemVkCQkJKGVtdXB0 ciB0ZXN0QWRkcmVzcywgdWludDMyIHNpemUpOwoJCXN0YXRpYyBCb29sCQkJCUlzU3RhY2sJCQkJ CShlbXVwdHIgdGVzdEFkZHJlc3MsIHVpbnQzMiBzaXplKTsKCQlzdGF0aWMgQm9vbAkJCQlJc0xv d1N0YWNrCQkJCShlbXVwdHIgdGVzdEFkZHJlc3MsIHVpbnQzMiBzaXplKTsKCQlzdGF0aWMgQm9v bAkJCQlJc0FsbG9jYXRlZENodW5rCQkoZW11cHRyIHRlc3RBZGRyZXNzLCB1aW50MzIgc2l6ZSk7 CgoJCXN0YXRpYyBCb29sCQkJCUlzU2NyZWVuQnVmZmVyOAkJCSh1aW50OCogbWV0YUFkZHJlc3Mp OwkgCgkJc3RhdGljIEJvb2wJCQkJSXNTY3JlZW5CdWZmZXIxNgkJKHVpbnQ4KiBtZXRhQWRkcmVz cyk7CSAKCQlzdGF0aWMgQm9vbAkJCQlJc1NjcmVlbkJ1ZmZlcjMyCQkodWludDgqIG1ldGFBZGRy ZXNzKTsJIAoJCXN0YXRpYyBCb29sCQkJCUlzU2NyZWVuQnVmZmVyCQkJKHVpbnQ4KiBtZXRhQWRk cmVzcywgdWludDMyIHNpemUpOwoKCQlzdGF0aWMgQm9vbAkJCQlJc0NQVUJyZWFrCQkJCShlbXVw dHIgb3Bjb2RlTG9jYXRpb24pOwoJCXN0YXRpYyBCb29sCQkJCUlzQ1BVQnJlYWsJCQkJKHVpbnQ4 KiBtZXRhTG9jYXRpb24pOwoKCXByaXZhdGU6CgkJc3RydWN0IENodW5rQ2hlY2sKCQl7CgkJCWVt dXB0cgl0ZXN0QWRkcmVzczsKCQkJdWludDMyCXNpemU7CgkJCUJvb2wJcmVzdWx0OwoJCX07CgoJ CXN0cnVjdCBXaGF0SGFwcGVuZWREYXRhCgkJewoJCQlFcnJvcnM6OkVBY2Nlc3NUeXBlCXJlc3Vs dDsKCQkJZW11cHRyCQkJCWFkZHJlc3M7CgkJCXVpbnQzMgkJCQlzaXplOwoJCQlCb29sCQkJCWZv clJlYWQ7CgkJfTsKCgkJc3RhdGljIHZvaWQJCQkJTWFya1JhbmdlCQkJCShlbXVwdHIgc3RhcnQs IGVtdXB0ciBlbmQsIHVpbnQ4IHYpOwoJCXN0YXRpYyB2b2lkCQkJCVVubWFya1JhbmdlCQkJCShl bXVwdHIgc3RhcnQsIGVtdXB0ciBlbmQsIHVpbnQ4IHYpOwoJCXN0YXRpYyB2b2lkCQkJCU1hcmtV bm1hcmtSYW5nZQkJCShlbXVwdHIgc3RhcnQsIGVtdXB0ciBlbmQsCgkJCQkJCQkJCQkJCQkJIHVp bnQ4IGFuZFZhbHVlLCB1aW50OCBvclZhbHVlKTsKCgkJc3RhdGljIHZvaWQJCQkJU3luY09uZUNo dW5rCQkJKGNvbnN0IEVtUGFsbUNodW5rJiBjaHVuayk7CgoJCXN0YXRpYyB2b2lkCQkJCUdXSF9F eGFtaW5lSGVhcAkJCShjb25zdCBFbVBhbG1IZWFwJiBoZWFwLAoJCQkJCQkJCQkJCQkJCSBXaGF0 SGFwcGVuZWREYXRhJiBpbmZvKTsKCQlzdGF0aWMgdm9pZAkJCQlHV0hfRXhhbWluZUNodW5rCQko Y29uc3QgRW1QYWxtQ2h1bmsmIGNodW5rLAoJCQkJCQkJCQkJCQkJCSBXaGF0SGFwcGVuZWREYXRh JiBpbmZvKTsKCQkgCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCQllbnVtCgkJ ewoJCQlrTm9BcHBBY2Nlc3MJCT0gMHgwMDAxLAoJCQlrTm9TeXN0ZW1BY2Nlc3MJCT0gMHgwMDAy LAoJCQlrTm9NZW1NZ3JBY2Nlc3MJCT0gMHgwMDA0LAoJCQlrVW51c2VkTWV0YTEJCT0gMHgwMDA4 LAoJCQlrU3RhY2tCdWZmZXIJCT0gMHgwMDEwLAkgCgkJCWtTY3JlZW5CdWZmZXIJCT0gMHgwMDIw LAkgCgkJCWtJbnN0cnVjdGlvbkJyZWFrCT0gMHgwMDQwLAkgCgkJCWtEYXRhQnJlYWsJCQk9IDB4 MDA4MCwJIAoKCQkJa0xvd01lbW9yeUJpdHMJCT0ga05vQXBwQWNjZXNzIHwga05vU3lzdGVtQWNj ZXNzIHwga05vTWVtTWdyQWNjZXNzLAoJCQlrR2xvYmFsc0JpdHMJCT0ga05vQXBwQWNjZXNzLAoJ CQlrTVBUQml0cwkJCT0ga05vQXBwQWNjZXNzLAoJCQlrTWVtU3RydWN0Qml0cwkJPSBrTm9BcHBB Y2Nlc3MgfCBrTm9TeXN0ZW1BY2Nlc3MsCgkJCWtMb3dTdGFja0JpdHMJCT0ga05vQXBwQWNjZXNz IHwga05vU3lzdGVtQWNjZXNzIHwga05vTWVtTWdyQWNjZXNzLAoJCQlrRnJlZUNodW5rQml0cwkJ PSBrTm9BcHBBY2Nlc3MgfCBrTm9TeXN0ZW1BY2Nlc3MsCgkJCWtVbmxvY2tlZENodW5rQml0cwk9 IGtOb0FwcEFjY2VzcyB8IGtOb1N5c3RlbUFjY2VzcywKCQkJa1NjcmVlbkJpdHMJCQk9IGtOb0Fw cEFjY2VzcyB8IGtTY3JlZW5CdWZmZXIsCgkJCWtVSU9iamVjdEJpdHMJCT0ga05vQXBwQWNjZXNz LAoJCQlrQWNjZXNzQml0TWFzawkJPSBrTm9BcHBBY2Nlc3MgfCBrTm9TeXN0ZW1BY2Nlc3MgfCBr Tm9NZW1NZ3JBY2Nlc3MsCgkJCWtGcmVlQWNjZXNzQml0cwkJPSAwCgkJfTsKfTsKCgogCiAKCgoK CgoKCgoKCgoKCgogCiAKIAogCiAKIAogCgoKCgoKCgoKCgoKCgoKIAogCgoKIyAzMTEgIi4uL1Ny Y1NoYXJlZC9NZXRhTWVtb3J5LmgiCgoKIyAzMjIgIi4uL1NyY1NoYXJlZC9NZXRhTWVtb3J5Lmgi CgppbmxpbmUgQm9vbCBNZXRhTWVtb3J5OjpDYW5BcHBHZXRMb25nICh1aW50OCogbWV0YUFkZHJl c3MpCXsJY29uc3QgdWludDMyCWtNYXNrID0gKCgodWludDMyKSAoICAga05vQXBwQWNjZXNzICAp KSA8PCAyNCkgfAkoKCh1aW50MzIpICggICBrTm9BcHBBY2Nlc3MgICkpIDw8IDE2KSB8CSgoKHVp bnQzMikgKCAgIGtOb0FwcEFjY2VzcyAgKSkgPDwgIDgpIHwJKCgodWludDMyKSAoICAga05vQXBw QWNjZXNzICApKSkgOwlyZXR1cm4gKCgoKCh1aW50MzIpKCh1aW50OCopICBtZXRhQWRkcmVzcyAp WzBdKSA8PCAyNCkgfAkoKCh1aW50MzIpKCh1aW50OCopICBtZXRhQWRkcmVzcyApWzFdKSA8PCAx NikgfAkoKCh1aW50MzIpKCh1aW50OCopICBtZXRhQWRkcmVzcyApWzJdKSA8PCAgOCkgfAkoKCh1 aW50MzIpKCh1aW50OCopICBtZXRhQWRkcmVzcyApWzNdKSkpICAmIGtNYXNrKSA9PSAwOwl9CWlu bGluZSBCb29sIE1ldGFNZW1vcnk6OkNhbkFwcEdldFdvcmQgKHVpbnQ4KiBtZXRhQWRkcmVzcykJ ewljb25zdCB1aW50MTYJa01hc2sgPSAoKCh1aW50MTYpICggICBrTm9BcHBBY2Nlc3MgICkpIDw8 ICA4KSB8CSgoKHVpbnQxNikgKCAgIGtOb0FwcEFjY2VzcyAgKSkpIDsJcmV0dXJuICgoKCgodWlu dDE2KSgodWludDgqKSAgbWV0YUFkZHJlc3MgKVswXSkgPDwgOCkgfAkoKCh1aW50MTYpKCh1aW50 OCopICBtZXRhQWRkcmVzcyApWzFdKSkpICAmIGtNYXNrKSA9PSAwOwl9CWlubGluZSBCb29sIE1l dGFNZW1vcnk6OkNhbkFwcEdldEJ5dGUgKHVpbnQ4KiBtZXRhQWRkcmVzcykJewljb25zdCB1aW50 OAkJa01hc2sgPSAoKCh1aW50OCkgKCAgIGtOb0FwcEFjY2VzcyAgKSkpIDsJcmV0dXJuICgoKih1 aW50OCopICBtZXRhQWRkcmVzcyApICAmIGtNYXNrKSA9PSAwOwl9IAppbmxpbmUgQm9vbCBNZXRh TWVtb3J5OjpDYW5BcHBTZXRMb25nICh1aW50OCogbWV0YUFkZHJlc3MpCXsJY29uc3QgdWludDMy CWtNYXNrID0gKCgodWludDMyKSAoICAga05vQXBwQWNjZXNzICApKSA8PCAyNCkgfAkoKCh1aW50 MzIpICggICBrTm9BcHBBY2Nlc3MgICkpIDw8IDE2KSB8CSgoKHVpbnQzMikgKCAgIGtOb0FwcEFj Y2VzcyAgKSkgPDwgIDgpIHwJKCgodWludDMyKSAoICAga05vQXBwQWNjZXNzICApKSkgOwlyZXR1 cm4gKCgoKCh1aW50MzIpKCh1aW50OCopICBtZXRhQWRkcmVzcyApWzBdKSA8PCAyNCkgfAkoKCh1 aW50MzIpKCh1aW50OCopICBtZXRhQWRkcmVzcyApWzFdKSA8PCAxNikgfAkoKCh1aW50MzIpKCh1 aW50OCopICBtZXRhQWRkcmVzcyApWzJdKSA8PCAgOCkgfAkoKCh1aW50MzIpKCh1aW50OCopICBt ZXRhQWRkcmVzcyApWzNdKSkpICAmIGtNYXNrKSA9PSAwOwl9CWlubGluZSBCb29sIE1ldGFNZW1v cnk6OkNhbkFwcFNldFdvcmQgKHVpbnQ4KiBtZXRhQWRkcmVzcykJewljb25zdCB1aW50MTYJa01h c2sgPSAoKCh1aW50MTYpICggICBrTm9BcHBBY2Nlc3MgICkpIDw8ICA4KSB8CSgoKHVpbnQxNikg KCAgIGtOb0FwcEFjY2VzcyAgKSkpIDsJcmV0dXJuICgoKCgodWludDE2KSgodWludDgqKSAgbWV0 YUFkZHJlc3MgKVswXSkgPDwgOCkgfAkoKCh1aW50MTYpKCh1aW50OCopICBtZXRhQWRkcmVzcyAp WzFdKSkpICAmIGtNYXNrKSA9PSAwOwl9CWlubGluZSBCb29sIE1ldGFNZW1vcnk6OkNhbkFwcFNl dEJ5dGUgKHVpbnQ4KiBtZXRhQWRkcmVzcykJewljb25zdCB1aW50OAkJa01hc2sgPSAoKCh1aW50 OCkgKCAgIGtOb0FwcEFjY2VzcyAgKSkpIDsJcmV0dXJuICgoKih1aW50OCopICBtZXRhQWRkcmVz cyApICAmIGtNYXNrKSA9PSAwOwl9IAoKaW5saW5lIEJvb2wgTWV0YU1lbW9yeTo6Q2FuU3lzdGVt R2V0TG9uZyAodWludDgqIG1ldGFBZGRyZXNzKQl7CWNvbnN0IHVpbnQzMglrTWFzayA9ICgoKHVp bnQzMikgKCAgIGtOb1N5c3RlbUFjY2VzcyAgKSkgPDwgMjQpIHwJKCgodWludDMyKSAoICAga05v U3lzdGVtQWNjZXNzICApKSA8PCAxNikgfAkoKCh1aW50MzIpICggICBrTm9TeXN0ZW1BY2Nlc3Mg ICkpIDw8ICA4KSB8CSgoKHVpbnQzMikgKCAgIGtOb1N5c3RlbUFjY2VzcyAgKSkpIDsJcmV0dXJu ICgoKCgodWludDMyKSgodWludDgqKSAgbWV0YUFkZHJlc3MgKVswXSkgPDwgMjQpIHwJKCgodWlu dDMyKSgodWludDgqKSAgbWV0YUFkZHJlc3MgKVsxXSkgPDwgMTYpIHwJKCgodWludDMyKSgodWlu dDgqKSAgbWV0YUFkZHJlc3MgKVsyXSkgPDwgIDgpIHwJKCgodWludDMyKSgodWludDgqKSAgbWV0 YUFkZHJlc3MgKVszXSkpKSAgJiBrTWFzaykgPT0gMDsJfQlpbmxpbmUgQm9vbCBNZXRhTWVtb3J5 OjpDYW5TeXN0ZW1HZXRXb3JkICh1aW50OCogbWV0YUFkZHJlc3MpCXsJY29uc3QgdWludDE2CWtN YXNrID0gKCgodWludDE2KSAoICAga05vU3lzdGVtQWNjZXNzICApKSA8PCAgOCkgfAkoKCh1aW50 MTYpICggICBrTm9TeXN0ZW1BY2Nlc3MgICkpKSA7CXJldHVybiAoKCgoKHVpbnQxNikoKHVpbnQ4 KikgIG1ldGFBZGRyZXNzIClbMF0pIDw8IDgpIHwJKCgodWludDE2KSgodWludDgqKSAgbWV0YUFk ZHJlc3MgKVsxXSkpKSAgJiBrTWFzaykgPT0gMDsJfQlpbmxpbmUgQm9vbCBNZXRhTWVtb3J5OjpD YW5TeXN0ZW1HZXRCeXRlICh1aW50OCogbWV0YUFkZHJlc3MpCXsJY29uc3QgdWludDgJCWtNYXNr ID0gKCgodWludDgpICggICBrTm9TeXN0ZW1BY2Nlc3MgICkpKSA7CXJldHVybiAoKCoodWludDgq KSAgbWV0YUFkZHJlc3MgKSAgJiBrTWFzaykgPT0gMDsJfSAKaW5saW5lIEJvb2wgTWV0YU1lbW9y eTo6Q2FuU3lzdGVtU2V0TG9uZyAodWludDgqIG1ldGFBZGRyZXNzKQl7CWNvbnN0IHVpbnQzMglr TWFzayA9ICgoKHVpbnQzMikgKCAgIGtOb1N5c3RlbUFjY2VzcyAgKSkgPDwgMjQpIHwJKCgodWlu dDMyKSAoICAga05vU3lzdGVtQWNjZXNzICApKSA8PCAxNikgfAkoKCh1aW50MzIpICggICBrTm9T eXN0ZW1BY2Nlc3MgICkpIDw8ICA4KSB8CSgoKHVpbnQzMikgKCAgIGtOb1N5c3RlbUFjY2VzcyAg KSkpIDsJcmV0dXJuICgoKCgodWludDMyKSgodWludDgqKSAgbWV0YUFkZHJlc3MgKVswXSkgPDwg MjQpIHwJKCgodWludDMyKSgodWludDgqKSAgbWV0YUFkZHJlc3MgKVsxXSkgPDwgMTYpIHwJKCgo dWludDMyKSgodWludDgqKSAgbWV0YUFkZHJlc3MgKVsyXSkgPDwgIDgpIHwJKCgodWludDMyKSgo dWludDgqKSAgbWV0YUFkZHJlc3MgKVszXSkpKSAgJiBrTWFzaykgPT0gMDsJfQlpbmxpbmUgQm9v bCBNZXRhTWVtb3J5OjpDYW5TeXN0ZW1TZXRXb3JkICh1aW50OCogbWV0YUFkZHJlc3MpCXsJY29u c3QgdWludDE2CWtNYXNrID0gKCgodWludDE2KSAoICAga05vU3lzdGVtQWNjZXNzICApKSA8PCAg OCkgfAkoKCh1aW50MTYpICggICBrTm9TeXN0ZW1BY2Nlc3MgICkpKSA7CXJldHVybiAoKCgoKHVp bnQxNikoKHVpbnQ4KikgIG1ldGFBZGRyZXNzIClbMF0pIDw8IDgpIHwJKCgodWludDE2KSgodWlu dDgqKSAgbWV0YUFkZHJlc3MgKVsxXSkpKSAgJiBrTWFzaykgPT0gMDsJfQlpbmxpbmUgQm9vbCBN ZXRhTWVtb3J5OjpDYW5TeXN0ZW1TZXRCeXRlICh1aW50OCogbWV0YUFkZHJlc3MpCXsJY29uc3Qg dWludDgJCWtNYXNrID0gKCgodWludDgpICggICBrTm9TeXN0ZW1BY2Nlc3MgICkpKSA7CXJldHVy biAoKCoodWludDgqKSAgbWV0YUFkZHJlc3MgKSAgJiBrTWFzaykgPT0gMDsJfSAKCmlubGluZSBC b29sIE1ldGFNZW1vcnk6OkNhbk1lbU1nckdldExvbmcgKHVpbnQ4KiBtZXRhQWRkcmVzcykJewlj b25zdCB1aW50MzIJa01hc2sgPSAoKCh1aW50MzIpICggICBrTm9NZW1NZ3JBY2Nlc3MgICkpIDw8 IDI0KSB8CSgoKHVpbnQzMikgKCAgIGtOb01lbU1nckFjY2VzcyAgKSkgPDwgMTYpIHwJKCgodWlu dDMyKSAoICAga05vTWVtTWdyQWNjZXNzICApKSA8PCAgOCkgfAkoKCh1aW50MzIpICggICBrTm9N ZW1NZ3JBY2Nlc3MgICkpKSA7CXJldHVybiAoKCgoKHVpbnQzMikoKHVpbnQ4KikgIG1ldGFBZGRy ZXNzIClbMF0pIDw8IDI0KSB8CSgoKHVpbnQzMikoKHVpbnQ4KikgIG1ldGFBZGRyZXNzIClbMV0p IDw8IDE2KSB8CSgoKHVpbnQzMikoKHVpbnQ4KikgIG1ldGFBZGRyZXNzIClbMl0pIDw8ICA4KSB8 CSgoKHVpbnQzMikoKHVpbnQ4KikgIG1ldGFBZGRyZXNzIClbM10pKSkgICYga01hc2spID09IDA7 CX0JaW5saW5lIEJvb2wgTWV0YU1lbW9yeTo6Q2FuTWVtTWdyR2V0V29yZCAodWludDgqIG1ldGFB ZGRyZXNzKQl7CWNvbnN0IHVpbnQxNglrTWFzayA9ICgoKHVpbnQxNikgKCAgIGtOb01lbU1nckFj Y2VzcyAgKSkgPDwgIDgpIHwJKCgodWludDE2KSAoICAga05vTWVtTWdyQWNjZXNzICApKSkgOwly ZXR1cm4gKCgoKCh1aW50MTYpKCh1aW50OCopICBtZXRhQWRkcmVzcyApWzBdKSA8PCA4KSB8CSgo KHVpbnQxNikoKHVpbnQ4KikgIG1ldGFBZGRyZXNzIClbMV0pKSkgICYga01hc2spID09IDA7CX0J aW5saW5lIEJvb2wgTWV0YU1lbW9yeTo6Q2FuTWVtTWdyR2V0Qnl0ZSAodWludDgqIG1ldGFBZGRy ZXNzKQl7CWNvbnN0IHVpbnQ4CQlrTWFzayA9ICgoKHVpbnQ4KSAoICAga05vTWVtTWdyQWNjZXNz ICApKSkgOwlyZXR1cm4gKCgqKHVpbnQ4KikgIG1ldGFBZGRyZXNzICkgICYga01hc2spID09IDA7 CX0gCmlubGluZSBCb29sIE1ldGFNZW1vcnk6OkNhbk1lbU1nclNldExvbmcgKHVpbnQ4KiBtZXRh QWRkcmVzcykJewljb25zdCB1aW50MzIJa01hc2sgPSAoKCh1aW50MzIpICggICBrTm9NZW1NZ3JB Y2Nlc3MgICkpIDw8IDI0KSB8CSgoKHVpbnQzMikgKCAgIGtOb01lbU1nckFjY2VzcyAgKSkgPDwg MTYpIHwJKCgodWludDMyKSAoICAga05vTWVtTWdyQWNjZXNzICApKSA8PCAgOCkgfAkoKCh1aW50 MzIpICggICBrTm9NZW1NZ3JBY2Nlc3MgICkpKSA7CXJldHVybiAoKCgoKHVpbnQzMikoKHVpbnQ4 KikgIG1ldGFBZGRyZXNzIClbMF0pIDw8IDI0KSB8CSgoKHVpbnQzMikoKHVpbnQ4KikgIG1ldGFB ZGRyZXNzIClbMV0pIDw8IDE2KSB8CSgoKHVpbnQzMikoKHVpbnQ4KikgIG1ldGFBZGRyZXNzIClb Ml0pIDw8ICA4KSB8CSgoKHVpbnQzMikoKHVpbnQ4KikgIG1ldGFBZGRyZXNzIClbM10pKSkgICYg a01hc2spID09IDA7CX0JaW5saW5lIEJvb2wgTWV0YU1lbW9yeTo6Q2FuTWVtTWdyU2V0V29yZCAo dWludDgqIG1ldGFBZGRyZXNzKQl7CWNvbnN0IHVpbnQxNglrTWFzayA9ICgoKHVpbnQxNikgKCAg IGtOb01lbU1nckFjY2VzcyAgKSkgPDwgIDgpIHwJKCgodWludDE2KSAoICAga05vTWVtTWdyQWNj ZXNzICApKSkgOwlyZXR1cm4gKCgoKCh1aW50MTYpKCh1aW50OCopICBtZXRhQWRkcmVzcyApWzBd KSA8PCA4KSB8CSgoKHVpbnQxNikoKHVpbnQ4KikgIG1ldGFBZGRyZXNzIClbMV0pKSkgICYga01h c2spID09IDA7CX0JaW5saW5lIEJvb2wgTWV0YU1lbW9yeTo6Q2FuTWVtTWdyU2V0Qnl0ZSAodWlu dDgqIG1ldGFBZGRyZXNzKQl7CWNvbnN0IHVpbnQ4CQlrTWFzayA9ICgoKHVpbnQ4KSAoICAga05v TWVtTWdyQWNjZXNzICApKSkgOwlyZXR1cm4gKCgqKHVpbnQ4KikgIG1ldGFBZGRyZXNzICkgICYg a01hc2spID09IDA7CX0gCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgppbmxpbmUgQm9v bCBNZXRhTWVtb3J5OjpJc1NjcmVlbkJ1ZmZlciAodWludDgqIG1ldGFBZGRyZXNzLCB1aW50MzIg c2l6ZSkKewoJaWYgKHNpemUgPT0gMSkKCXsKCQljb25zdCB1aW50OCBrTWFzayA9ICgoKHVpbnQ4 KSAoIGtTY3JlZW5CdWZmZXIgKSkpIDsKCgkJcmV0dXJuICgoKih1aW50OCopICBtZXRhQWRkcmVz cyApICAmIGtNYXNrKSAhPSAwOwoJfQoJZWxzZSBpZiAoc2l6ZSA9PSAyKQoJewoJCWNvbnN0IHVp bnQxNiBrTWFzayA9ICgoKHVpbnQxNikgKCBrU2NyZWVuQnVmZmVyICkpIDw8ICA4KSB8CSgoKHVp bnQxNikgKCBrU2NyZWVuQnVmZmVyICkpKSA7CgoJCXJldHVybiAoKCgoKHVpbnQxNikoKHVpbnQ4 KikgIG1ldGFBZGRyZXNzIClbMF0pIDw8IDgpIHwJKCgodWludDE2KSgodWludDgqKSAgbWV0YUFk ZHJlc3MgKVsxXSkpKSAgJiBrTWFzaykgIT0gMDsKCX0KCWVsc2UgaWYgKHNpemUgPT0gNCkKCXsK CQljb25zdCB1aW50MzIga01hc2sgPSAoKCh1aW50MzIpICgga1NjcmVlbkJ1ZmZlciApKSA8PCAy NCkgfAkoKCh1aW50MzIpICgga1NjcmVlbkJ1ZmZlciApKSA8PCAxNikgfAkoKCh1aW50MzIpICgg a1NjcmVlbkJ1ZmZlciApKSA8PCAgOCkgfAkoKCh1aW50MzIpICgga1NjcmVlbkJ1ZmZlciApKSkg OwoKCQlyZXR1cm4gKCgoKCh1aW50MzIpKCh1aW50OCopICBtZXRhQWRkcmVzcyApWzBdKSA8PCAy NCkgfAkoKCh1aW50MzIpKCh1aW50OCopICBtZXRhQWRkcmVzcyApWzFdKSA8PCAxNikgfAkoKCh1 aW50MzIpKCh1aW50OCopICBtZXRhQWRkcmVzcyApWzJdKSA8PCAgOCkgfAkoKCh1aW50MzIpKCh1 aW50OCopICBtZXRhQWRkcmVzcyApWzNdKSkpICAmIGtNYXNrKSAhPSAwOwoJfQoKCWNvbnN0IHVp bnQ4IGtNYXNrID0gKCgodWludDgpICgga1NjcmVlbkJ1ZmZlciApKSkgOwoKCWZvciAodWludDMy IGlpID0gMDsgaWkgPCBzaXplOyArK2lpKQoJewoJCWlmICgoKCoodWludDgqKSAobWV0YUFkZHJl c3MgKyBpaSkpICYga01hc2spICE9IDApCgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9CgoJcmV0 dXJuIGZhbHNlOwp9CgppbmxpbmUgQm9vbCBNZXRhTWVtb3J5OjpJc1NjcmVlbkJ1ZmZlcjggKHVp bnQ4KiBtZXRhQWRkcmVzcykKewoJY29uc3QgdWludDgga01hc2sgPSAoKCh1aW50OCkgKCBrU2Ny ZWVuQnVmZmVyICkpKSA7CgoJcmV0dXJuICgoKih1aW50OCopICBtZXRhQWRkcmVzcyApICAmIGtN YXNrKSAhPSAwOwp9CgppbmxpbmUgQm9vbCBNZXRhTWVtb3J5OjpJc1NjcmVlbkJ1ZmZlcjE2ICh1 aW50OCogbWV0YUFkZHJlc3MpCnsKCWNvbnN0IHVpbnQxNiBrTWFzayA9ICgoKHVpbnQxNikgKCBr U2NyZWVuQnVmZmVyICkpIDw8ICA4KSB8CSgoKHVpbnQxNikgKCBrU2NyZWVuQnVmZmVyICkpKSA7 CgoJcmV0dXJuICgoKCgodWludDE2KSgodWludDgqKSAgbWV0YUFkZHJlc3MgKVswXSkgPDwgOCkg fAkoKCh1aW50MTYpKCh1aW50OCopICBtZXRhQWRkcmVzcyApWzFdKSkpICAmIGtNYXNrKSAhPSAw Owp9CgppbmxpbmUgQm9vbCBNZXRhTWVtb3J5OjpJc1NjcmVlbkJ1ZmZlcjMyICh1aW50OCogbWV0 YUFkZHJlc3MpCnsKCWNvbnN0IHVpbnQzMiBrTWFzayA9ICgoKHVpbnQzMikgKCBrU2NyZWVuQnVm ZmVyICkpIDw8IDI0KSB8CSgoKHVpbnQzMikgKCBrU2NyZWVuQnVmZmVyICkpIDw8IDE2KSB8CSgo KHVpbnQzMikgKCBrU2NyZWVuQnVmZmVyICkpIDw8ICA4KSB8CSgoKHVpbnQzMikgKCBrU2NyZWVu QnVmZmVyICkpKSA7CgoJcmV0dXJuICgoKCgodWludDMyKSgodWludDgqKSAgbWV0YUFkZHJlc3Mg KVswXSkgPDwgMjQpIHwJKCgodWludDMyKSgodWludDgqKSAgbWV0YUFkZHJlc3MgKVsxXSkgPDwg MTYpIHwJKCgodWludDMyKSgodWludDgqKSAgbWV0YUFkZHJlc3MgKVsyXSkgPDwgIDgpIHwJKCgo dWludDMyKSgodWludDgqKSAgbWV0YUFkZHJlc3MgKVszXSkpKSAgJiBrTWFzaykgIT0gMDsKfQoK CmlubGluZSBCb29sIE1ldGFNZW1vcnk6OklzQ1BVQnJlYWsgKGVtdXB0ciBvcGNvZGVMb2NhdGlv bikKewoJKCh2b2lkKSAwKSA7CglyZXR1cm4gSXNDUFVCcmVhayAoRW1NZW1HZXRNZXRhQWRkcmVz cyAob3Bjb2RlTG9jYXRpb24pKTsKfQoKCmlubGluZSBCb29sIE1ldGFNZW1vcnk6OklzQ1BVQnJl YWsgKHVpbnQ4KiBtZXRhTG9jYXRpb24pCnsKCXJldHVybiAoKCptZXRhTG9jYXRpb24pICYga0lu c3RydWN0aW9uQnJlYWspICE9IDA7Cn0KCgoKIyA0NjIgIi4uL1NyY1NoYXJlZC9NZXRhTWVtb3J5 LmgiCgoKIAogCiAKCmlubGluZSB2b2lkIE1ldGFNZW1vcnk6Ok1hcmtUb3RhbEFjY2VzcyAoZW11 cHRyIGJlZ2luLCBlbXVwdHIgZW5kKQp7CglVbm1hcmtSYW5nZSAoYmVnaW4sIGVuZCwga0FjY2Vz c0JpdE1hc2spOwp9CgoKIAogCiAKCmlubGluZSB2b2lkIE1ldGFNZW1vcnk6OlNldEFjY2VzcyAo ZW11cHRyIGJlZ2luLCBlbXVwdHIgZW5kLCB1aW50OCBiaXRzKQp7CglNYXJrVW5tYXJrUmFuZ2Ug KGJlZ2luLCBlbmQsIH5rQWNjZXNzQml0TWFzaywgYml0cyk7Cn0KCgogCiAKIAogCiAKCmlubGlu ZSB2b2lkIE1ldGFNZW1vcnk6Ok1hcmtMb3dNZW1vcnkgKGVtdXB0ciBiZWdpbiwgZW11cHRyIGVu ZCkKewoJU2V0QWNjZXNzIChiZWdpbiwgZW5kLCBrTG93TWVtb3J5Qml0cyk7Cn0KCgogCiAKIAog CiAKCmlubGluZSB2b2lkIE1ldGFNZW1vcnk6Ok1hcmtTeXN0ZW1HbG9iYWxzIChlbXVwdHIgYmVn aW4sIGVtdXB0ciBlbmQpCnsKCVNldEFjY2VzcyAoYmVnaW4sIGVuZCwga0dsb2JhbHNCaXRzKTsK fQoKCiAKIAogCgppbmxpbmUgdm9pZCBNZXRhTWVtb3J5OjpNYXJrSGVhcEhlYWRlciAoZW11cHRy IGJlZ2luLCBlbXVwdHIgZW5kKQp7CglTZXRBY2Nlc3MgKGJlZ2luLCBlbmQsIGtNZW1TdHJ1Y3RC aXRzKTsKfQoKCiAKIAogCgppbmxpbmUgdm9pZCBNZXRhTWVtb3J5OjpNYXJrTVBUIChlbXVwdHIg YmVnaW4sIGVtdXB0ciBlbmQpCnsKCVNldEFjY2VzcyAoYmVnaW4sIGVuZCwga01QVEJpdHMpOwp9 CgoKIAogCiAKCmlubGluZSB2b2lkIE1ldGFNZW1vcnk6Ok1hcmtDaHVua0hlYWRlciAoZW11cHRy IGJlZ2luLCBlbXVwdHIgZW5kKQp7CglTZXRBY2Nlc3MgKGJlZ2luLCBlbmQsIGtNZW1TdHJ1Y3RC aXRzKTsKfQoKCiAKIAogCgppbmxpbmUgdm9pZCBNZXRhTWVtb3J5OjpNYXJrQ2h1bmtUcmFpbGVy IChlbXVwdHIgYmVnaW4sIGVtdXB0ciBlbmQpCnsKCVNldEFjY2VzcyAoYmVnaW4sIGVuZCwga01l bVN0cnVjdEJpdHMpOwp9CgoKIAogCiAKCmlubGluZSB2b2lkIE1ldGFNZW1vcnk6Ok1hcmtMb3dT dGFjayAoZW11cHRyIGJlZ2luLCBlbXVwdHIgZW5kKQp7CglTZXRBY2Nlc3MgKGJlZ2luLCBlbmQs IGtMb3dTdGFja0JpdHMpOwp9CgoKIAogCiAKCmlubGluZSB2b2lkIE1ldGFNZW1vcnk6Ok1hcmtV bmxvY2tlZENodW5rIChlbXVwdHIgYmVnaW4sIGVtdXB0ciBlbmQpCnsKCVNldEFjY2VzcyAoYmVn aW4sIGVuZCwga1VubG9ja2VkQ2h1bmtCaXRzKTsKfQoKCiAKIAogCgppbmxpbmUgdm9pZCBNZXRh TWVtb3J5OjpNYXJrRnJlZUNodW5rIChlbXVwdHIgYmVnaW4sIGVtdXB0ciBlbmQpCnsKCVNldEFj Y2VzcyAoYmVnaW4sIGVuZCwga0ZyZWVDaHVua0JpdHMpOwp9CgoKIAogCiAKCmlubGluZSB2b2lk IE1ldGFNZW1vcnk6Ok1hcmtTY3JlZW4gKGVtdXB0ciBiZWdpbiwgZW11cHRyIGVuZCkKewoJU2V0 QWNjZXNzIChiZWdpbiwgZW5kLCBrU2NyZWVuQml0cyk7Cn0KCgogCiAKIAoKaW5saW5lIHZvaWQg TWV0YU1lbW9yeTo6VW5tYXJrU2NyZWVuIChlbXVwdHIgYmVnaW4sIGVtdXB0ciBlbmQpCnsKCU1h cmtUb3RhbEFjY2VzcyAoYmVnaW4sIGVuZCk7CglVbm1hcmtSYW5nZSAoYmVnaW4sIGVuZCwga1Nj cmVlbkJ1ZmZlcik7Cn0KCgogCiAKIAoKaW5saW5lIHZvaWQgTWV0YU1lbW9yeTo6TWFya1VJT2Jq ZWN0IChlbXVwdHIgYmVnaW4sIGVtdXB0ciBlbmQpCnsKCVNldEFjY2VzcyAoYmVnaW4sIGVuZCwg a1VJT2JqZWN0Qml0cyk7Cn0KCgogCiAKIAoKaW5saW5lIHZvaWQgTWV0YU1lbW9yeTo6VW5tYXJr VUlPYmplY3QgKGVtdXB0ciBiZWdpbiwgZW11cHRyIGVuZCkKewoJTWFya1RvdGFsQWNjZXNzIChi ZWdpbiwgZW5kKTsKIAp9CgoKIAogCiAKCmlubGluZSB2b2lkIE1ldGFNZW1vcnk6Ok1hcmtJbnN0 cnVjdGlvbkJyZWFrIChlbXVwdHIgb3Bjb2RlTG9jYXRpb24pCnsKCSgodm9pZCkgMCkgOwoKCXVp bnQ4KglwdHIgPSBFbU1lbUdldE1ldGFBZGRyZXNzIChvcGNvZGVMb2NhdGlvbik7CgoJKnB0ciB8 PSBrSW5zdHJ1Y3Rpb25CcmVhazsKfQoKCiAKIAogCgppbmxpbmUgdm9pZCBNZXRhTWVtb3J5OjpV bm1hcmtJbnN0cnVjdGlvbkJyZWFrIChlbXVwdHIgb3Bjb2RlTG9jYXRpb24pCnsKCSgodm9pZCkg MCkgOwoKCXVpbnQ4KglwdHIgPSBFbU1lbUdldE1ldGFBZGRyZXNzIChvcGNvZGVMb2NhdGlvbik7 CgoJKnB0ciAmPSB+a0luc3RydWN0aW9uQnJlYWs7Cn0KCgogCiAKIAoKaW5saW5lIHZvaWQgTWV0 YU1lbW9yeTo6TWFya0RhdGFCcmVhayAoZW11cHRyIGJlZ2luLCBlbXVwdHIgZW5kKQp7CglNYXJr UmFuZ2UgKGJlZ2luLCBlbmQsIGtEYXRhQnJlYWspOwp9CgoKIAogCiAKCmlubGluZSB2b2lkIE1l dGFNZW1vcnk6OlVubWFya0RhdGFCcmVhayAoZW11cHRyIGJlZ2luLCBlbXVwdHIgZW5kKQp7CglV bm1hcmtSYW5nZSAoYmVnaW4sIGVuZCwga0RhdGFCcmVhayk7Cn0KCgoKIyAxNSAiLi8uLi9TcmNT aGFyZWQvTWV0YU1lbW9yeS5jcHAiIDIKCgojIDEgIi4uL1NyY1NoYXJlZC9EZWJ1Z01nci5oIiAx CiAKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgojcHJhZ21hIG1hcmsgVHlwZXMKCmNsYXNzIFNMUDsK Y2xhc3MgQ1NvY2tldDsKY2xhc3MgQ1RDUFNvY2tldDsKCnN0cnVjdCBTeXN0ZW1DYWxsQ29udGV4 dDsKCnR5cGVkZWYgdWludDMyCSgqcmVnaXN0ZXJGdW4pKGludCBudW0pOwp0eXBlZGVmIEJvb2wJ KCpjb21wYXJlRnVuKShVSW50MzIgYSwgVUludDMyIGIpOwoKIAogCiAKIAogCiAKIAogCiAKIAog CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAoKc3RydWN0IEJyZWFrcG9pbnRDb25kaXRpb24K ewoJcmVnaXN0ZXJGdW4JCQkJcmVnVHlwZTsKCWludAkJCQkgCQlyZWdOdW07CglCb29sCQkJCQlp bmRpcmVjdDsKCXVpbnQzMgkJCSAJCWluZGlyZWN0T2Zmc2V0OwoJaW50CQkJCQkJc2l6ZTsJCQkJ IAoKCWNvbXBhcmVGdW4JCQkJY29uZGl0aW9uOwoJdWludDMyCQkJCQl2YWx1ZTsKCgkgCgkgCgkg CgoJY2hhcioJCQkJCXNvdXJjZTsKCglCb29sCQkJCQlFdmFsdWF0ZSAodm9pZCk7Cn07CgpzdHJ1 Y3QgRW1CcmVha3BvaW50VHlwZQp7CglNZW1QdHIJCQkJCWFkZHI7CQkJCSAKCUJvb2xlYW4JCQkJ CWVuYWJsZWQ7CQkJIAoJQm9vbGVhbgkJCQkJaW5zdGFsbGVkOwkJCSAKfTsKCnN0cnVjdCBEZWJ1 Z0dsb2JhbHNUeXBlCnsKCSAKCglib29sCQkJCQlpZ25vcmVEYmdCcmVha3M7CSAKCWJvb2wJCQkJ CWZpcnN0RW50cmFuY2U7CQkgCglib29sCQkJCQlzdGVwU3B5OwkJCSAKCWJvb2wJCQkJCWJyZWFr aW5nT25BVHJhcDsJIAoJYm9vbAkJCQkJY29udGludWVPdmVyQVRyYXA7CSAKCWJvb2wJCQkJCWNv bnRpbnVlT3ZlckJQOyAJIAoKCWJvb2wJCQkJCWNoZWNrVHJhcFdvcmRPbkV4aXQ7Cgl1aW50MTYg CQkJCQl0cmFwV29yZDsKCXVpbnQxNgkJCSAJCXJlZk51bTsKCgkgCgoJRW1CcmVha3BvaW50VHlw ZQkJYnBbKDUgICsxKSBdOwoJQnJlYWtwb2ludENvbmRpdGlvbioJYnBDb25kaXRpb25bKDUgICsx KSBdOwkgCgoJIAoKCVVJbnQxNgkJCQkJdHJhcEJyZWFrWzUgXTsKCVVJbnQxNgkJCQkJdHJhcFBh cmFtWzUgXTsKCgkgCgoJZW11cHRyCQkJIAkJc3NBZGRyOyAJCQkgCglVSW50MzIJCQkJCXNzVmFs dWU7CQkJIAoKCSAKCglpbnQzMgkJCSAJCWV4Y1R5cGU7CQkJIAoKCSAKCSAKCglib29sCQkJCQl3 YXRjaEVuYWJsZWQ7CgllbXVwdHIJCQkgCQl3YXRjaEFkZHI7CQkJIAoJVUludDMyCQkJCQl3YXRj aEJ5dGVzOyAJCSAKfTsKCiAKCiNwcmFnbWEgbWFyayBjbGFzcyBEZWJ1ZwoKCSAKZXh0ZXJuIERl YnVnR2xvYmFsc1R5cGUgCWdEZWJ1Z2dlckdsb2JhbHM7CgpleHRlcm4gZW11cHRyCWdFeGNlcHRp b25BZGRyZXNzOwpleHRlcm4gaW50CQlnRXhjZXB0aW9uU2l6ZTsKZXh0ZXJuIEJvb2wJCWdFeGNl cHRpb25Gb3JSZWFkOwoKCmNsYXNzIERlYnVnCnsKCXB1YmxpYzoKCQlzdGF0aWMgdm9pZCAJCQlJ bml0aWFsaXplCQkJCSh2b2lkKTsKCQlzdGF0aWMgdm9pZCAJCQlSZXNldAkJCQkJKHZvaWQpOwoJ CXN0YXRpYyB2b2lkIAkJCVNhdmUJCQkJCShTZXNzaW9uRmlsZSYpOwoJCXN0YXRpYyB2b2lkIAkJ CUxvYWQJCQkJCShTZXNzaW9uRmlsZSYpOwoJCXN0YXRpYyB2b2lkIAkJCURpc3Bvc2UgCQkJCSh2 b2lkKTsKCgkJc3RhdGljIHZvaWQgCQkJU3RhcnR1cCAJCQkJKHZvaWQpOwoJCXN0YXRpYyB2b2lk IAkJCVNodXRkb3duCQkJCSh2b2lkKTsKCQlzdGF0aWMgQm9vbCAJCQlDb25uZWN0ZWRUb1RDUERl YnVnZ2VyCSh2b2lkKTsKCQlzdGF0aWMgQ1RDUFNvY2tldCoJCUdldFRDUERlYnVnZ2VyU29ja2V0 CSh2b2lkKTsKCQlzdGF0aWMgQ1NvY2tldCoJCQlHZXREZWJ1Z2dlclNvY2tldAkJKHZvaWQpOwoK CQlzdGF0aWMgRXJyQ29kZQkJCUhhbmRsZU5ld1BhY2tldCAJCShTTFAmKTsKCgkJc3RhdGljIEJv b2wgCQkJQnJlYWtJZkNvbm5lY3RlZAkJKEV4Y2VwdGlvbk51bWJlcik7CgkJc3RhdGljIEJvb2wg CQkJSGFuZGxlVHJhcDggCQkJKEV4Y2VwdGlvbk51bWJlcik7CgkJc3RhdGljIEJvb2wgCQkJSGFu ZGxlU3lzdGVtQ2FsbAkJKGNvbnN0IFN5c3RlbUNhbGxDb250ZXh0JiBjb250ZXh0KTsKCQlzdGF0 aWMgRXJyQ29kZQkJCUVudGVyRGVidWdnZXIJCQkoRXhjZXB0aW9uTnVtYmVyLCBTTFAqKTsKCQlz dGF0aWMgRXJyQ29kZQkJCUV4aXREZWJ1Z2dlcgkJCSh2b2lkKTsKCQlzdGF0aWMgdm9pZCAJCQlD aGVja1N0ZXBTcHkJCQkoZW11cHRyIHdyaXRlQWRkcmVzcywgaW50IHdyaXRlQnl0ZXMpOwoKCQlz dGF0aWMgdm9pZCAJCQlIYW5kbGVJbnN0cnVjdGlvbkJyZWFrCSh2b2lkKTsKCQlzdGF0aWMgdm9p ZCAJCQlJbnN0YWxsSW5zdHJ1Y3Rpb25CcmVha3Modm9pZCk7CgkJc3RhdGljIHZvaWQgCQkJUmVt b3ZlSW5zdHJ1Y3Rpb25CcmVha3MJKHZvaWQpOwoKCQlzdGF0aWMgQnJlYWtwb2ludENvbmRpdGlv bioKCQkJCQkJCQlOZXdCcmVha3BvaW50Q29uZGl0aW9uCShjb25zdCBjaGFyKiBzb3VyY2VTdHJp bmcpOwoJCXN0YXRpYyB2b2lkIAkJCVNldEJyZWFrcG9pbnQJCQkoaW50IGluZGV4LCBlbXVwdHIg YWRkciwgQnJlYWtwb2ludENvbmRpdGlvbiogYyk7CgkJc3RhdGljIHZvaWQgCQkJQ2xlYXJCcmVh a3BvaW50IAkJKGludCBpbmRleCk7CgkJc3RhdGljIHZvaWQgCQkJRGVsZXRlQnJlYWtwb2ludENv bmRpdGlvbgkoaW50IGluZGV4KTsKCgkJc3RhdGljIEJvb2wJCQkJQnJlYWtwb2ludEluc3RhbGxl ZAkJKHZvaWQpOwoKCXByaXZhdGU6CgkJc3RhdGljIHZvaWQgCQkJQ29uZGl0aW9uYWxCcmVhawkJ KHZvaWQpOwoJCXN0YXRpYyBCb29sIAkJCU11c3RCcmVha09uVHJhcFN5c3RlbUNhbGwJKHVpbnQx NiB0cmFwV29yZCwgdWludDE2IHJlZk51bSk7CgoJCXN0YXRpYyB2b2lkIAkJCURvQ2hlY2tTdGVw U3B5CQkJKGVtdXB0ciB3cml0ZUFkZHJlc3MsIGludCB3cml0ZUJ5dGVzKTsKCQlzdGF0aWMgdm9p ZCAJCQlEb0NoZWNrV2F0Y2hwb2ludAkJKGVtdXB0ciB3cml0ZUFkZHJlc3MsIGludCB3cml0ZUJ5 dGVzKTsKCgkJc3RhdGljIHZvaWQgCQkJRXZlbnRDYWxsYmFjawkJCShDU29ja2V0KiBzLCBpbnQg ZXZlbnQpOwoJCXN0YXRpYyB2b2lkIAkJCUNyZWF0ZUxpc3RlbmluZ1NvY2tldHMJKHZvaWQpOwoJ CXN0YXRpYyB2b2lkIAkJCURlbGV0ZUxpc3RlbmluZ1NvY2tldHMJKHZvaWQpOwp9OwoKCiAKIAog CgppbmxpbmUgdm9pZCBEZWJ1Zzo6Q2hlY2tTdGVwU3B5IChlbXVwdHIgd3JpdGVBZGRyZXNzLCBp bnQgd3JpdGVCeXRlcykKewoJaWYgKGdEZWJ1Z2dlckdsb2JhbHMuc3RlcFNweSkKCXsKCQlEZWJ1 Zzo6RG9DaGVja1N0ZXBTcHkgKHdyaXRlQWRkcmVzcywgd3JpdGVCeXRlcyk7Cgl9CgoJaWYgKGdE ZWJ1Z2dlckdsb2JhbHMud2F0Y2hFbmFibGVkKQoJewoJCURlYnVnOjpEb0NoZWNrV2F0Y2hwb2lu dCAod3JpdGVBZGRyZXNzLCB3cml0ZUJ5dGVzKTsKCX0KfQoKCgoKIyAxNyAiLi8uLi9TcmNTaGFy ZWQvTWV0YU1lbW9yeS5jcHAiIDIKCiMgMSAiLi4vU3JjU2hhcmVkL0hhcmR3YXJlL0VtQmFua1NS QU0uaCIgMQogCiAKCgoKCgoKCgoKCgoKCgpjbGFzcyBTZXNzaW9uRmlsZTsKCmV4dGVybiBlbXVw dHIJZ01lbW9yeVN0YXJ0OwoKCSAKZXh0ZXJuIHVpbnQzMglnUkFNQmFua19TaXplOwpleHRlcm4g dWludDMyCWdSQU1CYW5rX01hc2s7CmV4dGVybiB1aW50OCoJZ1JBTV9NZW1vcnk7CmV4dGVybiB1 aW50OCoJZ1JBTV9NZXRhTWVtb3J5OwoKCmNsYXNzIEVtQmFua1NSQU0KewoJcHVibGljOgoJCXN0 YXRpYyB2b2lkCQkJCUluaXRpYWxpemUJCQkoUkFNU2l6ZVR5cGUgcmFtU2l6ZSk7CgkJc3RhdGlj IHZvaWQJCQkJUmVzZXQJCQkJKEJvb2wgaGFyZHdhcmVSZXNldCk7CgkJc3RhdGljIHZvaWQJCQkJ U2F2ZQkJCQkoU2Vzc2lvbkZpbGUmKTsKCQlzdGF0aWMgdm9pZAkJCQlMb2FkCQkJCShTZXNzaW9u RmlsZSYpOwoJCXN0YXRpYyB2b2lkCQkJCURpc3Bvc2UJCQkJKHZvaWQpOwoKCQlzdGF0aWMgdm9p ZAkJCQlTZXRCYW5rSGFuZGxlcnMJCSh2b2lkKTsKCgkJc3RhdGljIHVpbnQzMgkJCUdldExvbmcJ CQkJKGVtdXB0ciBhZGRyZXNzKTsKCQlzdGF0aWMgdWludDMyCQkJR2V0V29yZAkJCQkoZW11cHRy IGFkZHJlc3MpOwoJCXN0YXRpYyB1aW50MzIJCQlHZXRCeXRlCQkJCShlbXVwdHIgYWRkcmVzcyk7 CgkJc3RhdGljIHZvaWQJCQkJU2V0TG9uZwkJCQkoZW11cHRyIGFkZHJlc3MsIHVpbnQzMiB2YWx1 ZSk7CgkJc3RhdGljIHZvaWQJCQkJU2V0V29yZAkJCQkoZW11cHRyIGFkZHJlc3MsIHVpbnQzMiB2 YWx1ZSk7CgkJc3RhdGljIHZvaWQJCQkJU2V0Qnl0ZQkJCQkoZW11cHRyIGFkZHJlc3MsIHVpbnQz MiB2YWx1ZSk7CgkJc3RhdGljIGludAkJCQlWYWxpZEFkZHJlc3MJCShlbXVwdHIgYWRkcmVzcywg dWludDMyIHNpemUpOwoJCXN0YXRpYyB1aW50OCoJCQlHZXRSZWFsQWRkcmVzcwkJKGVtdXB0ciBh ZGRyZXNzKTsKCQlzdGF0aWMgdWludDgqCQkJR2V0TWV0YUFkZHJlc3MJCShlbXVwdHIgYWRkcmVz cyk7CgkJc3RhdGljIHZvaWQJCQkJQWRkT3Bjb2RlQ3ljbGVzCQkodm9pZCk7CgoJCXN0YXRpYyBl bXVwdHIJCQlHZXRNZW1vcnlTdGFydAkJKHZvaWQpIHsgcmV0dXJuIGdNZW1vcnlTdGFydDsgfQoK CXByaXZhdGU6CgkJc3RhdGljIHZvaWQJCQkJQWRkcmVzc0Vycm9yCQkoZW11cHRyIGFkZHJlc3Ms IGxvbmcgc2l6ZSwgQm9vbCBmb3JSZWFkKTsKCQlzdGF0aWMgdm9pZAkJCQlJbnZhbGlkQWNjZXNz CQkoZW11cHRyIGFkZHJlc3MsIGxvbmcgc2l6ZSwgQm9vbCBmb3JSZWFkKTsKCQlzdGF0aWMgdm9p ZAkJCQlQcm90ZWN0ZWRBY2Nlc3MJCShlbXVwdHIgYWRkcmVzcywgbG9uZyBzaXplLCBCb29sIGZv clJlYWQpOwp9OwoKCiMgMTggIi4vLi4vU3JjU2hhcmVkL01ldGFNZW1vcnkuY3BwIiAyCgoKCiMg MSAiLi4vU3JjU2hhcmVkL0VtTG93TWVtLmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKIyAxICIuLi9T cmNTaGFyZWQvRW1QYWxtU3RydWN0cy5oIiAxCiAKIAoKCgoKCgoKCgoKCgoKCgojIDEgIi4uL1Ny Y1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmkiIDEKIAogCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAog CiAKIAogCiAKCgogCiAKIAogCiAKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgogCiAKIAoKCgoKCgoKCgogCiAKIAoKCgoKCgoKCgoK IAogCiAKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKIAogCiAKCgoKCgoK CgogCiAKIAoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCgoKCiAKIAogCgoK CgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKCgog CiAKIAoKCgoKCgoKCgogCiAKIAoKCgoKCgoKCgogCiAKIAoKCgoKCgoKCgoKIAogCiAKCgoKCgoK CgoKIAogCiAKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKCgogCiAK IAoKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKIAogCiAKCgoKCgoKCgogCiAKIAoKCgoKCgoKCgoK CgoKIAogCiAKCgoKCgoKCgogCiAKIAoKCgoKCgoKCgogCiAKIAoKCgoKCgoKCiAKIAogCgoKCgoK CgoKIAogCiAKCgoKCgoKCgogCiAKIAoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKCgoK CgoKCgogCiAKIAoKCgoKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKCgog CiAKIAoKCgoKCgoKCgoKCgogCiAKIAoKCgoKCgoKCgogCiAKIAoKCgoKCgoKCgogCiAKIAoKCgoK CgoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKCgoKCgojIDYyNiAi Li4vU3JjU2hhcmVkL0VtUGFsbVN0cnVjdHMuaSIKCiAKIAogCgoKCgoKIyA2NDkgIi4uL1NyY1No YXJlZC9FbVBhbG1TdHJ1Y3RzLmkiCgogCiAKIAoKCgoKCgoKCgoKIAogCiAKCgoKCgojIDY5MiAi Li4vU3JjU2hhcmVkL0VtUGFsbVN0cnVjdHMuaSIKCiAKIAogCgoKCgoKIyA3MTUgIi4uL1NyY1No YXJlZC9FbVBhbG1TdHJ1Y3RzLmkiCgogCiAKIAoKCgoKCgoKCgogCiAKIAoKCgoKCgoKCiAKIAog CgoKCgoKIyA3NTYgIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmkiCgogCiAKIAoKCgoKCgoK CiAKIAogCgoKCgoKCgoKCgogCiAKIAoKCgoKCiMgODAzICIuLi9TcmNTaGFyZWQvRW1QYWxtU3Ry dWN0cy5pIgoKIAogCiAKCgoKCgoKCgoKIAogCiAKCgoKCgojIDg2MCAiLi4vU3JjU2hhcmVkL0Vt UGFsbVN0cnVjdHMuaSIKCiAKIAogCgoKCgoKCgoKCgoKCgogCiAKIAoKCgoKCiMgODk3ICIuLi9T cmNTaGFyZWQvRW1QYWxtU3RydWN0cy5pIgoKIAogCiAKCgoKCgoKCgogCiAKIAoKCgoKCiMgOTU5 ICIuLi9TcmNTaGFyZWQvRW1QYWxtU3RydWN0cy5pIgoKIAogCiAKCgoKCgoKCgoKCgoKCiAKIAog CgoKCgoKCgoKCgoKCiAKIAogCgoKCgoKIyAxMDEzICIuLi9TcmNTaGFyZWQvRW1QYWxtU3RydWN0 cy5pIgoKIAogCiAKCgoKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgojIDEyMDUgIi4uL1NyY1NoYXJl ZC9FbVBhbG1TdHJ1Y3RzLmkiCgogCiAKIAoKCgoKCgoKCiAKIAogCgoKCgoKIyAxMjQxICIuLi9T cmNTaGFyZWQvRW1QYWxtU3RydWN0cy5pIgoKIAogCiAKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoK CgoKIAogCiAKCgoKCgoKCgogCiAKIAoKCgoKCgoKCgoKCgogCiAKIAoKCgoKCgoKCgoKCgoKIAog CiAKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoK CiAKIAogCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCiAKIAogCgoKCgoKIyAxNDA0ICIuLi9TcmNT aGFyZWQvRW1QYWxtU3RydWN0cy5pIgoKIAogCiAKCgoKCgoKCgogCiAKIAoKCgoKCgoKCiAKIAog CgoKCgoKIyAxNDQ1ICIuLi9TcmNTaGFyZWQvRW1QYWxtU3RydWN0cy5pIgoKIAogCiAKIAoKCgoK CiMgMTQ2MyAiLi4vU3JjU2hhcmVkL0VtUGFsbVN0cnVjdHMuaSIKCiAKIAogCiAKCgoKCgojIDE0 ODMgIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmkiCgogCiAKIAogCgoKCgoKCgoKCgoKIAog CiAKCgoKCgoKCgogCiAKIAoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCgoKCgogCiAKIAoKCgoKCiMg MTU2MCAiLi4vU3JjU2hhcmVkL0VtUGFsbVN0cnVjdHMuaSIKCiAKIAogCgoKCgoKIyAxNTc5ICIu Li9TcmNTaGFyZWQvRW1QYWxtU3RydWN0cy5pIgoKIAogCiAKCgoKCgoKCgoKCiAKIAogCgoKCgoK CgoKCiAKIAogCgoKCgoKIyAxNjMyICIuLi9TcmNTaGFyZWQvRW1QYWxtU3RydWN0cy5pIgoKIAog CiAKCgoKCgoKCgoKCgoKIAogCiAKCgoKCgojIDE2NzEgIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1 Y3RzLmkiCgogCiAKIAoKCgoKCiMgMTcwMiAiLi4vU3JjU2hhcmVkL0VtUGFsbVN0cnVjdHMuaSIK CiAKIAogCgoKCgoKIyAxNzE5ICIuLi9TcmNTaGFyZWQvRW1QYWxtU3RydWN0cy5pIgoKIAogCiAK CgoKCgoKCgogCiAKIAoKCgoKCiMgMTc1MSAiLi4vU3JjU2hhcmVkL0VtUGFsbVN0cnVjdHMuaSIK CiAKIAogCgoKCgoKCgoKCiAKIAogCgoKCgoKIyAxNzk3ICIuLi9TcmNTaGFyZWQvRW1QYWxtU3Ry dWN0cy5pIgoKIAogCiAKCgoKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCgoKCgogCiAKIAoKCgoK CgoKCgoKCgogCiAKIAoKCgoKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoK CgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCgogCiAK IAoKCgoKCgoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoK CgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKCgogCiAK IAoKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgogCiAKIAoKCgoKCiMgMjA2NCAiLi4vU3JjU2hhcmVk L0VtUGFsbVN0cnVjdHMuaSIKCiAKIAogCgoKCgoKIyAyMTA2ICIuLi9TcmNTaGFyZWQvRW1QYWxt U3RydWN0cy5pIgoKIAogCiAKCgoKCgojIDIxODIgIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3Rz LmkiCgogCiAKIAoKCgoKCiMgMjIwNCAiLi4vU3JjU2hhcmVkL0VtUGFsbVN0cnVjdHMuaSIKCiAK IAogCgoKCgoKCgoKIAogCiAKCgoKCgojIDIyMzMgIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3Rz LmkiCgogCiAKIAoKCgoKCgoKCgoKCgogCiAKIAoKCgoKCiMgMjI3MSAiLi4vU3JjU2hhcmVkL0Vt UGFsbVN0cnVjdHMuaSIKCiAKIAogCgoKCgoKIyAyMjk4ICIuLi9TcmNTaGFyZWQvRW1QYWxtU3Ry dWN0cy5pIgoKIAogCiAKCgoKCgojIDIzMjMgIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmki CgogCiAKIAoKCgoKCiMgMjM1MCAiLi4vU3JjU2hhcmVkL0VtUGFsbVN0cnVjdHMuaSIKCiAKIAog CgoKCgoKIyAyMzcxICIuLi9TcmNTaGFyZWQvRW1QYWxtU3RydWN0cy5pIgoKIAogCiAKCgoKCgoK CgoKCgogCiAKIAoKCgoKCgoKCgoKCgoKIAogCiAKCgoKCgojIDI0MjYgIi4uL1NyY1NoYXJlZC9F bVBhbG1TdHJ1Y3RzLmkiCgogCiAKIAoKCgoKCiMgMjQ0MyAiLi4vU3JjU2hhcmVkL0VtUGFsbVN0 cnVjdHMuaSIKCiAKIAogCgoKCgoKCgoKCgoKCgogCiAKIAoKCgoKCiMgMjQ3OSAiLi4vU3JjU2hh cmVkL0VtUGFsbVN0cnVjdHMuaSIKCiAKIAogCgoKCgoKCgoKCgogCiAKIAoKCgoKCiMgMjUxMCAi Li4vU3JjU2hhcmVkL0VtUGFsbVN0cnVjdHMuaSIKCiAKIAogCgoKCgoKCgoKCiAKIAogCgoKCgoK CgoKCgoKIAogCiAKCgoKCgojIDI1NTQgIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmkiCgog CiAKIAoKCgoKCgoKCgoKCgogCiAKIAoKCgoKCgoKCgogCiAKIAoKCgoKCgoKCgogCiAKIAoKCgoK CgoKCgoKIAogCiAKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCiAKIAog CgoKCgoKCgoKCgogCiAKIAoKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCgogCiAKIAoKCgoKCgoK CgogCiAKIAoKCgoKCgoKCgoKIAogCiAKCgoKCgojIDI3MjkgIi4uL1NyY1NoYXJlZC9FbVBhbG1T dHJ1Y3RzLmkiCgogCiAKIAoKCgoKCgoKCgoKCgogCiAKIAoKCgoKCiMgMjc2MSAiLi4vU3JjU2hh cmVkL0VtUGFsbVN0cnVjdHMuaSIKCiAKIAogCgoKCgoKCgoKCgogCiAKIAoKCgoKCgoKCgoKCgoK IAogCiAKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCgogCiAKIAoKCgoK CgoKCgoKIAogCiAKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKIAogCiAKCgoKCgojIDI4ODggIi4u L1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmkiCgogCiAKIAoKCgoKCgoKCgoKCgogCiAKIAoKCgoK CgoKCgogCiAKIAoKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKIAoKCgoKCiAKIAogCgoKCgoKIyAy OTgxICIuLi9TcmNTaGFyZWQvRW1QYWxtU3RydWN0cy5pIgoKIAogCiAKCgoKCgojIDMwMDQgIi4u L1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmkiCgogCiAKIAoKCgoKCgoKCgoKCgogCiAKIAoKCgoK CgoKCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCiAK IAogCgoKCgoKCgoKCgogCiAKIAoKCgoKCiMgMzExMSAiLi4vU3JjU2hhcmVkL0VtUGFsbVN0cnVj dHMuaSIKCiAKIAogCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCgoKIAogCiAKCgoKCgoKCgoKIAog CiAKCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKCiAKIAogCgoKCgoKCgoKIAogCiAKCgoKCgojIDMy MDcgIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmkiCgogCiAKIAoKCgoKCiMgMzIyNiAiLi4v U3JjU2hhcmVkL0VtUGFsbVN0cnVjdHMuaSIKCiAKIAogCgoKCgoKCgoKCgoKCiAKIAogCiAKIAoK CgoKCiMgMzI2MyAiLi4vU3JjU2hhcmVkL0VtUGFsbVN0cnVjdHMuaSIKCiAKIAogCiAKIAogCiAK CgoKCgojIDMzMDYgIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmkiCgogCiAKIAogCgoKCgoK IyAzMzUyICIuLi9TcmNTaGFyZWQvRW1QYWxtU3RydWN0cy5pIgoKIAogCiAKIAogCgoKCgoKIyAz NDAxICIuLi9TcmNTaGFyZWQvRW1QYWxtU3RydWN0cy5pIgoKIAogCiAKIAogCgoKCgoKIyAzNDU0 ICIuLi9TcmNTaGFyZWQvRW1QYWxtU3RydWN0cy5pIgoKIAogCiAKIAogCgoKCgoKIyAzNTA3ICIu Li9TcmNTaGFyZWQvRW1QYWxtU3RydWN0cy5pIgoKIAogCiAKIAogCgoKCgoKIyAzNTYwICIuLi9T cmNTaGFyZWQvRW1QYWxtU3RydWN0cy5pIgoKIAogCiAKIAogCiAKIAoKCgoKCiMgMzYxOSAiLi4v U3JjU2hhcmVkL0VtUGFsbVN0cnVjdHMuaSIKCiAKIAogCgoKCgoKCgoKCgoKCiAKIAogCgoKCgoK CgoKIAogCiAKCgoKCgojIDM2NjUgIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmkiCgogCiAK IAoKCgoKCgoKCgogCiAKIAoKCgoKCiMgMzY5NCAiLi4vU3JjU2hhcmVkL0VtUGFsbVN0cnVjdHMu aSIKCiAKIAogCgoKCgoKCgoKCgoKCiMgMTggIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmgi IDIKCiMgMSAiLi4vU3JjU2hhcmVkL0hvc3RDb250cm9sLmgiIDEKIAogCgoKCgoKCgoKCgoKCgoK CgoKCgoKZXh0ZXJuICJDIiB7CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCSAKCgoK CgoKCgoKCSAKCgoKCgoKCgoKCgkgCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCSAK CgoKIAoKCgoKCgoJIAoKCiAKCiAKIAogCgoJIAogCiAKIAoKCSAKIAogCiAKIAogCiAKIAogCiAK IAoKIAogCiAKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKCSAKIAogCgoKIAoKCSAK IAoKCgkgCgoKCgkgCgoKCgoKCgoKCSAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgkgCgoKCgoKCSAK CgoKCgoJIAoKCgoKCgoKCgoKCgkgCgoKCgoKCgoKCgoJIAoKCgoKCgkgCgoKCgoKCgkgCgoKCgoK CgoKCSAKCnR5cGVkZWYgVUludDE2CUhvc3RDb250cm9sU2VsZWN0b3JUeXBlOwp0eXBlZGVmIElu dDMyCUhvc3RCb29sVHlwZTsKdHlwZWRlZiBJbnQzMglIb3N0Q2xvY2tUeXBlOwp0eXBlZGVmIElu dDMyCUhvc3RFcnJUeXBlOwp0eXBlZGVmIEludDMyCUhvc3RJRFR5cGU7CnR5cGVkZWYgSW50MzIJ SG9zdFBsYXRmb3JtVHlwZTsKdHlwZWRlZiBJbnQzMglIb3N0U2lnbmFsVHlwZTsKdHlwZWRlZiBJ bnQzMglIb3N0U2l6ZVR5cGU7CnR5cGVkZWYgSW50MzIJSG9zdFRpbWVUeXBlOwoKCgkgCgpzdHJ1 Y3QgSG9zdERJUlR5cGUKewoJbG9uZwlfZmllbGQ7Cn07Cgp0eXBlZGVmIHN0cnVjdCBIb3N0RElS VHlwZSBIb3N0RElSVHlwZTsKCgoJIAoKCgpzdHJ1Y3QgSG9zdERpckVudFR5cGUKewoJY2hhcglk X25hbWVbMjU1ICArIDFdOwp9OwoKdHlwZWRlZiBzdHJ1Y3QgSG9zdERpckVudFR5cGUgSG9zdERp ckVudFR5cGU7CgoKCSAKCnN0cnVjdCBIb3N0RklMRVR5cGUKewoJbG9uZwlfZmllbGQ7Cn07Cgp0 eXBlZGVmIHN0cnVjdCBIb3N0RklMRVR5cGUgSG9zdEZJTEVUeXBlOwoKCgkgCgpzdHJ1Y3QgSG9z dEdyZW1saW5JbmZvVHlwZQp7Cglsb25nCQlmRmlyc3RHcmVtbGluOwoJbG9uZwkJZkxhc3RHcmVt bGluOwoJbG9uZwkJZlNhdmVGcmVxdWVuY3k7Cglsb25nCQlmU3dpdGNoRGVwdGg7Cglsb25nCQlm TWF4RGVwdGg7CgljaGFyCQlmQXBwTmFtZXNbMjAwXTsJIAoJCQkJCQkJCSAKCQkJCQkJCQkgCgkJ CQkJCQkJIAoJCQkJCQkJCSAKCQkJCQkJCQkgCn07Cgp0eXBlZGVmIHN0cnVjdCBIb3N0R3JlbWxp bkluZm9UeXBlIEhvc3RHcmVtbGluSW5mb1R5cGU7CgoKCSAKCSAKCSAKCSAKCnN0cnVjdCBIb3N0 U3RhdFR5cGUKewoJdW5zaWduZWQgbG9uZwlzdF9kZXZfOwoJdW5zaWduZWQgbG9uZwlzdF9pbm9f OwoJdW5zaWduZWQgbG9uZwlzdF9tb2RlXzsKCXVuc2lnbmVkIGxvbmcJc3RfbmxpbmtfOwoJdW5z aWduZWQgbG9uZwlzdF91aWRfOwoJdW5zaWduZWQgbG9uZwlzdF9naWRfOwoJdW5zaWduZWQgbG9u ZwlzdF9yZGV2XzsKCUhvc3RUaW1lVHlwZQlzdF9hdGltZV87CglIb3N0VGltZVR5cGUJc3RfbXRp bWVfOwoJSG9zdFRpbWVUeXBlCXN0X2N0aW1lXzsKCXVuc2lnbmVkIGxvbmcJc3Rfc2l6ZV87Cgl1 bnNpZ25lZCBsb25nCXN0X2Jsa3NpemVfOwoJdW5zaWduZWQgbG9uZwlzdF9ibG9ja3NfOwoJdW5z aWduZWQgbG9uZwlzdF9mbGFnc187Cn07Cgp0eXBlZGVmIHN0cnVjdCBIb3N0U3RhdFR5cGUgSG9z dFN0YXRUeXBlOwoKCgkgCgkgCgkgCgpzdHJ1Y3QgSG9zdFRtVHlwZQp7Cglsb25nCXRtX3NlY187 CSAKCWxvbmcJdG1fbWluXzsJIAoJbG9uZwl0bV9ob3VyXzsJIAoJbG9uZwl0bV9tZGF5XzsJIAoJ bG9uZwl0bV9tb25fOwkgCglsb25nCXRtX3llYXJfOwkgCglsb25nCXRtX3dkYXlfOwkgCglsb25n CXRtX3lkYXlfOwkgCglsb25nCXRtX2lzZHN0XzsJIAp9OwoKdHlwZWRlZiBzdHJ1Y3QgSG9zdFRt VHlwZSBIb3N0VG1UeXBlOwoKCgkgCgkgCgkgCgpzdHJ1Y3QgSG9zdFVUaW1lVHlwZQp7CglIb3N0 VGltZVR5cGUJY3J0aW1lXzsJIAoJSG9zdFRpbWVUeXBlCWFjdGltZV87CSAKCUhvc3RUaW1lVHlw ZQltb2R0aW1lXzsJIAp9OwoKdHlwZWRlZiBzdHJ1Y3QgSG9zdFVUaW1lVHlwZSBIb3N0VVRpbWVU eXBlOwoKCgkgCgp0eXBlZGVmIEhvc3RDb250cm9sU2VsZWN0b3JUeXBlCUhvc3RDb250cm9sVHJh cE51bWJlcjsKdHlwZWRlZiBIb3N0Qm9vbFR5cGUJCQlIb3N0Qm9vbDsKdHlwZWRlZiBIb3N0RXJy VHlwZQkJCQlIb3N0RXJyOwp0eXBlZGVmIEhvc3RJRFR5cGUJCQkJSG9zdElEOwp0eXBlZGVmIEhv c3RQbGF0Zm9ybVR5cGUJCUhvc3RQbGF0Zm9ybTsKdHlwZWRlZiBIb3N0U2lnbmFsVHlwZQkJCUhv c3RTaWduYWw7CnR5cGVkZWYgSG9zdEZJTEVUeXBlCQkJSG9zdEZJTEU7CgoKCgoJCgoKCgoKCmVu dW0JIAp7Cglob3N0RXJyTm9uZSA9IDAsCgoJaG9zdEVyckJhc2UgPSAweDFDMDAgLAoKCWhvc3RF cnJVbmtub3duR2VzdGFsdFNlbGVjdG9yLAoJaG9zdEVyckRpc2tFcnJvciwKCWhvc3RFcnJPdXRP Zk1lbW9yeSwKCWhvc3RFcnJNZW1SZWFkT3V0T2ZSYW5nZSwKCWhvc3RFcnJNZW1Xcml0ZU91dE9m UmFuZ2UsCglob3N0RXJyTWVtSW52YWxpZFB0ciwKCWhvc3RFcnJJbnZhbGlkUGFyYW1ldGVyLAoJ aG9zdEVyclRpbWVvdXQsCglob3N0RXJySW52YWxpZERldmljZVR5cGUsCglob3N0RXJySW52YWxp ZFJBTVNpemUsCglob3N0RXJyRmlsZU5vdEZvdW5kLAoJaG9zdEVyclJQQ0NhbGwsCQkJCSAKCQkJ CQkJCQkgCgkJCQkJCQkJIAoJCQkJCQkJCSAKCQkJCQkJCQkgCgkJCQkJCQkJIAoJCQkJCQkJCSAK CWhvc3RFcnJTZXNzaW9uUnVubmluZywJCSAKCQkJCQkJCQkgCglob3N0RXJyU2Vzc2lvbk5vdFJ1 bm5pbmcsCSAKCWhvc3RFcnJOb1NpZ25hbFdhaXRlcnMsCQkgCglob3N0RXJyU2Vzc2lvbk5vdFBh dXNlZCwJIAoJCQkJCQkJCSAKCQoJaG9zdEVyclBlcm1pc3Npb25zLAoJaG9zdEVyckZpbGVOYW1l VG9vTG9uZywKCWhvc3RFcnJOb3RBRGlyZWN0b3J5LAoJaG9zdEVyclRvb01hbnlGaWxlcywKCWhv c3RFcnJGaWxlVG9vQmlnLAoJaG9zdEVyclJlYWRPbmx5RlMsCglob3N0RXJySXNEaXJlY3Rvcnks Cglob3N0RXJyRXhpc3RzLAoJaG9zdEVyck9wTm90QXZhaWxhYmxlLAoJaG9zdEVyckRpck5vdEVt cHR5LAoJaG9zdEVyckRpc2tGdWxsLAoJaG9zdEVyclByb2ZpbGluZ05vdFJlYWR5LAoJaG9zdEVy clVua25vd25FcnJvcgp9OwoKCmVudW0JIAp7Cglob3N0SURQYWxtT1MsCQkJIAoJaG9zdElEUGFs bU9TRW11bGF0b3IsCSAKCWhvc3RJRFBhbG1PU1NpbXVsYXRvcgkgCn07CgoKZW51bQkgCnsKCWhv c3RQbGF0Zm9ybVBhbG1PUywKCWhvc3RQbGF0Zm9ybVdpbmRvd3MsCglob3N0UGxhdGZvcm1NYWNp bnRvc2gsCglob3N0UGxhdGZvcm1Vbml4Cn07CgplbnVtCSAKewoJaG9zdFNpZ25hbFJlc2VydmVk LAoJaG9zdFNpZ25hbElkbGUsCglob3N0U2lnbmFsUXVpdCwKIyA0OTQgIi4uL1NyY1NoYXJlZC9I b3N0Q29udHJvbC5oIgoKCWhvc3RTaWduYWxVc2VyCT0gMHg0MDAwCSAKfTsKCmVudW0JIAp7Cglo b3N0RmlsZUF0dHJSZWFkT25seSA9IDEsCglob3N0RmlsZUF0dHJIaWRkZW4gPSAyLAoJaG9zdEZp bGVBdHRyU3lzdGVtID0gNAp9OwoKIAogCgoKCgoKIAoKCgoKCgogCgoKCgoKCiMgNTM0ICIuLi9T cmNTaGFyZWQvSG9zdENvbnRyb2wuaCIKCgoKIAogCiAKCkludDMyCQkJCUhvc3RHZXRIb3N0VmVy c2lvbih2b2lkKQoJCQkJCQkgIDsKCkhvc3RJRFR5cGUJCQlIb3N0R2V0SG9zdElEKHZvaWQpCgkJ CQkJCSAgOwoKSG9zdFBsYXRmb3JtVHlwZQlIb3N0R2V0SG9zdFBsYXRmb3JtKHZvaWQpCgkJCQkJ CSAgOwoKSG9zdEJvb2xUeXBlCQlIb3N0SXNTZWxlY3RvckltcGxlbWVudGVkKGxvbmcgc2VsZWN0 b3IpCgkJCQkJCSAgOwoKSG9zdEVyclR5cGUJCQlIb3N0R2VzdGFsdChsb25nIGdlc3RTZWwsIGxv bmcqIHJlc3BvbnNlKQoJCQkJCQkgIDsKCkhvc3RCb29sVHlwZQkJSG9zdElzQ2FsbGluZ1RyYXAo dm9pZCkKCQkJCQkJICA7CgoKIAogCiAKCkhvc3RFcnJUeXBlCQkJSG9zdFByb2ZpbGVJbml0KGxv bmcgbWF4Q2FsbHMsIGxvbmcgbWF4RGVwdGgpCgkJCQkJCSAgOwoKSG9zdEVyclR5cGUJCQlIb3N0 UHJvZmlsZURldGFpbEZuKHZvaWQqIGFkZHIsIEhvc3RCb29sVHlwZSBsb2dEZXRhaWxzKQoJCQkJ CQkgIDsKCkhvc3RFcnJUeXBlCQkJSG9zdFByb2ZpbGVTdGFydCh2b2lkKQoJCQkJCQkgIDsKCkhv c3RFcnJUeXBlCQkJSG9zdFByb2ZpbGVTdG9wKHZvaWQpCgkJCQkJCSAgOwoKSG9zdEVyclR5cGUJ CQlIb3N0UHJvZmlsZUR1bXAoY29uc3QgY2hhciogZmlsZW5hbWVQKQoJCQkJCQkgIDsKCkhvc3RF cnJUeXBlCQkJSG9zdFByb2ZpbGVDbGVhbnVwKHZvaWQpCgkJCQkJCSAgOwoKbG9uZwkJCQlIb3N0 UHJvZmlsZUdldEN5Y2xlcyh2b2lkKQoJCQkJCQkgIDsKCgogCiAKIAoKbG9uZwkJCQlIb3N0RXJy Tm8odm9pZCkKCQkJCQkJICA7CgoKbG9uZwkJCQlIb3N0RkNsb3NlKEhvc3RGSUxFVHlwZSogZmls ZVApCgkJCQkJCSAgOwoKbG9uZwkJCQlIb3N0RkVPRihIb3N0RklMRVR5cGUqIGZpbGVQKQoJCQkJ CQkgIDsKCmxvbmcJCQkJSG9zdEZFcnJvcihIb3N0RklMRVR5cGUqIGZpbGVQKQoJCQkJCQkgIDsK CmxvbmcJCQkJSG9zdEZGbHVzaChIb3N0RklMRVR5cGUqIGZpbGVQKQoJCQkJCQkgIDsKCmxvbmcJ CQkJSG9zdEZHZXRDKEhvc3RGSUxFVHlwZSogZmlsZVApCgkJCQkJCSAgOwoKbG9uZwkJCQlIb3N0 RkdldFBvcyhIb3N0RklMRVR5cGUqIGZpbGVQLCBsb25nKiBwb3NQKQoJCQkJCQkgIDsKCmNoYXIq CQkJCUhvc3RGR2V0UyhjaGFyKiBzLCBsb25nIG4sIEhvc3RGSUxFVHlwZSogZmlsZVApCgkJCQkJ CSAgOwoKSG9zdEZJTEVUeXBlKgkJSG9zdEZPcGVuKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNo YXIqIG1vZGUpCgkJCQkJCSAgOwoKbG9uZwkJCQlIb3N0RlByaW50RihIb3N0RklMRVR5cGUqIGZp bGVQLCBjb25zdCBjaGFyKiBmbXQsIC4uLikKCQkJCQkJICA7Cgpsb25nCQkJCUhvc3RGUHV0Qyhs b25nIGMsIEhvc3RGSUxFVHlwZSogZmlsZVApCgkJCQkJCSAgOwoKbG9uZwkJCQlIb3N0RlB1dFMo Y29uc3QgY2hhciogcywgSG9zdEZJTEVUeXBlKiBmaWxlUCkKCQkJCQkJICA7Cgpsb25nCQkJCUhv c3RGUmVhZCh2b2lkKiBidWZmZXIsIGxvbmcgc2l6ZSwgbG9uZyBjb3VudCwgSG9zdEZJTEVUeXBl KiBmaWxlUCkKCQkJCQkJICA7CgpIb3N0RklMRVR5cGUqCQlIb3N0RlJlb3Blbihjb25zdCBjaGFy KiBuYW1lLCBjb25zdCBjaGFyKiBtb2RlLCBIb3N0RklMRVR5cGUqIGZpbGVQKQoJCQkJCQkgIDsK CmxvbmcJCQkJSG9zdEZTY2FuRihIb3N0RklMRVR5cGUqIGZpbGVQLCBjb25zdCBjaGFyKiBmbXQs IC4uLikKCQkJCQkJICA7Cgpsb25nCQkJCUhvc3RGU2VlayhIb3N0RklMRVR5cGUqIGZpbGVQLCBs b25nIG9mZnNldCwgbG9uZyBvcmlnaW4pCgkJCQkJCSAgOwoKbG9uZwkJCQlIb3N0RlNldFBvcyhI b3N0RklMRVR5cGUqIGZpbGVQLCBsb25nKiBwb3MpCgkJCQkJCSAgOwoKbG9uZwkJCQlIb3N0RlRl bGwoSG9zdEZJTEVUeXBlKiBmaWxlUCkKCQkJCQkJICA7Cgpsb25nCQkJCUhvc3RGV3JpdGUoY29u c3Qgdm9pZCogYnVmZmVyLCBsb25nIHNpemUsIGxvbmcgY291bnQsIEhvc3RGSUxFVHlwZSogZmls ZVApCgkJCQkJCSAgOwoKbG9uZwkJCQlIb3N0UmVtb3ZlKGNvbnN0IGNoYXIqIG5hbWVQKQoJCQkJ CQkgIDsKCmxvbmcJCQkJSG9zdFJlbmFtZShjb25zdCBjaGFyKiBvbGROYW1lUCwgY29uc3QgY2hh ciogbmV3TmFtZVApCgkJCQkJCSAgOwoKSG9zdEZJTEVUeXBlKgkJSG9zdFRtcEZpbGUodm9pZCkK CQkJCQkJICA7CgpjaGFyKgkJCQlIb3N0VG1wTmFtKGNoYXIqIG5hbWVQKQoJCQkJCQkgIDsKCmNo YXIqCQkJCUhvc3RHZXRFbnYoY29uc3QgY2hhciogbmFtZVApCgkJCQkJCSAgOwoKCnZvaWQqCQkJ CUhvc3RNYWxsb2MobG9uZyBzaXplKQoJCQkJCQkgIDsKCnZvaWQqCQkJCUhvc3RSZWFsbG9jKHZv aWQqIHAsIGxvbmcgc2l6ZSkKCQkJCQkJICA7Cgp2b2lkCQkJCUhvc3RGcmVlKHZvaWQqIHApCgkJ CQkJCSAgOwoKCmNoYXIqCQkJCUhvc3RBc2NUaW1lKGNvbnN0IEhvc3RUbVR5cGUqKQoJCQkJCQkg IDsKCkhvc3RDbG9ja1R5cGUJCUhvc3RDbG9jayh2b2lkKQoJCQkJCQkgIDsKCmNoYXIqCQkJCUhv c3RDVGltZShjb25zdCBIb3N0VGltZVR5cGUqKQoJCQkJCQkgIDsKCiAKIAoKSG9zdFRtVHlwZSoJ CQlIb3N0R01UaW1lKGNvbnN0IEhvc3RUaW1lVHlwZSopCgkJCQkJCSAgOwoKSG9zdFRtVHlwZSoJ CQlIb3N0TG9jYWxUaW1lKGNvbnN0IEhvc3RUaW1lVHlwZSopCgkJCQkJCSAgOwoKSG9zdFRpbWVU eXBlCQlIb3N0TWtUaW1lKEhvc3RUbVR5cGUqKQoJCQkJCQkgIDsKCkhvc3RTaXplVHlwZQkJSG9z dFN0ckZUaW1lKGNoYXIqLCBIb3N0U2l6ZVR5cGUsIGNvbnN0IGNoYXIqLCBjb25zdCBIb3N0VG1U eXBlKikKCQkJCQkJICA7CgpIb3N0VGltZVR5cGUJCUhvc3RUaW1lKEhvc3RUaW1lVHlwZSopCgkJ CQkJCSAgOwoKCmxvbmcJCQkJSG9zdE1rRGlyKGNvbnN0IGNoYXIqKQoJCQkJCQkgIDsKCmxvbmcJ CQkJSG9zdFJtRGlyKGNvbnN0IGNoYXIqKQoJCQkJCQkgIDsKCkhvc3RESVJUeXBlKgkJSG9zdE9w ZW5EaXIoY29uc3QgY2hhciopCgkJCQkJCSAgOwoKSG9zdERpckVudFR5cGUqCQlIb3N0UmVhZERp cihIb3N0RElSVHlwZSopCgkJCQkJCSAgOwoKbG9uZwkJCQlIb3N0Q2xvc2VEaXIoSG9zdERJUlR5 cGUqKQoJCQkJCQkgIDsKCgpsb25nCQkJCUhvc3RTdGF0KGNvbnN0IGNoYXIqLCBIb3N0U3RhdFR5 cGUqKQoJCQkJCQkgIDsKCmxvbmcJCQkJSG9zdFRydW5jYXRlKGNvbnN0IGNoYXIqLCBsb25nKQoJ CQkJCQkgIDsKCgpsb25nCQkJCUhvc3RVVGltZSAoY29uc3QgY2hhciosIEhvc3RVVGltZVR5cGUq KQoJCQkJCQkgIDsKCmxvbmcJCQkJSG9zdEdldEZpbGVBdHRyKGNvbnN0IGNoYXIqLCBsb25nKikK CQkJCQkJICA7Cgpsb25nCQkJCUhvc3RTZXRGaWxlQXR0cihjb25zdCBjaGFyKiwgbG9uZykKCQkJ CQkJICA7CgoKIAogCiAKCkhvc3RCb29sVHlwZQkJSG9zdEdyZW1saW5Jc1J1bm5pbmcodm9pZCkK CQkJCQkJICA7Cgpsb25nCQkJCUhvc3RHcmVtbGluTnVtYmVyKHZvaWQpCgkJCQkJCSAgOwoKbG9u ZwkJCQlIb3N0R3JlbWxpbkNvdW50ZXIodm9pZCkKCQkJCQkJICA7Cgpsb25nCQkJCUhvc3RHcmVt bGluTGltaXQodm9pZCkKCQkJCQkJICA7CgpIb3N0RXJyVHlwZQkJCUhvc3RHcmVtbGluTmV3KGNv bnN0IEhvc3RHcmVtbGluSW5mb1R5cGUqKQoJCQkJCQkgIDsKCgogCiAKIAoKSG9zdEVyclR5cGUJ CQlIb3N0SW1wb3J0RmlsZShjb25zdCBjaGFyKiBmaWxlTmFtZSwgbG9uZyBjYXJkTnVtKQoJCQkJ CQkgIDsKCkhvc3RFcnJUeXBlCQkJSG9zdEltcG9ydEZpbGVXaXRoSUQoY29uc3QgY2hhciogZmls ZU5hbWUsIGxvbmcgY2FyZE51bSwgTG9jYWxJRCogbmV3SURQKQoJCQkJCQkgIDsKCkhvc3RFcnJU eXBlCQkJSG9zdEV4cG9ydEZpbGUoY29uc3QgY2hhciogZmlsZU5hbWUsIGxvbmcgY2FyZE51bSwg Y29uc3QgY2hhciogZGJOYW1lKQoJCQkJCQkgIDsKCkhvc3RFcnJUeXBlCQkJSG9zdFNhdmVTY3Jl ZW4oY29uc3QgY2hhciogZmlsZU5hbWUpCgkJCQkJCSAgOwoKCSAKCSAKCkVycgkJCQkJSG9zdEV4 Z0xpYk9wZW4JCQkoVUludDE2IGxpYlJlZk51bSkKCQkJCQkJICA7CgpFcnIJCQkJCUhvc3RFeGdM aWJDbG9zZQkJCShVSW50MTYgbGliUmVmTnVtKQoJCQkJCQkgIDsKCkVycgkJCQkJSG9zdEV4Z0xp YlNsZWVwCQkJKFVJbnQxNiBsaWJSZWZOdW0pCgkJCQkJCSAgOwoKRXJyCQkJCQlIb3N0RXhnTGli V2FrZQkJCShVSW50MTYgbGliUmVmTnVtKQoJCQkJCQkgIDsKCkJvb2xlYW4JCQkJSG9zdEV4Z0xp YkhhbmRsZUV2ZW50CShVSW50MTYgbGliUmVmTnVtLCB2b2lkKiBldmVudFApCgkJCQkJCSAgOwoK RXJyCSAJCQkJSG9zdEV4Z0xpYkNvbm5lY3QJCShVSW50MTYgbGliUmVmTnVtLCB2b2lkKiBleGdT b2NrZXRQKQoJCQkJCQkgIDsKCkVycgkJCQkJSG9zdEV4Z0xpYkFjY2VwdAkJKFVJbnQxNiBsaWJS ZWZOdW0sIHZvaWQqIGV4Z1NvY2tldFApCgkJCQkJCSAgOwoKRXJyCQkJCQlIb3N0RXhnTGliRGlz Y29ubmVjdAkoVUludDE2IGxpYlJlZk51bSwgdm9pZCogZXhnU29ja2V0UCxFcnIgZXJyb3IpCgkJ CQkJCSAgOwoKRXJyCQkJCQlIb3N0RXhnTGliUHV0CQkJKFVJbnQxNiBsaWJSZWZOdW0sIHZvaWQq IGV4Z1NvY2tldFApCgkJCQkJCSAgOwoKRXJyCQkJCQlIb3N0RXhnTGliR2V0CQkJKFVJbnQxNiBs aWJSZWZOdW0sIHZvaWQqIGV4Z1NvY2tldFApCgkJCQkJCSAgOwoKVUludDMyIAkJCQlIb3N0RXhn TGliU2VuZAkJCShVSW50MTYgbGliUmVmTnVtLCB2b2lkKiBleGdTb2NrZXRQLCBjb25zdCB2b2lk KiBjb25zdCBidWZQLCBjb25zdCBVSW50MzIgYnVmTGVuLCBFcnIqIGVyclApCgkJCQkJCSAgOwoK VUludDMyIAkJCQlIb3N0RXhnTGliUmVjZWl2ZQkJKFVJbnQxNiBsaWJSZWZOdW0sIHZvaWQqIGV4 Z1NvY2tldFAsIHZvaWQqIGJ1ZlAsIGNvbnN0IFVJbnQzMiBidWZTaXplLCBFcnIqIGVyclApCgkJ CQkJCSAgOwoKRXJyIAkJCQlIb3N0RXhnTGliQ29udHJvbAkJKFVJbnQxNiBsaWJSZWZOdW0sIFVJ bnQxNiBvcCwgdm9pZCogdmFsdWVQLCBVSW50MTYqIHZhbHVlTGVuUCkKCQkJCQkJICA7CgpFcnIg CQkJCUhvc3RFeGdMaWJSZXF1ZXN0CQkoVUludDE2IGxpYlJlZk51bSwgdm9pZCogZXhnU29ja2V0 UCkKCQkJCQkJICA7CgoKIAogCiAKCkhvc3RCb29sVHlwZQkJSG9zdEdldFByZWZlcmVuY2UoY29u c3QgY2hhciosIGNoYXIqKQoJCQkJCQkgIDsKCnZvaWQJCQkJSG9zdFNldFByZWZlcmVuY2UoY29u c3QgY2hhciosIGNvbnN0IGNoYXIqKQoJCQkJCQkgIDsKCgogCiAKIAoKSG9zdEZJTEVUeXBlKgkJ SG9zdExvZ0ZpbGUodm9pZCkKCQkJCQkJICA7Cgp2b2lkCQkJCUhvc3RTZXRMb2dGaWxlU2l6ZShs b25nKQoJCQkJCQkgIDsKCgogCiAKIAoKSG9zdEVyclR5cGUJCQlIb3N0U2Vzc2lvbkNyZWF0ZShj b25zdCBjaGFyKiBkZXZpY2UsIGxvbmcgcmFtU2l6ZSwgY29uc3QgY2hhciogcm9tUGF0aCkKCQkJ CQkJICA7CgpIb3N0RXJyVHlwZQkJCUhvc3RTZXNzaW9uT3Blbihjb25zdCBjaGFyKiBwc2ZGaWxl TmFtZSkKCQkJCQkJICA7CgpIb3N0Qm9vbFR5cGUJCUhvc3RTZXNzaW9uU2F2ZShjb25zdCBjaGFy KiBzYXZlRmlsZU5hbWUpCgkJCQkJCSAgOwoKSG9zdEVyclR5cGUJCQlIb3N0U2Vzc2lvbkNsb3Nl KGNvbnN0IGNoYXIqIHNhdmVGaWxlTmFtZSkKCQkJCQkJICA7CgpIb3N0RXJyVHlwZQkJCUhvc3RT ZXNzaW9uUXVpdCh2b2lkKQoJCQkJCQkgIDsKCkhvc3RFcnJUeXBlCQkJSG9zdFNpZ25hbFNlbmQo SG9zdFNpZ25hbFR5cGUgc2lnbmFsTnVtYmVyKQoJCQkJCQkgIDsKCkhvc3RFcnJUeXBlCQkJSG9z dFNpZ25hbFdhaXQobG9uZyB0aW1lb3V0LCBIb3N0U2lnbmFsVHlwZSogc2lnbmFsTnVtYmVyKQoJ CQkJCQkgIDsKCkhvc3RFcnJUeXBlCQkJSG9zdFNpZ25hbFJlc3VtZSh2b2lkKQoJCQkJCQkgIDsK CgogCiAKIAoKdm9pZAkJCQlIb3N0VHJhY2VJbml0KHZvaWQpCgkJCQkJCSAgOwoKdm9pZAkJCQlI b3N0VHJhY2VDbG9zZSh2b2lkKQoJCQkJCQkgIDsKCnZvaWQJCQkJSG9zdFRyYWNlT3V0cHV0VCh1 bnNpZ25lZCBzaG9ydCwgY29uc3QgY2hhciosIC4uLikKCQkJCQkJICA7Cgp2b2lkCQkJCUhvc3RU cmFjZU91dHB1dFRMKHVuc2lnbmVkIHNob3J0LCBjb25zdCBjaGFyKiwgLi4uKQoJCQkJCQkgIDsK CnZvaWQJCQkJSG9zdFRyYWNlT3V0cHV0VlQodW5zaWduZWQgc2hvcnQsIGNvbnN0IGNoYXIqLCBj aGFyKiAgKQoJCQkJCQkgIDsKCnZvaWQJCQkJSG9zdFRyYWNlT3V0cHV0VlRMKHVuc2lnbmVkIHNo b3J0LCBjb25zdCBjaGFyKiwgY2hhciogICkKCQkJCQkJICA7Cgp2b2lkCQkJCUhvc3RUcmFjZU91 dHB1dEIodW5zaWduZWQgc2hvcnQsIGNvbnN0IHZvaWQqLCBIb3N0U2l6ZVR5cGUpCgkJCQkJCSAg OwoKCiAKIAogCgpIb3N0RXJyCQkJCUhvc3REYmdTZXREYXRhQnJlYWsgKFVJbnQzMiBhZGRyLCBV SW50MzIgc2l6ZSkKCQkJCQkJICA7CgpIb3N0RXJyCQkJCUhvc3REYmdDbGVhckRhdGFCcmVhayAo dm9pZCkKCQkJCQkJICA7CgoKIAogCiAKCmxvbmcJCQkJSG9zdFNsb3RNYXgodm9pZCkKCQkJCQkJ ICA7Cgpjb25zdCBjaGFyKgkJCUhvc3RTbG90Um9vdChsb25nIHNsb3RObykKCQkJCQkJICA7CgpI b3N0Qm9vbFR5cGUJCUhvc3RTbG90SGFzQ2FyZChsb25nIHNsb3RObykKCQkJCQkJICA7CgoKIAog CiAKCmNvbnN0IGNoYXIqCQkJSG9zdEdldEZpbGUoY29uc3QgY2hhciogcHJvbXB0LCBjb25zdCBj aGFyKiBkZWZhdWx0RGlyKQoJCQkJCQkgIDsKCmNvbnN0IGNoYXIqCQkJSG9zdFB1dEZpbGUoY29u c3QgY2hhciogcHJvbXB0LCBjb25zdCBjaGFyKiBkZWZhdWx0RGlyLCBjb25zdCBjaGFyKiBkZWZh dWx0TmFtZSkKCQkJCQkJICA7Cgpjb25zdCBjaGFyKgkJCUhvc3RHZXREaXJlY3RvcnkoY29uc3Qg Y2hhciogcHJvbXB0LCBjb25zdCBjaGFyKiBkZWZhdWx0RGlyKQoJCQkJCQkgIDsKCgp9CgoKCiMg MTkgIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmgiIDIKCgojIDEgIi91c3IvbG9jYWwvbGli L2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zL2luY2x1ZGUvc3RkZGVmLmgiIDEg MyA0CiMgMzQyICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIu OTUuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKCiMgMjEgIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1 Y3RzLmgiIDIKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgppbnQJCUJhZEdldHRlciAodm9pZCk7 CnZvaWQJQmFkU2V0dGVyICh2b2lkKTsKCiMgMjg3ICIuLi9TcmNTaGFyZWQvRW1QYWxtU3RydWN0 cy5oIgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKY2xhc3MgTEFTCnsK CXB1YmxpYzoKCQl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwoKCQlpbmxpbmUgc3RhdGljIHVpbnQ4 CQlHZXRCeXRlIChwdHJfdHlwZSBwKQkJCQkJeyByZXR1cm4gKHVpbnQ4KSAodW5zaWduZWQgY2hh cikoCSgoKHVuc2lnbmVkIGNoYXIpKCh1bnNpZ25lZCBjaGFyKikoIHAgKSlbMF0pIDw8ICAwKQkp IDsgfQoJCWlubGluZSBzdGF0aWMgdWludDE2CUdldFdvcmQgKHB0cl90eXBlIHApCQkJCQl7IHJl dHVybiAodWludDE2KSAodW5zaWduZWQgc2hvcnQpKAkoKCh1bnNpZ25lZCBzaG9ydCkoKHVuc2ln bmVkIGNoYXIqKSggcCApKVswXSkgPDwgIDgpIHwJKCgodW5zaWduZWQgc2hvcnQpKCh1bnNpZ25l ZCBjaGFyKikoIHAgKSlbMV0pIDw8ICAwKQkpIDsgfQoJCWlubGluZSBzdGF0aWMgdWludDMyCUdl dExvbmcgKHB0cl90eXBlIHApCQkJCQl7IHJldHVybiAodWludDMyKSAodW5zaWduZWQgbG9uZyko CSgoKHVuc2lnbmVkIGxvbmcpKCh1bnNpZ25lZCBjaGFyKikoIHAgKSlbMF0pIDw8IDI0KSB8CSgo KHVuc2lnbmVkIGxvbmcpKCh1bnNpZ25lZCBjaGFyKikoIHAgKSlbMV0pIDw8IDE2KSB8CSgoKHVu c2lnbmVkIGxvbmcpKCh1bnNpZ25lZCBjaGFyKikoIHAgKSlbMl0pIDw8ICA4KSB8CSgoKHVuc2ln bmVkIGxvbmcpKCh1bnNpZ25lZCBjaGFyKikoIHAgKSlbM10pIDw8ICAwKQkpIDsgfQoJCWlubGlu ZSBzdGF0aWMgdm9pZAkJUHV0Qnl0ZSAocHRyX3R5cGUgcCwgY29uc3QgdWludDggdikJCXsgZG8g eyAoKHVuc2lnbmVkIGNoYXIqKSggcCApKVswXSA9ICh1bnNpZ25lZCBjaGFyKSggIHYgKTsJfSB3 aGlsZSgwKSA7IH0KCQlpbmxpbmUgc3RhdGljIHZvaWQJCVB1dFdvcmQgKHB0cl90eXBlIHAsIGNv bnN0IHVpbnQxNiB2KQl7IGRvIHsgKCh1bnNpZ25lZCBjaGFyKikoIHAgKSlbMF0gPSAodW5zaWdu ZWQgY2hhcikoKCh1bnNpZ25lZCBzaG9ydCkoICB2ICkpID4+IDgpOwkoKHVuc2lnbmVkIGNoYXIq KSggcCApKVsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHVuc2lnbmVkIHNob3J0KSggIHYgKSkgPj4g MCk7CX0gd2hpbGUoMCkgOyB9CgkJaW5saW5lIHN0YXRpYyB2b2lkCQlQdXRMb25nIChwdHJfdHlw ZSBwLCBjb25zdCB1aW50MzIgdikJeyBkbyB7ICgodW5zaWduZWQgY2hhciopKCBwICkpWzBdID0g KHVuc2lnbmVkIGNoYXIpKCgodW5zaWduZWQgbG9uZykoICB2ICkpID4+IDI0KTsJKCh1bnNpZ25l ZCBjaGFyKikoIHAgKSlbMV0gPSAodW5zaWduZWQgY2hhcikoKCh1bnNpZ25lZCBsb25nKSggIHYg KSkgPj4gMTYpOwkoKHVuc2lnbmVkIGNoYXIqKSggcCApKVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgo KHVuc2lnbmVkIGxvbmcpKCAgdiApKSA+PiAgOCk7CSgodW5zaWduZWQgY2hhciopKCBwICkpWzNd ID0gKHVuc2lnbmVkIGNoYXIpKCgodW5zaWduZWQgbG9uZykoICB2ICkpID4+ICAwKTsJfSB3aGls ZSgwKSA7IH0KCgkJaW5saW5lIHN0YXRpYyB2b2lkCQlCbG9ja0NvcHkgKHB0cl90eXBlIGQsIHB0 cl90eXBlIHMsIHNpemVfdCBsZW4pCgkJCQkJCQkJCQkJCQkJCQkJCXsgbWVtY3B5IChkLCBzLCBs ZW4pOyB9CgoJCWlubGluZSBzdGF0aWMgcHRyX3R5cGUJYWRkIChwdHJfdHlwZSBwLCBwdHJkaWZm X3QgZGlmZikKCQkJCQkJCQkJCQkJCQkJCQkJeyByZXR1cm4gKHB0cl90eXBlKSgoKHNpemVfdClw KSArIGRpZmYpOyB9CgkJaW5saW5lIHN0YXRpYyBwdHJkaWZmX3QJZGlmZiAocHRyX3R5cGUgYSwg cHRyX3R5cGUgYikKCQkJCQkJCQkJCQkJCQkJCQkJeyByZXR1cm4gKHB0cmRpZmZfdCkoKChwdHJk aWZmX3QpYSkgLSAocHRyZGlmZl90KWIpOyB9Cn07CgoKIAoKY2xhc3MgUEFTCnsKCXB1YmxpYzoK CQl0eXBlZGVmIGVtdXB0ciBwdHJfdHlwZTsKCgkJaW5saW5lIHN0YXRpYyB1aW50OAkJR2V0Qnl0 ZSAocHRyX3R5cGUgcCkJCQkJCXsgcmV0dXJuICh1aW50OCkgRW1NZW1HZXQ4IChwKTsgfQoJCWlu bGluZSBzdGF0aWMgdWludDE2CUdldFdvcmQgKHB0cl90eXBlIHApCQkJCQl7IHJldHVybiAodWlu dDE2KSBFbU1lbUdldDE2IChwKTsgfQoJCWlubGluZSBzdGF0aWMgdWludDMyCUdldExvbmcgKHB0 cl90eXBlIHApCQkJCQl7IHJldHVybiAodWludDMyKSBFbU1lbUdldDMyIChwKTsgfQoJCWlubGlu ZSBzdGF0aWMgdm9pZAkJUHV0Qnl0ZSAocHRyX3R5cGUgcCwgY29uc3QgdWludDggdikJCXsgRW1N ZW1QdXQ4IChwLCB2KTsgfQoJCWlubGluZSBzdGF0aWMgdm9pZAkJUHV0V29yZCAocHRyX3R5cGUg cCwgY29uc3QgdWludDE2IHYpCXsgRW1NZW1QdXQxNiAocCwgdik7IH0KCQlpbmxpbmUgc3RhdGlj IHZvaWQJCVB1dExvbmcgKHB0cl90eXBlIHAsIGNvbnN0IHVpbnQzMiB2KQl7IEVtTWVtUHV0MzIg KHAsIHYpOyB9CgoJCWlubGluZSBzdGF0aWMgdm9pZAkJQmxvY2tDb3B5IChwdHJfdHlwZSBkLCBw dHJfdHlwZSBzLCBzaXplX3QgbGVuKQoJCQkJCQkJCQkJCQkJCQkJCQl7IEVtTWVtX21lbWNweSAo ZCwgcywgbGVuKTsgfQoKCQlpbmxpbmUgc3RhdGljIHB0cl90eXBlCWFkZCAocHRyX3R5cGUgcCwg cHRyZGlmZl90IGRpZmYpCgkJCQkJCQkJCQkJCQkJCQkJCXsgcmV0dXJuIChwdHJfdHlwZSkoKChz aXplX3QpcCkgKyBkaWZmKTsgfQoJCWlubGluZSBzdGF0aWMgcHRyZGlmZl90IGRpZmYgKHB0cl90 eXBlIGEsIHB0cl90eXBlIGIpCgkJCQkJCQkJCQkJCQkJCQkJCXsgcmV0dXJuIChwdHJkaWZmX3Qp KCgocHRyZGlmZl90KWEpIC0gKHB0cmRpZmZfdCliKTsgfQp9OwoKCiAKIAogCgoKIyA0MTYgIi4u L1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmgiCgoKIyA0NTYgIi4uL1NyY1NoYXJlZC9FbVBhbG1T dHJ1Y3RzLmgiCgoKCgoKCiMgNTIwICIuLi9TcmNTaGFyZWQvRW1QYWxtU3RydWN0cy5oIgoKCiMg NTY4ICIuLi9TcmNTaGFyZWQvRW1QYWxtU3RydWN0cy5oIgoKCgoKCiAKCgojIDU4NyAiLi4vU3Jj U2hhcmVkL0VtUGFsbVN0cnVjdHMuaCIKCgojIDU5OSAiLi4vU3JjU2hhcmVkL0VtUGFsbVN0cnVj dHMuaCIKCgogCiAKIAoKCiMgNjMzICIuLi9TcmNTaGFyZWQvRW1QYWxtU3RydWN0cy5oIgoKCiMg NjYxICIuLi9TcmNTaGFyZWQvRW1QYWxtU3RydWN0cy5oIgoKCgoKCgojIDcxMSAiLi4vU3JjU2hh cmVkL0VtUGFsbVN0cnVjdHMuaCIKCgojIDc0NiAiLi4vU3JjU2hhcmVkL0VtUGFsbVN0cnVjdHMu aCIKCgoKCgogCiAKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCnR5cGVkZWYgdWludDgJ VUlPcHRpb25zVHlwZTsKdHlwZWRlZiB1aW50OAlTY3JPcGVyYXRpb247CgoKIyA3OTUgIi4uL1Ny Y1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmgiCgoKIyA4MDggIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1 Y3RzLmgiCgoKIyA4MTkgIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmgiCgoKIyA4MzEgIi4u L1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmgiCgoKCgoKCgoKCiMgODU5ICIuLi9TcmNTaGFyZWQv RW1QYWxtU3RydWN0cy5oIgoKCgoKCgoKCgogIAoKIyA4NzkgIi4uL1NyY1NoYXJlZC9FbVBhbG1T dHJ1Y3RzLmgiCgoKIyA4OTQgIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmgiCgoKIyA5MTEg Ii4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmgiCgoKIyA5MjUgIi4uL1NyY1NoYXJlZC9FbVBh bG1TdHJ1Y3RzLmgiCgoKIyA5NDAgIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmgiCgoKIyA5 NjIgIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmgiCgoKIyAxMDA5ICIuLi9TcmNTaGFyZWQv RW1QYWxtU3RydWN0cy5oIgoKCiMgMTAyNiAiLi4vU3JjU2hhcmVkL0VtUGFsbVN0cnVjdHMuaCIK CgojIDEwNDUgIi4uL1NyY1NoYXJlZC9FbVBhbG1TdHJ1Y3RzLmgiCgoKIyAxMDc2ICIuLi9TcmNT aGFyZWQvRW1QYWxtU3RydWN0cy5oIgoKCiMgMTA5NCAiLi4vU3JjU2hhcmVkL0VtUGFsbVN0cnVj dHMuaCIKCgoKCgkKCgogdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNjaGFyICAJewlw dWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNjaGFy ICAgKHB0cl90eXBlKTsJRW1BbGlhc2NoYXIgICAoY29uc3QgRW1BbGlhc2NoYXIgIDxBPiYpOwlw dHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6 ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0dXJuIHNpemVvZiAoICAgIGNoYXIgICk7IH0JRW1B bGlhc2NoYXIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBib29sKTsJRW1BbGlhc2NoYXIgIDxBPiYJ b3BlcmF0b3I9IChjb25zdCBjaGFyKTsJRW1BbGlhc2NoYXIgIDxBPiYJb3BlcmF0b3I9IChjb25z dCB1bnNpZ25lZCBjaGFyKTsJRW1BbGlhc2NoYXIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNp Z25lZCBzaG9ydCk7CUVtQWxpYXNjaGFyICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQg aW50KTsJRW1BbGlhc2NoYXIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBsb25nKTsJ RW1BbGlhc2NoYXIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgY2hhcik7CUVtQWxpYXNj aGFyICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIHNob3J0KTsJRW1BbGlhc2NoYXIgIDxB PiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgaW50KTsJRW1BbGlhc2NoYXIgIDxBPiYJb3BlcmF0 b3I9IChjb25zdCBzaWduZWQgbG9uZyk7CUVtQWxpYXNjaGFyICA8QT4mCW9wZXJhdG9yPSAoY29u c3Qgdm9pZCopOwlFbUFsaWFzY2hhciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNjaGFy ICA8QT4mKTsJb3BlcmF0b3IgICBjaGFyICAgKHZvaWQpIGNvbnN0OwlFbUFsaWFzY2hhciAgPEE+ CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNjaGFyICA8QT4Jb3BlcmF0b3JbXSAoaW50 KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc2NoYXIgICAodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJ fTsgCWNsYXNzIEVtUHJveHljaGFyICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7 CUVtUHJveHljaGFyICAgKHZvaWQpOwlFbVByb3h5Y2hhciAgIChjb25zdCBFbVByb3h5Y2hhciAg Jik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZm TG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUgKHZvaWQpCQkJeyByZXR1cm4gc2l6 ZW9mICggICAgY2hhciAgKTsgfQlFbVByb3h5Y2hhciAgJgkJb3BlcmF0b3I9IChjb25zdCBib29s KTsJRW1Qcm94eWNoYXIgICYJCW9wZXJhdG9yPSAoY29uc3QgY2hhcik7CUVtUHJveHljaGFyICAm CQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbVByb3h5Y2hhciAgJgkJb3BlcmF0 b3I9IChjb25zdCB1bnNpZ25lZCBzaG9ydCk7CUVtUHJveHljaGFyICAmCQlvcGVyYXRvcj0gKGNv bnN0IHVuc2lnbmVkIGludCk7CUVtUHJveHljaGFyICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2ln bmVkIGxvbmcpOwlFbVByb3h5Y2hhciAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgY2hhcik7 CUVtUHJveHljaGFyICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9ydCk7CUVtUHJveHlj aGFyICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBpbnQpOwlFbVByb3h5Y2hhciAgJgkJb3Bl cmF0b3I9IChjb25zdCBzaWduZWQgbG9uZyk7CUVtUHJveHljaGFyICAmCQlvcGVyYXRvcj0gKGNv bnN0IHZvaWQqKTsJRW1Qcm94eWNoYXIgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eWNoYXIg ICYpOwlvcGVyYXRvciAgIGNoYXIgICAodm9pZCkgY29uc3Q7CUVtQWxpYXNjaGFyICA8TEFTPglv cGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzY2hhciAgPExBUz4Jb3BlcmF0b3JbXSAoaW50 KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1tzaXplb2YgKCAgICBjaGFy ICApXTsJfSBmTG9jYWxEYXRhOwl9OyAgCSB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlh c0ludDggIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJ RW1BbGlhc0ludDggICAocHRyX3R5cGUpOwlFbUFsaWFzSW50OCAgIChjb25zdCBFbUFsaWFzSW50 OCAgPEE+Jik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9 CXN0YXRpYyBzaXplX3QJCUdldFNpemUgKHZvaWQpCQkJeyByZXR1cm4gc2l6ZW9mICggICAgSW50 OCAgKTsgfQlFbUFsaWFzSW50OCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IGJvb2wpOwlFbUFsaWFz SW50OCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlFbUFsaWFzSW50OCAgPEE+JglvcGVy YXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbUFsaWFzSW50OCAgPEE+JglvcGVyYXRvcj0g KGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1BbGlhc0ludDggIDxBPiYJb3BlcmF0b3I9IChjb25z dCB1bnNpZ25lZCBpbnQpOwlFbUFsaWFzSW50OCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2ln bmVkIGxvbmcpOwlFbUFsaWFzSW50OCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFy KTsJRW1BbGlhc0ludDggIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlFbUFs aWFzSW50OCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBpbnQpOwlFbUFsaWFzSW50OCAg PEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBsb25nKTsJRW1BbGlhc0ludDggIDxBPiYJb3Bl cmF0b3I9IChjb25zdCB2b2lkKik7CUVtQWxpYXNJbnQ4ICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg RW1BbGlhc0ludDggIDxBPiYpOwlvcGVyYXRvciAgIEludDggICAodm9pZCkgY29uc3Q7CUVtQWxp YXNJbnQ4ICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0ludDggIDxBPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzSW50OCAgICh2b2lkKTsJcHRyX3R5 cGUJCQlmUHRyOwl9OyAJY2xhc3MgRW1Qcm94eUludDggIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lk KiBwdHJfdHlwZTsJRW1Qcm94eUludDggICAodm9pZCk7CUVtUHJveHlJbnQ4ICAgKGNvbnN0IEVt UHJveHlJbnQ4ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChw dHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZSAodm9pZCkJCQl7 IHJldHVybiBzaXplb2YgKCAgICBJbnQ4ICApOyB9CUVtUHJveHlJbnQ4ICAmCQlvcGVyYXRvcj0g KGNvbnN0IGJvb2wpOwlFbVByb3h5SW50OCAgJgkJb3BlcmF0b3I9IChjb25zdCBjaGFyKTsJRW1Q cm94eUludDggICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgY2hhcik7CUVtUHJveHlJbnQ4 ICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1Qcm94eUludDggICYJCW9w ZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgaW50KTsJRW1Qcm94eUludDggICYJCW9wZXJhdG9yPSAo Y29uc3QgdW5zaWduZWQgbG9uZyk7CUVtUHJveHlJbnQ4ICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNp Z25lZCBjaGFyKTsJRW1Qcm94eUludDggICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIHNob3J0 KTsJRW1Qcm94eUludDggICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGludCk7CUVtUHJveHlJ bnQ4ICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBsb25nKTsJRW1Qcm94eUludDggICYJCW9w ZXJhdG9yPSAoY29uc3Qgdm9pZCopOwlFbVByb3h5SW50OCAgJgkJb3BlcmF0b3I9IChjb25zdCBF bVByb3h5SW50OCAgJik7CW9wZXJhdG9yICAgSW50OCAgICh2b2lkKSBjb25zdDsJRW1BbGlhc0lu dDggIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNJbnQ4ICA8TEFTPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzW3NpemVv ZiAoICAgIEludDggICldOwl9IGZMb2NhbERhdGE7CX07ICAJIHRlbXBsYXRlIDxjbGFzcyBBPglj bGFzcyBFbUFsaWFzVUludDggIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlw ZSBwdHJfdHlwZTsJRW1BbGlhc1VJbnQ4ICAgKHB0cl90eXBlKTsJRW1BbGlhc1VJbnQ4ICAgKGNv bnN0IEVtQWxpYXNVSW50OCAgPEE+Jik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7 IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUgKHZvaWQpCQkJeyByZXR1cm4g c2l6ZW9mICggICAgVUludDggICk7IH0JRW1BbGlhc1VJbnQ4ICA8QT4mCW9wZXJhdG9yPSAoY29u c3QgYm9vbCk7CUVtQWxpYXNVSW50OCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlFbUFs aWFzVUludDggIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBjaGFyKTsJRW1BbGlhc1VJ bnQ4ICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgc2hvcnQpOwlFbUFsaWFzVUludDgg IDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBpbnQpOwlFbUFsaWFzVUludDggIDxBPiYJ b3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBsb25nKTsJRW1BbGlhc1VJbnQ4ICA8QT4mCW9wZXJh dG9yPSAoY29uc3Qgc2lnbmVkIGNoYXIpOwlFbUFsaWFzVUludDggIDxBPiYJb3BlcmF0b3I9IChj b25zdCBzaWduZWQgc2hvcnQpOwlFbUFsaWFzVUludDggIDxBPiYJb3BlcmF0b3I9IChjb25zdCBz aWduZWQgaW50KTsJRW1BbGlhc1VJbnQ4ICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGxv bmcpOwlFbUFsaWFzVUludDggIDxBPiYJb3BlcmF0b3I9IChjb25zdCB2b2lkKik7CUVtQWxpYXNV SW50OCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNVSW50OCAgPEE+Jik7CW9wZXJhdG9y ICAgVUludDggICAodm9pZCkgY29uc3Q7CUVtQWxpYXNVSW50OCAgPEE+CW9wZXJhdG9yW10gKGlu dCk7CWNvbnN0IEVtQWxpYXNVSW50OCAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZh dGU6CUVtQWxpYXNVSW50OCAgICh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwl9OyAJY2xhc3MgRW1Q cm94eVVJbnQ4ICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlVSW50 OCAgICh2b2lkKTsJRW1Qcm94eVVJbnQ4ICAgKGNvbnN0IEVtUHJveHlVSW50OCAgJik7CXB0cl90 eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRh OyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUgKHZvaWQpCQkJeyByZXR1cm4gc2l6ZW9mICggICAg VUludDggICk7IH0JRW1Qcm94eVVJbnQ4ICAmCQlvcGVyYXRvcj0gKGNvbnN0IGJvb2wpOwlFbVBy b3h5VUludDggICYJCW9wZXJhdG9yPSAoY29uc3QgY2hhcik7CUVtUHJveHlVSW50OCAgJgkJb3Bl cmF0b3I9IChjb25zdCB1bnNpZ25lZCBjaGFyKTsJRW1Qcm94eVVJbnQ4ICAmCQlvcGVyYXRvcj0g KGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1Qcm94eVVJbnQ4ICAmCQlvcGVyYXRvcj0gKGNvbnN0 IHVuc2lnbmVkIGludCk7CUVtUHJveHlVSW50OCAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25l ZCBsb25nKTsJRW1Qcm94eVVJbnQ4ICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFyKTsJ RW1Qcm94eVVJbnQ4ICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9ydCk7CUVtUHJveHlV SW50OCAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgaW50KTsJRW1Qcm94eVVJbnQ4ICAmCQlv cGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBsb25nKTsJRW1Qcm94eVVJbnQ4ICAmCQlvcGVyYXRvcj0g KGNvbnN0IHZvaWQqKTsJRW1Qcm94eVVJbnQ4ICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlV SW50OCAgJik7CW9wZXJhdG9yICAgVUludDggICAodm9pZCkgY29uc3Q7CUVtQWxpYXNVSW50OCAg PExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1VJbnQ4ICA8TEFTPglvcGVyYXRv cltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzW3NpemVvZiAo ICAgIFVJbnQ4ICApXTsJfSBmTG9jYWxEYXRhOwl9OyAgCSB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xh c3MgRW1BbGlhc0ludDE2ICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUg cHRyX3R5cGU7CUVtQWxpYXNJbnQxNiAgIChwdHJfdHlwZSk7CUVtQWxpYXNJbnQxNiAgIChjb25z dCBFbUFsaWFzSW50MTYgIDxBPiYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyBy ZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0dXJuIHNp emVvZiAoICAgIEludDE2ICApOyB9CUVtQWxpYXNJbnQxNiAgPEE+JglvcGVyYXRvcj0gKGNvbnN0 IGJvb2wpOwlFbUFsaWFzSW50MTYgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBjaGFyKTsJRW1BbGlh c0ludDE2ICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgY2hhcik7CUVtQWxpYXNJbnQx NiAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1BbGlhc0ludDE2ICA8 QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgaW50KTsJRW1BbGlhc0ludDE2ICA8QT4mCW9w ZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgbG9uZyk7CUVtQWxpYXNJbnQxNiAgPEE+JglvcGVyYXRv cj0gKGNvbnN0IHNpZ25lZCBjaGFyKTsJRW1BbGlhc0ludDE2ICA8QT4mCW9wZXJhdG9yPSAoY29u c3Qgc2lnbmVkIHNob3J0KTsJRW1BbGlhc0ludDE2ICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2ln bmVkIGludCk7CUVtQWxpYXNJbnQxNiAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBsb25n KTsJRW1BbGlhc0ludDE2ICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgdm9pZCopOwlFbUFsaWFzSW50 MTYgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzSW50MTYgIDxBPiYpOwlvcGVyYXRvciAg IEludDE2ICAgKHZvaWQpIGNvbnN0OwlFbUFsaWFzSW50MTYgIDxBPglvcGVyYXRvcltdIChpbnQp Owljb25zdCBFbUFsaWFzSW50MTYgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRl OglFbUFsaWFzSW50MTYgICAodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJfTsgCWNsYXNzIEVtUHJv eHlJbnQxNiAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5SW50MTYg ICAodm9pZCk7CUVtUHJveHlJbnQxNiAgIChjb25zdCBFbVByb3h5SW50MTYgICYpOwlwdHJfdHlw ZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsg fQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0dXJuIHNpemVvZiAoICAgIElu dDE2ICApOyB9CUVtUHJveHlJbnQxNiAgJgkJb3BlcmF0b3I9IChjb25zdCBib29sKTsJRW1Qcm94 eUludDE2ICAmCQlvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlFbVByb3h5SW50MTYgICYJCW9wZXJh dG9yPSAoY29uc3QgdW5zaWduZWQgY2hhcik7CUVtUHJveHlJbnQxNiAgJgkJb3BlcmF0b3I9IChj b25zdCB1bnNpZ25lZCBzaG9ydCk7CUVtUHJveHlJbnQxNiAgJgkJb3BlcmF0b3I9IChjb25zdCB1 bnNpZ25lZCBpbnQpOwlFbVByb3h5SW50MTYgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQg bG9uZyk7CUVtUHJveHlJbnQxNiAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgY2hhcik7CUVt UHJveHlJbnQxNiAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlFbVByb3h5SW50 MTYgICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGludCk7CUVtUHJveHlJbnQxNiAgJgkJb3Bl cmF0b3I9IChjb25zdCBzaWduZWQgbG9uZyk7CUVtUHJveHlJbnQxNiAgJgkJb3BlcmF0b3I9IChj b25zdCB2b2lkKik7CUVtUHJveHlJbnQxNiAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5SW50 MTYgICYpOwlvcGVyYXRvciAgIEludDE2ICAgKHZvaWQpIGNvbnN0OwlFbUFsaWFzSW50MTYgIDxM QVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNJbnQxNiAgPExBUz4Jb3BlcmF0b3Jb XSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1tzaXplb2YgKCAg ICBJbnQxNiAgKV07CX0gZkxvY2FsRGF0YTsJfTsgIAkgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNz IEVtQWxpYXNVSW50MTYgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBw dHJfdHlwZTsJRW1BbGlhc1VJbnQxNiAgIChwdHJfdHlwZSk7CUVtQWxpYXNVSW50MTYgICAoY29u c3QgRW1BbGlhc1VJbnQxNiAgPEE+Jik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7 IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUgKHZvaWQpCQkJeyByZXR1cm4g c2l6ZW9mICggICAgVUludDE2ICApOyB9CUVtQWxpYXNVSW50MTYgIDxBPiYJb3BlcmF0b3I9IChj b25zdCBib29sKTsJRW1BbGlhc1VJbnQxNiAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlF bUFsaWFzVUludDE2ICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgY2hhcik7CUVtQWxp YXNVSW50MTYgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBzaG9ydCk7CUVtQWxpYXNV SW50MTYgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBpbnQpOwlFbUFsaWFzVUludDE2 ICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgbG9uZyk7CUVtQWxpYXNVSW50MTYgIDxB PiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgY2hhcik7CUVtQWxpYXNVSW50MTYgIDxBPiYJb3Bl cmF0b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlFbUFsaWFzVUludDE2ICA8QT4mCW9wZXJhdG9y PSAoY29uc3Qgc2lnbmVkIGludCk7CUVtQWxpYXNVSW50MTYgIDxBPiYJb3BlcmF0b3I9IChjb25z dCBzaWduZWQgbG9uZyk7CUVtQWxpYXNVSW50MTYgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB2b2lk Kik7CUVtQWxpYXNVSW50MTYgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzVUludDE2ICA8 QT4mKTsJb3BlcmF0b3IgICBVSW50MTYgICAodm9pZCkgY29uc3Q7CUVtQWxpYXNVSW50MTYgIDxB PglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzVUludDE2ICA8QT4Jb3BlcmF0b3JbXSAo aW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1VJbnQxNiAgICh2b2lkKTsJcHRyX3R5cGUJCQlm UHRyOwl9OyAJY2xhc3MgRW1Qcm94eVVJbnQxNiAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0 cl90eXBlOwlFbVByb3h5VUludDE2ICAgKHZvaWQpOwlFbVByb3h5VUludDE2ICAgKGNvbnN0IEVt UHJveHlVSW50MTYgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4g KHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJ CXsgcmV0dXJuIHNpemVvZiAoICAgIFVJbnQxNiAgKTsgfQlFbVByb3h5VUludDE2ICAmCQlvcGVy YXRvcj0gKGNvbnN0IGJvb2wpOwlFbVByb3h5VUludDE2ICAmCQlvcGVyYXRvcj0gKGNvbnN0IGNo YXIpOwlFbVByb3h5VUludDE2ICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlF bVByb3h5VUludDE2ICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1Qcm94 eVVJbnQxNiAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBpbnQpOwlFbVByb3h5VUludDE2 ICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbVByb3h5VUludDE2ICAmCQlv cGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFyKTsJRW1Qcm94eVVJbnQxNiAgJgkJb3BlcmF0b3I9 IChjb25zdCBzaWduZWQgc2hvcnQpOwlFbVByb3h5VUludDE2ICAmCQlvcGVyYXRvcj0gKGNvbnN0 IHNpZ25lZCBpbnQpOwlFbVByb3h5VUludDE2ICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBs b25nKTsJRW1Qcm94eVVJbnQxNiAgJgkJb3BlcmF0b3I9IChjb25zdCB2b2lkKik7CUVtUHJveHlV SW50MTYgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eVVJbnQxNiAgJik7CW9wZXJhdG9yICAg VUludDE2ICAgKHZvaWQpIGNvbnN0OwlFbUFsaWFzVUludDE2ICA8TEFTPglvcGVyYXRvcltdIChp bnQpOwljb25zdCBFbUFsaWFzVUludDE2ICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlw cml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzW3NpemVvZiAoICAgIFVJbnQxNiAgKV07CX0g ZkxvY2FsRGF0YTsJfTsgIAkgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNJbnQzMiAg CXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFz SW50MzIgICAocHRyX3R5cGUpOwlFbUFsaWFzSW50MzIgICAoY29uc3QgRW1BbGlhc0ludDMyICA8 QT4mKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3Rh dGljIHNpemVfdAkJR2V0U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXplb2YgKCAgICBJbnQzMiAg KTsgfQlFbUFsaWFzSW50MzIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBib29sKTsJRW1BbGlhc0lu dDMyICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgY2hhcik7CUVtQWxpYXNJbnQzMiAgPEE+JglvcGVy YXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbUFsaWFzSW50MzIgIDxBPiYJb3BlcmF0b3I9 IChjb25zdCB1bnNpZ25lZCBzaG9ydCk7CUVtQWxpYXNJbnQzMiAgPEE+JglvcGVyYXRvcj0gKGNv bnN0IHVuc2lnbmVkIGludCk7CUVtQWxpYXNJbnQzMiAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVu c2lnbmVkIGxvbmcpOwlFbUFsaWFzSW50MzIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQg Y2hhcik7CUVtQWxpYXNJbnQzMiAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9ydCk7 CUVtQWxpYXNJbnQzMiAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBpbnQpOwlFbUFsaWFz SW50MzIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgbG9uZyk7CUVtQWxpYXNJbnQzMiAg PEE+JglvcGVyYXRvcj0gKGNvbnN0IHZvaWQqKTsJRW1BbGlhc0ludDMyICA8QT4mCW9wZXJhdG9y PSAoY29uc3QgRW1BbGlhc0ludDMyICA8QT4mKTsJb3BlcmF0b3IgICBJbnQzMiAgICh2b2lkKSBj b25zdDsJRW1BbGlhc0ludDMyICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0lu dDMyICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc0ludDMyICAg KHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CX07IAljbGFzcyBFbVByb3h5SW50MzIgIAl7CXB1Ymxp YzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUludDMyICAgKHZvaWQpOwlFbVByb3h5 SW50MzIgICAoY29uc3QgRW1Qcm94eUludDMyICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQp IGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJ R2V0U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXplb2YgKCAgICBJbnQzMiAgKTsgfQlFbVByb3h5 SW50MzIgICYJCW9wZXJhdG9yPSAoY29uc3QgYm9vbCk7CUVtUHJveHlJbnQzMiAgJgkJb3BlcmF0 b3I9IChjb25zdCBjaGFyKTsJRW1Qcm94eUludDMyICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2ln bmVkIGNoYXIpOwlFbVByb3h5SW50MzIgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgc2hv cnQpOwlFbVByb3h5SW50MzIgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgaW50KTsJRW1Q cm94eUludDMyICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbVByb3h5SW50 MzIgICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGNoYXIpOwlFbVByb3h5SW50MzIgICYJCW9w ZXJhdG9yPSAoY29uc3Qgc2lnbmVkIHNob3J0KTsJRW1Qcm94eUludDMyICAmCQlvcGVyYXRvcj0g KGNvbnN0IHNpZ25lZCBpbnQpOwlFbVByb3h5SW50MzIgICYJCW9wZXJhdG9yPSAoY29uc3Qgc2ln bmVkIGxvbmcpOwlFbVByb3h5SW50MzIgICYJCW9wZXJhdG9yPSAoY29uc3Qgdm9pZCopOwlFbVBy b3h5SW50MzIgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eUludDMyICAmKTsJb3BlcmF0b3Ig ICBJbnQzMiAgICh2b2lkKSBjb25zdDsJRW1BbGlhc0ludDMyICA8TEFTPglvcGVyYXRvcltdIChp bnQpOwljb25zdCBFbUFsaWFzSW50MzIgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXBy aXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbc2l6ZW9mICggICAgSW50MzIgICldOwl9IGZM b2NhbERhdGE7CX07ICAJIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzVUludDMyICAJ ewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNV SW50MzIgICAocHRyX3R5cGUpOwlFbUFsaWFzVUludDMyICAgKGNvbnN0IEVtQWxpYXNVSW50MzIg IDxBPiYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlz dGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0dXJuIHNpemVvZiAoICAgIFVJbnQz MiAgKTsgfQlFbUFsaWFzVUludDMyICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgYm9vbCk7CUVtQWxp YXNVSW50MzIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBjaGFyKTsJRW1BbGlhc1VJbnQzMiAgPEE+ JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbUFsaWFzVUludDMyICA8QT4mCW9w ZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgc2hvcnQpOwlFbUFsaWFzVUludDMyICA8QT4mCW9wZXJh dG9yPSAoY29uc3QgdW5zaWduZWQgaW50KTsJRW1BbGlhc1VJbnQzMiAgPEE+JglvcGVyYXRvcj0g KGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbUFsaWFzVUludDMyICA8QT4mCW9wZXJhdG9yPSAoY29u c3Qgc2lnbmVkIGNoYXIpOwlFbUFsaWFzVUludDMyICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2ln bmVkIHNob3J0KTsJRW1BbGlhc1VJbnQzMiAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBp bnQpOwlFbUFsaWFzVUludDMyICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGxvbmcpOwlF bUFsaWFzVUludDMyICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgdm9pZCopOwlFbUFsaWFzVUludDMy ICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1VJbnQzMiAgPEE+Jik7CW9wZXJhdG9yICAg VUludDMyICAgKHZvaWQpIGNvbnN0OwlFbUFsaWFzVUludDMyICA8QT4Jb3BlcmF0b3JbXSAoaW50 KTsJY29uc3QgRW1BbGlhc1VJbnQzMiAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZh dGU6CUVtQWxpYXNVSW50MzIgICAodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJfTsgCWNsYXNzIEVt UHJveHlVSW50MzIgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVVJ bnQzMiAgICh2b2lkKTsJRW1Qcm94eVVJbnQzMiAgIChjb25zdCBFbVByb3h5VUludDMyICAmKTsJ cHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2Nh bERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXplb2Yg KCAgICBVSW50MzIgICk7IH0JRW1Qcm94eVVJbnQzMiAgJgkJb3BlcmF0b3I9IChjb25zdCBib29s KTsJRW1Qcm94eVVJbnQzMiAgJgkJb3BlcmF0b3I9IChjb25zdCBjaGFyKTsJRW1Qcm94eVVJbnQz MiAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBjaGFyKTsJRW1Qcm94eVVJbnQzMiAgJgkJ b3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBzaG9ydCk7CUVtUHJveHlVSW50MzIgICYJCW9wZXJh dG9yPSAoY29uc3QgdW5zaWduZWQgaW50KTsJRW1Qcm94eVVJbnQzMiAgJgkJb3BlcmF0b3I9IChj b25zdCB1bnNpZ25lZCBsb25nKTsJRW1Qcm94eVVJbnQzMiAgJgkJb3BlcmF0b3I9IChjb25zdCBz aWduZWQgY2hhcik7CUVtUHJveHlVSW50MzIgICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIHNo b3J0KTsJRW1Qcm94eVVJbnQzMiAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgaW50KTsJRW1Q cm94eVVJbnQzMiAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgbG9uZyk7CUVtUHJveHlVSW50 MzIgICYJCW9wZXJhdG9yPSAoY29uc3Qgdm9pZCopOwlFbVByb3h5VUludDMyICAmCQlvcGVyYXRv cj0gKGNvbnN0IEVtUHJveHlVSW50MzIgICYpOwlvcGVyYXRvciAgIFVJbnQzMiAgICh2b2lkKSBj b25zdDsJRW1BbGlhc1VJbnQzMiAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlh c1VJbnQzMiAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJ Y2hhcgkJCV9ieXRlc1tzaXplb2YgKCAgICBVSW50MzIgICldOwl9IGZMb2NhbERhdGE7CX07ICAg CiB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc0Jvb2xlYW4gIAl7CXB1YmxpYzoJdHlw ZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc0Jvb2xlYW4gICAocHRy X3R5cGUpOwlFbUFsaWFzQm9vbGVhbiAgIChjb25zdCBFbUFsaWFzQm9vbGVhbiAgPEE+Jik7CXB0 cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXpl X3QJCUdldFNpemUgKHZvaWQpCQkJeyByZXR1cm4gc2l6ZW9mICggICAgdWludDggICk7IH0JRW1B bGlhc0Jvb2xlYW4gIDxBPiYJb3BlcmF0b3I9IChjb25zdCBib29sKTsJRW1BbGlhc0Jvb2xlYW4g IDxBPiYJb3BlcmF0b3I9IChjb25zdCBjaGFyKTsJRW1BbGlhc0Jvb2xlYW4gIDxBPiYJb3BlcmF0 b3I9IChjb25zdCB1bnNpZ25lZCBjaGFyKTsJRW1BbGlhc0Jvb2xlYW4gIDxBPiYJb3BlcmF0b3I9 IChjb25zdCB1bnNpZ25lZCBzaG9ydCk7CUVtQWxpYXNCb29sZWFuICA8QT4mCW9wZXJhdG9yPSAo Y29uc3QgdW5zaWduZWQgaW50KTsJRW1BbGlhc0Jvb2xlYW4gIDxBPiYJb3BlcmF0b3I9IChjb25z dCB1bnNpZ25lZCBsb25nKTsJRW1BbGlhc0Jvb2xlYW4gIDxBPiYJb3BlcmF0b3I9IChjb25zdCBz aWduZWQgY2hhcik7CUVtQWxpYXNCb29sZWFuICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVk IHNob3J0KTsJRW1BbGlhc0Jvb2xlYW4gIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgaW50 KTsJRW1BbGlhc0Jvb2xlYW4gIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgbG9uZyk7CUVt QWxpYXNCb29sZWFuICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgdm9pZCopOwlFbUFsaWFzQm9vbGVh biAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNCb29sZWFuICA8QT4mKTsJb3BlcmF0b3Ig ICBCb29sZWFuICAgKHZvaWQpIGNvbnN0OwlFbUFsaWFzQm9vbGVhbiAgPEE+CW9wZXJhdG9yW10g KGludCk7CWNvbnN0IEVtQWxpYXNCb29sZWFuICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJ cHJpdmF0ZToJRW1BbGlhc0Jvb2xlYW4gICAodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJfTsgCWNs YXNzIEVtUHJveHlCb29sZWFuICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVt UHJveHlCb29sZWFuICAgKHZvaWQpOwlFbVByb3h5Qm9vbGVhbiAgIChjb25zdCBFbVByb3h5Qm9v bGVhbiAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5 cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUgKHZvaWQpCQkJeyByZXR1 cm4gc2l6ZW9mICggICAgdWludDggICk7IH0JRW1Qcm94eUJvb2xlYW4gICYJCW9wZXJhdG9yPSAo Y29uc3QgYm9vbCk7CUVtUHJveHlCb29sZWFuICAmCQlvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlF bVByb3h5Qm9vbGVhbiAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBjaGFyKTsJRW1Qcm94 eUJvb2xlYW4gICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgc2hvcnQpOwlFbVByb3h5Qm9v bGVhbiAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBpbnQpOwlFbVByb3h5Qm9vbGVhbiAg JgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBsb25nKTsJRW1Qcm94eUJvb2xlYW4gICYJCW9w ZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGNoYXIpOwlFbVByb3h5Qm9vbGVhbiAgJgkJb3BlcmF0b3I9 IChjb25zdCBzaWduZWQgc2hvcnQpOwlFbVByb3h5Qm9vbGVhbiAgJgkJb3BlcmF0b3I9IChjb25z dCBzaWduZWQgaW50KTsJRW1Qcm94eUJvb2xlYW4gICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVk IGxvbmcpOwlFbVByb3h5Qm9vbGVhbiAgJgkJb3BlcmF0b3I9IChjb25zdCB2b2lkKik7CUVtUHJv eHlCb29sZWFuICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlCb29sZWFuICAmKTsJb3BlcmF0 b3IgICBCb29sZWFuICAgKHZvaWQpIGNvbnN0OwlFbUFsaWFzQm9vbGVhbiAgPExBUz4Jb3BlcmF0 b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0Jvb2xlYW4gIDxMQVM+CW9wZXJhdG9yW10gKGludCkg Y29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbc2l6ZW9mICggICAgdWludDgg ICldOwl9IGZMb2NhbERhdGE7CX07ICAJIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFz Q2hhciAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlF bUFsaWFzQ2hhciAgIChwdHJfdHlwZSk7CUVtQWxpYXNDaGFyICAgKGNvbnN0IEVtQWxpYXNDaGFy ICA8QT4mKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0J c3RhdGljIHNpemVfdAkJR2V0U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXplb2YgKCAgICB1aW50 OCAgKTsgfQlFbUFsaWFzQ2hhciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IGJvb2wpOwlFbUFsaWFz Q2hhciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlFbUFsaWFzQ2hhciAgPEE+JglvcGVy YXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbUFsaWFzQ2hhciAgPEE+JglvcGVyYXRvcj0g KGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1BbGlhc0NoYXIgIDxBPiYJb3BlcmF0b3I9IChjb25z dCB1bnNpZ25lZCBpbnQpOwlFbUFsaWFzQ2hhciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2ln bmVkIGxvbmcpOwlFbUFsaWFzQ2hhciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFy KTsJRW1BbGlhc0NoYXIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlFbUFs aWFzQ2hhciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBpbnQpOwlFbUFsaWFzQ2hhciAg PEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBsb25nKTsJRW1BbGlhc0NoYXIgIDxBPiYJb3Bl cmF0b3I9IChjb25zdCB2b2lkKik7CUVtQWxpYXNDaGFyICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg RW1BbGlhc0NoYXIgIDxBPiYpOwlvcGVyYXRvciAgIENoYXIgICAodm9pZCkgY29uc3Q7CUVtQWxp YXNDaGFyICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0NoYXIgIDxBPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzQ2hhciAgICh2b2lkKTsJcHRyX3R5 cGUJCQlmUHRyOwl9OyAJY2xhc3MgRW1Qcm94eUNoYXIgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lk KiBwdHJfdHlwZTsJRW1Qcm94eUNoYXIgICAodm9pZCk7CUVtUHJveHlDaGFyICAgKGNvbnN0IEVt UHJveHlDaGFyICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChw dHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZSAodm9pZCkJCQl7 IHJldHVybiBzaXplb2YgKCAgICB1aW50OCAgKTsgfQlFbVByb3h5Q2hhciAgJgkJb3BlcmF0b3I9 IChjb25zdCBib29sKTsJRW1Qcm94eUNoYXIgICYJCW9wZXJhdG9yPSAoY29uc3QgY2hhcik7CUVt UHJveHlDaGFyICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbVByb3h5Q2hh ciAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBzaG9ydCk7CUVtUHJveHlDaGFyICAmCQlv cGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGludCk7CUVtUHJveHlDaGFyICAmCQlvcGVyYXRvcj0g KGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbVByb3h5Q2hhciAgJgkJb3BlcmF0b3I9IChjb25zdCBz aWduZWQgY2hhcik7CUVtUHJveHlDaGFyICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9y dCk7CUVtUHJveHlDaGFyICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBpbnQpOwlFbVByb3h5 Q2hhciAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgbG9uZyk7CUVtUHJveHlDaGFyICAmCQlv cGVyYXRvcj0gKGNvbnN0IHZvaWQqKTsJRW1Qcm94eUNoYXIgICYJCW9wZXJhdG9yPSAoY29uc3Qg RW1Qcm94eUNoYXIgICYpOwlvcGVyYXRvciAgIENoYXIgICAodm9pZCkgY29uc3Q7CUVtQWxpYXND aGFyICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzQ2hhciAgPExBUz4Jb3Bl cmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1tzaXpl b2YgKCAgICB1aW50OCAgKV07CX0gZkxvY2FsRGF0YTsJfTsgIAkgdGVtcGxhdGUgPGNsYXNzIEE+ CWNsYXNzIEVtQWxpYXNDb250cm9sU3R5bGVUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5h bWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNDb250cm9sU3R5bGVUeXBlICAgKHB0cl90 eXBlKTsJRW1BbGlhc0NvbnRyb2xTdHlsZVR5cGUgICAoY29uc3QgRW1BbGlhc0NvbnRyb2xTdHls ZVR5cGUgIDxBPiYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0 cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0dXJuIHNpemVvZiAoICAg IHVpbnQ4ICApOyB9CUVtQWxpYXNDb250cm9sU3R5bGVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29u c3QgYm9vbCk7CUVtQWxpYXNDb250cm9sU3R5bGVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg Y2hhcik7CUVtQWxpYXNDb250cm9sU3R5bGVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5z aWduZWQgY2hhcik7CUVtQWxpYXNDb250cm9sU3R5bGVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29u c3QgdW5zaWduZWQgc2hvcnQpOwlFbUFsaWFzQ29udHJvbFN0eWxlVHlwZSAgPEE+JglvcGVyYXRv cj0gKGNvbnN0IHVuc2lnbmVkIGludCk7CUVtQWxpYXNDb250cm9sU3R5bGVUeXBlICA8QT4mCW9w ZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgbG9uZyk7CUVtQWxpYXNDb250cm9sU3R5bGVUeXBlICA8 QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGNoYXIpOwlFbUFsaWFzQ29udHJvbFN0eWxlVHlw ZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9ydCk7CUVtQWxpYXNDb250cm9sU3R5 bGVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGludCk7CUVtQWxpYXNDb250cm9s U3R5bGVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGxvbmcpOwlFbUFsaWFzQ29u dHJvbFN0eWxlVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHZvaWQqKTsJRW1BbGlhc0NvbnRy b2xTdHlsZVR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzQ29udHJvbFN0eWxlVHlw ZSAgPEE+Jik7CW9wZXJhdG9yICAgQ29udHJvbFN0eWxlVHlwZSAgICh2b2lkKSBjb25zdDsJRW1B bGlhc0NvbnRyb2xTdHlsZVR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFz Q29udHJvbFN0eWxlVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVt QWxpYXNDb250cm9sU3R5bGVUeXBlICAgKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CX07IAljbGFz cyBFbVByb3h5Q29udHJvbFN0eWxlVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90 eXBlOwlFbVByb3h5Q29udHJvbFN0eWxlVHlwZSAgICh2b2lkKTsJRW1Qcm94eUNvbnRyb2xTdHls ZVR5cGUgICAoY29uc3QgRW1Qcm94eUNvbnRyb2xTdHlsZVR5cGUgICYpOwlwdHJfdHlwZQkJCUdl dFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0 aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0dXJuIHNpemVvZiAoICAgIHVpbnQ4ICAp OyB9CUVtUHJveHlDb250cm9sU3R5bGVUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IGJvb2wpOwlF bVByb3h5Q29udHJvbFN0eWxlVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBjaGFyKTsJRW1Qcm94 eUNvbnRyb2xTdHlsZVR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgY2hhcik7CUVt UHJveHlDb250cm9sU3R5bGVUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIHNob3J0 KTsJRW1Qcm94eUNvbnRyb2xTdHlsZVR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQg aW50KTsJRW1Qcm94eUNvbnRyb2xTdHlsZVR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWdu ZWQgbG9uZyk7CUVtUHJveHlDb250cm9sU3R5bGVUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNp Z25lZCBjaGFyKTsJRW1Qcm94eUNvbnRyb2xTdHlsZVR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3Qg c2lnbmVkIHNob3J0KTsJRW1Qcm94eUNvbnRyb2xTdHlsZVR5cGUgICYJCW9wZXJhdG9yPSAoY29u c3Qgc2lnbmVkIGludCk7CUVtUHJveHlDb250cm9sU3R5bGVUeXBlICAmCQlvcGVyYXRvcj0gKGNv bnN0IHNpZ25lZCBsb25nKTsJRW1Qcm94eUNvbnRyb2xTdHlsZVR5cGUgICYJCW9wZXJhdG9yPSAo Y29uc3Qgdm9pZCopOwlFbVByb3h5Q29udHJvbFN0eWxlVHlwZSAgJgkJb3BlcmF0b3I9IChjb25z dCBFbVByb3h5Q29udHJvbFN0eWxlVHlwZSAgJik7CW9wZXJhdG9yICAgQ29udHJvbFN0eWxlVHlw ZSAgICh2b2lkKSBjb25zdDsJRW1BbGlhc0NvbnRyb2xTdHlsZVR5cGUgIDxMQVM+CW9wZXJhdG9y W10gKGludCk7CWNvbnN0IEVtQWxpYXNDb250cm9sU3R5bGVUeXBlICA8TEFTPglvcGVyYXRvcltd IChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzW3NpemVvZiAoICAg IHVpbnQ4ICApXTsJfSBmTG9jYWxEYXRhOwl9OyAgCSB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3Mg RW1BbGlhc0Nvb3JkICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRy X3R5cGU7CUVtQWxpYXNDb29yZCAgIChwdHJfdHlwZSk7CUVtQWxpYXNDb29yZCAgIChjb25zdCBF bUFsaWFzQ29vcmQgIDxBPiYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1 cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0dXJuIHNpemVv ZiAoICAgIHVpbnQxNiAgKTsgfQlFbUFsaWFzQ29vcmQgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBi b29sKTsJRW1BbGlhc0Nvb3JkICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgY2hhcik7CUVtQWxpYXND b29yZCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbUFsaWFzQ29vcmQg IDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBzaG9ydCk7CUVtQWxpYXNDb29yZCAgPEE+ JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGludCk7CUVtQWxpYXNDb29yZCAgPEE+JglvcGVy YXRvcj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbUFsaWFzQ29vcmQgIDxBPiYJb3BlcmF0b3I9 IChjb25zdCBzaWduZWQgY2hhcik7CUVtQWxpYXNDb29yZCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0 IHNpZ25lZCBzaG9ydCk7CUVtQWxpYXNDb29yZCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25l ZCBpbnQpOwlFbUFsaWFzQ29vcmQgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgbG9uZyk7 CUVtQWxpYXNDb29yZCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHZvaWQqKTsJRW1BbGlhc0Nvb3Jk ICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc0Nvb3JkICA8QT4mKTsJb3BlcmF0b3IgICBD b29yZCAgICh2b2lkKSBjb25zdDsJRW1BbGlhc0Nvb3JkICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJ Y29uc3QgRW1BbGlhc0Nvb3JkICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJ RW1BbGlhc0Nvb3JkICAgKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CX07IAljbGFzcyBFbVByb3h5 Q29vcmQgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUNvb3JkICAg KHZvaWQpOwlFbVByb3h5Q29vcmQgICAoY29uc3QgRW1Qcm94eUNvb3JkICAmKTsJcHRyX3R5cGUJ CQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0J c3RhdGljIHNpemVfdAkJR2V0U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXplb2YgKCAgICB1aW50 MTYgICk7IH0JRW1Qcm94eUNvb3JkICAmCQlvcGVyYXRvcj0gKGNvbnN0IGJvb2wpOwlFbVByb3h5 Q29vcmQgICYJCW9wZXJhdG9yPSAoY29uc3QgY2hhcik7CUVtUHJveHlDb29yZCAgJgkJb3BlcmF0 b3I9IChjb25zdCB1bnNpZ25lZCBjaGFyKTsJRW1Qcm94eUNvb3JkICAmCQlvcGVyYXRvcj0gKGNv bnN0IHVuc2lnbmVkIHNob3J0KTsJRW1Qcm94eUNvb3JkICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVu c2lnbmVkIGludCk7CUVtUHJveHlDb29yZCAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBs b25nKTsJRW1Qcm94eUNvb3JkICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFyKTsJRW1Q cm94eUNvb3JkICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9ydCk7CUVtUHJveHlDb29y ZCAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgaW50KTsJRW1Qcm94eUNvb3JkICAmCQlvcGVy YXRvcj0gKGNvbnN0IHNpZ25lZCBsb25nKTsJRW1Qcm94eUNvb3JkICAmCQlvcGVyYXRvcj0gKGNv bnN0IHZvaWQqKTsJRW1Qcm94eUNvb3JkICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlDb29y ZCAgJik7CW9wZXJhdG9yICAgQ29vcmQgICAodm9pZCkgY29uc3Q7CUVtQWxpYXNDb29yZCAgPExB Uz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0Nvb3JkICA8TEFTPglvcGVyYXRvcltd IChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzW3NpemVvZiAoICAg IHVpbnQxNiAgKV07CX0gZkxvY2FsRGF0YTsJfTsgIAkgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNz IEVtQWxpYXNEbVJlc0lEICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUg cHRyX3R5cGU7CUVtQWxpYXNEbVJlc0lEICAgKHB0cl90eXBlKTsJRW1BbGlhc0RtUmVzSUQgICAo Y29uc3QgRW1BbGlhc0RtUmVzSUQgIDxBPiYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29u c3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0 dXJuIHNpemVvZiAoICAgIHVpbnQxNiAgKTsgfQlFbUFsaWFzRG1SZXNJRCAgPEE+JglvcGVyYXRv cj0gKGNvbnN0IGJvb2wpOwlFbUFsaWFzRG1SZXNJRCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IGNo YXIpOwlFbUFsaWFzRG1SZXNJRCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIp OwlFbUFsaWFzRG1SZXNJRCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJ RW1BbGlhc0RtUmVzSUQgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBpbnQpOwlFbUFs aWFzRG1SZXNJRCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbUFsaWFz RG1SZXNJRCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFyKTsJRW1BbGlhc0RtUmVz SUQgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlFbUFsaWFzRG1SZXNJRCAg PEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBpbnQpOwlFbUFsaWFzRG1SZXNJRCAgPEE+Jglv cGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBsb25nKTsJRW1BbGlhc0RtUmVzSUQgIDxBPiYJb3BlcmF0 b3I9IChjb25zdCB2b2lkKik7CUVtQWxpYXNEbVJlc0lEICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg RW1BbGlhc0RtUmVzSUQgIDxBPiYpOwlvcGVyYXRvciAgIERtUmVzSUQgICAodm9pZCkgY29uc3Q7 CUVtQWxpYXNEbVJlc0lEICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0RtUmVz SUQgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzRG1SZXNJRCAg ICh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwl9OyAJY2xhc3MgRW1Qcm94eURtUmVzSUQgIAl7CXB1 YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eURtUmVzSUQgICAodm9pZCk7CUVt UHJveHlEbVJlc0lEICAgKGNvbnN0IEVtUHJveHlEbVJlc0lEICAmKTsJcHRyX3R5cGUJCQlHZXRQ dHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGlj IHNpemVfdAkJR2V0U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXplb2YgKCAgICB1aW50MTYgICk7 IH0JRW1Qcm94eURtUmVzSUQgICYJCW9wZXJhdG9yPSAoY29uc3QgYm9vbCk7CUVtUHJveHlEbVJl c0lEICAmCQlvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlFbVByb3h5RG1SZXNJRCAgJgkJb3BlcmF0 b3I9IChjb25zdCB1bnNpZ25lZCBjaGFyKTsJRW1Qcm94eURtUmVzSUQgICYJCW9wZXJhdG9yPSAo Y29uc3QgdW5zaWduZWQgc2hvcnQpOwlFbVByb3h5RG1SZXNJRCAgJgkJb3BlcmF0b3I9IChjb25z dCB1bnNpZ25lZCBpbnQpOwlFbVByb3h5RG1SZXNJRCAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNp Z25lZCBsb25nKTsJRW1Qcm94eURtUmVzSUQgICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGNo YXIpOwlFbVByb3h5RG1SZXNJRCAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlF bVByb3h5RG1SZXNJRCAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgaW50KTsJRW1Qcm94eURt UmVzSUQgICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGxvbmcpOwlFbVByb3h5RG1SZXNJRCAg JgkJb3BlcmF0b3I9IChjb25zdCB2b2lkKik7CUVtUHJveHlEbVJlc0lEICAmCQlvcGVyYXRvcj0g KGNvbnN0IEVtUHJveHlEbVJlc0lEICAmKTsJb3BlcmF0b3IgICBEbVJlc0lEICAgKHZvaWQpIGNv bnN0OwlFbUFsaWFzRG1SZXNJRCAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlh c0RtUmVzSUQgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7 CWNoYXIJCQlfYnl0ZXNbc2l6ZW9mICggICAgdWludDE2ICApXTsJfSBmTG9jYWxEYXRhOwl9OyAg CSB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc2VtdXB0ciAgCXsJcHVibGljOgl0eXBl ZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzZW11cHRyICAgKHB0cl90 eXBlKTsJRW1BbGlhc2VtdXB0ciAgIChjb25zdCBFbUFsaWFzZW11cHRyICA8QT4mKTsJcHRyX3R5 cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJ R2V0U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXplb2YgKCAgICBlbXVwdHIgICk7IH0JRW1BbGlh c2VtdXB0ciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IGJvb2wpOwlFbUFsaWFzZW11cHRyICA8QT4m CW9wZXJhdG9yPSAoY29uc3QgY2hhcik7CUVtQWxpYXNlbXVwdHIgIDxBPiYJb3BlcmF0b3I9IChj b25zdCB1bnNpZ25lZCBjaGFyKTsJRW1BbGlhc2VtdXB0ciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0 IHVuc2lnbmVkIHNob3J0KTsJRW1BbGlhc2VtdXB0ciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVu c2lnbmVkIGludCk7CUVtQWxpYXNlbXVwdHIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25l ZCBsb25nKTsJRW1BbGlhc2VtdXB0ciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFy KTsJRW1BbGlhc2VtdXB0ciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9ydCk7CUVt QWxpYXNlbXVwdHIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgaW50KTsJRW1BbGlhc2Vt dXB0ciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBsb25nKTsJRW1BbGlhc2VtdXB0ciAg PEE+JglvcGVyYXRvcj0gKGNvbnN0IHZvaWQqKTsJRW1BbGlhc2VtdXB0ciAgPEE+JglvcGVyYXRv cj0gKGNvbnN0IEVtQWxpYXNlbXVwdHIgIDxBPiYpOwlvcGVyYXRvciAgIGVtdXB0ciAgICh2b2lk KSBjb25zdDsJRW1BbGlhc2VtdXB0ciAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxp YXNlbXVwdHIgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzZW11 cHRyICAgKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CX07IAljbGFzcyBFbVByb3h5ZW11cHRyICAJ ewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHllbXVwdHIgICAodm9pZCk7 CUVtUHJveHllbXVwdHIgICAoY29uc3QgRW1Qcm94eWVtdXB0ciAgJik7CXB0cl90eXBlCQkJR2V0 UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRp YyBzaXplX3QJCUdldFNpemUgKHZvaWQpCQkJeyByZXR1cm4gc2l6ZW9mICggICAgZW11cHRyICAp OyB9CUVtUHJveHllbXVwdHIgICYJCW9wZXJhdG9yPSAoY29uc3QgYm9vbCk7CUVtUHJveHllbXVw dHIgICYJCW9wZXJhdG9yPSAoY29uc3QgY2hhcik7CUVtUHJveHllbXVwdHIgICYJCW9wZXJhdG9y PSAoY29uc3QgdW5zaWduZWQgY2hhcik7CUVtUHJveHllbXVwdHIgICYJCW9wZXJhdG9yPSAoY29u c3QgdW5zaWduZWQgc2hvcnQpOwlFbVByb3h5ZW11cHRyICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVu c2lnbmVkIGludCk7CUVtUHJveHllbXVwdHIgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQg bG9uZyk7CUVtUHJveHllbXVwdHIgICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGNoYXIpOwlF bVByb3h5ZW11cHRyICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9ydCk7CUVtUHJveHll bXVwdHIgICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGludCk7CUVtUHJveHllbXVwdHIgICYJ CW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGxvbmcpOwlFbVByb3h5ZW11cHRyICAmCQlvcGVyYXRv cj0gKGNvbnN0IHZvaWQqKTsJRW1Qcm94eWVtdXB0ciAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVBy b3h5ZW11cHRyICAmKTsJb3BlcmF0b3IgICBlbXVwdHIgICAodm9pZCkgY29uc3Q7CUVtQWxpYXNl bXVwdHIgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNlbXVwdHIgIDxMQVM+ CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNb c2l6ZW9mICggICAgZW11cHRyICApXTsJfSBmTG9jYWxEYXRhOwl9OyAgCSB0ZW1wbGF0ZSA8Y2xh c3MgQT4JY2xhc3MgRW1BbGlhc0VyciAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0 cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzRXJyICAgKHB0cl90eXBlKTsJRW1BbGlhc0VyciAgIChj b25zdCBFbUFsaWFzRXJyICA8QT4mKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsg cmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZSAodm9pZCkJCQl7IHJldHVybiBz aXplb2YgKCAgICB1aW50MTYgICk7IH0JRW1BbGlhc0VyciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0 IGJvb2wpOwlFbUFsaWFzRXJyICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgY2hhcik7CUVtQWxpYXNF cnIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBjaGFyKTsJRW1BbGlhc0VyciAgPEE+ JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1BbGlhc0VyciAgPEE+JglvcGVy YXRvcj0gKGNvbnN0IHVuc2lnbmVkIGludCk7CUVtQWxpYXNFcnIgIDxBPiYJb3BlcmF0b3I9IChj b25zdCB1bnNpZ25lZCBsb25nKTsJRW1BbGlhc0VyciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNp Z25lZCBjaGFyKTsJRW1BbGlhc0VyciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9y dCk7CUVtQWxpYXNFcnIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgaW50KTsJRW1BbGlh c0VyciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBsb25nKTsJRW1BbGlhc0VyciAgPEE+ JglvcGVyYXRvcj0gKGNvbnN0IHZvaWQqKTsJRW1BbGlhc0VyciAgPEE+JglvcGVyYXRvcj0gKGNv bnN0IEVtQWxpYXNFcnIgIDxBPiYpOwlvcGVyYXRvciAgIEVyciAgICh2b2lkKSBjb25zdDsJRW1B bGlhc0VyciAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNFcnIgIDxBPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzRXJyICAgKHZvaWQpOwlwdHJfdHlw ZQkJCWZQdHI7CX07IAljbGFzcyBFbVByb3h5RXJyICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCog cHRyX3R5cGU7CUVtUHJveHlFcnIgICAodm9pZCk7CUVtUHJveHlFcnIgICAoY29uc3QgRW1Qcm94 eUVyciAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5 cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUgKHZvaWQpCQkJeyByZXR1 cm4gc2l6ZW9mICggICAgdWludDE2ICApOyB9CUVtUHJveHlFcnIgICYJCW9wZXJhdG9yPSAoY29u c3QgYm9vbCk7CUVtUHJveHlFcnIgICYJCW9wZXJhdG9yPSAoY29uc3QgY2hhcik7CUVtUHJveHlF cnIgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgY2hhcik7CUVtUHJveHlFcnIgICYJCW9w ZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgc2hvcnQpOwlFbVByb3h5RXJyICAmCQlvcGVyYXRvcj0g KGNvbnN0IHVuc2lnbmVkIGludCk7CUVtUHJveHlFcnIgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5z aWduZWQgbG9uZyk7CUVtUHJveHlFcnIgICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGNoYXIp OwlFbVByb3h5RXJyICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9ydCk7CUVtUHJveHlF cnIgICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGludCk7CUVtUHJveHlFcnIgICYJCW9wZXJh dG9yPSAoY29uc3Qgc2lnbmVkIGxvbmcpOwlFbVByb3h5RXJyICAmCQlvcGVyYXRvcj0gKGNvbnN0 IHZvaWQqKTsJRW1Qcm94eUVyciAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5RXJyICAmKTsJ b3BlcmF0b3IgICBFcnIgICAodm9pZCkgY29uc3Q7CUVtQWxpYXNFcnIgIDxMQVM+CW9wZXJhdG9y W10gKGludCk7CWNvbnN0IEVtQWxpYXNFcnIgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7 CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbc2l6ZW9mICggICAgdWludDE2ICApXTsJ fSBmTG9jYWxEYXRhOwl9OyAgCSB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc0ZvbnRJ RCAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFs aWFzRm9udElEICAgKHB0cl90eXBlKTsJRW1BbGlhc0ZvbnRJRCAgIChjb25zdCBFbUFsaWFzRm9u dElEICA8QT4mKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7 IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXplb2YgKCAgICB1 aW50OCAgKTsgfQlFbUFsaWFzRm9udElEICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgYm9vbCk7CUVt QWxpYXNGb250SUQgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBjaGFyKTsJRW1BbGlhc0ZvbnRJRCAg PEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbUFsaWFzRm9udElEICA8QT4m CW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgc2hvcnQpOwlFbUFsaWFzRm9udElEICA8QT4mCW9w ZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgaW50KTsJRW1BbGlhc0ZvbnRJRCAgPEE+JglvcGVyYXRv cj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbUFsaWFzRm9udElEICA8QT4mCW9wZXJhdG9yPSAo Y29uc3Qgc2lnbmVkIGNoYXIpOwlFbUFsaWFzRm9udElEICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg c2lnbmVkIHNob3J0KTsJRW1BbGlhc0ZvbnRJRCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25l ZCBpbnQpOwlFbUFsaWFzRm9udElEICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGxvbmcp OwlFbUFsaWFzRm9udElEICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgdm9pZCopOwlFbUFsaWFzRm9u dElEICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc0ZvbnRJRCAgPEE+Jik7CW9wZXJhdG9y ICAgRm9udElEICAgKHZvaWQpIGNvbnN0OwlFbUFsaWFzRm9udElEICA8QT4Jb3BlcmF0b3JbXSAo aW50KTsJY29uc3QgRW1BbGlhc0ZvbnRJRCAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXBy aXZhdGU6CUVtQWxpYXNGb250SUQgICAodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJfTsgCWNsYXNz IEVtUHJveHlGb250SUQgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94 eUZvbnRJRCAgICh2b2lkKTsJRW1Qcm94eUZvbnRJRCAgIChjb25zdCBFbVByb3h5Rm9udElEICAm KTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZM b2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXpl b2YgKCAgICB1aW50OCAgKTsgfQlFbVByb3h5Rm9udElEICAmCQlvcGVyYXRvcj0gKGNvbnN0IGJv b2wpOwlFbVByb3h5Rm9udElEICAmCQlvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlFbVByb3h5Rm9u dElEICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbVByb3h5Rm9udElEICAm CQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1Qcm94eUZvbnRJRCAgJgkJb3Bl cmF0b3I9IChjb25zdCB1bnNpZ25lZCBpbnQpOwlFbVByb3h5Rm9udElEICAmCQlvcGVyYXRvcj0g KGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbVByb3h5Rm9udElEICAmCQlvcGVyYXRvcj0gKGNvbnN0 IHNpZ25lZCBjaGFyKTsJRW1Qcm94eUZvbnRJRCAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQg c2hvcnQpOwlFbVByb3h5Rm9udElEICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBpbnQpOwlF bVByb3h5Rm9udElEICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBsb25nKTsJRW1Qcm94eUZv bnRJRCAgJgkJb3BlcmF0b3I9IChjb25zdCB2b2lkKik7CUVtUHJveHlGb250SUQgICYJCW9wZXJh dG9yPSAoY29uc3QgRW1Qcm94eUZvbnRJRCAgJik7CW9wZXJhdG9yICAgRm9udElEICAgKHZvaWQp IGNvbnN0OwlFbUFsaWFzRm9udElEICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFs aWFzRm9udElEICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3Qg ewljaGFyCQkJX2J5dGVzW3NpemVvZiAoICAgIHVpbnQ4ICApXTsJfSBmTG9jYWxEYXRhOwl9OyAg CSB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc0Zvcm1PYmplY3RLaW5kICAJewlwdWJs aWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNGb3JtT2Jq ZWN0S2luZCAgIChwdHJfdHlwZSk7CUVtQWxpYXNGb3JtT2JqZWN0S2luZCAgIChjb25zdCBFbUFs aWFzRm9ybU9iamVjdEtpbmQgIDxBPiYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJ eyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0dXJu IHNpemVvZiAoICAgIHVpbnQ4ICApOyB9CUVtQWxpYXNGb3JtT2JqZWN0S2luZCAgPEE+JglvcGVy YXRvcj0gKGNvbnN0IGJvb2wpOwlFbUFsaWFzRm9ybU9iamVjdEtpbmQgIDxBPiYJb3BlcmF0b3I9 IChjb25zdCBjaGFyKTsJRW1BbGlhc0Zvcm1PYmplY3RLaW5kICA8QT4mCW9wZXJhdG9yPSAoY29u c3QgdW5zaWduZWQgY2hhcik7CUVtQWxpYXNGb3JtT2JqZWN0S2luZCAgPEE+JglvcGVyYXRvcj0g KGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1BbGlhc0Zvcm1PYmplY3RLaW5kICA8QT4mCW9wZXJh dG9yPSAoY29uc3QgdW5zaWduZWQgaW50KTsJRW1BbGlhc0Zvcm1PYmplY3RLaW5kICA8QT4mCW9w ZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgbG9uZyk7CUVtQWxpYXNGb3JtT2JqZWN0S2luZCAgPEE+ JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFyKTsJRW1BbGlhc0Zvcm1PYmplY3RLaW5kICA8 QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIHNob3J0KTsJRW1BbGlhc0Zvcm1PYmplY3RLaW5k ICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGludCk7CUVtQWxpYXNGb3JtT2JqZWN0S2lu ZCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBsb25nKTsJRW1BbGlhc0Zvcm1PYmplY3RL aW5kICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgdm9pZCopOwlFbUFsaWFzRm9ybU9iamVjdEtpbmQg IDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzRm9ybU9iamVjdEtpbmQgIDxBPiYpOwlvcGVy YXRvciAgIEZvcm1PYmplY3RLaW5kICAgKHZvaWQpIGNvbnN0OwlFbUFsaWFzRm9ybU9iamVjdEtp bmQgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzRm9ybU9iamVjdEtpbmQgIDxB PglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzRm9ybU9iamVjdEtpbmQg ICAodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJfTsgCWNsYXNzIEVtUHJveHlGb3JtT2JqZWN0S2lu ZCAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5Rm9ybU9iamVjdEtp bmQgICAodm9pZCk7CUVtUHJveHlGb3JtT2JqZWN0S2luZCAgIChjb25zdCBFbVByb3h5Rm9ybU9i amVjdEtpbmQgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0 cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsg cmV0dXJuIHNpemVvZiAoICAgIHVpbnQ4ICApOyB9CUVtUHJveHlGb3JtT2JqZWN0S2luZCAgJgkJ b3BlcmF0b3I9IChjb25zdCBib29sKTsJRW1Qcm94eUZvcm1PYmplY3RLaW5kICAmCQlvcGVyYXRv cj0gKGNvbnN0IGNoYXIpOwlFbVByb3h5Rm9ybU9iamVjdEtpbmQgICYJCW9wZXJhdG9yPSAoY29u c3QgdW5zaWduZWQgY2hhcik7CUVtUHJveHlGb3JtT2JqZWN0S2luZCAgJgkJb3BlcmF0b3I9IChj b25zdCB1bnNpZ25lZCBzaG9ydCk7CUVtUHJveHlGb3JtT2JqZWN0S2luZCAgJgkJb3BlcmF0b3I9 IChjb25zdCB1bnNpZ25lZCBpbnQpOwlFbVByb3h5Rm9ybU9iamVjdEtpbmQgICYJCW9wZXJhdG9y PSAoY29uc3QgdW5zaWduZWQgbG9uZyk7CUVtUHJveHlGb3JtT2JqZWN0S2luZCAgJgkJb3BlcmF0 b3I9IChjb25zdCBzaWduZWQgY2hhcik7CUVtUHJveHlGb3JtT2JqZWN0S2luZCAgJgkJb3BlcmF0 b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlFbVByb3h5Rm9ybU9iamVjdEtpbmQgICYJCW9wZXJh dG9yPSAoY29uc3Qgc2lnbmVkIGludCk7CUVtUHJveHlGb3JtT2JqZWN0S2luZCAgJgkJb3BlcmF0 b3I9IChjb25zdCBzaWduZWQgbG9uZyk7CUVtUHJveHlGb3JtT2JqZWN0S2luZCAgJgkJb3BlcmF0 b3I9IChjb25zdCB2b2lkKik7CUVtUHJveHlGb3JtT2JqZWN0S2luZCAgJgkJb3BlcmF0b3I9IChj b25zdCBFbVByb3h5Rm9ybU9iamVjdEtpbmQgICYpOwlvcGVyYXRvciAgIEZvcm1PYmplY3RLaW5k ICAgKHZvaWQpIGNvbnN0OwlFbUFsaWFzRm9ybU9iamVjdEtpbmQgIDxMQVM+CW9wZXJhdG9yW10g KGludCk7CWNvbnN0IEVtQWxpYXNGb3JtT2JqZWN0S2luZCAgPExBUz4Jb3BlcmF0b3JbXSAoaW50 KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1tzaXplb2YgKCAgICB1aW50 OCAgKV07CX0gZkxvY2FsRGF0YTsJfTsgIAkgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxp YXNMb2NhbElEICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5 cGU7CUVtQWxpYXNMb2NhbElEICAgKHB0cl90eXBlKTsJRW1BbGlhc0xvY2FsSUQgICAoY29uc3Qg RW1BbGlhc0xvY2FsSUQgIDxBPiYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyBy ZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0dXJuIHNp emVvZiAoICAgIHVpbnQzMiAgKTsgfQlFbUFsaWFzTG9jYWxJRCAgPEE+JglvcGVyYXRvcj0gKGNv bnN0IGJvb2wpOwlFbUFsaWFzTG9jYWxJRCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlF bUFsaWFzTG9jYWxJRCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbUFs aWFzTG9jYWxJRCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1BbGlh c0xvY2FsSUQgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBpbnQpOwlFbUFsaWFzTG9j YWxJRCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbUFsaWFzTG9jYWxJ RCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFyKTsJRW1BbGlhc0xvY2FsSUQgIDxB PiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlFbUFsaWFzTG9jYWxJRCAgPEE+Jglv cGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBpbnQpOwlFbUFsaWFzTG9jYWxJRCAgPEE+JglvcGVyYXRv cj0gKGNvbnN0IHNpZ25lZCBsb25nKTsJRW1BbGlhc0xvY2FsSUQgIDxBPiYJb3BlcmF0b3I9IChj b25zdCB2b2lkKik7CUVtQWxpYXNMb2NhbElEICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlh c0xvY2FsSUQgIDxBPiYpOwlvcGVyYXRvciAgIExvY2FsSUQgICAodm9pZCkgY29uc3Q7CUVtQWxp YXNMb2NhbElEICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0xvY2FsSUQgIDxB PglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzTG9jYWxJRCAgICh2b2lk KTsJcHRyX3R5cGUJCQlmUHRyOwl9OyAJY2xhc3MgRW1Qcm94eUxvY2FsSUQgIAl7CXB1YmxpYzoJ dHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUxvY2FsSUQgICAodm9pZCk7CUVtUHJveHlM b2NhbElEICAgKGNvbnN0IEVtUHJveHlMb2NhbElEICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZv aWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVf dAkJR2V0U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXplb2YgKCAgICB1aW50MzIgICk7IH0JRW1Q cm94eUxvY2FsSUQgICYJCW9wZXJhdG9yPSAoY29uc3QgYm9vbCk7CUVtUHJveHlMb2NhbElEICAm CQlvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlFbVByb3h5TG9jYWxJRCAgJgkJb3BlcmF0b3I9IChj b25zdCB1bnNpZ25lZCBjaGFyKTsJRW1Qcm94eUxvY2FsSUQgICYJCW9wZXJhdG9yPSAoY29uc3Qg dW5zaWduZWQgc2hvcnQpOwlFbVByb3h5TG9jYWxJRCAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNp Z25lZCBpbnQpOwlFbVByb3h5TG9jYWxJRCAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBs b25nKTsJRW1Qcm94eUxvY2FsSUQgICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGNoYXIpOwlF bVByb3h5TG9jYWxJRCAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlFbVByb3h5 TG9jYWxJRCAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgaW50KTsJRW1Qcm94eUxvY2FsSUQg ICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGxvbmcpOwlFbVByb3h5TG9jYWxJRCAgJgkJb3Bl cmF0b3I9IChjb25zdCB2b2lkKik7CUVtUHJveHlMb2NhbElEICAmCQlvcGVyYXRvcj0gKGNvbnN0 IEVtUHJveHlMb2NhbElEICAmKTsJb3BlcmF0b3IgICBMb2NhbElEICAgKHZvaWQpIGNvbnN0OwlF bUFsaWFzTG9jYWxJRCAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0xvY2Fs SUQgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJ CQlfYnl0ZXNbc2l6ZW9mICggICAgdWludDMyICApXTsJfSBmTG9jYWxEYXRhOwl9OyAgIAogdGVt cGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNOZXRJUEFkZHIgIAl7CXB1YmxpYzoJdHlwZWRl ZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc05ldElQQWRkciAgIChwdHJf dHlwZSk7CUVtQWxpYXNOZXRJUEFkZHIgICAoY29uc3QgRW1BbGlhc05ldElQQWRkciAgPEE+Jik7 CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBz aXplX3QJCUdldFNpemUgKHZvaWQpCQkJeyByZXR1cm4gc2l6ZW9mICggICAgdWludDMyICApOyB9 CUVtQWxpYXNOZXRJUEFkZHIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBib29sKTsJRW1BbGlhc05l dElQQWRkciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlFbUFsaWFzTmV0SVBBZGRyICA8 QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgY2hhcik7CUVtQWxpYXNOZXRJUEFkZHIgIDxB PiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBzaG9ydCk7CUVtQWxpYXNOZXRJUEFkZHIgIDxB PiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBpbnQpOwlFbUFsaWFzTmV0SVBBZGRyICA8QT4m CW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgbG9uZyk7CUVtQWxpYXNOZXRJUEFkZHIgIDxBPiYJ b3BlcmF0b3I9IChjb25zdCBzaWduZWQgY2hhcik7CUVtQWxpYXNOZXRJUEFkZHIgIDxBPiYJb3Bl cmF0b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlFbUFsaWFzTmV0SVBBZGRyICA8QT4mCW9wZXJh dG9yPSAoY29uc3Qgc2lnbmVkIGludCk7CUVtQWxpYXNOZXRJUEFkZHIgIDxBPiYJb3BlcmF0b3I9 IChjb25zdCBzaWduZWQgbG9uZyk7CUVtQWxpYXNOZXRJUEFkZHIgIDxBPiYJb3BlcmF0b3I9IChj b25zdCB2b2lkKik7CUVtQWxpYXNOZXRJUEFkZHIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFs aWFzTmV0SVBBZGRyICA8QT4mKTsJb3BlcmF0b3IgICBOZXRJUEFkZHIgICAodm9pZCkgY29uc3Q7 CUVtQWxpYXNOZXRJUEFkZHIgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzTmV0 SVBBZGRyICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc05ldElQ QWRkciAgICh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwl9OyAJY2xhc3MgRW1Qcm94eU5ldElQQWRk ciAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5TmV0SVBBZGRyICAg KHZvaWQpOwlFbVByb3h5TmV0SVBBZGRyICAgKGNvbnN0IEVtUHJveHlOZXRJUEFkZHIgICYpOwlw dHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2Fs RGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0dXJuIHNpemVvZiAo ICAgIHVpbnQzMiAgKTsgfQlFbVByb3h5TmV0SVBBZGRyICAmCQlvcGVyYXRvcj0gKGNvbnN0IGJv b2wpOwlFbVByb3h5TmV0SVBBZGRyICAmCQlvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlFbVByb3h5 TmV0SVBBZGRyICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbVByb3h5TmV0 SVBBZGRyICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1Qcm94eU5ldElQ QWRkciAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBpbnQpOwlFbVByb3h5TmV0SVBBZGRy ICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbVByb3h5TmV0SVBBZGRyICAm CQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFyKTsJRW1Qcm94eU5ldElQQWRkciAgJgkJb3Bl cmF0b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlFbVByb3h5TmV0SVBBZGRyICAmCQlvcGVyYXRv cj0gKGNvbnN0IHNpZ25lZCBpbnQpOwlFbVByb3h5TmV0SVBBZGRyICAmCQlvcGVyYXRvcj0gKGNv bnN0IHNpZ25lZCBsb25nKTsJRW1Qcm94eU5ldElQQWRkciAgJgkJb3BlcmF0b3I9IChjb25zdCB2 b2lkKik7CUVtUHJveHlOZXRJUEFkZHIgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eU5ldElQ QWRkciAgJik7CW9wZXJhdG9yICAgTmV0SVBBZGRyICAgKHZvaWQpIGNvbnN0OwlFbUFsaWFzTmV0 SVBBZGRyICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzTmV0SVBBZGRyICA8 TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5 dGVzW3NpemVvZiAoICAgIHVpbnQzMiAgKV07CX0gZkxvY2FsRGF0YTsJfTsgIAkgdGVtcGxhdGUg PGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNQYXR0ZXJuVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5 cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzUGF0dGVyblR5cGUgICAocHRyX3R5 cGUpOwlFbUFsaWFzUGF0dGVyblR5cGUgICAoY29uc3QgRW1BbGlhc1BhdHRlcm5UeXBlICA8QT4m KTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGlj IHNpemVfdAkJR2V0U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXplb2YgKCAgICB1aW50OCAgKTsg fQlFbUFsaWFzUGF0dGVyblR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBib29sKTsJRW1BbGlh c1BhdHRlcm5UeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgY2hhcik7CUVtQWxpYXNQYXR0ZXJu VHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbUFsaWFzUGF0dGVy blR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBzaG9ydCk7CUVtQWxpYXNQYXR0 ZXJuVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGludCk7CUVtQWxpYXNQYXR0 ZXJuVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbUFsaWFzUGF0 dGVyblR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgY2hhcik7CUVtQWxpYXNQYXR0 ZXJuVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9ydCk7CUVtQWxpYXNQYXR0 ZXJuVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBpbnQpOwlFbUFsaWFzUGF0dGVy blR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgbG9uZyk7CUVtQWxpYXNQYXR0ZXJu VHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHZvaWQqKTsJRW1BbGlhc1BhdHRlcm5UeXBlICA8 QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1BhdHRlcm5UeXBlICA8QT4mKTsJb3BlcmF0b3Ig ICBQYXR0ZXJuVHlwZSAgICh2b2lkKSBjb25zdDsJRW1BbGlhc1BhdHRlcm5UeXBlICA8QT4Jb3Bl cmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1BhdHRlcm5UeXBlICA8QT4Jb3BlcmF0b3JbXSAo aW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1BhdHRlcm5UeXBlICAgKHZvaWQpOwlwdHJfdHlw ZQkJCWZQdHI7CX07IAljbGFzcyBFbVByb3h5UGF0dGVyblR5cGUgIAl7CXB1YmxpYzoJdHlwZWRl ZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVBhdHRlcm5UeXBlICAgKHZvaWQpOwlFbVByb3h5UGF0 dGVyblR5cGUgICAoY29uc3QgRW1Qcm94eVBhdHRlcm5UeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQ dHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGlj IHNpemVfdAkJR2V0U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXplb2YgKCAgICB1aW50OCAgKTsg fQlFbVByb3h5UGF0dGVyblR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgYm9vbCk7CUVtUHJveHlQ YXR0ZXJuVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBjaGFyKTsJRW1Qcm94eVBhdHRlcm5UeXBl ICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbVByb3h5UGF0dGVyblR5cGUg ICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgc2hvcnQpOwlFbVByb3h5UGF0dGVyblR5cGUg ICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgaW50KTsJRW1Qcm94eVBhdHRlcm5UeXBlICAm CQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbVByb3h5UGF0dGVyblR5cGUgICYJ CW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGNoYXIpOwlFbVByb3h5UGF0dGVyblR5cGUgICYJCW9w ZXJhdG9yPSAoY29uc3Qgc2lnbmVkIHNob3J0KTsJRW1Qcm94eVBhdHRlcm5UeXBlICAmCQlvcGVy YXRvcj0gKGNvbnN0IHNpZ25lZCBpbnQpOwlFbVByb3h5UGF0dGVyblR5cGUgICYJCW9wZXJhdG9y PSAoY29uc3Qgc2lnbmVkIGxvbmcpOwlFbVByb3h5UGF0dGVyblR5cGUgICYJCW9wZXJhdG9yPSAo Y29uc3Qgdm9pZCopOwlFbVByb3h5UGF0dGVyblR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Q cm94eVBhdHRlcm5UeXBlICAmKTsJb3BlcmF0b3IgICBQYXR0ZXJuVHlwZSAgICh2b2lkKSBjb25z dDsJRW1BbGlhc1BhdHRlcm5UeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFs aWFzUGF0dGVyblR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0 cnVjdCB7CWNoYXIJCQlfYnl0ZXNbc2l6ZW9mICggICAgdWludDggICldOwl9IGZMb2NhbERhdGE7 CX07ICAJIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzU2NyT3BlcmF0aW9uICAJewlw dWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNTY3JP cGVyYXRpb24gICAocHRyX3R5cGUpOwlFbUFsaWFzU2NyT3BlcmF0aW9uICAgKGNvbnN0IEVtQWxp YXNTY3JPcGVyYXRpb24gIDxBPiYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyBy ZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0dXJuIHNp emVvZiAoICAgIHVpbnQ4ICApOyB9CUVtQWxpYXNTY3JPcGVyYXRpb24gIDxBPiYJb3BlcmF0b3I9 IChjb25zdCBib29sKTsJRW1BbGlhc1Njck9wZXJhdGlvbiAgPEE+JglvcGVyYXRvcj0gKGNvbnN0 IGNoYXIpOwlFbUFsaWFzU2NyT3BlcmF0aW9uICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWdu ZWQgY2hhcik7CUVtQWxpYXNTY3JPcGVyYXRpb24gIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNp Z25lZCBzaG9ydCk7CUVtQWxpYXNTY3JPcGVyYXRpb24gIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1 bnNpZ25lZCBpbnQpOwlFbUFsaWFzU2NyT3BlcmF0aW9uICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg dW5zaWduZWQgbG9uZyk7CUVtQWxpYXNTY3JPcGVyYXRpb24gIDxBPiYJb3BlcmF0b3I9IChjb25z dCBzaWduZWQgY2hhcik7CUVtQWxpYXNTY3JPcGVyYXRpb24gIDxBPiYJb3BlcmF0b3I9IChjb25z dCBzaWduZWQgc2hvcnQpOwlFbUFsaWFzU2NyT3BlcmF0aW9uICA8QT4mCW9wZXJhdG9yPSAoY29u c3Qgc2lnbmVkIGludCk7CUVtQWxpYXNTY3JPcGVyYXRpb24gIDxBPiYJb3BlcmF0b3I9IChjb25z dCBzaWduZWQgbG9uZyk7CUVtQWxpYXNTY3JPcGVyYXRpb24gIDxBPiYJb3BlcmF0b3I9IChjb25z dCB2b2lkKik7CUVtQWxpYXNTY3JPcGVyYXRpb24gIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFs aWFzU2NyT3BlcmF0aW9uICA8QT4mKTsJb3BlcmF0b3IgICBTY3JPcGVyYXRpb24gICAodm9pZCkg Y29uc3Q7CUVtQWxpYXNTY3JPcGVyYXRpb24gIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBF bUFsaWFzU2NyT3BlcmF0aW9uICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJ RW1BbGlhc1Njck9wZXJhdGlvbiAgICh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwl9OyAJY2xhc3Mg RW1Qcm94eVNjck9wZXJhdGlvbiAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlF bVByb3h5U2NyT3BlcmF0aW9uICAgKHZvaWQpOwlFbVByb3h5U2NyT3BlcmF0aW9uICAgKGNvbnN0 IEVtUHJveHlTY3JPcGVyYXRpb24gICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJ eyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXpl ICh2b2lkKQkJCXsgcmV0dXJuIHNpemVvZiAoICAgIHVpbnQ4ICApOyB9CUVtUHJveHlTY3JPcGVy YXRpb24gICYJCW9wZXJhdG9yPSAoY29uc3QgYm9vbCk7CUVtUHJveHlTY3JPcGVyYXRpb24gICYJ CW9wZXJhdG9yPSAoY29uc3QgY2hhcik7CUVtUHJveHlTY3JPcGVyYXRpb24gICYJCW9wZXJhdG9y PSAoY29uc3QgdW5zaWduZWQgY2hhcik7CUVtUHJveHlTY3JPcGVyYXRpb24gICYJCW9wZXJhdG9y PSAoY29uc3QgdW5zaWduZWQgc2hvcnQpOwlFbVByb3h5U2NyT3BlcmF0aW9uICAmCQlvcGVyYXRv cj0gKGNvbnN0IHVuc2lnbmVkIGludCk7CUVtUHJveHlTY3JPcGVyYXRpb24gICYJCW9wZXJhdG9y PSAoY29uc3QgdW5zaWduZWQgbG9uZyk7CUVtUHJveHlTY3JPcGVyYXRpb24gICYJCW9wZXJhdG9y PSAoY29uc3Qgc2lnbmVkIGNoYXIpOwlFbVByb3h5U2NyT3BlcmF0aW9uICAmCQlvcGVyYXRvcj0g KGNvbnN0IHNpZ25lZCBzaG9ydCk7CUVtUHJveHlTY3JPcGVyYXRpb24gICYJCW9wZXJhdG9yPSAo Y29uc3Qgc2lnbmVkIGludCk7CUVtUHJveHlTY3JPcGVyYXRpb24gICYJCW9wZXJhdG9yPSAoY29u c3Qgc2lnbmVkIGxvbmcpOwlFbVByb3h5U2NyT3BlcmF0aW9uICAmCQlvcGVyYXRvcj0gKGNvbnN0 IHZvaWQqKTsJRW1Qcm94eVNjck9wZXJhdGlvbiAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5 U2NyT3BlcmF0aW9uICAmKTsJb3BlcmF0b3IgICBTY3JPcGVyYXRpb24gICAodm9pZCkgY29uc3Q7 CUVtQWxpYXNTY3JPcGVyYXRpb24gIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxp YXNTY3JPcGVyYXRpb24gIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0 cnVjdCB7CWNoYXIJCQlfYnl0ZXNbc2l6ZW9mICggICAgdWludDggICldOwl9IGZMb2NhbERhdGE7 CX07ICAJIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzU2xrUGt0SGVhZGVyQ2hlY2tz dW0gIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1B bGlhc1Nsa1BrdEhlYWRlckNoZWNrc3VtICAgKHB0cl90eXBlKTsJRW1BbGlhc1Nsa1BrdEhlYWRl ckNoZWNrc3VtICAgKGNvbnN0IEVtQWxpYXNTbGtQa3RIZWFkZXJDaGVja3N1bSAgPEE+Jik7CXB0 cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXpl X3QJCUdldFNpemUgKHZvaWQpCQkJeyByZXR1cm4gc2l6ZW9mICggICAgdWludDggICk7IH0JRW1B bGlhc1Nsa1BrdEhlYWRlckNoZWNrc3VtICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgYm9vbCk7CUVt QWxpYXNTbGtQa3RIZWFkZXJDaGVja3N1bSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlF bUFsaWFzU2xrUGt0SGVhZGVyQ2hlY2tzdW0gIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25l ZCBjaGFyKTsJRW1BbGlhc1Nsa1BrdEhlYWRlckNoZWNrc3VtICA8QT4mCW9wZXJhdG9yPSAoY29u c3QgdW5zaWduZWQgc2hvcnQpOwlFbUFsaWFzU2xrUGt0SGVhZGVyQ2hlY2tzdW0gIDxBPiYJb3Bl cmF0b3I9IChjb25zdCB1bnNpZ25lZCBpbnQpOwlFbUFsaWFzU2xrUGt0SGVhZGVyQ2hlY2tzdW0g IDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBsb25nKTsJRW1BbGlhc1Nsa1BrdEhlYWRl ckNoZWNrc3VtICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGNoYXIpOwlFbUFsaWFzU2xr UGt0SGVhZGVyQ2hlY2tzdW0gIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlF bUFsaWFzU2xrUGt0SGVhZGVyQ2hlY2tzdW0gIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQg aW50KTsJRW1BbGlhc1Nsa1BrdEhlYWRlckNoZWNrc3VtICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg c2lnbmVkIGxvbmcpOwlFbUFsaWFzU2xrUGt0SGVhZGVyQ2hlY2tzdW0gIDxBPiYJb3BlcmF0b3I9 IChjb25zdCB2b2lkKik7CUVtQWxpYXNTbGtQa3RIZWFkZXJDaGVja3N1bSAgPEE+JglvcGVyYXRv cj0gKGNvbnN0IEVtQWxpYXNTbGtQa3RIZWFkZXJDaGVja3N1bSAgPEE+Jik7CW9wZXJhdG9yICAg U2xrUGt0SGVhZGVyQ2hlY2tzdW0gICAodm9pZCkgY29uc3Q7CUVtQWxpYXNTbGtQa3RIZWFkZXJD aGVja3N1bSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTbGtQa3RIZWFkZXJD aGVja3N1bSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNTbGtQ a3RIZWFkZXJDaGVja3N1bSAgICh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwl9OyAJY2xhc3MgRW1Q cm94eVNsa1BrdEhlYWRlckNoZWNrc3VtICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5 cGU7CUVtUHJveHlTbGtQa3RIZWFkZXJDaGVja3N1bSAgICh2b2lkKTsJRW1Qcm94eVNsa1BrdEhl YWRlckNoZWNrc3VtICAgKGNvbnN0IEVtUHJveHlTbGtQa3RIZWFkZXJDaGVja3N1bSAgJik7CXB0 cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxE YXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUgKHZvaWQpCQkJeyByZXR1cm4gc2l6ZW9mICgg ICAgdWludDggICk7IH0JRW1Qcm94eVNsa1BrdEhlYWRlckNoZWNrc3VtICAmCQlvcGVyYXRvcj0g KGNvbnN0IGJvb2wpOwlFbVByb3h5U2xrUGt0SGVhZGVyQ2hlY2tzdW0gICYJCW9wZXJhdG9yPSAo Y29uc3QgY2hhcik7CUVtUHJveHlTbGtQa3RIZWFkZXJDaGVja3N1bSAgJgkJb3BlcmF0b3I9IChj b25zdCB1bnNpZ25lZCBjaGFyKTsJRW1Qcm94eVNsa1BrdEhlYWRlckNoZWNrc3VtICAmCQlvcGVy YXRvcj0gKGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1Qcm94eVNsa1BrdEhlYWRlckNoZWNrc3Vt ICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGludCk7CUVtUHJveHlTbGtQa3RIZWFkZXJD aGVja3N1bSAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBsb25nKTsJRW1Qcm94eVNsa1Br dEhlYWRlckNoZWNrc3VtICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFyKTsJRW1Qcm94 eVNsa1BrdEhlYWRlckNoZWNrc3VtICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9ydCk7 CUVtUHJveHlTbGtQa3RIZWFkZXJDaGVja3N1bSAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQg aW50KTsJRW1Qcm94eVNsa1BrdEhlYWRlckNoZWNrc3VtICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNp Z25lZCBsb25nKTsJRW1Qcm94eVNsa1BrdEhlYWRlckNoZWNrc3VtICAmCQlvcGVyYXRvcj0gKGNv bnN0IHZvaWQqKTsJRW1Qcm94eVNsa1BrdEhlYWRlckNoZWNrc3VtICAmCQlvcGVyYXRvcj0gKGNv bnN0IEVtUHJveHlTbGtQa3RIZWFkZXJDaGVja3N1bSAgJik7CW9wZXJhdG9yICAgU2xrUGt0SGVh ZGVyQ2hlY2tzdW0gICAodm9pZCkgY29uc3Q7CUVtQWxpYXNTbGtQa3RIZWFkZXJDaGVja3N1bSAg PExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1Nsa1BrdEhlYWRlckNoZWNrc3Vt ICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJ X2J5dGVzW3NpemVvZiAoICAgIHVpbnQ4ICApXTsJfSBmTG9jYWxEYXRhOwl9OyAgCSB0ZW1wbGF0 ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc1VuZGVybGluZU1vZGVUeXBlICAJewlwdWJsaWM6CXR5 cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNVbmRlcmxpbmVNb2Rl VHlwZSAgIChwdHJfdHlwZSk7CUVtQWxpYXNVbmRlcmxpbmVNb2RlVHlwZSAgIChjb25zdCBFbUFs aWFzVW5kZXJsaW5lTW9kZVR5cGUgIDxBPiYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29u c3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0 dXJuIHNpemVvZiAoICAgIHVpbnQ4ICApOyB9CUVtQWxpYXNVbmRlcmxpbmVNb2RlVHlwZSAgPEE+ JglvcGVyYXRvcj0gKGNvbnN0IGJvb2wpOwlFbUFsaWFzVW5kZXJsaW5lTW9kZVR5cGUgIDxBPiYJ b3BlcmF0b3I9IChjb25zdCBjaGFyKTsJRW1BbGlhc1VuZGVybGluZU1vZGVUeXBlICA8QT4mCW9w ZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgY2hhcik7CUVtQWxpYXNVbmRlcmxpbmVNb2RlVHlwZSAg PEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1BbGlhc1VuZGVybGluZU1v ZGVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgaW50KTsJRW1BbGlhc1VuZGVy bGluZU1vZGVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgbG9uZyk7CUVtQWxp YXNVbmRlcmxpbmVNb2RlVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFyKTsJ RW1BbGlhc1VuZGVybGluZU1vZGVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIHNo b3J0KTsJRW1BbGlhc1VuZGVybGluZU1vZGVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2ln bmVkIGludCk7CUVtQWxpYXNVbmRlcmxpbmVNb2RlVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0 IHNpZ25lZCBsb25nKTsJRW1BbGlhc1VuZGVybGluZU1vZGVUeXBlICA8QT4mCW9wZXJhdG9yPSAo Y29uc3Qgdm9pZCopOwlFbUFsaWFzVW5kZXJsaW5lTW9kZVR5cGUgIDxBPiYJb3BlcmF0b3I9IChj b25zdCBFbUFsaWFzVW5kZXJsaW5lTW9kZVR5cGUgIDxBPiYpOwlvcGVyYXRvciAgIFVuZGVybGlu ZU1vZGVUeXBlICAgKHZvaWQpIGNvbnN0OwlFbUFsaWFzVW5kZXJsaW5lTW9kZVR5cGUgIDxBPglv cGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzVW5kZXJsaW5lTW9kZVR5cGUgIDxBPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzVW5kZXJsaW5lTW9kZVR5cGUgICAo dm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJfTsgCWNsYXNzIEVtUHJveHlVbmRlcmxpbmVNb2RlVHlw ZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5VW5kZXJsaW5lTW9k ZVR5cGUgICAodm9pZCk7CUVtUHJveHlVbmRlcmxpbmVNb2RlVHlwZSAgIChjb25zdCBFbVByb3h5 VW5kZXJsaW5lTW9kZVR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyBy ZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2 b2lkKQkJCXsgcmV0dXJuIHNpemVvZiAoICAgIHVpbnQ4ICApOyB9CUVtUHJveHlVbmRlcmxpbmVN b2RlVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBib29sKTsJRW1Qcm94eVVuZGVybGluZU1vZGVU eXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlFbVByb3h5VW5kZXJsaW5lTW9kZVR5cGUg ICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgY2hhcik7CUVtUHJveHlVbmRlcmxpbmVNb2Rl VHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBzaG9ydCk7CUVtUHJveHlVbmRlcmxp bmVNb2RlVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBpbnQpOwlFbVByb3h5VW5k ZXJsaW5lTW9kZVR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgbG9uZyk7CUVtUHJv eHlVbmRlcmxpbmVNb2RlVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgY2hhcik7CUVt UHJveHlVbmRlcmxpbmVNb2RlVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgc2hvcnQp OwlFbVByb3h5VW5kZXJsaW5lTW9kZVR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGlu dCk7CUVtUHJveHlVbmRlcmxpbmVNb2RlVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQg bG9uZyk7CUVtUHJveHlVbmRlcmxpbmVNb2RlVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCB2b2lk Kik7CUVtUHJveHlVbmRlcmxpbmVNb2RlVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5 VW5kZXJsaW5lTW9kZVR5cGUgICYpOwlvcGVyYXRvciAgIFVuZGVybGluZU1vZGVUeXBlICAgKHZv aWQpIGNvbnN0OwlFbUFsaWFzVW5kZXJsaW5lTW9kZVR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGlu dCk7CWNvbnN0IEVtQWxpYXNVbmRlcmxpbmVNb2RlVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50 KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1tzaXplb2YgKCAgICB1aW50 OCAgKV07CX0gZkxvY2FsRGF0YTsJfTsgIAkgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxp YXNVbmRvTW9kZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90 eXBlOwlFbUFsaWFzVW5kb01vZGUgICAocHRyX3R5cGUpOwlFbUFsaWFzVW5kb01vZGUgICAoY29u c3QgRW1BbGlhc1VuZG9Nb2RlICA8QT4mKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0 CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZSAodm9pZCkJCQl7IHJldHVy biBzaXplb2YgKCAgICB1aW50OCAgKTsgfQlFbUFsaWFzVW5kb01vZGUgIDxBPiYJb3BlcmF0b3I9 IChjb25zdCBib29sKTsJRW1BbGlhc1VuZG9Nb2RlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgY2hh cik7CUVtQWxpYXNVbmRvTW9kZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIp OwlFbUFsaWFzVW5kb01vZGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBzaG9ydCk7 CUVtQWxpYXNVbmRvTW9kZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGludCk7CUVt QWxpYXNVbmRvTW9kZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbUFs aWFzVW5kb01vZGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgY2hhcik7CUVtQWxpYXNV bmRvTW9kZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9ydCk7CUVtQWxpYXNVbmRv TW9kZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBpbnQpOwlFbUFsaWFzVW5kb01vZGUg IDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgbG9uZyk7CUVtQWxpYXNVbmRvTW9kZSAgPEE+ JglvcGVyYXRvcj0gKGNvbnN0IHZvaWQqKTsJRW1BbGlhc1VuZG9Nb2RlICA8QT4mCW9wZXJhdG9y PSAoY29uc3QgRW1BbGlhc1VuZG9Nb2RlICA8QT4mKTsJb3BlcmF0b3IgICBVbmRvTW9kZSAgICh2 b2lkKSBjb25zdDsJRW1BbGlhc1VuZG9Nb2RlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3Qg RW1BbGlhc1VuZG9Nb2RlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1B bGlhc1VuZG9Nb2RlICAgKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CX07IAljbGFzcyBFbVByb3h5 VW5kb01vZGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVVuZG9N b2RlICAgKHZvaWQpOwlFbVByb3h5VW5kb01vZGUgICAoY29uc3QgRW1Qcm94eVVuZG9Nb2RlICAm KTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZM b2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXpl b2YgKCAgICB1aW50OCAgKTsgfQlFbVByb3h5VW5kb01vZGUgICYJCW9wZXJhdG9yPSAoY29uc3Qg Ym9vbCk7CUVtUHJveHlVbmRvTW9kZSAgJgkJb3BlcmF0b3I9IChjb25zdCBjaGFyKTsJRW1Qcm94 eVVuZG9Nb2RlICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbVByb3h5VW5k b01vZGUgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgc2hvcnQpOwlFbVByb3h5VW5kb01v ZGUgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgaW50KTsJRW1Qcm94eVVuZG9Nb2RlICAm CQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbVByb3h5VW5kb01vZGUgICYJCW9w ZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGNoYXIpOwlFbVByb3h5VW5kb01vZGUgICYJCW9wZXJhdG9y PSAoY29uc3Qgc2lnbmVkIHNob3J0KTsJRW1Qcm94eVVuZG9Nb2RlICAmCQlvcGVyYXRvcj0gKGNv bnN0IHNpZ25lZCBpbnQpOwlFbVByb3h5VW5kb01vZGUgICYJCW9wZXJhdG9yPSAoY29uc3Qgc2ln bmVkIGxvbmcpOwlFbVByb3h5VW5kb01vZGUgICYJCW9wZXJhdG9yPSAoY29uc3Qgdm9pZCopOwlF bVByb3h5VW5kb01vZGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eVVuZG9Nb2RlICAmKTsJ b3BlcmF0b3IgICBVbmRvTW9kZSAgICh2b2lkKSBjb25zdDsJRW1BbGlhc1VuZG9Nb2RlICA8TEFT PglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzVW5kb01vZGUgIDxMQVM+CW9wZXJhdG9y W10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbc2l6ZW9mICgg ICAgdWludDggICldOwl9IGZMb2NhbERhdGE7CX07ICAJIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFz cyBFbUFsaWFzVUlPcHRpb25zVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0 cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzVUlPcHRpb25zVHlwZSAgIChwdHJfdHlwZSk7CUVtQWxp YXNVSU9wdGlvbnNUeXBlICAgKGNvbnN0IEVtQWxpYXNVSU9wdGlvbnNUeXBlICA8QT4mKTsJcHRy X3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVf dAkJR2V0U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXplb2YgKCAgICB1aW50OCAgKTsgfQlFbUFs aWFzVUlPcHRpb25zVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IGJvb2wpOwlFbUFsaWFzVUlP cHRpb25zVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlFbUFsaWFzVUlPcHRpb25z VHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbUFsaWFzVUlPcHRp b25zVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1BbGlhc1VJ T3B0aW9uc1R5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBpbnQpOwlFbUFsaWFz VUlPcHRpb25zVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbUFs aWFzVUlPcHRpb25zVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFyKTsJRW1B bGlhc1VJT3B0aW9uc1R5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlF bUFsaWFzVUlPcHRpb25zVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBpbnQpOwlF bUFsaWFzVUlPcHRpb25zVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBsb25nKTsJ RW1BbGlhc1VJT3B0aW9uc1R5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB2b2lkKik7CUVtQWxp YXNVSU9wdGlvbnNUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1VJT3B0aW9uc1R5 cGUgIDxBPiYpOwlvcGVyYXRvciAgIFVJT3B0aW9uc1R5cGUgICAodm9pZCkgY29uc3Q7CUVtQWxp YXNVSU9wdGlvbnNUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1VJT3B0 aW9uc1R5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzVUlP cHRpb25zVHlwZSAgICh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwl9OyAJY2xhc3MgRW1Qcm94eVVJ T3B0aW9uc1R5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVVJ T3B0aW9uc1R5cGUgICAodm9pZCk7CUVtUHJveHlVSU9wdGlvbnNUeXBlICAgKGNvbnN0IEVtUHJv eHlVSU9wdGlvbnNUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0 dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZSAodm9p ZCkJCQl7IHJldHVybiBzaXplb2YgKCAgICB1aW50OCAgKTsgfQlFbVByb3h5VUlPcHRpb25zVHlw ZSAgJgkJb3BlcmF0b3I9IChjb25zdCBib29sKTsJRW1Qcm94eVVJT3B0aW9uc1R5cGUgICYJCW9w ZXJhdG9yPSAoY29uc3QgY2hhcik7CUVtUHJveHlVSU9wdGlvbnNUeXBlICAmCQlvcGVyYXRvcj0g KGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbVByb3h5VUlPcHRpb25zVHlwZSAgJgkJb3BlcmF0b3I9 IChjb25zdCB1bnNpZ25lZCBzaG9ydCk7CUVtUHJveHlVSU9wdGlvbnNUeXBlICAmCQlvcGVyYXRv cj0gKGNvbnN0IHVuc2lnbmVkIGludCk7CUVtUHJveHlVSU9wdGlvbnNUeXBlICAmCQlvcGVyYXRv cj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbVByb3h5VUlPcHRpb25zVHlwZSAgJgkJb3BlcmF0 b3I9IChjb25zdCBzaWduZWQgY2hhcik7CUVtUHJveHlVSU9wdGlvbnNUeXBlICAmCQlvcGVyYXRv cj0gKGNvbnN0IHNpZ25lZCBzaG9ydCk7CUVtUHJveHlVSU9wdGlvbnNUeXBlICAmCQlvcGVyYXRv cj0gKGNvbnN0IHNpZ25lZCBpbnQpOwlFbVByb3h5VUlPcHRpb25zVHlwZSAgJgkJb3BlcmF0b3I9 IChjb25zdCBzaWduZWQgbG9uZyk7CUVtUHJveHlVSU9wdGlvbnNUeXBlICAmCQlvcGVyYXRvcj0g KGNvbnN0IHZvaWQqKTsJRW1Qcm94eVVJT3B0aW9uc1R5cGUgICYJCW9wZXJhdG9yPSAoY29uc3Qg RW1Qcm94eVVJT3B0aW9uc1R5cGUgICYpOwlvcGVyYXRvciAgIFVJT3B0aW9uc1R5cGUgICAodm9p ZCkgY29uc3Q7CUVtQWxpYXNVSU9wdGlvbnNUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwlj b25zdCBFbUFsaWFzVUlPcHRpb25zVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJ cHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1tzaXplb2YgKCAgICB1aW50OCAgKV07CX0g ZkxvY2FsRGF0YTsJfTsgIAkgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNXQ2hhciAg CXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFz V0NoYXIgICAocHRyX3R5cGUpOwlFbUFsaWFzV0NoYXIgICAoY29uc3QgRW1BbGlhc1dDaGFyICA8 QT4mKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3Rh dGljIHNpemVfdAkJR2V0U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXplb2YgKCAgICB1aW50MTYg ICk7IH0JRW1BbGlhc1dDaGFyICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgYm9vbCk7CUVtQWxpYXNX Q2hhciAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlFbUFsaWFzV0NoYXIgIDxBPiYJb3Bl cmF0b3I9IChjb25zdCB1bnNpZ25lZCBjaGFyKTsJRW1BbGlhc1dDaGFyICA8QT4mCW9wZXJhdG9y PSAoY29uc3QgdW5zaWduZWQgc2hvcnQpOwlFbUFsaWFzV0NoYXIgIDxBPiYJb3BlcmF0b3I9IChj b25zdCB1bnNpZ25lZCBpbnQpOwlFbUFsaWFzV0NoYXIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1 bnNpZ25lZCBsb25nKTsJRW1BbGlhc1dDaGFyICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVk IGNoYXIpOwlFbUFsaWFzV0NoYXIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgc2hvcnQp OwlFbUFsaWFzV0NoYXIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgaW50KTsJRW1BbGlh c1dDaGFyICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGxvbmcpOwlFbUFsaWFzV0NoYXIg IDxBPiYJb3BlcmF0b3I9IChjb25zdCB2b2lkKik7CUVtQWxpYXNXQ2hhciAgPEE+JglvcGVyYXRv cj0gKGNvbnN0IEVtQWxpYXNXQ2hhciAgPEE+Jik7CW9wZXJhdG9yICAgV0NoYXIgICAodm9pZCkg Y29uc3Q7CUVtQWxpYXNXQ2hhciAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNX Q2hhciAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNXQ2hhciAg ICh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwl9OyAJY2xhc3MgRW1Qcm94eVdDaGFyICAJewlwdWJs aWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlXQ2hhciAgICh2b2lkKTsJRW1Qcm94 eVdDaGFyICAgKGNvbnN0IEVtUHJveHlXQ2hhciAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lk KSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJ CUdldFNpemUgKHZvaWQpCQkJeyByZXR1cm4gc2l6ZW9mICggICAgdWludDE2ICApOyB9CUVtUHJv eHlXQ2hhciAgJgkJb3BlcmF0b3I9IChjb25zdCBib29sKTsJRW1Qcm94eVdDaGFyICAmCQlvcGVy YXRvcj0gKGNvbnN0IGNoYXIpOwlFbVByb3h5V0NoYXIgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5z aWduZWQgY2hhcik7CUVtUHJveHlXQ2hhciAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBz aG9ydCk7CUVtUHJveHlXQ2hhciAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBpbnQpOwlF bVByb3h5V0NoYXIgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgbG9uZyk7CUVtUHJveHlX Q2hhciAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgY2hhcik7CUVtUHJveHlXQ2hhciAgJgkJ b3BlcmF0b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlFbVByb3h5V0NoYXIgICYJCW9wZXJhdG9y PSAoY29uc3Qgc2lnbmVkIGludCk7CUVtUHJveHlXQ2hhciAgJgkJb3BlcmF0b3I9IChjb25zdCBz aWduZWQgbG9uZyk7CUVtUHJveHlXQ2hhciAgJgkJb3BlcmF0b3I9IChjb25zdCB2b2lkKik7CUVt UHJveHlXQ2hhciAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5V0NoYXIgICYpOwlvcGVyYXRv ciAgIFdDaGFyICAgKHZvaWQpIGNvbnN0OwlFbUFsaWFzV0NoYXIgIDxMQVM+CW9wZXJhdG9yW10g KGludCk7CWNvbnN0IEVtQWxpYXNXQ2hhciAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJ cHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1tzaXplb2YgKCAgICB1aW50MTYgICldOwl9 IGZMb2NhbERhdGE7CX07ICAgCiB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc0hvc3RD b250cm9sU2VsZWN0b3JUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5 cGUgcHRyX3R5cGU7CUVtQWxpYXNIb3N0Q29udHJvbFNlbGVjdG9yVHlwZSAgIChwdHJfdHlwZSk7 CUVtQWxpYXNIb3N0Q29udHJvbFNlbGVjdG9yVHlwZSAgIChjb25zdCBFbUFsaWFzSG9zdENvbnRy b2xTZWxlY3RvclR5cGUgIDxBPiYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyBy ZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0dXJuIHNp emVvZiAoICAgIHVpbnQxNiAgKTsgfQlFbUFsaWFzSG9zdENvbnRyb2xTZWxlY3RvclR5cGUgIDxB PiYJb3BlcmF0b3I9IChjb25zdCBib29sKTsJRW1BbGlhc0hvc3RDb250cm9sU2VsZWN0b3JUeXBl ICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgY2hhcik7CUVtQWxpYXNIb3N0Q29udHJvbFNlbGVjdG9y VHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbUFsaWFzSG9zdENv bnRyb2xTZWxlY3RvclR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBzaG9ydCk7 CUVtQWxpYXNIb3N0Q29udHJvbFNlbGVjdG9yVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVu c2lnbmVkIGludCk7CUVtQWxpYXNIb3N0Q29udHJvbFNlbGVjdG9yVHlwZSAgPEE+JglvcGVyYXRv cj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbUFsaWFzSG9zdENvbnRyb2xTZWxlY3RvclR5cGUg IDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgY2hhcik7CUVtQWxpYXNIb3N0Q29udHJvbFNl bGVjdG9yVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9ydCk7CUVtQWxpYXNI b3N0Q29udHJvbFNlbGVjdG9yVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBpbnQp OwlFbUFsaWFzSG9zdENvbnRyb2xTZWxlY3RvclR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBz aWduZWQgbG9uZyk7CUVtQWxpYXNIb3N0Q29udHJvbFNlbGVjdG9yVHlwZSAgPEE+JglvcGVyYXRv cj0gKGNvbnN0IHZvaWQqKTsJRW1BbGlhc0hvc3RDb250cm9sU2VsZWN0b3JUeXBlICA8QT4mCW9w ZXJhdG9yPSAoY29uc3QgRW1BbGlhc0hvc3RDb250cm9sU2VsZWN0b3JUeXBlICA8QT4mKTsJb3Bl cmF0b3IgICBIb3N0Q29udHJvbFNlbGVjdG9yVHlwZSAgICh2b2lkKSBjb25zdDsJRW1BbGlhc0hv c3RDb250cm9sU2VsZWN0b3JUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlh c0hvc3RDb250cm9sU2VsZWN0b3JUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJp dmF0ZToJRW1BbGlhc0hvc3RDb250cm9sU2VsZWN0b3JUeXBlICAgKHZvaWQpOwlwdHJfdHlwZQkJ CWZQdHI7CX07IAljbGFzcyBFbVByb3h5SG9zdENvbnRyb2xTZWxlY3RvclR5cGUgIAl7CXB1Ymxp YzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUhvc3RDb250cm9sU2VsZWN0b3JUeXBl ICAgKHZvaWQpOwlFbVByb3h5SG9zdENvbnRyb2xTZWxlY3RvclR5cGUgICAoY29uc3QgRW1Qcm94 eUhvc3RDb250cm9sU2VsZWN0b3JUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNv bnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0 U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXplb2YgKCAgICB1aW50MTYgICk7IH0JRW1Qcm94eUhv c3RDb250cm9sU2VsZWN0b3JUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IGJvb2wpOwlFbVByb3h5 SG9zdENvbnRyb2xTZWxlY3RvclR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgY2hhcik7CUVtUHJv eHlIb3N0Q29udHJvbFNlbGVjdG9yVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBj aGFyKTsJRW1Qcm94eUhvc3RDb250cm9sU2VsZWN0b3JUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0 IHVuc2lnbmVkIHNob3J0KTsJRW1Qcm94eUhvc3RDb250cm9sU2VsZWN0b3JUeXBlICAmCQlvcGVy YXRvcj0gKGNvbnN0IHVuc2lnbmVkIGludCk7CUVtUHJveHlIb3N0Q29udHJvbFNlbGVjdG9yVHlw ZSAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBsb25nKTsJRW1Qcm94eUhvc3RDb250cm9s U2VsZWN0b3JUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFyKTsJRW1Qcm94eUhv c3RDb250cm9sU2VsZWN0b3JUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9ydCk7 CUVtUHJveHlIb3N0Q29udHJvbFNlbGVjdG9yVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWdu ZWQgaW50KTsJRW1Qcm94eUhvc3RDb250cm9sU2VsZWN0b3JUeXBlICAmCQlvcGVyYXRvcj0gKGNv bnN0IHNpZ25lZCBsb25nKTsJRW1Qcm94eUhvc3RDb250cm9sU2VsZWN0b3JUeXBlICAmCQlvcGVy YXRvcj0gKGNvbnN0IHZvaWQqKTsJRW1Qcm94eUhvc3RDb250cm9sU2VsZWN0b3JUeXBlICAmCQlv cGVyYXRvcj0gKGNvbnN0IEVtUHJveHlIb3N0Q29udHJvbFNlbGVjdG9yVHlwZSAgJik7CW9wZXJh dG9yICAgSG9zdENvbnRyb2xTZWxlY3RvclR5cGUgICAodm9pZCkgY29uc3Q7CUVtQWxpYXNIb3N0 Q29udHJvbFNlbGVjdG9yVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlh c0hvc3RDb250cm9sU2VsZWN0b3JUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlw cml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzW3NpemVvZiAoICAgIHVpbnQxNiAgKV07CX0g ZkxvY2FsRGF0YTsJfTsgIAkgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNIb3N0Qm9v bFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJ RW1BbGlhc0hvc3RCb29sVHlwZSAgIChwdHJfdHlwZSk7CUVtQWxpYXNIb3N0Qm9vbFR5cGUgICAo Y29uc3QgRW1BbGlhc0hvc3RCb29sVHlwZSAgPEE+Jik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lk KSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUgKHZvaWQpCQkJ eyByZXR1cm4gc2l6ZW9mICggICAgaW50MzIgICk7IH0JRW1BbGlhc0hvc3RCb29sVHlwZSAgPEE+ JglvcGVyYXRvcj0gKGNvbnN0IGJvb2wpOwlFbUFsaWFzSG9zdEJvb2xUeXBlICA8QT4mCW9wZXJh dG9yPSAoY29uc3QgY2hhcik7CUVtQWxpYXNIb3N0Qm9vbFR5cGUgIDxBPiYJb3BlcmF0b3I9IChj b25zdCB1bnNpZ25lZCBjaGFyKTsJRW1BbGlhc0hvc3RCb29sVHlwZSAgPEE+JglvcGVyYXRvcj0g KGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1BbGlhc0hvc3RCb29sVHlwZSAgPEE+JglvcGVyYXRv cj0gKGNvbnN0IHVuc2lnbmVkIGludCk7CUVtQWxpYXNIb3N0Qm9vbFR5cGUgIDxBPiYJb3BlcmF0 b3I9IChjb25zdCB1bnNpZ25lZCBsb25nKTsJRW1BbGlhc0hvc3RCb29sVHlwZSAgPEE+JglvcGVy YXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFyKTsJRW1BbGlhc0hvc3RCb29sVHlwZSAgPEE+JglvcGVy YXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9ydCk7CUVtQWxpYXNIb3N0Qm9vbFR5cGUgIDxBPiYJb3Bl cmF0b3I9IChjb25zdCBzaWduZWQgaW50KTsJRW1BbGlhc0hvc3RCb29sVHlwZSAgPEE+JglvcGVy YXRvcj0gKGNvbnN0IHNpZ25lZCBsb25nKTsJRW1BbGlhc0hvc3RCb29sVHlwZSAgPEE+JglvcGVy YXRvcj0gKGNvbnN0IHZvaWQqKTsJRW1BbGlhc0hvc3RCb29sVHlwZSAgPEE+JglvcGVyYXRvcj0g KGNvbnN0IEVtQWxpYXNIb3N0Qm9vbFR5cGUgIDxBPiYpOwlvcGVyYXRvciAgIEhvc3RCb29sVHlw ZSAgICh2b2lkKSBjb25zdDsJRW1BbGlhc0hvc3RCb29sVHlwZSAgPEE+CW9wZXJhdG9yW10gKGlu dCk7CWNvbnN0IEVtQWxpYXNIb3N0Qm9vbFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0 Owlwcml2YXRlOglFbUFsaWFzSG9zdEJvb2xUeXBlICAgKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7 CX07IAljbGFzcyBFbVByb3h5SG9zdEJvb2xUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCog cHRyX3R5cGU7CUVtUHJveHlIb3N0Qm9vbFR5cGUgICAodm9pZCk7CUVtUHJveHlIb3N0Qm9vbFR5 cGUgICAoY29uc3QgRW1Qcm94eUhvc3RCb29sVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2 b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXpl X3QJCUdldFNpemUgKHZvaWQpCQkJeyByZXR1cm4gc2l6ZW9mICggICAgaW50MzIgICk7IH0JRW1Q cm94eUhvc3RCb29sVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBib29sKTsJRW1Qcm94eUhvc3RC b29sVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBjaGFyKTsJRW1Qcm94eUhvc3RCb29sVHlwZSAg JgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBjaGFyKTsJRW1Qcm94eUhvc3RCb29sVHlwZSAg JgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBzaG9ydCk7CUVtUHJveHlIb3N0Qm9vbFR5cGUg ICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgaW50KTsJRW1Qcm94eUhvc3RCb29sVHlwZSAg JgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBsb25nKTsJRW1Qcm94eUhvc3RCb29sVHlwZSAg JgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgY2hhcik7CUVtUHJveHlIb3N0Qm9vbFR5cGUgICYJ CW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIHNob3J0KTsJRW1Qcm94eUhvc3RCb29sVHlwZSAgJgkJ b3BlcmF0b3I9IChjb25zdCBzaWduZWQgaW50KTsJRW1Qcm94eUhvc3RCb29sVHlwZSAgJgkJb3Bl cmF0b3I9IChjb25zdCBzaWduZWQgbG9uZyk7CUVtUHJveHlIb3N0Qm9vbFR5cGUgICYJCW9wZXJh dG9yPSAoY29uc3Qgdm9pZCopOwlFbVByb3h5SG9zdEJvb2xUeXBlICAmCQlvcGVyYXRvcj0gKGNv bnN0IEVtUHJveHlIb3N0Qm9vbFR5cGUgICYpOwlvcGVyYXRvciAgIEhvc3RCb29sVHlwZSAgICh2 b2lkKSBjb25zdDsJRW1BbGlhc0hvc3RCb29sVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJ Y29uc3QgRW1BbGlhc0hvc3RCb29sVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJ cHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1tzaXplb2YgKCAgICBpbnQzMiAgKV07CX0g ZkxvY2FsRGF0YTsJfTsgIAkgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNIb3N0Q2xv Y2tUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7 CUVtQWxpYXNIb3N0Q2xvY2tUeXBlICAgKHB0cl90eXBlKTsJRW1BbGlhc0hvc3RDbG9ja1R5cGUg ICAoY29uc3QgRW1BbGlhc0hvc3RDbG9ja1R5cGUgIDxBPiYpOwlwdHJfdHlwZQkJCUdldFB0cgko dm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lk KQkJCXsgcmV0dXJuIHNpemVvZiAoICAgIGludDMyICApOyB9CUVtQWxpYXNIb3N0Q2xvY2tUeXBl ICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgYm9vbCk7CUVtQWxpYXNIb3N0Q2xvY2tUeXBlICA8QT4m CW9wZXJhdG9yPSAoY29uc3QgY2hhcik7CUVtQWxpYXNIb3N0Q2xvY2tUeXBlICA8QT4mCW9wZXJh dG9yPSAoY29uc3QgdW5zaWduZWQgY2hhcik7CUVtQWxpYXNIb3N0Q2xvY2tUeXBlICA8QT4mCW9w ZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgc2hvcnQpOwlFbUFsaWFzSG9zdENsb2NrVHlwZSAgPEE+ JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIGludCk7CUVtQWxpYXNIb3N0Q2xvY2tUeXBlICA8 QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgbG9uZyk7CUVtQWxpYXNIb3N0Q2xvY2tUeXBl ICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGNoYXIpOwlFbUFsaWFzSG9zdENsb2NrVHlw ZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9ydCk7CUVtQWxpYXNIb3N0Q2xvY2tU eXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGludCk7CUVtQWxpYXNIb3N0Q2xvY2tU eXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGxvbmcpOwlFbUFsaWFzSG9zdENsb2Nr VHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHZvaWQqKTsJRW1BbGlhc0hvc3RDbG9ja1R5cGUg IDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzSG9zdENsb2NrVHlwZSAgPEE+Jik7CW9wZXJh dG9yICAgSG9zdENsb2NrVHlwZSAgICh2b2lkKSBjb25zdDsJRW1BbGlhc0hvc3RDbG9ja1R5cGUg IDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzSG9zdENsb2NrVHlwZSAgPEE+CW9w ZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNIb3N0Q2xvY2tUeXBlICAgKHZv aWQpOwlwdHJfdHlwZQkJCWZQdHI7CX07IAljbGFzcyBFbVByb3h5SG9zdENsb2NrVHlwZSAgCXsJ cHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5SG9zdENsb2NrVHlwZSAgICh2 b2lkKTsJRW1Qcm94eUhvc3RDbG9ja1R5cGUgICAoY29uc3QgRW1Qcm94eUhvc3RDbG9ja1R5cGUg ICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAm ZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0dXJuIHNp emVvZiAoICAgIGludDMyICApOyB9CUVtUHJveHlIb3N0Q2xvY2tUeXBlICAmCQlvcGVyYXRvcj0g KGNvbnN0IGJvb2wpOwlFbVByb3h5SG9zdENsb2NrVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBj aGFyKTsJRW1Qcm94eUhvc3RDbG9ja1R5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQg Y2hhcik7CUVtUHJveHlIb3N0Q2xvY2tUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVk IHNob3J0KTsJRW1Qcm94eUhvc3RDbG9ja1R5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWdu ZWQgaW50KTsJRW1Qcm94eUhvc3RDbG9ja1R5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWdu ZWQgbG9uZyk7CUVtUHJveHlIb3N0Q2xvY2tUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25l ZCBjaGFyKTsJRW1Qcm94eUhvc3RDbG9ja1R5cGUgICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVk IHNob3J0KTsJRW1Qcm94eUhvc3RDbG9ja1R5cGUgICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVk IGludCk7CUVtUHJveHlIb3N0Q2xvY2tUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBs b25nKTsJRW1Qcm94eUhvc3RDbG9ja1R5cGUgICYJCW9wZXJhdG9yPSAoY29uc3Qgdm9pZCopOwlF bVByb3h5SG9zdENsb2NrVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5SG9zdENsb2Nr VHlwZSAgJik7CW9wZXJhdG9yICAgSG9zdENsb2NrVHlwZSAgICh2b2lkKSBjb25zdDsJRW1BbGlh c0hvc3RDbG9ja1R5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNIb3N0 Q2xvY2tUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3Qg ewljaGFyCQkJX2J5dGVzW3NpemVvZiAoICAgIGludDMyICApXTsJfSBmTG9jYWxEYXRhOwl9OyAg CSB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc0hvc3RFcnJUeXBlICAJewlwdWJsaWM6 CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNIb3N0RXJyVHlw ZSAgIChwdHJfdHlwZSk7CUVtQWxpYXNIb3N0RXJyVHlwZSAgIChjb25zdCBFbUFsaWFzSG9zdEVy clR5cGUgIDxBPiYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0 cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0dXJuIHNpemVvZiAoICAg IGludDMyICApOyB9CUVtQWxpYXNIb3N0RXJyVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IGJv b2wpOwlFbUFsaWFzSG9zdEVyclR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBjaGFyKTsJRW1B bGlhc0hvc3RFcnJUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgY2hhcik7CUVt QWxpYXNIb3N0RXJyVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJ RW1BbGlhc0hvc3RFcnJUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgaW50KTsJ RW1BbGlhc0hvc3RFcnJUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgbG9uZyk7 CUVtQWxpYXNIb3N0RXJyVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFyKTsJ RW1BbGlhc0hvc3RFcnJUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIHNob3J0KTsJ RW1BbGlhc0hvc3RFcnJUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGludCk7CUVt QWxpYXNIb3N0RXJyVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBsb25nKTsJRW1B bGlhc0hvc3RFcnJUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgdm9pZCopOwlFbUFsaWFzSG9z dEVyclR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzSG9zdEVyclR5cGUgIDxBPiYp OwlvcGVyYXRvciAgIEhvc3RFcnJUeXBlICAgKHZvaWQpIGNvbnN0OwlFbUFsaWFzSG9zdEVyclR5 cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzSG9zdEVyclR5cGUgIDxBPglv cGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzSG9zdEVyclR5cGUgICAodm9p ZCk7CXB0cl90eXBlCQkJZlB0cjsJfTsgCWNsYXNzIEVtUHJveHlIb3N0RXJyVHlwZSAgCXsJcHVi bGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5SG9zdEVyclR5cGUgICAodm9pZCk7 CUVtUHJveHlIb3N0RXJyVHlwZSAgIChjb25zdCBFbVByb3h5SG9zdEVyclR5cGUgICYpOwlwdHJf dHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0 YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0dXJuIHNpemVvZiAoICAg IGludDMyICApOyB9CUVtUHJveHlIb3N0RXJyVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBib29s KTsJRW1Qcm94eUhvc3RFcnJUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlFbVByb3h5 SG9zdEVyclR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgY2hhcik7CUVtUHJveHlI b3N0RXJyVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBzaG9ydCk7CUVtUHJveHlI b3N0RXJyVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBpbnQpOwlFbVByb3h5SG9z dEVyclR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgbG9uZyk7CUVtUHJveHlIb3N0 RXJyVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgY2hhcik7CUVtUHJveHlIb3N0RXJy VHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlFbVByb3h5SG9zdEVyclR5 cGUgICYJCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGludCk7CUVtUHJveHlIb3N0RXJyVHlwZSAg JgkJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgbG9uZyk7CUVtUHJveHlIb3N0RXJyVHlwZSAgJgkJ b3BlcmF0b3I9IChjb25zdCB2b2lkKik7CUVtUHJveHlIb3N0RXJyVHlwZSAgJgkJb3BlcmF0b3I9 IChjb25zdCBFbVByb3h5SG9zdEVyclR5cGUgICYpOwlvcGVyYXRvciAgIEhvc3RFcnJUeXBlICAg KHZvaWQpIGNvbnN0OwlFbUFsaWFzSG9zdEVyclR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7 CWNvbnN0IEVtQWxpYXNIb3N0RXJyVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJ cHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1tzaXplb2YgKCAgICBpbnQzMiAgKV07CX0g ZkxvY2FsRGF0YTsJfTsgIAkgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNIb3N0SURU eXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVt QWxpYXNIb3N0SURUeXBlICAgKHB0cl90eXBlKTsJRW1BbGlhc0hvc3RJRFR5cGUgICAoY29uc3Qg RW1BbGlhc0hvc3RJRFR5cGUgIDxBPiYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJ eyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0dXJu IHNpemVvZiAoICAgIGludDMyICApOyB9CUVtQWxpYXNIb3N0SURUeXBlICA8QT4mCW9wZXJhdG9y PSAoY29uc3QgYm9vbCk7CUVtQWxpYXNIb3N0SURUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg Y2hhcik7CUVtQWxpYXNIb3N0SURUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQg Y2hhcik7CUVtQWxpYXNIb3N0SURUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQg c2hvcnQpOwlFbUFsaWFzSG9zdElEVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVk IGludCk7CUVtQWxpYXNIb3N0SURUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQg bG9uZyk7CUVtQWxpYXNIb3N0SURUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGNo YXIpOwlFbUFsaWFzSG9zdElEVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHNpZ25lZCBzaG9y dCk7CUVtQWxpYXNIb3N0SURUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGludCk7 CUVtQWxpYXNIb3N0SURUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGxvbmcpOwlF bUFsaWFzSG9zdElEVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHZvaWQqKTsJRW1BbGlhc0hv c3RJRFR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzSG9zdElEVHlwZSAgPEE+Jik7 CW9wZXJhdG9yICAgSG9zdElEVHlwZSAgICh2b2lkKSBjb25zdDsJRW1BbGlhc0hvc3RJRFR5cGUg IDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzSG9zdElEVHlwZSAgPEE+CW9wZXJh dG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNIb3N0SURUeXBlICAgKHZvaWQpOwlw dHJfdHlwZQkJCWZQdHI7CX07IAljbGFzcyBFbVByb3h5SG9zdElEVHlwZSAgCXsJcHVibGljOgl0 eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5SG9zdElEVHlwZSAgICh2b2lkKTsJRW1Qcm94 eUhvc3RJRFR5cGUgICAoY29uc3QgRW1Qcm94eUhvc3RJRFR5cGUgICYpOwlwdHJfdHlwZQkJCUdl dFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0 aWMgc2l6ZV90CQlHZXRTaXplICh2b2lkKQkJCXsgcmV0dXJuIHNpemVvZiAoICAgIGludDMyICAp OyB9CUVtUHJveHlIb3N0SURUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IGJvb2wpOwlFbVByb3h5 SG9zdElEVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBjaGFyKTsJRW1Qcm94eUhvc3RJRFR5cGUg ICYJCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgY2hhcik7CUVtUHJveHlIb3N0SURUeXBlICAm CQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1Qcm94eUhvc3RJRFR5cGUgICYJ CW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgaW50KTsJRW1Qcm94eUhvc3RJRFR5cGUgICYJCW9w ZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgbG9uZyk7CUVtUHJveHlIb3N0SURUeXBlICAmCQlvcGVy YXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFyKTsJRW1Qcm94eUhvc3RJRFR5cGUgICYJCW9wZXJhdG9y PSAoY29uc3Qgc2lnbmVkIHNob3J0KTsJRW1Qcm94eUhvc3RJRFR5cGUgICYJCW9wZXJhdG9yPSAo Y29uc3Qgc2lnbmVkIGludCk7CUVtUHJveHlIb3N0SURUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0 IHNpZ25lZCBsb25nKTsJRW1Qcm94eUhvc3RJRFR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3Qgdm9p ZCopOwlFbVByb3h5SG9zdElEVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5SG9zdElE VHlwZSAgJik7CW9wZXJhdG9yICAgSG9zdElEVHlwZSAgICh2b2lkKSBjb25zdDsJRW1BbGlhc0hv c3RJRFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNIb3N0SURUeXBl ICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJ X2J5dGVzW3NpemVvZiAoICAgIGludDMyICApXTsJfSBmTG9jYWxEYXRhOwl9OyAgCSB0ZW1wbGF0 ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc0hvc3RQbGF0Zm9ybVR5cGUgIAl7CXB1YmxpYzoJdHlw ZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc0hvc3RQbGF0Zm9ybVR5 cGUgICAocHRyX3R5cGUpOwlFbUFsaWFzSG9zdFBsYXRmb3JtVHlwZSAgIChjb25zdCBFbUFsaWFz SG9zdFBsYXRmb3JtVHlwZSAgPEE+Jik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7 IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUgKHZvaWQpCQkJeyByZXR1cm4g c2l6ZW9mICggICAgaW50MzIgICk7IH0JRW1BbGlhc0hvc3RQbGF0Zm9ybVR5cGUgIDxBPiYJb3Bl cmF0b3I9IChjb25zdCBib29sKTsJRW1BbGlhc0hvc3RQbGF0Zm9ybVR5cGUgIDxBPiYJb3BlcmF0 b3I9IChjb25zdCBjaGFyKTsJRW1BbGlhc0hvc3RQbGF0Zm9ybVR5cGUgIDxBPiYJb3BlcmF0b3I9 IChjb25zdCB1bnNpZ25lZCBjaGFyKTsJRW1BbGlhc0hvc3RQbGF0Zm9ybVR5cGUgIDxBPiYJb3Bl cmF0b3I9IChjb25zdCB1bnNpZ25lZCBzaG9ydCk7CUVtQWxpYXNIb3N0UGxhdGZvcm1UeXBlICA8 QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQgaW50KTsJRW1BbGlhc0hvc3RQbGF0Zm9ybVR5 cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBsb25nKTsJRW1BbGlhc0hvc3RQbGF0 Zm9ybVR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgY2hhcik7CUVtQWxpYXNIb3N0 UGxhdGZvcm1UeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgc2lnbmVkIHNob3J0KTsJRW1BbGlh c0hvc3RQbGF0Zm9ybVR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgaW50KTsJRW1B bGlhc0hvc3RQbGF0Zm9ybVR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBzaWduZWQgbG9uZyk7 CUVtQWxpYXNIb3N0UGxhdGZvcm1UeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qgdm9pZCopOwlF bUFsaWFzSG9zdFBsYXRmb3JtVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNIb3N0 UGxhdGZvcm1UeXBlICA8QT4mKTsJb3BlcmF0b3IgICBIb3N0UGxhdGZvcm1UeXBlICAgKHZvaWQp IGNvbnN0OwlFbUFsaWFzSG9zdFBsYXRmb3JtVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNv bnN0IEVtQWxpYXNIb3N0UGxhdGZvcm1UeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJ cHJpdmF0ZToJRW1BbGlhc0hvc3RQbGF0Zm9ybVR5cGUgICAodm9pZCk7CXB0cl90eXBlCQkJZlB0 cjsJfTsgCWNsYXNzIEVtUHJveHlIb3N0UGxhdGZvcm1UeXBlICAJewlwdWJsaWM6CXR5cGVkZWYg dm9pZCogcHRyX3R5cGU7CUVtUHJveHlIb3N0UGxhdGZvcm1UeXBlICAgKHZvaWQpOwlFbVByb3h5 SG9zdFBsYXRmb3JtVHlwZSAgIChjb25zdCBFbVByb3h5SG9zdFBsYXRmb3JtVHlwZSAgJik7CXB0 cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxE YXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUgKHZvaWQpCQkJeyByZXR1cm4gc2l6ZW9mICgg ICAgaW50MzIgICk7IH0JRW1Qcm94eUhvc3RQbGF0Zm9ybVR5cGUgICYJCW9wZXJhdG9yPSAoY29u c3QgYm9vbCk7CUVtUHJveHlIb3N0UGxhdGZvcm1UeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IGNo YXIpOwlFbVByb3h5SG9zdFBsYXRmb3JtVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25l ZCBjaGFyKTsJRW1Qcm94eUhvc3RQbGF0Zm9ybVR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgdW5z aWduZWQgc2hvcnQpOwlFbVByb3h5SG9zdFBsYXRmb3JtVHlwZSAgJgkJb3BlcmF0b3I9IChjb25z dCB1bnNpZ25lZCBpbnQpOwlFbVByb3h5SG9zdFBsYXRmb3JtVHlwZSAgJgkJb3BlcmF0b3I9IChj b25zdCB1bnNpZ25lZCBsb25nKTsJRW1Qcm94eUhvc3RQbGF0Zm9ybVR5cGUgICYJCW9wZXJhdG9y PSAoY29uc3Qgc2lnbmVkIGNoYXIpOwlFbVByb3h5SG9zdFBsYXRmb3JtVHlwZSAgJgkJb3BlcmF0 b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlFbVByb3h5SG9zdFBsYXRmb3JtVHlwZSAgJgkJb3Bl cmF0b3I9IChjb25zdCBzaWduZWQgaW50KTsJRW1Qcm94eUhvc3RQbGF0Zm9ybVR5cGUgICYJCW9w ZXJhdG9yPSAoY29uc3Qgc2lnbmVkIGxvbmcpOwlFbVByb3h5SG9zdFBsYXRmb3JtVHlwZSAgJgkJ b3BlcmF0b3I9IChjb25zdCB2b2lkKik7CUVtUHJveHlIb3N0UGxhdGZvcm1UeXBlICAmCQlvcGVy YXRvcj0gKGNvbnN0IEVtUHJveHlIb3N0UGxhdGZvcm1UeXBlICAmKTsJb3BlcmF0b3IgICBIb3N0 UGxhdGZvcm1UeXBlICAgKHZvaWQpIGNvbnN0OwlFbUFsaWFzSG9zdFBsYXRmb3JtVHlwZSAgPExB Uz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0hvc3RQbGF0Zm9ybVR5cGUgIDxMQVM+ CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNb c2l6ZW9mICggICAgaW50MzIgICldOwl9IGZMb2NhbERhdGE7CX07ICAJIHRlbXBsYXRlIDxjbGFz cyBBPgljbGFzcyBFbUFsaWFzSG9zdFNpZ25hbFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBl bmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc0hvc3RTaWduYWxUeXBlICAgKHB0cl90 eXBlKTsJRW1BbGlhc0hvc3RTaWduYWxUeXBlICAgKGNvbnN0IEVtQWxpYXNIb3N0U2lnbmFsVHlw ZSAgPEE+Jik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9 CXN0YXRpYyBzaXplX3QJCUdldFNpemUgKHZvaWQpCQkJeyByZXR1cm4gc2l6ZW9mICggICAgaW50 MzIgICk7IH0JRW1BbGlhc0hvc3RTaWduYWxUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgYm9v bCk7CUVtQWxpYXNIb3N0U2lnbmFsVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlF bUFsaWFzSG9zdFNpZ25hbFR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBjaGFy KTsJRW1BbGlhc0hvc3RTaWduYWxUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgdW5zaWduZWQg c2hvcnQpOwlFbUFsaWFzSG9zdFNpZ25hbFR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1bnNp Z25lZCBpbnQpOwlFbUFsaWFzSG9zdFNpZ25hbFR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCB1 bnNpZ25lZCBsb25nKTsJRW1BbGlhc0hvc3RTaWduYWxUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29u c3Qgc2lnbmVkIGNoYXIpOwlFbUFsaWFzSG9zdFNpZ25hbFR5cGUgIDxBPiYJb3BlcmF0b3I9IChj b25zdCBzaWduZWQgc2hvcnQpOwlFbUFsaWFzSG9zdFNpZ25hbFR5cGUgIDxBPiYJb3BlcmF0b3I9 IChjb25zdCBzaWduZWQgaW50KTsJRW1BbGlhc0hvc3RTaWduYWxUeXBlICA8QT4mCW9wZXJhdG9y PSAoY29uc3Qgc2lnbmVkIGxvbmcpOwlFbUFsaWFzSG9zdFNpZ25hbFR5cGUgIDxBPiYJb3BlcmF0 b3I9IChjb25zdCB2b2lkKik7CUVtQWxpYXNIb3N0U2lnbmFsVHlwZSAgPEE+JglvcGVyYXRvcj0g KGNvbnN0IEVtQWxpYXNIb3N0U2lnbmFsVHlwZSAgPEE+Jik7CW9wZXJhdG9yICAgSG9zdFNpZ25h bFR5cGUgICAodm9pZCkgY29uc3Q7CUVtQWxpYXNIb3N0U2lnbmFsVHlwZSAgPEE+CW9wZXJhdG9y W10gKGludCk7CWNvbnN0IEVtQWxpYXNIb3N0U2lnbmFsVHlwZSAgPEE+CW9wZXJhdG9yW10gKGlu dCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNIb3N0U2lnbmFsVHlwZSAgICh2b2lkKTsJcHRyX3R5 cGUJCQlmUHRyOwl9OyAJY2xhc3MgRW1Qcm94eUhvc3RTaWduYWxUeXBlICAJewlwdWJsaWM6CXR5 cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlIb3N0U2lnbmFsVHlwZSAgICh2b2lkKTsJRW1Q cm94eUhvc3RTaWduYWxUeXBlICAgKGNvbnN0IEVtUHJveHlIb3N0U2lnbmFsVHlwZSAgJik7CXB0 cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxE YXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUgKHZvaWQpCQkJeyByZXR1cm4gc2l6ZW9mICgg ICAgaW50MzIgICk7IH0JRW1Qcm94eUhvc3RTaWduYWxUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0 IGJvb2wpOwlFbVByb3h5SG9zdFNpZ25hbFR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgY2hhcik7 CUVtUHJveHlIb3N0U2lnbmFsVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25lZCBjaGFy KTsJRW1Qcm94eUhvc3RTaWduYWxUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVkIHNo b3J0KTsJRW1Qcm94eUhvc3RTaWduYWxUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IHVuc2lnbmVk IGludCk7CUVtUHJveHlIb3N0U2lnbmFsVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCB1bnNpZ25l ZCBsb25nKTsJRW1Qcm94eUhvc3RTaWduYWxUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25l ZCBjaGFyKTsJRW1Qcm94eUhvc3RTaWduYWxUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25l ZCBzaG9ydCk7CUVtUHJveHlIb3N0U2lnbmFsVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBzaWdu ZWQgaW50KTsJRW1Qcm94eUhvc3RTaWduYWxUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IHNpZ25l ZCBsb25nKTsJRW1Qcm94eUhvc3RTaWduYWxUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IHZvaWQq KTsJRW1Qcm94eUhvc3RTaWduYWxUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlIb3N0 U2lnbmFsVHlwZSAgJik7CW9wZXJhdG9yICAgSG9zdFNpZ25hbFR5cGUgICAodm9pZCkgY29uc3Q7 CUVtQWxpYXNIb3N0U2lnbmFsVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1B bGlhc0hvc3RTaWduYWxUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRl OglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzW3NpemVvZiAoICAgIGludDMyICApXTsJfSBmTG9jYWxE YXRhOwl9OyAgCSB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc0hvc3RTaXplVHlwZSAg CXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFz SG9zdFNpemVUeXBlICAgKHB0cl90eXBlKTsJRW1BbGlhc0hvc3RTaXplVHlwZSAgIChjb25zdCBF bUFsaWFzSG9zdFNpemVUeXBlICA8QT4mKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0 CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZSAodm9pZCkJCQl7IHJldHVy biBzaXplb2YgKCAgICBpbnQzMiAgKTsgfQlFbUFsaWFzSG9zdFNpemVUeXBlICA8QT4mCW9wZXJh dG9yPSAoY29uc3QgYm9vbCk7CUVtQWxpYXNIb3N0U2l6ZVR5cGUgIDxBPiYJb3BlcmF0b3I9IChj b25zdCBjaGFyKTsJRW1BbGlhc0hvc3RTaXplVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVu c2lnbmVkIGNoYXIpOwlFbUFsaWFzSG9zdFNpemVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg dW5zaWduZWQgc2hvcnQpOwlFbUFsaWFzSG9zdFNpemVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29u c3QgdW5zaWduZWQgaW50KTsJRW1BbGlhc0hvc3RTaXplVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNv bnN0IHVuc2lnbmVkIGxvbmcpOwlFbUFsaWFzSG9zdFNpemVUeXBlICA8QT4mCW9wZXJhdG9yPSAo Y29uc3Qgc2lnbmVkIGNoYXIpOwlFbUFsaWFzSG9zdFNpemVUeXBlICA8QT4mCW9wZXJhdG9yPSAo Y29uc3Qgc2lnbmVkIHNob3J0KTsJRW1BbGlhc0hvc3RTaXplVHlwZSAgPEE+JglvcGVyYXRvcj0g KGNvbnN0IHNpZ25lZCBpbnQpOwlFbUFsaWFzSG9zdFNpemVUeXBlICA8QT4mCW9wZXJhdG9yPSAo Y29uc3Qgc2lnbmVkIGxvbmcpOwlFbUFsaWFzSG9zdFNpemVUeXBlICA8QT4mCW9wZXJhdG9yPSAo Y29uc3Qgdm9pZCopOwlFbUFsaWFzSG9zdFNpemVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg RW1BbGlhc0hvc3RTaXplVHlwZSAgPEE+Jik7CW9wZXJhdG9yICAgSG9zdFNpemVUeXBlICAgKHZv aWQpIGNvbnN0OwlFbUFsaWFzSG9zdFNpemVUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29u c3QgRW1BbGlhc0hvc3RTaXplVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZh dGU6CUVtQWxpYXNIb3N0U2l6ZVR5cGUgICAodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJfTsgCWNs YXNzIEVtUHJveHlIb3N0U2l6ZVR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlw ZTsJRW1Qcm94eUhvc3RTaXplVHlwZSAgICh2b2lkKTsJRW1Qcm94eUhvc3RTaXplVHlwZSAgIChj b25zdCBFbVByb3h5SG9zdFNpemVUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNv bnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0 U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXplb2YgKCAgICBpbnQzMiAgKTsgfQlFbVByb3h5SG9z dFNpemVUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IGJvb2wpOwlFbVByb3h5SG9zdFNpemVUeXBl ICAmCQlvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlFbVByb3h5SG9zdFNpemVUeXBlICAmCQlvcGVy YXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbVByb3h5SG9zdFNpemVUeXBlICAmCQlvcGVy YXRvcj0gKGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1Qcm94eUhvc3RTaXplVHlwZSAgJgkJb3Bl cmF0b3I9IChjb25zdCB1bnNpZ25lZCBpbnQpOwlFbVByb3h5SG9zdFNpemVUeXBlICAmCQlvcGVy YXRvcj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbVByb3h5SG9zdFNpemVUeXBlICAmCQlvcGVy YXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFyKTsJRW1Qcm94eUhvc3RTaXplVHlwZSAgJgkJb3BlcmF0 b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlFbVByb3h5SG9zdFNpemVUeXBlICAmCQlvcGVyYXRv cj0gKGNvbnN0IHNpZ25lZCBpbnQpOwlFbVByb3h5SG9zdFNpemVUeXBlICAmCQlvcGVyYXRvcj0g KGNvbnN0IHNpZ25lZCBsb25nKTsJRW1Qcm94eUhvc3RTaXplVHlwZSAgJgkJb3BlcmF0b3I9IChj b25zdCB2b2lkKik7CUVtUHJveHlIb3N0U2l6ZVR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Q cm94eUhvc3RTaXplVHlwZSAgJik7CW9wZXJhdG9yICAgSG9zdFNpemVUeXBlICAgKHZvaWQpIGNv bnN0OwlFbUFsaWFzSG9zdFNpemVUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBF bUFsaWFzSG9zdFNpemVUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRl OglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzW3NpemVvZiAoICAgIGludDMyICApXTsJfSBmTG9jYWxE YXRhOwl9OyAgCSB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc0hvc3RUaW1lVHlwZSAg CXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFz SG9zdFRpbWVUeXBlICAgKHB0cl90eXBlKTsJRW1BbGlhc0hvc3RUaW1lVHlwZSAgIChjb25zdCBF bUFsaWFzSG9zdFRpbWVUeXBlICA8QT4mKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0 CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZSAodm9pZCkJCQl7IHJldHVy biBzaXplb2YgKCAgICBpbnQzMiAgKTsgfQlFbUFsaWFzSG9zdFRpbWVUeXBlICA8QT4mCW9wZXJh dG9yPSAoY29uc3QgYm9vbCk7CUVtQWxpYXNIb3N0VGltZVR5cGUgIDxBPiYJb3BlcmF0b3I9IChj b25zdCBjaGFyKTsJRW1BbGlhc0hvc3RUaW1lVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IHVu c2lnbmVkIGNoYXIpOwlFbUFsaWFzSG9zdFRpbWVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg dW5zaWduZWQgc2hvcnQpOwlFbUFsaWFzSG9zdFRpbWVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29u c3QgdW5zaWduZWQgaW50KTsJRW1BbGlhc0hvc3RUaW1lVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNv bnN0IHVuc2lnbmVkIGxvbmcpOwlFbUFsaWFzSG9zdFRpbWVUeXBlICA8QT4mCW9wZXJhdG9yPSAo Y29uc3Qgc2lnbmVkIGNoYXIpOwlFbUFsaWFzSG9zdFRpbWVUeXBlICA8QT4mCW9wZXJhdG9yPSAo Y29uc3Qgc2lnbmVkIHNob3J0KTsJRW1BbGlhc0hvc3RUaW1lVHlwZSAgPEE+JglvcGVyYXRvcj0g KGNvbnN0IHNpZ25lZCBpbnQpOwlFbUFsaWFzSG9zdFRpbWVUeXBlICA8QT4mCW9wZXJhdG9yPSAo Y29uc3Qgc2lnbmVkIGxvbmcpOwlFbUFsaWFzSG9zdFRpbWVUeXBlICA8QT4mCW9wZXJhdG9yPSAo Y29uc3Qgdm9pZCopOwlFbUFsaWFzSG9zdFRpbWVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg RW1BbGlhc0hvc3RUaW1lVHlwZSAgPEE+Jik7CW9wZXJhdG9yICAgSG9zdFRpbWVUeXBlICAgKHZv aWQpIGNvbnN0OwlFbUFsaWFzSG9zdFRpbWVUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29u c3QgRW1BbGlhc0hvc3RUaW1lVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZh dGU6CUVtQWxpYXNIb3N0VGltZVR5cGUgICAodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJfTsgCWNs YXNzIEVtUHJveHlIb3N0VGltZVR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlw ZTsJRW1Qcm94eUhvc3RUaW1lVHlwZSAgICh2b2lkKTsJRW1Qcm94eUhvc3RUaW1lVHlwZSAgIChj b25zdCBFbVByb3h5SG9zdFRpbWVUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNv bnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0 U2l6ZSAodm9pZCkJCQl7IHJldHVybiBzaXplb2YgKCAgICBpbnQzMiAgKTsgfQlFbVByb3h5SG9z dFRpbWVUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IGJvb2wpOwlFbVByb3h5SG9zdFRpbWVUeXBl ICAmCQlvcGVyYXRvcj0gKGNvbnN0IGNoYXIpOwlFbVByb3h5SG9zdFRpbWVUeXBlICAmCQlvcGVy YXRvcj0gKGNvbnN0IHVuc2lnbmVkIGNoYXIpOwlFbVByb3h5SG9zdFRpbWVUeXBlICAmCQlvcGVy YXRvcj0gKGNvbnN0IHVuc2lnbmVkIHNob3J0KTsJRW1Qcm94eUhvc3RUaW1lVHlwZSAgJgkJb3Bl cmF0b3I9IChjb25zdCB1bnNpZ25lZCBpbnQpOwlFbVByb3h5SG9zdFRpbWVUeXBlICAmCQlvcGVy YXRvcj0gKGNvbnN0IHVuc2lnbmVkIGxvbmcpOwlFbVByb3h5SG9zdFRpbWVUeXBlICAmCQlvcGVy YXRvcj0gKGNvbnN0IHNpZ25lZCBjaGFyKTsJRW1Qcm94eUhvc3RUaW1lVHlwZSAgJgkJb3BlcmF0 b3I9IChjb25zdCBzaWduZWQgc2hvcnQpOwlFbVByb3h5SG9zdFRpbWVUeXBlICAmCQlvcGVyYXRv cj0gKGNvbnN0IHNpZ25lZCBpbnQpOwlFbVByb3h5SG9zdFRpbWVUeXBlICAmCQlvcGVyYXRvcj0g KGNvbnN0IHNpZ25lZCBsb25nKTsJRW1Qcm94eUhvc3RUaW1lVHlwZSAgJgkJb3BlcmF0b3I9IChj b25zdCB2b2lkKik7CUVtUHJveHlIb3N0VGltZVR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Q cm94eUhvc3RUaW1lVHlwZSAgJik7CW9wZXJhdG9yICAgSG9zdFRpbWVUeXBlICAgKHZvaWQpIGNv bnN0OwlFbUFsaWFzSG9zdFRpbWVUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBF bUFsaWFzSG9zdFRpbWVUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRl OglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzW3NpemVvZiAoICAgIGludDMyICApXTsJfSBmTG9jYWxE YXRhOwl9OyAgIAoKIyAxMTE5ICIuLi9TcmNTaGFyZWQvRW1QYWxtU3RydWN0cy5oIgoKCiAgdGVt cGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNBYnNSZWN0VHlwZSAgCXsJcHVibGljOgl0eXBl ZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzQWJzUmVjdFR5cGUgIAko cHRyX3R5cGUpOwlFbUFsaWFzQWJzUmVjdFR5cGUgIAkoY29uc3QgRW1BbGlhc0Fic1JlY3RUeXBl ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3Rh dGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgOCAgOyB9CUVtQWxpYXNB YnNSZWN0VHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNBYnNSZWN0VHlwZSAgPEE+ Jik7CUVtQWxpYXNBYnNSZWN0VHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxp YXNBYnNSZWN0VHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxp YXNBYnNSZWN0VHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1B bGlhc0Nvb3JkIDxBPgkgCQkJCQkJbGVmdCA7IAkgRW1BbGlhc0Nvb3JkIDxBPgkgCQkJCQkJdG9w IDsgCSBFbUFsaWFzQ29vcmQgPEE+CSAJCQkJCQlyaWdodCA7IAkgRW1BbGlhc0Nvb3JkIDxBPgkg CQkJCQkJYm90dG9tIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbGVmdCAgKHZvaWQp IHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdG9wICAodm9pZCkgeyBy ZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yaWdodCAgKHZvaWQpIHsgcmV0 dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYm90dG9tICAodm9pZCkgeyByZXR1 cm4gIDYgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlBYnNSZWN0VHlwZSAgCXsJcHVibGljOgl0eXBl ZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5QWJzUmVjdFR5cGUgIAkodm9pZCk7CUVtUHJveHlB YnNSZWN0VHlwZSAgCShjb25zdCBFbVByb3h5QWJzUmVjdFR5cGUgICYpOwlwdHJfdHlwZQkJCUdl dFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0 aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA4ICA7IH0JRW1Qcm94eUFi c1JlY3RUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlBYnNSZWN0VHlwZSAgJik7CUVt QWxpYXNBYnNSZWN0VHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0Fi c1JlY3RUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3Qg ewljaGFyCQkJX2J5dGVzWyAgICA4ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFs aWFzQ29vcmQgPExBUz4JIAkJCQkJCWxlZnQgOyAJIEVtQWxpYXNDb29yZCA8TEFTPgkgCQkJCQkJ dG9wIDsgCSBFbUFsaWFzQ29vcmQgPExBUz4JIAkJCQkJCXJpZ2h0IDsgCSBFbUFsaWFzQ29vcmQg PExBUz4JIAkJCQkJCWJvdHRvbSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xlZnQg ICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RvcCAgKHZv aWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmlnaHQgICh2b2lk KSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2JvdHRvbSAgKHZvaWQp IHsgcmV0dXJuICA2IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxp YXNQb2ludFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJf dHlwZTsJRW1BbGlhc1BvaW50VHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNQb2ludFR5cGUgIAko Y29uc3QgRW1BbGlhc1BvaW50VHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25z dAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1 cm4gICAgIDQgIDsgfQlFbUFsaWFzUG9pbnRUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1B bGlhc1BvaW50VHlwZSAgPEE+Jik7CUVtQWxpYXNQb2ludFR5cGUgIDxBPglvcGVyYXRvcltdIChp bnQpOwljb25zdCBFbUFsaWFzUG9pbnRUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJ cHJpdmF0ZToJRW1BbGlhc1BvaW50VHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJs aWM6CSAgICAgRW1BbGlhc0Nvb3JkIDxBPgkgCQkJCQkJeCA7IAkgRW1BbGlhc0Nvb3JkIDxBPgkg CQkJCQkJeSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3ggICh2b2lkKSB7IHJldHVy biAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3kgICh2b2lkKSB7IHJldHVybiAgMiA7 IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVBvaW50VHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQq IHB0cl90eXBlOwlFbVByb3h5UG9pbnRUeXBlICAJKHZvaWQpOwlFbVByb3h5UG9pbnRUeXBlICAJ KGNvbnN0IEVtUHJveHlQb2ludFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29u c3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRT aXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA0ICA7IH0JRW1Qcm94eVBvaW50VHlwZSAgJgkJb3Bl cmF0b3I9IChjb25zdCBFbVByb3h5UG9pbnRUeXBlICAmKTsJRW1BbGlhc1BvaW50VHlwZSAgPExB Uz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1BvaW50VHlwZSAgPExBUz4Jb3BlcmF0 b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgNCAg XTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc0Nvb3JkIDxMQVM+CSAJCQkJCQl4 IDsgCSBFbUFsaWFzQ29vcmQgPExBUz4JIAkJCQkJCXkgOyAgCSAgICAgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl94ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl95ICAodm9pZCkgeyByZXR1cm4gIDIgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4J Y2xhc3MgRW1BbGlhc1JlY3RhbmdsZVR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBB OjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc1JlY3RhbmdsZVR5cGUgIAkocHRyX3R5cGUpOwlF bUFsaWFzUmVjdGFuZ2xlVHlwZSAgCShjb25zdCBFbUFsaWFzUmVjdGFuZ2xlVHlwZSAgJik7CXB0 cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXpl X3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDggIDsgfQlFbUFsaWFzUmVjdGFuZ2xl VHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNSZWN0YW5nbGVUeXBlICA8QT4mKTsJ RW1BbGlhc1JlY3RhbmdsZVR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFz UmVjdGFuZ2xlVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxp YXNSZWN0YW5nbGVUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBF bUFsaWFzUG9pbnRUeXBlIDxBPgkgCQkJCQl0b3BMZWZ0IDsgCSBFbUFsaWFzUG9pbnRUeXBlIDxB PgkgCQkJCQlleHRlbnQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90b3BMZWZ0ICAo dm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9leHRlbnQgICh2 b2lkKSB7IHJldHVybiAgNCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVJlY3RhbmdsZVR5cGUgIAl7 CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVJlY3RhbmdsZVR5cGUgIAko dm9pZCk7CUVtUHJveHlSZWN0YW5nbGVUeXBlICAJKGNvbnN0IEVtUHJveHlSZWN0YW5nbGVUeXBl ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkg JmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAg ICAgOCAgOyB9CUVtUHJveHlSZWN0YW5nbGVUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJv eHlSZWN0YW5nbGVUeXBlICAmKTsJRW1BbGlhc1JlY3RhbmdsZVR5cGUgIDxMQVM+CW9wZXJhdG9y W10gKGludCk7CWNvbnN0IEVtQWxpYXNSZWN0YW5nbGVUeXBlICA8TEFTPglvcGVyYXRvcltdIChp bnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA4ICBdOwl9IGZM b2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzUG9pbnRUeXBlIDxMQVM+CSAJCQkJCXRvcExl ZnQgOyAJIEVtQWxpYXNQb2ludFR5cGUgPExBUz4JIAkJCQkJZXh0ZW50IDsgIAkgICAgIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfdG9wTGVmdCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfZXh0ZW50ICAodm9pZCkgeyByZXR1cm4gIDQgOyB9ICAJfTsgICAJ ICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc1JHQkNvbG9yVHlwZSAgCXsJcHVibGlj Ogl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzUkdCQ29sb3JU eXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc1JHQkNvbG9yVHlwZSAgCShjb25zdCBFbUFsaWFzUkdC Q29sb3JUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQ dHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNiAgOyB9 CUVtQWxpYXNSR0JDb2xvclR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzUkdCQ29s b3JUeXBlICA8QT4mKTsJRW1BbGlhc1JHQkNvbG9yVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7 CWNvbnN0IEVtQWxpYXNSR0JDb2xvclR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlw cml2YXRlOglFbUFsaWFzUkdCQ29sb3JUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1 YmxpYzoJICAgICBFbUFsaWFzTG9jYWxJRCA8QT4JIAkJCQkJaW5kZXggOyAJIEVtQWxpYXNVSW50 OCA8QT4JIAkJCQkJCXIgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWcgOyAJIEVtQWxpYXNV SW50OCA8QT4JIAkJCQkJCWIgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbmRleCAg KHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfciAgKHZvaWQp IHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZyAgKHZvaWQpIHsgcmV0 dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYiAgKHZvaWQpIHsgcmV0dXJuICA2 IDsgfSAgCX07IAljbGFzcyBFbVByb3h5UkdCQ29sb3JUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYg dm9pZCogcHRyX3R5cGU7CUVtUHJveHlSR0JDb2xvclR5cGUgIAkodm9pZCk7CUVtUHJveHlSR0JD b2xvclR5cGUgIAkoY29uc3QgRW1Qcm94eVJHQkNvbG9yVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0 UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRp YyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDYgIDsgfQlFbVByb3h5UkdC Q29sb3JUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlSR0JDb2xvclR5cGUgICYpOwlF bUFsaWFzUkdCQ29sb3JUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFz UkdCQ29sb3JUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1 Y3QgewljaGFyCQkJX2J5dGVzWyAgICA2ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBF bUFsaWFzTG9jYWxJRCA8TEFTPgkgCQkJCQlpbmRleCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJ CQkJCQlyIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWcgOyAJIEVtQWxpYXNVSW50OCA8 TEFTPgkgCQkJCQkJYiA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luZGV4ICAodm9p ZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yICAodm9pZCkgeyBy ZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9nICAodm9pZCkgeyByZXR1cm4g IDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9iICAodm9pZCkgeyByZXR1cm4gIDYgOyB9 ICAJfTsgICAgCiAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNCcmVha3BvaW50VHlw ZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFs aWFzQnJlYWtwb2ludFR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzQnJlYWtwb2ludFR5cGUgIAko Y29uc3QgRW1BbGlhc0JyZWFrcG9pbnRUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQp IGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7 IHJldHVybiAgICAgNiAgOyB9CUVtQWxpYXNCcmVha3BvaW50VHlwZSAgPEE+JglvcGVyYXRvcj0g KGNvbnN0IEVtQWxpYXNCcmVha3BvaW50VHlwZSAgPEE+Jik7CUVtQWxpYXNCcmVha3BvaW50VHlw ZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNCcmVha3BvaW50VHlwZSAgPEE+ CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNCcmVha3BvaW50VHlwZSAg CSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc2VtdXB0ciA8QT4J IAkJCQkJCWFkZHIgOyAJIEVtQWxpYXNCb29sZWFuIDxBPgkgCQkJCQllbmFibGVkIDsgCSBFbUFs aWFzQm9vbGVhbiA8QT4JIAkJCQkJaW5zdGFsbGVkIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfYWRkciAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfZW5hYmxlZCAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfaW5zdGFsbGVkICAodm9pZCkgeyByZXR1cm4gIDUgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlC cmVha3BvaW50VHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5 QnJlYWtwb2ludFR5cGUgIAkodm9pZCk7CUVtUHJveHlCcmVha3BvaW50VHlwZSAgCShjb25zdCBF bVByb3h5QnJlYWtwb2ludFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJ eyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXpl CSh2b2lkKQkJCXsgcmV0dXJuICAgICA2ICA7IH0JRW1Qcm94eUJyZWFrcG9pbnRUeXBlICAmCQlv cGVyYXRvcj0gKGNvbnN0IEVtUHJveHlCcmVha3BvaW50VHlwZSAgJik7CUVtQWxpYXNCcmVha3Bv aW50VHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0JyZWFrcG9pbnRU eXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFy CQkJX2J5dGVzWyAgICA2ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzZW11 cHRyIDxMQVM+CSAJCQkJCQlhZGRyIDsgCSBFbUFsaWFzQm9vbGVhbiA8TEFTPgkgCQkJCQllbmFi bGVkIDsgCSBFbUFsaWFzQm9vbGVhbiA8TEFTPgkgCQkJCQlpbnN0YWxsZWQgOyAgCSAgICAgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9hZGRyICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9lbmFibGVkICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9pbnN0YWxsZWQgICh2b2lkKSB7IHJldHVybiAgNSA7IH0gIAl9OyAg IAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzTTY4S1JlZ3NUeXBlICAJewlwdWJs aWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNNNjhLUmVn c1R5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzTTY4S1JlZ3NUeXBlICAJKGNvbnN0IEVtQWxpYXNN NjhLUmVnc1R5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4g ZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA3NCAg OyB9CUVtQWxpYXNNNjhLUmVnc1R5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzTTY4 S1JlZ3NUeXBlICA8QT4mKTsJRW1BbGlhc002OEtSZWdzVHlwZSAgPEE+CW9wZXJhdG9yW10gKGlu dCk7CWNvbnN0IEVtQWxpYXNNNjhLUmVnc1R5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0 Owlwcml2YXRlOglFbUFsaWFzTTY4S1JlZ3NUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7 CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJZCA7IAkgRW1BbGlhc1VJbnQz MiA8QT4JIAkJCQkJCWEgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQl1c3AgOyAJIEVtQWxp YXNVSW50MzIgPEE+CSAJCQkJCQlzc3AgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlwYyA7 IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXNyIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf YSAgKHZvaWQpIHsgcmV0dXJuICAzMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VzcCAg KHZvaWQpIHsgcmV0dXJuICA2MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NzcCAgKHZv aWQpIHsgcmV0dXJuICA2NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BjICAodm9pZCkg eyByZXR1cm4gIDY4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3IgICh2b2lkKSB7IHJl dHVybiAgNzIgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlNNjhLUmVnc1R5cGUgIAl7CXB1YmxpYzoJ dHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eU02OEtSZWdzVHlwZSAgCSh2b2lkKTsJRW1Q cm94eU02OEtSZWdzVHlwZSAgCShjb25zdCBFbVByb3h5TTY4S1JlZ3NUeXBlICAmKTsJcHRyX3R5 cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7 IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNzQgIDsgfQlF bVByb3h5TTY4S1JlZ3NUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlNNjhLUmVnc1R5 cGUgICYpOwlFbUFsaWFzTTY4S1JlZ3NUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25z dCBFbUFsaWFzTTY4S1JlZ3NUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2 YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA3NCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJs aWM6CSAgICAgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJZCA7IAkgRW1BbGlhc1VJbnQzMiA8 TEFTPgkgCQkJCQkJYSA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJdXNwIDsgCSBFbUFs aWFzVUludDMyIDxMQVM+CSAJCQkJCQlzc3AgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJ CXBjIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlzciA7ICAJICAgICBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2QgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2EgICh2b2lkKSB7IHJldHVybiAgMzIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl91c3AgICh2b2lkKSB7IHJldHVybiAgNjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9z c3AgICh2b2lkKSB7IHJldHVybiAgNjQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wYyAg KHZvaWQpIHsgcmV0dXJuICA2OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NyICAodm9p ZCkgeyByZXR1cm4gIDcyIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVt QWxpYXNVc2JId3JUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUg cHRyX3R5cGU7CUVtQWxpYXNVc2JId3JUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc1VzYkh3clR5 cGUgIAkoY29uc3QgRW1BbGlhc1VzYkh3clR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9p ZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJ CXsgcmV0dXJuICAgICA0ICA7IH0JRW1BbGlhc1VzYkh3clR5cGUgIDxBPiYJb3BlcmF0b3I9IChj b25zdCBFbUFsaWFzVXNiSHdyVHlwZSAgPEE+Jik7CUVtQWxpYXNVc2JId3JUeXBlICA8QT4Jb3Bl cmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1VzYkh3clR5cGUgIDxBPglvcGVyYXRvcltdIChp bnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzVXNiSHdyVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJ CQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJZGF0YSA7IAkgRW1B bGlhc1VJbnQ4IDxBPgkgCQkJCQkJX19fZmlsbGVyMCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJ CQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJX19fZmlsbGVyMSA7ICAJICAg ICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RhdGEgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX19fX2ZpbGxlcjAgICh2b2lkKSB7IHJldHVybiAgMSA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1hbmQgICh2b2lkKSB7IHJldHVybiAgMiA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX19fX2ZpbGxlcjEgICh2b2lkKSB7IHJldHVybiAgMyA7 IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVVzYkh3clR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lk KiBwdHJfdHlwZTsJRW1Qcm94eVVzYkh3clR5cGUgIAkodm9pZCk7CUVtUHJveHlVc2JId3JUeXBl ICAJKGNvbnN0IEVtUHJveHlVc2JId3JUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQp IGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJ R2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNCAgOyB9CUVtUHJveHlVc2JId3JUeXBlICAm CQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlVc2JId3JUeXBlICAmKTsJRW1BbGlhc1VzYkh3clR5 cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNVc2JId3JUeXBlICA8TEFT PglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVz WyAgICA0ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDggPExBUz4J IAkJCQkJCWRhdGEgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJX19fZmlsbGVyMCA7IAkg RW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQljb21tYW5kIDsgCSBFbUFsaWFzVUludDggPExBUz4J IAkJCQkJCV9fX2ZpbGxlcjEgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kYXRhICAo dm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9fX19maWxsZXIw ICAodm9pZCkgeyByZXR1cm4gIDEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb21tYW5k ICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9fX19maWxs ZXIxICAodm9pZCkgeyByZXR1cm4gIDMgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4J Y2xhc3MgRW1BbGlhc0h3ckJhdENtZFJlYWRUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5h bWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNId3JCYXRDbWRSZWFkVHlwZSAgCShwdHJf dHlwZSk7CUVtQWxpYXNId3JCYXRDbWRSZWFkVHlwZSAgCShjb25zdCBFbUFsaWFzSHdyQmF0Q21k UmVhZFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0 cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA0ICA7IH0J RW1BbGlhc0h3ckJhdENtZFJlYWRUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc0h3 ckJhdENtZFJlYWRUeXBlICA8QT4mKTsJRW1BbGlhc0h3ckJhdENtZFJlYWRUeXBlICA8QT4Jb3Bl cmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0h3ckJhdENtZFJlYWRUeXBlICA8QT4Jb3BlcmF0 b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc0h3ckJhdENtZFJlYWRUeXBlICAJKHZv aWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxBPgkgCQkJ CW1Wb2x0cyA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQlhYnMgOyAgCSAgICAgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9tVm9sdHMgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2FicyAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAgCX07IAljbGFzcyBFbVBy b3h5SHdyQmF0Q21kUmVhZFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJ RW1Qcm94eUh3ckJhdENtZFJlYWRUeXBlICAJKHZvaWQpOwlFbVByb3h5SHdyQmF0Q21kUmVhZFR5 cGUgIAkoY29uc3QgRW1Qcm94eUh3ckJhdENtZFJlYWRUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQ dHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGlj IHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNCAgOyB9CUVtUHJveHlId3JC YXRDbWRSZWFkVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5SHdyQmF0Q21kUmVhZFR5 cGUgICYpOwlFbUFsaWFzSHdyQmF0Q21kUmVhZFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7 CWNvbnN0IEVtQWxpYXNId3JCYXRDbWRSZWFkVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBj b25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgNCAgXTsJfSBmTG9jYWxE YXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCW1Wb2x0cyA7IAkgRW1B bGlhc1VJbnQxNiA8TEFTPgkgCQkJCWFicyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X21Wb2x0cyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf YWJzICAodm9pZCkgeyByZXR1cm4gIDIgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4J Y2xhc3MgRW1BbGlhc0h3ckplcnJ5UExEVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1l IEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzSHdySmVycnlQTERUeXBlICAJKHB0cl90eXBl KTsJRW1BbGlhc0h3ckplcnJ5UExEVHlwZSAgCShjb25zdCBFbUFsaWFzSHdySmVycnlQTERUeXBl ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3Rh dGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMjAgIDsgfQlFbUFsaWFz SHdySmVycnlQTERUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc0h3ckplcnJ5UExE VHlwZSAgPEE+Jik7CUVtQWxpYXNId3JKZXJyeVBMRFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQp Owljb25zdCBFbUFsaWFzSHdySmVycnlQTERUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25z dDsJcHJpdmF0ZToJRW1BbGlhc0h3ckplcnJ5UExEVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlm UHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJZHNwT24gOyAJIEVtQWxp YXNVSW50OCA8QT4JIAkJCQkJCXVudXNlZDEgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWNo YXJnZU9uIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQl1bnVzZWQyIDsgCSBFbUFsaWFzVUlu dDggPEE+CSAJCQkJCQlyZWZPbiA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJdW51c2VkMyA7 IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJcGlwYUJpYXNFbmFibGUgOyAJIEVtQWxpYXNVSW50 OCA8QT4JIAkJCQkJCXVudXNlZDQgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWRzcFJlc2V0 IDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQl1bnVzZWQ1IDsgCSBFbUFsaWFzVUludDggPEE+ CSAJCQkJCQllelRvRHNsIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQl1bnVzZWQ2IDsgCSBF bUFsaWFzVUludDggPEE+CSAJCQkJCQlyczIzMlNoZG4gOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJ CQkJCXVudXNlZDcgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXNwYXJlT3V0IDsgCSBFbUFs aWFzVUludDggPEE+CSAJCQkJCQl1bnVzZWQ4IDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJ ZFRvM1NsbiA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWlYdHJubDIgOyAgCSAgICAgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9kc3BPbiAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfdW51c2VkMSAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfY2hhcmdlT24gICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3VudXNlZDIgICh2b2lkKSB7IHJldHVybiAgMyA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3JlZk9uICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl91bnVzZWQzICAodm9pZCkgeyByZXR1cm4gIDUgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9waXBhQmlhc0VuYWJsZSAgKHZvaWQpIHsgcmV0dXJuICA2IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdW51c2VkNCAgKHZvaWQpIHsgcmV0dXJuICA3IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZHNwUmVzZXQgICh2b2lkKSB7IHJldHVybiAgOCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VudXNlZDUgICh2b2lkKSB7IHJldHVybiAgOSA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2V6VG9Ec2wgICh2b2lkKSB7IHJldHVybiAgMTAgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91bnVzZWQ2ICAodm9pZCkgeyByZXR1cm4gIDExIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcnMyMzJTaGRuICAodm9pZCkgeyByZXR1cm4gIDEy IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdW51c2VkNyAgKHZvaWQpIHsgcmV0dXJuICAx MyA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NwYXJlT3V0ICAodm9pZCkgeyByZXR1cm4g IDE0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdW51c2VkOCAgKHZvaWQpIHsgcmV0dXJu ICAxNSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RUbzNTbG4gICh2b2lkKSB7IHJldHVy biAgMTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pWHRybmwyICAodm9pZCkgeyByZXR1 cm4gIDE3IDsgfSAgCX07IAljbGFzcyBFbVByb3h5SHdySmVycnlQTERUeXBlICAJewlwdWJsaWM6 CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlId3JKZXJyeVBMRFR5cGUgIAkodm9pZCk7 CUVtUHJveHlId3JKZXJyeVBMRFR5cGUgIAkoY29uc3QgRW1Qcm94eUh3ckplcnJ5UExEVHlwZSAg Jik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZm TG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAg IDIwICA7IH0JRW1Qcm94eUh3ckplcnJ5UExEVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVBy b3h5SHdySmVycnlQTERUeXBlICAmKTsJRW1BbGlhc0h3ckplcnJ5UExEVHlwZSAgPExBUz4Jb3Bl cmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0h3ckplcnJ5UExEVHlwZSAgPExBUz4Jb3BlcmF0 b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMjAg IF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJ ZHNwT24gOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJdW51c2VkMSA7IAkgRW1BbGlhc1VJ bnQ4IDxMQVM+CSAJCQkJCQljaGFyZ2VPbiA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQl1 bnVzZWQyIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCXJlZk9uIDsgCSBFbUFsaWFzVUlu dDggPExBUz4JIAkJCQkJCXVudXNlZDMgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJcGlw YUJpYXNFbmFibGUgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJdW51c2VkNCA7IAkgRW1B bGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlkc3BSZXNldCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJ CQkJCQl1bnVzZWQ1IDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWV6VG9Ec2wgOyAJIEVt QWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJdW51c2VkNiA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJ CQkJCQlyczIzMlNoZG4gOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJdW51c2VkNyA7IAkg RW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlzcGFyZU91dCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+ CSAJCQkJCQl1bnVzZWQ4IDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlkVG8zU2xuIDsg CSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlpWHRybmwyIDsgIAkgICAgIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfZHNwT24gICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3VudXNlZDEgICh2b2lkKSB7IHJldHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2NoYXJnZU9uICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl91bnVzZWQyICAodm9pZCkgeyByZXR1cm4gIDMgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9yZWZPbiAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfdW51c2VkMyAgKHZvaWQpIHsgcmV0dXJuICA1IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfcGlwYUJpYXNFbmFibGUgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3VudXNlZDQgICh2b2lkKSB7IHJldHVybiAgNyA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2RzcFJlc2V0ICAodm9pZCkgeyByZXR1cm4gIDggOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl91bnVzZWQ1ICAodm9pZCkgeyByZXR1cm4gIDkgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9lelRvRHNsICAodm9pZCkgeyByZXR1cm4gIDEwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfdW51c2VkNiAgKHZvaWQpIHsgcmV0dXJuICAxMSA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3JzMjMyU2hkbiAgKHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX3VudXNlZDcgICh2b2lkKSB7IHJldHVybiAgMTMgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9zcGFyZU91dCAgKHZvaWQpIHsgcmV0dXJuICAxNCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VudXNlZDggICh2b2lkKSB7IHJldHVybiAgMTUgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kVG8zU2xuICAodm9pZCkgeyByZXR1cm4gIDE2IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaVh0cm5sMiAgKHZvaWQpIHsgcmV0dXJuICAxNyA7 IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzSHdyTEFQVHlwZSAg CXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFz SHdyTEFQVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNId3JMQVBUeXBlICAJKGNvbnN0IEVtQWxp YXNId3JMQVBUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJu IGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMHg2 NCAgOyB9CUVtQWxpYXNId3JMQVBUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc0h3 ckxBUFR5cGUgIDxBPiYpOwlFbUFsaWFzSHdyTEFQVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7 CWNvbnN0IEVtQWxpYXNId3JMQVBUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJp dmF0ZToJRW1BbGlhc0h3ckxBUFR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGlj OgkgICAgIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQljb250cm9sIDsgCSBFbUFsaWFzVUludDMy IDxBPgkgCQkJCQkJc3RhdHVzIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJdGltaW5nMCA7 IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXRpbWluZzEgOyAJIEVtQWxpYXNVSW50MzIgPEE+ CSAJCQkJCQl0aW1pbmcyIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29udHJvbCAg KHZvaWQpIHsgcmV0dXJuICAweDAwMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N0YXR1 cyAgKHZvaWQpIHsgcmV0dXJuICAweDAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Rp bWluZzAgICh2b2lkKSB7IHJldHVybiAgMHgwNDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl90aW1pbmcxICAodm9pZCkgeyByZXR1cm4gIDB4MDUwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfdGltaW5nMiAgKHZvaWQpIHsgcmV0dXJuICAweDA2MCA7IH0gIAl9OyAJY2xhc3MgRW1Q cm94eUh3ckxBUFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94 eUh3ckxBUFR5cGUgIAkodm9pZCk7CUVtUHJveHlId3JMQVBUeXBlICAJKGNvbnN0IEVtUHJveHlI d3JMQVBUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChw dHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7 IHJldHVybiAgICAgMHg2NCAgOyB9CUVtUHJveHlId3JMQVBUeXBlICAmCQlvcGVyYXRvcj0gKGNv bnN0IEVtUHJveHlId3JMQVBUeXBlICAmKTsJRW1BbGlhc0h3ckxBUFR5cGUgIDxMQVM+CW9wZXJh dG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNId3JMQVBUeXBlICA8TEFTPglvcGVyYXRvcltdIChp bnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAweDY0ICBdOwl9 IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQljb250 cm9sIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlzdGF0dXMgOyAJIEVtQWxpYXNVSW50 MzIgPExBUz4JIAkJCQkJCXRpbWluZzAgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXRp bWluZzEgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXRpbWluZzIgOyAgCSAgICAgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9jb250cm9sICAodm9pZCkgeyByZXR1cm4gIDB4MDAwIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3RhdHVzICAodm9pZCkgeyByZXR1cm4gIDB4MDEwIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdGltaW5nMCAgKHZvaWQpIHsgcmV0dXJuICAweDA0 MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RpbWluZzEgICh2b2lkKSB7IHJldHVybiAg MHgwNTAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90aW1pbmcyICAodm9pZCkgeyByZXR1 cm4gIDB4MDYwIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNI d3JNZWRpYVExMXh4VHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBl IHB0cl90eXBlOwlFbUFsaWFzSHdyTWVkaWFRMTF4eFR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFz SHdyTWVkaWFRMTF4eFR5cGUgIAkoY29uc3QgRW1BbGlhc0h3ck1lZGlhUTExeHhUeXBlICAmKTsJ cHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNp emVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMHgyMDAwICA7IH0JRW1BbGlhc0h3 ck1lZGlhUTExeHhUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc0h3ck1lZGlhUTEx eHhUeXBlICA8QT4mKTsJRW1BbGlhc0h3ck1lZGlhUTExeHhUeXBlICA8QT4Jb3BlcmF0b3JbXSAo aW50KTsJY29uc3QgRW1BbGlhc0h3ck1lZGlhUTExeHhUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50 KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc0h3ck1lZGlhUTExeHhUeXBlICAJKHZvaWQpOwlwdHJf dHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJY2NSRUcg OyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQltbVJFRyA7IAkgRW1BbGlhc1VJbnQzMiA8QT4J IAkJCQkJCWluUkVHIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJZ2NSRUcgOyAJIEVtQWxp YXNVSW50MzIgPEE+CSAJCQkJCQlnZVJFRyA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXNz UkVHIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJc3BSRUcgOyAJIEVtQWxpYXNVSW50MzIg PEE+CSAJCQkJCQlkY1JFRyA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXBjUkVHIDsgCSBF bUFsaWFzVUludDMyIDxBPgkgCQkJCQkJdWhSRUcgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJ CQlmcFJFRyA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCWNwUkVHIDsgCSBFbUFsaWFzVUlu dDMyIDxBPgkgCQkJCQkJc2ZSRUcgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQl1ZFJFRyA7 ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NjUkVHICAodm9pZCkgeyByZXR1cm4gIDB4 MDAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbW1SRUcgICh2b2lkKSB7IHJldHVybiAg MHgwODAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pblJFRyAgKHZvaWQpIHsgcmV0dXJu ICAweDEwMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2djUkVHICAodm9pZCkgeyByZXR1 cm4gIDB4MTgwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ2VSRUcgICh2b2lkKSB7IHJl dHVybiAgMHgyMDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zc1JFRyAgKHZvaWQpIHsg cmV0dXJuICAweDI4MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NwUkVHICAodm9pZCkg eyByZXR1cm4gIDB4MzAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGNSRUcgICh2b2lk KSB7IHJldHVybiAgMHgzODAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wY1JFRyAgKHZv aWQpIHsgcmV0dXJuICAweDQwMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VoUkVHICAo dm9pZCkgeyByZXR1cm4gIDB4NTAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZnBSRUcg ICh2b2lkKSB7IHJldHVybiAgMHg2MDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jcFJF RyAgKHZvaWQpIHsgcmV0dXJuICAweDgwMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Nm UkVHICAodm9pZCkgeyByZXR1cm4gIDB4QzAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf dWRSRUcgICh2b2lkKSB7IHJldHVybiAgMHgxMDAwIDsgfSAgCX07IAljbGFzcyBFbVByb3h5SHdy TWVkaWFRMTF4eFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94 eUh3ck1lZGlhUTExeHhUeXBlICAJKHZvaWQpOwlFbVByb3h5SHdyTWVkaWFRMTF4eFR5cGUgIAko Y29uc3QgRW1Qcm94eUh3ck1lZGlhUTExeHhUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZv aWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVf dAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMHgyMDAwICA7IH0JRW1Qcm94eUh3ck1l ZGlhUTExeHhUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlId3JNZWRpYVExMXh4VHlw ZSAgJik7CUVtQWxpYXNId3JNZWRpYVExMXh4VHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJ Y29uc3QgRW1BbGlhc0h3ck1lZGlhUTExeHhUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNv bnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAweDIwMDAgIF07CX0gZkxv Y2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCWNjUkVHIDsg CSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQltbVJFRyA7IAkgRW1BbGlhc1VJbnQzMiA8TEFT PgkgCQkJCQkJaW5SRUcgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCWdjUkVHIDsgCSBF bUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlnZVJFRyA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkg CQkJCQkJc3NSRUcgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXNwUkVHIDsgCSBFbUFs aWFzVUludDMyIDxMQVM+CSAJCQkJCQlkY1JFRyA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJ CQkJcGNSRUcgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXVoUkVHIDsgCSBFbUFsaWFz VUludDMyIDxMQVM+CSAJCQkJCQlmcFJFRyA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJ Y3BSRUcgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXNmUkVHIDsgCSBFbUFsaWFzVUlu dDMyIDxMQVM+CSAJCQkJCQl1ZFJFRyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Nj UkVHICAodm9pZCkgeyByZXR1cm4gIDB4MDAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf bW1SRUcgICh2b2lkKSB7IHJldHVybiAgMHgwODAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9pblJFRyAgKHZvaWQpIHsgcmV0dXJuICAweDEwMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2djUkVHICAodm9pZCkgeyByZXR1cm4gIDB4MTgwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfZ2VSRUcgICh2b2lkKSB7IHJldHVybiAgMHgyMDAgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9zc1JFRyAgKHZvaWQpIHsgcmV0dXJuICAweDI4MCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3NwUkVHICAodm9pZCkgeyByZXR1cm4gIDB4MzAwIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfZGNSRUcgICh2b2lkKSB7IHJldHVybiAgMHgzODAgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9wY1JFRyAgKHZvaWQpIHsgcmV0dXJuICAweDQwMCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3VoUkVHICAodm9pZCkgeyByZXR1cm4gIDB4NTAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfZnBSRUcgICh2b2lkKSB7IHJldHVybiAgMHg2MDAgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9jcFJFRyAgKHZvaWQpIHsgcmV0dXJuICAweDgwMCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX3NmUkVHICAodm9pZCkgeyByZXR1cm4gIDB4QzAwIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWRSRUcgICh2b2lkKSB7IHJldHVybiAgMHgxMDAwIDsg fSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNId3JTa3l3YWxrZXJQ TERUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7 CUVtQWxpYXNId3JTa3l3YWxrZXJQTERUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc0h3clNreXdh bGtlclBMRFR5cGUgIAkoY29uc3QgRW1BbGlhc0h3clNreXdhbGtlclBMRFR5cGUgICYpOwlwdHJf dHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90 CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA0MiAgOyB9CUVtQWxpYXNId3JTa3l3YWxr ZXJQTERUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc0h3clNreXdhbGtlclBMRFR5 cGUgIDxBPiYpOwlFbUFsaWFzSHdyU2t5d2Fsa2VyUExEVHlwZSAgPEE+CW9wZXJhdG9yW10gKGlu dCk7CWNvbnN0IEVtQWxpYXNId3JTa3l3YWxrZXJQTERUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50 KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc0h3clNreXdhbGtlclBMRFR5cGUgIAkodm9pZCk7CXB0 cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQl0b2Rz bG4zIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJZ3JlZW5fbGVkIDsgCSBFbUFsaWFzVUlu dDE2IDxBPgkgCQkJCQkJcGluX25vdGlmeV9lbmFibGUgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJ CQkJCQlyZWRfbGVkIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJYWNwciA7IAkgRW1BbGlh c1VJbnQxNiA8QT4JIAkJCQkJCWxvd19iYXR0IDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJ ZHRvM3N2Y19pcnEgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlkc3BfaXJxX2VuYWJsZSA7 IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWRzcF9pcnFfcG9sYXJpdHkgOyAJIEVtQWxpYXNV SW50MTYgPEE+CSAJCQkJCQljaGFyZ2luZ19pbl9wcm9ncmVzcyA7IAkgRW1BbGlhc1VJbnQxNiA8 QT4JIAkJCQkJCWNoYXJnaW5nX2luX3Byb2cyIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJ Y2hhcmdpbmdfaW5fcHJvZ19PRSA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXR3aXN0ZXJf aXJxX3dha2UgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlsb3dfYmF0dF9tYXNrIDsgCSBF bUFsaWFzVUludDE2IDxBPgkgCQkJCQkJYWNwcl9tYXNrIDsgCSBFbUFsaWFzVUludDE2IDxBPgkg CQkJCQkJYWNwcl9wb2xhcml0eSA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXVzYl9pbnQg OyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQl1c2JfaW50X21hc2sgOyAJIEVtQWxpYXNVSW50 MTYgPEE+CSAJCQkJCQlidWxsZXRfZGV0IDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJYnVs bGV0X2RldF9tYXNrIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJYnVsbGV0X2RldF9wb2wg OyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90b2RzbG4zICAodm9pZCkgeyByZXR1cm4g IDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9ncmVlbl9sZWQgICh2b2lkKSB7IHJldHVy biAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Bpbl9ub3RpZnlfZW5hYmxlICAodm9p ZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZWRfbGVkICAodm9p ZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hY3ByICAodm9pZCkg eyByZXR1cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9sb3dfYmF0dCAgKHZvaWQp IHsgcmV0dXJuICAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2R0bzNzdmNfaXJxICAo dm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZHNwX2lycV9l bmFibGUgICh2b2lkKSB7IHJldHVybiAgMTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9k c3BfaXJxX3BvbGFyaXR5ICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfY2hhcmdpbmdfaW5fcHJvZ3Jlc3MgICh2b2lkKSB7IHJldHVybiAgMTggOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9jaGFyZ2luZ19pbl9wcm9nMiAgKHZvaWQpIHsgcmV0dXJu ICAyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NoYXJnaW5nX2luX3Byb2dfT0UgICh2 b2lkKSB7IHJldHVybiAgMjIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90d2lzdGVyX2ly cV93YWtlICAodm9pZCkgeyByZXR1cm4gIDI0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf bG93X2JhdHRfbWFzayAgKHZvaWQpIHsgcmV0dXJuICAyNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2FjcHJfbWFzayAgKHZvaWQpIHsgcmV0dXJuICAyOCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2FjcHJfcG9sYXJpdHkgICh2b2lkKSB7IHJldHVybiAgMzAgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl91c2JfaW50ICAodm9pZCkgeyByZXR1cm4gIDMyIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfdXNiX2ludF9tYXNrICAodm9pZCkgeyByZXR1cm4gIDM0IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYnVsbGV0X2RldCAgKHZvaWQpIHsgcmV0dXJuICAzNiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2J1bGxldF9kZXRfbWFzayAgKHZvaWQpIHsgcmV0 dXJuICAzOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2J1bGxldF9kZXRfcG9sICAodm9p ZCkgeyByZXR1cm4gIDQwIDsgfSAgCX07IAljbGFzcyBFbVByb3h5SHdyU2t5d2Fsa2VyUExEVHlw ZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5SHdyU2t5d2Fsa2Vy UExEVHlwZSAgCSh2b2lkKTsJRW1Qcm94eUh3clNreXdhbGtlclBMRFR5cGUgIAkoY29uc3QgRW1Q cm94eUh3clNreXdhbGtlclBMRFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29u c3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRT aXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA0MiAgOyB9CUVtUHJveHlId3JTa3l3YWxrZXJQTERU eXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlId3JTa3l3YWxrZXJQTERUeXBlICAmKTsJ RW1BbGlhc0h3clNreXdhbGtlclBMRFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0 IEVtQWxpYXNId3JTa3l3YWxrZXJQTERUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0 Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA0MiAgXTsJfSBmTG9jYWxEYXRh OwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJdG9kc2xuMyA7IAkgRW1B bGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJZ3JlZW5fbGVkIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+ CSAJCQkJCQlwaW5fbm90aWZ5X2VuYWJsZSA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJ cmVkX2xlZCA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJYWNwciA7IAkgRW1BbGlhc1VJ bnQxNiA8TEFTPgkgCQkJCQkJbG93X2JhdHQgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJ CWR0bzNzdmNfaXJxIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlkc3BfaXJxX2VuYWJs ZSA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJZHNwX2lycV9wb2xhcml0eSA7IAkgRW1B bGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJY2hhcmdpbmdfaW5fcHJvZ3Jlc3MgOyAJIEVtQWxpYXNV SW50MTYgPExBUz4JIAkJCQkJCWNoYXJnaW5nX2luX3Byb2cyIDsgCSBFbUFsaWFzVUludDE2IDxM QVM+CSAJCQkJCQljaGFyZ2luZ19pbl9wcm9nX09FIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJ CQkJCQl0d2lzdGVyX2lycV93YWtlIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlsb3df YmF0dF9tYXNrIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlhY3ByX21hc2sgOyAJIEVt QWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWFjcHJfcG9sYXJpdHkgOyAJIEVtQWxpYXNVSW50MTYg PExBUz4JIAkJCQkJCXVzYl9pbnQgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXVzYl9p bnRfbWFzayA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJYnVsbGV0X2RldCA7IAkgRW1B bGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJYnVsbGV0X2RldF9tYXNrIDsgCSBFbUFsaWFzVUludDE2 IDxMQVM+CSAJCQkJCQlidWxsZXRfZGV0X3BvbCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3RvZHNsbjMgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2dyZWVuX2xlZCAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfcGluX25vdGlmeV9lbmFibGUgICh2b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3JlZF9sZWQgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2FjcHIgICh2b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2xvd19iYXR0ICAodm9pZCkgeyByZXR1cm4gIDEwIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfZHRvM3N2Y19pcnEgICh2b2lkKSB7IHJldHVybiAgMTIgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9kc3BfaXJxX2VuYWJsZSAgKHZvaWQpIHsgcmV0dXJuICAxNCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RzcF9pcnFfcG9sYXJpdHkgICh2b2lkKSB7IHJl dHVybiAgMTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jaGFyZ2luZ19pbl9wcm9ncmVz cyAgKHZvaWQpIHsgcmV0dXJuICAxOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NoYXJn aW5nX2luX3Byb2cyICAodm9pZCkgeyByZXR1cm4gIDIwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfY2hhcmdpbmdfaW5fcHJvZ19PRSAgKHZvaWQpIHsgcmV0dXJuICAyMiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3R3aXN0ZXJfaXJxX3dha2UgICh2b2lkKSB7IHJldHVybiAgMjQg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9sb3dfYmF0dF9tYXNrICAodm9pZCkgeyByZXR1 cm4gIDI2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYWNwcl9tYXNrICAodm9pZCkgeyBy ZXR1cm4gIDI4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYWNwcl9wb2xhcml0eSAgKHZv aWQpIHsgcmV0dXJuICAzMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VzYl9pbnQgICh2 b2lkKSB7IHJldHVybiAgMzIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91c2JfaW50X21h c2sgICh2b2lkKSB7IHJldHVybiAgMzQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9idWxs ZXRfZGV0ICAodm9pZCkgeyByZXR1cm4gIDM2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf YnVsbGV0X2RldF9tYXNrICAodm9pZCkgeyByZXR1cm4gIDM4IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfYnVsbGV0X2RldF9wb2wgICh2b2lkKSB7IHJldHVybiAgNDAgOyB9ICAJfTsgICAJ ICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc0h3clN5bWJvbEFTSUNUeXBlICAJewlw dWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNId3JT eW1ib2xBU0lDVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNId3JTeW1ib2xBU0lDVHlwZSAgCShj b25zdCBFbUFsaWFzSHdyU3ltYm9sQVNJQ1R5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9p ZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJ CXsgcmV0dXJuICAgICAyNTYgIDsgfQlFbUFsaWFzSHdyU3ltYm9sQVNJQ1R5cGUgIDxBPiYJb3Bl cmF0b3I9IChjb25zdCBFbUFsaWFzSHdyU3ltYm9sQVNJQ1R5cGUgIDxBPiYpOwlFbUFsaWFzSHdy U3ltYm9sQVNJQ1R5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzSHdyU3lt Ym9sQVNJQ1R5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFz SHdyU3ltYm9sQVNJQ1R5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAg IEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCVMyNElPIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJ CQlTMjRBdHRyaWJ1dGUgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCVVBUlQ4MjUxTWFjcm9T ZWxlY3QgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCVNjYW5uZXJEZWNvZGVyQ29udHJvbCA7 IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJQ29udHJvbCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkg CQkJCQkJR1BJT0RhdGEgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCUdQSU9EaXJlY3Rpb24g OyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9TMjRJTyAgKHZvaWQpIHsgcmV0dXJuICAw IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfUzI0QXR0cmlidXRlICAodm9pZCkgeyByZXR1 cm4gIDEyOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX1VBUlQ4MjUxTWFjcm9TZWxlY3Qg ICh2b2lkKSB7IHJldHVybiAgMTYwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfU2Nhbm5l ckRlY29kZXJDb250cm9sICAodm9pZCkgeyByZXR1cm4gIDE2NSA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX0NvbnRyb2wgICh2b2lkKSB7IHJldHVybiAgMjQ3IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfR1BJT0RhdGEgICh2b2lkKSB7IHJldHVybiAgMjUzIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfR1BJT0RpcmVjdGlvbiAgKHZvaWQpIHsgcmV0dXJuICAyNTUgOyB9ICAJ fTsgCWNsYXNzIEVtUHJveHlId3JTeW1ib2xBU0lDVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZv aWQqIHB0cl90eXBlOwlFbVByb3h5SHdyU3ltYm9sQVNJQ1R5cGUgIAkodm9pZCk7CUVtUHJveHlI d3JTeW1ib2xBU0lDVHlwZSAgCShjb25zdCBFbVByb3h5SHdyU3ltYm9sQVNJQ1R5cGUgICYpOwlw dHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2Fs RGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyNTYg IDsgfQlFbVByb3h5SHdyU3ltYm9sQVNJQ1R5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94 eUh3clN5bWJvbEFTSUNUeXBlICAmKTsJRW1BbGlhc0h3clN5bWJvbEFTSUNUeXBlICA8TEFTPglv cGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzSHdyU3ltYm9sQVNJQ1R5cGUgIDxMQVM+CW9w ZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAg IDI1NiAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJ CQkJCQlTMjRJTyA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlTMjRBdHRyaWJ1dGUgOyAJ IEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJVUFSVDgyNTFNYWNyb1NlbGVjdCA7IAkgRW1BbGlh c1VJbnQ4IDxMQVM+CSAJCQkJCQlTY2FubmVyRGVjb2RlckNvbnRyb2wgOyAJIEVtQWxpYXNVSW50 OCA8TEFTPgkgCQkJCQkJQ29udHJvbCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlHUElP RGF0YSA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlHUElPRGlyZWN0aW9uIDsgIAkgICAg IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfUzI0SU8gICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX1MyNEF0dHJpYnV0ZSAgKHZvaWQpIHsgcmV0dXJuICAxMjgg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9VQVJUODI1MU1hY3JvU2VsZWN0ICAodm9pZCkg eyByZXR1cm4gIDE2MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX1NjYW5uZXJEZWNvZGVy Q29udHJvbCAgKHZvaWQpIHsgcmV0dXJuICAxNjUgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9Db250cm9sICAodm9pZCkgeyByZXR1cm4gIDI0NyA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX0dQSU9EYXRhICAodm9pZCkgeyByZXR1cm4gIDI1MyA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX0dQSU9EaXJlY3Rpb24gICh2b2lkKSB7IHJldHVybiAgMjU1IDsgfSAgCX07ICAgCSAg dGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNTRUQxMzc1UmVnc1R5cGUgIAl7CXB1Ymxp YzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc1NFRDEzNzVS ZWdzVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNTRUQxMzc1UmVnc1R5cGUgIAkoY29uc3QgRW1B bGlhc1NFRDEzNzVSZWdzVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7 IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4g ICAgIDMyICA7IH0JRW1BbGlhc1NFRDEzNzVSZWdzVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0 IEVtQWxpYXNTRUQxMzc1UmVnc1R5cGUgIDxBPiYpOwlFbUFsaWFzU0VEMTM3NVJlZ3NUeXBlICA8 QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1NFRDEzNzVSZWdzVHlwZSAgPEE+CW9w ZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNTRUQxMzc1UmVnc1R5cGUgIAko dm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50OCA8QT4JIAkJ CQkJCXByb2R1Y3RSZXZpc2lvbkNvZGUgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCW1vZGUw IDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQltb2RlMSA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkg CQkJCQkJbW9kZTIgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWhvcml6b250YWxQYW5lbFNp emUgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXZlcnRpY2FsUGFuZWxTaXplTFNCIDsgCSBF bUFsaWFzVUludDggPEE+CSAJCQkJCQl2ZXJ0aWNhbFBhbmVsU2l6ZU1TQiA7IAkgRW1BbGlhc1VJ bnQ4IDxBPgkgCQkJCQkJRlBMaW5lU3RhcnRQb3NpdGlvbiA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkg CQkJCQkJaG9yaXpvbnRhbE5vbkRpc3BsYXlQZXJpb2QgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJ CQkJCUZQRlJBTUVTdGFydFBvc2l0aW9uIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQl2ZXJ0 aWNhbE5vbkRpc3BsYXlQZXJpb2QgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCU1PRFJhdGUg OyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXNjcmVlbjFTdGFydEFkZHJlc3NMU0IgOyAJIEVt QWxpYXNVSW50OCA8QT4JIAkJCQkJCXNjcmVlbjFTdGFydEFkZHJlc3NNU0IgOyAJIEVtQWxpYXNV SW50OCA8QT4JIAkJCQkJCXNjcmVlbjJTdGFydEFkZHJlc3NMU0IgOyAJIEVtQWxpYXNVSW50OCA8 QT4JIAkJCQkJCXNjcmVlbjJTdGFydEFkZHJlc3NNU0IgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJ CQkJCXNjcmVlbjFTdGFydEFkZHJlc3NNU0JpdCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJ bWVtb3J5QWRkcmVzc09mZnNldCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJc2NyZWVuMVZl cnRpY2FsU2l6ZUxTQiA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJc2NyZWVuMVZlcnRpY2Fs U2l6ZU1TQiA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJdW51c2VkMSA7IAkgRW1BbGlhc1VJ bnQ4IDxBPgkgCQkJCQkJbG9va1VwVGFibGVBZGRyZXNzIDsgCSBFbUFsaWFzVUludDggPEE+CSAJ CQkJCQl1bnVzZWQyIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlsb29rVXBUYWJsZURhdGEg OyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCUdQSU9Db25maWd1cmF0aW9uQ29udHJvbCA7IAkg RW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJR1BJT1N0YXR1c0NvbnRyb2wgOyAJIEVtQWxpYXNVSW50 OCA8QT4JIAkJCQkJCXNjcmF0Y2hQYWQgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXBvcnRy YWl0TW9kZSA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJbGluZUJ5dGVDb3VudFJlZ2lzdGVy IDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQl1bnVzZWQzIDsgCSBFbUFsaWFzVUludDggPEE+ CSAJCQkJCQl1bnVzZWQ0IDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQl1bnVzZWQ1IDsgIAkg ICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcHJvZHVjdFJldmlzaW9uQ29kZSAgKHZvaWQpIHsg cmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbW9kZTAgICh2b2lkKSB7IHJl dHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21vZGUxICAodm9pZCkgeyByZXR1 cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9tb2RlMiAgKHZvaWQpIHsgcmV0dXJu ICAzIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaG9yaXpvbnRhbFBhbmVsU2l6ZSAgKHZv aWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdmVydGljYWxQYW5l bFNpemVMU0IgICh2b2lkKSB7IHJldHVybiAgNSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3ZlcnRpY2FsUGFuZWxTaXplTVNCICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9GUExpbmVTdGFydFBvc2l0aW9uICAodm9pZCkgeyByZXR1cm4gIDcgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9ob3Jpem9udGFsTm9uRGlzcGxheVBlcmlvZCAgKHZv aWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfRlBGUkFNRVN0YXJ0 UG9zaXRpb24gICh2b2lkKSB7IHJldHVybiAgOSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3ZlcnRpY2FsTm9uRGlzcGxheVBlcmlvZCAgKHZvaWQpIHsgcmV0dXJuICAxMCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX01PRFJhdGUgICh2b2lkKSB7IHJldHVybiAgMTEgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9zY3JlZW4xU3RhcnRBZGRyZXNzTFNCICAodm9pZCkgeyByZXR1 cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc2NyZWVuMVN0YXJ0QWRkcmVzc01T QiAgKHZvaWQpIHsgcmV0dXJuICAxMyA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NjcmVl bjJTdGFydEFkZHJlc3NMU0IgICh2b2lkKSB7IHJldHVybiAgMTQgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9zY3JlZW4yU3RhcnRBZGRyZXNzTVNCICAodm9pZCkgeyByZXR1cm4gIDE1IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc2NyZWVuMVN0YXJ0QWRkcmVzc01TQml0ICAodm9p ZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbWVtb3J5QWRkcmVz c09mZnNldCAgKHZvaWQpIHsgcmV0dXJuICAxNyA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3NjcmVlbjFWZXJ0aWNhbFNpemVMU0IgICh2b2lkKSB7IHJldHVybiAgMTggOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9zY3JlZW4xVmVydGljYWxTaXplTVNCICAodm9pZCkgeyByZXR1cm4g IDE5IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdW51c2VkMSAgKHZvaWQpIHsgcmV0dXJu ICAyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xvb2tVcFRhYmxlQWRkcmVzcyAgKHZv aWQpIHsgcmV0dXJuICAyMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VudXNlZDIgICh2 b2lkKSB7IHJldHVybiAgMjIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9sb29rVXBUYWJs ZURhdGEgICh2b2lkKSB7IHJldHVybiAgMjMgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9H UElPQ29uZmlndXJhdGlvbkNvbnRyb2wgICh2b2lkKSB7IHJldHVybiAgMjQgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9HUElPU3RhdHVzQ29udHJvbCAgKHZvaWQpIHsgcmV0dXJuICAyNSA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NjcmF0Y2hQYWQgICh2b2lkKSB7IHJldHVybiAg MjYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wb3J0cmFpdE1vZGUgICh2b2lkKSB7IHJl dHVybiAgMjcgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9saW5lQnl0ZUNvdW50UmVnaXN0 ZXIgICh2b2lkKSB7IHJldHVybiAgMjggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91bnVz ZWQzICAodm9pZCkgeyByZXR1cm4gIDI5IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdW51 c2VkNCAgKHZvaWQpIHsgcmV0dXJuICAzMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Vu dXNlZDUgICh2b2lkKSB7IHJldHVybiAgMzEgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlTRUQxMzc1 UmVnc1R5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVNFRDEz NzVSZWdzVHlwZSAgCSh2b2lkKTsJRW1Qcm94eVNFRDEzNzVSZWdzVHlwZSAgCShjb25zdCBFbVBy b3h5U0VEMTM3NVJlZ3NUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsg cmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQko dm9pZCkJCQl7IHJldHVybiAgICAgMzIgIDsgfQlFbVByb3h5U0VEMTM3NVJlZ3NUeXBlICAmCQlv cGVyYXRvcj0gKGNvbnN0IEVtUHJveHlTRUQxMzc1UmVnc1R5cGUgICYpOwlFbUFsaWFzU0VEMTM3 NVJlZ3NUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU0VEMTM3NVJl Z3NUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3Qgewlj aGFyCQkJX2J5dGVzWyAgICAzMiAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlh c1VJbnQ4IDxMQVM+CSAJCQkJCQlwcm9kdWN0UmV2aXNpb25Db2RlIDsgCSBFbUFsaWFzVUludDgg PExBUz4JIAkJCQkJCW1vZGUwIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCW1vZGUxIDsg CSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCW1vZGUyIDsgCSBFbUFsaWFzVUludDggPExBUz4J IAkJCQkJCWhvcml6b250YWxQYW5lbFNpemUgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJ dmVydGljYWxQYW5lbFNpemVMU0IgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJdmVydGlj YWxQYW5lbFNpemVNU0IgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJRlBMaW5lU3RhcnRQ b3NpdGlvbiA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlob3Jpem9udGFsTm9uRGlzcGxh eVBlcmlvZCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlGUEZSQU1FU3RhcnRQb3NpdGlv biA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQl2ZXJ0aWNhbE5vbkRpc3BsYXlQZXJpb2Qg OyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJTU9EUmF0ZSA7IAkgRW1BbGlhc1VJbnQ4IDxM QVM+CSAJCQkJCQlzY3JlZW4xU3RhcnRBZGRyZXNzTFNCIDsgCSBFbUFsaWFzVUludDggPExBUz4J IAkJCQkJCXNjcmVlbjFTdGFydEFkZHJlc3NNU0IgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJ CQkJc2NyZWVuMlN0YXJ0QWRkcmVzc0xTQiA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlz Y3JlZW4yU3RhcnRBZGRyZXNzTVNCIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCXNjcmVl bjFTdGFydEFkZHJlc3NNU0JpdCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQltZW1vcnlB ZGRyZXNzT2Zmc2V0IDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCXNjcmVlbjFWZXJ0aWNh bFNpemVMU0IgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJc2NyZWVuMVZlcnRpY2FsU2l6 ZU1TQiA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQl1bnVzZWQxIDsgCSBFbUFsaWFzVUlu dDggPExBUz4JIAkJCQkJCWxvb2tVcFRhYmxlQWRkcmVzcyA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+ CSAJCQkJCQl1bnVzZWQyIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWxvb2tVcFRhYmxl RGF0YSA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlHUElPQ29uZmlndXJhdGlvbkNvbnRy b2wgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJR1BJT1N0YXR1c0NvbnRyb2wgOyAJIEVt QWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJc2NyYXRjaFBhZCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+ CSAJCQkJCQlwb3J0cmFpdE1vZGUgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJbGluZUJ5 dGVDb3VudFJlZ2lzdGVyIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCXVudXNlZDMgOyAJ IEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJdW51c2VkNCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+ CSAJCQkJCQl1bnVzZWQ1IDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcHJvZHVjdFJl dmlzaW9uQ29kZSAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfbW9kZTAgICh2b2lkKSB7IHJldHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X21vZGUxICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9t b2RlMiAgKHZvaWQpIHsgcmV0dXJuICAzIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaG9y aXpvbnRhbFBhbmVsU2l6ZSAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfdmVydGljYWxQYW5lbFNpemVMU0IgICh2b2lkKSB7IHJldHVybiAgNSA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX3ZlcnRpY2FsUGFuZWxTaXplTVNCICAodm9pZCkgeyByZXR1 cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9GUExpbmVTdGFydFBvc2l0aW9uICAo dm9pZCkgeyByZXR1cm4gIDcgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9ob3Jpem9udGFs Tm9uRGlzcGxheVBlcmlvZCAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfRlBGUkFNRVN0YXJ0UG9zaXRpb24gICh2b2lkKSB7IHJldHVybiAgOSA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX3ZlcnRpY2FsTm9uRGlzcGxheVBlcmlvZCAgKHZvaWQpIHsg cmV0dXJuICAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX01PRFJhdGUgICh2b2lkKSB7 IHJldHVybiAgMTEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zY3JlZW4xU3RhcnRBZGRy ZXNzTFNCICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf c2NyZWVuMVN0YXJ0QWRkcmVzc01TQiAgKHZvaWQpIHsgcmV0dXJuICAxMyA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3NjcmVlbjJTdGFydEFkZHJlc3NMU0IgICh2b2lkKSB7IHJldHVybiAg MTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zY3JlZW4yU3RhcnRBZGRyZXNzTVNCICAo dm9pZCkgeyByZXR1cm4gIDE1IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc2NyZWVuMVN0 YXJ0QWRkcmVzc01TQml0ICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfbWVtb3J5QWRkcmVzc09mZnNldCAgKHZvaWQpIHsgcmV0dXJuICAxNyA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX3NjcmVlbjFWZXJ0aWNhbFNpemVMU0IgICh2b2lkKSB7IHJl dHVybiAgMTggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zY3JlZW4xVmVydGljYWxTaXpl TVNCICAodm9pZCkgeyByZXR1cm4gIDE5IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdW51 c2VkMSAgKHZvaWQpIHsgcmV0dXJuICAyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xv b2tVcFRhYmxlQWRkcmVzcyAgKHZvaWQpIHsgcmV0dXJuICAyMSA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3VudXNlZDIgICh2b2lkKSB7IHJldHVybiAgMjIgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9sb29rVXBUYWJsZURhdGEgICh2b2lkKSB7IHJldHVybiAgMjMgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9HUElPQ29uZmlndXJhdGlvbkNvbnRyb2wgICh2b2lkKSB7IHJl dHVybiAgMjQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9HUElPU3RhdHVzQ29udHJvbCAg KHZvaWQpIHsgcmV0dXJuICAyNSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NjcmF0Y2hQ YWQgICh2b2lkKSB7IHJldHVybiAgMjYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wb3J0 cmFpdE1vZGUgICh2b2lkKSB7IHJldHVybiAgMjcgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9saW5lQnl0ZUNvdW50UmVnaXN0ZXIgICh2b2lkKSB7IHJldHVybiAgMjggOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl91bnVzZWQzICAodm9pZCkgeyByZXR1cm4gIDI5IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfdW51c2VkNCAgKHZvaWQpIHsgcmV0dXJuICAzMCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3VudXNlZDUgICh2b2lkKSB7IHJldHVybiAgMzEgOyB9ICAJfTsg ICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc1NFRDEzNzZSZWdzVHlwZSAgCXsJ cHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzU0VE MTM3NlJlZ3NUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc1NFRDEzNzZSZWdzVHlwZSAgCShjb25z dCBFbUFsaWFzU0VEMTM3NlJlZ3NUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNv bnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJl dHVybiAgICAgMHhCNCAgOyB9CUVtQWxpYXNTRUQxMzc2UmVnc1R5cGUgIDxBPiYJb3BlcmF0b3I9 IChjb25zdCBFbUFsaWFzU0VEMTM3NlJlZ3NUeXBlICA8QT4mKTsJRW1BbGlhc1NFRDEzNzZSZWdz VHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTRUQxMzc2UmVnc1R5cGUg IDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzU0VEMTM3NlJlZ3NU eXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDgg PEE+CSAJCQkJCQlwcm9kdWN0UmV2aXNpb25Db2RlIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJ CQlkaXNwbGF5QnVmZmVyU2l6ZSA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJY29uZmlndXJh dGlvblJlYWRiYWNrIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQltZW1vcnlDbG9ja0NvbmZp Z3VyYXRpb24gOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXBpeGVsQ2xvY2tDb25maWd1cmF0 aW9uIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlsdXRXcml0ZUJsdWUgOyAJIEVtQWxpYXNV SW50OCA8QT4JIAkJCQkJCWx1dFdyaXRlR3JlZW4gOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJ CWx1dFdyaXRlUmVkIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlsdXRXcml0ZUFkZHJlc3Mg OyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWx1dFJlYWRCbHVlIDsgCSBFbUFsaWFzVUludDgg PEE+CSAJCQkJCQlsdXRSZWFkR3JlZW4gOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWx1dFJl YWRSZWQgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWx1dFJlYWRBZGRyZXNzIDsgCSBFbUFs aWFzVUludDggPEE+CSAJCQkJCQlwYW5lbFR5cGUgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJ CU1PRFJhdGUgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWhvcml6b250YWxUb3RhbCA7IAkg RW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJaG9yaXpvbnRhbFBlcmlvZCA7IAkgRW1BbGlhc1VJbnQ4 IDxBPgkgCQkJCQkJaG9yaXpvbnRhbFBlcmlvZFN0YXJ0MCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkg CQkJCQkJaG9yaXpvbnRhbFBlcmlvZFN0YXJ0MSA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJ dmVydGljYWxUb3RhbDAgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXZlcnRpY2FsVG90YWwx IDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQl2ZXJ0aWNhbFBlcmlvZDAgOyAJIEVtQWxpYXNV SW50OCA8QT4JIAkJCQkJCXZlcnRpY2FsUGVyaW9kMSA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJ CQkJdmVydGljYWxQZXJpb2RTdGFydDAgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXZlcnRp Y2FsUGVyaW9kU3RhcnQxIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlGUExJTkVQdWxzZVdp ZHRoIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlGUExJTkVQdWxzZVN0YXJ0MCA7IAkgRW1B bGlhc1VJbnQ4IDxBPgkgCQkJCQkJRlBMSU5FUHVsc2VTdGFydDEgOyAJIEVtQWxpYXNVSW50OCA8 QT4JIAkJCQkJCUZQRlJBTUVQdWxzZVdpZHRoIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlG UEZSQU1FUHVsc2VTdGFydDAgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCUZQRlJBTUVQdWxz ZVN0YXJ0MSA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJRFRGRF9HQ1BJbmRleCA7IAkgRW1B bGlhc1VJbnQ4IDxBPgkgCQkJCQkJRFRGRF9HQ1BEYXRhIDsgCSBFbUFsaWFzVUludDggPEE+CSAJ CQkJCQlkaXNwbGF5TW9kZSA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJc3BlY2lhbEVmZmVj dHMgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCW1haW5TdGFydEFkZHJlc3MwIDsgCSBFbUFs aWFzVUludDggPEE+CSAJCQkJCQltYWluU3RhcnRBZGRyZXNzMSA7IAkgRW1BbGlhc1VJbnQ4IDxB PgkgCQkJCQkJbWFpblN0YXJ0QWRkcmVzczIgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCW1h aW5MaW5lQWRkcmVzc09mZnNldDAgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCW1haW5MaW5l QWRkcmVzc09mZnNldDEgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCW92bHlTdGFydEFkZHJl c3MwIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlvdmx5U3RhcnRBZGRyZXNzMSA7IAkgRW1B bGlhc1VJbnQ4IDxBPgkgCQkJCQkJb3ZseVN0YXJ0QWRkcmVzczIgOyAJIEVtQWxpYXNVSW50OCA8 QT4JIAkJCQkJCW92bHlMaW5lQWRkcmVzc09mZnNldDAgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJ CQkJCW92bHlMaW5lQWRkcmVzc09mZnNldDEgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCW92 bHlTdGFydFhQb3NpdGlvbjAgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCW92bHlTdGFydFhQ b3NpdGlvbjEgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCW92bHlTdGFydFlQb3NpdGlvbjAg OyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCW92bHlTdGFydFlQb3NpdGlvbjEgOyAJIEVtQWxp YXNVSW50OCA8QT4JIAkJCQkJCW92bHlFbmRYUG9zaXRpb24wIDsgCSBFbUFsaWFzVUludDggPEE+ CSAJCQkJCQlvdmx5RW5kWFBvc2l0aW9uMSA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJb3Zs eUVuZFlQb3NpdGlvbjAgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCW92bHlFbmRZUG9zaXRp b24xIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlwb3dlclNhdmVDb25maWd1cmF0aW9uIDsg CSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlyZXNlcnZlZCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkg CQkJCQkJU29mdHdhcmVSZXNldCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJc2NyYXRjaFBh ZDAgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXNjcmF0Y2hQYWQxIDsgCSBFbUFsaWFzVUlu dDggPEE+CSAJCQkJCQlHUElPQ29uZmlndXJhdGlvbjAgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJ CQkJCUdQSU9Db25maWd1cmF0aW9uMSA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJR1BJT1N0 YXR1c0NvbnRyb2wwIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlHUElPU3RhdHVzQ29udHJv bDEgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCVBXTUNsb2NrQ1ZQdWxzZUNvbnRyb2wgOyAJ IEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCVBXTUNsb2NrQ1ZQdWxzZUNvbmZpZyA7IAkgRW1BbGlh c1VJbnQ4IDxBPgkgCQkJCQkJQ1ZQdWxzZUJ1cnN0TGVuZ3RoIDsgCSBFbUFsaWFzVUludDggPEE+ CSAJCQkJCQlQV01PdXREdXR5Q3ljbGUgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9w cm9kdWN0UmV2aXNpb25Db2RlICAodm9pZCkgeyByZXR1cm4gIDB4MDAgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9kaXNwbGF5QnVmZmVyU2l6ZSAgKHZvaWQpIHsgcmV0dXJuICAweDAxIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29uZmlndXJhdGlvblJlYWRiYWNrICAodm9pZCkg eyByZXR1cm4gIDB4MDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9tZW1vcnlDbG9ja0Nv bmZpZ3VyYXRpb24gICh2b2lkKSB7IHJldHVybiAgMHgwNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3BpeGVsQ2xvY2tDb25maWd1cmF0aW9uICAodm9pZCkgeyByZXR1cm4gIDB4MDUgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9sdXRXcml0ZUJsdWUgICh2b2lkKSB7IHJldHVybiAg MHgwOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2x1dFdyaXRlR3JlZW4gICh2b2lkKSB7 IHJldHVybiAgMHgwOSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2x1dFdyaXRlUmVkICAo dm9pZCkgeyByZXR1cm4gIDB4MEEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9sdXRXcml0 ZUFkZHJlc3MgICh2b2lkKSB7IHJldHVybiAgMHgwQiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2x1dFJlYWRCbHVlICAodm9pZCkgeyByZXR1cm4gIDB4MEMgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9sdXRSZWFkR3JlZW4gICh2b2lkKSB7IHJldHVybiAgMHgwRCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2x1dFJlYWRSZWQgICh2b2lkKSB7IHJldHVybiAgMHgwRSA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2x1dFJlYWRBZGRyZXNzICAodm9pZCkgeyByZXR1cm4g IDB4MEYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wYW5lbFR5cGUgICh2b2lkKSB7IHJl dHVybiAgMHgxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX01PRFJhdGUgICh2b2lkKSB7 IHJldHVybiAgMHgxMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2hvcml6b250YWxUb3Rh bCAgKHZvaWQpIHsgcmV0dXJuICAweDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaG9y aXpvbnRhbFBlcmlvZCAgKHZvaWQpIHsgcmV0dXJuICAweDE0IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfaG9yaXpvbnRhbFBlcmlvZFN0YXJ0MCAgKHZvaWQpIHsgcmV0dXJuICAweDE2IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaG9yaXpvbnRhbFBlcmlvZFN0YXJ0MSAgKHZvaWQp IHsgcmV0dXJuICAweDE3IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdmVydGljYWxUb3Rh bDAgICh2b2lkKSB7IHJldHVybiAgMHgxOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Zl cnRpY2FsVG90YWwxICAodm9pZCkgeyByZXR1cm4gIDB4MTkgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl92ZXJ0aWNhbFBlcmlvZDAgICh2b2lkKSB7IHJldHVybiAgMHgxQyA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3ZlcnRpY2FsUGVyaW9kMSAgKHZvaWQpIHsgcmV0dXJuICAweDFE IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdmVydGljYWxQZXJpb2RTdGFydDAgICh2b2lk KSB7IHJldHVybiAgMHgxRSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3ZlcnRpY2FsUGVy aW9kU3RhcnQxICAodm9pZCkgeyByZXR1cm4gIDB4MUYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9GUExJTkVQdWxzZVdpZHRoICAodm9pZCkgeyByZXR1cm4gIDB4MjAgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9GUExJTkVQdWxzZVN0YXJ0MCAgKHZvaWQpIHsgcmV0dXJuICAweDIy IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfRlBMSU5FUHVsc2VTdGFydDEgICh2b2lkKSB7 IHJldHVybiAgMHgyMyA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX0ZQRlJBTUVQdWxzZVdp ZHRoICAodm9pZCkgeyByZXR1cm4gIDB4MjQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9G UEZSQU1FUHVsc2VTdGFydDAgICh2b2lkKSB7IHJldHVybiAgMHgyNiA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX0ZQRlJBTUVQdWxzZVN0YXJ0MSAgKHZvaWQpIHsgcmV0dXJuICAweDI3IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfRFRGRF9HQ1BJbmRleCAgKHZvaWQpIHsgcmV0dXJu ICAweDI4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfRFRGRF9HQ1BEYXRhICAodm9pZCkg eyByZXR1cm4gIDB4MkMgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kaXNwbGF5TW9kZSAg KHZvaWQpIHsgcmV0dXJuICAweDcwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3BlY2lh bEVmZmVjdHMgICh2b2lkKSB7IHJldHVybiAgMHg3MSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX21haW5TdGFydEFkZHJlc3MwICAodm9pZCkgeyByZXR1cm4gIDB4NzQgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9tYWluU3RhcnRBZGRyZXNzMSAgKHZvaWQpIHsgcmV0dXJuICAweDc1 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbWFpblN0YXJ0QWRkcmVzczIgICh2b2lkKSB7 IHJldHVybiAgMHg3NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21haW5MaW5lQWRkcmVz c09mZnNldDAgICh2b2lkKSB7IHJldHVybiAgMHg3OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX21haW5MaW5lQWRkcmVzc09mZnNldDEgICh2b2lkKSB7IHJldHVybiAgMHg3OSA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX292bHlTdGFydEFkZHJlc3MwICAodm9pZCkgeyByZXR1cm4g IDB4N0MgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9vdmx5U3RhcnRBZGRyZXNzMSAgKHZv aWQpIHsgcmV0dXJuICAweDdEIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfb3ZseVN0YXJ0 QWRkcmVzczIgICh2b2lkKSB7IHJldHVybiAgMHg3RSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX292bHlMaW5lQWRkcmVzc09mZnNldDAgICh2b2lkKSB7IHJldHVybiAgMHg4MCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX292bHlMaW5lQWRkcmVzc09mZnNldDEgICh2b2lkKSB7IHJl dHVybiAgMHg4MSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX292bHlTdGFydFhQb3NpdGlv bjAgICh2b2lkKSB7IHJldHVybiAgMHg4NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX292 bHlTdGFydFhQb3NpdGlvbjEgICh2b2lkKSB7IHJldHVybiAgMHg4NSA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX292bHlTdGFydFlQb3NpdGlvbjAgICh2b2lkKSB7IHJldHVybiAgMHg4OCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX292bHlTdGFydFlQb3NpdGlvbjEgICh2b2lkKSB7 IHJldHVybiAgMHg4OSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX292bHlFbmRYUG9zaXRp b24wICAodm9pZCkgeyByZXR1cm4gIDB4OEMgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9v dmx5RW5kWFBvc2l0aW9uMSAgKHZvaWQpIHsgcmV0dXJuICAweDhEIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2Zfb3ZseUVuZFlQb3NpdGlvbjAgICh2b2lkKSB7IHJldHVybiAgMHg5MCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX292bHlFbmRZUG9zaXRpb24xICAodm9pZCkgeyByZXR1 cm4gIDB4OTEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wb3dlclNhdmVDb25maWd1cmF0 aW9uICAodm9pZCkgeyByZXR1cm4gIDB4QTAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9y ZXNlcnZlZCAgKHZvaWQpIHsgcmV0dXJuICAweEExIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfU29mdHdhcmVSZXNldCAgKHZvaWQpIHsgcmV0dXJuICAweEEyIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2Zfc2NyYXRjaFBhZDAgICh2b2lkKSB7IHJldHVybiAgMHhBNCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3NjcmF0Y2hQYWQxICAodm9pZCkgeyByZXR1cm4gIDB4QTUgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9HUElPQ29uZmlndXJhdGlvbjAgICh2b2lkKSB7IHJl dHVybiAgMHhBOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX0dQSU9Db25maWd1cmF0aW9u MSAgKHZvaWQpIHsgcmV0dXJuICAweEE5IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfR1BJ T1N0YXR1c0NvbnRyb2wwICAodm9pZCkgeyByZXR1cm4gIDB4QUMgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9HUElPU3RhdHVzQ29udHJvbDEgICh2b2lkKSB7IHJldHVybiAgMHhBRCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX1BXTUNsb2NrQ1ZQdWxzZUNvbnRyb2wgICh2b2lkKSB7 IHJldHVybiAgMHhCMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX1BXTUNsb2NrQ1ZQdWxz ZUNvbmZpZyAgKHZvaWQpIHsgcmV0dXJuICAweEIxIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfQ1ZQdWxzZUJ1cnN0TGVuZ3RoICAodm9pZCkgeyByZXR1cm4gIDB4QjIgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9QV01PdXREdXR5Q3ljbGUgICh2b2lkKSB7IHJldHVybiAgMHhCMyA7 IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVNFRDEzNzZSZWdzVHlwZSAgCXsJcHVibGljOgl0eXBlZGVm IHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U0VEMTM3NlJlZ3NUeXBlICAJKHZvaWQpOwlFbVByb3h5 U0VEMTM3NlJlZ3NUeXBlICAJKGNvbnN0IEVtUHJveHlTRUQxMzc2UmVnc1R5cGUgICYpOwlwdHJf dHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0 YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAweEI0ICA7 IH0JRW1Qcm94eVNFRDEzNzZSZWdzVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5U0VE MTM3NlJlZ3NUeXBlICAmKTsJRW1BbGlhc1NFRDEzNzZSZWdzVHlwZSAgPExBUz4Jb3BlcmF0b3Jb XSAoaW50KTsJY29uc3QgRW1BbGlhc1NFRDEzNzZSZWdzVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAo aW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMHhCNCAgXTsJ fSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlwcm9k dWN0UmV2aXNpb25Db2RlIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWRpc3BsYXlCdWZm ZXJTaXplIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWNvbmZpZ3VyYXRpb25SZWFkYmFj ayA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQltZW1vcnlDbG9ja0NvbmZpZ3VyYXRpb24g OyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJcGl4ZWxDbG9ja0NvbmZpZ3VyYXRpb24gOyAJ IEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJbHV0V3JpdGVCbHVlIDsgCSBFbUFsaWFzVUludDgg PExBUz4JIAkJCQkJCWx1dFdyaXRlR3JlZW4gOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJ bHV0V3JpdGVSZWQgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJbHV0V3JpdGVBZGRyZXNz IDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWx1dFJlYWRCbHVlIDsgCSBFbUFsaWFzVUlu dDggPExBUz4JIAkJCQkJCWx1dFJlYWRHcmVlbiA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJ CQlsdXRSZWFkUmVkIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWx1dFJlYWRBZGRyZXNz IDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCXBhbmVsVHlwZSA7IAkgRW1BbGlhc1VJbnQ4 IDxMQVM+CSAJCQkJCQlNT0RSYXRlIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWhvcml6 b250YWxUb3RhbCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlob3Jpem9udGFsUGVyaW9k IDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWhvcml6b250YWxQZXJpb2RTdGFydDAgOyAJ IEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJaG9yaXpvbnRhbFBlcmlvZFN0YXJ0MSA7IAkgRW1B bGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQl2ZXJ0aWNhbFRvdGFsMCA7IAkgRW1BbGlhc1VJbnQ4IDxM QVM+CSAJCQkJCQl2ZXJ0aWNhbFRvdGFsMSA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQl2 ZXJ0aWNhbFBlcmlvZDAgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJdmVydGljYWxQZXJp b2QxIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCXZlcnRpY2FsUGVyaW9kU3RhcnQwIDsg CSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCXZlcnRpY2FsUGVyaW9kU3RhcnQxIDsgCSBFbUFs aWFzVUludDggPExBUz4JIAkJCQkJCUZQTElORVB1bHNlV2lkdGggOyAJIEVtQWxpYXNVSW50OCA8 TEFTPgkgCQkJCQkJRlBMSU5FUHVsc2VTdGFydDAgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJ CQkJRlBMSU5FUHVsc2VTdGFydDEgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJRlBGUkFN RVB1bHNlV2lkdGggOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJRlBGUkFNRVB1bHNlU3Rh cnQwIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCUZQRlJBTUVQdWxzZVN0YXJ0MSA7IAkg RW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlEVEZEX0dDUEluZGV4IDsgCSBFbUFsaWFzVUludDgg PExBUz4JIAkJCQkJCURURkRfR0NQRGF0YSA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlk aXNwbGF5TW9kZSA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlzcGVjaWFsRWZmZWN0cyA7 IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQltYWluU3RhcnRBZGRyZXNzMCA7IAkgRW1BbGlh c1VJbnQ4IDxMQVM+CSAJCQkJCQltYWluU3RhcnRBZGRyZXNzMSA7IAkgRW1BbGlhc1VJbnQ4IDxM QVM+CSAJCQkJCQltYWluU3RhcnRBZGRyZXNzMiA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJ CQltYWluTGluZUFkZHJlc3NPZmZzZXQwIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCW1h aW5MaW5lQWRkcmVzc09mZnNldDEgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJb3ZseVN0 YXJ0QWRkcmVzczAgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJb3ZseVN0YXJ0QWRkcmVz czEgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJb3ZseVN0YXJ0QWRkcmVzczIgOyAJIEVt QWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJb3ZseUxpbmVBZGRyZXNzT2Zmc2V0MCA7IAkgRW1BbGlh c1VJbnQ4IDxMQVM+CSAJCQkJCQlvdmx5TGluZUFkZHJlc3NPZmZzZXQxIDsgCSBFbUFsaWFzVUlu dDggPExBUz4JIAkJCQkJCW92bHlTdGFydFhQb3NpdGlvbjAgOyAJIEVtQWxpYXNVSW50OCA8TEFT PgkgCQkJCQkJb3ZseVN0YXJ0WFBvc2l0aW9uMSA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJ CQlvdmx5U3RhcnRZUG9zaXRpb24wIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCW92bHlT dGFydFlQb3NpdGlvbjEgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJb3ZseUVuZFhQb3Np dGlvbjAgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJb3ZseUVuZFhQb3NpdGlvbjEgOyAJ IEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJb3ZseUVuZFlQb3NpdGlvbjAgOyAJIEVtQWxpYXNV SW50OCA8TEFTPgkgCQkJCQkJb3ZseUVuZFlQb3NpdGlvbjEgOyAJIEVtQWxpYXNVSW50OCA8TEFT PgkgCQkJCQkJcG93ZXJTYXZlQ29uZmlndXJhdGlvbiA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJ CQkJCQlyZXNlcnZlZCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlTb2Z0d2FyZVJlc2V0 IDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCXNjcmF0Y2hQYWQwIDsgCSBFbUFsaWFzVUlu dDggPExBUz4JIAkJCQkJCXNjcmF0Y2hQYWQxIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJ CUdQSU9Db25maWd1cmF0aW9uMCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlHUElPQ29u ZmlndXJhdGlvbjEgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJR1BJT1N0YXR1c0NvbnRy b2wwIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCUdQSU9TdGF0dXNDb250cm9sMSA7IAkg RW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlQV01DbG9ja0NWUHVsc2VDb250cm9sIDsgCSBFbUFs aWFzVUludDggPExBUz4JIAkJCQkJCVBXTUNsb2NrQ1ZQdWxzZUNvbmZpZyA7IAkgRW1BbGlhc1VJ bnQ4IDxMQVM+CSAJCQkJCQlDVlB1bHNlQnVyc3RMZW5ndGggOyAJIEVtQWxpYXNVSW50OCA8TEFT PgkgCQkJCQkJUFdNT3V0RHV0eUN5Y2xlIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf cHJvZHVjdFJldmlzaW9uQ29kZSAgKHZvaWQpIHsgcmV0dXJuICAweDAwIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfZGlzcGxheUJ1ZmZlclNpemUgICh2b2lkKSB7IHJldHVybiAgMHgwMSA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbmZpZ3VyYXRpb25SZWFkYmFjayAgKHZvaWQp IHsgcmV0dXJuICAweDAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbWVtb3J5Q2xvY2tD b25maWd1cmF0aW9uICAodm9pZCkgeyByZXR1cm4gIDB4MDQgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9waXhlbENsb2NrQ29uZmlndXJhdGlvbiAgKHZvaWQpIHsgcmV0dXJuICAweDA1IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbHV0V3JpdGVCbHVlICAodm9pZCkgeyByZXR1cm4g IDB4MDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9sdXRXcml0ZUdyZWVuICAodm9pZCkg eyByZXR1cm4gIDB4MDkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9sdXRXcml0ZVJlZCAg KHZvaWQpIHsgcmV0dXJuICAweDBBIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbHV0V3Jp dGVBZGRyZXNzICAodm9pZCkgeyByZXR1cm4gIDB4MEIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9sdXRSZWFkQmx1ZSAgKHZvaWQpIHsgcmV0dXJuICAweDBDIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfbHV0UmVhZEdyZWVuICAodm9pZCkgeyByZXR1cm4gIDB4MEQgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9sdXRSZWFkUmVkICAodm9pZCkgeyByZXR1cm4gIDB4MEUgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9sdXRSZWFkQWRkcmVzcyAgKHZvaWQpIHsgcmV0dXJu ICAweDBGIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcGFuZWxUeXBlICAodm9pZCkgeyBy ZXR1cm4gIDB4MTAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9NT0RSYXRlICAodm9pZCkg eyByZXR1cm4gIDB4MTEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9ob3Jpem9udGFsVG90 YWwgICh2b2lkKSB7IHJldHVybiAgMHgxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2hv cml6b250YWxQZXJpb2QgICh2b2lkKSB7IHJldHVybiAgMHgxNCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2hvcml6b250YWxQZXJpb2RTdGFydDAgICh2b2lkKSB7IHJldHVybiAgMHgxNiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2hvcml6b250YWxQZXJpb2RTdGFydDEgICh2b2lk KSB7IHJldHVybiAgMHgxNyA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3ZlcnRpY2FsVG90 YWwwICAodm9pZCkgeyByZXR1cm4gIDB4MTggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl92 ZXJ0aWNhbFRvdGFsMSAgKHZvaWQpIHsgcmV0dXJuICAweDE5IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfdmVydGljYWxQZXJpb2QwICAodm9pZCkgeyByZXR1cm4gIDB4MUMgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl92ZXJ0aWNhbFBlcmlvZDEgICh2b2lkKSB7IHJldHVybiAgMHgx RCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3ZlcnRpY2FsUGVyaW9kU3RhcnQwICAodm9p ZCkgeyByZXR1cm4gIDB4MUUgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl92ZXJ0aWNhbFBl cmlvZFN0YXJ0MSAgKHZvaWQpIHsgcmV0dXJuICAweDFGIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfRlBMSU5FUHVsc2VXaWR0aCAgKHZvaWQpIHsgcmV0dXJuICAweDIwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfRlBMSU5FUHVsc2VTdGFydDAgICh2b2lkKSB7IHJldHVybiAgMHgy MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX0ZQTElORVB1bHNlU3RhcnQxICAodm9pZCkg eyByZXR1cm4gIDB4MjMgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9GUEZSQU1FUHVsc2VX aWR0aCAgKHZvaWQpIHsgcmV0dXJuICAweDI0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf RlBGUkFNRVB1bHNlU3RhcnQwICAodm9pZCkgeyByZXR1cm4gIDB4MjYgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9GUEZSQU1FUHVsc2VTdGFydDEgICh2b2lkKSB7IHJldHVybiAgMHgyNyA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX0RURkRfR0NQSW5kZXggICh2b2lkKSB7IHJldHVy biAgMHgyOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX0RURkRfR0NQRGF0YSAgKHZvaWQp IHsgcmV0dXJuICAweDJDIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGlzcGxheU1vZGUg ICh2b2lkKSB7IHJldHVybiAgMHg3MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NwZWNp YWxFZmZlY3RzICAodm9pZCkgeyByZXR1cm4gIDB4NzEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9tYWluU3RhcnRBZGRyZXNzMCAgKHZvaWQpIHsgcmV0dXJuICAweDc0IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfbWFpblN0YXJ0QWRkcmVzczEgICh2b2lkKSB7IHJldHVybiAgMHg3 NSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21haW5TdGFydEFkZHJlc3MyICAodm9pZCkg eyByZXR1cm4gIDB4NzYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9tYWluTGluZUFkZHJl c3NPZmZzZXQwICAodm9pZCkgeyByZXR1cm4gIDB4NzggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9tYWluTGluZUFkZHJlc3NPZmZzZXQxICAodm9pZCkgeyByZXR1cm4gIDB4NzkgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9vdmx5U3RhcnRBZGRyZXNzMCAgKHZvaWQpIHsgcmV0dXJu ICAweDdDIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfb3ZseVN0YXJ0QWRkcmVzczEgICh2 b2lkKSB7IHJldHVybiAgMHg3RCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX292bHlTdGFy dEFkZHJlc3MyICAodm9pZCkgeyByZXR1cm4gIDB4N0UgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9vdmx5TGluZUFkZHJlc3NPZmZzZXQwICAodm9pZCkgeyByZXR1cm4gIDB4ODAgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9vdmx5TGluZUFkZHJlc3NPZmZzZXQxICAodm9pZCkgeyBy ZXR1cm4gIDB4ODEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9vdmx5U3RhcnRYUG9zaXRp b24wICAodm9pZCkgeyByZXR1cm4gIDB4ODQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9v dmx5U3RhcnRYUG9zaXRpb24xICAodm9pZCkgeyByZXR1cm4gIDB4ODUgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9vdmx5U3RhcnRZUG9zaXRpb24wICAodm9pZCkgeyByZXR1cm4gIDB4ODgg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9vdmx5U3RhcnRZUG9zaXRpb24xICAodm9pZCkg eyByZXR1cm4gIDB4ODkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9vdmx5RW5kWFBvc2l0 aW9uMCAgKHZvaWQpIHsgcmV0dXJuICAweDhDIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf b3ZseUVuZFhQb3NpdGlvbjEgICh2b2lkKSB7IHJldHVybiAgMHg4RCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX292bHlFbmRZUG9zaXRpb24wICAodm9pZCkgeyByZXR1cm4gIDB4OTAgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9vdmx5RW5kWVBvc2l0aW9uMSAgKHZvaWQpIHsgcmV0 dXJuICAweDkxIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcG93ZXJTYXZlQ29uZmlndXJh dGlvbiAgKHZvaWQpIHsgcmV0dXJuICAweEEwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf cmVzZXJ2ZWQgICh2b2lkKSB7IHJldHVybiAgMHhBMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX1NvZnR3YXJlUmVzZXQgICh2b2lkKSB7IHJldHVybiAgMHhBMiA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX3NjcmF0Y2hQYWQwICAodm9pZCkgeyByZXR1cm4gIDB4QTQgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9zY3JhdGNoUGFkMSAgKHZvaWQpIHsgcmV0dXJuICAweEE1IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfR1BJT0NvbmZpZ3VyYXRpb24wICAodm9pZCkgeyBy ZXR1cm4gIDB4QTggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9HUElPQ29uZmlndXJhdGlv bjEgICh2b2lkKSB7IHJldHVybiAgMHhBOSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX0dQ SU9TdGF0dXNDb250cm9sMCAgKHZvaWQpIHsgcmV0dXJuICAweEFDIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfR1BJT1N0YXR1c0NvbnRyb2wxICAodm9pZCkgeyByZXR1cm4gIDB4QUQgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9QV01DbG9ja0NWUHVsc2VDb250cm9sICAodm9pZCkg eyByZXR1cm4gIDB4QjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9QV01DbG9ja0NWUHVs c2VDb25maWcgICh2b2lkKSB7IHJldHVybiAgMHhCMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX0NWUHVsc2VCdXJzdExlbmd0aCAgKHZvaWQpIHsgcmV0dXJuICAweEIyIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfUFdNT3V0RHV0eUN5Y2xlICAodm9pZCkgeyByZXR1cm4gIDB4QjMg OyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc1N5c0JhdHRlcnlE YXRhU3RydWN0VjEgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJf dHlwZTsJRW1BbGlhc1N5c0JhdHRlcnlEYXRhU3RydWN0VjEgIAkocHRyX3R5cGUpOwlFbUFsaWFz U3lzQmF0dGVyeURhdGFTdHJ1Y3RWMSAgCShjb25zdCBFbUFsaWFzU3lzQmF0dGVyeURhdGFTdHJ1 Y3RWMSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9 CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDUwICA7IH0JRW1B bGlhc1N5c0JhdHRlcnlEYXRhU3RydWN0VjEgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFz U3lzQmF0dGVyeURhdGFTdHJ1Y3RWMSAgPEE+Jik7CUVtQWxpYXNTeXNCYXR0ZXJ5RGF0YVN0cnVj dFYxICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c0JhdHRlcnlEYXRhU3Ry dWN0VjEgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzU3lzQmF0 dGVyeURhdGFTdHJ1Y3RWMSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAg RW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXN5c0JhdHREYXRhU3RydWN0VmVyc2lvbiA7IAkgRW1B bGlhc1VJbnQxNiA8QT4JIAkJCQkJCXN5c0JhdHRNaWxkV3JuZ1ZvbHRhZ2UgOyAJIEVtQWxpYXNV SW50MTYgPEE+CSAJCQkJCQlzeXNCYXR0U2V2ZXJlV3JuZ1ZvbHRhZ2UgOyAJIEVtQWxpYXNVSW50 MTYgPEE+CSAJCQkJCQlzeXNCYXR0U2h1dGRvd25FblZvbHRhZ2UgOyAJIEVtQWxpYXNVSW50MTYg PEE+CSAJCQkJCQlzeXNCYXR0U2h1dGRvd25EaXNWb2x0YWdlIDsgCSBFbUFsaWFzVUludDE2IDxB PgkgCQkJCQkJc3lzQmF0dE1pbklSVm9sdGFnZSA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJ CXN5c0JhdHRNaWxkV3JuZ1RpbWVvdXQgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlzeXNC YXR0U2V2ZXJlV3JuZ1RpbWVvdXQgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlzeXNCYXR0 Q3JpdFdhcm5PZmZEYXlzIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJc3lzQmF0dENyaXRX YXJuT25UaWNrcyA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXN5c0JhdHRTdGVwc1BlclZv bHQgOyAJIEVtQWxpYXNJbnQxNiA8QT4JIAkJCQkJCXN5c0JhdHRWb2x0YWdlU3RlcE9mZnNldCA7 IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXN5c0JhdHRSZXNlcnZlZDEgOyAJIEVtQWxpYXNV SW50MzIgPEE+CSAJCQkJCQlzeXNCYXR0UmVzZXJ2ZWQyIDsgCSBFbUFsaWFzVUludDE2IDxBPgkg CQkJCQkJc3lzQmF0dFZvbHRhZ2VDdXJ2ZSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3N5c0JhdHREYXRhU3RydWN0VmVyc2lvbiAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dE1pbGRXcm5nVm9sdGFnZSAgKHZvaWQpIHsgcmV0dXJu ICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dFNldmVyZVdybmdWb2x0YWdl ICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNCYXR0 U2h1dGRvd25FblZvbHRhZ2UgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3N5c0JhdHRTaHV0ZG93bkRpc1ZvbHRhZ2UgICh2b2lkKSB7IHJldHVybiAgOCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0JhdHRNaW5JUlZvbHRhZ2UgICh2b2lkKSB7 IHJldHVybiAgMTAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNCYXR0TWlsZFdybmdU aW1lb3V0ICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf c3lzQmF0dFNldmVyZVdybmdUaW1lb3V0ICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dENyaXRXYXJuT2ZmRGF5cyAgKHZvaWQpIHsgcmV0dXJu ICAyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0JhdHRDcml0V2Fybk9uVGlja3Mg ICh2b2lkKSB7IHJldHVybiAgMjIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNCYXR0 U3RlcHNQZXJWb2x0ICAodm9pZCkgeyByZXR1cm4gIDI2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2Zfc3lzQmF0dFZvbHRhZ2VTdGVwT2Zmc2V0ICAodm9pZCkgeyByZXR1cm4gIDI4IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dFJlc2VydmVkMSAgKHZvaWQpIHsgcmV0dXJu ICAzMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0JhdHRSZXNlcnZlZDIgICh2b2lk KSB7IHJldHVybiAgMzQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNCYXR0Vm9sdGFn ZUN1cnZlICAodm9pZCkgeyByZXR1cm4gIDM4IDsgfSAgCX07IAljbGFzcyBFbVByb3h5U3lzQmF0 dGVyeURhdGFTdHJ1Y3RWMSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVBy b3h5U3lzQmF0dGVyeURhdGFTdHJ1Y3RWMSAgCSh2b2lkKTsJRW1Qcm94eVN5c0JhdHRlcnlEYXRh U3RydWN0VjEgIAkoY29uc3QgRW1Qcm94eVN5c0JhdHRlcnlEYXRhU3RydWN0VjEgICYpOwlwdHJf dHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0 YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA1MCAgOyB9 CUVtUHJveHlTeXNCYXR0ZXJ5RGF0YVN0cnVjdFYxICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJv eHlTeXNCYXR0ZXJ5RGF0YVN0cnVjdFYxICAmKTsJRW1BbGlhc1N5c0JhdHRlcnlEYXRhU3RydWN0 VjEgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTeXNCYXR0ZXJ5RGF0YVN0 cnVjdFYxICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3Qgewlj aGFyCQkJX2J5dGVzWyAgICA1MCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlh c1VJbnQxNiA8TEFTPgkgCQkJCQkJc3lzQmF0dERhdGFTdHJ1Y3RWZXJzaW9uIDsgCSBFbUFsaWFz VUludDE2IDxMQVM+CSAJCQkJCQlzeXNCYXR0TWlsZFdybmdWb2x0YWdlIDsgCSBFbUFsaWFzVUlu dDE2IDxMQVM+CSAJCQkJCQlzeXNCYXR0U2V2ZXJlV3JuZ1ZvbHRhZ2UgOyAJIEVtQWxpYXNVSW50 MTYgPExBUz4JIAkJCQkJCXN5c0JhdHRTaHV0ZG93bkVuVm9sdGFnZSA7IAkgRW1BbGlhc1VJbnQx NiA8TEFTPgkgCQkJCQkJc3lzQmF0dFNodXRkb3duRGlzVm9sdGFnZSA7IAkgRW1BbGlhc1VJbnQx NiA8TEFTPgkgCQkJCQkJc3lzQmF0dE1pbklSVm9sdGFnZSA7IAkgRW1BbGlhc1VJbnQzMiA8TEFT PgkgCQkJCQkJc3lzQmF0dE1pbGRXcm5nVGltZW91dCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkg CQkJCQkJc3lzQmF0dFNldmVyZVdybmdUaW1lb3V0IDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJ CQkJCQlzeXNCYXR0Q3JpdFdhcm5PZmZEYXlzIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJ CQlzeXNCYXR0Q3JpdFdhcm5PblRpY2tzIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlz eXNCYXR0U3RlcHNQZXJWb2x0IDsgCSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCXN5c0JhdHRW b2x0YWdlU3RlcE9mZnNldCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJc3lzQmF0dFJl c2VydmVkMSA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJc3lzQmF0dFJlc2VydmVkMiA7 IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJc3lzQmF0dFZvbHRhZ2VDdXJ2ZSA7ICAJICAg ICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0JhdHREYXRhU3RydWN0VmVyc2lvbiAgKHZvaWQp IHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dE1pbGRXcm5n Vm9sdGFnZSAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf c3lzQmF0dFNldmVyZVdybmdWb2x0YWdlICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9zeXNCYXR0U2h1dGRvd25FblZvbHRhZ2UgICh2b2lkKSB7IHJldHVy biAgNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0JhdHRTaHV0ZG93bkRpc1ZvbHRh Z2UgICh2b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0Jh dHRNaW5JUlZvbHRhZ2UgICh2b2lkKSB7IHJldHVybiAgMTAgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9zeXNCYXR0TWlsZFdybmdUaW1lb3V0ICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dFNldmVyZVdybmdUaW1lb3V0ICAodm9pZCkg eyByZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dENyaXRXYXJu T2ZmRGF5cyAgKHZvaWQpIHsgcmV0dXJuICAyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3N5c0JhdHRDcml0V2Fybk9uVGlja3MgICh2b2lkKSB7IHJldHVybiAgMjIgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9zeXNCYXR0U3RlcHNQZXJWb2x0ICAodm9pZCkgeyByZXR1cm4gIDI2 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dFZvbHRhZ2VTdGVwT2Zmc2V0ICAo dm9pZCkgeyByZXR1cm4gIDI4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dFJl c2VydmVkMSAgKHZvaWQpIHsgcmV0dXJuICAzMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3N5c0JhdHRSZXNlcnZlZDIgICh2b2lkKSB7IHJldHVybiAgMzQgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9zeXNCYXR0Vm9sdGFnZUN1cnZlICAodm9pZCkgeyByZXR1cm4gIDM4IDsgfSAg CX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNTeXNCYXR0ZXJ5RGF0YVN0 cnVjdFYyICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7 CUVtQWxpYXNTeXNCYXR0ZXJ5RGF0YVN0cnVjdFYyICAJKHB0cl90eXBlKTsJRW1BbGlhc1N5c0Jh dHRlcnlEYXRhU3RydWN0VjIgIAkoY29uc3QgRW1BbGlhc1N5c0JhdHRlcnlEYXRhU3RydWN0VjIg ICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0 aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA1NCAgOyB9CUVtQWxpYXNT eXNCYXR0ZXJ5RGF0YVN0cnVjdFYyICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1N5c0Jh dHRlcnlEYXRhU3RydWN0VjIgIDxBPiYpOwlFbUFsaWFzU3lzQmF0dGVyeURhdGFTdHJ1Y3RWMiAg PEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTeXNCYXR0ZXJ5RGF0YVN0cnVjdFYy ICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1N5c0JhdHRlcnlE YXRhU3RydWN0VjIgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxp YXNVSW50MTYgPEE+CSAJCQkJCQlzeXNCYXR0RGF0YVN0cnVjdFZlcnNpb24gOyAJIEVtQWxpYXNV SW50MTYgPEE+CSAJCQkJCQlzeXNCYXR0TWlsZFdybmdWb2x0YWdlIDsgCSBFbUFsaWFzVUludDE2 IDxBPgkgCQkJCQkJc3lzQmF0dFNldmVyZVdybmdWb2x0YWdlIDsgCSBFbUFsaWFzVUludDE2IDxB PgkgCQkJCQkJc3lzQmF0dE1pbGRXcm5nUGVyY2VudCA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJ CQkJCXN5c0JhdHRTZXZlcmVXcm5nUGVyY2VudCA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJ CXN5c0JhdHRTaHV0ZG93bkVuVm9sdGFnZSA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXN5 c0JhdHRTaHV0ZG93bkRpc1ZvbHRhZ2UgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlzeXNC YXR0TWluSVJWb2x0YWdlIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJc3lzQmF0dE1pbGRX cm5nVGltZW91dCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXN5c0JhdHRTZXZlcmVXcm5n VGltZW91dCA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXN5c0JhdHRDcml0V2Fybk9mZkRh eXMgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlzeXNCYXR0Q3JpdFdhcm5PblRpY2tzIDsg CSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJc3lzQmF0dFN0ZXBzUGVyVm9sdCA7IAkgRW1BbGlh c0ludDE2IDxBPgkgCQkJCQkJc3lzQmF0dFZvbHRhZ2VTdGVwT2Zmc2V0IDsgCSBFbUFsaWFzVUlu dDMyIDxBPgkgCQkJCQkJc3lzQmF0dFJlc2VydmVkMSA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJ CQkJCXN5c0JhdHRSZXNlcnZlZDIgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlzeXNCYXR0 Vm9sdGFnZUN1cnZlIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dERhdGFT dHJ1Y3RWZXJzaW9uICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9zeXNCYXR0TWlsZFdybmdWb2x0YWdlICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9zeXNCYXR0U2V2ZXJlV3JuZ1ZvbHRhZ2UgICh2b2lkKSB7IHJl dHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0JhdHRNaWxkV3JuZ1BlcmNl bnQgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0Jh dHRTZXZlcmVXcm5nUGVyY2VudCAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2Zfc3lzQmF0dFNodXRkb3duRW5Wb2x0YWdlICAodm9pZCkgeyByZXR1cm4gIDEw IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dFNodXRkb3duRGlzVm9sdGFnZSAg KHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0JhdHRN aW5JUlZvbHRhZ2UgICh2b2lkKSB7IHJldHVybiAgMTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9zeXNCYXR0TWlsZFdybmdUaW1lb3V0ICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dFNldmVyZVdybmdUaW1lb3V0ICAodm9pZCkgeyBy ZXR1cm4gIDIwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dENyaXRXYXJuT2Zm RGF5cyAgKHZvaWQpIHsgcmV0dXJuICAyNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5 c0JhdHRDcml0V2Fybk9uVGlja3MgICh2b2lkKSB7IHJldHVybiAgMjYgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9zeXNCYXR0U3RlcHNQZXJWb2x0ICAodm9pZCkgeyByZXR1cm4gIDMwIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dFZvbHRhZ2VTdGVwT2Zmc2V0ICAodm9p ZCkgeyByZXR1cm4gIDMyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dFJlc2Vy dmVkMSAgKHZvaWQpIHsgcmV0dXJuICAzNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5 c0JhdHRSZXNlcnZlZDIgICh2b2lkKSB7IHJldHVybiAgMzggOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9zeXNCYXR0Vm9sdGFnZUN1cnZlICAodm9pZCkgeyByZXR1cm4gIDQyIDsgfSAgCX07 IAljbGFzcyBFbVByb3h5U3lzQmF0dGVyeURhdGFTdHJ1Y3RWMiAgCXsJcHVibGljOgl0eXBlZGVm IHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U3lzQmF0dGVyeURhdGFTdHJ1Y3RWMiAgCSh2b2lkKTsJ RW1Qcm94eVN5c0JhdHRlcnlEYXRhU3RydWN0VjIgIAkoY29uc3QgRW1Qcm94eVN5c0JhdHRlcnlE YXRhU3RydWN0VjIgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4g KHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJ CXsgcmV0dXJuICAgICA1NCAgOyB9CUVtUHJveHlTeXNCYXR0ZXJ5RGF0YVN0cnVjdFYyICAmCQlv cGVyYXRvcj0gKGNvbnN0IEVtUHJveHlTeXNCYXR0ZXJ5RGF0YVN0cnVjdFYyICAmKTsJRW1BbGlh c1N5c0JhdHRlcnlEYXRhU3RydWN0VjIgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVt QWxpYXNTeXNCYXR0ZXJ5RGF0YVN0cnVjdFYyICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0 Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA1NCAgXTsJfSBmTG9jYWxEYXRh OwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJc3lzQmF0dERhdGFTdHJ1 Y3RWZXJzaW9uIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlzeXNCYXR0TWlsZFdybmdW b2x0YWdlIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlzeXNCYXR0U2V2ZXJlV3JuZ1Zv bHRhZ2UgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXN5c0JhdHRNaWxkV3JuZ1BlcmNl bnQgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXN5c0JhdHRTZXZlcmVXcm5nUGVyY2Vu dCA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJc3lzQmF0dFNodXRkb3duRW5Wb2x0YWdl IDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlzeXNCYXR0U2h1dGRvd25EaXNWb2x0YWdl IDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlzeXNCYXR0TWluSVJWb2x0YWdlIDsgCSBF bUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlzeXNCYXR0TWlsZFdybmdUaW1lb3V0IDsgCSBFbUFs aWFzVUludDMyIDxMQVM+CSAJCQkJCQlzeXNCYXR0U2V2ZXJlV3JuZ1RpbWVvdXQgOyAJIEVtQWxp YXNVSW50MTYgPExBUz4JIAkJCQkJCXN5c0JhdHRDcml0V2Fybk9mZkRheXMgOyAJIEVtQWxpYXNV SW50MzIgPExBUz4JIAkJCQkJCXN5c0JhdHRDcml0V2Fybk9uVGlja3MgOyAJIEVtQWxpYXNVSW50 MTYgPExBUz4JIAkJCQkJCXN5c0JhdHRTdGVwc1BlclZvbHQgOyAJIEVtQWxpYXNJbnQxNiA8TEFT PgkgCQkJCQkJc3lzQmF0dFZvbHRhZ2VTdGVwT2Zmc2V0IDsgCSBFbUFsaWFzVUludDMyIDxMQVM+ CSAJCQkJCQlzeXNCYXR0UmVzZXJ2ZWQxIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlz eXNCYXR0UmVzZXJ2ZWQyIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlzeXNCYXR0Vm9s dGFnZUN1cnZlIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dERhdGFTdHJ1 Y3RWZXJzaW9uICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9zeXNCYXR0TWlsZFdybmdWb2x0YWdlICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9zeXNCYXR0U2V2ZXJlV3JuZ1ZvbHRhZ2UgICh2b2lkKSB7IHJldHVy biAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0JhdHRNaWxkV3JuZ1BlcmNlbnQg ICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0JhdHRT ZXZlcmVXcm5nUGVyY2VudCAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2Zfc3lzQmF0dFNodXRkb3duRW5Wb2x0YWdlICAodm9pZCkgeyByZXR1cm4gIDEwIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dFNodXRkb3duRGlzVm9sdGFnZSAgKHZv aWQpIHsgcmV0dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0JhdHRNaW5J UlZvbHRhZ2UgICh2b2lkKSB7IHJldHVybiAgMTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9zeXNCYXR0TWlsZFdybmdUaW1lb3V0ICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dFNldmVyZVdybmdUaW1lb3V0ICAodm9pZCkgeyByZXR1 cm4gIDIwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dENyaXRXYXJuT2ZmRGF5 cyAgKHZvaWQpIHsgcmV0dXJuICAyNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0Jh dHRDcml0V2Fybk9uVGlja3MgICh2b2lkKSB7IHJldHVybiAgMjYgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9zeXNCYXR0U3RlcHNQZXJWb2x0ICAodm9pZCkgeyByZXR1cm4gIDMwIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dFZvbHRhZ2VTdGVwT2Zmc2V0ICAodm9pZCkg eyByZXR1cm4gIDMyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dFJlc2VydmVk MSAgKHZvaWQpIHsgcmV0dXJuICAzNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0Jh dHRSZXNlcnZlZDIgICh2b2lkKSB7IHJldHVybiAgMzggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9zeXNCYXR0Vm9sdGFnZUN1cnZlICAodm9pZCkgeyByZXR1cm4gIDQyIDsgfSAgCX07ICAg CSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNTeXNCYXR0ZXJ5RGF0YVN0cnVjdFYz ICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxp YXNTeXNCYXR0ZXJ5RGF0YVN0cnVjdFYzICAJKHB0cl90eXBlKTsJRW1BbGlhc1N5c0JhdHRlcnlE YXRhU3RydWN0VjMgIAkoY29uc3QgRW1BbGlhc1N5c0JhdHRlcnlEYXRhU3RydWN0VjMgICYpOwlw dHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6 ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAzOCAgOyB9CUVtQWxpYXNTeXNCYXR0 ZXJ5RGF0YVN0cnVjdFYzICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1N5c0JhdHRlcnlE YXRhU3RydWN0VjMgIDxBPiYpOwlFbUFsaWFzU3lzQmF0dGVyeURhdGFTdHJ1Y3RWMyAgPEE+CW9w ZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTeXNCYXR0ZXJ5RGF0YVN0cnVjdFYzICA8QT4J b3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1N5c0JhdHRlcnlEYXRhU3Ry dWN0VjMgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50 MTYgPEE+CSAJCQkJCQlzeXNCYXR0RGF0YVN0cnVjdFZlcnNpb24gOyAJIEVtQWxpYXNVSW50MTYg PEE+CSAJCQkJCQlzeXNCYXR0U2h1dGRvd25FblZvbHRhZ2UgOyAJIEVtQWxpYXNVSW50MTYgPEE+ CSAJCQkJCQlzeXNCYXR0U2h1dGRvd25EaXNWb2x0YWdlIDsgCSBFbUFsaWFzVUludDE2IDxBPgkg CQkJCQkJc3lzQmF0dFRhYmxlRmxhZ3MgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlzeXNC YXR0Q3JpdFdhcm5PZmZEYXlzIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJc3lzQmF0dENy aXRXYXJuT25UaWNrcyA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXN5c0JhdHRTdGVwc1Bl clZvbHQgOyAJIEVtQWxpYXNJbnQxNiA8QT4JIAkJCQkJCXN5c0JhdHRWb2x0YWdlU3RlcE9mZnNl dCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXN5c0JhdHRSZXNlcnZlZDEgOyAJIEVtQWxp YXNVSW50MzIgPEE+CSAJCQkJCQlzeXNCYXR0UmVzZXJ2ZWQyIDsgCSBFbUFsaWFzVUludDE2IDxB PgkgCQkJCQkJc3lzQmF0dFZvbHRhZ2VDdXJ2ZSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3N5c0JhdHREYXRhU3RydWN0VmVyc2lvbiAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dFNodXRkb3duRW5Wb2x0YWdlICAodm9pZCkgeyBy ZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNCYXR0U2h1dGRvd25EaXNW b2x0YWdlICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9z eXNCYXR0VGFibGVGbGFncyAgKHZvaWQpIHsgcmV0dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2Zfc3lzQmF0dENyaXRXYXJuT2ZmRGF5cyAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dENyaXRXYXJuT25UaWNrcyAgKHZvaWQpIHsg cmV0dXJuICAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0JhdHRTdGVwc1BlclZv bHQgICh2b2lkKSB7IHJldHVybiAgMTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNC YXR0Vm9sdGFnZVN0ZXBPZmZzZXQgICh2b2lkKSB7IHJldHVybiAgMTYgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9zeXNCYXR0UmVzZXJ2ZWQxICAodm9pZCkgeyByZXR1cm4gIDE4IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dFJlc2VydmVkMiAgKHZvaWQpIHsgcmV0dXJu ICAyMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0JhdHRWb2x0YWdlQ3VydmUgICh2 b2lkKSB7IHJldHVybiAgMjYgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlTeXNCYXR0ZXJ5RGF0YVN0 cnVjdFYzICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlTeXNCYXR0 ZXJ5RGF0YVN0cnVjdFYzICAJKHZvaWQpOwlFbVByb3h5U3lzQmF0dGVyeURhdGFTdHJ1Y3RWMyAg CShjb25zdCBFbVByb3h5U3lzQmF0dGVyeURhdGFTdHJ1Y3RWMyAgJik7CXB0cl90eXBlCQkJR2V0 UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRp YyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDM4ICA7IH0JRW1Qcm94eVN5 c0JhdHRlcnlEYXRhU3RydWN0VjMgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eVN5c0JhdHRl cnlEYXRhU3RydWN0VjMgICYpOwlFbUFsaWFzU3lzQmF0dGVyeURhdGFTdHJ1Y3RWMyAgPExBUz4J b3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c0JhdHRlcnlEYXRhU3RydWN0VjMgIDxM QVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0 ZXNbICAgIDM4ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxM QVM+CSAJCQkJCQlzeXNCYXR0RGF0YVN0cnVjdFZlcnNpb24gOyAJIEVtQWxpYXNVSW50MTYgPExB Uz4JIAkJCQkJCXN5c0JhdHRTaHV0ZG93bkVuVm9sdGFnZSA7IAkgRW1BbGlhc1VJbnQxNiA8TEFT PgkgCQkJCQkJc3lzQmF0dFNodXRkb3duRGlzVm9sdGFnZSA7IAkgRW1BbGlhc1VJbnQxNiA8TEFT PgkgCQkJCQkJc3lzQmF0dFRhYmxlRmxhZ3MgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJ CXN5c0JhdHRDcml0V2Fybk9mZkRheXMgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXN5 c0JhdHRDcml0V2Fybk9uVGlja3MgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXN5c0Jh dHRTdGVwc1BlclZvbHQgOyAJIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJc3lzQmF0dFZvbHRh Z2VTdGVwT2Zmc2V0IDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlzeXNCYXR0UmVzZXJ2 ZWQxIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlzeXNCYXR0UmVzZXJ2ZWQyIDsgCSBF bUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlzeXNCYXR0Vm9sdGFnZUN1cnZlIDsgIAkgICAgIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dERhdGFTdHJ1Y3RWZXJzaW9uICAodm9pZCkgeyBy ZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNCYXR0U2h1dGRvd25FblZv bHRhZ2UgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5 c0JhdHRTaHV0ZG93bkRpc1ZvbHRhZ2UgICh2b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3N5c0JhdHRUYWJsZUZsYWdzICAodm9pZCkgeyByZXR1cm4gIDYgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNCYXR0Q3JpdFdhcm5PZmZEYXlzICAodm9pZCkg eyByZXR1cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNCYXR0Q3JpdFdhcm5P blRpY2tzICAodm9pZCkgeyByZXR1cm4gIDEwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf c3lzQmF0dFN0ZXBzUGVyVm9sdCAgKHZvaWQpIHsgcmV0dXJuICAxNCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX3N5c0JhdHRWb2x0YWdlU3RlcE9mZnNldCAgKHZvaWQpIHsgcmV0dXJuICAx NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0JhdHRSZXNlcnZlZDEgICh2b2lkKSB7 IHJldHVybiAgMTggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNCYXR0UmVzZXJ2ZWQy ICAodm9pZCkgeyByZXR1cm4gIDIyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0 dFZvbHRhZ2VDdXJ2ZSAgKHZvaWQpIHsgcmV0dXJuICAyNiA7IH0gIAl9OyAgIAkgIHRlbXBsYXRl IDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzU3lzTlZQYXJhbXNUeXBlICAJewlwdWJsaWM6CXR5cGVk ZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNTeXNOVlBhcmFtc1R5cGUg IAkocHRyX3R5cGUpOwlFbUFsaWFzU3lzTlZQYXJhbXNUeXBlICAJKGNvbnN0IEVtQWxpYXNTeXNO VlBhcmFtc1R5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4g ZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAzMCAg OyB9CUVtQWxpYXNTeXNOVlBhcmFtc1R5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFz U3lzTlZQYXJhbXNUeXBlICA8QT4mKTsJRW1BbGlhc1N5c05WUGFyYW1zVHlwZSAgPEE+CW9wZXJh dG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTeXNOVlBhcmFtc1R5cGUgIDxBPglvcGVyYXRvcltd IChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzU3lzTlZQYXJhbXNUeXBlICAJKHZvaWQpOwlw dHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJcnRj SG91cnMgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlydGNIb3VyTWluU2VjQ29weSA7IAkg RW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJc3dyTENEQ29udHJhc3RWYWx1ZSA7IAkgRW1BbGlhc1VJ bnQ4IDxBPgkgCQkJCQkJc3dyTENEQnJpZ2h0bmVzc1ZhbHVlIDsgCSBFbUFsaWFzZW11cHRyIDxB PgkgCQkJCQkJc3BsYXNoU2NyZWVuUHRyIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJaGFy ZFJlc2V0U2NyZWVuUHRyIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJbG9jYWxlTGFuZ3Vh Z2UgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlsb2NhbGVDb3VudHJ5IDsgCSBFbUFsaWFz VUludDMyIDxBPgkgCQkJCQkJc3lzTlZPRU1TdG9yYWdlMSA7IAkgRW1BbGlhc1VJbnQzMiA8QT4J IAkJCQkJCXN5c05WT0VNU3RvcmFnZTIgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9y dGNIb3VycyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf cnRjSG91ck1pblNlY0NvcHkgICh2b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3N3ckxDRENvbnRyYXN0VmFsdWUgICh2b2lkKSB7IHJldHVybiAgOCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX3N3ckxDREJyaWdodG5lc3NWYWx1ZSAgKHZvaWQpIHsgcmV0 dXJuICA5IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3BsYXNoU2NyZWVuUHRyICAodm9p ZCkgeyByZXR1cm4gIDEwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaGFyZFJlc2V0U2Ny ZWVuUHRyICAodm9pZCkgeyByZXR1cm4gIDE0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf bG9jYWxlTGFuZ3VhZ2UgICh2b2lkKSB7IHJldHVybiAgMTggOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9sb2NhbGVDb3VudHJ5ICAodm9pZCkgeyByZXR1cm4gIDIwIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2Zfc3lzTlZPRU1TdG9yYWdlMSAgKHZvaWQpIHsgcmV0dXJuICAyMiA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c05WT0VNU3RvcmFnZTIgICh2b2lkKSB7IHJldHVy biAgMjYgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlTeXNOVlBhcmFtc1R5cGUgIAl7CXB1YmxpYzoJ dHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVN5c05WUGFyYW1zVHlwZSAgCSh2b2lkKTsJ RW1Qcm94eVN5c05WUGFyYW1zVHlwZSAgCShjb25zdCBFbVByb3h5U3lzTlZQYXJhbXNUeXBlICAm KTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZM b2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAg MzAgIDsgfQlFbVByb3h5U3lzTlZQYXJhbXNUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJv eHlTeXNOVlBhcmFtc1R5cGUgICYpOwlFbUFsaWFzU3lzTlZQYXJhbXNUeXBlICA8TEFTPglvcGVy YXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU3lzTlZQYXJhbXNUeXBlICA8TEFTPglvcGVyYXRv cltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAzMCAg XTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJ cnRjSG91cnMgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXJ0Y0hvdXJNaW5TZWNDb3B5 IDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCXN3ckxDRENvbnRyYXN0VmFsdWUgOyAJIEVt QWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJc3dyTENEQnJpZ2h0bmVzc1ZhbHVlIDsgCSBFbUFsaWFz ZW11cHRyIDxMQVM+CSAJCQkJCQlzcGxhc2hTY3JlZW5QdHIgOyAJIEVtQWxpYXNlbXVwdHIgPExB Uz4JIAkJCQkJCWhhcmRSZXNldFNjcmVlblB0ciA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJ CQkJbG9jYWxlTGFuZ3VhZ2UgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWxvY2FsZUNv dW50cnkgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXN5c05WT0VNU3RvcmFnZTEgOyAJ IEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXN5c05WT0VNU3RvcmFnZTIgOyAgCSAgICAgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9ydGNIb3VycyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcnRjSG91ck1pblNlY0NvcHkgICh2b2lkKSB7IHJldHVybiAg NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N3ckxDRENvbnRyYXN0VmFsdWUgICh2b2lk KSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N3ckxDREJyaWdodG5l c3NWYWx1ZSAgKHZvaWQpIHsgcmV0dXJuICA5IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf c3BsYXNoU2NyZWVuUHRyICAodm9pZCkgeyByZXR1cm4gIDEwIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfaGFyZFJlc2V0U2NyZWVuUHRyICAodm9pZCkgeyByZXR1cm4gIDE0IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbG9jYWxlTGFuZ3VhZ2UgICh2b2lkKSB7IHJldHVybiAgMTgg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9sb2NhbGVDb3VudHJ5ICAodm9pZCkgeyByZXR1 cm4gIDIwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzTlZPRU1TdG9yYWdlMSAgKHZv aWQpIHsgcmV0dXJuICAyMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c05WT0VNU3Rv cmFnZTIgICh2b2lkKSB7IHJldHVybiAgMjYgOyB9ICAJfTsgICAgCiAgdGVtcGxhdGUgPGNsYXNz IEE+CWNsYXNzIEVtQWxpYXNDbGlwYm9hcmRJdGVtICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5h bWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNDbGlwYm9hcmRJdGVtICAJKHB0cl90eXBl KTsJRW1BbGlhc0NsaXBib2FyZEl0ZW0gIAkoY29uc3QgRW1BbGlhc0NsaXBib2FyZEl0ZW0gICYp OwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMg c2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA2ICA7IH0JRW1BbGlhc0NsaXBi b2FyZEl0ZW0gIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzQ2xpcGJvYXJkSXRlbSAgPEE+ Jik7CUVtQWxpYXNDbGlwYm9hcmRJdGVtICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1B bGlhc0NsaXBib2FyZEl0ZW0gIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglF bUFsaWFzQ2xpcGJvYXJkSXRlbSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAg ICAgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWl0ZW0gOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJ CQkJCQlsZW5ndGggOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pdGVtICAodm9pZCkg eyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9sZW5ndGggICh2b2lkKSB7 IHJldHVybiAgNCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eUNsaXBib2FyZEl0ZW0gIAl7CXB1Ymxp YzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUNsaXBib2FyZEl0ZW0gIAkodm9pZCk7 CUVtUHJveHlDbGlwYm9hcmRJdGVtICAJKGNvbnN0IEVtUHJveHlDbGlwYm9hcmRJdGVtICAmKTsJ cHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2Nh bERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNiAg OyB9CUVtUHJveHlDbGlwYm9hcmRJdGVtICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlDbGlw Ym9hcmRJdGVtICAmKTsJRW1BbGlhc0NsaXBib2FyZEl0ZW0gIDxMQVM+CW9wZXJhdG9yW10gKGlu dCk7CWNvbnN0IEVtQWxpYXNDbGlwYm9hcmRJdGVtICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNv bnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA2ICBdOwl9IGZMb2NhbERh dGE7CXB1YmxpYzoJICAgICBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlpdGVtIDsgCSBFbUFs aWFzVUludDE2IDxMQVM+CSAJCQkJCQlsZW5ndGggOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9pdGVtICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9sZW5ndGggICh2b2lkKSB7IHJldHVybiAgNCA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFz cyBBPgljbGFzcyBFbUFsaWFzRmllbGRVbmRvVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVu YW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzRmllbGRVbmRvVHlwZSAgCShwdHJfdHlw ZSk7CUVtQWxpYXNGaWVsZFVuZG9UeXBlICAJKGNvbnN0IEVtQWxpYXNGaWVsZFVuZG9UeXBlICAm KTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGlj IHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTIgIDsgfQlFbUFsaWFzRmll bGRVbmRvVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNGaWVsZFVuZG9UeXBlICA8 QT4mKTsJRW1BbGlhc0ZpZWxkVW5kb1R5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBF bUFsaWFzRmllbGRVbmRvVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6 CUVtQWxpYXNGaWVsZFVuZG9UeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJ ICAgICBFbUFsaWFzVW5kb01vZGUgPEE+CSAJCQkJCW1vZGUgOyAJIEVtQWxpYXNVSW50OCA8QT4J IAkJCQkJCXJlc2VydmVkIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJc3RhcnQgOyAJIEVt QWxpYXNVSW50MTYgPEE+CSAJCQkJCQllbmQgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQli dWZmZXJMZW4gOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlidWZmZXIgOyAgCSAgICAgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9tb2RlICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9yZXNlcnZlZCAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2Zfc3RhcnQgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2VuZCAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfYnVmZmVyTGVuICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9idWZmZXIgICh2b2lkKSB7IHJldHVybiAgOCA7IH0gIAl9OyAJY2xhc3Mg RW1Qcm94eUZpZWxkVW5kb1R5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJ RW1Qcm94eUZpZWxkVW5kb1R5cGUgIAkodm9pZCk7CUVtUHJveHlGaWVsZFVuZG9UeXBlICAJKGNv bnN0IEVtUHJveHlGaWVsZFVuZG9UeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNv bnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0 U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTIgIDsgfQlFbVByb3h5RmllbGRVbmRvVHlwZSAg JgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5RmllbGRVbmRvVHlwZSAgJik7CUVtQWxpYXNGaWVs ZFVuZG9UeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzRmllbGRVbmRv VHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hh cgkJCV9ieXRlc1sgICAgMTIgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNV bmRvTW9kZSA8TEFTPgkgCQkJCQltb2RlIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCXJl c2VydmVkIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlzdGFydCA7IAkgRW1BbGlhc1VJ bnQxNiA8TEFTPgkgCQkJCQkJZW5kIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlidWZm ZXJMZW4gOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWJ1ZmZlciA7ICAJICAgICBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX21vZGUgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3Jlc2VydmVkICAodm9pZCkgeyByZXR1cm4gIDEgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9zdGFydCAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfZW5kICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9idWZmZXJMZW4gICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2J1ZmZlciAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAgCX07ICAgCSAgdGVt cGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjEgIAl7CXB1Ymxp YzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc0dyYXBoaWNT dGF0ZVR5cGVWMSAgCShwdHJfdHlwZSk7CUVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjEgIAkoY29u c3QgRW1BbGlhc0dyYXBoaWNTdGF0ZVR5cGVWMSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lk KSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJ eyByZXR1cm4gICAgIDIwICA7IH0JRW1BbGlhc0dyYXBoaWNTdGF0ZVR5cGVWMSAgPEE+JglvcGVy YXRvcj0gKGNvbnN0IEVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjEgIDxBPiYpOwlFbUFsaWFzR3Jh cGhpY1N0YXRlVHlwZVYxICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0dyYXBo aWNTdGF0ZVR5cGVWMSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxp YXNHcmFwaGljU3RhdGVUeXBlVjEgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkg ICAgIEVtQWxpYXNTY3JPcGVyYXRpb24gPEE+CSAJCQkJZ3JhZk1vZGUgOyAJIEVtQWxpYXNCb29s ZWFuIDxBPgkgCQkJCQlwYXR0ZXJuTW9kZSA7IAkgRW1BbGlhc1BhdHRlcm5UeXBlIDxBPgkgCQkJ CXBhdHRlcm4gOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQljdXN0b21QdG4gOyAJIEVtQWxp YXNGb250SUQgPEE+CSAJCQkJCQlmb250SWQgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlm b250IDsgCSBFbUFsaWFzVW5kZXJsaW5lTW9kZVR5cGUgPEE+CSAJCQl1bmRlcmxpbmVNb2RlIDsg IAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ3JhZk1vZGUgICh2b2lkKSB7IHJldHVybiAg MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BhdHRlcm5Nb2RlICAodm9pZCkgeyByZXR1 cm4gIDEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wYXR0ZXJuICAodm9pZCkgeyByZXR1 cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jdXN0b21QdG4gICh2b2lkKSB7IHJl dHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZvbnRJZCAgKHZvaWQpIHsgcmV0 dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZvbnQgICh2b2lkKSB7IHJldHVy biAgMTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91bmRlcmxpbmVNb2RlICAodm9pZCkg eyByZXR1cm4gIDE4IDsgfSAgCX07IAljbGFzcyBFbVByb3h5R3JhcGhpY1N0YXRlVHlwZVYxICAJ ewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlHcmFwaGljU3RhdGVUeXBl VjEgIAkodm9pZCk7CUVtUHJveHlHcmFwaGljU3RhdGVUeXBlVjEgIAkoY29uc3QgRW1Qcm94eUdy YXBoaWNTdGF0ZVR5cGVWMSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJl dHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZv aWQpCQkJeyByZXR1cm4gICAgIDIwICA7IH0JRW1Qcm94eUdyYXBoaWNTdGF0ZVR5cGVWMSAgJgkJ b3BlcmF0b3I9IChjb25zdCBFbVByb3h5R3JhcGhpY1N0YXRlVHlwZVYxICAmKTsJRW1BbGlhc0dy YXBoaWNTdGF0ZVR5cGVWMSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0dy YXBoaWNTdGF0ZVR5cGVWMSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJ c3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMjAgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkg ICAgIEVtQWxpYXNTY3JPcGVyYXRpb24gPExBUz4JIAkJCQlncmFmTW9kZSA7IAkgRW1BbGlhc0Jv b2xlYW4gPExBUz4JIAkJCQkJcGF0dGVybk1vZGUgOyAJIEVtQWxpYXNQYXR0ZXJuVHlwZSA8TEFT PgkgCQkJCXBhdHRlcm4gOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWN1c3RvbVB0biA7 IAkgRW1BbGlhc0ZvbnRJRCA8TEFTPgkgCQkJCQkJZm9udElkIDsgCSBFbUFsaWFzZW11cHRyIDxM QVM+CSAJCQkJCQlmb250IDsgCSBFbUFsaWFzVW5kZXJsaW5lTW9kZVR5cGUgPExBUz4JIAkJCXVu ZGVybGluZU1vZGUgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9ncmFmTW9kZSAgKHZv aWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcGF0dGVybk1vZGUg ICh2b2lkKSB7IHJldHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BhdHRlcm4g ICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2N1c3RvbVB0 biAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZm9udElk ICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZm9udCAg KHZvaWQpIHsgcmV0dXJuICAxNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VuZGVybGlu ZU1vZGUgICh2b2lkKSB7IHJldHVybiAgMTggOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3Mg QT4JY2xhc3MgRW1BbGlhc0dyYXBoaWNTdGF0ZVR5cGVWMiAgCXsJcHVibGljOgl0eXBlZGVmIHR5 cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzR3JhcGhpY1N0YXRlVHlwZVYyICAJ KHB0cl90eXBlKTsJRW1BbGlhc0dyYXBoaWNTdGF0ZVR5cGVWMiAgCShjb25zdCBFbUFsaWFzR3Jh cGhpY1N0YXRlVHlwZVYyICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0 dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAg MjggIDsgfQlFbUFsaWFzR3JhcGhpY1N0YXRlVHlwZVYyICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg RW1BbGlhc0dyYXBoaWNTdGF0ZVR5cGVWMiAgPEE+Jik7CUVtQWxpYXNHcmFwaGljU3RhdGVUeXBl VjIgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzR3JhcGhpY1N0YXRlVHlwZVYy ICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc0dyYXBoaWNTdGF0 ZVR5cGVWMiAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1Nj ck9wZXJhdGlvbiA8QT4JIAkJCQlncmFmTW9kZSA7IAkgRW1BbGlhc0Jvb2xlYW4gPEE+CSAJCQkJ CXBhdHRlcm5Nb2RlIDsgCSBFbUFsaWFzUGF0dGVyblR5cGUgPEE+CSAJCQkJcGF0dGVybiA7IAkg RW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWN1c3RvbVB0biA7IAkgRW1BbGlhc0ZvbnRJRCA8QT4J IAkJCQkJCWZvbnRJZCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWZvbnQgOyAJIEVtQWxp YXNVbmRlcmxpbmVNb2RlVHlwZSA8QT4JIAkJCXVuZGVybGluZU1vZGUgOyAJIEVtQWxpYXNSR0JD b2xvclR5cGUgPEE+CSAJCQkJZm9yZUNvbG9yIDsgCSBFbUFsaWFzUkdCQ29sb3JUeXBlIDxBPgkg CQkJCWJhY2tDb2xvciA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dyYWZNb2RlICAo dm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wYXR0ZXJuTW9k ZSAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcGF0dGVy biAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY3VzdG9t UHRuICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mb250 SWQgICh2b2lkKSB7IHJldHVybiAgMTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mb250 ICAodm9pZCkgeyByZXR1cm4gIDE0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdW5kZXJs aW5lTW9kZSAgKHZvaWQpIHsgcmV0dXJuICAxOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2ZvcmVDb2xvciAgKHZvaWQpIHsgcmV0dXJuICAyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2JhY2tDb2xvciAgKHZvaWQpIHsgcmV0dXJuICAyNCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94 eUdyYXBoaWNTdGF0ZVR5cGVWMiAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlF bVByb3h5R3JhcGhpY1N0YXRlVHlwZVYyICAJKHZvaWQpOwlFbVByb3h5R3JhcGhpY1N0YXRlVHlw ZVYyICAJKGNvbnN0IEVtUHJveHlHcmFwaGljU3RhdGVUeXBlVjIgICYpOwlwdHJfdHlwZQkJCUdl dFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0 aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyOCAgOyB9CUVtUHJveHlH cmFwaGljU3RhdGVUeXBlVjIgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eUdyYXBoaWNTdGF0 ZVR5cGVWMiAgJik7CUVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjIgIDxMQVM+CW9wZXJhdG9yW10g KGludCk7CWNvbnN0IEVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjIgIDxMQVM+CW9wZXJhdG9yW10g KGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDI4ICBdOwl9 IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzU2NyT3BlcmF0aW9uIDxMQVM+CSAJCQkJ Z3JhZk1vZGUgOyAJIEVtQWxpYXNCb29sZWFuIDxMQVM+CSAJCQkJCXBhdHRlcm5Nb2RlIDsgCSBF bUFsaWFzUGF0dGVyblR5cGUgPExBUz4JIAkJCQlwYXR0ZXJuIDsgCSBFbUFsaWFzVUludDE2IDxM QVM+CSAJCQkJCQljdXN0b21QdG4gOyAJIEVtQWxpYXNGb250SUQgPExBUz4JIAkJCQkJCWZvbnRJ ZCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZm9udCA7IAkgRW1BbGlhc1VuZGVybGlu ZU1vZGVUeXBlIDxMQVM+CSAJCQl1bmRlcmxpbmVNb2RlIDsgCSBFbUFsaWFzUkdCQ29sb3JUeXBl IDxMQVM+CSAJCQkJZm9yZUNvbG9yIDsgCSBFbUFsaWFzUkdCQ29sb3JUeXBlIDxMQVM+CSAJCQkJ YmFja0NvbG9yIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ3JhZk1vZGUgICh2b2lk KSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BhdHRlcm5Nb2RlICAo dm9pZCkgeyByZXR1cm4gIDEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wYXR0ZXJuICAo dm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jdXN0b21QdG4g ICh2b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZvbnRJZCAg KHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZvbnQgICh2 b2lkKSB7IHJldHVybiAgMTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91bmRlcmxpbmVN b2RlICAodm9pZCkgeyByZXR1cm4gIDE4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZm9y ZUNvbG9yICAodm9pZCkgeyByZXR1cm4gIDIwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf YmFja0NvbG9yICAodm9pZCkgeyByZXR1cm4gIDI0IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNs YXNzIEE+CWNsYXNzIEVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjMgIAl7CXB1YmxpYzoJdHlwZWRl ZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc0dyYXBoaWNTdGF0ZVR5cGVW MyAgCShwdHJfdHlwZSk7CUVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjMgIAkoY29uc3QgRW1BbGlh c0dyYXBoaWNTdGF0ZVR5cGVWMyAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7 IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4g ICAgIDEyICA7IH0JRW1BbGlhc0dyYXBoaWNTdGF0ZVR5cGVWMyAgPEE+JglvcGVyYXRvcj0gKGNv bnN0IEVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjMgIDxBPiYpOwlFbUFsaWFzR3JhcGhpY1N0YXRl VHlwZVYzICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0dyYXBoaWNTdGF0ZVR5 cGVWMyAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNHcmFwaGlj U3RhdGVUeXBlVjMgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxp YXNlbXVwdHIgPEE+CSAJCQkJCQlkcmF3U3RhdGVQIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJ CQkJZHJhd1N0YXRlU3RhY2tQIDsgCSBFbUFsaWFzSW50MTYgPEE+CSAJCQkJCQlkcmF3U3RhdGVJ bmRleCA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXNjcmVlbkxvY2tDb3VudCA7ICAJICAg ICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RyYXdTdGF0ZVAgICh2b2lkKSB7IHJldHVybiAgMCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RyYXdTdGF0ZVN0YWNrUCAgKHZvaWQpIHsgcmV0 dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZHJhd1N0YXRlSW5kZXggICh2b2lk KSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NjcmVlbkxvY2tDb3Vu dCAgKHZvaWQpIHsgcmV0dXJuICAxMCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eUdyYXBoaWNTdGF0 ZVR5cGVWMyAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5R3JhcGhp Y1N0YXRlVHlwZVYzICAJKHZvaWQpOwlFbVByb3h5R3JhcGhpY1N0YXRlVHlwZVYzICAJKGNvbnN0 IEVtUHJveHlHcmFwaGljU3RhdGVUeXBlVjMgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkg Y29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlH ZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAxMiAgOyB9CUVtUHJveHlHcmFwaGljU3RhdGVU eXBlVjMgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eUdyYXBoaWNTdGF0ZVR5cGVWMyAgJik7 CUVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjMgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0 IEVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjMgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7 CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDEyICBdOwl9IGZMb2NhbERhdGE7 CXB1YmxpYzoJICAgICBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlkcmF3U3RhdGVQIDsgCSBF bUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlkcmF3U3RhdGVTdGFja1AgOyAJIEVtQWxpYXNJbnQx NiA8TEFTPgkgCQkJCQkJZHJhd1N0YXRlSW5kZXggOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJ CQkJCXNjcmVlbkxvY2tDb3VudCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RyYXdT dGF0ZVAgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Ry YXdTdGF0ZVN0YWNrUCAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfZHJhd1N0YXRlSW5kZXggICh2b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX3NjcmVlbkxvY2tDb3VudCAgKHZvaWQpIHsgcmV0dXJuICAxMCA7IH0gIAl9 OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzVUlDb2xvclN0YXRlVHlwZSAg CXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFz VUlDb2xvclN0YXRlVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNVSUNvbG9yU3RhdGVUeXBlICAJ KGNvbnN0IEVtQWxpYXNVSUNvbG9yU3RhdGVUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZv aWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJ CQl7IHJldHVybiAgICAgMTIgIDsgfQlFbUFsaWFzVUlDb2xvclN0YXRlVHlwZSAgPEE+JglvcGVy YXRvcj0gKGNvbnN0IEVtQWxpYXNVSUNvbG9yU3RhdGVUeXBlICA8QT4mKTsJRW1BbGlhc1VJQ29s b3JTdGF0ZVR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzVUlDb2xvclN0 YXRlVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNVSUNv bG9yU3RhdGVUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFs aWFzZW11cHRyIDxBPgkgCQkJCQkJY29sb3JUYWJsZVAgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJ CQkJCQljb2xvclRhYmxlU3RhY2tQIDsgCSBFbUFsaWFzSW50MTYgPEE+CSAJCQkJCQljb2xvclRh YmxlU3RhY2tJbmRleCA7IAkgRW1BbGlhc0Jvb2xlYW4gPEE+CSAJCQkJCXRhYmxlc0RpcnR5IDsg CSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlyZXNlcnZlZCA7ICAJICAgICBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2NvbG9yVGFibGVQICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9jb2xvclRhYmxlU3RhY2tQICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb2xvclRhYmxlU3RhY2tJbmRleCAgKHZvaWQpIHsgcmV0 dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdGFibGVzRGlydHkgICh2b2lkKSB7 IHJldHVybiAgMTAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZXNlcnZlZCAgKHZvaWQp IHsgcmV0dXJuICAxMSA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVVJQ29sb3JTdGF0ZVR5cGUgIAl7 CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVVJQ29sb3JTdGF0ZVR5cGUg IAkodm9pZCk7CUVtUHJveHlVSUNvbG9yU3RhdGVUeXBlICAJKGNvbnN0IEVtUHJveHlVSUNvbG9y U3RhdGVUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChw dHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7 IHJldHVybiAgICAgMTIgIDsgfQlFbVByb3h5VUlDb2xvclN0YXRlVHlwZSAgJgkJb3BlcmF0b3I9 IChjb25zdCBFbVByb3h5VUlDb2xvclN0YXRlVHlwZSAgJik7CUVtQWxpYXNVSUNvbG9yU3RhdGVU eXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzVUlDb2xvclN0YXRlVHlw ZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJ CV9ieXRlc1sgICAgMTIgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNlbXVw dHIgPExBUz4JIAkJCQkJCWNvbG9yVGFibGVQIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJ CQljb2xvclRhYmxlU3RhY2tQIDsgCSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCWNvbG9yVGFi bGVTdGFja0luZGV4IDsgCSBFbUFsaWFzQm9vbGVhbiA8TEFTPgkgCQkJCQl0YWJsZXNEaXJ0eSA7 IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlyZXNlcnZlZCA7ICAJICAgICBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2NvbG9yVGFibGVQICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9jb2xvclRhYmxlU3RhY2tQICAodm9pZCkgeyByZXR1cm4gIDQgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb2xvclRhYmxlU3RhY2tJbmRleCAgKHZvaWQpIHsg cmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdGFibGVzRGlydHkgICh2b2lk KSB7IHJldHVybiAgMTAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZXNlcnZlZCAgKHZv aWQpIHsgcmV0dXJuICAxMSA7IH0gIAl9OyAgICAKICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3Mg RW1BbGlhc1VJR2xvYmFsc1R5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJf dHlwZSBwdHJfdHlwZTsJRW1BbGlhc1VJR2xvYmFsc1R5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFz VUlHbG9iYWxzVHlwZSAgCShjb25zdCBFbUFsaWFzVUlHbG9iYWxzVHlwZSAgJik7CXB0cl90eXBl CQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdl dFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDU2ICA7IH0JRW1BbGlhc1VJR2xvYmFsc1R5cGUg IDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzVUlHbG9iYWxzVHlwZSAgPEE+Jik7CUVtQWxp YXNVSUdsb2JhbHNUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1VJR2xv YmFsc1R5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzVUlH bG9iYWxzVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlh c2VtdXB0ciA8QT4JIAkJCQkJCWFjdGl2ZVdpbmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJ CQkJCWRpc3BsYXlXaW5kb3cgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlkcmF3V2luZG93 IDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJZmlyc3RXaW5kb3cgOyAJIEVtQWxpYXNlbXVw dHIgPEE+CSAJCQkJCQlleGl0V2luZG93SUQgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQll bnRlcldpbmRvd0lEIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJZXhpdGVkV2luZG93SUQg OyAJIEVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjEgPEE+CSAJCQlnU3RhdGVWMSA7IAkgRW1BbGlh c0dyYXBoaWNTdGF0ZVR5cGVWMiA8QT4JIAkJCWdTdGF0ZVYyIDsgCSBFbUFsaWFzR3JhcGhpY1N0 YXRlVHlwZVYzIDxBPgkgCQkJZ1N0YXRlVjMgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9hY3RpdmVXaW5kb3cgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2Rpc3BsYXlXaW5kb3cgICh2b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2RyYXdXaW5kb3cgICh2b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2ZpcnN0V2luZG93ICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXhpdFdpbmRvd0lEICAodm9pZCkgeyByZXR1cm4gIDE2IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZW50ZXJXaW5kb3dJRCAgKHZvaWQpIHsgcmV0dXJu ICAyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2V4aXRlZFdpbmRvd0lEICAodm9pZCkg eyByZXR1cm4gIDI0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ1N0YXRlVjEgICh2b2lk KSB7IHJldHVybiAgMjggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9nU3RhdGVWMiAgKHZv aWQpIHsgcmV0dXJuICAyOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dTdGF0ZVYzICAo dm9pZCkgeyByZXR1cm4gIDI4IDsgfSAgCX07IAljbGFzcyBFbVByb3h5VUlHbG9iYWxzVHlwZSAg CXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5VUlHbG9iYWxzVHlwZSAg CSh2b2lkKTsJRW1Qcm94eVVJR2xvYmFsc1R5cGUgIAkoY29uc3QgRW1Qcm94eVVJR2xvYmFsc1R5 cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBl KSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJu ICAgICA1NiAgOyB9CUVtUHJveHlVSUdsb2JhbHNUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVt UHJveHlVSUdsb2JhbHNUeXBlICAmKTsJRW1BbGlhc1VJR2xvYmFsc1R5cGUgIDxMQVM+CW9wZXJh dG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNVSUdsb2JhbHNUeXBlICA8TEFTPglvcGVyYXRvcltd IChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA1NiAgXTsJ fSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJYWN0 aXZlV2luZG93IDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlkaXNwbGF5V2luZG93IDsg CSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlkcmF3V2luZG93IDsgCSBFbUFsaWFzZW11cHRy IDxMQVM+CSAJCQkJCQlmaXJzdFdpbmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJ ZXhpdFdpbmRvd0lEIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQllbnRlcldpbmRvd0lE IDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlleGl0ZWRXaW5kb3dJRCA7IAkgRW1BbGlh c0dyYXBoaWNTdGF0ZVR5cGVWMSA8TEFTPgkgCQkJZ1N0YXRlVjEgOyAJIEVtQWxpYXNHcmFwaGlj U3RhdGVUeXBlVjIgPExBUz4JIAkJCWdTdGF0ZVYyIDsgCSBFbUFsaWFzR3JhcGhpY1N0YXRlVHlw ZVYzIDxMQVM+CSAJCQlnU3RhdGVWMyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Fj dGl2ZVdpbmRvdyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfZGlzcGxheVdpbmRvdyAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfZHJhd1dpbmRvdyAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfZmlyc3RXaW5kb3cgICh2b2lkKSB7IHJldHVybiAgMTIgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9leGl0V2luZG93SUQgICh2b2lkKSB7IHJldHVybiAgMTYgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9lbnRlcldpbmRvd0lEICAodm9pZCkgeyByZXR1cm4gIDIw IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXhpdGVkV2luZG93SUQgICh2b2lkKSB7IHJl dHVybiAgMjQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9nU3RhdGVWMSAgKHZvaWQpIHsg cmV0dXJuICAyOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dTdGF0ZVYyICAodm9pZCkg eyByZXR1cm4gIDI4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ1N0YXRlVjMgICh2b2lk KSB7IHJldHVybiAgMjggOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1B bGlhc1VJR2xvYmFsc1R5cGVDb21tb24gIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpw dHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc1VJR2xvYmFsc1R5cGVDb21tb24gIAkocHRyX3R5cGUp OwlFbUFsaWFzVUlHbG9iYWxzVHlwZUNvbW1vbiAgCShjb25zdCBFbUFsaWFzVUlHbG9iYWxzVHlw ZUNvbW1vbiAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRy OyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDE2MyAgOyB9 CUVtQWxpYXNVSUdsb2JhbHNUeXBlQ29tbW9uICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlh c1VJR2xvYmFsc1R5cGVDb21tb24gIDxBPiYpOwlFbUFsaWFzVUlHbG9iYWxzVHlwZUNvbW1vbiAg PEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNVSUdsb2JhbHNUeXBlQ29tbW9uICA8 QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1VJR2xvYmFsc1R5cGVD b21tb24gIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNlbXVw dHIgPEE+CSAJCQkJCQlhY3RpdmVXaW5kb3cgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlk aXNwbGF5V2luZG93IDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJZHJhd1dpbmRvdyA7IAkg RW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWZpcnN0V2luZG93IDsgCSBFbUFsaWFzZW11cHRyIDxB PgkgCQkJCQkJZXhpdFdpbmRvd0lEIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJZW50ZXJX aW5kb3dJRCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWV4aXRlZFdpbmRvd0lEIDsgCSBF bUFsaWFzR3JhcGhpY1N0YXRlVHlwZVYxIDxBPgkgCQkJZ1N0YXRlVjEgOyAJIEVtQWxpYXNHcmFw aGljU3RhdGVUeXBlVjIgPEE+CSAJCQlnU3RhdGVWMiA7IAkgRW1BbGlhc0dyYXBoaWNTdGF0ZVR5 cGVWMyA8QT4JIAkJCWdTdGF0ZVYzIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQl1aUN1cnJl bnRGb250SUQgOyAJIEVtQWxpYXNJbnQxNiA8QT4JIAkJCQkJCV91bnVzZWQyIDsgCSBFbUFsaWFz ZW11cHRyIDxBPgkgCQkJCQkJY3VycmVudEZvcm0gOyAJIEVtQWxpYXNCb29sZWFuIDxBPgkgCQkJ CQlpbnNQdElzRW5hYmxlZCA7IAkgRW1BbGlhc0Jvb2xlYW4gPEE+CSAJCQkJCWluc1B0T24gOyAJ IEVtQWxpYXNQb2ludFR5cGUgPEE+CSAJCQkJCWluc1B0TG9jIDsgCSBFbUFsaWFzSW50MTYgPEE+ CSAJCQkJCQlpbnNQdEhlaWdodCA7IAkgRW1BbGlhc0ludDMyIDxBPgkgCQkJCQkJaW5zUHRMYXN0 VGljayA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWluc1B0Qml0c0JlaGluZCA7IAkgRW1B bGlhc0NsaXBib2FyZEl0ZW0gPEE+CSAJCQkJY2xpcGJvYXJkIDsgCSBFbUFsaWFzZW11cHRyIDxB PgkgCQkJCQkJdWlDdXJyZW50TWVudSA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXVpQ3Vy cmVudE1lbnVSc2NJRCA7IAkgRW1BbGlhc0ZpZWxkVW5kb1R5cGUgPEE+CSAJCQkJdW5kb0dsb2Jh bHMgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWdzaVN0YXRlIDsgCSBFbUFsaWFzQm9vbGVh biA8QT4JIAkJCQkJZ3NpSXNFbmFibGVkIDsgCSBFbUFsaWFzUG9pbnRUeXBlIDxBPgkgCQkJCQln c2lMb2NhdGlvbiA7IAkgRW1BbGlhc0NoYXIgPEE+CSAJCQkJCQl1aURlY2ltYWxTZXBhcmF0b3Ig OyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hY3RpdmVXaW5kb3cgICh2b2lkKSB7IHJl dHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Rpc3BsYXlXaW5kb3cgICh2b2lk KSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RyYXdXaW5kb3cgICh2 b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZpcnN0V2luZG93 ICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXhpdFdp bmRvd0lEICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf ZW50ZXJXaW5kb3dJRCAgKHZvaWQpIHsgcmV0dXJuICAyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2V4aXRlZFdpbmRvd0lEICAodm9pZCkgeyByZXR1cm4gIDI0IDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfZ1N0YXRlVjEgICh2b2lkKSB7IHJldHVybiAgMjggOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9nU3RhdGVWMiAgKHZvaWQpIHsgcmV0dXJuICAyOCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2dTdGF0ZVYzICAodm9pZCkgeyByZXR1cm4gIDI4IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlDdXJyZW50Rm9udElEICAodm9pZCkgeyByZXR1cm4gIDk4 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX3VudXNlZDIgICh2b2lkKSB7IHJldHVybiAg OTkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jdXJyZW50Rm9ybSAgKHZvaWQpIHsgcmV0 dXJuICAxMDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbnNQdElzRW5hYmxlZCAgKHZv aWQpIHsgcmV0dXJuICAxMDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbnNQdE9uICAo dm9pZCkgeyByZXR1cm4gIDEwNSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0TG9j ICAodm9pZCkgeyByZXR1cm4gIDEwNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0 SGVpZ2h0ICAodm9pZCkgeyByZXR1cm4gIDExMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2luc1B0TGFzdFRpY2sgICh2b2lkKSB7IHJldHVybiAgMTEyIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfaW5zUHRCaXRzQmVoaW5kICAodm9pZCkgeyByZXR1cm4gIDExNiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2NsaXBib2FyZCAgKHZvaWQpIHsgcmV0dXJuICAxMjAgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUN1cnJlbnRNZW51ICAodm9pZCkgeyByZXR1cm4gIDEz OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpQ3VycmVudE1lbnVSc2NJRCAgKHZvaWQp IHsgcmV0dXJuICAxNDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91bmRvR2xvYmFscyAg KHZvaWQpIHsgcmV0dXJuICAxNDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9nc2lTdGF0 ZSAgKHZvaWQpIHsgcmV0dXJuICAxNTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9nc2lJ c0VuYWJsZWQgICh2b2lkKSB7IHJldHVybiAgMTU3IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfZ3NpTG9jYXRpb24gICh2b2lkKSB7IHJldHVybiAgMTU4IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfdWlEZWNpbWFsU2VwYXJhdG9yICAodm9pZCkgeyByZXR1cm4gIDE2MiA7IH0gIAl9 OyAJY2xhc3MgRW1Qcm94eVVJR2xvYmFsc1R5cGVDb21tb24gIAl7CXB1YmxpYzoJdHlwZWRlZiB2 b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVVJR2xvYmFsc1R5cGVDb21tb24gIAkodm9pZCk7CUVtUHJv eHlVSUdsb2JhbHNUeXBlQ29tbW9uICAJKGNvbnN0IEVtUHJveHlVSUdsb2JhbHNUeXBlQ29tbW9u ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkg JmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAg ICAgMTYzICA7IH0JRW1Qcm94eVVJR2xvYmFsc1R5cGVDb21tb24gICYJCW9wZXJhdG9yPSAoY29u c3QgRW1Qcm94eVVJR2xvYmFsc1R5cGVDb21tb24gICYpOwlFbUFsaWFzVUlHbG9iYWxzVHlwZUNv bW1vbiAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1VJR2xvYmFsc1R5cGVD b21tb24gIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNo YXIJCQlfYnl0ZXNbICAgIDE2MyAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlh c2VtdXB0ciA8TEFTPgkgCQkJCQkJYWN0aXZlV2luZG93IDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+ CSAJCQkJCQlkaXNwbGF5V2luZG93IDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlkcmF3 V2luZG93IDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlmaXJzdFdpbmRvdyA7IAkgRW1B bGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZXhpdFdpbmRvd0lEIDsgCSBFbUFsaWFzZW11cHRyIDxM QVM+CSAJCQkJCQllbnRlcldpbmRvd0lEIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQll eGl0ZWRXaW5kb3dJRCA7IAkgRW1BbGlhc0dyYXBoaWNTdGF0ZVR5cGVWMSA8TEFTPgkgCQkJZ1N0 YXRlVjEgOyAJIEVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjIgPExBUz4JIAkJCWdTdGF0ZVYyIDsg CSBFbUFsaWFzR3JhcGhpY1N0YXRlVHlwZVYzIDxMQVM+CSAJCQlnU3RhdGVWMyA7IAkgRW1BbGlh c1VJbnQ4IDxMQVM+CSAJCQkJCQl1aUN1cnJlbnRGb250SUQgOyAJIEVtQWxpYXNJbnQxNiA8TEFT PgkgCQkJCQkJX3VudXNlZDIgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWN1cnJlbnRG b3JtIDsgCSBFbUFsaWFzQm9vbGVhbiA8TEFTPgkgCQkJCQlpbnNQdElzRW5hYmxlZCA7IAkgRW1B bGlhc0Jvb2xlYW4gPExBUz4JIAkJCQkJaW5zUHRPbiA7IAkgRW1BbGlhc1BvaW50VHlwZSA8TEFT PgkgCQkJCQlpbnNQdExvYyA7IAkgRW1BbGlhc0ludDE2IDxMQVM+CSAJCQkJCQlpbnNQdEhlaWdo dCA7IAkgRW1BbGlhc0ludDMyIDxMQVM+CSAJCQkJCQlpbnNQdExhc3RUaWNrIDsgCSBFbUFsaWFz ZW11cHRyIDxMQVM+CSAJCQkJCQlpbnNQdEJpdHNCZWhpbmQgOyAJIEVtQWxpYXNDbGlwYm9hcmRJ dGVtIDxMQVM+CSAJCQkJY2xpcGJvYXJkIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQl1 aUN1cnJlbnRNZW51IDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQl1aUN1cnJlbnRNZW51 UnNjSUQgOyAJIEVtQWxpYXNGaWVsZFVuZG9UeXBlIDxMQVM+CSAJCQkJdW5kb0dsb2JhbHMgOyAJ IEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJZ3NpU3RhdGUgOyAJIEVtQWxpYXNCb29sZWFuIDxM QVM+CSAJCQkJCWdzaUlzRW5hYmxlZCA7IAkgRW1BbGlhc1BvaW50VHlwZSA8TEFTPgkgCQkJCQln c2lMb2NhdGlvbiA7IAkgRW1BbGlhc0NoYXIgPExBUz4JIAkJCQkJCXVpRGVjaW1hbFNlcGFyYXRv ciA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2FjdGl2ZVdpbmRvdyAgKHZvaWQpIHsg cmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGlzcGxheVdpbmRvdyAgKHZv aWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZHJhd1dpbmRvdyAg KHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmlyc3RXaW5k b3cgICh2b2lkKSB7IHJldHVybiAgMTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9leGl0 V2luZG93SUQgICh2b2lkKSB7IHJldHVybiAgMTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9lbnRlcldpbmRvd0lEICAodm9pZCkgeyByZXR1cm4gIDIwIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfZXhpdGVkV2luZG93SUQgICh2b2lkKSB7IHJldHVybiAgMjQgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9nU3RhdGVWMSAgKHZvaWQpIHsgcmV0dXJuICAyOCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2dTdGF0ZVYyICAodm9pZCkgeyByZXR1cm4gIDI4IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ1N0YXRlVjMgICh2b2lkKSB7IHJldHVybiAgMjggOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUN1cnJlbnRGb250SUQgICh2b2lkKSB7IHJldHVybiAg OTggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9fdW51c2VkMiAgKHZvaWQpIHsgcmV0dXJu ICA5OSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2N1cnJlbnRGb3JtICAodm9pZCkgeyBy ZXR1cm4gIDEwMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0SXNFbmFibGVkICAo dm9pZCkgeyByZXR1cm4gIDEwNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0T24g ICh2b2lkKSB7IHJldHVybiAgMTA1IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5zUHRM b2MgICh2b2lkKSB7IHJldHVybiAgMTA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5z UHRIZWlnaHQgICh2b2lkKSB7IHJldHVybiAgMTEwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfaW5zUHRMYXN0VGljayAgKHZvaWQpIHsgcmV0dXJuICAxMTIgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9pbnNQdEJpdHNCZWhpbmQgICh2b2lkKSB7IHJldHVybiAgMTE2IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY2xpcGJvYXJkICAodm9pZCkgeyByZXR1cm4gIDEyMCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpQ3VycmVudE1lbnUgICh2b2lkKSB7IHJldHVybiAg MTM4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlDdXJyZW50TWVudVJzY0lEICAodm9p ZCkgeyByZXR1cm4gIDE0MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VuZG9HbG9iYWxz ICAodm9pZCkgeyByZXR1cm4gIDE0NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dzaVN0 YXRlICAodm9pZCkgeyByZXR1cm4gIDE1NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dz aUlzRW5hYmxlZCAgKHZvaWQpIHsgcmV0dXJuICAxNTcgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9nc2lMb2NhdGlvbiAgKHZvaWQpIHsgcmV0dXJuICAxNTggOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl91aURlY2ltYWxTZXBhcmF0b3IgICh2b2lkKSB7IHJldHVybiAgMTYyIDsgfSAg CX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNVSUdsb2JhbHNUeXBlVjEg IAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlh c1VJR2xvYmFsc1R5cGVWMSAgCShwdHJfdHlwZSk7CUVtQWxpYXNVSUdsb2JhbHNUeXBlVjEgIAko Y29uc3QgRW1BbGlhc1VJR2xvYmFsc1R5cGVWMSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lk KSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJ eyByZXR1cm4gICAgIDE2MCAgOyB9CUVtQWxpYXNVSUdsb2JhbHNUeXBlVjEgIDxBPiYJb3BlcmF0 b3I9IChjb25zdCBFbUFsaWFzVUlHbG9iYWxzVHlwZVYxICA8QT4mKTsJRW1BbGlhc1VJR2xvYmFs c1R5cGVWMSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNVSUdsb2JhbHNUeXBl VjEgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzVUlHbG9iYWxz VHlwZVYxICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzZW11 cHRyIDxBPgkgCQkJCQkJYWN0aXZlV2luZG93IDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJ ZGlzcGxheVdpbmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWRyYXdXaW5kb3cgOyAJ IEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlmaXJzdFdpbmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8 QT4JIAkJCQkJCWV4aXRXaW5kb3dJRCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWVudGVy V2luZG93SUQgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlleGl0ZWRXaW5kb3dJRCA7IAkg RW1BbGlhc0dyYXBoaWNTdGF0ZVR5cGVWMSA8QT4JIAkJCWdTdGF0ZSA7IAkgRW1BbGlhc2VtdXB0 ciA8QT4JIAkJCQkJCWV2ZW50USA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWV2ZW50UUlu ZGV4IDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJZXZlbnRRTGVuZ3RoIDsgCSBFbUFsaWFz SW50MTYgPEE+CSAJCQkJCQlsYXN0U2NyZWVuWCA7IAkgRW1BbGlhc0ludDE2IDxBPgkgCQkJCQkJ bGFzdFNjcmVlblkgOyAJIEVtQWxpYXNCb29sZWFuIDxBPgkgCQkJCQlsYXN0UGVuRG93biA7IAkg RW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJX3VudXNlZDEgOyAJIEVtQWxpYXNJbnQzMiA8QT4JIAkJ CQkJCW5lZWROdWxsVGlja0NvdW50IDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJdWlDdXJy ZW50Rm9udFB0ciA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXVpRm9udFRhYmxlIDsgCSBF bUFsaWFzVUludDggPEE+CSAJCQkJCQl1aUN1cnJlbnRGb250SUQgOyAJIEVtQWxpYXNJbnQxNiA8 QT4JIAkJCQkJCV91bnVzZWQyIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJY3VycmVudEZv cm0gOyAJIEVtQWxpYXNCb29sZWFuIDxBPgkgCQkJCQlpbnNQdElzRW5hYmxlZCA7IAkgRW1BbGlh c0Jvb2xlYW4gPEE+CSAJCQkJCWluc1B0T24gOyAJIEVtQWxpYXNQb2ludFR5cGUgPEE+CSAJCQkJ CWluc1B0TG9jIDsgCSBFbUFsaWFzSW50MTYgPEE+CSAJCQkJCQlpbnNQdEhlaWdodCA7IAkgRW1B bGlhc0ludDMyIDxBPgkgCQkJCQkJaW5zUHRMYXN0VGljayA7IAkgRW1BbGlhc2VtdXB0ciA8QT4J IAkJCQkJCWluc1B0Qml0c0JlaGluZCA7IAkgRW1BbGlhc0NsaXBib2FyZEl0ZW0gPEE+CSAJCQkJ Y2xpcGJvYXJkIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJdWlDdXJyZW50TWVudSA7IAkg RW1BbGlhc0ZpZWxkVW5kb1R5cGUgPEE+CSAJCQkJdW5kb0dsb2JhbHMgOyAJIEVtQWxpYXNVSW50 OCA8QT4JIAkJCQkJCWdzaVN0YXRlIDsgCSBFbUFsaWFzQm9vbGVhbiA8QT4JIAkJCQkJZ3NpSXNF bmFibGVkIDsgCSBFbUFsaWFzUG9pbnRUeXBlIDxBPgkgCQkJCQlnc2lMb2NhdGlvbiA7ICAJICAg ICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2FjdGl2ZVdpbmRvdyAgKHZvaWQpIHsgcmV0dXJuICAw IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGlzcGxheVdpbmRvdyAgKHZvaWQpIHsgcmV0 dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZHJhd1dpbmRvdyAgKHZvaWQpIHsg cmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmlyc3RXaW5kb3cgICh2b2lk KSB7IHJldHVybiAgMTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9leGl0V2luZG93SUQg ICh2b2lkKSB7IHJldHVybiAgMTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9lbnRlcldp bmRvd0lEICAodm9pZCkgeyByZXR1cm4gIDIwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf ZXhpdGVkV2luZG93SUQgICh2b2lkKSB7IHJldHVybiAgMjQgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9nU3RhdGUgICh2b2lkKSB7IHJldHVybiAgMjggOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9ldmVudFEgICh2b2lkKSB7IHJldHVybiAgNDggOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9ldmVudFFJbmRleCAgKHZvaWQpIHsgcmV0dXJuICA1MiA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2V2ZW50UUxlbmd0aCAgKHZvaWQpIHsgcmV0dXJuICA1NCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2xhc3RTY3JlZW5YICAodm9pZCkgeyByZXR1cm4gIDU2IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbGFzdFNjcmVlblkgICh2b2lkKSB7IHJldHVybiAgNTgg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9sYXN0UGVuRG93biAgKHZvaWQpIHsgcmV0dXJu ICA2MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX191bnVzZWQxICAodm9pZCkgeyByZXR1 cm4gIDYxIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmVlZE51bGxUaWNrQ291bnQgICh2 b2lkKSB7IHJldHVybiAgNjIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUN1cnJlbnRG b250UHRyICAodm9pZCkgeyByZXR1cm4gIDY2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf dWlGb250VGFibGUgICh2b2lkKSB7IHJldHVybiAgNzAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl91aUN1cnJlbnRGb250SUQgICh2b2lkKSB7IHJldHVybiAgOTggOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9fdW51c2VkMiAgKHZvaWQpIHsgcmV0dXJuICA5OSA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2N1cnJlbnRGb3JtICAodm9pZCkgeyByZXR1cm4gIDEwMCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0SXNFbmFibGVkICAodm9pZCkgeyByZXR1cm4gIDEw NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0T24gICh2b2lkKSB7IHJldHVybiAg MTA1IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5zUHRMb2MgICh2b2lkKSB7IHJldHVy biAgMTA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5zUHRIZWlnaHQgICh2b2lkKSB7 IHJldHVybiAgMTEwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5zUHRMYXN0VGljayAg KHZvaWQpIHsgcmV0dXJuICAxMTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbnNQdEJp dHNCZWhpbmQgICh2b2lkKSB7IHJldHVybiAgMTE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfY2xpcGJvYXJkICAodm9pZCkgeyByZXR1cm4gIDEyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3VpQ3VycmVudE1lbnUgICh2b2lkKSB7IHJldHVybiAgMTM4IDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfdW5kb0dsb2JhbHMgICh2b2lkKSB7IHJldHVybiAgMTQyIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ3NpU3RhdGUgICh2b2lkKSB7IHJldHVybiAgMTU0IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ3NpSXNFbmFibGVkICAodm9pZCkgeyByZXR1cm4gIDE1 NSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dzaUxvY2F0aW9uICAodm9pZCkgeyByZXR1 cm4gIDE1NiA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVVJR2xvYmFsc1R5cGVWMSAgCXsJcHVibGlj Ogl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5VUlHbG9iYWxzVHlwZVYxICAJKHZvaWQp OwlFbVByb3h5VUlHbG9iYWxzVHlwZVYxICAJKGNvbnN0IEVtUHJveHlVSUdsb2JhbHNUeXBlVjEg ICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAm ZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAg ICAxNjAgIDsgfQlFbVByb3h5VUlHbG9iYWxzVHlwZVYxICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVt UHJveHlVSUdsb2JhbHNUeXBlVjEgICYpOwlFbUFsaWFzVUlHbG9iYWxzVHlwZVYxICA8TEFTPglv cGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzVUlHbG9iYWxzVHlwZVYxICA8TEFTPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAx NjAgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJ CQkJCWFjdGl2ZVdpbmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZGlzcGxheVdp bmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZHJhd1dpbmRvdyA7IAkgRW1BbGlh c2VtdXB0ciA8TEFTPgkgCQkJCQkJZmlyc3RXaW5kb3cgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4J IAkJCQkJCWV4aXRXaW5kb3dJRCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZW50ZXJX aW5kb3dJRCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZXhpdGVkV2luZG93SUQgOyAJ IEVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjEgPExBUz4JIAkJCWdTdGF0ZSA7IAkgRW1BbGlhc2Vt dXB0ciA8TEFTPgkgCQkJCQkJZXZlbnRRIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQll dmVudFFJbmRleCA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJZXZlbnRRTGVuZ3RoIDsg CSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCWxhc3RTY3JlZW5YIDsgCSBFbUFsaWFzSW50MTYg PExBUz4JIAkJCQkJCWxhc3RTY3JlZW5ZIDsgCSBFbUFsaWFzQm9vbGVhbiA8TEFTPgkgCQkJCQls YXN0UGVuRG93biA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlfdW51c2VkMSA7IAkgRW1B bGlhc0ludDMyIDxMQVM+CSAJCQkJCQluZWVkTnVsbFRpY2tDb3VudCA7IAkgRW1BbGlhc2VtdXB0 ciA8TEFTPgkgCQkJCQkJdWlDdXJyZW50Rm9udFB0ciA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkg CQkJCQkJdWlGb250VGFibGUgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJdWlDdXJyZW50 Rm9udElEIDsgCSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCV91bnVzZWQyIDsgCSBFbUFsaWFz ZW11cHRyIDxMQVM+CSAJCQkJCQljdXJyZW50Rm9ybSA7IAkgRW1BbGlhc0Jvb2xlYW4gPExBUz4J IAkJCQkJaW5zUHRJc0VuYWJsZWQgOyAJIEVtQWxpYXNCb29sZWFuIDxMQVM+CSAJCQkJCWluc1B0 T24gOyAJIEVtQWxpYXNQb2ludFR5cGUgPExBUz4JIAkJCQkJaW5zUHRMb2MgOyAJIEVtQWxpYXNJ bnQxNiA8TEFTPgkgCQkJCQkJaW5zUHRIZWlnaHQgOyAJIEVtQWxpYXNJbnQzMiA8TEFTPgkgCQkJ CQkJaW5zUHRMYXN0VGljayA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJaW5zUHRCaXRz QmVoaW5kIDsgCSBFbUFsaWFzQ2xpcGJvYXJkSXRlbSA8TEFTPgkgCQkJCWNsaXBib2FyZCA7IAkg RW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJdWlDdXJyZW50TWVudSA7IAkgRW1BbGlhc0ZpZWxk VW5kb1R5cGUgPExBUz4JIAkJCQl1bmRvR2xvYmFscyA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJ CQkJCQlnc2lTdGF0ZSA7IAkgRW1BbGlhc0Jvb2xlYW4gPExBUz4JIAkJCQkJZ3NpSXNFbmFibGVk IDsgCSBFbUFsaWFzUG9pbnRUeXBlIDxMQVM+CSAJCQkJCWdzaUxvY2F0aW9uIDsgIAkgICAgIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYWN0aXZlV2luZG93ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kaXNwbGF5V2luZG93ICAodm9pZCkgeyByZXR1cm4g IDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kcmF3V2luZG93ICAodm9pZCkgeyByZXR1 cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9maXJzdFdpbmRvdyAgKHZvaWQpIHsg cmV0dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2V4aXRXaW5kb3dJRCAgKHZv aWQpIHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2VudGVyV2luZG93 SUQgICh2b2lkKSB7IHJldHVybiAgMjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9leGl0 ZWRXaW5kb3dJRCAgKHZvaWQpIHsgcmV0dXJuICAyNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2dTdGF0ZSAgKHZvaWQpIHsgcmV0dXJuICAyOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2V2ZW50USAgKHZvaWQpIHsgcmV0dXJuICA0OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2V2ZW50UUluZGV4ICAodm9pZCkgeyByZXR1cm4gIDUyIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfZXZlbnRRTGVuZ3RoICAodm9pZCkgeyByZXR1cm4gIDU0IDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfbGFzdFNjcmVlblggICh2b2lkKSB7IHJldHVybiAgNTYgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9sYXN0U2NyZWVuWSAgKHZvaWQpIHsgcmV0dXJuICA1OCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xhc3RQZW5Eb3duICAodm9pZCkgeyByZXR1cm4gIDYw IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX3VudXNlZDEgICh2b2lkKSB7IHJldHVybiAg NjEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uZWVkTnVsbFRpY2tDb3VudCAgKHZvaWQp IHsgcmV0dXJuICA2MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpQ3VycmVudEZvbnRQ dHIgICh2b2lkKSB7IHJldHVybiAgNjYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUZv bnRUYWJsZSAgKHZvaWQpIHsgcmV0dXJuICA3MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3VpQ3VycmVudEZvbnRJRCAgKHZvaWQpIHsgcmV0dXJuICA5OCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX191bnVzZWQyICAodm9pZCkgeyByZXR1cm4gIDk5IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfY3VycmVudEZvcm0gICh2b2lkKSB7IHJldHVybiAgMTAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfaW5zUHRJc0VuYWJsZWQgICh2b2lkKSB7IHJldHVybiAgMTA0IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5zUHRPbiAgKHZvaWQpIHsgcmV0dXJuICAxMDUg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbnNQdExvYyAgKHZvaWQpIHsgcmV0dXJuICAx MDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbnNQdEhlaWdodCAgKHZvaWQpIHsgcmV0 dXJuICAxMTAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbnNQdExhc3RUaWNrICAodm9p ZCkgeyByZXR1cm4gIDExMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0Qml0c0Jl aGluZCAgKHZvaWQpIHsgcmV0dXJuICAxMTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9j bGlwYm9hcmQgICh2b2lkKSB7IHJldHVybiAgMTIwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfdWlDdXJyZW50TWVudSAgKHZvaWQpIHsgcmV0dXJuICAxMzggOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl91bmRvR2xvYmFscyAgKHZvaWQpIHsgcmV0dXJuICAxNDIgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9nc2lTdGF0ZSAgKHZvaWQpIHsgcmV0dXJuICAxNTQgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9nc2lJc0VuYWJsZWQgICh2b2lkKSB7IHJldHVybiAgMTU1IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ3NpTG9jYXRpb24gICh2b2lkKSB7IHJldHVybiAg MTU2IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNVSUdsb2Jh bHNUeXBlVjIgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlw ZTsJRW1BbGlhc1VJR2xvYmFsc1R5cGVWMiAgCShwdHJfdHlwZSk7CUVtQWxpYXNVSUdsb2JhbHNU eXBlVjIgIAkoY29uc3QgRW1BbGlhc1VJR2xvYmFsc1R5cGVWMiAgJik7CXB0cl90eXBlCQkJR2V0 UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJ KHZvaWQpCQkJeyByZXR1cm4gICAgIDE2MyAgOyB9CUVtQWxpYXNVSUdsb2JhbHNUeXBlVjIgIDxB PiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzVUlHbG9iYWxzVHlwZVYyICA8QT4mKTsJRW1BbGlh c1VJR2xvYmFsc1R5cGVWMiAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNVSUds b2JhbHNUeXBlVjIgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFz VUlHbG9iYWxzVHlwZVYyICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBF bUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJYWN0aXZlV2luZG93IDsgCSBFbUFsaWFzZW11cHRyIDxB PgkgCQkJCQkJZGlzcGxheVdpbmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWRyYXdX aW5kb3cgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlmaXJzdFdpbmRvdyA7IAkgRW1BbGlh c2VtdXB0ciA8QT4JIAkJCQkJCWV4aXRXaW5kb3dJRCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJ CQkJCWVudGVyV2luZG93SUQgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlleGl0ZWRXaW5k b3dJRCA7IAkgRW1BbGlhc0dyYXBoaWNTdGF0ZVR5cGVWMSA8QT4JIAkJCWdTdGF0ZSA7IAkgRW1B bGlhc2VtdXB0ciA8QT4JIAkJCQkJCWV2ZW50USA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJ CWV2ZW50UUluZGV4IDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJZXZlbnRRTGVuZ3RoIDsg CSBFbUFsaWFzSW50MTYgPEE+CSAJCQkJCQlsYXN0U2NyZWVuWCA7IAkgRW1BbGlhc0ludDE2IDxB PgkgCQkJCQkJbGFzdFNjcmVlblkgOyAJIEVtQWxpYXNCb29sZWFuIDxBPgkgCQkJCQlsYXN0UGVu RG93biA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJX3VudXNlZDEgOyAJIEVtQWxpYXNJbnQz MiA8QT4JIAkJCQkJCW5lZWROdWxsVGlja0NvdW50IDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJ CQkJdWlDdXJyZW50Rm9udFB0ciA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXVpRm9udFRh YmxlIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQl1aUN1cnJlbnRGb250SUQgOyAJIEVtQWxp YXNJbnQxNiA8QT4JIAkJCQkJCV91bnVzZWQyIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJ Y3VycmVudEZvcm0gOyAJIEVtQWxpYXNCb29sZWFuIDxBPgkgCQkJCQlpbnNQdElzRW5hYmxlZCA7 IAkgRW1BbGlhc0Jvb2xlYW4gPEE+CSAJCQkJCWluc1B0T24gOyAJIEVtQWxpYXNQb2ludFR5cGUg PEE+CSAJCQkJCWluc1B0TG9jIDsgCSBFbUFsaWFzSW50MTYgPEE+CSAJCQkJCQlpbnNQdEhlaWdo dCA7IAkgRW1BbGlhc0ludDMyIDxBPgkgCQkJCQkJaW5zUHRMYXN0VGljayA7IAkgRW1BbGlhc2Vt dXB0ciA8QT4JIAkJCQkJCWluc1B0Qml0c0JlaGluZCA7IAkgRW1BbGlhc0NsaXBib2FyZEl0ZW0g PEE+CSAJCQkJY2xpcGJvYXJkIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJdWlDdXJyZW50 TWVudSA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXVpQ3VycmVudE1lbnVSc2NJRCA7IAkg RW1BbGlhc0ZpZWxkVW5kb1R5cGUgPEE+CSAJCQkJdW5kb0dsb2JhbHMgOyAJIEVtQWxpYXNVSW50 OCA8QT4JIAkJCQkJCWdzaVN0YXRlIDsgCSBFbUFsaWFzQm9vbGVhbiA8QT4JIAkJCQkJZ3NpSXNF bmFibGVkIDsgCSBFbUFsaWFzUG9pbnRUeXBlIDxBPgkgCQkJCQlnc2lMb2NhdGlvbiA7IAkgRW1B bGlhc0NoYXIgPEE+CSAJCQkJCQl1aURlY2ltYWxTZXBhcmF0b3IgOyAgCSAgICAgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9hY3RpdmVXaW5kb3cgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2Rpc3BsYXlXaW5kb3cgICh2b2lkKSB7IHJldHVybiAgNCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RyYXdXaW5kb3cgICh2b2lkKSB7IHJldHVybiAgOCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZpcnN0V2luZG93ICAodm9pZCkgeyByZXR1cm4g IDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXhpdFdpbmRvd0lEICAodm9pZCkgeyBy ZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZW50ZXJXaW5kb3dJRCAgKHZv aWQpIHsgcmV0dXJuICAyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2V4aXRlZFdpbmRv d0lEICAodm9pZCkgeyByZXR1cm4gIDI0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ1N0 YXRlICAodm9pZCkgeyByZXR1cm4gIDI4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXZl bnRRICAodm9pZCkgeyByZXR1cm4gIDQ4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXZl bnRRSW5kZXggICh2b2lkKSB7IHJldHVybiAgNTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9ldmVudFFMZW5ndGggICh2b2lkKSB7IHJldHVybiAgNTQgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9sYXN0U2NyZWVuWCAgKHZvaWQpIHsgcmV0dXJuICA1NiA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2xhc3RTY3JlZW5ZICAodm9pZCkgeyByZXR1cm4gIDU4IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfbGFzdFBlbkRvd24gICh2b2lkKSB7IHJldHVybiAgNjAgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9fdW51c2VkMSAgKHZvaWQpIHsgcmV0dXJuICA2MSA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25lZWROdWxsVGlja0NvdW50ICAodm9pZCkgeyByZXR1 cm4gIDYyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlDdXJyZW50Rm9udFB0ciAgKHZv aWQpIHsgcmV0dXJuICA2NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpRm9udFRhYmxl ICAodm9pZCkgeyByZXR1cm4gIDcwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlDdXJy ZW50Rm9udElEICAodm9pZCkgeyByZXR1cm4gIDk4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfX3VudXNlZDIgICh2b2lkKSB7IHJldHVybiAgOTkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9jdXJyZW50Rm9ybSAgKHZvaWQpIHsgcmV0dXJuICAxMDAgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9pbnNQdElzRW5hYmxlZCAgKHZvaWQpIHsgcmV0dXJuICAxMDQgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9pbnNQdE9uICAodm9pZCkgeyByZXR1cm4gIDEwNSA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0TG9jICAodm9pZCkgeyByZXR1cm4gIDEwNiA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0SGVpZ2h0ICAodm9pZCkgeyByZXR1cm4gIDEx MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0TGFzdFRpY2sgICh2b2lkKSB7IHJl dHVybiAgMTEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5zUHRCaXRzQmVoaW5kICAo dm9pZCkgeyByZXR1cm4gIDExNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NsaXBib2Fy ZCAgKHZvaWQpIHsgcmV0dXJuICAxMjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUN1 cnJlbnRNZW51ICAodm9pZCkgeyByZXR1cm4gIDEzOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3VpQ3VycmVudE1lbnVSc2NJRCAgKHZvaWQpIHsgcmV0dXJuICAxNDIgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl91bmRvR2xvYmFscyAgKHZvaWQpIHsgcmV0dXJuICAxNDQgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9nc2lTdGF0ZSAgKHZvaWQpIHsgcmV0dXJuICAxNTYgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9nc2lJc0VuYWJsZWQgICh2b2lkKSB7IHJldHVybiAg MTU3IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ3NpTG9jYXRpb24gICh2b2lkKSB7IHJl dHVybiAgMTU4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlEZWNpbWFsU2VwYXJhdG9y ICAodm9pZCkgeyByZXR1cm4gIDE2MiA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVVJR2xvYmFsc1R5 cGVWMiAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5VUlHbG9iYWxz VHlwZVYyICAJKHZvaWQpOwlFbVByb3h5VUlHbG9iYWxzVHlwZVYyICAJKGNvbnN0IEVtUHJveHlV SUdsb2JhbHNUeXBlVjIgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1 cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lk KQkJCXsgcmV0dXJuICAgICAxNjMgIDsgfQlFbVByb3h5VUlHbG9iYWxzVHlwZVYyICAmCQlvcGVy YXRvcj0gKGNvbnN0IEVtUHJveHlVSUdsb2JhbHNUeXBlVjIgICYpOwlFbUFsaWFzVUlHbG9iYWxz VHlwZVYyICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzVUlHbG9iYWxzVHlw ZVYyICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFy CQkJX2J5dGVzWyAgICAxNjMgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNl bXVwdHIgPExBUz4JIAkJCQkJCWFjdGl2ZVdpbmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkg CQkJCQkJZGlzcGxheVdpbmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZHJhd1dp bmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZmlyc3RXaW5kb3cgOyAJIEVtQWxp YXNlbXVwdHIgPExBUz4JIAkJCQkJCWV4aXRXaW5kb3dJRCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFT PgkgCQkJCQkJZW50ZXJXaW5kb3dJRCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZXhp dGVkV2luZG93SUQgOyAJIEVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjEgPExBUz4JIAkJCWdTdGF0 ZSA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZXZlbnRRIDsgCSBFbUFsaWFzVUludDE2 IDxMQVM+CSAJCQkJCQlldmVudFFJbmRleCA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJ ZXZlbnRRTGVuZ3RoIDsgCSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCWxhc3RTY3JlZW5YIDsg CSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCWxhc3RTY3JlZW5ZIDsgCSBFbUFsaWFzQm9vbGVh biA8TEFTPgkgCQkJCQlsYXN0UGVuRG93biA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlf dW51c2VkMSA7IAkgRW1BbGlhc0ludDMyIDxMQVM+CSAJCQkJCQluZWVkTnVsbFRpY2tDb3VudCA7 IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJdWlDdXJyZW50Rm9udFB0ciA7IAkgRW1BbGlh c2VtdXB0ciA8TEFTPgkgCQkJCQkJdWlGb250VGFibGUgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkg CQkJCQkJdWlDdXJyZW50Rm9udElEIDsgCSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCV91bnVz ZWQyIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQljdXJyZW50Rm9ybSA7IAkgRW1BbGlh c0Jvb2xlYW4gPExBUz4JIAkJCQkJaW5zUHRJc0VuYWJsZWQgOyAJIEVtQWxpYXNCb29sZWFuIDxM QVM+CSAJCQkJCWluc1B0T24gOyAJIEVtQWxpYXNQb2ludFR5cGUgPExBUz4JIAkJCQkJaW5zUHRM b2MgOyAJIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJaW5zUHRIZWlnaHQgOyAJIEVtQWxpYXNJ bnQzMiA8TEFTPgkgCQkJCQkJaW5zUHRMYXN0VGljayA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkg CQkJCQkJaW5zUHRCaXRzQmVoaW5kIDsgCSBFbUFsaWFzQ2xpcGJvYXJkSXRlbSA8TEFTPgkgCQkJ CWNsaXBib2FyZCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJdWlDdXJyZW50TWVudSA7 IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJdWlDdXJyZW50TWVudVJzY0lEIDsgCSBFbUFs aWFzRmllbGRVbmRvVHlwZSA8TEFTPgkgCQkJCXVuZG9HbG9iYWxzIDsgCSBFbUFsaWFzVUludDgg PExBUz4JIAkJCQkJCWdzaVN0YXRlIDsgCSBFbUFsaWFzQm9vbGVhbiA8TEFTPgkgCQkJCQlnc2lJ c0VuYWJsZWQgOyAJIEVtQWxpYXNQb2ludFR5cGUgPExBUz4JIAkJCQkJZ3NpTG9jYXRpb24gOyAJ IEVtQWxpYXNDaGFyIDxMQVM+CSAJCQkJCQl1aURlY2ltYWxTZXBhcmF0b3IgOyAgCSAgICAgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9hY3RpdmVXaW5kb3cgICh2b2lkKSB7IHJldHVybiAgMCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Rpc3BsYXlXaW5kb3cgICh2b2lkKSB7IHJldHVybiAg NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RyYXdXaW5kb3cgICh2b2lkKSB7IHJldHVy biAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZpcnN0V2luZG93ICAodm9pZCkgeyBy ZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXhpdFdpbmRvd0lEICAodm9p ZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZW50ZXJXaW5kb3dJ RCAgKHZvaWQpIHsgcmV0dXJuICAyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2V4aXRl ZFdpbmRvd0lEICAodm9pZCkgeyByZXR1cm4gIDI0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfZ1N0YXRlICAodm9pZCkgeyByZXR1cm4gIDI4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfZXZlbnRRICAodm9pZCkgeyByZXR1cm4gIDQ4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfZXZlbnRRSW5kZXggICh2b2lkKSB7IHJldHVybiAgNTIgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9ldmVudFFMZW5ndGggICh2b2lkKSB7IHJldHVybiAgNTQgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9sYXN0U2NyZWVuWCAgKHZvaWQpIHsgcmV0dXJuICA1NiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2xhc3RTY3JlZW5ZICAodm9pZCkgeyByZXR1cm4gIDU4IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbGFzdFBlbkRvd24gICh2b2lkKSB7IHJldHVybiAgNjAg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9fdW51c2VkMSAgKHZvaWQpIHsgcmV0dXJuICA2 MSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25lZWROdWxsVGlja0NvdW50ICAodm9pZCkg eyByZXR1cm4gIDYyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlDdXJyZW50Rm9udFB0 ciAgKHZvaWQpIHsgcmV0dXJuICA2NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpRm9u dFRhYmxlICAodm9pZCkgeyByZXR1cm4gIDcwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf dWlDdXJyZW50Rm9udElEICAodm9pZCkgeyByZXR1cm4gIDk4IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfX3VudXNlZDIgICh2b2lkKSB7IHJldHVybiAgOTkgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9jdXJyZW50Rm9ybSAgKHZvaWQpIHsgcmV0dXJuICAxMDAgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9pbnNQdElzRW5hYmxlZCAgKHZvaWQpIHsgcmV0dXJuICAxMDQgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbnNQdE9uICAodm9pZCkgeyByZXR1cm4gIDEwNSA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0TG9jICAodm9pZCkgeyByZXR1cm4gIDEw NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0SGVpZ2h0ICAodm9pZCkgeyByZXR1 cm4gIDExMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0TGFzdFRpY2sgICh2b2lk KSB7IHJldHVybiAgMTEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5zUHRCaXRzQmVo aW5kICAodm9pZCkgeyByZXR1cm4gIDExNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Ns aXBib2FyZCAgKHZvaWQpIHsgcmV0dXJuICAxMjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl91aUN1cnJlbnRNZW51ICAodm9pZCkgeyByZXR1cm4gIDEzOCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3VpQ3VycmVudE1lbnVSc2NJRCAgKHZvaWQpIHsgcmV0dXJuICAxNDIgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl91bmRvR2xvYmFscyAgKHZvaWQpIHsgcmV0dXJuICAxNDQg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9nc2lTdGF0ZSAgKHZvaWQpIHsgcmV0dXJuICAx NTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9nc2lJc0VuYWJsZWQgICh2b2lkKSB7IHJl dHVybiAgMTU3IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ3NpTG9jYXRpb24gICh2b2lk KSB7IHJldHVybiAgMTU4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlEZWNpbWFsU2Vw YXJhdG9yICAodm9pZCkgeyByZXR1cm4gIDE2MiA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFz cyBBPgljbGFzcyBFbUFsaWFzVUlHbG9iYWxzVHlwZVYzICAJewlwdWJsaWM6CXR5cGVkZWYgdHlw ZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNVSUdsb2JhbHNUeXBlVjMgIAkocHRy X3R5cGUpOwlFbUFsaWFzVUlHbG9iYWxzVHlwZVYzICAJKGNvbnN0IEVtQWxpYXNVSUdsb2JhbHNU eXBlVjMgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsg fQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAxNjMgIDsgfQlF bUFsaWFzVUlHbG9iYWxzVHlwZVYzICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1VJR2xv YmFsc1R5cGVWMyAgPEE+Jik7CUVtQWxpYXNVSUdsb2JhbHNUeXBlVjMgIDxBPglvcGVyYXRvcltd IChpbnQpOwljb25zdCBFbUFsaWFzVUlHbG9iYWxzVHlwZVYzICA8QT4Jb3BlcmF0b3JbXSAoaW50 KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1VJR2xvYmFsc1R5cGVWMyAgCSh2b2lkKTsJcHRyX3R5 cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWFjdGl2ZVdp bmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWRpc3BsYXlXaW5kb3cgOyAJIEVtQWxp YXNlbXVwdHIgPEE+CSAJCQkJCQlkcmF3V2luZG93IDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJ CQkJZmlyc3RXaW5kb3cgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlleGl0V2luZG93SUQg OyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQllbnRlcldpbmRvd0lEIDsgCSBFbUFsaWFzZW11 cHRyIDxBPgkgCQkJCQkJZXhpdGVkV2luZG93SUQgOyAJIEVtQWxpYXNHcmFwaGljU3RhdGVUeXBl VjIgPEE+CSAJCQlnU3RhdGUgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlldmVudFEgOyAJ IEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlldmVudFFJbmRleCA7IAkgRW1BbGlhc1VJbnQxNiA8 QT4JIAkJCQkJCWV2ZW50UUxlbmd0aCA7IAkgRW1BbGlhc0ludDE2IDxBPgkgCQkJCQkJbGFzdFNj cmVlblggOyAJIEVtQWxpYXNJbnQxNiA8QT4JIAkJCQkJCWxhc3RTY3JlZW5ZIDsgCSBFbUFsaWFz Qm9vbGVhbiA8QT4JIAkJCQkJbGFzdFBlbkRvd24gOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJ CV91bnVzZWQxIDsgCSBFbUFsaWFzSW50MzIgPEE+CSAJCQkJCQluZWVkTnVsbFRpY2tDb3VudCA7 IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXVpQ3VycmVudEZvbnRQdHIgOyAJIEVtQWxpYXNl bXVwdHIgPEE+CSAJCQkJCQl1aVN5c0ZvbnRUYWJsZVB0ciA7IAkgRW1BbGlhc2VtdXB0ciA8QT4J IAkJCQkJCXVpQXBwRm9udFRhYmxlUHRyIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJdWlO dW1TeXNGb250cyA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXVpTnVtQXBwRm9udHMgOyAJ IEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQl1aVVudXNlZDEgOyAJIEVtQWxpYXNVSW50MzIgPEE+ CSAJCQkJCQl1aVVudXNlZDIgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXVpQ3VycmVudEZv bnRJRCA7IAkgRW1BbGlhc0ludDE2IDxBPgkgCQkJCQkJX3VudXNlZDIgOyAJIEVtQWxpYXNlbXVw dHIgPEE+CSAJCQkJCQljdXJyZW50Rm9ybSA7IAkgRW1BbGlhc0Jvb2xlYW4gPEE+CSAJCQkJCWlu c1B0SXNFbmFibGVkIDsgCSBFbUFsaWFzQm9vbGVhbiA8QT4JIAkJCQkJaW5zUHRPbiA7IAkgRW1B bGlhc1BvaW50VHlwZSA8QT4JIAkJCQkJaW5zUHRMb2MgOyAJIEVtQWxpYXNJbnQxNiA8QT4JIAkJ CQkJCWluc1B0SGVpZ2h0IDsgCSBFbUFsaWFzSW50MzIgPEE+CSAJCQkJCQlpbnNQdExhc3RUaWNr IDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJaW5zUHRCaXRzQmVoaW5kIDsgCSBFbUFsaWFz Q2xpcGJvYXJkSXRlbSA8QT4JIAkJCQljbGlwYm9hcmQgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJ CQkJCQl1aUN1cnJlbnRNZW51IDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJdWlDdXJyZW50 TWVudVJzY0lEIDsgCSBFbUFsaWFzRmllbGRVbmRvVHlwZSA8QT4JIAkJCQl1bmRvR2xvYmFscyA7 IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJZ3NpU3RhdGUgOyAJIEVtQWxpYXNCb29sZWFuIDxB PgkgCQkJCQlnc2lJc0VuYWJsZWQgOyAJIEVtQWxpYXNQb2ludFR5cGUgPEE+CSAJCQkJCWdzaUxv Y2F0aW9uIDsgCSBFbUFsaWFzQ2hhciA8QT4JIAkJCQkJCXVpRGVjaW1hbFNlcGFyYXRvciA7ICAJ ICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2FjdGl2ZVdpbmRvdyAgKHZvaWQpIHsgcmV0dXJu ICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGlzcGxheVdpbmRvdyAgKHZvaWQpIHsg cmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZHJhd1dpbmRvdyAgKHZvaWQp IHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmlyc3RXaW5kb3cgICh2 b2lkKSB7IHJldHVybiAgMTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9leGl0V2luZG93 SUQgICh2b2lkKSB7IHJldHVybiAgMTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9lbnRl cldpbmRvd0lEICAodm9pZCkgeyByZXR1cm4gIDIwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfZXhpdGVkV2luZG93SUQgICh2b2lkKSB7IHJldHVybiAgMjQgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9nU3RhdGUgICh2b2lkKSB7IHJldHVybiAgMjggOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9ldmVudFEgICh2b2lkKSB7IHJldHVybiAgNTYgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9ldmVudFFJbmRleCAgKHZvaWQpIHsgcmV0dXJuICA2MCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2V2ZW50UUxlbmd0aCAgKHZvaWQpIHsgcmV0dXJuICA2MiA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2xhc3RTY3JlZW5YICAodm9pZCkgeyByZXR1cm4gIDY0IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbGFzdFNjcmVlblkgICh2b2lkKSB7IHJldHVybiAg NjYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9sYXN0UGVuRG93biAgKHZvaWQpIHsgcmV0 dXJuICA2OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX191bnVzZWQxICAodm9pZCkgeyBy ZXR1cm4gIDY5IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmVlZE51bGxUaWNrQ291bnQg ICh2b2lkKSB7IHJldHVybiAgNzAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUN1cnJl bnRGb250UHRyICAodm9pZCkgeyByZXR1cm4gIDc0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfdWlTeXNGb250VGFibGVQdHIgICh2b2lkKSB7IHJldHVybiAgNzggOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl91aUFwcEZvbnRUYWJsZVB0ciAgKHZvaWQpIHsgcmV0dXJuICA4MiA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpTnVtU3lzRm9udHMgICh2b2lkKSB7IHJldHVybiAg ODYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aU51bUFwcEZvbnRzICAodm9pZCkgeyBy ZXR1cm4gIDg4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlVbnVzZWQxICAodm9pZCkg eyByZXR1cm4gIDkwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlVbnVzZWQyICAodm9p ZCkgeyByZXR1cm4gIDk0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlDdXJyZW50Rm9u dElEICAodm9pZCkgeyByZXR1cm4gIDk4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX3Vu dXNlZDIgICh2b2lkKSB7IHJldHVybiAgOTkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9j dXJyZW50Rm9ybSAgKHZvaWQpIHsgcmV0dXJuICAxMDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9pbnNQdElzRW5hYmxlZCAgKHZvaWQpIHsgcmV0dXJuICAxMDQgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9pbnNQdE9uICAodm9pZCkgeyByZXR1cm4gIDEwNSA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2luc1B0TG9jICAodm9pZCkgeyByZXR1cm4gIDEwNiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0SGVpZ2h0ICAodm9pZCkgeyByZXR1cm4gIDExMCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0TGFzdFRpY2sgICh2b2lkKSB7IHJldHVybiAg MTEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5zUHRCaXRzQmVoaW5kICAodm9pZCkg eyByZXR1cm4gIDExNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NsaXBib2FyZCAgKHZv aWQpIHsgcmV0dXJuICAxMjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUN1cnJlbnRN ZW51ICAodm9pZCkgeyByZXR1cm4gIDEzOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Vp Q3VycmVudE1lbnVSc2NJRCAgKHZvaWQpIHsgcmV0dXJuICAxNDIgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl91bmRvR2xvYmFscyAgKHZvaWQpIHsgcmV0dXJuICAxNDQgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9nc2lTdGF0ZSAgKHZvaWQpIHsgcmV0dXJuICAxNTYgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9nc2lJc0VuYWJsZWQgICh2b2lkKSB7IHJldHVybiAgMTU3IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ3NpTG9jYXRpb24gICh2b2lkKSB7IHJldHVybiAg MTU4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlEZWNpbWFsU2VwYXJhdG9yICAodm9p ZCkgeyByZXR1cm4gIDE2MiA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVVJR2xvYmFsc1R5cGVWMyAg CXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5VUlHbG9iYWxzVHlwZVYz ICAJKHZvaWQpOwlFbVByb3h5VUlHbG9iYWxzVHlwZVYzICAJKGNvbnN0IEVtUHJveHlVSUdsb2Jh bHNUeXBlVjMgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0 cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsg cmV0dXJuICAgICAxNjMgIDsgfQlFbVByb3h5VUlHbG9iYWxzVHlwZVYzICAmCQlvcGVyYXRvcj0g KGNvbnN0IEVtUHJveHlVSUdsb2JhbHNUeXBlVjMgICYpOwlFbUFsaWFzVUlHbG9iYWxzVHlwZVYz ICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzVUlHbG9iYWxzVHlwZVYzICA8 TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5 dGVzWyAgICAxNjMgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNlbXVwdHIg PExBUz4JIAkJCQkJCWFjdGl2ZVdpbmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJ ZGlzcGxheVdpbmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZHJhd1dpbmRvdyA7 IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZmlyc3RXaW5kb3cgOyAJIEVtQWxpYXNlbXVw dHIgPExBUz4JIAkJCQkJCWV4aXRXaW5kb3dJRCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJ CQkJZW50ZXJXaW5kb3dJRCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZXhpdGVkV2lu ZG93SUQgOyAJIEVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjIgPExBUz4JIAkJCWdTdGF0ZSA7IAkg RW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZXZlbnRRIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+ CSAJCQkJCQlldmVudFFJbmRleCA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJZXZlbnRR TGVuZ3RoIDsgCSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCWxhc3RTY3JlZW5YIDsgCSBFbUFs aWFzSW50MTYgPExBUz4JIAkJCQkJCWxhc3RTY3JlZW5ZIDsgCSBFbUFsaWFzQm9vbGVhbiA8TEFT PgkgCQkJCQlsYXN0UGVuRG93biA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlfdW51c2Vk MSA7IAkgRW1BbGlhc0ludDMyIDxMQVM+CSAJCQkJCQluZWVkTnVsbFRpY2tDb3VudCA7IAkgRW1B bGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJdWlDdXJyZW50Rm9udFB0ciA7IAkgRW1BbGlhc2VtdXB0 ciA8TEFTPgkgCQkJCQkJdWlTeXNGb250VGFibGVQdHIgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4J IAkJCQkJCXVpQXBwRm9udFRhYmxlUHRyIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQl1 aU51bVN5c0ZvbnRzIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQl1aU51bUFwcEZvbnRz IDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQl1aVVudXNlZDEgOyAJIEVtQWxpYXNVSW50 MzIgPExBUz4JIAkJCQkJCXVpVW51c2VkMiA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQl1 aUN1cnJlbnRGb250SUQgOyAJIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJX3VudXNlZDIgOyAJ IEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWN1cnJlbnRGb3JtIDsgCSBFbUFsaWFzQm9vbGVh biA8TEFTPgkgCQkJCQlpbnNQdElzRW5hYmxlZCA7IAkgRW1BbGlhc0Jvb2xlYW4gPExBUz4JIAkJ CQkJaW5zUHRPbiA7IAkgRW1BbGlhc1BvaW50VHlwZSA8TEFTPgkgCQkJCQlpbnNQdExvYyA7IAkg RW1BbGlhc0ludDE2IDxMQVM+CSAJCQkJCQlpbnNQdEhlaWdodCA7IAkgRW1BbGlhc0ludDMyIDxM QVM+CSAJCQkJCQlpbnNQdExhc3RUaWNrIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlp bnNQdEJpdHNCZWhpbmQgOyAJIEVtQWxpYXNDbGlwYm9hcmRJdGVtIDxMQVM+CSAJCQkJY2xpcGJv YXJkIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQl1aUN1cnJlbnRNZW51IDsgCSBFbUFs aWFzVUludDE2IDxMQVM+CSAJCQkJCQl1aUN1cnJlbnRNZW51UnNjSUQgOyAJIEVtQWxpYXNGaWVs ZFVuZG9UeXBlIDxMQVM+CSAJCQkJdW5kb0dsb2JhbHMgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkg CQkJCQkJZ3NpU3RhdGUgOyAJIEVtQWxpYXNCb29sZWFuIDxMQVM+CSAJCQkJCWdzaUlzRW5hYmxl ZCA7IAkgRW1BbGlhc1BvaW50VHlwZSA8TEFTPgkgCQkJCQlnc2lMb2NhdGlvbiA7IAkgRW1BbGlh c0NoYXIgPExBUz4JIAkJCQkJCXVpRGVjaW1hbFNlcGFyYXRvciA7ICAJICAgICBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2FjdGl2ZVdpbmRvdyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfZGlzcGxheVdpbmRvdyAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZHJhd1dpbmRvdyAgKHZvaWQpIHsgcmV0dXJuICA4IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmlyc3RXaW5kb3cgICh2b2lkKSB7IHJldHVybiAg MTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9leGl0V2luZG93SUQgICh2b2lkKSB7IHJl dHVybiAgMTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9lbnRlcldpbmRvd0lEICAodm9p ZCkgeyByZXR1cm4gIDIwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXhpdGVkV2luZG93 SUQgICh2b2lkKSB7IHJldHVybiAgMjQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9nU3Rh dGUgICh2b2lkKSB7IHJldHVybiAgMjggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9ldmVu dFEgICh2b2lkKSB7IHJldHVybiAgNTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9ldmVu dFFJbmRleCAgKHZvaWQpIHsgcmV0dXJuICA2MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2V2ZW50UUxlbmd0aCAgKHZvaWQpIHsgcmV0dXJuICA2MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2xhc3RTY3JlZW5YICAodm9pZCkgeyByZXR1cm4gIDY0IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfbGFzdFNjcmVlblkgICh2b2lkKSB7IHJldHVybiAgNjYgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9sYXN0UGVuRG93biAgKHZvaWQpIHsgcmV0dXJuICA2OCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX191bnVzZWQxICAodm9pZCkgeyByZXR1cm4gIDY5IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmVlZE51bGxUaWNrQ291bnQgICh2b2lkKSB7IHJldHVy biAgNzAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUN1cnJlbnRGb250UHRyICAodm9p ZCkgeyByZXR1cm4gIDc0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlTeXNGb250VGFi bGVQdHIgICh2b2lkKSB7IHJldHVybiAgNzggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91 aUFwcEZvbnRUYWJsZVB0ciAgKHZvaWQpIHsgcmV0dXJuICA4MiA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3VpTnVtU3lzRm9udHMgICh2b2lkKSB7IHJldHVybiAgODYgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl91aU51bUFwcEZvbnRzICAodm9pZCkgeyByZXR1cm4gIDg4IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlVbnVzZWQxICAodm9pZCkgeyByZXR1cm4gIDkwIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlVbnVzZWQyICAodm9pZCkgeyByZXR1cm4gIDk0 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlDdXJyZW50Rm9udElEICAodm9pZCkgeyBy ZXR1cm4gIDk4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX3VudXNlZDIgICh2b2lkKSB7 IHJldHVybiAgOTkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jdXJyZW50Rm9ybSAgKHZv aWQpIHsgcmV0dXJuICAxMDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbnNQdElzRW5h YmxlZCAgKHZvaWQpIHsgcmV0dXJuICAxMDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9p bnNQdE9uICAodm9pZCkgeyByZXR1cm4gIDEwNSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2luc1B0TG9jICAodm9pZCkgeyByZXR1cm4gIDEwNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2luc1B0SGVpZ2h0ICAodm9pZCkgeyByZXR1cm4gIDExMCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2luc1B0TGFzdFRpY2sgICh2b2lkKSB7IHJldHVybiAgMTEyIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfaW5zUHRCaXRzQmVoaW5kICAodm9pZCkgeyByZXR1cm4gIDExNiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NsaXBib2FyZCAgKHZvaWQpIHsgcmV0dXJuICAx MjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUN1cnJlbnRNZW51ICAodm9pZCkgeyBy ZXR1cm4gIDEzOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpQ3VycmVudE1lbnVSc2NJ RCAgKHZvaWQpIHsgcmV0dXJuICAxNDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91bmRv R2xvYmFscyAgKHZvaWQpIHsgcmV0dXJuICAxNDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9nc2lTdGF0ZSAgKHZvaWQpIHsgcmV0dXJuICAxNTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9nc2lJc0VuYWJsZWQgICh2b2lkKSB7IHJldHVybiAgMTU3IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfZ3NpTG9jYXRpb24gICh2b2lkKSB7IHJldHVybiAgMTU4IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfdWlEZWNpbWFsU2VwYXJhdG9yICAodm9pZCkgeyByZXR1cm4gIDE2 MiA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzVUlHbG9iYWxz VHlwZVYzMSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBl OwlFbUFsaWFzVUlHbG9iYWxzVHlwZVYzMSAgCShwdHJfdHlwZSk7CUVtQWxpYXNVSUdsb2JhbHNU eXBlVjMxICAJKGNvbnN0IEVtQWxpYXNVSUdsb2JhbHNUeXBlVjMxICAmKTsJcHRyX3R5cGUJCQlH ZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6 ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTYzICA7IH0JRW1BbGlhc1VJR2xvYmFsc1R5cGVWMzEg IDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzVUlHbG9iYWxzVHlwZVYzMSAgPEE+Jik7CUVt QWxpYXNVSUdsb2JhbHNUeXBlVjMxICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlh c1VJR2xvYmFsc1R5cGVWMzEgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglF bUFsaWFzVUlHbG9iYWxzVHlwZVYzMSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6 CSAgICAgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWFjdGl2ZVdpbmRvdyA7IAkgRW1BbGlhc2Vt dXB0ciA8QT4JIAkJCQkJCWRpc3BsYXlXaW5kb3cgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJ CQlkcmF3V2luZG93IDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJZmlyc3RXaW5kb3cgOyAJ IEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlleGl0V2luZG93SUQgOyAJIEVtQWxpYXNlbXVwdHIg PEE+CSAJCQkJCQllbnRlcldpbmRvd0lEIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJZXhp dGVkV2luZG93SUQgOyAJIEVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjIgPEE+CSAJCQlnU3RhdGUg OyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlldmVudFEgOyAJIEVtQWxpYXNVSW50MTYgPEE+ CSAJCQkJCQlldmVudFFJbmRleCA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWV2ZW50UUxl bmd0aCA7IAkgRW1BbGlhc0ludDE2IDxBPgkgCQkJCQkJbGFzdFNjcmVlblggOyAJIEVtQWxpYXNJ bnQxNiA8QT4JIAkJCQkJCWxhc3RTY3JlZW5ZIDsgCSBFbUFsaWFzQm9vbGVhbiA8QT4JIAkJCQkJ bGFzdFBlbkRvd24gOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCV91bnVzZWQxIDsgCSBFbUFs aWFzSW50MzIgPEE+CSAJCQkJCQluZWVkTnVsbFRpY2tDb3VudCA7IAkgRW1BbGlhc2VtdXB0ciA8 QT4JIAkJCQkJCXVpQ3VycmVudEZvbnRQdHIgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQl1 aVN5c0ZvbnRUYWJsZVB0ciA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXVpQXBwRm9udFRh YmxlUHRyIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJdWlOdW1TeXNGb250cyA7IAkgRW1B bGlhc1VJbnQxNiA8QT4JIAkJCQkJCXVpTnVtQXBwRm9udHMgOyAJIEVtQWxpYXNVSW50MzIgPEE+ CSAJCQkJCQl1aUZvbnRMaXN0UHRyIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJdWlVbnVz ZWQyIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQl1aUN1cnJlbnRGb250SUQgOyAJIEVtQWxp YXNJbnQxNiA8QT4JIAkJCQkJCV91bnVzZWQyIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJ Y3VycmVudEZvcm0gOyAJIEVtQWxpYXNCb29sZWFuIDxBPgkgCQkJCQlpbnNQdElzRW5hYmxlZCA7 IAkgRW1BbGlhc0Jvb2xlYW4gPEE+CSAJCQkJCWluc1B0T24gOyAJIEVtQWxpYXNQb2ludFR5cGUg PEE+CSAJCQkJCWluc1B0TG9jIDsgCSBFbUFsaWFzSW50MTYgPEE+CSAJCQkJCQlpbnNQdEhlaWdo dCA7IAkgRW1BbGlhc0ludDMyIDxBPgkgCQkJCQkJaW5zUHRMYXN0VGljayA7IAkgRW1BbGlhc2Vt dXB0ciA8QT4JIAkJCQkJCWluc1B0Qml0c0JlaGluZCA7IAkgRW1BbGlhc0NsaXBib2FyZEl0ZW0g PEE+CSAJCQkJY2xpcGJvYXJkIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJdWlDdXJyZW50 TWVudSA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXVpQ3VycmVudE1lbnVSc2NJRCA7IAkg RW1BbGlhc0ZpZWxkVW5kb1R5cGUgPEE+CSAJCQkJdW5kb0dsb2JhbHMgOyAJIEVtQWxpYXNVSW50 OCA8QT4JIAkJCQkJCWdzaVN0YXRlIDsgCSBFbUFsaWFzQm9vbGVhbiA8QT4JIAkJCQkJZ3NpSXNF bmFibGVkIDsgCSBFbUFsaWFzUG9pbnRUeXBlIDxBPgkgCQkJCQlnc2lMb2NhdGlvbiA7IAkgRW1B bGlhc0NoYXIgPEE+CSAJCQkJCQl1aURlY2ltYWxTZXBhcmF0b3IgOyAgCSAgICAgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9hY3RpdmVXaW5kb3cgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2Rpc3BsYXlXaW5kb3cgICh2b2lkKSB7IHJldHVybiAgNCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RyYXdXaW5kb3cgICh2b2lkKSB7IHJldHVybiAgOCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZpcnN0V2luZG93ICAodm9pZCkgeyByZXR1cm4g IDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXhpdFdpbmRvd0lEICAodm9pZCkgeyBy ZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZW50ZXJXaW5kb3dJRCAgKHZv aWQpIHsgcmV0dXJuICAyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2V4aXRlZFdpbmRv d0lEICAodm9pZCkgeyByZXR1cm4gIDI0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ1N0 YXRlICAodm9pZCkgeyByZXR1cm4gIDI4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXZl bnRRICAodm9pZCkgeyByZXR1cm4gIDU2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXZl bnRRSW5kZXggICh2b2lkKSB7IHJldHVybiAgNjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9ldmVudFFMZW5ndGggICh2b2lkKSB7IHJldHVybiAgNjIgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9sYXN0U2NyZWVuWCAgKHZvaWQpIHsgcmV0dXJuICA2NCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2xhc3RTY3JlZW5ZICAodm9pZCkgeyByZXR1cm4gIDY2IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfbGFzdFBlbkRvd24gICh2b2lkKSB7IHJldHVybiAgNjggOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9fdW51c2VkMSAgKHZvaWQpIHsgcmV0dXJuICA2OSA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25lZWROdWxsVGlja0NvdW50ICAodm9pZCkgeyByZXR1 cm4gIDcwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlDdXJyZW50Rm9udFB0ciAgKHZv aWQpIHsgcmV0dXJuICA3NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpU3lzRm9udFRh YmxlUHRyICAodm9pZCkgeyByZXR1cm4gIDc4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf dWlBcHBGb250VGFibGVQdHIgICh2b2lkKSB7IHJldHVybiAgODIgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl91aU51bVN5c0ZvbnRzICAodm9pZCkgeyByZXR1cm4gIDg2IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfdWlOdW1BcHBGb250cyAgKHZvaWQpIHsgcmV0dXJuICA4OCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpRm9udExpc3RQdHIgICh2b2lkKSB7IHJldHVybiAg OTAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aVVudXNlZDIgICh2b2lkKSB7IHJldHVy biAgOTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUN1cnJlbnRGb250SUQgICh2b2lk KSB7IHJldHVybiAgOTggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9fdW51c2VkMiAgKHZv aWQpIHsgcmV0dXJuICA5OSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2N1cnJlbnRGb3Jt ICAodm9pZCkgeyByZXR1cm4gIDEwMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0 SXNFbmFibGVkICAodm9pZCkgeyByZXR1cm4gIDEwNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2luc1B0T24gICh2b2lkKSB7IHJldHVybiAgMTA1IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfaW5zUHRMb2MgICh2b2lkKSB7IHJldHVybiAgMTA2IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfaW5zUHRIZWlnaHQgICh2b2lkKSB7IHJldHVybiAgMTEwIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfaW5zUHRMYXN0VGljayAgKHZvaWQpIHsgcmV0dXJuICAxMTIgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbnNQdEJpdHNCZWhpbmQgICh2b2lkKSB7IHJldHVybiAg MTE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY2xpcGJvYXJkICAodm9pZCkgeyByZXR1 cm4gIDEyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpQ3VycmVudE1lbnUgICh2b2lk KSB7IHJldHVybiAgMTM4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlDdXJyZW50TWVu dVJzY0lEICAodm9pZCkgeyByZXR1cm4gIDE0MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3VuZG9HbG9iYWxzICAodm9pZCkgeyByZXR1cm4gIDE0NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2dzaVN0YXRlICAodm9pZCkgeyByZXR1cm4gIDE1NiA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2dzaUlzRW5hYmxlZCAgKHZvaWQpIHsgcmV0dXJuICAxNTcgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9nc2lMb2NhdGlvbiAgKHZvaWQpIHsgcmV0dXJuICAxNTggOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl91aURlY2ltYWxTZXBhcmF0b3IgICh2b2lkKSB7IHJldHVy biAgMTYyIDsgfSAgCX07IAljbGFzcyBFbVByb3h5VUlHbG9iYWxzVHlwZVYzMSAgCXsJcHVibGlj Ogl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5VUlHbG9iYWxzVHlwZVYzMSAgCSh2b2lk KTsJRW1Qcm94eVVJR2xvYmFsc1R5cGVWMzEgIAkoY29uc3QgRW1Qcm94eVVJR2xvYmFsc1R5cGVW MzEgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBl KSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJu ICAgICAxNjMgIDsgfQlFbVByb3h5VUlHbG9iYWxzVHlwZVYzMSAgJgkJb3BlcmF0b3I9IChjb25z dCBFbVByb3h5VUlHbG9iYWxzVHlwZVYzMSAgJik7CUVtQWxpYXNVSUdsb2JhbHNUeXBlVjMxICA8 TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzVUlHbG9iYWxzVHlwZVYzMSAgPExB Uz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRl c1sgICAgMTYzICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzZW11cHRyIDxM QVM+CSAJCQkJCQlhY3RpdmVXaW5kb3cgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWRp c3BsYXlXaW5kb3cgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWRyYXdXaW5kb3cgOyAJ IEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWZpcnN0V2luZG93IDsgCSBFbUFsaWFzZW11cHRy IDxMQVM+CSAJCQkJCQlleGl0V2luZG93SUQgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJ CWVudGVyV2luZG93SUQgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWV4aXRlZFdpbmRv d0lEIDsgCSBFbUFsaWFzR3JhcGhpY1N0YXRlVHlwZVYyIDxMQVM+CSAJCQlnU3RhdGUgOyAJIEVt QWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWV2ZW50USA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkg CQkJCQkJZXZlbnRRSW5kZXggOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWV2ZW50UUxl bmd0aCA7IAkgRW1BbGlhc0ludDE2IDxMQVM+CSAJCQkJCQlsYXN0U2NyZWVuWCA7IAkgRW1BbGlh c0ludDE2IDxMQVM+CSAJCQkJCQlsYXN0U2NyZWVuWSA7IAkgRW1BbGlhc0Jvb2xlYW4gPExBUz4J IAkJCQkJbGFzdFBlbkRvd24gOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJX3VudXNlZDEg OyAJIEVtQWxpYXNJbnQzMiA8TEFTPgkgCQkJCQkJbmVlZE51bGxUaWNrQ291bnQgOyAJIEVtQWxp YXNlbXVwdHIgPExBUz4JIAkJCQkJCXVpQ3VycmVudEZvbnRQdHIgOyAJIEVtQWxpYXNlbXVwdHIg PExBUz4JIAkJCQkJCXVpU3lzRm9udFRhYmxlUHRyIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJ CQkJCQl1aUFwcEZvbnRUYWJsZVB0ciA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJdWlO dW1TeXNGb250cyA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJdWlOdW1BcHBGb250cyA7 IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJdWlGb250TGlzdFB0ciA7IAkgRW1BbGlhc1VJ bnQzMiA8TEFTPgkgCQkJCQkJdWlVbnVzZWQyIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJ CXVpQ3VycmVudEZvbnRJRCA7IAkgRW1BbGlhc0ludDE2IDxMQVM+CSAJCQkJCQlfdW51c2VkMiA7 IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJY3VycmVudEZvcm0gOyAJIEVtQWxpYXNCb29s ZWFuIDxMQVM+CSAJCQkJCWluc1B0SXNFbmFibGVkIDsgCSBFbUFsaWFzQm9vbGVhbiA8TEFTPgkg CQkJCQlpbnNQdE9uIDsgCSBFbUFsaWFzUG9pbnRUeXBlIDxMQVM+CSAJCQkJCWluc1B0TG9jIDsg CSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCWluc1B0SGVpZ2h0IDsgCSBFbUFsaWFzSW50MzIg PExBUz4JIAkJCQkJCWluc1B0TGFzdFRpY2sgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJ CWluc1B0Qml0c0JlaGluZCA7IAkgRW1BbGlhc0NsaXBib2FyZEl0ZW0gPExBUz4JIAkJCQljbGlw Ym9hcmQgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXVpQ3VycmVudE1lbnUgOyAJIEVt QWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXVpQ3VycmVudE1lbnVSc2NJRCA7IAkgRW1BbGlhc0Zp ZWxkVW5kb1R5cGUgPExBUz4JIAkJCQl1bmRvR2xvYmFscyA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+ CSAJCQkJCQlnc2lTdGF0ZSA7IAkgRW1BbGlhc0Jvb2xlYW4gPExBUz4JIAkJCQkJZ3NpSXNFbmFi bGVkIDsgCSBFbUFsaWFzUG9pbnRUeXBlIDxMQVM+CSAJCQkJCWdzaUxvY2F0aW9uIDsgCSBFbUFs aWFzQ2hhciA8TEFTPgkgCQkJCQkJdWlEZWNpbWFsU2VwYXJhdG9yIDsgIAkgICAgIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfYWN0aXZlV2luZG93ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9kaXNwbGF5V2luZG93ICAodm9pZCkgeyByZXR1cm4gIDQgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kcmF3V2luZG93ICAodm9pZCkgeyByZXR1cm4gIDgg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9maXJzdFdpbmRvdyAgKHZvaWQpIHsgcmV0dXJu ICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2V4aXRXaW5kb3dJRCAgKHZvaWQpIHsg cmV0dXJuICAxNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2VudGVyV2luZG93SUQgICh2 b2lkKSB7IHJldHVybiAgMjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9leGl0ZWRXaW5k b3dJRCAgKHZvaWQpIHsgcmV0dXJuICAyNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dT dGF0ZSAgKHZvaWQpIHsgcmV0dXJuICAyOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2V2 ZW50USAgKHZvaWQpIHsgcmV0dXJuICA1NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2V2 ZW50UUluZGV4ICAodm9pZCkgeyByZXR1cm4gIDYwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfZXZlbnRRTGVuZ3RoICAodm9pZCkgeyByZXR1cm4gIDYyIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfbGFzdFNjcmVlblggICh2b2lkKSB7IHJldHVybiAgNjQgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9sYXN0U2NyZWVuWSAgKHZvaWQpIHsgcmV0dXJuICA2NiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2xhc3RQZW5Eb3duICAodm9pZCkgeyByZXR1cm4gIDY4IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX3VudXNlZDEgICh2b2lkKSB7IHJldHVybiAgNjkgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uZWVkTnVsbFRpY2tDb3VudCAgKHZvaWQpIHsgcmV0 dXJuICA3MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpQ3VycmVudEZvbnRQdHIgICh2 b2lkKSB7IHJldHVybiAgNzQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aVN5c0ZvbnRU YWJsZVB0ciAgKHZvaWQpIHsgcmV0dXJuICA3OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3VpQXBwRm9udFRhYmxlUHRyICAodm9pZCkgeyByZXR1cm4gIDgyIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfdWlOdW1TeXNGb250cyAgKHZvaWQpIHsgcmV0dXJuICA4NiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3VpTnVtQXBwRm9udHMgICh2b2lkKSB7IHJldHVybiAgODggOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUZvbnRMaXN0UHRyICAodm9pZCkgeyByZXR1cm4g IDkwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlVbnVzZWQyICAodm9pZCkgeyByZXR1 cm4gIDk0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlDdXJyZW50Rm9udElEICAodm9p ZCkgeyByZXR1cm4gIDk4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX3VudXNlZDIgICh2 b2lkKSB7IHJldHVybiAgOTkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jdXJyZW50Rm9y bSAgKHZvaWQpIHsgcmV0dXJuICAxMDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbnNQ dElzRW5hYmxlZCAgKHZvaWQpIHsgcmV0dXJuICAxMDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9pbnNQdE9uICAodm9pZCkgeyByZXR1cm4gIDEwNSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2luc1B0TG9jICAodm9pZCkgeyByZXR1cm4gIDEwNiA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2luc1B0SGVpZ2h0ICAodm9pZCkgeyByZXR1cm4gIDExMCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2luc1B0TGFzdFRpY2sgICh2b2lkKSB7IHJldHVybiAgMTEyIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5zUHRCaXRzQmVoaW5kICAodm9pZCkgeyByZXR1cm4g IDExNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NsaXBib2FyZCAgKHZvaWQpIHsgcmV0 dXJuICAxMjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUN1cnJlbnRNZW51ICAodm9p ZCkgeyByZXR1cm4gIDEzOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpQ3VycmVudE1l bnVSc2NJRCAgKHZvaWQpIHsgcmV0dXJuICAxNDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl91bmRvR2xvYmFscyAgKHZvaWQpIHsgcmV0dXJuICAxNDQgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9nc2lTdGF0ZSAgKHZvaWQpIHsgcmV0dXJuICAxNTYgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9nc2lJc0VuYWJsZWQgICh2b2lkKSB7IHJldHVybiAgMTU3IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfZ3NpTG9jYXRpb24gICh2b2lkKSB7IHJldHVybiAgMTU4IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlEZWNpbWFsU2VwYXJhdG9yICAodm9pZCkgeyByZXR1 cm4gIDE2MiA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzVUlH bG9iYWxzVHlwZVYzMiAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0 cl90eXBlOwlFbUFsaWFzVUlHbG9iYWxzVHlwZVYzMiAgCShwdHJfdHlwZSk7CUVtQWxpYXNVSUds b2JhbHNUeXBlVjMyICAJKGNvbnN0IEVtQWxpYXNVSUdsb2JhbHNUeXBlVjMyICAmKTsJcHRyX3R5 cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJ R2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTYzICA7IH0JRW1BbGlhc1VJR2xvYmFsc1R5 cGVWMzIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzVUlHbG9iYWxzVHlwZVYzMiAgPEE+ Jik7CUVtQWxpYXNVSUdsb2JhbHNUeXBlVjMyICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3Qg RW1BbGlhc1VJR2xvYmFsc1R5cGVWMzIgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2 YXRlOglFbUFsaWFzVUlHbG9iYWxzVHlwZVYzMiAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlw dWJsaWM6CSAgICAgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWFjdGl2ZVdpbmRvdyA7IAkgRW1B bGlhc2VtdXB0ciA8QT4JIAkJCQkJCWRpc3BsYXlXaW5kb3cgOyAJIEVtQWxpYXNlbXVwdHIgPEE+ CSAJCQkJCQlkcmF3V2luZG93IDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJZmlyc3RXaW5k b3cgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlleGl0V2luZG93SUQgOyAJIEVtQWxpYXNl bXVwdHIgPEE+CSAJCQkJCQllbnRlcldpbmRvd0lEIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJ CQkJZXhpdGVkV2luZG93SUQgOyAJIEVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjIgPEE+CSAJCQln U3RhdGUgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlldmVudFEgOyAJIEVtQWxpYXNVSW50 MTYgPEE+CSAJCQkJCQlldmVudFFJbmRleCA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWV2 ZW50UUxlbmd0aCA7IAkgRW1BbGlhc0ludDE2IDxBPgkgCQkJCQkJbGFzdFNjcmVlblggOyAJIEVt QWxpYXNJbnQxNiA8QT4JIAkJCQkJCWxhc3RTY3JlZW5ZIDsgCSBFbUFsaWFzQm9vbGVhbiA8QT4J IAkJCQkJbGFzdFBlbkRvd24gOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCV91bnVzZWQxIDsg CSBFbUFsaWFzSW50MzIgPEE+CSAJCQkJCQluZWVkTnVsbFRpY2tDb3VudCA7IAkgRW1BbGlhc2Vt dXB0ciA8QT4JIAkJCQkJCXVpQ3VycmVudEZvbnRQdHIgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJ CQkJCQl1aVN5c0ZvbnRUYWJsZVB0ciA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXVpQXBw Rm9udFRhYmxlUHRyIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJdWlOdW1TeXNGb250cyA7 IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXVpTnVtQXBwRm9udHMgOyAJIEVtQWxpYXNVSW50 MzIgPEE+CSAJCQkJCQl1aUZvbnRMaXN0UHRyIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJ cm9vdFdpbmRvdyA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJdWlDdXJyZW50Rm9udElEIDsg CSBFbUFsaWFzSW50MTYgPEE+CSAJCQkJCQlfdW51c2VkMiA7IAkgRW1BbGlhc2VtdXB0ciA8QT4J IAkJCQkJCWN1cnJlbnRGb3JtIDsgCSBFbUFsaWFzQm9vbGVhbiA8QT4JIAkJCQkJaW5zUHRJc0Vu YWJsZWQgOyAJIEVtQWxpYXNCb29sZWFuIDxBPgkgCQkJCQlpbnNQdE9uIDsgCSBFbUFsaWFzUG9p bnRUeXBlIDxBPgkgCQkJCQlpbnNQdExvYyA7IAkgRW1BbGlhc0ludDE2IDxBPgkgCQkJCQkJaW5z UHRIZWlnaHQgOyAJIEVtQWxpYXNJbnQzMiA8QT4JIAkJCQkJCWluc1B0TGFzdFRpY2sgOyAJIEVt QWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlpbnNQdEJpdHNCZWhpbmQgOyAJIEVtQWxpYXNDbGlwYm9h cmRJdGVtIDxBPgkgCQkJCWNsaXBib2FyZCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXVp Q3VycmVudE1lbnUgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQl1aUN1cnJlbnRNZW51UnNj SUQgOyAJIEVtQWxpYXNGaWVsZFVuZG9UeXBlIDxBPgkgCQkJCXVuZG9HbG9iYWxzIDsgCSBFbUFs aWFzVUludDggPEE+CSAJCQkJCQlnc2lTdGF0ZSA7IAkgRW1BbGlhc0Jvb2xlYW4gPEE+CSAJCQkJ CWdzaUlzRW5hYmxlZCA7IAkgRW1BbGlhc1BvaW50VHlwZSA8QT4JIAkJCQkJZ3NpTG9jYXRpb24g OyAJIEVtQWxpYXNDaGFyIDxBPgkgCQkJCQkJdWlEZWNpbWFsU2VwYXJhdG9yIDsgIAkgICAgIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYWN0aXZlV2luZG93ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kaXNwbGF5V2luZG93ICAodm9pZCkgeyByZXR1cm4g IDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kcmF3V2luZG93ICAodm9pZCkgeyByZXR1 cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9maXJzdFdpbmRvdyAgKHZvaWQpIHsg cmV0dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2V4aXRXaW5kb3dJRCAgKHZv aWQpIHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2VudGVyV2luZG93 SUQgICh2b2lkKSB7IHJldHVybiAgMjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9leGl0 ZWRXaW5kb3dJRCAgKHZvaWQpIHsgcmV0dXJuICAyNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2dTdGF0ZSAgKHZvaWQpIHsgcmV0dXJuICAyOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2V2ZW50USAgKHZvaWQpIHsgcmV0dXJuICA1NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2V2ZW50UUluZGV4ICAodm9pZCkgeyByZXR1cm4gIDYwIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfZXZlbnRRTGVuZ3RoICAodm9pZCkgeyByZXR1cm4gIDYyIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfbGFzdFNjcmVlblggICh2b2lkKSB7IHJldHVybiAgNjQgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9sYXN0U2NyZWVuWSAgKHZvaWQpIHsgcmV0dXJuICA2NiA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xhc3RQZW5Eb3duICAodm9pZCkgeyByZXR1cm4gIDY4 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX3VudXNlZDEgICh2b2lkKSB7IHJldHVybiAg NjkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uZWVkTnVsbFRpY2tDb3VudCAgKHZvaWQp IHsgcmV0dXJuICA3MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpQ3VycmVudEZvbnRQ dHIgICh2b2lkKSB7IHJldHVybiAgNzQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aVN5 c0ZvbnRUYWJsZVB0ciAgKHZvaWQpIHsgcmV0dXJuICA3OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3VpQXBwRm9udFRhYmxlUHRyICAodm9pZCkgeyByZXR1cm4gIDgyIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfdWlOdW1TeXNGb250cyAgKHZvaWQpIHsgcmV0dXJuICA4NiA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpTnVtQXBwRm9udHMgICh2b2lkKSB7IHJldHVybiAg ODggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUZvbnRMaXN0UHRyICAodm9pZCkgeyBy ZXR1cm4gIDkwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfcm9vdFdpbmRvdyAgKHZvaWQp IHsgcmV0dXJuICA5NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpQ3VycmVudEZvbnRJ RCAgKHZvaWQpIHsgcmV0dXJuICA5OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX191bnVz ZWQyICAodm9pZCkgeyByZXR1cm4gIDk5IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY3Vy cmVudEZvcm0gICh2b2lkKSB7IHJldHVybiAgMTAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfaW5zUHRJc0VuYWJsZWQgICh2b2lkKSB7IHJldHVybiAgMTA0IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfaW5zUHRPbiAgKHZvaWQpIHsgcmV0dXJuICAxMDUgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9pbnNQdExvYyAgKHZvaWQpIHsgcmV0dXJuICAxMDYgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9pbnNQdEhlaWdodCAgKHZvaWQpIHsgcmV0dXJuICAxMTAgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbnNQdExhc3RUaWNrICAodm9pZCkgeyByZXR1cm4gIDEx MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0Qml0c0JlaGluZCAgKHZvaWQpIHsg cmV0dXJuICAxMTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jbGlwYm9hcmQgICh2b2lk KSB7IHJldHVybiAgMTIwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlDdXJyZW50TWVu dSAgKHZvaWQpIHsgcmV0dXJuICAxMzggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUN1 cnJlbnRNZW51UnNjSUQgICh2b2lkKSB7IHJldHVybiAgMTQyIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfdW5kb0dsb2JhbHMgICh2b2lkKSB7IHJldHVybiAgMTQ0IDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfZ3NpU3RhdGUgICh2b2lkKSB7IHJldHVybiAgMTU2IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfZ3NpSXNFbmFibGVkICAodm9pZCkgeyByZXR1cm4gIDE1NyA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dzaUxvY2F0aW9uICAodm9pZCkgeyByZXR1cm4gIDE1 OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpRGVjaW1hbFNlcGFyYXRvciAgKHZvaWQp IHsgcmV0dXJuICAxNjIgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlVSUdsb2JhbHNUeXBlVjMyICAJ ewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlVSUdsb2JhbHNUeXBlVjMy ICAJKHZvaWQpOwlFbVByb3h5VUlHbG9iYWxzVHlwZVYzMiAgCShjb25zdCBFbVByb3h5VUlHbG9i YWxzVHlwZVYzMiAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAo cHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJ eyByZXR1cm4gICAgIDE2MyAgOyB9CUVtUHJveHlVSUdsb2JhbHNUeXBlVjMyICAmCQlvcGVyYXRv cj0gKGNvbnN0IEVtUHJveHlVSUdsb2JhbHNUeXBlVjMyICAmKTsJRW1BbGlhc1VJR2xvYmFsc1R5 cGVWMzIgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNVSUdsb2JhbHNUeXBl VjMyICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFy CQkJX2J5dGVzWyAgICAxNjMgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNl bXVwdHIgPExBUz4JIAkJCQkJCWFjdGl2ZVdpbmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkg CQkJCQkJZGlzcGxheVdpbmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZHJhd1dp bmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZmlyc3RXaW5kb3cgOyAJIEVtQWxp YXNlbXVwdHIgPExBUz4JIAkJCQkJCWV4aXRXaW5kb3dJRCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFT PgkgCQkJCQkJZW50ZXJXaW5kb3dJRCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZXhp dGVkV2luZG93SUQgOyAJIEVtQWxpYXNHcmFwaGljU3RhdGVUeXBlVjIgPExBUz4JIAkJCWdTdGF0 ZSA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZXZlbnRRIDsgCSBFbUFsaWFzVUludDE2 IDxMQVM+CSAJCQkJCQlldmVudFFJbmRleCA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJ ZXZlbnRRTGVuZ3RoIDsgCSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCWxhc3RTY3JlZW5YIDsg CSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCWxhc3RTY3JlZW5ZIDsgCSBFbUFsaWFzQm9vbGVh biA8TEFTPgkgCQkJCQlsYXN0UGVuRG93biA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlf dW51c2VkMSA7IAkgRW1BbGlhc0ludDMyIDxMQVM+CSAJCQkJCQluZWVkTnVsbFRpY2tDb3VudCA7 IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJdWlDdXJyZW50Rm9udFB0ciA7IAkgRW1BbGlh c2VtdXB0ciA8TEFTPgkgCQkJCQkJdWlTeXNGb250VGFibGVQdHIgOyAJIEVtQWxpYXNlbXVwdHIg PExBUz4JIAkJCQkJCXVpQXBwRm9udFRhYmxlUHRyIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJ CQkJCQl1aU51bVN5c0ZvbnRzIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQl1aU51bUFw cEZvbnRzIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQl1aUZvbnRMaXN0UHRyIDsgCSBF bUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlyb290V2luZG93IDsgCSBFbUFsaWFzVUludDggPExB Uz4JIAkJCQkJCXVpQ3VycmVudEZvbnRJRCA7IAkgRW1BbGlhc0ludDE2IDxMQVM+CSAJCQkJCQlf dW51c2VkMiA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJY3VycmVudEZvcm0gOyAJIEVt QWxpYXNCb29sZWFuIDxMQVM+CSAJCQkJCWluc1B0SXNFbmFibGVkIDsgCSBFbUFsaWFzQm9vbGVh biA8TEFTPgkgCQkJCQlpbnNQdE9uIDsgCSBFbUFsaWFzUG9pbnRUeXBlIDxMQVM+CSAJCQkJCWlu c1B0TG9jIDsgCSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCWluc1B0SGVpZ2h0IDsgCSBFbUFs aWFzSW50MzIgPExBUz4JIAkJCQkJCWluc1B0TGFzdFRpY2sgOyAJIEVtQWxpYXNlbXVwdHIgPExB Uz4JIAkJCQkJCWluc1B0Qml0c0JlaGluZCA7IAkgRW1BbGlhc0NsaXBib2FyZEl0ZW0gPExBUz4J IAkJCQljbGlwYm9hcmQgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXVpQ3VycmVudE1l bnUgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXVpQ3VycmVudE1lbnVSc2NJRCA7IAkg RW1BbGlhc0ZpZWxkVW5kb1R5cGUgPExBUz4JIAkJCQl1bmRvR2xvYmFscyA7IAkgRW1BbGlhc1VJ bnQ4IDxMQVM+CSAJCQkJCQlnc2lTdGF0ZSA7IAkgRW1BbGlhc0Jvb2xlYW4gPExBUz4JIAkJCQkJ Z3NpSXNFbmFibGVkIDsgCSBFbUFsaWFzUG9pbnRUeXBlIDxMQVM+CSAJCQkJCWdzaUxvY2F0aW9u IDsgCSBFbUFsaWFzQ2hhciA8TEFTPgkgCQkJCQkJdWlEZWNpbWFsU2VwYXJhdG9yIDsgIAkgICAg IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYWN0aXZlV2luZG93ICAodm9pZCkgeyByZXR1cm4gIDAg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kaXNwbGF5V2luZG93ICAodm9pZCkgeyByZXR1 cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kcmF3V2luZG93ICAodm9pZCkgeyBy ZXR1cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9maXJzdFdpbmRvdyAgKHZvaWQp IHsgcmV0dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2V4aXRXaW5kb3dJRCAg KHZvaWQpIHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2VudGVyV2lu ZG93SUQgICh2b2lkKSB7IHJldHVybiAgMjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9l eGl0ZWRXaW5kb3dJRCAgKHZvaWQpIHsgcmV0dXJuICAyNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2dTdGF0ZSAgKHZvaWQpIHsgcmV0dXJuICAyOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2V2ZW50USAgKHZvaWQpIHsgcmV0dXJuICA1NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2V2ZW50UUluZGV4ICAodm9pZCkgeyByZXR1cm4gIDYwIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfZXZlbnRRTGVuZ3RoICAodm9pZCkgeyByZXR1cm4gIDYyIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfbGFzdFNjcmVlblggICh2b2lkKSB7IHJldHVybiAgNjQgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9sYXN0U2NyZWVuWSAgKHZvaWQpIHsgcmV0dXJuICA2NiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xhc3RQZW5Eb3duICAodm9pZCkgeyByZXR1cm4g IDY4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX3VudXNlZDEgICh2b2lkKSB7IHJldHVy biAgNjkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uZWVkTnVsbFRpY2tDb3VudCAgKHZv aWQpIHsgcmV0dXJuICA3MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpQ3VycmVudEZv bnRQdHIgICh2b2lkKSB7IHJldHVybiAgNzQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91 aVN5c0ZvbnRUYWJsZVB0ciAgKHZvaWQpIHsgcmV0dXJuICA3OCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3VpQXBwRm9udFRhYmxlUHRyICAodm9pZCkgeyByZXR1cm4gIDgyIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlOdW1TeXNGb250cyAgKHZvaWQpIHsgcmV0dXJuICA4NiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpTnVtQXBwRm9udHMgICh2b2lkKSB7IHJldHVy biAgODggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUZvbnRMaXN0UHRyICAodm9pZCkg eyByZXR1cm4gIDkwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfcm9vdFdpbmRvdyAgKHZv aWQpIHsgcmV0dXJuICA5NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpQ3VycmVudEZv bnRJRCAgKHZvaWQpIHsgcmV0dXJuICA5OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX191 bnVzZWQyICAodm9pZCkgeyByZXR1cm4gIDk5IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf Y3VycmVudEZvcm0gICh2b2lkKSB7IHJldHVybiAgMTAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfaW5zUHRJc0VuYWJsZWQgICh2b2lkKSB7IHJldHVybiAgMTA0IDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfaW5zUHRPbiAgKHZvaWQpIHsgcmV0dXJuICAxMDUgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9pbnNQdExvYyAgKHZvaWQpIHsgcmV0dXJuICAxMDYgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9pbnNQdEhlaWdodCAgKHZvaWQpIHsgcmV0dXJuICAxMTAgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbnNQdExhc3RUaWNrICAodm9pZCkgeyByZXR1cm4g IDExMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0Qml0c0JlaGluZCAgKHZvaWQp IHsgcmV0dXJuICAxMTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jbGlwYm9hcmQgICh2 b2lkKSB7IHJldHVybiAgMTIwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlDdXJyZW50 TWVudSAgKHZvaWQpIHsgcmV0dXJuICAxMzggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91 aUN1cnJlbnRNZW51UnNjSUQgICh2b2lkKSB7IHJldHVybiAgMTQyIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfdW5kb0dsb2JhbHMgICh2b2lkKSB7IHJldHVybiAgMTQ0IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfZ3NpU3RhdGUgICh2b2lkKSB7IHJldHVybiAgMTU2IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ3NpSXNFbmFibGVkICAodm9pZCkgeyByZXR1cm4gIDE1NyA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dzaUxvY2F0aW9uICAodm9pZCkgeyByZXR1cm4g IDE1OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpRGVjaW1hbFNlcGFyYXRvciAgKHZv aWQpIHsgcmV0dXJuICAxNjIgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3Mg RW1BbGlhc1VJR2xvYmFsc1R5cGVWMzUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpw dHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc1VJR2xvYmFsc1R5cGVWMzUgIAkocHRyX3R5cGUpOwlF bUFsaWFzVUlHbG9iYWxzVHlwZVYzNSAgCShjb25zdCBFbUFsaWFzVUlHbG9iYWxzVHlwZVYzNSAg Jik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRp YyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDE2OCAgOyB9CUVtQWxpYXNV SUdsb2JhbHNUeXBlVjM1ICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1VJR2xvYmFsc1R5 cGVWMzUgIDxBPiYpOwlFbUFsaWFzVUlHbG9iYWxzVHlwZVYzNSAgPEE+CW9wZXJhdG9yW10gKGlu dCk7CWNvbnN0IEVtQWxpYXNVSUdsb2JhbHNUeXBlVjM1ICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBj b25zdDsJcHJpdmF0ZToJRW1BbGlhc1VJR2xvYmFsc1R5cGVWMzUgIAkodm9pZCk7CXB0cl90eXBl CQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlhY3RpdmVXaW5k b3cgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlkaXNwbGF5V2luZG93IDsgCSBFbUFsaWFz ZW11cHRyIDxBPgkgCQkJCQkJZHJhd1dpbmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJ CWZpcnN0V2luZG93IDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJZXhpdFdpbmRvd0lEIDsg CSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJZW50ZXJXaW5kb3dJRCA7IAkgRW1BbGlhc2VtdXB0 ciA8QT4JIAkJCQkJCWV4aXRlZFdpbmRvd0lEIDsgCSBFbUFsaWFzR3JhcGhpY1N0YXRlVHlwZVYz IDxBPgkgCQkJZ1N0YXRlIDsgCSBFbUFsaWFzVUlDb2xvclN0YXRlVHlwZSA8QT4JIAkJCXVpY1N0 YXRlIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJbGFzdFRhcFRpbWUgOyAJIEVtQWxpYXNl bXVwdHIgPEE+CSAJCQkJCQlldmVudFEgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlldmVu dFFJbmRleCA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWV2ZW50UUxlbmd0aCA7IAkgRW1B bGlhc0ludDE2IDxBPgkgCQkJCQkJbGFzdFNjcmVlblggOyAJIEVtQWxpYXNJbnQxNiA8QT4JIAkJ CQkJCWxhc3RTY3JlZW5ZIDsgCSBFbUFsaWFzQm9vbGVhbiA8QT4JIAkJCQkJbGFzdFBlbkRvd24g OyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXRhcENvdW50IDsgCSBFbUFsaWFzSW50MzIgPEE+ CSAJCQkJCQluZWVkTnVsbFRpY2tDb3VudCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXVp Q3VycmVudEZvbnRQdHIgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQl1aVN5c0ZvbnRUYWJs ZVB0ciA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXVpQXBwRm9udFRhYmxlUHRyIDsgCSBF bUFsaWFzVUludDE2IDxBPgkgCQkJCQkJdWlOdW1TeXNGb250cyA7IAkgRW1BbGlhc1VJbnQxNiA8 QT4JIAkJCQkJCXVpTnVtQXBwRm9udHMgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQl1aUZv bnRMaXN0UHRyIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJcm9vdFdpbmRvdyA7IAkgRW1B bGlhc1VJbnQ4IDxBPgkgCQkJCQkJdWlDdXJyZW50Rm9udElEIDsgCSBFbUFsaWFzSW50MTYgPEE+ CSAJCQkJCQlhbGxGb3Jtc0Nsb3NpbmcgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQljdXJy ZW50Rm9ybSA7IAkgRW1BbGlhc0Jvb2xlYW4gPEE+CSAJCQkJCWluc1B0SXNFbmFibGVkIDsgCSBF bUFsaWFzQm9vbGVhbiA8QT4JIAkJCQkJaW5zUHRPbiA7IAkgRW1BbGlhc1BvaW50VHlwZSA8QT4J IAkJCQkJaW5zUHRMb2MgOyAJIEVtQWxpYXNJbnQxNiA8QT4JIAkJCQkJCWluc1B0SGVpZ2h0IDsg CSBFbUFsaWFzSW50MzIgPEE+CSAJCQkJCQlpbnNQdExhc3RUaWNrIDsgCSBFbUFsaWFzZW11cHRy IDxBPgkgCQkJCQkJaW5zUHRCaXRzQmVoaW5kIDsgCSBFbUFsaWFzQ2xpcGJvYXJkSXRlbSA8QT4J IAkJCQljbGlwYm9hcmQgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQl1aUN1cnJlbnRNZW51 IDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJdWlDdXJyZW50TWVudVJzY0lEIDsgCSBFbUFs aWFzRmllbGRVbmRvVHlwZSA8QT4JIAkJCQl1bmRvR2xvYmFscyA7IAkgRW1BbGlhc1VJbnQ4IDxB PgkgCQkJCQkJZ3NpU3RhdGUgOyAJIEVtQWxpYXNCb29sZWFuIDxBPgkgCQkJCQlnc2lJc0VuYWJs ZWQgOyAJIEVtQWxpYXNQb2ludFR5cGUgPEE+CSAJCQkJCWdzaUxvY2F0aW9uIDsgCSBFbUFsaWFz Q2hhciA8QT4JIAkJCQkJCXVpRGVjaW1hbFNlcGFyYXRvciA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkg CQkJCQkJdWlPcHRpb25zIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJbWVudUNtZEJhckN1 cnJlbnQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hY3RpdmVXaW5kb3cgICh2b2lk KSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Rpc3BsYXlXaW5kb3cg ICh2b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RyYXdXaW5k b3cgICh2b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZpcnN0 V2luZG93ICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf ZXhpdFdpbmRvd0lEICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfZW50ZXJXaW5kb3dJRCAgKHZvaWQpIHsgcmV0dXJuICAyMCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2V4aXRlZFdpbmRvd0lEICAodm9pZCkgeyByZXR1cm4gIDI0IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ1N0YXRlICAodm9pZCkgeyByZXR1cm4gIDI4IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWljU3RhdGUgICh2b2lkKSB7IHJldHVybiAgNDAgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9sYXN0VGFwVGltZSAgKHZvaWQpIHsgcmV0dXJuICA1MiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2V2ZW50USAgKHZvaWQpIHsgcmV0dXJuICA1NiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2V2ZW50UUluZGV4ICAodm9pZCkgeyByZXR1cm4g IDYwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXZlbnRRTGVuZ3RoICAodm9pZCkgeyBy ZXR1cm4gIDYyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbGFzdFNjcmVlblggICh2b2lk KSB7IHJldHVybiAgNjQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9sYXN0U2NyZWVuWSAg KHZvaWQpIHsgcmV0dXJuICA2NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xhc3RQZW5E b3duICAodm9pZCkgeyByZXR1cm4gIDY4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdGFw Q291bnQgICh2b2lkKSB7IHJldHVybiAgNjkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9u ZWVkTnVsbFRpY2tDb3VudCAgKHZvaWQpIHsgcmV0dXJuICA3MCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3VpQ3VycmVudEZvbnRQdHIgICh2b2lkKSB7IHJldHVybiAgNzQgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl91aVN5c0ZvbnRUYWJsZVB0ciAgKHZvaWQpIHsgcmV0dXJuICA3 OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpQXBwRm9udFRhYmxlUHRyICAodm9pZCkg eyByZXR1cm4gIDgyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlOdW1TeXNGb250cyAg KHZvaWQpIHsgcmV0dXJuICA4NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpTnVtQXBw Rm9udHMgICh2b2lkKSB7IHJldHVybiAgODggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91 aUZvbnRMaXN0UHRyICAodm9pZCkgeyByZXR1cm4gIDkwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2Zfcm9vdFdpbmRvdyAgKHZvaWQpIHsgcmV0dXJuICA5NCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3VpQ3VycmVudEZvbnRJRCAgKHZvaWQpIHsgcmV0dXJuICA5OCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2FsbEZvcm1zQ2xvc2luZyAgKHZvaWQpIHsgcmV0dXJuICA5OSA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2N1cnJlbnRGb3JtICAodm9pZCkgeyByZXR1cm4g IDEwMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0SXNFbmFibGVkICAodm9pZCkg eyByZXR1cm4gIDEwNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0T24gICh2b2lk KSB7IHJldHVybiAgMTA1IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5zUHRMb2MgICh2 b2lkKSB7IHJldHVybiAgMTA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5zUHRIZWln aHQgICh2b2lkKSB7IHJldHVybiAgMTEwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5z UHRMYXN0VGljayAgKHZvaWQpIHsgcmV0dXJuICAxMTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9pbnNQdEJpdHNCZWhpbmQgICh2b2lkKSB7IHJldHVybiAgMTE2IDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfY2xpcGJvYXJkICAodm9pZCkgeyByZXR1cm4gIDEyMCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3VpQ3VycmVudE1lbnUgICh2b2lkKSB7IHJldHVybiAgMTM4IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlDdXJyZW50TWVudVJzY0lEICAodm9pZCkgeyBy ZXR1cm4gIDE0MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VuZG9HbG9iYWxzICAodm9p ZCkgeyByZXR1cm4gIDE0NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dzaVN0YXRlICAo dm9pZCkgeyByZXR1cm4gIDE1NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dzaUlzRW5h YmxlZCAgKHZvaWQpIHsgcmV0dXJuICAxNTcgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9n c2lMb2NhdGlvbiAgKHZvaWQpIHsgcmV0dXJuICAxNTggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl91aURlY2ltYWxTZXBhcmF0b3IgICh2b2lkKSB7IHJldHVybiAgMTYyIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfdWlPcHRpb25zICAodm9pZCkgeyByZXR1cm4gIDE2MyA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX21lbnVDbWRCYXJDdXJyZW50ICAodm9pZCkgeyByZXR1cm4g IDE2NCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVVJR2xvYmFsc1R5cGVWMzUgIAl7CXB1YmxpYzoJ dHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVVJR2xvYmFsc1R5cGVWMzUgIAkodm9pZCk7 CUVtUHJveHlVSUdsb2JhbHNUeXBlVjM1ICAJKGNvbnN0IEVtUHJveHlVSUdsb2JhbHNUeXBlVjM1 ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkg JmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAg ICAgMTY4ICA7IH0JRW1Qcm94eVVJR2xvYmFsc1R5cGVWMzUgICYJCW9wZXJhdG9yPSAoY29uc3Qg RW1Qcm94eVVJR2xvYmFsc1R5cGVWMzUgICYpOwlFbUFsaWFzVUlHbG9iYWxzVHlwZVYzNSAgPExB Uz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1VJR2xvYmFsc1R5cGVWMzUgIDxMQVM+ CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNb ICAgIDE2OCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc2VtdXB0ciA8TEFT PgkgCQkJCQkJYWN0aXZlV2luZG93IDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlkaXNw bGF5V2luZG93IDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlkcmF3V2luZG93IDsgCSBF bUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlmaXJzdFdpbmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8 TEFTPgkgCQkJCQkJZXhpdFdpbmRvd0lEIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQll bnRlcldpbmRvd0lEIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlleGl0ZWRXaW5kb3dJ RCA7IAkgRW1BbGlhc0dyYXBoaWNTdGF0ZVR5cGVWMyA8TEFTPgkgCQkJZ1N0YXRlIDsgCSBFbUFs aWFzVUlDb2xvclN0YXRlVHlwZSA8TEFTPgkgCQkJdWljU3RhdGUgOyAJIEVtQWxpYXNVSW50MzIg PExBUz4JIAkJCQkJCWxhc3RUYXBUaW1lIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQll dmVudFEgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWV2ZW50UUluZGV4IDsgCSBFbUFs aWFzVUludDE2IDxMQVM+CSAJCQkJCQlldmVudFFMZW5ndGggOyAJIEVtQWxpYXNJbnQxNiA8TEFT PgkgCQkJCQkJbGFzdFNjcmVlblggOyAJIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJbGFzdFNj cmVlblkgOyAJIEVtQWxpYXNCb29sZWFuIDxMQVM+CSAJCQkJCWxhc3RQZW5Eb3duIDsgCSBFbUFs aWFzVUludDggPExBUz4JIAkJCQkJCXRhcENvdW50IDsgCSBFbUFsaWFzSW50MzIgPExBUz4JIAkJ CQkJCW5lZWROdWxsVGlja0NvdW50IDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQl1aUN1 cnJlbnRGb250UHRyIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQl1aVN5c0ZvbnRUYWJs ZVB0ciA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJdWlBcHBGb250VGFibGVQdHIgOyAJ IEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXVpTnVtU3lzRm9udHMgOyAJIEVtQWxpYXNVSW50 MTYgPExBUz4JIAkJCQkJCXVpTnVtQXBwRm9udHMgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJ CQkJCXVpRm9udExpc3RQdHIgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXJvb3RXaW5k b3cgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJdWlDdXJyZW50Rm9udElEIDsgCSBFbUFs aWFzSW50MTYgPExBUz4JIAkJCQkJCWFsbEZvcm1zQ2xvc2luZyA7IAkgRW1BbGlhc2VtdXB0ciA8 TEFTPgkgCQkJCQkJY3VycmVudEZvcm0gOyAJIEVtQWxpYXNCb29sZWFuIDxMQVM+CSAJCQkJCWlu c1B0SXNFbmFibGVkIDsgCSBFbUFsaWFzQm9vbGVhbiA8TEFTPgkgCQkJCQlpbnNQdE9uIDsgCSBF bUFsaWFzUG9pbnRUeXBlIDxMQVM+CSAJCQkJCWluc1B0TG9jIDsgCSBFbUFsaWFzSW50MTYgPExB Uz4JIAkJCQkJCWluc1B0SGVpZ2h0IDsgCSBFbUFsaWFzSW50MzIgPExBUz4JIAkJCQkJCWluc1B0 TGFzdFRpY2sgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWluc1B0Qml0c0JlaGluZCA7 IAkgRW1BbGlhc0NsaXBib2FyZEl0ZW0gPExBUz4JIAkJCQljbGlwYm9hcmQgOyAJIEVtQWxpYXNl bXVwdHIgPExBUz4JIAkJCQkJCXVpQ3VycmVudE1lbnUgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4J IAkJCQkJCXVpQ3VycmVudE1lbnVSc2NJRCA7IAkgRW1BbGlhc0ZpZWxkVW5kb1R5cGUgPExBUz4J IAkJCQl1bmRvR2xvYmFscyA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlnc2lTdGF0ZSA7 IAkgRW1BbGlhc0Jvb2xlYW4gPExBUz4JIAkJCQkJZ3NpSXNFbmFibGVkIDsgCSBFbUFsaWFzUG9p bnRUeXBlIDxMQVM+CSAJCQkJCWdzaUxvY2F0aW9uIDsgCSBFbUFsaWFzQ2hhciA8TEFTPgkgCQkJ CQkJdWlEZWNpbWFsU2VwYXJhdG9yIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCXVpT3B0 aW9ucyA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJbWVudUNtZEJhckN1cnJlbnQgOyAg CSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hY3RpdmVXaW5kb3cgICh2b2lkKSB7IHJldHVy biAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Rpc3BsYXlXaW5kb3cgICh2b2lkKSB7 IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RyYXdXaW5kb3cgICh2b2lk KSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZpcnN0V2luZG93ICAo dm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXhpdFdpbmRv d0lEICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZW50 ZXJXaW5kb3dJRCAgKHZvaWQpIHsgcmV0dXJuICAyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2V4aXRlZFdpbmRvd0lEICAodm9pZCkgeyByZXR1cm4gIDI0IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfZ1N0YXRlICAodm9pZCkgeyByZXR1cm4gIDI4IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfdWljU3RhdGUgICh2b2lkKSB7IHJldHVybiAgNDAgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9sYXN0VGFwVGltZSAgKHZvaWQpIHsgcmV0dXJuICA1MiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2V2ZW50USAgKHZvaWQpIHsgcmV0dXJuICA1NiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2V2ZW50UUluZGV4ICAodm9pZCkgeyByZXR1cm4gIDYwIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXZlbnRRTGVuZ3RoICAodm9pZCkgeyByZXR1cm4gIDYy IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbGFzdFNjcmVlblggICh2b2lkKSB7IHJldHVy biAgNjQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9sYXN0U2NyZWVuWSAgKHZvaWQpIHsg cmV0dXJuICA2NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xhc3RQZW5Eb3duICAodm9p ZCkgeyByZXR1cm4gIDY4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdGFwQ291bnQgICh2 b2lkKSB7IHJldHVybiAgNjkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uZWVkTnVsbFRp Y2tDb3VudCAgKHZvaWQpIHsgcmV0dXJuICA3MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3VpQ3VycmVudEZvbnRQdHIgICh2b2lkKSB7IHJldHVybiAgNzQgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl91aVN5c0ZvbnRUYWJsZVB0ciAgKHZvaWQpIHsgcmV0dXJuICA3OCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpQXBwRm9udFRhYmxlUHRyICAodm9pZCkgeyByZXR1cm4g IDgyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlOdW1TeXNGb250cyAgKHZvaWQpIHsg cmV0dXJuICA4NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpTnVtQXBwRm9udHMgICh2 b2lkKSB7IHJldHVybiAgODggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUZvbnRMaXN0 UHRyICAodm9pZCkgeyByZXR1cm4gIDkwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfcm9v dFdpbmRvdyAgKHZvaWQpIHsgcmV0dXJuICA5NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3VpQ3VycmVudEZvbnRJRCAgKHZvaWQpIHsgcmV0dXJuICA5OCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2FsbEZvcm1zQ2xvc2luZyAgKHZvaWQpIHsgcmV0dXJuICA5OSA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2N1cnJlbnRGb3JtICAodm9pZCkgeyByZXR1cm4gIDEwMCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0SXNFbmFibGVkICAodm9pZCkgeyByZXR1cm4g IDEwNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0T24gICh2b2lkKSB7IHJldHVy biAgMTA1IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5zUHRMb2MgICh2b2lkKSB7IHJl dHVybiAgMTA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5zUHRIZWlnaHQgICh2b2lk KSB7IHJldHVybiAgMTEwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5zUHRMYXN0VGlj ayAgKHZvaWQpIHsgcmV0dXJuICAxMTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbnNQ dEJpdHNCZWhpbmQgICh2b2lkKSB7IHJldHVybiAgMTE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfY2xpcGJvYXJkICAodm9pZCkgeyByZXR1cm4gIDEyMCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3VpQ3VycmVudE1lbnUgICh2b2lkKSB7IHJldHVybiAgMTM4IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfdWlDdXJyZW50TWVudVJzY0lEICAodm9pZCkgeyByZXR1cm4gIDE0 MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VuZG9HbG9iYWxzICAodm9pZCkgeyByZXR1 cm4gIDE0NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dzaVN0YXRlICAodm9pZCkgeyBy ZXR1cm4gIDE1NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dzaUlzRW5hYmxlZCAgKHZv aWQpIHsgcmV0dXJuICAxNTcgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9nc2lMb2NhdGlv biAgKHZvaWQpIHsgcmV0dXJuICAxNTggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aURl Y2ltYWxTZXBhcmF0b3IgICh2b2lkKSB7IHJldHVybiAgMTYyIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfdWlPcHRpb25zICAodm9pZCkgeyByZXR1cm4gIDE2MyA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX21lbnVDbWRCYXJDdXJyZW50ICAodm9pZCkgeyByZXR1cm4gIDE2NCA7IH0g IAl9OyAgICAKICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc002OEtFeGNUYWJsZVR5 cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1B bGlhc002OEtFeGNUYWJsZVR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzTTY4S0V4Y1RhYmxlVHlw ZSAgCShjb25zdCBFbUFsaWFzTTY4S0V4Y1RhYmxlVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRy CSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZv aWQpCQkJeyByZXR1cm4gICAgIDI1NiAgOyB9CUVtQWxpYXNNNjhLRXhjVGFibGVUeXBlICA8QT4m CW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc002OEtFeGNUYWJsZVR5cGUgIDxBPiYpOwlFbUFsaWFz TTY4S0V4Y1RhYmxlVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNNNjhL RXhjVGFibGVUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlh c002OEtFeGNUYWJsZVR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAg IEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlpbml0U3RhY2sgOyAJIEVtQWxpYXNVSW50MzIgPEE+ CSAJCQkJCQlpbml0UEMgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlidXNFcnIgOyAJIEVt QWxpYXNVSW50MzIgPEE+CSAJCQkJCQlhZGRyZXNzRXJyIDsgCSBFbUFsaWFzVUludDMyIDxBPgkg CQkJCQkJaWxsZWdhbEluc3RyIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJZGl2aWRlQnla ZXJvIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJY2hrIDsgCSBFbUFsaWFzVUludDMyIDxB PgkgCQkJCQkJdHJhcCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXByaXZpbGVnZSA7IAkg RW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXRyYWNlIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJ CQkJYVRyYXAgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlmVHJhcCA7IAkgRW1BbGlhc1VJ bnQzMiA8QT4JIAkJCQkJCXJlc2VydmVkMTIgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlj b3Byb2MgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlmb3JtYXRFcnIgOyAJIEVtQWxpYXNV SW50MzIgPEE+CSAJCQkJCQl1bml0aWFsaXplZEludCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJ CQkJCXNwdXJpb3VzSW50IDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJYXV0b1ZlYzEgOyAJ IEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlhdXRvVmVjMiA7IAkgRW1BbGlhc1VJbnQzMiA8QT4J IAkJCQkJCWF1dG9WZWMzIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJYXV0b1ZlYzQgOyAJ IEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlhdXRvVmVjNSA7IAkgRW1BbGlhc1VJbnQzMiA8QT4J IAkJCQkJCWF1dG9WZWM2IDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJYXV0b1ZlYzcgOyAg CSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbml0U3RhY2sgICh2b2lkKSB7IHJldHVybiAg MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luaXRQQyAgKHZvaWQpIHsgcmV0dXJuICA0 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYnVzRXJyICAodm9pZCkgeyByZXR1cm4gIDgg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hZGRyZXNzRXJyICAodm9pZCkgeyByZXR1cm4g IDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaWxsZWdhbEluc3RyICAodm9pZCkgeyBy ZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGl2aWRlQnlaZXJvICAodm9p ZCkgeyByZXR1cm4gIDIwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY2hrICAodm9pZCkg eyByZXR1cm4gIDI0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdHJhcCAgKHZvaWQpIHsg cmV0dXJuICAyOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3ByaXZpbGVnZSAgKHZvaWQp IHsgcmV0dXJuICAzMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RyYWNlICAodm9pZCkg eyByZXR1cm4gIDM2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYVRyYXAgICh2b2lkKSB7 IHJldHVybiAgNDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mVHJhcCAgKHZvaWQpIHsg cmV0dXJuICA0NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jlc2VydmVkMTIgICh2b2lk KSB7IHJldHVybiAgNDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb3Byb2MgICh2b2lk KSB7IHJldHVybiAgNTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mb3JtYXRFcnIgICh2 b2lkKSB7IHJldHVybiAgNTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91bml0aWFsaXpl ZEludCAgKHZvaWQpIHsgcmV0dXJuICA2MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Nw dXJpb3VzSW50ICAodm9pZCkgeyByZXR1cm4gIDk2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfYXV0b1ZlYzEgICh2b2lkKSB7IHJldHVybiAgMTAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfYXV0b1ZlYzIgICh2b2lkKSB7IHJldHVybiAgMTA0IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfYXV0b1ZlYzMgICh2b2lkKSB7IHJldHVybiAgMTA4IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfYXV0b1ZlYzQgICh2b2lkKSB7IHJldHVybiAgMTEyIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfYXV0b1ZlYzUgICh2b2lkKSB7IHJldHVybiAgMTE2IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfYXV0b1ZlYzYgICh2b2lkKSB7IHJldHVybiAgMTIwIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYXV0b1ZlYzcgICh2b2lkKSB7IHJldHVybiAgMTI0IDsgfSAg CX07IAljbGFzcyBFbVByb3h5TTY4S0V4Y1RhYmxlVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZv aWQqIHB0cl90eXBlOwlFbVByb3h5TTY4S0V4Y1RhYmxlVHlwZSAgCSh2b2lkKTsJRW1Qcm94eU02 OEtFeGNUYWJsZVR5cGUgIAkoY29uc3QgRW1Qcm94eU02OEtFeGNUYWJsZVR5cGUgICYpOwlwdHJf dHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0 YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyNTYgIDsg fQlFbVByb3h5TTY4S0V4Y1RhYmxlVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5TTY4 S0V4Y1RhYmxlVHlwZSAgJik7CUVtQWxpYXNNNjhLRXhjVGFibGVUeXBlICA8TEFTPglvcGVyYXRv cltdIChpbnQpOwljb25zdCBFbUFsaWFzTTY4S0V4Y1RhYmxlVHlwZSAgPExBUz4Jb3BlcmF0b3Jb XSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMjU2ICBd Owl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlp bml0U3RhY2sgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCWluaXRQQyA7IAkgRW1BbGlh c1VJbnQzMiA8TEFTPgkgCQkJCQkJYnVzRXJyIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJ CQlhZGRyZXNzRXJyIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlpbGxlZ2FsSW5zdHIg OyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCWRpdmlkZUJ5WmVybyA7IAkgRW1BbGlhc1VJ bnQzMiA8TEFTPgkgCQkJCQkJY2hrIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQl0cmFw IDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlwcml2aWxlZ2UgOyAJIEVtQWxpYXNVSW50 MzIgPExBUz4JIAkJCQkJCXRyYWNlIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlhVHJh cCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJZlRyYXAgOyAJIEVtQWxpYXNVSW50MzIg PExBUz4JIAkJCQkJCXJlc2VydmVkMTIgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCWNv cHJvYyA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJZm9ybWF0RXJyIDsgCSBFbUFsaWFz VUludDMyIDxMQVM+CSAJCQkJCQl1bml0aWFsaXplZEludCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFT PgkgCQkJCQkJc3B1cmlvdXNJbnQgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCWF1dG9W ZWMxIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlhdXRvVmVjMiA7IAkgRW1BbGlhc1VJ bnQzMiA8TEFTPgkgCQkJCQkJYXV0b1ZlYzMgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJ CWF1dG9WZWM0IDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlhdXRvVmVjNSA7IAkgRW1B bGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJYXV0b1ZlYzYgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4J IAkJCQkJCWF1dG9WZWM3IDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5pdFN0YWNr ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbml0UEMg ICh2b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2J1c0VyciAg KHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYWRkcmVzc0Vy ciAgKHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2lsbGVn YWxJbnN0ciAgKHZvaWQpIHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2RpdmlkZUJ5WmVybyAgKHZvaWQpIHsgcmV0dXJuICAyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2NoayAgKHZvaWQpIHsgcmV0dXJuICAyNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3RyYXAgICh2b2lkKSB7IHJldHVybiAgMjggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9wcml2aWxlZ2UgICh2b2lkKSB7IHJldHVybiAgMzIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl90cmFjZSAgKHZvaWQpIHsgcmV0dXJuICAzNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2FUcmFwICAodm9pZCkgeyByZXR1cm4gIDQwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfZlRyYXAgICh2b2lkKSB7IHJldHVybiAgNDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9yZXNlcnZlZDEyICAodm9pZCkgeyByZXR1cm4gIDQ4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfY29wcm9jICAodm9pZCkgeyByZXR1cm4gIDUyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfZm9ybWF0RXJyICAodm9pZCkgeyByZXR1cm4gIDU2IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfdW5pdGlhbGl6ZWRJbnQgICh2b2lkKSB7IHJldHVybiAgNjAgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9zcHVyaW91c0ludCAgKHZvaWQpIHsgcmV0dXJuICA5NiA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2F1dG9WZWMxICAodm9pZCkgeyByZXR1cm4gIDEwMCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2F1dG9WZWMyICAodm9pZCkgeyByZXR1cm4gIDEwNCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2F1dG9WZWMzICAodm9pZCkgeyByZXR1cm4gIDEw OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2F1dG9WZWM0ICAodm9pZCkgeyByZXR1cm4g IDExMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2F1dG9WZWM1ICAodm9pZCkgeyByZXR1 cm4gIDExNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2F1dG9WZWM2ICAodm9pZCkgeyBy ZXR1cm4gIDEyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2F1dG9WZWM3ICAodm9pZCkg eyByZXR1cm4gIDEyNCA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFs aWFzRml4ZWRHbG9iYWxzVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90 eXBlIHB0cl90eXBlOwlFbUFsaWFzRml4ZWRHbG9iYWxzVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxp YXNGaXhlZEdsb2JhbHNUeXBlICAJKGNvbnN0IEVtQWxpYXNGaXhlZEdsb2JhbHNUeXBlICAmKTsJ cHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNp emVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNjUwICA7IH0JRW1BbGlhc0ZpeGVk R2xvYmFsc1R5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzRml4ZWRHbG9iYWxzVHlw ZSAgPEE+Jik7CUVtQWxpYXNGaXhlZEdsb2JhbHNUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJ Y29uc3QgRW1BbGlhc0ZpeGVkR2xvYmFsc1R5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0 Owlwcml2YXRlOglFbUFsaWFzRml4ZWRHbG9iYWxzVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlm UHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJbWVtQ2FyZFNsb3RzIDsg CSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlkYmdXYXNFbnRlcmVkIDsgCSBFbUFsaWFzZW11cHRy IDxBPgkgCQkJCQkJbWVtQ2FyZEluZm9QIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJbWVt U2VtYXBob3JlSUQgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQltZW1EZWJ1Z01vZGUgOyAJ IEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlkbU9wZW5MaXN0IDsgCSBFbUFsaWFzVUludDggPEE+ CSAJCQkJCQlkYmdJbkRlYnVnZ2VyIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlkYmdUcmFj aW5nIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJZGJnR2xvYmFsc1AgOyAJIEVtQWxpYXNl bXVwdHIgPEE+CSAJCQkJCQlkYmdTZXJHbG9iYWxzUCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJ CQkJCXN5c0FwcEluZm9QIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJc3lzS2VybmVsRGF0 YVAgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlzeXNEaXNwYXRjaFRhYmxlUCA7IAkgRW1B bGlhc1VJbnQzMiA8QT4JIAkJCQkJCXN5c093bmVySURzSW5Vc2UgOyAJIEVtQWxpYXNlbXVwdHIg PEE+CSAJCQkJCQlzeXNBTVhBcHBJbmZvUCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXN5 c0Nsb2NrRnJlcSA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXN5c0hhcmRLZXlDcmVhdG9y cyA7IAkgRW1BbGlhc0ludDE2IDxBPgkgCQkJCQkJc3lzQmF0dGVyeUNoZWNrVGltZXIgOyAJIEVt QWxpYXNVSW50OCA8QT4JIAkJCQkJCXN5c0JhdHRlcnlNaW5UaHJlc2hvbGQgOyAJIEVtQWxpYXNV SW50OCA8QT4JIAkJCQkJCWh3ckJhdHRlcnlMZXZlbCA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJ CQkJCXN5c05leHRCYXR0ZXJ5QWxlcnRUaW1lciA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJ c3lzQmF0dGVyeVdhcm5UaHJlc2hvbGQgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXN5c0Rp c3BhdGNoVGFibGVSZXYgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlzeXNEaXNwYXRjaFRh YmxlU2l6ZSA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXN5c0xpYlRhYmxlUCA7IAkgRW1B bGlhc1VJbnQxNiA8QT4JIAkJCQkJCXN5c0xpYlRhYmxlRW50cmllcyA7IAkgRW1BbGlhc2VtdXB0 ciA8QT4JIAkJCQkJCXN5c0NvbnNvbGVTdGFja0NodW5rUCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4J IAkJCQkJCXN5c1VJU2hlbGxBcHBJbmZvUCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXN5 c1RpbWVySUQgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlzeXNBdXRvT2ZmRXZ0VGlja3Mg OyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlzeXNBdXRvT2ZmU2Vjb25kcyA7IAkgRW1BbGlh c0ludDMyIDxBPgkgCQkJCQkJc3lzUmFuZG9tU2VlZCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJ CQkJCXNsa0dsb2JhbHNQIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJc2VyR2xvYmFsc1Ag OyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlzY3JHbG9iYWxzUCA7IAkgRW1BbGlhc2VtdXB0 ciA8QT4JIAkJCQkJCWZwbEdsb2JhbHNQIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJcGVu R2xvYmFsc1AgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlzeXNFdnRNZ3JHbG9iYWxzUCA7 IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXNuZEdsb2JhbHNQIDsgCSBFbUFsaWFzZW11cHRy IDxBPgkgCQkJCQkJdGltR2xvYmFsc1AgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlhbG1H bG9iYWxzUCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWZ0ckdsb2JhbHNQIDsgCSBFbUFs aWFzZW11cHRyIDxBPgkgCQkJCQkJZ3JmR2xvYmFsc1AgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJ CQkJCQlrZXlHbG9iYWxzUCA7IAkgRW1BbGlhc1VJR2xvYmFsc1R5cGUgPEE+CSAJCQkJdWlHbG9i YWxzIDsgCSBFbUFsaWFzVUlHbG9iYWxzVHlwZUNvbW1vbiA8QT4JIAkJdWlHbG9iYWxzQ29tbW9u IDsgCSBFbUFsaWFzVUlHbG9iYWxzVHlwZVYxIDxBPgkgCQkJdWlHbG9iYWxzVjEgOyAJIEVtQWxp YXNVSUdsb2JhbHNUeXBlVjIgPEE+CSAJCQl1aUdsb2JhbHNWMiA7IAkgRW1BbGlhc1VJR2xvYmFs c1R5cGVWMyA8QT4JIAkJCXVpR2xvYmFsc1YzIDsgCSBFbUFsaWFzVUlHbG9iYWxzVHlwZVYzMSA8 QT4JIAkJCXVpR2xvYmFsc1YzMSA7IAkgRW1BbGlhc1VJR2xvYmFsc1R5cGVWMzIgPEE+CSAJCQl1 aUdsb2JhbHNWMzIgOyAJIEVtQWxpYXNVSUdsb2JhbHNUeXBlVjM1IDxBPgkgCQkJdWlHbG9iYWxz VjM1IDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJdWlFeHRlbnNpb25zUCA7IAkgRW1BbGlh c2VtdXB0ciA8QT4JIAkJCQkJCWN1clVJQXBwSW5mb1AgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJ CQkJCQluZXh0VUlBcHBEQklEIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJbmV4dFVJQXBw Q21kIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJbmV4dFVJQXBwQ21kUEJQIDsgCSBFbUFs aWFzVUludDggPEE+CSAJCQkJCQluZXh0VUlBcHBDYXJkTm8gOyAJIEVtQWxpYXNJbnQ4IDxBPgkg CQkJCQkJbWVtRGF0YVdFTGV2ZWwgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlod3JXYWtl VXAgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWh3ckNQVUR1dHlDeWNsZSA7IAkgRW1BbGlh c1VJbnQ4IDxBPgkgCQkJCQkJaHdyUGVuRG93biA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJ CWh3ckN1clRpY2tzIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJaHdyVG90YWxSQU1TaXpl IDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJaHdyRG96ZVN1YlRpY2tzIDsgCSBFbUFsaWFz VUludDMyIDxBPgkgCQkJCQkJc25kT2ZmVGlja3MgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJ CXN5c1Jlc2V0RmxhZ3MgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXN5c0JhdHRlcnlLaW5k IDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJbWVtTWluRHluSGVhcEZyZWUgOyAJIEVtQWxp YXNVSW50MTYgPEE+CSAJCQkJCQlzeXNQcmVmRmxhZ3MgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJ CQkJCQlzeXNHbG9iYWxzUCA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXN5c01pc2NGbGFn cyA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXN5c0xpYk5ldCA7IAkgRW1BbGlhc2VtdXB0 ciA8QT4JIAkJCQkJCW5ldFBrdEZyZWVRIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJc3lz RXZHcm91cElEIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJaXJxM0dsb2JhbHNQIDsgCSBF bUFsaWFzVUludDMyIDxBPgkgCQkJCQkJc3lzTGFzdEJhdHRlcnlXYXJuaW5nIDsgCSBFbUFsaWFz VUludDMyIDxBPgkgCQkJCQkJc3lzTG93TWVtQ2hlY2tzdW0gOyAJIEVtQWxpYXNVSW50MTYgPEE+ CSAJCQkJCQlod3JIYXJkd2FyZVJldiA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWRtUHJv dGVjdExpc3RIIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJaHdyTWlzY0ZsYWdzIDsgCSBF bUFsaWFzVUludDMyIDxBPgkgCQkJCQkJc3lzUHJvZmlsZVJlZmNvbiA7IAkgRW1BbGlhc2VtdXB0 ciA8QT4JIAkJCQkJCXN5c1Byb2ZpbGVQcm9jUCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJ CWZscFNvZnRGUFNDUiA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWlyTGliR2xvYmFsc1Ag OyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlleGdBY3RpdmVMaWIgOyAJIEVtQWxpYXNVSW50 MTYgPEE+CSAJCQkJCQl1aUJ1c3lDb3VudCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWly cTFHbG9iYWxzUCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWlycTJHbG9iYWxzUCA7IAkg RW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWlycTZHbG9iYWxzUCA7IAkgRW1BbGlhc2VtdXB0ciA8 QT4JIAkJCQkJCWludGxNZ3JHbG9iYWxzUCA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWlu bGluZVN0YXJ0IDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJaW5saW5lRW5kIDsgCSBFbUFs aWFzQm9vbGVhbiA8QT4JIAkJCQkJaW5saW5lQWN0aXZlIDsgCSBFbUFsaWFzVUludDggPEE+CSAJ CQkJCQlpbmxpbmVEZWZUZXJtIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJdHNtRmVwTGli U3RhdHVzUCA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXRzbUZlcExpYlJlZk51bSA7IAkg RW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWlubGluZUhpZ2hsaWdodExlbiA7IAkgRW1BbGlhc2Vt dXB0ciA8QT4JIAkJCQkJCXN5c0JhdHRlcnlEYXRhUCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJ CQkJCXN5c0JhdHRlcnlWYWxpZEtpbmRzUCA7IAkgRW1BbGlhc0Jvb2xlYW4gPEE+CSAJCQkJCXN5 c0luU2h1dGRvd24gOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXN5c01pbldha2V1cFRocmVz aG9sZCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCWh3ck1pc2NGbGFnc0V4dCA7IAkgRW1B bGlhc0Jvb2xlYW4gPEE+CSAJCQkJCXN5c1VzZUNyaXRXYXJuVGltZXIgOyAJIEVtQWxpYXNCb29s ZWFuIDxBPgkgCQkJCQlzeXNDcml0V2FyblRpbWVyUnVubmluZyA7IAkgRW1BbGlhc0ludDE2IDxB PgkgCQkJCQkJc3lzQ3JpdFdhcm5SVENEYXlTdGFydGVkIDsgCSBFbUFsaWFzSW50MzIgPEE+CSAJ CQkJCQlzeXNDcml0V2FyblRpY2tUaW1lciA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXN5 c0NyaXRXYXJuTGFzdFRpY2sgOyAJIEVtQWxpYXNCb29sZWFuIDxBPgkgCQkJCQlzeXNDaGFyZ2lu ZyA7IAkgRW1BbGlhc0Jvb2xlYW4gPEE+CSAJCQkJCXN5c1VwZGF0ZVZvbHRhZ2VMZXZlbCA7IAkg RW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCW5vdGlmeUdsb2JhbHNIIDsgCSBFbUFsaWFzVUludDMy IDxBPgkgCQkJCQkJZXhwR2xvYmFsc1AgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQl2ZnNH bG9iYWxzUCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXN5c1Jlc2VydmVkMzFEV29yZDMg OyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlzeXNSZXNlcnZlZDMxRFdvcmQ0IDsgCSBFbUFs aWFzZW11cHRyIDxBPgkgCQkJCQkJcmFtR2xvYmFsc1AgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJ CQkJCQlod3JCYXR0ZXJ5R2xvYmFsc1AgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWh3ckJh dHRlcnlQZXJjZW50IDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQljb21tQWN0aXZpdHlGbGFn cyA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXVhcnQzMjhHbG9iYWxzUCA7IAkgRW1BbGlh c1VJbnQzMiA8QT4JIAkJCQkJCXN5c09FTUdsb2JhbDEgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJ CQkJCQlzeXNPRU1HbG9iYWwyIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJaHdyQmF0dGVy eVN0ZXBzUGVyVm9sdCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXN5c1BlbmRpbmdTdGFj a0ZyZWVzIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJc3lzRGF5Q291bnRlciA7IAkgRW1B bGlhc0ludDE2IDxBPgkgCQkJCQkJc3lzQmF0dGVyeUNoZWNrUGVyaW9kIDsgCSBFbUFsaWFzVUlu dDE2IDxBPgkgCQkJCQkJaHdySmVycnlQbGRTaGFkb3cgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJ CQkJCQlyYWRpb0dsb2JhbHNQIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJZmF0YWxBbGVy dFRlbXBsYXRlUCA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWZhdGFsQWxlcnRCdG5XaWR0 aCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXNpbGtzY3JlZW5JbmZvUCA7IAkgRW1BbGlh c1VJbnQxNiA8QT4JIAkJCQkJCWlubGluZURlZkNoZWNrc3VtIDsgCSBFbUFsaWFzZW11cHRyIDxB PgkgCQkJCQkJaW5saW5lRGVmRmllbGQgOyAJIEVtQWxpYXNCb29sZWFuIDxBPgkgCQkJCQlub3Rp ZnlCcm9hZGNhc3RQZW5kaW5nIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlzeXNSZXNlcnZl ZDM1Qnl0ZTEgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlod3JPRU1Db21wYW55SUQgOyAJ IEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlod3JPRU1EZXZpY2VJRCA7IAkgRW1BbGlhc1VJbnQz MiA8QT4JIAkJCQkJCWh3ck9FTUhBTElEIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJc3lz VXBkYXRlR2xvYmFsc1AgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlzbWFsbFJPTUNoZWNr c3VtIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJc3lzTm90aWZ5SW50ZXJydXB0R2xvYmFs c1AgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlzeXNBcHBTdWJGb250TGlzdFB0ciA7IAkg RW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXN5c1VTQkNvbmZpZ3VyYXRpb24gOyAJIEVtQWxpYXNl bXVwdHIgPEE+CSAJCQkJCQlpbnRsRGlzcGF0Y2hUYWJsZVAgOyAJIEVtQWxpYXNCb29sZWFuIDxB PgkgCQkJCQlzeXNBdXRvTG9ja1Vwb25Qb3dlck9mZiA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJ CQkJCXN5c0hhcmRQb3dlckV2dFRpY2tzIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJc3lz QXV0b0xvY2tUaW1lb3V0U2VjcyA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWF0dG5HbG9i YWxzUCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWV4cFZmc1NoYXJlZEdsb2JhbHNQIDsg CSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJYnRFeGdMaWJHbG9iYWxzUCA7IAkgRW1BbGlhc2Vt dXB0ciA8QT4JIAkJCQkJCXRlc3RIYXJuZXNzR2xvYmFsc1AgOyAJIEVtQWxpYXNlbXVwdHIgPEE+ CSAJCQkJCQlwd3JNYW5hZ2VyR2xvYmFsc1AgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlp bmxpbmVDbGF1c2VPZmZzZXQgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlidExpYkdsb2Jh bHNQIDsgCSBFbUFsaWFzQm9vbGVhbiA8QT4JIAkJCQkJc3lzU2V0UHdkVGltZW91dEFsbG93ZWQg OyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlzeXNTZXRQd2RUaW1lb3V0U2VjcyA7IAkgRW1B bGlhc1VJbnQzMiA8QT4JIAkJCQkJCXN5c1NldFB3ZFRpbWVvdXRUaWNrcyA7IAkgRW1BbGlhc1VJ bnQxNiA8QT4JIAkJCQkJCWRiZ0xvY2tvdXQgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlz eXNSZXNlcnZlZDQwRFdvcmQxIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJc3lzUmVzZXJ2 ZWQ0MERXb3JkMiA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXN5c1Jlc2VydmVkNDBEV29y ZDMgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlzeXNSZXNlcnZlZDQwRFdvcmQ0IDsgIAkg ICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbWVtQ2FyZFNsb3RzICAodm9pZCkgeyByZXR1cm4g IDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kYmdXYXNFbnRlcmVkICAodm9pZCkgeyBy ZXR1cm4gIDEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9tZW1DYXJkSW5mb1AgICh2b2lk KSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21lbVNlbWFwaG9yZUlE ICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9tZW1EZWJ1 Z01vZGUgICh2b2lkKSB7IHJldHVybiAgMTAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9k bU9wZW5MaXN0ICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfZGJnSW5EZWJ1Z2dlciAgKHZvaWQpIHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2RiZ1RyYWNpbmcgICh2b2lkKSB7IHJldHVybiAgMTcgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9kYmdHbG9iYWxzUCAgKHZvaWQpIHsgcmV0dXJuICAxOCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2RiZ1Nlckdsb2JhbHNQICAodm9pZCkgeyByZXR1cm4gIDIyIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQXBwSW5mb1AgICh2b2lkKSB7IHJldHVybiAg MjYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNLZXJuZWxEYXRhUCAgKHZvaWQpIHsg cmV0dXJuICAzMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0Rpc3BhdGNoVGFibGVQ ICAodm9pZCkgeyByZXR1cm4gIDM0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzT3du ZXJJRHNJblVzZSAgKHZvaWQpIHsgcmV0dXJuICAzOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3N5c0FNWEFwcEluZm9QICAodm9pZCkgeyByZXR1cm4gIDQyIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2Zfc3lzQ2xvY2tGcmVxICAodm9pZCkgeyByZXR1cm4gIDQ2IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2Zfc3lzSGFyZEtleUNyZWF0b3JzICAodm9pZCkgeyByZXR1cm4gIDUw IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dGVyeUNoZWNrVGltZXIgICh2b2lk KSB7IHJldHVybiAgNTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNCYXR0ZXJ5TWlu VGhyZXNob2xkICAodm9pZCkgeyByZXR1cm4gIDU2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfaHdyQmF0dGVyeUxldmVsICAodm9pZCkgeyByZXR1cm4gIDU3IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2Zfc3lzTmV4dEJhdHRlcnlBbGVydFRpbWVyICAodm9pZCkgeyByZXR1cm4gIDU4 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dGVyeVdhcm5UaHJlc2hvbGQgICh2 b2lkKSB7IHJldHVybiAgNjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNEaXNwYXRj aFRhYmxlUmV2ICAodm9pZCkgeyByZXR1cm4gIDYxIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2Zfc3lzRGlzcGF0Y2hUYWJsZVNpemUgICh2b2lkKSB7IHJldHVybiAgNjIgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9zeXNMaWJUYWJsZVAgICh2b2lkKSB7IHJldHVybiAgNjQgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNMaWJUYWJsZUVudHJpZXMgICh2b2lkKSB7IHJldHVy biAgNjggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNDb25zb2xlU3RhY2tDaHVua1Ag ICh2b2lkKSB7IHJldHVybiAgNzAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNVSVNo ZWxsQXBwSW5mb1AgICh2b2lkKSB7IHJldHVybiAgNzQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9zeXNUaW1lcklEICAodm9pZCkgeyByZXR1cm4gIDc4IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2Zfc3lzQXV0b09mZkV2dFRpY2tzICAodm9pZCkgeyByZXR1cm4gIDgyIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQXV0b09mZlNlY29uZHMgICh2b2lkKSB7IHJldHVybiAg ODYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNSYW5kb21TZWVkICAodm9pZCkgeyBy ZXR1cm4gIDg4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc2xrR2xvYmFsc1AgICh2b2lk KSB7IHJldHVybiAgOTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zZXJHbG9iYWxzUCAg KHZvaWQpIHsgcmV0dXJuICA5NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Njckdsb2Jh bHNQICAodm9pZCkgeyByZXR1cm4gIDEwMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Zw bEdsb2JhbHNQICAodm9pZCkgeyByZXR1cm4gIDEwNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3Blbkdsb2JhbHNQICAodm9pZCkgeyByZXR1cm4gIDEwOCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3N5c0V2dE1nckdsb2JhbHNQICAodm9pZCkgeyByZXR1cm4gIDExMiA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX3NuZEdsb2JhbHNQICAodm9pZCkgeyByZXR1cm4gIDExNiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RpbUdsb2JhbHNQICAodm9pZCkgeyByZXR1cm4g IDEyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2FsbUdsb2JhbHNQICAodm9pZCkgeyBy ZXR1cm4gIDEyNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Z0ckdsb2JhbHNQICAodm9p ZCkgeyByZXR1cm4gIDEyOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dyZkdsb2JhbHNQ ICAodm9pZCkgeyByZXR1cm4gIDEzMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2tleUds b2JhbHNQICAodm9pZCkgeyByZXR1cm4gIDEzNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3VpR2xvYmFscyAgKHZvaWQpIHsgcmV0dXJuICAxNDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl91aUdsb2JhbHNDb21tb24gICh2b2lkKSB7IHJldHVybiAgMTQwIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfdWlHbG9iYWxzVjEgICh2b2lkKSB7IHJldHVybiAgMTQwIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlHbG9iYWxzVjIgICh2b2lkKSB7IHJldHVybiAgMTQwIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlHbG9iYWxzVjMgICh2b2lkKSB7IHJldHVybiAg MTQwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlHbG9iYWxzVjMxICAodm9pZCkgeyBy ZXR1cm4gIDE0MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpR2xvYmFsc1YzMiAgKHZv aWQpIHsgcmV0dXJuICAxNDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUdsb2JhbHNW MzUgICh2b2lkKSB7IHJldHVybiAgMTQwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlF eHRlbnNpb25zUCAgKHZvaWQpIHsgcmV0dXJuICAzMTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9jdXJVSUFwcEluZm9QICAodm9pZCkgeyByZXR1cm4gIDMyMCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX25leHRVSUFwcERCSUQgICh2b2lkKSB7IHJldHVybiAgMzI0IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmV4dFVJQXBwQ21kICAodm9pZCkgeyByZXR1cm4gIDMyOCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25leHRVSUFwcENtZFBCUCAgKHZvaWQpIHsgcmV0 dXJuICAzMzAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uZXh0VUlBcHBDYXJkTm8gICh2 b2lkKSB7IHJldHVybiAgMzM0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbWVtRGF0YVdF TGV2ZWwgICh2b2lkKSB7IHJldHVybiAgMzM1IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf aHdyV2FrZVVwICAodm9pZCkgeyByZXR1cm4gIDMzNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2h3ckNQVUR1dHlDeWNsZSAgKHZvaWQpIHsgcmV0dXJuICAzMzggOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9od3JQZW5Eb3duICAodm9pZCkgeyByZXR1cm4gIDMzOSA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2h3ckN1clRpY2tzICAodm9pZCkgeyByZXR1cm4gIDM0MCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2h3clRvdGFsUkFNU2l6ZSAgKHZvaWQpIHsgcmV0dXJu ICAzNDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9od3JEb3plU3ViVGlja3MgICh2b2lk KSB7IHJldHVybiAgMzQ4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc25kT2ZmVGlja3Mg ICh2b2lkKSB7IHJldHVybiAgMzUyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzUmVz ZXRGbGFncyAgKHZvaWQpIHsgcmV0dXJuICAzNTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9zeXNCYXR0ZXJ5S2luZCAgKHZvaWQpIHsgcmV0dXJuICAzNTcgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9tZW1NaW5EeW5IZWFwRnJlZSAgKHZvaWQpIHsgcmV0dXJuICAzNTggOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNQcmVmRmxhZ3MgICh2b2lkKSB7IHJldHVybiAgMzYy IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzR2xvYmFsc1AgICh2b2lkKSB7IHJldHVy biAgMzY0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzTWlzY0ZsYWdzICAodm9pZCkg eyByZXR1cm4gIDM2OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0xpYk5ldCAgKHZv aWQpIHsgcmV0dXJuICAzNzAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uZXRQa3RGcmVl USAgKHZvaWQpIHsgcmV0dXJuICAzNzIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNF dkdyb3VwSUQgICh2b2lkKSB7IHJldHVybiAgMzc2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfaXJxM0dsb2JhbHNQICAodm9pZCkgeyByZXR1cm4gIDM4MCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3N5c0xhc3RCYXR0ZXJ5V2FybmluZyAgKHZvaWQpIHsgcmV0dXJuICAzODQgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNMb3dNZW1DaGVja3N1bSAgKHZvaWQpIHsgcmV0 dXJuICAzODggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9od3JIYXJkd2FyZVJldiAgKHZv aWQpIHsgcmV0dXJuICAzOTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kbVByb3RlY3RM aXN0SCAgKHZvaWQpIHsgcmV0dXJuICAzOTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9o d3JNaXNjRmxhZ3MgICh2b2lkKSB7IHJldHVybiAgMzk4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2Zfc3lzUHJvZmlsZVJlZmNvbiAgKHZvaWQpIHsgcmV0dXJuICA0MDAgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9zeXNQcm9maWxlUHJvY1AgICh2b2lkKSB7IHJldHVybiAgNDA0IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmxwU29mdEZQU0NSICAodm9pZCkgeyByZXR1cm4g IDQwOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2lyTGliR2xvYmFsc1AgICh2b2lkKSB7 IHJldHVybiAgNDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXhnQWN0aXZlTGliICAo dm9pZCkgeyByZXR1cm4gIDQxNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpQnVzeUNv dW50ICAodm9pZCkgeyByZXR1cm4gIDQxOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ly cTFHbG9iYWxzUCAgKHZvaWQpIHsgcmV0dXJuICA0MjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9pcnEyR2xvYmFsc1AgICh2b2lkKSB7IHJldHVybiAgNDI0IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfaXJxNkdsb2JhbHNQICAodm9pZCkgeyByZXR1cm4gIDQyOCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2ludGxNZ3JHbG9iYWxzUCAgKHZvaWQpIHsgcmV0dXJuICA0MzIg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbmxpbmVTdGFydCAgKHZvaWQpIHsgcmV0dXJu ICA0MzYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbmxpbmVFbmQgICh2b2lkKSB7IHJl dHVybiAgNDM4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5saW5lQWN0aXZlICAodm9p ZCkgeyByZXR1cm4gIDQ0MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2lubGluZURlZlRl cm0gICh2b2lkKSB7IHJldHVybiAgNDQxIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdHNt RmVwTGliU3RhdHVzUCAgKHZvaWQpIHsgcmV0dXJuICA0NDIgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl90c21GZXBMaWJSZWZOdW0gICh2b2lkKSB7IHJldHVybiAgNDQ2IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfaW5saW5lSGlnaGxpZ2h0TGVuICAodm9pZCkgeyByZXR1cm4gIDQ0 OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0JhdHRlcnlEYXRhUCAgKHZvaWQpIHsg cmV0dXJuICA0NTAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNCYXR0ZXJ5VmFsaWRL aW5kc1AgICh2b2lkKSB7IHJldHVybiAgNDU0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf c3lzSW5TaHV0ZG93biAgKHZvaWQpIHsgcmV0dXJuICA0NTggOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9zeXNNaW5XYWtldXBUaHJlc2hvbGQgICh2b2lkKSB7IHJldHVybiAgNDU5IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaHdyTWlzY0ZsYWdzRXh0ICAodm9pZCkgeyByZXR1cm4g IDQ2MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c1VzZUNyaXRXYXJuVGltZXIgICh2 b2lkKSB7IHJldHVybiAgNDY0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQ3JpdFdh cm5UaW1lclJ1bm5pbmcgICh2b2lkKSB7IHJldHVybiAgNDY1IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2Zfc3lzQ3JpdFdhcm5SVENEYXlTdGFydGVkICAodm9pZCkgeyByZXR1cm4gIDQ2NiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0NyaXRXYXJuVGlja1RpbWVyICAodm9pZCkg eyByZXR1cm4gIDQ2OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0NyaXRXYXJuTGFz dFRpY2sgICh2b2lkKSB7IHJldHVybiAgNDcyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf c3lzQ2hhcmdpbmcgICh2b2lkKSB7IHJldHVybiAgNDc2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2Zfc3lzVXBkYXRlVm9sdGFnZUxldmVsICAodm9pZCkgeyByZXR1cm4gIDQ3NyA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX25vdGlmeUdsb2JhbHNIICAodm9pZCkgeyByZXR1cm4gIDQ3 OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2V4cEdsb2JhbHNQICAodm9pZCkgeyByZXR1 cm4gIDQ4MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Zmc0dsb2JhbHNQICAodm9pZCkg eyByZXR1cm4gIDQ4NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c1Jlc2VydmVkMzFE V29yZDMgICh2b2lkKSB7IHJldHVybiAgNDkwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf c3lzUmVzZXJ2ZWQzMURXb3JkNCAgKHZvaWQpIHsgcmV0dXJuICA0OTQgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9yYW1HbG9iYWxzUCAgKHZvaWQpIHsgcmV0dXJuICA0OTggOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9od3JCYXR0ZXJ5R2xvYmFsc1AgICh2b2lkKSB7IHJldHVybiAg NTAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaHdyQmF0dGVyeVBlcmNlbnQgICh2b2lk KSB7IHJldHVybiAgNTA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29tbUFjdGl2aXR5 RmxhZ3MgICh2b2lkKSB7IHJldHVybiAgNTA3IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf dWFydDMyOEdsb2JhbHNQICAodm9pZCkgeyByZXR1cm4gIDUwOCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3N5c09FTUdsb2JhbDEgICh2b2lkKSB7IHJldHVybiAgNTEyIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2Zfc3lzT0VNR2xvYmFsMiAgKHZvaWQpIHsgcmV0dXJuICA1MTYgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9od3JCYXR0ZXJ5U3RlcHNQZXJWb2x0ICAodm9pZCkg eyByZXR1cm4gIDUyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c1BlbmRpbmdTdGFj a0ZyZWVzICAodm9pZCkgeyByZXR1cm4gIDUyMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3N5c0RheUNvdW50ZXIgICh2b2lkKSB7IHJldHVybiAgNTI2IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2Zfc3lzQmF0dGVyeUNoZWNrUGVyaW9kICAodm9pZCkgeyByZXR1cm4gIDUyOCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2h3ckplcnJ5UGxkU2hhZG93ICAodm9pZCkgeyByZXR1 cm4gIDUzMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3JhZGlvR2xvYmFsc1AgICh2b2lk KSB7IHJldHVybiAgNTMyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmF0YWxBbGVydFRl bXBsYXRlUCAgKHZvaWQpIHsgcmV0dXJuICA1MzYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9mYXRhbEFsZXJ0QnRuV2lkdGggICh2b2lkKSB7IHJldHVybiAgNTQwIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2Zfc2lsa3NjcmVlbkluZm9QICAodm9pZCkgeyByZXR1cm4gIDU0MiA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2lubGluZURlZkNoZWNrc3VtICAodm9pZCkgeyByZXR1 cm4gIDU0NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2lubGluZURlZkZpZWxkICAodm9p ZCkgeyByZXR1cm4gIDU0OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25vdGlmeUJyb2Fk Y2FzdFBlbmRpbmcgICh2b2lkKSB7IHJldHVybiAgNTUyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2Zfc3lzUmVzZXJ2ZWQzNUJ5dGUxICAodm9pZCkgeyByZXR1cm4gIDU1MyA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2h3ck9FTUNvbXBhbnlJRCAgKHZvaWQpIHsgcmV0dXJuICA1NTQg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9od3JPRU1EZXZpY2VJRCAgKHZvaWQpIHsgcmV0 dXJuICA1NTggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9od3JPRU1IQUxJRCAgKHZvaWQp IHsgcmV0dXJuICA1NjIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNVcGRhdGVHbG9i YWxzUCAgKHZvaWQpIHsgcmV0dXJuICA1NjYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9z bWFsbFJPTUNoZWNrc3VtICAodm9pZCkgeyByZXR1cm4gIDU3MCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3N5c05vdGlmeUludGVycnVwdEdsb2JhbHNQICAodm9pZCkgeyByZXR1cm4gIDU3 MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0FwcFN1YkZvbnRMaXN0UHRyICAodm9p ZCkgeyByZXR1cm4gIDU3NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c1VTQkNvbmZp Z3VyYXRpb24gICh2b2lkKSB7IHJldHVybiAgNTgwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfaW50bERpc3BhdGNoVGFibGVQICAodm9pZCkgeyByZXR1cm4gIDU4MiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3N5c0F1dG9Mb2NrVXBvblBvd2VyT2ZmICAodm9pZCkgeyByZXR1cm4g IDU4NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0hhcmRQb3dlckV2dFRpY2tzICAo dm9pZCkgeyByZXR1cm4gIDU4OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0F1dG9M b2NrVGltZW91dFNlY3MgICh2b2lkKSB7IHJldHVybiAgNTkyIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfYXR0bkdsb2JhbHNQICAodm9pZCkgeyByZXR1cm4gIDU5NiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2V4cFZmc1NoYXJlZEdsb2JhbHNQICAodm9pZCkgeyByZXR1cm4gIDYw MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2J0RXhnTGliR2xvYmFsc1AgICh2b2lkKSB7 IHJldHVybiAgNjA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdGVzdEhhcm5lc3NHbG9i YWxzUCAgKHZvaWQpIHsgcmV0dXJuICA2MDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9w d3JNYW5hZ2VyR2xvYmFsc1AgICh2b2lkKSB7IHJldHVybiAgNjEyIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfaW5saW5lQ2xhdXNlT2Zmc2V0ICAodm9pZCkgeyByZXR1cm4gIDYxNiA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2J0TGliR2xvYmFsc1AgICh2b2lkKSB7IHJldHVybiAg NjE4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzU2V0UHdkVGltZW91dEFsbG93ZWQg ICh2b2lkKSB7IHJldHVybiAgNjIyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzU2V0 UHdkVGltZW91dFNlY3MgICh2b2lkKSB7IHJldHVybiAgNjI0IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2Zfc3lzU2V0UHdkVGltZW91dFRpY2tzICAodm9pZCkgeyByZXR1cm4gIDYyOCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RiZ0xvY2tvdXQgICh2b2lkKSB7IHJldHVybiAgNjMy IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzUmVzZXJ2ZWQ0MERXb3JkMSAgKHZvaWQp IHsgcmV0dXJuICA2MzQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNSZXNlcnZlZDQw RFdvcmQyICAodm9pZCkgeyByZXR1cm4gIDYzOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3N5c1Jlc2VydmVkNDBEV29yZDMgICh2b2lkKSB7IHJldHVybiAgNjQyIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2Zfc3lzUmVzZXJ2ZWQ0MERXb3JkNCAgKHZvaWQpIHsgcmV0dXJuICA2NDYg OyB9ICAJfTsgCWNsYXNzIEVtUHJveHlGaXhlZEdsb2JhbHNUeXBlICAJewlwdWJsaWM6CXR5cGVk ZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlGaXhlZEdsb2JhbHNUeXBlICAJKHZvaWQpOwlFbVBy b3h5Rml4ZWRHbG9iYWxzVHlwZSAgCShjb25zdCBFbVByb3h5Rml4ZWRHbG9iYWxzVHlwZSAgJik7 CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9j YWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDY1 MCAgOyB9CUVtUHJveHlGaXhlZEdsb2JhbHNUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJv eHlGaXhlZEdsb2JhbHNUeXBlICAmKTsJRW1BbGlhc0ZpeGVkR2xvYmFsc1R5cGUgIDxMQVM+CW9w ZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNGaXhlZEdsb2JhbHNUeXBlICA8TEFTPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA2 NTAgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJ CQkJbWVtQ2FyZFNsb3RzIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWRiZ1dhc0VudGVy ZWQgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCW1lbUNhcmRJbmZvUCA7IAkgRW1BbGlh c1VJbnQzMiA8TEFTPgkgCQkJCQkJbWVtU2VtYXBob3JlSUQgOyAJIEVtQWxpYXNVSW50MTYgPExB Uz4JIAkJCQkJCW1lbURlYnVnTW9kZSA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZG1P cGVuTGlzdCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlkYmdJbkRlYnVnZ2VyIDsgCSBF bUFsaWFzVUludDggPExBUz4JIAkJCQkJCWRiZ1RyYWNpbmcgOyAJIEVtQWxpYXNlbXVwdHIgPExB Uz4JIAkJCQkJCWRiZ0dsb2JhbHNQIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlkYmdT ZXJHbG9iYWxzUCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJc3lzQXBwSW5mb1AgOyAJ IEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXN5c0tlcm5lbERhdGFQIDsgCSBFbUFsaWFzZW11 cHRyIDxMQVM+CSAJCQkJCQlzeXNEaXNwYXRjaFRhYmxlUCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFT PgkgCQkJCQkJc3lzT3duZXJJRHNJblVzZSA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJ c3lzQU1YQXBwSW5mb1AgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXN5c0Nsb2NrRnJl cSA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJc3lzSGFyZEtleUNyZWF0b3JzIDsgCSBF bUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCXN5c0JhdHRlcnlDaGVja1RpbWVyIDsgCSBFbUFsaWFz VUludDggPExBUz4JIAkJCQkJCXN5c0JhdHRlcnlNaW5UaHJlc2hvbGQgOyAJIEVtQWxpYXNVSW50 OCA8TEFTPgkgCQkJCQkJaHdyQmF0dGVyeUxldmVsIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJ CQkJCQlzeXNOZXh0QmF0dGVyeUFsZXJ0VGltZXIgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJ CQkJc3lzQmF0dGVyeVdhcm5UaHJlc2hvbGQgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJ c3lzRGlzcGF0Y2hUYWJsZVJldiA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJc3lzRGlz cGF0Y2hUYWJsZVNpemUgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXN5c0xpYlRhYmxl UCA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJc3lzTGliVGFibGVFbnRyaWVzIDsgCSBF bUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlzeXNDb25zb2xlU3RhY2tDaHVua1AgOyAJIEVtQWxp YXNlbXVwdHIgPExBUz4JIAkJCQkJCXN5c1VJU2hlbGxBcHBJbmZvUCA7IAkgRW1BbGlhc1VJbnQz MiA8TEFTPgkgCQkJCQkJc3lzVGltZXJJRCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJ c3lzQXV0b09mZkV2dFRpY2tzIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlzeXNBdXRv T2ZmU2Vjb25kcyA7IAkgRW1BbGlhc0ludDMyIDxMQVM+CSAJCQkJCQlzeXNSYW5kb21TZWVkIDsg CSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlzbGtHbG9iYWxzUCA7IAkgRW1BbGlhc2VtdXB0 ciA8TEFTPgkgCQkJCQkJc2VyR2xvYmFsc1AgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJ CXNjckdsb2JhbHNQIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlmcGxHbG9iYWxzUCA7 IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJcGVuR2xvYmFsc1AgOyAJIEVtQWxpYXNlbXVw dHIgPExBUz4JIAkJCQkJCXN5c0V2dE1nckdsb2JhbHNQIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+ CSAJCQkJCQlzbmRHbG9iYWxzUCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJdGltR2xv YmFsc1AgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWFsbUdsb2JhbHNQIDsgCSBFbUFs aWFzZW11cHRyIDxMQVM+CSAJCQkJCQlmdHJHbG9iYWxzUCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFT PgkgCQkJCQkJZ3JmR2xvYmFsc1AgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWtleUds b2JhbHNQIDsgCSBFbUFsaWFzVUlHbG9iYWxzVHlwZSA8TEFTPgkgCQkJCXVpR2xvYmFscyA7IAkg RW1BbGlhc1VJR2xvYmFsc1R5cGVDb21tb24gPExBUz4JIAkJdWlHbG9iYWxzQ29tbW9uIDsgCSBF bUFsaWFzVUlHbG9iYWxzVHlwZVYxIDxMQVM+CSAJCQl1aUdsb2JhbHNWMSA7IAkgRW1BbGlhc1VJ R2xvYmFsc1R5cGVWMiA8TEFTPgkgCQkJdWlHbG9iYWxzVjIgOyAJIEVtQWxpYXNVSUdsb2JhbHNU eXBlVjMgPExBUz4JIAkJCXVpR2xvYmFsc1YzIDsgCSBFbUFsaWFzVUlHbG9iYWxzVHlwZVYzMSA8 TEFTPgkgCQkJdWlHbG9iYWxzVjMxIDsgCSBFbUFsaWFzVUlHbG9iYWxzVHlwZVYzMiA8TEFTPgkg CQkJdWlHbG9iYWxzVjMyIDsgCSBFbUFsaWFzVUlHbG9iYWxzVHlwZVYzNSA8TEFTPgkgCQkJdWlH bG9iYWxzVjM1IDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQl1aUV4dGVuc2lvbnNQIDsg CSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQljdXJVSUFwcEluZm9QIDsgCSBFbUFsaWFzVUlu dDMyIDxMQVM+CSAJCQkJCQluZXh0VUlBcHBEQklEIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJ CQkJCQluZXh0VUlBcHBDbWQgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCW5leHRVSUFw cENtZFBCUCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQluZXh0VUlBcHBDYXJkTm8gOyAJ IEVtQWxpYXNJbnQ4IDxMQVM+CSAJCQkJCQltZW1EYXRhV0VMZXZlbCA7IAkgRW1BbGlhc1VJbnQx NiA8TEFTPgkgCQkJCQkJaHdyV2FrZVVwIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWh3 ckNQVUR1dHlDeWNsZSA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlod3JQZW5Eb3duIDsg CSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlod3JDdXJUaWNrcyA7IAkgRW1BbGlhc1VJbnQz MiA8TEFTPgkgCQkJCQkJaHdyVG90YWxSQU1TaXplIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJ CQkJCQlod3JEb3plU3ViVGlja3MgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXNuZE9m ZlRpY2tzIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCXN5c1Jlc2V0RmxhZ3MgOyAJIEVt QWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJc3lzQmF0dGVyeUtpbmQgOyAJIEVtQWxpYXNVSW50MzIg PExBUz4JIAkJCQkJCW1lbU1pbkR5bkhlYXBGcmVlIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJ CQkJCQlzeXNQcmVmRmxhZ3MgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXN5c0dsb2Jh bHNQIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlzeXNNaXNjRmxhZ3MgOyAJIEVtQWxp YXNVSW50MTYgPExBUz4JIAkJCQkJCXN5c0xpYk5ldCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkg CQkJCQkJbmV0UGt0RnJlZVEgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXN5c0V2R3Jv dXBJRCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJaXJxM0dsb2JhbHNQIDsgCSBFbUFs aWFzVUludDMyIDxMQVM+CSAJCQkJCQlzeXNMYXN0QmF0dGVyeVdhcm5pbmcgOyAJIEVtQWxpYXNV SW50MzIgPExBUz4JIAkJCQkJCXN5c0xvd01lbUNoZWNrc3VtIDsgCSBFbUFsaWFzVUludDE2IDxM QVM+CSAJCQkJCQlod3JIYXJkd2FyZVJldiA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJ ZG1Qcm90ZWN0TGlzdEggOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWh3ck1pc2NGbGFn cyA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJc3lzUHJvZmlsZVJlZmNvbiA7IAkgRW1B bGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJc3lzUHJvZmlsZVByb2NQIDsgCSBFbUFsaWFzVUludDMy IDxMQVM+CSAJCQkJCQlmbHBTb2Z0RlBTQ1IgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJ CWlyTGliR2xvYmFsc1AgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWV4Z0FjdGl2ZUxp YiA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJdWlCdXN5Q291bnQgOyAJIEVtQWxpYXNl bXVwdHIgPExBUz4JIAkJCQkJCWlycTFHbG9iYWxzUCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkg CQkJCQkJaXJxMkdsb2JhbHNQIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlpcnE2R2xv YmFsc1AgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWludGxNZ3JHbG9iYWxzUCA7IAkg RW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJaW5saW5lU3RhcnQgOyAJIEVtQWxpYXNVSW50MTYg PExBUz4JIAkJCQkJCWlubGluZUVuZCA7IAkgRW1BbGlhc0Jvb2xlYW4gPExBUz4JIAkJCQkJaW5s aW5lQWN0aXZlIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWlubGluZURlZlRlcm0gOyAJ IEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXRzbUZlcExpYlN0YXR1c1AgOyAJIEVtQWxpYXNV SW50MTYgPExBUz4JIAkJCQkJCXRzbUZlcExpYlJlZk51bSA7IAkgRW1BbGlhc1VJbnQxNiA8TEFT PgkgCQkJCQkJaW5saW5lSGlnaGxpZ2h0TGVuIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJ CQlzeXNCYXR0ZXJ5RGF0YVAgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXN5c0JhdHRl cnlWYWxpZEtpbmRzUCA7IAkgRW1BbGlhc0Jvb2xlYW4gPExBUz4JIAkJCQkJc3lzSW5TaHV0ZG93 biA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlzeXNNaW5XYWtldXBUaHJlc2hvbGQgOyAJ IEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCWh3ck1pc2NGbGFnc0V4dCA7IAkgRW1BbGlhc0Jv b2xlYW4gPExBUz4JIAkJCQkJc3lzVXNlQ3JpdFdhcm5UaW1lciA7IAkgRW1BbGlhc0Jvb2xlYW4g PExBUz4JIAkJCQkJc3lzQ3JpdFdhcm5UaW1lclJ1bm5pbmcgOyAJIEVtQWxpYXNJbnQxNiA8TEFT PgkgCQkJCQkJc3lzQ3JpdFdhcm5SVENEYXlTdGFydGVkIDsgCSBFbUFsaWFzSW50MzIgPExBUz4J IAkJCQkJCXN5c0NyaXRXYXJuVGlja1RpbWVyIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJ CQlzeXNDcml0V2Fybkxhc3RUaWNrIDsgCSBFbUFsaWFzQm9vbGVhbiA8TEFTPgkgCQkJCQlzeXND aGFyZ2luZyA7IAkgRW1BbGlhc0Jvb2xlYW4gPExBUz4JIAkJCQkJc3lzVXBkYXRlVm9sdGFnZUxl dmVsIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlub3RpZnlHbG9iYWxzSCA7IAkgRW1B bGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJZXhwR2xvYmFsc1AgOyAJIEVtQWxpYXNVSW50MzIgPExB Uz4JIAkJCQkJCXZmc0dsb2JhbHNQIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlzeXNS ZXNlcnZlZDMxRFdvcmQzIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlzeXNSZXNlcnZl ZDMxRFdvcmQ0IDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlyYW1HbG9iYWxzUCA7IAkg RW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJaHdyQmF0dGVyeUdsb2JhbHNQIDsgCSBFbUFsaWFz VUludDggPExBUz4JIAkJCQkJCWh3ckJhdHRlcnlQZXJjZW50IDsgCSBFbUFsaWFzVUludDggPExB Uz4JIAkJCQkJCWNvbW1BY3Rpdml0eUZsYWdzIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJ CQl1YXJ0MzI4R2xvYmFsc1AgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXN5c09FTUds b2JhbDEgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXN5c09FTUdsb2JhbDIgOyAJIEVt QWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWh3ckJhdHRlcnlTdGVwc1BlclZvbHQgOyAJIEVtQWxp YXNlbXVwdHIgPExBUz4JIAkJCQkJCXN5c1BlbmRpbmdTdGFja0ZyZWVzIDsgCSBFbUFsaWFzVUlu dDE2IDxMQVM+CSAJCQkJCQlzeXNEYXlDb3VudGVyIDsgCSBFbUFsaWFzSW50MTYgPExBUz4JIAkJ CQkJCXN5c0JhdHRlcnlDaGVja1BlcmlvZCA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJ aHdySmVycnlQbGRTaGFkb3cgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXJhZGlvR2xv YmFsc1AgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWZhdGFsQWxlcnRUZW1wbGF0ZVAg OyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWZhdGFsQWxlcnRCdG5XaWR0aCA7IAkgRW1B bGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJc2lsa3NjcmVlbkluZm9QIDsgCSBFbUFsaWFzVUludDE2 IDxMQVM+CSAJCQkJCQlpbmxpbmVEZWZDaGVja3N1bSA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkg CQkJCQkJaW5saW5lRGVmRmllbGQgOyAJIEVtQWxpYXNCb29sZWFuIDxMQVM+CSAJCQkJCW5vdGlm eUJyb2FkY2FzdFBlbmRpbmcgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJc3lzUmVzZXJ2 ZWQzNUJ5dGUxIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlod3JPRU1Db21wYW55SUQg OyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCWh3ck9FTURldmljZUlEIDsgCSBFbUFsaWFz VUludDMyIDxMQVM+CSAJCQkJCQlod3JPRU1IQUxJRCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkg CQkJCQkJc3lzVXBkYXRlR2xvYmFsc1AgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXNt YWxsUk9NQ2hlY2tzdW0gOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXN5c05vdGlmeUlu dGVycnVwdEdsb2JhbHNQIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlzeXNBcHBTdWJG b250TGlzdFB0ciA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJc3lzVVNCQ29uZmlndXJh dGlvbiA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJaW50bERpc3BhdGNoVGFibGVQIDsg CSBFbUFsaWFzQm9vbGVhbiA8TEFTPgkgCQkJCQlzeXNBdXRvTG9ja1Vwb25Qb3dlck9mZiA7IAkg RW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJc3lzSGFyZFBvd2VyRXZ0VGlja3MgOyAJIEVtQWxp YXNVSW50MzIgPExBUz4JIAkJCQkJCXN5c0F1dG9Mb2NrVGltZW91dFNlY3MgOyAJIEVtQWxpYXNl bXVwdHIgPExBUz4JIAkJCQkJCWF0dG5HbG9iYWxzUCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkg CQkJCQkJZXhwVmZzU2hhcmVkR2xvYmFsc1AgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJ CWJ0RXhnTGliR2xvYmFsc1AgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXRlc3RIYXJu ZXNzR2xvYmFsc1AgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXB3ck1hbmFnZXJHbG9i YWxzUCA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJaW5saW5lQ2xhdXNlT2Zmc2V0IDsg CSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlidExpYkdsb2JhbHNQIDsgCSBFbUFsaWFzQm9v bGVhbiA8TEFTPgkgCQkJCQlzeXNTZXRQd2RUaW1lb3V0QWxsb3dlZCA7IAkgRW1BbGlhc1VJbnQz MiA8TEFTPgkgCQkJCQkJc3lzU2V0UHdkVGltZW91dFNlY3MgOyAJIEVtQWxpYXNVSW50MzIgPExB Uz4JIAkJCQkJCXN5c1NldFB3ZFRpbWVvdXRUaWNrcyA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkg CQkJCQkJZGJnTG9ja291dCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJc3lzUmVzZXJ2 ZWQ0MERXb3JkMSA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJc3lzUmVzZXJ2ZWQ0MERX b3JkMiA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJc3lzUmVzZXJ2ZWQ0MERXb3JkMyA7 IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJc3lzUmVzZXJ2ZWQ0MERXb3JkNCA7ICAJICAg ICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21lbUNhcmRTbG90cyAgKHZvaWQpIHsgcmV0dXJuICAw IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGJnV2FzRW50ZXJlZCAgKHZvaWQpIHsgcmV0 dXJuICAxIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbWVtQ2FyZEluZm9QICAodm9pZCkg eyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9tZW1TZW1hcGhvcmVJRCAg KHZvaWQpIHsgcmV0dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbWVtRGVidWdN b2RlICAodm9pZCkgeyByZXR1cm4gIDEwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZG1P cGVuTGlzdCAgKHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2RiZ0luRGVidWdnZXIgICh2b2lkKSB7IHJldHVybiAgMTYgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9kYmdUcmFjaW5nICAodm9pZCkgeyByZXR1cm4gIDE3IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfZGJnR2xvYmFsc1AgICh2b2lkKSB7IHJldHVybiAgMTggOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9kYmdTZXJHbG9iYWxzUCAgKHZvaWQpIHsgcmV0dXJuICAyMiA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0FwcEluZm9QICAodm9pZCkgeyByZXR1cm4gIDI2 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzS2VybmVsRGF0YVAgICh2b2lkKSB7IHJl dHVybiAgMzAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNEaXNwYXRjaFRhYmxlUCAg KHZvaWQpIHsgcmV0dXJuICAzNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c093bmVy SURzSW5Vc2UgICh2b2lkKSB7IHJldHVybiAgMzggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9zeXNBTVhBcHBJbmZvUCAgKHZvaWQpIHsgcmV0dXJuICA0MiA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3N5c0Nsb2NrRnJlcSAgKHZvaWQpIHsgcmV0dXJuICA0NiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3N5c0hhcmRLZXlDcmVhdG9ycyAgKHZvaWQpIHsgcmV0dXJuICA1MCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0JhdHRlcnlDaGVja1RpbWVyICAodm9pZCkg eyByZXR1cm4gIDU0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dGVyeU1pblRo cmVzaG9sZCAgKHZvaWQpIHsgcmV0dXJuICA1NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2h3ckJhdHRlcnlMZXZlbCAgKHZvaWQpIHsgcmV0dXJuICA1NyA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3N5c05leHRCYXR0ZXJ5QWxlcnRUaW1lciAgKHZvaWQpIHsgcmV0dXJuICA1OCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0JhdHRlcnlXYXJuVGhyZXNob2xkICAodm9p ZCkgeyByZXR1cm4gIDYwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzRGlzcGF0Y2hU YWJsZVJldiAgKHZvaWQpIHsgcmV0dXJuICA2MSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3N5c0Rpc3BhdGNoVGFibGVTaXplICAodm9pZCkgeyByZXR1cm4gIDYyIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2Zfc3lzTGliVGFibGVQICAodm9pZCkgeyByZXR1cm4gIDY0IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzTGliVGFibGVFbnRyaWVzICAodm9pZCkgeyByZXR1cm4g IDY4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQ29uc29sZVN0YWNrQ2h1bmtQICAo dm9pZCkgeyByZXR1cm4gIDcwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzVUlTaGVs bEFwcEluZm9QICAodm9pZCkgeyByZXR1cm4gIDc0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2Zfc3lzVGltZXJJRCAgKHZvaWQpIHsgcmV0dXJuICA3OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3N5c0F1dG9PZmZFdnRUaWNrcyAgKHZvaWQpIHsgcmV0dXJuICA4MiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3N5c0F1dG9PZmZTZWNvbmRzICAodm9pZCkgeyByZXR1cm4gIDg2 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzUmFuZG9tU2VlZCAgKHZvaWQpIHsgcmV0 dXJuICA4OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Nsa0dsb2JhbHNQICAodm9pZCkg eyByZXR1cm4gIDkyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc2VyR2xvYmFsc1AgICh2 b2lkKSB7IHJldHVybiAgOTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zY3JHbG9iYWxz UCAgKHZvaWQpIHsgcmV0dXJuICAxMDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mcGxH bG9iYWxzUCAgKHZvaWQpIHsgcmV0dXJuICAxMDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9wZW5HbG9iYWxzUCAgKHZvaWQpIHsgcmV0dXJuICAxMDggOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9zeXNFdnRNZ3JHbG9iYWxzUCAgKHZvaWQpIHsgcmV0dXJuICAxMTIgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9zbmRHbG9iYWxzUCAgKHZvaWQpIHsgcmV0dXJuICAxMTYgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90aW1HbG9iYWxzUCAgKHZvaWQpIHsgcmV0dXJuICAx MjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hbG1HbG9iYWxzUCAgKHZvaWQpIHsgcmV0 dXJuICAxMjQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mdHJHbG9iYWxzUCAgKHZvaWQp IHsgcmV0dXJuICAxMjggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9ncmZHbG9iYWxzUCAg KHZvaWQpIHsgcmV0dXJuICAxMzIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9rZXlHbG9i YWxzUCAgKHZvaWQpIHsgcmV0dXJuICAxMzYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91 aUdsb2JhbHMgICh2b2lkKSB7IHJldHVybiAgMTQwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfdWlHbG9iYWxzQ29tbW9uICAodm9pZCkgeyByZXR1cm4gIDE0MCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX3VpR2xvYmFsc1YxICAodm9pZCkgeyByZXR1cm4gIDE0MCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3VpR2xvYmFsc1YyICAodm9pZCkgeyByZXR1cm4gIDE0MCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpR2xvYmFsc1YzICAodm9pZCkgeyByZXR1cm4gIDE0 MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpR2xvYmFsc1YzMSAgKHZvaWQpIHsgcmV0 dXJuICAxNDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUdsb2JhbHNWMzIgICh2b2lk KSB7IHJldHVybiAgMTQwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdWlHbG9iYWxzVjM1 ICAodm9pZCkgeyByZXR1cm4gIDE0MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3VpRXh0 ZW5zaW9uc1AgICh2b2lkKSB7IHJldHVybiAgMzE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfY3VyVUlBcHBJbmZvUCAgKHZvaWQpIHsgcmV0dXJuICAzMjAgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9uZXh0VUlBcHBEQklEICAodm9pZCkgeyByZXR1cm4gIDMyNCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX25leHRVSUFwcENtZCAgKHZvaWQpIHsgcmV0dXJuICAzMjggOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uZXh0VUlBcHBDbWRQQlAgICh2b2lkKSB7IHJldHVy biAgMzMwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmV4dFVJQXBwQ2FyZE5vICAodm9p ZCkgeyByZXR1cm4gIDMzNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21lbURhdGFXRUxl dmVsICAodm9pZCkgeyByZXR1cm4gIDMzNSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2h3 cldha2VVcCAgKHZvaWQpIHsgcmV0dXJuICAzMzYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9od3JDUFVEdXR5Q3ljbGUgICh2b2lkKSB7IHJldHVybiAgMzM4IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfaHdyUGVuRG93biAgKHZvaWQpIHsgcmV0dXJuICAzMzkgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9od3JDdXJUaWNrcyAgKHZvaWQpIHsgcmV0dXJuICAzNDAgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9od3JUb3RhbFJBTVNpemUgICh2b2lkKSB7IHJldHVybiAg MzQ0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaHdyRG96ZVN1YlRpY2tzICAodm9pZCkg eyByZXR1cm4gIDM0OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NuZE9mZlRpY2tzICAo dm9pZCkgeyByZXR1cm4gIDM1MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c1Jlc2V0 RmxhZ3MgICh2b2lkKSB7IHJldHVybiAgMzU2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf c3lzQmF0dGVyeUtpbmQgICh2b2lkKSB7IHJldHVybiAgMzU3IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfbWVtTWluRHluSGVhcEZyZWUgICh2b2lkKSB7IHJldHVybiAgMzU4IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzUHJlZkZsYWdzICAodm9pZCkgeyByZXR1cm4gIDM2MiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0dsb2JhbHNQICAodm9pZCkgeyByZXR1cm4g IDM2NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c01pc2NGbGFncyAgKHZvaWQpIHsg cmV0dXJuICAzNjggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNMaWJOZXQgICh2b2lk KSB7IHJldHVybiAgMzcwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmV0UGt0RnJlZVEg ICh2b2lkKSB7IHJldHVybiAgMzcyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzRXZH cm91cElEICAodm9pZCkgeyByZXR1cm4gIDM3NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2lycTNHbG9iYWxzUCAgKHZvaWQpIHsgcmV0dXJuICAzODAgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9zeXNMYXN0QmF0dGVyeVdhcm5pbmcgICh2b2lkKSB7IHJldHVybiAgMzg0IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzTG93TWVtQ2hlY2tzdW0gICh2b2lkKSB7IHJldHVy biAgMzg4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaHdySGFyZHdhcmVSZXYgICh2b2lk KSB7IHJldHVybiAgMzkyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZG1Qcm90ZWN0TGlz dEggICh2b2lkKSB7IHJldHVybiAgMzk0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaHdy TWlzY0ZsYWdzICAodm9pZCkgeyByZXR1cm4gIDM5OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3N5c1Byb2ZpbGVSZWZjb24gICh2b2lkKSB7IHJldHVybiAgNDAwIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2Zfc3lzUHJvZmlsZVByb2NQICAodm9pZCkgeyByZXR1cm4gIDQwNCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZscFNvZnRGUFNDUiAgKHZvaWQpIHsgcmV0dXJuICA0 MDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pckxpYkdsb2JhbHNQICAodm9pZCkgeyBy ZXR1cm4gIDQxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2V4Z0FjdGl2ZUxpYiAgKHZv aWQpIHsgcmV0dXJuICA0MTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91aUJ1c3lDb3Vu dCAgKHZvaWQpIHsgcmV0dXJuICA0MTggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pcnEx R2xvYmFsc1AgICh2b2lkKSB7IHJldHVybiAgNDIwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfaXJxMkdsb2JhbHNQICAodm9pZCkgeyByZXR1cm4gIDQyNCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2lycTZHbG9iYWxzUCAgKHZvaWQpIHsgcmV0dXJuICA0MjggOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9pbnRsTWdyR2xvYmFsc1AgICh2b2lkKSB7IHJldHVybiAgNDMyIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5saW5lU3RhcnQgICh2b2lkKSB7IHJldHVybiAg NDM2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5saW5lRW5kICAodm9pZCkgeyByZXR1 cm4gIDQzOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2lubGluZUFjdGl2ZSAgKHZvaWQp IHsgcmV0dXJuICA0NDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbmxpbmVEZWZUZXJt ICAodm9pZCkgeyByZXR1cm4gIDQ0MSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RzbUZl cExpYlN0YXR1c1AgICh2b2lkKSB7IHJldHVybiAgNDQyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfdHNtRmVwTGliUmVmTnVtICAodm9pZCkgeyByZXR1cm4gIDQ0NiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2lubGluZUhpZ2hsaWdodExlbiAgKHZvaWQpIHsgcmV0dXJuICA0NDgg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNCYXR0ZXJ5RGF0YVAgICh2b2lkKSB7IHJl dHVybiAgNDUwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzQmF0dGVyeVZhbGlkS2lu ZHNQICAodm9pZCkgeyByZXR1cm4gIDQ1NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5 c0luU2h1dGRvd24gICh2b2lkKSB7IHJldHVybiAgNDU4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2Zfc3lzTWluV2FrZXVwVGhyZXNob2xkICAodm9pZCkgeyByZXR1cm4gIDQ1OSA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2h3ck1pc2NGbGFnc0V4dCAgKHZvaWQpIHsgcmV0dXJuICA0 NjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNVc2VDcml0V2FyblRpbWVyICAodm9p ZCkgeyByZXR1cm4gIDQ2NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c0NyaXRXYXJu VGltZXJSdW5uaW5nICAodm9pZCkgeyByZXR1cm4gIDQ2NSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3N5c0NyaXRXYXJuUlRDRGF5U3RhcnRlZCAgKHZvaWQpIHsgcmV0dXJuICA0NjYgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNDcml0V2FyblRpY2tUaW1lciAgKHZvaWQpIHsg cmV0dXJuICA0NjggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNDcml0V2Fybkxhc3RU aWNrICAodm9pZCkgeyByZXR1cm4gIDQ3MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5 c0NoYXJnaW5nICAodm9pZCkgeyByZXR1cm4gIDQ3NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3N5c1VwZGF0ZVZvbHRhZ2VMZXZlbCAgKHZvaWQpIHsgcmV0dXJuICA0NzcgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9ub3RpZnlHbG9iYWxzSCAgKHZvaWQpIHsgcmV0dXJuICA0Nzgg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9leHBHbG9iYWxzUCAgKHZvaWQpIHsgcmV0dXJu ICA0ODIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl92ZnNHbG9iYWxzUCAgKHZvaWQpIHsg cmV0dXJuICA0ODYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNSZXNlcnZlZDMxRFdv cmQzICAodm9pZCkgeyByZXR1cm4gIDQ5MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5 c1Jlc2VydmVkMzFEV29yZDQgICh2b2lkKSB7IHJldHVybiAgNDk0IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfcmFtR2xvYmFsc1AgICh2b2lkKSB7IHJldHVybiAgNDk4IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfaHdyQmF0dGVyeUdsb2JhbHNQICAodm9pZCkgeyByZXR1cm4gIDUw MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2h3ckJhdHRlcnlQZXJjZW50ICAodm9pZCkg eyByZXR1cm4gIDUwNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1BY3Rpdml0eUZs YWdzICAodm9pZCkgeyByZXR1cm4gIDUwNyA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Vh cnQzMjhHbG9iYWxzUCAgKHZvaWQpIHsgcmV0dXJuICA1MDggOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9zeXNPRU1HbG9iYWwxICAodm9pZCkgeyByZXR1cm4gIDUxMiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3N5c09FTUdsb2JhbDIgICh2b2lkKSB7IHJldHVybiAgNTE2IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaHdyQmF0dGVyeVN0ZXBzUGVyVm9sdCAgKHZvaWQpIHsg cmV0dXJuICA1MjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNQZW5kaW5nU3RhY2tG cmVlcyAgKHZvaWQpIHsgcmV0dXJuICA1MjIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9z eXNEYXlDb3VudGVyICAodm9pZCkgeyByZXR1cm4gIDUyNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3N5c0JhdHRlcnlDaGVja1BlcmlvZCAgKHZvaWQpIHsgcmV0dXJuICA1MjggOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9od3JKZXJyeVBsZFNoYWRvdyAgKHZvaWQpIHsgcmV0dXJu ICA1MzAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yYWRpb0dsb2JhbHNQICAodm9pZCkg eyByZXR1cm4gIDUzMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZhdGFsQWxlcnRUZW1w bGF0ZVAgICh2b2lkKSB7IHJldHVybiAgNTM2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf ZmF0YWxBbGVydEJ0bldpZHRoICAodm9pZCkgeyByZXR1cm4gIDU0MCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX3NpbGtzY3JlZW5JbmZvUCAgKHZvaWQpIHsgcmV0dXJuICA1NDIgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbmxpbmVEZWZDaGVja3N1bSAgKHZvaWQpIHsgcmV0dXJu ICA1NDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbmxpbmVEZWZGaWVsZCAgKHZvaWQp IHsgcmV0dXJuICA1NDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9ub3RpZnlCcm9hZGNh c3RQZW5kaW5nICAodm9pZCkgeyByZXR1cm4gIDU1MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3N5c1Jlc2VydmVkMzVCeXRlMSAgKHZvaWQpIHsgcmV0dXJuICA1NTMgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9od3JPRU1Db21wYW55SUQgICh2b2lkKSB7IHJldHVybiAgNTU0IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaHdyT0VNRGV2aWNlSUQgICh2b2lkKSB7IHJldHVy biAgNTU4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaHdyT0VNSEFMSUQgICh2b2lkKSB7 IHJldHVybiAgNTYyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzVXBkYXRlR2xvYmFs c1AgICh2b2lkKSB7IHJldHVybiAgNTY2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc21h bGxST01DaGVja3N1bSAgKHZvaWQpIHsgcmV0dXJuICA1NzAgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9zeXNOb3RpZnlJbnRlcnJ1cHRHbG9iYWxzUCAgKHZvaWQpIHsgcmV0dXJuICA1NzIg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNBcHBTdWJGb250TGlzdFB0ciAgKHZvaWQp IHsgcmV0dXJuICA1NzYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNVU0JDb25maWd1 cmF0aW9uICAodm9pZCkgeyByZXR1cm4gIDU4MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2ludGxEaXNwYXRjaFRhYmxlUCAgKHZvaWQpIHsgcmV0dXJuICA1ODIgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9zeXNBdXRvTG9ja1Vwb25Qb3dlck9mZiAgKHZvaWQpIHsgcmV0dXJuICA1 ODYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNIYXJkUG93ZXJFdnRUaWNrcyAgKHZv aWQpIHsgcmV0dXJuICA1ODggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zeXNBdXRvTG9j a1RpbWVvdXRTZWNzICAodm9pZCkgeyByZXR1cm4gIDU5MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2F0dG5HbG9iYWxzUCAgKHZvaWQpIHsgcmV0dXJuICA1OTYgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9leHBWZnNTaGFyZWRHbG9iYWxzUCAgKHZvaWQpIHsgcmV0dXJuICA2MDAg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9idEV4Z0xpYkdsb2JhbHNQICAodm9pZCkgeyBy ZXR1cm4gIDYwNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Rlc3RIYXJuZXNzR2xvYmFs c1AgICh2b2lkKSB7IHJldHVybiAgNjA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcHdy TWFuYWdlckdsb2JhbHNQICAodm9pZCkgeyByZXR1cm4gIDYxMiA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2lubGluZUNsYXVzZU9mZnNldCAgKHZvaWQpIHsgcmV0dXJuICA2MTYgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9idExpYkdsb2JhbHNQICAodm9pZCkgeyByZXR1cm4gIDYx OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c1NldFB3ZFRpbWVvdXRBbGxvd2VkICAo dm9pZCkgeyByZXR1cm4gIDYyMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c1NldFB3 ZFRpbWVvdXRTZWNzICAodm9pZCkgeyByZXR1cm4gIDYyNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3N5c1NldFB3ZFRpbWVvdXRUaWNrcyAgKHZvaWQpIHsgcmV0dXJuICA2MjggOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9kYmdMb2Nrb3V0ICAodm9pZCkgeyByZXR1cm4gIDYzMiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N5c1Jlc2VydmVkNDBEV29yZDEgICh2b2lkKSB7 IHJldHVybiAgNjM0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3lzUmVzZXJ2ZWQ0MERX b3JkMiAgKHZvaWQpIHsgcmV0dXJuICA2MzggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9z eXNSZXNlcnZlZDQwRFdvcmQzICAodm9pZCkgeyByZXR1cm4gIDY0MiA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX3N5c1Jlc2VydmVkNDBEV29yZDQgICh2b2lkKSB7IHJldHVybiAgNjQ2IDsg fSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNMb3dNZW1IZHJUeXBl ICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxp YXNMb3dNZW1IZHJUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc0xvd01lbUhkclR5cGUgIAkoY29u c3QgRW1BbGlhc0xvd01lbUhkclR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29u c3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0 dXJuICAgICA4MjggIDsgfQlFbUFsaWFzTG93TWVtSGRyVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNv bnN0IEVtQWxpYXNMb3dNZW1IZHJUeXBlICA8QT4mKTsJRW1BbGlhc0xvd01lbUhkclR5cGUgIDxB PglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzTG93TWVtSGRyVHlwZSAgPEE+CW9wZXJh dG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNMb3dNZW1IZHJUeXBlICAJKHZvaWQp OwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzTTY4S0V4Y1RhYmxlVHlwZSA8 QT4JIAkJCXZlY3RvcnMgOyAJIEVtQWxpYXNGaXhlZEdsb2JhbHNUeXBlIDxBPgkgCQkJZ2xvYmFs cyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3ZlY3RvcnMgICh2b2lkKSB7IHJldHVy biAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dsb2JhbHMgICh2b2lkKSB7IHJldHVy biAgMjU2IDsgfSAgCX07IAljbGFzcyBFbVByb3h5TG93TWVtSGRyVHlwZSAgCXsJcHVibGljOgl0 eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5TG93TWVtSGRyVHlwZSAgCSh2b2lkKTsJRW1Q cm94eUxvd01lbUhkclR5cGUgIAkoY29uc3QgRW1Qcm94eUxvd01lbUhkclR5cGUgICYpOwlwdHJf dHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0 YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA4MjggIDsg fQlFbVByb3h5TG93TWVtSGRyVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5TG93TWVt SGRyVHlwZSAgJik7CUVtQWxpYXNMb3dNZW1IZHJUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQp Owljb25zdCBFbUFsaWFzTG93TWVtSGRyVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25z dDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgODI4ICBdOwl9IGZMb2NhbERh dGE7CXB1YmxpYzoJICAgICBFbUFsaWFzTTY4S0V4Y1RhYmxlVHlwZSA8TEFTPgkgCQkJdmVjdG9y cyA7IAkgRW1BbGlhc0ZpeGVkR2xvYmFsc1R5cGUgPExBUz4JIAkJCWdsb2JhbHMgOyAgCSAgICAg c3RhdGljIHNpemVfdAlvZmZzZXRvZl92ZWN0b3JzICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9nbG9iYWxzICAodm9pZCkgeyByZXR1cm4gIDI1NiA7IH0g IAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzU3lzQXBwSW5mb1R5cGUg IAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlh c1N5c0FwcEluZm9UeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc1N5c0FwcEluZm9UeXBlICAJKGNv bnN0IEVtQWxpYXNTeXNBcHBJbmZvVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBj b25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyBy ZXR1cm4gICAgIDYwICA7IH0JRW1BbGlhc1N5c0FwcEluZm9UeXBlICA8QT4mCW9wZXJhdG9yPSAo Y29uc3QgRW1BbGlhc1N5c0FwcEluZm9UeXBlICA8QT4mKTsJRW1BbGlhc1N5c0FwcEluZm9UeXBl ICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c0FwcEluZm9UeXBlICA8QT4J b3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1N5c0FwcEluZm9UeXBlICAJ KHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzSW50MTYgPEE+CSAJ CQkJCQljbWQgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQljbWRQQlAgOyAJIEVtQWxpYXNV SW50MTYgPEE+CSAJCQkJCQlsYXVuY2hGbGFncyA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJ CXRhc2tJRCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWNvZGVIIDsgCSBFbUFsaWFzZW11 cHRyIDxBPgkgCQkJCQkJZGJQIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJc3RhY2tQIDsg CSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJZ2xvYmFsc0NodW5rUCA7IAkgRW1BbGlhc1VJbnQx NiA8QT4JIAkJCQkJCW1lbU93bmVySUQgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlkbUFj Y2Vzc1AgOyAJIEVtQWxpYXNFcnIgPEE+CSAJCQkJCQlkbUxhc3RFcnIgOyAJIEVtQWxpYXNlbXVw dHIgPEE+CSAJCQkJCQllcnJFeGNlcHRpb25QIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJ YTVQdHIgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlzdGFja0VuZFAgOyAJIEVtQWxpYXNl bXVwdHIgPEE+CSAJCQkJCQlnbG9iYWxFbmRQIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJ cm9vdFAgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlleHRyYVAgOyAgCSAgICAgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9jbWQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2NtZFBCUCAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfbGF1bmNoRmxhZ3MgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3Rhc2tJRCAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfY29kZUggICh2b2lkKSB7IHJldHVybiAgMTIgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9kYlAgICh2b2lkKSB7IHJldHVybiAgMTYgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9zdGFja1AgICh2b2lkKSB7IHJldHVybiAgMjAgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9nbG9iYWxzQ2h1bmtQICAodm9pZCkgeyByZXR1cm4gIDI0IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfbWVtT3duZXJJRCAgKHZvaWQpIHsgcmV0dXJuICAyOCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2RtQWNjZXNzUCAgKHZvaWQpIHsgcmV0dXJuICAzMCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RtTGFzdEVyciAgKHZvaWQpIHsgcmV0dXJuICAzNCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2VyckV4Y2VwdGlvblAgICh2b2lkKSB7IHJldHVy biAgMzYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hNVB0ciAgKHZvaWQpIHsgcmV0dXJu ICA0MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N0YWNrRW5kUCAgKHZvaWQpIHsgcmV0 dXJuICA0NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dsb2JhbEVuZFAgICh2b2lkKSB7 IHJldHVybiAgNDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yb290UCAgKHZvaWQpIHsg cmV0dXJuICA1MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2V4dHJhUCAgKHZvaWQpIHsg cmV0dXJuICA1NiA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVN5c0FwcEluZm9UeXBlICAJewlwdWJs aWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlTeXNBcHBJbmZvVHlwZSAgCSh2b2lk KTsJRW1Qcm94eVN5c0FwcEluZm9UeXBlICAJKGNvbnN0IEVtUHJveHlTeXNBcHBJbmZvVHlwZSAg Jik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZm TG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAg IDYwICA7IH0JRW1Qcm94eVN5c0FwcEluZm9UeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJv eHlTeXNBcHBJbmZvVHlwZSAgJik7CUVtQWxpYXNTeXNBcHBJbmZvVHlwZSAgPExBUz4Jb3BlcmF0 b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c0FwcEluZm9UeXBlICA8TEFTPglvcGVyYXRvcltd IChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA2MCAgXTsJ fSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc0ludDE2IDxMQVM+CSAJCQkJCQljbWQg OyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWNtZFBCUCA7IAkgRW1BbGlhc1VJbnQxNiA8 TEFTPgkgCQkJCQkJbGF1bmNoRmxhZ3MgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXRh c2tJRCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJY29kZUggOyAJIEVtQWxpYXNlbXVw dHIgPExBUz4JIAkJCQkJCWRiUCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJc3RhY2tQ IDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlnbG9iYWxzQ2h1bmtQIDsgCSBFbUFsaWFz VUludDE2IDxMQVM+CSAJCQkJCQltZW1Pd25lcklEIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJ CQkJCQlkbUFjY2Vzc1AgOyAJIEVtQWxpYXNFcnIgPExBUz4JIAkJCQkJCWRtTGFzdEVyciA7IAkg RW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZXJyRXhjZXB0aW9uUCA7IAkgRW1BbGlhc2VtdXB0 ciA8TEFTPgkgCQkJCQkJYTVQdHIgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXN0YWNr RW5kUCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZ2xvYmFsRW5kUCA7IAkgRW1BbGlh c2VtdXB0ciA8TEFTPgkgCQkJCQkJcm9vdFAgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJ CWV4dHJhUCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NtZCAgKHZvaWQpIHsgcmV0 dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY21kUEJQICAodm9pZCkgeyByZXR1 cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9sYXVuY2hGbGFncyAgKHZvaWQpIHsg cmV0dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdGFza0lEICAodm9pZCkgeyBy ZXR1cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb2RlSCAgKHZvaWQpIHsgcmV0 dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RiUCAgKHZvaWQpIHsgcmV0dXJu ICAxNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N0YWNrUCAgKHZvaWQpIHsgcmV0dXJu ICAyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dsb2JhbHNDaHVua1AgICh2b2lkKSB7 IHJldHVybiAgMjQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9tZW1Pd25lcklEICAodm9p ZCkgeyByZXR1cm4gIDI4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZG1BY2Nlc3NQICAo dm9pZCkgeyByZXR1cm4gIDMwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZG1MYXN0RXJy ICAodm9pZCkgeyByZXR1cm4gIDM0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXJyRXhj ZXB0aW9uUCAgKHZvaWQpIHsgcmV0dXJuICAzNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2E1UHRyICAodm9pZCkgeyByZXR1cm4gIDQwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf c3RhY2tFbmRQICAodm9pZCkgeyByZXR1cm4gIDQ0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfZ2xvYmFsRW5kUCAgKHZvaWQpIHsgcmV0dXJuICA0OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3Jvb3RQICAodm9pZCkgeyByZXR1cm4gIDUyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfZXh0cmFQICAodm9pZCkgeyByZXR1cm4gIDU2IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUg PGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNTeXNMaWJUYmxFbnRyeVR5cGUgIAl7CXB1YmxpYzoJdHlw ZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc1N5c0xpYlRibEVudHJ5 VHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNTeXNMaWJUYmxFbnRyeVR5cGUgIAkoY29uc3QgRW1B bGlhc1N5c0xpYlRibEVudHJ5VHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25z dAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1 cm4gICAgIDEwICA7IH0JRW1BbGlhc1N5c0xpYlRibEVudHJ5VHlwZSAgPEE+JglvcGVyYXRvcj0g KGNvbnN0IEVtQWxpYXNTeXNMaWJUYmxFbnRyeVR5cGUgIDxBPiYpOwlFbUFsaWFzU3lzTGliVGJs RW50cnlUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c0xpYlRibEVu dHJ5VHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNTeXNM aWJUYmxFbnRyeVR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVt QWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlkaXNwYXRjaFRibFAgOyAJIEVtQWxpYXNlbXVwdHIgPEE+ CSAJCQkJCQlnbG9iYWxzUCA7IAkgRW1BbGlhc0xvY2FsSUQgPEE+CSAJCQkJCWRiSUQgOyAJIEVt QWxpYXNlbXVwdHIgPEE+CSAJCQkJCQljb2RlUnNjSCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2Rpc3BhdGNoVGJsUCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfZ2xvYmFsc1AgICh2b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2RiSUQgICh2b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2NvZGVSc2NIICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAgCX07IAljbGFzcyBF bVByb3h5U3lzTGliVGJsRW50cnlUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5 cGU7CUVtUHJveHlTeXNMaWJUYmxFbnRyeVR5cGUgIAkodm9pZCk7CUVtUHJveHlTeXNMaWJUYmxF bnRyeVR5cGUgIAkoY29uc3QgRW1Qcm94eVN5c0xpYlRibEVudHJ5VHlwZSAgJik7CXB0cl90eXBl CQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9 CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDEwICA7IH0JRW1Q cm94eVN5c0xpYlRibEVudHJ5VHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5U3lzTGli VGJsRW50cnlUeXBlICAmKTsJRW1BbGlhc1N5c0xpYlRibEVudHJ5VHlwZSAgPExBUz4Jb3BlcmF0 b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c0xpYlRibEVudHJ5VHlwZSAgPExBUz4Jb3BlcmF0 b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMTAg IF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJ CWRpc3BhdGNoVGJsUCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZ2xvYmFsc1AgOyAJ IEVtQWxpYXNMb2NhbElEIDxMQVM+CSAJCQkJCWRiSUQgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4J IAkJCQkJCWNvZGVSc2NIIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGlzcGF0Y2hU YmxQICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9nbG9i YWxzUCAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGJJ RCAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29kZVJz Y0ggICh2b2lkKSB7IHJldHVybiAgMTIgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4J Y2xhc3MgRW1BbGlhc1BlbkJ0bkluZm9UeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUg QTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNQZW5CdG5JbmZvVHlwZSAgCShwdHJfdHlwZSk7 CUVtQWxpYXNQZW5CdG5JbmZvVHlwZSAgCShjb25zdCBFbUFsaWFzUGVuQnRuSW5mb1R5cGUgICYp OwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMg c2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAxNCAgOyB9CUVtQWxpYXNQZW5C dG5JbmZvVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNQZW5CdG5JbmZvVHlwZSAg PEE+Jik7CUVtQWxpYXNQZW5CdG5JbmZvVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0 IEVtQWxpYXNQZW5CdG5JbmZvVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZh dGU6CUVtQWxpYXNQZW5CdG5JbmZvVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJs aWM6CSAgICAgRW1BbGlhc1JlY3RhbmdsZVR5cGUgPEE+CSAJCQkJYm91bmRzUiA7IAkgRW1BbGlh c1dDaGFyIDxBPgkgCQkJCQkJYXNjaWlDb2RlIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJ a2V5Q29kZSA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCW1vZGlmaWVycyA7ICAJICAgICBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2JvdW5kc1IgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2FzY2lpQ29kZSAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfa2V5Q29kZSAgKHZvaWQpIHsgcmV0dXJuICAxMCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21vZGlmaWVycyAgKHZvaWQpIHsgcmV0dXJuICAxMiA7 IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVBlbkJ0bkluZm9UeXBlICAJewlwdWJsaWM6CXR5cGVkZWYg dm9pZCogcHRyX3R5cGU7CUVtUHJveHlQZW5CdG5JbmZvVHlwZSAgCSh2b2lkKTsJRW1Qcm94eVBl bkJ0bkluZm9UeXBlICAJKGNvbnN0IEVtUHJveHlQZW5CdG5JbmZvVHlwZSAgJik7CXB0cl90eXBl CQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9 CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDE0ICA7IH0JRW1Q cm94eVBlbkJ0bkluZm9UeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlQZW5CdG5JbmZv VHlwZSAgJik7CUVtQWxpYXNQZW5CdG5JbmZvVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJ Y29uc3QgRW1BbGlhc1BlbkJ0bkluZm9UeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0 Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAxNCAgXTsJfSBmTG9jYWxEYXRh OwlwdWJsaWM6CSAgICAgRW1BbGlhc1JlY3RhbmdsZVR5cGUgPExBUz4JIAkJCQlib3VuZHNSIDsg CSBFbUFsaWFzV0NoYXIgPExBUz4JIAkJCQkJCWFzY2lpQ29kZSA7IAkgRW1BbGlhc1VJbnQxNiA8 TEFTPgkgCQkJCQkJa2V5Q29kZSA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJbW9kaWZp ZXJzIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYm91bmRzUiAgKHZvaWQpIHsgcmV0 dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYXNjaWlDb2RlICAodm9pZCkgeyBy ZXR1cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9rZXlDb2RlICAodm9pZCkgeyBy ZXR1cm4gIDEwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbW9kaWZpZXJzICAodm9pZCkg eyByZXR1cm4gIDEyIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxp YXNTbmRDb21tYW5kVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBl IHB0cl90eXBlOwlFbUFsaWFzU25kQ29tbWFuZFR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzU25k Q29tbWFuZFR5cGUgIAkoY29uc3QgRW1BbGlhc1NuZENvbW1hbmRUeXBlICAmKTsJcHRyX3R5cGUJ CQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0 U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTAgIDsgfQlFbUFsaWFzU25kQ29tbWFuZFR5cGUg IDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzU25kQ29tbWFuZFR5cGUgIDxBPiYpOwlFbUFs aWFzU25kQ29tbWFuZFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU25k Q29tbWFuZFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFz U25kQ29tbWFuZFR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVt QWxpYXNVSW50OCA8QT4JIAkJCQkJCWNtZCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJcmVz ZXJ2ZWQgOyAJIEVtQWxpYXNJbnQzMiA8QT4JIAkJCQkJCXBhcmFtMSA7IAkgRW1BbGlhc1VJbnQx NiA8QT4JIAkJCQkJCXBhcmFtMiA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXBhcmFtMyA7 ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NtZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVzZXJ2ZWQgICh2b2lkKSB7IHJldHVybiAgMSA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BhcmFtMSAgKHZvaWQpIHsgcmV0dXJuICAyIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcGFyYW0yICAodm9pZCkgeyByZXR1cm4gIDYgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wYXJhbTMgICh2b2lkKSB7IHJldHVybiAgOCA7IH0g IAl9OyAJY2xhc3MgRW1Qcm94eVNuZENvbW1hbmRUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9p ZCogcHRyX3R5cGU7CUVtUHJveHlTbmRDb21tYW5kVHlwZSAgCSh2b2lkKTsJRW1Qcm94eVNuZENv bW1hbmRUeXBlICAJKGNvbnN0IEVtUHJveHlTbmRDb21tYW5kVHlwZSAgJik7CXB0cl90eXBlCQkJ R2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0 YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDEwICA7IH0JRW1Qcm94 eVNuZENvbW1hbmRUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlTbmRDb21tYW5kVHlw ZSAgJik7CUVtQWxpYXNTbmRDb21tYW5kVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29u c3QgRW1BbGlhc1NuZENvbW1hbmRUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlw cml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAxMCAgXTsJfSBmTG9jYWxEYXRhOwlw dWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQljbWQgOyAJIEVtQWxpYXNVSW50 OCA8TEFTPgkgCQkJCQkJcmVzZXJ2ZWQgOyAJIEVtQWxpYXNJbnQzMiA8TEFTPgkgCQkJCQkJcGFy YW0xIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlwYXJhbTIgOyAJIEVtQWxpYXNVSW50 MTYgPExBUz4JIAkJCQkJCXBhcmFtMyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Nt ZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVzZXJ2 ZWQgICh2b2lkKSB7IHJldHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BhcmFt MSAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcGFyYW0y ICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wYXJhbTMg ICh2b2lkKSB7IHJldHVybiAgOCA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFz cyBFbUFsaWFza2VybmVsX2luZm9fdGFzayAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6 OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFza2VybmVsX2luZm9fdGFzayAgCShwdHJfdHlwZSk7 CUVtQWxpYXNrZXJuZWxfaW5mb190YXNrICAJKGNvbnN0IEVtQWxpYXNrZXJuZWxfaW5mb190YXNr ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3Rh dGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNTYgIDsgfQlFbUFsaWFz a2VybmVsX2luZm9fdGFzayAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNrZXJuZWxfaW5m b190YXNrICA8QT4mKTsJRW1BbGlhc2tlcm5lbF9pbmZvX3Rhc2sgIDxBPglvcGVyYXRvcltdIChp bnQpOwljb25zdCBFbUFsaWFza2VybmVsX2luZm9fdGFzayAgPEE+CW9wZXJhdG9yW10gKGludCkg Y29uc3Q7CXByaXZhdGU6CUVtQWxpYXNrZXJuZWxfaW5mb190YXNrICAJKHZvaWQpOwlwdHJfdHlw ZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJaWQgOyAJIEVt QWxpYXNVSW50MzIgPEE+CSAJCQkJCQluZXh0SUQgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJ CQl0YWcgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlzdGF0dXMgOyAJIEVtQWxpYXNVSW50 MzIgPEE+CSAJCQkJCQl0aW1lciA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXRpbWVTbGlj ZSA7IAkgRW1BbGlhc0ludDE2IDxBPgkgCQkJCQkJcHJpb3JpdHkgOyAJIEVtQWxpYXNVSW50MzIg PEE+CSAJCQkJCQlhdHRyaWJ1dGVzIDsgCSBFbUFsaWFzSW50MTYgPEE+CSAJCQkJCQlwZW5kaW5n Q2FsbHMgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlzZW5kZXJUYXNrSUQgOyAJIEVtQWxp YXNVSW50MzIgPEE+CSAJCQkJCQltc2dFeGNoYW5nZUlEIDsgCSBFbUFsaWFzVUludDMyIDxBPgkg CQkJCQkJdGNiUCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXN0YWNrUCA7IAkgRW1BbGlh c1VJbnQzMiA8QT4JIAkJCQkJCXN0YWNrU3RhcnQgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJ CQlzdGFja1NpemUgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pZCAgKHZvaWQpIHsg cmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmV4dElEICAodm9pZCkgeyBy ZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90YWcgICh2b2lkKSB7IHJldHVy biAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N0YXR1cyAgKHZvaWQpIHsgcmV0dXJu ICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RpbWVyICAodm9pZCkgeyByZXR1cm4g IDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdGltZVNsaWNlICAodm9pZCkgeyByZXR1 cm4gIDIwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcHJpb3JpdHkgICh2b2lkKSB7IHJl dHVybiAgMjQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hdHRyaWJ1dGVzICAodm9pZCkg eyByZXR1cm4gIDI2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcGVuZGluZ0NhbGxzICAo dm9pZCkgeyByZXR1cm4gIDMwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc2VuZGVyVGFz a0lEICAodm9pZCkgeyByZXR1cm4gIDMyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbXNn RXhjaGFuZ2VJRCAgKHZvaWQpIHsgcmV0dXJuICAzNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3RjYlAgICh2b2lkKSB7IHJldHVybiAgNDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9zdGFja1AgICh2b2lkKSB7IHJldHVybiAgNDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9zdGFja1N0YXJ0ICAodm9pZCkgeyByZXR1cm4gIDQ4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2Zfc3RhY2tTaXplICAodm9pZCkgeyByZXR1cm4gIDUyIDsgfSAgCX07IAljbGFzcyBFbVBy b3h5a2VybmVsX2luZm9fdGFzayAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlF bVByb3h5a2VybmVsX2luZm9fdGFzayAgCSh2b2lkKTsJRW1Qcm94eWtlcm5lbF9pbmZvX3Rhc2sg IAkoY29uc3QgRW1Qcm94eWtlcm5lbF9pbmZvX3Rhc2sgICYpOwlwdHJfdHlwZQkJCUdldFB0cgko dm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6 ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA1NiAgOyB9CUVtUHJveHlrZXJuZWxf aW5mb190YXNrICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlrZXJuZWxfaW5mb190YXNrICAm KTsJRW1BbGlhc2tlcm5lbF9pbmZvX3Rhc2sgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0 IEVtQWxpYXNrZXJuZWxfaW5mb190YXNrICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlw cml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA1NiAgXTsJfSBmTG9jYWxEYXRhOwlw dWJsaWM6CSAgICAgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJaWQgOyAJIEVtQWxpYXNVSW50 MzIgPExBUz4JIAkJCQkJCW5leHRJRCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJdGFn IDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlzdGF0dXMgOyAJIEVtQWxpYXNVSW50MzIg PExBUz4JIAkJCQkJCXRpbWVyIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQl0aW1lU2xp Y2UgOyAJIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJcHJpb3JpdHkgOyAJIEVtQWxpYXNVSW50 MzIgPExBUz4JIAkJCQkJCWF0dHJpYnV0ZXMgOyAJIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJ cGVuZGluZ0NhbGxzIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlzZW5kZXJUYXNrSUQg OyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCW1zZ0V4Y2hhbmdlSUQgOyAJIEVtQWxpYXNV SW50MzIgPExBUz4JIAkJCQkJCXRjYlAgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXN0 YWNrUCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJc3RhY2tTdGFydCA7IAkgRW1BbGlh c1VJbnQzMiA8TEFTPgkgCQkJCQkJc3RhY2tTaXplIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfaWQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X25leHRJRCAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf dGFnICAodm9pZCkgeyByZXR1cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zdGF0 dXMgICh2b2lkKSB7IHJldHVybiAgMTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90aW1l ciAgKHZvaWQpIHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RpbWVT bGljZSAgKHZvaWQpIHsgcmV0dXJuICAyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3By aW9yaXR5ICAodm9pZCkgeyByZXR1cm4gIDI0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf YXR0cmlidXRlcyAgKHZvaWQpIHsgcmV0dXJuICAyNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3BlbmRpbmdDYWxscyAgKHZvaWQpIHsgcmV0dXJuICAzMCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3NlbmRlclRhc2tJRCAgKHZvaWQpIHsgcmV0dXJuICAzMiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX21zZ0V4Y2hhbmdlSUQgICh2b2lkKSB7IHJldHVybiAgMzYgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl90Y2JQICAodm9pZCkgeyByZXR1cm4gIDQwIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3RhY2tQICAodm9pZCkgeyByZXR1cm4gIDQ0IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3RhY2tTdGFydCAgKHZvaWQpIHsgcmV0dXJuICA0OCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N0YWNrU2l6ZSAgKHZvaWQpIHsgcmV0dXJuICA1MiA7 IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFza2VybmVsX2luZm9f c2VtYXBob3JlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5 cGU7CUVtQWxpYXNrZXJuZWxfaW5mb19zZW1hcGhvcmUgIAkocHRyX3R5cGUpOwlFbUFsaWFza2Vy bmVsX2luZm9fc2VtYXBob3JlICAJKGNvbnN0IEVtQWxpYXNrZXJuZWxfaW5mb19zZW1hcGhvcmUg ICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0 aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyMiAgOyB9CUVtQWxpYXNr ZXJuZWxfaW5mb19zZW1hcGhvcmUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFza2VybmVs X2luZm9fc2VtYXBob3JlICA8QT4mKTsJRW1BbGlhc2tlcm5lbF9pbmZvX3NlbWFwaG9yZSAgPEE+ CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNrZXJuZWxfaW5mb19zZW1hcGhvcmUgIDxB PglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFza2VybmVsX2luZm9fc2Vt YXBob3JlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUlu dDMyIDxBPgkgCQkJCQkJaWQgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQluZXh0SUQgOyAJ IEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQl0YWcgOyAJIEVtQWxpYXNJbnQxNiA8QT4JIAkJCQkJ CWluaXRWYWx1ZSA7IAkgRW1BbGlhc0ludDE2IDxBPgkgCQkJCQkJY3VyVmFsdWUgOyAJIEVtQWxp YXNJbnQxNiA8QT4JIAkJCQkJCW5lc3RMZXZlbCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJ CW93bmVySUQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pZCAgKHZvaWQpIHsgcmV0 dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmV4dElEICAodm9pZCkgeyByZXR1 cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90YWcgICh2b2lkKSB7IHJldHVybiAg OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luaXRWYWx1ZSAgKHZvaWQpIHsgcmV0dXJu ICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2N1clZhbHVlICAodm9pZCkgeyByZXR1 cm4gIDE0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmVzdExldmVsICAodm9pZCkgeyBy ZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfb3duZXJJRCAgKHZvaWQpIHsg cmV0dXJuICAxOCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eWtlcm5lbF9pbmZvX3NlbWFwaG9yZSAg CXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5a2VybmVsX2luZm9fc2Vt YXBob3JlICAJKHZvaWQpOwlFbVByb3h5a2VybmVsX2luZm9fc2VtYXBob3JlICAJKGNvbnN0IEVt UHJveHlrZXJuZWxfaW5mb19zZW1hcGhvcmUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkg Y29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlH ZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyMiAgOyB9CUVtUHJveHlrZXJuZWxfaW5mb19z ZW1hcGhvcmUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eWtlcm5lbF9pbmZvX3NlbWFwaG9y ZSAgJik7CUVtQWxpYXNrZXJuZWxfaW5mb19zZW1hcGhvcmUgIDxMQVM+CW9wZXJhdG9yW10gKGlu dCk7CWNvbnN0IEVtQWxpYXNrZXJuZWxfaW5mb19zZW1hcGhvcmUgIDxMQVM+CW9wZXJhdG9yW10g KGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDIyICBdOwl9 IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlpZCA7 IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJbmV4dElEIDsgCSBFbUFsaWFzVUludDMyIDxM QVM+CSAJCQkJCQl0YWcgOyAJIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJaW5pdFZhbHVlIDsg CSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCWN1clZhbHVlIDsgCSBFbUFsaWFzSW50MTYgPExB Uz4JIAkJCQkJCW5lc3RMZXZlbCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJb3duZXJJ RCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2lkICAodm9pZCkgeyByZXR1cm4gIDAg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uZXh0SUQgICh2b2lkKSB7IHJldHVybiAgNCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RhZyAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5pdFZhbHVlICAodm9pZCkgeyByZXR1cm4gIDEyIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY3VyVmFsdWUgICh2b2lkKSB7IHJldHVybiAgMTQg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uZXN0TGV2ZWwgICh2b2lkKSB7IHJldHVybiAg MTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9vd25lcklEICAodm9pZCkgeyByZXR1cm4g IDE4IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNrZXJuZWxf aW5mb190aW1lciAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90 eXBlOwlFbUFsaWFza2VybmVsX2luZm9fdGltZXIgIAkocHRyX3R5cGUpOwlFbUFsaWFza2VybmVs X2luZm9fdGltZXIgIAkoY29uc3QgRW1BbGlhc2tlcm5lbF9pbmZvX3RpbWVyICAmKTsJcHRyX3R5 cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJ R2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMjQgIDsgfQlFbUFsaWFza2VybmVsX2luZm9f dGltZXIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFza2VybmVsX2luZm9fdGltZXIgIDxB PiYpOwlFbUFsaWFza2VybmVsX2luZm9fdGltZXIgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25z dCBFbUFsaWFza2VybmVsX2luZm9fdGltZXIgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlw cml2YXRlOglFbUFsaWFza2VybmVsX2luZm9fdGltZXIgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0 cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlpZCA7IAkgRW1BbGlhc1VJ bnQzMiA8QT4JIAkJCQkJCW5leHRJRCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXRhZyA7 IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXRpY2tzTGVmdCA7IAkgRW1BbGlhc1VJbnQzMiA8 QT4JIAkJCQkJCXBlcmlvZCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXByb2MgOyAgCSAg ICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmV4dElEICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl90YWcgICh2b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3RpY2tzTGVmdCAgKHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3BlcmlvZCAgKHZvaWQpIHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3Byb2MgICh2b2lkKSB7IHJldHVybiAgMjAgOyB9ICAJfTsgCWNs YXNzIEVtUHJveHlrZXJuZWxfaW5mb190aW1lciAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0 cl90eXBlOwlFbVByb3h5a2VybmVsX2luZm9fdGltZXIgIAkodm9pZCk7CUVtUHJveHlrZXJuZWxf aW5mb190aW1lciAgCShjb25zdCBFbVByb3h5a2VybmVsX2luZm9fdGltZXIgICYpOwlwdHJfdHlw ZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsg fQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyNCAgOyB9CUVt UHJveHlrZXJuZWxfaW5mb190aW1lciAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5a2VybmVs X2luZm9fdGltZXIgICYpOwlFbUFsaWFza2VybmVsX2luZm9fdGltZXIgIDxMQVM+CW9wZXJhdG9y W10gKGludCk7CWNvbnN0IEVtQWxpYXNrZXJuZWxfaW5mb190aW1lciAgPExBUz4Jb3BlcmF0b3Jb XSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMjQgIF07 CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCWlk IDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQluZXh0SUQgOyAJIEVtQWxpYXNVSW50MzIg PExBUz4JIAkJCQkJCXRhZyA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJdGlja3NMZWZ0 IDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlwZXJpb2QgOyAJIEVtQWxpYXNVSW50MzIg PExBUz4JIAkJCQkJCXByb2MgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pZCAgKHZv aWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmV4dElEICAodm9p ZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90YWcgICh2b2lkKSB7 IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RpY2tzTGVmdCAgKHZvaWQp IHsgcmV0dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BlcmlvZCAgKHZvaWQp IHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Byb2MgICh2b2lkKSB7 IHJldHVybiAgMjAgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlh c1N5c0tlcm5lbEluZm9UeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5 cGUgcHRyX3R5cGU7CUVtQWxpYXNTeXNLZXJuZWxJbmZvVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxp YXNTeXNLZXJuZWxJbmZvVHlwZSAgCShjb25zdCBFbUFsaWFzU3lzS2VybmVsSW5mb1R5cGUgICYp OwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMg c2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA2MiAgOyB9CUVtQWxpYXNTeXNL ZXJuZWxJbmZvVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNTeXNLZXJuZWxJbmZv VHlwZSAgPEE+Jik7CUVtQWxpYXNTeXNLZXJuZWxJbmZvVHlwZSAgPEE+CW9wZXJhdG9yW10gKGlu dCk7CWNvbnN0IEVtQWxpYXNTeXNLZXJuZWxJbmZvVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkg Y29uc3Q7CXByaXZhdGU6CUVtQWxpYXNTeXNLZXJuZWxJbmZvVHlwZSAgCSh2b2lkKTsJcHRyX3R5 cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJc2VsZWN0b3Ig OyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXJlc2VydmVkIDsgCSBFbUFsaWFzVUludDMyIDxB PgkgCQkJCQkJaWQgOyAJIEVtQWxpYXNrZXJuZWxfaW5mb190YXNrIDxBPgkgCQkJdGFzayA7IAkg RW1BbGlhc2tlcm5lbF9pbmZvX3NlbWFwaG9yZSA8QT4JIAkJc2VtYXBob3JlIDsgCSBFbUFsaWFz a2VybmVsX2luZm9fdGltZXIgPEE+CSAJCQl0aW1lciA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3NlbGVjdG9yICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9yZXNlcnZlZCAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfaWQgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3Rhc2sgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3NlbWFwaG9yZSAgKHZvaWQpIHsgcmV0dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfdGltZXIgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVN5c0tl cm5lbEluZm9UeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlT eXNLZXJuZWxJbmZvVHlwZSAgCSh2b2lkKTsJRW1Qcm94eVN5c0tlcm5lbEluZm9UeXBlICAJKGNv bnN0IEVtUHJveHlTeXNLZXJuZWxJbmZvVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lk KSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJ CUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDYyICA7IH0JRW1Qcm94eVN5c0tlcm5lbElu Zm9UeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlTeXNLZXJuZWxJbmZvVHlwZSAgJik7 CUVtQWxpYXNTeXNLZXJuZWxJbmZvVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3Qg RW1BbGlhc1N5c0tlcm5lbEluZm9UeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlw cml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA2MiAgXTsJfSBmTG9jYWxEYXRhOwlw dWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlzZWxlY3RvciA7IAkgRW1BbGlh c1VJbnQ4IDxMQVM+CSAJCQkJCQlyZXNlcnZlZCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJ CQkJaWQgOyAJIEVtQWxpYXNrZXJuZWxfaW5mb190YXNrIDxMQVM+CSAJCQl0YXNrIDsgCSBFbUFs aWFza2VybmVsX2luZm9fc2VtYXBob3JlIDxMQVM+CSAJCXNlbWFwaG9yZSA7IAkgRW1BbGlhc2tl cm5lbF9pbmZvX3RpbWVyIDxMQVM+CSAJCQl0aW1lciA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3NlbGVjdG9yICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9yZXNlcnZlZCAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfaWQgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3Rhc2sgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3NlbWFwaG9yZSAgKHZvaWQpIHsgcmV0dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfdGltZXIgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gIAl9OyAgICAKICB0ZW1wbGF0ZSA8Y2xh c3MgQT4JY2xhc3MgRW1BbGlhc1Nsa1BrdEZvb3RlclR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0 eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc1Nsa1BrdEZvb3RlclR5cGUgIAko cHRyX3R5cGUpOwlFbUFsaWFzU2xrUGt0Rm9vdGVyVHlwZSAgCShjb25zdCBFbUFsaWFzU2xrUGt0 Rm9vdGVyVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBm UHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIgIDsg fQlFbUFsaWFzU2xrUGt0Rm9vdGVyVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNT bGtQa3RGb290ZXJUeXBlICA8QT4mKTsJRW1BbGlhc1Nsa1BrdEZvb3RlclR5cGUgIDxBPglvcGVy YXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU2xrUGt0Rm9vdGVyVHlwZSAgPEE+CW9wZXJhdG9y W10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNTbGtQa3RGb290ZXJUeXBlICAJKHZvaWQp OwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJ Y3JjMTYgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jcmMxNiAgKHZvaWQpIHsgcmV0 dXJuICAwIDsgfSAgCX07IAljbGFzcyBFbVByb3h5U2xrUGt0Rm9vdGVyVHlwZSAgCXsJcHVibGlj Ogl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U2xrUGt0Rm9vdGVyVHlwZSAgCSh2b2lk KTsJRW1Qcm94eVNsa1BrdEZvb3RlclR5cGUgIAkoY29uc3QgRW1Qcm94eVNsa1BrdEZvb3RlclR5 cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBl KSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJu ICAgICAyICA7IH0JRW1Qcm94eVNsa1BrdEZvb3RlclR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3Qg RW1Qcm94eVNsa1BrdEZvb3RlclR5cGUgICYpOwlFbUFsaWFzU2xrUGt0Rm9vdGVyVHlwZSAgPExB Uz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1Nsa1BrdEZvb3RlclR5cGUgIDxMQVM+ CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNb ICAgIDIgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPExBUz4J IAkJCQkJCWNyYzE2IDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY3JjMTYgICh2b2lk KSB7IHJldHVybiAgMCA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFs aWFzU2xrUGt0SGVhZGVyVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90 eXBlIHB0cl90eXBlOwlFbUFsaWFzU2xrUGt0SGVhZGVyVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxp YXNTbGtQa3RIZWFkZXJUeXBlICAJKGNvbnN0IEVtQWxpYXNTbGtQa3RIZWFkZXJUeXBlICAmKTsJ cHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNp emVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTAgIDsgfQlFbUFsaWFzU2xrUGt0 SGVhZGVyVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNTbGtQa3RIZWFkZXJUeXBl ICA8QT4mKTsJRW1BbGlhc1Nsa1BrdEhlYWRlclR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwlj b25zdCBFbUFsaWFzU2xrUGt0SGVhZGVyVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7 CXByaXZhdGU6CUVtQWxpYXNTbGtQa3RIZWFkZXJUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQ dHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJc2lnbmF0dXJlMSA7IAkg RW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJc2lnbmF0dXJlMiA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkg CQkJCQkJZGVzdCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJc3JjIDsgCSBFbUFsaWFzVUlu dDggPEE+CSAJCQkJCQl0eXBlIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJYm9keVNpemUg OyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXRyYW5zSWQgOyAJIEVtQWxpYXNTbGtQa3RIZWFk ZXJDaGVja3N1bSA8QT4JIAkJY2hlY2tzdW0gOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9zaWduYXR1cmUxICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9zaWduYXR1cmUyICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9kZXN0ICAodm9pZCkgeyByZXR1cm4gIDMgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9zcmMgICh2b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3R5cGUgICh2b2lkKSB7IHJldHVybiAgNSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Jv ZHlTaXplICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90 cmFuc0lkICAodm9pZCkgeyByZXR1cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9j aGVja3N1bSAgKHZvaWQpIHsgcmV0dXJuICA5IDsgfSAgCX07IAljbGFzcyBFbVByb3h5U2xrUGt0 SGVhZGVyVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U2xr UGt0SGVhZGVyVHlwZSAgCSh2b2lkKTsJRW1Qcm94eVNsa1BrdEhlYWRlclR5cGUgIAkoY29uc3Qg RW1Qcm94eVNsa1BrdEhlYWRlclR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29u c3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRT aXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAxMCAgOyB9CUVtUHJveHlTbGtQa3RIZWFkZXJUeXBl ICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlTbGtQa3RIZWFkZXJUeXBlICAmKTsJRW1BbGlh c1Nsa1BrdEhlYWRlclR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNT bGtQa3RIZWFkZXJUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglz dHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAxMCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAg ICAgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJc2lnbmF0dXJlMSA7IAkgRW1BbGlhc1VJbnQ4 IDxMQVM+CSAJCQkJCQlzaWduYXR1cmUyIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWRl c3QgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJc3JjIDsgCSBFbUFsaWFzVUludDggPExB Uz4JIAkJCQkJCXR5cGUgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWJvZHlTaXplIDsg CSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCXRyYW5zSWQgOyAJIEVtQWxpYXNTbGtQa3RIZWFk ZXJDaGVja3N1bSA8TEFTPgkgCQljaGVja3N1bSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3NpZ25hdHVyZTEgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3NpZ25hdHVyZTIgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2Rlc3QgICh2b2lkKSB7IHJldHVybiAgMyA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3NyYyAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfdHlwZSAgKHZvaWQpIHsgcmV0dXJuICA1IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf Ym9keVNpemUgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3RyYW5zSWQgICh2b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2NoZWNrc3VtICAodm9pZCkgeyByZXR1cm4gIDkgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xh c3MgQT4JY2xhc3MgRW1BbGlhc1N5c1BrdFJQQ1BhcmFtVHlwZSAgCXsJcHVibGljOgl0eXBlZGVm IHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzU3lzUGt0UlBDUGFyYW1UeXBl ICAJKHB0cl90eXBlKTsJRW1BbGlhc1N5c1BrdFJQQ1BhcmFtVHlwZSAgCShjb25zdCBFbUFsaWFz U3lzUGt0UlBDUGFyYW1UeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsg cmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAg ICAgNiAgOyB9CUVtQWxpYXNTeXNQa3RSUENQYXJhbVR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25z dCBFbUFsaWFzU3lzUGt0UlBDUGFyYW1UeXBlICA8QT4mKTsJRW1BbGlhc1N5c1BrdFJQQ1BhcmFt VHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTeXNQa3RSUENQYXJhbVR5 cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzU3lzUGt0UlBD UGFyYW1UeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFz VUludDggPEE+CSAJCQkJCQlieVJlZiA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJc2l6ZSA7 IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJYXNCeXRlIDsgCSBFbUFsaWFzVUludDE2IDxBPgkg CQkJCQkJYXNTaG9ydCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCWFzTG9uZyA7ICAJICAg ICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2J5UmVmICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9zaXplICAodm9pZCkgeyByZXR1cm4gIDEgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9hc0J5dGUgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2FzU2hvcnQgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2FzTG9uZyAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAgCX07IAlj bGFzcyBFbVByb3h5U3lzUGt0UlBDUGFyYW1UeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCog cHRyX3R5cGU7CUVtUHJveHlTeXNQa3RSUENQYXJhbVR5cGUgIAkodm9pZCk7CUVtUHJveHlTeXNQ a3RSUENQYXJhbVR5cGUgIAkoY29uc3QgRW1Qcm94eVN5c1BrdFJQQ1BhcmFtVHlwZSAgJik7CXB0 cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxE YXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDYgIDsg fQlFbVByb3h5U3lzUGt0UlBDUGFyYW1UeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlT eXNQa3RSUENQYXJhbVR5cGUgICYpOwlFbUFsaWFzU3lzUGt0UlBDUGFyYW1UeXBlICA8TEFTPglv cGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU3lzUGt0UlBDUGFyYW1UeXBlICA8TEFTPglv cGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAg ICA2ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDggPExBUz4JIAkJ CQkJCWJ5UmVmIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCXNpemUgOyAJIEVtQWxpYXNV SW50OCA8TEFTPgkgCQkJCQkJYXNCeXRlIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlh c1Nob3J0IDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlhc0xvbmcgOyAgCSAgICAgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9ieVJlZiAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2Zfc2l6ZSAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfYXNCeXRlICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9hc1Nob3J0ICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9hc0xvbmcgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gIAl9OyAgIAkgIHRl bXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzU3lzUGt0Qm9keVR5cGUgIAl7CXB1YmxpYzoJ dHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc1N5c1BrdEJvZHlU eXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc1N5c1BrdEJvZHlUeXBlICAJKGNvbnN0IEVtQWxpYXNT eXNQa3RCb2R5VHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVy biBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgICgy NTYgKzE2KSAgIDsgfQlFbUFsaWFzU3lzUGt0Qm9keVR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25z dCBFbUFsaWFzU3lzUGt0Qm9keVR5cGUgIDxBPiYpOwlFbUFsaWFzU3lzUGt0Qm9keVR5cGUgIDxB PglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU3lzUGt0Qm9keVR5cGUgIDxBPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzU3lzUGt0Qm9keVR5cGUgIAkodm9p ZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJ CWNvbW1hbmQgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCV9maWxsZXIgOyAJIEVtQWxpYXNV SW50OCA8QT4JIAkJCQkJCWRhdGEgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb21t YW5kICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9fZmls bGVyICAodm9pZCkgeyByZXR1cm4gIDEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kYXRh ICAodm9pZCkgeyByZXR1cm4gIDIgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlTeXNQa3RCb2R5VHlw ZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U3lzUGt0Qm9keVR5 cGUgIAkodm9pZCk7CUVtUHJveHlTeXNQa3RCb2R5VHlwZSAgCShjb25zdCBFbVByb3h5U3lzUGt0 Qm9keVR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0 cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsg cmV0dXJuICAgICAoMjU2ICsxNikgICA7IH0JRW1Qcm94eVN5c1BrdEJvZHlUeXBlICAmCQlvcGVy YXRvcj0gKGNvbnN0IEVtUHJveHlTeXNQa3RCb2R5VHlwZSAgJik7CUVtQWxpYXNTeXNQa3RCb2R5 VHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c1BrdEJvZHlUeXBl ICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJ X2J5dGVzWyAgICAoMjU2ICsxNikgICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFs aWFzVUludDggPExBUz4JIAkJCQkJCWNvbW1hbmQgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJ CQkJX2ZpbGxlciA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlkYXRhIDsgIAkgICAgIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29tbWFuZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX2ZpbGxlciAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGF0YSAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAgCX07ICAg CSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNTeXNQa3RDb250aW51ZUNtZFR5cGUg IAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlh c1N5c1BrdENvbnRpbnVlQ21kVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNTeXNQa3RDb250aW51 ZUNtZFR5cGUgIAkoY29uc3QgRW1BbGlhc1N5c1BrdENvbnRpbnVlQ21kVHlwZSAgJik7CXB0cl90 eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJ CUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDkwICA7IH0JRW1BbGlhc1N5c1BrdENvbnRp bnVlQ21kVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNTeXNQa3RDb250aW51ZUNt ZFR5cGUgIDxBPiYpOwlFbUFsaWFzU3lzUGt0Q29udGludWVDbWRUeXBlICA8QT4Jb3BlcmF0b3Jb XSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c1BrdENvbnRpbnVlQ21kVHlwZSAgPEE+CW9wZXJhdG9y W10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNTeXNQa3RDb250aW51ZUNtZFR5cGUgIAko dm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50OCA8QT4JIAkJ CQkJCWNvbW1hbmQgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCV9maWxsZXIgOyAJIEVtQWxp YXNNNjhLUmVnc1R5cGUgPEE+CSAJCQkJcmVncyA7IAkgRW1BbGlhc0Jvb2xlYW4gPEE+CSAJCQkJ CXN0ZXBTcHkgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXJlc2VydmVkIDsgCSBFbUFsaWFz VUludDMyIDxBPgkgCQkJCQkJc3NBZGRyIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJc3ND b3VudCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXNzQ2hlY2tTdW0gOyAgCSAgICAgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9jb21tYW5kICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9fZmlsbGVyICAodm9pZCkgeyByZXR1cm4gIDEgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9yZWdzICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9zdGVwU3B5ICAodm9pZCkgeyByZXR1cm4gIDc2IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfcmVzZXJ2ZWQgICh2b2lkKSB7IHJldHVybiAgNzcgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9zc0FkZHIgICh2b2lkKSB7IHJldHVybiAgNzggOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9zc0NvdW50ICAodm9pZCkgeyByZXR1cm4gIDgyIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3NDaGVja1N1bSAgKHZvaWQpIHsgcmV0dXJuICA4NiA7IH0g IAl9OyAJY2xhc3MgRW1Qcm94eVN5c1BrdENvbnRpbnVlQ21kVHlwZSAgCXsJcHVibGljOgl0eXBl ZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U3lzUGt0Q29udGludWVDbWRUeXBlICAJKHZvaWQp OwlFbVByb3h5U3lzUGt0Q29udGludWVDbWRUeXBlICAJKGNvbnN0IEVtUHJveHlTeXNQa3RDb250 aW51ZUNtZFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4g KHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJ CXsgcmV0dXJuICAgICA5MCAgOyB9CUVtUHJveHlTeXNQa3RDb250aW51ZUNtZFR5cGUgICYJCW9w ZXJhdG9yPSAoY29uc3QgRW1Qcm94eVN5c1BrdENvbnRpbnVlQ21kVHlwZSAgJik7CUVtQWxpYXNT eXNQa3RDb250aW51ZUNtZFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxp YXNTeXNQa3RDb250aW51ZUNtZFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXBy aXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDkwICBdOwl9IGZMb2NhbERhdGE7CXB1 YmxpYzoJICAgICBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWNvbW1hbmQgOyAJIEVtQWxpYXNV SW50OCA8TEFTPgkgCQkJCQkJX2ZpbGxlciA7IAkgRW1BbGlhc002OEtSZWdzVHlwZSA8TEFTPgkg CQkJCXJlZ3MgOyAJIEVtQWxpYXNCb29sZWFuIDxMQVM+CSAJCQkJCXN0ZXBTcHkgOyAJIEVtQWxp YXNVSW50OCA8TEFTPgkgCQkJCQkJcmVzZXJ2ZWQgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJ CQkJCXNzQWRkciA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJc3NDb3VudCA7IAkgRW1B bGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJc3NDaGVja1N1bSA7ICAJICAgICBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2NvbW1hbmQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX19maWxsZXIgICh2b2lkKSB7IHJldHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3JlZ3MgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3N0ZXBTcHkgICh2b2lkKSB7IHJldHVybiAgNzYgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9yZXNlcnZlZCAgKHZvaWQpIHsgcmV0dXJuICA3NyA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3NzQWRkciAgKHZvaWQpIHsgcmV0dXJuICA3OCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3NzQ291bnQgICh2b2lkKSB7IHJldHVybiAgODIgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9zc0NoZWNrU3VtICAodm9pZCkgeyByZXR1cm4gIDg2IDsgfSAgCX07ICAgCSAg dGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNTeXNQa3REYmdCcmVha1RvZ2dsZUNtZFR5 cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1B bGlhc1N5c1BrdERiZ0JyZWFrVG9nZ2xlQ21kVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNTeXNQ a3REYmdCcmVha1RvZ2dsZUNtZFR5cGUgIAkoY29uc3QgRW1BbGlhc1N5c1BrdERiZ0JyZWFrVG9n Z2xlQ21kVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBm UHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIgIDsg fQlFbUFsaWFzU3lzUGt0RGJnQnJlYWtUb2dnbGVDbWRUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29u c3QgRW1BbGlhc1N5c1BrdERiZ0JyZWFrVG9nZ2xlQ21kVHlwZSAgPEE+Jik7CUVtQWxpYXNTeXNQ a3REYmdCcmVha1RvZ2dsZUNtZFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFs aWFzU3lzUGt0RGJnQnJlYWtUb2dnbGVDbWRUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25z dDsJcHJpdmF0ZToJRW1BbGlhc1N5c1BrdERiZ0JyZWFrVG9nZ2xlQ21kVHlwZSAgCSh2b2lkKTsJ cHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJY29t bWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJX2ZpbGxlciA7ICAJICAgICBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2NvbW1hbmQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX19maWxsZXIgICh2b2lkKSB7IHJldHVybiAgMSA7IH0gIAl9OyAJY2xh c3MgRW1Qcm94eVN5c1BrdERiZ0JyZWFrVG9nZ2xlQ21kVHlwZSAgCXsJcHVibGljOgl0eXBlZGVm IHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U3lzUGt0RGJnQnJlYWtUb2dnbGVDbWRUeXBlICAJKHZv aWQpOwlFbVByb3h5U3lzUGt0RGJnQnJlYWtUb2dnbGVDbWRUeXBlICAJKGNvbnN0IEVtUHJveHlT eXNQa3REYmdCcmVha1RvZ2dsZUNtZFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkg Y29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlH ZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyICA7IH0JRW1Qcm94eVN5c1BrdERiZ0JyZWFr VG9nZ2xlQ21kVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5U3lzUGt0RGJnQnJlYWtU b2dnbGVDbWRUeXBlICAmKTsJRW1BbGlhc1N5c1BrdERiZ0JyZWFrVG9nZ2xlQ21kVHlwZSAgPExB Uz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c1BrdERiZ0JyZWFrVG9nZ2xlQ21k VHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hh cgkJCV9ieXRlc1sgICAgMiAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJ bnQ4IDxMQVM+CSAJCQkJCQljb21tYW5kIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCV9m aWxsZXIgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb21tYW5kICAodm9pZCkgeyBy ZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9fZmlsbGVyICAodm9pZCkgeyBy ZXR1cm4gIDEgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc1N5 c1BrdERiZ0JyZWFrVG9nZ2xlUnNwVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6 OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzU3lzUGt0RGJnQnJlYWtUb2dnbGVSc3BUeXBlICAJ KHB0cl90eXBlKTsJRW1BbGlhc1N5c1BrdERiZ0JyZWFrVG9nZ2xlUnNwVHlwZSAgCShjb25zdCBF bUFsaWFzU3lzUGt0RGJnQnJlYWtUb2dnbGVSc3BUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJ KHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9p ZCkJCQl7IHJldHVybiAgICAgNCAgOyB9CUVtQWxpYXNTeXNQa3REYmdCcmVha1RvZ2dsZVJzcFR5 cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzU3lzUGt0RGJnQnJlYWtUb2dnbGVSc3BU eXBlICA8QT4mKTsJRW1BbGlhc1N5c1BrdERiZ0JyZWFrVG9nZ2xlUnNwVHlwZSAgPEE+CW9wZXJh dG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTeXNQa3REYmdCcmVha1RvZ2dsZVJzcFR5cGUgIDxB PglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzU3lzUGt0RGJnQnJlYWtU b2dnbGVSc3BUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFs aWFzVUludDggPEE+CSAJCQkJCQljb21tYW5kIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlf ZmlsbGVyIDsgCSBFbUFsaWFzQm9vbGVhbiA8QT4JIAkJCQkJbmV3U3RhdGUgOyAJIEVtQWxpYXNV SW50OCA8QT4JIAkJCQkJCXJlc2VydmVkIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf Y29tbWFuZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf X2ZpbGxlciAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf bmV3U3RhdGUgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3Jlc2VydmVkICAodm9pZCkgeyByZXR1cm4gIDMgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlTeXNQ a3REYmdCcmVha1RvZ2dsZVJzcFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlw ZTsJRW1Qcm94eVN5c1BrdERiZ0JyZWFrVG9nZ2xlUnNwVHlwZSAgCSh2b2lkKTsJRW1Qcm94eVN5 c1BrdERiZ0JyZWFrVG9nZ2xlUnNwVHlwZSAgCShjb25zdCBFbVByb3h5U3lzUGt0RGJnQnJlYWtU b2dnbGVSc3BUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJu IChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJ CQl7IHJldHVybiAgICAgNCAgOyB9CUVtUHJveHlTeXNQa3REYmdCcmVha1RvZ2dsZVJzcFR5cGUg ICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eVN5c1BrdERiZ0JyZWFrVG9nZ2xlUnNwVHlwZSAg Jik7CUVtQWxpYXNTeXNQa3REYmdCcmVha1RvZ2dsZVJzcFR5cGUgIDxMQVM+CW9wZXJhdG9yW10g KGludCk7CWNvbnN0IEVtQWxpYXNTeXNQa3REYmdCcmVha1RvZ2dsZVJzcFR5cGUgIDxMQVM+CW9w ZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAg IDQgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJ CQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlfZmlsbGVyIDsgCSBFbUFs aWFzQm9vbGVhbiA8TEFTPgkgCQkJCQluZXdTdGF0ZSA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJ CQkJCQlyZXNlcnZlZCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1hbmQgICh2 b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX19maWxsZXIgICh2 b2lkKSB7IHJldHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25ld1N0YXRlICAo dm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZXNlcnZlZCAg KHZvaWQpIHsgcmV0dXJuICAzIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNz IEVtQWxpYXNTeXNQa3RGaW5kQ21kVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6 OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzU3lzUGt0RmluZENtZFR5cGUgIAkocHRyX3R5cGUp OwlFbUFsaWFzU3lzUGt0RmluZENtZFR5cGUgIAkoY29uc3QgRW1BbGlhc1N5c1BrdEZpbmRDbWRU eXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0J c3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgKDI1NiArMTYpICAg OyB9CUVtQWxpYXNTeXNQa3RGaW5kQ21kVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxp YXNTeXNQa3RGaW5kQ21kVHlwZSAgPEE+Jik7CUVtQWxpYXNTeXNQa3RGaW5kQ21kVHlwZSAgPEE+ CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTeXNQa3RGaW5kQ21kVHlwZSAgPEE+CW9w ZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNTeXNQa3RGaW5kQ21kVHlwZSAg CSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxBPgkg CQkJCQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJX2ZpbGxlciA7IAkgRW1B bGlhc1VJbnQzMiA8QT4JIAkJCQkJCWZpcnN0QWRkciA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJ CQkJCWxhc3RBZGRyIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJbnVtQnl0ZXMgOyAJIEVt QWxpYXNCb29sZWFuIDxBPgkgCQkJCQljYXNlSW5zZW5zaXRpdmUgOyAJIEVtQWxpYXNVSW50OCA8 QT4JIAkJCQkJCXBhZGRpbmcgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWRhdGEgOyAgCSAg ICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb21tYW5kICAodm9pZCkgeyByZXR1cm4gIDAgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9fZmlsbGVyICAodm9pZCkgeyByZXR1cm4gIDEgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9maXJzdEFkZHIgICh2b2lkKSB7IHJldHVybiAgMiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xhc3RBZGRyICAodm9pZCkgeyByZXR1cm4gIDYg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9udW1CeXRlcyAgKHZvaWQpIHsgcmV0dXJuICAx MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Nhc2VJbnNlbnNpdGl2ZSAgKHZvaWQpIHsg cmV0dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BhZGRpbmcgICh2b2lkKSB7 IHJldHVybiAgMTMgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kYXRhICAodm9pZCkgeyBy ZXR1cm4gIDE0IDsgfSAgCX07IAljbGFzcyBFbVByb3h5U3lzUGt0RmluZENtZFR5cGUgIAl7CXB1 YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVN5c1BrdEZpbmRDbWRUeXBlICAJ KHZvaWQpOwlFbVByb3h5U3lzUGt0RmluZENtZFR5cGUgIAkoY29uc3QgRW1Qcm94eVN5c1BrdEZp bmRDbWRUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChw dHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7 IHJldHVybiAgICAgKDI1NiArMTYpICAgOyB9CUVtUHJveHlTeXNQa3RGaW5kQ21kVHlwZSAgJgkJ b3BlcmF0b3I9IChjb25zdCBFbVByb3h5U3lzUGt0RmluZENtZFR5cGUgICYpOwlFbUFsaWFzU3lz UGt0RmluZENtZFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTeXNQ a3RGaW5kQ21kVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3Ry dWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgKDI1NiArMTYpICAgXTsJfSBmTG9jYWxEYXRhOwlwdWJs aWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQljb21tYW5kIDsgCSBFbUFsaWFzVUlu dDggPExBUz4JIAkJCQkJCV9maWxsZXIgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCWZp cnN0QWRkciA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJbGFzdEFkZHIgOyAJIEVtQWxp YXNVSW50MTYgPExBUz4JIAkJCQkJCW51bUJ5dGVzIDsgCSBFbUFsaWFzQm9vbGVhbiA8TEFTPgkg CQkJCQljYXNlSW5zZW5zaXRpdmUgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJcGFkZGlu ZyA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlkYXRhIDsgIAkgICAgIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfY29tbWFuZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfX2ZpbGxlciAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfZmlyc3RBZGRyICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9sYXN0QWRkciAgKHZvaWQpIHsgcmV0dXJuICA2IDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfbnVtQnl0ZXMgICh2b2lkKSB7IHJldHVybiAgMTAgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9jYXNlSW5zZW5zaXRpdmUgICh2b2lkKSB7IHJldHVybiAgMTIgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wYWRkaW5nICAodm9pZCkgeyByZXR1cm4gIDEzIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGF0YSAgKHZvaWQpIHsgcmV0dXJuICAxNCA7IH0g IAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzU3lzUGt0RmluZFJzcFR5 cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1B bGlhc1N5c1BrdEZpbmRSc3BUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc1N5c1BrdEZpbmRSc3BU eXBlICAJKGNvbnN0IEVtQWxpYXNTeXNQa3RGaW5kUnNwVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0 UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJ KHZvaWQpCQkJeyByZXR1cm4gICAgIDggIDsgfQlFbUFsaWFzU3lzUGt0RmluZFJzcFR5cGUgIDxB PiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzU3lzUGt0RmluZFJzcFR5cGUgIDxBPiYpOwlFbUFs aWFzU3lzUGt0RmluZFJzcFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFz U3lzUGt0RmluZFJzcFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglF bUFsaWFzU3lzUGt0RmluZFJzcFR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGlj OgkgICAgIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWNvbW1hbmQgOyAJIEVtQWxpYXNVSW50OCA8 QT4JIAkJCQkJCV9maWxsZXIgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlhZGRyIDsgCSBF bUFsaWFzVUludDggPEE+CSAJCQkJCQlmb3VuZCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJ cGFkZGluZyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1hbmQgICh2b2lkKSB7 IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX19maWxsZXIgICh2b2lkKSB7 IHJldHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2FkZHIgICh2b2lkKSB7IHJl dHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZvdW5kICAodm9pZCkgeyByZXR1 cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wYWRkaW5nICAodm9pZCkgeyByZXR1 cm4gIDcgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlTeXNQa3RGaW5kUnNwVHlwZSAgCXsJcHVibGlj Ogl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U3lzUGt0RmluZFJzcFR5cGUgIAkodm9p ZCk7CUVtUHJveHlTeXNQa3RGaW5kUnNwVHlwZSAgCShjb25zdCBFbVByb3h5U3lzUGt0RmluZFJz cFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90 eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0 dXJuICAgICA4ICA7IH0JRW1Qcm94eVN5c1BrdEZpbmRSc3BUeXBlICAmCQlvcGVyYXRvcj0gKGNv bnN0IEVtUHJveHlTeXNQa3RGaW5kUnNwVHlwZSAgJik7CUVtQWxpYXNTeXNQa3RGaW5kUnNwVHlw ZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c1BrdEZpbmRSc3BUeXBl ICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJ X2J5dGVzWyAgICA4ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDgg PExBUz4JIAkJCQkJCWNvbW1hbmQgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJX2ZpbGxl ciA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJYWRkciA7IAkgRW1BbGlhc1VJbnQ4IDxM QVM+CSAJCQkJCQlmb3VuZCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlwYWRkaW5nIDsg IAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29tbWFuZCAgKHZvaWQpIHsgcmV0dXJuICAw IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX2ZpbGxlciAgKHZvaWQpIHsgcmV0dXJuICAx IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYWRkciAgKHZvaWQpIHsgcmV0dXJuICAyIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZm91bmQgICh2b2lkKSB7IHJldHVybiAgNiA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BhZGRpbmcgICh2b2lkKSB7IHJldHVybiAgNyA7IH0g IAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzU3lzUGt0R2V0QnJlYWtw b2ludHNDbWRUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRy X3R5cGU7CUVtQWxpYXNTeXNQa3RHZXRCcmVha3BvaW50c0NtZFR5cGUgIAkocHRyX3R5cGUpOwlF bUFsaWFzU3lzUGt0R2V0QnJlYWtwb2ludHNDbWRUeXBlICAJKGNvbnN0IEVtQWxpYXNTeXNQa3RH ZXRCcmVha3BvaW50c0NtZFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJ eyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJu ICAgICAyICA7IH0JRW1BbGlhc1N5c1BrdEdldEJyZWFrcG9pbnRzQ21kVHlwZSAgPEE+JglvcGVy YXRvcj0gKGNvbnN0IEVtQWxpYXNTeXNQa3RHZXRCcmVha3BvaW50c0NtZFR5cGUgIDxBPiYpOwlF bUFsaWFzU3lzUGt0R2V0QnJlYWtwb2ludHNDbWRUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJ Y29uc3QgRW1BbGlhc1N5c1BrdEdldEJyZWFrcG9pbnRzQ21kVHlwZSAgPEE+CW9wZXJhdG9yW10g KGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNTeXNQa3RHZXRCcmVha3BvaW50c0NtZFR5cGUg IAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50OCA8QT4J IAkJCQkJCWNvbW1hbmQgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCV9maWxsZXIgOyAgCSAg ICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb21tYW5kICAodm9pZCkgeyByZXR1cm4gIDAgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9fZmlsbGVyICAodm9pZCkgeyByZXR1cm4gIDEgOyB9 ICAJfTsgCWNsYXNzIEVtUHJveHlTeXNQa3RHZXRCcmVha3BvaW50c0NtZFR5cGUgIAl7CXB1Ymxp YzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVN5c1BrdEdldEJyZWFrcG9pbnRzQ21k VHlwZSAgCSh2b2lkKTsJRW1Qcm94eVN5c1BrdEdldEJyZWFrcG9pbnRzQ21kVHlwZSAgCShjb25z dCBFbVByb3h5U3lzUGt0R2V0QnJlYWtwb2ludHNDbWRUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQ dHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGlj IHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMiAgOyB9CUVtUHJveHlTeXNQ a3RHZXRCcmVha3BvaW50c0NtZFR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eVN5c1Br dEdldEJyZWFrcG9pbnRzQ21kVHlwZSAgJik7CUVtQWxpYXNTeXNQa3RHZXRCcmVha3BvaW50c0Nt ZFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTeXNQa3RHZXRCcmVh a3BvaW50c0NtZFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0 cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDIgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAg IEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+ CSAJCQkJCQlfZmlsbGVyIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29tbWFuZCAg KHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX2ZpbGxlciAg KHZvaWQpIHsgcmV0dXJuICAxIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNz IEVtQWxpYXNTeXNQa3RFbXB0eVJzcFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBB OjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc1N5c1BrdEVtcHR5UnNwVHlwZSAgCShwdHJfdHlw ZSk7CUVtQWxpYXNTeXNQa3RFbXB0eVJzcFR5cGUgIAkoY29uc3QgRW1BbGlhc1N5c1BrdEVtcHR5 UnNwVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRy OyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIgIDsgfQlF bUFsaWFzU3lzUGt0RW1wdHlSc3BUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1N5 c1BrdEVtcHR5UnNwVHlwZSAgPEE+Jik7CUVtQWxpYXNTeXNQa3RFbXB0eVJzcFR5cGUgIDxBPglv cGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU3lzUGt0RW1wdHlSc3BUeXBlICA8QT4Jb3Bl cmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1N5c1BrdEVtcHR5UnNwVHlwZSAg CSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxBPgkg CQkJCQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJX2ZpbGxlciA7ICAJICAg ICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1hbmQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX19maWxsZXIgICh2b2lkKSB7IHJldHVybiAgMSA7IH0g IAl9OyAJY2xhc3MgRW1Qcm94eVN5c1BrdEVtcHR5UnNwVHlwZSAgCXsJcHVibGljOgl0eXBlZGVm IHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U3lzUGt0RW1wdHlSc3BUeXBlICAJKHZvaWQpOwlFbVBy b3h5U3lzUGt0RW1wdHlSc3BUeXBlICAJKGNvbnN0IEVtUHJveHlTeXNQa3RFbXB0eVJzcFR5cGUg ICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAm ZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAg ICAyICA7IH0JRW1Qcm94eVN5c1BrdEVtcHR5UnNwVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBF bVByb3h5U3lzUGt0RW1wdHlSc3BUeXBlICAmKTsJRW1BbGlhc1N5c1BrdEVtcHR5UnNwVHlwZSAg PExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c1BrdEVtcHR5UnNwVHlwZSAg PExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9i eXRlc1sgICAgMiAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxM QVM+CSAJCQkJCQljb21tYW5kIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCV9maWxsZXIg OyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb21tYW5kICAodm9pZCkgeyByZXR1cm4g IDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9fZmlsbGVyICAodm9pZCkgeyByZXR1cm4g IDEgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc1N5c1BrdEdl dEJyZWFrcG9pbnRzUnNwVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90 eXBlIHB0cl90eXBlOwlFbUFsaWFzU3lzUGt0R2V0QnJlYWtwb2ludHNSc3BUeXBlICAJKHB0cl90 eXBlKTsJRW1BbGlhc1N5c1BrdEdldEJyZWFrcG9pbnRzUnNwVHlwZSAgCShjb25zdCBFbUFsaWFz U3lzUGt0R2V0QnJlYWtwb2ludHNSc3BUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQp IGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7 IHJldHVybiAgICAgMzggIDsgfQlFbUFsaWFzU3lzUGt0R2V0QnJlYWtwb2ludHNSc3BUeXBlICA8 QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1N5c1BrdEdldEJyZWFrcG9pbnRzUnNwVHlwZSAg PEE+Jik7CUVtQWxpYXNTeXNQa3RHZXRCcmVha3BvaW50c1JzcFR5cGUgIDxBPglvcGVyYXRvcltd IChpbnQpOwljb25zdCBFbUFsaWFzU3lzUGt0R2V0QnJlYWtwb2ludHNSc3BUeXBlICA8QT4Jb3Bl cmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1N5c1BrdEdldEJyZWFrcG9pbnRz UnNwVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJ bnQ4IDxBPgkgCQkJCQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJX2ZpbGxl ciA7IAkgRW1BbGlhc0JyZWFrcG9pbnRUeXBlIDxBPgkgCQkJCWJwIDsgIAkgICAgIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfY29tbWFuZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfX2ZpbGxlciAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfYnAgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gIAl9OyAJY2xhc3MgRW1Q cm94eVN5c1BrdEdldEJyZWFrcG9pbnRzUnNwVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQq IHB0cl90eXBlOwlFbVByb3h5U3lzUGt0R2V0QnJlYWtwb2ludHNSc3BUeXBlICAJKHZvaWQpOwlF bVByb3h5U3lzUGt0R2V0QnJlYWtwb2ludHNSc3BUeXBlICAJKGNvbnN0IEVtUHJveHlTeXNQa3RH ZXRCcmVha3BvaW50c1JzcFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJ eyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXpl CSh2b2lkKQkJCXsgcmV0dXJuICAgICAzOCAgOyB9CUVtUHJveHlTeXNQa3RHZXRCcmVha3BvaW50 c1JzcFR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eVN5c1BrdEdldEJyZWFrcG9pbnRz UnNwVHlwZSAgJik7CUVtQWxpYXNTeXNQa3RHZXRCcmVha3BvaW50c1JzcFR5cGUgIDxMQVM+CW9w ZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTeXNQa3RHZXRCcmVha3BvaW50c1JzcFR5cGUg IDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlf Ynl0ZXNbICAgIDM4ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDgg PExBUz4JIAkJCQkJCWNvbW1hbmQgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJX2ZpbGxl ciA7IAkgRW1BbGlhc0JyZWFrcG9pbnRUeXBlIDxMQVM+CSAJCQkJYnAgOyAgCSAgICAgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9jb21tYW5kICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9fZmlsbGVyICAodm9pZCkgeyByZXR1cm4gIDEgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9icCAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAgCX07ICAgIAogIHRl bXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzU3lzUGt0R2V0VHJhcEJyZWFrc0NtZFR5cGUg IAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlh c1N5c1BrdEdldFRyYXBCcmVha3NDbWRUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc1N5c1BrdEdl dFRyYXBCcmVha3NDbWRUeXBlICAJKGNvbnN0IEVtQWxpYXNTeXNQa3RHZXRUcmFwQnJlYWtzQ21k VHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9 CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIgIDsgfQlFbUFs aWFzU3lzUGt0R2V0VHJhcEJyZWFrc0NtZFR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFs aWFzU3lzUGt0R2V0VHJhcEJyZWFrc0NtZFR5cGUgIDxBPiYpOwlFbUFsaWFzU3lzUGt0R2V0VHJh cEJyZWFrc0NtZFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU3lzUGt0 R2V0VHJhcEJyZWFrc0NtZFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRl OglFbUFsaWFzU3lzUGt0R2V0VHJhcEJyZWFrc0NtZFR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJ ZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWNvbW1hbmQgOyAJIEVt QWxpYXNVSW50OCA8QT4JIAkJCQkJCV9maWxsZXIgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9jb21tYW5kICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9fZmlsbGVyICAodm9pZCkgeyByZXR1cm4gIDEgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlT eXNQa3RHZXRUcmFwQnJlYWtzQ21kVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90 eXBlOwlFbVByb3h5U3lzUGt0R2V0VHJhcEJyZWFrc0NtZFR5cGUgIAkodm9pZCk7CUVtUHJveHlT eXNQa3RHZXRUcmFwQnJlYWtzQ21kVHlwZSAgCShjb25zdCBFbVByb3h5U3lzUGt0R2V0VHJhcEJy ZWFrc0NtZFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4g KHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJ CXsgcmV0dXJuICAgICAyICA7IH0JRW1Qcm94eVN5c1BrdEdldFRyYXBCcmVha3NDbWRUeXBlICAm CQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlTeXNQa3RHZXRUcmFwQnJlYWtzQ21kVHlwZSAgJik7 CUVtQWxpYXNTeXNQa3RHZXRUcmFwQnJlYWtzQ21kVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50 KTsJY29uc3QgRW1BbGlhc1N5c1BrdEdldFRyYXBCcmVha3NDbWRUeXBlICA8TEFTPglvcGVyYXRv cltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAyICBd Owl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWNv bW1hbmQgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJX2ZpbGxlciA7ICAJICAgICBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1hbmQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX19maWxsZXIgICh2b2lkKSB7IHJldHVybiAgMSA7IH0gIAl9OyAg IAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzU3lzUGt0R2V0VHJhcEJyZWFrc1Jz cFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJ RW1BbGlhc1N5c1BrdEdldFRyYXBCcmVha3NSc3BUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc1N5 c1BrdEdldFRyYXBCcmVha3NSc3BUeXBlICAJKGNvbnN0IEVtQWxpYXNTeXNQa3RHZXRUcmFwQnJl YWtzUnNwVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBm UHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDEyICA7 IH0JRW1BbGlhc1N5c1BrdEdldFRyYXBCcmVha3NSc3BUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29u c3QgRW1BbGlhc1N5c1BrdEdldFRyYXBCcmVha3NSc3BUeXBlICA8QT4mKTsJRW1BbGlhc1N5c1Br dEdldFRyYXBCcmVha3NSc3BUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlh c1N5c1BrdEdldFRyYXBCcmVha3NSc3BUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJ cHJpdmF0ZToJRW1BbGlhc1N5c1BrdEdldFRyYXBCcmVha3NSc3BUeXBlICAJKHZvaWQpOwlwdHJf dHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDggPEE+CSAJCQkJCQljb21tYW5k IDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlfZmlsbGVyIDsgCSBFbUFsaWFzVUludDE2IDxB PgkgCQkJCQkJdHJhcEJQIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29tbWFuZCAg KHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX2ZpbGxlciAg KHZvaWQpIHsgcmV0dXJuICAxIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdHJhcEJQICAo dm9pZCkgeyByZXR1cm4gIDIgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlTeXNQa3RHZXRUcmFwQnJl YWtzUnNwVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U3lz UGt0R2V0VHJhcEJyZWFrc1JzcFR5cGUgIAkodm9pZCk7CUVtUHJveHlTeXNQa3RHZXRUcmFwQnJl YWtzUnNwVHlwZSAgCShjb25zdCBFbVByb3h5U3lzUGt0R2V0VHJhcEJyZWFrc1JzcFR5cGUgICYp OwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxv Y2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAx MiAgOyB9CUVtUHJveHlTeXNQa3RHZXRUcmFwQnJlYWtzUnNwVHlwZSAgJgkJb3BlcmF0b3I9IChj b25zdCBFbVByb3h5U3lzUGt0R2V0VHJhcEJyZWFrc1JzcFR5cGUgICYpOwlFbUFsaWFzU3lzUGt0 R2V0VHJhcEJyZWFrc1JzcFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxp YXNTeXNQa3RHZXRUcmFwQnJlYWtzUnNwVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25z dDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMTIgIF07CX0gZkxvY2FsRGF0 YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJY29tbWFuZCA7IAkgRW1B bGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlfZmlsbGVyIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJ CQkJCQl0cmFwQlAgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb21tYW5kICAodm9p ZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9fZmlsbGVyICAodm9p ZCkgeyByZXR1cm4gIDEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90cmFwQlAgICh2b2lk KSB7IHJldHVybiAgMiA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFs aWFzU3lzUGt0R2V0VHJhcENvbmRpdGlvbnNDbWRUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlw ZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNTeXNQa3RHZXRUcmFwQ29uZGl0aW9u c0NtZFR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzU3lzUGt0R2V0VHJhcENvbmRpdGlvbnNDbWRU eXBlICAJKGNvbnN0IEVtQWxpYXNTeXNQa3RHZXRUcmFwQ29uZGl0aW9uc0NtZFR5cGUgICYpOwlw dHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6 ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyICA7IH0JRW1BbGlhc1N5c1BrdEdl dFRyYXBDb25kaXRpb25zQ21kVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNTeXNQ a3RHZXRUcmFwQ29uZGl0aW9uc0NtZFR5cGUgIDxBPiYpOwlFbUFsaWFzU3lzUGt0R2V0VHJhcENv bmRpdGlvbnNDbWRUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c1Br dEdldFRyYXBDb25kaXRpb25zQ21kVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXBy aXZhdGU6CUVtQWxpYXNTeXNQa3RHZXRUcmFwQ29uZGl0aW9uc0NtZFR5cGUgIAkodm9pZCk7CXB0 cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWNvbW1h bmQgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCV9maWxsZXIgOyAgCSAgICAgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9jb21tYW5kICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9fZmlsbGVyICAodm9pZCkgeyByZXR1cm4gIDEgOyB9ICAJfTsgCWNsYXNz IEVtUHJveHlTeXNQa3RHZXRUcmFwQ29uZGl0aW9uc0NtZFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRl ZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVN5c1BrdEdldFRyYXBDb25kaXRpb25zQ21kVHlwZSAg CSh2b2lkKTsJRW1Qcm94eVN5c1BrdEdldFRyYXBDb25kaXRpb25zQ21kVHlwZSAgCShjb25zdCBF bVByb3h5U3lzUGt0R2V0VHJhcENvbmRpdGlvbnNDbWRUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQ dHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGlj IHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMiAgOyB9CUVtUHJveHlTeXNQ a3RHZXRUcmFwQ29uZGl0aW9uc0NtZFR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eVN5 c1BrdEdldFRyYXBDb25kaXRpb25zQ21kVHlwZSAgJik7CUVtQWxpYXNTeXNQa3RHZXRUcmFwQ29u ZGl0aW9uc0NtZFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTeXNQ a3RHZXRUcmFwQ29uZGl0aW9uc0NtZFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7 CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDIgIF07CX0gZkxvY2FsRGF0YTsJ cHVibGljOgkgICAgIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJY29tbWFuZCA7IAkgRW1BbGlh c1VJbnQ4IDxMQVM+CSAJCQkJCQlfZmlsbGVyIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfY29tbWFuZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfX2ZpbGxlciAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNs YXNzIEE+CWNsYXNzIEVtQWxpYXNTeXNQa3RHZXRUcmFwQ29uZGl0aW9uc1JzcFR5cGUgIAl7CXB1 YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc1N5c1Br dEdldFRyYXBDb25kaXRpb25zUnNwVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNTeXNQa3RHZXRU cmFwQ29uZGl0aW9uc1JzcFR5cGUgIAkoY29uc3QgRW1BbGlhc1N5c1BrdEdldFRyYXBDb25kaXRp b25zUnNwVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBm UHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDEyICA7 IH0JRW1BbGlhc1N5c1BrdEdldFRyYXBDb25kaXRpb25zUnNwVHlwZSAgPEE+JglvcGVyYXRvcj0g KGNvbnN0IEVtQWxpYXNTeXNQa3RHZXRUcmFwQ29uZGl0aW9uc1JzcFR5cGUgIDxBPiYpOwlFbUFs aWFzU3lzUGt0R2V0VHJhcENvbmRpdGlvbnNSc3BUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJ Y29uc3QgRW1BbGlhc1N5c1BrdEdldFRyYXBDb25kaXRpb25zUnNwVHlwZSAgPEE+CW9wZXJhdG9y W10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNTeXNQa3RHZXRUcmFwQ29uZGl0aW9uc1Jz cFR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50 OCA8QT4JIAkJCQkJCWNvbW1hbmQgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCV9maWxsZXIg OyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQl0cmFwUGFyYW0gOyAgCSAgICAgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9jb21tYW5kICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9fZmlsbGVyICAodm9pZCkgeyByZXR1cm4gIDEgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl90cmFwUGFyYW0gICh2b2lkKSB7IHJldHVybiAgMiA7IH0gIAl9OyAJY2xh c3MgRW1Qcm94eVN5c1BrdEdldFRyYXBDb25kaXRpb25zUnNwVHlwZSAgCXsJcHVibGljOgl0eXBl ZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U3lzUGt0R2V0VHJhcENvbmRpdGlvbnNSc3BUeXBl ICAJKHZvaWQpOwlFbVByb3h5U3lzUGt0R2V0VHJhcENvbmRpdGlvbnNSc3BUeXBlICAJKGNvbnN0 IEVtUHJveHlTeXNQa3RHZXRUcmFwQ29uZGl0aW9uc1JzcFR5cGUgICYpOwlwdHJfdHlwZQkJCUdl dFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0 aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAxMiAgOyB9CUVtUHJveHlT eXNQa3RHZXRUcmFwQ29uZGl0aW9uc1JzcFR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94 eVN5c1BrdEdldFRyYXBDb25kaXRpb25zUnNwVHlwZSAgJik7CUVtQWxpYXNTeXNQa3RHZXRUcmFw Q29uZGl0aW9uc1JzcFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNT eXNQa3RHZXRUcmFwQ29uZGl0aW9uc1JzcFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29u c3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDEyICBdOwl9IGZMb2NhbERh dGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWNvbW1hbmQgOyAJIEVt QWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJX2ZpbGxlciA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkg CQkJCQkJdHJhcFBhcmFtIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29tbWFuZCAg KHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX2ZpbGxlciAg KHZvaWQpIHsgcmV0dXJuICAxIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdHJhcFBhcmFt ICAodm9pZCkgeyByZXR1cm4gIDIgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xh c3MgRW1BbGlhc1N5c1BrdFJlYWRNZW1DbWRUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5h bWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNTeXNQa3RSZWFkTWVtQ21kVHlwZSAgCShw dHJfdHlwZSk7CUVtQWxpYXNTeXNQa3RSZWFkTWVtQ21kVHlwZSAgCShjb25zdCBFbUFsaWFzU3lz UGt0UmVhZE1lbUNtZFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyBy ZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAg ICA4ICA7IH0JRW1BbGlhc1N5c1BrdFJlYWRNZW1DbWRUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29u c3QgRW1BbGlhc1N5c1BrdFJlYWRNZW1DbWRUeXBlICA8QT4mKTsJRW1BbGlhc1N5c1BrdFJlYWRN ZW1DbWRUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c1BrdFJlYWRN ZW1DbWRUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1N5 c1BrdFJlYWRNZW1DbWRUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAg ICBFbUFsaWFzVUludDggPEE+CSAJCQkJCQljb21tYW5kIDsgCSBFbUFsaWFzVUludDggPEE+CSAJ CQkJCQlfZmlsbGVyIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJYWRkcmVzcyA7IAkgRW1B bGlhc1VJbnQxNiA8QT4JIAkJCQkJCW51bUJ5dGVzIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfY29tbWFuZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfX2ZpbGxlciAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfYWRkcmVzcyAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfbnVtQnl0ZXMgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94 eVN5c1BrdFJlYWRNZW1DbWRUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7 CUVtUHJveHlTeXNQa3RSZWFkTWVtQ21kVHlwZSAgCSh2b2lkKTsJRW1Qcm94eVN5c1BrdFJlYWRN ZW1DbWRUeXBlICAJKGNvbnN0IEVtUHJveHlTeXNQa3RSZWFkTWVtQ21kVHlwZSAgJik7CXB0cl90 eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRh OyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDggIDsgfQlF bVByb3h5U3lzUGt0UmVhZE1lbUNtZFR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eVN5 c1BrdFJlYWRNZW1DbWRUeXBlICAmKTsJRW1BbGlhc1N5c1BrdFJlYWRNZW1DbWRUeXBlICA8TEFT PglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU3lzUGt0UmVhZE1lbUNtZFR5cGUgIDxM QVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0 ZXNbICAgIDggIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50OCA8TEFT PgkgCQkJCQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlfZmlsbGVyIDsg CSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlhZGRyZXNzIDsgCSBFbUFsaWFzVUludDE2IDxM QVM+CSAJCQkJCQludW1CeXRlcyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1h bmQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX19maWxs ZXIgICh2b2lkKSB7IHJldHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2FkZHJl c3MgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX251bUJ5 dGVzICAodm9pZCkgeyByZXR1cm4gIDYgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4J Y2xhc3MgRW1BbGlhc1N5c1BrdFJlYWRNZW1Sc3BUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlw ZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNTeXNQa3RSZWFkTWVtUnNwVHlwZSAg CShwdHJfdHlwZSk7CUVtQWxpYXNTeXNQa3RSZWFkTWVtUnNwVHlwZSAgCShjb25zdCBFbUFsaWFz U3lzUGt0UmVhZE1lbVJzcFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJ eyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJu ICAgICAoMjU2ICsxNikgICA7IH0JRW1BbGlhc1N5c1BrdFJlYWRNZW1Sc3BUeXBlICA8QT4mCW9w ZXJhdG9yPSAoY29uc3QgRW1BbGlhc1N5c1BrdFJlYWRNZW1Sc3BUeXBlICA8QT4mKTsJRW1BbGlh c1N5c1BrdFJlYWRNZW1Sc3BUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlh c1N5c1BrdFJlYWRNZW1Sc3BUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0 ZToJRW1BbGlhc1N5c1BrdFJlYWRNZW1Sc3BUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7 CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDggPEE+CSAJCQkJCQljb21tYW5kIDsgCSBFbUFsaWFz VUludDggPEE+CSAJCQkJCQlfZmlsbGVyIDsgCSBFbUFsaWFzY2hhciA8QT4JIAkJCQkJCWRhdGEg OyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb21tYW5kICAodm9pZCkgeyByZXR1cm4g IDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9fZmlsbGVyICAodm9pZCkgeyByZXR1cm4g IDEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kYXRhICAodm9pZCkgeyByZXR1cm4gIDIg OyB9ICAJfTsgCWNsYXNzIEVtUHJveHlTeXNQa3RSZWFkTWVtUnNwVHlwZSAgCXsJcHVibGljOgl0 eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U3lzUGt0UmVhZE1lbVJzcFR5cGUgIAkodm9p ZCk7CUVtUHJveHlTeXNQa3RSZWFkTWVtUnNwVHlwZSAgCShjb25zdCBFbVByb3h5U3lzUGt0UmVh ZE1lbVJzcFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4g KHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJ CXsgcmV0dXJuICAgICAoMjU2ICsxNikgICA7IH0JRW1Qcm94eVN5c1BrdFJlYWRNZW1Sc3BUeXBl ICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlTeXNQa3RSZWFkTWVtUnNwVHlwZSAgJik7CUVt QWxpYXNTeXNQa3RSZWFkTWVtUnNwVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3Qg RW1BbGlhc1N5c1BrdFJlYWRNZW1Sc3BUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0 Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAoMjU2ICsxNikgICBdOwl9IGZM b2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWNvbW1hbmQg OyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJX2ZpbGxlciA7IAkgRW1BbGlhc2NoYXIgPExB Uz4JIAkJCQkJCWRhdGEgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb21tYW5kICAo dm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9fZmlsbGVyICAo dm9pZCkgeyByZXR1cm4gIDEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kYXRhICAodm9p ZCkgeyByZXR1cm4gIDIgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1B bGlhc1N5c1BrdFJlYWRSZWdzQ21kVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6 OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzU3lzUGt0UmVhZFJlZ3NDbWRUeXBlICAJKHB0cl90 eXBlKTsJRW1BbGlhc1N5c1BrdFJlYWRSZWdzQ21kVHlwZSAgCShjb25zdCBFbUFsaWFzU3lzUGt0 UmVhZFJlZ3NDbWRUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0 dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAg MiAgOyB9CUVtQWxpYXNTeXNQa3RSZWFkUmVnc0NtZFR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25z dCBFbUFsaWFzU3lzUGt0UmVhZFJlZ3NDbWRUeXBlICA8QT4mKTsJRW1BbGlhc1N5c1BrdFJlYWRS ZWdzQ21kVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTeXNQa3RSZWFk UmVnc0NtZFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFz U3lzUGt0UmVhZFJlZ3NDbWRUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJ ICAgICBFbUFsaWFzVUludDggPEE+CSAJCQkJCQljb21tYW5kIDsgCSBFbUFsaWFzVUludDggPEE+ CSAJCQkJCQlfZmlsbGVyIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29tbWFuZCAg KHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX2ZpbGxlciAg KHZvaWQpIHsgcmV0dXJuICAxIDsgfSAgCX07IAljbGFzcyBFbVByb3h5U3lzUGt0UmVhZFJlZ3ND bWRUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlTeXNQa3RS ZWFkUmVnc0NtZFR5cGUgIAkodm9pZCk7CUVtUHJveHlTeXNQa3RSZWFkUmVnc0NtZFR5cGUgIAko Y29uc3QgRW1Qcm94eVN5c1BrdFJlYWRSZWdzQ21kVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRy CSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBz aXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIgIDsgfQlFbVByb3h5U3lzUGt0 UmVhZFJlZ3NDbWRUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlTeXNQa3RSZWFkUmVn c0NtZFR5cGUgICYpOwlFbUFsaWFzU3lzUGt0UmVhZFJlZ3NDbWRUeXBlICA8TEFTPglvcGVyYXRv cltdIChpbnQpOwljb25zdCBFbUFsaWFzU3lzUGt0UmVhZFJlZ3NDbWRUeXBlICA8TEFTPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAy ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJ CWNvbW1hbmQgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJX2ZpbGxlciA7ICAJICAgICBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1hbmQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX19maWxsZXIgICh2b2lkKSB7IHJldHVybiAgMSA7IH0gIAl9 OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzU3lzUGt0UmVhZFJlZ3NSc3BU eXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVt QWxpYXNTeXNQa3RSZWFkUmVnc1JzcFR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzU3lzUGt0UmVh ZFJlZ3NSc3BUeXBlICAJKGNvbnN0IEVtQWxpYXNTeXNQa3RSZWFkUmVnc1JzcFR5cGUgICYpOwlw dHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6 ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA3NiAgOyB9CUVtQWxpYXNTeXNQa3RS ZWFkUmVnc1JzcFR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzU3lzUGt0UmVhZFJl Z3NSc3BUeXBlICA8QT4mKTsJRW1BbGlhc1N5c1BrdFJlYWRSZWdzUnNwVHlwZSAgPEE+CW9wZXJh dG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTeXNQa3RSZWFkUmVnc1JzcFR5cGUgIDxBPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzU3lzUGt0UmVhZFJlZ3NSc3BUeXBl ICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDggPEE+ CSAJCQkJCQljb21tYW5kIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlfZmlsbGVyIDsgCSBF bUFsaWFzTTY4S1JlZ3NUeXBlIDxBPgkgCQkJCXJlZyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2NvbW1hbmQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX19maWxsZXIgICh2b2lkKSB7IHJldHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3JlZyAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAgCX07IAljbGFzcyBFbVByb3h5U3lz UGt0UmVhZFJlZ3NSc3BUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVt UHJveHlTeXNQa3RSZWFkUmVnc1JzcFR5cGUgIAkodm9pZCk7CUVtUHJveHlTeXNQa3RSZWFkUmVn c1JzcFR5cGUgIAkoY29uc3QgRW1Qcm94eVN5c1BrdFJlYWRSZWdzUnNwVHlwZSAgJik7CXB0cl90 eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRh OyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDc2ICA7IH0J RW1Qcm94eVN5c1BrdFJlYWRSZWdzUnNwVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5 U3lzUGt0UmVhZFJlZ3NSc3BUeXBlICAmKTsJRW1BbGlhc1N5c1BrdFJlYWRSZWdzUnNwVHlwZSAg PExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c1BrdFJlYWRSZWdzUnNwVHlw ZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJ CV9ieXRlc1sgICAgNzYgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50 OCA8TEFTPgkgCQkJCQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlfZmls bGVyIDsgCSBFbUFsaWFzTTY4S1JlZ3NUeXBlIDxMQVM+CSAJCQkJcmVnIDsgIAkgICAgIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfY29tbWFuZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfX2ZpbGxlciAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfcmVnICAodm9pZCkgeyByZXR1cm4gIDIgOyB9ICAJfTsgICAJICB0 ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc1N5c1BrdFJQQzJUeXBlICAJewlwdWJsaWM6 CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNTeXNQa3RSUEMy VHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNTeXNQa3RSUEMyVHlwZSAgCShjb25zdCBFbUFsaWFz U3lzUGt0UlBDMlR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1 cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAo MjU2ICsxNikgICA7IH0JRW1BbGlhc1N5c1BrdFJQQzJUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29u c3QgRW1BbGlhc1N5c1BrdFJQQzJUeXBlICA8QT4mKTsJRW1BbGlhc1N5c1BrdFJQQzJUeXBlICA8 QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c1BrdFJQQzJUeXBlICA8QT4Jb3Bl cmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1N5c1BrdFJQQzJUeXBlICAJKHZv aWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDggPEE+CSAJCQkJ CQljb21tYW5kIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlfZmlsbGVyIDsgCSBFbUFsaWFz VUludDE2IDxBPgkgCQkJCQkJdHJhcFdvcmQgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQly ZXN1bHREMCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXJlc3VsdEEwIDsgCSBFbUFsaWFz VUludDE2IDxBPgkgCQkJCQkJcmVzdWx0RXhjZXB0aW9uIDsgCSBFbUFsaWFzVUludDggPEE+CSAJ CQkJCQlEUmVnTWFzayA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJQVJlZ01hc2sgOyAJIEVt QWxpYXNVSW50MzIgPEE+CSAJCQkJCQlSZWdzIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJ bnVtUGFyYW1zIDsgCSBFbUFsaWFzY2hhciA8QT4JIAkJCQkJCXBhcmFtIDsgIAkgICAgIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfY29tbWFuZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfX2ZpbGxlciAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfdHJhcFdvcmQgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3Jlc3VsdEQwICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9yZXN1bHRBMCAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVzdWx0RXhjZXB0aW9uICAodm9pZCkgeyByZXR1cm4gIDEy IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfRFJlZ01hc2sgICh2b2lkKSB7IHJldHVybiAg MTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9BUmVnTWFzayAgKHZvaWQpIHsgcmV0dXJu ICAxNSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX1JlZ3MgICh2b2lkKSB7IHJldHVybiAg MTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9udW1QYXJhbXMgICh2b2lkKSB7IHJldHVy biAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BhcmFtICAodm9pZCkgeyByZXR1cm4g IDEgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlTeXNQa3RSUEMyVHlwZSAgCXsJcHVibGljOgl0eXBl ZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U3lzUGt0UlBDMlR5cGUgIAkodm9pZCk7CUVtUHJv eHlTeXNQa3RSUEMyVHlwZSAgCShjb25zdCBFbVByb3h5U3lzUGt0UlBDMlR5cGUgICYpOwlwdHJf dHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0 YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAoMjU2ICsx NikgICA7IH0JRW1Qcm94eVN5c1BrdFJQQzJUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJv eHlTeXNQa3RSUEMyVHlwZSAgJik7CUVtQWxpYXNTeXNQa3RSUEMyVHlwZSAgPExBUz4Jb3BlcmF0 b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c1BrdFJQQzJUeXBlICA8TEFTPglvcGVyYXRvcltd IChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAoMjU2ICsx NikgICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDggPExBUz4JIAkJ CQkJCWNvbW1hbmQgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJX2ZpbGxlciA7IAkgRW1B bGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJdHJhcFdvcmQgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4J IAkJCQkJCXJlc3VsdEQwIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlyZXN1bHRBMCA7 IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJcmVzdWx0RXhjZXB0aW9uIDsgCSBFbUFsaWFz VUludDggPExBUz4JIAkJCQkJCURSZWdNYXNrIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJ CUFSZWdNYXNrIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlSZWdzIDsgCSBFbUFsaWFz VUludDE2IDxMQVM+CSAJCQkJCQludW1QYXJhbXMgOyAJIEVtQWxpYXNjaGFyIDxMQVM+CSAJCQkJ CQlwYXJhbSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1hbmQgICh2b2lkKSB7 IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX19maWxsZXIgICh2b2lkKSB7 IHJldHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RyYXBXb3JkICAodm9pZCkg eyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZXN1bHREMCAgKHZvaWQp IHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVzdWx0QTAgICh2b2lk KSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jlc3VsdEV4Y2VwdGlv biAgKHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX0RSZWdN YXNrICAodm9pZCkgeyByZXR1cm4gIDE0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfQVJl Z01hc2sgICh2b2lkKSB7IHJldHVybiAgMTUgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9S ZWdzICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbnVt UGFyYW1zICAodm9pZCkgeyByZXR1cm4gIDEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9w YXJhbSAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+ CWNsYXNzIEVtQWxpYXNTeXNQa3RSUENUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUg QTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNTeXNQa3RSUENUeXBlICAJKHB0cl90eXBlKTsJ RW1BbGlhc1N5c1BrdFJQQ1R5cGUgIAkoY29uc3QgRW1BbGlhc1N5c1BrdFJQQ1R5cGUgICYpOwlw dHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6 ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAoMjU2ICsxNikgICA7IH0JRW1BbGlh c1N5c1BrdFJQQ1R5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzU3lzUGt0UlBDVHlw ZSAgPEE+Jik7CUVtQWxpYXNTeXNQa3RSUENUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29u c3QgRW1BbGlhc1N5c1BrdFJQQ1R5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2 YXRlOglFbUFsaWFzU3lzUGt0UlBDVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJs aWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4 IDxBPgkgCQkJCQkJX2ZpbGxlciA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXRyYXBXb3Jk IDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJcmVzdWx0RDAgOyAJIEVtQWxpYXNVSW50MzIg PEE+CSAJCQkJCQlyZXN1bHRBMCA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCW51bVBhcmFt cyA7IAkgRW1BbGlhc2NoYXIgPEE+CSAJCQkJCQlwYXJhbSA7ICAJICAgICBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2NvbW1hbmQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX19maWxsZXIgICh2b2lkKSB7IHJldHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3RyYXBXb3JkICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9yZXN1bHREMCAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfcmVzdWx0QTAgICh2b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX251bVBhcmFtcyAgKHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3BhcmFtICAodm9pZCkgeyByZXR1cm4gIDE0IDsgfSAgCX07IAljbGFz cyBFbVByb3h5U3lzUGt0UlBDVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBl OwlFbVByb3h5U3lzUGt0UlBDVHlwZSAgCSh2b2lkKTsJRW1Qcm94eVN5c1BrdFJQQ1R5cGUgIAko Y29uc3QgRW1Qcm94eVN5c1BrdFJQQ1R5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkg Y29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlH ZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAoMjU2ICsxNikgICA7IH0JRW1Qcm94eVN5c1Br dFJQQ1R5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eVN5c1BrdFJQQ1R5cGUgICYpOwlF bUFsaWFzU3lzUGt0UlBDVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlh c1N5c1BrdFJQQ1R5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0 cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgICgyNTYgKzE2KSAgIF07CX0gZkxvY2FsRGF0YTsJcHVi bGljOgkgICAgIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJ bnQ4IDxMQVM+CSAJCQkJCQlfZmlsbGVyIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQl0 cmFwV29yZCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJcmVzdWx0RDAgOyAJIEVtQWxp YXNVSW50MzIgPExBUz4JIAkJCQkJCXJlc3VsdEEwIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJ CQkJCQludW1QYXJhbXMgOyAJIEVtQWxpYXNjaGFyIDxMQVM+CSAJCQkJCQlwYXJhbSA7ICAJICAg ICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1hbmQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX19maWxsZXIgICh2b2lkKSB7IHJldHVybiAgMSA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RyYXBXb3JkICAodm9pZCkgeyByZXR1cm4gIDIgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZXN1bHREMCAgKHZvaWQpIHsgcmV0dXJuICA0IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVzdWx0QTAgICh2b2lkKSB7IHJldHVybiAgOCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX251bVBhcmFtcyAgKHZvaWQpIHsgcmV0dXJuICAx MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BhcmFtICAodm9pZCkgeyByZXR1cm4gIDE0 IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNTeXNQa3RSdG5O YW1lQ21kVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90 eXBlOwlFbUFsaWFzU3lzUGt0UnRuTmFtZUNtZFR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzU3lz UGt0UnRuTmFtZUNtZFR5cGUgIAkoY29uc3QgRW1BbGlhc1N5c1BrdFJ0bk5hbWVDbWRUeXBlICAm KTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGlj IHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNiAgOyB9CUVtQWxpYXNTeXNQ a3RSdG5OYW1lQ21kVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNTeXNQa3RSdG5O YW1lQ21kVHlwZSAgPEE+Jik7CUVtQWxpYXNTeXNQa3RSdG5OYW1lQ21kVHlwZSAgPEE+CW9wZXJh dG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTeXNQa3RSdG5OYW1lQ21kVHlwZSAgPEE+CW9wZXJh dG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNTeXNQa3RSdG5OYW1lQ21kVHlwZSAg CSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxBPgkg CQkJCQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJX2ZpbGxlciA7IAkgRW1B bGlhc2VtdXB0ciA8QT4JIAkJCQkJCWFkZHJlc3MgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9jb21tYW5kICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9fZmlsbGVyICAodm9pZCkgeyByZXR1cm4gIDEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9hZGRyZXNzICAodm9pZCkgeyByZXR1cm4gIDIgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlT eXNQa3RSdG5OYW1lQ21kVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlF bVByb3h5U3lzUGt0UnRuTmFtZUNtZFR5cGUgIAkodm9pZCk7CUVtUHJveHlTeXNQa3RSdG5OYW1l Q21kVHlwZSAgCShjb25zdCBFbVByb3h5U3lzUGt0UnRuTmFtZUNtZFR5cGUgICYpOwlwdHJfdHlw ZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsg fQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA2ICA7IH0JRW1Q cm94eVN5c1BrdFJ0bk5hbWVDbWRUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlTeXNQ a3RSdG5OYW1lQ21kVHlwZSAgJik7CUVtQWxpYXNTeXNQa3RSdG5OYW1lQ21kVHlwZSAgPExBUz4J b3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c1BrdFJ0bk5hbWVDbWRUeXBlICA8TEFT PglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVz WyAgICA2ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDggPExBUz4J IAkJCQkJCWNvbW1hbmQgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJX2ZpbGxlciA7IAkg RW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJYWRkcmVzcyA7ICAJICAgICBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2NvbW1hbmQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX19maWxsZXIgICh2b2lkKSB7IHJldHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2FkZHJlc3MgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gIAl9OyAgICAKICB0ZW1w bGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc1N5c1BrdFJ0bk5hbWVSc3BUeXBlICAJewlwdWJs aWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNTeXNQa3RS dG5OYW1lUnNwVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNTeXNQa3RSdG5OYW1lUnNwVHlwZSAg CShjb25zdCBFbUFsaWFzU3lzUGt0UnRuTmFtZVJzcFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0 cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2 b2lkKQkJCXsgcmV0dXJuICAgICAoMTQgKyAzMiApICA7IH0JRW1BbGlhc1N5c1BrdFJ0bk5hbWVS c3BUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1N5c1BrdFJ0bk5hbWVSc3BUeXBl ICA8QT4mKTsJRW1BbGlhc1N5c1BrdFJ0bk5hbWVSc3BUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50 KTsJY29uc3QgRW1BbGlhc1N5c1BrdFJ0bk5hbWVSc3BUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50 KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1N5c1BrdFJ0bk5hbWVSc3BUeXBlICAJKHZvaWQpOwlw dHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDggPEE+CSAJCQkJCQljb21t YW5kIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlfZmlsbGVyIDsgCSBFbUFsaWFzZW11cHRy IDxBPgkgCQkJCQkJYWRkcmVzcyA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXN0YXJ0QWRk ciA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWVuZEFkZHIgOyAJIEVtQWxpYXNjaGFyIDxB PgkgCQkJCQkJbmFtZSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1hbmQgICh2 b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX19maWxsZXIgICh2 b2lkKSB7IHJldHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2FkZHJlc3MgICh2 b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N0YXJ0QWRkciAg KHZvaWQpIHsgcmV0dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZW5kQWRkciAg KHZvaWQpIHsgcmV0dXJuICAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25hbWUgICh2 b2lkKSB7IHJldHVybiAgMTQgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlTeXNQa3RSdG5OYW1lUnNw VHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U3lzUGt0UnRu TmFtZVJzcFR5cGUgIAkodm9pZCk7CUVtUHJveHlTeXNQa3RSdG5OYW1lUnNwVHlwZSAgCShjb25z dCBFbVByb3h5U3lzUGt0UnRuTmFtZVJzcFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9p ZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90 CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAoMTQgKyAzMiApICA7IH0JRW1Qcm94eVN5 c1BrdFJ0bk5hbWVSc3BUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlTeXNQa3RSdG5O YW1lUnNwVHlwZSAgJik7CUVtQWxpYXNTeXNQa3RSdG5OYW1lUnNwVHlwZSAgPExBUz4Jb3BlcmF0 b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c1BrdFJ0bk5hbWVSc3BUeXBlICA8TEFTPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAo MTQgKyAzMiApICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDggPExB Uz4JIAkJCQkJCWNvbW1hbmQgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJX2ZpbGxlciA7 IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJYWRkcmVzcyA7IAkgRW1BbGlhc2VtdXB0ciA8 TEFTPgkgCQkJCQkJc3RhcnRBZGRyIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQllbmRB ZGRyIDsgCSBFbUFsaWFzY2hhciA8TEFTPgkgCQkJCQkJbmFtZSA7ICAJICAgICBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2NvbW1hbmQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX19maWxsZXIgICh2b2lkKSB7IHJldHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2FkZHJlc3MgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX3N0YXJ0QWRkciAgKHZvaWQpIHsgcmV0dXJuICA2IDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfZW5kQWRkciAgKHZvaWQpIHsgcmV0dXJuICAxMCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX25hbWUgICh2b2lkKSB7IHJldHVybiAgMTQgOyB9ICAJfTsgICAJICB0 ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc1N5c1BrdFNldEJyZWFrcG9pbnRzQ21kVHlw ZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFs aWFzU3lzUGt0U2V0QnJlYWtwb2ludHNDbWRUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc1N5c1Br dFNldEJyZWFrcG9pbnRzQ21kVHlwZSAgCShjb25zdCBFbUFsaWFzU3lzUGt0U2V0QnJlYWtwb2lu dHNDbWRUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQ dHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMzggIDsg fQlFbUFsaWFzU3lzUGt0U2V0QnJlYWtwb2ludHNDbWRUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29u c3QgRW1BbGlhc1N5c1BrdFNldEJyZWFrcG9pbnRzQ21kVHlwZSAgPEE+Jik7CUVtQWxpYXNTeXNQ a3RTZXRCcmVha3BvaW50c0NtZFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFs aWFzU3lzUGt0U2V0QnJlYWtwb2ludHNDbWRUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25z dDsJcHJpdmF0ZToJRW1BbGlhc1N5c1BrdFNldEJyZWFrcG9pbnRzQ21kVHlwZSAgCSh2b2lkKTsJ cHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJY29t bWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJX2ZpbGxlciA7IAkgRW1BbGlhc0JyZWFr cG9pbnRUeXBlIDxBPgkgCQkJCWJwIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29t bWFuZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX2Zp bGxlciAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYnAg ICh2b2lkKSB7IHJldHVybiAgMiA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVN5c1BrdFNldEJyZWFr cG9pbnRzQ21kVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5 U3lzUGt0U2V0QnJlYWtwb2ludHNDbWRUeXBlICAJKHZvaWQpOwlFbVByb3h5U3lzUGt0U2V0QnJl YWtwb2ludHNDbWRUeXBlICAJKGNvbnN0IEVtUHJveHlTeXNQa3RTZXRCcmVha3BvaW50c0NtZFR5 cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBl KSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJu ICAgICAzOCAgOyB9CUVtUHJveHlTeXNQa3RTZXRCcmVha3BvaW50c0NtZFR5cGUgICYJCW9wZXJh dG9yPSAoY29uc3QgRW1Qcm94eVN5c1BrdFNldEJyZWFrcG9pbnRzQ21kVHlwZSAgJik7CUVtQWxp YXNTeXNQa3RTZXRCcmVha3BvaW50c0NtZFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNv bnN0IEVtQWxpYXNTeXNQa3RTZXRCcmVha3BvaW50c0NtZFR5cGUgIDxMQVM+CW9wZXJhdG9yW10g KGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDM4ICBdOwl9 IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWNvbW1h bmQgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJX2ZpbGxlciA7IAkgRW1BbGlhc0JyZWFr cG9pbnRUeXBlIDxMQVM+CSAJCQkJYnAgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9j b21tYW5kICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9f ZmlsbGVyICAodm9pZCkgeyByZXR1cm4gIDEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9i cCAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNs YXNzIEVtQWxpYXNTeXNQa3RTZXRCcmVha3BvaW50c1JzcFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRl ZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc1N5c1BrdFNldEJyZWFrcG9p bnRzUnNwVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNTeXNQa3RTZXRCcmVha3BvaW50c1JzcFR5 cGUgIAkoY29uc3QgRW1BbGlhc1N5c1BrdFNldEJyZWFrcG9pbnRzUnNwVHlwZSAgJik7CXB0cl90 eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJ CUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIgIDsgfQlFbUFsaWFzU3lzUGt0U2V0QnJl YWtwb2ludHNSc3BUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1N5c1BrdFNldEJy ZWFrcG9pbnRzUnNwVHlwZSAgPEE+Jik7CUVtQWxpYXNTeXNQa3RTZXRCcmVha3BvaW50c1JzcFR5 cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU3lzUGt0U2V0QnJlYWtwb2lu dHNSc3BUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1N5 c1BrdFNldEJyZWFrcG9pbnRzUnNwVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJs aWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4 IDxBPgkgCQkJCQkJX2ZpbGxlciA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1h bmQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX19maWxs ZXIgICh2b2lkKSB7IHJldHVybiAgMSA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVN5c1BrdFNldEJy ZWFrcG9pbnRzUnNwVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVBy b3h5U3lzUGt0U2V0QnJlYWtwb2ludHNSc3BUeXBlICAJKHZvaWQpOwlFbVByb3h5U3lzUGt0U2V0 QnJlYWtwb2ludHNSc3BUeXBlICAJKGNvbnN0IEVtUHJveHlTeXNQa3RTZXRCcmVha3BvaW50c1Jz cFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90 eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0 dXJuICAgICAyICA7IH0JRW1Qcm94eVN5c1BrdFNldEJyZWFrcG9pbnRzUnNwVHlwZSAgJgkJb3Bl cmF0b3I9IChjb25zdCBFbVByb3h5U3lzUGt0U2V0QnJlYWtwb2ludHNSc3BUeXBlICAmKTsJRW1B bGlhc1N5c1BrdFNldEJyZWFrcG9pbnRzUnNwVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJ Y29uc3QgRW1BbGlhc1N5c1BrdFNldEJyZWFrcG9pbnRzUnNwVHlwZSAgPExBUz4Jb3BlcmF0b3Jb XSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMiAgXTsJ fSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQljb21t YW5kIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCV9maWxsZXIgOyAgCSAgICAgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9jb21tYW5kICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9fZmlsbGVyICAodm9pZCkgeyByZXR1cm4gIDEgOyB9ICAJfTsgICAJ ICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc1N5c1BrdFNldFRyYXBCcmVha3NDbWRU eXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVt QWxpYXNTeXNQa3RTZXRUcmFwQnJlYWtzQ21kVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNTeXNQ a3RTZXRUcmFwQnJlYWtzQ21kVHlwZSAgCShjb25zdCBFbUFsaWFzU3lzUGt0U2V0VHJhcEJyZWFr c0NtZFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0 cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAxMiAgOyB9 CUVtQWxpYXNTeXNQa3RTZXRUcmFwQnJlYWtzQ21kVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0 IEVtQWxpYXNTeXNQa3RTZXRUcmFwQnJlYWtzQ21kVHlwZSAgPEE+Jik7CUVtQWxpYXNTeXNQa3RT ZXRUcmFwQnJlYWtzQ21kVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNT eXNQa3RTZXRUcmFwQnJlYWtzQ21kVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXBy aXZhdGU6CUVtQWxpYXNTeXNQa3RTZXRUcmFwQnJlYWtzQ21kVHlwZSAgCSh2b2lkKTsJcHRyX3R5 cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJY29tbWFuZCA7 IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJX2ZpbGxlciA7IAkgRW1BbGlhc1VJbnQxNiA8QT4J IAkJCQkJCXRyYXBCUCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1hbmQgICh2 b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX19maWxsZXIgICh2 b2lkKSB7IHJldHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RyYXBCUCAgKHZv aWQpIHsgcmV0dXJuICAyIDsgfSAgCX07IAljbGFzcyBFbVByb3h5U3lzUGt0U2V0VHJhcEJyZWFr c0NtZFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVN5c1Br dFNldFRyYXBCcmVha3NDbWRUeXBlICAJKHZvaWQpOwlFbVByb3h5U3lzUGt0U2V0VHJhcEJyZWFr c0NtZFR5cGUgIAkoY29uc3QgRW1Qcm94eVN5c1BrdFNldFRyYXBCcmVha3NDbWRUeXBlICAmKTsJ cHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2Nh bERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTIg IDsgfQlFbVByb3h5U3lzUGt0U2V0VHJhcEJyZWFrc0NtZFR5cGUgICYJCW9wZXJhdG9yPSAoY29u c3QgRW1Qcm94eVN5c1BrdFNldFRyYXBCcmVha3NDbWRUeXBlICAmKTsJRW1BbGlhc1N5c1BrdFNl dFRyYXBCcmVha3NDbWRUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFz U3lzUGt0U2V0VHJhcEJyZWFrc0NtZFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7 CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDEyICBdOwl9IGZMb2NhbERhdGE7 CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWNvbW1hbmQgOyAJIEVtQWxp YXNVSW50OCA8TEFTPgkgCQkJCQkJX2ZpbGxlciA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJ CQkJdHJhcEJQIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29tbWFuZCAgKHZvaWQp IHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX2ZpbGxlciAgKHZvaWQp IHsgcmV0dXJuICAxIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdHJhcEJQICAodm9pZCkg eyByZXR1cm4gIDIgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlh c1N5c1BrdFNldFRyYXBDb25kaXRpb25zQ21kVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVu YW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzU3lzUGt0U2V0VHJhcENvbmRpdGlvbnND bWRUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc1N5c1BrdFNldFRyYXBDb25kaXRpb25zQ21kVHlw ZSAgCShjb25zdCBFbUFsaWFzU3lzUGt0U2V0VHJhcENvbmRpdGlvbnNDbWRUeXBlICAmKTsJcHRy X3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVf dAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTIgIDsgfQlFbUFsaWFzU3lzUGt0U2V0 VHJhcENvbmRpdGlvbnNDbWRUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1N5c1Br dFNldFRyYXBDb25kaXRpb25zQ21kVHlwZSAgPEE+Jik7CUVtQWxpYXNTeXNQa3RTZXRUcmFwQ29u ZGl0aW9uc0NtZFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU3lzUGt0 U2V0VHJhcENvbmRpdGlvbnNDbWRUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJp dmF0ZToJRW1BbGlhc1N5c1BrdFNldFRyYXBDb25kaXRpb25zQ21kVHlwZSAgCSh2b2lkKTsJcHRy X3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJY29tbWFu ZCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJX2ZpbGxlciA7IAkgRW1BbGlhc1VJbnQxNiA8 QT4JIAkJCQkJCXRyYXBQYXJhbSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1h bmQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX19maWxs ZXIgICh2b2lkKSB7IHJldHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RyYXBQ YXJhbSAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAgCX07IAljbGFzcyBFbVByb3h5U3lzUGt0U2V0 VHJhcENvbmRpdGlvbnNDbWRUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7 CUVtUHJveHlTeXNQa3RTZXRUcmFwQ29uZGl0aW9uc0NtZFR5cGUgIAkodm9pZCk7CUVtUHJveHlT eXNQa3RTZXRUcmFwQ29uZGl0aW9uc0NtZFR5cGUgIAkoY29uc3QgRW1Qcm94eVN5c1BrdFNldFRy YXBDb25kaXRpb25zQ21kVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7 IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJ KHZvaWQpCQkJeyByZXR1cm4gICAgIDEyICA7IH0JRW1Qcm94eVN5c1BrdFNldFRyYXBDb25kaXRp b25zQ21kVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5U3lzUGt0U2V0VHJhcENvbmRp dGlvbnNDbWRUeXBlICAmKTsJRW1BbGlhc1N5c1BrdFNldFRyYXBDb25kaXRpb25zQ21kVHlwZSAg PExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c1BrdFNldFRyYXBDb25kaXRp b25zQ21kVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0 IHsJY2hhcgkJCV9ieXRlc1sgICAgMTIgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVt QWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJ CQkJCQlfZmlsbGVyIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQl0cmFwUGFyYW0gOyAg CSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb21tYW5kICAodm9pZCkgeyByZXR1cm4gIDAg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9fZmlsbGVyICAodm9pZCkgeyByZXR1cm4gIDEg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90cmFwUGFyYW0gICh2b2lkKSB7IHJldHVybiAg MiA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzU3lzUGt0U2V0 VHJhcENvbmRpdGlvbnNSc3BUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRy X3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNTeXNQa3RTZXRUcmFwQ29uZGl0aW9uc1JzcFR5cGUgIAko cHRyX3R5cGUpOwlFbUFsaWFzU3lzUGt0U2V0VHJhcENvbmRpdGlvbnNSc3BUeXBlICAJKGNvbnN0 IEVtQWxpYXNTeXNQa3RTZXRUcmFwQ29uZGl0aW9uc1JzcFR5cGUgICYpOwlwdHJfdHlwZQkJCUdl dFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXpl CSh2b2lkKQkJCXsgcmV0dXJuICAgICAyICA7IH0JRW1BbGlhc1N5c1BrdFNldFRyYXBDb25kaXRp b25zUnNwVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNTeXNQa3RTZXRUcmFwQ29u ZGl0aW9uc1JzcFR5cGUgIDxBPiYpOwlFbUFsaWFzU3lzUGt0U2V0VHJhcENvbmRpdGlvbnNSc3BU eXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c1BrdFNldFRyYXBDb25k aXRpb25zUnNwVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxp YXNTeXNQa3RTZXRUcmFwQ29uZGl0aW9uc1JzcFR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0 cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWNvbW1hbmQgOyAJIEVtQWxp YXNVSW50OCA8QT4JIAkJCQkJCV9maWxsZXIgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9jb21tYW5kICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9fZmlsbGVyICAodm9pZCkgeyByZXR1cm4gIDEgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlTeXNQ a3RTZXRUcmFwQ29uZGl0aW9uc1JzcFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJf dHlwZTsJRW1Qcm94eVN5c1BrdFNldFRyYXBDb25kaXRpb25zUnNwVHlwZSAgCSh2b2lkKTsJRW1Q cm94eVN5c1BrdFNldFRyYXBDb25kaXRpb25zUnNwVHlwZSAgCShjb25zdCBFbVByb3h5U3lzUGt0 U2V0VHJhcENvbmRpdGlvbnNSc3BUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNv bnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0 U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMiAgOyB9CUVtUHJveHlTeXNQa3RTZXRUcmFwQ29u ZGl0aW9uc1JzcFR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eVN5c1BrdFNldFRyYXBD b25kaXRpb25zUnNwVHlwZSAgJik7CUVtQWxpYXNTeXNQa3RTZXRUcmFwQ29uZGl0aW9uc1JzcFR5 cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTeXNQa3RTZXRUcmFwQ29u ZGl0aW9uc1JzcFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0 cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDIgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAg IEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+ CSAJCQkJCQlfZmlsbGVyIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29tbWFuZCAg KHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX2ZpbGxlciAg KHZvaWQpIHsgcmV0dXJuICAxIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNz IEVtQWxpYXNTeXNQa3RTdGF0ZUNtZFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBB OjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc1N5c1BrdFN0YXRlQ21kVHlwZSAgCShwdHJfdHlw ZSk7CUVtQWxpYXNTeXNQa3RTdGF0ZUNtZFR5cGUgIAkoY29uc3QgRW1BbGlhc1N5c1BrdFN0YXRl Q21kVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRy OyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIgIDsgfQlF bUFsaWFzU3lzUGt0U3RhdGVDbWRUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1N5 c1BrdFN0YXRlQ21kVHlwZSAgPEE+Jik7CUVtQWxpYXNTeXNQa3RTdGF0ZUNtZFR5cGUgIDxBPglv cGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU3lzUGt0U3RhdGVDbWRUeXBlICA8QT4Jb3Bl cmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1N5c1BrdFN0YXRlQ21kVHlwZSAg CSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxBPgkg CQkJCQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJX2ZpbGxlciA7ICAJICAg ICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1hbmQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX19maWxsZXIgICh2b2lkKSB7IHJldHVybiAgMSA7IH0g IAl9OyAJY2xhc3MgRW1Qcm94eVN5c1BrdFN0YXRlQ21kVHlwZSAgCXsJcHVibGljOgl0eXBlZGVm IHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U3lzUGt0U3RhdGVDbWRUeXBlICAJKHZvaWQpOwlFbVBy b3h5U3lzUGt0U3RhdGVDbWRUeXBlICAJKGNvbnN0IEVtUHJveHlTeXNQa3RTdGF0ZUNtZFR5cGUg ICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAm ZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAg ICAyICA7IH0JRW1Qcm94eVN5c1BrdFN0YXRlQ21kVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBF bVByb3h5U3lzUGt0U3RhdGVDbWRUeXBlICAmKTsJRW1BbGlhc1N5c1BrdFN0YXRlQ21kVHlwZSAg PExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c1BrdFN0YXRlQ21kVHlwZSAg PExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9i eXRlc1sgICAgMiAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxM QVM+CSAJCQkJCQljb21tYW5kIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCV9maWxsZXIg OyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb21tYW5kICAodm9pZCkgeyByZXR1cm4g IDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9fZmlsbGVyICAodm9pZCkgeyByZXR1cm4g IDEgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc1N5c1BrdFN0 YXRlUnNwVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90 eXBlOwlFbUFsaWFzU3lzUGt0U3RhdGVSc3BUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc1N5c1Br dFN0YXRlUnNwVHlwZSAgCShjb25zdCBFbUFsaWFzU3lzUGt0U3RhdGVSc3BUeXBlICAmKTsJcHRy X3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVf dAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTg4ICA7IH0JRW1BbGlhc1N5c1BrdFN0 YXRlUnNwVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNTeXNQa3RTdGF0ZVJzcFR5 cGUgIDxBPiYpOwlFbUFsaWFzU3lzUGt0U3RhdGVSc3BUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50 KTsJY29uc3QgRW1BbGlhc1N5c1BrdFN0YXRlUnNwVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkg Y29uc3Q7CXByaXZhdGU6CUVtQWxpYXNTeXNQa3RTdGF0ZVJzcFR5cGUgIAkodm9pZCk7CXB0cl90 eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWNvbW1hbmQg OyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCV9maWxsZXIgOyAJIEVtQWxpYXNCb29sZWFuIDxB PgkgCQkJCQlyZXNldHRlZCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJcmVzZXJ2ZWQxIDsg CSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJZXhjZXB0aW9uSWQgOyAJIEVtQWxpYXNNNjhLUmVn c1R5cGUgPEE+CSAJCQkJcmVnIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJaW5zdCA7IAkg RW1BbGlhc0JyZWFrcG9pbnRUeXBlIDxBPgkgCQkJCWJwIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkg CQkJCQkJc3RhcnRBZGRyIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJZW5kQWRkciA7IAkg RW1BbGlhc2NoYXIgPEE+CSAJCQkJCQluYW1lIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQl0 cmFwVGFibGVSZXYgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXJlc2VydmVkMiA7ICAJICAg ICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1hbmQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX19maWxsZXIgICh2b2lkKSB7IHJldHVybiAgMSA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jlc2V0dGVkICAodm9pZCkgeyByZXR1cm4gIDIgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZXNlcnZlZDEgICh2b2lkKSB7IHJldHVybiAgMyA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2V4Y2VwdGlvbklkICAodm9pZCkgeyByZXR1cm4g IDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZWcgICh2b2lkKSB7IHJldHVybiAgNiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc3QgICh2b2lkKSB7IHJldHVybiAgODAgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9icCAgKHZvaWQpIHsgcmV0dXJuICAxMTAgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9zdGFydEFkZHIgICh2b2lkKSB7IHJldHVybiAgMTQ2IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZW5kQWRkciAgKHZvaWQpIHsgcmV0dXJuICAxNTAg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uYW1lICAodm9pZCkgeyByZXR1cm4gIDE1NCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RyYXBUYWJsZVJldiAgKHZvaWQpIHsgcmV0dXJu ICAxODYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZXNlcnZlZDIgICh2b2lkKSB7IHJl dHVybiAgMTg3IDsgfSAgCX07IAljbGFzcyBFbVByb3h5U3lzUGt0U3RhdGVSc3BUeXBlICAJewlw dWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlTeXNQa3RTdGF0ZVJzcFR5cGUg IAkodm9pZCk7CUVtUHJveHlTeXNQa3RTdGF0ZVJzcFR5cGUgIAkoY29uc3QgRW1Qcm94eVN5c1Br dFN0YXRlUnNwVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVy biAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQp CQkJeyByZXR1cm4gICAgIDE4OCAgOyB9CUVtUHJveHlTeXNQa3RTdGF0ZVJzcFR5cGUgICYJCW9w ZXJhdG9yPSAoY29uc3QgRW1Qcm94eVN5c1BrdFN0YXRlUnNwVHlwZSAgJik7CUVtQWxpYXNTeXNQ a3RTdGF0ZVJzcFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTeXNQ a3RTdGF0ZVJzcFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0 cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDE4OCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAg ICAgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQljb21tYW5kIDsgCSBFbUFsaWFzVUludDggPExB Uz4JIAkJCQkJCV9maWxsZXIgOyAJIEVtQWxpYXNCb29sZWFuIDxMQVM+CSAJCQkJCXJlc2V0dGVk IDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCXJlc2VydmVkMSA7IAkgRW1BbGlhc1VJbnQx NiA8TEFTPgkgCQkJCQkJZXhjZXB0aW9uSWQgOyAJIEVtQWxpYXNNNjhLUmVnc1R5cGUgPExBUz4J IAkJCQlyZWcgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWluc3QgOyAJIEVtQWxpYXNC cmVha3BvaW50VHlwZSA8TEFTPgkgCQkJCWJwIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJ CQlzdGFydEFkZHIgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWVuZEFkZHIgOyAJIEVt QWxpYXNjaGFyIDxMQVM+CSAJCQkJCQluYW1lIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJ CXRyYXBUYWJsZVJldiA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlyZXNlcnZlZDIgOyAg CSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb21tYW5kICAodm9pZCkgeyByZXR1cm4gIDAg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9fZmlsbGVyICAodm9pZCkgeyByZXR1cm4gIDEg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZXNldHRlZCAgKHZvaWQpIHsgcmV0dXJuICAy IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVzZXJ2ZWQxICAodm9pZCkgeyByZXR1cm4g IDMgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9leGNlcHRpb25JZCAgKHZvaWQpIHsgcmV0 dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVnICAodm9pZCkgeyByZXR1cm4g IDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbnN0ICAodm9pZCkgeyByZXR1cm4gIDgw IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYnAgICh2b2lkKSB7IHJldHVybiAgMTEwIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3RhcnRBZGRyICAodm9pZCkgeyByZXR1cm4gIDE0 NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2VuZEFkZHIgICh2b2lkKSB7IHJldHVybiAg MTUwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmFtZSAgKHZvaWQpIHsgcmV0dXJuICAx NTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90cmFwVGFibGVSZXYgICh2b2lkKSB7IHJl dHVybiAgMTg2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVzZXJ2ZWQyICAodm9pZCkg eyByZXR1cm4gIDE4NyA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFs aWFzU3lzUGt0V3JpdGVNZW1DbWRUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6 cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNTeXNQa3RXcml0ZU1lbUNtZFR5cGUgIAkocHRyX3R5 cGUpOwlFbUFsaWFzU3lzUGt0V3JpdGVNZW1DbWRUeXBlICAJKGNvbnN0IEVtQWxpYXNTeXNQa3RX cml0ZU1lbUNtZFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1 cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAo MjU2ICsxNikgICA7IH0JRW1BbGlhc1N5c1BrdFdyaXRlTWVtQ21kVHlwZSAgPEE+JglvcGVyYXRv cj0gKGNvbnN0IEVtQWxpYXNTeXNQa3RXcml0ZU1lbUNtZFR5cGUgIDxBPiYpOwlFbUFsaWFzU3lz UGt0V3JpdGVNZW1DbWRUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5 c1BrdFdyaXRlTWVtQ21kVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6 CUVtQWxpYXNTeXNQa3RXcml0ZU1lbUNtZFR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJ cHVibGljOgkgICAgIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWNvbW1hbmQgOyAJIEVtQWxpYXNV SW50OCA8QT4JIAkJCQkJCV9maWxsZXIgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlhZGRy ZXNzIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJbnVtQnl0ZXMgOyAJIEVtQWxpYXNjaGFy IDxBPgkgCQkJCQkJZGF0YSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1hbmQg ICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX19maWxsZXIg ICh2b2lkKSB7IHJldHVybiAgMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2FkZHJlc3Mg ICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX251bUJ5dGVz ICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kYXRhICAo dm9pZCkgeyByZXR1cm4gIDggOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlTeXNQa3RXcml0ZU1lbUNt ZFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVN5c1BrdFdy aXRlTWVtQ21kVHlwZSAgCSh2b2lkKTsJRW1Qcm94eVN5c1BrdFdyaXRlTWVtQ21kVHlwZSAgCShj b25zdCBFbVByb3h5U3lzUGt0V3JpdGVNZW1DbWRUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJ KHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNp emVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgKDI1NiArMTYpICAgOyB9CUVtUHJv eHlTeXNQa3RXcml0ZU1lbUNtZFR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eVN5c1Br dFdyaXRlTWVtQ21kVHlwZSAgJik7CUVtQWxpYXNTeXNQa3RXcml0ZU1lbUNtZFR5cGUgIDxMQVM+ CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTeXNQa3RXcml0ZU1lbUNtZFR5cGUgIDxM QVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0 ZXNbICAgICgyNTYgKzE2KSAgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNV SW50OCA8TEFTPgkgCQkJCQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlf ZmlsbGVyIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlhZGRyZXNzIDsgCSBFbUFsaWFz VUludDE2IDxMQVM+CSAJCQkJCQludW1CeXRlcyA7IAkgRW1BbGlhc2NoYXIgPExBUz4JIAkJCQkJ CWRhdGEgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb21tYW5kICAodm9pZCkgeyBy ZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9fZmlsbGVyICAodm9pZCkgeyBy ZXR1cm4gIDEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hZGRyZXNzICAodm9pZCkgeyBy ZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9udW1CeXRlcyAgKHZvaWQpIHsg cmV0dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGF0YSAgKHZvaWQpIHsgcmV0 dXJuICA4IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNTeXNQ a3RXcml0ZU1lbVJzcFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlw ZSBwdHJfdHlwZTsJRW1BbGlhc1N5c1BrdFdyaXRlTWVtUnNwVHlwZSAgCShwdHJfdHlwZSk7CUVt QWxpYXNTeXNQa3RXcml0ZU1lbVJzcFR5cGUgIAkoY29uc3QgRW1BbGlhc1N5c1BrdFdyaXRlTWVt UnNwVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRy OyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIgIDsgfQlF bUFsaWFzU3lzUGt0V3JpdGVNZW1Sc3BUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlh c1N5c1BrdFdyaXRlTWVtUnNwVHlwZSAgPEE+Jik7CUVtQWxpYXNTeXNQa3RXcml0ZU1lbVJzcFR5 cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU3lzUGt0V3JpdGVNZW1Sc3BU eXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1N5c1BrdFdy aXRlTWVtUnNwVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1B bGlhc1VJbnQ4IDxBPgkgCQkJCQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJ X2ZpbGxlciA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbW1hbmQgICh2b2lkKSB7 IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX19maWxsZXIgICh2b2lkKSB7 IHJldHVybiAgMSA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVN5c1BrdFdyaXRlTWVtUnNwVHlwZSAg CXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U3lzUGt0V3JpdGVNZW1S c3BUeXBlICAJKHZvaWQpOwlFbVByb3h5U3lzUGt0V3JpdGVNZW1Sc3BUeXBlICAJKGNvbnN0IEVt UHJveHlTeXNQa3RXcml0ZU1lbVJzcFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkg Y29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlH ZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyICA7IH0JRW1Qcm94eVN5c1BrdFdyaXRlTWVt UnNwVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5U3lzUGt0V3JpdGVNZW1Sc3BUeXBl ICAmKTsJRW1BbGlhc1N5c1BrdFdyaXRlTWVtUnNwVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50 KTsJY29uc3QgRW1BbGlhc1N5c1BrdFdyaXRlTWVtUnNwVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAo aW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMiAgXTsJfSBm TG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQljb21tYW5k IDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCV9maWxsZXIgOyAgCSAgICAgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9jb21tYW5kICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9fZmlsbGVyICAodm9pZCkgeyByZXR1cm4gIDEgOyB9ICAJfTsgICAJICB0 ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc1N5c1BrdFdyaXRlUmVnc0NtZFR5cGUgIAl7 CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc1N5 c1BrdFdyaXRlUmVnc0NtZFR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzU3lzUGt0V3JpdGVSZWdz Q21kVHlwZSAgCShjb25zdCBFbUFsaWFzU3lzUGt0V3JpdGVSZWdzQ21kVHlwZSAgJik7CXB0cl90 eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJ CUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDc2ICA7IH0JRW1BbGlhc1N5c1BrdFdyaXRl UmVnc0NtZFR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzU3lzUGt0V3JpdGVSZWdz Q21kVHlwZSAgPEE+Jik7CUVtQWxpYXNTeXNQa3RXcml0ZVJlZ3NDbWRUeXBlICA8QT4Jb3BlcmF0 b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1N5c1BrdFdyaXRlUmVnc0NtZFR5cGUgIDxBPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzU3lzUGt0V3JpdGVSZWdzQ21kVHlw ZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQ4IDxB PgkgCQkJCQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJX2ZpbGxlciA7IAkg RW1BbGlhc002OEtSZWdzVHlwZSA8QT4JIAkJCQlyZWcgOyAgCSAgICAgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9jb21tYW5kICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9fZmlsbGVyICAodm9pZCkgeyByZXR1cm4gIDEgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9yZWcgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVN5 c1BrdFdyaXRlUmVnc0NtZFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJ RW1Qcm94eVN5c1BrdFdyaXRlUmVnc0NtZFR5cGUgIAkodm9pZCk7CUVtUHJveHlTeXNQa3RXcml0 ZVJlZ3NDbWRUeXBlICAJKGNvbnN0IEVtUHJveHlTeXNQa3RXcml0ZVJlZ3NDbWRUeXBlICAmKTsJ cHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2Nh bERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNzYg IDsgfQlFbVByb3h5U3lzUGt0V3JpdGVSZWdzQ21kVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBF bVByb3h5U3lzUGt0V3JpdGVSZWdzQ21kVHlwZSAgJik7CUVtQWxpYXNTeXNQa3RXcml0ZVJlZ3ND bWRUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU3lzUGt0V3JpdGVS ZWdzQ21kVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0 IHsJY2hhcgkJCV9ieXRlc1sgICAgNzYgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVt QWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJY29tbWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJ CQkJCQlfZmlsbGVyIDsgCSBFbUFsaWFzTTY4S1JlZ3NUeXBlIDxMQVM+CSAJCQkJcmVnIDsgIAkg ICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29tbWFuZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX2ZpbGxlciAgKHZvaWQpIHsgcmV0dXJuICAxIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVnICAodm9pZCkgeyByZXR1cm4gIDIgOyB9ICAJ fTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc1N5c1BrdFdyaXRlUmVnc1Jz cFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJ RW1BbGlhc1N5c1BrdFdyaXRlUmVnc1JzcFR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzU3lzUGt0 V3JpdGVSZWdzUnNwVHlwZSAgCShjb25zdCBFbUFsaWFzU3lzUGt0V3JpdGVSZWdzUnNwVHlwZSAg Jik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRp YyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIgIDsgfQlFbUFsaWFzU3lz UGt0V3JpdGVSZWdzUnNwVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNTeXNQa3RX cml0ZVJlZ3NSc3BUeXBlICA8QT4mKTsJRW1BbGlhc1N5c1BrdFdyaXRlUmVnc1JzcFR5cGUgIDxB PglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU3lzUGt0V3JpdGVSZWdzUnNwVHlwZSAg PEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNTeXNQa3RXcml0ZVJl Z3NSc3BUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFz VUludDggPEE+CSAJCQkJCQljb21tYW5kIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlfZmls bGVyIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29tbWFuZCAgKHZvaWQpIHsgcmV0 dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfX2ZpbGxlciAgKHZvaWQpIHsgcmV0 dXJuICAxIDsgfSAgCX07IAljbGFzcyBFbVByb3h5U3lzUGt0V3JpdGVSZWdzUnNwVHlwZSAgCXsJ cHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U3lzUGt0V3JpdGVSZWdzUnNw VHlwZSAgCSh2b2lkKTsJRW1Qcm94eVN5c1BrdFdyaXRlUmVnc1JzcFR5cGUgIAkoY29uc3QgRW1Q cm94eVN5c1BrdFdyaXRlUmVnc1JzcFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkg Y29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlH ZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyICA7IH0JRW1Qcm94eVN5c1BrdFdyaXRlUmVn c1JzcFR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eVN5c1BrdFdyaXRlUmVnc1JzcFR5 cGUgICYpOwlFbUFsaWFzU3lzUGt0V3JpdGVSZWdzUnNwVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAo aW50KTsJY29uc3QgRW1BbGlhc1N5c1BrdFdyaXRlUmVnc1JzcFR5cGUgIDxMQVM+CW9wZXJhdG9y W10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDIgIF07 CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJY29t bWFuZCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlfZmlsbGVyIDsgIAkgICAgIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfY29tbWFuZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfX2ZpbGxlciAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAgCX07ICAg IAogIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzUmVjb3JkRW50cnlUeXBlICAJewlw dWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNSZWNv cmRFbnRyeVR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzUmVjb3JkRW50cnlUeXBlICAJKGNvbnN0 IEVtQWxpYXNSZWNvcmRFbnRyeVR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29u c3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0 dXJuICAgICA4ICA7IH0JRW1BbGlhc1JlY29yZEVudHJ5VHlwZSAgPEE+JglvcGVyYXRvcj0gKGNv bnN0IEVtQWxpYXNSZWNvcmRFbnRyeVR5cGUgIDxBPiYpOwlFbUFsaWFzUmVjb3JkRW50cnlUeXBl ICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1JlY29yZEVudHJ5VHlwZSAgPEE+ CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNSZWNvcmRFbnRyeVR5cGUg IAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNMb2NhbElEIDxB PgkgCQkJCQlsb2NhbENodW5rSUQgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWF0dHJpYnV0 ZXMgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXVuaXF1ZUlEIDsgIAkgICAgIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfbG9jYWxDaHVua0lEICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9hdHRyaWJ1dGVzICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl91bmlxdWVJRCAgKHZvaWQpIHsgcmV0dXJuICA1IDsgfSAg CX07IAljbGFzcyBFbVByb3h5UmVjb3JkRW50cnlUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9p ZCogcHRyX3R5cGU7CUVtUHJveHlSZWNvcmRFbnRyeVR5cGUgIAkodm9pZCk7CUVtUHJveHlSZWNv cmRFbnRyeVR5cGUgIAkoY29uc3QgRW1Qcm94eVJlY29yZEVudHJ5VHlwZSAgJik7CXB0cl90eXBl CQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9 CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDggIDsgfQlFbVBy b3h5UmVjb3JkRW50cnlUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlSZWNvcmRFbnRy eVR5cGUgICYpOwlFbUFsaWFzUmVjb3JkRW50cnlUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQp Owljb25zdCBFbUFsaWFzUmVjb3JkRW50cnlUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNv bnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA4ICBdOwl9IGZMb2NhbERh dGE7CXB1YmxpYzoJICAgICBFbUFsaWFzTG9jYWxJRCA8TEFTPgkgCQkJCQlsb2NhbENodW5rSUQg OyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJYXR0cmlidXRlcyA7IAkgRW1BbGlhc1VJbnQ4 IDxMQVM+CSAJCQkJCQl1bmlxdWVJRCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xv Y2FsQ2h1bmtJRCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfYXR0cmlidXRlcyAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfdW5pcXVlSUQgICh2b2lkKSB7IHJldHVybiAgNSA7IH0gIAl9OyAgIAkgIHRlbXBsYXRl IDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzUnNyY0VudHJ5VHlwZSAgCXsJcHVibGljOgl0eXBlZGVm IHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzUnNyY0VudHJ5VHlwZSAgCShw dHJfdHlwZSk7CUVtQWxpYXNSc3JjRW50cnlUeXBlICAJKGNvbnN0IEVtQWxpYXNSc3JjRW50cnlU eXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0J c3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTAgIDsgfQlFbUFs aWFzUnNyY0VudHJ5VHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNSc3JjRW50cnlU eXBlICA8QT4mKTsJRW1BbGlhc1JzcmNFbnRyeVR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwlj b25zdCBFbUFsaWFzUnNyY0VudHJ5VHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXBy aXZhdGU6CUVtQWxpYXNSc3JjRW50cnlUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1 YmxpYzoJICAgICBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJdHlwZSA7IAkgRW1BbGlhc1VJbnQx NiA8QT4JIAkJCQkJCWlkIDsgCSBFbUFsaWFzTG9jYWxJRCA8QT4JIAkJCQkJbG9jYWxDaHVua0lE IDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdHlwZSAgKHZvaWQpIHsgcmV0dXJuICAw IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaWQgICh2b2lkKSB7IHJldHVybiAgNCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xvY2FsQ2h1bmtJRCAgKHZvaWQpIHsgcmV0dXJuICA2 IDsgfSAgCX07IAljbGFzcyBFbVByb3h5UnNyY0VudHJ5VHlwZSAgCXsJcHVibGljOgl0eXBlZGVm IHZvaWQqIHB0cl90eXBlOwlFbVByb3h5UnNyY0VudHJ5VHlwZSAgCSh2b2lkKTsJRW1Qcm94eVJz cmNFbnRyeVR5cGUgIAkoY29uc3QgRW1Qcm94eVJzcmNFbnRyeVR5cGUgICYpOwlwdHJfdHlwZQkJ CUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlz dGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAxMCAgOyB9CUVtUHJv eHlSc3JjRW50cnlUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlSc3JjRW50cnlUeXBl ICAmKTsJRW1BbGlhc1JzcmNFbnRyeVR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0 IEVtQWxpYXNSc3JjRW50cnlUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2 YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAxMCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJs aWM6CSAgICAgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJdHlwZSA7IAkgRW1BbGlhc1VJbnQx NiA8TEFTPgkgCQkJCQkJaWQgOyAJIEVtQWxpYXNMb2NhbElEIDxMQVM+CSAJCQkJCWxvY2FsQ2h1 bmtJRCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3R5cGUgICh2b2lkKSB7IHJldHVy biAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2lkICAodm9pZCkgeyByZXR1cm4gIDQg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9sb2NhbENodW5rSUQgICh2b2lkKSB7IHJldHVy biAgNiA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzUmVjb3Jk TGlzdFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlw ZTsJRW1BbGlhc1JlY29yZExpc3RUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc1JlY29yZExpc3RU eXBlICAJKGNvbnN0IEVtQWxpYXNSZWNvcmRMaXN0VHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRy CSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZv aWQpCQkJeyByZXR1cm4gICAgIDYgIDsgfQlFbUFsaWFzUmVjb3JkTGlzdFR5cGUgIDxBPiYJb3Bl cmF0b3I9IChjb25zdCBFbUFsaWFzUmVjb3JkTGlzdFR5cGUgIDxBPiYpOwlFbUFsaWFzUmVjb3Jk TGlzdFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzUmVjb3JkTGlzdFR5 cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzUmVjb3JkTGlz dFR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNMb2Nh bElEIDxBPgkgCQkJCQluZXh0UmVjb3JkTGlzdElEIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJ CQkJbnVtUmVjb3JkcyA7IAkgRW1BbGlhc1JlY29yZEVudHJ5VHlwZSA8QT4JIAkJCXJlY29yZHMg OyAJIEVtQWxpYXNSc3JjRW50cnlUeXBlIDxBPgkgCQkJCXJlc291cmNlcyA7ICAJICAgICBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX25leHRSZWNvcmRMaXN0SUQgICh2b2lkKSB7IHJldHVybiAgMCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX251bVJlY29yZHMgICh2b2lkKSB7IHJldHVybiAg NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3JlY29yZHMgICh2b2lkKSB7IHJldHVybiAg NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jlc291cmNlcyAgKHZvaWQpIHsgcmV0dXJu ICA2IDsgfSAgCX07IAljbGFzcyBFbVByb3h5UmVjb3JkTGlzdFR5cGUgIAl7CXB1YmxpYzoJdHlw ZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVJlY29yZExpc3RUeXBlICAJKHZvaWQpOwlFbVBy b3h5UmVjb3JkTGlzdFR5cGUgIAkoY29uc3QgRW1Qcm94eVJlY29yZExpc3RUeXBlICAmKTsJcHRy X3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERh dGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNiAgOyB9 CUVtUHJveHlSZWNvcmRMaXN0VHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5UmVjb3Jk TGlzdFR5cGUgICYpOwlFbUFsaWFzUmVjb3JkTGlzdFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGlu dCk7CWNvbnN0IEVtQWxpYXNSZWNvcmRMaXN0VHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBj b25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgNiAgXTsJfSBmTG9jYWxE YXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc0xvY2FsSUQgPExBUz4JIAkJCQkJbmV4dFJlY29yZExp c3RJRCA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJbnVtUmVjb3JkcyA7IAkgRW1BbGlh c1JlY29yZEVudHJ5VHlwZSA8TEFTPgkgCQkJcmVjb3JkcyA7IAkgRW1BbGlhc1JzcmNFbnRyeVR5 cGUgPExBUz4JIAkJCQlyZXNvdXJjZXMgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9u ZXh0UmVjb3JkTGlzdElEICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9udW1SZWNvcmRzICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9yZWNvcmRzICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9yZXNvdXJjZXMgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gIAl9OyAgIAkgIHRl bXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzRGF0YWJhc2VIZHJUeXBlICAJewlwdWJsaWM6 CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNEYXRhYmFzZUhk clR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzRGF0YWJhc2VIZHJUeXBlICAJKGNvbnN0IEVtQWxp YXNEYXRhYmFzZUhkclR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyBy ZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAg ICA3OCAgOyB9CUVtQWxpYXNEYXRhYmFzZUhkclR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBF bUFsaWFzRGF0YWJhc2VIZHJUeXBlICA8QT4mKTsJRW1BbGlhc0RhdGFiYXNlSGRyVHlwZSAgPEE+ CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNEYXRhYmFzZUhkclR5cGUgIDxBPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzRGF0YWJhc2VIZHJUeXBlICAJKHZv aWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzSW50MTYgPEE+CSAJCQkJ CQluYW1lIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJYXR0cmlidXRlcyA7IAkgRW1BbGlh c1VJbnQxNiA8QT4JIAkJCQkJCXZlcnNpb24gOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlj cmVhdGlvbkRhdGUgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQltb2RpZmljYXRpb25EYXRl IDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJbGFzdEJhY2t1cERhdGUgOyAJIEVtQWxpYXNV SW50MzIgPEE+CSAJCQkJCQltb2RpZmljYXRpb25OdW1iZXIgOyAJIEVtQWxpYXNMb2NhbElEIDxB PgkgCQkJCQlhcHBJbmZvSUQgOyAJIEVtQWxpYXNMb2NhbElEIDxBPgkgCQkJCQlzb3J0SW5mb0lE IDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJdHlwZSA7IAkgRW1BbGlhc1VJbnQzMiA8QT4J IAkJCQkJCWNyZWF0b3IgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQl1bmlxdWVJRFNlZWQg OyAJIEVtQWxpYXNSZWNvcmRMaXN0VHlwZSA8QT4JIAkJCQlyZWNvcmRMaXN0IDsgIAkgICAgIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmFtZSAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfYXR0cmlidXRlcyAgKHZvaWQpIHsgcmV0dXJuICAzMiA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX3ZlcnNpb24gICh2b2lkKSB7IHJldHVybiAgMzQgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9jcmVhdGlvbkRhdGUgICh2b2lkKSB7IHJldHVybiAgMzYg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9tb2RpZmljYXRpb25EYXRlICAodm9pZCkgeyBy ZXR1cm4gIDQwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbGFzdEJhY2t1cERhdGUgICh2 b2lkKSB7IHJldHVybiAgNDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9tb2RpZmljYXRp b25OdW1iZXIgICh2b2lkKSB7IHJldHVybiAgNDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9hcHBJbmZvSUQgICh2b2lkKSB7IHJldHVybiAgNTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9zb3J0SW5mb0lEICAodm9pZCkgeyByZXR1cm4gIDU2IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfdHlwZSAgKHZvaWQpIHsgcmV0dXJuICA2MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2NyZWF0b3IgICh2b2lkKSB7IHJldHVybiAgNjQgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl91bmlxdWVJRFNlZWQgICh2b2lkKSB7IHJldHVybiAgNjggOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9yZWNvcmRMaXN0ICAodm9pZCkgeyByZXR1cm4gIDcyIDsgfSAgCX07IAlj bGFzcyBFbVByb3h5RGF0YWJhc2VIZHJUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRy X3R5cGU7CUVtUHJveHlEYXRhYmFzZUhkclR5cGUgIAkodm9pZCk7CUVtUHJveHlEYXRhYmFzZUhk clR5cGUgIAkoY29uc3QgRW1Qcm94eURhdGFiYXNlSGRyVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0 UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRp YyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDc4ICA7IH0JRW1Qcm94eURh dGFiYXNlSGRyVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5RGF0YWJhc2VIZHJUeXBl ICAmKTsJRW1BbGlhc0RhdGFiYXNlSGRyVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29u c3QgRW1BbGlhc0RhdGFiYXNlSGRyVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJ cHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgNzggIF07CX0gZkxvY2FsRGF0YTsJ cHVibGljOgkgICAgIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJbmFtZSA7IAkgRW1BbGlhc1VJ bnQxNiA8TEFTPgkgCQkJCQkJYXR0cmlidXRlcyA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJ CQkJdmVyc2lvbiA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJY3JlYXRpb25EYXRlIDsg CSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQltb2RpZmljYXRpb25EYXRlIDsgCSBFbUFsaWFz VUludDMyIDxMQVM+CSAJCQkJCQlsYXN0QmFja3VwRGF0ZSA7IAkgRW1BbGlhc1VJbnQzMiA8TEFT PgkgCQkJCQkJbW9kaWZpY2F0aW9uTnVtYmVyIDsgCSBFbUFsaWFzTG9jYWxJRCA8TEFTPgkgCQkJ CQlhcHBJbmZvSUQgOyAJIEVtQWxpYXNMb2NhbElEIDxMQVM+CSAJCQkJCXNvcnRJbmZvSUQgOyAJ IEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXR5cGUgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4J IAkJCQkJCWNyZWF0b3IgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXVuaXF1ZUlEU2Vl ZCA7IAkgRW1BbGlhc1JlY29yZExpc3RUeXBlIDxMQVM+CSAJCQkJcmVjb3JkTGlzdCA7ICAJICAg ICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25hbWUgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2F0dHJpYnV0ZXMgICh2b2lkKSB7IHJldHVybiAgMzIgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl92ZXJzaW9uICAodm9pZCkgeyByZXR1cm4gIDM0IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY3JlYXRpb25EYXRlICAodm9pZCkgeyByZXR1cm4g IDM2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbW9kaWZpY2F0aW9uRGF0ZSAgKHZvaWQp IHsgcmV0dXJuICA0MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xhc3RCYWNrdXBEYXRl ICAodm9pZCkgeyByZXR1cm4gIDQ0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbW9kaWZp Y2F0aW9uTnVtYmVyICAodm9pZCkgeyByZXR1cm4gIDQ4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfYXBwSW5mb0lEICAodm9pZCkgeyByZXR1cm4gIDUyIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2Zfc29ydEluZm9JRCAgKHZvaWQpIHsgcmV0dXJuICA1NiA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX3R5cGUgICh2b2lkKSB7IHJldHVybiAgNjAgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9jcmVhdG9yICAodm9pZCkgeyByZXR1cm4gIDY0IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfdW5pcXVlSURTZWVkICAodm9pZCkgeyByZXR1cm4gIDY4IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfcmVjb3JkTGlzdCAgKHZvaWQpIHsgcmV0dXJuICA3MiA7IH0gIAl9 OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzRGF0YWJhc2VEaXJFbnRyeVR5 cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1B bGlhc0RhdGFiYXNlRGlyRW50cnlUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc0RhdGFiYXNlRGly RW50cnlUeXBlICAJKGNvbnN0IEVtQWxpYXNEYXRhYmFzZURpckVudHJ5VHlwZSAgJik7CXB0cl90 eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJ CUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDQgIDsgfQlFbUFsaWFzRGF0YWJhc2VEaXJF bnRyeVR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzRGF0YWJhc2VEaXJFbnRyeVR5 cGUgIDxBPiYpOwlFbUFsaWFzRGF0YWJhc2VEaXJFbnRyeVR5cGUgIDxBPglvcGVyYXRvcltdIChp bnQpOwljb25zdCBFbUFsaWFzRGF0YWJhc2VEaXJFbnRyeVR5cGUgIDxBPglvcGVyYXRvcltdIChp bnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzRGF0YWJhc2VEaXJFbnRyeVR5cGUgIAkodm9pZCk7 CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNMb2NhbElEIDxBPgkgCQkJCQli YXNlSUQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9iYXNlSUQgICh2b2lkKSB7IHJl dHVybiAgMCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eURhdGFiYXNlRGlyRW50cnlUeXBlICAJewlw dWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlEYXRhYmFzZURpckVudHJ5VHlw ZSAgCSh2b2lkKTsJRW1Qcm94eURhdGFiYXNlRGlyRW50cnlUeXBlICAJKGNvbnN0IEVtUHJveHlE YXRhYmFzZURpckVudHJ5VHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7 IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJ KHZvaWQpCQkJeyByZXR1cm4gICAgIDQgIDsgfQlFbVByb3h5RGF0YWJhc2VEaXJFbnRyeVR5cGUg ICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eURhdGFiYXNlRGlyRW50cnlUeXBlICAmKTsJRW1B bGlhc0RhdGFiYXNlRGlyRW50cnlUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBF bUFsaWFzRGF0YWJhc2VEaXJFbnRyeVR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7 CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDQgIF07CX0gZkxvY2FsRGF0YTsJ cHVibGljOgkgICAgIEVtQWxpYXNMb2NhbElEIDxMQVM+CSAJCQkJCWJhc2VJRCA7ICAJICAgICBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2Jhc2VJRCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAgCX07 ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNEYXRhYmFzZURpclR5cGUgIAl7 CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc0Rh dGFiYXNlRGlyVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNEYXRhYmFzZURpclR5cGUgIAkoY29u c3QgRW1BbGlhc0RhdGFiYXNlRGlyVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBj b25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyBy ZXR1cm4gICAgIDEwICA7IH0JRW1BbGlhc0RhdGFiYXNlRGlyVHlwZSAgPEE+JglvcGVyYXRvcj0g KGNvbnN0IEVtQWxpYXNEYXRhYmFzZURpclR5cGUgIDxBPiYpOwlFbUFsaWFzRGF0YWJhc2VEaXJU eXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0RhdGFiYXNlRGlyVHlwZSAg PEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNEYXRhYmFzZURpclR5 cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNMb2NhbElE IDxBPgkgCQkJCQluZXh0RGF0YWJhc2VMaXN0SUQgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJ CQludW1EYXRhYmFzZXMgOyAJIEVtQWxpYXNEYXRhYmFzZURpckVudHJ5VHlwZSA8QT4JIAkJZGF0 YWJhc2VJRCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25leHREYXRhYmFzZUxpc3RJ RCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbnVtRGF0 YWJhc2VzICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9k YXRhYmFzZUlEICAodm9pZCkgeyByZXR1cm4gIDYgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlEYXRh YmFzZURpclR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eURh dGFiYXNlRGlyVHlwZSAgCSh2b2lkKTsJRW1Qcm94eURhdGFiYXNlRGlyVHlwZSAgCShjb25zdCBF bVByb3h5RGF0YWJhc2VEaXJUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0 CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6 ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTAgIDsgfQlFbVByb3h5RGF0YWJhc2VEaXJUeXBlICAm CQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlEYXRhYmFzZURpclR5cGUgICYpOwlFbUFsaWFzRGF0 YWJhc2VEaXJUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzRGF0YWJh c2VEaXJUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3Qg ewljaGFyCQkJX2J5dGVzWyAgICAxMCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1B bGlhc0xvY2FsSUQgPExBUz4JIAkJCQkJbmV4dERhdGFiYXNlTGlzdElEIDsgCSBFbUFsaWFzVUlu dDE2IDxMQVM+CSAJCQkJCQludW1EYXRhYmFzZXMgOyAJIEVtQWxpYXNEYXRhYmFzZURpckVudHJ5 VHlwZSA8TEFTPgkgCQlkYXRhYmFzZUlEIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf bmV4dERhdGFiYXNlTGlzdElEICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9udW1EYXRhYmFzZXMgICh2b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2RhdGFiYXNlSUQgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gIAl9OyAg IAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzRG1PcGVuSW5mb1R5cGUgIAl7CXB1 YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc0RtT3Bl bkluZm9UeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc0RtT3BlbkluZm9UeXBlICAJKGNvbnN0IEVt QWxpYXNEbU9wZW5JbmZvVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7 IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4g ICAgIDM2ICA7IH0JRW1BbGlhc0RtT3BlbkluZm9UeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg RW1BbGlhc0RtT3BlbkluZm9UeXBlICA8QT4mKTsJRW1BbGlhc0RtT3BlbkluZm9UeXBlICA8QT4J b3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0RtT3BlbkluZm9UeXBlICA8QT4Jb3BlcmF0 b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc0RtT3BlbkluZm9UeXBlICAJKHZvaWQp OwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJ bmV4dCA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCW9wZW5Db3VudCA7IAkgRW1BbGlhc1VJ bnQzMiA8QT4JIAkJCQkJCW93bmVyVGFza0lEIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJ ZmxhZ3MgOyAJIEVtQWxpYXNMb2NhbElEIDxBPgkgCQkJCQloZHJJRCA7IAkgRW1BbGlhc2VtdXB0 ciA8QT4JIAkJCQkJCWhkckggOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQloZHJQIDsgCSBF bUFsaWFzVUludDE2IDxBPgkgCQkJCQkJY2FyZE5vIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJ CQkJbnVtUmVjb3JkcyA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWhkck1hc3RlclAgOyAJ IEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQloYW5kbGVUYWJsZVAgOyAgCSAgICAgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9uZXh0ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9vcGVuQ291bnQgICh2b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX293bmVyVGFza0lEICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9mbGFncyAgKHZvaWQpIHsgcmV0dXJuICAxMCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2hkcklEICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfaGRySCAgKHZvaWQpIHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2hkclAgICh2b2lkKSB7IHJldHVybiAgMjAgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9jYXJkTm8gICh2b2lkKSB7IHJldHVybiAgMjQgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9udW1SZWNvcmRzICAodm9pZCkgeyByZXR1cm4gIDI2IDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfaGRyTWFzdGVyUCAgKHZvaWQpIHsgcmV0dXJuICAyOCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2hhbmRsZVRhYmxlUCAgKHZvaWQpIHsgcmV0dXJuICAzMiA7IH0g IAl9OyAJY2xhc3MgRW1Qcm94eURtT3BlbkluZm9UeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9p ZCogcHRyX3R5cGU7CUVtUHJveHlEbU9wZW5JbmZvVHlwZSAgCSh2b2lkKTsJRW1Qcm94eURtT3Bl bkluZm9UeXBlICAJKGNvbnN0IEVtUHJveHlEbU9wZW5JbmZvVHlwZSAgJik7CXB0cl90eXBlCQkJ R2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0 YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDM2ICA7IH0JRW1Qcm94 eURtT3BlbkluZm9UeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlEbU9wZW5JbmZvVHlw ZSAgJik7CUVtQWxpYXNEbU9wZW5JbmZvVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29u c3QgRW1BbGlhc0RtT3BlbkluZm9UeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlw cml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAzNiAgXTsJfSBmTG9jYWxEYXRhOwlw dWJsaWM6CSAgICAgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJbmV4dCA7IAkgRW1BbGlhc1VJ bnQxNiA8TEFTPgkgCQkJCQkJb3BlbkNvdW50IDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJ CQlvd25lclRhc2tJRCA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJZmxhZ3MgOyAJIEVt QWxpYXNMb2NhbElEIDxMQVM+CSAJCQkJCWhkcklEIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJ CQkJCQloZHJIIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQloZHJQIDsgCSBFbUFsaWFz VUludDE2IDxMQVM+CSAJCQkJCQljYXJkTm8gOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJ CW51bVJlY29yZHMgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWhkck1hc3RlclAgOyAJ IEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWhhbmRsZVRhYmxlUCA7ICAJICAgICBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX25leHQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX29wZW5Db3VudCAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2Zfb3duZXJUYXNrSUQgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2ZsYWdzICAodm9pZCkgeyByZXR1cm4gIDEwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfaGRySUQgICh2b2lkKSB7IHJldHVybiAgMTIgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9oZHJIICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfaGRyUCAgKHZvaWQpIHsgcmV0dXJuICAyMCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2NhcmRObyAgKHZvaWQpIHsgcmV0dXJuICAyNCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX251bVJlY29yZHMgICh2b2lkKSB7IHJldHVybiAgMjYgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9oZHJNYXN0ZXJQICAodm9pZCkgeyByZXR1cm4gIDI4IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaGFuZGxlVGFibGVQICAodm9pZCkgeyByZXR1cm4gIDMyIDsg fSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNEbUFjY2Vzc1R5cGUg IAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlh c0RtQWNjZXNzVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNEbUFjY2Vzc1R5cGUgIAkoY29uc3Qg RW1BbGlhc0RtQWNjZXNzVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7 IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4g ICAgIDE2ICA7IH0JRW1BbGlhc0RtQWNjZXNzVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVt QWxpYXNEbUFjY2Vzc1R5cGUgIDxBPiYpOwlFbUFsaWFzRG1BY2Nlc3NUeXBlICA8QT4Jb3BlcmF0 b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0RtQWNjZXNzVHlwZSAgPEE+CW9wZXJhdG9yW10gKGlu dCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNEbUFjY2Vzc1R5cGUgIAkodm9pZCk7CXB0cl90eXBl CQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQluZXh0IDsgCSBF bUFsaWFzVUludDE2IDxBPgkgCQkJCQkJbW9kZSA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJ CW9wZW5QIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJc2F2ZWRNb2ROdW0gOyAJIEVtQWxp YXNVSW50OCA8QT4JIAkJCQkJCW9wZW5UeXBlIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQly ZXNlcnZlZCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25leHQgICh2b2lkKSB7IHJl dHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21vZGUgICh2b2lkKSB7IHJldHVy biAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX29wZW5QICAodm9pZCkgeyByZXR1cm4g IDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zYXZlZE1vZE51bSAgKHZvaWQpIHsgcmV0 dXJuICAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX29wZW5UeXBlICAodm9pZCkgeyBy ZXR1cm4gIDE0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVzZXJ2ZWQgICh2b2lkKSB7 IHJldHVybiAgMTUgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlEbUFjY2Vzc1R5cGUgIAl7CXB1Ymxp YzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eURtQWNjZXNzVHlwZSAgCSh2b2lkKTsJ RW1Qcm94eURtQWNjZXNzVHlwZSAgCShjb25zdCBFbVByb3h5RG1BY2Nlc3NUeXBlICAmKTsJcHRy X3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERh dGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTYgIDsg fQlFbVByb3h5RG1BY2Nlc3NUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlEbUFjY2Vz c1R5cGUgICYpOwlFbUFsaWFzRG1BY2Nlc3NUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwlj b25zdCBFbUFsaWFzRG1BY2Nlc3NUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlw cml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAxNiAgXTsJfSBmTG9jYWxEYXRhOwlw dWJsaWM6CSAgICAgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJbmV4dCA7IAkgRW1BbGlhc1VJ bnQxNiA8TEFTPgkgCQkJCQkJbW9kZSA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJb3Bl blAgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXNhdmVkTW9kTnVtIDsgCSBFbUFsaWFz VUludDggPExBUz4JIAkJCQkJCW9wZW5UeXBlIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJ CXJlc2VydmVkIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmV4dCAgKHZvaWQpIHsg cmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbW9kZSAgKHZvaWQpIHsgcmV0 dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfb3BlblAgICh2b2lkKSB7IHJldHVy biAgNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NhdmVkTW9kTnVtICAodm9pZCkgeyBy ZXR1cm4gIDEwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfb3BlblR5cGUgICh2b2lkKSB7 IHJldHVybiAgMTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZXNlcnZlZCAgKHZvaWQp IHsgcmV0dXJuICAxNSA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFs aWFzRG1TZWFyY2hTdGF0ZVR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJf dHlwZSBwdHJfdHlwZTsJRW1BbGlhc0RtU2VhcmNoU3RhdGVUeXBlICAJKHB0cl90eXBlKTsJRW1B bGlhc0RtU2VhcmNoU3RhdGVUeXBlICAJKGNvbnN0IEVtQWxpYXNEbVNlYXJjaFN0YXRlVHlwZSAg Jik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRp YyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDMyICA7IH0JRW1BbGlhc0Rt U2VhcmNoU3RhdGVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc0RtU2VhcmNoU3Rh dGVUeXBlICA8QT4mKTsJRW1BbGlhc0RtU2VhcmNoU3RhdGVUeXBlICA8QT4Jb3BlcmF0b3JbXSAo aW50KTsJY29uc3QgRW1BbGlhc0RtU2VhcmNoU3RhdGVUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50 KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc0RtU2VhcmNoU3RhdGVUeXBlICAJKHZvaWQpOwlwdHJf dHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJaW5mbyA7 ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luZm8gICh2b2lkKSB7IHJldHVybiAgMCA7 IH0gIAl9OyAJY2xhc3MgRW1Qcm94eURtU2VhcmNoU3RhdGVUeXBlICAJewlwdWJsaWM6CXR5cGVk ZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlEbVNlYXJjaFN0YXRlVHlwZSAgCSh2b2lkKTsJRW1Q cm94eURtU2VhcmNoU3RhdGVUeXBlICAJKGNvbnN0IEVtUHJveHlEbVNlYXJjaFN0YXRlVHlwZSAg Jik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZm TG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAg IDMyICA7IH0JRW1Qcm94eURtU2VhcmNoU3RhdGVUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVt UHJveHlEbVNlYXJjaFN0YXRlVHlwZSAgJik7CUVtQWxpYXNEbVNlYXJjaFN0YXRlVHlwZSAgPExB Uz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0RtU2VhcmNoU3RhdGVUeXBlICA8TEFT PglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVz WyAgICAzMiAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQzMiA8TEFT PgkgCQkJCQkJaW5mbyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luZm8gICh2b2lk KSB7IHJldHVybiAgMCA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFs aWFzQ2FyZEhlYWRlclR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlw ZSBwdHJfdHlwZTsJRW1BbGlhc0NhcmRIZWFkZXJUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc0Nh cmRIZWFkZXJUeXBlICAJKGNvbnN0IEVtQWxpYXNDYXJkSGVhZGVyVHlwZSAgJik7CXB0cl90eXBl CQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdl dFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDI1NiAgOyB9CUVtQWxpYXNDYXJkSGVhZGVyVHlw ZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNDYXJkSGVhZGVyVHlwZSAgPEE+Jik7CUVt QWxpYXNDYXJkSGVhZGVyVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXND YXJkSGVhZGVyVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxp YXNDYXJkSGVhZGVyVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAg RW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJaW5pdFN0YWNrIDsgCSBFbUFsaWFzVUludDMyIDxBPgkg CQkJCQlyZXNldFZlY3RvciA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJc2lnbmF0dXJlIDsg CSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQloZHJWZXJzaW9uIDsgCSBFbUFsaWFzVUludDE2IDxB PgkgCQkJCQlmbGFncyA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQluYW1lIDsgCSBFbUFsaWFz VUludDggPEE+CSAJCQkJCW1hbnVmIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQl2ZXJzaW9u IDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQljcmVhdGlvbkRhdGUgOyAJIEVtQWxpYXNVSW50 MTYgPEE+CSAJCQkJCW51bVJBTUJsb2NrcyA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJYmxv Y2tMaXN0T2Zmc2V0IDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQlyZWFkV3JpdGVQYXJtc09m ZnNldCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJcmVhZFdyaXRlUGFybXNTaXplIDsgCSBF bUFsaWFzVUludDMyIDxBPgkgCQkJCQlyZWFkT25seVBhcm1zT2Zmc2V0IDsgCSBFbUFsaWFzVUlu dDMyIDxBPgkgCQkJCQliaWdST01PZmZzZXQgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCWNo ZWNrc3VtQnl0ZXMgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCWNoZWNrc3VtVmFsdWUgOyAJ IEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCXJlYWRXcml0ZVdvcmtpbmdPZmZzZXQgOyAJIEVtQWxp YXNVSW50MzIgPEE+CSAJCQkJCXJlYWRXcml0ZVdvcmtpbmdTaXplIDsgCSBFbUFsaWFzVUludDMy IDxBPgkgCQkJCQloYWxDb2RlT2Zmc2V0IDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf aW5pdFN0YWNrICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9yZXNldFZlY3RvciAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2Zfc2lnbmF0dXJlICAodm9pZCkgeyByZXR1cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9oZHJWZXJzaW9uICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfZmxhZ3MgICh2b2lkKSB7IHJldHVybiAgMTQgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9uYW1lICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfbWFudWYgICh2b2lkKSB7IHJldHVybiAgNDggOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl92ZXJzaW9uICAodm9pZCkgeyByZXR1cm4gIDgwIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfY3JlYXRpb25EYXRlICAodm9pZCkgeyByZXR1cm4gIDgyIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfbnVtUkFNQmxvY2tzICAodm9pZCkgeyByZXR1cm4gIDg2IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYmxvY2tMaXN0T2Zmc2V0ICAodm9pZCkgeyByZXR1cm4gIDg4 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVhZFdyaXRlUGFybXNPZmZzZXQgICh2b2lk KSB7IHJldHVybiAgOTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZWFkV3JpdGVQYXJt c1NpemUgICh2b2lkKSB7IHJldHVybiAgOTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9y ZWFkT25seVBhcm1zT2Zmc2V0ICAodm9pZCkgeyByZXR1cm4gIDEwMCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2JpZ1JPTU9mZnNldCAgKHZvaWQpIHsgcmV0dXJuICAxMDQgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9jaGVja3N1bUJ5dGVzICAodm9pZCkgeyByZXR1cm4gIDEwOCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NoZWNrc3VtVmFsdWUgICh2b2lkKSB7IHJldHVy biAgMTEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVhZFdyaXRlV29ya2luZ09mZnNl dCAgKHZvaWQpIHsgcmV0dXJuICAxMTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZWFk V3JpdGVXb3JraW5nU2l6ZSAgKHZvaWQpIHsgcmV0dXJuICAxMTggOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9oYWxDb2RlT2Zmc2V0ICAodm9pZCkgeyByZXR1cm4gIDEyMiA7IH0gIAl9OyAJ Y2xhc3MgRW1Qcm94eUNhcmRIZWFkZXJUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRy X3R5cGU7CUVtUHJveHlDYXJkSGVhZGVyVHlwZSAgCSh2b2lkKTsJRW1Qcm94eUNhcmRIZWFkZXJU eXBlICAJKGNvbnN0IEVtUHJveHlDYXJkSGVhZGVyVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRy CSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBz aXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDI1NiAgOyB9CUVtUHJveHlDYXJk SGVhZGVyVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5Q2FyZEhlYWRlclR5cGUgICYp OwlFbUFsaWFzQ2FyZEhlYWRlclR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVt QWxpYXNDYXJkSGVhZGVyVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0 ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMjU2ICBdOwl9IGZMb2NhbERhdGE7CXB1Ymxp YzoJICAgICBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCWluaXRTdGFjayA7IAkgRW1BbGlhc1VJ bnQzMiA8TEFTPgkgCQkJCQlyZXNldFZlY3RvciA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJ CQlzaWduYXR1cmUgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJaGRyVmVyc2lvbiA7IAkg RW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQlmbGFncyA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJ CQkJCW5hbWUgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQltYW51ZiA7IAkgRW1BbGlhc1VJ bnQxNiA8TEFTPgkgCQkJCQl2ZXJzaW9uIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCWNy ZWF0aW9uRGF0ZSA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQludW1SQU1CbG9ja3MgOyAJ IEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJYmxvY2tMaXN0T2Zmc2V0IDsgCSBFbUFsaWFzVUlu dDMyIDxMQVM+CSAJCQkJCXJlYWRXcml0ZVBhcm1zT2Zmc2V0IDsgCSBFbUFsaWFzVUludDMyIDxM QVM+CSAJCQkJCXJlYWRXcml0ZVBhcm1zU2l6ZSA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJ CQlyZWFkT25seVBhcm1zT2Zmc2V0IDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCWJpZ1JP TU9mZnNldCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQljaGVja3N1bUJ5dGVzIDsgCSBF bUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCWNoZWNrc3VtVmFsdWUgOyAJIEVtQWxpYXNVSW50MzIg PExBUz4JIAkJCQkJcmVhZFdyaXRlV29ya2luZ09mZnNldCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFT PgkgCQkJCQlyZWFkV3JpdGVXb3JraW5nU2l6ZSA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJ CQloYWxDb2RlT2Zmc2V0IDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5pdFN0YWNr ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZXNldFZl Y3RvciAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc2ln bmF0dXJlICAodm9pZCkgeyByZXR1cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9o ZHJWZXJzaW9uICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfZmxhZ3MgICh2b2lkKSB7IHJldHVybiAgMTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9uYW1lICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf bWFudWYgICh2b2lkKSB7IHJldHVybiAgNDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl92 ZXJzaW9uICAodm9pZCkgeyByZXR1cm4gIDgwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf Y3JlYXRpb25EYXRlICAodm9pZCkgeyByZXR1cm4gIDgyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfbnVtUkFNQmxvY2tzICAodm9pZCkgeyByZXR1cm4gIDg2IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfYmxvY2tMaXN0T2Zmc2V0ICAodm9pZCkgeyByZXR1cm4gIDg4IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVhZFdyaXRlUGFybXNPZmZzZXQgICh2b2lkKSB7IHJldHVy biAgOTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZWFkV3JpdGVQYXJtc1NpemUgICh2 b2lkKSB7IHJldHVybiAgOTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZWFkT25seVBh cm1zT2Zmc2V0ICAodm9pZCkgeyByZXR1cm4gIDEwMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2JpZ1JPTU9mZnNldCAgKHZvaWQpIHsgcmV0dXJuICAxMDQgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9jaGVja3N1bUJ5dGVzICAodm9pZCkgeyByZXR1cm4gIDEwOCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2NoZWNrc3VtVmFsdWUgICh2b2lkKSB7IHJldHVybiAgMTEyIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVhZFdyaXRlV29ya2luZ09mZnNldCAgKHZvaWQp IHsgcmV0dXJuICAxMTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZWFkV3JpdGVXb3Jr aW5nU2l6ZSAgKHZvaWQpIHsgcmV0dXJuICAxMTggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9oYWxDb2RlT2Zmc2V0ICAodm9pZCkgeyByZXR1cm4gIDEyMiA7IH0gIAl9OyAgIAkgIHRlbXBs YXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzQ2FyZEluZm9UeXBlICAJewlwdWJsaWM6CXR5cGVk ZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNDYXJkSW5mb1R5cGUgIAko cHRyX3R5cGUpOwlFbUFsaWFzQ2FyZEluZm9UeXBlICAJKGNvbnN0IEVtQWxpYXNDYXJkSW5mb1R5 cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlz dGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA0OCAgOyB9CUVtQWxp YXNDYXJkSW5mb1R5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzQ2FyZEluZm9UeXBl ICA8QT4mKTsJRW1BbGlhc0NhcmRJbmZvVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0 IEVtQWxpYXNDYXJkSW5mb1R5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRl OglFbUFsaWFzQ2FyZEluZm9UeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJ ICAgICBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQliYXNlUCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4J IAkJCQkJc2l6ZSA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJZmlyc3RSQU1CbG9ja1NpemUg OyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCXRhcmdldFJPTVNoaWZ0IDsgCSBFbUFsaWFzVUlu dDMyIDxBPgkgCQkJCQljYXJkSGVhZGVyT2Zmc2V0IDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJ CQlyc3ZTcGFjZSA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJZHluSGVhcFNwYWNlIDsgCSBF bUFsaWFzZW11cHRyIDxBPgkgCQkJCQlyYW1TdG9yZVAgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJ CQkJCW51bVJBTUhlYXBzIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQlyYW1IZWFwT2Zmc2V0 c1AgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCW51bVJPTUhlYXBzIDsgCSBFbUFsaWFzZW11 cHRyIDxBPgkgCQkJCQlyb21IZWFwT2Zmc2V0c1AgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJ CWNhcmRPZmZzZXRNYXNrIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYmFzZVAgICh2 b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NpemUgICh2b2lk KSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZpcnN0UkFNQmxvY2tT aXplICAodm9pZCkgeyByZXR1cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90YXJn ZXRST01TaGlmdCAgKHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2NhcmRIZWFkZXJPZmZzZXQgICh2b2lkKSB7IHJldHVybiAgMTYgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9yc3ZTcGFjZSAgKHZvaWQpIHsgcmV0dXJuICAyMCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2R5bkhlYXBTcGFjZSAgKHZvaWQpIHsgcmV0dXJuICAyNCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX3JhbVN0b3JlUCAgKHZvaWQpIHsgcmV0dXJuICAyOCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX251bVJBTUhlYXBzICAodm9pZCkgeyByZXR1cm4gIDMy IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmFtSGVhcE9mZnNldHNQICAodm9pZCkgeyBy ZXR1cm4gIDM0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbnVtUk9NSGVhcHMgICh2b2lk KSB7IHJldHVybiAgMzggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yb21IZWFwT2Zmc2V0 c1AgICh2b2lkKSB7IHJldHVybiAgNDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jYXJk T2Zmc2V0TWFzayAgKHZvaWQpIHsgcmV0dXJuICA0NCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eUNh cmRJbmZvVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5Q2Fy ZEluZm9UeXBlICAJKHZvaWQpOwlFbVByb3h5Q2FyZEluZm9UeXBlICAJKGNvbnN0IEVtUHJveHlD YXJkSW5mb1R5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4g KHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJ CXsgcmV0dXJuICAgICA0OCAgOyB9CUVtUHJveHlDYXJkSW5mb1R5cGUgICYJCW9wZXJhdG9yPSAo Y29uc3QgRW1Qcm94eUNhcmRJbmZvVHlwZSAgJik7CUVtQWxpYXNDYXJkSW5mb1R5cGUgIDxMQVM+ CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNDYXJkSW5mb1R5cGUgIDxMQVM+CW9wZXJh dG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDQ4 ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJ CWJhc2VQIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCXNpemUgOyAJIEVtQWxpYXNVSW50 MzIgPExBUz4JIAkJCQkJZmlyc3RSQU1CbG9ja1NpemUgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4J IAkJCQkJdGFyZ2V0Uk9NU2hpZnQgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJY2FyZEhl YWRlck9mZnNldCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQlyc3ZTcGFjZSA7IAkgRW1B bGlhc1VJbnQzMiA8TEFTPgkgCQkJCQlkeW5IZWFwU3BhY2UgOyAJIEVtQWxpYXNlbXVwdHIgPExB Uz4JIAkJCQkJcmFtU3RvcmVQIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCW51bVJBTUhl YXBzIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCXJhbUhlYXBPZmZzZXRzUCA7IAkgRW1B bGlhc1VJbnQxNiA8TEFTPgkgCQkJCQludW1ST01IZWFwcyA7IAkgRW1BbGlhc2VtdXB0ciA8TEFT PgkgCQkJCQlyb21IZWFwT2Zmc2V0c1AgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJY2Fy ZE9mZnNldE1hc2sgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9iYXNlUCAgKHZvaWQp IHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc2l6ZSAgKHZvaWQpIHsg cmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmlyc3RSQU1CbG9ja1NpemUg ICh2b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RhcmdldFJP TVNoaWZ0ICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf Y2FyZEhlYWRlck9mZnNldCAgKHZvaWQpIHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3JzdlNwYWNlICAodm9pZCkgeyByZXR1cm4gIDIwIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfZHluSGVhcFNwYWNlICAodm9pZCkgeyByZXR1cm4gIDI0IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfcmFtU3RvcmVQICAodm9pZCkgeyByZXR1cm4gIDI4IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbnVtUkFNSGVhcHMgICh2b2lkKSB7IHJldHVybiAgMzIgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yYW1IZWFwT2Zmc2V0c1AgICh2b2lkKSB7IHJldHVy biAgMzQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9udW1ST01IZWFwcyAgKHZvaWQpIHsg cmV0dXJuICAzOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3JvbUhlYXBPZmZzZXRzUCAg KHZvaWQpIHsgcmV0dXJuICA0MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NhcmRPZmZz ZXRNYXNrICAodm9pZCkgeyByZXR1cm4gIDQ0IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNz IEE+CWNsYXNzIEVtQWxpYXNTdG9yYWdlSGVhZGVyVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5 cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzU3RvcmFnZUhlYWRlclR5cGUgIAko cHRyX3R5cGUpOwlFbUFsaWFzU3RvcmFnZUhlYWRlclR5cGUgIAkoY29uc3QgRW1BbGlhc1N0b3Jh Z2VIZWFkZXJUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJu IGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNzYg IDsgfQlFbUFsaWFzU3RvcmFnZUhlYWRlclR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFs aWFzU3RvcmFnZUhlYWRlclR5cGUgIDxBPiYpOwlFbUFsaWFzU3RvcmFnZUhlYWRlclR5cGUgIDxB PglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU3RvcmFnZUhlYWRlclR5cGUgIDxBPglv cGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzU3RvcmFnZUhlYWRlclR5cGUg IAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MzIgPEE+ CSAJCQkJCQlzaWduYXR1cmUgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQl2ZXJzaW9uIDsg CSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJZmxhZ3MgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJ CQkJCW5hbWUgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQljcmVhdGlvbkRhdGUgOyAJIEVt QWxpYXNVSW50MzIgPEE+CSAJCQkJCQliYWNrdXBEYXRlIDsgCSBFbUFsaWFzVUludDMyIDxBPgkg CQkJCQkJaGVhcExpc3RPZmZzZXQgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlpbml0Q29k ZU9mZnNldDEgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlpbml0Q29kZU9mZnNldDIgOyAJ IEVtQWxpYXNMb2NhbElEIDxBPgkgCQkJCQlkYXRhYmFzZURpcklEIDsgCSBFbUFsaWFzVUludDMy IDxBPgkgCQkJCQkJcnN2U3BhY2UgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlkeW5IZWFw U3BhY2UgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlmaXJzdFJBTUJsb2NrU2l6ZSA7ICAJ ICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NpZ25hdHVyZSAgKHZvaWQpIHsgcmV0dXJuICAw IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdmVyc2lvbiAgKHZvaWQpIHsgcmV0dXJuICA0 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmxhZ3MgICh2b2lkKSB7IHJldHVybiAgNiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25hbWUgICh2b2lkKSB7IHJldHVybiAgOCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NyZWF0aW9uRGF0ZSAgKHZvaWQpIHsgcmV0dXJuICA0 MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2JhY2t1cERhdGUgICh2b2lkKSB7IHJldHVy biAgNDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9oZWFwTGlzdE9mZnNldCAgKHZvaWQp IHsgcmV0dXJuICA0OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luaXRDb2RlT2Zmc2V0 MSAgKHZvaWQpIHsgcmV0dXJuICA1MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luaXRD b2RlT2Zmc2V0MiAgKHZvaWQpIHsgcmV0dXJuICA1NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2RhdGFiYXNlRGlySUQgICh2b2lkKSB7IHJldHVybiAgNjAgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9yc3ZTcGFjZSAgKHZvaWQpIHsgcmV0dXJuICA2NCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2R5bkhlYXBTcGFjZSAgKHZvaWQpIHsgcmV0dXJuICA2OCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2ZpcnN0UkFNQmxvY2tTaXplICAodm9pZCkgeyByZXR1cm4gIDcy IDsgfSAgCX07IAljbGFzcyBFbVByb3h5U3RvcmFnZUhlYWRlclR5cGUgIAl7CXB1YmxpYzoJdHlw ZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVN0b3JhZ2VIZWFkZXJUeXBlICAJKHZvaWQpOwlF bVByb3h5U3RvcmFnZUhlYWRlclR5cGUgIAkoY29uc3QgRW1Qcm94eVN0b3JhZ2VIZWFkZXJUeXBl ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkg JmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAg ICAgNzYgIDsgfQlFbVByb3h5U3RvcmFnZUhlYWRlclR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3Qg RW1Qcm94eVN0b3JhZ2VIZWFkZXJUeXBlICAmKTsJRW1BbGlhc1N0b3JhZ2VIZWFkZXJUeXBlICA8 TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU3RvcmFnZUhlYWRlclR5cGUgIDxM QVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0 ZXNbICAgIDc2ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDMyIDxM QVM+CSAJCQkJCQlzaWduYXR1cmUgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXZlcnNp b24gOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWZsYWdzIDsgCSBFbUFsaWFzVUludDgg PExBUz4JIAkJCQkJCW5hbWUgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCWNyZWF0aW9u RGF0ZSA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJYmFja3VwRGF0ZSA7IAkgRW1BbGlh c1VJbnQzMiA8TEFTPgkgCQkJCQkJaGVhcExpc3RPZmZzZXQgOyAJIEVtQWxpYXNVSW50MzIgPExB Uz4JIAkJCQkJCWluaXRDb2RlT2Zmc2V0MSA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJ aW5pdENvZGVPZmZzZXQyIDsgCSBFbUFsaWFzTG9jYWxJRCA8TEFTPgkgCQkJCQlkYXRhYmFzZURp cklEIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlyc3ZTcGFjZSA7IAkgRW1BbGlhc1VJ bnQzMiA8TEFTPgkgCQkJCQkJZHluSGVhcFNwYWNlIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJ CQkJCQlmaXJzdFJBTUJsb2NrU2l6ZSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Np Z25hdHVyZSAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf dmVyc2lvbiAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf ZmxhZ3MgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25h bWUgICh2b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NyZWF0 aW9uRGF0ZSAgKHZvaWQpIHsgcmV0dXJuICA0MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2JhY2t1cERhdGUgICh2b2lkKSB7IHJldHVybiAgNDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9oZWFwTGlzdE9mZnNldCAgKHZvaWQpIHsgcmV0dXJuICA0OCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2luaXRDb2RlT2Zmc2V0MSAgKHZvaWQpIHsgcmV0dXJuICA1MiA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2luaXRDb2RlT2Zmc2V0MiAgKHZvaWQpIHsgcmV0dXJuICA1 NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RhdGFiYXNlRGlySUQgICh2b2lkKSB7IHJl dHVybiAgNjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yc3ZTcGFjZSAgKHZvaWQpIHsg cmV0dXJuICA2NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2R5bkhlYXBTcGFjZSAgKHZv aWQpIHsgcmV0dXJuICA2OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZpcnN0UkFNQmxv Y2tTaXplICAodm9pZCkgeyByZXR1cm4gIDcyIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNz IEE+CWNsYXNzIEVtQWxpYXNFeGdHb1RvVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1l IEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzRXhnR29Ub1R5cGUgIAkocHRyX3R5cGUpOwlF bUFsaWFzRXhnR29Ub1R5cGUgIAkoY29uc3QgRW1BbGlhc0V4Z0dvVG9UeXBlICAmKTsJcHRyX3R5 cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJ R2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTYgIDsgfQlFbUFsaWFzRXhnR29Ub1R5cGUg IDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzRXhnR29Ub1R5cGUgIDxBPiYpOwlFbUFsaWFz RXhnR29Ub1R5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzRXhnR29Ub1R5 cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzRXhnR29Ub1R5 cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYg PEE+CSAJCQkJCQlkYkNhcmRObyA7IAkgRW1BbGlhc0xvY2FsSUQgPEE+CSAJCQkJCWRiSUQgOyAJ IEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlyZWNvcmROdW0gOyAJIEVtQWxpYXNVSW50MzIgPEE+ CSAJCQkJCQl1bmlxdWVJRCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCW1hdGNoQ3VzdG9t IDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGJDYXJkTm8gICh2b2lkKSB7IHJldHVy biAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RiSUQgICh2b2lkKSB7IHJldHVybiAg MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3JlY29yZE51bSAgKHZvaWQpIHsgcmV0dXJu ICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdW5pcXVlSUQgICh2b2lkKSB7IHJldHVy biAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21hdGNoQ3VzdG9tICAodm9pZCkgeyBy ZXR1cm4gIDEyIDsgfSAgCX07IAljbGFzcyBFbVByb3h5RXhnR29Ub1R5cGUgIAl7CXB1YmxpYzoJ dHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUV4Z0dvVG9UeXBlICAJKHZvaWQpOwlFbVBy b3h5RXhnR29Ub1R5cGUgIAkoY29uc3QgRW1Qcm94eUV4Z0dvVG9UeXBlICAmKTsJcHRyX3R5cGUJ CQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0J c3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTYgIDsgfQlFbVBy b3h5RXhnR29Ub1R5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eUV4Z0dvVG9UeXBlICAm KTsJRW1BbGlhc0V4Z0dvVG9UeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFs aWFzRXhnR29Ub1R5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0 cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDE2ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAg ICBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlkYkNhcmRObyA7IAkgRW1BbGlhc0xvY2FsSUQg PExBUz4JIAkJCQkJZGJJRCA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJcmVjb3JkTnVt IDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQl1bmlxdWVJRCA7IAkgRW1BbGlhc1VJbnQz MiA8TEFTPgkgCQkJCQkJbWF0Y2hDdXN0b20gOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9kYkNhcmRObyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfZGJJRCAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf cmVjb3JkTnVtICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl91bmlxdWVJRCAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfbWF0Y2hDdXN0b20gICh2b2lkKSB7IHJldHVybiAgMTIgOyB9ICAJfTsgICAJICB0ZW1wbGF0 ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc0V4Z1NvY2tldFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRl ZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc0V4Z1NvY2tldFR5cGUgIAko cHRyX3R5cGUpOwlFbUFsaWFzRXhnU29ja2V0VHlwZSAgCShjb25zdCBFbUFsaWFzRXhnU29ja2V0 VHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9 CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDYwICA7IH0JRW1B bGlhc0V4Z1NvY2tldFR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzRXhnU29ja2V0 VHlwZSAgPEE+Jik7CUVtQWxpYXNFeGdTb2NrZXRUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJ Y29uc3QgRW1BbGlhc0V4Z1NvY2tldFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlw cml2YXRlOglFbUFsaWFzRXhnU29ja2V0VHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlw dWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWxpYnJhcnlSZWYgOyAJIEVtQWxp YXNVSW50MzIgPEE+CSAJCQkJCQlzb2NrZXRSZWYgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJ CQl0YXJnZXQgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQljb3VudCA7IAkgRW1BbGlhc1VJ bnQzMiA8QT4JIAkJCQkJCWxlbmd0aCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXRpbWUg OyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlhcHBEYXRhIDsgCSBFbUFsaWFzVUludDMyIDxB PgkgCQkJCQkJZ29Ub0NyZWF0b3IgOyAJIEVtQWxpYXNFeGdHb1RvVHlwZSA8QT4JIAkJCQlnb1Rv UGFyYW1zIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJZmxhZ3MgOyAJIEVtQWxpYXNlbXVw dHIgPEE+CSAJCQkJCQlkZXNjcmlwdGlvbiA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXR5 cGUgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQluYW1lIDsgIAkgICAgIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfbGlicmFyeVJlZiAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2Zfc29ja2V0UmVmICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl90YXJnZXQgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2NvdW50ICAodm9pZCkgeyByZXR1cm4gIDEwIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfbGVuZ3RoICAodm9pZCkgeyByZXR1cm4gIDE0IDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfdGltZSAgKHZvaWQpIHsgcmV0dXJuICAxOCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2FwcERhdGEgICh2b2lkKSB7IHJldHVybiAgMjIgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9nb1RvQ3JlYXRvciAgKHZvaWQpIHsgcmV0dXJuICAyNiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2dvVG9QYXJhbXMgICh2b2lkKSB7IHJldHVybiAgMzAgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9mbGFncyAgKHZvaWQpIHsgcmV0dXJuICA0NiA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2Rlc2NyaXB0aW9uICAodm9pZCkgeyByZXR1cm4gIDQ4IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdHlwZSAgKHZvaWQpIHsgcmV0dXJuICA1MiA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25hbWUgICh2b2lkKSB7IHJldHVybiAgNTYgOyB9ICAJ fTsgCWNsYXNzIEVtUHJveHlFeGdTb2NrZXRUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCog cHRyX3R5cGU7CUVtUHJveHlFeGdTb2NrZXRUeXBlICAJKHZvaWQpOwlFbVByb3h5RXhnU29ja2V0 VHlwZSAgCShjb25zdCBFbVByb3h5RXhnU29ja2V0VHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRy CSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBz aXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDYwICA7IH0JRW1Qcm94eUV4Z1Nv Y2tldFR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eUV4Z1NvY2tldFR5cGUgICYpOwlF bUFsaWFzRXhnU29ja2V0VHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlh c0V4Z1NvY2tldFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0 cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDYwICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAg ICBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlsaWJyYXJ5UmVmIDsgCSBFbUFsaWFzVUludDMy IDxMQVM+CSAJCQkJCQlzb2NrZXRSZWYgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXRh cmdldCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJY291bnQgOyAJIEVtQWxpYXNVSW50 MzIgPExBUz4JIAkJCQkJCWxlbmd0aCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJdGlt ZSA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJYXBwRGF0YSA7IAkgRW1BbGlhc1VJbnQz MiA8TEFTPgkgCQkJCQkJZ29Ub0NyZWF0b3IgOyAJIEVtQWxpYXNFeGdHb1RvVHlwZSA8TEFTPgkg CQkJCWdvVG9QYXJhbXMgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWZsYWdzIDsgCSBF bUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlkZXNjcmlwdGlvbiA7IAkgRW1BbGlhc2VtdXB0ciA8 TEFTPgkgCQkJCQkJdHlwZSA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJbmFtZSA7ICAJ ICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xpYnJhcnlSZWYgICh2b2lkKSB7IHJldHVybiAg MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NvY2tldFJlZiAgKHZvaWQpIHsgcmV0dXJu ICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdGFyZ2V0ICAodm9pZCkgeyByZXR1cm4g IDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb3VudCAgKHZvaWQpIHsgcmV0dXJuICAx MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xlbmd0aCAgKHZvaWQpIHsgcmV0dXJuICAx NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RpbWUgICh2b2lkKSB7IHJldHVybiAgMTgg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hcHBEYXRhICAodm9pZCkgeyByZXR1cm4gIDIy IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ29Ub0NyZWF0b3IgICh2b2lkKSB7IHJldHVy biAgMjYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9nb1RvUGFyYW1zICAodm9pZCkgeyBy ZXR1cm4gIDMwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmxhZ3MgICh2b2lkKSB7IHJl dHVybiAgNDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kZXNjcmlwdGlvbiAgKHZvaWQp IHsgcmV0dXJuICA0OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3R5cGUgICh2b2lkKSB7 IHJldHVybiAgNTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uYW1lICAodm9pZCkgeyBy ZXR1cm4gIDU2IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNE bGtEQkNyZWF0b3JMaXN0ICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUg cHRyX3R5cGU7CUVtQWxpYXNEbGtEQkNyZWF0b3JMaXN0ICAJKHB0cl90eXBlKTsJRW1BbGlhc0Rs a0RCQ3JlYXRvckxpc3QgIAkoY29uc3QgRW1BbGlhc0Rsa0RCQ3JlYXRvckxpc3QgICYpOwlwdHJf dHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90 CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA2ICA7IH0JRW1BbGlhc0Rsa0RCQ3JlYXRv ckxpc3QgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzRGxrREJDcmVhdG9yTGlzdCAgPEE+ Jik7CUVtQWxpYXNEbGtEQkNyZWF0b3JMaXN0ICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3Qg RW1BbGlhc0Rsa0RCQ3JlYXRvckxpc3QgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2 YXRlOglFbUFsaWFzRGxrREJDcmVhdG9yTGlzdCAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlw dWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWNvdW50IDsgCSBFbUFsaWFzZW11 cHRyIDxBPgkgCQkJCQkJbGlzdEggOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb3Vu dCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbGlzdEgg ICh2b2lkKSB7IHJldHVybiAgMiA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eURsa0RCQ3JlYXRvckxp c3QgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eURsa0RCQ3JlYXRv ckxpc3QgIAkodm9pZCk7CUVtUHJveHlEbGtEQkNyZWF0b3JMaXN0ICAJKGNvbnN0IEVtUHJveHlE bGtEQkNyZWF0b3JMaXN0ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0 dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9p ZCkJCQl7IHJldHVybiAgICAgNiAgOyB9CUVtUHJveHlEbGtEQkNyZWF0b3JMaXN0ICAmCQlvcGVy YXRvcj0gKGNvbnN0IEVtUHJveHlEbGtEQkNyZWF0b3JMaXN0ICAmKTsJRW1BbGlhc0Rsa0RCQ3Jl YXRvckxpc3QgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNEbGtEQkNyZWF0 b3JMaXN0ICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3Qgewlj aGFyCQkJX2J5dGVzWyAgICA2ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFz VUludDE2IDxMQVM+CSAJCQkJCQljb3VudCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJ bGlzdEggOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb3VudCAgKHZvaWQpIHsgcmV0 dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbGlzdEggICh2b2lkKSB7IHJldHVy biAgMiA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzRGxrU2Vy dmVyU2Vzc2lvblR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBw dHJfdHlwZTsJRW1BbGlhc0Rsa1NlcnZlclNlc3Npb25UeXBlICAJKHB0cl90eXBlKTsJRW1BbGlh c0Rsa1NlcnZlclNlc3Npb25UeXBlICAJKGNvbnN0IEVtQWxpYXNEbGtTZXJ2ZXJTZXNzaW9uVHlw ZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0 YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDE0NiAgOyB9CUVtQWxp YXNEbGtTZXJ2ZXJTZXNzaW9uVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNEbGtT ZXJ2ZXJTZXNzaW9uVHlwZSAgPEE+Jik7CUVtQWxpYXNEbGtTZXJ2ZXJTZXNzaW9uVHlwZSAgPEE+ CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNEbGtTZXJ2ZXJTZXNzaW9uVHlwZSAgPEE+ CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNEbGtTZXJ2ZXJTZXNzaW9u VHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQx NiA8QT4JIAkJCQkJCWh0YWxMaWJSZWZOdW0gOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlt YXhIdGFsWGZlclNpemUgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlldmVudFByb2NQIDsg CSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJZXZlbnRSZWYgOyAJIEVtQWxpYXNlbXVwdHIgPEE+ CSAJCQkJCQljYW5Qcm9jUCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCWNhblJlZiA7IAkg RW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWNvbmRGaWx0ZXJIIDsgCSBFbUFsaWFzVUludDggPEE+ CSAJCQkJCQlkbGtEQklEIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlyZXNlcnZlZDEgOyAJ IEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlkYlIgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJ CQljYXJkTm8gOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlkYkNyZWF0b3IgOyAJIEVtQWxp YXNDaGFyIDxBPgkgCQkJCQkJZGJOYW1lIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJZGJP cGVuTW9kZSA7IAkgRW1BbGlhc0Jvb2xlYW4gPEE+CSAJCQkJCWNyZWF0ZWQgOyAJIEVtQWxpYXNC b29sZWFuIDxBPgkgCQkJCQlpc1Jlc0RCIDsgCSBFbUFsaWFzQm9vbGVhbiA8QT4JIAkJCQkJcmFt QmFzZWQgOyAJIEVtQWxpYXNCb29sZWFuIDxBPgkgCQkJCQlyZWFkT25seSA7IAkgRW1BbGlhc0xv Y2FsSUQgPEE+CSAJCQkJCWRiTG9jYWxJRCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCWlu aXRpYWxNb2ROdW0gOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQljdXJSZWNJbmRleCA7IAkg RW1BbGlhc0Rsa0RCQ3JlYXRvckxpc3QgPEE+CSAJCQljcmVhdG9yTGlzdCA7IAkgRW1BbGlhc1VJ bnQ4IDxBPgkgCQkJCQkJc3luY1N0YXRlIDsgCSBFbUFsaWFzQm9vbGVhbiA8QT4JIAkJCQkJY29t cGxldGUgOyAJIEVtQWxpYXNCb29sZWFuIDxBPgkgCQkJCQljb25kdWl0T3BlbmVkIDsgCSBFbUFs aWFzQm9vbGVhbiA8QT4JIAkJCQkJbG9nQ2xlYXJlZCA7IAkgRW1BbGlhc0Jvb2xlYW4gPEE+CSAJ CQkJCXJlc2V0UGVuZGluZyA7IAkgRW1BbGlhc0Jvb2xlYW4gPEE+CSAJCQkJCWdvdENvbW1hbmQg OyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCWNtZFRJRCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkg CQkJCQkJcmVzZXJ2ZWQyIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJY21kTGVuIDsgCSBF bUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJY21kUCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJ CWNtZEggOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQl3U3RhdGVGbGFncyA7IAkgRW1BbGlh c0RtU2VhcmNoU3RhdGVUeXBlIDxBPgkgCQkJZGJTZWFyY2hTdGF0ZSA7ICAJICAgICBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2h0YWxMaWJSZWZOdW0gICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX21heEh0YWxYZmVyU2l6ZSAgKHZvaWQpIHsgcmV0dXJuICAy IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXZlbnRQcm9jUCAgKHZvaWQpIHsgcmV0dXJu ICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXZlbnRSZWYgICh2b2lkKSB7IHJldHVy biAgMTAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jYW5Qcm9jUCAgKHZvaWQpIHsgcmV0 dXJuICAxNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NhblJlZiAgKHZvaWQpIHsgcmV0 dXJuICAxOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbmRGaWx0ZXJIICAodm9pZCkg eyByZXR1cm4gIDIyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGxrREJJRCAgKHZvaWQp IHsgcmV0dXJuICAyNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jlc2VydmVkMSAgKHZv aWQpIHsgcmV0dXJuICAyNyA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RiUiAgKHZvaWQp IHsgcmV0dXJuICAyOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NhcmRObyAgKHZvaWQp IHsgcmV0dXJuICAzMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RiQ3JlYXRvciAgKHZv aWQpIHsgcmV0dXJuICAzNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RiTmFtZSAgKHZv aWQpIHsgcmV0dXJuICAzOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RiT3Blbk1vZGUg ICh2b2lkKSB7IHJldHVybiAgNzAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jcmVhdGVk ICAodm9pZCkgeyByZXR1cm4gIDcyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaXNSZXNE QiAgKHZvaWQpIHsgcmV0dXJuICA3MyA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3JhbUJh c2VkICAodm9pZCkgeyByZXR1cm4gIDc0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVh ZE9ubHkgICh2b2lkKSB7IHJldHVybiAgNzUgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9k YkxvY2FsSUQgICh2b2lkKSB7IHJldHVybiAgNzYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9pbml0aWFsTW9kTnVtICAodm9pZCkgeyByZXR1cm4gIDgwIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfY3VyUmVjSW5kZXggICh2b2lkKSB7IHJldHVybiAgODQgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9jcmVhdG9yTGlzdCAgKHZvaWQpIHsgcmV0dXJuICA4OCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3N5bmNTdGF0ZSAgKHZvaWQpIHsgcmV0dXJuICA5NCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbXBsZXRlICAodm9pZCkgeyByZXR1cm4gIDk1IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29uZHVpdE9wZW5lZCAgKHZvaWQpIHsgcmV0dXJuICA5 NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xvZ0NsZWFyZWQgICh2b2lkKSB7IHJldHVy biAgOTcgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZXNldFBlbmRpbmcgICh2b2lkKSB7 IHJldHVybiAgOTggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9nb3RDb21tYW5kICAodm9p ZCkgeyByZXR1cm4gIDk5IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY21kVElEICAodm9p ZCkgeyByZXR1cm4gIDEwMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jlc2VydmVkMiAg KHZvaWQpIHsgcmV0dXJuICAxMDEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jbWRMZW4g ICh2b2lkKSB7IHJldHVybiAgMTAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY21kUCAg KHZvaWQpIHsgcmV0dXJuICAxMDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jbWRIICAo dm9pZCkgeyByZXR1cm4gIDEwOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3dTdGF0ZUZs YWdzICAodm9pZCkgeyByZXR1cm4gIDExMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Ri U2VhcmNoU3RhdGUgICh2b2lkKSB7IHJldHVybiAgMTE0IDsgfSAgCX07IAljbGFzcyBFbVByb3h5 RGxrU2VydmVyU2Vzc2lvblR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJ RW1Qcm94eURsa1NlcnZlclNlc3Npb25UeXBlICAJKHZvaWQpOwlFbVByb3h5RGxrU2VydmVyU2Vz c2lvblR5cGUgIAkoY29uc3QgRW1Qcm94eURsa1NlcnZlclNlc3Npb25UeXBlICAmKTsJcHRyX3R5 cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7 IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTQ2ICA7IH0J RW1Qcm94eURsa1NlcnZlclNlc3Npb25UeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlE bGtTZXJ2ZXJTZXNzaW9uVHlwZSAgJik7CUVtQWxpYXNEbGtTZXJ2ZXJTZXNzaW9uVHlwZSAgPExB Uz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0Rsa1NlcnZlclNlc3Npb25UeXBlICA8 TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5 dGVzWyAgICAxNDYgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYg PExBUz4JIAkJCQkJCWh0YWxMaWJSZWZOdW0gOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJ CW1heEh0YWxYZmVyU2l6ZSA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJZXZlbnRQcm9j UCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJZXZlbnRSZWYgOyAJIEVtQWxpYXNlbXVw dHIgPExBUz4JIAkJCQkJCWNhblByb2NQIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlj YW5SZWYgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWNvbmRGaWx0ZXJIIDsgCSBFbUFs aWFzVUludDggPExBUz4JIAkJCQkJCWRsa0RCSUQgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJ CQkJcmVzZXJ2ZWQxIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlkYlIgOyAJIEVtQWxp YXNVSW50MTYgPExBUz4JIAkJCQkJCWNhcmRObyA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJ CQkJZGJDcmVhdG9yIDsgCSBFbUFsaWFzQ2hhciA8TEFTPgkgCQkJCQkJZGJOYW1lIDsgCSBFbUFs aWFzVUludDE2IDxMQVM+CSAJCQkJCQlkYk9wZW5Nb2RlIDsgCSBFbUFsaWFzQm9vbGVhbiA8TEFT PgkgCQkJCQljcmVhdGVkIDsgCSBFbUFsaWFzQm9vbGVhbiA8TEFTPgkgCQkJCQlpc1Jlc0RCIDsg CSBFbUFsaWFzQm9vbGVhbiA8TEFTPgkgCQkJCQlyYW1CYXNlZCA7IAkgRW1BbGlhc0Jvb2xlYW4g PExBUz4JIAkJCQkJcmVhZE9ubHkgOyAJIEVtQWxpYXNMb2NhbElEIDxMQVM+CSAJCQkJCWRiTG9j YWxJRCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJaW5pdGlhbE1vZE51bSA7IAkgRW1B bGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJY3VyUmVjSW5kZXggOyAJIEVtQWxpYXNEbGtEQkNyZWF0 b3JMaXN0IDxMQVM+CSAJCQljcmVhdG9yTGlzdCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJ CQlzeW5jU3RhdGUgOyAJIEVtQWxpYXNCb29sZWFuIDxMQVM+CSAJCQkJCWNvbXBsZXRlIDsgCSBF bUFsaWFzQm9vbGVhbiA8TEFTPgkgCQkJCQljb25kdWl0T3BlbmVkIDsgCSBFbUFsaWFzQm9vbGVh biA8TEFTPgkgCQkJCQlsb2dDbGVhcmVkIDsgCSBFbUFsaWFzQm9vbGVhbiA8TEFTPgkgCQkJCQly ZXNldFBlbmRpbmcgOyAJIEVtQWxpYXNCb29sZWFuIDxMQVM+CSAJCQkJCWdvdENvbW1hbmQgOyAJ IEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJY21kVElEIDsgCSBFbUFsaWFzVUludDggPExBUz4J IAkJCQkJCXJlc2VydmVkMiA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJY21kTGVuIDsg CSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQljbWRQIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+ CSAJCQkJCQljbWRIIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQl3U3RhdGVGbGFncyA7 IAkgRW1BbGlhc0RtU2VhcmNoU3RhdGVUeXBlIDxMQVM+CSAJCQlkYlNlYXJjaFN0YXRlIDsgIAkg ICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaHRhbExpYlJlZk51bSAgKHZvaWQpIHsgcmV0dXJu ICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbWF4SHRhbFhmZXJTaXplICAodm9pZCkg eyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9ldmVudFByb2NQICAodm9p ZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9ldmVudFJlZiAgKHZv aWQpIHsgcmV0dXJuICAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NhblByb2NQICAo dm9pZCkgeyByZXR1cm4gIDE0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY2FuUmVmICAo dm9pZCkgeyByZXR1cm4gIDE4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29uZEZpbHRl ckggICh2b2lkKSB7IHJldHVybiAgMjIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kbGtE QklEICAodm9pZCkgeyByZXR1cm4gIDI2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVz ZXJ2ZWQxICAodm9pZCkgeyByZXR1cm4gIDI3IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf ZGJSICAodm9pZCkgeyByZXR1cm4gIDI4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY2Fy ZE5vICAodm9pZCkgeyByZXR1cm4gIDMyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGJD cmVhdG9yICAodm9pZCkgeyByZXR1cm4gIDM0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf ZGJOYW1lICAodm9pZCkgeyByZXR1cm4gIDM4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf ZGJPcGVuTW9kZSAgKHZvaWQpIHsgcmV0dXJuICA3MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2NyZWF0ZWQgICh2b2lkKSB7IHJldHVybiAgNzIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9pc1Jlc0RCICAodm9pZCkgeyByZXR1cm4gIDczIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfcmFtQmFzZWQgICh2b2lkKSB7IHJldHVybiAgNzQgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9yZWFkT25seSAgKHZvaWQpIHsgcmV0dXJuICA3NSA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2RiTG9jYWxJRCAgKHZvaWQpIHsgcmV0dXJuICA3NiA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2luaXRpYWxNb2ROdW0gICh2b2lkKSB7IHJldHVybiAgODAgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9jdXJSZWNJbmRleCAgKHZvaWQpIHsgcmV0dXJuICA4NCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NyZWF0b3JMaXN0ICAodm9pZCkgeyByZXR1cm4gIDg4 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3luY1N0YXRlICAodm9pZCkgeyByZXR1cm4g IDk0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29tcGxldGUgICh2b2lkKSB7IHJldHVy biAgOTUgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb25kdWl0T3BlbmVkICAodm9pZCkg eyByZXR1cm4gIDk2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbG9nQ2xlYXJlZCAgKHZv aWQpIHsgcmV0dXJuICA5NyA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jlc2V0UGVuZGlu ZyAgKHZvaWQpIHsgcmV0dXJuICA5OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dvdENv bW1hbmQgICh2b2lkKSB7IHJldHVybiAgOTkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9j bWRUSUQgICh2b2lkKSB7IHJldHVybiAgMTAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf cmVzZXJ2ZWQyICAodm9pZCkgeyByZXR1cm4gIDEwMSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2NtZExlbiAgKHZvaWQpIHsgcmV0dXJuICAxMDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9jbWRQICAodm9pZCkgeyByZXR1cm4gIDEwNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2NtZEggICh2b2lkKSB7IHJldHVybiAgMTA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2Zfd1N0YXRlRmxhZ3MgICh2b2lkKSB7IHJldHVybiAgMTEyIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfZGJTZWFyY2hTdGF0ZSAgKHZvaWQpIHsgcmV0dXJuICAxMTQgOyB9ICAJfTsgICAg CiAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNnZW5lcmljICAJewlwdWJsaWM6CXR5 cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNnZW5lcmljICAJKHB0 cl90eXBlKTsJRW1BbGlhc2dlbmVyaWMgIAkoY29uc3QgRW1BbGlhc2dlbmVyaWMgICYpOwlwdHJf dHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90 CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAxNiAgOyB9CUVtQWxpYXNnZW5lcmljICA8 QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc2dlbmVyaWMgIDxBPiYpOwlFbUFsaWFzZ2VuZXJp YyAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNnZW5lcmljICA8QT4Jb3BlcmF0 b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc2dlbmVyaWMgIAkodm9pZCk7CXB0cl90 eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlkYXR1bSA7 ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RhdHVtICAodm9pZCkgeyByZXR1cm4gIDAg OyB9ICAJfTsgCWNsYXNzIEVtUHJveHlnZW5lcmljICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCog cHRyX3R5cGU7CUVtUHJveHlnZW5lcmljICAJKHZvaWQpOwlFbVByb3h5Z2VuZXJpYyAgCShjb25z dCBFbVByb3h5Z2VuZXJpYyAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJl dHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZv aWQpCQkJeyByZXR1cm4gICAgIDE2ICA7IH0JRW1Qcm94eWdlbmVyaWMgICYJCW9wZXJhdG9yPSAo Y29uc3QgRW1Qcm94eWdlbmVyaWMgICYpOwlFbUFsaWFzZ2VuZXJpYyAgPExBUz4Jb3BlcmF0b3Jb XSAoaW50KTsJY29uc3QgRW1BbGlhc2dlbmVyaWMgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29u c3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDE2ICBdOwl9IGZMb2NhbERh dGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlkYXR1bSA7ICAJICAg ICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RhdHVtICAodm9pZCkgeyByZXR1cm4gIDAgOyB9ICAJ fTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc3BlblVwICAJewlwdWJsaWM6 CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNwZW5VcCAgCShw dHJfdHlwZSk7CUVtQWxpYXNwZW5VcCAgCShjb25zdCBFbUFsaWFzcGVuVXAgICYpOwlwdHJfdHlw ZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlH ZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA4ICA7IH0JRW1BbGlhc3BlblVwICA8QT4mCW9w ZXJhdG9yPSAoY29uc3QgRW1BbGlhc3BlblVwICA8QT4mKTsJRW1BbGlhc3BlblVwICA8QT4Jb3Bl cmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc3BlblVwICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBj b25zdDsJcHJpdmF0ZToJRW1BbGlhc3BlblVwICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1 YmxpYzoJICAgICBFbUFsaWFzUG9pbnRUeXBlIDxBPgkgCQkJCQlzdGFydCA7IAkgRW1BbGlhc1Bv aW50VHlwZSA8QT4JIAkJCQkJZW5kIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3Rh cnQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2VuZCAg KHZvaWQpIHsgcmV0dXJuICA0IDsgfSAgCX07IAljbGFzcyBFbVByb3h5cGVuVXAgIAl7CXB1Ymxp YzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eXBlblVwICAJKHZvaWQpOwlFbVByb3h5 cGVuVXAgIAkoY29uc3QgRW1Qcm94eXBlblVwICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQp IGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJ R2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgOCAgOyB9CUVtUHJveHlwZW5VcCAgJgkJb3Bl cmF0b3I9IChjb25zdCBFbVByb3h5cGVuVXAgICYpOwlFbUFsaWFzcGVuVXAgIDxMQVM+CW9wZXJh dG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNwZW5VcCAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBj b25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgOCAgXTsJfSBmTG9jYWxE YXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1BvaW50VHlwZSA8TEFTPgkgCQkJCQlzdGFydCA7IAkg RW1BbGlhc1BvaW50VHlwZSA8TEFTPgkgCQkJCQllbmQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9zdGFydCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfZW5kICAodm9pZCkgeyByZXR1cm4gIDQgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xh c3MgQT4JY2xhc3MgRW1BbGlhc2tleURvd24gIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBB OjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc2tleURvd24gIAkocHRyX3R5cGUpOwlFbUFsaWFz a2V5RG93biAgCShjb25zdCBFbUFsaWFza2V5RG93biAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2 b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQp CQkJeyByZXR1cm4gICAgIDYgIDsgfQlFbUFsaWFza2V5RG93biAgPEE+JglvcGVyYXRvcj0gKGNv bnN0IEVtQWxpYXNrZXlEb3duICA8QT4mKTsJRW1BbGlhc2tleURvd24gIDxBPglvcGVyYXRvcltd IChpbnQpOwljb25zdCBFbUFsaWFza2V5RG93biAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7 CXByaXZhdGU6CUVtQWxpYXNrZXlEb3duICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1Ymxp YzoJICAgICBFbUFsaWFzV0NoYXIgPEE+CSAJCQkJCQljaHIgOyAJIEVtQWxpYXNVSW50MTYgPEE+ CSAJCQkJCQlrZXlDb2RlIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJbW9kaWZpZXJzIDsg IAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY2hyICAodm9pZCkgeyByZXR1cm4gIDAgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9rZXlDb2RlICAodm9pZCkgeyByZXR1cm4gIDIgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9tb2RpZmllcnMgICh2b2lkKSB7IHJldHVybiAgNCA7 IH0gIAl9OyAJY2xhc3MgRW1Qcm94eWtleURvd24gIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBw dHJfdHlwZTsJRW1Qcm94eWtleURvd24gIAkodm9pZCk7CUVtUHJveHlrZXlEb3duICAJKGNvbnN0 IEVtUHJveHlrZXlEb3duICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0 dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9p ZCkJCQl7IHJldHVybiAgICAgNiAgOyB9CUVtUHJveHlrZXlEb3duICAmCQlvcGVyYXRvcj0gKGNv bnN0IEVtUHJveHlrZXlEb3duICAmKTsJRW1BbGlhc2tleURvd24gIDxMQVM+CW9wZXJhdG9yW10g KGludCk7CWNvbnN0IEVtQWxpYXNrZXlEb3duICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0 Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA2ICBdOwl9IGZMb2NhbERhdGE7 CXB1YmxpYzoJICAgICBFbUFsaWFzV0NoYXIgPExBUz4JIAkJCQkJCWNociA7IAkgRW1BbGlhc1VJ bnQxNiA8TEFTPgkgCQkJCQkJa2V5Q29kZSA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJ bW9kaWZpZXJzIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY2hyICAodm9pZCkgeyBy ZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9rZXlDb2RlICAodm9pZCkgeyBy ZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9tb2RpZmllcnMgICh2b2lkKSB7 IHJldHVybiAgNCA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFz d2luRW50ZXIgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlw ZTsJRW1BbGlhc3dpbkVudGVyICAJKHB0cl90eXBlKTsJRW1BbGlhc3dpbkVudGVyICAJKGNvbnN0 IEVtQWxpYXN3aW5FbnRlciAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJl dHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAg IDggIDsgfQlFbUFsaWFzd2luRW50ZXIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzd2lu RW50ZXIgIDxBPiYpOwlFbUFsaWFzd2luRW50ZXIgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25z dCBFbUFsaWFzd2luRW50ZXIgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglF bUFsaWFzd2luRW50ZXIgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVt QWxpYXNlbXVwdHIgPEE+CSAJCQkJCQllbnRlcldpbmRvdyA7IAkgRW1BbGlhc2VtdXB0ciA8QT4J IAkJCQkJCWV4aXRXaW5kb3cgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9lbnRlcldp bmRvdyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXhp dFdpbmRvdyAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAgCX07IAljbGFzcyBFbVByb3h5d2luRW50 ZXIgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eXdpbkVudGVyICAJ KHZvaWQpOwlFbVByb3h5d2luRW50ZXIgIAkoY29uc3QgRW1Qcm94eXdpbkVudGVyICAmKTsJcHRy X3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERh dGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgOCAgOyB9 CUVtUHJveHl3aW5FbnRlciAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5d2luRW50ZXIgICYp OwlFbUFsaWFzd2luRW50ZXIgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXN3 aW5FbnRlciAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJ Y2hhcgkJCV9ieXRlc1sgICAgOCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlh c2VtdXB0ciA8TEFTPgkgCQkJCQkJZW50ZXJXaW5kb3cgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4J IAkJCQkJCWV4aXRXaW5kb3cgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9lbnRlcldp bmRvdyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXhp dFdpbmRvdyAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNz IEE+CWNsYXNzIEVtQWxpYXN3aW5FeGl0ICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6 cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXN3aW5FeGl0ICAJKHB0cl90eXBlKTsJRW1BbGlhc3dp bkV4aXQgIAkoY29uc3QgRW1BbGlhc3dpbkV4aXQgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9p ZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJ CXsgcmV0dXJuICAgICA4ICA7IH0JRW1BbGlhc3dpbkV4aXQgIDxBPiYJb3BlcmF0b3I9IChjb25z dCBFbUFsaWFzd2luRXhpdCAgPEE+Jik7CUVtQWxpYXN3aW5FeGl0ICA8QT4Jb3BlcmF0b3JbXSAo aW50KTsJY29uc3QgRW1BbGlhc3dpbkV4aXQgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlw cml2YXRlOglFbUFsaWFzd2luRXhpdCAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6 CSAgICAgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWVudGVyV2luZG93IDsgCSBFbUFsaWFzZW11 cHRyIDxBPgkgCQkJCQkJZXhpdFdpbmRvdyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2VudGVyV2luZG93ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9leGl0V2luZG93ICAodm9pZCkgeyByZXR1cm4gIDQgOyB9ICAJfTsgCWNsYXNzIEVtUHJv eHl3aW5FeGl0ICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHl3aW5F eGl0ICAJKHZvaWQpOwlFbVByb3h5d2luRXhpdCAgCShjb25zdCBFbVByb3h5d2luRXhpdCAgJik7 CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9j YWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDgg IDsgfQlFbVByb3h5d2luRXhpdCAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5d2luRXhpdCAg Jik7CUVtQWxpYXN3aW5FeGl0ICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFz d2luRXhpdCAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJ Y2hhcgkJCV9ieXRlc1sgICAgOCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlh c2VtdXB0ciA8TEFTPgkgCQkJCQkJZW50ZXJXaW5kb3cgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4J IAkJCQkJCWV4aXRXaW5kb3cgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9lbnRlcldp bmRvdyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXhp dFdpbmRvdyAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNz IEE+CWNsYXNzIEVtQWxpYXN0c21Db25maXJtICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUg QTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXN0c21Db25maXJtICAJKHB0cl90eXBlKTsJRW1B bGlhc3RzbUNvbmZpcm0gIAkoY29uc3QgRW1BbGlhc3RzbUNvbmZpcm0gICYpOwlwdHJfdHlwZQkJ CUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRT aXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA2ICA7IH0JRW1BbGlhc3RzbUNvbmZpcm0gIDxBPiYJ b3BlcmF0b3I9IChjb25zdCBFbUFsaWFzdHNtQ29uZmlybSAgPEE+Jik7CUVtQWxpYXN0c21Db25m aXJtICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc3RzbUNvbmZpcm0gIDxBPglv cGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzdHNtQ29uZmlybSAgCSh2b2lk KTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJ CXlvbWlUZXh0IDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJZm9ybUlEIDsgIAkgICAgIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfeW9taVRleHQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2Zvcm1JRCAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAgCX07 IAljbGFzcyBFbVByb3h5dHNtQ29uZmlybSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90 eXBlOwlFbVByb3h5dHNtQ29uZmlybSAgCSh2b2lkKTsJRW1Qcm94eXRzbUNvbmZpcm0gIAkoY29u c3QgRW1Qcm94eXRzbUNvbmZpcm0gICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJ eyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXpl CSh2b2lkKQkJCXsgcmV0dXJuICAgICA2ICA7IH0JRW1Qcm94eXRzbUNvbmZpcm0gICYJCW9wZXJh dG9yPSAoY29uc3QgRW1Qcm94eXRzbUNvbmZpcm0gICYpOwlFbUFsaWFzdHNtQ29uZmlybSAgPExB Uz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc3RzbUNvbmZpcm0gIDxMQVM+CW9wZXJh dG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDYg IF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJ CXlvbWlUZXh0IDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlmb3JtSUQgOyAgCSAgICAg c3RhdGljIHNpemVfdAlvZmZzZXRvZl95b21pVGV4dCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZm9ybUlEICAodm9pZCkgeyByZXR1cm4gIDQgOyB9ICAJ fTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc3RzbUZlcEJ1dHRvbiAgCXsJ cHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzdHNt RmVwQnV0dG9uICAJKHB0cl90eXBlKTsJRW1BbGlhc3RzbUZlcEJ1dHRvbiAgCShjb25zdCBFbUFs aWFzdHNtRmVwQnV0dG9uICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0 dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAg MiAgOyB9CUVtQWxpYXN0c21GZXBCdXR0b24gIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFz dHNtRmVwQnV0dG9uICA8QT4mKTsJRW1BbGlhc3RzbUZlcEJ1dHRvbiAgPEE+CW9wZXJhdG9yW10g KGludCk7CWNvbnN0IEVtQWxpYXN0c21GZXBCdXR0b24gIDxBPglvcGVyYXRvcltdIChpbnQpIGNv bnN0Owlwcml2YXRlOglFbUFsaWFzdHNtRmVwQnV0dG9uICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQ dHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJYnV0dG9uSUQgOyAgCSAg ICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9idXR0b25JRCAgKHZvaWQpIHsgcmV0dXJuICAwIDsg fSAgCX07IAljbGFzcyBFbVByb3h5dHNtRmVwQnV0dG9uICAJewlwdWJsaWM6CXR5cGVkZWYgdm9p ZCogcHRyX3R5cGU7CUVtUHJveHl0c21GZXBCdXR0b24gIAkodm9pZCk7CUVtUHJveHl0c21GZXBC dXR0b24gIAkoY29uc3QgRW1Qcm94eXRzbUZlcEJ1dHRvbiAgJik7CXB0cl90eXBlCQkJR2V0UHRy CSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBz aXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIgIDsgfQlFbVByb3h5dHNtRmVw QnV0dG9uICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHl0c21GZXBCdXR0b24gICYpOwlFbUFs aWFzdHNtRmVwQnV0dG9uICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzdHNt RmVwQnV0dG9uICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3Qg ewljaGFyCQkJX2J5dGVzWyAgICAyICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFs aWFzVUludDE2IDxMQVM+CSAJCQkJCQlidXR0b25JRCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2J1dHRvbklEICAodm9pZCkgeyByZXR1cm4gIDAgOyB9ICAJfTsgICAJICB0ZW1wbGF0 ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc3RzbUZlcE1vZGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0 eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc3RzbUZlcE1vZGUgIAkocHRyX3R5 cGUpOwlFbUFsaWFzdHNtRmVwTW9kZSAgCShjb25zdCBFbUFsaWFzdHNtRmVwTW9kZSAgJik7CXB0 cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXpl X3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIgIDsgfQlFbUFsaWFzdHNtRmVwTW9k ZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXN0c21GZXBNb2RlICA8QT4mKTsJRW1BbGlh c3RzbUZlcE1vZGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzdHNtRmVwTW9k ZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXN0c21GZXBNb2Rl ICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxB PgkgCQkJCQkJbW9kZSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21vZGUgICh2b2lk KSB7IHJldHVybiAgMCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eXRzbUZlcE1vZGUgIAl7CXB1Ymxp YzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eXRzbUZlcE1vZGUgIAkodm9pZCk7CUVt UHJveHl0c21GZXBNb2RlICAJKGNvbnN0IEVtUHJveHl0c21GZXBNb2RlICAmKTsJcHRyX3R5cGUJ CQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0J c3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMiAgOyB9CUVtUHJv eHl0c21GZXBNb2RlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHl0c21GZXBNb2RlICAmKTsJ RW1BbGlhc3RzbUZlcE1vZGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXN0 c21GZXBNb2RlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3Qg ewljaGFyCQkJX2J5dGVzWyAgICAyICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFs aWFzVUludDE2IDxMQVM+CSAJCQkJCQltb2RlIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfbW9kZSAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNz IEE+CWNsYXNzIEVtQWxpYXNjdGxFbnRlciAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6 OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzY3RsRW50ZXIgIAkocHRyX3R5cGUpOwlFbUFsaWFz Y3RsRW50ZXIgIAkoY29uc3QgRW1BbGlhc2N0bEVudGVyICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJ KHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9p ZCkJCQl7IHJldHVybiAgICAgNiAgOyB9CUVtQWxpYXNjdGxFbnRlciAgPEE+JglvcGVyYXRvcj0g KGNvbnN0IEVtQWxpYXNjdGxFbnRlciAgPEE+Jik7CUVtQWxpYXNjdGxFbnRlciAgPEE+CW9wZXJh dG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNjdGxFbnRlciAgPEE+CW9wZXJhdG9yW10gKGludCkg Y29uc3Q7CXByaXZhdGU6CUVtQWxpYXNjdGxFbnRlciAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRy OwlwdWJsaWM6CSAgICAgRW1BbGlhc0ludDE2IDxBPgkgCQkJCQkJY29udHJvbElEIDsgCSBFbUFs aWFzZW11cHRyIDxBPgkgCQkJCQkJcENvbnRyb2wgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9jb250cm9sSUQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3BDb250cm9sICAodm9pZCkgeyByZXR1cm4gIDIgOyB9ICAJfTsgCWNsYXNzIEVtUHJv eHljdGxFbnRlciAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5Y3Rs RW50ZXIgIAkodm9pZCk7CUVtUHJveHljdGxFbnRlciAgCShjb25zdCBFbVByb3h5Y3RsRW50ZXIg ICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAm ZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAg ICA2ICA7IH0JRW1Qcm94eWN0bEVudGVyICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHljdGxF bnRlciAgJik7CUVtQWxpYXNjdGxFbnRlciAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3Qg RW1BbGlhc2N0bEVudGVyICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglz dHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA2ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAg ICBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCWNvbnRyb2xJRCA7IAkgRW1BbGlhc2VtdXB0ciA8 TEFTPgkgCQkJCQkJcENvbnRyb2wgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb250 cm9sSUQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BD b250cm9sICAodm9pZCkgeyByZXR1cm4gIDIgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3Mg QT4JY2xhc3MgRW1BbGlhc2N0bFNlbGVjdCAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6 OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzY3RsU2VsZWN0ICAJKHB0cl90eXBlKTsJRW1BbGlh c2N0bFNlbGVjdCAgCShjb25zdCBFbUFsaWFzY3RsU2VsZWN0ICAmKTsJcHRyX3R5cGUJCQlHZXRQ dHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQko dm9pZCkJCQl7IHJldHVybiAgICAgMTAgIDsgfQlFbUFsaWFzY3RsU2VsZWN0ICA8QT4mCW9wZXJh dG9yPSAoY29uc3QgRW1BbGlhc2N0bFNlbGVjdCAgPEE+Jik7CUVtQWxpYXNjdGxTZWxlY3QgIDxB PglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzY3RsU2VsZWN0ICA8QT4Jb3BlcmF0b3Jb XSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc2N0bFNlbGVjdCAgCSh2b2lkKTsJcHRyX3R5 cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc0ludDE2IDxBPgkgCQkJCQkJY29udHJvbElE IDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJcENvbnRyb2wgOyAJIEVtQWxpYXNCb29sZWFu IDxBPgkgCQkJCQlvbiA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJcmVzZXJ2ZWQxIDsgCSBF bUFsaWFzVUludDE2IDxBPgkgCQkJCQkJdmFsdWUgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9jb250cm9sSUQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3BDb250cm9sICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9vbiAgKHZvaWQpIHsgcmV0dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfcmVzZXJ2ZWQxICAodm9pZCkgeyByZXR1cm4gIDcgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl92YWx1ZSAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAgCX07IAljbGFzcyBFbVByb3h5Y3Rs U2VsZWN0ICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHljdGxTZWxl Y3QgIAkodm9pZCk7CUVtUHJveHljdGxTZWxlY3QgIAkoY29uc3QgRW1Qcm94eWN0bFNlbGVjdCAg Jik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZm TG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAg IDEwICA7IH0JRW1Qcm94eWN0bFNlbGVjdCAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5Y3Rs U2VsZWN0ICAmKTsJRW1BbGlhc2N0bFNlbGVjdCAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29u c3QgRW1BbGlhc2N0bFNlbGVjdCAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0 ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMTAgIF07CX0gZkxvY2FsRGF0YTsJcHVibGlj OgkgICAgIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJY29udHJvbElEIDsgCSBFbUFsaWFzZW11 cHRyIDxMQVM+CSAJCQkJCQlwQ29udHJvbCA7IAkgRW1BbGlhc0Jvb2xlYW4gPExBUz4JIAkJCQkJ b24gOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJcmVzZXJ2ZWQxIDsgCSBFbUFsaWFzVUlu dDE2IDxMQVM+CSAJCQkJCQl2YWx1ZSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Nv bnRyb2xJRCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf cENvbnRyb2wgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X29uICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZXNl cnZlZDEgICh2b2lkKSB7IHJldHVybiAgNyA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Zh bHVlICAodm9pZCkgeyByZXR1cm4gIDggOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4J Y2xhc3MgRW1BbGlhc2N0bFJlcGVhdCAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0 cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzY3RsUmVwZWF0ICAJKHB0cl90eXBlKTsJRW1BbGlhc2N0 bFJlcGVhdCAgCShjb25zdCBFbUFsaWFzY3RsUmVwZWF0ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJ KHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9p ZCkJCQl7IHJldHVybiAgICAgMTIgIDsgfQlFbUFsaWFzY3RsUmVwZWF0ICA8QT4mCW9wZXJhdG9y PSAoY29uc3QgRW1BbGlhc2N0bFJlcGVhdCAgPEE+Jik7CUVtQWxpYXNjdGxSZXBlYXQgIDxBPglv cGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzY3RsUmVwZWF0ICA8QT4Jb3BlcmF0b3JbXSAo aW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc2N0bFJlcGVhdCAgCSh2b2lkKTsJcHRyX3R5cGUJ CQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc0ludDE2IDxBPgkgCQkJCQkJY29udHJvbElEIDsg CSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJcENvbnRyb2wgOyAJIEVtQWxpYXNVSW50MzIgPEE+ CSAJCQkJCQl0aW1lIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJdmFsdWUgOyAgCSAgICAg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb250cm9sSUQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BDb250cm9sICAodm9pZCkgeyByZXR1cm4gIDIgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90aW1lICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl92YWx1ZSAgKHZvaWQpIHsgcmV0dXJuICAxMCA7IH0gIAl9 OyAJY2xhc3MgRW1Qcm94eWN0bFJlcGVhdCAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90 eXBlOwlFbVByb3h5Y3RsUmVwZWF0ICAJKHZvaWQpOwlFbVByb3h5Y3RsUmVwZWF0ICAJKGNvbnN0 IEVtUHJveHljdGxSZXBlYXQgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyBy ZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2 b2lkKQkJCXsgcmV0dXJuICAgICAxMiAgOyB9CUVtUHJveHljdGxSZXBlYXQgICYJCW9wZXJhdG9y PSAoY29uc3QgRW1Qcm94eWN0bFJlcGVhdCAgJik7CUVtQWxpYXNjdGxSZXBlYXQgIDxMQVM+CW9w ZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNjdGxSZXBlYXQgIDxMQVM+CW9wZXJhdG9yW10g KGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDEyICBdOwl9 IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCWNvbnRy b2xJRCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJcENvbnRyb2wgOyAJIEVtQWxpYXNV SW50MzIgPExBUz4JIAkJCQkJCXRpbWUgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXZh bHVlIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29udHJvbElEICAodm9pZCkgeyBy ZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wQ29udHJvbCAgKHZvaWQpIHsg cmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdGltZSAgKHZvaWQpIHsgcmV0 dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdmFsdWUgICh2b2lkKSB7IHJldHVy biAgMTAgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc2N0bEV4 aXQgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1B bGlhc2N0bEV4aXQgIAkocHRyX3R5cGUpOwlFbUFsaWFzY3RsRXhpdCAgCShjb25zdCBFbUFsaWFz Y3RsRXhpdCAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRy OyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDYgIDsgfQlF bUFsaWFzY3RsRXhpdCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNjdGxFeGl0ICA8QT4m KTsJRW1BbGlhc2N0bEV4aXQgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzY3Rs RXhpdCAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNjdGxFeGl0 ICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzSW50MTYgPEE+ CSAJCQkJCQljb250cm9sSUQgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlwQ29udHJvbCA7 ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbnRyb2xJRCAgKHZvaWQpIHsgcmV0dXJu ICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcENvbnRyb2wgICh2b2lkKSB7IHJldHVy biAgMiA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eWN0bEV4aXQgIAl7CXB1YmxpYzoJdHlwZWRlZiB2 b2lkKiBwdHJfdHlwZTsJRW1Qcm94eWN0bEV4aXQgIAkodm9pZCk7CUVtUHJveHljdGxFeGl0ICAJ KGNvbnN0IEVtUHJveHljdGxFeGl0ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0 CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6 ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNiAgOyB9CUVtUHJveHljdGxFeGl0ICAmCQlvcGVyYXRv cj0gKGNvbnN0IEVtUHJveHljdGxFeGl0ICAmKTsJRW1BbGlhc2N0bEV4aXQgIDxMQVM+CW9wZXJh dG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNjdGxFeGl0ICA8TEFTPglvcGVyYXRvcltdIChpbnQp IGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA2ICBdOwl9IGZMb2Nh bERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCWNvbnRyb2xJRCA7 IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJcENvbnRyb2wgOyAgCSAgICAgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9jb250cm9sSUQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3BDb250cm9sICAodm9pZCkgeyByZXR1cm4gIDIgOyB9ICAJfTsgICAJ ICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc2ZsZEVudGVyICAJewlwdWJsaWM6CXR5 cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNmbGRFbnRlciAgCShw dHJfdHlwZSk7CUVtQWxpYXNmbGRFbnRlciAgCShjb25zdCBFbUFsaWFzZmxkRW50ZXIgICYpOwlw dHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6 ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA2ICA7IH0JRW1BbGlhc2ZsZEVudGVy ICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc2ZsZEVudGVyICA8QT4mKTsJRW1BbGlhc2Zs ZEVudGVyICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc2ZsZEVudGVyICA8QT4J b3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc2ZsZEVudGVyICAJKHZvaWQp OwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJ ZmllbGRJRCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXBGaWVsZCA7ICAJICAgICBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2ZpZWxkSUQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3BGaWVsZCAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAgCX07IAlj bGFzcyBFbVByb3h5ZmxkRW50ZXIgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJ RW1Qcm94eWZsZEVudGVyICAJKHZvaWQpOwlFbVByb3h5ZmxkRW50ZXIgIAkoY29uc3QgRW1Qcm94 eWZsZEVudGVyICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChw dHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7 IHJldHVybiAgICAgNiAgOyB9CUVtUHJveHlmbGRFbnRlciAgJgkJb3BlcmF0b3I9IChjb25zdCBF bVByb3h5ZmxkRW50ZXIgICYpOwlFbUFsaWFzZmxkRW50ZXIgIDxMQVM+CW9wZXJhdG9yW10gKGlu dCk7CWNvbnN0IEVtQWxpYXNmbGRFbnRlciAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJ cHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgNiAgXTsJfSBmTG9jYWxEYXRhOwlw dWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJZmllbGRJRCA7IAkgRW1BbGlh c2VtdXB0ciA8TEFTPgkgCQkJCQkJcEZpZWxkIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfZmllbGRJRCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfcEZpZWxkICAodm9pZCkgeyByZXR1cm4gIDIgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xh c3MgQT4JY2xhc3MgRW1BbGlhc2ZsZEhlaWdodENoYW5nZWQgIAl7CXB1YmxpYzoJdHlwZWRlZiB0 eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc2ZsZEhlaWdodENoYW5nZWQgIAko cHRyX3R5cGUpOwlFbUFsaWFzZmxkSGVpZ2h0Q2hhbmdlZCAgCShjb25zdCBFbUFsaWFzZmxkSGVp Z2h0Q2hhbmdlZCAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBm UHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDEwICA7 IH0JRW1BbGlhc2ZsZEhlaWdodENoYW5nZWQgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFz ZmxkSGVpZ2h0Q2hhbmdlZCAgPEE+Jik7CUVtQWxpYXNmbGRIZWlnaHRDaGFuZ2VkICA8QT4Jb3Bl cmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc2ZsZEhlaWdodENoYW5nZWQgIDxBPglvcGVyYXRv cltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzZmxkSGVpZ2h0Q2hhbmdlZCAgCSh2b2lk KTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJ CWZpZWxkSUQgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlwRmllbGQgOyAJIEVtQWxpYXNJ bnQxNiA8QT4JIAkJCQkJCW5ld0hlaWdodCA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWN1 cnJlbnRQb3MgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9maWVsZElEICAodm9pZCkg eyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wRmllbGQgICh2b2lkKSB7 IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25ld0hlaWdodCAgKHZvaWQp IHsgcmV0dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY3VycmVudFBvcyAgKHZv aWQpIHsgcmV0dXJuICA4IDsgfSAgCX07IAljbGFzcyBFbVByb3h5ZmxkSGVpZ2h0Q2hhbmdlZCAg CXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5ZmxkSGVpZ2h0Q2hhbmdl ZCAgCSh2b2lkKTsJRW1Qcm94eWZsZEhlaWdodENoYW5nZWQgIAkoY29uc3QgRW1Qcm94eWZsZEhl aWdodENoYW5nZWQgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4g KHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJ CXsgcmV0dXJuICAgICAxMCAgOyB9CUVtUHJveHlmbGRIZWlnaHRDaGFuZ2VkICAmCQlvcGVyYXRv cj0gKGNvbnN0IEVtUHJveHlmbGRIZWlnaHRDaGFuZ2VkICAmKTsJRW1BbGlhc2ZsZEhlaWdodENo YW5nZWQgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNmbGRIZWlnaHRDaGFu Z2VkICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFy CQkJX2J5dGVzWyAgICAxMCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJ bnQxNiA8TEFTPgkgCQkJCQkJZmllbGRJRCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJ cEZpZWxkIDsgCSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCW5ld0hlaWdodCA7IAkgRW1BbGlh c1VJbnQxNiA8TEFTPgkgCQkJCQkJY3VycmVudFBvcyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2ZpZWxkSUQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3BGaWVsZCAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfbmV3SGVpZ2h0ICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9jdXJyZW50UG9zICAodm9pZCkgeyByZXR1cm4gIDggOyB9ICAJfTsgICAJICB0ZW1w bGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc2ZsZENoYW5nZWQgIAl7CXB1YmxpYzoJdHlwZWRl ZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc2ZsZENoYW5nZWQgIAkocHRy X3R5cGUpOwlFbUFsaWFzZmxkQ2hhbmdlZCAgCShjb25zdCBFbUFsaWFzZmxkQ2hhbmdlZCAgJik7 CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBz aXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDYgIDsgfQlFbUFsaWFzZmxkQ2hh bmdlZCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNmbGRDaGFuZ2VkICA8QT4mKTsJRW1B bGlhc2ZsZENoYW5nZWQgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzZmxkQ2hh bmdlZCAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNmbGRDaGFu Z2VkICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2 IDxBPgkgCQkJCQkJZmllbGRJRCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXBGaWVsZCA7 ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZpZWxkSUQgICh2b2lkKSB7IHJldHVybiAg MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BGaWVsZCAgKHZvaWQpIHsgcmV0dXJuICAy IDsgfSAgCX07IAljbGFzcyBFbVByb3h5ZmxkQ2hhbmdlZCAgCXsJcHVibGljOgl0eXBlZGVmIHZv aWQqIHB0cl90eXBlOwlFbVByb3h5ZmxkQ2hhbmdlZCAgCSh2b2lkKTsJRW1Qcm94eWZsZENoYW5n ZWQgIAkoY29uc3QgRW1Qcm94eWZsZENoYW5nZWQgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9p ZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90 CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA2ICA7IH0JRW1Qcm94eWZsZENoYW5nZWQg ICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eWZsZENoYW5nZWQgICYpOwlFbUFsaWFzZmxkQ2hh bmdlZCAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc2ZsZENoYW5nZWQgIDxM QVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0 ZXNbICAgIDYgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPExB Uz4JIAkJCQkJCWZpZWxkSUQgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXBGaWVsZCA7 ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZpZWxkSUQgICh2b2lkKSB7IHJldHVybiAg MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BGaWVsZCAgKHZvaWQpIHsgcmV0dXJuICAy IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNmbGRFeGl0ICAJ ewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNm bGRFeGl0ICAJKHB0cl90eXBlKTsJRW1BbGlhc2ZsZEV4aXQgIAkoY29uc3QgRW1BbGlhc2ZsZEV4 aXQgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlz dGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA2ICA7IH0JRW1BbGlh c2ZsZEV4aXQgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzZmxkRXhpdCAgPEE+Jik7CUVt QWxpYXNmbGRFeGl0ICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc2ZsZEV4aXQg IDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzZmxkRXhpdCAgCSh2 b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8QT4JIAkJ CQkJCWZpZWxkSUQgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlwRmllbGQgOyAgCSAgICAg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9maWVsZElEICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9wRmllbGQgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gIAl9 OyAJY2xhc3MgRW1Qcm94eWZsZEV4aXQgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlw ZTsJRW1Qcm94eWZsZEV4aXQgIAkodm9pZCk7CUVtUHJveHlmbGRFeGl0ICAJKGNvbnN0IEVtUHJv eHlmbGRFeGl0ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChw dHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7 IHJldHVybiAgICAgNiAgOyB9CUVtUHJveHlmbGRFeGl0ICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVt UHJveHlmbGRFeGl0ICAmKTsJRW1BbGlhc2ZsZEV4aXQgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7 CWNvbnN0IEVtQWxpYXNmbGRFeGl0ICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2 YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA2ICBdOwl9IGZMb2NhbERhdGE7CXB1Ymxp YzoJICAgICBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlmaWVsZElEIDsgCSBFbUFsaWFzZW11 cHRyIDxMQVM+CSAJCQkJCQlwRmllbGQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9m aWVsZElEICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9w RmllbGQgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBB PgljbGFzcyBFbUFsaWFzbHN0RW50ZXIgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpw dHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc2xzdEVudGVyICAJKHB0cl90eXBlKTsJRW1BbGlhc2xz dEVudGVyICAJKGNvbnN0IEVtQWxpYXNsc3RFbnRlciAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2 b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQp CQkJeyByZXR1cm4gICAgIDggIDsgfQlFbUFsaWFzbHN0RW50ZXIgIDxBPiYJb3BlcmF0b3I9IChj b25zdCBFbUFsaWFzbHN0RW50ZXIgIDxBPiYpOwlFbUFsaWFzbHN0RW50ZXIgIDxBPglvcGVyYXRv cltdIChpbnQpOwljb25zdCBFbUFsaWFzbHN0RW50ZXIgIDxBPglvcGVyYXRvcltdIChpbnQpIGNv bnN0Owlwcml2YXRlOglFbUFsaWFzbHN0RW50ZXIgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJ cHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlsaXN0SUQgOyAJIEVtQWxpYXNl bXVwdHIgPEE+CSAJCQkJCQlwTGlzdCA7IAkgRW1BbGlhc0ludDE2IDxBPgkgCQkJCQkJc2VsZWN0 aW9uIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbGlzdElEICAodm9pZCkgeyByZXR1 cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wTGlzdCAgKHZvaWQpIHsgcmV0dXJu ICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc2VsZWN0aW9uICAodm9pZCkgeyByZXR1 cm4gIDYgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlsc3RFbnRlciAgCXsJcHVibGljOgl0eXBlZGVm IHZvaWQqIHB0cl90eXBlOwlFbVByb3h5bHN0RW50ZXIgIAkodm9pZCk7CUVtUHJveHlsc3RFbnRl ciAgCShjb25zdCBFbVByb3h5bHN0RW50ZXIgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkg Y29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlH ZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA4ICA7IH0JRW1Qcm94eWxzdEVudGVyICAmCQlv cGVyYXRvcj0gKGNvbnN0IEVtUHJveHlsc3RFbnRlciAgJik7CUVtQWxpYXNsc3RFbnRlciAgPExB Uz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc2xzdEVudGVyICA8TEFTPglvcGVyYXRv cltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA4ICBd Owl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQls aXN0SUQgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXBMaXN0IDsgCSBFbUFsaWFzSW50 MTYgPExBUz4JIAkJCQkJCXNlbGVjdGlvbiA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2xpc3RJRCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf cExpc3QgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Nl bGVjdGlvbiAgKHZvaWQpIHsgcmV0dXJuICA2IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNz IEE+CWNsYXNzIEVtQWxpYXNsc3RFeGl0ICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6 cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNsc3RFeGl0ICAJKHB0cl90eXBlKTsJRW1BbGlhc2xz dEV4aXQgIAkoY29uc3QgRW1BbGlhc2xzdEV4aXQgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9p ZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJ CXsgcmV0dXJuICAgICA2ICA7IH0JRW1BbGlhc2xzdEV4aXQgIDxBPiYJb3BlcmF0b3I9IChjb25z dCBFbUFsaWFzbHN0RXhpdCAgPEE+Jik7CUVtQWxpYXNsc3RFeGl0ICA8QT4Jb3BlcmF0b3JbXSAo aW50KTsJY29uc3QgRW1BbGlhc2xzdEV4aXQgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlw cml2YXRlOglFbUFsaWFzbHN0RXhpdCAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6 CSAgICAgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWxpc3RJRCA7IAkgRW1BbGlhc2VtdXB0ciA8 QT4JIAkJCQkJCXBMaXN0IDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbGlzdElEICAo dm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wTGlzdCAgKHZv aWQpIHsgcmV0dXJuICAyIDsgfSAgCX07IAljbGFzcyBFbVByb3h5bHN0RXhpdCAgCXsJcHVibGlj Ogl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5bHN0RXhpdCAgCSh2b2lkKTsJRW1Qcm94 eWxzdEV4aXQgIAkoY29uc3QgRW1Qcm94eWxzdEV4aXQgICYpOwlwdHJfdHlwZQkJCUdldFB0cgko dm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6 ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA2ICA7IH0JRW1Qcm94eWxzdEV4aXQg ICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eWxzdEV4aXQgICYpOwlFbUFsaWFzbHN0RXhpdCAg PExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc2xzdEV4aXQgIDxMQVM+CW9wZXJh dG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDYg IF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJ CWxpc3RJRCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJcExpc3QgOyAgCSAgICAgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9saXN0SUQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3BMaXN0ICAodm9pZCkgeyByZXR1cm4gIDIgOyB9ICAJfTsgICAJ ICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc2xzdFNlbGVjdCAgCXsJcHVibGljOgl0 eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzbHN0U2VsZWN0ICAJ KHB0cl90eXBlKTsJRW1BbGlhc2xzdFNlbGVjdCAgCShjb25zdCBFbUFsaWFzbHN0U2VsZWN0ICAm KTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGlj IHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgOCAgOyB9CUVtQWxpYXNsc3RT ZWxlY3QgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzbHN0U2VsZWN0ICA8QT4mKTsJRW1B bGlhc2xzdFNlbGVjdCAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNsc3RTZWxl Y3QgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzbHN0U2VsZWN0 ICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxB PgkgCQkJCQkJbGlzdElEIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJcExpc3QgOyAJIEVt QWxpYXNJbnQxNiA8QT4JIAkJCQkJCXNlbGVjdGlvbiA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2xpc3RJRCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfcExpc3QgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3NlbGVjdGlvbiAgKHZvaWQpIHsgcmV0dXJuICA2IDsgfSAgCX07IAljbGFzcyBFbVByb3h5 bHN0U2VsZWN0ICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlsc3RT ZWxlY3QgIAkodm9pZCk7CUVtUHJveHlsc3RTZWxlY3QgIAkoY29uc3QgRW1Qcm94eWxzdFNlbGVj dCAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUp ICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4g ICAgIDggIDsgfQlFbVByb3h5bHN0U2VsZWN0ICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHls c3RTZWxlY3QgICYpOwlFbUFsaWFzbHN0U2VsZWN0ICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwlj b25zdCBFbUFsaWFzbHN0U2VsZWN0ICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2 YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA4ICBdOwl9IGZMb2NhbERhdGE7CXB1Ymxp YzoJICAgICBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlsaXN0SUQgOyAJIEVtQWxpYXNlbXVw dHIgPExBUz4JIAkJCQkJCXBMaXN0IDsgCSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCXNlbGVj dGlvbiA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xpc3RJRCAgKHZvaWQpIHsgcmV0 dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcExpc3QgICh2b2lkKSB7IHJldHVy biAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NlbGVjdGlvbiAgKHZvaWQpIHsgcmV0 dXJuICA2IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXN0YmxF bnRlciAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlF bUFsaWFzdGJsRW50ZXIgIAkocHRyX3R5cGUpOwlFbUFsaWFzdGJsRW50ZXIgIAkoY29uc3QgRW1B bGlhc3RibEVudGVyICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJu IGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTAg IDsgfQlFbUFsaWFzdGJsRW50ZXIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzdGJsRW50 ZXIgIDxBPiYpOwlFbUFsaWFzdGJsRW50ZXIgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBF bUFsaWFzdGJsRW50ZXIgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFs aWFzdGJsRW50ZXIgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxp YXNVSW50MTYgPEE+CSAJCQkJCQl0YWJsZUlEIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJ cFRhYmxlIDsgCSBFbUFsaWFzSW50MTYgPEE+CSAJCQkJCQlyb3cgOyAJIEVtQWxpYXNJbnQxNiA8 QT4JIAkJCQkJCWNvbHVtbiA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RhYmxlSUQg ICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BUYWJsZSAg KHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfcm93ICAodm9p ZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb2x1bW4gICh2b2lk KSB7IHJldHVybiAgOCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eXRibEVudGVyICAJewlwdWJsaWM6 CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHl0YmxFbnRlciAgCSh2b2lkKTsJRW1Qcm94 eXRibEVudGVyICAJKGNvbnN0IEVtUHJveHl0YmxFbnRlciAgJik7CXB0cl90eXBlCQkJR2V0UHRy CSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBz aXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDEwICA7IH0JRW1Qcm94eXRibEVu dGVyICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHl0YmxFbnRlciAgJik7CUVtQWxpYXN0YmxF bnRlciAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc3RibEVudGVyICA8TEFT PglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVz WyAgICAxMCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8TEFT PgkgCQkJCQkJdGFibGVJRCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJcFRhYmxlIDsg CSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCXJvdyA7IAkgRW1BbGlhc0ludDE2IDxMQVM+CSAJ CQkJCQljb2x1bW4gOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90YWJsZUlEICAodm9p ZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wVGFibGUgICh2b2lk KSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3JvdyAgKHZvaWQpIHsg cmV0dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29sdW1uICAodm9pZCkgeyBy ZXR1cm4gIDggOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc3Ri bEV4aXQgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJ RW1BbGlhc3RibEV4aXQgIAkocHRyX3R5cGUpOwlFbUFsaWFzdGJsRXhpdCAgCShjb25zdCBFbUFs aWFzdGJsRXhpdCAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBm UHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDEwICA7 IH0JRW1BbGlhc3RibEV4aXQgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzdGJsRXhpdCAg PEE+Jik7CUVtQWxpYXN0YmxFeGl0ICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlh c3RibEV4aXQgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzdGJs RXhpdCAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQx NiA8QT4JIAkJCQkJCXRhYmxlSUQgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlwVGFibGUg OyAJIEVtQWxpYXNJbnQxNiA8QT4JIAkJCQkJCXJvdyA7IAkgRW1BbGlhc0ludDE2IDxBPgkgCQkJ CQkJY29sdW1uIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdGFibGVJRCAgKHZvaWQp IHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcFRhYmxlICAodm9pZCkg eyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yb3cgICh2b2lkKSB7IHJl dHVybiAgNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbHVtbiAgKHZvaWQpIHsgcmV0 dXJuICA4IDsgfSAgCX07IAljbGFzcyBFbVByb3h5dGJsRXhpdCAgCXsJcHVibGljOgl0eXBlZGVm IHZvaWQqIHB0cl90eXBlOwlFbVByb3h5dGJsRXhpdCAgCSh2b2lkKTsJRW1Qcm94eXRibEV4aXQg IAkoY29uc3QgRW1Qcm94eXRibEV4aXQgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29u c3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRT aXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAxMCAgOyB9CUVtUHJveHl0YmxFeGl0ICAmCQlvcGVy YXRvcj0gKGNvbnN0IEVtUHJveHl0YmxFeGl0ICAmKTsJRW1BbGlhc3RibEV4aXQgIDxMQVM+CW9w ZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXN0YmxFeGl0ICA8TEFTPglvcGVyYXRvcltdIChp bnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAxMCAgXTsJfSBm TG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJdGFibGVJ RCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJcFRhYmxlIDsgCSBFbUFsaWFzSW50MTYg PExBUz4JIAkJCQkJCXJvdyA7IAkgRW1BbGlhc0ludDE2IDxMQVM+CSAJCQkJCQljb2x1bW4gOyAg CSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90YWJsZUlEICAodm9pZCkgeyByZXR1cm4gIDAg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wVGFibGUgICh2b2lkKSB7IHJldHVybiAgMiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3JvdyAgKHZvaWQpIHsgcmV0dXJuICA2IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29sdW1uICAodm9pZCkgeyByZXR1cm4gIDggOyB9ICAJ fTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc3RibFNlbGVjdCAgCXsJcHVi bGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzdGJsU2Vs ZWN0ICAJKHB0cl90eXBlKTsJRW1BbGlhc3RibFNlbGVjdCAgCShjb25zdCBFbUFsaWFzdGJsU2Vs ZWN0ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0J c3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTAgIDsgfQlFbUFs aWFzdGJsU2VsZWN0ICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc3RibFNlbGVjdCAgPEE+ Jik7CUVtQWxpYXN0YmxTZWxlY3QgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFz dGJsU2VsZWN0ICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc3Ri bFNlbGVjdCAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJ bnQxNiA8QT4JIAkJCQkJCXRhYmxlSUQgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlwVGFi bGUgOyAJIEVtQWxpYXNJbnQxNiA8QT4JIAkJCQkJCXJvdyA7IAkgRW1BbGlhc0ludDE2IDxBPgkg CQkJCQkJY29sdW1uIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdGFibGVJRCAgKHZv aWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcFRhYmxlICAodm9p ZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yb3cgICh2b2lkKSB7 IHJldHVybiAgNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbHVtbiAgKHZvaWQpIHsg cmV0dXJuICA4IDsgfSAgCX07IAljbGFzcyBFbVByb3h5dGJsU2VsZWN0ICAJewlwdWJsaWM6CXR5 cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHl0YmxTZWxlY3QgIAkodm9pZCk7CUVtUHJveHl0 YmxTZWxlY3QgIAkoY29uc3QgRW1Qcm94eXRibFNlbGVjdCAgJik7CXB0cl90eXBlCQkJR2V0UHRy CSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBz aXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDEwICA7IH0JRW1Qcm94eXRibFNl bGVjdCAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5dGJsU2VsZWN0ICAmKTsJRW1BbGlhc3Ri bFNlbGVjdCAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc3RibFNlbGVjdCAg PExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9i eXRlc1sgICAgMTAgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYg PExBUz4JIAkJCQkJCXRhYmxlSUQgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXBUYWJs ZSA7IAkgRW1BbGlhc0ludDE2IDxMQVM+CSAJCQkJCQlyb3cgOyAJIEVtQWxpYXNJbnQxNiA8TEFT PgkgCQkJCQkJY29sdW1uIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdGFibGVJRCAg KHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcFRhYmxlICAo dm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yb3cgICh2b2lk KSB7IHJldHVybiAgNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NvbHVtbiAgKHZvaWQp IHsgcmV0dXJuICA4IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxp YXNmcm1Mb2FkICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5 cGU7CUVtQWxpYXNmcm1Mb2FkICAJKHB0cl90eXBlKTsJRW1BbGlhc2ZybUxvYWQgIAkoY29uc3Qg RW1BbGlhc2ZybUxvYWQgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1 cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAy ICA7IH0JRW1BbGlhc2ZybUxvYWQgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzZnJtTG9h ZCAgPEE+Jik7CUVtQWxpYXNmcm1Mb2FkICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1B bGlhc2ZybUxvYWQgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFz ZnJtTG9hZCAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJ bnQxNiA8QT4JIAkJCQkJCWZvcm1JRCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Zv cm1JRCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAgCX07IAljbGFzcyBFbVByb3h5ZnJtTG9hZCAg CXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5ZnJtTG9hZCAgCSh2b2lk KTsJRW1Qcm94eWZybUxvYWQgIAkoY29uc3QgRW1Qcm94eWZybUxvYWQgICYpOwlwdHJfdHlwZQkJ CUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlz dGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyICA7IH0JRW1Qcm94 eWZybUxvYWQgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eWZybUxvYWQgICYpOwlFbUFsaWFz ZnJtTG9hZCAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc2ZybUxvYWQgIDxM QVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0 ZXNbICAgIDIgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPExB Uz4JIAkJCQkJCWZvcm1JRCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Zvcm1JRCAg KHZvaWQpIHsgcmV0dXJuICAwIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNz IEVtQWxpYXNmcm1PcGVuICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUg cHRyX3R5cGU7CUVtQWxpYXNmcm1PcGVuICAJKHB0cl90eXBlKTsJRW1BbGlhc2ZybU9wZW4gIAko Y29uc3QgRW1BbGlhc2ZybU9wZW4gICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJ eyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJu ICAgICAyICA7IH0JRW1BbGlhc2ZybU9wZW4gIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFz ZnJtT3BlbiAgPEE+Jik7CUVtQWxpYXNmcm1PcGVuICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29u c3QgRW1BbGlhc2ZybU9wZW4gIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglF bUFsaWFzZnJtT3BlbiAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1B bGlhc1VJbnQxNiA8QT4JIAkJCQkJCWZvcm1JRCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2Zvcm1JRCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAgCX07IAljbGFzcyBFbVByb3h5ZnJt T3BlbiAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5ZnJtT3BlbiAg CSh2b2lkKTsJRW1Qcm94eWZybU9wZW4gIAkoY29uc3QgRW1Qcm94eWZybU9wZW4gICYpOwlwdHJf dHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0 YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyICA7IH0J RW1Qcm94eWZybU9wZW4gICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eWZybU9wZW4gICYpOwlF bUFsaWFzZnJtT3BlbiAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc2ZybU9w ZW4gIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJ CQlfYnl0ZXNbICAgIDIgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50 MTYgPExBUz4JIAkJCQkJCWZvcm1JRCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Zv cm1JRCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+ CWNsYXNzIEVtQWxpYXNmcm1Hb3RvICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRy X3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNmcm1Hb3RvICAJKHB0cl90eXBlKTsJRW1BbGlhc2ZybUdv dG8gIAkoY29uc3QgRW1BbGlhc2ZybUdvdG8gICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkg Y29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsg cmV0dXJuICAgICAxNCAgOyB9CUVtQWxpYXNmcm1Hb3RvICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg RW1BbGlhc2ZybUdvdG8gIDxBPiYpOwlFbUFsaWFzZnJtR290byAgPEE+CW9wZXJhdG9yW10gKGlu dCk7CWNvbnN0IEVtQWxpYXNmcm1Hb3RvICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJp dmF0ZToJRW1BbGlhc2ZybUdvdG8gIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkg ICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlmb3JtSUQgOyAJIEVtQWxpYXNVSW50MTYgPEE+ CSAJCQkJCQlyZWNvcmROdW0gOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQltYXRjaFBvcyA7 IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCW1hdGNoTGVuIDsgCSBFbUFsaWFzVUludDE2IDxB PgkgCQkJCQkJbWF0Y2hGaWVsZE51bSA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCW1hdGNo Q3VzdG9tIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZm9ybUlEICAodm9pZCkgeyBy ZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZWNvcmROdW0gICh2b2lkKSB7 IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21hdGNoUG9zICAodm9pZCkg eyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9tYXRjaExlbiAgKHZvaWQp IHsgcmV0dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbWF0Y2hGaWVsZE51bSAg KHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbWF0Y2hDdXN0 b20gICh2b2lkKSB7IHJldHVybiAgMTAgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlmcm1Hb3RvICAJ ewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlmcm1Hb3RvICAJKHZvaWQp OwlFbVByb3h5ZnJtR290byAgCShjb25zdCBFbVByb3h5ZnJtR290byAgJik7CXB0cl90eXBlCQkJ R2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0 YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDE0ICA7IH0JRW1Qcm94 eWZybUdvdG8gICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eWZybUdvdG8gICYpOwlFbUFsaWFz ZnJtR290byAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc2ZybUdvdG8gIDxM QVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0 ZXNbICAgIDE0ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxM QVM+CSAJCQkJCQlmb3JtSUQgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXJlY29yZE51 bSA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJbWF0Y2hQb3MgOyAJIEVtQWxpYXNVSW50 MTYgPExBUz4JIAkJCQkJCW1hdGNoTGVuIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlt YXRjaEZpZWxkTnVtIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQltYXRjaEN1c3RvbSA7 ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Zvcm1JRCAgKHZvaWQpIHsgcmV0dXJuICAw IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVjb3JkTnVtICAodm9pZCkgeyByZXR1cm4g IDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9tYXRjaFBvcyAgKHZvaWQpIHsgcmV0dXJu ICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbWF0Y2hMZW4gICh2b2lkKSB7IHJldHVy biAgNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21hdGNoRmllbGROdW0gICh2b2lkKSB7 IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21hdGNoQ3VzdG9tICAodm9p ZCkgeyByZXR1cm4gIDEwIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVt QWxpYXNmcm1DbG9zZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0 cl90eXBlOwlFbUFsaWFzZnJtQ2xvc2UgIAkocHRyX3R5cGUpOwlFbUFsaWFzZnJtQ2xvc2UgIAko Y29uc3QgRW1BbGlhc2ZybUNsb3NlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0 CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVy biAgICAgMiAgOyB9CUVtQWxpYXNmcm1DbG9zZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxp YXNmcm1DbG9zZSAgPEE+Jik7CUVtQWxpYXNmcm1DbG9zZSAgPEE+CW9wZXJhdG9yW10gKGludCk7 CWNvbnN0IEVtQWxpYXNmcm1DbG9zZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZh dGU6CUVtQWxpYXNmcm1DbG9zZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAg ICAgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWZvcm1JRCA7ICAJICAgICBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2Zvcm1JRCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAgCX07IAljbGFzcyBFbVBy b3h5ZnJtQ2xvc2UgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eWZy bUNsb3NlICAJKHZvaWQpOwlFbVByb3h5ZnJtQ2xvc2UgIAkoY29uc3QgRW1Qcm94eWZybUNsb3Nl ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkg JmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAg ICAgMiAgOyB9CUVtUHJveHlmcm1DbG9zZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5ZnJt Q2xvc2UgICYpOwlFbUFsaWFzZnJtQ2xvc2UgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0 IEVtQWxpYXNmcm1DbG9zZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJ c3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMiAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAg ICAgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJZm9ybUlEIDsgIAkgICAgIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfZm9ybUlEICAodm9pZCkgeyByZXR1cm4gIDAgOyB9ICAJfTsgICAJICB0ZW1w bGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc2ZybVVwZGF0ZSAgCXsJcHVibGljOgl0eXBlZGVm IHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzZnJtVXBkYXRlICAJKHB0cl90 eXBlKTsJRW1BbGlhc2ZybVVwZGF0ZSAgCShjb25zdCBFbUFsaWFzZnJtVXBkYXRlICAmKTsJcHRy X3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVf dAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNCAgOyB9CUVtQWxpYXNmcm1VcGRhdGUg IDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzZnJtVXBkYXRlICA8QT4mKTsJRW1BbGlhc2Zy bVVwZGF0ZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNmcm1VcGRhdGUgIDxB PglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzZnJtVXBkYXRlICAJKHZv aWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxBPgkgCQkJ CQkJZm9ybUlEIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJdXBkYXRlQ29kZSA7ICAJICAg ICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Zvcm1JRCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdXBkYXRlQ29kZSAgKHZvaWQpIHsgcmV0dXJuICAyIDsg fSAgCX07IAljbGFzcyBFbVByb3h5ZnJtVXBkYXRlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCog cHRyX3R5cGU7CUVtUHJveHlmcm1VcGRhdGUgIAkodm9pZCk7CUVtUHJveHlmcm1VcGRhdGUgIAko Y29uc3QgRW1Qcm94eWZybVVwZGF0ZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25z dAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNp emUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDQgIDsgfQlFbVByb3h5ZnJtVXBkYXRlICAmCQlvcGVy YXRvcj0gKGNvbnN0IEVtUHJveHlmcm1VcGRhdGUgICYpOwlFbUFsaWFzZnJtVXBkYXRlICA8TEFT PglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzZnJtVXBkYXRlICA8TEFTPglvcGVyYXRv cltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA0ICBd Owl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlm b3JtSUQgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXVwZGF0ZUNvZGUgOyAgCSAgICAg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9mb3JtSUQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX3VwZGF0ZUNvZGUgICh2b2lkKSB7IHJldHVybiAgMiA7IH0g IAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzZnJtVGl0bGVFbnRlciAg CXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFz ZnJtVGl0bGVFbnRlciAgCShwdHJfdHlwZSk7CUVtQWxpYXNmcm1UaXRsZUVudGVyICAJKGNvbnN0 IEVtQWxpYXNmcm1UaXRsZUVudGVyICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0 CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVy biAgICAgMiAgOyB9CUVtQWxpYXNmcm1UaXRsZUVudGVyICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg RW1BbGlhc2ZybVRpdGxlRW50ZXIgIDxBPiYpOwlFbUFsaWFzZnJtVGl0bGVFbnRlciAgPEE+CW9w ZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNmcm1UaXRsZUVudGVyICA8QT4Jb3BlcmF0b3Jb XSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc2ZybVRpdGxlRW50ZXIgIAkodm9pZCk7CXB0 cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlmb3Jt SUQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mb3JtSUQgICh2b2lkKSB7IHJldHVy biAgMCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eWZybVRpdGxlRW50ZXIgIAl7CXB1YmxpYzoJdHlw ZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eWZybVRpdGxlRW50ZXIgIAkodm9pZCk7CUVtUHJv eHlmcm1UaXRsZUVudGVyICAJKGNvbnN0IEVtUHJveHlmcm1UaXRsZUVudGVyICAmKTsJcHRyX3R5 cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7 IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMiAgOyB9CUVt UHJveHlmcm1UaXRsZUVudGVyICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlmcm1UaXRsZUVu dGVyICAmKTsJRW1BbGlhc2ZybVRpdGxlRW50ZXIgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNv bnN0IEVtQWxpYXNmcm1UaXRsZUVudGVyICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlw cml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAyICBdOwl9IGZMb2NhbERhdGE7CXB1 YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlmb3JtSUQgOyAgCSAgICAgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9mb3JtSUQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gIAl9OyAg IAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzZnJtVGl0bGVTZWxlY3QgIAl7CXB1 YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc2ZybVRp dGxlU2VsZWN0ICAJKHB0cl90eXBlKTsJRW1BbGlhc2ZybVRpdGxlU2VsZWN0ICAJKGNvbnN0IEVt QWxpYXNmcm1UaXRsZVNlbGVjdCAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7 IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4g ICAgIDIgIDsgfQlFbUFsaWFzZnJtVGl0bGVTZWxlY3QgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBF bUFsaWFzZnJtVGl0bGVTZWxlY3QgIDxBPiYpOwlFbUFsaWFzZnJtVGl0bGVTZWxlY3QgIDxBPglv cGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzZnJtVGl0bGVTZWxlY3QgIDxBPglvcGVyYXRv cltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzZnJtVGl0bGVTZWxlY3QgIAkodm9pZCk7 CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlm b3JtSUQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mb3JtSUQgICh2b2lkKSB7IHJl dHVybiAgMCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eWZybVRpdGxlU2VsZWN0ICAJewlwdWJsaWM6 CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlmcm1UaXRsZVNlbGVjdCAgCSh2b2lkKTsJ RW1Qcm94eWZybVRpdGxlU2VsZWN0ICAJKGNvbnN0IEVtUHJveHlmcm1UaXRsZVNlbGVjdCAgJik7 CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9j YWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIg IDsgfQlFbVByb3h5ZnJtVGl0bGVTZWxlY3QgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eWZy bVRpdGxlU2VsZWN0ICAmKTsJRW1BbGlhc2ZybVRpdGxlU2VsZWN0ICA8TEFTPglvcGVyYXRvcltd IChpbnQpOwljb25zdCBFbUFsaWFzZnJtVGl0bGVTZWxlY3QgIDxMQVM+CW9wZXJhdG9yW10gKGlu dCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDIgIF07CX0gZkxv Y2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWZvcm1JRCA7 ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Zvcm1JRCAgKHZvaWQpIHsgcmV0dXJuICAw IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNhdHRuSW5kaWNh dG9yRW50ZXIgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlw ZTsJRW1BbGlhc2F0dG5JbmRpY2F0b3JFbnRlciAgCShwdHJfdHlwZSk7CUVtQWxpYXNhdHRuSW5k aWNhdG9yRW50ZXIgIAkoY29uc3QgRW1BbGlhc2F0dG5JbmRpY2F0b3JFbnRlciAgJik7CXB0cl90 eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJ CUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIgIDsgfQlFbUFsaWFzYXR0bkluZGljYXRv ckVudGVyICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc2F0dG5JbmRpY2F0b3JFbnRlciAg PEE+Jik7CUVtQWxpYXNhdHRuSW5kaWNhdG9yRW50ZXIgIDxBPglvcGVyYXRvcltdIChpbnQpOwlj b25zdCBFbUFsaWFzYXR0bkluZGljYXRvckVudGVyICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25z dDsJcHJpdmF0ZToJRW1BbGlhc2F0dG5JbmRpY2F0b3JFbnRlciAgCSh2b2lkKTsJcHRyX3R5cGUJ CQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWZvcm1JRCA7ICAJ ICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Zvcm1JRCAgKHZvaWQpIHsgcmV0dXJuICAwIDsg fSAgCX07IAljbGFzcyBFbVByb3h5YXR0bkluZGljYXRvckVudGVyICAJewlwdWJsaWM6CXR5cGVk ZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlhdHRuSW5kaWNhdG9yRW50ZXIgIAkodm9pZCk7CUVt UHJveHlhdHRuSW5kaWNhdG9yRW50ZXIgIAkoY29uc3QgRW1Qcm94eWF0dG5JbmRpY2F0b3JFbnRl ciAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUp ICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4g ICAgIDIgIDsgfQlFbVByb3h5YXR0bkluZGljYXRvckVudGVyICAmCQlvcGVyYXRvcj0gKGNvbnN0 IEVtUHJveHlhdHRuSW5kaWNhdG9yRW50ZXIgICYpOwlFbUFsaWFzYXR0bkluZGljYXRvckVudGVy ICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzYXR0bkluZGljYXRvckVudGVy ICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJ X2J5dGVzWyAgICAyICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2 IDxMQVM+CSAJCQkJCQlmb3JtSUQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mb3Jt SUQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPglj bGFzcyBFbUFsaWFzYXR0bkluZGljYXRvclNlbGVjdCAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVu YW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzYXR0bkluZGljYXRvclNlbGVjdCAgCShw dHJfdHlwZSk7CUVtQWxpYXNhdHRuSW5kaWNhdG9yU2VsZWN0ICAJKGNvbnN0IEVtQWxpYXNhdHRu SW5kaWNhdG9yU2VsZWN0ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0 dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAg MiAgOyB9CUVtQWxpYXNhdHRuSW5kaWNhdG9yU2VsZWN0ICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg RW1BbGlhc2F0dG5JbmRpY2F0b3JTZWxlY3QgIDxBPiYpOwlFbUFsaWFzYXR0bkluZGljYXRvclNl bGVjdCAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNhdHRuSW5kaWNhdG9yU2Vs ZWN0ICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc2F0dG5JbmRp Y2F0b3JTZWxlY3QgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxp YXNVSW50MTYgPEE+CSAJCQkJCQlmb3JtSUQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9mb3JtSUQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eWF0dG5J bmRpY2F0b3JTZWxlY3QgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94 eWF0dG5JbmRpY2F0b3JTZWxlY3QgIAkodm9pZCk7CUVtUHJveHlhdHRuSW5kaWNhdG9yU2VsZWN0 ICAJKGNvbnN0IEVtUHJveHlhdHRuSW5kaWNhdG9yU2VsZWN0ICAmKTsJcHRyX3R5cGUJCQlHZXRQ dHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGlj IHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMiAgOyB9CUVtUHJveHlhdHRu SW5kaWNhdG9yU2VsZWN0ICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlhdHRuSW5kaWNhdG9y U2VsZWN0ICAmKTsJRW1BbGlhc2F0dG5JbmRpY2F0b3JTZWxlY3QgIDxMQVM+CW9wZXJhdG9yW10g KGludCk7CWNvbnN0IEVtQWxpYXNhdHRuSW5kaWNhdG9yU2VsZWN0ICA8TEFTPglvcGVyYXRvcltd IChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAyICBdOwl9 IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlmb3Jt SUQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mb3JtSUQgICh2b2lkKSB7IHJldHVy biAgMCA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzZGF5U2Vs ZWN0ICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVt QWxpYXNkYXlTZWxlY3QgIAkocHRyX3R5cGUpOwlFbUFsaWFzZGF5U2VsZWN0ICAJKGNvbnN0IEVt QWxpYXNkYXlTZWxlY3QgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1 cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA4 ICA7IH0JRW1BbGlhc2RheVNlbGVjdCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNkYXlT ZWxlY3QgIDxBPiYpOwlFbUFsaWFzZGF5U2VsZWN0ICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29u c3QgRW1BbGlhc2RheVNlbGVjdCAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6 CUVtQWxpYXNkYXlTZWxlY3QgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAg IEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlwU2VsZWN0b3IgOyAJIEVtQWxpYXNJbnQxNiA8QT4J IAkJCQkJCXNlbGVjdGlvbiA7IAkgRW1BbGlhc0Jvb2xlYW4gPEE+CSAJCQkJCXVzZVRoaXNEYXRl IDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlyZXNlcnZlZDEgOyAgCSAgICAgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9wU2VsZWN0b3IgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3NlbGVjdGlvbiAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfdXNlVGhpc0RhdGUgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jlc2VydmVkMSAgKHZvaWQpIHsgcmV0dXJuICA3IDsgfSAg CX07IAljbGFzcyBFbVByb3h5ZGF5U2VsZWN0ICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRy X3R5cGU7CUVtUHJveHlkYXlTZWxlY3QgIAkodm9pZCk7CUVtUHJveHlkYXlTZWxlY3QgIAkoY29u c3QgRW1Qcm94eWRheVNlbGVjdCAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7 IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJ KHZvaWQpCQkJeyByZXR1cm4gICAgIDggIDsgfQlFbVByb3h5ZGF5U2VsZWN0ICAmCQlvcGVyYXRv cj0gKGNvbnN0IEVtUHJveHlkYXlTZWxlY3QgICYpOwlFbUFsaWFzZGF5U2VsZWN0ICA8TEFTPglv cGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzZGF5U2VsZWN0ICA8TEFTPglvcGVyYXRvcltd IChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA4ICBdOwl9 IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlwU2Vs ZWN0b3IgOyAJIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJc2VsZWN0aW9uIDsgCSBFbUFsaWFz Qm9vbGVhbiA8TEFTPgkgCQkJCQl1c2VUaGlzRGF0ZSA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJ CQkJCQlyZXNlcnZlZDEgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wU2VsZWN0b3Ig ICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NlbGVjdGlv biAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdXNlVGhp c0RhdGUgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jl c2VydmVkMSAgKHZvaWQpIHsgcmV0dXJuICA3IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNz IEE+CWNsYXNzIEVtQWxpYXNtZW51ICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRy X3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNtZW51ICAJKHB0cl90eXBlKTsJRW1BbGlhc21lbnUgIAko Y29uc3QgRW1BbGlhc21lbnUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyBy ZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAg ICAyICA7IH0JRW1BbGlhc21lbnUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzbWVudSAg PEE+Jik7CUVtQWxpYXNtZW51ICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc21l bnUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzbWVudSAgCSh2 b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8QT4JIAkJ CQkJCWl0ZW1JRCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2l0ZW1JRCAgKHZvaWQp IHsgcmV0dXJuICAwIDsgfSAgCX07IAljbGFzcyBFbVByb3h5bWVudSAgCXsJcHVibGljOgl0eXBl ZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5bWVudSAgCSh2b2lkKTsJRW1Qcm94eW1lbnUgIAko Y29uc3QgRW1Qcm94eW1lbnUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyBy ZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2 b2lkKQkJCXsgcmV0dXJuICAgICAyICA7IH0JRW1Qcm94eW1lbnUgICYJCW9wZXJhdG9yPSAoY29u c3QgRW1Qcm94eW1lbnUgICYpOwlFbUFsaWFzbWVudSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJ Y29uc3QgRW1BbGlhc21lbnUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6 CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDIgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkg ICAgIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWl0ZW1JRCA7ICAJICAgICBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2l0ZW1JRCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAgCX07ICAgCSAgdGVt cGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNwb3BTZWxlY3QgIAl7CXB1YmxpYzoJdHlwZWRl ZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc3BvcFNlbGVjdCAgCShwdHJf dHlwZSk7CUVtQWxpYXNwb3BTZWxlY3QgIAkoY29uc3QgRW1BbGlhc3BvcFNlbGVjdCAgJik7CXB0 cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXpl X3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDE2ICA7IH0JRW1BbGlhc3BvcFNlbGVj dCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNwb3BTZWxlY3QgIDxBPiYpOwlFbUFsaWFz cG9wU2VsZWN0ICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc3BvcFNlbGVjdCAg PEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNwb3BTZWxlY3QgIAko dm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJ CQkJCQljb250cm9sSUQgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQljb250cm9sUCA7IAkg RW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWxpc3RJRCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJ CQkJCWxpc3RQIDsgCSBFbUFsaWFzSW50MTYgPEE+CSAJCQkJCQlzZWxlY3Rpb24gOyAJIEVtQWxp YXNJbnQxNiA8QT4JIAkJCQkJCXByaW9yU2VsZWN0aW9uIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfY29udHJvbElEICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9jb250cm9sUCAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfbGlzdElEICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9saXN0UCAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2Zfc2VsZWN0aW9uICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfcHJpb3JTZWxlY3Rpb24gICh2b2lkKSB7IHJldHVybiAgMTQgOyB9ICAJfTsg CWNsYXNzIEVtUHJveHlwb3BTZWxlY3QgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlw ZTsJRW1Qcm94eXBvcFNlbGVjdCAgCSh2b2lkKTsJRW1Qcm94eXBvcFNlbGVjdCAgCShjb25zdCBF bVByb3h5cG9wU2VsZWN0ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0 dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9p ZCkJCQl7IHJldHVybiAgICAgMTYgIDsgfQlFbVByb3h5cG9wU2VsZWN0ICAmCQlvcGVyYXRvcj0g KGNvbnN0IEVtUHJveHlwb3BTZWxlY3QgICYpOwlFbUFsaWFzcG9wU2VsZWN0ICA8TEFTPglvcGVy YXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzcG9wU2VsZWN0ICA8TEFTPglvcGVyYXRvcltdIChp bnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAxNiAgXTsJfSBm TG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJY29udHJv bElEIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQljb250cm9sUCA7IAkgRW1BbGlhc1VJ bnQxNiA8TEFTPgkgCQkJCQkJbGlzdElEIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQls aXN0UCA7IAkgRW1BbGlhc0ludDE2IDxMQVM+CSAJCQkJCQlzZWxlY3Rpb24gOyAJIEVtQWxpYXNJ bnQxNiA8TEFTPgkgCQkJCQkJcHJpb3JTZWxlY3Rpb24gOyAgCSAgICAgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9jb250cm9sSUQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2NvbnRyb2xQICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9saXN0SUQgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2xpc3RQICAodm9pZCkgeyByZXR1cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9zZWxlY3Rpb24gICh2b2lkKSB7IHJldHVybiAgMTIgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9wcmlvclNlbGVjdGlvbiAgKHZvaWQpIHsgcmV0dXJuICAxNCA7IH0gIAl9OyAg IAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzc2NsRW50ZXIgIAl7CXB1YmxpYzoJ dHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc3NjbEVudGVyICAJ KHB0cl90eXBlKTsJRW1BbGlhc3NjbEVudGVyICAJKGNvbnN0IEVtQWxpYXNzY2xFbnRlciAgJik7 CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBz aXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDYgIDsgfQlFbUFsaWFzc2NsRW50 ZXIgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzc2NsRW50ZXIgIDxBPiYpOwlFbUFsaWFz c2NsRW50ZXIgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzc2NsRW50ZXIgIDxB PglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzc2NsRW50ZXIgIAkodm9p ZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJ CQlzY3JvbGxCYXJJRCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXBTY3JvbGxCYXIgOyAg CSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zY3JvbGxCYXJJRCAgKHZvaWQpIHsgcmV0dXJu ICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcFNjcm9sbEJhciAgKHZvaWQpIHsgcmV0 dXJuICAyIDsgfSAgCX07IAljbGFzcyBFbVByb3h5c2NsRW50ZXIgIAl7CXB1YmxpYzoJdHlwZWRl ZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eXNjbEVudGVyICAJKHZvaWQpOwlFbVByb3h5c2NsRW50 ZXIgIAkoY29uc3QgRW1Qcm94eXNjbEVudGVyICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQp IGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJ R2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNiAgOyB9CUVtUHJveHlzY2xFbnRlciAgJgkJ b3BlcmF0b3I9IChjb25zdCBFbVByb3h5c2NsRW50ZXIgICYpOwlFbUFsaWFzc2NsRW50ZXIgIDxM QVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNzY2xFbnRlciAgPExBUz4Jb3BlcmF0 b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgNiAg XTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJ c2Nyb2xsQmFySUQgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXBTY3JvbGxCYXIgOyAg CSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zY3JvbGxCYXJJRCAgKHZvaWQpIHsgcmV0dXJu ICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcFNjcm9sbEJhciAgKHZvaWQpIHsgcmV0 dXJuICAyIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNzY2xF eGl0ICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVt QWxpYXNzY2xFeGl0ICAJKHB0cl90eXBlKTsJRW1BbGlhc3NjbEV4aXQgIAkoY29uc3QgRW1BbGlh c3NjbEV4aXQgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0 cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAxMCAgOyB9 CUVtQWxpYXNzY2xFeGl0ICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc3NjbEV4aXQgIDxB PiYpOwlFbUFsaWFzc2NsRXhpdCAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNz Y2xFeGl0ICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc3NjbEV4 aXQgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYg PEE+CSAJCQkJCQlzY3JvbGxCYXJJRCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXBTY3Jv bGxCYXIgOyAJIEVtQWxpYXNJbnQxNiA8QT4JIAkJCQkJCXZhbHVlIDsgCSBFbUFsaWFzSW50MTYg PEE+CSAJCQkJCQluZXdWYWx1ZSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Njcm9s bEJhcklEICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9w U2Nyb2xsQmFyICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl92YWx1ZSAgKHZvaWQpIHsgcmV0dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf bmV3VmFsdWUgICh2b2lkKSB7IHJldHVybiAgOCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eXNjbEV4 aXQgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eXNjbEV4aXQgIAko dm9pZCk7CUVtUHJveHlzY2xFeGl0ICAJKGNvbnN0IEVtUHJveHlzY2xFeGl0ICAmKTsJcHRyX3R5 cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7 IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTAgIDsgfQlF bVByb3h5c2NsRXhpdCAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5c2NsRXhpdCAgJik7CUVt QWxpYXNzY2xFeGl0ICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzc2NsRXhp dCAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJ CV9ieXRlc1sgICAgMTAgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50 MTYgPExBUz4JIAkJCQkJCXNjcm9sbEJhcklEIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJ CQlwU2Nyb2xsQmFyIDsgCSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCXZhbHVlIDsgCSBFbUFs aWFzSW50MTYgPExBUz4JIAkJCQkJCW5ld1ZhbHVlIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2Zfc2Nyb2xsQmFySUQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3BTY3JvbGxCYXIgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX3ZhbHVlICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9uZXdWYWx1ZSAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAgCX07ICAgCSAgdGVt cGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNzY2xSZXBlYXQgIAl7CXB1YmxpYzoJdHlwZWRl ZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc3NjbFJlcGVhdCAgCShwdHJf dHlwZSk7CUVtQWxpYXNzY2xSZXBlYXQgIAkoY29uc3QgRW1BbGlhc3NjbFJlcGVhdCAgJik7CXB0 cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXpl X3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDE0ICA7IH0JRW1BbGlhc3NjbFJlcGVh dCAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNzY2xSZXBlYXQgIDxBPiYpOwlFbUFsaWFz c2NsUmVwZWF0ICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc3NjbFJlcGVhdCAg PEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNzY2xSZXBlYXQgIAko dm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJ CQkJCQlzY3JvbGxCYXJJRCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXBTY3JvbGxCYXIg OyAJIEVtQWxpYXNJbnQxNiA8QT4JIAkJCQkJCXZhbHVlIDsgCSBFbUFsaWFzSW50MTYgPEE+CSAJ CQkJCQluZXdWYWx1ZSA7IAkgRW1BbGlhc0ludDMyIDxBPgkgCQkJCQkJdGltZSA7ICAJICAgICBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX3Njcm9sbEJhcklEICAodm9pZCkgeyByZXR1cm4gIDAgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wU2Nyb2xsQmFyICAodm9pZCkgeyByZXR1cm4gIDIg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl92YWx1ZSAgKHZvaWQpIHsgcmV0dXJuICA2IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmV3VmFsdWUgICh2b2lkKSB7IHJldHVybiAgOCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RpbWUgICh2b2lkKSB7IHJldHVybiAgMTAgOyB9 ICAJfTsgCWNsYXNzIEVtUHJveHlzY2xSZXBlYXQgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBw dHJfdHlwZTsJRW1Qcm94eXNjbFJlcGVhdCAgCSh2b2lkKTsJRW1Qcm94eXNjbFJlcGVhdCAgCShj b25zdCBFbVByb3h5c2NsUmVwZWF0ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0 CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6 ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTQgIDsgfQlFbVByb3h5c2NsUmVwZWF0ICAmCQlvcGVy YXRvcj0gKGNvbnN0IEVtUHJveHlzY2xSZXBlYXQgICYpOwlFbUFsaWFzc2NsUmVwZWF0ICA8TEFT PglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzc2NsUmVwZWF0ICA8TEFTPglvcGVyYXRv cltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAxNCAg XTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJ c2Nyb2xsQmFySUQgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXBTY3JvbGxCYXIgOyAJ IEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJdmFsdWUgOyAJIEVtQWxpYXNJbnQxNiA8TEFTPgkg CQkJCQkJbmV3VmFsdWUgOyAJIEVtQWxpYXNJbnQzMiA8TEFTPgkgCQkJCQkJdGltZSA7ICAJICAg ICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Njcm9sbEJhcklEICAodm9pZCkgeyByZXR1cm4gIDAg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wU2Nyb2xsQmFyICAodm9pZCkgeyByZXR1cm4g IDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl92YWx1ZSAgKHZvaWQpIHsgcmV0dXJuICA2 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmV3VmFsdWUgICh2b2lkKSB7IHJldHVybiAg OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RpbWUgICh2b2lkKSB7IHJldHVybiAgMTAg OyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc21lbnVDbWRCYXJP cGVuICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVt QWxpYXNtZW51Q21kQmFyT3BlbiAgCShwdHJfdHlwZSk7CUVtQWxpYXNtZW51Q21kQmFyT3BlbiAg CShjb25zdCBFbUFsaWFzbWVudUNtZEJhck9wZW4gICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9p ZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJ CXsgcmV0dXJuICAgICAyICA7IH0JRW1BbGlhc21lbnVDbWRCYXJPcGVuICA8QT4mCW9wZXJhdG9y PSAoY29uc3QgRW1BbGlhc21lbnVDbWRCYXJPcGVuICA8QT4mKTsJRW1BbGlhc21lbnVDbWRCYXJP cGVuICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc21lbnVDbWRCYXJPcGVuICA8 QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc21lbnVDbWRCYXJPcGVu ICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzQm9vbGVhbiA8 QT4JIAkJCQkJcHJldmVudEZpZWxkQnV0dG9ucyA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJ cmVzZXJ2ZWQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wcmV2ZW50RmllbGRCdXR0 b25zICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZXNl cnZlZCAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAgCX07IAljbGFzcyBFbVByb3h5bWVudUNtZEJh ck9wZW4gIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eW1lbnVDbWRC YXJPcGVuICAJKHZvaWQpOwlFbVByb3h5bWVudUNtZEJhck9wZW4gIAkoY29uc3QgRW1Qcm94eW1l bnVDbWRCYXJPcGVuICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJu IChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJ CQl7IHJldHVybiAgICAgMiAgOyB9CUVtUHJveHltZW51Q21kQmFyT3BlbiAgJgkJb3BlcmF0b3I9 IChjb25zdCBFbVByb3h5bWVudUNtZEJhck9wZW4gICYpOwlFbUFsaWFzbWVudUNtZEJhck9wZW4g IDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNtZW51Q21kQmFyT3BlbiAgPExB Uz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRl c1sgICAgMiAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc0Jvb2xlYW4gPExB Uz4JIAkJCQkJcHJldmVudEZpZWxkQnV0dG9ucyA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJ CQlyZXNlcnZlZCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3ByZXZlbnRGaWVsZEJ1 dHRvbnMgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jl c2VydmVkICAodm9pZCkgeyByZXR1cm4gIDEgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3Mg QT4JY2xhc3MgRW1BbGlhc21lbnVPcGVuICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6 cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNtZW51T3BlbiAgCShwdHJfdHlwZSk7CUVtQWxpYXNt ZW51T3BlbiAgCShjb25zdCBFbUFsaWFzbWVudU9wZW4gICYpOwlwdHJfdHlwZQkJCUdldFB0cgko dm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lk KQkJCXsgcmV0dXJuICAgICA0ICA7IH0JRW1BbGlhc21lbnVPcGVuICA8QT4mCW9wZXJhdG9yPSAo Y29uc3QgRW1BbGlhc21lbnVPcGVuICA8QT4mKTsJRW1BbGlhc21lbnVPcGVuICA8QT4Jb3BlcmF0 b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc21lbnVPcGVuICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBj b25zdDsJcHJpdmF0ZToJRW1BbGlhc21lbnVPcGVuICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7 CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJbWVudVJzY0lEIDsgCSBFbUFs aWFzSW50MTYgPEE+CSAJCQkJCQljYXVzZSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X21lbnVSc2NJRCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfY2F1c2UgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eW1lbnVP cGVuICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHltZW51T3BlbiAg CSh2b2lkKTsJRW1Qcm94eW1lbnVPcGVuICAJKGNvbnN0IEVtUHJveHltZW51T3BlbiAgJik7CXB0 cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxE YXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDQgIDsg fQlFbVByb3h5bWVudU9wZW4gICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eW1lbnVPcGVuICAm KTsJRW1BbGlhc21lbnVPcGVuICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFz bWVudU9wZW4gIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7 CWNoYXIJCQlfYnl0ZXNbICAgIDQgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxp YXNVSW50MTYgPExBUz4JIAkJCQkJCW1lbnVSc2NJRCA7IAkgRW1BbGlhc0ludDE2IDxMQVM+CSAJ CQkJCQljYXVzZSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21lbnVSc2NJRCAgKHZv aWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY2F1c2UgICh2b2lk KSB7IHJldHVybiAgMiA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFs aWFzZ2FkZ2V0RW50ZXIgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBw dHJfdHlwZTsJRW1BbGlhc2dhZGdldEVudGVyICAJKHB0cl90eXBlKTsJRW1BbGlhc2dhZGdldEVu dGVyICAJKGNvbnN0IEVtQWxpYXNnYWRnZXRFbnRlciAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2 b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQp CQkJeyByZXR1cm4gICAgIDYgIDsgfQlFbUFsaWFzZ2FkZ2V0RW50ZXIgIDxBPiYJb3BlcmF0b3I9 IChjb25zdCBFbUFsaWFzZ2FkZ2V0RW50ZXIgIDxBPiYpOwlFbUFsaWFzZ2FkZ2V0RW50ZXIgIDxB PglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzZ2FkZ2V0RW50ZXIgIDxBPglvcGVyYXRv cltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzZ2FkZ2V0RW50ZXIgIAkodm9pZCk7CXB0 cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlnYWRn ZXRJRCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWdhZGdldFAgOyAgCSAgICAgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9nYWRnZXRJRCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfZ2FkZ2V0UCAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAgCX07IAlj bGFzcyBFbVByb3h5Z2FkZ2V0RW50ZXIgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlw ZTsJRW1Qcm94eWdhZGdldEVudGVyICAJKHZvaWQpOwlFbVByb3h5Z2FkZ2V0RW50ZXIgIAkoY29u c3QgRW1Qcm94eWdhZGdldEVudGVyICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0 CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6 ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNiAgOyB9CUVtUHJveHlnYWRnZXRFbnRlciAgJgkJb3Bl cmF0b3I9IChjb25zdCBFbVByb3h5Z2FkZ2V0RW50ZXIgICYpOwlFbUFsaWFzZ2FkZ2V0RW50ZXIg IDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNnYWRnZXRFbnRlciAgPExBUz4J b3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sg ICAgNiAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8TEFTPgkg CQkJCQkJZ2FkZ2V0SUQgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWdhZGdldFAgOyAg CSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9nYWRnZXRJRCAgKHZvaWQpIHsgcmV0dXJuICAw IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ2FkZ2V0UCAgKHZvaWQpIHsgcmV0dXJuICAy IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNnYWRnZXRNaXNj ICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxp YXNnYWRnZXRNaXNjICAJKHB0cl90eXBlKTsJRW1BbGlhc2dhZGdldE1pc2MgIAkoY29uc3QgRW1B bGlhc2dhZGdldE1pc2MgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1 cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAx MiAgOyB9CUVtQWxpYXNnYWRnZXRNaXNjICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc2dh ZGdldE1pc2MgIDxBPiYpOwlFbUFsaWFzZ2FkZ2V0TWlzYyAgPEE+CW9wZXJhdG9yW10gKGludCk7 CWNvbnN0IEVtQWxpYXNnYWRnZXRNaXNjICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJp dmF0ZToJRW1BbGlhc2dhZGdldE1pc2MgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGlj OgkgICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlnYWRnZXRJRCA7IAkgRW1BbGlhc2VtdXB0 ciA8QT4JIAkJCQkJCWdhZGdldFAgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlzZWxlY3Rv ciA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWRhdGFQIDsgIAkgICAgIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfZ2FkZ2V0SUQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2dhZGdldFAgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX3NlbGVjdG9yICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9kYXRhUCAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAgCX07IAljbGFzcyBF bVByb3h5Z2FkZ2V0TWlzYyAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVBy b3h5Z2FkZ2V0TWlzYyAgCSh2b2lkKTsJRW1Qcm94eWdhZGdldE1pc2MgIAkoY29uc3QgRW1Qcm94 eWdhZGdldE1pc2MgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4g KHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJ CXsgcmV0dXJuICAgICAxMiAgOyB9CUVtUHJveHlnYWRnZXRNaXNjICAmCQlvcGVyYXRvcj0gKGNv bnN0IEVtUHJveHlnYWRnZXRNaXNjICAmKTsJRW1BbGlhc2dhZGdldE1pc2MgIDxMQVM+CW9wZXJh dG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNnYWRnZXRNaXNjICA8TEFTPglvcGVyYXRvcltdIChp bnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAxMiAgXTsJfSBm TG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJZ2FkZ2V0 SUQgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWdhZGdldFAgOyAJIEVtQWxpYXNVSW50 MTYgPExBUz4JIAkJCQkJCXNlbGVjdG9yIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlk YXRhUCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dhZGdldElEICAodm9pZCkgeyBy ZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9nYWRnZXRQICAodm9pZCkgeyBy ZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zZWxlY3RvciAgKHZvaWQpIHsg cmV0dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGF0YVAgICh2b2lkKSB7IHJl dHVybiAgOCA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzRXZl bnRUeXBlRGF0YSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90 eXBlOwlFbUFsaWFzRXZlbnRUeXBlRGF0YSAgCShwdHJfdHlwZSk7CUVtQWxpYXNFdmVudFR5cGVE YXRhICAJKGNvbnN0IEVtQWxpYXNFdmVudFR5cGVEYXRhICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJ KHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9p ZCkJCQl7IHJldHVybiAgICAgMTYgIDsgfQlFbUFsaWFzRXZlbnRUeXBlRGF0YSAgPEE+JglvcGVy YXRvcj0gKGNvbnN0IEVtQWxpYXNFdmVudFR5cGVEYXRhICA8QT4mKTsJRW1BbGlhc0V2ZW50VHlw ZURhdGEgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzRXZlbnRUeXBlRGF0YSAg PEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNFdmVudFR5cGVEYXRh ICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzZ2VuZXJpYyA8 QT4JIAkJCQkJZ2VuZXJpYyA7IAkgRW1BbGlhc3BlblVwIDxBPgkgCQkJCQkJcGVuVXAgOyAJIEVt QWxpYXNrZXlEb3duIDxBPgkgCQkJCQlrZXlEb3duIDsgCSBFbUFsaWFzd2luRW50ZXIgPEE+CSAJ CQkJCXdpbkVudGVyIDsgCSBFbUFsaWFzd2luRXhpdCA8QT4JIAkJCQkJd2luRXhpdCA7IAkgRW1B bGlhc3RzbUNvbmZpcm0gPEE+CSAJCQkJCXRzbUNvbmZpcm0gOyAJIEVtQWxpYXN0c21GZXBCdXR0 b24gPEE+CSAJCQkJdHNtRmVwQnV0dG9uIDsgCSBFbUFsaWFzdHNtRmVwTW9kZSA8QT4JIAkJCQkJ dHNtRmVwTW9kZSA7IAkgRW1BbGlhc2N0bEVudGVyIDxBPgkgCQkJCQljdGxFbnRlciA7IAkgRW1B bGlhc2N0bFNlbGVjdCA8QT4JIAkJCQkJY3RsU2VsZWN0IDsgCSBFbUFsaWFzY3RsUmVwZWF0IDxB PgkgCQkJCQljdGxSZXBlYXQgOyAJIEVtQWxpYXNjdGxFeGl0IDxBPgkgCQkJCQljdGxFeGl0IDsg CSBFbUFsaWFzZmxkRW50ZXIgPEE+CSAJCQkJCWZsZEVudGVyIDsgCSBFbUFsaWFzZmxkSGVpZ2h0 Q2hhbmdlZCA8QT4JIAkJCWZsZEhlaWdodENoYW5nZWQgOyAJIEVtQWxpYXNmbGRDaGFuZ2VkIDxB PgkgCQkJCQlmbGRDaGFuZ2VkIDsgCSBFbUFsaWFzZmxkRXhpdCA8QT4JIAkJCQkJZmxkRXhpdCA7 IAkgRW1BbGlhc2xzdEVudGVyIDxBPgkgCQkJCQlsc3RFbnRlciA7IAkgRW1BbGlhc2xzdEV4aXQg PEE+CSAJCQkJCWxzdEV4aXQgOyAJIEVtQWxpYXNsc3RTZWxlY3QgPEE+CSAJCQkJCWxzdFNlbGVj dCA7IAkgRW1BbGlhc3RibEVudGVyIDxBPgkgCQkJCQl0YmxFbnRlciA7IAkgRW1BbGlhc3RibEV4 aXQgPEE+CSAJCQkJCXRibEV4aXQgOyAJIEVtQWxpYXN0YmxTZWxlY3QgPEE+CSAJCQkJCXRibFNl bGVjdCA7IAkgRW1BbGlhc2ZybUxvYWQgPEE+CSAJCQkJCWZybUxvYWQgOyAJIEVtQWxpYXNmcm1P cGVuIDxBPgkgCQkJCQlmcm1PcGVuIDsgCSBFbUFsaWFzZnJtR290byA8QT4JIAkJCQkJZnJtR290 byA7IAkgRW1BbGlhc2ZybUNsb3NlIDxBPgkgCQkJCQlmcm1DbG9zZSA7IAkgRW1BbGlhc2ZybVVw ZGF0ZSA8QT4JIAkJCQkJZnJtVXBkYXRlIDsgCSBFbUFsaWFzZnJtVGl0bGVFbnRlciA8QT4JIAkJ CQlmcm1UaXRsZUVudGVyIDsgCSBFbUFsaWFzZnJtVGl0bGVTZWxlY3QgPEE+CSAJCQkJZnJtVGl0 bGVTZWxlY3QgOyAJIEVtQWxpYXNhdHRuSW5kaWNhdG9yRW50ZXIgPEE+CSAJCQlhdHRuSW5kaWNh dG9yRW50ZXIgOyAJIEVtQWxpYXNhdHRuSW5kaWNhdG9yU2VsZWN0IDxBPgkgCQlhdHRuSW5kaWNh dG9yU2VsZWN0IDsgCSBFbUFsaWFzZGF5U2VsZWN0IDxBPgkgCQkJCQlkYXlTZWxlY3QgOyAJIEVt QWxpYXNtZW51IDxBPgkgCQkJCQkJbWVudSA7IAkgRW1BbGlhc3BvcFNlbGVjdCA8QT4JIAkJCQkJ cG9wU2VsZWN0IDsgCSBFbUFsaWFzc2NsRW50ZXIgPEE+CSAJCQkJCXNjbEVudGVyIDsgCSBFbUFs aWFzc2NsRXhpdCA8QT4JIAkJCQkJc2NsRXhpdCA7IAkgRW1BbGlhc3NjbFJlcGVhdCA8QT4JIAkJ CQkJc2NsUmVwZWF0IDsgCSBFbUFsaWFzbWVudUNtZEJhck9wZW4gPEE+CSAJCQkJbWVudUNtZEJh ck9wZW4gOyAJIEVtQWxpYXNtZW51T3BlbiA8QT4JIAkJCQkJbWVudU9wZW4gOyAJIEVtQWxpYXNn YWRnZXRFbnRlciA8QT4JIAkJCQlnYWRnZXRFbnRlciA7IAkgRW1BbGlhc2dhZGdldE1pc2MgPEE+ CSAJCQkJCWdhZGdldE1pc2MgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9nZW5lcmlj ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wZW5VcCAg KHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfa2V5RG93biAg KHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfd2luRW50ZXIg ICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3dpbkV4aXQg ICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RzbUNvbmZp cm0gICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RzbUZl cEJ1dHRvbiAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf dHNtRmVwTW9kZSAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfY3RsRW50ZXIgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2N0bFNlbGVjdCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfY3RsUmVwZWF0ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9jdGxFeGl0ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9mbGRFbnRlciAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfZmxkSGVpZ2h0Q2hhbmdlZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfZmxkQ2hhbmdlZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmxkRXhpdCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbHN0RW50ZXIgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2xzdEV4aXQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2xzdFNlbGVjdCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdGJsRW50ZXIgICh2b2lkKSB7IHJldHVybiAgMCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RibEV4aXQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RibFNlbGVjdCAgKHZvaWQpIHsgcmV0dXJuICAwIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZnJtTG9hZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZnJtT3BlbiAgKHZvaWQpIHsgcmV0dXJuICAwIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZnJtR290byAgKHZvaWQpIHsgcmV0dXJuICAwIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZnJtQ2xvc2UgICh2b2lkKSB7IHJldHVybiAgMCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZybVVwZGF0ZSAgKHZvaWQpIHsgcmV0dXJuICAw IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZnJtVGl0bGVFbnRlciAgKHZvaWQpIHsgcmV0 dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZnJtVGl0bGVTZWxlY3QgICh2b2lk KSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2F0dG5JbmRpY2F0b3JF bnRlciAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYXR0 bkluZGljYXRvclNlbGVjdCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfZGF5U2VsZWN0ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9tZW51ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9wb3BTZWxlY3QgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3NjbEVudGVyICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9zY2xFeGl0ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9zY2xSZXBlYXQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX21lbnVDbWRCYXJPcGVuICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9tZW51T3BlbiAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZ2FkZ2V0RW50ZXIgICh2b2lkKSB7IHJldHVybiAgMCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2dhZGdldE1pc2MgICh2b2lkKSB7IHJldHVybiAgMCA7 IH0gIAl9OyAJY2xhc3MgRW1Qcm94eUV2ZW50VHlwZURhdGEgIAl7CXB1YmxpYzoJdHlwZWRlZiB2 b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUV2ZW50VHlwZURhdGEgIAkodm9pZCk7CUVtUHJveHlFdmVu dFR5cGVEYXRhICAJKGNvbnN0IEVtUHJveHlFdmVudFR5cGVEYXRhICAmKTsJcHRyX3R5cGUJCQlH ZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3Rh dGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTYgIDsgfQlFbVByb3h5 RXZlbnRUeXBlRGF0YSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5RXZlbnRUeXBlRGF0YSAg Jik7CUVtQWxpYXNFdmVudFR5cGVEYXRhICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBF bUFsaWFzRXZlbnRUeXBlRGF0YSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0 ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMTYgIF07CX0gZkxvY2FsRGF0YTsJcHVibGlj OgkgICAgIEVtQWxpYXNnZW5lcmljIDxMQVM+CSAJCQkJCWdlbmVyaWMgOyAJIEVtQWxpYXNwZW5V cCA8TEFTPgkgCQkJCQkJcGVuVXAgOyAJIEVtQWxpYXNrZXlEb3duIDxMQVM+CSAJCQkJCWtleURv d24gOyAJIEVtQWxpYXN3aW5FbnRlciA8TEFTPgkgCQkJCQl3aW5FbnRlciA7IAkgRW1BbGlhc3dp bkV4aXQgPExBUz4JIAkJCQkJd2luRXhpdCA7IAkgRW1BbGlhc3RzbUNvbmZpcm0gPExBUz4JIAkJ CQkJdHNtQ29uZmlybSA7IAkgRW1BbGlhc3RzbUZlcEJ1dHRvbiA8TEFTPgkgCQkJCXRzbUZlcEJ1 dHRvbiA7IAkgRW1BbGlhc3RzbUZlcE1vZGUgPExBUz4JIAkJCQkJdHNtRmVwTW9kZSA7IAkgRW1B bGlhc2N0bEVudGVyIDxMQVM+CSAJCQkJCWN0bEVudGVyIDsgCSBFbUFsaWFzY3RsU2VsZWN0IDxM QVM+CSAJCQkJCWN0bFNlbGVjdCA7IAkgRW1BbGlhc2N0bFJlcGVhdCA8TEFTPgkgCQkJCQljdGxS ZXBlYXQgOyAJIEVtQWxpYXNjdGxFeGl0IDxMQVM+CSAJCQkJCWN0bEV4aXQgOyAJIEVtQWxpYXNm bGRFbnRlciA8TEFTPgkgCQkJCQlmbGRFbnRlciA7IAkgRW1BbGlhc2ZsZEhlaWdodENoYW5nZWQg PExBUz4JIAkJCWZsZEhlaWdodENoYW5nZWQgOyAJIEVtQWxpYXNmbGRDaGFuZ2VkIDxMQVM+CSAJ CQkJCWZsZENoYW5nZWQgOyAJIEVtQWxpYXNmbGRFeGl0IDxMQVM+CSAJCQkJCWZsZEV4aXQgOyAJ IEVtQWxpYXNsc3RFbnRlciA8TEFTPgkgCQkJCQlsc3RFbnRlciA7IAkgRW1BbGlhc2xzdEV4aXQg PExBUz4JIAkJCQkJbHN0RXhpdCA7IAkgRW1BbGlhc2xzdFNlbGVjdCA8TEFTPgkgCQkJCQlsc3RT ZWxlY3QgOyAJIEVtQWxpYXN0YmxFbnRlciA8TEFTPgkgCQkJCQl0YmxFbnRlciA7IAkgRW1BbGlh c3RibEV4aXQgPExBUz4JIAkJCQkJdGJsRXhpdCA7IAkgRW1BbGlhc3RibFNlbGVjdCA8TEFTPgkg CQkJCQl0YmxTZWxlY3QgOyAJIEVtQWxpYXNmcm1Mb2FkIDxMQVM+CSAJCQkJCWZybUxvYWQgOyAJ IEVtQWxpYXNmcm1PcGVuIDxMQVM+CSAJCQkJCWZybU9wZW4gOyAJIEVtQWxpYXNmcm1Hb3RvIDxM QVM+CSAJCQkJCWZybUdvdG8gOyAJIEVtQWxpYXNmcm1DbG9zZSA8TEFTPgkgCQkJCQlmcm1DbG9z ZSA7IAkgRW1BbGlhc2ZybVVwZGF0ZSA8TEFTPgkgCQkJCQlmcm1VcGRhdGUgOyAJIEVtQWxpYXNm cm1UaXRsZUVudGVyIDxMQVM+CSAJCQkJZnJtVGl0bGVFbnRlciA7IAkgRW1BbGlhc2ZybVRpdGxl U2VsZWN0IDxMQVM+CSAJCQkJZnJtVGl0bGVTZWxlY3QgOyAJIEVtQWxpYXNhdHRuSW5kaWNhdG9y RW50ZXIgPExBUz4JIAkJCWF0dG5JbmRpY2F0b3JFbnRlciA7IAkgRW1BbGlhc2F0dG5JbmRpY2F0 b3JTZWxlY3QgPExBUz4JIAkJYXR0bkluZGljYXRvclNlbGVjdCA7IAkgRW1BbGlhc2RheVNlbGVj dCA8TEFTPgkgCQkJCQlkYXlTZWxlY3QgOyAJIEVtQWxpYXNtZW51IDxMQVM+CSAJCQkJCQltZW51 IDsgCSBFbUFsaWFzcG9wU2VsZWN0IDxMQVM+CSAJCQkJCXBvcFNlbGVjdCA7IAkgRW1BbGlhc3Nj bEVudGVyIDxMQVM+CSAJCQkJCXNjbEVudGVyIDsgCSBFbUFsaWFzc2NsRXhpdCA8TEFTPgkgCQkJ CQlzY2xFeGl0IDsgCSBFbUFsaWFzc2NsUmVwZWF0IDxMQVM+CSAJCQkJCXNjbFJlcGVhdCA7IAkg RW1BbGlhc21lbnVDbWRCYXJPcGVuIDxMQVM+CSAJCQkJbWVudUNtZEJhck9wZW4gOyAJIEVtQWxp YXNtZW51T3BlbiA8TEFTPgkgCQkJCQltZW51T3BlbiA7IAkgRW1BbGlhc2dhZGdldEVudGVyIDxM QVM+CSAJCQkJZ2FkZ2V0RW50ZXIgOyAJIEVtQWxpYXNnYWRnZXRNaXNjIDxMQVM+CSAJCQkJCWdh ZGdldE1pc2MgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9nZW5lcmljICAodm9pZCkg eyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wZW5VcCAgKHZvaWQpIHsg cmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfa2V5RG93biAgKHZvaWQpIHsg cmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfd2luRW50ZXIgICh2b2lkKSB7 IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3dpbkV4aXQgICh2b2lkKSB7 IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RzbUNvbmZpcm0gICh2b2lk KSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RzbUZlcEJ1dHRvbiAg KHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdHNtRmVwTW9k ZSAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY3RsRW50 ZXIgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2N0bFNl bGVjdCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY3Rs UmVwZWF0ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9j dGxFeGl0ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9m bGRFbnRlciAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf ZmxkSGVpZ2h0Q2hhbmdlZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfZmxkQ2hhbmdlZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfZmxkRXhpdCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfbHN0RW50ZXIgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2xzdEV4aXQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2xzdFNlbGVjdCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfdGJsRW50ZXIgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3RibEV4aXQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3RibFNlbGVjdCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfZnJtTG9hZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfZnJtT3BlbiAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfZnJtR290byAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfZnJtQ2xvc2UgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2ZybVVwZGF0ZSAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZnJtVGl0bGVFbnRlciAgKHZvaWQpIHsgcmV0dXJuICAwIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZnJtVGl0bGVTZWxlY3QgICh2b2lkKSB7IHJldHVy biAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2F0dG5JbmRpY2F0b3JFbnRlciAgKHZv aWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYXR0bkluZGljYXRv clNlbGVjdCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf ZGF5U2VsZWN0ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9tZW51ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9w b3BTZWxlY3QgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3NjbEVudGVyICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9zY2xFeGl0ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9zY2xSZXBlYXQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX21lbnVDbWRCYXJPcGVuICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9tZW51T3BlbiAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfZ2FkZ2V0RW50ZXIgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2dhZGdldE1pc2MgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gIAl9OyAg IAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzRXZlbnRUeXBlICAJewlwdWJsaWM6 CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNFdmVudFR5cGUg IAkocHRyX3R5cGUpOwlFbUFsaWFzRXZlbnRUeXBlICAJKGNvbnN0IEVtQWxpYXNFdmVudFR5cGUg ICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0 aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyNCAgOyB9CUVtQWxpYXNF dmVudFR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzRXZlbnRUeXBlICA8QT4mKTsJ RW1BbGlhc0V2ZW50VHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNFdmVu dFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzRXZlbnRU eXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzSW50MTYg PEE+CSAJCQkJCQllVHlwZSA7IAkgRW1BbGlhc0Jvb2xlYW4gPEE+CSAJCQkJCXBlbkRvd24gOyAJ IEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXRhcENvdW50IDsgCSBFbUFsaWFzSW50MTYgPEE+CSAJ CQkJCQlzY3JlZW5YIDsgCSBFbUFsaWFzSW50MTYgPEE+CSAJCQkJCQlzY3JlZW5ZIDsgCSBFbUFs aWFzRXZlbnRUeXBlRGF0YSA8QT4JIAkJCQlkYXRhIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfZVR5cGUgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3BlbkRvd24gICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3RhcENvdW50ICAodm9pZCkgeyByZXR1cm4gIDMgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9zY3JlZW5YICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9zY3JlZW5ZICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9kYXRhICAodm9pZCkgeyByZXR1cm4gIDggOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlFdmVu dFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUV2ZW50VHlw ZSAgCSh2b2lkKTsJRW1Qcm94eUV2ZW50VHlwZSAgCShjb25zdCBFbVByb3h5RXZlbnRUeXBlICAm KTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZM b2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAg MjQgIDsgfQlFbVByb3h5RXZlbnRUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlFdmVu dFR5cGUgICYpOwlFbUFsaWFzRXZlbnRUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25z dCBFbUFsaWFzRXZlbnRUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRl OglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAyNCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6 CSAgICAgRW1BbGlhc0ludDE2IDxMQVM+CSAJCQkJCQllVHlwZSA7IAkgRW1BbGlhc0Jvb2xlYW4g PExBUz4JIAkJCQkJcGVuRG93biA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQl0YXBDb3Vu dCA7IAkgRW1BbGlhc0ludDE2IDxMQVM+CSAJCQkJCQlzY3JlZW5YIDsgCSBFbUFsaWFzSW50MTYg PExBUz4JIAkJCQkJCXNjcmVlblkgOyAJIEVtQWxpYXNFdmVudFR5cGVEYXRhIDxMQVM+CSAJCQkJ ZGF0YSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2VUeXBlICAodm9pZCkgeyByZXR1 cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wZW5Eb3duICAodm9pZCkgeyByZXR1 cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90YXBDb3VudCAgKHZvaWQpIHsgcmV0 dXJuICAzIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc2NyZWVuWCAgKHZvaWQpIHsgcmV0 dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc2NyZWVuWSAgKHZvaWQpIHsgcmV0 dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGF0YSAgKHZvaWQpIHsgcmV0dXJu ICA4IDsgfSAgCX07ICAgIAogIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzUk9NREJS ZWNvcmRIZWFkZXIxVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBl IHB0cl90eXBlOwlFbUFsaWFzUk9NREJSZWNvcmRIZWFkZXIxVHlwZSAgCShwdHJfdHlwZSk7CUVt QWxpYXNST01EQlJlY29yZEhlYWRlcjFUeXBlICAJKGNvbnN0IEVtQWxpYXNST01EQlJlY29yZEhl YWRlcjFUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQ dHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgOCAgOyB9 CUVtQWxpYXNST01EQlJlY29yZEhlYWRlcjFUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1B bGlhc1JPTURCUmVjb3JkSGVhZGVyMVR5cGUgIDxBPiYpOwlFbUFsaWFzUk9NREJSZWNvcmRIZWFk ZXIxVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNST01EQlJlY29yZEhl YWRlcjFUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1JP TURCUmVjb3JkSGVhZGVyMVR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkg ICAgIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQljaHVua0xJRCA7IAkgRW1BbGlhc1VJbnQzMiA8 QT4JIAkJCQkJCXJlY29yZElEIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY2h1bmtM SUQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3JlY29y ZElEICAodm9pZCkgeyByZXR1cm4gIDQgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlST01EQlJlY29y ZEhlYWRlcjFUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlS T01EQlJlY29yZEhlYWRlcjFUeXBlICAJKHZvaWQpOwlFbVByb3h5Uk9NREJSZWNvcmRIZWFkZXIx VHlwZSAgCShjb25zdCBFbVByb3h5Uk9NREJSZWNvcmRIZWFkZXIxVHlwZSAgJik7CXB0cl90eXBl CQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9 CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDggIDsgfQlFbVBy b3h5Uk9NREJSZWNvcmRIZWFkZXIxVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5Uk9N REJSZWNvcmRIZWFkZXIxVHlwZSAgJik7CUVtQWxpYXNST01EQlJlY29yZEhlYWRlcjFUeXBlICA8 TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzUk9NREJSZWNvcmRIZWFkZXIxVHlw ZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJ CV9ieXRlc1sgICAgOCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQz MiA8TEFTPgkgCQkJCQkJY2h1bmtMSUQgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXJl Y29yZElEIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY2h1bmtMSUQgICh2b2lkKSB7 IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3JlY29yZElEICAodm9pZCkg eyByZXR1cm4gIDQgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlh c1JPTURCUmVzb3VyY2VIZWFkZXIxVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6 OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzUk9NREJSZXNvdXJjZUhlYWRlcjFUeXBlICAJKHB0 cl90eXBlKTsJRW1BbGlhc1JPTURCUmVzb3VyY2VIZWFkZXIxVHlwZSAgCShjb25zdCBFbUFsaWFz Uk9NREJSZXNvdXJjZUhlYWRlcjFUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNv bnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJl dHVybiAgICAgMTAgIDsgfQlFbUFsaWFzUk9NREJSZXNvdXJjZUhlYWRlcjFUeXBlICA8QT4mCW9w ZXJhdG9yPSAoY29uc3QgRW1BbGlhc1JPTURCUmVzb3VyY2VIZWFkZXIxVHlwZSAgPEE+Jik7CUVt QWxpYXNST01EQlJlc291cmNlSGVhZGVyMVR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25z dCBFbUFsaWFzUk9NREJSZXNvdXJjZUhlYWRlcjFUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBj b25zdDsJcHJpdmF0ZToJRW1BbGlhc1JPTURCUmVzb3VyY2VIZWFkZXIxVHlwZSAgCSh2b2lkKTsJ cHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXR5 cGUgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlpZCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4J IAkJCQkJCWNodW5rTElEIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdHlwZSAgKHZv aWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaWQgICh2b2lkKSB7 IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NodW5rTElEICAodm9pZCkg eyByZXR1cm4gIDYgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlST01EQlJlc291cmNlSGVhZGVyMVR5 cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVJPTURCUmVzb3Vy Y2VIZWFkZXIxVHlwZSAgCSh2b2lkKTsJRW1Qcm94eVJPTURCUmVzb3VyY2VIZWFkZXIxVHlwZSAg CShjb25zdCBFbVByb3h5Uk9NREJSZXNvdXJjZUhlYWRlcjFUeXBlICAmKTsJcHRyX3R5cGUJCQlH ZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3Rh dGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTAgIDsgfQlFbVByb3h5 Uk9NREJSZXNvdXJjZUhlYWRlcjFUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlST01E QlJlc291cmNlSGVhZGVyMVR5cGUgICYpOwlFbUFsaWFzUk9NREJSZXNvdXJjZUhlYWRlcjFUeXBl ICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzUk9NREJSZXNvdXJjZUhlYWRl cjFUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3Qgewlj aGFyCQkJX2J5dGVzWyAgICAxMCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlh c1VJbnQzMiA8TEFTPgkgCQkJCQkJdHlwZSA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJ aWQgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCWNodW5rTElEIDsgIAkgICAgIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfdHlwZSAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfaWQgICh2b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2NodW5rTElEICAodm9pZCkgeyByZXR1cm4gIDYgOyB9ICAJfTsgICAJICB0ZW1w bGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc1JPTURCSGVhZGVyMVR5cGUgIAl7CXB1YmxpYzoJ dHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc1JPTURCSGVhZGVy MVR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzUk9NREJIZWFkZXIxVHlwZSAgCShjb25zdCBFbUFs aWFzUk9NREJIZWFkZXIxVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7 IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4g ICAgIDc4ICA7IH0JRW1BbGlhc1JPTURCSGVhZGVyMVR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25z dCBFbUFsaWFzUk9NREJIZWFkZXIxVHlwZSAgPEE+Jik7CUVtQWxpYXNST01EQkhlYWRlcjFUeXBl ICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1JPTURCSGVhZGVyMVR5cGUgIDxB PglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzUk9NREJIZWFkZXIxVHlw ZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc2NoYXIgPEE+ CSAJCQkJCQluYW1lIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJZmxhZ3MgOyAJIEVtQWxp YXNVSW50MTYgPEE+CSAJCQkJCQl2ZXJzaW9uIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJ Y3JlYXRpb25UaW1lIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJbW9kaWZpY2F0aW9uVGlt ZSA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCWJhY2t1cFRpbWUgOyAJIEVtQWxpYXNVSW50 MzIgPEE+CSAJCQkJCQltb2RpZmljYXRpb25OdW1iZXIgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJ CQkJCQlhcHBpbmZvTElEIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJc29ydGluZm9MSUQg OyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQl0eXBlIDsgCSBFbUFsaWFzVUludDMyIDxBPgkg CQkJCQkJY3JlYXRvciA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXVuaXF1ZUlEU2VlZCA7 IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCWV4dGVuc2lvbkhlYWRlciA7IAkgRW1BbGlhc1VJ bnQxNiA8QT4JIAkJCQkJCXJlY29yZENvdW50IDsgCSBFbUFsaWFzUk9NREJSZWNvcmRIZWFkZXIx VHlwZSA8QT4JIAkJcmVjb3JkcyA7IAkgRW1BbGlhc1JPTURCUmVzb3VyY2VIZWFkZXIxVHlwZSA8 QT4JIAlyZXNvdXJjZXMgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uYW1lICAodm9p ZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mbGFncyAgKHZvaWQp IHsgcmV0dXJuICAzMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3ZlcnNpb24gICh2b2lk KSB7IHJldHVybiAgMzQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jcmVhdGlvblRpbWUg ICh2b2lkKSB7IHJldHVybiAgMzYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9tb2RpZmlj YXRpb25UaW1lICAodm9pZCkgeyByZXR1cm4gIDQwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfYmFja3VwVGltZSAgKHZvaWQpIHsgcmV0dXJuICA0NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX21vZGlmaWNhdGlvbk51bWJlciAgKHZvaWQpIHsgcmV0dXJuICA0OCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2FwcGluZm9MSUQgICh2b2lkKSB7IHJldHVybiAgNTIgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9zb3J0aW5mb0xJRCAgKHZvaWQpIHsgcmV0dXJuICA1NiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3R5cGUgICh2b2lkKSB7IHJldHVybiAgNjAgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jcmVhdG9yICAodm9pZCkgeyByZXR1cm4gIDY0IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdW5pcXVlSURTZWVkICAodm9pZCkgeyByZXR1cm4g IDY4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZXh0ZW5zaW9uSGVhZGVyICAodm9pZCkg eyByZXR1cm4gIDcyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVjb3JkQ291bnQgICh2 b2lkKSB7IHJldHVybiAgNzYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZWNvcmRzICAo dm9pZCkgeyByZXR1cm4gIDc4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVzb3VyY2Vz ICAodm9pZCkgeyByZXR1cm4gIDc4IDsgfSAgCX07IAljbGFzcyBFbVByb3h5Uk9NREJIZWFkZXIx VHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5Uk9NREJIZWFk ZXIxVHlwZSAgCSh2b2lkKTsJRW1Qcm94eVJPTURCSGVhZGVyMVR5cGUgIAkoY29uc3QgRW1Qcm94 eVJPTURCSGVhZGVyMVR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyBy ZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2 b2lkKQkJCXsgcmV0dXJuICAgICA3OCAgOyB9CUVtUHJveHlST01EQkhlYWRlcjFUeXBlICAmCQlv cGVyYXRvcj0gKGNvbnN0IEVtUHJveHlST01EQkhlYWRlcjFUeXBlICAmKTsJRW1BbGlhc1JPTURC SGVhZGVyMVR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNST01EQkhl YWRlcjFUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3Qg ewljaGFyCQkJX2J5dGVzWyAgICA3OCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1B bGlhc2NoYXIgPExBUz4JIAkJCQkJCW5hbWUgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJ CWZsYWdzIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQl2ZXJzaW9uIDsgCSBFbUFsaWFz VUludDMyIDxMQVM+CSAJCQkJCQljcmVhdGlvblRpbWUgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4J IAkJCQkJCW1vZGlmaWNhdGlvblRpbWUgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCWJh Y2t1cFRpbWUgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCW1vZGlmaWNhdGlvbk51bWJl ciA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJYXBwaW5mb0xJRCA7IAkgRW1BbGlhc1VJ bnQzMiA8TEFTPgkgCQkJCQkJc29ydGluZm9MSUQgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJ CQkJCXR5cGUgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCWNyZWF0b3IgOyAJIEVtQWxp YXNVSW50MzIgPExBUz4JIAkJCQkJCXVuaXF1ZUlEU2VlZCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFT PgkgCQkJCQkJZXh0ZW5zaW9uSGVhZGVyIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQly ZWNvcmRDb3VudCA7IAkgRW1BbGlhc1JPTURCUmVjb3JkSGVhZGVyMVR5cGUgPExBUz4JIAkJcmVj b3JkcyA7IAkgRW1BbGlhc1JPTURCUmVzb3VyY2VIZWFkZXIxVHlwZSA8TEFTPgkgCXJlc291cmNl cyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25hbWUgICh2b2lkKSB7IHJldHVybiAg MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZsYWdzICAodm9pZCkgeyByZXR1cm4gIDMy IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdmVyc2lvbiAgKHZvaWQpIHsgcmV0dXJuICAz NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NyZWF0aW9uVGltZSAgKHZvaWQpIHsgcmV0 dXJuICAzNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21vZGlmaWNhdGlvblRpbWUgICh2 b2lkKSB7IHJldHVybiAgNDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9iYWNrdXBUaW1l ICAodm9pZCkgeyByZXR1cm4gIDQ0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbW9kaWZp Y2F0aW9uTnVtYmVyICAodm9pZCkgeyByZXR1cm4gIDQ4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfYXBwaW5mb0xJRCAgKHZvaWQpIHsgcmV0dXJuICA1MiA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3NvcnRpbmZvTElEICAodm9pZCkgeyByZXR1cm4gIDU2IDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfdHlwZSAgKHZvaWQpIHsgcmV0dXJuICA2MCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2NyZWF0b3IgICh2b2lkKSB7IHJldHVybiAgNjQgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl91bmlxdWVJRFNlZWQgICh2b2lkKSB7IHJldHVybiAgNjggOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9leHRlbnNpb25IZWFkZXIgICh2b2lkKSB7IHJldHVybiAgNzIg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZWNvcmRDb3VudCAgKHZvaWQpIHsgcmV0dXJu ICA3NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3JlY29yZHMgICh2b2lkKSB7IHJldHVy biAgNzggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZXNvdXJjZXMgICh2b2lkKSB7IHJl dHVybiAgNzggOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc1JP TUNhcmRIZWFkZXI1VHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBl IHB0cl90eXBlOwlFbUFsaWFzUk9NQ2FyZEhlYWRlcjVUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlh c1JPTUNhcmRIZWFkZXI1VHlwZSAgCShjb25zdCBFbUFsaWFzUk9NQ2FyZEhlYWRlcjVUeXBlICAm KTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGlj IHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMjU2ICA7IH0JRW1BbGlhc1JP TUNhcmRIZWFkZXI1VHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNST01DYXJkSGVh ZGVyNVR5cGUgIDxBPiYpOwlFbUFsaWFzUk9NQ2FyZEhlYWRlcjVUeXBlICA8QT4Jb3BlcmF0b3Jb XSAoaW50KTsJY29uc3QgRW1BbGlhc1JPTUNhcmRIZWFkZXI1VHlwZSAgPEE+CW9wZXJhdG9yW10g KGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNST01DYXJkSGVhZGVyNVR5cGUgIAkodm9pZCk7 CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlp bml0U3RhY2sgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlyZXNldFZlY3RvciA7IAkgRW1B bGlhc1VJbnQzMiA8QT4JIAkJCQkJCXNpZ25hdHVyZSA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJ CQkJCWhkclZlcnNpb24gOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlmbGFncyA7IAkgRW1B bGlhc2NoYXIgPEE+CSAJCQkJCQljYXJkTmFtZSA7IAkgRW1BbGlhc2NoYXIgPEE+CSAJCQkJCQlj YXJkTWFudWYgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQljYXJkVmVyc2lvbiA7IAkgRW1B bGlhc1VJbnQzMiA8QT4JIAkJCQkJCWNhcmRUaW1lIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJ CQkJdW5rbm93bjEgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlyYW1saXN0IDsgCSBFbUFs aWFzVUludDMyIDxBPgkgCQkJCQkJcndvZmZzZXQgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJ CQlyd2xlbmd0aCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXJvb2Zmc2V0IDsgCSBFbUFs aWFzVUludDMyIDxBPgkgCQkJCQkJYmlncm9tIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJ Y2hlY2tzdW1MZW5ndGggOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQljaGVja3N1bVZhbHVl IDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJcnd3b2Zmc2V0IDsgCSBFbUFsaWFzVUludDMy IDxBPgkgCQkJCQkJcnd3bGVuZ3RoIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJaGFsRGlz cGF0Y2ggOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQljb21wYW55SUQgOyAJIEVtQWxpYXNV SW50MzIgPEE+CSAJCQkJCQloYWxJRCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXJvbVZl cnNpb25OdW1iZXIgOyAJIEVtQWxpYXNjaGFyIDxBPgkgCQkJCQkJcm9tVmVyc2lvblN0cmluZyA7 IAkgRW1BbGlhc2NoYXIgPEE+CSAJCQkJCQlyZXNlcnZlZCA7ICAJICAgICBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2luaXRTdGFjayAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfcmVzZXRWZWN0b3IgICh2b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3NpZ25hdHVyZSAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfaGRyVmVyc2lvbiAgKHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZsYWdzICAodm9pZCkgeyByZXR1cm4gIDE0IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY2FyZE5hbWUgICh2b2lkKSB7IHJldHVybiAgMTYgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9jYXJkTWFudWYgICh2b2lkKSB7IHJldHVybiAgNDggOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jYXJkVmVyc2lvbiAgKHZvaWQpIHsgcmV0dXJuICA4 MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NhcmRUaW1lICAodm9pZCkgeyByZXR1cm4g IDgyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdW5rbm93bjEgICh2b2lkKSB7IHJldHVy biAgODYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yYW1saXN0ICAodm9pZCkgeyByZXR1 cm4gIDg4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcndvZmZzZXQgICh2b2lkKSB7IHJl dHVybiAgOTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yd2xlbmd0aCAgKHZvaWQpIHsg cmV0dXJuICA5NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jvb2Zmc2V0ICAodm9pZCkg eyByZXR1cm4gIDEwMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2JpZ3JvbSAgKHZvaWQp IHsgcmV0dXJuICAxMDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jaGVja3N1bUxlbmd0 aCAgKHZvaWQpIHsgcmV0dXJuICAxMDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jaGVj a3N1bVZhbHVlICAodm9pZCkgeyByZXR1cm4gIDExMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3J3d29mZnNldCAgKHZvaWQpIHsgcmV0dXJuICAxMTQgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9yd3dsZW5ndGggICh2b2lkKSB7IHJldHVybiAgMTE4IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfaGFsRGlzcGF0Y2ggICh2b2lkKSB7IHJldHVybiAgMTIyIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfY29tcGFueUlEICAodm9pZCkgeyByZXR1cm4gIDEyNiA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2hhbElEICAodm9pZCkgeyByZXR1cm4gIDEzMCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX3JvbVZlcnNpb25OdW1iZXIgICh2b2lkKSB7IHJldHVybiAg MTM0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfcm9tVmVyc2lvblN0cmluZyAgKHZvaWQp IHsgcmV0dXJuICAxMzggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZXNlcnZlZCAgKHZv aWQpIHsgcmV0dXJuICAxNzAgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlST01DYXJkSGVhZGVyNVR5 cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVJPTUNhcmRIZWFk ZXI1VHlwZSAgCSh2b2lkKTsJRW1Qcm94eVJPTUNhcmRIZWFkZXI1VHlwZSAgCShjb25zdCBFbVBy b3h5Uk9NQ2FyZEhlYWRlcjVUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0 CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6 ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMjU2ICA7IH0JRW1Qcm94eVJPTUNhcmRIZWFkZXI1VHlw ZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5Uk9NQ2FyZEhlYWRlcjVUeXBlICAmKTsJRW1B bGlhc1JPTUNhcmRIZWFkZXI1VHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1B bGlhc1JPTUNhcmRIZWFkZXI1VHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJp dmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMjU2ICBdOwl9IGZMb2NhbERhdGE7CXB1 YmxpYzoJICAgICBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlpbml0U3RhY2sgOyAJIEVtQWxp YXNVSW50MzIgPExBUz4JIAkJCQkJCXJlc2V0VmVjdG9yIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+ CSAJCQkJCQlzaWduYXR1cmUgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWhkclZlcnNp b24gOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWZsYWdzIDsgCSBFbUFsaWFzY2hhciA8 TEFTPgkgCQkJCQkJY2FyZE5hbWUgOyAJIEVtQWxpYXNjaGFyIDxMQVM+CSAJCQkJCQljYXJkTWFu dWYgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWNhcmRWZXJzaW9uIDsgCSBFbUFsaWFz VUludDMyIDxMQVM+CSAJCQkJCQljYXJkVGltZSA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJ CQkJdW5rbm93bjEgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXJhbWxpc3QgOyAJIEVt QWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXJ3b2Zmc2V0IDsgCSBFbUFsaWFzVUludDMyIDxMQVM+ CSAJCQkJCQlyd2xlbmd0aCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJcm9vZmZzZXQg OyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCWJpZ3JvbSA7IAkgRW1BbGlhc1VJbnQzMiA8 TEFTPgkgCQkJCQkJY2hlY2tzdW1MZW5ndGggOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJ CWNoZWNrc3VtVmFsdWUgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCXJ3d29mZnNldCA7 IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJcnd3bGVuZ3RoIDsgCSBFbUFsaWFzVUludDMy IDxMQVM+CSAJCQkJCQloYWxEaXNwYXRjaCA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJ Y29tcGFueUlEIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQloYWxJRCA7IAkgRW1BbGlh c1VJbnQzMiA8TEFTPgkgCQkJCQkJcm9tVmVyc2lvbk51bWJlciA7IAkgRW1BbGlhc2NoYXIgPExB Uz4JIAkJCQkJCXJvbVZlcnNpb25TdHJpbmcgOyAJIEVtQWxpYXNjaGFyIDxMQVM+CSAJCQkJCQly ZXNlcnZlZCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luaXRTdGFjayAgKHZvaWQp IHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVzZXRWZWN0b3IgICh2 b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NpZ25hdHVyZSAg KHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaGRyVmVyc2lv biAgKHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZsYWdz ICAodm9pZCkgeyByZXR1cm4gIDE0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY2FyZE5h bWUgICh2b2lkKSB7IHJldHVybiAgMTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jYXJk TWFudWYgICh2b2lkKSB7IHJldHVybiAgNDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9j YXJkVmVyc2lvbiAgKHZvaWQpIHsgcmV0dXJuICA4MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2NhcmRUaW1lICAodm9pZCkgeyByZXR1cm4gIDgyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfdW5rbm93bjEgICh2b2lkKSB7IHJldHVybiAgODYgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9yYW1saXN0ICAodm9pZCkgeyByZXR1cm4gIDg4IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfcndvZmZzZXQgICh2b2lkKSB7IHJldHVybiAgOTIgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9yd2xlbmd0aCAgKHZvaWQpIHsgcmV0dXJuICA5NiA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX3Jvb2Zmc2V0ICAodm9pZCkgeyByZXR1cm4gIDEwMCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2JpZ3JvbSAgKHZvaWQpIHsgcmV0dXJuICAxMDQgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9jaGVja3N1bUxlbmd0aCAgKHZvaWQpIHsgcmV0dXJuICAxMDggOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jaGVja3N1bVZhbHVlICAodm9pZCkgeyByZXR1cm4g IDExMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3J3d29mZnNldCAgKHZvaWQpIHsgcmV0 dXJuICAxMTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yd3dsZW5ndGggICh2b2lkKSB7 IHJldHVybiAgMTE4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaGFsRGlzcGF0Y2ggICh2 b2lkKSB7IHJldHVybiAgMTIyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29tcGFueUlE ICAodm9pZCkgeyByZXR1cm4gIDEyNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2hhbElE ICAodm9pZCkgeyByZXR1cm4gIDEzMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3JvbVZl cnNpb25OdW1iZXIgICh2b2lkKSB7IHJldHVybiAgMTM0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2Zfcm9tVmVyc2lvblN0cmluZyAgKHZvaWQpIHsgcmV0dXJuICAxMzggOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9yZXNlcnZlZCAgKHZvaWQpIHsgcmV0dXJuICAxNzAgOyB9ICAJfTsg ICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc1JPTVN0b3JlSGVhZGVyNFR5cGUg IAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlh c1JPTVN0b3JlSGVhZGVyNFR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzUk9NU3RvcmVIZWFkZXI0 VHlwZSAgCShjb25zdCBFbUFsaWFzUk9NU3RvcmVIZWFkZXI0VHlwZSAgJik7CXB0cl90eXBlCQkJ R2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNp emUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDI1NiAgOyB9CUVtQWxpYXNST01TdG9yZUhlYWRlcjRU eXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1JPTVN0b3JlSGVhZGVyNFR5cGUgIDxB PiYpOwlFbUFsaWFzUk9NU3RvcmVIZWFkZXI0VHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNv bnN0IEVtQWxpYXNST01TdG9yZUhlYWRlcjRUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25z dDsJcHJpdmF0ZToJRW1BbGlhc1JPTVN0b3JlSGVhZGVyNFR5cGUgIAkodm9pZCk7CXB0cl90eXBl CQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlzaWduYXR1cmUg OyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQl2ZXJzaW9uIDsgCSBFbUFsaWFzVUludDE2IDxB PgkgCQkJCQkJZmxhZ3MgOyAJIEVtQWxpYXNjaGFyIDxBPgkgCQkJCQkJbmFtZSA7IAkgRW1BbGlh c1VJbnQzMiA8QT4JIAkJCQkJCWNyZWF0aW9uRGF0ZSA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJ CQkJCWJhY2t1cERhdGUgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQloZWFwQWRkciA7IAkg RW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCWluaXRBZGRyMSA7IAkgRW1BbGlhc1VJbnQzMiA8QT4J IAkJCQkJCWluaXRBZGRyMiA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCWRiTElEIDsgCSBF bUFsaWFzVUludDMyIDxBPgkgCQkJCQkJcmVzZXJ2ZWQgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJ CQkJCQloZWFwU2l6ZSA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXJhbVNpemUgOyAgCSAg ICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zaWduYXR1cmUgICh2b2lkKSB7IHJldHVybiAgMCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3ZlcnNpb24gICh2b2lkKSB7IHJldHVybiAgNCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZsYWdzICAodm9pZCkgeyByZXR1cm4gIDYgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uYW1lICAodm9pZCkgeyByZXR1cm4gIDggOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9jcmVhdGlvbkRhdGUgICh2b2lkKSB7IHJldHVybiAgNDAg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9iYWNrdXBEYXRlICAodm9pZCkgeyByZXR1cm4g IDQ0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaGVhcEFkZHIgICh2b2lkKSB7IHJldHVy biAgNDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbml0QWRkcjEgICh2b2lkKSB7IHJl dHVybiAgNTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pbml0QWRkcjIgICh2b2lkKSB7 IHJldHVybiAgNTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kYkxJRCAgKHZvaWQpIHsg cmV0dXJuICA2MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jlc2VydmVkICAodm9pZCkg eyByZXR1cm4gIDY0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaGVhcFNpemUgICh2b2lk KSB7IHJldHVybiAgNjggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yYW1TaXplICAodm9p ZCkgeyByZXR1cm4gIDcyIDsgfSAgCX07IAljbGFzcyBFbVByb3h5Uk9NU3RvcmVIZWFkZXI0VHlw ZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5Uk9NU3RvcmVIZWFk ZXI0VHlwZSAgCSh2b2lkKTsJRW1Qcm94eVJPTVN0b3JlSGVhZGVyNFR5cGUgIAkoY29uc3QgRW1Q cm94eVJPTVN0b3JlSGVhZGVyNFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29u c3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRT aXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyNTYgIDsgfQlFbVByb3h5Uk9NU3RvcmVIZWFkZXI0 VHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5Uk9NU3RvcmVIZWFkZXI0VHlwZSAgJik7 CUVtQWxpYXNST01TdG9yZUhlYWRlcjRUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25z dCBFbUFsaWFzUk9NU3RvcmVIZWFkZXI0VHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25z dDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMjU2ICBdOwl9IGZMb2NhbERh dGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlzaWduYXR1cmUgOyAJ IEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXZlcnNpb24gOyAJIEVtQWxpYXNVSW50MTYgPExB Uz4JIAkJCQkJCWZsYWdzIDsgCSBFbUFsaWFzY2hhciA8TEFTPgkgCQkJCQkJbmFtZSA7IAkgRW1B bGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJY3JlYXRpb25EYXRlIDsgCSBFbUFsaWFzVUludDMyIDxM QVM+CSAJCQkJCQliYWNrdXBEYXRlIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQloZWFw QWRkciA7IAkgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJaW5pdEFkZHIxIDsgCSBFbUFsaWFz VUludDMyIDxMQVM+CSAJCQkJCQlpbml0QWRkcjIgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJ CQkJCWRiTElEIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlyZXNlcnZlZCA7IAkgRW1B bGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJaGVhcFNpemUgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4J IAkJCQkJCXJhbVNpemUgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zaWduYXR1cmUg ICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3ZlcnNpb24g ICh2b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZsYWdzICAo dm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uYW1lICAodm9p ZCkgeyByZXR1cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jcmVhdGlvbkRhdGUg ICh2b2lkKSB7IHJldHVybiAgNDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9iYWNrdXBE YXRlICAodm9pZCkgeyByZXR1cm4gIDQ0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaGVh cEFkZHIgICh2b2lkKSB7IHJldHVybiAgNDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9p bml0QWRkcjEgICh2b2lkKSB7IHJldHVybiAgNTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9pbml0QWRkcjIgICh2b2lkKSB7IHJldHVybiAgNTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9kYkxJRCAgKHZvaWQpIHsgcmV0dXJuICA2MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3Jlc2VydmVkICAodm9pZCkgeyByZXR1cm4gIDY0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfaGVhcFNpemUgICh2b2lkKSB7IHJldHVybiAgNjggOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9yYW1TaXplICAodm9pZCkgeyByZXR1cm4gIDcyIDsgfSAgCX07ICAgCSAgdGVtcGxh dGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNST01IZWFwSGVhZGVyMVR5cGUgIAl7CXB1YmxpYzoJ dHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc1JPTUhlYXBIZWFk ZXIxVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNST01IZWFwSGVhZGVyMVR5cGUgIAkoY29uc3Qg RW1BbGlhc1JPTUhlYXBIZWFkZXIxVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBj b25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyBy ZXR1cm4gICAgIDggIDsgfQlFbUFsaWFzUk9NSGVhcEhlYWRlcjFUeXBlICA8QT4mCW9wZXJhdG9y PSAoY29uc3QgRW1BbGlhc1JPTUhlYXBIZWFkZXIxVHlwZSAgPEE+Jik7CUVtQWxpYXNST01IZWFw SGVhZGVyMVR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzUk9NSGVhcEhl YWRlcjFUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1JP TUhlYXBIZWFkZXIxVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAg RW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWZsYWdzIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJ CQkJc2l6ZSA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCW1hc3RlclBvaW50ZXJzIDsgCSBF bUFsaWFzVUludDE2IDxBPgkgCQkJCQkJbmV4dE1hc3RlclRhYmxlIDsgIAkgICAgIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfZmxhZ3MgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX3NpemUgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX21hc3RlclBvaW50ZXJzICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9uZXh0TWFzdGVyVGFibGUgICh2b2lkKSB7IHJldHVybiAgNiA7IH0g IAl9OyAJY2xhc3MgRW1Qcm94eVJPTUhlYXBIZWFkZXIxVHlwZSAgCXsJcHVibGljOgl0eXBlZGVm IHZvaWQqIHB0cl90eXBlOwlFbVByb3h5Uk9NSGVhcEhlYWRlcjFUeXBlICAJKHZvaWQpOwlFbVBy b3h5Uk9NSGVhcEhlYWRlcjFUeXBlICAJKGNvbnN0IEVtUHJveHlST01IZWFwSGVhZGVyMVR5cGUg ICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAm ZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAg ICA4ICA7IH0JRW1Qcm94eVJPTUhlYXBIZWFkZXIxVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBF bVByb3h5Uk9NSGVhcEhlYWRlcjFUeXBlICAmKTsJRW1BbGlhc1JPTUhlYXBIZWFkZXIxVHlwZSAg PExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1JPTUhlYXBIZWFkZXIxVHlwZSAg PExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9i eXRlc1sgICAgOCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8 TEFTPgkgCQkJCQkJZmxhZ3MgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXNpemUgOyAJ IEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCW1hc3RlclBvaW50ZXJzIDsgCSBFbUFsaWFzVUlu dDE2IDxMQVM+CSAJCQkJCQluZXh0TWFzdGVyVGFibGUgOyAgCSAgICAgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9mbGFncyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2Zfc2l6ZSAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfbWFzdGVyUG9pbnRlcnMgICh2b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX25leHRNYXN0ZXJUYWJsZSAgKHZvaWQpIHsgcmV0dXJuICA2IDsgfSAgCX07ICAg CSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNST01IZWFwSGVhZGVyMlR5cGUgIAl7 CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc1JP TUhlYXBIZWFkZXIyVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNST01IZWFwSGVhZGVyMlR5cGUg IAkoY29uc3QgRW1BbGlhc1JPTUhlYXBIZWFkZXIyVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRy CSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZv aWQpCQkJeyByZXR1cm4gICAgIDEyICA7IH0JRW1BbGlhc1JPTUhlYXBIZWFkZXIyVHlwZSAgPEE+ JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNST01IZWFwSGVhZGVyMlR5cGUgIDxBPiYpOwlFbUFs aWFzUk9NSGVhcEhlYWRlcjJUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlh c1JPTUhlYXBIZWFkZXIyVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6 CUVtQWxpYXNST01IZWFwSGVhZGVyMlR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVi bGljOgkgICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlmbGFncyA7IAkgRW1BbGlhc1VJbnQz MiA8QT4JIAkJCQkJCXNpemUgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQltYXN0ZXJQb2lu dGVycyA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCW5leHRNYXN0ZXJUYWJsZSA7ICAJICAg ICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZsYWdzICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9zaXplICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9tYXN0ZXJQb2ludGVycyAgKHZvaWQpIHsgcmV0dXJuICA2IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmV4dE1hc3RlclRhYmxlICAodm9pZCkgeyByZXR1 cm4gIDggOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlST01IZWFwSGVhZGVyMlR5cGUgIAl7CXB1Ymxp YzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVJPTUhlYXBIZWFkZXIyVHlwZSAgCSh2 b2lkKTsJRW1Qcm94eVJPTUhlYXBIZWFkZXIyVHlwZSAgCShjb25zdCBFbVByb3h5Uk9NSGVhcEhl YWRlcjJUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChw dHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7 IHJldHVybiAgICAgMTIgIDsgfQlFbVByb3h5Uk9NSGVhcEhlYWRlcjJUeXBlICAmCQlvcGVyYXRv cj0gKGNvbnN0IEVtUHJveHlST01IZWFwSGVhZGVyMlR5cGUgICYpOwlFbUFsaWFzUk9NSGVhcEhl YWRlcjJUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzUk9NSGVhcEhl YWRlcjJUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3Qg ewljaGFyCQkJX2J5dGVzWyAgICAxMiAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1B bGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJZmxhZ3MgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJ CQkJCXNpemUgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCW1hc3RlclBvaW50ZXJzIDsg CSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQluZXh0TWFzdGVyVGFibGUgOyAgCSAgICAgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9mbGFncyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2Zfc2l6ZSAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfbWFzdGVyUG9pbnRlcnMgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX25leHRNYXN0ZXJUYWJsZSAgKHZvaWQpIHsgcmV0dXJuICA4 IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNST01IZWFwSGVh ZGVyM1R5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlw ZTsJRW1BbGlhc1JPTUhlYXBIZWFkZXIzVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNST01IZWFw SGVhZGVyM1R5cGUgIAkoY29uc3QgRW1BbGlhc1JPTUhlYXBIZWFkZXIzVHlwZSAgJik7CXB0cl90 eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJ CUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDE2ICA7IH0JRW1BbGlhc1JPTUhlYXBIZWFk ZXIzVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNST01IZWFwSGVhZGVyM1R5cGUg IDxBPiYpOwlFbUFsaWFzUk9NSGVhcEhlYWRlcjNUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJ Y29uc3QgRW1BbGlhc1JPTUhlYXBIZWFkZXIzVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29u c3Q7CXByaXZhdGU6CUVtQWxpYXNST01IZWFwSGVhZGVyM1R5cGUgIAkodm9pZCk7CXB0cl90eXBl CQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlmbGFncyA7IAkg RW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXNpemUgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJ CQlmcmVlQ2h1bmsgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQltYXN0ZXJQb2ludGVycyA7 IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCW5leHRNYXN0ZXJUYWJsZSA7ICAJICAgICBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2ZsYWdzICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9zaXplICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9mcmVlQ2h1bmsgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX21hc3RlclBvaW50ZXJzICAodm9pZCkgeyByZXR1cm4gIDEwIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmV4dE1hc3RlclRhYmxlICAodm9pZCkgeyByZXR1cm4g IDEyIDsgfSAgCX07IAljbGFzcyBFbVByb3h5Uk9NSGVhcEhlYWRlcjNUeXBlICAJewlwdWJsaWM6 CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlST01IZWFwSGVhZGVyM1R5cGUgIAkodm9p ZCk7CUVtUHJveHlST01IZWFwSGVhZGVyM1R5cGUgIAkoY29uc3QgRW1Qcm94eVJPTUhlYXBIZWFk ZXIzVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRy X3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyBy ZXR1cm4gICAgIDE2ICA7IH0JRW1Qcm94eVJPTUhlYXBIZWFkZXIzVHlwZSAgJgkJb3BlcmF0b3I9 IChjb25zdCBFbVByb3h5Uk9NSGVhcEhlYWRlcjNUeXBlICAmKTsJRW1BbGlhc1JPTUhlYXBIZWFk ZXIzVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1JPTUhlYXBIZWFk ZXIzVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJ Y2hhcgkJCV9ieXRlc1sgICAgMTYgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxp YXNVSW50MTYgPExBUz4JIAkJCQkJCWZsYWdzIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJ CQlzaXplIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlmcmVlQ2h1bmsgOyAJIEVtQWxp YXNVSW50MTYgPExBUz4JIAkJCQkJCW1hc3RlclBvaW50ZXJzIDsgCSBFbUFsaWFzVUludDMyIDxM QVM+CSAJCQkJCQluZXh0TWFzdGVyVGFibGUgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9mbGFncyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf c2l6ZSAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZnJl ZUNodW5rICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9t YXN0ZXJQb2ludGVycyAgKHZvaWQpIHsgcmV0dXJuICAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX25leHRNYXN0ZXJUYWJsZSAgKHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gIAl9OyAgIAkg IHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzUk9NREJEaXIxVHlwZSAgCXsJcHVibGlj Ogl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzUk9NREJEaXIx VHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNST01EQkRpcjFUeXBlICAJKGNvbnN0IEVtQWxpYXNS T01EQkRpcjFUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJu IGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNiAg OyB9CUVtQWxpYXNST01EQkRpcjFUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1JP TURCRGlyMVR5cGUgIDxBPiYpOwlFbUFsaWFzUk9NREJEaXIxVHlwZSAgPEE+CW9wZXJhdG9yW10g KGludCk7CWNvbnN0IEVtQWxpYXNST01EQkRpcjFUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBj b25zdDsJcHJpdmF0ZToJRW1BbGlhc1JPTURCRGlyMVR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJ ZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQluZXh0VGFibGUgOyAJ IEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQljb3VudCA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJ CQkJCWRiTElEIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmV4dFRhYmxlICAodm9p ZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb3VudCAgKHZvaWQp IHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGJMSUQgICh2b2lkKSB7 IHJldHVybiAgNiA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVJPTURCRGlyMVR5cGUgIAl7CXB1Ymxp YzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVJPTURCRGlyMVR5cGUgIAkodm9pZCk7 CUVtUHJveHlST01EQkRpcjFUeXBlICAJKGNvbnN0IEVtUHJveHlST01EQkRpcjFUeXBlICAmKTsJ cHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2Nh bERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNiAg OyB9CUVtUHJveHlST01EQkRpcjFUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlST01E QkRpcjFUeXBlICAmKTsJRW1BbGlhc1JPTURCRGlyMVR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGlu dCk7CWNvbnN0IEVtQWxpYXNST01EQkRpcjFUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNv bnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA2ICBdOwl9IGZMb2NhbERh dGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQluZXh0VGFibGUgOyAJ IEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWNvdW50IDsgCSBFbUFsaWFzVUludDMyIDxMQVM+ CSAJCQkJCQlkYkxJRCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25leHRUYWJsZSAg KHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY291bnQgICh2 b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RiTElEICAodm9p ZCkgeyByZXR1cm4gIDYgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1B bGlhc1JPTUhlYXBDaHVua0hkcjJUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6 cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNST01IZWFwQ2h1bmtIZHIyVHlwZSAgCShwdHJfdHlw ZSk7CUVtQWxpYXNST01IZWFwQ2h1bmtIZHIyVHlwZSAgCShjb25zdCBFbUFsaWFzUk9NSGVhcENo dW5rSGRyMlR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4g ZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA4ICA7 IH0JRW1BbGlhc1JPTUhlYXBDaHVua0hkcjJUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1B bGlhc1JPTUhlYXBDaHVua0hkcjJUeXBlICA8QT4mKTsJRW1BbGlhc1JPTUhlYXBDaHVua0hkcjJU eXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1JPTUhlYXBDaHVua0hkcjJU eXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1JPTUhlYXBD aHVua0hkcjJUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFs aWFzVUludDMyIDxBPgkgCQkJCQkJbG9uZzEgOyAJIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQls b25nMiA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xvbmcxICAodm9pZCkgeyByZXR1 cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9sb25nMiAgKHZvaWQpIHsgcmV0dXJu ICA0IDsgfSAgCX07IAljbGFzcyBFbVByb3h5Uk9NSGVhcENodW5rSGRyMlR5cGUgIAl7CXB1Ymxp YzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eVJPTUhlYXBDaHVua0hkcjJUeXBlICAJ KHZvaWQpOwlFbVByb3h5Uk9NSGVhcENodW5rSGRyMlR5cGUgIAkoY29uc3QgRW1Qcm94eVJPTUhl YXBDaHVua0hkcjJUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0 dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9p ZCkJCQl7IHJldHVybiAgICAgOCAgOyB9CUVtUHJveHlST01IZWFwQ2h1bmtIZHIyVHlwZSAgJgkJ b3BlcmF0b3I9IChjb25zdCBFbVByb3h5Uk9NSGVhcENodW5rSGRyMlR5cGUgICYpOwlFbUFsaWFz Uk9NSGVhcENodW5rSGRyMlR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxp YXNST01IZWFwQ2h1bmtIZHIyVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJp dmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgOCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJs aWM6CSAgICAgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJbG9uZzEgOyAJIEVtQWxpYXNVSW50 MzIgPExBUz4JIAkJCQkJCWxvbmcyIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbG9u ZzEgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xvbmcy ICAodm9pZCkgeyByZXR1cm4gIDQgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xh c3MgRW1BbGlhc1JPTUhlYXBDaHVua0hkcjFUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5h bWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNST01IZWFwQ2h1bmtIZHIxVHlwZSAgCShw dHJfdHlwZSk7CUVtQWxpYXNST01IZWFwQ2h1bmtIZHIxVHlwZSAgCShjb25zdCBFbUFsaWFzUk9N SGVhcENodW5rSGRyMVR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyBy ZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAg ICA2ICA7IH0JRW1BbGlhc1JPTUhlYXBDaHVua0hkcjFUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29u c3QgRW1BbGlhc1JPTUhlYXBDaHVua0hkcjFUeXBlICA8QT4mKTsJRW1BbGlhc1JPTUhlYXBDaHVu a0hkcjFUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1JPTUhlYXBDaHVu a0hkcjFUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1JP TUhlYXBDaHVua0hkcjFUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAg ICBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJc2l6ZSA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJ CQkJbG9ja093bmVyIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQlmbGFncyA7IAkgRW1BbGlh c1VJbnQxNiA8QT4JIAkJCQkJCWhPZmZzZXQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9zaXplICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9s b2NrT3duZXIgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2ZsYWdzICAodm9pZCkgeyByZXR1cm4gIDMgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9o T2Zmc2V0ICAodm9pZCkgeyByZXR1cm4gIDQgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlST01IZWFw Q2h1bmtIZHIxVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5 Uk9NSGVhcENodW5rSGRyMVR5cGUgIAkodm9pZCk7CUVtUHJveHlST01IZWFwQ2h1bmtIZHIxVHlw ZSAgCShjb25zdCBFbVByb3h5Uk9NSGVhcENodW5rSGRyMVR5cGUgICYpOwlwdHJfdHlwZQkJCUdl dFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0 aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA2ICA7IH0JRW1Qcm94eVJP TUhlYXBDaHVua0hkcjFUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlST01IZWFwQ2h1 bmtIZHIxVHlwZSAgJik7CUVtQWxpYXNST01IZWFwQ2h1bmtIZHIxVHlwZSAgPExBUz4Jb3BlcmF0 b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1JPTUhlYXBDaHVua0hkcjFUeXBlICA8TEFTPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA2 ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJ CQlzaXplIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWxvY2tPd25lciA7IAkgRW1BbGlh c1VJbnQ4IDxMQVM+CSAJCQkJCQlmbGFncyA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJ aE9mZnNldCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NpemUgICh2b2lkKSB7IHJl dHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xvY2tPd25lciAgKHZvaWQpIHsg cmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmxhZ3MgICh2b2lkKSB7IHJl dHVybiAgMyA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2hPZmZzZXQgICh2b2lkKSB7IHJl dHVybiAgNCA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzUk9N RnRyRmVhdHVyZVR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBw dHJfdHlwZTsJRW1BbGlhc1JPTUZ0ckZlYXR1cmVUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc1JP TUZ0ckZlYXR1cmVUeXBlICAJKGNvbnN0IEVtQWxpYXNST01GdHJGZWF0dXJlVHlwZSAgJik7CXB0 cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXpl X3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDYgIDsgfQlFbUFsaWFzUk9NRnRyRmVh dHVyZVR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzUk9NRnRyRmVhdHVyZVR5cGUg IDxBPiYpOwlFbUFsaWFzUk9NRnRyRmVhdHVyZVR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwlj b25zdCBFbUFsaWFzUk9NRnRyRmVhdHVyZVR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0 Owlwcml2YXRlOglFbUFsaWFzUk9NRnRyRmVhdHVyZVR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJ ZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQludW0gOyAJIEVtQWxp YXNVSW50MzIgPEE+CSAJCQkJCQl2YWx1ZSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X251bSAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdmFs dWUgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVJPTUZ0ckZlYXR1 cmVUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlST01GdHJG ZWF0dXJlVHlwZSAgCSh2b2lkKTsJRW1Qcm94eVJPTUZ0ckZlYXR1cmVUeXBlICAJKGNvbnN0IEVt UHJveHlST01GdHJGZWF0dXJlVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25z dAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNp emUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDYgIDsgfQlFbVByb3h5Uk9NRnRyRmVhdHVyZVR5cGUg ICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eVJPTUZ0ckZlYXR1cmVUeXBlICAmKTsJRW1BbGlh c1JPTUZ0ckZlYXR1cmVUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFz Uk9NRnRyRmVhdHVyZVR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6 CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDYgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkg ICAgIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCW51bSA7IAkgRW1BbGlhc1VJbnQzMiA8TEFT PgkgCQkJCQkJdmFsdWUgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9udW0gICh2b2lk KSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3ZhbHVlICAodm9pZCkg eyByZXR1cm4gIDIgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlh c1JPTUZ0ckNyZWF0b3JUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5 cGUgcHRyX3R5cGU7CUVtQWxpYXNST01GdHJDcmVhdG9yVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxp YXNST01GdHJDcmVhdG9yVHlwZSAgCShjb25zdCBFbUFsaWFzUk9NRnRyQ3JlYXRvclR5cGUgICYp OwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMg c2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA2ICA7IH0JRW1BbGlhc1JPTUZ0 ckNyZWF0b3JUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1JPTUZ0ckNyZWF0b3JU eXBlICA8QT4mKTsJRW1BbGlhc1JPTUZ0ckNyZWF0b3JUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50 KTsJY29uc3QgRW1BbGlhc1JPTUZ0ckNyZWF0b3JUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBj b25zdDsJcHJpdmF0ZToJRW1BbGlhc1JPTUZ0ckNyZWF0b3JUeXBlICAJKHZvaWQpOwlwdHJfdHlw ZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJY3JlYXRvciA7 IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCW51bUVudHJpZXMgOyAJIEVtQWxpYXNST01GdHJG ZWF0dXJlVHlwZSA8QT4JIAkJCWZlYXR1cmUgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9jcmVhdG9yICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9udW1FbnRyaWVzICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9mZWF0dXJlICAodm9pZCkgeyByZXR1cm4gIDYgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlS T01GdHJDcmVhdG9yVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVBy b3h5Uk9NRnRyQ3JlYXRvclR5cGUgIAkodm9pZCk7CUVtUHJveHlST01GdHJDcmVhdG9yVHlwZSAg CShjb25zdCBFbVByb3h5Uk9NRnRyQ3JlYXRvclR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgko dm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6 ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA2ICA7IH0JRW1Qcm94eVJPTUZ0ckNy ZWF0b3JUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlST01GdHJDcmVhdG9yVHlwZSAg Jik7CUVtQWxpYXNST01GdHJDcmVhdG9yVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29u c3QgRW1BbGlhc1JPTUZ0ckNyZWF0b3JUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0 Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA2ICBdOwl9IGZMb2NhbERhdGE7 CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQljcmVhdG9yIDsgCSBFbUFs aWFzVUludDE2IDxMQVM+CSAJCQkJCQludW1FbnRyaWVzIDsgCSBFbUFsaWFzUk9NRnRyRmVhdHVy ZVR5cGUgPExBUz4JIAkJCWZlYXR1cmUgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9j cmVhdG9yICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9u dW1FbnRyaWVzICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9mZWF0dXJlICAodm9pZCkgeyByZXR1cm4gIDYgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xh c3MgQT4JY2xhc3MgRW1BbGlhc1JPTUZ0clRhYmxlVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5 cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzUk9NRnRyVGFibGVUeXBlICAJKHB0 cl90eXBlKTsJRW1BbGlhc1JPTUZ0clRhYmxlVHlwZSAgCShjb25zdCBFbUFsaWFzUk9NRnRyVGFi bGVUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7 IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMiAgOyB9CUVt QWxpYXNST01GdHJUYWJsZVR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzUk9NRnRy VGFibGVUeXBlICA8QT4mKTsJRW1BbGlhc1JPTUZ0clRhYmxlVHlwZSAgPEE+CW9wZXJhdG9yW10g KGludCk7CWNvbnN0IEVtQWxpYXNST01GdHJUYWJsZVR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQp IGNvbnN0Owlwcml2YXRlOglFbUFsaWFzUk9NRnRyVGFibGVUeXBlICAJKHZvaWQpOwlwdHJfdHlw ZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJbnVtRW50cmll cyA7IAkgRW1BbGlhc1JPTUZ0ckNyZWF0b3JUeXBlIDxBPgkgCQkJY3JlYXRvciA7ICAJICAgICBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX251bUVudHJpZXMgICh2b2lkKSB7IHJldHVybiAgMCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2NyZWF0b3IgICh2b2lkKSB7IHJldHVybiAgMiA7IH0g IAl9OyAJY2xhc3MgRW1Qcm94eVJPTUZ0clRhYmxlVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZv aWQqIHB0cl90eXBlOwlFbVByb3h5Uk9NRnRyVGFibGVUeXBlICAJKHZvaWQpOwlFbVByb3h5Uk9N RnRyVGFibGVUeXBlICAJKGNvbnN0IEVtUHJveHlST01GdHJUYWJsZVR5cGUgICYpOwlwdHJfdHlw ZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsg fQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyICA7IH0JRW1Q cm94eVJPTUZ0clRhYmxlVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5Uk9NRnRyVGFi bGVUeXBlICAmKTsJRW1BbGlhc1JPTUZ0clRhYmxlVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50 KTsJY29uc3QgRW1BbGlhc1JPTUZ0clRhYmxlVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBj b25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMiAgXTsJfSBmTG9jYWxE YXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJbnVtRW50cmllcyA7 IAkgRW1BbGlhc1JPTUZ0ckNyZWF0b3JUeXBlIDxMQVM+CSAJCQljcmVhdG9yIDsgIAkgICAgIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbnVtRW50cmllcyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY3JlYXRvciAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAg CX07ICAgIAogIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzQ29udHJvbEF0dHJUeXBl ICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxp YXNDb250cm9sQXR0clR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzQ29udHJvbEF0dHJUeXBlICAJ KGNvbnN0IEVtQWxpYXNDb250cm9sQXR0clR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9p ZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJ CXsgcmV0dXJuICAgICAyICA7IH0JRW1BbGlhc0NvbnRyb2xBdHRyVHlwZSAgPEE+JglvcGVyYXRv cj0gKGNvbnN0IEVtQWxpYXNDb250cm9sQXR0clR5cGUgIDxBPiYpOwlFbUFsaWFzQ29udHJvbEF0 dHJUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0NvbnRyb2xBdHRyVHlw ZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNDb250cm9sQXR0 clR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNJbnQx NiA8QT4JIAkJCQkJCWZsYWdzIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmxhZ3Mg ICh2b2lkKSB7IHJldHVybiAgMCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eUNvbnRyb2xBdHRyVHlw ZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5Q29udHJvbEF0dHJU eXBlICAJKHZvaWQpOwlFbVByb3h5Q29udHJvbEF0dHJUeXBlICAJKGNvbnN0IEVtUHJveHlDb250 cm9sQXR0clR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4g KHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJ CXsgcmV0dXJuICAgICAyICA7IH0JRW1Qcm94eUNvbnRyb2xBdHRyVHlwZSAgJgkJb3BlcmF0b3I9 IChjb25zdCBFbVByb3h5Q29udHJvbEF0dHJUeXBlICAmKTsJRW1BbGlhc0NvbnRyb2xBdHRyVHlw ZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0NvbnRyb2xBdHRyVHlwZSAg PExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9i eXRlc1sgICAgMiAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc0ludDE2IDxM QVM+CSAJCQkJCQlmbGFncyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZsYWdzICAo dm9pZCkgeyByZXR1cm4gIDAgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3Mg RW1BbGlhc0NvbnRyb2xUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5 cGUgcHRyX3R5cGU7CUVtQWxpYXNDb250cm9sVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNDb250 cm9sVHlwZSAgCShjb25zdCBFbUFsaWFzQ29udHJvbFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0 cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2 b2lkKQkJCXsgcmV0dXJuICAgICAyMCAgOyB9CUVtQWxpYXNDb250cm9sVHlwZSAgPEE+JglvcGVy YXRvcj0gKGNvbnN0IEVtQWxpYXNDb250cm9sVHlwZSAgPEE+Jik7CUVtQWxpYXNDb250cm9sVHlw ZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNDb250cm9sVHlwZSAgPEE+CW9w ZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNDb250cm9sVHlwZSAgCSh2b2lk KTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc0ludDE2IDxBPgkgCQkJCQkJ aWQgOyAJIEVtQWxpYXNSZWN0YW5nbGVUeXBlIDxBPgkgCQkJCWJvdW5kcyA7IAkgRW1BbGlhc2Vt dXB0ciA8QT4JIAkJCQkJCXRleHQgOyAJIEVtQWxpYXNDb250cm9sQXR0clR5cGUgPEE+CSAJCQlh dHRyIDsgCSBFbUFsaWFzQ29udHJvbFN0eWxlVHlwZSA8QT4JIAkJCXN0eWxlIDsgCSBFbUFsaWFz Rm9udElEIDxBPgkgCQkJCQkJZm9udCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJZ3JvdXAg OyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXJlc2VydmVkIDsgIAkgICAgIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfaWQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2JvdW5kcyAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfdGV4dCAgKHZvaWQpIHsgcmV0dXJuICAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2F0dHIgICh2b2lkKSB7IHJldHVybiAgMTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9zdHlsZSAgKHZvaWQpIHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2ZvbnQgICh2b2lkKSB7IHJldHVybiAgMTcgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9n cm91cCAgKHZvaWQpIHsgcmV0dXJuICAxOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jl c2VydmVkICAodm9pZCkgeyByZXR1cm4gIDE5IDsgfSAgCX07IAljbGFzcyBFbVByb3h5Q29udHJv bFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUNvbnRyb2xU eXBlICAJKHZvaWQpOwlFbVByb3h5Q29udHJvbFR5cGUgIAkoY29uc3QgRW1Qcm94eUNvbnRyb2xU eXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlw ZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVy biAgICAgMjAgIDsgfQlFbVByb3h5Q29udHJvbFR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Q cm94eUNvbnRyb2xUeXBlICAmKTsJRW1BbGlhc0NvbnRyb2xUeXBlICA8TEFTPglvcGVyYXRvcltd IChpbnQpOwljb25zdCBFbUFsaWFzQ29udHJvbFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkg Y29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDIwICBdOwl9IGZMb2Nh bERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCWlkIDsgCSBFbUFs aWFzUmVjdGFuZ2xlVHlwZSA8TEFTPgkgCQkJCWJvdW5kcyA7IAkgRW1BbGlhc2VtdXB0ciA8TEFT PgkgCQkJCQkJdGV4dCA7IAkgRW1BbGlhc0NvbnRyb2xBdHRyVHlwZSA8TEFTPgkgCQkJYXR0ciA7 IAkgRW1BbGlhc0NvbnRyb2xTdHlsZVR5cGUgPExBUz4JIAkJCXN0eWxlIDsgCSBFbUFsaWFzRm9u dElEIDxMQVM+CSAJCQkJCQlmb250IDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCWdyb3Vw IDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCXJlc2VydmVkIDsgIAkgICAgIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfaWQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2JvdW5kcyAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfdGV4dCAgKHZvaWQpIHsgcmV0dXJuICAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2F0dHIgICh2b2lkKSB7IHJldHVybiAgMTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9zdHlsZSAgKHZvaWQpIHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2ZvbnQgICh2b2lkKSB7IHJldHVybiAgMTcgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9ncm91cCAgKHZvaWQpIHsgcmV0dXJuICAxOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X3Jlc2VydmVkICAodm9pZCkgeyByZXR1cm4gIDE5IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNs YXNzIEE+CWNsYXNzIEVtQWxpYXNHcmFwaGljQ29udHJvbFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRl ZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc0dyYXBoaWNDb250cm9sVHlw ZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNHcmFwaGljQ29udHJvbFR5cGUgIAkoY29uc3QgRW1BbGlh c0dyYXBoaWNDb250cm9sVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7 IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4g ICAgIDIwICA7IH0JRW1BbGlhc0dyYXBoaWNDb250cm9sVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNv bnN0IEVtQWxpYXNHcmFwaGljQ29udHJvbFR5cGUgIDxBPiYpOwlFbUFsaWFzR3JhcGhpY0NvbnRy b2xUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0dyYXBoaWNDb250cm9s VHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNHcmFwaGlj Q29udHJvbFR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxp YXNVSW50MTYgPEE+CSAJCQkJCQlpZCA7IAkgRW1BbGlhc1JlY3RhbmdsZVR5cGUgPEE+CSAJCQkJ Ym91bmRzIDsgCSBFbUFsaWFzRG1SZXNJRCA8QT4JIAkJCQkJYml0bWFwSUQgOyAJIEVtQWxpYXNE bVJlc0lEIDxBPgkgCQkJCQlzZWxlY3RlZEJpdG1hcElEIDsgCSBFbUFsaWFzQ29udHJvbEF0dHJU eXBlIDxBPgkgCQkJYXR0ciA7IAkgRW1BbGlhc0NvbnRyb2xTdHlsZVR5cGUgPEE+CSAJCQlzdHls ZSA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJdW51c2VkIDsgCSBFbUFsaWFzVUludDggPEE+ CSAJCQkJCQlncm91cCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJcmVzZXJ2ZWQgOyAgCSAg ICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYm91bmRzICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9iaXRtYXBJRCAgKHZvaWQpIHsgcmV0dXJuICAxMCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX3NlbGVjdGVkQml0bWFwSUQgICh2b2lkKSB7IHJldHVybiAg MTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hdHRyICAodm9pZCkgeyByZXR1cm4gIDE0 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3R5bGUgICh2b2lkKSB7IHJldHVybiAgMTYg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91bnVzZWQgICh2b2lkKSB7IHJldHVybiAgMTcg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9ncm91cCAgKHZvaWQpIHsgcmV0dXJuICAxOCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jlc2VydmVkICAodm9pZCkgeyByZXR1cm4gIDE5 IDsgfSAgCX07IAljbGFzcyBFbVByb3h5R3JhcGhpY0NvbnRyb2xUeXBlICAJewlwdWJsaWM6CXR5 cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlHcmFwaGljQ29udHJvbFR5cGUgIAkodm9pZCk7 CUVtUHJveHlHcmFwaGljQ29udHJvbFR5cGUgIAkoY29uc3QgRW1Qcm94eUdyYXBoaWNDb250cm9s VHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5 cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1 cm4gICAgIDIwICA7IH0JRW1Qcm94eUdyYXBoaWNDb250cm9sVHlwZSAgJgkJb3BlcmF0b3I9IChj b25zdCBFbVByb3h5R3JhcGhpY0NvbnRyb2xUeXBlICAmKTsJRW1BbGlhc0dyYXBoaWNDb250cm9s VHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0dyYXBoaWNDb250cm9s VHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hh cgkJCV9ieXRlc1sgICAgMjAgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNV SW50MTYgPExBUz4JIAkJCQkJCWlkIDsgCSBFbUFsaWFzUmVjdGFuZ2xlVHlwZSA8TEFTPgkgCQkJ CWJvdW5kcyA7IAkgRW1BbGlhc0RtUmVzSUQgPExBUz4JIAkJCQkJYml0bWFwSUQgOyAJIEVtQWxp YXNEbVJlc0lEIDxMQVM+CSAJCQkJCXNlbGVjdGVkQml0bWFwSUQgOyAJIEVtQWxpYXNDb250cm9s QXR0clR5cGUgPExBUz4JIAkJCWF0dHIgOyAJIEVtQWxpYXNDb250cm9sU3R5bGVUeXBlIDxMQVM+ CSAJCQlzdHlsZSA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQl1bnVzZWQgOyAJIEVtQWxp YXNVSW50OCA8TEFTPgkgCQkJCQkJZ3JvdXAgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJ cmVzZXJ2ZWQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pZCAgKHZvaWQpIHsgcmV0 dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYm91bmRzICAodm9pZCkgeyByZXR1 cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9iaXRtYXBJRCAgKHZvaWQpIHsgcmV0 dXJuICAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NlbGVjdGVkQml0bWFwSUQgICh2 b2lkKSB7IHJldHVybiAgMTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hdHRyICAodm9p ZCkgeyByZXR1cm4gIDE0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3R5bGUgICh2b2lk KSB7IHJldHVybiAgMTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91bnVzZWQgICh2b2lk KSB7IHJldHVybiAgMTcgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9ncm91cCAgKHZvaWQp IHsgcmV0dXJuICAxOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jlc2VydmVkICAodm9p ZCkgeyByZXR1cm4gIDE5IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVt QWxpYXNTbGlkZXJDb250cm9sVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0 cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzU2xpZGVyQ29udHJvbFR5cGUgIAkocHRyX3R5cGUpOwlF bUFsaWFzU2xpZGVyQ29udHJvbFR5cGUgIAkoY29uc3QgRW1BbGlhc1NsaWRlckNvbnRyb2xUeXBl ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3Rh dGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMzAgIDsgfQlFbUFsaWFz U2xpZGVyQ29udHJvbFR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzU2xpZGVyQ29u dHJvbFR5cGUgIDxBPiYpOwlFbUFsaWFzU2xpZGVyQ29udHJvbFR5cGUgIDxBPglvcGVyYXRvcltd IChpbnQpOwljb25zdCBFbUFsaWFzU2xpZGVyQ29udHJvbFR5cGUgIDxBPglvcGVyYXRvcltdIChp bnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzU2xpZGVyQ29udHJvbFR5cGUgIAkodm9pZCk7CXB0 cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlpZCA7 IAkgRW1BbGlhc1JlY3RhbmdsZVR5cGUgPEE+CSAJCQkJYm91bmRzIDsgCSBFbUFsaWFzRG1SZXNJ RCA8QT4JIAkJCQkJdGh1bWJJRCA7IAkgRW1BbGlhc0RtUmVzSUQgPEE+CSAJCQkJCWJhY2tncm91 bmRJRCA7IAkgRW1BbGlhc0NvbnRyb2xBdHRyVHlwZSA8QT4JIAkJCWF0dHIgOyAJIEVtQWxpYXND b250cm9sU3R5bGVUeXBlIDxBPgkgCQkJc3R5bGUgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJ CXJlc2VydmVkIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJbWluVmFsdWUgOyAJIEVtQWxp YXNVSW50MTYgPEE+CSAJCQkJCQltYXhWYWx1ZSA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJ CXBhZ2VTaXplIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJdmFsdWUgOyAJIEVtQWxpYXNl bXVwdHIgPEE+CSAJCQkJCQlhY3RpdmVTbGlkZXJQIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfaWQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2JvdW5kcyAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf dGh1bWJJRCAgKHZvaWQpIHsgcmV0dXJuICAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2JhY2tncm91bmRJRCAgKHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2F0dHIgICh2b2lkKSB7IHJldHVybiAgMTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9zdHlsZSAgKHZvaWQpIHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3Jlc2VydmVkICAodm9pZCkgeyByZXR1cm4gIDE3IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfbWluVmFsdWUgICh2b2lkKSB7IHJldHVybiAgMTggOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9tYXhWYWx1ZSAgKHZvaWQpIHsgcmV0dXJuICAyMCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX3BhZ2VTaXplICAodm9pZCkgeyByZXR1cm4gIDIyIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfdmFsdWUgICh2b2lkKSB7IHJldHVybiAgMjQgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9hY3RpdmVTbGlkZXJQICAodm9pZCkgeyByZXR1cm4gIDI2IDsgfSAgCX07IAlj bGFzcyBFbVByb3h5U2xpZGVyQ29udHJvbFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBw dHJfdHlwZTsJRW1Qcm94eVNsaWRlckNvbnRyb2xUeXBlICAJKHZvaWQpOwlFbVByb3h5U2xpZGVy Q29udHJvbFR5cGUgIAkoY29uc3QgRW1Qcm94eVNsaWRlckNvbnRyb2xUeXBlICAmKTsJcHRyX3R5 cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7 IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMzAgIDsgfQlF bVByb3h5U2xpZGVyQ29udHJvbFR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eVNsaWRl ckNvbnRyb2xUeXBlICAmKTsJRW1BbGlhc1NsaWRlckNvbnRyb2xUeXBlICA8TEFTPglvcGVyYXRv cltdIChpbnQpOwljb25zdCBFbUFsaWFzU2xpZGVyQ29udHJvbFR5cGUgIDxMQVM+CW9wZXJhdG9y W10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDMwICBd Owl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlp ZCA7IAkgRW1BbGlhc1JlY3RhbmdsZVR5cGUgPExBUz4JIAkJCQlib3VuZHMgOyAJIEVtQWxpYXNE bVJlc0lEIDxMQVM+CSAJCQkJCXRodW1iSUQgOyAJIEVtQWxpYXNEbVJlc0lEIDxMQVM+CSAJCQkJ CWJhY2tncm91bmRJRCA7IAkgRW1BbGlhc0NvbnRyb2xBdHRyVHlwZSA8TEFTPgkgCQkJYXR0ciA7 IAkgRW1BbGlhc0NvbnRyb2xTdHlsZVR5cGUgPExBUz4JIAkJCXN0eWxlIDsgCSBFbUFsaWFzVUlu dDggPExBUz4JIAkJCQkJCXJlc2VydmVkIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlt aW5WYWx1ZSA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJbWF4VmFsdWUgOyAJIEVtQWxp YXNVSW50MTYgPExBUz4JIAkJCQkJCXBhZ2VTaXplIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJ CQkJCQl2YWx1ZSA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJYWN0aXZlU2xpZGVyUCA7 ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2lkICAodm9pZCkgeyByZXR1cm4gIDAgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9ib3VuZHMgICh2b2lkKSB7IHJldHVybiAgMiA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RodW1iSUQgICh2b2lkKSB7IHJldHVybiAgMTAgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9iYWNrZ3JvdW5kSUQgICh2b2lkKSB7IHJldHVybiAg MTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hdHRyICAodm9pZCkgeyByZXR1cm4gIDE0 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3R5bGUgICh2b2lkKSB7IHJldHVybiAgMTYg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZXNlcnZlZCAgKHZvaWQpIHsgcmV0dXJuICAx NyA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21pblZhbHVlICAodm9pZCkgeyByZXR1cm4g IDE4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbWF4VmFsdWUgICh2b2lkKSB7IHJldHVy biAgMjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wYWdlU2l6ZSAgKHZvaWQpIHsgcmV0 dXJuICAyMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3ZhbHVlICAodm9pZCkgeyByZXR1 cm4gIDI0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYWN0aXZlU2xpZGVyUCAgKHZvaWQp IHsgcmV0dXJuICAyNiA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFs aWFzQml0bWFwVHlwZVYyICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUg cHRyX3R5cGU7CUVtQWxpYXNCaXRtYXBUeXBlVjIgIAkocHRyX3R5cGUpOwlFbUFsaWFzQml0bWFw VHlwZVYyICAJKGNvbnN0IEVtQWxpYXNCaXRtYXBUeXBlVjIgICYpOwlwdHJfdHlwZQkJCUdldFB0 cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2 b2lkKQkJCXsgcmV0dXJuICAgICAxNiAgOyB9CUVtQWxpYXNCaXRtYXBUeXBlVjIgIDxBPiYJb3Bl cmF0b3I9IChjb25zdCBFbUFsaWFzQml0bWFwVHlwZVYyICA8QT4mKTsJRW1BbGlhc0JpdG1hcFR5 cGVWMiAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNCaXRtYXBUeXBlVjIgIDxB PglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzQml0bWFwVHlwZVYyICAJ KHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzSW50MTYgPEE+CSAJ CQkJCQl3aWR0aCA7IAkgRW1BbGlhc0ludDE2IDxBPgkgCQkJCQkJaGVpZ2h0IDsgCSBFbUFsaWFz VUludDE2IDxBPgkgCQkJCQkJcm93Qnl0ZXMgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlm bGFncyA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJcGl4ZWxTaXplIDsgCSBFbUFsaWFzVUlu dDggPEE+CSAJCQkJCQl2ZXJzaW9uIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJbmV4dERl cHRoT2Zmc2V0IDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQl0cmFuc3BhcmVudEluZGV4IDsg CSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQljb21wcmVzc2lvblR5cGUgOyAJIEVtQWxpYXNVSW50 MTYgPEE+CSAJCQkJCQlyZXNlcnZlZCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3dp ZHRoICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9oZWln aHQgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jvd0J5 dGVzICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mbGFn cyAgKHZvaWQpIHsgcmV0dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcGl4ZWxT aXplICAodm9pZCkgeyByZXR1cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl92ZXJz aW9uICAodm9pZCkgeyByZXR1cm4gIDkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uZXh0 RGVwdGhPZmZzZXQgICh2b2lkKSB7IHJldHVybiAgMTAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl90cmFuc3BhcmVudEluZGV4ICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfY29tcHJlc3Npb25UeXBlICAodm9pZCkgeyByZXR1cm4gIDEzIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVzZXJ2ZWQgICh2b2lkKSB7IHJldHVybiAgMTQgOyB9 ICAJfTsgCWNsYXNzIEVtUHJveHlCaXRtYXBUeXBlVjIgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lk KiBwdHJfdHlwZTsJRW1Qcm94eUJpdG1hcFR5cGVWMiAgCSh2b2lkKTsJRW1Qcm94eUJpdG1hcFR5 cGVWMiAgCShjb25zdCBFbVByb3h5Qml0bWFwVHlwZVYyICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJ KHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNp emVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTYgIDsgfQlFbVByb3h5Qml0bWFw VHlwZVYyICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlCaXRtYXBUeXBlVjIgICYpOwlFbUFs aWFzQml0bWFwVHlwZVYyICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzQml0 bWFwVHlwZVYyICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3Qg ewljaGFyCQkJX2J5dGVzWyAgICAxNiAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1B bGlhc0ludDE2IDxMQVM+CSAJCQkJCQl3aWR0aCA7IAkgRW1BbGlhc0ludDE2IDxMQVM+CSAJCQkJ CQloZWlnaHQgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXJvd0J5dGVzIDsgCSBFbUFs aWFzVUludDE2IDxMQVM+CSAJCQkJCQlmbGFncyA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJ CQlwaXhlbFNpemUgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJdmVyc2lvbiA7IAkgRW1B bGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJbmV4dERlcHRoT2Zmc2V0IDsgCSBFbUFsaWFzVUludDgg PExBUz4JIAkJCQkJCXRyYW5zcGFyZW50SW5kZXggOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJ CQkJY29tcHJlc3Npb25UeXBlIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlyZXNlcnZl ZCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3dpZHRoICAodm9pZCkgeyByZXR1cm4g IDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9oZWlnaHQgICh2b2lkKSB7IHJldHVybiAg MiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jvd0J5dGVzICAodm9pZCkgeyByZXR1cm4g IDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mbGFncyAgKHZvaWQpIHsgcmV0dXJuICA2 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcGl4ZWxTaXplICAodm9pZCkgeyByZXR1cm4g IDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl92ZXJzaW9uICAodm9pZCkgeyByZXR1cm4g IDkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uZXh0RGVwdGhPZmZzZXQgICh2b2lkKSB7 IHJldHVybiAgMTAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90cmFuc3BhcmVudEluZGV4 ICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29tcHJl c3Npb25UeXBlICAodm9pZCkgeyByZXR1cm4gIDEzIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfcmVzZXJ2ZWQgICh2b2lkKSB7IHJldHVybiAgMTQgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8 Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc0JpdG1hcFR5cGVWMyAgCXsJcHVibGljOgl0eXBlZGVmIHR5 cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzQml0bWFwVHlwZVYzICAJKHB0cl90 eXBlKTsJRW1BbGlhc0JpdG1hcFR5cGVWMyAgCShjb25zdCBFbUFsaWFzQml0bWFwVHlwZVYzICAm KTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGlj IHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMjQgIDsgfQlFbUFsaWFzQml0 bWFwVHlwZVYzICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc0JpdG1hcFR5cGVWMyAgPEE+ Jik7CUVtQWxpYXNCaXRtYXBUeXBlVjMgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFs aWFzQml0bWFwVHlwZVYzICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1B bGlhc0JpdG1hcFR5cGVWMyAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAg RW1BbGlhc0ludDE2IDxBPgkgCQkJCQkJd2lkdGggOyAJIEVtQWxpYXNJbnQxNiA8QT4JIAkJCQkJ CWhlaWdodCA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXJvd0J5dGVzIDsgCSBFbUFsaWFz VUludDE2IDxBPgkgCQkJCQkJZmxhZ3MgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXBpeGVs U2l6ZSA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJdmVyc2lvbiA7IAkgRW1BbGlhc1VJbnQ4 IDxBPgkgCQkJCQkJc2l6ZSA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJcGl4ZWxGb3JtYXQg OyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCXVudXNlZCA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkg CQkJCQkJY29tcHJlc3Npb25UeXBlIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJZGVuc2l0 eSA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCXRyYW5zcGFyZW50VmFsdWUgOyAJIEVtQWxp YXNVSW50MzIgPEE+CSAJCQkJCQluZXh0RGVwdGhPZmZzZXQgOyAgCSAgICAgc3RhdGljIHNpemVf dAlvZmZzZXRvZl93aWR0aCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfaGVpZ2h0ICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9yb3dCeXRlcyAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfZmxhZ3MgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3BpeGVsU2l6ZSAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfdmVyc2lvbiAgKHZvaWQpIHsgcmV0dXJuICA5IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2Zfc2l6ZSAgKHZvaWQpIHsgcmV0dXJuICAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3BpeGVsRm9ybWF0ICAodm9pZCkgeyByZXR1cm4gIDExIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfdW51c2VkICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfY29tcHJlc3Npb25UeXBlICAodm9pZCkgeyByZXR1cm4gIDEzIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGVuc2l0eSAgKHZvaWQpIHsgcmV0dXJuICAxNCA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX3RyYW5zcGFyZW50VmFsdWUgICh2b2lkKSB7IHJldHVybiAg MTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uZXh0RGVwdGhPZmZzZXQgICh2b2lkKSB7 IHJldHVybiAgMjAgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlCaXRtYXBUeXBlVjMgIAl7CXB1Ymxp YzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUJpdG1hcFR5cGVWMyAgCSh2b2lkKTsJ RW1Qcm94eUJpdG1hcFR5cGVWMyAgCShjb25zdCBFbVByb3h5Qml0bWFwVHlwZVYzICAmKTsJcHRy X3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERh dGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMjQgIDsg fQlFbVByb3h5Qml0bWFwVHlwZVYzICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlCaXRtYXBU eXBlVjMgICYpOwlFbUFsaWFzQml0bWFwVHlwZVYzICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwlj b25zdCBFbUFsaWFzQml0bWFwVHlwZVYzICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlw cml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAyNCAgXTsJfSBmTG9jYWxEYXRhOwlw dWJsaWM6CSAgICAgRW1BbGlhc0ludDE2IDxMQVM+CSAJCQkJCQl3aWR0aCA7IAkgRW1BbGlhc0lu dDE2IDxMQVM+CSAJCQkJCQloZWlnaHQgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXJv d0J5dGVzIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlmbGFncyA7IAkgRW1BbGlhc1VJ bnQ4IDxMQVM+CSAJCQkJCQlwaXhlbFNpemUgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJ dmVyc2lvbiA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlzaXplIDsgCSBFbUFsaWFzVUlu dDggPExBUz4JIAkJCQkJCXBpeGVsRm9ybWF0IDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJ CXVudXNlZCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQljb21wcmVzc2lvblR5cGUgOyAJ IEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWRlbnNpdHkgOyAJIEVtQWxpYXNVSW50MzIgPExB Uz4JIAkJCQkJCXRyYW5zcGFyZW50VmFsdWUgOyAJIEVtQWxpYXNVSW50MzIgPExBUz4JIAkJCQkJ CW5leHREZXB0aE9mZnNldCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3dpZHRoICAo dm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9oZWlnaHQgICh2 b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jvd0J5dGVzICAo dm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mbGFncyAgKHZv aWQpIHsgcmV0dXJuICA2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcGl4ZWxTaXplICAo dm9pZCkgeyByZXR1cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl92ZXJzaW9uICAo dm9pZCkgeyByZXR1cm4gIDkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zaXplICAodm9p ZCkgeyByZXR1cm4gIDEwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcGl4ZWxGb3JtYXQg ICh2b2lkKSB7IHJldHVybiAgMTEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl91bnVzZWQg ICh2b2lkKSB7IHJldHVybiAgMTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb21wcmVz c2lvblR5cGUgICh2b2lkKSB7IHJldHVybiAgMTMgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9kZW5zaXR5ICAodm9pZCkgeyByZXR1cm4gIDE0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfdHJhbnNwYXJlbnRWYWx1ZSAgKHZvaWQpIHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX25leHREZXB0aE9mZnNldCAgKHZvaWQpIHsgcmV0dXJuICAyMCA7IH0gIAl9 OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzRnJhbWVCaXRzVHlwZSAgCXsJ cHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzRnJh bWVCaXRzVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNGcmFtZUJpdHNUeXBlICAJKGNvbnN0IEVt QWxpYXNGcmFtZUJpdHNUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsg cmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAg ICAgMiAgOyB9CUVtQWxpYXNGcmFtZUJpdHNUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1B bGlhc0ZyYW1lQml0c1R5cGUgIDxBPiYpOwlFbUFsaWFzRnJhbWVCaXRzVHlwZSAgPEE+CW9wZXJh dG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNGcmFtZUJpdHNUeXBlICA8QT4Jb3BlcmF0b3JbXSAo aW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc0ZyYW1lQml0c1R5cGUgIAkodm9pZCk7CXB0cl90 eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlmbGFncyA7 ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZsYWdzICAodm9pZCkgeyByZXR1cm4gIDAg OyB9ICAJfTsgCWNsYXNzIEVtUHJveHlGcmFtZUJpdHNUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYg dm9pZCogcHRyX3R5cGU7CUVtUHJveHlGcmFtZUJpdHNUeXBlICAJKHZvaWQpOwlFbVByb3h5RnJh bWVCaXRzVHlwZSAgCShjb25zdCBFbVByb3h5RnJhbWVCaXRzVHlwZSAgJik7CXB0cl90eXBlCQkJ R2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0 YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIgIDsgfQlFbVByb3h5 RnJhbWVCaXRzVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5RnJhbWVCaXRzVHlwZSAg Jik7CUVtQWxpYXNGcmFtZUJpdHNUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBF bUFsaWFzRnJhbWVCaXRzVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0 ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMiAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6 CSAgICAgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJZmxhZ3MgOyAgCSAgICAgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9mbGFncyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAgCX07ICAgCSAgdGVt cGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNXaW5kb3dGbGFnc1R5cGUgIAl7CXB1YmxpYzoJ dHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc1dpbmRvd0ZsYWdz VHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNXaW5kb3dGbGFnc1R5cGUgIAkoY29uc3QgRW1BbGlh c1dpbmRvd0ZsYWdzVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJl dHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAg IDIgIDsgfQlFbUFsaWFzV2luZG93RmxhZ3NUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1B bGlhc1dpbmRvd0ZsYWdzVHlwZSAgPEE+Jik7CUVtQWxpYXNXaW5kb3dGbGFnc1R5cGUgIDxBPglv cGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzV2luZG93RmxhZ3NUeXBlICA8QT4Jb3BlcmF0 b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc1dpbmRvd0ZsYWdzVHlwZSAgCSh2b2lk KTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJ CWZsYWdzIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmxhZ3MgICh2b2lkKSB7IHJl dHVybiAgMCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eVdpbmRvd0ZsYWdzVHlwZSAgCXsJcHVibGlj Ogl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5V2luZG93RmxhZ3NUeXBlICAJKHZvaWQp OwlFbVByb3h5V2luZG93RmxhZ3NUeXBlICAJKGNvbnN0IEVtUHJveHlXaW5kb3dGbGFnc1R5cGUg ICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAm ZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAg ICAyICA7IH0JRW1Qcm94eVdpbmRvd0ZsYWdzVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVBy b3h5V2luZG93RmxhZ3NUeXBlICAmKTsJRW1BbGlhc1dpbmRvd0ZsYWdzVHlwZSAgPExBUz4Jb3Bl cmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1dpbmRvd0ZsYWdzVHlwZSAgPExBUz4Jb3BlcmF0 b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMiAg XTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJ ZmxhZ3MgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mbGFncyAgKHZvaWQpIHsgcmV0 dXJuICAwIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNXaW5k b3dUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7 CUVtQWxpYXNXaW5kb3dUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc1dpbmRvd1R5cGUgIAkoY29u c3QgRW1BbGlhc1dpbmRvd1R5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJ eyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJu ICAgICA0MCAgOyB9CUVtQWxpYXNXaW5kb3dUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1B bGlhc1dpbmRvd1R5cGUgIDxBPiYpOwlFbUFsaWFzV2luZG93VHlwZSAgPEE+CW9wZXJhdG9yW10g KGludCk7CWNvbnN0IEVtQWxpYXNXaW5kb3dUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25z dDsJcHJpdmF0ZToJRW1BbGlhc1dpbmRvd1R5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJ cHVibGljOgkgICAgIEVtQWxpYXNDb29yZCA8QT4JIAkJCQkJCWRpc3BsYXlXaWR0aFYyMCA7IAkg RW1BbGlhc0Nvb3JkIDxBPgkgCQkJCQkJZGlzcGxheUhlaWdodFYyMCA7IAkgRW1BbGlhc2VtdXB0 ciA8QT4JIAkJCQkJCWRpc3BsYXlBZGRyVjIwIDsgCSBFbUFsaWFzV2luZG93RmxhZ3NUeXBlIDxB PgkgCQkJd2luZG93RmxhZ3MgOyAJIEVtQWxpYXNSZWN0YW5nbGVUeXBlIDxBPgkgCQkJCXdpbmRv d0JvdW5kcyA7IAkgRW1BbGlhc0Fic1JlY3RUeXBlIDxBPgkgCQkJCWNsaXBwaW5nQm91bmRzIDsg CSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJYml0bWFwUCA7IAkgRW1BbGlhc0ZyYW1lQml0c1R5 cGUgPEE+CSAJCQkJZnJhbWVUeXBlIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJZHJhd1N0 YXRlUCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCW5leHRXaW5kb3cgOyAgCSAgICAgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9kaXNwbGF5V2lkdGhWMjAgICh2b2lkKSB7IHJldHVybiAgMCA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Rpc3BsYXlIZWlnaHRWMjAgICh2b2lkKSB7IHJl dHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Rpc3BsYXlBZGRyVjIwICAodm9p ZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl93aW5kb3dGbGFncyAg KHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfd2luZG93Qm91 bmRzICAodm9pZCkgeyByZXR1cm4gIDEwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY2xp cHBpbmdCb3VuZHMgICh2b2lkKSB7IHJldHVybiAgMTggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9iaXRtYXBQICAodm9pZCkgeyByZXR1cm4gIDI2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfZnJhbWVUeXBlICAodm9pZCkgeyByZXR1cm4gIDMwIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfZHJhd1N0YXRlUCAgKHZvaWQpIHsgcmV0dXJuICAzMiA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX25leHRXaW5kb3cgICh2b2lkKSB7IHJldHVybiAgMzYgOyB9ICAJfTsgCWNs YXNzIEVtUHJveHlXaW5kb3dUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7 CUVtUHJveHlXaW5kb3dUeXBlICAJKHZvaWQpOwlFbVByb3h5V2luZG93VHlwZSAgCShjb25zdCBF bVByb3h5V2luZG93VHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJl dHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZv aWQpCQkJeyByZXR1cm4gICAgIDQwICA7IH0JRW1Qcm94eVdpbmRvd1R5cGUgICYJCW9wZXJhdG9y PSAoY29uc3QgRW1Qcm94eVdpbmRvd1R5cGUgICYpOwlFbUFsaWFzV2luZG93VHlwZSAgPExBUz4J b3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1dpbmRvd1R5cGUgIDxMQVM+CW9wZXJhdG9y W10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDQwICBd Owl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzQ29vcmQgPExBUz4JIAkJCQkJCWRp c3BsYXlXaWR0aFYyMCA7IAkgRW1BbGlhc0Nvb3JkIDxMQVM+CSAJCQkJCQlkaXNwbGF5SGVpZ2h0 VjIwIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlkaXNwbGF5QWRkclYyMCA7IAkgRW1B bGlhc1dpbmRvd0ZsYWdzVHlwZSA8TEFTPgkgCQkJd2luZG93RmxhZ3MgOyAJIEVtQWxpYXNSZWN0 YW5nbGVUeXBlIDxMQVM+CSAJCQkJd2luZG93Qm91bmRzIDsgCSBFbUFsaWFzQWJzUmVjdFR5cGUg PExBUz4JIAkJCQljbGlwcGluZ0JvdW5kcyA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJ Yml0bWFwUCA7IAkgRW1BbGlhc0ZyYW1lQml0c1R5cGUgPExBUz4JIAkJCQlmcmFtZVR5cGUgOyAJ IEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWRyYXdTdGF0ZVAgOyAJIEVtQWxpYXNlbXVwdHIg PExBUz4JIAkJCQkJCW5leHRXaW5kb3cgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9k aXNwbGF5V2lkdGhWMjAgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2Rpc3BsYXlIZWlnaHRWMjAgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2Rpc3BsYXlBZGRyVjIwICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl93aW5kb3dGbGFncyAgKHZvaWQpIHsgcmV0dXJuICA4IDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfd2luZG93Qm91bmRzICAodm9pZCkgeyByZXR1cm4g IDEwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY2xpcHBpbmdCb3VuZHMgICh2b2lkKSB7 IHJldHVybiAgMTggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9iaXRtYXBQICAodm9pZCkg eyByZXR1cm4gIDI2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZnJhbWVUeXBlICAodm9p ZCkgeyByZXR1cm4gIDMwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZHJhd1N0YXRlUCAg KHZvaWQpIHsgcmV0dXJuICAzMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25leHRXaW5k b3cgICh2b2lkKSB7IHJldHVybiAgMzYgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4J Y2xhc3MgRW1BbGlhc0Zvcm1PYmpMaXN0VHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1l IEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzRm9ybU9iakxpc3RUeXBlICAJKHB0cl90eXBl KTsJRW1BbGlhc0Zvcm1PYmpMaXN0VHlwZSAgCShjb25zdCBFbUFsaWFzRm9ybU9iakxpc3RUeXBl ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3Rh dGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNiAgOyB9CUVtQWxpYXNG b3JtT2JqTGlzdFR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzRm9ybU9iakxpc3RU eXBlICA8QT4mKTsJRW1BbGlhc0Zvcm1PYmpMaXN0VHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7 CWNvbnN0IEVtQWxpYXNGb3JtT2JqTGlzdFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0 Owlwcml2YXRlOglFbUFsaWFzRm9ybU9iakxpc3RUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQ dHI7CXB1YmxpYzoJICAgICBFbUFsaWFzRm9ybU9iamVjdEtpbmQgPEE+CSAJCQkJb2JqZWN0VHlw ZSA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJcmVzZXJ2ZWQgOyAJIEVtQWxpYXNlbXVwdHIg PEE+CSAJCQkJCQlvYmplY3QgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9vYmplY3RU eXBlICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yZXNl cnZlZCAgKHZvaWQpIHsgcmV0dXJuICAxIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfb2Jq ZWN0ICAodm9pZCkgeyByZXR1cm4gIDIgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlGb3JtT2JqTGlz dFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUZvcm1PYmpM aXN0VHlwZSAgCSh2b2lkKTsJRW1Qcm94eUZvcm1PYmpMaXN0VHlwZSAgCShjb25zdCBFbVByb3h5 Rm9ybU9iakxpc3RUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0 dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9p ZCkJCQl7IHJldHVybiAgICAgNiAgOyB9CUVtUHJveHlGb3JtT2JqTGlzdFR5cGUgICYJCW9wZXJh dG9yPSAoY29uc3QgRW1Qcm94eUZvcm1PYmpMaXN0VHlwZSAgJik7CUVtQWxpYXNGb3JtT2JqTGlz dFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNGb3JtT2JqTGlzdFR5 cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJ CQlfYnl0ZXNbICAgIDYgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNGb3Jt T2JqZWN0S2luZCA8TEFTPgkgCQkJCW9iamVjdFR5cGUgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkg CQkJCQkJcmVzZXJ2ZWQgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCW9iamVjdCA7ICAJ ICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX29iamVjdFR5cGUgICh2b2lkKSB7IHJldHVybiAg MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jlc2VydmVkICAodm9pZCkgeyByZXR1cm4g IDEgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9vYmplY3QgICh2b2lkKSB7IHJldHVybiAg MiA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzRm9ybUF0dHJU eXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVt QWxpYXNGb3JtQXR0clR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzRm9ybUF0dHJUeXBlICAJKGNv bnN0IEVtQWxpYXNGb3JtQXR0clR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29u c3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0 dXJuICAgICA0ICA7IH0JRW1BbGlhc0Zvcm1BdHRyVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0 IEVtQWxpYXNGb3JtQXR0clR5cGUgIDxBPiYpOwlFbUFsaWFzRm9ybUF0dHJUeXBlICA8QT4Jb3Bl cmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0Zvcm1BdHRyVHlwZSAgPEE+CW9wZXJhdG9yW10g KGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNGb3JtQXR0clR5cGUgIAkodm9pZCk7CXB0cl90 eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlmbGFncyA7 ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZsYWdzICAodm9pZCkgeyByZXR1cm4gIDAg OyB9ICAJfTsgCWNsYXNzIEVtUHJveHlGb3JtQXR0clR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2 b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUZvcm1BdHRyVHlwZSAgCSh2b2lkKTsJRW1Qcm94eUZvcm1B dHRyVHlwZSAgCShjb25zdCBFbVByb3h5Rm9ybUF0dHJUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQ dHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGlj IHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNCAgOyB9CUVtUHJveHlGb3Jt QXR0clR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eUZvcm1BdHRyVHlwZSAgJik7CUVt QWxpYXNGb3JtQXR0clR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNG b3JtQXR0clR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVj dCB7CWNoYXIJCQlfYnl0ZXNbICAgIDQgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVt QWxpYXNVSW50MzIgPExBUz4JIAkJCQkJCWZsYWdzIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfZmxhZ3MgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxj bGFzcyBBPgljbGFzcyBFbUFsaWFzRm9ybVR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFt ZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc0Zvcm1UeXBlICAJKHB0cl90eXBlKTsJRW1B bGlhc0Zvcm1UeXBlICAJKGNvbnN0IEVtQWxpYXNGb3JtVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0 UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJ KHZvaWQpCQkJeyByZXR1cm4gICAgIDY4ICA7IH0JRW1BbGlhc0Zvcm1UeXBlICA8QT4mCW9wZXJh dG9yPSAoY29uc3QgRW1BbGlhc0Zvcm1UeXBlICA8QT4mKTsJRW1BbGlhc0Zvcm1UeXBlICA8QT4J b3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0Zvcm1UeXBlICA8QT4Jb3BlcmF0b3JbXSAo aW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc0Zvcm1UeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJ CWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzV2luZG93VHlwZSA8QT4JIAkJCQkJd2luZG93IDsg CSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJZm9ybUlkIDsgCSBFbUFsaWFzRm9ybUF0dHJUeXBl IDxBPgkgCQkJCWF0dHIgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQliaXRzQmVoaW5kRm9y bSA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWhhbmRsZXIgOyAJIEVtQWxpYXNVSW50MTYg PEE+CSAJCQkJCQlmb2N1cyA7IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWRlZmF1bHRCdXR0 b24gOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQloZWxwUnNjSWQgOyAJIEVtQWxpYXNVSW50 MTYgPEE+CSAJCQkJCQltZW51UnNjSWQgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQludW1P YmplY3RzIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJb2JqZWN0cyA7ICAJICAgICBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3dpbmRvdyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfZm9ybUlkICAodm9pZCkgeyByZXR1cm4gIDQwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfYXR0ciAgKHZvaWQpIHsgcmV0dXJuICA0MiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2JpdHNCZWhpbmRGb3JtICAodm9pZCkgeyByZXR1cm4gIDQ2IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaGFuZGxlciAgKHZvaWQpIHsgcmV0dXJuICA1MCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZvY3VzICAodm9pZCkgeyByZXR1cm4gIDU0IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGVmYXVsdEJ1dHRvbiAgKHZvaWQpIHsgcmV0dXJuICA1 NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2hlbHBSc2NJZCAgKHZvaWQpIHsgcmV0dXJu ICA1OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21lbnVSc2NJZCAgKHZvaWQpIHsgcmV0 dXJuICA2MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX251bU9iamVjdHMgICh2b2lkKSB7 IHJldHVybiAgNjIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9vYmplY3RzICAodm9pZCkg eyByZXR1cm4gIDY0IDsgfSAgCX07IAljbGFzcyBFbVByb3h5Rm9ybVR5cGUgIAl7CXB1YmxpYzoJ dHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUZvcm1UeXBlICAJKHZvaWQpOwlFbVByb3h5 Rm9ybVR5cGUgIAkoY29uc3QgRW1Qcm94eUZvcm1UeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJ KHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNp emVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNjggIDsgfQlFbVByb3h5Rm9ybVR5 cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eUZvcm1UeXBlICAmKTsJRW1BbGlhc0Zvcm1U eXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzRm9ybVR5cGUgIDxMQVM+ CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNb ICAgIDY4ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzV2luZG93VHlwZSA8 TEFTPgkgCQkJCQl3aW5kb3cgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWZvcm1JZCA7 IAkgRW1BbGlhc0Zvcm1BdHRyVHlwZSA8TEFTPgkgCQkJCWF0dHIgOyAJIEVtQWxpYXNlbXVwdHIg PExBUz4JIAkJCQkJCWJpdHNCZWhpbmRGb3JtIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJ CQloYW5kbGVyIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlmb2N1cyA7IAkgRW1BbGlh c1VJbnQxNiA8TEFTPgkgCQkJCQkJZGVmYXVsdEJ1dHRvbiA7IAkgRW1BbGlhc1VJbnQxNiA8TEFT PgkgCQkJCQkJaGVscFJzY0lkIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQltZW51UnNj SWQgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCW51bU9iamVjdHMgOyAJIEVtQWxpYXNl bXVwdHIgPExBUz4JIAkJCQkJCW9iamVjdHMgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl93aW5kb3cgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2Zvcm1JZCAgKHZvaWQpIHsgcmV0dXJuICA0MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2F0dHIgICh2b2lkKSB7IHJldHVybiAgNDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9i aXRzQmVoaW5kRm9ybSAgKHZvaWQpIHsgcmV0dXJuICA0NiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2hhbmRsZXIgICh2b2lkKSB7IHJldHVybiAgNTAgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9mb2N1cyAgKHZvaWQpIHsgcmV0dXJuICA1NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2RlZmF1bHRCdXR0b24gICh2b2lkKSB7IHJldHVybiAgNTYgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9oZWxwUnNjSWQgICh2b2lkKSB7IHJldHVybiAgNTggOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9tZW51UnNjSWQgICh2b2lkKSB7IHJldHVybiAgNjAgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9udW1PYmplY3RzICAodm9pZCkgeyByZXR1cm4gIDYyIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfb2JqZWN0cyAgKHZvaWQpIHsgcmV0dXJuICA2NCA7IH0g IAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzY2p4bG4gIAl7CXB1Ymxp YzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc2NqeGxuICAJ KHB0cl90eXBlKTsJRW1BbGlhc2NqeGxuICAJKGNvbnN0IEVtQWxpYXNjanhsbiAgJik7CXB0cl90 eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJ CUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDggIDsgfQlFbUFsaWFzY2p4bG4gIDxBPiYJ b3BlcmF0b3I9IChjb25zdCBFbUFsaWFzY2p4bG4gIDxBPiYpOwlFbUFsaWFzY2p4bG4gIDxBPglv cGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzY2p4bG4gIDxBPglvcGVyYXRvcltdIChpbnQp IGNvbnN0Owlwcml2YXRlOglFbUFsaWFzY2p4bG4gIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJ cHVibGljOgkgICAgIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQkJeGxubmV4dCA7IAkgRW1BbGlh c2VtdXB0ciA8QT4JIAkJCQkJCQl4bG5wcmV2IDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfeGxubmV4dCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfeGxucHJldiAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAgCX07IAljbGFzcyBFbVByb3h5Y2p4 bG4gIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eWNqeGxuICAJKHZv aWQpOwlFbVByb3h5Y2p4bG4gIAkoY29uc3QgRW1Qcm94eWNqeGxuICAmKTsJcHRyX3R5cGUJCQlH ZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3Rh dGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgOCAgOyB9CUVtUHJveHlj anhsbiAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5Y2p4bG4gICYpOwlFbUFsaWFzY2p4bG4g IDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNjanhsbiAgPExBUz4Jb3BlcmF0 b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgOCAg XTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJ CXhsbm5leHQgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCQl4bG5wcmV2IDsgIAkgICAg IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfeGxubmV4dCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfeGxucHJldiAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAg CX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNjal94Z2JoICAJewlwdWJs aWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNjal94Z2Jo ICAJKHB0cl90eXBlKTsJRW1BbGlhc2NqX3hnYmggIAkoY29uc3QgRW1BbGlhc2NqX3hnYmggICYp OwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMg c2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyOCAgOyB9CUVtQWxpYXNjal94 Z2JoICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc2NqX3hnYmggIDxBPiYpOwlFbUFsaWFz Y2pfeGdiaCAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNjal94Z2JoICA8QT4J b3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc2NqX3hnYmggIAkodm9pZCk7 CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNjanhsbiA8QT4JIAkJCQkJCQl4 Z2JobG4gOyAJIEVtQWxpYXNjanhsbiA8QT4JIAkJCQkJCQl4Z2Jod2FpdCA7IAkgRW1BbGlhc0lu dDE2IDxBPgkgCQkJCQkJCXhnYmhwcnkgOyAJIEVtQWxpYXNVSW50OCA8QT4JIAkJCQkJCQl4Z2Jo bW9kIDsgCSBFbUFsaWFzSW50OCA8QT4JIAkJCQkJCQl4Z2JoaWRrZXkgOyAJIEVtQWxpYXNVSW50 MzIgPEE+CSAJCQkJCQkJeGdiaHRhZyA7IAkgRW1BbGlhc1VJbnQzMiA8QT4JIAkJCQkJCQl4Z2Jo ZGpwIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfeGdiaGxuICAodm9pZCkgeyByZXR1 cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl94Z2Jod2FpdCAgKHZvaWQpIHsgcmV0 dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfeGdiaHByeSAgKHZvaWQpIHsgcmV0 dXJuICAxNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3hnYmhtb2QgICh2b2lkKSB7IHJl dHVybiAgMTggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl94Z2JoaWRrZXkgICh2b2lkKSB7 IHJldHVybiAgMTkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl94Z2JodGFnICAodm9pZCkg eyByZXR1cm4gIDIwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfeGdiaGRqcCAgKHZvaWQp IHsgcmV0dXJuICAyNCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eWNqX3hnYmggIAl7CXB1YmxpYzoJ dHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eWNqX3hnYmggIAkodm9pZCk7CUVtUHJveHlj al94Z2JoICAJKGNvbnN0IEVtUHJveHljal94Z2JoICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZv aWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVf dAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMjggIDsgfQlFbVByb3h5Y2pfeGdiaCAg JgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5Y2pfeGdiaCAgJik7CUVtQWxpYXNjal94Z2JoICA8 TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzY2pfeGdiaCAgPExBUz4Jb3BlcmF0 b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMjgg IF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNjanhsbiA8TEFTPgkgCQkJCQkJ CXhnYmhsbiA7IAkgRW1BbGlhc2NqeGxuIDxMQVM+CSAJCQkJCQkJeGdiaHdhaXQgOyAJIEVtQWxp YXNJbnQxNiA8TEFTPgkgCQkJCQkJCXhnYmhwcnkgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJ CQkJCXhnYmhtb2QgOyAJIEVtQWxpYXNJbnQ4IDxMQVM+CSAJCQkJCQkJeGdiaGlka2V5IDsgCSBF bUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQkJeGdiaHRhZyA7IAkgRW1BbGlhc1VJbnQzMiA8TEFT PgkgCQkJCQkJCXhnYmhkanAgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl94Z2JobG4g ICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3hnYmh3YWl0 ICAodm9pZCkgeyByZXR1cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl94Z2JocHJ5 ICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfeGdiaG1v ZCAgKHZvaWQpIHsgcmV0dXJuICAxOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3hnYmhp ZGtleSAgKHZvaWQpIHsgcmV0dXJuICAxOSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3hn Ymh0YWcgICh2b2lkKSB7IHJldHVybiAgMjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl94 Z2JoZGpwICAodm9pZCkgeyByZXR1cm4gIDI0IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNz IEE+CWNsYXNzIEVtQWxpYXNjal94c21iICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6 cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNjal94c21iICAJKHB0cl90eXBlKTsJRW1BbGlhc2Nq X3hzbWIgIAkoY29uc3QgRW1BbGlhc2NqX3hzbWIgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9p ZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJ CXsgcmV0dXJuICAgICA0OCAgOyB9CUVtQWxpYXNjal94c21iICA8QT4mCW9wZXJhdG9yPSAoY29u c3QgRW1BbGlhc2NqX3hzbWIgIDxBPiYpOwlFbUFsaWFzY2pfeHNtYiAgPEE+CW9wZXJhdG9yW10g KGludCk7CWNvbnN0IEVtQWxpYXNjal94c21iICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJ cHJpdmF0ZToJRW1BbGlhc2NqX3hzbWIgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGlj OgkgICAgIEVtQWxpYXNjal94Z2JoIDxBPgkgCQkJCQkJeHNtaCA7IAkgRW1BbGlhc2VtdXB0ciA8 QT4JIAkJCQkJCQl4c21vd25lciA7IAkgRW1BbGlhc0ludDMyIDxBPgkgCQkJCQkJCXhzbWl2YWwg OyAJIEVtQWxpYXNJbnQzMiA8QT4JIAkJCQkJCQl4c212YWwgOyAJIEVtQWxpYXNJbnQzMiA8QT4J IAkJCQkJCQl4c211c2UgOyAJIEVtQWxpYXNJbnQzMiA8QT4JIAkJCQkJCQl4c21yc3YgOyAgCSAg ICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl94c21oICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl94c21vd25lciAgKHZvaWQpIHsgcmV0dXJuICAyOCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3hzbWl2YWwgICh2b2lkKSB7IHJldHVybiAgMzIgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl94c212YWwgICh2b2lkKSB7IHJldHVybiAgMzYgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl94c211c2UgICh2b2lkKSB7IHJldHVybiAgNDAgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl94c21yc3YgICh2b2lkKSB7IHJldHVybiAgNDQgOyB9 ICAJfTsgCWNsYXNzIEVtUHJveHljal94c21iICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRy X3R5cGU7CUVtUHJveHljal94c21iICAJKHZvaWQpOwlFbVByb3h5Y2pfeHNtYiAgCShjb25zdCBF bVByb3h5Y2pfeHNtYiAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVy biAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQp CQkJeyByZXR1cm4gICAgIDQ4ICA7IH0JRW1Qcm94eWNqX3hzbWIgICYJCW9wZXJhdG9yPSAoY29u c3QgRW1Qcm94eWNqX3hzbWIgICYpOwlFbUFsaWFzY2pfeHNtYiAgPExBUz4Jb3BlcmF0b3JbXSAo aW50KTsJY29uc3QgRW1BbGlhc2NqX3hzbWIgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7 CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDQ4ICBdOwl9IGZMb2NhbERhdGE7 CXB1YmxpYzoJICAgICBFbUFsaWFzY2pfeGdiaCA8TEFTPgkgCQkJCQkJeHNtaCA7IAkgRW1BbGlh c2VtdXB0ciA8TEFTPgkgCQkJCQkJCXhzbW93bmVyIDsgCSBFbUFsaWFzSW50MzIgPExBUz4JIAkJ CQkJCQl4c21pdmFsIDsgCSBFbUFsaWFzSW50MzIgPExBUz4JIAkJCQkJCQl4c212YWwgOyAJIEVt QWxpYXNJbnQzMiA8TEFTPgkgCQkJCQkJCXhzbXVzZSA7IAkgRW1BbGlhc0ludDMyIDxMQVM+CSAJ CQkJCQkJeHNtcnN2IDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfeHNtaCAgKHZvaWQp IHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfeHNtb3duZXIgICh2b2lk KSB7IHJldHVybiAgMjggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl94c21pdmFsICAodm9p ZCkgeyByZXR1cm4gIDMyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfeHNtdmFsICAodm9p ZCkgeyByZXR1cm4gIDM2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfeHNtdXNlICAodm9p ZCkgeyByZXR1cm4gIDQwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfeHNtcnN2ICAodm9p ZCkgeyByZXR1cm4gIDQ0IDsgfSAgCX07ICAgIAogIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBF bUFsaWFzVGltR2xvYmFsc1R5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJf dHlwZSBwdHJfdHlwZTsJRW1BbGlhc1RpbUdsb2JhbHNUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlh c1RpbUdsb2JhbHNUeXBlICAJKGNvbnN0IEVtQWxpYXNUaW1HbG9iYWxzVHlwZSAgJik7CXB0cl90 eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJ CUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDI0ICA7IH0JRW1BbGlhc1RpbUdsb2JhbHNU eXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1RpbUdsb2JhbHNUeXBlICA8QT4mKTsJ RW1BbGlhc1RpbUdsb2JhbHNUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlh c1RpbUdsb2JhbHNUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1B bGlhc1RpbUdsb2JhbHNUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAg ICBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJcnRjSG91cnMgOyAJIEVtQWxpYXNVSW50MzIgPEE+ CSAJCQkJCQlhbGFybVNlY29uZHMgOyAJIEVtQWxpYXNCb29sZWFuIDxBPgkgCQkJCQlydGNCdWdX b3JrYXJvdW5kIDsgCSBFbUFsaWFzQm9vbGVhbiA8QT4JIAkJCQkJcnRjQnVnQXNsZWVwIDsgCSBF bUFsaWFzVUludDMyIDxBPgkgCQkJCQkJcnRjQnVnQWxhcm0gOyAJIEVtQWxpYXNVSW50MzIgPEE+ CSAJCQkJCQlydGNCdWdTZWNvbmRzIDsgCSBFbUFsaWFzVUludDMyIDxBPgkgCQkJCQkJcnRjQnVn TGFzdFNlY29uZHMgOyAJIEVtQWxpYXNCb29sZWFuIDxBPgkgCQkJCQlydGNCdWdGYXN0TWludXRl Q2FsYyA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJcmVzZXJ2ZWQgOyAgCSAgICAgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9ydGNIb3VycyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfYWxhcm1TZWNvbmRzICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9ydGNCdWdXb3JrYXJvdW5kICAodm9pZCkgeyByZXR1cm4g IDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9ydGNCdWdBc2xlZXAgICh2b2lkKSB7IHJl dHVybiAgOSA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3J0Y0J1Z0FsYXJtICAodm9pZCkg eyByZXR1cm4gIDEwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcnRjQnVnU2Vjb25kcyAg KHZvaWQpIHsgcmV0dXJuICAxNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3J0Y0J1Z0xh c3RTZWNvbmRzICAodm9pZCkgeyByZXR1cm4gIDE4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfcnRjQnVnRmFzdE1pbnV0ZUNhbGMgICh2b2lkKSB7IHJldHVybiAgMjIgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9yZXNlcnZlZCAgKHZvaWQpIHsgcmV0dXJuICAyMyA7IH0gIAl9OyAJ Y2xhc3MgRW1Qcm94eVRpbUdsb2JhbHNUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRy X3R5cGU7CUVtUHJveHlUaW1HbG9iYWxzVHlwZSAgCSh2b2lkKTsJRW1Qcm94eVRpbUdsb2JhbHNU eXBlICAJKGNvbnN0IEVtUHJveHlUaW1HbG9iYWxzVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRy CSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBz aXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDI0ICA7IH0JRW1Qcm94eVRpbUds b2JhbHNUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlUaW1HbG9iYWxzVHlwZSAgJik7 CUVtQWxpYXNUaW1HbG9iYWxzVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1B bGlhc1RpbUdsb2JhbHNUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRl OglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAyNCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6 CSAgICAgRW1BbGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJcnRjSG91cnMgOyAJIEVtQWxpYXNVSW50 MzIgPExBUz4JIAkJCQkJCWFsYXJtU2Vjb25kcyA7IAkgRW1BbGlhc0Jvb2xlYW4gPExBUz4JIAkJ CQkJcnRjQnVnV29ya2Fyb3VuZCA7IAkgRW1BbGlhc0Jvb2xlYW4gPExBUz4JIAkJCQkJcnRjQnVn QXNsZWVwIDsgCSBFbUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlydGNCdWdBbGFybSA7IAkgRW1B bGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJcnRjQnVnU2Vjb25kcyA7IAkgRW1BbGlhc1VJbnQzMiA8 TEFTPgkgCQkJCQkJcnRjQnVnTGFzdFNlY29uZHMgOyAJIEVtQWxpYXNCb29sZWFuIDxMQVM+CSAJ CQkJCXJ0Y0J1Z0Zhc3RNaW51dGVDYWxjIDsgCSBFbUFsaWFzVUludDggPExBUz4JIAkJCQkJCXJl c2VydmVkIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcnRjSG91cnMgICh2b2lkKSB7 IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2FsYXJtU2Vjb25kcyAgKHZv aWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcnRjQnVnV29ya2Fy b3VuZCAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcnRj QnVnQXNsZWVwICAodm9pZCkgeyByZXR1cm4gIDkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9ydGNCdWdBbGFybSAgKHZvaWQpIHsgcmV0dXJuICAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3J0Y0J1Z1NlY29uZHMgICh2b2lkKSB7IHJldHVybiAgMTQgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9ydGNCdWdMYXN0U2Vjb25kcyAgKHZvaWQpIHsgcmV0dXJuICAxOCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3J0Y0J1Z0Zhc3RNaW51dGVDYWxjICAodm9pZCkgeyBy ZXR1cm4gIDIyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVzZXJ2ZWQgICh2b2lkKSB7 IHJldHVybiAgMjMgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlh c0Zvcm1PYmpBdHRyVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBl IHB0cl90eXBlOwlFbUFsaWFzRm9ybU9iakF0dHJUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc0Zv cm1PYmpBdHRyVHlwZSAgCShjb25zdCBFbUFsaWFzRm9ybU9iakF0dHJUeXBlICAmKTsJcHRyX3R5 cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJ R2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMiAgOyB9CUVtQWxpYXNGb3JtT2JqQXR0clR5 cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzRm9ybU9iakF0dHJUeXBlICA8QT4mKTsJ RW1BbGlhc0Zvcm1PYmpBdHRyVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxp YXNGb3JtT2JqQXR0clR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglF bUFsaWFzRm9ybU9iakF0dHJUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJ ICAgICBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJZmxhZ3MgOyAgCSAgICAgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9mbGFncyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAgCX07IAljbGFzcyBFbVBy b3h5Rm9ybU9iakF0dHJUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVt UHJveHlGb3JtT2JqQXR0clR5cGUgIAkodm9pZCk7CUVtUHJveHlGb3JtT2JqQXR0clR5cGUgIAko Y29uc3QgRW1Qcm94eUZvcm1PYmpBdHRyVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lk KSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJ CUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIgIDsgfQlFbVByb3h5Rm9ybU9iakF0dHJU eXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlGb3JtT2JqQXR0clR5cGUgICYpOwlFbUFs aWFzRm9ybU9iakF0dHJUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFz Rm9ybU9iakF0dHJUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglz dHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAyICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAg ICBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlmbGFncyA7ICAJICAgICBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2ZsYWdzICAodm9pZCkgeyByZXR1cm4gIDAgOyB9ICAJfTsgICAJICB0ZW1wbGF0 ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc0Zvcm1CaXRtYXBUeXBlICAJewlwdWJsaWM6CXR5cGVk ZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNGb3JtQml0bWFwVHlwZSAg CShwdHJfdHlwZSk7CUVtQWxpYXNGb3JtQml0bWFwVHlwZSAgCShjb25zdCBFbUFsaWFzRm9ybUJp dG1hcFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0 cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA4ICA7IH0J RW1BbGlhc0Zvcm1CaXRtYXBUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc0Zvcm1C aXRtYXBUeXBlICA8QT4mKTsJRW1BbGlhc0Zvcm1CaXRtYXBUeXBlICA8QT4Jb3BlcmF0b3JbXSAo aW50KTsJY29uc3QgRW1BbGlhc0Zvcm1CaXRtYXBUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBj b25zdDsJcHJpdmF0ZToJRW1BbGlhc0Zvcm1CaXRtYXBUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJ CWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzRm9ybU9iakF0dHJUeXBlIDxBPgkgCQkJYXR0ciA7 IAkgRW1BbGlhc1BvaW50VHlwZSA8QT4JIAkJCQkJcG9zIDsgCSBFbUFsaWFzVUludDE2IDxBPgkg CQkJCQkJcnNjSUQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hdHRyICAodm9pZCkg eyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wb3MgICh2b2lkKSB7IHJl dHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3JzY0lEICAodm9pZCkgeyByZXR1 cm4gIDYgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlGb3JtQml0bWFwVHlwZSAgCXsJcHVibGljOgl0 eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5Rm9ybUJpdG1hcFR5cGUgIAkodm9pZCk7CUVt UHJveHlGb3JtQml0bWFwVHlwZSAgCShjb25zdCBFbVByb3h5Rm9ybUJpdG1hcFR5cGUgICYpOwlw dHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2Fs RGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA4ICA7 IH0JRW1Qcm94eUZvcm1CaXRtYXBUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlGb3Jt Qml0bWFwVHlwZSAgJik7CUVtQWxpYXNGb3JtQml0bWFwVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAo aW50KTsJY29uc3QgRW1BbGlhc0Zvcm1CaXRtYXBUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQp IGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA4ICBdOwl9IGZMb2Nh bERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzRm9ybU9iakF0dHJUeXBlIDxMQVM+CSAJCQlhdHRy IDsgCSBFbUFsaWFzUG9pbnRUeXBlIDxMQVM+CSAJCQkJCXBvcyA7IAkgRW1BbGlhc1VJbnQxNiA8 TEFTPgkgCQkJCQkJcnNjSUQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hdHRyICAo dm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wb3MgICh2b2lk KSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3JzY0lEICAodm9pZCkg eyByZXR1cm4gIDYgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlh c0Zvcm1MaW5lVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0 cl90eXBlOwlFbUFsaWFzRm9ybUxpbmVUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc0Zvcm1MaW5l VHlwZSAgCShjb25zdCBFbUFsaWFzRm9ybUxpbmVUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJ KHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9p ZCkJCQl7IHJldHVybiAgICAgMTAgIDsgfQlFbUFsaWFzRm9ybUxpbmVUeXBlICA8QT4mCW9wZXJh dG9yPSAoY29uc3QgRW1BbGlhc0Zvcm1MaW5lVHlwZSAgPEE+Jik7CUVtQWxpYXNGb3JtTGluZVR5 cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzRm9ybUxpbmVUeXBlICA8QT4J b3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc0Zvcm1MaW5lVHlwZSAgCSh2 b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8QT4JIAkJ CQkJCWF0dHIgOyAJIEVtQWxpYXNQb2ludFR5cGUgPEE+CSAJCQkJCXBvaW50MSA7IAkgRW1BbGlh c1BvaW50VHlwZSA8QT4JIAkJCQkJcG9pbnQyIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfYXR0ciAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf cG9pbnQxICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9w b2ludDIgICh2b2lkKSB7IHJldHVybiAgNiA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eUZvcm1MaW5l VHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5Rm9ybUxpbmVU eXBlICAJKHZvaWQpOwlFbVByb3h5Rm9ybUxpbmVUeXBlICAJKGNvbnN0IEVtUHJveHlGb3JtTGlu ZVR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90 eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0 dXJuICAgICAxMCAgOyB9CUVtUHJveHlGb3JtTGluZVR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3Qg RW1Qcm94eUZvcm1MaW5lVHlwZSAgJik7CUVtQWxpYXNGb3JtTGluZVR5cGUgIDxMQVM+CW9wZXJh dG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNGb3JtTGluZVR5cGUgIDxMQVM+CW9wZXJhdG9yW10g KGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDEwICBdOwl9 IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlhdHRy IDsgCSBFbUFsaWFzUG9pbnRUeXBlIDxMQVM+CSAJCQkJCXBvaW50MSA7IAkgRW1BbGlhc1BvaW50 VHlwZSA8TEFTPgkgCQkJCQlwb2ludDIgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9h dHRyICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wb2lu dDEgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BvaW50 MiAgKHZvaWQpIHsgcmV0dXJuICA2IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNs YXNzIEVtQWxpYXNGb3JtRnJhbWVUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6 cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNGb3JtRnJhbWVUeXBlICAJKHB0cl90eXBlKTsJRW1B bGlhc0Zvcm1GcmFtZVR5cGUgIAkoY29uc3QgRW1BbGlhc0Zvcm1GcmFtZVR5cGUgICYpOwlwdHJf dHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90 CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAxNCAgOyB9CUVtQWxpYXNGb3JtRnJhbWVU eXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc0Zvcm1GcmFtZVR5cGUgIDxBPiYpOwlF bUFsaWFzRm9ybUZyYW1lVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNG b3JtRnJhbWVUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlh c0Zvcm1GcmFtZVR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVt QWxpYXNVSW50MTYgPEE+CSAJCQkJCQlpZCA7IAkgRW1BbGlhc0Zvcm1PYmpBdHRyVHlwZSA8QT4J IAkJCWF0dHIgOyAJIEVtQWxpYXNSZWN0YW5nbGVUeXBlIDxBPgkgCQkJCXJlY3QgOyAJIEVtQWxp YXNVSW50MTYgPEE+CSAJCQkJCQlmcmFtZVR5cGUgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9pZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf YXR0ciAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVj dCAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZnJhbWVU eXBlICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAgCX07IAljbGFzcyBFbVByb3h5Rm9ybUZyYW1l VHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5Rm9ybUZyYW1l VHlwZSAgCSh2b2lkKTsJRW1Qcm94eUZvcm1GcmFtZVR5cGUgIAkoY29uc3QgRW1Qcm94eUZvcm1G cmFtZVR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0 cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsg cmV0dXJuICAgICAxNCAgOyB9CUVtUHJveHlGb3JtRnJhbWVUeXBlICAmCQlvcGVyYXRvcj0gKGNv bnN0IEVtUHJveHlGb3JtRnJhbWVUeXBlICAmKTsJRW1BbGlhc0Zvcm1GcmFtZVR5cGUgIDxMQVM+ CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNGb3JtRnJhbWVUeXBlICA8TEFTPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAx NCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJ CQkJaWQgOyAJIEVtQWxpYXNGb3JtT2JqQXR0clR5cGUgPExBUz4JIAkJCWF0dHIgOyAJIEVtQWxp YXNSZWN0YW5nbGVUeXBlIDxMQVM+CSAJCQkJcmVjdCA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkg CQkJCQkJZnJhbWVUeXBlIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaWQgICh2b2lk KSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2F0dHIgICh2b2lkKSB7 IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3JlY3QgICh2b2lkKSB7IHJl dHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZyYW1lVHlwZSAgKHZvaWQpIHsg cmV0dXJuICAxMiA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFz Rm9ybVJlY3RhbmdsZVR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlw ZSBwdHJfdHlwZTsJRW1BbGlhc0Zvcm1SZWN0YW5nbGVUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlh c0Zvcm1SZWN0YW5nbGVUeXBlICAJKGNvbnN0IEVtQWxpYXNGb3JtUmVjdGFuZ2xlVHlwZSAgJik7 CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBz aXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDEwICA7IH0JRW1BbGlhc0Zvcm1S ZWN0YW5nbGVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc0Zvcm1SZWN0YW5nbGVU eXBlICA8QT4mKTsJRW1BbGlhc0Zvcm1SZWN0YW5nbGVUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50 KTsJY29uc3QgRW1BbGlhc0Zvcm1SZWN0YW5nbGVUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBj b25zdDsJcHJpdmF0ZToJRW1BbGlhc0Zvcm1SZWN0YW5nbGVUeXBlICAJKHZvaWQpOwlwdHJfdHlw ZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzRm9ybU9iakF0dHJUeXBlIDxBPgkgCQkJYXR0 ciA7IAkgRW1BbGlhc1JlY3RhbmdsZVR5cGUgPEE+CSAJCQkJcmVjdCA7ICAJICAgICBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2F0dHIgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX3JlY3QgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gIAl9OyAJY2xhc3MgRW1Q cm94eUZvcm1SZWN0YW5nbGVUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7 CUVtUHJveHlGb3JtUmVjdGFuZ2xlVHlwZSAgCSh2b2lkKTsJRW1Qcm94eUZvcm1SZWN0YW5nbGVU eXBlICAJKGNvbnN0IEVtUHJveHlGb3JtUmVjdGFuZ2xlVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0 UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRp YyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDEwICA7IH0JRW1Qcm94eUZv cm1SZWN0YW5nbGVUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlGb3JtUmVjdGFuZ2xl VHlwZSAgJik7CUVtQWxpYXNGb3JtUmVjdGFuZ2xlVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50 KTsJY29uc3QgRW1BbGlhc0Zvcm1SZWN0YW5nbGVUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQp IGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAxMCAgXTsJfSBmTG9j YWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc0Zvcm1PYmpBdHRyVHlwZSA8TEFTPgkgCQkJYXR0 ciA7IAkgRW1BbGlhc1JlY3RhbmdsZVR5cGUgPExBUz4JIAkJCQlyZWN0IDsgIAkgICAgIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfYXR0ciAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfcmVjdCAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAgCX07ICAgCSAgdGVt cGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNGb3JtVGl0bGVUeXBlICAJewlwdWJsaWM6CXR5 cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNGb3JtVGl0bGVUeXBl ICAJKHB0cl90eXBlKTsJRW1BbGlhc0Zvcm1UaXRsZVR5cGUgIAkoY29uc3QgRW1BbGlhc0Zvcm1U aXRsZVR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0 cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAxMiAgOyB9 CUVtQWxpYXNGb3JtVGl0bGVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc0Zvcm1U aXRsZVR5cGUgIDxBPiYpOwlFbUFsaWFzRm9ybVRpdGxlVHlwZSAgPEE+CW9wZXJhdG9yW10gKGlu dCk7CWNvbnN0IEVtQWxpYXNGb3JtVGl0bGVUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25z dDsJcHJpdmF0ZToJRW1BbGlhc0Zvcm1UaXRsZVR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0 cjsJcHVibGljOgkgICAgIEVtQWxpYXNSZWN0YW5nbGVUeXBlIDxBPgkgCQkJCXJlY3QgOyAJIEVt QWxpYXNlbXVwdHIgPEE+CSAJCQkJCQl0ZXh0IDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfcmVjdCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf dGV4dCAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAgCX07IAljbGFzcyBFbVByb3h5Rm9ybVRpdGxl VHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5Rm9ybVRpdGxl VHlwZSAgCSh2b2lkKTsJRW1Qcm94eUZvcm1UaXRsZVR5cGUgIAkoY29uc3QgRW1Qcm94eUZvcm1U aXRsZVR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0 cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsg cmV0dXJuICAgICAxMiAgOyB9CUVtUHJveHlGb3JtVGl0bGVUeXBlICAmCQlvcGVyYXRvcj0gKGNv bnN0IEVtUHJveHlGb3JtVGl0bGVUeXBlICAmKTsJRW1BbGlhc0Zvcm1UaXRsZVR5cGUgIDxMQVM+ CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNGb3JtVGl0bGVUeXBlICA8TEFTPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAx MiAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1JlY3RhbmdsZVR5cGUgPExB Uz4JIAkJCQlyZWN0IDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQl0ZXh0IDsgIAkgICAg IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVjdCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdGV4dCAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAgCX07ICAg CSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNGb3JtUG9wdXBUeXBlICAJewlwdWJs aWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNGb3JtUG9w dXBUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc0Zvcm1Qb3B1cFR5cGUgIAkoY29uc3QgRW1BbGlh c0Zvcm1Qb3B1cFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1 cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA0 ICA7IH0JRW1BbGlhc0Zvcm1Qb3B1cFR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFz Rm9ybVBvcHVwVHlwZSAgPEE+Jik7CUVtQWxpYXNGb3JtUG9wdXBUeXBlICA8QT4Jb3BlcmF0b3Jb XSAoaW50KTsJY29uc3QgRW1BbGlhc0Zvcm1Qb3B1cFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQp IGNvbnN0Owlwcml2YXRlOglFbUFsaWFzRm9ybVBvcHVwVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJ CQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWNvbnRyb2xJRCA7 IAkgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWxpc3RJRCA7ICAJICAgICBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2NvbnRyb2xJRCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfbGlzdElEICAodm9pZCkgeyByZXR1cm4gIDIgOyB9ICAJfTsgCWNsYXNzIEVt UHJveHlGb3JtUG9wdXBUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVt UHJveHlGb3JtUG9wdXBUeXBlICAJKHZvaWQpOwlFbVByb3h5Rm9ybVBvcHVwVHlwZSAgCShjb25z dCBFbVByb3h5Rm9ybVBvcHVwVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25z dAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNp emUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDQgIDsgfQlFbVByb3h5Rm9ybVBvcHVwVHlwZSAgJgkJ b3BlcmF0b3I9IChjb25zdCBFbVByb3h5Rm9ybVBvcHVwVHlwZSAgJik7CUVtQWxpYXNGb3JtUG9w dXBUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzRm9ybVBvcHVwVHlw ZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJ CV9ieXRlc1sgICAgNCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQx NiA8TEFTPgkgCQkJCQkJY29udHJvbElEIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQls aXN0SUQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jb250cm9sSUQgICh2b2lkKSB7 IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2xpc3RJRCAgKHZvaWQpIHsg cmV0dXJuICAyIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNG cm1HcmFmZml0aVN0YXRlVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90 eXBlIHB0cl90eXBlOwlFbUFsaWFzRnJtR3JhZmZpdGlTdGF0ZVR5cGUgIAkocHRyX3R5cGUpOwlF bUFsaWFzRnJtR3JhZmZpdGlTdGF0ZVR5cGUgIAkoY29uc3QgRW1BbGlhc0ZybUdyYWZmaXRpU3Rh dGVUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7 IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNCAgOyB9CUVt QWxpYXNGcm1HcmFmZml0aVN0YXRlVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNG cm1HcmFmZml0aVN0YXRlVHlwZSAgPEE+Jik7CUVtQWxpYXNGcm1HcmFmZml0aVN0YXRlVHlwZSAg PEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNGcm1HcmFmZml0aVN0YXRlVHlwZSAg PEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNGcm1HcmFmZml0aVN0 YXRlVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc1Bv aW50VHlwZSA8QT4JIAkJCQkJcG9zIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcG9z ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlGcm1HcmFmZml0aVN0 YXRlVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5RnJtR3Jh ZmZpdGlTdGF0ZVR5cGUgIAkodm9pZCk7CUVtUHJveHlGcm1HcmFmZml0aVN0YXRlVHlwZSAgCShj b25zdCBFbVByb3h5RnJtR3JhZmZpdGlTdGF0ZVR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgko dm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6 ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA0ICA7IH0JRW1Qcm94eUZybUdyYWZm aXRpU3RhdGVUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlGcm1HcmFmZml0aVN0YXRl VHlwZSAgJik7CUVtQWxpYXNGcm1HcmFmZml0aVN0YXRlVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAo aW50KTsJY29uc3QgRW1BbGlhc0ZybUdyYWZmaXRpU3RhdGVUeXBlICA8TEFTPglvcGVyYXRvcltd IChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA0ICBdOwl9 IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzUG9pbnRUeXBlIDxMQVM+CSAJCQkJCXBv cyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BvcyAgKHZvaWQpIHsgcmV0dXJuICAw IDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNTY3JvbGxCYXJB dHRyVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBl OwlFbUFsaWFzU2Nyb2xsQmFyQXR0clR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzU2Nyb2xsQmFy QXR0clR5cGUgIAkoY29uc3QgRW1BbGlhc1Njcm9sbEJhckF0dHJUeXBlICAmKTsJcHRyX3R5cGUJ CQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0 U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMiAgOyB9CUVtQWxpYXNTY3JvbGxCYXJBdHRyVHlw ZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNTY3JvbGxCYXJBdHRyVHlwZSAgPEE+Jik7 CUVtQWxpYXNTY3JvbGxCYXJBdHRyVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVt QWxpYXNTY3JvbGxCYXJBdHRyVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZh dGU6CUVtQWxpYXNTY3JvbGxCYXJBdHRyVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlw dWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWZsYWdzIDsgIAkgICAgIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfZmxhZ3MgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gIAl9OyAJY2xh c3MgRW1Qcm94eVNjcm9sbEJhckF0dHJUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRy X3R5cGU7CUVtUHJveHlTY3JvbGxCYXJBdHRyVHlwZSAgCSh2b2lkKTsJRW1Qcm94eVNjcm9sbEJh ckF0dHJUeXBlICAJKGNvbnN0IEVtUHJveHlTY3JvbGxCYXJBdHRyVHlwZSAgJik7CXB0cl90eXBl CQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9 CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIgIDsgfQlFbVBy b3h5U2Nyb2xsQmFyQXR0clR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eVNjcm9sbEJh ckF0dHJUeXBlICAmKTsJRW1BbGlhc1Njcm9sbEJhckF0dHJUeXBlICA8TEFTPglvcGVyYXRvcltd IChpbnQpOwljb25zdCBFbUFsaWFzU2Nyb2xsQmFyQXR0clR5cGUgIDxMQVM+CW9wZXJhdG9yW10g KGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDIgIF07CX0g ZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWZsYWdz IDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmxhZ3MgICh2b2lkKSB7IHJldHVybiAg MCA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzU2Nyb2xsQmFy VHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlF bUFsaWFzU2Nyb2xsQmFyVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNTY3JvbGxCYXJUeXBlICAJ KGNvbnN0IEVtQWxpYXNTY3JvbGxCYXJUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQp IGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7 IHJldHVybiAgICAgMjQgIDsgfQlFbUFsaWFzU2Nyb2xsQmFyVHlwZSAgPEE+JglvcGVyYXRvcj0g KGNvbnN0IEVtQWxpYXNTY3JvbGxCYXJUeXBlICA8QT4mKTsJRW1BbGlhc1Njcm9sbEJhclR5cGUg IDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzU2Nyb2xsQmFyVHlwZSAgPEE+CW9w ZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNTY3JvbGxCYXJUeXBlICAJKHZv aWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzUmVjdGFuZ2xlVHlwZSA8 QT4JIAkJCQlib3VuZHMgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlpZCA7IAkgRW1BbGlh c1Njcm9sbEJhckF0dHJUeXBlIDxBPgkgCQkJYXR0ciA7IAkgRW1BbGlhc0ludDE2IDxBPgkgCQkJ CQkJdmFsdWUgOyAJIEVtQWxpYXNJbnQxNiA8QT4JIAkJCQkJCW1pblZhbHVlIDsgCSBFbUFsaWFz SW50MTYgPEE+CSAJCQkJCQltYXhWYWx1ZSA7IAkgRW1BbGlhc0ludDE2IDxBPgkgCQkJCQkJcGFn ZVNpemUgOyAJIEVtQWxpYXNJbnQxNiA8QT4JIAkJCQkJCXBlblBvc0luQ2FyIDsgCSBFbUFsaWFz SW50MTYgPEE+CSAJCQkJCQlzYXZlUG9zIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf Ym91bmRzICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9p ZCAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYXR0ciAg KHZvaWQpIHsgcmV0dXJuICAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3ZhbHVlICAo dm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbWluVmFsdWUg ICh2b2lkKSB7IHJldHVybiAgMTQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9tYXhWYWx1 ZSAgKHZvaWQpIHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BhZ2VT aXplICAodm9pZCkgeyByZXR1cm4gIDE4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcGVu UG9zSW5DYXIgICh2b2lkKSB7IHJldHVybiAgMjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9zYXZlUG9zICAodm9pZCkgeyByZXR1cm4gIDIyIDsgfSAgCX07IAljbGFzcyBFbVByb3h5U2Ny b2xsQmFyVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5U2Ny b2xsQmFyVHlwZSAgCSh2b2lkKTsJRW1Qcm94eVNjcm9sbEJhclR5cGUgIAkoY29uc3QgRW1Qcm94 eVNjcm9sbEJhclR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1 cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lk KQkJCXsgcmV0dXJuICAgICAyNCAgOyB9CUVtUHJveHlTY3JvbGxCYXJUeXBlICAmCQlvcGVyYXRv cj0gKGNvbnN0IEVtUHJveHlTY3JvbGxCYXJUeXBlICAmKTsJRW1BbGlhc1Njcm9sbEJhclR5cGUg IDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNTY3JvbGxCYXJUeXBlICA8TEFT PglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVz WyAgICAyNCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1JlY3RhbmdsZVR5 cGUgPExBUz4JIAkJCQlib3VuZHMgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWlkIDsg CSBFbUFsaWFzU2Nyb2xsQmFyQXR0clR5cGUgPExBUz4JIAkJCWF0dHIgOyAJIEVtQWxpYXNJbnQx NiA8TEFTPgkgCQkJCQkJdmFsdWUgOyAJIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJbWluVmFs dWUgOyAJIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJbWF4VmFsdWUgOyAJIEVtQWxpYXNJbnQx NiA8TEFTPgkgCQkJCQkJcGFnZVNpemUgOyAJIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJcGVu UG9zSW5DYXIgOyAJIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJc2F2ZVBvcyA7ICAJICAgICBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2JvdW5kcyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaWQgICh2b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2F0dHIgICh2b2lkKSB7IHJldHVybiAgMTAgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl92YWx1ZSAgKHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX21pblZhbHVlICAodm9pZCkgeyByZXR1cm4gIDE0IDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfbWF4VmFsdWUgICh2b2lkKSB7IHJldHVybiAgMTYgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9wYWdlU2l6ZSAgKHZvaWQpIHsgcmV0dXJuICAxOCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3BlblBvc0luQ2FyICAodm9pZCkgeyByZXR1cm4gIDIwIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc2F2ZVBvcyAgKHZvaWQpIHsgcmV0dXJuICAyMiA7IH0g IAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzRm9ybUdhZGdldEF0dHJU eXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVt QWxpYXNGb3JtR2FkZ2V0QXR0clR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzRm9ybUdhZGdldEF0 dHJUeXBlICAJKGNvbnN0IEVtQWxpYXNGb3JtR2FkZ2V0QXR0clR5cGUgICYpOwlwdHJfdHlwZQkJ CUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRT aXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyICA7IH0JRW1BbGlhc0Zvcm1HYWRnZXRBdHRyVHlw ZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNGb3JtR2FkZ2V0QXR0clR5cGUgIDxBPiYp OwlFbUFsaWFzRm9ybUdhZGdldEF0dHJUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3Qg RW1BbGlhc0Zvcm1HYWRnZXRBdHRyVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXBy aXZhdGU6CUVtQWxpYXNGb3JtR2FkZ2V0QXR0clR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0 cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlmbGFncyA7ICAJICAgICBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZsYWdzICAodm9pZCkgeyByZXR1cm4gIDAgOyB9ICAJfTsg CWNsYXNzIEVtUHJveHlGb3JtR2FkZ2V0QXR0clR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lk KiBwdHJfdHlwZTsJRW1Qcm94eUZvcm1HYWRnZXRBdHRyVHlwZSAgCSh2b2lkKTsJRW1Qcm94eUZv cm1HYWRnZXRBdHRyVHlwZSAgCShjb25zdCBFbVByb3h5Rm9ybUdhZGdldEF0dHJUeXBlICAmKTsJ cHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2Nh bERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMiAg OyB9CUVtUHJveHlGb3JtR2FkZ2V0QXR0clR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94 eUZvcm1HYWRnZXRBdHRyVHlwZSAgJik7CUVtQWxpYXNGb3JtR2FkZ2V0QXR0clR5cGUgIDxMQVM+ CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNGb3JtR2FkZ2V0QXR0clR5cGUgIDxMQVM+ CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNb ICAgIDIgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPExBUz4J IAkJCQkJCWZsYWdzIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmxhZ3MgICh2b2lk KSB7IHJldHVybiAgMCA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFs aWFzRm9ybUdhZGdldFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlw ZSBwdHJfdHlwZTsJRW1BbGlhc0Zvcm1HYWRnZXRUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc0Zv cm1HYWRnZXRUeXBlICAJKGNvbnN0IEVtQWxpYXNGb3JtR2FkZ2V0VHlwZSAgJik7CXB0cl90eXBl CQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdl dFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIwICA7IH0JRW1BbGlhc0Zvcm1HYWRnZXRUeXBl ICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc0Zvcm1HYWRnZXRUeXBlICA8QT4mKTsJRW1B bGlhc0Zvcm1HYWRnZXRUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0Zv cm1HYWRnZXRUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlh c0Zvcm1HYWRnZXRUeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBF bUFsaWFzVUludDE2IDxBPgkgCQkJCQkJaWQgOyAJIEVtQWxpYXNGb3JtR2FkZ2V0QXR0clR5cGUg PEE+CSAJCQlhdHRyIDsgCSBFbUFsaWFzUmVjdGFuZ2xlVHlwZSA8QT4JIAkJCQlyZWN0IDsgCSBF bUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJZGF0YSA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJ CWhhbmRsZXIgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pZCAgKHZvaWQpIHsgcmV0 dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYXR0ciAgKHZvaWQpIHsgcmV0dXJu ICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVjdCAgKHZvaWQpIHsgcmV0dXJuICA0 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGF0YSAgKHZvaWQpIHsgcmV0dXJuICAxMiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2hhbmRsZXIgICh2b2lkKSB7IHJldHVybiAgMTYg OyB9ICAJfTsgCWNsYXNzIEVtUHJveHlGb3JtR2FkZ2V0VHlwZSAgCXsJcHVibGljOgl0eXBlZGVm IHZvaWQqIHB0cl90eXBlOwlFbVByb3h5Rm9ybUdhZGdldFR5cGUgIAkodm9pZCk7CUVtUHJveHlG b3JtR2FkZ2V0VHlwZSAgCShjb25zdCBFbVByb3h5Rm9ybUdhZGdldFR5cGUgICYpOwlwdHJfdHlw ZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsg fQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyMCAgOyB9CUVt UHJveHlGb3JtR2FkZ2V0VHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5Rm9ybUdhZGdl dFR5cGUgICYpOwlFbUFsaWFzRm9ybUdhZGdldFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7 CWNvbnN0IEVtQWxpYXNGb3JtR2FkZ2V0VHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25z dDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgMjAgIF07CX0gZkxvY2FsRGF0 YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWlkIDsgCSBFbUFsaWFz Rm9ybUdhZGdldEF0dHJUeXBlIDxMQVM+CSAJCQlhdHRyIDsgCSBFbUFsaWFzUmVjdGFuZ2xlVHlw ZSA8TEFTPgkgCQkJCXJlY3QgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWRhdGEgOyAJ IEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWhhbmRsZXIgOyAgCSAgICAgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9pZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfYXR0ciAgKHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfcmVjdCAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf ZGF0YSAgKHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2hh bmRsZXIgICh2b2lkKSB7IHJldHVybiAgMTYgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3Mg QT4JY2xhc3MgRW1BbGlhc0Zvcm1MYWJlbFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFt ZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc0Zvcm1MYWJlbFR5cGUgIAkocHRyX3R5cGUp OwlFbUFsaWFzRm9ybUxhYmVsVHlwZSAgCShjb25zdCBFbUFsaWFzRm9ybUxhYmVsVHlwZSAgJik7 CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBz aXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDE0ICA7IH0JRW1BbGlhc0Zvcm1M YWJlbFR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzRm9ybUxhYmVsVHlwZSAgPEE+ Jik7CUVtQWxpYXNGb3JtTGFiZWxUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1B bGlhc0Zvcm1MYWJlbFR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglF bUFsaWFzRm9ybUxhYmVsVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAg ICAgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWlkIDsgCSBFbUFsaWFzUG9pbnRUeXBlIDxBPgkg CQkJCQlwb3MgOyAJIEVtQWxpYXNGb3JtT2JqQXR0clR5cGUgPEE+CSAJCQlhdHRyIDsgCSBFbUFs aWFzRm9udElEIDxBPgkgCQkJCQkJZm9udElEIDsgCSBFbUFsaWFzVUludDggPEE+CSAJCQkJCQly ZXNlcnZlZCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXRleHQgOyAgCSAgICAgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9pZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfcG9zICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9hdHRyICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9mb250SUQgICh2b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX3Jlc2VydmVkICAodm9pZCkgeyByZXR1cm4gIDkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl90ZXh0ICAodm9pZCkgeyByZXR1cm4gIDEwIDsgfSAgCX07IAljbGFzcyBFbVByb3h5Rm9y bUxhYmVsVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5Rm9y bUxhYmVsVHlwZSAgCSh2b2lkKTsJRW1Qcm94eUZvcm1MYWJlbFR5cGUgIAkoY29uc3QgRW1Qcm94 eUZvcm1MYWJlbFR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1 cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lk KQkJCXsgcmV0dXJuICAgICAxNCAgOyB9CUVtUHJveHlGb3JtTGFiZWxUeXBlICAmCQlvcGVyYXRv cj0gKGNvbnN0IEVtUHJveHlGb3JtTGFiZWxUeXBlICAmKTsJRW1BbGlhc0Zvcm1MYWJlbFR5cGUg IDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNGb3JtTGFiZWxUeXBlICA8TEFT PglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVz WyAgICAxNCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8TEFT PgkgCQkJCQkJaWQgOyAJIEVtQWxpYXNQb2ludFR5cGUgPExBUz4JIAkJCQkJcG9zIDsgCSBFbUFs aWFzRm9ybU9iakF0dHJUeXBlIDxMQVM+CSAJCQlhdHRyIDsgCSBFbUFsaWFzRm9udElEIDxMQVM+ CSAJCQkJCQlmb250SUQgOyAJIEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJcmVzZXJ2ZWQgOyAJ IEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCXRleHQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9pZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfcG9zICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9h dHRyICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mb250 SUQgICh2b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jlc2Vy dmVkICAodm9pZCkgeyByZXR1cm4gIDkgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90ZXh0 ICAodm9pZCkgeyByZXR1cm4gIDEwIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNs YXNzIEVtQWxpYXNGaWVsZEF0dHJUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6 cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNGaWVsZEF0dHJUeXBlICAJKHB0cl90eXBlKTsJRW1B bGlhc0ZpZWxkQXR0clR5cGUgIAkoY29uc3QgRW1BbGlhc0ZpZWxkQXR0clR5cGUgICYpOwlwdHJf dHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90 CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyICA7IH0JRW1BbGlhc0ZpZWxkQXR0clR5 cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzRmllbGRBdHRyVHlwZSAgPEE+Jik7CUVt QWxpYXNGaWVsZEF0dHJUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0Zp ZWxkQXR0clR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFz RmllbGRBdHRyVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1B bGlhc1VJbnQxNiA8QT4JIAkJCQkJCWZsYWdzIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfZmxhZ3MgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eUZpZWxk QXR0clR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUZpZWxk QXR0clR5cGUgIAkodm9pZCk7CUVtUHJveHlGaWVsZEF0dHJUeXBlICAJKGNvbnN0IEVtUHJveHlG aWVsZEF0dHJUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJu IChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJ CQl7IHJldHVybiAgICAgMiAgOyB9CUVtUHJveHlGaWVsZEF0dHJUeXBlICAmCQlvcGVyYXRvcj0g KGNvbnN0IEVtUHJveHlGaWVsZEF0dHJUeXBlICAmKTsJRW1BbGlhc0ZpZWxkQXR0clR5cGUgIDxM QVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNGaWVsZEF0dHJUeXBlICA8TEFTPglv cGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAg ICAyICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxMQVM+CSAJ CQkJCQlmbGFncyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZsYWdzICAodm9pZCkg eyByZXR1cm4gIDAgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlh c0ZpZWxkVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90 eXBlOwlFbUFsaWFzRmllbGRUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc0ZpZWxkVHlwZSAgCShj b25zdCBFbUFsaWFzRmllbGRUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0 CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVy biAgICAgNDAgIDsgfQlFbUFsaWFzRmllbGRUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1B bGlhc0ZpZWxkVHlwZSAgPEE+Jik7CUVtQWxpYXNGaWVsZFR5cGUgIDxBPglvcGVyYXRvcltdIChp bnQpOwljb25zdCBFbUFsaWFzRmllbGRUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJ cHJpdmF0ZToJRW1BbGlhc0ZpZWxkVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJs aWM6CSAgICAgRW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWlkIDsgCSBFbUFsaWFzUmVjdGFuZ2xl VHlwZSA8QT4JIAkJCQlyZWN0IDsgCSBFbUFsaWFzRmllbGRBdHRyVHlwZSA8QT4JIAkJCQlhdHRy IDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJdGV4dCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4J IAkJCQkJCXRleHRIYW5kbGUgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlsaW5lcyA7IAkg RW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCXRleHRMZW4gOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJ CQkJCQl0ZXh0QmxvY2tTaXplIDsgCSBFbUFsaWFzVUludDE2IDxBPgkgCQkJCQkJbWF4Q2hhcnMg OyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlzZWxGaXJzdFBvcyA7IAkgRW1BbGlhc1VJbnQx NiA8QT4JIAkJCQkJCXNlbExhc3RQb3MgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlpbnNQ dFhQb3MgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlpbnNQdFlQb3MgOyAJIEVtQWxpYXNG b250SUQgPEE+CSAJCQkJCQlmb250SUQgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQltYXhW aXNpYmxlTGluZXMgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pZCAgKHZvaWQpIHsg cmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVjdCAgKHZvaWQpIHsgcmV0 dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYXR0ciAgKHZvaWQpIHsgcmV0dXJu ICAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RleHQgICh2b2lkKSB7IHJldHVybiAg MTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90ZXh0SGFuZGxlICAodm9pZCkgeyByZXR1 cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbGluZXMgICh2b2lkKSB7IHJldHVy biAgMjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90ZXh0TGVuICAodm9pZCkgeyByZXR1 cm4gIDI0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdGV4dEJsb2NrU2l6ZSAgKHZvaWQp IHsgcmV0dXJuICAyNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21heENoYXJzICAodm9p ZCkgeyByZXR1cm4gIDI4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc2VsRmlyc3RQb3Mg ICh2b2lkKSB7IHJldHVybiAgMzAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zZWxMYXN0 UG9zICAodm9pZCkgeyByZXR1cm4gIDMyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW5z UHRYUG9zICAodm9pZCkgeyByZXR1cm4gIDM0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf aW5zUHRZUG9zICAodm9pZCkgeyByZXR1cm4gIDM2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfZm9udElEICAodm9pZCkgeyByZXR1cm4gIDM4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfbWF4VmlzaWJsZUxpbmVzICAodm9pZCkgeyByZXR1cm4gIDM5IDsgfSAgCX07IAljbGFzcyBF bVByb3h5RmllbGRUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJv eHlGaWVsZFR5cGUgIAkodm9pZCk7CUVtUHJveHlGaWVsZFR5cGUgIAkoY29uc3QgRW1Qcm94eUZp ZWxkVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRy X3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyBy ZXR1cm4gICAgIDQwICA7IH0JRW1Qcm94eUZpZWxkVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBF bVByb3h5RmllbGRUeXBlICAmKTsJRW1BbGlhc0ZpZWxkVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAo aW50KTsJY29uc3QgRW1BbGlhc0ZpZWxkVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25z dDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgNDAgIF07CX0gZkxvY2FsRGF0 YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWlkIDsgCSBFbUFsaWFz UmVjdGFuZ2xlVHlwZSA8TEFTPgkgCQkJCXJlY3QgOyAJIEVtQWxpYXNGaWVsZEF0dHJUeXBlIDxM QVM+CSAJCQkJYXR0ciA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJdGV4dCA7IAkgRW1B bGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJdGV4dEhhbmRsZSA7IAkgRW1BbGlhc2VtdXB0ciA8TEFT PgkgCQkJCQkJbGluZXMgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXRleHRMZW4gOyAJ IEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXRleHRCbG9ja1NpemUgOyAJIEVtQWxpYXNVSW50 MTYgPExBUz4JIAkJCQkJCW1heENoYXJzIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlz ZWxGaXJzdFBvcyA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJc2VsTGFzdFBvcyA7IAkg RW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJaW5zUHRYUG9zIDsgCSBFbUFsaWFzVUludDE2IDxM QVM+CSAJCQkJCQlpbnNQdFlQb3MgOyAJIEVtQWxpYXNGb250SUQgPExBUz4JIAkJCQkJCWZvbnRJ RCA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJbWF4VmlzaWJsZUxpbmVzIDsgIAkgICAg IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaWQgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3JlY3QgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2F0dHIgICh2b2lkKSB7IHJldHVybiAgMTAgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl90ZXh0ICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfdGV4dEhhbmRsZSAgKHZvaWQpIHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2xpbmVzICAodm9pZCkgeyByZXR1cm4gIDIwIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfdGV4dExlbiAgKHZvaWQpIHsgcmV0dXJuICAyNCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3RleHRCbG9ja1NpemUgICh2b2lkKSB7IHJldHVybiAgMjYgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9tYXhDaGFycyAgKHZvaWQpIHsgcmV0dXJuICAyOCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3NlbEZpcnN0UG9zICAodm9pZCkgeyByZXR1cm4gIDMw IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc2VsTGFzdFBvcyAgKHZvaWQpIHsgcmV0dXJu ICAzMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0WFBvcyAgKHZvaWQpIHsgcmV0 dXJuICAzNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2luc1B0WVBvcyAgKHZvaWQpIHsg cmV0dXJuICAzNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZvbnRJRCAgKHZvaWQpIHsg cmV0dXJuICAzOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX21heFZpc2libGVMaW5lcyAg KHZvaWQpIHsgcmV0dXJuICAzOSA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFz cyBFbUFsaWFzTGlzdEF0dHJUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRy X3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNMaXN0QXR0clR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFz TGlzdEF0dHJUeXBlICAJKGNvbnN0IEVtQWxpYXNMaXN0QXR0clR5cGUgICYpOwlwdHJfdHlwZQkJ CUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRT aXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICAyICA7IH0JRW1BbGlhc0xpc3RBdHRyVHlwZSAgPEE+ JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNMaXN0QXR0clR5cGUgIDxBPiYpOwlFbUFsaWFzTGlz dEF0dHJUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0xpc3RBdHRyVHlw ZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNMaXN0QXR0clR5 cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYg PEE+CSAJCQkJCQlmbGFncyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZsYWdzICAo dm9pZCkgeyByZXR1cm4gIDAgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlMaXN0QXR0clR5cGUgIAl7 CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUxpc3RBdHRyVHlwZSAgCSh2 b2lkKTsJRW1Qcm94eUxpc3RBdHRyVHlwZSAgCShjb25zdCBFbVByb3h5TGlzdEF0dHJUeXBlICAm KTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZM b2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAg MiAgOyB9CUVtUHJveHlMaXN0QXR0clR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eUxp c3RBdHRyVHlwZSAgJik7CUVtQWxpYXNMaXN0QXR0clR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGlu dCk7CWNvbnN0IEVtQWxpYXNMaXN0QXR0clR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29u c3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDIgIF07CX0gZkxvY2FsRGF0 YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWZsYWdzIDsgIAkgICAg IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmxhZ3MgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gIAl9 OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzTGlzdFR5cGUgIAl7CXB1Ymxp YzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc0xpc3RUeXBl ICAJKHB0cl90eXBlKTsJRW1BbGlhc0xpc3RUeXBlICAJKGNvbnN0IEVtQWxpYXNMaXN0VHlwZSAg Jik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRp YyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDMyICA7IH0JRW1BbGlhc0xp c3RUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc0xpc3RUeXBlICA8QT4mKTsJRW1B bGlhc0xpc3RUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0xpc3RUeXBl ICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc0xpc3RUeXBlICAJ KHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxBPgkg CQkJCQkJaWQgOyAJIEVtQWxpYXNSZWN0YW5nbGVUeXBlIDxBPgkgCQkJCWJvdW5kcyA7IAkgRW1B bGlhc0xpc3RBdHRyVHlwZSA8QT4JIAkJCQlhdHRyIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJ CQkJaXRlbXNUZXh0IDsgCSBFbUFsaWFzSW50MTYgPEE+CSAJCQkJCQludW1JdGVtcyA7IAkgRW1B bGlhc0ludDE2IDxBPgkgCQkJCQkJY3VycmVudEl0ZW0gOyAJIEVtQWxpYXNJbnQxNiA8QT4JIAkJ CQkJCXRvcEl0ZW0gOyAJIEVtQWxpYXNGb250SUQgPEE+CSAJCQkJCQlmb250IDsgCSBFbUFsaWFz VUludDggPEE+CSAJCQkJCQlyZXNlcnZlZCA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXBv cHVwV2luIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJZHJhd0l0ZW1zQ2FsbGJhY2sgOyAg CSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pZCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYm91bmRzICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9hdHRyICAodm9pZCkgeyByZXR1cm4gIDEwIDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaXRlbXNUZXh0ICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbnVtSXRlbXMgICh2b2lkKSB7IHJldHVybiAgMTYgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jdXJyZW50SXRlbSAgKHZvaWQpIHsgcmV0dXJuICAx OCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3RvcEl0ZW0gICh2b2lkKSB7IHJldHVybiAg MjAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mb250ICAodm9pZCkgeyByZXR1cm4gIDIy IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcmVzZXJ2ZWQgICh2b2lkKSB7IHJldHVybiAg MjMgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9wb3B1cFdpbiAgKHZvaWQpIHsgcmV0dXJu ICAyNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2RyYXdJdGVtc0NhbGxiYWNrICAodm9p ZCkgeyByZXR1cm4gIDI4IDsgfSAgCX07IAljbGFzcyBFbVByb3h5TGlzdFR5cGUgIAl7CXB1Ymxp YzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUxpc3RUeXBlICAJKHZvaWQpOwlFbVBy b3h5TGlzdFR5cGUgIAkoY29uc3QgRW1Qcm94eUxpc3RUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQ dHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGlj IHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMzIgIDsgfQlFbVByb3h5TGlz dFR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eUxpc3RUeXBlICAmKTsJRW1BbGlhc0xp c3RUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzTGlzdFR5cGUgIDxM QVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0 ZXNbICAgIDMyICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzVUludDE2IDxM QVM+CSAJCQkJCQlpZCA7IAkgRW1BbGlhc1JlY3RhbmdsZVR5cGUgPExBUz4JIAkJCQlib3VuZHMg OyAJIEVtQWxpYXNMaXN0QXR0clR5cGUgPExBUz4JIAkJCQlhdHRyIDsgCSBFbUFsaWFzZW11cHRy IDxMQVM+CSAJCQkJCQlpdGVtc1RleHQgOyAJIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJbnVt SXRlbXMgOyAJIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJY3VycmVudEl0ZW0gOyAJIEVtQWxp YXNJbnQxNiA8TEFTPgkgCQkJCQkJdG9wSXRlbSA7IAkgRW1BbGlhc0ZvbnRJRCA8TEFTPgkgCQkJ CQkJZm9udCA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlyZXNlcnZlZCA7IAkgRW1BbGlh c2VtdXB0ciA8TEFTPgkgCQkJCQkJcG9wdXBXaW4gOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJ CQkJCWRyYXdJdGVtc0NhbGxiYWNrIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaWQg ICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2JvdW5kcyAg KHZvaWQpIHsgcmV0dXJuICAyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYXR0ciAgKHZv aWQpIHsgcmV0dXJuICAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2l0ZW1zVGV4dCAg KHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX251bUl0ZW1z ICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY3VycmVu dEl0ZW0gICh2b2lkKSB7IHJldHVybiAgMTggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl90 b3BJdGVtICAodm9pZCkgeyByZXR1cm4gIDIwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf Zm9udCAgKHZvaWQpIHsgcmV0dXJuICAyMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Jl c2VydmVkICAodm9pZCkgeyByZXR1cm4gIDIzIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf cG9wdXBXaW4gICh2b2lkKSB7IHJldHVybiAgMjQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9kcmF3SXRlbXNDYWxsYmFjayAgKHZvaWQpIHsgcmV0dXJuICAyOCA7IH0gIAl9OyAgIAkgIHRl bXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzVGFibGVBdHRyVHlwZSAgCXsJcHVibGljOgl0 eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzVGFibGVBdHRyVHlw ZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNUYWJsZUF0dHJUeXBlICAJKGNvbnN0IEVtQWxpYXNUYWJs ZUF0dHJUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQ dHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMiAgOyB9 CUVtQWxpYXNUYWJsZUF0dHJUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc1RhYmxl QXR0clR5cGUgIDxBPiYpOwlFbUFsaWFzVGFibGVBdHRyVHlwZSAgPEE+CW9wZXJhdG9yW10gKGlu dCk7CWNvbnN0IEVtQWxpYXNUYWJsZUF0dHJUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25z dDsJcHJpdmF0ZToJRW1BbGlhc1RhYmxlQXR0clR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0 cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MzIgPEE+CSAJCQkJCQlmbGFncyA7ICAJICAgICBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZsYWdzICAodm9pZCkgeyByZXR1cm4gIDAgOyB9ICAJfTsg CWNsYXNzIEVtUHJveHlUYWJsZUF0dHJUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRy X3R5cGU7CUVtUHJveHlUYWJsZUF0dHJUeXBlICAJKHZvaWQpOwlFbVByb3h5VGFibGVBdHRyVHlw ZSAgCShjb25zdCBFbVByb3h5VGFibGVBdHRyVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2 b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXpl X3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDIgIDsgfQlFbVByb3h5VGFibGVBdHRy VHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5VGFibGVBdHRyVHlwZSAgJik7CUVtQWxp YXNUYWJsZUF0dHJUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzVGFi bGVBdHRyVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0 IHsJY2hhcgkJCV9ieXRlc1sgICAgMiAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1B bGlhc1VJbnQzMiA8TEFTPgkgCQkJCQkJZmxhZ3MgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9mbGFncyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNs YXNzIEE+CWNsYXNzIEVtQWxpYXNUYWJsZVR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFt ZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc1RhYmxlVHlwZSAgCShwdHJfdHlwZSk7CUVt QWxpYXNUYWJsZVR5cGUgIAkoY29uc3QgRW1BbGlhc1RhYmxlVHlwZSAgJik7CXB0cl90eXBlCQkJ R2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNp emUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDc0ICA7IH0JRW1BbGlhc1RhYmxlVHlwZSAgPEE+Jglv cGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNUYWJsZVR5cGUgIDxBPiYpOwlFbUFsaWFzVGFibGVUeXBl ICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1RhYmxlVHlwZSAgPEE+CW9wZXJh dG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNUYWJsZVR5cGUgIAkodm9pZCk7CXB0 cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlpZCA7 IAkgRW1BbGlhc1JlY3RhbmdsZVR5cGUgPEE+CSAJCQkJYm91bmRzIDsgCSBFbUFsaWFzVGFibGVB dHRyVHlwZSA8QT4JIAkJCQlhdHRyIDsgCSBFbUFsaWFzSW50MTYgPEE+CSAJCQkJCQludW1Db2x1 bW5zIDsgCSBFbUFsaWFzSW50MTYgPEE+CSAJCQkJCQludW1Sb3dzIDsgCSBFbUFsaWFzSW50MTYg PEE+CSAJCQkJCQljdXJyZW50Um93IDsgCSBFbUFsaWFzSW50MTYgPEE+CSAJCQkJCQljdXJyZW50 Q29sdW1uIDsgCSBFbUFsaWFzSW50MTYgPEE+CSAJCQkJCQl0b3BSb3cgOyAJIEVtQWxpYXNlbXVw dHIgPEE+CSAJCQkJCQljb2x1bW5BdHRycyA7IAkgRW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCXJv d0F0dHJzIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJaXRlbXMgOyAJIEVtQWxpYXNGaWVs ZFR5cGUgPEE+CSAJCQkJCWN1cnJlbnRGaWVsZCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2lkICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9i b3VuZHMgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2F0 dHIgICh2b2lkKSB7IHJldHVybiAgMTAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9udW1D b2x1bW5zICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf bnVtUm93cyAgKHZvaWQpIHsgcmV0dXJuICAxNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9m X2N1cnJlbnRSb3cgICh2b2lkKSB7IHJldHVybiAgMTYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9jdXJyZW50Q29sdW1uICAodm9pZCkgeyByZXR1cm4gIDE4IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfdG9wUm93ICAodm9pZCkgeyByZXR1cm4gIDIwIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfY29sdW1uQXR0cnMgICh2b2lkKSB7IHJldHVybiAgMjIgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9yb3dBdHRycyAgKHZvaWQpIHsgcmV0dXJuICAyNiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2l0ZW1zICAodm9pZCkgeyByZXR1cm4gIDMwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfY3VycmVudEZpZWxkICAodm9pZCkgeyByZXR1cm4gIDM0IDsgfSAg CX07IAljbGFzcyBFbVByb3h5VGFibGVUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRy X3R5cGU7CUVtUHJveHlUYWJsZVR5cGUgIAkodm9pZCk7CUVtUHJveHlUYWJsZVR5cGUgIAkoY29u c3QgRW1Qcm94eVRhYmxlVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7 IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJ KHZvaWQpCQkJeyByZXR1cm4gICAgIDc0ICA7IH0JRW1Qcm94eVRhYmxlVHlwZSAgJgkJb3BlcmF0 b3I9IChjb25zdCBFbVByb3h5VGFibGVUeXBlICAmKTsJRW1BbGlhc1RhYmxlVHlwZSAgPExBUz4J b3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc1RhYmxlVHlwZSAgPExBUz4Jb3BlcmF0b3Jb XSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgNzQgIF07 CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCWlk IDsgCSBFbUFsaWFzUmVjdGFuZ2xlVHlwZSA8TEFTPgkgCQkJCWJvdW5kcyA7IAkgRW1BbGlhc1Rh YmxlQXR0clR5cGUgPExBUz4JIAkJCQlhdHRyIDsgCSBFbUFsaWFzSW50MTYgPExBUz4JIAkJCQkJ CW51bUNvbHVtbnMgOyAJIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJbnVtUm93cyA7IAkgRW1B bGlhc0ludDE2IDxMQVM+CSAJCQkJCQljdXJyZW50Um93IDsgCSBFbUFsaWFzSW50MTYgPExBUz4J IAkJCQkJCWN1cnJlbnRDb2x1bW4gOyAJIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJCQkJdG9wUm93 IDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQljb2x1bW5BdHRycyA7IAkgRW1BbGlhc2Vt dXB0ciA8TEFTPgkgCQkJCQkJcm93QXR0cnMgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJ CWl0ZW1zIDsgCSBFbUFsaWFzRmllbGRUeXBlIDxMQVM+CSAJCQkJCWN1cnJlbnRGaWVsZCA7ICAJ ICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2lkICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9ib3VuZHMgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBz dGF0aWMgc2l6ZV90CW9mZnNldG9mX2F0dHIgICh2b2lkKSB7IHJldHVybiAgMTAgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9udW1Db2x1bW5zICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbnVtUm93cyAgKHZvaWQpIHsgcmV0dXJuICAxNCA7IH0g CSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2N1cnJlbnRSb3cgICh2b2lkKSB7IHJldHVybiAgMTYg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9jdXJyZW50Q29sdW1uICAodm9pZCkgeyByZXR1 cm4gIDE4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdG9wUm93ICAodm9pZCkgeyByZXR1 cm4gIDIwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY29sdW1uQXR0cnMgICh2b2lkKSB7 IHJldHVybiAgMjIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9yb3dBdHRycyAgKHZvaWQp IHsgcmV0dXJuICAyNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2l0ZW1zICAodm9pZCkg eyByZXR1cm4gIDMwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY3VycmVudEZpZWxkICAo dm9pZCkgeyByZXR1cm4gIDM0IDsgfSAgCX07ICAgIAogIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFz cyBFbUFsaWFzSG9zdERpckVudFR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpw dHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc0hvc3REaXJFbnRUeXBlICAJKHB0cl90eXBlKTsJRW1B bGlhc0hvc3REaXJFbnRUeXBlICAJKGNvbnN0IEVtQWxpYXNIb3N0RGlyRW50VHlwZSAgJik7CXB0 cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXpl X3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDI1NiAgOyB9CUVtQWxpYXNIb3N0RGly RW50VHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNIb3N0RGlyRW50VHlwZSAgPEE+ Jik7CUVtQWxpYXNIb3N0RGlyRW50VHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVt QWxpYXNIb3N0RGlyRW50VHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6 CUVtQWxpYXNIb3N0RGlyRW50VHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6 CSAgICAgRW1BbGlhc0ludDggPEE+CSAJCQkJCQlkX25hbWUgOyAgCSAgICAgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9kX25hbWUgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gIAl9OyAJY2xhc3MgRW1Q cm94eUhvc3REaXJFbnRUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVt UHJveHlIb3N0RGlyRW50VHlwZSAgCSh2b2lkKTsJRW1Qcm94eUhvc3REaXJFbnRUeXBlICAJKGNv bnN0IEVtUHJveHlIb3N0RGlyRW50VHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBj b25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdl dFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDI1NiAgOyB9CUVtUHJveHlIb3N0RGlyRW50VHlw ZSAgJgkJb3BlcmF0b3I9IChjb25zdCBFbVByb3h5SG9zdERpckVudFR5cGUgICYpOwlFbUFsaWFz SG9zdERpckVudFR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNIb3N0 RGlyRW50VHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0 IHsJY2hhcgkJCV9ieXRlc1sgICAgMjU2ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBF bUFsaWFzSW50OCA8TEFTPgkgCQkJCQkJZF9uYW1lIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfZF9uYW1lICAodm9pZCkgeyByZXR1cm4gIDAgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8 Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc0hvc3RHcmVtbGluSW5mb1R5cGUgIAl7CXB1YmxpYzoJdHlw ZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc0hvc3RHcmVtbGluSW5m b1R5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzSG9zdEdyZW1saW5JbmZvVHlwZSAgCShjb25zdCBF bUFsaWFzSG9zdEdyZW1saW5JbmZvVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBj b25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyBy ZXR1cm4gICAgIDIyMCAgOyB9CUVtQWxpYXNIb3N0R3JlbWxpbkluZm9UeXBlICA8QT4mCW9wZXJh dG9yPSAoY29uc3QgRW1BbGlhc0hvc3RHcmVtbGluSW5mb1R5cGUgIDxBPiYpOwlFbUFsaWFzSG9z dEdyZW1saW5JbmZvVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNIb3N0 R3JlbWxpbkluZm9UeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1B bGlhc0hvc3RHcmVtbGluSW5mb1R5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGlj OgkgICAgIEVtQWxpYXNJbnQzMiA8QT4JIAkJCQkJCWZGaXJzdEdyZW1saW4gOyAJIEVtQWxpYXNJ bnQzMiA8QT4JIAkJCQkJCWZMYXN0R3JlbWxpbiA7IAkgRW1BbGlhc0ludDMyIDxBPgkgCQkJCQkJ ZlNhdmVGcmVxdWVuY3kgOyAJIEVtQWxpYXNJbnQzMiA8QT4JIAkJCQkJCWZTd2l0Y2hEZXB0aCA7 IAkgRW1BbGlhc0ludDMyIDxBPgkgCQkJCQkJZk1heERlcHRoIDsgCSBFbUFsaWFzSW50OCA8QT4J IAkJCQkJCWZBcHBOYW1lcyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZGaXJzdEdy ZW1saW4gICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZM YXN0R3JlbWxpbiAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0 b2ZfZlNhdmVGcmVxdWVuY3kgICh2b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2ZTd2l0Y2hEZXB0aCAgKHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX2ZNYXhEZXB0aCAgKHZvaWQpIHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX2ZBcHBOYW1lcyAgKHZvaWQpIHsgcmV0dXJuICAyMCA7IH0gIAl9 OyAJY2xhc3MgRW1Qcm94eUhvc3RHcmVtbGluSW5mb1R5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2 b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUhvc3RHcmVtbGluSW5mb1R5cGUgIAkodm9pZCk7CUVtUHJv eHlIb3N0R3JlbWxpbkluZm9UeXBlICAJKGNvbnN0IEVtUHJveHlIb3N0R3JlbWxpbkluZm9UeXBl ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkg JmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAg ICAgMjIwICA7IH0JRW1Qcm94eUhvc3RHcmVtbGluSW5mb1R5cGUgICYJCW9wZXJhdG9yPSAoY29u c3QgRW1Qcm94eUhvc3RHcmVtbGluSW5mb1R5cGUgICYpOwlFbUFsaWFzSG9zdEdyZW1saW5JbmZv VHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0hvc3RHcmVtbGluSW5m b1R5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNo YXIJCQlfYnl0ZXNbICAgIDIyMCAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlh c0ludDMyIDxMQVM+CSAJCQkJCQlmRmlyc3RHcmVtbGluIDsgCSBFbUFsaWFzSW50MzIgPExBUz4J IAkJCQkJCWZMYXN0R3JlbWxpbiA7IAkgRW1BbGlhc0ludDMyIDxMQVM+CSAJCQkJCQlmU2F2ZUZy ZXF1ZW5jeSA7IAkgRW1BbGlhc0ludDMyIDxMQVM+CSAJCQkJCQlmU3dpdGNoRGVwdGggOyAJIEVt QWxpYXNJbnQzMiA8TEFTPgkgCQkJCQkJZk1heERlcHRoIDsgCSBFbUFsaWFzSW50OCA8TEFTPgkg CQkJCQkJZkFwcE5hbWVzIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZkZpcnN0R3Jl bWxpbiAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZkxh c3RHcmVtbGluICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9mU2F2ZUZyZXF1ZW5jeSAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfZlN3aXRjaERlcHRoICAodm9pZCkgeyByZXR1cm4gIDEyIDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfZk1heERlcHRoICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfZkFwcE5hbWVzICAodm9pZCkgeyByZXR1cm4gIDIwIDsgfSAgCX07 ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNIb3N0U3RhdFR5cGUgIAl7CXB1 YmxpYzoJdHlwZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc0hvc3RT dGF0VHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNIb3N0U3RhdFR5cGUgIAkoY29uc3QgRW1BbGlh c0hvc3RTdGF0VHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVy biBmUHRyOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDU2 ICA7IH0JRW1BbGlhc0hvc3RTdGF0VHlwZSAgPEE+JglvcGVyYXRvcj0gKGNvbnN0IEVtQWxpYXNI b3N0U3RhdFR5cGUgIDxBPiYpOwlFbUFsaWFzSG9zdFN0YXRUeXBlICA8QT4Jb3BlcmF0b3JbXSAo aW50KTsJY29uc3QgRW1BbGlhc0hvc3RTdGF0VHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29u c3Q7CXByaXZhdGU6CUVtQWxpYXNIb3N0U3RhdFR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0 cjsJcHVibGljOgkgICAgIEVtQWxpYXNJbnQzMiA8QT4JIAkJCQkJCXN0X2Rldl8gOyAJIEVtQWxp YXNJbnQzMiA8QT4JIAkJCQkJCXN0X2lub18gOyAJIEVtQWxpYXNJbnQzMiA8QT4JIAkJCQkJCXN0 X21vZGVfIDsgCSBFbUFsaWFzSW50MzIgPEE+CSAJCQkJCQlzdF9ubGlua18gOyAJIEVtQWxpYXNJ bnQzMiA8QT4JIAkJCQkJCXN0X3VpZF8gOyAJIEVtQWxpYXNJbnQzMiA8QT4JIAkJCQkJCXN0X2dp ZF8gOyAJIEVtQWxpYXNJbnQzMiA8QT4JIAkJCQkJCXN0X3JkZXZfIDsgCSBFbUFsaWFzSG9zdFRp bWVUeXBlIDxBPgkgCQkJCXN0X2F0aW1lXyA7IAkgRW1BbGlhc0hvc3RUaW1lVHlwZSA8QT4JIAkJ CQlzdF9tdGltZV8gOyAJIEVtQWxpYXNIb3N0VGltZVR5cGUgPEE+CSAJCQkJc3RfY3RpbWVfIDsg CSBFbUFsaWFzSW50MzIgPEE+CSAJCQkJCQlzdF9zaXplXyA7IAkgRW1BbGlhc0ludDMyIDxBPgkg CQkJCQkJc3RfYmxrc2l6ZV8gOyAJIEVtQWxpYXNJbnQzMiA8QT4JIAkJCQkJCXN0X2Jsb2Nrc18g OyAJIEVtQWxpYXNJbnQzMiA8QT4JIAkJCQkJCXN0X2ZsYWdzXyA7ICAJICAgICBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX3N0X2Rldl8gICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX3N0X2lub18gICh2b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX3N0X21vZGVfICAodm9pZCkgeyByZXR1cm4gIDggOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9zdF9ubGlua18gICh2b2lkKSB7IHJldHVybiAgMTIgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9zdF91aWRfICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2Zfc3RfZ2lkXyAgKHZvaWQpIHsgcmV0dXJuICAyMCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3N0X3JkZXZfICAodm9pZCkgeyByZXR1cm4gIDI0IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3RfYXRpbWVfICAodm9pZCkgeyByZXR1cm4gIDI4IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3RfbXRpbWVfICAodm9pZCkgeyByZXR1cm4gIDMyIDsg fSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3RfY3RpbWVfICAodm9pZCkgeyByZXR1cm4gIDM2 IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3Rfc2l6ZV8gICh2b2lkKSB7IHJldHVybiAg NDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zdF9ibGtzaXplXyAgKHZvaWQpIHsgcmV0 dXJuICA0NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N0X2Jsb2Nrc18gICh2b2lkKSB7 IHJldHVybiAgNDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zdF9mbGFnc18gICh2b2lk KSB7IHJldHVybiAgNTIgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlIb3N0U3RhdFR5cGUgIAl7CXB1 YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eUhvc3RTdGF0VHlwZSAgCSh2b2lk KTsJRW1Qcm94eUhvc3RTdGF0VHlwZSAgCShjb25zdCBFbVByb3h5SG9zdFN0YXRUeXBlICAmKTsJ cHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2Nh bERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgNTYg IDsgfQlFbVByb3h5SG9zdFN0YXRUeXBlICAmCQlvcGVyYXRvcj0gKGNvbnN0IEVtUHJveHlIb3N0 U3RhdFR5cGUgICYpOwlFbUFsaWFzSG9zdFN0YXRUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQp Owljb25zdCBFbUFsaWFzSG9zdFN0YXRUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0 Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA1NiAgXTsJfSBmTG9jYWxEYXRh OwlwdWJsaWM6CSAgICAgRW1BbGlhc0ludDMyIDxMQVM+CSAJCQkJCQlzdF9kZXZfIDsgCSBFbUFs aWFzSW50MzIgPExBUz4JIAkJCQkJCXN0X2lub18gOyAJIEVtQWxpYXNJbnQzMiA8TEFTPgkgCQkJ CQkJc3RfbW9kZV8gOyAJIEVtQWxpYXNJbnQzMiA8TEFTPgkgCQkJCQkJc3RfbmxpbmtfIDsgCSBF bUFsaWFzSW50MzIgPExBUz4JIAkJCQkJCXN0X3VpZF8gOyAJIEVtQWxpYXNJbnQzMiA8TEFTPgkg CQkJCQkJc3RfZ2lkXyA7IAkgRW1BbGlhc0ludDMyIDxMQVM+CSAJCQkJCQlzdF9yZGV2XyA7IAkg RW1BbGlhc0hvc3RUaW1lVHlwZSA8TEFTPgkgCQkJCXN0X2F0aW1lXyA7IAkgRW1BbGlhc0hvc3RU aW1lVHlwZSA8TEFTPgkgCQkJCXN0X210aW1lXyA7IAkgRW1BbGlhc0hvc3RUaW1lVHlwZSA8TEFT PgkgCQkJCXN0X2N0aW1lXyA7IAkgRW1BbGlhc0ludDMyIDxMQVM+CSAJCQkJCQlzdF9zaXplXyA7 IAkgRW1BbGlhc0ludDMyIDxMQVM+CSAJCQkJCQlzdF9ibGtzaXplXyA7IAkgRW1BbGlhc0ludDMy IDxMQVM+CSAJCQkJCQlzdF9ibG9ja3NfIDsgCSBFbUFsaWFzSW50MzIgPExBUz4JIAkJCQkJCXN0 X2ZsYWdzXyA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N0X2Rldl8gICh2b2lkKSB7 IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N0X2lub18gICh2b2lkKSB7 IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N0X21vZGVfICAodm9pZCkg eyByZXR1cm4gIDggOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zdF9ubGlua18gICh2b2lk KSB7IHJldHVybiAgMTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9zdF91aWRfICAodm9p ZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3RfZ2lkXyAgKHZv aWQpIHsgcmV0dXJuICAyMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3N0X3JkZXZfICAo dm9pZCkgeyByZXR1cm4gIDI0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3RfYXRpbWVf ICAodm9pZCkgeyByZXR1cm4gIDI4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3RfbXRp bWVfICAodm9pZCkgeyByZXR1cm4gIDMyIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zfc3Rf Y3RpbWVfICAodm9pZCkgeyByZXR1cm4gIDM2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2Zf c3Rfc2l6ZV8gICh2b2lkKSB7IHJldHVybiAgNDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRv Zl9zdF9ibGtzaXplXyAgKHZvaWQpIHsgcmV0dXJuICA0NCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX3N0X2Jsb2Nrc18gICh2b2lkKSB7IHJldHVybiAgNDggOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9zdF9mbGFnc18gICh2b2lkKSB7IHJldHVybiAgNTIgOyB9ICAJfTsgICAJICB0 ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc0hvc3RUbVR5cGUgIAl7CXB1YmxpYzoJdHlw ZWRlZiB0eXBlbmFtZSBBOjpwdHJfdHlwZSBwdHJfdHlwZTsJRW1BbGlhc0hvc3RUbVR5cGUgIAko cHRyX3R5cGUpOwlFbUFsaWFzSG9zdFRtVHlwZSAgCShjb25zdCBFbUFsaWFzSG9zdFRtVHlwZSAg Jik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiBmUHRyOyB9CXN0YXRp YyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDM2ICA7IH0JRW1BbGlhc0hv c3RUbVR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzSG9zdFRtVHlwZSAgPEE+Jik7 CUVtQWxpYXNIb3N0VG1UeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc0hv c3RUbVR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzSG9z dFRtVHlwZSAgCSh2b2lkKTsJcHRyX3R5cGUJCQlmUHRyOwlwdWJsaWM6CSAgICAgRW1BbGlhc0lu dDMyIDxBPgkgCQkJCQkJdG1fc2VjXyA7IAkgRW1BbGlhc0ludDMyIDxBPgkgCQkJCQkJdG1fbWlu XyA7IAkgRW1BbGlhc0ludDMyIDxBPgkgCQkJCQkJdG1faG91cl8gOyAJIEVtQWxpYXNJbnQzMiA8 QT4JIAkJCQkJCXRtX21kYXlfIDsgCSBFbUFsaWFzSW50MzIgPEE+CSAJCQkJCQl0bV9tb25fIDsg CSBFbUFsaWFzSW50MzIgPEE+CSAJCQkJCQl0bV95ZWFyXyA7IAkgRW1BbGlhc0ludDMyIDxBPgkg CQkJCQkJdG1fd2RheV8gOyAJIEVtQWxpYXNJbnQzMiA8QT4JIAkJCQkJCXRtX3lkYXlfIDsgCSBF bUFsaWFzSW50MzIgPEE+CSAJCQkJCQl0bV9pc2RzdF8gOyAgCSAgICAgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl90bV9zZWNfICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl90bV9taW5fICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl90bV9ob3VyXyAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfdG1fbWRheV8gICh2b2lkKSB7IHJldHVybiAgMTIgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl90bV9tb25fICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfdG1feWVhcl8gICh2b2lkKSB7IHJldHVybiAgMjAgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl90bV93ZGF5XyAgKHZvaWQpIHsgcmV0dXJuICAyNCA7IH0gCSBzdGF0aWMg c2l6ZV90CW9mZnNldG9mX3RtX3lkYXlfICAodm9pZCkgeyByZXR1cm4gIDI4IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfdG1faXNkc3RfICAodm9pZCkgeyByZXR1cm4gIDMyIDsgfSAgCX07 IAljbGFzcyBFbVByb3h5SG9zdFRtVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90 eXBlOwlFbVByb3h5SG9zdFRtVHlwZSAgCSh2b2lkKTsJRW1Qcm94eUhvc3RUbVR5cGUgIAkoY29u c3QgRW1Qcm94eUhvc3RUbVR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJ eyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXpl CSh2b2lkKQkJCXsgcmV0dXJuICAgICAzNiAgOyB9CUVtUHJveHlIb3N0VG1UeXBlICAmCQlvcGVy YXRvcj0gKGNvbnN0IEVtUHJveHlIb3N0VG1UeXBlICAmKTsJRW1BbGlhc0hvc3RUbVR5cGUgIDxM QVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNIb3N0VG1UeXBlICA8TEFTPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICAz NiAgXTsJfSBmTG9jYWxEYXRhOwlwdWJsaWM6CSAgICAgRW1BbGlhc0ludDMyIDxMQVM+CSAJCQkJ CQl0bV9zZWNfIDsgCSBFbUFsaWFzSW50MzIgPExBUz4JIAkJCQkJCXRtX21pbl8gOyAJIEVtQWxp YXNJbnQzMiA8TEFTPgkgCQkJCQkJdG1faG91cl8gOyAJIEVtQWxpYXNJbnQzMiA8TEFTPgkgCQkJ CQkJdG1fbWRheV8gOyAJIEVtQWxpYXNJbnQzMiA8TEFTPgkgCQkJCQkJdG1fbW9uXyA7IAkgRW1B bGlhc0ludDMyIDxMQVM+CSAJCQkJCQl0bV95ZWFyXyA7IAkgRW1BbGlhc0ludDMyIDxMQVM+CSAJ CQkJCQl0bV93ZGF5XyA7IAkgRW1BbGlhc0ludDMyIDxMQVM+CSAJCQkJCQl0bV95ZGF5XyA7IAkg RW1BbGlhc0ludDMyIDxMQVM+CSAJCQkJCQl0bV9pc2RzdF8gOyAgCSAgICAgc3RhdGljIHNpemVf dAlvZmZzZXRvZl90bV9zZWNfICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl90bV9taW5fICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl90bV9ob3VyXyAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfdG1fbWRheV8gICh2b2lkKSB7IHJldHVybiAgMTIgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl90bV9tb25fICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJIHN0YXRpYyBz aXplX3QJb2Zmc2V0b2ZfdG1feWVhcl8gICh2b2lkKSB7IHJldHVybiAgMjAgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl90bV93ZGF5XyAgKHZvaWQpIHsgcmV0dXJuICAyNCA7IH0gCSBzdGF0 aWMgc2l6ZV90CW9mZnNldG9mX3RtX3lkYXlfICAodm9pZCkgeyByZXR1cm4gIDI4IDsgfSAJIHN0 YXRpYyBzaXplX3QJb2Zmc2V0b2ZfdG1faXNkc3RfICAodm9pZCkgeyByZXR1cm4gIDMyIDsgfSAg CX07ICAgCSAgdGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNIb3N0VVRpbWVUeXBlICAJ ewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNI b3N0VVRpbWVUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc0hvc3RVVGltZVR5cGUgIAkoY29uc3Qg RW1BbGlhc0hvc3RVVGltZVR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJ eyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJu ICAgICAxMiAgOyB9CUVtQWxpYXNIb3N0VVRpbWVUeXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3Qg RW1BbGlhc0hvc3RVVGltZVR5cGUgIDxBPiYpOwlFbUFsaWFzSG9zdFVUaW1lVHlwZSAgPEE+CW9w ZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNIb3N0VVRpbWVUeXBlICA8QT4Jb3BlcmF0b3Jb XSAoaW50KSBjb25zdDsJcHJpdmF0ZToJRW1BbGlhc0hvc3RVVGltZVR5cGUgIAkodm9pZCk7CXB0 cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNIb3N0VGltZVR5cGUgPEE+CSAJCQkJ Y3J0aW1lXyA7IAkgRW1BbGlhc0hvc3RUaW1lVHlwZSA8QT4JIAkJCQlhY3RpbWVfIDsgCSBFbUFs aWFzSG9zdFRpbWVUeXBlIDxBPgkgCQkJCW1vZHRpbWVfIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfY3J0aW1lXyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfYWN0aW1lXyAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJ b2Zmc2V0b2ZfbW9kdGltZV8gICh2b2lkKSB7IHJldHVybiAgOCA7IH0gIAl9OyAJY2xhc3MgRW1Q cm94eUhvc3RVVGltZVR5cGUgIAl7CXB1YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Q cm94eUhvc3RVVGltZVR5cGUgIAkodm9pZCk7CUVtUHJveHlIb3N0VVRpbWVUeXBlICAJKGNvbnN0 IEVtUHJveHlIb3N0VVRpbWVUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0 CXsgcmV0dXJuIChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6 ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTIgIDsgfQlFbVByb3h5SG9zdFVUaW1lVHlwZSAgJgkJ b3BlcmF0b3I9IChjb25zdCBFbVByb3h5SG9zdFVUaW1lVHlwZSAgJik7CUVtQWxpYXNIb3N0VVRp bWVUeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzSG9zdFVUaW1lVHlw ZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJ CV9ieXRlc1sgICAgMTIgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNIb3N0 VGltZVR5cGUgPExBUz4JIAkJCQljcnRpbWVfIDsgCSBFbUFsaWFzSG9zdFRpbWVUeXBlIDxMQVM+ CSAJCQkJYWN0aW1lXyA7IAkgRW1BbGlhc0hvc3RUaW1lVHlwZSA8TEFTPgkgCQkJCW1vZHRpbWVf IDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfY3J0aW1lXyAgKHZvaWQpIHsgcmV0dXJu ICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYWN0aW1lXyAgKHZvaWQpIHsgcmV0dXJu ICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbW9kdGltZV8gICh2b2lkKSB7IHJldHVy biAgOCA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzTmV0SG9z dEluZm9UeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5 cGU7CUVtQWxpYXNOZXRIb3N0SW5mb1R5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzTmV0SG9zdElu Zm9UeXBlICAJKGNvbnN0IEVtQWxpYXNOZXRIb3N0SW5mb1R5cGUgICYpOwlwdHJfdHlwZQkJCUdl dFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXpl CSh2b2lkKQkJCXsgcmV0dXJuICAgICAxNiAgOyB9CUVtQWxpYXNOZXRIb3N0SW5mb1R5cGUgIDxB PiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzTmV0SG9zdEluZm9UeXBlICA8QT4mKTsJRW1BbGlh c05ldEhvc3RJbmZvVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNOZXRI b3N0SW5mb1R5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFz TmV0SG9zdEluZm9UeXBlICAJKHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBF bUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJbmFtZVAgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJ CQluYW1lQWxpYXNlc1AgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlhZGRyVHlwZSA7IAkg RW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWFkZHJMZW4gOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJ CQkJCQlhZGRyTGlzdFAgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uYW1lUCAgKHZv aWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmFtZUFsaWFzZXNQ ICAodm9pZCkgeyByZXR1cm4gIDQgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hZGRyVHlw ZSAgKHZvaWQpIHsgcmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYWRkckxl biAgKHZvaWQpIHsgcmV0dXJuICAxMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2FkZHJM aXN0UCAgKHZvaWQpIHsgcmV0dXJuICAxMiA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eU5ldEhvc3RJ bmZvVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5TmV0SG9z dEluZm9UeXBlICAJKHZvaWQpOwlFbVByb3h5TmV0SG9zdEluZm9UeXBlICAJKGNvbnN0IEVtUHJv eHlOZXRIb3N0SW5mb1R5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyBy ZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2 b2lkKQkJCXsgcmV0dXJuICAgICAxNiAgOyB9CUVtUHJveHlOZXRIb3N0SW5mb1R5cGUgICYJCW9w ZXJhdG9yPSAoY29uc3QgRW1Qcm94eU5ldEhvc3RJbmZvVHlwZSAgJik7CUVtQWxpYXNOZXRIb3N0 SW5mb1R5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNOZXRIb3N0SW5m b1R5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNo YXIJCQlfYnl0ZXNbICAgIDE2ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFz ZW11cHRyIDxMQVM+CSAJCQkJCQluYW1lUCA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJ bmFtZUFsaWFzZXNQIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlhZGRyVHlwZSA7IAkg RW1BbGlhc1VJbnQxNiA8TEFTPgkgCQkJCQkJYWRkckxlbiA7IAkgRW1BbGlhc2VtdXB0ciA8TEFT PgkgCQkJCQkJYWRkckxpc3RQIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmFtZVAg ICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25hbWVBbGlh c2VzUCAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYWRk clR5cGUgICh2b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Fk ZHJMZW4gICh2b2lkKSB7IHJldHVybiAgMTAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9h ZGRyTGlzdFAgICh2b2lkKSB7IHJldHVybiAgMTIgOyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xh c3MgQT4JY2xhc3MgRW1BbGlhc05ldEhvc3RJbmZvQnVmVHlwZSAgCXsJcHVibGljOgl0eXBlZGVm IHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzTmV0SG9zdEluZm9CdWZUeXBl ICAJKHB0cl90eXBlKTsJRW1BbGlhc05ldEhvc3RJbmZvQnVmVHlwZSAgCShjb25zdCBFbUFsaWFz TmV0SG9zdEluZm9CdWZUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsg cmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAg ICAgNTY4ICA7IH0JRW1BbGlhc05ldEhvc3RJbmZvQnVmVHlwZSAgPEE+JglvcGVyYXRvcj0gKGNv bnN0IEVtQWxpYXNOZXRIb3N0SW5mb0J1ZlR5cGUgIDxBPiYpOwlFbUFsaWFzTmV0SG9zdEluZm9C dWZUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc05ldEhvc3RJbmZvQnVm VHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CUVtQWxpYXNOZXRIb3N0 SW5mb0J1ZlR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVtQWxp YXNOZXRIb3N0SW5mb1R5cGUgPEE+CSAJCQlob3N0SW5mbyA7IAkgRW1BbGlhc0NoYXIgPEE+CSAJ CQkJCQluYW1lIDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJYWxpYXNMaXN0IDsgCSBFbUFs aWFzQ2hhciA8QT4JIAkJCQkJCWFsaWFzZXMgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlh ZGRyZXNzTGlzdCA7IAkgRW1BbGlhc05ldElQQWRkciA8QT4JIAkJCQkJYWRkcmVzcyA7ICAJICAg ICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2hvc3RJbmZvICAodm9pZCkgeyByZXR1cm4gIDAgOyB9 IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uYW1lICAodm9pZCkgeyByZXR1cm4gIDE2IDsgfSAJ IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYWxpYXNMaXN0ICAodm9pZCkgeyByZXR1cm4gIDI3MiA7 IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2FsaWFzZXMgICh2b2lkKSB7IHJldHVybiAgMjgw IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYWRkcmVzc0xpc3QgICh2b2lkKSB7IHJldHVy biAgNTM2IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYWRkcmVzcyAgKHZvaWQpIHsgcmV0 dXJuICA1NTIgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlOZXRIb3N0SW5mb0J1ZlR5cGUgIAl7CXB1 YmxpYzoJdHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eU5ldEhvc3RJbmZvQnVmVHlwZSAg CSh2b2lkKTsJRW1Qcm94eU5ldEhvc3RJbmZvQnVmVHlwZSAgCShjb25zdCBFbVByb3h5TmV0SG9z dEluZm9CdWZUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJu IChwdHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJ CQl7IHJldHVybiAgICAgNTY4ICA7IH0JRW1Qcm94eU5ldEhvc3RJbmZvQnVmVHlwZSAgJgkJb3Bl cmF0b3I9IChjb25zdCBFbVByb3h5TmV0SG9zdEluZm9CdWZUeXBlICAmKTsJRW1BbGlhc05ldEhv c3RJbmZvQnVmVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc05ldEhv c3RJbmZvQnVmVHlwZSAgPExBUz4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3Ry dWN0IHsJY2hhcgkJCV9ieXRlc1sgICAgNTY4ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAg ICBFbUFsaWFzTmV0SG9zdEluZm9UeXBlIDxMQVM+CSAJCQlob3N0SW5mbyA7IAkgRW1BbGlhc0No YXIgPExBUz4JIAkJCQkJCW5hbWUgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWFsaWFz TGlzdCA7IAkgRW1BbGlhc0NoYXIgPExBUz4JIAkJCQkJCWFsaWFzZXMgOyAJIEVtQWxpYXNlbXVw dHIgPExBUz4JIAkJCQkJCWFkZHJlc3NMaXN0IDsgCSBFbUFsaWFzTmV0SVBBZGRyIDxMQVM+CSAJ CQkJCWFkZHJlc3MgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9ob3N0SW5mbyAgKHZv aWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmFtZSAgKHZvaWQp IHsgcmV0dXJuICAxNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2FsaWFzTGlzdCAgKHZv aWQpIHsgcmV0dXJuICAyNzIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hbGlhc2VzICAo dm9pZCkgeyByZXR1cm4gIDI4MCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2FkZHJlc3NM aXN0ICAodm9pZCkgeyByZXR1cm4gIDUzNiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2Fk ZHJlc3MgICh2b2lkKSB7IHJldHVybiAgNTUyIDsgfSAgCX07ICAgCSAgdGVtcGxhdGUgPGNsYXNz IEE+CWNsYXNzIEVtQWxpYXNOZXRJT1BhcmFtVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVu YW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzTmV0SU9QYXJhbVR5cGUgIAkocHRyX3R5 cGUpOwlFbUFsaWFzTmV0SU9QYXJhbVR5cGUgIAkoY29uc3QgRW1BbGlhc05ldElPUGFyYW1UeXBl ICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3Rh dGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVybiAgICAgMTggIDsgfQlFbUFsaWFz TmV0SU9QYXJhbVR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzTmV0SU9QYXJhbVR5 cGUgIDxBPiYpOwlFbUFsaWFzTmV0SU9QYXJhbVR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwlj b25zdCBFbUFsaWFzTmV0SU9QYXJhbVR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlw cml2YXRlOglFbUFsaWFzTmV0SU9QYXJhbVR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJ cHVibGljOgkgICAgIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlhZGRyUCA7IAkgRW1BbGlhc1VJ bnQxNiA8QT4JIAkJCQkJCWFkZHJMZW4gOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQlpb3Yg OyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlpb3ZMZW4gOyAJIEVtQWxpYXNlbXVwdHIgPEE+ CSAJCQkJCQlhY2Nlc3NSaWdodHMgOyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlhY2Nlc3NS aWdodHNMZW4gOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hZGRyUCAgKHZvaWQpIHsg cmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfYWRkckxlbiAgKHZvaWQpIHsg cmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfaW92ICAodm9pZCkgeyByZXR1 cm4gIDYgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pb3ZMZW4gICh2b2lkKSB7IHJldHVy biAgMTAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hY2Nlc3NSaWdodHMgICh2b2lkKSB7 IHJldHVybiAgMTIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9hY2Nlc3NSaWdodHNMZW4g ICh2b2lkKSB7IHJldHVybiAgMTYgOyB9ICAJfTsgCWNsYXNzIEVtUHJveHlOZXRJT1BhcmFtVHlw ZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90eXBlOwlFbVByb3h5TmV0SU9QYXJhbVR5 cGUgIAkodm9pZCk7CUVtUHJveHlOZXRJT1BhcmFtVHlwZSAgCShjb25zdCBFbVByb3h5TmV0SU9Q YXJhbVR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0 cl90eXBlKSAmZkxvY2FsRGF0YTsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsg cmV0dXJuICAgICAxOCAgOyB9CUVtUHJveHlOZXRJT1BhcmFtVHlwZSAgJgkJb3BlcmF0b3I9IChj b25zdCBFbVByb3h5TmV0SU9QYXJhbVR5cGUgICYpOwlFbUFsaWFzTmV0SU9QYXJhbVR5cGUgIDxM QVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNOZXRJT1BhcmFtVHlwZSAgPExBUz4J b3BlcmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sg ICAgMTggIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNlbXVwdHIgPExBUz4J IAkJCQkJCWFkZHJQIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlhZGRyTGVuIDsgCSBF bUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQlpb3YgOyAJIEVtQWxpYXNVSW50MTYgPExBUz4JIAkJ CQkJCWlvdkxlbiA7IAkgRW1BbGlhc2VtdXB0ciA8TEFTPgkgCQkJCQkJYWNjZXNzUmlnaHRzIDsg CSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlhY2Nlc3NSaWdodHNMZW4gOyAgCSAgICAgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9hZGRyUCAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfYWRkckxlbiAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAJIHN0YXRp YyBzaXplX3QJb2Zmc2V0b2ZfaW92ICAodm9pZCkgeyByZXR1cm4gIDYgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9pb3ZMZW4gICh2b2lkKSB7IHJldHVybiAgMTAgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9hY2Nlc3NSaWdodHMgICh2b2lkKSB7IHJldHVybiAgMTIgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9hY2Nlc3NSaWdodHNMZW4gICh2b2lkKSB7IHJldHVybiAgMTYg OyB9ICAJfTsgICAJICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc05ldElPVmVjVHlw ZSAgCXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFs aWFzTmV0SU9WZWNUeXBlICAJKHB0cl90eXBlKTsJRW1BbGlhc05ldElPVmVjVHlwZSAgCShjb25z dCBFbUFsaWFzTmV0SU9WZWNUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0 CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVy biAgICAgNiAgOyB9CUVtQWxpYXNOZXRJT1ZlY1R5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBF bUFsaWFzTmV0SU9WZWNUeXBlICA8QT4mKTsJRW1BbGlhc05ldElPVmVjVHlwZSAgPEE+CW9wZXJh dG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNOZXRJT1ZlY1R5cGUgIDxBPglvcGVyYXRvcltdIChp bnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzTmV0SU9WZWNUeXBlICAJKHZvaWQpOwlwdHJfdHlw ZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJYnVmUCA7IAkg RW1BbGlhc1VJbnQxNiA8QT4JIAkJCQkJCWJ1ZkxlbiA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2J1ZlAgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2J1ZkxlbiAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAgCX07IAljbGFzcyBFbVByb3h5TmV0 SU9WZWNUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlOZXRJ T1ZlY1R5cGUgIAkodm9pZCk7CUVtUHJveHlOZXRJT1ZlY1R5cGUgIAkoY29uc3QgRW1Qcm94eU5l dElPVmVjVHlwZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAo cHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJ eyByZXR1cm4gICAgIDYgIDsgfQlFbVByb3h5TmV0SU9WZWNUeXBlICAmCQlvcGVyYXRvcj0gKGNv bnN0IEVtUHJveHlOZXRJT1ZlY1R5cGUgICYpOwlFbUFsaWFzTmV0SU9WZWNUeXBlICA8TEFTPglv cGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzTmV0SU9WZWNUeXBlICA8TEFTPglvcGVyYXRv cltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1Y3QgewljaGFyCQkJX2J5dGVzWyAgICA2ICBd Owl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQli dWZQIDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlidWZMZW4gOyAgCSAgICAgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9idWZQICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9idWZMZW4gICh2b2lkKSB7IHJldHVybiAgNCA7IH0gIAl9OyAgIAkgIHRl bXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzTmV0U2VydkluZm9UeXBlICAJewlwdWJsaWM6 CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNOZXRTZXJ2SW5m b1R5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzTmV0U2VydkluZm9UeXBlICAJKGNvbnN0IEVtQWxp YXNOZXRTZXJ2SW5mb1R5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyBy ZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAg ICAxNCAgOyB9CUVtQWxpYXNOZXRTZXJ2SW5mb1R5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBF bUFsaWFzTmV0U2VydkluZm9UeXBlICA8QT4mKTsJRW1BbGlhc05ldFNlcnZJbmZvVHlwZSAgPEE+ CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNOZXRTZXJ2SW5mb1R5cGUgIDxBPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzTmV0U2VydkluZm9UeXBlICAJKHZv aWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzZW11cHRyIDxBPgkgCQkJ CQkJbmFtZVAgOyAJIEVtQWxpYXNlbXVwdHIgPEE+CSAJCQkJCQluYW1lQWxpYXNlc1AgOyAJIEVt QWxpYXNVSW50MTYgPEE+CSAJCQkJCQlwb3J0IDsgCSBFbUFsaWFzZW11cHRyIDxBPgkgCQkJCQkJ cHJvdG9QIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfbmFtZVAgICh2b2lkKSB7IHJl dHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25hbWVBbGlhc2VzUCAgKHZvaWQp IHsgcmV0dXJuICA0IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcG9ydCAgKHZvaWQpIHsg cmV0dXJuICA4IDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfcHJvdG9QICAodm9pZCkgeyBy ZXR1cm4gIDEwIDsgfSAgCX07IAljbGFzcyBFbVByb3h5TmV0U2VydkluZm9UeXBlICAJewlwdWJs aWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJveHlOZXRTZXJ2SW5mb1R5cGUgIAkodm9p ZCk7CUVtUHJveHlOZXRTZXJ2SW5mb1R5cGUgIAkoY29uc3QgRW1Qcm94eU5ldFNlcnZJbmZvVHlw ZSAgJik7CXB0cl90eXBlCQkJR2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUp ICZmTG9jYWxEYXRhOyB9CXN0YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4g ICAgIDE0ICA7IH0JRW1Qcm94eU5ldFNlcnZJbmZvVHlwZSAgJgkJb3BlcmF0b3I9IChjb25zdCBF bVByb3h5TmV0U2VydkluZm9UeXBlICAmKTsJRW1BbGlhc05ldFNlcnZJbmZvVHlwZSAgPExBUz4J b3BlcmF0b3JbXSAoaW50KTsJY29uc3QgRW1BbGlhc05ldFNlcnZJbmZvVHlwZSAgPExBUz4Jb3Bl cmF0b3JbXSAoaW50KSBjb25zdDsJcHJpdmF0ZToJc3RydWN0IHsJY2hhcgkJCV9ieXRlc1sgICAg MTQgIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNlbXVwdHIgPExBUz4JIAkJ CQkJCW5hbWVQIDsgCSBFbUFsaWFzZW11cHRyIDxMQVM+CSAJCQkJCQluYW1lQWxpYXNlc1AgOyAJ IEVtQWxpYXNVSW50MTYgPExBUz4JIAkJCQkJCXBvcnQgOyAJIEVtQWxpYXNlbXVwdHIgPExBUz4J IAkJCQkJCXByb3RvUCA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX25hbWVQICAodm9p ZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9uYW1lQWxpYXNlc1Ag ICh2b2lkKSB7IHJldHVybiAgNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BvcnQgICh2 b2lkKSB7IHJldHVybiAgOCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3Byb3RvUCAgKHZv aWQpIHsgcmV0dXJuICAxMCA7IH0gIAl9OyAgIAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBF bUFsaWFzTmV0U2VydkluZm9CdWZUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6 cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNOZXRTZXJ2SW5mb0J1ZlR5cGUgIAkocHRyX3R5cGUp OwlFbUFsaWFzTmV0U2VydkluZm9CdWZUeXBlICAJKGNvbnN0IEVtQWxpYXNOZXRTZXJ2SW5mb0J1 ZlR5cGUgICYpOwlwdHJfdHlwZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsg fQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA3MCAgOyB9CUVt QWxpYXNOZXRTZXJ2SW5mb0J1ZlR5cGUgIDxBPiYJb3BlcmF0b3I9IChjb25zdCBFbUFsaWFzTmV0 U2VydkluZm9CdWZUeXBlICA8QT4mKTsJRW1BbGlhc05ldFNlcnZJbmZvQnVmVHlwZSAgPEE+CW9w ZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNOZXRTZXJ2SW5mb0J1ZlR5cGUgIDxBPglvcGVy YXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzTmV0U2VydkluZm9CdWZUeXBlICAJ KHZvaWQpOwlwdHJfdHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzTmV0U2VydkluZm9U eXBlIDxBPgkgCQkJc2VydkluZm8gOyAJIEVtQWxpYXNDaGFyIDxBPgkgCQkJCQkJbmFtZSA7IAkg RW1BbGlhc2VtdXB0ciA8QT4JIAkJCQkJCWFsaWFzTGlzdCA7IAkgRW1BbGlhc0NoYXIgPEE+CSAJ CQkJCQlhbGlhc2VzIDsgCSBFbUFsaWFzQ2hhciA8QT4JIAkJCQkJCXByb3RvTmFtZSA7IAkgRW1B bGlhc1VJbnQ4IDxBPgkgCQkJCQkJcmVzZXJ2ZWQgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZz ZXRvZl9zZXJ2SW5mbyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zm c2V0b2ZfbmFtZSAgKHZvaWQpIHsgcmV0dXJuICAxNCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNl dG9mX2FsaWFzTGlzdCAgKHZvaWQpIHsgcmV0dXJuICAzMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9m ZnNldG9mX2FsaWFzZXMgICh2b2lkKSB7IHJldHVybiAgMzggOyB9IAkgc3RhdGljIHNpemVfdAlv ZmZzZXRvZl9wcm90b05hbWUgICh2b2lkKSB7IHJldHVybiAgNTMgOyB9IAkgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9yZXNlcnZlZCAgKHZvaWQpIHsgcmV0dXJuICA2OSA7IH0gIAl9OyAJY2xhc3Mg RW1Qcm94eU5ldFNlcnZJbmZvQnVmVHlwZSAgCXsJcHVibGljOgl0eXBlZGVmIHZvaWQqIHB0cl90 eXBlOwlFbVByb3h5TmV0U2VydkluZm9CdWZUeXBlICAJKHZvaWQpOwlFbVByb3h5TmV0U2Vydklu Zm9CdWZUeXBlICAJKGNvbnN0IEVtUHJveHlOZXRTZXJ2SW5mb0J1ZlR5cGUgICYpOwlwdHJfdHlw ZQkJCUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gKHB0cl90eXBlKSAmZkxvY2FsRGF0YTsg fQlzdGF0aWMgc2l6ZV90CQlHZXRTaXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA3MCAgOyB9CUVt UHJveHlOZXRTZXJ2SW5mb0J1ZlR5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eU5ldFNl cnZJbmZvQnVmVHlwZSAgJik7CUVtQWxpYXNOZXRTZXJ2SW5mb0J1ZlR5cGUgIDxMQVM+CW9wZXJh dG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNOZXRTZXJ2SW5mb0J1ZlR5cGUgIDxMQVM+CW9wZXJh dG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAgIDcw ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzTmV0U2VydkluZm9UeXBlIDxM QVM+CSAJCQlzZXJ2SW5mbyA7IAkgRW1BbGlhc0NoYXIgPExBUz4JIAkJCQkJCW5hbWUgOyAJIEVt QWxpYXNlbXVwdHIgPExBUz4JIAkJCQkJCWFsaWFzTGlzdCA7IAkgRW1BbGlhc0NoYXIgPExBUz4J IAkJCQkJCWFsaWFzZXMgOyAJIEVtQWxpYXNDaGFyIDxMQVM+CSAJCQkJCQlwcm90b05hbWUgOyAJ IEVtQWxpYXNVSW50OCA8TEFTPgkgCQkJCQkJcmVzZXJ2ZWQgOyAgCSAgICAgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9zZXJ2SW5mbyAgKHZvaWQpIHsgcmV0dXJuICAwIDsgfSAJIHN0YXRpYyBzaXpl X3QJb2Zmc2V0b2ZfbmFtZSAgKHZvaWQpIHsgcmV0dXJuICAxNCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2FsaWFzTGlzdCAgKHZvaWQpIHsgcmV0dXJuICAzMCA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2FsaWFzZXMgICh2b2lkKSB7IHJldHVybiAgMzggOyB9IAkgc3RhdGljIHNp emVfdAlvZmZzZXRvZl9wcm90b05hbWUgICh2b2lkKSB7IHJldHVybiAgNTMgOyB9IAkgc3RhdGlj IHNpemVfdAlvZmZzZXRvZl9yZXNlcnZlZCAgKHZvaWQpIHsgcmV0dXJuICA2OSA7IH0gIAl9OyAg IAkgIHRlbXBsYXRlIDxjbGFzcyBBPgljbGFzcyBFbUFsaWFzTmV0U29ja2V0QWRkcklOVHlwZSAg CXsJcHVibGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFz TmV0U29ja2V0QWRkcklOVHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNOZXRTb2NrZXRBZGRySU5U eXBlICAJKGNvbnN0IEVtQWxpYXNOZXRTb2NrZXRBZGRySU5UeXBlICAmKTsJcHRyX3R5cGUJCQlH ZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6 ZQkodm9pZCkJCQl7IHJldHVybiAgICAgOCAgOyB9CUVtQWxpYXNOZXRTb2NrZXRBZGRySU5UeXBl ICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc05ldFNvY2tldEFkZHJJTlR5cGUgIDxBPiYp OwlFbUFsaWFzTmV0U29ja2V0QWRkcklOVHlwZSAgPEE+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0 IEVtQWxpYXNOZXRTb2NrZXRBZGRySU5UeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBjb25zdDsJ cHJpdmF0ZToJRW1BbGlhc05ldFNvY2tldEFkZHJJTlR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJ ZlB0cjsJcHVibGljOgkgICAgIEVtQWxpYXNJbnQxNiA8QT4JIAkJCQkJCWZhbWlseSA7IAkgRW1B bGlhc1VJbnQxNiA8QT4JIAkJCQkJCXBvcnQgOyAJIEVtQWxpYXNOZXRJUEFkZHIgPEE+CSAJCQkJ CWFkZHIgOyAgCSAgICAgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9mYW1pbHkgICh2b2lkKSB7IHJl dHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX3BvcnQgICh2b2lkKSB7IHJldHVy biAgMiA7IH0gCSBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2FkZHIgICh2b2lkKSB7IHJldHVybiAg NCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eU5ldFNvY2tldEFkZHJJTlR5cGUgIAl7CXB1YmxpYzoJ dHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eU5ldFNvY2tldEFkZHJJTlR5cGUgIAkodm9p ZCk7CUVtUHJveHlOZXRTb2NrZXRBZGRySU5UeXBlICAJKGNvbnN0IEVtUHJveHlOZXRTb2NrZXRB ZGRySU5UeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChw dHJfdHlwZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7 IHJldHVybiAgICAgOCAgOyB9CUVtUHJveHlOZXRTb2NrZXRBZGRySU5UeXBlICAmCQlvcGVyYXRv cj0gKGNvbnN0IEVtUHJveHlOZXRTb2NrZXRBZGRySU5UeXBlICAmKTsJRW1BbGlhc05ldFNvY2tl dEFkZHJJTlR5cGUgIDxMQVM+CW9wZXJhdG9yW10gKGludCk7CWNvbnN0IEVtQWxpYXNOZXRTb2Nr ZXRBZGRySU5UeXBlICA8TEFTPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglzdHJ1 Y3QgewljaGFyCQkJX2J5dGVzWyAgICA4ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBF bUFsaWFzSW50MTYgPExBUz4JIAkJCQkJCWZhbWlseSA7IAkgRW1BbGlhc1VJbnQxNiA8TEFTPgkg CQkJCQkJcG9ydCA7IAkgRW1BbGlhc05ldElQQWRkciA8TEFTPgkgCQkJCQlhZGRyIDsgIAkgICAg IHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmFtaWx5ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkg c3RhdGljIHNpemVfdAlvZmZzZXRvZl9wb3J0ICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3Rh dGljIHNpemVfdAlvZmZzZXRvZl9hZGRyICAodm9pZCkgeyByZXR1cm4gIDQgOyB9ICAJfTsgICAJ ICB0ZW1wbGF0ZSA8Y2xhc3MgQT4JY2xhc3MgRW1BbGlhc05ldFNvY2tldEFkZHJSYXdUeXBlICAJ ewlwdWJsaWM6CXR5cGVkZWYgdHlwZW5hbWUgQTo6cHRyX3R5cGUgcHRyX3R5cGU7CUVtQWxpYXNO ZXRTb2NrZXRBZGRyUmF3VHlwZSAgCShwdHJfdHlwZSk7CUVtQWxpYXNOZXRTb2NrZXRBZGRyUmF3 VHlwZSAgCShjb25zdCBFbUFsaWFzTmV0U29ja2V0QWRkclJhd1R5cGUgICYpOwlwdHJfdHlwZQkJ CUdldFB0cgkodm9pZCkgY29uc3QJeyByZXR1cm4gZlB0cjsgfQlzdGF0aWMgc2l6ZV90CQlHZXRT aXplCSh2b2lkKQkJCXsgcmV0dXJuICAgICA4ICA7IH0JRW1BbGlhc05ldFNvY2tldEFkZHJSYXdU eXBlICA8QT4mCW9wZXJhdG9yPSAoY29uc3QgRW1BbGlhc05ldFNvY2tldEFkZHJSYXdUeXBlICA8 QT4mKTsJRW1BbGlhc05ldFNvY2tldEFkZHJSYXdUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KTsJ Y29uc3QgRW1BbGlhc05ldFNvY2tldEFkZHJSYXdUeXBlICA8QT4Jb3BlcmF0b3JbXSAoaW50KSBj b25zdDsJcHJpdmF0ZToJRW1BbGlhc05ldFNvY2tldEFkZHJSYXdUeXBlICAJKHZvaWQpOwlwdHJf dHlwZQkJCWZQdHI7CXB1YmxpYzoJICAgICBFbUFsaWFzSW50MTYgPEE+CSAJCQkJCQlmYW1pbHkg OyAJIEVtQWxpYXNVSW50MTYgPEE+CSAJCQkJCQlpZkluc3RhbmNlIDsgCSBFbUFsaWFzVUludDMy IDxBPgkgCQkJCQkJaWZDcmVhdG9yIDsgIAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmFt aWx5ICAodm9pZCkgeyByZXR1cm4gIDAgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9pZklu c3RhbmNlICAodm9pZCkgeyByZXR1cm4gIDIgOyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9p ZkNyZWF0b3IgICh2b2lkKSB7IHJldHVybiAgNCA7IH0gIAl9OyAJY2xhc3MgRW1Qcm94eU5ldFNv Y2tldEFkZHJSYXdUeXBlICAJewlwdWJsaWM6CXR5cGVkZWYgdm9pZCogcHRyX3R5cGU7CUVtUHJv eHlOZXRTb2NrZXRBZGRyUmF3VHlwZSAgCSh2b2lkKTsJRW1Qcm94eU5ldFNvY2tldEFkZHJSYXdU eXBlICAJKGNvbnN0IEVtUHJveHlOZXRTb2NrZXRBZGRyUmF3VHlwZSAgJik7CXB0cl90eXBlCQkJ R2V0UHRyCSh2b2lkKSBjb25zdAl7IHJldHVybiAocHRyX3R5cGUpICZmTG9jYWxEYXRhOyB9CXN0 YXRpYyBzaXplX3QJCUdldFNpemUJKHZvaWQpCQkJeyByZXR1cm4gICAgIDggIDsgfQlFbVByb3h5 TmV0U29ja2V0QWRkclJhd1R5cGUgICYJCW9wZXJhdG9yPSAoY29uc3QgRW1Qcm94eU5ldFNvY2tl dEFkZHJSYXdUeXBlICAmKTsJRW1BbGlhc05ldFNvY2tldEFkZHJSYXdUeXBlICA8TEFTPglvcGVy YXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzTmV0U29ja2V0QWRkclJhd1R5cGUgIDxMQVM+CW9w ZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlfYnl0ZXNbICAg IDggIF07CX0gZkxvY2FsRGF0YTsJcHVibGljOgkgICAgIEVtQWxpYXNJbnQxNiA8TEFTPgkgCQkJ CQkJZmFtaWx5IDsgCSBFbUFsaWFzVUludDE2IDxMQVM+CSAJCQkJCQlpZkluc3RhbmNlIDsgCSBF bUFsaWFzVUludDMyIDxMQVM+CSAJCQkJCQlpZkNyZWF0b3IgOyAgCSAgICAgc3RhdGljIHNpemVf dAlvZmZzZXRvZl9mYW1pbHkgICh2b2lkKSB7IHJldHVybiAgMCA7IH0gCSBzdGF0aWMgc2l6ZV90 CW9mZnNldG9mX2lmSW5zdGFuY2UgICh2b2lkKSB7IHJldHVybiAgMiA7IH0gCSBzdGF0aWMgc2l6 ZV90CW9mZnNldG9mX2lmQ3JlYXRvciAgKHZvaWQpIHsgcmV0dXJuICA0IDsgfSAgCX07ICAgCSAg dGVtcGxhdGUgPGNsYXNzIEE+CWNsYXNzIEVtQWxpYXNOZXRTb2NrZXRBZGRyVHlwZSAgCXsJcHVi bGljOgl0eXBlZGVmIHR5cGVuYW1lIEE6OnB0cl90eXBlIHB0cl90eXBlOwlFbUFsaWFzTmV0U29j a2V0QWRkclR5cGUgIAkocHRyX3R5cGUpOwlFbUFsaWFzTmV0U29ja2V0QWRkclR5cGUgIAkoY29u c3QgRW1BbGlhc05ldFNvY2tldEFkZHJUeXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQp IGNvbnN0CXsgcmV0dXJuIGZQdHI7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7 IHJldHVybiAgICAgMTYgIDsgfQlFbUFsaWFzTmV0U29ja2V0QWRkclR5cGUgIDxBPiYJb3BlcmF0 b3I9IChjb25zdCBFbUFsaWFzTmV0U29ja2V0QWRkclR5cGUgIDxBPiYpOwlFbUFsaWFzTmV0U29j a2V0QWRkclR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzTmV0U29ja2V0 QWRkclR5cGUgIDxBPglvcGVyYXRvcltdIChpbnQpIGNvbnN0Owlwcml2YXRlOglFbUFsaWFzTmV0 U29ja2V0QWRkclR5cGUgIAkodm9pZCk7CXB0cl90eXBlCQkJZlB0cjsJcHVibGljOgkgICAgIEVt QWxpYXNJbnQxNiA8QT4JIAkJCQkJCWZhbWlseSA7IAkgRW1BbGlhc1VJbnQ4IDxBPgkgCQkJCQkJ ZGF0YSA7ICAJICAgICBzdGF0aWMgc2l6ZV90CW9mZnNldG9mX2ZhbWlseSAgKHZvaWQpIHsgcmV0 dXJuICAwIDsgfSAJIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZGF0YSAgKHZvaWQpIHsgcmV0dXJu ICAyIDsgfSAgCX07IAljbGFzcyBFbVByb3h5TmV0U29ja2V0QWRkclR5cGUgIAl7CXB1YmxpYzoJ dHlwZWRlZiB2b2lkKiBwdHJfdHlwZTsJRW1Qcm94eU5ldFNvY2tldEFkZHJUeXBlICAJKHZvaWQp OwlFbVByb3h5TmV0U29ja2V0QWRkclR5cGUgIAkoY29uc3QgRW1Qcm94eU5ldFNvY2tldEFkZHJU eXBlICAmKTsJcHRyX3R5cGUJCQlHZXRQdHIJKHZvaWQpIGNvbnN0CXsgcmV0dXJuIChwdHJfdHlw ZSkgJmZMb2NhbERhdGE7IH0Jc3RhdGljIHNpemVfdAkJR2V0U2l6ZQkodm9pZCkJCQl7IHJldHVy biAgICAgMTYgIDsgfQlFbVByb3h5TmV0U29ja2V0QWRkclR5cGUgICYJCW9wZXJhdG9yPSAoY29u c3QgRW1Qcm94eU5ldFNvY2tldEFkZHJUeXBlICAmKTsJRW1BbGlhc05ldFNvY2tldEFkZHJUeXBl ICA8TEFTPglvcGVyYXRvcltdIChpbnQpOwljb25zdCBFbUFsaWFzTmV0U29ja2V0QWRkclR5cGUg IDxMQVM+CW9wZXJhdG9yW10gKGludCkgY29uc3Q7CXByaXZhdGU6CXN0cnVjdCB7CWNoYXIJCQlf Ynl0ZXNbICAgIDE2ICBdOwl9IGZMb2NhbERhdGE7CXB1YmxpYzoJICAgICBFbUFsaWFzSW50MTYg PExBUz4JIAkJCQkJCWZhbWlseSA7IAkgRW1BbGlhc1VJbnQ4IDxMQVM+CSAJCQkJCQlkYXRhIDsg IAkgICAgIHN0YXRpYyBzaXplX3QJb2Zmc2V0b2ZfZmFtaWx5ICAodm9pZCkgeyByZXR1cm4gIDAg OyB9IAkgc3RhdGljIHNpemVfdAlvZmZzZXRvZl9kYXRhICAodm9pZCkgeyByZXR1cm4gIDIgOyB9 ICAJfTsgICAgCgoKIyAxNyAiLi4vU3JjU2hhcmVkL0VtTG93TWVtLmgiIDIKCgpjbGFzcyBTZXNz aW9uRmlsZTsKCmNsYXNzIEVtTG93TWVtCnsKCXB1YmxpYzoKCQlzdGF0aWMgdm9pZCAJCQlJbml0 aWFsaXplCQkJKHZvaWQpOwoJCXN0YXRpYyB2b2lkIAkJCVJlc2V0CQkJCSh2b2lkKTsKCQlzdGF0 aWMgdm9pZCAJCQlTYXZlCQkJCShTZXNzaW9uRmlsZSYpOwoJCXN0YXRpYyB2b2lkIAkJCUxvYWQJ CQkJKFNlc3Npb25GaWxlJik7CgkJc3RhdGljIHZvaWQgCQkJRGlzcG9zZSAJCQkodm9pZCk7CgoJ CXN0YXRpYyB1aW50OAkJCUdldEV2dE1ncklkbGUJCSh2b2lkKTsKCQlzdGF0aWMgQm9vbCAJCQlU cmFwRXhpc3RzCQkJKHVpbnQxNiBpQVRyYXApOwoJCXN0YXRpYyBlbXVwdHIJCQlHZXRUcmFwQWRk cmVzcwkJKHVpbnQxNiBpQVRyYXApOwoKCQkKCQkKCQkKCgkJc3RhdGljIEVtQWxpYXNMb3dNZW1I ZHJUeXBlPFBBUz4JZmdMb3dNZW07CQp9OwoKCiMgMjEgIi4vLi4vU3JjU2hhcmVkL01ldGFNZW1v cnkuY3BwIiAyCgoKIyAxICIuLi9TcmNTaGFyZWQvRW1QYWxtRnVuY3Rpb24uaCIgMQogCiAKCgoK CgoKCgoKCgoKCgoKCnN0cnVjdCBTeXN0ZW1DYWxsQ29udGV4dDsKCnZvaWQJRW1QYWxtRnVuY3Rp b25Jbml0CQkJCQkodm9pZCk7CgoKIyA2NCAiLi4vU3JjU2hhcmVkL0VtUGFsbUZ1bmN0aW9uLmgi CgogCiAKIAogCiAKIAogCiAKIAoKCgoKCgoKCgoKCgoKCgogQm9vbCBJbmNqX2twdGtkZWxldGUg IChlbXVwdHIgPSBnQ1BVLT5HZXRQQyAoKSk7IAkgQm9vbCBJbmRuc19kZWNvZGVfbmFtZSAgKGVt dXB0ciA9IGdDUFUtPkdldFBDICgpKTsgCSBCb29sIEluQmFja3NwYWNlQ2hhciAgKGVtdXB0ciA9 IGdDUFUtPkdldFBDICgpKTsgCSBCb29sIEluQ3JjMTZDYWxjQmxvY2sgIChlbXVwdHIgPSBnQ1BV LT5HZXRQQyAoKSk7IAkgQm9vbCBJbkRtV3JpdGUgIChlbXVwdHIgPSBnQ1BVLT5HZXRQQyAoKSk7 IAkgQm9vbCBJbkVDVmFsaWRhdGVGaWVsZCAgKGVtdXB0ciA9IGdDUFUtPkdldFBDICgpKTsgCSBC b29sIEluRWdnT2ZJbmZpbml0ZVdpc2RvbSAgKGVtdXB0ciA9IGdDUFUtPkdldFBDICgpKTsgCSBC b29sIEluRXhwSW5pdCAgKGVtdXB0ciA9IGdDUFUtPkdldFBDICgpKTsgCSBCb29sIEluRmluZFNo b3dSZXN1bHRzICAoZW11cHRyID0gZ0NQVS0+R2V0UEMgKCkpOyAJIEJvb2wgSW5GaW5kU2F2ZUZp bmRTdHIgIChlbXVwdHIgPSBnQ1BVLT5HZXRQQyAoKSk7IAkgQm9vbCBJbkZsZERlbGV0ZSAgKGVt dXB0ciA9IGdDUFUtPkdldFBDICgpKTsgCSBCb29sIEluRm50RGVmaW5lRm9udCAgKGVtdXB0ciA9 IGdDUFUtPkdldFBDICgpKTsgCSBCb29sIEluR3JmUHJvY2Vzc1N0cm9rZSAgKGVtdXB0ciA9IGdD UFUtPkdldFBDICgpKTsgCSBCb29sIEluSHNQcnZJbml0ICAoZW11cHRyID0gZ0NQVS0+R2V0UEMg KCkpOyAJIEJvb2wgSW5Ic1BydkluaXRDYXJkICAoZW11cHRyID0gZ0NQVS0+R2V0UEMgKCkpOyAJ IEJvb2wgSW5NZW1Nb3ZlICAoZW11cHRyID0gZ0NQVS0+R2V0UEMgKCkpOyAJIEJvb2wgSW5NZW51 SGFuZGxlRXZlbnQgIChlbXVwdHIgPSBnQ1BVLT5HZXRQQyAoKSk7IAkgQm9vbCBJbk5ldExpYkJp dE1vdmUgIChlbXVwdHIgPSBnQ1BVLT5HZXRQQyAoKSk7IAkgQm9vbCBJbk5ldFBydlNldHRpbmdT ZXQgIChlbXVwdHIgPSBnQ1BVLT5HZXRQQyAoKSk7IAkgQm9vbCBJbk5ldFBydlRhc2tNYWluICAo ZW11cHRyID0gZ0NQVS0+R2V0UEMgKCkpOyAJIEJvb2wgSW5QcnZDb21wcmVzc2VkSW5uZXJCaXRC bHQgIChlbXVwdHIgPSBnQ1BVLT5HZXRQQyAoKSk7IAkgQm9vbCBJblBydkNvbnZlcnREZXB0aDFU bzJCVyAgKGVtdXB0ciA9IGdDUFUtPkdldFBDICgpKTsgCSBCb29sIEluUHJ2RHJhd1NsaWRlckNv bnRyb2wgIChlbXVwdHIgPSBnQ1BVLT5HZXRQQyAoKSk7IAkgQm9vbCBJblBydkZpbmRNZW1vcnlM ZWFrcyAgKGVtdXB0ciA9IGdDUFUtPkdldFBDICgpKTsgCSBCb29sIEluUHJ2R2V0RXhwR2xvYmFs cyAgKGVtdXB0ciA9IGdDUFUtPkdldFBDICgpKTsgCSBCb29sIEluUHJ2R2V0VkZTR2xvYmFscyAg KGVtdXB0ciA9IGdDUFUtPkdldFBDICgpKTsgCSBCb29sIEluUHJ2R2V0SW50bE1nckdsb2JhbHNQ ICAoZW11cHRyID0gZ0NQVS0+R2V0UEMgKCkpOyAJIEJvb2wgSW5QcnZTZXRJbnRsTWdyR2xvYmFs c1AgIChlbXVwdHIgPSBnQ1BVLT5HZXRQQyAoKSk7IAkgQm9vbCBJblBydk1pc0FsaWduZWRGb3J3 YXJkSW5uZXJCaXRCbHQgIChlbXVwdHIgPSBnQ1BVLT5HZXRQQyAoKSk7IAkgQm9vbCBJblBydk1p c0FsaWduZWRCYWNrd2FyZElubmVyQml0Qmx0ICAoZW11cHRyID0gZ0NQVS0+R2V0UEMgKCkpOyAJ IEJvb2wgSW5QcnZTeXN0ZW1UaW1lclByb2MgIChlbXVwdHIgPSBnQ1BVLT5HZXRQQyAoKSk7IAkg Qm9vbCBJblBydlJlbGVhc2VFeHBHbG9iYWxzICAoZW11cHRyID0gZ0NQVS0+R2V0UEMgKCkpOyAJ IEJvb2wgSW5QcnZSZWxlYXNlVkZTR2xvYmFscyAgKGVtdXB0ciA9IGdDUFUtPkdldFBDICgpKTsg CSBCb29sIEluU2VjUHJ2UmFuZG9tU2VlZCAgKGVtdXB0ciA9IGdDUFUtPkdldFBDICgpKTsgCSBC b29sIEluU3lzQXBwRXhpdCAgKGVtdXB0ciA9IGdDUFUtPkdldFBDICgpKTsgCSBCb29sIEluU3lz TGF1bmNoICAoZW11cHRyID0gZ0NQVS0+R2V0UEMgKCkpOyAJIEJvb2wgSW5Uc21HbHVlR2V0RmVw R2xvYmFscyAgKGVtdXB0ciA9IGdDUFUtPkdldFBDICgpKTsgCSBCb29sIEluVkZTSW5pdCAgKGVt dXB0ciA9IGdDUFUtPkdldFBDICgpKTsgCSBCb29sIEluX0NlcnRpY29tTWVtQ3B5ICAoZW11cHRy ID0gZ0NQVS0+R2V0UEMgKCkpOyAgCgoKCgogCiAKIAoKaW5saW5lIHVpbnQxNiBTeXNUcmFwSW5k ZXggKHVpbnQxNiB0cmFwV29yZCkKewoJcmV0dXJuICh1aW50MTYpICh0cmFwV29yZCAmIH4weEYw MDApOwp9CgppbmxpbmUgdWludDE2IExpYlRyYXBJbmRleCAodWludDE2IHRyYXBXb3JkKQp7Cgly ZXR1cm4gKHVpbnQxNikgKFN5c1RyYXBJbmRleCAodHJhcFdvcmQpIC0gU3lzVHJhcEluZGV4ICgw eEE4MDAgKSk7Cn0KCmlubGluZSBCb29sIElzU3lzdGVtVHJhcCAodWludDE2IHRyYXBXb3JkKQp7 CglyZXR1cm4gU3lzVHJhcEluZGV4ICh0cmFwV29yZCkgPCBTeXNUcmFwSW5kZXggKDB4QTgwMCAp Owp9CgppbmxpbmUgQm9vbCBJc0xpYnJhcnlUcmFwICh1aW50MTYgdHJhcFdvcmQpCnsKCXJldHVy biAhSXNTeXN0ZW1UcmFwICh0cmFwV29yZCk7Cn0KCgoKCgoKCgoKQm9vbAlQcm9zY3JpYmVkRnVu Y3Rpb24JCShjb25zdCBTeXN0ZW1DYWxsQ29udGV4dCYgY29udGV4dCk7CmludAkJR2V0UHJvc2Ny aWJlZFJlYXNvbgkJKGNvbnN0IFN5c3RlbUNhbGxDb250ZXh0JiBjb250ZXh0KTsKCmVtdXB0cglH ZXRGdW5jdGlvbkFkZHJlc3MJCSh1aW50MTYgdHJhcFdvcmQsIHVpbnQzMiBleHRyYSA9IDB4RkZG RiAsIEJvb2wgZGlnRGVlcCA9IGZhbHNlKTsKZW11cHRyCUdldExpYkZ1bmN0aW9uQWRkcmVzcwko dWludDE2IHRyYXBXb3JkLCBVSW50MTYgcmVmTnVtLCBCb29sIGRpZ0RlZXApOwplbXVwdHIJR2V0 U3lzRnVuY3Rpb25BZGRyZXNzCSh1aW50MTYgdHJhcFdvcmQsIHVpbnQzMiBleHRyYSwgQm9vbCBk aWdEZWVwKTsKZW11cHRyCUdldFN0ZERpc3BhdGNoQWRkcmVzcwkoZW11cHRyIGVudHJ5UHQsIHVp bnQzMiByZWdEMik7CmVtdXB0cglHZXRGbHBFbURpc3BhdGNoQWRkcmVzcwkoZW11cHRyIGVudHJ5 UHQsIHVpbnQzMiByZWdEMik7CmVtdXB0cglHZXRJbnRsRGlzcGF0Y2hBZGRyZXNzCShlbXVwdHIg ZW50cnlQdCwgdWludDMyIHJlZ0QyKTsKCgpjbGFzcyBFbVVuaW1wbGVtZW50ZWRGdW5jdGlvbkV4 Y2VwdGlvbgp7CglwdWJsaWM6CgkJRW1VbmltcGxlbWVudGVkRnVuY3Rpb25FeGNlcHRpb24gKGxv bmcgbiA9IDApIDoKCQkJZkxpYkluZGV4IChuKQoJCXsKCQl9CgoJCWxvbmcJZkxpYkluZGV4Owp9 OwoKY2xhc3MgRW1JbnZhbGlkUmVmTnVtRXhjZXB0aW9uCnsKCXB1YmxpYzoKCQlFbUludmFsaWRS ZWZOdW1FeGNlcHRpb24gKGxvbmcgbiA9IDAsIGxvbmcgbSA9IDB4RkZGRiApIDoKCQkJZkxpYklu ZGV4IChuKSwKCQkJZk1heFJlZk51bSAobSkKCQl7CgkJfQoKCQlsb25nCWZMaWJJbmRleDsKCQls b25nCWZNYXhSZWZOdW07Cn07CgpjaGFyKglHZXRUcmFwTmFtZQkJCQkoY29uc3QgU3lzdGVtQ2Fs bENvbnRleHQmLCBCb29sIGRpZ0RlZXAgPSBmYWxzZSk7CmNoYXIqCUdldFRyYXBOYW1lCQkJCSh1 aW50MTYgdHJhcFdvcmQsIHVpbnQzMiBleHRyYSA9IDB4RkZGRiAsIEJvb2wgZGlnRGVlcCA9IGZh bHNlKTsKdm9pZAlGaW5kVHJhcE5hbWUJCQkodWludDE2IHRyYXBXb3JkLCBjaGFyKiBuYW1lUCwg dWludDMyIGV4dHJhID0gMHhGRkZGICwgQm9vbCBkaWdEZWVwID0gZmFsc2UpOwoKIAogCiAKIAoK dm9pZAlGaW5kRnVuY3Rpb25OYW1lCQkoZW11cHRyIGFkZHIsCgkJCQkJCQkJIGNoYXIqIG5hbWVQ LAoJCQkJCQkJCSBlbXVwdHIqIHN0YXJ0QWRkclAgPSBfX251bGwgLAoJCQkJCQkJCSBlbXVwdHIq IGVuZEFkZHJQID0gX19udWxsICwKCQkJCQkJCQkgbG9uZyBuYW1lQ2FwYWNpdHkgPSAzMik7CmVt dXB0cglGaW5kRnVuY3Rpb25TdGFydAkJKGVtdXB0ciBhZGRyKTsKZW11cHRyCUZpbmRGdW5jdGlv bkVuZAkJCShlbXVwdHIgYWRkcik7CkJvb2wJRW5kT2ZGdW5jdGlvblNlcXVlbmNlCShlbXVwdHIg YWRkcik7CgogCiAKIAogCgp2b2lkCUdldE1hY3NidWdJbmZvCQkJKGVtdXB0ciBlb2YsIGNoYXIq IG5hbWUsIGxvbmcgbmFtZUNhcGFjaXR5LCBlbXVwdHIqIHNvZik7CnZvaWQJTWFjc2J1Z05hbWVM ZW5ndGgJCShlbXVwdHIgYWRkciwgdWludDgqIGxlbmd0aCwgQm9vbCogaXNGaXhlZCwgZW11cHRy KiBuYW1lUHRyKTsKQm9vbAlWYWxpZE1hY3NidWdDaGFyCQkodWludDggY2gpOwoKCiMgMjMgIi4v Li4vU3JjU2hhcmVkL01ldGFNZW1vcnkuY3BwIiAyCgojIDEgIi4uL1NyY1NoYXJlZC9FbVBhbG1P Uy5oIiAxCiAKIAoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIG1hcmsgU3RhY2tSYW5nZQoKc3Ry dWN0IFN0YWNrUmFuZ2UKewoJU3RhY2tSYW5nZSAoKSA6CgkJZlRvcCAoMCksCgkJZkxvd1dhdGVy TWFyayAoMCksCgkJZkJvdHRvbSAoMCkKCQl7fQoJU3RhY2tSYW5nZSAoY29uc3QgU3RhY2tSYW5n ZSYgb3RoZXIpIDoKCQlmVG9wIChvdGhlci5mVG9wKSwKCQlmTG93V2F0ZXJNYXJrIChvdGhlci5m TG93V2F0ZXJNYXJrKSwKCQlmQm90dG9tIChvdGhlci5mQm90dG9tKQoJCXt9CglTdGFja1Jhbmdl IChlbXVwdHIgYm90dG9tLCBlbXVwdHIgdG9wKSA6CgkJZlRvcCAodG9wKSwKCQlmTG93V2F0ZXJN YXJrICh0b3ApLAoJCWZCb3R0b20gKGJvdHRvbSkKCQl7fQoKCWJvb2wgb3BlcmF0b3I9PShjb25z dCBTdGFja1JhbmdlJiBvdGhlcikgY29uc3QKCQl7IHJldHVybiBmQm90dG9tID09IG90aGVyLmZC b3R0b207IH0KCglib29sIG9wZXJhdG9yIT0oY29uc3QgU3RhY2tSYW5nZSYgb3RoZXIpIGNvbnN0 CgkJeyByZXR1cm4gZkJvdHRvbSAhPSBvdGhlci5mQm90dG9tOyB9CgoJYm9vbCBvcGVyYXRvcjwo Y29uc3QgU3RhY2tSYW5nZSYgb3RoZXIpIGNvbnN0CgkJeyByZXR1cm4gZkJvdHRvbSA8IG90aGVy LmZCb3R0b207IH0KCglib29sIG9wZXJhdG9yPihjb25zdCBTdGFja1JhbmdlJiBvdGhlcikgY29u c3QKCQl7IHJldHVybiBmQm90dG9tID4gb3RoZXIuZkJvdHRvbTsgfQoKCSAKCgllbXVwdHIJZlRv cDsKCWVtdXB0cglmTG93V2F0ZXJNYXJrOwoJZW11cHRyCWZCb3R0b207Cn07Cgp0eXBlZGVmIHZl Y3RvcjxTdGFja1JhbmdlPiBTdGFja0xpc3Q7CgpjbGFzcyBFbVN0cmVhbTsKRW1TdHJlYW0mIG9w ZXJhdG9yIDw8IChFbVN0cmVhbSYsIGNvbnN0IFN0YWNrUmFuZ2UmKTsKRW1TdHJlYW0mIG9wZXJh dG9yID4+IChFbVN0cmVhbSYsIFN0YWNrUmFuZ2UmKTsKCmNsYXNzIEVtUGFsbUNodW5rOwpjbGFz cyBTZXNzaW9uRmlsZTsKCmNsYXNzIEVtUGFsbU9TCnsKCXB1YmxpYzoKCQlzdGF0aWMgdm9pZAkJ CQlJbml0aWFsaXplCQkJCQkodm9pZCk7CgkJc3RhdGljIHZvaWQJCQkJUmVzZXQJCQkJCQkodm9p ZCk7CgkJc3RhdGljIHZvaWQJCQkJU2F2ZQkJCQkJCShTZXNzaW9uRmlsZSYpOwoJCXN0YXRpYyB2 b2lkCQkJCUxvYWQJCQkJCQkoU2Vzc2lvbkZpbGUmKTsKCQlzdGF0aWMgdm9pZAkJCQlEaXNwb3Nl CQkJCQkJKHZvaWQpOwoKCXB1YmxpYzoKCQlzdGF0aWMgdm9pZCAJCQlDaGVja1N0YWNrUG9pbnRl ckFzc2lnbm1lbnQJKHZvaWQpOwoJCXN0YXRpYyB2b2lkIAkJCUNoZWNrU3RhY2tQb2ludGVyRGVj cmVtZW50CSh2b2lkKTsKCQlzdGF0aWMgdm9pZCAJCQlDaGVja0tlcm5lbFN0YWNrCQkJKHZvaWQp OwoJCXN0YXRpYyB2b2lkIAkJCVJlbWVtYmVyU3RhY2tDaHVuawkJCShjb25zdCBFbVBhbG1DaHVu ayYpOwoJCXN0YXRpYyB2b2lkIAkJCVJlbWVtYmVyQm9vdFN0YWNrCQkJKHZvaWQpOwoJCXN0YXRp YyB2b2lkIAkJCVJlbWVtYmVyS2VybmVsU3RhY2sJCQkodm9pZCk7CgkJc3RhdGljIHZvaWQgCQkJ UmVtZW1iZXJTdGFja1JhbmdlCQkJKGNvbnN0IFN0YWNrUmFuZ2UmKTsKCQlzdGF0aWMgdm9pZAkJ CQlTZXRDdXJyZW50U3RhY2sJCQkJKGNvbnN0IFN0YWNrUmFuZ2UmKTsKCQlzdGF0aWMgdm9pZCAJ CQlGb3JnZXRTdGFjawkJCQkJKGVtdXB0cik7CgkJc3RhdGljIHZvaWQgCQkJRm9yZ2V0U3RhY2tz SW4JCQkJKGVtdXB0ciwgdWludDMyKTsKCQlzdGF0aWMgU3RhY2tSYW5nZQkJR2V0Qm9vdFN0YWNr CQkJCSh2b2lkKTsKCQlzdGF0aWMgQm9vbAkJCQlJc0luU3RhY2sJCQkJCShlbXVwdHIpOwoJCXN0 YXRpYyBCb29sCQkJCUlzSW5TdGFja0Jsb2NrCQkJCShlbXVwdHIpOwoJCXN0YXRpYyB2b2lkCQkJ CUdlbmVyYXRlU3RhY2tDcmF3bAkJCShFbVN0YWNrRnJhbWVMaXN0JiBmcmFtZUxpc3QpOwoJCXN0 YXRpYyB2b2lkCQkJCVByZWZzQ2hhbmdlZAkJCQkoUHJlZktleVR5cGUsIHZvaWQqKTsKCglwcm90 ZWN0ZWQ6CgkJc3RhdGljIEJvb2wJCQkJSGFuZGxlVHJhcDE1CQkJCShFeGNlcHRpb25OdW1iZXIp OwoJCXN0YXRpYyBCb29sCQkJCUhhbmRsZUpTUgkJCQkJKGVtdXB0ciBvbGRQQywgZW11cHRyIGRl c3QpOwoJCXN0YXRpYyBCb29sCQkJCUhhbmRsZUpTUl9JbmQJCQkJKGVtdXB0ciBvbGRQQywgZW11 cHRyIGRlc3QpOwoJCXN0YXRpYyB2b2lkCQkJCUhhbmRsZUxJTksJCQkJCShpbnQgbGlua1NpemUp OwoJCXN0YXRpYyBCb29sCQkJCUhhbmRsZVJURQkJCQkJKGVtdXB0ciBkZXN0KTsKCQlzdGF0aWMg Qm9vbAkJCQlIYW5kbGVSVFMJCQkJCShlbXVwdHIgZGVzdCk7CgkJc3RhdGljIHZvaWQJCQkJSGFu ZGxlTmV3UEMJCQkJCShlbXVwdHIgZGVzdCk7CgkJc3RhdGljIHZvaWQJCQkJSGFuZGxlTmV3U1AJ CQkJCShFbVN0YWNrQ2hhbmdlVHlwZSk7CgoJcHJpdmF0ZToKCQlzdGF0aWMgQm9vbAkJCQlIYW5k bGVTeXN0ZW1DYWxsCQkJKEJvb2wgZnJvbVRyYXApOwp9OwoKCgojIDI0ICIuLy4uL1NyY1NoYXJl ZC9NZXRhTWVtb3J5LmNwcCIgMgoKCiMgMSAiLi4vU3JjU2hhcmVkL1BhdGNoZXMvRW1QYXRjaFN0 YXRlLmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKCiMgMSAiLi4vU3JjU2hhcmVkL0NodW5rRmlsZS5o IiAxCiAKIAoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgQ2h1bms7CgoKIAoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKY2xhc3MgQ2h1bmtGaWxlCnsKCXB1YmxpYzoKCQkJCQkJCQlDaHVua0ZpbGUJCShF bVN0cmVhbSYgcyk7CgkJCQkJCQkJfkNodW5rRmlsZQkJKHZvaWQpOwoKCQl0eXBlZGVmIHVpbnQz MglUYWc7CgogCgkJZW51bSB7IGtDaHVua05vdEZvdW5kID0gLTEgfTsKCQlsb25nCQkJCQlGaW5k Q2h1bmsJCShUYWcgdGFnKTsJIAoKCQlCb29sCQkJCQlSZWFkQ2h1bmsJCShpbnQgaW5kZXgsIFRh ZyYgdGFnLCBDaHVuayYpOwoJCUJvb2wJCQkJCVJlYWRDaHVuawkJKFRhZyB0YWcsIENodW5rJik7 CgkJdm9pZAkJCQkJUmVhZENodW5rCQkodWludDMyIHNpemUsIHZvaWQqIGRhdGEpOwoJCUJvb2wJ CQkJCVJlYWRJbnQJCQkoVGFnIHRhZywgdWludDgmKTsKCQlCb29sCQkJCQlSZWFkSW50CQkJKFRh ZyB0YWcsIGludDgmKTsKCQlCb29sCQkJCQlSZWFkSW50CQkJKFRhZyB0YWcsIHVpbnQxNiYpOwoJ CUJvb2wJCQkJCVJlYWRJbnQJCQkoVGFnIHRhZywgaW50MTYmKTsKCQlCb29sCQkJCQlSZWFkSW50 CQkJKFRhZyB0YWcsIHVpbnQzMiYpOwoJCUJvb2wJCQkJCVJlYWRJbnQJCQkoVGFnIHRhZywgaW50 MzImKTsKCQlCb29sCQkJCQlSZWFkU3RyaW5nCQkoVGFnIHRhZywgY2hhciopOwoJCUJvb2wJCQkJ CVJlYWRTdHJpbmcJCShUYWcgdGFnLCBzdHJpbmcmKTsKCgkJdm9pZAkJCQkJV3JpdGVDaHVuawkJ KFRhZyB0YWcsIGNvbnN0IENodW5rJik7CgkJdm9pZAkJCQkJV3JpdGVDaHVuawkJKFRhZyB0YWcs IHVpbnQzMiBzaXplLCBjb25zdCB2b2lkKiBkYXRhKTsKCQl2b2lkCQkJCQlXcml0ZUludAkJKFRh ZyB0YWcsIHVpbnQ4KTsKCQl2b2lkCQkJCQlXcml0ZUludAkJKFRhZyB0YWcsIGludDgpOwoJCXZv aWQJCQkJCVdyaXRlSW50CQkoVGFnIHRhZywgdWludDE2KTsKCQl2b2lkCQkJCQlXcml0ZUludAkJ KFRhZyB0YWcsIGludDE2KTsKCQl2b2lkCQkJCQlXcml0ZUludAkJKFRhZyB0YWcsIHVpbnQzMik7 CgkJdm9pZAkJCQkJV3JpdGVJbnQJCShUYWcgdGFnLCBpbnQzMik7CgkJdm9pZAkJCQkJV3JpdGVT dHJpbmcJCShUYWcgdGFnLCBjb25zdCBjaGFyKik7CgkJdm9pZAkJCQkJV3JpdGVTdHJpbmcJCShU YWcgdGFnLCBjb25zdCBzdHJpbmcmKTsKCgkJRW1TdHJlYW0mCQkJCUdldFN0cmVhbQkJKHZvaWQp IGNvbnN0OwoKCXByaXZhdGU6CgkJRW1TdHJlYW0mCQkJCWZTdHJlYW07Cn07CgoKY2xhc3MgQ2h1 bmsKewoJcHVibGljOgoJCQkJCQkJCUNodW5rCQkJKHZvaWQpOwoJCQkJCQkJCUNodW5rCQkJKGxv bmcgaW5MZW5ndGgpOwoJCQkJCQkJCUNodW5rCQkJKGNvbnN0IENodW5rJik7CgkJCQkJCQkJfkNo dW5rCQkJKHZvaWQpOwoKCQlDaHVuayYJCQkJCW9wZXJhdG9yPQkJKGNvbnN0IENodW5rJik7CgoJ CXZvaWQqCQkJCQlHZXRQb2ludGVyCQkodm9pZCkgY29uc3Q7CgkJbG9uZwkJCQkJR2V0TGVuZ3Ro CQkodm9pZCkgY29uc3Q7CgkJdm9pZAkJCQkJU2V0TGVuZ3RoCQkobG9uZyBpbkxlbmd0aCk7CgoJ cHJpdmF0ZToKCQl2b2lkKgkJCQkJZlB0cjsKCQlsb25nCQkJCQlmVXNlZFNpemU7CgkJbG9uZwkJ CQkJZkFsbG9jYXRlZFNpemU7Cn07CgoKY2xhc3MgRW1TdHJlYW1DaHVuayA6IHB1YmxpYyBFbVN0 cmVhbQp7CglwdWJsaWM6CgkJCQkJCQkJRW1TdHJlYW1DaHVuawkoQ2h1bmsqKTsKCQkJCQkJCQlF bVN0cmVhbUNodW5rCShDaHVuayYpOwoJCXZpcnR1YWwJCQkJCX5FbVN0cmVhbUNodW5rCSh2b2lk KTsKCgkJdmlydHVhbCB2b2lkCQkJU2V0TGVuZ3RoCQkoaW50MzIJCQlpbkxlbmd0aCk7CgoJCXZp cnR1YWwgRXJyQ29kZQkJCVB1dEJ5dGVzCQkoY29uc3Qgdm9pZCoJaW5CdWZmZXIsCgkJCQkJCQkJ CQkJCSBpbnQzMgkJCWlvQnl0ZUNvdW50KTsKCQl2aXJ0dWFsIEVyckNvZGUJCQlHZXRCeXRlcwkJ KHZvaWQqCQkJb3V0QnVmZmVyLAoJCQkJCQkJCQkJCQkgaW50MzIJCQlpb0J5dGVDb3VudCk7CgoJ cHJpdmF0ZToKCQlDaHVuayYJCQkJCWZDaHVuazsKCQlDaHVuayoJCQkJCWZPd25lZENodW5rOwp9 OwoKCgojIDE4ICIuLi9TcmNTaGFyZWQvUGF0Y2hlcy9FbVBhdGNoU3RhdGUuaCIgMgoKCiMgMSAi Li4vU3JjU2hhcmVkL1BhdGNoZXMvRW1QYXRjaE1vZHVsZVR5cGVzLmgiIDEKIAogCgoKCgoKCgoK CgoKCgoKCiMgMSAiLi4vU3JjU2hhcmVkL1BhdGNoZXMvRW1QYXRjaElmLmgiIDEKIAogCgoKCgoK CgoKCgoKCgoKCiMgMSAiLi4vU3JjU2hhcmVkL0VjbUlmLmgiIDEKIAogCgoKCgoKCgoKCgoKCgoK CgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAoKCmVudW0gRWNtRXJyCnsKCWtFY21FcnJOb25l LAoJa0VjbUVycllpa2VzLAkJCQkgCgkJCQkJCQkJIAoKCWtFY21FcnJJbnZhbGlkUGFyYW1ldGVy LAkgCglrRWNtRXJySW52YWxpZEhhbmRsZSwJCSAKCWtFY21FcnJJbnZhbGlkSWZOYW1lLAkJIAoJ a0VjbUVyckludmFsaWRQdWJOYW1lLAkJIAoJa0VjbUVyckludmFsaWRTcnZOYW1lLAkJIAoJa0Vj bUVyckludmFsaWRDb21wTmFtZSwJCSAKCWtFY21FcnJCYWRFdmVudFR5cGUsCQkgCglrRWNtRXJy SW52YWxpZENvbm5lY3Rpb24sCSAKCWtFY21FcnJBbHJlYWR5Q29ubmVjdGVkLAkgCglrRWNtRXJy Tm90SW5pdGlhbGl6ZWQJCSAKfTsKCgoKCiAKIAogCiAKIAogCgp0eXBlZGVmIHN0cmluZwlFY21J Zk5hbWU7CnR5cGVkZWYgc3RyaW5nCUVjbUNvbXBOYW1lOwoKCiAKIAogCgp0eXBlZGVmIHZvaWQq CUVjbUhhbmRsZTsKCgoKIAogCiAKIAoKY29uc3QgRWNtSWZOYW1lIGtFY21Db21wb25lbnRJZm4g PSAiY29tcG9uZW50LmkuZWNtIjsKCnN0cnVjdCAgSUVjbUNvbXBvbmVudAp7CgkgCgoKCgoKCgoK CgoKCgoKCXZpcnR1YWwgRWNtRXJyIFJlcXVlc3RJbnRlcmZhY2UoY29uc3QgRWNtSWZOYW1lICZu YW1lLCB2b2lkICoqaVBQKSA9IDA7CgoKCSAKCgoKCgoKCgoKCgoKCgoKICAgIHZpcnR1YWwgRWNt RXJyIFJlZmVyKCkgPSAwOwoKCgkgCgoKCgoKCgoKCgoKCgogICAgdmlydHVhbCBFY21FcnIgUmVs ZWFzZSgpID0gMDsKfTsKCgoKIAogCiAKCmNvbnN0IEVjbUlmTmFtZSBrRWNtQ29udGFpbmVySWZu ID0gImNvbnRhaW5lci5pLmVjbSI7CgpzdHJ1Y3QgIElFY21Db250YWluZXIgOiB2aXJ0dWFsIHB1 YmxpYyAgSUVjbUNvbXBvbmVudAp7Cn07CgoKCiAKIAogCgpjb25zdCBFY21JZk5hbWUga0VjbVBh Y2thZ2VJZm4gPSAicGFja2FnZS5pLmVjbSI7CgpzdHJ1Y3QgIElFY21QYWNrYWdlIDogdmlydHVh bCBwdWJsaWMgIElFY21Db21wb25lbnQKewp9OwoKCgogCiAKIAoKY29uc3QgRWNtSWZOYW1lIGtF Y21FdmVudEJhc2VJZm4gPSAiZXZlbnRiYXNlLmV2ZW50cy5pLmVjbSI7CgpzdHJ1Y3QgIElFY21F dmVudEJhc2UgOiB2aXJ0dWFsIHB1YmxpYyAgSUVjbUNvbXBvbmVudAp7CgoKfTsKCgoKIAogCiAK CmNvbnN0IEVjbUlmTmFtZSBrRWNtRXZlbnRMaXN0ZW5lcklmbiA9ICJsaXN0ZW5lci5ldmVudHMu aS5lY20iOwoKIAoKCnN0cnVjdCAgSUVjbUV2ZW50TGlzdGVuZXIKewoJIAoKCgoKCgoKCgoKCgoK ICAgIEVjbUVyciBPbkV2ZW50KGNvbnN0IElFY21FdmVudEJhc2UgKmV2dElQKTsKfTsKCgogCiAK IAoKY29uc3QgRWNtSWZOYW1lIGtFY21FdmVudHNJZm4gPSAiZXZlbnRzLmkuZWNtIjsKCnN0cnVj dCAgSUVjbUV2ZW50cwp7CgkgCgoKCgoKCgoKCgoKCgoKCiAgICB2aXJ0dWFsIEVjbUVyciBSZXF1 ZXN0TGlzdGVuZXIoY29uc3QgRWNtSWZOYW1lICZuYW1lLCB2b2lkICoqbGlzdGVuZXJJUFApID0g MDsKCgoJIAoKCgoKCgoKCgoKCgoKCgoKICAgIHZpcnR1YWwgRWNtRXJyIFN1YnNjcmliZShjb25z dCBFY21JZk5hbWUgJnB1Ymxpc2hlciwgY29uc3QgSUVjbUV2ZW50TGlzdGVuZXIgKnN1YnNjcmli ZXJJUCwgRWNtSGFuZGxlICZoYW5kbGUpID0gMDsKCgoJIAoKCgoKCgoKCgoKCgoKICAgIHZpcnR1 YWwgRWNtRXJyIFVuc3Vic2NyaWJlKGNvbnN0IEVjbUhhbmRsZSBoYW5kbGUpID0gMDsKCn07CgoK CiMgMTggIi4uL1NyY1NoYXJlZC9QYXRjaGVzL0VtUGF0Y2hJZi5oIiAyCgoKCmVudW0KewoJa1Bh dGNoRXJyTm9uZSwKCWtQYXRjaEVyck5vdEltcGxlbWVudGVkLAoJa1BhdGNoRXJySW52YWxpZElu ZGV4Cn07CgoKZW51bSBDYWxsUk9NVHlwZQp7CglrRXhlY3V0ZVJPTSwKCWtTa2lwUk9NCn07CgoK IAoKdHlwZWRlZglDYWxsUk9NVHlwZQkoKkhlYWRwYXRjaFByb2MpKHZvaWQpOwp0eXBlZGVmCXZv aWQJCSgqVGFpbHBhdGNoUHJvYykodm9pZCk7CgoKIAogCiAKCmNvbnN0IEVjbUlmTmFtZSBrRW1Q YXRjaExvYWRlcklmbiA9ICJsb2FkZXIucGF0Y2htb2R1bGUuaS5lY20iOwoKc3RydWN0ICBJRW1Q YXRjaExvYWRlciA6IHZpcnR1YWwgcHVibGljICBJRWNtQ29tcG9uZW50CnsKCXZpcnR1YWwgRXJy IEluaXRpYWxpemVQTAkodm9pZCkgPSAwOwoJdmlydHVhbCBFcnIgUmVzZXRQTAkJCSh2b2lkKSA9 IDA7Cgl2aXJ0dWFsIEVyciBEaXNwb3NlUEwJCSh2b2lkKSA9IDA7CgkKCXZpcnR1YWwgRXJyIENs ZWFyUEwJCQkodm9pZCkgPSAwOwoJdmlydHVhbCBFcnIgTG9hZFBMCQkJKHZvaWQpID0gMDsKCgl2 aXJ0dWFsIEVyciBMb2FkQWxsTW9kdWxlcwkodm9pZCkgPSAwOwoJdmlydHVhbCBFcnIgTG9hZE1v ZHVsZQkJKGNvbnN0IHN0cmluZyYgdXJsKSA9IDA7Cn07CgogCiAKIAoJCgoKIAogCiAKCmNvbnN0 IEVjbUlmTmFtZSBrRW1QYXRjaENvbnRhaW5lcklmbiA9ICJjb250YWluZXIucGF0Y2htb2R1bGUu aS5lY20iOwoKc3RydWN0ICBJRW1QYXRjaENvbnRhaW5lciA6IHZpcnR1YWwgcHVibGljICBJRWNt Q29udGFpbmVyCnsKfTsKCgogCiAKIAoKCgogCiAKIAoKY29uc3QgRWNtSWZOYW1lIGtFbVBhdGNo RGxsVGVtcEhhY2tzSWZuID0gImhhY2tzLmRsbC5wYXRjaG1vZHVsZS5pLmVjbSI7CgpzdHJ1Y3Qg IElFbVBhdGNoRGxsVGVtcEhhY2tzIDogdmlydHVhbCBwdWJsaWMgIElFY21Db21wb25lbnQKewoJ dmlydHVhbCBFcnIgR2V0R2xvYmFsTWVtQmFua3Modm9pZCoqIG1lbWJhbmtzUFApPTA7Cgl2aXJ0 dWFsIEVyciBHZXRHbG9iYWxSZWdzKHZvaWQqKiByZWdzUFApPTA7Cn07CgogCiAKIAoKCgoKIAog CiAKIAoKY29uc3QgRWNtSWZOYW1lIGtFbVBhdGNoTW9kdWxlSWZuID0gInBhdGNobW9kdWxlLmku ZWNtIjsKCnN0cnVjdCAgSUVtUGF0Y2hNb2R1bGUgOiB2aXJ0dWFsIHB1YmxpYyAgSUVjbUNvbXBv bmVudAp7Cgl2aXJ0dWFsIEVyciBJbml0aWFsaXplKElFbVBhdGNoQ29udGFpbmVyICZjb250YWlu ZXJJUCkgPSAwOwoJdmlydHVhbCBFcnIgUmVzZXQoKSA9IDA7Cgl2aXJ0dWFsIEVyciBEaXNwb3Nl KCkgPSAwOwoJCgl2aXJ0dWFsIEVyciBDbGVhciAoKSA9IDA7Cgl2aXJ0dWFsIEVyciBMb2FkICgp ID0gMDsKCgl2aXJ0dWFsIGNvbnN0IHN0cmluZyAmR2V0TmFtZSgpID0gMDsKCgl2aXJ0dWFsIEVy ciBHZXRIZWFkcGF0Y2ggKHVpbnQxNiBpbmRleCwgSGVhZHBhdGNoUHJvYyAmcHJvY1ApID0gMDsK CXZpcnR1YWwgRXJyIEdldFRhaWxwYXRjaCAodWludDE2IGluZGV4LCBUYWlscGF0Y2hQcm9jICZw cm9jUCkgPSAwOwp9OwoKCgoKIAogCiAKIAogCgpjb25zdCBFY21JZk5hbWUga0VtUGF0Y2hNb2R1 bGVNYXBJZm4gPSAibWFwLnBhdGNobW9kdWxlLmkuZWNtIjsKCnN0cnVjdCAgSUVtUGF0Y2hNb2R1 bGVNYXAgOiB2aXJ0dWFsIHB1YmxpYyAgSUVjbUNvbXBvbmVudAp7Cgl2aXJ0dWFsIEVyciBJbml0 aWFsaXplQWxsKElFbVBhdGNoQ29udGFpbmVyICZjb250YWluZXJJKSA9IDA7Cgl2aXJ0dWFsIEVy ciBSZXNldEFsbCgpID0gMDsKCXZpcnR1YWwgRXJyIERpc3Bvc2VBbGwoKSA9IDA7CgkKCXZpcnR1 YWwgRXJyIENsZWFyQWxsICgpID0gMDsKCXZpcnR1YWwgRXJyIExvYWRBbGwgKCkgPSAwOwoKCXZp cnR1YWwgRXJyIEFkZE1vZHVsZSAoSUVtUGF0Y2hNb2R1bGUgKm1vZHVsZUlQKSA9IDA7CgkKCXZp cnR1YWwgRXJyIEdldE1vZHVsZUJ5TmFtZSAoY29uc3Qgc3RyaW5nICZuYW1lU3RyLCBJRW1QYXRj aE1vZHVsZSAqJiBtb2R1bGVJUCkgPSAwOwp9OwoKCiMgMTggIi4uL1NyY1NoYXJlZC9QYXRjaGVz L0VtUGF0Y2hNb2R1bGVUeXBlcy5oIiAyCgoKCgogCiAKIAogCiAKIAogCgpzdHJ1Y3QgUHJvdG9Q YXRjaFRhYmxlRW50cnkKewoJdWludDE2CQkJZlRyYXBXb3JkOwoJSGVhZHBhdGNoUHJvYwlmSGVh ZHBhdGNoOwoJVGFpbHBhdGNoUHJvYwlmVGFpbHBhdGNoOwp9OwoKCiAKIAogCiAKCmNsYXNzIElu c3RhbGxlZExpYlBhdGNoRW50cnkKewoJcHVibGljOgoJCQkJCQkJCUluc3RhbGxlZExpYlBhdGNo RW50cnkgKHZvaWQpIDoKCQkJCQkJCQkJZklzRGlydHkgKHRydWUpLAoJCQkJCQkJCQlmVGFibGVQ IChfX251bGwgKQoJCQkJCQkJCXsKCQkJCQkJCQl9CgoJCWJvb2wJCQkJCUlzRGlydHkgKHZvaWQp IGNvbnN0CgkJCQkJCQkJewoJCQkJCQkJCQlyZXR1cm4gZklzRGlydHk7CgkJCQkJCQkJfQoKCQl2 b2lkCQkJCQlTZXREaXJ0eSAoYm9vbCBkaXJ0eSA9IHRydWUpCgkJCQkJCQkJewoJCQkJCQkJCQlm SXNEaXJ0eSA9IGRpcnR5OwoJCQkJCQkJCX0KCgkJSUVtUGF0Y2hNb2R1bGUqCQkJR2V0UGF0Y2hU YWJsZVAgKHZvaWQpIGNvbnN0CgkJCQkJCQkJewoJCQkJCQkJCQlyZXR1cm4gZlRhYmxlUDsKCQkJ CQkJCQl9CgoJCXZvaWQJCQkJCVNldFBhdGNoVGFibGVQIChJRW1QYXRjaE1vZHVsZSogdGFibGVQ KQoJCQkJCQkJCXsKCQkJCQkJCQkJZlRhYmxlUCA9IHRhYmxlUDsKCQkJCQkJCQl9CgoJcHJpdmF0 ZToKCQlib29sCQkJCQlmSXNEaXJ0eTsKCQlJRW1QYXRjaE1vZHVsZSoJCQlmVGFibGVQOwp9OwoK dHlwZWRlZiB2ZWN0b3I8SW5zdGFsbGVkTGliUGF0Y2hFbnRyeT4gUGF0Y2hlZExpYkluZGV4OwoK CiAKIAogCiAKCnN0cnVjdCBUYWlscGF0Y2hUeXBlCnsKCVN5c3RlbUNhbGxDb250ZXh0CWZDb250 ZXh0OwoJaW50MzIgCQkJCWZDb3VudDsKCVRhaWxwYXRjaFByb2MJCWZUYWlscGF0Y2g7Cn07Cgp0 eXBlZGVmIHZlY3RvcjxUYWlscGF0Y2hUeXBlPgkJVGFpbFBhdGNoSW5kZXg7CgoKIyAyMCAiLi4v U3JjU2hhcmVkL1BhdGNoZXMvRW1QYXRjaFN0YXRlLmgiIDIKCgoKCgoKCmNvbnN0IFVJbnQzMglr T1NVbmRldGVybWluZWRWZXJzaW9uID0gfjA7CgoKdHlwZWRlZiBtYXA8ZW11cHRyLCBFbVBhbG1I ZWFwKj4JRW1IZWFwTWFwOwoKCgogCiAKIAoKc3RydWN0IEVtdUFwcEluZm8KewoJSW50MTYJCWZD bWQ7CQkgCglEbU9wZW5SZWYJZkRCOwoJVUludDE2CQlmQ2FyZE5vOwoJTG9jYWxJRAkJZkRCSUQ7 CglVSW50MTYJCWZNZW1Pd25lcklEOwoJZW11cHRyCQlmU3RhY2tQOwoJZW11cHRyCQlmU3RhY2tF bmRQOwoJbG9uZwkJZlN0YWNrU2l6ZTsKCWNoYXIJCWZOYW1lWzMyIF07CgljaGFyCQlmVmVyc2lv blsyNTZdOwkgCn07Cgp0eXBlZGVmIHZlY3RvcjxFbXVBcHBJbmZvPglFbXVBcHBJbmZvTGlzdDsK CgogCiAKCnN0cnVjdCBFbVRyYWNrZWRDaHVuawp7CgllbXVwdHIJCQkJcHRyOwoJYm9vbAkJCQlp c0hhbmRsZTsKCUVtU3RhY2tGcmFtZUxpc3QJc3RhY2tDcmF3bDsKfTsKCnR5cGVkZWYgbGlzdDxF bVRyYWNrZWRDaHVuaz4gRW1UcmFja2VkQ2h1bmtMaXN0OwoKCnN0cnVjdCBFbVBhdGNoU3RhdGVE YXRhCnsKCXB1YmxpYzoKCQlFbVBhdGNoU3RhdGVEYXRhICgpIDogCgkJCWZVSUluaXRpYWxpemVk IChmYWxzZSksCgkJCWZVSVJlc2V0IChmYWxzZSksCgoJCQlmRXZ0R2V0RXZlbnRDYWxsZWQgKGZh bHNlKSwKCQkJZkF1dG9BY2NlcHRCZWFtRGlhbG9ncyAoZmFsc2UpLAoJCQlmVGltZVRvUXVpdCAo ZmFsc2UpLAoKCQkJZkxhc3RFdnRUcmFwICgwKSwKCQkJZk9TVmVyc2lvbiAoMCksCgkJCWZFbmNv ZGluZyAoMCksCgoJCQlmU3lzQmluYXJ5U2VhcmNoQ291bnQgKDApLAoKCQkJZlF1aXRBcHBDYXJk Tm8gKDApLAoJCQlmUXVpdEFwcERiSUQgKDApLAoJCQlmTmV4dEFwcENhcmRObyAoMCksCgkJCWZO ZXh0QXBwRGJJRCAoMCksCgoJCQlmSGVhcEluaXRpYWxpemVkIChmYWxzZSksCgkJCWZNZW1NZ3JD b3VudCAoMCksCgkJCWZNZW1TZW1hcGhvcmVDb3VudCAoMCksCgkJCWZNZW1TZW1hcGhvcmVSZXNl cnZlVGltZSAoMCksCgkJCWZSZXNpemVPcmlnU2l6ZSAoMCksCgkJCWZIZWFwSUQgKDApCgkJewoJ CX0KCgkJYm9vbCAJCQkJCWZVSUluaXRpYWxpemVkOyAKCQlib29sIAkJCQkJZlVJUmVzZXQ7CgkJ Ym9vbAkJCQkJZkV2dEdldEV2ZW50Q2FsbGVkOwoJCWJvb2wJCQkJCWZBdXRvQWNjZXB0QmVhbURp YWxvZ3M7CgkJYm9vbAkJCQkJZlRpbWVUb1F1aXQ7CgoJCXVpbnQxNgkJCQkJZkxhc3RFdnRUcmFw OwoJCXVpbnQzMgkJCQkJZk9TVmVyc2lvbjsKCQl1aW50MzIJCQkJCWZFbmNvZGluZzsKCgkJbG9u ZyAJCQkJCWZTeXNCaW5hcnlTZWFyY2hDb3VudDsKCgkJdWludDE2IAkJCQkJZlF1aXRBcHBDYXJk Tm87CgkJTG9jYWxJRAkJCQkJZlF1aXRBcHBEYklEOwoJCXVpbnQxNiAJCQkJCWZOZXh0QXBwQ2Fy ZE5vOwoJCUxvY2FsSUQJCQkJCWZOZXh0QXBwRGJJRDsKCgkJRW11QXBwSW5mb0xpc3QJCQlmQ3Vy QXBwSW5mbzsKCgkJYm9vbCAJCQkJCWZIZWFwSW5pdGlhbGl6ZWQ7CgoJCWxvbmcgCQkJCQlmTWVt TWdyQ291bnQ7CgkJQm9vbAkJCQkJZk1lbU1nckxlYWtzOwoJCWxvbmcgCQkJCQlmTWVtU2VtYXBo b3JlQ291bnQ7CgkJdW5zaWduZWQgbG9uZwkJCWZNZW1TZW1hcGhvcmVSZXNlcnZlVGltZTsKCgkJ dWludDMyCQkJCQlmUmVzaXplT3JpZ1NpemU7CgkJdWludDE2IAkJCQkJZkhlYXBJRDsKCgkJRW1I ZWFwTWFwCQkJCWZSZW1lbWJlcmVkSGVhcHM7CgoJCUVtVHJhY2tlZENodW5rTGlzdAkJZlRyYWNr ZWRDaHVua3M7Cn07CgoKCmNsYXNzIEVtUGF0Y2hTdGF0ZQp7CglwdWJsaWM6CgkJc3RhdGljIEVy cgkJCQlJbml0aWFsaXplCSh2b2lkKTsKCQlzdGF0aWMgRXJyCQkJCURpc3Bvc2UJCSh2b2lkKTsK CQlzdGF0aWMgRXJyCQkJCVJlc2V0CQkodm9pZCk7CgoJCWVudW0gUGVyc2lzdGVuY2VQaGFzZQoJ CXsKCQkJUFNQZXJzaXN0QWxsLAkJIAoJCQlQU1BlcnNpc3RTdGVwMSwJCSAKCQkJUFNQZXJzaXN0 U3RlcDIJCSAKCQl9OwoKCQlzdGF0aWMgRXJyCQkJCVNhdmUJCQkJCShFbVN0cmVhbUNodW5rICZz LCBsb25nIHZlcnNpb24gPSAxLCBQZXJzaXN0ZW5jZVBoYXNlIHBhc3MgPSBQU1BlcnNpc3RBbGwp OwoJCXN0YXRpYyBFcnIJCQkJTG9hZAkJCQkJKEVtU3RyZWFtQ2h1bmsgJnMsIGxvbmcgdmVyc2lv biA9IDEsIFBlcnNpc3RlbmNlUGhhc2UgcGFzcyA9IFBTUGVyc2lzdEFsbCk7CgoJCXN0YXRpYyBF cnIJCQkJU2F2ZUN1ckFwcEluZm8JCQkoRW1TdHJlYW1DaHVuayAmcyk7CgkJc3RhdGljIEVycgkJ CQlMb2FkQ3VyQXBwSW5mbwkJCShFbVN0cmVhbUNodW5rICZzKTsKCgkJc3RhdGljIHVpbnQxNgkJ CUdldExhc3RFdnRUcmFwCQkJKHZvaWQpOwoJCXN0YXRpYyBFbXVBcHBJbmZvCQlHZXRDdXJyZW50 QXBwSW5mbwkJKHZvaWQpOwoJCXN0YXRpYyBFbXVBcHBJbmZvCQlHZXRSb290QXBwSW5mbwkJCSh2 b2lkKTsKCgoJCXN0YXRpYyBFcnIJCQkJQWRkQXBwSW5mbwkJCQkoRW11QXBwSW5mbyAmbmV3QXBw SW5mbyk7CgkJc3RhdGljIEVycgkJCQlSZW1vdmVDdXJBcHBJbmZvCQkodm9pZCk7CgoJCXN0YXRp YyBFcnIJCQkJU2V0TGFzdEV2dFRyYXAJCQkodWludDE2IGxhc3RFdnRUcmFwKTsKCQlzdGF0aWMg RXJyCQkJCVNldEV2dEdldEV2ZW50Q2FsbGVkCShib29sIHdhc0NhbGxlZCk7CgoJCXN0YXRpYyBF cnIJCQkJU2V0UXVpdEFwcAkJCQkoVUludDE2IGNhcmRObywgTG9jYWxJRCBkYklEKTsKCQlzdGF0 aWMgdm9pZAkJCQlTZXRUaW1lVG9RdWl0CQkJKHZvaWQpOwoKCQlzdGF0aWMgdm9pZAkJCQlNZW1N Z3JMZWFrc1ByZWZzQ2hhbmdlZAkoUHJlZktleVR5cGUsIHZvaWQqKTsKCgkJc3RhdGljIEVycgkJ CQlDb2xsZWN0Q3VycmVudEFwcEluZm8JKGVtdXB0ciBhcHBJbmZvUCwgRW11QXBwSW5mbyAmbmV3 QXBwSW5mbyk7CgoKCQlzdGF0aWMgVUludDMyCQkJT1NWZXJzaW9uCQkJCSh2b2lkKTsKCQlzdGF0 aWMgdm9pZAkJCQlTZXRPU1ZlcnNpb24JCQkoVUludDMyIHZlcnNpb24pOwoJCXN0YXRpYyBVSW50 MzIJCQlPU01ham9yTWlub3JWZXJzaW9uCQkodm9pZCk7CgkJc3RhdGljIFVJbnQzMgkJCU9TTWFq b3JWZXJzaW9uCQkJKHZvaWQpOwoJCXN0YXRpYyBVSW50MzIJCQlPU01pbm9yVmVyc2lvbgkJCSh2 b2lkKTsKCQlzdGF0aWMgdm9pZAkJCQlTZXRTd2l0Y2hBcHAJCQkoVUludDE2IGNhcmRObywgTG9j YWxJRCBkYklEKTsKCQlzdGF0aWMgQm9vbAkJCQlEYXRhYmFzZUluZm9IYXNTdGFja0luZm8odm9p ZCk7CgkJc3RhdGljIEJvb2wJCQkJSGFzV2VsbEJlaGF2ZWRNZW1TZW1hcGhvcmVVc2FnZSAodm9p ZCk7CgoKCQkgCgkJc3RhdGljIEJvb2wJCQkJSGFzRmluZFNob3dSZXN1bHRzQnVnCSh2b2lkKTsK CQlzdGF0aWMgQm9vbAkJCQlIYXNTeXNCaW5hcnlTZWFyY2hCdWcJKHZvaWQpOwoKCQkgCgkJc3Rh dGljIEJvb2wJCQkJSGFzR3JmUHJvY2Vzc1N0cm9rZUJ1Zwkodm9pZCk7CgkJc3RhdGljIEJvb2wJ CQkJSGFzTWVudUhhbmRsZUV2ZW50QnVnCSh2b2lkKTsKCgkJIAoJCXN0YXRpYyBCb29sCQkJCUhh c0JhY2tzcGFjZUNoYXJCdWcJCSh2b2lkKTsKCQlzdGF0aWMgQm9vbAkJCQlIYXNEZWxldGVkU3Rh Y2tCdWcJCSh2b2lkKTsKCQlzdGF0aWMgQm9vbAkJCQlIYXNGaW5kU2F2ZUZpbmRTdHJCdWcJKHZv aWQpOwoJCXN0YXRpYyBCb29sCQkJCUhhc0ZsZERlbGV0ZUJ1ZwkJCSh2b2lkKTsKCQlzdGF0aWMg Qm9vbAkJCQlIYXNGbnREZWZpbmVGb250QnVnCQkodm9pZCk7CgkJc3RhdGljIEJvb2wJCQkJSGFz TmV0UHJ2VGFza01haW5CdWcJKHZvaWQpOwoJCXN0YXRpYyBCb29sCQkJCUhhc05ldFBydlNldHRp bmdTZXRCdWcJKHZvaWQpOwoKCQkgCgkJc3RhdGljIEJvb2wJCQkJSGFzRUNWYWxpZGF0ZUZpZWxk QnVnCSh2b2lkKTsKCgkJIAoJCXN0YXRpYyBCb29sCQkJCUhhc0NvbnZlcnREZXB0aDFUbzJCV0J1 Zyh2b2lkKTsKCgkJIAoJCXN0YXRpYyBCb29sCQkJCUhhc1NlbGVjdEl0ZW1CdWcJCSh2b2lkKTsK CQlzdGF0aWMgQm9vbAkJCQlIYXNTeW5jTm90aWZ5QnVnCQkodm9pZCk7CgoJCSAKCQlzdGF0aWMg Qm9vbAkJCQlIYXNQcnZEcmF3U2xpZGVyQ29udHJvbEJ1Zwkodm9pZCk7CgoKCQlzdGF0aWMgQm9v bAkJCQlHZXRBdXRvQWNjZXB0QmVhbURpYWxvZ3MgKHZvaWQpOwoJCXN0YXRpYyBCb29sCQkJCUF1 dG9BY2NlcHRCZWFtRGlhbG9ncwkoQm9vbCBuZXdTdGF0ZSk7CgkJc3RhdGljIFVJbnQxNgkJCUdl dFJPTUNoYXJFbmNvZGluZwkJKHZvaWQpOwoJCXN0YXRpYyBCb29sCQkJCUV2dEdldEV2ZW50Q2Fs bGVkCQkodm9pZCk7CgkJc3RhdGljIEJvb2wJCQkJSXNJblN5c0JpbmFyeVNlYXJjaAkJKHZvaWQp OwoJCXN0YXRpYyB2b2lkCQkJCUVudGVyU3lzQmluYXJ5U2VhcmNoCSh2b2lkKTsKCQlzdGF0aWMg dm9pZAkJCQlFeGl0U3lzQmluYXJ5U2VhcmNoCQkodm9pZCk7CgkJc3RhdGljIHVpbnQxNgkJCUdl dFF1aXRBcHBDYXJkTm8JCSh2b2lkKTsKCQlzdGF0aWMgTG9jYWxJRAkJCUdldFF1aXRBcHBEYklE CQkJKHZvaWQpOwoJCXN0YXRpYyB2b2lkCQkJCVNldEVuY29kaW5nCQkJCSh1aW50MzIgZW5jb2Rp bmcpOwoKCQlzdGF0aWMgQm9vbAkJCQlJc1BDSW5NZW1NZ3IJCQkodm9pZCk7CgkJc3RhdGljIHZv aWQJCQkJRW50ZXJNZW1NZ3IJCQkJKGNvbnN0IGNoYXIqIGZuTmFtZSk7CgkJc3RhdGljIHZvaWQJ CQkJRXhpdE1lbU1ncgkJCQkoY29uc3QgY2hhciogZm5OYW1lKTsKCQlzdGF0aWMgQm9vbAkJCQlV SUluaXRpYWxpemVkCQkJKHZvaWQpOwoKCQlzdGF0aWMgdm9pZAkJCQlTZXRVSUluaXRpYWxpemVk CQkoQm9vbCB2YWx1ZSA9IHRydWUpOwoJCXN0YXRpYyB2b2lkCQkJCVNldFVJUmVzZXQJCQkJKEJv b2wgdmFsdWUgPSB0cnVlKTsKCQlzdGF0aWMgdm9pZAkJCQlTZXRIZWFwSW5pdGlhbGl6ZWQJCShC b29sIHZhbHVlID0gdHJ1ZSk7CgoJCXN0YXRpYyBCb29sCQkJCVVJUmVzZXQJCQkJCSh2b2lkKTsK CQlzdGF0aWMgQm9vbAkJCQlIZWFwSW5pdGlhbGl6ZWQJCQkodm9pZCk7CgoJCSAKCgkJc3RhdGlj IHVpbnQxNiBHZXROZXh0QXBwQ2FyZE5vICh2b2lkKQoJCXsKCQkJcmV0dXJuIGZnRGF0YS5mTmV4 dEFwcENhcmRObzsKCQl9CgoJCXN0YXRpYyBMb2NhbElEIEdldE5leHRBcHBEYklEICh2b2lkKQoJ CXsKCQkJcmV0dXJuIGZnRGF0YS5mTmV4dEFwcERiSUQ7CgkJfQoKCQlzdGF0aWMgdm9pZCBTZXRO ZXh0QXBwQ2FyZE5vICh1aW50MTYgY2FyZG5vKQoJCXsKCQkJZmdEYXRhLmZOZXh0QXBwQ2FyZE5v ID0gY2FyZG5vOwoJCX0KCgkJc3RhdGljIHZvaWQgU2V0TmV4dEFwcERiSUQgKExvY2FsSUQgaWQp CgkJewoJCQlmZ0RhdGEuZk5leHRBcHBEYklEID0gaWQ7CgkJfQoKCXB1YmxpYzoKCQlzdGF0aWMg RW1QYXRjaFN0YXRlRGF0YQlmZ0RhdGE7Cn07CgoKIyAyNiAiLi8uLi9TcmNTaGFyZWQvTWV0YU1l bW9yeS5jcHAiIDIKCiMgMSAiLi4vU3JjU2hhcmVkL0VtU2Vzc2lvbi5oIiAxCiAKIAoKCgoKCgoK CgoKCgoKCgoKIyAxICIuLi9TcmNTaGFyZWQvRW1UaHJlYWRTYWZlUXVldWUuaCIgMQogCiAKCgoK CgoKCgoKCgoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIEVtVGhyZWFkU2FmZVF1ZXVl CnsKCXB1YmxpYzoKCQkJCQkJCQlFbVRocmVhZFNhZmVRdWV1ZQkJKGludCBtYXhTaXplID0gMCk7 CgkJCQkJCQkJfkVtVGhyZWFkU2FmZVF1ZXVlCQkodm9pZCk7CgoJCXZvaWQJCQkJCVB1dCAJCQkJ CShjb25zdCBUJik7CgkJVAkJCQkJCUdldCAJCQkJCSh2b2lkKTsKCQlUCQkJCQkJUGVlayAJCQkJ CSh2b2lkKTsKCQlpbnQgCQkJCQlHZXRVc2VkCQkJCQkodm9pZCk7CgkJaW50IAkJCQkJR2V0RnJl ZQkJCQkJKHZvaWQpOwoJCUJvb2wJCQkJCVdhaXRGb3JEYXRhQXZhaWxhYmxlCShsb25nIHRpbWVv dXRtcyk7CgoJCXZvaWQJCQkJCUNsZWFyCQkJCQkodm9pZCk7CgkJaW50CQkJCQkJR2V0TWF4U2l6 ZQkJCQkodm9pZCk7CgoJcHJpdmF0ZToKCQlvbW5pX211dGV4CQkJCWZNdXRleDsKCgkJb21uaV9j b25kaXRpb24JCQlmQXZhaWxhYmxlOwoKCQlkZXF1ZTxUPgkJCQlmQ29udGFpbmVyOwoJCWludAkJ CQkJCWZNYXhTaXplOwp9OwoKdHlwZWRlZiBFbVRocmVhZFNhZmVRdWV1ZTx1aW50OD4JRW1CeXRl UXVldWU7CgoKIyAxOSAiLi4vU3JjU2hhcmVkL0VtU2Vzc2lvbi5oIiAyCgoKCgoKCgogCgoKCgoK CgoKCgoKCgoKCgoKCgogCiNwcmFnbWEgbWFyayBFbVN1c3BlbmRDb3VudGVycwogCgogCgoKCgoK CgoKCgpzdHJ1Y3QgRW1TdXNwZW5kQ291bnRlcnMKewoJIAoJIAoJIAoKCWludAlmU3VzcGVuZEJ5 VUlUaHJlYWQJCQk6IDQ7CgoJIAoJIAoKCWludAlmU3VzcGVuZEJ5RGVidWdnZXIJCQk6IDQ7CgoJ IAoJIAoKCWludAlmU3VzcGVuZEJ5RXh0ZXJuYWwJCQk6IDQ7CgoJIAoJIAoJIAoJIAoKCWludAlm U3VzcGVuZEJ5VGltZW91dAkJCTogMTsKCgkgCgkgCgoJaW50CWZTdXNwZW5kQnlTeXNDYWxsCQkJ OiAxOwoKCSAKCSAKCglpbnQJZlN1c3BlbmRCeVN1YnJvdXRpbmVSZXR1cm4JOiAxOwp9OwoKCiAK I3ByYWdtYSBtYXJrIEVtU3VzcGVuZFN0YXRlCiAKCiAKCgoKCgp1bmlvbiBFbVN1c3BlbmRTdGF0 ZQp7CglFbVN1c3BlbmRDb3VudGVycwlmQ291bnRlcnM7Cgl1aW50MzIJCQkJZkFsbENvdW50ZXJz Owp9OwoKCiAKI3ByYWdtYSBtYXJrIEVtU2Vzc2lvblN0YXRlCiAKCiAKCgoKCmVudW0gRW1TZXNz aW9uU3RhdGUKewoJa1J1bm5pbmcsCQkgCglrU3RvcHBlZCwJCSAKCWtTdXNwZW5kZWQsCQkgCglr QmxvY2tlZE9uVUkJIAp9OwoKCiAKI3ByYWdtYSBtYXJrIEVtU3RvcE1ldGhvZAogCgogCgoKCgoK ZW51bSBFbVN0b3BNZXRob2QKewoJa1N0b3BOb25lLAkJIAoKCWtTdG9wTm93LAkJIAoKCWtTdG9w T25DeWNsZSwJIAoJCQkJCSAKCglrU3RvcE9uU3lzQ2FsbAkgCgkJCQkJIAoJCQkJCSAKCQkJCQkg Cn07CgoKIAojcHJhZ21hIG1hcmsgRW1CdXR0b25FdmVudAogCgogCgoKCgoKc3RydWN0IEVtQnV0 dG9uRXZlbnQKewoJRW1CdXR0b25FdmVudCAoU2tpbkVsZW1lbnRUeXBlIGJ1dHRvbiwgQm9vbCBp c0Rvd24pIDoKCQlmQnV0dG9uIChidXR0b24pLAoJCWZCdXR0b25Jc0Rvd24gKGlzRG93bikKCXsK CX0KCglTa2luRWxlbWVudFR5cGUJZkJ1dHRvbjsKCUJvb2wJCQlmQnV0dG9uSXNEb3duOwp9OwoK dHlwZWRlZiBFbVRocmVhZFNhZmVRdWV1ZTxFbUJ1dHRvbkV2ZW50PglFbUJ1dHRvblF1ZXVlOwoK CiAKI3ByYWdtYSBtYXJrIEVtS2V5RXZlbnQKIAoKIAoKCgpzdHJ1Y3QgRW1LZXlFdmVudAp7CglF bUtleUV2ZW50ICh1aW50MTYgY2gpIDoKCQlmS2V5IChjaCksCgkJZlNoaWZ0RG93biAoMCksCgkJ ZkNhcHNMb2NrRG93biAoMCksCgkJZk51bUxvY2tEb3duICgwKSwKCQlmQ29tbWFuZERvd24gKDAp LAoJCWZPcHRpb25Eb3duICgwKSwKCQlmQ29udHJvbERvd24gKDApLAoJCWZBbHREb3duICgwKSwK CQlmV2luZG93c0Rvd24gKDApCgkJe30KCgl1aW50MTYJZktleTsKCUJvb2wJZlNoaWZ0RG93bjsK CUJvb2wJZkNhcHNMb2NrRG93bjsKCUJvb2wJZk51bUxvY2tEb3duOwoJQm9vbAlmQ29tbWFuZERv d247CglCb29sCWZPcHRpb25Eb3duOwoJQm9vbAlmQ29udHJvbERvd247CglCb29sCWZBbHREb3du OwoJQm9vbAlmV2luZG93c0Rvd247Cn07Cgp0eXBlZGVmIEVtVGhyZWFkU2FmZVF1ZXVlPEVtS2V5 RXZlbnQ+CUVtS2V5UXVldWU7CgoKIAojcHJhZ21hIG1hcmsgRW1QZW5FdmVudAogCgogCgoKCgpz dHJ1Y3QgRW1QZW5FdmVudAp7CglFbVBlbkV2ZW50IChjb25zdCBFbVBvaW50JiBwb2ludCwgQm9v bCBpc0Rvd24pIDoKCQlmUGVuUG9pbnQgKHBvaW50KSwKCQlmUGVuSXNEb3duIChpc0Rvd24pCgl7 Cgl9CgoJRW1Qb2ludAlmUGVuUG9pbnQ7CglCb29sCWZQZW5Jc0Rvd247CgoJYm9vbCBvcGVyYXRv cj09KGNvbnN0IEVtUGVuRXZlbnQmIG90aGVyKSBjb25zdAoJewoJCXJldHVybiBmUGVuUG9pbnQg PT0gb3RoZXIuZlBlblBvaW50ICYmCgkJCWZQZW5Jc0Rvd24gPT0gb3RoZXIuZlBlbklzRG93bjsK CX0KfTsKCnR5cGVkZWYgRW1UaHJlYWRTYWZlUXVldWU8RW1QZW5FdmVudD4JRW1QZW5RdWV1ZTsK CgogCiNwcmFnbWEgbWFyayBJbnN0cnVjdGlvbi9EYXRhQnJlYWsKIAoKIAoKCgoKCgoKCgp0eXBl ZGVmIHZvaWQJKCpJbnN0cnVjdGlvbkJyZWFrSW5zdGFsbGVyKQkodm9pZCk7CnR5cGVkZWYgdm9p ZAkoKkluc3RydWN0aW9uQnJlYWtSZW1vdmVyKQkJKHZvaWQpOwp0eXBlZGVmIHZvaWQJKCpJbnN0 cnVjdGlvbkJyZWFrUmVhY2hlcikJCSh2b2lkKTsKCnN0cnVjdCBJbnN0cnVjdGlvbkJyZWFrRnVu Y3MKewoJSW5zdHJ1Y3Rpb25CcmVha0luc3RhbGxlcglmSW5zdGFsbGVyOwoJSW5zdHJ1Y3Rpb25C cmVha1JlbW92ZXIJCWZSZW1vdmVyOwoJSW5zdHJ1Y3Rpb25CcmVha1JlYWNoZXIJCWZSZWFjaGVy Owp9OwoKdHlwZWRlZiB2ZWN0b3I8SW5zdHJ1Y3Rpb25CcmVha0Z1bmNzPglJbnN0cnVjdGlvbkJy ZWFrRnVuY0xpc3Q7CgoKdHlwZWRlZiB2b2lkCSgqRGF0YUJyZWFrSW5zdGFsbGVyKQkodm9pZCk7 CnR5cGVkZWYgdm9pZAkoKkRhdGFCcmVha1JlbW92ZXIpCQkodm9pZCk7CnR5cGVkZWYgdm9pZAko KkRhdGFCcmVha1JlYWNoZXIpCQkoZW11cHRyLCBpbnQgc2l6ZSwgQm9vbCBmb3JSZWFkKTsKCnN0 cnVjdCBEYXRhQnJlYWtGdW5jcwp7CglEYXRhQnJlYWtJbnN0YWxsZXIJCQlmSW5zdGFsbGVyOwoJ RGF0YUJyZWFrUmVtb3ZlcgkJCWZSZW1vdmVyOwoJRGF0YUJyZWFrUmVhY2hlcgkJCWZSZWFjaGVy Owp9OwoKdHlwZWRlZiB2ZWN0b3I8RGF0YUJyZWFrRnVuY3M+CURhdGFCcmVha0Z1bmNMaXN0OwoK CiAKI3ByYWdtYSBtYXJrIEVtU2Vzc2lvbgogCgpjbGFzcyBFbUNQVTsKY2xhc3MgRW1EZWZlcnJl ZEVycjsKY2xhc3MgU2Vzc2lvbkZpbGU7CnN0cnVjdCBDb25maWd1cmF0aW9uOwoKdHlwZWRlZiB2 ZWN0b3I8RW1EZWZlcnJlZEVycio+CUVtRGVmZXJyZWRFcnJMaXN0OwoKY2xhc3MgRW1TZXNzaW9u OwpleHRlcm4gRW1TZXNzaW9uKglnU2Vzc2lvbjsKCmNsYXNzIEVtU2Vzc2lvbgp7CglwdWJsaWM6 CgkJIAoJCSAKCQkgCgoJCQkJCQkJCUVtU2Vzc2lvbiAJCQkodm9pZCk7CgkJCQkgCQkJCX5FbVNl c3Npb24JCQkodm9pZCk7CgoJCSAKCQkgCgkJIAoKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkg CgkJIAoJCSAKCgkJdm9pZAkJCQkJQ3JlYXRlTmV3CQkJKGNvbnN0IENvbmZpZ3VyYXRpb24mKTsK CQl2b2lkCQkJCQlDcmVhdGVPbGQJCQkoY29uc3QgRW1GaWxlUmVmJik7CgkJdm9pZAkJCQkJQ3Jl YXRlQm91bmQJCQkodm9pZCk7CgoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoKCQl2b2lkIAkJCQkJ UmVzZXQJCQkJKEVtUmVzZXRUeXBlKTsKCQl2b2lkIAkJCQkJU2F2ZQkJCQkoU2Vzc2lvbkZpbGUm KTsKCQl2b2lkIAkJCQkJTG9hZAkJCQkoU2Vzc2lvbkZpbGUmKTsKCgkJIAoJCSAKCQkgCgoJCXZv aWQgCQkJCQlTYXZlCQkJCShjb25zdCBFbUZpbGVSZWYmLAoJCQkJCQkJCQkJCQkJIEJvb2wgdXBk YXRlRmlsZVJlZik7CgkJdm9pZCAJCQkJCUxvYWQJCQkJKGNvbnN0IEVtRmlsZVJlZiYpOwoKCQkg CgkJIAoJCSAKCQkgCgkJIAoJCSAKCgkJdm9pZAkJCQkJQ3JlYXRlVGhyZWFkCQkoQm9vbCBzdXNw ZW5kZWQpOwoJCXZvaWQJCQkJCURlc3Ryb3lUaHJlYWQJCSh2b2lkKTsKCgkJIAoJCSAKCQkgCgoJ CUJvb2wJCQkJCVN1c3BlbmRUaHJlYWQJCShFbVN0b3BNZXRob2QgaG93KTsKCQl2b2lkCQkJCQlS ZXN1bWVUaHJlYWQJCSh2b2lkKTsKCgoJCSAKCgkJdm9pZAkJCQkJU2xlZXAJCQkJKHVuc2lnbmVk IGxvbmcgbXNlY3MpOwoKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCgkJQm9vbAkJCQkJSW5DUFVU aHJlYWQJCQkodm9pZCkgY29uc3Q7CgoKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoK CQlFbVNlc3Npb25TdGF0ZQkJCUdldFNlc3Npb25TdGF0ZQkJKHZvaWQpIGNvbnN0OwoJCUVtU3Vz cGVuZFN0YXRlCQkJR2V0U3VzcGVuZFN0YXRlCQkodm9pZCkgY29uc3Q7CgkJdm9pZAkJCQkJU2V0 U3VzcGVuZFN0YXRlCQkoY29uc3QgRW1TdXNwZW5kU3RhdGUmKTsKCgkJIAoJCSAKCQkgCgkJIAoJ CSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkgCgoJCXZvaWQJCQkJCUV4ZWN1dGVJbmNyZW1l bnRhbAkodm9pZCk7CgoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkg CgkJIAoKCQl2b2lkCQkJCQlFeGVjdXRlU3Vicm91dGluZQkodm9pZCk7CgoJCSAKCQkgCgkJIAoJ CSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoKCQlCb29sCQkJCQlFeGVjdXRlU3BlY2lhbAkJKEJvb2wg Y2hlY2tGb3JSZXNldE9ubHkpOwoKCQlCb29sCQkJCQlDaGVja0ZvckJyZWFrCQkodm9pZCk7CgoJ CSAKCQkgCgoJCUVtRGxnSXRlbUlECQkJCUJsb2NrT25EaWFsb2cJCShFbURsZ1RocmVhZEZuIGZu LAoJCQkJCQkJCQkJCQkJIGNvbnN0IHZvaWQqIHBhcmFtZXRlcnMpOwoKCgkJIAoJCSAKCQkgCgkJ IAoJCSAKCgkJdm9pZAkJCQkJVW5ibG9ja0RpYWxvZwkJKHZvaWQpOwoKCgkJIAoJCSAKCQkgCgkJ IAoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkg CgkJIAoJCSAKCgkJdm9pZAkJCQkJUG9zdEJ1dHRvbkV2ZW50CQkoY29uc3QgRW1CdXR0b25FdmVu dCYsIEJvb2wgcG9zdE5vdyA9IGZhbHNlKTsKCQlCb29sCQkJCQlIYXNCdXR0b25FdmVudAkJKHZv aWQpOwoJCUVtQnV0dG9uRXZlbnQJCQlQZWVrQnV0dG9uRXZlbnQJCSh2b2lkKTsKCQlFbUJ1dHRv bkV2ZW50CQkJR2V0QnV0dG9uRXZlbnQJCSh2b2lkKTsKCgkJdm9pZAkJCQkJUG9zdEtleUV2ZW50 CQkoY29uc3QgRW1LZXlFdmVudCYpOwoJCUJvb2wJCQkJCUhhc0tleUV2ZW50CQkJKHZvaWQpOwoJ CUVtS2V5RXZlbnQJCQkJUGVla0tleUV2ZW50CQkodm9pZCk7CgkJRW1LZXlFdmVudAkJCQlHZXRL ZXlFdmVudAkJCSh2b2lkKTsKCgkJdm9pZAkJCQkJUG9zdFBlbkV2ZW50CQkoY29uc3QgRW1QZW5F dmVudCYpOwoJCUJvb2wJCQkJCUhhc1BlbkV2ZW50CQkJKHZvaWQpOwoJCUVtUGVuRXZlbnQJCQkJ UGVla1BlbkV2ZW50CQkodm9pZCk7CgkJRW1QZW5FdmVudAkJCQlHZXRQZW5FdmVudAkJCSh2b2lk KTsKCgkJdm9pZAkJCQkJUmVsZWFzZUJvb3RLZXlzCQkodm9pZCk7CgoJCSAKCQkgCgoJCUNvbmZp Z3VyYXRpb24JCQlHZXRDb25maWd1cmF0aW9uCSh2b2lkKTsKCQlFbUZpbGVSZWYJCQkJR2V0Rmls ZQkJCQkodm9pZCk7CgkJRW1EZXZpY2UJCQkJR2V0RGV2aWNlCQkJKHZvaWQpOwoKCQkgCgkJIAoK CQlCb29sCQkJCQlHZXRCcmVha09uU3lzQ2FsbAkodm9pZCk7CgoJCSAKCQkgCgkJIAoJCSAKCQkg CgoJCUJvb2wJCQkJCUlzTmVzdGVkCQkJKHZvaWQpOwoKCQkgCgkJIAoKCQlCb29sCQkJCQlHZXRO ZWVkUG9zdExvYWQJCSh2b2lkKTsKCQl2b2lkCQkJCQlTZXROZWVkUG9zdExvYWQJCShCb29sKTsK CgkJIAoKCQl2b2lkCQkJCQlTY2hlZHVsZVN1c3BlbmRFeGNlcHRpb24JCQkodm9pZCk7CgkJdm9p ZAkJCQkJU2NoZWR1bGVTdXNwZW5kRXJyb3IJCQkJKHZvaWQpOwoJCXZvaWQJCQkJCVNjaGVkdWxl U3VzcGVuZEV4dGVybmFsCQkJCSh2b2lkKTsKCQl2b2lkCQkJCQlTY2hlZHVsZVN1c3BlbmRUaW1l b3V0CQkJCSh2b2lkKTsKCQl2b2lkCQkJCQlTY2hlZHVsZVN1c3BlbmRTeXNDYWxsCQkJCSh2b2lk KTsKCQl2b2lkCQkJCQlTY2hlZHVsZVN1c3BlbmRTdWJyb3V0aW5lUmV0dXJuCQkodm9pZCk7CgoJ CXZvaWQJCQkJCVNjaGVkdWxlUmVzdW1lRXh0ZXJuYWwJCQkJKHZvaWQpOwoKCQkgCgkJIAoKCQl2 b2lkCQkJCQlTY2hlZHVsZVJlc2V0CQkJCQkJCShFbVJlc2V0VHlwZSk7CgkJdm9pZAkJCQkJU2No ZWR1bGVSZXNldEJhbmtzCQkJCQkJKHZvaWQpOwoJCXZvaWQJCQkJCVNjaGVkdWxlQXV0b1NhdmVT dGF0ZQkJCQkJKHZvaWQpOwoJCXZvaWQJCQkJCVNjaGVkdWxlU2F2ZVJvb3RTdGF0ZQkJCQkJKHZv aWQpOwoJCXZvaWQJCQkJCVNjaGVkdWxlU2F2ZVN1c3BlbmRlZFN0YXRlCQkJCSh2b2lkKTsKCQl2 b2lkCQkJCQlTY2hlZHVsZUxvYWRSb290U3RhdGUJCQkJCSh2b2lkKTsKCQl2b2lkCQkJCQlTY2hl ZHVsZU5leHRHcmVtbGluRnJvbVJvb3RTdGF0ZQkJKHZvaWQpOwoJCXZvaWQJCQkJCVNjaGVkdWxl TmV4dEdyZW1saW5Gcm9tU3VzcGVuZGVkU3RhdGUJKHZvaWQpOwoJCXZvaWQJCQkJCVNjaGVkdWxl TWluaW1pemVMb2FkU3RhdGUJCQkodm9pZCk7CgkJdm9pZAkJCQkJU2NoZWR1bGVEZWZlcnJlZEVy cm9yCQkJCQkoRW1EZWZlcnJlZEVyciopOwoKCQl2b2lkCQkJCQlDbGVhckRlZmVycmVkRXJyb3Jz CQkJCQkJKHZvaWQpOwoKCQkgCgkJIAoJCSAKCQkgCgoJCXZvaWQJCQkJCUFkZEluc3RydWN0aW9u QnJlYWtIYW5kbGVycwkoSW5zdHJ1Y3Rpb25CcmVha0luc3RhbGxlciwKCQkJCQkJCQkJCQkJCQkJ IEluc3RydWN0aW9uQnJlYWtSZW1vdmVyLAoJCQkJCQkJCQkJCQkJCQkgSW5zdHJ1Y3Rpb25CcmVh a1JlYWNoZXIpOwoKCQkgCgkJIAoJCSAKCQkgCgoJCXZvaWQJCQkJCUFkZERhdGFCcmVha0hhbmRs ZXJzCQkoRGF0YUJyZWFrSW5zdGFsbGVyLAoJCQkJCQkJCQkJCQkJCQkgRGF0YUJyZWFrUmVtb3Zl ciwKCQkJCQkJCQkJCQkJCQkJIERhdGFCcmVha1JlYWNoZXIpOwoKCQkgCgoJCXZvaWQJCQkJCUlu c3RhbGxJbnN0cnVjdGlvbkJyZWFrcwkodm9pZCk7CgkJdm9pZAkJCQkJUmVtb3ZlSW5zdHJ1Y3Rp b25CcmVha3MJCSh2b2lkKTsKCQl2b2lkCQkJCQlIYW5kbGVJbnN0cnVjdGlvbkJyZWFrCQkodm9p ZCk7CgoJCXZvaWQJCQkJCUluc3RhbGxEYXRhQnJlYWtzCQkJKHZvaWQpOwoJCXZvaWQJCQkJCVJl bW92ZURhdGFCcmVha3MJCQkodm9pZCk7CgkJdm9pZAkJCQkJSGFuZGxlRGF0YUJyZWFrCQkJCShl bXVwdHIsIGludCBzaXplLCBCb29sIGZvclJlYWQpOwoKCXByaXZhdGU6CgkJIAoJCSAKCQkgCgoJ CXZvaWQJCQkJCUluaXRpYWxpemUJCQkJCShjb25zdCBDb25maWd1cmF0aW9uJik7CgoJCSAKCQkg CgoJCXZvaWQJCQkJCURpc3Bvc2UJCQkJCQkodm9pZCk7CgoKCQkgCgkJIAoJCSAKCgkJc3RhdGlj IHZvaWQJCQkJUnVuU3RhdGljCQkJKHZvaWQqIGFyZyk7CgkJdm9pZAkJCQkJUnVuCQkJCQkodm9p ZCk7CgoKCQl2b2lkCQkJCQlDYWxsQ1BVCQkJCSh2b2lkKTsKCglwcml2YXRlOgoJCWZyaWVuZCBj bGFzcyBFbUNQVTsKCQlmcmllbmQgY2xhc3MgRW1DUFU2OEs7CSAKCglwcml2YXRlOgoJCUNvbmZp Z3VyYXRpb24JCQlmQ29uZmlndXJhdGlvbjsKCQlFbUZpbGVSZWYJCQkJZkZpbGU7CgoJCUVtQ1BV KgkJCQkJZkNQVTsKCgoJCSAKCgkJb21uaV90aHJlYWQqCQkJZlRocmVhZDsKCgkJIAoKCQltdXRh YmxlIG9tbmlfbXV0ZXgJCWZTaGFyZWRMb2NrOwoJCW11dGFibGUgb21uaV9jb25kaXRpb24JZlNo YXJlZENvbmRpdGlvbjsKCgkJb21uaV9tdXRleAkJCQlmU2xlZXBMb2NrOwoJCW9tbmlfY29uZGl0 aW9uCQkJZlNsZWVwQ29uZGl0aW9uOwoKCgkJIAoJCSAKCQkgCgkJIAoKCgkJIAoJCSAKCQkgCgkJ IAoKCQlCb29sCQkJCQlmU3RvcDsKCgoJCSAKCQkgCgkJIAoJCSAKCgkJRW1TdXNwZW5kU3RhdGUJ CQlmU3VzcGVuZFN0YXRlOwoKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCgkJ RW1TZXNzaW9uU3RhdGUJCQlmU3RhdGU7CgoJCSAKCQkgCgkJIAoKCQlCb29sCQkJCQlmQnJlYWtP blN5c0NhbGw7CgkJaW50CQkJCQkJZk5lc3RMZXZlbDsKCgkJQm9vbAkJCQkJZk5lZWRQb3N0TG9h ZDsKCgkJIAoJCSAKCgkJQm9vbAkJCQkJZlJlc2V0OwoJCUJvb2wJCQkJCWZSZXNldEJhbmtzOwoJ CUJvb2wJCQkJCWZIb3JkZUF1dG9TYXZlU3RhdGU7CgkJQm9vbAkJCQkJZkhvcmRlU2F2ZVJvb3RT dGF0ZTsKCQlCb29sCQkJCQlmSG9yZGVTYXZlU3VzcGVuZFN0YXRlOwoJCUJvb2wJCQkJCWZIb3Jk ZUxvYWRSb290U3RhdGU7CgkJQm9vbAkJCQkJZkhvcmRlTmV4dEdyZW1saW5Gcm9tUm9vdFN0YXRl OwoJCUJvb2wJCQkJCWZIb3JkZU5leHRHcmVtbGluRnJvbVN1c3BlbmRTdGF0ZTsKCQlCb29sCQkJ CQlmTWluaW1pemVMb2FkU3RhdGU7CgoJCUVtRGVmZXJyZWRFcnJMaXN0CQlmRGVmZXJyZWRFcnJz OwoKCQlFbVJlc2V0VHlwZQkJCQlmUmVzZXRUeXBlOwoKCXByaXZhdGU6CgkJRW1CdXR0b25RdWV1 ZQkJCWZCdXR0b25RdWV1ZTsKCQlFbUtleVF1ZXVlCQkJCWZLZXlRdWV1ZTsKCQlFbVBlblF1ZXVl CQkJCWZQZW5RdWV1ZTsKCgkJRW1QZW5FdmVudAkJCQlmTGFzdFBlbkV2ZW50OwoJCXVpbnQzMgkJ CQkJZkJvb3RLZXlzOwoKCXByaXZhdGU6CgkJSW5zdHJ1Y3Rpb25CcmVha0Z1bmNMaXN0CWZJbnN0 cnVjdGlvbkJyZWFrRnVuY3M7CgkJRGF0YUJyZWFrRnVuY0xpc3QJCQlmRGF0YUJyZWFrRnVuY3M7 Cn07CgoKIAojcHJhZ21hIG1hcmsgRW1TZXNzaW9uU3RvcHBlcgogCgogCgoKCmNsYXNzIEVtU2Vz c2lvblN0b3BwZXIKewoJcHVibGljOgoJCQkJCQkJCUVtU2Vzc2lvblN0b3BwZXIJKEVtU2Vzc2lv biosIEVtU3RvcE1ldGhvZCBob3cpOwoJCQkJCQkJCX5FbVNlc3Npb25TdG9wcGVyIAkodm9pZCk7 CgoJCUJvb2wJCQkJCVN0b3BwZWQJCQkJKHZvaWQpOwoJCUJvb2wJCQkJCUNhbkNhbGwJCQkJKHZv aWQpOwoKCXByaXZhdGU6CgkJRW1TZXNzaW9uKgkJCQlmU2Vzc2lvbjsKCQlpbnQJCQkJCQlmSG93 OwoJCUJvb2wJCQkJCWZTdG9wcGVkOwp9OwoKCiAKCmlubGluZSBCb29sIEVtU2Vzc2lvbjo6SXNO ZXN0ZWQgKHZvaWQpCnsKCXJldHVybiBmTmVzdExldmVsID4gMDsKfQoKCiMgMjcgIi4vLi4vU3Jj U2hhcmVkL01ldGFNZW1vcnkuY3BwIiAyCgoKCiMgMSAiLi4vU3JjU2hhcmVkL1JPTVN0dWJzLmgi IDEKIAogCgoKCgoKCgoKCgoKCgoKdm9pZCBDbGlwYm9hcmRBZGRJdGVtIChjb25zdCBDbGlwYm9h cmRGb3JtYXRUeXBlIGZvcm1hdCwgY29uc3Qgdm9pZCogcHRyLCBVSW50MTYgbGVuZ3RoKTsKTWVt SGFuZGxlIENsaXBib2FyZEdldEl0ZW0gKGNvbnN0IENsaXBib2FyZEZvcm1hdFR5cGUgZm9ybWF0 LCBVSW50MTYqIGxlbmd0aCk7Cgpjb25zdCBDaGFyKiBDdGxHZXRMYWJlbCAoY29uc3QgQ29udHJv bFR5cGUgKmNvbnRyb2xQKTsKCkVyciBEbGtEaXNwYXRjaFJlcXVlc3QgKERsa1NlcnZlclNlc3Np b25QdHIgc2Vzc1ApOwpFcnIgRGxrR2V0U3luY0luZm8gKFVJbnQzMiogc3VjY1N5bmNEYXRlUCwg VUludDMyKiBsYXN0U3luY0RhdGVQLAoJCQlEbGtTeW5jU3RhdGVUeXBlKiBzeW5jU3RhdGVQLCBD aGFyKiBuYW1lQnVmUCwKCQkJQ2hhciogbG9nQnVmUCwgSW50MzIqIGxvZ0xlblApOwoKRXJyIERt Q2xvc2VEYXRhYmFzZSAoRG1PcGVuUmVmIGRiUik7CkVyciBEbUNyZWF0ZURhdGFiYXNlIChVSW50 MTYgY2FyZE5vLCBjb25zdCBDaGFyICogY29uc3QgbmFtZVAsIAoJCQkJCVVJbnQzMiBjcmVhdG9y LCBVSW50MzIgdHlwZSwgQm9vbGVhbiByZXNEQik7CkVyciBEbURhdGFiYXNlSW5mbyAoVUludDE2 IGNhcmRObywgTG9jYWxJRAlkYklELCBDaGFyKiBuYW1lUCwKCQkJCQlVSW50MTYqIGF0dHJpYnV0 ZXNQLCBVSW50MTYqIHZlcnNpb25QLCBVSW50MzIqIGNyRGF0ZVAsCgkJCQkJVUludDMyKiBtb2RE YXRlUCwgVUludDMyKiBiY2tVcERhdGVQLAoJCQkJCVVJbnQzMiogbW9kTnVtUCwgTG9jYWxJRCog YXBwSW5mb0lEUCwKCQkJCQlMb2NhbElEKiBzb3J0SW5mb0lEUCwgVUludDMyKiB0eXBlUCwKCQkJ CQlVSW50MzIqIGNyZWF0b3JQKTsKRXJyIERtRGVsZXRlRGF0YWJhc2UgKFVJbnQxNiBjYXJkTm8s IExvY2FsSUQgZGJJRCk7CkxvY2FsSUQgRG1GaW5kRGF0YWJhc2UgKFVJbnQxNiBjYXJkTm8sIGNv bnN0IENoYXIqIG5hbWVQKTsKTWVtSGFuZGxlIERtR2V0MVJlc291cmNlIChEbVJlc1R5cGUgdHlw ZSwgRG1SZXNJRCBpZCk7CkxvY2FsSUQgRG1HZXREYXRhYmFzZSAoVUludDE2IGNhcmRObywgVUlu dDE2IGluZGV4KTsKRXJyIERtR2V0TGFzdEVyciAodm9pZCk7CkVycglEbUdldE5leHREYXRhYmFz ZUJ5VHlwZUNyZWF0b3IgKEJvb2xlYW4gbmV3U2VhcmNoLCBEbVNlYXJjaFN0YXRlUHRyIHN0YXRl SW5mb1AsCgkJCSAJCVVJbnQzMiB0eXBlLCBVSW50MzIgY3JlYXRvciwgQm9vbGVhbiBvbmx5TGF0 ZXN0VmVycywgCgkJCSAJCVVJbnQxNiogY2FyZE5vUCwgTG9jYWxJRCogZGJJRFApOwpNZW1IYW5k bGUgRG1HZXRSZXNvdXJjZSAoRG1SZXNUeXBlIHR5cGUsIERtUmVzSUQgaWQpOwpNZW1IYW5kbGUg RG1HZXRSZXNvdXJjZUluZGV4IChEbU9wZW5SZWYgZGJQLCBVSW50MTYgaW5kZXgpOwpNZW1IYW5k bGUgRG1OZXdIYW5kbGUgKERtT3BlblJlZiBkYlIsIFVJbnQzMiBzaXplKTsKTWVtSGFuZGxlIERt TmV3UmVjb3JkIChEbU9wZW5SZWYgZGJSLCBVSW50MTYqIGF0UCwgVUludDMyIHNpemUpOwpNZW1I YW5kbGUgRG1OZXdSZXNvdXJjZSAoRG1PcGVuUmVmIGRiUiwgRG1SZXNUeXBlIHJlc1R5cGUsIERt UmVzSUQgcmVzSUQsIFVJbnQzMiBzaXplKTsKRG1PcGVuUmVmIERtTmV4dE9wZW5EYXRhYmFzZShE bU9wZW5SZWYgY3VycmVudFApOwpVSW50MTYgRG1OdW1EYXRhYmFzZXMgKFVJbnQxNiBjYXJkTm8p OwpVSW50MTYgRG1OdW1SZWNvcmRzIChEbU9wZW5SZWYgZGJQKTsKVUludDE2IERtTnVtUmVzb3Vy Y2VzIChEbU9wZW5SZWYgZGJQKTsKRG1PcGVuUmVmIERtT3BlbkRhdGFiYXNlIChVSW50MTYgY2Fy ZE5vLCBMb2NhbElEIGRiSUQsIFVJbnQxNiBtb2RlKTsKRXJyIERtT3BlbkRhdGFiYXNlSW5mbyAo RG1PcGVuUmVmIGRiUCwgTG9jYWxJRCogZGJJRFAsIAoJCQkJCVVJbnQxNiogb3BlbkNvdW50UCwg VUludDE2KiBtb2RlUCwgVUludDE2KiBjYXJkTm9QLAoJCQkJCUJvb2xlYW4qIHJlc0RCUCk7CkVy ciBEbVJlY29yZEluZm8gKERtT3BlblJlZiBkYlAsIFVJbnQxNiBpbmRleCwKCQkJCQlVSW50MTYq IGF0dHJQLCBVSW50MzIqIHVuaXF1ZUlEUCwgTG9jYWxJRCogY2h1bmtJRFApOwpFcnIgRG1SZWxl YXNlUmVjb3JkIChEbU9wZW5SZWYgZGJSLCBVSW50MTYgaW5kZXgsIEJvb2xlYW4gZGlydHkpOwpF cnIgRG1SZWxlYXNlUmVzb3VyY2UgKE1lbUhhbmRsZSByZXNvdXJjZUgpOwpFcnIgRG1SZXNvdXJj ZUluZm8gKERtT3BlblJlZiBkYlAsIFVJbnQxNiBpbmRleCwKCQkJCQlEbVJlc1R5cGUqIHJlc1R5 cGVQLCBEbVJlc0lEKiByZXNJRFAsICAKCQkJCQlMb2NhbElEKiBjaHVua0xvY2FsSURQKTsKTWVt SGFuZGxlIERtUXVlcnlSZWNvcmQgKERtT3BlblJlZiBkYlAsIFVJbnQxNiBpbmRleCk7CkVyciBE bVNldERhdGFiYXNlSW5mbyAoVUludDE2IGNhcmRObywgTG9jYWxJRCBkYklELCBjb25zdCBDaGFy KiBuYW1lUCwKCQkJCQlVSW50MTYqIGF0dHJpYnV0ZXNQLCBVSW50MTYqIHZlcnNpb25QLCBVSW50 MzIqIGNyRGF0ZVAsCgkJCQkJVUludDMyKiBtb2REYXRlUCwgVUludDMyKiBiY2tVcERhdGVQLAoJ CQkJCVVJbnQzMiogbW9kTnVtUCwgTG9jYWxJRCogYXBwSW5mb0lEUCwKCQkJCQlMb2NhbElEKiBz b3J0SW5mb0lEUCwgVUludDMyKiB0eXBlUCwKCQkJCQlVSW50MzIqIGNyZWF0b3JQKTsKRXJyIERt U2V0UmVjb3JkSW5mbyAoRG1PcGVuUmVmIGRiUiwgVUludDE2IGluZGV4LCBVSW50MTYqIGF0dHJQ LCBVSW50MzIqIHVuaXF1ZUlEUCk7CkVyciBEbVdyaXRlIChNZW1QdHIgcmVjb3JkUCwgVUludDMy IG9mZnNldCwgY29uc3Qgdm9pZCAqIGNvbnN0IHNyY1AsIFVJbnQzMiBieXRlcyk7Cgp2b2lkIEV2 dEFkZEV2ZW50VG9RdWV1ZSAoRXZlbnRUeXBlKiBldmVudCk7CkVyciBFdnRFbnF1ZXVlS2V5IChV SW50MTYgYXNjaWksIFVJbnQxNiBrZXljb2RlLCBVSW50MTYgbW9kaWZpZXJzKTsKRXJyIEV2dEVu cXVldWVQZW5Qb2ludCAoUG9pbnRUeXBlKiBwdFApOwpjb25zdCBQZW5CdG5JbmZvVHlwZSoJRXZ0 R2V0UGVuQnRuTGlzdChVSW50MTYqIG51bUJ1dHRvbnMpOwpFcnIgRXZ0UmVzZXRBdXRvT2ZmVGlt ZXIgKHZvaWQpOwpFcnIgRXZ0V2FrZXVwICh2b2lkKTsKCkVyciBFeGdMaWJDb250cm9sKFVJbnQx NiBsaWJSZWZOdW0sIFVJbnQxNiBvcCwgdm9pZCAqdmFsdWVQLCBVSW50MTYgKnZhbHVlTGVuUCk7 Cgp2b2lkIEZsZEdldEF0dHJpYnV0ZXMgKGNvbnN0IEZpZWxkVHlwZSogZmxkLCBjb25zdCBGaWVs ZEF0dHJQdHIgYXR0clApOwpVSW50MTYgRmxkR2V0SW5zUHRQb3NpdGlvbiAoY29uc3QgRmllbGRU eXBlKiBmbGQpOwpVSW50MTYgRmxkR2V0TWF4Q2hhcnMgKGNvbnN0IEZpZWxkVHlwZSogZmxkKTsK VUludDE2IEZsZEdldFRleHRMZW5ndGggKGNvbnN0IEZpZWxkVHlwZSogZmxkKTsKQ2hhciogRmxk R2V0VGV4dFB0ciAoRmllbGRUeXBlKiBmbGRQKTsKCkludDE2IEZudExpbmVIZWlnaHQgKHZvaWQp OwpVSW50OCBGbnRTZXRGb250IChVSW50OCBmb250SWQpOwoKRm9ybVR5cGUqIEZybUdldEFjdGl2 ZUZvcm0gKHZvaWQpOwpVSW50MTYgRnJtR2V0Rm9jdXMgKGNvbnN0IEZvcm1UeXBlKiBmcm0pOwpV SW50MTYgRnJtR2V0Rm9ybUlkIChjb25zdCBGb3JtVHlwZSogZnJtKTsKVUludDE2IEZybUdldE51 bWJlck9mT2JqZWN0cyAoY29uc3QgRm9ybVR5cGUqIGZybSk7CnZvaWQgRnJtR2V0T2JqZWN0Qm91 bmRzIChjb25zdCBGb3JtVHlwZSogZnJtLCBjb25zdCBVSW50MTYgcE9iakluZGV4LCBjb25zdCBS ZWN0YW5nbGVQdHIgcik7ClVJbnQxNiBGcm1HZXRPYmplY3RJZCAoY29uc3QgRm9ybVR5cGUqIGZy bSwgY29uc3QgVUludDE2IG9iakluZGV4KTsKVUludDE2IEZybUdldE9iamVjdEluZGV4IChjb25z dCBGb3JtVHlwZSogZm9ybVAsIFVJbnQxNiBvYmpJRCk7Ck1lbVB0ciBGcm1HZXRPYmplY3RQdHIg KGNvbnN0IEZvcm1UeXBlKiBmcm0sIGNvbnN0IFVJbnQxNiBvYmpJbmRleCk7CkZvcm1PYmplY3RL aW5kIEZybUdldE9iamVjdFR5cGUgKGNvbnN0IEZvcm1UeXBlKiBmcm0sIGNvbnN0IFVJbnQxNiBv YmpJbmRleCk7CmNvbnN0IENoYXIqIEZybUdldFRpdGxlIChjb25zdCBGb3JtVHlwZSogZnJtKTsK V2luSGFuZGxlIEZybUdldFdpbmRvd0hhbmRsZSAoY29uc3QgRm9ybVR5cGUqIGZybSk7CgpFcnIg RlNDdXN0b21Db250cm9sKFVJbnQxNiBmc0xpYlJlZk51bSwgVUludDMyIGFwaUNyZWF0b3IsIFVJ bnQxNiBhcGlTZWxlY3RvciwgCgkJCQkJdm9pZCAqdmFsdWVQLCBVSW50MTYgKnZhbHVlTGVuUCk7 CgpFcnIgRnRyR2V0IChVSW50MzIgY3JlYXRvciwgVUludDE2IGZlYXR1cmVOdW0sIFVJbnQzMiog dmFsdWVQKTsKRXJyIEZ0clNldCAoVUludDMyIGNyZWF0b3IsIFVJbnQxNiBmZWF0dXJlTnVtLCBV SW50MzIgbmV3VmFsdWUpOwpFcnIJRnRyVW5yZWdpc3RlciAoVUludDMyIGNyZWF0b3IsIFVJbnQx NiBmZWF0dXJlTnVtKTsKCkJvb2xlYW4gSW50bFNldFN0cmljdENoZWNrcyAoQm9vbGVhbiBpU3Ry aWN0Q2hlY2tzKTsKClVJbnQzMiBLZXlIYW5kbGVJbnRlcnJ1cHQoQm9vbGVhbiBwZXJpb2RpYywg VUludDMyIHN0YXR1cyk7CgpJbnQxNiBMc3RHZXROdW1iZXJPZkl0ZW1zIChjb25zdCBMaXN0VHlw ZSogbHN0KTsKSW50MTYgTHN0R2V0U2VsZWN0aW9uIChjb25zdCBMaXN0VHlwZSogbHN0KTsKQ2hh ciAqIExzdEdldFNlbGVjdGlvblRleHQgKGNvbnN0IExpc3RUeXBlICpsaXN0UCwgSW50MTYgaXRl bU51bSk7CgpFcnIgTWVtQ2h1bmtGcmVlIChNZW1QdHIgY2h1bmtEYXRhUCk7Ck1lbVB0ciBNZW1I YW5kbGVMb2NrIChNZW1IYW5kbGUgaCk7ClVJbnQzMiBNZW1IYW5kbGVTaXplIChNZW1IYW5kbGUg aCk7CkxvY2FsSUQgTWVtSGFuZGxlVG9Mb2NhbElEIChNZW1IYW5kbGUgaCk7CkVyciBNZW1IYW5k bGVVbmxvY2sgKE1lbUhhbmRsZSBoKTsKVUludDE2IE1lbUhlYXBJRCAoVUludDE2IGNhcmRObywg VUludDE2IGhlYXBJbmRleCk7Ck1lbVB0ciBNZW1IZWFwUHRyIChVSW50MTYgaGVhcElEKTsKTG9j YWxJREtpbmQgTWVtTG9jYWxJREtpbmQgKExvY2FsSUQgbG9jYWwpOwpNZW1QdHIgTWVtTG9jYWxJ RFRvR2xvYmFsIChMb2NhbElEIGxvY2FsLCBVSW50MTYgY2FyZE5vKTsKVUludDE2IE1lbU51bUNh cmRzICh2b2lkKTsKVUludDE2IE1lbU51bUhlYXBzIChVSW50MTYgY2FyZE5vKTsKRXJyIE1lbU5W UGFyYW1zIChCb29sZWFuIHNldCwgU3lzTlZQYXJhbXNQdHIgcGFyYW1zUCk7Ck1lbVB0ciBNZW1Q dHJOZXcgKFVJbnQzMiBzaXplKTsKRXJyIE1lbVB0clNldE93bmVyIChNZW1QdHIgcCwgVUludDE2 IG93bmVyKTsKVUludDMyIE1lbVB0clNpemUgKE1lbVB0ciBwKTsKRXJyIE1lbVB0clVubG9jayAo TWVtUHRyIHApOwoKRXJyIE5ldExpYkNvbmZpZ01ha2VBY3RpdmUgKFVJbnQxNiByZWZOdW0sIFVJ bnQxNiBjb25maWdJbmRleCk7CgpFcnIgUGVuQ2FsaWJyYXRlIChQb2ludFR5cGUqIGRpZ1RvcExl ZnRQLCBQb2ludFR5cGUqIGRpZ0JvdFJpZ2h0UCwKCQkJCQlQb2ludFR5cGUqIHNjclRvcExlZnRQ LCBQb2ludFR5cGUqIHNjckJvdFJpZ2h0UCk7CkVycgkgUGVuUmF3VG9TY3JlZW4oUG9pbnRUeXBl KiBwZW5QKTsKRXJyIFBlblNjcmVlblRvUmF3IChQb2ludFR5cGUqIHBlblApOwoKRG1PcGVuUmVm IFByZWZPcGVuUHJlZmVyZW5jZURCVjEwICh2b2lkKTsKRG1PcGVuUmVmIFByZWZPcGVuUHJlZmVy ZW5jZURCIChCb29sZWFuIHNhdmVkKTsKdm9pZCBQcmVmU2V0UHJlZmVyZW5jZSAoU3lzdGVtUHJl ZmVyZW5jZXNDaG9pY2UgY2hvaWNlLCBVSW50MzIgdmFsdWUpOwoKRXJyCVN5c0N1ckFwcERhdGFi YXNlIChVSW50MTYqIGNhcmROb1AsIExvY2FsSUQqIGRiSURQKTsKRXJyIFN5c0tlcm5lbEluZm8g KE1lbVB0ciBwKTsKRXJyIFN5c0xpYkZpbmQgKGNvbnN0IENoYXIgKm5hbWVQLCBVSW50MTYgKnJl Zk51bVApOwpFcnIgU3lzTGliTG9hZCAoVUludDMyIGxpYlR5cGUsIFVJbnQzMiBsaWJDcmVhdG9y LCBVSW50MTYgKnJlZk51bVApOwpTeXNMaWJUYmxFbnRyeVB0ciBTeXNMaWJUYmxFbnRyeSAoVUlu dDE2IHJlZk51bSk7ClVJbnQxNiBTeXNTZXRBdXRvT2ZmVGltZSAoVUludDE2IHNlY29uZHMpOwpF cnIgU3lzVUlBcHBTd2l0Y2ggKFVJbnQxNiBjYXJkTm8sIExvY2FsSUQgZGJJRCwgVUludDE2IGNt ZCwgTWVtUHRyIGNtZFBCUCk7CgpDb29yZCBUYmxHZXRDb2x1bW5TcGFjaW5nIChjb25zdCBUYWJs ZVR5cGUqIHRhYmxlUCwgSW50MTYgY29sdW1uKTsKQ29vcmQgVGJsR2V0Q29sdW1uV2lkdGggKGNv bnN0IFRhYmxlVHlwZSogdGFibGVQLCBJbnQxNiBjb2x1bW4pOwpGaWVsZFB0ciBUYmxHZXRDdXJy ZW50RmllbGQgKGNvbnN0IFRhYmxlVHlwZSogdGFibGUpOwpCb29sZWFuIFRibEdldFNlbGVjdGlv biAoY29uc3QgVGFibGVUeXBlKiB0YWJsZVAsIEludDE2KiByb3dQLCBJbnQxNiogY29sdW1uUCk7 CkNvb3JkIFRibEdldFJvd0hlaWdodCAoY29uc3QgVGFibGVUeXBlKiB0YWJsZVAsIEludDE2IHJv dyk7CgpVSW50OCBUeHRCeXRlQXR0cihVSW50OCBpbkJ5dGUpOwpVSW50MTYgVHh0Q2hhckJvdW5k cyAoY29uc3QgQ2hhciogaW5UZXh0LCBVSW50MzIgaW5PZmZzZXQsIFVJbnQzMiogb3V0U3RhcnQs IFVJbnQzMiogb3V0RW5kKTsKVUludDE2IFR4dEdldE5leHRDaGFyIChjb25zdCBDaGFyKiBpblRl eHQsIFVJbnQzMiBpbk9mZnNldCwgV0NoYXIqIG91dENoYXIpOwoKZXh0ZXJuIHZvaWQgV2luRGlz cGxheVRvV2luZG93UHQgKEludDE2KiBleHRlbnRYLCBJbnQxNiogZXh0ZW50WSk7CldpbkhhbmRs ZSBXaW5HZXRBY3RpdmVXaW5kb3cgKHZvaWQpOwp2b2lkIFdpbkdldERpc3BsYXlFeHRlbnQgKElu dDE2KiBleHRlbnRYLCBJbnQxNiogZXh0ZW50WSk7CldpbkhhbmRsZSBXaW5HZXRGaXJzdFdpbmRv dyAodm9pZCk7CnZvaWQgV2luR2V0V2luZG93Qm91bmRzIChSZWN0YW5nbGVQdHIgcik7CnZvaWQg V2luUG9wRHJhd1N0YXRlICh2b2lkKTsKV2luSGFuZGxlIFdpblNldERyYXdXaW5kb3cgKFdpbkhh bmRsZSB3aW5IYW5kbGUpOwp2b2lkIFdpbldpbmRvd1RvRGlzcGxheVB0IChJbnQxNiogZXh0ZW50 WCwgSW50MTYqIGV4dGVudFkpOwoKCgoKIAoKCQkJCQkKIAoKCQkJCQkKIAoKCQkJCQkKIAoKCgoK CiMgMzAgIi4vLi4vU3JjU2hhcmVkL01ldGFNZW1vcnkuY3BwIiAyCgojIDEgIi4uL1NyY1NoYXJl ZC9TZXNzaW9uRmlsZS5oIiAxCiAKIAoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiLi4vU3JjU2hhcmVk L1BsYXRmb3JtLmgiIDEKIAogCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMiCnsKCgoJIAoKdm9p ZCoJUGxhdGZvcm1fQWxsb2NhdGVNZW1vcnkgKHNpemVfdCBzaXplKTsKdm9pZCoJUGxhdGZvcm1f UmVhbGxvY01lbW9yeQkodm9pZCogcCwgc2l6ZV90IHNpemUpOwp2b2lkCVBsYXRmb3JtX0Rpc3Bv c2VNZW1vcnkJKHZvaWQqIHApOwoKCn0JIAoKCSAKCgoKCgpjbGFzcyBDaHVua0ZpbGU7CmNsYXNz IENTb2NrZXQ7CmNsYXNzIEVtRmlsZVJlZjsKY2xhc3MgRW1SZWN0OwpjbGFzcyBTZXNzaW9uRmls ZTsKY2xhc3MgU3RNZW1vcnk7CgogCgppbnQgX3N0cmljbXAoY29uc3QgY2hhciAqczEsIGNvbnN0 IGNoYXIgKnMyKTsKaW50IF9zdHJuaWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIs IGludCBuKTsKY2hhciogX3N0cmR1cCAoY29uc3QgY2hhciogcyk7CmNoYXIqIF9zdHJsd3IgKGNo YXIqIHMpOwoKIAoKY2xhc3MgUGxhdGZvcm0KewoJcHVibGljOgoKCQlzdGF0aWMgdm9pZCAJCQlJ bml0aWFsaXplCQkJCSh2b2lkKTsKCQlzdGF0aWMgdm9pZCAJCQlSZXNldAkJCQkJKHZvaWQpOwoJ CXN0YXRpYyB2b2lkIAkJCVNhdmUJCQkJCShTZXNzaW9uRmlsZSYpOwoJCXN0YXRpYyB2b2lkIAkJ CUxvYWQJCQkJCShTZXNzaW9uRmlsZSYpOwoJCXN0YXRpYyB2b2lkIAkJCURpc3Bvc2UgCQkJCSh2 b2lkKTsKCgkgCgoJCXN0YXRpYyBzdHJpbmcJCQlHZXRTdHJpbmcJCQkJKFN0ckNvZGUgaWQpOwoJ CXN0YXRpYyBpbnQJCQkJR2V0SURGb3JFcnJvcgkJCShFcnJDb2RlIGVycm9yKTsKCQlzdGF0aWMg aW50CQkJCUdldElERm9yUmVjb3ZlcnkJCShFcnJDb2RlIGVycm9yKTsKCQoJCXN0YXRpYyBzdHJp bmcJCQlHZXRTaG9ydFZlcnNpb25TdHJpbmcJKHZvaWQpOwoKCSAKCgkJc3RhdGljIHZvaWQJCQkJ Q29weVRvQ2xpcGJvYXJkCQkJKGNvbnN0IEJ5dGVMaXN0JiBwYWxtQ2hhcnMsCgkJCQkJCQkJCQkJ CQkJIGNvbnN0IEJ5dGVMaXN0JiBob3N0Q2hhcnMpOwoJCXN0YXRpYyB2b2lkCQkJCUNvcHlGcm9t Q2xpcGJvYXJkCQkoQnl0ZUxpc3QmIHBhbG1DaGFycywKCQkJCQkJCQkJCQkJCQkgQnl0ZUxpc3Qm IGhvc3RDaGFycyk7CgoJCXN0YXRpYyB1aW50MTYJCQlSZW1hcEhvc3RDaGFyCQkJKHVpbnQ4IGhv c3RFbmNvZGluZywgdWludDggZGV2aWNlRW5jb2RpbmcsIHVpbnQxNiBob3N0Q2hhcik7CgoJCXN0 YXRpYyB2b2lkCQkJCVJlbWFwSG9zdFRvUGFsbUNoYXJzCShjb25zdCBCeXRlTGlzdCYgaG9zdENo YXJzLAoJCQkJCQkJCQkJCQkJCSBCeXRlTGlzdCYgcGFsbUNoYXJzKTsKCQlzdGF0aWMgdm9pZAkJ CQlSZW1hcFBhbG1Ub0hvc3RDaGFycwkoY29uc3QgQnl0ZUxpc3QmIHBhbG1DaGFycywKCQkJCQkJ CQkJCQkJCQkgQnl0ZUxpc3QmIGhvc3RDaGFycyk7CgoJIAoKCQlzdGF0aWMgdWludDMyCQkJR2V0 TWlsbGlzZWNvbmRzIAkJKHZvaWQpOwoKCSAKCgkJc3RhdGljIENTb2NrZXQqIAkJQ3JlYXRlRGVi dWdnZXJTb2NrZXQJKHZvaWQpOwoJCXN0YXRpYyB2b2lkIAkJCUV4aXREZWJ1Z2dlcgkJCSh2b2lk KTsKCgkgCgoJCXN0YXRpYyB2b2lkIAkJCVZpZXdEcmF3TGluZQkJCShpbnQgeFN0YXJ0LCBpbnQg eVN0YXJ0LCBpbnQgeEVuZCwgaW50IHlFbmQpOwoJCXN0YXRpYyB2b2lkIAkJCVZpZXdEcmF3UGl4 ZWwJCQkoaW50IHhQb3MsIGludCB5UG9zKTsKCgkgCgoJCXN0YXRpYyBDYWxsUk9NVHlwZQkJU25k RG9DbWQJCQkJKFNuZENvbW1hbmRUeXBlJik7CgkJc3RhdGljIHZvaWQJCQkJU3RvcFNvdW5kCQkJ CSh2b2lkKTsKCQlzdGF0aWMgdm9pZAkJCQlCZWVwCQkJCQkodm9pZCk7CgoJIAoJCgkJc3RhdGlj IEJvb2wJCQkJUGluVG9TY3JlZW4JCQkJKEVtUmVjdCYpOwoKCQlzdGF0aWMgdm9pZCAJCQlUb0hv c3RFT0wJCQkJKFN0TWVtb3J5JiBkZXN0LCBsb25nJiBkZXN0TGVuLAoJCQkJCQkJCQkJCQkJCSBj b25zdCBjaGFyKiBzcmMsIGxvbmcgc3JjTGVuKTsKCgoJCXN0YXRpYyBCb29sIAkJCVJlYWRST01G aWxlUmVmZXJlbmNlCShDaHVua0ZpbGUmIGRvY0ZpbGUsCgkJCQkJCQkJCQkJCQkJIEVtRmlsZVJl ZiYgZik7CgkJc3RhdGljIHZvaWQgCQkJV3JpdGVST01GaWxlUmVmZXJlbmNlCShDaHVua0ZpbGUm IGRvY0ZpbGUsCgkJCQkJCQkJCQkJCQkJIGNvbnN0IEVtRmlsZVJlZiYgZik7CgoJCXN0YXRpYyB2 b2lkIAkJCURlbGF5CQkJCQkodm9pZCk7CgkJc3RhdGljIHZvaWQgCQkJQ3ljbGVTbG93bHkJCQkJ KHZvaWQpOwoKCQlzdGF0aWMgdm9pZCoJCQlSZWFsQWxsb2NhdGVNZW1vcnkJIAkoc2l6ZV90IHNp emUsIEJvb2wgY2xlYXIsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKTsKCQlzdGF0aWMgdm9p ZCoJCQlSZWFsUmVhbGxvY01lbW9yeQkJKHZvaWQqIHAsIHNpemVfdCBzaXplLCBjb25zdCBjaGFy KiBmaWxlLCBpbnQgbGluZSk7CgkJdGVtcGxhdGUgPGNsYXNzIFQ+CgkJc3RhdGljIHZvaWQgCQkJ RGlzcG9zZU1lbW9yeQkJCShUKiYgcCkKCQkJCQkJCQl7CgkJCQkJCQkJCSAKCQkJCQkJCQkJIAoJ CQkJCQkJCQkgCgkJCQkJCQkJCSAKCgkJCQkJCQkJCWlmIChwKQoJCQkJCQkJCQl7CgkJCQkJCQkJ CQlSZWFsRGlzcG9zZU1lbW9yeSAoKHZvaWQqKSBwKTsKCQkJCQkJCQkJCXAgPSBfX251bGwgOwoJ CQkJCQkJCQl9CgkJCQkJCQkJfQoJCXN0YXRpYyB2b2lkIAkJCVJlYWxEaXNwb3NlTWVtb3J5CQko dm9pZCogcCk7CgoJCQkgCgkJCSAKCQl0ZW1wbGF0ZSA8Y2xhc3MgVD4KCQlzdGF0aWMgdm9pZCAJ CQlEZWxldGVNZW1vcnkJCQkoVComIHApIHsgRGlzcG9zZU1lbW9yeShwKTsgfQoKCQl0ZW1wbGF0 ZSA8Y2xhc3MgVD4KCQlzdGF0aWMgdm9pZCAJCQlGcmVlTWVtb3J5CQkJCShUKiYgcCkgeyBEaXNw b3NlTWVtb3J5KHApOyB9CgoJCXN0YXRpYyBCb29sCQkJCUZvcmNlU3RhcnR1cFNjcmVlbgkJKHZv aWQpOwoJCXN0YXRpYyBCb29sIAkJCVN0b3BPblJlc2V0S2V5RG93bgkJKHZvaWQpOwoKCSAKCSAK CSAKCSAKCSAKCSAKCSAKCSAKCSAKCSAKCSAKCgkJc3RhdGljIEJvb2wJCQkJQ29sbGVjdE9wdGlv bnMJCQkoaW50IGFyZ2MsIGNoYXIqKiBhcmd2LCBpbnQmIGksIGludCAoKmNiKShpbnQsIGNoYXIq KiwgaW50JikpOwoJCXN0YXRpYyB2b2lkCQkJCVByaW50SGVscAkJCQkodm9pZCk7CgoJCXN0YXRp YyB2b2lkIAkJCURlYnVnZ2VyCQkJCShjb25zdCBjaGFyKiA9IF9fbnVsbCApOwp9OwoKCgoKCgoK CgoKCiMgMTk0ICIuLi9TcmNTaGFyZWQvUGxhdGZvcm0uaCIKCgoKCgoKCgoKCgoKCiMgMSAiL3Vz ci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgoKCgoKI3ByYWdtYSBp ZGVudAkiQCgjKXNpZ25hbC5oCTEuMzgJOTkvMDgvMTAgU01JIgkKCgoKCgoKCgojIDEgIi91c3Iv aW5jbHVkZS9pc28vc2lnbmFsX2lzby5oIiAxIDMgNAogCiAKCiAKIAogCgogCgoKCgogCgoKCgoK CgoKCgoKCgoKI3ByYWdtYSBpZGVudAkiQCgjKXNpZ25hbF9pc28uaAkxLjEJOTkvMDgvMDkgU01J IgogCgoKCgpleHRlcm4gIkMiIHsKCgoKCgoKdHlwZWRlZiBpbnQJc2lnX2F0b21pY190OwoKCgoK ZXh0ZXJuICJDIiBTSUdfVFlQICBzaWduYWwoaW50LCBTSUdfVFlQICk7CgoKCmV4dGVybiBpbnQg cmFpc2UoaW50KTsKCgoKCgoKCgoKCgoKCn0KCgoKIyAyNiAiL3Vzci9pbmNsdWRlL3NpZ25hbC5o IiAyIDMgNAoKCgogCgoKCgoKCgoKCgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4gY29uc3QgY2hh cgkqKl9zeXNfc2lnbGlzdHA7CSAKZXh0ZXJuIGNvbnN0IGludAlfc3lzX3NpZ2xpc3RuOwkJIAoK CgoKCgoKCgpleHRlcm4gaW50IGtpbGwocGlkX3QsIGludCk7CmV4dGVybiBpbnQgc2lnYWN0aW9u KGludCwgY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiAqLCBzdHJ1Y3Qgc2lnYWN0aW9uICopOwoKZXh0 ZXJuIGludCBzaWdhZGRzZXQoc2lnc2V0X3QgKiwgaW50KTsKZXh0ZXJuIGludCBzaWdkZWxzZXQo c2lnc2V0X3QgKiwgaW50KTsKZXh0ZXJuIGludCBzaWdlbXB0eXNldChzaWdzZXRfdCAqKTsKZXh0 ZXJuIGludCBzaWdmaWxsc2V0KHNpZ3NldF90ICopOwpleHRlcm4gaW50IHNpZ2lzbWVtYmVyKGNv bnN0IHNpZ3NldF90ICosIGludCk7CgpleHRlcm4gaW50IHNpZ3BlbmRpbmcoc2lnc2V0X3QgKik7 CmV4dGVybiBpbnQgc2lncHJvY21hc2soaW50LCBjb25zdCBzaWdzZXRfdCAqLCBzaWdzZXRfdCAq KTsKZXh0ZXJuIGludCBzaWdzdXNwZW5kKGNvbnN0IHNpZ3NldF90ICopOwoKCgoKIyAxICIvdXNy L2luY2x1ZGUvc3lzL3Byb2NzZXQuaCIgMSAzIDQKIAoKCgoKIAogCgogCiAKIAoKCgoKI3ByYWdt YSBpZGVudAkiQCgjKXByb2NzZXQuaAkxLjIwCTAwLzAyLzE0IFNNSSIJCgoKZXh0ZXJuICJDIiB7 CgoKCgoKIAoKCgoKCgoKCgoKIAoKCgoKdHlwZWRlZiBlbnVtCgoJaWR0eXBlCQkgCgoJCXsKCVBf UElELAkJIAoJUF9QUElELAkJIAoJUF9QR0lELAkJIAoJCQkgCglQX1NJRCwJCSAKCVBfQ0lELAkJ IAoJUF9VSUQsCQkgCglQX0dJRCwJCSAKCVBfQUxMLAkJIAoJUF9MV1BJRCwJIAoJUF9UQVNLSUQs CSAKCVBfUFJPSklECSAKfSBpZHR5cGVfdDsKCgogCgoKCgoKdHlwZWRlZiBlbnVtIGlkb3AgewoJ UE9QX0RJRkYsCSAKCQkJIAoJCQkgCglQT1BfQU5ELAkgCgkJCSAKCQkJIAoJUE9QX09SLAkJIAoJ CQkgCgkJCSAKCVBPUF9YT1IJCSAKCQkJIAoJCQkgCn0gaWRvcF90OwoKCiAKCgoKCnR5cGVkZWYg c3RydWN0IHByb2NzZXQgewoJaWRvcF90CQlwX29wOwkgCgkJCQkgCgkJCQkgCgkJCQkgCgoJaWR0 eXBlX3QJcF9saWR0eXBlOwoJCQkJIAoJCQkJIAoJaWRfdAkJcF9saWQ7CSAKCglpZHR5cGVfdAlw X3JpZHR5cGU7CgkJCQkgCgkJCQkgCglpZF90CQlwX3JpZDsJIAp9IHByb2NzZXRfdDsKCiAKCgoK CgoKCgoKCgoKIyAxMjkgIi91c3IvaW5jbHVkZS9zeXMvcHJvY3NldC5oIiAzIDQKCgoKfQoKCgoj IDczICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMyA0CgpleHRlcm4gaW50IGdzaWduYWwoaW50 KTsKZXh0ZXJuIGludCAoKnNzaWduYWwoaW50LCBpbnQgKCopKGludCkpKShpbnQpOwpleHRlcm4g aW50IHNpZ3NlbmQoaWR0eXBlX3QsIGlkX3QsIGludCk7CmV4dGVybiBpbnQgc2lnc2VuZHNldChj b25zdCBwcm9jc2V0X3QgKiwgaW50KTsKZXh0ZXJuIGludCBzaWcyc3RyKGludCwgY2hhciAqKTsK ZXh0ZXJuIGludCBzdHIyc2lnKGNvbnN0IGNoYXIgKiwgaW50ICopOwoKCgoKCgpleHRlcm4gdm9p ZCAoKmJzZF9zaWduYWwoaW50LCB2b2lkICgqKShpbnQpKSkoaW50KTsKZXh0ZXJuIGludCBraWxs cGcocGlkX3QsIGludCk7CmV4dGVybiBpbnQgc2lnaW50ZXJydXB0KGludCwgaW50KTsKZXh0ZXJu IGludCBzaWdhbHRzdGFjayhjb25zdCBzdGFja190ICosIHN0YWNrX3QgKik7CmV4dGVybiBpbnQg c2lnaG9sZChpbnQpOwpleHRlcm4gaW50IHNpZ2lnbm9yZShpbnQpOwpleHRlcm4gaW50IHNpZ3Bh dXNlKGludCk7CmV4dGVybiBpbnQgc2lncmVsc2UoaW50KTsKZXh0ZXJuIHZvaWQgKCpzaWdzZXQo aW50LCB2b2lkICgqKShpbnQpKSkoaW50KTsKZXh0ZXJuIGludCBzaWdzdGFjayhzdHJ1Y3Qgc2ln c3RhY2sgKiwgc3RydWN0IHNpZ3N0YWNrICopOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2tp bGwocHRocmVhZF90LCBpbnQpOwpleHRlcm4gaW50IHB0aHJlYWRfc2lnbWFzayhpbnQsIGNvbnN0 IHNpZ3NldF90ICosIHNpZ3NldF90ICopOwpleHRlcm4gaW50IHNpZ3dhaXRpbmZvKGNvbnN0IHNp Z3NldF90ICosIHNpZ2luZm9fdCAqKTsKZXh0ZXJuIGludCBzaWd0aW1lZHdhaXQoY29uc3Qgc2ln c2V0X3QgKiwgc2lnaW5mb190ICosIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqKTsKZXh0ZXJuIGlu dCBzaWdxdWV1ZShwaWRfdCwgaW50LCBjb25zdCB1bmlvbiBzaWd2YWwpOwoKCiMgMTc3ICIvdXNy L2luY2x1ZGUvc2lnbmFsLmgiIDMgNAoKCiAKCgoKCgoKCgoKIyAyMDQgIi91c3IvaW5jbHVkZS9z aWduYWwuaCIgMyA0CgoKZXh0ZXJuIGludCBzaWd3YWl0KHNpZ3NldF90ICopOwoKCgoKIyAyMzcg Ii91c3IvaW5jbHVkZS9zaWduYWwuaCIgMyA0CgoKCgoKfQoKCgojIDIwNyAiLi4vU3JjU2hhcmVk L1BsYXRmb3JtLmgiIDIKCgoJaW5saW5lIHZvaWQgUGxhdGZvcm06OkRlYnVnZ2VyIChjb25zdCBj aGFyKikKCXsKCQlyYWlzZSAoNSApOwoJfQoJCgoKCgoKIyAyMCAiLi4vU3JjU2hhcmVkL1Nlc3Np b25GaWxlLmgiIDIKCgpzdHJ1Y3QgSHdySmVycnlQTERUeXBlOwpzdHJ1Y3QgSHdyTTY4MzI4VHlw ZTsKc3RydWN0IEh3ck02OEVaMzI4VHlwZTsKc3RydWN0IEh3ck02OFZaMzI4VHlwZTsKc3RydWN0 IEh3ck02OFNaMzI4VHlwZTsKc3RydWN0IHJlZ3N0cnVjdDsKc3RydWN0IFNFRDEzNzVSZWdzVHlw ZTsKc3RydWN0IFNFRDEzNzZSZWdzVHlwZTsKCmNsYXNzIFNlc3Npb25GaWxlCnsKCXB1YmxpYzoK CQl0eXBlZGVmIHVpbnQzMiBCdWdGaXhlczsKCQllbnVtIEJ1Z0ZpeAoJCXsKCQkJa0J1Z0J5dGVz d2FwcGVkU3RydWN0cyA9IDEJIAoJCQkJCQkJCQkJIAoJCX07CgoJcHVibGljOgoJCQkJCQkJCVNl c3Npb25GaWxlCQkJCShDaHVua0ZpbGUmIGYpOwoJCQkJCQkJCX5TZXNzaW9uRmlsZQkJCSh2b2lk KTsKCgkJIAoKCQlCb29sCQkJCQlSZWFkRGV2aWNlCQkJCShFbURldmljZSYpOwoKCQlCb29sCQkJ CQlSZWFkUk9NRmlsZVJlZmVyZW5jZQkoRW1GaWxlUmVmJik7CgoJCUJvb2wJCQkJCVJlYWREQmFs bFJlZ3MJCQkocmVnc3RydWN0Jik7CgkJQm9vbAkJCQkJUmVhZEh3ckRCYWxsVHlwZQkJKEh3ck02 ODMyOFR5cGUmKTsKCQlCb29sCQkJCQlSZWFkSHdyREJhbGxFWlR5cGUJCShId3JNNjhFWjMyOFR5 cGUmKTsKCQlCb29sCQkJCQlSZWFkSHdyREJhbGxWWlR5cGUJCShId3JNNjhWWjMyOFR5cGUmKTsK CQlCb29sCQkJCQlSZWFkREJhbGxTdGF0ZQkJCShDaHVuayYgY2h1bmspIHsgcmV0dXJuIGZGaWxl LlJlYWRDaHVuayAoa0RCU3RhdGUsIGNodW5rKTsgfQoJCUJvb2wJCQkJCVJlYWREQmFsbEVaU3Rh dGUJCShDaHVuayYgY2h1bmspIHsgcmV0dXJuIGZGaWxlLlJlYWRDaHVuayAoa0RCRVpTdGF0ZSwg Y2h1bmspOyB9CgkJQm9vbAkJCQkJUmVhZERCYWxsVlpTdGF0ZQkJKENodW5rJiBjaHVuaykgeyBy ZXR1cm4gZkZpbGUuUmVhZENodW5rIChrREJFWlN0YXRlLCBjaHVuayk7IH0KCgkJQm9vbAkJCQkJ UmVhZFNFRDEzNzVSZWdzVHlwZQkJKFNFRDEzNzVSZWdzVHlwZSYpOwoJCUJvb2wJCQkJCVJlYWRT RUQxMzc1SW1hZ2UJCSh2b2lkKik7CgkJQm9vbAkJCQkJUmVhZFNFRDEzNzVQYWxldHRlCQkodWlu dDE2IFsyNTZdKTsKCgkJQm9vbAkJCQkJUmVhZFNFRDEzNzZSZWdzVHlwZQkJKFNFRDEzNzZSZWdz VHlwZSYpOwoJCUJvb2wJCQkJCVJlYWRTRUQxMzc2UGFsZXR0ZQkJKFJHQlR5cGUgWzI1Nl0pOwoK CQlCb29sCQkJCQlSZWFkTWVkaWFRUmVnc1R5cGUJCShDaHVuayYgY2h1bmspIHsgcmV0dXJuIGZG aWxlLlJlYWRDaHVuayAoa01lZGlhUVJlZ3MsIGNodW5rKTsgfQoJCUJvb2wJCQkJCVJlYWRNZWRp YVFJbWFnZQkJCSh2b2lkKik7CgkJQm9vbAkJCQkJUmVhZE1lZGlhUVBhbGV0dGUJCShSR0JUeXBl IFsyNTZdKTsKCgkJQm9vbAkJCQkJUmVhZFBMRFJlZ3NUeXBlCQkJKEh3ckplcnJ5UExEVHlwZSYp OwoKCQlCb29sCQkJCQlSZWFkR3JlbWxpbkluZm8JCQkoQ2h1bmsmIGNodW5rKSB7IHJldHVybiBm RmlsZS5SZWFkQ2h1bmsgKGtHcmVtbGluSW5mbywgY2h1bmspOyB9CgkJQm9vbAkJCQkJUmVhZEdy ZW1saW5IaXN0b3J5CQkoQ2h1bmsmIGNodW5rKSB7IHJldHVybiB0aGlzLT5SZWFkQ2h1bmsgKGtH cmVtbGluSGlzdG9yeSwgY2h1bmssIGtHemlwQ29tcHJlc3Npb24pOyB9CgkJQm9vbAkJCQkJUmVh ZERlYnVnSW5mbwkJCShDaHVuayYgY2h1bmspIHsgcmV0dXJuIGZGaWxlLlJlYWRDaHVuayAoa0Rl YnVnSW5mbywgY2h1bmspOyB9CgkJQm9vbAkJCQkJUmVhZE1ldGFJbmZvCQkJKENodW5rJiBjaHVu aykgeyByZXR1cm4gZkZpbGUuUmVhZENodW5rIChrTWV0YUluZm8sIGNodW5rKTsgfQoJCUJvb2wJ CQkJCVJlYWRQYXRjaEluZm8JCQkoQ2h1bmsmIGNodW5rKSB7IHJldHVybiBmRmlsZS5SZWFkQ2h1 bmsgKGtQYXRjaEluZm8sIGNodW5rKTsgfQoJCUJvb2wJCQkJCVJlYWRQcm9maWxlSW5mbwkJCShD aHVuayYgY2h1bmspIHsgcmV0dXJuIGZGaWxlLlJlYWRDaHVuayAoa1Byb2ZpbGVJbmZvLCBjaHVu ayk7IH0KCQlCb29sCQkJCQlSZWFkTG9nZ2luZ0luZm8JCQkoQ2h1bmsmIGNodW5rKSB7IHJldHVy biBmRmlsZS5SZWFkQ2h1bmsgKGtMb2dnaW5nSW5mbywgY2h1bmspOyB9CgkJQm9vbAkJCQkJUmVh ZFN0YWNrSW5mbwkJCShDaHVuayYgY2h1bmspIHsgcmV0dXJuIGZGaWxlLlJlYWRDaHVuayAoa1N0 YWNrSW5mbywgY2h1bmspOyB9CgkJQm9vbAkJCQkJUmVhZEhlYXBJbmZvCQkJKENodW5rJiBjaHVu aykgeyByZXR1cm4gZkZpbGUuUmVhZENodW5rIChrSGVhcEluZm8sIGNodW5rKTsgfQoKCQlCb29s CQkJCQlSZWFkUGxhdGZvcm1JbmZvCQkoQ2h1bmsmIGNodW5rKSB7IHJldHVybiBmRmlsZS5SZWFk Q2h1bmsgKGtQbGF0Zm9ybUluZm8sIGNodW5rKTsgfQoJCUJvb2wJCQkJCVJlYWRQbGF0Zm9ybUlu Zm9NYWMJCShDaHVuayYgY2h1bmspIHsgcmV0dXJuIGZGaWxlLlJlYWRDaHVuayAoa1BsYXRmb3Jt TWFjLCBjaHVuayk7IH0KCQlCb29sCQkJCQlSZWFkUGxhdGZvcm1JbmZvV2luCQkoQ2h1bmsmIGNo dW5rKSB7IHJldHVybiBmRmlsZS5SZWFkQ2h1bmsgKGtQbGF0Zm9ybVdpbmRvd3MsIGNodW5rKTsg fQoJCUJvb2wJCQkJCVJlYWRQbGF0Zm9ybUluZm9Vbml4CShDaHVuayYgY2h1bmspIHsgcmV0dXJu IGZGaWxlLlJlYWRDaHVuayAoa1BsYXRmb3JtVW5peCwgY2h1bmspOyB9CgoJCUJvb2wJCQkJCVJl YWRSQU1JbWFnZQkJCSh2b2lkKik7CgkJQm9vbAkJCQkJUmVhZE1ldGFSQU1JbWFnZQkJKHZvaWQq KTsKCQlCb29sCQkJCQlSZWFkTWV0YVJPTUltYWdlCQkodm9pZCopOwoKCQlCb29sCQkJCQlSZWFk QnVnRml4ZXMJCQkoQnVnRml4ZXMmKTsKCgkJIAoKCQl2b2lkCQkJCQlXcml0ZURldmljZQkJCQko Y29uc3QgRW1EZXZpY2UmKTsKCgkJdm9pZAkJCQkJV3JpdGVST01GaWxlUmVmZXJlbmNlCShjb25z dCBFbUZpbGVSZWYmKTsKCgkJdm9pZAkJCQkJV3JpdGVEQmFsbFJlZ3MJCQkoY29uc3QgcmVnc3Ry dWN0Jik7CgkJdm9pZAkJCQkJV3JpdGVId3JEQmFsbFR5cGUJCShjb25zdCBId3JNNjgzMjhUeXBl Jik7CgkJdm9pZAkJCQkJV3JpdGVId3JEQmFsbEVaVHlwZQkJKGNvbnN0IEh3ck02OEVaMzI4VHlw ZSYpOwoJCXZvaWQJCQkJCVdyaXRlSHdyREJhbGxWWlR5cGUJCShjb25zdCBId3JNNjhWWjMyOFR5 cGUmKTsKCQl2b2lkCQkJCQlXcml0ZURCYWxsU3RhdGUJCQkoY29uc3QgQ2h1bmsmIGNodW5rKSB7 IGZGaWxlLldyaXRlQ2h1bmsgKGtEQlN0YXRlLCBjaHVuayk7IH0KCQl2b2lkCQkJCQlXcml0ZURC YWxsRVpTdGF0ZQkJKGNvbnN0IENodW5rJiBjaHVuaykgeyBmRmlsZS5Xcml0ZUNodW5rIChrREJF WlN0YXRlLCBjaHVuayk7IH0KCQl2b2lkCQkJCQlXcml0ZURCYWxsVlpTdGF0ZQkJKGNvbnN0IENo dW5rJiBjaHVuaykgeyBmRmlsZS5Xcml0ZUNodW5rIChrREJFWlN0YXRlLCBjaHVuayk7IH0KCgkJ dm9pZAkJCQkJV3JpdGVTRUQxMzc1UmVnc1R5cGUJKGNvbnN0IFNFRDEzNzVSZWdzVHlwZSYpOwoJ CXZvaWQJCQkJCVdyaXRlU0VEMTM3NUltYWdlCQkoY29uc3Qgdm9pZCosIHVpbnQzMik7CgkJdm9p ZAkJCQkJV3JpdGVTRUQxMzc1UGFsZXR0ZQkJKGNvbnN0IHVpbnQxNiBbMjU2XSk7CgoJCXZvaWQJ CQkJCVdyaXRlU0VEMTM3NlJlZ3NUeXBlCShjb25zdCBTRUQxMzc2UmVnc1R5cGUmKTsKCQl2b2lk CQkJCQlXcml0ZVNFRDEzNzZQYWxldHRlCQkoY29uc3QgUkdCVHlwZSBbMjU2XSk7CgoJCXZvaWQJ CQkJCVdyaXRlTWVkaWFRUmVnc1R5cGUJCShjb25zdCBDaHVuayYgY2h1bmspIHsgZkZpbGUuV3Jp dGVDaHVuayAoa01lZGlhUVJlZ3MsIGNodW5rKTsgfQoJCXZvaWQJCQkJCVdyaXRlTWVkaWFRSW1h Z2UJCShjb25zdCB2b2lkKiwgdWludDMyKTsKCQl2b2lkCQkJCQlXcml0ZU1lZGlhUVBhbGV0dGUJ CShjb25zdCBSR0JUeXBlIFsyNTZdKTsKCgkJdm9pZAkJCQkJV3JpdGVQTERSZWdzVHlwZQkJKGNv bnN0IEh3ckplcnJ5UExEVHlwZSYpOwoKCQl2b2lkCQkJCQlXcml0ZUdyZW1saW5JbmZvCQkoY29u c3QgQ2h1bmsmIGNodW5rKSB7IGZGaWxlLldyaXRlQ2h1bmsgKGtHcmVtbGluSW5mbywgY2h1bmsp OyB9CgkJdm9pZAkJCQkJV3JpdGVHcmVtbGluSGlzdG9yeQkJKGNvbnN0IENodW5rJiBjaHVuaykg eyB0aGlzLT5Xcml0ZUNodW5rIChrR3JlbWxpbkhpc3RvcnksIGNodW5rLCBrR3ppcENvbXByZXNz aW9uKTsgfQoJCXZvaWQJCQkJCVdyaXRlRGVidWdJbmZvCQkJKGNvbnN0IENodW5rJiBjaHVuaykg eyBmRmlsZS5Xcml0ZUNodW5rIChrRGVidWdJbmZvLCBjaHVuayk7IH0KCQl2b2lkCQkJCQlXcml0 ZU1ldGFJbmZvCQkJKGNvbnN0IENodW5rJiBjaHVuaykgeyBmRmlsZS5Xcml0ZUNodW5rIChrTWV0 YUluZm8sIGNodW5rKTsgfQoJCXZvaWQJCQkJCVdyaXRlUGF0Y2hJbmZvCQkJKGNvbnN0IENodW5r JiBjaHVuaykgeyBmRmlsZS5Xcml0ZUNodW5rIChrUGF0Y2hJbmZvLCBjaHVuayk7IH0KCQl2b2lk CQkJCQlXcml0ZVByb2ZpbGVJbmZvCQkoY29uc3QgQ2h1bmsmIGNodW5rKSB7IGZGaWxlLldyaXRl Q2h1bmsgKGtQcm9maWxlSW5mbywgY2h1bmspOyB9CgkJdm9pZAkJCQkJV3JpdGVMb2dnaW5nSW5m bwkJKGNvbnN0IENodW5rJiBjaHVuaykgeyBmRmlsZS5Xcml0ZUNodW5rIChrTG9nZ2luZ0luZm8s IGNodW5rKTsgfQoJCXZvaWQJCQkJCVdyaXRlU3RhY2tJbmZvCQkJKGNvbnN0IENodW5rJiBjaHVu aykgeyBmRmlsZS5Xcml0ZUNodW5rIChrU3RhY2tJbmZvLCBjaHVuayk7IH0KCQl2b2lkCQkJCQlX cml0ZUhlYXBJbmZvCQkJKGNvbnN0IENodW5rJiBjaHVuaykgeyBmRmlsZS5Xcml0ZUNodW5rIChr SGVhcEluZm8sIGNodW5rKTsgfQoKCQl2b2lkCQkJCQlXcml0ZVBsYXRmb3JtSW5mbwkJKGNvbnN0 IENodW5rJiBjaHVuaykgeyBmRmlsZS5Xcml0ZUNodW5rIChrUGxhdGZvcm1JbmZvLCBjaHVuayk7 IH0KCQl2b2lkCQkJCQlXcml0ZVBsYXRmb3JtSW5mb01hYwkoY29uc3QgQ2h1bmsmIGNodW5rKSB7 IGZGaWxlLldyaXRlQ2h1bmsgKGtQbGF0Zm9ybU1hYywgY2h1bmspOyB9CgkJdm9pZAkJCQkJV3Jp dGVQbGF0Zm9ybUluZm9XaW4JKGNvbnN0IENodW5rJiBjaHVuaykgeyBmRmlsZS5Xcml0ZUNodW5r IChrUGxhdGZvcm1XaW5kb3dzLCBjaHVuayk7IH0KCQl2b2lkCQkJCQlXcml0ZVBsYXRmb3JtSW5m b1VuaXgJKGNvbnN0IENodW5rJiBjaHVuaykgeyBmRmlsZS5Xcml0ZUNodW5rIChrUGxhdGZvcm1V bml4LCBjaHVuayk7IH0KCgkJdm9pZAkJCQkJV3JpdGVSQU1JbWFnZQkJCShjb25zdCB2b2lkKiwg dWludDMyKTsKCQl2b2lkCQkJCQlXcml0ZU1ldGFSQU1JbWFnZQkJKGNvbnN0IHZvaWQqLCB1aW50 MzIpOwoJCXZvaWQJCQkJCVdyaXRlTWV0YVJPTUltYWdlCQkoY29uc3Qgdm9pZCosIHVpbnQzMik7 CgoJCXZvaWQJCQkJCVdyaXRlQnVnRml4ZXMJCQkoY29uc3QgQnVnRml4ZXMmKTsKCgkJIAoKCQlC b29sCQkJCQlSZWFkQ29uZmlndXJhdGlvbgkJKENvbmZpZ3VyYXRpb24mKTsKCQlsb25nCQkJCQlH ZXRSQU1JbWFnZVNpemUJCQkodm9pZCk7CgoJCSAKCQkgCgkJIAoJCSAKCgkJQ29uZmlndXJhdGlv bgkJCUdldENvbmZpZ3VyYXRpb24JCSh2b2lkKSB7IHJldHVybiBmQ2ZnOyB9CgoJCXZvaWQJCQkJ CVNldENhblJlbG9hZAkJCShCb29sKTsKCQlCb29sCQkJCQlHZXRDYW5SZWxvYWQJCQkodm9pZCk7 CgoJCXZvaWQJCQkJCUZpeEJ1ZwkJCQkJKEJ1Z0ZpeCk7CgkJQm9vbAkJCQkJSW5jbHVkZXNCdWdG aXgJCQkoQnVnRml4KTsKCglwcml2YXRlOgoJCWVudW0gQ29tcHJlc3Npb25UeXBlCgkJewoJCQlr Tm9Db21wcmVzc2lvbiwKCQkJa1JMRUNvbXByZXNzaW9uLAoJCQlrR3ppcENvbXByZXNzaW9uCgkJ fTsKCgkJQm9vbAkJCQkJUmVhZENodW5rCQkJCShDaHVua0ZpbGU6OlRhZyB0YWcsCgkJCQkJCQkJ CQkJCQkJIHZvaWQqLAoJCQkJCQkJCQkJCQkJCSBDb21wcmVzc2lvblR5cGUpOwoKCQlCb29sCQkJ CQlSZWFkQ2h1bmsJCQkJKENodW5rRmlsZTo6VGFnIHRhZywKCQkJCQkJCQkJCQkJCQkgQ2h1bmsm IGNodW5rLAoJCQkJCQkJCQkJCQkJCSBDb21wcmVzc2lvblR5cGUpOwoKCQl2b2lkCQkJCQlXcml0 ZUNodW5rCQkJCShDaHVua0ZpbGU6OlRhZyB0YWcsCgkJCQkJCQkJCQkJCQkJIHVpbnQzMiwKCQkJ CQkJCQkJCQkJCQkgY29uc3Qgdm9pZCosCgkJCQkJCQkJCQkJCQkJIENvbXByZXNzaW9uVHlwZSk7 CgoJCXZvaWQJCQkJCVdyaXRlQ2h1bmsJCQkJKENodW5rRmlsZTo6VGFnIHRhZywKCQkJCQkJCQkJ CQkJCQkgY29uc3QgQ2h1bmsmIGNodW5rLAoJCQkJCQkJCQkJCQkJCSBDb21wcmVzc2lvblR5cGUp OwoKCQkgCgkJZnJpZW5kIEJvb2wgUGxhdGZvcm06OlJlYWRST01GaWxlUmVmZXJlbmNlIChDaHVu a0ZpbGUmLCBFbUZpbGVSZWYmKTsKCQlmcmllbmQgdm9pZCBQbGF0Zm9ybTo6V3JpdGVST01GaWxl UmVmZXJlbmNlIChDaHVua0ZpbGUmLCBjb25zdCBFbUZpbGVSZWYmKTsKCgkJZW51bQoJCXsKCQkJ a0RldmljZVR5cGUJCQk9ICdEVHlwJywJIAoJCQlrRGV2aWNlVHlwZVN0cmluZwk9ICdEU3RyJywJ IAoKCQkJa1JPTUFsaWFzVGFnCQk9ICdST01hJywJIAoJCQlrUk9NTmFtZVRhZwkJCT0gJ1JPTW4n LAkgCgkJCWtST01XaW5kb3dzUGF0aFRhZwk9ICdST01wJywJIAoJCQlrUk9NVW5peFBhdGhUYWcJ ICAgCT0gJ1JPTXUnLAkgCgoJCQlrQ1BVUmVncwkJCT0gJ0NyZWcnLAkgCgkJCWtEQlJlZ3MJCQkJ PSAnREIgICcsCSAKCQkJa0RCRVpSZWdzCQkJPSAnREJFWicsCSAKCQkJa0RCVlpSZWdzCQkJPSAn REJWWicsCSAKCQkJa0RCU3RhdGUJCQk9ICdEU3Q4JywJIAoJCQlrREJFWlN0YXRlCQkJPSAnRVN0 OCcsCSAKCQkJa0RCVlpTdGF0ZQkJCT0gJ1ZTdDgnLAkgCgoJCQlrU0VEMTM3NVJlZ3MJCT0gJzVy ZWcnLAkgCgkJCWtTRUQxMzc1SW1hZ2UJCT0gJzVyYW0nLAkgCgkJCWtTRUQxMzc1UGFsZXR0ZQkJ PSAnNWNsdCcsCSAKCgkJCWtTRUQxMzc2UmVncwkJPSAnNnJlZycsCSAKCQkJa1NFRDEzNzZQYWxl dHRlCQk9ICc2Y2x0JywJIAoKCQkJa01lZGlhUVJlZ3MJCQk9ICdNUXJnJywJIAoJCQlrTWVkaWFR SW1hZ2UJCT0gJ01RaW0nLAkgCgkJCWtNZWRpYVFQYWxldHRlCQk9ICdNUWNsJywJIAoKCQkJa1BM RFJlZ3MJCQk9ICdwbGQgJywJIAoKCQkJa0dyZW1saW5JbmZvCQk9ICdncmVtJywJIAoJCQlrR3Jl bWxpbkhpc3RvcnkJCT0gJ2hpc3QnLAkgCgkJCWtEZWJ1Z0luZm8JCQk9ICdkYnVnJywJIAoJCQlr TWV0YUluZm8JCQk9ICdtZXRhJywJIAoJCQlrUGF0Y2hJbmZvCQkJPSAncHRjaCcsCSAKCQkJa1By b2ZpbGVJbmZvCQk9ICdwcm9mJywJIAoJCQlrTG9nZ2luZ0luZm8JCT0gJ2xvZyAnLAkgCgkJCWtT dGFja0luZm8JCQk9ICdzdGFrJywJIAoJCQlrSGVhcEluZm8JCQk9ICdoZWFwJywJIAoKCQkJa1Bs YXRmb3JtSW5mbwkJPSAncGxhdCcsCSAKCQkJa1BsYXRmb3JtTWFjCQk9ICdtYWMgJywJIAoJCQlr UGxhdGZvcm1XaW5kb3dzCT0gJ3dpbmQnLAkgCgkJCWtQbGF0Zm9ybVVuaXgJCT0gJ3VuaXgnLAkg CgoJCQlrVGltZURlbHRhCQkJPSAnVGltZScsCSAKCQkJCQkJCQkJCQkgCgoJCQlrUkFNRGF0YVRh ZwkJCT0gJ3pyYW0nLAkgCgkJCWtNZXRhUkFNRGF0YVRhZwkJPSAnem1ybScsCSAKCQkJa01ldGFS T01EYXRhVGFnCQk9ICd6bXJvJywJIAoKCQkJa0J1Z3NUYWcJCQk9ICdidWd6JywJIAoJCQkKCQkJ a1JMRVJBTURhdGFUYWcJCT0gJ2NyYW0nLAkgCgkJCWtSTEVNZXRhUkFNRGF0YVRhZwk9ICdtcmFt JywJIAoJCQlrVW5jb21wUkFNRGF0YVRhZwk9ICdyYW0gJwkgCgkJfTsKCglwcml2YXRlOgoJCUNo dW5rRmlsZSYJCQkJZkZpbGU7CgkJQm9vbAkJCQkJZkNhblJlbG9hZDsKCQlDb25maWd1cmF0aW9u CQkJZkNmZzsKCQlib29sCQkJCQlmUmVhZEJ1Z0ZpeGVzOwoJCWJvb2wJCQkJCWZDaGFuZ2VkQnVn Rml4ZXM7CgkJQnVnRml4ZXMJCQkJZkJ1Z0ZpeGVzOwp9OwoKCiMgMzEgIi4vLi4vU3JjU2hhcmVk L01ldGFNZW1vcnkuY3BwIiAyCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1 bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2FsZ29yaXRobSIg MSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMvLi4vLi4vLi4vLi4vaW5jbHVkZS9n KystMy9zdGxfdGVtcGJ1Zi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoK CgoKIAoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IApfX2dldF90 ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbiwgX1RwKikKewogIGlmIChfX2xlbiA+IHB0 cmRpZmZfdCgyMTQ3NDgzNjQ3ICAgLyBzaXplb2YoX1RwKSkpCiAgICBfX2xlbiA9IDIxNDc0ODM2 NDcgICAvIHNpemVvZihfVHApOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfVHAqIF9fdG1w ID0gKF9UcCopIG1hbGxvYygoc2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgaWYgKF9f dG1wICE9IDApCiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9fbGVu KTsKICAgIF9fbGVuIC89IDI7CiAgfQoKICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChf VHAqKTAsIDApOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9UcCosIHB0 cmRpZmZfdD4gZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuKSB7CiAgcmV0dXJu IF9fZ2V0X3RlbXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsKfQoKCgogCiAKIAogCiAK dGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVt cG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopIHsKICByZXR1cm4gX19nZXRfdGVt cG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgp2 b2lkIHJldHVybl90ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKSB7CiAgZnJlZShfX3ApOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgpjbGFzcyBfVGVtcG9y YXJ5X2J1ZmZlciB7CnByaXZhdGU6CiAgcHRyZGlmZl90ICBfTV9vcmlnaW5hbF9sZW47CiAgcHRy ZGlmZl90ICBfTV9sZW47CiAgX1RwKiAgICAgICBfTV9idWZmZXI7CgogIHZvaWQgX01fYWxsb2Nh dGVfYnVmZmVyKCkgewogICAgX01fb3JpZ2luYWxfbGVuID0gX01fbGVuOwogICAgX01fYnVmZmVy ID0gMDsKCiAgICBpZiAoX01fbGVuID4gKHB0cmRpZmZfdCkoMjE0NzQ4MzY0NyAgIC8gc2l6ZW9m KF9UcCkpKQogICAgICBfTV9sZW4gPSAyMTQ3NDgzNjQ3ICAgLyBzaXplb2YoX1RwKTsKCiAgICB3 aGlsZSAoX01fbGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xl biAqIHNpemVvZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAg ICAgX01fbGVuIC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNv bnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29u c3QgX1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01f YnVmZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgogIHB0cmRpZmZfdCBzaXplKCkgY29u c3QgeyByZXR1cm4gX01fbGVuOyB9CiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3Qg eyByZXR1cm4gX01fb3JpZ2luYWxfbGVuOyB9CiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1 ZmZlcjsgfQogIF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVyICsgX01fbGVuOyB9CgogIF9U ZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv ciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNf dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yCiAgICAgICAgICAgIF9Ucml2aWFsOwogICAgdHJ5 ICB7CiAgICAgIF9NX2xlbiA9IDA7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX01f bGVuKTsKICAgICAgX01fYWxsb2NhdGVfYnVmZmVyKCk7CiAgICAgIGlmIChfTV9sZW4gPiAwKQog ICAgICAgIF9NX2luaXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAgIH0K ICAgIGNhdGNoKC4uLikgeyAgZnJlZShfTV9idWZmZXIpOyBfTV9idWZmZXIgPSAwOyBfTV9sZW4g PSAwIDsgdGhyb3c7IH0gOwogIH0KIAogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsgIAogICAgZGVz dHJveShfTV9idWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7CiAgICBmcmVlKF9NX2J1ZmZlcik7 CiAgfQoKcHJpdmF0ZToKICAgCiAgX1RlbXBvcmFyeV9idWZmZXIoY29uc3QgX1RlbXBvcmFyeV9i dWZmZXImKSB7fQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30K fTsKCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCAKICAgICAgICAgIGNsYXNz IF9UcCAKCiAgICAgICAgICAgICAgICAgICAgPSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zv cndhcmRJdGVyYXRvcj46OnZhbHVlX3R5cGUKCiAgICAgICAgID4Kc3RydWN0IHRlbXBvcmFyeV9i dWZmZXIgOiBwdWJsaWMgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgp7 CiAgdGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRl cmF0b3IgX19sYXN0KQogICAgOiBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBf VHA+KF9fZmlyc3QsIF9fbGFzdCkge30KICB+dGVtcG9yYXJ5X2J1ZmZlcigpIHt9Cn07CiAgICAK IAoKCgogCiAKIAojIDMzICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xhcmlz Mi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL2FsZ29yaXRobSIgMiAzCgojIDEg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvc3BhcmMtc3VuLXNvbGFyaXMyLjgvMi45NS4zLy4uLy4u Ly4uLy4uL2luY2x1ZGUvZysrLTMvc3RsX2FsZ28uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCiAKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL3NwYXJjLXN1bi1zb2xh cmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2crKy0zL3N0bF9oZWFwLmgiIDEgMwog CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKIAoKCgoKCiAKCnRlbXBsYXRlIDxjbGFz cyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgp2b2lk IApfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAg X0Rpc3RhbmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUp CnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgd2hpbGUg KF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkgPCBfX3Zh bHVlKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVu dCk7CiAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50OwogICAgX19wYXJlbnQgPSAoX19ob2xlSW5k ZXggLSAxKSAvIDI7CiAgfSAgICAKICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVl Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFu Y2UsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgCl9fcHVzaF9oZWFwX2F1eChfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2xhc3QsIF9EaXN0YW5jZSosIF9UcCopCnsKICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFu Y2UoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZSgwKSwgCiAgICAgICAgICAgICAg X1RwKCooX19sYXN0IC0gMSkpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy YXRvcj4KaW5saW5lIHZvaWQgCnB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz dCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewogIF9fcHVzaF9oZWFwX2F1eChfX2Zp cnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCAp ICwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHAsIAogICAgICAgICAgY2xh c3MgX0NvbXBhcmU+CnZvaWQKX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly c3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5k ZXgsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX19wYXJlbnQg PSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRl eCAmJiBfX2NvbXAoKihfX2ZpcnN0ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkgewogICAgKihfX2Zp cnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgX19ob2xlSW5k ZXggPSBfX3BhcmVudDsKICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIH0K ICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9E aXN0YW5jZSwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCAKX19wdXNoX2hlYXBfYXV4KF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wLAogICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwg X1RwKikgCnsKICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoKF9fbGFzdCAtIF9fZmly c3QpIC0gMSksIF9EaXN0YW5jZSgwKSwgCiAgICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkp LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFz cyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgCnB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgIF9Db21wYXJl IF9fY29tcCkKewogIF9fcHVzaF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCwKICAg ICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgLCBfX3ZhbHVlX3R5cGUo IF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBj bGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4Kdm9pZCAKX19hZGp1c3RfaGVhcChfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAg IF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpCnsKICBfRGlzdGFuY2UgX190b3BJbmRleCA9 IF9faG9sZUluZGV4OwogIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4 ICsgMjsKICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICBpZiAoKihfX2ZpcnN0 ICsgX19zZWNvbmRDaGlsZCkgPCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAg ICAgX19zZWNvbmRDaGlsZC0tOwogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2Zp cnN0ICsgX19zZWNvbmRDaGlsZCk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAg ICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgfQogIGlmIChfX3Nl Y29uZENoaWxkID09IF9fbGVuKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9f Zmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRD aGlsZCAtIDE7CiAgfQogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcElu ZGV4LCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwg Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIApfX3BvcF9oZWFwKF9SYW5k b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAog ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9E aXN0YW5jZSopCnsKICAqX19yZXN1bHQgPSAqX19maXJzdDsKICBfX2FkanVzdF9oZWFwKF9fZmly c3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3ZhbHVlKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwPgppbmxp bmUgdm9pZCAKX19wb3BfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9UcCopCnsKICBfX3Bv cF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIAogICAgICAgICAgICAgX1Rw KCooX19sYXN0IC0gMSkpLCBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdm9pZCBwb3BfaGVhcChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKICBfX3BvcF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3Qs IF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9UcCwgY2xhc3Mg X0NvbXBhcmU+CnZvaWQKX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz dCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwg X1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0g X19ob2xlSW5kZXg7CiAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXgg KyAyOwogIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgIGlmIChfX2NvbXAoKihf X2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkp KSkKICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0g KihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hp bGQ7CiAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgfQogIGlm IChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkg PSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgIF9faG9sZUluZGV4ID0gX19z ZWNvbmRDaGlsZCAtIDE7CiAgfQogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBf X3RvcEluZGV4LCBfX3ZhbHVlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCAKICAgICAgICAgIGNsYXNz IF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgCl9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wLAog ICAgICAgICAgIF9EaXN0YW5jZSopCnsKICAqX19yZXN1bHQgPSAqX19maXJzdDsKICBfX2FkanVz dF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3Qp LCAKICAgICAgICAgICAgICAgIF9fdmFsdWUsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf UmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2 b2lkIApfX3BvcF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19j b21wKQp7CiAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBfVHAo KihfX2xhc3QgLSAxKSksIF9fY29tcCwKICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19m aXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNz IF9Db21wYXJlPgppbmxpbmUgdm9pZCAKcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f Zmlyc3QsCiAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9f Y29tcCkKewogICAgX19wb3BfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUo IF9fZmlyc3QgKSAsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl cmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIApfX21ha2VfaGVhcChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwg MikgcmV0dXJuOwogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3Rh bmNlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKICAgIAogIHdoaWxlICh0cnVlKSB7CiAgICBf X2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1RwKCooX19maXJzdCArIF9f cGFyZW50KSkpOwogICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgIF9fcGFyZW50LS07 CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdm9p ZCAKbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19sYXN0KQp7CiAgX19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LAogICAgICAg ICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0 ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Nv bXBhcmUsCiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZApfX21ha2Vf aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fbGFzdCwKICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfVHAqLCBfRGlzdGFuY2UqKQp7 CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgX0Rpc3RhbmNlIF9fbGVuID0g X19sYXN0IC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwog ICAgCiAgd2hpbGUgKHRydWUpIHsKICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJlbnQs IF9fbGVuLCBfVHAoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSwKICAgICAgICAgICAgICAgICAgX19j b21wKTsKICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAgICBfX3BhcmVudC0tOwogIH0K fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+ CmlubGluZSB2b2lkIAptYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIAog ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7 CiAgX19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LCBfX2NvbXAsCiAgICAgICAgICAgICAgX192 YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLCBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgp2b2lkIHNvcnRfaGVhcChfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkK ewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9f bGFzdC0tKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3Mg X0NvbXBhcmU+CnZvaWQgCnNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwK ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkK ewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9f bGFzdC0tLCBfX2NvbXApOwp9CgoKCgoKIAoKCgogCiAKIAojIDM0ICIvdXNyL2xvY2FsL2xpYi9n Y2MtbGliL3NwYXJjLXN1bi1zb2xhcmlzMi44LzIuOTUuMy8uLi8uLi8uLi8uLi9pbmNsdWRlL2cr Ky0zL3N0bF9hbGdvLmgiIDIgMwoKCiAKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxp bmUgY29uc3QgX1RwJiBfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNv bnN0IF9UcCYgX19jKSB7CiAgaWYgKF9fYSA8IF9fYikKICAgIGlmIChfX2IgPCBfX2MpCiAgICAg IHJldHVybiBfX2I7CiAgICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICAgIHJldHVybiBfX2M7CiAg ICBlbHNlCiAgICAgIHJldHVybiBfX2E7CiAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgcmV0dXJu IF9fYTsKICBlbHNlIGlmIChfX2IgPCBfX2MpCiAgICByZXR1cm4gX19jOwogIGVsc2UKICAgIHJl dHVybiBfX2I7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUg Y29uc3QgX1RwJgpfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0 IF9UcCYgX19jLCBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19jb21wKF9fYSwgX19iKSkKICAg IGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgICByZXR1cm4gX19iOwogICAgZWxzZSBpZiAoX19j b21wKF9fYSwgX19jKSkKICAgICAgcmV0dXJuIF9fYzsKICAgIGVsc2UKICAgICAgcmV0dXJuIF9f YTsKICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgcmV0dXJuIF9fYTsKICBlbHNlIGlm IChfX2NvbXAoX19iLCBfX2MpKQogICAgcmV0dXJuIF9fYzsKICBlbHNlCiAgICByZXR1cm4gX19i Owp9CgogCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRnVuY3Rpb24+Cl9GdW5j dGlvbiBmb3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRnVu Y3Rpb24gX19mKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAg X19mKCpfX2ZpcnN0KTsKICByZXR1cm4gX19mOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0lucHV0SXRlciBmaW5kKF9JbnB1dEl0ZXIgX19maXJz dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB3aGls ZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgKl9fZmlyc3QgIT0gX192YWwpCiAgICArK19fZmlyc3Q7 CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBf UHJlZGljYXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBf X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAg d2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmlyc3QpKQogICAgKytfX2Zp cnN0OwogIHJldHVybiBfX2ZpcnN0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz SXRlciwgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRlciBmaW5kKF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3Nf aXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgPSAoX19sYXN0IC0gX19maXJz dCkgPj4gMjsKCiAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsK ICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7 CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJz dDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2Zp cnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19f Zmlyc3Q7CiAgfQoKICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogIGNhc2UgMzoKICAgIGlm ICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2Fz ZSAyOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19m aXJzdDsKICBjYXNlIDE6CiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0 OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMDoKICBkZWZhdWx0OgogICAgcmV0dXJuIF9fbGFzdDsK ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1ByZWRpY2F0 ZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgZmluZF9pZihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRp Y2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVy YXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+ OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+ PiAyOwoKICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAg aWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAg IGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAg ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7Cgog ICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0Owog IH0KCiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICBjYXNlIDM6CiAgICBpZiAoX19wcmVk KCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAyOgogICAg aWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNh c2UgMToKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19m aXJzdDsKICBjYXNlIDA6CiAgZGVmYXVsdDoKICAgIHJldHVybiBfX2xhc3Q7CiAgfQp9CgoKCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfSW5wdXRJdGVyIGZp bmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQp7CiAgcmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0 LCBfX3ZhbCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5k X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpIHsKICByZXR1cm4gZmluZF9pZihfX2ZpcnN0 LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7Cn0KCiAK CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBhZGphY2VudF9maW5k KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmly c3QgPT0gX19sYXN0KQogICAgcmV0dXJuIF9fbGFzdDsKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0g X19maXJzdDsKICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA9 PSAqX19uZXh0KQogICAgICByZXR1cm4gX19maXJzdDsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAg fQogIHJldHVybiBfX2xhc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz IF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBpZiAoX19maXJzdCA9PSBfX2xh c3QpCiAgICByZXR1cm4gX19sYXN0OwogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0Owog IHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmly c3QsICpfX25leHQpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIF9fZmlyc3QgPSBfX25leHQ7 CiAgfQogIHJldHVybiBfX2xhc3Q7Cn0KCiAKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemU+CnZvaWQgY291bnQoX0lucHV0SXRlciBfX2Zp cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICAgIF9T aXplJiBfX24pIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBp ZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfU2l6ZT4Kdm9pZCBjb3VudF9pZihf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCwK ICAgICAgICAgICAgICBfU2l6ZSYgX19uKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg KytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICsrX19uOwp9CgoKCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CnR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCmNvdW50KF9JbnB1dEl0ZXIgX19maXJz dCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgZm9y ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2ZpcnN0ID09IF9f dmFsdWUpCiAgICAgICsrX19uOwogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgp0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0 SXRlcj46OmRpZmZlcmVuY2VfdHlwZQpjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1 dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkgewogIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgZm9yICggOyBfX2Zp cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAg ICsrX19uOwogIHJldHVybiBfX247Cn0KCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIHNlYXJjaChfRm9yd2FyZEl0 ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikgCnsKICAgCiAg aWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVy biBfX2ZpcnN0MTsKCiAgIAogIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICsrX190 bXA7CiAgaWYgKF9fdG1wID09IF9fbGFzdDIpCiAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19s YXN0MSwgKl9fZmlyc3QyKTsKCiAgIAoKICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19w MSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJz dDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICBfX2ZpcnN0MSA9IGZpbmQo X19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0 MSkKICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVudCA9 IF9fZmlyc3QxOyAKICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICByZXR1cm4g X19sYXN0MTsKCiAgICB3aGlsZSAoKl9fY3VycmVudCA9PSAqX19wKSB7CiAgICAgIGlmICgrK19f cCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgaWYgKCsrX19jdXJy ZW50ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CgogICAgKytfX2Zp cnN0MTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9Gb3J3YXJkSXRl cjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVy MiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZCAgX19wcmVkaWNhdGUp IAp7CiAgIAogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIp CiAgICByZXR1cm4gX19maXJzdDE7CgogICAKICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3Qy KTsKICArK19fdG1wOwogIGlmIChfX3RtcCA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGZpbmQoX19m aXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CgogICAKCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBf X3A7CgogIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVu dCA9IF9fZmlyc3QxOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgd2hpbGUg KF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgaWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwg Kl9fZmlyc3QyKSkKICAgICAgICBicmVhazsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIHdo aWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2Zp cnN0MikpCiAgICAgICsrX19maXJzdDE7CiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAg ICAgcmV0dXJuIF9fbGFzdDE7CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVudCA9IF9fZmly c3QxOyAKICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsKCiAg ICB3aGlsZSAoX19wcmVkaWNhdGUoKl9fY3VycmVudCwgKl9fcCkpIHsKICAgICAgaWYgKCsrX19w ID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICBpZiAoKytfX2N1cnJl bnQgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgICArK19fZmly c3QxOwogIH0KICByZXR1cm4gX19maXJzdDE7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIsIGNsYXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlciBzZWFyY2hfbihf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpIHsKICBpZiAoX19jb3Vu dCA8PSAwKQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICBfX2ZpcnN0ID0gZmluZChf X2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewog ICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9 IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24g IT0gMCAmJiAqX19pID09IF9fdmFsKSB7CiAgICAgICAgKytfX2k7CiAgICAgICAgLS1fX247CiAg ICAgIH0KICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBl bHNlCiAgICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKICAgIH0KICAg IHJldHVybiBfX2xhc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz cyBfSW50ZWdlciwgY2xhc3MgX1RwLCBjbGFzcyBfQmluYXJ5UHJlZD4KX0ZvcndhcmRJdGVyIHNl YXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAg ICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQpIHsKICBpZiAoX19jb3Vu dCA8PSAwKQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICB3aGlsZSAoX19maXJzdCAh PSBfX2xhc3QpIHsKICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAg ICAgICBicmVhazsKICAgICAgKytfX2ZpcnN0OwogICAgfQogICAgd2hpbGUgKF9fZmlyc3QgIT0g X19sYXN0KSB7CiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICBfRm9yd2Fy ZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdoaWxlIChfX2kgIT0gX19s YXN0ICYmIF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAgICAgICAg KytfX2k7CiAgICAgICAgLS1fX247CiAgICAgIH0KICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAg IHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFz dCkgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKQogICAgICAgICAg ICBicmVhazsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgICBfX2ZpcnN0ID0gX19p OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX19sYXN0OwogIH0KfSAKCiAKCnRlbXBsYXRlIDxj bGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIyIHN3 YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKSB7CiAgZm9y ICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaXRl cl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgcmV0dXJuIF9fZmlyc3QyOwp9CgogCgp0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9VbmFyeU9w ZXJhdGlvbj4KX091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg X1VuYXJ5T3BlcmF0aW9uIF9fb3BlcikgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr X19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fb3BlcigqX19maXJzdCk7CiAg cmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J bnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlPcGVy YXRpb24+Cl9PdXRwdXRJdGVyIHRyYW5zZm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0 SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlPcGVy YXRpb24gX19iaW5hcnlfb3ApIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19m aXJzdDEsICsrX19maXJzdDIsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSBfX2JpbmFyeV9v cCgqX19maXJzdDEsICpfX2ZpcnN0Mik7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgogCgp0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQgcmVwbGFjZShfRm9yd2FyZEl0 ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIGNvbnN0IF9UcCYg X19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpIHsKICBmb3IgKCA7IF9fZmlyc3Qg IT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUpCiAg ICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcD4Kdm9pZCByZXBsYWNlX2lmKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRp Y2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpIHsKICBmb3IgKCA7IF9fZmlyc3Qg IT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKl9f Zmlyc3QgPSBfX25ld192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz IF9PdXRwdXRJdGVyLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIHJlcGxhY2VfY29weShfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg X091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm IF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKSB7CiAgZm9yICggOyBfX2ZpcnN0 ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0gKl9fZmly c3QgPT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jl c3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIEl0ZXJhdG9yLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xh c3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZXBsYWNlX2NvcHlfaWYoSXRl cmF0b3IgX19maXJzdCwgSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJl ZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkgewogIGZvciAoIDsgX19maXJz dCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fcHJl ZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsK fQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0dlbmVyYXRvcj4Kdm9p ZCBnZW5lcmF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX0dl bmVyYXRvciBfX2dlbikgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkK ICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVyLCBj bGFzcyBfU2l6ZSwgY2xhc3MgX0dlbmVyYXRvcj4KX091dHB1dEl0ZXIgZ2VuZXJhdGVfbihfT3V0 cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pIHsKICBmb3IgKCA7 IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fZ2VuKCk7CiAgcmV0 dXJuIF9fZmlyc3Q7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0 cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZW1vdmVfY29weShfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0 SXRlciBfX3Jlc3VsdCwgY29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2ZpcnN0ICE9IF9fdmFsdWUpIHsKICAgICAg Kl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9f cmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIs IGNsYXNzIF9QcmVkaWNhdGU+Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkgewogIGZvciAoIDsgX19maXJz dCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICghX19wcmVkKCpfX2ZpcnN0KSkgewogICAg ICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4g X19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KX0Zv cndhcmRJdGVyIHJlbW92ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICBfX2ZpcnN0ID0g ZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWUpOwogIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2Zp cnN0OwogIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QgCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHkoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX192YWx1 ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9G b3J3YXJkSXRlciByZW1vdmVfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpIHsKICBfX2Zp cnN0ID0gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAgX0ZvcndhcmRJdGVyIF9f aSA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdCAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9pZigrK19faSwgX19sYXN0LCBfX2Zp cnN0LCBfX3ByZWQpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091 dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9P dXRwdXRJdGVyIF9fcmVzdWx0LCBfVHAqKSB7CiAgX1RwIF9fdmFsdWUgPSAqX19maXJzdDsKICAq X19yZXN1bHQgPSBfX3ZhbHVlOwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYg KF9fdmFsdWUgIT0gKl9fZmlyc3QpIHsKICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAq KytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJ dGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKSB7CiAg cmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX192YWx1ZV90 eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9G b3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ dGVyIF9fcmVzdWx0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICpfX3Jlc3VsdCA9ICpfX2Zp cnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCpfX3Jlc3VsdCAhPSAq X19maXJzdCkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4gKytfX3Jlc3VsdDsKfQoK dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091 dHB1dEl0ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7 CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgcmV0dXJuIF9fdW5p cXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg ICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX3Jlc3VsdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZSwKICAg ICAgICAgIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRw dXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNh dGUgX19iaW5hcnlfcHJlZCwgX1RwKikgewogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgKl9f cmVzdWx0ID0gX192YWx1ZTsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICgh X19iaW5hcnlfcHJlZChfX3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAgX192YWx1ZSA9ICpfX2Zp cnN0OwogICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJuICsrX19yZXN1 bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xh c3MgX0JpbmFyeVByZWRpY2F0ZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykgewogIHJldHVybiBfX3VuaXF1 ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsCiAgICAgICAg ICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0 ZT4KX0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVz dWx0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFy eV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykg ewogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQog ICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytfX3Jlc3VsdCA9 ICpfX2ZpcnN0OwogIHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBf T3V0cHV0SXRlciB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5 X3ByZWQpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICByZXR1 cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9wcmVk LAogICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fcmVzdWx0ICkg KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIHVuaXF1ZShf Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkgewogIF9fZmlyc3QgPSBh ZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmly c3QsIF9fbGFzdCwgX19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs YXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciB1bmlxdWUoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVBy ZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKSB7CiAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJz dCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwg X19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9C aWRpcmVjdGlvbmFsSXRlcj4Kdm9pZCBfX3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly c3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICBiaWRpcmVjdGlv bmFsX2l0ZXJhdG9yX3RhZykgewogIHdoaWxlICh0cnVlKQogICAgaWYgKF9fZmlyc3QgPT0gX19s YXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xhc3QpCiAgICAgIHJldHVybjsKICAgIGVsc2UKICAgICAg aXRlcl9zd2FwKF9fZmlyc3QrKywgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyPgp2b2lkIF9fcmV2ZXJzZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0 b3JfdGFnKSB7CiAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3QpCiAgICBpdGVyX3N3YXAoX19maXJz dCsrLCAtLV9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+Cmlu bGluZSB2b2lkIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlv bmFsSXRlciBfX2xhc3QpIHsKICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9y X2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHJldmVyc2VfY29weShfQmlkaXJl Y3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCkgewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgLS1fX2xhc3Q7 CiAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9f cmVzdWx0Owp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0V1Y2xpZGVhblJpbmdFbGVtZW50PgpfRXVj bGlkZWFuUmluZ0VsZW1lbnQgX19nY2QoX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pCnsKICB3aGls ZSAoX19uICE9IDApIHsKICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX3QgPSBfX20gJSBfX247 CiAgICBfX20gPSBfX247CiAgICBfX24gPSBfX3Q7CiAgfQogIHJldHVybiBfX207Cn0KCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9f cm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0Zvcndh cmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosCiAgICAgICAgICAgICAgICAgICAg ICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAg cmV0dXJuIF9fbGFzdDsKICBpZiAoX19sYXN0ICA9PSBfX21pZGRsZSkKICAgIHJldHVybiBfX2Zp cnN0OwoKICBfRm9yd2FyZEl0ZXIgX19maXJzdDIgPSBfX21pZGRsZTsKICBkbyB7CiAgICBzd2Fw KCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQog ICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogIH0gd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCk7 CgogIF9Gb3J3YXJkSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0OwoKICBfX2ZpcnN0MiA9IF9f bWlkZGxlOwoKICB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KSB7CiAgICBzd2FwICgqX19maXJz dCsrLCAqX19maXJzdDIrKyk7CiAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgX19t aWRkbGUgPSBfX2ZpcnN0MjsKICAgIGVsc2UgaWYgKF9fZmlyc3QyID09IF9fbGFzdCkKICAgICAg X19maXJzdDIgPSBfX21pZGRsZTsKICB9CgogIHJldHVybiBfX25ld19taWRkbGU7Cn0KCgp0ZW1w bGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9CaWRpcmVj dGlvbmFsSXRlciBfX3JvdGF0ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpIHsKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkK ICAgIHJldHVybiBfX2xhc3Q7CiAgaWYgKF9fbGFzdCAgPT0gX19taWRkbGUpCiAgICByZXR1cm4g X19maXJzdDsKCiAgX19yZXZlcnNlKF9fZmlyc3QsICBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9p dGVyYXRvcl90YWcoKSk7CiAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsICAgYmlkaXJlY3Rp b25hbF9pdGVyYXRvcl90YWcoKSk7CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9f bWlkZGxlICE9IF9fbGFzdCkKICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9fbGFzdCk7CgogIGlm IChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7CiAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwg ICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgIHJldHVybiBfX2xhc3Q7CiAgfQog IGVsc2UgewogICAgX19yZXZlcnNlKF9fZmlyc3QsICBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9p dGVyYXRvcl90YWcoKSk7CiAgICByZXR1cm4gX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFz cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+Cl9SYW5kb21B Y2Nlc3NJdGVyIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9EaXN0YW5jZSAqLCBfVHAgKikgewoKICBfRGlzdGFuY2UgX19uID0gX19sYXN0 ICAgLSBfX2ZpcnN0OwogIF9EaXN0YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CiAgX0Rp c3RhbmNlIF9fbCA9IF9fbiAtIF9fazsKICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdCA9IF9f Zmlyc3QgKyAoX19sYXN0IC0gX19taWRkbGUpOwoKICBpZiAoX19rID09IF9fbCkgewogICAgc3dh cF9yYW5nZXMoX19maXJzdCwgX19taWRkbGUsIF9fbWlkZGxlKTsKICAgIHJldHVybiBfX3Jlc3Vs dDsKICB9CgogIF9EaXN0YW5jZSBfX2QgPSBfX2djZChfX24sIF9fayk7CgogIGZvciAoX0Rpc3Rh bmNlIF9faSA9IDA7IF9faSA8IF9fZDsgX19pKyspIHsKICAgIF9UcCBfX3RtcCA9ICpfX2ZpcnN0 OwogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19wID0gX19maXJzdDsKCiAgICBpZiAoX19rIDwgX19s KSB7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fbC9fX2Q7IF9faisrKSB7 CiAgICAgICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAgICAgICpfX3AgPSAqKF9f cCAtIF9fbCk7CiAgICAgICAgICBfX3AgLT0gX19sOwogICAgICAgIH0KCiAgICAgICAgKl9fcCA9 ICooX19wICsgX19rKTsKICAgICAgICBfX3AgKz0gX19rOwogICAgICB9CiAgICB9CgogICAgZWxz ZSB7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2og KyspIHsKICAgICAgICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAgICAgICAgICAqX19wID0g KihfX3AgKyBfX2spOwogICAgICAgICAgX19wICs9IF9fazsKICAgICAgICB9CgogICAgICAgICpf X3AgPSAqIChfX3AgLSBfX2wpOwogICAgICAgIF9fcCAtPSBfX2w7CiAgICAgIH0KICAgIH0KCiAg ICAqX19wID0gX190bXA7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19yZXN1bHQ7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIgcm90YXRl KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QpIHsKICByZXR1cm4gX19yb3RhdGUo X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90 eXBlKCBfX2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBf X2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091dHB1 dEl0ZXI+Cl9PdXRwdXRJdGVyIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0 ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBjb3B5KF9fZmlyc3Qs IF9fbWlkZGxlLCBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCiAKIAogCgp0 ZW1wbGF0ZSA8Y2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0Rpc3RhbmNlIF9fcmFuZG9tX251bWJl cihfRGlzdGFuY2UgX19uKSB7CgoKCiAgcmV0dXJuIGxyYW5kNDgoKSAlIF9fbjsKCn0KCiAKCnRl bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgcmFuZG9tX3NodWZm bGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1 cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9f bGFzdDsgKytfX2kpCiAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kb21fbnVtYmVy KChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyLCBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgp2b2lkIHJhbmRvbV9zaHVmZmxlKF9S YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpIHsKICBpZiAoX19m aXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f Zmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmly c3QgKyBfX3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3Mg X0ZvcndhcmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfT3V0cHV0 SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX291dCwgY29u c3QgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFu Y2UoX19maXJzdCwgX19sYXN0LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihf X24sIF9fcmVtYWluaW5nKTsKCiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlmIChfX3JhbmRvbV9u dW1iZXIoX19yZW1haW5pbmcpIDwgX19tKSB7CiAgICAgICpfX291dCA9ICpfX2ZpcnN0OwogICAg ICArK19fb3V0OwogICAgICAtLV9fbTsKICAgIH0KCiAgICAtLV9fcmVtYWluaW5nOwogICAgKytf X2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBf UmFuZG9tTnVtYmVyR2VuZXJhdG9yPgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfT3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewogIF9E aXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3Jl bWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsKCiAgd2hp bGUgKF9fbSA+IDApIHsKICAgIGlmIChfX3JhbmQoX19yZW1haW5pbmcpIDwgX19tKSB7CiAgICAg ICpfX291dCA9ICpfX2ZpcnN0OwogICAgICArK19fb3V0OwogICAgICAtLV9fbTsKICAgIH0KCiAg ICAtLV9fcmVtYWluaW5nOwogICAgKytfX2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg X0Rpc3RhbmNlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX20gPSAwOwogIF9EaXN0 YW5jZSBfX3QgPSBfX247CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247 ICsrX19tLCArK19fZmlyc3QpIAogICAgX19vdXRbX19tXSA9ICpfX2ZpcnN0OwoKICB3aGlsZSAo X19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsrX190OwogICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFu ZG9tX251bWJlcihfX3QpOwogICAgaWYgKF9fTSA8IF9fbikKICAgICAgX19vdXRbX19NXSA9ICpf X2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fb3V0ICsgX19tOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsCiAgICAgICAg ICBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+Cl9SYW5kb21B Y2Nlc3NJdGVyIF9fcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19vdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVy R2VuZXJhdG9yJiBfX3JhbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBfRGlzdGFuY2UgX19uKQp7CiAgX0Rpc3RhbmNlIF9fbSA9IDA7CiAgX0Rpc3RhbmNlIF9fdCA9 IF9fbjsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsr X19maXJzdCkKICAgIF9fb3V0W19fbV0gPSAqX19maXJzdDsKCiAgd2hpbGUgKF9fZmlyc3QgIT0g X19sYXN0KSB7CiAgICArK19fdDsKICAgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmQoX190KTsKICAg IGlmIChfX00gPCBfX24pCiAgICAgIF9fb3V0W19fTV0gPSAqX19maXJzdDsKICAgICsrX19maXJz dDsKICB9CgogIHJldHVybiBfX291dCArIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcmFu ZG9tX3NhbXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf X291dF9sYXN0KSAKewogIHJldHVybiBfX3JhbmRvbV9zYW1wbGUoX19maXJzdCwgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3QsIF9fb3V0X2xhc3QgLSBfX291dF9m aXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vz c0l0ZXIsIAogICAgICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KaW5saW5lIF9S YW5kb21BY2Nlc3NJdGVyCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9maXJzdCwg X1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfbGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVy R2VuZXJhdG9yJiBfX3JhbmQpIAp7CiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0LCBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9maXJzdCwgX19yYW5kLAogICAg ICAgICAgICAgICAgICAgICAgICAgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoKIAoKdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0ZvcndhcmRJdGVy IF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAoJCSAgICAgICAgIF9Gb3J3YXJkSXRl ciBfX2xhc3QsCgkJCSBfUHJlZGljYXRlICAgX19wcmVkLAoJCQkgZm9yd2FyZF9pdGVyYXRvcl90 YWcpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICB3aGlsZSAo X19wcmVkKCpfX2ZpcnN0KSkKICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19m aXJzdDsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CgogIHdoaWxlICgrK19fbmV4 dCAhPSBfX2xhc3QpCiAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgIHN3YXAoKl9fZmly c3QsICpfX25leHQpOwogICAgICArK19fZmlyc3Q7CiAgICB9CgogIHJldHVybiBfX2ZpcnN0Owp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpf QmlkaXJlY3Rpb25hbEl0ZXIgX19wYXJ0aXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0 LAoJCQkgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCgkJCSAgICAgICBiaWRpcmVjdGlvbmFsX2l0 ZXJhdG9yX3RhZykgewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGlsZSAodHJ1ZSkKICAgICAgaWYg KF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIGlm IChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICsrX19maXJzdDsKICAgICAgZWxzZQogICAgICAg IGJyZWFrOwogICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAodHJ1ZSkKICAgICAgaWYgKF9fZmlyc3Qg PT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIGlmICghX19wcmVk KCpfX2xhc3QpKQogICAgICAgIC0tX19sYXN0OwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAg ICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICsrX19maXJzdDsKICB9Cn0KCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfRm9yd2Fy ZEl0ZXIgcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAJCQkgICAgICBfRm9yd2Fy ZEl0ZXIgX19sYXN0LAoJCQkgICAgICBfUHJlZGljYXRlICAgX19wcmVkKSB7CiAgcmV0dXJuIF9f cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBf X2ZpcnN0ICkgKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVk aWNhdGUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9faW5wbGFjZV9zdGFibGVfcGFy dGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pIHsKICBp ZiAoX19sZW4gPT0gMSkKICAgIHJldHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0IDogX19m aXJzdDsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogIGFkdmFuY2UoX19taWRk bGUsIF9fbGVuIC8gMik7CiAgcmV0dXJuIHJvdGF0ZShfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlv bihfX2ZpcnN0LCBfX21pZGRsZSwgX19wcmVkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbGVuIC8gMiksCiAgICAgICAgICAgICAgICBfX21pZGRsZSwKICAg ICAgICAgICAgICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fbWlkZGxlLCBfX2xhc3Qs IF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu IC0gX19sZW4gLyAyKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Q b2ludGVyLCBjbGFzcyBfUHJlZGljYXRlLCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KX0Zv cndhcmRJdGVyIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNh dGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpIAp7CiAgaWYgKF9fbGVuIDw9 IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0Owog ICAgX1BvaW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0g X19sYXN0IDsgKytfX2ZpcnN0KQogICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAg ICpfX3Jlc3VsdDEgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0MTsKICAgICAgfQogICAg ICBlbHNlIHsKICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3Vs dDI7CiAgICAgIH0KICAgIGNvcHkoX19idWZmZXIsIF9fcmVzdWx0MiwgX19yZXN1bHQxKTsKICAg IHJldHVybiBfX3Jlc3VsdDE7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxl ID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICByZXR1cm4g cm90YXRlKF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSgKICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2ZpcnN0LCBfX21pZGRsZSwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAg IF9fbGVuIC8gMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpLAogICAgICAgICAgICAgICAgICAg IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2 ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSwgX19sYXN0LCBfX3ByZWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1 ZmZlcl9zaXplKSk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf UHJlZGljYXRlLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9Gb3J3YXJkSXRl cgpfX3N0YWJsZV9wYXJ0aXRpb25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0 ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX1Rw KiwgX0Rpc3RhbmNlKikKewogIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1RwPiBf X2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5zaXplKCkgPiAwKQogICAgcmV0dXJu IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJlcXVl c3RlZF9zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1 Zi5iZWdpbigpLCBfX2J1Zi5zaXplKCkpOwogIGVsc2UKICAgIHJldHVybiBfX2lucGxhY2Vfc3Rh YmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5l IF9Gb3J3YXJkSXRlciBzdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkgewog IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2ZpcnN0OwogIGVsc2UKICAgIHJl dHVybiBfX3N0YWJsZV9wYXJ0aXRpb25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0 ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+Cl9S YW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfVHAgX19waXZvdCkgCnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKCpfX2ZpcnN0IDwg X19waXZvdCkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAoX19waXZv dCA8ICpfX2xhc3QpCiAgICAgIC0tX19sYXN0OwogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkp CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAg ICArK19fZmlyc3Q7CiAgfQp9ICAgIAoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRl ZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QsIF9Db21wYXJlIF9f Y29tcCkgCnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19w aXZvdCkpCiAgICAgICsrX19maXJzdDsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKF9fY29tcChf X3Bpdm90LCAqX19sYXN0KSkKICAgICAgLS1fX2xhc3Q7CiAgICBpZiAoIShfX2ZpcnN0IDwgX19s YXN0KSkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0 KTsKICAgICsrX19maXJzdDsKICB9Cn0KCmNvbnN0IGludCBfX3N0bF90aHJlc2hvbGQgPSAxNjsK CiAKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9f dW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192 YWwpIHsKICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAgLS1fX25leHQ7CiAg d2hpbGUgKF9fdmFsIDwgKl9fbmV4dCkgewogICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICBfX2xh c3QgPSBfX25leHQ7CiAgICAtLV9fbmV4dDsKICB9CiAgKl9fbGFzdCA9IF9fdmFsOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+ CnZvaWQgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs IF9UcCBfX3ZhbCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2Nv bXApIHsKICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAgLS1fX25leHQ7ICAK ICB3aGlsZSAoX19jb21wKF9fdmFsLCAqX19uZXh0KSkgewogICAgKl9fbGFzdCA9ICpfX25leHQ7 CiAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAtLV9fbmV4dDsKICB9CiAgKl9fbGFzdCA9IF9fdmFs Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4KaW5saW5l IHZvaWQgX19saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKSB7CiAg X1RwIF9fdmFsID0gKl9fbGFzdDsKICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAgY29weV9i YWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOwogICAgKl9fZmlyc3QgPSBfX3Zh bDsKICB9CiAgZWxzZQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2xhc3QsIF9fdmFs KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNz IF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf X2xhc3QsIF9UcCosIF9Db21wYXJlIF9fY29tcCkgewogIF9UcCBfX3ZhbCA9ICpfX2xhc3Q7CiAg aWYgKF9fY29tcChfX3ZhbCwgKl9fZmlyc3QpKSB7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3Qs IF9fbGFzdCwgX19sYXN0ICsgMSk7CiAgICAqX19maXJzdCA9IF9fdmFsOwogIH0KICBlbHNlCiAg ICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9fbGFzdCwgX192YWwsIF9fY29tcCk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9S YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIGlm IChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOyAKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9f aSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fbGluZWFyX2luc2Vy dChfX2ZpcnN0LCBfX2ksIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnNlcnRpb25f c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19maXJzdCA9 PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Qg KyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fbGluZWFyX2luc2VydChfX2ZpcnN0LCBf X2ksIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9u X3NvcnRfYXV4KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopIHsKICBmb3Ig KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQog ICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0 aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgX191bmd1YXJkZWRfaW5z ZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkg KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNz IF9Db21wYXJlPgp2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfVHAqLCBfQ29tcGFyZSBfX2NvbXApIHsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9 IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgX191bmd1YXJkZWRfbGluZWFyX2lu c2VydChfX2ksIF9UcCgqX19pKSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0 aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgX191bmd1YXJk ZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2Zp cnN0ICkgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29y dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19z dGxfdGhyZXNob2xkKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBf X3N0bF90aHJlc2hvbGQpOwogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCAr IF9fc3RsX3RocmVzaG9sZCwgX19sYXN0KTsKICB9CiAgZWxzZQogICAgX19pbnNlcnRpb25fc29y dChfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs IGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4g X19zdGxfdGhyZXNob2xkKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3Qg KyBfX3N0bF90aHJlc2hvbGQsIF9fY29tcCk7CiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29y dChfX2ZpcnN0ICsgX19zdGxfdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAgfQogIGVsc2UK ICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1NpemU+CmlubGluZSBfU2l6ZSBfX2xnKF9TaXplIF9fbikgewogIF9TaXplIF9f azsKICBmb3IgKF9fayA9IDA7IF9fbiAhPSAxOyBfX24gPj49IDEpICsrX19rOwogIHJldHVybiBf X2s7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFz cyBfU2l6ZT4Kdm9pZCBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosCiAg ICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0KQp7CiAgd2hpbGUgKF9fbGFz dCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIGlmIChfX2RlcHRoX2xpbWl0ID09 IDApIHsKICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsKICAgICAg cmV0dXJuOwogICAgfQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2Zp cnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFz dCAtIDEpKSkpOwogICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCAoX1RwKikgMCwg X19kZXB0aF9saW1pdCk7CiAgICBfX2xhc3QgPSBfX2N1dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFz cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0NvbXBh cmU+CnZvaWQgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAg ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLAogICAgICAg ICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQp7CiAg d2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIGlmIChfX2Rl cHRoX2xpbWl0ID09IDApIHsKICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19s YXN0LCBfX2NvbXApOwogICAgICByZXR1cm47CiAgICB9CiAgICAtLV9fZGVwdGhfbGltaXQ7CiAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihf X2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4o Kl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2Zp cnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICooX19sYXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgX19jb21wKTsKICAg IF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9fZGVwdGhfbGltaXQs IF9fY29tcCk7CiAgICBfX2xhc3QgPSBfX2N1dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0 LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsK ICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsCiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19s YXN0IC0gX19maXJzdCkgKiAyKTsKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg X19sYXN0KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg X0NvbXBhcmU+CmlubGluZSB2b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkg ewogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0 LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwK ICAgICAgICAgICAgICAgICAgICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsCiAgICAgICAg ICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qs IF9fbGFzdCwgX19jb21wKTsKICB9Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz SXRlcj4Kdm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7 CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2Zp cnN0LCBfX2xhc3QpOwogICAgcmV0dXJuOwogIH0KICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRs ZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogIF9faW5wbGFjZV9zdGFibGVf c29ydChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxl LCBfX2xhc3QpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2lucGxhY2Vfc3RhYmxl X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19s YXN0IC0gX19maXJzdCA8IDE1KSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFz dCwgX19jb21wKTsKICAgIHJldHVybjsKICB9CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUg PSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICBfX2lucGxhY2Vfc3RhYmxlX3Nv cnQoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9f bWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0 LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlz dGFuY2U+CnZvaWQgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwgCiAgICAg ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2Ug X19zdGVwX3NpemUpIHsKICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsK CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgX19yZXN1bHQg PSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAg ICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAg ICAgICAgICAgICAgIF9fcmVzdWx0KTsKICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICB9Cgog IF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3Np emUpOwogIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9f c3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICBj bGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29ydF9sb29wKF9S YW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyMSBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkgewogIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3Rl cF9zaXplOwoKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICBf X3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAg ICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwK ICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgIF9fY29t cCk7CiAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgfQogIF9fc3RlcF9zaXplID0gbWluKF9E aXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwoKICBtZXJnZShfX2ZpcnN0 LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBf X2xhc3QsCiAgICAgICAgX19yZXN1bHQsCiAgICAgICAgX19jb21wKTsKfQoKY29uc3QgaW50IF9f c3RsX2NodW5rX3NpemUgPSA3OwogICAgICAgIAp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz c0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0LCBfRGlzdGFuY2UgX19jaHVua19zaXplKQp7CiAgd2hpbGUgKF9f bGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9f Zmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOwogICAgX19maXJzdCArPSBfX2NodW5rX3Np emU7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJl Pgp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplLCBfQ29tcGFy ZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsK ICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19j b21wKTsKICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogIH0KICBfX2luc2VydGlvbl9zb3J0 KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl c3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fbWVyZ2Vfc29y dF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlKikgewogIF9EaXN0YW5j ZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9f YnVmZmVyICsgX19sZW47CgogIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3Np emU7CiAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXpl KTsKCiAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29w KF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplKTsKICAgIF9fc3RlcF9zaXpl ICo9IDI7CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19m aXJzdCwgX19zdGVwX3NpemUpOwogICAgX19zdGVwX3NpemUgKj0gMjsKICB9Cn0KCnRlbXBsYXRl IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5j ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZl cihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgX0Rp c3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0 ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1 bmtfc2l6ZTsKICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVw X3NpemUsIF9fY29tcCk7CgogIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICBfX21l cmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwgX19j b21wKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZl ciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICBfX3N0 ZXBfc2l6ZSAqPSAyOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj bGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fc3RhYmxlX3NvcnRfYWRhcHRp dmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpIHsKICBfRGlzdGFuY2Ug X19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNzSXRlciBf X21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7 CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwg X19idWZmZXJfc2l6ZSk7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xh c3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9CiAgZWxzZSB7CiAgICBfX21lcmdlX3Nv cnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikw KTsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZl ciwgKF9EaXN0YW5jZSopMCk7CiAgfQogIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRk bGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksIAogICAgICAgICAgICAg ICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3Np emUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVy LCBjbGFzcyBfRGlzdGFuY2UsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19zdGFi bGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZm ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwg X0NvbXBhcmUgX19jb21wKSB7CiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3Qg KyAxKSAvIDI7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47 CiAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgX19zdGFibGVfc29ydF9hZGFwdGl2 ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIAogICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21p ZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29tcCk7CiAgfQogIGVsc2UgewogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVm ZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZm ZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIChfRGlzdGFuY2UqKTAsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIH0KICBfX21lcmdlX2FkYXB0aXZlKF9fZmly c3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLCAKICAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBf X2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l IHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBf RGlzdGFuY2UqKSB7CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9UcD4g YnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICBfX2lucGxh Y2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICBlbHNlIAogICAgX19zdGFibGVfc29y dF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFy ZT4KaW5saW5lIHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0 LCBfVHAqLCBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFy ZSBfX2NvbXApIHsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1RwPiBi dWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgIF9faW5wbGFj ZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgZWxzZSAKICAgIF9fc3Rh YmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKGJ1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+ CmlubGluZSB2b2lkIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIF9fc3RhYmxl X3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5 cGUoIF9fZmlyc3QgKSAsCiAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2Zp cnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29t cGFyZT4KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFy ZSBfX2NvbXApIHsKICBfX3N0YWJsZV9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAg IF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICwgCiAgICAgICAgICAgICAgICAgICAgX19jb21w KTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZv aWQgX19wYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz c0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0LCBfVHAqKSB7CiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICBmb3IgKF9SYW5k b21BY2Nlc3NJdGVyIF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgaWYg KCpfX2kgPCAqX19maXJzdCkgCiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9f aSwgX1RwKCpfX2kpLAogICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCAp ICk7CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S YW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0 ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0 KSB7CiAgX19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX192YWx1ZV90 eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nl c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAg ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKSB7 CiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogIGZvciAoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICBpZiAoX19j b21wKCpfX2ksICpfX2ZpcnN0KSkKICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwg X19pLCBfVHAoKl9faSksIF9fY29tcCwKICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUo IF9fZmlyc3QgKSApOwogIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5l IHZvaWQgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKSB7CiAg X19wYXJ0aWFsX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBf X2ZpcnN0ICkgLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9UcD4K X1JhbmRvbUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz c0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikgewogIGlmIChfX3Jlc3Vs dF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICBfUmFuZG9t QWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICB3aGlsZShf X2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkg ewogICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgKytfX3Jlc3VsdF9yZWFs X2xhc3Q7CiAgICArK19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19y ZXN1bHRfcmVhbF9sYXN0KTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmICgq X19maXJzdCA8ICpfX3Jlc3VsdF9maXJzdCkgCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRf Zmlyc3QsIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1 bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9UcCgq X19maXJzdCkpOwogICAgKytfX2ZpcnN0OwogIH0KICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3Qs IF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVt cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUg X1JhbmRvbUFjY2Vzc0l0ZXIKcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19y ZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0 X2xhc3QpIHsKICByZXR1cm4gX19wYXJ0aWFsX3NvcnRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9f cmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2Rpc3RhbmNlX3R5cGUoIF9fcmVzdWx0X2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmUsCiAgICAg ICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19wYXJ0 aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf Q29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSosIF9UcCopIHsKICBpZiAoX19yZXN1bHRfZmlyc3Qg PT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgd2hpbGUoX19maXJzdCAh PSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICpf X3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICsrX19yZXN1bHRfcmVhbF9sYXN0Owog ICAgKytfX2ZpcnN0OwogIH0KICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3Jl YWxfbGFzdCwgX19jb21wKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmIChf X2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgIF9fYWRqdXN0X2hlYXAoX19y ZXN1bHRfZmlyc3QsIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Uo X19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAg IF9UcCgqX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICsrX19maXJz dDsKICB9CiAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9f Y29tcCk7CiAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5l IF9SYW5kb21BY2Nlc3NJdGVyCnBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f cmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3Vs dF9sYXN0LCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19wYXJ0aWFsX3NvcnRfY29weShf X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29tcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2Rpc3RhbmNlX3R5cGUoIF9fcmVzdWx0X2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBf UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fbnRoX2VsZW1lbnQoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAg ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopIHsKICB3aGlsZSAoX19sYXN0IC0g X19maXJzdCA+IDMpIHsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgX191bmd1 YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsKICAgIGlmIChf X2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxzZSAKICAgICAgX19s YXN0ID0gX19jdXQ7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBudGhfZWxlbWVu dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAg ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgX19udGhf ZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg X0NvbXBhcmU+CnZvaWQgX19udGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf UmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgd2hpbGUgKF9fbGFzdCAtIF9f Zmlyc3QgPiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFy ZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfVHAoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLCAKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCkpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb21wKTsKICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9 IF9fY3V0OwogICAgZWxzZSAKICAgICAgX19sYXN0ID0gX19jdXQ7CiAgfQogIF9faW5zZXJ0aW9u X3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv bUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBudGhfZWxlbWVudChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIF9f bnRoX2VsZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0 ICkgLCBfX2NvbXApOwp9CgoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg X1RwLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBfVHAmIF9fdmFsLCBfRGlzdGFuY2UqKSAKewogIF9EaXN0YW5jZSBfX2xlbiA9 IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFs ZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9f aGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9f bWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgIF9fZmly c3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19o YWxmIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgfQogIHJldHVy biBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+Cmlu bGluZSBfRm9yd2FyZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg X1RwJiBfX3ZhbCkgewogIHJldHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192 YWwsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFy ZSwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19sb3dlcl9ib3VuZChfRm9yd2FyZEl0 ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAg X0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsK ICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9f bGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJz dDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKCpfX21pZGRs ZSwgX192YWwpKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0Owog ICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAgX19s ZW4gPSBfX2hhbGY7CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgX0ZvcndhcmRJdGVy IGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJl IF9fY29tcCkgewogIHJldHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWws IF9fY29tcCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3Qg KSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9E aXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U cCYgX192YWwsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNl KF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJ dGVyIF9fbWlkZGxlOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+ PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxm KTsKICAgIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBl bHNlIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9f bGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogIH0KICByZXR1cm4gX19maXJzdDsKfQoK dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJ dGVyIHVwcGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpIHsKICBy ZXR1cm4gX191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAg ICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5j ZT4KX0ZvcndhcmRJdGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192 YWwsIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7 CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsK ICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFs ZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlk ZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgX19s ZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAr K19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogIH0KICBy ZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Rw LCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4g X191cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAgICAgICAg ICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0Zvcndh cmRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgX0Rp c3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19s YXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUs IF9fbGVmdCwgX19yaWdodDsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19s ZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9f aGFsZik7CiAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgX19maXJzdCA9IF9fbWlk ZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwog ICAgfQogICAgZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgIF9fbGVuID0gX19oYWxm OwogICAgZWxzZSB7CiAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxl LCBfX3ZhbCk7CiAgICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICBfX3JpZ2h0ID0g dXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19maXJzdCwgX192YWwpOwogICAgICByZXR1cm4gcGFp cjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgIH0KICB9 CiAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmly c3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBw YWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkgewogIHJldHVy biBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAgICAgICAgICAgICAgICAg ICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpw YWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgpfX2VxdWFsX3JhbmdlKF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAg ICAgICAgIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9 IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFs ZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgd2hpbGUgKF9f bGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJz dDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKCpfX21pZGRs ZSwgX192YWwpKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0Owog ICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UgaWYgKF9fY29t cChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAg ICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2NvbXAp OwogICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgX19yaWdodCA9IHVwcGVyX2Jv dW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsLCBfX2NvbXApOwogICAgICByZXR1cm4gcGFp cjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgIH0KICB9 CiAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmly c3QpOwp9ICAgICAgICAgICAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9U cCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVy PgplcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg Y29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0dXJu IF9fZXF1YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAg ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7Cn0gCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIGNv bnN0IF9UcCYgX192YWwpIHsKICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJz dCwgX19sYXN0LCBfX3ZhbCk7CiAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3ZhbCA8ICpf X2kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9D b21wYXJlPgpib29sIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAg ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2Vy X2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7CiAgcmV0dXJuIF9faSAhPSBf X2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9faSk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRl ciBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg ICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAg ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgd2hpbGUgKF9fZmlyc3Qx ICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MiA8 ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJz dDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAr K19fZmlyc3QxOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJz dDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJ dGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyIG1lcmdlKF9JbnB1dEl0 ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5w dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg X091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkgewogIHdoaWxlIChfX2ZpcnN0 MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9f Zmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAg KytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7 CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gY29w eShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsK fQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNl Pgp2b2lkIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9f bGVuMikgewogIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgIHJldHVybjsKICBp ZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgIGlmICgqX19taWRkbGUgPCAqX19maXJzdCkK ICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIHJldHVybjsKICB9CiAgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogIF9E aXN0YW5jZSBfX2xlbjIyID0gMDsKICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICBfX2xlbjEx ID0gX19sZW4xIC8gMjsKICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgX19z ZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsK ICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogIH0KICBlbHNl IHsKICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9f bGVuMjIpOwogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwg Kl9fc2Vjb25kX2N1dCk7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4x MSk7CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUKICAgID0gcm90YXRlKF9f Zmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICBfX21lcmdlX3dpdGhvdXRfYnVm ZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAg ICAgICAgICBfX2xlbjExLCBfX2xlbjIyKTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3 X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAg ICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9C aWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBf X21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19sZW4x ID09IDAgfHwgX19sZW4yID09IDApCiAgICByZXR1cm47CiAgaWYgKF9fbGVuMSArIF9fbGVuMiA9 PSAyKSB7CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgICBpdGVyX3N3 YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgcmV0dXJuOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9j dXQgPSBfX21pZGRsZTsKICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgX0Rpc3RhbmNlIF9fbGVu MjIgPSAwOwogIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAy OwogICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICBfX3NlY29uZF9jdXQgPSBs b3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICBk aXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICB9CiAgZWxzZSB7CiAg ICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIy KTsKICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3Nl Y29uZF9jdXQsIF9fY29tcCk7CiAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19s ZW4xMSk7CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUKICAgID0gcm90YXRl KF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICBfX21lcmdlX3dpdGhvdXRf YnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsIF9fbGVu MjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogIF9fbWVyZ2Vfd2l0aG91dF9i dWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4x MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29tcCk7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25h bEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgpfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f cm90YXRlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbWlkZGxlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBf X2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkgewogIF9CaWRpcmVjdGlv bmFsSXRlcjIgX19idWZmZXJfZW5kOwogIGlmIChfX2xlbjEgPiBfX2xlbjIgJiYgX19sZW4yIDw9 IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFz dCwgX19idWZmZXIpOwogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0 KTsKICAgIHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3QpOwogIH0K ICBlbHNlIGlmIChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX19idWZmZXJfZW5kID0g Y29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgY29weShfX21pZGRsZSwgX19s YXN0LCBfX2ZpcnN0KTsKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fYnVmZmVyLCBfX2J1ZmZl cl9lbmQsIF9fbGFzdCk7CiAgfQogIGVsc2UKICAgIHJldHVybiByb3RhdGUoX19maXJzdCwgX19t aWRkbGUsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBj bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJ dGVyMz4KX0JpZGlyZWN0aW9uYWxJdGVyMyBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFs SXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCkgewog IGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJz dDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJl dHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgLS1fX2xh c3QxOwogIC0tX19sYXN0MjsKICB3aGlsZSAodHJ1ZSkgewogICAgaWYgKCpfX2xhc3QyIDwgKl9f bGFzdDEpIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgaWYgKF9fZmlyc3Qx ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19s YXN0MiwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAg Ki0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAg ICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQp OwogICAgICAtLV9fbGFzdDI7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0 aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9C aWRpcmVjdGlvbmFsSXRlcjMsIGNsYXNzIF9Db21wYXJlPgpfQmlkaXJlY3Rpb25hbEl0ZXIzIF9f bWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19m aXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h bEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICBy ZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogIGlmIChf X2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9f bGFzdDEsIF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1fX2xhc3QyOwogIHdoaWxlICh0cnVl KSB7CiAgICBpZiAoX19jb21wKCpfX2xhc3QyLCAqX19sYXN0MSkpIHsKICAgICAgKi0tX19yZXN1 bHQgPSAqX19sYXN0MTsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0 dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAt LV9fbGFzdDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsK ICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dh cmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDI7CiAgICB9 CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFu Y2UsIGNsYXNzIF9Qb2ludGVyPgp2b2lkIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJ dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19t aWRkbGUsIAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIs CiAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVm ZmVyX3NpemUpIHsKICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJf c2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRs ZSwgX19idWZmZXIpOwogICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUs IF9fbGFzdCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXpl KSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9f YnVmZmVyKTsKICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVy LCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgfQogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29u ZF9jdXQgPSBfX21pZGRsZTsKICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgIF9EaXN0YW5j ZSBfX2xlbjIyID0gMDsKICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgX19sZW4xMSA9 IF9fbGVuMSAvIDI7CiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICBf X3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQp OwogICAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsgCiAgICB9 CiAgICBlbHNlIHsKICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgIGFkdmFuY2UoX19z ZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2Zp cnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9f Zmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19t aWRkbGUgPQogICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9f c2Vjb25kX2N1dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19s ZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJnZV9hZGFwdGl2ZShfX2Zp cnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAg ICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX21lcmdlX2FkYXB0 aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEs CiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZl cl9zaXplKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNz IF9EaXN0YW5jZSwgY2xhc3MgX1BvaW50ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9p ZCBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCAKICAgICAgICAg ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwgCiAgICAgICAgICAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg X0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAg IF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAg ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9f bGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5 KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBtZXJnZShfX2J1ZmZlciwgX19idWZm ZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOwogIH0KICBlbHNlIGlm IChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0g Y29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBfX21lcmdlX2JhY2t3YXJkKF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgIF9fY29tcCk7CiAgfQogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVy IF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9j dXQgPSBfX21pZGRsZTsKICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgIF9EaXN0YW5jZSBf X2xlbjIyID0gMDsKICAgIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgX19sZW4xMSA9IF9f bGVuMSAvIDI7CiAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICBfX3Nl Y29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9f Y29tcCk7CiAgICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOyAg IAogICAgfQogICAgZWxzZSB7CiAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICBhZHZh bmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91 bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgIGRpc3Rh bmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1 dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAg ICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJn ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAog ICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19j b21wKTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9f bGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19s ZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgfQp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5s aW5lIHZvaWQgX19pbnBsYWNlX21lcmdlX2F1eChfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRk bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f bGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikgewogIF9EaXN0YW5jZSBfX2xlbjEgPSAwOwogIGRpc3Rh bmNlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xlbjIgPSAwOwog IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3JhcnlfYnVmZmVy PF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChf X2J1Zi5iZWdpbigpID09IDApCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9f bWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICBlbHNlCiAgICBfX21lcmdlX2FkYXB0 aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAg ICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2UoX19idWYuc2l6ZSgpKSk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwgCiAgICAgICAgICBj bGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2lucGxhY2VfbWVy Z2VfYXV4KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2Uq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIF9E aXN0YW5jZSBfX2xlbjEgPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEp OwogIF9EaXN0YW5jZSBfX2xlbjIgPSAwOwogIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9f bGVuMik7CgogIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1 ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICBfX21lcmdl X3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4y LCBfX2NvbXApOwogIGVsc2UKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUs IF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2lu KCksIF9EaXN0YW5jZShfX2J1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICBfX2NvbXAp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgppbmxpbmUgdm9pZCBpbnBs YWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19taWRk bGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgcmV0dXJuOwogIF9faW5wbGFjZV9tZXJnZV9h dXgoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fdmFs dWVfdHlwZSggX19maXJzdCApICwgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2 b2lkIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAg ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkg ewogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgIHJl dHVybjsKICBfX2lucGxhY2VfbWVyZ2VfYXV4KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsIF9fZGlzdGFuY2Vf dHlwZSggX19maXJzdCApICwKICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCiAKIAog CiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wg aW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpIHsKICB3 aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYg KCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZigq X19maXJzdDEgPCAqX19maXJzdDIpIAogICAgICArK19fZmlyc3QxOwogICAgZWxzZQogICAgICAr K19fZmlyc3QxLCArK19fZmlyc3QyOwoKICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKfQoK dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0Nv bXBhcmU+CmJvb2wgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f bGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f bGFzdDIsIF9Db21wYXJlIF9fY29tcCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3Qx KSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19m aXJzdDIpKSAKICAgICAgKytfX2ZpcnN0MTsKICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MSwgKytf X2ZpcnN0MjsKCiAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0 cHV0SXRlciBzZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz dDEsCiAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRl cjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7 CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0Mikgewog ICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJz dDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19m aXJzdDEpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwog ICAgfQogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2Zp cnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVy biBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3Vs dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBj bGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBz ZXRfdW5pb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0 MiwKICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBf X2NvbXApIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh c3QyKSB7CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAqX19y ZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICB9CiAgICBlbHNlIGlmIChf X2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0 MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAq X19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICAr K19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2Zp cnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF9p bnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0 ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y ZXN1bHQpIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh c3QyKSAKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIAogICAgICArK19fZmlyc3QxOwog ICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSAKICAgICAgKytfX2ZpcnN0MjsKICAg IGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAg ICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0 Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFz cyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRf aW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f cmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0 MikpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19m aXJzdDEpKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpf X2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jl c3VsdDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBz ZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0 ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0KSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0 MikKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9f Zmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxz ZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7 CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHko X19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsIAogICAgICAgICAgY2xh c3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmly c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApIHsKICB3aGls ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9f Y29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx OwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAo X19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2Ug ewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5 KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ dGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciAK c2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs IF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl ciBfX3Jlc3VsdCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9 IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICpfX3Jlc3Vs dCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0K ICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAq X19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBl bHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4g Y29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQp KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xh c3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIgCnNl dF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf SW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICB3 aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYg KF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly c3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBp ZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAqX19yZXN1bHQgPSAqX19m aXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNl IHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29w eShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsK fQoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgbWF4X2Vs ZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpIHsKICBpZiAo X19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3Vs dCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpIAogICAgaWYgKCpfX3Jl c3VsdCA8ICpfX2ZpcnN0KQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVz dWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4KX0Zv cndhcmRJdGVyIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAg aWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19y ZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSAKICAgIGlmIChf X2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4g X19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBt aW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkgewog IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9f cmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkgCiAgICBpZiAo Kl9fZmlyc3QgPCAqX19yZXN1bHQpCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4g X19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJl PgpfRm9yd2FyZEl0ZXIgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp IHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRl ciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpIAogICAg aWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0KSkKICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0 OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u YWxJdGVyPgpib29sIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAg ICByZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytf X2k7CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0 OwogIC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19p OwogICAgLS1fX2k7CiAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQogICAgICAg IHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0 KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAg ICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAg fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4K Ym9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVj dGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQog ICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKF9fY29t cCgqX19pLCAqX19paSkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsK ICAgICAgd2hpbGUgKCFfX2NvbXAoKl9faSwgKi0tX19qKSkKICAgICAgICB7fQogICAgICBpdGVy X3N3YXAoX19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVy biB0cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19m aXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUg PGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4KYm9vbCBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVj dGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KSB7CiAgaWYgKF9f Zmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBf X2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZh bHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rp b25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKCpfX2lpIDwgKl9faSkgewog ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAoISgqLS1f X2ogPCAqX19pKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICBy ZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9f aSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0 dXJuIGZhbHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl ciwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0 ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVy biBmYWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBp ZiAoX19pID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1f X2k7CgogIGZvcig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAt LV9faTsKICAgIGlmIChfX2NvbXAoKl9faWksICpfX2kpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpCiAg ICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBf X2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkg ewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAg IH0KICB9Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0 ZXI+Cl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJ dGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJz dDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyKQp7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx OyArK19fZmlyc3QxKSAKICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBf X2l0ZXIgIT0gX19sYXN0MjsgKytfX2l0ZXIpCiAgICAgIGlmICgqX19maXJzdDEgPT0gKl9faXRl cikKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgcmV0dXJuIF9fbGFzdDE7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVk aWNhdGU+Cl9JbnB1dEl0ZXIgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5w dXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19m aXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgX0Jp bmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsr X19maXJzdDEpIAogICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRl ciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2l0 ZXIpKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICByZXR1cm4gX19sYXN0MTsKfQoKCiAKIAog CiAKCiAKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+ Cl9Gb3J3YXJkSXRlcjEgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2Fy ZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9f Zmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBm b3J3YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19maXJz dDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0ZvcndhcmRJ dGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICB3aGlsZSAoMSkgewogICAgICBfRm9yd2FyZEl0 ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2Zp cnN0MiwgX19sYXN0Mik7CiAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAg ICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIGVsc2UgewogICAgICAgIF9fcmVzdWx0ID0gX19uZXdf cmVzdWx0OwogICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICsrX19maXJz dDE7CiAgICAgIH0KICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBj bGFzcyBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0Zv cndhcmRJdGVyMSBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRl cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJz dDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndh cmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAg ICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFz dDIpCiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1 bHQgPSBfX2xhc3QxOwogICAgd2hpbGUgKDEpIHsKICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19y ZXN1bHQKICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFz dDIsIF9fY29tcCk7CiAgICAgIGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICBy ZXR1cm4gX19yZXN1bHQ7CiAgICAgIGVsc2UgewogICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVz dWx0OwogICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICsrX19maXJzdDE7 CiAgICAgIH0KICAgIH0KICB9Cn0KCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ dGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMj4KX0JpZGlyZWN0aW9uYWxJdGVyMQpfX2Zp bmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEg X19sYXN0MSwKICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJl Y3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90 YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJh dG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICB0eXBlZGVmIHJldmVyc2VfaXRl cmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICBfUmV2SXRlcjEgX19ybGFz dDEoX19maXJzdDEpOwogIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgX1Jldkl0ZXIx IF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0Mik7Cgog IGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsK ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAg YWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICByZXR1 cm4gX19yZXN1bHQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwg Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNh dGU+Cl9CaWRpcmVjdGlvbmFsSXRlcjEKX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f Zmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAg ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh ZywgCiAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKICB0eXBlZGVmIHJldmVy c2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogIHR5cGVkZWYgcmV2 ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogIF9SZXZJdGVy MSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICBf UmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxh c3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKCiAgaWYgKF9fcnJl c3VsdCA9PSBfX3JsYXN0MSkKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0JpZGly ZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9f cmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3Vs dDsKICB9Cn0KCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0Zvcndh cmRJdGVyMj4KaW5saW5lIF9Gb3J3YXJkSXRlcjEgCmZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19m aXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwgCiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19m aXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKewogIHJldHVybiBfX2ZpbmRfZW5kKF9fZmly c3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICBfX2l0 ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0MSApICwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh dG9yX2NhdGVnb3J5KCBfX2ZpcnN0MiApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLCAKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNh dGU+CmlubGluZSBfRm9yd2FyZEl0ZXIxIApmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3Qx LCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsIAogICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3Qy LCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21w KQp7CiAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xh c3QyLAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QxICkg LAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QyICkgLAog ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KYm9vbCBfX2lzX2hlYXAoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX3BhcmVudCA9 IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGls ZCkgewogICAgaWYgKF9fZmlyc3RbX19wYXJlbnRdIDwgX19maXJzdFtfX2NoaWxkXSkgCiAgICAg IHJldHVybiBmYWxzZTsKICAgIGlmICgoX19jaGlsZCAmIDEpID09IDApCiAgICAgICsrX19wYXJl bnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KYm9vbCBfX2lz X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1N0cmljdFdlYWtPcmRlcmluZyBfX2Nv bXAsCiAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX24pCnsKICBfRGlzdGFuY2UgX19wYXJlbnQg PSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwgX19uOyArK19fY2hp bGQpIHsKICAgIGlmIChfX2NvbXAoX19maXJzdFtfX3BhcmVudF0sIF9fZmlyc3RbX19jaGlsZF0p KQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoKF9fY2hpbGQgJiAxKSA9PSAwKQogICAgICAr K19fcGFyZW50OwogIH0KICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyPgppbmxpbmUgYm9vbCBpc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwg X19sYXN0IC0gX19maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs IGNsYXNzIF9TdHJpY3RXZWFrT3JkZXJpbmc+CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CiAgcmV0dXJuIF9faXNfaGVhcChf X2ZpcnN0LCBfX2NvbXAsIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgogCiAKIAoKdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlcj4KYm9vbCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G b3J3YXJkSXRlciBfX2xhc3QpCnsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4g dHJ1ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9yICgrK19fbmV4dDsg X19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpIHsKICAgIGlmICgq X19uZXh0IDwgKl9fZmlyc3QpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0cnVl Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVy aW5nPgpib29sIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKICBpZiAo X19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gdHJ1ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4 dCA9IF9fZmlyc3Q7CiAgZm9yICgrK19fbmV4dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9 IF9fbmV4dCwgKytfX25leHQpIHsKICAgIGlmIChfX2NvbXAoKl9fbmV4dCwgKl9fZmlyc3QpKQog ICAgICByZXR1cm4gZmFsc2U7CiAgfQoKICByZXR1cm4gdHJ1ZTsKfQoKCgoKCiAKCgoKIAogCiAK IyAzNCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9zcGFyYy1zdW4tc29sYXJpczIuOC8yLjk1LjMv Li4vLi4vLi4vLi4vaW5jbHVkZS9nKystMy9hbGdvcml0aG0iIDIgMwoKCgoKIAogCiAKIyAzMyAi Li8uLi9TcmNTaGFyZWQvTWV0YU1lbW9yeS5jcHAiIDIKCgoKc3RydWN0IEVtVGFnZ2VkUGFsbUNo dW5rIDogcHVibGljIEVtUGFsbUNodW5rCnsKCUVtVGFnZ2VkUGFsbUNodW5rICh2b2lkKSB7fQoJ RW1UYWdnZWRQYWxtQ2h1bmsgKGNvbnN0IEVtUGFsbUNodW5rJiBjaHVuaywgQm9vbCBpc1N5c3Rl bUNodW5rKSA6CgkJRW1QYWxtQ2h1bmsgKGNodW5rKSwKCQlmSXNTeXN0ZW1DaHVuayAoaXNTeXN0 ZW1DaHVuaykKCQl7fQoKCUJvb2wJZklzU3lzdGVtQ2h1bms7Cn07Cgp0eXBlZGVmIHZlY3RvcjxF bVRhZ2dlZFBhbG1DaHVuaz4JRW1UYWdnZWRQYWxtQ2h1bmtMaXN0OwoKc3RhdGljIEVtVGFnZ2Vk UGFsbUNodW5rTGlzdAlnVGFnZ2VkQ2h1bmtzOwpzdGF0aWMgQm9vbAkJCQkJCWdIYXZlTGFzdENo dW5rOwpzdGF0aWMgRW1UYWdnZWRQYWxtQ2h1bmsJCWdMYXN0Q2h1bms7CgpzdGF0aWMgdmVjdG9y PE1lbUhhbmRsZT4JCWdCaXRtYXBIYW5kbGVMaXN0OwpzdGF0aWMgdmVjdG9yPE1lbVB0cj4JCQln Qml0bWFwUG9pbnRlckxpc3Q7CgplbnVtCnsKCWtVSVdpbmRvdywKCWtVSUJpdG1hcAp9OwoKdHlw ZWRlZiBCb29sICgqSXRlckZuKSAoZW11cHRyIG9iamVjdCwgdm9pZCogZGF0YSwgaW50IHR5cGUp OwpzdGF0aWMgQm9vbCBQcnZDaGVja1VJT2JqZWN0IChlbXVwdHIgb2JqZWN0LCB2b2lkKiBkYXRh LCBpbnQgdHlwZSk7CnN0YXRpYyBCb29sIFBydk1hcmtVSU9iamVjdCAoZW11cHRyIG9iamVjdCwg dm9pZCogZGF0YSwgaW50IHR5cGUpOwpzdGF0aWMgQm9vbCBQcnZVbm1hcmtVSU9iamVjdCAoZW11 cHRyIG9iamVjdCwgdm9pZCogZGF0YSwgaW50IHR5cGUpOwpzdGF0aWMgQm9vbCBQcnZGb3JFYWNo Qml0bWFwIChJdGVyRm4gZm4sIHZvaWQqIGRhdGEpOwpzdGF0aWMgQm9vbCBQcnZGb3JFYWNoV2lu ZG93IChJdGVyRm4gZm4sIHZvaWQqIGRhdGEpOwpzdGF0aWMgQm9vbCBQcnZGb3JFYWNoVUlPYmpl Y3QgKEl0ZXJGbiBmbiwgdm9pZCogZGF0YSk7CgoKI3ByYWdtYSBtYXJrIC0KCiAKIAogCgp2b2lk IE1ldGFNZW1vcnk6OkluaXRpYWxpemUgKHZvaWQpCnsKfQoKCiAKIAogCgp2b2lkIE1ldGFNZW1v cnk6OlJlc2V0ICh2b2lkKQp7CglnVGFnZ2VkQ2h1bmtzLmNsZWFyICgpOwoJZ0hhdmVMYXN0Q2h1 bmsgPSBmYWxzZTsKCglnQml0bWFwSGFuZGxlTGlzdC5jbGVhciAoKTsKCWdCaXRtYXBQb2ludGVy TGlzdC5jbGVhciAoKTsKfQoKCiAKIAogCgp2b2lkIE1ldGFNZW1vcnk6OlNhdmUgKFNlc3Npb25G aWxlJiBmKQp7Cgljb25zdCBsb25nCWtDdXJyZW50VmVyc2lvbiA9IDE7CgoJQ2h1bmsJCQljaHVu azsKCUVtU3RyZWFtQ2h1bmsJcyAoY2h1bmspOwoKCXMgPDwga0N1cnJlbnRWZXJzaW9uOwoKCWdC aXRtYXBIYW5kbGVMaXN0LmNsZWFyICgpOwoJZ0JpdG1hcFBvaW50ZXJMaXN0LmNsZWFyICgpOwoK CXMgPDwgZ0JpdG1hcEhhbmRsZUxpc3Q7CglzIDw8IGdCaXRtYXBQb2ludGVyTGlzdDsKCglmLldy aXRlTWV0YUluZm8gKGNodW5rKTsKfQoKCiAKIAogCgp2b2lkIE1ldGFNZW1vcnk6OkxvYWQgKFNl c3Npb25GaWxlJiBmKQp7CglnVGFnZ2VkQ2h1bmtzLmNsZWFyICgpOwoJZ0hhdmVMYXN0Q2h1bmsg PSBmYWxzZTsKCglDaHVuawljaHVuazsKCWlmIChmLlJlYWRNZXRhSW5mbyAoY2h1bmspKQoJewoJ CWxvbmcJCQl2ZXJzaW9uOwoJCUVtU3RyZWFtQ2h1bmsJcyAoY2h1bmspOwoKCQlzID4+IHZlcnNp b247CgoJCWlmICh2ZXJzaW9uID49IDEpCgkJewoJCQlzID4+IGdCaXRtYXBIYW5kbGVMaXN0OwoJ CQlzID4+IGdCaXRtYXBQb2ludGVyTGlzdDsKCgkJCWdCaXRtYXBIYW5kbGVMaXN0LmNsZWFyICgp OwoJCQlnQml0bWFwUG9pbnRlckxpc3QuY2xlYXIgKCk7CgkJfQoJfQp9CgoKIAogCiAKCnZvaWQg TWV0YU1lbW9yeTo6RGlzcG9zZSAodm9pZCkKewp9CgoKIyAxNjYgIi4vLi4vU3JjU2hhcmVkL01l dGFNZW1vcnkuY3BwIgoKCgojIDIwNCAiLi8uLi9TcmNTaGFyZWQvTWV0YU1lbW9yeS5jcHAiCgoK CiMgMjE2ICIuLy4uL1NyY1NoYXJlZC9NZXRhTWVtb3J5LmNwcCIKCgoKIAogCiAKIAogCiAKIAoK IAogCiAKIAoKdm9pZCBNZXRhTWVtb3J5OjpTeW5jT25lQ2h1bmsgKGNvbnN0IEVtUGFsbUNodW5r JiBjaHVuaykKewoJIAoKCU1hcmtDaHVua0hlYWRlciAoY2h1bmsuSGVhZGVyU3RhcnQgKCksIGNo dW5rLkhlYWRlckVuZCAoKSk7CgoJIAoKCSAKCglpZiAoY2h1bmsuRnJlZSAoKSkKCXsKCQlNYXJr RnJlZUNodW5rIChjaHVuay5Cb2R5U3RhcnQgKCksIGNodW5rLkJvZHlFbmQgKCkpOwoJfQoKCSAK CgllbHNlIGlmIChjaHVuay5Mb2NrQ291bnQgKCkgPT0gMCkKCXsKCQlNYXJrVW5sb2NrZWRDaHVu ayAoY2h1bmsuQm9keVN0YXJ0ICgpLCBjaHVuay5Cb2R5RW5kICgpKTsKCX0KCgkgCgoJZWxzZQoJ ewoJCU1hcmtUb3RhbEFjY2VzcyAoY2h1bmsuQm9keVN0YXJ0ICgpLCBjaHVuay5Cb2R5RW5kICgp KTsKCX0KCgkgCgoJaWYgKGNodW5rLlRyYWlsZXJTaXplICgpID4gMCkKCXsKCQlNYXJrQ2h1bmtU cmFpbGVyIChjaHVuay5UcmFpbGVyU3RhcnQgKCksIGNodW5rLlRyYWlsZXJFbmQgKCkpOwoJfQp9 CgoKIAogCiAKCnZvaWQgTWV0YU1lbW9yeTo6UmVzeW5jIChjb25zdCBFbVBhbG1DaHVua0xpc3Qm IGRlbHRhKQp7CglpZiAoZGVsdGEuc2l6ZSAoKSA9PSAwKQoJCXJldHVybjsKCgkgCgkgCgoJRW1Q YWxtQ2h1bmtMaXN0Ojpjb25zdF9pdGVyYXRvcglpdGVyID0gZGVsdGEuYmVnaW4gKCk7Cgljb25z dCBFbVBhbG1IZWFwKgloZWFwID0gRW1QYWxtSGVhcDo6R2V0SGVhcEJ5UHRyIChpdGVyLT5TdGFy dCAoKSk7CglpZiAoIWhlYXApCgkJcmV0dXJuOwoKCSAKCglpZiAoaGVhcC0+SGVhcElEICgpICE9 IDApCgkJcmV0dXJuOwoKCXdoaWxlIChpdGVyICE9IGRlbHRhLmVuZCAoKSkKCXsKCQlTeW5jT25l Q2h1bmsgKCppdGVyKTsKCQkrK2l0ZXI7Cgl9CgoJIAoJIAoKCU1ldGFNZW1vcnk6Ok1hcmtVSU9i amVjdHMgKCk7CgoJIAoJIAoJIAoJIAoKCUVtUGFsbU1QVExpc3Q6OmNvbnN0X2l0ZXJhdG9yCSAg bXB0X2l0ZXIgID0gKCAqaGVhcCApLkdldE1QVExpc3RCZWdpbiAoKTsJRW1QYWxtTVBUTGlzdDo6 Y29uc3RfaXRlcmF0b3IJICBlbmQgID0gKCAqaGVhcCApLkdldE1QVExpc3RFbmQgKCk7CXdoaWxl ICggIG1wdF9pdGVyICAhPSAgIGVuZCApIAoJewoJCU1hcmtNUFQgKG1wdF9pdGVyLT5TdGFydCAo KSwgbXB0X2l0ZXItPlRhYmxlU3RhcnQgKCkpOwoJCU1hcmtNUFQgKG1wdF9pdGVyLT5UYWJsZVN0 YXJ0ICgpLCBtcHRfaXRlci0+RW5kICgpKTsKCQkrK21wdF9pdGVyOwoJfQoKCSAKCSAKCSAKCSAK CglTdGFja1JhbmdlCXJhbmdlID0gRW1QYWxtT1M6OkdldEJvb3RTdGFjayAoKTsKCU1hcmtUb3Rh bEFjY2VzcyAocmFuZ2UuZkJvdHRvbSwgcmFuZ2UuZlRvcCk7Cn0KCgogCiAKIAogCiAKIAoKRXJy b3JzOjpFQWNjZXNzVHlwZSBNZXRhTWVtb3J5OjpHZXRXaGF0SGFwcGVuZWQgKGVtdXB0ciBhZGRy ZXNzLCBsb25nIHNpemUsIEJvb2wgZm9yUmVhZCkKewoJIAoKCWlmIChDRW5hYmxlRnVsbEFjY2Vz czo6QWNjZXNzT0sgKCkpCgkJcmV0dXJuIEVycm9yczo6a09LQWNjZXNzOwoKCUNFbmFibGVGdWxs QWNjZXNzCW11bmdlOwkgCgoJRXJyb3JzOjpFQWNjZXNzVHlwZQl3aGF0SGFwcGVuZWQgPSBFcnJv cnM6OmtVbmtub3duQWNjZXNzOwoKCSAKCglpZiAoTWV0YU1lbW9yeTo6SXNMb3dNZW1vcnkgKGFk ZHJlc3MsIHNpemUpKQoJewoJCXdoYXRIYXBwZW5lZCA9IEVycm9yczo6a0xvd01lbUFjY2VzczsK CX0KCgllbHNlIGlmIChNZXRhTWVtb3J5OjpJc1N5c3RlbUdsb2JhbCAoYWRkcmVzcywgc2l6ZSkp Cgl7CgkJd2hhdEhhcHBlbmVkID0gRXJyb3JzOjprR2xvYmFsVmFyQWNjZXNzOwoJfQoKCWVsc2Ug aWYgKE1ldGFNZW1vcnk6OklzU2NyZWVuQnVmZmVyIChhZGRyZXNzLCBzaXplKSkKCXsKCQl3aGF0 SGFwcGVuZWQgPSBFcnJvcnM6OmtTY3JlZW5BY2Nlc3M7Cgl9CgoJZWxzZSBpZiAoTWV0YU1lbW9y eTo6SXNMb3dTdGFjayAoYWRkcmVzcywgc2l6ZSkpCgl7CgkJd2hhdEhhcHBlbmVkID0gRXJyb3Jz OjprTG93U3RhY2tBY2Nlc3M7Cgl9CgojIDM3OCAiLi8uLi9TcmNTaGFyZWQvTWV0YU1lbW9yeS5j cHAiCgoKCWVsc2UKCXsKCQlCb29sCWluVUlPYmplY3QsIGJ1dEl0c09LOwoJCUNoZWNrVUlPYmpl Y3RBY2Nlc3MgKGFkZHJlc3MsIHNpemUsIGZvclJlYWQsIGluVUlPYmplY3QsIGJ1dEl0c09LKTsK CgkJaWYgKGluVUlPYmplY3QpCgkJewoJCQkgCgkJCSAKCQkJIAoKCQkJd2hhdEhhcHBlbmVkID0g RXJyb3JzOjprT0tBY2Nlc3M7CgkJfQoJCWVsc2UKCQl7CgkJCVdoYXRIYXBwZW5lZERhdGEJaW5m bzsKCQkJaW5mby5yZXN1bHQJCQk9IEVycm9yczo6a1Vua25vd25BY2Nlc3M7CgkJCWluZm8uYWRk cmVzcwkJPSBhZGRyZXNzOwoJCQlpbmZvLnNpemUJCQk9IHNpemU7CgkJCWluZm8uZm9yUmVhZAkJ PSBmb3JSZWFkOwoKCQkJY29uc3QgRW1QYWxtSGVhcCoJaGVhcCA9IEVtUGFsbUhlYXA6OkdldEhl YXBCeUlEICgwKTsKCgkJCWlmIChoZWFwKQoJCQkJR1dIX0V4YW1pbmVIZWFwICgqaGVhcCwgaW5m byk7CgoJCQlpZiAoaW5mby5yZXN1bHQgIT0gRXJyb3JzOjprVW5rbm93bkFjY2VzcykKCQkJewoJ CQkJd2hhdEhhcHBlbmVkID0gaW5mby5yZXN1bHQ7CgkJCX0KCQl9Cgl9CgoJd2hhdEhhcHBlbmVk ID0gQWxsb3dGb3JCdWdzIChhZGRyZXNzLCBzaXplLCBmb3JSZWFkLCB3aGF0SGFwcGVuZWQpOwoK CXJldHVybiB3aGF0SGFwcGVuZWQ7Cn0KCgogCiAKIAoKRXJyb3JzOjpFQWNjZXNzVHlwZSBNZXRh TWVtb3J5OjpBbGxvd0ZvckJ1Z3MgKGVtdXB0ciBhZGRyZXNzLCBsb25nIHNpemUsIEJvb2wgZm9y UmVhZCwgRXJyb3JzOjpFQWNjZXNzVHlwZSB3aGF0SGFwcGVuZWQpCnsKCWlmICh3aGF0SGFwcGVu ZWQgPT0gRXJyb3JzOjprT0tBY2Nlc3MpCgl7CgkJcmV0dXJuIHdoYXRIYXBwZW5lZDsKCX0KCglp ZiAoZm9yUmVhZCkKCXsKCQkgCgogCgkJaWYgKEluUHJ2RmluZE1lbW9yeUxlYWtzICgpKQoJCXsK CQkJcmV0dXJuIEVycm9yczo6a09LQWNjZXNzOwoJCX0KCgkJIAoKCQllbXVwdHIJYTYgPSBnQ1BV NjhLLT5HZXRSZWdpc3RlciAoZTY4S1JlZ0lEX0E2KTsKCQlpZiAoOjpJc0V2ZW4gKGE2KSAmJiBF bVBhbG1PUzo6SXNJblN0YWNrIChhNikpCgkJewoJCQllbXVwdHIJcnRuQWRkciA9IEVtTWVtR2V0 MzIgKGE2ICsgNCk7CgoJCQlpZiAoYWRkcmVzcyA8IDB4MTAwMCAmJgoJCQkJOjpJbkNyYzE2Q2Fs Y0Jsb2NrICgpICYmCgkJCQk6OkluU2VjUHJ2UmFuZG9tU2VlZCAocnRuQWRkcikpCgkJCXsKCQkJ CXJldHVybiBFcnJvcnM6OmtPS0FjY2VzczsKCQkJfQoJCX0KCgkJaWYgKHdoYXRIYXBwZW5lZCA9 PSBFcnJvcnM6OmtMb3dNZW1BY2Nlc3MpCgkJewoJCQkgCgoJCQlpZiAoc2l6ZSA9PSA0ICYmCgkJ CQk6OkluUHJ2U3lzdGVtVGltZXJQcm9jICgpKQoJCQl7CgkJCQlyZXR1cm4gRXJyb3JzOjprT0tB Y2Nlc3M7CgkJCX0KCgkJCSAKCgkJCWlmIChFbVBhdGNoU3RhdGU6Okhhc0JhY2tzcGFjZUNoYXJC dWcgKCkgJiYKCQkJCWFkZHJlc3MgPT0gMHgwMDAwICYmIHNpemUgPT0gMiAmJgoJCQkJSW5CYWNr c3BhY2VDaGFyICgpKQoJCQl7CgkJCQlyZXR1cm4gRXJyb3JzOjprT0tBY2Nlc3M7CgkJCX0KCgkJ CSAKCgkJCWlmIChFbVBhdGNoU3RhdGU6Okhhc0ZsZERlbGV0ZUJ1ZyAoKSAmJgoJCQkJYWRkcmVz cyA9PSAweDAwMDAgJiYgc2l6ZSA9PSAyICYmCgkJCQk6OkluRmxkRGVsZXRlICgpKQoJCQl7CgkJ CQlyZXR1cm4gRXJyb3JzOjprT0tBY2Nlc3M7CgkJCX0KCgkJCSAKCgkJCWlmIChFbVBhdGNoU3Rh dGU6Okhhc0dyZlByb2Nlc3NTdHJva2VCdWcgKCkgJiYKCQkJCWFkZHJlc3MgPT0gMHgwMDAyICYm IHNpemUgPT0gMiAmJgoJCQkJOjpJbkdyZlByb2Nlc3NTdHJva2UgKCkpCgkJCXsKCQkJCXJldHVy biBFcnJvcnM6OmtPS0FjY2VzczsKCQkJfQoKCQkJIAoKCQkJaWYgKEVtUGF0Y2hTdGF0ZTo6SGFz TmV0UHJ2VGFza01haW5CdWcgKCkgJiYKCQkJCTo6SW5OZXRQcnZUYXNrTWFpbiAoKSkKCQkJewoJ CQkJcmV0dXJuIEVycm9yczo6a09LQWNjZXNzOwoJCQl9CgkJfQoKCQkgCgkJIAoJCSAKCgkJaWYg KEVtUGF0Y2hTdGF0ZTo6SGFzU3lzQmluYXJ5U2VhcmNoQnVnICgpICYmCgkJCUVtUGF0Y2hTdGF0 ZTo6SXNJblN5c0JpbmFyeVNlYXJjaCAoKSkKCQl7CgkJCXJldHVybiBFcnJvcnM6OmtPS0FjY2Vz czsKCQl9CgoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoKCQlpZiAoOjpJbl9DZXJ0aWNvbU1lbUNw eSAoKSkKCQl7CgkJCXJldHVybiBFcnJvcnM6OmtPS0FjY2VzczsKCQl9CgoJCSAKCQkgCgoJCWlm ICg6OkluZG5zX2RlY29kZV9uYW1lICgpICYmCgkJCXdoYXRIYXBwZW5lZCA9PSBFcnJvcnM6OmtN ZW1NZ3JBY2Nlc3MpCgkJewoJCQlyZXR1cm4gRXJyb3JzOjprT0tBY2Nlc3M7CgkJfQoJfQoKCWlm ICh3aGF0SGFwcGVuZWQgPT0gRXJyb3JzOjprTG93TWVtQWNjZXNzKQoJewoJCSAKCQkgCgoJCWlm IChzaXplID09IDQgJiYgYWRkcmVzcyA9PSAweDAwMDggJiYgKDo6SW5Ic1BydkluaXQgKCkgfHwg OjpJbkhzUHJ2SW5pdENhcmQgKCkpKQoJCXsKCQkJcmV0dXJuIEVycm9yczo6a09LQWNjZXNzOwoJ CX0KCX0KCglpZiAod2hhdEhhcHBlbmVkID09IEVycm9yczo6a0dsb2JhbFZhckFjY2VzcykKCXsK CQkgCgkJIAoKCgkJaWYgKChhZGRyZXNzID09IEVtTG93TWVtOjpmZ0xvd01lbS5nbG9iYWxzLiB0 c21GZXBMaWJTdGF0dXNQIC5HZXRQdHIgKCkgIHx8CgkJCSBhZGRyZXNzID09IEVtTG93TWVtOjpm Z0xvd01lbS5nbG9iYWxzLiB0c21GZXBMaWJSZWZOdW0gLkdldFB0ciAoKSApICYmCgkJCSA6Oklu VHNtR2x1ZUdldEZlcEdsb2JhbHMgKCkpCgkJewoJCQlyZXR1cm4gRXJyb3JzOjprT0tBY2Nlc3M7 CgkJfQoKCQkgCgkJCgkJaWYgKChhZGRyZXNzID09IEVtTG93TWVtOjpmZ0xvd01lbS5nbG9iYWxz LiBpbnRsTWdyR2xvYmFsc1AgLkdldFB0ciAoKSApICYmCgkJCSg6OkluUHJ2R2V0SW50bE1nckds b2JhbHNQKCkgfHwKCQkJIDo6SW5QcnZTZXRJbnRsTWdyR2xvYmFsc1AoKSkpCgkJewoJCQlyZXR1 cm4gRXJyb3JzOjprT0tBY2Nlc3M7CgkJfQoKCQkgCgoJCWlmIChhZGRyZXNzID09IEVtTG93TWVt OjpmZ0xvd01lbS5nbG9iYWxzLiB0ZXN0SGFybmVzc0dsb2JhbHNQIC5HZXRQdHIgKCkgKQoJCXsK CQkJcmV0dXJuIEVycm9yczo6a09LQWNjZXNzOwoJCX0KCX0KCglyZXR1cm4gd2hhdEhhcHBlbmVk Owp9CgoKIAogCiAKCmVtdXB0ciBNZXRhTWVtb3J5OjpHZXRMb3dNZW1vcnlCZWdpbiAodm9pZCkK ewoJcmV0dXJuIDA7Cn0KCgogCiAKIAoKZW11cHRyIE1ldGFNZW1vcnk6OkdldExvd01lbW9yeUVu ZCAodm9pZCkKewoJcmV0dXJuICgoc2l6ZV90KSAmKCggTG93TWVtSGRyVHlwZSAgKikwKS0+ICBn bG9iYWxzICkgOwp9CgoKIAogCiAKCmVtdXB0ciBNZXRhTWVtb3J5OjpHZXRTeXNHbG9iYWxzQmVn aW4gKHZvaWQpCnsKCXJldHVybiAoKHNpemVfdCkgJigoIExvd01lbUhkclR5cGUgICopMCktPiAg Z2xvYmFscyApIDsKfQoKCiAKIAogCgplbXVwdHIgTWV0YU1lbW9yeTo6R2V0U3lzR2xvYmFsc0Vu ZCAodm9pZCkKewoJQ0VuYWJsZUZ1bGxBY2Nlc3MJbXVuZ2U7CSAKCglyZXR1cm4gRW1Mb3dNZW06 OmZnTG93TWVtLmdsb2JhbHMuIHN5c0Rpc3BhdGNoVGFibGVQICAgKyAKCQkJRW1Mb3dNZW06OmZn TG93TWVtLmdsb2JhbHMuIHN5c0Rpc3BhdGNoVGFibGVTaXplICAgKiAoc2l6ZW9mICh2b2lkKikp Owp9CiAKIAogCgplbXVwdHIgTWV0YU1lbW9yeTo6R2V0SGVhcEhkckJlZ2luIChVSW50MTYgaGVh cElEKQp7Cgljb25zdCBFbVBhbG1IZWFwKgloZWFwID0gRW1QYWxtSGVhcDo6R2V0SGVhcEJ5SUQg KGhlYXBJRCk7CglpZiAoIWhlYXApCgkJcmV0dXJuICgoZW11cHRyKSAwKSA7CgoJcmV0dXJuIGhl YXAtPkhlYWRlclN0YXJ0ICgpOwp9CgoKIAogCiAKCmVtdXB0ciBNZXRhTWVtb3J5OjpHZXRIZWFw SGRyRW5kIChVSW50MTYgaGVhcElEKQp7Cgljb25zdCBFbVBhbG1IZWFwKgloZWFwID0gRW1QYWxt SGVhcDo6R2V0SGVhcEJ5SUQgKGhlYXBJRCk7CglpZiAoIWhlYXApCgkJcmV0dXJuICgoZW11cHRy KSAwKSA7CgoJcmV0dXJuIGhlYXAtPkhlYWRlckVuZCAoKTsKfQoKCkJvb2wgTWV0YU1lbW9yeTo6 SXNMb3dNZW1vcnkgKGVtdXB0ciB0ZXN0QWRkcmVzcywgdWludDMyIHNpemUpCnsKCXJldHVybiB0 ZXN0QWRkcmVzcyA+PSBHZXRMb3dNZW1vcnlCZWdpbiAoKSAmJiB0ZXN0QWRkcmVzcyArIHNpemUg PD0gR2V0TG93TWVtb3J5RW5kICgpOwp9CgoKQm9vbCBNZXRhTWVtb3J5OjpJc1N5c3RlbUdsb2Jh bCAoZW11cHRyIHRlc3RBZGRyZXNzLCB1aW50MzIgc2l6ZSkKewoJcmV0dXJuIHRlc3RBZGRyZXNz ID49IEdldFN5c0dsb2JhbHNCZWdpbiAoKSAmJiB0ZXN0QWRkcmVzcyArIHNpemUgPD0gR2V0U3lz R2xvYmFsc0VuZCAoKTsKfQoKCkJvb2wgTWV0YU1lbW9yeTo6SXNTY3JlZW5CdWZmZXIgKGVtdXB0 ciB0ZXN0QWRkcmVzcywgdWludDMyIHNpemUpCnsKCXJldHVybiBJc1NjcmVlbkJ1ZmZlciAoRW1N ZW1HZXRNZXRhQWRkcmVzcyAodGVzdEFkZHJlc3MpLCBzaXplKTsKfQoKCkJvb2wgTWV0YU1lbW9y eTo6SXNNZW1NZ3JEYXRhIChlbXVwdHIgdGVzdEFkZHJlc3MsIHVpbnQzMiBzaXplKQp7Cgljb25z dCBFbVBhbG1IZWFwKgloZWFwID0gRW1QYWxtSGVhcDo6R2V0SGVhcEJ5UHRyICh0ZXN0QWRkcmVz cyk7CgkKCWlmIChoZWFwKQoJewoJCUVtUGFsbUNodW5rTGlzdDo6Y29uc3RfaXRlcmF0b3IJICBp dGVyICA9ICggKmhlYXAgKS5HZXRDaHVua0xpc3RCZWdpbiAoKTsJRW1QYWxtQ2h1bmtMaXN0Ojpj b25zdF9pdGVyYXRvcgkgIGVuZCAgPSAoICpoZWFwICkuR2V0Q2h1bmtMaXN0RW5kICgpOwl3aGls ZSAoICBpdGVyICAhPSAgIGVuZCApIAoJCXsKCQkJaWYgKChpdGVyLT5IZWFkZXJDb250YWlucyAo dGVzdEFkZHJlc3MpICYmCgkJCQlpdGVyLT5IZWFkZXJDb250YWlucyAodGVzdEFkZHJlc3MgKyBz aXplKSkgfHwKCQkJCShpdGVyLT5UcmFpbGVyQ29udGFpbnMgKHRlc3RBZGRyZXNzKSAmJgoJCQkJ aXRlci0+VHJhaWxlckNvbnRhaW5zICh0ZXN0QWRkcmVzcyArIHNpemUpKSkKCQkJewoJCQkJcmV0 dXJuIHRydWU7CgkJCX0KCgkJCSsraXRlcjsKCQl9Cgl9CgkKCXJldHVybiBmYWxzZTsKfQoKCkJv b2wgTWV0YU1lbW9yeTo6SXNVbmxvY2tlZENodW5rIChlbXVwdHIgdGVzdEFkZHJlc3MsIHVpbnQz MiBzaXplKQp7Cgljb25zdCBFbVBhbG1IZWFwKgloZWFwID0gRW1QYWxtSGVhcDo6R2V0SGVhcEJ5 UHRyICh0ZXN0QWRkcmVzcyk7CgkKCWlmIChoZWFwKQoJewoJCUVtUGFsbUNodW5rTGlzdDo6Y29u c3RfaXRlcmF0b3IJICBpdGVyICA9ICggKmhlYXAgKS5HZXRDaHVua0xpc3RCZWdpbiAoKTsJRW1Q YWxtQ2h1bmtMaXN0Ojpjb25zdF9pdGVyYXRvcgkgIGVuZCAgPSAoICpoZWFwICkuR2V0Q2h1bmtM aXN0RW5kICgpOwl3aGlsZSAoICBpdGVyICAhPSAgIGVuZCApIAoJCXsKCQkJaWYgKGl0ZXItPkJv ZHlDb250YWlucyAodGVzdEFkZHJlc3MpICYmCgkJCQlpdGVyLT5Cb2R5Q29udGFpbnMgKHRlc3RB ZGRyZXNzICsgc2l6ZSkgJiYKCQkJCWl0ZXItPkxvY2tDb3VudCAoKSA9PSAwKQoJCQl7CgkJCQly ZXR1cm4gdHJ1ZTsKCQkJfQoKCQkJKytpdGVyOwoJCX0KCX0KCQoJcmV0dXJuIGZhbHNlOwp9CgoK Qm9vbCBNZXRhTWVtb3J5OjpJc0ZyZWVDaHVuayAoZW11cHRyIHRlc3RBZGRyZXNzLCB1aW50MzIg c2l6ZSkKewoJY29uc3QgRW1QYWxtSGVhcCoJaGVhcCA9IEVtUGFsbUhlYXA6OkdldEhlYXBCeVB0 ciAodGVzdEFkZHJlc3MpOwoJCglpZiAoaGVhcCkKCXsKCQlFbVBhbG1DaHVua0xpc3Q6OmNvbnN0 X2l0ZXJhdG9yCSAgaXRlciAgPSAoICpoZWFwICkuR2V0Q2h1bmtMaXN0QmVnaW4gKCk7CUVtUGFs bUNodW5rTGlzdDo6Y29uc3RfaXRlcmF0b3IJICBlbmQgID0gKCAqaGVhcCApLkdldENodW5rTGlz dEVuZCAoKTsJd2hpbGUgKCAgaXRlciAgIT0gICBlbmQgKSAKCQl7CgkJCWlmIChpdGVyLT5Cb2R5 Q29udGFpbnMgKHRlc3RBZGRyZXNzKSAmJgoJCQkJaXRlci0+Qm9keUNvbnRhaW5zICh0ZXN0QWRk cmVzcyArIHNpemUpICYmCgkJCQlpdGVyLT5GcmVlICgpID09IDApCgkJCXsKCQkJCXJldHVybiB0 cnVlOwoJCQl9CgoJCQkrK2l0ZXI7CgkJfQoJfQoJCglyZXR1cm4gZmFsc2U7Cn0KCgpCb29sIE1l dGFNZW1vcnk6OklzVW5pbml0aWFsaXplZCAoZW11cHRyIHRlc3RBZGRyZXNzLCB1aW50MzIgc2l6 ZSkKewoKCgoJKCh2b2lkKSAgdGVzdEFkZHJlc3MgKTsgCgkoKHZvaWQpICBzaXplICk7IAoKCXJl dHVybiBmYWxzZTsKCn0KCgpCb29sIE1ldGFNZW1vcnk6OklzU3RhY2sgKGVtdXB0ciB0ZXN0QWRk cmVzcywgdWludDMyIHNpemUpCnsKCSgodm9pZCkgIHRlc3RBZGRyZXNzICk7IAoJKCh2b2lkKSAg c2l6ZSApOyAKCglyZXR1cm4gZmFsc2U7Cn0KCgpCb29sIE1ldGFNZW1vcnk6OklzTG93U3RhY2sg KGVtdXB0ciB0ZXN0QWRkcmVzcywgdWludDMyIHNpemUpCnsKCSgodm9pZCkgIHRlc3RBZGRyZXNz ICk7IAoJKCh2b2lkKSAgc2l6ZSApOyAKCglyZXR1cm4gZmFsc2U7Cn0KCgpCb29sIE1ldGFNZW1v cnk6OklzQWxsb2NhdGVkQ2h1bmsgKGVtdXB0ciB0ZXN0QWRkcmVzcywgdWludDMyIHNpemUpCnsK CXJldHVybiAhSXNGcmVlQ2h1bmsgKHRlc3RBZGRyZXNzLCBzaXplKTsKfQoKCiAKIAogCgp2b2lk IE1ldGFNZW1vcnk6Ok1hcmtSYW5nZSAoZW11cHRyIHN0YXJ0LCBlbXVwdHIgZW5kLCB1aW50OCB2 KQp7CgkgCgkgCgoJaWYgKCgqZ0VtTWVtQmFua3NbKCgoZW11cHRyKSggIHN0YXJ0ICApKSA+PiAx NikgXSkgLnhsYXRlbWV0YWFkZHIgPT0gX19udWxsICkKCQlyZXR1cm47CgoJIAoJIAoJIAoJIAoK CWlmIChzdGFydCA+PSAwICYmIHN0YXJ0IDwgMCArIGdSQU1CYW5rX1NpemUKCQkmJiBlbmQgPj0g MCArIGdSQU1CYW5rX1NpemUpCgl7CgkJZW5kID0gZ1JBTUJhbmtfU2l6ZSAtIDE7Cgl9CgoJaWYg KHN0YXJ0ID49IGdNZW1vcnlTdGFydCAmJiBzdGFydCA8IGdNZW1vcnlTdGFydCArIGdSQU1CYW5r X1NpemUKCQkmJiBlbmQgPj0gZ01lbW9yeVN0YXJ0ICsgZ1JBTUJhbmtfU2l6ZSkKCXsKCQllbmQg PSBnTWVtb3J5U3RhcnQgKyBnUkFNQmFua19TaXplIC0gMTsKCX0KCgl1aW50OCoJc3RhcnRQCT0g RW1NZW1HZXRNZXRhQWRkcmVzcyAoc3RhcnQpOwoJdWludDgqCWVuZFAJPSBzdGFydFAgKyAoZW5k IC0gc3RhcnQpOwkgCgl1aW50OCoJZW5kNFAJPSAodWludDgqKSAoKCh1aW50MzIpIGVuZFApICYg fjMpOwoJdWludDgqCXAJCT0gc3RhcnRQOwoKCSgodm9pZCkgMCkgOwoJKCh2b2lkKSAwKSA7Cgko KHZvaWQpIDApIDsKCgoJIAoJIAoKCWlmIChlbmQgLSBzdGFydCA8IDEyKQoJewoJCXdoaWxlIChw IDwgZW5kUCkKCQl7CgkJCSpwKysgJj0gdjsKCQl9Cgl9CgllbHNlCgl7CgkJdWludDMyCWxvbmdW YWx1ZSA9IHY7CgkJbG9uZ1ZhbHVlIHw9IChsb25nVmFsdWUgPDwgOCk7CgkJbG9uZ1ZhbHVlIHw9 IChsb25nVmFsdWUgPDwgMTYpOwoKCQl3aGlsZSAoKCh1aW50MzIpIHApICYgMykJCSAKCQl7CgkJ CSpwKysgfD0gdjsKCQl9CgoJCXdoaWxlIChwIDwgZW5kNFApCQkJCSAKCQl7CgkJCSoodWludDMy KikgcCB8PSBsb25nVmFsdWU7CgkJCXAgKz0gc2l6ZW9mICh1aW50MzIpOwoJCX0KCgkJd2hpbGUg KHAgPCBlbmRQKQkJCQkgCgkJewoJCQkqcCsrIHw9IHY7CgkJfQoJfQoKCgoKCgp9CgoKIAogCiAK CnZvaWQgTWV0YU1lbW9yeTo6VW5tYXJrUmFuZ2UgKGVtdXB0ciBzdGFydCwgZW11cHRyIGVuZCwg dWludDggdikKewoJIAoJIAoKCWlmICgoKmdFbU1lbUJhbmtzWygoKGVtdXB0cikoICBzdGFydCAg KSkgPj4gMTYpIF0pIC54bGF0ZW1ldGFhZGRyID09IF9fbnVsbCApCgkJcmV0dXJuOwoKCSAKCSAK CSAKCSAKCglpZiAoc3RhcnQgPj0gMCAmJiBzdGFydCA8IDAgKyBnUkFNQmFua19TaXplCgkJJiYg ZW5kID49IDAgKyBnUkFNQmFua19TaXplKQoJewoJCWVuZCA9IGdSQU1CYW5rX1NpemUgLSAxOwoJ fQoKCWlmIChzdGFydCA+PSBnTWVtb3J5U3RhcnQgJiYgc3RhcnQgPCBnTWVtb3J5U3RhcnQgKyBn UkFNQmFua19TaXplCgkJJiYgZW5kID49IGdNZW1vcnlTdGFydCArIGdSQU1CYW5rX1NpemUpCgl7 CgkJZW5kID0gZ01lbW9yeVN0YXJ0ICsgZ1JBTUJhbmtfU2l6ZSAtIDE7Cgl9CgoJdWludDgqCXN0 YXJ0UAk9IEVtTWVtR2V0TWV0YUFkZHJlc3MgKHN0YXJ0KTsKCXVpbnQ4KgllbmRQCT0gc3RhcnRQ ICsgKGVuZCAtIHN0YXJ0KTsJIAoJdWludDgqCWVuZDRQCT0gKHVpbnQ4KikgKCgodWludDMyKSBl bmRQKSAmIH4zKTsKCXVpbnQ4KglwCQk9IHN0YXJ0UDsKCgkoKHZvaWQpIDApIDsKCSgodm9pZCkg MCkgOwoJKCh2b2lkKSAwKSA7CgoJdiA9IH52OwoKCgkgCgkgCgoJaWYgKGVuZCAtIHN0YXJ0IDwg MTIpCgl7CgkJd2hpbGUgKHAgPCBlbmRQKQoJCXsKCQkJKnArKyAmPSB2OwoJCX0KCX0KCWVsc2UK CXsKCQl1aW50MzIJbG9uZ1ZhbHVlID0gdjsKCQlsb25nVmFsdWUgfD0gKGxvbmdWYWx1ZSA8PCA4 KTsKCQlsb25nVmFsdWUgfD0gKGxvbmdWYWx1ZSA8PCAxNik7CgoJCXdoaWxlICgoKHVpbnQzMikg cCkgJiAzKQkJIAoJCXsKCQkJKnArKyAmPSB2OwoJCX0KCgkJd2hpbGUgKHAgPCBlbmQ0UCkJCQkJ IAoJCXsKCQkJKih1aW50MzIqKSBwICY9IGxvbmdWYWx1ZTsKCQkJcCArPSBzaXplb2YgKHVpbnQz Mik7CgkJfQoKCQl3aGlsZSAocCA8IGVuZFApCQkJCSAKCQl7CgkJCSpwKysgJj0gdjsKCQl9Cgl9 CgoKCgoKCn0KCgogCiAKIAoKdm9pZCBNZXRhTWVtb3J5OjpNYXJrVW5tYXJrUmFuZ2UgKGVtdXB0 ciBzdGFydCwgZW11cHRyIGVuZCwKCQkJCQkJCXVpbnQ4IGFuZFZhbHVlLCB1aW50OCBvclZhbHVl KQp7CgkgCgkgCgoJaWYgKCgqZ0VtTWVtQmFua3NbKCgoZW11cHRyKSggIHN0YXJ0ICApKSA+PiAx NikgXSkgLnhsYXRlbWV0YWFkZHIgPT0gX19udWxsICkKCQlyZXR1cm47CgoJIAoJIAoJIAoJIAoK CWlmIChzdGFydCA+PSAwICYmIHN0YXJ0IDwgMCArIGdSQU1CYW5rX1NpemUKCQkmJiBlbmQgPj0g MCArIGdSQU1CYW5rX1NpemUpCgl7CgkJZW5kID0gZ1JBTUJhbmtfU2l6ZSAtIDE7Cgl9CgoJaWYg KHN0YXJ0ID49IGdNZW1vcnlTdGFydCAmJiBzdGFydCA8IGdNZW1vcnlTdGFydCArIGdSQU1CYW5r X1NpemUKCQkmJiBlbmQgPj0gZ01lbW9yeVN0YXJ0ICsgZ1JBTUJhbmtfU2l6ZSkKCXsKCQllbmQg PSBnTWVtb3J5U3RhcnQgKyBnUkFNQmFua19TaXplIC0gMTsKCX0KCgl1aW50OCoJc3RhcnRQCT0g RW1NZW1HZXRNZXRhQWRkcmVzcyAoc3RhcnQpOwoJdWludDgqCWVuZFAJPSBzdGFydFAgKyAoZW5k IC0gc3RhcnQpOwkgCgl1aW50OCoJZW5kNFAJPSAodWludDgqKSAoKCh1aW50MzIpIGVuZFApICYg fjMpOwoJdWludDgqCXAJCT0gc3RhcnRQOwoKCSgodm9pZCkgMCkgOwoJKCh2b2lkKSAwKSA7Cgko KHZvaWQpIDApIDsKCglpZiAoYW5kVmFsdWUgPT0gMHhGRikKCXsKCQl3aGlsZSAocCA8IGVuZFAp CgkJewoJCQkqcCsrIHw9IG9yVmFsdWU7CgkJfQoJfQoJZWxzZSBpZiAob3JWYWx1ZSA9PSAweDAw KQoJewoJCXdoaWxlIChwIDwgZW5kUCkKCQl7CgkJCSpwKysgJj0gYW5kVmFsdWU7CgkJfQoJfQoJ ZWxzZQoJewoKCQkgCgkJIAoKCQlpZiAoZW5kIC0gc3RhcnQgPCAxMikKCQl7CgkJCXdoaWxlIChw IDwgZW5kUCkJCQkJIAoJCQl7CgkJCQkqcCA9ICgqcCAmIGFuZFZhbHVlKSB8IG9yVmFsdWU7CgkJ CQlwICs9IHNpemVvZiAoY2hhcik7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJdWludDMyCWxvbmdB bmQgPSBhbmRWYWx1ZTsKCQkJbG9uZ0FuZCB8PSAobG9uZ0FuZCA8PCA4KTsKCQkJbG9uZ0FuZCB8 PSAobG9uZ0FuZCA8PCAxNik7CgoJCQl1aW50MzIJbG9uZ09yID0gb3JWYWx1ZTsKCQkJbG9uZ09y IHw9IChsb25nT3IgPDwgOCk7CgkJCWxvbmdPciB8PSAobG9uZ09yIDw8IDE2KTsKCgkJCXdoaWxl ICgoKHVpbnQzMikgcCkgJiAzKQkJIAoJCQl7CgkJCQkqcCA9ICgqcCAmIGFuZFZhbHVlKSB8IG9y VmFsdWU7CgkJCQlwICs9IHNpemVvZiAoY2hhcik7CgkJCX0KCgkJCXdoaWxlIChwIDwgZW5kNFAp CQkJCSAKCQkJewoJCQkJKih1aW50MzIqKSBwID0gKCgqKHVpbnQzMiopIHApICYgbG9uZ0FuZCkg fCBsb25nT3I7CgkJCQlwICs9IHNpemVvZiAobG9uZyk7CgkJCX0KCgkJCXdoaWxlIChwIDwgZW5k UCkJCQkJIAoJCQl7CgkJCQkqcCA9ICgqcCAmIGFuZFZhbHVlKSB8IG9yVmFsdWU7CgkJCQlwICs9 IHNpemVvZiAoY2hhcik7CgkJCX0KCQl9CgoKCgoKCgl9Cn0KCgogCiAKIAogCiAKCnZvaWQgTWV0 YU1lbW9yeTo6R1dIX0V4YW1pbmVIZWFwICgJY29uc3QgRW1QYWxtSGVhcCYgaGVhcCwKCQkJCQkJ CQkJV2hhdEhhcHBlbmVkRGF0YSYgaW5mbykKewoJIAoKCWlmICghaGVhcC5Db250YWlucyAoaW5m by5hZGRyZXNzKSkKCXsKCQlyZXR1cm47Cgl9CgoJIAoJIAoKCSAKCglpZiAoaGVhcC5IZWFkZXJD b250YWlucyAoaW5mby5hZGRyZXNzKSkKCXsKCQlpbmZvLnJlc3VsdCA9IEVycm9yczo6a01lbU1n ckFjY2VzczsKCQlyZXR1cm47Cgl9CgoJIAoKCXsKCQlFbVBhbG1NUFRMaXN0Ojpjb25zdF9pdGVy YXRvcgkgIGl0ZXIgID0gKCBoZWFwICkuR2V0TVBUTGlzdEJlZ2luICgpOwlFbVBhbG1NUFRMaXN0 Ojpjb25zdF9pdGVyYXRvcgkgIGVuZCAgPSAoIGhlYXAgKS5HZXRNUFRMaXN0RW5kICgpOwl3aGls ZSAoICBpdGVyICAhPSAgIGVuZCApIAoJCXsKCQkJaWYgKGl0ZXItPkNvbnRhaW5zIChpbmZvLmFk ZHJlc3MpKQoJCQl7CgkJCQlpbmZvLnJlc3VsdCA9IEVycm9yczo6a01lbU1nckFjY2VzczsKCQkJ CXJldHVybjsKCQkJfQoKCQkJKytpdGVyOwoJCX0KCX0KCgkgCgoJewoJCUVtUGFsbUNodW5rTGlz dDo6Y29uc3RfaXRlcmF0b3IJICBpdGVyICA9ICggaGVhcCApLkdldENodW5rTGlzdEJlZ2luICgp OwlFbVBhbG1DaHVua0xpc3Q6OmNvbnN0X2l0ZXJhdG9yCSAgZW5kICA9ICggaGVhcCApLkdldENo dW5rTGlzdEVuZCAoKTsJd2hpbGUgKCAgaXRlciAgIT0gICBlbmQgKSAKCQl7CgkJCUdXSF9FeGFt aW5lQ2h1bmsgKCppdGVyLCBpbmZvKTsKCQkJaWYgKGluZm8ucmVzdWx0ICE9IEVycm9yczo6a1Vu a25vd25BY2Nlc3MpCgkJCQlyZXR1cm47CgoJCQkrK2l0ZXI7CgkJfQoJfQp9CgoKIAogCiAKIAog Cgp2b2lkIE1ldGFNZW1vcnk6OkdXSF9FeGFtaW5lQ2h1bmsgKAljb25zdCBFbVBhbG1DaHVuayYg Y2h1bmssCgkJCQkJCQkJCVdoYXRIYXBwZW5lZERhdGEmIGluZm8pCnsKCWVtdXB0cglhZGRyU3Rh cnQJPSBpbmZvLmFkZHJlc3M7CgllbXVwdHIJYWRkckVuZAkJPSBpbmZvLmFkZHJlc3MgKyBpbmZv LnNpemU7CgoJIAoKCWVtdXB0cgloZHJTdGFydAk9IGNodW5rLkhlYWRlclN0YXJ0ICgpOwoJZW11 cHRyCWJvZHlTdGFydAk9IGNodW5rLkJvZHlTdGFydCAoKTsKCWVtdXB0cgl0cmxTdGFydAk9IGNo dW5rLkJvZHlFbmQgKCk7CgllbXVwdHIJY2h1bmtFbmQJPSBjaHVuay5FbmQgKCk7CgoJIAoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgkgCgoJaWYgKGFkZHJFbmQgPiBoZHJTdGFydCAmJiBhZGRyU3Rh cnQgPCBjaHVua0VuZCkKCXsKCQkgCgoJCWlmIChhZGRyRW5kID4gYm9keVN0YXJ0ICYmIGFkZHJT dGFydCA8IHRybFN0YXJ0KQoJCXsKCQkJIAoKCQkJaWYgKGNodW5rLkZyZWUgKCkpCgkJCXsKCQkJ CWluZm8ucmVzdWx0ID0gRXJyb3JzOjprRnJlZUNodW5rQWNjZXNzOwoJCQl9CgoJCQkgCgoJCQll bHNlIGlmIChjaHVuay5Mb2NrQ291bnQgKCkgPT0gMCkKCQkJewoJCQkJaW5mby5yZXN1bHQgPSBF cnJvcnM6OmtVbmxvY2tlZENodW5rQWNjZXNzOwoJCQl9CgkJfQoKCQkgCgoJCWlmIChhZGRyRW5k ID4gaGRyU3RhcnQgJiYgYWRkclN0YXJ0IDwgYm9keVN0YXJ0KQoJCXsKCQkJaW5mby5yZXN1bHQg PSBFcnJvcnM6OmtNZW1NZ3JBY2Nlc3M7CgkJfQoKCQkgCgoJCWlmIChhZGRyRW5kID4gdHJsU3Rh cnQgJiYgYWRkclN0YXJ0IDwgY2h1bmtFbmQpCgkJewoJCQlpbmZvLnJlc3VsdCA9IEVycm9yczo6 a01lbU1nckFjY2VzczsKCQl9CgoKCQkgCgoJCSAKCQkgCgkJIAoJCSAKCgkJaWYgKGluZm8ucmVz dWx0ID09IEVycm9yczo6a01lbU1nckFjY2VzcyAmJgoJCQlpbmZvLmZvclJlYWQgJiYKCQkgCgkJ CSg6OkluUHJ2Q29tcHJlc3NlZElubmVyQml0Qmx0ICgpIHx8CgkJCSA6OkluUHJ2TWlzQWxpZ25l ZEZvcndhcmRJbm5lckJpdEJsdCAoKSB8fAoJCQkgOjpJblBydk1pc0FsaWduZWRCYWNrd2FyZElu bmVyQml0Qmx0ICgpKSkKCQl7CgkJCWdvdG8gSGlkZUJ1ZzsKCQl9CgoKCQlpZiAoRW1QYXRjaFN0 YXRlOjpIYXNDb252ZXJ0RGVwdGgxVG8yQldCdWcgKCkgJiYKCQkJaW5mby5yZXN1bHQgPT0gRXJy b3JzOjprTWVtTWdyQWNjZXNzICYmCgkJCWluZm8uZm9yUmVhZCAmJgoJCQlpbmZvLnNpemUgPT0g c2l6ZW9mIChVSW50OCkgJiYKCQkJOjpJblBydkNvbnZlcnREZXB0aDFUbzJCVyAoKSkKCQl7CgkJ CWdvdG8gSGlkZUJ1ZzsKCQl9CgoKCQkgCgkJIAoJCSAKCgkJaWYgKGluZm8ucmVzdWx0ID09IEVy cm9yczo6a01lbU1nckFjY2VzcyAmJgoJCQlpbmZvLmZvclJlYWQgJiYKCQkJaW5mby5zaXplID09 IHNpemVvZiAoVUludDgpICYmCgkJCTo6SW5OZXRMaWJCaXRNb3ZlICgpKQoJCXsKCQkJZ290byBI aWRlQnVnOwoJCX0KCgoJCSAKCQkgCgkJIAoKCQlpZiAoRW1QYXRjaFN0YXRlOjpIYXNNZW51SGFu ZGxlRXZlbnRCdWcgKCkgJiYKCQkJaW5mby5mb3JSZWFkICYmCgkJCWluZm8uc2l6ZSA9PSBzaXpl b2YgKFdpbkhhbmRsZSkgJiYJIAoJCQk6OkluTWVudUhhbmRsZUV2ZW50ICgpKQoJCXsKCQkJZ290 byBIaWRlQnVnOwoJCX0KCgoJCSAKCQkgCgoJCWlmIChFbVBhdGNoU3RhdGU6Okhhc05ldFBydlNl dHRpbmdTZXRCdWcgKCkgJiYKCQkJaW5mby5mb3JSZWFkICYmCgkJCWluZm8uc2l6ZSA9PSA0ICYm CgkJCTo6SW5OZXRQcnZTZXR0aW5nU2V0ICgpKQoJCXsKCQkJZ290byBIaWRlQnVnOwoJCX0KCgoJ CSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoKCQlpZiAoaW5m by5yZXN1bHQgPT0gRXJyb3JzOjprRnJlZUNodW5rQWNjZXNzICYmCgkJCUVtUGF0Y2hTdGF0ZTo6 SGFzRGVsZXRlZFN0YWNrQnVnICgpKQoJCXsKCQkJIAoJCQkgCgoJCQlTeXNLZXJuZWxJbmZvVHlw ZQl0YXNrSW5mbzsKCgkJCXRhc2tJbmZvLnNlbGVjdG9yCT0gc3lzS2VybmVsSW5mb1NlbFRhc2tJ bmZvOwoJCQl0YXNrSW5mby5pZAkJCT0gMDsJIAoKCQkJIAoJCQkgCgkJCSAKCQkJIAoJCQkgCgkJ CSAKCQkJIAoKCQkJdmVjdG9yPFVJbnQzMj4JdGFza0lETGlzdDsKCQkJRXJyCQkJCWVyciA9IFN5 c0tlcm5lbEluZm8gKCZ0YXNrSW5mbyk7CgoJCQl3aGlsZSAoZXJyID09IDApCgkJCXsKCQkJCSAK CgkJCQl2ZWN0b3I8VUludDMyPjo6aXRlcmF0b3IJaXRlciA9IHRhc2tJRExpc3QuYmVnaW4gKCk7 CgkJCQl3aGlsZSAoaXRlciAhPSB0YXNrSURMaXN0LmVuZCAoKSkKCQkJCXsKCQkJCQlpZiAoKml0 ZXIrKyA9PSB0YXNrSW5mby5wYXJhbS50YXNrLmlkKQoJCQkJCXsKCQkJCQkJZ290byBQbGFuQjsJ IAoJCQkJCX0KCQkJCX0KCgkJCQkgCgkJCQkgCgkJCQkgCgkJCQkgCgkJCQkgCgoJCQkJaWYgKHRh c2tJbmZvLnBhcmFtLnRhc2suc3RhY2tTdGFydCA+PSBib2R5U3RhcnQgJiYKCQkJCQl0YXNrSW5m by5wYXJhbS50YXNrLnN0YWNrU3RhcnQgPCB0cmxTdGFydCkKCQkJCXsKCQkJCQlnb3RvIEhpZGVC dWc7CgkJCQl9CgoJCQkJIAoJCQkJIAoKCQkJCXRhc2tJRExpc3QucHVzaF9iYWNrICh0YXNrSW5m by5wYXJhbS50YXNrLmlkKTsKCgkJCQkgCgoJCQkJdGFza0luZm8uc2VsZWN0b3IJPSBzeXNLZXJu ZWxJbmZvU2VsVGFza0luZm87CgkJCQl0YXNrSW5mby5pZAkJCT0gdGFza0luZm8ucGFyYW0udGFz ay5uZXh0SUQ7CgkJCQllcnIJCQkJCT0gU3lzS2VybmVsSW5mbyAoJnRhc2tJbmZvKTsKCQkJfQoK CQkJIApQbGFuQjoKCQkJIAoJCQkgCgkJCSAKCgkJCWlmICgJZ0NQVS0+R2V0U1AgKCkgPj0gYm9k eVN0YXJ0ICYmCgkJCQkJZ0NQVS0+R2V0U1AgKCkgPCB0cmxTdGFydCkKCQkJewoJCQkJIAoKCQkJ CWlmICg6OkluY2pfa3B0a2RlbGV0ZSAoKSkKCQkJCXsKCQkJCQlpbmZvLnJlc3VsdCA9IEVycm9y czo6a09LQWNjZXNzOwoJCQkJfQoKCQkJCSAKCQkJCSAKCQkJCSAKCQkJCSAKCQkJCSAKCQkJCSAK CQkJCSAKCQkJCSAKCQkJCSAKCQkJCSAKCQkJCSAKCQkJCSAKCQkJCSAKCQkJCSAKCQkJCSAKCQkJ CSAKCQkJCSAKCQkJCSAKCQkJCSAKCQkJCSAKCQkJCSAKCQkJCSAKCgkJCQllbHNlCgkJCQl7CgkJ CQkJIAoJCQkJCSAKCQkJCQkgCgkJCQkJIAoKCQkJCQllbXVwdHIJYTcgPSBnQ1BVLT5HZXRTUCAo KTsKCgkJCQkJd2hpbGUgKGE3ID49IGJvZHlTdGFydCAmJiBhNyA8IHRybFN0YXJ0KQoJCQkJCXsK CQkJCQkJaWYgKDo6SW5jal9rcHRrZGVsZXRlIChFbU1lbUdldDMyIChhNykpKQoJCQkJCQl7CgkJ CQkJCQlnb3RvIEhpZGVCdWc7CgkJCQkJCX0KCgkJCQkJCWE3ICs9IDI7CgkJCQkJfQoJCQkJfQkg CgkJCX0JIAoJCX0JIAoKCgkJIAoJCSAKCgkJaWYgKGluZm8ucmVzdWx0ID09IEVycm9yczo6a1Vu bG9ja2VkQ2h1bmtBY2Nlc3MgJiYKCQkJRW1QYXRjaFN0YXRlOjpIYXNGaW5kU2hvd1Jlc3VsdHNC dWcgKCkgJiYKCQkJaW5mby5mb3JSZWFkICYmCgkJCWluZm8uc2l6ZSA9PSBzaXplb2YgKEJvb2xl YW4pICYmCgkJCWFkZHJTdGFydCA9PSBib2R5U3RhcnQgKyBzaXplb2YgKFVJbnQxNikgKiAyICAg JiYKCQkJOjpJbkZpbmRTaG93UmVzdWx0cyAoKSkKCQl7CgkJCWdvdG8gSGlkZUJ1ZzsKCQl9CgoK CQkgCgkJIAoJCSAKCQkgCgoJCWVtdXB0cglhNl8wID0gZ0NQVTY4Sy0+R2V0UmVnaXN0ZXIgKGU2 OEtSZWdJRF9BNik7CSAKCQlpZiAoOjpJc0V2ZW4gKGE2XzApICYmIEVtUGFsbU9TOjpJc0luU3Rh Y2sgKGE2XzApKQoJCXsKCQkJZW11cHRyCWE2XzEgPSBFbU1lbUdldDMyIChhNl8wKTsJCQkJIAoK CQkJaWYgKEVtUGF0Y2hTdGF0ZTo6SGFzRmluZFNhdmVGaW5kU3RyQnVnICgpICYmCgkJCQlpbmZv LmZvclJlYWQgJiYKCQkJCTo6SW5NZW1Nb3ZlICgpICYmCQkJCQkJCQkgCgkJCQk6OkluRG1Xcml0 ZSAoRW1NZW1HZXQzMiAoYTZfMCArIDQpKSAmJgkJCSAKCQkJCTo6SW5GaW5kU2F2ZUZpbmRTdHIg KEVtTWVtR2V0MzIgKGE2XzEgKyA0KSkpCSAKCQkJewoJCQkJZ290byBIaWRlQnVnOwoJCQl9CgkJ fQoKCQkgCgkJIAoJCSAKCQkgCgoJCWlmIChFbVBhdGNoU3RhdGU6Okhhc0ZudERlZmluZUZvbnRC dWcgKCkgJiYKCQkJaW5mby5mb3JSZWFkICYmCgkJCTo6SW5NZW1Nb3ZlICgpICYmCQkJCQkJCSAK CQkJOjpJbkZudERlZmluZUZvbnQgKEVtTWVtR2V0MzIgKGE2XzAgKyA0KSkpCSAKCQl7CgkJCWdv dG8gSGlkZUJ1ZzsKCQl9Cgl9CgoJcmV0dXJuOwoKSGlkZUJ1ZzoKCWluZm8ucmVzdWx0ID0gRXJy b3JzOjprT0tBY2Nlc3M7Cn0KCgojcHJhZ21hIG1hcmsgLQoKIAogCiAKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKIAogCiAK CnN0YXRpYyBCb29sIFBydlRyYXBzQXZhaWxhYmxlICh2b2lkKQp7CgkgCgoJQm9vbAlyZXN1bHQg PSBFbVBhdGNoU3RhdGU6Ok9TTWFqb3JWZXJzaW9uICgpID49IDQ7CgoJcmV0dXJuIHJlc3VsdDsK fQoKCiAKIAogCgpzdGF0aWMgQm9vbCBQcnZBY2Nlc3NvclRyYXBBdmFpbGFibGUgKHZvaWQpCnsK CSAKCSAKCgkKCQoJCgoJVUludDMyCXZhbHVlOwoJQm9vbAlyZXN1bHQgPSAoRnRyR2V0ICgncHN5 cycgICwgMjUgLCAmdmFsdWUpID09IDB4MDAwMCApICYmICh2YWx1ZSAhPSAwKTsKCglyZXR1cm4g cmVzdWx0Owp9CgoKIAogCiAKIAogCgpzdGF0aWMgQm9vbCBQcnZBbGxvd2VkRmllbGRPYmplY3RB Y2Nlc3MgKGVtdXB0ciBvYmplY3RQLCBlbXVwdHIgYWRkcmVzcywgQm9vbCBmb3JSZWFkKQp7Cgkg CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoJIAoJIAoKCWlmIChmb3JSZWFkKQoJewoJ CXNpemVfdAkJCW9mZnNldAkJCT0gYWRkcmVzcyAtIG9iamVjdFA7CgkJY29uc3Qgc2l6ZV90CWxp bmVzX29mZnNldAk9IEVtQWxpYXNGaWVsZFR5cGU8UEFTPjo6b2Zmc2V0b2ZfbGluZXMgKCk7CgkJ Y29uc3Qgc2l6ZV90CWxpbmVzX3NpemUJCT0gRW1BbGlhc2VtdXB0cjxQQVM+OjpHZXRTaXplICgp OwoKCQlpZiAob2Zmc2V0ID49IGxpbmVzX29mZnNldCAmJiBvZmZzZXQgPCBsaW5lc19vZmZzZXQg KyBsaW5lc19zaXplKQoJCXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJfQoKCSAKCSAKCiAKCXsKCQlz aXplX3QJCQlvZmZzZXQJCT0gYWRkcmVzcyAtIG9iamVjdFA7CgkJY29uc3Qgc2l6ZV90CWF0dHJf b2Zmc2V0CT0gRW1BbGlhc0ZpZWxkVHlwZTxQQVM+OjpvZmZzZXRvZl9hdHRyICgpOwoJCWNvbnN0 IHNpemVfdAlhdHRyX3NpemUJPSBFbUFsaWFzRmllbGRBdHRyVHlwZTxQQVM+OjpHZXRTaXplICgp OwoKCQlpZiAob2Zmc2V0ID49IGF0dHJfb2Zmc2V0ICYmIG9mZnNldCA8IGF0dHJfb2Zmc2V0ICsg YXR0cl9zaXplKQoJCXsKCQkJaWYgKEVtUGF0Y2hTdGF0ZTo6T1NNYWpvck1pbm9yVmVyc2lvbiAo KSA8IDMzKQoJCQl7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCX0KCX0KCgkgCgoJcmV0dXJuIGZh bHNlOwp9CgoKIAogCiAKIAogCgpzdGF0aWMgQm9vbCBQcnZBbGxvd2VkQ29udHJvbE9iamVjdEFj Y2VzcyAoZW11cHRyIG9iamVjdFAsIGVtdXB0ciBhZGRyZXNzLCBCb29sIGZvclJlYWQpCnsKCSAK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgkgCgkgCgoJaWYg KGZvclJlYWQpCgl7CgkJc2l6ZV90CQkJb2Zmc2V0CQk9IGFkZHJlc3MgLSBvYmplY3RQOwoKCQlj b25zdCBzaXplX3QJYXR0cl9vZmZzZXQJPSBFbUFsaWFzQ29udHJvbFR5cGU8UEFTPjo6b2Zmc2V0 b2ZfYXR0ciAoKTsKCQljb25zdCBzaXplX3QJYXR0cl9zaXplCT0gRW1BbGlhc0NvbnRyb2xBdHRy VHlwZTxQQVM+OjpHZXRTaXplICgpOwoKCQljb25zdCBzaXplX3QJc3R5bGVfb2Zmc2V0PSBFbUFs aWFzQ29udHJvbFR5cGU8UEFTPjo6b2Zmc2V0b2Zfc3R5bGUgKCk7CgkJY29uc3Qgc2l6ZV90CXN0 eWxlX3NpemUJPSBFbUFsaWFzVUludDg8UEFTPjo6R2V0U2l6ZSAoKTsKCgkJaWYgKChvZmZzZXQg Pj0gYXR0cl9vZmZzZXQgJiYgb2Zmc2V0IDwgYXR0cl9vZmZzZXQgKyBhdHRyX3NpemUpIHx8CgkJ CShvZmZzZXQgPj0gc3R5bGVfb2Zmc2V0ICYmIG9mZnNldCA8IHN0eWxlX29mZnNldCArIHN0eWxl X3NpemUpKQoJCXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJfQoKCSAKCSAKCSAKCQoJIAoJIAoKCSAK CSAKCgl7CgkJc2l6ZV90CQkJb2Zmc2V0CQk9IGFkZHJlc3MgLSBvYmplY3RQOwoKCQljb25zdCBz aXplX3QJZm9udF9vZmZzZXQJPSBFbUFsaWFzQ29udHJvbFR5cGU8UEFTPjo6b2Zmc2V0b2ZfZm9u dCAoKTsKCQljb25zdCBzaXplX3QJZm9udF9zaXplCT0gRW1BbGlhc0ZvbnRJRDxQQVM+OjpHZXRT aXplICgpOwoKCQlpZiAoKG9mZnNldCA+PSBmb250X29mZnNldCAmJiBvZmZzZXQgPCBmb250X29m ZnNldCArIGZvbnRfc2l6ZSkpCgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9CgoJIAoKCXJldHVy biBmYWxzZTsKfQoKCiAKIAogCiAKIAoKc3RhdGljIEJvb2wgUHJ2QWxsb3dlZExpc3RPYmplY3RB Y2Nlc3MgKGVtdXB0ciBvYmplY3RQLCBlbXVwdHIgYWRkcmVzcywgQm9vbCBmb3JSZWFkKQp7Cgko KHZvaWQpICBmb3JSZWFkICk7IAoKCSAKCgoKCgoKCgoKCgoKCgoKCgoKCgoJIAoJIAoKCSAKCSAK CiAKCXsKCQlzaXplX3QJCQlvZmZzZXQJCT0gYWRkcmVzcyAtIG9iamVjdFA7CgkJY29uc3Qgc2l6 ZV90CWF0dHJfb2Zmc2V0CT0gRW1BbGlhc0xpc3RUeXBlPFBBUz46Om9mZnNldG9mX2F0dHIgKCk7 CgkJY29uc3Qgc2l6ZV90CWF0dHJfc2l6ZQk9IEVtQWxpYXNMaXN0QXR0clR5cGU8UEFTPjo6R2V0 U2l6ZSAoKTsKCgkJaWYgKG9mZnNldCA+PSBhdHRyX29mZnNldCAmJiBvZmZzZXQgPCBhdHRyX29m ZnNldCArIGF0dHJfc2l6ZSkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCX0KCgkgCgoJaWYgKGZv clJlYWQpCgl7CgkJc2l6ZV90CQkJb2Zmc2V0CQk9IGFkZHJlc3MgLSBvYmplY3RQOwoJCWNvbnN0 IHNpemVfdAl0b3BJdGVtX29mZnNldAk9IEVtQWxpYXNMaXN0VHlwZTxQQVM+OjpvZmZzZXRvZl90 b3BJdGVtICgpOwoJCWNvbnN0IHNpemVfdAl0b3BJdGVtX3NpemUJPSBFbUFsaWFzVUludDE2PFBB Uz46OkdldFNpemUgKCk7CgoJCWlmIChvZmZzZXQgPj0gdG9wSXRlbV9vZmZzZXQgJiYgb2Zmc2V0 IDwgdG9wSXRlbV9vZmZzZXQgKyB0b3BJdGVtX3NpemUpCgkJewoJCQlpZiAoITo6UHJ2VHJhcHNB dmFpbGFibGUgKCkpCgkJCXsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJfQoJfQoKCSAKCSAKCSAK CgkgCgkgCgoJIAoJIAoKCXsKCQlzaXplX3QJCQlvZmZzZXQJCT0gYWRkcmVzcyAtIG9iamVjdFA7 CgoJCWNvbnN0IHNpemVfdAlmb250X29mZnNldAk9IEVtQWxpYXNMaXN0VHlwZTxQQVM+OjpvZmZz ZXRvZl9mb250ICgpOwoJCWNvbnN0IHNpemVfdAlmb250X3NpemUJPSBFbUFsaWFzRm9udElEPFBB Uz46OkdldFNpemUgKCk7CgoJCWlmICgob2Zmc2V0ID49IGZvbnRfb2Zmc2V0ICYmIG9mZnNldCA8 IGZvbnRfb2Zmc2V0ICsgZm9udF9zaXplKSkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCX0KCgkg CgoJcmV0dXJuIGZhbHNlOwp9CgoKIAogCiAKIAogCgpzdGF0aWMgQm9vbCBQcnZBbGxvd2VkVGFi bGVPYmplY3RBY2Nlc3MgKGVtdXB0ciBvYmplY3RQLCBlbXVwdHIgYWRkcmVzcywgQm9vbCBmb3JS ZWFkKQp7CgkgCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoJ IAoJIAoKCSAKCSAKCgkgCgkgCgkgCgkgCgkgCgkgCgkgCgkgCgkgCgoJaWYgKGZvclJlYWQpCgl7 CgkJc2l6ZV90CQkJb2Zmc2V0CQkJCT0gYWRkcmVzcyAtIG9iamVjdFA7CgkJY29uc3Qgc2l6ZV90 CW51bVJvd3Nfb2Zmc2V0CQk9IEVtQWxpYXNUYWJsZVR5cGU8UEFTPjo6b2Zmc2V0b2ZfbnVtUm93 cyAoKTsKCQljb25zdCBzaXplX3QJbnVtUm93c19zaXplCQk9IEVtQWxpYXNVSW50MTY8UEFTPjo6 R2V0U2l6ZSAoKTsKCgkJY29uc3Qgc2l6ZV90CW51bUNvbHVtbnNfb2Zmc2V0CT0gRW1BbGlhc1Rh YmxlVHlwZTxQQVM+OjpvZmZzZXRvZl9udW1Db2x1bW5zICgpOwoJCWNvbnN0IHNpemVfdAludW1D b2x1bW5zX3NpemUJCT0gRW1BbGlhc1VJbnQxNjxQQVM+OjpHZXRTaXplICgpOwoKCQljb25zdCBz aXplX3QJdG9wUm93X29mZnNldAkJPSBFbUFsaWFzVGFibGVUeXBlPFBBUz46Om9mZnNldG9mX3Rv cFJvdyAoKTsKCQljb25zdCBzaXplX3QJdG9wUm93X3NpemUJCQk9IEVtQWxpYXNVSW50MTY8UEFT Pjo6R2V0U2l6ZSAoKTsKCgkJaWYgKChvZmZzZXQgPj0gbnVtUm93c19vZmZzZXQgJiYgb2Zmc2V0 IDwgbnVtUm93c19vZmZzZXQgKyBudW1Sb3dzX3NpemUpIHx8CgkJCShvZmZzZXQgPj0gbnVtQ29s dW1uc19vZmZzZXQgJiYgb2Zmc2V0IDwgbnVtQ29sdW1uc19vZmZzZXQgKyBudW1Db2x1bW5zX3Np emUpIHx8CgkJCShvZmZzZXQgPj0gdG9wUm93X29mZnNldCAmJiBvZmZzZXQgPCB0b3BSb3dfb2Zm c2V0ICsgdG9wUm93X3NpemUpKQoJCXsKCQkJaWYgKCE6OlBydlRyYXBzQXZhaWxhYmxlICgpKQoJ CQl7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCX0KCX0KCgkgCgkgCgoJaWYgKGZvclJlYWQpCgl7 CgkJc2l6ZV90CQkJb2Zmc2V0CQkJCT0gYWRkcmVzcyAtIG9iamVjdFA7CgoJCWNvbnN0IHNpemVf dAlpdGVtc19vZmZzZXQJCT0gRW1BbGlhc1RhYmxlVHlwZTxQQVM+OjpvZmZzZXRvZl9pdGVtcyAo KTsKCQljb25zdCBzaXplX3QJaXRlbXNfc2l6ZQkJCT0gRW1BbGlhc2VtdXB0cjxQQVM+OjpHZXRT aXplICgpOwoKCQljb25zdCBzaXplX3QJcm93QXR0cnNfb2Zmc2V0CQk9IEVtQWxpYXNUYWJsZVR5 cGU8UEFTPjo6b2Zmc2V0b2Zfcm93QXR0cnMgKCk7CgkJY29uc3Qgc2l6ZV90CXJvd0F0dHJzX3Np emUJCT0gRW1BbGlhc2VtdXB0cjxQQVM+OjpHZXRTaXplICgpOwoKCQljb25zdCBzaXplX3QJY29s dW1uQXR0cnNfb2Zmc2V0CT0gRW1BbGlhc1RhYmxlVHlwZTxQQVM+OjpvZmZzZXRvZl9jb2x1bW5B dHRycyAoKTsKCQljb25zdCBzaXplX3QJY29sdW1uQXR0cnNfc2l6ZQk9IEVtQWxpYXNlbXVwdHI8 UEFTPjo6R2V0U2l6ZSAoKTsKCgkJaWYgKChvZmZzZXQgPj0gaXRlbXNfb2Zmc2V0ICYmIG9mZnNl dCA8IGl0ZW1zX29mZnNldCArIGl0ZW1zX3NpemUpIHx8CgkJCShvZmZzZXQgPj0gcm93QXR0cnNf b2Zmc2V0ICYmIG9mZnNldCA8IHJvd0F0dHJzX29mZnNldCArIHJvd0F0dHJzX3NpemUpIHx8CgkJ CShvZmZzZXQgPj0gY29sdW1uQXR0cnNfb2Zmc2V0ICYmIG9mZnNldCA8IGNvbHVtbkF0dHJzX29m ZnNldCArIGNvbHVtbkF0dHJzX3NpemUpKQoJCXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJfQoKCXsK CQlzaXplX3QJCQlvZmZzZXQJCQkJPSBhZGRyZXNzIC0gb2JqZWN0UDsKCgkJY29uc3Qgc2l6ZV90 CWN1cnJlbnRSb3dfb2Zmc2V0CT0gRW1BbGlhc1RhYmxlVHlwZTxQQVM+OjpvZmZzZXRvZl9jdXJy ZW50Um93ICgpOwoJCWNvbnN0IHNpemVfdAljdXJyZW50Um93X3NpemUJCT0gRW1BbGlhc1VJbnQx NjxQQVM+OjpHZXRTaXplICgpOwoKCQljb25zdCBzaXplX3QJY3VycmVudENvbHVtbl9vZmZzZXQ9 IEVtQWxpYXNUYWJsZVR5cGU8UEFTPjo6b2Zmc2V0b2ZfY3VycmVudENvbHVtbiAoKTsKCQljb25z dCBzaXplX3QJY3VycmVudENvbHVtbl9zaXplCT0gRW1BbGlhc1VJbnQxNjxQQVM+OjpHZXRTaXpl ICgpOwoKCQlpZiAoKG9mZnNldCA+PSBjdXJyZW50Um93X29mZnNldCAmJiBvZmZzZXQgPCBjdXJy ZW50Um93X29mZnNldCArIGN1cnJlbnRSb3dfc2l6ZSkgfHwKCQkJKG9mZnNldCA+PSBjdXJyZW50 Q29sdW1uX29mZnNldCAmJiBvZmZzZXQgPCBjdXJyZW50Q29sdW1uX29mZnNldCArIGN1cnJlbnRD b2x1bW5fc2l6ZSkpCgkJewoJCQlpZiAoITo6UHJ2VHJhcHNBdmFpbGFibGUgKCkpCgkJCXsKCQkJ CXJldHVybiB0cnVlOwoJCQl9CgkJfQoJfQoKCXsKCQlzaXplX3QJCQlvZmZzZXQJCQkJPSBhZGRy ZXNzIC0gb2JqZWN0UDsKCQljb25zdCBzaXplX3QJYXR0cl9vZmZzZXQJCQk9IEVtQWxpYXNUYWJs ZVR5cGU8UEFTPjo6b2Zmc2V0b2ZfYXR0ciAoKTsKCQljb25zdCBzaXplX3QJYXR0cl9zaXplCQkJ PSBFbUFsaWFzVGFibGVBdHRyVHlwZTxQQVM+OjpHZXRTaXplICgpOwoKCQlpZiAob2Zmc2V0ID49 IGF0dHJfb2Zmc2V0ICYmIG9mZnNldCA8IGF0dHJfb2Zmc2V0ICsgYXR0cl9zaXplKQoJCXsKCQkJ cmV0dXJuIHRydWU7CgkJfQoJfQoKCSAKCglyZXR1cm4gUHJ2QWxsb3dlZEZpZWxkT2JqZWN0QWNj ZXNzICgKCQlvYmplY3RQICsgRW1BbGlhc1RhYmxlVHlwZTxQQVM+OjpvZmZzZXRvZl9jdXJyZW50 RmllbGQgKCksCgkJYWRkcmVzcywgZm9yUmVhZCk7Cn0KCgogCiAKIAogCiAKCnN0YXRpYyBCb29s IFBydkFsbG93ZWRGb3JtQml0bWFwT2JqZWN0QWNjZXNzIChlbXVwdHIgb2JqZWN0UCwgZW11cHRy IGFkZHJlc3MsIEJvb2wgZm9yUmVhZCkKewoJIAoKCgoKCgoKCSAKCSAKCglpZiAoZm9yUmVhZCkK CXsKCQlzaXplX3QJCQlvZmZzZXQJCT0gYWRkcmVzcyAtIG9iamVjdFA7CgkJY29uc3Qgc2l6ZV90 CWF0dHJfb2Zmc2V0CT0gRW1BbGlhc0Zvcm1CaXRtYXBUeXBlPFBBUz46Om9mZnNldG9mX2F0dHIg KCk7CgkJY29uc3Qgc2l6ZV90CWF0dHJfc2l6ZQk9IEVtQWxpYXNGb3JtT2JqQXR0clR5cGU8UEFT Pjo6R2V0U2l6ZSAoKTsKCgkJaWYgKG9mZnNldCA+PSBhdHRyX29mZnNldCAmJiBvZmZzZXQgPCBh dHRyX29mZnNldCArIGF0dHJfc2l6ZSkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCX0KCgkgCgkg CgoJewoJCXNpemVfdAkJCW9mZnNldAkJPSBhZGRyZXNzIC0gb2JqZWN0UDsKCgkJY29uc3Qgc2l6 ZV90CWF0dHJfb2Zmc2V0CT0gRW1BbGlhc0Zvcm1CaXRtYXBUeXBlPFBBUz46Om9mZnNldG9mX2F0 dHIgKCk7CgkJY29uc3Qgc2l6ZV90CWF0dHJfc2l6ZQk9IEVtQWxpYXNGb3JtT2JqQXR0clR5cGU8 UEFTPjo6R2V0U2l6ZSAoKTsKCgkJaWYgKG9mZnNldCA+PSBhdHRyX29mZnNldCAmJiBvZmZzZXQg PCBhdHRyX29mZnNldCArIGF0dHJfc2l6ZSkKCQl7CgkJCWlmIChFbVBhdGNoU3RhdGU6Ok9TTWFq b3JNaW5vclZlcnNpb24gKCkgPCAzMikKCQkJewoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQl9Cgl9 CgoJIAoKCXJldHVybiBmYWxzZTsKfQoKCiAKIAogCiAKIAoKc3RhdGljIEJvb2wgUHJ2QWxsb3dl ZEZvcm1MaW5lT2JqZWN0QWNjZXNzIChlbXVwdHIgb2JqZWN0UCwgZW11cHRyIGFkZHJlc3MsIEJv b2wgZm9yUmVhZCkKewoJKCh2b2lkKSAgb2JqZWN0UCApOyAKCSgodm9pZCkgIGFkZHJlc3MgKTsg CgkoKHZvaWQpICBmb3JSZWFkICk7IAoKCSAKCgoKCgoKCSAKCglyZXR1cm4gZmFsc2U7Cn0KCgog CiAKIAogCiAKCnN0YXRpYyBCb29sIFBydkFsbG93ZWRGb3JtRnJhbWVPYmplY3RBY2Nlc3MgKGVt dXB0ciBvYmplY3RQLCBlbXVwdHIgYWRkcmVzcywgQm9vbCBmb3JSZWFkKQp7CgkoKHZvaWQpICBv YmplY3RQICk7IAoJKCh2b2lkKSAgYWRkcmVzcyApOyAKCSgodm9pZCkgIGZvclJlYWQgKTsgCgoJ IAoKCgoKCgoKCSAKCglyZXR1cm4gZmFsc2U7Cn0KCgogCiAKIAogCiAKCnN0YXRpYyBCb29sIFBy dkFsbG93ZWRGb3JtUmVjdGFuZ2xlT2JqZWN0QWNjZXNzIChlbXVwdHIgb2JqZWN0UCwgZW11cHRy IGFkZHJlc3MsIEJvb2wgZm9yUmVhZCkKewoJKCh2b2lkKSAgb2JqZWN0UCApOyAKCSgodm9pZCkg IGFkZHJlc3MgKTsgCgkoKHZvaWQpICBmb3JSZWFkICk7IAoKCSAKCgoKCgkKCSAKCglyZXR1cm4g ZmFsc2U7Cn0KCgogCiAKIAogCiAKCnN0YXRpYyBCb29sIFBydkFsbG93ZWRGb3JtTGFiZWxPYmpl Y3RBY2Nlc3MgKGVtdXB0ciBvYmplY3RQLCBlbXVwdHIgYWRkcmVzcywgQm9vbCBmb3JSZWFkKQp7 CgkgCgoKCgoKCgoKCgoJIAoJIAoKCWlmIChmb3JSZWFkKQoJewoJCXNpemVfdAkJCW9mZnNldAkJ PSBhZGRyZXNzIC0gb2JqZWN0UDsKCQljb25zdCBzaXplX3QJYXR0cl9vZmZzZXQJPSBFbUFsaWFz Rm9ybUxhYmVsVHlwZTxQQVM+OjpvZmZzZXRvZl9hdHRyICgpOwoJCWNvbnN0IHNpemVfdAlhdHRy X3NpemUJPSBFbUFsaWFzRm9ybU9iakF0dHJUeXBlPFBBUz46OkdldFNpemUgKCk7CgoJCWlmIChv ZmZzZXQgPj0gYXR0cl9vZmZzZXQgJiYgb2Zmc2V0IDwgYXR0cl9vZmZzZXQgKyBhdHRyX3NpemUp CgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9CgoJIAoJIAoJIAoKCSAKCSAKCQoJIAoJIAoKCXsK CQlzaXplX3QJCQlvZmZzZXQJCT0gYWRkcmVzcyAtIG9iamVjdFA7CgoJCWNvbnN0IHNpemVfdAlm b250X29mZnNldAk9IEVtQWxpYXNGb3JtTGFiZWxUeXBlPFBBUz46Om9mZnNldG9mX2ZvbnRJRCAo KTsKCQljb25zdCBzaXplX3QJZm9udF9zaXplCT0gRW1BbGlhc0ZvbnRJRDxQQVM+OjpHZXRTaXpl ICgpOwoKCQlpZiAoKG9mZnNldCA+PSBmb250X29mZnNldCAmJiBvZmZzZXQgPCBmb250X29mZnNl dCArIGZvbnRfc2l6ZSkpCgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9CgoJIAoKCXJldHVybiBm YWxzZTsKfQoKCiAKIAogCiAKIAoKc3RhdGljIEJvb2wgUHJ2QWxsb3dlZEZvcm1UaXRsZU9iamVj dEFjY2VzcyAoZW11cHRyIG9iamVjdFAsIGVtdXB0ciBhZGRyZXNzLCBCb29sIGZvclJlYWQpCnsK CSgodm9pZCkgIG9iamVjdFAgKTsgCgkoKHZvaWQpICBhZGRyZXNzICk7IAoJKCh2b2lkKSAgZm9y UmVhZCApOyAKCgkgCgoKCgoKCSAKCglyZXR1cm4gZmFsc2U7Cn0KCgogCiAKIAogCiAKCnN0YXRp YyBCb29sIFBydkFsbG93ZWRGb3JtUG9wdXBPYmplY3RBY2Nlc3MgKGVtdXB0ciBvYmplY3RQLCBl bXVwdHIgYWRkcmVzcywgQm9vbCBmb3JSZWFkKQp7CgkoKHZvaWQpICBvYmplY3RQICk7IAoJKCh2 b2lkKSAgYWRkcmVzcyApOyAKCSgodm9pZCkgIGZvclJlYWQgKTsgCgoJIAoKCgoKCgkgCgoJcmV0 dXJuIGZhbHNlOwp9CgoKIAogCiAKIAogCgpzdGF0aWMgQm9vbCBQcnZBbGxvd2VkRm9ybUdyYWZm aXRpU3RhdGVPYmplY3RBY2Nlc3MgKGVtdXB0ciBvYmplY3RQLCBlbXVwdHIgYWRkcmVzcywgQm9v bCBmb3JSZWFkKQp7CgkoKHZvaWQpICBvYmplY3RQICk7IAoJKCh2b2lkKSAgYWRkcmVzcyApOyAK CSgodm9pZCkgIGZvclJlYWQgKTsgCgoJIAoKCgoKCSAKCglyZXR1cm4gZmFsc2U7Cn0KCgogCiAK IAogCiAKCnN0YXRpYyBCb29sIFBydkFsbG93ZWRGb3JtR2FkZ2V0T2JqZWN0QWNjZXNzIChlbXVw dHIgb2JqZWN0UCwgZW11cHRyIGFkZHJlc3MsIEJvb2wgZm9yUmVhZCkKewoJIAoKCgoKCgoKCgoK CgoJKCh2b2lkKSAgb2JqZWN0UCApOyA7CgkoKHZvaWQpICBhZGRyZXNzICk7IDsKCSgodm9pZCkg IGZvclJlYWQgKTsgOwoKCSAKCSAKCSAKCSAKCglyZXR1cm4gdHJ1ZTsKIyAyMjgzICIuLy4uL1Ny Y1NoYXJlZC9NZXRhTWVtb3J5LmNwcCIKCn0KCgogCiAKIAogCiAKCnN0YXRpYyBCb29sIFBydkFs bG93ZWRTY3JvbGxCYXJPYmplY3RBY2Nlc3MgKGVtdXB0ciBvYmplY3RQLCBlbXVwdHIgYWRkcmVz cywgQm9vbCBmb3JSZWFkKQp7CgkgCgoKCgoKCgoKCgoKCgoKCgoKCSAKCSAKCglpZiAoZm9yUmVh ZCkKCXsKCQlzaXplX3QJCQlvZmZzZXQJCT0gYWRkcmVzcyAtIG9iamVjdFA7CgkJY29uc3Qgc2l6 ZV90CWF0dHJfb2Zmc2V0CT0gRW1BbGlhc1Njcm9sbEJhclR5cGU8UEFTPjo6b2Zmc2V0b2ZfYXR0 ciAoKTsKCQljb25zdCBzaXplX3QJYXR0cl9zaXplCT0gRW1BbGlhc1Njcm9sbEJhckF0dHJUeXBl PFBBUz46OkdldFNpemUgKCk7CgoJCWlmIChvZmZzZXQgPj0gYXR0cl9vZmZzZXQgJiYgb2Zmc2V0 IDwgYXR0cl9vZmZzZXQgKyBhdHRyX3NpemUpCgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9CgoJ IAoJIAoKIAoJewoJCXNpemVfdAkJCW9mZnNldAkJPSBhZGRyZXNzIC0gb2JqZWN0UDsKCQljb25z dCBzaXplX3QJYXR0cl9vZmZzZXQJPSBFbUFsaWFzU2Nyb2xsQmFyVHlwZTxQQVM+OjpvZmZzZXRv Zl9hdHRyICgpOwoJCWNvbnN0IHNpemVfdAlhdHRyX3NpemUJPSBFbUFsaWFzU2Nyb2xsQmFyQXR0 clR5cGU8UEFTPjo6R2V0U2l6ZSAoKTsKCgkJaWYgKG9mZnNldCA+PSBhdHRyX29mZnNldCAmJiBv ZmZzZXQgPCBhdHRyX29mZnNldCArIGF0dHJfc2l6ZSkKCQl7CgkJCWlmIChFbVBhdGNoU3RhdGU6 Ok9TTWFqb3JNaW5vclZlcnNpb24gKCkgPCAzNSkKCQkJewoJCQkJcmV0dXJuIHRydWU7CgkJCX0K CQl9Cgl9CgoJIAoKCXJldHVybiBmYWxzZTsKfQoKCiAKIAogCiAKIAoKc3RhdGljIEJvb2wgUHJ2 QWxsb3dlZEZvcm1PYmplY3RBY2Nlc3MgKEVtQWxpYXNGb3JtT2JqTGlzdFR5cGU8UEFTPiYgZm9y bU9iamVjdCwKCQkJCQkJCQkJCWVtdXB0ciBhZGRyZXNzLCBCb29sIGZvclJlYWQpCnsKCSAKCSAK CSAKCglpZiAoOjpQcnZBY2Nlc3NvclRyYXBBdmFpbGFibGUgKCkpCgkJcmV0dXJuIGZhbHNlOwoK CUZvcm1PYmplY3RLaW5kCWtpbmQgPSBmb3JtT2JqZWN0Lm9iamVjdFR5cGU7CgoJQm9vbCAoKmNo ZWNrX2Z1bmN0aW9uKSAoZW11cHRyLCBlbXVwdHIsIEJvb2wpID0gX19udWxsIDsKCglzd2l0Y2gg KGtpbmQpCgl7CgkJY2FzZSBmcm1GaWVsZE9iajoJCQljaGVja19mdW5jdGlvbiA9IFBydkFsbG93 ZWRGaWVsZE9iamVjdEFjY2VzczsJCQkJYnJlYWs7CgkJY2FzZSBmcm1Db250cm9sT2JqOgkJCWNo ZWNrX2Z1bmN0aW9uID0gUHJ2QWxsb3dlZENvbnRyb2xPYmplY3RBY2Nlc3M7CQkJCWJyZWFrOwoJ CWNhc2UgZnJtTGlzdE9iajoJCQljaGVja19mdW5jdGlvbiA9IFBydkFsbG93ZWRMaXN0T2JqZWN0 QWNjZXNzOwkJCQlicmVhazsKCQljYXNlIGZybVRhYmxlT2JqOgkJCWNoZWNrX2Z1bmN0aW9uID0g UHJ2QWxsb3dlZFRhYmxlT2JqZWN0QWNjZXNzOwkJCQlicmVhazsKCQljYXNlIGZybUJpdG1hcE9i ajoJCQljaGVja19mdW5jdGlvbiA9IFBydkFsbG93ZWRGb3JtQml0bWFwT2JqZWN0QWNjZXNzOwkJ CWJyZWFrOwoJCWNhc2UgZnJtTGluZU9iajoJCQljaGVja19mdW5jdGlvbiA9IFBydkFsbG93ZWRG b3JtTGluZU9iamVjdEFjY2VzczsJCQlicmVhazsKCQljYXNlIGZybUZyYW1lT2JqOgkJCWNoZWNr X2Z1bmN0aW9uID0gUHJ2QWxsb3dlZEZvcm1GcmFtZU9iamVjdEFjY2VzczsJCQlicmVhazsKCQlj YXNlIGZybVJlY3RhbmdsZU9iajoJCWNoZWNrX2Z1bmN0aW9uID0gUHJ2QWxsb3dlZEZvcm1SZWN0 YW5nbGVPYmplY3RBY2Nlc3M7CQlicmVhazsKCQljYXNlIGZybUxhYmVsT2JqOgkJCWNoZWNrX2Z1 bmN0aW9uID0gUHJ2QWxsb3dlZEZvcm1MYWJlbE9iamVjdEFjY2VzczsJCQlicmVhazsKCQljYXNl IGZybVRpdGxlT2JqOgkJCWNoZWNrX2Z1bmN0aW9uID0gUHJ2QWxsb3dlZEZvcm1UaXRsZU9iamVj dEFjY2VzczsJCQlicmVhazsKCQljYXNlIGZybVBvcHVwT2JqOgkJCWNoZWNrX2Z1bmN0aW9uID0g UHJ2QWxsb3dlZEZvcm1Qb3B1cE9iamVjdEFjY2VzczsJCQlicmVhazsKCQljYXNlIGZybUdyYWZm aXRpU3RhdGVPYmo6CWNoZWNrX2Z1bmN0aW9uID0gUHJ2QWxsb3dlZEZvcm1HcmFmZml0aVN0YXRl T2JqZWN0QWNjZXNzOwlicmVhazsKCQljYXNlIGZybUdhZGdldE9iajoJCQljaGVja19mdW5jdGlv biA9IFBydkFsbG93ZWRGb3JtR2FkZ2V0T2JqZWN0QWNjZXNzOwkJCWJyZWFrOwoJCWNhc2UgZnJt U2Nyb2xsQmFyT2JqOgkJY2hlY2tfZnVuY3Rpb24gPSBQcnZBbGxvd2VkU2Nyb2xsQmFyT2JqZWN0 QWNjZXNzOwkJCWJyZWFrOwoJfQoKCWlmIChjaGVja19mdW5jdGlvbikKCXsKCQlyZXR1cm4gY2hl Y2tfZnVuY3Rpb24gKGZvcm1PYmplY3Qub2JqZWN0LCBhZGRyZXNzLCBmb3JSZWFkKTsKCX0KCgly ZXR1cm4gZmFsc2U7Cn0KCgogCiAKIAogCiAKCnN0YXRpYyBCb29sIFBydkFsbG93ZWRXaW5kb3dB Y2Nlc3MgKGVtdXB0ciB3aW5kb3dQLCBlbXVwdHIgYWRkcmVzcywgQm9vbCBmb3JSZWFkKQp7Cgkg CgkgCgkgCgoJaWYgKDo6UHJ2QWNjZXNzb3JUcmFwQXZhaWxhYmxlICgpKQoJCXJldHVybiBmYWxz ZTsKCgkoKHZvaWQpICBmb3JSZWFkICk7IAoKCXNpemVfdAkJCQkJb2Zmc2V0ID0gYWRkcmVzcyAt IHdpbmRvd1A7CglFbUFsaWFzV2luZG93VHlwZTxQQVM+CXdpbmRvdyAod2luZG93UCk7CgoKCgoK CgkgCgkgCgkgCgkgCgoJaWYgKGZvclJlYWQgJiYgRW1QYXRjaFN0YXRlOjpPU01ham9yTWlub3JW ZXJzaW9uICgpIDwgMjApCgl7CgkJaWYgKCgob2Zmc2V0ID49IHdpbmRvdy5vZmZzZXRvZl9kaXNw bGF5V2lkdGhWMjAgICgpKSAmJgkob2Zmc2V0IDwgd2luZG93Lm9mZnNldG9mX2Rpc3BsYXlXaWR0 aFYyMCAgKCkgKyB3aW5kb3cuIGRpc3BsYXlXaWR0aFYyMCAuR2V0U2l6ZSAoKSkpICB8fAoJCQko KG9mZnNldCA+PSB3aW5kb3cub2Zmc2V0b2ZfZGlzcGxheUhlaWdodFYyMCAgKCkpICYmCShvZmZz ZXQgPCB3aW5kb3cub2Zmc2V0b2ZfZGlzcGxheUhlaWdodFYyMCAgKCkgKyB3aW5kb3cuIGRpc3Bs YXlIZWlnaHRWMjAgLkdldFNpemUgKCkpKSApCgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9CgoJ IAoJIAoJIAoJIAoKCWlmIChmb3JSZWFkICYmIEVtUGF0Y2hTdGF0ZTo6T1NNYWpvck1pbm9yVmVy c2lvbiAoKSA8IDM1KQoJewoJCWlmICgoKG9mZnNldCA+PSB3aW5kb3cub2Zmc2V0b2ZfZGlzcGxh eUFkZHJWMjAgICgpKSAmJgkob2Zmc2V0IDwgd2luZG93Lm9mZnNldG9mX2Rpc3BsYXlBZGRyVjIw ICAoKSArIHdpbmRvdy4gZGlzcGxheUFkZHJWMjAgLkdldFNpemUgKCkpKSAgfHwKCQkJKChvZmZz ZXQgPj0gd2luZG93Lm9mZnNldG9mX2JpdG1hcFAgICgpKSAmJgkob2Zmc2V0IDwgd2luZG93Lm9m ZnNldG9mX2JpdG1hcFAgICgpICsgd2luZG93LiBiaXRtYXBQIC5HZXRTaXplICgpKSkgKQoJCXsK CQkJcmV0dXJuIHRydWU7CgkJfQoJfQoKCSAKCgl7CgkJaWYgKCgob2Zmc2V0ID49IHdpbmRvdy5v ZmZzZXRvZl9mcmFtZVR5cGUgICgpKSAmJgkob2Zmc2V0IDwgd2luZG93Lm9mZnNldG9mX2ZyYW1l VHlwZSAgKCkgKyB3aW5kb3cuIGZyYW1lVHlwZSAuR2V0U2l6ZSAoKSkpICkKCQl7CgkJCXJldHVy biB0cnVlOwoJCX0KCX0KCglyZXR1cm4gZmFsc2U7Cn0KCgogCiAKIAogCiAKCnN0YXRpYyBCb29s IFBydkFsbG93ZWRGb3JtQWNjZXNzIChlbXVwdHIgZm9ybVAsIGVtdXB0ciBhZGRyZXNzLCBCb29s IGZvclJlYWQpCnsKCSAKCSAKCSAKCglpZiAoOjpQcnZBY2Nlc3NvclRyYXBBdmFpbGFibGUgKCkp CgkJcmV0dXJuIGZhbHNlOwoKCSgodm9pZCkgIGZvcm1QICk7IAoJKCh2b2lkKSAgYWRkcmVzcyAp OyAKCSgodm9pZCkgIGZvclJlYWQgKTsgCgoJIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgkgCgkg CgkgCgoJaWYgKGZvclJlYWQpCgl7CgkJc2l6ZV90CQkJb2Zmc2V0CQkJPSBhZGRyZXNzIC0gZm9y bVA7CgkJY29uc3Qgc2l6ZV90CWhhbmRsZXJfb2Zmc2V0CT0gRW1BbGlhc0Zvcm1UeXBlPFBBUz46 Om9mZnNldG9mX2hhbmRsZXIgKCk7CgkJY29uc3Qgc2l6ZV90CWhhbmRsZXJfc2l6ZQk9IEVtQWxp YXNlbXVwdHI8UEFTPjo6R2V0U2l6ZSAoKTsKCgkJaWYgKG9mZnNldCA+PSBoYW5kbGVyX29mZnNl dCAmJiBvZmZzZXQgPCBoYW5kbGVyX29mZnNldCArIGhhbmRsZXJfc2l6ZSkKCQl7CgkJCXJldHVy biB0cnVlOwoJCX0KCX0KCgkgCgkgCgoJewoJCXNpemVfdAkJCW9mZnNldAkJCQkJPSBhZGRyZXNz IC0gZm9ybVA7CgkJY29uc3Qgc2l6ZV90CWRlZmF1bHRCdXR0b25fb2Zmc2V0CT0gRW1BbGlhc0Zv cm1UeXBlPFBBUz46Om9mZnNldG9mX2RlZmF1bHRCdXR0b24gKCk7CgkJY29uc3Qgc2l6ZV90CWRl ZmF1bHRCdXR0b25fc2l6ZQkJPSBFbUFsaWFzVUludDE2PFBBUz46OkdldFNpemUgKCk7CgkJY29u c3Qgc2l6ZV90CWhlbHBSc2NJZF9vZmZzZXQJCT0gRW1BbGlhc0Zvcm1UeXBlPFBBUz46Om9mZnNl dG9mX2hlbHBSc2NJZCAoKTsKCQljb25zdCBzaXplX3QJaGVscFJzY0lkX3NpemUJCQk9IEVtQWxp YXNVSW50MTY8UEFTPjo6R2V0U2l6ZSAoKTsKCQljb25zdCBzaXplX3QJbWVudVJzY0lkX29mZnNl dAkJPSBFbUFsaWFzRm9ybVR5cGU8UEFTPjo6b2Zmc2V0b2ZfbWVudVJzY0lkICgpOwoJCWNvbnN0 IHNpemVfdAltZW51UnNjSWRfc2l6ZQkJCT0gRW1BbGlhc1VJbnQxNjxQQVM+OjpHZXRTaXplICgp OwoKCQlpZiAoKG9mZnNldCA+PSBkZWZhdWx0QnV0dG9uX29mZnNldCAmJiBvZmZzZXQgPCBkZWZh dWx0QnV0dG9uX29mZnNldCArIGRlZmF1bHRCdXR0b25fc2l6ZSkgfHwKCQkJKG9mZnNldCA+PSBo ZWxwUnNjSWRfb2Zmc2V0ICYmIG9mZnNldCA8IGhlbHBSc2NJZF9vZmZzZXQgKyBoZWxwUnNjSWRf c2l6ZSkgfHwKCQkJKG9mZnNldCA+PSBtZW51UnNjSWRfb2Zmc2V0ICYmIG9mZnNldCA8IG1lbnVS c2NJZF9vZmZzZXQgKyBtZW51UnNjSWRfc2l6ZSkpCgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9 CgoJIAoKCXJldHVybiBQcnZBbGxvd2VkV2luZG93QWNjZXNzIChmb3JtUCwgYWRkcmVzcywgZm9y UmVhZCk7Cn0KCgogCiAKIAogCiAKCnN0YXRpYyBCb29sIFBydkFsbG93ZWRCaXRtYXBBY2Nlc3Mg KEVtQWxpYXNCaXRtYXBUeXBlVjI8UEFTPiYgYml0bWFwLCBlbXVwdHIgYWRkcmVzcywgQm9vbCBm b3JSZWFkKQp7CgkgCgkgCgkgCgoJaWYgKDo6UHJ2QWNjZXNzb3JUcmFwQXZhaWxhYmxlICgpKQoJ CXJldHVybiBmYWxzZTsKCgkgCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCSAKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgkgCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgkgCgkgCgoJ aWYgKEVtUGF0Y2hTdGF0ZTo6T1NNYWpvck1pbm9yVmVyc2lvbiAoKSA8IDM1KQoJewoJCSAKCgkJ cmV0dXJuIHRydWU7Cgl9CgllbHNlIGlmIChFbVBhdGNoU3RhdGU6Ok9TTWFqb3JNaW5vclZlcnNp b24gKCkgPCA0MCkKCXsKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJ IAoJCSAKCQkgCgoJCWlmIChmb3JSZWFkKQoJCXsKCQkJcmV0dXJuIHRydWU7CgkJfQoJCWVsc2UK CQl7CgkJCWVtdXB0cgkJCWJpdG1hcFAJCQkJCT0gYml0bWFwLkdldFB0ciAoKTsKCQkJc2l6ZV90 CQkJb2Zmc2V0CQkJCQk9IGFkZHJlc3MgLSBiaXRtYXBQOwoKCQkJY29uc3Qgc2l6ZV90CWZsYWdz X29mZnNldAkJCT0gRW1BbGlhc0JpdG1hcFR5cGVWMjxQQVM+OjpvZmZzZXRvZl9mbGFncyAoKTsK CQkJY29uc3Qgc2l6ZV90CWZsYWdzX3NpemUJCQkJPSBFbUFsaWFzVUludDE2PFBBUz46OkdldFNp emUgKCk7CgoJCQljb25zdCBzaXplX3QJdHJhbnNwYXJlbnRJbmRleF9vZmZzZXQJPSBFbUFsaWFz Qml0bWFwVHlwZVYyPFBBUz46Om9mZnNldG9mX3RyYW5zcGFyZW50SW5kZXggKCk7CgkJCWNvbnN0 IHNpemVfdAl0cmFuc3BhcmVudEluZGV4X3NpemUJPSBFbUFsaWFzVUludDg8UEFTPjo6R2V0U2l6 ZSAoKTsKCgkJCWlmIChvZmZzZXQgPj0gZmxhZ3Nfb2Zmc2V0ICYmIG9mZnNldCA8IGZsYWdzX29m ZnNldCArIGZsYWdzX3NpemUpCgkJCXsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgoJCQlpZiAob2Zm c2V0ID49IHRyYW5zcGFyZW50SW5kZXhfb2Zmc2V0ICYmIG9mZnNldCA8IHRyYW5zcGFyZW50SW5k ZXhfb2Zmc2V0ICsgdHJhbnNwYXJlbnRJbmRleF9zaXplKQoJCQl7CgkJCQlyZXR1cm4gdHJ1ZTsK CQkJfQoJCX0KCX0KCWVsc2UKCXsKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkgCgkJIAoJCSAK CgkJZW11cHRyCQkJYml0bWFwUAkJCQkJPSBiaXRtYXAuR2V0UHRyICgpOwoJCXNpemVfdAkJCW9m ZnNldAkJCQkJPSBhZGRyZXNzIC0gYml0bWFwUDsKCgkJY29uc3Qgc2l6ZV90CWZsYWdzX29mZnNl dAkJCT0gRW1BbGlhc0JpdG1hcFR5cGVWMjxQQVM+OjpvZmZzZXRvZl9mbGFncyAoKTsKCQljb25z dCBzaXplX3QJZmxhZ3Nfc2l6ZQkJCQk9IEVtQWxpYXNVSW50MTY8UEFTPjo6R2V0U2l6ZSAoKTsK CgkJY29uc3Qgc2l6ZV90CXRyYW5zcGFyZW50SW5kZXhfb2Zmc2V0CT0gRW1BbGlhc0JpdG1hcFR5 cGVWMjxQQVM+OjpvZmZzZXRvZl90cmFuc3BhcmVudEluZGV4ICgpOwoJCWNvbnN0IHNpemVfdAl0 cmFuc3BhcmVudEluZGV4X3NpemUJPSBFbUFsaWFzVUludDg8UEFTPjo6R2V0U2l6ZSAoKTsKCgkJ aWYgKG9mZnNldCA+PSBmbGFnc19vZmZzZXQgJiYgb2Zmc2V0IDwgZmxhZ3Nfb2Zmc2V0ICsgZmxh Z3Nfc2l6ZSkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCgkJaWYgKG9mZnNldCA+PSB0cmFuc3Bh cmVudEluZGV4X29mZnNldCAmJiBvZmZzZXQgPCB0cmFuc3BhcmVudEluZGV4X29mZnNldCArIHRy YW5zcGFyZW50SW5kZXhfc2l6ZSkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCX0KCgkgCgoJcmV0 dXJuIGZhbHNlOwp9CgoKc3RhdGljIEJvb2wgUHJ2QWxsb3dlZEJpdG1hcEFjY2VzcyAoRW1BbGlh c0JpdG1hcFR5cGVWMzxQQVM+JiwgZW11cHRyLCBCb29sKQp7CgkgCgkgCgoJIAoKCXJldHVybiBm YWxzZTsKfQoKCiNwcmFnbWEgbWFyayAtCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAK IAogCiAKIAogCiAKIAoKIAogCiAKCnZvaWQgTWV0YU1lbW9yeTo6UmVnaXN0ZXJCaXRtYXBIYW5k bGUgKE1lbUhhbmRsZSAgKQp7CgoKCgoKCgoKfQoKCiAKIAogCgp2b2lkIE1ldGFNZW1vcnk6OlJl Z2lzdGVyQml0bWFwUG9pbnRlciAoTWVtUHRyICApCnsKCgoKCgoKCgp9CgoKIAogCiAKCkJvb2wg TWV0YU1lbW9yeTo6SXNCaXRtYXBIYW5kbGUgKE1lbUhhbmRsZSBoKQp7CglyZXR1cm4gaCAmJiBm aW5kICgKCQlnQml0bWFwSGFuZGxlTGlzdC5iZWdpbiAoKSwKCQlnQml0bWFwSGFuZGxlTGlzdC5l bmQgKCksIGgpICE9IGdCaXRtYXBIYW5kbGVMaXN0LmVuZCAoKTsKfQoKCiAKIAogCgpCb29sIE1l dGFNZW1vcnk6OklzQml0bWFwUG9pbnRlciAoTWVtUHRyIHApCnsKCXJldHVybiBwICYmIGZpbmQg KAoJCWdCaXRtYXBQb2ludGVyTGlzdC5iZWdpbiAoKSwKCQlnQml0bWFwUG9pbnRlckxpc3QuZW5k ICgpLCBwKSAhPSBnQml0bWFwUG9pbnRlckxpc3QuZW5kICgpOwp9CgoKIAogCiAKCnZvaWQgTWV0 YU1lbW9yeTo6VW5yZWdpc3RlckJpdG1hcEhhbmRsZSAoTWVtSGFuZGxlIGgpCnsKCWlmIChoKQoJ ewoJCXZlY3RvcjxNZW1IYW5kbGU+OjppdGVyYXRvcglpdGVyID0gZmluZCAoCgkJCWdCaXRtYXBI YW5kbGVMaXN0LmJlZ2luICgpLAoJCQlnQml0bWFwSGFuZGxlTGlzdC5lbmQgKCksIGgpOwoKCQlp ZiAoaXRlciAhPSBnQml0bWFwSGFuZGxlTGlzdC5lbmQgKCkpCgkJewoJCQlNZXRhTWVtb3J5OjpV bm1hcmtVSU9iamVjdHMgKCk7CgkJCWdCaXRtYXBIYW5kbGVMaXN0LmVyYXNlIChpdGVyKTsKCQkJ TWV0YU1lbW9yeTo6TWFya1VJT2JqZWN0cyAoKTsKCQl9Cgl9Cn0KCgogCiAKIAoKdm9pZCBNZXRh TWVtb3J5OjpVbnJlZ2lzdGVyQml0bWFwUG9pbnRlciAoTWVtUHRyIHApCnsKCWlmIChwKQoJewoJ CXZlY3RvcjxNZW1QdHI+OjppdGVyYXRvcglpdGVyID0gZmluZCAoCgkJCWdCaXRtYXBQb2ludGVy TGlzdC5iZWdpbiAoKSwKCQkJZ0JpdG1hcFBvaW50ZXJMaXN0LmVuZCAoKSwgcCk7CgoJCWlmIChp dGVyICE9IGdCaXRtYXBQb2ludGVyTGlzdC5lbmQgKCkpCgkJewoJCQlNZXRhTWVtb3J5OjpVbm1h cmtVSU9iamVjdHMgKCk7CgkJCWdCaXRtYXBQb2ludGVyTGlzdC5lcmFzZSAoaXRlcik7CgkJCU1l dGFNZW1vcnk6Ok1hcmtVSU9iamVjdHMgKCk7CgkJfQoJfQp9CgoKI3ByYWdtYSBtYXJrIC0KCnN0 cnVjdCBFbUNoZWNrSXRlckRhdGEKewoJZW11cHRyCWFkZHJlc3M7CglzaXplX3QJc2l6ZTsKCUJv b2wJZm9yUmVhZDsKCUJvb2wJaXNJblVJT2JqZWN0OwoJQm9vbAlidXRJdHNPSzsKfTsKCgogCiAK IAogCiAKIAoKc3RhdGljIGludCBQcnZHZXRPYmplY3RTaXplIChlbXVwdHIgb2JqZWN0LCBpbnQg dHlwZSkKewoJaW50CXJlc3VsdCA9IDA7CgoJaWYgKHR5cGUgPT0ga1VJV2luZG93KQoJewoJCSAK CQkgCgoJCWNvbnN0IEVtUGFsbUhlYXAqCWhlYXAgPSBFbVBhbG1IZWFwOjpHZXRIZWFwQnlQdHIg KChNZW1QdHIpIG9iamVjdCk7CgoJCSAKCgkJKCh2b2lkKSAwKSA7CgoJCWlmICghaGVhcCkKCQkJ cmV0dXJuIHJlc3VsdDsKCgkJIAoKCQlFbVBhbG1DaHVuawljaHVuayAoKmhlYXAsIG9iamVjdCAt IGhlYXAtPkNodW5rSGVhZGVyU2l6ZSAoKSk7CgoJCXJlc3VsdCA9IGNodW5rLkJvZHlTaXplICgp OwoJfQoJZWxzZSBpZiAodHlwZSA9PSBrVUlCaXRtYXApCgl7CgkJRW1BbGlhc0JpdG1hcFR5cGVW MzxQQVM+CWJpdG1hcFYzIChvYmplY3QpOwoKCQlpZiAoYml0bWFwVjMudmVyc2lvbiA8PSAyKQoJ CXsKCQkJcmVzdWx0ID0gRW1Qcm94eUJpdG1hcFR5cGVWMjo6R2V0U2l6ZSAoKTsKCQl9CgkJZWxz ZQoJCXsKCQkJcmVzdWx0ID0gYml0bWFwVjMuc2l6ZTsKCQl9Cgl9CgllbHNlCgl7CgkJKCh2b2lk KSAwKSA7Cgl9CgoJcmV0dXJuIHJlc3VsdDsKfQoKCiAKIAogCgpzdGF0aWMgZW11cHRyIFBydkdl dE5leHRCaXRtYXAgKGVtdXB0ciBwKQp7CgllbXVwdHIJbmV4dEJpdG1hcCA9ICgoZW11cHRyKSAw KSA7CgoJRW1BbGlhc0JpdG1hcFR5cGVWMjxQQVM+CWJpdG1hcFYyIChwKTsKCgkgCgkgCgoJaWYg KGJpdG1hcFYyLnZlcnNpb24gPj0gMykKCXsKCQlFbUFsaWFzQml0bWFwVHlwZVYzPFBBUz4JYml0 bWFwVjMgKHApOwoJCQoJCWlmIChiaXRtYXBWMy5uZXh0RGVwdGhPZmZzZXQgIT0gMCkKCQl7CgkJ CW5leHRCaXRtYXAgPSBwICsgYml0bWFwVjMubmV4dERlcHRoT2Zmc2V0ICogc2l6ZW9mIChVSW50 MzIpOwoJCX0KCX0KCgkgCgkgCgoJZWxzZSBpZiAoYml0bWFwVjIubmV4dERlcHRoT2Zmc2V0ICE9 IDApCgl7CgkJbmV4dEJpdG1hcCA9IHAgKyBiaXRtYXBWMi5uZXh0RGVwdGhPZmZzZXQgKiBzaXpl b2YgKFVJbnQzMik7Cgl9CgoJIAoJIAoJIAoKCWVsc2UgaWYgKGJpdG1hcFYyLnZlcnNpb24gPT0g MSAmJiBiaXRtYXBWMi5waXhlbFNpemUgPT0gMjU1KQoJewoJCW5leHRCaXRtYXAgPSBwICsgYml0 bWFwVjIuR2V0U2l6ZSAoKTsKCX0KCgkoKHZvaWQpIDApIDsKCglyZXR1cm4gbmV4dEJpdG1hcDsK fQoKCiAKIAogCgpzdGF0aWMgQm9vbCBQcnZDaGVja0Zvcm1PYmplY3QgKEVtQWxpYXNGb3JtVHlw ZTxQQVM+JiBmb3JtLAoJCQkJCQkgRW1BbGlhc0Zvcm1PYmpMaXN0VHlwZTxQQVM+JiBmb3JtT2Jq ZWN0LAoJCQkJCQkgRW1DaGVja0l0ZXJEYXRhKiBkYXRhKQp7CgkgCgoJZW11cHRyCQkJZm9ybVAJ CT0gZm9ybS5HZXRQdHIgKCk7CgllbXVwdHIJCQlmb3JtT2JqZWN0UAk9IGZvcm1PYmplY3QuR2V0 UHRyICgpOwoKCUZvcm1PYmplY3RLaW5kCWtpbmQJCT0gZm9ybU9iamVjdC5vYmplY3RUeXBlOwoJ ZW11cHRyCQkJb2JqZWN0QWRkcgk9IGZvcm1PYmplY3Qub2JqZWN0OwoKCXN0YXRpYyBpbnQJa1Np emVBcnJheVtdID0KCXsKCQlFbUFsaWFzRmllbGRUeXBlPFBBUz46OkdldFNpemUgKCksCQkJCSAK CQktMSwJCQkJCQkJCQkJCQkgCgkJRW1BbGlhc0xpc3RUeXBlPFBBUz46OkdldFNpemUgKCksCQkJ CSAKCQlFbUFsaWFzVGFibGVUeXBlPFBBUz46OkdldFNpemUgKCksCQkJCSAKCQlFbUFsaWFzRm9y bUJpdG1hcFR5cGU8UEFTPjo6R2V0U2l6ZSAoKSwJCQkgCgkJRW1BbGlhc0Zvcm1MaW5lVHlwZTxQ QVM+OjpHZXRTaXplICgpLAkJCSAKCQlFbUFsaWFzRm9ybUZyYW1lVHlwZTxQQVM+OjpHZXRTaXpl ICgpLAkJCSAKCQlFbUFsaWFzRm9ybVJlY3RhbmdsZVR5cGU8UEFTPjo6R2V0U2l6ZSAoKSwJCSAK CQlFbUFsaWFzRm9ybUxhYmVsVHlwZTxQQVM+OjpHZXRTaXplICgpLAkJCSAKCQlFbUFsaWFzRm9y bVRpdGxlVHlwZTxQQVM+OjpHZXRTaXplICgpLAkJCSAKCQlFbUFsaWFzRm9ybVBvcHVwVHlwZTxQ QVM+OjpHZXRTaXplICgpLAkJCSAKCQlFbUFsaWFzRnJtR3JhZmZpdGlTdGF0ZVR5cGU8UEFTPjo6 R2V0U2l6ZSAoKSwJIAoJCUVtQWxpYXNGb3JtR2FkZ2V0VHlwZTxQQVM+OjpHZXRTaXplICgpLAkJ CSAKCQlFbUFsaWFzU2Nyb2xsQmFyVHlwZTxQQVM+OjpHZXRTaXplICgpCQkJIAoJfTsKCgkgCgoJ aW50CQlpdHNTaXplCT0ga1NpemVBcnJheVtraW5kXTsKCglpZiAoaXRzU2l6ZSA8IDApCSAKCXsK CQkgCgoJCUVtQWxpYXNDb250cm9sVHlwZTxQQVM+CWNvbnRyb2wgKG9iamVjdEFkZHIpOwoJCXVp bnQxNglhdHRyCT0gY29udHJvbC5hdHRyLmZsYWdzOwoJCXVpbnQ4CXN0eWxlCT0gY29udHJvbC5z dHlsZTsKCgkJaXRzU2l6ZQk9IGNvbnRyb2wuR2V0U2l6ZSAoKTsJIAoJCQoJCWlmIChhdHRyICYg MHgwMDQwICkKCQl7CgkJCSAKCgkJCWl0c1NpemUgPSBFbUFsaWFzR3JhcGhpY0NvbnRyb2xUeXBl PFBBUz46OkdldFNpemUgKCk7CgkJfQoJCWVsc2UgaWYgKHN0eWxlID09IHNsaWRlckN0bCB8fCBz dHlsZSA9PSBmZWVkYmFja1NsaWRlckN0bCkKCQl7CgkJCSAKCgkJCWl0c1NpemUgPSBFbUFsaWFz U2xpZGVyQ29udHJvbFR5cGU8UEFTPjo6R2V0U2l6ZSAoKTsKCQl9Cgl9CgoJIAoKCWlmIChkYXRh LT5hZGRyZXNzID49IG9iamVjdEFkZHIgJiYgZGF0YS0+YWRkcmVzcyA8IG9iamVjdEFkZHIgKyBp dHNTaXplKQoJewoJCWRhdGEtPmlzSW5VSU9iamVjdCA9IHRydWU7CgoJCWlmICghOjpQcnZBbGxv d2VkRm9ybU9iamVjdEFjY2VzcyAoZm9ybU9iamVjdCwgZGF0YS0+YWRkcmVzcywgZGF0YS0+Zm9y UmVhZCkpCgkJewoJCQlnU2Vzc2lvbi0+U2NoZWR1bGVEZWZlcnJlZEVycm9yIChuZXcgRW1EZWZl cnJlZEVyckZvcm1PYmplY3RBY2Nlc3MgKGZvcm1PYmplY3RQLCBmb3JtUCwgZGF0YS0+YWRkcmVz cywgZGF0YS0+c2l6ZSwgZGF0YS0+Zm9yUmVhZCkpOwoJCQlkYXRhLT5idXRJdHNPSyA9IGZhbHNl OwoJCX0KCgkJcmV0dXJuIHRydWU7Cgl9CgoJIAoKCWVtdXB0cgl0ZXh0UHRyID0gKChlbXVwdHIp IDApIDsKCglzd2l0Y2ggKGtpbmQpCgl7CgkJY2FzZSBmcm1Db250cm9sT2JqOgoJCXsKCQkJRW1B bGlhc0NvbnRyb2xUeXBlPFBBUz4JY29udHJvbCAob2JqZWN0QWRkcik7CgkJCXVpbnQxNglhdHRy CT0gY29udHJvbC5hdHRyLmZsYWdzOwoJCQl1aW50OAlzdHlsZQk9IGNvbnRyb2wuc3R5bGU7CgkJ CQoJCQlpZiAoYXR0ciAmIDB4MDA0MCApCgkJCXsKCQkJCSAKCQkJfQoJCQllbHNlIGlmIChzdHls ZSA9PSBzbGlkZXJDdGwgfHwgc3R5bGUgPT0gZmVlZGJhY2tTbGlkZXJDdGwpCgkJCXsKCQkJCSAK CQkJfQoJCQllbHNlCgkJCXsKCQkJCXRleHRQdHIgPSBjb250cm9sLnRleHQ7CgkJCX0KCgkJCWJy ZWFrOwoJCX0KCgkJY2FzZSBmcm1MYWJlbE9iajoKCQl7CgkJCUVtQWxpYXNGb3JtTGFiZWxUeXBl PFBBUz4JbGFiZWwgKG9iamVjdEFkZHIpOwoJCQl0ZXh0UHRyID0gbGFiZWwudGV4dDsKCQkJYnJl YWs7CgkJfQoKCQljYXNlIGZybVRpdGxlT2JqOgoJCXsKCQkJRW1BbGlhc0Zvcm1UaXRsZVR5cGU8 UEFTPgl0aXRsZSAob2JqZWN0QWRkcik7CgkJCXRleHRQdHIgPSB0aXRsZS50ZXh0OwoJCQlicmVh azsKCQl9CgoJCWNhc2UgZnJtRmllbGRPYmo6CSAKCQkJCQkJCSAKCQkJCQkJCSAKCQkJCQkJCSAK CQljYXNlIGZybUxpc3RPYmo6CgkJY2FzZSBmcm1UYWJsZU9iajoKCQljYXNlIGZybUJpdG1hcE9i ajoKCQljYXNlIGZybUxpbmVPYmo6CgkJY2FzZSBmcm1GcmFtZU9iajoKCQljYXNlIGZybVJlY3Rh bmdsZU9iajoKCQljYXNlIGZybVBvcHVwT2JqOgoJCWNhc2UgZnJtR3JhZmZpdGlTdGF0ZU9iajoK CQljYXNlIGZybUdhZGdldE9iajoKCQljYXNlIGZybVNjcm9sbEJhck9iajoKCQkJYnJlYWs7Cgl9 CgoJaWYgKHRleHRQdHIpCgl7CgkJc2l6ZV90CXRleHRTaXplID0gRW1NZW1fc3RybGVuICh0ZXh0 UHRyKSArIDE7CgoJCWlmIChkYXRhLT5hZGRyZXNzID49IHRleHRQdHIgJiYgZGF0YS0+YWRkcmVz cyA8IHRleHRQdHIgKyB0ZXh0U2l6ZSkKCQl7CgkJCWRhdGEtPmlzSW5VSU9iamVjdCA9IHRydWU7 CgoJCQlpZiAoITo6UHJ2QWxsb3dlZEZvcm1PYmplY3RBY2Nlc3MgKGZvcm1PYmplY3QsIGRhdGEt PmFkZHJlc3MsIGRhdGEtPmZvclJlYWQpKQoJCQl7CgkJCQlnU2Vzc2lvbi0+U2NoZWR1bGVEZWZl cnJlZEVycm9yIChuZXcgRW1EZWZlcnJlZEVyckZvcm1PYmplY3RBY2Nlc3MgKGZvcm1PYmplY3RQ LCBmb3JtUCwgZGF0YS0+YWRkcmVzcywgZGF0YS0+c2l6ZSwgZGF0YS0+Zm9yUmVhZCkpOwoJCQkJ ZGF0YS0+YnV0SXRzT0sgPSBmYWxzZTsKCQkJfQoKCQkJcmV0dXJuIHRydWU7CgkJfQoJfQoKCXJl dHVybiBmYWxzZTsKfQoKCiAKIAogCgpzdGF0aWMgQm9vbCBQcnZDaGVja0Zvcm0gKEVtQWxpYXNG b3JtVHlwZTxQQVM+JiBmb3JtLCBFbUNoZWNrSXRlckRhdGEqIGRhdGEpCnsKCSAKCgllbXVwdHIJ Zm9ybVAJPSBmb3JtLkdldFB0ciAoKTsKCXNpemVfdAlzaXplCT0gZm9ybS5HZXRTaXplICgpOwoK CWlmIChkYXRhLT5hZGRyZXNzID49IGZvcm1QICYmIGRhdGEtPmFkZHJlc3MgPCBmb3JtUCArIHNp emUpCgl7CgkJZGF0YS0+aXNJblVJT2JqZWN0ID0gdHJ1ZTsKCgkJaWYgKCE6OlBydkFsbG93ZWRG b3JtQWNjZXNzIChmb3JtUCwgZGF0YS0+YWRkcmVzcywgZGF0YS0+Zm9yUmVhZCkpCgkJewoJCQln U2Vzc2lvbi0+U2NoZWR1bGVEZWZlcnJlZEVycm9yIChuZXcgRW1EZWZlcnJlZEVyckZvcm1BY2Nl c3MgKGZvcm1QLCBkYXRhLT5hZGRyZXNzLCBkYXRhLT5zaXplLCBkYXRhLT5mb3JSZWFkKSk7CgkJ CWRhdGEtPmJ1dEl0c09LID0gZmFsc2U7CgkJfQoKCQlyZXR1cm4gdHJ1ZTsKCX0KCgkgCgoJIAoJ IAoKCXVpbnQxNgludW1PYmplY3RzCT0gZm9ybS5udW1PYmplY3RzOwoJZW11cHRyCWZpcnN0T2Jq ZWN0CT0gZm9ybS5vYmplY3RzOwoJZW11cHRyCWxhc3RPYmplY3QJPSBmaXJzdE9iamVjdCArIG51 bU9iamVjdHMgKiBFbUFsaWFzRm9ybU9iakxpc3RUeXBlPFBBUz46OkdldFNpemUgKCk7CgoJaWYg KGRhdGEtPmFkZHJlc3MgPj0gZmlyc3RPYmplY3QgJiYgZGF0YS0+YWRkcmVzcyA8IGxhc3RPYmpl Y3QpCgl7CgkJZGF0YS0+aXNJblVJT2JqZWN0ID0gdHJ1ZTsKCgkJaWYgKCE6OlBydkFsbG93ZWRG b3JtQWNjZXNzIChmb3JtUCwgZGF0YS0+YWRkcmVzcywgZGF0YS0+Zm9yUmVhZCkpCgkJewoJCQln U2Vzc2lvbi0+U2NoZWR1bGVEZWZlcnJlZEVycm9yIChuZXcgRW1EZWZlcnJlZEVyckZvcm1BY2Nl c3MgKGZvcm1QLCBkYXRhLT5hZGRyZXNzLCBkYXRhLT5zaXplLCBkYXRhLT5mb3JSZWFkKSk7CgkJ CWRhdGEtPmJ1dEl0c09LID0gZmFsc2U7CgkJfQoKCQlyZXR1cm4gdHJ1ZTsKCX0KCgkgCgkgCgoJ ZW11cHRyCXRoaXNPYmplY3QgPSBmaXJzdE9iamVjdDsKCglmb3IgKGludCBpaSA9IDA7IGlpIDwg bnVtT2JqZWN0czsgKytpaSkKCXsKCQlFbUFsaWFzRm9ybU9iakxpc3RUeXBlPFBBUz4JZm9ybU9i amVjdCAodGhpc09iamVjdCk7CgoJCWlmICg6OlBydkNoZWNrRm9ybU9iamVjdCAoZm9ybSwgZm9y bU9iamVjdCwgZGF0YSkpCgkJCXJldHVybiB0cnVlOwoKCQkgCgoJCXRoaXNPYmplY3QgKz0gZm9y bU9iamVjdC5HZXRTaXplICgpOwoJfQoKCXJldHVybiBmYWxzZTsKfQoKCiAKIAogCgpzdGF0aWMg Qm9vbCBQcnZDaGVja1dpbmRvdyAoRW1BbGlhc1dpbmRvd1R5cGU8UEFTPiYgd2luZG93LCBFbUNo ZWNrSXRlckRhdGEqIGRhdGEpCnsKCSAKCSAKCSAKCSAKCSAKCgllbXVwdHIJd2luZG93UCA9IHdp bmRvdy5HZXRQdHIgKCk7CglzaXplX3QJc2l6ZQk9IHdpbmRvdy5HZXRTaXplICgpOwoKCWlmIChk YXRhLT5hZGRyZXNzID49IHdpbmRvd1AgJiYgZGF0YS0+YWRkcmVzcyA8IHdpbmRvd1AgKyBzaXpl KQoJewoJCWRhdGEtPmlzSW5VSU9iamVjdCA9IHRydWU7CgoJCWlmICghOjpQcnZBbGxvd2VkV2lu ZG93QWNjZXNzICh3aW5kb3dQLCBkYXRhLT5hZGRyZXNzLCBkYXRhLT5mb3JSZWFkKSkKCQl7CgkJ CWdTZXNzaW9uLT5TY2hlZHVsZURlZmVycmVkRXJyb3IgKG5ldyBFbURlZmVycmVkRXJyV2luZG93 QWNjZXNzICh3aW5kb3dQLCBkYXRhLT5hZGRyZXNzLCBkYXRhLT5zaXplLCBkYXRhLT5mb3JSZWFk KSk7CgkJCWRhdGEtPmJ1dEl0c09LID0gZmFsc2U7CgkJfQoKCQlyZXR1cm4gdHJ1ZTsKCX0KCgly ZXR1cm4gZmFsc2U7Cn0KCgogCiAKIAoKc3RhdGljIEJvb2wgUHJ2Q2hlY2tCaXRtYXAgKEVtQWxp YXNCaXRtYXBUeXBlVjI8UEFTPiYgYml0bWFwVjIsIEVtQ2hlY2tJdGVyRGF0YSogZGF0YSkKewoJ ZW11cHRyCWJpdG1hcFAJPSBiaXRtYXBWMi5HZXRQdHIgKCk7CglzaXplX3QJc2l6ZQk9IGJpdG1h cFYyLkdldFNpemUgKCk7CgoJaWYgKGRhdGEtPmFkZHJlc3MgPj0gYml0bWFwUCAmJiBkYXRhLT5h ZGRyZXNzIDwgYml0bWFwUCArIHNpemUpCgl7CgkJZGF0YS0+aXNJblVJT2JqZWN0ID0gdHJ1ZTsK CgkJaWYgKCE6OlBydkFsbG93ZWRCaXRtYXBBY2Nlc3MgKGJpdG1hcFYyLCBkYXRhLT5hZGRyZXNz LCBkYXRhLT5mb3JSZWFkKSkKCQl7CgkJCWdTZXNzaW9uLT5TY2hlZHVsZURlZmVycmVkRXJyb3Ig KG5ldyBFbURlZmVycmVkRXJyQml0bWFwQWNjZXNzIChiaXRtYXBQLCBkYXRhLT5hZGRyZXNzLCBk YXRhLT5zaXplLCBkYXRhLT5mb3JSZWFkKSk7CgkJCWRhdGEtPmJ1dEl0c09LID0gZmFsc2U7CgkJ fQoKCQlyZXR1cm4gdHJ1ZTsKCX0KCglyZXR1cm4gZmFsc2U7Cn0KCgogCiAKIAoKc3RhdGljIEJv b2wgUHJ2Q2hlY2tCaXRtYXAgKEVtQWxpYXNCaXRtYXBUeXBlVjM8UEFTPiYgYml0bWFwVjMsIEVt Q2hlY2tJdGVyRGF0YSogZGF0YSkKewoJZW11cHRyCWJpdG1hcFAJPSBiaXRtYXBWMy5HZXRQdHIg KCk7CglzaXplX3QJc2l6ZQk9IGJpdG1hcFYzLnNpemU7CgoJaWYgKGRhdGEtPmFkZHJlc3MgPj0g Yml0bWFwUCAmJiBkYXRhLT5hZGRyZXNzIDwgYml0bWFwUCArIHNpemUpCgl7CgkJZGF0YS0+aXNJ blVJT2JqZWN0ID0gdHJ1ZTsKCgkJaWYgKCE6OlBydkFsbG93ZWRCaXRtYXBBY2Nlc3MgKGJpdG1h cFYzLCBkYXRhLT5hZGRyZXNzLCBkYXRhLT5mb3JSZWFkKSkKCQl7CgkJCWdTZXNzaW9uLT5TY2hl ZHVsZURlZmVycmVkRXJyb3IgKG5ldyBFbURlZmVycmVkRXJyQml0bWFwQWNjZXNzIChiaXRtYXBQ LCBkYXRhLT5hZGRyZXNzLCBkYXRhLT5zaXplLCBkYXRhLT5mb3JSZWFkKSk7CgkJCWRhdGEtPmJ1 dEl0c09LID0gZmFsc2U7CgkJfQoKCQlyZXR1cm4gdHJ1ZTsKCX0KCglyZXR1cm4gZmFsc2U7Cn0K CgogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKCkJvb2wgUHJ2Q2hlY2tVSU9iamVjdCAoZW11 cHRyIG9iamVjdFAsIHZvaWQqIGQsIGludCB0eXBlKQp7CgkgCgoJKCh2b2lkKSAwKSA7CglFbUNo ZWNrSXRlckRhdGEqCWRhdGEgPSAoRW1DaGVja0l0ZXJEYXRhKikgZDsKCglpZiAodHlwZSA9PSBr VUlXaW5kb3cpCgl7CgkJIAoKCQlFbUFsaWFzV2luZG93VHlwZTxQQVM+CXdpbmRvdyAob2JqZWN0 UCk7CgkJdWludDE2CWZsYWdzID0gd2luZG93LndpbmRvd0ZsYWdzLmZsYWdzOwoKCQlpZiAoZmxh Z3MgJiAweDAyMDAgKQoJCXsKCQkJIAoKCQkJRW1BbGlhc0Zvcm1UeXBlPFBBUz4JZm9ybSAob2Jq ZWN0UCk7CgoJCQlpZiAoOjpQcnZDaGVja0Zvcm0gKGZvcm0sIGRhdGEpKQoJCQkJcmV0dXJuIHRy dWU7CgkJfQoJCWVsc2UKCQl7CgkJCSAKCgkJCWlmICg6OlBydkNoZWNrV2luZG93ICh3aW5kb3cs IGRhdGEpKQoJCQkJcmV0dXJuIHRydWU7CgkJfQoJfQoJZWxzZSBpZiAodHlwZSA9PSBrVUlCaXRt YXApCgl7CgkJRW1BbGlhc0JpdG1hcFR5cGVWMjxQQVM+CWJpdG1hcFYyIChvYmplY3RQKTsKCgkJ aWYgKGJpdG1hcFYyLnZlcnNpb24gPD0gMikKCQl7CgkJCWlmICg6OlBydkNoZWNrQml0bWFwIChi aXRtYXBWMiwgZGF0YSkpCgkJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJZWxzZQoJCXsKCQkJRW1BbGlh c0JpdG1hcFR5cGVWMzxQQVM+CWJpdG1hcFYzIChvYmplY3RQKTsKCgkJCWlmICg6OlBydkNoZWNr Qml0bWFwIChiaXRtYXBWMywgZGF0YSkpCgkJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9CgllbHNlCgl7 CgkJKCh2b2lkKSAwKSA7Cgl9CgoJcmV0dXJuIGZhbHNlOwp9CgoKIAogCiAKIAogCgpCb29sIFBy dk1hcmtVSU9iamVjdCAoZW11cHRyIG9iamVjdCwgdm9pZCogICwgaW50IHR5cGUpCnsKCWVtdXB0 cgliZWdpbgk9IG9iamVjdDsKCWVtdXB0cgllbmQJCT0gYmVnaW4gKyA6OlBydkdldE9iamVjdFNp emUgKG9iamVjdCwgdHlwZSk7CgoJTWV0YU1lbW9yeTo6TWFya1VJT2JqZWN0IChiZWdpbiwgZW5k KTsKCglyZXR1cm4gZmFsc2U7Cn0KCgogCiAKIAogCiAKCnN0YXRpYyBCb29sIFBydlVubWFya1VJ T2JqZWN0IChlbXVwdHIgb2JqZWN0LCB2b2lkKiAgLCBpbnQgdHlwZSkKewoJZW11cHRyCWJlZ2lu CT0gb2JqZWN0OwoJZW11cHRyCWVuZAkJPSBiZWdpbiArIDo6UHJ2R2V0T2JqZWN0U2l6ZSAob2Jq ZWN0LCB0eXBlKTsKCglNZXRhTWVtb3J5OjpVbm1hcmtVSU9iamVjdCAoYmVnaW4sIGVuZCk7CgoJ cmV0dXJuIGZhbHNlOwp9CgoKIAogCiAKIAogCiAKIAoKQm9vbCBQcnZGb3JFYWNoV2luZG93IChJ dGVyRm4gZm4sIHZvaWQqIGRhdGEpCnsKCSAKCSAKCSAKCSAKCglpZiAoIUVtUGF0Y2hTdGF0ZTo6 VUlSZXNldCAoKSkKCQlyZXR1cm4gZmFsc2U7CgoJIAoKCWVtdXB0cgl3ID0gRW1Mb3dNZW06OmZn TG93TWVtLmdsb2JhbHMuIHVpR2xvYmFscy5maXJzdFdpbmRvdyAgOwoJd2hpbGUgKHcpCgl7CgkJ aWYgKGZuICh3LCBkYXRhLCBrVUlXaW5kb3cpKQoJCQlyZXR1cm4gdHJ1ZTsKCgkJIAoKCQlFbUFs aWFzV2luZG93VHlwZTxQQVM+CXdpbmRvdyAodyk7CgkJdyA9IHdpbmRvdy5uZXh0V2luZG93OwoJ fQoKCXJldHVybiBmYWxzZTsKfQoKCiAKIAogCiAKIAogCiAKCkJvb2wgUHJ2Rm9yRWFjaEJpdG1h cCAoSXRlckZuICAsIHZvaWQqICApCnsKIyAzNDgxICIuLy4uL1NyY1NoYXJlZC9NZXRhTWVtb3J5 LmNwcCIKCgoJcmV0dXJuIGZhbHNlOwp9CgoKIAogCiAKIAogCiAKIAoKQm9vbCBQcnZGb3JFYWNo VUlPYmplY3QgKEl0ZXJGbiBmbiwgdm9pZCogZGF0YSkKewoJIAoKCUNFbmFibGVGdWxsQWNjZXNz CW11bmdlOwoKCSAKCglpZiAoOjpQcnZGb3JFYWNoV2luZG93IChmbiwgZGF0YSkpCgkJcmV0dXJu IHRydWU7CgoJIAoKCWlmICg6OlBydkZvckVhY2hCaXRtYXAgKGZuLCBkYXRhKSkKCQlyZXR1cm4g dHJ1ZTsKCglyZXR1cm4gZmFsc2U7Cn0KCgogCiAKIAogCiAKCnZvaWQgTWV0YU1lbW9yeTo6Q2hl Y2tVSU9iamVjdEFjY2VzcyAoZW11cHRyIGFkZHJlc3MsIHNpemVfdCBzaXplLCBCb29sIGZvclJl YWQsCgkJCQkJCQkJCSAgQm9vbCYgaXNJblVJT2JqZWN0LCBCb29sJiBidXRJdHNPSykKewoJRW1D aGVja0l0ZXJEYXRhCWRhdGE7CgoJZGF0YS5hZGRyZXNzCQk9IGFkZHJlc3M7CglkYXRhLnNpemUJ CQk9IHNpemU7CglkYXRhLmZvclJlYWQJCT0gZm9yUmVhZDsKCWRhdGEuaXNJblVJT2JqZWN0CT0g ZmFsc2U7CglkYXRhLmJ1dEl0c09LCQk9IHRydWU7CgoJOjpQcnZGb3JFYWNoVUlPYmplY3QgKCY6 OlBydkNoZWNrVUlPYmplY3QsICZkYXRhKTsKCglpc0luVUlPYmplY3QJCT0gZGF0YS5pc0luVUlP YmplY3Q7CglidXRJdHNPSwkJCT0gZGF0YS5idXRJdHNPSzsKfQoKCiAKIAogCiAKIAoKdm9pZCBN ZXRhTWVtb3J5OjpNYXJrVUlPYmplY3RzICh2b2lkKQp7Cgk6OlBydkZvckVhY2hVSU9iamVjdCAo Jjo6UHJ2TWFya1VJT2JqZWN0LCBfX251bGwgKTsKfQoKCiAKIAogCiAKIAoKdm9pZCBNZXRhTWVt b3J5OjpVbm1hcmtVSU9iamVjdHMgKHZvaWQpCnsKCTo6UHJ2Rm9yRWFjaFVJT2JqZWN0ICgmOjpQ cnZVbm1hcmtVSU9iamVjdCwgX19udWxsICk7Cn0KCgojcHJhZ21hIG1hcmsgLQoKIAogCiAKIAog CgpzdGF0aWMgZW11cHRyIFBydkxvY2FsSURUb1B0ciAoTG9jYWxJRCBsb2NhbCkKewoJZW11cHRy CQkJCQkJbWVtQ2FyZEluZm9QID0gRW1Mb3dNZW06OmZnTG93TWVtLmdsb2JhbHMuIG1lbUNhcmRJ bmZvUCAgOwoJRW1BbGlhc0NhcmRJbmZvVHlwZTxQQVM+CWNhcmRJbmZvIChtZW1DYXJkSW5mb1Ap OwoJZW11cHRyCQkJCQkJcCA9IChsb2NhbCAmIDB4RkZGRkZGRkUpICsgY2FyZEluZm8uYmFzZVA7 CgoJIAoKCWlmIChsb2NhbCAmIDB4MDEpIAoJCXAgPSBFbU1lbUdldDMyIChwKTsKCglyZXR1cm4g cDsKfQoKCiAKIAogCiAKCnN0YXRpYyBlbXVwdHIgUHJ2R2V0UkFNRGF0YWJhc2VEaXJlY3Rvcnko dm9pZCkKewoJZW11cHRyCQkJCQkJCW1lbUNhcmRJbmZvUCA9IEVtTG93TWVtOjpmZ0xvd01lbS5n bG9iYWxzLiBtZW1DYXJkSW5mb1AgIDsKCUVtQWxpYXNDYXJkSW5mb1R5cGU8UEFTPgkJY2FyZElu Zm8gKG1lbUNhcmRJbmZvUCk7CgllbXVwdHIJCQkJCQkJc3RvcmVQID0gY2FyZEluZm8ucmFtU3Rv cmVQOwoKCUVtQWxpYXNTdG9yYWdlSGVhZGVyVHlwZTxQQVM+CXN0b3JlIChzdG9yZVApOwoJTG9j YWxJRAkJCQkJCQlkYXRhYmFzZURpcklEID0gc3RvcmUuZGF0YWJhc2VEaXJJRDsKCglyZXR1cm4g OjpQcnZMb2NhbElEVG9QdHIgKGRhdGFiYXNlRGlySUQpOwp9CgoKIAogCiAKCnN0YXRpYyBpbmxp bmUgQm9vbCBQcnZJc09LQ2hhcmFjdGVyIChjaGFyIGNoKQp7CglyZXR1cm4gKChfX2N0eXBlICsg MSlbIGNoIF0gJiAweDAwMDAwMDAyICkgOwp9CgoKIAogCiAKIAogCgpzdGF0aWMgaW5saW5lIEJv b2wgUHJ2SXNMb3dlckNhc2VDcmVhdG9yIChVSW50MzIgY3JlYXRvcikKewoJY29uc3QgY2hhcioJ cCA9IChjb25zdCBjaGFyKikgJmNyZWF0b3I7CgoJcmV0dXJuCVBydklzT0tDaGFyYWN0ZXIgKHBb MF0pICYmCgkJCVBydklzT0tDaGFyYWN0ZXIgKHBbMV0pICYmCgkJCVBydklzT0tDaGFyYWN0ZXIg KHBbMl0pICYmCgkJCVBydklzT0tDaGFyYWN0ZXIgKHBbM10pOwp9CgoKIAogCiAKCnN0YXRpYyBC b29sIFBydklzUGFsbUNyZWF0b3IgKFVJbnQzMiBjcmVhdG9yKQp7CgkgCgkgCgkgCgoJc3RhdGlj IGNvbnN0IFVJbnQzMiBrTm9uU3RhbmRhcmRDcmVhdG9yc1tdID0KCXsKCQknYTY4aycsCgkJJ21m eDEnLAoJCSd1MzI4JywKCQkndTY1MCcsCgkJJ3U4RVonCgl9OwoKCSAKCSAKCglpZiAoOjpQcnZJ c0xvd2VyQ2FzZUNyZWF0b3IgKGNyZWF0b3IpKQoJewoJCXJldHVybiB0cnVlOwoJfQoKCSAKCSAK Cglmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgKHNpemVvZigga05vblN0YW5kYXJkQ3JlYXRvcnMg KSAvIHNpemVvZiAoIGtOb25TdGFuZGFyZENyZWF0b3JzIFswXSkpIDsgKytpaSkKCXsKCQlpZiAo Y3JlYXRvciA9PSBrTm9uU3RhbmRhcmRDcmVhdG9yc1tpaV0pCgkJewoJCQlyZXR1cm4gdHJ1ZTsK CQl9Cgl9CgoJIAoKCXJldHVybiBmYWxzZTsKfQoKCiAKIAogCgpzdGF0aWMgQm9vbCBQcnZJc1Jl Z2lzdGVyZWRQYWxtQ3JlYXRvciAoVUludDMyIGNyZWF0b3IpCnsKCSAKCglzdGF0aWMgY29uc3Qg VUludDMyIGtQYWxtUmVnaXN0ZXJlZENyZWF0b3JzW10gPQoJewoJCSdhNjhrJywJCSdhY3R2JywJ CSdhZGRyJywJCSdibHRoJywJCSdidGNwJywKCQknYnRleCcsCQknYnR0bicsCQknYnR0eCcsCQkn Y2FsYycsCQknY2luZicsCgkJJ2NscHInLAkJJ2RhdGUnLAkJJ2RibW4nLAkJJ2RpYWwnLAkJJ2Rp Y3QnLAoJCSdkaWdpJywJCSdkbWZ4JywJCSdkdHRtJywJCSdlY29uJywJCSdleHBuJywKCQknZXhw cycsCQknZmF0ZicsCQknZmlucycsCQknZmxzaCcsCQknZm9uZScsCgkJJ2ZybXQnLAkJJ2dhZmQn LAkJJ2dkZW0nLAkJJ2ducmwnLAkJJ2dyYWYnLAoJCSdnc21mJywJCSdoaWRkJywJCSdocGFkJywJ CSdocmVsJywJCSdoc3N1JywKCQknaHRjcCcsCQknaW5ldCcsCQknaXJjbScsCQknaXJkYScsCQkn aXdycCcsCgkJJ2xuY2gnLAkJJ2xvY2wnLAkJJ2xwa3InLAkJJ21haWwnLAkJJ21kZW0nLAoJCSdt ZW1vJywJCSdtZW1yJywJCSdtZmdjJywJCSdtZmdmJywJCSdtZngxJywKCQknbWluZScsCQknbW1m eCcsCQknbW9kbScsCQknbXNncycsCQknbmV0bCcsCgkJJ25ldHAnLAkJJ25ldHQnLAkJJ25ldHcn LAkJJ29sYmknLAkJJ293bnInLAoJCSdwYXRkJywJCSdwZGlsJywJCSdwZHZjJywJCSdwaG9wJywJ CSdwaW5nJywKCQkncG5wcycsCQkncG9lbScsCQkncG9ydCcsCQkncHJlZicsCQkncHN5cycsCgkJ J3B0Y2gnLAkJJ3B1c2InLAkJJ3B1emwnLAkJJ3JmY20nLAkJJ3JmZGcnLAoJCSdzZHNkJywJCSdz ZWNsJywJCSdzZWNyJywJCSdzZXRwJywJCSdzaGN0JywKCQknc21ncicsCQknc21zbCcsCQknc21z bScsCQknc3BodCcsCQknc3J2cicsCgkJJ3N0Z2QnLAkJJ3N3cnAnLAkJJ3N5bmMnLAkJJ3RtZ3In LAkJJ3RvZG8nLAoJCSd0c21sJywJCSd1MzI4JywJCSd1NjUwJywJCSd1OEVaJywJCSd1ZGljJywK CQkndXNiYycsCQkndXNiZCcsCQkndXNicCcsCQkndmZzbScsCQknd2NscCcsCgkJJ3dlYmwnLAkJ J3d3d3cnCgl9OwoKCWNvbnN0IFVJbnQzMioJYmVnaW4JPSAma1BhbG1SZWdpc3RlcmVkQ3JlYXRv cnNbMF07Cgljb25zdCBVSW50MzIqCWVuZAkJPSAma1BhbG1SZWdpc3RlcmVkQ3JlYXRvcnNbKHNp emVvZigga1BhbG1SZWdpc3RlcmVkQ3JlYXRvcnMgKSAvIHNpemVvZiAoIGtQYWxtUmVnaXN0ZXJl ZENyZWF0b3JzIFswXSkpIF07CgoJcmV0dXJuIGJpbmFyeV9zZWFyY2ggKGJlZ2luLCBlbmQsIGNy ZWF0b3IpOwp9CgoKIAogCiAKCnN0YXRpYyB2b2lkIFBydkFkZFRhZ2dlZENodW5rIChjb25zdCBF bVRhZ2dlZFBhbG1DaHVuayYgY2h1bmspCnsKCWdUYWdnZWRDaHVua3MucHVzaF9iYWNrIChjaHVu ayk7Cn0KCgogCiAKIAogCiAKCnN0YXRpYyB2b2lkIFBydkxvYWRUYWdnZWRDaHVuayAoZW11cHRy IHBjKQp7CglFbVRhZ2dlZFBhbG1DaHVua0xpc3Q6Oml0ZXJhdG9yCWl0ZXIgPSBnVGFnZ2VkQ2h1 bmtzLmJlZ2luICgpOwoJd2hpbGUgKGl0ZXIgIT0gZ1RhZ2dlZENodW5rcy5lbmQgKCkpCgl7CgkJ aWYgKGl0ZXItPkJvZHlDb250YWlucyAocGMpKQoJCXsKCQkJZ0hhdmVMYXN0Q2h1bmsgPSB0cnVl OwoJCQlnTGFzdENodW5rID0gKml0ZXI7CgkJCXJldHVybjsKCQl9CgoJCSsraXRlcjsKCX0KfQoK CiAKIAogCiAKIAoKdm9pZCBNZXRhTWVtb3J5OjpDaHVua1VubG9ja2VkIChlbXVwdHIgYWRkcikK ewoJRW1UYWdnZWRQYWxtQ2h1bmtMaXN0OjppdGVyYXRvcglpdGVyID0gZ1RhZ2dlZENodW5rcy5i ZWdpbiAoKTsKCXdoaWxlIChpdGVyICE9IGdUYWdnZWRDaHVua3MuZW5kICgpKQoJewoJCWlmIChp dGVyLT5Cb2R5Q29udGFpbnMgKGFkZHIpKQoJCXsKCQkJZ1RhZ2dlZENodW5rcy5lcmFzZSAoaXRl cik7CgoJCQlpZiAoZ0xhc3RDaHVuay5Cb2R5Q29udGFpbnMgKGFkZHIpKQoJCQl7CgkJCQlnSGF2 ZUxhc3RDaHVuayA9IGZhbHNlOwoJCQl9CgoJCQlyZXR1cm47CgkJfQoKCQkrK2l0ZXI7Cgl9Cn0K CgojcHJhZ21hIG1hcmsgLQoKIAogCiAKIAogCgpzdGF0aWMgQm9vbCBQcnZJc1N5c3RlbURhdGFi YXNlIChVSW50MzIgdHlwZSwgVUludDMyIGNyZWF0b3IpCnsKCUJvb2wJaXNTeXN0ZW1EYXRhYmFz ZSA9IGZhbHNlOwoKCWlmICgodHlwZSA9PSAnZXh0bicgKSB8fAoJCSh0eXBlID09ICdsaWJyJyAp IHx8CgkJKHR5cGUgPT0gJ3BhbmwnICkgfHwKCQkodHlwZSA9PSAncHRjaCcgKSB8fAoJCSh0eXBl ID09ICdodGFsJyApIHx8CSAKCQkodHlwZSA9PSAnYnR0eCcpKQkJCQkgCgl7CgkJaXNTeXN0ZW1E YXRhYmFzZSA9IDo6UHJ2SXNQYWxtQ3JlYXRvciAoY3JlYXRvcik7Cgl9CgllbHNlIGlmICh0eXBl ID09ICdhcHBsJyApCgl7CgkJIAoJCSAKCQkgCgkJIAoJCSAKCQkgCgoJCWlzU3lzdGVtRGF0YWJh c2UgPSA6OlBydklzUmVnaXN0ZXJlZFBhbG1DcmVhdG9yIChjcmVhdG9yKTsKCX0KCgkgCgkgCgkg CgkgCgkgCgkgCgkgCgkgCgkgCgkgCgkgCgkgCgkgCgoJZWxzZSBpZiAoY3JlYXRvciA9PSAnSHNF eCcgJiYgKHR5cGUgPT0gJ0hzUHQnIHx8IHR5cGUgPT0gJ0h3QWwnKSkKCXsKCQlpc1N5c3RlbURh dGFiYXNlID0gdHJ1ZTsKCX0KCglyZXR1cm4gaXNTeXN0ZW1EYXRhYmFzZTsKfQoKCiAKIAogCgpz dGF0aWMgdm9pZCBQcnZTZWFyY2hGb3JDb2RlQ2h1bmsgKGVtdXB0ciBwYykKewoJIAoJIAoJIAoJ IAoKCSAKCglDRW5hYmxlRnVsbEFjY2VzcwkJCW11bmdlOwoKCSAKCgllbXVwdHIJCQkJCQlkaXJQ ID0gOjpQcnZHZXRSQU1EYXRhYmFzZURpcmVjdG9yeSAoKTsKCUVtQWxpYXNEYXRhYmFzZURpclR5 cGU8UEFTPglkaXIgKGRpclApOwoKCSAKCglVSW50MTYJbnVtRGF0YWJhc2VzID0gZGlyLm51bURh dGFiYXNlczsKCWZvciAoVUludDE2IGlpID0gMDsgaWkgPCBudW1EYXRhYmFzZXM7ICsraWkpCgl7 CgkJIAoKCQlMb2NhbElECQkJCQkJZGJJRCA9IGRpci5kYXRhYmFzZUlEW2lpXS5iYXNlSUQ7CgkJ ZW11cHRyCQkJCQkJaGRyUCA9IDo6UHJ2TG9jYWxJRFRvUHRyIChkYklEKTsKCQlFbUFsaWFzRGF0 YWJhc2VIZHJUeXBlPFBBUz4JaGRyIChoZHJQKTsKCgkJIAoKCQlpZiAoKGhkci5hdHRyaWJ1dGVz ICYgMHgwMDAxICkgPT0gMCkKCQkJY29udGludWU7CgoJCSAKCgkJRW1BbGlhc1JlY29yZExpc3RU eXBlPFBBUz4JcmVjTGlzdCAoaGRyLnJlY29yZExpc3QpOwoKCQkgCgoJCVVJbnQxNgludW1SZWNv cmRzID0gcmVjTGlzdC5udW1SZWNvcmRzOwoJCWZvciAoVUludDE2IGpqID0gMDsgamogPCBudW1S ZWNvcmRzOyArK2pqKQoJCXsKCQkJRW1BbGlhc1JzcmNFbnRyeVR5cGU8UEFTPgllbnRyeSAocmVj TGlzdC5yZXNvdXJjZXNbampdKTsKCgkJCSAKCgkJCUxvY2FsSUQJZW50cnlMb2NhbElEID0gZW50 cnkubG9jYWxDaHVua0lEOwoJCQllbXVwdHIJcmVzb3VyY2VQID0gOjpQcnZMb2NhbElEVG9QdHIg KGVudHJ5TG9jYWxJRCk7CgoJCQkgCgkJCSAKCgkJCWNvbnN0IEVtUGFsbUhlYXAqCWhlYXAgPSBF bVBhbG1IZWFwOjpHZXRIZWFwQnlQdHIgKChNZW1QdHIpIHJlc291cmNlUCk7CgoJCQkgCgoJCQko KHZvaWQpIDApIDsKCgkJCWlmICghaGVhcCkKCQkJCWNvbnRpbnVlOwoKCQkJIAoKCQkJRW1QYWxt Q2h1bmsJY2h1bmsgKCpoZWFwLCByZXNvdXJjZVAgLSBoZWFwLT5DaHVua0hlYWRlclNpemUgKCkp OwoKCQkJaWYgKCFjaHVuay5Cb2R5Q29udGFpbnMgKHBjKSkKCQkJCWNvbnRpbnVlOwoKCQkJIAoJ CQkgCgoJCQlVSW50MzIJdHlwZQk9IGhkci50eXBlOwoJCQlVSW50MzIJY3JlYXRvcgk9IGhkci5j cmVhdG9yOwoJCQlCb29sCW9rVHlwZQk9IDo6UHJ2SXNTeXN0ZW1EYXRhYmFzZSAodHlwZSwgY3Jl YXRvcik7CgoJCQlnSGF2ZUxhc3RDaHVuawk9IHRydWU7CgkJCWdMYXN0Q2h1bmsJCT0gRW1UYWdn ZWRQYWxtQ2h1bmsgKGNodW5rLCBva1R5cGUpOwoKCQkJOjpQcnZBZGRUYWdnZWRDaHVuayAoZ0xh c3RDaHVuayk7CgoJCQkgCgoJCQlyZXR1cm47CgkJfQoJfQp9CgoKIAogCiAKIAoKQm9vbCBNZXRh TWVtb3J5OjpJblJBTU9TQ29tcG9uZW50IChlbXVwdHIgcGMpCnsKCSAKCglpZiAoQ0VuYWJsZUZ1 bGxBY2Nlc3M6OkFjY2Vzc09LICgpKQoJCXJldHVybiB0cnVlOwoKCSAKCSAKCglpZiAoIShnSGF2 ZUxhc3RDaHVuayAmJiBnTGFzdENodW5rLkJvZHlDb250YWlucyAocGMpKSkKCXsKCQkgCgkJIAoK CQk6OlBydkxvYWRUYWdnZWRDaHVuayAocGMpOwoKCQlpZiAoIShnSGF2ZUxhc3RDaHVuayAmJiBn TGFzdENodW5rLkJvZHlDb250YWlucyAocGMpKSkKCQl7CgkJCSAKCQkJIAoKCQkJOjpQcnZTZWFy Y2hGb3JDb2RlQ2h1bmsgKHBjKTsKCgkJCSAKCQkJIAoJCQkgCgoJCQlpZiAoIShnSGF2ZUxhc3RD aHVuayAmJiBnTGFzdENodW5rLkJvZHlDb250YWlucyAocGMpKSkKCQkJewoJCQkJcmV0dXJuIGZh bHNlOwoJCQl9CgkJfQoJfQoKCSAKCglyZXR1cm4gZ0xhc3RDaHVuay5mSXNTeXN0ZW1DaHVuazsK fQo=