From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24650 invoked by alias); 22 Jan 2003 14:46:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 24630 invoked by uid 71); 22 Jan 2003 14:46:01 -0000 Resent-Date: 22 Jan 2003 14:46:01 -0000 Resent-Message-ID: <20030122144601.24629.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, kfredrik@cs.joensuu.fi Received: (qmail 23472 invoked by uid 48); 22 Jan 2003 14:37:01 -0000 Message-Id: <20030122143701.23471.qmail@sources.redhat.com> Date: Wed, 22 Jan 2003 14:46:00 -0000 From: kfredrik@cs.joensuu.fi Reply-To: kfredrik@cs.joensuu.fi To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/9401: g++ 3.1 and above produce internal compiler error when using built-in vector intrinsics X-SW-Source: 2003-01/txt/msg01197.txt.bz2 List-Id: >Number: 9401 >Category: c++ >Synopsis: g++ 3.1 and above produce internal compiler error when using built-in vector intrinsics >Confidential: no >Severity: serious >Priority: low >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Wed Jan 22 14:46:01 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Kimmo Fredriksson >Release: unknown-1.0 >Organization: >Environment: Linux version 2.4.18-10 processor : 0 vendor_id : GenuineIntel cpu family : 15 model : 2 model name : Intel(R) Pentium(R) 4 CPU 2.00GHz stepping : 4 cpu MHz : 1994.142 cache size : 512 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 2 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic epmtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm bogomips : 3971.48 >Description: NOTE: the following error does not appear if -O0 is used instead of -O3. g++ -msse -DVECLEN=128 -O3 -static bped.C In file included from bped.C:33: ssec-gnu.H:161:18: warning: #warning Shift right for count != 127 not imlemented! bped.C: In function `int bpedhw(unsigned char*, int, int, int, dpvec**)': bped.C:813: error: unable to find a register to spill in class `GENERAL_REGS' bped.C:813: error: this is the insn: (insn:HI 1957 1946 1963 19 0x40499478 (set (reg/v:SI 0 eax [483]) (subreg:SI (reg/v:V4SF 24 exmm3 [296]) 0)) 38 {*movsi_1} (nil) (expr_list:REG_DEAD (reg/v:V4SF 24 exmm3 [296]) (nil))) bped.C:813: internal compiler error: in spill_failure, at reload1.c:1920 Please submit a full bug report, with preprocessed source if appropriate. See for instructions. >How-To-Repeat: g++ -msse -DVECLEN=128 -O3 -static bped.ii >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="bped.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="bped.ii" IyAxICJicGVkLkMiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKIyAxICJi cGVkLkMiCiMgMTQgImJwZWQuQyIKIyAxICIvc3RhZmYva2ZyZWRyaWsvbG9jYWwvZ2NjLXNuYXBz aG90L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDEg MyA0CiMgMzcgIi9zdGFmZi9rZnJlZHJpay9sb2NhbC9nY2Mtc25hcHNob3QvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0CiMgMSAiL3Vzci9pbmNs dWRlL2ZlYXR1cmVzLmgiIDEgMyA0CiMgMjkxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMyA0 CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMgNAojIDI5MiAiL3Vzci9pbmNsdWRl L2ZlYXR1cmVzLmgiIDIgMyA0CiMgMzIwICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMyA0CiMg MSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMgNAojIDMyMSAiL3Vzci9pbmNsdWRlL2Zl YXR1cmVzLmgiIDIgMyA0CiMgMzggIi9zdGFmZi9rZnJlZHJpay9sb2NhbC9nY2Mtc25hcHNob3Qv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQK CmV4dGVybiAiQyIgewoKCgojIDEgIi9zdGFmZi9rZnJlZHJpay9sb2NhbC9nY2Mtc25hcHNob3Qv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0 CiMgMjEzICIvc3RhZmYva2ZyZWRyaWsvbG9jYWwvZ2NjLXNuYXBzaG90L2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgc2l6ZV90OwojIDQ0ICIvc3RhZmYva2ZyZWRyaWsvbG9jYWwvZ2NjLXNuYXBzaG90L2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDIgMyA0Cgoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMyA0CiMgMjkgIi91c3IvaW5jbHVkZS9i aXRzL3R5cGVzLmgiIDMgNAojIDEgIi9zdGFmZi9rZnJlZHJpay9sb2NhbC9nY2Mtc25hcHNob3Qv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0 CiMgMzAgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMyA0CgoKdHlwZWRlZiB1bnNpZ25l ZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoK X19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsK X19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91c3Iv aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0 eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQg X19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVm IHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoK X19leHRlbnNpb25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19l eHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5 cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0 eXBlZGVmIF9fdV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYg X191X2xvbmcgX19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9p bnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3Qg X19sb2ZmX3Q7CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlw ZWRlZiBfX3VfbG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5 cGVkZWYgX191X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsy XTsKICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpf X2NhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50 IF9fdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxv bmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYg aW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKCgoKdHlwZWRlZiBp bnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoK dHlwZWRlZiBsb25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtj bnRfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBf X2ZzYmxrY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVm IF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90 OwoKCnR5cGVkZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29m ZjY0X3Q7CgoKdHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQg bG9uZyBpbnQgX190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVk ZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9w dGhyZWFkdHlwZXMuaCIgMSAzIDQKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz LmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMyA0CiMgNjggIi91c3Iv aW5jbHVkZS9iaXRzL3NjaGVkLmgiIDMgNApzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGlu dCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0 eXBlcy5oIiAyIDMgNAoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19z dGF0dXM7CiAgaW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9k ZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVh ZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0 cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAg aW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7 CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0 cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19s b2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0 eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5 cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewog IGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21f b3duZXI7CiAgaW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9j azsKfSBwdGhyZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtp bmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7 CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFk X2Zhc3Rsb2NrIF9fcndfbG9jazsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2Ny IF9fcndfd3JpdGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhy ZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3 X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBf X2xvY2traW5kOwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0 eXBlZGVmIHZvbGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3Qg ewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWly ZWQ7CiAgaW50IF9fYmFfcHJlc2VudDsKICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7Cn0g cHRocmVhZF9iYXJyaWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBfX3BzaGFyZWQ7Cn0g cHRocmVhZF9iYXJyaWVyYXR0cl90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRo cmVhZF90OwojIDE0NCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzIDQKIyA0NiAiL3N0 YWZmL2tmcmVkcmlrL2xvY2FsL2djYy1zbmFwc2hvdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMgNAojIDU0ICIvc3RhZmYva2ZyZWRyaWsvbG9j YWwvZ2NjLXNuYXBzaG90L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRl L3N0ZGlvLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwojIDY0ICIvc3RhZmYv a2ZyZWRyaWsvbG9jYWwvZ2NjLXNuYXBzaG90L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7 CiMgNzQgIi9zdGFmZi9rZnJlZHJpay9sb2NhbC9nY2Mtc25hcHNob3QvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDEgMyA0CiMgMzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKIyAxICIvdXNy L2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMyA0CiMgMTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcu aCIgMyA0CiMgMSAiL3N0YWZmL2tmcmVkcmlrL2xvY2FsL2djYy1zbmFwc2hvdC9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzNTQgIi9z dGFmZi9rZnJlZHJpay9sb2NhbC9nY2Mtc25hcHNob3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDMgNAp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50 X3Q7CiMgMTUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzIDQKIyAyNCAiL3Vzci9pbmNs dWRlL19HX2NvbmZpZy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzIDQKIyA0 OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAojIDEgIi9zdGFmZi9rZnJlZHJpay9sb2NhbC9n Y2Mtc25hcHNob3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3Rk ZGVmLmgiIDEgMyA0CiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAoKIyAxICIvdXNy L2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMgNAojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg MiAzIDQKIyA2NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAp0eXBlZGVmIHN0cnVjdAp7CiAg aW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193Y2g7CiAgICBjaGFyIF9fd2No Yls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMgMjUgIi91c3IvaW5jbHVkZS9fR19j b25maWcuaCIgMiAzIDQKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJz dGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90 IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3Iv aW5jbHVkZS9fR19jb25maWcuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMyA0 CiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMSAzIDQKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAojIDEgIi9zdGFmZi9rZnJl ZHJpay9sb2NhbC9nY2Mtc25hcHNob3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4z L2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMg NAojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzIDQKCgojIDEgIi9zdGFmZi9rZnJlZHJp ay9sb2NhbC9nY2Mtc25hcHNob3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzIgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMgNAoK CgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZf Tk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZf RlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVU RV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5B TF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09O Vl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVj dCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0 IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVj dCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwg c2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChz dHJ1Y3QgX19nY29udl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChz dHJ1Y3QgX19nY29udl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0 KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNo YXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlw ZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGlu dCAoKl9fZ2NvbnZfdHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hh ciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7 CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3Qg Y2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsK CnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5z X2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAg X19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAg c3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9z dGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBf X2NvbnN0IGNoYXIgKl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9t X25hbWU7CiAgY2hhciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252 X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBp bnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21p bl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoK ICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWdu ZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50 IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVy bmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7 CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBz dHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZf c3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBf X2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAy IDMgNAp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgc3RydWN0 CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9fZ2NvbnZfc3Rl cF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50 IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYg aW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVk ZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19I SV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgo X19tb2RlX18gKF9fU0lfXykpKTsKIyAzMyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMyA0CiMg NTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKIyAxICIvc3RhZmYva2ZyZWRyaWsvbG9jYWwv Z2NjLXNuYXBzaG90L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0 ZGFyZy5oIiAxIDMgNAojIDQzICIvc3RhZmYva2ZyZWRyaWsvbG9jYWwvZ2NjLXNuYXBzaG90L2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGFyZy5oIiAzIDQKdHlw ZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1NCAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDIgMyA0CiMgMTYwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0CnN0cnVjdCBf SU9fanVtcF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTcwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIg MyA0CnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBz dHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBp bnQgX3BvczsKIyAxOTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKfTsKCgplbnVtIF9fY29k ZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBfX2NvZGVjdnRfcGFydGlhbCwKICBfX2Nv ZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9OwojIDI2MSAiL3Vzci9pbmNsdWRlL2xp YmlvLmgiIDMgNApzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9J T19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsK ICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9J T193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoK ICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpf SU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9J T19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90 IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBj aGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3Qg Kl9sb2NrOwojIDMwNSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNAogIF9fb2ZmNjRfdCBfb2Zm c2V0OwoKCgoKCiAgdm9pZCAqX19wYWQxOwogIHZvaWQgKl9fcGFkMjsKCiAgaW50IF9tb2RlOwoK ICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07 Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9w bHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9z dGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM0 NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNAp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRf Zm4gKHZvaWQgKl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoK CnR5cGVkZWYgX19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0 IGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19u KTsKCgoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2Zm NjRfdCAqX19wb3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQg Kl9fY29va2llKTsKCgoKCnR5cGVkZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9u X3Q7CnR5cGVkZWYgX19pb193cml0ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRl ZiBfX2lvX3NlZWtfZm4gY29va2llX3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3Nl X2ZuIGNvb2tpZV9jbG9zZV9mdW5jdGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3Jl YWRfZm4gKnJlYWQ7CiAgX19pb193cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVr OwogIF9faW9fY2xvc2VfZm4gKmNsb3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5 cGVkZWYgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7Cgpz dHJ1Y3QgX0lPX2Nvb2tpZV9maWxlOwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3Ry dWN0IF9JT19jb29raWVfZmlsZSAqX19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlv bnNfdCBfX2Zucyk7CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChf SU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpl eHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3 aW50X3QgX193dWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292 ZXJmbG93IChfSU9fRklMRSAqLCB3aW50X3QpIHRocm93ICgpOwojIDQyNiAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDMgNApleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgdGhyb3cg KCk7CmV4dGVybiBpbnQgX0lPX3B1dGMgKGludCBfX2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAo KTsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4g aW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX0lP X3BlZWtjX2xvY2tlZCAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lk IF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnVu bG9ja2ZpbGUgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mdHJ5bG9ja2Zp bGUgKF9JT19GSUxFICopIHRocm93ICgpOwojIDQ1NiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMg NApleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNo YXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwg aW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fdmZwcmludGYgKF9JT19G SUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT19w YWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3Qg X0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgdGhyb3cgKCk7CgpleHRlcm4g X19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSB0 aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2 NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9J T19GSUxFICopIHRocm93ICgpOwojIDUxNCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNAp9CiMg NzUgIi9zdGFmZi9rZnJlZHJpay9sb2NhbC9nY2Mtc25hcHNob3QvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgoKCnR5cGVkZWYgX19nbnVj X3ZhX2xpc3QgX19ub3RfdmFfbGlzdF9fOwojIDg5ICIvc3RhZmYva2ZyZWRyaWsvbG9jYWwvZ2Nj LXNuYXBzaG90L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlv LmgiIDMgNAp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgp0eXBlZGVmIF9HX2Zwb3M2NF90 IGZwb3M2NF90OwojIDEzOCAiL3N0YWZmL2tmcmVkcmlrL2xvY2FsL2djYy1zbmFwc2hvdC9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzIDQKIyAxMzkgIi9zdGFmZi9rZnJlZHJp ay9sb2NhbC9nY2Mtc25hcHNob3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2lu Y2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAq c3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwojIDE1MyAiL3N0YWZmL2tmcmVkcmlrL2xvY2Fs L2djYy1zbmFwc2hvdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9z dGRpby5oIiAzIDQKZXh0ZXJuIGludCByZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkg dGhyb3cgKCk7CgpleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25z dCBjaGFyICpfX25ldykgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkg dGhyb3cgKCk7CiMgMTY5ICIvc3RhZmYva2ZyZWRyaWsvbG9jYWwvZ2NjLXNuYXBzaG90L2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4g RklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqdG1wbmFtIChj aGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3Mp IHRocm93ICgpOwojIDE4OSAiL3N0YWZmL2tmcmVkcmlrL2xvY2FsL2djYy1zbmFwc2hvdC9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJu IGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBp bnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZmbHVzaCAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2VhbGwgKHZvaWQp IHRocm93ICgpOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbW9kZXMpIHRocm93ICgpOwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jl c3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAyMzMgIi9zdGFmZi9rZnJlZHJpay9sb2NhbC9n Y2Mtc25hcHNob3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3Rk aW8uaCIgMyA0CmV4dGVybiBGSUxFICpmb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX21vZGVzKSB0aHJvdyAoKTsKZXh0ZXJuIEZJTEUgKmZyZW9wZW42NCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpf X3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpmZG9wZW4gKGlu dCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKCmV4dGVybiBGSUxF ICpmb3BlbmNvb2tpZSAodm9pZCAqX19yZXN0cmljdCBfX21hZ2ljX2Nvb2tpZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAg ICAgICAgICAgICAgICAgICAgICBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9faW9fZnVuY3Mp IHRocm93ICgpOwoKCmV4dGVybiBGSUxFICpmbWVtb3BlbiAodm9pZCAqX19zLCBzaXplX3QgX19s ZW4sIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqb3Bl bl9tZW1zdHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVmbG9jLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX3NpemVsb2MpIHRocm93ICgpOwoKCgoK CmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19y ZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19y ZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAg ICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBz ZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19i dWYsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKZXh0 ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4 dGVybiBpbnQgcHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg dGhyb3cgKCk7CgpleHRlcm4gaW50IHNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0 aHJvdyAoKTsKCgpleHRlcm4gaW50IHZmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2du dWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhy b3cgKCk7CgpleHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNf dmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9f cmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJuIGludCB2c25w cmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9s aXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3By aW50Zl9fLCAzLCAwKSkpOwoKCgoKCmV4dGVybiBpbnQgdmFzcHJpbnRmIChjaGFyICoqX19yZXN0 cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZiwKICAgICAgICAgICAgICAg ICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IF9fYXNwcmludGYg KGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwpleHRlcm4gaW50IGFzcHJpbnRmIChj aGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Zm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKZXh0ZXJuIGludCB2ZHByaW50ZiAoaW50 IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwKICAgICAgICAgICAgICAgICAg ICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Zm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgZHByaW50ZiAoaW50IF9f ZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCgoKZXh0ZXJu IGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRl cm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhy b3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywK ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4u KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgIF9f Z251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1h dF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJuIGludCB2c2NhbmYgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMSwgMCkpKTsKCgpleHRl cm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlz dCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2Fu Zl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9j a2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tl ZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChGSUxFICpf X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpf X3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJl YW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7CgoK CgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpmZ2V0 c191bmxvY2tlZCAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyA0MzcgIi9zdGFmZi9rZnJl ZHJpay9sb2NhbC9nY2Mtc25hcHNob3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4z L2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAq Kl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBf X3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0 ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh bSkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmlj dCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJp Y3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAog ICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoK CmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK CmV4dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3Np emUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19y ZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBm cmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBf X3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0 IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29m ZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CiMgNTAwICIvc3RhZmYva2ZyZWRyaWsvbG9jYWwvZ2NjLXNuYXBzaG90L2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDMgNApleHRlcm4g aW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19vZmYsIGludCBfX3doZW5jZSkg dGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9z X3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZzZXRwb3Mg KEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19wb3MpIHRocm93ICgpOwojIDUzNCAi L3N0YWZmL2tmcmVkcmlrL2xvY2FsL2djYy1zbmFwc2hvdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKZXh0ZXJuIGludCBmc2Vla282NCAoRklM RSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKZXh0 ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4g aW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVz dHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpf X3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19wb3MpIHRocm93ICgpOwoKCgpleHRlcm4gdm9p ZCBjbGVhcmVyciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZW9mIChG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJl YW0pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19z dHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25z dCBzeXNfZXJybGlzdFtdOwoKCmV4dGVybiBpbnQgX3N5c19uZXJyOwpleHRlcm4gX19jb25zdCBj aGFyICpfX2NvbnN0IF9zeXNfZXJybGlzdFtdOwoKCgoKCmV4dGVybiBpbnQgZmlsZW5vIChGSUxF ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3Qg Y2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVy biBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIg KmN0ZXJtaWQgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQg KGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpzdHJ1Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9i c3RhY2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwg Li4uKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBvYnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNr ICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fZ251Y192YV9saXN0IF9fYXJncykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9j a2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2Zp bGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDY0MSAiL3N0YWZmL2tmcmVkcmlrL2xvY2FsL2dj Yy1zbmFwc2hvdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRp by5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAxIDMgNAojIDMzICIvdXNy L2luY2x1ZGUvYml0cy9zdGRpby5oIiAzIDQKaW5saW5lIGludAp2cHJpbnRmIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQp7CiAg cmV0dXJuIHZmcHJpbnRmIChzdGRvdXQsIF9fZm10LCBfX2FyZyk7Cn0KCgppbmxpbmUgaW50Cmdl dGNoYXIgKHZvaWQpIHRocm93ICgpCnsKICByZXR1cm4gX0lPX2dldGMgKHN0ZGluKTsKfQoKCgoK aW5saW5lIGludApnZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKSB0aHJvdyAoKQp7CiAgcmV0dXJu ICgoX19mcCktPl9JT19yZWFkX3B0ciA+PSAoX19mcCktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cg KF9fZnApIDogKih1bnNpZ25lZCBjaGFyICopIChfX2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoK aW5saW5lIGludApnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgo c3RkaW4pLT5fSU9fcmVhZF9wdHIgPj0gKHN0ZGluKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAo c3RkaW4pIDogKih1bnNpZ25lZCBjaGFyICopIChzdGRpbiktPl9JT19yZWFkX3B0cisrKTsKfQoK CgoKaW5saW5lIGludApwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9JT19w dXRjIChfX2MsIHN0ZG91dCk7Cn0KCgoKCmlubGluZSBpbnQKZnB1dGNfdW5sb2NrZWQgKGludCBf X2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lP X3dyaXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9f c3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3Ry ZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmlubGluZSBpbnQKcHV0Y191 bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgo X19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8g X19vdmVyZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQg Y2hhcikgKCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKaW5saW5l IGludApwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKHN0 ZG91dCktPl9JT193cml0ZV9wdHIgPj0gKHN0ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVy ZmxvdyAoc3Rkb3V0LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgq KHN0ZG91dCktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgppbmxpbmUgX19zc2l6 ZV90CmdldGxpbmUgKGNoYXIgKipfX2xpbmVwdHIsIHNpemVfdCAqX19uLCBGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCkKewogIHJldHVybiBfX2dldGRlbGltIChfX2xpbmVwdHIsIF9fbiwgJ1xuJywg X19zdHJlYW0pOwp9CgoKCgoKaW5saW5lIGludApmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MTApICE9IDAp Owp9CgoKaW5saW5lIGludApmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo KQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgyMCkgIT0gMCk7Cn0KIyA2NDIg Ii9zdGFmZi9rZnJlZHJpay9sb2NhbC9nY2Mtc25hcHNob3QvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCgp9CiMgMTUgImJwZWQuQyIgMgoj IDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzIDQKIyAzMyAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAzIDQKIyAxICIvc3RhZmYva2ZyZWRyaWsvbG9jYWwvZ2NjLXNuYXBzaG90L2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0ICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0CgpleHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNy L2luY2x1ZGUvYml0cy93YWl0ZmxhZ3MuaCIgMSAzIDQKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAyIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMSAzIDQKIyA2 MyAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUv ZW5kaWFuLmgiIDEgMyA0CiMgMzcgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMyA0CiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvZW5kaWFuLmgiIDEgMyA0CiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4u aCIgMiAzIDQKIyA2NCAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAyIDMgNAoKdW5p b24gd2FpdAogIHsKICAgIGludCB3X3N0YXR1czsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAg IHVuc2lnbmVkIGludCBfX3dfdGVybXNpZzo3OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfY29y ZWR1bXA6MTsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3JldGNvZGU6ODsKICAgICAgICB1bnNp Z25lZCBpbnQ6MTY7CgoKCgoKCgogICAgICB9IF9fd2FpdF90ZXJtaW5hdGVkOwogICAgc3RydWN0 CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wdmFsOjg7CiAgICAgICAgdW5z aWduZWQgaW50IF9fd19zdG9wc2lnOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgog ICAgICB9IF9fd2FpdF9zdG9wcGVkOwogIH07CiMgNDQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg MiAzIDQKIyA5NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKdHlwZWRlZiBzdHJ1Y3QKICB7 CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QK ICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKCgoK Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGxvbmcgaW50IHF1b3Q7 CiAgICBsb25nIGxvbmcgaW50IHJlbTsKICB9IGxsZGl2X3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUv c3RkbGliLmgiIDMgNApleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQp IHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgYXRvaSAoX19j b25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK ZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25n IGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUgc3RydG9kIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50 IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgp OwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNp b25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5z aWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKX19leHRlbnNp b25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1 bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CiMgMjExICIvdXNy L2luY2x1ZGUvc3RkbGliLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMyA0 CiMgMjggIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfX2xvY2Fs ZV9zdHJ1Y3QKewoKICBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25z dCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9s b3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAyMTIg Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCgoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9s X2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVu c2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4g bG9uZyBsb25nIGludCBfX3N0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBs b25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJu IGRvdWJsZSBfX3N0cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2Fs ZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2wgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRl cm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsK ZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91Ymxl IF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3Vw KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNp Z25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4 dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7 CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3Vs bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBfX2lu bGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvZF9pbnRl cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CnN0 cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRv bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpleHRlcm4gX19pbmxp bmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRo cm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBf X2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0CnN0cnRvZiAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgp CnsKICByZXR1cm4gX19zdHJ0b2ZfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4 dGVybiBfX2lubGluZSBsb25nIGRvdWJsZQpzdHJ0b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJldHVy biBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CgoKCl9fZXh0ZW5z aW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9xIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICBp bnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRy LCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1 bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0 aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs IF9fYmFzZSwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25n IGludApzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19y ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVy biBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19l eHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3Vs bCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyLAogICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRv dWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9f aW5saW5lIGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJl dHVybiBzdHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCk7Cn0KZXh0ZXJuIF9faW5saW5l IGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJldHVybiAoaW50 KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CmV4dGVybiBfX2lubGlu ZSBsb25nIGludAphdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJldHVy biBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CgoKX19leHRlbnNpb25f XyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBjaGFyICpfX25w dHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAqKikgX19udWxs LCAxMCk7Cn0KIyAzODQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBjaGFyICps NjRhIChsb25nIGludCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBhNjRsIChfX2Nv bnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKIyAx ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMyA0CmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0 eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYg X191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVh ZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYgX19sb2Zm X3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19pbm82 NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lk X3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlu a190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29m Zl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRlZiBf X3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19zc2l6 ZV90IHNzaXplX3Q7CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2Nh ZGRyX3QgY2FkZHJfdDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTMyICIvdXNyL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMyA0CiMg NTkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190Owoj IDcwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMg ODIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRf dDsKIyA5NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CnR5cGVkZWYgX190aW1lcl90IHRpbWVy X3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCnR5cGVkZWYgX191 c2Vjb25kc190IHVzZWNvbmRzX3Q7CgoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNf dDsKCgoKCgojIDEgIi9zdGFmZi9rZnJlZHJpay9sb2NhbC9nY2Mtc25hcHNob3QvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMTQ3ICIv dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBp bnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1bnNp Z25lZCBpbnQgdWludDsKIyAxOTAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CnR5cGVk ZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRl ZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRl ZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRl ZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCgp0eXBl ZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlf XykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21v ZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDMyX3QgX19hdHRyaWJ1 dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50NjRf dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCnR5cGVkZWYgaW50IHJlZ2lz dGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dvcmRfXykpKTsKIyAyMTUgIi91c3Iv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIg MSAzIDQKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvc2VsZWN0LmgiIDEgMyA0CiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi IDIgMyA0CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzIDQKIyAyMyAiL3Vz ci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMgNAp0eXBlZGVmIGludCBfX3NpZ19hdG9taWNfdDsK CgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192YWxbKDEwMjQg LyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdzZXRfdDsKIyAz NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzIDQKCgoKdHlwZWRlZiBfX3NpZ3NldF90 IHNpZ3NldF90OwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzIDQKIyAxMDYgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDMgNApzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0 dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgNDUgIi91c3IvaW5jbHVkZS9zeXMv c2VsZWN0LmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzIDQKIyA2 NyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzIDQKc3RydWN0IHRpbWV2YWwKICB7CiAgICBf X3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKIyA0NyAiL3Vz ci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzIDQKIyA1NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxl Y3QuaCIgMyA0CnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoKdHlwZWRlZiBzdHJ1 Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2Zk X21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFz azsKIyA5NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CmV4dGVybiAiQyIgewoKCgoK CgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVh ZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAog ICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAg ICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gaW50IHBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmlj dCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3Jp dGVmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRz LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBf X3RpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmlj dCBfX3NpZ21hc2spIHRocm93ICgpOwoKCn0KIyAyMTYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMyA0CiMgMjE5 ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCgp0eXBlZGVmIF9fYmxrc2l6ZV90 IGJsa3NpemVfdDsKCgoKCgoKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVm IF9fZnNibGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNu dF90OwojIDI1NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBfX2Jsa2Nu dDY0X3QgYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0X3Q7CnR5 cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCn0KIyAzOTEgIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMiAzIDQKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRvbSAodm9pZCkgdGhy b3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hh ciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4p IHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIHRo cm93ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsK ICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7 CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRy OwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJp Y3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1 bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGludCBfX3NlZWQs IHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBpbml0c3Rh dGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAog ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsK CmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1Zikg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2 b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBy YW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3Vi bGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWdu ZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBscmFu ZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNo b3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAo dm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBp bnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQg X19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1 bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNv bmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIHRocm93ICgpOwoKCgoKCnN0cnVj dCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwogICAgdW5z aWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwog ICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg X19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f cmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJp Y3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hv cnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9k YXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpf X3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3Ry dWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg ICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBu cmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAg ICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1 ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0 KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hz dWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0 cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0 IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19z ZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICB0aHJvdyAoKTsKCmV4 dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sCiAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsK CmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAo KTsKIyA1MjcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiB2b2lkICptYWxsb2Mg KHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7Cgpl eHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCmV4dGVybiB2b2lkICpy ZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKIyAxICIv dXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMyA0CiMgMjUgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIg MyA0CiMgMSAiL3N0YWZmL2tmcmVkcmlrL2xvY2FsL2djYy1zbmFwc2hvdC9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAyNiAiL3Vzci9p bmNsdWRlL2FsbG9jYS5oIiAyIDMgNAoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFs bG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU0NyAiL3Vzci9pbmNsdWRl L3N0ZGxpYi5oIiAyIDMgNAoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgcG9z aXhfbWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3Qg X19zaXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4 dGVybiB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy bl9fKSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVz LCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2 b2lkIGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1 cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19j b25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0 ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdXRl bnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19j b25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkK ICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFt ZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIHRocm93ICgpOwoj IDYyMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGNoYXIgKm1rdGVtcCAoY2hh ciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIg Kl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY0MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQK ZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY1MCAi L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9f dGVtcGxhdGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAq X19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmNhbm9uaWNhbGl6ZV9maWxl X25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKIyA2NzIgIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9f cmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChf X2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBj b21wYXJpc29uX2ZuX3Q7CgoKCgoKZXh0ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29uc3Qgdm9pZCAq X19rZXksIF9fY29uc3Qgdm9pZCAqX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRl cm4gdm9pZCBxc29ydCAodm9pZCAqX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6 ZSwKICAgICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4g aW50IGFicyAoaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpl eHRlcm4gbG9uZyBpbnQgbGFicyAobG9uZyBpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGxsYWJz IChsb25nIGxvbmcgaW50IF9feCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2X3Qg bGRpdiAobG9uZyBpbnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsbGRpdl90 IGxsZGl2IChsb25nIGxvbmcgaW50IF9fbnVtZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxvbmcgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7CiMgNzI4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRl cm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3Ry aWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19y ZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBj aGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAg ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWdu KSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQg X19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGlu dCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcg ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19y ZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2ln biwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xl bikgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp Z2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19y ZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJs ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3Ry aWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAg Y2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGlu dCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAg ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24s CiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVu KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNp emVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3Ry aWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f cywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3RvbWIgKGNoYXIgKl9fcywg d2NoYXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2No YXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVf dCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pCiAgICAgdGhy b3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25z ZSkgdGhyb3cgKCk7CiMgODA4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gaW50 IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLAogICAgICAgICAgICAgICAg ICAgICAgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywKICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g dm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IGludCBwb3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBp bnQgZ3JhbnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubG9ja3B0IChp bnQgX19mZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVm LCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwg aW50IF9fbmVsZW0pIHRocm93ICgpOwoKCgoKCn0KIyAxNiAiYnBlZC5DIiAyCiMgMSAiL3Vzci9p bmNsdWRlL2N0eXBlLmgiIDEgMyA0CiMgMjkgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKZXh0 ZXJuICJDIiB7CiMgNDcgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKZW51bQp7CiAgX0lTdXBw ZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkpLAog IF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkpID4+ IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEgPDwg KDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgpIDog KCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0KSkg PDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgoMSA8 PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8IDgg PyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwKICBfSVNncmFwaCA9ICgo NykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+PiA4KSksCiAgX0lTYmxh bmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8ICg4KSkgPj4gOCkpLAog IF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6ICgoMSA8PCAoOSkpID4+ IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTApKSA8PCA4KSA6ICgoMSA8 PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAoKDEgPDwgKDExKSkgPDwg OCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07CiMgNzUgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAz IDQKZXh0ZXJuIF9fY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CmV4dGVybiBf X2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b2xvd2VyOwpleHRlcm4gX19jb25zdCBfX2ludDMy X3QgKl9fY3R5cGVfdG91cHBlcjsKIyA5MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNApleHRl cm4gaW50IGlzYWxudW0gKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNhbHBoYSAoaW50KSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBpc2NudHJsIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlz ZGlnaXQgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNsb3dlciAoaW50KSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBpc2dyYXBoIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHJpbnQgKGlu dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwdW5jdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGlu dCBpc3NwYWNlIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzdXBwZXIgKGludCkgdGhyb3cg KCk7CmV4dGVybiBpbnQgaXN4ZGlnaXQgKGludCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc2Js YW5rIChpbnQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB0b2xvd2VyIChpbnQgX19jKSB0aHJv dyAoKTsKCgpleHRlcm4gaW50IHRvdXBwZXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgpleHRl cm4gaW50IGlzYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHRvYXNjaWkg KGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF90b3VwcGVyIChpbnQpIHRocm93ICgp OwpleHRlcm4gaW50IF90b2xvd2VyIChpbnQpIHRocm93ICgpOwojIDE2NyAiL3Vzci9pbmNsdWRl L2N0eXBlLmgiIDMgNApleHRlcm4gX19pbmxpbmUgaW50CnRvbG93ZXIgKGludCBfX2MpIHRocm93 ICgpCnsKICByZXR1cm4gX19jID49IC0xMjggJiYgX19jIDwgMjU2ID8gX19jdHlwZV90b2xvd2Vy W19fY10gOiBfX2M7Cn0KCmV4dGVybiBfX2lubGluZSBpbnQKdG91cHBlciAoaW50IF9fYykgdGhy b3cgKCkKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBfX2N0eXBlX3RvdXBw ZXJbX19jXSA6IF9fYzsKfQojIDIyMyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNApleHRlcm4g aW50IF9faXNhbG51bV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9f aXNhbHBoYV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNjbnRy bF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNkaWdpdF9sIChp bnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNsb3dlcl9sIChpbnQsIF9f bG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNncmFwaF9sIChpbnQsIF9fbG9jYWxl X3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9faXNwcmludF9sIChpbnQsIF9fbG9jYWxlX3QpIHRo cm93ICgpOwpleHRlcm4gaW50IF9faXNwdW5jdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgp OwpleHRlcm4gaW50IF9faXNzcGFjZV9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRl cm4gaW50IF9faXN1cHBlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50 IF9faXN4ZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX19p c2JsYW5rX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX190b2xv d2VyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9f dG91cHBlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CiMgMjc2ICIvdXNy L2luY2x1ZGUvY3R5cGUuaCIgMyA0Cn0KIyAxNyAiYnBlZC5DIiAyCiMgMSAiL3Vzci9pbmNsdWRl L3VuaXN0ZC5oIiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4g IkMiIHsKIyAxNzUgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvcG9zaXhfb3B0LmgiIDEgMyA0CiMgMTc2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIg MyA0CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDEgMyA0CiMgMjMg Ii91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy93b3Jkc2l6ZS5oIiAxIDMgNAojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9ubWVu dHMuaCIgMiAzIDQKIyAxODAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzIDQKIyAxOTkgIi91 c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CiMgMSAiL3N0YWZmL2tmcmVkcmlrL2xvY2FsL2djYy1z bmFwc2hvdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRkZWYu aCIgMSAzIDQKIyAyMDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzIDQKIyAyNDAgIi91c3Iv aW5jbHVkZS91bmlzdGQuaCIgMyA0CnR5cGVkZWYgX19pbnRwdHJfdCBpbnRwdHJfdDsKCgoKCgoK dHlwZWRlZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CiMgMjYwICIvdXNyL2luY2x1ZGUvdW5pc3Rk LmgiIDMgNApleHRlcm4gaW50IGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5 cGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBldWlkYWNjZXNzIChfX2NvbnN0IGNoYXIgKl9f bmFtZSwgaW50IF9fdHlwZSkgdGhyb3cgKCk7CiMgMjkwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi IDMgNApleHRlcm4gX19vZmZfdCBsc2VlayAoaW50IF9fZmQsIF9fb2ZmX3QgX19vZmZzZXQsIGlu dCBfX3doZW5jZSkgdGhyb3cgKCk7CiMgMzAyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApl eHRlcm4gX19vZmY2NF90IGxzZWVrNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIGlu dCBfX3doZW5jZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvc2UgKGludCBfX2ZkKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIHNzaXplX3QgcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXpl X3QgX19uYnl0ZXMpIHRocm93ICgpOwoKCmV4dGVybiBzc2l6ZV90IHdyaXRlIChpbnQgX19mZCwg X19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBzc2l6 ZV90IHByZWFkIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywgX19vZmZf dCBfX29mZnNldCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIHNzaXplX3QgcHdyaXRlIChpbnQgX19m ZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAg ICBfX29mZl90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKIyAzNDAgIi91c3IvaW5jbHVkZS91bmlzdGQu aCIgMyA0CmV4dGVybiBzc2l6ZV90IHByZWFkNjQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6 ZV90IF9fbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQp IHRocm93ICgpOwoKCmV4dGVybiBzc2l6ZV90IHB3cml0ZTY0IChpbnQgX19mZCwgX19jb25zdCB2 b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmNjRf dCBfX29mZnNldCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHBpcGUgKGludCBfX3BpcGVk ZXNbMl0pIHRocm93ICgpOwojIDM2MiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzIDQKZXh0ZXJu IHVuc2lnbmVkIGludCBhbGFybSAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgdGhyb3cgKCk7CiMg MzcxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gdW5zaWduZWQgaW50IHNsZWVw ICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fdXNlY29u ZHNfdCB1YWxhcm0gKF9fdXNlY29uZHNfdCBfX3ZhbHVlLCBfX3VzZWNvbmRzX3QgX19pbnRlcnZh bCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1c2xlZXAgKF9fdXNlY29uZHNfdCBfX3Vz ZWNvbmRzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHBhdXNlICh2b2lkKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBjaG93biAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25l ciwgX19naWRfdCBfX2dyb3VwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZjaG93biAo aW50IF9fZmQsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBpbnQgbGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVy LCBfX2dpZF90IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGNoZGlyIChf X2NvbnN0IGNoYXIgKl9fcGF0aCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmNoZGlyIChpbnQg X19mZCkgdGhyb3cgKCk7CiMgNDIzICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4g Y2hhciAqZ2V0Y3dkIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoK ZXh0ZXJuIGNoYXIgKmdldF9jdXJyZW50X2Rpcl9uYW1lICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoK ZXh0ZXJuIGNoYXIgKmdldHdkIChjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IGR1cCAoaW50IF9fZmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZHVwMiAoaW50IF9fZmQsIGlu dCBfX2ZkMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKipfX2Vudmlyb247CgpleHRlcm4gY2hh ciAqKmVudmlyb247CgoKCgoKZXh0ZXJuIGludCBleGVjdmUgKF9fY29uc3QgY2hhciAqX19wYXRo LCBjaGFyICpfX2NvbnN0IF9fYXJndltdLAogICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25z dCBfX2VudnBbXSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZleGVjdmUgKGludCBfX2ZkLCBj aGFyICpfX2NvbnN0IF9fYXJndltdLCBjaGFyICpfX2NvbnN0IF9fZW52cFtdKQogICAgIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCBleGVjdiAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9f Y29uc3QgX19hcmd2W10pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWNsZSAoX19jb25zdCBj aGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgZXhlY2wgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAu Li4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWN2cCAoX19jb25zdCBjaGFyICpfX2ZpbGUs IGNoYXIgKl9fY29uc3QgX19hcmd2W10pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBleGVjbHAg KF9fY29uc3QgY2hhciAqX19maWxlLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pIHRocm93ICgp OwoKCgoKZXh0ZXJuIGludCBuaWNlIChpbnQgX19pbmMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZv aWQgX2V4aXQgKGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoK CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMSAzIDQKIyAyNSAiL3Vzci9p bmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMyA0CmVudW0KICB7CiAgICBfUENfTElOS19NQVgsCgog ICAgX1BDX01BWF9DQU5PTiwKCiAgICBfUENfTUFYX0lOUFVULAoKICAgIF9QQ19OQU1FX01BWCwK CiAgICBfUENfUEFUSF9NQVgsCgogICAgX1BDX1BJUEVfQlVGLAoKICAgIF9QQ19DSE9XTl9SRVNU UklDVEVELAoKICAgIF9QQ19OT19UUlVOQywKCiAgICBfUENfVkRJU0FCTEUsCgogICAgX1BDX1NZ TkNfSU8sCgogICAgX1BDX0FTWU5DX0lPLAoKICAgIF9QQ19QUklPX0lPLAoKICAgIF9QQ19TT0NL X01BWEJVRiwKCiAgICBfUENfRklMRVNJWkVCSVRTLAoKICAgIF9QQ19SRUNfSU5DUl9YRkVSX1NJ WkUsCgogICAgX1BDX1JFQ19NQVhfWEZFUl9TSVpFLAoKICAgIF9QQ19SRUNfTUlOX1hGRVJfU0la RSwKCiAgICBfUENfUkVDX1hGRVJfQUxJR04sCgogICAgX1BDX0FMTE9DX1NJWkVfTUlOLAoKICAg IF9QQ19TWU1MSU5LX01BWAoKICB9OwoKCmVudW0KICB7CiAgICBfU0NfQVJHX01BWCwKCiAgICBf U0NfQ0hJTERfTUFYLAoKICAgIF9TQ19DTEtfVENLLAoKICAgIF9TQ19OR1JPVVBTX01BWCwKCiAg ICBfU0NfT1BFTl9NQVgsCgogICAgX1NDX1NUUkVBTV9NQVgsCgogICAgX1NDX1RaTkFNRV9NQVgs CgogICAgX1NDX0pPQl9DT05UUk9MLAoKICAgIF9TQ19TQVZFRF9JRFMsCgogICAgX1NDX1JFQUxU SU1FX1NJR05BTFMsCgogICAgX1NDX1BSSU9SSVRZX1NDSEVEVUxJTkcsCgogICAgX1NDX1RJTUVS UywKCiAgICBfU0NfQVNZTkNIUk9OT1VTX0lPLAoKICAgIF9TQ19QUklPUklUSVpFRF9JTywKCiAg ICBfU0NfU1lOQ0hST05JWkVEX0lPLAoKICAgIF9TQ19GU1lOQywKCiAgICBfU0NfTUFQUEVEX0ZJ TEVTLAoKICAgIF9TQ19NRU1MT0NLLAoKICAgIF9TQ19NRU1MT0NLX1JBTkdFLAoKICAgIF9TQ19N RU1PUllfUFJPVEVDVElPTiwKCiAgICBfU0NfTUVTU0FHRV9QQVNTSU5HLAoKICAgIF9TQ19TRU1B UEhPUkVTLAoKICAgIF9TQ19TSEFSRURfTUVNT1JZX09CSkVDVFMsCgogICAgX1NDX0FJT19MSVNU SU9fTUFYLAoKICAgIF9TQ19BSU9fTUFYLAoKICAgIF9TQ19BSU9fUFJJT19ERUxUQV9NQVgsCgog ICAgX1NDX0RFTEFZVElNRVJfTUFYLAoKICAgIF9TQ19NUV9PUEVOX01BWCwKCiAgICBfU0NfTVFf UFJJT19NQVgsCgogICAgX1NDX1ZFUlNJT04sCgogICAgX1NDX1BBR0VTSVpFLAoKCiAgICBfU0Nf UlRTSUdfTUFYLAoKICAgIF9TQ19TRU1fTlNFTVNfTUFYLAoKICAgIF9TQ19TRU1fVkFMVUVfTUFY LAoKICAgIF9TQ19TSUdRVUVVRV9NQVgsCgogICAgX1NDX1RJTUVSX01BWCwKCgoKCiAgICBfU0Nf QkNfQkFTRV9NQVgsCgogICAgX1NDX0JDX0RJTV9NQVgsCgogICAgX1NDX0JDX1NDQUxFX01BWCwK CiAgICBfU0NfQkNfU1RSSU5HX01BWCwKCiAgICBfU0NfQ09MTF9XRUlHSFRTX01BWCwKCiAgICBf U0NfRVFVSVZfQ0xBU1NfTUFYLAoKICAgIF9TQ19FWFBSX05FU1RfTUFYLAoKICAgIF9TQ19MSU5F X01BWCwKCiAgICBfU0NfUkVfRFVQX01BWCwKCiAgICBfU0NfQ0hBUkNMQVNTX05BTUVfTUFYLAoK CiAgICBfU0NfMl9WRVJTSU9OLAoKICAgIF9TQ18yX0NfQklORCwKCiAgICBfU0NfMl9DX0RFViwK CiAgICBfU0NfMl9GT1JUX0RFViwKCiAgICBfU0NfMl9GT1JUX1JVTiwKCiAgICBfU0NfMl9TV19E RVYsCgogICAgX1NDXzJfTE9DQUxFREVGLAoKCiAgICBfU0NfUElJLAoKICAgIF9TQ19QSUlfWFRJ LAoKICAgIF9TQ19QSUlfU09DS0VULAoKICAgIF9TQ19QSUlfSU5URVJORVQsCgogICAgX1NDX1BJ SV9PU0ksCgogICAgX1NDX1BPTEwsCgogICAgX1NDX1NFTEVDVCwKCiAgICBfU0NfVUlPX01BWElP ViwKCiAgICBfU0NfSU9WX01BWCA9IF9TQ19VSU9fTUFYSU9WLAoKICAgIF9TQ19QSUlfSU5URVJO RVRfU1RSRUFNLAoKICAgIF9TQ19QSUlfSU5URVJORVRfREdSQU0sCgogICAgX1NDX1BJSV9PU0lf Q09UUywKCiAgICBfU0NfUElJX09TSV9DTFRTLAoKICAgIF9TQ19QSUlfT1NJX00sCgogICAgX1ND X1RfSU9WX01BWCwKCgoKICAgIF9TQ19USFJFQURTLAoKICAgIF9TQ19USFJFQURfU0FGRV9GVU5D VElPTlMsCgogICAgX1NDX0dFVEdSX1JfU0laRV9NQVgsCgogICAgX1NDX0dFVFBXX1JfU0laRV9N QVgsCgogICAgX1NDX0xPR0lOX05BTUVfTUFYLAoKICAgIF9TQ19UVFlfTkFNRV9NQVgsCgogICAg X1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMsCgogICAgX1NDX1RIUkVBRF9LRVlTX01B WCwKCiAgICBfU0NfVEhSRUFEX1NUQUNLX01JTiwKCiAgICBfU0NfVEhSRUFEX1RIUkVBRFNfTUFY LAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS0FERFIsCgogICAgX1NDX1RIUkVBRF9BVFRSX1NU QUNLU0laRSwKCiAgICBfU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcsCgogICAgX1NDX1RI UkVBRF9QUklPX0lOSEVSSVQsCgogICAgX1NDX1RIUkVBRF9QUklPX1BST1RFQ1QsCgogICAgX1ND X1RIUkVBRF9QUk9DRVNTX1NIQVJFRCwKCgogICAgX1NDX05QUk9DRVNTT1JTX0NPTkYsCgogICAg X1NDX05QUk9DRVNTT1JTX09OTE4sCgogICAgX1NDX1BIWVNfUEFHRVMsCgogICAgX1NDX0FWUEhZ U19QQUdFUywKCiAgICBfU0NfQVRFWElUX01BWCwKCiAgICBfU0NfUEFTU19NQVgsCgoKICAgIF9T Q19YT1BFTl9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9YQ1VfVkVSU0lPTiwKCiAgICBfU0NfWE9Q RU5fVU5JWCwKCiAgICBfU0NfWE9QRU5fQ1JZUFQsCgogICAgX1NDX1hPUEVOX0VOSF9JMThOLAoK ICAgIF9TQ19YT1BFTl9TSE0sCgoKICAgIF9TQ18yX0NIQVJfVEVSTSwKCiAgICBfU0NfMl9DX1ZF UlNJT04sCgogICAgX1NDXzJfVVBFLAoKCiAgICBfU0NfWE9QRU5fWFBHMiwKCiAgICBfU0NfWE9Q RU5fWFBHMywKCiAgICBfU0NfWE9QRU5fWFBHNCwKCgogICAgX1NDX0NIQVJfQklULAoKICAgIF9T Q19DSEFSX01BWCwKCiAgICBfU0NfQ0hBUl9NSU4sCgogICAgX1NDX0lOVF9NQVgsCgogICAgX1ND X0lOVF9NSU4sCgogICAgX1NDX0xPTkdfQklULAoKICAgIF9TQ19XT1JEX0JJVCwKCiAgICBfU0Nf TUJfTEVOX01BWCwKCiAgICBfU0NfTlpFUk8sCgogICAgX1NDX1NTSVpFX01BWCwKCiAgICBfU0Nf U0NIQVJfTUFYLAoKICAgIF9TQ19TQ0hBUl9NSU4sCgogICAgX1NDX1NIUlRfTUFYLAoKICAgIF9T Q19TSFJUX01JTiwKCiAgICBfU0NfVUNIQVJfTUFYLAoKICAgIF9TQ19VSU5UX01BWCwKCiAgICBf U0NfVUxPTkdfTUFYLAoKICAgIF9TQ19VU0hSVF9NQVgsCgoKICAgIF9TQ19OTF9BUkdNQVgsCgog ICAgX1NDX05MX0xBTkdNQVgsCgogICAgX1NDX05MX01TR01BWCwKCiAgICBfU0NfTkxfTk1BWCwK CiAgICBfU0NfTkxfU0VUTUFYLAoKICAgIF9TQ19OTF9URVhUTUFYLAoKCiAgICBfU0NfWEJTNV9J TFAzMl9PRkYzMiwKCiAgICBfU0NfWEJTNV9JTFAzMl9PRkZCSUcsCgogICAgX1NDX1hCUzVfTFA2 NF9PRkY2NCwKCiAgICBfU0NfWEJTNV9MUEJJR19PRkZCSUcsCgoKICAgIF9TQ19YT1BFTl9MRUdB Q1ksCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FLAoKICAgIF9TQ19YT1BFTl9SRUFMVElNRV9USFJF QURTLAoKCiAgICBfU0NfQURWSVNPUllfSU5GTywKCiAgICBfU0NfQkFSUklFUlMsCgogICAgX1ND X0JBU0UsCgogICAgX1NDX0NfTEFOR19TVVBQT1JULAoKICAgIF9TQ19DX0xBTkdfU1VQUE9SVF9S LAoKICAgIF9TQ19DTE9DS19TRUxFQ1RJT04sCgogICAgX1NDX0NQVVRJTUUsCgogICAgX1NDX1RI UkVBRF9DUFVUSU1FLAoKICAgIF9TQ19ERVZJQ0VfSU8sCgogICAgX1NDX0RFVklDRV9TUEVDSUZJ QywKCiAgICBfU0NfREVWSUNFX1NQRUNJRklDX1IsCgogICAgX1NDX0ZEX01HTVQsCgogICAgX1ND X0ZJRk8sCgogICAgX1NDX1BJUEUsCgogICAgX1NDX0ZJTEVfQVRUUklCVVRFUywKCiAgICBfU0Nf RklMRV9MT0NLSU5HLAoKICAgIF9TQ19GSUxFX1NZU1RFTSwKCiAgICBfU0NfTU9OT1RPTklDX0NM T0NLLAoKICAgIF9TQ19NVUxUSV9QUk9DRVNTLAoKICAgIF9TQ19TSU5HTEVfUFJPQ0VTUywKCiAg ICBfU0NfTkVUV09SS0lORywKCiAgICBfU0NfUkVBREVSX1dSSVRFUl9MT0NLUywKCiAgICBfU0Nf U1BJTl9MT0NLUywKCiAgICBfU0NfUkVHRVhQLAoKICAgIF9TQ19SRUdFWF9WRVJTSU9OLAoKICAg IF9TQ19TSEVMTCwKCiAgICBfU0NfU0lHTkFMUywKCiAgICBfU0NfU1BBV04sCgogICAgX1NDX1NQ T1JBRElDX1NFUlZFUiwKCiAgICBfU0NfVEhSRUFEX1NQT1JBRElDX1NFUlZFUiwKCiAgICBfU0Nf U1lTVEVNX0RBVEFCQVNFLAoKICAgIF9TQ19TWVNURU1fREFUQUJBU0VfUiwKCiAgICBfU0NfVElN RU9VVFMsCgogICAgX1NDX1RZUEVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19VU0VSX0dST1VQ UywKCiAgICBfU0NfVVNFUl9HUk9VUFNfUiwKCiAgICBfU0NfMl9QQlMsCgogICAgX1NDXzJfUEJT X0FDQ09VTlRJTkcsCgogICAgX1NDXzJfUEJTX0xPQ0FURSwKCiAgICBfU0NfMl9QQlNfTUVTU0FH RSwKCiAgICBfU0NfMl9QQlNfVFJBQ0ssCgogICAgX1NDX1NZTUxPT1BfTUFYLAoKICAgIF9TQ19T VFJFQU1TLAoKICAgIF9TQ18yX1BCU19DSEVDS1BPSU5ULAoKCiAgICBfU0NfVjZfSUxQMzJfT0ZG MzIsCgogICAgX1NDX1Y2X0lMUDMyX09GRkJJRywKCiAgICBfU0NfVjZfTFA2NF9PRkY2NCwKCiAg ICBfU0NfVjZfTFBCSUdfT0ZGQklHLAoKCiAgICBfU0NfSE9TVF9OQU1FX01BWCwKCiAgICBfU0Nf VFJBQ0UsCgogICAgX1NDX1RSQUNFX0VWRU5UX0ZJTFRFUiwKCiAgICBfU0NfVFJBQ0VfSU5IRVJJ VCwKCiAgICBfU0NfVFJBQ0VfTE9HCgogIH07CgoKCgoKZW51bQogIHsKICAgIF9DU19QQVRILAoK CgoKICAgIF9DU19MRlNfQ0ZMQUdTID0gMTAwMCwKCiAgICBfQ1NfTEZTX0xERkxBR1MsCgogICAg X0NTX0xGU19MSUJTLAoKICAgIF9DU19MRlNfTElOVEZMQUdTLAoKICAgIF9DU19MRlM2NF9DRkxB R1MsCgogICAgX0NTX0xGUzY0X0xERkxBR1MsCgogICAgX0NTX0xGUzY0X0xJQlMsCgogICAgX0NT X0xGUzY0X0xJTlRGTEFHUywKCgoKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9DRkxBR1MgPSAx MTAwLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xERkxBR1MsCgogICAgX0NTX1hCUzVfSUxQ MzJfT0ZGMzJfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MSU5URkxBR1MsCgogICAg X0NTX1hCUzVfSUxQMzJfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdf TERGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElCUywKCiAgICBfQ1NfWEJTNV9J TFAzMl9PRkZCSUdfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoK ICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0 X0xJQlMsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSU5URkxBR1MsCgogICAgX0NTX1hCUzVf TFBCSUdfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTERGTEFHUywK CiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElCUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZC SUdfTElOVEZMQUdTLAoKCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0NGTEFHUywKCiAg ICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTERGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQ MzJfT0ZGMzJfTElCUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTElOVEZMQUdTLAoK ICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfQ0ZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9J TFAzMl9PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xJQlMs CgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MSU5URkxBR1MsCgogICAgX0NTX1BPU0lY X1Y2X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09GRjY0X0xERkxB R1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElCUywKCiAgICBfQ1NfUE9TSVhfVjZf TFA2NF9PRkY2NF9MSU5URkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19DRkxB R1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MREZMQUdTLAoKICAgIF9DU19QT1NJ WF9WNl9MUEJJR19PRkZCSUdfTElCUywKCiAgICBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xJ TlRGTEFHUywKCgoKICAgIF9DU19WNl9XSURUSF9SRVNUUklDVEVEX0VOVlMKCiAgfTsKIyA1MDEg Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzIDQKCgpleHRlcm4gbG9uZyBpbnQgcGF0aGNvbmYg KF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u ZyBpbnQgZnBhdGhjb25mIChpbnQgX19mZCwgaW50IF9fbmFtZSkgdGhyb3cgKCk7CgoKZXh0ZXJu IGxvbmcgaW50IHN5c2NvbmYgKGludCBfX25hbWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgoKZXh0ZXJuIHNpemVfdCBjb25mc3RyIChpbnQgX19uYW1lLCBjaGFyICpf X2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX3BpZF90IGdldHBpZCAo dm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cHBpZCAodm9pZCkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gX19waWRfdCBnZXRwZ3JwICh2b2lkKSB0aHJvdyAoKTsKIyA1MzYgIi91c3Iv aW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBfX3BpZF90IF9fZ2V0cGdpZCAoX19waWRfdCBf X3BpZCkgdGhyb3cgKCk7CgpleHRlcm4gX19waWRfdCBnZXRwZ2lkIChfX3BpZF90IF9fcGlkKSB0 aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBzZXRwZ2lkIChfX3BpZF90IF9fcGlkLCBfX3BpZF90 IF9fcGdpZCkgdGhyb3cgKCk7CiMgNTYyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRl cm4gaW50IHNldHBncnAgKHZvaWQpIHRocm93ICgpOwojIDU4MCAiL3Vzci9pbmNsdWRlL3VuaXN0 ZC5oIiAzIDQKZXh0ZXJuIF9fcGlkX3Qgc2V0c2lkICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IF9fcGlkX3QgZ2V0c2lkIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9fdWlk X3QgZ2V0dWlkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gX191aWRfdCBnZXRldWlkICh2b2lk KSB0aHJvdyAoKTsKCgpleHRlcm4gX19naWRfdCBnZXRnaWQgKHZvaWQpIHRocm93ICgpOwoKCmV4 dGVybiBfX2dpZF90IGdldGVnaWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBnZXRn cm91cHMgKGludCBfX3NpemUsIF9fZ2lkX3QgX19saXN0W10pIHRocm93ICgpOwoKCgpleHRlcm4g aW50IGdyb3VwX21lbWJlciAoX19naWRfdCBfX2dpZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBp bnQgc2V0dWlkIChfX3VpZF90IF9fdWlkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0cmV1 aWQgKF9fdWlkX3QgX19ydWlkLCBfX3VpZF90IF9fZXVpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g aW50IHNldGV1aWQgKF9fdWlkX3QgX191aWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHNl dGdpZCAoX19naWRfdCBfX2dpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldHJlZ2lkIChf X2dpZF90IF9fcmdpZCwgX19naWRfdCBfX2VnaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBz ZXRlZ2lkIChfX2dpZF90IF9fZ2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgZm9y ayAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBfX3BpZF90IHZmb3JrICh2b2lkKSB0aHJv dyAoKTsKCgoKCgpleHRlcm4gY2hhciAqdHR5bmFtZSAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IHR0eW5hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZs ZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzYXR0eSAoaW50IF9fZmQpIHRocm93ICgpOwoK CgoKCmV4dGVybiBpbnQgdHR5c2xvdCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGxp bmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8pIHRocm93ICgpOwoK CgpleHRlcm4gaW50IHN5bWxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIg Kl9fdG8pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCByZWFkbGluayAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fcGF0aCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmxpbmsgKF9fY29u c3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHJtZGlyIChfX2NvbnN0IGNo YXIgKl9fcGF0aCkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX3BpZF90IHRjZ2V0cGdycCAoaW50IF9f ZmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGNzZXRwZ3JwIChpbnQgX19mZCwgX19waWRfdCBf X3BncnBfaWQpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZ2V0bG9naW4gKHZvaWQpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCBnZXRsb2dpbl9yIChjaGFyICpfX25hbWUsIHNpemVfdCBfX25h bWVfbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0bG9naW4gKF9fY29uc3QgY2hhciAq X19uYW1lKSB0aHJvdyAoKTsKIyA3MjYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CiMgMSAi L3Vzci9pbmNsdWRlL2dldG9wdC5oIiAxIDMgNAojIDM4ICIvdXNyL2luY2x1ZGUvZ2V0b3B0Lmgi IDMgNApleHRlcm4gIkMiIHsKIyA0NyAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzIDQKZXh0ZXJu IGNoYXIgKm9wdGFyZzsKIyA2MSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzIDQKZXh0ZXJuIGlu dCBvcHRpbmQ7CgoKCgpleHRlcm4gaW50IG9wdGVycjsKCgoKZXh0ZXJuIGludCBvcHRvcHQ7CiMg MTQ1ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMgNApleHRlcm4gaW50IGdldG9wdCAoaW50IF9f X2FyZ2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LCBjb25zdCBjaGFyICpfX3Nob3J0b3B0cyk7CiMg MTc1ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMgNAp9CiMgNzI3ICIvdXNyL2luY2x1ZGUvdW5p c3RkLmgiIDIgMyA0CgoKCgoKCgpleHRlcm4gaW50IGdldGhvc3RuYW1lIChjaGFyICpfX25hbWUs IHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgc2V0aG9zdG5hbWUgKF9f Y29uc3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IHNldGhvc3RpZCAobG9uZyBpbnQgX19pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRk b21haW5uYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBp bnQgc2V0ZG9tYWlubmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGludCB2aGFuZ3VwICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHJldm9rZSAoX19jb25zdCBjaGFyICpfX2ZpbGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu IGludCBwcm9maWwgKHVuc2lnbmVkIHNob3J0IGludCAqX19zYW1wbGVfYnVmZmVyLCBzaXplX3Qg X19zaXplLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fb2Zmc2V0LCB1bnNpZ25lZCBpbnQg X19zY2FsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBhY2N0IChfX2NvbnN0IGNoYXIgKl9f bmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXR1c2Vyc2hlbGwgKHZvaWQpIHRocm93 ICgpOwpleHRlcm4gdm9pZCBlbmR1c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgpOwpleHRlcm4gdm9p ZCBzZXR1c2Vyc2hlbGwgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZGFlbW9uIChp bnQgX19ub2NoZGlyLCBpbnQgX19ub2Nsb3NlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBj aHJvb3QgKF9fY29uc3QgY2hhciAqX19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdl dHBhc3MgKF9fY29uc3QgY2hhciAqX19wcm9tcHQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg ZnN5bmMgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGdldGhvc3Rp ZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3luYyAodm9pZCkgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IGdldHBhZ2VzaXplICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHRydW5jYXRlIChfX2NvbnN0IGNoYXIgKl9fZmls ZSwgX19vZmZfdCBfX2xlbmd0aCkgdGhyb3cgKCk7CiMgODM2ICIvdXNyL2luY2x1ZGUvdW5pc3Rk LmgiIDMgNApleHRlcm4gaW50IHRydW5jYXRlNjQgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX29m ZjY0X3QgX19sZW5ndGgpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmdHJ1bmNhdGUgKGludCBf X2ZkLCBfX29mZl90IF9fbGVuZ3RoKSB0aHJvdyAoKTsKIyA4NTEgIi91c3IvaW5jbHVkZS91bmlz dGQuaCIgMyA0CmV4dGVybiBpbnQgZnRydW5jYXRlNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19s ZW5ndGgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSAodm9pZCkgdGhy b3cgKCk7CiMgODY2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRlcm4gaW50IGJyayAo dm9pZCAqX19hZGRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqc2JyayAoaW50cHRyX3Qg X19kZWx0YSkgdGhyb3cgKCk7CiMgODg3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMgNApleHRl cm4gbG9uZyBpbnQgc3lzY2FsbCAobG9uZyBpbnQgX19zeXNubywgLi4uKSB0aHJvdyAoKTsKIyA5 MDcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4dGVybiBpbnQgbG9ja2YgKGludCBfX2Zk LCBpbnQgX19jbWQsIF9fb2ZmX3QgX19sZW4pIHRocm93ICgpOwojIDkxNyAiL3Vzci9pbmNsdWRl L3VuaXN0ZC5oIiAzIDQKZXh0ZXJuIGludCBsb2NrZjY0IChpbnQgX19mZCwgaW50IF9fY21kLCBf X29mZjY0X3QgX19sZW4pIHRocm93ICgpOwojIDkzOCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAz IDQKZXh0ZXJuIGludCBmZGF0YXN5bmMgKGludCBfX2ZpbGRlcykgdGhyb3cgKCk7CgoKCgoKCgpl eHRlcm4gY2hhciAqY3J5cHQgKF9fY29uc3QgY2hhciAqX19rZXksIF9fY29uc3QgY2hhciAqX19z YWx0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgZW5jcnlwdCAoY2hhciAqX19ibG9jaywgaW50 IF9fZWRmbGFnKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgc3dhYiAoX19jb25zdCB2b2lk ICpfX3Jlc3RyaWN0IF9fZnJvbSwgdm9pZCAqX19yZXN0cmljdCBfX3RvLAogICAgICAgICAgICAg ICAgICBzc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAo Y2hhciAqX19zKSB0aHJvdyAoKTsKIyA5ODMgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMyA0CmV4 dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIHRocm93ICgpOwoKCn0KIyAx OCAiYnBlZC5DIiAyCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAxIDMgNAojIDMyICIv dXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAz IDQKIyAzMyAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIgMyA0CiMgOTYgIi91c3IvaW5jbHVk ZS9zeXMvc3RhdC5oIiAzIDQKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0 YXQuaCIgMSAzIDQKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvc3RhdC5oIiAzIDQKc3RydWN0IHN0 YXQKICB7CiAgICBfX2Rldl90IHN0X2RldjsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3BhZDE7 CgogICAgX19pbm9fdCBzdF9pbm87CgoKCiAgICBfX21vZGVfdCBzdF9tb2RlOwogICAgX19ubGlu a190IHN0X25saW5rOwogICAgX191aWRfdCBzdF91aWQ7CiAgICBfX2dpZF90IHN0X2dpZDsKICAg IF9fZGV2X3Qgc3RfcmRldjsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX3BhZDI7CgogICAgX19v ZmZfdCBzdF9zaXplOwoKCgogICAgX19ibGtzaXplX3Qgc3RfYmxrc2l6ZTsKCgogICAgX19ibGtj bnRfdCBzdF9ibG9ja3M7CgoKCiAgICBfX3RpbWVfdCBzdF9hdGltZTsKICAgIHVuc2lnbmVkIGxv bmcgaW50IF9fdW51c2VkMTsKICAgIF9fdGltZV90IHN0X210aW1lOwogICAgdW5zaWduZWQgbG9u ZyBpbnQgX191bnVzZWQyOwogICAgX190aW1lX3Qgc3RfY3RpbWU7CiAgICB1bnNpZ25lZCBsb25n IGludCBfX3VudXNlZDM7CgogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQ0OwogICAgdW5z aWduZWQgbG9uZyBpbnQgX191bnVzZWQ1OwoKCgogIH07CgoKc3RydWN0IHN0YXQ2NAogIHsKICAg IF9fZGV2X3Qgc3RfZGV2OwogICAgdW5zaWduZWQgaW50IF9fcGFkMTsKCiAgICBfX2lub190IF9f c3RfaW5vOwogICAgX19tb2RlX3Qgc3RfbW9kZTsKICAgIF9fbmxpbmtfdCBzdF9ubGluazsKICAg IF9fdWlkX3Qgc3RfdWlkOwogICAgX19naWRfdCBzdF9naWQ7CiAgICBfX2Rldl90IHN0X3JkZXY7 CiAgICB1bnNpZ25lZCBpbnQgX19wYWQyOwogICAgX19vZmY2NF90IHN0X3NpemU7CiAgICBfX2Js a3NpemVfdCBzdF9ibGtzaXplOwoKICAgIF9fYmxrY250NjRfdCBzdF9ibG9ja3M7CiAgICBfX3Rp bWVfdCBzdF9hdGltZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMTsKICAgIF9fdGlt ZV90IHN0X210aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQyOwogICAgX190aW1l X3Qgc3RfY3RpbWU7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDM7CiAgICBfX2lubzY0 X3Qgc3RfaW5vOwogIH07CiMgOTkgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAyIDMgNAojIDIw MCAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMgNApleHRlcm4gaW50IHN0YXQgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2ZpbGUsCiAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9f cmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZzdGF0IChpbnQgX19mZCwg c3RydWN0IHN0YXQgKl9fYnVmKSB0aHJvdyAoKTsKIyAyMTkgIi91c3IvaW5jbHVkZS9zeXMvc3Rh dC5oIiAzIDQKZXh0ZXJuIGludCBzdGF0NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zp bGUsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdDY0ICpfX3Jlc3RyaWN0IF9fYnVmKSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBmc3RhdDY0IChpbnQgX19mZCwgc3RydWN0IHN0YXQ2NCAqX19i dWYpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGxzdGF0IChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19maWxlLAogICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqX19yZXN0cmljdCBf X2J1ZikgdGhyb3cgKCk7CiMgMjQxICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMyA0CmV4dGVy biBpbnQgbHN0YXQ2NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZSwKICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3Qgc3RhdDY0ICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoK CgoKZXh0ZXJuIGludCBjaG1vZCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fbW9kZV90IF9fbW9k ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmNobW9kIChpbnQgX19mZCwgX19tb2RlX3QgX19t b2RlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gX19tb2RlX3QgdW1hc2sgKF9fbW9kZV90IF9fbWFz aykgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19tb2RlX3QgZ2V0dW1hc2sgKHZvaWQpIHRocm93ICgp OwoKCgpleHRlcm4gaW50IG1rZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19t b2RlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IG1rbm9kIChfX2NvbnN0IGNoYXIgKl9fcGF0 aCwgX19tb2RlX3QgX19tb2RlLCBfX2Rldl90IF9fZGV2KQogICAgIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGludCBta2ZpZm8gKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21vZGUpIHRo cm93ICgpOwojIDMwNiAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMgNApleHRlcm4gaW50IF9f ZnhzdGF0IChpbnQgX192ZXIsIGludCBfX2ZpbGRlcywgc3RydWN0IHN0YXQgKl9fc3RhdF9idWYp IHRocm93ICgpOwpleHRlcm4gaW50IF9feHN0YXQgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpf X2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBfX2x4c3RhdCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9f ZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSB0 aHJvdyAoKTsKIyAzMzAgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzIDQKZXh0ZXJuIGludCBf X2Z4c3RhdDY0IChpbnQgX192ZXIsIGludCBfX2ZpbGRlcywgc3RydWN0IHN0YXQ2NCAqX19zdGF0 X2J1ZikKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX3hzdGF0NjQgKGludCBfX3ZlciwgX19j b25zdCBjaGFyICpfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQ2 NCAqX19zdGF0X2J1ZikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19seHN0YXQ2NCAoaW50IF9fdmVy LCBfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHN0YXQ2NCAqX19zdGF0X2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9feG1rbm9kIChpbnQg X192ZXIsIF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21vZGUsCiAgICAgICAgICAg ICAgICAgICAgIF9fZGV2X3QgKl9fZGV2KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX2lubGluZV9f IGludCBzdGF0IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRidWYpIHRocm93ICgpCnsKICByZXR1cm4gX194c3RhdCAo MywgX19wYXRoLCBfX3N0YXRidWYpOwp9CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IGxzdGF0IChf X2NvbnN0IGNoYXIgKl9fcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg c3RhdCAqX19zdGF0YnVmKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fbHhzdGF0ICgzLCBfX3BhdGgs IF9fc3RhdGJ1Zik7Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgZnN0YXQgKGludCBfX2ZkLCBz dHJ1Y3Qgc3RhdCAqX19zdGF0YnVmKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fZnhzdGF0ICgzLCBf X2ZkLCBfX3N0YXRidWYpOwp9CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IG1rbm9kIChfX2NvbnN0 IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fZGV2X3QgX19kZXYpIHRocm93ICgpCnsKICByZXR1cm4gX194bWtub2QgKDEsIF9fcGF0 aCwgX19tb2RlLCAmX19kZXYpOwp9CgoKCgoKZXh0ZXJuIF9faW5saW5lX18gaW50IHN0YXQ2NCAo X19jb25zdCBjaGFyICpfX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBzdGF0NjQgKl9fc3RhdGJ1ZikgdGhyb3cgKCkKewogIHJldHVybiBfX3hzdGF0NjQgKDMsIF9f cGF0aCwgX19zdGF0YnVmKTsKfQoKCmV4dGVybiBfX2lubGluZV9fIGludCBsc3RhdDY0IChfX2Nv bnN0IGNoYXIgKl9fcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz dGF0NjQgKl9fc3RhdGJ1ZikgdGhyb3cgKCkKewogIHJldHVybiBfX2x4c3RhdDY0ICgzLCBfX3Bh dGgsIF9fc3RhdGJ1Zik7Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgZnN0YXQ2NCAoaW50IF9f ZmQsIHN0cnVjdCBzdGF0NjQgKl9fc3RhdGJ1ZikgdGhyb3cgKCkKewogIHJldHVybiBfX2Z4c3Rh dDY0ICgzLCBfX2ZkLCBfX3N0YXRidWYpOwp9CgoKCgp9CiMgMjAgImJwZWQuQyIgMgojIDEgIi9z dGFmZi9rZnJlZHJpay9sb2NhbC9nY2Mtc25hcHNob3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiMgMTEgIi9zdGFmZi9rZnJlZHJpay9s b2NhbC9nY2Mtc25hcHNob3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1 ZGUvbGltaXRzLmgiIDMgNAojIDEgIi9zdGFmZi9rZnJlZHJpay9sb2NhbC9nY2Mtc25hcHNob3Qv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEg MyA0CgoKCgoKCiMgMSAiL3N0YWZmL2tmcmVkcmlrL2xvY2FsL2djYy1zbmFwc2hvdC9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9saW1pdHMuaCIgMSAzIDQKIyAxMjIg Ii9zdGFmZi9rZnJlZHJpay9sb2NhbC9nY2Mtc25hcHNob3QvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4zL2luY2x1ZGUvbGltaXRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9saW1p dHMuaCIgMSAzIDQKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMyA0CiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMgNAojIDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMv cG9zaXgxX2xpbS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAz IDQKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMgNAojIDEgIi91c3IvaW5j bHVkZS9saW51eC9saW1pdHMuaCIgMSAzIDQKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxf bGltLmgiIDIgMyA0CiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMyA0 CiMgMTQ1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9pbmNsdWRl L2JpdHMvcG9zaXgyX2xpbS5oIiAxIDMgNAojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAy IDMgNAoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxIDMgNAojIDM0ICIv dXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv c3RkaW9fbGltLmgiIDEgMyA0CiMgMzUgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAy IDMgNAojIDE1MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDEyMyAiL3N0YWZmL2tm cmVkcmlrL2xvY2FsL2djYy1zbmFwc2hvdC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjMvaW5jbHVkZS9saW1pdHMuaCIgMiAzIDQKIyA4ICIvc3RhZmYva2ZyZWRyaWsvbG9jYWwvZ2Nj LXNuYXBzaG90L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N5c2xp bWl0cy5oIiAyIDMgNAojIDEyICIvc3RhZmYva2ZyZWRyaWsvbG9jYWwvZ2NjLXNuYXBzaG90L2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAoj IDIxICJicGVkLkMiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMyA0CiMgMjggIi91 c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0CmV4dGVybiAiQyIgewoKCgoKIyAxICIvc3RhZmYva2Zy ZWRyaWsvbG9jYWwvZ2NjLXNuYXBzaG90L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu My9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIg MyA0CgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf X24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29u c3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZv aWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVz dHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQog ICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQgX19j LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lk ICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2 b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHZvaWQgKnJhd21lbWNociAoX19jb25zdCB2b2lk ICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4 dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9f bikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4g Y2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIg Kl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3Ry Y2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f c3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJp Y3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25z dCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19z MSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpf X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0 LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywg c2l6ZV90IF9fbikgdGhyb3cgKCk7CiMgMTExICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNApl eHRlcm4gaW50IF9fc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq X19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3Qg Y2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9j YWxlX3QgX19sKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hh ciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRl cm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAiL3Vzci9pbmNs dWRlL3N0cmluZy5oIiAzIDQKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFyICpfX3Ms IGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNo YXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjaHJudWwgKF9fY29uc3Qg Y2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hh ciAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK ZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9f YWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJu IGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0 KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIg KnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxl KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hh ciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9f bmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRl cm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cnRva19y IChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq Kl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RydG9rX3Ig KGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwK ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19jb25zdCB2b2lkICpfX2hheXN0YWNr LCBzaXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lk ICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19tZW1wY3B5ICh2b2lkICpfX3Jlc3Ry aWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3Ry aWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgKm1lbXBjcHkgKHZv aWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lk ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXpl X3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJp bmcsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl X18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9fZXJybnVtKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNp emVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpf X3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25zdCB2 b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4g dm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19u KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFy ICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19z LCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJu IGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK CgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9u ZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK CgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy ICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy biBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3My LCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CgoKCmV4dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25z dCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9j KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgX19zdHJu Y2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0 cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpzdHJz aWduYWwgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKl9fc3RwY3B5IChjaGFy ICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAg IHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4g Y2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJv dyAoKTsKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg X19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgdGhy b3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVu YW1lKSB0aHJvdyAoKTsKIyAzNjQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMyA0Cn0KIyAyMiAi YnBlZC5DIiAyCiMgMSAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDEgMyA0CiMgMjkgIi91c3IvaW5j bHVkZS9mY250bC5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv ZmNudGwuaCIgMSAzIDQKIyAxMzYgIi91c3IvaW5jbHVkZS9iaXRzL2ZjbnRsLmgiIDMgNApzdHJ1 Y3QgZmxvY2sKICB7CiAgICBzaG9ydCBpbnQgbF90eXBlOwogICAgc2hvcnQgaW50IGxfd2hlbmNl OwoKICAgIF9fb2ZmX3QgbF9zdGFydDsKICAgIF9fb2ZmX3QgbF9sZW47CgoKCgogICAgX19waWRf dCBsX3BpZDsKICB9OwoKCnN0cnVjdCBmbG9jazY0CiAgewogICAgc2hvcnQgaW50IGxfdHlwZTsK ICAgIHNob3J0IGludCBsX3doZW5jZTsKICAgIF9fb2ZmNjRfdCBsX3N0YXJ0OwogICAgX19vZmY2 NF90IGxfbGVuOwogICAgX19waWRfdCBsX3BpZDsKICB9OwojIDM0ICIvdXNyL2luY2x1ZGUvZmNu dGwuaCIgMiAzIDQKIyA2MCAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDMgNApleHRlcm4gaW50IGZj bnRsIChpbnQgX19mZCwgaW50IF9fY21kLCAuLi4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg b3BlbiAoX19jb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX29mbGFnLCAuLi4pIHRocm93ICgpOwoj IDc2ICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMyA0CmV4dGVybiBpbnQgb3BlbjY0IChfX2NvbnN0 IGNoYXIgKl9fZmlsZSwgaW50IF9fb2ZsYWcsIC4uLikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBp bnQgY3JlYXQgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX21vZGVfdCBfX21vZGUpIHRocm93ICgp OwojIDkzICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMyA0CmV4dGVybiBpbnQgY3JlYXQ2NCAoX19j b25zdCBjaGFyICpfX2ZpbGUsIF9fbW9kZV90IF9fbW9kZSkgdGhyb3cgKCk7CiMgMTMwICIvdXNy L2luY2x1ZGUvZmNudGwuaCIgMyA0CmV4dGVybiBpbnQgcG9zaXhfZmFkdmlzZSAoaW50IF9fZmQs IF9fb2ZmX3QgX19vZmZzZXQsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19hZHZpc2UpIHRocm93ICgpOwojIDE0MiAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDMg NApleHRlcm4gaW50IHBvc2l4X2ZhZHZpc2U2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX29mZnNl dCwgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWR2aXNl KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHBvc2l4X2ZhbGxvY2F0ZSAoaW50IF9fZmQsIF9f b2ZmX3QgX19vZmZzZXQsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CiMgMTYwICIvdXNyL2luY2x1 ZGUvZmNudGwuaCIgMyA0CmV4dGVybiBpbnQgcG9zaXhfZmFsbG9jYXRlNjQgKGludCBfX2ZkLCBf X29mZjY0X3QgX19vZmZzZXQsIHNpemVfdCBfX2xlbikKICAgICB0aHJvdyAoKTsKCgoKfQojIDIz ICJicGVkLkMiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWVzLmgiIDEgMyA0CiMgMjkgIi91 c3IvaW5jbHVkZS9zeXMvdGltZXMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAz IDQKIyAzMCAiL3Vzci9pbmNsdWRlL3N5cy90aW1lcy5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewoK CnN0cnVjdCB0bXMKICB7CiAgICBjbG9ja190IHRtc191dGltZTsKICAgIGNsb2NrX3QgdG1zX3N0 aW1lOwoKICAgIGNsb2NrX3QgdG1zX2N1dGltZTsKICAgIGNsb2NrX3QgdG1zX2NzdGltZTsKICB9 OwoKCgoKCgpleHRlcm4gY2xvY2tfdCB0aW1lcyAoc3RydWN0IHRtcyAqX19idWZmZXIpIHRocm93 ICgpOwoKfQojIDI0ICJicGVkLkMiIDIKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL21hbGxvYy5o IiAxIDMgNAojIDQ0ICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiIDMgNAojIDEgIi9zdGFmZi9rZnJl ZHJpay9sb2NhbC9nY2Mtc25hcHNob3QvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4z L2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMTUxICIvc3RhZmYva2ZyZWRyaWsvbG9jYWwvZ2Nj LXNuYXBzaG90L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRl Zi5oIiAzIDQKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDQ1ICIvdXNyL2luY2x1ZGUvbWFsbG9j LmgiIDIgMyA0CiMgMTA0ICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiIDMgNApleHRlcm4gIkMiIHsK IyAxMTMgIi91c3IvaW5jbHVkZS9tYWxsb2MuaCIgMyA0CmV4dGVybiB2b2lkICogbWFsbG9jIChz aXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCmV4 dGVybiB2b2lkICogY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cg KCkKICAgICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB2b2lkICog cmVhbGxvYyAodm9pZCAqIF9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKQoKICAgICAgIF9f YXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqIF9f cHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqIF9fcHRyKSB0aHJvdyAo KTsKCgpleHRlcm4gdm9pZCAqIG1lbWFsaWduIChzaXplX3QgX19hbGlnbm1lbnQsIHNpemVfdCBf X3NpemUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICogdmFsbG9jIChzaXplX3QgX19zaXplKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4gdm9pZCAqIHB2 YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpCiAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19t YWxsb2NfXykpOwoKCgpleHRlcm4gdm9pZCAqICgqX19tb3JlY29yZSkgKHB0cmRpZmZfdCBfX3Np emUpOwoKCmV4dGVybiB2b2lkICogX19kZWZhdWx0X21vcmVjb3JlIChwdHJkaWZmX3QgX19zaXpl KSB0aHJvdyAoKQogICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgpzdHJ1Y3Qg bWFsbGluZm8gewogIGludCBhcmVuYTsKICBpbnQgb3JkYmxrczsKICBpbnQgc21ibGtzOwogIGlu dCBoYmxrczsKICBpbnQgaGJsa2hkOwogIGludCB1c21ibGtzOwogIGludCBmc21ibGtzOwogIGlu dCB1b3JkYmxrczsKICBpbnQgZm9yZGJsa3M7CiAgaW50IGtlZXBjb3N0Owp9OwoKCmV4dGVybiBz dHJ1Y3QgbWFsbGluZm8gbWFsbGluZm8gKHZvaWQpIHRocm93ICgpOwojIDE4OSAiL3Vzci9pbmNs dWRlL21hbGxvYy5oIiAzIDQKZXh0ZXJuIGludCBtYWxsb3B0IChpbnQgX19wYXJhbSwgaW50IF9f dmFsKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBtYWxsb2NfdHJpbSAoc2l6ZV90IF9fcGFkKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBtYWxsb2NfdXNhYmxlX3NpemUgKHZvaWQgKiBfX3B0 cikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgbWFsbG9jX3N0YXRzICh2b2lkKSB0aHJvdyAoKTsK CgpleHRlcm4gdm9pZCAqIG1hbGxvY19nZXRfc3RhdGUgKHZvaWQpIHRocm93ICgpOwoKCgpleHRl cm4gaW50IG1hbGxvY19zZXRfc3RhdGUgKHZvaWQgKiBfX3B0cikgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIHZvaWQgKCpfX21hbGxvY19pbml0aWFsaXplX2hvb2spICh2b2lkKTsKCmV4dGVybiB2b2lk ICgqX19mcmVlX2hvb2spICh2b2lkICogX19wdHIsIF9fY29uc3Qgdm9pZCAqKTsKCmV4dGVybiB2 b2lkICogKCpfX21hbGxvY19ob29rKSAoc2l6ZV90IF9fc2l6ZSwgX19jb25zdCB2b2lkICopOwoK ZXh0ZXJuIHZvaWQgKiAoKl9fcmVhbGxvY19ob29rKSAodm9pZCAqIF9fcHRyLCBzaXplX3QgX19z aXplLCBfX2NvbnN0IHZvaWQgKik7CgoKZXh0ZXJuIHZvaWQgKiAoKl9fbWVtYWxpZ25faG9vaykg KHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSwgX19jb25zdCB2b2lkICopOwoKCmV4 dGVybiB2b2lkICgqX19hZnRlcl9tb3JlY29yZV9ob29rKSAodm9pZCk7CgoKZXh0ZXJuIHZvaWQg X19tYWxsb2NfY2hlY2tfaW5pdCAodm9pZCkgdGhyb3cgKCk7CgoKCn07CiMgMzIgImJwZWQuQyIg MgoKIyAxICJzc2VjLWdudS5IIiAxCiMgMTAgInNzZWMtZ251LkgiCnR5cGVkZWYgaW50IHY0c2Yg X19hdHRyaWJ1dGVfXyAoKG1vZGUoVjRTRikpKTsKCmNvbnN0IHY0c2YgbW8gPSB7IH4wLCB+MCwg fjAsIH4wIH07CgpjbGFzcyBsb25naW50CnsKcHVibGljOgoKICAgICAgICBsb25naW50KCkge30K CiAgICAgICAgb3BlcmF0b3IgdjRzZigpY29uc3QgeyByZXR1cm4geDsgfQoKCiAgICAgICAgbG9u Z2ludCggdjRzZiBtbSApIHsgeCA9IG1tOyB9CiAgICAgICAgbG9uZ2ludCggaW50IGkgKSB7IHgg PSBfX2J1aWx0aW5faWEzMl9sb2Fkc3MoKCBmbG9hdCAqICkmaSApOyB9CgogICAgICAgIG9wZXJh dG9yIGludCgpIHsgcmV0dXJuICooKCBpbnQgKiApKCAmeCApKTsgfQogICAgICAgIG9wZXJhdG9y IHY0c2YoKSB7IHJldHVybiB4OyB9Cgpwcm90ZWN0ZWQ6CgogICAgICAgIHY0c2YgeDsKfTsKCmxv bmdpbnQgaW5saW5lIGxvYWR2ZWMoIGludCBhLCBpbnQgYiwgaW50IGMsIGludCBkICkKewogICAg ICAgIHY0c2YgdjsKICAgICAgICBpbnQgKiB3ID0gKCBpbnQgKiApJnY7CgogICAgICAgIHdbIDAg XSA9IGQ7CiAgICAgICAgd1sgMSBdID0gYzsKICAgICAgICB3WyAyIF0gPSBiOwogICAgICAgIHdb IDMgXSA9IGE7CgogICAgICAgIHJldHVybiAqKCB2NHNmICopdzsKfQoKbG9uZ2ludCBpbmxpbmUg emVybygpCnsKICAgICAgICB2NHNmIGE7CgogICAgICAgIHJldHVybiBfX2J1aWx0aW5faWEzMl94 b3JwcyggYSwgYSApOwp9Cgpsb25naW50IGlubGluZSBvbmUoKQp7CiAgICAgICAgcmV0dXJuIGxv YWR2ZWMoIDAsIDAsIDAsIDEgKTsKfQoKCnN0YXRpYyB2b2lkIGlubGluZSBhZGQoIHVuc2lnbmVk ICogcSwgdW5zaWduZWQgKiB2LCB1bnNpZ25lZCAqIHcgKQp7CiAgICAgICAgaW50IGk7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBsb25nIHIgPSAwTEw7CgogICAgICAgIGZvciggaSA9IDA7IGkgPCA0 OyBpKysgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHIgPSAoIHVuc2lnbmVkIGxvbmcgbG9u ZyApdlsgaSBdICsKICAgICAgICAgICAgICAgICAgICAoIHVuc2lnbmVkIGxvbmcgbG9uZyApd1sg aSBdICsgcjsKICAgICAgICAgICAgICAgIHFbIGkgXSA9ICggdW5zaWduZWQgKXI7CiAgICAgICAg ICAgICAgICByID4+PSAzMjsKICAgICAgICB9Cn0KCnN0YXRpYyB2b2lkIGlubGluZSBhZGRfYXNt KCB1bnNpZ25lZCAqIGEsIHVuc2lnbmVkICogYiApCnsKICAgICAgICBhc20gKCJhZGRsCSUxLCUw IiA6ICI9cixybSIgKGFbMF0pIDogIiVnLHJpIiAoYlswXSksIjAsMCIgKGFbMF0pKTsKICAgICAg ICBhc20gKCJhZGNsCSUxLCUwIiA6ICI9cixybSIgKGFbMV0pIDogIiVnLHJpIiAoYlsxXSksIjAs MCIgKGFbMV0pKTsKICAgICAgICBhc20gKCJhZGNsCSUxLCUwIiA6ICI9cixybSIgKGFbMl0pIDog IiVnLHJpIiAoYlsyXSksIjAsMCIgKGFbMl0pKTsKICAgICAgICBhc20gKCJhZGNsCSUxLCUwIiA6 ICI9cixybSIgKGFbM10pIDogIiVnLHJpIiAoYlszXSksIjAsMCIgKGFbM10pKTsKCgoKCgoKfQoK aW50IGlubGluZSB2ZWN0ZXN0Yml0KCBsb25naW50IGEsIGludCBiICkKewogICAgICAgIGludCAq IGMgPSAoIGludCAqICkmYTsKCiAgICAgICAgcmV0dXJuICgoIGNbICgoIGIgKSAvIDMyICkgXSA+ PiAoICgoIGIgKSAlIDMyICkgKSkgJiAxICk7Cn0KCgoKaW50IGlubGluZSBvcGVyYXRvciYmKCBs b25naW50IGEsIGludCBiICkKewogICAgICAgIHJldHVybiB2ZWN0ZXN0Yml0KCBhLCBiICk7Cn0K CmxvbmdpbnQgaW5saW5lIG9wZXJhdG9yfCggbG9uZ2ludCBhLCBsb25naW50IGIgKQp7CiAgICAg ICAgdjRzZiBjOwogICAgICAgIGMgPSBfX2J1aWx0aW5faWEzMl9vcnBzKCBhLCBiICk7CgogICAg ICAgIHJldHVybiAoIGxvbmdpbnQgKWM7Cn0KCmxvbmdpbnQgaW5saW5lIG9wZXJhdG9yfD0oIGxv bmdpbnQgJiBhLCBsb25naW50IGIgKQp7CiAgICAgICAgYSA9IGEgfCBiOwoKICAgICAgICByZXR1 cm4gYTsKfQoKdm9pZCBpbmxpbmUgc2hsX3MoIHVuc2lnbmVkICogYSwgaW50IHMgKQp7CiAgICAg ICAgaW50IGk7CgogICAgICAgIGZvciggaSA9IDM7IGkgPiAwOyBpLS0gKQogICAgICAgIHsKICAg ICAgICAgICAgICAgIGFbIGkgXSA9ICggYVsgaSBdIDw8IHMgKSB8ICgoIGFbIGkgLSAxIF0gKSA+ PiAoIDMyIC0gcyApKTsKICAgICAgICB9CiAgICAgICAgYVsgMCBdIDw8PSBzOwp9Cgp2b2lkIGlu bGluZSBzaGxfMSggdW5zaWduZWQgKiBhICkKewogICAgICAgIGFzbSggInNobGQJJDEsJTEsJTAi IDogIj1tIiAoYVszXSkgOiAiciIgKGFbMl0pICk7CiAgICAgICAgYXNtKCAic2hsZAkkMSwlMSwl MCIgOiAiPW0iIChhWzJdKSA6ICJyIiAoYVsxXSkgKTsKICAgICAgICBhc20oICJzaGxkCSQxLCUx LCUwIiA6ICI9bSIgKGFbMV0pIDogInIiIChhWzBdKSApOwoKICAgICAgICBhWyAwIF0gPDw9IDE7 Cn0KCmxvbmdpbnQgaW5saW5lIG9wZXJhdG9yPDwoIGxvbmdpbnQgYSwgaW50IGMgKQp7CiAgICAg ICAgbG9uZ2ludCBiID0gYTsKIyAxNDggInNzZWMtZ251LkgiCiAgICAgICAgc2hsX3MoKCB1bnNp Z25lZCAqICkmYiwgMSApOwoKCiAgICAgICAgcmV0dXJuIGI7Cn0KCmxvbmdpbnQgaW5saW5lIG9w ZXJhdG9yPj4oIGxvbmdpbnQgYSwgdW5zaWduZWQgaW50IGMgKQp7CiAgICAgICAgdjRzZiBiOwoK ICAgICAgICBpZiggYyAhPSAxMjcgKQogICAgICAgIHsKCgoKICAgICAgICAgICAgICAgIHJldHVy biBhOwogICAgICAgIH0KCiAgICAgICAgYiA9IF9fYnVpbHRpbl9pYTMyX3hvcnBzKCBiLCBiICk7 CgogICAgICAgICooKCBpbnQgKiApJmIgKSA9ICooKCB1bnNpZ25lZCBpbnQgKiApJmEgKyAzICkg Pj4gMzE7CgogICAgICAgIHJldHVybiBiOwp9Cgpsb25naW50IGlubGluZSBvcGVyYXRvcj4+PSgg bG9uZ2ludCAmIGEsIHVuc2lnbmVkIGludCBjICkKewogICAgICAgIGEgPSBhID4+IGM7CgogICAg ICAgIHJldHVybiBhOwp9Cgpsb25naW50IGlubGluZSBvcGVyYXRvcjw8PSggbG9uZ2ludCAmIGEs IGludCBjICkKewogICAgICAgIGEgPSBhIDw8IGM7CgogICAgICAgIHJldHVybiBhOwp9Cgpsb25n aW50IGlubGluZSBvcGVyYXRvcl4oIGxvbmdpbnQgYSwgbG9uZ2ludCBiICkKewogICAgICAgIHJl dHVybiBfX2J1aWx0aW5faWEzMl94b3JwcyggYSwgYiApOwp9Cgpsb25naW50IGlubGluZSBvcGVy YXRvcl49KCBsb25naW50ICYgYSwgbG9uZ2ludCBiICkKewogICAgICAgIGEgPSBhIF4gYjsKCiAg ICAgICAgcmV0dXJuIGE7Cn0KCmxvbmdpbnQgaW5saW5lIG9wZXJhdG9yJiggbG9uZ2ludCBhLCBs b25naW50IGIgKQp7CiAgICAgICAgcmV0dXJuIF9fYnVpbHRpbl9pYTMyX2FuZHBzKCBhLCBiICk7 Cn0KCmxvbmdpbnQgaW5saW5lIG9wZXJhdG9yJj0oIGxvbmdpbnQgJiBhLCBsb25naW50IGIgKQp7 CiAgICAgICAgYSA9IGEgJiBiOwoKICAgICAgICByZXR1cm4gYTsKfQoKbG9uZ2ludCBpbmxpbmUg b3BlcmF0b3J+KCBsb25naW50IGEgKQp7CgoKICAgICAgICByZXR1cm4gX19idWlsdGluX2lhMzJf YW5kbnBzKCBhLCBtbyApOwoKfQoKCgpsb25naW50IGlubGluZSBvcGVyYXRvcisoIGxvbmdpbnQg YSApCnsKICAgICAgICByZXR1cm4gYTsKfQoKbG9uZ2ludCBpbmxpbmUgb3BlcmF0b3IrKCBsb25n aW50IGEsIGxvbmdpbnQgYiApCnsKICAgICAgICBhZGRfYXNtKCggdW5zaWduZWQgKiApJmEsICgg dW5zaWduZWQgKiApJmIgKTsKCgogICAgICAgIHJldHVybiBhOwp9CgoKbG9uZ2ludCBpbmxpbmUg b3BlcmF0b3IrPSggbG9uZ2ludCAmIGEsIGxvbmdpbnQgYiApCnsKICAgICAgICBhID0gYSArIGI7 CgogICAgICAgIHJldHVybiBhOwp9CgoKc3RhdGljIGlubGluZSB2b2lkICogbW1hbGxvYyggaW50 IGJ5dGVzICkKewogICAgICAgIGNoYXIgKiBkOwogICAgICAgIGludCBpOwoKICAgICAgICBkID0g KCBjaGFyICogKW1hbGxvYyggYnl0ZXMgKyAxNiApOwoKICAgICAgICBpID0gKCggaW50IClkICsg MTUgKSAmIH4oIDE1ICk7CgogICAgICAgIHJldHVybiAoIHZvaWQgKiApaTsKfQojIDM0ICJicGVk LkMiIDIKIyA1MCAiYnBlZC5DIgp0eXBlZGVmIGxvbmdpbnQgZHB2ZWM7CiMgMTExICJicGVkLkMi CnR5cGVkZWYgaW50ICggKiBNQVRDSENPREUgKSggaW50IGksIGludCBzY29yZSApOwoKCgpzdGF0 aWMgaW50IGxvY2F0aW9uID0gMDsKc3RhdGljIGludCBkaXN0YW5jZSA9IDA7CnN0YXRpYyBpbnQg dGltaW5nID0gMDsKc3RhdGljIGludCBxdWlldCA9IDA7CnN0YXRpYyBpbnQgc2hyaW5rayA9IDA7 CnN0YXRpYyBpbnQgbWluZGlzdCA9IDEgPDwgMzA7CgpzdGF0aWMgc3RydWN0IHRtcyBzdGFydDsK c3RhdGljIHN0cnVjdCB0bXMgc3RvcDsKCnR5cGVkZWYgc3RydWN0IHZlY3N1bQp7CiAgICAgICAg c2lnbmVkIGNoYXIgaVsgMSA8PCAxNiBdOwogICAgICAgIHNpZ25lZCBjaGFyIG1bIDEgPDwgMTYg XTsKCn0gVkVDU1VNOwoKdm9pZCBzdGFydGNsb2NrKCkKewogICAgICAgIHRpbWVzKCAmc3RhcnQg KTsKfQoKbG9uZyBzdG9wY2xvY2soKQp7CiAgICAgICAgdGltZXMoICZzdG9wICk7CiAgICAgICAg cmV0dXJuIHN0b3AudG1zX3V0aW1lIC0gc3RhcnQudG1zX3V0aW1lICsKICAgICAgICAgICAgICAg c3RvcC50bXNfc3RpbWUgLSBzdGFydC50bXNfc3RpbWU7Cn0KCmxvbmcgZ2V0X2Nsb2NrKCkKewog ICAgICAgIHN0cnVjdCB0bXMgbm93OwoKICAgICAgICB0aW1lcyggJm5vdyApOwoKICAgICAgICBy ZXR1cm4gbm93LnRtc191dGltZTsKfQoKCmNoYXIgKiBmX3JlYWRfYnl0ZXMoIGNoYXIgKiBmbiwg aW50ICogbiApCnsKICAgICAgICBzdHJ1Y3Qgc3RhdCBidWY7CiAgICAgICAgaW50IGk7CiAgICAg ICAgY2hhciAqIGI7CgogICAgICAgIHN0YXQoIGZuLCAmYnVmICk7CgogICAgICAgIGkgPSBvcGVu KCBmbiwgMDAgKTsKCiAgICAgICAgYiA9ICggY2hhciAqICltbWFsbG9jKCBidWYuc3Rfc2l6ZSAp OwoKICAgICAgICBpZiggaSA9PSAtMSApIHByaW50ZigiRVJST1JcbiIpOwoKICAgICAgICAqbiA9 IHJlYWQoIGksIGIsIGJ1Zi5zdF9zaXplICk7CgoKCiAgICAgICAgY2xvc2UoIGkgKTsKCiAgICAg ICAgcmV0dXJuIGI7Cn0KCnZvaWQgKiphbGxvY2F0ZV8yZCggaW50IHIsIGludCBjLCBpbnQgZSAp CnsKICAgICAgICBpbnQgaTsKICAgICAgICB2b2lkICoqYSA9ICggdm9pZCAqKiApbW1hbGxvYygg ciAqIHNpemVvZiggdm9pZCAqICkgKTsKCiAgICAgICAgYVsgMCBdID0gbW1hbGxvYyggciAqIGMg KiBlICk7CiAgICAgICAgZm9yKCBpID0gMTsgaSA8IHI7IGkrKyApIGFbIGkgXSA9ICggY2hhciAq IClhWyAwIF0gKyBpICogYyAqIGU7CgogICAgICAgIHJldHVybiBhOwp9CiMgMjY1ICJicGVkLkMi CnN0YXRpYyBkcHZlYyAqKiBwcmVwX2JlcV9oKCBkcHZlYyAqIGwsIGRwdmVjICogaCwgaW50IG0s IGludCBtb2RlICkKewogICAgICAgIGludCBpLCBzZWc7CiAgICAgICAgZHB2ZWMgKiogcGVxOwoK ICAgICAgICBzZWcgPSAoKCBtICsgKCBzaXplb2YoIGRwdmVjICkgKiA4ICkgLSAxICkgLyAoIHNp emVvZiggZHB2ZWMgKSAqIDggKSApOwoKCgoKCiAgICAgICAgaWYoIG1vZGUgPT0gMCApCiAgICAg ICAgewogICAgICAgICAgICAgICAgcGVxID0gKCBkcHZlYyAqKiApYWxsb2NhdGVfMmQoIHNlZywg NCwgc2l6ZW9mKCBkcHZlYyApKTsKCiAgICAgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwgc2Vn OyBpKysgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBwZXFbIGkg XVsgMCBdID0gfmxbIGkgXSAmIH5oWyBpIF07CiAgICAgICAgICAgICAgICAgICAgICAgIHBlcVsg aSBdWyAxIF0gPSBsWyBpIF0gJiB+aFsgaSBdOwogICAgICAgICAgICAgICAgICAgICAgICBwZXFb IGkgXVsgMiBdID0gfmxbIGkgXSAmIGhbIGkgXTsKICAgICAgICAgICAgICAgICAgICAgICAgcGVx WyBpIF1bIDMgXSA9IGxbIGkgXSAmIGhbIGkgXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAg ICAgICAgICByZXR1cm4gcGVxOwogICAgICAgIH0KCiAgICAgICAgaWYoIG1vZGUgPT0gMSApCiAg ICAgICAgewogICAgICAgICAgICAgICAgcGVxID0gKCBkcHZlYyAqKiApYWxsb2NhdGVfMmQoIDQs IHNlZywgc2l6ZW9mKCBkcHZlYyApKTsKCiAgICAgICAgICAgICAgICBmb3IoIGkgPSAwOyBpIDwg c2VnOyBpKysgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBwZXFb IDAgXVsgaSBdID0gfmxbIGkgXSAmIH5oWyBpIF07CiAgICAgICAgICAgICAgICAgICAgICAgIHBl cVsgMSBdWyBpIF0gPSBsWyBpIF0gJiB+aFsgaSBdOwogICAgICAgICAgICAgICAgICAgICAgICBw ZXFbIDIgXVsgaSBdID0gfmxbIGkgXSAmIGhbIGkgXTsKICAgICAgICAgICAgICAgICAgICAgICAg cGVxWyAzIF1bIGkgXSA9IGxbIGkgXSAmIGhbIGkgXTsKICAgICAgICAgICAgICAgIH0KCiAgICAg ICAgICAgICAgICByZXR1cm4gcGVxOwogICAgICAgIH0KCiAgICAgICAgZnByaW50Ziggc3RkZXJy LCAiSW52YWxpZGUgZXEgbGF5b3V0ICVkLi4uXG4iLCBtb2RlICk7CgogICAgICAgIHJldHVybiAw Owp9CgpzdGF0aWMgdm9pZCBzdW1fYml0c19jKCBpbnQgcCwgaW50IG4sIFZFQ1NVTSAqIHYgKQp7 CiAgICAgICAgaW50IGNwID0gMCwgY24gPSAwLCBtaW4gPSAxMDAwLCBpOwoKICAgICAgICBpID0g KCBwIDw8IDggKSArIG47CgogICAgICAgIGRvIHsgY3AgKz0gcCAmIDE7CiAgICAgICAgICAgICAg ICBjbiArPSBuICYgMTsKCiAgICAgICAgICAgICAgICBpZiggY3AgLSBjbiA8IG1pbiApIG1pbiA9 IGNwIC0gY247CgogICAgICAgICAgICAgICAgcCA+Pj0gMTsKICAgICAgICAgICAgICAgIG4gPj49 IDE7CgogICAgICAgIH0gd2hpbGUoIHAgfHwgbiApOwoKICAgICAgICB2LT5pWyBpIF0gPSBjcCAt IGNuOwogICAgICAgIHYtPm1bIGkgXSA9IG1pbjsKCgp9CgpzdGF0aWMgdm9pZCBidWlsZF92ZWNz dW0oIFZFQ1NVTSAqIFYgKQp7CiAgICAgICAgaW50IGksIGo7CgogICAgICAgIGZvciggaSA9IDA7 IGkgPCAyNTY7IGkrKyApCiAgICAgICAgICAgICAgICBmb3IoIGogPSAwOyBqIDwgMjU2OyBqKysg KSBzdW1fYml0c19jKCBpLCBqLCBWICk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IHN1bV9iaXRzKCB1 bnNpZ25lZCBwLCB1bnNpZ25lZCBuLCBpbnQgcywgaW50IGssCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgaSwgaW50IG5uICkKewogICAgICAgIGludCBqLCBtYXRjaGVzID0gMDsKCiAg ICAgICAgZm9yKCBqID0gMDsgaiA8IDg7IGorKyApCiAgICAgICAgewogICAgICAgICAgICAgICAg cyArPSBwICYgMTsKICAgICAgICAgICAgICAgIHMgLT0gbiAmIDE7CgogICAgICAgICAgICAgICAg aWYoIHMgPD0gayApCiAgICAgICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgICAgICAgICAg IGlmKCBpICsgaiA8IG5uICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG1hdGNoZXMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiggbG9jYXRpb24gKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJTEwZCIsIGkgKyBq ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggIWRpc3RhbmNl ICkgcHJpbnRmKCJcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggZGlzdGFuY2UgKSBwcmludGYoIiUzZFxuIiwg cyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBzaHJpbmtrICkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiggcyA8IG1pbmRpc3QgKSBtaW5kaXN0ID0gczsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBzIC0gMTsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgfQoKICAgICAgICAgICAgICAgIHAgPj49IDE7CiAgICAgICAgICAgICAgICBuID4+PSAxOwog ICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG1hdGNoZXM7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IHN1 bV9iaXRzX3ZlY21pbiggdW5zaWduZWQgY2hhciAqIHBwLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiBubiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgYiwgaW50ICogdCwgaW50IGssIFZFQ1NVTSAqIHYs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG8sIGludCBtaW4s IGludCBtLCBpbnQgbiApCnsKICAgICAgICBpbnQgaSA9IDAsIGogPSAwOwogICAgICAgIGludCBz ID0gKnQsIG1hdGNoZXMgPSAwOwoKICAgICAgICBmb3IoIGkgPSAwOyBpIDwgYjsgaSsrICkKCiAg ICAgICAgewoKICAgICAgICAgICAgICAgIGogPSAoKCB1bnNpZ25lZCApcHBbIGkgXSA8PCA4ICkg KyAoIHVuc2lnbmVkIClublsgaSBdOwoKICAgICAgICAgICAgICAgIGlmKCBtaW4gKQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiggcyArIHYtPm1bIGogXSA8PSBr ICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmKCBtICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzICs9IHN1bV9iaXRzKCBwcFsgaSBd LCBublsgaSBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzLCBrLCBpICogOCArIG8sIG4gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmKCBzaHJpbmtrICYmIG1pbmRpc3QgPCBrICkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IG1pbmRpc3QgLSAxOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAg ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAg IHMgKz0gdi0+aVsgaiBdOwoKCiAgICAgICAgfQoKCiAgICAgICAgKnQgPSBzOwoKICAgICAgICBy ZXR1cm4gbWF0Y2hlczsKfQoKc3RhdGljIGludCBicGVkaGgoIHVuc2lnbmVkIGNoYXIgKiBULCBp bnQgbiwgaW50IG0sIGludCBrLCBkcHZlYyAqKiBwZXEgKQp7CiAgICAgICAgZHB2ZWMgcGMsIG1j OwogICAgICAgIGRwdmVjICplOwogICAgICAgIGRwdmVjIHgsIGQsIGhwLCBobiwgKiB2cCwgKiB2 bjsKICAgICAgICBpbnQgaSwgciwgYiwgbWF0Y2hlcyA9IDAsIG1hcFsgMjU2IF07CiAgICAgICAg VkVDU1VNICogdjsKCiAgICAgICAgYiA9ICgoIG0gKyAoIHNpemVvZiggZHB2ZWMgKSAqIDggKSAt IDEgKSAvICggc2l6ZW9mKCBkcHZlYyApICogOCApICk7CgoKCiAgICAgICAgaSA9ICggYiArIDEg KSAqIHNpemVvZiggZHB2ZWMgKTsKCiAgICAgICAgdnAgPSAoIGRwdmVjICogKW1tYWxsb2MoIGkg KTsKICAgICAgICB2biA9ICggZHB2ZWMgKiApbW1hbGxvYyggaSApOwoKICAgICAgICB2ID0gKCBW RUNTVU0gKiApbW1hbGxvYyggc2l6ZW9mKCBWRUNTVU0gKSApOwoKICAgICAgICBidWlsZF92ZWNz dW0oIHYgKTsKCiAgICAgICAgbWFwWydhJ10gPSBtYXBbJ0EnXSA9IDA7CiAgICAgICAgbWFwWydj J10gPSBtYXBbJ0MnXSA9IDE7CiAgICAgICAgbWFwWydnJ10gPSBtYXBbJ0cnXSA9IDI7CiAgICAg ICAgbWFwWyd0J10gPSBtYXBbJ1QnXSA9IDM7CgogICAgICAgIGZvciggciA9IDA7IHIgPCBiOyBy KysgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHZwWyByIF0gPSAoIGRwdmVjICkwOwogICAg ICAgICAgICAgICAgdm5bIHIgXSA9ICggZHB2ZWMgKTA7CiAgICAgICAgfQoKICAgICAgICBmb3Io IGkgPSAwOyBpIDwgbjsgaSsrICkKICAgICAgICB7CgoKICAgICAgICAgICAgICAgIGUgPSBwZXFb IG1hcFsgVFsgaSBdXV07CgogICAgICAgICAgICAgICAgcGMgPSAoIGRwdmVjICkxOwogICAgICAg ICAgICAgICAgbWMgPSAoIGRwdmVjICkwOwoKICAgICAgICAgICAgICAgIGZvciggciA9IDA7IHIg PCBiOyByKysgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB4ID0g KmUrKyB8IG1jOwoKICAgICAgICAgICAgICAgICAgICAgICAgZCA9ICgoIHZwWyByIF0gKyAoIHgg JiB2cFsgciBdICkpIF4gdnBbIHIgXSApOwogICAgICAgICAgICAgICAgICAgICAgICBkIHw9IHgg fCB2blsgciBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgaHAgPSB2blsgciBdIHwgfiggdnBb IHIgXSB8IGQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgaG4gPSB2cFsgciBdICYgZDsKCiAg ICAgICAgICAgICAgICAgICAgICAgIHggPSAoIGhwIDw8IDEgKSB8IHBjOwoKICAgICAgICAgICAg ICAgICAgICAgICAgdnBbIHIgXSA9ICggaG4gPDwgMSApIHwgbWMgfCB+KCB4IHwgZCApOwogICAg ICAgICAgICAgICAgICAgICAgICB2blsgciBdID0geCAmIGQ7CgogICAgICAgICAgICAgICAgICAg ICAgICBwYyA9IGhwID4+ICggKCBzaXplb2YoIGRwdmVjICkgKiA4ICkgLSAxICk7CiAgICAgICAg ICAgICAgICAgICAgICAgIG1jID0gaG4gPj4gKCAoIHNpemVvZiggZHB2ZWMgKSAqIDggKSAtIDEg KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG1hdGNoZXMgPSBzdW1fYml0 c192ZWNtaW4oKCB1bnNpZ25lZCBjaGFyICogKXZwLCAoIHVuc2lnbmVkIGNoYXIgKil2biwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgKiBzaXplb2YoIGRwdmVjICksICZuLCBr LCB2LCAwLCAxLCAxLCBtICk7CgoKICAgICAgICA7CiAgICAgICAgOwogICAgICAgIDsKCiAgICAg ICAgcmV0dXJuIG1hdGNoZXM7Cn0KIyA1MTEgImJwZWQuQyIKc3RhdGljIGludCBicGVkaCggdW5z aWduZWQgY2hhciAqIFQsIGludCBuLCBpbnQgbSwgaW50IGssIGRwdmVjICoqIHBlcSApCnsKICAg ICAgICBkcHZlYyAqIHBjLCAqIG1jOwogICAgICAgIGRwdmVjIHgsIGQsIGhwLCBobiwgdnAsIHZu OwogICAgICAgIGludCBpLCByLCBiLCBtYXRjaGVzID0gMCwgbWFwWyAyNTYgXSwgc3MsIHNzcywg bGk7CiAgICAgICAgVkVDU1VNICogdjsKCiAgICAgICAgY2hhciAqIFA7CgoKCgoKICAgICAgICBi ID0gKCggbSArICggc2l6ZW9mKCBkcHZlYyApICogOCApIC0gMSApIC8gKCBzaXplb2YoIGRwdmVj ICkgKiA4ICkgKTsKCiAgICAgICAgaSA9ICggbiArIDEgKSAqIHNpemVvZiggZHB2ZWMgKTsKCiAg ICAgICAgcGMgPSAoIGRwdmVjICogKW1tYWxsb2MoIGkgKTsKICAgICAgICBtYyA9ICggZHB2ZWMg KiApbW1hbGxvYyggaSApOwoKICAgICAgICB2ID0gKCBWRUNTVU0gKiApbW1hbGxvYyggc2l6ZW9m KCBWRUNTVU0gKSApOwoKICAgICAgICBidWlsZF92ZWNzdW0oIHYgKTsKCiAgICAgICAgbWFwWydh J10gPSBtYXBbJ0EnXSA9IDA7CiAgICAgICAgbWFwWydjJ10gPSBtYXBbJ0MnXSA9IDE7CiAgICAg ICAgbWFwWydnJ10gPSBtYXBbJ0cnXSA9IDI7CiAgICAgICAgbWFwWyd0J10gPSBtYXBbJ1QnXSA9 IDM7CgogICAgICAgIFAgPSAoIGNoYXIgKiApbW1hbGxvYyggbiApOwoKICAgICAgICBmb3IoIGkg PSAwOyBpIDwgbjsgaSsrICkgUFsgaSBdID0gbWFwWyBUWyBpIF1dOwoKICAgICAgICBmb3IoIHIg PSAwOyByIDwgbjsgcisrICkKICAgICAgICB7CiAgICAgICAgICAgICAgICBwY1sgciBdID0gKCBk cHZlYyApMTsKICAgICAgICAgICAgICAgIG1jWyByIF0gPSAoIGRwdmVjICkwOwogICAgICAgIH0K CiAgICAgICAgaWYoIGsgPiBuICkgayA9IG47CgogICAgICAgIGxpID0gayArIDE7CgogICAgICAg IGlmKCBsaSA+IG4gKSBsaSA9IG47CgogICAgICAgIHNzcyA9IGsgKyAxOwoKICAgICAgICBmb3Io IHIgPSAwOyByIDwgYjsgcisrICkKICAgICAgICB7CiAgICAgICAgICAgICAgICB2cCA9IHZuID0g KCBkcHZlYyApMDsKCiAgICAgICAgICAgICAgICBpID0gMDsKCiAgICAgICAgICAgICAgICBkbyB7 IHggPSBwZXFbIHIgXVsgUFsgaSBdXSB8IG1jWyBpIF07CgoKCiAgICAgICAgICAgICAgICAgICAg ICAgIGQgPSAoKCB2cCArICggeCAmIHZwICkpIF4gdnAgKSB8IHggfCB2bjsKCiAgICAgICAgICAg ICAgICAgICAgICAgIGhwID0gdm4gfCB+KCB2cCB8IGQgKTsKICAgICAgICAgICAgICAgICAgICAg ICAgaG4gPSB2cCAmIGQ7CgogICAgICAgICAgICAgICAgICAgICAgICB4ID0gKCBocCA8PCAxICkg fCBwY1sgaSBdOwoKICAgICAgICAgICAgICAgICAgICAgICAgdnAgPSAoIGhuIDw8IDEgKSB8IG1j WyBpIF0gfCB+KCB4IHwgZCApOwogICAgICAgICAgICAgICAgICAgICAgICB2biA9IHggJiBkOwoK ICAgICAgICAgICAgICAgICAgICAgICAgcGNbIGkgXSA9IGhwID4+ICggKCBzaXplb2YoIGRwdmVj ICkgKiA4ICkgLSAxICk7CiAgICAgICAgICAgICAgICAgICAgICAgIG1jWyBpIF0gPSBobiA+PiAo ICggc2l6ZW9mKCBkcHZlYyApICogOCApIC0gMSApOwoKICAgICAgICAgICAgICAgICAgICAgICAg aWYoIGkgPCBsaSAtIDEgKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmKCBpID09IGxpIC0gMSApCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3MgPSBzc3MgKyAoKCBpbnQgKXZwICYgMSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtICgoIGludCApdm4gJiAxICk7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzcyArPSAoKCBpbnQgKWhwICYgMSApIC0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoIGludCApaG4gJiAxICk7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NzID0gc3MgLSAoKCBpbnQgKXZwICYgMSAp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICgoIGlu dCApdm4gJiAxICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiggaSA8IG4gLSAxICkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp Ziggc3VtX2JpdHNfdmVjbWluKCggdW5zaWduZWQgY2hhciAqICkmdnAsICggdW5zaWduZWQgY2hh ciAqICkmdm4sIHNpemVvZiggZHB2ZWMgKSwgJnNzcywgayArIDEsIHYsIDAsIDEsIDAsIG0gKSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpOwoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGkgPiBsaSApCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY1sgaSBdID0gKCBkcHZlYyApMTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt Y1sgaSBdID0gKCBkcHZlYyApMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbnk7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55ID0gc3VtX2JpdHNfdmVjbWlu KCAoIHVuc2lnbmVkIGNoYXIgKiApJnZwLCAoIHVuc2lnbmVkIGNoYXIgKiApJnZuLCBzaXplb2Yo IGRwdmVjICksICZzc3MsIGssIHYsIHIgKiAoIHNpemVvZiggZHB2ZWMgKSAqIDggKSwgMSwgMSwg bSApOzsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGFueSAp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgKz0gYW55OwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggc2hyaW5rayApCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gbWluZGlz dCAtIDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9IHdo aWxlKCBpIDwgbiApOwojIDY0OCAiYnBlZC5DIgogICAgICAgICAgICAgICAgbGkgPSBpOwoKICAg ICAgICAgICAgICAgIHNzcyAtPSAoIGludCApcGNbIGkgXSAmIDE7CiAgICAgICAgICAgICAgICBz c3MgKz0gKCBpbnQgKW1jWyBpIF0gJiAxOwogICAgICAgIH0KCiAgICAgICAgOwogICAgICAgIDsK ICAgICAgICA7CiAgICAgICAgOwoKCgoKCgogICAgICAgIHJldHVybiBtYXRjaGVzOwp9CgoKc3Rh dGljIGludCBicGVkaHcoIHVuc2lnbmVkIGNoYXIgKiBULCBpbnQgbiwgaW50IG0sIGludCBrLCBk cHZlYyAqKnBlcSApCnsKICAgICAgICBkcHZlYyAqIHBjLCAqIG1jOwogICAgICAgIGRwdmVjIHgs IGQsIGhwLCBobiwgdnAsIHZuOwogICAgICAgIGludCBpLCByLCBiLCBtYXRjaGVzID0gMCwgbWFw WyAyNTYgXSwgc3MsIHNzcywgbGk7CiAgICAgICAgVkVDU1VNICogdjsKICAgICAgICBjaGFyICog UDsKCgoKCgogICAgICAgIGIgPSAoKCBtICsgKCBzaXplb2YoIGRwdmVjICkgKiA4ICkgLSAxICkg LyAoIHNpemVvZiggZHB2ZWMgKSAqIDggKSApOwoKCgoKCiAgICAgICAgaSA9ICggbiArIDEgKSAq IHNpemVvZiggZHB2ZWMgKTsKCiAgICAgICAgcGMgPSAoIGRwdmVjICogKW1tYWxsb2MoIGkgKTsK ICAgICAgICBtYyA9ICggZHB2ZWMgKiApbW1hbGxvYyggaSApOwoKICAgICAgICB2ID0gKCBWRUNT VU0gKiApbW1hbGxvYyggc2l6ZW9mKCBWRUNTVU0gKSApOwoKICAgICAgICBidWlsZF92ZWNzdW0o IHYgKTsKCiAgICAgICAgbWFwWydhJ10gPSBtYXBbJ0EnXSA9IDA7CiAgICAgICAgbWFwWydjJ10g PSBtYXBbJ0MnXSA9IDE7CiAgICAgICAgbWFwWydnJ10gPSBtYXBbJ0cnXSA9IDI7CiAgICAgICAg bWFwWyd0J10gPSBtYXBbJ1QnXSA9IDM7CgogICAgICAgIGZvciggciA9IDA7IHIgPCBuOyByKysg KQogICAgICAgIHsKICAgICAgICAgICAgICAgIHBjWyByIF0gPSAoIGRwdmVjICkxOwogICAgICAg ICAgICAgICAgbWNbIHIgXSA9ICggZHB2ZWMgKTA7CiAgICAgICAgfQoKICAgICAgICBQID0gKCBj aGFyICogKW1tYWxsb2MoIG4gKTsKCiAgICAgICAgZm9yKCBpID0gMDsgaSA8IG47IGkrKyApIFBb IGkgXSA9IG1hcFsgVFsgaSBdXTsKCiAgICAgICAgaWYoIGsgPiBuICkgayA9IG47CgogICAgICAg IGxpID0gayArIDE7CgogICAgICAgIGlmKCBsaSA+IG4gKSBsaSA9IG47CgogICAgICAgIGZvcigg ciA9IDA7IHIgPCBiOyByKysgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHZwID0gdm4gPSAo IGRwdmVjICkwOwoKICAgICAgICAgICAgICAgIGkgPSAwOyBzcyA9IDA7CgogICAgICAgICAgICAg ICAgZG8geyB4ID0gcGVxWyByIF1bIFBbIGkgXV0gfCBtY1sgaSBdOwoKICAgICAgICAgICAgICAg ICAgICAgICAgZCA9ICgoIHZwICsgKCB4ICYgdnAgKSkgXiB2cCApIHwgeCB8IHZuOwoKICAgICAg ICAgICAgICAgICAgICAgICAgaHAgPSB2biB8IH4oIHZwIHwgZCApOwogICAgICAgICAgICAgICAg ICAgICAgICBobiA9IHZwICYgZDsKCiAgICAgICAgICAgICAgICAgICAgICAgIHggPSAoIGhwIDw8 IDEgKSB8IHBjWyBpIF07CgogICAgICAgICAgICAgICAgICAgICAgICB2cCA9ICggaG4gPDwgMSAp IHwgbWNbIGkgXSB8IH4oIHggfCBkICk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZuID0geCAm IGQ7CgogICAgICAgICAgICAgICAgICAgICAgICBwY1sgaSBdID0gaHAgPj4gKCAoIHNpemVvZigg ZHB2ZWMgKSAqIDggKSAtIDEgKTsKICAgICAgICAgICAgICAgICAgICAgICAgbWNbIGkgXSA9IGhu ID4+ICggKCBzaXplb2YoIGRwdmVjICkgKiA4ICkgLSAxICk7CgogICAgICAgICAgICAgICAgICAg ICAgICBzcyArPSAoIGludCApaHAgJiAxOwogICAgICAgICAgICAgICAgICAgICAgICBzcyAtPSAo IGludCApaG4gJiAxOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGkgPCBsaSAtIDEgKQog ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KytpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVs c2UKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNzcyA9IHNzIC0gKCggaW50ICl2cCAmIDEgKSArCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoKCBpbnQgKXZuICYgMSApOwoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiggaSA8IG4gLSAxICkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggc3VtX2Jp dHNfdmVjbWluKCggdW5zaWduZWQgY2hhciAqICkmdnAsICggdW5zaWduZWQgY2hhciAqICkmdm4s IHNpemVvZiggZHB2ZWMgKSwgJnNzcywgayArIDEsIHYsIDAsIDEsIDAsIG0gKSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKytpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYoIGkgPiBsaSApCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwY1sgaSBdID0gKCBkcHZlYyApMTsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtY1sgaSBdID0g KCBkcHZlYyApMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbnk7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55ID0gc3VtX2JpdHNfdmVjbWluKCAoIHVuc2ln bmVkIGNoYXIgKiApJnZwLCAoIHVuc2lnbmVkIGNoYXIgKiApJnZuLCBzaXplb2YoIGRwdmVjICks ICZzc3MsIGssIHYsIHIgKiAoIHNpemVvZiggZHB2ZWMgKSAqIDggKSwgMSwgMSwgbSApOzsKCgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGFueSApCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgKz0gYW55OwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiggc2hyaW5rayApCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gbWluZGlzdCAtIDE7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9IHdoaWxlKCBpIDwg biApOwojIDc5NiAiYnBlZC5DIgogICAgICAgICAgICAgICAgbGkgPSBpOwoKCgogICAgICAgIH0K CiAgICAgICAgOwogICAgICAgIDsKICAgICAgICA7CiAgICAgICAgOwoKCgoKCgogICAgICAgIHJl dHVybiBtYXRjaGVzOwp9CgoKc3RhdGljIGRwdmVjICogcHJlcF9iZXFfdiggdW5zaWduZWQgY2hh ciAqIFAsIGludCBtICkKewogICAgICAgIGludCBhLCBwOwogICAgICAgIGRwdmVjICogcGVxLCBt bTsKCiAgICAgICAgcGVxID0gKCBkcHZlYyAqICltbWFsbG9jKCAyNTYgKiBzaXplb2YoIGRwdmVj ICkgKTsKCiAgICAgICAgZm9yKCBhID0gMDsgYSA8IDI1NjsgYSsrICkgcGVxWyBhIF0gPSAoIGRw dmVjICkwOwoKICAgICAgICBtbSA9ICggZHB2ZWMgKTE7CgogICAgICAgIGZvciggcCA9IDA7IHAg PCBtOyBwKysgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHBlcVsgUFsgcCBdXSB8PSBtbTsK ICAgICAgICAgICAgICAgIG1tIDw8PSAxOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHBlcTsK fQoKc3RhdGljIGludCBicGVkdiggdW5zaWduZWQgY2hhciAqIFQsIGludCBuLCBpbnQgbSwgaW50 IGssIGRwdmVjICogcGVxICkKewogICAgICAgIGRwdmVjIGVxOwogICAgICAgIGRwdmVjIHh2LCBt diwgeGgsIHB2LCBwaCwgbWg7CiAgICAgICAgaW50IG1hdGNoZXMgPSAwLCBqLCBzY29yZSA9IG07 CiAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNtID0gbSAtIDE7CgogICAgICAgIHB2ID0gfigg ZHB2ZWMgKTA7CiAgICAgICAgbXYgPSAoIGRwdmVjICkwOwoKICAgICAgICBmb3IoIGogPSAwOyBq IDwgbjsgaisrICkKICAgICAgICB7CgogICAgICAgICAgICAgICAgZXEgPSBwZXFbIFRbIGogXV07 CgogICAgICAgICAgICAgICAgeHYgPSBlcSB8IG12OwogICAgICAgICAgICAgICAgeGggPSAoKCgg ZXEgJiBwdiApICsgcHYgKSBeIHB2ICkgfCBlcTsKCiAgICAgICAgICAgICAgICBwaCA9IG12IHwg figgeGggfCBwdiApOwogICAgICAgICAgICAgICAgbWggPSBwdiAmIHhoOwoKICAgICAgICAgICAg ICAgIHNjb3JlICs9ICggaW50ICkoIHBoID4+IHNtICkgJiAxOwogICAgICAgICAgICAgICAgc2Nv cmUgLT0gKCBpbnQgKSggbWggPj4gc20gKSAmIDE7CgogICAgICAgICAgICAgICAgcGggPSBwaCA8 PCAxOwogICAgICAgICAgICAgICAgcHYgPSAoIG1oIDw8IDEgKSB8IH4oIHh2IHwgcGggKTsKICAg ICAgICAgICAgICAgIG12ID0gcGggJiB4djsKCiAgICAgICAgICAgICAgICBpZiggc2NvcmUgPD0g ayApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMrKzsK CgoKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBtYXRjaGVzOwp9 Cgp2b2lkIHZlcnRpY2FsKCBjaGFyICogZm4sIGNoYXIgKiBwLCBpbnQgayApCnsKICAgICAgICBp bnQgbSwgbiwgbWF0Y2hlczsKICAgICAgICBjaGFyICogdDsKICAgICAgICBkcHZlYyAqIHBlcTsK CiAgICAgICAgcHJpbnRmKCJSZWFkaW5nIGZpbGUuLi4gIik7IGZmbHVzaCggc3Rkb3V0ICk7Cgog ICAgICAgIHN0YXJ0Y2xvY2soKTsKCiAgICAgICAgdCA9IGZfcmVhZF9ieXRlcyggZm4sICZuICk7 CgogICAgICAgIHByaW50ZigiRG9uZSwgcmVhZCAlZCBieXRlcywgdGltZTogJTEuMmZcbiIsIG4s CiAgICAgICAgICAgICAgIHN0b3BjbG9jaygpIC8gKCBkb3VibGUgKXN5c2NvbmYoIF9TQ19DTEtf VENLICkgKTsKCiAgICAgICAgbSA9IHN0cmxlbiggcCApOwoKICAgICAgICBpZiggbSA+IDEyOCAp CiAgICAgICAgewogICAgICAgICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiUGF0dGVybiB0b28g bG9uZyAoJWQgPiAlZCkuXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgbSwgMTI4ICk7CiAg ICAgICAgICAgICAgICBleGl0KCAxICk7CiAgICAgICAgfQoKICAgICAgICBwcmludGYoIlByZXBy b2Nlc3NpbmcuLi4gIik7IGZmbHVzaCggc3Rkb3V0ICk7CgogICAgICAgIHN0YXJ0Y2xvY2soKTsK CiAgICAgICAgcGVxID0gcHJlcF9iZXFfdigoIHVuc2lnbmVkIGNoYXIgKiApcCwgbSApOwoKICAg ICAgICBwcmludGYoIkRvbmUsIHRpbWU6ICUxLjJmXG4iLCBzdG9wY2xvY2soKSAvICggZG91Ymxl IClzeXNjb25mKCBfU0NfQ0xLX1RDSyApICk7CgogICAgICAgIHByaW50ZigiU2VhcmNoaW5nLi4u ICIpOyBmZmx1c2goIHN0ZG91dCApOwoKICAgICAgICBzdGFydGNsb2NrKCk7CgogICAgICAgIG1h dGNoZXMgPSBicGVkdigoIHVuc2lnbmVkIGNoYXIgKiApdCwgbiwgbSwgaywgcGVxICk7CgogICAg ICAgIHByaW50ZigiRG9uZSwgJWQgbWF0Y2hlcywgdGltZTogJTEuMmZcbiIsCiAgICAgICAgICAg ICAgIG1hdGNoZXMsIHN0b3BjbG9jaygpIC8gKCBkb3VibGUgKXN5c2NvbmYoIF9TQ19DTEtfVENL ICkgKTsKfQoKdm9pZCBob3Jpem9udGFsKCBjaGFyICogZm4sIGNoYXIgKiBwLCBpbnQgaywgaW50 IGFsbCApCnsKICAgICAgICBpbnQgaSwgaiwgbSwgbiwgbm4sIG1hdGNoZXM7CiAgICAgICAgY2hh ciAqIGwsICogaDsKICAgICAgICBkcHZlYyAqKiBicGVxOwoKICAgICAgICBpZiggdGltaW5nICkK ICAgICAgICB7CiAgICAgICAgICAgICAgICBwcmludGYoIlJlYWRpbmcgZmlsZS4uLiAiKTsgZmZs dXNoKCBzdGRvdXQgKTsKICAgICAgICAgICAgICAgIHN0YXJ0Y2xvY2soKTsKICAgICAgICB9Cgog ICAgICAgIGkgPSBvcGVuKCBmbiwgMDAgKTsKCiAgICAgICAgcmVhZCggaSwgJm4sIHNpemVvZigg aW50ICkpOwoKCgoKCiAgICAgICAgbm4gPSBuOwoKICAgICAgICBtID0gKCBuICsgNyApIC8gODsK CiAgICAgICAgbCA9ICggY2hhciAqICltbWFsbG9jKCBtICk7CiAgICAgICAgaCA9ICggY2hhciAq ICltbWFsbG9jKCBtICk7CgogICAgICAgIGogPSByZWFkKCBpLCBsLCBtICk7CiAgICAgICAgaiAr PSByZWFkKCBpLCBoLCBtICk7CgogICAgICAgIGNsb3NlKCBpICk7CgogICAgICAgIGlmKCB0aW1p bmcgKSBwcmludGYoIkRvbmUsIHJlYWQgJWQgYnl0ZXMsIHRpbWU6ICUxLjJmXG4iLCBqLAogICAg ICAgICAgICAgICBzdG9wY2xvY2soKSAvICggZG91YmxlIClzeXNjb25mKCBfU0NfQ0xLX1RDSyAp ICk7CgogICAgICAgIG0gPSBzdHJsZW4oIHAgKTsKCiAgICAgICAgaWYoIHRpbWluZyApIHsgcHJp bnRmKCJQcmVwcm9jZXNzaW5nLi4uICIpOyBmZmx1c2goIHN0ZG91dCApOyB9CgogICAgICAgIHN0 YXJ0Y2xvY2soKTsKCiAgICAgICAgYnBlcSA9IHByZXBfYmVxX2goKCBkcHZlYyAqIClsLCAoIGRw dmVjICogKWgsIG5uLCBhbGwgKTsKCiAgICAgICAgaWYoIHRpbWluZyApCiAgICAgICAgewogICAg ICAgICAgICAgICAgcHJpbnRmKCJEb25lLCB0aW1lOiAlMS4yZlxuIiwgc3RvcGNsb2NrKCkgLyAo IGRvdWJsZSApc3lzY29uZiggX1NDX0NMS19UQ0sgKSApOwoKICAgICAgICAgICAgICAgIHByaW50 ZigiU2VhcmNoaW5nLi4uICIpOwogICAgICAgICAgICAgICAgaWYoIGxvY2F0aW9uIHx8IGRpc3Rh bmNlICkgcHJpbnRmKCJcbiIpOwogICAgICAgICAgICAgICAgZmZsdXNoKCBzdGRvdXQgKTsKCiAg ICAgICAgICAgICAgICBzdGFydGNsb2NrKCk7CiAgICAgICAgfQoKCgoKCiAgICAgICAgICAgICAg ICBtYXRjaGVzID0gYnBlZGh3KCggdW5zaWduZWQgY2hhciAqIClwLCBtLCBubiwgaywgYnBlcSAp OwoKICAgICAgICBpZiggdGltaW5nICkgcHJpbnRmKCJEb25lLCAlZCBtYXRjaGVzLCB0aW1lOiAl MS4yZlxuIiwKICAgICAgICAgICAgICAgbWF0Y2hlcywgc3RvcGNsb2NrKCkgLyAoIGRvdWJsZSAp c3lzY29uZiggX1NDX0NMS19UQ0sgKSApOwp9CgoKdm9pZCBoZWxwKCBjaGFyICogbWUgKQp7CiAg ICAgICAgZnByaW50Ziggc3RkZXJyLAogICAgICAgICAgICAgICAgICJcbihDKSBLaW1tbyBGcmVk cmlrc3NvbiAyMDAzLlxuXG4iKTsKICAgICAgICBmcHJpbnRmKCBzdGRlcnIsCiAgICAgICAgICAg ICAgICAgIlxuU2VhcmNoZXMgZG5hIHBhdHRlcm4gZnJvbSBhIGdpdmVuIHBhY2tlZCBkbmEgZmls ZS5cblxuIik7CiAgICAgICAgZnByaW50Ziggc3RkZXJyLAogICAgICAgICAgICAgICAgICJVc2Fn ZTogJXMgW29wdGlvbnNdLCB3aGVyZSB0aGUgb3B0aW9ucyBhcmU6XG4iLCBtZSApOwogICAgICAg IGZwcmludGYoIHN0ZGVyciwKICAgICAgICAgICAgICAgICAiXHQtZiBmaWxlXHR0aGUgcGFja2Vk IGRuYSBmaWxlIHRvIHNlYXJjaCAocmVxdWlyZWQpXG4iKTsKICAgICAgICBmcHJpbnRmKCBzdGRl cnIsCiAgICAgICAgICAgICAgICAgIlx0LXAgcGF0XHR1c2UgcGF0IGFzIHRoZSBwYXR0ZXJuIChy ZXF1aXJlZClcbiIpOwogICAgICAgIGZwcmludGYoIHN0ZGVyciwKICAgICAgICAgICAgICAgICAi XHQtayAjXHRhbGxvdyBhdCBtb3N0ICMgZWRpdCBvcGVyYXRpb25zIGluIHRoZSBtYXRjaGVzXG4i KTsKICAgICAgICBmcHJpbnRmKCBzdGRlcnIsCiAgICAgICAgICAgICAgICAgIlx0LXNcdGZvcmNl OiBrID0gdGhlIG1pbiBkaXN0YW5jZSBzbyBmYXIgLSAxXG4iKTsKICAgICAgICBmcHJpbnRmKCBz dGRlcnIsCiAgICAgICAgICAgICAgICAgIlx0LWxcdHByaW50IHRoZSBtYXRjaGluZyBsb2NhdGlv bnNcbiIpOwogICAgICAgIGZwcmludGYoIHN0ZGVyciwKICAgICAgICAgICAgICAgICAiXHQtZFx0 cHJpbnQgdGhlIGRpc3RhbmNlIG9mIHRoZSBvY2N1cnJlbmNlXG4iKTsKICAgICAgICBmcHJpbnRm KCBzdGRlcnIsCiAgICAgICAgICAgICAgICAgIlx0LXRcdHJlcG9ydCBleGVjdXRpb24gdGltZVxu Iik7CiAgICAgICAgZnByaW50Ziggc3RkZXJyLAogICAgICAgICAgICAgICAgICJcdC0/XHRzaG93 IHRoaXMgbWVzc2FnZVxuIik7CgogICAgICAgIGZwcmludGYoIHN0ZGVyciwgIlxuRGVidWdnaW5n ICh3aGljaCBidWdzPyksIGV0YzpcblxuIiApOwoKICAgICAgICBmcHJpbnRmKCBzdGRlcnIsCiAg ICAgICAgICAgICAgICAgIlx0LXZcdGJlIHZlcnRpY2FsLi4uXG4iKTsKICAgICAgICBmcHJpbnRm KCBzdGRlcnIsCiAgICAgICAgICAgICAgICAgIlx0LWhcdGJlIGhvcml6b250YWwsIHRoaXMgaXMg dGhlIGRlZmF1bHQuLi5cbiIpOwogICAgICAgIGZwcmludGYoIHN0ZGVyciwKICAgICAgICAgICAg ICAgICAiXHQtbVx0Y29tcHV0ZSB0aGUgd2hvbGUgbWF0cml4LCBpbXBsaWVzIC1oXG4iKTsKICAg ICAgICBmcHJpbnRmKCBzdGRlcnIsCiAgICAgICAgICAgICAgICAgIlx0LXFcdFxuXG4iKTsKCiAg ICAgICAgZXhpdCggMCApOwp9Cgpsb25nIGxvbmcgZm9vKCBsb25nIGxvbmcgYSwgbG9uZyBsb25n IGIgKQp7CiAgICAgICAgcmV0dXJuICggbG9uZyBsb25nICkoIGEgPCBiICk7Cn0KCmludCBtYWlu KCBpbnQgYXJnYywgY2hhciAqKiBhcmd2ICkKewogICAgICAgIGludCBvcHQsIGsgPSAwOwogICAg ICAgIGNoYXIgKiBwID0gMCwgKiBmbiA9IDAsICogbWU7CiAgICAgICAgaW50IHYgPSAwLCBoID0g MSwgbSA9IDA7CgogICAgICAgIHByaW50ZigiJWRcbiIsICggc2l6ZW9mKCBkcHZlYyApICogOCAp ICk7CgogICAgICAgIG1lID0gYXJndlsgMCBdOwoKICAgICAgICB3aGlsZSgoIG9wdCA9IGdldG9w dCggYXJnYywgYXJndiwgImY6cDprOmxkdHZobXFzPyIpKSAhPSAtMSApCiAgICAgICAgewogICAg ICAgICAgICAgICAgc3dpdGNoKCBvcHQgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgICAgICBjYXNlICdmJyA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4g PSBzdHJkdXAoIG9wdGFyZyApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdrJyA6CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgayA9IGF0b2koIG9wdGFyZyApOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdwJyA6CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcCA9IHN0cmR1cCggb3B0YXJnICk7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug J2wnIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IDE7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgJ2QnIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZSA9IDE7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgJ3QnIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1pbmcg PSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgICAgICAgICBjYXNlICd2JyA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9 IDE7IGggPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgICAgICAgICBjYXNlICdoJyA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaCA9IDE7IHYgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdxJyA6CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcXVpZXQgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtJyA6CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbSA9IDE7IGggPSAxOyB2ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncycgOgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNocmlua2sgPSAxOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc/JyA6CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscCggbWUgKTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICJJbnZhbGlk IG9wdDogJWMuXG4iLCBvcHQgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw KCBtZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgfQogICAgICAgIH0KCgogICAgICAgIGlmKCAhZm4gKQogICAgICAgIHsKICAgICAgICAg ICAgICAgIGZwcmludGYoIHN0ZGVyciwgIkdpdmUgbWUgYSBmaWxlIG5hbWU6IC1mIGZpbGVcbiIp OwogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAgIGlmKCAhcCApCiAg ICAgICAgewogICAgICAgICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiR2l2ZSBtZSBhIHBhdHRl cm46IC1wIHBhdHRlcm5cbiIpOwogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQoK ICAgICAgICBpZiggc2hyaW5rayApIHNocmlua2sgPSBrOwoKICAgICAgICBpZiggdiApIHZlcnRp Y2FsKCBmbiwgcCwgayApOyBlbHNlCiAgICAgICAgaWYoIGggKSBob3Jpem9udGFsKCBmbiwgcCwg aywgbSApOwoKICAgICAgICByZXR1cm4gMDsKfQo=