From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9747 invoked by alias); 6 Dec 2002 13:26:07 -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 9671 invoked by uid 71); 6 Dec 2002 13:26:04 -0000 Resent-Date: 6 Dec 2002 13:26:04 -0000 Resent-Message-ID: <20021206132604.9670.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org, britten@caris.com Resent-Reply-To: gcc-gnats@gcc.gnu.org, bradley@caris.com Received: (qmail 5763 invoked by uid 61); 6 Dec 2002 13:18:43 -0000 Message-Id: <20021206131843.5762.qmail@sources.redhat.com> Date: Fri, 06 Dec 2002 05:26:00 -0000 From: bradley@caris.com Reply-To: bradley@caris.com To: gcc-gnats@gcc.gnu.org Cc: britten@caris.com X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) X-GNATS-Notify: britten@caris.com Subject: c++/8841: Internal compiler error building ICU2.2 with gcc 3.2 on CygWin X-SW-Source: 2002-12/txt/msg00353.txt.bz2 List-Id: >Number: 8841 >Category: c++ >Synopsis: Internal compiler error building ICU2.2 with gcc 3.2 on CygWin >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Fri Dec 06 05:26:03 PST 2002 >Closed-Date: >Last-Modified: >Originator: Patrick Bradley >Release: gcc version 3.2 20020927 (prerelease) >Organization: >Environment: cygwin on windows NT4.0 (build 1381: Service pack 6) Intel processor ~1800 Mhz Using the "out of the box" gcc configuration from cygwin ie: Configured with: /netrel/src/gcc-3.2-3/configure --enable-languages=c,c++,f77,java --enable-libgcj --enable-threads=posix --with-system-zlib --enable-nls --without-included-gettext --enable-interprete r --disable-sjlj-exceptions --disable-version-specific-runtime-libs --enable-shared --build=i686-pc-linux --host=i686-pc-cygwin --target=i686-pc-cygwin --enable-haifa --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --libdir=/usr/lib --includedir=/nonexistent/include --libexecdir=/usr/sbin Thread model: posix >Description: I'm trying to build ICU 2.2 on CygWin using the gcc 3.2 compiler. The build process is going well up to the following file where gcc complains about an internal error. make[0]: Making `all' in `i18n' make[1]: Entering directory `/cygdrive/c/third_party_cygwin/icu/source/i18n' c++ -D_REENTRANT -I. -I../common -I../common -D_REENTRANT -DHAVE_CONFIG_H -DU_I18N_IMPLEMENTATION -c -DPIC -o ucol_elm.o ucol_elm.cpp ../common/unicode/normlzr.h: In static member function `static UNormalizationCheckResult icu_2_2::Normalizer::quickCheck(const icu_2_2::UnicodeString&, UNormalizationMode, UErrorCode&)': ../common/unicode/normlzr.h:1103: Internal compiler error in rest_of_compilation, at toplev.c:3491 Please submit a full bug report, [...] >How-To-Repeat: See attachement >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="ucol_elm.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="ucol_elm.ii" IyAxICJ1Y29sX2VsbS5jcHAiDQojIDEgIjxidWlsdC1pbj4iDQojIDEgIjxjb21tYW5kIGxpbmU+ Ig0KIyAxICJ1Y29sX2VsbS5jcHAiDQojIDI2ICJ1Y29sX2VsbS5jcHAiDQojIDEgIi4uL2NvbW1v bi91bmljb2RlL3VjaGFyLmgiIDENCiMgMjYgIi4uL2NvbW1vbi91bmljb2RlL3VjaGFyLmgiDQoj IDEgIi4uL2NvbW1vbi91bmljb2RlL3V0eXBlcy5oIiAxDQojIDM2ICIuLi9jb21tb24vdW5pY29k ZS91dHlwZXMuaCINCiMgMSAiLi4vY29tbW9uL3VuaWNvZGUvdW1hY2hpbmUuaCIgMQ0KIyA1MyAi Li4vY29tbW9uL3VuaWNvZGUvdW1hY2hpbmUuaCINCiMgMSAiLi4vY29tbW9uL3VuaWNvZGUvcGxh dGZvcm0uaCIgMQ0KIyAxNDkgIi4uL2NvbW1vbi91bmljb2RlL3BsYXRmb3JtLmgiDQojIDEgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzDQojIDIwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL19hbnNpLmgiIDEgMw0KIyAxNSAiL3Vzci9pbmNsdWRl L19hbnNpLmgiIDMNCiMgMSAiL3Vzci9pbmNsdWRlL25ld2xpYi5oIiAxIDMNCiMgMTYgIi91c3Iv aW5jbHVkZS9fYW5zaS5oIiAyIDMNCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jb25maWcuaCIgMSAz DQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9tYWNoaW5lL2llZWVmcC5oIiAxIDMNCiMgNSAiL3Vz ci9pbmNsdWRlL3N5cy9jb25maWcuaCIgMiAzDQojIDE3ICIvdXNyL2luY2x1ZGUvX2Fuc2kuaCIg MiAzDQojIDIxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMw0KDQoNCg0KdHlwZWRlZiBz aG9ydCBpbnQgX19pbnQxNl90Ow0KdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZf dDsNCg0KDQoNCg0KDQp0eXBlZGVmIGludCBfX2ludDMyX3Q7DQp0eXBlZGVmIHVuc2lnbmVkIGlu dCBfX3VpbnQzMl90Ow0KDQoNCg0KDQoNCg0KX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9u ZyBfX2ludDY0X3Q7DQpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9f dWludDY0X3Q7DQoNCg0KDQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvX3R5cGVzLmgiIDEg Mw0KIyAxMiAiL3Vzci9pbmNsdWRlL3N5cy9fdHlwZXMuaCIgMw0KdHlwZWRlZiBsb25nIF9vZmZf dDsNCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBsb25nIGxvbmcgX29mZjY0X3Q7DQoNCg0KdHlwZWRl ZiBpbnQgX3NzaXplX3Q7DQoNCg0KDQoNCg0KIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMt Y3lnd2luLzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMNCiMgMzIzICIvdXNyL2xpYi9nY2MtbGli L2k2ODYtcGMtY3lnd2luLzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzDQp0eXBlZGVmIHVuc2lnbmVk IGludCB3aW50X3Q7DQojIDIzICIvdXNyL2luY2x1ZGUvc3lzL190eXBlcy5oIiAyIDMNCg0KDQp0 eXBlZGVmIHN0cnVjdA0Kew0KICBpbnQgX19jb3VudDsNCiAgdW5pb24NCiAgew0KICAgIHdpbnRf dCBfX3djaDsNCiAgICB1bnNpZ25lZCBjaGFyIF9fd2NoYls0XTsNCiAgfSBfX3ZhbHVlOw0KfSBf bWJzdGF0ZV90Ow0KDQp0eXBlZGVmIGludCBfZmxvY2tfdDsNCiMgNDggIi91c3IvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMiAzDQojIDU5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMNCiMgMSAi L3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAz DQojIDE0OSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRk ZWYuaCIgMw0KdHlwZWRlZiBpbnQgcHRyZGlmZl90Ow0KIyAyMDMgIi91c3IvbGliL2djYy1saWIv aTY4Ni1wYy1jeWd3aW4vMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDMNCnR5cGVkZWYgdW5zaWduZWQg aW50IHNpemVfdDsNCiMgNjAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzDQojIDEgIi91 c3IvaW5jbHVkZS9tYWNoaW5lL3R5cGVzLmgiIDEgMw0KIyAxMCAiL3Vzci9pbmNsdWRlL21hY2hp bmUvdHlwZXMuaCIgMw0KdHlwZWRlZiBsb25nIGludCBfX29mZl90Ow0KdHlwZWRlZiBpbnQgX19w aWRfdDsNCg0KX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19sb2ZmX3Q7DQoj IDYxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMw0KIyA4MiAiL3Vzci9pbmNsdWRlL3N5 cy90eXBlcy5oIiAzDQp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdV9jaGFyOw0KdHlwZWRlZiB1bnNp Z25lZCBzaG9ydCB1X3Nob3J0Ow0KdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ7DQp0eXBlZGVm IHVuc2lnbmVkIGxvbmcgdV9sb25nOw0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1c2hv cnQ7DQp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50Ow0KDQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBs b25nIGNsb2NrX3Q7DQoNCg0KDQoNCnR5cGVkZWYgbG9uZyB0aW1lX3Q7DQoNCg0KDQoNCnN0cnVj dCB0aW1lc3BlYyB7DQogIHRpbWVfdCB0dl9zZWM7DQogIGxvbmcgdHZfbnNlYzsNCn07DQoNCnN0 cnVjdCBpdGltZXJzcGVjIHsNCiAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOw0KICBzdHJ1 Y3QgdGltZXNwZWMgaXRfdmFsdWU7DQp9Ow0KDQoNCnR5cGVkZWYgbG9uZyBkYWRkcl90Ow0KdHlw ZWRlZiBjaGFyICogY2FkZHJfdDsNCg0KDQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW5vX3Q7DQoj IDEzMCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzDQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg dm1fb2Zmc2V0X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdm1fc2l6ZV90Ow0KDQoNCg0KdHlw ZWRlZiBjaGFyIGludDhfdDsNCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1X2ludDhfdDsNCnR5cGVk ZWYgc2hvcnQgaW50MTZfdDsNCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9pbnQxNl90Ow0KdHlw ZWRlZiBpbnQgaW50MzJfdDsNCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdDsNCnR5cGVk ZWYgbG9uZyBsb25nIGludDY0X3Q7DQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1X2ludDY0 X3Q7DQp0eXBlZGVmIGludDMyX3QgcmVnaXN0ZXJfdDsNCiMgMTY5ICIvdXNyL2luY2x1ZGUvc3lz L3R5cGVzLmgiIDMNCnR5cGVkZWYgaW50IHBpZF90Ow0KdHlwZWRlZiBsb25nIGtleV90Ow0KdHlw ZWRlZiBfc3NpemVfdCBzc2l6ZV90Ow0KDQoNCnR5cGVkZWYgY2hhciAqIGFkZHJfdDsNCnR5cGVk ZWYgaW50IG1vZGVfdDsNCiMgMTg4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMNCnR5cGVk ZWYgdW5zaWduZWQgc2hvcnQgbmxpbmtfdDsNCiMgMjEwICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDMNCnR5cGVkZWYgbG9uZyBmZF9tYXNrOw0KDQoNCg0KDQoNCg0KDQp0eXBlZGVmIHN0cnVj dCBfdHlwZXNfZmRfc2V0IHsNCiAgICAgICAgZmRfbWFzayBmZHNfYml0c1soKCg2NCkrKCgoc2l6 ZW9mIChmZF9tYXNrKSAqIDgpKS0xKSkvKChzaXplb2YgKGZkX21hc2spICogOCkpKV07DQp9IF90 eXBlc19mZF9zZXQ7DQojIDI0NiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzDQp0eXBlZGVm IHVuc2lnbmVkIGxvbmcgY2xvY2tpZF90Ow0KDQoNCg0KDQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg dGltZXJfdDsNCg0KDQoNCg0KdHlwZWRlZiBsb25nIHVzZWNvbmRzX3Q7DQoNCg0KIyAxICIvdXNy L2luY2x1ZGUvc3lzL2ZlYXR1cmVzLmgiIDEgMw0KIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy9mZWF0 dXJlcy5oIiAzDQpleHRlcm4gIkMiIHsNCiMgOTMgIi91c3IvaW5jbHVkZS9zeXMvZmVhdHVyZXMu aCIgMw0KfQ0KIyAyNjAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzDQojIDM2NCAiL3Vz ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzDQojIDEgIi91c3IvaW5jbHVkZS9jeWd3aW4vdHlwZXMu aCIgMSAzDQojIDEzICIvdXNyL2luY2x1ZGUvY3lnd2luL3R5cGVzLmgiIDMNCmV4dGVybiAiQyIN CnsNCg0KDQoNCg0KDQojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMw0KIyAy MSAiL3Vzci9pbmNsdWRlL2N5Z3dpbi90eXBlcy5oIiAyIDMNCg0KdHlwZWRlZiBzdHJ1Y3QgdGlt ZXNwZWMgdGltZXNwZWNfdCwgdGltZXN0cnVjX3Q7DQoNCnR5cGVkZWYgbG9uZyBfX29mZjMyX3Q7 DQp0eXBlZGVmIGxvbmcgbG9uZyBfX29mZjY0X3Q7DQoNCg0KDQp0eXBlZGVmIF9fb2ZmMzJfdCBv ZmZfdDsNCg0KDQp0eXBlZGVmIHNob3J0IF9fZGV2MTZfdDsNCnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBfX2RldjMyX3Q7DQoNCg0KDQp0eXBlZGVmIF9fZGV2MTZfdCBkZXZfdDsNCg0KDQp0eXBlZGVm IGxvbmcgYmxrc2l6ZV90Ow0KDQp0eXBlZGVmIGxvbmcgX19ibGtjbnQzMl90Ow0KdHlwZWRlZiBs b25nIGxvbmcgX19ibGtjbnQ2NF90Ow0KDQoNCg0KdHlwZWRlZiBfX2Jsa2NudDMyX3QgYmxrY250 X3Q7DQoNCg0KdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3VpZDE2X3Q7DQp0eXBlZGVmIHVuc2ln bmVkIHNob3J0IF9fZ2lkMTZfdDsNCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VpZDMyX3Q7DQp0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19naWQzMl90Ow0KDQoNCg0KDQp0eXBlZGVmIF9fdWlkMTZf dCB1aWRfdDsNCnR5cGVkZWYgX19naWQxNl90IGdpZF90Ow0KDQoNCg0KDQp0eXBlZGVmIHZvaWQg KnB0aHJlYWRfdDsNCnR5cGVkZWYgdm9pZCAqcHRocmVhZF9tdXRleF90Ow0KDQp0eXBlZGVmIHZv aWQgKnB0aHJlYWRfa2V5X3Q7DQp0eXBlZGVmIHZvaWQgKnB0aHJlYWRfYXR0cl90Ow0KdHlwZWRl ZiB2b2lkICpwdGhyZWFkX211dGV4YXR0cl90Ow0KdHlwZWRlZiB2b2lkICpwdGhyZWFkX2NvbmRh dHRyX3Q7DQp0eXBlZGVmIHZvaWQgKnB0aHJlYWRfY29uZF90Ow0KDQoNCnR5cGVkZWYgc3RydWN0 DQp7DQogIHB0aHJlYWRfbXV0ZXhfdCBtdXRleDsNCiAgaW50IHN0YXRlOw0KfQ0KcHRocmVhZF9v bmNlX3Q7DQp0eXBlZGVmIHZvaWQgKnB0aHJlYWRfcndsb2NrX3Q7DQp0eXBlZGVmIHZvaWQgKnB0 aHJlYWRfcndsb2NrYXR0cl90Ow0KIyAxMDQgIi91c3IvaW5jbHVkZS9jeWd3aW4vdHlwZXMuaCIg Mw0KfQ0KIyAzNjUgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzDQojIDE1MCAiLi4vY29t bW9uL3VuaWNvZGUvcGxhdGZvcm0uaCIgMg0KIyAxNjAgIi4uL2NvbW1vbi91bmljb2RlL3BsYXRm b3JtLmgiDQp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsNCg0KDQoNCg0KDQoNCg0KdHlw ZWRlZiB1bnNpZ25lZCBzaG9ydCB1aW50MTZfdDsNCiMgMTgzICIuLi9jb21tb24vdW5pY29kZS9w bGF0Zm9ybS5oIg0KICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVpbnQzMl90Ow0KIyAxOTMg Ii4uL2NvbW1vbi91bmljb2RlL3BsYXRmb3JtLmgiDQogICAgdHlwZWRlZiB1bnNpZ25lZCBsb25n IGxvbmcgdWludDY0X3Q7DQojIDU0ICIuLi9jb21tb24vdW5pY29kZS91bWFjaGluZS5oIiAyDQoj IDE2NyAiLi4vY29tbW9uL3VuaWNvZGUvdW1hY2hpbmUuaCINCnR5cGVkZWYgaW50OF90IFVCb29s Ow0KIyAxOTEgIi4uL2NvbW1vbi91bmljb2RlL3VtYWNoaW5lLmgiDQojIDEgIi4uL2NvbW1vbi91 bmljb2RlL3VyZW5hbWUuaCIgMQ0KIyAxOTIgIi4uL2NvbW1vbi91bmljb2RlL3VtYWNoaW5lLmgi IDINCiMgMzcgIi4uL2NvbW1vbi91bmljb2RlL3V0eXBlcy5oIiAyDQojIDEgIi4uL2NvbW1vbi91 bmljb2RlL3V0Zi5oIiAxDQojIDk1ICIuLi9jb21tb24vdW5pY29kZS91dGYuaCINCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9pNjg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzDQoj IDk2ICIuLi9jb21tb24vdW5pY29kZS91dGYuaCIgMg0KIyAxNTcgIi4uL2NvbW1vbi91bmljb2Rl L3V0Zi5oIg0KICAgIHR5cGVkZWYgdWludDMyX3QgVUNoYXIzMjsNCiMgMTY3ICIuLi9jb21tb24v dW5pY29kZS91dGYuaCINCnR5cGVkZWYgaW50MzJfdCBVVGV4dE9mZnNldDsNCiMgMjUwICIuLi9j b21tb24vdW5pY29kZS91dGYuaCINCiMgMSAiLi4vY29tbW9uL3VuaWNvZGUvdXRmOC5oIiAxDQoj IDQ2ICIuLi9jb21tb24vdW5pY29kZS91dGY4LmgiDQpleHRlcm4gIkMiIF9fYXR0cmlidXRlX18o KGRsbGltcG9ydCkpIGNvbnN0IHVpbnQ4X3QNCnV0ZjhfY291bnRUcmFpbEJ5dGVzXzJfMlsyNTZd Ow0KIyA2MCAiLi4vY29tbW9uL3VuaWNvZGUvdXRmOC5oIg0KZXh0ZXJuICJDIiBVQ2hhcjMyDQp1 dGY4X25leHRDaGFyU2FmZUJvZHlfMl8yKGNvbnN0IHVpbnQ4X3QgKnMsIGludDMyX3QgKnBpLCBp bnQzMl90IGxlbmd0aCwgVUNoYXIzMiBjLCBVQm9vbCBzdHJpY3QsIFVCb29sICpwSXNFcnJvcik7 DQoNCmV4dGVybiAiQyIgaW50MzJfdA0KdXRmOF9hcHBlbmRDaGFyU2FmZUJvZHlfMl8yKHVpbnQ4 X3QgKnMsIGludDMyX3QgaSwgaW50MzJfdCBsZW5ndGgsIFVDaGFyMzIgYyk7DQoNCmV4dGVybiAi QyIgVUNoYXIzMg0KdXRmOF9wcmV2Q2hhclNhZmVCb2R5XzJfMihjb25zdCB1aW50OF90ICpzLCBp bnQzMl90IHN0YXJ0LCBpbnQzMl90ICpwaSwgVUNoYXIzMiBjLCBVQm9vbCBzdHJpY3QpOw0KDQpl eHRlcm4gIkMiIGludDMyX3QNCnV0ZjhfYmFjazFTYWZlQm9keV8yXzIoY29uc3QgdWludDhfdCAq cywgaW50MzJfdCBzdGFydCwgaW50MzJfdCBpKTsNCiMgMjUxICIuLi9jb21tb24vdW5pY29kZS91 dGYuaCIgMg0KIyAxICIuLi9jb21tb24vdW5pY29kZS91dGYxNi5oIiAxDQojIDI1MiAiLi4vY29t bW9uL3VuaWNvZGUvdXRmLmgiIDINCiMgMSAiLi4vY29tbW9uL3VuaWNvZGUvdXRmMzIuaCIgMQ0K IyAyNTMgIi4uL2NvbW1vbi91bmljb2RlL3V0Zi5oIiAyDQojIDI4MyAiLi4vY29tbW9uL3VuaWNv ZGUvdXRmLmgiDQogICAgICAgIHR5cGVkZWYgd2NoYXJfdCBVQ2hhcjsNCiMgMzggIi4uL2NvbW1v bi91bmljb2RlL3V0eXBlcy5oIiAyDQojIDEgIi4uL2NvbW1vbi91bmljb2RlL3V2ZXJzaW9uLmgi IDENCiMgNzYgIi4uL2NvbW1vbi91bmljb2RlL3V2ZXJzaW9uLmgiDQp0eXBlZGVmIHVpbnQ4X3Qg VVZlcnNpb25JbmZvWzRdOw0KDQoNCg0KbmFtZXNwYWNlIGljdV8yXzIgeyB9DQpuYW1lc3BhY2Ug aWN1ID0gaWN1XzJfMjsNCnVzaW5nIG5hbWVzcGFjZSBpY3VfMl8yOw0KIyAxMDAgIi4uL2NvbW1v bi91bmljb2RlL3V2ZXJzaW9uLmgiDQpleHRlcm4gIkMiIHZvaWQNCnVfdmVyc2lvbkZyb21TdHJp bmdfMl8yKFVWZXJzaW9uSW5mbyB2ZXJzaW9uQXJyYXksIGNvbnN0IGNoYXIgKnZlcnNpb25TdHJp bmcpOw0KIyAxMTQgIi4uL2NvbW1vbi91bmljb2RlL3V2ZXJzaW9uLmgiDQpleHRlcm4gIkMiIHZv aWQNCnVfdmVyc2lvblRvU3RyaW5nXzJfMihVVmVyc2lvbkluZm8gdmVyc2lvbkFycmF5LCBjaGFy ICp2ZXJzaW9uU3RyaW5nKTsNCiMgMTI1ICIuLi9jb21tb24vdW5pY29kZS91dmVyc2lvbi5oIg0K ZXh0ZXJuICJDIiB2b2lkDQp1X2dldFZlcnNpb25fMl8yKFVWZXJzaW9uSW5mbyB2ZXJzaW9uQXJy YXkpOw0KIyAzOSAiLi4vY29tbW9uL3VuaWNvZGUvdXR5cGVzLmgiIDINCiMgMTkzICIuLi9jb21t b24vdW5pY29kZS91dHlwZXMuaCINCnR5cGVkZWYgZG91YmxlIFVEYXRlOw0KIyAyNDggIi4uL2Nv bW1vbi91bmljb2RlL3V0eXBlcy5oIg0KdHlwZWRlZiB2b2lkKiBVQ2xhc3NJRDsNCiMgMzUwICIu Li9jb21tb24vdW5pY29kZS91dHlwZXMuaCINCnR5cGVkZWYgZW51bSBVRXJyb3JDb2RlIHsNCg0K DQoNCg0KDQogICAgVV9VU0lOR19GQUxMQkFDS19XQVJOSU5HID0gLTEyOCwNCg0KICAgIFVfVVNJ TkdfRkFMTEJBQ0tfRVJST1IgPSAtMTI4LA0KDQogICAgVV9FUlJPUl9XQVJOSU5HX1NUQVJUID0g LTEyOCwNCg0KDQogICAgVV9FUlJPUl9JTkZPX1NUQVJUID0gVV9FUlJPUl9XQVJOSU5HX1NUQVJU LA0KDQogICAgVV9VU0lOR19ERUZBVUxUX1dBUk5JTkcgPSAtMTI3LA0KDQogICAgVV9VU0lOR19E RUZBVUxUX0VSUk9SID0gLTEyNywNCg0KICAgIFVfU0FGRUNMT05FX0FMTE9DQVRFRF9XQVJOSU5H ID0gLTEyNiwNCg0KICAgIFVfU0FGRUNMT05FX0FMTE9DQVRFRF9FUlJPUiA9IC0xMjYsDQoNCiAg ICBVX1NUQVRFX09MRF9XQVJOSU5HID0gLTEyNSwNCg0KICAgIFVfU1RSSU5HX05PVF9URVJNSU5B VEVEX1dBUk5JTkcgPSAtMTI0LA0KDQogICAgVV9TT1JUX0tFWV9UT09fU0hPUlRfV0FSTklORyA9 IC0xMjMsDQoNCiAgICBVX0FNQklHVU9VU19BTElBU19XQVJOSU5HID0gLTEyMiwNCg0KICAgIFVf RVJST1JfV0FSTklOR19MSU1JVCwNCg0KDQogICAgVV9FUlJPUl9JTkZPX0xJTUlUID0gVV9FUlJP Ul9XQVJOSU5HX0xJTUlULA0KDQogICAgVV9aRVJPX0VSUk9SID0gMCwNCg0KICAgIFVfSUxMRUdB TF9BUkdVTUVOVF9FUlJPUiA9IDEsDQogICAgVV9NSVNTSU5HX1JFU09VUkNFX0VSUk9SID0gMiwN CiAgICBVX0lOVkFMSURfRk9STUFUX0VSUk9SID0gMywNCiAgICBVX0ZJTEVfQUNDRVNTX0VSUk9S ID0gNCwNCiAgICBVX0lOVEVSTkFMX1BST0dSQU1fRVJST1IgPSA1LA0KICAgIFVfTUVTU0FHRV9Q QVJTRV9FUlJPUiA9IDYsDQogICAgVV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUiA9IDcsDQogICAg VV9JTkRFWF9PVVRPRkJPVU5EU19FUlJPUiA9IDgsDQogICAgVV9QQVJTRV9FUlJPUiA9IDksDQog ICAgVV9JTlZBTElEX0NIQVJfRk9VTkQgPSAxMCwNCiAgICBVX1RSVU5DQVRFRF9DSEFSX0ZPVU5E ID0gMTEsDQogICAgVV9JTExFR0FMX0NIQVJfRk9VTkQgPSAxMiwNCiAgICBVX0lOVkFMSURfVEFC TEVfRk9STUFUID0gMTMsDQogICAgVV9JTlZBTElEX1RBQkxFX0ZJTEUgPSAxNCwNCiAgICBVX0JV RkZFUl9PVkVSRkxPV19FUlJPUiA9IDE1LA0KICAgIFVfVU5TVVBQT1JURURfRVJST1IgPSAxNiwN CiAgICBVX1JFU09VUkNFX1RZUEVfTUlTTUFUQ0ggPSAxNywNCiAgICBVX0lMTEVHQUxfRVNDQVBF X1NFUVVFTkNFID0gMTgsDQogICAgVV9VTlNVUFBPUlRFRF9FU0NBUEVfU0VRVUVOQ0UgPSAxOSwN CiAgICBVX05PX1NQQUNFX0FWQUlMQUJMRSA9IDIwLA0KICAgIFVfQ0VfTk9UX0ZPVU5EX0VSUk9S ID0gMjEsDQogICAgVV9QUklNQVJZX1RPT19MT05HX0VSUk9SID0gMjIsDQogICAgVV9TVEFURV9U T09fT0xEX0VSUk9SID0gMjMsDQogICAgVV9UT09fTUFOWV9BTElBU0VTX0VSUk9SID0gMjQsDQoN CiAgICBVX0VOVU1fT1VUX09GX1NZTkNfRVJST1IgPSAyNSwNCiAgICBVX0lOVkFSSUFOVF9DT05W RVJTSU9OX0VSUk9SID0gMjYsDQoNCiAgICBVX1NUQU5EQVJEX0VSUk9SX0xJTUlULA0KDQoNCg0K ICAgIFVfQkFEX1ZBUklBQkxFX0RFRklOSVRJT049MHgxMDAwMCwNCiAgICBVX1BBUlNFX0VSUk9S X1NUQVJUID0gMHgxMDAwMCwNCiAgICBVX01BTEZPUk1FRF9SVUxFLA0KICAgIFVfTUFMRk9STUVE X1NFVCwNCiAgICBVX01BTEZPUk1FRF9TWU1CT0xfUkVGRVJFTkNFLA0KICAgIFVfTUFMRk9STUVE X1VOSUNPREVfRVNDQVBFLA0KICAgIFVfTUFMRk9STUVEX1ZBUklBQkxFX0RFRklOSVRJT04sDQog ICAgVV9NQUxGT1JNRURfVkFSSUFCTEVfUkVGRVJFTkNFLA0KICAgIFVfTUlTTUFUQ0hFRF9TRUdN RU5UX0RFTElNSVRFUlMsDQogICAgVV9NSVNQTEFDRURfQU5DSE9SX1NUQVJULA0KICAgIFVfTUlT UExBQ0VEX0NVUlNPUl9PRkZTRVQsDQogICAgVV9NSVNQTEFDRURfUVVBTlRJRklFUiwNCiAgICBV X01JU1NJTkdfT1BFUkFUT1IsDQogICAgVV9NSVNTSU5HX1NFR01FTlRfQ0xPU0UsDQogICAgVV9N VUxUSVBMRV9BTlRFX0NPTlRFWFRTLA0KICAgIFVfTVVMVElQTEVfQ1VSU09SUywNCiAgICBVX01V TFRJUExFX1BPU1RfQ09OVEVYVFMsDQogICAgVV9UUkFJTElOR19CQUNLU0xBU0gsDQogICAgVV9V TkRFRklORURfU0VHTUVOVF9SRUZFUkVOQ0UsDQogICAgVV9VTkRFRklORURfVkFSSUFCTEUsDQog ICAgVV9VTlFVT1RFRF9TUEVDSUFMLA0KICAgIFVfVU5URVJNSU5BVEVEX1FVT1RFLA0KICAgIFVf UlVMRV9NQVNLX0VSUk9SLA0KICAgIFVfTUlTUExBQ0VEX0NPTVBPVU5EX0ZJTFRFUiwNCiAgICBV X01VTFRJUExFX0NPTVBPVU5EX0ZJTFRFUlMsDQogICAgVV9JTlZBTElEX1JCVF9TWU5UQVgsDQog ICAgVV9JTlZBTElEX1BST1BFUlRZX1BBVFRFUk4sDQogICAgVV9NQUxGT1JNRURfUFJBR01BLA0K ICAgIFVfVU5DTE9TRURfU0VHTUVOVCwNCiAgICBVX0lMTEVHQUxfQ0hBUl9JTl9TRUdNRU5ULA0K ICAgIFVfVkFSSUFCTEVfUkFOR0VfRVhIQVVTVEVELA0KICAgIFVfVkFSSUFCTEVfUkFOR0VfT1ZF UkxBUCwNCiAgICBVX0lMTEVHQUxfQ0hBUkFDVEVSLA0KICAgIFVfSU5URVJOQUxfVFJBTlNMSVRF UkFUT1JfRVJST1IsDQogICAgVV9JTlZBTElEX0lELA0KICAgIFVfSU5WQUxJRF9GVU5DVElPTiwN CiAgICBVX1BBUlNFX0VSUk9SX0xJTUlULA0KDQoNCg0KDQogICAgVV9VTkVYUEVDVEVEX1RPS0VO PTB4MTAxMDAsDQogICAgVV9GTVRfUEFSU0VfRVJST1JfU1RBUlQ9MHgxMDEwMCwNCiAgICBVX01V TFRJUExFX0RFQ0lNQUxfU0VQRVJBVE9SUywNCiAgICBVX01VTFRJUExFX0VYUE9ORU5USUFMX1NZ TUJPTFMsDQogICAgVV9NQUxGT1JNRURfRVhQT05FTlRJQUxfUEFUVEVSTiwNCiAgICBVX01VTFRJ UExFX1BFUkNFTlRfU1lNQk9MUywNCiAgICBVX01VTFRJUExFX1BFUk1JTExfU1lNQk9MUywNCiAg ICBVX01VTFRJUExFX1BBRF9TUEVDSUZJRVJTLA0KICAgIFVfUEFUVEVSTl9TWU5UQVhfRVJST1Is DQogICAgVV9JTExFR0FMX1BBRF9QT1NJVElPTiwNCiAgICBVX1VOTUFUQ0hFRF9CUkFDRVMsDQog ICAgVV9VTlNVUFBPUlRFRF9QUk9QRVJUWSwNCiAgICBVX1VOU1VQUE9SVEVEX0FUVFJJQlVURSwN CiAgICBVX0ZNVF9QQVJTRV9FUlJPUl9MSU1JVCwNCg0KDQoNCg0KICAgIFVfQlJLX0VSUk9SX1NU QVJUPTB4MTAyMDAsDQogICAgVV9CUktfSU5URVJOQUxfRVJST1IsDQogICAgVV9CUktfSEVYX0RJ R0lUU19FWFBFQ1RFRCwNCiAgICBVX0JSS19TRU1JQ09MT05fRVhQRUNURUQsDQogICAgVV9CUktf UlVMRV9TWU5UQVgsDQogICAgVV9CUktfVU5DTE9TRURfU0VULA0KICAgIFVfQlJLX0FTU0lHTl9F UlJPUiwNCiAgICBVX0JSS19WQVJJQUJMRV9SRURGSU5JVElPTiwNCiAgICBVX0JSS19NSVNNQVRD SEVEX1BBUkVOLA0KICAgIFVfQlJLX05FV19MSU5FX0lOX1FVT1RFRF9TVFJJTkcsDQogICAgVV9C UktfVU5ERUZJTkVEX1ZBUklBQkxFLA0KICAgIFVfQlJLX0VSUk9SX0xJTUlULA0KDQogICAgVV9F UlJPUl9MSU1JVD1VX0JSS19FUlJPUl9MSU1JVA0KfSBVRXJyb3JDb2RlOw0KIyA1MDMgIi4uL2Nv bW1vbi91bmljb2RlL3V0eXBlcy5oIg0KICAgIHN0YXRpYw0KICAgIGlubGluZSBVQm9vbCBVX1NV Q0NFU1MoVUVycm9yQ29kZSBjb2RlKSB7IHJldHVybiAoVUJvb2wpKGNvZGU8PVVfWkVST19FUlJP Uik7IH0NCg0KDQoNCg0KICAgIHN0YXRpYw0KICAgIGlubGluZSBVQm9vbCBVX0ZBSUxVUkUoVUVy cm9yQ29kZSBjb2RlKSB7IHJldHVybiAoVUJvb2wpKGNvZGU+VV9aRVJPX0VSUk9SKTsgfQ0KIyA1 MjkgIi4uL2NvbW1vbi91bmljb2RlL3V0eXBlcy5oIg0KZXh0ZXJuICJDIiBjb25zdCBjaGFyICoN CnVfZXJyb3JOYW1lXzJfMihVRXJyb3JDb2RlIGNvZGUpOw0KDQoNCg0KDQoNCg0KDQojIDEgIi4u L2NvbW1vbi91bmljb2RlL3B1dGlsLmgiIDENCiMgMjcgIi4uL2NvbW1vbi91bmljb2RlL3B1dGls LmgiDQojIDEgIi4uL2NvbW1vbi91bmljb2RlL3V0eXBlcy5oIiAxDQojIDI4ICIuLi9jb21tb24v dW5pY29kZS9wdXRpbC5oIiAyDQojIDQ3ICIuLi9jb21tb24vdW5pY29kZS9wdXRpbC5oIg0KZXh0 ZXJuICJDIiBVQm9vbCB1cHJ2X2lzTmFOXzJfMihkb3VibGUpOw0KZXh0ZXJuICJDIiBVQm9vbCB1 cHJ2X2lzSW5maW5pdGVfMl8yKGRvdWJsZSk7DQpleHRlcm4gIkMiIFVCb29sIHVwcnZfaXNQb3Np dGl2ZUluZmluaXR5XzJfMihkb3VibGUpOw0KZXh0ZXJuICJDIiBVQm9vbCB1cHJ2X2lzTmVnYXRp dmVJbmZpbml0eV8yXzIoZG91YmxlKTsNCmV4dGVybiAiQyIgZG91YmxlIHVwcnZfZ2V0TmFOXzJf Mih2b2lkKTsNCmV4dGVybiAiQyIgZG91YmxlIHVwcnZfZ2V0SW5maW5pdHlfMl8yKHZvaWQpOw0K DQpleHRlcm4gIkMiIGRvdWJsZSB1cHJ2X3RydW5jXzJfMihkb3VibGUgZCk7DQpleHRlcm4gIkMi IGRvdWJsZSB1cHJ2X2Zsb29yXzJfMihkb3VibGUgeCk7DQpleHRlcm4gIkMiIGRvdWJsZSB1cHJ2 X2NlaWxfMl8yKGRvdWJsZSB4KTsNCmV4dGVybiAiQyIgZG91YmxlIHVwcnZfZmFic18yXzIoZG91 YmxlIHgpOw0KZXh0ZXJuICJDIiBkb3VibGUgdXBydl9tb2RmXzJfMihkb3VibGUgeCwgZG91Ymxl KiB5KTsNCmV4dGVybiAiQyIgZG91YmxlIHVwcnZfZm1vZF8yXzIoZG91YmxlIHgsIGRvdWJsZSB5 KTsNCmV4dGVybiAiQyIgZG91YmxlIHVwcnZfcG93XzJfMihkb3VibGUgeCwgZG91YmxlIHkpOw0K ZXh0ZXJuICJDIiBkb3VibGUgdXBydl9wb3cxMF8yXzIoaW50MzJfdCB4KTsNCmV4dGVybiAiQyIg ZG91YmxlIHVwcnZfZm1heF8yXzIoZG91YmxlIHgsIGRvdWJsZSB5KTsNCmV4dGVybiAiQyIgZG91 YmxlIHVwcnZfZm1pbl8yXzIoZG91YmxlIHgsIGRvdWJsZSB5KTsNCmV4dGVybiAiQyIgaW50MzJf dCB1cHJ2X21heF8yXzIoaW50MzJfdCB4LCBpbnQzMl90IHkpOw0KZXh0ZXJuICJDIiBpbnQzMl90 IHVwcnZfbWluXzJfMihpbnQzMl90IHgsIGludDMyX3QgeSk7DQojIDc3ICIuLi9jb21tb24vdW5p Y29kZS9wdXRpbC5oIg0KZXh0ZXJuICJDIiBkb3VibGUgdXBydl9tYXhNYW50aXNzYV8yXzIodm9p ZCk7DQojIDg5ICIuLi9jb21tb24vdW5pY29kZS9wdXRpbC5oIg0KZXh0ZXJuICJDIiBpbnQxNl90 IHVwcnZfbG9nMTBfMl8yKGRvdWJsZSBkKTsNCg0KZXh0ZXJuICJDIiBkb3VibGUgdXBydl9sb2df Ml8yKGRvdWJsZSBkKTsNCg0KDQoNCg0KDQpleHRlcm4gIkMiIGRvdWJsZSB1cHJ2X3JvdW5kXzJf Mihkb3VibGUgeCk7DQoNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgaW50MzJfdCB1cHJ2X2RpZ2l0 c0FmdGVyRGVjaW1hbF8yXzIoZG91YmxlIHgpOw0KIyAxMzkgIi4uL2NvbW1vbi91bmljb2RlL3B1 dGlsLmgiDQpleHRlcm4gIkMiIHZvaWQgdXBydl90enNldF8yXzIodm9pZCk7DQoNCg0KDQoNCg0K DQpleHRlcm4gIkMiIGludDMyX3QgdXBydl90aW1lem9uZV8yXzIodm9pZCk7DQojIDE1NSAiLi4v Y29tbW9uL3VuaWNvZGUvcHV0aWwuaCINCmV4dGVybiAiQyIgY2hhciogdXBydl90em5hbWVfMl8y KGludCBuKTsNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgaW50MzJfdCB1cHJ2X2dldFVUQ3RpbWVf Ml8yKHZvaWQpOw0KIyAxODUgIi4uL2NvbW1vbi91bmljb2RlL3B1dGlsLmgiDQpleHRlcm4gIkMi IGNvbnN0IGNoYXIqIHVfZ2V0RGF0YURpcmVjdG9yeV8yXzIodm9pZCk7DQojIDIwMCAiLi4vY29t bW9uL3VuaWNvZGUvcHV0aWwuaCINCmV4dGVybiAiQyIgdm9pZCB1X3NldERhdGFEaXJlY3Rvcnlf Ml8yKGNvbnN0IGNoYXIgKmRpcmVjdG9yeSk7DQoNCg0KDQoNCg0KDQpleHRlcm4gIkMiIGNvbnN0 IGNoYXIqIHVwcnZfZ2V0RGVmYXVsdENvZGVwYWdlXzJfMih2b2lkKTsNCg0KDQoNCg0KDQoNCg0K ZXh0ZXJuICJDIiBjb25zdCBjaGFyKiB1cHJ2X2dldERlZmF1bHRMb2NhbGVJRF8yXzIodm9pZCk7 DQojIDIyOCAiLi4vY29tbW9uL3VuaWNvZGUvcHV0aWwuaCINCmV4dGVybiAiQyIgZG91YmxlIHVw cnZfbmV4dERvdWJsZV8yXzIoZG91YmxlIGQsIFVCb29sIHBvc2l0aXZlKTsNCiMgMjY4ICIuLi9j b21tb24vdW5pY29kZS9wdXRpbC5oIg0KZXh0ZXJuICJDIiB2b2lkDQp1X2NoYXJzVG9VQ2hhcnNf Ml8yKGNvbnN0IGNoYXIgKmNzLCBVQ2hhciAqdXMsIGludDMyX3QgbGVuZ3RoKTsNCiMgMjg4ICIu Li9jb21tb24vdW5pY29kZS9wdXRpbC5oIg0KZXh0ZXJuICJDIiB2b2lkDQp1X1VDaGFyc1RvQ2hh cnNfMl8yKGNvbnN0IFVDaGFyICp1cywgY2hhciAqY3MsIGludDMyX3QgbGVuZ3RoKTsNCiMgNTM5 ICIuLi9jb21tb24vdW5pY29kZS91dHlwZXMuaCIgMg0KIyAyNyAiLi4vY29tbW9uL3VuaWNvZGUv dWNoYXIuaCIgMg0KDQpleHRlcm4gIkMiIHsNCiMgMTAwICIuLi9jb21tb24vdW5pY29kZS91Y2hh ci5oIg0KZW51bSBVUHJvcGVydHkgew0KDQoNCiAgICBVQ0hBUl9BTFBIQUJFVElDLA0KDQogICAg VUNIQVJfQklOQVJZX1NUQVJUPVVDSEFSX0FMUEhBQkVUSUMsDQoNCiAgICBVQ0hBUl9BU0NJSV9I RVhfRElHSVQsDQoNCg0KDQogICAgVUNIQVJfQklESV9DT05UUk9MLA0KDQoNCg0KDQogICAgVUNI QVJfQklESV9NSVJST1JFRCwNCg0KICAgIFVDSEFSX0RBU0gsDQoNCg0KDQogICAgVUNIQVJfREVG QVVMVF9JR05PUkFCTEVfQ09ERV9QT0lOVCwNCg0KDQogICAgVUNIQVJfREVQUkVDQVRFRCwNCg0K DQogICAgVUNIQVJfRElBQ1JJVElDLA0KDQoNCg0KICAgIFVDSEFSX0VYVEVOREVSLA0KDQoNCg0K ICAgIFVDSEFSX0ZVTExfQ09NUE9TSVRJT05fRVhDTFVTSU9OLA0KDQoNCg0KICAgIFVDSEFSX0dS QVBIRU1FX0JBU0UsDQoNCg0KDQogICAgVUNIQVJfR1JBUEhFTUVfRVhURU5ELA0KDQoNCiAgICBV Q0hBUl9HUkFQSEVNRV9MSU5LLA0KDQoNCiAgICBVQ0hBUl9IRVhfRElHSVQsDQoNCg0KICAgIFVD SEFSX0hZUEhFTiwNCg0KDQoNCiAgICBVQ0hBUl9JRF9DT05USU5VRSwNCg0KDQoNCiAgICBVQ0hB Ul9JRF9TVEFSVCwNCg0KDQogICAgVUNIQVJfSURFT0dSQVBISUMsDQoNCg0KDQogICAgVUNIQVJf SURTX0JJTkFSWV9PUEVSQVRPUiwNCg0KDQoNCiAgICBVQ0hBUl9JRFNfVFJJTkFSWV9PUEVSQVRP UiwNCg0KDQogICAgVUNIQVJfSk9JTl9DT05UUk9MLA0KDQoNCg0KICAgIFVDSEFSX0xPR0lDQUxf T1JERVJfRVhDRVBUSU9OLA0KDQoNCiAgICBVQ0hBUl9MT1dFUkNBU0UsDQoNCiAgICBVQ0hBUl9N QVRILA0KDQoNCg0KICAgIFVDSEFSX05PTkNIQVJBQ1RFUl9DT0RFX1BPSU5ULA0KDQogICAgVUNI QVJfUVVPVEFUSU9OX01BUkssDQoNCg0KDQogICAgVUNIQVJfUkFESUNBTCwNCg0KDQoNCg0KICAg IFVDSEFSX1NPRlRfRE9UVEVELA0KDQoNCg0KICAgIFVDSEFSX1RFUk1JTkFMX1BVTkNUVUFUSU9O LA0KDQoNCg0KICAgIFVDSEFSX1VOSUZJRURfSURFT0dSQVBILA0KDQoNCiAgICBVQ0hBUl9VUFBF UkNBU0UsDQoNCg0KDQogICAgVUNIQVJfV0hJVEVfU1BBQ0UsDQoNCg0KDQogICAgVUNIQVJfWElE X0NPTlRJTlVFLA0KDQoNCiAgICBVQ0hBUl9YSURfU1RBUlQsDQoNCiAgICBVQ0hBUl9CSU5BUllf TElNSVQsDQoNCg0KDQogICAgVUNIQVJfQklESV9DTEFTUz0weDEwMDAsDQoNCiAgICBVQ0hBUl9J TlRfU1RBUlQ9VUNIQVJfQklESV9DTEFTUywNCg0KDQogICAgVUNIQVJfQkxPQ0ssDQoNCg0KICAg IFVDSEFSX0NBTk9OSUNBTF9DT01CSU5JTkdfQ0xBU1MsDQoNCg0KICAgIFVDSEFSX0RFQ09NUE9T SVRJT05fVFlQRSwNCg0KDQoNCiAgICBVQ0hBUl9FQVNUX0FTSUFOX1dJRFRILA0KDQoNCiAgICBV Q0hBUl9HRU5FUkFMX0NBVEVHT1JZLA0KDQoNCiAgICBVQ0hBUl9KT0lOSU5HX0dST1VQLA0KDQoN CiAgICBVQ0hBUl9KT0lOSU5HX1RZUEUsDQoNCg0KICAgIFVDSEFSX0xJTkVfQlJFQUssDQoNCg0K ICAgIFVDSEFSX05VTUVSSUNfVFlQRSwNCg0KDQogICAgVUNIQVJfU0NSSVBULA0KDQoNCiAgICBV Q0hBUl9JTlRfTElNSVQNCn07DQoNCg0KdHlwZWRlZiBlbnVtIFVQcm9wZXJ0eSBVUHJvcGVydHk7 DQoNCg0KDQoNCg0KDQplbnVtIFVDaGFyQ2F0ZWdvcnkNCnsNCg0KICAgIFVfVU5BU1NJR05FRCA9 IDAsDQoNCiAgICBVX0dFTkVSQUxfT1RIRVJfVFlQRVMgPSAwLA0KDQogICAgVV9VUFBFUkNBU0Vf TEVUVEVSID0gMSwNCg0KICAgIFVfTE9XRVJDQVNFX0xFVFRFUiA9IDIsDQoNCiAgICBVX1RJVExF Q0FTRV9MRVRURVIgPSAzLA0KDQogICAgVV9NT0RJRklFUl9MRVRURVIgPSA0LA0KDQogICAgVV9P VEhFUl9MRVRURVIgPSA1LA0KDQogICAgVV9OT05fU1BBQ0lOR19NQVJLID0gNiwNCg0KICAgIFVf RU5DTE9TSU5HX01BUksgPSA3LA0KDQogICAgVV9DT01CSU5JTkdfU1BBQ0lOR19NQVJLID0gOCwN Cg0KICAgIFVfREVDSU1BTF9ESUdJVF9OVU1CRVIgPSA5LA0KDQogICAgVV9MRVRURVJfTlVNQkVS ID0gMTAsDQoNCiAgICBVX09USEVSX05VTUJFUiA9IDExLA0KDQogICAgVV9TUEFDRV9TRVBBUkFU T1IgPSAxMiwNCg0KICAgIFVfTElORV9TRVBBUkFUT1IgPSAxMywNCg0KICAgIFVfUEFSQUdSQVBI X1NFUEFSQVRPUiA9IDE0LA0KDQogICAgVV9DT05UUk9MX0NIQVIgPSAxNSwNCg0KICAgIFVfRk9S TUFUX0NIQVIgPSAxNiwNCg0KICAgIFVfUFJJVkFURV9VU0VfQ0hBUiA9IDE3LA0KDQogICAgVV9T VVJST0dBVEUgPSAxOCwNCg0KICAgIFVfREFTSF9QVU5DVFVBVElPTiA9IDE5LA0KDQogICAgVV9T VEFSVF9QVU5DVFVBVElPTiA9IDIwLA0KDQogICAgVV9FTkRfUFVOQ1RVQVRJT04gPSAyMSwNCg0K ICAgIFVfQ09OTkVDVE9SX1BVTkNUVUFUSU9OID0gMjIsDQoNCiAgICBVX09USEVSX1BVTkNUVUFU SU9OID0gMjMsDQoNCiAgICBVX01BVEhfU1lNQk9MID0gMjQsDQoNCiAgICBVX0NVUlJFTkNZX1NZ TUJPTCA9IDI1LA0KDQogICAgVV9NT0RJRklFUl9TWU1CT0wgPSAyNiwNCg0KICAgIFVfT1RIRVJf U1lNQk9MID0gMjcsDQoNCiAgICBVX0lOSVRJQUxfUFVOQ1RVQVRJT04gPSAyOCwNCg0KICAgIFVf RklOQUxfUFVOQ1RVQVRJT04gPSAyOSwNCg0KICAgIFVfQ0hBUl9DQVRFR09SWV9DT1VOVA0KfTsN Cg0KdHlwZWRlZiBlbnVtIFVDaGFyQ2F0ZWdvcnkgVUNoYXJDYXRlZ29yeTsNCiMgNDIwICIuLi9j b21tb24vdW5pY29kZS91Y2hhci5oIg0KZW51bSBVQ2hhckRpcmVjdGlvbiB7DQoNCiAgICBVX0xF RlRfVE9fUklHSFQgPSAwLA0KDQogICAgVV9SSUdIVF9UT19MRUZUID0gMSwNCg0KICAgIFVfRVVS T1BFQU5fTlVNQkVSID0gMiwNCg0KICAgIFVfRVVST1BFQU5fTlVNQkVSX1NFUEFSQVRPUiA9IDMs DQoNCiAgICBVX0VVUk9QRUFOX05VTUJFUl9URVJNSU5BVE9SID0gNCwNCg0KICAgIFVfQVJBQklD X05VTUJFUiA9IDUsDQoNCiAgICBVX0NPTU1PTl9OVU1CRVJfU0VQQVJBVE9SID0gNiwNCg0KICAg IFVfQkxPQ0tfU0VQQVJBVE9SID0gNywNCg0KICAgIFVfU0VHTUVOVF9TRVBBUkFUT1IgPSA4LA0K DQogICAgVV9XSElURV9TUEFDRV9ORVVUUkFMID0gOSwNCg0KICAgIFVfT1RIRVJfTkVVVFJBTCA9 IDEwLA0KDQogICAgVV9MRUZUX1RPX1JJR0hUX0VNQkVERElORyA9IDExLA0KDQogICAgVV9MRUZU X1RPX1JJR0hUX09WRVJSSURFID0gMTIsDQoNCiAgICBVX1JJR0hUX1RPX0xFRlRfQVJBQklDID0g MTMsDQoNCiAgICBVX1JJR0hUX1RPX0xFRlRfRU1CRURESU5HID0gMTQsDQoNCiAgICBVX1JJR0hU X1RPX0xFRlRfT1ZFUlJJREUgPSAxNSwNCg0KICAgIFVfUE9QX0RJUkVDVElPTkFMX0ZPUk1BVCA9 IDE2LA0KDQogICAgVV9ESVJfTk9OX1NQQUNJTkdfTUFSSyA9IDE3LA0KDQogICAgVV9CT1VOREFS WV9ORVVUUkFMID0gMTgsDQoNCiAgICBVX0NIQVJfRElSRUNUSU9OX0NPVU5UDQp9Ow0KDQp0eXBl ZGVmIGVudW0gVUNoYXJEaXJlY3Rpb24gVUNoYXJEaXJlY3Rpb247DQoNCg0KDQoNCg0KDQplbnVt IFVCbG9ja0NvZGUgew0KDQogICAgVUJMT0NLX0JBU0lDX0xBVElOID0gMSwNCg0KICAgIFVfQkFT SUNfTEFUSU4gPSAxLA0KDQoNCiAgICBVQkxPQ0tfTEFUSU5fMV9TVVBQTEVNRU5UPTIsDQoNCiAg ICBVX0xBVElOXzFfU1VQUExFTUVOVD0yLA0KDQoNCiAgICBVQkxPQ0tfTEFUSU5fRVhURU5ERURf QSA9MywNCg0KICAgIFVfTEFUSU5fRVhURU5ERURfQT0zLA0KDQoNCiAgICBVQkxPQ0tfTEFUSU5f RVhURU5ERURfQiA9NCwNCg0KICAgIFVfTEFUSU5fRVhURU5ERURfQj00LA0KDQoNCiAgICBVQkxP Q0tfSVBBX0VYVEVOU0lPTlMgPTUsDQoNCiAgICBVX0lQQV9FWFRFTlNJT05TPTUsDQoNCg0KICAg IFVCTE9DS19TUEFDSU5HX01PRElGSUVSX0xFVFRFUlMgPTYsDQoNCiAgICBVX1NQQUNJTkdfTU9E SUZJRVJfTEVUVEVSUz02LA0KDQoNCiAgICBVQkxPQ0tfQ09NQklOSU5HX0RJQUNSSVRJQ0FMX01B UktTID03LA0KDQogICAgVV9DT01CSU5JTkdfRElBQ1JJVElDQUxfTUFSS1M9NywNCg0KDQoNCg0K DQogICAgVUJMT0NLX0dSRUVLID04LA0KDQogICAgVV9HUkVFSz04LA0KDQoNCiAgICBVQkxPQ0tf Q1lSSUxMSUMgPTksDQoNCiAgICBVX0NZUklMTElDPTksDQoNCg0KICAgIFVCTE9DS19BUk1FTklB TiA9MTAsDQoNCiAgICBVX0FSTUVOSUFOPTEwLA0KDQoNCiAgICBVQkxPQ0tfSEVCUkVXID0xMSwN Cg0KICAgIFVfSEVCUkVXPTExLA0KDQoNCiAgICBVQkxPQ0tfQVJBQklDID0xMiwNCg0KICAgIFVf QVJBQklDPTEyLA0KDQoNCiAgICBVQkxPQ0tfU1lSSUFDID0xMywNCg0KICAgIFVfU1lSSUFDPTEz LA0KDQoNCiAgICBVQkxPQ0tfVEhBQU5BID0xNCwNCg0KICAgIFVfVEhBQU5BPTE0LA0KDQoNCiAg ICBVQkxPQ0tfREVWQU5BR0FSSSA9MTUsDQoNCiAgICBVX0RFVkFOQUdBUkk9MTUsDQoNCg0KICAg IFVCTE9DS19CRU5HQUxJID0xNiwNCg0KICAgIFVfQkVOR0FMST0xNiwNCg0KDQogICAgVUJMT0NL X0dVUk1VS0hJID0xNywNCg0KICAgIFVfR1VSTVVLSEk9MTcsDQoNCg0KICAgIFVCTE9DS19HVUpB UkFUSSA9MTgsDQoNCiAgICBVX0dVSkFSQVRJPTE4LA0KDQoNCiAgICBVQkxPQ0tfT1JJWUEgPTE5 LA0KDQogICAgVV9PUklZQT0xOSwNCg0KDQogICAgVUJMT0NLX1RBTUlMID0yMCwNCg0KICAgIFVf VEFNSUw9MjAsDQoNCg0KICAgIFVCTE9DS19URUxVR1UgPTIxLA0KDQogICAgVV9URUxVR1U9MjEs DQoNCg0KICAgIFVCTE9DS19LQU5OQURBID0yMiwNCg0KICAgIFVfS0FOTkFEQT0yMiwNCg0KDQog ICAgVUJMT0NLX01BTEFZQUxBTSA9MjMsDQoNCiAgICBVX01BTEFZQUxBTT0yMywNCg0KDQogICAg VUJMT0NLX1NJTkhBTEEgPTI0LA0KDQogICAgVV9TSU5IQUxBPTI0LA0KDQoNCiAgICBVQkxPQ0tf VEhBSSA9MjUsDQoNCiAgICBVX1RIQUk9MjUsDQoNCg0KICAgIFVCTE9DS19MQU8gPTI2LA0KDQog ICAgVV9MQU89MjYsDQoNCg0KICAgIFVCTE9DS19USUJFVEFOID0yNywNCg0KICAgIFVfVElCRVRB Tj0yNywNCg0KDQogICAgVUJMT0NLX01ZQU5NQVIgPTI4LA0KDQogICAgVV9NWUFOTUFSPTI4LA0K DQoNCiAgICBVQkxPQ0tfR0VPUkdJQU4gPTI5LA0KDQogICAgVV9HRU9SR0lBTj0yOSwNCg0KDQog ICAgVUJMT0NLX0hBTkdVTF9KQU1PID0zMCwNCg0KICAgIFVfSEFOR1VMX0pBTU89MzAsDQoNCg0K ICAgIFVCTE9DS19FVEhJT1BJQyA9MzEsDQoNCiAgICBVX0VUSElPUElDPTMxLA0KDQoNCiAgICBV QkxPQ0tfQ0hFUk9LRUUgPTMyLA0KDQogICAgVV9DSEVST0tFRT0zMiwNCg0KDQogICAgVUJMT0NL X1VOSUZJRURfQ0FOQURJQU5fQUJPUklHSU5BTF9TWUxMQUJJQ1MgPTMzLA0KDQogICAgVV9VTklG SUVEX0NBTkFESUFOX0FCT1JJR0lOQUxfU1lMTEFCSUNTPTMzLA0KDQoNCiAgICBVQkxPQ0tfT0dI QU0gPTM0LA0KDQogICAgVV9PR0hBTT0zNCwNCg0KDQogICAgVUJMT0NLX1JVTklDID0zNSwNCg0K ICAgIFVfUlVOSUM9MzUsDQoNCg0KICAgIFVCTE9DS19LSE1FUiA9MzYsDQoNCiAgICBVX0tITUVS PTM2LA0KDQoNCiAgICBVQkxPQ0tfTU9OR09MSUFOID0zNywNCg0KICAgIFVfTU9OR09MSUFOPTM3 LA0KDQoNCiAgICBVQkxPQ0tfTEFUSU5fRVhURU5ERURfQURESVRJT05BTCA9MzgsDQoNCiAgICBV X0xBVElOX0VYVEVOREVEX0FERElUSU9OQUw9MzgsDQoNCg0KICAgIFVCTE9DS19HUkVFS19FWFRF TkRFRCA9MzksDQoNCiAgICBVX0dSRUVLX0VYVEVOREVEPTM5LA0KDQoNCiAgICBVQkxPQ0tfR0VO RVJBTF9QVU5DVFVBVElPTiA9NDAsDQoNCiAgICBVX0dFTkVSQUxfUFVOQ1RVQVRJT049NDAsDQoN Cg0KICAgIFVCTE9DS19TVVBFUlNDUklQVFNfQU5EX1NVQlNDUklQVFMgPTQxLA0KDQogICAgVV9T VVBFUlNDUklQVFNfQU5EX1NVQlNDUklQVFM9NDEsDQoNCg0KICAgIFVCTE9DS19DVVJSRU5DWV9T WU1CT0xTID00MiwNCg0KICAgIFVfQ1VSUkVOQ1lfU1lNQk9MUz00MiwNCg0KDQoNCg0KDQogICAg VUJMT0NLX0NPTUJJTklOR19NQVJLU19GT1JfU1lNQk9MUyA9NDMsDQoNCiAgICBVX0NPTUJJTklO R19NQVJLU19GT1JfU1lNQk9MUz00MywNCg0KDQogICAgVUJMT0NLX0xFVFRFUkxJS0VfU1lNQk9M UyA9NDQsDQoNCiAgICBVX0xFVFRFUkxJS0VfU1lNQk9MUz00NCwNCg0KDQogICAgVUJMT0NLX05V TUJFUl9GT1JNUyA9NDUsDQoNCiAgICBVX05VTUJFUl9GT1JNUz00NSwNCg0KDQogICAgVUJMT0NL X0FSUk9XUyA9NDYsDQoNCiAgICBVX0FSUk9XUz00NiwNCg0KDQogICAgVUJMT0NLX01BVEhFTUFU SUNBTF9PUEVSQVRPUlMgPTQ3LA0KDQogICAgVV9NQVRIRU1BVElDQUxfT1BFUkFUT1JTPTQ3LA0K DQoNCiAgICBVQkxPQ0tfTUlTQ0VMTEFORU9VU19URUNITklDQUwgPTQ4LA0KDQogICAgVV9NSVND RUxMQU5FT1VTX1RFQ0hOSUNBTD00OCwNCg0KDQogICAgVUJMT0NLX0NPTlRST0xfUElDVFVSRVMg PTQ5LA0KDQogICAgVV9DT05UUk9MX1BJQ1RVUkVTPTQ5LA0KDQoNCiAgICBVQkxPQ0tfT1BUSUNB TF9DSEFSQUNURVJfUkVDT0dOSVRJT04gPTUwLA0KDQogICAgVV9PUFRJQ0FMX0NIQVJBQ1RFUl9S RUNPR05JVElPTj01MCwNCg0KDQogICAgVUJMT0NLX0VOQ0xPU0VEX0FMUEhBTlVNRVJJQ1MgPTUx LA0KDQogICAgVV9FTkNMT1NFRF9BTFBIQU5VTUVSSUNTPTUxLA0KDQoNCiAgICBVQkxPQ0tfQk9Y X0RSQVdJTkcgPTUyLA0KDQogICAgVV9CT1hfRFJBV0lORz01MiwNCg0KDQogICAgVUJMT0NLX0JM T0NLX0VMRU1FTlRTID01MywNCg0KICAgIFVfQkxPQ0tfRUxFTUVOVFM9NTMsDQoNCg0KICAgIFVC TE9DS19HRU9NRVRSSUNfU0hBUEVTID01NCwNCg0KICAgIFVfR0VPTUVUUklDX1NIQVBFUz01NCwN Cg0KDQogICAgVUJMT0NLX01JU0NFTExBTkVPVVNfU1lNQk9MUyA9NTUsDQoNCiAgICBVX01JU0NF TExBTkVPVVNfU1lNQk9MUz01NSwNCg0KDQogICAgVUJMT0NLX0RJTkdCQVRTID01NiwNCg0KICAg IFVfRElOR0JBVFM9NTYsDQoNCg0KICAgIFVCTE9DS19CUkFJTExFX1BBVFRFUk5TID01NywNCg0K ICAgIFVfQlJBSUxMRV9QQVRURVJOUz01NywNCg0KDQogICAgVUJMT0NLX0NKS19SQURJQ0FMU19T VVBQTEVNRU5UID01OCwNCg0KICAgIFVfQ0pLX1JBRElDQUxTX1NVUFBMRU1FTlQ9NTgsDQoNCg0K ICAgIFVCTE9DS19LQU5HWElfUkFESUNBTFMgPTU5LA0KDQogICAgVV9LQU5HWElfUkFESUNBTFM9 NTksDQoNCg0KICAgIFVCTE9DS19JREVPR1JBUEhJQ19ERVNDUklQVElPTl9DSEFSQUNURVJTID02 MCwNCg0KICAgIFVfSURFT0dSQVBISUNfREVTQ1JJUFRJT05fQ0hBUkFDVEVSUz02MCwNCg0KDQog ICAgVUJMT0NLX0NKS19TWU1CT0xTX0FORF9QVU5DVFVBVElPTiA9NjEsDQoNCiAgICBVX0NKS19T WU1CT0xTX0FORF9QVU5DVFVBVElPTj02MSwNCg0KDQogICAgVUJMT0NLX0hJUkFHQU5BID02MiwN Cg0KICAgIFVfSElSQUdBTkE9NjIsDQoNCg0KICAgIFVCTE9DS19LQVRBS0FOQSA9NjMsDQoNCiAg ICBVX0tBVEFLQU5BPTYzLA0KDQoNCiAgICBVQkxPQ0tfQk9QT01PRk8gPTY0LA0KDQogICAgVV9C T1BPTU9GTz02NCwNCg0KDQogICAgVUJMT0NLX0hBTkdVTF9DT01QQVRJQklMSVRZX0pBTU8gPTY1 LA0KDQogICAgVV9IQU5HVUxfQ09NUEFUSUJJTElUWV9KQU1PPTY1LA0KDQoNCiAgICBVQkxPQ0tf S0FOQlVOID02NiwNCg0KICAgIFVfS0FOQlVOPTY2LA0KDQoNCiAgICBVQkxPQ0tfQk9QT01PRk9f RVhURU5ERUQgPTY3LA0KDQogICAgVV9CT1BPTU9GT19FWFRFTkRFRD02NywNCg0KDQogICAgVUJM T0NLX0VOQ0xPU0VEX0NKS19MRVRURVJTX0FORF9NT05USFMgPTY4LA0KDQogICAgVV9FTkNMT1NF RF9DSktfTEVUVEVSU19BTkRfTU9OVEhTPTY4LA0KDQoNCiAgICBVQkxPQ0tfQ0pLX0NPTVBBVElC SUxJVFkgPTY5LA0KDQogICAgVV9DSktfQ09NUEFUSUJJTElUWT02OSwNCg0KDQogICAgVUJMT0NL X0NKS19VTklGSUVEX0lERU9HUkFQSFNfRVhURU5TSU9OX0EgPTcwLA0KDQogICAgVV9DSktfVU5J RklFRF9JREVPR1JBUEhTX0VYVEVOU0lPTl9BPTcwLA0KDQoNCiAgICBVQkxPQ0tfQ0pLX1VOSUZJ RURfSURFT0dSQVBIUyA9NzEsDQoNCiAgICBVX0NKS19VTklGSUVEX0lERU9HUkFQSFM9NzEsDQoN Cg0KICAgIFVCTE9DS19ZSV9TWUxMQUJMRVMgPTcyLA0KDQogICAgVV9ZSV9TWUxMQUJMRVM9NzIs DQoNCg0KICAgIFVCTE9DS19ZSV9SQURJQ0FMUyA9NzMsDQoNCiAgICBVX1lJX1JBRElDQUxTPTcz LA0KDQoNCiAgICBVQkxPQ0tfSEFOR1VMX1NZTExBQkxFUyA9NzQsDQoNCiAgICBVX0hBTkdVTF9T WUxMQUJMRVM9NzQsDQoNCg0KICAgIFVCTE9DS19ISUdIX1NVUlJPR0FURVMgPTc1LA0KDQogICAg VV9ISUdIX1NVUlJPR0FURVM9NzUsDQoNCg0KICAgIFVCTE9DS19ISUdIX1BSSVZBVEVfVVNFX1NV UlJPR0FURVMgPTc2LA0KDQogICAgVV9ISUdIX1BSSVZBVEVfVVNFX1NVUlJPR0FURVM9NzYsDQoN Cg0KICAgIFVCTE9DS19MT1dfU1VSUk9HQVRFUyA9NzcsDQoNCiAgICBVX0xPV19TVVJST0dBVEVT PTc3LA0KIyA4NzEgIi4uL2NvbW1vbi91bmljb2RlL3VjaGFyLmgiDQogICAgVUJMT0NLX1BSSVZB VEVfVVNFID0gNzgsDQojIDg4MSAiLi4vY29tbW9uL3VuaWNvZGUvdWNoYXIuaCINCiAgICBVQkxP Q0tfUFJJVkFURV9VU0VfQVJFQSA9VUJMT0NLX1BSSVZBVEVfVVNFLA0KDQogICAgVV9QUklWQVRF X1VTRV9BUkVBPTc4LA0KDQoNCiAgICBVQkxPQ0tfQ0pLX0NPTVBBVElCSUxJVFlfSURFT0dSQVBI UyA9NzksDQoNCiAgICBVX0NKS19DT01QQVRJQklMSVRZX0lERU9HUkFQSFM9NzksDQoNCg0KICAg IFVCTE9DS19BTFBIQUJFVElDX1BSRVNFTlRBVElPTl9GT1JNUyA9ODAsDQoNCiAgICBVX0FMUEhB QkVUSUNfUFJFU0VOVEFUSU9OX0ZPUk1TPTgwLA0KDQoNCiAgICBVQkxPQ0tfQVJBQklDX1BSRVNF TlRBVElPTl9GT1JNU19BID04MSwNCg0KICAgIFVfQVJBQklDX1BSRVNFTlRBVElPTl9GT1JNU19B PTgxLA0KDQoNCiAgICBVQkxPQ0tfQ09NQklOSU5HX0hBTEZfTUFSS1MgPTgyLA0KDQogICAgVV9D T01CSU5JTkdfSEFMRl9NQVJLUz04MiwNCg0KDQogICAgVUJMT0NLX0NKS19DT01QQVRJQklMSVRZ X0ZPUk1TID04MywNCg0KICAgIFVfQ0pLX0NPTVBBVElCSUxJVFlfRk9STVM9ODMsDQoNCg0KICAg IFVCTE9DS19TTUFMTF9GT1JNX1ZBUklBTlRTID04NCwNCg0KICAgIFVfU01BTExfRk9STV9WQVJJ QU5UUz04NCwNCg0KDQogICAgVUJMT0NLX0FSQUJJQ19QUkVTRU5UQVRJT05fRk9STVNfQiA9ODUs DQoNCiAgICBVX0FSQUJJQ19QUkVTRU5UQVRJT05fRk9STVNfQj04NSwNCg0KDQogICAgVUJMT0NL X1NQRUNJQUxTID04NiwNCg0KICAgIFVfU1BFQ0lBTFM9ODYsDQoNCg0KICAgIFVCTE9DS19IQUxG V0lEVEhfQU5EX0ZVTExXSURUSF9GT1JNUyA9ODcsDQoNCiAgICBVX0hBTEZXSURUSF9BTkRfRlVM TFdJRFRIX0ZPUk1TPTg3LA0KDQoNCiAgICBVQkxPQ0tfT0xEX0lUQUxJQyA9IDg4ICwNCg0KICAg IFVCTE9DS19HT1RISUMgPSA4OSAsDQoNCiAgICBVQkxPQ0tfREVTRVJFVCA9IDkwICwNCg0KICAg IFVCTE9DS19CWVpBTlRJTkVfTVVTSUNBTF9TWU1CT0xTID0gOTEgLA0KDQogICAgVUJMT0NLX01V U0lDQUxfU1lNQk9MUyA9IDkyICwNCg0KICAgIFVCTE9DS19NQVRIRU1BVElDQUxfQUxQSEFOVU1F UklDX1NZTUJPTFMgPSA5MyAsDQoNCiAgICBVQkxPQ0tfQ0pLX1VOSUZJRURfSURFT0dSQVBIU19F WFRFTlNJT05fQiA9IDk0ICwNCg0KICAgIFVCTE9DS19DSktfQ09NUEFUSUJJTElUWV9JREVPR1JB UEhTX1NVUFBMRU1FTlQgPSA5NSAsDQoNCiAgICBVQkxPQ0tfVEFHUyA9IDk2LA0KDQoNCg0KDQog ICAgVUJMT0NLX0NZUklMTElDX1NVUFBMRU1FTlRBUlkgPSA5NywNCg0KICAgIFVCTE9DS19UQUdB TE9HID0gOTgsDQoNCiAgICBVQkxPQ0tfSEFOVU5PTyA9IDk5LA0KDQogICAgVUJMT0NLX0JVSElE ID0gMTAwLA0KDQogICAgVUJMT0NLX1RBR0JBTldBID0gMTAxLA0KDQogICAgVUJMT0NLX01JU0NF TExBTkVPVVNfTUFUSEVNQVRJQ0FMX1NZTUJPTFNfQSA9IDEwMiwNCg0KICAgIFVCTE9DS19TVVBQ TEVNRU5UQUxfQVJST1dTX0EgPSAxMDMsDQoNCiAgICBVQkxPQ0tfU1VQUExFTUVOVEFMX0FSUk9X U19CID0gMTA0LA0KDQogICAgVUJMT0NLX01JU0NFTExBTkVPVVNfTUFUSEVNQVRJQ0FMX1NZTUJP TFNfQiA9IDEwNSwNCg0KICAgIFVCTE9DS19TVVBQTEVNRU5UQUxfTUFUSEVNQVRJQ0FMX09QRVJB VE9SUyA9IDEwNiwNCg0KICAgIFVCTE9DS19LQVRBS0FOQV9QSE9ORVRJQ19FWFRFTlNJT05TID0g MTA3LA0KDQogICAgVUJMT0NLX1ZBUklBVElPTl9TRUxFQ1RPUlMgPSAxMDgsDQoNCiAgICBVQkxP Q0tfU1VQUExFTUVOVEFSWV9QUklWQVRFX1VTRV9BUkVBX0EgPSAxMDksDQoNCiAgICBVQkxPQ0tf U1VQUExFTUVOVEFSWV9QUklWQVRFX1VTRV9BUkVBX0IgPSAxMTAsDQoNCg0KICAgIFVCTE9DS19D T1VOVCwNCg0KICAgIFVfU0NSSVBUX0NPVU5UPVVCTE9DS19DT1VOVCwNCg0KDQogICAgVUJMT0NL X0lOVkFMSURfQ09ERT0tMSwNCg0KDQogICAgVV9DSEFSX1NDUklQVF9DT1VOVCA9VUJMT0NLX0NP VU5ULA0KDQogICAgVV9OT19TQ1JJUFQgPSBVQkxPQ0tfQ09VTlQNCn07DQoNCg0KdHlwZWRlZiBl bnVtIFVCbG9ja0NvZGUgVUJsb2NrQ29kZTsNCg0KDQoNCg0KDQplbnVtIFVDZWxsV2lkdGgNCnsN Cg0KICAgIFVfWkVST19XSURUSCA9IDAsDQoNCiAgICBVX0hBTEZfV0lEVEggPSAxLA0KDQogICAg VV9GVUxMX1dJRFRIID0gMiwNCg0KICAgIFVfTkVVVFJBTF9XSURUSCA9IDMsDQoNCiAgICBVX0NF TExfV0lEVEhfQ09VTlQNCn07DQoNCg0KdHlwZWRlZiBlbnVtIFVDZWxsV2lkdGggVUNlbGxXaWR0 aDsNCg0KDQoNCg0KDQoNCg0KZW51bSBVRWFzdEFzaWFuV2lkdGggew0KICAgIFVfRUFfTkVVVFJB TCwNCiAgICBVX0VBX0FNQklHVU9VUywNCiAgICBVX0VBX0hBTEZXSURUSCwNCiAgICBVX0VBX0ZV TExXSURUSCwNCiAgICBVX0VBX05BUlJPVywNCiAgICBVX0VBX1dJREUsDQogICAgVV9FQV9DT1VO VA0KfTsNCnR5cGVkZWYgZW51bSBVRWFzdEFzaWFuV2lkdGggVUVhc3RBc2lhbldpZHRoOw0KIyAx MDUwICIuLi9jb21tb24vdW5pY29kZS91Y2hhci5oIg0KZW51bSBVQ2hhck5hbWVDaG9pY2Ugew0K ICAgIFVfVU5JQ09ERV9DSEFSX05BTUUsDQogICAgVV9VTklDT0RFXzEwX0NIQVJfTkFNRSwNCiAg ICBVX0VYVEVOREVEX0NIQVJfTkFNRSwNCiAgICBVX0NIQVJfTkFNRV9DSE9JQ0VfQ09VTlQNCn07 DQoNCg0KdHlwZWRlZiBlbnVtIFVDaGFyTmFtZUNob2ljZSBVQ2hhck5hbWVDaG9pY2U7DQoNCg0K DQoNCg0KDQoNCmVudW0gVURlY29tcG9zaXRpb25UeXBlIHsNCiAgICBVX0RUX05PTkUsDQogICAg VV9EVF9DQU5PTklDQUwsDQogICAgVV9EVF9DT01QQVQsDQogICAgVV9EVF9DSVJDTEUsDQogICAg VV9EVF9GSU5BTCwNCiAgICBVX0RUX0ZPTlQsDQogICAgVV9EVF9GUkFDVElPTiwNCiAgICBVX0RU X0lOSVRJQUwsDQogICAgVV9EVF9JU09MQVRFRCwNCiAgICBVX0RUX01FRElBTCwNCiAgICBVX0RU X05BUlJPVywNCiAgICBVX0RUX05PQlJFQUssDQogICAgVV9EVF9TTUFMTCwNCiAgICBVX0RUX1NR VUFSRSwNCiAgICBVX0RUX1NVQiwNCiAgICBVX0RUX1NVUEVSLA0KICAgIFVfRFRfVkVSVElDQUws DQogICAgVV9EVF9XSURFLA0KICAgIFVfRFRfQ09VTlQNCn07DQp0eXBlZGVmIGVudW0gVURlY29t cG9zaXRpb25UeXBlIFVEZWNvbXBvc2l0aW9uVHlwZTsNCg0KDQoNCg0KDQoNCg0KZW51bSBVSm9p bmluZ1R5cGUgew0KICAgIFVfSlRfTk9OX0pPSU5JTkcsDQogICAgVV9KVF9KT0lOX0NBVVNJTkcs DQogICAgVV9KVF9EVUFMX0pPSU5JTkcsDQogICAgVV9KVF9MRUZUX0pPSU5JTkcsDQogICAgVV9K VF9SSUdIVF9KT0lOSU5HLA0KICAgIFVfSlRfVFJBTlNQQVJFTlQsDQogICAgVV9KVF9DT1VOVA0K fTsNCnR5cGVkZWYgZW51bSBVSm9pbmluZ1R5cGUgVUpvaW5pbmdUeXBlOw0KDQoNCg0KDQoNCg0K DQplbnVtIFVKb2luaW5nR3JvdXAgew0KICAgIFVfSkdfTk9fSk9JTklOR19HUk9VUCwNCiAgICBV X0pHX0FJTiwNCiAgICBVX0pHX0FMQVBILA0KICAgIFVfSkdfQUxFRiwNCiAgICBVX0pHX0JFSCwN CiAgICBVX0pHX0JFVEgsDQogICAgVV9KR19EQUwsDQogICAgVV9KR19EQUxBVEhfUklTSCwNCiAg ICBVX0pHX0UsDQogICAgVV9KR19GRUgsDQogICAgVV9KR19GSU5BTF9TRU1LQVRILA0KICAgIFVf SkdfR0FGLA0KICAgIFVfSkdfR0FNQUwsDQogICAgVV9KR19IQUgsDQogICAgVV9KR19IQU1aQV9P Tl9IRUhfR09BTCwNCiAgICBVX0pHX0hFLA0KICAgIFVfSkdfSEVILA0KICAgIFVfSkdfSEVIX0dP QUwsDQogICAgVV9KR19IRVRILA0KICAgIFVfSkdfS0FGLA0KICAgIFVfSkdfS0FQSCwNCiAgICBV X0pHX0tOT1RURURfSEVILA0KICAgIFVfSkdfTEFNLA0KICAgIFVfSkdfTEFNQURILA0KICAgIFVf SkdfTUVFTSwNCiAgICBVX0pHX01JTSwNCiAgICBVX0pHX05PT04sDQogICAgVV9KR19OVU4sDQog ICAgVV9KR19QRSwNCiAgICBVX0pHX1FBRiwNCiAgICBVX0pHX1FBUEgsDQogICAgVV9KR19SRUgs DQogICAgVV9KR19SRVZFUlNFRF9QRSwNCiAgICBVX0pHX1NBRCwNCiAgICBVX0pHX1NBREhFLA0K ICAgIFVfSkdfU0VFTiwNCiAgICBVX0pHX1NFTUtBVEgsDQogICAgVV9KR19TSElOLA0KICAgIFVf SkdfU1dBU0hfS0FGLA0KICAgIFVfSkdfU1lSSUFDX1dBVywNCiAgICBVX0pHX1RBSCwNCiAgICBV X0pHX1RBVywNCiAgICBVX0pHX1RFSF9NQVJCVVRBLA0KICAgIFVfSkdfVEVUSCwNCiAgICBVX0pH X1dBVywNCiAgICBVX0pHX1lFSCwNCiAgICBVX0pHX1lFSF9CQVJSRUUsDQogICAgVV9KR19ZRUhf V0lUSF9UQUlMLA0KICAgIFVfSkdfWVVESCwNCiAgICBVX0pHX1lVREhfSEUsDQogICAgVV9KR19a QUlOLA0KICAgIFVfSkdfQ09VTlQNCn07DQp0eXBlZGVmIGVudW0gVUpvaW5pbmdHcm91cCBVSm9p bmluZ0dyb3VwOw0KDQoNCg0KDQoNCg0KDQplbnVtIFVMaW5lQnJlYWsgew0KICAgIFVfTEJfVU5L Tk9XTiwNCiAgICBVX0xCX0FNQklHVU9VUywNCiAgICBVX0xCX0FMUEhBQkVUSUMsDQogICAgVV9M Ql9CUkVBS19CT1RILA0KICAgIFVfTEJfQlJFQUtfQUZURVIsDQogICAgVV9MQl9CUkVBS19CRUZP UkUsDQogICAgVV9MQl9NQU5EQVRPUllfQlJFQUssDQogICAgVV9MQl9DT05USU5HRU5UX0JSRUFL LA0KICAgIFVfTEJfQ0xPU0VfUFVOQ1RVQVRJT04sDQogICAgVV9MQl9DT01CSU5JTkdfTUFSSywN CiAgICBVX0xCX0NBUlJJQUdFX1JFVFVSTiwNCiAgICBVX0xCX0VYQ0xBTUFUSU9OLA0KICAgIFVf TEJfR0xVRSwNCiAgICBVX0xCX0hZUEhFTiwNCiAgICBVX0xCX0lERU9HUkFQSElDLA0KICAgIFVf TEJfSU5TRVBFUkFCTEUsDQogICAgVV9MQl9JTkZJWF9OVU1FUklDLA0KICAgIFVfTEJfTElORV9G RUVELA0KICAgIFVfTEJfTk9OU1RBUlRFUiwNCiAgICBVX0xCX05VTUVSSUMsDQogICAgVV9MQl9P UEVOX1BVTkNUVUFUSU9OLA0KICAgIFVfTEJfUE9TVEZJWF9OVU1FUklDLA0KICAgIFVfTEJfUFJF RklYX05VTUVSSUMsDQogICAgVV9MQl9RVU9UQVRJT04sDQogICAgVV9MQl9DT01QTEVYX0NPTlRF WFQsDQogICAgVV9MQl9TVVJST0dBVEUsDQogICAgVV9MQl9TUEFDRSwNCiAgICBVX0xCX0JSRUFL X1NZTUJPTFMsDQogICAgVV9MQl9aV1NQQUNFLA0KICAgIFVfTEJfQ09VTlQNCn07DQp0eXBlZGVm IGVudW0gVUxpbmVCcmVhayBVTGluZUJyZWFrOw0KDQoNCg0KDQoNCg0KDQplbnVtIFVOdW1lcmlj VHlwZSB7DQogICAgVV9OVF9OT05FLA0KICAgIFVfTlRfREVDSU1BTCwNCiAgICBVX05UX0RJR0lU LA0KICAgIFVfTlRfTlVNRVJJQywNCiAgICBVX05UX0NPVU5UDQp9Ow0KdHlwZWRlZiBlbnVtIFVO dW1lcmljVHlwZSBVTnVtZXJpY1R5cGU7DQojIDEyNDkgIi4uL2NvbW1vbi91bmljb2RlL3VjaGFy LmgiDQpleHRlcm4gIkMiIFVCb29sDQp1X2hhc0JpbmFyeVByb3BlcnR5XzJfMihVQ2hhcjMyIGMs IFVQcm9wZXJ0eSB3aGljaCk7DQojIDEyNjQgIi4uL2NvbW1vbi91bmljb2RlL3VjaGFyLmgiDQpl eHRlcm4gIkMiIFVCb29sDQp1X2lzVUFscGhhYmV0aWNfMl8yKFVDaGFyMzIgYyk7DQojIDEyNzkg Ii4uL2NvbW1vbi91bmljb2RlL3VjaGFyLmgiDQpleHRlcm4gIkMiIFVCb29sDQp1X2lzVUxvd2Vy Y2FzZV8yXzIoVUNoYXIzMiBjKTsNCiMgMTI5NCAiLi4vY29tbW9uL3VuaWNvZGUvdWNoYXIuaCIN CmV4dGVybiAiQyIgVUJvb2wNCnVfaXNVVXBwZXJjYXNlXzJfMihVQ2hhcjMyIGMpOw0KIyAxMzEw ICIuLi9jb21tb24vdW5pY29kZS91Y2hhci5oIg0KZXh0ZXJuICJDIiBVQm9vbA0KdV9pc1VXaGl0 ZVNwYWNlXzJfMihVQ2hhcjMyIGMpOw0KIyAxMzUzICIuLi9jb21tb24vdW5pY29kZS91Y2hhci5o Ig0KZXh0ZXJuICJDIiBpbnQzMl90DQp1X2dldEludFByb3BlcnR5VmFsdWVfMl8yKFVDaGFyMzIg YywgVVByb3BlcnR5IHdoaWNoKTsNCiMgMTM3NSAiLi4vY29tbW9uL3VuaWNvZGUvdWNoYXIuaCIN CmV4dGVybiAiQyIgaW50MzJfdA0KdV9nZXRJbnRQcm9wZXJ0eU1pblZhbHVlXzJfMihVUHJvcGVy dHkgd2hpY2gpOw0KIyAxNDA0ICIuLi9jb21tb24vdW5pY29kZS91Y2hhci5oIg0KZXh0ZXJuICJD IiBpbnQzMl90DQp1X2dldEludFByb3BlcnR5TWF4VmFsdWVfMl8yKFVQcm9wZXJ0eSB3aGljaCk7 DQojIDE0MjMgIi4uL2NvbW1vbi91bmljb2RlL3VjaGFyLmgiDQpleHRlcm4gIkMiIGRvdWJsZQ0K dV9nZXROdW1lcmljVmFsdWVfMl8yKFVDaGFyMzIgYyk7DQojIDE0NDcgIi4uL2NvbW1vbi91bmlj b2RlL3VjaGFyLmgiDQpleHRlcm4gIkMiIFVCb29sDQp1X2lzbG93ZXJfMl8yKFVDaGFyMzIgYyk7 DQojIDE0NjEgIi4uL2NvbW1vbi91bmljb2RlL3VjaGFyLmgiDQpleHRlcm4gIkMiIFVCb29sDQp1 X2lzdXBwZXJfMl8yKFVDaGFyMzIgYyk7DQojIDE0NzUgIi4uL2NvbW1vbi91bmljb2RlL3VjaGFy LmgiDQpleHRlcm4gIkMiIFVCb29sDQp1X2lzdGl0bGVfMl8yKFVDaGFyMzIgYyk7DQojIDE0ODUg Ii4uL2NvbW1vbi91bmljb2RlL3VjaGFyLmgiDQpleHRlcm4gIkMiIFVCb29sDQp1X2lzZGlnaXRf Ml8yKFVDaGFyMzIgYyk7DQojIDE0OTYgIi4uL2NvbW1vbi91bmljb2RlL3VjaGFyLmgiDQpleHRl cm4gIkMiIFVCb29sDQp1X2lzYWxudW1fMl8yKFVDaGFyMzIgYyk7DQojIDE1MTQgIi4uL2NvbW1v bi91bmljb2RlL3VjaGFyLmgiDQpleHRlcm4gIkMiIFVCb29sDQp1X2lzZGVmaW5lZF8yXzIoVUNo YXIzMiBjKTsNCiMgMTUyOCAiLi4vY29tbW9uL3VuaWNvZGUvdWNoYXIuaCINCmV4dGVybiAiQyIg VUJvb2wNCnVfaXNhbHBoYV8yXzIoVUNoYXIzMiBjKTsNCiMgMTUzOCAiLi4vY29tbW9uL3VuaWNv ZGUvdWNoYXIuaCINCmV4dGVybiAiQyIgVUJvb2wNCnVfaXNzcGFjZV8yXzIoVUNoYXIzMiBjKTsN CiMgMTU2OSAiLi4vY29tbW9uL3VuaWNvZGUvdWNoYXIuaCINCmV4dGVybiAiQyIgVUJvb2wNCnVf aXNXaGl0ZXNwYWNlXzJfMihVQ2hhcjMyIGMpOw0KIyAxNTg3ICIuLi9jb21tb24vdW5pY29kZS91 Y2hhci5oIg0KZXh0ZXJuICJDIiBVQm9vbA0KdV9pc2NudHJsXzJfMihVQ2hhcjMyIGMpOw0KIyAx NjAxICIuLi9jb21tb24vdW5pY29kZS91Y2hhci5oIg0KZXh0ZXJuICJDIiBVQm9vbA0KdV9pc3By aW50XzJfMihVQ2hhcjMyIGMpOw0KIyAxNjE1ICIuLi9jb21tb24vdW5pY29kZS91Y2hhci5oIg0K ZXh0ZXJuICJDIiBVQm9vbA0KdV9pc2Jhc2VfMl8yKFVDaGFyMzIgYyk7DQojIDE2MzAgIi4uL2Nv bW1vbi91bmljb2RlL3VjaGFyLmgiDQpleHRlcm4gIkMiIFVDaGFyRGlyZWN0aW9uDQp1X2NoYXJE aXJlY3Rpb25fMl8yKFVDaGFyMzIgYyk7DQojIDE2NDMgIi4uL2NvbW1vbi91bmljb2RlL3VjaGFy LmgiDQpleHRlcm4gIkMiIFVCb29sDQp1X2lzTWlycm9yZWRfMl8yKFVDaGFyMzIgYyk7DQojIDE2 NjIgIi4uL2NvbW1vbi91bmljb2RlL3VjaGFyLmgiDQpleHRlcm4gIkMiIFVDaGFyMzINCnVfY2hh ck1pcnJvcl8yXzIoVUNoYXIzMiBjKTsNCiMgMTcyMyAiLi4vY29tbW9uL3VuaWNvZGUvdWNoYXIu aCINCmV4dGVybiAiQyIgdWludDE2X3QNCnVfY2hhckNlbGxXaWR0aF8yXzIoVUNoYXIzMiBjKTsN CiMgMTczNiAiLi4vY29tbW9uL3VuaWNvZGUvdWNoYXIuaCINCmV4dGVybiAiQyIgaW50OF90DQp1 X2NoYXJUeXBlXzJfMihVQ2hhcjMyIGMpOw0KIyAxNzY4ICIuLi9jb21tb24vdW5pY29kZS91Y2hh ci5oIg0KdHlwZWRlZiBVQm9vbA0KVUNoYXJFbnVtVHlwZVJhbmdlKGNvbnN0IHZvaWQgKmNvbnRl eHQsIFVDaGFyMzIgc3RhcnQsIFVDaGFyMzIgbGltaXQsIFVDaGFyQ2F0ZWdvcnkgdHlwZSk7DQoj IDE3OTAgIi4uL2NvbW1vbi91bmljb2RlL3VjaGFyLmgiDQpleHRlcm4gIkMiIHZvaWQNCnVfZW51 bUNoYXJUeXBlc18yXzIoVUNoYXJFbnVtVHlwZVJhbmdlICplbnVtUmFuZ2UsIGNvbnN0IHZvaWQg KmNvbnRleHQpOw0KIyAxODAwICIuLi9jb21tb24vdW5pY29kZS91Y2hhci5oIg0KZXh0ZXJuICJD IiB1aW50OF90DQp1X2dldENvbWJpbmluZ0NsYXNzXzJfMihVQ2hhcjMyIGMpOw0KIyAxODExICIu Li9jb21tb24vdW5pY29kZS91Y2hhci5oIg0KZXh0ZXJuICJDIiBpbnQzMl90DQp1X2NoYXJEaWdp dFZhbHVlXzJfMihVQ2hhcjMyIGMpOw0KIyAxODIyICIuLi9jb21tb24vdW5pY29kZS91Y2hhci5o Ig0KZXh0ZXJuICJDIiBVQmxvY2tDb2RlDQp1YmxvY2tfZ2V0Q29kZV8yXzIoVUNoYXIzMiBjaCk7 DQojIDE4NTcgIi4uL2NvbW1vbi91bmljb2RlL3VjaGFyLmgiDQpleHRlcm4gIkMiIGludDMyX3QN CnVfY2hhck5hbWVfMl8yKFVDaGFyMzIgY29kZSwgVUNoYXJOYW1lQ2hvaWNlIG5hbWVDaG9pY2Us DQogICAgICAgICAgIGNoYXIgKmJ1ZmZlciwgaW50MzJfdCBidWZmZXJMZW5ndGgsDQogICAgICAg ICAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOw0KIyAxODg0ICIuLi9jb21tb24vdW5pY29kZS91 Y2hhci5oIg0KZXh0ZXJuICJDIiBpbnQzMl90DQp1X2dldElTT0NvbW1lbnRfMl8yKFVDaGFyMzIg YywNCiAgICAgICAgICAgICAgICBjaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwNCiAg ICAgICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsNCiMgMTkwOCAiLi4vY29tbW9u L3VuaWNvZGUvdWNoYXIuaCINCmV4dGVybiAiQyIgVUNoYXIzMg0KdV9jaGFyRnJvbU5hbWVfMl8y KFVDaGFyTmFtZUNob2ljZSBuYW1lQ2hvaWNlLA0KICAgICAgICAgICAgICAgY29uc3QgY2hhciAq bmFtZSwNCiAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOw0KIyAxOTI5ICIu Li9jb21tb24vdW5pY29kZS91Y2hhci5oIg0KdHlwZWRlZiBVQm9vbCBVRW51bUNoYXJOYW1lc0Zu KHZvaWQgKmNvbnRleHQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNoYXIzMiBj b2RlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVDaGFyTmFtZUNob2ljZSBuYW1l Q2hvaWNlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgpOw0KIyAxOTU1 ICIuLi9jb21tb24vdW5pY29kZS91Y2hhci5oIg0KZXh0ZXJuICJDIiB2b2lkDQp1X2VudW1DaGFy TmFtZXNfMl8yKFVDaGFyMzIgc3RhcnQsIFVDaGFyMzIgbGltaXQsDQogICAgICAgICAgICAgICAg VUVudW1DaGFyTmFtZXNGbiAqZm4sDQogICAgICAgICAgICAgICAgdm9pZCAqY29udGV4dCwNCiAg ICAgICAgICAgICAgICBVQ2hhck5hbWVDaG9pY2UgbmFtZUNob2ljZSwNCiAgICAgICAgICAgICAg ICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsNCiMgMTk3OCAiLi4vY29tbW9uL3VuaWNvZGUvdWNo YXIuaCINCmV4dGVybiAiQyIgVUJvb2wNCnVfaXNJRFN0YXJ0XzJfMihVQ2hhcjMyIGMpOw0KIyAy MDA1ICIuLi9jb21tb24vdW5pY29kZS91Y2hhci5oIg0KZXh0ZXJuICJDIiBVQm9vbA0KdV9pc0lE UGFydF8yXzIoVUNoYXIzMiBjKTsNCiMgMjAzMiAiLi4vY29tbW9uL3VuaWNvZGUvdWNoYXIuaCIN CmV4dGVybiAiQyIgVUJvb2wNCnVfaXNJRElnbm9yYWJsZV8yXzIoVUNoYXIzMiBjKTsNCiMgMjA1 NSAiLi4vY29tbW9uL3VuaWNvZGUvdWNoYXIuaCINCmV4dGVybiAiQyIgVUJvb2wNCnVfaXNKYXZh SURTdGFydF8yXzIoVUNoYXIzMiBjKTsNCiMgMjA4NiAiLi4vY29tbW9uL3VuaWNvZGUvdWNoYXIu aCINCmV4dGVybiAiQyIgVUJvb2wNCnVfaXNKYXZhSURQYXJ0XzJfMihVQ2hhcjMyIGMpOw0KIyAy MTExICIuLi9jb21tb24vdW5pY29kZS91Y2hhci5oIg0KZXh0ZXJuICJDIiBVQ2hhcjMyDQp1X3Rv bG93ZXJfMl8yKFVDaGFyMzIgYyk7DQojIDIxMjkgIi4uL2NvbW1vbi91bmljb2RlL3VjaGFyLmgi DQpleHRlcm4gIkMiIFVDaGFyMzINCnVfdG91cHBlcl8yXzIoVUNoYXIzMiBjKTsNCiMgMjE0NiAi Li4vY29tbW9uL3VuaWNvZGUvdWNoYXIuaCINCmV4dGVybiAiQyIgVUNoYXIzMg0KdV90b3RpdGxl XzJfMihVQ2hhcjMyIGMpOw0KIyAyMTgzICIuLi9jb21tb24vdW5pY29kZS91Y2hhci5oIg0KZXh0 ZXJuICJDIiBVQ2hhcjMyDQp1X2ZvbGRDYXNlXzJfMihVQ2hhcjMyIGMsIHVpbnQzMl90IG9wdGlv bnMpOw0KIyAyMjIxICIuLi9jb21tb24vdW5pY29kZS91Y2hhci5oIg0KZXh0ZXJuICJDIiBpbnQz Ml90DQp1X2RpZ2l0XzJfMihVQ2hhcjMyIGNoLCBpbnQ4X3QgcmFkaXgpOw0KIyAyMjUwICIuLi9j b21tb24vdW5pY29kZS91Y2hhci5oIg0KZXh0ZXJuICJDIiBVQ2hhcjMyDQp1X2ZvckRpZ2l0XzJf MihpbnQzMl90IGRpZ2l0LCBpbnQ4X3QgcmFkaXgpOw0KIyAyMjY3ICIuLi9jb21tb24vdW5pY29k ZS91Y2hhci5oIg0KZXh0ZXJuICJDIiB2b2lkDQp1X2NoYXJBZ2VfMl8yKFVDaGFyMzIgYywgVVZl cnNpb25JbmZvIHZlcnNpb25BcnJheSk7DQojIDIyNzcgIi4uL2NvbW1vbi91bmljb2RlL3VjaGFy LmgiDQpleHRlcm4gIkMiIHZvaWQNCnVfZ2V0VW5pY29kZVZlcnNpb25fMl8yKFVWZXJzaW9uSW5m byBpbmZvKTsNCiMgMjMwMSAiLi4vY29tbW9uL3VuaWNvZGUvdWNoYXIuaCINCmV4dGVybiAiQyIg aW50MzJfdA0KdV9nZXRGQ19ORktDX0Nsb3N1cmVfMl8yKFVDaGFyMzIgYywgVUNoYXIgKmRlc3Qs IGludDMyX3QgZGVzdENhcGFjaXR5LCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsNCg0KDQoNCg0K DQoNCg0KdHlwZWRlZiBVQmxvY2tDb2RlIFVDaGFyU2NyaXB0Ow0KDQp9DQojIDI3ICJ1Y29sX2Vs bS5jcHAiIDINCiMgMSAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiIDENCiMgMjUgIi4uL2Nv bW1vbi91bmljb2RlL3VuaXN0ci5oIg0KIyAxICIuLi9jb21tb24vdW5pY29kZS91b2JqZWN0Lmgi IDENCiMgMjIgIi4uL2NvbW1vbi91bmljb2RlL3VvYmplY3QuaCINCm5hbWVzcGFjZSBpY3VfMl8y IHsNCiMgNjMgIi4uL2NvbW1vbi91bmljb2RlL3VvYmplY3QuaCINCmNsYXNzIF9fYXR0cmlidXRl X18oKGRsbGltcG9ydCkpIFVPYmplY3Qgew0KcHVibGljOg0KDQoNCg0KDQoNCiAgICB2aXJ0dWFs IGlubGluZSB+VU9iamVjdCgpIHt9DQojIDgyICIuLi9jb21tb24vdW5pY29kZS91b2JqZWN0Lmgi DQogICAgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKTsNCiAgICB2b2lkICpvcGVyYXRv ciBuZXdbXShzaXplX3Qgc2l6ZSk7DQojIDkzICIuLi9jb21tb24vdW5pY29kZS91b2JqZWN0Lmgi DQogICAgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCAqcCk7DQogICAgdm9pZCBvcGVyYXRvciBk ZWxldGVbXSh2b2lkICpwKTsNCg0KDQoNCg0KDQoNCg0KICAgIHZpcnR1YWwgaW5saW5lIFVDbGFz c0lEIGdldER5bmFtaWNDbGFzc0lEKCkgY29uc3QgPSAwOw0KDQpwcm90ZWN0ZWQ6DQojIDEzNSAi Li4vY29tbW9uL3VuaWNvZGUvdW9iamVjdC5oIg0KfTsNCg0KfQ0KIyAyNiAiLi4vY29tbW9uL3Vu aWNvZGUvdW5pc3RyLmgiIDINCiMgMSAiLi4vY29tbW9uL3VuaWNvZGUvcmVwLmgiIDENCiMgMjAg Ii4uL2NvbW1vbi91bmljb2RlL3JlcC5oIg0KbmFtZXNwYWNlIGljdV8yXzIgew0KDQpjbGFzcyBV bmljb2RlU3RyaW5nOw0KIyA2NSAiLi4vY29tbW9uL3VuaWNvZGUvcmVwLmgiDQpjbGFzcyBfX2F0 dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBSZXBsYWNlYWJsZSA6IHB1YmxpYyBVT2JqZWN0IHsNCg0K cHVibGljOg0KDQoNCg0KDQogICAgdmlydHVhbCB+UmVwbGFjZWFibGUoKTsNCg0KDQoNCg0KDQoN CiAgICBpbmxpbmUgaW50MzJfdCBsZW5ndGgoKSBjb25zdDsNCiMgODggIi4uL2NvbW1vbi91bmlj b2RlL3JlcC5oIg0KICAgIGlubGluZSBVQ2hhciBjaGFyQXQoaW50MzJfdCBvZmZzZXQpIGNvbnN0 Ow0KIyAxMDIgIi4uL2NvbW1vbi91bmljb2RlL3JlcC5oIg0KICAgIGlubGluZSBVQ2hhcjMyIGNo YXIzMkF0KGludDMyX3Qgb2Zmc2V0KSBjb25zdDsNCiMgMTE0ICIuLi9jb21tb24vdW5pY29kZS9y ZXAuaCINCiAgICB2aXJ0dWFsIHZvaWQgZXh0cmFjdEJldHdlZW4oaW50MzJfdCBzdGFydCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsaW1pdCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVW5pY29kZVN0cmluZyYgdGFyZ2V0KSBjb25zdCA9IDA7DQoj IDEzOCAiLi4vY29tbW9uL3VuaWNvZGUvcmVwLmgiDQogICAgdmlydHVhbCB2b2lkIGhhbmRsZVJl cGxhY2VCZXR3ZWVuKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludDMyX3QgbGltaXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHRleHQpID0gMDsNCiMgMTY2ICIuLi9jb21tb24v dW5pY29kZS9yZXAuaCINCiAgICB2aXJ0dWFsIHZvaWQgY29weShpbnQzMl90IHN0YXJ0LCBpbnQz Ml90IGxpbWl0LCBpbnQzMl90IGRlc3QpID0gMDsNCiMgMTc3ICIuLi9jb21tb24vdW5pY29kZS9y ZXAuaCINCiAgICB2aXJ0dWFsIFVCb29sIGhhc01ldGFEYXRhKCkgY29uc3Q7DQoNCnByb3RlY3Rl ZDoNCg0KDQoNCg0KICAgIFJlcGxhY2VhYmxlKCk7DQoNCg0KDQoNCiAgICB2aXJ0dWFsIGludDMy X3QgZ2V0TGVuZ3RoKCkgY29uc3QgPSAwOw0KDQoNCg0KDQogICAgdmlydHVhbCBVQ2hhciBnZXRD aGFyQXQoaW50MzJfdCBvZmZzZXQpIGNvbnN0ID0gMDsNCg0KDQoNCg0KICAgIHZpcnR1YWwgVUNo YXIzMiBnZXRDaGFyMzJBdChpbnQzMl90IG9mZnNldCkgY29uc3QgPSAwOw0KfTsNCg0KaW5saW5l IFJlcGxhY2VhYmxlOjpSZXBsYWNlYWJsZSgpIHt9DQoNCmlubGluZSBSZXBsYWNlYWJsZTo6flJl cGxhY2VhYmxlKCkge30NCg0KaW5saW5lIGludDMyX3QNClJlcGxhY2VhYmxlOjpsZW5ndGgoKSBj b25zdCB7DQogICAgcmV0dXJuIGdldExlbmd0aCgpOw0KfQ0KDQppbmxpbmUgVUNoYXINClJlcGxh Y2VhYmxlOjpjaGFyQXQoaW50MzJfdCBvZmZzZXQpIGNvbnN0IHsNCiAgICByZXR1cm4gZ2V0Q2hh ckF0KG9mZnNldCk7DQp9DQoNCmlubGluZSBVQ2hhcjMyDQpSZXBsYWNlYWJsZTo6Y2hhcjMyQXQo aW50MzJfdCBvZmZzZXQpIGNvbnN0IHsNCiAgICByZXR1cm4gZ2V0Q2hhcjMyQXQob2Zmc2V0KTsN Cn0NCg0KDQoNCn0NCiMgMjcgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIiAyDQoNCnN0cnVj dCBVQ29udmVydGVyOw0KY2xhc3MgU3RyaW5nVGhyZWFkVGVzdDsNCiMgNDEgIi4uL2NvbW1vbi91 bmljb2RlL3VuaXN0ci5oIg0KbmFtZXNwYWNlIGljdV8yXzIgew0KDQpjbGFzcyBMb2NhbGU7DQpj bGFzcyBVQ2hhclJlZmVyZW5jZTsNCmNsYXNzIFVuaWNvZGVDb252ZXJ0ZXI7DQpjbGFzcyBTdHJp bmdDaGFyYWN0ZXJJdGVyYXRvcjsNCmNsYXNzIEJyZWFrSXRlcmF0b3I7DQojIDE1NiAiLi4vY29t bW9uL3VuaWNvZGUvdW5pc3RyLmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBV bmljb2RlU3RyaW5nIDogcHVibGljIFJlcGxhY2VhYmxlDQp7DQpwdWJsaWM6DQojIDE3MyAiLi4v Y29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBVQm9vbCBvcGVyYXRvcj09IChjb25z dCBVbmljb2RlU3RyaW5nJiB0ZXh0KSBjb25zdDsNCiMgMTgyICIuLi9jb21tb24vdW5pY29kZS91 bmlzdHIuaCINCiAgaW5saW5lIFVCb29sIG9wZXJhdG9yIT0gKGNvbnN0IFVuaWNvZGVTdHJpbmcm IHRleHQpIGNvbnN0Ow0KIyAxOTEgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxp bmUgVUJvb2wgb3BlcmF0b3I+IChjb25zdCBVbmljb2RlU3RyaW5nJiB0ZXh0KSBjb25zdDsNCiMg MjAwICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIFVCb29sIG9wZXJhdG9y PCAoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCkgY29uc3Q7DQojIDIwOSAiLi4vY29tbW9uL3Vu aWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBVQm9vbCBvcGVyYXRvcj49IChjb25zdCBVbmljb2Rl U3RyaW5nJiB0ZXh0KSBjb25zdDsNCiMgMjE4ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCIN CiAgaW5saW5lIFVCb29sIG9wZXJhdG9yPD0gKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHRleHQpIGNv bnN0Ow0KIyAyMzEgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgaW50OF90 IGNvbXBhcmUoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCkgY29uc3Q7DQojIDI0NyAiLi4vY29t bW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBpbnQ4X3QgY29tcGFyZShpbnQzMl90IHN0 YXJ0LA0KICAgICAgICAgaW50MzJfdCBsZW5ndGgsDQogICAgICAgICBjb25zdCBVbmljb2RlU3Ry aW5nJiBzcmNUZXh0KSBjb25zdDsNCiMgMjY4ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCIN CiAgIGlubGluZSBpbnQ4X3QgY29tcGFyZShpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgaW50MzJf dCBsZW5ndGgsDQogICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nJiBzcmNUZXh0LA0KICAgICAg ICAgaW50MzJfdCBzcmNTdGFydCwNCiAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdDsN CiMgMjg2ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIGludDhfdCBjb21w YXJlKGNvbnN0IFVDaGFyICpzcmNDaGFycywNCiAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBj b25zdDsNCiMgMzAzICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIGludDhf dCBjb21wYXJlKGludDMyX3Qgc3RhcnQsDQogICAgICAgICBpbnQzMl90IGxlbmd0aCwNCiAgICAg ICAgIGNvbnN0IFVDaGFyICpzcmNDaGFycykgY29uc3Q7DQojIDMyNCAiLi4vY29tbW9uL3VuaWNv ZGUvdW5pc3RyLmgiDQogIGlubGluZSBpbnQ4X3QgY29tcGFyZShpbnQzMl90IHN0YXJ0LA0KICAg ICAgICAgaW50MzJfdCBsZW5ndGgsDQogICAgICAgICBjb25zdCBVQ2hhciAqc3JjQ2hhcnMsDQog ICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LA0KICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgpIGNv bnN0Ow0KIyAzNDcgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgaW50OF90 IGNvbXBhcmVCZXR3ZWVuKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICBpbnQzMl90IGxpbWl0 LA0KICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyYgc3JjVGV4dCwNCiAgICAgICAgICAg IGludDMyX3Qgc3JjU3RhcnQsDQogICAgICAgICAgICBpbnQzMl90IHNyY0xpbWl0KSBjb25zdDsN CiMgMzcwICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIGludDhfdCBjb21w YXJlQ29kZVBvaW50T3JkZXIoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCkgY29uc3Q7DQojIDM5 MSAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBpbnQ4X3QgY29tcGFyZUNv ZGVQb2ludE9yZGVyKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nJiBzcmNUZXh0KSBjb25zdDsNCiMgNDE2ICIuLi9j b21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgIGlubGluZSBpbnQ4X3QgY29tcGFyZUNvZGVQb2lu dE9yZGVyKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQzMl90IGxlbmd0aCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgpIGNvbnN0Ow0KIyA0NDAgIi4uL2Nv bW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgaW50OF90IGNvbXBhcmVDb2RlUG9pbnRP cmRlcihjb25zdCBVQ2hhciAqc3JjQ2hhcnMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdDsNCiMgNDYyICIuLi9jb21tb24vdW5p Y29kZS91bmlzdHIuaCINCiAgaW5saW5lIGludDhfdCBjb21wYXJlQ29kZVBvaW50T3JkZXIoaW50 MzJfdCBzdGFydCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJf dCBsZW5ndGgsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVD aGFyICpzcmNDaGFycykgY29uc3Q7DQojIDQ4NyAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgi DQogIGlubGluZSBpbnQ4X3QgY29tcGFyZUNvZGVQb2ludE9yZGVyKGludDMyX3Qgc3RhcnQsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAqc3JjQ2hhcnMs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3Ro KSBjb25zdDsNCiMgNTE0ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIGlu dDhfdCBjb21wYXJlQ29kZVBvaW50T3JkZXJCZXR3ZWVuKGludDMyX3Qgc3RhcnQsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGxpbWl0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0 cmluZyYgc3JjVGV4dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludDMyX3Qgc3JjU3RhcnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQzMl90IHNyY0xpbWl0KSBjb25zdDsNCiMgNTM4ICIuLi9jb21tb24vdW5p Y29kZS91bmlzdHIuaCINCiAgaW5saW5lIGludDhfdCBjYXNlQ29tcGFyZShjb25zdCBVbmljb2Rl U3RyaW5nJiB0ZXh0LCB1aW50MzJfdCBvcHRpb25zKSBjb25zdDsNCiMgNTYwICIuLi9jb21tb24v dW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIGludDhfdCBjYXNlQ29tcGFyZShpbnQzMl90IHN0 YXJ0LA0KICAgICAgICAgaW50MzJfdCBsZW5ndGgsDQogICAgICAgICBjb25zdCBVbmljb2RlU3Ry aW5nJiBzcmNUZXh0LA0KICAgICAgICAgdWludDMyX3Qgb3B0aW9ucykgY29uc3Q7DQojIDU4NyAi Li4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBpbnQ4X3QgY2FzZUNvbXBhcmUo aW50MzJfdCBzdGFydCwNCiAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0KICAgICAgICAgY29uc3Qg VW5pY29kZVN0cmluZyYgc3JjVGV4dCwNCiAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsDQogICAg ICAgICBpbnQzMl90IHNyY0xlbmd0aCwNCiAgICAgICAgIHVpbnQzMl90IG9wdGlvbnMpIGNvbnN0 Ow0KIyA2MTMgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgaW50OF90IGNh c2VDb21wYXJlKGNvbnN0IFVDaGFyICpzcmNDaGFycywNCiAgICAgICAgIGludDMyX3Qgc3JjTGVu Z3RoLA0KICAgICAgICAgdWludDMyX3Qgb3B0aW9ucykgY29uc3Q7DQojIDYzNyAiLi4vY29tbW9u L3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBpbnQ4X3QgY2FzZUNvbXBhcmUoaW50MzJfdCBz dGFydCwNCiAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0KICAgICAgICAgY29uc3QgVUNoYXIgKnNy Y0NoYXJzLA0KICAgICAgICAgdWludDMyX3Qgb3B0aW9ucykgY29uc3Q7DQojIDY2NCAiLi4vY29t bW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBpbnQ4X3QgY2FzZUNvbXBhcmUoaW50MzJf dCBzdGFydCwNCiAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0KICAgICAgICAgY29uc3QgVUNoYXIg KnNyY0NoYXJzLA0KICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwNCiAgICAgICAgIGludDMyX3Qg c3JjTGVuZ3RoLA0KICAgICAgICAgdWludDMyX3Qgb3B0aW9ucykgY29uc3Q7DQojIDY5MyAiLi4v Y29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBpbnQ4X3QgY2FzZUNvbXBhcmVCZXR3 ZWVuKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICBpbnQzMl90IGxpbWl0LA0KICAgICAgICAg ICAgY29uc3QgVW5pY29kZVN0cmluZyYgc3JjVGV4dCwNCiAgICAgICAgICAgIGludDMyX3Qgc3Jj U3RhcnQsDQogICAgICAgICAgICBpbnQzMl90IHNyY0xpbWl0LA0KICAgICAgICAgICAgdWludDMy X3Qgb3B0aW9ucykgY29uc3Q7DQojIDcwNyAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQog IGlubGluZSBVQm9vbCBzdGFydHNXaXRoKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHRleHQpIGNvbnN0 Ow0KIyA3MTkgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgVUJvb2wgc3Rh cnRzV2l0aChjb25zdCBVbmljb2RlU3RyaW5nJiBzcmNUZXh0LA0KICAgICAgICAgICAgaW50MzJf dCBzcmNTdGFydCwNCiAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdDsNCiMgNzMx ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIFVCb29sIHN0YXJ0c1dpdGgo Y29uc3QgVUNoYXIgKnNyY0NoYXJzLA0KICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgpIGNv bnN0Ow0KIyA3NDMgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgVUJvb2wg c3RhcnRzV2l0aChjb25zdCBVQ2hhciAqc3JjQ2hhcnMsDQogICAgICAgICAgICBpbnQzMl90IHNy Y1N0YXJ0LA0KICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgpIGNvbnN0Ow0KIyA3NTQgIi4u L2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgVUJvb2wgZW5kc1dpdGgoY29uc3Qg VW5pY29kZVN0cmluZyYgdGV4dCkgY29uc3Q7DQojIDc2NiAiLi4vY29tbW9uL3VuaWNvZGUvdW5p c3RyLmgiDQogIGlubGluZSBVQm9vbCBlbmRzV2l0aChjb25zdCBVbmljb2RlU3RyaW5nJiBzcmNU ZXh0LA0KICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsDQogICAgICAgICAgaW50MzJfdCBzcmNM ZW5ndGgpIGNvbnN0Ow0KIyA3NzggIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxp bmUgVUJvb2wgZW5kc1dpdGgoY29uc3QgVUNoYXIgKnNyY0NoYXJzLA0KICAgICAgICAgIGludDMy X3Qgc3JjTGVuZ3RoKSBjb25zdDsNCiMgNzkxICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCIN CiAgaW5saW5lIFVCb29sIGVuZHNXaXRoKGNvbnN0IFVDaGFyICpzcmNDaGFycywNCiAgICAgICAg ICBpbnQzMl90IHNyY1N0YXJ0LA0KICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdDsN CiMgODA2ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIGludDMyX3QgaW5k ZXhPZihjb25zdCBVbmljb2RlU3RyaW5nJiB0ZXh0KSBjb25zdDsNCiMgODE3ICIuLi9jb21tb24v dW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIGludDMyX3QgaW5kZXhPZihjb25zdCBVbmljb2Rl U3RyaW5nJiB0ZXh0LA0KICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0KSBjb25zdDsNCiMgODMx ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIGludDMyX3QgaW5kZXhPZihj b25zdCBVbmljb2RlU3RyaW5nJiB0ZXh0LA0KICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0LA0K ICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCkgY29uc3Q7DQojIDg1MSAiLi4vY29tbW9uL3Vu aWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBpbnQzMl90IGluZGV4T2YoY29uc3QgVW5pY29kZVN0 cmluZyYgc3JjVGV4dCwNCiAgICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwNCiAgICAgICAg ICAgICAgaW50MzJfdCBzcmNMZW5ndGgsDQogICAgICAgICAgICAgIGludDMyX3Qgc3RhcnQsDQog ICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoKSBjb25zdDsNCiMgODY4ICIuLi9jb21tb24vdW5p Y29kZS91bmlzdHIuaCINCiAgaW5saW5lIGludDMyX3QgaW5kZXhPZihjb25zdCBVQ2hhciAqc3Jj Q2hhcnMsDQogICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoLA0KICAgICAgICAgICAgICBp bnQzMl90IHN0YXJ0KSBjb25zdDsNCiMgODg0ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCIN CiAgaW5saW5lIGludDMyX3QgaW5kZXhPZihjb25zdCBVQ2hhciAqc3JjQ2hhcnMsDQogICAgICAg ICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoLA0KICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0LA0K ICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCkgY29uc3Q7DQojIDkwNSAiLi4vY29tbW9uL3Vu aWNvZGUvdW5pc3RyLmgiDQogIGludDMyX3QgaW5kZXhPZihjb25zdCBVQ2hhciAqc3JjQ2hhcnMs DQogICAgICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsDQogICAgICAgICAgICAgIGludDMyX3Qg c3JjTGVuZ3RoLA0KICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAgICBp bnQzMl90IGxlbmd0aCkgY29uc3Q7DQojIDkxOCAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgi DQogIGlubGluZSBpbnQzMl90IGluZGV4T2YoVUNoYXIgYykgY29uc3Q7DQojIDk0MSAiLi4vY29t bW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBpbnQzMl90IGluZGV4T2YoVUNoYXIzMiBj KSBjb25zdDsNCiMgOTUxICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIGlu dDMyX3QgaW5kZXhPZihVQ2hhciBjLA0KICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0KSBjb25z dDsNCiMgOTc2ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIGludDMyX3Qg aW5kZXhPZihVQ2hhcjMyIGMsDQogICAgICAgICAgICAgIGludDMyX3Qgc3RhcnQpIGNvbnN0Ow0K IyA5ODkgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgaW50MzJfdCBpbmRl eE9mKFVDaGFyIGMsDQogICAgICAgICAgICAgIGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAg IGludDMyX3QgbGVuZ3RoKSBjb25zdDsNCiMgMTAxNyAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3Ry LmgiDQogIGlubGluZSBpbnQzMl90IGluZGV4T2YoVUNoYXIzMiBjLA0KICAgICAgICAgICAgICBp bnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCkgY29uc3Q7DQojIDEw MjkgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgaW50MzJfdCBsYXN0SW5k ZXhPZihjb25zdCBVbmljb2RlU3RyaW5nJiB0ZXh0KSBjb25zdDsNCiMgMTA0MCAiLi4vY29tbW9u L3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBpbnQzMl90IGxhc3RJbmRleE9mKGNvbnN0IFVu aWNvZGVTdHJpbmcmIHRleHQsDQogICAgICAgICAgICAgIGludDMyX3Qgc3RhcnQpIGNvbnN0Ow0K IyAxMDU0ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIGludDMyX3QgbGFz dEluZGV4T2YoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCwNCiAgICAgICAgICAgICAgaW50MzJf dCBzdGFydCwNCiAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgpIGNvbnN0Ow0KIyAxMDc0ICIu Li9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIGludDMyX3QgbGFzdEluZGV4T2Yo Y29uc3QgVW5pY29kZVN0cmluZyYgc3JjVGV4dCwNCiAgICAgICAgICAgICAgaW50MzJfdCBzcmNT dGFydCwNCiAgICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgsDQogICAgICAgICAgICAgIGlu dDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoKSBjb25zdDsNCiMgMTA5 MCAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBpbnQzMl90IGxhc3RJbmRl eE9mKGNvbnN0IFVDaGFyICpzcmNDaGFycywNCiAgICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5n dGgsDQogICAgICAgICAgICAgIGludDMyX3Qgc3RhcnQpIGNvbnN0Ow0KIyAxMTA2ICIuLi9jb21t b24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIGludDMyX3QgbGFzdEluZGV4T2YoY29uc3Qg VUNoYXIgKnNyY0NoYXJzLA0KICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCwNCiAgICAg ICAgICAgICAgaW50MzJfdCBzdGFydCwNCiAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgpIGNv bnN0Ow0KIyAxMTI3ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW50MzJfdCBsYXN0 SW5kZXhPZihjb25zdCBVQ2hhciAqc3JjQ2hhcnMsDQogICAgICAgICAgICAgIGludDMyX3Qgc3Jj U3RhcnQsDQogICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoLA0KICAgICAgICAgICAgICBp bnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCkgY29uc3Q7DQojIDEx NDAgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgaW50MzJfdCBsYXN0SW5k ZXhPZihVQ2hhciBjKSBjb25zdDsNCiMgMTE2MyAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgi DQogIGlubGluZSBpbnQzMl90IGxhc3RJbmRleE9mKFVDaGFyMzIgYykgY29uc3Q7DQojIDExNzMg Ii4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgaW50MzJfdCBsYXN0SW5kZXhP ZihVQ2hhciBjLA0KICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0KSBjb25zdDsNCiMgMTE5OCAi Li4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBpbnQzMl90IGxhc3RJbmRleE9m KFVDaGFyMzIgYywNCiAgICAgICAgICAgICAgaW50MzJfdCBzdGFydCkgY29uc3Q7DQojIDEyMTEg Ii4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgaW50MzJfdCBsYXN0SW5kZXhP ZihVQ2hhciBjLA0KICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAgICBp bnQzMl90IGxlbmd0aCkgY29uc3Q7DQojIDEyMzkgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5o Ig0KICBpbmxpbmUgaW50MzJfdCBsYXN0SW5kZXhPZihVQ2hhcjMyIGMsDQogICAgICAgICAgICAg IGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoKSBjb25zdDsNCiMg MTI1MiAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBVQ2hhciBjaGFyQXQo aW50MzJfdCBvZmZzZXQpIGNvbnN0Ow0KDQoNCg0KDQoNCg0KDQogIGlubGluZSBVQ2hhciBvcGVy YXRvciBbXSAoaW50MzJfdCBvZmZzZXQpIGNvbnN0Ow0KIyAxMjcxICIuLi9jb21tb24vdW5pY29k ZS91bmlzdHIuaCINCiAgaW5saW5lIFVDaGFyMzIgY2hhcjMyQXQoaW50MzJfdCBvZmZzZXQpIGNv bnN0Ow0KIyAxMjg3ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIGludDMy X3QgZ2V0Q2hhcjMyU3RhcnQoaW50MzJfdCBvZmZzZXQpIGNvbnN0Ow0KIyAxMzA5ICIuLi9jb21t b24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIGludDMyX3QgZ2V0Q2hhclN0YXJ0KGludDMy X3Qgb2Zmc2V0KSBjb25zdDsNCiMgMTMyNiAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQog IGlubGluZSBpbnQzMl90IGdldENoYXIzMkxpbWl0KGludDMyX3Qgb2Zmc2V0KSBjb25zdDsNCiMg MTM0OSAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBpbnQzMl90IGdldENo YXJMaW1pdChpbnQzMl90IG9mZnNldCkgY29uc3Q7DQojIDEzOTIgIi4uL2NvbW1vbi91bmljb2Rl L3VuaXN0ci5oIg0KICBpbnQzMl90IG1vdmVJbmRleDMyKGludDMyX3QgaW5kZXgsIGludDMyX3Qg ZGVsdGEpIGNvbnN0Ow0KIyAxNDExICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5s aW5lIHZvaWQgZXh0cmFjdChpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgICBpbnQzMl90IGxlbmd0 aCwNCiAgICAgICAgICAgVUNoYXIgKmRzdCwNCiAgICAgICAgICAgaW50MzJfdCBkc3RTdGFydCA9 IDApIGNvbnN0Ow0KIyAxNDM3ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW50MzJf dA0KICBleHRyYWN0KFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwNCiAgICAgICAg ICBVRXJyb3JDb2RlICZlcnJvckNvZGUpIGNvbnN0Ow0KIyAxNDUxICIuLi9jb21tb24vdW5pY29k ZS91bmlzdHIuaCINCiAgaW5saW5lIHZvaWQgZXh0cmFjdChpbnQzMl90IHN0YXJ0LA0KICAgICAg ICAgICBpbnQzMl90IGxlbmd0aCwNCiAgICAgICAgICAgVW5pY29kZVN0cmluZyYgdGFyZ2V0KSBj b25zdDsNCiMgMTQ2NiAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSB2b2lk IGV4dHJhY3RCZXR3ZWVuKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgIGludDMyX3QgbGlt aXQsDQogICAgICAgICAgICAgIFVDaGFyICpkc3QsDQogICAgICAgICAgICAgIGludDMyX3QgZHN0 U3RhcnQgPSAwKSBjb25zdDsNCiMgMTQ4MCAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQog IHZpcnR1YWwgdm9pZCBleHRyYWN0QmV0d2VlbihpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAg ICBpbnQzMl90IGxpbWl0LA0KICAgICAgICAgICAgICBVbmljb2RlU3RyaW5nJiB0YXJnZXQpIGNv bnN0Ow0KIyAxNTA0ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIGludDMy X3QgZXh0cmFjdChpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0 TGVuZ3RoLA0KICAgICAgICAgICAgICAgICBjaGFyICp0YXJnZXQsDQogICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKmNvZGVwYWdlID0gMCkgY29uc3Q7DQojIDE1MzMgIi4uL2NvbW1vbi91bmlj b2RlL3VuaXN0ci5oIg0KICBpbnQzMl90IGV4dHJhY3QoaW50MzJfdCBzdGFydCwNCiAgICAgICAg ICAgaW50MzJfdCBzdGFydExlbmd0aCwNCiAgICAgICAgICAgY2hhciAqdGFyZ2V0LA0KICAgICAg ICAgICB1aW50MzJfdCB0YXJnZXRMZW5ndGgsDQogICAgICAgICAgIGNvbnN0IGNoYXIgKmNvZGVw YWdlID0gMCkgY29uc3Q7DQojIDE1NTYgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBp bnQzMl90IGV4dHJhY3QoY2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksDQogICAgICAg ICAgICAgICAgICBVQ29udmVydGVyICpjbnYsDQogICAgICAgICAgICAgICAgICBVRXJyb3JDb2Rl ICZlcnJvckNvZGUpIGNvbnN0Ow0KIyAxNTY4ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCIN CiAgaW5saW5lIGludDMyX3QgbGVuZ3RoKHZvaWQpIGNvbnN0Ow0KIyAxNTgyICIuLi9jb21tb24v dW5pY29kZS91bmlzdHIuaCINCiAgaW50MzJfdA0KICBjb3VudENoYXIzMihpbnQzMl90IHN0YXJ0 PTAsIGludDMyX3QgbGVuZ3RoPTB4N2ZmZmZmZmYpIGNvbnN0Ow0KDQoNCg0KDQoNCg0KICBpbmxp bmUgVUJvb2wgaXNFbXB0eSh2b2lkKSBjb25zdDsNCiMgMTYwMSAiLi4vY29tbW9uL3VuaWNvZGUv dW5pc3RyLmgiDQogIGlubGluZSBVQm9vbCBlbXB0eSh2b2lkKSBjb25zdDsNCiMgMTYxMiAiLi4v Y29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBpbnQzMl90IGdldENhcGFjaXR5KHZv aWQpIGNvbnN0Ow0KIyAxNjIxICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5l IGludDMyX3QgaGFzaENvZGUodm9pZCkgY29uc3Q7DQoNCg0KDQoNCg0KDQoNCiAgaW5saW5lIFVC b29sIGlzQm9ndXModm9pZCkgY29uc3Q7DQojIDE2NDUgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0 ci5oIg0KICAgVW5pY29kZVN0cmluZyYgb3BlcmF0b3I9IChjb25zdCBVbmljb2RlU3RyaW5nJiBz cmNUZXh0KTsNCiMgMTY1NCAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBV bmljb2RlU3RyaW5nJiBvcGVyYXRvcj0gKFVDaGFyIGNoKTsNCiMgMTY2MyAiLi4vY29tbW9uL3Vu aWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBVbmljb2RlU3RyaW5nJiBvcGVyYXRvcj0gKFVDaGFy MzIgY2gpOw0KIyAxNjc2ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIFVu aWNvZGVTdHJpbmcmIHNldFRvKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQsDQogICAgICAg ICAgICAgICBpbnQzMl90IHNyY1N0YXJ0KTsNCiMgMTY5MiAiLi4vY29tbW9uL3VuaWNvZGUvdW5p c3RyLmgiDQogIGlubGluZSBVbmljb2RlU3RyaW5nJiBzZXRUbyhjb25zdCBVbmljb2RlU3RyaW5n JiBzcmNUZXh0LA0KICAgICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwNCiAgICAgICAgICAg ICAgIGludDMyX3Qgc3JjTGVuZ3RoKTsNCiMgMTcwNCAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3Ry LmgiDQogIGlubGluZSBVbmljb2RlU3RyaW5nJiBzZXRUbyhjb25zdCBVbmljb2RlU3RyaW5nJiBz cmNUZXh0KTsNCiMgMTcxNCAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBV bmljb2RlU3RyaW5nJiBzZXRUbyhjb25zdCBVQ2hhciAqc3JjQ2hhcnMsDQogICAgICAgICAgICAg ICBpbnQzMl90IHNyY0xlbmd0aCk7DQojIDE3MjUgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5o Ig0KICBVbmljb2RlU3RyaW5nJiBzZXRUbyhVQ2hhciBzcmNDaGFyKTsNCiMgMTczNSAiLi4vY29t bW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIFVuaWNvZGVTdHJpbmcmIHNldFRvKFVDaGFyMzIgc3Jj Q2hhcik7DQojIDE3NTcgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBVbmljb2RlU3Ry aW5nICZzZXRUbyhVQm9vbCBpc1Rlcm1pbmF0ZWQsDQogICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFVDaGFyICp0ZXh0LA0KICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHRleHRMZW5n dGgpOw0KIyAxNzgwICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgVW5pY29kZVN0cmlu ZyAmc2V0VG8oVUNoYXIgKmJ1ZmZlciwNCiAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBi dWZmTGVuZ3RoLA0KICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGJ1ZmZDYXBhY2l0eSk7 DQojIDE4MDUgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICB2b2lkIHNldFRvQm9ndXMo KTsNCiMgMTgxNCAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIFVuaWNvZGVTdHJpbmcm IHNldENoYXJBdChpbnQzMl90IG9mZnNldCwNCiAgICAgICAgICAgICAgIFVDaGFyIGNoKTsNCiMg MTgyNyAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogaW5saW5lIFVuaWNvZGVTdHJpbmcm IG9wZXJhdG9yKz0gKFVDaGFyIGNoKTsNCiMgMTgzNiAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3Ry LmgiDQogaW5saW5lIFVuaWNvZGVTdHJpbmcmIG9wZXJhdG9yKz0gKFVDaGFyMzIgY2gpOw0KIyAx ODQ2ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIFVuaWNvZGVTdHJpbmcm IG9wZXJhdG9yKz0gKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQpOw0KIyAxODYyICIuLi9j b21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIFVuaWNvZGVTdHJpbmcmIGFwcGVuZChj b25zdCBVbmljb2RlU3RyaW5nJiBzcmNUZXh0LA0KICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFy dCwNCiAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKTsNCiMgMTg3MyAiLi4vY29tbW9uL3Vu aWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBVbmljb2RlU3RyaW5nJiBhcHBlbmQoY29uc3QgVW5p Y29kZVN0cmluZyYgc3JjVGV4dCk7DQojIDE4ODggIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5o Ig0KICBpbmxpbmUgVW5pY29kZVN0cmluZyYgYXBwZW5kKGNvbnN0IFVDaGFyICpzcmNDaGFycywN CiAgICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsDQogICAgICAgICAgICBpbnQzMl90IHNyY0xl bmd0aCk7DQojIDE5MDAgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgVW5p Y29kZVN0cmluZyYgYXBwZW5kKGNvbnN0IFVDaGFyICpzcmNDaGFycywNCiAgICAgICAgICAgIGlu dDMyX3Qgc3JjTGVuZ3RoKTsNCg0KDQoNCg0KDQoNCg0KICBpbmxpbmUgVW5pY29kZVN0cmluZyYg YXBwZW5kKFVDaGFyIHNyY0NoYXIpOw0KDQoNCg0KDQoNCg0KDQogIGlubGluZSBVbmljb2RlU3Ry aW5nJiBhcHBlbmQoVUNoYXIzMiBzcmNDaGFyKTsNCiMgMTkzNSAiLi4vY29tbW9uL3VuaWNvZGUv dW5pc3RyLmgiDQogIGlubGluZSBVbmljb2RlU3RyaW5nJiBpbnNlcnQoaW50MzJfdCBzdGFydCwN CiAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQsDQogICAgICAgICAgICBp bnQzMl90IHNyY1N0YXJ0LA0KICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgpOw0KIyAxOTQ4 ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIFVuaWNvZGVTdHJpbmcmIGlu c2VydChpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyYgc3Jj VGV4dCk7DQojIDE5NjQgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgVW5p Y29kZVN0cmluZyYgaW5zZXJ0KGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICBjb25zdCBVQ2hh ciAqc3JjQ2hhcnMsDQogICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LA0KICAgICAgICAgICAg aW50MzJfdCBzcmNMZW5ndGgpOw0KIyAxOTc4ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCIN CiAgaW5saW5lIFVuaWNvZGVTdHJpbmcmIGluc2VydChpbnQzMl90IHN0YXJ0LA0KICAgICAgICAg ICAgY29uc3QgVUNoYXIgKnNyY0NoYXJzLA0KICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgp Ow0KIyAxOTkwICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIFVuaWNvZGVT dHJpbmcmIGluc2VydChpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAgVUNoYXIgc3JjQ2hhcik7 DQojIDIwMDEgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgVW5pY29kZVN0 cmluZyYgaW5zZXJ0KGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICBVQ2hhcjMyIHNyY0NoYXIp Ow0KIyAyMDI0ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgVW5pY29kZVN0cmluZyYg cmVwbGFjZShpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0KICAg ICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQsDQogICAgICAgICAgICAgaW50 MzJfdCBzcmNTdGFydCwNCiAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCk7DQojIDIwNDIg Ii4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBVbmljb2RlU3RyaW5nJiByZXBsYWNlKGlu dDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsDQogICAgICAgICAgICAg Y29uc3QgVW5pY29kZVN0cmluZyYgc3JjVGV4dCk7DQojIDIwNjMgIi4uL2NvbW1vbi91bmljb2Rl L3VuaXN0ci5oIg0KICBVbmljb2RlU3RyaW5nJiByZXBsYWNlKGludDMyX3Qgc3RhcnQsDQogICAg ICAgICAgICAgaW50MzJfdCBsZW5ndGgsDQogICAgICAgICAgICAgY29uc3QgVUNoYXIgKnNyY0No YXJzLA0KICAgICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsDQogICAgICAgICAgICAgaW50MzJf dCBzcmNMZW5ndGgpOw0KIyAyMDgxICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5s aW5lIFVuaWNvZGVTdHJpbmcmIHJlcGxhY2UoaW50MzJfdCBzdGFydCwNCiAgICAgICAgICAgICBp bnQzMl90IGxlbmd0aCwNCiAgICAgICAgICAgICBjb25zdCBVQ2hhciAqc3JjQ2hhcnMsDQogICAg ICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgpOw0KIyAyMDk3ICIuLi9jb21tb24vdW5pY29kZS91 bmlzdHIuaCINCiAgaW5saW5lIFVuaWNvZGVTdHJpbmcmIHJlcGxhY2UoaW50MzJfdCBzdGFydCwN CiAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwNCiAgICAgICAgICAgICBVQ2hhciBzcmNDaGFy KTsNCiMgMjExMiAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBVbmljb2Rl U3RyaW5nJiByZXBsYWNlKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgaW50MzJfdCBsZW5n dGgsDQogICAgICAgICAgICAgVUNoYXIzMiBzcmNDaGFyKTsNCiMgMjEyNSAiLi4vY29tbW9uL3Vu aWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBVbmljb2RlU3RyaW5nJiByZXBsYWNlQmV0d2Vlbihp bnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAgICAgIGludDMyX3QgbGltaXQsDQogICAgICAgICAg ICAgICAgY29uc3QgVW5pY29kZVN0cmluZyYgc3JjVGV4dCk7DQojIDIxNDMgIi4uL2NvbW1vbi91 bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgVW5pY29kZVN0cmluZyYgcmVwbGFjZUJldHdlZW4o aW50MzJfdCBzdGFydCwNCiAgICAgICAgICAgICAgICBpbnQzMl90IGxpbWl0LA0KICAgICAgICAg ICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQsDQogICAgICAgICAgICAgICAgaW50 MzJfdCBzcmNTdGFydCwNCiAgICAgICAgICAgICAgICBpbnQzMl90IHNyY0xpbWl0KTsNCiMgMjE1 OSAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIHZpcnR1YWwgdm9pZCBoYW5kbGVSZXBs YWNlQmV0d2VlbihpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50MzJfdCBsaW1pdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IFVuaWNvZGVTdHJpbmcmIHRleHQpOw0KDQoNCg0KDQoNCiAgdmlydHVhbCBVQm9vbCBo YXNNZXRhRGF0YSgpIGNvbnN0Ow0KIyAyMTg0ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCIN CiAgdmlydHVhbCB2b2lkIGNvcHkoaW50MzJfdCBzdGFydCwgaW50MzJfdCBsaW1pdCwgaW50MzJf dCBkZXN0KTsNCiMgMjE5NiAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIGlubGluZSBV bmljb2RlU3RyaW5nJiBmaW5kQW5kUmVwbGFjZShjb25zdCBVbmljb2RlU3RyaW5nJiBvbGRUZXh0 LA0KICAgICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIG5ld1RleHQpOw0KIyAyMjEw ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIFVuaWNvZGVTdHJpbmcmIGZp bmRBbmRSZXBsYWNlKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgICAgaW50MzJfdCBsZW5n dGgsDQogICAgICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyYgb2xkVGV4dCwNCiAgICAg ICAgICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nJiBuZXdUZXh0KTsNCiMgMjIzMiAiLi4vY29t bW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIFVuaWNvZGVTdHJpbmcmIGZpbmRBbmRSZXBsYWNlKGlu dDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsDQogICAgICAgICAg ICAgICAgY29uc3QgVW5pY29kZVN0cmluZyYgb2xkVGV4dCwNCiAgICAgICAgICAgICAgICBpbnQz Ml90IG9sZFN0YXJ0LA0KICAgICAgICAgICAgICAgIGludDMyX3Qgb2xkTGVuZ3RoLA0KICAgICAg ICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIG5ld1RleHQsDQogICAgICAgICAgICAgICAg aW50MzJfdCBuZXdTdGFydCwNCiAgICAgICAgICAgICAgICBpbnQzMl90IG5ld0xlbmd0aCk7DQoj IDIyNDkgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgVW5pY29kZVN0cmlu ZyYgcmVtb3ZlKHZvaWQpOw0KIyAyMjU5ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAg aW5saW5lIFVuaWNvZGVTdHJpbmcmIHJlbW92ZShpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoID0gKGludDMyX3QpKChpbnQzMl90KSgy MTQ3NDgzNjQ3KSkpOw0KIyAyMjcwICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5s aW5lIFVuaWNvZGVTdHJpbmcmIHJlbW92ZUJldHdlZW4oaW50MzJfdCBzdGFydCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsaW1pdCA9IChpbnQzMl90KSgo aW50MzJfdCkoMjE0NzQ4MzY0NykpKTsNCiMgMjI4NyAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3Ry LmgiDQogIFVCb29sIHBhZExlYWRpbmcoaW50MzJfdCB0YXJnZXRMZW5ndGgsDQogICAgICAgICAg ICAgICAgICAgIFVDaGFyIHBhZENoYXIgPSAweDAwMjApOw0KIyAyMzAxICIuLi9jb21tb24vdW5p Y29kZS91bmlzdHIuaCINCiAgVUJvb2wgcGFkVHJhaWxpbmcoaW50MzJfdCB0YXJnZXRMZW5ndGgs DQogICAgICAgICAgICAgICAgICAgICBVQ2hhciBwYWRDaGFyID0gMHgwMDIwKTsNCg0KDQoNCg0K DQoNCg0KICBpbmxpbmUgVUJvb2wgdHJ1bmNhdGUoaW50MzJfdCB0YXJnZXRMZW5ndGgpOw0KDQoN Cg0KDQoNCg0KICBVbmljb2RlU3RyaW5nJiB0cmltKHZvaWQpOw0KIyAyMzI3ICIuLi9jb21tb24v dW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIFVuaWNvZGVTdHJpbmcmIHJldmVyc2Uodm9pZCk7 DQojIDIzMzcgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgVW5pY29kZVN0 cmluZyYgcmV2ZXJzZShpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAgIGludDMyX3QgbGVuZ3Ro KTsNCg0KDQoNCg0KDQoNCg0KICBVbmljb2RlU3RyaW5nJiB0b1VwcGVyKHZvaWQpOw0KIyAyMzU1 ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgVW5pY29kZVN0cmluZyYgdG9VcHBlcihj b25zdCBMb2NhbGUmIGxvY2FsZSk7DQoNCg0KDQoNCg0KDQoNCiAgVW5pY29kZVN0cmluZyYgdG9M b3dlcih2b2lkKTsNCiMgMjM3MiAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIFVuaWNv ZGVTdHJpbmcmIHRvTG93ZXIoY29uc3QgTG9jYWxlJiBsb2NhbGUpOw0KIyAyMzk5ICIuLi9jb21t b24vdW5pY29kZS91bmlzdHIuaCINCiAgVW5pY29kZVN0cmluZyAmdG9UaXRsZShCcmVha0l0ZXJh dG9yICp0aXRsZUl0ZXIpOw0KIyAyNDI3ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAg VW5pY29kZVN0cmluZyAmdG9UaXRsZShCcmVha0l0ZXJhdG9yICp0aXRsZUl0ZXIsIGNvbnN0IExv Y2FsZSAmbG9jYWxlKTsNCiMgMjQ0MCAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIFVu aWNvZGVTdHJpbmcgJmZvbGRDYXNlKHVpbnQzMl90IG9wdGlvbnM9MCApOw0KIyAyNDg4ICIuLi9j b21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgVUNoYXIgKmdldEJ1ZmZlcihpbnQzMl90IG1pbkNh cGFjaXR5KTsNCiMgMjUxMCAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIHZvaWQgcmVs ZWFzZUJ1ZmZlcihpbnQzMl90IG5ld0xlbmd0aD0tMSk7DQojIDI1NDIgIi4uL2NvbW1vbi91bmlj b2RlL3VuaXN0ci5oIg0KICBpbmxpbmUgY29uc3QgVUNoYXIgKmdldEJ1ZmZlcigpIGNvbnN0Ow0K IyAyNTc3ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW5saW5lIGNvbnN0IFVDaGFy ICpnZXRUZXJtaW5hdGVkQnVmZmVyKCk7DQojIDI1ODYgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0 ci5oIg0KICBVbmljb2RlU3RyaW5nKCk7DQojIDI1OTkgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0 ci5oIg0KICBVbmljb2RlU3RyaW5nKGludDMyX3QgY2FwYWNpdHksIFVDaGFyMzIgYywgaW50MzJf dCBjb3VudCk7DQoNCg0KDQoNCg0KDQogIFVuaWNvZGVTdHJpbmcoVUNoYXIgY2gpOw0KDQoNCg0K DQoNCg0KICBVbmljb2RlU3RyaW5nKFVDaGFyMzIgY2gpOw0KDQoNCg0KDQoNCg0KDQogIFVuaWNv ZGVTdHJpbmcoY29uc3QgVUNoYXIgKnRleHQpOw0KIyAyNjMwICIuLi9jb21tb24vdW5pY29kZS91 bmlzdHIuaCINCiAgVW5pY29kZVN0cmluZyhjb25zdCBVQ2hhciAqdGV4dCwNCiAgICAgICAgaW50 MzJfdCB0ZXh0TGVuZ3RoKTsNCiMgMjY1MiAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQog IFVuaWNvZGVTdHJpbmcoVUJvb2wgaXNUZXJtaW5hdGVkLA0KICAgICAgICAgICAgICAgIGNvbnN0 IFVDaGFyICp0ZXh0LA0KICAgICAgICAgICAgICAgIGludDMyX3QgdGV4dExlbmd0aCk7DQojIDI2 NzQgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBVbmljb2RlU3RyaW5nKFVDaGFyICpi dWZmZXIsIGludDMyX3QgYnVmZkxlbmd0aCwgaW50MzJfdCBidWZmQ2FwYWNpdHkpOw0KIyAyNjg3 ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgVW5pY29kZVN0cmluZyhjb25zdCBjaGFy ICpjb2RlcGFnZURhdGEsDQogICAgICAgIGNvbnN0IGNoYXIgKmNvZGVwYWdlID0gMCk7DQojIDI3 MDIgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBVbmljb2RlU3RyaW5nKGNvbnN0IGNo YXIgKmNvZGVwYWdlRGF0YSwNCiAgICAgICAgaW50MzJfdCBkYXRhTGVuZ3RoLA0KICAgICAgICBj b25zdCBjaGFyICpjb2RlcGFnZSA9IDApOw0KIyAyNzI3ICIuLi9jb21tb24vdW5pY29kZS91bmlz dHIuaCINCiAgVW5pY29kZVN0cmluZygNCiAgICAgICAgY29uc3QgY2hhciAqc3JjLCBpbnQzMl90 IHNyY0xlbmd0aCwNCiAgICAgICAgVUNvbnZlcnRlciAqY252LA0KICAgICAgICBVRXJyb3JDb2Rl ICZlcnJvckNvZGUpOw0KDQoNCg0KDQoNCg0KDQogIFVuaWNvZGVTdHJpbmcoY29uc3QgVW5pY29k ZVN0cmluZyYgdGhhdCk7DQoNCg0KDQoNCg0KDQoNCiAgVW5pY29kZVN0cmluZyhjb25zdCBVbmlj b2RlU3RyaW5nJiBzcmMsIGludDMyX3Qgc3JjU3RhcnQpOw0KIyAyNzU1ICIuLi9jb21tb24vdW5p Y29kZS91bmlzdHIuaCINCiAgVW5pY29kZVN0cmluZyhjb25zdCBVbmljb2RlU3RyaW5nJiBzcmMs IGludDMyX3Qgc3JjU3RhcnQsIGludDMyX3Qgc3JjTGVuZ3RoKTsNCg0KDQoNCg0KICB+VW5pY29k ZVN0cmluZygpOw0KIyAyNzg3ICIuLi9jb21tb24vdW5pY29kZS91bmlzdHIuaCINCiAgaW50MzJf dCBudW1EaXNwbGF5Q2VsbHMoaW50MzJfdCBzdGFydCA9IDAsDQogICAgICAgICAgICAgIGludDMy X3QgbGVuZ3RoID0gKChpbnQzMl90KSgyMTQ3NDgzNjQ3KSksDQogICAgICAgICAgICAgIFVCb29s IGFzaWFuID0gMSkgY29uc3Q7DQojIDI3OTggIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0K ICBVQ2hhclJlZmVyZW5jZSBvcGVyYXRvcltdIChpbnQzMl90IHBvcyk7DQojIDI4MzMgIi4uL2Nv bW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBVbmljb2RlU3RyaW5nIHVuZXNjYXBlKCkgY29uc3Q7 DQojIDI4NTQgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBVQ2hhcjMyIHVuZXNjYXBl QXQoaW50MzJfdCAmb2Zmc2V0KSBjb25zdDsNCg0KDQoNCg0KDQoNCiAgdmlydHVhbCBpbmxpbmUg VUNsYXNzSUQgZ2V0RHluYW1pY0NsYXNzSUQoKSBjb25zdCB7IHJldHVybiBnZXRTdGF0aWNDbGFz c0lEKCk7IH0NCg0KDQoNCg0KDQoNCiAgc3RhdGljIGlubGluZSBVQ2xhc3NJRCBnZXRTdGF0aWND bGFzc0lEKCkgeyByZXR1cm4gKFVDbGFzc0lEKSZmZ0NsYXNzSUQ7IH0NCg0KDQoNCg0KDQpwcm90 ZWN0ZWQ6DQoNCg0KDQogIHZpcnR1YWwgaW50MzJfdCBnZXRMZW5ndGgoKSBjb25zdDsNCg0KDQoN Cg0KDQogIHZpcnR1YWwgVUNoYXIgZ2V0Q2hhckF0KGludDMyX3Qgb2Zmc2V0KSBjb25zdDsNCg0K DQoNCg0KDQogIHZpcnR1YWwgVUNoYXIzMiBnZXRDaGFyMzJBdChpbnQzMl90IG9mZnNldCkgY29u c3Q7DQoNCnByaXZhdGU6DQoNCiAgaW5saW5lIGludDhfdA0KICBkb0NvbXBhcmUoaW50MzJfdCBz dGFydCwNCiAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsDQogICAgICAgICAgIGNvbnN0IFVuaWNv ZGVTdHJpbmcmIHNyY1RleHQsDQogICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsDQogICAgICAg ICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdDsNCg0KICBpbnQ4X3QgZG9Db21wYXJlKGludDMy X3Qgc3RhcnQsDQogICAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0KICAgICAgICAgICBjb25zdCBV Q2hhciAqc3JjQ2hhcnMsDQogICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsDQogICAgICAgICAg IGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdDsNCg0KICBpbmxpbmUgaW50OF90DQogIGRvQ29tcGFy ZUNvZGVQb2ludE9yZGVyKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgICAgICAgICAgICAg IGludDMyX3QgbGVuZ3RoLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmljb2Rl U3RyaW5nJiBzcmNUZXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNyY1N0 YXJ0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCkgY29uc3Q7 DQoNCiAgaW50OF90IGRvQ29tcGFyZUNvZGVQb2ludE9yZGVyKGludDMyX3Qgc3RhcnQsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICpzcmNDaGFycywNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCkgY29uc3Q7DQoNCiAgaW5saW5lIGlu dDhfdA0KICBkb0Nhc2VDb21wYXJlKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgICAgaW50 MzJfdCBsZW5ndGgsDQogICAgICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyAmc3JjVGV4 dCwNCiAgICAgICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LA0KICAgICAgICAgICAgICAgIGlu dDMyX3Qgc3JjTGVuZ3RoLA0KICAgICAgICAgICAgICAgIHVpbnQzMl90IG9wdGlvbnMpIGNvbnN0 Ow0KDQogIGludDhfdA0KICBkb0Nhc2VDb21wYXJlKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAg ICAgICAgaW50MzJfdCBsZW5ndGgsDQogICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKnNyY0No YXJzLA0KICAgICAgICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsDQogICAgICAgICAgICAgICAg aW50MzJfdCBzcmNMZW5ndGgsDQogICAgICAgICAgICAgICAgdWludDMyX3Qgb3B0aW9ucykgY29u c3Q7DQoNCiAgaW50MzJfdCBkb0luZGV4T2YoVUNoYXIgYywNCiAgICAgICAgICAgIGludDMyX3Qg c3RhcnQsDQogICAgICAgICAgICBpbnQzMl90IGxlbmd0aCkgY29uc3Q7DQoNCg0KICBpbnQzMl90 IGRvSW5kZXhPZihVQ2hhcjMyIGMsDQogICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHN0 YXJ0LA0KICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgpIGNvbnN0Ow0KDQog IGludDMyX3QgZG9MYXN0SW5kZXhPZihVQ2hhciBjLA0KICAgICAgICAgICAgICAgIGludDMyX3Qg c3RhcnQsDQogICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgpIGNvbnN0Ow0KDQoNCiAgaW50 MzJfdCBkb0xhc3RJbmRleE9mKFVDaGFyMzIgYywNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGVu Z3RoKSBjb25zdDsNCg0KICB2b2lkIGRvRXh0cmFjdChpbnQzMl90IHN0YXJ0LA0KICAgICAgICAg aW50MzJfdCBsZW5ndGgsDQogICAgICAgICBVQ2hhciAqZHN0LA0KICAgICAgICAgaW50MzJfdCBk c3RTdGFydCkgY29uc3Q7DQoNCiAgaW5saW5lIHZvaWQgZG9FeHRyYWN0KGludDMyX3Qgc3RhcnQs DQogICAgICAgICBpbnQzMl90IGxlbmd0aCwNCiAgICAgICAgIFVuaWNvZGVTdHJpbmcmIHRhcmdl dCkgY29uc3Q7DQoNCiAgaW5saW5lIFVDaGFyIGRvQ2hhckF0KGludDMyX3Qgb2Zmc2V0KSBjb25z dDsNCg0KICBVbmljb2RlU3RyaW5nJiBkb1JlcGxhY2UoaW50MzJfdCBzdGFydCwNCiAgICAgICAg ICAgICAgIGludDMyX3QgbGVuZ3RoLA0KICAgICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmlu ZyYgc3JjVGV4dCwNCiAgICAgICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsDQogICAgICAgICAg ICAgICBpbnQzMl90IHNyY0xlbmd0aCk7DQoNCiAgVW5pY29kZVN0cmluZyYgZG9SZXBsYWNlKGlu dDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwNCiAgICAgICAgICAg ICAgIGNvbnN0IFVDaGFyICpzcmNDaGFycywNCiAgICAgICAgICAgICAgIGludDMyX3Qgc3JjU3Rh cnQsDQogICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCk7DQoNCiAgVW5pY29kZVN0cmlu ZyYgZG9SZXZlcnNlKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0 aCk7DQoNCg0KICBpbnQzMl90IGRvSGFzaENvZGUodm9pZCkgY29uc3Q7DQoNCg0KICBpbmxpbmUg VUNoYXIqIGdldEFycmF5U3RhcnQodm9pZCk7DQogIGlubGluZSBjb25zdCBVQ2hhciogZ2V0QXJy YXlTdGFydCh2b2lkKSBjb25zdDsNCg0KDQoNCg0KDQogIFVCb29sIGFsbG9jYXRlKGludDMyX3Qg Y2FwYWNpdHkpOw0KDQoNCiAgdm9pZCByZWxlYXNlQXJyYXkodm9pZCk7DQoNCg0KICBpbmxpbmUg dm9pZCBwaW5JbmRpY2VzKGludDMyX3QmIHN0YXJ0LA0KICAgICAgICAgICAgICAgICAgICAgICAg IGludDMyX3QmIGxlbmd0aCkgY29uc3Q7DQoNCg0KICBpbnQzMl90IGRvRXh0cmFjdChpbnQzMl90 IHN0YXJ0LCBpbnQzMl90IGxlbmd0aCwNCiAgICAgICAgICAgICAgICAgICAgY2hhciAqZGVzdCwg aW50MzJfdCBkZXN0Q2FwYWNpdHksDQogICAgICAgICAgICAgICAgICAgIFVDb252ZXJ0ZXIgKmNu diwNCiAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKSBjb25zdDsNCiMg MzAxNiAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3RyLmgiDQogIHZvaWQgZG9Db2RlcGFnZUNyZWF0 ZShjb25zdCBjaGFyICpjb2RlcGFnZURhdGEsDQogICAgICAgICAgICAgICAgICAgICAgICBpbnQz Ml90IGRhdGFMZW5ndGgsDQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb2Rl cGFnZSk7DQoNCg0KDQoNCg0KICB2b2lkDQogIGRvQ29kZXBhZ2VDcmVhdGUoY29uc3QgY2hhciAq Y29kZXBhZ2VEYXRhLA0KICAgICAgICAgICAgICAgICAgIGludDMyX3QgZGF0YUxlbmd0aCwNCiAg ICAgICAgICAgICAgICAgICBVQ29udmVydGVyICpjb252ZXJ0ZXIsDQogICAgICAgICAgICAgICAg ICAgVUVycm9yQ29kZSAmc3RhdHVzKTsNCiMgMzA0MCAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc3Ry LmgiDQogIFVCb29sIGNsb25lQXJyYXlJZk5lZWRlZChpbnQzMl90IG5ld0NhcGFjaXR5ID0gLTEs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBncm93Q2FwYWNpdHkgPSAtMSwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCBkb0NvcHlBcnJheSA9IDEsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCAqKnBCdWZmZXJUb0RlbGV0ZSA9IDAsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgVUJvb2wgZm9yY2VDbG9uZSA9IDApOw0KDQoNCiAg VW5pY29kZVN0cmluZyAmDQogIGNhc2VNYXAoQnJlYWtJdGVyYXRvciAqdGl0bGVJdGVyLA0KICAg ICAgICAgIGNvbnN0IExvY2FsZSYgbG9jYWxlLA0KICAgICAgICAgIHVpbnQzMl90IG9wdGlvbnMs DQogICAgICAgICAgaW50MzJfdCB0b1doaWNoQ2FzZSk7DQoNCg0KICB2b2lkIGFkZFJlZih2b2lk KTsNCiAgaW50MzJfdCByZW1vdmVSZWYodm9pZCk7DQogIGludDMyX3QgcmVmQ291bnQodm9pZCkg Y29uc3Q7DQogIGludDMyX3Qgc2V0UmVmQ291bnQoaW50MzJfdCBjb3VudCk7DQoNCg0KICBlbnVt IHsNCg0KDQoNCiAgICBVU19TVEFDS0JVRl9TSVpFPTcsDQoNCg0KDQogICAga0ludmFsaWRVQ2hh cj0weGZmZmYsDQogICAga0dyb3dTaXplPTEyOCwNCiAgICBrSW52YWxpZEhhc2hDb2RlPTAsDQog ICAga0VtcHR5SGFzaENvZGU9MSwNCg0KDQogICAga0lzQm9ndXM9MSwNCiAgICBrVXNpbmdTdGFj a0J1ZmZlcj0yLA0KICAgIGtSZWZDb3VudGVkPTQsDQogICAga0J1ZmZlcklzUmVhZG9ubHk9OCwN CiAgICBrT3BlbkdldEJ1ZmZlcj0xNiwNCg0KDQoNCiAgICBrU2hvcnRTdHJpbmc9a1VzaW5nU3Rh Y2tCdWZmZXIsDQogICAga0xvbmdTdHJpbmc9a1JlZkNvdW50ZWQsDQogICAga1JlYWRvbmx5QWxp YXM9a0J1ZmZlcklzUmVhZG9ubHksDQogICAga1dyaXRhYmxlQWxpYXM9MA0KICB9Ow0KDQogIGZy aWVuZCBjbGFzcyBVbmljb2RlQ29udmVydGVyOw0KDQogIGZyaWVuZCBjbGFzcyBTdHJpbmdDaGFy YWN0ZXJJdGVyYXRvcjsNCiAgZnJpZW5kIGNsYXNzIFN0cmluZ1RocmVhZFRlc3Q7DQojIDMxMDUg Ii4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0KICBpbnQzMl90IGZMZW5ndGg7DQogIGludDMy X3QgZkNhcGFjaXR5Ow0KICBVQ2hhciAqZkFycmF5Ow0KICB1aW50MTZfdCBmRmxhZ3M7DQoNCg0K DQogIFVDaGFyIGZTdGFja0J1ZmZlciBbIFVTX1NUQUNLQlVGX1NJWkUgXTsNCg0KDQoNCg0KDQog IHN0YXRpYyBjb25zdCBjaGFyIGZnQ2xhc3NJRDsNCn07DQoNCn0NCg0KDQoNCg0KDQppbmxpbmUg dm9pZA0KdXBydl9hcnJheUNvcHkoY29uc3QgaWN1XzJfMjo6IFVuaWNvZGVTdHJpbmcgKnNyYywg aWN1XzJfMjo6IFVuaWNvZGVTdHJpbmcgKmRzdCwgaW50MzJfdCBjb3VudCkNCnsgd2hpbGUoY291 bnQtLSA+IDApICpkc3QrKyA9ICpzcmMrKzsgfQ0KDQppbmxpbmUgdm9pZA0KdXBydl9hcnJheUNv cHkoY29uc3QgaWN1XzJfMjo6IFVuaWNvZGVTdHJpbmcgKnNyYywgaW50MzJfdCBzcmNTdGFydCwN CiAgICAgICAgaWN1XzJfMjo6IFVuaWNvZGVTdHJpbmcgKmRzdCwgaW50MzJfdCBkc3RTdGFydCwg aW50MzJfdCBjb3VudCkNCnsgdXBydl9hcnJheUNvcHkoc3JjK3NyY1N0YXJ0LCBkc3QrZHN0U3Rh cnQsIGNvdW50KTsgfQ0KDQpuYW1lc3BhY2UgaWN1XzJfMiB7DQoNCg0KDQoNCg0KDQoNCmlubGlu ZSBVQm9vbA0KVW5pY29kZVN0cmluZzo6b3BlcmF0b3I9PSAoY29uc3QgVW5pY29kZVN0cmluZyYg dGV4dCkgY29uc3QNCnsNCiAgaWYoaXNCb2d1cygpKSB7DQogICAgcmV0dXJuIHRleHQuaXNCb2d1 cygpOw0KICB9IGVsc2Ugew0KICAgIHJldHVybg0KICAgICAgIXRleHQuaXNCb2d1cygpICYmDQog ICAgICBmTGVuZ3RoID09IHRleHQuZkxlbmd0aCAmJg0KICAgICAgZG9Db21wYXJlKDAsIGZMZW5n dGgsIHRleHQsIDAsIHRleHQuZkxlbmd0aCkgPT0gMDsNCiAgfQ0KfQ0KDQppbmxpbmUgVUJvb2wN ClVuaWNvZGVTdHJpbmc6Om9wZXJhdG9yIT0gKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHRleHQpIGNv bnN0DQp7IHJldHVybiAoISBvcGVyYXRvcj09KHRleHQpKTsgfQ0KDQppbmxpbmUgVUJvb2wNClVu aWNvZGVTdHJpbmc6Om9wZXJhdG9yPiAoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCkgY29uc3QN CnsgcmV0dXJuIGRvQ29tcGFyZSgwLCBmTGVuZ3RoLCB0ZXh0LCAwLCB0ZXh0LmZMZW5ndGgpID09 IDE7IH0NCg0KaW5saW5lIFVCb29sDQpVbmljb2RlU3RyaW5nOjpvcGVyYXRvcjwgKGNvbnN0IFVu aWNvZGVTdHJpbmcmIHRleHQpIGNvbnN0DQp7IHJldHVybiBkb0NvbXBhcmUoMCwgZkxlbmd0aCwg dGV4dCwgMCwgdGV4dC5mTGVuZ3RoKSA9PSAtMTsgfQ0KDQppbmxpbmUgVUJvb2wNClVuaWNvZGVT dHJpbmc6Om9wZXJhdG9yPj0gKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHRleHQpIGNvbnN0DQp7IHJl dHVybiBkb0NvbXBhcmUoMCwgZkxlbmd0aCwgdGV4dCwgMCwgdGV4dC5mTGVuZ3RoKSAhPSAtMTsg fQ0KDQppbmxpbmUgVUJvb2wNClVuaWNvZGVTdHJpbmc6Om9wZXJhdG9yPD0gKGNvbnN0IFVuaWNv ZGVTdHJpbmcmIHRleHQpIGNvbnN0DQp7IHJldHVybiBkb0NvbXBhcmUoMCwgZkxlbmd0aCwgdGV4 dCwgMCwgdGV4dC5mTGVuZ3RoKSAhPSAxOyB9DQoNCmlubGluZSBpbnQ4X3QNClVuaWNvZGVTdHJp bmc6OmNvbXBhcmUoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCkgY29uc3QNCnsgcmV0dXJuIGRv Q29tcGFyZSgwLCBmTGVuZ3RoLCB0ZXh0LCAwLCB0ZXh0LmZMZW5ndGgpOyB9DQoNCmlubGluZSBp bnQ4X3QNClVuaWNvZGVTdHJpbmc6OmNvbXBhcmUoaW50MzJfdCBzdGFydCwNCiAgICAgICAgICAg ICAgIGludDMyX3QgbGVuZ3RoLA0KICAgICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyYg c3JjVGV4dCkgY29uc3QNCnsgcmV0dXJuIGRvQ29tcGFyZShzdGFydCwgbGVuZ3RoLCBzcmNUZXh0 LCAwLCBzcmNUZXh0LmZMZW5ndGgpOyB9DQoNCmlubGluZSBpbnQ4X3QNClVuaWNvZGVTdHJpbmc6 OmNvbXBhcmUoY29uc3QgVUNoYXIgKnNyY0NoYXJzLA0KICAgICAgICAgICAgICAgaW50MzJfdCBz cmNMZW5ndGgpIGNvbnN0DQp7IHJldHVybiBkb0NvbXBhcmUoMCwgZkxlbmd0aCwgc3JjQ2hhcnMs IDAsIHNyY0xlbmd0aCk7IH0NCg0KaW5saW5lIGludDhfdA0KVW5pY29kZVN0cmluZzo6Y29tcGFy ZShpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsDQogICAgICAg ICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nJiBzcmNUZXh0LA0KICAgICAgICAgICAgICAgaW50 MzJfdCBzcmNTdGFydCwNCiAgICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdA0K eyByZXR1cm4gZG9Db21wYXJlKHN0YXJ0LCBsZW5ndGgsIHNyY1RleHQsIHNyY1N0YXJ0LCBzcmNM ZW5ndGgpOyB9DQoNCmlubGluZSBpbnQ4X3QNClVuaWNvZGVTdHJpbmc6OmNvbXBhcmUoaW50MzJf dCBzdGFydCwNCiAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0KICAgICAgICAgICAgICAg Y29uc3QgVUNoYXIgKnNyY0NoYXJzKSBjb25zdA0KeyByZXR1cm4gZG9Db21wYXJlKHN0YXJ0LCBs ZW5ndGgsIHNyY0NoYXJzLCAwLCBsZW5ndGgpOyB9DQoNCmlubGluZSBpbnQ4X3QNClVuaWNvZGVT dHJpbmc6OmNvbXBhcmUoaW50MzJfdCBzdGFydCwNCiAgICAgICAgICAgICAgIGludDMyX3QgbGVu Z3RoLA0KICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKnNyY0NoYXJzLA0KICAgICAgICAgICAg ICAgaW50MzJfdCBzcmNTdGFydCwNCiAgICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBj b25zdA0KeyByZXR1cm4gZG9Db21wYXJlKHN0YXJ0LCBsZW5ndGgsIHNyY0NoYXJzLCBzcmNTdGFy dCwgc3JjTGVuZ3RoKTsgfQ0KDQppbmxpbmUgaW50OF90DQpVbmljb2RlU3RyaW5nOjpjb21wYXJl QmV0d2VlbihpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAgICAgICAgaW50MzJfdCBsaW1pdCwN CiAgICAgICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQsDQogICAgICAg ICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LA0KICAgICAgICAgICAgICAgICAgaW50MzJfdCBz cmNMaW1pdCkgY29uc3QNCnsgcmV0dXJuIGRvQ29tcGFyZShzdGFydCwgbGltaXQgLSBzdGFydCwN CiAgICAgICAgICAgc3JjVGV4dCwgc3JjU3RhcnQsIHNyY0xpbWl0IC0gc3JjU3RhcnQpOyB9DQoN CmlubGluZSBpbnQ4X3QNClVuaWNvZGVTdHJpbmc6OmRvQ29tcGFyZShpbnQzMl90IHN0YXJ0LA0K ICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwNCiAgICAgICAgICAgICAgY29uc3QgVW5pY29k ZVN0cmluZyYgc3JjVGV4dCwNCiAgICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwNCiAgICAg ICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgpIGNvbnN0DQp7DQogIGNvbnN0IFVDaGFyICpzcmND aGFyczsNCiAgaWYoIXNyY1RleHQuaXNCb2d1cygpKSB7DQogICAgc3JjVGV4dC5waW5JbmRpY2Vz KHNyY1N0YXJ0LCBzcmNMZW5ndGgpOw0KICAgIHNyY0NoYXJzPXNyY1RleHQuZ2V0QXJyYXlTdGFy dCgpOw0KICB9IGVsc2Ugew0KICAgIHNyY0NoYXJzPTA7DQogIH0NCiAgcmV0dXJuIGRvQ29tcGFy ZShzdGFydCwgbGVuZ3RoLCBzcmNDaGFycywgc3JjU3RhcnQsIHNyY0xlbmd0aCk7DQp9DQoNCmlu bGluZSBpbnQ4X3QNClVuaWNvZGVTdHJpbmc6OmNvbXBhcmVDb2RlUG9pbnRPcmRlcihjb25zdCBV bmljb2RlU3RyaW5nJiB0ZXh0KSBjb25zdA0KeyByZXR1cm4gZG9Db21wYXJlQ29kZVBvaW50T3Jk ZXIoMCwgZkxlbmd0aCwgdGV4dCwgMCwgdGV4dC5mTGVuZ3RoKTsgfQ0KDQppbmxpbmUgaW50OF90 DQpVbmljb2RlU3RyaW5nOjpjb21wYXJlQ29kZVBvaW50T3JkZXIoaW50MzJfdCBzdGFydCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nJiBzcmNU ZXh0KSBjb25zdA0KeyByZXR1cm4gZG9Db21wYXJlQ29kZVBvaW50T3JkZXIoc3RhcnQsIGxlbmd0 aCwgc3JjVGV4dCwgMCwgc3JjVGV4dC5mTGVuZ3RoKTsgfQ0KDQppbmxpbmUgaW50OF90DQpVbmlj b2RlU3RyaW5nOjpjb21wYXJlQ29kZVBvaW50T3JkZXIoY29uc3QgVUNoYXIgKnNyY0NoYXJzLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBj b25zdA0KeyByZXR1cm4gZG9Db21wYXJlQ29kZVBvaW50T3JkZXIoMCwgZkxlbmd0aCwgc3JjQ2hh cnMsIDAsIHNyY0xlbmd0aCk7IH0NCg0KaW5saW5lIGludDhfdA0KVW5pY29kZVN0cmluZzo6Y29t cGFyZUNvZGVQb2ludE9yZGVyKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyYgc3JjVGV4dCwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdA0KeyByZXR1cm4g ZG9Db21wYXJlQ29kZVBvaW50T3JkZXIoc3RhcnQsIGxlbmd0aCwgc3JjVGV4dCwgc3JjU3RhcnQs IHNyY0xlbmd0aCk7IH0NCg0KaW5saW5lIGludDhfdA0KVW5pY29kZVN0cmluZzo6Y29tcGFyZUNv ZGVQb2ludE9yZGVyKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50MzJfdCBsZW5ndGgsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgVUNoYXIgKnNyY0NoYXJzKSBjb25zdA0KeyByZXR1cm4gZG9Db21wYXJlQ29k ZVBvaW50T3JkZXIoc3RhcnQsIGxlbmd0aCwgc3JjQ2hhcnMsIDAsIGxlbmd0aCk7IH0NCg0KaW5s aW5lIGludDhfdA0KVW5pY29kZVN0cmluZzo6Y29tcGFyZUNvZGVQb2ludE9yZGVyKGludDMyX3Qg c3RhcnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5n dGgsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKnNy Y0NoYXJzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3Jj U3RhcnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzcmNM ZW5ndGgpIGNvbnN0DQp7IHJldHVybiBkb0NvbXBhcmVDb2RlUG9pbnRPcmRlcihzdGFydCwgbGVu Z3RoLCBzcmNDaGFycywgc3JjU3RhcnQsIHNyY0xlbmd0aCk7IH0NCg0KaW5saW5lIGludDhfdA0K VW5pY29kZVN0cmluZzo6Y29tcGFyZUNvZGVQb2ludE9yZGVyQmV0d2VlbihpbnQzMl90IHN0YXJ0 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGxp bWl0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBV bmljb2RlU3RyaW5nJiBzcmNUZXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQzMl90IHNyY0xpbWl0KSBjb25zdA0KeyByZXR1cm4gZG9Db21w YXJlQ29kZVBvaW50T3JkZXIoc3RhcnQsIGxpbWl0IC0gc3RhcnQsDQogICAgICAgICAgIHNyY1Rl eHQsIHNyY1N0YXJ0LCBzcmNMaW1pdCAtIHNyY1N0YXJ0KTsgfQ0KDQppbmxpbmUgaW50OF90DQpV bmljb2RlU3RyaW5nOjpkb0NvbXBhcmVDb2RlUG9pbnRPcmRlcihpbnQzMl90IHN0YXJ0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nJiBz cmNUZXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBz cmNTdGFydCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg c3JjTGVuZ3RoKSBjb25zdA0Kew0KICBjb25zdCBVQ2hhciAqc3JjQ2hhcnM7DQogIGlmKCFzcmNU ZXh0LmlzQm9ndXMoKSkgew0KICAgIHNyY1RleHQucGluSW5kaWNlcyhzcmNTdGFydCwgc3JjTGVu Z3RoKTsNCiAgICBzcmNDaGFycz1zcmNUZXh0LmdldEFycmF5U3RhcnQoKTsNCiAgfSBlbHNlIHsN CiAgICBzcmNDaGFycz0wOw0KICB9DQogIHJldHVybiBkb0NvbXBhcmVDb2RlUG9pbnRPcmRlcihz dGFydCwgbGVuZ3RoLCBzcmNDaGFycywgc3JjU3RhcnQsIHNyY0xlbmd0aCk7DQp9DQoNCmlubGlu ZSBpbnQ4X3QNClVuaWNvZGVTdHJpbmc6OmNhc2VDb21wYXJlKGNvbnN0IFVuaWNvZGVTdHJpbmcg JnRleHQsIHVpbnQzMl90IG9wdGlvbnMpIGNvbnN0IHsNCiAgcmV0dXJuIGRvQ2FzZUNvbXBhcmUo MCwgZkxlbmd0aCwgdGV4dCwgMCwgdGV4dC5mTGVuZ3RoLCBvcHRpb25zKTsNCn0NCg0KaW5saW5l IGludDhfdA0KVW5pY29kZVN0cmluZzo6Y2FzZUNvbXBhcmUoaW50MzJfdCBzdGFydCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyAmc3JjVGV4dCwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQzMl90IG9wdGlvbnMpIGNvbnN0IHsNCiAgcmV0dXJuIGRvQ2FzZUNvbXBh cmUoc3RhcnQsIGxlbmd0aCwgc3JjVGV4dCwgMCwgc3JjVGV4dC5mTGVuZ3RoLCBvcHRpb25zKTsN Cn0NCg0KaW5saW5lIGludDhfdA0KVW5pY29kZVN0cmluZzo6Y2FzZUNvbXBhcmUoY29uc3QgVUNo YXIgKnNyY0NoYXJzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5n dGgsDQogICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBvcHRpb25zKSBjb25zdCB7 DQogIHJldHVybiBkb0Nhc2VDb21wYXJlKDAsIGZMZW5ndGgsIHNyY0NoYXJzLCAwLCBzcmNMZW5n dGgsIG9wdGlvbnMpOw0KfQ0KDQppbmxpbmUgaW50OF90DQpVbmljb2RlU3RyaW5nOjpjYXNlQ29t cGFyZShpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBs ZW5ndGgsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nICZz cmNUZXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgdWludDMyX3Qgb3B0aW9ucykgY29uc3Qgew0KICByZXR1cm4gZG9DYXNl Q29tcGFyZShzdGFydCwgbGVuZ3RoLCBzcmNUZXh0LCBzcmNTdGFydCwgc3JjTGVuZ3RoLCBvcHRp b25zKTsNCn0NCg0KaW5saW5lIGludDhfdA0KVW5pY29kZVN0cmluZzo6Y2FzZUNvbXBhcmUoaW50 MzJfdCBzdGFydCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKnNyY0NoYXJzLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgb3B0aW9ucykgY29uc3Qgew0KICByZXR1cm4g ZG9DYXNlQ29tcGFyZShzdGFydCwgbGVuZ3RoLCBzcmNDaGFycywgMCwgbGVuZ3RoLCBvcHRpb25z KTsNCn0NCg0KaW5saW5lIGludDhfdA0KVW5pY29kZVN0cmluZzo6Y2FzZUNvbXBhcmUoaW50MzJf dCBzdGFydCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKnNyY0NoYXJzLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDMyX3Qgb3B0aW9ucykgY29uc3Qgew0KICByZXR1cm4gZG9DYXNlQ29tcGFyZShzdGFydCwgbGVu Z3RoLCBzcmNDaGFycywgc3JjU3RhcnQsIHNyY0xlbmd0aCwgb3B0aW9ucyk7DQp9DQoNCmlubGlu ZSBpbnQ4X3QNClVuaWNvZGVTdHJpbmc6OmNhc2VDb21wYXJlQmV0d2VlbihpbnQzMl90IHN0YXJ0 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGltaXQsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyAmc3JjVGV4 dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3JjTGltaXQsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgb3B0aW9ucykgY29uc3Qgew0K ICByZXR1cm4gZG9DYXNlQ29tcGFyZShzdGFydCwgbGltaXQgLSBzdGFydCwgc3JjVGV4dCwgc3Jj U3RhcnQsIHNyY0xpbWl0IC0gc3JjU3RhcnQsIG9wdGlvbnMpOw0KfQ0KDQppbmxpbmUgaW50OF90 DQpVbmljb2RlU3RyaW5nOjpkb0Nhc2VDb21wYXJlKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nICZzcmNUZXh0LA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQzMl90IHNyY0xlbmd0aCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy X3Qgb3B0aW9ucykgY29uc3QNCnsNCiAgY29uc3QgVUNoYXIgKnNyY0NoYXJzOw0KICBpZighc3Jj VGV4dC5pc0JvZ3VzKCkpIHsNCiAgICBzcmNUZXh0LnBpbkluZGljZXMoc3JjU3RhcnQsIHNyY0xl bmd0aCk7DQogICAgc3JjQ2hhcnM9c3JjVGV4dC5nZXRBcnJheVN0YXJ0KCk7DQogIH0gZWxzZSB7 DQogICAgc3JjQ2hhcnM9MDsNCiAgfQ0KICByZXR1cm4gZG9DYXNlQ29tcGFyZShzdGFydCwgbGVu Z3RoLCBzcmNDaGFycywgc3JjU3RhcnQsIHNyY0xlbmd0aCwgb3B0aW9ucyk7DQp9DQoNCmlubGlu ZSBpbnQzMl90DQpVbmljb2RlU3RyaW5nOjppbmRleE9mKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHRl eHQpIGNvbnN0DQp7IHJldHVybiBpbmRleE9mKHRleHQsIDAsIHRleHQuZkxlbmd0aCwgMCwgZkxl bmd0aCk7IH0NCg0KaW5saW5lIGludDMyX3QNClVuaWNvZGVTdHJpbmc6OmluZGV4T2YoY29uc3Qg VW5pY29kZVN0cmluZyYgdGV4dCwNCiAgICAgICAgICAgICAgIGludDMyX3Qgc3RhcnQpIGNvbnN0 DQp7IHJldHVybiBpbmRleE9mKHRleHQsIDAsIHRleHQuZkxlbmd0aCwgc3RhcnQsIGZMZW5ndGgg LSBzdGFydCk7IH0NCg0KaW5saW5lIGludDMyX3QNClVuaWNvZGVTdHJpbmc6OmluZGV4T2YoY29u c3QgVW5pY29kZVN0cmluZyYgdGV4dCwNCiAgICAgICAgICAgICAgIGludDMyX3Qgc3RhcnQsDQog ICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCkgY29uc3QNCnsgcmV0dXJuIGluZGV4T2YodGV4 dCwgMCwgdGV4dC5mTGVuZ3RoLCBzdGFydCwgbGVuZ3RoKTsgfQ0KDQppbmxpbmUgaW50MzJfdA0K VW5pY29kZVN0cmluZzo6aW5kZXhPZihjb25zdCBVbmljb2RlU3RyaW5nJiBzcmNUZXh0LA0KICAg ICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwNCiAgICAgICAgICAgICAgIGludDMyX3Qgc3Jj TGVuZ3RoLA0KICAgICAgICAgICAgICAgaW50MzJfdCBzdGFydCwNCiAgICAgICAgICAgICAgIGlu dDMyX3QgbGVuZ3RoKSBjb25zdA0Kew0KICBpZighc3JjVGV4dC5pc0JvZ3VzKCkpIHsNCiAgICBz cmNUZXh0LnBpbkluZGljZXMoc3JjU3RhcnQsIHNyY0xlbmd0aCk7DQogICAgaWYoc3JjTGVuZ3Ro ID4gMCkgew0KICAgICAgcmV0dXJuIGluZGV4T2Yoc3JjVGV4dC5nZXRBcnJheVN0YXJ0KCksIHNy Y1N0YXJ0LCBzcmNMZW5ndGgsIHN0YXJ0LCBsZW5ndGgpOw0KICAgIH0NCiAgfQ0KICByZXR1cm4g LTE7DQp9DQoNCmlubGluZSBpbnQzMl90DQpVbmljb2RlU3RyaW5nOjppbmRleE9mKGNvbnN0IFVD aGFyICpzcmNDaGFycywNCiAgICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoLA0KICAgICAg ICAgICAgICAgaW50MzJfdCBzdGFydCkgY29uc3QNCnsgcmV0dXJuIGluZGV4T2Yoc3JjQ2hhcnMs IDAsIHNyY0xlbmd0aCwgc3RhcnQsIGZMZW5ndGggLSBzdGFydCk7IH0NCg0KaW5saW5lIGludDMy X3QNClVuaWNvZGVTdHJpbmc6OmluZGV4T2YoY29uc3QgVUNoYXIgKnNyY0NoYXJzLA0KICAgICAg ICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgsDQogICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0 LA0KICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgpIGNvbnN0DQp7IHJldHVybiBpbmRleE9m KHNyY0NoYXJzLCAwLCBzcmNMZW5ndGgsIHN0YXJ0LCBsZW5ndGgpOyB9DQoNCmlubGluZSBpbnQz Ml90DQpVbmljb2RlU3RyaW5nOjppbmRleE9mKFVDaGFyIGMpIGNvbnN0DQp7IHJldHVybiBkb0lu ZGV4T2YoYywgMCwgZkxlbmd0aCk7IH0NCg0KaW5saW5lIGludDMyX3QNClVuaWNvZGVTdHJpbmc6 OmluZGV4T2YoVUNoYXIzMiBjKSBjb25zdCB7DQogIHJldHVybiBpbmRleE9mKGMsIDAsIGZMZW5n dGgpOw0KfQ0KDQppbmxpbmUgaW50MzJfdA0KVW5pY29kZVN0cmluZzo6aW5kZXhPZihVQ2hhciBj LA0KICAgICAgICAgICAgICAgaW50MzJfdCBzdGFydCkgY29uc3QNCnsgcmV0dXJuIGRvSW5kZXhP ZihjLCBzdGFydCwgZkxlbmd0aCAtIHN0YXJ0KTsgfQ0KDQppbmxpbmUgaW50MzJfdA0KVW5pY29k ZVN0cmluZzo6aW5kZXhPZihVQ2hhcjMyIGMsDQogICAgICAgICAgICAgICBpbnQzMl90IHN0YXJ0 KSBjb25zdCB7DQogIHJldHVybiBpbmRleE9mKGMsIHN0YXJ0LCBmTGVuZ3RoIC0gc3RhcnQpOw0K fQ0KDQppbmxpbmUgaW50MzJfdA0KVW5pY29kZVN0cmluZzo6aW5kZXhPZihVQ2hhciBjLA0KICAg ICAgICAgICAgICAgaW50MzJfdCBzdGFydCwNCiAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3Ro KSBjb25zdA0KeyByZXR1cm4gZG9JbmRleE9mKGMsIHN0YXJ0LCBsZW5ndGgpOyB9DQoNCmlubGlu ZSBpbnQzMl90DQpVbmljb2RlU3RyaW5nOjppbmRleE9mKFVDaGFyMzIgYywNCiAgICAgICAgICAg ICAgIGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCkgY29uc3Qg ew0KICBpZigodWludDMyX3QpYzwweGQ4MDApIHsNCiAgICByZXR1cm4gZG9JbmRleE9mKChVQ2hh ciljLCBzdGFydCwgbGVuZ3RoKTsNCiAgfSBlbHNlIHsNCiAgICByZXR1cm4gZG9JbmRleE9mKGMs IHN0YXJ0LCBsZW5ndGgpOw0KICB9DQp9DQoNCmlubGluZSBpbnQzMl90DQpVbmljb2RlU3RyaW5n OjpsYXN0SW5kZXhPZihjb25zdCBVbmljb2RlU3RyaW5nJiB0ZXh0KSBjb25zdA0KeyByZXR1cm4g bGFzdEluZGV4T2YodGV4dCwgMCwgdGV4dC5mTGVuZ3RoLCAwLCBmTGVuZ3RoKTsgfQ0KDQppbmxp bmUgaW50MzJfdA0KVW5pY29kZVN0cmluZzo6bGFzdEluZGV4T2YoY29uc3QgVW5pY29kZVN0cmlu ZyYgdGV4dCwNCiAgICAgICAgICAgICAgIGludDMyX3Qgc3RhcnQpIGNvbnN0DQp7IHJldHVybiBs YXN0SW5kZXhPZih0ZXh0LCAwLCB0ZXh0LmZMZW5ndGgsIHN0YXJ0LCBmTGVuZ3RoIC0gc3RhcnQp OyB9DQoNCmlubGluZSBpbnQzMl90DQpVbmljb2RlU3RyaW5nOjpsYXN0SW5kZXhPZihjb25zdCBV bmljb2RlU3RyaW5nJiB0ZXh0LA0KICAgICAgICAgICAgICAgaW50MzJfdCBzdGFydCwNCiAgICAg ICAgICAgICAgIGludDMyX3QgbGVuZ3RoKSBjb25zdA0KeyByZXR1cm4gbGFzdEluZGV4T2YodGV4 dCwgMCwgdGV4dC5mTGVuZ3RoLCBzdGFydCwgbGVuZ3RoKTsgfQ0KDQppbmxpbmUgaW50MzJfdA0K VW5pY29kZVN0cmluZzo6bGFzdEluZGV4T2YoY29uc3QgVW5pY29kZVN0cmluZyYgc3JjVGV4dCwN CiAgICAgICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsDQogICAgICAgICAgICAgICBpbnQzMl90 IHNyY0xlbmd0aCwNCiAgICAgICAgICAgICAgIGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAg ICBpbnQzMl90IGxlbmd0aCkgY29uc3QNCnsNCiAgaWYoIXNyY1RleHQuaXNCb2d1cygpKSB7DQog ICAgc3JjVGV4dC5waW5JbmRpY2VzKHNyY1N0YXJ0LCBzcmNMZW5ndGgpOw0KICAgIGlmKHNyY0xl bmd0aCA+IDApIHsNCiAgICAgIHJldHVybiBsYXN0SW5kZXhPZihzcmNUZXh0LmdldEFycmF5U3Rh cnQoKSwgc3JjU3RhcnQsIHNyY0xlbmd0aCwgc3RhcnQsIGxlbmd0aCk7DQogICAgfQ0KICB9DQog IHJldHVybiAtMTsNCn0NCg0KaW5saW5lIGludDMyX3QNClVuaWNvZGVTdHJpbmc6Omxhc3RJbmRl eE9mKGNvbnN0IFVDaGFyICpzcmNDaGFycywNCiAgICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVu Z3RoLA0KICAgICAgICAgICAgICAgaW50MzJfdCBzdGFydCkgY29uc3QNCnsgcmV0dXJuIGxhc3RJ bmRleE9mKHNyY0NoYXJzLCAwLCBzcmNMZW5ndGgsIHN0YXJ0LCBmTGVuZ3RoIC0gc3RhcnQpOyB9 DQoNCmlubGluZSBpbnQzMl90DQpVbmljb2RlU3RyaW5nOjpsYXN0SW5kZXhPZihjb25zdCBVQ2hh ciAqc3JjQ2hhcnMsDQogICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCwNCiAgICAgICAg ICAgICAgIGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCkgY29u c3QNCnsgcmV0dXJuIGxhc3RJbmRleE9mKHNyY0NoYXJzLCAwLCBzcmNMZW5ndGgsIHN0YXJ0LCBs ZW5ndGgpOyB9DQoNCmlubGluZSBpbnQzMl90DQpVbmljb2RlU3RyaW5nOjpsYXN0SW5kZXhPZihV Q2hhciBjKSBjb25zdA0KeyByZXR1cm4gZG9MYXN0SW5kZXhPZihjLCAwLCBmTGVuZ3RoKTsgfQ0K DQppbmxpbmUgaW50MzJfdA0KVW5pY29kZVN0cmluZzo6bGFzdEluZGV4T2YoVUNoYXIzMiBjKSBj b25zdCB7DQogIHJldHVybiBsYXN0SW5kZXhPZihjLCAwLCBmTGVuZ3RoKTsNCn0NCg0KaW5saW5l IGludDMyX3QNClVuaWNvZGVTdHJpbmc6Omxhc3RJbmRleE9mKFVDaGFyIGMsDQogICAgICAgICAg ICAgICBpbnQzMl90IHN0YXJ0KSBjb25zdA0KeyByZXR1cm4gZG9MYXN0SW5kZXhPZihjLCBzdGFy dCwgZkxlbmd0aCAtIHN0YXJ0KTsgfQ0KDQppbmxpbmUgaW50MzJfdA0KVW5pY29kZVN0cmluZzo6 bGFzdEluZGV4T2YoVUNoYXIzMiBjLA0KICAgICAgICAgICAgICAgaW50MzJfdCBzdGFydCkgY29u c3Qgew0KICByZXR1cm4gbGFzdEluZGV4T2YoYywgc3RhcnQsIGZMZW5ndGggLSBzdGFydCk7DQp9 DQoNCmlubGluZSBpbnQzMl90DQpVbmljb2RlU3RyaW5nOjpsYXN0SW5kZXhPZihVQ2hhciBjLA0K ICAgICAgICAgICAgICAgaW50MzJfdCBzdGFydCwNCiAgICAgICAgICAgICAgIGludDMyX3QgbGVu Z3RoKSBjb25zdA0KeyByZXR1cm4gZG9MYXN0SW5kZXhPZihjLCBzdGFydCwgbGVuZ3RoKTsgfQ0K DQppbmxpbmUgaW50MzJfdA0KVW5pY29kZVN0cmluZzo6bGFzdEluZGV4T2YoVUNoYXIzMiBjLA0K ICAgICAgICAgICAgICAgaW50MzJfdCBzdGFydCwNCiAgICAgICAgICAgICAgIGludDMyX3QgbGVu Z3RoKSBjb25zdCB7DQogIGlmKCh1aW50MzJfdCljPDB4ZDgwMCkgew0KICAgIHJldHVybiBkb0xh c3RJbmRleE9mKChVQ2hhciljLCBzdGFydCwgbGVuZ3RoKTsNCiAgfSBlbHNlIHsNCiAgICByZXR1 cm4gZG9MYXN0SW5kZXhPZihjLCBzdGFydCwgbGVuZ3RoKTsNCiAgfQ0KfQ0KDQppbmxpbmUgVUJv b2wNClVuaWNvZGVTdHJpbmc6OnN0YXJ0c1dpdGgoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCkg Y29uc3QNCnsgcmV0dXJuIGNvbXBhcmUoMCwgdGV4dC5mTGVuZ3RoLCB0ZXh0LCAwLCB0ZXh0LmZM ZW5ndGgpID09IDA7IH0NCg0KaW5saW5lIFVCb29sDQpVbmljb2RlU3RyaW5nOjpzdGFydHNXaXRo KGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQsDQogICAgICAgICAgICAgIGludDMyX3Qgc3Jj U3RhcnQsDQogICAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdA0KeyByZXR1cm4g ZG9Db21wYXJlKDAsIHNyY0xlbmd0aCwgc3JjVGV4dCwgc3JjU3RhcnQsIHNyY0xlbmd0aCkgPT0g MDsgfQ0KDQppbmxpbmUgVUJvb2wNClVuaWNvZGVTdHJpbmc6OnN0YXJ0c1dpdGgoY29uc3QgVUNo YXIgKnNyY0NoYXJzLA0KICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCkgY29uc3QNCnsg cmV0dXJuIGRvQ29tcGFyZSgwLCBzcmNMZW5ndGgsIHNyY0NoYXJzLCAwLCBzcmNMZW5ndGgpID09 IDA7IH0NCg0KaW5saW5lIFVCb29sDQpVbmljb2RlU3RyaW5nOjpzdGFydHNXaXRoKGNvbnN0IFVD aGFyICpzcmNDaGFycywNCiAgICAgICAgICAgICAgaW50MzJfdCBzcmNTdGFydCwNCiAgICAgICAg ICAgICAgaW50MzJfdCBzcmNMZW5ndGgpIGNvbnN0DQp7IHJldHVybiBkb0NvbXBhcmUoMCwgc3Jj TGVuZ3RoLCBzcmNDaGFycywgc3JjU3RhcnQsIHNyY0xlbmd0aCkgPT0gMDt9DQoNCmlubGluZSBV Qm9vbA0KVW5pY29kZVN0cmluZzo6ZW5kc1dpdGgoY29uc3QgVW5pY29kZVN0cmluZyYgdGV4dCkg Y29uc3QNCnsgcmV0dXJuIGRvQ29tcGFyZShmTGVuZ3RoIC0gdGV4dC5mTGVuZ3RoLCB0ZXh0LmZM ZW5ndGgsDQogICAgICAgICAgIHRleHQsIDAsIHRleHQuZkxlbmd0aCkgPT0gMDsgfQ0KDQppbmxp bmUgVUJvb2wNClVuaWNvZGVTdHJpbmc6OmVuZHNXaXRoKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNy Y1RleHQsDQogICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LA0KICAgICAgICAgICAgaW50MzJf dCBzcmNMZW5ndGgpIGNvbnN0DQp7IHJldHVybiBkb0NvbXBhcmUoZkxlbmd0aCAtIHNyY0xlbmd0 aCwgc3JjTGVuZ3RoLA0KICAgICAgICAgICBzcmNUZXh0LCBzcmNTdGFydCwgc3JjTGVuZ3RoKSA9 PSAwOyB9DQoNCmlubGluZSBVQm9vbA0KVW5pY29kZVN0cmluZzo6ZW5kc1dpdGgoY29uc3QgVUNo YXIgKnNyY0NoYXJzLA0KICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgpIGNvbnN0DQp7IHJl dHVybiBkb0NvbXBhcmUoZkxlbmd0aCAtIHNyY0xlbmd0aCwgc3JjTGVuZ3RoLA0KICAgICAgICAg ICBzcmNDaGFycywgMCwgc3JjTGVuZ3RoKSA9PSAwOyB9DQoNCmlubGluZSBVQm9vbA0KVW5pY29k ZVN0cmluZzo6ZW5kc1dpdGgoY29uc3QgVUNoYXIgKnNyY0NoYXJzLA0KICAgICAgICAgICAgaW50 MzJfdCBzcmNTdGFydCwNCiAgICAgICAgICAgIGludDMyX3Qgc3JjTGVuZ3RoKSBjb25zdA0KeyBy ZXR1cm4gZG9Db21wYXJlKGZMZW5ndGggLSBzcmNMZW5ndGgsIHNyY0xlbmd0aCwNCiAgICAgICAg ICAgc3JjQ2hhcnMsIHNyY1N0YXJ0LCBzcmNMZW5ndGgpID09IDA7fQ0KDQoNCg0KaW5saW5lIFVu aWNvZGVTdHJpbmcmDQpVbmljb2RlU3RyaW5nOjpyZXBsYWNlKGludDMyX3Qgc3RhcnQsDQogICAg ICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwNCiAgICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVT dHJpbmcmIHNyY1RleHQpDQp7IHJldHVybiBkb1JlcGxhY2Uoc3RhcnQsIGxlbmd0aCwgc3JjVGV4 dCwgMCwgc3JjVGV4dC5mTGVuZ3RoKTsgfQ0KDQppbmxpbmUgVW5pY29kZVN0cmluZyYNClVuaWNv ZGVTdHJpbmc6OnJlcGxhY2UoaW50MzJfdCBzdGFydCwNCiAgICAgICAgICAgICAgIGludDMyX3Qg bGVuZ3RoLA0KICAgICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyYgc3JjVGV4dCwNCiAg ICAgICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsDQogICAgICAgICAgICAgICBpbnQzMl90IHNy Y0xlbmd0aCkNCnsgcmV0dXJuIGRvUmVwbGFjZShzdGFydCwgbGVuZ3RoLCBzcmNUZXh0LCBzcmNT dGFydCwgc3JjTGVuZ3RoKTsgfQ0KDQppbmxpbmUgVW5pY29kZVN0cmluZyYNClVuaWNvZGVTdHJp bmc6OnJlcGxhY2UoaW50MzJfdCBzdGFydCwNCiAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3Ro LA0KICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKnNyY0NoYXJzLA0KICAgICAgICAgICAgICAg aW50MzJfdCBzcmNMZW5ndGgpDQp7IHJldHVybiBkb1JlcGxhY2Uoc3RhcnQsIGxlbmd0aCwgc3Jj Q2hhcnMsIDAsIHNyY0xlbmd0aCk7IH0NCg0KaW5saW5lIFVuaWNvZGVTdHJpbmcmDQpVbmljb2Rl U3RyaW5nOjpyZXBsYWNlKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgICBpbnQzMl90IGxl bmd0aCwNCiAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICpzcmNDaGFycywNCiAgICAgICAgICAg ICAgIGludDMyX3Qgc3JjU3RhcnQsDQogICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0aCkN CnsgcmV0dXJuIGRvUmVwbGFjZShzdGFydCwgbGVuZ3RoLCBzcmNDaGFycywgc3JjU3RhcnQsIHNy Y0xlbmd0aCk7IH0NCg0KaW5saW5lIFVuaWNvZGVTdHJpbmcmDQpVbmljb2RlU3RyaW5nOjpyZXBs YWNlKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwNCiAgICAg ICAgICAgICAgIFVDaGFyIHNyY0NoYXIpDQp7IHJldHVybiBkb1JlcGxhY2Uoc3RhcnQsIGxlbmd0 aCwgJnNyY0NoYXIsIDAsIDEpOyB9DQoNCmlubGluZSBVbmljb2RlU3RyaW5nJg0KVW5pY29kZVN0 cmluZzo6cmVwbGFjZShpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAgICAgaW50MzJfdCBsZW5n dGgsDQogICAgICAgICAgICAgICBVQ2hhcjMyIHNyY0NoYXIpIHsNCiAgVUNoYXIgYnVmZmVyWzJd Ow0KICBpbnQzMl90IGNvdW50ID0gMDsNCiAgeyBpZigodWludDMyX3QpKHNyY0NoYXIpPD0weGZm ZmYpIHsgKGJ1ZmZlcilbKGNvdW50KSsrXT0odWludDE2X3QpKHNyY0NoYXIpOyB9IGVsc2UgeyAo YnVmZmVyKVsoY291bnQpKytdPSh1aW50MTZfdCkoKChzcmNDaGFyKT4+MTApKzB4ZDdjMCk7IChi dWZmZXIpWyhjb3VudCkrK109KHVpbnQxNl90KSgoKHNyY0NoYXIpJjB4M2ZmKXwweGRjMDApOyB9 IH07DQogIHJldHVybiBkb1JlcGxhY2Uoc3RhcnQsIGxlbmd0aCwgYnVmZmVyLCAwLCBjb3VudCk7 DQp9DQoNCmlubGluZSBVbmljb2RlU3RyaW5nJg0KVW5pY29kZVN0cmluZzo6cmVwbGFjZUJldHdl ZW4oaW50MzJfdCBzdGFydCwNCiAgICAgICAgICAgICAgICAgIGludDMyX3QgbGltaXQsDQogICAg ICAgICAgICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nJiBzcmNUZXh0KQ0KeyByZXR1cm4gZG9S ZXBsYWNlKHN0YXJ0LCBsaW1pdCAtIHN0YXJ0LCBzcmNUZXh0LCAwLCBzcmNUZXh0LmZMZW5ndGgp OyB9DQoNCmlubGluZSBVbmljb2RlU3RyaW5nJg0KVW5pY29kZVN0cmluZzo6cmVwbGFjZUJldHdl ZW4oaW50MzJfdCBzdGFydCwNCiAgICAgICAgICAgICAgICAgIGludDMyX3QgbGltaXQsDQogICAg ICAgICAgICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nJiBzcmNUZXh0LA0KICAgICAgICAgICAg ICAgICAgaW50MzJfdCBzcmNTdGFydCwNCiAgICAgICAgICAgICAgICAgIGludDMyX3Qgc3JjTGlt aXQpDQp7IHJldHVybiBkb1JlcGxhY2Uoc3RhcnQsIGxpbWl0IC0gc3RhcnQsIHNyY1RleHQsIHNy Y1N0YXJ0LCBzcmNMaW1pdCAtIHNyY1N0YXJ0KTsgfQ0KDQppbmxpbmUgVW5pY29kZVN0cmluZyYN ClVuaWNvZGVTdHJpbmc6OmZpbmRBbmRSZXBsYWNlKGNvbnN0IFVuaWNvZGVTdHJpbmcmIG9sZFRl eHQsDQogICAgICAgICAgICAgICAgICBjb25zdCBVbmljb2RlU3RyaW5nJiBuZXdUZXh0KQ0KeyBy ZXR1cm4gZmluZEFuZFJlcGxhY2UoMCwgZkxlbmd0aCwgb2xkVGV4dCwgMCwgb2xkVGV4dC5mTGVu Z3RoLA0KICAgICAgICAgICAgbmV3VGV4dCwgMCwgbmV3VGV4dC5mTGVuZ3RoKTsgfQ0KDQppbmxp bmUgVW5pY29kZVN0cmluZyYNClVuaWNvZGVTdHJpbmc6OmZpbmRBbmRSZXBsYWNlKGludDMyX3Qg c3RhcnQsDQogICAgICAgICAgICAgICAgICBpbnQzMl90IGxlbmd0aCwNCiAgICAgICAgICAgICAg ICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIG9sZFRleHQsDQogICAgICAgICAgICAgICAgICBjb25z dCBVbmljb2RlU3RyaW5nJiBuZXdUZXh0KQ0KeyByZXR1cm4gZmluZEFuZFJlcGxhY2Uoc3RhcnQs IGxlbmd0aCwgb2xkVGV4dCwgMCwgb2xkVGV4dC5mTGVuZ3RoLA0KICAgICAgICAgICAgbmV3VGV4 dCwgMCwgbmV3VGV4dC5mTGVuZ3RoKTsgfQ0KDQoNCg0KDQppbmxpbmUgdm9pZA0KVW5pY29kZVN0 cmluZzo6ZG9FeHRyYWN0KGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgaW50MzJfdCBsZW5n dGgsDQogICAgICAgICAgICAgVW5pY29kZVN0cmluZyYgdGFyZ2V0KSBjb25zdA0KeyB0YXJnZXQu cmVwbGFjZSgwLCB0YXJnZXQuZkxlbmd0aCwgKnRoaXMsIHN0YXJ0LCBsZW5ndGgpOyB9DQoNCmlu bGluZSB2b2lkDQpVbmljb2RlU3RyaW5nOjpleHRyYWN0KGludDMyX3Qgc3RhcnQsDQogICAgICAg ICAgICAgICBpbnQzMl90IGxlbmd0aCwNCiAgICAgICAgICAgICAgIFVDaGFyICp0YXJnZXQsDQog ICAgICAgICAgICAgICBpbnQzMl90IHRhcmdldFN0YXJ0KSBjb25zdA0KeyBkb0V4dHJhY3Qoc3Rh cnQsIGxlbmd0aCwgdGFyZ2V0LCB0YXJnZXRTdGFydCk7IH0NCg0KaW5saW5lIHZvaWQNClVuaWNv ZGVTdHJpbmc6OmV4dHJhY3QoaW50MzJfdCBzdGFydCwNCiAgICAgICAgICAgICAgIGludDMyX3Qg bGVuZ3RoLA0KICAgICAgICAgICAgICAgVW5pY29kZVN0cmluZyYgdGFyZ2V0KSBjb25zdA0KeyBk b0V4dHJhY3Qoc3RhcnQsIGxlbmd0aCwgdGFyZ2V0KTsgfQ0KDQppbmxpbmUgaW50MzJfdA0KVW5p Y29kZVN0cmluZzo6ZXh0cmFjdChpbnQzMl90IHN0YXJ0LA0KICAgICAgICAgICAgICAgaW50MzJf dCBsZW5ndGgsDQogICAgICAgICAgICAgICBjaGFyICpkc3QsDQogICAgICAgICAgICAgICBjb25z dCBjaGFyICpjb2RlcGFnZSkgY29uc3QNCg0Kew0KDQogIHJldHVybiBleHRyYWN0KHN0YXJ0LCBs ZW5ndGgsIGRzdCwgZHN0IT0wID8gMHhmZmZmZmZmZiA6IDAsIGNvZGVwYWdlKTsNCn0NCg0KaW5s aW5lIHZvaWQNClVuaWNvZGVTdHJpbmc6OmV4dHJhY3RCZXR3ZWVuKGludDMyX3Qgc3RhcnQsDQog ICAgICAgICAgICAgICAgICBpbnQzMl90IGxpbWl0LA0KICAgICAgICAgICAgICAgICAgVUNoYXIg KmRzdCwNCiAgICAgICAgICAgICAgICAgIGludDMyX3QgZHN0U3RhcnQpIGNvbnN0DQp7IGRvRXh0 cmFjdChzdGFydCwgbGltaXQgLSBzdGFydCwgZHN0LCBkc3RTdGFydCk7IH0NCg0KaW5saW5lIFVD aGFyDQpVbmljb2RlU3RyaW5nOjpkb0NoYXJBdChpbnQzMl90IG9mZnNldCkgY29uc3QNCnsNCiAg aWYoKHVpbnQzMl90KW9mZnNldCA8ICh1aW50MzJfdClmTGVuZ3RoKSB7DQogICAgcmV0dXJuIGZB cnJheVtvZmZzZXRdOw0KICB9IGVsc2Ugew0KICAgIHJldHVybiBrSW52YWxpZFVDaGFyOw0KICB9 DQp9DQoNCmlubGluZSBVQ2hhcg0KVW5pY29kZVN0cmluZzo6Y2hhckF0KGludDMyX3Qgb2Zmc2V0 KSBjb25zdA0KeyByZXR1cm4gZG9DaGFyQXQob2Zmc2V0KTsgfQ0KDQppbmxpbmUgVUNoYXINClVu aWNvZGVTdHJpbmc6Om9wZXJhdG9yW10gKGludDMyX3Qgb2Zmc2V0KSBjb25zdA0KeyByZXR1cm4g ZG9DaGFyQXQob2Zmc2V0KTsgfQ0KDQppbmxpbmUgVUNoYXIzMg0KVW5pY29kZVN0cmluZzo6Y2hh cjMyQXQoaW50MzJfdCBvZmZzZXQpIGNvbnN0DQp7DQogIGlmKCh1aW50MzJfdClvZmZzZXQgPCAo dWludDMyX3QpZkxlbmd0aCkgew0KICAgIFVDaGFyMzIgYzsNCiAgICB7IChjKT0oZkFycmF5KVtv ZmZzZXRdOyBpZigoKChjKSYweGZmZmZmODAwKT09MHhkODAwKSkgeyB1aW50MTZfdCBfX2MyOyBp ZigoKChjKSYweDQwMCk9PTApKSB7IGlmKChvZmZzZXQpKzE8KGZMZW5ndGgpICYmICgoKF9fYzI9 KGZBcnJheSlbKG9mZnNldCkrMV0pJjB4ZmZmZmZjMDApPT0weGRjMDApKSB7IChjKT0oKCgoYykp PDwxMFVMKSsoX19jMiktKCgweGQ4MDA8PDEwVUwpKzB4ZGMwMC0weDEwMDAwKSk7IH0gZWxzZSBp ZigwKSB7IChjKT0weGZmZmY7IH0gfSBlbHNlIHsgaWYoKG9mZnNldCktMT49KDApICYmICgoKF9f YzI9KGZBcnJheSlbKG9mZnNldCktMV0pJjB4ZmZmZmZjMDApPT0weGQ4MDApKSB7IChjKT0oKChf X2MyKTw8MTBVTCkrKChjKSktKCgweGQ4MDA8PDEwVUwpKzB4ZGMwMC0weDEwMDAwKSk7IH0gZWxz ZSBpZigwKSB7IChjKT0weGZmZmY7IH0gfSB9IGVsc2UgaWYoKDApICYmICEoKHVpbnQzMl90KShj KTwweGQ4MDAgfHwgKCh1aW50MzJfdCkoYyk+MHhkZmZmICYmICh1aW50MzJfdCkoYyk8PTB4MTBm ZmZmICYmICEoKGMpPj0weGZkZDAgJiYgKCh1aW50MzJfdCkoYyk8PTB4ZmRlZiB8fCAoKGMpJjB4 ZmZmZSk9PTB4ZmZmZSkgJiYgKHVpbnQzMl90KShjKTw9MHgxMGZmZmYpKSkpIHsgKGMpPTB4ZmZm ZjsgfSB9Ow0KICAgIHJldHVybiBjOw0KICB9IGVsc2Ugew0KICAgIHJldHVybiBrSW52YWxpZFVD aGFyOw0KICB9DQp9DQoNCmlubGluZSBpbnQzMl90DQpVbmljb2RlU3RyaW5nOjpnZXRDaGFyMzJT dGFydChpbnQzMl90IG9mZnNldCkgY29uc3Qgew0KICBpZigodWludDMyX3Qpb2Zmc2V0IDwgKHVp bnQzMl90KWZMZW5ndGgpIHsNCiAgICB7IGlmKCgoKChmQXJyYXkpW29mZnNldF0pJjB4ZmZmZmZj MDApPT0weGRjMDApICYmIChvZmZzZXQpPigwKSAmJiAoKCgoZkFycmF5KVsob2Zmc2V0KS0xXSkm MHhmZmZmZmMwMCk9PTB4ZDgwMCkpIHsgLS0ob2Zmc2V0KTsgfSB9Ow0KICAgIHJldHVybiBvZmZz ZXQ7DQogIH0gZWxzZSB7DQogICAgcmV0dXJuIDA7DQogIH0NCn0NCg0KaW5saW5lIGludDMyX3QN ClVuaWNvZGVTdHJpbmc6OmdldENoYXIzMkxpbWl0KGludDMyX3Qgb2Zmc2V0KSBjb25zdCB7DQog IGlmKCh1aW50MzJfdClvZmZzZXQgPCAodWludDMyX3QpZkxlbmd0aCkgew0KICAgIHsgaWYoKDAp PChvZmZzZXQpICYmIChvZmZzZXQpPChmTGVuZ3RoKSAmJiAoKCgoZkFycmF5KVsob2Zmc2V0KS0x XSkmMHhmZmZmZmMwMCk9PTB4ZDgwMCkgJiYgKCgoKGZBcnJheSlbb2Zmc2V0XSkmMHhmZmZmZmMw MCk9PTB4ZGMwMCkpIHsgKysob2Zmc2V0KTsgfSB9Ow0KICAgIHJldHVybiBvZmZzZXQ7DQogIH0g ZWxzZSB7DQogICAgcmV0dXJuIGZMZW5ndGg7DQogIH0NCn0NCg0KaW5saW5lIGludDMyX3QNClVu aWNvZGVTdHJpbmc6OmdldENoYXJTdGFydChpbnQzMl90IG9mZnNldCkgY29uc3Qgew0KICByZXR1 cm4gZ2V0Q2hhcjMyU3RhcnQob2Zmc2V0KTsNCn0NCg0KaW5saW5lIGludDMyX3QNClVuaWNvZGVT dHJpbmc6OmdldENoYXJMaW1pdChpbnQzMl90IG9mZnNldCkgY29uc3Qgew0KICByZXR1cm4gZ2V0 Q2hhcjMyTGltaXQob2Zmc2V0KTsNCn0NCg0KaW5saW5lIFVCb29sDQpVbmljb2RlU3RyaW5nOjpp c0VtcHR5KCkgY29uc3Qgew0KICByZXR1cm4gZkxlbmd0aCA9PSAwOw0KfQ0KDQppbmxpbmUgVUJv b2wNClVuaWNvZGVTdHJpbmc6OmVtcHR5KCkgY29uc3Qgew0KICByZXR1cm4gaXNFbXB0eSgpOw0K fQ0KDQoNCg0KDQppbmxpbmUgaW50MzJfdA0KVW5pY29kZVN0cmluZzo6bGVuZ3RoKCkgY29uc3QN CnsgcmV0dXJuIGZMZW5ndGg7IH0NCg0KaW5saW5lIGludDMyX3QNClVuaWNvZGVTdHJpbmc6Omdl dENhcGFjaXR5KCkgY29uc3QNCnsgcmV0dXJuIGZDYXBhY2l0eTsgfQ0KDQppbmxpbmUgaW50MzJf dA0KVW5pY29kZVN0cmluZzo6aGFzaENvZGUoKSBjb25zdA0KeyByZXR1cm4gZG9IYXNoQ29kZSgp OyB9DQoNCmlubGluZSBVQm9vbA0KVW5pY29kZVN0cmluZzo6aXNCb2d1cygpIGNvbnN0DQp7IHJl dHVybiAoVUJvb2wpKGZGbGFncyAmIGtJc0JvZ3VzKTsgfQ0KDQppbmxpbmUgY29uc3QgVUNoYXIg Kg0KVW5pY29kZVN0cmluZzo6Z2V0QnVmZmVyKCkgY29uc3Qgew0KICBpZighKGZGbGFncyYoa0lz Qm9ndXN8a09wZW5HZXRCdWZmZXIpKSkgew0KICAgIHJldHVybiBmQXJyYXk7DQogIH0gZWxzZSB7 DQogICAgcmV0dXJuIDA7DQogIH0NCn0NCg0KDQoNCg0KaW5saW5lIGNvbnN0IFVDaGFyICoNClVu aWNvZGVTdHJpbmc6OmdldFRlcm1pbmF0ZWRCdWZmZXIoKSB7DQogIGlmKGZGbGFncyYoa0lzQm9n dXN8a09wZW5HZXRCdWZmZXIpKSB7DQogICAgcmV0dXJuIDA7DQogIH0gZWxzZSBpZihmTGVuZ3Ro PGZDYXBhY2l0eSAmJiBmQXJyYXlbZkxlbmd0aF09PTApIHsNCiAgICByZXR1cm4gZkFycmF5Ow0K ICB9IGVsc2UgaWYoY2xvbmVBcnJheUlmTmVlZGVkKGZMZW5ndGgrMSkpIHsNCiAgICBmQXJyYXlb Zkxlbmd0aF09MDsNCiAgICByZXR1cm4gZkFycmF5Ow0KICB9IGVsc2Ugew0KICAgIHJldHVybiAw Ow0KICB9DQp9DQoNCmlubGluZSBVbmljb2RlU3RyaW5nJg0KVW5pY29kZVN0cmluZzo6b3BlcmF0 b3I9IChVQ2hhciBjaCkNCnsgcmV0dXJuIGRvUmVwbGFjZSgwLCBmTGVuZ3RoLCAmY2gsIDAsIDEp OyB9DQoNCmlubGluZSBVbmljb2RlU3RyaW5nJg0KVW5pY29kZVN0cmluZzo6b3BlcmF0b3I9IChV Q2hhcjMyIGNoKQ0KeyByZXR1cm4gcmVwbGFjZSgwLCBmTGVuZ3RoLCBjaCk7IH0NCg0KaW5saW5l IFVuaWNvZGVTdHJpbmcmDQpVbmljb2RlU3RyaW5nOjpzZXRUbyhjb25zdCBVbmljb2RlU3RyaW5n JiBzcmNUZXh0LA0KICAgICAgICAgICAgIGludDMyX3Qgc3JjU3RhcnQsDQogICAgICAgICAgICAg aW50MzJfdCBzcmNMZW5ndGgpDQp7IHJldHVybiBkb1JlcGxhY2UoMCwgZkxlbmd0aCwgc3JjVGV4 dCwgc3JjU3RhcnQsIHNyY0xlbmd0aCk7IH0NCg0KaW5saW5lIFVuaWNvZGVTdHJpbmcmDQpVbmlj b2RlU3RyaW5nOjpzZXRUbyhjb25zdCBVbmljb2RlU3RyaW5nJiBzcmNUZXh0LA0KICAgICAgICAg ICAgIGludDMyX3Qgc3JjU3RhcnQpDQp7IHJldHVybiBkb1JlcGxhY2UoMCwgZkxlbmd0aCwgc3Jj VGV4dCwgc3JjU3RhcnQsIHNyY1RleHQuZkxlbmd0aCAtIHNyY1N0YXJ0KTsgfQ0KDQppbmxpbmUg VW5pY29kZVN0cmluZyYNClVuaWNvZGVTdHJpbmc6OnNldFRvKGNvbnN0IFVuaWNvZGVTdHJpbmcm IHNyY1RleHQpDQp7IHJldHVybiBkb1JlcGxhY2UoMCwgZkxlbmd0aCwgc3JjVGV4dCwgMCwgc3Jj VGV4dC5mTGVuZ3RoKTsgfQ0KDQppbmxpbmUgVW5pY29kZVN0cmluZyYNClVuaWNvZGVTdHJpbmc6 OnNldFRvKGNvbnN0IFVDaGFyICpzcmNDaGFycywNCiAgICAgICAgICAgICBpbnQzMl90IHNyY0xl bmd0aCkNCnsgcmV0dXJuIGRvUmVwbGFjZSgwLCBmTGVuZ3RoLCBzcmNDaGFycywgMCwgc3JjTGVu Z3RoKTsgfQ0KDQppbmxpbmUgVW5pY29kZVN0cmluZyYNClVuaWNvZGVTdHJpbmc6OnNldFRvKFVD aGFyIHNyY0NoYXIpDQp7IHJldHVybiBkb1JlcGxhY2UoMCwgZkxlbmd0aCwgJnNyY0NoYXIsIDAs IDEpOyB9DQoNCmlubGluZSBVbmljb2RlU3RyaW5nJg0KVW5pY29kZVN0cmluZzo6c2V0VG8oVUNo YXIzMiBzcmNDaGFyKQ0KeyByZXR1cm4gcmVwbGFjZSgwLCBmTGVuZ3RoLCBzcmNDaGFyKTsgfQ0K DQppbmxpbmUgVW5pY29kZVN0cmluZyYNClVuaWNvZGVTdHJpbmc6Om9wZXJhdG9yKz0gKFVDaGFy IGNoKQ0KeyByZXR1cm4gZG9SZXBsYWNlKGZMZW5ndGgsIDAsICZjaCwgMCwgMSk7IH0NCg0KaW5s aW5lIFVuaWNvZGVTdHJpbmcmDQpVbmljb2RlU3RyaW5nOjpvcGVyYXRvcis9IChVQ2hhcjMyIGNo KSB7DQogIFVDaGFyIGJ1ZmZlclsyXTsNCiAgaW50MzJfdCBsZW5ndGggPSAwOw0KICB7IGlmKCh1 aW50MzJfdCkoY2gpPD0weGZmZmYpIHsgKGJ1ZmZlcilbKGxlbmd0aCkrK109KHVpbnQxNl90KShj aCk7IH0gZWxzZSB7IChidWZmZXIpWyhsZW5ndGgpKytdPSh1aW50MTZfdCkoKChjaCk+PjEwKSsw eGQ3YzApOyAoYnVmZmVyKVsobGVuZ3RoKSsrXT0odWludDE2X3QpKCgoY2gpJjB4M2ZmKXwweGRj MDApOyB9IH07DQogIHJldHVybiBkb1JlcGxhY2UoZkxlbmd0aCwgMCwgYnVmZmVyLCAwLCBsZW5n dGgpOw0KfQ0KDQppbmxpbmUgVW5pY29kZVN0cmluZyYNClVuaWNvZGVTdHJpbmc6Om9wZXJhdG9y Kz0gKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQpDQp7IHJldHVybiBkb1JlcGxhY2UoZkxl bmd0aCwgMCwgc3JjVGV4dCwgMCwgc3JjVGV4dC5mTGVuZ3RoKTsgfQ0KDQppbmxpbmUgVW5pY29k ZVN0cmluZyYNClVuaWNvZGVTdHJpbmc6OmFwcGVuZChjb25zdCBVbmljb2RlU3RyaW5nJiBzcmNU ZXh0LA0KICAgICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LA0KICAgICAgICAgICAgICBpbnQz Ml90IHNyY0xlbmd0aCkNCnsgcmV0dXJuIGRvUmVwbGFjZShmTGVuZ3RoLCAwLCBzcmNUZXh0LCBz cmNTdGFydCwgc3JjTGVuZ3RoKTsgfQ0KDQppbmxpbmUgVW5pY29kZVN0cmluZyYNClVuaWNvZGVT dHJpbmc6OmFwcGVuZChjb25zdCBVbmljb2RlU3RyaW5nJiBzcmNUZXh0KQ0KeyByZXR1cm4gZG9S ZXBsYWNlKGZMZW5ndGgsIDAsIHNyY1RleHQsIDAsIHNyY1RleHQuZkxlbmd0aCk7IH0NCg0KaW5s aW5lIFVuaWNvZGVTdHJpbmcmDQpVbmljb2RlU3RyaW5nOjphcHBlbmQoY29uc3QgVUNoYXIgKnNy Y0NoYXJzLA0KICAgICAgICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LA0KICAgICAgICAgICAgICBp bnQzMl90IHNyY0xlbmd0aCkNCnsgcmV0dXJuIGRvUmVwbGFjZShmTGVuZ3RoLCAwLCBzcmNDaGFy cywgc3JjU3RhcnQsIHNyY0xlbmd0aCk7IH0NCg0KaW5saW5lIFVuaWNvZGVTdHJpbmcmDQpVbmlj b2RlU3RyaW5nOjphcHBlbmQoY29uc3QgVUNoYXIgKnNyY0NoYXJzLA0KICAgICAgICAgICAgICBp bnQzMl90IHNyY0xlbmd0aCkNCnsgcmV0dXJuIGRvUmVwbGFjZShmTGVuZ3RoLCAwLCBzcmNDaGFy cywgMCwgc3JjTGVuZ3RoKTsgfQ0KDQppbmxpbmUgVW5pY29kZVN0cmluZyYNClVuaWNvZGVTdHJp bmc6OmFwcGVuZChVQ2hhciBzcmNDaGFyKQ0KeyByZXR1cm4gZG9SZXBsYWNlKGZMZW5ndGgsIDAs ICZzcmNDaGFyLCAwLCAxKTsgfQ0KDQppbmxpbmUgVW5pY29kZVN0cmluZyYNClVuaWNvZGVTdHJp bmc6OmFwcGVuZChVQ2hhcjMyIHNyY0NoYXIpIHsNCiAgVUNoYXIgYnVmZmVyWzJdOw0KICBpbnQz Ml90IGxlbmd0aCA9IDA7DQogIHsgaWYoKHVpbnQzMl90KShzcmNDaGFyKTw9MHhmZmZmKSB7IChi dWZmZXIpWyhsZW5ndGgpKytdPSh1aW50MTZfdCkoc3JjQ2hhcik7IH0gZWxzZSB7IChidWZmZXIp WyhsZW5ndGgpKytdPSh1aW50MTZfdCkoKChzcmNDaGFyKT4+MTApKzB4ZDdjMCk7IChidWZmZXIp WyhsZW5ndGgpKytdPSh1aW50MTZfdCkoKChzcmNDaGFyKSYweDNmZil8MHhkYzAwKTsgfSB9Ow0K ICByZXR1cm4gZG9SZXBsYWNlKGZMZW5ndGgsIDAsIGJ1ZmZlciwgMCwgbGVuZ3RoKTsNCn0NCg0K aW5saW5lIFVuaWNvZGVTdHJpbmcmDQpVbmljb2RlU3RyaW5nOjppbnNlcnQoaW50MzJfdCBzdGFy dCwNCiAgICAgICAgICAgICAgY29uc3QgVW5pY29kZVN0cmluZyYgc3JjVGV4dCwNCiAgICAgICAg ICAgICAgaW50MzJfdCBzcmNTdGFydCwNCiAgICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgp DQp7IHJldHVybiBkb1JlcGxhY2Uoc3RhcnQsIDAsIHNyY1RleHQsIHNyY1N0YXJ0LCBzcmNMZW5n dGgpOyB9DQoNCmlubGluZSBVbmljb2RlU3RyaW5nJg0KVW5pY29kZVN0cmluZzo6aW5zZXJ0KGlu dDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgIGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNyY1RleHQp DQp7IHJldHVybiBkb1JlcGxhY2Uoc3RhcnQsIDAsIHNyY1RleHQsIDAsIHNyY1RleHQuZkxlbmd0 aCk7IH0NCg0KaW5saW5lIFVuaWNvZGVTdHJpbmcmDQpVbmljb2RlU3RyaW5nOjppbnNlcnQoaW50 MzJfdCBzdGFydCwNCiAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKnNyY0NoYXJzLA0KICAgICAg ICAgICAgICBpbnQzMl90IHNyY1N0YXJ0LA0KICAgICAgICAgICAgICBpbnQzMl90IHNyY0xlbmd0 aCkNCnsgcmV0dXJuIGRvUmVwbGFjZShzdGFydCwgMCwgc3JjQ2hhcnMsIHNyY1N0YXJ0LCBzcmNM ZW5ndGgpOyB9DQoNCmlubGluZSBVbmljb2RlU3RyaW5nJg0KVW5pY29kZVN0cmluZzo6aW5zZXJ0 KGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgIGNvbnN0IFVDaGFyICpzcmNDaGFycywNCiAg ICAgICAgICAgICAgaW50MzJfdCBzcmNMZW5ndGgpDQp7IHJldHVybiBkb1JlcGxhY2Uoc3RhcnQs IDAsIHNyY0NoYXJzLCAwLCBzcmNMZW5ndGgpOyB9DQoNCmlubGluZSBVbmljb2RlU3RyaW5nJg0K VW5pY29kZVN0cmluZzo6aW5zZXJ0KGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgIFVDaGFy IHNyY0NoYXIpDQp7IHJldHVybiBkb1JlcGxhY2Uoc3RhcnQsIDAsICZzcmNDaGFyLCAwLCAxKTsg fQ0KDQppbmxpbmUgVW5pY29kZVN0cmluZyYNClVuaWNvZGVTdHJpbmc6Omluc2VydChpbnQzMl90 IHN0YXJ0LA0KICAgICAgICAgICAgICBVQ2hhcjMyIHNyY0NoYXIpDQp7IHJldHVybiByZXBsYWNl KHN0YXJ0LCAwLCBzcmNDaGFyKTsgfQ0KDQoNCmlubGluZSBVbmljb2RlU3RyaW5nJg0KVW5pY29k ZVN0cmluZzo6cmVtb3ZlKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgaW50MzJfdCBsZW5n dGgpDQp7IHJldHVybiBkb1JlcGxhY2Uoc3RhcnQsIGxlbmd0aCwgX19udWxsLCAwLCAwKTsgfQ0K DQppbmxpbmUgVW5pY29kZVN0cmluZyYNClVuaWNvZGVTdHJpbmc6OnJlbW92ZSgpDQp7IHJldHVy biBkb1JlcGxhY2UoMCwgZkxlbmd0aCwgMCwgMCwgMCk7IH0NCg0KaW5saW5lIFVuaWNvZGVTdHJp bmcmDQpVbmljb2RlU3RyaW5nOjpyZW1vdmVCZXR3ZWVuKGludDMyX3Qgc3RhcnQsDQogICAgICAg ICAgICAgICAgaW50MzJfdCBsaW1pdCkNCnsgcmV0dXJuIGRvUmVwbGFjZShzdGFydCwgbGltaXQg LSBzdGFydCwgX19udWxsLCAwLCAwKTsgfQ0KDQppbmxpbmUgVUJvb2wNClVuaWNvZGVTdHJpbmc6 OnRydW5jYXRlKGludDMyX3QgdGFyZ2V0TGVuZ3RoKQ0Kew0KICBpZigodWludDMyX3QpdGFyZ2V0 TGVuZ3RoIDwgKHVpbnQzMl90KWZMZW5ndGgpIHsNCiAgICBmTGVuZ3RoID0gdGFyZ2V0TGVuZ3Ro Ow0KICAgIHJldHVybiAxOw0KICB9IGVsc2Ugew0KICAgIHJldHVybiAwOw0KICB9DQp9DQoNCmlu bGluZSBVbmljb2RlU3RyaW5nJg0KVW5pY29kZVN0cmluZzo6cmV2ZXJzZSgpDQp7IHJldHVybiBk b1JldmVyc2UoMCwgZkxlbmd0aCk7IH0NCg0KaW5saW5lIFVuaWNvZGVTdHJpbmcmDQpVbmljb2Rl U3RyaW5nOjpyZXZlcnNlKGludDMyX3Qgc3RhcnQsDQogICAgICAgICAgICAgICBpbnQzMl90IGxl bmd0aCkNCnsgcmV0dXJuIGRvUmV2ZXJzZShzdGFydCwgbGVuZ3RoKTsgfQ0KDQoNCg0KDQoNCg0K aW5saW5lIHZvaWQNClVuaWNvZGVTdHJpbmc6OnBpbkluZGljZXMoaW50MzJfdCYgc3RhcnQsDQog ICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QmIGxlbmd0aCkgY29uc3QNCnsNCg0KICBp ZihzdGFydCA8IDApIHsNCiAgICBzdGFydCA9IDA7DQogIH0gZWxzZSBpZihzdGFydCA+IGZMZW5n dGgpIHsNCiAgICBzdGFydCA9IGZMZW5ndGg7DQogIH0NCiAgaWYobGVuZ3RoIDwgMCkgew0KICAg IGxlbmd0aCA9IDA7DQogIH0gZWxzZSBpZihsZW5ndGggPiAoZkxlbmd0aCAtIHN0YXJ0KSkgew0K ICAgIGxlbmd0aCA9IChmTGVuZ3RoIC0gc3RhcnQpOw0KICB9DQp9DQoNCmlubGluZSBVQ2hhcioN ClVuaWNvZGVTdHJpbmc6OmdldEFycmF5U3RhcnQoKQ0KeyByZXR1cm4gZkFycmF5OyB9DQoNCmlu bGluZSBjb25zdCBVQ2hhcioNClVuaWNvZGVTdHJpbmc6OmdldEFycmF5U3RhcnQoKSBjb25zdA0K eyByZXR1cm4gZkFycmF5OyB9DQojIDQwMTIgIi4uL2NvbW1vbi91bmljb2RlL3VuaXN0ci5oIg0K Y2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgVUNoYXJSZWZlcmVuY2UgOiBwdWJsaWMg VU9iamVjdCB7DQpwdWJsaWM6DQogIFVDaGFyUmVmZXJlbmNlKCk7DQogIGlubGluZSBVQ2hhclJl ZmVyZW5jZShVbmljb2RlU3RyaW5nICpzdHJpbmcsDQogICAgICAgICBpbnQzMl90IHBvcyk7DQog IGlubGluZSBVQ2hhclJlZmVyZW5jZShjb25zdCBVQ2hhclJlZmVyZW5jZSYgdGhhdCk7DQogIH5V Q2hhclJlZmVyZW5jZSgpOw0KDQogIGlubGluZSBVQ2hhclJlZmVyZW5jZSYgb3BlcmF0b3I9IChj b25zdCBVQ2hhclJlZmVyZW5jZSYgdGhhdCk7DQogIGlubGluZSBVQ2hhclJlZmVyZW5jZSYgb3Bl cmF0b3I9IChVQ2hhciBjKTsNCg0KICBpbmxpbmUgb3BlcmF0b3IgVUNoYXIoKTsNCg0KDQoNCg0K DQoNCiAgdmlydHVhbCBpbmxpbmUgVUNsYXNzSUQgZ2V0RHluYW1pY0NsYXNzSUQoKSBjb25zdCB7 IHJldHVybiBnZXRTdGF0aWNDbGFzc0lEKCk7IH0NCg0KDQoNCg0KDQoNCiAgc3RhdGljIGlubGlu ZSBVQ2xhc3NJRCBnZXRTdGF0aWNDbGFzc0lEKCkgeyByZXR1cm4gKFVDbGFzc0lEKSZmZ0NsYXNz SUQ7IH0NCg0KcHJpdmF0ZToNCiAgVW5pY29kZVN0cmluZyAqZlN0cmluZzsNCiAgaW50MzJfdCBm UG9zOw0KDQoNCg0KDQoNCiAgc3RhdGljIGNvbnN0IGNoYXIgZmdDbGFzc0lEOw0KfTsNCg0KDQoN Cg0KDQppbmxpbmUNClVDaGFyUmVmZXJlbmNlOjpVQ2hhclJlZmVyZW5jZShVbmljb2RlU3RyaW5n ICpzdHJpbmcsDQogICAgICAgICAgICAgICAgICAgaW50MzJfdCBwb3MpDQogIDogVU9iamVjdCgp LCBmU3RyaW5nKHN0cmluZyksIGZQb3MocG9zKQ0Ke30NCg0KaW5saW5lDQpVQ2hhclJlZmVyZW5j ZTo6VUNoYXJSZWZlcmVuY2UoY29uc3QgVUNoYXJSZWZlcmVuY2UmIHRoYXQpDQo6IFVPYmplY3Qo dGhhdCkNCnsgdGhpcy0+b3BlcmF0b3I9KHRoYXQpOyB9DQoNCmlubGluZQ0KVUNoYXJSZWZlcmVu Y2U6On5VQ2hhclJlZmVyZW5jZSgpDQp7fQ0KDQppbmxpbmUgVUNoYXJSZWZlcmVuY2UmDQpVQ2hh clJlZmVyZW5jZTo6b3BlcmF0b3I9IChjb25zdCBVQ2hhclJlZmVyZW5jZSYgdGhhdCkNCnsgZlN0 cmluZy0+c2V0Q2hhckF0KGZQb3MsIHRoYXQuZlN0cmluZy0+Y2hhckF0KHRoYXQuZlBvcykpOyBy ZXR1cm4gKnRoaXM7IH0NCg0KaW5saW5lIFVDaGFyUmVmZXJlbmNlJg0KVUNoYXJSZWZlcmVuY2U6 Om9wZXJhdG9yPSAoVUNoYXIgYykNCnsgZlN0cmluZy0+c2V0Q2hhckF0KGZQb3MsIGMpOyByZXR1 cm4gKnRoaXM7IH0NCg0KaW5saW5lDQpVQ2hhclJlZmVyZW5jZTo6b3BlcmF0b3IgVUNoYXIoKQ0K eyByZXR1cm4gZlN0cmluZy0+Y2hhckF0KGZQb3MpOyB9DQoNCn0NCiMgMjggInVjb2xfZWxtLmNw cCIgMg0KIyAxICJ1Y29sX2VsbS5oIiAxDQojIDI0ICJ1Y29sX2VsbS5oIg0KIyAxICJ1Y29sX2Nu dC5oIiAxDQojIDI1ICJ1Y29sX2NudC5oIg0KIyAxICIuLi9jb21tb24vdXRyaWUuaCIgMQ0KIyAy MiAiLi4vY29tbW9uL3V0cmllLmgiDQpleHRlcm4gIkMiIHsNCiMgNTAgIi4uL2NvbW1vbi91dHJp ZS5oIg0KZW51bSB7DQoNCiAgICBVVFJJRV9TSElGVD01LA0KDQoNCiAgICBVVFJJRV9EQVRBX0JM T0NLX0xFTkdUSD0xPDxVVFJJRV9TSElGVCwNCg0KDQogICAgVVRSSUVfTUFTSz1VVFJJRV9EQVRB X0JMT0NLX0xFTkdUSC0xLA0KDQoNCg0KDQoNCiAgICBVVFJJRV9MRUFEX0lOREVYX0RJU1A9MHgy ODAwPj5VVFJJRV9TSElGVCwNCiMgNzMgIi4uL2NvbW1vbi91dHJpZS5oIg0KICAgIFVUUklFX0lO REVYX1NISUZUPTIsDQoNCg0KICAgIFVUUklFX0RBVEFfR1JBTlVMQVJJVFk9MTw8VVRSSUVfSU5E RVhfU0hJRlQsDQoNCg0KICAgIFVUUklFX1NVUlJPR0FURV9CTE9DS19CSVRTPTEwLVVUUklFX1NI SUZULA0KDQoNCg0KDQoNCg0KICAgIFVUUklFX1NVUlJPR0FURV9CTE9DS19DT1VOVD0oMTw8VVRS SUVfU1VSUk9HQVRFX0JMT0NLX0JJVFMpLA0KDQoNCiAgICBVVFJJRV9CTVBfSU5ERVhfTEVOR1RI PTB4MTAwMDA+PlVUUklFX1NISUZUDQp9Ow0KIyAxMjAgIi4uL2NvbW1vbi91dHJpZS5oIg0KdHlw ZWRlZiBpbnQzMl90DQpVVHJpZUdldEZvbGRpbmdPZmZzZXQodWludDMyX3QgZGF0YSk7DQojIDEz MiAiLi4vY29tbW9uL3V0cmllLmgiDQpzdHJ1Y3QgVVRyaWUgew0KICAgIGNvbnN0IHVpbnQxNl90 ICppbmRleDsNCiAgICBjb25zdCB1aW50MzJfdCAqZGF0YTMyOw0KDQoNCg0KDQoNCg0KICAgIFVU cmllR2V0Rm9sZGluZ09mZnNldCAqZ2V0Rm9sZGluZ09mZnNldDsNCg0KICAgIGludDMyX3QgaW5k ZXhMZW5ndGgsIGRhdGFMZW5ndGg7DQogICAgdWludDMyX3QgaW5pdGlhbFZhbHVlOw0KICAgIFVC b29sIGlzTGF0aW4xTGluZWFyOw0KfTsNCg0KdHlwZWRlZiBzdHJ1Y3QgVVRyaWUgVVRyaWU7DQoj IDQyNyAiLi4vY29tbW9uL3V0cmllLmgiDQp0eXBlZGVmIHVpbnQzMl90DQpVVHJpZUVudW1WYWx1 ZShjb25zdCB2b2lkICpjb250ZXh0LCB1aW50MzJfdCB2YWx1ZSk7DQojIDQ0MyAiLi4vY29tbW9u L3V0cmllLmgiDQp0eXBlZGVmIFVCb29sDQpVVHJpZUVudW1SYW5nZShjb25zdCB2b2lkICpjb250 ZXh0LCBVQ2hhcjMyIHN0YXJ0LCBVQ2hhcjMyIGxpbWl0LCB1aW50MzJfdCB2YWx1ZSk7DQojIDQ2 MiAiLi4vY29tbW9uL3V0cmllLmgiDQpleHRlcm4gIkMiIHZvaWQNCnV0cmllX2VudW1fMl8yKFVU cmllICp0cmllLA0KICAgICAgICAgICBVVHJpZUVudW1WYWx1ZSAqZW51bVZhbHVlLCBVVHJpZUVu dW1SYW5nZSAqZW51bVJhbmdlLCBjb25zdCB2b2lkICpjb250ZXh0KTsNCiMgNDc3ICIuLi9jb21t b24vdXRyaWUuaCINCmV4dGVybiAiQyIgaW50MzJfdA0KdXRyaWVfdW5zZXJpYWxpemVfMl8yKFVU cmllICp0cmllLCBjb25zdCB1aW50OF90ICpkYXRhLCBpbnQzMl90IGxlbmd0aCwgVUVycm9yQ29k ZSAqcEVycm9yQ29kZSk7DQojIDQ4NyAiLi4vY29tbW9uL3V0cmllLmgiDQpzdHJ1Y3QgVU5ld1Ry aWUgew0KDQoNCg0KDQogICAgaW50MzJfdCBpbmRleFsoMHgxMTAwMDA+PlVUUklFX1NISUZUKV07 DQogICAgdWludDMyX3QgKmRhdGE7DQoNCiAgICBpbnQzMl90IGluZGV4TGVuZ3RoLCBkYXRhQ2Fw YWNpdHksIGRhdGFMZW5ndGg7DQogICAgVUJvb2wgaXNBbGxvY2F0ZWQsIGlzRGF0YUFsbG9jYXRl ZDsNCiAgICBVQm9vbCBpc0xhdGluMUxpbmVhciwgaXNDb21wYWN0ZWQ7DQoNCg0KDQoNCg0KICAg IGludDMyX3QgbWFwWygweDExMDAwMCtVVFJJRV9EQVRBX0JMT0NLX0xFTkdUSCsweDQwMCk+PlVU UklFX1NISUZUXTsNCn07DQoNCnR5cGVkZWYgc3RydWN0IFVOZXdUcmllIFVOZXdUcmllOw0KIyA1 MjYgIi4uL2NvbW1vbi91dHJpZS5oIg0KdHlwZWRlZiB1aW50MzJfdA0KVU5ld1RyaWVHZXRGb2xk ZWRWYWx1ZShVTmV3VHJpZSAqdHJpZSwgVUNoYXIzMiBzdGFydCwgaW50MzJfdCBvZmZzZXQpOw0K IyA1NTMgIi4uL2NvbW1vbi91dHJpZS5oIg0KZXh0ZXJuICJDIiBVTmV3VHJpZSAqDQp1dHJpZV9v cGVuXzJfMihVTmV3VHJpZSAqZmlsbEluLA0KICAgICAgICAgICB1aW50MzJfdCAqYWxpYXNEYXRh LCBpbnQzMl90IG1heERhdGFMZW5ndGgsDQogICAgICAgICAgIHVpbnQzMl90IGluaXRpYWxWYWx1 ZSwgVUJvb2wgbGF0aW4xTGluZWFyKTsNCiMgNTY4ICIuLi9jb21tb24vdXRyaWUuaCINCmV4dGVy biAiQyIgVU5ld1RyaWUgKg0KdXRyaWVfY2xvbmVfMl8yKFVOZXdUcmllICpmaWxsSW4sIGNvbnN0 IFVOZXdUcmllICpvdGhlciwgdWludDMyX3QgKmFsaWFzRGF0YSwgaW50MzJfdCBhbGlhc0RhdGFM ZW5ndGgpOw0KDQoNCg0KDQoNCg0KDQpleHRlcm4gIkMiIHZvaWQNCnV0cmllX2Nsb3NlXzJfMihV TmV3VHJpZSAqdHJpZSk7DQojIDU5MCAiLi4vY29tbW9uL3V0cmllLmgiDQpleHRlcm4gIkMiIHVp bnQzMl90ICoNCnV0cmllX2dldERhdGFfMl8yKFVOZXdUcmllICp0cmllLCBpbnQzMl90ICpwTGVu Z3RoKTsNCiMgNjAxICIuLi9jb21tb24vdXRyaWUuaCINCmV4dGVybiAiQyIgVUJvb2wNCnV0cmll X3NldDMyXzJfMihVTmV3VHJpZSAqdHJpZSwgVUNoYXIzMiBjLCB1aW50MzJfdCB2YWx1ZSk7DQoj IDYxNCAiLi4vY29tbW9uL3V0cmllLmgiDQpleHRlcm4gIkMiIHVpbnQzMl90DQp1dHJpZV9nZXQz Ml8yXzIoVU5ld1RyaWUgKnRyaWUsIFVDaGFyMzIgYywgVUJvb2wgKnBJbkJsb2NrWmVybyk7DQoj IDYyOSAiLi4vY29tbW9uL3V0cmllLmgiDQpleHRlcm4gIkMiIFVCb29sDQp1dHJpZV9zZXRSYW5n ZTMyXzJfMihVTmV3VHJpZSAqdHJpZSwgVUNoYXIzMiBzdGFydCwgVUNoYXIzMiBsaW1pdCwgdWlu dDMyX3QgdmFsdWUsIFVCb29sIG92ZXJ3cml0ZSk7DQojIDY1NiAiLi4vY29tbW9uL3V0cmllLmgi DQpleHRlcm4gIkMiIGludDMyX3QNCnV0cmllX3NlcmlhbGl6ZV8yXzIoVU5ld1RyaWUgKnRyaWUs IHVpbnQ4X3QgKmRhdGEsIGludDMyX3QgY2FwYWNpdHksDQogICAgICAgICAgICAgICAgVU5ld1Ry aWVHZXRGb2xkZWRWYWx1ZSAqZ2V0Rm9sZGVkVmFsdWUsDQogICAgICAgICAgICAgICAgVUJvb2wg cmVkdWNlVG8xNkJpdHMsDQogICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7 DQoNCn0NCiMgMjYgInVjb2xfY250LmgiIDINCiMgMSAiLi4vY29tbW9uL3VoYXNoLmgiIDENCiMg NzYgIi4uL2NvbW1vbi91aGFzaC5oIg0KZXh0ZXJuICJDIiB7DQojIDg4ICIuLi9jb21tb24vdWhh c2guaCINCnVuaW9uIFVIYXNoVG9rIHsNCiAgICB2b2lkKiBwb2ludGVyOw0KICAgIGludDMyX3Qg aW50ZWdlcjsNCn07DQp0eXBlZGVmIHVuaW9uIFVIYXNoVG9rIFVIYXNoVG9rOw0KDQoNCg0KDQpz dHJ1Y3QgVUhhc2hFbGVtZW50IHsNCg0KICAgIGludDMyX3QgaGFzaGNvZGU7DQogICAgVUhhc2hU b2sgdmFsdWU7DQogICAgVUhhc2hUb2sga2V5Ow0KfTsNCnR5cGVkZWYgc3RydWN0IFVIYXNoRWxl bWVudCBVSGFzaEVsZW1lbnQ7DQoNCg0KDQoNCg0KDQp0eXBlZGVmIGludDMyX3QgVUhhc2hGdW5j dGlvbihjb25zdCBVSGFzaFRvayBrZXkpOw0KDQoNCg0KDQoNCg0KDQp0eXBlZGVmIFVCb29sIFVL ZXlDb21wYXJhdG9yKGNvbnN0IFVIYXNoVG9rIGtleTEsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgVUhhc2hUb2sga2V5Mik7DQoNCg0KDQoNCg0KDQoNCnR5 cGVkZWYgdm9pZCBVT2JqZWN0RGVsZXRlcih2b2lkKiBvYmopOw0KDQoNCg0KDQoNCmVudW0gVUhh c2hSZXNpemVQb2xpY3kgew0KICAgIFVfR1JPVywNCiAgICBVX0dST1dfQU5EX1NIUklOSywNCiAg ICBVX0ZJWEVEDQp9Ow0KDQoNCg0KDQoNCnN0cnVjdCBVSGFzaHRhYmxlIHsNCg0KDQoNCiAgICBV SGFzaEVsZW1lbnQgKmVsZW1lbnRzOw0KDQoNCg0KICAgIGludDMyX3QgY291bnQ7DQoNCg0KICAg IGludDMyX3QgbGVuZ3RoOw0KDQogICAgaW50MzJfdCBwcmltZUluZGV4Ow0KDQoNCg0KDQogICAg aW50MzJfdCBoaWdoV2F0ZXJNYXJrOw0KICAgIGludDMyX3QgbG93V2F0ZXJNYXJrOw0KICAgIGZs b2F0IGhpZ2hXYXRlclJhdGlvOw0KICAgIGZsb2F0IGxvd1dhdGVyUmF0aW87DQoNCg0KDQogICAg VUhhc2hGdW5jdGlvbiAqa2V5SGFzaGVyOw0KDQogICAgVUtleUNvbXBhcmF0b3IgKmtleUNvbXBh cmF0b3I7DQoNCiAgICBVT2JqZWN0RGVsZXRlciAqa2V5RGVsZXRlcjsNCg0KICAgIFVPYmplY3RE ZWxldGVyICp2YWx1ZURlbGV0ZXI7DQoNCn07DQp0eXBlZGVmIHN0cnVjdCBVSGFzaHRhYmxlIFVI YXNodGFibGU7DQoNCn0NCiMgMTk1ICIuLi9jb21tb24vdWhhc2guaCINCmV4dGVybiAiQyIgVUhh c2h0YWJsZSoNCnVoYXNoX29wZW5fMl8yKFVIYXNoRnVuY3Rpb24gKmtleUhhc2gsDQogICAgICAg ICAgIFVLZXlDb21wYXJhdG9yICprZXlDb21wLA0KICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0 dXMpOw0KIyAyMTEgIi4uL2NvbW1vbi91aGFzaC5oIg0KZXh0ZXJuICJDIiBVSGFzaHRhYmxlKg0K dWhhc2hfb3BlblNpemVfMl8yKFVIYXNoRnVuY3Rpb24gKmtleUhhc2gsDQogICAgICAgICAgICAg ICBVS2V5Q29tcGFyYXRvciAqa2V5Q29tcCwNCiAgICAgICAgICAgICAgIGludDMyX3Qgc2l6ZSwN CiAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7DQoNCg0KDQoNCg0KZXh0ZXJuICJD IiB2b2lkDQp1aGFzaF9jbG9zZV8yXzIoVUhhc2h0YWJsZSAqaGFzaCk7DQojIDIzMiAiLi4vY29t bW9uL3VoYXNoLmgiDQpleHRlcm4gIkMiIFVIYXNoRnVuY3Rpb24gKg0KdWhhc2hfc2V0S2V5SGFz aGVyXzJfMihVSGFzaHRhYmxlICpoYXNoLCBVSGFzaEZ1bmN0aW9uICpmbik7DQojIDI0MiAiLi4v Y29tbW9uL3VoYXNoLmgiDQpleHRlcm4gIkMiIFVLZXlDb21wYXJhdG9yICoNCnVoYXNoX3NldEtl eUNvbXBhcmF0b3JfMl8yKFVIYXNodGFibGUgKmhhc2gsIFVLZXlDb21wYXJhdG9yICpmbik7DQoj IDI1NSAiLi4vY29tbW9uL3VoYXNoLmgiDQpleHRlcm4gIkMiIFVPYmplY3REZWxldGVyICoNCnVo YXNoX3NldEtleURlbGV0ZXJfMl8yKFVIYXNodGFibGUgKmhhc2gsIFVPYmplY3REZWxldGVyICpm bik7DQojIDI2OCAiLi4vY29tbW9uL3VoYXNoLmgiDQpleHRlcm4gIkMiIFVPYmplY3REZWxldGVy ICoNCnVoYXNoX3NldFZhbHVlRGVsZXRlcl8yXzIoVUhhc2h0YWJsZSAqaGFzaCwgVU9iamVjdERl bGV0ZXIgKmZuKTsNCiMgMjc4ICIuLi9jb21tb24vdWhhc2guaCINCmV4dGVybiAiQyIgdm9pZA0K dWhhc2hfc2V0UmVzaXplUG9saWN5XzJfMihVSGFzaHRhYmxlICpoYXNoLCBlbnVtIFVIYXNoUmVz aXplUG9saWN5IHBvbGljeSk7DQoNCg0KDQoNCg0KDQpleHRlcm4gIkMiIGludDMyX3QNCnVoYXNo X2NvdW50XzJfMihjb25zdCBVSGFzaHRhYmxlICpoYXNoKTsNCiMgMzAyICIuLi9jb21tb24vdWhh c2guaCINCmV4dGVybiAiQyIgdm9pZCoNCnVoYXNoX3B1dF8yXzIoVUhhc2h0YWJsZSAqaGFzaCwN CiAgICAgICAgICB2b2lkICprZXksDQogICAgICAgICAgdm9pZCAqdmFsdWUsDQogICAgICAgICAg VUVycm9yQ29kZSAqc3RhdHVzKTsNCiMgMzIwICIuLi9jb21tb24vdWhhc2guaCINCmV4dGVybiAi QyIgdm9pZCoNCnVoYXNoX2lwdXRfMl8yKFVIYXNodGFibGUgKmhhc2gsDQogICAgICAgICAgIGlu dDMyX3Qga2V5LA0KICAgICAgICAgICB2b2lkKiB2YWx1ZSwNCiAgICAgICAgICAgVUVycm9yQ29k ZSAqc3RhdHVzKTsNCiMgMzM4ICIuLi9jb21tb24vdWhhc2guaCINCmV4dGVybiAiQyIgaW50MzJf dA0KdWhhc2hfcHV0aV8yXzIoVUhhc2h0YWJsZSAqaGFzaCwNCiAgICAgICAgICAgdm9pZCoga2V5 LA0KICAgICAgICAgICBpbnQzMl90IHZhbHVlLA0KICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0 dXMpOw0KIyAzNTEgIi4uL2NvbW1vbi91aGFzaC5oIg0KZXh0ZXJuICJDIiB2b2lkKg0KdWhhc2hf Z2V0XzJfMihjb25zdCBVSGFzaHRhYmxlICpoYXNoLA0KICAgICAgICAgIGNvbnN0IHZvaWQgKmtl eSk7DQojIDM2MiAiLi4vY29tbW9uL3VoYXNoLmgiDQpleHRlcm4gIkMiIHZvaWQqDQp1aGFzaF9p Z2V0XzJfMihjb25zdCBVSGFzaHRhYmxlICpoYXNoLA0KICAgICAgICAgICBpbnQzMl90IGtleSk7 DQojIDM3MyAiLi4vY29tbW9uL3VoYXNoLmgiDQpleHRlcm4gIkMiIGludDMyX3QNCnVoYXNoX2dl dGlfMl8yKGNvbnN0IFVIYXNodGFibGUgKmhhc2gsDQogICAgICAgICAgIGNvbnN0IHZvaWQqIGtl eSk7DQoNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgdm9pZCoNCnVoYXNoX3JlbW92ZV8yXzIoVUhh c2h0YWJsZSAqaGFzaCwNCiAgICAgICAgICAgICBjb25zdCB2b2lkICprZXkpOw0KDQoNCg0KDQoN Cg0KDQpleHRlcm4gIkMiIHZvaWQqDQp1aGFzaF9pcmVtb3ZlXzJfMihVSGFzaHRhYmxlICpoYXNo LA0KICAgICAgICAgICAgICBpbnQzMl90IGtleSk7DQoNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIg aW50MzJfdA0KdWhhc2hfcmVtb3ZlaV8yXzIoVUhhc2h0YWJsZSAqaGFzaCwNCiAgICAgICAgICAg ICAgY29uc3Qgdm9pZCoga2V5KTsNCg0KDQoNCg0KDQpleHRlcm4gIkMiIHZvaWQNCnVoYXNoX3Jl bW92ZUFsbF8yXzIoVUhhc2h0YWJsZSAqaGFzaCk7DQojIDQyNSAiLi4vY29tbW9uL3VoYXNoLmgi DQpleHRlcm4gIkMiIGNvbnN0IFVIYXNoRWxlbWVudCoNCnVoYXNoX2ZpbmRfMl8yKGNvbnN0IFVI YXNodGFibGUgKmhhc2gsIGNvbnN0IHZvaWQqIGtleSk7DQojIDQ0MSAiLi4vY29tbW9uL3VoYXNo LmgiDQpleHRlcm4gIkMiIGNvbnN0IFVIYXNoRWxlbWVudCoNCnVoYXNoX25leHRFbGVtZW50XzJf Mihjb25zdCBVSGFzaHRhYmxlICpoYXNoLA0KICAgICAgICAgICAgICAgICAgaW50MzJfdCAqcG9z KTsNCiMgNDU2ICIuLi9jb21tb24vdWhhc2guaCINCmV4dGVybiAiQyIgdm9pZCoNCnVoYXNoX3Jl bW92ZUVsZW1lbnRfMl8yKFVIYXNodGFibGUgKmhhc2gsIGNvbnN0IFVIYXNoRWxlbWVudCogZSk7 DQojIDQ2OCAiLi4vY29tbW9uL3VoYXNoLmgiDQpleHRlcm4gIkMiIFVIYXNoVG9rDQp1aGFzaF90 b2tpXzJfMihpbnQzMl90IGkpOw0KDQoNCg0KDQoNCg0KZXh0ZXJuICJDIiBVSGFzaFRvaw0KdWhh c2hfdG9rcF8yXzIodm9pZCogcCk7DQojIDQ5MCAiLi4vY29tbW9uL3VoYXNoLmgiDQpleHRlcm4g IkMiIGludDMyX3QNCnVoYXNoX2hhc2hVQ2hhcnNfMl8yKGNvbnN0IFVIYXNoVG9rIGtleSk7DQoj IDUwMCAiLi4vY29tbW9uL3VoYXNoLmgiDQpleHRlcm4gIkMiIGludDMyX3QNCnVoYXNoX2hhc2hD aGFyc18yXzIoY29uc3QgVUhhc2hUb2sga2V5KTsNCg0KDQpleHRlcm4gIkMiIGludDMyX3QNCnVo YXNoX2hhc2hVQ2hhcnNOXzJfMihjb25zdCBVQ2hhciAqa2V5LCBpbnQzMl90IGxlbmd0aCk7DQoj IDUxNCAiLi4vY29tbW9uL3VoYXNoLmgiDQpleHRlcm4gIkMiIGludDMyX3QNCnVoYXNoX2hhc2hJ Q2hhcnNfMl8yKGNvbnN0IFVIYXNoVG9rIGtleSk7DQojIDUyNCAiLi4vY29tbW9uL3VoYXNoLmgi DQpleHRlcm4gIkMiIFVCb29sDQp1aGFzaF9jb21wYXJlVUNoYXJzXzJfMihjb25zdCBVSGFzaFRv ayBrZXkxLCBjb25zdCBVSGFzaFRvayBrZXkyKTsNCiMgNTM0ICIuLi9jb21tb24vdWhhc2guaCIN CmV4dGVybiAiQyIgVUJvb2wNCnVoYXNoX2NvbXBhcmVDaGFyc18yXzIoY29uc3QgVUhhc2hUb2sg a2V5MSwgY29uc3QgVUhhc2hUb2sga2V5Mik7DQojIDU0NCAiLi4vY29tbW9uL3VoYXNoLmgiDQpl eHRlcm4gIkMiIFVCb29sDQp1aGFzaF9jb21wYXJlSUNoYXJzXzJfMihjb25zdCBVSGFzaFRvayBr ZXkxLCBjb25zdCBVSGFzaFRvayBrZXkyKTsNCiMgNTU2ICIuLi9jb21tb24vdWhhc2guaCINCmV4 dGVybiAiQyIgaW50MzJfdA0KdWhhc2hfaGFzaFVuaWNvZGVTdHJpbmdfMl8yKGNvbnN0IFVIYXNo VG9rIGtleSk7DQoNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgaW50MzJfdA0KdWhhc2hfaGFzaENh c2VsZXNzVW5pY29kZVN0cmluZ18yXzIoY29uc3QgVUhhc2hUb2sga2V5KTsNCg0KDQoNCg0KDQoN Cg0KZXh0ZXJuICJDIiBVQm9vbA0KdWhhc2hfY29tcGFyZVVuaWNvZGVTdHJpbmdfMl8yKGNvbnN0 IFVIYXNoVG9rIGtleTEsIGNvbnN0IFVIYXNoVG9rIGtleTIpOw0KIyA1ODQgIi4uL2NvbW1vbi91 aGFzaC5oIg0KZXh0ZXJuICJDIiBVQm9vbA0KdWhhc2hfY29tcGFyZUNhc2VsZXNzVW5pY29kZVN0 cmluZ18yXzIoY29uc3QgVUhhc2hUb2sga2V5MSwgY29uc3QgVUhhc2hUb2sga2V5Mik7DQoNCg0K DQoNCg0KZXh0ZXJuICJDIiB2b2lkDQp1aGFzaF9kZWxldGVVbmljb2RlU3RyaW5nXzJfMih2b2lk ICpvYmopOw0KIyA2MDMgIi4uL2NvbW1vbi91aGFzaC5oIg0KZXh0ZXJuICJDIiBpbnQzMl90DQp1 aGFzaF9oYXNoTG9uZ18yXzIoY29uc3QgVUhhc2hUb2sga2V5KTsNCg0KDQoNCg0KDQoNCg0KZXh0 ZXJuICJDIiBVQm9vbA0KdWhhc2hfY29tcGFyZUxvbmdfMl8yKGNvbnN0IFVIYXNoVG9rIGtleTEs IGNvbnN0IFVIYXNoVG9rIGtleTIpOw0KIyA2MjMgIi4uL2NvbW1vbi91aGFzaC5oIg0KZXh0ZXJu ICJDIiB2b2lkDQp1aGFzaF9kZWxldGVIYXNodGFibGVfMl8yKHZvaWQgKm9iaik7DQoNCg0KDQoN Cg0KZXh0ZXJuICJDIiB2b2lkDQp1aGFzaF9kZWxldGVVVmVjdG9yXzJfMih2b2lkICpvYmopOw0K DQoNCg0KDQoNCg0KZXh0ZXJuICJDIiB2b2lkDQp1aGFzaF9mcmVlQmxvY2tfMl8yKHZvaWQgKm9i aik7DQojIDI3ICJ1Y29sX2NudC5oIiAyDQojIDEgInVjb2xfZWxtLmgiIDENCiMgMjggInVjb2xf Y250LmgiIDINCiMgMSAidWNvbF9pbXAuaCIgMQ0KIyAyOSAidWNvbF9pbXAuaCINCiMgMSAidW5p Y29kZS91Y29sLmgiIDENCiMgMTIgInVuaWNvZGUvdWNvbC5oIg0KIyAxICIuLi9jb21tb24vdW5p Y29kZS91bm9ybS5oIiAxDQojIDE5ICIuLi9jb21tb24vdW5pY29kZS91bm9ybS5oIg0KIyAxICIu Li9jb21tb24vdW5pY29kZS91aXRlci5oIiAxDQojIDMwICIuLi9jb21tb24vdW5pY29kZS91aXRl ci5oIg0KICAgIG5hbWVzcGFjZSBpY3VfMl8yIHsNCg0KICAgIGNsYXNzIENoYXJhY3Rlckl0ZXJh dG9yOw0KICAgIGNsYXNzIFJlcGxhY2VhYmxlOw0KDQogICAgfQ0KDQoNCmV4dGVybiAiQyIgew0K DQpzdHJ1Y3QgVUNoYXJJdGVyYXRvcjsNCnR5cGVkZWYgc3RydWN0IFVDaGFySXRlcmF0b3IgVUNo YXJJdGVyYXRvcjsNCg0KDQoNCg0KDQoNCg0KZW51bSBVQ2hhckl0ZXJhdG9yT3JpZ2luIHsNCiAg ICBVSVRFUl9TVEFSVCwgVUlURVJfQ1VSUkVOVCwgVUlURVJfTElNSVQsIFVJVEVSX1pFUk8sIFVJ VEVSX0xFTkdUSA0KfTsNCnR5cGVkZWYgZW51bSBVQ2hhckl0ZXJhdG9yT3JpZ2luIFVDaGFySXRl cmF0b3JPcmlnaW47DQojIDY4ICIuLi9jb21tb24vdW5pY29kZS91aXRlci5oIg0KdHlwZWRlZiBp bnQzMl90DQpVQ2hhckl0ZXJhdG9yR2V0SW5kZXgoVUNoYXJJdGVyYXRvciAqaXRlciwgVUNoYXJJ dGVyYXRvck9yaWdpbiBvcmlnaW4pOw0KIyA5MSAiLi4vY29tbW9uL3VuaWNvZGUvdWl0ZXIuaCIN CnR5cGVkZWYgaW50MzJfdA0KVUNoYXJJdGVyYXRvck1vdmUoVUNoYXJJdGVyYXRvciAqaXRlciwg aW50MzJfdCBkZWx0YSwgVUNoYXJJdGVyYXRvck9yaWdpbiBvcmlnaW4pOw0KIyAxMDYgIi4uL2Nv bW1vbi91bmljb2RlL3VpdGVyLmgiDQp0eXBlZGVmIFVCb29sDQpVQ2hhckl0ZXJhdG9ySGFzTmV4 dChVQ2hhckl0ZXJhdG9yICppdGVyKTsNCiMgMTIwICIuLi9jb21tb24vdW5pY29kZS91aXRlci5o Ig0KdHlwZWRlZiBVQm9vbA0KVUNoYXJJdGVyYXRvckhhc1ByZXZpb3VzKFVDaGFySXRlcmF0b3Ig Kml0ZXIpOw0KIyAxMzUgIi4uL2NvbW1vbi91bmljb2RlL3VpdGVyLmgiDQp0eXBlZGVmIGludDMy X3QNClVDaGFySXRlcmF0b3JDdXJyZW50KFVDaGFySXRlcmF0b3IgKml0ZXIpOw0KIyAxNTEgIi4u L2NvbW1vbi91bmljb2RlL3VpdGVyLmgiDQp0eXBlZGVmIGludDMyX3QNClVDaGFySXRlcmF0b3JO ZXh0KFVDaGFySXRlcmF0b3IgKml0ZXIpOw0KIyAxNjcgIi4uL2NvbW1vbi91bmljb2RlL3VpdGVy LmgiDQp0eXBlZGVmIGludDMyX3QNClVDaGFySXRlcmF0b3JQcmV2aW91cyhVQ2hhckl0ZXJhdG9y ICppdGVyKTsNCiMgMTgxICIuLi9jb21tb24vdW5pY29kZS91aXRlci5oIg0KdHlwZWRlZiBpbnQz Ml90DQpVQ2hhckl0ZXJhdG9yUmVzZXJ2ZWQoVUNoYXJJdGVyYXRvciAqaXRlciwgaW50MzJfdCBz b21ldGhpbmcpOw0KIyAyMDYgIi4uL2NvbW1vbi91bmljb2RlL3VpdGVyLmgiDQpzdHJ1Y3QgVUNo YXJJdGVyYXRvciB7DQoNCg0KDQoNCiAgICBjb25zdCB2b2lkICpjb250ZXh0Ow0KDQoNCg0KDQoN CiAgICBpbnQzMl90IGxlbmd0aDsNCg0KDQoNCg0KDQogICAgaW50MzJfdCBzdGFydDsNCg0KDQoN Cg0KDQogICAgaW50MzJfdCBpbmRleDsNCg0KDQoNCg0KDQogICAgaW50MzJfdCBsaW1pdDsNCg0K DQoNCg0KICAgIGludDMyX3QgcmVzZXJ2ZWRGaWVsZDsNCg0KDQoNCg0KDQoNCg0KICAgIFVDaGFy SXRlcmF0b3JHZXRJbmRleCAqZ2V0SW5kZXg7DQojIDI1OCAiLi4vY29tbW9uL3VuaWNvZGUvdWl0 ZXIuaCINCiAgICBVQ2hhckl0ZXJhdG9yTW92ZSAqbW92ZTsNCg0KDQoNCg0KDQoNCg0KICAgIFVD aGFySXRlcmF0b3JIYXNOZXh0ICpoYXNOZXh0Ow0KDQoNCg0KDQoNCg0KICAgIFVDaGFySXRlcmF0 b3JIYXNQcmV2aW91cyAqaGFzUHJldmlvdXM7DQoNCg0KDQoNCg0KDQoNCiAgICBVQ2hhckl0ZXJh dG9yQ3VycmVudCAqY3VycmVudDsNCiMgMjkwICIuLi9jb21tb24vdW5pY29kZS91aXRlci5oIg0K ICAgIFVDaGFySXRlcmF0b3JOZXh0ICpuZXh0Ow0KIyAyOTkgIi4uL2NvbW1vbi91bmljb2RlL3Vp dGVyLmgiDQogICAgVUNoYXJJdGVyYXRvclByZXZpb3VzICpwcmV2aW91czsNCg0KDQoNCg0KDQoN CiAgICBVQ2hhckl0ZXJhdG9yUmVzZXJ2ZWQgKnJlc2VydmVkRm47DQp9Ow0KIyAzMjcgIi4uL2Nv bW1vbi91bmljb2RlL3VpdGVyLmgiDQpleHRlcm4gIkMiIGludDMyX3QNCnVpdGVyX2N1cnJlbnQz Ml8yXzIoVUNoYXJJdGVyYXRvciAqaXRlcik7DQojIDM0NCAiLi4vY29tbW9uL3VuaWNvZGUvdWl0 ZXIuaCINCmV4dGVybiAiQyIgaW50MzJfdA0KdWl0ZXJfbmV4dDMyXzJfMihVQ2hhckl0ZXJhdG9y ICppdGVyKTsNCiMgMzYxICIuLi9jb21tb24vdW5pY29kZS91aXRlci5oIg0KZXh0ZXJuICJDIiBp bnQzMl90DQp1aXRlcl9wcmV2aW91czMyXzJfMihVQ2hhckl0ZXJhdG9yICppdGVyKTsNCiMgMzgz ICIuLi9jb21tb24vdW5pY29kZS91aXRlci5oIg0KZXh0ZXJuICJDIiB2b2lkDQp1aXRlcl9zZXRT dHJpbmdfMl8yKFVDaGFySXRlcmF0b3IgKml0ZXIsIGNvbnN0IFVDaGFyICpzLCBpbnQzMl90IGxl bmd0aCk7DQojIDQwNSAiLi4vY29tbW9uL3VuaWNvZGUvdWl0ZXIuaCINCmV4dGVybiAiQyIgdm9p ZA0KdWl0ZXJfc2V0Q2hhcmFjdGVySXRlcmF0b3JfMl8yKFVDaGFySXRlcmF0b3IgKml0ZXIsIENo YXJhY3Rlckl0ZXJhdG9yICpjaGFySXRlcik7DQojIDQyNyAiLi4vY29tbW9uL3VuaWNvZGUvdWl0 ZXIuaCINCmV4dGVybiAiQyIgdm9pZA0KdWl0ZXJfc2V0UmVwbGFjZWFibGVfMl8yKFVDaGFySXRl cmF0b3IgKml0ZXIsIGNvbnN0IFJlcGxhY2VhYmxlICpyZXApOw0KDQoNCg0KfQ0KIyAyMCAiLi4v Y29tbW9uL3VuaWNvZGUvdW5vcm0uaCIgMg0KIyAxMjQgIi4uL2NvbW1vbi91bmljb2RlL3Vub3Jt LmgiDQp0eXBlZGVmIGVudW0gew0KDQogIFVOT1JNX05PTkUgPSAxLA0KDQogIFVOT1JNX05GRCA9 IDIsDQoNCiAgVU5PUk1fTkZLRCA9IDMsDQoNCiAgVU5PUk1fTkZDID0gNCwNCg0KICBVTk9STV9E RUZBVUxUID0gVU5PUk1fTkZDLA0KDQogIFVOT1JNX05GS0MgPTUsDQoNCiAgVU5PUk1fRkNEID0g NiwNCg0KDQogIFVOT1JNX01PREVfQ09VTlQsDQoNCg0KDQoNCg0KDQoNCiAgVUNPTF9OT19OT1JN QUxJWkFUSU9OID0gMSwNCg0KDQoNCg0KICBVQ09MX0RFQ09NUF9DQU4gPSAyLA0KDQoNCg0KDQog IFVDT0xfREVDT01QX0NPTVBBVCA9IDMsDQoNCg0KDQoNCiAgVUNPTF9ERUZBVUxUX05PUk1BTEla QVRJT04gPSBVQ09MX0RFQ09NUF9DT01QQVQsDQoNCg0KDQoNCiAgVUNPTF9ERUNPTVBfQ0FOX0NP TVBfQ09NUEFUID0gNCwNCg0KDQoNCg0KICBVQ09MX0RFQ09NUF9DT01QQVRfQ09NUF9DQU4gPTUs DQoNCg0KDQoNCg0KICBVQ09MX0lHTk9SRV9IQU5HVUwgPSAxNiwNCg0KDQoNCg0KICBVTk9STV9J R05PUkVfSEFOR1VMID0gMTYNCn0gVU5vcm1hbGl6YXRpb25Nb2RlOw0KIyAyMDcgIi4uL2NvbW1v bi91bmljb2RlL3Vub3JtLmgiDQpleHRlcm4gIkMiIGludDMyX3QNCnVub3JtX25vcm1hbGl6ZV8y XzIoY29uc3QgVUNoYXIgKnNvdXJjZSwgaW50MzJfdCBzb3VyY2VMZW5ndGgsDQogICAgICAgICAg ICAgICAgVU5vcm1hbGl6YXRpb25Nb2RlIG1vZGUsIGludDMyX3Qgb3B0aW9ucywNCiAgICAgICAg ICAgICAgICBVQ2hhciAqcmVzdWx0LCBpbnQzMl90IHJlc3VsdExlbmd0aCwNCiAgICAgICAgICAg ICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOw0KIyAyMjUgIi4uL2NvbW1vbi91bmljb2RlL3Vub3Jt LmgiDQp0eXBlZGVmIGVudW0gVU5vcm1hbGl6YXRpb25DaGVja1Jlc3VsdCB7DQoNCg0KDQogIFVO T1JNX05PLA0KDQoNCg0KICBVTk9STV9ZRVMsDQoNCg0KDQoNCiAgVU5PUk1fTUFZQkUNCn0gVU5v cm1hbGl6YXRpb25DaGVja1Jlc3VsdDsNCiMgMjYxICIuLi9jb21tb24vdW5pY29kZS91bm9ybS5o Ig0KZXh0ZXJuICJDIiBVTm9ybWFsaXphdGlvbkNoZWNrUmVzdWx0DQp1bm9ybV9xdWlja0NoZWNr XzJfMihjb25zdCBVQ2hhciAqc291cmNlLCBpbnQzMl90IHNvdXJjZWxlbmd0aCwNCiAgICAgICAg ICAgICAgICAgVU5vcm1hbGl6YXRpb25Nb2RlIG1vZGUsDQogICAgICAgICAgICAgICAgIFVFcnJv ckNvZGUgKnN0YXR1cyk7DQojIDI4NyAiLi4vY29tbW9uL3VuaWNvZGUvdW5vcm0uaCINCmV4dGVy biAiQyIgVUJvb2wNCnVub3JtX2lzTm9ybWFsaXplZF8yXzIoY29uc3QgVUNoYXIgKnNyYywgaW50 MzJfdCBzcmNMZW5ndGgsDQogICAgICAgICAgICAgICAgICAgVU5vcm1hbGl6YXRpb25Nb2RlIG1v ZGUsDQogICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7DQojIDM2NSAi Li4vY29tbW9uL3VuaWNvZGUvdW5vcm0uaCINCmV4dGVybiAiQyIgaW50MzJfdA0KdW5vcm1fbmV4 dF8yXzIoVUNoYXJJdGVyYXRvciAqc3JjLA0KICAgICAgICAgICBVQ2hhciAqZGVzdCwgaW50MzJf dCBkZXN0Q2FwYWNpdHksDQogICAgICAgICAgIFVOb3JtYWxpemF0aW9uTW9kZSBtb2RlLCBpbnQz Ml90IG9wdGlvbnMsDQogICAgICAgICAgIFVCb29sIGRvTm9ybWFsaXplLCBVQm9vbCAqcE5lZWRl ZFRvTm9ybWFsaXplLA0KICAgICAgICAgICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsNCiMgMzk4 ICIuLi9jb21tb24vdW5pY29kZS91bm9ybS5oIg0KZXh0ZXJuICJDIiBpbnQzMl90DQp1bm9ybV9w cmV2aW91c18yXzIoVUNoYXJJdGVyYXRvciAqc3JjLA0KICAgICAgICAgICAgICAgVUNoYXIgKmRl c3QsIGludDMyX3QgZGVzdENhcGFjaXR5LA0KICAgICAgICAgICAgICAgVU5vcm1hbGl6YXRpb25N b2RlIG1vZGUsIGludDMyX3Qgb3B0aW9ucywNCiAgICAgICAgICAgICAgIFVCb29sIGRvTm9ybWFs aXplLCBVQm9vbCAqcE5lZWRlZFRvTm9ybWFsaXplLA0KICAgICAgICAgICAgICAgVUVycm9yQ29k ZSAqcEVycm9yQ29kZSk7DQojIDQ0MiAiLi4vY29tbW9uL3VuaWNvZGUvdW5vcm0uaCINCmV4dGVy biAiQyIgaW50MzJfdA0KdW5vcm1fY29uY2F0ZW5hdGVfMl8yKGNvbnN0IFVDaGFyICpsZWZ0LCBp bnQzMl90IGxlZnRMZW5ndGgsDQogICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAqcmlnaHQs IGludDMyX3QgcmlnaHRMZW5ndGgsDQogICAgICAgICAgICAgICAgICBVQ2hhciAqZGVzdCwgaW50 MzJfdCBkZXN0Q2FwYWNpdHksDQogICAgICAgICAgICAgICAgICBVTm9ybWFsaXphdGlvbk1vZGUg bW9kZSwgaW50MzJfdCBvcHRpb25zLA0KICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqcEVy cm9yQ29kZSk7DQojIDUzNyAiLi4vY29tbW9uL3VuaWNvZGUvdW5vcm0uaCINCmV4dGVybiAiQyIg aW50MzJfdA0KdW5vcm1fY29tcGFyZV8yXzIoY29uc3QgVUNoYXIgKnMxLCBpbnQzMl90IGxlbmd0 aDEsDQogICAgICAgICAgICAgIGNvbnN0IFVDaGFyICpzMiwgaW50MzJfdCBsZW5ndGgyLA0KICAg ICAgICAgICAgICB1aW50MzJfdCBvcHRpb25zLA0KICAgICAgICAgICAgICBVRXJyb3JDb2RlICpw RXJyb3JDb2RlKTsNCiMgMTMgInVuaWNvZGUvdWNvbC5oIiAyDQojIDEgIi4uL2NvbW1vbi91bmlj b2RlL3BhcnNlZXJyLmgiIDENCiMgMjEgIi4uL2NvbW1vbi91bmljb2RlL3BhcnNlZXJyLmgiDQpl bnVtIHsgVV9QQVJTRV9DT05URVhUX0xFTiA9IDE2IH07DQojIDQwICIuLi9jb21tb24vdW5pY29k ZS9wYXJzZWVyci5oIg0KdHlwZWRlZiBzdHJ1Y3QgX1VQYXJzZUVycm9yIHsNCiMgNjIgIi4uL2Nv bW1vbi91bmljb2RlL3BhcnNlZXJyLmgiDQogICAgaW50MzJfdCBsaW5lOw0KIyA3MiAiLi4vY29t bW9uL3VuaWNvZGUvcGFyc2VlcnIuaCINCiAgICBpbnQzMl90IG9mZnNldDsNCg0KDQoNCg0KDQog ICAgVUNoYXIgcHJlQ29udGV4dFtVX1BBUlNFX0NPTlRFWFRfTEVOXTsNCg0KDQoNCg0KDQogICAg VUNoYXIgcG9zdENvbnRleHRbVV9QQVJTRV9DT05URVhUX0xFTl07DQoNCn0gVVBhcnNlRXJyb3I7 DQojIDE0ICJ1bmljb2RlL3Vjb2wuaCIgMg0KIyAxICIuLi9jb21tb24vdW5pY29kZS91bG9jLmgi IDENCiMgMjYyICIuLi9jb21tb24vdW5pY29kZS91bG9jLmgiDQp0eXBlZGVmIGVudW0gew0KDQog IFVMT0NfQUNUVUFMX0xPQ0FMRSA9IDAsDQoNCiAgVUxPQ19WQUxJRF9MT0NBTEUgPSAxLA0KDQog IFVMT0NfUkVRVUVTVEVEX0xPQ0FMRSA9IDIsDQogIFVMT0NfREFUQV9MT0NBTEVfVFlQRV9MSU1J VA0KfSBVTG9jRGF0YUxvY2FsZVR5cGUgOw0KIyAyODIgIi4uL2NvbW1vbi91bmljb2RlL3Vsb2Mu aCINCmV4dGVybiAiQyIgY29uc3QgY2hhcioNCnVsb2NfZ2V0RGVmYXVsdF8yXzIodm9pZCk7DQoj IDI5NCAiLi4vY29tbW9uL3VuaWNvZGUvdWxvYy5oIg0KZXh0ZXJuICJDIiB2b2lkDQp1bG9jX3Nl dERlZmF1bHRfMl8yKGNvbnN0IGNoYXIqIGxvY2FsZUlELA0KICAgICAgICBVRXJyb3JDb2RlKiBz dGF0dXMpOw0KIyAzMTAgIi4uL2NvbW1vbi91bmljb2RlL3Vsb2MuaCINCmV4dGVybiAiQyIgaW50 MzJfdA0KdWxvY19nZXRMYW5ndWFnZV8yXzIoY29uc3QgY2hhciogbG9jYWxlSUQsDQogICAgICAg ICBjaGFyKiBsYW5ndWFnZSwNCiAgICAgICAgIGludDMyX3QgbGFuZ3VhZ2VDYXBhY2l0eSwNCiAg ICAgICAgIFVFcnJvckNvZGUqIGVycik7DQojIDMyOCAiLi4vY29tbW9uL3VuaWNvZGUvdWxvYy5o Ig0KZXh0ZXJuICJDIiBpbnQzMl90DQp1bG9jX2dldENvdW50cnlfMl8yKGNvbnN0IGNoYXIqIGxv Y2FsZUlELA0KICAgICAgICBjaGFyKiBjb3VudHJ5LA0KICAgICAgICBpbnQzMl90IGNvdW50cnlD YXBhY2l0eSwNCiAgICAgICAgVUVycm9yQ29kZSogZXJyKTsNCiMgMzQ2ICIuLi9jb21tb24vdW5p Y29kZS91bG9jLmgiDQpleHRlcm4gIkMiIGludDMyX3QNCnVsb2NfZ2V0VmFyaWFudF8yXzIoY29u c3QgY2hhciogbG9jYWxlSUQsDQogICAgICAgIGNoYXIqIHZhcmlhbnQsDQogICAgICAgIGludDMy X3QgdmFyaWFudENhcGFjaXR5LA0KICAgICAgICBVRXJyb3JDb2RlKiBlcnIpOw0KIyAzNjggIi4u L2NvbW1vbi91bmljb2RlL3Vsb2MuaCINCmV4dGVybiAiQyIgaW50MzJfdA0KdWxvY19nZXROYW1l XzJfMihjb25zdCBjaGFyKiBsb2NhbGVJRCwNCiAgICAgICAgIGNoYXIqIG5hbWUsDQogICAgICAg ICBpbnQzMl90IG5hbWVDYXBhY2l0eSwNCiAgICAgICAgIFVFcnJvckNvZGUqIGVycik7DQojIDM4 MSAiLi4vY29tbW9uL3VuaWNvZGUvdWxvYy5oIg0KZXh0ZXJuICJDIiBjb25zdCBjaGFyKg0KdWxv Y19nZXRJU08zTGFuZ3VhZ2VfMl8yKGNvbnN0IGNoYXIqIGxvY2FsZUlEKTsNCiMgMzkyICIuLi9j b21tb24vdW5pY29kZS91bG9jLmgiDQpleHRlcm4gIkMiIGNvbnN0IGNoYXIqDQp1bG9jX2dldElT TzNDb3VudHJ5XzJfMihjb25zdCBjaGFyKiBsb2NhbGVJRCk7DQojIDQwMiAiLi4vY29tbW9uL3Vu aWNvZGUvdWxvYy5oIg0KZXh0ZXJuICJDIiB1aW50MzJfdA0KdWxvY19nZXRMQ0lEXzJfMihjb25z dCBjaGFyKiBsb2NhbGVJRCk7DQojIDQyMSAiLi4vY29tbW9uL3VuaWNvZGUvdWxvYy5oIg0KZXh0 ZXJuICJDIiBpbnQzMl90DQp1bG9jX2dldERpc3BsYXlMYW5ndWFnZV8yXzIoY29uc3QgY2hhciog bG9jYWxlLA0KICAgICAgICAgICAgY29uc3QgY2hhciogaW5Mb2NhbGUsDQogICAgICAgICAgICBV Q2hhciogbGFuZ3VhZ2UsDQogICAgICAgICAgICBpbnQzMl90IGxhbmd1YWdlQ2FwYWNpdHksDQog ICAgICAgICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOw0KIyA0NDQgIi4uL2NvbW1vbi91bmljb2Rl L3Vsb2MuaCINCmV4dGVybiAiQyIgaW50MzJfdA0KdWxvY19nZXREaXNwbGF5Q291bnRyeV8yXzIo Y29uc3QgY2hhciogbG9jYWxlLA0KICAgICAgICAgICAgY29uc3QgY2hhciogaW5Mb2NhbGUsDQog ICAgICAgICAgICBVQ2hhciogY291bnRyeSwNCiAgICAgICAgICAgIGludDMyX3QgY291bnRyeUNh cGFjaXR5LA0KICAgICAgICAgICAgVUVycm9yQ29kZSogc3RhdHVzKTsNCiMgNDY4ICIuLi9jb21t b24vdW5pY29kZS91bG9jLmgiDQpleHRlcm4gIkMiIGludDMyX3QNCnVsb2NfZ2V0RGlzcGxheVZh cmlhbnRfMl8yKGNvbnN0IGNoYXIqIGxvY2FsZSwNCiAgICAgICAgICAgIGNvbnN0IGNoYXIqIGlu TG9jYWxlLA0KICAgICAgICAgICAgICAgVUNoYXIqIHZhcmlhbnQsDQogICAgICAgICAgICAgaW50 MzJfdCB2YXJpYW50Q2FwYWNpdHksDQogICAgICAgICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOw0K IyA0OTEgIi4uL2NvbW1vbi91bmljb2RlL3Vsb2MuaCINCmV4dGVybiAiQyIgaW50MzJfdA0KdWxv Y19nZXREaXNwbGF5TmFtZV8yXzIoY29uc3QgY2hhciogbG9jYWxlSUQsDQogICAgICAgICAgICBj b25zdCBjaGFyKiBpbkxvY2FsZUlELA0KICAgICAgICAgICAgVUNoYXIqIHJlc3VsdCwNCiAgICAg ICAgICAgIGludDMyX3QgbWF4UmVzdWx0U2l6ZSwNCiAgICAgICAgICAgIFVFcnJvckNvZGUqIGVy cik7DQojIDUwOSAiLi4vY29tbW9uL3VuaWNvZGUvdWxvYy5oIg0KZXh0ZXJuICJDIiBjb25zdCBj aGFyKg0KdWxvY19nZXRBdmFpbGFibGVfMl8yKGludDMyX3Qgbik7DQoNCg0KDQoNCg0KDQoNCmV4 dGVybiAiQyIgaW50MzJfdCB1bG9jX2NvdW50QXZhaWxhYmxlXzJfMih2b2lkKTsNCiMgNTI5ICIu Li9jb21tb24vdW5pY29kZS91bG9jLmgiDQpleHRlcm4gIkMiIGNvbnN0IGNoYXIqIGNvbnN0Kg0K dWxvY19nZXRJU09MYW5ndWFnZXNfMl8yKHZvaWQpOw0KIyA1NDEgIi4uL2NvbW1vbi91bmljb2Rl L3Vsb2MuaCINCmV4dGVybiAiQyIgY29uc3QgY2hhciogY29uc3QqDQp1bG9jX2dldElTT0NvdW50 cmllc18yXzIodm9pZCk7DQojIDU1NyAiLi4vY29tbW9uL3VuaWNvZGUvdWxvYy5oIg0KZXh0ZXJu ICJDIiBpbnQzMl90DQp1bG9jX2dldFBhcmVudF8yXzIoY29uc3QgY2hhciogbG9jYWxlSUQsDQog ICAgICAgICAgICAgICAgIGNoYXIqIHBhcmVudCwNCiAgICAgICAgICAgICAgICAgaW50MzJfdCBw YXJlbnRDYXBhY2l0eSwNCiAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogZXJyKTsNCiMgMTUg InVuaWNvZGUvdWNvbC5oIiAyDQojIDUyICJ1bmljb2RlL3Vjb2wuaCINCnN0cnVjdCBjb2xsSXRl cmF0ZTsNCg0KdHlwZWRlZiBzdHJ1Y3QgY29sbEl0ZXJhdGUgY29sbEl0ZXJhdGU7DQoNCg0KDQoN CnN0cnVjdCBVQ29sbGF0b3I7DQoNCnR5cGVkZWYgc3RydWN0IFVDb2xsYXRvciBVQ29sbGF0b3I7 DQojIDc0ICJ1bmljb2RlL3Vjb2wuaCINCnR5cGVkZWYgZW51bSB7DQoNCiAgVUNPTF9FUVVBTCA9 IDAsDQoNCiAgVUNPTF9HUkVBVEVSID0gMSwNCg0KICBVQ09MX0xFU1MgPSAtMQ0KfSBVQ29sbGF0 aW9uUmVzdWx0IDsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgZW51bSB7DQoNCiAgVUNPTF9ERUZBVUxU ID0gLTEsDQoNCg0KICBVQ09MX1BSSU1BUlkgPSAwLA0KDQogIFVDT0xfU0VDT05EQVJZID0gMSwN Cg0KICBVQ09MX1RFUlRJQVJZID0gMiwNCg0KICBVQ09MX0RFRkFVTFRfU1RSRU5HVEggPSBVQ09M X1RFUlRJQVJZLA0KICBVQ09MX0NFX1NUUkVOR1RIX0xJTUlULA0KDQogIFVDT0xfUVVBVEVSTkFS WT0zLA0KDQogIFVDT0xfSURFTlRJQ0FMPTE1LA0KICBVQ09MX1NUUkVOR1RIX0xJTUlULA0KDQoN Cg0KDQogIFVDT0xfT0ZGID0gMTYsDQoNCg0KDQogIFVDT0xfT04gPSAxNywNCg0KDQogIFVDT0xf U0hJRlRFRCA9IDIwLA0KDQogIFVDT0xfTk9OX0lHTk9SQUJMRSA9IDIxLA0KDQoNCg0KICBVQ09M X0xPV0VSX0ZJUlNUID0gMjQsDQoNCiAgVUNPTF9VUFBFUl9GSVJTVCA9IDI1LA0KDQogIFVDT0xf QVRUUklCVVRFX1ZBTFVFX0NPVU5UDQoNCn0gVUNvbEF0dHJpYnV0ZVZhbHVlOw0KIyAxNTYgInVu aWNvZGUvdWNvbC5oIg0KdHlwZWRlZiBVQ29sQXR0cmlidXRlVmFsdWUgVUNvbGxhdGlvblN0cmVu Z3RoOw0KDQoNCg0KdHlwZWRlZiBlbnVtIHsNCg0KDQoNCg0KICAgICBVQ09MX0ZSRU5DSF9DT0xM QVRJT04sDQojIDE3NCAidW5pY29kZS91Y29sLmgiDQogICAgIFVDT0xfQUxURVJOQVRFX0hBTkRM SU5HLA0KDQoNCg0KDQoNCg0KICAgICBVQ09MX0NBU0VfRklSU1QsDQoNCg0KDQoNCg0KDQoNCiAg ICAgVUNPTF9DQVNFX0xFVkVMLA0KDQoNCg0KDQoNCg0KDQogICAgIFVDT0xfTk9STUFMSVpBVElP Tl9NT0RFLA0KDQogICAgIFVDT0xfREVDT01QT1NJVElPTl9NT0RFID0gVUNPTF9OT1JNQUxJWkFU SU9OX01PREUsDQojIDIxMCAidW5pY29kZS91Y29sLmgiDQogICAgIFVDT0xfU1RSRU5HVEgsDQoN Cg0KDQoNCg0KICAgICBVQ09MX0hJUkFHQU5BX1FVQVRFUk5BUllfTU9ERSwNCiAgICAgVUNPTF9B VFRSSUJVVEVfQ09VTlQNCn0gVUNvbEF0dHJpYnV0ZTsNCg0KDQp0eXBlZGVmIGVudW0gew0KDQog IFVDT0xfVEFJTE9SSU5HX09OTFksDQoNCiAgVUNPTF9GVUxMX1JVTEVTDQp9IFVDb2xSdWxlT3B0 aW9uIDsNCiMgMjQ1ICJ1bmljb2RlL3Vjb2wuaCINCmV4dGVybiAiQyIgVUNvbGxhdG9yKg0KdWNv bF9vcGVuXzJfMihjb25zdCBjaGFyICpsb2MsIFVFcnJvckNvZGUgKnN0YXR1cyk7DQojIDI3MyAi dW5pY29kZS91Y29sLmgiDQpleHRlcm4gIkMiIFVDb2xsYXRvcioNCnVjb2xfb3BlblJ1bGVzXzJf MiggY29uc3QgVUNoYXIgKnJ1bGVzLA0KICAgICAgICAgICAgICAgIGludDMyX3QgcnVsZXNMZW5n dGgsDQogICAgICAgICAgICAgICAgVUNvbEF0dHJpYnV0ZVZhbHVlIG5vcm1hbGl6YXRpb25Nb2Rl LA0KICAgICAgICAgICAgICAgIFVDb2xsYXRpb25TdHJlbmd0aCBzdHJlbmd0aCwNCiAgICAgICAg ICAgICAgICBVUGFyc2VFcnJvciAqcGFyc2VFcnJvciwNCiAgICAgICAgICAgICAgICBVRXJyb3JD b2RlICpzdGF0dXMpOw0KIyAyOTEgInVuaWNvZGUvdWNvbC5oIg0KZXh0ZXJuICJDIiB2b2lkDQp1 Y29sX2Nsb3NlXzJfMihVQ29sbGF0b3IgKmNvbGwpOw0KIyAzMDkgInVuaWNvZGUvdWNvbC5oIg0K ZXh0ZXJuICJDIiBVQ29sbGF0aW9uUmVzdWx0DQp1Y29sX3N0cmNvbGxfMl8yKCBjb25zdCBVQ29s bGF0b3IgKmNvbGwsDQogICAgICAgIGNvbnN0IFVDaGFyICpzb3VyY2UsDQogICAgICAgIGludDMy X3Qgc291cmNlTGVuZ3RoLA0KICAgICAgICBjb25zdCBVQ2hhciAqdGFyZ2V0LA0KICAgICAgICBp bnQzMl90IHRhcmdldExlbmd0aCk7DQojIDMzMCAidW5pY29kZS91Y29sLmgiDQpleHRlcm4gIkMi IFVCb29sDQp1Y29sX2dyZWF0ZXJfMl8yKGNvbnN0IFVDb2xsYXRvciAqY29sbCwNCiAgICAgICAg ICAgICBjb25zdCBVQ2hhciAqc291cmNlLCBpbnQzMl90IHNvdXJjZUxlbmd0aCwNCiAgICAgICAg ICAgICBjb25zdCBVQ2hhciAqdGFyZ2V0LCBpbnQzMl90IHRhcmdldExlbmd0aCk7DQojIDM0OSAi dW5pY29kZS91Y29sLmgiDQpleHRlcm4gIkMiIFVCb29sDQp1Y29sX2dyZWF0ZXJPckVxdWFsXzJf Mihjb25zdCBVQ29sbGF0b3IgKmNvbGwsDQogICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFy ICpzb3VyY2UsIGludDMyX3Qgc291cmNlTGVuZ3RoLA0KICAgICAgICAgICAgICAgICAgICBjb25z dCBVQ2hhciAqdGFyZ2V0LCBpbnQzMl90IHRhcmdldExlbmd0aCk7DQojIDM2OCAidW5pY29kZS91 Y29sLmgiDQpleHRlcm4gIkMiIFVCb29sDQp1Y29sX2VxdWFsXzJfMihjb25zdCBVQ29sbGF0b3Ig KmNvbGwsDQogICAgICAgICAgIGNvbnN0IFVDaGFyICpzb3VyY2UsIGludDMyX3Qgc291cmNlTGVu Z3RoLA0KICAgICAgICAgICBjb25zdCBVQ2hhciAqdGFyZ2V0LCBpbnQzMl90IHRhcmdldExlbmd0 aCk7DQojIDM4MiAidW5pY29kZS91Y29sLmgiDQpleHRlcm4gIkMiIFVDb2xsYXRpb25TdHJlbmd0 aA0KdWNvbF9nZXRTdHJlbmd0aF8yXzIoY29uc3QgVUNvbGxhdG9yICpjb2xsKTsNCiMgMzk0ICJ1 bmljb2RlL3Vjb2wuaCINCmV4dGVybiAiQyIgdm9pZA0KdWNvbF9zZXRTdHJlbmd0aF8yXzIoVUNv bGxhdG9yICpjb2xsLA0KICAgICAgICAgICAgICAgICBVQ29sbGF0aW9uU3RyZW5ndGggc3RyZW5n dGgpOw0KIyA0MTAgInVuaWNvZGUvdWNvbC5oIg0KZXh0ZXJuICJDIiBpbnQzMl90DQp1Y29sX2dl dERpc3BsYXlOYW1lXzJfMiggY29uc3QgY2hhciAqb2JqTG9jLA0KICAgICAgICAgICAgY29uc3Qg Y2hhciAqZGlzcExvYywNCiAgICAgICAgICAgIFVDaGFyICpyZXN1bHQsDQogICAgICAgICAgICBp bnQzMl90IHJlc3VsdExlbmd0aCwNCiAgICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7DQoj IDQyNiAidW5pY29kZS91Y29sLmgiDQpleHRlcm4gIkMiIGNvbnN0IGNoYXIqDQp1Y29sX2dldEF2 YWlsYWJsZV8yXzIoaW50MzJfdCBpbmRleCk7DQojIDQzNyAidW5pY29kZS91Y29sLmgiDQpleHRl cm4gIkMiIGludDMyX3QNCnVjb2xfY291bnRBdmFpbGFibGVfMl8yKHZvaWQpOw0KIyA0NDggInVu aWNvZGUvdWNvbC5oIg0KZXh0ZXJuICJDIiBjb25zdCBVQ2hhcioNCnVjb2xfZ2V0UnVsZXNfMl8y KCBjb25zdCBVQ29sbGF0b3IgKmNvbGwsDQogICAgICAgIGludDMyX3QgKmxlbmd0aCk7DQojIDQ2 NCAidW5pY29kZS91Y29sLmgiDQpleHRlcm4gIkMiIGludDMyX3QNCnVjb2xfZ2V0U29ydEtleV8y XzIoY29uc3QgVUNvbGxhdG9yICpjb2xsLA0KICAgICAgICBjb25zdCBVQ2hhciAqc291cmNlLA0K ICAgICAgICBpbnQzMl90IHNvdXJjZUxlbmd0aCwNCiAgICAgICAgdWludDhfdCAqcmVzdWx0LA0K ICAgICAgICBpbnQzMl90IHJlc3VsdExlbmd0aCk7DQoNCg0KDQoNCg0KDQp0eXBlZGVmIGVudW0g ew0KDQogIFVDT0xfQk9VTkRfTE9XRVIgPSAwLA0KDQogIFVDT0xfQk9VTkRfVVBQRVIgPSAxLA0K DQogIFVDT0xfQk9VTkRfVVBQRVJfTE9ORyA9IDIsDQogIFVDT0xfQk9VTkRfVkFMVUVfQ09VTlQN Cn0gVUNvbEJvdW5kTW9kZTsNCiMgNTIzICJ1bmljb2RlL3Vjb2wuaCINCmV4dGVybiAiQyIgaW50 MzJfdA0KdWNvbF9nZXRCb3VuZF8yXzIoY29uc3QgdWludDhfdCAqc291cmNlLA0KICAgICAgICBp bnQzMl90IHNvdXJjZUxlbmd0aCwNCiAgICAgICAgVUNvbEJvdW5kTW9kZSBib3VuZFR5cGUsDQog ICAgICAgIHVpbnQzMl90IG5vT2ZMZXZlbHMsDQogICAgICAgIHVpbnQ4X3QgKnJlc3VsdCwNCiAg ICAgICAgaW50MzJfdCByZXN1bHRMZW5ndGgsDQogICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7 DQoNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgdm9pZA0KdWNvbF9nZXRWZXJzaW9uXzJfMihjb25z dCBVQ29sbGF0b3IqIGNvbGwsIFVWZXJzaW9uSW5mbyBpbmZvKTsNCiMgNTYyICJ1bmljb2RlL3Vj b2wuaCINCmV4dGVybiAiQyIgaW50MzJfdA0KdWNvbF9tZXJnZVNvcnRrZXlzXzJfMihjb25zdCB1 aW50OF90ICpzcmMxLCBpbnQzMl90IHNyYzFMZW5ndGgsDQogICAgICAgICAgICAgICAgICAgY29u c3QgdWludDhfdCAqc3JjMiwgaW50MzJfdCBzcmMyTGVuZ3RoLA0KICAgICAgICAgICAgICAgICAg IHVpbnQ4X3QgKmRlc3QsIGludDMyX3QgZGVzdENhcGFjaXR5KTsNCiMgNTc4ICJ1bmljb2RlL3Vj b2wuaCINCmV4dGVybiAiQyIgdm9pZA0KdWNvbF9zZXRBdHRyaWJ1dGVfMl8yKFVDb2xsYXRvciAq Y29sbCwgVUNvbEF0dHJpYnV0ZSBhdHRyLCBVQ29sQXR0cmlidXRlVmFsdWUgdmFsdWUsIFVFcnJv ckNvZGUgKnN0YXR1cyk7DQojIDU5MiAidW5pY29kZS91Y29sLmgiDQpleHRlcm4gIkMiIFVDb2xB dHRyaWJ1dGVWYWx1ZQ0KdWNvbF9nZXRBdHRyaWJ1dGVfMl8yKGNvbnN0IFVDb2xsYXRvciAqY29s bCwgVUNvbEF0dHJpYnV0ZSBhdHRyLCBVRXJyb3JDb2RlICpzdGF0dXMpOw0KIyA2MTQgInVuaWNv ZGUvdWNvbC5oIg0KZXh0ZXJuICJDIiB1aW50MzJfdA0KdWNvbF9zZXRWYXJpYWJsZVRvcF8yXzIo VUNvbGxhdG9yICpjb2xsLA0KICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAqdmFyVG9w LCBpbnQzMl90IGxlbiwNCiAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKTsN CiMgNjMwICJ1bmljb2RlL3Vjb2wuaCINCmV4dGVybiAiQyIgdWludDMyX3QgdWNvbF9nZXRWYXJp YWJsZVRvcF8yXzIoY29uc3QgVUNvbGxhdG9yICpjb2xsLCBVRXJyb3JDb2RlICpzdGF0dXMpOw0K IyA2NDMgInVuaWNvZGUvdWNvbC5oIg0KZXh0ZXJuICJDIiB2b2lkDQp1Y29sX3Jlc3RvcmVWYXJp YWJsZVRvcF8yXzIoVUNvbGxhdG9yICpjb2xsLCBjb25zdCB1aW50MzJfdCB2YXJUb3AsIFVFcnJv ckNvZGUgKnN0YXR1cyk7DQojIDY2OCAidW5pY29kZS91Y29sLmgiDQpleHRlcm4gIkMiIFVDb2xs YXRvcioNCnVjb2xfc2FmZUNsb25lXzJfMihjb25zdCBVQ29sbGF0b3IgKmNvbGwsDQogICAgICAg ICAgICAgICB2b2lkICpzdGFja0J1ZmZlciwNCiAgICAgICAgICAgICAgIGludDMyX3QgKnBCdWZm ZXJTaXplLA0KICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKTsNCiMgNjg4ICJ1bmlj b2RlL3Vjb2wuaCINCmV4dGVybiAiQyIgaW50MzJfdA0KdWNvbF9nZXRSdWxlc0V4XzJfMihjb25z dCBVQ29sbGF0b3IgKmNvbGwsIFVDb2xSdWxlT3B0aW9uIGRlbHRhLCBVQ2hhciAqYnVmZmVyLCBp bnQzMl90IGJ1ZmZlckxlbik7DQoNCg0KDQoNCg0KDQojIDEgInVuaWNvZGUvdWNvbGVpdHIuaCIg MQ0KIyAyNSAidW5pY29kZS91Y29sZWl0ci5oIg0KIyAxICJ1bmljb2RlL3Vjb2wuaCIgMQ0KIyAy NiAidW5pY29kZS91Y29sZWl0ci5oIiAyDQoNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3QgVUNvbGxh dGlvbkVsZW1lbnRzIFVDb2xsYXRpb25FbGVtZW50czsNCiMgMTA0ICJ1bmljb2RlL3Vjb2xlaXRy LmgiDQpleHRlcm4gIkMiIFVDb2xsYXRpb25FbGVtZW50cyoNCnVjb2xfb3BlbkVsZW1lbnRzXzJf Mihjb25zdCBVQ29sbGF0b3IgKmNvbGwsDQogICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAq dGV4dCwNCiAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgdGV4dExlbmd0aCwNCiAgICAg ICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7DQojIDExNyAidW5pY29kZS91 Y29sZWl0ci5oIg0KZXh0ZXJuICJDIiBpbnQzMl90DQp1Y29sX2tleUhhc2hDb2RlXzJfMihjb25z dCB1aW50OF90KiBrZXksIGludDMyX3QgbGVuZ3RoKTsNCg0KDQoNCg0KDQoNCg0KZXh0ZXJuICJD IiB2b2lkDQp1Y29sX2Nsb3NlRWxlbWVudHNfMl8yKFVDb2xsYXRpb25FbGVtZW50cyAqZWxlbXMp Ow0KIyAxMzggInVuaWNvZGUvdWNvbGVpdHIuaCINCmV4dGVybiAiQyIgdm9pZA0KdWNvbF9yZXNl dF8yXzIoVUNvbGxhdGlvbkVsZW1lbnRzICplbGVtcyk7DQojIDE1MCAidW5pY29kZS91Y29sZWl0 ci5oIg0KZXh0ZXJuICJDIiBpbnQzMl90DQp1Y29sX25leHRfMl8yKFVDb2xsYXRpb25FbGVtZW50 cyAqZWxlbXMsIFVFcnJvckNvZGUgKnN0YXR1cyk7DQojIDE2OSAidW5pY29kZS91Y29sZWl0ci5o Ig0KZXh0ZXJuICJDIiBpbnQzMl90DQp1Y29sX3ByZXZpb3VzXzJfMihVQ29sbGF0aW9uRWxlbWVu dHMgKmVsZW1zLCBVRXJyb3JDb2RlICpzdGF0dXMpOw0KIyAxODMgInVuaWNvZGUvdWNvbGVpdHIu aCINCmV4dGVybiAiQyIgaW50MzJfdA0KdWNvbF9nZXRNYXhFeHBhbnNpb25fMl8yKGNvbnN0IFVD b2xsYXRpb25FbGVtZW50cyAqZWxlbXMsIGludDMyX3Qgb3JkZXIpOw0KIyAxOTggInVuaWNvZGUv dWNvbGVpdHIuaCINCmV4dGVybiAiQyIgdm9pZA0KdWNvbF9zZXRUZXh0XzJfMiggVUNvbGxhdGlv bkVsZW1lbnRzICplbGVtcywNCiAgICAgICAgICAgICBjb25zdCBVQ2hhciAqdGV4dCwNCiAgICAg ICAgICAgICAgICAgICBpbnQzMl90IHRleHRMZW5ndGgsDQogICAgICAgICAgICAgICAgICAgVUVy cm9yQ29kZSAqc3RhdHVzKTsNCiMgMjEzICJ1bmljb2RlL3Vjb2xlaXRyLmgiDQpleHRlcm4gIkMi IGludDMyX3QNCnVjb2xfZ2V0T2Zmc2V0XzJfMihjb25zdCBVQ29sbGF0aW9uRWxlbWVudHMgKmVs ZW1zKTsNCiMgMjI4ICJ1bmljb2RlL3Vjb2xlaXRyLmgiDQpleHRlcm4gIkMiIHZvaWQNCnVjb2xf c2V0T2Zmc2V0XzJfMihVQ29sbGF0aW9uRWxlbWVudHMgKmVsZW1zLA0KICAgICAgICAgICAgICAg aW50MzJfdCBvZmZzZXQsDQogICAgICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOw0KIyA2 OTcgInVuaWNvZGUvdWNvbC5oIiAyDQojIDcxOSAidW5pY29kZS91Y29sLmgiDQpleHRlcm4gIkMi IFVDb2xsYXRvciAqDQp1Y29sX29wZW5WZXJzaW9uXzJfMihjb25zdCBjaGFyICpsb2MsDQogICAg ICAgICAgICAgICAgIFVWZXJzaW9uSW5mbyB2ZXJzaW9uLA0KICAgICAgICAgICAgICAgICBVRXJy b3JDb2RlICpzdGF0dXMpOw0KIyA3MzIgInVuaWNvZGUvdWNvbC5oIg0KZXh0ZXJuICJDIiBVTm9y bWFsaXphdGlvbk1vZGUNCnVjb2xfZ2V0Tm9ybWFsaXphdGlvbl8yXzIoY29uc3QgVUNvbGxhdG9y KiBjb2xsKTsNCiMgNzQ1ICJ1bmljb2RlL3Vjb2wuaCINCmV4dGVybiAiQyIgdm9pZA0KdWNvbF9z ZXROb3JtYWxpemF0aW9uXzJfMiggVUNvbGxhdG9yICpjb2xsLA0KICAgICAgICAgICAgVU5vcm1h bGl6YXRpb25Nb2RlIG1vZGUpOw0KIyA3NjMgInVuaWNvZGUvdWNvbC5oIg0KZXh0ZXJuICJDIiBj b25zdCBjaGFyICoNCnVjb2xfZ2V0TG9jYWxlXzJfMihjb25zdCBVQ29sbGF0b3IgKmNvbGwsIFVM b2NEYXRhTG9jYWxlVHlwZSB0eXBlLCBVRXJyb3JDb2RlICpzdGF0dXMpOw0KIyAzMCAidWNvbF9p bXAuaCIgMg0KDQoNCiMgMSAiLi4vY29tbW9uL3VuaWNvZGUvdXJlcy5oIiAxDQojIDEyNSAiLi4v Y29tbW9uL3VuaWNvZGUvdXJlcy5oIg0Kc3RydWN0IFVSZXNvdXJjZUJ1bmRsZTsNCg0KDQoNCg0K dHlwZWRlZiBzdHJ1Y3QgVVJlc291cmNlQnVuZGxlIFVSZXNvdXJjZUJ1bmRsZTsNCg0KDQoNCg0K DQp0eXBlZGVmIGVudW0gew0KICAgIFJFU19OT05FPS0xLA0KICAgIFJFU19TVFJJTkc9MCwNCiAg ICBSRVNfQklOQVJZPTEsDQogICAgUkVTX1RBQkxFPTIsDQoNCg0KDQogICAgUkVTX0FMSUFTPTMs DQoNCiAgICBSRVNfSU5UPTcsDQogICAgUkVTX0FSUkFZPTgsDQoNCiAgICBSRVNfSU5UX1ZFQ1RP Uj0xNCwNCiAgICBSRVNfUkVTRVJWRUQ9MTUNCn0gVVJlc1R5cGU7DQojIDE4MyAiLi4vY29tbW9u L3VuaWNvZGUvdXJlcy5oIg0KZXh0ZXJuICJDIiBVUmVzb3VyY2VCdW5kbGUqDQp1cmVzX29wZW5f Ml8yKGNvbnN0IGNoYXIqIHBhdGgsDQogICAgICAgICAgY29uc3QgY2hhciogbG9jYWxlLA0KICAg ICAgICAgIFVFcnJvckNvZGUqIHN0YXR1cyk7DQojIDIwNSAiLi4vY29tbW9uL3VuaWNvZGUvdXJl cy5oIg0KZXh0ZXJuICJDIiBVUmVzb3VyY2VCdW5kbGUqDQp1cmVzX29wZW5EaXJlY3RfMl8yKGNv bnN0IGNoYXIqIHBhdGgsDQogICAgICAgICAgICAgICAgY29uc3QgY2hhciogbG9jYWxlLA0KICAg ICAgICAgICAgICAgIFVFcnJvckNvZGUqIHN0YXR1cyk7DQojIDIyOSAiLi4vY29tbW9uL3VuaWNv ZGUvdXJlcy5oIg0KZXh0ZXJuICJDIiBVUmVzb3VyY2VCdW5kbGUqDQp1cmVzX29wZW5XXzJfMihj b25zdCB3Y2hhcl90KiBwYXRoLA0KICAgICAgICAgICBjb25zdCBjaGFyKiBsb2NhbGUsDQogICAg ICAgICAgIFVFcnJvckNvZGUqIHN0YXR1cyk7DQojIDI0OCAiLi4vY29tbW9uL3VuaWNvZGUvdXJl cy5oIg0KZXh0ZXJuICJDIiBVUmVzb3VyY2VCdW5kbGUqDQp1cmVzX29wZW5VXzJfMihjb25zdCBV Q2hhciogcGF0aCwNCiAgICAgICAgICAgY29uc3QgY2hhciogbG9jYWxlLA0KICAgICAgICAgICBV RXJyb3JDb2RlKiBzdGF0dXMpOw0KIyAyNjkgIi4uL2NvbW1vbi91bmljb2RlL3VyZXMuaCINCmV4 dGVybiAiQyIgaW50MzJfdA0KdXJlc19jb3VudEFycmF5SXRlbXNfMl8yKGNvbnN0IFVSZXNvdXJj ZUJ1bmRsZSogcmVzb3VyY2VCdW5kbGUsDQogICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy KiByZXNvdXJjZUtleSwNCiAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqIGVycik7DQoj IDI4MSAiLi4vY29tbW9uL3VuaWNvZGUvdXJlcy5oIg0KZXh0ZXJuICJDIiB2b2lkDQp1cmVzX2Ns b3NlXzJfMihVUmVzb3VyY2VCdW5kbGUqIHJlc291cmNlQnVuZGxlKTsNCiMgMjk0ICIuLi9jb21t b24vdW5pY29kZS91cmVzLmgiDQpleHRlcm4gIkMiIGNvbnN0IGNoYXIqDQp1cmVzX2dldFZlcnNp b25OdW1iZXJfMl8yKGNvbnN0IFVSZXNvdXJjZUJ1bmRsZSogcmVzb3VyY2VCdW5kbGUpOw0KIyAz MDYgIi4uL2NvbW1vbi91bmljb2RlL3VyZXMuaCINCmV4dGVybiAiQyIgdm9pZA0KdXJlc19nZXRW ZXJzaW9uXzJfMihjb25zdCBVUmVzb3VyY2VCdW5kbGUqIHJlc0IsDQogICAgICAgICAgICAgICAg VVZlcnNpb25JbmZvIHZlcnNpb25JbmZvKTsNCiMgMzIxICIuLi9jb21tb24vdW5pY29kZS91cmVz LmgiDQpleHRlcm4gIkMiIGNvbnN0IGNoYXIqDQp1cmVzX2dldExvY2FsZV8yXzIoY29uc3QgVVJl c291cmNlQnVuZGxlKiByZXNvdXJjZUJ1bmRsZSwNCiAgICAgICAgICAgICAgIFVFcnJvckNvZGUq IHN0YXR1cyk7DQojIDMzOCAiLi4vY29tbW9uL3VuaWNvZGUvdXJlcy5oIg0KZXh0ZXJuICJDIiB2 b2lkDQp1cmVzX29wZW5GaWxsSW5fMl8yKFVSZXNvdXJjZUJ1bmRsZSAqciwNCiAgICAgICAgICAg ICAgICBjb25zdCBjaGFyKiBwYXRoLA0KICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGxvY2Fs ZUlELA0KICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqIHN0YXR1cyk7DQojIDM2MSAiLi4vY29t bW9uL3VuaWNvZGUvdXJlcy5oIg0KZXh0ZXJuICJDIiBjb25zdCBVQ2hhcioNCnVyZXNfZ2V0U3Ry aW5nXzJfMihjb25zdCBVUmVzb3VyY2VCdW5kbGUqIHJlc291cmNlQnVuZGxlLA0KICAgICAgICAg ICAgICAgaW50MzJfdCogbGVuLA0KICAgICAgICAgICAgICAgVUVycm9yQ29kZSogc3RhdHVzKTsN CiMgMzgzICIuLi9jb21tb24vdW5pY29kZS91cmVzLmgiDQpleHRlcm4gIkMiIGNvbnN0IHVpbnQ4 X3QqDQp1cmVzX2dldEJpbmFyeV8yXzIoY29uc3QgVVJlc291cmNlQnVuZGxlKiByZXNvdXJjZUJ1 bmRsZSwNCiAgICAgICAgICAgICAgIGludDMyX3QqIGxlbiwNCiAgICAgICAgICAgICAgIFVFcnJv ckNvZGUqIHN0YXR1cyk7DQojIDQwNSAiLi4vY29tbW9uL3VuaWNvZGUvdXJlcy5oIg0KZXh0ZXJu ICJDIiBjb25zdCBpbnQzMl90Kg0KdXJlc19nZXRJbnRWZWN0b3JfMl8yKGNvbnN0IFVSZXNvdXJj ZUJ1bmRsZSogcmVzb3VyY2VCdW5kbGUsDQogICAgICAgICAgICAgICAgICBpbnQzMl90KiBsZW4s DQogICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlKiBzdGF0dXMpOw0KIyA0MjYgIi4uL2NvbW1v bi91bmljb2RlL3VyZXMuaCINCmV4dGVybiAiQyIgdWludDMyX3QNCnVyZXNfZ2V0VUludF8yXzIo Y29uc3QgVVJlc291cmNlQnVuZGxlKiByZXNvdXJjZUJ1bmRsZSwNCiAgICAgICAgICAgICBVRXJy b3JDb2RlICpzdGF0dXMpOw0KIyA0NDYgIi4uL2NvbW1vbi91bmljb2RlL3VyZXMuaCINCmV4dGVy biAiQyIgaW50MzJfdA0KdXJlc19nZXRJbnRfMl8yKGNvbnN0IFVSZXNvdXJjZUJ1bmRsZSogcmVz b3VyY2VCdW5kbGUsDQogICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOw0KIyA0NjEgIi4u L2NvbW1vbi91bmljb2RlL3VyZXMuaCINCmV4dGVybiAiQyIgaW50MzJfdA0KdXJlc19nZXRTaXpl XzJfMihVUmVzb3VyY2VCdW5kbGUgKnJlc291cmNlQnVuZGxlKTsNCiMgNDcyICIuLi9jb21tb24v dW5pY29kZS91cmVzLmgiDQpleHRlcm4gIkMiIFVSZXNUeXBlDQp1cmVzX2dldFR5cGVfMl8yKFVS ZXNvdXJjZUJ1bmRsZSAqcmVzb3VyY2VCdW5kbGUpOw0KIyA0ODMgIi4uL2NvbW1vbi91bmljb2Rl L3VyZXMuaCINCmV4dGVybiAiQyIgY29uc3QgY2hhciAqDQp1cmVzX2dldEtleV8yXzIoVVJlc291 cmNlQnVuZGxlICpyZXNCKTsNCiMgNDk2ICIuLi9jb21tb24vdW5pY29kZS91cmVzLmgiDQpleHRl cm4gIkMiIHZvaWQNCnVyZXNfcmVzZXRJdGVyYXRvcl8yXzIoVVJlc291cmNlQnVuZGxlICpyZXNv dXJjZUJ1bmRsZSk7DQojIDUwNiAiLi4vY29tbW9uL3VuaWNvZGUvdXJlcy5oIg0KZXh0ZXJuICJD IiBVQm9vbA0KdXJlc19oYXNOZXh0XzJfMihVUmVzb3VyY2VCdW5kbGUgKnJlc291cmNlQnVuZGxl KTsNCiMgNTIxICIuLi9jb21tb24vdW5pY29kZS91cmVzLmgiDQpleHRlcm4gIkMiIFVSZXNvdXJj ZUJ1bmRsZSoNCnVyZXNfZ2V0TmV4dFJlc291cmNlXzJfMihVUmVzb3VyY2VCdW5kbGUgKnJlc291 cmNlQnVuZGxlLA0KICAgICAgICAgICAgICAgICAgICAgVVJlc291cmNlQnVuZGxlICpmaWxsSW4s DQogICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOw0KIyA1MzggIi4uL2Nv bW1vbi91bmljb2RlL3VyZXMuaCINCmV4dGVybiAiQyIgY29uc3QgVUNoYXIqDQp1cmVzX2dldE5l eHRTdHJpbmdfMl8yKFVSZXNvdXJjZUJ1bmRsZSAqcmVzb3VyY2VCdW5kbGUsDQogICAgICAgICAg ICAgICAgICAgaW50MzJfdCogbGVuLA0KICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiog a2V5LA0KICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7DQojIDU1NiAiLi4v Y29tbW9uL3VuaWNvZGUvdXJlcy5oIg0KZXh0ZXJuICJDIiBVUmVzb3VyY2VCdW5kbGUqDQp1cmVz X2dldEJ5SW5kZXhfMl8yKGNvbnN0IFVSZXNvdXJjZUJ1bmRsZSAqcmVzb3VyY2VCdW5kbGUsDQog ICAgICAgICAgICAgICAgaW50MzJfdCBpbmRleFIsDQogICAgICAgICAgICAgICAgVVJlc291cmNl QnVuZGxlICpmaWxsSW4sDQogICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKTsNCiMg NTczICIuLi9jb21tb24vdW5pY29kZS91cmVzLmgiDQpleHRlcm4gIkMiIGNvbnN0IFVDaGFyKg0K dXJlc19nZXRTdHJpbmdCeUluZGV4XzJfMihjb25zdCBVUmVzb3VyY2VCdW5kbGUgKnJlc0IsDQog ICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBpbmRleFMsDQogICAgICAgICAgICAgICAgICAg ICAgaW50MzJfdCogbGVuLA0KICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1 cyk7DQojIDU5MSAiLi4vY29tbW9uL3VuaWNvZGUvdXJlcy5oIg0KZXh0ZXJuICJDIiBVUmVzb3Vy Y2VCdW5kbGUqDQp1cmVzX2dldEJ5S2V5XzJfMihjb25zdCBVUmVzb3VyY2VCdW5kbGUgKnJlc291 cmNlQnVuZGxlLA0KICAgICAgICAgICAgICBjb25zdCBjaGFyKiBrZXksDQogICAgICAgICAgICAg IFVSZXNvdXJjZUJ1bmRsZSAqZmlsbEluLA0KICAgICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0 dXMpOw0KIyA2MDkgIi4uL2NvbW1vbi91bmljb2RlL3VyZXMuaCINCmV4dGVybiAiQyIgY29uc3Qg VUNoYXIqDQp1cmVzX2dldFN0cmluZ0J5S2V5XzJfMihjb25zdCBVUmVzb3VyY2VCdW5kbGUgKnJl c0IsDQogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGtleSwNCiAgICAgICAgICAgICAg ICAgICAgaW50MzJfdCogbGVuLA0KICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0 dXMpOw0KDQoNCg0KDQpuYW1lc3BhY2UgaWN1XzJfMiB7DQojIDYzMCAiLi4vY29tbW9uL3VuaWNv ZGUvdXJlcy5oIg0KaW5saW5lIFVuaWNvZGVTdHJpbmcNCnVyZXNfZ2V0VW5pY29kZVN0cmluZyhj b25zdCBVUmVzb3VyY2VCdW5kbGUgKnJlc0IsDQogICAgICAgICAgICAgICAgICAgICAgVUVycm9y Q29kZSogc3RhdHVzKQ0Kew0KICAgIGludDMyX3QgbGVuID0gMDsNCiAgICBjb25zdCBVQ2hhciAq ciA9IHVyZXNfZ2V0U3RyaW5nXzJfMihyZXNCLCAmbGVuLCBzdGF0dXMpOw0KICAgIHJldHVybiBV bmljb2RlU3RyaW5nKDEsIHIsIGxlbik7DQp9DQojIDY0OSAiLi4vY29tbW9uL3VuaWNvZGUvdXJl cy5oIg0KaW5saW5lIFVuaWNvZGVTdHJpbmcNCnVyZXNfZ2V0TmV4dFVuaWNvZGVTdHJpbmcoVVJl c291cmNlQnVuZGxlICpyZXNCLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICoqIGtleSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogc3RhdHVzKQ0K ew0KICAgIGludDMyX3QgbGVuID0gMDsNCiAgICBjb25zdCBVQ2hhciogciA9IHVyZXNfZ2V0TmV4 dFN0cmluZ18yXzIocmVzQiwgJmxlbiwga2V5LCBzdGF0dXMpOw0KICAgIHJldHVybiBVbmljb2Rl U3RyaW5nKDEsIHIsIGxlbik7DQp9DQojIDY2OCAiLi4vY29tbW9uL3VuaWNvZGUvdXJlcy5oIg0K aW5saW5lIFVuaWNvZGVTdHJpbmcNCnVyZXNfZ2V0VW5pY29kZVN0cmluZ0J5SW5kZXgoY29uc3Qg VVJlc291cmNlQnVuZGxlICpyZXNCLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQz Ml90IGluZGV4UywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSogc3Rh dHVzKQ0Kew0KICAgIGludDMyX3QgbGVuID0gMDsNCiAgICBjb25zdCBVQ2hhciogciA9IHVyZXNf Z2V0U3RyaW5nQnlJbmRleF8yXzIocmVzQiwgaW5kZXhTLCAmbGVuLCBzdGF0dXMpOw0KICAgIHJl dHVybiBVbmljb2RlU3RyaW5nKDEsIHIsIGxlbik7DQp9DQojIDY4OCAiLi4vY29tbW9uL3VuaWNv ZGUvdXJlcy5oIg0KaW5saW5lIFVuaWNvZGVTdHJpbmcNCnVyZXNfZ2V0VW5pY29kZVN0cmluZ0J5 S2V5KGNvbnN0IFVSZXNvdXJjZUJ1bmRsZSAqcmVzQiwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIqIGtleSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNv ZGUqIHN0YXR1cykNCnsNCiAgICBpbnQzMl90IGxlbiA9IDA7DQogICAgY29uc3QgVUNoYXIqIHIg PSB1cmVzX2dldFN0cmluZ0J5S2V5XzJfMihyZXNCLCBrZXksICZsZW4sIHN0YXR1cyk7DQogICAg cmV0dXJuIFVuaWNvZGVTdHJpbmcoMSwgciwgbGVuKTsNCn0NCg0KfQ0KIyAzMyAidWNvbF9pbXAu aCIgMg0KIyAxICIuLi9jb21tb24vdW5pY29kZS91ZGF0YS5oIiAxDQojIDIyICIuLi9jb21tb24v dW5pY29kZS91ZGF0YS5oIg0KZXh0ZXJuICJDIiB7DQojIDU4ICIuLi9jb21tb24vdW5pY29kZS91 ZGF0YS5oIg0KdHlwZWRlZiBzdHJ1Y3Qgew0KDQogICAgdWludDE2X3Qgc2l6ZTsNCg0KDQogICAg dWludDE2X3QgcmVzZXJ2ZWRXb3JkOw0KDQoNCg0KICAgIHVpbnQ4X3QgaXNCaWdFbmRpYW47DQoN Cg0KICAgIHVpbnQ4X3QgY2hhcnNldEZhbWlseTsNCg0KDQogICAgdWludDhfdCBzaXplb2ZVQ2hh cjsNCg0KDQogICAgdWludDhfdCByZXNlcnZlZEJ5dGU7DQoNCg0KICAgIHVpbnQ4X3QgZGF0YUZv cm1hdFs0XTsNCg0KDQogICAgdWludDhfdCBmb3JtYXRWZXJzaW9uWzRdOw0KICAgIHVpbnQ4X3Qg ZGF0YVZlcnNpb25bNF07DQp9IFVEYXRhSW5mbzsNCg0KDQoNCg0KDQoNCg0KdHlwZWRlZiBzdHJ1 Y3QgVURhdGFNZW1vcnkgVURhdGFNZW1vcnk7DQojIDEwNyAiLi4vY29tbW9uL3VuaWNvZGUvdWRh dGEuaCINCnR5cGVkZWYgVUJvb2wNClVEYXRhTWVtb3J5SXNBY2NlcHRhYmxlKHZvaWQgKmNvbnRl eHQsDQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFy ICpuYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVURhdGFJbmZvICpwSW5mbyk7 DQojIDEzMiAiLi4vY29tbW9uL3VuaWNvZGUvdWRhdGEuaCINCmV4dGVybiAiQyIgVURhdGFNZW1v cnkgKg0KdWRhdGFfb3Blbl8yXzIoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqdHlwZSwg Y29uc3QgY2hhciAqbmFtZSwNCiAgICAgICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7DQoj IDE5NCAiLi4vY29tbW9uL3VuaWNvZGUvdWRhdGEuaCINCmV4dGVybiAiQyIgVURhdGFNZW1vcnkg Kg0KdWRhdGFfb3BlbkNob2ljZV8yXzIoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqdHlw ZSwgY29uc3QgY2hhciAqbmFtZSwNCiAgICAgICAgICAgICAgICAgVURhdGFNZW1vcnlJc0FjY2Vw dGFibGUgKmlzQWNjZXB0YWJsZSwgdm9pZCAqY29udGV4dCwNCiAgICAgICAgICAgICAgICAgVUVy cm9yQ29kZSAqcEVycm9yQ29kZSk7DQojIDIwNiAiLi4vY29tbW9uL3VuaWNvZGUvdWRhdGEuaCIN CmV4dGVybiAiQyIgdm9pZA0KdWRhdGFfY2xvc2VfMl8yKFVEYXRhTWVtb3J5ICpwRGF0YSk7DQoN Cg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgY29uc3Qgdm9pZCAqDQp1ZGF0YV9nZXRNZW1vcnlfMl8y KFVEYXRhTWVtb3J5ICpwRGF0YSk7DQojIDIzNiAiLi4vY29tbW9uL3VuaWNvZGUvdWRhdGEuaCIN CmV4dGVybiAiQyIgdm9pZA0KdWRhdGFfZ2V0SW5mb18yXzIoVURhdGFNZW1vcnkgKnBEYXRhLCBV RGF0YUluZm8gKnBJbmZvKTsNCiMgMjcxICIuLi9jb21tb24vdW5pY29kZS91ZGF0YS5oIg0KZXh0 ZXJuICJDIiB2b2lkDQp1ZGF0YV9zZXRDb21tb25EYXRhXzJfMihjb25zdCB2b2lkICpkYXRhLCBV RXJyb3JDb2RlICplcnIpOw0KIyAyOTcgIi4uL2NvbW1vbi91bmljb2RlL3VkYXRhLmgiDQpleHRl cm4gIkMiIHZvaWQNCnVkYXRhX3NldEFwcERhdGFfMl8yKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0 IHZvaWQgKmRhdGEsIFVFcnJvckNvZGUgKmVycik7DQoNCn0NCiMgMzQgInVjb2xfaW1wLmgiIDIN Cg0KDQpzdGF0aWMgY29uc3QgVURhdGFJbmZvIHVjYURhdGFJbmZvPXsNCiAgICBzaXplb2YoVURh dGFJbmZvKSwNCiAgICAwLA0KDQogICAgMCwNCiAgICAwLA0KICAgIHNpemVvZihVQ2hhciksDQog ICAgMCwNCg0KICAgIHsweDU1LCAweDQzLCAweDZmLCAweDZjfSwNCg0KICAgIHsyLCAwLCAwLCAw fSwNCiAgICB7MywgMCwgMCwgMH0NCn07DQoNCg0Kc3RhdGljIGNvbnN0IFVEYXRhSW5mbyBpbnZV Y2FEYXRhSW5mbz17DQogICAgc2l6ZW9mKFVEYXRhSW5mbyksDQogICAgMCwNCg0KICAgIDAsDQog ICAgMCwNCiAgICBzaXplb2YoVUNoYXIpLA0KICAgIDAsDQoNCiAgICB7MHg0OSwgMHg2RSwgMHg3 NiwgMHg0M30sDQoNCiAgICB7MiwgMCwgMCwgMH0sDQogICAgezMsIDAsIDAsIDB9DQp9Ow0KIyAx MzEgInVjb2xfaW1wLmgiDQpzdHJ1Y3QgY29sbEl0ZXJhdGUgew0KICBVQ2hhciAqc3RyaW5nOw0K DQoNCiAgVUNoYXIgKmVuZHA7DQogIFVDaGFyICpwb3M7DQoNCiAgdWludDMyX3QgKnRvUmV0dXJu Ow0KICB1aW50MzJfdCAqQ0Vwb3M7DQogIFVDaGFyICp3cml0YWJsZUJ1ZmZlcjsNCiAgdWludDMy X3Qgd3JpdGFibGVCdWZTaXplOw0KICBVQ2hhciAqZmNkUG9zaXRpb247DQogIGNvbnN0IFVDb2xs YXRvciAqY29sbDsNCiAgdWludDhfdCBmbGFnczsNCiAgdWludDhfdCBvcmlnRmxhZ3M7DQogIHVp bnQzMl90IENFc1s1MTJdOw0KICBVQ2hhciBzdGFja1dyaXRhYmxlQnVmZmVyWzI1Nl07DQp9Ow0K DQoNCg0KDQoNCnN0cnVjdCBjb2xsSXRlcmF0ZVN0YXRlIHsNCiAgICBVQ2hhciAqcG9zOw0KICAg IFVDaGFyICpmY2RQb3NpdGlvbjsNCiAgICBVQ2hhciAqYnVmZmVyYWRkcmVzczsNCiAgICB1aW50 MzJfdCBidWZmZXJzaXplOw0KICAgIHVpbnQ4X3QgZmxhZ3M7DQogICAgdWludDhfdCBvcmlnRmxh Z3M7DQp9Ow0KDQpleHRlcm4gIkMiIHZvaWQNCnVwcnZfaW5pdF9jb2xsSXRlcmF0ZV8yXzIoY29u c3QgVUNvbGxhdG9yICpjb2xsYXRvciwgY29uc3QgVUNoYXIgKnNvdXJjZVN0cmluZywgaW50MzJf dCBzb3VyY2VMZW4sIGNvbGxJdGVyYXRlICpzKTsNCg0KDQpzdHJ1Y3QgVUNvbGxhdGlvbkVsZW1l bnRzDQp7DQoNCg0KDQogICAgICAgIGNvbGxJdGVyYXRlIGl0ZXJhdG9yZGF0YV87DQoNCg0KDQog ICAgICAgIFVCb29sIHJlc2V0XzsNCg0KDQoNCiAgICAgICAgVUJvb2wgaXNXcml0YWJsZTsNCn07 DQojIDI4NSAidWNvbF9pbXAuaCINCmV4dGVybiAiQyINCnVpbnQzMl90IHVjb2xfcHJ2X2dldFNw ZWNpYWxDRV8yXzIoY29uc3QgVUNvbGxhdG9yICpjb2xsLCBVQ2hhciBjaCwgdWludDMyX3QgQ0Us IGNvbGxJdGVyYXRlICpzb3VyY2UsIFVFcnJvckNvZGUgKnN0YXR1cyk7DQoNCmV4dGVybiAiQyIN CnVpbnQzMl90IHVjb2xfcHJ2X2dldFNwZWNpYWxQcmV2Q0VfMl8yKGNvbnN0IFVDb2xsYXRvciAq Y29sbCwgVUNoYXIgY2gsIHVpbnQzMl90IENFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBj b2xsSXRlcmF0ZSAqc291cmNlLCBVRXJyb3JDb2RlICpzdGF0dXMpOw0KZXh0ZXJuICJDIiB1aW50 MzJfdCB1Y29sX2dldE5leHRDRV8yXzIoY29uc3QgVUNvbGxhdG9yICpjb2xsLCBjb2xsSXRlcmF0 ZSAqY29sbGF0aW9uU291cmNlLCBVRXJyb3JDb2RlICpzdGF0dXMpOw0KZXh0ZXJuICJDIiB1aW50 MzJfdCB1Y29sX2dldFByZXZDRV8yXzIoY29uc3QgVUNvbGxhdG9yICpjb2xsLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsSXRlcmF0ZSAqY29sbGF0aW9uU291 cmNlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2Rl ICpzdGF0dXMpOw0KDQpleHRlcm4gIkMiIGludDMyX3QNCnVjb2xfZ2V0U29ydEtleVdpdGhBbGxv Y2F0aW9uXzJfMihjb25zdCBVQ29sbGF0b3IgKmNvbGwsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBVQ2hhciAqc291cmNlLCBpbnQzMl90IHNvdXJjZUxlbmd0aCwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKipwUmVzdWx0LA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7DQoNCg0Kdm9pZCAqdWNv bF9nZXRBQnVmZmVyKGNvbnN0IFVDb2xsYXRvciAqY29sbCwgdWludDMyX3Qgc2l6ZSk7DQoNCg0K ZXh0ZXJuICJDIg0KaW50MzJfdA0KdWNvbF9jYWxjU29ydEtleV8yXzIoY29uc3QgVUNvbGxhdG9y ICpjb2xsLA0KICAgICAgICBjb25zdCBVQ2hhciAqc291cmNlLA0KICAgICAgICBpbnQzMl90IHNv dXJjZUxlbmd0aCwNCiAgICAgICAgdWludDhfdCAqKnJlc3VsdCwNCiAgICAgICAgdWludDMyX3Qg cmVzdWx0TGVuZ3RoLA0KICAgICAgICBVQm9vbCBhbGxvY2F0ZVByaW1hcnksDQogICAgICAgIFVF cnJvckNvZGUgKnN0YXR1cyk7DQoNCmV4dGVybiAiQyINCmludDMyX3QNCnVjb2xfY2FsY1NvcnRL ZXlTaW1wbGVUZXJ0aWFyeV8yXzIoY29uc3QgVUNvbGxhdG9yICpjb2xsLA0KICAgICAgICBjb25z dCBVQ2hhciAqc291cmNlLA0KICAgICAgICBpbnQzMl90IHNvdXJjZUxlbmd0aCwNCiAgICAgICAg dWludDhfdCAqKnJlc3VsdCwNCiAgICAgICAgdWludDMyX3QgcmVzdWx0TGVuZ3RoLA0KICAgICAg ICBVQm9vbCBhbGxvY2F0ZVByaW1hcnksDQogICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cyk7DQoN CmV4dGVybiAiQyINCmludDMyX3QNCnVjb2xfZ2V0U29ydEtleVNpemVfMl8yKGNvbnN0IFVDb2xs YXRvciAqY29sbCwgY29sbEl0ZXJhdGUgKnMsDQogICAgICAgICAgICAgICAgICAgIGludDMyX3Qg Y3VycmVudFNpemUsIFVDb2xBdHRyaWJ1dGVWYWx1ZSBzdHJlbmd0aCwNCiAgICAgICAgICAgICAg ICAgICAgaW50MzJfdCBsZW4pOw0KIyAzNDAgInVjb2xfaW1wLmgiDQpleHRlcm4gIkMiIHVpbnQ4 X3QqDQp1Y29sX2Nsb25lUnVsZURhdGFfMl8yKGNvbnN0IFVDb2xsYXRvciAqY29sbCwgaW50MzJf dCAqbGVuZ3RoLCBVRXJyb3JDb2RlICpzdGF0dXMpOw0KIyA0MTMgInVjb2xfaW1wLmgiDQplbnVt IHsNCiAgICBVQ09MX0JZVEVfWkVSTyA9IDB4MDAsDQogICAgVUNPTF9CWVRFX0xFVkVMX1NFUEFS QVRPUiA9IDB4MDEsDQogICAgVUNPTF9CWVRFX1NPUlRLRVlfR0xVRSA9IDB4MDIsDQogICAgVUNP TF9CWVRFX1NISUZUX1BSRUZJWCA9IDB4MDMsDQogICAgVUNPTF9CWVRFX1VOU0hJRlRFRF9NSU4g PSBVQ09MX0JZVEVfU0hJRlRfUFJFRklYLA0KICAgIFVDT0xfQllURV9GSVJTVF9UQUlMT1JFRCA9 IDB4MDQsDQogICAgVUNPTF9CWVRFX0NPTU1PTiA9IDB4MDUsDQogICAgVUNPTF9CWVRFX0ZJUlNU X1VDQSA9IFVDT0xfQllURV9DT01NT04sDQogICAgVUNPTF9CWVRFX0xBU1RfTEFUSU5fUFJJTUFS WSA9IDB4NEMsDQogICAgVUNPTF9CWVRFX0ZJUlNUX05PTl9MQVRJTl9QUklNQVJZID0gMHg0RCwN CiAgICBVQ09MX0JZVEVfVU5TSElGVEVEX01BWCA9IDB4RkYNCn07DQojIDQ5OCAidWNvbF9pbXAu aCINCnR5cGVkZWYgZW51bSB7DQogICAgTk9UX0ZPVU5EX1RBRyA9IDAsDQogICAgRVhQQU5TSU9O X1RBRyA9IDEsDQogICAgQ09OVFJBQ1RJT05fVEFHID0gMiwNCiAgICBUSEFJX1RBRyA9IDMsDQog ICAgQ0hBUlNFVF9UQUcgPSA0LA0KICAgIFNVUlJPR0FURV9UQUcgPSA1LA0KICAgIEhBTkdVTF9T WUxMQUJMRV9UQUcgPSA2LA0KICAgIExFQURfU1VSUk9HQVRFX1RBRyA9IDcsDQogICAgVFJBSUxf U1VSUk9HQVRFX1RBRyA9IDgsDQogICAgQ0pLX0lNUExJQ0lUX1RBRyA9IDksDQogICAgSU1QTElD SVRfVEFHID0gMTAsDQogICAgU1BFQ19QUk9DX1RBRyA9IDExLA0KDQogICAgTE9OR19QUklNQVJZ X1RBRyA9IDEyLA0KDQoNCiAgICBDRV9UQUdTX0NPVU5UDQp9IFVDb2xDRVRhZ3M7DQojIDUyNSAi dWNvbF9pbXAuaCINCnR5cGVkZWYgc3RydWN0IHsNCiAgICAgIHVpbnQzMl90IHZhcmlhYmxlVG9w VmFsdWU7DQogICAgICBVQ29sQXR0cmlidXRlVmFsdWUgZnJlbmNoQ29sbGF0aW9uOw0KICAgICAg VUNvbEF0dHJpYnV0ZVZhbHVlIGFsdGVybmF0ZUhhbmRsaW5nOw0KICAgICAgVUNvbEF0dHJpYnV0 ZVZhbHVlIGNhc2VGaXJzdDsNCiAgICAgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBjYXNlTGV2ZWw7DQog ICAgICBVQ29sQXR0cmlidXRlVmFsdWUgbm9ybWFsaXphdGlvbk1vZGU7DQogICAgICBVQ29sQXR0 cmlidXRlVmFsdWUgc3RyZW5ndGg7DQogICAgICBVQ29sQXR0cmlidXRlVmFsdWUgaGlyYWdhbmFR Ow0KfSBVQ29sT3B0aW9uU2V0Ow0KDQp0eXBlZGVmIHN0cnVjdCB7DQogIHVpbnQzMl90IFVDQV9G SVJTVF9URVJUSUFSWV9JR05PUkFCTEVbMl07DQogIHVpbnQzMl90IFVDQV9MQVNUX1RFUlRJQVJZ X0lHTk9SQUJMRVsyXTsNCiAgdWludDMyX3QgVUNBX0ZJUlNUX1BSSU1BUllfSUdOT1JBQkxFWzJd Ow0KICB1aW50MzJfdCBVQ0FfRklSU1RfU0VDT05EQVJZX0lHTk9SQUJMRVsyXTsNCiAgdWludDMy X3QgVUNBX0xBU1RfU0VDT05EQVJZX0lHTk9SQUJMRVsyXTsNCiAgdWludDMyX3QgVUNBX0xBU1Rf UFJJTUFSWV9JR05PUkFCTEVbMl07DQogIHVpbnQzMl90IFVDQV9GSVJTVF9WQVJJQUJMRVsyXTsN CiAgdWludDMyX3QgVUNBX0xBU1RfVkFSSUFCTEVbMl07DQogIHVpbnQzMl90IFVDQV9GSVJTVF9O T05fVkFSSUFCTEVbMl07DQogIHVpbnQzMl90IFVDQV9MQVNUX05PTl9WQVJJQUJMRVsyXTsNCiAg dWludDMyX3QgVUNBX1JFU0VUX1RPUF9WQUxVRVsyXTsNCiAgdWludDMyX3QgVUNBX0ZJUlNUX0lN UExJQ0lUWzJdOw0KICB1aW50MzJfdCBVQ0FfTEFTVF9JTVBMSUNJVFsyXTsNCiAgdWludDMyX3Qg VUNBX0ZJUlNUX1RSQUlMSU5HWzJdOw0KICB1aW50MzJfdCBVQ0FfTEFTVF9UUkFJTElOR1syXTsN CiMgNTY1ICJ1Y29sX2ltcC5oIg0KICB1aW50MzJfdCBVQ0FfUFJJTUFSWV9UT1BfTUlOOw0KICB1 aW50MzJfdCBVQ0FfUFJJTUFSWV9JTVBMSUNJVF9NSU47DQogIHVpbnQzMl90IFVDQV9QUklNQVJZ X0lNUExJQ0lUX01BWDsNCiAgdWludDMyX3QgVUNBX1BSSU1BUllfVFJBSUxJTkdfTUlOOw0KICB1 aW50MzJfdCBVQ0FfUFJJTUFSWV9UUkFJTElOR19NQVg7DQogIHVpbnQzMl90IFVDQV9QUklNQVJZ X1NQRUNJQUxfTUlOOw0KICB1aW50MzJfdCBVQ0FfUFJJTUFSWV9TUEVDSUFMX01BWDsNCn0gVUNB Q29uc3RhbnRzOw0KDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgICBpbnQzMl90IHNpemU7DQoNCg0K ICAgICAgdWludDMyX3Qgb3B0aW9uczsNCiAgICAgIHVpbnQzMl90IFVDQUNvbnN0czsNCiAgICAg IHVpbnQzMl90IGNvbnRyYWN0aW9uVUNBQ29tYm9zOw0KICAgICAgdWludDMyX3QgdW51c2VkUmVz ZXJ2ZWQxOw0KICAgICAgdWludDMyX3QgbWFwcGluZ1Bvc2l0aW9uOw0KICAgICAgdWludDMyX3Qg ZXhwYW5zaW9uOw0KICAgICAgdWludDMyX3QgY29udHJhY3Rpb25JbmRleDsNCiAgICAgIHVpbnQz Ml90IGNvbnRyYWN0aW9uQ0VzOw0KICAgICAgdWludDMyX3QgY29udHJhY3Rpb25TaXplOw0KDQoN CiAgICAgIHVpbnQzMl90IGVuZEV4cGFuc2lvbkNFOw0KDQogICAgICB1aW50MzJfdCBleHBhbnNp b25DRVNpemU7DQoNCg0KDQogICAgICBpbnQzMl90IGVuZEV4cGFuc2lvbkNFQ291bnQ7DQogICAg ICB1aW50MzJfdCB1bnNhZmVDUDsNCiAgICAgIHVpbnQzMl90IGNvbnRyRW5kQ1A7DQoNCg0KICAg ICAgaW50MzJfdCBDRWNvdW50Ow0KICAgICAgVUJvb2wgamFtb1NwZWNpYWw7DQogICAgICB1aW50 OF90IHBhZGRpbmdbM107DQogICAgICBVVmVyc2lvbkluZm8gdmVyc2lvbjsNCiAgICAgIGNoYXIg Y2hhcnNldE5hbWVbMzJdOw0KICAgICAgdWludDhfdCByZXNlcnZlZFs2NF07DQp9IFVDQVRhYmxl SGVhZGVyOw0KDQoNCg0KDQoNCg0KDQp0eXBlZGVmIHN0cnVjdCB7DQoNCg0KICB1aW50OF90IHNp emVMbzsNCiAgdWludDhfdCBzaXplSGk7DQoNCiAgdWludDhfdCBpc0JpZ0VuZGlhbjsNCg0KICB1 aW50OF90IGNoYXJzZXRGYW1pbHk7DQoNCiAgdWludDhfdCBpY3VWZXJzaW9uWzRdOw0KDQogIHVp bnQ4X3QgdHlwZTsNCg0KICB1aW50OF90IHJlc2VydmVkWzddOw0KfSBVU3RhdGVTdHJ1Y3Q7DQoN Cg0KDQoNCg0KdHlwZWRlZiBzdHJ1Y3Qgew0KDQogIHVpbnQ4X3Qgc2l6ZUxvOw0KICB1aW50OF90 IHNpemVIaTsNCg0KICB1aW50OF90IGNvbnRhaW5zVGFpbG9yaW5nOw0KDQogIHVpbnQ4X3QgY29u dGFpbnNVQ0E7DQoNCiAgdWludDhfdCB2ZXJzaW9uSW5mb1s0XTsNCg0KDQogIHVpbnQ4X3QgY2hh cnNldE5hbWVbMzJdOw0KDQogIHVpbnQ4X3QgbG9jYWxlWzMyXTsNCg0KDQoNCg0KICB1aW50MzJf dCB2YXJpYWJsZVRvcFZhbHVlOw0KDQogIHVpbnQzMl90IGFsdGVybmF0ZUhhbmRsaW5nOw0KDQog IHVpbnQzMl90IGZyZW5jaENvbGxhdGlvbjsNCg0KICB1aW50MzJfdCBjYXNlRmlyc3Q7DQoNCiAg dWludDMyX3QgY2FzZUxldmVsOw0KDQogIHVpbnQzMl90IG5vcm1hbGl6YXRpb25Nb2RlOw0KDQog IHVpbnQzMl90IHN0cmVuZ3RoOw0KDQogIHVpbnQ4X3QgcmVzZXJ2ZWRbMTJdOw0KfSBVQ29sU3Rh dGVTdHJ1Y3Q7DQoNCg0KDQoNCg0KZXh0ZXJuICJDIiB7DQoNCnR5cGVkZWYgc3RydWN0IHsNCiAg dWludDMyX3QgYnl0ZVNpemU7DQogIHVpbnQzMl90IHRhYmxlU2l6ZTsNCiAgdWludDMyX3QgY29u dHNTaXplOw0KICB1aW50MzJfdCB0YWJsZTsNCiAgdWludDMyX3QgY29udHM7DQp9IEludmVyc2VU YWJsZUhlYWRlcjsNCg0KdHlwZWRlZiBpbnQzMl90DQpTb3J0S2V5R2VuZXJhdG9yKGNvbnN0IFVD b2xsYXRvciAqY29sbCwNCiAgICAgICAgY29uc3QgVUNoYXIgKnNvdXJjZSwNCiAgICAgICAgaW50 MzJfdCBzb3VyY2VMZW5ndGgsDQogICAgICAgIHVpbnQ4X3QgKipyZXN1bHQsDQogICAgICAgIHVp bnQzMl90IHJlc3VsdExlbmd0aCwNCiAgICAgICAgVUJvb2wgYWxsb2NhdGVQcmltYXJ5LA0KICAg ICAgICBVRXJyb3JDb2RlICpzdGF0dXMpOw0KDQpzdHJ1Y3QgVUNvbGxhdG9yIHsNCiAgICBVQ29s T3B0aW9uU2V0ICpvcHRpb25zOw0KICAgIFNvcnRLZXlHZW5lcmF0b3IgKnNvcnRLZXlHZW47DQog ICAgY2hhciogcmVxdWVzdGVkTG9jYWxlOw0KICAgIFVSZXNvdXJjZUJ1bmRsZSAqcmI7DQogICAg VVJlc291cmNlQnVuZGxlICpiaW5hcnk7DQogICAgY29uc3QgVUNBVGFibGVIZWFkZXIgKmltYWdl Ow0KDQogICAgVVRyaWUgKm1hcHBpbmc7DQogICAgY29uc3QgdWludDMyX3QgKmxhdGluT25lTWFw cGluZzsNCiAgICBjb25zdCB1aW50MzJfdCAqZXhwYW5zaW9uOw0KICAgIGNvbnN0IFVDaGFyICpj b250cmFjdGlvbkluZGV4Ow0KICAgIGNvbnN0IHVpbnQzMl90ICpjb250cmFjdGlvbkNFczsNCiAg ICBjb25zdCB1aW50OF90ICpzY3JpcHRPcmRlcjsNCg0KICAgIGNvbnN0IHVpbnQzMl90ICplbmRF eHBhbnNpb25DRTsNCg0KICAgIGNvbnN0IHVpbnQzMl90ICpsYXN0RW5kRXhwYW5zaW9uQ0U7DQog ICAgY29uc3QgdWludDhfdCAqZXhwYW5zaW9uQ0VTaXplOw0KDQoNCg0KICAgIGNvbnN0IHVpbnQ4 X3QgKnVuc2FmZUNQOw0KICAgIGNvbnN0IHVpbnQ4X3QgKmNvbnRyRW5kQ1A7DQogICAgVUNoYXIg bWluVW5zYWZlQ1A7DQogICAgVUNoYXIgbWluQ29udHJFbmRDUDsNCg0KICAgIGNvbnN0IFVDaGFy ICpydWxlczsNCiAgICBpbnQzMl90IHJ1bGVzTGVuZ3RoOw0KDQogICAgVUVycm9yQ29kZSBlcnJv ckNvZGU7DQoNCiAgICB1aW50MzJfdCB2YXJpYWJsZVRvcFZhbHVlOw0KICAgIFVDb2xBdHRyaWJ1 dGVWYWx1ZSBmcmVuY2hDb2xsYXRpb247DQogICAgVUNvbEF0dHJpYnV0ZVZhbHVlIGFsdGVybmF0 ZUhhbmRsaW5nOw0KICAgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBjYXNlRmlyc3Q7DQogICAgVUNvbEF0 dHJpYnV0ZVZhbHVlIGNhc2VMZXZlbDsNCiAgICBVQ29sQXR0cmlidXRlVmFsdWUgbm9ybWFsaXph dGlvbk1vZGU7DQogICAgVUNvbEF0dHJpYnV0ZVZhbHVlIHN0cmVuZ3RoOw0KICAgIFVDb2xBdHRy aWJ1dGVWYWx1ZSBoaXJhZ2FuYVE7DQogICAgVUJvb2wgdmFyaWFibGVUb3BWYWx1ZWlzRGVmYXVs dDsNCiAgICBVQm9vbCBmcmVuY2hDb2xsYXRpb25pc0RlZmF1bHQ7DQogICAgVUJvb2wgYWx0ZXJu YXRlSGFuZGxpbmdpc0RlZmF1bHQ7DQogICAgVUJvb2wgY2FzZUZpcnN0aXNEZWZhdWx0Ow0KICAg IFVCb29sIGNhc2VMZXZlbGlzRGVmYXVsdDsNCiAgICBVQm9vbCBub3JtYWxpemF0aW9uTW9kZWlz RGVmYXVsdDsNCiAgICBVQm9vbCBzdHJlbmd0aGlzRGVmYXVsdDsNCiAgICBVQm9vbCBoaXJhZ2Fu YVFpc0RlZmF1bHQ7DQogICAgVUJvb2wgaGFzUmVhbERhdGE7DQoNCg0KDQogICAgVUJvb2wgZnJl ZU9uQ2xvc2U7DQogICAgVUJvb2wgZnJlZU9wdGlvbnNPbkNsb3NlOw0KICAgIFVCb29sIGZyZWVS dWxlc09uQ2xvc2U7DQoNCiAgICBpbnQzMl90IHRlcnRpYXJ5QWRkaXRpb247DQogICAgdWludDhf dCBjYXNlU3dpdGNoOw0KICAgIHVpbnQ4X3QgdGVydGlhcnlDb21tb247DQogICAgdWludDhfdCB0 ZXJ0aWFyeU1hc2s7DQogICAgdWludDhfdCB0ZXJ0aWFyeVRvcDsNCiAgICB1aW50OF90IHRlcnRp YXJ5Qm90dG9tOw0KICAgIHVpbnQ4X3QgdGVydGlhcnlUb3BDb3VudDsNCiAgICB1aW50OF90IHRl cnRpYXJ5Qm90dG9tQ291bnQ7DQoNCiAgICBVRGF0YUluZm8gZGF0YUluZm87DQoNCn07DQoNCn0N Cg0KDQoNCmV4dGVybiAiQyINCnZvaWQgdWNvbF9pbml0VUNBXzJfMihVRXJyb3JDb2RlICpzdGF0 dXMpOw0KDQpleHRlcm4gIkMiDQpVQ29sbGF0b3IqIHVjb2xfaW5pdENvbGxhdG9yXzJfMihjb25z dCBVQ0FUYWJsZUhlYWRlciAqaW1hZ2UsIFVDb2xsYXRvciAqZmlsbEluLCBVRXJyb3JDb2RlICpz dGF0dXMpOw0KDQpleHRlcm4gIkMiDQp2b2lkIHVjb2xfc2V0T3B0aW9uc0Zyb21IZWFkZXJfMl8y KFVDb2xsYXRvciogcmVzdWx0LCBVQ29sT3B0aW9uU2V0ICogb3B0cywgVUVycm9yQ29kZSAqc3Rh dHVzKTsNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyINCnZvaWQgdWNvbF91cGRhdGVJbnRlcm5hbFN0 YXRlXzJfMihVQ29sbGF0b3IgKmNvbGwpOw0KDQpleHRlcm4gIkMiIHVpbnQzMl90IHVjb2xfZ2V0 Rmlyc3RDRV8yXzIoY29uc3QgVUNvbGxhdG9yICpjb2xsLCBVQ2hhciB1LCBVRXJyb3JDb2RlICpz dGF0dXMpOw0KZXh0ZXJuICJDIiBjaGFyKiB1Y29sX3NvcnRLZXlUb1N0cmluZ18yXzIoY29uc3Qg VUNvbGxhdG9yICpjb2xsLCBjb25zdCB1aW50OF90ICpzb3J0a2V5LCBjaGFyICpidWZmZXIsIHVp bnQzMl90ICpsZW4pOw0KZXh0ZXJuICJDIiBVQm9vbCB1Y29sX2lzVGFpbG9yZWRfMl8yKGNvbnN0 IFVDb2xsYXRvciAqY29sbCwgY29uc3QgVUNoYXIgdSwgVUVycm9yQ29kZSAqc3RhdHVzKTsNCg0K ZXh0ZXJuICJDIiBjb25zdCBJbnZlcnNlVGFibGVIZWFkZXIqIHVjb2xfaW5pdEludmVyc2VVQ0Ff Ml8yKFVFcnJvckNvZGUgKnN0YXR1cyk7DQpleHRlcm4gIkMiIGludDMyX3QgdWNvbF9pbnZfZ2V0 TmV4dENFXzJfMih1aW50MzJfdCBDRSwgdWludDMyX3QgY29udENFLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqbmV4dENFLCB1aW50MzJfdCAq bmV4dENvbnRDRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDMyX3Qgc3RyZW5ndGgpOw0KZXh0ZXJuICJDIiBpbnQzMl90IHVjb2xfaW52X2dldFByZXZD RV8yXzIodWludDMyX3QgQ0UsIHVpbnQzMl90IGNvbnRDRSwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKnByZXZDRSwgdWludDMyX3QgKnByZXZD b250Q0UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz Ml90IHN0cmVuZ3RoKTsNCmV4dGVybiAiQyIgdm9pZA0KdXBydl91Y2FfaW5pdEltcGxpY2l0Q29u c3RhbnRzXzJfMih1aW50MzJfdCBiYXNlQnl0ZSk7DQojIDgwNyAidWNvbF9pbXAuaCINCnN0YXRp YyBpbmxpbmUgVUJvb2wgdWNvbF91bnNhZmVDUChVQ2hhciBjLCBjb25zdCBVQ29sbGF0b3IgKmNv bGwpIHsNCiAgICBpbnQzMl90IGhhc2g7DQogICAgdWludDhfdCBodGJ5dGU7DQoNCiAgICBpZiAo YyA8IGNvbGwtPm1pblVuc2FmZUNQKSB7DQogICAgICAgIHJldHVybiAwOw0KICAgIH0NCg0KICAg IGhhc2ggPSBjOw0KICAgIGlmIChoYXNoID49IDEwNTYqOCkgew0KICAgICAgaWYoKCgoYykmMHhm ZmZmZmMwMCk9PTB4ZDgwMCkgfHwgKCgoYykmMHhmZmZmZmMwMCk9PTB4ZGMwMCkpIHsNCg0KDQog ICAgICAgICAgICByZXR1cm4gMTsNCiAgICAgICAgfQ0KICAgICAgICBoYXNoID0gKGhhc2ggJiAw eDFmZmYpICsgMjU2Ow0KICAgIH0NCiAgICBodGJ5dGUgPSBjb2xsLT51bnNhZmVDUFtoYXNoPj4z XTsNCiAgICByZXR1cm4gKCgoaHRieXRlID4+IChoYXNoICYgNykpICYgMSkgPT0gMSk7DQp9DQoj IDI5ICJ1Y29sX2NudC5oIiAyDQoNCm5hbWVzcGFjZSBpY3VfMl8yIHsNCg0KDQoNCg0KDQoNCnR5 cGVkZWYgc3RydWN0IENvbnRyYWN0aW9uVGFibGUgQ29udHJhY3Rpb25UYWJsZTsNCnN0cnVjdCBD b250cmFjdGlvblRhYmxlIHsNCiAgICBVQ2hhciAqY29kZVBvaW50czsNCiAgICB1aW50MzJfdCAq Q0VzOw0KICAgIHVpbnQzMl90IHBvc2l0aW9uOw0KICAgIHVpbnQzMl90IHNpemU7DQp9Ow0KDQpz dHJ1Y3QgQ250VGFibGUgew0KICAgIENvbnRyYWN0aW9uVGFibGUgKiplbGVtZW50czsNCg0KICAg IFVOZXdUcmllICptYXBwaW5nOw0KICAgIFVDaGFyICpjb2RlUG9pbnRzOw0KICAgIHVpbnQzMl90 ICpDRXM7DQogICAgaW50MzJfdCAqb2Zmc2V0czsNCiAgICBpbnQzMl90IHBvc2l0aW9uOw0KICAg IGludDMyX3Qgc2l6ZTsNCiAgICBpbnQzMl90IGNhcGFjaXR5Ow0KICAgIFVDb2xDRVRhZ3MgY3Vy cmVudFRhZzsNCn07DQoNCmV4dGVybiAiQyIgQ250VGFibGUqDQoNCnVwcnZfY250dGFiX29wZW5f Ml8yKFVOZXdUcmllICptYXBwaW5nLCBVRXJyb3JDb2RlICpzdGF0dXMpOw0KZXh0ZXJuICJDIiBD bnRUYWJsZSoNCnVwcnZfY250dGFiX2Nsb25lXzJfMihDbnRUYWJsZSAqdGFibGUsIFVFcnJvckNv ZGUgKnN0YXR1cyk7DQpleHRlcm4gIkMiIHZvaWQNCnVwcnZfY250dGFiX2Nsb3NlXzJfMihDbnRU YWJsZSAqdGFibGUpOw0KDQoNCmV4dGVybiAiQyIgaW50MzJfdA0KdXBydl9jbnR0YWJfY29uc3Ry dWN0VGFibGVfMl8yKENudFRhYmxlICp0YWJsZSwgdWludDMyX3QgbWFpbk9mZnNldCwgVUVycm9y Q29kZSAqc3RhdHVzKTsNCg0KZXh0ZXJuICJDIiB1aW50MzJfdA0KdXBydl9jbnR0YWJfYWRkQ29u dHJhY3Rpb25fMl8yKENudFRhYmxlICp0YWJsZSwgdWludDMyX3QgZWxlbWVudCwgVUNoYXIgY29k ZVBvaW50LCB1aW50MzJfdCB2YWx1ZSwgVUVycm9yQ29kZSAqc3RhdHVzKTsNCg0KZXh0ZXJuICJD IiB1aW50MzJfdA0KdXBydl9jbnR0YWJfc2V0Q29udHJhY3Rpb25fMl8yKENudFRhYmxlICp0YWJs ZSwgdWludDMyX3QgZWxlbWVudCwgdWludDMyX3Qgb2Zmc2V0LCBVQ2hhciBjb2RlUG9pbnQsIHVp bnQzMl90IHZhbHVlLCBVRXJyb3JDb2RlICpzdGF0dXMpOw0KDQpleHRlcm4gIkMiIHVpbnQzMl90 DQp1cHJ2X2NudHRhYl9pbnNlcnRDb250cmFjdGlvbl8yXzIoQ250VGFibGUgKnRhYmxlLCB1aW50 MzJfdCBlbGVtZW50LCBVQ2hhciBjb2RlUG9pbnQsIHVpbnQzMl90IHZhbHVlLCBVRXJyb3JDb2Rl ICpzdGF0dXMpOw0KDQpleHRlcm4gIkMiIHVpbnQzMl90DQp1cHJ2X2NudHRhYl9jaGFuZ2VMYXN0 Q0VfMl8yKENudFRhYmxlICp0YWJsZSwgdWludDMyX3QgZWxlbWVudCwgdWludDMyX3QgdmFsdWUs IFVFcnJvckNvZGUgKnN0YXR1cyk7DQoNCmV4dGVybiAiQyIgaW50MzJfdA0KdXBydl9jbnR0YWJf ZmluZENQXzJfMihDbnRUYWJsZSAqdGFibGUsIHVpbnQzMl90IGVsZW1lbnQsIFVDaGFyIGNvZGVQ b2ludCwgVUVycm9yQ29kZSAqc3RhdHVzKTsNCg0KZXh0ZXJuICJDIiB1aW50MzJfdA0KdXBydl9j bnR0YWJfZ2V0Q0VfMl8yKENudFRhYmxlICp0YWJsZSwgdWludDMyX3QgZWxlbWVudCwgdWludDMy X3QgcG9zaXRpb24sIFVFcnJvckNvZGUgKnN0YXR1cyk7DQoNCmV4dGVybiAiQyIgdWludDMyX3QN CnVwcnZfY250dGFiX2NoYW5nZUNvbnRyYWN0aW9uXzJfMihDbnRUYWJsZSAqdGFibGUsIHVpbnQz Ml90IGVsZW1lbnQsIFVDaGFyIGNvZGVQb2ludCwgdWludDMyX3QgbmV3Q0UsIFVFcnJvckNvZGUg KnN0YXR1cyk7DQoNCmV4dGVybiAiQyIgdWludDMyX3QNCnVwcnZfY250dGFiX2ZpbmRDRV8yXzIo Q250VGFibGUgKnRhYmxlLCB1aW50MzJfdCBlbGVtZW50LCBVQ2hhciBjb2RlUG9pbnQsIFVFcnJv ckNvZGUgKnN0YXR1cyk7DQoNCmV4dGVybiAiQyIgVUJvb2wNCnVwcnZfY250dGFiX2lzVGFpbG9y ZWRfMl8yKENudFRhYmxlICp0YWJsZSwgdWludDMyX3QgZWxlbWVudCwgVUNoYXIgKnp0U3RyaW5n LCBVRXJyb3JDb2RlICpzdGF0dXMpOw0KDQp9DQojIDI1ICJ1Y29sX2VsbS5oIiAyDQojIDMzICJ1 Y29sX2VsbS5oIg0KbmFtZXNwYWNlIGljdV8yXzIgew0KDQp0eXBlZGVmIHN0cnVjdCB7DQogICAg dWludDMyX3QgKkNFczsNCiAgICBpbnQzMl90IHBvc2l0aW9uOw0KICAgIGludDMyX3Qgc2l6ZTsN Cn0gRXhwYW5zaW9uVGFibGU7DQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgICBVQ2hhciBwcmVmaXhD aGFyc1sxMjhdOw0KICAgIFVDaGFyICpwcmVmaXg7DQogICAgdWludDMyX3QgcHJlZml4U2l6ZTsN CiAgICBVQ2hhciB1Y2hhcnNbMTI4XTsNCiAgICBVQ2hhciAqY1BvaW50czsNCiAgICB1aW50MzJf dCBjU2l6ZTsNCiAgICB1aW50MzJfdCBub09mQ0VzOw0KICAgIHVpbnQzMl90IENFc1sxMjhdOw0K ICAgIHVpbnQzMl90IG1hcENFOw0KICAgIHVpbnQzMl90IHNpemVQcmltWzEyOF07DQogICAgdWlu dDMyX3Qgc2l6ZVNlY1sxMjhdOw0KICAgIHVpbnQzMl90IHNpemVUZXJbMTI4XTsNCiAgICBVQm9v bCB2YXJpYWJsZVRvcDsNCiAgICBVQm9vbCBjYXNlQml0Ow0KICAgIFVCb29sIGlzVGhhaTsNCn0g VUNBRWxlbWVudHM7DQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgdWludDMyX3QgKmVuZEV4cGFuc2lv bkNFOw0KICBVQm9vbCAqaXNWOw0KICBpbnQgcG9zaXRpb247DQogIGludCBzaXplOw0KICB1aW50 OF90IG1heExTaXplOw0KICB1aW50OF90IG1heFZTaXplOw0KICB1aW50OF90IG1heFRTaXplOw0K fSBNYXhKYW1vRXhwYW5zaW9uVGFibGU7DQoNCnR5cGVkZWYgc3RydWN0IHsNCiAgdWludDMyX3Qg KmVuZEV4cGFuc2lvbkNFOw0KICB1aW50OF90ICpleHBhbnNpb25DRVNpemU7DQogIGludCBwb3Np dGlvbjsNCiAgaW50IHNpemU7DQp9IE1heEV4cGFuc2lvblRhYmxlOw0KDQp0eXBlZGVmIHN0cnVj dCB7DQoNCiAgVU5ld1RyaWUgKm1hcHBpbmc7DQogIEV4cGFuc2lvblRhYmxlICpleHBhbnNpb25z Ow0KICBzdHJ1Y3QgQ250VGFibGUgKmNvbnRyYWN0aW9uczsNCiAgVUNBVGFibGVIZWFkZXIgKmlt YWdlOw0KICBVQ29sT3B0aW9uU2V0ICpvcHRpb25zOw0KICBNYXhFeHBhbnNpb25UYWJsZSAqbWF4 RXhwYW5zaW9uczsNCiAgTWF4SmFtb0V4cGFuc2lvblRhYmxlICptYXhKYW1vRXhwYW5zaW9uczsN CiAgdWludDhfdCAqdW5zYWZlQ1A7DQogIHVpbnQ4X3QgKmNvbnRyRW5kQ1A7DQogIGNvbnN0IFVD b2xsYXRvciAqVUNBOw0KICBVSGFzaHRhYmxlICpwcmVmaXhMb29rdXA7DQp9IHRlbXBVQ0FUYWJs ZTsNCg0KZXh0ZXJuICJDIiB0ZW1wVUNBVGFibGUgKiB1cHJ2X3VjYV9pbml0VGVtcFRhYmxlXzJf MihVQ0FUYWJsZUhlYWRlciAqaW1hZ2UsIFVDb2xPcHRpb25TZXQgKm9wdHMsIGNvbnN0IFVDb2xs YXRvciAqVUNBLCBVQ29sQ0VUYWdzIGluaXRUYWcsIFVFcnJvckNvZGUgKnN0YXR1cyk7DQpleHRl cm4gIkMiIHRlbXBVQ0FUYWJsZSAqIHVwcnZfdWNhX2Nsb25lVGVtcFRhYmxlXzJfMih0ZW1wVUNB VGFibGUgKnQsIFVFcnJvckNvZGUgKnN0YXR1cyk7DQpleHRlcm4gIkMiIHZvaWQgdXBydl91Y2Ff Y2xvc2VUZW1wVGFibGVfMl8yKHRlbXBVQ0FUYWJsZSAqdCk7DQpleHRlcm4gIkMiIHVpbnQzMl90 IHVwcnZfdWNhX2FkZEFuRWxlbWVudF8yXzIodGVtcFVDQVRhYmxlICp0LCBVQ0FFbGVtZW50cyAq ZWxlbWVudCwgVUVycm9yQ29kZSAqc3RhdHVzKTsNCmV4dGVybiAiQyIgVUNBVGFibGVIZWFkZXIg KiB1cHJ2X3VjYV9hc3NlbWJsZVRhYmxlXzJfMih0ZW1wVUNBVGFibGUgKnQsIFVFcnJvckNvZGUg KnN0YXR1cyk7DQpleHRlcm4gIkMiIGludDMyX3QNCnVwcnZfdWNhX2Nhbm9uaWNhbENsb3N1cmVf Ml8yKHRlbXBVQ0FUYWJsZSAqdCwgVUVycm9yQ29kZSAqc3RhdHVzKTsNCg0KDQoNCg0KDQp9DQoj IDI5ICJ1Y29sX2VsbS5jcHAiIDINCiMgMSAiLi4vY29tbW9uL3Vub3JtaW1wLmgiIDENCiMgMjMg Ii4uL2NvbW1vbi91bm9ybWltcC5oIg0KIyAxICIuLi9jb21tb24vdW5pY29kZS91c2V0LmgiIDEN CiMgMjQgIi4uL2NvbW1vbi91bmljb2RlL3VzZXQuaCINCnN0cnVjdCBVU2V0Ow0KdHlwZWRlZiBz dHJ1Y3QgVVNldCBVU2V0Ow0KDQplbnVtIHsNCiAgICBVU0VUX1NFUklBTElaRURfU1RBVElDX0FS UkFZX0NBUEFDSVRZPTgNCn07DQoNCg0KDQoNCg0Kc3RydWN0IFVTZXJpYWxpemVkU2V0IHsNCiAg ICBjb25zdCB1aW50MTZfdCAqYXJyYXk7DQogICAgaW50MzJfdCBibXBMZW5ndGgsIGxlbmd0aDsN CiAgICB1aW50MTZfdCBzdGF0aWNBcnJheVtVU0VUX1NFUklBTElaRURfU1RBVElDX0FSUkFZX0NB UEFDSVRZXTsNCn07DQp0eXBlZGVmIHN0cnVjdCBVU2VyaWFsaXplZFNldCBVU2VyaWFsaXplZFNl dDsNCiMgNTUgIi4uL2NvbW1vbi91bmljb2RlL3VzZXQuaCINCmV4dGVybiAiQyIgVVNldCoNCnVz ZXRfb3Blbl8yXzIoVUNoYXIzMiBzdGFydCwgVUNoYXIzMiBlbmQpOw0KIyA2NiAiLi4vY29tbW9u L3VuaWNvZGUvdXNldC5oIg0KZXh0ZXJuICJDIiBVU2V0Kg0KdXNldF9vcGVuUGF0dGVybl8yXzIo Y29uc3QgVUNoYXIqIHBhdHRlcm4sIGludDMyX3QgcGF0dGVybkxlbmd0aCwNCiAgICAgICAgICAg ICAgICAgVUVycm9yQ29kZSogZWMpOw0KDQoNCg0KDQoNCg0KZXh0ZXJuICJDIiB2b2lkDQp1c2V0 X2Nsb3NlXzJfMihVU2V0KiBzZXQpOw0KIyA5MiAiLi4vY29tbW9uL3VuaWNvZGUvdXNldC5oIg0K ZXh0ZXJuICJDIiBpbnQzMl90DQp1c2V0X3RvUGF0dGVybl8yXzIoY29uc3QgVVNldCogc2V0LA0K ICAgICAgICAgICAgICAgVUNoYXIqIHJlc3VsdCwgaW50MzJfdCByZXN1bHRDYXBhY2l0eSwNCiAg ICAgICAgICAgICAgIFVCb29sIGVzY2FwZVVucHJpbnRhYmxlLA0KICAgICAgICAgICAgICAgVUVy cm9yQ29kZSogZWMpOw0KDQoNCg0KDQoNCg0KDQpleHRlcm4gIkMiIHZvaWQNCnVzZXRfYWRkXzJf MihVU2V0KiBzZXQsIFVDaGFyMzIgYyk7DQojIDExNCAiLi4vY29tbW9uL3VuaWNvZGUvdXNldC5o Ig0KZXh0ZXJuICJDIiB2b2lkDQp1c2V0X2FkZFN0cmluZ18yXzIoVVNldCogc2V0LCBjb25zdCBV Q2hhciogc3RyLCBpbnQzMl90IHN0ckxlbik7DQoNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgdm9p ZA0KdXNldF9yZW1vdmVfMl8yKFVTZXQqIHNldCwgVUNoYXIzMiBjKTsNCiMgMTMzICIuLi9jb21t b24vdW5pY29kZS91c2V0LmgiDQpleHRlcm4gIkMiIHZvaWQNCnVzZXRfcmVtb3ZlU3RyaW5nXzJf MihVU2V0KiBzZXQsIGNvbnN0IFVDaGFyKiBzdHIsIGludDMyX3Qgc3RyTGVuKTsNCg0KDQoNCg0K DQoNCg0KZXh0ZXJuICJDIiB2b2lkDQp1c2V0X2NvbXBsZW1lbnRfMl8yKFVTZXQqIHNldCk7DQoN Cg0KDQoNCg0KDQpleHRlcm4gIkMiIHZvaWQNCnVzZXRfY2xlYXJfMl8yKFVTZXQqIHNldCk7DQoN Cg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgVUJvb2wNCnVzZXRfaXNFbXB0eV8yXzIoY29uc3QgVVNl dCogc2V0KTsNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgVUJvb2wNCnVzZXRfY29udGFpbnNfMl8y KGNvbnN0IFVTZXQqIHNldCwgVUNoYXIzMiBjKTsNCiMgMTc3ICIuLi9jb21tb24vdW5pY29kZS91 c2V0LmgiDQpleHRlcm4gIkMiIFVCb29sDQp1c2V0X2NvbnRhaW5zU3RyaW5nXzJfMihjb25zdCBV U2V0KiBzZXQsIGNvbnN0IFVDaGFyKiBzdHIsIGludDMyX3Qgc3RyTGVuKTsNCiMgMTg3ICIuLi9j b21tb24vdW5pY29kZS91c2V0LmgiDQpleHRlcm4gIkMiIGludDMyX3QNCnVzZXRfc2l6ZV8yXzIo Y29uc3QgVVNldCogc2V0KTsNCiMgMTk3ICIuLi9jb21tb24vdW5pY29kZS91c2V0LmgiDQpleHRl cm4gIkMiIGludDMyX3QNCnVzZXRfZ2V0SXRlbUNvdW50XzJfMihjb25zdCBVU2V0KiBzZXQpOw0K IyAyMTcgIi4uL2NvbW1vbi91bmljb2RlL3VzZXQuaCINCmV4dGVybiAiQyIgaW50MzJfdA0KdXNl dF9nZXRJdGVtXzJfMihjb25zdCBVU2V0KiBzZXQsIGludDMyX3QgaXRlbUluZGV4LA0KICAgICAg ICAgICAgIFVDaGFyMzIqIHN0YXJ0LCBVQ2hhcjMyKiBlbmQsDQogICAgICAgICAgICAgVUNoYXIq IHN0ciwgaW50MzJfdCBzdHJDYXBhY2l0eSwNCiAgICAgICAgICAgICBVRXJyb3JDb2RlKiBlYyk7 DQojIDI3NSAiLi4vY29tbW9uL3VuaWNvZGUvdXNldC5oIg0KZXh0ZXJuICJDIiBpbnQzMl90DQp1 c2V0X3NlcmlhbGl6ZV8yXzIoY29uc3QgVVNldCogc2V0LCB1aW50MTZfdCogZGVzdCwgaW50MzJf dCBkZXN0Q2FwYWNpdHksIFVFcnJvckNvZGUqIHBFcnJvckNvZGUpOw0KIyAyODUgIi4uL2NvbW1v bi91bmljb2RlL3VzZXQuaCINCmV4dGVybiAiQyIgVUJvb2wNCnVzZXRfZ2V0U2VyaWFsaXplZFNl dF8yXzIoVVNlcmlhbGl6ZWRTZXQqIGZpbGxTZXQsIGNvbnN0IHVpbnQxNl90KiBzcmMsIGludDMy X3Qgc3JjTGVuZ3RoKTsNCg0KDQoNCg0KDQpleHRlcm4gIkMiIHZvaWQNCnVzZXRfc2V0U2VyaWFs aXplZFRvT25lXzJfMihVU2VyaWFsaXplZFNldCogZmlsbFNldCwgVUNoYXIzMiBjKTsNCg0KDQoN Cg0KDQoNCg0KZXh0ZXJuICJDIiBVQm9vbA0KdXNldF9zZXJpYWxpemVkQ29udGFpbnNfMl8yKGNv bnN0IFVTZXJpYWxpemVkU2V0KiBzZXQsIFVDaGFyMzIgYyk7DQojIDMxMiAiLi4vY29tbW9uL3Vu aWNvZGUvdXNldC5oIg0KZXh0ZXJuICJDIiBpbnQzMl90DQp1c2V0X2dldFNlcmlhbGl6ZWRSYW5n ZUNvdW50XzJfMihjb25zdCBVU2VyaWFsaXplZFNldCogc2V0KTsNCiMgMzI3ICIuLi9jb21tb24v dW5pY29kZS91c2V0LmgiDQpleHRlcm4gIkMiIFVCb29sDQp1c2V0X2dldFNlcmlhbGl6ZWRSYW5n ZV8yXzIoY29uc3QgVVNlcmlhbGl6ZWRTZXQqIHNldCwgaW50MzJfdCByYW5nZUluZGV4LA0KICAg ICAgICAgICAgICAgICAgICAgICAgVUNoYXIzMiogcFN0YXJ0LCBVQ2hhcjMyKiBwRW5kKTsNCiMg MjQgIi4uL2NvbW1vbi91bm9ybWltcC5oIiAyDQoNCiMgMSAiLi4vY29tbW9uL3VzdHJfaW1wLmgi IDENCiMgMTkgIi4uL2NvbW1vbi91c3RyX2ltcC5oIg0KIyAxICIuLi9jb21tb24vdW5pY29kZS91 Y252LmgiIDENCiMgMzEgIi4uL2NvbW1vbi91bmljb2RlL3VjbnYuaCINCnN0cnVjdCBVQ29udmVy dGVyOw0KDQoNCnR5cGVkZWYgc3RydWN0IFVDb252ZXJ0ZXIgVUNvbnZlcnRlcjsNCg0KDQojIDEg Ii4uL2NvbW1vbi91bmljb2RlL3VjbnZfZXJyLmgiIDENCiMgODggIi4uL2NvbW1vbi91bmljb2Rl L3VjbnZfZXJyLmgiDQp0eXBlZGVmIGVudW0gew0KICAgIFVDTlZfVU5BU1NJR05FRCA9IDAsDQoN CiAgICBVQ05WX0lMTEVHQUwgPSAxLA0KDQoNCg0KDQoNCg0KDQogICAgVUNOVl9JUlJFR1VMQVIg PSAyLA0KDQoNCg0KDQogICAgVUNOVl9SRVNFVCA9IDMsDQoNCg0KICAgIFVDTlZfQ0xPU0UgPSA0 LA0KDQogICAgVUNOVl9DTE9ORSA9IDUNCiMgMTE4ICIuLi9jb21tb24vdW5pY29kZS91Y252X2Vy ci5oIg0KfSBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb247DQoNCg0KDQoNCg0KDQp0eXBlZGVmIHN0 cnVjdCB7DQogICAgdWludDE2X3Qgc2l6ZTsNCiAgICBVQm9vbCBmbHVzaDsNCiAgICBVQ29udmVy dGVyICpjb252ZXJ0ZXI7DQogICAgY29uc3QgVUNoYXIgKnNvdXJjZTsNCiAgICBjb25zdCBVQ2hh ciAqc291cmNlTGltaXQ7DQogICAgY2hhciAqdGFyZ2V0Ow0KICAgIGNvbnN0IGNoYXIgKnRhcmdl dExpbWl0Ow0KICAgIGludDMyX3QgKm9mZnNldHM7DQp9IFVDb252ZXJ0ZXJGcm9tVW5pY29kZUFy Z3M7DQoNCg0KDQoNCg0KDQp0eXBlZGVmIHN0cnVjdCB7DQogICAgdWludDE2X3Qgc2l6ZTsNCiAg ICBVQm9vbCBmbHVzaDsNCiAgICBVQ29udmVydGVyICpjb252ZXJ0ZXI7DQogICAgY29uc3QgY2hh ciAqc291cmNlOw0KICAgIGNvbnN0IGNoYXIgKnNvdXJjZUxpbWl0Ow0KICAgIFVDaGFyICp0YXJn ZXQ7DQogICAgY29uc3QgVUNoYXIgKnRhcmdldExpbWl0Ow0KICAgIGludDMyX3QgKm9mZnNldHM7 DQp9IFVDb252ZXJ0ZXJUb1VuaWNvZGVBcmdzOw0KIyAxNTkgIi4uL2NvbW1vbi91bmljb2RlL3Vj bnZfZXJyLmgiDQpleHRlcm4gIkMiIHZvaWQgVUNOVl9GUk9NX1VfQ0FMTEJBQ0tfU1RPUF8yXzIg KA0KICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqY29udGV4dCwNCiAgICAgICAgICAgICAg ICAgIFVDb252ZXJ0ZXJGcm9tVW5pY29kZUFyZ3MgKmZyb21VQXJncywNCiAgICAgICAgICAgICAg ICAgIGNvbnN0IFVDaGFyKiBjb2RlVW5pdHMsDQogICAgICAgICAgICAgICAgICBpbnQzMl90IGxl bmd0aCwNCiAgICAgICAgICAgICAgICAgIFVDaGFyMzIgY29kZVBvaW50LA0KICAgICAgICAgICAg ICAgICAgVUNvbnZlcnRlckNhbGxiYWNrUmVhc29uIHJlYXNvbiwNCiAgICAgICAgICAgICAgICAg IFVFcnJvckNvZGUgKiBlcnIpOw0KIyAxNzcgIi4uL2NvbW1vbi91bmljb2RlL3VjbnZfZXJyLmgi DQpleHRlcm4gIkMiIHZvaWQgVUNOVl9UT19VX0NBTExCQUNLX1NUT1BfMl8yICgNCiAgICAgICAg ICAgICAgICAgIGNvbnN0IHZvaWQgKmNvbnRleHQsDQogICAgICAgICAgICAgICAgICBVQ29udmVy dGVyVG9Vbmljb2RlQXJncyAqZnJvbVVBcmdzLA0KICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciogY29kZVVuaXRzLA0KICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsDQogICAgICAg ICAgICAgICAgICBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLA0KICAgICAgICAgICAg ICAgICAgVUVycm9yQ29kZSAqIGVycik7DQojIDE5NyAiLi4vY29tbW9uL3VuaWNvZGUvdWNudl9l cnIuaCINCmV4dGVybiAiQyIgdm9pZCBVQ05WX0ZST01fVV9DQUxMQkFDS19TS0lQXzJfMiAoDQog ICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb250ZXh0LA0KICAgICAgICAgICAgICAgICAg VUNvbnZlcnRlckZyb21Vbmljb2RlQXJncyAqZnJvbVVBcmdzLA0KICAgICAgICAgICAgICAgICAg Y29uc3QgVUNoYXIqIGNvZGVVbml0cywNCiAgICAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3Ro LA0KICAgICAgICAgICAgICAgICAgVUNoYXIzMiBjb2RlUG9pbnQsDQogICAgICAgICAgICAgICAg ICBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLA0KICAgICAgICAgICAgICAgICAgVUVy cm9yQ29kZSAqIGVycik7DQojIDIyMCAiLi4vY29tbW9uL3VuaWNvZGUvdWNudl9lcnIuaCINCmV4 dGVybiAiQyIgdm9pZCBVQ05WX0ZST01fVV9DQUxMQkFDS19TVUJTVElUVVRFXzJfMiAoDQogICAg ICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb250ZXh0LA0KICAgICAgICAgICAgICAgICAgVUNv bnZlcnRlckZyb21Vbmljb2RlQXJncyAqZnJvbVVBcmdzLA0KICAgICAgICAgICAgICAgICAgY29u c3QgVUNoYXIqIGNvZGVVbml0cywNCiAgICAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0K ICAgICAgICAgICAgICAgICAgVUNoYXIzMiBjb2RlUG9pbnQsDQogICAgICAgICAgICAgICAgICBV Q29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLA0KICAgICAgICAgICAgICAgICAgVUVycm9y Q29kZSAqIGVycik7DQojIDI2OSAiLi4vY29tbW9uL3VuaWNvZGUvdWNudl9lcnIuaCINCmV4dGVy biAiQyIgdm9pZCBVQ05WX0ZST01fVV9DQUxMQkFDS19FU0NBUEVfMl8yICgNCiAgICAgICAgICAg ICAgICAgIGNvbnN0IHZvaWQgKmNvbnRleHQsDQogICAgICAgICAgICAgICAgICBVQ29udmVydGVy RnJvbVVuaWNvZGVBcmdzICpmcm9tVUFyZ3MsDQogICAgICAgICAgICAgICAgICBjb25zdCBVQ2hh ciogY29kZVVuaXRzLA0KICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsDQogICAgICAg ICAgICAgICAgICBVQ2hhcjMyIGNvZGVQb2ludCwNCiAgICAgICAgICAgICAgICAgIFVDb252ZXJ0 ZXJDYWxsYmFja1JlYXNvbiByZWFzb24sDQogICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICog ZXJyKTsNCiMgMjkxICIuLi9jb21tb24vdW5pY29kZS91Y252X2Vyci5oIg0KZXh0ZXJuICJDIiB2 b2lkIFVDTlZfVE9fVV9DQUxMQkFDS19TS0lQXzJfMiAoDQogICAgICAgICAgICAgICAgICBjb25z dCB2b2lkICpjb250ZXh0LA0KICAgICAgICAgICAgICAgICAgVUNvbnZlcnRlclRvVW5pY29kZUFy Z3MgKmZyb21VQXJncywNCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNvZGVVbml0cywN CiAgICAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0KICAgICAgICAgICAgICAgICAgVUNv bnZlcnRlckNhbGxiYWNrUmVhc29uIHJlYXNvbiwNCiAgICAgICAgICAgICAgICAgIFVFcnJvckNv ZGUgKiBlcnIpOw0KIyAzMTAgIi4uL2NvbW1vbi91bmljb2RlL3VjbnZfZXJyLmgiDQpleHRlcm4g IkMiIHZvaWQgVUNOVl9UT19VX0NBTExCQUNLX1NVQlNUSVRVVEVfMl8yICgNCiAgICAgICAgICAg ICAgICAgIGNvbnN0IHZvaWQgKmNvbnRleHQsDQogICAgICAgICAgICAgICAgICBVQ29udmVydGVy VG9Vbmljb2RlQXJncyAqZnJvbVVBcmdzLA0KICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog Y29kZVVuaXRzLA0KICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgsDQogICAgICAgICAg ICAgICAgICBVQ29udmVydGVyQ2FsbGJhY2tSZWFzb24gcmVhc29uLA0KICAgICAgICAgICAgICAg ICAgVUVycm9yQ29kZSAqIGVycik7DQojIDMyNiAiLi4vY29tbW9uL3VuaWNvZGUvdWNudl9lcnIu aCINCmV4dGVybiAiQyIgdm9pZCBVQ05WX1RPX1VfQ0FMTEJBQ0tfRVNDQVBFXzJfMiAoDQogICAg ICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb250ZXh0LA0KICAgICAgICAgICAgICAgICAgVUNv bnZlcnRlclRvVW5pY29kZUFyZ3MgKmZyb21VQXJncywNCiAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIqIGNvZGVVbml0cywNCiAgICAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0KICAg ICAgICAgICAgICAgICAgVUNvbnZlcnRlckNhbGxiYWNrUmVhc29uIHJlYXNvbiwNCiAgICAgICAg ICAgICAgICAgIFVFcnJvckNvZGUgKiBlcnIpOw0KIyAzOCAiLi4vY29tbW9uL3VuaWNvZGUvdWNu di5oIiAyDQojIDEgIi4uL2NvbW1vbi91bmljb2RlL3VlbnVtLmgiIDENCiMgMjUgIi4uL2NvbW1v bi91bmljb2RlL3VlbnVtLmgiDQpzdHJ1Y3QgVUVudW1lcmF0aW9uOw0KDQp0eXBlZGVmIHN0cnVj dCBVRW51bWVyYXRpb24gVUVudW1lcmF0aW9uOw0KDQoNCg0KDQoNCg0KDQpleHRlcm4gIkMiIHZv aWQNCnVlbnVtX2Nsb3NlXzJfMihVRW51bWVyYXRpb24qIGVuKTsNCiMgNTEgIi4uL2NvbW1vbi91 bmljb2RlL3VlbnVtLmgiDQpleHRlcm4gIkMiIGludDMyX3QNCnVlbnVtX2NvdW50XzJfMihVRW51 bWVyYXRpb24qIGVuLCBVRXJyb3JDb2RlKiBzdGF0dXMpOw0KIyA3NCAiLi4vY29tbW9uL3VuaWNv ZGUvdWVudW0uaCINCmV4dGVybiAiQyIgY29uc3QgVUNoYXIqDQp1ZW51bV91bmV4dF8yXzIoVUVu dW1lcmF0aW9uKiBlbiwNCiAgICAgICAgICAgIGludDMyX3QqIHJlc3VsdExlbmd0aCwNCiAgICAg ICAgICAgIFVFcnJvckNvZGUqIHN0YXR1cyk7DQojIDEwNiAiLi4vY29tbW9uL3VuaWNvZGUvdWVu dW0uaCINCmV4dGVybiAiQyIgY29uc3QgY2hhcioNCnVlbnVtX25leHRfMl8yKFVFbnVtZXJhdGlv biogZW4sDQogICAgICAgICAgIGludDMyX3QqIHJlc3VsdExlbmd0aCwNCiAgICAgICAgICAgVUVy cm9yQ29kZSogc3RhdHVzKTsNCiMgMTE5ICIuLi9jb21tb24vdW5pY29kZS91ZW51bS5oIg0KZXh0 ZXJuICJDIiB2b2lkDQp1ZW51bV9yZXNldF8yXzIoVUVudW1lcmF0aW9uKiBlbiwgVUVycm9yQ29k ZSogc3RhdHVzKTsNCiMgMzkgIi4uL2NvbW1vbi91bmljb2RlL3VjbnYuaCIgMg0KDQpleHRlcm4g IkMiIHsNCiMgNTcgIi4uL2NvbW1vbi91bmljb2RlL3VjbnYuaCINCnR5cGVkZWYgZW51bSB7DQog ICAgVUNOVl9VTlNVUFBPUlRFRF9DT05WRVJURVIgPSAtMSwNCiAgICBVQ05WX1NCQ1MgPSAwLA0K ICAgIFVDTlZfREJDUyA9IDEsDQogICAgVUNOVl9NQkNTID0gMiwNCiAgICBVQ05WX0xBVElOXzEg PSAzLA0KICAgIFVDTlZfVVRGOCA9IDQsDQogICAgVUNOVl9VVEYxNl9CaWdFbmRpYW4gPSA1LA0K ICAgIFVDTlZfVVRGMTZfTGl0dGxlRW5kaWFuID0gNiwNCiAgICBVQ05WX1VURjMyX0JpZ0VuZGlh biA9IDcsDQogICAgVUNOVl9VVEYzMl9MaXR0bGVFbmRpYW4gPSA4LA0KICAgIFVDTlZfRUJDRElD X1NUQVRFRlVMID0gOSwNCiAgICBVQ05WX0lTT18yMDIyID0gMTAsDQoNCiAgICBVQ05WX0xNQkNT XzEgPSAxMSwNCiAgICBVQ05WX0xNQkNTXzIsDQogICAgVUNOVl9MTUJDU18zLA0KICAgIFVDTlZf TE1CQ1NfNCwNCiAgICBVQ05WX0xNQkNTXzUsDQogICAgVUNOVl9MTUJDU182LA0KICAgIFVDTlZf TE1CQ1NfOCwNCiAgICBVQ05WX0xNQkNTXzExLA0KICAgIFVDTlZfTE1CQ1NfMTYsDQogICAgVUNO Vl9MTUJDU18xNywNCiAgICBVQ05WX0xNQkNTXzE4LA0KICAgIFVDTlZfTE1CQ1NfMTksDQogICAg VUNOVl9MTUJDU19MQVNUID0gVUNOVl9MTUJDU18xOSwNCiAgICBVQ05WX0haLA0KICAgIFVDTlZf U0NTVSwNCiAgICBVQ05WX0lTQ0lJLA0KICAgIFVDTlZfVVNfQVNDSUksDQogICAgVUNOVl9VVEY3 LA0KICAgIFVDTlZfQk9DVTEsDQogICAgVUNOVl9VVEYxNiwNCiAgICBVQ05WX1VURjMyLA0KICAg IFVDTlZfQ0VTVTgsDQoNCg0KICAgIFVDTlZfTlVNQkVSX09GX1NVUFBPUlRFRF9DT05WRVJURVJf VFlQRVMNCg0KfSBVQ29udmVydGVyVHlwZTsNCiMgMTA4ICIuLi9jb21tb24vdW5pY29kZS91Y252 LmgiDQp0eXBlZGVmIGVudW0gew0KICAgIFVDTlZfVU5LTk9XTiA9IC0xLA0KICAgIFVDTlZfSUJN ID0gMA0KfSBVQ29udmVydGVyUGxhdGZvcm07DQojIDEyNSAiLi4vY29tbW9uL3VuaWNvZGUvdWNu di5oIg0KdHlwZWRlZiB2b2lkICggKlVDb252ZXJ0ZXJUb1VDYWxsYmFjaykgKA0KICAgICAgICAg ICAgICAgICAgY29uc3Qgdm9pZCogY29udGV4dCwNCiAgICAgICAgICAgICAgICAgIFVDb252ZXJ0 ZXJUb1VuaWNvZGVBcmdzICphcmdzLA0KICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29k ZVBvaW50cywNCiAgICAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0KICAgICAgICAgICAg ICAgICAgVUNvbnZlcnRlckNhbGxiYWNrUmVhc29uIHJlYXNvbiwNCiAgICAgICAgICAgICAgICAg IFVFcnJvckNvZGUgKik7DQojIDE0NSAiLi4vY29tbW9uL3VuaWNvZGUvdWNudi5oIg0KdHlwZWRl ZiB2b2lkICggKlVDb252ZXJ0ZXJGcm9tVUNhbGxiYWNrKSAoDQogICAgICAgICAgICAgICAgICAg IGNvbnN0IHZvaWQqIGNvbnRleHQsDQogICAgICAgICAgICAgICAgICAgIFVDb252ZXJ0ZXJGcm9t VW5pY29kZUFyZ3MgKmFyZ3MsDQogICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjb2Rl VW5pdHMsDQogICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0KICAgICAgICAgICAg ICAgICAgICBVQ2hhcjMyIGNvZGVQb2ludCwNCiAgICAgICAgICAgICAgICAgICAgVUNvbnZlcnRl ckNhbGxiYWNrUmVhc29uIHJlYXNvbiwNCiAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAq KTsNCg0KfQ0KIyAyMDQgIi4uL2NvbW1vbi91bmljb2RlL3VjbnYuaCINCmV4dGVybiAiQyIgaW50 DQp1Y252X2NvbXBhcmVOYW1lc18yXzIoY29uc3QgY2hhciAqbmFtZTEsIGNvbnN0IGNoYXIgKm5h bWUyKTsNCiMgMjM3ICIuLi9jb21tb24vdW5pY29kZS91Y252LmgiDQpleHRlcm4gIkMiIFVDb252 ZXJ0ZXIqDQp1Y252X29wZW5fMl8yIChjb25zdCBjaGFyICpjb252ZXJ0ZXJOYW1lLCBVRXJyb3JD b2RlICogZXJyKTsNCiMgMjY0ICIuLi9jb21tb24vdW5pY29kZS91Y252LmgiDQpleHRlcm4gIkMi IFVDb252ZXJ0ZXIqDQp1Y252X29wZW5VXzJfMiAoY29uc3QgVUNoYXIgKiBuYW1lLA0KICAgICAg ICAgICAgVUVycm9yQ29kZSAqIGVycik7DQojIDMzMSAiLi4vY29tbW9uL3VuaWNvZGUvdWNudi5o Ig0KZXh0ZXJuICJDIiBVQ29udmVydGVyKg0KdWNudl9vcGVuQ0NTSURfMl8yIChpbnQzMl90IGNv ZGVwYWdlLA0KICAgICAgICAgICAgICAgIFVDb252ZXJ0ZXJQbGF0Zm9ybSBwbGF0Zm9ybSwNCiAg ICAgICAgICAgICAgICBVRXJyb3JDb2RlICogZXJyKTsNCiMgMzYzICIuLi9jb21tb24vdW5pY29k ZS91Y252LmgiDQpleHRlcm4gIkMiIFVDb252ZXJ0ZXIqDQp1Y252X29wZW5QYWNrYWdlIChjb25z dCBjaGFyICpwYWNrYWdlTmFtZSwgY29uc3QgY2hhciAqY29udmVydGVyTmFtZSwgVUVycm9yQ29k ZSAqIGVycik7DQojIDM4MiAiLi4vY29tbW9uL3VuaWNvZGUvdWNudi5oIg0KZXh0ZXJuICJDIiBV Q29udmVydGVyICoNCnVjbnZfc2FmZUNsb25lXzJfMihjb25zdCBVQ29udmVydGVyICpjbnYsDQog ICAgICAgICAgICAgICB2b2lkICpzdGFja0J1ZmZlciwNCiAgICAgICAgICAgICAgIGludDMyX3Qg KnBCdWZmZXJTaXplLA0KICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqc3RhdHVzKTsNCiMgNDAy ICIuLi9jb21tb24vdW5pY29kZS91Y252LmgiDQpleHRlcm4gIkMiIHZvaWQNCnVjbnZfY2xvc2Vf Ml8yIChVQ29udmVydGVyICogY29udmVydGVyKTsNCiMgNDE5ICIuLi9jb21tb24vdW5pY29kZS91 Y252LmgiDQpleHRlcm4gIkMiIHZvaWQNCnVjbnZfZ2V0U3Vic3RDaGFyc18yXzIgKGNvbnN0IFVD b252ZXJ0ZXIgKiBjb252ZXJ0ZXIsDQogICAgICAgICAgICAgICAgICAgIGNoYXIgKnN1YkNoYXJz LA0KICAgICAgICAgICAgICAgICAgICBpbnQ4X3QgKiBsZW4sDQogICAgICAgICAgICAgICAgICAg IFVFcnJvckNvZGUgKiBlcnIpOw0KIyA0MzcgIi4uL2NvbW1vbi91bmljb2RlL3VjbnYuaCINCmV4 dGVybiAiQyIgdm9pZA0KdWNudl9zZXRTdWJzdENoYXJzXzJfMiAoVUNvbnZlcnRlciAqIGNvbnZl cnRlciwNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3ViQ2hhcnMsDQogICAgICAg ICAgICAgICAgICAgIGludDhfdCBsZW4sDQogICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUg KiBlcnIpOw0KIyA0NTYgIi4uL2NvbW1vbi91bmljb2RlL3VjbnYuaCINCmV4dGVybiAiQyIgdm9p ZA0KdWNudl9nZXRJbnZhbGlkQ2hhcnNfMl8yIChjb25zdCBVQ29udmVydGVyICogY29udmVydGVy LA0KICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmVyckJ5dGVzLA0KICAgICAgICAgICAgICAg ICAgICAgIGludDhfdCAqIGxlbiwNCiAgICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICog ZXJyKTsNCiMgNDc1ICIuLi9jb21tb24vdW5pY29kZS91Y252LmgiDQpleHRlcm4gIkMiIHZvaWQN CnVjbnZfZ2V0SW52YWxpZFVDaGFyc18yXzIgKGNvbnN0IFVDb252ZXJ0ZXIgKiBjb252ZXJ0ZXIs DQogICAgICAgICAgICAgICAgICAgICAgIFVDaGFyICplcnJVQ2hhcnMsDQogICAgICAgICAgICAg ICAgICAgICAgIGludDhfdCAqIGxlbiwNCiAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29k ZSAqIGVycik7DQojIDQ4OCAiLi4vY29tbW9uL3VuaWNvZGUvdWNudi5oIg0KZXh0ZXJuICJDIiB2 b2lkDQp1Y252X3Jlc2V0XzJfMiAoVUNvbnZlcnRlciAqIGNvbnZlcnRlcik7DQojIDQ5OSAiLi4v Y29tbW9uL3VuaWNvZGUvdWNudi5oIg0KZXh0ZXJuICJDIiB2b2lkDQp1Y252X3Jlc2V0VG9Vbmlj b2RlXzJfMihVQ29udmVydGVyICpjb252ZXJ0ZXIpOw0KIyA1MTAgIi4uL2NvbW1vbi91bmljb2Rl L3VjbnYuaCINCmV4dGVybiAiQyIgdm9pZA0KdWNudl9yZXNldEZyb21Vbmljb2RlXzJfMihVQ29u dmVydGVyICpjb252ZXJ0ZXIpOw0KIyA1MjEgIi4uL2NvbW1vbi91bmljb2RlL3VjbnYuaCINCmV4 dGVybiAiQyIgaW50OF90DQp1Y252X2dldE1heENoYXJTaXplXzJfMiAoY29uc3QgVUNvbnZlcnRl ciAqIGNvbnZlcnRlcik7DQojIDUzMyAiLi4vY29tbW9uL3VuaWNvZGUvdWNudi5oIg0KZXh0ZXJu ICJDIiBpbnQ4X3QNCnVjbnZfZ2V0TWluQ2hhclNpemVfMl8yIChjb25zdCBVQ29udmVydGVyICog Y29udmVydGVyKTsNCiMgNTUwICIuLi9jb21tb24vdW5pY29kZS91Y252LmgiDQpleHRlcm4gIkMi IGludDMyX3QNCnVjbnZfZ2V0RGlzcGxheU5hbWVfMl8yIChjb25zdCBVQ29udmVydGVyICogY29u dmVydGVyLA0KICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGlzcGxheUxvY2FsZSwN CiAgICAgICAgICAgICAgICAgICAgIFVDaGFyICogZGlzcGxheU5hbWUsDQogICAgICAgICAgICAg ICAgICAgICBpbnQzMl90IGRpc3BsYXlOYW1lQ2FwYWNpdHksDQogICAgICAgICAgICAgICAgICAg ICBVRXJyb3JDb2RlICogZXJyKTsNCiMgNTY3ICIuLi9jb21tb24vdW5pY29kZS91Y252LmgiDQpl eHRlcm4gIkMiIGNvbnN0IGNoYXIgKg0KdWNudl9nZXROYW1lXzJfMiAoY29uc3QgVUNvbnZlcnRl ciAqIGNvbnZlcnRlciwgVUVycm9yQ29kZSAqIGVycik7DQojIDU5NCAiLi4vY29tbW9uL3VuaWNv ZGUvdWNudi5oIg0KZXh0ZXJuICJDIiBpbnQzMl90DQp1Y252X2dldENDU0lEXzJfMiAoY29uc3Qg VUNvbnZlcnRlciAqIGNvbnZlcnRlciwNCiAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKiBlcnIp Ow0KIyA2MDggIi4uL2NvbW1vbi91bmljb2RlL3VjbnYuaCINCmV4dGVybiAiQyIgVUNvbnZlcnRl clBsYXRmb3JtDQp1Y252X2dldFBsYXRmb3JtXzJfMiAoY29uc3QgVUNvbnZlcnRlciAqIGNvbnZl cnRlciwNCiAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKiBlcnIpOw0KIyA2MjAgIi4uL2Nv bW1vbi91bmljb2RlL3VjbnYuaCINCmV4dGVybiAiQyIgVUNvbnZlcnRlclR5cGUNCnVjbnZfZ2V0 VHlwZV8yXzIgKGNvbnN0IFVDb252ZXJ0ZXIgKiBjb252ZXJ0ZXIpOw0KIyA2MzggIi4uL2NvbW1v bi91bmljb2RlL3VjbnYuaCINCmV4dGVybiAiQyIgdm9pZCB1Y252X2dldFN0YXJ0ZXJzXzJfMihj b25zdCBVQ29udmVydGVyKiBjb252ZXJ0ZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBVQm9vbCBzdGFydGVyc1syNTZdLA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVUVycm9yQ29kZSogZXJyKTsNCiMgNjU0ICIuLi9jb21tb24vdW5pY29k ZS91Y252LmgiDQpleHRlcm4gIkMiIHZvaWQNCnVjbnZfZ2V0VG9VQ2FsbEJhY2tfMl8yIChjb25z dCBVQ29udmVydGVyICogY29udmVydGVyLA0KICAgICAgICAgICAgICAgICAgICAgVUNvbnZlcnRl clRvVUNhbGxiYWNrICphY3Rpb24sDQogICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICoq Y29udGV4dCk7DQojIDY3MCAiLi4vY29tbW9uL3VuaWNvZGUvdWNudi5oIg0KZXh0ZXJuICJDIiB2 b2lkDQp1Y252X2dldEZyb21VQ2FsbEJhY2tfMl8yIChjb25zdCBVQ29udmVydGVyICogY29udmVy dGVyLA0KICAgICAgICAgICAgICAgICAgICAgICBVQ29udmVydGVyRnJvbVVDYWxsYmFjayAqYWN0 aW9uLA0KICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICoqY29udGV4dCk7DQojIDY4 OSAiLi4vY29tbW9uL3VuaWNvZGUvdWNudi5oIg0KZXh0ZXJuICJDIiB2b2lkDQp1Y252X3NldFRv VUNhbGxCYWNrXzJfMiAoVUNvbnZlcnRlciAqIGNvbnZlcnRlciwNCiAgICAgICAgICAgICAgICAg ICAgIFVDb252ZXJ0ZXJUb1VDYWxsYmFjayBuZXdBY3Rpb24sDQogICAgICAgICAgICAgICAgICAg ICBjb25zdCB2b2lkKiBuZXdDb250ZXh0LA0KICAgICAgICAgICAgICAgICAgICAgVUNvbnZlcnRl clRvVUNhbGxiYWNrICpvbGRBY3Rpb24sDQogICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lk Kiogb2xkQ29udGV4dCwNCiAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKiBlcnIpOw0K IyA3MTEgIi4uL2NvbW1vbi91bmljb2RlL3VjbnYuaCINCmV4dGVybiAiQyIgdm9pZA0KdWNudl9z ZXRGcm9tVUNhbGxCYWNrXzJfMiAoVUNvbnZlcnRlciAqIGNvbnZlcnRlciwNCiAgICAgICAgICAg ICAgICAgICAgICAgVUNvbnZlcnRlckZyb21VQ2FsbGJhY2sgbmV3QWN0aW9uLA0KICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB2b2lkICpuZXdDb250ZXh0LA0KICAgICAgICAgICAgICAgICAg ICAgICBVQ29udmVydGVyRnJvbVVDYWxsYmFjayAqb2xkQWN0aW9uLA0KICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB2b2lkICoqb2xkQ29udGV4dCwNCiAgICAgICAgICAgICAgICAgICAgICAg VUVycm9yQ29kZSAqIGVycik7DQojIDc3MSAiLi4vY29tbW9uL3VuaWNvZGUvdWNudi5oIg0KZXh0 ZXJuICJDIiB2b2lkDQp1Y252X2Zyb21Vbmljb2RlXzJfMiAoVUNvbnZlcnRlciAqIGNvbnZlcnRl ciwNCiAgICAgICAgICAgICAgICAgIGNoYXIgKip0YXJnZXQsDQogICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICp0YXJnZXRMaW1pdCwNCiAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICoq IHNvdXJjZSwNCiAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICogc291cmNlTGltaXQsDQog ICAgICAgICAgICAgICAgICBpbnQzMl90KiBvZmZzZXRzLA0KICAgICAgICAgICAgICAgICAgVUJv b2wgZmx1c2gsDQogICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICogZXJyKTsNCiMgODM0ICIu Li9jb21tb24vdW5pY29kZS91Y252LmgiDQpleHRlcm4gIkMiIHZvaWQNCnVjbnZfdG9Vbmljb2Rl XzJfMiAoVUNvbnZlcnRlciAqIGNvbnZlcnRlciwNCiAgICAgICAgICAgICAgICBVQ2hhciAqKiB0 YXJnZXQsDQogICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKiB0YXJnZXRMaW1pdCwNCiAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICoqc291cmNlLA0KICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKnNvdXJjZUxpbWl0LA0KICAgICAgICAgICAgICAgIGludDMyX3QqIG9mZnNldHMsDQogICAg ICAgICAgICAgICAgVUJvb2wgZmx1c2gsDQogICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqIGVy cik7DQojIDg3MSAiLi4vY29tbW9uL3VuaWNvZGUvdWNudi5oIg0KZXh0ZXJuICJDIiBpbnQzMl90 DQp1Y252X2Zyb21VQ2hhcnNfMl8yKFVDb252ZXJ0ZXIgKmNudiwNCiAgICAgICAgICAgICAgICBj aGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwNCiAgICAgICAgICAgICAgICBjb25zdCBV Q2hhciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwNCiAgICAgICAgICAgICAgICBVRXJyb3JDb2Rl ICpwRXJyb3JDb2RlKTsNCiMgOTA0ICIuLi9jb21tb24vdW5pY29kZS91Y252LmgiDQpleHRlcm4g IkMiIGludDMyX3QNCnVjbnZfdG9VQ2hhcnNfMl8yKFVDb252ZXJ0ZXIgKmNudiwNCiAgICAgICAg ICAgICAgVUNoYXIgKmRlc3QsIGludDMyX3QgZGVzdENhcGFjaXR5LA0KICAgICAgICAgICAgICBj b25zdCBjaGFyICpzcmMsIGludDMyX3Qgc3JjTGVuZ3RoLA0KICAgICAgICAgICAgICBVRXJyb3JD b2RlICpwRXJyb3JDb2RlKTsNCiMgOTUyICIuLi9jb21tb24vdW5pY29kZS91Y252LmgiDQpleHRl cm4gIkMiIFVDaGFyMzINCnVjbnZfZ2V0TmV4dFVDaGFyXzJfMiAoVUNvbnZlcnRlciAqIGNvbnZl cnRlciwNCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqc291cmNlLA0KICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKiBzb3VyY2VMaW1pdCwNCiAgICAgICAgICAgICAgICAgICBV RXJyb3JDb2RlICogZXJyKTsNCiMgOTgxICIuLi9jb21tb24vdW5pY29kZS91Y252LmgiDQpleHRl cm4gIkMiIGludDMyX3QNCnVjbnZfY29udmVydF8yXzIgKGNvbnN0IGNoYXIgKnRvQ29udmVydGVy TmFtZSwNCiAgICAgICAgICAgICAgY29uc3QgY2hhciAqZnJvbUNvbnZlcnRlck5hbWUsDQogICAg ICAgICAgICAgIGNoYXIgKnRhcmdldCwNCiAgICAgICAgICAgICAgaW50MzJfdCB0YXJnZXRDYXBh Y2l0eSwNCiAgICAgICAgICAgICAgY29uc3QgY2hhciAqc291cmNlLA0KICAgICAgICAgICAgICBp bnQzMl90IHNvdXJjZUxlbmd0aCwNCiAgICAgICAgICAgICAgVUVycm9yQ29kZSAqIGVycik7DQoj IDk5NyAiLi4vY29tbW9uL3VuaWNvZGUvdWNudi5oIg0KZXh0ZXJuICJDIiBpbnQzMl90DQp1Y252 X2ZsdXNoQ2FjaGVfMl8yICh2b2lkKTsNCiMgMTAwOCAiLi4vY29tbW9uL3VuaWNvZGUvdWNudi5o Ig0KZXh0ZXJuICJDIiBpbnQzMl90DQp1Y252X2NvdW50QXZhaWxhYmxlXzJfMiAodm9pZCk7DQoj IDEwMTkgIi4uL2NvbW1vbi91bmljb2RlL3VjbnYuaCINCmV4dGVybiAiQyIgY29uc3QgY2hhcioN CnVjbnZfZ2V0QXZhaWxhYmxlTmFtZV8yXzIgKGludDMyX3Qgbik7DQojIDEwMzIgIi4uL2NvbW1v bi91bmljb2RlL3VjbnYuaCINCmV4dGVybiAiQyIgdWludDE2X3QNCnVjbnZfY291bnRBbGlhc2Vz XzJfMihjb25zdCBjaGFyICphbGlhcywgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7DQojIDEwNDcg Ii4uL2NvbW1vbi91bmljb2RlL3VjbnYuaCINCmV4dGVybiAiQyIgY29uc3QgY2hhciAqDQp1Y252 X2dldEFsaWFzXzJfMihjb25zdCBjaGFyICphbGlhcywgdWludDE2X3QgbiwgVUVycm9yQ29kZSAq cEVycm9yQ29kZSk7DQojIDEwNjMgIi4uL2NvbW1vbi91bmljb2RlL3VjbnYuaCINCmV4dGVybiAi QyIgdm9pZA0KdWNudl9nZXRBbGlhc2VzXzJfMihjb25zdCBjaGFyICphbGlhcywgY29uc3QgY2hh ciAqKmFsaWFzZXMsIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOw0KIyAxMDg5ICIuLi9jb21tb24v dW5pY29kZS91Y252LmgiDQpleHRlcm4gIkMiIFVFbnVtZXJhdGlvbiAqDQp1Y252X29wZW5TdGFu ZGFyZE5hbWVzXzJfMihjb25zdCBjaGFyICpjb252TmFtZSwNCiAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqc3RhbmRhcmQsDQogICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNv ZGUgKnBFcnJvckNvZGUpOw0KDQoNCg0KDQoNCg0KDQpleHRlcm4gIkMiIHVpbnQxNl90DQp1Y252 X2NvdW50U3RhbmRhcmRzXzJfMih2b2lkKTsNCiMgMTExMCAiLi4vY29tbW9uL3VuaWNvZGUvdWNu di5oIg0KZXh0ZXJuICJDIiBjb25zdCBjaGFyICoNCnVjbnZfZ2V0U3RhbmRhcmRfMl8yKHVpbnQx Nl90IG4sIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOw0KIyAxMTI0ICIuLi9jb21tb24vdW5pY29k ZS91Y252LmgiDQpleHRlcm4gIkMiIGNvbnN0IGNoYXIgKg0KdWNudl9nZXRTdGFuZGFyZE5hbWVf Ml8yKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnN0YW5kYXJkLCBVRXJyb3JDb2RlICpw RXJyb3JDb2RlKTsNCiMgMTEzNyAiLi4vY29tbW9uL3VuaWNvZGUvdWNudi5oIg0KZXh0ZXJuICJD IiBjb25zdCBjaGFyICoNCnVjbnZfZ2V0RGVmYXVsdE5hbWVfMl8yICh2b2lkKTsNCiMgMTE0OCAi Li4vY29tbW9uL3VuaWNvZGUvdWNudi5oIg0KZXh0ZXJuICJDIiB2b2lkDQp1Y252X3NldERlZmF1 bHROYW1lXzJfMiAoY29uc3QgY2hhciAqbmFtZSk7DQojIDExNjggIi4uL2NvbW1vbi91bmljb2Rl L3VjbnYuaCINCmV4dGVybiAiQyIgdm9pZA0KdWNudl9maXhGaWxlU2VwYXJhdG9yXzJfMihjb25z dCBVQ29udmVydGVyICpjbnYsIFVDaGFyKiBzb3VyY2UsIGludDMyX3Qgc291cmNlTGVuKTsNCiMg MTE3OSAiLi4vY29tbW9uL3VuaWNvZGUvdWNudi5oIg0KZXh0ZXJuICJDIiBVQm9vbA0KdWNudl9p c0FtYmlndW91c18yXzIoY29uc3QgVUNvbnZlcnRlciAqY252KTsNCiMgMTE4OSAiLi4vY29tbW9u L3VuaWNvZGUvdWNudi5oIg0KZXh0ZXJuICJDIiB2b2lkDQp1Y252X3NldEZhbGxiYWNrXzJfMihV Q29udmVydGVyICpjbnYsIFVCb29sIHVzZXNGYWxsYmFjayk7DQoNCg0KDQoNCg0KDQoNCmV4dGVy biAiQyIgVUJvb2wNCnVjbnZfdXNlc0ZhbGxiYWNrXzJfMihjb25zdCBVQ29udmVydGVyICpjbnYp Ow0KIyAxMjM1ICIuLi9jb21tb24vdW5pY29kZS91Y252LmgiDQpleHRlcm4gIkMiIGNvbnN0IGNo YXIqDQp1Y252X2RldGVjdFVuaWNvZGVTaWduYXR1cmVfMl8yKCBjb25zdCBjaGFyKiBzb3VyY2Us DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc291cmNlTGVuZ3RoLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90KiBzaWduYXR1cmVMZW5ndGgsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUqIHBFcnJvckNvZGUpOw0KIyAyMCAi Li4vY29tbW9uL3VzdHJfaW1wLmgiIDINCg0KDQoNCg0KDQogICAgdHlwZWRlZiB2b2lkICpVQnJl YWtJdGVyYXRvcjsNCiMgNTEgIi4uL2NvbW1vbi91c3RyX2ltcC5oIg0KZXh0ZXJuICJDIiBpbnQz Ml90DQp1cHJ2X3N0ckNvbXBhcmVfMl8yKGNvbnN0IFVDaGFyICpzMSwgaW50MzJfdCBsZW5ndGgx LA0KICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyICpzMiwgaW50MzJfdCBsZW5ndGgyLA0KICAg ICAgICAgICAgICAgIFVCb29sIHN0cm5jbXBTdHlsZSwgVUJvb2wgY29kZVBvaW50T3JkZXIpOw0K DQoNCg0KDQoNCg0KDQpleHRlcm4gIkMiIFVCb29sDQp1cHJ2X2hhdmVQcm9wZXJ0aWVzXzJfMih2 b2lkKTsNCg0KDQoNCg0KDQoNCnR5cGVkZWYgVUJvb2wNClVHcm93QnVmZmVyKHZvaWQgKmNvbnRl eHQsDQogICAgICAgICAgICBVQ2hhciAqKnBCdWZmZXIsDQogICAgICAgICAgICBpbnQzMl90ICpw Q2FwYWNpdHksDQogICAgICAgICAgICBpbnQzMl90IHJlcUNhcGFjaXR5LA0KICAgICAgICAgICAg aW50MzJfdCBsZW5ndGgpOw0KDQoNCg0KDQoNCg0KDQpleHRlcm4gIkMiIFVCb29sDQp1X2dyb3dC dWZmZXJGcm9tU3RhdGljXzJfMih2b2lkICpjb250ZXh0LA0KICAgICAgICAgICAgICAgICAgICAg ICBVQ2hhciAqKnBCdWZmZXIsIGludDMyX3QgKnBDYXBhY2l0eSwgaW50MzJfdCByZXFDYXBhY2l0 eSwNCiAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBsZW5ndGgpOw0KIyA5NiAiLi4vY29t bW9uL3VzdHJfaW1wLmgiDQpleHRlcm4gIkMiIGludDMyX3QNCnVfaW50ZXJuYWxTdHJUb0xvd2Vy XzJfMihVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksDQogICAgICAgICAgICAgICAg ICAgICBjb25zdCBVQ2hhciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwNCiAgICAgICAgICAgICAg ICAgICAgIGludDMyX3Qgc3JjU3RhcnQsIGludDMyX3Qgc3JjTGltaXQsDQogICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICpsb2NhbGUsDQogICAgICAgICAgICAgICAgICAgICBVRXJyb3JD b2RlICpwRXJyb3JDb2RlKTsNCg0KDQoNCg0KZXh0ZXJuICJDIiBpbnQzMl90DQp1X2ludGVybmFs U3RyVG9VcHBlcl8yXzIoVUNoYXIgKmRlc3QsIGludDMyX3QgZGVzdENhcGFjaXR5LA0KICAgICAg ICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKnNyYywgaW50MzJfdCBzcmNMZW5ndGgsDQogICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsb2NhbGUsDQogICAgICAgICAgICAgICAgICAg ICBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsNCg0KDQoNCg0KZXh0ZXJuICJDIiBpbnQzMl90DQp1 X2ludGVybmFsU3RyVG9UaXRsZV8yXzIoVUNoYXIgKmRlc3QsIGludDMyX3QgZGVzdENhcGFjaXR5 LA0KICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKnNyYywgaW50MzJfdCBzcmNMZW5n dGgsDQogICAgICAgICAgICAgICAgICAgICBVQnJlYWtJdGVyYXRvciAqdGl0bGVJdGVyLA0KICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbG9jYWxlLA0KICAgICAgICAgICAgICAgICAg ICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7DQoNCg0KDQoNCg0KZXh0ZXJuICJDIiBpbnQzMl90 DQp1X2ludGVybmFsU3RyRm9sZENhc2VfMl8yKFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBh Y2l0eSwNCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciAqc3JjLCBpbnQzMl90IHNy Y0xlbmd0aCwNCiAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBvcHRpb25zLA0KICAgICAg ICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOw0KIyAxNDEgIi4uL2NvbW1v bi91c3RyX2ltcC5oIg0KZXh0ZXJuICJDIiBpbnQzMl90DQp1X2ludGVybmFsVG9Mb3dlcl8yXzIo VUNoYXIzMiBjLCBVQ2hhckl0ZXJhdG9yICppdGVyLA0KICAgICAgICAgICAgICAgICAgVUNoYXIg KmRlc3QsIGludDMyX3QgZGVzdENhcGFjaXR5LA0KICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqbG9jYWxlKTsNCiMgMTU1ICIuLi9jb21tb24vdXN0cl9pbXAuaCINCmV4dGVybiAiQyIgaW50 MzJfdA0KdV9pbnRlcm5hbFRvVXBwZXJfMl8yKFVDaGFyMzIgYywgVUNoYXJJdGVyYXRvciAqaXRl ciwNCiAgICAgICAgICAgICAgICAgIFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwN CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxvY2FsZSk7DQojIDE2OSAiLi4vY29tbW9u L3VzdHJfaW1wLmgiDQpleHRlcm4gIkMiIGludDMyX3QNCnVfaW50ZXJuYWxUb1RpdGxlXzJfMihV Q2hhcjMyIGMsIFVDaGFySXRlcmF0b3IgKml0ZXIsDQogICAgICAgICAgICAgICAgICBVQ2hhciAq ZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksDQogICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICpsb2NhbGUpOw0KDQoNCg0KDQoNCg0KZXh0ZXJuICJDIiBpbnQzMl90DQp1X2ludGVybmFsRm9s ZENhc2VfMl8yKFVDaGFyMzIgYywNCiAgICAgICAgICAgICAgICAgICBVQ2hhciAqZGVzdCwgaW50 MzJfdCBkZXN0Q2FwYWNpdHksDQogICAgICAgICAgICAgICAgICAgdWludDMyX3Qgb3B0aW9ucyk7 DQoNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgVUNvbnZlcnRlcioNCnVfZ2V0RGVmYXVsdENvbnZl cnRlcl8yXzIoVUVycm9yQ29kZSAqc3RhdHVzKTsNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgdm9p ZA0KdV9yZWxlYXNlRGVmYXVsdENvbnZlcnRlcl8yXzIoVUNvbnZlcnRlciAqY29udmVydGVyKTsN CiMgMjE0ICIuLi9jb21tb24vdXN0cl9pbXAuaCINCmV4dGVybiAiQyIgaW50MzJfdA0KdV90ZXJt aW5hdGVVQ2hhcnNfMl8yKFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwgaW50MzJf dCBsZW5ndGgsIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOw0KDQoNCg0KDQoNCmV4dGVybiAiQyIg aW50MzJfdA0KdV90ZXJtaW5hdGVDaGFyc18yXzIoY2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2Fw YWNpdHksIGludDMyX3QgbGVuZ3RoLCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsNCg0KDQoNCg0K DQpleHRlcm4gIkMiIGludDMyX3QNCnVfdGVybWluYXRlVUNoYXIzMnNfMl8yKFVDaGFyMzIgKmRl c3QsIGludDMyX3QgZGVzdENhcGFjaXR5LCBpbnQzMl90IGxlbmd0aCwgVUVycm9yQ29kZSAqcEVy cm9yQ29kZSk7DQoNCg0KDQoNCg0KZXh0ZXJuICJDIiBpbnQzMl90DQp1X3Rlcm1pbmF0ZVdDaGFy c18yXzIod2NoYXJfdCAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksIGludDMyX3QgbGVuZ3Ro LCBVRXJyb3JDb2RlICpwRXJyb3JDb2RlKTsNCiMgMjQ1ICIuLi9jb21tb24vdXN0cl9pbXAuaCIN CmV4dGVybiAiQyIgY29uc3QgVUNoYXIgKg0KdXBydl9zdHJGaW5kU3Vycm9nYXRlXzJfMihjb25z dCBVQ2hhciAqcywgaW50MzJfdCBsZW5ndGgsIFVDaGFyIHN1cnJvZ2F0ZSk7DQoNCg0KDQoNCg0K DQpleHRlcm4gIkMiIGNvbnN0IFVDaGFyICoNCnVwcnZfc3RyRmluZExhc3RTdXJyb2dhdGVfMl8y KGNvbnN0IFVDaGFyICpzLCBpbnQzMl90IGxlbmd0aCwgVUNoYXIgc3Vycm9nYXRlKTsNCiMgMjYg Ii4uL2NvbW1vbi91bm9ybWltcC5oIiAyDQojIDM0ICIuLi9jb21tb24vdW5vcm1pbXAuaCINCmVu dW0gew0KDQogICAgX05PUk1fUUNfTkZDPTB4MTEsDQogICAgX05PUk1fUUNfTkZLQz0weDIyLA0K ICAgIF9OT1JNX1FDX05GRD00LA0KICAgIF9OT1JNX1FDX05GS0Q9OCwNCg0KICAgIF9OT1JNX1FD X0FOWV9OTz0weGYsDQoNCg0KICAgIF9OT1JNX1FDX01BWUJFPTB4MTAsDQogICAgX05PUk1fUUNf QU5ZX01BWUJFPTB4MzAsDQoNCiAgICBfTk9STV9RQ19NQVNLPTB4M2YsDQoNCiAgICBfTk9STV9D T01CSU5FU19GV0Q9MHg0MCwNCiAgICBfTk9STV9DT01CSU5FU19CQUNLPTB4ODAsDQogICAgX05P Uk1fQ09NQklORVNfQU5ZPTB4YzAsDQoNCiAgICBfTk9STV9DQ19TSElGVD04LA0KICAgIF9OT1JN X0NDX01BU0s9MHhmZjAwLA0KDQogICAgX05PUk1fRVhUUkFfU0hJRlQ9MTYsDQogICAgX05PUk1f RVhUUkFfSU5ERVhfVE9QPTB4ZmMwMCwNCg0KICAgIF9OT1JNX0VYVFJBX1NVUlJPR0FURV9NQVNL PTB4M2ZmLA0KICAgIF9OT1JNX0VYVFJBX1NVUlJPR0FURV9UT1A9MHgzZjAsDQoNCiAgICBfTk9S TV9FWFRSQV9IQU5HVUw9X05PUk1fRVhUUkFfU1VSUk9HQVRFX1RPUCwNCiAgICBfTk9STV9FWFRS QV9KQU1PX0wsDQogICAgX05PUk1fRVhUUkFfSkFNT19WLA0KICAgIF9OT1JNX0VYVFJBX0pBTU9f VA0KfTsNCiMgNzYgIi4uL2NvbW1vbi91bm9ybWltcC5oIg0KZW51bSB7DQogICAgX05PUk1fQVVY X0NPTVBfRVhfU0hJRlQ9MTAsDQogICAgX05PUk1fQVVYX1VOU0FGRV9TSElGVD0xMQ0KfTsNCiMg ODggIi4uL2NvbW1vbi91bm9ybWltcC5oIg0KZW51bSB7DQogICAgX05PUk1fU0VUX0lOREVYX0NB Tk9OX1NFVFNfTEVOR1RILA0KICAgIF9OT1JNX1NFVF9JTkRFWF9DQU5PTl9CTVBfVEFCTEVfTEVO R1RILA0KICAgIF9OT1JNX1NFVF9JTkRFWF9DQU5PTl9TVVBQX1RBQkxFX0xFTkdUSCwNCg0KICAg IF9OT1JNX1NFVF9JTkRFWF9UT1A9MzINCn07DQojIDEwNiAiLi4vY29tbW9uL3Vub3JtaW1wLmgi DQplbnVtIHsNCiAgICBfTk9STV9JTkRFWF9UUklFX1NJWkUsDQogICAgX05PUk1fSU5ERVhfVUNI QVJfQ09VTlQsDQoNCiAgICBfTk9STV9JTkRFWF9DT01CSU5FX0RBVEFfQ09VTlQsDQogICAgX05P Uk1fSU5ERVhfQ09NQklORV9GV0RfQ09VTlQsDQogICAgX05PUk1fSU5ERVhfQ09NQklORV9CT1RI X0NPVU5ULA0KICAgIF9OT1JNX0lOREVYX0NPTUJJTkVfQkFDS19DT1VOVCwNCg0KICAgIF9OT1JN X0lOREVYX01JTl9ORkNfTk9fTUFZQkUsDQogICAgX05PUk1fSU5ERVhfTUlOX05GS0NfTk9fTUFZ QkUsDQogICAgX05PUk1fSU5ERVhfTUlOX05GRF9OT19NQVlCRSwNCiAgICBfTk9STV9JTkRFWF9N SU5fTkZLRF9OT19NQVlCRSwNCg0KICAgIF9OT1JNX0lOREVYX0ZDRF9UUklFX1NJWkUsDQoNCiAg ICBfTk9STV9JTkRFWF9BVVhfVFJJRV9TSVpFLA0KICAgIF9OT1JNX0lOREVYX0NBTk9OX1NFVF9D T1VOVCwNCg0KICAgIF9OT1JNX0lOREVYX1RPUD0zMg0KfTsNCg0KZW51bSB7DQoNCiAgICBfTk9S TV9NSU5fV0lUSF9MRUFEX0NDPTB4MzAwDQp9Ow0KDQplbnVtIHsNCg0KDQoNCg0KDQoNCg0KICAg IF9OT1JNX0RFQ09NUF9GTEFHX0xFTkdUSF9IQVNfQ0M9MHg4MCwNCg0KDQoNCiAgICBfTk9STV9E RUNPTVBfTEVOR1RIX01BU0s9MHg3Zg0KfTsNCiMgMTYwICIuLi9jb21tb24vdW5vcm1pbXAuaCIN CmV4dGVybiAiQyIgVUJvb2wNCnVub3JtX2hhdmVEYXRhXzJfMihVRXJyb3JDb2RlICpwRXJyb3JD b2RlKTsNCg0KDQoNCg0KDQoNCmV4dGVybiAiQyIgaW50MzJfdA0KdW5vcm1faW50ZXJuYWxOb3Jt YWxpemVfMl8yKFVDaGFyICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwNCiAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IFVDaGFyICpzcmMsIGludDMyX3Qgc3JjTGVuZ3RoLA0KICAgICAg ICAgICAgICAgICAgICAgICAgVU5vcm1hbGl6YXRpb25Nb2RlIG1vZGUsIFVCb29sIGlnbm9yZUhh bmd1bCwNCiAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOw0K DQoNCg0KDQoNCmV4dGVybiAiQyIgaW50MzJfdA0KdW5vcm1fZGVjb21wb3NlXzJfMihVQ2hhciAq ZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksDQogICAgICAgICAgICAgICAgY29uc3QgVUNoYXIg KnNyYywgaW50MzJfdCBzcmNMZW5ndGgsDQogICAgICAgICAgICAgICAgVUJvb2wgY29tcGF0LCBV Qm9vbCBpZ25vcmVIYW5ndWwsDQogICAgICAgICAgICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29k ZSk7DQoNCg0KDQoNCg0KZXh0ZXJuICJDIiBpbnQzMl90DQp1bm9ybV9jb21wb3NlXzJfMihVQ2hh ciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksDQogICAgICAgICAgICAgIGNvbnN0IFVDaGFy ICpzcmMsIGludDMyX3Qgc3JjTGVuZ3RoLA0KICAgICAgICAgICAgICBVQm9vbCBjb21wYXQsIFVC b29sIGlnbm9yZUhhbmd1bCwNCiAgICAgICAgICAgICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7 DQojIDIxNSAiLi4vY29tbW9uL3Vub3JtaW1wLmgiDQpleHRlcm4gIkMiIGludDMyX3QNCnVub3Jt X2NtcEVxdWl2Rm9sZF8yXzIoY29uc3QgVUNoYXIgKnMxLCBpbnQzMl90IGxlbmd0aDEsDQogICAg ICAgICAgICAgICAgICAgY29uc3QgVUNoYXIgKnMyLCBpbnQzMl90IGxlbmd0aDIsDQogICAgICAg ICAgICAgICAgICAgdWludDMyX3Qgb3B0aW9ucywNCiAgICAgICAgICAgICAgICAgICBVRXJyb3JD b2RlICpwRXJyb3JDb2RlKTsNCiMgMjI5ICIuLi9jb21tb24vdW5vcm1pbXAuaCINCmV4dGVybiAi QyIgY29uc3QgdWludDE2X3QgKg0KdW5vcm1fZ2V0RkNEVHJpZV8yXzIoVUVycm9yQ29kZSAqcEVy cm9yQ29kZSk7DQoNCg0KDQpuYW1lc3BhY2UgaWN1XzJfMiB7DQojIDI0OCAiLi4vY29tbW9uL3Vu b3JtaW1wLmgiDQppbmxpbmUgdWludDE2X3QNCnVub3JtX2dldEZDRDE2KGNvbnN0IHVpbnQxNl90 ICpmY2RUcmllSW5kZXgsIFVDaGFyIGMpIHsNCiAgICByZXR1cm4NCiAgICAgICAgZmNkVHJpZUlu ZGV4Ww0KICAgICAgICAgICAgKGZjZFRyaWVJbmRleFsNCiAgICAgICAgICAgICAgICBjPj5VVFJJ RV9TSElGVA0KICAgICAgICAgICAgXTw8VVRSSUVfSU5ERVhfU0hJRlQpKw0KICAgICAgICAgICAg KGMmVVRSSUVfTUFTSykNCiAgICAgICAgXTsNCn0NCiMgMjcwICIuLi9jb21tb24vdW5vcm1pbXAu aCINCmlubGluZSB1aW50MTZfdA0KdW5vcm1fZ2V0RkNEMTZGcm9tU3Vycm9nYXRlUGFpcihjb25z dCB1aW50MTZfdCAqZmNkVHJpZUluZGV4LCB1aW50MTZfdCBmY2QxNiwgVUNoYXIgYzIpIHsNCiAg ICByZXR1cm4NCiAgICAgICAgZmNkVHJpZUluZGV4Ww0KICAgICAgICAgICAgKGZjZFRyaWVJbmRl eFsNCiAgICAgICAgICAgICAgICAoaW50MzJfdClmY2QxNisoKGMyJjB4M2ZmKT4+VVRSSUVfU0hJ RlQpDQogICAgICAgICAgICBdPDxVVFJJRV9JTkRFWF9TSElGVCkrDQogICAgICAgICAgICAoYzIm VVRSSUVfTUFTSykNCiAgICAgICAgXTsNCn0NCg0KfQ0KDQoNCg0KDQoNCg0KDQpleHRlcm4gIkMi IGludDMyX3QNCnVub3JtX2dldERlY29tcG9zaXRpb25fMl8yKFVDaGFyMzIgYywgVUJvb2wgY29t cGF0LA0KICAgICAgICAgICAgICAgICAgICAgICBVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2Fw YWNpdHkpOw0KDQoNCg0KDQoNCmV4dGVybiAiQyIgVUJvb2wNCnVub3JtX2ludGVybmFsSXNGdWxs Q29tcG9zaXRpb25FeGNsdXNpb25fMl8yKFVDaGFyMzIgYyk7DQoNCg0KDQoNCg0KZXh0ZXJuICJD IiBVQm9vbA0KdW5vcm1faXNDYW5vblNhZmVTdGFydF8yXzIoVUNoYXIzMiBjKTsNCg0KDQoNCg0K DQpleHRlcm4gIkMiIFVCb29sDQp1bm9ybV9nZXRDYW5vblN0YXJ0U2V0XzJfMihVQ2hhcjMyIGMs IFVTZXJpYWxpemVkU2V0ICpmaWxsU2V0KTsNCiMgMzAgInVjb2xfZWxtLmNwcCIgMg0KIyAxICJj YW5pdGVyLmgiIDENCiMgMTQgImNhbml0ZXIuaCINCiMgMSAiLi4vY29tbW9uL3VuaWNvZGUvdW5p c2V0LmgiIDENCiMgMTMgIi4uL2NvbW1vbi91bmljb2RlL3VuaXNldC5oIg0KIyAxICIuLi9jb21t b24vdW5pY29kZS91bmlmaWx0LmgiIDENCiMgMTEgIi4uL2NvbW1vbi91bmljb2RlL3VuaWZpbHQu aCINCiMgMSAiLi4vY29tbW9uL3VuaWNvZGUvdW5pZnVuY3QuaCIgMQ0KIyAxNiAiLi4vY29tbW9u L3VuaWNvZGUvdW5pZnVuY3QuaCINCm5hbWVzcGFjZSBpY3VfMl8yIHsNCg0KY2xhc3MgVW5pY29k ZU1hdGNoZXI7DQpjbGFzcyBVbmljb2RlUmVwbGFjZXI7DQpjbGFzcyBUcmFuc2xpdGVyYXRpb25S dWxlRGF0YTsNCg0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRsbGltcG9ydCkpIFVu aWNvZGVGdW5jdG9yIDogcHVibGljIFVPYmplY3Qgew0KDQogcHVibGljOg0KDQoNCg0KDQogICAg dmlydHVhbCB+VW5pY29kZUZ1bmN0b3IoKTsNCg0KDQoNCg0KDQoNCiAgICB2aXJ0dWFsIFVuaWNv ZGVGdW5jdG9yKiBjbG9uZSgpIGNvbnN0ID0gMDsNCiMgNTIgIi4uL2NvbW1vbi91bmljb2RlL3Vu aWZ1bmN0LmgiDQogICAgdmlydHVhbCBVbmljb2RlTWF0Y2hlciogdG9NYXRjaGVyKCkgY29uc3Q7 DQojIDYzICIuLi9jb21tb24vdW5pY29kZS91bmlmdW5jdC5oIg0KICAgIHZpcnR1YWwgVW5pY29k ZVJlcGxhY2VyKiB0b1JlcGxhY2VyKCkgY29uc3Q7DQojIDc2ICIuLi9jb21tb24vdW5pY29kZS91 bmlmdW5jdC5oIg0KICAgIHN0YXRpYyBVQ2xhc3NJRCBnZXRTdGF0aWNDbGFzc0lEKHZvaWQpIHsg cmV0dXJuIChVQ2xhc3NJRCkmZmdDbGFzc0lEOyB9DQojIDEwMCAiLi4vY29tbW9uL3VuaWNvZGUv dW5pZnVuY3QuaCINCiAgICB2aXJ0dWFsIFVDbGFzc0lEIGdldER5bmFtaWNDbGFzc0lEKHZvaWQp IGNvbnN0IHsgcmV0dXJuIGdldFN0YXRpY0NsYXNzSUQoKTsgfTsNCiMgMTEwICIuLi9jb21tb24v dW5pY29kZS91bmlmdW5jdC5oIg0KICAgIHZpcnR1YWwgdm9pZCBzZXREYXRhKGNvbnN0IFRyYW5z bGl0ZXJhdGlvblJ1bGVEYXRhKikgPSAwOw0KDQogcHJvdGVjdGVkOg0KDQogICAgVW5pY29kZUZ1 bmN0b3IoKTsNCg0KIHByaXZhdGU6DQoNCg0KDQoNCg0KICAgIHN0YXRpYyBjb25zdCBjaGFyIGZn Q2xhc3NJRDsNCn07DQoNCmlubGluZSBVbmljb2RlRnVuY3Rvcjo6VW5pY29kZUZ1bmN0b3IoKSB7 fQ0KaW5saW5lIFVuaWNvZGVGdW5jdG9yOjp+VW5pY29kZUZ1bmN0b3IoKSB7fQ0KDQp9DQojIDEy ICIuLi9jb21tb24vdW5pY29kZS91bmlmaWx0LmgiIDINCiMgMSAiLi4vY29tbW9uL3VuaWNvZGUv dW5pbWF0Y2guaCIgMQ0KIyAxMyAiLi4vY29tbW9uL3VuaWNvZGUvdW5pbWF0Y2guaCINCm5hbWVz cGFjZSBpY3VfMl8yIHsNCg0KY2xhc3MgUmVwbGFjZWFibGU7DQpjbGFzcyBVbmljb2RlU3RyaW5n Ow0KY2xhc3MgVW5pY29kZVNldDsNCg0KDQoNCg0KDQplbnVtIFVNYXRjaERlZ3JlZSB7DQoNCg0K DQoNCg0KDQogICAgVV9NSVNNQVRDSCwNCiMgNDEgIi4uL2NvbW1vbi91bmljb2RlL3VuaW1hdGNo LmgiDQogICAgVV9QQVJUSUFMX01BVENILA0KIyA1MCAiLi4vY29tbW9uL3VuaWNvZGUvdW5pbWF0 Y2guaCINCiAgICBVX01BVENIDQp9Ow0KDQoNCg0KDQoNCmNsYXNzIF9fYXR0cmlidXRlX18oKGRs bGltcG9ydCkpIFVuaWNvZGVNYXRjaGVyIHsNCg0KcHVibGljOg0KIyAxMDYgIi4uL2NvbW1vbi91 bmljb2RlL3VuaW1hdGNoLmgiDQogICAgdmlydHVhbCBVTWF0Y2hEZWdyZWUgbWF0Y2hlcyhjb25z dCBSZXBsYWNlYWJsZSYgdGV4dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dDMyX3QmIG9mZnNldCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg bGltaXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCBpbmNyZW1lbnRh bCkgPSAwOw0KIyAxMjIgIi4uL2NvbW1vbi91bmljb2RlL3VuaW1hdGNoLmgiDQogICAgdmlydHVh bCBVbmljb2RlU3RyaW5nJiB0b1BhdHRlcm4oVW5pY29kZVN0cmluZyYgcmVzdWx0LA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVCb29sIGVzY2FwZVVucHJpbnRhYmxlID0g MCkgY29uc3QgPSAwOw0KDQoNCg0KDQoNCg0KDQogICAgdmlydHVhbCBVQm9vbCBtYXRjaGVzSW5k ZXhWYWx1ZSh1aW50OF90IHYpIGNvbnN0ID0gMDsNCg0KDQoNCg0KDQoNCiAgICB2aXJ0dWFsIHZv aWQgYWRkTWF0Y2hTZXRUbyhVbmljb2RlU2V0JiB0b1VuaW9uVG8pIGNvbnN0ID0gMDsNCn07DQoN Cn0NCiMgMTMgIi4uL2NvbW1vbi91bmljb2RlL3VuaWZpbHQuaCIgMg0KDQpuYW1lc3BhY2UgaWN1 XzJfMiB7DQojIDUwICIuLi9jb21tb24vdW5pY29kZS91bmlmaWx0LmgiDQpjbGFzcyBfX2F0dHJp YnV0ZV9fKChkbGxpbXBvcnQpKSBVbmljb2RlRmlsdGVyIDogcHVibGljIFVuaWNvZGVGdW5jdG9y LCBwdWJsaWMgVW5pY29kZU1hdGNoZXIgew0KDQpwdWJsaWM6DQoNCg0KDQoNCiAgICB2aXJ0dWFs IH5Vbmljb2RlRmlsdGVyKCk7DQojIDY2ICIuLi9jb21tb24vdW5pY29kZS91bmlmaWx0LmgiDQog ICAgdmlydHVhbCBVQm9vbCBjb250YWlucyhVQ2hhcjMyIGMpIGNvbnN0ID0gMDsNCg0KDQoNCg0K DQogICAgdmlydHVhbCBVbmljb2RlTWF0Y2hlciogdG9NYXRjaGVyKCkgY29uc3Q7DQoNCg0KDQoN CiAgICBVbmljb2RlU3RyaW5nJiB0b1BhdHRlcm4oVW5pY29kZVN0cmluZyYgcmVzdWx0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCBlc2NhcGVVbnByaW50YWJsZSkgY29uc3Q7 DQoNCg0KDQoNCiAgICBVQm9vbCBtYXRjaGVzSW5kZXhWYWx1ZSh1aW50OF90IHYpIGNvbnN0Ow0K DQoNCg0KDQogICAgdmlydHVhbCBVTWF0Y2hEZWdyZWUgbWF0Y2hlcyhjb25zdCBSZXBsYWNlYWJs ZSYgdGV4dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QmIG9mZnNl dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGltaXQsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVQm9vbCBpbmNyZW1lbnRhbCk7DQoNCg0KDQoN CiAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShjb25zdCBUcmFuc2xpdGVyYXRpb25SdWxlRGF0YSop IHt9DQoNCg0KDQoNCg0KDQogICAgdmlydHVhbCBpbmxpbmUgVUNsYXNzSUQgZ2V0RHluYW1pY0Ns YXNzSUQoKSBjb25zdCB7IHJldHVybiBnZXRTdGF0aWNDbGFzc0lEKCk7IH0NCg0KDQoNCg0KDQoN CiAgICBzdGF0aWMgaW5saW5lIFVDbGFzc0lEIGdldFN0YXRpY0NsYXNzSUQoKSB7IHJldHVybiAo VUNsYXNzSUQpJmZnQ2xhc3NJRDsgfQ0KDQoNCg0KDQoNCg0KICAgIHZpcnR1YWwgdm9pZCBhZGRN YXRjaFNldFRvKFVuaWNvZGVTZXQmIHRvVW5pb25UbykgY29uc3Q7DQoNCnByb3RlY3RlZDoNCg0K ICAgIFVuaWNvZGVGaWx0ZXIoKTsNCg0KcHJpdmF0ZToNCg0KDQoNCg0KDQogICAgc3RhdGljIGNv bnN0IGNoYXIgZmdDbGFzc0lEOw0KfTsNCg0KaW5saW5lIFVuaWNvZGVGaWx0ZXI6OlVuaWNvZGVG aWx0ZXIoKSB7fQ0KaW5saW5lIFVuaWNvZGVGaWx0ZXI6On5Vbmljb2RlRmlsdGVyKCkge30NCg0K fQ0KIyAxNCAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc2V0LmgiIDINCg0KDQoNCm5hbWVzcGFjZSBp Y3VfMl8yIHsNCg0KY2xhc3MgUGFyc2VQb3NpdGlvbjsNCmNsYXNzIFN5bWJvbFRhYmxlOw0KY2xh c3MgVHJhbnNsaXRlcmF0aW9uUnVsZVBhcnNlcjsNCmNsYXNzIFRyYW5zbGl0ZXJhdGlvblJ1bGU7 DQpjbGFzcyBUcmFuc2xpdGVyYXRvcjsNCmNsYXNzIFRyYW5zbGl0ZXJhdG9yUGFyc2VyOw0KY2xh c3MgVVZlY3RvcjsNCiMgMjE5ICIuLi9jb21tb24vdW5pY29kZS91bmlzZXQuaCINCmNsYXNzIF9f YXR0cmlidXRlX18oKGRsbGltcG9ydCkpIFVuaWNvZGVTZXQgOiBwdWJsaWMgVW5pY29kZUZpbHRl ciB7DQoNCiAgICBpbnQzMl90IGxlbjsNCiAgICBpbnQzMl90IGNhcGFjaXR5Ow0KICAgIGludDMy X3QgYnVmZmVyQ2FwYWNpdHk7DQogICAgVUNoYXIzMiogbGlzdDsNCiAgICBVQ2hhcjMyKiBidWZm ZXI7DQoNCiAgICBVVmVjdG9yKiBzdHJpbmdzOw0KIyAyMzggIi4uL2NvbW1vbi91bmljb2RlL3Vu aXNldC5oIg0KICAgIFVuaWNvZGVTdHJpbmcgcGF0Ow0KDQpwdWJsaWM6DQoNCg0KDQoNCiAgICBz dGF0aWMgY29uc3QgVUNoYXIzMiBNSU5fVkFMVUU7DQoNCg0KDQoNCiAgICBzdGF0aWMgY29uc3Qg VUNoYXIzMiBNQVhfVkFMVUU7DQoNCg0KDQoNCg0KcHVibGljOg0KDQoNCg0KDQoNCiAgICBVbmlj b2RlU2V0KCk7DQojIDI3MSAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc2V0LmgiDQogICAgVW5pY29k ZVNldChVQ2hhcjMyIHN0YXJ0LCBVQ2hhcjMyIGVuZCk7DQojIDI4MSAiLi4vY29tbW9uL3VuaWNv ZGUvdW5pc2V0LmgiDQogICAgVW5pY29kZVNldChjb25zdCBVbmljb2RlU3RyaW5nJiBwYXR0ZXJu LA0KICAgICAgICAgICAgICAgVUVycm9yQ29kZSYgc3RhdHVzKTsNCg0KDQoNCg0KDQoNCg0KICAg IFVuaWNvZGVTZXQoaW50OF90IGNhdGVnb3J5LCBVRXJyb3JDb2RlJiBzdGF0dXMpOw0KDQoNCg0K DQoNCiAgICBVbmljb2RlU2V0KGNvbnN0IFVuaWNvZGVTZXQmIG8pOw0KDQoNCg0KDQoNCiAgICB2 aXJ0dWFsIH5Vbmljb2RlU2V0KCk7DQoNCg0KDQoNCg0KICAgIFVuaWNvZGVTZXQmIG9wZXJhdG9y PShjb25zdCBVbmljb2RlU2V0JiBvKTsNCiMgMzIxICIuLi9jb21tb24vdW5pY29kZS91bmlzZXQu aCINCiAgICB2aXJ0dWFsIFVCb29sIG9wZXJhdG9yPT0oY29uc3QgVW5pY29kZVNldCYgbykgY29u c3Q7DQoNCg0KDQoNCg0KDQogICAgVUJvb2wgb3BlcmF0b3IhPShjb25zdCBVbmljb2RlU2V0JiBv KSBjb25zdDsNCg0KDQoNCg0KDQoNCg0KICAgIHZpcnR1YWwgVW5pY29kZUZ1bmN0b3IqIGNsb25l KCkgY29uc3Q7DQojIDM0NSAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc2V0LmgiDQogICAgdmlydHVh bCBpbnQzMl90IGhhc2hDb2RlKHZvaWQpIGNvbnN0Ow0KIyAzNTkgIi4uL2NvbW1vbi91bmljb2Rl L3VuaXNldC5oIg0KICAgIFVuaWNvZGVTZXQmIHNldChVQ2hhcjMyIHN0YXJ0LCBVQ2hhcjMyIGVu ZCk7DQoNCg0KDQoNCg0KICAgIHN0YXRpYyBVQm9vbCByZXNlbWJsZXNQYXR0ZXJuKGNvbnN0IFVu aWNvZGVTdHJpbmcmIHBhdHRlcm4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50MzJfdCBwb3MpOw0KIyAzNzcgIi4uL2NvbW1vbi91bmljb2RlL3VuaXNldC5oIg0KICAgIHZp cnR1YWwgVW5pY29kZVNldCYgYXBwbHlQYXR0ZXJuKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHBhdHRl cm4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSYgc3Rh dHVzKTsNCiMgMzkyICIuLi9jb21tb24vdW5pY29kZS91bmlzZXQuaCINCiAgICB2aXJ0dWFsIFVu aWNvZGVTdHJpbmcmIHRvUGF0dGVybihVbmljb2RlU3RyaW5nJiByZXN1bHQsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVUJvb2wgZXNjYXBlVW5wcmludGFibGUgPSAwKSBj b25zdDsNCiMgNDAyICIuLi9jb21tb24vdW5pY29kZS91bmlzZXQuaCINCiAgICB2aXJ0dWFsIGlu dDMyX3Qgc2l6ZSh2b2lkKSBjb25zdDsNCg0KDQoNCg0KDQoNCg0KICAgIHZpcnR1YWwgVUJvb2wg aXNFbXB0eSh2b2lkKSBjb25zdDsNCg0KDQoNCg0KDQoNCg0KICAgIHZpcnR1YWwgVUJvb2wgY29u dGFpbnMoVUNoYXIzMiBjKSBjb25zdDsNCiMgNDI4ICIuLi9jb21tb24vdW5pY29kZS91bmlzZXQu aCINCiAgICB2aXJ0dWFsIFVCb29sIGNvbnRhaW5zKFVDaGFyMzIgc3RhcnQsIFVDaGFyMzIgZW5k KSBjb25zdDsNCg0KDQoNCg0KDQoNCg0KICAgIFVCb29sIGNvbnRhaW5zKGNvbnN0IFVuaWNvZGVT dHJpbmcmIHMpIGNvbnN0Ow0KDQoNCg0KDQoNCg0KDQogICAgdmlydHVhbCBVQm9vbCBjb250YWlu c0FsbChjb25zdCBVbmljb2RlU2V0JiBjKSBjb25zdDsNCg0KDQoNCg0KDQoNCg0KICAgIFVCb29s IGNvbnRhaW5zQWxsKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHMpIGNvbnN0Ow0KIyA0NjEgIi4uL2Nv bW1vbi91bmljb2RlL3VuaXNldC5oIg0KICAgIFVCb29sIGNvbnRhaW5zTm9uZShVQ2hhcjMyIHN0 YXJ0LCBVQ2hhcjMyIGVuZCkgY29uc3Q7DQoNCg0KDQoNCg0KDQoNCiAgICBVQm9vbCBjb250YWlu c05vbmUoY29uc3QgVW5pY29kZVNldCYgYykgY29uc3Q7DQoNCg0KDQoNCg0KDQoNCiAgICBVQm9v bCBjb250YWluc05vbmUoY29uc3QgVW5pY29kZVN0cmluZyYgcykgY29uc3Q7DQojIDQ4NiAiLi4v Y29tbW9uL3VuaWNvZGUvdW5pc2V0LmgiDQogICAgaW5saW5lIFVCb29sIGNvbnRhaW5zU29tZShV Q2hhcjMyIHN0YXJ0LCBVQ2hhcjMyIGVuZCkgY29uc3Q7DQoNCg0KDQoNCg0KDQoNCiAgICBpbmxp bmUgVUJvb2wgY29udGFpbnNTb21lKGNvbnN0IFVuaWNvZGVTZXQmIHMpIGNvbnN0Ow0KDQoNCg0K DQoNCg0KDQogICAgaW5saW5lIFVCb29sIGNvbnRhaW5zU29tZShjb25zdCBVbmljb2RlU3RyaW5n JiBzKSBjb25zdDsNCg0KDQoNCg0KICAgIFVNYXRjaERlZ3JlZSBtYXRjaGVzKGNvbnN0IFJlcGxh Y2VhYmxlJiB0ZXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgIGludDMyX3QmIG9mZnNldCwN CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90IGxpbWl0LA0KICAgICAgICAgICAgICAg ICAgICAgICAgIFVCb29sIGluY3JlbWVudGFsKTsNCg0KIHByaXZhdGU6DQojIDUzNCAiLi4vY29t bW9uL3VuaWNvZGUvdW5pc2V0LmgiDQogICAgc3RhdGljIGludDMyX3QgbWF0Y2hSZXN0KGNvbnN0 IFJlcGxhY2VhYmxlJiB0ZXh0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90 IHN0YXJ0LCBpbnQzMl90IGxpbWl0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBVbmljb2RlU3RyaW5nJiBzKTsNCiMgNTQ3ICIuLi9jb21tb24vdW5pY29kZS91bmlzZXQuaCIN CiAgICBpbnQzMl90IGZpbmRDb2RlUG9pbnQoVUNoYXIzMiBjKSBjb25zdDsNCg0KIHB1YmxpYzoN Cg0KDQoNCg0KDQoNCg0KICAgIHZvaWQgYWRkTWF0Y2hTZXRUbyhVbmljb2RlU2V0JiB0b1VuaW9u VG8pIGNvbnN0Ow0KIyA1NjYgIi4uL2NvbW1vbi91bmljb2RlL3VuaXNldC5oIg0KICAgIGludDMy X3QgaW5kZXhPZihVQ2hhcjMyIGMpIGNvbnN0Ow0KIyA1NzYgIi4uL2NvbW1vbi91bmljb2RlL3Vu aXNldC5oIg0KICAgIFVDaGFyMzIgY2hhckF0KGludDMyX3QgaW5kZXgpIGNvbnN0Ow0KIyA1OTEg Ii4uL2NvbW1vbi91bmljb2RlL3VuaXNldC5oIg0KICAgIHZpcnR1YWwgVW5pY29kZVNldCYgYWRk KFVDaGFyMzIgc3RhcnQsIFVDaGFyMzIgZW5kKTsNCg0KDQoNCg0KDQoNCg0KICAgIFVuaWNvZGVT ZXQmIGFkZChVQ2hhcjMyIGMpOw0KIyA2MTAgIi4uL2NvbW1vbi91bmljb2RlL3VuaXNldC5oIg0K ICAgIFVuaWNvZGVTZXQmIGFkZChjb25zdCBVbmljb2RlU3RyaW5nJiBzKTsNCg0KIHByaXZhdGU6 DQoNCg0KDQoNCg0KICAgIHN0YXRpYyBpbnQzMl90IGdldFNpbmdsZUNQKGNvbnN0IFVuaWNvZGVT dHJpbmcmIHMpOw0KDQogICAgdm9pZCBfYWRkKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHMpOw0KDQog cHVibGljOg0KDQoNCg0KDQoNCg0KICAgIFVuaWNvZGVTZXQmIGFkZEFsbChjb25zdCBVbmljb2Rl U3RyaW5nJiBzKTsNCg0KDQoNCg0KDQoNCg0KICAgIFVuaWNvZGVTZXQmIHJldGFpbkFsbChjb25z dCBVbmljb2RlU3RyaW5nJiBzKTsNCg0KDQoNCg0KDQoNCg0KICAgIFVuaWNvZGVTZXQmIGNvbXBs ZW1lbnRBbGwoY29uc3QgVW5pY29kZVN0cmluZyYgcyk7DQoNCg0KDQoNCg0KDQoNCiAgICBVbmlj b2RlU2V0JiByZW1vdmVBbGwoY29uc3QgVW5pY29kZVN0cmluZyYgcyk7DQojIDY2MiAiLi4vY29t bW9uL3VuaWNvZGUvdW5pc2V0LmgiDQogICAgc3RhdGljIFVuaWNvZGVTZXQqIGNyZWF0ZUZyb20o Y29uc3QgVW5pY29kZVN0cmluZyYgcyk7DQojIDY3MSAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc2V0 LmgiDQogICAgc3RhdGljIFVuaWNvZGVTZXQqIGNyZWF0ZUZyb21BbGwoY29uc3QgVW5pY29kZVN0 cmluZyYgcyk7DQojIDY4NSAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc2V0LmgiDQogICAgdmlydHVh bCBVbmljb2RlU2V0JiByZXRhaW4oVUNoYXIzMiBzdGFydCwgVUNoYXIzMiBlbmQpOw0KDQoNCg0K DQoNCg0KICAgIFVuaWNvZGVTZXQmIHJldGFpbihVQ2hhcjMyIGMpOw0KIyA3MDYgIi4uL2NvbW1v bi91bmljb2RlL3VuaXNldC5oIg0KICAgIHZpcnR1YWwgVW5pY29kZVNldCYgcmVtb3ZlKFVDaGFy MzIgc3RhcnQsIFVDaGFyMzIgZW5kKTsNCg0KDQoNCg0KDQoNCg0KICAgIFVuaWNvZGVTZXQmIHJl bW92ZShVQ2hhcjMyIGMpOw0KIyA3MjMgIi4uL2NvbW1vbi91bmljb2RlL3VuaXNldC5oIg0KICAg IFVuaWNvZGVTZXQmIHJlbW92ZShjb25zdCBVbmljb2RlU3RyaW5nJiBzKTsNCg0KDQoNCg0KDQoN Cg0KICAgIHZpcnR1YWwgVW5pY29kZVNldCYgY29tcGxlbWVudCh2b2lkKTsNCiMgNzQ2ICIuLi9j b21tb24vdW5pY29kZS91bmlzZXQuaCINCiAgICB2aXJ0dWFsIFVuaWNvZGVTZXQmIGNvbXBsZW1l bnQoVUNoYXIzMiBzdGFydCwgVUNoYXIzMiBlbmQpOw0KDQoNCg0KDQoNCg0KDQogICAgVW5pY29k ZVNldCYgY29tcGxlbWVudChVQ2hhcjMyIGMpOw0KIyA3NjQgIi4uL2NvbW1vbi91bmljb2RlL3Vu aXNldC5oIg0KICAgIFVuaWNvZGVTZXQmIGNvbXBsZW1lbnQoY29uc3QgVW5pY29kZVN0cmluZyYg cyk7DQojIDc3NyAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc2V0LmgiDQogICAgdmlydHVhbCBVbmlj b2RlU2V0JiBhZGRBbGwoY29uc3QgVW5pY29kZVNldCYgYyk7DQojIDc4OSAiLi4vY29tbW9uL3Vu aWNvZGUvdW5pc2V0LmgiDQogICAgdmlydHVhbCBVbmljb2RlU2V0JiByZXRhaW5BbGwoY29uc3Qg VW5pY29kZVNldCYgYyk7DQojIDgwMSAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc2V0LmgiDQogICAg dmlydHVhbCBVbmljb2RlU2V0JiByZW1vdmVBbGwoY29uc3QgVW5pY29kZVNldCYgYyk7DQojIDgx MSAiLi4vY29tbW9uL3VuaWNvZGUvdW5pc2V0LmgiDQogICAgdmlydHVhbCBVbmljb2RlU2V0JiBj b21wbGVtZW50QWxsKGNvbnN0IFVuaWNvZGVTZXQmIGMpOw0KDQoNCg0KDQoNCg0KICAgIHZpcnR1 YWwgVW5pY29kZVNldCYgY2xlYXIodm9pZCk7DQoNCg0KDQoNCg0KDQoNCiAgICB2aXJ0dWFsIGlu dDMyX3QgZ2V0UmFuZ2VDb3VudCh2b2lkKSBjb25zdDsNCg0KDQoNCg0KDQoNCg0KICAgIHZpcnR1 YWwgVUNoYXIzMiBnZXRSYW5nZVN0YXJ0KGludDMyX3QgaW5kZXgpIGNvbnN0Ow0KDQoNCg0KDQoN Cg0KDQogICAgdmlydHVhbCBVQ2hhcjMyIGdldFJhbmdlRW5kKGludDMyX3QgaW5kZXgpIGNvbnN0 Ow0KIyA4OTEgIi4uL2NvbW1vbi91bmljb2RlL3VuaXNldC5oIg0KICAgIGludDMyX3Qgc2VyaWFs aXplKHVpbnQxNl90ICpkZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwgVUVycm9yQ29kZSYgZWMp IGNvbnN0Ow0KDQoNCg0KDQoNCiAgICB2aXJ0dWFsIFVuaWNvZGVTZXQmIGNvbXBhY3QoKTsNCiMg OTEwICIuLi9jb21tb24vdW5pY29kZS91bmlzZXQuaCINCiAgICBzdGF0aWMgVUNsYXNzSUQgZ2V0 U3RhdGljQ2xhc3NJRCh2b2lkKSB7IHJldHVybiAoVUNsYXNzSUQpJmZnQ2xhc3NJRDsgfQ0KIyA5 MTkgIi4uL2NvbW1vbi91bmljb2RlL3VuaXNldC5oIg0KICAgIHZpcnR1YWwgVUNsYXNzSUQgZ2V0 RHluYW1pY0NsYXNzSUQodm9pZCkgY29uc3QgeyByZXR1cm4gZ2V0U3RhdGljQ2xhc3NJRCgpOyB9 Ow0KDQpwcml2YXRlOg0KDQoNCg0KICAgIGZyaWVuZCBjbGFzcyBVU2V0QWNjZXNzOw0KDQogICAg aW50MzJfdCBnZXRTdHJpbmdDb3VudCgpIGNvbnN0Ow0KDQogICAgY29uc3QgVW5pY29kZVN0cmlu ZyogZ2V0U3RyaW5nKGludDMyX3QgaW5kZXgpIGNvbnN0Ow0KDQpwcml2YXRlOg0KDQogICAgc3Rh dGljIGNvbnN0IGNoYXIgZmdDbGFzc0lEOw0KDQoNCg0KDQoNCiAgICBmcmllbmQgY2xhc3MgVHJh bnNsaXRlcmF0b3I7DQogICAgZnJpZW5kIGNsYXNzIFRyYW5zbGl0ZXJhdG9yUGFyc2VyOw0KICAg IGZyaWVuZCBjbGFzcyBUcmFuc2xpdGVyYXRvcklEUGFyc2VyOw0KICAgIGZyaWVuZCBjbGFzcyBU cmFuc2xpdGVyYXRpb25SdWxlOw0KDQogICAgZnJpZW5kIGNsYXNzIFJCQklSdWxlU2Nhbm5lcjsN CiMgOTY0ICIuLi9jb21tb24vdW5pY29kZS91bmlzZXQuaCINCiAgICBVbmljb2RlU2V0KGNvbnN0 IFVuaWNvZGVTdHJpbmcmIHBhdHRlcm4sIFBhcnNlUG9zaXRpb24mIHBvcywNCiAgICAgICAgICAg ICAgIGNvbnN0IFN5bWJvbFRhYmxlJiBzeW1ib2xzLA0KICAgICAgICAgICAgICAgVUVycm9yQ29k ZSYgc3RhdHVzKTsNCg0KDQoNCg0KDQoNCiAgICBVbmljb2RlU2V0KGNvbnN0IFVuaWNvZGVTdHJp bmcmIHBhdHRlcm4sIFBhcnNlUG9zaXRpb24mIHBvcywNCiAgICAgICAgICAgICAgIFVFcnJvckNv ZGUmIHN0YXR1cyk7DQoNCg0KDQoNCg0KDQogICAgdmlydHVhbCBVQm9vbCBtYXRjaGVzSW5kZXhW YWx1ZSh1aW50OF90IHYpIGNvbnN0Ow0KDQpwcml2YXRlOg0KIyAxMDEzICIuLi9jb21tb24vdW5p Y29kZS91bmlzZXQuaCINCiAgICB2b2lkIGFwcGx5UGF0dGVybihjb25zdCBVbmljb2RlU3RyaW5n JiBwYXR0ZXJuLA0KICAgICAgICAgICAgICAgICAgICAgIFBhcnNlUG9zaXRpb24mIHBvcywNCiAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBTeW1ib2xUYWJsZSogc3ltYm9scywNCiAgICAgICAg ICAgICAgICAgICAgICBVRXJyb3JDb2RlJiBzdGF0dXMpOw0KDQoNCg0KDQoNCiAgICB2b2lkIGVu c3VyZUNhcGFjaXR5KGludDMyX3QgbmV3TGVuKTsNCg0KICAgIHZvaWQgZW5zdXJlQnVmZmVyQ2Fw YWNpdHkoaW50MzJfdCBuZXdMZW4pOw0KDQogICAgdm9pZCBzd2FwQnVmZmVycyh2b2lkKTsNCg0K ICAgIFVCb29sIGFsbG9jYXRlU3RyaW5ncygpOw0KDQogICAgdm9pZCBfYXBwbHlQYXR0ZXJuKGNv bnN0IFVuaWNvZGVTdHJpbmcmIHBhdHRlcm4sDQogICAgICAgICAgICAgICAgICAgICAgIFBhcnNl UG9zaXRpb24mIHBvcywNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3ltYm9sVGFibGUq IHN5bWJvbHMsDQogICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVTdHJpbmcmIHJlYnVpbHRQ YXQsDQogICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUmIHN0YXR1cyk7DQoNCiAgICBV bmljb2RlU3RyaW5nJiBfdG9QYXR0ZXJuKFVuaWNvZGVTdHJpbmcmIHJlc3VsdCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFVCb29sIGVzY2FwZVVucHJpbnRhYmxlKSBjb25zdDsNCg0K ICAgIFVuaWNvZGVTdHJpbmcmIF9nZW5lcmF0ZVBhdHRlcm4oVW5pY29kZVN0cmluZyYgcmVzdWx0 LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUJvb2wgZXNjYXBlVW5wcmlu dGFibGUpIGNvbnN0Ow0KDQogICAgc3RhdGljIHZvaWQgX2FwcGVuZFRvUGF0KFVuaWNvZGVTdHJp bmcmIGJ1ZiwgY29uc3QgVW5pY29kZVN0cmluZyYgcywgVUJvb2wgZXNjYXBlVW5wcmludGFibGUp Ow0KDQogICAgc3RhdGljIHZvaWQgX2FwcGVuZFRvUGF0KFVuaWNvZGVTdHJpbmcmIGJ1ZiwgVUNo YXIzMiBjLCBVQm9vbCBlc2NhcGVVbnByaW50YWJsZSk7DQoNCg0KDQoNCg0KICAgIHZvaWQgZXhj bHVzaXZlT3IoY29uc3QgVUNoYXIzMiogb3RoZXIsIGludDMyX3Qgb3RoZXJMZW4sIGludDhfdCBw b2xhcml0eSk7DQoNCiAgICB2b2lkIGFkZChjb25zdCBVQ2hhcjMyKiBvdGhlciwgaW50MzJfdCBv dGhlckxlbiwgaW50OF90IHBvbGFyaXR5KTsNCg0KICAgIHZvaWQgcmV0YWluKGNvbnN0IFVDaGFy MzIqIG90aGVyLCBpbnQzMl90IG90aGVyTGVuLCBpbnQ4X3QgcG9sYXJpdHkpOw0KDQogICAgZnJp ZW5kIGNsYXNzIFVuaWNvZGVTZXRJdGVyYXRvcjsNCn07DQoNCmlubGluZSBVQm9vbCBVbmljb2Rl U2V0OjpvcGVyYXRvciE9KGNvbnN0IFVuaWNvZGVTZXQmIG8pIGNvbnN0IHsNCiAgICByZXR1cm4g IW9wZXJhdG9yPT0obyk7DQp9DQoNCmlubGluZSBVQm9vbCBVbmljb2RlU2V0Ojpjb250YWluc1Nv bWUoVUNoYXIzMiBzdGFydCwgVUNoYXIzMiBlbmQpIGNvbnN0IHsNCiAgICByZXR1cm4gIWNvbnRh aW5zTm9uZShzdGFydCwgZW5kKTsNCn0NCg0KaW5saW5lIFVCb29sIFVuaWNvZGVTZXQ6OmNvbnRh aW5zU29tZShjb25zdCBVbmljb2RlU2V0JiBzKSBjb25zdCB7DQogICAgcmV0dXJuICFjb250YWlu c05vbmUocyk7DQp9DQoNCmlubGluZSBVQm9vbCBVbmljb2RlU2V0Ojpjb250YWluc1NvbWUoY29u c3QgVW5pY29kZVN0cmluZyYgcykgY29uc3Qgew0KICAgIHJldHVybiAhY29udGFpbnNOb25lKHMp Ow0KfQ0KDQp9DQojIDE1ICJjYW5pdGVyLmgiIDINCiMgMSAiLi4vY29tbW9uL3VuaWNvZGUvbm9y bWx6ci5oIiAxDQojIDE1ICIuLi9jb21tb24vdW5pY29kZS9ub3JtbHpyLmgiDQojIDEgIi4uL2Nv bW1vbi91bmljb2RlL2NoYXJpdGVyLmgiIDENCiMgMTcgIi4uL2NvbW1vbi91bmljb2RlL2NoYXJp dGVyLmgiDQpuYW1lc3BhY2UgaWN1XzJfMiB7DQojIDg1ICIuLi9jb21tb24vdW5pY29kZS9jaGFy aXRlci5oIg0KY2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgRm9yd2FyZENoYXJhY3Rl ckl0ZXJhdG9yIDogcHVibGljIFVPYmplY3Qgew0KcHVibGljOg0KDQoNCg0KDQoNCiAgZW51bSB7 IERPTkUgPSAweGZmZmYgfTsNCg0KDQoNCg0KDQogIHZpcnR1YWwgfkZvcndhcmRDaGFyYWN0ZXJJ dGVyYXRvcigpIHt9DQojIDEwOCAiLi4vY29tbW9uL3VuaWNvZGUvY2hhcml0ZXIuaCINCiAgdmly dHVhbCBVQm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvciYgdGhh dCkgY29uc3QgPSAwOw0KIyAxMjAgIi4uL2NvbW1vbi91bmljb2RlL2NoYXJpdGVyLmgiDQogIGlu bGluZSBVQm9vbCBvcGVyYXRvciE9KGNvbnN0IEZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvciYgdGhh dCkgY29uc3Q7DQoNCg0KDQoNCg0KDQogIHZpcnR1YWwgaW50MzJfdCBoYXNoQ29kZSh2b2lkKSBj b25zdCA9IDA7DQojIDEzNiAiLi4vY29tbW9uL3VuaWNvZGUvY2hhcml0ZXIuaCINCiAgdmlydHVh bCBVQ2xhc3NJRCBnZXREeW5hbWljQ2xhc3NJRCh2b2lkKSBjb25zdCA9IDA7DQojIDE0NiAiLi4v Y29tbW9uL3VuaWNvZGUvY2hhcml0ZXIuaCINCiAgdmlydHVhbCBVQ2hhciBuZXh0UG9zdEluYyh2 b2lkKSA9IDA7DQojIDE1NiAiLi4vY29tbW9uL3VuaWNvZGUvY2hhcml0ZXIuaCINCiAgdmlydHVh bCBVQ2hhcjMyIG5leHQzMlBvc3RJbmModm9pZCkgPSAwOw0KIyAxNjcgIi4uL2NvbW1vbi91bmlj b2RlL2NoYXJpdGVyLmgiDQogIHZpcnR1YWwgVUJvb2wgaGFzTmV4dCgpID0gMDsNCg0KcHJvdGVj dGVkOg0KDQogIEZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvcigpIDogVU9iamVjdCgpIHt9DQoNCg0K ICBGb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3IoY29uc3QgRm9yd2FyZENoYXJhY3Rlckl0ZXJhdG9y ICZvdGhlcikgOiBVT2JqZWN0KG90aGVyKSB7fQ0KDQoNCg0KDQogIEZvcndhcmRDaGFyYWN0ZXJJ dGVyYXRvciAmb3BlcmF0b3I9KGNvbnN0IEZvcndhcmRDaGFyYWN0ZXJJdGVyYXRvciYpIHsgcmV0 dXJuICp0aGlzOyB9DQp9Ow0KIyAzNTEgIi4uL2NvbW1vbi91bmljb2RlL2NoYXJpdGVyLmgiDQpj bGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxpbXBvcnQpKSBDaGFyYWN0ZXJJdGVyYXRvciA6IHB1Ymxp YyBGb3J3YXJkQ2hhcmFjdGVySXRlcmF0b3Igew0KcHVibGljOg0KDQoNCg0KDQogIGVudW0gRU9y aWdpbiB7IGtTdGFydCwga0N1cnJlbnQsIGtFbmQgfTsNCiMgMzY3ICIuLi9jb21tb24vdW5pY29k ZS9jaGFyaXRlci5oIg0KICB2aXJ0dWFsIENoYXJhY3Rlckl0ZXJhdG9yKiBjbG9uZSh2b2lkKSBj b25zdCA9IDA7DQojIDM3NiAiLi4vY29tbW9uL3VuaWNvZGUvY2hhcml0ZXIuaCINCiAgdmlydHVh bCBVQ2hhciBmaXJzdCh2b2lkKSA9IDA7DQojIDM4NiAiLi4vY29tbW9uL3VuaWNvZGUvY2hhcml0 ZXIuaCINCiAgdmlydHVhbCBVQ2hhciBmaXJzdFBvc3RJbmModm9pZCk7DQojIDM5NyAiLi4vY29t bW9uL3VuaWNvZGUvY2hhcml0ZXIuaCINCiAgdmlydHVhbCBVQ2hhcjMyIGZpcnN0MzIodm9pZCkg PSAwOw0KIyA0MDcgIi4uL2NvbW1vbi91bmljb2RlL2NoYXJpdGVyLmgiDQogIHZpcnR1YWwgVUNo YXIzMiBmaXJzdDMyUG9zdEluYyh2b2lkKTsNCiMgNDE2ICIuLi9jb21tb24vdW5pY29kZS9jaGFy aXRlci5oIg0KICBpbmxpbmUgaW50MzJfdCBzZXRUb1N0YXJ0KCk7DQojIDQyNSAiLi4vY29tbW9u L3VuaWNvZGUvY2hhcml0ZXIuaCINCiAgdmlydHVhbCBVQ2hhciBsYXN0KHZvaWQpID0gMDsNCiMg NDM0ICIuLi9jb21tb24vdW5pY29kZS9jaGFyaXRlci5oIg0KICB2aXJ0dWFsIFVDaGFyMzIgbGFz dDMyKHZvaWQpID0gMDsNCiMgNDQzICIuLi9jb21tb24vdW5pY29kZS9jaGFyaXRlci5oIg0KICBp bmxpbmUgaW50MzJfdCBzZXRUb0VuZCgpOw0KIyA0NTMgIi4uL2NvbW1vbi91bmljb2RlL2NoYXJp dGVyLmgiDQogIHZpcnR1YWwgVUNoYXIgc2V0SW5kZXgoaW50MzJfdCBwb3NpdGlvbikgPSAwOw0K IyA0NjYgIi4uL2NvbW1vbi91bmljb2RlL2NoYXJpdGVyLmgiDQogIHZpcnR1YWwgVUNoYXIzMiBz ZXRJbmRleDMyKGludDMyX3QgcG9zaXRpb24pID0gMDsNCg0KDQoNCg0KDQoNCiAgdmlydHVhbCBV Q2hhciBjdXJyZW50KHZvaWQpIGNvbnN0ID0gMDsNCg0KDQoNCg0KDQoNCiAgdmlydHVhbCBVQ2hh cjMyIGN1cnJlbnQzMih2b2lkKSBjb25zdCA9IDA7DQojIDQ4OSAiLi4vY29tbW9uL3VuaWNvZGUv Y2hhcml0ZXIuaCINCiAgdmlydHVhbCBVQ2hhciBuZXh0KHZvaWQpID0gMDsNCiMgNTAxICIuLi9j b21tb24vdW5pY29kZS9jaGFyaXRlci5oIg0KICB2aXJ0dWFsIFVDaGFyMzIgbmV4dDMyKHZvaWQp ID0gMDsNCiMgNTEwICIuLi9jb21tb24vdW5pY29kZS9jaGFyaXRlci5oIg0KICB2aXJ0dWFsIFVD aGFyIHByZXZpb3VzKHZvaWQpID0gMDsNCiMgNTE5ICIuLi9jb21tb24vdW5pY29kZS9jaGFyaXRl ci5oIg0KICB2aXJ0dWFsIFVDaGFyMzIgcHJldmlvdXMzMih2b2lkKSA9IDA7DQojIDUzMCAiLi4v Y29tbW9uL3VuaWNvZGUvY2hhcml0ZXIuaCINCiAgdmlydHVhbCBVQm9vbCBoYXNQcmV2aW91cygp ID0gMDsNCiMgNTQyICIuLi9jb21tb24vdW5pY29kZS9jaGFyaXRlci5oIg0KICBpbmxpbmUgaW50 MzJfdCBzdGFydEluZGV4KHZvaWQpIGNvbnN0Ow0KIyA1NTMgIi4uL2NvbW1vbi91bmljb2RlL2No YXJpdGVyLmgiDQogIGlubGluZSBpbnQzMl90IGVuZEluZGV4KHZvaWQpIGNvbnN0Ow0KIyA1NjMg Ii4uL2NvbW1vbi91bmljb2RlL2NoYXJpdGVyLmgiDQogIGlubGluZSBpbnQzMl90IGdldEluZGV4 KHZvaWQpIGNvbnN0Ow0KDQoNCg0KDQoNCg0KDQogIGlubGluZSBpbnQzMl90IGdldExlbmd0aCgp IGNvbnN0Ow0KIyA1ODQgIi4uL2NvbW1vbi91bmljb2RlL2NoYXJpdGVyLmgiDQogIHZpcnR1YWwg aW50MzJfdCBtb3ZlKGludDMyX3QgZGVsdGEsIEVPcmlnaW4gb3JpZ2luKSA9IDA7DQojIDU5NyAi Li4vY29tbW9uL3VuaWNvZGUvY2hhcml0ZXIuaCINCiAgdmlydHVhbCBpbnQzMl90IG1vdmUzMihp bnQzMl90IGRlbHRhLCBFT3JpZ2luIG9yaWdpbikgPSAwOw0KDQoNCg0KDQoNCg0KDQogIHZpcnR1 YWwgdm9pZCBnZXRUZXh0KFVuaWNvZGVTdHJpbmcmIHJlc3VsdCkgPSAwOw0KDQpwcm90ZWN0ZWQ6 DQogIENoYXJhY3Rlckl0ZXJhdG9yKCkge30NCiAgQ2hhcmFjdGVySXRlcmF0b3IoaW50MzJfdCBs ZW5ndGgpOw0KICBDaGFyYWN0ZXJJdGVyYXRvcihpbnQzMl90IGxlbmd0aCwgaW50MzJfdCBwb3Np dGlvbik7DQogIENoYXJhY3Rlckl0ZXJhdG9yKGludDMyX3QgbGVuZ3RoLCBpbnQzMl90IHRleHRC ZWdpbiwgaW50MzJfdCB0ZXh0RW5kLCBpbnQzMl90IHBvc2l0aW9uKTsNCg0KDQoNCg0KICBDaGFy YWN0ZXJJdGVyYXRvcihjb25zdCBDaGFyYWN0ZXJJdGVyYXRvciAmdGhhdCk7DQoNCg0KDQoNCg0K DQoNCiAgQ2hhcmFjdGVySXRlcmF0b3IgJm9wZXJhdG9yPShjb25zdCBDaGFyYWN0ZXJJdGVyYXRv ciAmdGhhdCk7DQoNCiAgaW50MzJfdCB0ZXh0TGVuZ3RoOw0KICBpbnQzMl90IHBvczsNCiAgaW50 MzJfdCBiZWdpbjsNCiAgaW50MzJfdCBlbmQ7DQp9Ow0KDQppbmxpbmUgVUJvb2wNCkZvcndhcmRD aGFyYWN0ZXJJdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBGb3J3YXJkQ2hhcmFjdGVySXRlcmF0 b3ImIHRoYXQpIGNvbnN0IHsNCiAgcmV0dXJuICFvcGVyYXRvcj09KHRoYXQpOw0KfQ0KDQppbmxp bmUgaW50MzJfdA0KQ2hhcmFjdGVySXRlcmF0b3I6OnNldFRvU3RhcnQoKSB7DQogIHJldHVybiBt b3ZlKDAsIGtTdGFydCk7DQp9DQoNCmlubGluZSBpbnQzMl90DQpDaGFyYWN0ZXJJdGVyYXRvcjo6 c2V0VG9FbmQoKSB7DQogIHJldHVybiBtb3ZlKDAsIGtFbmQpOw0KfQ0KDQppbmxpbmUgaW50MzJf dA0KQ2hhcmFjdGVySXRlcmF0b3I6OnN0YXJ0SW5kZXgodm9pZCkgY29uc3Qgew0KICByZXR1cm4g YmVnaW47DQp9DQoNCmlubGluZSBpbnQzMl90DQpDaGFyYWN0ZXJJdGVyYXRvcjo6ZW5kSW5kZXgo dm9pZCkgY29uc3Qgew0KICByZXR1cm4gZW5kOw0KfQ0KDQppbmxpbmUgaW50MzJfdA0KQ2hhcmFj dGVySXRlcmF0b3I6OmdldEluZGV4KHZvaWQpIGNvbnN0IHsNCiAgcmV0dXJuIHBvczsNCn0NCg0K aW5saW5lIGludDMyX3QNCkNoYXJhY3Rlckl0ZXJhdG9yOjpnZXRMZW5ndGgodm9pZCkgY29uc3Qg ew0KICByZXR1cm4gdGV4dExlbmd0aDsNCn0NCg0KfQ0KIyAxNiAiLi4vY29tbW9uL3VuaWNvZGUv bm9ybWx6ci5oIiAyDQoNCg0Kc3RydWN0IFVDaGFySXRlcmF0b3I7DQp0eXBlZGVmIHN0cnVjdCBV Q2hhckl0ZXJhdG9yIFVDaGFySXRlcmF0b3I7DQoNCm5hbWVzcGFjZSBpY3VfMl8yIHsNCiMgMTEy ICIuLi9jb21tb24vdW5pY29kZS9ub3JtbHpyLmgiDQpjbGFzcyBfX2F0dHJpYnV0ZV9fKChkbGxp bXBvcnQpKSBOb3JtYWxpemVyIDogcHVibGljIFVPYmplY3Qgew0KcHVibGljOg0KDQoNCg0KDQoN CiAgZW51bSB7DQogICAgICBET05FPTB4ZmZmZg0KICB9Ow0KIyAxMzUgIi4uL2NvbW1vbi91bmlj b2RlL25vcm1senIuaCINCiAgTm9ybWFsaXplcihjb25zdCBVbmljb2RlU3RyaW5nJiBzdHIsIFVO b3JtYWxpemF0aW9uTW9kZSBtb2RlKTsNCiMgMTQ4ICIuLi9jb21tb24vdW5pY29kZS9ub3JtbHpy LmgiDQogIE5vcm1hbGl6ZXIoY29uc3QgVUNoYXIqIHN0ciwgaW50MzJfdCBsZW5ndGgsIFVOb3Jt YWxpemF0aW9uTW9kZSBtb2RlKTsNCiMgMTYwICIuLi9jb21tb24vdW5pY29kZS9ub3JtbHpyLmgi DQogIE5vcm1hbGl6ZXIoY29uc3QgQ2hhcmFjdGVySXRlcmF0b3ImIGl0ZXIsIFVOb3JtYWxpemF0 aW9uTW9kZSBtb2RlKTsNCg0KDQoNCg0KDQoNCiAgTm9ybWFsaXplcihjb25zdCBOb3JtYWxpemVy JiBjb3B5KTsNCg0KDQoNCg0KDQogIH5Ob3JtYWxpemVyKCk7DQojIDE5NyAiLi4vY29tbW9uL3Vu aWNvZGUvbm9ybWx6ci5oIg0KICBzdGF0aWMgdm9pZCBub3JtYWxpemUoY29uc3QgVW5pY29kZVN0 cmluZyYgc291cmNlLA0KICAgICAgICAgICAgICAgICAgICAgICAgVU5vcm1hbGl6YXRpb25Nb2Rl IG1vZGUsIGludDMyX3Qgb3B0aW9ucywNCiAgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVT dHJpbmcmIHJlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgJnN0YXR1 cyk7DQojIDIyMyAiLi4vY29tbW9uL3VuaWNvZGUvbm9ybWx6ci5oIg0KICBzdGF0aWMgdm9pZCBj b21wb3NlKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNvdXJjZSwNCiAgICAgICAgICAgICAgICAgICAg ICBVQm9vbCBjb21wYXQsIGludDMyX3Qgb3B0aW9ucywNCiAgICAgICAgICAgICAgICAgICAgICBV bmljb2RlU3RyaW5nJiByZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAm c3RhdHVzKTsNCiMgMjUwICIuLi9jb21tb24vdW5pY29kZS9ub3JtbHpyLmgiDQogIHN0YXRpYyB2 b2lkIGRlY29tcG9zZShjb25zdCBVbmljb2RlU3RyaW5nJiBzb3VyY2UsDQogICAgICAgICAgICAg ICAgICAgICAgICBVQm9vbCBjb21wYXQsIGludDMyX3Qgb3B0aW9ucywNCiAgICAgICAgICAgICAg ICAgICAgICAgIFVuaWNvZGVTdHJpbmcmIHJlc3VsdCwNCiAgICAgICAgICAgICAgICAgICAgICAg IFVFcnJvckNvZGUgJnN0YXR1cyk7DQojIDI3NSAiLi4vY29tbW9uL3VuaWNvZGUvbm9ybWx6ci5o Ig0KICBzdGF0aWMgaW5saW5lIFVOb3JtYWxpemF0aW9uQ2hlY2tSZXN1bHQNCiAgcXVpY2tDaGVj ayhjb25zdCBVbmljb2RlU3RyaW5nICZzb3VyY2UsIFVOb3JtYWxpemF0aW9uTW9kZSBtb2RlLCBV RXJyb3JDb2RlICZzdGF0dXMpOw0KIyAyOTggIi4uL2NvbW1vbi91bmljb2RlL25vcm1senIuaCIN CiAgc3RhdGljIGlubGluZSBVQm9vbA0KICBpc05vcm1hbGl6ZWQoY29uc3QgVW5pY29kZVN0cmlu ZyAmc3JjLCBVTm9ybWFsaXphdGlvbk1vZGUgbW9kZSwgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsN CiMgMzMwICIuLi9jb21tb24vdW5pY29kZS9ub3JtbHpyLmgiDQogIHN0YXRpYyBVbmljb2RlU3Ry aW5nICYNCiAgY29uY2F0ZW5hdGUoVW5pY29kZVN0cmluZyAmbGVmdCwgVW5pY29kZVN0cmluZyAm cmlnaHQsDQogICAgICAgICAgICAgIFVuaWNvZGVTdHJpbmcgJnJlc3VsdCwNCiAgICAgICAgICAg ICAgVU5vcm1hbGl6YXRpb25Nb2RlIG1vZGUsIGludDMyX3Qgb3B0aW9ucywNCiAgICAgICAgICAg ICAgVUVycm9yQ29kZSAmZXJyb3JDb2RlKTsNCiMgMzk4ICIuLi9jb21tb24vdW5pY29kZS9ub3Jt bHpyLmgiDQogIHN0YXRpYyBpbmxpbmUgaW50MzJfdA0KICBjb21wYXJlKGNvbnN0IFVuaWNvZGVT dHJpbmcgJnMxLCBjb25zdCBVbmljb2RlU3RyaW5nICZzMiwNCiAgICAgICAgICB1aW50MzJfdCBv cHRpb25zLA0KICAgICAgICAgIFVFcnJvckNvZGUgJmVycm9yQ29kZSk7DQojIDQxNSAiLi4vY29t bW9uL3VuaWNvZGUvbm9ybWx6ci5oIg0KICBVQ2hhcjMyIGN1cnJlbnQodm9pZCk7DQojIDQyNSAi Li4vY29tbW9uL3VuaWNvZGUvbm9ybWx6ci5oIg0KICBVQ2hhcjMyIGZpcnN0KHZvaWQpOw0KIyA0 MzUgIi4uL2NvbW1vbi91bmljb2RlL25vcm1senIuaCINCiAgVUNoYXIzMiBsYXN0KHZvaWQpOw0K IyA0NDUgIi4uL2NvbW1vbi91bmljb2RlL25vcm1senIuaCINCiAgVUNoYXIzMiBuZXh0KHZvaWQp Ow0KIyA0NTUgIi4uL2NvbW1vbi91bmljb2RlL25vcm1senIuaCINCiAgVUNoYXIzMiBwcmV2aW91 cyh2b2lkKTsNCiMgNDc2ICIuLi9jb21tb24vdW5pY29kZS9ub3JtbHpyLmgiDQogIFVDaGFyMzIg c2V0SW5kZXgoaW50MzJfdCBpbmRleCk7DQojIDQ4NyAiLi4vY29tbW9uL3VuaWNvZGUvbm9ybWx6 ci5oIg0KICB2b2lkIHNldEluZGV4T25seShpbnQzMl90IGluZGV4KTsNCg0KDQoNCg0KDQoNCiAg dm9pZCByZXNldCh2b2lkKTsNCiMgNTEwICIuLi9jb21tb24vdW5pY29kZS9ub3JtbHpyLmgiDQog IGludDMyX3QgZ2V0SW5kZXgodm9pZCkgY29uc3Q7DQojIDUyMCAiLi4vY29tbW9uL3VuaWNvZGUv bm9ybWx6ci5oIg0KICBpbnQzMl90IHN0YXJ0SW5kZXgodm9pZCkgY29uc3Q7DQojIDUzMiAiLi4v Y29tbW9uL3VuaWNvZGUvbm9ybWx6ci5oIg0KICBpbnQzMl90IGVuZEluZGV4KHZvaWQpIGNvbnN0 Ow0KIyA1NDIgIi4uL2NvbW1vbi91bmljb2RlL25vcm1senIuaCINCiAgVUJvb2wgb3BlcmF0b3I9 PShjb25zdCBOb3JtYWxpemVyJiB0aGF0KSBjb25zdDsNCiMgNTUyICIuLi9jb21tb24vdW5pY29k ZS9ub3JtbHpyLmgiDQogIGlubGluZSBVQm9vbCBvcGVyYXRvciE9KGNvbnN0IE5vcm1hbGl6ZXIm IHRoYXQpIGNvbnN0Ow0KDQoNCg0KDQoNCg0KDQogIE5vcm1hbGl6ZXIqIGNsb25lKHZvaWQpIGNv bnN0Ow0KDQoNCg0KDQoNCg0KDQogIGludDMyX3QgaGFzaENvZGUodm9pZCkgY29uc3Q7DQojIDU4 OSAiLi4vY29tbW9uL3VuaWNvZGUvbm9ybWx6ci5oIg0KICB2b2lkIHNldE1vZGUoVU5vcm1hbGl6 YXRpb25Nb2RlIG5ld01vZGUpOw0KIyA2MDEgIi4uL2NvbW1vbi91bmljb2RlL25vcm1senIuaCIN CiAgVU5vcm1hbGl6YXRpb25Nb2RlIGdldFVNb2RlKHZvaWQpIGNvbnN0Ow0KIyA2MTkgIi4uL2Nv bW1vbi91bmljb2RlL25vcm1senIuaCINCiAgdm9pZCBzZXRPcHRpb24oaW50MzJfdCBvcHRpb24s DQogICAgICAgICBVQm9vbCB2YWx1ZSk7DQojIDYzMiAiLi4vY29tbW9uL3VuaWNvZGUvbm9ybWx6 ci5oIg0KICBVQm9vbCBnZXRPcHRpb24oaW50MzJfdCBvcHRpb24pIGNvbnN0Ow0KIyA2NDIgIi4u L2NvbW1vbi91bmljb2RlL25vcm1senIuaCINCiAgdm9pZCBzZXRUZXh0KGNvbnN0IFVuaWNvZGVT dHJpbmcmIG5ld1RleHQsDQogICAgICAgICAgIFVFcnJvckNvZGUgJnN0YXR1cyk7DQojIDY1MyAi Li4vY29tbW9uL3VuaWNvZGUvbm9ybWx6ci5oIg0KICB2b2lkIHNldFRleHQoY29uc3QgQ2hhcmFj dGVySXRlcmF0b3ImIG5ld1RleHQsDQogICAgICAgICAgIFVFcnJvckNvZGUgJnN0YXR1cyk7DQoj IDY2NSAiLi4vY29tbW9uL3VuaWNvZGUvbm9ybWx6ci5oIg0KICB2b2lkIHNldFRleHQoY29uc3Qg VUNoYXIqIG5ld1RleHQsDQogICAgICAgICAgICAgICAgICAgIGludDMyX3QgbGVuZ3RoLA0KICAg ICAgICAgICAgVUVycm9yQ29kZSAmc3RhdHVzKTsNCg0KDQoNCg0KDQoNCiAgdm9pZCBnZXRUZXh0 KFVuaWNvZGVTdHJpbmcmIHJlc3VsdCk7DQoNCg0KDQoNCg0KDQogIHZpcnR1YWwgaW5saW5lIFVD bGFzc0lEIGdldER5bmFtaWNDbGFzc0lEKCkgY29uc3QgeyByZXR1cm4gZ2V0U3RhdGljQ2xhc3NJ RCgpOyB9DQoNCg0KDQoNCg0KDQogIHN0YXRpYyBpbmxpbmUgVUNsYXNzSUQgZ2V0U3RhdGljQ2xh c3NJRCgpIHsgcmV0dXJuIChVQ2xhc3NJRCkmZmdDbGFzc0lEOyB9DQojIDY5OCAiLi4vY29tbW9u L3VuaWNvZGUvbm9ybWx6ci5oIg0KICBlbnVtIHsNCiAgICBDT01QQVRfQklUID0gMSwNCiAgICBE RUNPTVBfQklUID0gMiwNCiAgICBDT01QT1NFX0JJVCA9IDQsDQogICAgRkNEX0JJVCA9IDgNCiAg fTsNCg0KDQoNCg0KDQogIGVudW0gRU1vZGUgew0KIyA3MjMgIi4uL2NvbW1vbi91bmljb2RlL25v cm1senIuaCINCiAgICBOT19PUCA9IDAsDQojIDc0MCAiLi4vY29tbW9uL3VuaWNvZGUvbm9ybWx6 ci5oIg0KICAgIENPTVBPU0UgPSBDT01QT1NFX0JJVCwNCiMgNzU3ICIuLi9jb21tb24vdW5pY29k ZS9ub3JtbHpyLmgiDQogICAgQ09NUE9TRV9DT01QQVQgPSBDT01QT1NFX0JJVCB8IENPTVBBVF9C SVQsDQojIDc3NCAiLi4vY29tbW9uL3VuaWNvZGUvbm9ybWx6ci5oIg0KICAgIERFQ09NUCA9IERF Q09NUF9CSVQsDQojIDc5MSAiLi4vY29tbW9uL3VuaWNvZGUvbm9ybWx6ci5oIg0KICAgIERFQ09N UF9DT01QQVQgPSBERUNPTVBfQklUIHwgQ09NUEFUX0JJVCwNCg0KDQoNCg0KICAgIEZDRCA9IEZD RF9CSVQNCiAgfTsNCg0KDQogIGVudW0gew0KIyA4MTkgIi4uL2NvbW1vbi91bmljb2RlL25vcm1s enIuaCINCiAgICBJR05PUkVfSEFOR1VMID0gMHgwMDENCiAgfTsNCiMgODMyICIuLi9jb21tb24v dW5pY29kZS9ub3JtbHpyLmgiDQogIE5vcm1hbGl6ZXIoY29uc3QgVW5pY29kZVN0cmluZyYgc3Ry LA0KICAgICAgICAgRU1vZGUgbW9kZSk7DQojIDg1MyAiLi4vY29tbW9uL3VuaWNvZGUvbm9ybWx6 ci5oIg0KICBOb3JtYWxpemVyKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHN0ciwNCiAgICAgICAgIEVN b2RlIG1vZGUsDQogICAgICAgICBpbnQzMl90IG9wdCk7DQojIDg2OCAiLi4vY29tbW9uL3VuaWNv ZGUvbm9ybWx6ci5oIg0KICBOb3JtYWxpemVyKGNvbnN0IFVDaGFyKiBzdHIsDQogICAgICAgICBp bnQzMl90IGxlbmd0aCwNCiAgICAgICAgIEVNb2RlIG1vZGUpOw0KIyA4ODcgIi4uL2NvbW1vbi91 bmljb2RlL25vcm1senIuaCINCiAgTm9ybWFsaXplcihjb25zdCBVQ2hhciogc3RyLA0KICAgICAg ICAgaW50MzJfdCBsZW5ndGgsDQogICAgICAgICBFTW9kZSBtb2RlLA0KICAgICAgICAgaW50MzJf dCBvcHRpb24pOw0KIyA5MDIgIi4uL2NvbW1vbi91bmljb2RlL25vcm1senIuaCINCiAgTm9ybWFs aXplcihjb25zdCBDaGFyYWN0ZXJJdGVyYXRvciYgaXRlciwNCiAgICAgICAgIEVNb2RlIG1vZGUp Ow0KIyA5MjAgIi4uL2NvbW1vbi91bmljb2RlL25vcm1senIuaCINCiAgTm9ybWFsaXplcihjb25z dCBDaGFyYWN0ZXJJdGVyYXRvciYgaXRlciwNCiAgICAgICAgIEVNb2RlIG1vZGUsDQogICAgICAg ICBpbnQzMl90IG9wdCk7DQojIDk0NCAiLi4vY29tbW9uL3VuaWNvZGUvbm9ybWx6ci5oIg0KICBp bmxpbmUgc3RhdGljIHZvaWQNCiAgbm9ybWFsaXplKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNvdXJj ZSwNCiAgICAgICAgICAgIEVNb2RlIG1vZGUsDQogICAgICAgICAgICBpbnQzMl90IG9wdGlvbnMs DQogICAgICAgICAgICBVbmljb2RlU3RyaW5nJiByZXN1bHQsDQogICAgICAgICAgICBVRXJyb3JD b2RlICZzdGF0dXMpOw0KIyA5NjcgIi4uL2NvbW1vbi91bmljb2RlL25vcm1senIuaCINCiAgaW5s aW5lIHN0YXRpYyBVTm9ybWFsaXphdGlvbkNoZWNrUmVzdWx0DQogIHF1aWNrQ2hlY2soY29uc3Qg VW5pY29kZVN0cmluZyYgc291cmNlLA0KICAgICAgICAgICAgIEVNb2RlIG1vZGUsDQogICAgICAg ICAgICAgVUVycm9yQ29kZSYgc3RhdHVzKTsNCiMgOTc5ICIuLi9jb21tb24vdW5pY29kZS9ub3Jt bHpyLmgiDQogIGlubGluZSBzdGF0aWMgVU5vcm1hbGl6YXRpb25Nb2RlIGdldFVOb3JtYWxpemF0 aW9uTW9kZShFTW9kZSBtb2RlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBVRXJyb3JDb2RlJiBzdGF0dXMpOw0KIyA5ODkgIi4uL2NvbW1vbi91bmlj b2RlL25vcm1senIuaCINCiAgaW5saW5lIHN0YXRpYyBFTW9kZSBnZXROb3JtYWxpemVyRU1vZGUo VU5vcm1hbGl6YXRpb25Nb2RlIG1vZGUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFVFcnJvckNvZGUmIHN0YXR1cyk7DQojIDEwMTggIi4uL2NvbW1vbi91bmljb2Rl L25vcm1senIuaCINCiAgaW5saW5lIHZvaWQgc2V0TW9kZShFTW9kZSBuZXdNb2RlKTsNCg0KDQoN Cg0KDQoNCg0KICBpbmxpbmUgRU1vZGUgZ2V0TW9kZSh2b2lkKSBjb25zdDsNCg0KcHJpdmF0ZToN Cg0KDQoNCg0KDQoNCiAgVUJvb2wgbmV4dE5vcm1hbGl6ZSgpOw0KICBVQm9vbCBwcmV2aW91c05v cm1hbGl6ZSgpOw0KDQogIHZvaWQgaW5pdChDaGFyYWN0ZXJJdGVyYXRvciAqaXRlcik7DQogIHZv aWQgY2xlYXJCdWZmZXIodm9pZCk7DQoNCg0KDQogIGlubGluZSBzdGF0aWMgVU5vcm1hbGl6YXRp b25Nb2RlIGdldFVNb2RlKEVNb2RlIG1vZGUpOw0KDQoNCg0KDQoNCiAgVU5vcm1hbGl6YXRpb25N b2RlIGZVTW9kZTsNCiAgaW50MzJfdCBmT3B0aW9uczsNCg0KDQogIFVDaGFySXRlcmF0b3IgKnRl eHQ7DQoNCg0KDQogIGludDMyX3QgY3VycmVudEluZGV4LCBuZXh0SW5kZXg7DQoNCg0KICBVbmlj b2RlU3RyaW5nIGJ1ZmZlcjsNCiAgaW50MzJfdCBidWZmZXJQb3M7DQoNCg0KDQoNCg0KICBzdGF0 aWMgY29uc3QgY2hhciBmZ0NsYXNzSUQ7DQp9Ow0KDQoNCg0KDQoNCmlubGluZSBVQm9vbA0KTm9y bWFsaXplcjo6b3BlcmF0b3IhPSAoY29uc3QgTm9ybWFsaXplciYgb3RoZXIpIGNvbnN0DQp7IHJl dHVybiAhIG9wZXJhdG9yPT0ob3RoZXIpOyB9DQoNCmlubGluZSB2b2lkDQpOb3JtYWxpemVyOjpu b3JtYWxpemUoY29uc3QgVW5pY29kZVN0cmluZyYgc291cmNlLA0KICAgICAgICAgICAgICAgICAg ICAgIEVNb2RlIG1vZGUsIGludDMyX3Qgb3B0aW9ucywNCiAgICAgICAgICAgICAgICAgICAgICBV bmljb2RlU3RyaW5nJiByZXN1bHQsDQogICAgICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAm c3RhdHVzKSB7DQogIG5vcm1hbGl6ZShzb3VyY2UsIGdldFVOb3JtYWxpemF0aW9uTW9kZShtb2Rl LCBzdGF0dXMpLCBvcHRpb25zLCByZXN1bHQsIHN0YXR1cyk7DQp9DQoNCmlubGluZSBVTm9ybWFs aXphdGlvbkNoZWNrUmVzdWx0DQpOb3JtYWxpemVyOjpxdWlja0NoZWNrKGNvbnN0IFVuaWNvZGVT dHJpbmcmIHNvdXJjZSwNCiAgICAgICAgICAgICAgICAgICAgICAgRU1vZGUgbW9kZSwNCiAgICAg ICAgICAgICAgICAgICAgICAgVUVycm9yQ29kZSAmc3RhdHVzKSB7DQogIHJldHVybiBxdWlja0No ZWNrKHNvdXJjZSwgZ2V0VU5vcm1hbGl6YXRpb25Nb2RlKG1vZGUsIHN0YXR1cyksIHN0YXR1cyk7 DQp9DQoNCmlubGluZSBVTm9ybWFsaXphdGlvbkNoZWNrUmVzdWx0DQpOb3JtYWxpemVyOjpxdWlj a0NoZWNrKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNvdXJjZSwNCiAgICAgICAgICAgICAgICAgICAg ICAgVU5vcm1hbGl6YXRpb25Nb2RlIG1vZGUsDQogICAgICAgICAgICAgICAgICAgICAgIFVFcnJv ckNvZGUgJnN0YXR1cykgew0KICAgIGlmKFVfRkFJTFVSRShzdGF0dXMpKSB7DQogICAgICAgIHJl dHVybiBVTk9STV9NQVlCRTsNCiAgICB9DQoNCiAgICByZXR1cm4gdW5vcm1fcXVpY2tDaGVja18y XzIoc291cmNlLmdldEJ1ZmZlcigpLCBzb3VyY2UubGVuZ3RoKCksDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgbW9kZSwgJnN0YXR1cyk7DQp9DQoNCmlubGluZSBVQm9vbA0KTm9ybWFsaXpl cjo6aXNOb3JtYWxpemVkKGNvbnN0IFVuaWNvZGVTdHJpbmcmIHNvdXJjZSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICBVTm9ybWFsaXphdGlvbk1vZGUgbW9kZSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICBVRXJyb3JDb2RlICZzdGF0dXMpIHsNCiAgICBpZihVX0ZBSUxVUkUoc3RhdHVzKSkg ew0KICAgICAgICByZXR1cm4gMDsNCiAgICB9DQoNCiAgICByZXR1cm4gdW5vcm1faXNOb3JtYWxp emVkXzJfMihzb3VyY2UuZ2V0QnVmZmVyKCksIHNvdXJjZS5sZW5ndGgoKSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1vZGUsICZzdGF0dXMpOw0KfQ0KDQppbmxpbmUgaW50MzJfdA0K Tm9ybWFsaXplcjo6Y29tcGFyZShjb25zdCBVbmljb2RlU3RyaW5nICZzMSwgY29uc3QgVW5pY29k ZVN0cmluZyAmczIsDQogICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG9wdGlvbnMsDQogICAg ICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgJmVycm9yQ29kZSkgew0KDQogIHJldHVybiB1bm9y bV9jb21wYXJlXzJfMihzMS5nZXRCdWZmZXIoKSwgczEubGVuZ3RoKCksDQogICAgICAgICAgICAg ICAgICAgICAgIHMyLmdldEJ1ZmZlcigpLCBzMi5sZW5ndGgoKSwNCiAgICAgICAgICAgICAgICAg ICAgICAgb3B0aW9ucywNCiAgICAgICAgICAgICAgICAgICAgICAgJmVycm9yQ29kZSk7DQp9DQoN CmlubGluZSB2b2lkDQpOb3JtYWxpemVyOjpzZXRNb2RlKEVNb2RlIG5ld01vZGUpIHsNCiAgVUVy cm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7DQogIGZVTW9kZSA9IGdldFVOb3JtYWxpemF0 aW9uTW9kZShuZXdNb2RlLCBzdGF0dXMpOw0KfQ0KDQppbmxpbmUgTm9ybWFsaXplcjo6RU1vZGUN Ck5vcm1hbGl6ZXI6OmdldE1vZGUoKSBjb25zdCB7DQogIFVFcnJvckNvZGUgc3RhdHVzID0gVV9a RVJPX0VSUk9SOw0KICByZXR1cm4gZ2V0Tm9ybWFsaXplckVNb2RlKGZVTW9kZSwgc3RhdHVzKTsN Cn0NCg0KaW5saW5lIFVOb3JtYWxpemF0aW9uTW9kZSBOb3JtYWxpemVyOjpnZXRVTm9ybWFsaXph dGlvbk1vZGUoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vcm1hbGl6ZXI6 OkVNb2RlIG1vZGUsIFVFcnJvckNvZGUgJnN0YXR1cykNCnsNCiAgaWYgKFVfU1VDQ0VTUyhzdGF0 dXMpKQ0KICB7DQogICAgc3dpdGNoIChtb2RlKQ0KICAgIHsNCiAgICBjYXNlIE5vcm1hbGl6ZXI6 Ok5PX09QIDoNCiAgICAgIHJldHVybiBVTk9STV9OT05FOw0KICAgIGNhc2UgTm9ybWFsaXplcjo6 Q09NUE9TRSA6DQogICAgICByZXR1cm4gVU5PUk1fTkZDOw0KICAgIGNhc2UgTm9ybWFsaXplcjo6 Q09NUE9TRV9DT01QQVQgOg0KICAgICAgcmV0dXJuIFVOT1JNX05GS0M7DQogICAgY2FzZSBOb3Jt YWxpemVyOjpERUNPTVAgOg0KICAgICAgcmV0dXJuIFVOT1JNX05GRDsNCiAgICBjYXNlIE5vcm1h bGl6ZXI6OkRFQ09NUF9DT01QQVQgOg0KICAgICAgcmV0dXJuIFVOT1JNX05GS0Q7DQogICAgY2Fz ZSBOb3JtYWxpemVyOjpGQ0Q6DQogICAgICByZXR1cm4gVU5PUk1fRkNEOw0KICAgIGRlZmF1bHQg Og0KICAgICAgc3RhdHVzID0gVV9JTExFR0FMX0FSR1VNRU5UX0VSUk9SOw0KICAgIH0NCiAgfQ0K ICByZXR1cm4gVU5PUk1fREVGQVVMVDsNCn0NCg0KaW5saW5lIFVOb3JtYWxpemF0aW9uTW9kZQ0K Tm9ybWFsaXplcjo6Z2V0VU1vZGUoTm9ybWFsaXplcjo6RU1vZGUgbW9kZSkgew0KICBzd2l0Y2go bW9kZSkgew0KICBjYXNlIE5vcm1hbGl6ZXI6Ok5PX09QIDoNCiAgICByZXR1cm4gVU5PUk1fTk9O RTsNCiAgY2FzZSBOb3JtYWxpemVyOjpDT01QT1NFIDoNCiAgICByZXR1cm4gVU5PUk1fTkZDOw0K ICBjYXNlIE5vcm1hbGl6ZXI6OkNPTVBPU0VfQ09NUEFUIDoNCiAgICByZXR1cm4gVU5PUk1fTkZL QzsNCiAgY2FzZSBOb3JtYWxpemVyOjpERUNPTVAgOg0KICAgIHJldHVybiBVTk9STV9ORkQ7DQog IGNhc2UgTm9ybWFsaXplcjo6REVDT01QX0NPTVBBVCA6DQogICAgcmV0dXJuIFVOT1JNX05GS0Q7 DQogIGNhc2UgTm9ybWFsaXplcjo6RkNEOg0KICAgIHJldHVybiBVTk9STV9GQ0Q7DQogIGRlZmF1 bHQgOg0KICAgIHJldHVybiBVTk9STV9ERUZBVUxUOw0KICB9DQp9DQoNCmlubGluZSBOb3JtYWxp emVyOjpFTW9kZSBOb3JtYWxpemVyOjpnZXROb3JtYWxpemVyRU1vZGUoDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVU5vcm1hbGl6YXRpb25Nb2RlIG1vZGUsIFVFcnJvckNvZGUg JnN0YXR1cykNCnsNCiAgaWYgKFVfU1VDQ0VTUyhzdGF0dXMpKQ0KICB7DQogICAgc3dpdGNoICht b2RlKQ0KICAgIHsNCiAgICBjYXNlIFVOT1JNX05PTkUgOg0KICAgICAgcmV0dXJuIE5vcm1hbGl6 ZXI6Ok5PX09QOw0KICAgIGNhc2UgVU5PUk1fTkZEIDoNCiAgICAgIHJldHVybiBOb3JtYWxpemVy OjpERUNPTVA7DQogICAgY2FzZSBVTk9STV9ORktEIDoNCiAgICAgIHJldHVybiBOb3JtYWxpemVy OjpERUNPTVBfQ09NUEFUOw0KICAgIGNhc2UgVU5PUk1fTkZDIDoNCiAgICAgIHJldHVybiBOb3Jt YWxpemVyOjpDT01QT1NFOw0KICAgIGNhc2UgVU5PUk1fTkZLQyA6DQogICAgICByZXR1cm4gTm9y bWFsaXplcjo6Q09NUE9TRV9DT01QQVQ7DQogICAgY2FzZSBVTk9STV9GQ0Q6DQogICAgICByZXR1 cm4gTm9ybWFsaXplcjo6RkNEOw0KICAgIGRlZmF1bHQgOg0KICAgICAgc3RhdHVzID0gVV9JTExF R0FMX0FSR1VNRU5UX0VSUk9SOw0KICAgIH0NCiAgfQ0KICByZXR1cm4gTm9ybWFsaXplcjo6REVD T01QX0NPTVBBVDsNCn0NCg0KfQ0KIyAxNiAiY2FuaXRlci5oIiAyDQojIDEgIi4uL2NvbW1vbi91 bmljb2RlL3VuaWNvZGUuaCIgMQ0KIyAzMyAiLi4vY29tbW9uL3VuaWNvZGUvdW5pY29kZS5oIg0K bmFtZXNwYWNlIGljdV8yXzIgew0KIyA1NSAiLi4vY29tbW9uL3VuaWNvZGUvdW5pY29kZS5oIg0K Y2xhc3MgX19hdHRyaWJ1dGVfXygoZGxsaW1wb3J0KSkgVW5pY29kZQ0Kew0KcHVibGljOg0KDQoN Cg0KDQoNCg0KDQogICAgZW51bSB7DQoNCiAgICAgICAgTUlOX1ZBTFVFPTAsDQoNCg0KDQoNCg0K DQogICAgICAgIE1BWF9WQUxVRT0weDEwZmZmZiwNCiMgODMgIi4uL2NvbW1vbi91bmljb2RlL3Vu aWNvZGUuaCINCiAgICAgICAgTUFYX0NIQVJfTEVOR1RIPTIsDQojIDk1ICIuLi9jb21tb24vdW5p Y29kZS91bmljb2RlLmgiDQogICAgICAgIE1JTl9SQURJWD0yLA0KIyAxMDcgIi4uL2NvbW1vbi91 bmljb2RlL3VuaWNvZGUuaCINCiAgICAgICAgTUFYX1JBRElYPTM2DQogICAgfTsNCg0KDQoNCg0K DQoNCg0KICAgIGVudW0gRVVuaWNvZGVHZW5lcmFsVHlwZXMNCiAgICB7DQogICAgICAgIFVOQVNT SUdORUQgPSAwLA0KICAgICAgICBVUFBFUkNBU0VfTEVUVEVSID0gMSwNCiAgICAgICAgTE9XRVJD QVNFX0xFVFRFUiA9IDIsDQogICAgICAgIFRJVExFQ0FTRV9MRVRURVIgPSAzLA0KICAgICAgICBN T0RJRklFUl9MRVRURVIgPSA0LA0KICAgICAgICBPVEhFUl9MRVRURVIgPSA1LA0KICAgICAgICBO T05fU1BBQ0lOR19NQVJLID0gNiwNCiAgICAgICAgRU5DTE9TSU5HX01BUksgPSA3LA0KICAgICAg ICBDT01CSU5JTkdfU1BBQ0lOR19NQVJLID0gOCwNCiAgICAgICAgREVDSU1BTF9ESUdJVF9OVU1C RVIgPSA5LA0KICAgICAgICBMRVRURVJfTlVNQkVSID0gMTAsDQogICAgICAgIE9USEVSX05VTUJF UiA9IDExLA0KICAgICAgICBTUEFDRV9TRVBBUkFUT1IgPSAxMiwNCiAgICAgICAgTElORV9TRVBB UkFUT1IgPSAxMywNCiAgICAgICAgUEFSQUdSQVBIX1NFUEFSQVRPUiA9IDE0LA0KICAgICAgICBD T05UUk9MID0gMTUsDQogICAgICAgIEZPUk1BVCA9IDE2LA0KICAgICAgICBQUklWQVRFX1VTRSA9 IDE3LA0KICAgICAgICBTVVJST0dBVEUgPSAxOCwNCiAgICAgICAgREFTSF9QVU5DVFVBVElPTiA9 IDE5LA0KICAgICAgICBTVEFSVF9QVU5DVFVBVElPTiA9IDIwLA0KICAgICAgICBFTkRfUFVOQ1RV QVRJT04gPSAyMSwNCiAgICAgICAgQ09OTkVDVE9SX1BVTkNUVUFUSU9OID0gMjIsDQogICAgICAg IE9USEVSX1BVTkNUVUFUSU9OID0gMjMsDQogICAgICAgIE1BVEhfU1lNQk9MID0gMjQsDQogICAg ICAgIENVUlJFTkNZX1NZTUJPTCA9IDI1LA0KICAgICAgICBNT0RJRklFUl9TWU1CT0wgPSAyNiwN CiAgICAgICAgT1RIRVJfU1lNQk9MID0gMjcsDQogICAgICAgIElOSVRJQUxfUFVOQ1RVQVRJT04g PSAyOCwNCiAgICAgICAgRklOQUxfUFVOQ1RVQVRJT04gPSAyOSwNCiAgICAgICAgR0VORVJBTF9U WVBFU19DT1VOVCA9IDMwDQogICAgfTsNCg0KDQoNCg0KDQoNCg0KICAgIGVudW0gRVVuaWNvZGVT Y3JpcHQNCiAgICB7DQogICAgICAgIGtCYXNpY0xhdGluPVVCTE9DS19CQVNJQ19MQVRJTiwNCiAg ICAgICAga0xhdGluMVN1cHBsZW1lbnQsDQogICAgICAgIGtMYXRpbkV4dGVuZGVkQSwNCiAgICAg ICAga0xhdGluRXh0ZW5kZWRCLA0KICAgICAgICBrSVBBRXh0ZW5zaW9uLA0KICAgICAgICBrU3Bh Y2luZ01vZGlmaWVyLA0KICAgICAgICBrQ29tYmluaW5nRGlhY3JpdGljYWwsDQogICAgICAgIGtH cmVlaywNCiAgICAgICAga0N5cmlsbGljLA0KICAgICAgICBrQXJtZW5pYW4sDQogICAgICAgIGtI ZWJyZXcsDQogICAgICAgIGtBcmFiaWMsDQogICAgICAgIGtTeXJpYWMsDQogICAgICAgIGtUaGFh bmEsDQogICAgICAgIGtEZXZhbmFnYXJpLA0KICAgICAgICBrQmVuZ2FsaSwNCiAgICAgICAga0d1 cm11a2hpLA0KICAgICAgICBrR3VqYXJhdGksDQogICAgICAgIGtPcml5YSwNCiAgICAgICAga1Rh bWlsLA0KICAgICAgICBrVGVsdWd1LA0KICAgICAgICBrS2FubmFkYSwNCiAgICAgICAga01hbGF5 YWxhbSwNCiAgICAgICAga1NpbmhhbGEsDQogICAgICAgIGtUaGFpLA0KICAgICAgICBrTGFvLA0K ICAgICAgICBrVGliZXRhbiwNCiAgICAgICAga015YW5tYXIsDQogICAgICAgIGtHZW9yZ2lhbiwN CiAgICAgICAga0hhbmd1bEphbW8sDQogICAgICAgIGtFdGhpb3BpYywNCiAgICAgICAga0NoZXJv a2VlLA0KICAgICAgICBrVW5pZmllZENhbmFkaWFuQWJvcmlnaW5hbFN5bGxhYmljcywNCiAgICAg ICAga29naGFtLA0KICAgICAgICBrUnVuaWMsDQogICAgICAgIGtLaG1lciwNCiAgICAgICAga01v bmdvbGlhbiwNCiAgICAgICAga0xhdGluRXh0ZW5kZWRBZGRpdGlvbmFsLA0KICAgICAgICBrR3Jl ZWtFeHRlbmRlZCwNCiAgICAgICAga0dlbmVyYWxQdW5jdHVhdGlvbiwNCiAgICAgICAga1N1cGVy U3ViU2NyaXB0LA0KICAgICAgICBrQ3VycmVuY3lTeW1ib2xTY3JpcHQsDQogICAgICAgIGtTeW1i b2xDb21iaW5pbmdNYXJrLA0KICAgICAgICBrTGV0dGVybGlrZVN5bWJvbCwNCiAgICAgICAga051 bWJlckZvcm0sDQogICAgICAgIGtBcnJvdywNCiAgICAgICAga01hdGhPcGVyYXRvciwNCiAgICAg ICAga01pc2NUZWNobmljYWwsDQogICAgICAgIGtDb250cm9sUGljdHVyZSwNCiAgICAgICAga09w dGljYWxDaGFyYWN0ZXIsDQogICAgICAgIGtFbmNsb3NlZEFscGhhbnVtZXJpYywNCiAgICAgICAg a0JveERyYXdpbmcsDQogICAgICAgIGtCbG9ja0VsZW1lbnQsDQogICAgICAgIGtHZW9tZXRyaWNT aGFwZSwNCiAgICAgICAga01pc2NTeW1ib2wsDQogICAgICAgIGtEaW5nYmF0LA0KICAgICAgICBr QnJhaWxsZVBhdHRlcm5zLA0KICAgICAgICBrQ0pLUmFkaWNhbHNTdXBwbGVtZW50LA0KICAgICAg ICBrS2FuZ3hpUmFkaWNhbHMsDQogICAgICAgIGtJZGVvZ3JhcGhpY0Rlc2NyaXB0aW9uQ2hhcmFj dGVycywNCiAgICAgICAga0NKS1N5bWJvbFB1bmN0dWF0aW9uLA0KICAgICAgICBrSGlyYWdhbmEs DQogICAgICAgIGtLYXRha2FuYSwNCiAgICAgICAga0JvcG9tb2ZvLA0KICAgICAgICBrSGFuZ3Vs Q29tcGF0aWJpbGl0eUphbW8sDQogICAgICAgIGtLYW5idW4sDQogICAgICAgIGtCb3BvbW9mb0V4 dGVuZGVkLA0KICAgICAgICBrRW5jbG9zZWRDSktMZXR0ZXJNb250aCwNCiAgICAgICAga0NKS0Nv bXBhdGliaWxpdHksDQogICAgICAgIGtDSktVbmlmaWVkSWRlb2dyYXBoRXh0ZW5zaW9uQSwNCiAg ICAgICAga0NKS1VuaWZpZWRJZGVvZ3JhcGgsDQogICAgICAgIGtZaVN5bGxhYmxlcywNCiAgICAg ICAga1lpUmFkaWNhbHMsDQogICAgICAgIGtIYW5ndWxTeWxsYWJsZSwNCiAgICAgICAga0hpZ2hT dXJyb2dhdGUsDQogICAgICAgIGtIaWdoUHJpdmF0ZVVzZVN1cnJvZ2F0ZSwNCiAgICAgICAga0xv d1N1cnJvZ2F0ZSwNCiAgICAgICAga1ByaXZhdGVVc2UsDQogICAgICAgIGtDSktDb21wYXRpYmls aXR5SWRlb2dyYXBoLA0KICAgICAgICBrQWxwaGFiZXRpY1ByZXNlbnRhdGlvbiwNCiAgICAgICAg a0FyYWJpY1ByZXNlbnRhdGlvbkEsDQogICAgICAgIGtDb21iaW5pbmdIYWxmTWFyaywNCiAgICAg ICAga0NKS0NvbXBhdGliaWxpdHlGb3JtLA0KICAgICAgICBrU21hbGxGb3JtVmFyaWFudCwNCiAg ICAgICAga0FyYWJpY1ByZXNlbnRhdGlvbkIsDQogICAgICAgIGtOb1NjcmlwdCwNCiAgICAgICAg a0hhbGZ3aWR0aEZ1bGx3aWR0aEZvcm0sDQogICAgICAgIGtTY3JpcHRDb3VudD1VQkxPQ0tfQ09V TlQNCiAgICB9Ow0KDQoNCg0KDQoNCg0KICAgIGVudW0gRURpcmVjdGlvblByb3BlcnR5IHsNCiAg ICAgICAgTEVGVF9UT19SSUdIVCA9IDAsDQogICAgICAgIFJJR0hUX1RPX0xFRlQgPSAxLA0KICAg ICAgICBFVVJPUEVBTl9OVU1CRVIgPSAyLA0KICAgICAgICBFVVJPUEVBTl9OVU1CRVJfU0VQQVJB VE9SID0gMywNCiAgICAgICAgRVVST1BFQU5fTlVNQkVSX1RFUk1JTkFUT1IgPSA0LA0KICAgICAg ICBBUkFCSUNfTlVNQkVSID0gNSwNCiAgICAgICAgQ09NTU9OX05VTUJFUl9TRVBBUkFUT1IgPSA2 LA0KICAgICAgICBCTE9DS19TRVBBUkFUT1IgPSA3LA0KICAgICAgICBTRUdNRU5UX1NFUEFSQVRP UiA9IDgsDQogICAgICAgIFdISVRFX1NQQUNFX05FVVRSQUwgPSA5LA0KICAgICAgICBPVEhFUl9O RVVUUkFMID0gMTAsDQogICAgICAgIExFRlRfVE9fUklHSFRfRU1CRURESU5HID0gMTEsDQogICAg ICAgIExFRlRfVE9fUklHSFRfT1ZFUlJJREUgPSAxMiwNCiAgICAgICAgUklHSFRfVE9fTEVGVF9B UkFCSUMgPSAxMywNCiAgICAgICAgUklHSFRfVE9fTEVGVF9FTUJFRERJTkcgPSAxNCwNCiAgICAg ICAgUklHSFRfVE9fTEVGVF9PVkVSUklERSA9IDE1LA0KICAgICAgICBQT1BfRElSRUNUSU9OQUxf Rk9STUFUID0gMTYsDQogICAgICAgIERJUl9OT05fU1BBQ0lOR19NQVJLID0gMTcsDQogICAgICAg IEJPVU5EQVJZX05FVVRSQUwgPSAxOA0KICAgIH07DQoNCg0KDQoNCg0KDQoNCiAgICBlbnVtIEVD ZWxsV2lkdGhzDQogICAgew0KICAgICAgICBaRVJPX1dJRFRIID0gMCwNCiAgICAgICAgSEFMRl9X SURUSCA9IDEsDQogICAgICAgIEZVTExfV0lEVEggPSAyLA0KICAgICAgICBORVVUUkFMID0gMw0K ICAgIH07DQojIDMwMSAiLi4vY29tbW9uL3VuaWNvZGUvdW5pY29kZS5oIg0KICAgIHN0YXRpYyBp bmxpbmUgVUJvb2wgaXNTaW5nbGUoVUNoYXIgYyk7DQojIDMxMiAiLi4vY29tbW9uL3VuaWNvZGUv dW5pY29kZS5oIg0KICAgIHN0YXRpYyBpbmxpbmUgVUJvb2wgaXNMZWFkKFVDaGFyIGMpOw0KIyAz MjMgIi4uL2NvbW1vbi91bmljb2RlL3VuaWNvZGUuaCINCiAgICBzdGF0aWMgaW5saW5lIFVCb29s IGlzVHJhaWwoVUNoYXIgYyk7DQojIDMzNiAiLi4vY29tbW9uL3VuaWNvZGUvdW5pY29kZS5oIg0K ICAgIHN0YXRpYyBpbmxpbmUgVUJvb2wgaXNTdXJyb2dhdGUoVUNoYXIzMiBjKTsNCiMgMzUxICIu Li9jb21tb24vdW5pY29kZS91bmljb2RlLmgiDQogICAgc3RhdGljIGlubGluZSBVQm9vbCBpc1Vu aWNvZGVDaGFyKFVDaGFyMzIgYyk7DQojIDM2NSAiLi4vY29tbW9uL3VuaWNvZGUvdW5pY29kZS5o Ig0KICAgIHN0YXRpYyBpbmxpbmUgVUJvb2wgaXNFcnJvcihVQ2hhcjMyIGMpOw0KIyAzNzcgIi4u L2NvbW1vbi91bmljb2RlL3VuaWNvZGUuaCINCiAgICBzdGF0aWMgaW5saW5lIFVCb29sIGlzVmFs aWQoVUNoYXIzMiBjKTsNCiMgMzkxICIuLi9jb21tb24vdW5pY29kZS91bmljb2RlLmgiDQogICAg c3RhdGljIGlubGluZSBVQm9vbCBuZWVkTXVsdGlwbGVVQ2hhcihVQ2hhcjMyIGMpOw0KIyA0MDIg Ii4uL2NvbW1vbi91bmljb2RlL3VuaWNvZGUuaCINCiAgICBzdGF0aWMgaW5saW5lIGludDMyX3Qg Y2hhckxlbmd0aChVQ2hhcjMyIGMpOw0KIyA0MTggIi4uL2NvbW1vbi91bmljb2RlL3VuaWNvZGUu aCINCiAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgYXJyYXlTaXplKGludDMyX3Qgc2l6ZSk7DQoj IDQzMyAiLi4vY29tbW9uL3VuaWNvZGUvdW5pY29kZS5oIg0KICAgIHN0YXRpYyBpbmxpbmUgVUJv b2wgaXNMb3dlckNhc2UoVUNoYXIzMiBjaCk7DQojIDQ0NyAiLi4vY29tbW9uL3VuaWNvZGUvdW5p Y29kZS5oIg0KICAgIHN0YXRpYyBpbmxpbmUgVUJvb2wgaXNVcHBlckNhc2UoVUNoYXIzMiBjaCk7 DQojIDQ2MSAiLi4vY29tbW9uL3VuaWNvZGUvdW5pY29kZS5oIg0KICAgIHN0YXRpYyBpbmxpbmUg VUJvb2wgaXNUaXRsZUNhc2UoVUNoYXIzMiBjaCk7DQojIDQ3NSAiLi4vY29tbW9uL3VuaWNvZGUv dW5pY29kZS5oIg0KICAgIHN0YXRpYyBpbmxpbmUgVUJvb2wgaXNEaWdpdChVQ2hhcjMyIGNoKTsN CiMgNDkzICIuLi9jb21tb24vdW5pY29kZS91bmljb2RlLmgiDQogICAgc3RhdGljIGlubGluZSBV Qm9vbCBpc0RlZmluZWQoVUNoYXIzMiBjaCk7DQojIDUwNiAiLi4vY29tbW9uL3VuaWNvZGUvdW5p Y29kZS5oIg0KICAgIHN0YXRpYyBpbmxpbmUgVUJvb2wgaXNDb250cm9sKFVDaGFyMzIgY2gpOw0K IyA1MTkgIi4uL2NvbW1vbi91bmljb2RlL3VuaWNvZGUuaCINCiAgICBzdGF0aWMgaW5saW5lIFVC b29sIGlzUHJpbnRhYmxlKFVDaGFyMzIgY2gpOw0KIyA1MzMgIi4uL2NvbW1vbi91bmljb2RlL3Vu aWNvZGUuaCINCiAgICAgc3RhdGljIGlubGluZSBVQm9vbCBpc0Jhc2VGb3JtKFVDaGFyMzIgY2gp Ow0KIyA1NTEgIi4uL2NvbW1vbi91bmljb2RlL3VuaWNvZGUuaCINCiAgICBzdGF0aWMgaW5saW5l IFVCb29sIGlzTGV0dGVyKFVDaGFyMzIgY2gpOw0KIyA1NzQgIi4uL2NvbW1vbi91bmljb2RlL3Vu aWNvZGUuaCINCiAgICBzdGF0aWMgaW5saW5lIFVCb29sIGlzSmF2YUlkZW50aWZpZXJTdGFydChV Q2hhcjMyIGNoKTsNCiMgNjA1ICIuLi9jb21tb24vdW5pY29kZS91bmljb2RlLmgiDQogICAgc3Rh dGljIGlubGluZSBVQm9vbCBpc0phdmFJZGVudGlmaWVyUGFydChVQ2hhcjMyIGNoKTsNCiMgNjIy ICIuLi9jb21tb24vdW5pY29kZS91bmljb2RlLmgiDQogICAgc3RhdGljIGlubGluZSBVQm9vbCBp c1VuaWNvZGVJZGVudGlmaWVyU3RhcnQoVUNoYXIzMiBjaCk7DQojIDY1MSAiLi4vY29tbW9uL3Vu aWNvZGUvdW5pY29kZS5oIg0KICAgIHN0YXRpYyBpbmxpbmUgVUJvb2wgaXNVbmljb2RlSWRlbnRp ZmllclBhcnQoVUNoYXIzMiBjaCk7DQojIDY3OSAiLi4vY29tbW9uL3VuaWNvZGUvdW5pY29kZS5o Ig0KICAgIHN0YXRpYyBpbmxpbmUgVUJvb2wgaXNJZGVudGlmaWVySWdub3JhYmxlKFVDaGFyMzIg Y2gpOw0KIyA3MDYgIi4uL2NvbW1vbi91bmljb2RlL3VuaWNvZGUuaCINCiAgIHN0YXRpYyBpbmxp bmUgVUNoYXIzMiB0b0xvd2VyQ2FzZShVQ2hhcjMyIGNoKTsNCiMgNzMwICIuLi9jb21tb24vdW5p Y29kZS91bmljb2RlLmgiDQogICAgc3RhdGljIGlubGluZSBVQ2hhcjMyIHRvVXBwZXJDYXNlKFVD aGFyMzIgY2gpOw0KIyA3NTAgIi4uL2NvbW1vbi91bmljb2RlL3VuaWNvZGUuaCINCiAgICBzdGF0 aWMgaW5saW5lIFVDaGFyMzIgdG9UaXRsZUNhc2UoVUNoYXIzMiBjaCk7DQojIDc2NiAiLi4vY29t bW9uL3VuaWNvZGUvdW5pY29kZS5oIg0KICAgIHN0YXRpYyBpbmxpbmUgVUNoYXIzMg0KICAgIGZv bGRDYXNlKFVDaGFyMzIgYywgdWludDMyX3Qgb3B0aW9ucyk7DQojIDc3OCAiLi4vY29tbW9uL3Vu aWNvZGUvdW5pY29kZS5oIg0KICAgIHN0YXRpYyBpbmxpbmUgVUJvb2wgaXNTcGFjZUNoYXIoVUNo YXIzMiBjaCk7DQojIDgwOSAiLi4vY29tbW9uL3VuaWNvZGUvdW5pY29kZS5oIg0KICAgIHN0YXRp YyBpbmxpbmUgVUJvb2wgaXNXaGl0ZXNwYWNlKFVDaGFyMzIgY2gpOw0KIyA4NDYgIi4uL2NvbW1v bi91bmljb2RlL3VuaWNvZGUuaCINCiAgICBzdGF0aWMgaW5saW5lIGludDhfdCBnZXRUeXBlKFVD aGFyMzIgY2gpOw0KIyA4NTYgIi4uL2NvbW1vbi91bmljb2RlL3VuaWNvZGUuaCINCiAgICBzdGF0 aWMgaW5saW5lIHVpbnQ4X3QgZ2V0Q29tYmluaW5nQ2xhc3MoVUNoYXIzMiBjKTsNCiMgODcwICIu Li9jb21tb24vdW5pY29kZS91bmljb2RlLmgiDQogICAgc3RhdGljIGlubGluZSBFRGlyZWN0aW9u UHJvcGVydHkgY2hhcmFjdGVyRGlyZWN0aW9uKFVDaGFyMzIgY2gpOw0KIyA4ODMgIi4uL2NvbW1v bi91bmljb2RlL3VuaWNvZGUuaCINCiAgICBzdGF0aWMgaW5saW5lIFVCb29sIGlzTWlycm9yZWQo VUNoYXIzMiBjKTsNCiMgOTAyICIuLi9jb21tb24vdW5pY29kZS91bmljb2RlLmgiDQogICAgc3Rh dGljIGlubGluZSBVQ2hhcjMyIGNoYXJNaXJyb3IoVUNoYXIzMiBjKTsNCiMgOTExICIuLi9jb21t b24vdW5pY29kZS91bmljb2RlLmgiDQogICAgc3RhdGljIGlubGluZSBFVW5pY29kZVNjcmlwdCBn ZXRTY3JpcHQoVUNoYXIzMiBjaCk7DQojIDk2NiAiLi4vY29tbW9uL3VuaWNvZGUvdW5pY29kZS5o Ig0KICAgIHN0YXRpYyBpbmxpbmUgdWludDE2X3QgZ2V0Q2VsbFdpZHRoKFVDaGFyMzIgY2gpOw0K IyA5OTYgIi4uL2NvbW1vbi91bmljb2RlL3VuaWNvZGUuaCINCiAgICBzdGF0aWMgaW5saW5lIGlu dDMyX3QNCiAgICBnZXRDaGFyTmFtZSh1aW50MzJfdCBjb2RlLA0KICAgICAgICAgICAgICAgIGNo YXIgKmJ1ZmZlciwgaW50MzJfdCBidWZmZXJMZW5ndGgsDQogICAgICAgICAgICAgICAgVUNoYXJO YW1lQ2hvaWNlIG5hbWVDaG9pY2U9VV9VTklDT0RFX0NIQVJfTkFNRSk7DQojIDEwMTIgIi4uL2Nv bW1vbi91bmljb2RlL3VuaWNvZGUuaCINCiAgICBzdGF0aWMgaW5saW5lIGludDMyX3QgZGlnaXRW YWx1ZShVQ2hhcjMyIGNoKTsNCiMgMTA1MiAiLi4vY29tbW9uL3VuaWNvZGUvdW5pY29kZS5oIg0K ICAgIHN0YXRpYyBpbmxpbmUgaW50MzJfdCBkaWdpdChVQ2hhcjMyIGNoLCBpbnQ4X3QgcmFkaXgp Ow0KIyAxMDgyICIuLi9jb21tb24vdW5pY29kZS91bmljb2RlLmgiDQogICAgc3RhdGljIGlubGlu ZSBVQ2hhcjMyIGZvckRpZ2l0KGludDMyX3QgZGlnaXQsIGludDhfdCByYWRpeCk7DQoNCg0KDQoN Cg0KDQoNCiAgICBzdGF0aWMgdm9pZCBnZXRVbmljb2RlVmVyc2lvbihVVmVyc2lvbkluZm8gaW5m byk7DQoNCnByb3RlY3RlZDoNCg0KDQoNCg0KDQogICAgVW5pY29kZSgpOw0KDQoNCg0KICAgIFVu aWNvZGUoY29uc3QgVW5pY29kZSAmb3RoZXIpOw0KICAgIH5Vbmljb2RlKCk7DQoNCg0KDQoNCiAg ICBjb25zdCBVbmljb2RlICZvcGVyYXRvcj0oY29uc3QgVW5pY29kZSAmb3RoZXIpOw0KfTsNCg0K DQoNCmlubGluZSBVQm9vbA0KVW5pY29kZTo6aXNTaW5nbGUoVUNoYXIgYykgew0KICAgIHJldHVy biAhKCgoYykmMHhmZmZmZjgwMCk9PTB4ZDgwMCk7DQp9DQoNCmlubGluZSBVQm9vbA0KVW5pY29k ZTo6aXNMZWFkKFVDaGFyIGMpIHsNCiAgICByZXR1cm4gKCgoYykmMHhmZmZmZmMwMCk9PTB4ZDgw MCk7DQp9DQoNCmlubGluZSBVQm9vbA0KVW5pY29kZTo6aXNUcmFpbChVQ2hhciBjKSB7DQogICAg cmV0dXJuICgoKGMpJjB4ZmZmZmZjMDApPT0weGRjMDApOw0KfQ0KDQppbmxpbmUgVUJvb2wNClVu aWNvZGU6OmlzU3Vycm9nYXRlKFVDaGFyMzIgYykgew0KICAgIHJldHVybiAoKChjKSYweGZmZmZm ODAwKT09MHhkODAwKTsNCn0NCg0KaW5saW5lIFVCb29sDQpVbmljb2RlOjppc1VuaWNvZGVDaGFy KFVDaGFyMzIgYykgew0KICAgIHJldHVybiAoKHVpbnQzMl90KShjKTwweGQ4MDAgfHwgKCh1aW50 MzJfdCkoYyk+MHhkZmZmICYmICh1aW50MzJfdCkoYyk8PTB4MTBmZmZmICYmICEoKGMpPj0weGZk ZDAgJiYgKCh1aW50MzJfdCkoYyk8PTB4ZmRlZiB8fCAoKGMpJjB4ZmZmZSk9PTB4ZmZmZSkgJiYg KHVpbnQzMl90KShjKTw9MHgxMGZmZmYpKSk7DQp9DQoNCmlubGluZSBVQm9vbA0KVW5pY29kZTo6 aXNFcnJvcihVQ2hhcjMyIGMpIHsNCiAgICByZXR1cm4gKCgoYykmMHhmZmZlKT09MHhmZmZlIHx8 IChjKT09MHgxNSB8fCAoYyk9PTB4OWYpOw0KfQ0KDQppbmxpbmUgVUJvb2wNClVuaWNvZGU6Omlz VmFsaWQoVUNoYXIzMiBjKSB7DQogICAgcmV0dXJuICgoKHVpbnQzMl90KShjKTwweGQ4MDAgfHwg KCh1aW50MzJfdCkoYyk+MHhkZmZmICYmICh1aW50MzJfdCkoYyk8PTB4MTBmZmZmICYmICEoKGMp Pj0weGZkZDAgJiYgKCh1aW50MzJfdCkoYyk8PTB4ZmRlZiB8fCAoKGMpJjB4ZmZmZSk9PTB4ZmZm ZSkgJiYgKHVpbnQzMl90KShjKTw9MHgxMGZmZmYpKSkgJiYgKGMpIT0weDE1ICYmIChjKSE9MHg5 Zik7DQp9DQoNCmlubGluZSBVQm9vbA0KVW5pY29kZTo6bmVlZE11bHRpcGxlVUNoYXIoVUNoYXIz MiBjKSB7DQogICAgcmV0dXJuICgodWludDMyX3QpKGMpPjB4ZmZmZik7DQp9DQoNCmlubGluZSBp bnQzMl90DQpVbmljb2RlOjpjaGFyTGVuZ3RoKFVDaGFyMzIgYykgew0KICAgIHJldHVybiAoKHVp bnQzMl90KShjKTw9MHhmZmZmID8gMSA6IDIpOw0KfQ0KDQppbmxpbmUgaW50MzJfdA0KVW5pY29k ZTo6YXJyYXlTaXplKGludDMyX3Qgc2l6ZSkgew0KICAgIHJldHVybiAoc2l6ZSk7DQp9DQoNCg0K aW5saW5lIFVCb29sDQpVbmljb2RlOjppc0xvd2VyQ2FzZShVQ2hhcjMyIGNoKSB7DQogICAgcmV0 dXJuIHVfaXNsb3dlcl8yXzIoY2gpOw0KfQ0KDQoNCmlubGluZSBVQm9vbA0KVW5pY29kZTo6aXNV cHBlckNhc2UoVUNoYXIzMiBjaCkgew0KICAgIHJldHVybiB1X2lzdXBwZXJfMl8yKGNoKTsNCn0N Cg0KDQppbmxpbmUgVUJvb2wNClVuaWNvZGU6OmlzVGl0bGVDYXNlKFVDaGFyMzIgY2gpIHsNCiAg ICByZXR1cm4gdV9pc3RpdGxlXzJfMihjaCk7DQp9DQoNCg0KaW5saW5lIFVCb29sDQpVbmljb2Rl Ojppc0RpZ2l0KFVDaGFyMzIgY2gpIHsNCiAgICByZXR1cm4gdV9pc2RpZ2l0XzJfMihjaCk7DQp9 DQoNCg0KaW5saW5lIFVCb29sDQpVbmljb2RlOjppc0RlZmluZWQoVUNoYXIzMiBjaCkgew0KICAg IHJldHVybiB1X2lzZGVmaW5lZF8yXzIoY2gpOw0KfQ0KDQoNCmlubGluZSBVQm9vbA0KVW5pY29k ZTo6aXNDb250cm9sKFVDaGFyMzIgY2gpIHsNCiAgICByZXR1cm4gdV9pc2NudHJsXzJfMihjaCk7 DQp9DQoNCg0KaW5saW5lIFVCb29sDQpVbmljb2RlOjppc1ByaW50YWJsZShVQ2hhcjMyIGNoKSB7 DQogICAgcmV0dXJuIHVfaXNwcmludF8yXzIoY2gpOw0KfQ0KDQoNCmlubGluZSBVQm9vbA0KVW5p Y29kZTo6aXNCYXNlRm9ybShVQ2hhcjMyIGNoKSB7DQogICAgcmV0dXJuIHVfaXNiYXNlXzJfMihj aCk7DQp9DQoNCg0KaW5saW5lIFVCb29sDQpVbmljb2RlOjppc0xldHRlcihVQ2hhcjMyIGNoKSB7 DQogICAgcmV0dXJuIHVfaXNhbHBoYV8yXzIoY2gpOw0KfQ0KDQoNCmlubGluZSBVQm9vbA0KVW5p Y29kZTo6aXNKYXZhSWRlbnRpZmllclN0YXJ0KFVDaGFyMzIgY2gpIHsNCiAgICByZXR1cm4gdV9p c0phdmFJRFN0YXJ0XzJfMihjaCk7DQp9DQoNCg0KDQppbmxpbmUgVUJvb2wNClVuaWNvZGU6Omlz SmF2YUlkZW50aWZpZXJQYXJ0KFVDaGFyMzIgY2gpIHsNCiAgICByZXR1cm4gdV9pc0phdmFJRFBh cnRfMl8yKGNoKTsNCn0NCg0KDQppbmxpbmUgVUJvb2wNClVuaWNvZGU6OmlzVW5pY29kZUlkZW50 aWZpZXJTdGFydChVQ2hhcjMyIGNoKSB7DQogICAgcmV0dXJuIHVfaXNJRFN0YXJ0XzJfMihjaCk7 DQp9DQoNCg0KDQppbmxpbmUgVUJvb2wNClVuaWNvZGU6OmlzVW5pY29kZUlkZW50aWZpZXJQYXJ0 KFVDaGFyMzIgY2gpIHsNCiAgICByZXR1cm4gdV9pc0lEUGFydF8yXzIoY2gpOw0KfQ0KDQoNCmlu bGluZSBVQm9vbA0KVW5pY29kZTo6aXNJZGVudGlmaWVySWdub3JhYmxlKFVDaGFyMzIgY2gpIHsN CiAgICByZXR1cm4gdV9pc0lESWdub3JhYmxlXzJfMihjaCk7DQp9DQoNCg0KaW5saW5lIFVDaGFy MzINClVuaWNvZGU6OnRvTG93ZXJDYXNlKFVDaGFyMzIgY2gpIHsNCiAgICByZXR1cm4gdV90b2xv d2VyXzJfMihjaCk7DQp9DQoNCg0KaW5saW5lIFVDaGFyMzINClVuaWNvZGU6OnRvVXBwZXJDYXNl KFVDaGFyMzIgY2gpIHsNCiAgICByZXR1cm4gdV90b3VwcGVyXzJfMihjaCk7DQp9DQoNCg0KaW5s aW5lIFVDaGFyMzINClVuaWNvZGU6OnRvVGl0bGVDYXNlKFVDaGFyMzIgY2gpIHsNCiAgICByZXR1 cm4gdV90b3RpdGxlXzJfMihjaCk7DQp9DQoNCg0KaW5saW5lIFVDaGFyMzINClVuaWNvZGU6OmZv bGRDYXNlKFVDaGFyMzIgY2gsIHVpbnQzMl90IG9wdGlvbnMpIHsNCiAgICByZXR1cm4gdV9mb2xk Q2FzZV8yXzIoY2gsIG9wdGlvbnMpOw0KfQ0KDQoNCmlubGluZSBVQm9vbA0KVW5pY29kZTo6aXNT cGFjZUNoYXIoVUNoYXIzMiBjaCkgew0KICAgIHJldHVybiB1X2lzc3BhY2VfMl8yKGNoKTsNCn0N Cg0KDQppbmxpbmUgVUJvb2wNClVuaWNvZGU6OmlzV2hpdGVzcGFjZShVQ2hhcjMyIGNoKSB7DQog ICAgcmV0dXJuIHVfaXNXaGl0ZXNwYWNlXzJfMihjaCk7DQp9DQoNCg0KaW5saW5lIGludDhfdA0K VW5pY29kZTo6Z2V0VHlwZShVQ2hhcjMyIGNoKSB7DQogICAgcmV0dXJuIHVfY2hhclR5cGVfMl8y KGNoKTsNCn0NCg0KaW5saW5lIHVpbnQ4X3QNClVuaWNvZGU6OmdldENvbWJpbmluZ0NsYXNzKFVD aGFyMzIgYykgew0KICAgIHJldHVybiB1X2dldENvbWJpbmluZ0NsYXNzXzJfMihjKTsNCn0NCg0K DQppbmxpbmUgVW5pY29kZTo6RURpcmVjdGlvblByb3BlcnR5DQpVbmljb2RlOjpjaGFyYWN0ZXJE aXJlY3Rpb24oVUNoYXIzMiBjaCkgew0KICAgIHJldHVybiAoRURpcmVjdGlvblByb3BlcnR5KXVf Y2hhckRpcmVjdGlvbl8yXzIoY2gpOw0KfQ0KDQoNCmlubGluZSBVQm9vbA0KVW5pY29kZTo6aXNN aXJyb3JlZChVQ2hhcjMyIGNoKSB7DQogICAgcmV0dXJuIHVfaXNNaXJyb3JlZF8yXzIoY2gpOw0K fQ0KDQoNCmlubGluZSBVQ2hhcjMyDQpVbmljb2RlOjpjaGFyTWlycm9yKFVDaGFyMzIgY2gpIHsN CiAgICByZXR1cm4gdV9jaGFyTWlycm9yXzJfMihjaCk7DQp9DQoNCg0KaW5saW5lIFVuaWNvZGU6 OkVVbmljb2RlU2NyaXB0DQpVbmljb2RlOjpnZXRTY3JpcHQoVUNoYXIzMiBjaCkgew0KICAgIHJl dHVybiAoRVVuaWNvZGVTY3JpcHQpIHVibG9ja19nZXRDb2RlXzJfMihjaCk7DQp9DQoNCg0KaW5s aW5lIHVpbnQxNl90DQpVbmljb2RlOjpnZXRDZWxsV2lkdGgoVUNoYXIzMiBjaCkgew0KICAgIHJl dHVybiB1X2NoYXJDZWxsV2lkdGhfMl8yKGNoKTsNCn0NCg0KaW5saW5lIGludDMyX3QNClVuaWNv ZGU6OmdldENoYXJOYW1lKHVpbnQzMl90IGNvZGUsDQogICAgICAgICAgICAgICAgICAgICBjaGFy ICpidWZmZXIsIGludDMyX3QgYnVmZmVyTGVuZ3RoLA0KICAgICAgICAgICAgICAgICAgICAgVUNo YXJOYW1lQ2hvaWNlIG5hbWVDaG9pY2UpIHsNCiAgICBVRXJyb3JDb2RlIGVycm9yQ29kZT1VX1pF Uk9fRVJST1I7DQogICAgaW50MzJfdCBsZW5ndGg9dV9jaGFyTmFtZV8yXzIoY29kZSwgbmFtZUNo b2ljZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgsICZlcnJvckNvZGUpOw0KICAgIHJldHVybiBVX1NV Q0NFU1MoZXJyb3JDb2RlKSA/IGxlbmd0aCA6IDA7DQp9DQoNCmlubGluZSBpbnQzMl90DQpVbmlj b2RlOjpkaWdpdFZhbHVlKFVDaGFyMzIgY2gpIHsNCiAgICByZXR1cm4gdV9jaGFyRGlnaXRWYWx1 ZV8yXzIoY2gpOw0KfQ0KDQppbmxpbmUgaW50MzJfdA0KVW5pY29kZTo6ZGlnaXQoVUNoYXIzMiBj aCwgaW50OF90IHJhZGl4KSB7DQogICAgcmV0dXJuIHVfZGlnaXRfMl8yKGNoLCByYWRpeCk7DQp9 DQoNCmlubGluZSBVQ2hhcjMyDQpVbmljb2RlOjpmb3JEaWdpdChpbnQzMl90IGRpZ2l0LCBpbnQ4 X3QgcmFkaXgpIHsNCiAgICByZXR1cm4gdV9mb3JEaWdpdF8yXzIoZGlnaXQsIHJhZGl4KTsNCn0N Cg0KaW5saW5lIHZvaWQNClVuaWNvZGU6OmdldFVuaWNvZGVWZXJzaW9uKFVWZXJzaW9uSW5mbyB2 ZXJzaW9uQXJyYXkpIHsNCiAgICB1X2dldFVuaWNvZGVWZXJzaW9uXzJfMih2ZXJzaW9uQXJyYXkp Ow0KfQ0KfQ0KIyAxNyAiY2FuaXRlci5oIiAyDQoNCg0KDQpuYW1lc3BhY2UgaWN1XzJfMiB7DQoN CmNsYXNzIEhhc2h0YWJsZTsNCiMgNTcgImNhbml0ZXIuaCINCmNsYXNzIENhbm9uaWNhbEl0ZXJh dG9yIDogcHVibGljIFVPYmplY3Qgew0KcHVibGljOg0KDQoNCg0KDQogICAgQ2Fub25pY2FsSXRl cmF0b3IoVW5pY29kZVN0cmluZyBzb3VyY2UsIFVFcnJvckNvZGUgJnN0YXR1cyk7DQoNCg0KDQoN CiAgICB+Q2Fub25pY2FsSXRlcmF0b3IoKTsNCg0KDQoNCg0KICAgIFVuaWNvZGVTdHJpbmcgZ2V0 U291cmNlKCk7DQoNCg0KDQoNCiAgICB2b2lkIHJlc2V0KCk7DQoNCg0KDQoNCg0KICAgIFVuaWNv ZGVTdHJpbmcgbmV4dCgpOw0KDQoNCg0KDQoNCg0KICAgIHZvaWQgc2V0U291cmNlKGNvbnN0IFVu aWNvZGVTdHJpbmcgJm5ld1NvdXJjZSwgVUVycm9yQ29kZSAmc3RhdHVzKTsNCiMgMTAxICJjYW5p dGVyLmgiDQogICAgc3RhdGljIHZvaWQgcGVybXV0ZShVbmljb2RlU3RyaW5nICZzb3VyY2UsIFVC b29sIHNraXBaZXJvcywgSGFzaHRhYmxlICpyZXN1bHQsIFVFcnJvckNvZGUgJnN0YXR1cyk7DQoN Cg0KDQoNCg0KDQogICAgdmlydHVhbCBpbmxpbmUgVUNsYXNzSUQgZ2V0RHluYW1pY0NsYXNzSUQo KSBjb25zdCB7IHJldHVybiBnZXRTdGF0aWNDbGFzc0lEKCk7IH0NCg0KDQoNCg0KDQoNCiAgICBz dGF0aWMgaW5saW5lIFVDbGFzc0lEIGdldFN0YXRpY0NsYXNzSUQoKSB7IHJldHVybiAoVUNsYXNz SUQpJmZnQ2xhc3NJRDsgfQ0KDQpwcml2YXRlOg0KDQoNCg0KICAgIFVuaWNvZGVTdHJpbmcgc291 cmNlOw0KICAgIFVCb29sIGRvbmU7DQoNCg0KDQogICAgVW5pY29kZVN0cmluZyAqKnBpZWNlczsN CiAgICBpbnQzMl90IHBpZWNlc19sZW5ndGg7DQogICAgaW50MzJfdCAqcGllY2VzX2xlbmd0aHM7 DQoNCg0KICAgIGludDMyX3QgKmN1cnJlbnQ7DQogICAgaW50MzJfdCBjdXJyZW50X2xlbmd0aDsN Cg0KDQogICAgVW5pY29kZVN0cmluZyBidWZmZXI7DQoNCg0KICAgIFVuaWNvZGVTdHJpbmcgKmdl dEVxdWl2YWxlbnRzKGNvbnN0IFVuaWNvZGVTdHJpbmcgJnNlZ21lbnQsIGludDMyX3QgJnJlc3Vs dF9sZW4sIFVFcnJvckNvZGUgJnN0YXR1cyk7DQoNCg0KICAgIEhhc2h0YWJsZSAqZ2V0RXF1aXZh bGVudHMyKGNvbnN0IFVDaGFyICpzZWdtZW50LCBpbnQzMl90IHNlZ0xlbiwgVUVycm9yQ29kZSAm c3RhdHVzKTsNCiMgMTUwICJjYW5pdGVyLmgiDQogICAgSGFzaHRhYmxlICpleHRyYWN0KFVDaGFy MzIgY29tcCwgY29uc3QgVUNoYXIgKnNlZ21lbnQsIGludDMyX3Qgc2VnTGVuLCBpbnQzMl90IHNl Z21lbnRQb3MsIFVFcnJvckNvZGUgJnN0YXR1cyk7DQoNCg0KICAgIHZvaWQgY2xlYW5QaWVjZXMo KTsNCg0KDQoNCg0KDQogICAgc3RhdGljIGNvbnN0IGNoYXIgZmdDbGFzc0lEOw0KfTsNCn0NCiMg MzEgInVjb2xfZWxtLmNwcCIgMg0KIyAxICIuLi9jb21tb24vY21lbW9yeS5oIiAxDQojIDI4ICIu Li9jb21tb24vY21lbW9yeS5oIg0KIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMw0KIyAx NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzDQojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1w Yy1jeWd3aW4vMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMw0KIyAxNSAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAyIDMNCg0KIyAxICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDEgMw0KIyA5ICIv dXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMNCmV4dGVybiAiQyIgew0KIyAxOSAiL3Vzci9pbmNs dWRlL3N5cy9yZWVudC5oIiAzDQp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX19VTG9uZzsNCiMgNDAg Ii91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMw0Kc3RydWN0IF9CaWdpbnQNCnsNCiAgc3RydWN0 IF9CaWdpbnQgKl9uZXh0Ow0KICBpbnQgX2ssIF9tYXh3ZHMsIF9zaWduLCBfd2RzOw0KICBfX1VM b25nIF94WzFdOw0KfTsNCg0KDQpzdHJ1Y3QgX190bQ0Kew0KICBpbnQgX190bV9zZWM7DQogIGlu dCBfX3RtX21pbjsNCiAgaW50IF9fdG1faG91cjsNCiAgaW50IF9fdG1fbWRheTsNCiAgaW50IF9f dG1fbW9uOw0KICBpbnQgX190bV95ZWFyOw0KICBpbnQgX190bV93ZGF5Ow0KICBpbnQgX190bV95 ZGF5Ow0KICBpbnQgX190bV9pc2RzdDsNCn07DQojIDY4ICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50 LmgiIDMNCnN0cnVjdCBfYXRleGl0IHsNCiAgICAgICAgc3RydWN0IF9hdGV4aXQgKl9uZXh0Ow0K ICAgICAgICBpbnQgX2luZDsNCiAgICAgICAgdm9pZCAoKl9mbnNbMzJdKSh2b2lkKTsNCiAgICAg ICAgdm9pZCAqX2ZuYXJnc1szMl07DQogICAgICAgIF9fVUxvbmcgX2ZudHlwZXM7DQp9Ow0KIyA5 MSAiL3Vzci9pbmNsdWRlL3N5cy9yZWVudC5oIiAzDQpzdHJ1Y3QgX19zYnVmIHsNCiAgICAgICAg dW5zaWduZWQgY2hhciAqX2Jhc2U7DQogICAgICAgIGludCBfc2l6ZTsNCn07DQoNCg0KDQoNCg0K DQp0eXBlZGVmIGxvbmcgX2Zwb3NfdDsNCiMgMTU2ICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50Lmgi IDMNCnN0cnVjdCBfX3NGSUxFIHsNCiAgdW5zaWduZWQgY2hhciAqX3A7DQogIGludCBfcjsNCiAg aW50IF93Ow0KICBzaG9ydCBfZmxhZ3M7DQogIHNob3J0IF9maWxlOw0KICBzdHJ1Y3QgX19zYnVm IF9iZjsNCiAgaW50IF9sYmZzaXplOw0KDQoNCg0KDQoNCg0KICB2b2lkICogX2Nvb2tpZTsNCg0K ICBfc3NpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSAoKl9yZWFkKSAodm9pZCAqIF9j b29raWUsIGNoYXIgKl9idWYsIGludCBfbik7DQogIF9zc2l6ZV90IF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpICgqX3dyaXRlKSAodm9pZCAqIF9jb29raWUsIGNvbnN0IGNoYXIgKl9idWYsIGlu dCBfbik7DQoNCiAgX2Zwb3NfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSAoKl9zZWVrKSAo dm9pZCAqIF9jb29raWUsIF9mcG9zX3QgX29mZnNldCwgaW50IF93aGVuY2UpOw0KICBpbnQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgKCpfY2xvc2UpICh2b2lkICogX2Nvb2tpZSk7DQoNCg0K ICBzdHJ1Y3QgX19zYnVmIF91YjsNCiAgdW5zaWduZWQgY2hhciAqX3VwOw0KICBpbnQgX3VyOw0K DQoNCiAgdW5zaWduZWQgY2hhciBfdWJ1ZlszXTsNCiAgdW5zaWduZWQgY2hhciBfbmJ1ZlsxXTsN Cg0KDQogIHN0cnVjdCBfX3NidWYgX2xiOw0KDQoNCiAgaW50IF9ibGtzaXplOw0KICBpbnQgX29m ZnNldDsNCg0KDQogIHN0cnVjdCBfcmVlbnQgKl9kYXRhOw0KDQoNCg0KICBfZmxvY2tfdCBfbG9j azsNCg0KfTsNCiMgMjQ5ICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMNCnR5cGVkZWYgc3Ry dWN0IF9fc0ZJTEUgX19GSUxFOw0KDQoNCnN0cnVjdCBfZ2x1ZQ0Kew0KICBzdHJ1Y3QgX2dsdWUg Kl9uZXh0Ow0KICBpbnQgX25pb2JzOw0KICBfX0ZJTEUgKl9pb2JzOw0KfTsNCiMgMjgwICIvdXNy L2luY2x1ZGUvc3lzL3JlZW50LmgiIDMNCnN0cnVjdCBfcmFuZDQ4IHsNCiAgdW5zaWduZWQgc2hv cnQgX3NlZWRbM107DQogIHVuc2lnbmVkIHNob3J0IF9tdWx0WzNdOw0KICB1bnNpZ25lZCBzaG9y dCBfYWRkOw0KDQoNCg0KDQp9Ow0KIyA1MzIgIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMw0K c3RydWN0IF9yZWVudA0Kew0KICBpbnQgX2Vycm5vOw0KDQoNCg0KDQogIF9fRklMRSAqX3N0ZGlu LCAqX3N0ZG91dCwgKl9zdGRlcnI7DQoNCiAgaW50IF9pbmM7DQogIGNoYXIgX2VtZXJnZW5jeVsy NV07DQoNCiAgaW50IF9jdXJyZW50X2NhdGVnb3J5Ow0KICBjb25zdCBjaGFyICpfY3VycmVudF9s b2NhbGU7DQoNCiAgaW50IF9fc2RpZGluaXQ7DQoNCiAgdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSAoKl9fY2xlYW51cCkgKHN0cnVjdCBfcmVlbnQgKik7DQoNCg0KICBzdHJ1Y3QgX0Jp Z2ludCAqX3Jlc3VsdDsNCiAgaW50IF9yZXN1bHRfazsNCiAgc3RydWN0IF9CaWdpbnQgKl9wNXM7 DQogIHN0cnVjdCBfQmlnaW50ICoqX2ZyZWVsaXN0Ow0KDQoNCiAgaW50IF9jdnRsZW47DQogIGNo YXIgKl9jdnRidWY7DQoNCiAgdW5pb24NCiAgICB7DQogICAgICBzdHJ1Y3QNCiAgICAgICAgew0K ICAgICAgICAgIHVuc2lnbmVkIGludCBfdW51c2VkX3JhbmQ7DQogICAgICAgICAgY2hhciAqIF9z dHJ0b2tfbGFzdDsNCiAgICAgICAgICBjaGFyIF9hc2N0aW1lX2J1ZlsyNl07DQogICAgICAgICAg c3RydWN0IF9fdG0gX2xvY2FsdGltZV9idWY7DQogICAgICAgICAgaW50IF9nYW1tYV9zaWduZ2Ft Ow0KICAgICAgICAgIF9fZXh0ZW5zaW9uX18gdW5zaWduZWQgbG9uZyBsb25nIF9yYW5kX25leHQ7 DQogICAgICAgICAgc3RydWN0IF9yYW5kNDggX3I0ODsNCiAgICAgICAgICBfbWJzdGF0ZV90IF9t Ymxlbl9zdGF0ZTsNCiAgICAgICAgICBfbWJzdGF0ZV90IF9tYnRvd2Nfc3RhdGU7DQogICAgICAg ICAgX21ic3RhdGVfdCBfd2N0b21iX3N0YXRlOw0KICAgICAgICAgIGNoYXIgX2w2NGFfYnVmWzhd Ow0KICAgICAgICAgIGNoYXIgX3NpZ25hbF9idWZbMjRdOw0KICAgICAgICAgIGludCBfZ2V0ZGF0 ZV9lcnI7DQogICAgICAgICAgX21ic3RhdGVfdCBfbWJybGVuX3N0YXRlOw0KICAgICAgICAgIF9t YnN0YXRlX3QgX21icnRvd2Nfc3RhdGU7DQogICAgICAgICAgX21ic3RhdGVfdCBfbWJzcnRvd2Nz X3N0YXRlOw0KICAgICAgICAgIF9tYnN0YXRlX3QgX3djcnRvbWJfc3RhdGU7DQogICAgICAgICAg X21ic3RhdGVfdCBfd2NzcnRvbWJzX3N0YXRlOw0KICAgICAgICB9IF9yZWVudDsNCg0KDQoNCiAg ICAgIHN0cnVjdA0KICAgICAgICB7DQoNCiAgICAgICAgICB1bnNpZ25lZCBjaGFyICogX25leHRm WzMwXTsNCiAgICAgICAgICB1bnNpZ25lZCBpbnQgX25tYWxsb2NbMzBdOw0KICAgICAgICB9IF91 bnVzZWQ7DQogICAgfSBfbmV3Ow0KDQoNCiAgc3RydWN0IF9hdGV4aXQgKl9hdGV4aXQ7DQogIHN0 cnVjdCBfYXRleGl0IF9hdGV4aXQwOw0KDQoNCiAgdm9pZCAoKiooX3NpZ19mdW5jKSkoaW50KTsN Cg0KDQoNCg0KICBzdHJ1Y3QgX2dsdWUgX19zZ2x1ZTsNCiAgX19GSUxFIF9fc2ZbM107DQp9Ow0K IyA3MjggIi91c3IvaW5jbHVkZS9zeXMvcmVlbnQuaCIgMw0KZXh0ZXJuIHN0cnVjdCBfcmVlbnQg Kl9pbXB1cmVfcHRyIDsNCg0Kdm9pZCBfcmVjbGFpbV9yZWVudCAoc3RydWN0IF9yZWVudCAqKTsN CiMgNzQ2ICIvdXNyL2luY2x1ZGUvc3lzL3JlZW50LmgiIDMNCn0NCiMgMTcgIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMiAzDQojIDEgIi91c3IvaW5jbHVkZS9tYWNoaW5lL3N0ZGxpYi5oIiAxIDMN CiMgMTggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzDQoNCiMgMSAiL3Vzci9pbmNsdWRlL2Fs bG9jYS5oIiAxIDMNCiMgMjAgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzDQoNCg0KZXh0ZXJu ICJDIiB7DQoNCnR5cGVkZWYgc3RydWN0DQp7DQogIGludCBxdW90Ow0KICBpbnQgcmVtOw0KfSBk aXZfdDsNCg0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgbG9uZyBxdW90Ow0KICBsb25nIHJlbTsNCn0g bGRpdl90Ow0KIyA0NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzDQpleHRlcm4gX19hdHRyaWJ1 dGVfXygoZGxsaW1wb3J0KSkgaW50IF9fbWJfY3VyX21heDsNCg0KDQoNCnZvaWQgX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgYWJvcnQgKHZvaWQpIF9fYXR0cmlidXRlX18gKChub3JldHVybikp Ow0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGFicyAoaW50KTsNCmludCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpKHZvaWQpKTsNCmRvdWJs ZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhdG9mIChjb25zdCBjaGFyICpfX25wdHIpOw0K DQpmbG9hdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBhdG9mZiAoY29uc3QgY2hhciAqX19u cHRyKTsNCg0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGF0b2kgKGNvbnN0IGNoYXIg Kl9fbnB0cik7DQpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGF0b2wgKGNvbnN0IGNo YXIgKl9fbnB0cik7DQp2b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYnNlYXJjaCAo Y29uc3Qgdm9pZCAqIF9fa2V5LCBjb25zdCB2b2lkICogX19iYXNlLCBzaXplX3QgX19ubWVtYiwg c2l6ZV90IF9fc2l6ZSwgaW50ICgqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9jb21wYXIp IChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOw0KDQoNCg0KDQp2b2lkICogX19hdHRyaWJ1 dGVfXygoX19jZGVjbF9fKSkgY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSk7 DQpkaXZfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBkaXYgKGludCBfX251bWVyLCBpbnQg X19kZW5vbSk7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGV4aXQgKGludCBfX3N0 YXR1cykgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIGZyZWUgKHZvaWQgKik7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgZ2V0ZW52IChjb25zdCBjaGFyICpfX3N0cmluZyk7DQpjaGFyICogX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgX2dldGVudl9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKl9fc3Ry aW5nKTsNCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfZmluZGVudiAoY29uc3Qg Y2hhciAqLCBpbnQgKik7DQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2ZpbmRl bnZfciAoc3RydWN0IF9yZWVudCAqLCBjb25zdCBjaGFyICosIGludCAqKTsNCmxvbmcgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgbGFicyAobG9uZyk7DQpsZGl2X3QgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgbGRpdiAobG9uZyBfX251bWVyLCBsb25nIF9fZGVub20pOw0Kdm9pZCAqIF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1hbGxvYyAoc2l6ZV90IF9fc2l6ZSk7DQppbnQgX19h dHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWJsZW4gKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsNCmlu dCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfbWJsZW5fciAoc3RydWN0IF9yZWVudCAqLCBj b25zdCBjaGFyICosIHNpemVfdCwgX21ic3RhdGVfdCAqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBtYnRvd2MgKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0KaW50 IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9tYnRvd2NfciAoc3RydWN0IF9yZWVudCAqLCB3 Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBfbWJzdGF0ZV90ICopOw0KaW50IF9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIHdjdG9tYiAoY2hhciAqLCB3Y2hhcl90KTsNCmludCBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfd2N0b21iX3IgKHN0cnVjdCBfcmVlbnQgKiwgY2hhciAq LCB3Y2hhcl90LCBfbWJzdGF0ZV90ICopOw0Kc2l6ZV90IF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIG1ic3Rvd2NzICh3Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsNCnNpemVfdCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfbWJzdG93Y3NfciAoc3RydWN0IF9yZWVudCAqLCB3 Y2hhcl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBfbWJzdGF0ZV90ICopOw0Kc2l6ZV90IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHdjc3RvbWJzIChjaGFyICosIGNvbnN0IHdjaGFyX3Qg Kiwgc2l6ZV90KTsNCnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfd2NzdG9tYnNf ciAoc3RydWN0IF9yZWVudCAqLCBjaGFyICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90LCBfbWJz dGF0ZV90ICopOw0KDQoNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBta3N0ZW1wIChj aGFyICopOw0KY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1rdGVtcCAoY2hhciAq KTsNCg0KDQp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHFzb3J0ICh2b2lkICogX19i YXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgaW50KCpfY29tcGFyKShjb25zdCB2 b2lkICosIGNvbnN0IHZvaWQgKikpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJh bmQgKHZvaWQpOw0Kdm9pZCAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHJlYWxsb2MgKHZv aWQgKiBfX3IsIHNpemVfdCBfX3NpemUpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBzcmFuZCAodW5zaWduZWQgX19zZWVkKTsNCmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBzdHJ0b2QgKGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUik7DQpkb3VibGUg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3N0cnRvZF9yIChzdHJ1Y3QgX3JlZW50ICosY29u c3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSKTsNCg0KZmxvYXQgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgc3RydG9kZiAoY29uc3QgY2hhciAqX19uLCBjaGFyICoqX19lbmRfUFRSKTsN Cg0KbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJ0b2wgKGNvbnN0IGNoYXIgKl9f biwgY2hhciAqKl9fZW5kX1BUUiwgaW50IF9fYmFzZSk7DQpsb25nIF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIF9zdHJ0b2xfciAoc3RydWN0IF9yZWVudCAqLGNvbnN0IGNoYXIgKl9fbiwgY2hh ciAqKl9fZW5kX1BUUiwgaW50IF9fYmFzZSk7DQp1bnNpZ25lZCBsb25nIF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIHN0cnRvdWwgKGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9fZW5kX1BUUiwg aW50IF9fYmFzZSk7DQp1bnNpZ25lZCBsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9z dHJ0b3VsX3IgKHN0cnVjdCBfcmVlbnQgKixjb25zdCBjaGFyICpfX24sIGNoYXIgKipfX2VuZF9Q VFIsIGludCBfX2Jhc2UpOw0KDQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3lzdGVt IChjb25zdCBjaGFyICpfX3N0cmluZyk7DQoNCg0KbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBhNjRsIChjb25zdCBjaGFyICpfX2lucHV0KTsNCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBsNjRhIChsb25nIF9faW5wdXQpOw0KY2hhciAqIF9fYXR0cmlidXRlX18oKF9f Y2RlY2xfXykpIF9sNjRhX3IgKHN0cnVjdCBfcmVlbnQgKixsb25nIF9faW5wdXQpOw0KaW50IF9f YXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpKGludCwgdm9p ZCAqKSx2b2lkICogX19hcmcpOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfRXhp dCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsNCmludCBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBwdXRlbnYgKGNvbnN0IGNoYXIgKl9fc3RyaW5nKTsNCmludCBf X2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfcHV0ZW52X3IgKHN0cnVjdCBfcmVlbnQgKiwgY29u c3QgY2hhciAqX19zdHJpbmcpOw0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNldGVu diAoY29uc3QgY2hhciAqX19zdHJpbmcsIGNvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX292ZXJ3 cml0ZSk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX3NldGVudl9yIChzdHJ1Y3Qg X3JlZW50ICosIGNvbnN0IGNoYXIgKl9fc3RyaW5nLCBjb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQg X19vdmVyd3JpdGUpOw0KDQpjaGFyICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ2N2dCAo ZG91YmxlLGludCxjaGFyICopOw0KY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGdj dnRmIChmbG9hdCxpbnQsY2hhciAqKTsNCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBmY3Z0IChkb3VibGUsaW50LGludCAqLGludCAqKTsNCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBmY3Z0ZiAoZmxvYXQsaW50LGludCAqLGludCAqKTsNCmNoYXIgKiBfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBlY3Z0IChkb3VibGUsaW50LGludCAqLGludCAqKTsNCmNoYXIg KiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBlY3Z0YnVmIChkb3VibGUsIGludCwgaW50Kiwg aW50KiwgY2hhciAqKTsNCmNoYXIgKiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBmY3Z0YnVm IChkb3VibGUsIGludCwgaW50KiwgaW50KiwgY2hhciAqKTsNCmNoYXIgKiBfX2F0dHJpYnV0ZV9f KChfX2NkZWNsX18pKSBlY3Z0ZiAoZmxvYXQsaW50LGludCAqLGludCAqKTsNCmNoYXIgKiBfX2F0 dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBkdG9hIChkb3VibGUsIGludCwgaW50LCBpbnQgKiwgaW50 KiwgY2hhcioqKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSByYW5kX3IgKHVuc2ln bmVkICpfX3NlZWQpOw0KDQpkb3VibGUgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZHJhbmQ0 OCAodm9pZCk7DQpkb3VibGUgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2RyYW5kNDhfciAo c3RydWN0IF9yZWVudCAqKTsNCmRvdWJsZSBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBlcmFu ZDQ4ICh1bnNpZ25lZCBzaG9ydCBbM10pOw0KZG91YmxlIF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIF9lcmFuZDQ4X3IgKHN0cnVjdCBfcmVlbnQgKiwgdW5zaWduZWQgc2hvcnQgWzNdKTsNCmxv bmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgWzNd KTsNCmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX2pyYW5kNDhfciAoc3RydWN0IF9y ZWVudCAqLCB1bnNpZ25lZCBzaG9ydCBbM10pOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBbN10pOw0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBfbGNvbmc0OF9yIChzdHJ1Y3QgX3JlZW50ICosIHVuc2lnbmVkIHNob3J0IFs3 XSk7DQpsb25nIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGxyYW5kNDggKHZvaWQpOw0KbG9u ZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfbHJhbmQ0OF9yIChzdHJ1Y3QgX3JlZW50ICop Ow0KbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtcmFuZDQ4ICh2b2lkKTsNCmxvbmcg X19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX21yYW5kNDhfciAoc3RydWN0IF9yZWVudCAqKTsN CmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQg WzNdKTsNCmxvbmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgX25yYW5kNDhfciAoc3RydWN0 IF9yZWVudCAqLCB1bnNpZ25lZCBzaG9ydCBbM10pOw0KdW5zaWduZWQgc2hvcnQgKg0KICAgICAg IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHNlZWQ0OCAodW5zaWduZWQgc2hvcnQgWzNdKTsN CnVuc2lnbmVkIHNob3J0ICoNCiAgICAgICBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc2Vl ZDQ4X3IgKHN0cnVjdCBfcmVlbnQgKiwgdW5zaWduZWQgc2hvcnQgWzNdKTsNCnZvaWQgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgc3JhbmQ0OCAobG9uZyk7DQp2b2lkIF9fYXR0cmlidXRlX18o KF9fY2RlY2xfXykpIF9zcmFuZDQ4X3IgKHN0cnVjdCBfcmVlbnQgKiwgbG9uZyk7DQpsb25nIGxv bmcgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydG9sbCAoY29uc3QgY2hhciAqX19uLCBj aGFyICoqX19lbmRfUFRSLCBpbnQgX19iYXNlKTsNCmxvbmcgbG9uZyBfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBfc3RydG9sbF9yIChzdHJ1Y3QgX3JlZW50ICosIGNvbnN0IGNoYXIgKl9fbiwg Y2hhciAqKl9fZW5kX1BUUiwgaW50IF9fYmFzZSk7DQp1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgc3RydG91bGwgKGNvbnN0IGNoYXIgKl9fbiwgY2hhciAqKl9f ZW5kX1BUUiwgaW50IF9fYmFzZSk7DQp1bnNpZ25lZCBsb25nIGxvbmcgX19hdHRyaWJ1dGVfXygo X19jZGVjbF9fKSkgX3N0cnRvdWxsX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqX19u LCBjaGFyICoqX19lbmRfUFRSLCBpbnQgX19iYXNlKTsNCg0KDQoNCg0KY2hhciAqIF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIHJlYWxwYXRoIChjb25zdCBjaGFyICosIGNoYXIgKik7DQp2b2lk IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHVuc2V0ZW52IChjb25zdCBjaGFyICpfX3N0cmlu Zyk7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF91bnNldGVudl9yIChzdHJ1Y3Qg X3JlZW50ICosIGNvbnN0IGNoYXIgKl9fc3RyaW5nKTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2Nk ZWNsX18pKSByYW5kb20gKHZvaWQpOw0KbG9uZyBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBz cmFuZG9tICh1bnNpZ25lZCBfX3NlZWQpOw0KY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xf XykpIHB0c25hbWUgKGludCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgZ3JhbnRw dCAoaW50KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSB1bmxvY2twdCAoaW50KTsN Cg0KDQoNCg0KY2hhciAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9kdG9hX3IgKHN0cnVj dCBfcmVlbnQgKiwgZG91YmxlLCBpbnQsIGludCwgaW50ICosIGludCosIGNoYXIqKik7DQoNCg0K DQoNCg0KDQoNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBfc3lzdGVtX3IgKHN0cnVj dCBfcmVlbnQgKiwgY29uc3QgY2hhciAqKTsNCg0Kdm9pZCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBfX2VwcmludGYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQs IGNvbnN0IGNoYXIgKik7DQojIDIwOSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzDQp9DQojIDI5 ICIuLi9jb21tb24vY21lbW9yeS5oIiAyDQojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAz DQojIDE0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMNCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p Njg2LXBjLWN5Z3dpbi8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzDQojIDE1ICIvdXNyL2luY2x1 ZGUvc3RyaW5nLmgiIDIgMw0KDQoNCg0KDQoNCmV4dGVybiAiQyIgew0KDQp2b2lkICogX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgbWVtY2hyIChjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsN CmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBtZW1jbXAgKGNvbnN0IHZvaWQgKiwgY29u c3Qgdm9pZCAqLCBzaXplX3QpOw0Kdm9pZCAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1l bWNweSAodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7DQp2b2lkICogX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgbWVtbW92ZSAodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7DQp2 b2lkICogX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgbWVtc2V0ICh2b2lkICosIGludCwgc2l6 ZV90KTsNCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cmNhdCAoY2hhciAqLCBj b25zdCBjaGFyICopOw0KY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyY2hyIChj b25zdCBjaGFyICosIGludCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyY21w IChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgc3RyY29sbCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOw0KY2hhciAqX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyY3B5IChjaGFyICosIGNvbnN0IGNoYXIgKik7DQpzaXpl X3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyY3NwbiAoY29uc3QgY2hhciAqLCBjb25z dCBjaGFyICopOw0KY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RyZXJyb3IgKGlu dCk7DQpzaXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RybGVuIChjb25zdCBjaGFy ICopOw0KY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RybmNhdCAoY2hhciAqLCBj b25zdCBjaGFyICosIHNpemVfdCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3Ry bmNtcCAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7DQpjaGFyICpfX2F0dHJp YnV0ZV9fKChfX2NkZWNsX18pKSBzdHJuY3B5IChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90 KTsNCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnBicmsgKGNvbnN0IGNoYXIg KiwgY29uc3QgY2hhciAqKTsNCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnJj aHIgKGNvbnN0IGNoYXIgKiwgaW50KTsNCnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBzdHJzcG4gKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCmNoYXIgKl9fYXR0cmlidXRl X18oKF9fY2RlY2xfXykpIHN0cnN0ciAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOw0KDQoN CmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnRvayAoY2hhciAqLCBjb25zdCBj aGFyICopOw0KDQoNCnNpemVfdCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJ4ZnJtIChj aGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsNCg0KDQpjaGFyICpfX2F0dHJpYnV0ZV9fKChf X2NkZWNsX18pKSBzdHJ0b2tfciAoY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiopOw0KDQpp bnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgYmNtcCAoY29uc3Qgdm9pZCAqLCBjb25zdCB2 b2lkICosIHNpemVfdCk7DQp2b2lkIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIGJjb3B5IChj b25zdCB2b2lkICosIHZvaWQgKiwgc2l6ZV90KTsNCnZvaWQgX19hdHRyaWJ1dGVfXygoX19jZGVj bF9fKSkgYnplcm8gKHZvaWQgKiwgc2l6ZV90KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNs X18pKSBmZnMgKGludCk7DQpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBpbmRleCAo Y29uc3QgY2hhciAqLCBpbnQpOw0Kdm9pZCAqIF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIG1l bWNjcHkgKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBpbnQsIHNpemVfdCk7DQp2b2lkICogX19hdHRy aWJ1dGVfXygoX19jZGVjbF9fKSkgbWVtcGNweSAodm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVf dCk7DQpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSByaW5kZXggKGNvbnN0IGNoYXIg KiwgaW50KTsNCmludCBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJjYXNlY21wIChjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKik7DQpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBzdHJkdXAgKGNvbnN0IGNoYXIgKik7DQpjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18p KSBfc3RyZHVwX3IgKHN0cnVjdCBfcmVlbnQgKiwgY29uc3QgY2hhciAqKTsNCmNoYXIgKl9fYXR0 cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cm5kdXAgKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsNCmNo YXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIF9zdHJuZHVwX3IgKHN0cnVjdCBfcmVlbnQg KiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0KY2hhciAqX19hdHRyaWJ1dGVfXygoX19jZGVjbF9f KSkgc3RyZXJyb3JfciAoaW50LCBjaGFyICosIHNpemVfdCk7DQpzaXplX3QgX19hdHRyaWJ1dGVf XygoX19jZGVjbF9fKSkgc3RybGNhdCAoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7DQpz aXplX3QgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RybGNweSAoY2hhciAqLCBjb25zdCBj aGFyICosIHNpemVfdCk7DQppbnQgX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkgc3RybmNhc2Vj bXAgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOw0Kc2l6ZV90IF9fYXR0cmli dXRlX18oKF9fY2RlY2xfXykpIHN0cm5sZW4gKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsNCmNoYXIg Kl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnNlcCAoY2hhciAqKiwgY29uc3QgY2hhciAq KTsNCmNoYXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cmx3ciAoY2hhciAqKTsNCmNo YXIgKl9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnVwciAoY2hhciAqKTsNCg0KDQpjb25z dCBjaGFyICpfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKSBzdHJzaWduYWwgKGludCBfX3NpZ25v KTsNCg0KaW50IF9fYXR0cmlidXRlX18oKF9fY2RlY2xfXykpIHN0cnRvc2lnbm8gKGNvbnN0IGNo YXIgKl9fbmFtZSk7DQojIDk4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMNCn0NCiMgMzAgIi4u L2NvbW1vbi9jbWVtb3J5LmgiIDINCg0KDQoNCg0KDQoNCg0KZXh0ZXJuICJDIiB2b2lkICoNCnVw cnZfbWFsbG9jKHNpemVfdCBzKTsNCg0KZXh0ZXJuICJDIiB2b2lkICoNCnVwcnZfcmVhbGxvYyh2 b2lkICptZW0sIHNpemVfdCBzaXplKTsNCg0KZXh0ZXJuICJDIiB2b2lkDQp1cHJ2X2ZyZWUodm9p ZCAqbWVtKTsNCg0KDQoNCg0KDQp0eXBlZGVmIHVuaW9uIHsNCiAgICBsb25nIHQxOw0KICAgIGRv dWJsZSB0MjsNCiAgICB2b2lkICp0MzsNCn0gVUFsaWduZWRNZW1vcnk7DQojIDMyICJ1Y29sX2Vs bS5jcHAiIDINCg0KbmFtZXNwYWNlIGljdV8yXzIgew0KDQpzdGF0aWMgdWludDMyX3QgdXBydl91 Y2FfcHJvY2Vzc0NvbnRyYWN0aW9uKENudFRhYmxlICpjb250cmFjdGlvbnMsIFVDQUVsZW1lbnRz ICplbGVtZW50LCB1aW50MzJfdCBleGlzdGluZ0NFLCBVRXJyb3JDb2RlICpzdGF0dXMpOw0KDQpl eHRlcm4gIkMiIHsNCnN0YXRpYyBpbnQzMl90DQpwcmVmaXhMb29rdXBIYXNoKGNvbnN0IFVIYXNo VG9rIGUpIHsNCiAgVUNBRWxlbWVudHMgKmVsZW1lbnQgPSAoVUNBRWxlbWVudHMgKillLnBvaW50 ZXI7DQogIFVDaGFyIGJ1ZlsyNTZdOw0KICBVSGFzaFRvayBrZXk7DQogIGtleS5wb2ludGVyID0g YnVmOw0KICA6OiBtZW1jcHkoYnVmLCBlbGVtZW50LT5jUG9pbnRzLCBlbGVtZW50LT5jU2l6ZSpz aXplb2YoVUNoYXIpKTsNCiAgYnVmW2VsZW1lbnQtPmNTaXplXSA9IDA7DQoNCg0KICByZXR1cm4g dWhhc2hfaGFzaFVDaGFyc18yXzIoa2V5KTsNCn0NCg0Kc3RhdGljIGludDhfdA0KcHJlZml4TG9v a3VwQ29tcChjb25zdCBVSGFzaFRvayBlMSwgY29uc3QgVUhhc2hUb2sgZTIpIHsNCiAgVUNBRWxl bWVudHMgKmVsZW1lbnQxID0gKFVDQUVsZW1lbnRzICopZTEucG9pbnRlcjsNCiAgVUNBRWxlbWVu dHMgKmVsZW1lbnQyID0gKFVDQUVsZW1lbnRzICopZTIucG9pbnRlcjsNCg0KICBVQ2hhciBidWYx WzI1Nl07DQogIFVIYXNoVG9rIGtleTE7DQogIGtleTEucG9pbnRlciA9IGJ1ZjE7DQogIDo6IG1l bWNweShidWYxLCBlbGVtZW50MS0+Y1BvaW50cywgZWxlbWVudDEtPmNTaXplKnNpemVvZihVQ2hh cikpOw0KICBidWYxW2VsZW1lbnQxLT5jU2l6ZV0gPSAwOw0KDQogIFVDaGFyIGJ1ZjJbMjU2XTsN CiAgVUhhc2hUb2sga2V5MjsNCiAga2V5Mi5wb2ludGVyID0gYnVmMjsNCiAgOjogbWVtY3B5KGJ1 ZjIsIGVsZW1lbnQyLT5jUG9pbnRzLCBlbGVtZW50Mi0+Y1NpemUqc2l6ZW9mKFVDaGFyKSk7DQog IGJ1ZjJbZWxlbWVudDItPmNTaXplXSA9IDA7DQoNCiAgcmV0dXJuIHVoYXNoX2NvbXBhcmVVQ2hh cnNfMl8yKGtleTEsIGtleTIpOw0KfQ0KfQ0KDQpzdGF0aWMgaW50MzJfdCB1cHJ2X3VjYV9hZGRF eHBhbnNpb24oRXhwYW5zaW9uVGFibGUgKmV4cGFuc2lvbnMsIHVpbnQzMl90IHZhbHVlLCBVRXJy b3JDb2RlICpzdGF0dXMpIHsNCiAgICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIHsNCiAgICAgICAg cmV0dXJuIDA7DQogICAgfQ0KICAgIGlmKGV4cGFuc2lvbnMtPkNFcyA9PSBfX251bGwpIHsNCiAg ICAgICAgZXhwYW5zaW9ucy0+Q0VzID0gKHVpbnQzMl90ICopdXBydl9tYWxsb2MoMTAyNCpzaXpl b2YodWludDMyX3QpKTsNCg0KICAgICAgICBpZiAoZXhwYW5zaW9ucy0+Q0VzID09IF9fbnVsbCkg ew0KICAgICAgICAgICAgKnN0YXR1cyA9IFVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1I7DQogICAg ICAgICAgICByZXR1cm4gMDsNCiAgICAgICAgfQ0KICAgICAgICBleHBhbnNpb25zLT5zaXplID0g MTAyNDsNCiAgICAgICAgZXhwYW5zaW9ucy0+cG9zaXRpb24gPSAwOw0KICAgIH0NCg0KICAgIGlm KGV4cGFuc2lvbnMtPnBvc2l0aW9uID09IGV4cGFuc2lvbnMtPnNpemUpIHsNCiAgICAgICAgdWlu dDMyX3QgKm5ld0RhdGEgPSAodWludDMyX3QgKil1cHJ2X3JlYWxsb2MoZXhwYW5zaW9ucy0+Q0Vz LCAyKmV4cGFuc2lvbnMtPnNpemUqc2l6ZW9mKHVpbnQzMl90KSk7DQogICAgICAgIGlmKG5ld0Rh dGEgPT0gX19udWxsKSB7DQoNCg0KDQogICAgICAgICAgICAqc3RhdHVzID0gVV9NRU1PUllfQUxM T0NBVElPTl9FUlJPUjsNCiAgICAgICAgICAgIHJldHVybiAtMTsNCiAgICAgICAgfQ0KICAgICAg ICBleHBhbnNpb25zLT5DRXMgPSBuZXdEYXRhOw0KICAgICAgICBleHBhbnNpb25zLT5zaXplICo9 IDI7DQogICAgfQ0KDQogICAgZXhwYW5zaW9ucy0+Q0VzW2V4cGFuc2lvbnMtPnBvc2l0aW9uXSA9 IHZhbHVlOw0KICAgIHJldHVybihleHBhbnNpb25zLT5wb3NpdGlvbisrKTsNCn0NCg0KZXh0ZXJu ICJDIiB0ZW1wVUNBVGFibGUqDQp1cHJ2X3VjYV9pbml0VGVtcFRhYmxlXzJfMihVQ0FUYWJsZUhl YWRlciAqaW1hZ2UsIFVDb2xPcHRpb25TZXQgKm9wdHMsIGNvbnN0IFVDb2xsYXRvciAqVUNBLCBV Q29sQ0VUYWdzIGluaXRUYWcsIFVFcnJvckNvZGUgKnN0YXR1cykgew0KICB0ZW1wVUNBVGFibGUg KnQgPSAodGVtcFVDQVRhYmxlICopdXBydl9tYWxsb2Moc2l6ZW9mKHRlbXBVQ0FUYWJsZSkpOw0K DQogIGlmICh0ID09IF9fbnVsbCkgew0KICAgICAgKnN0YXR1cyA9IFVfTUVNT1JZX0FMTE9DQVRJ T05fRVJST1I7DQogICAgICByZXR1cm4gX19udWxsOw0KICB9DQogIE1heEV4cGFuc2lvblRhYmxl ICptYXhldCA9IChNYXhFeHBhbnNpb25UYWJsZSAqKXVwcnZfbWFsbG9jKA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKE1heEV4cGFuc2lv blRhYmxlKSk7DQoNCiAgaWYgKG1heGV0ID09IF9fbnVsbCkgew0KICAgICAgKnN0YXR1cyA9IFVf TUVNT1JZX0FMTE9DQVRJT05fRVJST1I7DQogICAgICB1cHJ2X2ZyZWUodCk7DQogICAgICByZXR1 cm4gX19udWxsOw0KICB9DQogIE1heEphbW9FeHBhbnNpb25UYWJsZSAqbWF4amV0ID0gKE1heEph bW9FeHBhbnNpb25UYWJsZSAqKXVwcnZfbWFsbG9jKA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoTWF4SmFtb0V4cGFuc2lvblRhYmxlKSk7DQoN CiAgaWYgKG1heGpldCA9PSBfX251bGwpIHsNCiAgICAgICpzdGF0dXMgPSBVX01FTU9SWV9BTExP Q0FUSU9OX0VSUk9SOw0KICAgICAgdXBydl9mcmVlKHQpOw0KICAgICAgdXBydl9mcmVlKG1heGV0 KTsNCiAgICAgIHJldHVybiBfX251bGw7DQogIH0NCiAgdC0+aW1hZ2UgPSBpbWFnZTsNCiAgdC0+ b3B0aW9ucyA9IG9wdHM7DQoNCiAgdC0+VUNBID0gVUNBOw0KICB0LT5leHBhbnNpb25zID0gKEV4 cGFuc2lvblRhYmxlICopdXBydl9tYWxsb2Moc2l6ZW9mKEV4cGFuc2lvblRhYmxlKSk7DQoNCiAg aWYgKHQtPmV4cGFuc2lvbnMgPT0gX19udWxsKSB7DQogICAgICAqc3RhdHVzID0gVV9NRU1PUllf QUxMT0NBVElPTl9FUlJPUjsNCiAgICAgIHVwcnZfZnJlZSh0KTsNCiAgICAgIHVwcnZfZnJlZSht YXhldCk7DQogICAgICB1cHJ2X2ZyZWUobWF4amV0KTsNCiAgICAgIHJldHVybiBfX251bGw7DQog IH0NCiAgOjogbWVtc2V0KHQtPmV4cGFuc2lvbnMsIDAsIHNpemVvZihFeHBhbnNpb25UYWJsZSkp Ow0KDQogIHQtPm1hcHBpbmcgPSB1dHJpZV9vcGVuXzJfMihfX251bGwsIF9fbnVsbCwgMHgxMDAw MDAsIDB4RjAwMDAwMDAgfCAoaW5pdFRhZzw8MjQpLCAxKTsNCiAgdC0+cHJlZml4TG9va3VwID0g dWhhc2hfb3Blbl8yXzIocHJlZml4TG9va3VwSGFzaCwgcHJlZml4TG9va3VwQ29tcCwgc3RhdHVz KTsNCiAgdWhhc2hfc2V0VmFsdWVEZWxldGVyXzJfMih0LT5wcmVmaXhMb29rdXAsIHVoYXNoX2Zy ZWVCbG9ja18yXzIpOw0KDQogIHQtPmNvbnRyYWN0aW9ucyA9IHVwcnZfY250dGFiX29wZW5fMl8y KHQtPm1hcHBpbmcsIHN0YXR1cyk7DQoNCg0KICB0LT5tYXhFeHBhbnNpb25zID0gbWF4ZXQ7DQog IGlmIChVQ0EgIT0gX19udWxsKSB7DQoNCiAgICBtYXhldC0+c2l6ZSA9IChVQ0EtPmxhc3RFbmRF eHBhbnNpb25DRSAtIFVDQS0+ZW5kRXhwYW5zaW9uQ0UpDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICsgMjsNCiAgICBtYXhldC0+cG9zaXRpb24gPSBtYXhldC0+c2l6ZSAtIDE7DQogICAg bWF4ZXQtPmVuZEV4cGFuc2lvbkNFID0NCiAgICAgICAgICAgICAgICAgICAgICAodWludDMyX3Qg Kil1cHJ2X21hbGxvYyhzaXplb2YodWludDMyX3QpICogbWF4ZXQtPnNpemUpOw0KDQogICAgaWYg KG1heGV0LT5lbmRFeHBhbnNpb25DRSA9PSBfX251bGwpIHsNCiAgICAgICAgKnN0YXR1cyA9IFVf TUVNT1JZX0FMTE9DQVRJT05fRVJST1I7DQogICAgICAgIHJldHVybiBfX251bGw7DQogICAgfQ0K ICAgIG1heGV0LT5leHBhbnNpb25DRVNpemUgPQ0KICAgICAgICAgICAgICAgICAgICAgICAgKHVp bnQ4X3QgKil1cHJ2X21hbGxvYyhzaXplb2YodWludDhfdCkgKiBtYXhldC0+c2l6ZSk7DQoNCiAg ICBpZiAobWF4ZXQtPmV4cGFuc2lvbkNFU2l6ZSA9PSBfX251bGwpIHsNCiAgICAgICAgKnN0YXR1 cyA9IFVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1I7DQogICAgICAgIHVwcnZfZnJlZShtYXhldC0+ ZW5kRXhwYW5zaW9uQ0UpOw0KICAgICAgICByZXR1cm4gX19udWxsOw0KICAgIH0NCg0KICAgICoo bWF4ZXQtPmVuZEV4cGFuc2lvbkNFKSA9IDA7DQogICAgKihtYXhldC0+ZXhwYW5zaW9uQ0VTaXpl KSA9IDA7DQogICAgOjogbWVtY3B5KG1heGV0LT5lbmRFeHBhbnNpb25DRSArIDEsIFVDQS0+ZW5k RXhwYW5zaW9uQ0UsIHNpemVvZih1aW50MzJfdCkgKiAobWF4ZXQtPnNpemUgLSAxKSk7DQoNCiAg ICA6OiBtZW1jcHkobWF4ZXQtPmV4cGFuc2lvbkNFU2l6ZSArIDEsIFVDQS0+ZXhwYW5zaW9uQ0VT aXplLCBzaXplb2YodWludDhfdCkgKiAobWF4ZXQtPnNpemUgLSAxKSk7DQoNCiAgfQ0KICBlbHNl IHsNCiAgICBtYXhldC0+c2l6ZSA9IDA7DQogIH0NCiAgdC0+bWF4SmFtb0V4cGFuc2lvbnMgPSBt YXhqZXQ7DQogIG1heGpldC0+ZW5kRXhwYW5zaW9uQ0UgPSBfX251bGw7DQogIG1heGpldC0+aXNW ID0gX19udWxsOw0KICBtYXhqZXQtPnNpemUgPSAwOw0KICBtYXhqZXQtPnBvc2l0aW9uID0gMDsN CiAgbWF4amV0LT5tYXhMU2l6ZSA9IDE7DQogIG1heGpldC0+bWF4VlNpemUgPSAxOw0KICBtYXhq ZXQtPm1heFRTaXplID0gMTsNCg0KICB0LT51bnNhZmVDUCA9ICh1aW50OF90ICopdXBydl9tYWxs b2MoMTA1Nik7DQoNCiAgaWYgKHQtPnVuc2FmZUNQID09IF9fbnVsbCkgew0KICAgICAgKnN0YXR1 cyA9IFVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1I7DQogICAgICByZXR1cm4gX19udWxsOw0KICB9 DQogIHQtPmNvbnRyRW5kQ1AgPSAodWludDhfdCAqKXVwcnZfbWFsbG9jKDEwNTYpOw0KDQogIGlm ICh0LT5jb250ckVuZENQID09IF9fbnVsbCkgew0KICAgICAgKnN0YXR1cyA9IFVfTUVNT1JZX0FM TE9DQVRJT05fRVJST1I7DQogICAgICB1cHJ2X2ZyZWUodC0+dW5zYWZlQ1ApOw0KICAgICAgcmV0 dXJuIF9fbnVsbDsNCiAgfQ0KICA6OiBtZW1zZXQodC0+dW5zYWZlQ1AsIDAsIDEwNTYpOw0KICA6 OiBtZW1zZXQodC0+Y29udHJFbmRDUCwgMCwgMTA1Nik7DQpyZXR1cm4gdDsNCn0NCg0KZXh0ZXJu ICJDIiB0ZW1wVUNBVGFibGUqDQp1cHJ2X3VjYV9jbG9uZVRlbXBUYWJsZV8yXzIodGVtcFVDQVRh YmxlICp0LCBVRXJyb3JDb2RlICpzdGF0dXMpIHsNCiAgaWYoVV9GQUlMVVJFKCpzdGF0dXMpKSB7 DQogICAgcmV0dXJuIF9fbnVsbDsNCiAgfQ0KDQogIHRlbXBVQ0FUYWJsZSAqciA9ICh0ZW1wVUNB VGFibGUgKil1cHJ2X21hbGxvYyhzaXplb2YodGVtcFVDQVRhYmxlKSk7DQoNCiAgaWYgKHIgPT0g X19udWxsKSB7DQogICAgKnN0YXR1cyA9IFVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1I7DQogICAg cmV0dXJuIF9fbnVsbDsNCiAgfQ0KICA6OiBtZW1zZXQociwgMCwgc2l6ZW9mKHRlbXBVQ0FUYWJs ZSkpOw0KDQoNCiAgaWYodC0+bWFwcGluZyAhPSBfX251bGwpIHsNCg0KICAgIHItPm1hcHBpbmcg PSB1dHJpZV9jbG9uZV8yXzIoX19udWxsLCB0LT5tYXBwaW5nLCBfX251bGwsIDApOw0KICB9DQoN Cg0KDQogIHItPnByZWZpeExvb2t1cCA9IF9fbnVsbDsNCg0KDQogIGlmKHQtPmV4cGFuc2lvbnMg IT0gX19udWxsKSB7DQogICAgci0+ZXhwYW5zaW9ucyA9IChFeHBhbnNpb25UYWJsZSAqKXVwcnZf bWFsbG9jKHNpemVvZihFeHBhbnNpb25UYWJsZSkpOw0KDQogICAgaWYgKHItPmV4cGFuc2lvbnMg PT0gX19udWxsKSB7DQogICAgICAgICpzdGF0dXMgPSBVX01FTU9SWV9BTExPQ0FUSU9OX0VSUk9S Ow0KICAgICAgICByZXR1cm4gX19udWxsOw0KICAgIH0NCiAgICByLT5leHBhbnNpb25zLT5wb3Np dGlvbiA9IHQtPmV4cGFuc2lvbnMtPnBvc2l0aW9uOw0KICAgIHItPmV4cGFuc2lvbnMtPnNpemUg PSB0LT5leHBhbnNpb25zLT5zaXplOw0KICAgIGlmKHQtPmV4cGFuc2lvbnMtPkNFcyAhPSBfX251 bGwpIHsNCiAgICAgIHItPmV4cGFuc2lvbnMtPkNFcyA9ICh1aW50MzJfdCAqKXVwcnZfbWFsbG9j KHNpemVvZih1aW50MzJfdCkqdC0+ZXhwYW5zaW9ucy0+c2l6ZSk7DQoNCiAgICAgIGlmIChyLT5l eHBhbnNpb25zLT5DRXMgPT0gX19udWxsKSB7DQogICAgICAgICAgKnN0YXR1cyA9IFVfTUVNT1JZ X0FMTE9DQVRJT05fRVJST1I7DQogICAgICAgICAgcmV0dXJuIF9fbnVsbDsNCiAgICAgIH0NCiAg ICAgIDo6IG1lbWNweShyLT5leHBhbnNpb25zLT5DRXMsIHQtPmV4cGFuc2lvbnMtPkNFcywgc2l6 ZW9mKHVpbnQzMl90KSp0LT5leHBhbnNpb25zLT5zaXplKTsNCiAgICB9IGVsc2Ugew0KICAgICAg ci0+ZXhwYW5zaW9ucy0+Q0VzID0gX19udWxsOw0KICAgIH0NCiAgfQ0KDQogIGlmKHQtPmNvbnRy YWN0aW9ucyAhPSBfX251bGwpIHsNCiAgICByLT5jb250cmFjdGlvbnMgPSB1cHJ2X2NudHRhYl9j bG9uZV8yXzIodC0+Y29udHJhY3Rpb25zLCBzdGF0dXMpOw0KICAgIHItPmNvbnRyYWN0aW9ucy0+ bWFwcGluZyA9IHItPm1hcHBpbmc7DQogIH0NCg0KICBpZih0LT5tYXhFeHBhbnNpb25zICE9IF9f bnVsbCkgew0KICAgIHItPm1heEV4cGFuc2lvbnMgPSAoTWF4RXhwYW5zaW9uVGFibGUgKil1cHJ2 X21hbGxvYyhzaXplb2YoTWF4RXhwYW5zaW9uVGFibGUpKTsNCg0KICAgIGlmIChyLT5tYXhFeHBh bnNpb25zID09IF9fbnVsbCkgew0KICAgICAgICAqc3RhdHVzID0gVV9NRU1PUllfQUxMT0NBVElP Tl9FUlJPUjsNCiAgICAgICAgcmV0dXJuIF9fbnVsbDsNCiAgICB9DQogICAgci0+bWF4RXhwYW5z aW9ucy0+c2l6ZSA9IHQtPm1heEV4cGFuc2lvbnMtPnNpemU7DQogICAgci0+bWF4RXhwYW5zaW9u cy0+cG9zaXRpb24gPSB0LT5tYXhFeHBhbnNpb25zLT5wb3NpdGlvbjsNCiAgICBpZih0LT5tYXhF eHBhbnNpb25zLT5lbmRFeHBhbnNpb25DRSAhPSBfX251bGwpIHsNCiAgICAgIHItPm1heEV4cGFu c2lvbnMtPmVuZEV4cGFuc2lvbkNFID0gKHVpbnQzMl90ICopdXBydl9tYWxsb2Moc2l6ZW9mKHVp bnQzMl90KSp0LT5tYXhFeHBhbnNpb25zLT5zaXplKTsNCg0KICAgICAgaWYgKHItPm1heEV4cGFu c2lvbnMtPmVuZEV4cGFuc2lvbkNFID09IF9fbnVsbCkgew0KICAgICAgICAgICpzdGF0dXMgPSBV X01FTU9SWV9BTExPQ0FUSU9OX0VSUk9SOw0KICAgICAgICAgIHJldHVybiBfX251bGw7DQogICAg ICB9DQogICAgICA6OiBtZW1jcHkoci0+bWF4RXhwYW5zaW9ucy0+ZW5kRXhwYW5zaW9uQ0UsIHQt Pm1heEV4cGFuc2lvbnMtPmVuZEV4cGFuc2lvbkNFLCB0LT5tYXhFeHBhbnNpb25zLT5zaXplKnNp emVvZih1aW50MzJfdCkpOw0KICAgIH0gZWxzZSB7DQogICAgICByLT5tYXhFeHBhbnNpb25zLT5l bmRFeHBhbnNpb25DRSA9IF9fbnVsbDsNCiAgICB9DQogICAgaWYodC0+bWF4RXhwYW5zaW9ucy0+ ZXhwYW5zaW9uQ0VTaXplICE9IF9fbnVsbCkgew0KICAgICAgci0+bWF4RXhwYW5zaW9ucy0+ZXhw YW5zaW9uQ0VTaXplID0gKHVpbnQ4X3QgKil1cHJ2X21hbGxvYyhzaXplb2YodWludDhfdCkqdC0+ bWF4RXhwYW5zaW9ucy0+c2l6ZSk7DQoNCiAgICAgIGlmIChyLT5tYXhFeHBhbnNpb25zLT5leHBh bnNpb25DRVNpemUgPT0gX19udWxsKSB7DQogICAgICAgICAgKnN0YXR1cyA9IFVfTUVNT1JZX0FM TE9DQVRJT05fRVJST1I7DQogICAgICAgICAgcmV0dXJuIF9fbnVsbDsNCiAgICAgIH0NCiAgICAg IDo6IG1lbWNweShyLT5tYXhFeHBhbnNpb25zLT5leHBhbnNpb25DRVNpemUsIHQtPm1heEV4cGFu c2lvbnMtPmV4cGFuc2lvbkNFU2l6ZSwgdC0+bWF4RXhwYW5zaW9ucy0+c2l6ZSpzaXplb2YodWlu dDhfdCkpOw0KICAgIH0gZWxzZSB7DQogICAgICByLT5tYXhFeHBhbnNpb25zLT5leHBhbnNpb25D RVNpemUgPSBfX251bGw7DQogICAgfQ0KICB9DQoNCiAgaWYodC0+bWF4SmFtb0V4cGFuc2lvbnMg IT0gX19udWxsKSB7DQogICAgci0+bWF4SmFtb0V4cGFuc2lvbnMgPSAoTWF4SmFtb0V4cGFuc2lv blRhYmxlICopdXBydl9tYWxsb2Moc2l6ZW9mKE1heEphbW9FeHBhbnNpb25UYWJsZSkpOw0KDQog ICAgaWYgKHItPm1heEphbW9FeHBhbnNpb25zID09IF9fbnVsbCkgew0KICAgICAgICAqc3RhdHVz ID0gVV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUjsNCiAgICAgICAgcmV0dXJuIF9fbnVsbDsNCiAg ICB9DQogICAgci0+bWF4SmFtb0V4cGFuc2lvbnMtPnNpemUgPSB0LT5tYXhKYW1vRXhwYW5zaW9u cy0+c2l6ZTsNCiAgICByLT5tYXhKYW1vRXhwYW5zaW9ucy0+cG9zaXRpb24gPSB0LT5tYXhKYW1v RXhwYW5zaW9ucy0+cG9zaXRpb247DQogICAgci0+bWF4SmFtb0V4cGFuc2lvbnMtPm1heExTaXpl ID0gdC0+bWF4SmFtb0V4cGFuc2lvbnMtPm1heExTaXplOw0KICAgIHItPm1heEphbW9FeHBhbnNp b25zLT5tYXhWU2l6ZSA9IHQtPm1heEphbW9FeHBhbnNpb25zLT5tYXhWU2l6ZTsNCiAgICByLT5t YXhKYW1vRXhwYW5zaW9ucy0+bWF4VFNpemUgPSB0LT5tYXhKYW1vRXhwYW5zaW9ucy0+bWF4VFNp emU7DQogICAgaWYodC0+bWF4SmFtb0V4cGFuc2lvbnMtPnNpemUgIT0gMCkgew0KICAgICAgci0+ bWF4SmFtb0V4cGFuc2lvbnMtPmVuZEV4cGFuc2lvbkNFID0gKHVpbnQzMl90ICopdXBydl9tYWxs b2Moc2l6ZW9mKHVpbnQzMl90KSp0LT5tYXhKYW1vRXhwYW5zaW9ucy0+c2l6ZSk7DQoNCiAgICAg IGlmIChyLT5tYXhKYW1vRXhwYW5zaW9ucy0+ZW5kRXhwYW5zaW9uQ0UgPT0gX19udWxsKSB7DQog ICAgICAgICAgKnN0YXR1cyA9IFVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1I7DQogICAgICAgICAg cmV0dXJuIF9fbnVsbDsNCiAgICAgIH0NCiAgICAgIDo6IG1lbWNweShyLT5tYXhKYW1vRXhwYW5z aW9ucy0+ZW5kRXhwYW5zaW9uQ0UsIHQtPm1heEphbW9FeHBhbnNpb25zLT5lbmRFeHBhbnNpb25D RSwgdC0+bWF4SmFtb0V4cGFuc2lvbnMtPnNpemUqc2l6ZW9mKHVpbnQzMl90KSk7DQogICAgICBy LT5tYXhKYW1vRXhwYW5zaW9ucy0+aXNWID0gKFVCb29sICopdXBydl9tYWxsb2Moc2l6ZW9mKFVC b29sKSp0LT5tYXhKYW1vRXhwYW5zaW9ucy0+c2l6ZSk7DQoNCiAgICAgIGlmIChyLT5tYXhKYW1v RXhwYW5zaW9ucy0+aXNWID09IF9fbnVsbCkgew0KICAgICAgICAgICpzdGF0dXMgPSBVX01FTU9S WV9BTExPQ0FUSU9OX0VSUk9SOw0KICAgICAgICAgIHJldHVybiBfX251bGw7DQogICAgICB9DQog ICAgICA6OiBtZW1jcHkoci0+bWF4SmFtb0V4cGFuc2lvbnMtPmlzViwgdC0+bWF4SmFtb0V4cGFu c2lvbnMtPmlzViwgdC0+bWF4SmFtb0V4cGFuc2lvbnMtPnNpemUqc2l6ZW9mKFVCb29sKSk7DQog ICAgfSBlbHNlIHsNCiAgICAgIHItPm1heEphbW9FeHBhbnNpb25zLT5lbmRFeHBhbnNpb25DRSA9 IF9fbnVsbDsNCiAgICAgIHItPm1heEphbW9FeHBhbnNpb25zLT5pc1YgPSBfX251bGw7DQogICAg fQ0KICB9DQoNCiAgaWYodC0+dW5zYWZlQ1AgIT0gX19udWxsKSB7DQogICAgci0+dW5zYWZlQ1Ag PSAodWludDhfdCAqKXVwcnZfbWFsbG9jKDEwNTYpOw0KDQogICAgaWYgKHItPnVuc2FmZUNQID09 IF9fbnVsbCkgew0KICAgICAgICAqc3RhdHVzID0gVV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUjsN CiAgICAgICAgcmV0dXJuIF9fbnVsbDsNCiAgICB9DQogICAgOjogbWVtY3B5KHItPnVuc2FmZUNQ LCB0LT51bnNhZmVDUCwgMTA1Nik7DQogIH0NCg0KICBpZih0LT5jb250ckVuZENQICE9IF9fbnVs bCkgew0KICAgIHItPmNvbnRyRW5kQ1AgPSAodWludDhfdCAqKXVwcnZfbWFsbG9jKDEwNTYpOw0K DQogICAgaWYgKHItPmNvbnRyRW5kQ1AgPT0gX19udWxsKSB7DQogICAgICAgICpzdGF0dXMgPSBV X01FTU9SWV9BTExPQ0FUSU9OX0VSUk9SOw0KICAgICAgICByZXR1cm4gX19udWxsOw0KICAgIH0N CiAgICA6OiBtZW1jcHkoci0+Y29udHJFbmRDUCwgdC0+Y29udHJFbmRDUCwgMTA1Nik7DQogIH0N Cg0KICByLT5VQ0EgPSB0LT5VQ0E7DQogIHItPmltYWdlID0gdC0+aW1hZ2U7DQogIHItPm9wdGlv bnMgPSB0LT5vcHRpb25zOw0KDQogIHJldHVybiByOw0KfQ0KDQoNCmV4dGVybiAiQyIgdm9pZA0K dXBydl91Y2FfY2xvc2VUZW1wVGFibGVfMl8yKHRlbXBVQ0FUYWJsZSAqdCkgew0KICBpZih0ICE9 IF9fbnVsbCkgew0KICAgIHVwcnZfZnJlZSh0LT5leHBhbnNpb25zLT5DRXMpOw0KICAgIHVwcnZf ZnJlZSh0LT5leHBhbnNpb25zKTsNCiAgICBpZih0LT5jb250cmFjdGlvbnMgIT0gX19udWxsKSB7 DQogICAgICB1cHJ2X2NudHRhYl9jbG9zZV8yXzIodC0+Y29udHJhY3Rpb25zKTsNCiAgICB9DQoN CiAgICB1dHJpZV9jbG9zZV8yXzIodC0+bWFwcGluZyk7DQoNCiAgICBpZih0LT5wcmVmaXhMb29r dXAgIT0gX19udWxsKSB7DQogICAgICB1aGFzaF9jbG9zZV8yXzIodC0+cHJlZml4TG9va3VwKTsN CiAgICB9DQoNCiAgICB1cHJ2X2ZyZWUodC0+bWF4RXhwYW5zaW9ucy0+ZW5kRXhwYW5zaW9uQ0Up Ow0KICAgIHVwcnZfZnJlZSh0LT5tYXhFeHBhbnNpb25zLT5leHBhbnNpb25DRVNpemUpOw0KICAg IHVwcnZfZnJlZSh0LT5tYXhFeHBhbnNpb25zKTsNCg0KICAgIGlmICh0LT5tYXhKYW1vRXhwYW5z aW9ucy0+c2l6ZSA+IDApIHsNCiAgICAgIHVwcnZfZnJlZSh0LT5tYXhKYW1vRXhwYW5zaW9ucy0+ ZW5kRXhwYW5zaW9uQ0UpOw0KICAgICAgdXBydl9mcmVlKHQtPm1heEphbW9FeHBhbnNpb25zLT5p c1YpOw0KICAgIH0NCiAgICB1cHJ2X2ZyZWUodC0+bWF4SmFtb0V4cGFuc2lvbnMpOw0KDQogICAg dXBydl9mcmVlKHQtPnVuc2FmZUNQKTsNCiAgICB1cHJ2X2ZyZWUodC0+Y29udHJFbmRDUCk7DQoN CiAgICB1cHJ2X2ZyZWUodCk7DQogIH0NCn0NCiMgMzk4ICJ1Y29sX2VsbS5jcHAiDQppbnQgdXBy dl91Y2Ffc2V0TWF4RXhwYW5zaW9uKHVpbnQzMl90IGVuZGV4cGFuc2lvbiwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDhfdCBleHBhbnNpb25zaXplLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBNYXhFeHBhbnNpb25UYWJsZSAqbWF4ZXhwYW5zaW9uLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBVRXJyb3JDb2RlICpzdGF0dXMpDQp7DQogIGlmIChtYXhleHBh bnNpb24tPnNpemUgPT0gMCkgew0KDQogICAgbWF4ZXhwYW5zaW9uLT5lbmRFeHBhbnNpb25DRSA9 DQogICAgICAgICAgICAgICAodWludDMyX3QgKil1cHJ2X21hbGxvYygxMDI0ICogc2l6ZW9mKGlu dDMyX3QpKTsNCg0KICAgIGlmIChtYXhleHBhbnNpb24tPmVuZEV4cGFuc2lvbkNFID09IF9fbnVs bCkgew0KICAgICAgICAqc3RhdHVzID0gVV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUjsNCiAgICAg ICAgcmV0dXJuIDA7DQogICAgfQ0KICAgICoobWF4ZXhwYW5zaW9uLT5lbmRFeHBhbnNpb25DRSkg PSAwOw0KICAgIG1heGV4cGFuc2lvbi0+ZXhwYW5zaW9uQ0VTaXplID0NCiAgICAgICAgICAgICAg ICh1aW50OF90ICopdXBydl9tYWxsb2MoMTAyNCAqIHNpemVvZih1aW50OF90KSk7DQogICAgICAg ICAgICAgICAgICAgICAgIDsNCiAgICBpZiAobWF4ZXhwYW5zaW9uLT5leHBhbnNpb25DRVNpemUg PT0gX19udWxsKSB7DQogICAgICAgICpzdGF0dXMgPSBVX01FTU9SWV9BTExPQ0FUSU9OX0VSUk9S Ow0KICAgICAgICByZXR1cm4gMDsNCiAgICB9DQogICAgKihtYXhleHBhbnNpb24tPmV4cGFuc2lv bkNFU2l6ZSkgPSAwOw0KICAgIG1heGV4cGFuc2lvbi0+c2l6ZSA9IDEwMjQ7DQogICAgbWF4ZXhw YW5zaW9uLT5wb3NpdGlvbiA9IDA7DQogIH0NCg0KICBpZiAobWF4ZXhwYW5zaW9uLT5wb3NpdGlv biArIDEgPT0gbWF4ZXhwYW5zaW9uLT5zaXplKSB7DQogICAgdWludDMyX3QgKm5ld2VlY2UgPSAo dWludDMyX3QgKil1cHJ2X3JlYWxsb2MobWF4ZXhwYW5zaW9uLT5lbmRFeHBhbnNpb25DRSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAqIG1heGV4cGFuc2lvbi0+c2l6ZSAq IHNpemVvZih1aW50MzJfdCkpOw0KICAgIHVpbnQ4X3QgKm5ld2VjZXMgPSAodWludDhfdCAqKXVw cnZfcmVhbGxvYyhtYXhleHBhbnNpb24tPmV4cGFuc2lvbkNFU2l6ZSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDIgKiBtYXhleHBhbnNpb24tPnNpemUgKiBzaXplb2YodWlu dDhfdCkpOw0KICAgIGlmIChuZXdlZWNlID09IF9fbnVsbCB8fCBuZXdlY2VzID09IF9fbnVsbCkg ew0KDQoNCg0KICAgICAgKnN0YXR1cyA9IFVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1I7DQogICAg ICByZXR1cm4gLTE7DQogICAgfQ0KICAgIG1heGV4cGFuc2lvbi0+ZW5kRXhwYW5zaW9uQ0UgPSBu ZXdlZWNlOw0KICAgIG1heGV4cGFuc2lvbi0+ZXhwYW5zaW9uQ0VTaXplID0gbmV3ZWNlczsNCiAg ICBtYXhleHBhbnNpb24tPnNpemUgKj0gMjsNCiAgfQ0KDQogIHVpbnQzMl90ICpwZW5kZXhwYW5z aW9uY2UgPSBtYXhleHBhbnNpb24tPmVuZEV4cGFuc2lvbkNFOw0KICB1aW50OF90ICpwZXhwYW5z aW9uc2l6ZSA9IG1heGV4cGFuc2lvbi0+ZXhwYW5zaW9uQ0VTaXplOw0KICBpbnQgcG9zID0gbWF4 ZXhwYW5zaW9uLT5wb3NpdGlvbjsNCg0KICB1aW50MzJfdCAqc3RhcnQgPSBwZW5kZXhwYW5zaW9u Y2U7DQogIHVpbnQzMl90ICpsaW1pdCA9IHBlbmRleHBhbnNpb25jZSArIHBvczsNCg0KDQoNCiAg dWludDMyX3QgKm1pZDsNCiAgaW50IHJlc3VsdCA9IC0xOw0KICB3aGlsZSAoc3RhcnQgPCBsaW1p dCAtIDEpIHsNCiAgICBtaWQgPSBzdGFydCArICgobGltaXQgLSBzdGFydCkgPj4gMSk7DQogICAg aWYgKGVuZGV4cGFuc2lvbiA8PSAqbWlkKSB7DQogICAgICBsaW1pdCA9IG1pZDsNCiAgICB9DQog ICAgZWxzZSB7DQogICAgICBzdGFydCA9IG1pZDsNCiAgICB9DQogIH0NCg0KICBpZiAoKnN0YXJ0 ID09IGVuZGV4cGFuc2lvbikgew0KICAgIHJlc3VsdCA9IHN0YXJ0IC0gcGVuZGV4cGFuc2lvbmNl Ow0KICB9DQogIGVsc2UNCiAgICBpZiAoKmxpbWl0ID09IGVuZGV4cGFuc2lvbikgew0KICAgICAg cmVzdWx0ID0gbGltaXQgLSBwZW5kZXhwYW5zaW9uY2U7DQogICAgfQ0KDQogIGlmIChyZXN1bHQg PiAtMSkgew0KDQoNCiAgICB1aW50OF90ICpjdXJyZW50c2l6ZSA9IHBleHBhbnNpb25zaXplICsg cmVzdWx0Ow0KICAgIGlmICgqY3VycmVudHNpemUgPCBleHBhbnNpb25zaXplKSB7DQogICAgICAq Y3VycmVudHNpemUgPSBleHBhbnNpb25zaXplOw0KICAgIH0NCiAgfQ0KICBlbHNlIHsNCg0KDQoN CiAgICBpbnQgc2hpZnRzaXplID0gKHBlbmRleHBhbnNpb25jZSArIHBvcykgLSBzdGFydDsNCiAg ICB1aW50MzJfdCAqc2hpZnRwb3MgPSBzdGFydCArIDE7DQogICAgdWludDhfdCAqc2l6ZXNoaWZ0 cG9zID0gcGV4cGFuc2lvbnNpemUgKyAoc2hpZnRwb3MgLSBwZW5kZXhwYW5zaW9uY2UpOw0KDQoN CiAgICBpZiAoc2hpZnRzaXplID09IDAgfHwgKihwZW5kZXhwYW5zaW9uY2UgKyBwb3MpIDwgZW5k ZXhwYW5zaW9uKSB7DQogICAgICAqKHBlbmRleHBhbnNpb25jZSArIHBvcyArIDEpID0gZW5kZXhw YW5zaW9uOw0KICAgICAgKihwZXhwYW5zaW9uc2l6ZSArIHBvcyArIDEpID0gZXhwYW5zaW9uc2l6 ZTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICA6OiBtZW1tb3ZlKHNoaWZ0cG9zICsgMSwgc2hp ZnRwb3MsIHNoaWZ0c2l6ZSAqIHNpemVvZihpbnQzMl90KSk7DQogICAgICA6OiBtZW1tb3ZlKHNp emVzaGlmdHBvcyArIDEsIHNpemVzaGlmdHBvcywgc2hpZnRzaXplICogc2l6ZW9mKHVpbnQ4X3Qp KTsNCg0KICAgICAgKnNoaWZ0cG9zID0gZW5kZXhwYW5zaW9uOw0KICAgICAgKnNpemVzaGlmdHBv cyA9IGV4cGFuc2lvbnNpemU7DQogICAgfQ0KICAgIG1heGV4cGFuc2lvbi0+cG9zaXRpb24gKys7 DQojIDUyNCAidWNvbF9lbG0uY3BwIg0KICB9DQoNCiAgcmV0dXJuIG1heGV4cGFuc2lvbi0+cG9z aXRpb247DQp9DQojIDU0MCAidWNvbF9lbG0uY3BwIg0KaW50IHVwcnZfdWNhX3NldE1heEphbW9F eHBhbnNpb24oVUNoYXIgY2gsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50 MzJfdCBlbmRleHBhbnNpb24sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50 OF90IGV4cGFuc2lvbnNpemUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXhK YW1vRXhwYW5zaW9uVGFibGUgKm1heGV4cGFuc2lvbiwNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cykNCnsNCiAgVUJvb2wgaXNWID0gMTsNCiAgaWYg KCgodWludDMyX3QpY2ggLSAweDExMDApIDw9ICgweDExMTIgLSAweDExMDApKSB7DQoNCg0KICAg ICAgaWYgKG1heGV4cGFuc2lvbi0+bWF4TFNpemUgPCBleHBhbnNpb25zaXplKSB7DQogICAgICAg ICAgbWF4ZXhwYW5zaW9uLT5tYXhMU2l6ZSA9IGV4cGFuc2lvbnNpemU7DQogICAgICB9DQogICAg ICByZXR1cm4gbWF4ZXhwYW5zaW9uLT5wb3NpdGlvbjsNCiAgfQ0KDQogIGlmICgoKHVpbnQzMl90 KWNoIC0gMHgxMTYxKSA8PSAoMHgxMTc1IC0gMHgxMTYxKSkgew0KDQogICAgICBpZiAobWF4ZXhw YW5zaW9uLT5tYXhWU2l6ZSA8IGV4cGFuc2lvbnNpemUpIHsNCiAgICAgICAgICBtYXhleHBhbnNp b24tPm1heFZTaXplID0gZXhwYW5zaW9uc2l6ZTsNCiAgICAgIH0NCiAgfQ0KDQogIGlmICgoKHVp bnQzMl90KWNoIC0gMHgxMUE4KSA8PSAoMHgxMUMyIC0gMHgxMUE4KSkgew0KICAgICAgaXNWID0g MDsNCg0KICAgICAgaWYgKG1heGV4cGFuc2lvbi0+bWF4VFNpemUgPCBleHBhbnNpb25zaXplKSB7 DQogICAgICAgICAgbWF4ZXhwYW5zaW9uLT5tYXhUU2l6ZSA9IGV4cGFuc2lvbnNpemU7DQogICAg ICB9DQogIH0NCg0KICBpZiAobWF4ZXhwYW5zaW9uLT5zaXplID09IDApIHsNCg0KICAgIG1heGV4 cGFuc2lvbi0+ZW5kRXhwYW5zaW9uQ0UgPQ0KICAgICAgICAgICAgICAgKHVpbnQzMl90ICopdXBy dl9tYWxsb2MoMTAyNCAqIHNpemVvZih1aW50MzJfdCkpOw0KICAgICAgICAgICAgICAgICAgICAg ICA7DQogICAgaWYgKG1heGV4cGFuc2lvbi0+ZW5kRXhwYW5zaW9uQ0UgPT0gX19udWxsKSB7DQog ICAgICAgICpzdGF0dXMgPSBVX01FTU9SWV9BTExPQ0FUSU9OX0VSUk9SOw0KICAgICAgICByZXR1 cm4gMDsNCiAgICB9DQogICAgKihtYXhleHBhbnNpb24tPmVuZEV4cGFuc2lvbkNFKSA9IDA7DQog ICAgbWF4ZXhwYW5zaW9uLT5pc1YgPQ0KICAgICAgICAgICAgICAgICAoVUJvb2wgKil1cHJ2X21h bGxvYygxMDI0ICogc2l6ZW9mKFVCb29sKSk7DQogICAgICAgICAgICAgICAgICAgICAgIDsNCiAg ICBpZiAobWF4ZXhwYW5zaW9uLT5pc1YgPT0gX19udWxsKSB7DQogICAgICAgICpzdGF0dXMgPSBV X01FTU9SWV9BTExPQ0FUSU9OX0VSUk9SOw0KICAgICAgICByZXR1cm4gMDsNCiAgICB9DQogICAg KihtYXhleHBhbnNpb24tPmlzVikgPSAwOw0KICAgIG1heGV4cGFuc2lvbi0+c2l6ZSA9IDEwMjQ7 DQogICAgbWF4ZXhwYW5zaW9uLT5wb3NpdGlvbiA9IDA7DQogIH0NCg0KICBpZiAobWF4ZXhwYW5z aW9uLT5wb3NpdGlvbiArIDEgPT0gbWF4ZXhwYW5zaW9uLT5zaXplKSB7DQogICAgdWludDMyX3Qg Km5ld2VlY2UgPSAodWludDMyX3QgKil1cHJ2X3JlYWxsb2MobWF4ZXhwYW5zaW9uLT5lbmRFeHBh bnNpb25DRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAqIG1heGV4cGFu c2lvbi0+c2l6ZSAqIHNpemVvZih1aW50MzJfdCkpOw0KICAgIFVCb29sICpuZXdpc1YgPSAoVUJv b2wgKil1cHJ2X3JlYWxsb2MobWF4ZXhwYW5zaW9uLT5pc1YsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDIgKiBtYXhleHBhbnNpb24tPnNpemUgKiBzaXplb2YoVUJvb2wpKTsN CiAgICBpZiAobmV3ZWVjZSA9PSBfX251bGwgfHwgbmV3aXNWID09IF9fbnVsbCkgew0KDQoNCg0K ICAgICAgKnN0YXR1cyA9IFVfTUVNT1JZX0FMTE9DQVRJT05fRVJST1I7DQogICAgICByZXR1cm4g LTE7DQogICAgfQ0KICAgIG1heGV4cGFuc2lvbi0+ZW5kRXhwYW5zaW9uQ0UgPSBuZXdlZWNlOw0K ICAgIG1heGV4cGFuc2lvbi0+aXNWID0gbmV3aXNWOw0KICAgIG1heGV4cGFuc2lvbi0+c2l6ZSAq PSAyOw0KICB9DQoNCiAgdWludDMyX3QgKnBlbmRleHBhbnNpb25jZSA9IG1heGV4cGFuc2lvbi0+ ZW5kRXhwYW5zaW9uQ0U7DQogIGludCBwb3MgPSBtYXhleHBhbnNpb24tPnBvc2l0aW9uOw0KDQog IHdoaWxlIChwb3MgPiAwKSB7DQogICAgICBwb3MgLS07DQogICAgICBpZiAoKihwZW5kZXhwYW5z aW9uY2UgKyBwb3MpID09IGVuZGV4cGFuc2lvbikgew0KICAgICAgICAgIHJldHVybiBtYXhleHBh bnNpb24tPnBvc2l0aW9uOw0KICAgICAgfQ0KICB9DQoNCiAgKihwZW5kZXhwYW5zaW9uY2UgKyBt YXhleHBhbnNpb24tPnBvc2l0aW9uKSA9IGVuZGV4cGFuc2lvbjsNCiAgKihtYXhleHBhbnNpb24t PmlzViArIG1heGV4cGFuc2lvbi0+cG9zaXRpb24pID0gaXNWOw0KICBtYXhleHBhbnNpb24tPnBv c2l0aW9uICsrOw0KDQogIHJldHVybiBtYXhleHBhbnNpb24tPnBvc2l0aW9uOw0KfQ0KDQoNCnN0 YXRpYyB2b2lkIENvbnRyRW5kQ1BTZXQodWludDhfdCAqdGFibGUsIFVDaGFyIGMpIHsNCiAgICB1 aW50MzJfdCBoYXNoOw0KICAgIHVpbnQ4X3QgKmh0Qnl0ZTsNCg0KICAgIGhhc2ggPSBjOw0KICAg IGlmIChoYXNoID49IDEwNTYqOCkgew0KICAgICAgICBoYXNoID0gKGhhc2ggJiAweDFmZmYpICsg MjU2Ow0KICAgIH0NCiAgICBodEJ5dGUgPSAmdGFibGVbaGFzaD4+M107DQogICAgKmh0Qnl0ZSB8 PSAoMSA8PCAoaGFzaCAmIDcpKTsNCn0NCg0KDQpzdGF0aWMgdm9pZCB1bnNhZmVDUFNldCh1aW50 OF90ICp0YWJsZSwgVUNoYXIgYykgew0KICAgIHVpbnQzMl90IGhhc2g7DQogICAgdWludDhfdCAq aHRCeXRlOw0KDQogICAgaGFzaCA9IGM7DQogICAgaWYgKGhhc2ggPj0gMTA1Nio4KSB7DQogICAg ICAgIGlmIChoYXNoID49IDB4ZDgwMCAmJiBoYXNoIDw9IDB4ZjhmZikgew0KDQoNCiAgICAgICAg ICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICBoYXNoID0gKGhhc2ggJiAweDFmZmYpICsg MjU2Ow0KICAgIH0NCiAgICBodEJ5dGUgPSAmdGFibGVbaGFzaD4+M107DQogICAgKmh0Qnl0ZSB8 PSAoMSA8PCAoaGFzaCAmIDcpKTsNCn0NCg0KDQoNCnN0YXRpYyB2b2lkIHVwcnZfdWNhX3Vuc2Fm ZUNQQWRkQ0NOWih0ZW1wVUNBVGFibGUgKnQsIFVFcnJvckNvZGUgKnN0YXR1cykgew0KDQogICAg VUNoYXIgYzsNCiAgICB1aW50MTZfdCBmY2Q7DQoNCiAgICBjb25zdCB1aW50MTZfdCAqZmNkVHJp ZURhdGE7DQoNCiAgICBmY2RUcmllRGF0YSA9IHVub3JtX2dldEZDRFRyaWVfMl8yKHN0YXR1cyk7 DQogICAgaWYgKFVfRkFJTFVSRSgqc3RhdHVzKSkgew0KICAgICAgICByZXR1cm47DQogICAgfQ0K DQogICAgZm9yIChjPTA7IGM8MHhmZmZmOyBjKyspIHsNCiAgICAgICAgZmNkID0gdW5vcm1fZ2V0 RkNEMTYoZmNkVHJpZURhdGEsIGMpOw0KICAgICAgICBpZiAoZmNkID49IDB4MTAwIHx8DQogICAg ICAgICAgICAoKCgoYykmMHhmZmZmZmMwMCk9PTB4ZDgwMCkgJiYgZmNkICE9IDApKQ0KICAgICAg ICAgICAgICAgIHVuc2FmZUNQU2V0KHQtPnVuc2FmZUNQLCBjKTsNCiAgICB9DQoNCiAgICBpZih0 LT5wcmVmaXhMb29rdXAgIT0gX19udWxsKSB7DQogICAgICBpbnQzMl90IGkgPSAtMTsNCiAgICAg IGNvbnN0IFVIYXNoRWxlbWVudCAqZSA9IF9fbnVsbDsNCiAgICAgIFVDQUVsZW1lbnRzICplbGVt ZW50ID0gX19udWxsOw0KICAgICAgVUNoYXIgTkZDYnVmWzI1Nl07DQogICAgICB1aW50MzJfdCBO RkNidWZMZW4gPSAwOw0KICAgICAgd2hpbGUoKGUgPSB1aGFzaF9uZXh0RWxlbWVudF8yXzIodC0+ cHJlZml4TG9va3VwLCAmaSkpICE9IF9fbnVsbCkgew0KICAgICAgICBlbGVtZW50ID0gKFVDQUVs ZW1lbnRzICopZS0+dmFsdWUucG9pbnRlcjsNCg0KDQoNCiAgICAgICAgTkZDYnVmTGVuID0gdW5v cm1fbm9ybWFsaXplXzJfMihlbGVtZW50LT5jUG9pbnRzLCBlbGVtZW50LT5jU2l6ZSwgVU5PUk1f TkZDLCAwLA0KICAgICAgICAgIE5GQ2J1ZiwgMjU2LCBzdGF0dXMpOw0KICAgICAgICB1bnNhZmVD UFNldCh0LT51bnNhZmVDUCwgTkZDYnVmWzBdKTsNCiAgICAgIH0NCiAgICB9DQp9DQoNCnVpbnQz Ml90IHVwcnZfdWNhX2FkZFByZWZpeCh0ZW1wVUNBVGFibGUgKnQsIHVpbnQzMl90IENFLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUNBRWxlbWVudHMgKmVsZW1lbnQsIFVFcnJv ckNvZGUgKnN0YXR1cykgew0KDQoNCg0KDQogICAgQ250VGFibGUgKmNvbnRyYWN0aW9ucyA9IHQt PmNvbnRyYWN0aW9uczsNCiAgICBVQ2hhcjMyIGNwOw0KICAgIHVpbnQzMl90IGNwc2l6ZSA9IDA7 DQogICAgVUNoYXIgKm9sZENQID0gZWxlbWVudC0+Y1BvaW50czsNCiAgICB1aW50MzJfdCBvbGRD UFNpemUgPSBlbGVtZW50LT5jU2l6ZTsNCg0KDQogICAgY29udHJhY3Rpb25zLT5jdXJyZW50VGFn ID0gU1BFQ19QUk9DX1RBRzsNCg0KDQogICAgdWludDMyX3QgaiA9IDA7DQojIDcyNSAidWNvbF9l bG0uY3BwIg0KICAgIGZvciAoaiA9IDE7IGo8ZWxlbWVudC0+cHJlZml4U2l6ZTsgaisrKSB7DQoN Cg0KICAgICAgaWYoISgoKChlbGVtZW50LT5wcmVmaXhbal0pJjB4ZmZmZmZjMDApPT0weGRjMDAp KSkgew0KICAgICAgICB1bnNhZmVDUFNldCh0LT51bnNhZmVDUCwgZWxlbWVudC0+cHJlZml4W2pd KTsNCiAgICAgIH0NCiAgICB9DQoNCiAgICBVQ2hhciB0ZW1wUHJlZml4ID0gMDsNCg0KICAgIGZv cihqID0gMDsgaiA8IGVsZW1lbnQtPnByZWZpeFNpemUvMjsgaisrKSB7DQoNCiAgICAgIHRlbXBQ cmVmaXggPSAqKCBlbGVtZW50LT5wcmVmaXgrZWxlbWVudC0+cHJlZml4U2l6ZS1qLTEpOw0KICAg ICAgKiggZWxlbWVudC0+cHJlZml4K2VsZW1lbnQtPnByZWZpeFNpemUtai0xKSA9IGVsZW1lbnQt PnByZWZpeFtqXTsNCiAgICAgIGVsZW1lbnQtPnByZWZpeFtqXSA9IHRlbXBQcmVmaXg7DQogICAg fQ0KIyA3NTEgInVjb2xfZWxtLmNwcCINCiAgICBpZighKCgoKGVsZW1lbnQtPmNQb2ludHNbMF0p JjB4ZmZmZmZjMDApPT0weGRjMDApKSkgew0KICAgICAgdW5zYWZlQ1BTZXQodC0+dW5zYWZlQ1As IGVsZW1lbnQtPmNQb2ludHNbMF0pOw0KICAgIH0NCiMgNzYyICJ1Y29sX2VsbS5jcHAiDQogICAg ZWxlbWVudC0+Y1BvaW50cyA9IGVsZW1lbnQtPnByZWZpeDsNCiAgICBlbGVtZW50LT5jU2l6ZSA9 IGVsZW1lbnQtPnByZWZpeFNpemU7DQoNCg0KDQoNCiAgICBpZighKCgoKGVsZW1lbnQtPmNQb2lu dHNbZWxlbWVudC0+Y1NpemUgLTFdKSYweGZmZmZmYzAwKT09MHhkYzAwKSkpIHsNCiAgICAgIENv bnRyRW5kQ1BTZXQodC0+Y29udHJFbmRDUCwgZWxlbWVudC0+Y1BvaW50c1tlbGVtZW50LT5jU2l6 ZSAtMV0pOw0KICAgIH0NCg0KDQogICAgeyAoY3ApPShlbGVtZW50LT5jUG9pbnRzKVsoY3BzaXpl KSsrXTsgaWYoKCgoY3ApJjB4ZmZmZmZjMDApPT0weGQ4MDApKSB7IHVpbnQxNl90IF9fYzI7IGlm KChjcHNpemUpPChlbGVtZW50LT5jU2l6ZSkgJiYgKCgoX19jMj0oZWxlbWVudC0+Y1BvaW50cylb KGNwc2l6ZSldKSYweGZmZmZmYzAwKT09MHhkYzAwKSkgeyArKyhjcHNpemUpOyAoY3ApPSgoKChj cCkpPDwxMFVMKSsoX19jMiktKCgweGQ4MDA8PDEwVUwpKzB4ZGMwMC0weDEwMDAwKSk7IH0gZWxz ZSBpZigwKSB7IChjcCk9MHhmZmZmOyB9IH0gZWxzZSBpZigoMCkgJiYgISgodWludDMyX3QpKGNw KTwweGQ4MDAgfHwgKCh1aW50MzJfdCkoY3ApPjB4ZGZmZiAmJiAodWludDMyX3QpKGNwKTw9MHgx MGZmZmYgJiYgISgoY3ApPj0weGZkZDAgJiYgKCh1aW50MzJfdCkoY3ApPD0weGZkZWYgfHwgKChj cCkmMHhmZmZlKT09MHhmZmZlKSAmJiAodWludDMyX3QpKGNwKTw9MHgxMGZmZmYpKSkpIHsgKGNw KT0weGZmZmY7IH0gfTsNCg0KDQoNCiAgICBpZigoKCgodWludDMyX3QpKGVsZW1lbnQtPnByZWZp eFswXSkgLSAweDExMDApIDw9ICgweDExMTIgLSAweDExMDApKSB8fCAoKCh1aW50MzJfdCkoZWxl bWVudC0+cHJlZml4WzBdKSAtIDB4MTE2MSkgPD0gKDB4MTE3NSAtIDB4MTE2MSkpIHx8ICgoKHVp bnQzMl90KShlbGVtZW50LT5wcmVmaXhbMF0pIC0gMHgxMUE4KSA8PSAoMHgxMUMyIC0gMHgxMUE4 KSkpKSB7DQogICAgICB0LT5pbWFnZS0+amFtb1NwZWNpYWwgPSAxOw0KICAgIH0NCg0KDQoNCiAg ICBpZighKCgoKCgoQ0UpKSYweEYwMDAwMDAwKT4+MjgpPT0weEYpICYmICgoKCgoQ0UpKSYweDBG MDAwMDAwKT4+MjQpID09IFNQRUNfUFJPQ19UQUcpKSkgew0KDQogICAgICBpbnQzMl90IGZpcnN0 Q29udHJhY3Rpb25PZmZzZXQgPSAwOw0KICAgICAgaW50MzJfdCBjb250cmFjdGlvbk9mZnNldCA9 IDA7DQogICAgICBmaXJzdENvbnRyYWN0aW9uT2Zmc2V0ID0gdXBydl9jbnR0YWJfYWRkQ29udHJh Y3Rpb25fMl8yKGNvbnRyYWN0aW9ucywgMHhGRkZGRkYsIDAsIENFLCBzdGF0dXMpOw0KICAgICAg dWludDMyX3QgbmV3Q0UgPSB1cHJ2X3VjYV9wcm9jZXNzQ29udHJhY3Rpb24oY29udHJhY3Rpb25z LCBlbGVtZW50LCAweEYwMDAwMDAwLCBzdGF0dXMpOw0KICAgICAgY29udHJhY3Rpb25PZmZzZXQg PSB1cHJ2X2NudHRhYl9hZGRDb250cmFjdGlvbl8yXzIoY29udHJhY3Rpb25zLCBmaXJzdENvbnRy YWN0aW9uT2Zmc2V0LCAqZWxlbWVudC0+cHJlZml4LCBuZXdDRSwgc3RhdHVzKTsNCiAgICAgIGNv bnRyYWN0aW9uT2Zmc2V0ID0gdXBydl9jbnR0YWJfYWRkQ29udHJhY3Rpb25fMl8yKGNvbnRyYWN0 aW9ucywgZmlyc3RDb250cmFjdGlvbk9mZnNldCwgMHhGRkZGLCBDRSwgc3RhdHVzKTsNCiAgICAg IENFID0gKDB4RjAwMDAwMDAgfCAoKFNQRUNfUFJPQ19UQUcpPDwyNCkgfCAoKGZpcnN0Q29udHJh Y3Rpb25PZmZzZXQpKSYweEZGRkZGRik7DQogICAgfSBlbHNlIHsNCg0KDQogICAgICBpbnQzMl90 IHBvc2l0aW9uID0gdXBydl9jbnR0YWJfZmluZENQXzJfMihjb250cmFjdGlvbnMsIENFLCAqZWxl bWVudC0+cHJlZml4LCBzdGF0dXMpOw0KICAgICAgaWYocG9zaXRpb24gPiAwKSB7DQogICAgICAg IHVpbnQzMl90IGVDRSA9IHVwcnZfY250dGFiX2dldENFXzJfMihjb250cmFjdGlvbnMsIENFLCBw b3NpdGlvbiwgc3RhdHVzKTsNCiAgICAgICAgdWludDMyX3QgbmV3Q0UgPSB1cHJ2X3VjYV9wcm9j ZXNzQ29udHJhY3Rpb24oY29udHJhY3Rpb25zLCBlbGVtZW50LCBlQ0UsIHN0YXR1cyk7DQogICAg ICAgIHVwcnZfY250dGFiX3NldENvbnRyYWN0aW9uXzJfMihjb250cmFjdGlvbnMsIENFLCBwb3Np dGlvbiwgKihlbGVtZW50LT5wcmVmaXgpLCBuZXdDRSwgc3RhdHVzKTsNCiAgICAgIH0gZWxzZSB7 DQogICAgICAgIHVwcnZfdWNhX3Byb2Nlc3NDb250cmFjdGlvbihjb250cmFjdGlvbnMsIGVsZW1l bnQsIDB4RjAwMDAwMDAsIHN0YXR1cyk7DQogICAgICAgIHVwcnZfY250dGFiX2luc2VydENvbnRy YWN0aW9uXzJfMihjb250cmFjdGlvbnMsIENFLCAqKGVsZW1lbnQtPnByZWZpeCksIGVsZW1lbnQt Pm1hcENFLCBzdGF0dXMpOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIGVsZW1lbnQtPmNQb2ludHMg PSBvbGRDUDsNCiAgICBlbGVtZW50LT5jU2l6ZSA9IG9sZENQU2l6ZTsNCg0KICAgIHJldHVybiBD RTsNCn0NCg0KDQoNCg0KDQoNCnVpbnQzMl90IHVwcnZfdWNhX2FkZENvbnRyYWN0aW9uKHRlbXBV Q0FUYWJsZSAqdCwgdWludDMyX3QgQ0UsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBVQ0FFbGVtZW50cyAqZWxlbWVudCwgVUVycm9yQ29kZSAqc3RhdHVzKSB7DQogICAgQ250VGFi bGUgKmNvbnRyYWN0aW9ucyA9IHQtPmNvbnRyYWN0aW9uczsNCiAgICBVQ2hhcjMyIGNwOw0KICAg IHVpbnQzMl90IGNwc2l6ZSA9IDA7DQoNCiAgICBjb250cmFjdGlvbnMtPmN1cnJlbnRUYWcgPSBD T05UUkFDVElPTl9UQUc7DQoNCg0KICAgIHsgKGNwKT0oZWxlbWVudC0+Y1BvaW50cylbKGNwc2l6 ZSkrK107IGlmKCgoKGNwKSYweGZmZmZmYzAwKT09MHhkODAwKSkgeyB1aW50MTZfdCBfX2MyOyBp ZigoY3BzaXplKTwoZWxlbWVudC0+Y1NpemUpICYmICgoKF9fYzI9KGVsZW1lbnQtPmNQb2ludHMp WyhjcHNpemUpXSkmMHhmZmZmZmMwMCk9PTB4ZGMwMCkpIHsgKysoY3BzaXplKTsgKGNwKT0oKCgo Y3ApKTw8MTBVTCkrKF9fYzIpLSgoMHhkODAwPDwxMFVMKSsweGRjMDAtMHgxMDAwMCkpOyB9IGVs c2UgaWYoMCkgeyAoY3ApPTB4ZmZmZjsgfSB9IGVsc2UgaWYoKDApICYmICEoKHVpbnQzMl90KShj cCk8MHhkODAwIHx8ICgodWludDMyX3QpKGNwKT4weGRmZmYgJiYgKHVpbnQzMl90KShjcCk8PTB4 MTBmZmZmICYmICEoKGNwKT49MHhmZGQwICYmICgodWludDMyX3QpKGNwKTw9MHhmZGVmIHx8ICgo Y3ApJjB4ZmZmZSk9PTB4ZmZmZSkgJiYgKHVpbnQzMl90KShjcCk8PTB4MTBmZmZmKSkpKSB7IChj cCk9MHhmZmZmOyB9IH07DQoNCiAgICBpZihjcHNpemU8ZWxlbWVudC0+Y1NpemUpIHsNCiAgICAg IHVpbnQzMl90IGogPSAwOw0KICAgICAgZm9yIChqPTE7IGo8ZWxlbWVudC0+Y1NpemU7IGorKykg ew0KDQoNCiAgICAgICAgaWYoISgoKChlbGVtZW50LT5jUG9pbnRzW2pdKSYweGZmZmZmYzAwKT09 MHhkYzAwKSkpIHsNCiAgICAgICAgICB1bnNhZmVDUFNldCh0LT51bnNhZmVDUCwgZWxlbWVudC0+ Y1BvaW50c1tqXSk7DQogICAgICAgIH0NCiAgICAgIH0NCg0KDQoNCiAgICAgIGlmKCEoKCgoZWxl bWVudC0+Y1BvaW50c1tlbGVtZW50LT5jU2l6ZSAtMV0pJjB4ZmZmZmZjMDApPT0weGRjMDApKSkg ew0KICAgICAgICBDb250ckVuZENQU2V0KHQtPmNvbnRyRW5kQ1AsIGVsZW1lbnQtPmNQb2ludHNb ZWxlbWVudC0+Y1NpemUgLTFdKTsNCiAgICAgIH0NCg0KDQoNCiAgICAgIGlmKCgoKCh1aW50MzJf dCkoZWxlbWVudC0+Y1BvaW50c1swXSkgLSAweDExMDApIDw9ICgweDExMTIgLSAweDExMDApKSB8 fCAoKCh1aW50MzJfdCkoZWxlbWVudC0+Y1BvaW50c1swXSkgLSAweDExNjEpIDw9ICgweDExNzUg LSAweDExNjEpKSB8fCAoKCh1aW50MzJfdCkoZWxlbWVudC0+Y1BvaW50c1swXSkgLSAweDExQTgp IDw9ICgweDExQzIgLSAweDExQTgpKSkpIHsNCiAgICAgICAgdC0+aW1hZ2UtPmphbW9TcGVjaWFs ID0gMTsNCiAgICAgIH0NCg0KDQogICAgICBlbGVtZW50LT5jUG9pbnRzKz1jcHNpemU7DQogICAg ICBlbGVtZW50LT5jU2l6ZS09Y3BzaXplOw0KICAgICAgaWYoISgoKCgoKENFKSkmMHhGMDAwMDAw MCk+PjI4KT09MHhGKSAmJiAoKCgoKENFKSkmMHgwRjAwMDAwMCk+PjI0KSA9PSBDT05UUkFDVElP Tl9UQUcpKSkgew0KDQogICAgICAgIGludDMyX3QgZmlyc3RDb250cmFjdGlvbk9mZnNldCA9IDA7 DQogICAgICAgIGludDMyX3QgY29udHJhY3Rpb25PZmZzZXQgPSAwOw0KICAgICAgICBmaXJzdENv bnRyYWN0aW9uT2Zmc2V0ID0gdXBydl9jbnR0YWJfYWRkQ29udHJhY3Rpb25fMl8yKGNvbnRyYWN0 aW9ucywgMHhGRkZGRkYsIDAsIENFLCBzdGF0dXMpOw0KICAgICAgICB1aW50MzJfdCBuZXdDRSA9 IHVwcnZfdWNhX3Byb2Nlc3NDb250cmFjdGlvbihjb250cmFjdGlvbnMsIGVsZW1lbnQsIDB4RjAw MDAwMDAsIHN0YXR1cyk7DQogICAgICAgIGNvbnRyYWN0aW9uT2Zmc2V0ID0gdXBydl9jbnR0YWJf YWRkQ29udHJhY3Rpb25fMl8yKGNvbnRyYWN0aW9ucywgZmlyc3RDb250cmFjdGlvbk9mZnNldCwg KmVsZW1lbnQtPmNQb2ludHMsIG5ld0NFLCBzdGF0dXMpOw0KICAgICAgICBjb250cmFjdGlvbk9m ZnNldCA9IHVwcnZfY250dGFiX2FkZENvbnRyYWN0aW9uXzJfMihjb250cmFjdGlvbnMsIGZpcnN0 Q29udHJhY3Rpb25PZmZzZXQsIDB4RkZGRiwgQ0UsIHN0YXR1cyk7DQogICAgICAgIENFID0gKDB4 RjAwMDAwMDAgfCAoKENPTlRSQUNUSU9OX1RBRyk8PDI0KSB8ICgoZmlyc3RDb250cmFjdGlvbk9m ZnNldCkpJjB4RkZGRkZGKTsNCiAgICAgIH0gZWxzZSB7DQoNCg0KICAgICAgICBpbnQzMl90IHBv c2l0aW9uID0gdXBydl9jbnR0YWJfZmluZENQXzJfMihjb250cmFjdGlvbnMsIENFLCAqZWxlbWVu dC0+Y1BvaW50cywgc3RhdHVzKTsNCiAgICAgICAgaWYocG9zaXRpb24gPiAwKSB7DQogICAgICAg ICAgdWludDMyX3QgZUNFID0gdXBydl9jbnR0YWJfZ2V0Q0VfMl8yKGNvbnRyYWN0aW9ucywgQ0Us IHBvc2l0aW9uLCBzdGF0dXMpOw0KICAgICAgICAgIHVpbnQzMl90IG5ld0NFID0gdXBydl91Y2Ff cHJvY2Vzc0NvbnRyYWN0aW9uKGNvbnRyYWN0aW9ucywgZWxlbWVudCwgZUNFLCBzdGF0dXMpOw0K ICAgICAgICAgIHVwcnZfY250dGFiX3NldENvbnRyYWN0aW9uXzJfMihjb250cmFjdGlvbnMsIENF LCBwb3NpdGlvbiwgKihlbGVtZW50LT5jUG9pbnRzKSwgbmV3Q0UsIHN0YXR1cyk7DQogICAgICAg IH0gZWxzZSB7DQogICAgICAgICAgdWludDMyX3QgbmV3Q0UgPSB1cHJ2X3VjYV9wcm9jZXNzQ29u dHJhY3Rpb24oY29udHJhY3Rpb25zLCBlbGVtZW50LCAweEYwMDAwMDAwLCBzdGF0dXMpOw0KICAg ICAgICAgIHVwcnZfY250dGFiX2luc2VydENvbnRyYWN0aW9uXzJfMihjb250cmFjdGlvbnMsIENF LCAqKGVsZW1lbnQtPmNQb2ludHMpLCBuZXdDRSwgc3RhdHVzKTsNCiAgICAgICAgfQ0KICAgICAg fQ0KICAgICAgZWxlbWVudC0+Y1BvaW50cy09Y3BzaXplOw0KICAgICAgZWxlbWVudC0+Y1NpemUr PWNwc2l6ZTsNCg0KICAgICAgdXRyaWVfc2V0MzJfMl8yKHQtPm1hcHBpbmcsIGNwLCBDRSk7DQog ICAgfSBlbHNlIGlmKCEoKCgoKChDRSkpJjB4RjAwMDAwMDApPj4yOCk9PTB4RikgJiYgKCgoKChD RSkpJjB4MEYwMDAwMDApPj4yNCkgPT0gQ09OVFJBQ1RJT05fVEFHKSkpIHsNCg0KICAgICAgdXRy aWVfc2V0MzJfMl8yKHQtPm1hcHBpbmcsIGNwLCBlbGVtZW50LT5tYXBDRSk7DQogICAgfSBlbHNl IHsNCiAgICAgIHVwcnZfY250dGFiX2NoYW5nZUNvbnRyYWN0aW9uXzJfMihjb250cmFjdGlvbnMs IENFLCAwLCBlbGVtZW50LT5tYXBDRSwgc3RhdHVzKTsNCiAgICAgIHVwcnZfY250dGFiX2NoYW5n ZUNvbnRyYWN0aW9uXzJfMihjb250cmFjdGlvbnMsIENFLCAweEZGRkYsIGVsZW1lbnQtPm1hcENF LCBzdGF0dXMpOw0KICAgIH0NCiAgICByZXR1cm4gQ0U7DQp9DQoNCg0Kc3RhdGljIHVpbnQzMl90 IHVwcnZfdWNhX3Byb2Nlc3NDb250cmFjdGlvbihDbnRUYWJsZSAqY29udHJhY3Rpb25zLCBVQ0FF bGVtZW50cyAqZWxlbWVudCwgdWludDMyX3QgZXhpc3RpbmdDRSwgVUVycm9yQ29kZSAqc3RhdHVz KSB7DQogICAgaW50MzJfdCBmaXJzdENvbnRyYWN0aW9uT2Zmc2V0ID0gMDsNCiAgICBpbnQzMl90 IGNvbnRyYWN0aW9uT2Zmc2V0ID0gMDsNCg0KDQogICAgaWYoVV9GQUlMVVJFKCpzdGF0dXMpKSB7 DQogICAgICAgIHJldHVybiAweEYwMDAwMDAwOw0KICAgIH0NCg0KDQogICAgaWYoZWxlbWVudC0+ Y1NpemUgPT0gMSkgew0KICAgICAgaWYoKCgoKCgoZXhpc3RpbmdDRSkpJjB4RjAwMDAwMDApPj4y OCk9PTB4RikgJiYgKCgoKCgoZXhpc3RpbmdDRSkpJjB4MEYwMDAwMDApPj4yNCkgPT0gQ09OVFJB Q1RJT05fVEFHKXx8KCgoKChleGlzdGluZ0NFKSkmMHgwRjAwMDAwMCk+PjI0KSA9PSBTUEVDX1BS T0NfVEFHKSkpICYmICgoVUNvbENFVGFncykoKChleGlzdGluZ0NFKSYweDBGMDAwMDAwKT4+MjQp ID09IGNvbnRyYWN0aW9ucy0+Y3VycmVudFRhZykpIHsNCiAgICAgICAgdXBydl9jbnR0YWJfY2hh bmdlQ29udHJhY3Rpb25fMl8yKGNvbnRyYWN0aW9ucywgZXhpc3RpbmdDRSwgMCwgZWxlbWVudC0+ bWFwQ0UsIHN0YXR1cyk7DQogICAgICAgIHVwcnZfY250dGFiX2NoYW5nZUNvbnRyYWN0aW9uXzJf Mihjb250cmFjdGlvbnMsIGV4aXN0aW5nQ0UsIDB4RkZGRiwgZWxlbWVudC0+bWFwQ0UsIHN0YXR1 cyk7DQogICAgICAgIHJldHVybiBleGlzdGluZ0NFOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAg cmV0dXJuIGVsZW1lbnQtPm1hcENFOw0KICAgICAgfQ0KICAgIH0NCg0KDQoNCg0KDQoNCiAgICBl bGVtZW50LT5jUG9pbnRzKys7DQogICAgZWxlbWVudC0+Y1NpemUtLTsNCiAgICBpZighKCgoKCgo ZXhpc3RpbmdDRSkpJjB4RjAwMDAwMDApPj4yOCk9PTB4RikgJiYgKCgoKCgoZXhpc3RpbmdDRSkp JjB4MEYwMDAwMDApPj4yNCkgPT0gQ09OVFJBQ1RJT05fVEFHKXx8KCgoKChleGlzdGluZ0NFKSkm MHgwRjAwMDAwMCk+PjI0KSA9PSBTUEVDX1BST0NfVEFHKSkpKSB7DQoNCiAgICAgIGZpcnN0Q29u dHJhY3Rpb25PZmZzZXQgPSB1cHJ2X2NudHRhYl9hZGRDb250cmFjdGlvbl8yXzIoY29udHJhY3Rp b25zLCAweEZGRkZGRiwgMCwgZXhpc3RpbmdDRSwgc3RhdHVzKTsNCiAgICAgIHVpbnQzMl90IG5l d0NFID0gdXBydl91Y2FfcHJvY2Vzc0NvbnRyYWN0aW9uKGNvbnRyYWN0aW9ucywgZWxlbWVudCwg MHhGMDAwMDAwMCwgc3RhdHVzKTsNCiAgICAgIGNvbnRyYWN0aW9uT2Zmc2V0ID0gdXBydl9jbnR0 YWJfYWRkQ29udHJhY3Rpb25fMl8yKGNvbnRyYWN0aW9ucywgZmlyc3RDb250cmFjdGlvbk9mZnNl dCwgKmVsZW1lbnQtPmNQb2ludHMsIG5ld0NFLCBzdGF0dXMpOw0KICAgICAgY29udHJhY3Rpb25P ZmZzZXQgPSB1cHJ2X2NudHRhYl9hZGRDb250cmFjdGlvbl8yXzIoY29udHJhY3Rpb25zLCBmaXJz dENvbnRyYWN0aW9uT2Zmc2V0LCAweEZGRkYsIGV4aXN0aW5nQ0UsIHN0YXR1cyk7DQogICAgICBl eGlzdGluZ0NFID0gKDB4RjAwMDAwMDAgfCAoKGNvbnRyYWN0aW9ucy0+Y3VycmVudFRhZyk8PDI0 KSB8ICgoZmlyc3RDb250cmFjdGlvbk9mZnNldCkpJjB4RkZGRkZGKTsNCiAgICB9IGVsc2Ugew0K DQoNCiAgICAgIGludDMyX3QgcG9zaXRpb24gPSB1cHJ2X2NudHRhYl9maW5kQ1BfMl8yKGNvbnRy YWN0aW9ucywgZXhpc3RpbmdDRSwgKmVsZW1lbnQtPmNQb2ludHMsIHN0YXR1cyk7DQogICAgICBp Zihwb3NpdGlvbiA+IDApIHsNCiAgICAgICAgdWludDMyX3QgZUNFID0gdXBydl9jbnR0YWJfZ2V0 Q0VfMl8yKGNvbnRyYWN0aW9ucywgZXhpc3RpbmdDRSwgcG9zaXRpb24sIHN0YXR1cyk7DQogICAg ICAgIHVpbnQzMl90IG5ld0NFID0gdXBydl91Y2FfcHJvY2Vzc0NvbnRyYWN0aW9uKGNvbnRyYWN0 aW9ucywgZWxlbWVudCwgZUNFLCBzdGF0dXMpOw0KICAgICAgICB1cHJ2X2NudHRhYl9zZXRDb250 cmFjdGlvbl8yXzIoY29udHJhY3Rpb25zLCBleGlzdGluZ0NFLCBwb3NpdGlvbiwgKihlbGVtZW50 LT5jUG9pbnRzKSwgbmV3Q0UsIHN0YXR1cyk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB1aW50 MzJfdCBuZXdDRSA9IHVwcnZfdWNhX3Byb2Nlc3NDb250cmFjdGlvbihjb250cmFjdGlvbnMsIGVs ZW1lbnQsIDB4RjAwMDAwMDAsIHN0YXR1cyk7DQogICAgICAgIHVwcnZfY250dGFiX2luc2VydENv bnRyYWN0aW9uXzJfMihjb250cmFjdGlvbnMsIGV4aXN0aW5nQ0UsICooZWxlbWVudC0+Y1BvaW50 cyksIG5ld0NFLCBzdGF0dXMpOw0KICAgICAgfQ0KICAgIH0NCiAgICBlbGVtZW50LT5jUG9pbnRz LS07DQogICAgZWxlbWVudC0+Y1NpemUrKzsNCiAgICByZXR1cm4gZXhpc3RpbmdDRTsNCn0NCg0K c3RhdGljIHVpbnQzMl90IHVwcnZfdWNhX2ZpbmFsaXplQWRkaXRpb24odGVtcFVDQVRhYmxlICp0 LCBVQ0FFbGVtZW50cyAqZWxlbWVudCwgVUVycm9yQ29kZSAqc3RhdHVzKSB7DQogIHVpbnQzMl90 IENFID0gMHhGMDAwMDAwMDsNCg0KDQoNCiAgdWludDMyX3QgaSA9IDA7DQogIGlmKGVsZW1lbnQt Pm1hcENFID09IDApIHsNCiAgICBmb3IoaSA9IDA7IGkgPCBlbGVtZW50LT5jU2l6ZTsgaSsrKSB7 DQogICAgICBpZighKCgoZWxlbWVudC0+Y1BvaW50c1tpXSkmMHhmZmZmZmMwMCk9PTB4ZGMwMCkp IHsNCiAgICAgICAgdW5zYWZlQ1BTZXQodC0+dW5zYWZlQ1AsIGVsZW1lbnQtPmNQb2ludHNbaV0p Ow0KICAgICAgfQ0KICAgIH0NCiAgfQ0KICBpZihlbGVtZW50LT5jU2l6ZSA+IDEpIHsNCiAgICB1 aW50MzJfdCBpID0gMDsNCiAgICBVQ2hhcjMyIGNwOw0KDQogICAgeyAoY3ApPShlbGVtZW50LT5j UG9pbnRzKVsoaSkrK107IGlmKCgoKGNwKSYweGZmZmZmYzAwKT09MHhkODAwKSkgeyB1aW50MTZf dCBfX2MyOyBpZigoaSk8KGVsZW1lbnQtPmNTaXplKSAmJiAoKChfX2MyPShlbGVtZW50LT5jUG9p bnRzKVsoaSldKSYweGZmZmZmYzAwKT09MHhkYzAwKSkgeyArKyhpKTsgKGNwKT0oKCgoY3ApKTw8 MTBVTCkrKF9fYzIpLSgoMHhkODAwPDwxMFVMKSsweGRjMDAtMHgxMDAwMCkpOyB9IGVsc2UgaWYo MCkgeyAoY3ApPTB4ZmZmZjsgfSB9IGVsc2UgaWYoKDApICYmICEoKHVpbnQzMl90KShjcCk8MHhk ODAwIHx8ICgodWludDMyX3QpKGNwKT4weGRmZmYgJiYgKHVpbnQzMl90KShjcCk8PTB4MTBmZmZm ICYmICEoKGNwKT49MHhmZGQwICYmICgodWludDMyX3QpKGNwKTw9MHhmZGVmIHx8ICgoY3ApJjB4 ZmZmZSk9PTB4ZmZmZSkgJiYgKHVpbnQzMl90KShjcCk8PTB4MTBmZmZmKSkpKSB7IChjcCk9MHhm ZmZmOyB9IH07DQoNCiAgICBDRSA9IHV0cmllX2dldDMyXzJfMih0LT5tYXBwaW5nLCBjcCwgX19u dWxsKTsNCg0KICAgIENFID0gdXBydl91Y2FfYWRkQ29udHJhY3Rpb24odCwgQ0UsIGVsZW1lbnQs IHN0YXR1cyk7DQogIH0gZWxzZSB7DQoNCiAgICBDRSA9IHV0cmllX2dldDMyXzJfMih0LT5tYXBw aW5nLCBlbGVtZW50LT5jUG9pbnRzWzBdLCBfX251bGwpOw0KDQogICAgaWYoIENFICE9IDB4RjAw MDAwMDApIHsNCiAgICAgIGlmKCgoKCgoKENFKSkmMHhGMDAwMDAwMCk+PjI4KT09MHhGKSAmJiAo KCgoKChDRSkpJjB4MEYwMDAwMDApPj4yNCkgPT0gQ09OVFJBQ1RJT05fVEFHKXx8KCgoKChDRSkp JjB4MEYwMDAwMDApPj4yNCkgPT0gU1BFQ19QUk9DX1RBRykpKSApIHsNCiAgICAgICAgaWYoISgo KCgoKGVsZW1lbnQtPm1hcENFKSkmMHhGMDAwMDAwMCk+PjI4KT09MHhGKSAmJiAoKCgoKGVsZW1l bnQtPm1hcENFKSkmMHgwRjAwMDAwMCk+PjI0KSA9PSBTUEVDX1BST0NfVEFHKSkpIHsNCg0KICAg ICAgICAgICAgdXBydl9jbnR0YWJfc2V0Q29udHJhY3Rpb25fMl8yKHQtPmNvbnRyYWN0aW9ucywg Q0UsIDAsIDAsIGVsZW1lbnQtPm1hcENFLCBzdGF0dXMpOw0KDQogICAgICAgICAgICB1cHJ2X2Nu dHRhYl9jaGFuZ2VMYXN0Q0VfMl8yKHQtPmNvbnRyYWN0aW9ucywgQ0UsIGVsZW1lbnQtPm1hcENF LCBzdGF0dXMpOw0KICAgICAgICB9DQogICAgICB9IGVsc2Ugew0KDQogICAgICAgIHV0cmllX3Nl dDMyXzJfMih0LT5tYXBwaW5nLCBlbGVtZW50LT5jUG9pbnRzWzBdLCBlbGVtZW50LT5tYXBDRSk7 DQoNCg0KDQoNCiAgICAgIH0NCiAgICB9IGVsc2Ugew0KDQogICAgICB1dHJpZV9zZXQzMl8yXzIo dC0+bWFwcGluZywgZWxlbWVudC0+Y1BvaW50c1swXSwgZWxlbWVudC0+bWFwQ0UpOw0KICAgIH0N CiAgfQ0KICByZXR1cm4gQ0U7DQp9DQoNCg0KZXh0ZXJuICJDIiB1aW50MzJfdA0KdXBydl91Y2Ff YWRkQW5FbGVtZW50XzJfMih0ZW1wVUNBVGFibGUgKnQsIFVDQUVsZW1lbnRzICplbGVtZW50LCBV RXJyb3JDb2RlICpzdGF0dXMpIHsNCiAgRXhwYW5zaW9uVGFibGUgKmV4cGFuc2lvbnMgPSB0LT5l eHBhbnNpb25zOw0KDQogIHVpbnQzMl90IGkgPSAxOw0KICB1aW50MzJfdCBleHBhbnNpb24gPSAw Ow0KICB1aW50MzJfdCBDRTsNCg0KICBpZihVX0ZBSUxVUkUoKnN0YXR1cykpIHsNCiAgICAgIHJl dHVybiAweEZGRkY7DQogIH0NCiAgaWYoZWxlbWVudC0+bm9PZkNFcyA9PSAxKSB7DQogICAgaWYo ZWxlbWVudC0+aXNUaGFpID09IDApIHsNCiAgICAgIGVsZW1lbnQtPm1hcENFID0gZWxlbWVudC0+ Q0VzWzBdOw0KICAgIH0gZWxzZSB7DQogICAgICBleHBhbnNpb24gPSAodWludDMyX3QpKDB4RjAw MDAwMDAgfCAoVEhBSV9UQUc8PDI0KQ0KICAgICAgICB8ICgodXBydl91Y2FfYWRkRXhwYW5zaW9u KGV4cGFuc2lvbnMsIGVsZW1lbnQtPkNFc1swXSwgc3RhdHVzKSsoKCgoc2l6ZW9mKFVDQVRhYmxl SGVhZGVyKSkrKCgoKHNpemVvZihVQ0FUYWJsZUhlYWRlcikpJTQpIT0wKT8oNC0oc2l6ZW9mKFVD QVRhYmxlSGVhZGVyKSklNCk6MCkpKygoc2l6ZW9mKFVDb2xPcHRpb25TZXQpKSsoKCgoc2l6ZW9m KFVDb2xPcHRpb25TZXQpKSU0KSE9MCk/KDQtKHNpemVvZihVQ29sT3B0aW9uU2V0KSklNCk6MCkp KT4+MikpPDw0KQ0KICAgICAgICB8IDB4MSk7DQogICAgICBlbGVtZW50LT5tYXBDRSA9IGV4cGFu c2lvbjsNCiAgICB9DQogIH0gZWxzZSB7DQojIDEwMjcgInVjb2xfZWxtLmNwcCINCiAgICBpZihl bGVtZW50LT5ub09mQ0VzID09IDINCiAgICAgICYmICgoKGVsZW1lbnQtPkNFc1sxXSkgJiAweEMw KSA9PSAweEMwKQ0KICAgICAgJiYgKGVsZW1lbnQtPkNFc1sxXSAmICh+KDB4RkYgPDwgMjQgfCAw eEMwKSkpID09IDANCiAgICAgICYmICgoKGVsZW1lbnQtPkNFc1swXT4+OCkgJiAweEZGKSA9PSBV Q09MX0JZVEVfQ09NTU9OKQ0KICAgICAgJiYgKChlbGVtZW50LT5DRXNbMF0gJiAweEZGKSA9PSBV Q09MX0JZVEVfQ09NTU9OKQ0KICAgICAgKSB7DQoNCg0KDQogICAgICBlbGVtZW50LT5tYXBDRSA9 IDB4RjAwMDAwMDAgfCAoTE9OR19QUklNQVJZX1RBRzw8MjQpDQogICAgICAgIHwgKChlbGVtZW50 LT5DRXNbMF0+PjgpICYgMHhGRkZGMDApDQogICAgICAgIHwgKChlbGVtZW50LT5DRXNbMV0+PjI0 KSAmIDB4RkYpOw0KICAgIH0gZWxzZSB7DQogICAgICBleHBhbnNpb24gPSAodWludDMyX3QpKDB4 RjAwMDAwMDAgfCAoRVhQQU5TSU9OX1RBRzw8MjQpDQogICAgICAgIHwgKCh1cHJ2X3VjYV9hZGRF eHBhbnNpb24oZXhwYW5zaW9ucywgZWxlbWVudC0+Q0VzWzBdLCBzdGF0dXMpKygoKChzaXplb2Yo VUNBVGFibGVIZWFkZXIpKSsoKCgoc2l6ZW9mKFVDQVRhYmxlSGVhZGVyKSklNCkhPTApPyg0LShz aXplb2YoVUNBVGFibGVIZWFkZXIpKSU0KTowKSkrKChzaXplb2YoVUNvbE9wdGlvblNldCkpKygo KChzaXplb2YoVUNvbE9wdGlvblNldCkpJTQpIT0wKT8oNC0oc2l6ZW9mKFVDb2xPcHRpb25TZXQp KSU0KTowKSkpPj4yKSk8PDQpDQogICAgICAgICYgMHhGRkZGRjApOw0KDQogICAgICBmb3IoaSA9 IDE7IGk8ZWxlbWVudC0+bm9PZkNFczsgaSsrKSB7DQogICAgICAgIHVwcnZfdWNhX2FkZEV4cGFu c2lvbihleHBhbnNpb25zLCBlbGVtZW50LT5DRXNbaV0sIHN0YXR1cyk7DQogICAgICB9DQogICAg ICBpZihlbGVtZW50LT5ub09mQ0VzIDw9IDB4Rikgew0KICAgICAgICBleHBhbnNpb24gfD0gZWxl bWVudC0+bm9PZkNFczsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHVwcnZfdWNhX2FkZEV4cGFu c2lvbihleHBhbnNpb25zLCAwLCBzdGF0dXMpOw0KICAgICAgfQ0KICAgICAgZWxlbWVudC0+bWFw Q0UgPSBleHBhbnNpb247DQogICAgICB1cHJ2X3VjYV9zZXRNYXhFeHBhbnNpb24oZWxlbWVudC0+ Q0VzW2VsZW1lbnQtPm5vT2ZDRXMgLSAxXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAodWludDhfdCllbGVtZW50LT5ub09mQ0VzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHQtPm1heEV4cGFuc2lvbnMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh dHVzKTsNCiAgICAgIGlmKCgoKCh1aW50MzJfdCkoZWxlbWVudC0+Y1BvaW50c1swXSkgLSAweDEx MDApIDw9ICgweDExMTIgLSAweDExMDApKSB8fCAoKCh1aW50MzJfdCkoZWxlbWVudC0+Y1BvaW50 c1swXSkgLSAweDExNjEpIDw9ICgweDExNzUgLSAweDExNjEpKSB8fCAoKCh1aW50MzJfdCkoZWxl bWVudC0+Y1BvaW50c1swXSkgLSAweDExQTgpIDw9ICgweDExQzIgLSAweDExQTgpKSkpIHsNCiAg ICAgICAgdC0+aW1hZ2UtPmphbW9TcGVjaWFsID0gMTsNCiAgICAgICAgdXBydl91Y2Ffc2V0TWF4 SmFtb0V4cGFuc2lvbihlbGVtZW50LT5jUG9pbnRzWzBdLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZWxlbWVudC0+Q0VzW2VsZW1lbnQtPm5vT2ZDRXMgLSAxXSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90KWVsZW1lbnQtPm5vT2ZDRXMsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LT5tYXhKYW1vRXhwYW5zaW9ucywNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyk7DQogICAgICB9DQogICAgfQ0KICB9 DQoNCg0KDQoNCg0KICBpZihlbGVtZW50LT5wcmVmaXhTaXplIT0wKSB7DQoNCg0KDQoNCg0KICAg IFVDQUVsZW1lbnRzICpjb21wb3NlZCA9IChVQ0FFbGVtZW50cyAqKXVwcnZfbWFsbG9jKHNpemVv ZihVQ0FFbGVtZW50cykpOw0KDQogICAgaWYgKGNvbXBvc2VkID09IF9fbnVsbCkgew0KICAgICAg ICAqc3RhdHVzID0gVV9NRU1PUllfQUxMT0NBVElPTl9FUlJPUjsNCiAgICAgICAgcmV0dXJuIDA7 DQogICAgfQ0KICAgIDo6IG1lbWNweShjb21wb3NlZCwgZWxlbWVudCwgc2l6ZW9mKFVDQUVsZW1l bnRzKSk7DQogICAgY29tcG9zZWQtPmNQb2ludHMgPSBjb21wb3NlZC0+dWNoYXJzOw0KICAgIGNv bXBvc2VkLT5wcmVmaXggPSBjb21wb3NlZC0+cHJlZml4Q2hhcnM7DQoNCiAgICBjb21wb3NlZC0+ cHJlZml4U2l6ZSA9IHVub3JtX25vcm1hbGl6ZV8yXzIoZWxlbWVudC0+cHJlZml4LCBlbGVtZW50 LT5wcmVmaXhTaXplLCBVTk9STV9ORkMsIDAsIGNvbXBvc2VkLT5wcmVmaXgsIDEyOCwgc3RhdHVz KTsNCg0KDQogICAgaWYodC0+cHJlZml4TG9va3VwICE9IF9fbnVsbCkgew0KICAgICAgVUNBRWxl bWVudHMgKnVDRSA9IChVQ0FFbGVtZW50cyAqKXVoYXNoX2dldF8yXzIodC0+cHJlZml4TG9va3Vw LCBlbGVtZW50KTsNCiAgICAgIGlmKHVDRSAhPSBfX251bGwpIHsNCiAgICAgICAgZWxlbWVudC0+ bWFwQ0UgPSB1cHJ2X3VjYV9hZGRQcmVmaXgodCwgdUNFLT5tYXBDRSwgZWxlbWVudCwgc3RhdHVz KTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIGVsZW1lbnQtPm1hcENFID0gdXBydl91Y2FfYWRk UHJlZml4KHQsIDB4RjAwMDAwMDAsIGVsZW1lbnQsIHN0YXR1cyk7DQogICAgICAgIHVDRSA9IChV Q0FFbGVtZW50cyAqKXVwcnZfbWFsbG9jKHNpemVvZihVQ0FFbGVtZW50cykpOw0KDQogICAgICAg IGlmICh1Q0UgPT0gX19udWxsKSB7DQogICAgICAgICAgICAqc3RhdHVzID0gVV9NRU1PUllfQUxM T0NBVElPTl9FUlJPUjsNCiAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICB9DQogICAgICAg IDo6IG1lbWNweSh1Q0UsIGVsZW1lbnQsIHNpemVvZihVQ0FFbGVtZW50cykpOw0KICAgICAgICB1 Q0UtPmNQb2ludHMgPSB1Q0UtPnVjaGFyczsNCiAgICAgICAgdWhhc2hfcHV0XzJfMih0LT5wcmVm aXhMb29rdXAsIHVDRSwgdUNFLCBzdGF0dXMpOw0KICAgICAgfQ0KICAgICAgaWYoY29tcG9zZWQt PnByZWZpeFNpemUgIT0gZWxlbWVudC0+cHJlZml4U2l6ZSB8fCA6OiBtZW1jbXAoY29tcG9zZWQt PnByZWZpeCwgZWxlbWVudC0+cHJlZml4LGVsZW1lbnQtPnByZWZpeFNpemUpKSB7DQoNCiAgICAg ICAgY29tcG9zZWQtPm1hcENFID0gdXBydl91Y2FfYWRkUHJlZml4KHQsIGVsZW1lbnQtPm1hcENF LCBjb21wb3NlZCwgc3RhdHVzKTsNCiAgICAgIH0NCiAgICB9DQogICAgdXBydl9mcmVlKGNvbXBv c2VkKTsNCiAgfQ0KDQoNCg0KDQogIGlmKGVsZW1lbnQtPmNTaXplID4gMSAmJiAhKGVsZW1lbnQt PmNTaXplPT0yICYmICgoKGVsZW1lbnQtPmNQb2ludHNbMF0pJjB4ZmZmZmZjMDApPT0weGQ4MDAp ICYmICgoKGVsZW1lbnQtPmNQb2ludHNbMV0pJjB4ZmZmZmZjMDApPT0weGRjMDApKSkgew0KICAg IFVuaWNvZGVTdHJpbmcgc291cmNlKGVsZW1lbnQtPmNQb2ludHMsIGVsZW1lbnQtPmNTaXplKTsN CiAgICBDYW5vbmljYWxJdGVyYXRvciBpdChzb3VyY2UsICpzdGF0dXMpOw0KICAgIHNvdXJjZSA9 IGl0Lm5leHQoKTsNCiAgICB3aGlsZShzb3VyY2UubGVuZ3RoKCkgPiAwKSB7DQogICAgICBpZihO b3JtYWxpemVyOjpxdWlja0NoZWNrKHNvdXJjZSwgVU5PUk1fRkNELCAqc3RhdHVzKSAhPSBVTk9S TV9OTykgew0KICAgICAgICBlbGVtZW50LT5jU2l6ZSA9IHNvdXJjZS5leHRyYWN0KGVsZW1lbnQt PmNQb2ludHMsIDEyOCwgKnN0YXR1cyk7DQogICAgICAgIHVwcnZfdWNhX2ZpbmFsaXplQWRkaXRp b24odCwgZWxlbWVudCwgc3RhdHVzKTsNCiAgICAgIH0NCiAgICAgIHNvdXJjZSA9IGl0Lm5leHQo KTsNCiAgICB9DQogICAgQ0UgPSBlbGVtZW50LT5tYXBDRTsNCiAgfSBlbHNlIHsNCiAgICAgIENF ID0gdXBydl91Y2FfZmluYWxpemVBZGRpdGlvbih0LCBlbGVtZW50LCBzdGF0dXMpOw0KICB9DQoN CiAgcmV0dXJuIENFOw0KfQ0KDQoNCg0Kdm9pZCB1cHJ2X3VjYV9nZXRNYXhFeHBhbnNpb25KYW1v KFVOZXdUcmllICptYXBwaW5nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1h eEV4cGFuc2lvblRhYmxlICptYXhleHBhbnNpb24sDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTWF4SmFtb0V4cGFuc2lvblRhYmxlICptYXhqYW1vZXhwYW5zaW9uLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVCb29sIGphbW9zcGVjaWFsLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFVFcnJvckNvZGUgKnN0YXR1cykNCnsNCiAgY29uc3Qg dWludDMyX3QgVkJBU0UgPSAweDExNjE7DQogIGNvbnN0IHVpbnQzMl90IFRCQVNFID0gMHgxMUE4 Ow0KICBjb25zdCB1aW50MzJfdCBWQ09VTlQgPSAyMTsNCiAgY29uc3QgdWludDMyX3QgVENPVU5U ID0gMjg7DQoNCiAgdWludDMyX3QgdiA9IFZCQVNFICsgVkNPVU5UIC0gMTsNCiAgdWludDMyX3Qg dCA9IFRCQVNFICsgVENPVU5UIC0gMTsNCiAgdWludDMyX3QgY2U7DQoNCiAgd2hpbGUgKHYgPj0g VkJBU0UpIHsNCg0KICAgICAgY2UgPSB1dHJpZV9nZXQzMl8yXzIobWFwcGluZywgdiwgX19udWxs KTsNCiAgICAgIGlmIChjZSA8IDB4RjAwMDAwMDApIHsNCiAgICAgICAgICB1cHJ2X3VjYV9zZXRN YXhFeHBhbnNpb24oY2UsIDIsIG1heGV4cGFuc2lvbiwgc3RhdHVzKTsNCiAgICAgIH0NCiAgICAg IHYgLS07DQogIH0NCg0KICB3aGlsZSAodCA+PSBUQkFTRSkNCiAgew0KDQogICAgICBjZSA9IHV0 cmllX2dldDMyXzJfMihtYXBwaW5nLCB0LCBfX251bGwpOw0KICAgICAgaWYgKGNlIDwgMHhGMDAw MDAwMCkgew0KICAgICAgICAgIHVwcnZfdWNhX3NldE1heEV4cGFuc2lvbihjZSwgMywgbWF4ZXhw YW5zaW9uLCBzdGF0dXMpOw0KICAgICAgfQ0KICAgICAgdCAtLTsNCiAgfQ0KDQogIGlmIChqYW1v c3BlY2lhbCkgew0KDQogICAgICBpbnQgY291bnQgPSBtYXhqYW1vZXhwYW5zaW9uLT5wb3NpdGlv bjsNCiAgICAgIHVpbnQ4X3QgbWF4VFNpemUgPSAodWludDhfdCkobWF4amFtb2V4cGFuc2lvbi0+ bWF4TFNpemUgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhqYW1vZXhw YW5zaW9uLT5tYXhWU2l6ZSArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h eGphbW9leHBhbnNpb24tPm1heFRTaXplKTsNCiAgICAgIHVpbnQ4X3QgbWF4VlNpemUgPSAodWlu dDhfdCkobWF4amFtb2V4cGFuc2lvbi0+bWF4TFNpemUgKw0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtYXhqYW1vZXhwYW5zaW9uLT5tYXhWU2l6ZSk7DQoNCiAgICAgIHdoaWxl IChjb3VudCA+IDApIHsNCiAgICAgICAgICBjb3VudCAtLTsNCiAgICAgICAgICBpZiAoKihtYXhq YW1vZXhwYW5zaW9uLT5pc1YgKyBjb3VudCkgPT0gMSkgew0KICAgICAgICAgICAgICAgIHVwcnZf dWNhX3NldE1heEV4cGFuc2lvbigNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KihtYXhqYW1vZXhwYW5zaW9uLT5lbmRFeHBhbnNpb25DRSArIGNvdW50KSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWF4VlNpemUsIG1heGV4cGFuc2lvbiwgc3RhdHVzKTsN CiAgICAgICAgICB9DQogICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgdXBydl91Y2Ff c2V0TWF4RXhwYW5zaW9uKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKG1h eGphbW9leHBhbnNpb24tPmVuZEV4cGFuc2lvbkNFICsgY291bnQpLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtYXhUU2l6ZSwgbWF4ZXhwYW5zaW9uLCBzdGF0dXMpOw0KICAg ICAgICAgIH0NCiAgICAgIH0NCiAgfQ0KfQ0KDQpleHRlcm4gIkMiIHsNCnN0YXRpYyBpbmxpbmUg dWludDMyX3QNCmdldEZvbGRlZFZhbHVlKFVOZXdUcmllICp0cmllLCBVQ2hhcjMyIHN0YXJ0LCBp bnQzMl90IG9mZnNldCkNCnsNCiAgdWludDMyX3QgdmFsdWU7DQogIHVpbnQzMl90IHRhZzsNCiAg VUNoYXIzMiBsaW1pdDsNCiAgVUJvb2wgaW5CbG9ja1plcm87DQoNCiAgbGltaXQ9c3RhcnQrMHg0 MDA7DQogIHdoaWxlKHN0YXJ0PGxpbWl0KSB7DQogICAgICB2YWx1ZT11dHJpZV9nZXQzMl8yXzIo dHJpZSwgc3RhcnQsICZpbkJsb2NrWmVybyk7DQogICAgICB0YWcgPSAoKCh2YWx1ZSkmMHgwRjAw MDAwMCk+PjI0KTsNCiAgICAgIGlmKGluQmxvY2taZXJvID09IDEpIHsNCiAgICAgICAgICBzdGFy dCs9VVRSSUVfREFUQV9CTE9DS19MRU5HVEg7DQogICAgICB9IGVsc2UgaWYoISgoKCgodmFsdWUp JjB4RjAwMDAwMDApPj4yOCk9PTB4RikgJiYgKHRhZyA9PSBJTVBMSUNJVF9UQUcgfHwgdGFnID09 IE5PVF9GT1VORF9UQUcpKSkgew0KIyAxMjIyICJ1Y29sX2VsbS5jcHAiDQogICAgICAgICAgcmV0 dXJuICh1aW50MzJfdCkoMHhGMDAwMDAwMCB8IChTVVJST0dBVEVfVEFHPDwyNCkgfCBvZmZzZXQp Ow0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgICArK3N0YXJ0Ow0KICAgICAgfQ0KICB9DQogIHJl dHVybiAwOw0KfQ0KfQ0KIyAxMjUyICJ1Y29sX2VsbS5jcHAiDQpleHRlcm4gIkMiIFVDQVRhYmxl SGVhZGVyKg0KdXBydl91Y2FfYXNzZW1ibGVUYWJsZV8yXzIodGVtcFVDQVRhYmxlICp0LCBVRXJy b3JDb2RlICpzdGF0dXMpIHsNCg0KICAgIFVOZXdUcmllICptYXBwaW5nID0gdC0+bWFwcGluZzsN CiAgICBFeHBhbnNpb25UYWJsZSAqZXhwYW5zaW9ucyA9IHQtPmV4cGFuc2lvbnM7DQogICAgQ250 VGFibGUgKmNvbnRyYWN0aW9ucyA9IHQtPmNvbnRyYWN0aW9uczsNCiAgICBNYXhFeHBhbnNpb25U YWJsZSAqbWF4ZXhwYW5zaW9uID0gdC0+bWF4RXhwYW5zaW9uczsNCg0KICAgIGlmKFVfRkFJTFVS RSgqc3RhdHVzKSkgew0KICAgICAgICByZXR1cm4gX19udWxsOw0KICAgIH0NCg0KICAgIHVpbnQz Ml90IGJlZm9yZUNvbnRyYWN0aW9ucyA9ICh1aW50MzJfdCkoKCgoKHNpemVvZihVQ0FUYWJsZUhl YWRlcikpKygoKChzaXplb2YoVUNBVGFibGVIZWFkZXIpKSU0KSE9MCk/KDQtKHNpemVvZihVQ0FU YWJsZUhlYWRlcikpJTQpOjApKSsoKHNpemVvZihVQ29sT3B0aW9uU2V0KSkrKCgoKHNpemVvZihV Q29sT3B0aW9uU2V0KSklNCkhPTApPyg0LShzaXplb2YoVUNvbE9wdGlvblNldCkpJTQpOjApKSkr KChleHBhbnNpb25zLT5wb3NpdGlvbipzaXplb2YodWludDMyX3QpKSsoKCgoZXhwYW5zaW9ucy0+ cG9zaXRpb24qc2l6ZW9mKHVpbnQzMl90KSklNCkhPTApPyg0LShleHBhbnNpb25zLT5wb3NpdGlv bipzaXplb2YodWludDMyX3QpKSU0KTowKSkpL3NpemVvZihVQ2hhcikpOw0KDQogICAgaW50MzJf dCBjb250cmFjdGlvbnNTaXplID0gMDsNCiAgICBjb250cmFjdGlvbnNTaXplID0gdXBydl9jbnR0 YWJfY29uc3RydWN0VGFibGVfMl8yKGNvbnRyYWN0aW9ucywgYmVmb3JlQ29udHJhY3Rpb25zLCBz dGF0dXMpOw0KDQoNCg0KDQogICAgdXBydl91Y2FfZ2V0TWF4RXhwYW5zaW9uSmFtbyhtYXBwaW5n LCBtYXhleHBhbnNpb24sIHQtPm1heEphbW9FeHBhbnNpb25zLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdC0+aW1hZ2UtPmphbW9TcGVjaWFsLCBzdGF0dXMpOw0KDQoNCg0KDQoN Cg0KDQogICAgaW50MzJfdCBtYXBwaW5nU2l6ZSA9IHV0cmllX3NlcmlhbGl6ZV8yXzIobWFwcGlu ZywgX19udWxsLCAwLCBnZXRGb2xkZWRWYWx1ZSAsIDAsIHN0YXR1cyk7DQoNCiAgICB1aW50MzJf dCB0YWJsZU9mZnNldCA9IDA7DQogICAgdWludDhfdCAqZGF0YVN0YXJ0Ow0KDQoNCg0KICAgIHVp bnQzMl90IHRvQWxsb2NhdGUgPSh1aW50MzJfdCkoKCgoc2l6ZW9mKFVDQVRhYmxlSGVhZGVyKSkr KCgoKHNpemVvZihVQ0FUYWJsZUhlYWRlcikpJTQpIT0wKT8oNC0oc2l6ZW9mKFVDQVRhYmxlSGVh ZGVyKSklNCk6MCkpKygoc2l6ZW9mKFVDb2xPcHRpb25TZXQpKSsoKCgoc2l6ZW9mKFVDb2xPcHRp b25TZXQpKSU0KSE9MCk/KDQtKHNpemVvZihVQ29sT3B0aW9uU2V0KSklNCk6MCkpKSsNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZXhwYW5zaW9ucy0+cG9zaXRpb24qc2l6 ZW9mKHVpbnQzMl90KSkrKCgoKGV4cGFuc2lvbnMtPnBvc2l0aW9uKnNpemVvZih1aW50MzJfdCkp JTQpIT0wKT8oNC0oZXhwYW5zaW9ucy0+cG9zaXRpb24qc2l6ZW9mKHVpbnQzMl90KSklNCk6MCkp Kw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChtYXBwaW5nU2l6ZSkrKCgo KG1hcHBpbmdTaXplKSU0KSE9MCk/KDQtKG1hcHBpbmdTaXplKSU0KTowKSkrDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNvbnRyYWN0aW9uc1NpemUqKHNpemVvZihVQ2hh cikrc2l6ZW9mKHVpbnQzMl90KSkpKygoKChjb250cmFjdGlvbnNTaXplKihzaXplb2YoVUNoYXIp K3NpemVvZih1aW50MzJfdCkpKSU0KSE9MCk/KDQtKGNvbnRyYWN0aW9uc1NpemUqKHNpemVvZihV Q2hhcikrc2l6ZW9mKHVpbnQzMl90KSkpJTQpOjApKSsNCg0KDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKyAoKG1heGV4cGFuc2lvbi0+cG9zaXRpb24gKiBzaXplb2YodWlu dDMyX3QpKSsoKCgobWF4ZXhwYW5zaW9uLT5wb3NpdGlvbiAqIHNpemVvZih1aW50MzJfdCkpJTQp IT0wKT8oNC0obWF4ZXhwYW5zaW9uLT5wb3NpdGlvbiAqIHNpemVvZih1aW50MzJfdCkpJTQpOjAp KSArDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG1heGV4cGFuc2lv bi0+cG9zaXRpb24gKiBzaXplb2YodWludDhfdCkpKygoKChtYXhleHBhbnNpb24tPnBvc2l0aW9u ICogc2l6ZW9mKHVpbnQ4X3QpKSU0KSE9MCk/KDQtKG1heGV4cGFuc2lvbi0+cG9zaXRpb24gKiBz aXplb2YodWludDhfdCkpJTQpOjApKSArDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKCgxMDU2KSsoKCgoMTA1NiklNCkhPTApPyg0LSgxMDU2KSU0KTowKSkgKw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoMTA1NikrKCgoKDEwNTYpJTQpIT0wKT8o NC0oMTA1NiklNCk6MCkpKTsNCg0KDQogICAgZGF0YVN0YXJ0ID0gKHVpbnQ4X3QgKil1cHJ2X21h bGxvYyh0b0FsbG9jYXRlKTsNCg0KICAgIGlmIChkYXRhU3RhcnQgPT0gX19udWxsKSB7DQogICAg ICAgICpzdGF0dXMgPSBVX01FTU9SWV9BTExPQ0FUSU9OX0VSUk9SOw0KICAgICAgICByZXR1cm4g X19udWxsOw0KICAgIH0NCg0KICAgIFVDQVRhYmxlSGVhZGVyICpteURhdGEgPSAoVUNBVGFibGVI ZWFkZXIgKilkYXRhU3RhcnQ7DQogICAgOjogbWVtY3B5KG15RGF0YSwgdC0+aW1hZ2UsIHNpemVv ZihVQ0FUYWJsZUhlYWRlcikpOw0KDQogICAgbXlEYXRhLT5jb250cmFjdGlvblNpemUgPSBjb250 cmFjdGlvbnNTaXplOw0KDQogICAgdGFibGVPZmZzZXQgKz0gKHVpbnQzMl90KSgoKHNpemVvZihV Q0FUYWJsZUhlYWRlcikpKygoKChzaXplb2YoVUNBVGFibGVIZWFkZXIpKSU0KSE9MCk/KDQtKHNp emVvZihVQ0FUYWJsZUhlYWRlcikpJTQpOjApKSk7DQoNCiAgICBteURhdGEtPm9wdGlvbnMgPSB0 YWJsZU9mZnNldDsNCiAgICA6OiBtZW1jcHkoZGF0YVN0YXJ0K3RhYmxlT2Zmc2V0LCB0LT5vcHRp b25zLCBzaXplb2YoVUNvbE9wdGlvblNldCkpOw0KICAgIHRhYmxlT2Zmc2V0ICs9ICh1aW50MzJf dCkoKChzaXplb2YoVUNvbE9wdGlvblNldCkpKygoKChzaXplb2YoVUNvbE9wdGlvblNldCkpJTQp IT0wKT8oNC0oc2l6ZW9mKFVDb2xPcHRpb25TZXQpKSU0KTowKSkpOw0KDQoNCg0KICAgIG15RGF0 YS0+ZXhwYW5zaW9uID0gdGFibGVPZmZzZXQ7DQogICAgbWVtY3B5KGRhdGFTdGFydCt0YWJsZU9m ZnNldCwgZXhwYW5zaW9ucy0+Q0VzLCBleHBhbnNpb25zLT5wb3NpdGlvbipzaXplb2YodWludDMy X3QpKTsNCiAgICB0YWJsZU9mZnNldCArPSAodWludDMyX3QpKCgoZXhwYW5zaW9ucy0+cG9zaXRp b24qc2l6ZW9mKHVpbnQzMl90KSkrKCgoKGV4cGFuc2lvbnMtPnBvc2l0aW9uKnNpemVvZih1aW50 MzJfdCkpJTQpIT0wKT8oNC0oZXhwYW5zaW9ucy0+cG9zaXRpb24qc2l6ZW9mKHVpbnQzMl90KSkl NCk6MCkpKTsNCg0KDQogICAgaWYoY29udHJhY3Rpb25zU2l6ZSAhPSAwKSB7DQoNCg0KICAgICAg bXlEYXRhLT5jb250cmFjdGlvbkluZGV4ID0gdGFibGVPZmZzZXQ7DQogICAgICBtZW1jcHkoZGF0 YVN0YXJ0K3RhYmxlT2Zmc2V0LCBjb250cmFjdGlvbnMtPmNvZGVQb2ludHMsIGNvbnRyYWN0aW9u c1NpemUqc2l6ZW9mKFVDaGFyKSk7DQogICAgICB0YWJsZU9mZnNldCArPSAodWludDMyX3QpKCgo Y29udHJhY3Rpb25zU2l6ZSpzaXplb2YoVUNoYXIpKSsoKCgoY29udHJhY3Rpb25zU2l6ZSpzaXpl b2YoVUNoYXIpKSU0KSE9MCk/KDQtKGNvbnRyYWN0aW9uc1NpemUqc2l6ZW9mKFVDaGFyKSklNCk6 MCkpKTsNCg0KDQoNCiAgICAgIG15RGF0YS0+Y29udHJhY3Rpb25DRXMgPSB0YWJsZU9mZnNldDsN CiAgICAgIG1lbWNweShkYXRhU3RhcnQrdGFibGVPZmZzZXQsIGNvbnRyYWN0aW9ucy0+Q0VzLCBj b250cmFjdGlvbnNTaXplKnNpemVvZih1aW50MzJfdCkpOw0KICAgICAgdGFibGVPZmZzZXQgKz0g KHVpbnQzMl90KSgoKGNvbnRyYWN0aW9uc1NpemUqc2l6ZW9mKHVpbnQzMl90KSkrKCgoKGNvbnRy YWN0aW9uc1NpemUqc2l6ZW9mKHVpbnQzMl90KSklNCkhPTApPyg0LShjb250cmFjdGlvbnNTaXpl KnNpemVvZih1aW50MzJfdCkpJTQpOjApKSk7DQogICAgfSBlbHNlIHsNCiAgICAgIG15RGF0YS0+ Y29udHJhY3Rpb25JbmRleCA9IDA7DQogICAgICBteURhdGEtPmNvbnRyYWN0aW9uSW5kZXggPSAw Ow0KICAgIH0NCg0KDQoNCg0KDQoNCiAgICBteURhdGEtPm1hcHBpbmdQb3NpdGlvbiA9IHRhYmxl T2Zmc2V0Ow0KICAgIHV0cmllX3NlcmlhbGl6ZV8yXzIobWFwcGluZywgZGF0YVN0YXJ0K3RhYmxl T2Zmc2V0LCB0b0FsbG9jYXRlLXRhYmxlT2Zmc2V0LCBnZXRGb2xkZWRWYWx1ZSwgMCwgc3RhdHVz KTsNCiMgMTM2MSAidWNvbF9lbG0uY3BwIg0KICAgIHRhYmxlT2Zmc2V0ICs9ICgobWFwcGluZ1Np emUpKygoKChtYXBwaW5nU2l6ZSklNCkhPTApPyg0LShtYXBwaW5nU2l6ZSklNCk6MCkpOw0KDQoN CiAgICBpbnQzMl90IGkgPSAwOw0KDQoNCiAgICBteURhdGEtPmVuZEV4cGFuc2lvbkNFID0gdGFi bGVPZmZzZXQ7DQogICAgbXlEYXRhLT5lbmRFeHBhbnNpb25DRUNvdW50ID0gbWF4ZXhwYW5zaW9u LT5wb3NpdGlvbjsNCg0KICAgIDo6IG1lbWNweShkYXRhU3RhcnQgKyB0YWJsZU9mZnNldCwgbWF4 ZXhwYW5zaW9uLT5lbmRFeHBhbnNpb25DRSArIDEsIG1heGV4cGFuc2lvbi0+cG9zaXRpb24gKiBz aXplb2YodWludDMyX3QpKTsNCg0KICAgIHRhYmxlT2Zmc2V0ICs9ICh1aW50MzJfdCkoKChtYXhl eHBhbnNpb24tPnBvc2l0aW9uICogc2l6ZW9mKHVpbnQzMl90KSkrKCgoKG1heGV4cGFuc2lvbi0+ cG9zaXRpb24gKiBzaXplb2YodWludDMyX3QpKSU0KSE9MCk/KDQtKG1heGV4cGFuc2lvbi0+cG9z aXRpb24gKiBzaXplb2YodWludDMyX3QpKSU0KTowKSkpOw0KICAgIG15RGF0YS0+ZXhwYW5zaW9u Q0VTaXplID0gdGFibGVPZmZzZXQ7DQogICAgOjogbWVtY3B5KGRhdGFTdGFydCArIHRhYmxlT2Zm c2V0LCBtYXhleHBhbnNpb24tPmV4cGFuc2lvbkNFU2l6ZSArIDEsIG1heGV4cGFuc2lvbi0+cG9z aXRpb24gKiBzaXplb2YodWludDhfdCkpOw0KDQogICAgdGFibGVPZmZzZXQgKz0gKHVpbnQzMl90 KSgoKG1heGV4cGFuc2lvbi0+cG9zaXRpb24gKiBzaXplb2YodWludDhfdCkpKygoKChtYXhleHBh bnNpb24tPnBvc2l0aW9uICogc2l6ZW9mKHVpbnQ4X3QpKSU0KSE9MCk/KDQtKG1heGV4cGFuc2lv bi0+cG9zaXRpb24gKiBzaXplb2YodWludDhfdCkpJTQpOjApKSk7DQoNCg0KICAgIHVwcnZfdWNh X3Vuc2FmZUNQQWRkQ0NOWih0LCBzdGF0dXMpOw0KICAgIGlmICh0LT5VQ0EgIT0gMCkgew0KICAg ICAgIGZvciAoaT0wOyBpPDEwNTY7IGkrKykgew0KICAgICAgICAgICB0LT51bnNhZmVDUFtpXSB8 PSB0LT5VQ0EtPnVuc2FmZUNQW2ldOw0KICAgICAgIH0NCiAgICB9DQogICAgbXlEYXRhLT51bnNh ZmVDUCA9IHRhYmxlT2Zmc2V0Ow0KICAgIDo6IG1lbWNweShkYXRhU3RhcnQgKyB0YWJsZU9mZnNl dCwgdC0+dW5zYWZlQ1AsIDEwNTYpOw0KICAgIHRhYmxlT2Zmc2V0ICs9ICgoMTA1NikrKCgoKDEw NTYpJTQpIT0wKT8oNC0oMTA1NiklNCk6MCkpOw0KDQoNCg0KICAgIGlmICh0LT5VQ0EgIT0gMCkg ew0KICAgICAgICBmb3IgKGk9MDsgaTwxMDU2OyBpKyspIHsNCiAgICAgICAgICAgIHQtPmNvbnRy RW5kQ1BbaV0gfD0gdC0+VUNBLT5jb250ckVuZENQW2ldOw0KICAgICAgICB9DQogICAgfQ0KICAg IG15RGF0YS0+Y29udHJFbmRDUCA9IHRhYmxlT2Zmc2V0Ow0KICAgIDo6IG1lbWNweShkYXRhU3Rh cnQgKyB0YWJsZU9mZnNldCwgdC0+Y29udHJFbmRDUCwgMTA1Nik7DQogICAgdGFibGVPZmZzZXQg Kz0gKCgxMDU2KSsoKCgoMTA1NiklNCkhPTApPyg0LSgxMDU2KSU0KTowKSk7DQoNCiAgICBpZih0 YWJsZU9mZnNldCAhPSB0b0FsbG9jYXRlKSB7DQoNCg0KDQogICAgICAgICpzdGF0dXMgPSBVX0lO VEVSTkFMX1BST0dSQU1fRVJST1I7DQogICAgICAgIHVwcnZfZnJlZShkYXRhU3RhcnQpOw0KICAg ICAgICByZXR1cm4gMDsNCiAgICB9DQoNCiAgICBteURhdGEtPnNpemUgPSB0YWJsZU9mZnNldDsN Cg0KDQoNCiAgICByZXR1cm4gbXlEYXRhOw0KfQ0KDQoNCnN0cnVjdCBlbnVtU3RydWN0IHsNCiAg dGVtcFVDQVRhYmxlICp0Ow0KICBVQ29sbGF0b3IgKnRlbXBDb2xsOw0KICBVQ29sbGF0aW9uRWxl bWVudHMqIGNvbEVsOw0KICBpbnQzMl90IG5vT2ZDbG9zdXJlczsNCiAgVUVycm9yQ29kZSAqc3Rh dHVzOw0KfTsNCmV4dGVybiAiQyIgew0Kc3RhdGljIFVCb29sDQpfZW51bUNhdGVnb3J5UmFuZ2VD bG9zdXJlQ2F0ZWdvcnkoY29uc3Qgdm9pZCAqY29udGV4dCwgVUNoYXIzMiBzdGFydCwgVUNoYXIz MiBsaW1pdCwgVUNoYXJDYXRlZ29yeSB0eXBlKSB7DQoNCiAgVUVycm9yQ29kZSAqc3RhdHVzID0g KChlbnVtU3RydWN0ICopY29udGV4dCktPnN0YXR1czsNCiAgdGVtcFVDQVRhYmxlICp0ID0gKChl bnVtU3RydWN0ICopY29udGV4dCktPnQ7DQogIFVDb2xsYXRvciAqdGVtcENvbGwgPSAoKGVudW1T dHJ1Y3QgKiljb250ZXh0KS0+dGVtcENvbGw7DQogIFVDb2xsYXRpb25FbGVtZW50cyogY29sRWwg PSAoKGVudW1TdHJ1Y3QgKiljb250ZXh0KS0+Y29sRWw7DQogIFVDQUVsZW1lbnRzIGVsOw0KICBV Q2hhciBkZWNvbXBbMjU2XSA9IHsgMCB9Ow0KICBpbnQzMl90IG5vT2ZEZWMgPSAwOw0KDQogIFVD aGFyMzIgdTMyID0gMDsNCiAgVUNoYXIgY29tcFsyXTsNCiAgdWludDMyX3QgbGVuID0gMDsNCg0K ICBpZiAodHlwZSAhPSBVX1VOQVNTSUdORUQgJiYgdHlwZSAhPSBVX1BSSVZBVEVfVVNFX0NIQVIp IHsNCiAgICBmb3IodTMyID0gc3RhcnQ7IHUzMiA8IGxpbWl0OyB1MzIrKykgew0KICAgICAgbm9P ZkRlYyA9IHVub3JtX2dldERlY29tcG9zaXRpb25fMl8yKHUzMiwgMCwgZGVjb21wLCAyNTYpOw0K DQoNCiAgICAgIGlmKG5vT2ZEZWMgPiAwKQ0KICAgICAgew0KICAgICAgICBsZW4gPSAwOw0KICAg ICAgICB7IGlmKCh1aW50MzJfdCkodTMyKTw9MHhmZmZmKSB7IChjb21wKVsobGVuKSsrXT0odWlu dDE2X3QpKHUzMik7IH0gZWxzZSB7IChjb21wKVsobGVuKSsrXT0odWludDE2X3QpKCgodTMyKT4+ MTApKzB4ZDdjMCk7IChjb21wKVsobGVuKSsrXT0odWludDE2X3QpKCgodTMyKSYweDNmZil8MHhk YzAwKTsgfSB9Ow0KICAgICAgICBpZih1Y29sX3N0cmNvbGxfMl8yKHRlbXBDb2xsLCBjb21wLCBs ZW4sIGRlY29tcCwgbm9PZkRlYykgIT0gVUNPTF9FUVVBTCkgew0KIyAxNDU4ICJ1Y29sX2VsbS5j cHAiDQogICAgICAgICAgKChlbnVtU3RydWN0ICopY29udGV4dCktPm5vT2ZDbG9zdXJlcysrOw0K ICAgICAgICAgIGVsLmNQb2ludHMgPSBkZWNvbXA7DQogICAgICAgICAgZWwuY1NpemUgPSBub09m RGVjOw0KICAgICAgICAgIGVsLm5vT2ZDRXMgPSAwOw0KICAgICAgICAgIGVsLnByZWZpeCA9IGVs LnByZWZpeENoYXJzOw0KICAgICAgICAgIGVsLnByZWZpeFNpemUgPSAwOw0KDQogICAgICAgICAg VUNBRWxlbWVudHMgKnByZWZpeD0oVUNBRWxlbWVudHMgKil1aGFzaF9nZXRfMl8yKHQtPnByZWZp eExvb2t1cCwgJmVsKTsNCiAgICAgICAgICBpZihwcmVmaXggPT0gX19udWxsKSB7DQogICAgICAg ICAgICBlbC5jUG9pbnRzID0gY29tcDsNCiAgICAgICAgICAgIGVsLmNTaXplID0gbGVuOw0KICAg ICAgICAgICAgZWwucHJlZml4ID0gZWwucHJlZml4Q2hhcnM7DQogICAgICAgICAgICBlbC5wcmVm aXhTaXplID0gMDsNCiAgICAgICAgICAgIGVsLm5vT2ZDRXMgPSAwOw0KICAgICAgICAgICAgdWNv bF9zZXRUZXh0XzJfMihjb2xFbCwgZGVjb21wLCBub09mRGVjLCBzdGF0dXMpOw0KICAgICAgICAg ICAgd2hpbGUoKGVsLkNFc1tlbC5ub09mQ0VzXSA9IHVjb2xfbmV4dF8yXzIoY29sRWwsIHN0YXR1 cykpICE9IDB4RkZGRkZGRkYpIHsNCiAgICAgICAgICAgICAgZWwubm9PZkNFcysrOw0KICAgICAg ICAgICAgfQ0KICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBlbC5jUG9pbnRzID0gY29t cDsNCiAgICAgICAgICAgIGVsLmNTaXplID0gbGVuOw0KICAgICAgICAgICAgZWwucHJlZml4ID0g ZWwucHJlZml4Q2hhcnM7DQogICAgICAgICAgICBlbC5wcmVmaXhTaXplID0gMDsNCiAgICAgICAg ICAgIGVsLm5vT2ZDRXMgPSAxOw0KICAgICAgICAgICAgZWwuQ0VzWzBdID0gcHJlZml4LT5tYXBD RTsNCg0KDQoNCg0KDQogICAgICAgICAgfQ0KICAgICAgICAgIGlmKCgoKCh1aW50MzJfdCkoZWwu Y1BvaW50c1swXSkgLSAweGU0MCkgPD0gKDB4ZTQ0IC0gMHhlNDApKSB8fCAoKCh1aW50MzJfdCko ZWwuY1BvaW50c1swXSkgLSAweGVjMCkgPD0gKDB4ZWM0IC0gMHhlYzApKSkpIHsNCiAgICAgICAg ICAgIGVsLmlzVGhhaSA9IDE7DQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGVsLmlz VGhhaSA9IDA7DQogICAgICAgICAgfQ0KDQogICAgICAgICAgdXBydl91Y2FfYWRkQW5FbGVtZW50 XzJfMih0LCAmZWwsIHN0YXR1cyk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICB9DQogIH0NCiAg cmV0dXJuIDE7DQp9DQp9DQoNCmV4dGVybiAiQyIgaW50MzJfdA0KdXBydl91Y2FfY2Fub25pY2Fs Q2xvc3VyZV8yXzIodGVtcFVDQVRhYmxlICp0LCBVRXJyb3JDb2RlICpzdGF0dXMpDQp7DQogIGVu dW1TdHJ1Y3QgY29udGV4dDsNCiAgY29udGV4dC5ub09mQ2xvc3VyZXMgPSAwOw0KICBpZihVX1NV Q0NFU1MoKnN0YXR1cykpIHsNCiAgICBVQ29sbGF0b3IgKnRlbXBDb2xsID0gX19udWxsOw0KICAg IHRlbXBVQ0FUYWJsZSAqdGVtcFRhYmxlID0gdXBydl91Y2FfY2xvbmVUZW1wVGFibGVfMl8yKHQs IHN0YXR1cyk7DQoNCiAgICBVQ0FUYWJsZUhlYWRlciAqdGVtcERhdGEgPSB1cHJ2X3VjYV9hc3Nl bWJsZVRhYmxlXzJfMih0ZW1wVGFibGUsIHN0YXR1cyk7DQogICAgdGVtcENvbGwgPSB1Y29sX2lu aXRDb2xsYXRvcl8yXzIodGVtcERhdGEsIDAsIHN0YXR1cyk7DQogICAgdXBydl91Y2FfY2xvc2VU ZW1wVGFibGVfMl8yKHRlbXBUYWJsZSk7DQoNCiAgICBpZihVX1NVQ0NFU1MoKnN0YXR1cykpIHsN CiAgICAgIHRlbXBDb2xsLT5yYiA9IF9fbnVsbDsNCiAgICAgIHRlbXBDb2xsLT5iaW5hcnkgPSBf X251bGw7DQogICAgICB0ZW1wQ29sbC0+cmVxdWVzdGVkTG9jYWxlID0gX19udWxsOw0KICAgICAg dGVtcENvbGwtPmhhc1JlYWxEYXRhID0gMTsNCiAgICB9IGVsc2UgaWYodGVtcERhdGEgIT0gMCkg ew0KICAgICAgdXBydl9mcmVlKHRlbXBEYXRhKTsNCiAgICB9DQoNCg0KICAgIFVDb2xsYXRpb25F bGVtZW50cyogY29sRWwgPSB1Y29sX29wZW5FbGVtZW50c18yXzIodGVtcENvbGwsIF9fbnVsbCwg MCwgc3RhdHVzKTsNCg0KICAgIGNvbnRleHQudCA9IHQ7DQogICAgY29udGV4dC50ZW1wQ29sbCA9 IHRlbXBDb2xsOw0KICAgIGNvbnRleHQuY29sRWwgPSBjb2xFbDsNCiAgICBjb250ZXh0LnN0YXR1 cyA9IHN0YXR1czsNCiAgICB1X2VudW1DaGFyVHlwZXNfMl8yKF9lbnVtQ2F0ZWdvcnlSYW5nZUNs b3N1cmVDYXRlZ29yeSwgJmNvbnRleHQpOw0KDQogICAgdWNvbF9jbG9zZUVsZW1lbnRzXzJfMihj b2xFbCk7DQogICAgdWNvbF9jbG9zZV8yXzIodGVtcENvbGwpOw0KICB9DQogIHJldHVybiBjb250 ZXh0Lm5vT2ZDbG9zdXJlczsNCn0NCg0KfQ0K