From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6751 invoked by alias); 11 Nov 2001 21:46:03 -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 6697 invoked by uid 71); 11 Nov 2001 21:46:00 -0000 Resent-Date: 11 Nov 2001 21:46:00 -0000 Resent-Message-ID: <20011111214600.6696.qmail@sourceware.cygnus.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, simon.brenner@home.se Received:(qmail 4919 invoked by uid 61); 11 Nov 2001 21:41:58 -0000 Message-Id:<20011111214158.4918.qmail@sourceware.cygnus.com> Date: Thu, 01 Nov 2001 05:56:00 -0000 From: simon.brenner@home.se Reply-To: simon.brenner@home.se To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version:gnatsweb-2.9.2 (1.1.1.1.2.21) Subject: c/4853: ICE when compiling linux 2.4.13-ac8 (preempt patch) sched.c X-SW-Source: 2001-11/txt/msg00001.txt.bz2 List-Id: >Number: 4853 >Category: c >Synopsis: ICE when compiling linux 2.4.13-ac8 (preempt patch) sched.c >Confidential: no >Severity: serious >Priority: high >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Sun Nov 11 13:46:00 PST 2001 >Closed-Date: >Last-Modified: >Originator: simon.brenner@home.se >Release: 3.0 >Organization: >Environment: RedHat Linux >Description: i get this error when compiling sched.c: sched.c: In function schedule: sched.c:723: ICE in rtx_equal_for_memref_p, at alias.c:1106 >How-To-Repeat: run gcc -O2 -c sched.i >Fix: gcc -O1 -c sched.i >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/postscript; name="sched.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="sched.i" IyAyMiAia2VybmVsL3NjaGVkLmMiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUv bGludXgvY29uZmlnLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9s aW51eC9hdXRvY29uZi5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvY29uZmlnLmgiIDIKIyAyMyAia2VybmVsL3NjaGVkLmMiIDIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9saW51eC9tbS5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2FzbS9wYXJhbS5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgvc2NoZWQuaCIgMgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZXZlbnQ7CgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgOSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIiAxCiMgMjQgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2FzbS9wdHJhY2UuaCIgMQojIDI2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9hc20vcHRyYWNlLmgiCnN0cnVjdCBwdF9yZWdzIHsKICAgICAgICBsb25nIGVieDsKICAg ICAgICBsb25nIGVjeDsKICAgICAgICBsb25nIGVkeDsKICAgICAgICBsb25nIGVzaTsKICAgICAg ICBsb25nIGVkaTsKICAgICAgICBsb25nIGVicDsKICAgICAgICBsb25nIGVheDsKICAgICAgICBp bnQgeGRzOwogICAgICAgIGludCB4ZXM7CiAgICAgICAgbG9uZyBvcmlnX2VheDsKICAgICAgICBs b25nIGVpcDsKICAgICAgICBpbnQgeGNzOwogICAgICAgIGxvbmcgZWZsYWdzOwogICAgICAgIGxv bmcgZXNwOwogICAgICAgIGludCB4c3M7Cn07CiMgNjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9p bmNsdWRlL2FzbS9wdHJhY2UuaCIKZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdz ICopOwpleHRlcm4gdm9pZCBzaG93X3JlZ2lzdGVycyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiMg MjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIiAyCiMgNSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvYmluZm10cy5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIiAxCiMgMTYgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCgoKCgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgNiAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMgoKCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaCIgMQoKCgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3N0ZGRlZi5oIiAxCiMgNSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvcG9zaXhfdHlwZXMuaCIgMgojIDM2ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9wb3NpeF90eXBlcy5oIgp0eXBlZGVmIHN0cnVjdCB7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBmZHNfYml0cyBbKDEwMjQvKDggKiBzaXplb2YodW5zaWdu ZWQgbG9uZykpKV07Cn0gX19rZXJuZWxfZmRfc2V0OwoKCnR5cGVkZWYgdm9pZCAoKl9fa2VybmVs X3NpZ2hhbmRsZXJfdCkoaW50KTsKCgp0eXBlZGVmIGludCBfX2tlcm5lbF9rZXlfdDsKCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzLmgiIDEKIyAxMCAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3Bvc2l4X3R5cGVzLmgiCnR5cGVkZWYg dW5zaWduZWQgc2hvcnQgX19rZXJuZWxfZGV2X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2tl cm5lbF9pbm9fdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9tb2RlX3Q7CnR5cGVk ZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfbmxpbmtfdDsKdHlwZWRlZiBsb25nIF9fa2VybmVs X29mZl90Owp0eXBlZGVmIGludCBfX2tlcm5lbF9waWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9y dCBfX2tlcm5lbF9pcGNfcGlkX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfdWlk X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfZ2lkX3Q7CnR5cGVkZWYgdW5zaWdu ZWQgaW50IF9fa2VybmVsX3NpemVfdDsKdHlwZWRlZiBpbnQgX19rZXJuZWxfc3NpemVfdDsKdHlw ZWRlZiBpbnQgX19rZXJuZWxfcHRyZGlmZl90Owp0eXBlZGVmIGxvbmcgX19rZXJuZWxfdGltZV90 Owp0eXBlZGVmIGxvbmcgX19rZXJuZWxfc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBfX2tlcm5l bF9jbG9ja190Owp0eXBlZGVmIGludCBfX2tlcm5lbF9kYWRkcl90Owp0eXBlZGVmIGNoYXIgKiBf X2tlcm5lbF9jYWRkcl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX3VpZDE2X3Q7 CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfZ2lkMTZfdDsKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgX19rZXJuZWxfdWlkMzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19rZXJuZWxfZ2lk MzJfdDsKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfb2xkX3VpZF90Owp0eXBlZGVm IHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX29sZF9naWRfdDsKCgp0eXBlZGVmIGxvbmcgbG9uZyBf X2tlcm5lbF9sb2ZmX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewoKICAgICAgICBpbnQgdmFsWzJdOwoK Cgp9IF9fa2VybmVsX2ZzaWRfdDsKIyA0NyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUv bGludXgvcG9zaXhfdHlwZXMuaCIgMgojIDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2xpbnV4L3R5cGVzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20v dHlwZXMuaCIgMQoKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVtb2RlX3Q7CgoKCgoKCnR5cGVk ZWYgX19zaWduZWRfXyBjaGFyIF9fczg7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3U4OwoKdHlw ZWRlZiBfX3NpZ25lZF9fIHNob3J0IF9fczE2Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdTE2 OwoKdHlwZWRlZiBfX3NpZ25lZF9fIGludCBfX3MzMjsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191 MzI7CgoKdHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZyBfX3M2NDsKdHlwZWRlZiB1bnNpZ25l ZCBsb25nIGxvbmcgX191NjQ7CgoKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNs dWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgMzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2FzbS90eXBlcy5oIiAyCgp0eXBlZGVmIHNpZ25lZCBjaGFyIHM4Owp0eXBlZGVmIHVuc2lnbmVk IGNoYXIgdTg7Cgp0eXBlZGVmIHNpZ25lZCBzaG9ydCBzMTY7CnR5cGVkZWYgdW5zaWduZWQgc2hv cnQgdTE2OwoKdHlwZWRlZiBzaWduZWQgaW50IHMzMjsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMy OwoKdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIHM2NDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxv bmcgdTY0OwojIDUxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vdHlwZXMuaCIK dHlwZWRlZiB1MzIgZG1hX2FkZHJfdDsKCnR5cGVkZWYgdTY0IGRtYTY0X2FkZHJfdDsKIyAxMCAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMgoKCgp0eXBlZGVm IF9fa2VybmVsX2ZkX3NldCBmZF9zZXQ7CnR5cGVkZWYgX19rZXJuZWxfZGV2X3QgZGV2X3Q7CnR5 cGVkZWYgX19rZXJuZWxfaW5vX3QgaW5vX3Q7CnR5cGVkZWYgX19rZXJuZWxfbW9kZV90IG1vZGVf dDsKdHlwZWRlZiBfX2tlcm5lbF9ubGlua190IG5saW5rX3Q7CnR5cGVkZWYgX19rZXJuZWxfb2Zm X3Qgb2ZmX3Q7CnR5cGVkZWYgX19rZXJuZWxfcGlkX3QgcGlkX3Q7CnR5cGVkZWYgX19rZXJuZWxf ZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fa2VybmVsX2tleV90IGtleV90Owp0eXBlZGVmIF9f a2VybmVsX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCnR5cGVkZWYgX19rZXJuZWxfdWlkMzJf dCB1aWRfdDsKdHlwZWRlZiBfX2tlcm5lbF9naWQzMl90IGdpZF90Owp0eXBlZGVmIF9fa2VybmVs X3VpZDE2X3QgdWlkMTZfdDsKdHlwZWRlZiBfX2tlcm5lbF9naWQxNl90IGdpZDE2X3Q7CgoKCnR5 cGVkZWYgX19rZXJuZWxfb2xkX3VpZF90IG9sZF91aWRfdDsKdHlwZWRlZiBfX2tlcm5lbF9vbGRf Z2lkX3Qgb2xkX2dpZF90OwojIDQ1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51 eC90eXBlcy5oIgp0eXBlZGVmIF9fa2VybmVsX2xvZmZfdCBsb2ZmX3Q7CiMgNTQgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiCnR5cGVkZWYgX19rZXJuZWxfc2l6 ZV90IHNpemVfdDsKCgoKCnR5cGVkZWYgX19rZXJuZWxfc3NpemVfdCBzc2l6ZV90OwoKCgoKdHlw ZWRlZiBfX2tlcm5lbF9wdHJkaWZmX3QgcHRyZGlmZl90OwoKCgoKdHlwZWRlZiBfX2tlcm5lbF90 aW1lX3QgdGltZV90OwoKCgoKdHlwZWRlZiBfX2tlcm5lbF9jbG9ja190IGNsb2NrX3Q7CgoKCgp0 eXBlZGVmIF9fa2VybmVsX2NhZGRyX3QgY2FkZHJfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFy IHVfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVk IGludCB1X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVfbG9uZzsKCgp0eXBlZGVmIHVuc2ln bmVkIGNoYXIgdW5jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9ydDsKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgdWludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVsb25nOwoKCgoKdHlwZWRl ZiBfX3U4IHVfaW50OF90Owp0eXBlZGVmIF9fczggaW50OF90Owp0eXBlZGVmIF9fdTE2IHVfaW50 MTZfdDsKdHlwZWRlZiBfX3MxNiBpbnQxNl90Owp0eXBlZGVmIF9fdTMyIHVfaW50MzJfdDsKdHlw ZWRlZiBfX3MzMiBpbnQzMl90OwoKCgp0eXBlZGVmIF9fdTggdWludDhfdDsKdHlwZWRlZiBfX3Ux NiB1aW50MTZfdDsKdHlwZWRlZiBfX3UzMiB1aW50MzJfdDsKCgp0eXBlZGVmIF9fdTY0IHVpbnQ2 NF90Owp0eXBlZGVmIF9fdTY0IHVfaW50NjRfdDsKdHlwZWRlZiBfX3M2NCBpbnQ2NF90OwojIDEy MyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdHlwZXMuaCIKc3RydWN0IHVz dGF0IHsKICAgICAgICBfX2tlcm5lbF9kYWRkcl90IGZfdGZyZWU7CiAgICAgICAgX19rZXJuZWxf aW5vX3QgZl90aW5vZGU7CiAgICAgICAgY2hhciBmX2ZuYW1lWzZdOwogICAgICAgIGNoYXIgZl9m cGFja1s2XTsKfTsKIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvY2Fw YWJpbGl0eS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvZnMu aCIgMQojIDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyAxMCAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2xpbmthZ2UuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvbGlua2FnZS5oIiAyCiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9saW51eC9saW1pdHMuaCIgMQojIDEyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVk ZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgv d2FpdC5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3dhaXQu aCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMQoj IDEwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIKIyAxICIv dXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAx IDMKIyA0MyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9z dGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDEx MCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRhcmcu aCIgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CiMgMTEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2luY2x1ZGUvbGludXgvbGlua2FnZS5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2lu Y2x1ZGUvbGludXgvc3RkZGVmLmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgva2VybmVsLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9s aW51eC90eXBlcy5oIiAxCiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4 L2tlcm5lbC5oIiAyCiMgNDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2tl cm5lbC5oIgpzdHJ1Y3QgY29tcGxldGlvbjsKCmV4dGVybiBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sg KnBhbmljX25vdGlmaWVyX2xpc3Q7CiAgICAgICAgICAgdm9pZCBwYW5pYyhjb25zdCBjaGFyICog Zm10LCAuLi4pCiAgICAgICAgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuLCBmb3JtYXQgKHByaW50 ZiwgMSwgMikpKTsKICAgICAgICAgICB2b2lkIGRvX2V4aXQobG9uZyBlcnJvcl9jb2RlKQogICAg ICAgIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CiAgICAgICAgICAgdm9pZCBjb21wbGV0ZV9h bmRfZXhpdChzdHJ1Y3QgY29tcGxldGlvbiAqLCBsb25nKQogICAgICAgIF9fYXR0cmlidXRlX18o KG5vcmV0dXJuKSk7CmV4dGVybiBpbnQgYWJzKGludCk7CmV4dGVybiB1bnNpZ25lZCBsb25nIHNp bXBsZV9zdHJ0b3VsKGNvbnN0IGNoYXIgKixjaGFyICoqLHVuc2lnbmVkIGludCk7CmV4dGVybiBs b25nIHNpbXBsZV9zdHJ0b2woY29uc3QgY2hhciAqLGNoYXIgKiosdW5zaWduZWQgaW50KTsKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBzaW1wbGVfc3RydG91bGwoY29uc3QgY2hhciAqLGNoYXIg KiosdW5zaWduZWQgaW50KTsKZXh0ZXJuIGxvbmcgbG9uZyBzaW1wbGVfc3RydG9sbChjb25zdCBj aGFyICosY2hhciAqKix1bnNpZ25lZCBpbnQpOwpleHRlcm4gaW50IHNwcmludGYoY2hhciAqIGJ1 ZiwgY29uc3QgY2hhciAqIGZtdCwgLi4uKTsKZXh0ZXJuIGludCB2c3ByaW50ZihjaGFyICpidWYs IGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CmV4dGVybiBpbnQgc25wcmludGYoY2hhciAqIGJ1Ziwg c2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKZXh0ZXJuIGludCB2c25wcmludGYo Y2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOwoK ZXh0ZXJuIGludCBzc2NhbmYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikKICAgICAg ICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChzY2FuZiwyLDMpKSk7CmV4dGVybiBpbnQgdnNzY2Fu Zihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CgpleHRlcm4gaW50IGdldF9v cHRpb24oY2hhciAqKnN0ciwgaW50ICpwaW50KTsKZXh0ZXJuIGNoYXIgKmdldF9vcHRpb25zKGNo YXIgKnN0ciwgaW50IG5pbnRzLCBpbnQgKmludHMpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25n IG1lbXBhcnNlKGNoYXIgKnB0ciwgY2hhciAqKnJldHB0cik7CmV4dGVybiB2b2lkIGRldl9wcm9i ZV9sb2NrKHZvaWQpOwpleHRlcm4gdm9pZCBkZXZfcHJvYmVfdW5sb2NrKHZvaWQpOwoKZXh0ZXJu IGludCBzZXNzaW9uX29mX3BncnAoaW50IHBncnApOwoKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0o MCkpKSBpbnQgcHJpbnRrKGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKICAgICAgICBfX2F0dHJpYnV0 ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CgpleHRlcm4gaW50IGNvbnNvbGVfbG9nbGV2 ZWw7CgpzdGF0aWMgaW5saW5lIHZvaWQgY29uc29sZV9zaWxlbnQodm9pZCkKewogICAgICAgIGNv bnNvbGVfbG9nbGV2ZWwgPSAwOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgY29uc29sZV92ZXJib3Nl KHZvaWQpCnsKICAgICAgICBpZiAoY29uc29sZV9sb2dsZXZlbCkKICAgICAgICAgICAgICAgIGNv bnNvbGVfbG9nbGV2ZWwgPSAxNTsKfQoKZXh0ZXJuIHZvaWQgYnVzdF9zcGlubG9ja3MoaW50IHll cyk7CmV4dGVybiBpbnQgb29wc19pbl9wcm9ncmVzczsKCmV4dGVybiBpbnQgdGFpbnRlZDsKZXh0 ZXJuIGNvbnN0IGNoYXIgKnByaW50X3RhaW50ZWQodm9pZCk7CiMgMTYwICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIKc3RydWN0IHN5c2luZm8gewogICAgICAg IGxvbmcgdXB0aW1lOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbG9hZHNbM107CiAgICAgICAgdW5z aWduZWQgbG9uZyB0b3RhbHJhbTsKICAgICAgICB1bnNpZ25lZCBsb25nIGZyZWVyYW07CiAgICAg ICAgdW5zaWduZWQgbG9uZyBzaGFyZWRyYW07CiAgICAgICAgdW5zaWduZWQgbG9uZyBidWZmZXJy YW07CiAgICAgICAgdW5zaWduZWQgbG9uZyB0b3RhbHN3YXA7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBmcmVlc3dhcDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBwcm9jczsKICAgICAgICB1bnNpZ25l ZCBzaG9ydCBwYWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0b3RhbGhpZ2g7CiAgICAgICAgdW5z aWduZWQgbG9uZyBmcmVlaGlnaDsKICAgICAgICB1bnNpZ25lZCBpbnQgbWVtX3VuaXQ7CiAgICAg ICAgY2hhciBfZlsyMC0yKnNpemVvZihsb25nKS1zaXplb2YoaW50KV07Cn07CiMgMTQgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2xpc3QuaCIgMQoKCgoKCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaCIgMQojIDEzICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMQojIDEwICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2lu Y2x1ZGUvYXNtL3ZtODYuaCIgMQojIDY4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9h c20vdm04Ni5oIgpzdHJ1Y3Qgdm04Nl9yZWdzIHsKCgoKICAgICAgICBsb25nIGVieDsKICAgICAg ICBsb25nIGVjeDsKICAgICAgICBsb25nIGVkeDsKICAgICAgICBsb25nIGVzaTsKICAgICAgICBs b25nIGVkaTsKICAgICAgICBsb25nIGVicDsKICAgICAgICBsb25nIGVheDsKICAgICAgICBsb25n IF9fbnVsbF9kczsKICAgICAgICBsb25nIF9fbnVsbF9lczsKICAgICAgICBsb25nIF9fbnVsbF9m czsKICAgICAgICBsb25nIF9fbnVsbF9nczsKICAgICAgICBsb25nIG9yaWdfZWF4OwogICAgICAg IGxvbmcgZWlwOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGNzLCBfX2NzaDsKICAgICAgICBsb25n IGVmbGFnczsKICAgICAgICBsb25nIGVzcDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzcywgX19z c2g7CgoKCiAgICAgICAgdW5zaWduZWQgc2hvcnQgZXMsIF9fZXNoOwogICAgICAgIHVuc2lnbmVk IHNob3J0IGRzLCBfX2RzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBmcywgX19mc2g7CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgZ3MsIF9fZ3NoOwp9OwoKc3RydWN0IHJldmVjdG9yZWRfc3RydWN0 IHsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fbWFwWzhdOwp9OwoKc3RydWN0IHZtODZfc3RydWN0 IHsKICAgICAgICBzdHJ1Y3Qgdm04Nl9yZWdzIHJlZ3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBm bGFnczsKICAgICAgICB1bnNpZ25lZCBsb25nIHNjcmVlbl9iaXRtYXA7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBjcHVfdHlwZTsKICAgICAgICBzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgaW50X3Jl dmVjdG9yZWQ7CiAgICAgICAgc3RydWN0IHJldmVjdG9yZWRfc3RydWN0IGludDIxX3JldmVjdG9y ZWQ7Cn07CgoKCgoKCnN0cnVjdCB2bTg2cGx1c19pbmZvX3N0cnVjdCB7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBmb3JjZV9yZXR1cm5fZm9yX3BpYzoxOwogICAgICAgIHVuc2lnbmVkIGxvbmcgdm04 NmRiZ19hY3RpdmU6MTsKICAgICAgICB1bnNpZ25lZCBsb25nIHZtODZkYmdfVEZwZW5kaWc6MTsK ICAgICAgICB1bnNpZ25lZCBsb25nIHVudXNlZDoyODsKICAgICAgICB1bnNpZ25lZCBsb25nIGlz X3ZtODZwdXM6MTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHZtODZkYmdfaW50eHh0YWJbMzJdOwp9 OwoKc3RydWN0IHZtODZwbHVzX3N0cnVjdCB7CiAgICAgICAgc3RydWN0IHZtODZfcmVncyByZWdz OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzY3Jl ZW5fYml0bWFwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3B1X3R5cGU7CiAgICAgICAgc3RydWN0 IHJldmVjdG9yZWRfc3RydWN0IGludF9yZXZlY3RvcmVkOwogICAgICAgIHN0cnVjdCByZXZlY3Rv cmVkX3N0cnVjdCBpbnQyMV9yZXZlY3RvcmVkOwogICAgICAgIHN0cnVjdCB2bTg2cGx1c19pbmZv X3N0cnVjdCB2bTg2cGx1czsKfTsKIyAxNDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2FzbS92bTg2LmgiCnN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzIHsKCgoKICAgICAgICBsb25nIGVi eDsKICAgICAgICBsb25nIGVjeDsKICAgICAgICBsb25nIGVkeDsKICAgICAgICBsb25nIGVzaTsK ICAgICAgICBsb25nIGVkaTsKICAgICAgICBsb25nIGVicDsKICAgICAgICBsb25nIGVheDsKICAg ICAgICBsb25nIF9fbnVsbF9kczsKICAgICAgICBsb25nIF9fbnVsbF9lczsKICAgICAgICBsb25n IG9yaWdfZWF4OwogICAgICAgIGxvbmcgZWlwOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGNzLCBf X2NzaDsKICAgICAgICBsb25nIGVmbGFnczsKICAgICAgICBsb25nIGVzcDsKICAgICAgICB1bnNp Z25lZCBzaG9ydCBzcywgX19zc2g7CgoKCiAgICAgICAgdW5zaWduZWQgc2hvcnQgZXMsIF9fZXNo OwogICAgICAgIHVuc2lnbmVkIHNob3J0IGRzLCBfX2RzaDsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBmcywgX19mc2g7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZ3MsIF9fZ3NoOwp9OwoKc3RydWN0 IGtlcm5lbF92bTg2X3N0cnVjdCB7CiAgICAgICAgc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgcmVn czsKIyAxODQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS92bTg2LmgiCiAgICAg ICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAgICB1bnNpZ25lZCBsb25nIHNjcmVlbl9iaXRt YXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBjcHVfdHlwZTsKICAgICAgICBzdHJ1Y3QgcmV2ZWN0 b3JlZF9zdHJ1Y3QgaW50X3JldmVjdG9yZWQ7CiAgICAgICAgc3RydWN0IHJldmVjdG9yZWRfc3Ry dWN0IGludDIxX3JldmVjdG9yZWQ7CiAgICAgICAgc3RydWN0IHZtODZwbHVzX2luZm9fc3RydWN0 IHZtODZwbHVzOwogICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzMzI7CiMgMjAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vdm04Ni5oIgp9OwoKdm9pZCBoYW5kbGVfdm04Nl9m YXVsdChzdHJ1Y3Qga2VybmVsX3ZtODZfcmVncyAqLCBsb25nKTsKaW50IGhhbmRsZV92bTg2X3Ry YXAoc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgKiwgbG9uZywgaW50KTsKIyAxMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvYXNtL21hdGhfZW11LmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIiAxCiMgMTggIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgiCnN0cnVjdCBfZnByZWcgewogICAgICAg IHVuc2lnbmVkIHNob3J0IHNpZ25pZmljYW5kWzRdOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGV4 cG9uZW50Owp9OwoKc3RydWN0IF9mcHhyZWcgewogICAgICAgIHVuc2lnbmVkIHNob3J0IHNpZ25p ZmljYW5kWzRdOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGV4cG9uZW50OwogICAgICAgIHVuc2ln bmVkIHNob3J0IHBhZGRpbmdbM107Cn07CgpzdHJ1Y3QgX3htbXJlZyB7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBlbGVtZW50WzRdOwp9OwoKc3RydWN0IF9mcHN0YXRlIHsKCiAgICAgICAgdW5zaWdu ZWQgbG9uZyBjdzsKICAgICAgICB1bnNpZ25lZCBsb25nIHN3OwogICAgICAgIHVuc2lnbmVkIGxv bmcgdGFnOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaXBvZmY7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBjc3NlbDsKICAgICAgICB1bnNpZ25lZCBsb25nIGRhdGFvZmY7CiAgICAgICAgdW5zaWduZWQg bG9uZyBkYXRhc2VsOwogICAgICAgIHN0cnVjdCBfZnByZWcgX3N0WzhdOwogICAgICAgIHVuc2ln bmVkIHNob3J0IHN0YXR1czsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBtYWdpYzsKCgogICAgICAg IHVuc2lnbmVkIGxvbmcgX2Z4c3JfZW52WzZdOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbXhjc3I7 CiAgICAgICAgdW5zaWduZWQgbG9uZyByZXNlcnZlZDsKICAgICAgICBzdHJ1Y3QgX2ZweHJlZyBf Znhzcl9zdFs4XTsKICAgICAgICBzdHJ1Y3QgX3htbXJlZyBfeG1tWzhdOwogICAgICAgIHVuc2ln bmVkIGxvbmcgcGFkZGluZ1s1Nl07Cn07CgoKCnN0cnVjdCBzaWdjb250ZXh0IHsKICAgICAgICB1 bnNpZ25lZCBzaG9ydCBncywgX19nc2g7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNo OwogICAgICAgIHVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBkcywgX19kc2g7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlZGk7CiAgICAgICAgdW5zaWduZWQg bG9uZyBlc2k7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlYnA7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBlc3A7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlYng7CiAgICAgICAgdW5zaWduZWQgbG9uZyBl ZHg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlY3g7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlYXg7 CiAgICAgICAgdW5zaWduZWQgbG9uZyB0cmFwbm87CiAgICAgICAgdW5zaWduZWQgbG9uZyBlcnI7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBlaXA7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgY3MsIF9f Y3NoOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWZsYWdzOwogICAgICAgIHVuc2lnbmVkIGxvbmcg ZXNwX2F0X3NpZ25hbDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzcywgX19zc2g7CiAgICAgICAg c3RydWN0IF9mcHN0YXRlICogZnBzdGF0ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIG9sZG1hc2s7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBjcjI7Cn07CiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvYXNtL21hdGhfZW11LmgiIDIKCmludCByZXN0b3JlX2kzODdfc29mdCh2b2lkICpz Mzg3LCBzdHJ1Y3QgX2Zwc3RhdGUgKmJ1Zik7CmludCBzYXZlX2kzODdfc29mdCh2b2lkICpzMzg3 LCBzdHJ1Y3QgX2Zwc3RhdGUgKiBidWYpOwoKCgoKCnN0cnVjdCBpbmZvIHsKICAgICAgICBsb25n IF9fX29yaWdfZWlwOwogICAgICAgIGxvbmcgX19fZWJ4OwogICAgICAgIGxvbmcgX19fZWN4Owog ICAgICAgIGxvbmcgX19fZWR4OwogICAgICAgIGxvbmcgX19fZXNpOwogICAgICAgIGxvbmcgX19f ZWRpOwogICAgICAgIGxvbmcgX19fZWJwOwogICAgICAgIGxvbmcgX19fZWF4OwogICAgICAgIGxv bmcgX19fZHM7CiAgICAgICAgbG9uZyBfX19lczsKICAgICAgICBsb25nIF9fX29yaWdfZWF4Owog ICAgICAgIGxvbmcgX19fZWlwOwogICAgICAgIGxvbmcgX19fY3M7CiAgICAgICAgbG9uZyBfX19l ZmxhZ3M7CiAgICAgICAgbG9uZyBfX19lc3A7CiAgICAgICAgbG9uZyBfX19zczsKICAgICAgICBs b25nIF9fX3ZtODZfZXM7CiAgICAgICAgbG9uZyBfX192bTg2X2RzOwogICAgICAgIGxvbmcgX19f dm04Nl9mczsKICAgICAgICBsb25nIF9fX3ZtODZfZ3M7Cn07CiMgMTIgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2FzbS9zZWdtZW50LmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2lu Y2x1ZGUvYXNtL3BhZ2UuaCIgMQojIDEyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9h c20vcGFnZS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2NvbmZp Zy5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9wYWdlLmgiIDIK IyA0NSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3BhZ2UuaCIKdHlwZWRlZiBz dHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZV9sb3c7IH0gcHRlX3Q7CnR5cGVkZWYgc3RydWN0IHsg dW5zaWduZWQgbG9uZyBwbWQ7IH0gcG1kX3Q7CnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9u ZyBwZ2Q7IH0gcGdkX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdwcm90 OyB9IHBncHJvdF90OwojIDEwNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3Bh Z2UuaCIKc3RhdGljIF9faW5saW5lX18gaW50IGdldF9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUp CnsKICAgICAgICBpbnQgb3JkZXI7CgogICAgICAgIHNpemUgPSAoc2l6ZS0xKSA+PiAoMTIgLTEp OwogICAgICAgIG9yZGVyID0gLTE7CiAgICAgICAgZG8gewogICAgICAgICAgICAgICAgc2l6ZSA+ Pj0gMTsKICAgICAgICAgICAgICAgIG9yZGVyKys7CiAgICAgICAgfSB3aGlsZSAoc2l6ZSk7CiAg ICAgICAgcmV0dXJuIG9yZGVyOwp9CiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2FzbS9wcm9jZXNzb3IuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2Fz bS90eXBlcy5oIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9wcm9j ZXNzb3IuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zaWdjb250 ZXh0LmgiIDEKIyAxNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nv ci5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUu aCIgMQojIDE3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vYXRvbWljLmgiIDEKCgoK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDUg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9hdG9taWMuaCIgMgojIDIyICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vYXRvbWljLmgiCnR5cGVkZWYgc3RydWN0IHsg dm9sYXRpbGUgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CiMgNTMgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2FzbS9hdG9taWMuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNf YWRkKGludCBpLCBhdG9taWNfdCAqdikKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAog ICAgICAgICAgICAgICAgIiIgImFkZGwgJTEsJTAiCiAgICAgICAgICAgICAgICA6Ij1tIiAodi0+ Y291bnRlcikKICAgICAgICAgICAgICAgIDoiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Cn0K IyA2OSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2F0b21pYy5oIgpzdGF0aWMg X19pbmxpbmVfXyB2b2lkIGF0b21pY19zdWIoaW50IGksIGF0b21pY190ICp2KQp7CiAgICAgICAg X19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIiAic3VibCAlMSwlMCIKICAg ICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVyKQogICAgICAgICAgICAgICAgOiJpciIgKGkp LCAibSIgKHYtPmNvdW50ZXIpKTsKfQojIDg3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVk ZS9hc20vYXRvbWljLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfc3ViX2FuZF90ZXN0 KGludCBpLCBhdG9taWNfdCAqdikKewogICAgICAgIHVuc2lnbmVkIGNoYXIgYzsKCiAgICAgICAg X19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIiAic3VibCAlMiwlMDsgc2V0 ZSAlMSIKICAgICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCiAgICAg ICAgICAgICAgICA6ImlyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CiAgICAg ICAgcmV0dXJuIGM7Cn0KIyAxMDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9h dG9taWMuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfaW5jKGF0b21pY190ICp2KQp7 CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIiAiaW5jbCAl MCIKICAgICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVyKQogICAgICAgICAgICAgICAgOiJt IiAodi0+Y291bnRlcikpOwp9CiMgMTIwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9h c20vYXRvbWljLmgiCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2RlYyhhdG9taWNfdCAq dikKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgIiIgImRl Y2wgJTAiCiAgICAgICAgICAgICAgICA6Ij1tIiAodi0+Y291bnRlcikKICAgICAgICAgICAgICAg IDoibSIgKHYtPmNvdW50ZXIpKTsKfQojIDEzNyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvYXNtL2F0b21pYy5oIgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2RlY19hbmRfdGVz dChhdG9taWNfdCAqdikKewogICAgICAgIHVuc2lnbmVkIGNoYXIgYzsKCiAgICAgICAgX19hc21f XyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIiAiZGVjbCAlMDsgc2V0ZSAlMSIKICAg ICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCiAgICAgICAgICAgICAg ICA6Im0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKICAgICAgICByZXR1cm4gYyAhPSAwOwp9 CiMgMTU3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vYXRvbWljLmgiCnN0YXRp YyBfX2lubGluZV9fIGludCBhdG9taWNfaW5jX2FuZF90ZXN0KGF0b21pY190ICp2KQp7CiAgICAg ICAgdW5zaWduZWQgY2hhciBjOwoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAg ICAgICAgICAgICIiICJpbmNsICUwOyBzZXRlICUxIgogICAgICAgICAgICAgICAgOiI9bSIgKHYt PmNvdW50ZXIpLCAiPXFtIiAoYykKICAgICAgICAgICAgICAgIDoibSIgKHYtPmNvdW50ZXIpIDog Im1lbW9yeSIpOwogICAgICAgIHJldHVybiBjICE9IDA7Cn0KIyAxNzggIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2FzbS9hdG9taWMuaCIKc3RhdGljIF9faW5saW5lX18gaW50IGF0b21p Y19hZGRfbmVnYXRpdmUoaW50IGksIGF0b21pY190ICp2KQp7CiAgICAgICAgdW5zaWduZWQgY2hh ciBjOwoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgICAgICAgICIiICJh ZGRsICUyLCUwOyBzZXRzICUxIgogICAgICAgICAgICAgICAgOiI9bSIgKHYtPmNvdW50ZXIpLCAi PXFtIiAoYykKICAgICAgICAgICAgICAgIDoiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJt ZW1vcnkiKTsKICAgICAgICByZXR1cm4gYzsKfQojIDE4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9saW51eC9jYWNoZS5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgvY29uZmlnLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9s aW51eC9jYWNoZS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2Nh Y2hlLmgiIDEKCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9j b25maWcuaCIgMQojIDggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9jYWNoZS5o IiAyCiMgNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvY2FjaGUuaCIgMgoj IDE5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDIwICIv dXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC90aHJlYWRzLmgiIDEKCgoKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDUgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3RocmVhZHMuaCIgMgojIDIxICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDIKIyAzNCAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIgpzdHJ1Y3QgY3B1aW5mb194ODYgewog ICAgICAgIF9fdTggeDg2OwogICAgICAgIF9fdTggeDg2X3ZlbmRvcjsKICAgICAgICBfX3U4IHg4 Nl9tb2RlbDsKICAgICAgICBfX3U4IHg4Nl9tYXNrOwogICAgICAgIGNoYXIgd3Bfd29ya3Nfb2s7 CiAgICAgICAgY2hhciBobHRfd29ya3Nfb2s7CiAgICAgICAgY2hhciBoYXJkX21hdGg7CiAgICAg ICAgY2hhciByZnU7CiAgICAgICAgaW50IGNwdWlkX2xldmVsOwogICAgICAgIF9fdTMyIHg4Nl9j YXBhYmlsaXR5WzRdOwogICAgICAgIGNoYXIgeDg2X3ZlbmRvcl9pZFsxNl07CiAgICAgICAgY2hh ciB4ODZfbW9kZWxfaWRbNjRdOwogICAgICAgIGludCB4ODZfY2FjaGVfc2l6ZTsKCiAgICAgICAg X191MTYgY2xvY2ttdWw7CiAgICAgICAgaW50IGZkaXZfYnVnOwogICAgICAgIGludCBmMDBmX2J1 ZzsKICAgICAgICBpbnQgY29tYV9idWc7CiAgICAgICAgdW5zaWduZWQgbG9uZyBsb29wc19wZXJf amlmZnk7CiAgICAgICAgdW5zaWduZWQgbG9uZyAqcGdkX3F1aWNrOwogICAgICAgIHVuc2lnbmVk IGxvbmcgKnBtZF9xdWljazsKICAgICAgICB1bnNpZ25lZCBsb25nICpwdGVfcXVpY2s7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBwZ3RhYmxlX2NhY2hlX3N6Owp9IF9fYXR0cmlidXRlX18oKF9fYWxp Z25lZF9fKCgxIDw8ICgoNSkpKSkpKTsKIyA3NCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvYXNtL3Byb2Nlc3Nvci5oIgpleHRlcm4gc3RydWN0IGNwdWluZm9feDg2IGJvb3RfY3B1X2Rh dGE7CmV4dGVybiBzdHJ1Y3QgdHNzX3N0cnVjdCBpbml0X3Rzc1sxXTsKIyA5NiAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIgpleHRlcm4gY2hhciBpZ25vcmVf aXJxMTM7CgpleHRlcm4gdm9pZCBpZGVudGlmeV9jcHUoc3RydWN0IGNwdWluZm9feDg2ICopOwpl eHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKik7CmV4dGVybiB2 b2lkIGRvZGd5X3RzYyh2b2lkKTsKIyAxMjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2FzbS9wcm9jZXNzb3IuaCIKc3RhdGljIGlubGluZSB2b2lkIGNwdWlkKGludCBvcCwgaW50ICpl YXgsIGludCAqZWJ4LCBpbnQgKmVjeCwgaW50ICplZHgpCnsKICAgICAgICBfX2FzbV9fKCJjcHVp ZCIKICAgICAgICAgICAgICAgIDogIj1hIiAoKmVheCksCiAgICAgICAgICAgICAgICAgICI9YiIg KCplYngpLAogICAgICAgICAgICAgICAgICAiPWMiICgqZWN4KSwKICAgICAgICAgICAgICAgICAg Ij1kIiAoKmVkeCkKICAgICAgICAgICAgICAgIDogIjAiIChvcCkpOwp9CgoKCgpzdGF0aWMgaW5s aW5lIHVuc2lnbmVkIGludCBjcHVpZF9lYXgodW5zaWduZWQgaW50IG9wKQp7CiAgICAgICAgdW5z aWduZWQgaW50IGVheDsKCiAgICAgICAgX19hc21fXygiY3B1aWQiCiAgICAgICAgICAgICAgICA6 ICI9YSIgKGVheCkKICAgICAgICAgICAgICAgIDogIjAiIChvcCkKICAgICAgICAgICAgICAgIDog ImJ4IiwgImN4IiwgImR4Iik7CiAgICAgICAgcmV0dXJuIGVheDsKfQpzdGF0aWMgaW5saW5lIHVu c2lnbmVkIGludCBjcHVpZF9lYngodW5zaWduZWQgaW50IG9wKQp7CiAgICAgICAgdW5zaWduZWQg aW50IGVheCwgZWJ4OwoKICAgICAgICBfX2FzbV9fKCJjcHVpZCIKICAgICAgICAgICAgICAgIDog Ij1hIiAoZWF4KSwgIj1iIiAoZWJ4KQogICAgICAgICAgICAgICAgOiAiMCIgKG9wKQogICAgICAg ICAgICAgICAgOiAiY3giLCAiZHgiICk7CiAgICAgICAgcmV0dXJuIGVieDsKfQpzdGF0aWMgaW5s aW5lIHVuc2lnbmVkIGludCBjcHVpZF9lY3godW5zaWduZWQgaW50IG9wKQp7CiAgICAgICAgdW5z aWduZWQgaW50IGVheCwgZWN4OwoKICAgICAgICBfX2FzbV9fKCJjcHVpZCIKICAgICAgICAgICAg ICAgIDogIj1hIiAoZWF4KSwgIj1jIiAoZWN4KQogICAgICAgICAgICAgICAgOiAiMCIgKG9wKQog ICAgICAgICAgICAgICAgOiAiYngiLCAiZHgiICk7CiAgICAgICAgcmV0dXJuIGVjeDsKfQpzdGF0 aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lZHgodW5zaWduZWQgaW50IG9wKQp7CiAgICAg ICAgdW5zaWduZWQgaW50IGVheCwgZWR4OwoKICAgICAgICBfX2FzbV9fKCJjcHVpZCIKICAgICAg ICAgICAgICAgIDogIj1hIiAoZWF4KSwgIj1kIiAoZWR4KQogICAgICAgICAgICAgICAgOiAiMCIg KG9wKQogICAgICAgICAgICAgICAgOiAiYngiLCAiY3giKTsKICAgICAgICByZXR1cm4gZWR4Owp9 CiMgMjAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiCmV4 dGVybiB1bnNpZ25lZCBsb25nIG1tdV9jcjRfZmVhdHVyZXM7CgpzdGF0aWMgaW5saW5lIHZvaWQg c2V0X2luX2NyNCAodW5zaWduZWQgbG9uZyBtYXNrKQp7CiAgICAgICAgbW11X2NyNF9mZWF0dXJl cyB8PSBtYXNrOwogICAgICAgIF9fYXNtX18oIm1vdmwgJSVjcjQsJSVlYXhcblx0IgogICAgICAg ICAgICAgICAgIm9ybCAlMCwlJWVheFxuXHQiCiAgICAgICAgICAgICAgICAibW92bCAlJWVheCwl JWNyNFxuIgogICAgICAgICAgICAgICAgOiA6ICJpcmciIChtYXNrKQogICAgICAgICAgICAgICAg OiJheCIpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfaW5fY3I0ICh1bnNpZ25lZCBsb25n IG1hc2spCnsKICAgICAgICBtbXVfY3I0X2ZlYXR1cmVzICY9IH5tYXNrOwogICAgICAgIF9fYXNt X18oIm1vdmwgJSVjcjQsJSVlYXhcblx0IgogICAgICAgICAgICAgICAgImFuZGwgJTAsJSVlYXhc blx0IgogICAgICAgICAgICAgICAgIm1vdmwgJSVlYXgsJSVjcjRcbiIKICAgICAgICAgICAgICAg IDogOiAiaXJnIiAofm1hc2spCiAgICAgICAgICAgICAgICA6ImF4Iik7Cn0KIyAyNTggIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIKZXh0ZXJuIGludCBNQ0Ff YnVzOwoKCgpleHRlcm4gdW5zaWduZWQgaW50IG1hY2hpbmVfaWQ7CmV4dGVybiB1bnNpZ25lZCBp bnQgbWFjaGluZV9zdWJtb2RlbF9pZDsKZXh0ZXJuIHVuc2lnbmVkIGludCBCSU9TX3JldmlzaW9u OwpleHRlcm4gdW5zaWduZWQgaW50IG1jYV9wZW50aXVtX2ZsYWc7CiMgMjg0ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiCnN0cnVjdCBpMzg3X2ZzYXZlX3N0 cnVjdCB7CiAgICAgICAgbG9uZyBjd2Q7CiAgICAgICAgbG9uZyBzd2Q7CiAgICAgICAgbG9uZyB0 d2Q7CiAgICAgICAgbG9uZyBmaXA7CiAgICAgICAgbG9uZyBmY3M7CiAgICAgICAgbG9uZyBmb287 CiAgICAgICAgbG9uZyBmb3M7CiAgICAgICAgbG9uZyBzdF9zcGFjZVsyMF07CiAgICAgICAgbG9u ZyBzdGF0dXM7Cn07CgpzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0IHsKICAgICAgICB1bnNpZ25l ZCBzaG9ydCBjd2Q7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3dkOwogICAgICAgIHVuc2lnbmVk IHNob3J0IHR3ZDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBmb3A7CiAgICAgICAgbG9uZyBmaXA7 CiAgICAgICAgbG9uZyBmY3M7CiAgICAgICAgbG9uZyBmb287CiAgICAgICAgbG9uZyBmb3M7CiAg ICAgICAgbG9uZyBteGNzcjsKICAgICAgICBsb25nIHJlc2VydmVkOwogICAgICAgIGxvbmcgc3Rf c3BhY2VbMzJdOwogICAgICAgIGxvbmcgeG1tX3NwYWNlWzMyXTsKICAgICAgICBsb25nIHBhZGRp bmdbNTZdOwp9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgxNikpKTsKCnN0cnVjdCBpMzg3X3Nv ZnRfc3RydWN0IHsKICAgICAgICBsb25nIGN3ZDsKICAgICAgICBsb25nIHN3ZDsKICAgICAgICBs b25nIHR3ZDsKICAgICAgICBsb25nIGZpcDsKICAgICAgICBsb25nIGZjczsKICAgICAgICBsb25n IGZvbzsKICAgICAgICBsb25nIGZvczsKICAgICAgICBsb25nIHN0X3NwYWNlWzIwXTsKICAgICAg ICB1bnNpZ25lZCBjaGFyIGZ0b3AsIGNoYW5nZWQsIGxvb2thaGVhZCwgbm9fdXBkYXRlLCBybSwg YWxpbWl0OwogICAgICAgIHN0cnVjdCBpbmZvICppbmZvOwogICAgICAgIHVuc2lnbmVkIGxvbmcg ZW50cnlfZWlwOwp9OwoKdW5pb24gaTM4N191bmlvbiB7CiAgICAgICAgc3RydWN0IGkzODdfZnNh dmVfc3RydWN0IGZzYXZlOwogICAgICAgIHN0cnVjdCBpMzg3X2Z4c2F2ZV9zdHJ1Y3QgZnhzYXZl OwogICAgICAgIHN0cnVjdCBpMzg3X3NvZnRfc3RydWN0IHNvZnQ7Cn07Cgp0eXBlZGVmIHN0cnVj dCB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZWc7Cn0gbW1fc2VnbWVudF90OwoKc3RydWN0IHRz c19zdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIHNob3J0IGJhY2tfbGluayxfX2JsaDsKICAgICAg ICB1bnNpZ25lZCBsb25nIGVzcDA7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3MwLF9fc3MwaDsK ICAgICAgICB1bnNpZ25lZCBsb25nIGVzcDE7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3MxLF9f c3MxaDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVzcDI7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg c3MyLF9fc3MyaDsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fY3IzOwogICAgICAgIHVuc2lnbmVk IGxvbmcgZWlwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWZsYWdzOwogICAgICAgIHVuc2lnbmVk IGxvbmcgZWF4LGVjeCxlZHgsZWJ4OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZXNwOwogICAgICAg IHVuc2lnbmVkIGxvbmcgZWJwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZXNpOwogICAgICAgIHVu c2lnbmVkIGxvbmcgZWRpOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKICAgICAg ICB1bnNpZ25lZCBzaG9ydCBjcywgX19jc2g7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3MsIF9f c3NoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGRzLCBfX2RzaDsKICAgICAgICB1bnNpZ25lZCBz aG9ydCBmcywgX19mc2g7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZ3MsIF9fZ3NoOwogICAgICAg IHVuc2lnbmVkIHNob3J0IGxkdCwgX19sZHRoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHRyYWNl LCBiaXRtYXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpb19iaXRtYXBbMzIgKzFdOwoKCgogICAg ICAgIHVuc2lnbmVkIGxvbmcgX19jYWNoZWxpbmVfZmlsbGVyWzVdOwp9OwoKc3RydWN0IHRocmVh ZF9zdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgZXNwMDsKICAgICAgICB1bnNpZ25lZCBs b25nIGVpcDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVzcDsKICAgICAgICB1bnNpZ25lZCBsb25n IGZzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZ3M7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgZGVi dWdyZWdbOF07CgogICAgICAgIHVuc2lnbmVkIGxvbmcgY3IyLCB0cmFwX25vLCBlcnJvcl9jb2Rl OwoKICAgICAgICB1bmlvbiBpMzg3X3VuaW9uIGkzODc7CgogICAgICAgIHN0cnVjdCB2bTg2X3N0 cnVjdCAqIHZtODZfaW5mbzsKICAgICAgICB1bnNpZ25lZCBsb25nIHNjcmVlbl9iaXRtYXA7CiAg ICAgICAgdW5zaWduZWQgbG9uZyB2ODZmbGFncywgdjg2bWFzaywgdjg2bW9kZSwgc2F2ZWRfZXNw MDsKCiAgICAgICAgaW50IGlvcGVybTsKICAgICAgICB1bnNpZ25lZCBsb25nIGlvX2JpdG1hcFsz MiArMV07Cn07CgpzdHJ1Y3QgdGFza19zdHJ1Y3RfaW5mbwp7CiAgICAgICAgdm9pZCAqa3N0YWNr OwogICAgICAgIGF0b21pY190IHVzZXJzOwp9OwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbml0 X3Rhc2tfc3RhY2tbXTsKIyA0MzkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9w cm9jZXNzb3IuaCIKc3RydWN0IHRhc2tfc3RydWN0OwpzdHJ1Y3QgbW1fc3RydWN0OwoKCmV4dGVy biB2b2lkIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKCgoKZXh0ZXJuIGlu dCBrZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICogYXJnLCB1bnNpZ25lZCBs b25nIGZsYWdzKTsKCgpleHRlcm4gdm9pZCBjb3B5X3NlZ21lbnRzKHN0cnVjdCB0YXNrX3N0cnVj dCAqcCwgc3RydWN0IG1tX3N0cnVjdCAqIG1tKTsKZXh0ZXJuIHZvaWQgcmVsZWFzZV9zZWdtZW50 cyhzdHJ1Y3QgbW1fc3RydWN0ICogbW0pOwoKCgoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25n IHRocmVhZF9zYXZlZF9wYyhzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCkKewogICAgICAgIHJldHVy biAoKHVuc2lnbmVkIGxvbmcgKil0LT5lc3ApWzNdOwp9Cgp1bnNpZ25lZCBsb25nIGdldF93Y2hh bihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwojIDQ3MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2lu Y2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIgp2b2lkIGluaXRfdHNrX2FsbG9jYXRvcih2b2lkKTsKc3Ry dWN0IHRhc2tfc3RydWN0ICogYWxsb2NfdGFza19zdHJ1Y3Qodm9pZCk7CnZvaWQgZ2V0X3Rhc2tf c3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKdm9pZCBmcmVlX3Rhc2tfc3RydWN0KHN0 cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKCgoKc3RydWN0IG1pY3JvY29kZSB7CiAgICAgICAgdW5z aWduZWQgaW50IGhkcnZlcjsKICAgICAgICB1bnNpZ25lZCBpbnQgcmV2OwogICAgICAgIHVuc2ln bmVkIGludCBkYXRlOwogICAgICAgIHVuc2lnbmVkIGludCBzaWc7CiAgICAgICAgdW5zaWduZWQg aW50IGNrc3VtOwogICAgICAgIHVuc2lnbmVkIGludCBsZHJ2ZXI7CiAgICAgICAgdW5zaWduZWQg aW50IHBmOwogICAgICAgIHVuc2lnbmVkIGludCByZXNlcnZlZFs1XTsKICAgICAgICB1bnNpZ25l ZCBpbnQgYml0c1s1MDBdOwp9OwoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCByZXBfbm9wKHZvaWQp CnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmVwO25vcCIpOwp9CiMgMTQgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3ByZWZldGNoLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vY2FjaGUuaCIgMQojIDE1ICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oIiAyCiMgNDMgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3ByZWZldGNoLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBwcmVm ZXRjaChjb25zdCB2b2lkICp4KSB7O30KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHco Y29uc3Qgdm9pZCAqeCkgezt9CiMgNyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvbGlzdC5oIiAyCiMgMTggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2xp c3QuaCIKc3RydWN0IGxpc3RfaGVhZCB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbmV4dCwg KnByZXY7Cn07CiMgMzcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2xpc3Qu aCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2xpc3RfYWRkKHN0cnVjdCBsaXN0X2hlYWQgKiBu ZXcsCiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqIHByZXYsCiAgICAgICAgc3RydWN0IGxpc3Rf aGVhZCAqIG5leHQpCnsKICAgICAgICBuZXh0LT5wcmV2ID0gbmV3OwogICAgICAgIG5ldy0+bmV4 dCA9IG5leHQ7CiAgICAgICAgbmV3LT5wcmV2ID0gcHJldjsKICAgICAgICBwcmV2LT5uZXh0ID0g bmV3Owp9CiMgNTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2xpc3QuaCIK c3RhdGljIF9faW5saW5lX18gdm9pZCBsaXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpuZXcsIHN0 cnVjdCBsaXN0X2hlYWQgKmhlYWQpCnsKICAgICAgICBfX2xpc3RfYWRkKG5ldywgaGVhZCwgaGVh ZC0+bmV4dCk7Cn0KIyA2OCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvbGlz dC5oIgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxpc3RfYWRkX3RhaWwoc3RydWN0IGxpc3RfaGVh ZCAqbmV3LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQp7CiAgICAgICAgX19saXN0X2FkZChuZXcs IGhlYWQtPnByZXYsIGhlYWQpOwp9CiMgODAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2xpbnV4L2xpc3QuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2xpc3RfZGVsKHN0cnVjdCBs aXN0X2hlYWQgKiBwcmV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGxpc3RfaGVhZCAqIG5leHQpCnsKICAgICAgICBuZXh0LT5wcmV2ID0gcHJldjsKICAgICAgICBw cmV2LT5uZXh0ID0gbmV4dDsKfQoKCgoKCgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGxpc3RfZGVs KHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQp7CiAgICAgICAgX19saXN0X2RlbChlbnRyeS0+cHJl diwgZW50cnktPm5leHQpOwp9CgoKCgoKc3RhdGljIF9faW5saW5lX18gdm9pZCBsaXN0X2RlbF9p bml0KHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQp7CiAgICAgICAgX19saXN0X2RlbChlbnRyeS0+ cHJldiwgZW50cnktPm5leHQpOwogICAgICAgIGRvIHsgKGVudHJ5KS0+bmV4dCA9IChlbnRyeSk7 IChlbnRyeSktPnByZXYgPSAoZW50cnkpOyB9IHdoaWxlICgwKTsKfQoKCgoKCnN0YXRpYyBfX2lu bGluZV9fIGludCBsaXN0X2VtcHR5KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCnsKICAgICAgICBy ZXR1cm4gaGVhZC0+bmV4dCA9PSBoZWFkOwp9CgoKCgoKCnN0YXRpYyBfX2lubGluZV9fIHZvaWQg bGlzdF9zcGxpY2Uoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgc3RydWN0IGxpc3RfaGVhZCAqaGVh ZCkKewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmZpcnN0ID0gbGlzdC0+bmV4dDsKCiAgICAg ICAgaWYgKGZpcnN0ICE9IGxpc3QpIHsKICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQg Kmxhc3QgPSBsaXN0LT5wcmV2OwogICAgICAgICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqYXQg PSBoZWFkLT5uZXh0OwoKICAgICAgICAgICAgICAgIGZpcnN0LT5wcmV2ID0gaGVhZDsKICAgICAg ICAgICAgICAgIGhlYWQtPm5leHQgPSBmaXJzdDsKCiAgICAgICAgICAgICAgICBsYXN0LT5uZXh0 ID0gYXQ7CiAgICAgICAgICAgICAgICBhdC0+cHJldiA9IGxhc3Q7CiAgICAgICAgfQp9CiMgMTUg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3N0ZGRlZi5oIiAxCiMgMTYgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiIDIKIyA1OSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCIKICB0eXBlZGVmIHN0cnVjdCB7IH0gc3Bpbmxv Y2tfdDsKIyAxMjIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NwaW5sb2Nr LmgiCiAgdHlwZWRlZiBzdHJ1Y3QgeyB9IHJ3bG9ja190OwojIDIwMyAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9hc20vYXRvbWljLmgiIDEKIyAyMDQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9p bmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiIDIKZXh0ZXJuIGludCBhdG9taWNfZGVjX2FuZF9sb2Nr KGF0b21pY190ICphdG9taWMsIHNwaW5sb2NrX3QgKmxvY2spOwojIDE3ICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9saW51eC93YWl0LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDE4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9saW51eC93YWl0LmgiIDIKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvYXNtL3BhZ2UuaCIgMQojIDIwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51 eC93YWl0LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vcHJvY2Vz c29yLmgiIDEKIyAyMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvd2FpdC5o IiAyCiMgMzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3dhaXQuaCIKc3Ry dWN0IF9fd2FpdF9xdWV1ZSB7CiAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzOwoKICAgICAgICBz dHJ1Y3QgdGFza19zdHJ1Y3QgKiB0YXNrOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgdGFza19s aXN0OwoKCgoKfTsKdHlwZWRlZiBzdHJ1Y3QgX193YWl0X3F1ZXVlIHdhaXRfcXVldWVfdDsKIyA3 NyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvd2FpdC5oIgpzdHJ1Y3QgX193 YWl0X3F1ZXVlX2hlYWQgewogICAgICAgIHNwaW5sb2NrX3QgbG9jazsKICAgICAgICBzdHJ1Y3Qg bGlzdF9oZWFkIHRhc2tfbGlzdDsKCgoKCn07CnR5cGVkZWYgc3RydWN0IF9fd2FpdF9xdWV1ZV9o ZWFkIHdhaXRfcXVldWVfaGVhZF90OwojIDE1NSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgvd2FpdC5oIgpzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF93YWl0cXVldWVfaGVhZCh3 YWl0X3F1ZXVlX2hlYWRfdCAqcSkKewoKCgoKICAgICAgICBxLT5sb2NrID0gKHNwaW5sb2NrX3Qp IHsgfTsKICAgICAgICBkbyB7ICgmcS0+dGFza19saXN0KS0+bmV4dCA9ICgmcS0+dGFza19saXN0 KTsgKCZxLT50YXNrX2xpc3QpLT5wcmV2ID0gKCZxLT50YXNrX2xpc3QpOyB9IHdoaWxlICgwKTsK CgoKCn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3dhaXRxdWV1ZV9lbnRyeSh3YWl0X3F1ZXVl X3QgKnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKewoKCgoKICAgICAgICBxLT5mbGFncyA9IDA7 CiAgICAgICAgcS0+dGFzayA9IHA7CgoKCn0KCnN0YXRpYyBpbmxpbmUgaW50IHdhaXRxdWV1ZV9h Y3RpdmUod2FpdF9xdWV1ZV9oZWFkX3QgKnEpCnsKCgoKCgoKICAgICAgICByZXR1cm4gIWxpc3Rf ZW1wdHkoJnEtPnRhc2tfbGlzdCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBfX2FkZF93YWl0X3F1 ZXVlKHdhaXRfcXVldWVfaGVhZF90ICpoZWFkLCB3YWl0X3F1ZXVlX3QgKm5ldykKewojIDIwMyAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvd2FpdC5oIgogICAgICAgIGxpc3Rf YWRkKCZuZXctPnRhc2tfbGlzdCwgJmhlYWQtPnRhc2tfbGlzdCk7Cn0KCgoKCnN0YXRpYyBpbmxp bmUgdm9pZCBfX2FkZF93YWl0X3F1ZXVlX3RhaWwod2FpdF9xdWV1ZV9oZWFkX3QgKmhlYWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRfcXVldWVf dCAqbmV3KQp7CiMgMjIwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC93YWl0 LmgiCiAgICAgICAgbGlzdF9hZGRfdGFpbCgmbmV3LT50YXNrX2xpc3QsICZoZWFkLT50YXNrX2xp c3QpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgX19yZW1vdmVfd2FpdF9xdWV1ZSh3YWl0X3F1ZXVl X2hlYWRfdCAqaGVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB3YWl0X3F1ZXVlX3QgKm9sZCkKewoKCgoKCiAgICAgICAgbGlzdF9kZWwo Jm9sZC0+dGFza19saXN0KTsKfQojIDEzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9s aW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdHlw ZXMuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdmZzLmgiIDEKCgoKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vc3RhdGZzLmgiIDEKCgoKCgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyA3ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vc3RhdGZzLmgiIDIKCnR5cGVkZWYgX19rZXJu ZWxfZnNpZF90IGZzaWRfdDsKCgoKc3RydWN0IHN0YXRmcyB7CiAgICAgICAgbG9uZyBmX3R5cGU7 CiAgICAgICAgbG9uZyBmX2JzaXplOwogICAgICAgIGxvbmcgZl9ibG9ja3M7CiAgICAgICAgbG9u ZyBmX2JmcmVlOwogICAgICAgIGxvbmcgZl9iYXZhaWw7CiAgICAgICAgbG9uZyBmX2ZpbGVzOwog ICAgICAgIGxvbmcgZl9mZnJlZTsKICAgICAgICBfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwogICAg ICAgIGxvbmcgZl9uYW1lbGVuOwogICAgICAgIGxvbmcgZl9zcGFyZVs2XTsKfTsKIyA1ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC92ZnMuaCIgMgojIDE1ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2luY2x1ZGUvbGludXgvbmV0LmgiIDEKIyAyMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2lu Y2x1ZGUvbGludXgvbmV0LmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvY29uZmlnLmgiIDEKIyAyMiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgv bmV0LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zb2NrZXQu aCIgMQoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3NvY2tldC5o IiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3NvY2tpb3MuaCIg MQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zb2NrZXQuaCIgMgojIDcg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc29ja2lvcy5oIiAxCiMgMjEgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaCIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9hc20vc29ja2lvcy5oIiAxCiMgMjIgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaCIgMgojIDggIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvbGludXgvdWlvLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9saW51eC90eXBlcy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUv bGludXgvdWlvLmgiIDIKIyAxOSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgv dWlvLmgiCnN0cnVjdCBpb3ZlYwp7CiAgICAgICAgdm9pZCAqaW92X2Jhc2U7CiAgICAgICAgX19r ZXJuZWxfc2l6ZV90IGlvdl9sZW47Cn07CiMgOSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgvc29ja2V0LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9s aW51eC90eXBlcy5oIiAxCiMgMTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4 L3NvY2tldC5oIiAyCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHNhX2ZhbWlseV90OwoKCgoKCnN0 cnVjdCBzb2NrYWRkciB7CiAgICAgICAgc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OwogICAgICAgIGNo YXIgc2FfZGF0YVsxNF07Cn07CgpzdHJ1Y3QgbGluZ2VyIHsKICAgICAgICBpbnQgbF9vbm9mZjsK ICAgICAgICBpbnQgbF9saW5nZXI7Cn07CgoKCgoKCgpzdHJ1Y3QgbXNnaGRyIHsKICAgICAgICB2 b2lkICogbXNnX25hbWU7CiAgICAgICAgaW50IG1zZ19uYW1lbGVuOwogICAgICAgIHN0cnVjdCBp b3ZlYyAqIG1zZ19pb3Y7CiAgICAgICAgX19rZXJuZWxfc2l6ZV90IG1zZ19pb3ZsZW47CiAgICAg ICAgdm9pZCAqIG1zZ19jb250cm9sOwogICAgICAgIF9fa2VybmVsX3NpemVfdCBtc2dfY29udHJv bGxlbjsKICAgICAgICB1bnNpZ25lZCBtc2dfZmxhZ3M7Cn07CgoKCgoKCgpzdHJ1Y3QgY21zZ2hk ciB7CiAgICAgICAgX19rZXJuZWxfc2l6ZV90IGNtc2dfbGVuOwogICAgICAgIGludCBjbXNnX2xl dmVsOwogICAgICAgIGludCBjbXNnX3R5cGU7Cn07CiMgMTAyICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9saW51eC9zb2NrZXQuaCIKc3RhdGljIGlubGluZSBzdHJ1Y3QgY21zZ2hkciAq IF9fY21zZ19ueHRoZHIodm9pZCAqX19jdGwsIF9fa2VybmVsX3NpemVfdCBfX3NpemUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNtc2doZHIg Kl9fY21zZykKewogICAgICAgIHN0cnVjdCBjbXNnaGRyICogX19wdHI7CgogICAgICAgIF9fcHRy ID0gKHN0cnVjdCBjbXNnaGRyKikoKCh1bnNpZ25lZCBjaGFyICopIF9fY21zZykgKyAoICgoX19j bXNnLT5jbXNnX2xlbikrc2l6ZW9mKGxvbmcpLTEpICYgfihzaXplb2YobG9uZyktMSkgKSk7CiAg ICAgICAgaWYgKCh1bnNpZ25lZCBsb25nKSgoY2hhciopKF9fcHRyKzEpIC0gKGNoYXIgKikgX19j dGwpID4gX19zaXplKQogICAgICAgICAgICAgICAgcmV0dXJuIChzdHJ1Y3QgY21zZ2hkciAqKTA7 CgogICAgICAgIHJldHVybiBfX3B0cjsKfQoKc3RhdGljIGlubGluZSBzdHJ1Y3QgY21zZ2hkciAq IGNtc2dfbnh0aGRyIChzdHJ1Y3QgbXNnaGRyICpfX21zZywgc3RydWN0IGNtc2doZHIgKl9fY21z ZykKewogICAgICAgIHJldHVybiBfX2Ntc2dfbnh0aGRyKF9fbXNnLT5tc2dfY29udHJvbCwgX19t c2ctPm1zZ19jb250cm9sbGVuLCBfX2Ntc2cpOwp9CgoKCgoKCgpzdHJ1Y3QgdWNyZWQgewogICAg ICAgIF9fdTMyIHBpZDsKICAgICAgICBfX3UzMiB1aWQ7CiAgICAgICAgX191MzIgZ2lkOwp9Owoj IDI0NSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc29ja2V0LmgiCmV4dGVy biBpbnQgbWVtY3B5X2Zyb21pb3ZlYyh1bnNpZ25lZCBjaGFyICprZGF0YSwgc3RydWN0IGlvdmVj ICppb3YsIGludCBsZW4pOwpleHRlcm4gaW50IG1lbWNweV9mcm9taW92ZWNlbmQodW5zaWduZWQg Y2hhciAqa2RhdGEsIHN0cnVjdCBpb3ZlYyAqaW92LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBvZmZzZXQsIGludCBsZW4pOwpleHRlcm4gaW50IGNzdW1fcGFydGlhbF9jb3B5 X2Zyb21pb3ZlY2VuZCh1bnNpZ25lZCBjaGFyICprZGF0YSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGlvdmVjICppb3YsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW4sIGludCAqY3N1bXApOwoKZXh0 ZXJuIGludCB2ZXJpZnlfaW92ZWMoc3RydWN0IG1zZ2hkciAqbSwgc3RydWN0IGlvdmVjICppb3Ys IGNoYXIgKmFkZHJlc3MsIGludCBtb2RlKTsKZXh0ZXJuIGludCBtZW1jcHlfdG9pb3ZlYyhzdHJ1 Y3QgaW92ZWMgKnYsIHVuc2lnbmVkIGNoYXIgKmtkYXRhLCBpbnQgbGVuKTsKZXh0ZXJuIHZvaWQg bWVtY3B5X3Rva2VybmVsaW92ZWMoc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIGNoYXIgKmtk YXRhLCBpbnQgbGVuKTsKZXh0ZXJuIGludCBtb3ZlX2FkZHJfdG9fdXNlcih2b2lkICprYWRkciwg aW50IGtsZW4sIHZvaWQgKnVhZGRyLCBpbnQgKnVsZW4pOwpleHRlcm4gaW50IG1vdmVfYWRkcl90 b19rZXJuZWwodm9pZCAqdWFkZHIsIGludCB1bGVuLCB2b2lkICprYWRkcik7CmV4dGVybiBpbnQg cHV0X2Ntc2coc3RydWN0IG1zZ2hkciosIGludCBsZXZlbCwgaW50IHR5cGUsIGludCBsZW4sIHZv aWQgKmRhdGEpOwojIDIzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9uZXQu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMQoj IDI0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9uZXQuaCIgMgoKc3RydWN0 IHBvbGxfdGFibGVfc3RydWN0OwojIDQ5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9s aW51eC9uZXQuaCIKdHlwZWRlZiBlbnVtIHsKICBTU19GUkVFID0gMCwKICBTU19VTkNPTk5FQ1RF RCwKICBTU19DT05ORUNUSU5HLAogIFNTX0NPTk5FQ1RFRCwKICBTU19ESVNDT05ORUNUSU5HCn0g c29ja2V0X3N0YXRlOwojIDY1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9u ZXQuaCIKc3RydWN0IHNvY2tldAp7CiAgICAgICAgc29ja2V0X3N0YXRlIHN0YXRlOwoKICAgICAg ICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgIHN0cnVjdCBwcm90b19vcHMgKm9wczsKICAg ICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlOwogICAgICAgIHN0cnVjdCBmYXN5bmNfc3RydWN0ICpm YXN5bmNfbGlzdDsKICAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZTsKICAgICAgICBzdHJ1Y3Qgc29j ayAqc2s7CiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKCiAgICAgICAgc2hvcnQgdHlw ZTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHBhc3NjcmVkOwp9OwoKCgpzdHJ1Y3Qgc2NtX2Nvb2tp ZTsKc3RydWN0IHZtX2FyZWFfc3RydWN0OwpzdHJ1Y3QgcGFnZTsKCnN0cnVjdCBwcm90b19vcHMg ewogIGludCBmYW1pbHk7CgogIGludCAoKnJlbGVhc2UpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrKTsK ICBpbnQgKCpiaW5kKSAoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1bXlh ZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2thZGRyX2xlbik7CiAgaW50ICgq Y29ubmVjdCkgKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdXNlcnZhZGRy LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2thZGRyX2xlbiwgaW50IGZsYWdzKTsK ICBpbnQgKCpzb2NrZXRwYWlyKSAoc3RydWN0IHNvY2tldCAqc29jazEsIHN0cnVjdCBzb2NrZXQg KnNvY2syKTsKICBpbnQgKCphY2NlcHQpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29j a2V0ICpuZXdzb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKTsKICBpbnQg KCpnZXRuYW1lKSAoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwK ICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqdXNvY2thZGRyX2xlbiwgaW50IHBlZXIpOwog IHVuc2lnbmVkIGludCAoKnBvbGwpIChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAq c29jaywgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KTsKICBpbnQgKCppb2N0bCkgKHN0 cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CiAgaW50ICgqbGlzdGVuKSAoc3RydWN0IHNvY2tldCAq c29jaywgaW50IGxlbik7CiAgaW50ICgqc2h1dGRvd24pIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBp bnQgZmxhZ3MpOwogIGludCAoKnNldHNvY2tvcHQpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQg bGV2ZWwsIGludCBvcHRuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqb3B0dmFs LCBpbnQgb3B0bGVuKTsKICBpbnQgKCpnZXRzb2Nrb3B0KSAoc3RydWN0IHNvY2tldCAqc29jaywg aW50IGxldmVsLCBpbnQgb3B0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm9w dHZhbCwgaW50ICpvcHRsZW4pOwogIGludCAoKnNlbmRtc2cpIChzdHJ1Y3Qgc29ja2V0ICpzb2Nr LCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgdG90YWxfbGVuLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2Nt KTsKICBpbnQgKCpyZWN2bXNnKSAoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAq bSwgaW50IHRvdGFsX2xlbiwgaW50IGZsYWdzLCBzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtKTsKICBp bnQgKCptbWFwKSAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVj dCB2bV9hcmVhX3N0cnVjdCAqIHZtYSk7CiAgc3NpemVfdCAoKnNlbmRwYWdlKSAoc3RydWN0IHNv Y2tldCAqc29jaywgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBvZmZzZXQsIHNpemVfdCBzaXplLCBp bnQgZmxhZ3MpOwp9OwoKc3RydWN0IG5ldF9wcm90b19mYW1pbHkKewogICAgICAgIGludCBmYW1p bHk7CiAgICAgICAgaW50ICgqY3JlYXRlKShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9j b2wpOwoKCiAgICAgICAgc2hvcnQgYXV0aGVudGljYXRpb247CiAgICAgICAgc2hvcnQgZW5jcnlw dGlvbjsKICAgICAgICBzaG9ydCBlbmNyeXB0X25ldDsKfTsKCnN0cnVjdCBuZXRfcHJvdG8Kewog ICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICAgICAgdm9pZCAoKmluaXRfZnVuYykoc3RydWN0 IG5ldF9wcm90byAqKTsKfTsKCmV4dGVybiBpbnQgc29ja193YWtlX2FzeW5jKHN0cnVjdCBzb2Nr ZXQgKnNrLCBpbnQgaG93LCBpbnQgYmFuZCk7CmV4dGVybiBpbnQgc29ja19yZWdpc3RlcihzdHJ1 Y3QgbmV0X3Byb3RvX2ZhbWlseSAqZmFtKTsKZXh0ZXJuIGludCBzb2NrX3VucmVnaXN0ZXIoaW50 IGZhbWlseSk7CmV4dGVybiBzdHJ1Y3Qgc29ja2V0ICpzb2NrX2FsbG9jKHZvaWQpOwpleHRlcm4g aW50IHNvY2tfY3JlYXRlKGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG8sIHN0cnVjdCBz b2NrZXQgKiopOwpleHRlcm4gdm9pZCBzb2NrX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqKTsKZXh0 ZXJuIGludCBzb2NrX3NlbmRtc2coc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbXNnaGRyICptLCBp bnQgbGVuKTsKZXh0ZXJuIGludCBzb2NrX3JlY3Ztc2coc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qg bXNnaGRyICptLCBpbnQgbGVuLCBpbnQgZmxhZ3MpOwpleHRlcm4gaW50IHNvY2tfcmVhZHZfd3Jp dGV2KGludCB0eXBlLCBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGlvdmVjICogaW92 LCBsb25nIGNvdW50LCBsb25nIHNpemUpOwoKZXh0ZXJuIGludCBuZXRfcmF0ZWxpbWl0KHZvaWQp OwpleHRlcm4gdW5zaWduZWQgbG9uZyBuZXRfcmFuZG9tKHZvaWQpOwpleHRlcm4gdm9pZCBuZXRf c3JhbmRvbSh1bnNpZ25lZCBsb25nKTsKIyAxNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4 L2tkZXZfdC5oIiAxCiMgNjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2tk ZXZfdC5oIgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGtkZXZfdDsKIyA3NiAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgva2Rldl90LmgiCmV4dGVybiBjb25zdCBjaGFyICoga2Rl dm5hbWUoa2Rldl90KTsKCgoKCgoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQga2Rldl90X3Rv X25yKGtkZXZfdCBkZXYpIHsKICAgICAgICByZXR1cm4gKCgodW5zaWduZWQgaW50KSAoKGRldikg Pj4gOCkpPDw4KSB8ICgodW5zaWduZWQgaW50KSAoKGRldikgJiAoKDFVIDw8IDgpIC0gMSkpKTsK fQoKc3RhdGljIGlubGluZSBrZGV2X3QgdG9fa2Rldl90KGludCBkZXYpCnsKICAgICAgICBpbnQg bWFqb3IsIG1pbm9yOwojIDk4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9r ZGV2X3QuaCIKICAgICAgICBtYWpvciA9IChkZXYgPj4gOCk7CiAgICAgICAgbWlub3IgPSAoZGV2 ICYgMHhmZik7CgogICAgICAgIHJldHVybiAoKChtYWpvcikgPDwgOCkgfCAobWlub3IpKTsKfQoj IDE3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvaW9jdGwuaCIgMQoKCgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9pb2N0bC5oIiAxCiMgNSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvaW9jdGwuaCIgMgojIDE4ICIvdXNyL3NyYy9saW51eC0y LjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2lu Y2x1ZGUvbGludXgvbGlzdC5oIiAxCiMgMTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9k Y2FjaGUuaCIgMQoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2F0 b21pYy5oIiAxCiMgNyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvZGNhY2hl LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9tb3VudC5oIiAx CiMgMTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L21vdW50LmgiCnN0cnVj dCB2ZnNtb3VudAp7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBtbnRfaGFzaDsKICAgICAgICBz dHJ1Y3QgdmZzbW91bnQgKm1udF9wYXJlbnQ7CiAgICAgICAgc3RydWN0IGRlbnRyeSAqbW50X21v dW50cG9pbnQ7CiAgICAgICAgc3RydWN0IGRlbnRyeSAqbW50X3Jvb3Q7CiAgICAgICAgc3RydWN0 IHN1cGVyX2Jsb2NrICptbnRfc2I7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBtbnRfbW91bnRz OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbW50X2NoaWxkOwogICAgICAgIGF0b21pY190IG1u dF9jb3VudDsKICAgICAgICBpbnQgbW50X2ZsYWdzOwogICAgICAgIGNoYXIgKm1udF9kZXZuYW1l OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbW50X2xpc3Q7Cn07CgpzdGF0aWMgaW5saW5lIHN0 cnVjdCB2ZnNtb3VudCAqbW50Z2V0KHN0cnVjdCB2ZnNtb3VudCAqbW50KQp7CiAgICAgICAgaWYg KG1udCkKICAgICAgICAgICAgICAgIGF0b21pY19pbmMoJm1udC0+bW50X2NvdW50KTsKICAgICAg ICByZXR1cm4gbW50Owp9CgpleHRlcm4gdm9pZCBfX21udHB1dChzdHJ1Y3QgdmZzbW91bnQgKm1u dCk7CgpzdGF0aWMgaW5saW5lIHZvaWQgbW50cHV0KHN0cnVjdCB2ZnNtb3VudCAqbW50KQp7CiAg ICAgICAgaWYgKG1udCkgewogICAgICAgICAgICAgICAgaWYgKGF0b21pY19kZWNfYW5kX3Rlc3Qo Jm1udC0+bW50X2NvdW50KSkKICAgICAgICAgICAgICAgICAgICAgICAgX19tbnRwdXQobW50KTsK ICAgICAgICB9Cn0KIyA4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9kY2Fj aGUuaCIgMgojIDI0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9kY2FjaGUu aCIKc3RydWN0IHFzdHIgewogICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBuYW1lOwogICAg ICAgIHVuc2lnbmVkIGludCBsZW47CiAgICAgICAgdW5zaWduZWQgaW50IGhhc2g7Cn07CgpzdHJ1 Y3QgZGVudHJ5X3N0YXRfdCB7CiAgICAgICAgaW50IG5yX2RlbnRyeTsKICAgICAgICBpbnQgbnJf dW51c2VkOwogICAgICAgIGludCBhZ2VfbGltaXQ7CiAgICAgICAgaW50IHdhbnRfcGFnZXM7CiAg ICAgICAgaW50IGR1bW15WzJdOwp9OwpleHRlcm4gc3RydWN0IGRlbnRyeV9zdGF0X3QgZGVudHJ5 X3N0YXQ7CgoKCgoKCnN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgcGFydGlhbF9uYW1l X2hhc2godW5zaWduZWQgbG9uZyBjLCB1bnNpZ25lZCBsb25nIHByZXZoYXNoKQp7CiAgICAgICAg cmV0dXJuIChwcmV2aGFzaCArIChjIDw8IDQpICsgKGMgPj4gNCkpICogMTE7Cn0KCgpzdGF0aWMg X19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIGVuZF9uYW1lX2hhc2godW5zaWduZWQgbG9uZyBoYXNo KQp7CiAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBpbnQpIGhhc2g7Cn0KCgpzdGF0aWMgX19pbmxp bmVfXyB1bnNpZ25lZCBpbnQgZnVsbF9uYW1lX2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqIG5h bWUsIHVuc2lnbmVkIGludCBsZW4pCnsKICAgICAgICB1bnNpZ25lZCBsb25nIGhhc2ggPSAwOwog ICAgICAgIHdoaWxlIChsZW4tLSkKICAgICAgICAgICAgICAgIGhhc2ggPSBwYXJ0aWFsX25hbWVf aGFzaCgqbmFtZSsrLCBoYXNoKTsKICAgICAgICByZXR1cm4gZW5kX25hbWVfaGFzaChoYXNoKTsK fQoKCgpzdHJ1Y3QgZGVudHJ5IHsKICAgICAgICBhdG9taWNfdCBkX2NvdW50OwogICAgICAgIHVu c2lnbmVkIGludCBkX2ZsYWdzOwogICAgICAgIHN0cnVjdCBpbm9kZSAqIGRfaW5vZGU7CiAgICAg ICAgc3RydWN0IGRlbnRyeSAqIGRfcGFyZW50OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZF9o YXNoOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZF9scnU7CiAgICAgICAgc3RydWN0IGxpc3Rf aGVhZCBkX2NoaWxkOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZF9zdWJkaXJzOwogICAgICAg IHN0cnVjdCBsaXN0X2hlYWQgZF9hbGlhczsKICAgICAgICBpbnQgZF9tb3VudGVkOwogICAgICAg IHN0cnVjdCBxc3RyIGRfbmFtZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGRfdGltZTsKICAgICAg ICBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgKmRfb3A7CiAgICAgICAgc3RydWN0IHN1cGVyX2Js b2NrICogZF9zYjsKICAgICAgICB1bnNpZ25lZCBsb25nIGRfdmZzX2ZsYWdzOwogICAgICAgIHZv aWQgKiBkX2ZzZGF0YTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGRfaW5hbWVbMTZdOwp9OwoKc3Ry dWN0IGRlbnRyeV9vcGVyYXRpb25zIHsKICAgICAgICBpbnQgKCpkX3JldmFsaWRhdGUpKHN0cnVj dCBkZW50cnkgKiwgaW50KTsKICAgICAgICBpbnQgKCpkX2hhc2gpIChzdHJ1Y3QgZGVudHJ5ICos IHN0cnVjdCBxc3RyICopOwogICAgICAgIGludCAoKmRfY29tcGFyZSkgKHN0cnVjdCBkZW50cnkg Kiwgc3RydWN0IHFzdHIgKiwgc3RydWN0IHFzdHIgKik7CiAgICAgICAgaW50ICgqZF9kZWxldGUp KHN0cnVjdCBkZW50cnkgKik7CiAgICAgICAgdm9pZCAoKmRfcmVsZWFzZSkoc3RydWN0IGRlbnRy eSAqKTsKICAgICAgICB2b2lkICgqZF9pcHV0KShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9k ZSAqKTsKfTsKIyAxMjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2RjYWNo ZS5oIgpleHRlcm4gc3BpbmxvY2tfdCBkY2FjaGVfbG9jazsKCnN0YXRpYyBfX2lubGluZV9fIGlu dCBkbmFtZV9leHRlcm5hbChzdHJ1Y3QgZGVudHJ5ICpkKQp7CiAgICAgICAgcmV0dXJuIGQtPmRf bmFtZS5uYW1lICE9IGQtPmRfaW5hbWU7Cn0KCgoKCmV4dGVybiB2b2lkIGRfaW5zdGFudGlhdGUo c3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIGRfZGVsZXRlKHN0 cnVjdCBkZW50cnkgKik7CgoKZXh0ZXJuIHN0cnVjdCBkZW50cnkgKiBkX2FsbG9jKHN0cnVjdCBk ZW50cnkgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7CmV4dGVybiB2b2lkIHNocmlua19kY2FjaGVf c2Ioc3RydWN0IHN1cGVyX2Jsb2NrICopOwpleHRlcm4gdm9pZCBzaHJpbmtfZGNhY2hlX3BhcmVu dChzdHJ1Y3QgZGVudHJ5ICopOwpleHRlcm4gaW50IGRfaW52YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5 ICopOwoKCnN0cnVjdCB6b25lX3N0cnVjdDsKCmV4dGVybiB2b2lkIHNocmlua19kY2FjaGVfbWVt b3J5KGludCwgdW5zaWduZWQgaW50KTsKZXh0ZXJuIHZvaWQgcHJ1bmVfZGNhY2hlKGludCk7CgoK ZXh0ZXJuIHZvaWQgc2hyaW5rX2ljYWNoZV9tZW1vcnkoaW50LCBpbnQpOwpleHRlcm4gdm9pZCBw cnVuZV9pY2FjaGUoaW50KTsKCgpleHRlcm4gdm9pZCBzaHJpbmtfZHFjYWNoZV9tZW1vcnkoaW50 LCB1bnNpZ25lZCBpbnQpOwoKCmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvY19yb290KHN0 cnVjdCBpbm9kZSAqKTsKCgpleHRlcm4gdm9pZCBkX2dlbm9jaWRlKHN0cnVjdCBkZW50cnkgKik7 CgpleHRlcm4gc3RydWN0IGRlbnRyeSAqZF9maW5kX2FsaWFzKHN0cnVjdCBpbm9kZSAqKTsKZXh0 ZXJuIHZvaWQgZF9wcnVuZV9hbGlhc2VzKHN0cnVjdCBpbm9kZSAqKTsKCgpleHRlcm4gaW50IGhh dmVfc3VibW91bnRzKHN0cnVjdCBkZW50cnkgKik7CgoKCgpleHRlcm4gdm9pZCBkX3JlaGFzaChz dHJ1Y3QgZGVudHJ5ICopOwojIDE4NSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvZGNhY2hlLmgiCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgZF9hZGQoc3RydWN0IGRlbnRyeSAq IGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKewogICAgICAgIGRfaW5zdGFudGlhdGUoZW50 cnksIGlub2RlKTsKICAgICAgICBkX3JlaGFzaChlbnRyeSk7Cn0KCgpleHRlcm4gdm9pZCBkX21v dmUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwoKCmV4dGVybiBzdHJ1Y3QgZGVu dHJ5ICogZF9sb29rdXAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKCgpleHRlcm4g aW50IGRfdmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwoKZXh0ZXJu IGNoYXIgKiBfX2RfcGF0aChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1 Y3QgZGVudHJ5ICosCiAgICAgICAgc3RydWN0IHZmc21vdW50ICosIGNoYXIgKiwgaW50KTsKIyAy MTggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oIgpzdGF0aWMg X19pbmxpbmVfXyBzdHJ1Y3QgZGVudHJ5ICogZGdldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCnsK ICAgICAgICBpZiAoZGVudHJ5KSB7CiAgICAgICAgICAgICAgICBpZiAoISgoJmRlbnRyeS0+ZF9j b3VudCktPmNvdW50ZXIpKQogICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRp bGVfXygiLmJ5dGUgMHgwZiwweDBiIik7CiAgICAgICAgICAgICAgICBhdG9taWNfaW5jKCZkZW50 cnktPmRfY291bnQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGVudHJ5Owp9CgpleHRlcm4g c3RydWN0IGRlbnRyeSAqIGRnZXRfbG9ja2VkKHN0cnVjdCBkZW50cnkgKik7CiMgMjM3ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9kY2FjaGUuaCIKc3RhdGljIF9faW5saW5l X18gaW50IGRfdW5oYXNoZWQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQp7CiAgICAgICAgcmV0dXJu IGxpc3RfZW1wdHkoJmRlbnRyeS0+ZF9oYXNoKTsKfQoKZXh0ZXJuIHZvaWQgZHB1dChzdHJ1Y3Qg ZGVudHJ5ICopOwoKc3RhdGljIF9faW5saW5lX18gaW50IGRfbW91bnRwb2ludChzdHJ1Y3QgZGVu dHJ5ICpkZW50cnkpCnsKICAgICAgICByZXR1cm4gZGVudHJ5LT5kX21vdW50ZWQ7Cn0KCmV4dGVy biBzdHJ1Y3QgdmZzbW91bnQgKmxvb2t1cF9tbnQoc3RydWN0IHZmc21vdW50ICosIHN0cnVjdCBk ZW50cnkgKik7CiMgMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zdGF0LmgiIDEKCgoK CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zdGF0LmgiIDEKCgoKc3Ry dWN0IF9fb2xkX2tlcm5lbF9zdGF0IHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9kZXY7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgc3RfaW5vOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X21v ZGU7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CiAgICAgICAgdW5zaWduZWQgc2hv cnQgc3RfdWlkOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X2dpZDsKICAgICAgICB1bnNpZ25l ZCBzaG9ydCBzdF9yZGV2OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3Rfc2l6ZTsKICAgICAgICB1 bnNpZ25lZCBsb25nIHN0X2F0aW1lOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKfTsKCnN0cnVjdCBzdGF0IHsKICAgICAgICB1 bnNpZ25lZCBzaG9ydCBzdF9kZXY7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgX19wYWQxOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgc3RfaW5vOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X21vZGU7 CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg c3RfdWlkOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X2dpZDsKICAgICAgICB1bnNpZ25lZCBz aG9ydCBzdF9yZGV2OwogICAgICAgIHVuc2lnbmVkIHNob3J0IF9fcGFkMjsKICAgICAgICB1bnNp Z25lZCBsb25nIHN0X3NpemU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzdF9ibGtzaXplOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgc3RfYmxvY2tzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfYXRp bWU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDE7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzdF9tdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKICAgICAgICB1bnNp Z25lZCBsb25nIHN0X2N0aW1lOwogICAgICAgIHVuc2lnbmVkIGxvbmcgX191bnVzZWQzOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgX191bnVz ZWQ1Owp9OwoKCgoKc3RydWN0IHN0YXQ2NCB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RfZGV2 OwogICAgICAgIHVuc2lnbmVkIGNoYXIgX19wYWQwWzEwXTsKCgogICAgICAgIHVuc2lnbmVkIGxv bmcgX19zdF9pbm87CgogICAgICAgIHVuc2lnbmVkIGludCBzdF9tb2RlOwogICAgICAgIHVuc2ln bmVkIGludCBzdF9ubGluazsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBzdF91aWQ7CiAgICAgICAg dW5zaWduZWQgbG9uZyBzdF9naWQ7CgogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X3JkZXY7CiAg ICAgICAgdW5zaWduZWQgY2hhciBfX3BhZDNbMTBdOwoKICAgICAgICBsb25nIGxvbmcgc3Rfc2l6 ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X2Jsa3NpemU7CgogICAgICAgIHVuc2lnbmVkIGxv bmcgc3RfYmxvY2tzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgX19wYWQ0OwoKICAgICAgICB1bnNp Z25lZCBsb25nIHN0X2F0aW1lOwogICAgICAgIHVuc2lnbmVkIGxvbmcgX19wYWQ1OwoKICAgICAg ICB1bnNpZ25lZCBsb25nIHN0X210aW1lOwogICAgICAgIHVuc2lnbmVkIGxvbmcgX19wYWQ2OwoK ICAgICAgICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lOwogICAgICAgIHVuc2lnbmVkIGxvbmcgX19w YWQ3OwoKICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc3RfaW5vOwp9OwojIDcgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3N0YXQuaCIgMgojIDIxICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvbGludXgvY2FjaGUuaCIgMQojIDIyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvc3RkZGVmLmgiIDEKIyAyMyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgv ZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3N0cmluZy5o IiAxCgoKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3R5cGVz LmgiIDEKIyA5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zdHJpbmcuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3N0ZGRlZi5oIiAxCiMg MTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIiAyCgoKCgoK ZXh0ZXJuIGNoYXIgKiBfX19zdHJ0b2s7CmV4dGVybiBjaGFyICogc3RycGJyayhjb25zdCBjaGFy ICosY29uc3QgY2hhciAqKTsKZXh0ZXJuIGNoYXIgKiBzdHJ0b2soY2hhciAqLGNvbnN0IGNoYXIg Kik7CmV4dGVybiBjaGFyICogc3Ryc2VwKGNoYXIgKiosY29uc3QgY2hhciAqKTsKZXh0ZXJuIF9f a2VybmVsX3NpemVfdCBzdHJzcG4oY29uc3QgY2hhciAqLGNvbnN0IGNoYXIgKik7CgoKCgoKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vc3RyaW5nLmgiIDEKCgoKCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyA2ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vc3RyaW5nLmgiIDIKIyAzMyAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3N0cmluZy5oIgpzdGF0aWMgaW5saW5lIGNoYXIgKiBz dHJjcHkoY2hhciAqIGRlc3QsY29uc3QgY2hhciAqc3JjKQp7CmludCBkMCwgZDEsIGQyOwpfX2Fz bV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAiMTpcdGxvZHNiXG5cdCIKICAgICAgICAic3Rvc2Jc blx0IgogICAgICAgICJ0ZXN0YiAlJWFsLCUlYWxcblx0IgogICAgICAgICJqbmUgMWIiCiAgICAg ICAgOiAiPSZTIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZhIiAoZDIpCiAgICAgICAgOiIwIiAoc3Jj KSwiMSIgKGRlc3QpIDogIm1lbW9yeSIpOwpyZXR1cm4gZGVzdDsKfQoKCnN0YXRpYyBpbmxpbmUg Y2hhciAqIHN0cm5jcHkoY2hhciAqIGRlc3QsY29uc3QgY2hhciAqc3JjLHNpemVfdCBjb3VudCkK ewppbnQgZDAsIGQxLCBkMiwgZDM7Cl9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICIxOlx0 ZGVjbCAlMlxuXHQiCiAgICAgICAgImpzIDJmXG5cdCIKICAgICAgICAibG9kc2Jcblx0IgogICAg ICAgICJzdG9zYlxuXHQiCiAgICAgICAgInRlc3RiICUlYWwsJSVhbFxuXHQiCiAgICAgICAgImpu ZSAxYlxuXHQiCiAgICAgICAgInJlcFxuXHQiCiAgICAgICAgInN0b3NiXG4iCiAgICAgICAgIjI6 IgogICAgICAgIDogIj0mUyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mYyIgKGQyKSwgIj0mYSIgKGQz KQogICAgICAgIDoiMCIgKHNyYyksIjEiIChkZXN0KSwiMiIgKGNvdW50KSA6ICJtZW1vcnkiKTsK cmV0dXJuIGRlc3Q7Cn0KCgpzdGF0aWMgaW5saW5lIGNoYXIgKiBzdHJjYXQoY2hhciAqIGRlc3Qs Y29uc3QgY2hhciAqIHNyYykKewppbnQgZDAsIGQxLCBkMiwgZDM7Cl9fYXNtX18gX192b2xhdGls ZV9fKAogICAgICAgICJyZXBuZVxuXHQiCiAgICAgICAgInNjYXNiXG5cdCIKICAgICAgICAiZGVj bCAlMVxuIgogICAgICAgICIxOlx0bG9kc2Jcblx0IgogICAgICAgICJzdG9zYlxuXHQiCiAgICAg ICAgInRlc3RiICUlYWwsJSVhbFxuXHQiCiAgICAgICAgImpuZSAxYiIKICAgICAgICA6ICI9JlMi IChkMCksICI9JkQiIChkMSksICI9JmEiIChkMiksICI9JmMiIChkMykKICAgICAgICA6ICIwIiAo c3JjKSwgIjEiIChkZXN0KSwgIjIiICgwKSwgIjMiICgweGZmZmZmZmZmKToibWVtb3J5Iik7CnJl dHVybiBkZXN0Owp9CgoKc3RhdGljIGlubGluZSBjaGFyICogc3RybmNhdChjaGFyICogZGVzdCxj b25zdCBjaGFyICogc3JjLHNpemVfdCBjb3VudCkKewppbnQgZDAsIGQxLCBkMiwgZDM7Cl9fYXNt X18gX192b2xhdGlsZV9fKAogICAgICAgICJyZXBuZVxuXHQiCiAgICAgICAgInNjYXNiXG5cdCIK ICAgICAgICAiZGVjbCAlMVxuXHQiCiAgICAgICAgIm1vdmwgJTgsJTNcbiIKICAgICAgICAiMTpc dGRlY2wgJTNcblx0IgogICAgICAgICJqcyAyZlxuXHQiCiAgICAgICAgImxvZHNiXG5cdCIKICAg ICAgICAic3Rvc2Jcblx0IgogICAgICAgICJ0ZXN0YiAlJWFsLCUlYWxcblx0IgogICAgICAgICJq bmUgMWJcbiIKICAgICAgICAiMjpcdHhvcmwgJTIsJTJcblx0IgogICAgICAgICJzdG9zYiIKICAg ICAgICA6ICI9JlMiIChkMCksICI9JkQiIChkMSksICI9JmEiIChkMiksICI9JmMiIChkMykKICAg ICAgICA6ICIwIiAoc3JjKSwiMSIgKGRlc3QpLCIyIiAoMCksIjMiICgweGZmZmZmZmZmKSwgImci IChjb3VudCkKICAgICAgICA6ICJtZW1vcnkiKTsKcmV0dXJuIGRlc3Q7Cn0KCgpzdGF0aWMgaW5s aW5lIGludCBzdHJjbXAoY29uc3QgY2hhciAqIGNzLGNvbnN0IGNoYXIgKiBjdCkKewppbnQgZDAs IGQxOwpyZWdpc3RlciBpbnQgX19yZXM7Cl9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICIx Olx0bG9kc2Jcblx0IgogICAgICAgICJzY2FzYlxuXHQiCiAgICAgICAgImpuZSAyZlxuXHQiCiAg ICAgICAgInRlc3RiICUlYWwsJSVhbFxuXHQiCiAgICAgICAgImpuZSAxYlxuXHQiCiAgICAgICAg InhvcmwgJSVlYXgsJSVlYXhcblx0IgogICAgICAgICJqbXAgM2ZcbiIKICAgICAgICAiMjpcdHNi YmwgJSVlYXgsJSVlYXhcblx0IgogICAgICAgICJvcmIgJDEsJSVhbFxuIgogICAgICAgICIzOiIK ICAgICAgICA6Ij1hIiAoX19yZXMpLCAiPSZTIiAoZDApLCAiPSZEIiAoZDEpCiAgICAgICAgICAg ICAgICAgICAgIDoiMSIgKGNzKSwiMiIgKGN0KSk7CnJldHVybiBfX3JlczsKfQoKCnN0YXRpYyBp bmxpbmUgaW50IHN0cm5jbXAoY29uc3QgY2hhciAqIGNzLGNvbnN0IGNoYXIgKiBjdCxzaXplX3Qg Y291bnQpCnsKcmVnaXN0ZXIgaW50IF9fcmVzOwppbnQgZDAsIGQxLCBkMjsKX19hc21fXyBfX3Zv bGF0aWxlX18oCiAgICAgICAgIjE6XHRkZWNsICUzXG5cdCIKICAgICAgICAianMgMmZcblx0Igog ICAgICAgICJsb2RzYlxuXHQiCiAgICAgICAgInNjYXNiXG5cdCIKICAgICAgICAiam5lIDNmXG5c dCIKICAgICAgICAidGVzdGIgJSVhbCwlJWFsXG5cdCIKICAgICAgICAiam5lIDFiXG4iCiAgICAg ICAgIjI6XHR4b3JsICUlZWF4LCUlZWF4XG5cdCIKICAgICAgICAiam1wIDRmXG4iCiAgICAgICAg IjM6XHRzYmJsICUlZWF4LCUlZWF4XG5cdCIKICAgICAgICAib3JiICQxLCUlYWxcbiIKICAgICAg ICAiNDoiCiAgICAgICAgICAgICAgICAgICAgIDoiPWEiIChfX3JlcyksICI9JlMiIChkMCksICI9 JkQiIChkMSksICI9JmMiIChkMikKICAgICAgICAgICAgICAgICAgICAgOiIxIiAoY3MpLCIyIiAo Y3QpLCIzIiAoY291bnQpKTsKcmV0dXJuIF9fcmVzOwp9CgoKc3RhdGljIGlubGluZSBjaGFyICog c3RyY2hyKGNvbnN0IGNoYXIgKiBzLCBpbnQgYykKewppbnQgZDA7CnJlZ2lzdGVyIGNoYXIgKiBf X3JlczsKX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgIm1vdmIgJSVhbCwlJWFoXG4iCiAg ICAgICAgIjE6XHRsb2RzYlxuXHQiCiAgICAgICAgImNtcGIgJSVhaCwlJWFsXG5cdCIKICAgICAg ICAiamUgMmZcblx0IgogICAgICAgICJ0ZXN0YiAlJWFsLCUlYWxcblx0IgogICAgICAgICJqbmUg MWJcblx0IgogICAgICAgICJtb3ZsICQxLCUxXG4iCiAgICAgICAgIjI6XHRtb3ZsICUxLCUwXG5c dCIKICAgICAgICAiZGVjbCAlMCIKICAgICAgICA6Ij1hIiAoX19yZXMpLCAiPSZTIiAoZDApIDog IjEiIChzKSwiMCIgKGMpKTsKcmV0dXJuIF9fcmVzOwp9CgoKc3RhdGljIGlubGluZSBjaGFyICog c3RycmNocihjb25zdCBjaGFyICogcywgaW50IGMpCnsKaW50IGQwLCBkMTsKcmVnaXN0ZXIgY2hh ciAqIF9fcmVzOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAibW92YiAlJWFsLCUlYWhc biIKICAgICAgICAiMTpcdGxvZHNiXG5cdCIKICAgICAgICAiY21wYiAlJWFoLCUlYWxcblx0Igog ICAgICAgICJqbmUgMmZcblx0IgogICAgICAgICJsZWFsIC0xKCUlZXNpKSwlMFxuIgogICAgICAg ICIyOlx0dGVzdGIgJSVhbCwlJWFsXG5cdCIKICAgICAgICAiam5lIDFiIgogICAgICAgIDoiPWci IChfX3JlcyksICI9JlMiIChkMCksICI9JmEiIChkMSkgOiIwIiAoMCksIjEiIChzKSwiMiIgKGMp KTsKcmV0dXJuIF9fcmVzOwp9CgoKc3RhdGljIGlubGluZSBzaXplX3Qgc3RybGVuKGNvbnN0IGNo YXIgKiBzKQp7CmludCBkMDsKcmVnaXN0ZXIgaW50IF9fcmVzOwpfX2FzbV9fIF9fdm9sYXRpbGVf XygKICAgICAgICAicmVwbmVcblx0IgogICAgICAgICJzY2FzYlxuXHQiCiAgICAgICAgIm5vdGwg JTBcblx0IgogICAgICAgICJkZWNsICUwIgogICAgICAgIDoiPWMiIChfX3JlcyksICI9JkQiIChk MCkgOiIxIiAocyksImEiICgwKSwgIjAiICgweGZmZmZmZmZmKSk7CnJldHVybiBfX3JlczsKfQoK c3RhdGljIGlubGluZSB2b2lkICogX19tZW1jcHkodm9pZCAqIHRvLCBjb25zdCB2b2lkICogZnJv bSwgc2l6ZV90IG4pCnsKaW50IGQwLCBkMSwgZDI7Cl9fYXNtX18gX192b2xhdGlsZV9fKAogICAg ICAgICJyZXAgOyBtb3ZzbFxuXHQiCiAgICAgICAgInRlc3RiICQyLCViNFxuXHQiCiAgICAgICAg ImplIDFmXG5cdCIKICAgICAgICAibW92c3dcbiIKICAgICAgICAiMTpcdHRlc3RiICQxLCViNFxu XHQiCiAgICAgICAgImplIDJmXG5cdCIKICAgICAgICAibW92c2JcbiIKICAgICAgICAiMjoiCiAg ICAgICAgOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZTIiAoZDIpCiAgICAgICAgOiIwIiAo bi80KSwgInEiIChuKSwiMSIgKChsb25nKSB0byksIjIiICgobG9uZykgZnJvbSkKICAgICAgICA6 ICJtZW1vcnkiKTsKcmV0dXJuICh0byk7Cn0KCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgKiBfX2Nv bnN0YW50X21lbWNweSh2b2lkICogdG8sIGNvbnN0IHZvaWQgKiBmcm9tLCBzaXplX3QgbikKewog ICAgICAgIHN3aXRjaCAobikgewogICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gdG87CiAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAg ICAgICAgICAgICAgICoodW5zaWduZWQgY2hhciAqKXRvID0gKihjb25zdCB1bnNpZ25lZCBjaGFy ICopZnJvbTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvOwogICAgICAgICAgICAg ICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIHNob3J0ICopdG8g PSAqKGNvbnN0IHVuc2lnbmVkIHNob3J0ICopZnJvbTsKICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHRvOwogICAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgICAg ICAqKHVuc2lnbmVkIHNob3J0ICopdG8gPSAqKGNvbnN0IHVuc2lnbmVkIHNob3J0ICopZnJvbTsK ICAgICAgICAgICAgICAgICAgICAgICAgKigyKyh1bnNpZ25lZCBjaGFyICopdG8pID0gKigyKyhj b25zdCB1bnNpZ25lZCBjaGFyICopZnJvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biB0bzsKICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgICAgICAgKih1 bnNpZ25lZCBsb25nICopdG8gPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tOwogICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gdG87CiAgICAgICAgICAgICAgICBjYXNlIDY6CiAgICAg ICAgICAgICAgICAgICAgICAgICoodW5zaWduZWQgbG9uZyAqKXRvID0gKihjb25zdCB1bnNpZ25l ZCBsb25nICopZnJvbTsKICAgICAgICAgICAgICAgICAgICAgICAgKigyKyh1bnNpZ25lZCBzaG9y dCAqKXRvKSA9ICooMisoY29uc3QgdW5zaWduZWQgc2hvcnQgKilmcm9tKTsKICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIHRvOwogICAgICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAg ICAgICAgICAgICAgICAqKHVuc2lnbmVkIGxvbmcgKil0byA9ICooY29uc3QgdW5zaWduZWQgbG9u ZyAqKWZyb207CiAgICAgICAgICAgICAgICAgICAgICAgICooMSsodW5zaWduZWQgbG9uZyAqKXRv KSA9ICooMSsoY29uc3QgdW5zaWduZWQgbG9uZyAqKWZyb20pOwogICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gdG87CiAgICAgICAgICAgICAgICBjYXNlIDEyOgogICAgICAgICAgICAgICAg ICAgICAgICAqKHVuc2lnbmVkIGxvbmcgKil0byA9ICooY29uc3QgdW5zaWduZWQgbG9uZyAqKWZy b207CiAgICAgICAgICAgICAgICAgICAgICAgICooMSsodW5zaWduZWQgbG9uZyAqKXRvKSA9ICoo MSsoY29uc3QgdW5zaWduZWQgbG9uZyAqKWZyb20pOwogICAgICAgICAgICAgICAgICAgICAgICAq KDIrKHVuc2lnbmVkIGxvbmcgKil0bykgPSAqKDIrKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9t KTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvOwogICAgICAgICAgICAgICAgY2Fz ZSAxNjoKICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nICopdG8gPSAqKGNv bnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tOwogICAgICAgICAgICAgICAgICAgICAgICAqKDErKHVu c2lnbmVkIGxvbmcgKil0bykgPSAqKDErKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKICAg ICAgICAgICAgICAgICAgICAgICAgKigyKyh1bnNpZ25lZCBsb25nICopdG8pID0gKigyKyhjb25z dCB1bnNpZ25lZCBsb25nICopZnJvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICooMysodW5z aWduZWQgbG9uZyAqKXRvKSA9ICooMysoY29uc3QgdW5zaWduZWQgbG9uZyAqKWZyb20pOwogICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG87CiAgICAgICAgICAgICAgICBjYXNlIDIwOgog ICAgICAgICAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIGxvbmcgKil0byA9ICooY29uc3QgdW5z aWduZWQgbG9uZyAqKWZyb207CiAgICAgICAgICAgICAgICAgICAgICAgICooMSsodW5zaWduZWQg bG9uZyAqKXRvKSA9ICooMSsoY29uc3QgdW5zaWduZWQgbG9uZyAqKWZyb20pOwogICAgICAgICAg ICAgICAgICAgICAgICAqKDIrKHVuc2lnbmVkIGxvbmcgKil0bykgPSAqKDIrKGNvbnN0IHVuc2ln bmVkIGxvbmcgKilmcm9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgKigzKyh1bnNpZ25lZCBs b25nICopdG8pID0gKigzKyhjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbSk7CiAgICAgICAgICAg ICAgICAgICAgICAgICooNCsodW5zaWduZWQgbG9uZyAqKXRvKSA9ICooNCsoY29uc3QgdW5zaWdu ZWQgbG9uZyAqKWZyb20pOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG87CiAgICAg ICAgfQoKCgoKCgoKewogICAgICAgIGludCBkMCwgZDEsIGQyOwogICAgICAgIHN3aXRjaCAobiAl IDQpIHsKICAgICAgICAgICAgICAgIGNhc2UgMDogX19hc21fXyBfX3ZvbGF0aWxlX18oICJyZXAg OyBtb3ZzbCIgIiIgOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZTIiAoZDIpIDogIjAiIChu LzQpLCIxIiAoKGxvbmcpIHRvKSwiMiIgKChsb25nKSBmcm9tKSA6ICJtZW1vcnkiKTs7IHJldHVy biB0bzsKICAgICAgICAgICAgICAgIGNhc2UgMTogX19hc21fXyBfX3ZvbGF0aWxlX18oICJyZXAg OyBtb3ZzbCIgIlxuXHRtb3ZzYiIgOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpLCAiPSZTIiAoZDIp IDogIjAiIChuLzQpLCIxIiAoKGxvbmcpIHRvKSwiMiIgKChsb25nKSBmcm9tKSA6ICJtZW1vcnki KTs7IHJldHVybiB0bzsKICAgICAgICAgICAgICAgIGNhc2UgMjogX19hc21fXyBfX3ZvbGF0aWxl X18oICJyZXAgOyBtb3ZzbCIgIlxuXHRtb3ZzdyIgOiAiPSZjIiAoZDApLCAiPSZEIiAoZDEpLCAi PSZTIiAoZDIpIDogIjAiIChuLzQpLCIxIiAoKGxvbmcpIHRvKSwiMiIgKChsb25nKSBmcm9tKSA6 ICJtZW1vcnkiKTs7IHJldHVybiB0bzsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6IF9fYXNtX18g X192b2xhdGlsZV9fKCAicmVwIDsgbW92c2wiICJcblx0bW92c3dcblx0bW92c2IiIDogIj0mYyIg KGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKSA6ICIwIiAobi80KSwiMSIgKChsb25nKSB0byks IjIiICgobG9uZykgZnJvbSkgOiAibWVtb3J5Iik7OyByZXR1cm4gdG87CiAgICAgICAgfQp9CgoK fQojIDMzNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3N0cmluZy5oIgpleHRl cm4gdm9pZCBfX3N0cnVjdF9jcHlfYnVnICh2b2lkKTsKIyAzNDUgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2FzbS9zdHJpbmcuaCIKc3RhdGljIGlubGluZSB2b2lkICogbWVtbW92ZSh2 b2lkICogZGVzdCxjb25zdCB2b2lkICogc3JjLCBzaXplX3QgbikKewppbnQgZDAsIGQxLCBkMjsK aWYgKGRlc3Q8c3JjKQpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAicmVwXG5cdCIKICAg ICAgICAibW92c2IiCiAgICAgICAgOiAiPSZjIiAoZDApLCAiPSZTIiAoZDEpLCAiPSZEIiAoZDIp CiAgICAgICAgOiIwIiAobiksIjEiIChzcmMpLCIyIiAoZGVzdCkKICAgICAgICA6ICJtZW1vcnki KTsKZWxzZQpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAic3RkXG5cdCIKICAgICAgICAi cmVwXG5cdCIKICAgICAgICAibW92c2Jcblx0IgogICAgICAgICJjbGQiCiAgICAgICAgOiAiPSZj IiAoZDApLCAiPSZTIiAoZDEpLCAiPSZEIiAoZDIpCiAgICAgICAgOiIwIiAobiksCiAgICAgICAg ICIxIiAobi0xKyhjb25zdCBjaGFyICopc3JjKSwKICAgICAgICAgIjIiIChuLTErKGNoYXIgKilk ZXN0KQogICAgICAgIDoibWVtb3J5Iik7CnJldHVybiBkZXN0Owp9CgoKCgpzdGF0aWMgaW5saW5l IHZvaWQgKiBtZW1jaHIoY29uc3Qgdm9pZCAqIGNzLGludCBjLHNpemVfdCBjb3VudCkKewppbnQg ZDA7CnJlZ2lzdGVyIHZvaWQgKiBfX3JlczsKaWYgKCFjb3VudCkKICAgICAgICByZXR1cm4gKCh2 b2lkICopMCk7Cl9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICJyZXBuZVxuXHQiCiAgICAg ICAgInNjYXNiXG5cdCIKICAgICAgICAiamUgMWZcblx0IgogICAgICAgICJtb3ZsICQxLCUwXG4i CiAgICAgICAgIjE6XHRkZWNsICUwIgogICAgICAgIDoiPUQiIChfX3JlcyksICI9JmMiIChkMCkg OiAiYSIgKGMpLCIwIiAoY3MpLCIxIiAoY291bnQpKTsKcmV0dXJuIF9fcmVzOwp9CgpzdGF0aWMg aW5saW5lIHZvaWQgKiBfX21lbXNldF9nZW5lcmljKHZvaWQgKiBzLCBjaGFyIGMsc2l6ZV90IGNv dW50KQp7CmludCBkMCwgZDE7Cl9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICJyZXBcblx0 IgogICAgICAgICJzdG9zYiIKICAgICAgICA6ICI9JmMiIChkMCksICI9JkQiIChkMSkKICAgICAg ICA6ImEiIChjKSwiMSIgKHMpLCIwIiAoY291bnQpCiAgICAgICAgOiJtZW1vcnkiKTsKcmV0dXJu IHM7Cn0KIyA0MDggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zdHJpbmcuaCIK c3RhdGljIGlubGluZSB2b2lkICogX19jb25zdGFudF9jX21lbXNldCh2b2lkICogcywgdW5zaWdu ZWQgbG9uZyBjLCBzaXplX3QgY291bnQpCnsKaW50IGQwLCBkMTsKX19hc21fXyBfX3ZvbGF0aWxl X18oCiAgICAgICAgInJlcCA7IHN0b3NsXG5cdCIKICAgICAgICAidGVzdGIgJDIsJWIzXG5cdCIK ICAgICAgICAiamUgMWZcblx0IgogICAgICAgICJzdG9zd1xuIgogICAgICAgICIxOlx0dGVzdGIg JDEsJWIzXG5cdCIKICAgICAgICAiamUgMmZcblx0IgogICAgICAgICJzdG9zYlxuIgogICAgICAg ICIyOiIKICAgICAgICA6ICI9JmMiIChkMCksICI9JkQiIChkMSkKICAgICAgICA6ImEiIChjKSwg InEiIChjb3VudCksICIwIiAoY291bnQvNCksICIxIiAoKGxvbmcpIHMpCiAgICAgICAgOiJtZW1v cnkiKTsKcmV0dXJuIChzKTsKfQoKCgpzdGF0aWMgaW5saW5lIHNpemVfdCBzdHJubGVuKGNvbnN0 IGNoYXIgKiBzLCBzaXplX3QgY291bnQpCnsKaW50IGQwOwpyZWdpc3RlciBpbnQgX19yZXM7Cl9f YXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICJtb3ZsICUyLCUwXG5cdCIKICAgICAgICAiam1w IDJmXG4iCiAgICAgICAgIjE6XHRjbXBiICQwLCglMClcblx0IgogICAgICAgICJqZSAzZlxuXHQi CiAgICAgICAgImluY2wgJTBcbiIKICAgICAgICAiMjpcdGRlY2wgJTFcblx0IgogICAgICAgICJj bXBsICQtMSwlMVxuXHQiCiAgICAgICAgImpuZSAxYlxuIgogICAgICAgICIzOlx0c3VibCAlMiwl MCIKICAgICAgICA6Ij1hIiAoX19yZXMpLCAiPSZkIiAoZDApCiAgICAgICAgOiJjIiAocyksIjEi IChjb3VudCkpOwpyZXR1cm4gX19yZXM7Cn0KCgoKCmV4dGVybiBjaGFyICpzdHJzdHIoY29uc3Qg Y2hhciAqY3MsIGNvbnN0IGNoYXIgKmN0KTsKCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgKiBfX2Nv bnN0YW50X2NfYW5kX2NvdW50X21lbXNldCh2b2lkICogcywgdW5zaWduZWQgbG9uZyBwYXR0ZXJu LCBzaXplX3QgY291bnQpCnsKICAgICAgICBzd2l0Y2ggKGNvdW50KSB7CiAgICAgICAgICAgICAg ICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzOwogICAgICAgICAgICAg ICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIGNoYXIgKilzID0g cGF0dGVybjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7CiAgICAgICAgICAgICAg ICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAgICAgICoodW5zaWduZWQgc2hvcnQgKilzID0g cGF0dGVybjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7CiAgICAgICAgICAgICAg ICBjYXNlIDM6CiAgICAgICAgICAgICAgICAgICAgICAgICoodW5zaWduZWQgc2hvcnQgKilzID0g cGF0dGVybjsKICAgICAgICAgICAgICAgICAgICAgICAgKigyKyh1bnNpZ25lZCBjaGFyICopcykg PSBwYXR0ZXJuOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gczsKICAgICAgICAgICAg ICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nICopcyA9 IHBhdHRlcm47CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzOwogICAgICAgIH0KCgoK CgoKCnsKICAgICAgICBpbnQgZDAsIGQxOwogICAgICAgIHN3aXRjaCAoY291bnQgJSA0KSB7CiAg ICAgICAgICAgICAgICBjYXNlIDA6IF9fYXNtX18gX192b2xhdGlsZV9fKCAicmVwIDsgc3Rvc2wi ICIiIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSA6ICJhIiAocGF0dGVybiksIjAiIChjb3VudC80 KSwiMSIgKChsb25nKSBzKSA6ICJtZW1vcnkiKTsgcmV0dXJuIHM7CiAgICAgICAgICAgICAgICBj YXNlIDE6IF9fYXNtX18gX192b2xhdGlsZV9fKCAicmVwIDsgc3Rvc2wiICJcblx0c3Rvc2IiIDog Ij0mYyIgKGQwKSwgIj0mRCIgKGQxKSA6ICJhIiAocGF0dGVybiksIjAiIChjb3VudC80KSwiMSIg KChsb25nKSBzKSA6ICJtZW1vcnkiKTsgcmV0dXJuIHM7CiAgICAgICAgICAgICAgICBjYXNlIDI6 IF9fYXNtX18gX192b2xhdGlsZV9fKCAicmVwIDsgc3Rvc2wiICJcblx0c3Rvc3ciIDogIj0mYyIg KGQwKSwgIj0mRCIgKGQxKSA6ICJhIiAocGF0dGVybiksIjAiIChjb3VudC80KSwiMSIgKChsb25n KSBzKSA6ICJtZW1vcnkiKTsgcmV0dXJuIHM7CiAgICAgICAgICAgICAgICBkZWZhdWx0OiBfX2Fz bV9fIF9fdm9sYXRpbGVfXyggInJlcCA7IHN0b3NsIiAiXG5cdHN0b3N3XG5cdHN0b3NiIiA6ICI9 JmMiIChkMCksICI9JkQiIChkMSkgOiAiYSIgKHBhdHRlcm4pLCIwIiAoY291bnQvNCksIjEiICgo bG9uZykgcykgOiAibWVtb3J5Iik7IHJldHVybiBzOwogICAgICAgIH0KfQoKCn0KIyA1MTUgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zdHJpbmcuaCIKc3RhdGljIGlubGluZSB2 b2lkICogbWVtc2Nhbih2b2lkICogYWRkciwgaW50IGMsIHNpemVfdCBzaXplKQp7CiAgICAgICAg aWYgKCFzaXplKQogICAgICAgICAgICAgICAgcmV0dXJuIGFkZHI7CiAgICAgICAgX19hc21fXygi cmVwbno7IHNjYXNiXG5cdCIKICAgICAgICAgICAgICAgICJqbnogMWZcblx0IgogICAgICAgICAg ICAgICAgImRlYyAlJWVkaVxuIgogICAgICAgICAgICAgICAgIjE6IgogICAgICAgICAgICAgICAg OiAiPUQiIChhZGRyKSwgIj1jIiAoc2l6ZSkKICAgICAgICAgICAgICAgIDogIjAiIChhZGRyKSwg IjEiIChzaXplKSwgImEiIChjKSk7CiAgICAgICAgcmV0dXJuIGFkZHI7Cn0KIyAyNiAiL3Vzci9z cmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc3RyaW5nLmgiIDIKIyA0NiAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc3RyaW5nLmgiCmV4dGVybiBpbnQgc3RybmljbXAo Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIF9fa2VybmVsX3NpemVfdCk7CiMgNzcgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIgpleHRlcm4gaW50IF9fYnVp bHRpbl9tZW1jbXAoY29uc3Qgdm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOwoj IDI0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9hdG9taWMuaCIgMQojIDI2ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvYXNtL2JpdG9wcy5oIiAxCgoKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgOSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2luY2x1ZGUvYXNtL2JpdG9wcy5oIiAyCiMgMzYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9p bmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfYml0KGludCBu ciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygg IiIKICAgICAgICAgICAgICAgICJidHNsICUxLCUwIgogICAgICAgICAgICAgICAgOiI9bSIgKCgq KHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAgICAgICAgICAgICAgICA6IklyIiAobnIpKTsKfQoj IDUzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRpYyBf X2lubGluZV9fIHZvaWQgX19zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsK ICAgICAgICBfX2FzbV9fKAogICAgICAgICAgICAgICAgImJ0c2wgJTEsJTAiCiAgICAgICAgICAg ICAgICA6Ij1tIiAoKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKSkKICAgICAgICAgICAgICAgIDoi SXIiIChucikpOwp9CiMgNzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9iaXRv cHMuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBjbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2 b2lkICogYWRkcikKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAiIgogICAgICAgICAg ICAgICAgImJ0cmwgJTEsJTAiCiAgICAgICAgICAgICAgICA6Ij1tIiAoKCoodm9sYXRpbGUgbG9u ZyAqKSBhZGRyKSkKICAgICAgICAgICAgICAgIDoiSXIiIChucikpOwp9CiMgOTAgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18gdm9p ZCBfX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewogICAgICAgIF9f YXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgImJ0Y2wgJTEsJTAiCiAgICAgICAg ICAgICAgICA6Ij1tIiAoKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKSkKICAgICAgICAgICAgICAg IDoiSXIiIChucikpOwp9CiMgMTA3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20v Yml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0 aWxlIHZvaWQgKiBhZGRyKQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICIiCiAgICAg ICAgICAgICAgICAiYnRjbCAlMSwlMCIKICAgICAgICAgICAgICAgIDoiPW0iICgoKih2b2xhdGls ZSBsb25nICopIGFkZHIpKQogICAgICAgICAgICAgICAgOiJJciIgKG5yKSk7Cn0KIyAxMjMgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5l X18gaW50IHRlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewog ICAgICAgIGludCBvbGRiaXQ7CgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAiIgogICAg ICAgICAgICAgICAgImJ0c2wgJTIsJTFcblx0c2JibCAlMCwlMCIKICAgICAgICAgICAgICAgIDoi PXIiIChvbGRiaXQpLCI9bSIgKCgqKHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAgICAgICAgICAg ICAgICA6IklyIiAobnIpIDogIm1lbW9yeSIpOwogICAgICAgIHJldHVybiBvbGRiaXQ7Cn0KIyAx NDMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9f aW5saW5lX18gaW50IF9fdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBh ZGRyKQp7CiAgICAgICAgaW50IG9sZGJpdDsKCiAgICAgICAgX19hc21fXygKICAgICAgICAgICAg ICAgICJidHNsICUyLCUxXG5cdHNiYmwgJTAsJTAiCiAgICAgICAgICAgICAgICA6Ij1yIiAob2xk Yml0KSwiPW0iICgoKih2b2xhdGlsZSBsb25nICopIGFkZHIpKQogICAgICAgICAgICAgICAgOiJJ ciIgKG5yKSk7CiAgICAgICAgcmV0dXJuIG9sZGJpdDsKfQojIDE2MiAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvYXNtL2JpdG9wcy5oIgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9h bmRfY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKICAgICAgICBpbnQg b2xkYml0OwoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIiIKICAgICAgICAgICAgICAg ICJidHJsICUyLCUxXG5cdHNiYmwgJTAsJTAiCiAgICAgICAgICAgICAgICA6Ij1yIiAob2xkYml0 KSwiPW0iICgoKih2b2xhdGlsZSBsb25nICopIGFkZHIpKQogICAgICAgICAgICAgICAgOiJJciIg KG5yKSA6ICJtZW1vcnkiKTsKICAgICAgICByZXR1cm4gb2xkYml0Owp9CiMgMTgyICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9fIGlu dCBfX3Rlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CiAg ICAgICAgaW50IG9sZGJpdDsKCiAgICAgICAgX19hc21fXygKICAgICAgICAgICAgICAgICJidHJs ICUyLCUxXG5cdHNiYmwgJTAsJTAiCiAgICAgICAgICAgICAgICA6Ij1yIiAob2xkYml0KSwiPW0i ICgoKih2b2xhdGlsZSBsb25nICopIGFkZHIpKQogICAgICAgICAgICAgICAgOiJJciIgKG5yKSk7 CiAgICAgICAgcmV0dXJuIG9sZGJpdDsKfQoKCnN0YXRpYyBfX2lubGluZV9fIGludCBfX3Rlc3Rf YW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewogICAgICAgIGlu dCBvbGRiaXQ7CgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAg ImJ0Y2wgJTIsJTFcblx0c2JibCAlMCwlMCIKICAgICAgICAgICAgICAgIDoiPXIiIChvbGRiaXQp LCI9bSIgKCgqKHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAgICAgICAgICAgICAgICA6IklyIiAo bnIpIDogIm1lbW9yeSIpOwogICAgICAgIHJldHVybiBvbGRiaXQ7Cn0KIyAyMTMgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18gaW50 IHRlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewogICAg ICAgIGludCBvbGRiaXQ7CgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAiIgogICAgICAg ICAgICAgICAgImJ0Y2wgJTIsJTFcblx0c2JibCAlMCwlMCIKICAgICAgICAgICAgICAgIDoiPXIi IChvbGRiaXQpLCI9bSIgKCgqKHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAgICAgICAgICAgICAg ICA6IklyIiAobnIpIDogIm1lbW9yeSIpOwogICAgICAgIHJldHVybiBvbGRiaXQ7Cn0KIyAyMzMg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9faW5s aW5lX18gaW50IGNvbnN0YW50X3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAq IGFkZHIpCnsKICAgICAgICByZXR1cm4gKCgxVUwgPDwgKG5yICYgMzEpKSAmICgoKGNvbnN0IHZv bGF0aWxlIHVuc2lnbmVkIGludCAqKSBhZGRyKVtuciA+PiA1XSkpICE9IDA7Cn0KCnN0YXRpYyBf X2lubGluZV9fIGludCB2YXJpYWJsZV90ZXN0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBh ZGRyKQp7CiAgICAgICAgaW50IG9sZGJpdDsKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18o CiAgICAgICAgICAgICAgICAiYnRsICUyLCUxXG5cdHNiYmwgJTAsJTAiCiAgICAgICAgICAgICAg ICA6Ij1yIiAob2xkYml0KQogICAgICAgICAgICAgICAgOiJtIiAoKCoodm9sYXRpbGUgbG9uZyAq KSBhZGRyKSksIklyIiAobnIpKTsKICAgICAgICByZXR1cm4gb2xkYml0Owp9CiMgMjYyICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9f IGludCBmaW5kX2ZpcnN0X3plcm9fYml0KHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBzaXplKQp7CiAg ICAgICAgaW50IGQwLCBkMSwgZDI7CiAgICAgICAgaW50IHJlczsKCiAgICAgICAgaWYgKCFzaXpl KQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9f KAogICAgICAgICAgICAgICAgIm1vdmwgJC0xLCUlZWF4XG5cdCIKICAgICAgICAgICAgICAgICJ4 b3JsICUlZWR4LCUlZWR4XG5cdCIKICAgICAgICAgICAgICAgICJyZXBlOyBzY2FzbFxuXHQiCiAg ICAgICAgICAgICAgICAiamUgMWZcblx0IgogICAgICAgICAgICAgICAgInhvcmwgLTQoJSVlZGkp LCUlZWF4XG5cdCIKICAgICAgICAgICAgICAgICJzdWJsICQ0LCUlZWRpXG5cdCIKICAgICAgICAg ICAgICAgICJic2ZsICUlZWF4LCUlZWR4XG4iCiAgICAgICAgICAgICAgICAiMTpcdHN1YmwgJSVl YngsJSVlZGlcblx0IgogICAgICAgICAgICAgICAgInNobGwgJDMsJSVlZGlcblx0IgogICAgICAg ICAgICAgICAgImFkZGwgJSVlZGksJSVlZHgiCiAgICAgICAgICAgICAgICA6Ij1kIiAocmVzKSwg Ij0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mYSIgKGQyKQogICAgICAgICAgICAgICAgOiIxIiAo KHNpemUgKyAzMSkgPj4gNSksICIyIiAoYWRkciksICJiIiAoYWRkcikpOwogICAgICAgIHJldHVy biByZXM7Cn0KCgoKCgoKCnN0YXRpYyBfX2lubGluZV9fIGludCBmaW5kX25leHRfemVyb19iaXQg KHZvaWQgKiBhZGRyLCBpbnQgc2l6ZSwgaW50IG9mZnNldCkKewogICAgICAgIHVuc2lnbmVkIGxv bmcgKiBwID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG9mZnNldCA+PiA1KTsKICAgICAg ICBpbnQgc2V0ID0gMCwgYml0ID0gb2Zmc2V0ICYgMzEsIHJlczsKCiAgICAgICAgaWYgKGJpdCkg ewoKCgogICAgICAgICAgICAgICAgX19hc21fXygiYnNmbCAlMSwlMFxuXHQiCiAgICAgICAgICAg ICAgICAgICAgICAgICJqbmUgMWZcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92bCAk MzIsICUwXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICIxOiIKICAgICAgICAgICAgICAgICAg ICAgICAgOiAiPXIiIChzZXQpCiAgICAgICAgICAgICAgICAgICAgICAgIDogInIiICh+KCpwID4+ IGJpdCkpKTsKICAgICAgICAgICAgICAgIGlmIChzZXQgPCAoMzIgLSBiaXQpKQogICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gc2V0ICsgb2Zmc2V0OwogICAgICAgICAgICAgICAgc2V0ID0g MzIgLSBiaXQ7CiAgICAgICAgICAgICAgICBwKys7CiAgICAgICAgfQoKCgogICAgICAgIHJlcyA9 IGZpbmRfZmlyc3RfemVyb19iaXQgKHAsIHNpemUgLSAzMiAqIChwIC0gKHVuc2lnbmVkIGxvbmcg KikgYWRkcikpOwogICAgICAgIHJldHVybiAob2Zmc2V0ICsgc2V0ICsgcmVzKTsKfQoKCgoKCgoK c3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBmZnoodW5zaWduZWQgbG9uZyB3b3JkKQp7 CiAgICAgICAgX19hc21fXygiYnNmbCAlMSwlMCIKICAgICAgICAgICAgICAgIDoiPXIiICh3b3Jk KQogICAgICAgICAgICAgICAgOiJyIiAofndvcmQpKTsKICAgICAgICByZXR1cm4gd29yZDsKfQoj IDM0MyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2JpdG9wcy5oIgpzdGF0aWMg X19pbmxpbmVfXyBpbnQgZmZzKGludCB4KQp7CiAgICAgICAgaW50IHI7CgogICAgICAgIF9fYXNt X18oImJzZmwgJTEsJTBcblx0IgogICAgICAgICAgICAgICAgImpueiAxZlxuXHQiCiAgICAgICAg ICAgICAgICAibW92bCAkLTEsJTBcbiIKICAgICAgICAgICAgICAgICIxOiIgOiAiPXIiIChyKSA6 ICJnIiAoeCkpOwogICAgICAgIHJldHVybiByKzE7Cn0KIyAyNyAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2luY2x1ZGUvbGludXgvZnMuaCIgMgoKc3RydWN0IHBvbGxfdGFibGVfc3RydWN0OwojIDUw ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIgpzdHJ1Y3QgZmlsZXNf c3RhdF9zdHJ1Y3QgewogICAgICAgIGludCBucl9maWxlczsKICAgICAgICBpbnQgbnJfZnJlZV9m aWxlczsKICAgICAgICBpbnQgbWF4X2ZpbGVzOwp9OwpleHRlcm4gc3RydWN0IGZpbGVzX3N0YXRf c3RydWN0IGZpbGVzX3N0YXQ7CgpzdHJ1Y3QgaW5vZGVzX3N0YXRfdCB7CiAgICAgICAgaW50IG5y X2lub2RlczsKICAgICAgICBpbnQgbnJfdW51c2VkOwogICAgICAgIGludCBkdW1teVs1XTsKfTsK ZXh0ZXJuIHN0cnVjdCBpbm9kZXNfc3RhdF90IGlub2Rlc19zdGF0OwoKZXh0ZXJuIGludCBsZWFz ZXNfZW5hYmxlLCBkaXJfbm90aWZ5X2VuYWJsZSwgbGVhc2VfYnJlYWtfdGltZTsKIyAxOTggIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvYXNtL3NlbWFwaG9yZS5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvbGlua2FnZS5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvYXNtL3NlbWFwaG9yZS5oIiAyCiMgMzkgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2FzbS9zZW1hcGhvcmUuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9hc20vc3lzdGVtLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9saW51eC9jb25maWcuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2FzbS9zeXN0ZW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4 L2tlcm5lbC5oIiAxCiMgNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3N5c3Rl bS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvaW5pdC5oIiAx CgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEK IyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9pbml0LmgiIDIKIyA0OCAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvaW5pdC5oIgp0eXBlZGVmIGludCAo KmluaXRjYWxsX3QpKHZvaWQpOwp0eXBlZGVmIHZvaWQgKCpleGl0Y2FsbF90KSh2b2lkKTsKCmV4 dGVybiBpbml0Y2FsbF90IF9faW5pdGNhbGxfc3RhcnQsIF9faW5pdGNhbGxfZW5kOwojIDYxICIv dXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9pbml0LmgiCnN0cnVjdCBrZXJuZWxf cGFyYW0gewogICAgICAgIGNvbnN0IGNoYXIgKnN0cjsKICAgICAgICBpbnQgKCpzZXR1cF9mdW5j KShjaGFyICopOwp9OwoKZXh0ZXJuIHN0cnVjdCBrZXJuZWxfcGFyYW0gX19zZXR1cF9zdGFydCwg X19zZXR1cF9lbmQ7CiMgNyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3N5c3Rl bS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3NlZ21lbnQuaCIg MQojIDggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oIiAxCiMgMTEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oIgpzdGF0aWMgaW5saW5l IGludCBnZW5lcmljX2ZmcyhpbnQgeCkKewogICAgICAgIGludCByID0gMTsKCiAgICAgICAgaWYg KCF4KQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgaWYgKCEoeCAmIDB4ZmZmZikp IHsKICAgICAgICAgICAgICAgIHggPj49IDE2OwogICAgICAgICAgICAgICAgciArPSAxNjsKICAg ICAgICB9CiAgICAgICAgaWYgKCEoeCAmIDB4ZmYpKSB7CiAgICAgICAgICAgICAgICB4ID4+PSA4 OwogICAgICAgICAgICAgICAgciArPSA4OwogICAgICAgIH0KICAgICAgICBpZiAoISh4ICYgMHhm KSkgewogICAgICAgICAgICAgICAgeCA+Pj0gNDsKICAgICAgICAgICAgICAgIHIgKz0gNDsKICAg ICAgICB9CiAgICAgICAgaWYgKCEoeCAmIDMpKSB7CiAgICAgICAgICAgICAgICB4ID4+PSAyOwog ICAgICAgICAgICAgICAgciArPSAyOwogICAgICAgIH0KICAgICAgICBpZiAoISh4ICYgMSkpIHsK ICAgICAgICAgICAgICAgIHggPj49IDE7CiAgICAgICAgICAgICAgICByICs9IDE7CiAgICAgICAg fQogICAgICAgIHJldHVybiByOwp9CgoKCgoKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdl bmVyaWNfaHdlaWdodDMyKHVuc2lnbmVkIGludCB3KQp7CiAgICAgICAgdW5zaWduZWQgaW50IHJl cyA9ICh3ICYgMHg1NTU1NTU1NSkgKyAoKHcgPj4gMSkgJiAweDU1NTU1NTU1KTsKICAgICAgICBy ZXMgPSAocmVzICYgMHgzMzMzMzMzMykgKyAoKHJlcyA+PiAyKSAmIDB4MzMzMzMzMzMpOwogICAg ICAgIHJlcyA9IChyZXMgJiAweDBGMEYwRjBGKSArICgocmVzID4+IDQpICYgMHgwRjBGMEYwRik7 CiAgICAgICAgcmVzID0gKHJlcyAmIDB4MDBGRjAwRkYpICsgKChyZXMgPj4gOCkgJiAweDAwRkYw MEZGKTsKICAgICAgICByZXR1cm4gKHJlcyAmIDB4MDAwMEZGRkYpICsgKChyZXMgPj4gMTYpICYg MHgwMDAwRkZGRik7Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdlbmVyaWNfaHdlaWdo dDE2KHVuc2lnbmVkIGludCB3KQp7CiAgICAgICAgdW5zaWduZWQgaW50IHJlcyA9ICh3ICYgMHg1 NTU1KSArICgodyA+PiAxKSAmIDB4NTU1NSk7CiAgICAgICAgcmVzID0gKHJlcyAmIDB4MzMzMykg KyAoKHJlcyA+PiAyKSAmIDB4MzMzMyk7CiAgICAgICAgcmVzID0gKHJlcyAmIDB4MEYwRikgKyAo KHJlcyA+PiA0KSAmIDB4MEYwRik7CiAgICAgICAgcmV0dXJuIChyZXMgJiAweDAwRkYpICsgKChy ZXMgPj4gOCkgJiAweDAwRkYpOwp9CgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZW5lcmlj X2h3ZWlnaHQ4KHVuc2lnbmVkIGludCB3KQp7CiAgICAgICAgdW5zaWduZWQgaW50IHJlcyA9ICh3 ICYgMHg1NSkgKyAoKHcgPj4gMSkgJiAweDU1KTsKICAgICAgICByZXMgPSAocmVzICYgMHgzMykg KyAoKHJlcyA+PiAyKSAmIDB4MzMpOwogICAgICAgIHJldHVybiAocmVzICYgMHgwRikgKyAoKHJl cyA+PiA0KSAmIDB4MEYpOwp9CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2Fz bS9iaXRvcHMuaCIgMQojIDcwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9i aXRvcHMuaCIgMgojIDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zeXN0ZW0u aCIgMgoKCgpzdHJ1Y3QgdGFza19zdHJ1Y3Q7CmV4dGVybiB2b2lkIF9fc3dpdGNoX3RvKHN0cnVj dCB0YXNrX3N0cnVjdCAqcHJldiwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KSBfX2F0dHJpYnV0 ZV9fKChyZWdwYXJtKDMpKSk7CiMgNjQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2Fz bS9zeXN0ZW0uaCIKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9nZXRfYmFzZShjaGFyICog YWRkcikKewogICAgICAgIHVuc2lnbmVkIGxvbmcgX19iYXNlOwogICAgICAgIF9fYXNtX18oIm1v dmIgJTMsJSVkaFxuXHQiCiAgICAgICAgICAgICAgICAibW92YiAlMiwlJWRsXG5cdCIKICAgICAg ICAgICAgICAgICJzaGxsICQxNiwlJWVkeFxuXHQiCiAgICAgICAgICAgICAgICAibW92dyAlMSwl JWR4IgogICAgICAgICAgICAgICAgOiI9JmQiIChfX2Jhc2UpCiAgICAgICAgICAgICAgICA6Im0i ICgqKChhZGRyKSsyKSksCiAgICAgICAgICAgICAgICAgIm0iICgqKChhZGRyKSs0KSksCiAgICAg ICAgICAgICAgICAgIm0iICgqKChhZGRyKSs3KSkpOwogICAgICAgIHJldHVybiBfX2Jhc2U7Cn0K IyAxMzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIKc3RhdGlj IGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9saW1pdCh1bnNpZ25lZCBsb25nIHNlZ21lbnQpCnsK ICAgICAgICB1bnNpZ25lZCBsb25nIF9fbGltaXQ7CiAgICAgICAgX19hc21fXygibHNsbCAlMSwl MCIKICAgICAgICAgICAgICAgIDoiPXIiIChfX2xpbWl0KToiciIgKHNlZ21lbnQpKTsKICAgICAg ICByZXR1cm4gX19saW1pdCsxOwp9CgoKCgoKCgpzdHJ1Y3QgX194Y2hnX2R1bW15IHsgdW5zaWdu ZWQgbG9uZyBhWzEwMF07IH07CiMgMTU4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9h c20vc3lzdGVtLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF82NGJpdCAodW5zaWduZWQgbG9u ZyBsb25nICogcHRyLAogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxvdywgdW5zaWduZWQg aW50IGhpZ2gpCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAg ICAiXG4xOlx0IgogICAgICAgICAgICAgICAgIm1vdmwgKCUwKSwgJSVlYXhcblx0IgogICAgICAg ICAgICAgICAgIm1vdmwgNCglMCksICUlZWR4XG5cdCIKICAgICAgICAgICAgICAgICJjbXB4Y2hn OGIgKCUwKVxuXHQiCiAgICAgICAgICAgICAgICAiam56IDFiIgogICAgICAgICAgICAgICAgOgog ICAgICAgICAgICAgICAgOiAiRCIocHRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgImIiKGxv dyksCiAgICAgICAgICAgICAgICAgICAgICAgICJjIihoaWdoKQogICAgICAgICAgICAgICAgOiAi YXgiLCJkeCIsIm1lbW9yeSIpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfNjRiaXRfY29u c3RhbnQgKHVuc2lnbmVkIGxvbmcgbG9uZyAqcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlKQp7CiAgICAg ICAgX19zZXRfNjRiaXQocHRyLCh1bnNpZ25lZCBpbnQpKHZhbHVlKSwgKHVuc2lnbmVkIGludCko KHZhbHVlKT4+MzJVTEwpKTsKfQoKCgpzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfNjRiaXRfdmFy ICh1bnNpZ25lZCBsb25nIGxvbmcgKnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGxvbmcgbG9uZyB2YWx1ZSkKewogICAgICAgIF9fc2V0XzY0Yml0KHB0ciwqKCgodW5zaWdu ZWQgaW50KikmKHZhbHVlKSkrMCksICooKCh1bnNpZ25lZCBpbnQqKSYodmFsdWUpKSsxKSk7Cn0K IyAyMDMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIKc3RhdGlj IGlubGluZSB1bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZv aWQgKiBwdHIsIGludCBzaXplKQp7CiAgICAgICAgc3dpdGNoIChzaXplKSB7CiAgICAgICAgICAg ICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9f KCJ4Y2hnYiAlYjAsJTEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiI9cSIgKHgp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiJtIiAoKigoc3RydWN0IF9feGNoZ19k dW1teSAqKShwdHIpKSksICIwIiAoeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 Im1lbW9yeSIpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg IGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInhj aGd3ICV3MCwlMSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Ij1yIiAoeCkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Im0iICgqKChzdHJ1Y3QgX194Y2hnX2R1bW15 ICopKHB0cikpKSwgIjAiICh4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoibWVt b3J5Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz ZSA0OgogICAgICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZ2wg JTAsJTEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiI9ciIgKHgpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiJtIiAoKigoc3RydWN0IF9feGNoZ19kdW1teSAqKShw dHIpKSksICIwIiAoeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Im1lbW9yeSIp OwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmV0dXJu IHg7Cn0KIyAyMzcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIK c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZyh2b2xhdGlsZSB2b2lkICpwdHIs IHVuc2lnbmVkIGxvbmcgb2xkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGxvbmcgbmV3LCBpbnQgc2l6ZSkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgcHJl djsKICAgICAgICBzd2l0Y2ggKHNpemUpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAg ICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIiAiY21weGNoZ2IgJWIxLCUyIgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWEiKHByZXYpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6ICJxIihuZXcpLCAibSIoKigoc3RydWN0IF9feGNoZ19kdW1teSAq KShwdHIpKSksICIwIihvbGQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 ICJtZW1vcnkiKTsKICAgICAgICAgICAgICAgIHJldHVybiBwcmV2OwogICAgICAgIGNhc2UgMjoK ICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIiICJjbXB4Y2hndyAldzEsJTIi CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YSIocHJldikKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogInEiKG5ldyksICJtIigqKChzdHJ1Y3Qg X194Y2hnX2R1bW15ICopKHB0cikpKSwgIjAiKG9sZCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7CiAg ICAgICAgY2FzZSA0OgogICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiIgImNt cHhjaGdsICUxLCUyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWEi KHByZXYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJxIihuZXcpLCAi bSIoKigoc3RydWN0IF9feGNoZ19kdW1teSAqKShwdHIpKSksICIwIihvbGQpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICAgICAgICAgICAgICAgIHJl dHVybiBwcmV2OwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2xkOwp9CiMgMzUwICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vc3lzdGVtLmgiCnZvaWQgZGlzYWJsZV9obHQodm9p ZCk7CnZvaWQgZW5hYmxlX2hsdCh2b2lkKTsKCmludCBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9u X18gKCIudGV4dC5pbml0IikpKSBkbWlfc2Nhbl9tYWNoaW5lKHZvaWQpOwpleHRlcm4gdW5zaWdu ZWQgbG9uZyBkbWlfYnJva2VuOwpleHRlcm4gaW50IGlzX3NvbnlfdmFpb19sYXB0b3A7CiMgNDAg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zZW1hcGhvcmUuaCIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9hdG9taWMuaCIgMQojIDQxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC93YWl0LmgiIDEKIyA0MiAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvYXNtL3NlbWFwaG9yZS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2luY2x1ZGUvbGludXgvcndzZW0uaCIgMQojIDEwICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9saW51eC9yd3NlbS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2xpbnV4L2xpbmthZ2UuaCIgMQojIDExICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9s aW51eC9yd3NlbS5oIiAyCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9s aW51eC9jb25maWcuaCIgMQojIDE3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51 eC9yd3NlbS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdHlw ZXMuaCIgMQojIDE4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9yd3NlbS5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgva2VybmVsLmgiIDEK IyAxOSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvcndzZW0uaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIgMQojIDIwICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9yd3NlbS5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2F0b21pYy5oIiAxCiMgMjEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3J3c2VtLmgiIDIKCnN0cnVjdCByd19zZW1hcGhvcmU7CgoK CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9yd3NlbS5oIiAxCiMgNDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9yd3NlbS5oIgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2xpc3QuaCIgMQojIDQyICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9hc20vcndzZW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiIDEKIyA0MyAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvYXNtL3J3c2VtLmgiIDIKCnN0cnVjdCByd3NlbV93YWl0ZXI7CgpleHRlcm4gc3Ry dWN0IHJ3X3NlbWFwaG9yZSAqcndzZW1fZG93bl9yZWFkX2ZhaWxlZChzdHJ1Y3Qgcndfc2VtYXBo b3JlICpzZW0pIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHN0cnVjdCByd19z ZW1hcGhvcmUgKnJ3c2VtX2Rvd25fd3JpdGVfZmFpbGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNl bSkgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9y ZSAqcndzZW1fd2FrZShzdHJ1Y3Qgcndfc2VtYXBob3JlICopIF9fYXR0cmlidXRlX18oKHJlZ3Bh cm0oMykpKTsKCgoKCnN0cnVjdCByd19zZW1hcGhvcmUgewogICAgICAgIHNpZ25lZCBsb25nIGNv dW50OwoKCgoKCgogICAgICAgIHNwaW5sb2NrX3Qgd2FpdF9sb2NrOwogICAgICAgIHN0cnVjdCBs aXN0X2hlYWQgd2FpdF9saXN0OwoKCgp9OwojIDg0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9hc20vcndzZW0uaCIKc3RhdGljIGlubGluZSB2b2lkIGluaXRfcndzZW0oc3RydWN0IHJ3 X3NlbWFwaG9yZSAqc2VtKQp7CiAgICAgICAgc2VtLT5jb3VudCA9IDB4MDAwMDAwMDA7CiAgICAg ICAgZG8geyB9IHdoaWxlKDApOwogICAgICAgIGRvIHsgKCZzZW0tPndhaXRfbGlzdCktPm5leHQg PSAoJnNlbS0+d2FpdF9saXN0KTsgKCZzZW0tPndhaXRfbGlzdCktPnByZXYgPSAoJnNlbS0+d2Fp dF9saXN0KTsgfSB3aGlsZSAoMCk7CgoKCn0KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25f cmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRp bGVfXygKICAgICAgICAgICAgICAgICIjIGJlZ2lubmluZyBkb3duX3JlYWRcblx0IgoiIiAiICBp bmNsICAgICAgKCUlZWF4KVxuXHQiCiAgICAgICAgICAgICAgICAiICBqcyAgICAgICAgMmZcblx0 IgogICAgICAgICAgICAgICAgIjE6XG5cdCIKICAgICAgICAgICAgICAgICIuc2VjdGlvbiAudGV4 dC5sb2NrLFwiYXhcIlxuIgogICAgICAgICAgICAgICAgIjI6XG5cdCIKICAgICAgICAgICAgICAg ICIgIHB1c2hsICAgICAlJWVjeFxuXHQiCiAgICAgICAgICAgICAgICAiICBwdXNobCAgICAgJSVl ZHhcblx0IgogICAgICAgICAgICAgICAgIiAgY2FsbCAgICAgIHJ3c2VtX2Rvd25fcmVhZF9mYWls ZWRcblx0IgogICAgICAgICAgICAgICAgIiAgcG9wbCAgICAgICUlZWR4XG5cdCIKICAgICAgICAg ICAgICAgICIgIHBvcGwgICAgICAlJWVjeFxuXHQiCiAgICAgICAgICAgICAgICAiICBqbXAgICAg ICAgMWJcbiIKICAgICAgICAgICAgICAgICIucHJldmlvdXMiCiAgICAgICAgICAgICAgICAiIyBl bmRpbmcgZG93bl9yZWFkXG5cdCIKICAgICAgICAgICAgICAgIDogIittIihzZW0tPmNvdW50KQog ICAgICAgICAgICAgICAgOiAiYSIoc2VtKQogICAgICAgICAgICAgICAgOiAibWVtb3J5IiwgImNj Iik7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rvd25fd3JpdGUoc3RydWN0IHJ3X3NlbWFw aG9yZSAqc2VtKQp7CiAgICAgICAgaW50IHRtcDsKCiAgICAgICAgdG1wID0gKCgtMHgwMDAxMDAw MCkgKyAweDAwMDAwMDAxKTsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAg ICAgICAgICIjIGJlZ2lubmluZyBkb3duX3dyaXRlXG5cdCIKIiIgIiAgeGFkZCAgICAgICUwLCgl JWVheClcblx0IgogICAgICAgICAgICAgICAgIiAgdGVzdGwgICAgICUwLCUwXG5cdCIKICAgICAg ICAgICAgICAgICIgIGpueiAgICAgICAyZlxuXHQiCiAgICAgICAgICAgICAgICAiMTpcblx0Igog ICAgICAgICAgICAgICAgIi5zZWN0aW9uIC50ZXh0LmxvY2ssXCJheFwiXG4iCiAgICAgICAgICAg ICAgICAiMjpcblx0IgogICAgICAgICAgICAgICAgIiAgcHVzaGwgICAgICUlZWN4XG5cdCIKICAg ICAgICAgICAgICAgICIgIGNhbGwgICAgICByd3NlbV9kb3duX3dyaXRlX2ZhaWxlZFxuXHQiCiAg ICAgICAgICAgICAgICAiICBwb3BsICAgICAgJSVlY3hcblx0IgogICAgICAgICAgICAgICAgIiAg am1wICAgICAgIDFiXG4iCiAgICAgICAgICAgICAgICAiLnByZXZpb3VzXG4iCiAgICAgICAgICAg ICAgICAiIyBlbmRpbmcgZG93bl93cml0ZSIKICAgICAgICAgICAgICAgIDogIitkIih0bXApLCAi K20iKHNlbS0+Y291bnQpCiAgICAgICAgICAgICAgICA6ICJhIihzZW0pCiAgICAgICAgICAgICAg ICA6ICJtZW1vcnkiLCAiY2MiKTsKfQoKCgoKc3RhdGljIGlubGluZSB2b2lkIF9fdXBfcmVhZChz dHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKICAgICAgICBfX3MzMiB0bXAgPSAtMHgwMDAwMDAw MTsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgICAgICAgICIjIGJlZ2lu bmluZyBfX3VwX3JlYWRcblx0IgoiIiAiICB4YWRkICAgICAgJSVlZHgsKCUlZWF4KVxuXHQiCiAg ICAgICAgICAgICAgICAiICBqcyAgICAgICAgMmZcblx0IgogICAgICAgICAgICAgICAgIjE6XG5c dCIKICAgICAgICAgICAgICAgICIuc2VjdGlvbiAudGV4dC5sb2NrLFwiYXhcIlxuIgogICAgICAg ICAgICAgICAgIjI6XG5cdCIKICAgICAgICAgICAgICAgICIgIGRlY3cgICAgICAlJWR4XG5cdCIK ICAgICAgICAgICAgICAgICIgIGpueiAgICAgICAxYlxuXHQiCiAgICAgICAgICAgICAgICAiICBw dXNobCAgICAgJSVlY3hcblx0IgogICAgICAgICAgICAgICAgIiAgY2FsbCAgICAgIHJ3c2VtX3dh a2Vcblx0IgogICAgICAgICAgICAgICAgIiAgcG9wbCAgICAgICUlZWN4XG5cdCIKICAgICAgICAg ICAgICAgICIgIGptcCAgICAgICAxYlxuIgogICAgICAgICAgICAgICAgIi5wcmV2aW91c1xuIgog ICAgICAgICAgICAgICAgIiMgZW5kaW5nIF9fdXBfcmVhZFxuIgogICAgICAgICAgICAgICAgOiAi K20iKHNlbS0+Y291bnQpLCAiK2QiKHRtcCkKICAgICAgICAgICAgICAgIDogImEiKHNlbSkKICAg ICAgICAgICAgICAgIDogIm1lbW9yeSIsICJjYyIpOwp9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQg X191cF93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKICAgICAgICBfX2FzbV9fIF9f dm9sYXRpbGVfXygKICAgICAgICAgICAgICAgICIjIGJlZ2lubmluZyBfX3VwX3dyaXRlXG5cdCIK ICAgICAgICAgICAgICAgICIgIG1vdmwgICAgICAlMiwlJWVkeFxuXHQiCiIiICIgIHhhZGRsICAg ICAlJWVkeCwoJSVlYXgpXG5cdCIKICAgICAgICAgICAgICAgICIgIGpueiAgICAgICAyZlxuXHQi CiAgICAgICAgICAgICAgICAiMTpcblx0IgogICAgICAgICAgICAgICAgIi5zZWN0aW9uIC50ZXh0 LmxvY2ssXCJheFwiXG4iCiAgICAgICAgICAgICAgICAiMjpcblx0IgogICAgICAgICAgICAgICAg IiAgZGVjdyAgICAgICUlZHhcblx0IgogICAgICAgICAgICAgICAgIiAgam56ICAgICAgIDFiXG5c dCIKICAgICAgICAgICAgICAgICIgIHB1c2hsICAgICAlJWVjeFxuXHQiCiAgICAgICAgICAgICAg ICAiICBjYWxsICAgICAgcndzZW1fd2FrZVxuXHQiCiAgICAgICAgICAgICAgICAiICBwb3BsICAg ICAgJSVlY3hcblx0IgogICAgICAgICAgICAgICAgIiAgam1wICAgICAgIDFiXG4iCiAgICAgICAg ICAgICAgICAiLnByZXZpb3VzXG4iCiAgICAgICAgICAgICAgICAiIyBlbmRpbmcgX191cF93cml0 ZVxuIgogICAgICAgICAgICAgICAgOiAiK20iKHNlbS0+Y291bnQpCiAgICAgICAgICAgICAgICA6 ICJhIihzZW0pLCAiaSIoLSgoLTB4MDAwMTAwMDApICsgMHgwMDAwMDAwMSkpCiAgICAgICAgICAg ICAgICA6ICJtZW1vcnkiLCAiY2MiLCAiZWR4Iik7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBy d3NlbV9hdG9taWNfYWRkKGludCBkZWx0YSwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQp7CiAg ICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiIiICJhZGRsICUxLCUwIgogICAgICAgICAgICAg ICAgOiI9bSIoc2VtLT5jb3VudCkKICAgICAgICAgICAgICAgIDoiaXIiKGRlbHRhKSwgIm0iKHNl bS0+Y291bnQpKTsKfQoKCgoKc3RhdGljIGlubGluZSBpbnQgcndzZW1fYXRvbWljX3VwZGF0ZShp bnQgZGVsdGEsIHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewogICAgICAgIGludCB0bXAgPSBk ZWx0YTsKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiIiICJ4YWRkICUwLCglMikiCiAg ICAgICAgICAgICAgICA6ICIrciIodG1wKSwgIj1tIihzZW0tPmNvdW50KQogICAgICAgICAgICAg ICAgOiAiciIoc2VtKSwgIm0iKHNlbS0+Y291bnQpCiAgICAgICAgICAgICAgICA6ICJtZW1vcnki KTsKCiAgICAgICAgcmV0dXJuIHRtcCtkZWx0YTsKfQojIDI4ICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9saW51eC9yd3NlbS5oIiAyCiMgNDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9p bmNsdWRlL2xpbnV4L3J3c2VtLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBkb3duX3JlYWQoc3RydWN0 IHJ3X3NlbWFwaG9yZSAqc2VtKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogICAgICAgIF9fZG93bl9yZWFkKHNlbSk7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBkb3duX3dy aXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgX19kb3duX3dyaXRlKHNlbSk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9CgoKCgpzdGF0aWMgaW5saW5l IHZvaWQgdXBfcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgIF9fdXBfcmVhZChzZW0pOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKfQoKCgoKc3RhdGljIGlubGlu ZSB2b2lkIHVwX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgIF9fdXBfd3JpdGUoc2VtKTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9CiMgNDMgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zZW1hcGhvcmUuaCIgMgoKc3RydWN0IHNlbWFw aG9yZSB7CiAgICAgICAgYXRvbWljX3QgY291bnQ7CiAgICAgICAgaW50IHNsZWVwZXJzOwogICAg ICAgIHdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CgoKCn07CiMgNzMgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2FzbS9zZW1hcGhvcmUuaCIKc3RhdGljIGlubGluZSB2b2lkIHNlbWFfaW5p dCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtLCBpbnQgdmFsKQp7CgoKCgoKCiAgICAgICAgKCgoJnNl bS0+Y291bnQpLT5jb3VudGVyKSA9ICh2YWwpKTsKICAgICAgICBzZW0tPnNsZWVwZXJzID0gMDsK ICAgICAgICBpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZW0tPndhaXQpOwoKCgp9CgpzdGF0aWMgaW5s aW5lIHZvaWQgaW5pdF9NVVRFWCAoc3RydWN0IHNlbWFwaG9yZSAqc2VtKQp7CiAgICAgICAgc2Vt YV9pbml0KHNlbSwgMSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYX0xPQ0tFRCAo c3RydWN0IHNlbWFwaG9yZSAqc2VtKQp7CiAgICAgICAgc2VtYV9pbml0KHNlbSwgMCk7Cn0KCiBf X2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgdm9pZCBfX2Rvd25fZmFpbGVkKHZvaWQgKTsKIF9f YXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBpbnQgX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxl KHZvaWQgKTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBpbnQgX19kb3duX2ZhaWxlZF90 cnlsb2NrKHZvaWQgKTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSB2b2lkIF9fdXBfd2Fr ZXVwKHZvaWQgKTsKCiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgdm9pZCBfX2Rvd24oc3Ry dWN0IHNlbWFwaG9yZSAqIHNlbSk7CiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgaW50IF9f ZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwogX19hdHRyaWJ1dGVf XygocmVncGFybSgwKSkpIGludCBfX2Rvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2Vt KTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSB2b2lkIF9fdXAoc3RydWN0IHNlbWFwaG9y ZSAqIHNlbSk7CgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBkb3duKHN0cnVjdCBzZW1hcGhvcmUg KiBzZW0pCnsKCgoKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAg ICAiIyBhdG9taWMgZG93biBvcGVyYXRpb25cblx0IgogICAgICAgICAgICAgICAgIiIgImRlY2wg JTBcblx0IgogICAgICAgICAgICAgICAgImpzIDJmXG4iCiAgICAgICAgICAgICAgICAiMTpcbiIK ICAgICAgICAgICAgICAgICIuc2VjdGlvbiAudGV4dC5sb2NrLFwiYXhcIlxuIgogICAgICAgICAg ICAgICAgIjI6XHRjYWxsIF9fZG93bl9mYWlsZWRcblx0IgogICAgICAgICAgICAgICAgImptcCAx YlxuIgogICAgICAgICAgICAgICAgIi5wcmV2aW91cyIKICAgICAgICAgICAgICAgIDoiPW0iIChz ZW0tPmNvdW50KQogICAgICAgICAgICAgICAgOiJjIiAoc2VtKQogICAgICAgICAgICAgICAgOiJt ZW1vcnkiKTsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgaW50IGRvd25faW50ZXJydXB0aWJsZShzdHJ1 Y3Qgc2VtYXBob3JlICogc2VtKQp7CiAgICAgICAgaW50IHJlc3VsdDsKCgoKCgogICAgICAgIF9f YXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgIiMgYXRvbWljIGludGVycnVwdGli bGUgZG93biBvcGVyYXRpb25cblx0IgogICAgICAgICAgICAgICAgIiIgImRlY2wgJTFcblx0Igog ICAgICAgICAgICAgICAgImpzIDJmXG5cdCIKICAgICAgICAgICAgICAgICJ4b3JsICUwLCUwXG4i CiAgICAgICAgICAgICAgICAiMTpcbiIKICAgICAgICAgICAgICAgICIuc2VjdGlvbiAudGV4dC5s b2NrLFwiYXhcIlxuIgogICAgICAgICAgICAgICAgIjI6XHRjYWxsIF9fZG93bl9mYWlsZWRfaW50 ZXJydXB0aWJsZVxuXHQiCiAgICAgICAgICAgICAgICAiam1wIDFiXG4iCiAgICAgICAgICAgICAg ICAiLnByZXZpb3VzIgogICAgICAgICAgICAgICAgOiI9YSIgKHJlc3VsdCksICI9bSIgKHNlbS0+ Y291bnQpCiAgICAgICAgICAgICAgICA6ImMiIChzZW0pCiAgICAgICAgICAgICAgICA6Im1lbW9y eSIpOwogICAgICAgIHJldHVybiByZXN1bHQ7Cn0KCgoKCgpzdGF0aWMgaW5saW5lIGludCBkb3du X3RyeWxvY2soc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKewogICAgICAgIGludCByZXN1bHQ7CgoK CgoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgICAgICAgICIjIGF0b21p YyBpbnRlcnJ1cHRpYmxlIGRvd24gb3BlcmF0aW9uXG5cdCIKICAgICAgICAgICAgICAgICIiICJk ZWNsICUxXG5cdCIKICAgICAgICAgICAgICAgICJqcyAyZlxuXHQiCiAgICAgICAgICAgICAgICAi eG9ybCAlMCwlMFxuIgogICAgICAgICAgICAgICAgIjE6XG4iCiAgICAgICAgICAgICAgICAiLnNl Y3Rpb24gLnRleHQubG9jayxcImF4XCJcbiIKICAgICAgICAgICAgICAgICIyOlx0Y2FsbCBfX2Rv d25fZmFpbGVkX3RyeWxvY2tcblx0IgogICAgICAgICAgICAgICAgImptcCAxYlxuIgogICAgICAg ICAgICAgICAgIi5wcmV2aW91cyIKICAgICAgICAgICAgICAgIDoiPWEiIChyZXN1bHQpLCAiPW0i IChzZW0tPmNvdW50KQogICAgICAgICAgICAgICAgOiJjIiAoc2VtKQogICAgICAgICAgICAgICAg OiJtZW1vcnkiKTsKICAgICAgICByZXR1cm4gcmVzdWx0Owp9CgoKCgoKCgpzdGF0aWMgaW5saW5l IHZvaWQgdXAoc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKewoKCgogICAgICAgIF9fYXNtX18gX192 b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgIiMgYXRvbWljIHVwIG9wZXJhdGlvblxuXHQiCiAg ICAgICAgICAgICAgICAiIiAiaW5jbCAlMFxuXHQiCiAgICAgICAgICAgICAgICAiamxlIDJmXG4i CiAgICAgICAgICAgICAgICAiMTpcbiIKICAgICAgICAgICAgICAgICIuc2VjdGlvbiAudGV4dC5s b2NrLFwiYXhcIlxuIgogICAgICAgICAgICAgICAgIjI6XHRjYWxsIF9fdXBfd2FrZXVwXG5cdCIK ICAgICAgICAgICAgICAgICJqbXAgMWJcbiIKICAgICAgICAgICAgICAgICIucHJldmlvdXMiCiAg ICAgICAgICAgICAgICA6Ij1tIiAoc2VtLT5jb3VudCkKICAgICAgICAgICAgICAgIDoiYyIgKHNl bSkKICAgICAgICAgICAgICAgIDoibWVtb3J5Iik7Cn0KIyAxOTkgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9hc20vYnl0ZW9yZGVyLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9hc20vdHlwZXMuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2Fz bS9ieXRlb3JkZXIuaCIgMgoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUv bGludXgvY29uZmlnLmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNt L2J5dGVvcmRlci5oIiAyCgoKc3RhdGljIF9faW5saW5lX18gX19jb25zdF9fIF9fdTMyIF9fX2Fy Y2hfX3N3YWIzMihfX3UzMiB4KQp7CgogICAgICAgIF9fYXNtX18oImJzd2FwICUwIiA6ICI9ciIg KHgpIDogIjAiICh4KSk7CgoKCgoKCgogICAgICAgIHJldHVybiB4Owp9CgpzdGF0aWMgX19pbmxp bmVfXyBfX2NvbnN0X18gX191MTYgX19fYXJjaF9fc3dhYjE2KF9fdTE2IHgpCnsKICAgICAgICBf X2FzbV9fKCJ4Y2hnYiAlYjAsJWgwIiA6ICI9cSIgKHgpIDogIjAiICh4KSk7IHJldHVybiB4OwoK Cgp9CiMgNDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaCIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0dGxl X2VuZGlhbi5oIiAxCiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2J5 dGVvcmRlci9saXR0bGVfZW5kaWFuLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWIuaCIgMQojIDEzMSAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL3N3YWIuaCIKc3RhdGljIF9faW5saW5lX18gX19jb25z dF9fIF9fdTE2IF9fZnN3YWIxNihfX3UxNiB4KQp7CiAgICAgICAgcmV0dXJuIF9fX2FyY2hfX3N3 YWIxNih4KTsKfQpzdGF0aWMgX19pbmxpbmVfXyBfX3UxNiBfX3N3YWIxNnAoX191MTYgKngpCnsK ICAgICAgICByZXR1cm4gX19fYXJjaF9fc3dhYjE2KCooeCkpOwp9CnN0YXRpYyBfX2lubGluZV9f IHZvaWQgX19zd2FiMTZzKF9fdTE2ICphZGRyKQp7CiAgICAgICAgZG8geyAqKGFkZHIpID0gX19f YXJjaF9fc3dhYjE2KCooKGFkZHIpKSk7IH0gd2hpbGUgKDApOwp9CgpzdGF0aWMgX19pbmxpbmVf XyBfX2NvbnN0X18gX191MzIgX19mc3dhYjMyKF9fdTMyIHgpCnsKICAgICAgICByZXR1cm4gX19f YXJjaF9fc3dhYjMyKHgpOwp9CnN0YXRpYyBfX2lubGluZV9fIF9fdTMyIF9fc3dhYjMycChfX3Uz MiAqeCkKewogICAgICAgIHJldHVybiBfX19hcmNoX19zd2FiMzIoKih4KSk7Cn0Kc3RhdGljIF9f aW5saW5lX18gdm9pZCBfX3N3YWIzMnMoX191MzIgKmFkZHIpCnsKICAgICAgICBkbyB7ICooYWRk cikgPSBfX19hcmNoX19zd2FiMzIoKigoYWRkcikpKTsgfSB3aGlsZSAoMCk7Cn0KCgpzdGF0aWMg X19pbmxpbmVfXyBfX2NvbnN0X18gX191NjQgX19mc3dhYjY0KF9fdTY0IHgpCnsKCiAgICAgICAg X191MzIgaCA9IHggPj4gMzI7CiAgICAgICAgX191MzIgbCA9IHggJiAoKDFVTEw8PDMyKS0xKTsK ICAgICAgICByZXR1cm4gKCgoX191NjQpKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3UzMikobCkp ID8gKHsgX191MzIgX194ID0gKChsKSk7ICgoX191MzIpKCAoKChfX3UzMikoX194KSAmIChfX3Uz MikweDAwMDAwMGZmVUwpIDw8IDI0KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMGZm MDBVTCkgPDwgOCkgfCAoKChfX3UzMikoX194KSAmIChfX3UzMikweDAwZmYwMDAwVUwpID4+IDgp IHwgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHhmZjAwMDAwMFVMKSA+PiAyNCkgKSk7IH0pIDog X19mc3dhYjMyKChsKSkpKSA8PCAzMikgfCAoKF9fdTY0KSgoX19idWlsdGluX2NvbnN0YW50X3Ao KF9fdTMyKShoKSkgPyAoeyBfX3UzMiBfX3ggPSAoKGgpKTsgKChfX3UzMikoICgoKF9fdTMyKShf X3gpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwgKCgoX191MzIpKF9feCkgJiAoX191 MzIpMHgwMDAwZmYwMFVMKSA8PCA4KSB8ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDBmZjAw MDBVTCkgPj4gOCkgfCAoKChfX3UzMikoX194KSAmIChfX3UzMikweGZmMDAwMDAwVUwpID4+IDI0 KSApKTsgfSkgOiBfX2Zzd2FiMzIoKGgpKSkpKTsKCgoKfQpzdGF0aWMgX19pbmxpbmVfXyBfX3U2 NCBfX3N3YWI2NHAoX191NjQgKngpCnsKICAgICAgICByZXR1cm4gKHsgX191NjQgX190bXAgPSAo Kih4KSkgOyAoeyBfX3U2NCBfX3ggPSAoX190bXApOyAoKF9fdTY0KSggKF9fdTY0KSgoKF9fdTY0 KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwMDAwMDAwMDBmZlVMTCkgPDwgNTYpIHwgKF9fdTY0KSgo KF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwMDAwMDAwZmYwMFVMTCkgPDwgNDApIHwgKF9f dTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwMDAwMGZmMDAwMFVMTCkgPDwgMjQp IHwgKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwMDBmZjAwMDAwMFVMTCkg PDwgOCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwMDBmZjAwMDAwMDAw VUxMKSA+PiA4KSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDBmZjAwMDAw MDAwMDBVTEwpID4+IDI0KSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwZmYw MDAwMDAwMDAwMDBVTEwpID4+IDQwKSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkw eGZmMDAwMDAwMDAwMDAwMDBVTEwpID4+IDU2KSApKTsgfSk7IH0pOwp9CnN0YXRpYyBfX2lubGlu ZV9fIHZvaWQgX19zd2FiNjRzKF9fdTY0ICphZGRyKQp7CiAgICAgICAgZG8geyAqKGFkZHIpID0g KHsgX191NjQgX190bXAgPSAoKigoYWRkcikpKSA7ICh7IF9fdTY0IF9feCA9IChfX3RtcCk7ICgo X191NjQpKCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwMDAwMDAwMDAwMGZm VUxMKSA8PCA1NikgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwMDAwMDAw MDBmZjAwVUxMKSA8PCA0MCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAw MDAwMDAwZmYwMDAwVUxMKSA8PCAyNCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQp MHgwMDAwMDAwMGZmMDAwMDAwVUxMKSA8PCA4KSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChf X3U2NCkweDAwMDAwMGZmMDAwMDAwMDBVTEwpID4+IDgpIHwgKF9fdTY0KSgoKF9fdTY0KShfX3gp ICYgKF9fdTY0KTB4MDAwMGZmMDAwMDAwMDAwMFVMTCkgPj4gMjQpIHwgKF9fdTY0KSgoKF9fdTY0 KShfX3gpICYgKF9fdTY0KTB4MDBmZjAwMDAwMDAwMDAwMFVMTCkgPj4gNDApIHwgKF9fdTY0KSgo KF9fdTY0KShfX3gpICYgKF9fdTY0KTB4ZmYwMDAwMDAwMDAwMDAwMFVMTCkgPj4gNTYpICkpOyB9 KTsgfSk7IH0gd2hpbGUgKDApOwp9CiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2xpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmgiIDIKIyA2NiAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaCIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oIiAxCiMg MTUwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvZ2VuZXJp Yy5oIgpleHRlcm4gX191MzIgbnRvaGwoX191MzIpOwpleHRlcm4gX191MzIgaHRvbmwoX191MzIp OwoKCgoKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCBudG9ocyh1bnNpZ25lZCBzaG9ydCBpbnQp OwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50IGh0b25zKHVuc2lnbmVkIHNob3J0IGludCk7CiMg NjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9saXR0bGVf ZW5kaWFuLmgiIDIKIyA0NiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2J5dGVv cmRlci5oIiAyCiMgMjAwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5o IiAyCgpleHRlcm4gdm9pZCB1cGRhdGVfYXRpbWUgKHN0cnVjdCBpbm9kZSAqKTsKCgpleHRlcm4g dm9pZCBidWZmZXJfaW5pdCh1bnNpZ25lZCBsb25nKTsKZXh0ZXJuIHZvaWQgaW5vZGVfaW5pdCh1 bnNpZ25lZCBsb25nKTsKZXh0ZXJuIHZvaWQgbW50X2luaXQodW5zaWduZWQgbG9uZyk7CiMgMjIx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIgplbnVtIGJoX3N0YXRl X2JpdHMgewogICAgICAgIEJIX1VwdG9kYXRlLAogICAgICAgIEJIX0RpcnR5LAogICAgICAgIEJI X0xvY2ssCiAgICAgICAgQkhfUmVxLAogICAgICAgIEJIX01hcHBlZCwKICAgICAgICBCSF9OZXcs CiAgICAgICAgQkhfUHJvdGVjdGVkLAogICAgICAgIEJIX0pCRCwKICAgICAgICBCSF9Bc3luYywK CiAgICAgICAgQkhfUHJpdmF0ZVN0YXJ0LAoKCn07CiMgMjQ4ICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9saW51eC9mcy5oIgpzdHJ1Y3QgYnVmZmVyX2hlYWQgewoKICAgICAgICBzdHJ1 Y3QgYnVmZmVyX2hlYWQgKmJfbmV4dDsKICAgICAgICB1bnNpZ25lZCBsb25nIGJfYmxvY2tucjsK ICAgICAgICB1bnNpZ25lZCBzaG9ydCBiX3NpemU7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgYl9s aXN0OwogICAgICAgIGtkZXZfdCBiX2RldjsKCiAgICAgICAgYXRvbWljX3QgYl9jb3VudDsKICAg ICAgICBrZGV2X3QgYl9yZGV2OwogICAgICAgIHVuc2lnbmVkIGxvbmcgYl9zdGF0ZTsKICAgICAg ICB1bnNpZ25lZCBsb25nIGJfZmx1c2h0aW1lOwoKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQg KmJfbmV4dF9mcmVlOwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYl9wcmV2X2ZyZWU7CiAg ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiX3RoaXNfcGFnZTsKICAgICAgICBzdHJ1Y3QgYnVm ZmVyX2hlYWQgKmJfcmVxbmV4dDsKCiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYl9wcHJl djsKICAgICAgICBjaGFyICogYl9kYXRhOwogICAgICAgIHN0cnVjdCBwYWdlICpiX3BhZ2U7CiAg ICAgICAgdm9pZCAoKmJfZW5kX2lvKShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgdXB0b2Rh dGUpOwogICAgICAgIHZvaWQgKmJfcHJpdmF0ZTsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBiX3Jz ZWN0b3I7CiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgYl93YWl0OwoKICAgICAgICBzdHJ1Y3Qg aW5vZGUgKiBiX2lub2RlOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgYl9pbm9kZV9idWZmZXJz Owp9OwoKdHlwZWRlZiB2b2lkIChiaF9lbmRfaW9fdCkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwg aW50IHVwdG9kYXRlKTsKdm9pZCBpbml0X2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgYmhf ZW5kX2lvX3QgKiwgdm9pZCAqKTsKIyAyOTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2xpbnV4L2ZzLmgiCmV4dGVybiB2b2lkIHNldF9iaF9wYWdlKHN0cnVjdCBidWZmZXJfaGVhZCAq YmgsIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CgoKCgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oIiAxCgoKCgpzdHJ1 Y3QgcGlwZV9pbm9kZV9pbmZvIHsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogICAg ICAgIGNoYXIgKmJhc2U7CiAgICAgICAgdW5zaWduZWQgaW50IGxlbjsKICAgICAgICB1bnNpZ25l ZCBpbnQgc3RhcnQ7CiAgICAgICAgdW5zaWduZWQgaW50IHJlYWRlcnM7CiAgICAgICAgdW5zaWdu ZWQgaW50IHdyaXRlcnM7CiAgICAgICAgdW5zaWduZWQgaW50IHdhaXRpbmdfcmVhZGVyczsKICAg ICAgICB1bnNpZ25lZCBpbnQgd2FpdGluZ193cml0ZXJzOwogICAgICAgIHVuc2lnbmVkIGludCBy X2NvdW50ZXI7CiAgICAgICAgdW5zaWduZWQgaW50IHdfY291bnRlcjsKfTsKIyA0MiAiL3Vzci9z cmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmgiCnZvaWQgcGlwZV93YWl0 KHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKCnN0cnVjdCBpbm9kZSogcGlwZV9uZXcoc3RydWN0IGlu b2RlKiBpbm9kZSk7CiMgMzAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9m cy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvbWluaXhfZnNf aS5oIiAxCgoKCgoKCnN0cnVjdCBtaW5peF9pbm9kZV9pbmZvIHsKICAgICAgICB1bmlvbiB7CiAg ICAgICAgICAgICAgICBfX3UxNiBpMV9kYXRhWzE2XTsKICAgICAgICAgICAgICAgIF9fdTMyIGky X2RhdGFbMTZdOwogICAgICAgIH0gdTsKfTsKIyAzMDIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9p bmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9s aW51eC9leHQyX2ZzX2kuaCIgMQojIDIyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9s aW51eC9leHQyX2ZzX2kuaCIKc3RydWN0IGV4dDJfaW5vZGVfaW5mbyB7CiAgICAgICAgX191MzIg aV9kYXRhWzE1XTsKICAgICAgICBfX3UzMiBpX2ZsYWdzOwogICAgICAgIF9fdTMyIGlfZmFkZHI7 CiAgICAgICAgX191OCBpX2ZyYWdfbm87CiAgICAgICAgX191OCBpX2ZyYWdfc2l6ZTsKICAgICAg ICBfX3UxNiBpX29zeW5jOwogICAgICAgIF9fdTMyIGlfZmlsZV9hY2w7CiAgICAgICAgX191MzIg aV9kaXJfYWNsOwogICAgICAgIF9fdTMyIGlfZHRpbWU7CiAgICAgICAgX191MzIgaV9ibG9ja19n cm91cDsKICAgICAgICBfX3UzMiBpX25leHRfYWxsb2NfYmxvY2s7CiAgICAgICAgX191MzIgaV9u ZXh0X2FsbG9jX2dvYWw7CiAgICAgICAgX191MzIgaV9wcmVhbGxvY19ibG9jazsKICAgICAgICBf X3UzMiBpX3ByZWFsbG9jX2NvdW50OwogICAgICAgIF9fdTMyIGlfZGlyX3N0YXJ0X2xvb2t1cDsK ICAgICAgICBpbnQgaV9uZXdfaW5vZGU6MTsKfTsKIyAzMDMgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVk ZS9saW51eC9leHQzX2ZzX2kuaCIgMQojIDE5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVk ZS9saW51eC9leHQzX2ZzX2kuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9s aW51eC9yd3NlbS5oIiAxCiMgMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4 L2V4dDNfZnNfaS5oIiAyCgoKCgpzdHJ1Y3QgZXh0M19pbm9kZV9pbmZvIHsKICAgICAgICBfX3Uz MiBpX2RhdGFbMTVdOwogICAgICAgIF9fdTMyIGlfZmxhZ3M7CgoKCgoKCiAgICAgICAgX191MzIg aV9maWxlX2FjbDsKICAgICAgICBfX3UzMiBpX2Rpcl9hY2w7CiAgICAgICAgX191MzIgaV9kdGlt ZTsKICAgICAgICBfX3UzMiBpX2Jsb2NrX2dyb3VwOwogICAgICAgIF9fdTMyIGlfc3RhdGU7CiAg ICAgICAgX191MzIgaV9uZXh0X2FsbG9jX2Jsb2NrOwogICAgICAgIF9fdTMyIGlfbmV4dF9hbGxv Y19nb2FsOwoKCgoKICAgICAgICBfX3UzMiBpX2Rpcl9zdGFydF9sb29rdXA7CgogICAgICAgIHN0 cnVjdCBsaXN0X2hlYWQgaV9vcnBoYW47CiMgNjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNs dWRlL2xpbnV4L2V4dDNfZnNfaS5oIgogICAgICAgIGxvZmZfdCBpX2Rpc2tzaXplOwojIDc1ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaCIKICAgICAgICBz dHJ1Y3Qgcndfc2VtYXBob3JlIHRydW5jYXRlX3NlbTsKfTsKIyAzMDQgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9saW51eC9ocGZzX2ZzX2kuaCIgMQoKCgpzdHJ1Y3QgaHBmc19pbm9kZV9pbmZvIHsK ICAgICAgICB1bnNpZ25lZCBsb25nIG1tdV9wcml2YXRlOwogICAgICAgIGlub190IGlfcGFyZW50 X2RpcjsKICAgICAgICB1bnNpZ25lZCBpX2RubzsKICAgICAgICB1bnNpZ25lZCBpX2Rwb3M7CiAg ICAgICAgdW5zaWduZWQgaV9kc3ViZG5vOwogICAgICAgIHVuc2lnbmVkIGlfZmlsZV9zZWM7CiAg ICAgICAgdW5zaWduZWQgaV9kaXNrX3NlYzsKICAgICAgICB1bnNpZ25lZCBpX25fc2VjczsKICAg ICAgICB1bnNpZ25lZCBpX2VhX3NpemU7CiAgICAgICAgdW5zaWduZWQgaV9jb252IDogMjsKICAg ICAgICB1bnNpZ25lZCBpX2VhX21vZGUgOiAxOwogICAgICAgIHVuc2lnbmVkIGlfZWFfdWlkIDog MTsKICAgICAgICB1bnNpZ25lZCBpX2VhX2dpZCA6IDE7CiAgICAgICAgdW5zaWduZWQgaV9kaXJ0 eSA6IDE7CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBpX3NlbTsKICAgICAgICBsb2ZmX3QgKipp X3JkZGlyX29mZjsKfTsKIyAzMDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4 L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9udGZzX2Zz X2kuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3R5cGVz LmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9udGZzX2ZzX2ku aCIgMgoKCnN0cnVjdCBudGZzX2F0dHJpYnV0ZTsKc3RydWN0IG50ZnNfc2JfaW5mbzsKCgoKCnR5 cGVkZWYgdTggbnRmc191ODsKdHlwZWRlZiB1MTYgbnRmc191MTY7CnR5cGVkZWYgdTMyIG50ZnNf dTMyOwp0eXBlZGVmIHU2NCBudGZzX3U2NDsKdHlwZWRlZiBzOCBudGZzX3M4Owp0eXBlZGVmIHMx NiBudGZzX3MxNjsKdHlwZWRlZiBzMzIgbnRmc19zMzI7CnR5cGVkZWYgczY0IG50ZnNfczY0OwoK CgoKdHlwZWRlZiBfX2tlcm5lbF9tb2RlX3QgbnRtb2RlX3Q7CgoKCnR5cGVkZWYgdWlkX3QgbnRm c191aWRfdDsKCgoKdHlwZWRlZiBnaWRfdCBudGZzX2dpZF90OwoKCgp0eXBlZGVmIF9fa2VybmVs X3NpemVfdCBudGZzX3NpemVfdDsKCgoKdHlwZWRlZiBfX2tlcm5lbF90aW1lX3QgbnRmc190aW1l X3Q7CgoKCgoKdHlwZWRlZiB1MTYgbnRmc193Y2hhcl90OwoKCgoKdHlwZWRlZiBzNjQgbnRmc19v ZmZzZXRfdDsKCgoKCnR5cGVkZWYgdTY0IG50ZnNfdGltZTY0X3Q7CiMgNjkgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L250ZnNfZnNfaS5oIgp0eXBlZGVmIHMzMiBudGZzX2Ns dXN0ZXJfdDsKCgoKc3RydWN0IG50ZnNfaW5vZGVfaW5mbyB7CiAgICAgICAgc3RydWN0IG50ZnNf c2JfaW5mbyAqdm9sOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9udW1iZXI7CiAgICAgICAgX191 MTYgc2VxdWVuY2VfbnVtYmVyOwogICAgICAgIHVuc2lnbmVkIGNoYXIgKmF0dHI7CiAgICAgICAg aW50IGF0dHJfY291bnQ7CiAgICAgICAgc3RydWN0IG50ZnNfYXR0cmlidXRlICphdHRyczsKICAg ICAgICBpbnQgcmVjb3JkX2NvdW50OwogICAgICAgIGludCAqcmVjb3JkczsKCiAgICAgICAgdW5p b24gewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHJlY29yZHNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbHVzdGVyc19wZXJfcmVj b3JkOwogICAgICAgICAgICAgICAgfSBpbmRleDsKICAgICAgICB9IHU7Cn07CiMgMzA2ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvbXNkb3NfZnNfaS5oIiAxCgoKCgoKCgpzdHJ1Y3QgbXNk b3NfaW5vZGVfaW5mbyB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtbXVfcHJpdmF0ZTsKICAgICAg ICBpbnQgaV9zdGFydDsKICAgICAgICBpbnQgaV9sb2dzdGFydDsKICAgICAgICBpbnQgaV9hdHRy czsKICAgICAgICBpbnQgaV9jdGltZV9tczsKICAgICAgICBpbnQgaV9sb2NhdGlvbjsKICAgICAg ICBzdHJ1Y3QgaW5vZGUgKmlfZmF0X2lub2RlOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgaV9m YXRfaGFzaDsKfTsKIyAzMDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2Zz LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC91bXNkb3NfZnNf aS5oIiAxCgoKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L21z ZG9zX2ZzX2kuaCIgMQojIDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3Vt c2Rvc19mc19pLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9w aXBlX2ZzX2kuaCIgMQojIDEwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC91 bXNkb3NfZnNfaS5oIiAyCiMgMzkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4 L3Vtc2Rvc19mc19pLmgiCnN0cnVjdCBkaXJfbG9ja2luZ19pbmZvIHsKICAgICAgICB3YWl0X3F1 ZXVlX2hlYWRfdCBwOwogICAgICAgIHNob3J0IGludCBsb29raW5nOwogICAgICAgIHNob3J0IGlu dCBjcmVhdGluZzsKCgoKICAgICAgICBsb25nIHBpZDsKCn07CgpzdHJ1Y3QgdW1zZG9zX2lub2Rl X2luZm8gewogICAgICAgIHN0cnVjdCBtc2Rvc19pbm9kZV9pbmZvIG1zZG9zX2luZm87CiAgICAg ICAgc3RydWN0IGRpcl9sb2NraW5nX2luZm8gZGlyX2luZm87CiAgICAgICAgaW50IGlfcGF0Y2hl ZDsKICAgICAgICBpbnQgaV9pc19obGluazsKICAgICAgICBvZmZfdCBwb3M7Cn07CiMgMzA4ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvaXNvX2ZzX2kuaCIgMQoKCgplbnVtIGlzb2ZzX2Zp bGVfZm9ybWF0IHsKICAgICAgICBpc29mc19maWxlX25vcm1hbCA9IDAsCiAgICAgICAgaXNvZnNf ZmlsZV9zcGFyc2UgPSAxLAogICAgICAgIGlzb2ZzX2ZpbGVfY29tcHJlc3NlZCA9IDIsCn07CgoK CgpzdHJ1Y3QgaXNvX2lub2RlX2luZm8gewogICAgICAgIHVuc2lnbmVkIGludCBpX2ZpcnN0X2V4 dGVudDsKICAgICAgICB1bnNpZ25lZCBjaGFyIGlfZmlsZV9mb3JtYXQ7CiAgICAgICAgdW5zaWdu ZWQgY2hhciBpX2Zvcm1hdF9wYXJtWzNdOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9uZXh0X3Nl Y3Rpb25faW5vOwogICAgICAgIG9mZl90IGlfc2VjdGlvbl9zaXplOwp9OwojIDMwOSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L25mc19mc19pLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9hc20vdHlwZXMuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2xpbnV4L25mc19mc19pLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9saW51eC9saXN0LmgiIDEKIyA2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVk ZS9saW51eC9uZnNfZnNfaS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUv bGludXgvbmZzLmgiIDEKIyAxMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgv bmZzLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc3VucnBjL21z Z19wcm90LmgiIDEKIyAxNCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc3Vu cnBjL21zZ19wcm90LmgiCmVudW0gcnBjX2F1dGhfZmxhdm9yIHsKICAgICAgICBSUENfQVVUSF9O VUxMID0gMCwKICAgICAgICBSUENfQVVUSF9VTklYID0gMSwKICAgICAgICBSUENfQVVUSF9TSE9S VCA9IDIsCiAgICAgICAgUlBDX0FVVEhfREVTID0gMywKICAgICAgICBSUENfQVVUSF9LUkIgPSA0 LAp9OwoKZW51bSBycGNfbXNnX3R5cGUgewogICAgICAgIFJQQ19DQUxMID0gMCwKICAgICAgICBS UENfUkVQTFkgPSAxCn07CgplbnVtIHJwY19yZXBseV9zdGF0IHsKICAgICAgICBSUENfTVNHX0FD Q0VQVEVEID0gMCwKICAgICAgICBSUENfTVNHX0RFTklFRCA9IDEKfTsKCmVudW0gcnBjX2FjY2Vw dF9zdGF0IHsKICAgICAgICBSUENfU1VDQ0VTUyA9IDAsCiAgICAgICAgUlBDX1BST0dfVU5BVkFJ TCA9IDEsCiAgICAgICAgUlBDX1BST0dfTUlTTUFUQ0ggPSAyLAogICAgICAgIFJQQ19QUk9DX1VO QVZBSUwgPSAzLAogICAgICAgIFJQQ19HQVJCQUdFX0FSR1MgPSA0LAogICAgICAgIFJQQ19TWVNU RU1fRVJSID0gNQp9OwoKZW51bSBycGNfcmVqZWN0X3N0YXQgewogICAgICAgIFJQQ19NSVNNQVRD SCA9IDAsCiAgICAgICAgUlBDX0FVVEhfRVJST1IgPSAxCn07CgplbnVtIHJwY19hdXRoX3N0YXQg ewogICAgICAgIFJQQ19BVVRIX09LID0gMCwKICAgICAgICBSUENfQVVUSF9CQURDUkVEID0gMSwK ICAgICAgICBSUENfQVVUSF9SRUpFQ1RFRENSRUQgPSAyLAogICAgICAgIFJQQ19BVVRIX0JBRFZF UkYgPSAzLAogICAgICAgIFJQQ19BVVRIX1JFSkVDVEVEVkVSRiA9IDQsCiAgICAgICAgUlBDX0FV VEhfVE9PV0VBSyA9IDUKfTsKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvbmZzLmgiIDIKIyA0MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvbmZz LmgiCiBlbnVtIG5mc19zdGF0IHsKICAgICAgICBORlNfT0sgPSAwLAogICAgICAgIE5GU0VSUl9Q RVJNID0gMSwKICAgICAgICBORlNFUlJfTk9FTlQgPSAyLAogICAgICAgIE5GU0VSUl9JTyA9IDUs CiAgICAgICAgTkZTRVJSX05YSU8gPSA2LAogICAgICAgIE5GU0VSUl9FQUdBSU4gPSAxMSwKICAg ICAgICBORlNFUlJfQUNDRVMgPSAxMywKICAgICAgICBORlNFUlJfRVhJU1QgPSAxNywKICAgICAg ICBORlNFUlJfWERFViA9IDE4LAogICAgICAgIE5GU0VSUl9OT0RFViA9IDE5LAogICAgICAgIE5G U0VSUl9OT1RESVIgPSAyMCwKICAgICAgICBORlNFUlJfSVNESVIgPSAyMSwKICAgICAgICBORlNF UlJfSU5WQUwgPSAyMiwKICAgICAgICBORlNFUlJfRkJJRyA9IDI3LAogICAgICAgIE5GU0VSUl9O T1NQQyA9IDI4LAogICAgICAgIE5GU0VSUl9ST0ZTID0gMzAsCiAgICAgICAgTkZTRVJSX01MSU5L ID0gMzEsCiAgICAgICAgTkZTRVJSX09QTk9UU1VQUCA9IDQ1LAogICAgICAgIE5GU0VSUl9OQU1F VE9PTE9ORyA9IDYzLAogICAgICAgIE5GU0VSUl9OT1RFTVBUWSA9IDY2LAogICAgICAgIE5GU0VS Ul9EUVVPVCA9IDY5LAogICAgICAgIE5GU0VSUl9TVEFMRSA9IDcwLAogICAgICAgIE5GU0VSUl9S RU1PVEUgPSA3MSwKICAgICAgICBORlNFUlJfV0ZMVVNIID0gOTksCiAgICAgICAgTkZTRVJSX0JB REhBTkRMRSA9IDEwMDAxLAogICAgICAgIE5GU0VSUl9OT1RfU1lOQyA9IDEwMDAyLAogICAgICAg IE5GU0VSUl9CQURfQ09PS0lFID0gMTAwMDMsCiAgICAgICAgTkZTRVJSX05PVFNVUFAgPSAxMDAw NCwKICAgICAgICBORlNFUlJfVE9PU01BTEwgPSAxMDAwNSwKICAgICAgICBORlNFUlJfU0VSVkVS RkFVTFQgPSAxMDAwNiwKICAgICAgICBORlNFUlJfQkFEVFlQRSA9IDEwMDA3LAogICAgICAgIE5G U0VSUl9KVUtFQk9YID0gMTAwMDgKIH07CgoKCmVudW0gbmZzX2Z0eXBlIHsKICAgICAgICBORk5P TiA9IDAsCiAgICAgICAgTkZSRUcgPSAxLAogICAgICAgIE5GRElSID0gMiwKICAgICAgICBORkJM SyA9IDMsCiAgICAgICAgTkZDSFIgPSA0LAogICAgICAgIE5GTE5LID0gNSwKICAgICAgICBORlNP Q0sgPSA2LAogICAgICAgIE5GQkFEID0gNywKICAgICAgICBORkZJRk8gPSA4Cn07CgoKCgoKCnN0 cnVjdCBuZnNfZmggewogICAgICAgIHVuc2lnbmVkIGludCBzaXplOwogICAgICAgIHVuc2lnbmVk IGludCBkYXRhWzY0IC8gc2l6ZW9mKGludCldOwp9OwojIDEwNyAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2luY2x1ZGUvbGludXgvbmZzLmgiCmVudW0gbmZzM19zdGFibGVfaG93IHsKICAgICAgICBO RlNfVU5TVEFCTEUgPSAwLAogICAgICAgIE5GU19EQVRBX1NZTkMgPSAxLAogICAgICAgIE5GU19G SUxFX1NZTkMgPSAyCn07CiMgNyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgv bmZzX2ZzX2kuaCIgMgoKCgoKc3RydWN0IG5mc19pbm9kZV9pbmZvIHsKCgoKICAgICAgICBfX3U2 NCBmc2lkOwogICAgICAgIF9fdTY0IGZpbGVpZDsKCgoKCiAgICAgICAgc3RydWN0IG5mc19maCBm aDsKCgoKCiAgICAgICAgdW5zaWduZWQgc2hvcnQgZmxhZ3M7CiMgNDUgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L25mc19mc19pLmgiCiAgICAgICAgdW5zaWduZWQgbG9uZyBy ZWFkX2NhY2hlX2ppZmZpZXM7CiAgICAgICAgX191NjQgcmVhZF9jYWNoZV9jdGltZTsKICAgICAg ICBfX3U2NCByZWFkX2NhY2hlX210aW1lOwogICAgICAgIF9fdTY0IHJlYWRfY2FjaGVfaXNpemU7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBhdHRydGltZW87CiAgICAgICAgdW5zaWduZWQgbG9uZyBh dHRydGltZW9fdGltZXN0YW1wOwoKCgoKCiAgICAgICAgX191MzIgY29va2lldmVyZlsyXTsKCgoK CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCByZWFkOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQg ZGlydHk7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBjb21taXQ7CiAgICAgICAgc3RydWN0IGxp c3RfaGVhZCB3cml0ZWJhY2s7CgogICAgICAgIHVuc2lnbmVkIGludCBucmVhZCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuZGlydHksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbmNvbW1pdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucGFnZXM7CgoK ICAgICAgICBzdHJ1Y3QgaW5vZGUgKmhhc2hfbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqaGFzaF9wcmV2OwogICAgICAgIHVuc2lnbmVkIGxvbmcgbmV4dHNjYW47CgoKICAg ICAgICBzdHJ1Y3QgcnBjX2NyZWQgKm1tX2NyZWQ7Cn07CiMgOTIgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2xpbnV4L25mc19mc19pLmgiCnN0cnVjdCBuZnNfbG9ja19pbmZvIHsKICAg ICAgICB1MzIgc3RhdGU7CiAgICAgICAgdTMyIGZsYWdzOwogICAgICAgIHN0cnVjdCBubG1faG9z dCAqaG9zdDsKfTsKIyAzMTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2Zz LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zeXN2X2ZzX2ku aCIgMQoKCgoKCgpzdHJ1Y3Qgc3lzdl9pbm9kZV9pbmZvIHsKICAgICAgICB1MzIgaV9kYXRhWzEw KzErMSsxXTsKCgoKCiAgICAgICAgdTMyIGlfZGlyX3N0YXJ0X2xvb2t1cDsKfTsKIyAzMTEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9hZmZzX2ZzX2kuaCIgMQoKCgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2Eub3V0LmgiIDEKCgoKCgoKCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2Eub3V0LmgiIDEKCgoKc3RydWN0IGV4ZWMKewog IHVuc2lnbmVkIGxvbmcgYV9pbmZvOwogIHVuc2lnbmVkIGFfdGV4dDsKICB1bnNpZ25lZCBhX2Rh dGE7CiAgdW5zaWduZWQgYV9ic3M7CiAgdW5zaWduZWQgYV9zeW1zOwogIHVuc2lnbmVkIGFfZW50 cnk7CiAgdW5zaWduZWQgYV90cnNpemU7CiAgdW5zaWduZWQgYV9kcnNpemU7Cn07CiMgOSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvYS5vdXQuaCIgMgoKCgoKZW51bSBtYWNo aW5lX3R5cGUgewoKCgogIE1fT0xEU1VOMiA9IDAsCgoKCgogIE1fNjgwMTAgPSAxLAoKCgoKICBN XzY4MDIwID0gMiwKCgoKCiAgTV9TUEFSQyA9IDMsCgoKICBNXzM4NiA9IDEwMCwKICBNX01JUFMx ID0gMTUxLAogIE1fTUlQUzIgPSAxNTIKfTsKIyAxMzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9p bmNsdWRlL2xpbnV4L2Eub3V0LmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUv YXNtL3BhZ2UuaCIgMQojIDEzMiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgv YS5vdXQuaCIgMgojIDE1NyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvYS5v dXQuaCIKc3RydWN0IG5saXN0IHsKICB1bmlvbiB7CiAgICBjaGFyICpuX25hbWU7CiAgICBzdHJ1 Y3Qgbmxpc3QgKm5fbmV4dDsKICAgIGxvbmcgbl9zdHJ4OwogIH0gbl91bjsKICB1bnNpZ25lZCBj aGFyIG5fdHlwZTsKICBjaGFyIG5fb3RoZXI7CiAgc2hvcnQgbl9kZXNjOwogIHVuc2lnbmVkIGxv bmcgbl92YWx1ZTsKfTsKIyAyMzUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4 L2Eub3V0LmgiCnN0cnVjdCByZWxvY2F0aW9uX2luZm8KewoKICBpbnQgcl9hZGRyZXNzOwoKICB1 bnNpZ25lZCBpbnQgcl9zeW1ib2xudW06MjQ7CgoKCiAgdW5zaWduZWQgaW50IHJfcGNyZWw6MTsK CgogIHVuc2lnbmVkIGludCByX2xlbmd0aDoyOwoKCgoKCgogIHVuc2lnbmVkIGludCByX2V4dGVy bjoxOwoKCgoKCgoKICB1bnNpZ25lZCBpbnQgcl9wYWQ6NDsKCn07CiMgNSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvYWZmc19mc19pLmgiIDIKCgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3RpbWUuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2FzbS9wYXJhbS5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvbGludXgvdGltZS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgvdHlwZXMuaCIgMQojIDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xp bnV4L3RpbWUuaCIgMgoKCgpzdHJ1Y3QgdGltZXNwZWMgewogICAgICAgIHRpbWVfdCB0dl9zZWM7 CiAgICAgICAgbG9uZyB0dl9uc2VjOwp9OwojIDMxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9saW51eC90aW1lLmgiCnN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcKdGltZXNw ZWNfdG9famlmZmllcyhzdHJ1Y3QgdGltZXNwZWMgKnZhbHVlKQp7CiAgICAgICAgdW5zaWduZWQg bG9uZyBzZWMgPSB2YWx1ZS0+dHZfc2VjOwogICAgICAgIGxvbmcgbnNlYyA9IHZhbHVlLT50dl9u c2VjOwoKICAgICAgICBpZiAoc2VjID49ICgoKH4wVUwgPj4gMSktMSkgLyAxMDApKQogICAgICAg ICAgICAgICAgcmV0dXJuICgofjBVTCA+PiAxKS0xKTsKICAgICAgICBuc2VjICs9IDEwMDAwMDAw MDBMIC8gMTAwIC0gMTsKICAgICAgICBuc2VjIC89IDEwMDAwMDAwMDBMIC8gMTAwOwogICAgICAg IHJldHVybiAxMDAgKiBzZWMgKyBuc2VjOwp9CgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkCmppZmZp ZXNfdG9fdGltZXNwZWModW5zaWduZWQgbG9uZyBqaWZmaWVzLCBzdHJ1Y3QgdGltZXNwZWMgKnZh bHVlKQp7CiAgICAgICAgdmFsdWUtPnR2X25zZWMgPSAoamlmZmllcyAlIDEwMCkgKiAoMTAwMDAw MDAwMEwgLyAxMDApOwogICAgICAgIHZhbHVlLT50dl9zZWMgPSBqaWZmaWVzIC8gMTAwOwp9CiMg NjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3RpbWUuaCIKc3RhdGljIGlu bGluZSB1bnNpZ25lZCBsb25nCm1rdGltZSAodW5zaWduZWQgaW50IHllYXIsIHVuc2lnbmVkIGlu dCBtb24sCiAgICAgICAgdW5zaWduZWQgaW50IGRheSwgdW5zaWduZWQgaW50IGhvdXIsCiAgICAg ICAgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IHNlYykKewogICAgICAgIGlmICgwID49 IChpbnQpIChtb24gLT0gMikpIHsKICAgICAgICAgICAgICAgIG1vbiArPSAxMjsKICAgICAgICAg ICAgICAgIHllYXIgLT0gMTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoKCgKICAgICAgICAg ICAgICAgICh1bnNpZ25lZCBsb25nKSAoeWVhci80IC0geWVhci8xMDAgKyB5ZWFyLzQwMCArIDM2 Nyptb24vMTIgKyBkYXkpICsKICAgICAgICAgICAgICAgICAgICAgICAgeWVhciozNjUgLSA3MTk0 OTkKICAgICAgICAgICAgKSoyNCArIGhvdXIKICAgICAgICAgICkqNjAgKyBtaW4KICAgICAgICAp KjYwICsgc2VjOwp9CgoKCgpzdHJ1Y3QgdGltZXZhbCB7CiAgICAgICAgdGltZV90IHR2X3NlYzsK ICAgICAgICBzdXNlY29uZHNfdCB0dl91c2VjOwp9OwoKc3RydWN0IHRpbWV6b25lIHsKICAgICAg ICBpbnQgdHpfbWludXRlc3dlc3Q7CiAgICAgICAgaW50IHR6X2RzdHRpbWU7Cn07CgoKCgpleHRl cm4gdm9pZCBkb19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KTsKZXh0ZXJuIHZvaWQg ZG9fc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dik7CmV4dGVybiB2b2lkIGdldF9mYXN0 X3RpbWUoc3RydWN0IHRpbWV2YWwgKnR2KTsKZXh0ZXJuIHZvaWQgKCpkb19nZXRfZmFzdF90aW1l KShzdHJ1Y3QgdGltZXZhbCAqKTsKIyAxMjEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2xpbnV4L3RpbWUuaCIKc3RydWN0IGl0aW1lcnNwZWMgewogICAgICAgIHN0cnVjdCB0aW1lc3Bl YyBpdF9pbnRlcnZhbDsKICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7Cn07CgpzdHJ1 Y3QgaXRpbWVydmFsIHsKICAgICAgICBzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKICAgICAg ICBzdHJ1Y3QgdGltZXZhbCBpdF92YWx1ZTsKfTsKIyA4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9saW51eC9hZmZzX2ZzX2kuaCIgMgojIDE3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9saW51eC9hZmZzX2ZzX2kuaCIKc3RydWN0IGFmZnNfZXh0X2tleSB7CiAgICAgICAg dTMyIGV4dDsKICAgICAgICB1MzIga2V5Owp9OwoKCgoKc3RydWN0IGFmZnNfaW5vZGVfaW5mbyB7 CiAgICAgICAgdTMyIGlfb3BlbmNudDsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGlfbGlua19s b2NrOwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgaV9leHRfbG9jazsKCiAgICAgICAgdTMyIGlf YmxrY250OwogICAgICAgIHUzMiBpX2V4dGNudDsKICAgICAgICB1MzIgKmlfbGM7CiAgICAgICAg dTMyIGlfbGNfc2l6ZTsKICAgICAgICB1MzIgaV9sY19zaGlmdDsKICAgICAgICB1MzIgaV9sY19t YXNrOwogICAgICAgIHN0cnVjdCBhZmZzX2V4dF9rZXkgKmlfYWM7CiAgICAgICAgdTMyIGlfZXh0 X2xhc3Q7CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICppX2V4dF9iaDsKICAgICAgICB1bnNp Z25lZCBsb25nIG1tdV9wcml2YXRlOwogICAgICAgIHUzMiBpX3Byb3RlY3Q7CiAgICAgICAgdTMy IGlfbGFzdGFsbG9jOwogICAgICAgIGludCBpX3BhX2NudDsKIyA1MSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvYWZmc19mc19pLmgiCn07CiMgMzEyICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvbGludXgvdWZzX2ZzX2kuaCIgMQojIDE2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9saW51eC91ZnNfZnNfaS5oIgpzdHJ1Y3QgdWZzX2lub2RlX2luZm8gewogICAgICAg IHVuaW9uIHsKICAgICAgICAgICAgICAgIF9fdTMyIGlfZGF0YVsxNV07CiAgICAgICAgICAgICAg ICBfX3U4IGlfc3ltbGlua1s0KjE1XTsKICAgICAgICB9IGlfdTE7CiAgICAgICAgX191MzIgaV9m bGFnczsKICAgICAgICBfX3UzMiBpX2dlbjsKICAgICAgICBfX3UzMiBpX3NoYWRvdzsKICAgICAg ICBfX3UzMiBpX3VudXNlZDE7CiAgICAgICAgX191MzIgaV91bnVzZWQyOwogICAgICAgIF9fdTMy IGlfb2VmdGZsYWc7CiAgICAgICAgX191MTYgaV9vc3luYzsKICAgICAgICBfX3UzMiBpX2xhc3Rm cmFnOwp9OwojIDMxMyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvZnMuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2Vmc19mc19pLmgiIDEK IyAxMiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvZWZzX2ZzX2kuaCIKdHlw ZWRlZiBpbnQzMl90IGVmc19ibG9ja190Owp0eXBlZGVmIHVpbnQzMl90IGVmc19pbm9fdDsKCgoK CgoKdHlwZWRlZiB1bmlvbiBleHRlbnRfdSB7CiAgICAgICAgdW5zaWduZWQgY2hhciByYXdbOF07 CiAgICAgICAgc3RydWN0IGV4dGVudF9zIHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBl eF9tYWdpYzo4OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGV4X2JuOjI0OwogICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IGV4X2xlbmd0aDo4OwogICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IGV4X29mZnNldDoyNDsKICAgICAgICB9IGNvb2tlZDsKfSBlZnNfZXh0ZW50OwoKdHlw ZWRlZiBzdHJ1Y3QgZWRldnMgewogICAgICAgIHNob3J0IG9kZXY7CiAgICAgICAgdW5zaWduZWQg aW50IG5kZXY7Cn0gZWZzX2RldnM7CgoKCgoKc3RydWN0IGVmc19kaW5vZGUgewogICAgICAgIHVf c2hvcnQgZGlfbW9kZTsKICAgICAgICBzaG9ydCBkaV9ubGluazsKICAgICAgICB1X3Nob3J0IGRp X3VpZDsKICAgICAgICB1X3Nob3J0IGRpX2dpZDsKICAgICAgICBpbnQzMl90IGRpX3NpemU7CiAg ICAgICAgaW50MzJfdCBkaV9hdGltZTsKICAgICAgICBpbnQzMl90IGRpX210aW1lOwogICAgICAg IGludDMyX3QgZGlfY3RpbWU7CiAgICAgICAgdWludDMyX3QgZGlfZ2VuOwogICAgICAgIHNob3J0 IGRpX251bWV4dGVudHM7CiAgICAgICAgdV9jaGFyIGRpX3ZlcnNpb247CiAgICAgICAgdV9jaGFy IGRpX3NwYXJlOwogICAgICAgIHVuaW9uIGRpX2FkZHIgewogICAgICAgICAgICAgICAgZWZzX2V4 dGVudCBkaV9leHRlbnRzWzEyXTsKICAgICAgICAgICAgICAgIGVmc19kZXZzIGRpX2RldjsKICAg ICAgICB9IGRpX3U7Cn07CgoKc3RydWN0IGVmc19pbm9kZV9pbmZvIHsKICAgICAgICBpbnQgbnVt ZXh0ZW50czsKICAgICAgICBpbnQgbGFzdGV4dGVudDsKCiAgICAgICAgZWZzX2V4dGVudCBleHRl bnRzWzEyXTsKfTsKIyAzMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2Zz LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9jb2RhX2ZzX2ku aCIgMQojIDEyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9jb2RhX2ZzX2ku aCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMg MTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2NvZGFfZnNfaS5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvbGlzdC5oIiAxCiMgMTQgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2NvZGFfZnNfaS5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvY29kYS5oIiAxCiMgMTA5ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9jb2RhLmgiCnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBsb25nIHVfcXVhZF90OwojIDE2NCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvY29kYS5oIgpzdHJ1Y3QgdmVudXNfZGlyZW50IHsKICAgICAgICB1bnNpZ25lZCBsb25nIGRf ZmlsZW5vOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGRfcmVjbGVuOwogICAgICAgIHVuc2lnbmVk IGNoYXIgZF90eXBlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgZF9uYW1sZW47CiAgICAgICAgY2hh ciBkX25hbWVbMjU1ICsgMV07Cn07CiMgMTk4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVk ZS9saW51eC9jb2RhLmgiCnR5cGVkZWYgdV9sb25nIFZvbHVtZUlkOwp0eXBlZGVmIHVfbG9uZyBW bm9kZUlkOwp0eXBlZGVmIHVfbG9uZyBVbmlxdWVfdDsKdHlwZWRlZiB1X2xvbmcgRmlsZVZlcnNp b247CgoKCgp0eXBlZGVmIHN0cnVjdCBWaWNlRmlkIHsKICAgIFZvbHVtZUlkIFZvbHVtZTsKICAg IFZub2RlSWQgVm5vZGU7CiAgICBVbmlxdWVfdCBVbmlxdWU7Cn0gVmljZUZpZDsKCgoKCnN0YXRp YyBfX2lubGluZV9fIGlub190IGNvZGFfZjJpKHN0cnVjdCBWaWNlRmlkICpmaWQpCnsKICAgICAg ICBpZiAoICEgZmlkICkKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGlmIChmaWQt PlZub2RlID09IDB4ZmZmZmZmZmUgfHwgZmlkLT5Wbm9kZSA9PSAweGZmZmZmZmZmKQogICAgICAg ICAgICAgICAgcmV0dXJuICgoZmlkLT5Wb2x1bWUgPDwgMjApIHwgKGZpZC0+VW5pcXVlICYgMHhm ZmZmZikpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiAoZmlkLT5VbmlxdWUg KyAoZmlkLT5Wbm9kZTw8MTApICsgKGZpZC0+Vm9sdW1lPDwyMCkpOwp9CiMgMjMzICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9jb2RhLmgiCnR5cGVkZWYgdV9pbnQzMl90IHZ1 aWRfdDsKdHlwZWRlZiB1X2ludDMyX3QgdmdpZF90OwoKCgoKc3RydWN0IGNvZGFfY3JlZCB7CiAg ICB2dWlkX3QgY3JfdWlkLCBjcl9ldWlkLCBjcl9zdWlkLCBjcl9mc3VpZDsKICAgIHZnaWRfdCBj cl9ncm91cGlkLCBjcl9lZ2lkLCBjcl9zZ2lkLCBjcl9mc2dpZDsKfTsKCgoKCgoKCmVudW0gY29k YV92dHlwZSB7IENfVk5PTiwgQ19WUkVHLCBDX1ZESVIsIENfVkJMSywgQ19WQ0hSLCBDX1ZMTkss IENfVlNPQ0ssIENfVkZJRk8sIENfVkJBRCB9OwoKc3RydWN0IGNvZGFfdmF0dHIgewogICAgICAg IGxvbmcgdmFfdHlwZTsKICAgICAgICB1X3Nob3J0IHZhX21vZGU7CiAgICAgICAgc2hvcnQgdmFf bmxpbms7CiAgICAgICAgdnVpZF90IHZhX3VpZDsKICAgICAgICB2Z2lkX3QgdmFfZ2lkOwogICAg ICAgIGxvbmcgdmFfZmlsZWlkOwogICAgICAgIHVfcXVhZF90IHZhX3NpemU7CiAgICAgICAgbG9u ZyB2YV9ibG9ja3NpemU7CiAgICAgICAgc3RydWN0IHRpbWVzcGVjIHZhX2F0aW1lOwogICAgICAg IHN0cnVjdCB0aW1lc3BlYyB2YV9tdGltZTsKICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdmFfY3Rp bWU7CiAgICAgICAgdV9sb25nIHZhX2dlbjsKICAgICAgICB1X2xvbmcgdmFfZmxhZ3M7CiAgICAg ICAgdV9xdWFkX3QgdmFfcmRldjsKICAgICAgICB1X3F1YWRfdCB2YV9ieXRlczsKICAgICAgICB1 X3F1YWRfdCB2YV9maWxlcmV2Owp9OwoKCgoKc3RydWN0IGNvZGFfc3RhdGZzIHsKICAgIGludDMy X3QgZl9ibG9ja3M7CiAgICBpbnQzMl90IGZfYmZyZWU7CiAgICBpbnQzMl90IGZfYmF2YWlsOwog ICAgaW50MzJfdCBmX2ZpbGVzOwogICAgaW50MzJfdCBmX2ZmcmVlOwp9OwojIDMzNyAiL3Vzci9z cmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvY29kYS5oIgpzdHJ1Y3QgY29kYV9pbl9oZHIg ewogICAgdW5zaWduZWQgbG9uZyBvcGNvZGU7CiAgICB1bnNpZ25lZCBsb25nIHVuaXF1ZTsKICAg IHVfc2hvcnQgcGlkOwogICAgdV9zaG9ydCBwZ2lkOwogICAgdV9zaG9ydCBzaWQ7CiAgICBzdHJ1 Y3QgY29kYV9jcmVkIGNyZWQ7Cn07CgoKc3RydWN0IGNvZGFfb3V0X2hkciB7CiAgICB1bnNpZ25l ZCBsb25nIG9wY29kZTsKICAgIHVuc2lnbmVkIGxvbmcgdW5pcXVlOwogICAgdW5zaWduZWQgbG9u ZyByZXN1bHQ7Cn07CgoKc3RydWN0IGNvZGFfcm9vdF9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0 X2hkciBvaDsKICAgIFZpY2VGaWQgVkZpZDsKfTsKCnN0cnVjdCBjb2RhX3Jvb3RfaW4gewogICAg c3RydWN0IGNvZGFfaW5faGRyIGluOwp9OwoKCnN0cnVjdCBjb2RhX29wZW5faW4gewogICAgc3Ry dWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IGZsYWdzOwp9OwoK c3RydWN0IGNvZGFfb3Blbl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIHVf cXVhZF90IGRldjsKICAgIGlub190IGlub2RlOwp9OwoKCgpzdHJ1Y3QgY29kYV9zdG9yZV9pbiB7 CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgZmxh Z3M7Cn07CgpzdHJ1Y3QgY29kYV9zdG9yZV9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBv dXQ7Cn07CgoKc3RydWN0IGNvZGFfcmVsZWFzZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIg aWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgZmxhZ3M7Cn07CgpzdHJ1Y3QgY29kYV9yZWxl YXNlX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCgpzdHJ1Y3QgY29kYV9j bG9zZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAg ICBpbnQgZmxhZ3M7Cn07CgpzdHJ1Y3QgY29kYV9jbG9zZV9vdXQgewogICAgc3RydWN0IGNvZGFf b3V0X2hkciBvdXQ7Cn07CgoKc3RydWN0IGNvZGFfaW9jdGxfaW4gewogICAgc3RydWN0IGNvZGFf aW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IGNtZDsKICAgIGludCBsZW47CiAg ICBpbnQgcndmbGFnOwogICAgY2hhciAqZGF0YTsKfTsKCnN0cnVjdCBjb2RhX2lvY3RsX291dCB7 CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgaW50IGxlbjsKICAgIGNhZGRyX3QgZGF0 YTsKfTsKCgoKc3RydWN0IGNvZGFfZ2V0YXR0cl9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIg aWg7CiAgICBWaWNlRmlkIFZGaWQ7Cn07CgpzdHJ1Y3QgY29kYV9nZXRhdHRyX291dCB7CiAgICBz dHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKfTsKCgoK c3RydWN0IGNvZGFfc2V0YXR0cl9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBW aWNlRmlkIFZGaWQ7CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOwp9OwoKc3RydWN0IGNvZGFf c2V0YXR0cl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKc3RydWN0IGNv ZGFfYWNjZXNzX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgVkZp ZDsKICAgIGludCBmbGFnczsKfTsKCnN0cnVjdCBjb2RhX2FjY2Vzc19vdXQgewogICAgc3RydWN0 IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKCgoKCgpzdHJ1Y3QgY29kYV9sb29rdXBfaW4gewogICAg c3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IG5hbWU7CiAg ICBpbnQgZmxhZ3M7Cn07CgpzdHJ1Y3QgY29kYV9sb29rdXBfb3V0IHsKICAgIHN0cnVjdCBjb2Rh X291dF9oZHIgb2g7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgdnR5cGU7Cn07CgoKCnN0cnVj dCBjb2RhX2NyZWF0ZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlk IFZGaWQ7CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOwogICAgaW50IGV4Y2w7CiAgICBpbnQg bW9kZTsKICAgIGludCBuYW1lOwp9OwoKc3RydWN0IGNvZGFfY3JlYXRlX291dCB7CiAgICBzdHJ1 Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgVmljZUZpZCBWRmlkOwogICAgc3RydWN0IGNvZGFfdmF0 dHIgYXR0cjsKfTsKCgoKc3RydWN0IGNvZGFfcmVtb3ZlX2luIHsKICAgIHN0cnVjdCBjb2RhX2lu X2hkciBpaDsKICAgIFZpY2VGaWQgVkZpZDsKICAgIGludCBuYW1lOwp9OwoKc3RydWN0IGNvZGFf cmVtb3ZlX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCgpzdHJ1Y3QgY29k YV9saW5rX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgc291cmNl RmlkOwogICAgVmljZUZpZCBkZXN0RmlkOwogICAgaW50IHRuYW1lOwp9OwoKc3RydWN0IGNvZGFf bGlua19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKCnN0cnVjdCBjb2Rh X3JlbmFtZV9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIHNvdXJj ZUZpZDsKICAgIGludCBzcmNuYW1lOwogICAgVmljZUZpZCBkZXN0RmlkOwogICAgaW50IGRlc3Ru YW1lOwp9OwoKc3RydWN0IGNvZGFfcmVuYW1lX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRy IG91dDsKfTsKCgpzdHJ1Y3QgY29kYV9ta2Rpcl9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIg aWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOwogICAgaW50 IG5hbWU7Cn07CgpzdHJ1Y3QgY29kYV9ta2Rpcl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hk ciBvaDsKICAgIFZpY2VGaWQgVkZpZDsKICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cn07CgoK CnN0cnVjdCBjb2RhX3JtZGlyX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZp Y2VGaWQgVkZpZDsKICAgIGludCBuYW1lOwp9OwoKc3RydWN0IGNvZGFfcm1kaXJfb3V0IHsKICAg IHN0cnVjdCBjb2RhX291dF9oZHIgb3V0Owp9OwoKCnN0cnVjdCBjb2RhX3N5bWxpbmtfaW4gewog ICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IHNyY25h bWU7CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOwogICAgaW50IHRuYW1lOwp9OwoKc3RydWN0 IGNvZGFfc3ltbGlua19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKc3Ry dWN0IGNvZGFfcmVhZGxpbmtfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmlj ZUZpZCBWRmlkOwp9OwoKc3RydWN0IGNvZGFfcmVhZGxpbmtfb3V0IHsKICAgIHN0cnVjdCBjb2Rh X291dF9oZHIgb2g7CiAgICBpbnQgY291bnQ7CiAgICBjYWRkcl90IGRhdGE7Cn07CgoKCnN0cnVj dCBjb2RhX2ZzeW5jX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQg VkZpZDsKfTsKCnN0cnVjdCBjb2RhX2ZzeW5jX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRy IG91dDsKfTsKCgpzdHJ1Y3QgY29kYV92Z2V0X2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBp aDsKICAgIFZpY2VGaWQgVkZpZDsKfTsKCnN0cnVjdCBjb2RhX3ZnZXRfb3V0IHsKICAgIHN0cnVj dCBjb2RhX291dF9oZHIgb2g7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgdnR5cGU7Cn07CiMg NjE2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9jb2RhLmgiCnN0cnVjdCBj b2RhX3B1cmdldXNlcl9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIHN0cnVj dCBjb2RhX2NyZWQgY3JlZDsKfTsKCgoKc3RydWN0IGNvZGFfemFwZmlsZV9vdXQgewogICAgc3Ry dWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQgQ29kYUZpZDsKfTsKCgoKc3RydWN0IGNv ZGFfemFwZGlyX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgVmljZUZpZCBD b2RhRmlkOwp9OwoKCgpzdHJ1Y3QgY29kYV96YXB2bm9kZV9vdXQgewogICAgc3RydWN0IGNvZGFf b3V0X2hkciBvaDsKICAgIHN0cnVjdCBjb2RhX2NyZWQgY3JlZDsKICAgIFZpY2VGaWQgVkZpZDsK fTsKCgoKc3RydWN0IGNvZGFfcHVyZ2VmaWRfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIg b2g7CiAgICBWaWNlRmlkIENvZGFGaWQ7Cn07CgoKCnN0cnVjdCBjb2RhX3JlcGxhY2Vfb3V0IHsK ICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBWaWNlRmlkIE5ld0ZpZDsKICAgIFZpY2VG aWQgT2xkRmlkOwp9OwoKCnN0cnVjdCBjb2RhX29wZW5fYnlfZmRfaW4gewogICAgc3RydWN0IGNv ZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IGZsYWdzOwp9OwoKc3RydWN0 IGNvZGFfb3Blbl9ieV9mZF9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIGlu dCBmZDsKCgogICAgc3RydWN0IGZpbGUgKmZoOwoKfTsKCgpzdHJ1Y3QgY29kYV9vcGVuX2J5X3Bh dGhfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAg aW50IGZsYWdzOwp9OwoKc3RydWN0IGNvZGFfb3Blbl9ieV9wYXRoX291dCB7CiAgICBzdHJ1Y3Qg Y29kYV9vdXRfaGRyIG9oOwogICAgICAgIGludCBwYXRoOwp9OwoKCnN0cnVjdCBjb2RhX3N0YXRm c19pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaW47Cn07CgpzdHJ1Y3QgY29kYV9zdGF0ZnNf b3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBzdHJ1Y3QgY29kYV9zdGF0ZnMg c3RhdDsKfTsKIyA3MDMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2NvZGEu aCIKdW5pb24gaW5wdXRBcmdzIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIHN0cnVj dCBjb2RhX29wZW5faW4gY29kYV9vcGVuOwogICAgc3RydWN0IGNvZGFfc3RvcmVfaW4gY29kYV9z dG9yZTsKICAgIHN0cnVjdCBjb2RhX3JlbGVhc2VfaW4gY29kYV9yZWxlYXNlOwogICAgc3RydWN0 IGNvZGFfY2xvc2VfaW4gY29kYV9jbG9zZTsKICAgIHN0cnVjdCBjb2RhX2lvY3RsX2luIGNvZGFf aW9jdGw7CiAgICBzdHJ1Y3QgY29kYV9nZXRhdHRyX2luIGNvZGFfZ2V0YXR0cjsKICAgIHN0cnVj dCBjb2RhX3NldGF0dHJfaW4gY29kYV9zZXRhdHRyOwogICAgc3RydWN0IGNvZGFfYWNjZXNzX2lu IGNvZGFfYWNjZXNzOwogICAgc3RydWN0IGNvZGFfbG9va3VwX2luIGNvZGFfbG9va3VwOwogICAg c3RydWN0IGNvZGFfY3JlYXRlX2luIGNvZGFfY3JlYXRlOwogICAgc3RydWN0IGNvZGFfcmVtb3Zl X2luIGNvZGFfcmVtb3ZlOwogICAgc3RydWN0IGNvZGFfbGlua19pbiBjb2RhX2xpbms7CiAgICBz dHJ1Y3QgY29kYV9yZW5hbWVfaW4gY29kYV9yZW5hbWU7CiAgICBzdHJ1Y3QgY29kYV9ta2Rpcl9p biBjb2RhX21rZGlyOwogICAgc3RydWN0IGNvZGFfcm1kaXJfaW4gY29kYV9ybWRpcjsKICAgIHN0 cnVjdCBjb2RhX3N5bWxpbmtfaW4gY29kYV9zeW1saW5rOwogICAgc3RydWN0IGNvZGFfcmVhZGxp bmtfaW4gY29kYV9yZWFkbGluazsKICAgIHN0cnVjdCBjb2RhX2ZzeW5jX2luIGNvZGFfZnN5bmM7 CiAgICBzdHJ1Y3QgY29kYV92Z2V0X2luIGNvZGFfdmdldDsKICAgIHN0cnVjdCBjb2RhX29wZW5f YnlfZmRfaW4gY29kYV9vcGVuX2J5X2ZkOwogICAgc3RydWN0IGNvZGFfb3Blbl9ieV9wYXRoX2lu IGNvZGFfb3Blbl9ieV9wYXRoOwogICAgc3RydWN0IGNvZGFfc3RhdGZzX2luIGNvZGFfc3RhdGZz Owp9OwoKdW5pb24gb3V0cHV0QXJncyB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAg c3RydWN0IGNvZGFfcm9vdF9vdXQgY29kYV9yb290OwogICAgc3RydWN0IGNvZGFfb3Blbl9vdXQg Y29kYV9vcGVuOwogICAgc3RydWN0IGNvZGFfaW9jdGxfb3V0IGNvZGFfaW9jdGw7CiAgICBzdHJ1 Y3QgY29kYV9nZXRhdHRyX291dCBjb2RhX2dldGF0dHI7CiAgICBzdHJ1Y3QgY29kYV9sb29rdXBf b3V0IGNvZGFfbG9va3VwOwogICAgc3RydWN0IGNvZGFfY3JlYXRlX291dCBjb2RhX2NyZWF0ZTsK ICAgIHN0cnVjdCBjb2RhX21rZGlyX291dCBjb2RhX21rZGlyOwogICAgc3RydWN0IGNvZGFfcmVh ZGxpbmtfb3V0IGNvZGFfcmVhZGxpbms7CiAgICBzdHJ1Y3QgY29kYV92Z2V0X291dCBjb2RhX3Zn ZXQ7CiAgICBzdHJ1Y3QgY29kYV9wdXJnZXVzZXJfb3V0IGNvZGFfcHVyZ2V1c2VyOwogICAgc3Ry dWN0IGNvZGFfemFwZmlsZV9vdXQgY29kYV96YXBmaWxlOwogICAgc3RydWN0IGNvZGFfemFwZGly X291dCBjb2RhX3phcGRpcjsKICAgIHN0cnVjdCBjb2RhX3phcHZub2RlX291dCBjb2RhX3phcHZu b2RlOwogICAgc3RydWN0IGNvZGFfcHVyZ2VmaWRfb3V0IGNvZGFfcHVyZ2VmaWQ7CiAgICBzdHJ1 Y3QgY29kYV9yZXBsYWNlX291dCBjb2RhX3JlcGxhY2U7CiAgICBzdHJ1Y3QgY29kYV9vcGVuX2J5 X2ZkX291dCBjb2RhX29wZW5fYnlfZmQ7CiAgICBzdHJ1Y3QgY29kYV9vcGVuX2J5X3BhdGhfb3V0 IGNvZGFfb3Blbl9ieV9wYXRoOwogICAgc3RydWN0IGNvZGFfc3RhdGZzX291dCBjb2RhX3N0YXRm czsKfTsKCnVuaW9uIGNvZGFfZG93bmNhbGxzIHsKCgogICAgc3RydWN0IGNvZGFfcHVyZ2V1c2Vy X291dCBwdXJnZXVzZXI7CiAgICBzdHJ1Y3QgY29kYV96YXBmaWxlX291dCB6YXBmaWxlOwogICAg c3RydWN0IGNvZGFfemFwZGlyX291dCB6YXBkaXI7CiAgICBzdHJ1Y3QgY29kYV96YXB2bm9kZV9v dXQgemFwdm5vZGU7CiAgICBzdHJ1Y3QgY29kYV9wdXJnZWZpZF9vdXQgcHVyZ2VmaWQ7CiAgICBz dHJ1Y3QgY29kYV9yZXBsYWNlX291dCByZXBsYWNlOwp9OwoKCgoKCgoKc3RydWN0IFZpY2VJb2N0 bCB7CiAgICAgICAgY2FkZHJfdCBpbiwgb3V0OwogICAgICAgIHNob3J0IGluX3NpemU7CiAgICAg ICAgc2hvcnQgb3V0X3NpemU7Cn07CgpzdHJ1Y3QgUGlvY3RsRGF0YSB7CiAgICAgICAgY29uc3Qg Y2hhciAqcGF0aDsKICAgICAgICBpbnQgZm9sbG93OwogICAgICAgIHN0cnVjdCBWaWNlSW9jdGwg dmk7Cn07CiMgNzk3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9jb2RhLmgi CnN0cnVjdCBjb2RhX21vdW50X2RhdGEgewogICAgICAgIGludCB2ZXJzaW9uOwogICAgICAgIGlu dCBmZDsKfTsKIyAxNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvY29kYV9m c19pLmgiIDIKCgoKCnN0cnVjdCBjb2RhX2lub2RlX2luZm8gewogICAgICAgIHN0cnVjdCBWaWNl RmlkIGNfZmlkOwogICAgICAgIHVfc2hvcnQgY19mbGFnczsKICAgICAgICBzdHJ1Y3QgbGlzdF9o ZWFkIGNfY2lsaXN0OwogICAgICAgIHN0cnVjdCBmaWxlICpjX2NvbnRhaW5lcjsKICAgICAgICB1 bnNpZ25lZCBpbnQgY19jb250Y291bnQ7CiAgICAgICAgc3RydWN0IGNvZGFfY3JlZCBjX2NhY2hl ZF9jcmVkOwogICAgICAgIHVuc2lnbmVkIGludCBjX2NhY2hlZF9wZXJtOwp9OwoKCgoKCgoKaW50 IGNvZGFfY25vZGVfbWFrZShzdHJ1Y3QgaW5vZGUgKiosIHN0cnVjdCBWaWNlRmlkICosIHN0cnVj dCBzdXBlcl9ibG9jayAqKTsKaW50IGNvZGFfY25vZGVfbWFrZWN0bChzdHJ1Y3QgaW5vZGUgKipp bm9kZSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CnN0cnVjdCBpbm9kZSAqY29kYV9maWRfdG9f aW5vZGUoVmljZUZpZCAqZmlkLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKdm9pZCBjb2RhX3Jl cGxhY2VfZmlkKHN0cnVjdCBpbm9kZSAqLCBWaWNlRmlkICosIFZpY2VGaWQgKik7CiMgMzE1ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvcm9tZnNfZnNfaS5oIiAxCgoKCgoKc3RydWN0IHJv bWZzX2lub2RlX2luZm8gewogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9tZXRhc2l6ZTsKICAgICAg ICB1bnNpZ25lZCBsb25nIGlfZGF0YW9mZnNldDsKfTsKIyAzMTYgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9saW51eC9zaG1lbV9mcy5oIiAxCiMgMTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNs dWRlL2xpbnV4L3NobWVtX2ZzLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBs b25nIHZhbDsKfSBzd3BfZW50cnlfdDsKCmV4dGVybiBhdG9taWNfdCBzaG1lbV9ucnBhZ2VzOwoK c3RydWN0IHNobWVtX2lub2RlX2luZm8gewogICAgICAgIHNwaW5sb2NrX3QgbG9jazsKICAgICAg ICBzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKICAgICAgICB1bnNpZ25lZCBsb25nIG5leHRfaW5kZXg7 CiAgICAgICAgc3dwX2VudHJ5X3QgaV9kaXJlY3RbMTZdOwogICAgICAgIHZvaWQgKippX2luZGly ZWN0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3dhcHBlZDsKICAgICAgICBpbnQgbG9ja2VkOwog ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKICAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2Rl Owp9OwoKc3RydWN0IHNobWVtX3NiX2luZm8gewogICAgICAgIHVuc2lnbmVkIGxvbmcgbWF4X2Js b2NrczsKICAgICAgICB1bnNpZ25lZCBsb25nIGZyZWVfYmxvY2tzOwogICAgICAgIHVuc2lnbmVk IGxvbmcgbWF4X2lub2RlczsKICAgICAgICB1bnNpZ25lZCBsb25nIGZyZWVfaW5vZGVzOwogICAg ICAgIHNwaW5sb2NrX3Qgc3RhdF9sb2NrOwp9OwojIDMxNyAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2xpbnV4L3NtYl9mc19pLmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUv bGludXgvc21iX2ZzX2kuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51 eC90eXBlcy5oIiAxCiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3Nt Yl9mc19pLmgiIDIKCgoKCnN0cnVjdCBzbWJfaW5vZGVfaW5mbyB7CgoKCgoKICAgICAgICB1bnNp Z25lZCBpbnQgb3BlbjsKICAgICAgICBfX3UxNiBmaWxlaWQ7CiAgICAgICAgX191MTYgYXR0cjsK CiAgICAgICAgX191MTYgYWNjZXNzOwogICAgICAgIF9fdTE2IGZsYWdzOwogICAgICAgIHVuc2ln bmVkIGxvbmcgb2xkbXRpbWU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBjbG9zZWQ7CiAgICAgICAg dW5zaWduZWQgb3BlbmVyczsKfTsKIyAzMTggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9o ZnNfZnNfaS5oIiAxCiMgMTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2hm c19mc19pLmgiCnN0cnVjdCBoZnNfaW5vZGVfaW5mbyB7CiAgICAgICAgaW50IG1hZ2ljOwoKICAg ICAgICB1bnNpZ25lZCBsb25nIG1tdV9wcml2YXRlOwogICAgICAgIHN0cnVjdCBoZnNfY2F0X2Vu dHJ5ICplbnRyeTsKCgogICAgICAgIHN0cnVjdCBoZnNfZm9yayAqZm9yazsKICAgICAgICBpbnQg Y29udmVydDsKCgogICAgICAgIGlub190IGZpbGVfdHlwZTsKICAgICAgICBjaGFyIGRpcl9zaXpl OwoKCiAgICAgICAgY29uc3Qgc3RydWN0IGhmc19oZHJfbGF5b3V0ICpkZWZhdWx0X2xheW91dDsK ICAgICAgICBzdHJ1Y3QgaGZzX2hkcl9sYXlvdXQgKmxheW91dDsKCgogICAgICAgIGludCB0el9z ZWNvbmRzd2VzdDsKCgogICAgICAgIHZvaWQgKCpkX2Ryb3Bfb3ApKHN0cnVjdCBkZW50cnkgKiwg Y29uc3QgaW5vX3QpOwp9OwojIDMxOSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2FkZnNf ZnNfaS5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2FkZnNf ZnNfaS5oIgpzdHJ1Y3QgYWRmc19pbm9kZV9pbmZvIHsKICAgICAgICB1bnNpZ25lZCBsb25nIG1t dV9wcml2YXRlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lkOwogICAgICAgIF9fdTMy IGxvYWRhZGRyOwogICAgICAgIF9fdTMyIGV4ZWNhZGRyOwogICAgICAgIHVuc2lnbmVkIGludCBm aWxldHlwZTsKICAgICAgICB1bnNpZ25lZCBpbnQgYXR0cjsKICAgICAgICBpbnQgc3RhbXBlZDox Owp9OwojIDMyMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvZnMuaCIgMgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3FueDRfZnNfaS5oIiAxCiMg MTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3FueDRfZnNfaS5oIgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3FueHR5cGVzLmgiIDEKIyAxNSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvcW54dHlwZXMuaCIKdHlwZWRlZiBf X3UxNiBxbng0X254dG50X3Q7CnR5cGVkZWYgX191OCBxbng0X2Z0eXBlX3Q7Cgp0eXBlZGVmIHN0 cnVjdCB7CiAgICAgICAgX191MzIgeHRudF9ibGs7CiAgICAgICAgX191MzIgeHRudF9zaXplOwp9 IHFueDRfeHRudF90OwoKdHlwZWRlZiBfX3UxNiBxbng0X21vZGVfdDsKdHlwZWRlZiBfX3UxNiBx bng0X211aWRfdDsKdHlwZWRlZiBfX3UxNiBxbng0X21naWRfdDsKdHlwZWRlZiBfX3UzMiBxbng0 X29mZl90Owp0eXBlZGVmIF9fdTE2IHFueDRfbmxpbmtfdDsKIyAxNSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvcW54NF9mc19pLmgiIDIKCgoKCnN0cnVjdCBxbng0X2lub2Rl X2luZm8gewogICAgICAgIGNoYXIgaV9yZXNlcnZlZFsxNl07CiAgICAgICAgcW54NF9vZmZfdCBp X3NpemU7CiAgICAgICAgcW54NF94dG50X3QgaV9maXJzdF94dG50OwogICAgICAgIF9fdTMyIGlf eGJsazsKICAgICAgICBfX3MzMiBpX2Z0aW1lOwogICAgICAgIF9fczMyIGlfbXRpbWU7CiAgICAg ICAgX19zMzIgaV9hdGltZTsKICAgICAgICBfX3MzMiBpX2N0aW1lOwogICAgICAgIHFueDRfbnh0 bnRfdCBpX251bV94dG50czsKICAgICAgICBxbng0X21vZGVfdCBpX21vZGU7CiAgICAgICAgcW54 NF9tdWlkX3QgaV91aWQ7CiAgICAgICAgcW54NF9tZ2lkX3QgaV9naWQ7CiAgICAgICAgcW54NF9u bGlua190IGlfbmxpbms7CiAgICAgICAgX191OCBpX3plcm9bNF07CiAgICAgICAgcW54NF9mdHlw ZV90IGlfdHlwZTsKICAgICAgICBfX3U4IGlfc3RhdHVzOwogICAgICAgIHVuc2lnbmVkIGxvbmcg bW11X3ByaXZhdGU7Cn07CiMgMzIxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51 eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvcmVpc2Vy ZnNfZnNfaS5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgv bGlzdC5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvcmVpc2Vy ZnNfZnNfaS5oIiAyCgpzdHJ1Y3QgcmVpc2VyZnNfaW5vZGVfaW5mbyB7CiAgX191MzIgaV9rZXkg WzRdOwoKCgoKCgogIGludCBpX3ZlcnNpb247CgogIGludCBpX3BhY2tfb25fY2xvc2UgOwoKICBf X3UzMiBpX2ZpcnN0X2RpcmVjdF9ieXRlOwojIDM1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9saW51eC9yZWlzZXJmc19mc19pLmgiCiAgaW50IGlfcHJlYWxsb2NfYmxvY2s7CiAgaW50 IGlfcHJlYWxsb2NfY291bnQ7CiAgc3RydWN0IGxpc3RfaGVhZCBpX3ByZWFsbG9jX2xpc3Q7CgoK CgogIGludCBub3BhY2s7CgoKCgogIHVuc2lnbmVkIGxvbmcgaV90cmFuc19pZCA7CiAgdW5zaWdu ZWQgbG9uZyBpX3RyYW5zX2luZGV4IDsKfTsKIyAzMjIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9p bmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9s aW51eC9iZnNfZnNfaS5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xp bnV4L2Jmc19mc19pLmgiCnN0cnVjdCBiZnNfaW5vZGVfaW5mbyB7CiAgICAgICAgdW5zaWduZWQg bG9uZyBpX2Rza19pbm87CiAgICAgICAgdW5zaWduZWQgbG9uZyBpX3NibG9jazsKICAgICAgICB1 bnNpZ25lZCBsb25nIGlfZWJsb2NrOwp9OwojIDMyMyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2lu Y2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xp bnV4L3VkZl9mc19pLmgiIDEKIyAyNCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvdWRmX2ZzX2kuaCIKdHlwZWRlZiBzdHJ1Y3QKewogICAgICAgIF9fdTMyIGxvZ2ljYWxCbG9j a051bTsKICAgICAgICBfX3UxNiBwYXJ0aXRpb25SZWZlcmVuY2VOdW07Cn0gbGJfYWRkcjsKCgpz dHJ1Y3QgdWRmX2lub2RlX2luZm8KewogICAgICAgIGxvbmcgaV91bXRpbWU7CiAgICAgICAgbG9u ZyBpX3VjdGltZTsKICAgICAgICBsb25nIGlfY3J0aW1lOwogICAgICAgIGxvbmcgaV91Y3J0aW1l OwoKICAgICAgICBsYl9hZGRyIGlfbG9jYXRpb247CiAgICAgICAgX191NjQgaV91bmlxdWU7CiAg ICAgICAgX191MzIgaV9sZW5FQXR0cjsKICAgICAgICBfX3UzMiBpX2xlbkFsbG9jOwogICAgICAg IF9fdTY0IGlfbGVuRXh0ZW50czsKICAgICAgICBfX3UzMiBpX25leHRfYWxsb2NfYmxvY2s7CiAg ICAgICAgX191MzIgaV9uZXh0X2FsbG9jX2dvYWw7CiAgICAgICAgdW5zaWduZWQgaV9hbGxvY190 eXBlIDogMzsKICAgICAgICB1bnNpZ25lZCBpX2V4dGVuZGVkX2ZlIDogMTsKICAgICAgICB1bnNp Z25lZCBpX3N0cmF0XzQwOTYgOiAxOwogICAgICAgIHVuc2lnbmVkIGlfbmV3X2lub2RlIDogMTsK ICAgICAgICB1bnNpZ25lZCByZXNlcnZlZCA6IDI2Owp9OwojIDMyNCAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9p bmNsdWRlL2xpbnV4L25jcF9mc19pLmgiIDEKIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2lu Y2x1ZGUvbGludXgvbmNwX2ZzX2kuaCIKc3RydWN0IG5jcF9pbm9kZV9pbmZvIHsKICAgICAgICBf X3UzMiBkaXJFbnROdW0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgRG9z RGlyTnVtIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIHZvbE51bWJlciBf X2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBud2F0dHI7CiAgICAgICAgc3Ry dWN0IHNlbWFwaG9yZSBvcGVuX3NlbTsKICAgICAgICBhdG9taWNfdCBvcGVuZWQ7CiAgICAgICAg aW50IGFjY2VzczsKICAgICAgICBfX3UzMiBzZXJ2ZXJfZmlsZV9oYW5kbGUgX19hdHRyaWJ1dGVf XygocGFja2VkKSk7CiAgICAgICAgX191OCBvcGVuX2NyZWF0ZV9hY3Rpb24gX19hdHRyaWJ1dGVf XygocGFja2VkKSk7CiAgICAgICAgX191OCBmaWxlX2hhbmRsZVs2XSBfX2F0dHJpYnV0ZV9fKChw YWNrZWQpKTsKfTsKIyAzMjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2Zz LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9wcm9jX2ZzX2ku aCIgMQpzdHJ1Y3QgcHJvY19pbm9kZV9pbmZvIHsKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3Qg KnRhc2s7CiAgICAgICAgaW50IHR5cGU7CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAg aW50ICgqcHJvY19nZXRfbGluaykoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiosIHN0 cnVjdCB2ZnNtb3VudCAqKik7CiAgICAgICAgICAgICAgICBpbnQgKCpwcm9jX3JlYWQpKHN0cnVj dCB0YXNrX3N0cnVjdCAqdGFzaywgY2hhciAqcGFnZSk7CiAgICAgICAgfSBvcDsKICAgICAgICBz dHJ1Y3QgZmlsZSAqZmlsZTsKfTsKIyAzMjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC91 c2JkZXZfZnNfaS5oIiAxCnN0cnVjdCB1c2JfZGV2aWNlOwpzdHJ1Y3QgdXNiX2J1czsKCnN0cnVj dCB1c2JkZXZfaW5vZGVfaW5mbyB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBkbGlzdDsKICAg ICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHNsaXN0OwogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAg ICAgIHN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNiX2J1 cyAqYnVzOwogICAgICAgIH0gcDsKfTsKIyAzMjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNs dWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51 eC9qZmZzMl9mc19pLmgiIDEKIyAxNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvamZmczJfZnNfaS5oIgpzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyB7CiMgMjYgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX2kuaCIKICAgICAgICBzdHJ1Y3Qg c2VtYXBob3JlIHNlbTsKCgogICAgICAgIF9fdTMyIGhpZ2hlc3RfdmVyc2lvbjsKCgogICAgICAg IHN0cnVjdCBqZmZzMl9ub2RlX2ZyYWcgKmZyYWdsaXN0OwoKCgoKCgogICAgICAgIHN0cnVjdCBq ZmZzMl9mdWxsX2Rub2RlICptZXRhZGF0YTsKCgogICAgICAgIHN0cnVjdCBqZmZzMl9mdWxsX2Rp cmVudCAqZGVudHM7CgoKICAgICAgICBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmlub2NhY2hl OwoKCgoKCiAgICAgICAgX191MTYgZmxhZ3M7CiAgICAgICAgX191OCB1c2VyY29tcHI7Cn07CiMg MzI4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvY3JhbWZzX2ZzX3NiLmgiIDEKCgoKCgoK c3RydWN0IGNyYW1mc19zYl9pbmZvIHsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg bG9uZyBtYWdpYzsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplOwog ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGJsb2NrczsKICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmaWxlczsKICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgbG9uZyBmbGFnczsKfTsKIyAzMjkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNs dWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51 eC9ob3N0ZnNfZnNfaS5oIiAxCgoKCnN0cnVjdCBob3N0ZnNfaW5vZGVfaW5mbyB7CiAgICAgICAg Y2hhciAqaG9zdF9maWxlbmFtZTsKICAgICAgICBpbnQgZmQ7CiAgICAgICAgaW50IG1vZGU7Cn07 CiMgMzMwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMzU2 ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIgpzdHJ1Y3QgaWF0dHIg ewogICAgICAgIHVuc2lnbmVkIGludCBpYV92YWxpZDsKICAgICAgICB1bW9kZV90IGlhX21vZGU7 CiAgICAgICAgdWlkX3QgaWFfdWlkOwogICAgICAgIGdpZF90IGlhX2dpZDsKICAgICAgICBsb2Zm X3QgaWFfc2l6ZTsKICAgICAgICB0aW1lX3QgaWFfYXRpbWU7CiAgICAgICAgdGltZV90IGlhX210 aW1lOwogICAgICAgIHRpbWVfdCBpYV9jdGltZTsKICAgICAgICB1bnNpZ25lZCBpbnQgaWFfYXR0 cl9mbGFnczsKfTsKIyAzODAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2Zz LmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvcXVvdGEuaCIgMQoj IDQyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9xdW90YS5oIgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDEKCgoKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vZXJybm8uaCIgMQojIDUgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIKIyA0MyAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvcXVvdGEuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyA0NCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2lu Y2x1ZGUvbGludXgvcXVvdGEuaCIgMgoKdHlwZWRlZiBfX2tlcm5lbF91aWQzMl90IHFpZF90Owp0 eXBlZGVmIF9fdTY0IHFzaXplX3Q7CiMgMTE3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVk ZS9saW51eC9xdW90YS5oIgpzdHJ1Y3QgZGlza19kcWJsayB7CiAgICAgICAgX191MzIgZHFiX2lk OwogICAgICAgIF9fdTMyIGRxYl9paGFyZGxpbWl0OwogICAgICAgIF9fdTMyIGRxYl9pc29mdGxp bWl0OwogICAgICAgIF9fdTMyIGRxYl9jdXJpbm9kZXM7CiAgICAgICAgX191MzIgZHFiX2JoYXJk bGltaXQ7CiAgICAgICAgX191MzIgZHFiX2Jzb2Z0bGltaXQ7CiAgICAgICAgX191NjQgZHFiX2N1 cnNwYWNlOwogICAgICAgIF9fdTY0IGRxYl9idGltZTsKICAgICAgICBfX3U2NCBkcWJfaXRpbWU7 Cn07CgoKc3RydWN0IG1lbV9kcWJsayB7CiAgICAgICAgdW5zaWduZWQgaW50IGRxYl9paGFyZGxp bWl0OwogICAgICAgIHVuc2lnbmVkIGludCBkcWJfaXNvZnRsaW1pdDsKICAgICAgICB1bnNpZ25l ZCBpbnQgZHFiX2N1cmlub2RlczsKICAgICAgICB1bnNpZ25lZCBpbnQgZHFiX2JoYXJkbGltaXQ7 CiAgICAgICAgdW5zaWduZWQgaW50IGRxYl9ic29mdGxpbWl0OwogICAgICAgIHFzaXplX3QgZHFi X2N1cnNwYWNlOwogICAgICAgIF9fa2VybmVsX3RpbWVfdCBkcWJfYnRpbWU7CiAgICAgICAgX19r ZXJuZWxfdGltZV90IGRxYl9pdGltZTsKfTsKCgoKCgpzdHJ1Y3QgZGlza19kcWhlYWRlciB7CiAg ICAgICAgX191MzIgZHFoX21hZ2ljOwogICAgICAgIF9fdTMyIGRxaF92ZXJzaW9uOwp9OwoKCnN0 cnVjdCBkaXNrX2RxaW5mbyB7CiAgICAgICAgX191MzIgZHFpX2JncmFjZTsKICAgICAgICBfX3Uz MiBkcWlfaWdyYWNlOwogICAgICAgIF9fdTMyIGRxaV9mbGFnczsKICAgICAgICBfX3UzMiBkcWlf YmxvY2tzOwogICAgICAgIF9fdTMyIGRxaV9mcmVlX2JsazsKICAgICAgICBfX3UzMiBkcWlfZnJl ZV9lbnRyeTsKfTsKCgpzdHJ1Y3QgbWVtX2RxaW5mbyB7CiAgICAgICAgdW5zaWduZWQgaW50IGRx aV9iZ3JhY2U7CiAgICAgICAgdW5zaWduZWQgaW50IGRxaV9pZ3JhY2U7CiAgICAgICAgdW5zaWdu ZWQgaW50IGRxaV9mbGFnczsKICAgICAgICB1bnNpZ25lZCBpbnQgZHFpX2Jsb2NrczsKICAgICAg ICB1bnNpZ25lZCBpbnQgZHFpX2ZyZWVfYmxrOwogICAgICAgIHVuc2lnbmVkIGludCBkcWlfZnJl ZV9lbnRyeTsKfTsKCgoKCgoKZXh0ZXJuIGlubGluZSB2b2lkIG1hcmtfaW5mb19kaXJ0eShzdHJ1 Y3QgbWVtX2RxaW5mbyAqaW5mbykKewogICAgICAgIGluZm8tPmRxaV9mbGFncyB8PSAweDAwMTA7 Cn0KCgoKCgoKc3RydWN0IGRpc2tfZHFkYmhlYWRlciB7CiAgICAgICAgX191MzIgZHFkaF9uZXh0 X2ZyZWU7CiAgICAgICAgX191MzIgZHFkaF9wcmV2X2ZyZWU7CiAgICAgICAgX191MTYgZHFkaF9l bnRyaWVzOwogICAgICAgIF9fdTE2IGRxZGhfcGFkMTsKICAgICAgICBfX3UzMiBkcWRoX3BhZDI7 Cn07CiMgMjAwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9xdW90YS5oIgpz dHJ1Y3QgZHFzdGF0cyB7CiAgICAgICAgX191MzIgbG9va3VwczsKICAgICAgICBfX3UzMiBkcm9w czsKICAgICAgICBfX3UzMiByZWFkczsKICAgICAgICBfX3UzMiB3cml0ZXM7CiAgICAgICAgX191 MzIgY2FjaGVfaGl0czsKICAgICAgICBfX3UzMiBhbGxvY2F0ZWRfZHF1b3RzOwogICAgICAgIF9f dTMyIGZyZWVfZHF1b3RzOwogICAgICAgIF9fdTMyIHN5bmNzOwogICAgICAgIF9fdTMyIHZlcnNp b247Cn07CgoKCmV4dGVybiBpbnQgbnJfZHF1b3RzLCBucl9mcmVlX2RxdW90czsKIyAyMjUgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3F1b3RhLmgiCnN0cnVjdCBkcXVvdCB7 CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBkcV9oYXNoOwogICAgICAgIHN0cnVjdCBsaXN0X2hl YWQgZHFfaW51c2U7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBkcV9mcmVlOwogICAgICAgIHdh aXRfcXVldWVfaGVhZF90IGRxX3dhaXRfbG9jazsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCBk cV93YWl0X2ZyZWU7CiAgICAgICAgaW50IGRxX2NvdW50OwogICAgICAgIGludCBkcV9kdXBfcmVm OwoKCiAgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpkcV9zYjsKICAgICAgICBxaWRfdCBkcV9p ZDsKICAgICAgICBrZGV2X3QgZHFfZGV2OwogICAgICAgIHNob3J0IGRxX3R5cGU7CiAgICAgICAg c2hvcnQgZHFfZmxhZ3M7CiAgICAgICAgbG9mZl90IGRxX29mZjsKICAgICAgICB1bnNpZ25lZCBs b25nIGRxX3JlZmVyZW5jZWQ7CgogICAgICAgIHN0cnVjdCBtZW1fZHFibGsgZHFfZHFiOwp9Owoj IDI3NCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvcXVvdGEuaCIKdHlwZWRl ZiBjaGFyICpkcWJ1Zl90OwojIDM4MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L21vdW50 LmgiIDEKIyAzODIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIK CgoKCnN0cnVjdCBwYWdlOwpzdHJ1Y3QgYWRkcmVzc19zcGFjZTsKCnN0cnVjdCBhZGRyZXNzX3Nw YWNlX29wZXJhdGlvbnMgewogICAgICAgIGludCAoKndyaXRlcGFnZSkoc3RydWN0IHBhZ2UgKik7 CiAgICAgICAgaW50ICgqcmVhZHBhZ2UpKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICopOwog ICAgICAgIGludCAoKnN5bmNfcGFnZSkoc3RydWN0IHBhZ2UgKik7CiAgICAgICAgaW50ICgqcHJl cGFyZV93cml0ZSkoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQsIHVuc2ln bmVkKTsKICAgICAgICBpbnQgKCpjb21taXRfd3JpdGUpKHN0cnVjdCBmaWxlICosIHN0cnVjdCBw YWdlICosIHVuc2lnbmVkLCB1bnNpZ25lZCk7CiAgICAgICAgdm9pZCAoKnJlbW92ZXBhZ2UpKHN0 cnVjdCBwYWdlICopOwoKICAgICAgICBpbnQgKCpibWFwKShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAq LCBsb25nKTsKICAgICAgICBpbnQgKCpmbHVzaHBhZ2UpIChzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25l ZCBsb25nKTsKICAgICAgICBpbnQgKCpyZWxlYXNlcGFnZSkgKHN0cnVjdCBwYWdlICosIGludCk7 Cn07CgpzdHJ1Y3QgYWRkcmVzc19zcGFjZSB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBjbGVh bl9wYWdlczsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5X3BhZ2VzOwogICAgICAgIHN0 cnVjdCBsaXN0X2hlYWQgbG9ja2VkX3BhZ2VzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbnJwYWdl czsKICAgICAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zICphX29wczsKICAgICAg ICBzdHJ1Y3QgaW5vZGUgKmhvc3Q7CiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICppX21t YXA7CiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICppX21tYXBfc2hhcmVkOwogICAgICAg IHNwaW5sb2NrX3QgaV9zaGFyZWRfbG9jazsKICAgICAgICBpbnQgZ2ZwX21hc2s7Cn07CgpzdHJ1 Y3QgY2hhcl9kZXZpY2UgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgaGFzaDsKICAgICAgICBh dG9taWNfdCBjb3VudDsKICAgICAgICBkZXZfdCBkZXY7CiAgICAgICAgYXRvbWljX3Qgb3BlbmVy czsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKfTsKCnN0cnVjdCBibG9ja19kZXZpY2Ug ewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgYmRfaGFzaDsKICAgICAgICBhdG9taWNfdCBiZF9j b3VudDsKCiAgICAgICAgZGV2X3QgYmRfZGV2OwogICAgICAgIGF0b21pY190IGJkX29wZW5lcnM7 CiAgICAgICAgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zICpiZF9vcDsKICAg ICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGJkX3NlbTsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGJk X2lub2RlczsKfTsKCnN0cnVjdCBpbm9kZSB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpX2hh c2g7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpX2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3Rf aGVhZCBpX2RlbnRyeTsKCiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpX2RpcnR5X2J1ZmZlcnM7 CgogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9pbm87CiAgICAgICAgYXRvbWljX3QgaV9jb3VudDsK ICAgICAgICBrZGV2X3QgaV9kZXY7CiAgICAgICAgdW1vZGVfdCBpX21vZGU7CiAgICAgICAgbmxp bmtfdCBpX25saW5rOwogICAgICAgIHVpZF90IGlfdWlkOwogICAgICAgIGdpZF90IGlfZ2lkOwog ICAgICAgIGtkZXZfdCBpX3JkZXY7CiAgICAgICAgbG9mZl90IGlfc2l6ZTsKICAgICAgICB0aW1l X3QgaV9hdGltZTsKICAgICAgICB0aW1lX3QgaV9tdGltZTsKICAgICAgICB0aW1lX3QgaV9jdGlt ZTsKICAgICAgICB1bnNpZ25lZCBpbnQgaV9ibGtiaXRzOwogICAgICAgIHVuc2lnbmVkIGxvbmcg aV9ibGtzaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9ibG9ja3M7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBpX3ZlcnNpb247CiAgICAgICAgdW5zaWduZWQgc2hvcnQgaV9ieXRlczsKICAgICAg ICBzdHJ1Y3Qgc2VtYXBob3JlIGlfc2VtOwogICAgICAgIHN0cnVjdCByd19zZW1hcGhvcmUgaV90 cnVuY2F0ZV9zZW07CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBpX3pvbWJpZTsKICAgICAgICBz dHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyAqaV9vcDsKICAgICAgICBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zICppX2ZvcDsKICAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmlfc2I7CiAgICAgICAgd2Fp dF9xdWV1ZV9oZWFkX3QgaV93YWl0OwogICAgICAgIHN0cnVjdCBmaWxlX2xvY2sgKmlfZmxvY2s7 CiAgICAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmlfbWFwcGluZzsKICAgICAgICBzdHJ1Y3Qg YWRkcmVzc19zcGFjZSBpX2RhdGE7CiAgICAgICAgc3RydWN0IGRxdW90ICppX2RxdW90WzJdOwoK ICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGlfZGV2aWNlczsKICAgICAgICBzdHJ1Y3QgcGlwZV9p bm9kZV9pbmZvICppX3BpcGU7CiAgICAgICAgc3RydWN0IGJsb2NrX2RldmljZSAqaV9iZGV2Owog ICAgICAgIHN0cnVjdCBjaGFyX2RldmljZSAqaV9jZGV2OwoKICAgICAgICB1bnNpZ25lZCBsb25n IGlfZG5vdGlmeV9tYXNrOwogICAgICAgIHN0cnVjdCBkbm90aWZ5X3N0cnVjdCAqaV9kbm90aWZ5 OwoKICAgICAgICB1bnNpZ25lZCBsb25nIGlfc3RhdGU7CgogICAgICAgIHVuc2lnbmVkIGludCBp X2ZsYWdzOwogICAgICAgIHVuc2lnbmVkIGNoYXIgaV9zb2NrOwoKICAgICAgICBhdG9taWNfdCBp X3dyaXRlY291bnQ7CiAgICAgICAgdW5zaWduZWQgaW50IGlfYXR0cl9mbGFnczsKICAgICAgICBf X3UzMiBpX2dlbmVyYXRpb247CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgc3RydWN0 IG1pbml4X2lub2RlX2luZm8gbWluaXhfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBleHQyX2lu b2RlX2luZm8gZXh0Ml9pOwogICAgICAgICAgICAgICAgc3RydWN0IGV4dDNfaW5vZGVfaW5mbyBl eHQzX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgaHBmc19pbm9kZV9pbmZvIGhwZnNfaTsKICAg ICAgICAgICAgICAgIHN0cnVjdCBudGZzX2lub2RlX2luZm8gbnRmc19pOwogICAgICAgICAgICAg ICAgc3RydWN0IG1zZG9zX2lub2RlX2luZm8gbXNkb3NfaTsKICAgICAgICAgICAgICAgIHN0cnVj dCB1bXNkb3NfaW5vZGVfaW5mbyB1bXNkb3NfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBpc29f aW5vZGVfaW5mbyBpc29mc19pOwogICAgICAgICAgICAgICAgc3RydWN0IHN5c3ZfaW5vZGVfaW5m byBzeXN2X2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgYWZmc19pbm9kZV9pbmZvIGFmZnNfaTsK ICAgICAgICAgICAgICAgIHN0cnVjdCB1ZnNfaW5vZGVfaW5mbyB1ZnNfaTsKICAgICAgICAgICAg ICAgIHN0cnVjdCBlZnNfaW5vZGVfaW5mbyBlZnNfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBy b21mc19pbm9kZV9pbmZvIHJvbWZzX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2htZW1faW5v ZGVfaW5mbyBzaG1lbV9pOwogICAgICAgICAgICAgICAgc3RydWN0IGNvZGFfaW5vZGVfaW5mbyBj b2RhX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc21iX2lub2RlX2luZm8gc21iZnNfaTsKICAg ICAgICAgICAgICAgIHN0cnVjdCBoZnNfaW5vZGVfaW5mbyBoZnNfaTsKICAgICAgICAgICAgICAg IHN0cnVjdCBhZGZzX2lub2RlX2luZm8gYWRmc19pOwogICAgICAgICAgICAgICAgc3RydWN0IHFu eDRfaW5vZGVfaW5mbyBxbng0X2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVpc2VyZnNfaW5v ZGVfaW5mbyByZWlzZXJmc19pOwogICAgICAgICAgICAgICAgc3RydWN0IGJmc19pbm9kZV9pbmZv IGJmc19pOwogICAgICAgICAgICAgICAgc3RydWN0IHVkZl9pbm9kZV9pbmZvIHVkZl9pOwogICAg ICAgICAgICAgICAgc3RydWN0IG5jcF9pbm9kZV9pbmZvIG5jcGZzX2k7CiAgICAgICAgICAgICAg ICBzdHJ1Y3QgcHJvY19pbm9kZV9pbmZvIHByb2NfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBz b2NrZXQgc29ja2V0X2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNiZGV2X2lub2RlX2luZm8g dXNiZGV2X2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyBqZmZzMl9p OwogICAgICAgICAgICAgICAgc3RydWN0IGhvc3Rmc19pbm9kZV9pbmZvIGhvc3Rmc19pOwogICAg ICAgICAgICAgICAgdm9pZCAqZ2VuZXJpY19pcDsKICAgICAgICB9IHU7Cn07CgpzdHJ1Y3QgZm93 bl9zdHJ1Y3QgewogICAgICAgIGludCBwaWQ7CiAgICAgICAgdWlkX3QgdWlkLCBldWlkOwogICAg ICAgIGludCBzaWdudW07Cn07CgpzdHJ1Y3QgZmlsZSB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVh ZCBmX2xpc3Q7CiAgICAgICAgc3RydWN0IGRlbnRyeSAqZl9kZW50cnk7CiAgICAgICAgc3RydWN0 IHZmc21vdW50ICpmX3Zmc21udDsKICAgICAgICBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmX29w OwogICAgICAgIGF0b21pY190IGZfY291bnQ7CiAgICAgICAgdW5zaWduZWQgaW50IGZfZmxhZ3M7 CiAgICAgICAgbW9kZV90IGZfbW9kZTsKICAgICAgICBsb2ZmX3QgZl9wb3M7CiAgICAgICAgdW5z aWduZWQgbG9uZyBmX3JlYWRhLCBmX3JhbWF4LCBmX3JhZW5kLCBmX3JhbGVuLCBmX3Jhd2luOwog ICAgICAgIHN0cnVjdCBmb3duX3N0cnVjdCBmX293bmVyOwogICAgICAgIHVuc2lnbmVkIGludCBm X3VpZCwgZl9naWQ7CiAgICAgICAgaW50IGZfZXJyb3I7CgogICAgICAgIHVuc2lnbmVkIGxvbmcg Zl92ZXJzaW9uOwoKCiAgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhOwp9OwpleHRlcm4gc3Bpbmxv Y2tfdCBmaWxlc19sb2NrOwoKCgoKCgpleHRlcm4gaW50IGluaXRfcHJpdmF0ZV9maWxlKHN0cnVj dCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKIyA1NjkgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiCnR5cGVkZWYgc3RydWN0IGZpbGVzX3N0cnVjdCAqZmxf b3duZXJfdDsKCnN0cnVjdCBmaWxlX2xvY2sgewogICAgICAgIHN0cnVjdCBmaWxlX2xvY2sgKmZs X25leHQ7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBmbF9saW5rOwogICAgICAgIHN0cnVjdCBs aXN0X2hlYWQgZmxfYmxvY2s7CiAgICAgICAgZmxfb3duZXJfdCBmbF9vd25lcjsKICAgICAgICB1 bnNpZ25lZCBpbnQgZmxfcGlkOwogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IGZsX3dhaXQ7CiAg ICAgICAgc3RydWN0IGZpbGUgKmZsX2ZpbGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBmbF9mbGFn czsKICAgICAgICB1bnNpZ25lZCBjaGFyIGZsX3R5cGU7CiAgICAgICAgbG9mZl90IGZsX3N0YXJ0 OwogICAgICAgIGxvZmZfdCBmbF9lbmQ7CgogICAgICAgIHZvaWQgKCpmbF9ub3RpZnkpKHN0cnVj dCBmaWxlX2xvY2sgKik7CiAgICAgICAgdm9pZCAoKmZsX2luc2VydCkoc3RydWN0IGZpbGVfbG9j ayAqKTsKICAgICAgICB2b2lkICgqZmxfcmVtb3ZlKShzdHJ1Y3QgZmlsZV9sb2NrICopOwoKICAg ICAgICBzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqIGZsX2Zhc3luYzsKCiAgICAgICAgdW5pb24gewog ICAgICAgICAgICAgICAgc3RydWN0IG5mc19sb2NrX2luZm8gbmZzX2ZsOwogICAgICAgIH0gZmxf dTsKfTsKIyA2MDIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiCmV4 dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGZpbGVfbG9ja19saXN0OwoKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mY250bC5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvYXNtL2ZjbnRsLmgiIDEKIyA2OSAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvYXNtL2ZjbnRsLmgiCnN0cnVjdCBmbG9jayB7CiAgICAgICAgc2hvcnQgbF90eXBl OwogICAgICAgIHNob3J0IGxfd2hlbmNlOwogICAgICAgIG9mZl90IGxfc3RhcnQ7CiAgICAgICAg b2ZmX3QgbF9sZW47CiAgICAgICAgcGlkX3QgbF9waWQ7Cn07CgpzdHJ1Y3QgZmxvY2s2NCB7CiAg ICAgICAgc2hvcnQgbF90eXBlOwogICAgICAgIHNob3J0IGxfd2hlbmNlOwogICAgICAgIGxvZmZf dCBsX3N0YXJ0OwogICAgICAgIGxvZmZfdCBsX2xlbjsKICAgICAgICBwaWRfdCBsX3BpZDsKfTsK IyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mY250bC5oIiAyCiMgNjA1 ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIiAyCgpleHRlcm4gaW50 IGZjbnRsX2dldGxrKHVuc2lnbmVkIGludCwgc3RydWN0IGZsb2NrICopOwpleHRlcm4gaW50IGZj bnRsX3NldGxrKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBzdHJ1Y3QgZmxvY2sgKik7Cgpl eHRlcm4gaW50IGZjbnRsX2dldGxrNjQodW5zaWduZWQgaW50LCBzdHJ1Y3QgZmxvY2s2NCAqKTsK ZXh0ZXJuIGludCBmY250bF9zZXRsazY0KHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBzdHJ1 Y3QgZmxvY2s2NCAqKTsKCgpleHRlcm4gdm9pZCBsb2Nrc19pbml0X2xvY2soc3RydWN0IGZpbGVf bG9jayAqKTsKZXh0ZXJuIHZvaWQgbG9ja3NfY29weV9sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKiwg c3RydWN0IGZpbGVfbG9jayAqKTsKZXh0ZXJuIHZvaWQgbG9ja3NfcmVtb3ZlX3Bvc2l4KHN0cnVj dCBmaWxlICosIGZsX293bmVyX3QpOwpleHRlcm4gdm9pZCBsb2Nrc19yZW1vdmVfZmxvY2soc3Ry dWN0IGZpbGUgKik7CmV4dGVybiBzdHJ1Y3QgZmlsZV9sb2NrICpwb3NpeF90ZXN0X2xvY2soc3Ry dWN0IGZpbGUgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKZXh0ZXJuIGludCBwb3NpeF9sb2NrX2Zp bGUoc3RydWN0IGZpbGUgKiwgc3RydWN0IGZpbGVfbG9jayAqLCB1bnNpZ25lZCBpbnQpOwpleHRl cm4gdm9pZCBwb3NpeF9ibG9ja19sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKiwgc3RydWN0IGZpbGVf bG9jayAqKTsKZXh0ZXJuIGludCBwb3NpeF9sb2Nrc19kZWFkbG9jayhzdHJ1Y3QgZmlsZV9sb2Nr ICosIHN0cnVjdCBmaWxlX2xvY2sgKik7CmV4dGVybiB2b2lkIHBvc2l4X3VuYmxvY2tfbG9jayhz dHJ1Y3QgZmlsZV9sb2NrICopOwpleHRlcm4gaW50IHBvc2l4X2xvY2tzX2RlYWRsb2NrKHN0cnVj dCBmaWxlX2xvY2sgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKZXh0ZXJuIGludCBfX2dldF9sZWFz ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwpleHRlcm4gdGltZV90 IGxlYXNlX2dldF9tdGltZShzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBpbnQgbG9ja19tYXlfcmVh ZChzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90IHN0YXJ0LCB1bnNpZ25lZCBsb25nIGNvdW50KTsKZXh0 ZXJuIGludCBsb2NrX21heV93cml0ZShzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90IHN0YXJ0LCB1bnNp Z25lZCBsb25nIGNvdW50KTsKCnN0cnVjdCBmYXN5bmNfc3RydWN0IHsKICAgICAgICBpbnQgbWFn aWM7CiAgICAgICAgaW50IGZhX2ZkOwogICAgICAgIHN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYV9u ZXh0OwogICAgICAgIHN0cnVjdCBmaWxlICpmYV9maWxlOwp9OwoKCgoKZXh0ZXJuIGludCBmYXN5 bmNfaGVscGVyKGludCwgc3RydWN0IGZpbGUgKiwgaW50LCBzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAq Kik7CgpleHRlcm4gdm9pZCBraWxsX2Zhc3luYyhzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqKiwgaW50 LCBpbnQpOwoKZXh0ZXJuIHZvaWQgX19raWxsX2Zhc3luYyhzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAq LCBpbnQsIGludCk7CgpzdHJ1Y3QgbmFtZWlkYXRhIHsKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpk ZW50cnk7CiAgICAgICAgc3RydWN0IHZmc21vdW50ICptbnQ7CiAgICAgICAgc3RydWN0IHFzdHIg bGFzdDsKICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAgICAgICAgaW50IGxhc3RfdHlwZTsK fTsKCgoKCnN0cnVjdCBxdW90YV9pbmZvCnsKICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAg ICAgICAgc3RydWN0IHNlbWFwaG9yZSBkcWlvX3NlbTsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3Jl IGRxb2ZmX3NlbTsKICAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZXNbMl07CiAgICAgICAgc3RydWN0 IG1lbV9kcWluZm8gaW5mb1syXTsKfTsKIyA2NzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNs dWRlL2xpbnV4L2ZzLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgv bWluaXhfZnNfc2IuaCIgMQoKCgoKCgpzdHJ1Y3QgbWluaXhfc2JfaW5mbyB7CiAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc19uaW5vZGVzOwogICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIHNfbnpvbmVzOwogICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBsb25nIHNfaW1hcF9ibG9ja3M7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgc196bWFwX2Jsb2NrczsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u ZyBzX2ZpcnN0ZGF0YXpvbmU7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg c19sb2dfem9uZV9zaXplOwogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNf bWF4X3NpemU7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBzX2RpcnNpemU7CiAgICAgICAg ICAgICAgICAgICAgICAgIGludCBzX25hbWVsZW47CiAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBzX2xpbmtfbWF4OwogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQg Kiogc19pbWFwOwogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiog c196bWFwOwogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzX3Ni aDsKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1pbml4X3N1cGVyX2Jsb2NrICogc19t czsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgc19tb3VudF9zdGF0ZTsK ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgc192ZXJzaW9uOwp9OwojIDY3 MiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2V4dDJfZnNfc2IuaCIgMQojIDMwICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9leHQyX2ZzX3NiLmgiCnN0cnVjdCBleHQy X3NiX2luZm8gewogICAgICAgIHVuc2lnbmVkIGxvbmcgc19mcmFnX3NpemU7CiAgICAgICAgdW5z aWduZWQgbG9uZyBzX2ZyYWdzX3Blcl9ibG9jazsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfaW5v ZGVzX3Blcl9ibG9jazsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfZnJhZ3NfcGVyX2dyb3VwOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgc19ibG9ja3NfcGVyX2dyb3VwOwogICAgICAgIHVuc2lnbmVk IGxvbmcgc19pbm9kZXNfcGVyX2dyb3VwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19pdGJfcGVy X2dyb3VwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19nZGJfY291bnQ7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBzX2Rlc2NfcGVyX2Jsb2NrOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19ncm91cHNf Y291bnQ7CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICogc19zYmg7CiAgICAgICAgc3RydWN0 IGV4dDJfc3VwZXJfYmxvY2sgKiBzX2VzOwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKiBz X2dyb3VwX2Rlc2M7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc19sb2FkZWRfaW5vZGVfYml0bWFw czsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzX2xvYWRlZF9ibG9ja19iaXRtYXBzOwogICAgICAg IHVuc2lnbmVkIGxvbmcgc19pbm9kZV9iaXRtYXBfbnVtYmVyWzhdOwogICAgICAgIHN0cnVjdCBi dWZmZXJfaGVhZCAqIHNfaW5vZGVfYml0bWFwWzhdOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19i bG9ja19iaXRtYXBfbnVtYmVyWzhdOwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqIHNfYmxv Y2tfYml0bWFwWzhdOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19tb3VudF9vcHQ7CiAgICAgICAg dWlkX3Qgc19yZXN1aWQ7CiAgICAgICAgZ2lkX3Qgc19yZXNnaWQ7CiAgICAgICAgdW5zaWduZWQg c2hvcnQgc19tb3VudF9zdGF0ZTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzX3BhZDsKICAgICAg ICBpbnQgc19hZGRyX3Blcl9ibG9ja19iaXRzOwogICAgICAgIGludCBzX2Rlc2NfcGVyX2Jsb2Nr X2JpdHM7CiAgICAgICAgaW50IHNfaW5vZGVfc2l6ZTsKICAgICAgICBpbnQgc19maXJzdF9pbm87 Cn07CiMgNjczICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvZXh0M19mc19zYi5oIiAxCiMg MjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfc2IuaCIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC90aW1lci5oIiAxCgoKCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyA1ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC90aW1lci5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvbGlzdC5oIiAxCiMgNiAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvdGltZXIuaCIgMgojIDE2ICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9saW51eC90aW1lci5oIgpzdHJ1Y3QgdGltZXJfbGlzdCB7CiAgICAgICAgc3Ry dWN0IGxpc3RfaGVhZCBsaXN0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZXhwaXJlczsKICAgICAg ICB1bnNpZ25lZCBsb25nIGRhdGE7CiAgICAgICAgdm9pZCAoKmZ1bmN0aW9uKSh1bnNpZ25lZCBs b25nKTsKfTsKCmV4dGVybiB2b2lkIGFkZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVy KTsKZXh0ZXJuIGludCBkZWxfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKiB0aW1lcik7CiMgNDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3RpbWVyLmgiCmludCBtb2RfdGlt ZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpOwoKZXh0 ZXJuIHZvaWQgaXRfcmVhbF9mbih1bnNpZ25lZCBsb25nKTsKCnN0YXRpYyBpbmxpbmUgdm9pZCBp bml0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIpCnsKICAgICAgICB0aW1lci0+bGlz dC5uZXh0ID0gdGltZXItPmxpc3QucHJldiA9ICgodm9pZCAqKTApOwp9CgpzdGF0aWMgaW5saW5l IGludCB0aW1lcl9wZW5kaW5nIChjb25zdCBzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVyKQp7CiAg ICAgICAgcmV0dXJuIHRpbWVyLT5saXN0Lm5leHQgIT0gKCh2b2lkICopMCk7Cn0KIyAyMSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvZXh0M19mc19zYi5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvd2FpdC5oIiAxCiMgMjIgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfc2IuaCIgMgojIDM1ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9leHQzX2ZzX3NiLmgiCnN0cnVjdCBleHQzX3Ni X2luZm8gewogICAgICAgIHVuc2lnbmVkIGxvbmcgc19mcmFnX3NpemU7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBzX2ZyYWdzX3Blcl9ibG9jazsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfaW5vZGVz X3Blcl9ibG9jazsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfZnJhZ3NfcGVyX2dyb3VwOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgc19ibG9ja3NfcGVyX2dyb3VwOwogICAgICAgIHVuc2lnbmVkIGxv bmcgc19pbm9kZXNfcGVyX2dyb3VwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19pdGJfcGVyX2dy b3VwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19nZGJfY291bnQ7CiAgICAgICAgdW5zaWduZWQg bG9uZyBzX2Rlc2NfcGVyX2Jsb2NrOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19ncm91cHNfY291 bnQ7CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICogc19zYmg7CiAgICAgICAgc3RydWN0IGV4 dDNfc3VwZXJfYmxvY2sgKiBzX2VzOwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKiBzX2dy b3VwX2Rlc2M7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc19sb2FkZWRfaW5vZGVfYml0bWFwczsK ICAgICAgICB1bnNpZ25lZCBzaG9ydCBzX2xvYWRlZF9ibG9ja19iaXRtYXBzOwogICAgICAgIHVu c2lnbmVkIGxvbmcgc19pbm9kZV9iaXRtYXBfbnVtYmVyWzhdOwogICAgICAgIHN0cnVjdCBidWZm ZXJfaGVhZCAqIHNfaW5vZGVfYml0bWFwWzhdOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19ibG9j a19iaXRtYXBfbnVtYmVyWzhdOwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqIHNfYmxvY2tf Yml0bWFwWzhdOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19tb3VudF9vcHQ7CiAgICAgICAgdWlk X3Qgc19yZXN1aWQ7CiAgICAgICAgZ2lkX3Qgc19yZXNnaWQ7CiAgICAgICAgdW5zaWduZWQgc2hv cnQgc19tb3VudF9zdGF0ZTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzX3BhZDsKICAgICAgICBp bnQgc19hZGRyX3Blcl9ibG9ja19iaXRzOwogICAgICAgIGludCBzX2Rlc2NfcGVyX2Jsb2NrX2Jp dHM7CiAgICAgICAgaW50IHNfaW5vZGVfc2l6ZTsKICAgICAgICBpbnQgc19maXJzdF9pbm87CgoK ICAgICAgICBzdHJ1Y3QgaW5vZGUgKiBzX2pvdXJuYWxfaW5vZGU7CiAgICAgICAgc3RydWN0IGpv dXJuYWxfcyAqIHNfam91cm5hbDsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHNfb3JwaGFuOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgc19jb21taXRfaW50ZXJ2YWw7CiAgICAgICAgc3RydWN0IGJs b2NrX2RldmljZSAqam91cm5hbF9iZGV2OwoKCgoKfTsKIyA2NzQgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9saW51eC9ocGZzX2ZzX3NiLmgiIDEKCgoKc3RydWN0IGhwZnNfc2JfaW5mbyB7CiAgICAg ICAgaW5vX3Qgc2Jfcm9vdDsKICAgICAgICB1bnNpZ25lZCBzYl9mc19zaXplOwogICAgICAgIHVu c2lnbmVkIHNiX2JpdG1hcHM7CiAgICAgICAgdW5zaWduZWQgc2JfZGlyYmFuZF9zdGFydDsKICAg ICAgICB1bnNpZ25lZCBzYl9kaXJiYW5kX3NpemU7CiAgICAgICAgdW5zaWduZWQgc2JfZG1hcDsK ICAgICAgICB1bnNpZ25lZCBzYl9uX2ZyZWU7CiAgICAgICAgdW5zaWduZWQgc2Jfbl9mcmVlX2Ru b2RlczsKICAgICAgICB1aWRfdCBzYl91aWQ7CiAgICAgICAgZ2lkX3Qgc2JfZ2lkOwogICAgICAg IHVtb2RlX3Qgc2JfbW9kZTsKICAgICAgICB1bnNpZ25lZCBzYl9jb252IDogMjsKICAgICAgICB1 bnNpZ25lZCBzYl9lYXMgOiAyOwogICAgICAgIHVuc2lnbmVkIHNiX2VyciA6IDI7CiAgICAgICAg dW5zaWduZWQgc2JfY2hrIDogMjsKICAgICAgICB1bnNpZ25lZCBzYl9sb3dlcmNhc2UgOiAxOwog ICAgICAgIHVuc2lnbmVkIHNiX3dhc19lcnJvciA6IDE7CiAgICAgICAgdW5zaWduZWQgc2JfY2hr ZHNrIDogMjsKICAgICAgICB1bnNpZ25lZCBzYl9yZF9mbm9kZSA6IDI7CiAgICAgICAgdW5zaWdu ZWQgc2JfcmRfaW5vZGUgOiAyOwoKCiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3Qgc2JfaWdldF9x OwogICAgICAgIHVuc2lnbmVkIGNoYXIgKnNiX2NwX3RhYmxlOwoKCiAgICAgICAgdW5zaWduZWQg KnNiX2JtcF9kaXI7CiAgICAgICAgdW5zaWduZWQgc2JfY19iaXRtYXA7CiAgICAgICAgd2FpdF9x dWV1ZV9oZWFkX3Qgc2JfY3JlYXRpb25fZGU7CgogICAgICAgIHVuc2lnbmVkIHNiX2NyZWF0aW9u X2RlX2xvY2sgOiAxOwoKICAgICAgICBpbnQgc2JfdGltZXNoaWZ0Owp9OwojIDY3NSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L250ZnNfZnNfc2IuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L250ZnNfZnNfaS5oIiAxCiMgNSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvbnRmc19mc19zYi5oIiAyCgpzdHJ1Y3QgbnRmc19zYl9p bmZvewoKICAgICAgICBudGZzX3VpZF90IHVpZDsKICAgICAgICBudGZzX2dpZF90IGdpZDsKICAg ICAgICBudG1vZGVfdCB1bWFzazsKICAgICAgICB2b2lkICpubHNfbWFwOwogICAgICAgIHVuc2ln bmVkIGludCBuZ3Q7CiAgICAgICAgY2hhciBtZnRfem9uZV9tdWx0aXBsaWVyOwogICAgICAgIHVu c2lnbmVkIGxvbmcgbWZ0X2RhdGFfcG9zOwogICAgICAgIG50ZnNfY2x1c3Rlcl90IG1mdF96b25l X3BvczsKICAgICAgICBudGZzX2NsdXN0ZXJfdCBtZnRfem9uZV9zdGFydDsKICAgICAgICBudGZz X2NsdXN0ZXJfdCBtZnRfem9uZV9lbmQ7CiAgICAgICAgbnRmc19jbHVzdGVyX3QgZGF0YTFfem9u ZV9wb3M7CiAgICAgICAgbnRmc19jbHVzdGVyX3QgZGF0YTJfem9uZV9wb3M7CgoKICAgICAgICBu dGZzX3NpemVfdCBwYXJ0aXRpb25fYmlhczsKCiAgICAgICAgbnRmc191MzIgYXRfc3RhbmRhcmRf aW5mb3JtYXRpb247CiAgICAgICAgbnRmc191MzIgYXRfYXR0cmlidXRlX2xpc3Q7CiAgICAgICAg bnRmc191MzIgYXRfZmlsZV9uYW1lOwogICAgICAgIG50ZnNfdTMyIGF0X3ZvbHVtZV92ZXJzaW9u OwogICAgICAgIG50ZnNfdTMyIGF0X3NlY3VyaXR5X2Rlc2NyaXB0b3I7CiAgICAgICAgbnRmc191 MzIgYXRfdm9sdW1lX25hbWU7CiAgICAgICAgbnRmc191MzIgYXRfdm9sdW1lX2luZm9ybWF0aW9u OwogICAgICAgIG50ZnNfdTMyIGF0X2RhdGE7CiAgICAgICAgbnRmc191MzIgYXRfaW5kZXhfcm9v dDsKICAgICAgICBudGZzX3UzMiBhdF9pbmRleF9hbGxvY2F0aW9uOwogICAgICAgIG50ZnNfdTMy IGF0X2JpdG1hcDsKICAgICAgICBudGZzX3UzMiBhdF9zeW1saW5rOwoKICAgICAgICBpbnQgc2Vj dG9yX3NpemU7CiAgICAgICAgaW50IGNsdXN0ZXJfc2l6ZTsKICAgICAgICBpbnQgY2x1c3Rlcl9z aXplX2JpdHM7CiAgICAgICAgaW50IG1mdF9jbHVzdGVyc19wZXJfcmVjb3JkOwogICAgICAgIGlu dCBtZnRfcmVjb3JkX3NpemU7CiAgICAgICAgaW50IG1mdF9yZWNvcmRfc2l6ZV9iaXRzOwogICAg ICAgIGludCBpbmRleF9jbHVzdGVyc19wZXJfcmVjb3JkOwogICAgICAgIGludCBpbmRleF9yZWNv cmRfc2l6ZTsKICAgICAgICBpbnQgaW5kZXhfcmVjb3JkX3NpemVfYml0czsKICAgICAgICBudGZz X2NsdXN0ZXJfdCBucl9jbHVzdGVyczsKICAgICAgICBudGZzX2NsdXN0ZXJfdCBtZnRfbGNuOwog ICAgICAgIG50ZnNfY2x1c3Rlcl90IG1mdF9taXJyX2xjbjsKCiAgICAgICAgdW5zaWduZWQgY2hh ciAqbWZ0OwogICAgICAgIHVuc2lnbmVkIHNob3J0ICp1cGNhc2U7CiAgICAgICAgdW5zaWduZWQg aW50IHVwY2FzZV9sZW5ndGg7CgogICAgICAgIHN0cnVjdCBudGZzX2lub2RlX2luZm8gKm1mdF9p bm87CiAgICAgICAgc3RydWN0IG50ZnNfaW5vZGVfaW5mbyAqbWZ0bWlycjsKICAgICAgICBzdHJ1 Y3QgbnRmc19pbm9kZV9pbmZvICpiaXRtYXA7CiAgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpz YjsKICAgICAgICB1bnNpZ25lZCBjaGFyIGlub19mbGFnczsKfTsKIyA2NzYgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9saW51eC9tc2Rvc19mc19zYi5oIiAxCgoKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvaW5jbHVkZS9saW51eC9mYXRfY3ZmLmgiIDEKCgoKCgpzdHJ1Y3QgY3ZmX2Zvcm1hdAp7 IGludCBjdmZfdmVyc2lvbjsKICBjaGFyKiBjdmZfdmVyc2lvbl90ZXh0OwogIHVuc2lnbmVkIGxv bmcgZmxhZ3M7CiAgaW50ICgqZGV0ZWN0X2N2ZikgKHN0cnVjdCBzdXBlcl9ibG9jaypzYik7CiAg aW50ICgqbW91bnRfY3ZmKSAoc3RydWN0IHN1cGVyX2Jsb2NrKnNiLGNoYXIqb3B0aW9ucyk7CiAg aW50ICgqdW5tb3VudF9jdmYpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sqc2IpOwogIHN0cnVjdCBidWZm ZXJfaGVhZCogKCpjdmZfYnJlYWQpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sqc2IsaW50IGJsb2NrKTsK ICBzdHJ1Y3QgYnVmZmVyX2hlYWQqICgqY3ZmX2dldGJsaykgKHN0cnVjdCBzdXBlcl9ibG9jaypz YixpbnQgYmxvY2spOwogIHZvaWQgKCpjdmZfYnJlbHNlKSAoc3RydWN0IHN1cGVyX2Jsb2NrICpz YixzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKICB2b2lkICgqY3ZmX21hcmtfYnVmZmVyX2RpcnR5 KSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiAgdm9pZCAoKmN2Zl9zZXRfdXB0b2RhdGUpIChzdHJ1 Y3Qgc3VwZXJfYmxvY2sgKnNiLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJ1ZmZl cl9oZWFkICpiaCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWwpOwogIGludCAoKmN2 Zl9pc191cHRvZGF0ZSkgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2Isc3RydWN0IGJ1ZmZlcl9oZWFk ICpiaCk7CiAgdm9pZCAoKmN2Zl9sbF9yd19ibG9jaykgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2Is CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBvcHIsCiAgICAgICAgICAgICAgICAgICAgICAg IGludCBuYnJlcSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpi aFszMl0pOwogIGludCAoKmZhdF9hY2Nlc3MpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLGludCBu cixpbnQgbmV3X3ZhbHVlKTsKICBpbnQgKCpjdmZfc3RhdGZzKSAoc3RydWN0IHN1cGVyX2Jsb2Nr ICpzYixzdHJ1Y3Qgc3RhdGZzICpidWYsIGludCBidWZzaXopOwogIGludCAoKmN2Zl9ibWFwKSAo c3RydWN0IGlub2RlICppbm9kZSxpbnQgYmxvY2spOwogIHNzaXplX3QgKCpjdmZfZmlsZV9yZWFk KSAoIHN0cnVjdCBmaWxlICosIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CiAgc3NpemVfdCAo KmN2Zl9maWxlX3dyaXRlKSAoIHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBs b2ZmX3QgKik7CiAgaW50ICgqY3ZmX21tYXApIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qgdm1fYXJl YV9zdHJ1Y3QgKik7CiAgaW50ICgqY3ZmX3JlYWRwYWdlKSAoc3RydWN0IGlub2RlICosIHN0cnVj dCBwYWdlICopOwogIGludCAoKmN2Zl93cml0ZXBhZ2UpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0 IHBhZ2UgKik7CiAgaW50ICgqY3ZmX2Rpcl9pb2N0bCkgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBz dHJ1Y3QgZmlsZSAqIGZpbHAsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBj bWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKICB2b2lkICgqemVyb19vdXRfY2x1c3RlcikgKHN0cnVj dCBpbm9kZSosIGludCBjbHVzdGVybnIpOwp9OwoKaW50IHJlZ2lzdGVyX2N2Zl9mb3JtYXQoc3Ry dWN0IGN2Zl9mb3JtYXQqY3ZmX2Zvcm1hdCk7CmludCB1bnJlZ2lzdGVyX2N2Zl9mb3JtYXQoc3Ry dWN0IGN2Zl9mb3JtYXQqY3ZmX2Zvcm1hdCk7CnZvaWQgZGVjX2N2Zl9mb3JtYXRfdXNlX2NvdW50 X2J5X3ZlcnNpb24oaW50IHZlcnNpb24pOwppbnQgZGV0ZWN0X2N2ZihzdHJ1Y3Qgc3VwZXJfYmxv Y2sqc2IsY2hhcipmb3JjZSk7CgpleHRlcm4gc3RydWN0IGN2Zl9mb3JtYXQgKmN2Zl9mb3JtYXRz W107CmV4dGVybiBpbnQgY3ZmX2Zvcm1hdF91c2VfY291bnRbXTsKIyA0ICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9saW51eC9tc2Rvc19mc19zYi5oIiAyCgoKCgoKc3RydWN0IGZhdF9t b3VudF9vcHRpb25zIHsKICAgICAgICB1aWRfdCBmc191aWQ7CiAgICAgICAgZ2lkX3QgZnNfZ2lk OwogICAgICAgIHVuc2lnbmVkIHNob3J0IGZzX3VtYXNrOwogICAgICAgIHVuc2lnbmVkIHNob3J0 IGNvZGVwYWdlOwogICAgICAgIGNoYXIgKmlvY2hhcnNldDsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBzaG9ydG5hbWU7CiAgICAgICAgdW5zaWduZWQgY2hhciBuYW1lX2NoZWNrOwogICAgICAgIHVu c2lnbmVkIGNoYXIgY29udmVyc2lvbjsKICAgICAgICB1bnNpZ25lZCBxdWlldDoxLAogICAgICAg ICAgICAgICAgIHNob3dleGVjOjEsCiAgICAgICAgICAgICAgICAgc3lzX2ltbXV0YWJsZToxLAog ICAgICAgICAgICAgICAgIGRvdHNPSzoxLAogICAgICAgICAgICAgICAgIGlzdmZhdDoxLAogICAg ICAgICAgICAgICAgIHV0Zjg6MSwKICAgICAgICAgICAgICAgICB1bmljb2RlX3hsYXRlOjEsCiAg ICAgICAgICAgICAgICAgcG9zaXhmczoxLAogICAgICAgICAgICAgICAgIG51bXRhaWw6MSwKICAg ICAgICAgICAgICAgICBhdGFyaToxLAogICAgICAgICAgICAgICAgIGZhdDMyOjEsCiAgICAgICAg ICAgICAgICAgbm9jYXNlOjE7Cn07CgpzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyB7CiAgICAgICAgdW5z aWduZWQgc2hvcnQgY2x1c3Rlcl9zaXplOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGNsdXN0ZXJf Yml0czsKICAgICAgICB1bnNpZ25lZCBjaGFyIGZhdHMsZmF0X2JpdHM7CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgZmF0X3N0YXJ0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZmF0X2xlbmd0aDsKICAg ICAgICB1bnNpZ25lZCBsb25nIGRpcl9zdGFydDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkaXJf ZW50cmllczsKICAgICAgICB1bnNpZ25lZCBsb25nIGRhdGFfc3RhcnQ7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBjbHVzdGVyczsKICAgICAgICB1bnNpZ25lZCBsb25nIHJvb3RfY2x1c3RlcjsKICAg ICAgICB1bnNpZ25lZCBsb25nIGZzaW5mb19zZWN0b3I7CiAgICAgICAgc3RydWN0IHNlbWFwaG9y ZSBmYXRfbG9jazsKICAgICAgICBpbnQgcHJldl9mcmVlOwogICAgICAgIGludCBmcmVlX2NsdXN0 ZXJzOwogICAgICAgIHN0cnVjdCBmYXRfbW91bnRfb3B0aW9ucyBvcHRpb25zOwogICAgICAgIHN0 cnVjdCBubHNfdGFibGUgKm5sc19kaXNrOwogICAgICAgIHN0cnVjdCBubHNfdGFibGUgKm5sc19p bzsKICAgICAgICBzdHJ1Y3QgY3ZmX2Zvcm1hdCogY3ZmX2Zvcm1hdDsKICAgICAgICB2b2lkICpk aXJfb3BzOwogICAgICAgIHZvaWQgKnByaXZhdGVfZGF0YTsKICAgICAgICBpbnQgZGlyX3Blcl9i bG9jazsKICAgICAgICBpbnQgZGlyX3Blcl9ibG9ja19iaXRzOwp9OwojIDY3NyAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2xpbnV4L2lzb19mc19zYi5oIiAxCgoKCgoKCnN0cnVjdCBpc29mc19zYl9p bmZvIHsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfbmlub2RlczsKICAgICAgICB1bnNpZ25lZCBs b25nIHNfbnpvbmVzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19maXJzdGRhdGF6b25lOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgc19sb2dfem9uZV9zaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcg c19tYXhfc2l6ZTsKCiAgICAgICAgdW5zaWduZWQgY2hhciBzX2hpZ2hfc2llcnJhOwogICAgICAg IHVuc2lnbmVkIGNoYXIgc19tYXBwaW5nOwogICAgICAgIGludCBzX3JvY2tfb2Zmc2V0OwogICAg ICAgIHVuc2lnbmVkIGNoYXIgc19yb2NrOwogICAgICAgIHVuc2lnbmVkIGNoYXIgc19qb2xpZXRf bGV2ZWw7CiAgICAgICAgdW5zaWduZWQgY2hhciBzX3V0Zjg7CiAgICAgICAgdW5zaWduZWQgY2hh ciBzX2NydWZ0OwoKCiAgICAgICAgdW5zaWduZWQgY2hhciBzX3VuaGlkZTsKICAgICAgICB1bnNp Z25lZCBjaGFyIHNfbm9zdWlkOwogICAgICAgIHVuc2lnbmVkIGNoYXIgc19ub2RldjsKICAgICAg ICB1bnNpZ25lZCBjaGFyIHNfbm9jb21wcmVzczsKCiAgICAgICAgbW9kZV90IHNfbW9kZTsKICAg ICAgICBnaWRfdCBzX2dpZDsKICAgICAgICB1aWRfdCBzX3VpZDsKICAgICAgICBzdHJ1Y3Qgbmxz X3RhYmxlICpzX25sc19pb2NoYXJzZXQ7Cn07CiMgNjc4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUv bGludXgvbmZzX2ZzX3NiLmgiIDEKCgoKCgoKc3RydWN0IG5mc19zZXJ2ZXIgewogICAgICAgIHN0 cnVjdCBycGNfY2xudCAqIGNsaWVudDsKICAgICAgICBzdHJ1Y3QgbmZzX3JwY19vcHMgKiBycGNf b3BzOwogICAgICAgIGludCBmbGFnczsKICAgICAgICB1bnNpZ25lZCBpbnQgcnNpemU7CiAgICAg ICAgdW5zaWduZWQgaW50IHJwYWdlczsKICAgICAgICB1bnNpZ25lZCBpbnQgd3NpemU7CiAgICAg ICAgdW5zaWduZWQgaW50IHdwYWdlczsKICAgICAgICB1bnNpZ25lZCBpbnQgZHRzaXplOwogICAg ICAgIHVuc2lnbmVkIGludCBic2l6ZTsKICAgICAgICB1bnNpZ25lZCBpbnQgYWNyZWdtaW47CiAg ICAgICAgdW5zaWduZWQgaW50IGFjcmVnbWF4OwogICAgICAgIHVuc2lnbmVkIGludCBhY2Rpcm1p bjsKICAgICAgICB1bnNpZ25lZCBpbnQgYWNkaXJtYXg7CiAgICAgICAgdW5zaWduZWQgaW50IG5h bWVsZW47CiAgICAgICAgY2hhciAqIGhvc3RuYW1lOwogICAgICAgIHN0cnVjdCBuZnNfcmVxbGlz dCAqIHJ3X3JlcXVlc3RzOwp9OwoKCgoKc3RydWN0IG5mc19zYl9pbmZvIHsKICAgICAgICBzdHJ1 Y3QgbmZzX3NlcnZlciBzX3NlcnZlcjsKfTsKIyA2NzkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9p bmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9s aW51eC9zeXN2X2ZzX3NiLmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUv bGludXgvc3lzdl9mc19zYi5oIgpzdHJ1Y3Qgc3lzdl9zYl9pbmZvIHsKICAgICAgICBpbnQgc190 eXBlOwogICAgICAgIGNoYXIgc19ieXRlc2V4OwogICAgICAgIGNoYXIgc190cnVuY2F0ZTsKCiAg ICAgICAgbmxpbmtfdCBzX2xpbmtfbWF4OwogICAgICAgIHVuc2lnbmVkIGludCBzX2lub2Rlc19w ZXJfYmxvY2s7CiAgICAgICAgdW5zaWduZWQgaW50IHNfaW5vZGVzX3Blcl9ibG9ja18xOwogICAg ICAgIHVuc2lnbmVkIGludCBzX2lub2Rlc19wZXJfYmxvY2tfYml0czsKICAgICAgICB1bnNpZ25l ZCBpbnQgc19pbmRfcGVyX2Jsb2NrOwogICAgICAgIHVuc2lnbmVkIGludCBzX2luZF9wZXJfYmxv Y2tfYml0czsKICAgICAgICB1bnNpZ25lZCBpbnQgc19pbmRfcGVyX2Jsb2NrXzI7CiAgICAgICAg dW5zaWduZWQgaW50IHNfdG9vYmlnX2Jsb2NrOwogICAgICAgIHVuc2lnbmVkIGludCBzX2Jsb2Nr X2Jhc2U7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc19maWNfc2l6ZTsKICAgICAgICB1bnNpZ25l ZCBzaG9ydCBzX2ZsY19zaXplOwoKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfYmgxOwog ICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaDI7CgoKICAgICAgICBjaGFyICogc19zYmQx OwogICAgICAgIGNoYXIgKiBzX3NiZDI7CiAgICAgICAgdTE2ICpzX3NiX2ZpY19jb3VudDsKICAg ICAgICB1MTYgKnNfc2JfZmljX2lub2RlczsKICAgICAgICB1MTYgKnNfc2JfdG90YWxfZnJlZV9p bm9kZXM7CiAgICAgICAgdTE2ICpzX2JjYWNoZV9jb3VudDsKICAgICAgICB1MzIgKnNfYmNhY2hl OwogICAgICAgIHUzMiAqc19mcmVlX2Jsb2NrczsKICAgICAgICB1MzIgKnNfc2JfdGltZTsKICAg ICAgICB1MzIgKnNfc2Jfc3RhdGU7CgoKICAgICAgICB1MzIgc19maXJzdGlub2Rlem9uZTsKICAg ICAgICB1MzIgc19maXJzdGRhdGF6b25lOwogICAgICAgIHUzMiBzX25pbm9kZXM7CiAgICAgICAg dTMyIHNfbmRhdGF6b25lczsKICAgICAgICB1MzIgc19uem9uZXM7CiAgICAgICAgdTE2IHNfbmFt ZWxlbjsKfTsKIyA2ODAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9hZmZzX2ZzX3NiLmgi IDEKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvYWZmc19mc19zYi5o IgpzdHJ1Y3QgYWZmc19ibV9pbmZvIHsKICAgICAgICB1MzIgYm1fa2V5OwogICAgICAgIHUzMiBi bV9mcmVlOwp9OwoKc3RydWN0IGFmZnNfc2JfaW5mbyB7CiAgICAgICAgaW50IHNfcGFydGl0aW9u X3NpemU7CiAgICAgICAgaW50IHNfcmVzZXJ2ZWQ7CgogICAgICAgIHUzMiBzX2RhdGFfYmxrc2l6 ZTsKICAgICAgICB1MzIgc19yb290X2Jsb2NrOwogICAgICAgIGludCBzX2hhc2hzaXplOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgc19mbGFnczsKICAgICAgICB1aWRfdCBzX3VpZDsKICAgICAgICBn aWRfdCBzX2dpZDsKICAgICAgICB1bW9kZV90IHNfbW9kZTsKICAgICAgICBzdHJ1Y3QgYnVmZmVy X2hlYWQgKnNfcm9vdF9iaDsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIHNfYm1sb2NrOwogICAg ICAgIHN0cnVjdCBhZmZzX2JtX2luZm8gKnNfYml0bWFwOwogICAgICAgIHUzMiBzX2JtYXBfY291 bnQ7CiAgICAgICAgdTMyIHNfYm1hcF9iaXRzOwogICAgICAgIHUzMiBzX2xhc3RfYm1hcDsKICAg ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfYm1hcF9iaDsKICAgICAgICBjaGFyICpzX3ByZWZp eDsKICAgICAgICBpbnQgc19wcmVmaXhfbGVuOwogICAgICAgIGNoYXIgc192b2x1bWVbMzJdOwp9 OwojIDY4MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3Vmc19mc19zYi5oIiAxCiMgMTcg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3Vmc19mc19zYi5oIgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3Vmc19mcy5oIiAxCiMgMzAgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3Vmc19mcy5oIgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyAzMSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvdWZzX2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMQojIDMyICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9saW51eC91ZnNfZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNs dWRlL2xpbnV4L3RpbWUuaCIgMQojIDMzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9s aW51eC91ZnNfZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4 L3N0YXQuaCIgMQojIDM0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC91ZnNf ZnMuaCIgMgojIDIzNyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdWZzX2Zz LmgiCnN0cnVjdCB1ZnNfdGltZXZhbCB7CiAgICAgICAgX19zMzIgdHZfc2VjOwogICAgICAgIF9f czMyIHR2X3VzZWM7Cn07CgpzdHJ1Y3QgdWZzX2Rpcl9lbnRyeSB7CiAgICAgICAgX191MzIgZF9p bm87CiAgICAgICAgX191MTYgZF9yZWNsZW47CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAg ICAgX191MTYgZF9uYW1sZW47CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg ICAgICAgICAgICBfX3U4IGRfdHlwZTsKICAgICAgICAgICAgICAgICAgICAgICAgX191OCBkX25h bWxlbjsKICAgICAgICAgICAgICAgIH0gZF80NDsKICAgICAgICB9IGRfdTsKICAgICAgICBfX3U4 IGRfbmFtZVsyNTUgKyAxXTsKfTsKCnN0cnVjdCB1ZnNfY3N1bSB7CiAgICAgICAgX191MzIgY3Nf bmRpcjsKICAgICAgICBfX3UzMiBjc19uYmZyZWU7CiAgICAgICAgX191MzIgY3NfbmlmcmVlOwog ICAgICAgIF9fdTMyIGNzX25mZnJlZTsKfTsKCgoKCnN0cnVjdCB1ZnNfc3VwZXJfYmxvY2sgewog ICAgICAgIF9fdTMyIGZzX2xpbms7CiAgICAgICAgX191MzIgZnNfcmxpbms7CiAgICAgICAgX191 MzIgZnNfc2Jsa25vOwogICAgICAgIF9fdTMyIGZzX2NibGtubzsKICAgICAgICBfX3UzMiBmc19p Ymxrbm87CiAgICAgICAgX191MzIgZnNfZGJsa25vOwogICAgICAgIF9fdTMyIGZzX2Nnb2Zmc2V0 OwogICAgICAgIF9fdTMyIGZzX2NnbWFzazsKICAgICAgICBfX3UzMiBmc190aW1lOwogICAgICAg IF9fdTMyIGZzX3NpemU7CiAgICAgICAgX191MzIgZnNfZHNpemU7CiAgICAgICAgX191MzIgZnNf bmNnOwogICAgICAgIF9fdTMyIGZzX2JzaXplOwogICAgICAgIF9fdTMyIGZzX2ZzaXplOwogICAg ICAgIF9fdTMyIGZzX2ZyYWc7CgogICAgICAgIF9fdTMyIGZzX21pbmZyZWU7CiAgICAgICAgX191 MzIgZnNfcm90ZGVsYXk7CiAgICAgICAgX191MzIgZnNfcnBzOwoKICAgICAgICBfX3UzMiBmc19i bWFzazsKICAgICAgICBfX3UzMiBmc19mbWFzazsKICAgICAgICBfX3UzMiBmc19ic2hpZnQ7CiAg ICAgICAgX191MzIgZnNfZnNoaWZ0OwoKICAgICAgICBfX3UzMiBmc19tYXhjb250aWc7CiAgICAg ICAgX191MzIgZnNfbWF4YnBnOwoKICAgICAgICBfX3UzMiBmc19mcmFnc2hpZnQ7CiAgICAgICAg X191MzIgZnNfZnNidG9kYjsKICAgICAgICBfX3UzMiBmc19zYnNpemU7CiAgICAgICAgX191MzIg ZnNfY3NtYXNrOwogICAgICAgIF9fdTMyIGZzX2Nzc2hpZnQ7CiAgICAgICAgX191MzIgZnNfbmlu ZGlyOwogICAgICAgIF9fdTMyIGZzX2lub3BiOwogICAgICAgIF9fdTMyIGZzX25zcGY7CgogICAg ICAgIF9fdTMyIGZzX29wdGltOwoKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1 Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19ucHNlY3Q7CiAgICAgICAgICAg ICAgICB9IGZzX3N1bjsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAg ICAgICAgIF9fczMyIGZzX3N0YXRlOwogICAgICAgICAgICAgICAgfSBmc19zdW54ODY7CiAgICAg ICAgfSBmc191MTsKICAgICAgICBfX3UzMiBmc19pbnRlcmxlYXZlOwogICAgICAgIF9fdTMyIGZz X3RyYWNrc2tldzsKCgoKCiAgICAgICAgX191MzIgZnNfaWRbMl07CgogICAgICAgIF9fdTMyIGZz X2NzYWRkcjsKICAgICAgICBfX3UzMiBmc19jc3NpemU7CiAgICAgICAgX191MzIgZnNfY2dzaXpl OwoKICAgICAgICBfX3UzMiBmc19udHJhazsKICAgICAgICBfX3UzMiBmc19uc2VjdDsKICAgICAg ICBfX3UzMiBmc19zcGM7CgogICAgICAgIF9fdTMyIGZzX25jeWw7CgogICAgICAgIF9fdTMyIGZz X2NwZzsKICAgICAgICBfX3UzMiBmc19pcGc7CiAgICAgICAgX191MzIgZnNfZnBnOwoKICAgICAg ICBzdHJ1Y3QgdWZzX2NzdW0gZnNfY3N0b3RhbDsKCiAgICAgICAgX19zOCBmc19mbW9kOwogICAg ICAgIF9fczggZnNfY2xlYW47CiAgICAgICAgX19zOCBmc19yb25seTsKICAgICAgICBfX3M4IGZz X2ZsYWdzOwogICAgICAgIF9fczggZnNfZnNtbnRbNTEyXTsKCiAgICAgICAgX191MzIgZnNfY2dy b3RvcjsKICAgICAgICBfX3UzMiBmc19jc3BbMzFdOwogICAgICAgIF9fdTMyIGZzX21heGNsdXN0 ZXI7CiAgICAgICAgX191MzIgZnNfY3BjOwogICAgICAgIF9fdTE2IGZzX29wb3N0YmxbMTZdWzhd OwogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAg ICAgICAgICAgIF9fczMyIGZzX3NwYXJlY29uWzUzXTsKICAgICAgICAgICAgICAgICAgICAgICAg X19zMzIgZnNfcmVjbGFpbTsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfc3BhcmVj b24yWzFdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19zdGF0ZTsKICAgICAgICAg ICAgICAgICAgICAgICAgX191MzIgZnNfcWJtYXNrWzJdOwogICAgICAgICAgICAgICAgICAgICAg ICBfX3UzMiBmc19xZm1hc2tbMl07CiAgICAgICAgICAgICAgICB9IGZzX3N1bjsKICAgICAgICAg ICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3NwYXJlY29u WzUzXTsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfcmVjbGFpbTsKICAgICAgICAg ICAgICAgICAgICAgICAgX19zMzIgZnNfc3BhcmVjb24yWzFdOwogICAgICAgICAgICAgICAgICAg ICAgICBfX3UzMiBmc19ucHNlY3Q7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGZzX3Fi bWFza1syXTsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNfcWZtYXNrWzJdOwogICAg ICAgICAgICAgICAgfSBmc19zdW54ODY7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAg ICAgICAgICAgICAgICAgICBfX3MzMiBmc19zcGFyZWNvbls1MF07CiAgICAgICAgICAgICAgICAg ICAgICAgIF9fczMyIGZzX2NvbnRpZ3N1bXNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgIF9f czMyIGZzX21heHN5bWxpbmtsZW47CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX2lu b2RlZm10OwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19tYXhmaWxlc2l6ZVsyXTsK ICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNfcWJtYXNrWzJdOwogICAgICAgICAgICAg ICAgICAgICAgICBfX3UzMiBmc19xZm1hc2tbMl07CiAgICAgICAgICAgICAgICAgICAgICAgIF9f czMyIGZzX3N0YXRlOwogICAgICAgICAgICAgICAgfSBmc180NDsKICAgICAgICB9IGZzX3UyOwog ICAgICAgIF9fczMyIGZzX3Bvc3RibGZvcm1hdDsKICAgICAgICBfX3MzMiBmc19ucnBvczsKICAg ICAgICBfX3MzMiBmc19wb3N0YmxvZmY7CiAgICAgICAgX19zMzIgZnNfcm90YmxvZmY7CiAgICAg ICAgX19zMzIgZnNfbWFnaWM7CiAgICAgICAgX191OCBmc19zcGFjZVsxXTsKfTsKIyA0MTUgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3Vmc19mcy5oIgpzdHJ1Y3QgdWZzX2N5 bGluZGVyX2dyb3VwIHsKICAgICAgICBfX3UzMiBjZ19saW5rOwogICAgICAgIF9fdTMyIGNnX21h Z2ljOwogICAgICAgIF9fdTMyIGNnX3RpbWU7CiAgICAgICAgX191MzIgY2dfY2d4OwogICAgICAg IF9fdTE2IGNnX25jeWw7CiAgICAgICAgX191MTYgY2dfbmlibGs7CiAgICAgICAgX191MzIgY2df bmRibGs7CiAgICAgICAgc3RydWN0IHVmc19jc3VtIGNnX2NzOwogICAgICAgIF9fdTMyIGNnX3Jv dG9yOwogICAgICAgIF9fdTMyIGNnX2Zyb3RvcjsKICAgICAgICBfX3UzMiBjZ19pcm90b3I7CiAg ICAgICAgX191MzIgY2dfZnJzdW1bKDgxOTIgLyAxMDI0KV07CiAgICAgICAgX191MzIgY2dfYnRv dG9mZjsKICAgICAgICBfX3UzMiBjZ19ib2ZmOwogICAgICAgIF9fdTMyIGNnX2l1c2Vkb2ZmOwog ICAgICAgIF9fdTMyIGNnX2ZyZWVvZmY7CiAgICAgICAgX191MzIgY2dfbmV4dGZyZWVvZmY7CiAg ICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAg ICAgICAgX191MzIgY2dfY2x1c3RlcnN1bW9mZjsKICAgICAgICAgICAgICAgICAgICAgICAgX191 MzIgY2dfY2x1c3Rlcm9mZjsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgY2dfbmNsdXN0 ZXJibGtzOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBjZ19zcGFyZWNvblsxM107CiAg ICAgICAgICAgICAgICB9IGNnXzQ0OwogICAgICAgICAgICAgICAgX191MzIgY2dfc3BhcmVjb25b MTZdOwogICAgICAgIH0gY2dfdTsKICAgICAgICBfX3U4IGNnX3NwYWNlWzFdOwoKfTsKCgoKCnN0 cnVjdCB1ZnNfaW5vZGUgewogICAgICAgIF9fdTE2IHVpX21vZGU7CiAgICAgICAgX191MTYgdWlf bmxpbms7CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAg ICAgICAgICAgICAgICAgX191MTYgdWlfc3VpZDsKICAgICAgICAgICAgICAgICAgICAgICAgX191 MTYgdWlfc2dpZDsKICAgICAgICAgICAgICAgIH0gb2xkaWRzOwogICAgICAgICAgICAgICAgX191 MzIgdWlfaW51bWJlcjsKICAgICAgICAgICAgICAgIF9fdTMyIHVpX2F1dGhvcjsKICAgICAgICB9 IHVpX3UxOwogICAgICAgIF9fdTY0IHVpX3NpemU7CiAgICAgICAgc3RydWN0IHVmc190aW1ldmFs IHVpX2F0aW1lOwogICAgICAgIHN0cnVjdCB1ZnNfdGltZXZhbCB1aV9tdGltZTsKICAgICAgICBz dHJ1Y3QgdWZzX3RpbWV2YWwgdWlfY3RpbWU7CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAg ICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgdWlfZGJbMTJdOwogICAg ICAgICAgICAgICAgICAgICAgICBfX3UzMiB1aV9pYlszXTsKICAgICAgICAgICAgICAgIH0gdWlf YWRkcjsKICAgICAgICAgICAgICAgIF9fdTggdWlfc3ltbGlua1s0KigxMiArMyldOwogICAgICAg IH0gdWlfdTI7CiAgICAgICAgX191MzIgdWlfZmxhZ3M7CiAgICAgICAgX191MzIgdWlfYmxvY2tz OwogICAgICAgIF9fdTMyIHVpX2dlbjsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBz dHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiB1aV9zaGFkb3c7CiAgICAgICAg ICAgICAgICAgICAgICAgIF9fdTMyIHVpX3VpZDsKICAgICAgICAgICAgICAgICAgICAgICAgX191 MzIgdWlfZ2lkOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiB1aV9vZWZ0ZmxhZzsKICAg ICAgICAgICAgICAgIH0gdWlfc3VuOwogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAg ICAgICAgICAgICAgICAgX191MzIgdWlfdWlkOwogICAgICAgICAgICAgICAgICAgICAgICBfX3Uz MiB1aV9naWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIHVpX3NwYXJlWzJdOwogICAg ICAgICAgICAgICAgfSB1aV80NDsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAg ICAgICAgICAgICAgIF9fdTMyIHVpX3VpZDsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIg dWlfZ2lkOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UxNiB1aV9tb2RlaDsKICAgICAgICAg ICAgICAgICAgICAgICAgX191MTYgdWlfc3BhcmU7CiAgICAgICAgICAgICAgICAgICAgICAgIF9f dTMyIHVpX3RyYW5zOwogICAgICAgICAgICAgICAgfSB1aV9odXJkOwogICAgICAgIH0gdWlfdTM7 Cn07CiMgNTE0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC91ZnNfZnMuaCIK ZXh0ZXJuIHZvaWQgdWZzX2ZyZWVfZnJhZ21lbnRzIChzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQs IHVuc2lnbmVkKTsKZXh0ZXJuIHZvaWQgdWZzX2ZyZWVfYmxvY2tzIChzdHJ1Y3QgaW5vZGUgKiwg dW5zaWduZWQsIHVuc2lnbmVkKTsKZXh0ZXJuIHVuc2lnbmVkIHVmc19uZXdfZnJhZ21lbnRzIChz dHJ1Y3QgaW5vZGUgKiwgdTMyICosIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIGludCAq KTsKCgpleHRlcm4gc3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1ZnNfbG9hZF9jeWxpbmRl ciAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkKTsKZXh0ZXJuIHZvaWQgdWZzX3B1dF9j eWxpbmRlciAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkKTsKCgpleHRlcm4gc3RydWN0 IGlub2RlX29wZXJhdGlvbnMgdWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwpleHRlcm4gaW50IHVm c19jaGVja19kaXJfZW50cnkgKGNvbnN0IGNoYXIgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCB1 ZnNfZGlyX2VudHJ5ICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLCB1bnNpZ25lZCBsb25nKTsKZXh0 ZXJuIGludCB1ZnNfYWRkX2xpbmsgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopOwpl eHRlcm4gaW5vX3QgdWZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50 cnkgKik7CmV4dGVybiBpbnQgdWZzX21ha2VfZW1wdHkoc3RydWN0IGlub2RlICosIHN0cnVjdCBp bm9kZSAqKTsKZXh0ZXJuIHN0cnVjdCB1ZnNfZGlyX2VudHJ5ICogdWZzX2ZpbmRfZW50cnkgKHN0 cnVjdCBkZW50cnkgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICoqKTsKZXh0ZXJuIGludCB1ZnNfZGVs ZXRlX2VudHJ5IChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHVmc19kaXJfZW50cnkgKiwgc3RydWN0 IGJ1ZmZlcl9oZWFkICopOwpleHRlcm4gaW50IHVmc19lbXB0eV9kaXIgKHN0cnVjdCBpbm9kZSAq KTsKZXh0ZXJuIHN0cnVjdCB1ZnNfZGlyX2VudHJ5ICogdWZzX2RvdGRvdCAoc3RydWN0IGlub2Rl ICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKik7CmV4dGVybiB2b2lkIHVmc19zZXRfbGluayhzdHJ1 Y3QgaW5vZGUgKiwgc3RydWN0IHVmc19kaXJfZW50cnkgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICos IHN0cnVjdCBpbm9kZSAqKTsKCgpleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdWZzX2Zp bGVfaW5vZGVfb3BlcmF0aW9uczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWZzX2Zp bGVfb3BlcmF0aW9uczsKCmV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHVm c19hb3BzOwoKCmV4dGVybiB2b2lkIHVmc19mcmVlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKmlub2Rl KTsKZXh0ZXJuIHN0cnVjdCBpbm9kZSAqIHVmc19uZXdfaW5vZGUgKGNvbnN0IHN0cnVjdCBpbm9k ZSAqLCBpbnQpOwoKCmV4dGVybiBpbnQgdWZzX2ZyYWdfbWFwIChzdHJ1Y3QgaW5vZGUgKiwgaW50 KTsKZXh0ZXJuIHZvaWQgdWZzX3JlYWRfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZv aWQgdWZzX3B1dF9pbm9kZSAoc3RydWN0IGlub2RlICopOwpleHRlcm4gdm9pZCB1ZnNfd3JpdGVf aW5vZGUgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpleHRlcm4gaW50IHVmc19zeW5jX2lub2RlIChz dHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIHVmc19kZWxldGVfaW5vZGUgKHN0cnVjdCBpbm9k ZSAqKTsKZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAqIHVmc19nZXRmcmFnIChzdHJ1Y3QgaW5v ZGUgKiwgdW5zaWduZWQsIGludCwgaW50ICopOwpleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICog dWZzX2JyZWFkIChzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQsIGludCwgaW50ICopOwoKCmV4dGVy biBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVmc19kaXJfb3BlcmF0aW9uczsKCgpleHRlcm4gc3Ry dWN0IGZpbGVfc3lzdGVtX3R5cGUgdWZzX2ZzX3R5cGU7CmV4dGVybiB2b2lkIHVmc193YXJuaW5n IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikg X19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwpleHRlcm4gdm9pZCB1ZnNf ZXJyb3IgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwg Li4uKSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CmV4dGVybiB2b2lk IHVmc19wYW5pYyAoc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh ciAqLCAuLi4pIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKZXh0ZXJu IHZvaWQgdWZzX3dyaXRlX3N1cGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CgoKZXh0ZXJuIHN0 cnVjdCBpbm9kZV9vcGVyYXRpb25zIHVmc19mYXN0X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsK CgpleHRlcm4gdm9pZCB1ZnNfdHJ1bmNhdGUgKHN0cnVjdCBpbm9kZSAqKTsKIyAxOCAiL3Vzci9z cmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdWZzX2ZzX3NiLmgiIDIKCgoKCgpzdHJ1Y3Qg dWZzX2J1ZmZlcl9oZWFkIHsKICAgICAgICB1bnNpZ25lZCBmcmFnbWVudDsKICAgICAgICB1bnNp Z25lZCBjb3VudDsKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaFsoODE5MiAvIDEwMjQp XTsKfTsKCnN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvIHsKICAgICAgICBzdHJ1Y3QgdWZzX2N5 bGluZGVyX2dyb3VwIHVjZzsKICAgICAgICBfX3UzMiBjX2NneDsKICAgICAgICBfX3UxNiBjX25j eWw7CiAgICAgICAgX191MTYgY19uaWJsazsKICAgICAgICBfX3UzMiBjX25kYmxrOwogICAgICAg IF9fdTMyIGNfcm90b3I7CiAgICAgICAgX191MzIgY19mcm90b3I7CiAgICAgICAgX191MzIgY19p cm90b3I7CiAgICAgICAgX191MzIgY19idG90b2ZmOwogICAgICAgIF9fdTMyIGNfYm9mZjsKICAg ICAgICBfX3UzMiBjX2l1c2Vkb2ZmOwogICAgICAgIF9fdTMyIGNfZnJlZW9mZjsKICAgICAgICBf X3UzMiBjX25leHRmcmVlb2ZmOwogICAgICAgIF9fdTMyIGNfY2x1c3RlcnN1bW9mZjsKICAgICAg ICBfX3UzMiBjX2NsdXN0ZXJvZmY7CiAgICAgICAgX191MzIgY19uY2x1c3RlcmJsa3M7Cn07Cgpz dHJ1Y3QgdWZzX3NiX3ByaXZhdGVfaW5mbyB7CiAgICAgICAgc3RydWN0IHVmc19idWZmZXJfaGVh ZCBzX3ViaDsKICAgICAgICBfX3UzMiBzX3NibGtubzsKICAgICAgICBfX3UzMiBzX2NibGtubzsK ICAgICAgICBfX3UzMiBzX2libGtubzsKICAgICAgICBfX3UzMiBzX2RibGtubzsKICAgICAgICBf X3UzMiBzX2Nnb2Zmc2V0OwogICAgICAgIF9fdTMyIHNfY2dtYXNrOwogICAgICAgIF9fdTMyIHNf c2l6ZTsKICAgICAgICBfX3UzMiBzX2RzaXplOwogICAgICAgIF9fdTMyIHNfbmNnOwogICAgICAg IF9fdTMyIHNfYnNpemU7CiAgICAgICAgX191MzIgc19mc2l6ZTsKICAgICAgICBfX3UzMiBzX2Zw YjsKICAgICAgICBfX3UzMiBzX21pbmZyZWU7CiAgICAgICAgX191MzIgc19ibWFzazsKICAgICAg ICBfX3UzMiBzX2ZtYXNrOwogICAgICAgIF9fdTMyIHNfYnNoaWZ0OwogICAgICAgIF9fdTMyIHNf ZnNoaWZ0OwogICAgICAgIF9fdTMyIHNfZnBic2hpZnQ7CiAgICAgICAgX191MzIgc19mc2J0b2Ri OwogICAgICAgIF9fdTMyIHNfc2JzaXplOwogICAgICAgIF9fdTMyIHNfY3NtYXNrOwogICAgICAg IF9fdTMyIHNfY3NzaGlmdDsKICAgICAgICBfX3UzMiBzX25pbmRpcjsKICAgICAgICBfX3UzMiBz X2lub3BiOwogICAgICAgIF9fdTMyIHNfbnNwZjsKICAgICAgICBfX3UzMiBzX25wc2VjdDsKICAg ICAgICBfX3UzMiBzX2ludGVybGVhdmU7CiAgICAgICAgX191MzIgc190cmFja3NrZXc7CiAgICAg ICAgX191MzIgc19jc2FkZHI7CiAgICAgICAgX191MzIgc19jc3NpemU7CiAgICAgICAgX191MzIg c19jZ3NpemU7CiAgICAgICAgX191MzIgc19udHJhazsKICAgICAgICBfX3UzMiBzX25zZWN0Owog ICAgICAgIF9fdTMyIHNfc3BjOwogICAgICAgIF9fdTMyIHNfaXBnOwogICAgICAgIF9fdTMyIHNf ZnBnOwogICAgICAgIF9fdTMyIHNfY3BjOwogICAgICAgIF9fczMyIHNfY29udGlnc3Vtc2l6ZTsK ICAgICAgICBfX3M2NCBzX3FibWFzazsKICAgICAgICBfX3M2NCBzX3FmbWFzazsKICAgICAgICBf X3MzMiBzX3Bvc3RibGZvcm1hdDsKICAgICAgICBfX3MzMiBzX25ycG9zOwogICAgICAgIF9fczMy IHNfcG9zdGJsb2ZmOwogICAgICAgIF9fczMyIHNfcm90YmxvZmY7CgogICAgICAgIF9fdTMyIHNf ZnBibWFzazsKICAgICAgICBfX3UzMiBzX2FwYjsKICAgICAgICBfX3UzMiBzXzJhcGI7CiAgICAg ICAgX191MzIgc18zYXBiOwogICAgICAgIF9fdTMyIHNfYXBibWFzazsKICAgICAgICBfX3UzMiBz X2FwYnNoaWZ0OwogICAgICAgIF9fdTMyIHNfMmFwYnNoaWZ0OwogICAgICAgIF9fdTMyIHNfM2Fw YnNoaWZ0OwogICAgICAgIF9fdTMyIHNfbnNwZnNoaWZ0OwogICAgICAgIF9fdTMyIHNfbnNwYjsK ICAgICAgICBfX3UzMiBzX2lub3BmOwogICAgICAgIF9fdTMyIHNfc2JiYXNlOwogICAgICAgIF9f dTMyIHNfYnBmOwogICAgICAgIF9fdTMyIHNfYnBmc2hpZnQ7CiAgICAgICAgX191MzIgc19icGZt YXNrOwoKICAgICAgICBfX3UzMiBzX21heHN5bWxpbmtsZW47Cn07CgoKCgoKc3RydWN0IHVmc19z Yl9pbmZvIHsKICAgICAgICBzdHJ1Y3QgdWZzX3NiX3ByaXZhdGVfaW5mbyAqIHNfdXNwaTsKICAg ICAgICBzdHJ1Y3QgdWZzX2NzdW0gKiBzX2NzcFszMV07CiAgICAgICAgdW5zaWduZWQgc19ieXRl c2V4OwogICAgICAgIHVuc2lnbmVkIHNfZmxhZ3M7CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFk ICoqIHNfdWNnOwogICAgICAgIHN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogc191Y3BpWzhd OwogICAgICAgIHVuc2lnbmVkIHNfY2dub1s4XTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzX2Nn X2xvYWRlZDsKICAgICAgICB1bnNpZ25lZCBzX21vdW50X29wdDsKfTsKCgoKCgoKCnN0cnVjdCB1 ZnNfc3VwZXJfYmxvY2tfZmlyc3QgewogICAgICAgIF9fdTMyIGZzX2xpbms7CiAgICAgICAgX191 MzIgZnNfcmxpbms7CiAgICAgICAgX191MzIgZnNfc2Jsa25vOwogICAgICAgIF9fdTMyIGZzX2Ni bGtubzsKICAgICAgICBfX3UzMiBmc19pYmxrbm87CiAgICAgICAgX191MzIgZnNfZGJsa25vOwog ICAgICAgIF9fdTMyIGZzX2Nnb2Zmc2V0OwogICAgICAgIF9fdTMyIGZzX2NnbWFzazsKICAgICAg ICBfX3UzMiBmc190aW1lOwogICAgICAgIF9fdTMyIGZzX3NpemU7CiAgICAgICAgX191MzIgZnNf ZHNpemU7CiAgICAgICAgX191MzIgZnNfbmNnOwogICAgICAgIF9fdTMyIGZzX2JzaXplOwogICAg ICAgIF9fdTMyIGZzX2ZzaXplOwogICAgICAgIF9fdTMyIGZzX2ZyYWc7CiAgICAgICAgX191MzIg ZnNfbWluZnJlZTsKICAgICAgICBfX3UzMiBmc19yb3RkZWxheTsKICAgICAgICBfX3UzMiBmc19y cHM7CiAgICAgICAgX191MzIgZnNfYm1hc2s7CiAgICAgICAgX191MzIgZnNfZm1hc2s7CiAgICAg ICAgX191MzIgZnNfYnNoaWZ0OwogICAgICAgIF9fdTMyIGZzX2ZzaGlmdDsKICAgICAgICBfX3Uz MiBmc19tYXhjb250aWc7CiAgICAgICAgX191MzIgZnNfbWF4YnBnOwogICAgICAgIF9fdTMyIGZz X2ZyYWdzaGlmdDsKICAgICAgICBfX3UzMiBmc19mc2J0b2RiOwogICAgICAgIF9fdTMyIGZzX3Ni c2l6ZTsKICAgICAgICBfX3UzMiBmc19jc21hc2s7CiAgICAgICAgX191MzIgZnNfY3NzaGlmdDsK ICAgICAgICBfX3UzMiBmc19uaW5kaXI7CiAgICAgICAgX191MzIgZnNfaW5vcGI7CiAgICAgICAg X191MzIgZnNfbnNwZjsKICAgICAgICBfX3UzMiBmc19vcHRpbTsKICAgICAgICB1bmlvbiB7CiAg ICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19u cHNlY3Q7CiAgICAgICAgICAgICAgICB9IGZzX3N1bjsKICAgICAgICAgICAgICAgIHN0cnVjdCB7 CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3N0YXRlOwogICAgICAgICAgICAgICAg fSBmc19zdW54ODY7CiAgICAgICAgfSBmc191MTsKICAgICAgICBfX3UzMiBmc19pbnRlcmxlYXZl OwogICAgICAgIF9fdTMyIGZzX3RyYWNrc2tldzsKICAgICAgICBfX3UzMiBmc19pZFsyXTsKICAg ICAgICBfX3UzMiBmc19jc2FkZHI7CiAgICAgICAgX191MzIgZnNfY3NzaXplOwogICAgICAgIF9f dTMyIGZzX2Nnc2l6ZTsKICAgICAgICBfX3UzMiBmc19udHJhazsKICAgICAgICBfX3UzMiBmc19u c2VjdDsKICAgICAgICBfX3UzMiBmc19zcGM7CiAgICAgICAgX191MzIgZnNfbmN5bDsKICAgICAg ICBfX3UzMiBmc19jcGc7CiAgICAgICAgX191MzIgZnNfaXBnOwogICAgICAgIF9fdTMyIGZzX2Zw ZzsKICAgICAgICBzdHJ1Y3QgdWZzX2NzdW0gZnNfY3N0b3RhbDsKICAgICAgICBfX3M4IGZzX2Zt b2Q7CiAgICAgICAgX19zOCBmc19jbGVhbjsKICAgICAgICBfX3M4IGZzX3Jvbmx5OwogICAgICAg IF9fczggZnNfZmxhZ3M7CiAgICAgICAgX19zOCBmc19mc21udFs1MTIgLSAyMTJdOwoKfTsKCnN0 cnVjdCB1ZnNfc3VwZXJfYmxvY2tfc2Vjb25kIHsKICAgICAgICBfX3M4IGZzX2ZzbW50WzIxMl07 CiAgICAgICAgX191MzIgZnNfY2dyb3RvcjsKICAgICAgICBfX3UzMiBmc19jc3BbMzFdOwogICAg ICAgIF9fdTMyIGZzX21heGNsdXN0ZXI7CiAgICAgICAgX191MzIgZnNfY3BjOwogICAgICAgIF9f dTE2IGZzX29wb3N0YmxbODJdOwp9OwoKc3RydWN0IHVmc19zdXBlcl9ibG9ja190aGlyZCB7CiAg ICAgICAgX191MTYgZnNfb3Bvc3RibFs0Nl07CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAg ICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfc3BhcmVjb25bNTNd OwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19yZWNsYWltOwogICAgICAgICAgICAg ICAgICAgICAgICBfX3MzMiBmc19zcGFyZWNvbjJbMV07CiAgICAgICAgICAgICAgICAgICAgICAg IF9fczMyIGZzX3N0YXRlOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19xYm1hc2tb Ml07CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGZzX3FmbWFza1syXTsKICAgICAgICAg ICAgICAgIH0gZnNfc3VuOwogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAg ICAgICAgICAgX19zMzIgZnNfc3BhcmVjb25bNTNdOwogICAgICAgICAgICAgICAgICAgICAgICBf X3MzMiBmc19yZWNsYWltOwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19zcGFyZWNv bjJbMV07CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGZzX25wc2VjdDsKICAgICAgICAg ICAgICAgICAgICAgICAgX191MzIgZnNfcWJtYXNrWzJdOwogICAgICAgICAgICAgICAgICAgICAg ICBfX3UzMiBmc19xZm1hc2tbMl07CiAgICAgICAgICAgICAgICB9IGZzX3N1bng4NjsKICAgICAg ICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3NwYXJl Y29uWzUwXTsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfY29udGlnc3Vtc2l6ZTsK ICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfbWF4c3ltbGlua2xlbjsKICAgICAgICAg ICAgICAgICAgICAgICAgX19zMzIgZnNfaW5vZGVmbXQ7CiAgICAgICAgICAgICAgICAgICAgICAg IF9fdTMyIGZzX21heGZpbGVzaXplWzJdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBm c19xYm1hc2tbMl07CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGZzX3FmbWFza1syXTsK ICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfc3RhdGU7CiAgICAgICAgICAgICAgICB9 IGZzXzQ0OwogICAgICAgIH0gZnNfdTI7CiAgICAgICAgX19zMzIgZnNfcG9zdGJsZm9ybWF0Owog ICAgICAgIF9fczMyIGZzX25ycG9zOwogICAgICAgIF9fczMyIGZzX3Bvc3RibG9mZjsKICAgICAg ICBfX3MzMiBmc19yb3RibG9mZjsKICAgICAgICBfX3MzMiBmc19tYWdpYzsKICAgICAgICBfX3U4 IGZzX3NwYWNlWzFdOwp9OwojIDY4MiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2Vmc19m c19zYi5oIiAxCiMgMjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2Vmc19m c19zYi5oIgpzdHJ1Y3QgZWZzX3N1cGVyIHsKICAgICAgICBpbnQzMl90IGZzX3NpemU7CiAgICAg ICAgaW50MzJfdCBmc19maXJzdGNnOwogICAgICAgIGludDMyX3QgZnNfY2dmc2l6ZTsKICAgICAg ICBzaG9ydCBmc19jZ2lzaXplOwogICAgICAgIHNob3J0IGZzX3NlY3RvcnM7CiAgICAgICAgc2hv cnQgZnNfaGVhZHM7CiAgICAgICAgc2hvcnQgZnNfbmNnOwogICAgICAgIHNob3J0IGZzX2RpcnR5 OwogICAgICAgIGludDMyX3QgZnNfdGltZTsKICAgICAgICBpbnQzMl90IGZzX21hZ2ljOwogICAg ICAgIGNoYXIgZnNfZm5hbWVbNl07CiAgICAgICAgY2hhciBmc19mcGFja1s2XTsKICAgICAgICBp bnQzMl90IGZzX2Jtc2l6ZTsKICAgICAgICBpbnQzMl90IGZzX3RmcmVlOwogICAgICAgIGludDMy X3QgZnNfdGlub2RlOwogICAgICAgIGludDMyX3QgZnNfYm1ibG9jazsKICAgICAgICBpbnQzMl90 IGZzX3JlcGxzYjsKICAgICAgICBpbnQzMl90IGZzX2xhc3RpYWxsb2M7CiAgICAgICAgY2hhciBm c19zcGFyZVsyMF07CiAgICAgICAgaW50MzJfdCBmc19jaGVja3N1bTsKfTsKCgpzdHJ1Y3QgZWZz X3NiX2luZm8gewogICAgICAgIGludDMyX3QgZnNfbWFnaWM7CiAgICAgICAgaW50MzJfdCBmc19z dGFydDsKICAgICAgICBpbnQzMl90IGZpcnN0X2Jsb2NrOwogICAgICAgIGludDMyX3QgdG90YWxf YmxvY2tzOwogICAgICAgIGludDMyX3QgZ3JvdXBfc2l6ZTsKICAgICAgICBpbnQzMl90IGRhdGFf ZnJlZTsKICAgICAgICBpbnQzMl90IGlub2RlX2ZyZWU7CiAgICAgICAgc2hvcnQgaW5vZGVfYmxv Y2tzOwogICAgICAgIHNob3J0IHRvdGFsX2dyb3VwczsKfTsKIyA2ODMgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9saW51eC9yb21mc19mc19zYi5oIiAxCgoKCgoKc3RydWN0IHJvbWZzX3NiX2luZm8g ewogICAgICAgIHVuc2lnbmVkIGxvbmcgc19tYXhzaXplOwp9OwojIDY4NCAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2xpbnV4L3NtYl9mc19zYi5oIiAxCiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2xpbnV4L3NtYl9mc19zYi5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9p bmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyAxNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgvc21iX2ZzX3NiLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVk ZS9saW51eC9zbWIuaCIgMQojIDEyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51 eC9zbWIuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC90eXBlcy5o IiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NtYi5oIiAyCgpl bnVtIHNtYl9wcm90b2NvbCB7CiAgICAgICAgU01CX1BST1RPQ09MX05PTkUsCiAgICAgICAgU01C X1BST1RPQ09MX0NPUkUsCiAgICAgICAgU01CX1BST1RPQ09MX0NPUkVQTFVTLAogICAgICAgIFNN Ql9QUk9UT0NPTF9MQU5NQU4xLAogICAgICAgIFNNQl9QUk9UT0NPTF9MQU5NQU4yLAogICAgICAg IFNNQl9QUk9UT0NPTF9OVDEKfTsKCmVudW0gc21iX2Nhc2VfaG5kbCB7CiAgICAgICAgU01CX0NB U0VfREVGQVVMVCwKICAgICAgICBTTUJfQ0FTRV9MT1dFUiwKICAgICAgICBTTUJfQ0FTRV9VUFBF Ugp9OwoKc3RydWN0IHNtYl9kc2thdHRyIHsKICAgICAgICBfX3UxNiB0b3RhbDsKICAgICAgICBf X3UxNiBhbGxvY2Jsb2NrczsKICAgICAgICBfX3UxNiBibG9ja3NpemU7CiAgICAgICAgX191MTYg ZnJlZTsKfTsKCnN0cnVjdCBzbWJfY29ubl9vcHQgewoKCiAgICAgICAgdW5zaWduZWQgaW50IGZk OwoKICAgICAgICBlbnVtIHNtYl9wcm90b2NvbCBwcm90b2NvbDsKICAgICAgICBlbnVtIHNtYl9j YXNlX2huZGwgY2FzZV9oYW5kbGluZzsKCgoKICAgICAgICBfX3UzMiBtYXhfeG1pdDsKICAgICAg ICBfX3UxNiBzZXJ2ZXJfdWlkOwogICAgICAgIF9fdTE2IHRpZDsKCgogICAgICAgIF9fdTE2IHNl Y21vZGU7CiAgICAgICAgX191MTYgbWF4bXV4OwogICAgICAgIF9fdTE2IG1heHZjczsKICAgICAg ICBfX3UxNiByYXdtb2RlOwogICAgICAgIF9fdTMyIHNlc3NrZXk7CgoKICAgICAgICBfX3UzMiBt YXhyYXc7CiAgICAgICAgX191MzIgY2FwYWJpbGl0aWVzOwogICAgICAgIF9fczE2IHNlcnZlcnpv bmU7Cn07CgoKCgpzdHJ1Y3Qgc21iX25sc19jb2RlcGFnZSB7CiAgICAgICAgY2hhciBsb2NhbF9u YW1lWzIwXTsKICAgICAgICBjaGFyIHJlbW90ZV9uYW1lWzIwXTsKfTsKIyA3OCAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc21iLmgiCnN0cnVjdCBzbWJfZmF0dHIgewoKICAg ICAgICBfX3UxNiBhdHRyOwoKICAgICAgICB1bnNpZ25lZCBsb25nIGZfaW5vOwogICAgICAgIHVt b2RlX3QgZl9tb2RlOwogICAgICAgIG5saW5rX3QgZl9ubGluazsKICAgICAgICB1aWRfdCBmX3Vp ZDsKICAgICAgICBnaWRfdCBmX2dpZDsKICAgICAgICBrZGV2X3QgZl9yZGV2OwogICAgICAgIG9m Zl90IGZfc2l6ZTsKICAgICAgICB0aW1lX3QgZl9hdGltZTsKICAgICAgICB0aW1lX3QgZl9tdGlt ZTsKICAgICAgICB0aW1lX3QgZl9jdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGZfYmxrc2l6 ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGZfYmxvY2tzOwp9OwoKZW51bSBzbWJfY29ubl9zdGF0 ZSB7CiAgICAgICAgQ09OTl9WQUxJRCwKICAgICAgICBDT05OX0lOVkFMSUQsCgogICAgICAgIENP Tk5fUkVUUklFRCwKICAgICAgICBDT05OX1JFVFJZSU5HCn07CiMgMTYgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NtYl9mc19zYi5oIiAyCgoKCgoKCgpzdHJ1Y3Qgc21iX3Ni X2luZm8gewogICAgICAgIGVudW0gc21iX2Nvbm5fc3RhdGUgc3RhdGU7CiAgICAgICAgc3RydWN0 IGZpbGUgKiBzb2NrX2ZpbGU7CgogICAgICAgIHN0cnVjdCBzbWJfbW91bnRfZGF0YV9rZXJuZWwg Km1udDsKICAgICAgICB1bnNpZ25lZCBjaGFyICp0ZW1wX2J1ZjsKCgoKCiAgICAgICAgdW5zaWdu ZWQgaW50IGdlbmVyYXRpb247CiAgICAgICAgcGlkX3QgY29ubl9waWQ7CiAgICAgICAgc3RydWN0 IHNtYl9jb25uX29wdCBvcHQ7CgogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgc2VtOwogICAgICAg IHdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CgogICAgICAgIF9fdTMyIHBhY2tldF9zaXplOwogICAg ICAgIHVuc2lnbmVkIGNoYXIgKiBwYWNrZXQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgcmNsczsK ICAgICAgICB1bnNpZ25lZCBzaG9ydCBlcnI7CgoKICAgICAgICB2b2lkICpkYXRhX3JlYWR5OwoK CiAgICAgICAgc3RydWN0IG5sc190YWJsZSAqcmVtb3RlX25sczsKICAgICAgICBzdHJ1Y3Qgbmxz X3RhYmxlICpsb2NhbF9ubHM7CgoKCgogICAgICAgIGNoYXIgKm5hbWVfYnVmOwoKICAgICAgICBp bnQgKCpjb252ZXJ0KShjaGFyICosIGludCwgY29uc3QgY2hhciAqLCBpbnQsCiAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IG5sc190YWJsZSAqLCBzdHJ1Y3QgbmxzX3RhYmxlICopOwp9OwoK CnN0YXRpYyBpbmxpbmUgdm9pZApzbWJfbG9ja19zZXJ2ZXIoc3RydWN0IHNtYl9zYl9pbmZvICpz ZXJ2ZXIpCnsKICAgICAgICBkb3duKCYoc2VydmVyLT5zZW0pKTsKfQoKc3RhdGljIGlubGluZSB2 b2lkCnNtYl91bmxvY2tfc2VydmVyKHN0cnVjdCBzbWJfc2JfaW5mbyAqc2VydmVyKQp7CiAgICAg ICAgdXAoJihzZXJ2ZXItPnNlbSkpOwp9CiMgNjg1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvaGZzX2ZzX3NiLmgiIDEKIyAxNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvaGZzX2ZzX3NiLmgiCnN0cnVjdCBoZnNfbmFtZTsKCnR5cGVkZWYgaW50ICgqaGZzX25hbWVp bl9mbikgKGNoYXIgKiwgY29uc3Qgc3RydWN0IGhmc19uYW1lICopOwp0eXBlZGVmIHZvaWQgKCpo ZnNfbmFtZW91dF9mbikgKHN0cnVjdCBoZnNfbmFtZSAqLCBjb25zdCBjaGFyICosIGludCk7CnR5 cGVkZWYgdm9pZCAoKmhmc19pZmlsbF9mbikgKHN0cnVjdCBpbm9kZSAqLCBpbm9fdCwgY29uc3Qg aW50KTsKCgoKCgoKc3RydWN0IGhmc19zYl9pbmZvIHsKICAgICAgICBpbnQgbWFnaWM7CiAgICAg ICAgc3RydWN0IGhmc19tZGIgKnNfbWRiOwogICAgICAgIGludCBzX3F1aWV0OwoKICAgICAgICBp bnQgc19sb3dlcmNhc2U7CiAgICAgICAgaW50IHNfYWZwZDsKICAgICAgICBpbnQgc192ZXJzaW9u OwogICAgICAgIGhmc19uYW1laW5fZm4gc19uYW1laW47CgoKICAgICAgICBoZnNfbmFtZW91dF9m biBzX25hbWVvdXQ7CgoKICAgICAgICBoZnNfaWZpbGxfZm4gc19pZmlsbDsKCiAgICAgICAgY29u c3Qgc3RydWN0IGhmc19uYW1lICpzX3Jlc2VydmVkMTsKICAgICAgICBjb25zdCBzdHJ1Y3QgaGZz X25hbWUgKnNfcmVzZXJ2ZWQyOwogICAgICAgIF9fdTMyIHNfdHlwZTsKICAgICAgICBfX3UzMiBz X2NyZWF0b3I7CiAgICAgICAgdW1vZGVfdCBzX3VtYXNrOwoKICAgICAgICB1aWRfdCBzX3VpZDsK ICAgICAgICBnaWRfdCBzX2dpZDsKICAgICAgICBjaGFyIHNfY29udjsKfTsKIyA2ODYgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9saW51eC9hZGZzX2ZzX3NiLmgiIDEKIyAxMyAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvYWRmc19mc19zYi5oIgpzdHJ1Y3QgYWRmc19kaXNjbWFw OwpzdHJ1Y3QgYWRmc19kaXJfb3BzOwoKCgoKc3RydWN0IGFkZnNfc2JfaW5mbyB7CiAgICAgICAg c3RydWN0IGFkZnNfZGlzY21hcCAqc19tYXA7CiAgICAgICAgc3RydWN0IGFkZnNfZGlyX29wcyAq c19kaXI7CgogICAgICAgIHVpZF90IHNfdWlkOwogICAgICAgIGdpZF90IHNfZ2lkOwogICAgICAg IHVtb2RlX3Qgc19vd25lcl9tYXNrOwogICAgICAgIHVtb2RlX3Qgc19vdGhlcl9tYXNrOwoKICAg ICAgICBfX3UzMiBzX2lkc19wZXJfem9uZTsKICAgICAgICBfX3UzMiBzX2lkbGVuOwogICAgICAg IF9fdTMyIHNfbWFwX3NpemU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX3NpemU7CiAgICAgICAg c2lnbmVkIGludCBzX21hcDJibGs7CiAgICAgICAgdW5zaWduZWQgaW50IHNfbG9nMnNoYXJlc2l6 ZTsKICAgICAgICB1bnNpZ25lZCBpbnQgc192ZXJzaW9uOwogICAgICAgIHVuc2lnbmVkIGludCBz X25hbWVsZW47Cn07CiMgNjg3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9m cy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvcW54NF9mc19z Yi5oIiAxCiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3FueDRfZnNf c2IuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9xbng0X2ZzLmgi IDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvcW54NF9mcy5oIgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3FueHR5cGVzLmgiIDEKIyAx NCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvcW54NF9mcy5oIiAyCiMgNDUg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3FueDRfZnMuaCIKc3RydWN0IHFu eDRfaW5vZGVfZW50cnkgewogICAgICAgIGNoYXIgZGlfZm5hbWVbMTZdOwogICAgICAgIHFueDRf b2ZmX3QgZGlfc2l6ZTsKICAgICAgICBxbng0X3h0bnRfdCBkaV9maXJzdF94dG50OwogICAgICAg IF9fdTMyIGRpX3hibGs7CiAgICAgICAgX19zMzIgZGlfZnRpbWU7CiAgICAgICAgX19zMzIgZGlf bXRpbWU7CiAgICAgICAgX19zMzIgZGlfYXRpbWU7CiAgICAgICAgX19zMzIgZGlfY3RpbWU7CiAg ICAgICAgcW54NF9ueHRudF90IGRpX251bV94dG50czsKICAgICAgICBxbng0X21vZGVfdCBkaV9t b2RlOwogICAgICAgIHFueDRfbXVpZF90IGRpX3VpZDsKICAgICAgICBxbng0X21naWRfdCBkaV9n aWQ7CiAgICAgICAgcW54NF9ubGlua190IGRpX25saW5rOwogICAgICAgIF9fdTggZGlfemVyb1s0 XTsKICAgICAgICBxbng0X2Z0eXBlX3QgZGlfdHlwZTsKICAgICAgICBfX3U4IGRpX3N0YXR1czsK fTsKCnN0cnVjdCBxbng0X2xpbmtfaW5mbyB7CiAgICAgICAgY2hhciBkbF9mbmFtZVs0OF07CiAg ICAgICAgX191MzIgZGxfaW5vZGVfYmxrOwogICAgICAgIF9fdTggZGxfaW5vZGVfbmR4OwogICAg ICAgIF9fdTggZGxfc3BhcmVbMTBdOwogICAgICAgIF9fdTggZGxfc3RhdHVzOwp9OwoKc3RydWN0 IHFueDRfeGJsayB7CiAgICAgICAgX191MzIgeGJsa19uZXh0X3hibGs7CiAgICAgICAgX191MzIg eGJsa19wcmV2X3hibGs7CiAgICAgICAgX191OCB4YmxrX251bV94dG50czsKICAgICAgICBfX3U4 IHhibGtfc3BhcmVbM107CiAgICAgICAgX19zMzIgeGJsa19udW1fYmxvY2tzOwogICAgICAgIHFu eDRfeHRudF90IHhibGtfeHRudHNbNjBdOwogICAgICAgIGNoYXIgeGJsa19zaWduYXR1cmVbOF07 CiAgICAgICAgcW54NF94dG50X3QgeGJsa19maXJzdF94dG50Owp9OwoKc3RydWN0IHFueDRfc3Vw ZXJfYmxvY2sgewogICAgICAgIHN0cnVjdCBxbng0X2lub2RlX2VudHJ5IFJvb3REaXI7CiAgICAg ICAgc3RydWN0IHFueDRfaW5vZGVfZW50cnkgSW5vZGU7CiAgICAgICAgc3RydWN0IHFueDRfaW5v ZGVfZW50cnkgQm9vdDsKICAgICAgICBzdHJ1Y3QgcW54NF9pbm9kZV9lbnRyeSBBbHRCb290Owp9 OwojIDEwMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvcW54NF9mcy5oIgpl eHRlcm4gc3RydWN0IGRlbnRyeSAqcW54NF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVj dCBkZW50cnkgKmRlbnRyeSk7CmV4dGVybiB1bnNpZ25lZCBsb25nIHFueDRfY291bnRfZnJlZV9i bG9ja3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CmV4dGVybiB1bnNpZ25lZCBsb25nIHFueDRf YmxvY2tfbWFwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgaWJsb2NrKTsKCmV4dGVybiBzdHJ1 Y3QgYnVmZmVyX2hlYWQgKnFueDRfZ2V0YmxrKHN0cnVjdCBpbm9kZSAqLCBpbnQsIGludCk7CmV4 dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnFueDRfYnJlYWQoc3RydWN0IGlub2RlICosIGludCwg aW50KTsKCmV4dGVybiBpbnQgcW54NF9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBk ZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpOwpleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMg cW54NF9maWxlX2lub2RlX29wZXJhdGlvbnM7CmV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9u cyBxbng0X2Rpcl9pbm9kZV9vcGVyYXRpb25zOwpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9u cyBxbng0X2ZpbGVfb3BlcmF0aW9uczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcW54 NF9kaXJfb3BlcmF0aW9uczsKZXh0ZXJuIGludCBxbng0X2lzX2ZyZWUoc3RydWN0IHN1cGVyX2Js b2NrICpzYiwgbG9uZyBibG9jayk7CmV4dGVybiBpbnQgcW54NF9zZXRfYml0bWFwKHN0cnVjdCBz dXBlcl9ibG9jayAqc2IsIGxvbmcgYmxvY2ssIGludCBidXN5KTsKZXh0ZXJuIGludCBxbng0X2Ny ZWF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2Rl KTsKZXh0ZXJuIHZvaWQgcW54NF90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZXh0ZXJu IHZvaWQgcW54NF9mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwpleHRlcm4gaW50IHFu eDRfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwpleHRl cm4gaW50IHFueDRfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRy eSk7CmV4dGVybiBpbnQgcW54NF9zeW5jX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBk ZW50cnkgKmRlbnRyeSwgaW50KTsKZXh0ZXJuIGludCBxbng0X3N5bmNfaW5vZGUoc3RydWN0IGlu b2RlICppbm9kZSk7CmV4dGVybiBpbnQgcW54NF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9k ZSwgbG9uZyBpYmxvY2ssIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBjcmVhdGUpOwojIDE1 ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9xbng0X2ZzX3NiLmgiIDIKCgoK CgpzdHJ1Y3QgcW54NF9zYl9pbmZvIHsKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNiX2J1 ZjsKICAgICAgICBzdHJ1Y3QgcW54NF9zdXBlcl9ibG9jayAqc2I7CiAgICAgICAgdW5zaWduZWQg aW50IFZlcnNpb247CiAgICAgICAgc3RydWN0IHFueDRfaW5vZGVfZW50cnkgKkJpdE1hcDsKfTsK IyA2ODggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oIiAxCgoK CgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3RxdWV1ZS5oIiAx CiMgMTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3RxdWV1ZS5oIgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiIDEKIyAxNyAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdHF1ZXVlLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9saXN0LmgiIDEKIyAxOCAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdHF1ZXVlLmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9hc20vYml0b3BzLmgiIDEKIyAxOSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2luY2x1ZGUvbGludXgvdHF1ZXVlLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9hc20vc3lzdGVtLmgiIDEKIyAyMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgvdHF1ZXVlLmgiIDIKIyAzOCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUv bGludXgvdHF1ZXVlLmgiCnN0cnVjdCB0cV9zdHJ1Y3QgewogICAgICAgIHN0cnVjdCBsaXN0X2hl YWQgbGlzdDsKICAgICAgICB1bnNpZ25lZCBsb25nIHN5bmM7CiAgICAgICAgdm9pZCAoKnJvdXRp bmUpKHZvaWQgKik7CiAgICAgICAgdm9pZCAqZGF0YTsKfTsKIyA2NCAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvdHF1ZXVlLmgiCnR5cGVkZWYgc3RydWN0IGxpc3RfaGVhZCB0 YXNrX3F1ZXVlOwoKCgoKZXh0ZXJuIHRhc2tfcXVldWUgdHFfdGltZXIsIHRxX2ltbWVkaWF0ZSwg dHFfZGlzazsKIyA5NCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdHF1ZXVl LmgiCmV4dGVybiBzcGlubG9ja190IHRxdWV1ZV9sb2NrOwoKCgoKCmV4dGVybiB2b2lkIF9fcnVu X3Rhc2tfcXVldWUodGFza19xdWV1ZSAqbGlzdCk7CgpzdGF0aWMgaW5saW5lIHZvaWQgcnVuX3Rh c2tfcXVldWUodGFza19xdWV1ZSAqbGlzdCkKewogICAgICAgIGlmICgoIWxpc3RfZW1wdHkoJips aXN0KSkpCiAgICAgICAgICAgICAgICBfX3J1bl90YXNrX3F1ZXVlKGxpc3QpOwp9CiMgOSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaCIgMgojIDI2 ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oIgpz dHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2sKewogIF9fdTMyIHNfYmxvY2tfY291bnQ7CiAgX191 MzIgc19mcmVlX2Jsb2NrczsKICBfX3UzMiBzX3Jvb3RfYmxvY2s7CiAgX191MzIgc19qb3VybmFs X2Jsb2NrOwogIF9fdTMyIHNfam91cm5hbF9kZXY7CiMgNDMgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgiCiAgX191MzIgc19vcmlnX2pvdXJuYWxf c2l6ZTsKICBfX3UzMiBzX2pvdXJuYWxfdHJhbnNfbWF4IDsKICBfX3UzMiBzX2pvdXJuYWxfYmxv Y2tfY291bnQgOwogIF9fdTMyIHNfam91cm5hbF9tYXhfYmF0Y2ggOwogIF9fdTMyIHNfam91cm5h bF9tYXhfY29tbWl0X2FnZSA7CiAgX191MzIgc19qb3VybmFsX21heF90cmFuc19hZ2UgOwogIF9f dTE2IHNfYmxvY2tzaXplOwogIF9fdTE2IHNfb2lkX21heHNpemU7CiAgX191MTYgc19vaWRfY3Vy c2l6ZTsKICBfX3UxNiBzX3N0YXRlOwogIGNoYXIgc19tYWdpY1sxMl07CiAgX191MzIgc19oYXNo X2Z1bmN0aW9uX2NvZGU7CiAgX191MTYgc190cmVlX2hlaWdodDsKICBfX3UxNiBzX2JtYXBfbnI7 CiAgX191MTYgc192ZXJzaW9uOwoKCgoKICBfX3UxNiBzX3Jlc2VydmVkOwogIF9fdTMyIHNfaW5v ZGVfZ2VuZXJhdGlvbjsKICBjaGFyIHNfdW51c2VkWzEyNF0gOwp9IF9fYXR0cmlidXRlX18gKChf X3BhY2tlZF9fKSk7CiMgMTIxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9y ZWlzZXJmc19mc19zYi5oIgpzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2tfdjEKewogIF9fdTMy IHNfYmxvY2tfY291bnQ7CiAgX191MzIgc19mcmVlX2Jsb2NrczsKICBfX3UzMiBzX3Jvb3RfYmxv Y2s7CiAgX191MzIgc19qb3VybmFsX2Jsb2NrOwogIF9fdTMyIHNfam91cm5hbF9kZXY7CiAgX191 MzIgc19vcmlnX2pvdXJuYWxfc2l6ZTsKICBfX3UzMiBzX2pvdXJuYWxfdHJhbnNfbWF4IDsKICBf X3UzMiBzX2pvdXJuYWxfYmxvY2tfY291bnQgOwogIF9fdTMyIHNfam91cm5hbF9tYXhfYmF0Y2gg OwogIF9fdTMyIHNfam91cm5hbF9tYXhfY29tbWl0X2FnZSA7CiAgX191MzIgc19qb3VybmFsX21h eF90cmFuc19hZ2UgOwogIF9fdTE2IHNfYmxvY2tzaXplOwogIF9fdTE2IHNfb2lkX21heHNpemU7 CiAgX191MTYgc19vaWRfY3Vyc2l6ZTsKICBfX3UxNiBzX3N0YXRlOwogIGNoYXIgc19tYWdpY1sx Nl07CiAgX191MTYgc190cmVlX2hlaWdodDsKICBfX3UxNiBzX2JtYXBfbnI7CiAgX191MzIgc19y ZXNlcnZlZDsKfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwojIDIwMCAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaCIKc3RydWN0IHJlaXNl cmZzX2pvdXJuYWxfY25vZGUgewogIHN0cnVjdCBidWZmZXJfaGVhZCAqYmggOwogIGtkZXZfdCBk ZXYgOwogIHVuc2lnbmVkIGxvbmcgYmxvY2tuciA7CiAgaW50IHN0YXRlIDsKICBzdHJ1Y3QgcmVp c2VyZnNfam91cm5hbF9saXN0ICpqbGlzdCA7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25v ZGUgKm5leHQgOwogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpwcmV2IDsKICBzdHJ1 Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqaHByZXYgOwogIHN0cnVjdCByZWlzZXJmc19qb3Vy bmFsX2Nub2RlICpobmV4dCA7Cn07CgpzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX25vZGUgewogIGlu dCBpZCA7CiAgY2hhciAqZGF0YSA7CiAgc3RydWN0IGxpc3RfaGVhZCBsaXN0IDsKfSA7CgpzdHJ1 Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgewogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3Qg KmpvdXJuYWxfbGlzdCA7CiAgc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9ub2RlICoqYml0bWFwcyA7 Cn0gOwoKCgoKc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB7CgogIGNoYXIgKnRf Y2FsbGVyIDsKICBpbnQgdF9ibG9ja3NfbG9nZ2VkIDsKICBpbnQgdF9ibG9ja3NfYWxsb2NhdGVk IDsKICB1bnNpZ25lZCBsb25nIHRfdHJhbnNfaWQgOwogIHN0cnVjdCBzdXBlcl9ibG9jayAqdF9z dXBlciA7Cgp9IDsKCgoKCgoKCnN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgewogIHVuc2ln bmVkIGxvbmcgal9zdGFydCA7CiAgdW5zaWduZWQgbG9uZyBqX2xlbiA7CiAgYXRvbWljX3Qgal9u b256ZXJvbGVuIDsKICBhdG9taWNfdCBqX2NvbW1pdF9sZWZ0IDsKICBhdG9taWNfdCBqX2ZsdXNo aW5nIDsKICBhdG9taWNfdCBqX2NvbW1pdF9mbHVzaGluZyA7CiAgYXRvbWljX3Qgal9vbGRlcl9j b21taXRzX2RvbmUgOwogIHVuc2lnbmVkIGxvbmcgal90cmFuc19pZCA7CiAgdGltZV90IGpfdGlt ZXN0YW1wIDsKICBzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmpfbGlzdF9iaXRtYXAgOwog IHN0cnVjdCBidWZmZXJfaGVhZCAqal9jb21taXRfYmggOwogIHN0cnVjdCByZWlzZXJmc19qb3Vy bmFsX2Nub2RlICpqX3JlYWxibG9jayA7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUg KmpfZnJlZWRsaXN0IDsKICB3YWl0X3F1ZXVlX2hlYWRfdCBqX2NvbW1pdF93YWl0IDsKICB3YWl0 X3F1ZXVlX2hlYWRfdCBqX2ZsdXNoX3dhaXQgOwp9IDsKCnN0cnVjdCByZWlzZXJmc19wYWdlX2xp c3QgOwoKc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgewogIHN0cnVjdCBidWZmZXJfaGVhZCAqKiBq X2FwX2Jsb2NrcyA7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpfbGFzdCA7CiAg c3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpfZmlyc3QgOwoKICBpbnQgal9zdGF0ZSA7 CiAgdW5zaWduZWQgbG9uZyBqX3RyYW5zX2lkIDsKICB1bnNpZ25lZCBsb25nIGpfbW91bnRfaWQg OwogIHVuc2lnbmVkIGxvbmcgal9zdGFydCA7CiAgdW5zaWduZWQgbG9uZyBqX2xlbiA7CiAgdW5z aWduZWQgbG9uZyBqX2xlbl9hbGxvYyA7CiAgYXRvbWljX3Qgal93Y291bnQgOwogIHVuc2lnbmVk IGxvbmcgal9iY291bnQgOwogIHVuc2lnbmVkIGxvbmcgal9maXJzdF91bmZsdXNoZWRfb2Zmc2V0 IDsKICB1bnNpZ25lZCBsb25nIGpfbGFzdF9mbHVzaF90cmFuc19pZCA7CiAgc3RydWN0IGJ1ZmZl cl9oZWFkICpqX2hlYWRlcl9iaCA7CgoKCgogIHN0cnVjdCByZWlzZXJmc19wYWdlX2xpc3QgKmpf Zmx1c2hfcGFnZXMgOwogIHRpbWVfdCBqX3RyYW5zX3N0YXJ0X3RpbWUgOwogIHdhaXRfcXVldWVf aGVhZF90IGpfd2FpdCA7CiAgYXRvbWljX3Qgal93bG9jayA7CiAgd2FpdF9xdWV1ZV9oZWFkX3Qg al9qb2luX3dhaXQgOwogIGF0b21pY190IGpfamxvY2sgOwogIGludCBqX2pvdXJuYWxfbGlzdF9p bmRleCA7CiAgaW50IGpfbGlzdF9iaXRtYXBfaW5kZXggOwogIGludCBqX211c3Rfd2FpdCA7CiAg aW50IGpfbmV4dF9mdWxsX2ZsdXNoIDsKICBpbnQgal9uZXh0X2FzeW5jX2ZsdXNoIDsKCiAgaW50 IGpfY25vZGVfdXNlZCA7CiAgaW50IGpfY25vZGVfZnJlZSA7CgogIHN0cnVjdCByZWlzZXJmc19q b3VybmFsX2Nub2RlICpqX2Nub2RlX2ZyZWVfbGlzdCA7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJu YWxfY25vZGUgKmpfY25vZGVfZnJlZV9vcmlnIDsKCiAgaW50IGpfZnJlZV9iaXRtYXBfbm9kZXMg OwogIGludCBqX3VzZWRfYml0bWFwX25vZGVzIDsKICBzdHJ1Y3QgbGlzdF9oZWFkIGpfYml0bWFw X25vZGVzIDsKICBzdHJ1Y3QgaW5vZGUgal9kdW1teV9pbm9kZSA7CiAgc3RydWN0IHJlaXNlcmZz X2xpc3RfYml0bWFwIGpfbGlzdF9iaXRtYXBbNV0gOwogIHN0cnVjdCByZWlzZXJmc19qb3VybmFs X2xpc3Qgal9qb3VybmFsX2xpc3RbNjRdIDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9k ZSAqal9oYXNoX3RhYmxlWzgxOTJdIDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAq al9saXN0X2hhc2hfdGFibGVbODE5Ml0gOwoKICBzdHJ1Y3QgbGlzdF9oZWFkIGpfcHJlYWxsb2Nf bGlzdDsKfTsKCgoKCnR5cGVkZWYgX191MzIgKCpoYXNoZl90KSAoY29uc3Qgc2lnbmVkIGNoYXIg KiwgaW50KTsKCgpzdHJ1Y3QgcmVpc2VyZnNfc2JfaW5mbwp7CiAgICBzdHJ1Y3QgYnVmZmVyX2hl YWQgKiBzX3NiaDsKCgogICAgc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrICogc19yczsKICAg IHN0cnVjdCBidWZmZXJfaGVhZCAqKiBzX2FwX2JpdG1hcDsKICAgIHN0cnVjdCByZWlzZXJmc19q b3VybmFsICpzX2pvdXJuYWwgOwogICAgdW5zaWduZWQgc2hvcnQgc19tb3VudF9zdGF0ZTsKCgog ICAgdm9pZCAoKmVuZF9pb19oYW5kbGVyKShzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgaW50KTsKICAg IGhhc2hmX3Qgc19oYXNoX2Z1bmN0aW9uOwoKCiAgICB1bnNpZ25lZCBsb25nIHNfbW91bnRfb3B0 OwoKCgoKICAgIHdhaXRfcXVldWVfaGVhZF90IHNfd2FpdDsKCiAgICBhdG9taWNfdCBzX2dlbmVy YXRpb25fY291bnRlcjsKCgoKICAgIGludCBzX2ttYWxsb2NzOwogICAgaW50IHNfZGlza19yZWFk czsKICAgIGludCBzX2Rpc2tfd3JpdGVzOwogICAgaW50IHNfZml4X25vZGVzOwogICAgaW50IHNf ZG9fYmFsYW5jZTsKICAgIGludCBzX3VubmVlZGVkX2xlZnRfbmVpZ2hib3I7CiAgICBpbnQgc19n b29kX3NlYXJjaF9ieV9rZXlfcmVhZGE7CiAgICBpbnQgc19ibWFwczsKICAgIGludCBzX2JtYXBz X3dpdGhvdXRfc2VhcmNoOwogICAgaW50IHNfZGlyZWN0MmluZGlyZWN0OwogICAgaW50IHNfaW5k aXJlY3QyZGlyZWN0Owp9OwojIDQxMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvcmVpc2VyZnNfZnNfc2IuaCIKdm9pZCByZWlzZXJmc19maWxlX2J1ZmZlciAoc3RydWN0IGJ1 ZmZlcl9oZWFkICogYmgsIGludCBsaXN0KTsKaW50IHJlaXNlcmZzX2lzX3N1cGVyKHN0cnVjdCBz dXBlcl9ibG9jayAqcykgOwppbnQgam91cm5hbF9tYXJrX2RpcnR5KHN0cnVjdCByZWlzZXJmc190 cmFuc2FjdGlvbl9oYW5kbGUgKiwgc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBidWZmZXJf aGVhZCAqYmgpIDsKaW50IGZsdXNoX29sZF9jb21taXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqcywg aW50KSA7CmludCBzaG93X3JlaXNlcmZzX2xvY2tzKHZvaWQpIDsKaW50IHJlaXNlcmZzX3Jlc2l6 ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZykgOwojIDY4OSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2xpbnV4L2Jmc19mc19zYi5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2xpbnV4L2Jmc19mc19zYi5oIgpzdHJ1Y3QgYmZzX3NiX2luZm8gewogICAg ICAgIHVuc2lnbmVkIGxvbmcgc2lfYmxvY2tzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2lfZnJl ZWI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzaV9mcmVlaTsKICAgICAgICB1bnNpZ25lZCBsb25n IHNpX2xmX2lvZmY7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzaV9sZl9zYmxrOwogICAgICAgIHVu c2lnbmVkIGxvbmcgc2lfbGZfZWJsazsKICAgICAgICB1bnNpZ25lZCBsb25nIHNpX2xhc3RpOwog ICAgICAgIGNoYXIgKiBzaV9pbWFwOwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqIHNpX3Ni aDsKICAgICAgICBzdHJ1Y3QgYmZzX3N1cGVyX2Jsb2NrICogc2lfYmZzX3NiOwp9OwojIDY5MCAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3VkZl9mc19zYi5oIiAxCiMgMjEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3VkZl9mc19zYi5oIgojcHJhZ21hIHBhY2soMSkK IyAzMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdWRmX2ZzX3NiLmgiCnN0 cnVjdCB1ZGZfc3BhcmluZ19kYXRhCnsKICAgICAgICBfX3UxNiBzX3BhY2tldF9sZW47CiAgICAg ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX3NwYXJfbWFwWzRdOwp9OwoKc3RydWN0IHVkZl92aXJ0 dWFsX2RhdGEKewogICAgICAgIF9fdTMyIHNfbnVtX2VudHJpZXM7CiAgICAgICAgX191MTYgc19z dGFydF9vZmZzZXQ7Cn07CgpzdHJ1Y3QgdWRmX2JpdG1hcAp7CiAgICAgICAgX191MzIgc19leHRM ZW5ndGg7CiAgICAgICAgX191MzIgc19leHRQb3NpdGlvbjsKICAgICAgICBfX3UxNiBzX25yX2dy b3VwczsKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipzX2Jsb2NrX2JpdG1hcDsKfTsKCnN0 cnVjdCB1ZGZfcGFydF9tYXAKewogICAgICAgIHVuaW9uCiAgICAgICAgewogICAgICAgICAgICAg ICAgc3RydWN0IHVkZl9iaXRtYXAgKnNfYml0bWFwOwogICAgICAgICAgICAgICAgc3RydWN0IGlu b2RlICpzX3RhYmxlOwogICAgICAgIH0gc191c3BhY2U7CiAgICAgICAgdW5pb24KICAgICAgICB7 CiAgICAgICAgICAgICAgICBzdHJ1Y3QgdWRmX2JpdG1hcCAqc19iaXRtYXA7CiAgICAgICAgICAg ICAgICBzdHJ1Y3QgaW5vZGUgKnNfdGFibGU7CiAgICAgICAgfSBzX2ZzcGFjZTsKICAgICAgICBf X3UzMiBzX3BhcnRpdGlvbl9yb290OwogICAgICAgIF9fdTMyIHNfcGFydGl0aW9uX2xlbjsKICAg ICAgICBfX3UxNiBzX3BhcnRpdGlvbl90eXBlOwogICAgICAgIF9fdTE2IHNfcGFydGl0aW9uX251 bTsKICAgICAgICB1bmlvbgogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB1ZGZfc3Bh cmluZ19kYXRhIHNfc3BhcmluZzsKICAgICAgICAgICAgICAgIHN0cnVjdCB1ZGZfdmlydHVhbF9k YXRhIHNfdmlydHVhbDsKICAgICAgICB9IHNfdHlwZV9zcGVjaWZpYzsKICAgICAgICBfX3UzMiAo KnNfcGFydGl0aW9uX2Z1bmMpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBfX3UzMiwgX191MTYsIF9f dTMyKTsKICAgICAgICBfX3UxNiBzX3ZvbHVtZXNlcW51bTsKICAgICAgICBfX3UxNiBzX3BhcnRp dGlvbl9mbGFnczsKfTsKCiNwcmFnbWEgcGFjaygpCgpzdHJ1Y3QgdWRmX3NiX2luZm8KewogICAg ICAgIHN0cnVjdCB1ZGZfcGFydF9tYXAgKnNfcGFydG1hcHM7CiAgICAgICAgX191OCBzX3ZvbGlk ZW50WzMyXTsKCgogICAgICAgIF9fdTE2IHNfcGFydGl0aW9uczsKICAgICAgICBfX3UxNiBzX3Bh cnRpdGlvbjsKCgogICAgICAgIF9fczMyIHNfc2Vzc2lvbjsKICAgICAgICBfX3UzMiBzX2FuY2hv cls0XTsKICAgICAgICBfX3UzMiBzX2xhc3RibG9jazsKCiAgICAgICAgc3RydWN0IGJ1ZmZlcl9o ZWFkICpzX2x2aWRiaDsKCgogICAgICAgIG1vZGVfdCBzX3VtYXNrOwogICAgICAgIGdpZF90IHNf Z2lkOwogICAgICAgIHVpZF90IHNfdWlkOwoKCiAgICAgICAgdGltZV90IHNfcmVjb3JkdGltZTsK CgogICAgICAgIF9fdTE2IHNfc2VyaWFsbnVtOwoKCiAgICAgICAgX191MTYgc191ZGZyZXY7CgoK ICAgICAgICBfX3UzMiBzX2ZsYWdzOwoKCiAgICAgICAgc3RydWN0IG5sc190YWJsZSAqc19ubHNf bWFwOwoKCiAgICAgICAgc3RydWN0IGlub2RlICpzX3ZhdDsKfTsKIyA2OTEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9saW51eC9uY3BfZnNfc2IuaCIgMQojIDExICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9saW51eC9uY3BfZnNfc2IuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNs dWRlL2xpbnV4L25jcF9mc19zYi5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgvbmNwX21vdW50LmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgvbmNwX21vdW50LmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUv bGludXgvdHlwZXMuaCIgMQojIDEyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51 eC9uY3BfbW91bnQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4 L25jcC5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L25jcC5o IgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyAx NCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvbmNwLmgiIDIKIyAyMiAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvbmNwLmgiCnN0cnVjdCBuY3BfcmVxdWVz dF9oZWFkZXIgewogICAgICAgIF9fdTE2IHR5cGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAg ICAgICAgX191OCBzZXF1ZW5jZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4 IGNvbm5fbG93IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTggdGFzayBfX2F0 dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4IGNvbm5faGlnaCBfX2F0dHJpYnV0ZV9f KChwYWNrZWQpKTsKICAgICAgICBfX3U4IGZ1bmN0aW9uIF9fYXR0cmlidXRlX18oKHBhY2tlZCkp OwogICAgICAgIF9fdTggZGF0YVswXSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKfTsKCgoKCnN0 cnVjdCBuY3BfcmVwbHlfaGVhZGVyIHsKICAgICAgICBfX3UxNiB0eXBlIF9fYXR0cmlidXRlX18o KHBhY2tlZCkpOwogICAgICAgIF9fdTggc2VxdWVuY2UgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7 CiAgICAgICAgX191OCBjb25uX2xvdyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBf X3U4IHRhc2sgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191OCBjb25uX2hpZ2gg X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191OCBjb21wbGV0aW9uX2NvZGUgX19h dHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191OCBjb25uZWN0aW9uX3N0YXRlIF9fYXR0 cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTggZGF0YVswXSBfX2F0dHJpYnV0ZV9fKChw YWNrZWQpKTsKfTsKCgoKc3RydWN0IG5jcF92b2x1bWVfaW5mbyB7CiAgICAgICAgX191MzIgdG90 YWxfYmxvY2tzOwogICAgICAgIF9fdTMyIGZyZWVfYmxvY2tzOwogICAgICAgIF9fdTMyIHB1cmdl YWJsZV9ibG9ja3M7CiAgICAgICAgX191MzIgbm90X3lldF9wdXJnZWFibGVfYmxvY2tzOwogICAg ICAgIF9fdTMyIHRvdGFsX2Rpcl9lbnRyaWVzOwogICAgICAgIF9fdTMyIGF2YWlsYWJsZV9kaXJf ZW50cmllczsKICAgICAgICBfX3U4IHNlY3RvcnNfcGVyX2Jsb2NrOwogICAgICAgIGNoYXIgdm9s dW1lX25hbWVbKDE2KSArIDFdOwp9OwojIDExMiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgvbmNwLmgiCnN0cnVjdCBud19pbmZvX3N0cnVjdCB7CiAgICAgICAgX191MzIgc3Bh Y2VBbGxvYyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBhdHRyaWJ1dGVz IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IGZsYWdzIF9fYXR0cmlidXRl X18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIGRhdGFTdHJlYW1TaXplIF9fYXR0cmlidXRlX18o KHBhY2tlZCkpOwogICAgICAgIF9fdTMyIHRvdGFsU3RyZWFtU2l6ZSBfX2F0dHJpYnV0ZV9fKChw YWNrZWQpKTsKICAgICAgICBfX3UxNiBudW1iZXJPZlN0cmVhbXMgX19hdHRyaWJ1dGVfXygocGFj a2VkKSk7CiAgICAgICAgX191MTYgY3JlYXRpb25UaW1lIF9fYXR0cmlidXRlX18oKHBhY2tlZCkp OwogICAgICAgIF9fdTE2IGNyZWF0aW9uRGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAg ICAgICBfX3UzMiBjcmVhdG9ySUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191 MTYgbW9kaWZ5VGltZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UxNiBtb2Rp ZnlEYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIG1vZGlmaWVySUQg X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgbGFzdEFjY2Vzc0RhdGUgX19h dHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgYXJjaGl2ZVRpbWUgX19hdHRyaWJ1 dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgYXJjaGl2ZURhdGUgX19hdHRyaWJ1dGVfXygo cGFja2VkKSk7CiAgICAgICAgX191MzIgYXJjaGl2ZXJJRCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQp KTsKICAgICAgICBfX3UxNiBpbmhlcml0ZWRSaWdodHNNYXNrIF9fYXR0cmlidXRlX18oKHBhY2tl ZCkpOwogICAgICAgIF9fdTMyIGRpckVudE51bSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAg ICAgICBfX3UzMiBEb3NEaXJOdW0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191 MzIgdm9sTnVtYmVyIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIEVBRGF0 YVNpemUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgRUFLZXlDb3VudCBf X2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBFQUtleVNpemUgX19hdHRyaWJ1 dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgTlNDcmVhdG9yIF9fYXR0cmlidXRlX18oKHBh Y2tlZCkpOwogICAgICAgIF9fdTggbmFtZUxlbiBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAg ICAgICBfX3U4IGVudHJ5TmFtZVsyNTZdIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwp9OwojIDE1 NiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvbmNwLmgiCnN0cnVjdCBud19t b2RpZnlfZG9zX2luZm8gewogICAgICAgIF9fdTMyIGF0dHJpYnV0ZXMgX19hdHRyaWJ1dGVfXygo cGFja2VkKSk7CiAgICAgICAgX191MTYgY3JlYXRpb25EYXRlIF9fYXR0cmlidXRlX18oKHBhY2tl ZCkpOwogICAgICAgIF9fdTE2IGNyZWF0aW9uVGltZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsK ICAgICAgICBfX3UzMiBjcmVhdG9ySUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAg X191MTYgbW9kaWZ5RGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UxNiBt b2RpZnlUaW1lIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIG1vZGlmaWVy SUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgYXJjaGl2ZURhdGUgX19h dHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgYXJjaGl2ZVRpbWUgX19hdHRyaWJ1 dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgYXJjaGl2ZXJJRCBfX2F0dHJpYnV0ZV9fKChw YWNrZWQpKTsKICAgICAgICBfX3UxNiBsYXN0QWNjZXNzRGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNr ZWQpKTsKICAgICAgICBfX3UxNiBpbmhlcml0YW5jZUdyYW50TWFzayBfX2F0dHJpYnV0ZV9fKChw YWNrZWQpKTsKICAgICAgICBfX3UxNiBpbmhlcml0YW5jZVJldm9rZU1hc2sgX19hdHRyaWJ1dGVf XygocGFja2VkKSk7CiAgICAgICAgX191MzIgbWF4aW11bVNwYWNlIF9fYXR0cmlidXRlX18oKHBh Y2tlZCkpOwp9OwoKc3RydWN0IG53X3NlYXJjaF9zZXF1ZW5jZSB7CiAgICAgICAgX191OCB2b2xO dW1iZXIgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgZGlyQmFzZSBfX2F0 dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBzZXF1ZW5jZSBfX2F0dHJpYnV0ZV9f KChwYWNrZWQpKTsKfTsKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgv bmNwX21vdW50LmgiIDIKIyAyNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgv bmNwX21vdW50LmgiCnN0cnVjdCBuY3BfbW91bnRfZGF0YSB7CiAgICAgICAgaW50IHZlcnNpb247 CiAgICAgICAgdW5zaWduZWQgaW50IG5jcF9mZDsKICAgICAgICBfX2tlcm5lbF91aWRfdCBtb3Vu dGVkX3VpZDsKICAgICAgICBfX2tlcm5lbF9waWRfdCB3ZG9nX3BpZDsKCiAgICAgICAgdW5zaWdu ZWQgY2hhciBtb3VudGVkX3ZvbFsoMTYpICsgMV07CiAgICAgICAgdW5zaWduZWQgaW50IHRpbWVf b3V0OwoKICAgICAgICB1bnNpZ25lZCBpbnQgcmV0cnlfY291bnQ7CiAgICAgICAgdW5zaWduZWQg aW50IGZsYWdzOwoKICAgICAgICBfX2tlcm5lbF91aWRfdCB1aWQ7CiAgICAgICAgX19rZXJuZWxf Z2lkX3QgZ2lkOwogICAgICAgIF9fa2VybmVsX21vZGVfdCBmaWxlX21vZGU7CiAgICAgICAgX19r ZXJuZWxfbW9kZV90IGRpcl9tb2RlOwp9OwoKCgpzdHJ1Y3QgbmNwX21vdW50X2RhdGFfdjQgewog ICAgICAgIGludCB2ZXJzaW9uOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CgoKICAgICAg ICB1bnNpZ25lZCBsb25nIG1vdW50ZWRfdWlkOwoKICAgICAgICBsb25nIHdkb2dfcGlkOwoKICAg ICAgICB1bnNpZ25lZCBpbnQgbmNwX2ZkOwogICAgICAgIHVuc2lnbmVkIGludCB0aW1lX291dDsK CiAgICAgICAgdW5zaWduZWQgaW50IHJldHJ5X2NvdW50OwoKCgogICAgICAgIHVuc2lnbmVkIGxv bmcgdWlkOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZ2lkOwoKICAgICAgICB1bnNpZ25lZCBsb25n IGZpbGVfbW9kZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGRpcl9tb2RlOwp9OwoKCgpzdHJ1Y3Qg bmNwX21vdW50X2RhdGFfa2VybmVsIHsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAg ICAgIHVuc2lnbmVkIGludCBpbnRfZmxhZ3M7CgogICAgICAgIF9fa2VybmVsX3VpZDMyX3QgbW91 bnRlZF91aWQ7CiAgICAgICAgX19rZXJuZWxfcGlkX3Qgd2RvZ19waWQ7CiAgICAgICAgdW5zaWdu ZWQgaW50IG5jcF9mZDsKICAgICAgICB1bnNpZ25lZCBpbnQgdGltZV9vdXQ7CgogICAgICAgIHVu c2lnbmVkIGludCByZXRyeV9jb3VudDsKICAgICAgICB1bnNpZ25lZCBjaGFyIG1vdW50ZWRfdm9s WygxNikgKyAxXTsKICAgICAgICBfX2tlcm5lbF91aWQzMl90IHVpZDsKICAgICAgICBfX2tlcm5l bF9naWQzMl90IGdpZDsKICAgICAgICBfX2tlcm5lbF9tb2RlX3QgZmlsZV9tb2RlOwogICAgICAg IF9fa2VybmVsX21vZGVfdCBkaXJfbW9kZTsKfTsKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvbGludXgvbmNwX2ZzX3NiLmgiIDIKCgoKCgpzdHJ1Y3QgbmNwX3NlcnZlciB7Cgog ICAgICAgIHN0cnVjdCBuY3BfbW91bnRfZGF0YV9rZXJuZWwgbTsKCgoKICAgICAgICBfX3U4IG5h bWVfc3BhY2VbKDY0KSArIDJdOwoKICAgICAgICBzdHJ1Y3QgZmlsZSAqbmNwX2ZpbHA7CgogICAg ICAgIHU4IHNlcXVlbmNlOwogICAgICAgIHU4IHRhc2s7CiAgICAgICAgdTE2IGNvbm5lY3Rpb247 CgogICAgICAgIHU4IGNvbXBsZXRpb247CiAgICAgICAgdTggY29ubl9zdGF0dXM7CgoKCiAgICAg ICAgaW50IGJ1ZmZlcl9zaXplOwoKICAgICAgICBpbnQgcmVwbHlfc2l6ZTsKCiAgICAgICAgaW50 IHBhY2tldF9zaXplOwogICAgICAgIHVuc2lnbmVkIGNoYXIgKnBhY2tldDsKCgogICAgICAgIGlu dCBsb2NrOwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgc2VtOwoKICAgICAgICBpbnQgY3VycmVu dF9zaXplOwogICAgICAgIGludCBoYXNfc3ViZnVuY3Rpb247CiAgICAgICAgaW50IG5jcF9yZXBs eV9zaXplOwoKICAgICAgICBpbnQgcm9vdF9zZXR1cGVkOwoKCiAgICAgICAgaW50IHNpZ25fd2Fu dGVkOwogICAgICAgIGludCBzaWduX2FjdGl2ZTsKICAgICAgICBjaGFyIHNpZ25fcm9vdFs4XTsK ICAgICAgICBjaGFyIHNpZ25fbGFzdFsxNl07CgoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAg ICAgICAgaW50IGF1dGhfdHlwZTsKICAgICAgICAgICAgICAgIHNpemVfdCBvYmplY3RfbmFtZV9s ZW47CiAgICAgICAgICAgICAgICB2b2lkKiBvYmplY3RfbmFtZTsKICAgICAgICAgICAgICAgIGlu dCBvYmplY3RfdHlwZTsKICAgICAgICB9IGF1dGg7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAg ICAgICAgICBzaXplX3QgbGVuOwogICAgICAgICAgICAgICAgdm9pZCogZGF0YTsKICAgICAgICB9 IHByaXY7CgoKICAgICAgICBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfdm9sOwogICAgICAgIHN0cnVj dCBubHNfdGFibGUgKm5sc19pbzsKCgogICAgICAgIGludCBkZW50cnlfdHRsOwoKCiAgICAgICAg dW5zaWduZWQgaW50IGZsYWdzOwp9OwojIDkyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVk ZS9saW51eC9uY3BfZnNfc2IuaCIKc3RhdGljIGlubGluZSBpbnQgbmNwX2Nvbm5fdmFsaWQoc3Ry dWN0IG5jcF9zZXJ2ZXIgKnNlcnZlcikKewogICAgICAgIHJldHVybiAoKHNlcnZlci0+Y29ubl9z dGF0dXMgJiAweDExKSA9PSAwKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIG5jcF9pbnZhbGlkYXRl X2Nvbm4oc3RydWN0IG5jcF9zZXJ2ZXIgKnNlcnZlcikKewogICAgICAgIHNlcnZlci0+Y29ubl9z dGF0dXMgfD0gMHgwMTsKfQojIDY5MiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3VzYmRl dl9mc19zYi5oIiAxCnN0cnVjdCB1c2JkZXZfc2JfaW5mbyB7CiAgICAgICAgc3RydWN0IGxpc3Rf aGVhZCBzbGlzdDsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGlsaXN0OwogICAgICAgIHVpZF90 IGRldnVpZDsKICAgICAgICBnaWRfdCBkZXZnaWQ7CiAgICAgICAgdW1vZGVfdCBkZXZtb2RlOwog ICAgICAgIHVpZF90IGJ1c3VpZDsKICAgICAgICBnaWRfdCBidXNnaWQ7CiAgICAgICAgdW1vZGVf dCBidXNtb2RlOwogICAgICAgIHVpZF90IGxpc3R1aWQ7CiAgICAgICAgZ2lkX3QgbGlzdGdpZDsK ICAgICAgICB1bW9kZV90IGxpc3Rtb2RlOwp9OwojIDY5MyAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2xpbnV4L2pmZnMyX2ZzX3NiLmgiIDEKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9p bmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyA3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVk ZS9saW51eC9qZmZzMl9mc19zYi5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgvc3BpbmxvY2suaCIgMQojIDggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2xpbnV4L2pmZnMyX2ZzX3NiLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVk ZS9saW51eC9jb21wbGV0aW9uLmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgvY29tcGxldGlvbi5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2xpbnV4L3dhaXQuaCIgMQojIDEyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51 eC9jb21wbGV0aW9uLmgiIDIKCnN0cnVjdCBjb21wbGV0aW9uIHsKICAgICAgICB1bnNpZ25lZCBp bnQgZG9uZTsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0Owp9OwoKCgoKCgoKc3RhdGlj IGlubGluZSB2b2lkIGluaXRfY29tcGxldGlvbihzdHJ1Y3QgY29tcGxldGlvbiAqeCkKewogICAg ICAgIHgtPmRvbmUgPSAwOwogICAgICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJngtPndhaXQpOwp9 CgpleHRlcm4gdm9pZCB3YWl0X2Zvcl9jb21wbGV0aW9uKHN0cnVjdCBjb21wbGV0aW9uICopIF9f YXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgY29tcGxldGUoc3RydWN0IGNv bXBsZXRpb24gKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwojIDkgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX3NiLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgiIDEKIyAxMCAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvamZmczJfZnNfc2IuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2xpc3QuaCIgMQojIDExICIvdXNyL3NyYy9saW51eC0y LjQuMTMvaW5jbHVkZS9saW51eC9qZmZzMl9mc19zYi5oIiAyCiMgMjAgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX3NiLmgiCnN0cnVjdCBqZmZzMl9zYl9pbmZv IHsKICAgICAgICBzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKCiAgICAgICAgX191MzIgaGlnaGVzdF9p bm87CiAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzOwogICAgICAgIHNwaW5sb2NrX3Qgbm9kZWxp c3RfbG9jazsKCgogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2NfdGFzazsKICAgICAgICBz dHJ1Y3Qgc2VtYXBob3JlIGdjX3RocmVhZF9zdGFydDsKICAgICAgICBzdHJ1Y3QgY29tcGxldGlv biBnY190aHJlYWRfZXhpdDsKCgoKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGFsbG9jX3NlbTsK CgoKCiAgICAgICAgX191MzIgZmxhc2hfc2l6ZTsKICAgICAgICBfX3UzMiB1c2VkX3NpemU7CiAg ICAgICAgX191MzIgZGlydHlfc2l6ZTsKICAgICAgICBfX3UzMiBmcmVlX3NpemU7CiAgICAgICAg X191MzIgZXJhc2luZ19zaXplOwogICAgICAgIF9fdTMyIGJhZF9zaXplOwogICAgICAgIF9fdTMy IHNlY3Rvcl9zaXplOwoKCgogICAgICAgIF9fdTMyIG5yX2ZyZWVfYmxvY2tzOwogICAgICAgIF9f dTMyIG5yX2VyYXNpbmdfYmxvY2tzOwoKICAgICAgICBfX3UzMiBucl9ibG9ja3M7CiAgICAgICAg c3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmJsb2NrczsKCiAgICAgICAgc3RydWN0IGpmZnMyX2Vy YXNlYmxvY2sgKm5leHRibG9jazsKCiAgICAgICAgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmdj YmxvY2s7CgogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgY2xlYW5fbGlzdDsKICAgICAgICBzdHJ1 Y3QgbGlzdF9oZWFkIGRpcnR5X2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBlcmFzaW5n X2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBlcmFzZV9wZW5kaW5nX2xpc3Q7CiAgICAg ICAgc3RydWN0IGxpc3RfaGVhZCBlcmFzZV9jb21wbGV0ZV9saXN0OwogICAgICAgIHN0cnVjdCBs aXN0X2hlYWQgZnJlZV9saXN0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgYmFkX2xpc3Q7CiAg ICAgICAgc3RydWN0IGxpc3RfaGVhZCBiYWRfdXNlZF9saXN0OwoKICAgICAgICBzcGlubG9ja190 IGVyYXNlX2NvbXBsZXRpb25fbG9jazsKCiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgZXJhc2Vf d2FpdDsKICAgICAgICBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmlub2NhY2hlX2xpc3RbMV07 CiAgICAgICAgc3BpbmxvY2tfdCBpbm9jYWNoZV9sb2NrOwp9OwojIDY5NCAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvZnMuaCIgMgoKZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQg c3VwZXJfYmxvY2tzOwpleHRlcm4gc3BpbmxvY2tfdCBzYl9sb2NrOwoKCgpzdHJ1Y3Qgc3VwZXJf YmxvY2sgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgc19saXN0OwogICAgICAgIGtkZXZfdCBz X2RldjsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfYmxvY2tzaXplOwogICAgICAgIHVuc2lnbmVk IGNoYXIgc19ibG9ja3NpemVfYml0czsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNfZGlydDsKICAg ICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc19tYXhieXRlczsKICAgICAgICBzdHJ1Y3QgZmlsZV9z eXN0ZW1fdHlwZSAqc190eXBlOwogICAgICAgIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zICpzX29w OwogICAgICAgIHN0cnVjdCBkcXVvdF9vcGVyYXRpb25zICpkcV9vcDsKICAgICAgICB1bnNpZ25l ZCBsb25nIHNfZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX21hZ2ljOwogICAgICAgIHN0 cnVjdCBkZW50cnkgKnNfcm9vdDsKICAgICAgICBzdHJ1Y3Qgcndfc2VtYXBob3JlIHNfdW1vdW50 OwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgc19sb2NrOwogICAgICAgIGludCBzX2NvdW50Owog ICAgICAgIGF0b21pY190IHNfYWN0aXZlOwoKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHNfZGly dHk7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBzX2xvY2tlZF9pbm9kZXM7CiAgICAgICAgc3Ry dWN0IGxpc3RfaGVhZCBzX2ZpbGVzOwoKICAgICAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpzX2Jk ZXY7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBzX2luc3RhbmNlczsKICAgICAgICBzdHJ1Y3Qg cXVvdGFfaW5mbyBzX2RxdW90OwoKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1 Y3QgbWluaXhfc2JfaW5mbyBtaW5peF9zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBleHQyX3Ni X2luZm8gZXh0Ml9zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBleHQzX3NiX2luZm8gZXh0M19z YjsKICAgICAgICAgICAgICAgIHN0cnVjdCBocGZzX3NiX2luZm8gaHBmc19zYjsKICAgICAgICAg ICAgICAgIHN0cnVjdCBudGZzX3NiX2luZm8gbnRmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVj dCBtc2Rvc19zYl9pbmZvIG1zZG9zX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IGlzb2ZzX3Ni X2luZm8gaXNvZnNfc2I7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX3NiX2luZm8gbmZzX3Ni OwogICAgICAgICAgICAgICAgc3RydWN0IHN5c3Zfc2JfaW5mbyBzeXN2X3NiOwogICAgICAgICAg ICAgICAgc3RydWN0IGFmZnNfc2JfaW5mbyBhZmZzX3NiOwogICAgICAgICAgICAgICAgc3RydWN0 IHVmc19zYl9pbmZvIHVmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBlZnNfc2JfaW5mbyBl ZnNfc2I7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2htZW1fc2JfaW5mbyBzaG1lbV9zYjsKICAg ICAgICAgICAgICAgIHN0cnVjdCByb21mc19zYl9pbmZvIHJvbWZzX3NiOwogICAgICAgICAgICAg ICAgc3RydWN0IHNtYl9zYl9pbmZvIHNtYmZzX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IGhm c19zYl9pbmZvIGhmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBhZGZzX3NiX2luZm8gYWRm c19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBxbng0X3NiX2luZm8gcW54NF9zYjsKICAgICAg ICAgICAgICAgIHN0cnVjdCByZWlzZXJmc19zYl9pbmZvIHJlaXNlcmZzX3NiOwogICAgICAgICAg ICAgICAgc3RydWN0IGJmc19zYl9pbmZvIGJmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCB1 ZGZfc2JfaW5mbyB1ZGZfc2I7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgbmNwX3NlcnZlciBuY3Bm c19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCB1c2JkZXZfc2JfaW5mbyB1c2JkZXZmc19zYjsK ICAgICAgICAgICAgICAgIHN0cnVjdCBqZmZzMl9zYl9pbmZvIGpmZnMyX3NiOwogICAgICAgICAg ICAgICAgc3RydWN0IGNyYW1mc19zYl9pbmZvIGNyYW1mc19zYjsKICAgICAgICAgICAgICAgIHZv aWQgKmdlbmVyaWNfc2JwOwogICAgICAgIH0gdTsKCgoKCiAgICAgICAgc3RydWN0IHNlbWFwaG9y ZSBzX3Zmc19yZW5hbWVfc2VtOwojIDc2NyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUv bGludXgvZnMuaCIKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIHNfbmZzZF9mcmVlX3BhdGhfc2Vt Owp9OwoKCgoKZXh0ZXJuIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVu dHJ5ICosIGludCk7CmV4dGVybiBpbnQgdmZzX21rZGlyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qg ZGVudHJ5ICosIGludCk7CmV4dGVybiBpbnQgdmZzX21rbm9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1 Y3QgZGVudHJ5ICosIGludCwgZGV2X3QpOwpleHRlcm4gaW50IHZmc19zeW1saW5rKHN0cnVjdCBp bm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgdmZzX2xp bmsoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0 ZXJuIGludCB2ZnNfcm1kaXIoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CmV4dGVy biBpbnQgdmZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJu IGludCB2ZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBp bm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwojIDgwMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2lu Y2x1ZGUvbGludXgvZnMuaCIKdHlwZWRlZiBpbnQgKCpmaWxsZGlyX3QpKHZvaWQgKiwgY29uc3Qg Y2hhciAqLCBpbnQsIGxvZmZfdCwgaW5vX3QsIHVuc2lnbmVkKTsKCnN0cnVjdCBibG9ja19kZXZp Y2Vfb3BlcmF0aW9ucyB7CiAgICAgICAgaW50ICgqb3BlbikgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1 Y3QgZmlsZSAqKTsKICAgICAgICBpbnQgKCpyZWxlYXNlKSAoc3RydWN0IGlub2RlICosIHN0cnVj dCBmaWxlICopOwogICAgICAgIGludCAoKmlvY3RsKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBm aWxlICosIHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKICAgICAgICBpbnQgKCpjaGVja19tZWRp YV9jaGFuZ2UpIChrZGV2X3QpOwogICAgICAgIGludCAoKnJldmFsaWRhdGUpIChrZGV2X3QpOwp9 OwoKCgoKCgpzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHsKICAgICAgICBzdHJ1Y3QgbW9kdWxlICpv d25lcjsKICAgICAgICBsb2ZmX3QgKCpsbHNlZWspIChzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGlu dCk7CiAgICAgICAgc3NpemVfdCAoKnJlYWQpIChzdHJ1Y3QgZmlsZSAqLCBjaGFyICosIHNpemVf dCwgbG9mZl90ICopOwogICAgICAgIHNzaXplX3QgKCp3cml0ZSkgKHN0cnVjdCBmaWxlICosIGNv bnN0IGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CiAgICAgICAgaW50ICgqcmVhZGRpcikgKHN0 cnVjdCBmaWxlICosIHZvaWQgKiwgZmlsbGRpcl90KTsKICAgICAgICB1bnNpZ25lZCBpbnQgKCpw b2xsKSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOwogICAgICAg IGludCAoKmlvY3RsKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGlu dCwgdW5zaWduZWQgbG9uZyk7CiAgICAgICAgaW50ICgqbW1hcCkgKHN0cnVjdCBmaWxlICosIHN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKICAgICAgICBpbnQgKCpvcGVuKSAoc3RydWN0IGlub2Rl ICosIHN0cnVjdCBmaWxlICopOwogICAgICAgIGludCAoKmZsdXNoKSAoc3RydWN0IGZpbGUgKik7 CiAgICAgICAgaW50ICgqcmVsZWFzZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsK ICAgICAgICBpbnQgKCpmc3luYykgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50 IGRhdGFzeW5jKTsKICAgICAgICBpbnQgKCpmYXN5bmMpIChpbnQsIHN0cnVjdCBmaWxlICosIGlu dCk7CiAgICAgICAgaW50ICgqbG9jaykgKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZpbGVf bG9jayAqKTsKICAgICAgICBzc2l6ZV90ICgqcmVhZHYpIChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBz dHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywgbG9mZl90ICopOwogICAgICAgIHNzaXplX3Qg KCp3cml0ZXYpIChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQg bG9uZywgbG9mZl90ICopOwogICAgICAgIHNzaXplX3QgKCpzZW5kcGFnZSkgKHN0cnVjdCBmaWxl ICosIHN0cnVjdCBwYWdlICosIGludCwgc2l6ZV90LCBsb2ZmX3QgKiwgaW50KTsKICAgICAgICB1 bnNpZ25lZCBsb25nICgqZ2V0X3VubWFwcGVkX2FyZWEpKHN0cnVjdCBmaWxlICosIHVuc2lnbmVk IGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwp9OwoK c3RydWN0IGlub2RlX29wZXJhdGlvbnMgewogICAgICAgIGludCAoKmNyZWF0ZSkgKHN0cnVjdCBp bm9kZSAqLHN0cnVjdCBkZW50cnkgKixpbnQpOwogICAgICAgIHN0cnVjdCBkZW50cnkgKiAoKmxv b2t1cCkgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7CiAgICAgICAgaW50ICgqbGlu aykgKHN0cnVjdCBkZW50cnkgKixzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOwogICAg ICAgIGludCAoKnVubGluaykgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7CiAgICAg ICAgaW50ICgqc3ltbGluaykgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixjb25zdCBj aGFyICopOwogICAgICAgIGludCAoKm1rZGlyKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRy eSAqLGludCk7CiAgICAgICAgaW50ICgqcm1kaXIpIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVu dHJ5ICopOwogICAgICAgIGludCAoKm1rbm9kKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRlbnRy eSAqLGludCxpbnQpOwogICAgICAgIGludCAoKnJlbmFtZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1 Y3QgZGVudHJ5ICosCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbm9kZSAqLCBzdHJ1 Y3QgZGVudHJ5ICopOwogICAgICAgIGludCAoKnJlYWRsaW5rKSAoc3RydWN0IGRlbnRyeSAqLCBj aGFyICosaW50KTsKICAgICAgICBpbnQgKCpmb2xsb3dfbGluaykgKHN0cnVjdCBkZW50cnkgKiwg c3RydWN0IG5hbWVpZGF0YSAqKTsKICAgICAgICB2b2lkICgqdHJ1bmNhdGUpIChzdHJ1Y3QgaW5v ZGUgKik7CiAgICAgICAgaW50ICgqcGVybWlzc2lvbikgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwog ICAgICAgIGludCAoKnJldmFsaWRhdGUpIChzdHJ1Y3QgZGVudHJ5ICopOwogICAgICAgIGludCAo KnNldGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKICAgICAgICBpbnQg KCpnZXRhdHRyKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7Cn07CgoKCgoKc3Ry dWN0IHN1cGVyX29wZXJhdGlvbnMgewogICAgICAgIHZvaWQgKCpyZWFkX2lub2RlKSAoc3RydWN0 IGlub2RlICopOwoKCgoKCgoKICAgICAgICB2b2lkICgqcmVhZF9pbm9kZTIpIChzdHJ1Y3QgaW5v ZGUgKiwgdm9pZCAqKSA7CiAgICAgICAgdm9pZCAoKmRpcnR5X2lub2RlKSAoc3RydWN0IGlub2Rl ICopOwogICAgICAgIHZvaWQgKCp3cml0ZV9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwog ICAgICAgIHZvaWQgKCpwdXRfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7CiAgICAgICAgdm9pZCAo KmRlbGV0ZV9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKICAgICAgICB2b2lkICgqcHV0X3N1cGVy KSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogICAgICAgIHZvaWQgKCp3cml0ZV9zdXBlcikgKHN0 cnVjdCBzdXBlcl9ibG9jayAqKTsKICAgICAgICB2b2lkICgqd3JpdGVfc3VwZXJfbG9ja2ZzKSAo c3RydWN0IHN1cGVyX2Jsb2NrICopOwogICAgICAgIHZvaWQgKCp1bmxvY2tmcykgKHN0cnVjdCBz dXBlcl9ibG9jayAqKTsKICAgICAgICBpbnQgKCpzdGF0ZnMpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sg Kiwgc3RydWN0IHN0YXRmcyAqKTsKICAgICAgICBpbnQgKCpyZW1vdW50X2ZzKSAoc3RydWN0IHN1 cGVyX2Jsb2NrICosIGludCAqLCBjaGFyICopOwogICAgICAgIHZvaWQgKCpjbGVhcl9pbm9kZSkg KHN0cnVjdCBpbm9kZSAqKTsKICAgICAgICB2b2lkICgqdW1vdW50X2JlZ2luKSAoc3RydWN0IHN1 cGVyX2Jsb2NrICopOwojIDkwNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgv ZnMuaCIKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICogKCpmaF90b19kZW50cnkpKHN0cnVjdCBzdXBl cl9ibG9jayAqc2IsIF9fdTMyICpmaCwgaW50IGxlbiwgaW50IGZodHlwZSwgaW50IHBhcmVudCk7 CiAgICAgICAgaW50ICgqZGVudHJ5X3RvX2ZoKShzdHJ1Y3QgZGVudHJ5ICosIF9fdTMyICpmaCwg aW50ICpsZW5wLCBpbnQgbmVlZF9wYXJlbnQpOwp9OwojIDkyMCAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2luY2x1ZGUvbGludXgvZnMuaCIKZXh0ZXJuIHZvaWQgX19tYXJrX2lub2RlX2RpcnR5KHN0 cnVjdCBpbm9kZSAqLCBpbnQpOwpzdGF0aWMgaW5saW5lIHZvaWQgbWFya19pbm9kZV9kaXJ0eShz dHJ1Y3QgaW5vZGUgKmlub2RlKQp7CiAgICAgICAgX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCAo MSB8IDIgfCA0KSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2lub2RlX2RpcnR5X3N5bmMo c3RydWN0IGlub2RlICppbm9kZSkKewogICAgICAgIF9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwg MSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBpbm9kZV9hZGRfYnl0ZXMoc3RydWN0IGlub2RlICpp bm9kZSwgbG9mZl90IGJ5dGVzKQp7CiAgICAgICAgaW5vZGUtPmlfYmxvY2tzICs9IGJ5dGVzID4+ IDk7CiAgICAgICAgYnl0ZXMgJj0gNTExOwogICAgICAgIGlub2RlLT5pX2J5dGVzICs9IGJ5dGVz OwogICAgICAgIGlmIChpbm9kZS0+aV9ieXRlcyA+PSA1MTIpIHsKICAgICAgICAgICAgICAgIGlu b2RlLT5pX2Jsb2NrcysrOwogICAgICAgICAgICAgICAgaW5vZGUtPmlfYnl0ZXMgLT0gNTEyOwog ICAgICAgIH0KfQoKc3RhdGljIGlubGluZSB2b2lkIGlub2RlX3N1Yl9ieXRlcyhzdHJ1Y3QgaW5v ZGUgKmlub2RlLCBsb2ZmX3QgYnl0ZXMpCnsKICAgICAgICBpbm9kZS0+aV9ibG9ja3MgLT0gYnl0 ZXMgPj4gOTsKICAgICAgICBieXRlcyAmPSA1MTE7CiAgICAgICAgaWYgKGlub2RlLT5pX2J5dGVz IDwgYnl0ZXMpIHsKICAgICAgICAgICAgICAgIGlub2RlLT5pX2Jsb2Nrcy0tOwogICAgICAgICAg ICAgICAgaW5vZGUtPmlfYnl0ZXMgKz0gNTEyOwogICAgICAgIH0KICAgICAgICBpbm9kZS0+aV9i eXRlcyAtPSBieXRlczsKfQoKc3RhdGljIGlubGluZSBsb2ZmX3QgaW5vZGVfZ2V0X2J5dGVzKHN0 cnVjdCBpbm9kZSAqaW5vZGUpCnsKICAgICAgICByZXR1cm4gKCgobG9mZl90KWlub2RlLT5pX2Js b2NrcykgPDwgOSkgKyBpbm9kZS0+aV9ieXRlczsKfQoKc3RhdGljIGlubGluZSB2b2lkIGlub2Rl X3NldF9ieXRlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgYnl0ZXMpCnsKICAgICAgICBp bm9kZS0+aV9ibG9ja3MgPSBieXRlcyA+PiA5OwogICAgICAgIGlub2RlLT5pX2J5dGVzID0gYnl0 ZXMgJiA1MTE7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2lub2RlX2RpcnR5X3BhZ2VzKHN0 cnVjdCBpbm9kZSAqaW5vZGUpCnsKICAgICAgICBfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIDQp Owp9CgpzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyB7CiAgICAgICAgdm9pZCAoKmluaXRpYWxpemUp IChzdHJ1Y3QgaW5vZGUgKiwgc2hvcnQpOwogICAgICAgIHZvaWQgKCpkcm9wKSAoc3RydWN0IGlu b2RlICopOwogICAgICAgIGludCAoKmFsbG9jX3NwYWNlKSAoc3RydWN0IGlub2RlICosIHFzaXpl X3QsIGNoYXIpOwogICAgICAgIGludCAoKmFsbG9jX2lub2RlKSAoY29uc3Qgc3RydWN0IGlub2Rl ICosIHVuc2lnbmVkIGxvbmcpOwogICAgICAgIHZvaWQgKCpmcmVlX3NwYWNlKSAoc3RydWN0IGlu b2RlICosIHFzaXplX3QpOwogICAgICAgIHZvaWQgKCpmcmVlX2lub2RlKSAoY29uc3Qgc3RydWN0 IGlub2RlICosIHVuc2lnbmVkIGxvbmcpOwogICAgICAgIGludCAoKnRyYW5zZmVyKSAoc3RydWN0 IGlub2RlICosIHN0cnVjdCBpYXR0ciAqKTsKfTsKCnN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHsK ICAgICAgICBjb25zdCBjaGFyICpuYW1lOwogICAgICAgIGludCBmc19mbGFnczsKICAgICAgICBz dHJ1Y3Qgc3VwZXJfYmxvY2sgKigqcmVhZF9zdXBlcikgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2 b2lkICosIGludCk7CiAgICAgICAgc3RydWN0IG1vZHVsZSAqb3duZXI7CiAgICAgICAgc3RydWN0 IGZpbGVfc3lzdGVtX3R5cGUgKiBuZXh0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZnNfc3Vw ZXJzOwp9OwojIDEwMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgi CmV4dGVybiBpbnQgcmVnaXN0ZXJfZmlsZXN5c3RlbShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAq KTsKZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oc3RydWN0IGZpbGVfc3lzdGVtX3R5 cGUgKik7CmV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKmtlcm5fbW91bnQoc3RydWN0IGZpbGVfc3lz dGVtX3R5cGUgKik7CmV4dGVybiBpbnQgbWF5X3Vtb3VudChzdHJ1Y3QgdmZzbW91bnQgKik7CmV4 dGVybiBsb25nIGRvX21vdW50KGNoYXIgKiwgY2hhciAqLCBjaGFyICosIHVuc2lnbmVkIGxvbmcs IHZvaWQgKik7CgoKCmV4dGVybiBpbnQgdmZzX3N0YXRmcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwg c3RydWN0IHN0YXRmcyAqKTsKIyAxMDI5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9s aW51eC9mcy5oIgpleHRlcm4gaW50IGxvY2tzX21hbmRhdG9yeV9sb2NrZWQoc3RydWN0IGlub2Rl ICopOwpleHRlcm4gaW50IGxvY2tzX21hbmRhdG9yeV9hcmVhKGludCwgc3RydWN0IGlub2RlICos IHN0cnVjdCBmaWxlICosIGxvZmZfdCwgc2l6ZV90KTsKIyAxMDM5ICIvdXNyL3NyYy9saW51eC0y LjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIgpzdGF0aWMgaW5saW5lIGludCBsb2Nrc192ZXJpZnlf bG9ja2VkKHN0cnVjdCBpbm9kZSAqaW5vZGUpCnsKICAgICAgICBpZiAoKCgoaW5vZGUpLT5pX3Ni LT5zX2ZsYWdzICYgKDY0KSkgJiYgKChpbm9kZSktPmlfbW9kZSAmICgwMDAyMDAwIHwgMDAwMTAp KSA9PSAwMDAyMDAwKSkKICAgICAgICAgICAgICAgIHJldHVybiBsb2Nrc19tYW5kYXRvcnlfbG9j a2VkKGlub2RlKTsKICAgICAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQgbG9ja3Nf dmVyaWZ5X2FyZWEoaW50IHJlYWRfd3JpdGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmaWxlICpmaWxwLCBsb2ZmX3Qgb2Zm c2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291bnQpCnsK ICAgICAgICBpZiAoaW5vZGUtPmlfZmxvY2sgJiYgKCgoaW5vZGUpLT5pX3NiLT5zX2ZsYWdzICYg KDY0KSkgJiYgKChpbm9kZSktPmlfbW9kZSAmICgwMDAyMDAwIHwgMDAwMTApKSA9PSAwMDAyMDAw KSkKICAgICAgICAgICAgICAgIHJldHVybiBsb2Nrc19tYW5kYXRvcnlfYXJlYShyZWFkX3dyaXRl LCBpbm9kZSwgZmlscCwgb2Zmc2V0LCBjb3VudCk7CiAgICAgICAgcmV0dXJuIDA7Cn0KCnN0YXRp YyBpbmxpbmUgaW50IGxvY2tzX3ZlcmlmeV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmlsZSAqZmlscCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9mZl90IHNpemUpCnsKICAgICAgICBp ZiAoaW5vZGUtPmlfZmxvY2sgJiYgKCgoaW5vZGUpLT5pX3NiLT5zX2ZsYWdzICYgKDY0KSkgJiYg KChpbm9kZSktPmlfbW9kZSAmICgwMDAyMDAwIHwgMDAwMTApKSA9PSAwMDAyMDAwKSkKICAgICAg ICAgICAgICAgIHJldHVybiBsb2Nrc19tYW5kYXRvcnlfYXJlYSgKICAgICAgICAgICAgICAgICAg ICAgICAgMiwgaW5vZGUsIGZpbHAsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPCBpbm9k ZS0+aV9zaXplID8gc2l6ZSA6IGlub2RlLT5pX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg IChzaXplIDwgaW5vZGUtPmlfc2l6ZSA/IGlub2RlLT5pX3NpemUgLSBzaXplCiAgICAgICAgICAg ICAgICAgICAgICAgICA6IHNpemUgLSBpbm9kZS0+aV9zaXplKQogICAgICAgICAgICAgICAgKTsK ICAgICAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQgZ2V0X2xlYXNlKHN0cnVjdCBp bm9kZSAqaW5vZGUsIHVuc2lnbmVkIGludCBtb2RlKQp7CiAgICAgICAgaWYgKGlub2RlLT5pX2Zs b2NrICYmIChpbm9kZS0+aV9mbG9jay0+ZmxfZmxhZ3MgJiAzMikpCiAgICAgICAgICAgICAgICBy ZXR1cm4gX19nZXRfbGVhc2UoaW5vZGUsIG1vZGUpOwogICAgICAgIHJldHVybiAwOwp9CgoKCiBf X2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgbG9uZyBzeXNfb3Blbihjb25zdCBjaGFyICosIGlu dCwgaW50KTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBsb25nIHN5c19jbG9zZSh1bnNp Z25lZCBpbnQpOwpleHRlcm4gaW50IGRvX3RydW5jYXRlKHN0cnVjdCBkZW50cnkgKiwgbG9mZl90 IHN0YXJ0KTsKCmV4dGVybiBzdHJ1Y3QgZmlsZSAqZmlscF9vcGVuKGNvbnN0IGNoYXIgKiwgaW50 LCBpbnQpOwpleHRlcm4gc3RydWN0IGZpbGUgKiBkZW50cnlfb3BlbihzdHJ1Y3QgZGVudHJ5ICos IHN0cnVjdCB2ZnNtb3VudCAqLCBpbnQpOwpleHRlcm4gaW50IGZpbHBfY2xvc2Uoc3RydWN0IGZp bGUgKiwgZmxfb3duZXJfdCBpZCk7CmV4dGVybiBjaGFyICogZ2V0bmFtZShjb25zdCBjaGFyICop OwoKCmV4dGVybiB2b2lkIHZmc19jYWNoZXNfaW5pdCh1bnNpZ25lZCBsb25nKTsKCgoKCmVudW0g e0JERVZfRklMRSwgQkRFVl9TV0FQLCBCREVWX0ZTLCBCREVWX1JBV307CmV4dGVybiBpbnQgcmVn aXN0ZXJfYmxrZGV2KHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqLCBzdHJ1Y3QgYmxvY2tfZGV2 aWNlX29wZXJhdGlvbnMgKik7CmV4dGVybiBpbnQgdW5yZWdpc3Rlcl9ibGtkZXYodW5zaWduZWQg aW50LCBjb25zdCBjaGFyICopOwpleHRlcm4gc3RydWN0IGJsb2NrX2RldmljZSAqYmRnZXQoZGV2 X3QpOwpleHRlcm4gaW50IGJkX2FjcXVpcmUoc3RydWN0IGlub2RlICppbm9kZSk7CmV4dGVybiB2 b2lkIGJkX2ZvcmdldChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZXh0ZXJuIHZvaWQgYmRwdXQoc3Ry dWN0IGJsb2NrX2RldmljZSAqKTsKZXh0ZXJuIHN0cnVjdCBjaGFyX2RldmljZSAqY2RnZXQoZGV2 X3QpOwpleHRlcm4gdm9pZCBjZHB1dChzdHJ1Y3QgY2hhcl9kZXZpY2UgKik7CmV4dGVybiBpbnQg YmxrZGV2X29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwpleHRlcm4gc3RydWN0 IGZpbGVfb3BlcmF0aW9ucyBkZWZfYmxrX2ZvcHM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIGRlZl9maWZvX2ZvcHM7CmV4dGVybiBpbnQgaW9jdGxfYnlfYmRldihzdHJ1Y3QgYmxvY2tf ZGV2aWNlICosIHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKZXh0ZXJuIGludCBibGtkZXZfZ2V0 KHN0cnVjdCBibG9ja19kZXZpY2UgKiwgbW9kZV90LCB1bnNpZ25lZCwgaW50KTsKZXh0ZXJuIGlu dCBibGtkZXZfcHV0KHN0cnVjdCBibG9ja19kZXZpY2UgKiwgaW50KTsKCgpleHRlcm4gY29uc3Qg c3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zICpnZXRfYmxrZm9wcyh1bnNpZ25lZCBpbnQp OwpleHRlcm4gaW50IHJlZ2lzdGVyX2NocmRldih1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKiwg c3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqKTsKZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2NocmRldih1 bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgY2hyZGV2X29wZW4oc3RydWN0 IGlub2RlICosIHN0cnVjdCBmaWxlICopOwpleHRlcm4gY29uc3QgY2hhciAqIGJkZXZuYW1lKGtk ZXZfdCk7CmV4dGVybiBjb25zdCBjaGFyICogY2Rldm5hbWUoa2Rldl90KTsKZXh0ZXJuIGNvbnN0 IGNoYXIgKiBrZGV2bmFtZShrZGV2X3QpOwpleHRlcm4gdm9pZCBpbml0X3NwZWNpYWxfaW5vZGUo c3RydWN0IGlub2RlICosIHVtb2RlX3QsIGludCk7CgoKZXh0ZXJuIHZvaWQgbWFrZV9iYWRfaW5v ZGUoc3RydWN0IGlub2RlICopOwpleHRlcm4gaW50IGlzX2JhZF9pbm9kZShzdHJ1Y3QgaW5vZGUg Kik7CgpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZWFkX2ZpZm9fZm9wczsKZXh0ZXJu IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd3JpdGVfZmlmb19mb3BzOwpleHRlcm4gc3RydWN0IGZp bGVfb3BlcmF0aW9ucyByZHdyX2ZpZm9fZm9wczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlv bnMgcmVhZF9waXBlX2ZvcHM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdyaXRlX3Bp cGVfZm9wczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmR3cl9waXBlX2ZvcHM7Cgpl eHRlcm4gaW50IGZzX21heV9yZW1vdW50X3JvKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKCmV4dGVy biBpbnQgdHJ5X3RvX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCBpbnQpOwpl eHRlcm4gdm9pZCByZWZpbGVfYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJ1Zik7CmV4dGVy biB2b2lkIGNyZWF0ZV9lbXB0eV9idWZmZXJzKHN0cnVjdCBwYWdlICosIGtkZXZfdCwgdW5zaWdu ZWQgbG9uZyk7CmV4dGVybiB2b2lkIGVuZF9idWZmZXJfaW9fc3luYyhzdHJ1Y3QgYnVmZmVyX2hl YWQgKmJoLCBpbnQgdXB0b2RhdGUpOwoKCmV4dGVybiB2b2lkIHNldF9idWZmZXJfYXN5bmNfaW8o c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkgOwoKCgoKCgoKc3RhdGljIGlubGluZSB2b2lkIGdldF9i aChzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCkKewogICAgICAgIGF0b21pY19pbmMoJihiaCktPmJf Y291bnQpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2JoKHN0cnVjdCBidWZmZXJfaGVhZCAq YmgpCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOwogICAg ICAgIGF0b21pY19kZWMoJmJoLT5iX2NvdW50KTsKfQoKCgoKc3RhdGljIGlubGluZSB2b2lkIG1h cmtfYnVmZmVyX3VwdG9kYXRlKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoLCBpbnQgb24pCnsKICAg ICAgICBpZiAob24pCiAgICAgICAgICAgICAgICBzZXRfYml0KEJIX1VwdG9kYXRlLCAmYmgtPmJf c3RhdGUpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGNsZWFyX2JpdChCSF9VcHRvZGF0 ZSwgJmJoLT5iX3N0YXRlKTsKfQoKCgpzdGF0aWMgaW5saW5lIHZvaWQgX19tYXJrX2J1ZmZlcl9j bGVhbihzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQp7CiAgICAgICAgcmVmaWxlX2J1ZmZlcihiaCk7 Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2J1ZmZlcl9jbGVhbihzdHJ1Y3QgYnVmZmVyX2hl YWQgKiBiaCkKewoKCgoKICAgICAgICBpZiAodGVzdF9hbmRfY2xlYXJfYml0KEJIX0RpcnR5LCAm KGJoKS0+Yl9zdGF0ZSkpCiAgICAgICAgICAgICAgICBfX21hcmtfYnVmZmVyX2NsZWFuKGJoKTsK fQoKCgpzdGF0aWMgaW5saW5lIHZvaWQgX19tYXJrX2J1ZmZlcl9wcm90ZWN0ZWQoc3RydWN0IGJ1 ZmZlcl9oZWFkICpiaCkKewogICAgICAgIHJlZmlsZV9idWZmZXIoYmgpOwp9CgpzdGF0aWMgaW5s aW5lIHZvaWQgbWFya19idWZmZXJfcHJvdGVjdGVkKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoKQp7 CiAgICAgICAgaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEJIX1Byb3RlY3RlZCwgJihiaCktPmJfc3Rh dGUpKQogICAgICAgICAgICAgICAgX19tYXJrX2J1ZmZlcl9wcm90ZWN0ZWQoYmgpOwp9CgpleHRl cm4gdm9pZCBfX21hcmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpIF9fYXR0 cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgbWFya19idWZmZXJfZGlydHkoc3Ry dWN0IGJ1ZmZlcl9oZWFkICpiaCkgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwoKCgpzdGF0 aWMgaW5saW5lIHZvaWQgbWFya19idWZmZXJfYXN5bmMoc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgs IGludCBvbikKewogICAgICAgIGlmIChvbikKICAgICAgICAgICAgICAgIHNldF9iaXQoQkhfQXN5 bmMsICZiaC0+Yl9zdGF0ZSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgY2xlYXJfYml0 KEJIX0FzeW5jLCAmYmgtPmJfc3RhdGUpOwp9CgoKCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgYnVm ZmVyX0lPX2Vycm9yKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoKQp7CiAgICAgICAgbWFya19idWZm ZXJfY2xlYW4oYmgpOwoKCgogICAgICAgIGJoLT5iX2VuZF9pbyhiaCwgMCk7Cn0KCmV4dGVybiB2 b2lkIGJ1ZmZlcl9pbnNlcnRfaW5vZGVfcXVldWUoc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVj dCBpbm9kZSAqKTsKc3RhdGljIGlubGluZSB2b2lkIG1hcmtfYnVmZmVyX2RpcnR5X2lub2RlKHN0 cnVjdCBidWZmZXJfaGVhZCAqYmgsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCnsKICAgICAgICBtYXJr X2J1ZmZlcl9kaXJ0eShiaCk7CiAgICAgICAgYnVmZmVyX2luc2VydF9pbm9kZV9xdWV1ZShiaCwg aW5vZGUpOwp9CgpleHRlcm4gdm9pZCBzZXRfYnVmZmVyX2ZsdXNodGltZShzdHJ1Y3QgYnVmZmVy X2hlYWQgKik7CmV4dGVybiB2b2lkIGJhbGFuY2VfZGlydHkoa2Rldl90KTsKZXh0ZXJuIGludCBj aGVja19kaXNrX2NoYW5nZShrZGV2X3QpOwpleHRlcm4gaW50IGludmFsaWRhdGVfaW5vZGVzKHN0 cnVjdCBzdXBlcl9ibG9jayAqKTsKZXh0ZXJuIGludCBpbnZhbGlkYXRlX2RldmljZShrZGV2X3Qs IGludCk7CmV4dGVybiB2b2lkIGludmFsaWRhdGVfaW5vZGVfcGFnZXMoc3RydWN0IGlub2RlICop OwpleHRlcm4gdm9pZCBpbnZhbGlkYXRlX2lub2RlX2J1ZmZlcnMoc3RydWN0IGlub2RlICopOwoK CmV4dGVybiB2b2lkIF9faW52YWxpZGF0ZV9idWZmZXJzKGtkZXZfdCBkZXYsIGludCk7CmV4dGVy biB2b2lkIHN5bmNfaW5vZGVzKGtkZXZfdCk7CmV4dGVybiB2b2lkIHN5bmNfdW5sb2NrZWRfaW5v ZGVzKHZvaWQpOwpleHRlcm4gdm9pZCB3cml0ZV9pbm9kZV9ub3coc3RydWN0IGlub2RlICosIGlu dCk7CmV4dGVybiB2b2lkIHN5bmNfZGV2KGtkZXZfdCk7CmV4dGVybiBpbnQgZnN5bmNfZGV2KGtk ZXZfdCk7CmV4dGVybiBpbnQgZnN5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopOwpleHRl cm4gaW50IGZzeW5jX25vX3N1cGVyKGtkZXZfdCk7CmV4dGVybiB2b2lkIHN5bmNfaW5vZGVzX3Ni KHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKZXh0ZXJuIGludCBmc3luY19pbm9kZV9idWZmZXJzKHN0 cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIGludCBvc3luY19pbm9kZV9idWZmZXJzKHN0cnVjdCBpbm9k ZSAqKTsKZXh0ZXJuIGludCBpbm9kZV9oYXNfYnVmZmVycyhzdHJ1Y3QgaW5vZGUgKik7CmV4dGVy biB2b2lkIGZpbGVtYXBfZmRhdGFzeW5jKHN0cnVjdCBhZGRyZXNzX3NwYWNlICopOwpleHRlcm4g dm9pZCBmaWxlbWFwX2ZkYXRhd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKZXh0ZXJuIHZv aWQgc3luY19zdXBlcnMoa2Rldl90KTsKZXh0ZXJuIGludCBibWFwKHN0cnVjdCBpbm9kZSAqLCBp bnQpOwpleHRlcm4gaW50IG5vdGlmeV9jaGFuZ2Uoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0 dHIgKik7CmV4dGVybiBpbnQgcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKZXh0ZXJu IGludCB2ZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKZXh0ZXJuIGludCBnZXRf d3JpdGVfYWNjZXNzKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIGludCBkZW55X3dyaXRlX2FjY2Vz cyhzdHJ1Y3QgZmlsZSAqKTsKc3RhdGljIGlubGluZSB2b2lkIHB1dF93cml0ZV9hY2Nlc3Moc3Ry dWN0IGlub2RlICogaW5vZGUpCnsKICAgICAgICBhdG9taWNfZGVjKCZpbm9kZS0+aV93cml0ZWNv dW50KTsKfQpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb3dfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxl ICpmaWxlKQp7CiAgICAgICAgaWYgKGZpbGUpCiAgICAgICAgICAgICAgICBhdG9taWNfaW5jKCZm aWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV93cml0ZWNvdW50KTsKfQpleHRlcm4gaW50IGRvX3Bp cGUoaW50ICopOwoKZXh0ZXJuIGludCBvcGVuX25hbWVpKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQs IHN0cnVjdCBuYW1laWRhdGEgKik7CgpleHRlcm4gaW50IGtlcm5lbF9yZWFkKHN0cnVjdCBmaWxl ICosIHVuc2lnbmVkIGxvbmcsIGNoYXIgKiwgdW5zaWduZWQgbG9uZyk7CmV4dGVybiBzdHJ1Y3Qg ZmlsZSAqIG9wZW5fZXhlYyhjb25zdCBjaGFyICopOwoKCmV4dGVybiBpbnQgaXNfc3ViZGlyKHN0 cnVjdCBkZW50cnkgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0ZXJuIGlub190IGZpbmRfaW5vZGVf bnVtYmVyKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CiMgMTI5MSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvZnMuaCIKc3RhdGljIGlubGluZSB2b2lkICpFUlJf UFRSKGxvbmcgZXJyb3IpCnsKICAgICAgICByZXR1cm4gKHZvaWQgKikgZXJyb3I7Cn0KCnN0YXRp YyBpbmxpbmUgbG9uZyBQVFJfRVJSKGNvbnN0IHZvaWQgKnB0cikKewogICAgICAgIHJldHVybiAo bG9uZykgcHRyOwp9CgpzdGF0aWMgaW5saW5lIGxvbmcgSVNfRVJSKGNvbnN0IHZvaWQgKnB0cikK ewogICAgICAgIHJldHVybiAodW5zaWduZWQgbG9uZylwdHIgPiAodW5zaWduZWQgbG9uZyktMTAw MEw7Cn0KIyAxMzIyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIgpl bnVtIHtMQVNUX05PUk0sIExBU1RfUk9PVCwgTEFTVF9ET1QsIExBU1RfRE9URE9ULCBMQVNUX0JJ TkR9OwojIDEzMzMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiCnR5 cGVkZWYgc3RydWN0IHsKICAgICAgICBzaXplX3Qgd3JpdHRlbjsKICAgICAgICBzaXplX3QgY291 bnQ7CiAgICAgICAgY2hhciAqIGJ1ZjsKICAgICAgICBpbnQgZXJyb3I7Cn0gcmVhZF9kZXNjcmlw dG9yX3Q7Cgp0eXBlZGVmIGludCAoKnJlYWRfYWN0b3JfdCkocmVhZF9kZXNjcmlwdG9yX3QgKiwg c3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CgoKZXh0ZXJuIGxv ZmZfdCBkZWZhdWx0X2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50 IG9yaWdpbik7CmV4dGVybiBsb2ZmX3Qgbm9fbGxzZWVrKHN0cnVjdCBmaWxlICosIGxvZmZfdCwg aW50KTsKCmV4dGVybiBpbnQgX191c2VyX3dhbGsoY29uc3QgY2hhciAqLCB1bnNpZ25lZCwgc3Ry dWN0IG5hbWVpZGF0YSAqKTsKZXh0ZXJuIGludCBwYXRoX2luaXQoY29uc3QgY2hhciAqLCB1bnNp Z25lZCwgc3RydWN0IG5hbWVpZGF0YSAqKTsKZXh0ZXJuIGludCBwYXRoX3dhbGsoY29uc3QgY2hh ciAqLCBzdHJ1Y3QgbmFtZWlkYXRhICopOwpleHRlcm4gdm9pZCBwYXRoX3JlbGVhc2Uoc3RydWN0 IG5hbWVpZGF0YSAqKTsKZXh0ZXJuIGludCBmb2xsb3dfZG93bihzdHJ1Y3QgdmZzbW91bnQgKios IHN0cnVjdCBkZW50cnkgKiopOwpleHRlcm4gaW50IGZvbGxvd191cChzdHJ1Y3QgdmZzbW91bnQg KiosIHN0cnVjdCBkZW50cnkgKiopOwpleHRlcm4gc3RydWN0IGRlbnRyeSAqIGxvb2t1cF9vbmVf bGVuKGNvbnN0IGNoYXIgKiwgc3RydWN0IGRlbnRyeSAqLCBpbnQpOwpleHRlcm4gc3RydWN0IGRl bnRyeSAqIGxvb2t1cF9oYXNoKHN0cnVjdCBxc3RyICosIHN0cnVjdCBkZW50cnkgKik7CgoKCmV4 dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopOwpleHRlcm4gdm9pZCBmb3JjZV9kZWxldGUo c3RydWN0IGlub2RlICopOwpleHRlcm4gc3RydWN0IGlub2RlICogaWdyYWIoc3RydWN0IGlub2Rl ICopOwpleHRlcm4gaW5vX3QgaXVuaXF1ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW5vX3QpOwoK dHlwZWRlZiBpbnQgKCpmaW5kX2lub2RlX3QpKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25n LCB2b2lkICopOwpleHRlcm4gc3RydWN0IGlub2RlICogaWdldDQoc3RydWN0IHN1cGVyX2Jsb2Nr ICosIHVuc2lnbmVkIGxvbmcsIGZpbmRfaW5vZGVfdCwgdm9pZCAqKTsKc3RhdGljIGlubGluZSBz dHJ1Y3QgaW5vZGUgKmlnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBp bm8pCnsKICAgICAgICByZXR1cm4gaWdldDQoc2IsIGlubywgKCh2b2lkICopMCksICgodm9pZCAq KTApKTsKfQoKZXh0ZXJuIHZvaWQgY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICopOwpleHRlcm4g c3RydWN0IGlub2RlICogZ2V0X2VtcHR5X2lub2RlKHZvaWQpOwpzdGF0aWMgaW5saW5lIHN0cnVj dCBpbm9kZSAqIG5ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQp7CiAgICAgICAgc3Ry dWN0IGlub2RlICppbm9kZSA9IGdldF9lbXB0eV9pbm9kZSgpOwogICAgICAgIGlmIChpbm9kZSkg ewogICAgICAgICAgICAgICAgaW5vZGUtPmlfc2IgPSBzYjsKICAgICAgICAgICAgICAgIGlub2Rl LT5pX2RldiA9IHNiLT5zX2RldjsKICAgICAgICAgICAgICAgIGlub2RlLT5pX2Jsa2JpdHMgPSBz Yi0+c19ibG9ja3NpemVfYml0czsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGlub2RlOwp9CmV4 dGVybiB2b2lkIHJlbW92ZV9zdWlkKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwoKZXh0ZXJuIHZvaWQg aW5zZXJ0X2lub2RlX2hhc2goc3RydWN0IGlub2RlICopOwpleHRlcm4gdm9pZCByZW1vdmVfaW5v ZGVfaGFzaChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBzdHJ1Y3QgZmlsZSAqIGdldF9lbXB0eV9m aWxwKHZvaWQpOwpleHRlcm4gdm9pZCBmaWxlX21vdmUoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBs aXN0X2hlYWQgKmxpc3QpOwpleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICogZ2V0X2hhc2hfdGFi bGUoa2Rldl90LCBpbnQsIGludCk7CmV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBnZXRibGso a2Rldl90LCBpbnQsIGludCk7CmV4dGVybiB2b2lkIGxsX3J3X2Jsb2NrKGludCwgaW50LCBzdHJ1 Y3QgYnVmZmVyX2hlYWQgKiBiaFtdKTsKZXh0ZXJuIHZvaWQgc3VibWl0X2JoKGludCwgc3RydWN0 IGJ1ZmZlcl9oZWFkICopOwpleHRlcm4gaW50IGlzX3JlYWRfb25seShrZGV2X3QpOwpleHRlcm4g dm9pZCBfX2JyZWxzZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CnN0YXRpYyBpbmxpbmUgdm9pZCBi cmVsc2Uoc3RydWN0IGJ1ZmZlcl9oZWFkICpidWYpCnsKICAgICAgICBpZiAoYnVmKQogICAgICAg ICAgICAgICAgX19icmVsc2UoYnVmKTsKfQpleHRlcm4gdm9pZCBfX2Jmb3JnZXQoc3RydWN0IGJ1 ZmZlcl9oZWFkICopOwpzdGF0aWMgaW5saW5lIHZvaWQgYmZvcmdldChzdHJ1Y3QgYnVmZmVyX2hl YWQgKmJ1ZikKewogICAgICAgIGlmIChidWYpCiAgICAgICAgICAgICAgICBfX2Jmb3JnZXQoYnVm KTsKfQpleHRlcm4gaW50IHNldF9ibG9ja3NpemUoa2Rldl90LCBpbnQpOwpleHRlcm4gc3RydWN0 IGJ1ZmZlcl9oZWFkICogYnJlYWQoa2Rldl90LCBpbnQsIGludCk7CmV4dGVybiB2b2lkIHdha2V1 cF9iZGZsdXNoKGludCB3YWl0KTsKZXh0ZXJuIHZvaWQgcHV0X3VudXNlZF9idWZmZXJfaGVhZChz dHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCk7CmV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBnZXRf dW51c2VkX2J1ZmZlcl9oZWFkKGludCBhc3luYyk7CgpleHRlcm4gaW50IGJyd19wYWdlKGludCwg c3RydWN0IHBhZ2UgKiwga2Rldl90LCBpbnQgW10sIGludCk7Cgp0eXBlZGVmIGludCAoZ2V0X2Js b2NrX3QpKHN0cnVjdCBpbm9kZSosbG9uZyxzdHJ1Y3QgYnVmZmVyX2hlYWQqLGludCk7CgoKZXh0 ZXJuIGludCBibG9ja19mbHVzaHBhZ2Uoc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgbG9uZyk7CmV4 dGVybiBpbnQgdHJ5X3RvX3JlbGVhc2VfcGFnZShzdHJ1Y3QgcGFnZSAqIHBhZ2UsIGludCBnZnBf bWFzayk7CmV4dGVybiBpbnQgYmxvY2tfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hh ciAqLCBpbnQpOwpleHRlcm4gaW50IGJsb2NrX3dyaXRlX2Z1bGxfcGFnZShzdHJ1Y3QgcGFnZSos IGdldF9ibG9ja190Kik7CmV4dGVybiBpbnQgYmxvY2tfcmVhZF9mdWxsX3BhZ2Uoc3RydWN0IHBh Z2UqLCBnZXRfYmxvY2tfdCopOwpleHRlcm4gaW50IGJsb2NrX3ByZXBhcmVfd3JpdGUoc3RydWN0 IHBhZ2UqLCB1bnNpZ25lZCwgdW5zaWduZWQsIGdldF9ibG9ja190Kik7CmV4dGVybiBpbnQgY29u dF9wcmVwYXJlX3dyaXRlKHN0cnVjdCBwYWdlKiwgdW5zaWduZWQsIHVuc2lnbmVkLCBnZXRfYmxv Y2tfdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqKTsK ZXh0ZXJuIGludCBibG9ja19zeW5jX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CgppbnQgZ2VuZXJpY19i bG9ja19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIGxvbmcsIGdldF9ibG9ja190ICopOwpp bnQgZ2VuZXJpY19jb21taXRfd3JpdGUoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBhZ2UgKiwgdW5z aWduZWQsIHVuc2lnbmVkKTsKaW50IGJsb2NrX3RydW5jYXRlX3BhZ2Uoc3RydWN0IGFkZHJlc3Nf c3BhY2UgKiwgbG9mZl90LCBnZXRfYmxvY2tfdCAqKTsKCmV4dGVybiBpbnQgd2FpdGZvcl9vbmVf cGFnZShzdHJ1Y3QgcGFnZSopOwpleHRlcm4gaW50IGdlbmVyaWNfZmlsZV9tbWFwKHN0cnVjdCBm aWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKZXh0ZXJuIGludCBmaWxlX3JlYWRfYWN0 b3IocmVhZF9kZXNjcmlwdG9yX3QgKiBkZXNjLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQg bG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CmV4dGVybiBzc2l6ZV90IGdlbmVyaWNf ZmlsZV9yZWFkKHN0cnVjdCBmaWxlICosIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmV4dGVy biBzc2l6ZV90IGdlbmVyaWNfZmlsZV93cml0ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICos IHNpemVfdCwgbG9mZl90ICopOwpleHRlcm4gdm9pZCBkb19nZW5lcmljX2ZpbGVfcmVhZChzdHJ1 Y3QgZmlsZSAqLCBsb2ZmX3QgKiwgcmVhZF9kZXNjcmlwdG9yX3QgKiwgcmVhZF9hY3Rvcl90KTsK CmV4dGVybiBzc2l6ZV90IGdlbmVyaWNfcmVhZF9kaXIoc3RydWN0IGZpbGUgKiwgY2hhciAqLCBz aXplX3QsIGxvZmZfdCAqKTsKZXh0ZXJuIGxvZmZfdCBnZW5lcmljX2ZpbGVfbGxzZWVrKHN0cnVj dCBmaWxlICosIGxvZmZfdCwgaW50KTsKZXh0ZXJuIGludCBnZW5lcmljX2ZpbGVfb3BlbihzdHJ1 Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CgpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9u cyBnZW5lcmljX3JvX2ZvcHM7CgpleHRlcm4gaW50IHZmc19yZWFkbGluayhzdHJ1Y3QgZGVudHJ5 ICosIGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IHZmc19mb2xsb3dfbGlu ayhzdHJ1Y3QgbmFtZWlkYXRhICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgcGFnZV9yZWFk bGluayhzdHJ1Y3QgZGVudHJ5ICosIGNoYXIgKiwgaW50KTsKZXh0ZXJuIGludCBwYWdlX2ZvbGxv d19saW5rKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKZXh0ZXJuIHN0cnVj dCBpbm9kZV9vcGVyYXRpb25zIHBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwoKZXh0ZXJu IGludCB2ZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqLCBmaWxsZGlyX3QsIHZvaWQgKik7CmV4dGVy biBpbnQgZGNhY2hlX3JlYWRkaXIoc3RydWN0IGZpbGUgKiwgdm9pZCAqLCBmaWxsZGlyX3QpOwoK ZXh0ZXJuIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpnZXRfZnNfdHlwZShjb25zdCBjaGFyICpu YW1lKTsKZXh0ZXJuIHN0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X3N1cGVyKGtkZXZfdCk7CmV4dGVy biB2b2lkIGRyb3Bfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CnN0YXRpYyBpbmxpbmUg aW50IGlzX21vdW50ZWQoa2Rldl90IGRldikKewogICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAq c2IgPSBnZXRfc3VwZXIoZGV2KTsKICAgICAgICBpZiAoc2IpIHsKICAgICAgICAgICAgICAgIGRy b3Bfc3VwZXIoc2IpOwogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAg IHJldHVybiAwOwp9CmV4dGVybiBrZGV2X3QgUk9PVF9ERVY7CmV4dGVybiBjaGFyIHJvb3RfZGV2 aWNlX25hbWVbXTsKCgpleHRlcm4gdm9pZCBzaG93X2J1ZmZlcnModm9pZCk7CmV4dGVybiB2b2lk IG1vdW50X3Jvb3Qodm9pZCk7CgoKCgoKCmV4dGVybiBzc2l6ZV90IGNoYXJfcmVhZChzdHJ1Y3Qg ZmlsZSAqLCBjaGFyICosIHNpemVfdCwgbG9mZl90ICopOwpleHRlcm4gc3NpemVfdCBibG9ja19y ZWFkKHN0cnVjdCBmaWxlICosIGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmV4dGVybiBpbnQg cmVhZF9haGVhZFtdOwoKZXh0ZXJuIHNzaXplX3QgY2hhcl93cml0ZShzdHJ1Y3QgZmlsZSAqLCBj b25zdCBjaGFyICosIHNpemVfdCwgbG9mZl90ICopOwpleHRlcm4gc3NpemVfdCBibG9ja193cml0 ZShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCwgbG9mZl90ICopOwoKZXh0ZXJu IGludCBmaWxlX2ZzeW5jKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKZXh0 ZXJuIGludCBnZW5lcmljX2J1ZmZlcl9mZGF0YXN5bmMoc3RydWN0IGlub2RlICppbm9kZSwgdW5z aWduZWQgbG9uZyBzdGFydF9pZHgsIHVuc2lnbmVkIGxvbmcgZW5kX2lkeCk7CmV4dGVybiBpbnQg Z2VuZXJpY19vc3luY19pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKCmV4dGVybiBpbnQgaW5v ZGVfY2hhbmdlX29rKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaWF0dHIgKik7CmV4dGVybiBpbnQg aW5vZGVfc2V0YXR0cihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlhdHRyICopOwojIDE1MDggIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiCnN0YXRpYyBpbmxpbmUgc3Ry dWN0IGRlbnRyeSAqbG9ja19wYXJlbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQp7CiAgICAgICAg c3RydWN0IGRlbnRyeSAqZGlyID0gZGdldChkZW50cnktPmRfcGFyZW50KTsKCiAgICAgICAgZG93 bigmZGlyLT5kX2lub2RlLT5pX3NlbSk7CiAgICAgICAgcmV0dXJuIGRpcjsKfQoKc3RhdGljIGlu bGluZSBzdHJ1Y3QgZGVudHJ5ICpnZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKewog ICAgICAgIHJldHVybiBkZ2V0KGRlbnRyeS0+ZF9wYXJlbnQpOwp9CgpzdGF0aWMgaW5saW5lIHZv aWQgdW5sb2NrX2RpcihzdHJ1Y3QgZGVudHJ5ICpkaXIpCnsKICAgICAgICB1cCgmZGlyLT5kX2lu b2RlLT5pX3NlbSk7CiAgICAgICAgZHB1dChkaXIpOwp9CgoKCgoKc3RhdGljIGlubGluZSB2b2lk IGRvdWJsZV9kb3duKHN0cnVjdCBzZW1hcGhvcmUgKnMxLCBzdHJ1Y3Qgc2VtYXBob3JlICpzMikK ewogICAgICAgIGlmIChzMSAhPSBzMikgewogICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCBs b25nKSBzMSA8ICh1bnNpZ25lZCBsb25nKSBzMikgewogICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3Qgc2VtYXBob3JlICp0bXAgPSBzMjsKICAgICAgICAgICAgICAgICAgICAgICAgczIgPSBz MTsgczEgPSB0bXA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb3duKHMxKTsK ICAgICAgICB9CiAgICAgICAgZG93bihzMik7Cn0KIyAxNTUyICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9saW51eC9mcy5oIgpzdGF0aWMgaW5saW5lIHZvaWQgdHJpcGxlX2Rvd24oc3Ry dWN0IHNlbWFwaG9yZSAqczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg c2VtYXBob3JlICpzMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZW1h cGhvcmUgKnMzKQp7CiAgICAgICAgaWYgKHMxICE9IHMyKSB7CiAgICAgICAgICAgICAgICBpZiAo KHVuc2lnbmVkIGxvbmcpIHMxIDwgKHVuc2lnbmVkIGxvbmcpIHMyKSB7CiAgICAgICAgICAgICAg ICAgICAgICAgIGlmICgodW5zaWduZWQgbG9uZykgczEgPCAodW5zaWduZWQgbG9uZykgczMpIHsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlICp0bXAgPSBz MzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzMyA9IHMxOyBzMSA9IHRtcDsKICAg ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2ln bmVkIGxvbmcpIHMxIDwgKHVuc2lnbmVkIGxvbmcpIHMyKSB7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHNlbWFwaG9yZSAqdG1wID0gczI7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgczIgPSBzMTsgczEgPSB0bXA7CiAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgo dW5zaWduZWQgbG9uZykgczEgPCAodW5zaWduZWQgbG9uZykgczMpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlICp0bXAgPSBzMzsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzMyA9IHMxOyBzMSA9IHRtcDsKICAgICAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpIHMyIDwg KHVuc2lnbmVkIGxvbmcpIHMzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHNlbWFwaG9yZSAqdG1wID0gczM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg czMgPSBzMjsgczIgPSB0bXA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgIGRvd24oczEpOwogICAgICAgIH0gZWxzZSBpZiAoKHVuc2ln bmVkIGxvbmcpIHMyIDwgKHVuc2lnbmVkIGxvbmcpIHMzKSB7CiAgICAgICAgICAgICAgICBzdHJ1 Y3Qgc2VtYXBob3JlICp0bXAgPSBzMzsKICAgICAgICAgICAgICAgIHMzID0gczI7IHMyID0gdG1w OwogICAgICAgIH0KICAgICAgICBkb3duKHMyKTsKICAgICAgICBkb3duKHMzKTsKfQoKc3RhdGlj IGlubGluZSB2b2lkIGRvdWJsZV91cChzdHJ1Y3Qgc2VtYXBob3JlICpzMSwgc3RydWN0IHNlbWFw aG9yZSAqczIpCnsKICAgICAgICB1cChzMSk7CiAgICAgICAgaWYgKHMxICE9IHMyKQogICAgICAg ICAgICAgICAgdXAoczIpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdHJpcGxlX3VwKHN0cnVjdCBz ZW1hcGhvcmUgKnMxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZW1hcGhv cmUgKnMyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgKnMz KQp7CiAgICAgICAgdXAoczEpOwogICAgICAgIGlmIChzMSAhPSBzMikKICAgICAgICAgICAgICAg IHVwKHMyKTsKICAgICAgICB1cChzMyk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBkb3VibGVfbG9j ayhzdHJ1Y3QgZGVudHJ5ICpkMSwgc3RydWN0IGRlbnRyeSAqZDIpCnsKICAgICAgICBkb3VibGVf ZG93bigmZDEtPmRfaW5vZGUtPmlfc2VtLCAmZDItPmRfaW5vZGUtPmlfc2VtKTsKfQoKc3RhdGlj IGlubGluZSB2b2lkIGRvdWJsZV91bmxvY2soc3RydWN0IGRlbnRyeSAqZDEsIHN0cnVjdCBkZW50 cnkgKmQyKQp7CiAgICAgICAgZG91YmxlX3VwKCZkMS0+ZF9pbm9kZS0+aV9zZW0sJmQyLT5kX2lu b2RlLT5pX3NlbSk7CiAgICAgICAgZHB1dChkMSk7CiAgICAgICAgZHB1dChkMik7Cn0KIyAxOCAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIiAyCiMgMzIg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCIKdHlwZWRl ZiBzdHJ1Y3QgX191c2VyX2NhcF9oZWFkZXJfc3RydWN0IHsKICAgICAgICBfX3UzMiB2ZXJzaW9u OwogICAgICAgIGludCBwaWQ7Cn0gKmNhcF91c2VyX2hlYWRlcl90OwoKdHlwZWRlZiBzdHJ1Y3Qg X191c2VyX2NhcF9kYXRhX3N0cnVjdCB7CiAgICAgICAgX191MzIgZWZmZWN0aXZlOwogICAgICAg IF9fdTMyIHBlcm1pdHRlZDsKICAgICAgICBfX3UzMiBpbmhlcml0YWJsZTsKfSAqY2FwX3VzZXJf ZGF0YV90OwojIDU1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9jYXBhYmls aXR5LmgiCnR5cGVkZWYgX191MzIga2VybmVsX2NhcF90OwojIDI4NiAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIgpleHRlcm4ga2VybmVsX2NhcF90IGNh cF9ic2V0OwojIDMxNCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvY2FwYWJp bGl0eS5oIgpzdGF0aWMgaW5saW5lIGtlcm5lbF9jYXBfdCBjYXBfY29tYmluZShrZXJuZWxfY2Fw X3QgYSwga2VybmVsX2NhcF90IGIpCnsKICAgICBrZXJuZWxfY2FwX3QgZGVzdDsKICAgICAoZGVz dCkgPSAoYSkgfCAoYik7CiAgICAgcmV0dXJuIGRlc3Q7Cn0KCnN0YXRpYyBpbmxpbmUga2VybmVs X2NhcF90IGNhcF9pbnRlcnNlY3Qoa2VybmVsX2NhcF90IGEsIGtlcm5lbF9jYXBfdCBiKQp7CiAg ICAga2VybmVsX2NhcF90IGRlc3Q7CiAgICAgKGRlc3QpID0gKGEpICYgKGIpOwogICAgIHJldHVy biBkZXN0Owp9CgpzdGF0aWMgaW5saW5lIGtlcm5lbF9jYXBfdCBjYXBfZHJvcChrZXJuZWxfY2Fw X3QgYSwga2VybmVsX2NhcF90IGRyb3ApCnsKICAgICBrZXJuZWxfY2FwX3QgZGVzdDsKICAgICAo ZGVzdCkgPSAoYSkgJiB+KGRyb3ApOwogICAgIHJldHVybiBkZXN0Owp9CgpzdGF0aWMgaW5saW5l IGtlcm5lbF9jYXBfdCBjYXBfaW52ZXJ0KGtlcm5lbF9jYXBfdCBjKQp7CiAgICAga2VybmVsX2Nh cF90IGRlc3Q7CiAgICAgKGRlc3QpID0gfihjKTsKICAgICByZXR1cm4gZGVzdDsKfQojIDYgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaCIgMgojIDIyICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgiCnN0cnVjdCBsaW51eF9i aW5wcm17CiAgICAgICAgY2hhciBidWZbMTI4XTsKICAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZVsz Ml07CiAgICAgICAgdW5zaWduZWQgbG9uZyBwOwogICAgICAgIGludCBzaF9iYW5nOwogICAgICAg IHN0cnVjdCBmaWxlICogZmlsZTsKICAgICAgICBpbnQgZV91aWQsIGVfZ2lkOwogICAgICAgIGtl cm5lbF9jYXBfdCBjYXBfaW5oZXJpdGFibGUsIGNhcF9wZXJtaXR0ZWQsIGNhcF9lZmZlY3RpdmU7 CiAgICAgICAgaW50IGFyZ2MsIGVudmM7CiAgICAgICAgY2hhciAqIGZpbGVuYW1lOwogICAgICAg IHVuc2lnbmVkIGxvbmcgbG9hZGVyLCBleGVjOwp9OwoKCgoKCnN0cnVjdCBsaW51eF9iaW5mbXQg ewogICAgICAgIHN0cnVjdCBsaW51eF9iaW5mbXQgKiBuZXh0OwogICAgICAgIHN0cnVjdCBtb2R1 bGUgKm1vZHVsZTsKICAgICAgICBpbnQgKCpsb2FkX2JpbmFyeSkoc3RydWN0IGxpbnV4X2JpbnBy bSAqLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwogICAgICAgIGludCAoKmxvYWRfc2hsaWIpKHN0 cnVjdCBmaWxlICopOwogICAgICAgIGludCAoKmNvcmVfZHVtcCkobG9uZyBzaWduciwgc3RydWN0 IHB0X3JlZ3MgKiByZWdzLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpOwogICAgICAgIHVuc2lnbmVkIGxv bmcgbWluX2NvcmVkdW1wOwp9OwoKZXh0ZXJuIGludCByZWdpc3Rlcl9iaW5mbXQoc3RydWN0IGxp bnV4X2JpbmZtdCAqKTsKZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2JpbmZtdChzdHJ1Y3QgbGludXhf YmluZm10ICopOwoKZXh0ZXJuIGludCBwcmVwYXJlX2JpbnBybShzdHJ1Y3QgbGludXhfYmlucHJt ICopOwpleHRlcm4gdm9pZCByZW1vdmVfYXJnX3plcm8oc3RydWN0IGxpbnV4X2JpbnBybSAqKTsK ZXh0ZXJuIGludCBzZWFyY2hfYmluYXJ5X2hhbmRsZXIoc3RydWN0IGxpbnV4X2JpbnBybSAqLHN0 cnVjdCBwdF9yZWdzICopOwpleHRlcm4gaW50IGZsdXNoX29sZF9leGVjKHN0cnVjdCBsaW51eF9i aW5wcm0gKiBicHJtKTsKZXh0ZXJuIGludCBzZXR1cF9hcmdfcGFnZXMoc3RydWN0IGxpbnV4X2Jp bnBybSAqIGJwcm0pOwpleHRlcm4gaW50IGNvcHlfc3RyaW5ncyhpbnQgYXJnYyxjaGFyICoqIGFy Z3Ysc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSk7CmV4dGVybiBpbnQgY29weV9zdHJpbmdzX2tl cm5lbChpbnQgYXJnYyxjaGFyICoqIGFyZ3Ysc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSk7CmV4 dGVybiB2b2lkIGNvbXB1dGVfY3JlZHMoc3RydWN0IGxpbnV4X2JpbnBybSAqYmlucHJtKTsKZXh0 ZXJuIGludCBkb19jb3JlZHVtcChsb25nIHNpZ25yLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpOwpl eHRlcm4gdm9pZCBzZXRfYmluZm10KHN0cnVjdCBsaW51eF9iaW5mbXQgKm5ldyk7CiMgMTAgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC90aHJlYWRzLmgiIDEKIyAxMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNs dWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9s aW51eC90aW1lcy5oIiAxCgoKCnN0cnVjdCB0bXMgewogICAgICAgIGNsb2NrX3QgdG1zX3V0aW1l OwogICAgICAgIGNsb2NrX3QgdG1zX3N0aW1lOwogICAgICAgIGNsb2NrX3QgdG1zX2N1dGltZTsK ICAgICAgICBjbG9ja190IHRtc19jc3RpbWU7Cn07CiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9saW51eC90aW1leC5oIiAxCiMgNTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2xpbnV4L3RpbWV4LmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3Bh cmFtLmgiIDEKIyA1NSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdGltZXgu aCIgMgojIDE1MiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdGltZXguaCIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vdGltZXguaCIgMQojIDkgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS90aW1leC5oIgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgMTAgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2FzbS90aW1leC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvYXNtL21zci5oIiAxCiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2FzbS90aW1leC5oIiAyCiMgMzIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS90 aW1leC5oIgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBjeWNsZXNfdDsKCmV4dGVybiBjeWNs ZXNfdCBjYWNoZWZsdXNoX3RpbWU7CgpzdGF0aWMgaW5saW5lIGN5Y2xlc190IGdldF9jeWNsZXMg KHZvaWQpCnsKCgoKICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgcmV0OwoKICAgICAgICBfX2Fz bV9fIF9fdm9sYXRpbGVfXygicmR0c2MiIDogIj1BIiAocmV0KSk7CiAgICAgICAgcmV0dXJuIHJl dDsKCn0KCmV4dGVybiB1bnNpZ25lZCBsb25nIGNwdV9raHo7CiMgMTUzICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9saW51eC90aW1leC5oIiAyCiMgMTYxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvaW5jbHVkZS9saW51eC90aW1leC5oIgpzdHJ1Y3QgdGltZXggewogICAgICAgIHVuc2ln bmVkIGludCBtb2RlczsKICAgICAgICBsb25nIG9mZnNldDsKICAgICAgICBsb25nIGZyZXE7CiAg ICAgICAgbG9uZyBtYXhlcnJvcjsKICAgICAgICBsb25nIGVzdGVycm9yOwogICAgICAgIGludCBz dGF0dXM7CiAgICAgICAgbG9uZyBjb25zdGFudDsKICAgICAgICBsb25nIHByZWNpc2lvbjsKICAg ICAgICBsb25nIHRvbGVyYW5jZTsKCgogICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWU7CiAgICAg ICAgbG9uZyB0aWNrOwoKICAgICAgICBsb25nIHBwc2ZyZXE7CiAgICAgICAgbG9uZyBqaXR0ZXI7 CiAgICAgICAgaW50IHNoaWZ0OwogICAgICAgIGxvbmcgc3RhYmlsOwogICAgICAgIGxvbmcgaml0 Y250OwogICAgICAgIGxvbmcgY2FsY250OwogICAgICAgIGxvbmcgZXJyY250OwogICAgICAgIGxv bmcgc3RiY250OwoKICAgICAgICBpbnQgOjMyOyBpbnQgOjMyOyBpbnQgOjMyOyBpbnQgOjMyOwog ICAgICAgIGludCA6MzI7IGludCA6MzI7IGludCA6MzI7IGludCA6MzI7CiAgICAgICAgaW50IDoz MjsgaW50IDozMjsgaW50IDozMjsgaW50IDozMjsKfTsKIyAyNTMgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2xpbnV4L3RpbWV4LmgiCmV4dGVybiBsb25nIHRpY2s7CmV4dGVybiBpbnQg dGlja2FkajsKCgoKCmV4dGVybiBpbnQgdGltZV9zdGF0ZTsKZXh0ZXJuIGludCB0aW1lX3N0YXR1 czsKZXh0ZXJuIGxvbmcgdGltZV9vZmZzZXQ7CmV4dGVybiBsb25nIHRpbWVfY29uc3RhbnQ7CmV4 dGVybiBsb25nIHRpbWVfdG9sZXJhbmNlOwpleHRlcm4gbG9uZyB0aW1lX3ByZWNpc2lvbjsKZXh0 ZXJuIGxvbmcgdGltZV9tYXhlcnJvcjsKZXh0ZXJuIGxvbmcgdGltZV9lc3RlcnJvcjsKCmV4dGVy biBsb25nIHRpbWVfcGhhc2U7CmV4dGVybiBsb25nIHRpbWVfZnJlcTsKZXh0ZXJuIGxvbmcgdGlt ZV9hZGo7CmV4dGVybiBsb25nIHRpbWVfcmVmdGltZTsKCmV4dGVybiBsb25nIHRpbWVfYWRqdXN0 OwoKCmV4dGVybiBsb25nIHBwc19vZmZzZXQ7CmV4dGVybiBsb25nIHBwc19qaXR0ZXI7CmV4dGVy biBsb25nIHBwc19mcmVxOwpleHRlcm4gbG9uZyBwcHNfc3RhYmlsOwpleHRlcm4gbG9uZyBwcHNf dmFsaWQ7CgoKZXh0ZXJuIGludCBwcHNfc2hpZnQ7CmV4dGVybiBsb25nIHBwc19qaXRjbnQ7CmV4 dGVybiBsb25nIHBwc19jYWxjbnQ7CmV4dGVybiBsb25nIHBwc19lcnJjbnQ7CmV4dGVybiBsb25n IHBwc19zdGJjbnQ7CiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3Nj aGVkLmgiIDIKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3N5c3RlbS5o IiAxCiMgMTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgiIDEKIyAx OCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9wYWdlLmgiIDEKIyAxOSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2FzbS9wdHJhY2UuaCIgMQojIDIwICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2lu Y2x1ZGUvYXNtL21tdS5oIiAxCgoKCgoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgdm9pZCAq c2VnbWVudHM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBjcHV2YWxpZDsKfSBtbV9jb250ZXh0X3Q7 CiMgMjEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc21wLmgiIDEKIyA5ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zbXAuaCIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDEwICIvdXNyL3NyYy9saW51eC0y LjQuMTMvaW5jbHVkZS9saW51eC9zbXAuaCIgMgojIDIzICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgvdHR5LmgiIDEKIyAxOSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvdHR5LmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvY29uZmln LmgiIDEKIyAyMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdHR5LmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIiAxCiMgMjEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3R0eS5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvbWFqb3IuaCIgMQojIDE3NyAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvbWFqb3IuaCIKc3RhdGljIF9faW5saW5lX18gaW50IHNj c2lfYmxrX21ham9yKGludCBtKSB7CiAgICAgICAgcmV0dXJuICgoKG0pID09IDggfHwgKChtKSA+ PSA2NSAmJiAobSkgPD0gNzEpKSB8fCAobSkgPT0gMTEpOwp9CiMgMTkwICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9saW51eC9tYWpvci5oIgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgaWRl X2Jsa19tYWpvcihpbnQgbSkKewogICAgICAgIHJldHVybiAoKG0pID09IDMgfHwgKG0pID09IDIy IHx8IChtKSA9PSAzMyB8fCAobSkgPT0gMzQgfHwgKG0pID09IDU2IHx8IChtKSA9PSA1NyB8fCAo bSkgPT0gODggfHwgKG0pID09IDg5IHx8IChtKSA9PSA5MCB8fCAobSkgPT0gOTEpOwp9CiMgMjIg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3R0eS5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdGVybWlvcy5oIiAxCgoKCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDUgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3Rlcm1pb3MuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2FzbS90ZXJtaW9zLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvaW5jbHVkZS9hc20vdGVybWJpdHMuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2xpbnV4L3Bvc2l4X3R5cGVzLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0y LjQuMTMvaW5jbHVkZS9hc20vdGVybWJpdHMuaCIgMgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGNj X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHNwZWVkX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHRj ZmxhZ190OwoKCnN0cnVjdCB0ZXJtaW9zIHsKICAgICAgICB0Y2ZsYWdfdCBjX2lmbGFnOwogICAg ICAgIHRjZmxhZ190IGNfb2ZsYWc7CiAgICAgICAgdGNmbGFnX3QgY19jZmxhZzsKICAgICAgICB0 Y2ZsYWdfdCBjX2xmbGFnOwogICAgICAgIGNjX3QgY19saW5lOwogICAgICAgIGNjX3QgY19jY1sx OV07Cn07CiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3Rlcm1pb3MuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9pb2N0bHMuaCIgMQoKCgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9pb2N0bC5oIiAxCiMgNSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2lvY3Rscy5oIiAyCiMgNiAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3Rlcm1pb3MuaCIgMgoKc3RydWN0IHdpbnNpemUgewog ICAgICAgIHVuc2lnbmVkIHNob3J0IHdzX3JvdzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB3c19j b2w7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgd3NfeHBpeGVsOwogICAgICAgIHVuc2lnbmVkIHNo b3J0IHdzX3lwaXhlbDsKfTsKCgpzdHJ1Y3QgdGVybWlvIHsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBjX2lmbGFnOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgY19jZmxhZzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBjX2xmbGFnOwogICAgICAg IHVuc2lnbmVkIGNoYXIgY19saW5lOwogICAgICAgIHVuc2lnbmVkIGNoYXIgY19jY1s4XTsKfTsK IyA2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC90ZXJtaW9zLmgiIDIKIyAy MyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdHR5LmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC90cXVldWUuaCIgMQojIDI0ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC90dHkuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3R0eV9kcml2ZXIuaCIgMQojIDExOCAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvdHR5X2RyaXZlci5oIgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2ZzLmgiIDEKIyAxMTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2xpbnV4L3R0eV9kcml2ZXIuaCIgMgoKc3RydWN0IHR0eV9kcml2ZXIgewogICAg ICAgIGludCBtYWdpYzsKICAgICAgICBjb25zdCBjaGFyICpkcml2ZXJfbmFtZTsKICAgICAgICBj b25zdCBjaGFyICpuYW1lOwogICAgICAgIGludCBuYW1lX2Jhc2U7CiAgICAgICAgc2hvcnQgbWFq b3I7CiAgICAgICAgc2hvcnQgbWlub3Jfc3RhcnQ7CiAgICAgICAgc2hvcnQgbnVtOwogICAgICAg IHNob3J0IHR5cGU7CiAgICAgICAgc2hvcnQgc3VidHlwZTsKICAgICAgICBzdHJ1Y3QgdGVybWlv cyBpbml0X3Rlcm1pb3M7CiAgICAgICAgaW50IGZsYWdzOwogICAgICAgIGludCAqcmVmY291bnQ7 CiAgICAgICAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2VudHJ5OwogICAgICAgIHN0cnVj dCB0dHlfZHJpdmVyICpvdGhlcjsKCgoKCiAgICAgICAgc3RydWN0IHR0eV9zdHJ1Y3QgKip0YWJs ZTsKICAgICAgICBzdHJ1Y3QgdGVybWlvcyAqKnRlcm1pb3M7CiAgICAgICAgc3RydWN0IHRlcm1p b3MgKip0ZXJtaW9zX2xvY2tlZDsKICAgICAgICB2b2lkICpkcml2ZXJfc3RhdGU7CgoKCgoKICAg ICAgICBpbnQgKCpvcGVuKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBm aWxwKTsKICAgICAgICB2b2lkICgqY2xvc2UpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1 Y3QgZmlsZSAqIGZpbHApOwogICAgICAgIGludCAoKndyaXRlKShzdHJ1Y3QgdHR5X3N0cnVjdCAq IHR0eSwgaW50IGZyb21fdXNlciwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKICAgICAgICB2b2lkICgqcHV0X2NoYXIpKHN0cnVjdCB0 dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgY2gpOwogICAgICAgIHZvaWQgKCpmbHVzaF9j aGFycykoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAgICAgICAgaW50ICgqd3JpdGVfcm9vbSko c3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAgICAgICAgaW50ICgqY2hhcnNfaW5fYnVmZmVyKShz dHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAgICBpbnQgKCppb2N0bCkoc3RydWN0IHR0eV9z dHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBmaWxlLAogICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKICAgICAgICB2b2lkICgqc2V0X3Rlcm1p b3MpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICogb2xkKTsKICAgICAg ICB2b2lkICgqdGhyb3R0bGUpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsKICAgICAgICB2b2lk ICgqdW50aHJvdHRsZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwogICAgICAgIHZvaWQgKCpz dG9wKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAgICB2b2lkICgqc3RhcnQpKHN0cnVj dCB0dHlfc3RydWN0ICp0dHkpOwogICAgICAgIHZvaWQgKCpoYW5ndXApKHN0cnVjdCB0dHlfc3Ry dWN0ICp0dHkpOwogICAgICAgIHZvaWQgKCpicmVha19jdGwpKHN0cnVjdCB0dHlfc3RydWN0ICp0 dHksIGludCBzdGF0ZSk7CiAgICAgICAgdm9pZCAoKmZsdXNoX2J1ZmZlcikoc3RydWN0IHR0eV9z dHJ1Y3QgKnR0eSk7CiAgICAgICAgdm9pZCAoKnNldF9sZGlzYykoc3RydWN0IHR0eV9zdHJ1Y3Qg KnR0eSk7CiAgICAgICAgdm9pZCAoKndhaXRfdW50aWxfc2VudCkoc3RydWN0IHR0eV9zdHJ1Y3Qg KnR0eSwgaW50IHRpbWVvdXQpOwogICAgICAgIHZvaWQgKCpzZW5kX3hjaGFyKShzdHJ1Y3QgdHR5 X3N0cnVjdCAqdHR5LCBjaGFyIGNoKTsKICAgICAgICBpbnQgKCpyZWFkX3Byb2MpKGNoYXIgKnBh Z2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwogICAgICAgIGludCAoKndyaXRlX3Byb2Mp KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWZmZXIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSk7CgoKCgogICAgICAgIHN0 cnVjdCB0dHlfZHJpdmVyICpuZXh0OwogICAgICAgIHN0cnVjdCB0dHlfZHJpdmVyICpwcmV2Owp9 OwojIDI1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC90dHkuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oIiAxCiMgMTAw ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaCIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mcy5oIiAxCiMgMTAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMQojIDEwMiAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvdHR5X2xkaXNjLmgiIDIKCnN0cnVjdCB0dHlfbGRpc2Mg ewogICAgICAgIGludCBtYWdpYzsKICAgICAgICBjaGFyICpuYW1lOwogICAgICAgIGludCBudW07 CiAgICAgICAgaW50IGZsYWdzOwoKCgogICAgICAgIGludCAoKm9wZW4pKHN0cnVjdCB0dHlfc3Ry dWN0ICopOwogICAgICAgIHZvaWQgKCpjbG9zZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKik7CiAgICAg ICAgdm9pZCAoKmZsdXNoX2J1ZmZlcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAgICAgICAg c3NpemVfdCAoKmNoYXJzX2luX2J1ZmZlcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAgICAg ICAgc3NpemVfdCAoKnJlYWQpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAq IGZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiBidWYsIHNpemVf dCBucik7CiAgICAgICAgc3NpemVfdCAoKndyaXRlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwg c3RydWN0IGZpbGUgKiBmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqIGJ1Ziwgc2l6ZV90IG5yKTsKICAgICAgICBpbnQgKCppb2N0bCkoc3RydWN0IHR0 eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKICAgICAgICB2b2lkICgq c2V0X3Rlcm1pb3MpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0ZXJtaW9zICogb2xk KTsKICAgICAgICB1bnNpZ25lZCBpbnQgKCpwb2xsKShzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1 Y3QgZmlsZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwb2xsX3RhYmxl X3N0cnVjdCAqKTsKCgoKCiAgICAgICAgdm9pZCAoKnJlY2VpdmVfYnVmKShzdHJ1Y3QgdHR5X3N0 cnVjdCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKmZwLCBpbnQgY291bnQpOwogICAgICAgIGludCAoKnJlY2VpdmVfcm9vbSko c3RydWN0IHR0eV9zdHJ1Y3QgKik7CiAgICAgICAgdm9pZCAoKndyaXRlX3dha2V1cCkoc3RydWN0 IHR0eV9zdHJ1Y3QgKik7Cn07CiMgMjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xp bnV4L3R0eS5oIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zeXN0 ZW0uaCIgMQojIDI4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC90dHkuaCIg MgojIDU4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC90dHkuaCIKc3RydWN0 IHNjcmVlbl9pbmZvIHsKICAgICAgICB1bnNpZ25lZCBjaGFyIG9yaWdfeDsKICAgICAgICB1bnNp Z25lZCBjaGFyIG9yaWdfeTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkb250dXNlMTsKICAgICAg ICB1bnNpZ25lZCBzaG9ydCBvcmlnX3ZpZGVvX3BhZ2U7CiAgICAgICAgdW5zaWduZWQgY2hhciBv cmlnX3ZpZGVvX21vZGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBvcmlnX3ZpZGVvX2NvbHM7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgdW51c2VkMjsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBvcmln X3ZpZGVvX2VnYV9ieDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB1bnVzZWQzOwogICAgICAgIHVu c2lnbmVkIGNoYXIgb3JpZ192aWRlb19saW5lczsKICAgICAgICB1bnNpZ25lZCBjaGFyIG9yaWdf dmlkZW9faXNWR0E7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgb3JpZ192aWRlb19wb2ludHM7CgoK ICAgICAgICB1bnNpZ25lZCBzaG9ydCBsZmJfd2lkdGg7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg bGZiX2hlaWdodDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBsZmJfZGVwdGg7CiAgICAgICAgdW5z aWduZWQgbG9uZyBsZmJfYmFzZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGxmYl9zaXplOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IGRvbnR1c2UyLCBkb250dXNlMzsKICAgICAgICB1bnNpZ25lZCBz aG9ydCBsZmJfbGluZWxlbmd0aDsKICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZF9zaXplOwogICAg ICAgIHVuc2lnbmVkIGNoYXIgcmVkX3BvczsKICAgICAgICB1bnNpZ25lZCBjaGFyIGdyZWVuX3Np emU7CiAgICAgICAgdW5zaWduZWQgY2hhciBncmVlbl9wb3M7CiAgICAgICAgdW5zaWduZWQgY2hh ciBibHVlX3NpemU7CiAgICAgICAgdW5zaWduZWQgY2hhciBibHVlX3BvczsKICAgICAgICB1bnNp Z25lZCBjaGFyIHJzdmRfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHJzdmRfcG9zOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IHZlc2FwbV9zZWc7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdmVz YXBtX29mZjsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBwYWdlczsKCn07CgpleHRlcm4gc3RydWN0 IHNjcmVlbl9pbmZvIHNjcmVlbl9pbmZvOwojIDEzOCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2lu Y2x1ZGUvbGludXgvdHR5LmgiCnN0cnVjdCB0dHlfZmxpcF9idWZmZXIgewogICAgICAgIHN0cnVj dCB0cV9zdHJ1Y3QgdHF1ZXVlOwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgcHR5X3NlbTsKICAg ICAgICBjaGFyICpjaGFyX2J1Zl9wdHI7CiAgICAgICAgdW5zaWduZWQgY2hhciAqZmxhZ19idWZf cHRyOwogICAgICAgIGludCBjb3VudDsKICAgICAgICBpbnQgYnVmX251bTsKICAgICAgICB1bnNp Z25lZCBjaGFyIGNoYXJfYnVmWzIqNTEyXTsKICAgICAgICBjaGFyIGZsYWdfYnVmWzIqNTEyXTsK ICAgICAgICB1bnNpZ25lZCBjaGFyIHNsb3BbNF07Cn07CiMgMjU4ICIvdXNyL3NyYy9saW51eC0y LjQuMTMvaW5jbHVkZS9saW51eC90dHkuaCIKc3RydWN0IHR0eV9zdHJ1Y3QgewogICAgICAgIGlu dCBtYWdpYzsKICAgICAgICBzdHJ1Y3QgdHR5X2RyaXZlciBkcml2ZXI7CiAgICAgICAgc3RydWN0 IHR0eV9sZGlzYyBsZGlzYzsKICAgICAgICBzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcywgKnRlcm1p b3NfbG9ja2VkOwogICAgICAgIGludCBwZ3JwOwogICAgICAgIGludCBzZXNzaW9uOwogICAgICAg IGtkZXZfdCBkZXZpY2U7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAgICBpbnQg Y291bnQ7CiAgICAgICAgc3RydWN0IHdpbnNpemUgd2luc2l6ZTsKICAgICAgICB1bnNpZ25lZCBj aGFyIHN0b3BwZWQ6MSwgaHdfc3RvcHBlZDoxLCBmbG93X3N0b3BwZWQ6MSwgcGFja2V0OjE7CiAg ICAgICAgdW5zaWduZWQgY2hhciBsb3dfbGF0ZW5jeToxLCB3YXJuZWQ6MTsKICAgICAgICB1bnNp Z25lZCBjaGFyIGN0cmxfc3RhdHVzOwoKICAgICAgICBzdHJ1Y3QgdHR5X3N0cnVjdCAqbGluazsK ICAgICAgICBzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jOwogICAgICAgIHN0cnVjdCB0dHlf ZmxpcF9idWZmZXIgZmxpcDsKICAgICAgICBpbnQgbWF4X2ZsaXBfY250OwogICAgICAgIGludCBh bHRfc3BlZWQ7CiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3Qgd3JpdGVfd2FpdDsKICAgICAgICB3 YWl0X3F1ZXVlX2hlYWRfdCByZWFkX3dhaXQ7CiAgICAgICAgc3RydWN0IHRxX3N0cnVjdCB0cV9o YW5ndXA7CiAgICAgICAgdm9pZCAqZGlzY19kYXRhOwogICAgICAgIHZvaWQgKmRyaXZlcl9kYXRh OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgdHR5X2ZpbGVzOwoKCgoKCgoKICAgICAgICB1bnNp Z25lZCBpbnQgY29sdW1uOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbG5leHQ6MSwgZXJhc2luZzox LCByYXc6MSwgcmVhbF9yYXc6MSwgaWNhbm9uOjE7CiAgICAgICAgdW5zaWduZWQgY2hhciBjbG9z aW5nOjE7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgbWluaW11bV90b193YWtlOwogICAgICAgIHVu c2lnbmVkIG92ZXJydW5fdGltZTsKICAgICAgICBpbnQgbnVtX292ZXJydW47CiAgICAgICAgdW5z aWduZWQgbG9uZyBwcm9jZXNzX2NoYXJfbWFwWzI1Ni8oOCpzaXplb2YodW5zaWduZWQgbG9uZykp XTsKICAgICAgICBjaGFyICpyZWFkX2J1ZjsKICAgICAgICBpbnQgcmVhZF9oZWFkOwogICAgICAg IGludCByZWFkX3RhaWw7CiAgICAgICAgaW50IHJlYWRfY250OwogICAgICAgIHVuc2lnbmVkIGxv bmcgcmVhZF9mbGFnc1s0MDk2Lyg4KnNpemVvZih1bnNpZ25lZCBsb25nKSldOwogICAgICAgIGlu dCBjYW5vbl9kYXRhOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY2Fub25faGVhZDsKICAgICAgICB1 bnNpZ25lZCBpbnQgY2Fub25fY29sdW1uOwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgYXRvbWlj X3JlYWQ7CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBhdG9taWNfd3JpdGU7CiAgICAgICAgc3Bp bmxvY2tfdCByZWFkX2xvY2s7CgogICAgICAgIHN0cnVjdCB0cV9zdHJ1Y3QgU0FLX3RxOwp9Owoj IDM0MCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdHR5LmgiCmV4dGVybiB2 b2lkIHR0eV93cml0ZV9mbHVzaChzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKCmV4dGVybiBzdHJ1Y3Qg dGVybWlvcyB0dHlfc3RkX3Rlcm1pb3M7CmV4dGVybiBzdHJ1Y3QgdHR5X3N0cnVjdCAqIHJlZGly ZWN0OwpleHRlcm4gc3RydWN0IHR0eV9sZGlzYyBsZGlzY3NbXTsKZXh0ZXJuIGludCBmZ19jb25z b2xlLCBsYXN0X2NvbnNvbGUsIHdhbnRfY29uc29sZTsKCmV4dGVybiBpbnQga21zZ19yZWRpcmVj dDsKCmV4dGVybiB2b2lkIGNvbl9pbml0KHZvaWQpOwpleHRlcm4gdm9pZCBjb25zb2xlX2luaXQo dm9pZCk7CgpleHRlcm4gaW50IGxwX2luaXQodm9pZCk7CmV4dGVybiBpbnQgcHR5X2luaXQodm9p ZCk7CmV4dGVybiB2b2lkIHR0eV9pbml0KHZvaWQpOwpleHRlcm4gaW50IG14c2VyX2luaXQodm9p ZCk7CmV4dGVybiBpbnQgbW94YV9pbml0KHZvaWQpOwpleHRlcm4gaW50IGlwMl9pbml0KHZvaWQp OwpleHRlcm4gaW50IHBjeGVfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBwY19pbml0KHZvaWQpOwpl eHRlcm4gaW50IHZjc19pbml0KHZvaWQpOwpleHRlcm4gaW50IHJwX2luaXQodm9pZCk7CmV4dGVy biBpbnQgY3lfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBzdGxfaW5pdCh2b2lkKTsKZXh0ZXJuIGlu dCBzdGxpX2luaXQodm9pZCk7CmV4dGVybiBpbnQgc3BlY2lhbGl4X2luaXQodm9pZCk7CmV4dGVy biBpbnQgZXNwc2VyaWFsX2luaXQodm9pZCk7CmV4dGVybiBpbnQgbWFjc2VyaWFsX2luaXQodm9p ZCk7CmV4dGVybiBpbnQgYTIyMzJib2FyZF9pbml0KHZvaWQpOwpleHRlcm4gaW50IHN0ZGlvX2lu aXQodm9pZCk7CgpleHRlcm4gaW50IHR0eV9wYXJhbm9pYV9jaGVjayhzdHJ1Y3QgdHR5X3N0cnVj dCAqdHR5LCBrZGV2X3QgZGV2aWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICpyb3V0aW5lKTsKZXh0ZXJuIGNoYXIgKnR0eV9uYW1lKHN0cnVjdCB0dHlfc3RydWN0 ICp0dHksIGNoYXIgKmJ1Zik7CmV4dGVybiB2b2lkIHR0eV93YWl0X3VudGlsX3NlbnQoc3RydWN0 IHR0eV9zdHJ1Y3QgKiB0dHksIGxvbmcgdGltZW91dCk7CmV4dGVybiBpbnQgdHR5X2NoZWNrX2No YW5nZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSk7CmV4dGVybiB2b2lkIHN0b3BfdHR5KHN0cnVj dCB0dHlfc3RydWN0ICogdHR5KTsKZXh0ZXJuIHZvaWQgc3RhcnRfdHR5KHN0cnVjdCB0dHlfc3Ry dWN0ICogdHR5KTsKZXh0ZXJuIGludCB0dHlfcmVnaXN0ZXJfbGRpc2MoaW50IGRpc2MsIHN0cnVj dCB0dHlfbGRpc2MgKm5ld19sZGlzYyk7CmV4dGVybiBpbnQgdHR5X3JlZ2lzdGVyX2RyaXZlcihz dHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyKTsKZXh0ZXJuIGludCB0dHlfdW5yZWdpc3Rlcl9kcml2 ZXIoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlcik7CmV4dGVybiB2b2lkIHR0eV9yZWdpc3Rlcl9k ZXZmcyAoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgdW5zaWduZWQgaW50IGZsYWdzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1pbm9yKTsKZXh0ZXJuIHZvaWQg dHR5X3VucmVnaXN0ZXJfZGV2ZnMgKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIHVuc2lnbmVk IG1pbm9yKTsKc3RydWN0IGRldmZzX2VudHJ5OwpleHRlcm4gdm9pZCB0dHlfcmVnaXN0ZXJfZGV2 ZnNfbmFtZSAoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgbWlub3IsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2ZnNfZW50cnkgKmRpciwg Y29uc3QgY2hhciAqbmFtZSk7CmV4dGVybiB2b2lkIHR0eV91bnJlZ2lzdGVyX2RldmZzX25hbWUg KHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIG1pbm9yLCBzdHJ1Y3QgZGV2ZnNfZW50cnkgKmRpciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CmV4dGVy biBpbnQgdHR5X3JlYWRfcmF3X2RhdGEoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQg Y2hhciAqYnVmcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmbGVuKTsKZXh0 ZXJuIHZvaWQgdHR5X3dyaXRlX21lc3NhZ2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciAq bXNnKTsKCmV4dGVybiBpbnQgaXNfb3JwaGFuZWRfcGdycChpbnQgcGdycCk7CmV4dGVybiBpbnQg aXNfaWdub3JlZChpbnQgc2lnKTsKZXh0ZXJuIGludCB0dHlfc2lnbmFsKGludCBzaWcsIHN0cnVj dCB0dHlfc3RydWN0ICp0dHkpOwpleHRlcm4gdm9pZCB0dHlfaGFuZ3VwKHN0cnVjdCB0dHlfc3Ry dWN0ICogdHR5KTsKZXh0ZXJuIHZvaWQgdHR5X3ZoYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0 dHkpOwpleHRlcm4gdm9pZCB0dHlfdW5oYW5ndXAoc3RydWN0IGZpbGUgKmZpbHApOwpleHRlcm4g aW50IHR0eV9odW5nX3VwX3Aoc3RydWN0IGZpbGUgKiBmaWxwKTsKZXh0ZXJuIHZvaWQgZG9fU0FL KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwpleHRlcm4gdm9pZCBkaXNhc3NvY2lhdGVfY3R0eShp bnQgcHJpdik7CmV4dGVybiB2b2lkIHR0eV9mbGlwX2J1ZmZlcl9wdXNoKHN0cnVjdCB0dHlfc3Ry dWN0ICp0dHkpOwpleHRlcm4gaW50IHR0eV9nZXRfYmF1ZF9yYXRlKHN0cnVjdCB0dHlfc3RydWN0 ICp0dHkpOwoKCmV4dGVybiBzdHJ1Y3QgdHR5X2xkaXNjIHR0eV9sZGlzY19OX1RUWTsKCgpleHRl cm4gaW50IG5fdHR5X2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAq IGZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQg bG9uZyBhcmcpOwoKCgpleHRlcm4gdm9pZCBzZXJpYWxfY29uc29sZV9pbml0KHZvaWQpOwoKCgpl eHRlcm4gaW50IHBjeGVfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAq ZmlscCk7CgoKCmV4dGVybiB2b2lkIGNvbnNvbGVfcHJpbnQoY29uc3QgY2hhciAqKTsKCgoKZXh0 ZXJuIGludCB2dF9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZp bGUsCiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBh cmcpOwoKZXh0ZXJuIHZvaWQgc3RkaW9fY29uc29sZV9pbml0KHZvaWQpOwojIDI0ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvc2VtLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvaW5jbHVkZS9saW51eC9pcGMuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9saW51eC9pcGMuaCIgMgoKCgoKc3RydWN0IGlwY19wZXJtCnsKICAgICAgICBfX2tlcm5l bF9rZXlfdCBrZXk7CiAgICAgICAgX19rZXJuZWxfdWlkX3QgdWlkOwogICAgICAgIF9fa2VybmVs X2dpZF90IGdpZDsKICAgICAgICBfX2tlcm5lbF91aWRfdCBjdWlkOwogICAgICAgIF9fa2VybmVs X2dpZF90IGNnaWQ7CiAgICAgICAgX19rZXJuZWxfbW9kZV90IG1vZGU7CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgc2VxOwp9OwoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNt L2lwY2J1Zi5oIiAxCiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9pcGNi dWYuaCIKc3RydWN0IGlwYzY0X3Blcm0KewogICAgICAgIF9fa2VybmVsX2tleV90IGtleTsKICAg ICAgICBfX2tlcm5lbF91aWQzMl90IHVpZDsKICAgICAgICBfX2tlcm5lbF9naWQzMl90IGdpZDsK ICAgICAgICBfX2tlcm5lbF91aWQzMl90IGN1aWQ7CiAgICAgICAgX19rZXJuZWxfZ2lkMzJfdCBj Z2lkOwogICAgICAgIF9fa2VybmVsX21vZGVfdCBtb2RlOwogICAgICAgIHVuc2lnbmVkIHNob3J0 IF9fcGFkMTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzZXE7CiAgICAgICAgdW5zaWduZWQgc2hv cnQgX19wYWQyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOwogICAgICAgIHVuc2ln bmVkIGxvbmcgX191bnVzZWQyOwp9OwojIDIyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVk ZS9saW51eC9pcGMuaCIgMgojIDU3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51 eC9pcGMuaCIKc3RydWN0IGtlcm5faXBjX3Blcm0KewogICAgICAgIGtleV90IGtleTsKICAgICAg ICB1aWRfdCB1aWQ7CiAgICAgICAgZ2lkX3QgZ2lkOwogICAgICAgIHVpZF90IGN1aWQ7CiAgICAg ICAgZ2lkX3QgY2dpZDsKICAgICAgICBtb2RlX3QgbW9kZTsKICAgICAgICB1bnNpZ25lZCBsb25n IHNlcTsKfTsKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zZW0uaCIg MgojIDIzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zZW0uaCIKc3RydWN0 IHNlbWlkX2RzIHsKICAgICAgICBzdHJ1Y3QgaXBjX3Blcm0gc2VtX3Blcm07CiAgICAgICAgX19r ZXJuZWxfdGltZV90IHNlbV9vdGltZTsKICAgICAgICBfX2tlcm5lbF90aW1lX3Qgc2VtX2N0aW1l OwogICAgICAgIHN0cnVjdCBzZW0gKnNlbV9iYXNlOwogICAgICAgIHN0cnVjdCBzZW1fcXVldWUg KnNlbV9wZW5kaW5nOwogICAgICAgIHN0cnVjdCBzZW1fcXVldWUgKipzZW1fcGVuZGluZ19sYXN0 OwogICAgICAgIHN0cnVjdCBzZW1fdW5kbyAqdW5kbzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBz ZW1fbnNlbXM7Cn07CgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vc2Vt YnVmLmgiIDEKIyAxNCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3NlbWJ1Zi5o IgpzdHJ1Y3Qgc2VtaWQ2NF9kcyB7CiAgICAgICAgc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07 CiAgICAgICAgX19rZXJuZWxfdGltZV90IHNlbV9vdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25n IF9fdW51c2VkMTsKICAgICAgICBfX2tlcm5lbF90aW1lX3Qgc2VtX2N0aW1lOwogICAgICAgIHVu c2lnbmVkIGxvbmcgX191bnVzZWQyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VtX25zZW1zOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgX191bnVzZWQzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgX191 bnVzZWQ0Owp9OwojIDM2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zZW0u aCIgMgoKCnN0cnVjdCBzZW1idWYgewogICAgICAgIHVuc2lnbmVkIHNob3J0IHNlbV9udW07CiAg ICAgICAgc2hvcnQgc2VtX29wOwogICAgICAgIHNob3J0IHNlbV9mbGc7Cn07CgoKdW5pb24gc2Vt dW4gewogICAgICAgIGludCB2YWw7CiAgICAgICAgc3RydWN0IHNlbWlkX2RzICpidWY7CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgKmFycmF5OwogICAgICAgIHN0cnVjdCBzZW1pbmZvICpfX2J1ZjsK ICAgICAgICB2b2lkICpfX3BhZDsKfTsKCnN0cnVjdCBzZW1pbmZvIHsKICAgICAgICBpbnQgc2Vt bWFwOwogICAgICAgIGludCBzZW1tbmk7CiAgICAgICAgaW50IHNlbW1uczsKICAgICAgICBpbnQg c2VtbW51OwogICAgICAgIGludCBzZW1tc2w7CiAgICAgICAgaW50IHNlbW9wbTsKICAgICAgICBp bnQgc2VtdW1lOwogICAgICAgIGludCBzZW11c3o7CiAgICAgICAgaW50IHNlbXZteDsKICAgICAg ICBpbnQgc2VtYWVtOwp9OwojIDgyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51 eC9zZW0uaCIKc3RydWN0IHNlbSB7CiAgICAgICAgaW50IHNlbXZhbDsKICAgICAgICBpbnQgc2Vt cGlkOwp9OwoKCnN0cnVjdCBzZW1fYXJyYXkgewogICAgICAgIHN0cnVjdCBrZXJuX2lwY19wZXJt IHNlbV9wZXJtOwogICAgICAgIHRpbWVfdCBzZW1fb3RpbWU7CiAgICAgICAgdGltZV90IHNlbV9j dGltZTsKICAgICAgICBzdHJ1Y3Qgc2VtICpzZW1fYmFzZTsKICAgICAgICBzdHJ1Y3Qgc2VtX3F1 ZXVlICpzZW1fcGVuZGluZzsKICAgICAgICBzdHJ1Y3Qgc2VtX3F1ZXVlICoqc2VtX3BlbmRpbmdf bGFzdDsKICAgICAgICBzdHJ1Y3Qgc2VtX3VuZG8gKnVuZG87CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzZW1fbnNlbXM7Cn07CgoKc3RydWN0IHNlbV9xdWV1ZSB7CiAgICAgICAgc3RydWN0IHNlbV9x dWV1ZSAqIG5leHQ7CiAgICAgICAgc3RydWN0IHNlbV9xdWV1ZSAqKiBwcmV2OwogICAgICAgIHN0 cnVjdCB0YXNrX3N0cnVjdCogc2xlZXBlcjsKICAgICAgICBzdHJ1Y3Qgc2VtX3VuZG8gKiB1bmRv OwogICAgICAgIGludCBwaWQ7CiAgICAgICAgaW50IHN0YXR1czsKICAgICAgICBzdHJ1Y3Qgc2Vt X2FycmF5ICogc21hOwogICAgICAgIGludCBpZDsKICAgICAgICBzdHJ1Y3Qgc2VtYnVmICogc29w czsKICAgICAgICBpbnQgbnNvcHM7CiAgICAgICAgaW50IGFsdGVyOwp9OwoKCgoKc3RydWN0IHNl bV91bmRvIHsKICAgICAgICBzdHJ1Y3Qgc2VtX3VuZG8gKiBwcm9jX25leHQ7CiAgICAgICAgc3Ry dWN0IHNlbV91bmRvICogaWRfbmV4dDsKICAgICAgICBpbnQgc2VtaWQ7CiAgICAgICAgc2hvcnQg KiBzZW1hZGo7Cn07CgogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGxvbmcgc3lzX3NlbWdl dCAoa2V5X3Qga2V5LCBpbnQgbnNlbXMsIGludCBzZW1mbGcpOwogX19hdHRyaWJ1dGVfXygocmVn cGFybSgwKSkpIGxvbmcgc3lzX3NlbW9wIChpbnQgc2VtaWQsIHN0cnVjdCBzZW1idWYgKnNvcHMs IHVuc2lnbmVkIG5zb3BzKTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBsb25nIHN5c19z ZW1jdGwgKGludCBzZW1pZCwgaW50IHNlbW51bSwgaW50IGNtZCwgdW5pb24gc2VtdW4gYXJnKTsK IyAyNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIiAxCgoKCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3NpZ25hbC5oIiAxCgoKCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDUgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zaWduYWwuaCIgMgoKCnN0cnVjdCBzaWdpbmZvOwoj IDE3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vc2lnbmFsLmgiCnR5cGVkZWYg dW5zaWduZWQgbG9uZyBvbGRfc2lnc2V0X3Q7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgdW5z aWduZWQgbG9uZyBzaWdbKDY0IC8gMzIpXTsKfSBzaWdzZXRfdDsKIyAxMjkgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zaWduYWwuaCIKdHlwZWRlZiB2b2lkICgqX19zaWdoYW5k bGVyX3QpKGludCk7CgoKCgoKCnN0cnVjdCBvbGRfc2lnYWN0aW9uIHsKICAgICAgICBfX3NpZ2hh bmRsZXJfdCBzYV9oYW5kbGVyOwogICAgICAgIG9sZF9zaWdzZXRfdCBzYV9tYXNrOwogICAgICAg IHVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CiAgICAgICAgdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lk KTsKfTsKCnN0cnVjdCBzaWdhY3Rpb24gewogICAgICAgIF9fc2lnaGFuZGxlcl90IHNhX2hhbmRs ZXI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKICAgICAgICB2b2lkICgqc2FfcmVz dG9yZXIpKHZvaWQpOwogICAgICAgIHNpZ3NldF90IHNhX21hc2s7Cn07CgpzdHJ1Y3Qga19zaWdh Y3Rpb24gewogICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gc2E7Cn07CiMgMTcxICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9hc20vc2lnbmFsLmgiCnR5cGVkZWYgc3RydWN0IHNpZ2FsdHN0 YWNrIHsKICAgICAgICB2b2lkICpzc19zcDsKICAgICAgICBpbnQgc3NfZmxhZ3M7CiAgICAgICAg c2l6ZV90IHNzX3NpemU7Cn0gc3RhY2tfdDsKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9p bmNsdWRlL2FzbS9zaWdjb250ZXh0LmgiIDEKIyAxNzkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9p bmNsdWRlL2FzbS9zaWduYWwuaCIgMgoKCgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNpZ2FkZHNl dChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKewogICAgICAgIF9fYXNtX18oImJ0c2wgJTEsJTAi IDogIj1tIigqc2V0KSA6ICJJciIoX3NpZyAtIDEpIDogImNjIik7Cn0KCnN0YXRpYyBfX2lubGlu ZV9fIHZvaWQgc2lnZGVsc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQp7CiAgICAgICAgX19h c21fXygiYnRybCAlMSwlMCIgOiAiPW0iKCpzZXQpIDogIklyIihfc2lnIC0gMSkgOiAiY2MiKTsK fQoKc3RhdGljIF9faW5saW5lX18gaW50IF9fY29uc3Rfc2lnaXNtZW1iZXIoc2lnc2V0X3QgKnNl dCwgaW50IF9zaWcpCnsKICAgICAgICB1bnNpZ25lZCBsb25nIHNpZyA9IF9zaWcgLSAxOwogICAg ICAgIHJldHVybiAxICYgKHNldC0+c2lnW3NpZyAvIDMyXSA+PiAoc2lnICUgMzIpKTsKfQoKc3Rh dGljIF9faW5saW5lX18gaW50IF9fZ2VuX3NpZ2lzbWVtYmVyKHNpZ3NldF90ICpzZXQsIGludCBf c2lnKQp7CiAgICAgICAgaW50IHJldDsKICAgICAgICBfX2FzbV9fKCJidGwgJTIsJTFcblx0c2Ji bCAlMCwlMCIKICAgICAgICAgICAgICAgIDogIj1yIihyZXQpIDogIm0iKCpzZXQpLCAiSXIiKF9z aWctMSkgOiAiY2MiKTsKICAgICAgICByZXR1cm4gcmV0Owp9CiMgMjEzICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9hc20vc2lnbmFsLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBzaWdm aW5kaW53b3JkKHVuc2lnbmVkIGxvbmcgd29yZCkKewogICAgICAgIF9fYXNtX18oImJzZmwgJTEs JTAiIDogIj1yIih3b3JkKSA6ICJybSIod29yZCkgOiAiY2MiKTsKICAgICAgICByZXR1cm4gd29y ZDsKfQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3NpZ2luZm8uaCIgMQoKCgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyA1ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vc2lnaW5mby5oIiAyCgoKCnR5cGVkZWYg dW5pb24gc2lndmFsIHsKICAgICAgICBpbnQgc2l2YWxfaW50OwogICAgICAgIHZvaWQgKnNpdmFs X3B0cjsKfSBzaWd2YWxfdDsKCgoKCnR5cGVkZWYgc3RydWN0IHNpZ2luZm8gewogICAgICAgIGlu dCBzaV9zaWdubzsKICAgICAgICBpbnQgc2lfZXJybm87CiAgICAgICAgaW50IHNpX2NvZGU7Cgog ICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIGludCBfcGFkWygoMTI4L3NpemVvZihpbnQp KSAtIDMpXTsKCgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAg ICAgcGlkX3QgX3BpZDsKICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgX3VpZDsKICAgICAg ICAgICAgICAgIH0gX2tpbGw7CgoKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfdGltZXIxOwogICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgX3RpbWVyMjsKICAgICAgICAgICAgICAgIH0gX3RpbWVyOwoKCiAgICAg ICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBwaWRfdCBfcGlkOwog ICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBfdWlkOwogICAgICAgICAgICAgICAgICAgICAg ICBzaWd2YWxfdCBfc2lndmFsOwogICAgICAgICAgICAgICAgfSBfcnQ7CgoKICAgICAgICAgICAg ICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBpZF90IF9waWQ7CiAgICAgICAg ICAgICAgICAgICAgICAgIHVpZF90IF91aWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBf c3RhdHVzOwogICAgICAgICAgICAgICAgICAgICAgICBjbG9ja190IF91dGltZTsKICAgICAgICAg ICAgICAgICAgICAgICAgY2xvY2tfdCBfc3RpbWU7CiAgICAgICAgICAgICAgICB9IF9zaWdjaGxk OwoKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICpfYWRkcjsKICAgICAgICAgICAgICAgIH0gX3NpZ2ZhdWx0OwoKCiAgICAgICAgICAgICAgICBz dHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBpbnQgX2JhbmQ7CiAgICAgICAgICAgICAg ICAgICAgICAgIGludCBfZmQ7CiAgICAgICAgICAgICAgICB9IF9zaWdwb2xsOwogICAgICAgIH0g X3NpZmllbGRzOwp9IHNpZ2luZm9fdDsKIyAxOTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNs dWRlL2FzbS9zaWdpbmZvLmgiCnR5cGVkZWYgc3RydWN0IHNpZ2V2ZW50IHsKICAgICAgICBzaWd2 YWxfdCBzaWdldl92YWx1ZTsKICAgICAgICBpbnQgc2lnZXZfc2lnbm87CiAgICAgICAgaW50IHNp Z2V2X25vdGlmeTsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBpbnQgX3BhZFsoKDY0 L3NpemVvZihpbnQpKSAtIDMpXTsKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICgqX2Z1bmN0aW9uKShzaWd2YWxfdCk7CiAgICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgKl9hdHRyaWJ1dGU7CiAgICAgICAgICAgICAgICB9IF9zaWdldl90aHJl YWQ7CiAgICAgICAgfSBfc2lnZXZfdW47Cn0gc2lnZXZlbnRfdDsKCgoKCgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIiAxCiMgMjE4ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9hc20vc2lnaW5mby5oIiAyCgpzdGF0aWMgaW5saW5lIHZvaWQg Y29weV9zaWdpbmZvKHNpZ2luZm9fdCAqdG8sIHNpZ2luZm9fdCAqZnJvbSkKewogICAgICAgIGlm IChmcm9tLT5zaV9jb2RlIDwgMCkKICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRf cChzaXplb2Yoc2lnaW5mb190KSkgPyBfX2NvbnN0YW50X21lbWNweSgodG8pLChmcm9tKSwoc2l6 ZW9mKHNpZ2luZm9fdCkpKSA6IF9fbWVtY3B5KCh0byksKGZyb20pLChzaXplb2Yoc2lnaW5mb190 KSkpKTsKICAgICAgICBlbHNlCgogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9w KDMqc2l6ZW9mKGludCkgKyBzaXplb2YoZnJvbS0+X3NpZmllbGRzLl9zaWdjaGxkKSkgPyBfX2Nv bnN0YW50X21lbWNweSgodG8pLChmcm9tKSwoMypzaXplb2YoaW50KSArIHNpemVvZihmcm9tLT5f c2lmaWVsZHMuX3NpZ2NobGQpKSkgOiBfX21lbWNweSgodG8pLChmcm9tKSwoMypzaXplb2YoaW50 KSArIHNpemVvZihmcm9tLT5fc2lmaWVsZHMuX3NpZ2NobGQpKSkpOwp9CgpleHRlcm4gaW50IGNv cHlfc2lnaW5mb190b191c2VyKHNpZ2luZm9fdCAqdG8sIHNpZ2luZm9fdCAqZnJvbSk7CiMgNiAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc2lnbmFsLmgiIDIKCgoKCgoKc3Ry dWN0IHNpZ3F1ZXVlIHsKICAgICAgICBzdHJ1Y3Qgc2lncXVldWUgKm5leHQ7CiAgICAgICAgc2ln aW5mb190IGluZm87Cn07CgpzdHJ1Y3Qgc2lncGVuZGluZyB7CiAgICAgICAgc3RydWN0IHNpZ3F1 ZXVlICpoZWFkLCAqKnRhaWw7CiAgICAgICAgc2lnc2V0X3Qgc2lnbmFsOwp9OwojIDY4ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zaWduYWwuaCIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zdHJpbmcuaCIgMQojIDY5ICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zaWduYWwuaCIgMgojIDEwOCAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvc2lnbmFsLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBzaWdvcnNl dHMoc2lnc2V0X3QgKnIsIGNvbnN0IHNpZ3NldF90ICphLCBjb25zdCBzaWdzZXRfdCAqYikgeyB1 bnNpZ25lZCBsb25nIGEwLCBhMSwgYTIsIGEzLCBiMCwgYjEsIGIyLCBiMzsgdW5zaWduZWQgbG9u ZyBpOyBmb3IgKGkgPSAwOyBpIDwgKDY0IC8gMzIpLzQ7ICsraSkgeyBhMCA9IGEtPnNpZ1s0Kmkr MF07IGExID0gYS0+c2lnWzQqaSsxXTsgYTIgPSBhLT5zaWdbNCppKzJdOyBhMyA9IGEtPnNpZ1s0 KmkrM107IGIwID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFdOyBiMiA9IGItPnNp Z1s0KmkrMl07IGIzID0gYi0+c2lnWzQqaSszXTsgci0+c2lnWzQqaSswXSA9ICgoYTApIHwgKGIw KSk7IHItPnNpZ1s0KmkrMV0gPSAoKGExKSB8IChiMSkpOyByLT5zaWdbNCppKzJdID0gKChhMikg fCAoYjIpKTsgci0+c2lnWzQqaSszXSA9ICgoYTMpIHwgKGIzKSk7IH0gc3dpdGNoICgoNjQgLyAz MikgJSA0KSB7IGNhc2UgMzogYTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07 IGEyID0gYS0+c2lnWzQqaSsyXTsgYjAgPSBiLT5zaWdbNCppKzBdOyBiMSA9IGItPnNpZ1s0Kmkr MV07IGIyID0gYi0+c2lnWzQqaSsyXTsgci0+c2lnWzQqaSswXSA9ICgoYTApIHwgKGIwKSk7IHIt PnNpZ1s0KmkrMV0gPSAoKGExKSB8IChiMSkpOyByLT5zaWdbNCppKzJdID0gKChhMikgfCAoYjIp KTsgYnJlYWs7IGNhc2UgMjogYTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07 IGIwID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFdOyByLT5zaWdbNCppKzBdID0g KChhMCkgfCAoYjApKTsgci0+c2lnWzQqaSsxXSA9ICgoYTEpIHwgKGIxKSk7IGJyZWFrOyBjYXNl IDE6IGEwID0gYS0+c2lnWzQqaSswXTsgYjAgPSBiLT5zaWdbNCppKzBdOyByLT5zaWdbNCppKzBd ID0gKChhMCkgfCAoYjApKTsgYnJlYWs7IH0gfQoKCnN0YXRpYyBpbmxpbmUgdm9pZCBzaWdhbmRz ZXRzKHNpZ3NldF90ICpyLCBjb25zdCBzaWdzZXRfdCAqYSwgY29uc3Qgc2lnc2V0X3QgKmIpIHsg dW5zaWduZWQgbG9uZyBhMCwgYTEsIGEyLCBhMywgYjAsIGIxLCBiMiwgYjM7IHVuc2lnbmVkIGxv bmcgaTsgZm9yIChpID0gMDsgaSA8ICg2NCAvIDMyKS80OyArK2kpIHsgYTAgPSBhLT5zaWdbNCpp KzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07IGEyID0gYS0+c2lnWzQqaSsyXTsgYTMgPSBhLT5zaWdb NCppKzNdOyBiMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgYjIgPSBiLT5z aWdbNCppKzJdOyBiMyA9IGItPnNpZ1s0KmkrM107IHItPnNpZ1s0KmkrMF0gPSAoKGEwKSAmIChi MCkpOyByLT5zaWdbNCppKzFdID0gKChhMSkgJiAoYjEpKTsgci0+c2lnWzQqaSsyXSA9ICgoYTIp ICYgKGIyKSk7IHItPnNpZ1s0KmkrM10gPSAoKGEzKSAmIChiMykpOyB9IHN3aXRjaCAoKDY0IC8g MzIpICUgNCkgeyBjYXNlIDM6IGEwID0gYS0+c2lnWzQqaSswXTsgYTEgPSBhLT5zaWdbNCppKzFd OyBhMiA9IGEtPnNpZ1s0KmkrMl07IGIwID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCpp KzFdOyBiMiA9IGItPnNpZ1s0KmkrMl07IHItPnNpZ1s0KmkrMF0gPSAoKGEwKSAmIChiMCkpOyBy LT5zaWdbNCppKzFdID0gKChhMSkgJiAoYjEpKTsgci0+c2lnWzQqaSsyXSA9ICgoYTIpICYgKGIy KSk7IGJyZWFrOyBjYXNlIDI6IGEwID0gYS0+c2lnWzQqaSswXTsgYTEgPSBhLT5zaWdbNCppKzFd OyBiMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgci0+c2lnWzQqaSswXSA9 ICgoYTApICYgKGIwKSk7IHItPnNpZ1s0KmkrMV0gPSAoKGExKSAmIChiMSkpOyBicmVhazsgY2Fz ZSAxOiBhMCA9IGEtPnNpZ1s0KmkrMF07IGIwID0gYi0+c2lnWzQqaSswXTsgci0+c2lnWzQqaSsw XSA9ICgoYTApICYgKGIwKSk7IGJyZWFrOyB9IH0KCgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnbmFu ZHNldHMoc2lnc2V0X3QgKnIsIGNvbnN0IHNpZ3NldF90ICphLCBjb25zdCBzaWdzZXRfdCAqYikg eyB1bnNpZ25lZCBsb25nIGEwLCBhMSwgYTIsIGEzLCBiMCwgYjEsIGIyLCBiMzsgdW5zaWduZWQg bG9uZyBpOyBmb3IgKGkgPSAwOyBpIDwgKDY0IC8gMzIpLzQ7ICsraSkgeyBhMCA9IGEtPnNpZ1s0 KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsgYTIgPSBhLT5zaWdbNCppKzJdOyBhMyA9IGEtPnNp Z1s0KmkrM107IGIwID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFdOyBiMiA9IGIt PnNpZ1s0KmkrMl07IGIzID0gYi0+c2lnWzQqaSszXTsgci0+c2lnWzQqaSswXSA9ICgoYTApICYg fihiMCkpOyByLT5zaWdbNCppKzFdID0gKChhMSkgJiB+KGIxKSk7IHItPnNpZ1s0KmkrMl0gPSAo KGEyKSAmIH4oYjIpKTsgci0+c2lnWzQqaSszXSA9ICgoYTMpICYgfihiMykpOyB9IHN3aXRjaCAo KDY0IC8gMzIpICUgNCkgeyBjYXNlIDM6IGEwID0gYS0+c2lnWzQqaSswXTsgYTEgPSBhLT5zaWdb NCppKzFdOyBhMiA9IGEtPnNpZ1s0KmkrMl07IGIwID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5z aWdbNCppKzFdOyBiMiA9IGItPnNpZ1s0KmkrMl07IHItPnNpZ1s0KmkrMF0gPSAoKGEwKSAmIH4o YjApKTsgci0+c2lnWzQqaSsxXSA9ICgoYTEpICYgfihiMSkpOyByLT5zaWdbNCppKzJdID0gKChh MikgJiB+KGIyKSk7IGJyZWFrOyBjYXNlIDI6IGEwID0gYS0+c2lnWzQqaSswXTsgYTEgPSBhLT5z aWdbNCppKzFdOyBiMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+c2lnWzQqaSsxXTsgci0+c2ln WzQqaSswXSA9ICgoYTApICYgfihiMCkpOyByLT5zaWdbNCppKzFdID0gKChhMSkgJiB+KGIxKSk7 IGJyZWFrOyBjYXNlIDE6IGEwID0gYS0+c2lnWzQqaSswXTsgYjAgPSBiLT5zaWdbNCppKzBdOyBy LT5zaWdbNCppKzBdID0gKChhMCkgJiB+KGIwKSk7IGJyZWFrOyB9IH0KIyAxNDAgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIgpzdGF0aWMgaW5saW5lIHZvaWQg c2lnbm90c2V0KHNpZ3NldF90ICpzZXQpIHsgdW5zaWduZWQgbG9uZyBpOyBmb3IgKGkgPSAwOyBp IDwgKDY0IC8gMzIpLzQ7ICsraSkgeyBzZXQtPnNpZ1s0KmkrMF0gPSAofihzZXQtPnNpZ1s0Kmkr MF0pKTsgc2V0LT5zaWdbNCppKzFdID0gKH4oc2V0LT5zaWdbNCppKzFdKSk7IHNldC0+c2lnWzQq aSsyXSA9ICh+KHNldC0+c2lnWzQqaSsyXSkpOyBzZXQtPnNpZ1s0KmkrM10gPSAofihzZXQtPnNp Z1s0KmkrM10pKTsgfSBzd2l0Y2ggKCg2NCAvIDMyKSAlIDQpIHsgY2FzZSAzOiBzZXQtPnNpZ1s0 KmkrMl0gPSAofihzZXQtPnNpZ1s0KmkrMl0pKTsgY2FzZSAyOiBzZXQtPnNpZ1s0KmkrMV0gPSAo fihzZXQtPnNpZ1s0KmkrMV0pKTsgY2FzZSAxOiBzZXQtPnNpZ1s0KmkrMF0gPSAofihzZXQtPnNp Z1s0KmkrMF0pKTsgfSB9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnZW1wdHlzZXQoc2lnc2V0 X3QgKnNldCkKewogICAgICAgIHN3aXRjaCAoKDY0IC8gMzIpKSB7CiAgICAgICAgZGVmYXVsdDoK ICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgwKSA/IChfX2J1aWx0aW5fY29u c3RhbnRfcCgoc2l6ZW9mKHNpZ3NldF90KSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1z ZXQoKChzZXQpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKHNpemVvZihz aWdzZXRfdCkpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoc2V0KSksKCgweDAxMDEwMTAxVUwq KHVuc2lnbmVkIGNoYXIpKDApKSksKChzaXplb2Yoc2lnc2V0X3QpKSkpKSA6IChfX2J1aWx0aW5f Y29uc3RhbnRfcCgoc2l6ZW9mKHNpZ3NldF90KSkpID8gX19tZW1zZXRfZ2VuZXJpYygoKChzZXQp KSksKCgoMCkpKSwoKChzaXplb2Yoc2lnc2V0X3QpKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKChz ZXQpKSwoKDApKSwoKHNpemVvZihzaWdzZXRfdCkpKSkpKTsKICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgIGNhc2UgMjogc2V0LT5zaWdbMV0gPSAwOwogICAgICAgIGNhc2UgMTogc2V0LT5z aWdbMF0gPSAwOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQp9CgpzdGF0aWMgaW5s aW5lIHZvaWQgc2lnZmlsbHNldChzaWdzZXRfdCAqc2V0KQp7CiAgICAgICAgc3dpdGNoICgoNjQg LyAzMikpIHsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25z dGFudF9wKC0xKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZW9mKHNpZ3NldF90KSkpID8g X19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKChzZXQpKSwoKDB4MDEwMTAxMDFVTCoodW5z aWduZWQgY2hhcikoLTEpKSksKChzaXplb2Yoc2lnc2V0X3QpKSkpIDogX19jb25zdGFudF9jX21l bXNldCgoKHNldCkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgtMSkpKSwoKHNpemVv ZihzaWdzZXRfdCkpKSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2Yoc2lnc2V0X3Qp KSkgPyBfX21lbXNldF9nZW5lcmljKCgoKHNldCkpKSwoKCgtMSkpKSwoKChzaXplb2Yoc2lnc2V0 X3QpKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKChzZXQpKSwoKC0xKSksKChzaXplb2Yoc2lnc2V0 X3QpKSkpKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6IHNldC0+c2ln WzFdID0gLTE7CiAgICAgICAgY2FzZSAxOiBzZXQtPnNpZ1swXSA9IC0xOwogICAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgfQp9CgpleHRlcm4gY2hhciAqIHJlbmRlcl9zaWdzZXRfdChzaWdz ZXRfdCAqc2V0LCBjaGFyICpidWZmZXIpOwoKCgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnYWRkc2V0 bWFzayhzaWdzZXRfdCAqc2V0LCB1bnNpZ25lZCBsb25nIG1hc2spCnsKICAgICAgICBzZXQtPnNp Z1swXSB8PSBtYXNrOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnZGVsc2V0bWFzayhzaWdzZXRf dCAqc2V0LCB1bnNpZ25lZCBsb25nIG1hc2spCnsKICAgICAgICBzZXQtPnNpZ1swXSAmPSB+bWFz azsKfQoKc3RhdGljIGlubGluZSBpbnQgc2lndGVzdHNldG1hc2soc2lnc2V0X3QgKnNldCwgdW5z aWduZWQgbG9uZyBtYXNrKQp7CiAgICAgICAgcmV0dXJuIChzZXQtPnNpZ1swXSAmIG1hc2spICE9 IDA7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBzaWdpbml0c2V0KHNpZ3NldF90ICpzZXQsIHVuc2ln bmVkIGxvbmcgbWFzaykKewogICAgICAgIHNldC0+c2lnWzBdID0gbWFzazsKICAgICAgICBzd2l0 Y2ggKCg2NCAvIDMyKSkgewogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAoX19idWls dGluX2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihsb25nKSoo KDY0IC8gMzIpLTEpKSkgPyBfX2NvbnN0YW50X2NfYW5kX2NvdW50X21lbXNldCgoKCZzZXQtPnNp Z1sxXSkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6ZW9mKGxvbmcp KigoNjQgLyAzMiktMSkpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoJnNldC0+c2lnWzFdKSks KCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChzaXplb2YobG9uZykqKCg2NCAv IDMyKS0xKSkpKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZihsb25nKSooKDY0IC8g MzIpLTEpKSkgPyBfX21lbXNldF9nZW5lcmljKCgoKCZzZXQtPnNpZ1sxXSkpKSwoKCgwKSkpLCgo KHNpemVvZihsb25nKSooKDY0IC8gMzIpLTEpKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKCgmc2V0 LT5zaWdbMV0pKSwoKDApKSwoKHNpemVvZihsb25nKSooKDY0IC8gMzIpLTEpKSkpKSk7CiAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6IHNldC0+c2lnWzFdID0gMDsKICAgICAg ICBjYXNlIDE6IDsKICAgICAgICB9Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBzaWdpbml0c2V0aW52 KHNpZ3NldF90ICpzZXQsIHVuc2lnbmVkIGxvbmcgbWFzaykKewogICAgICAgIHNldC0+c2lnWzBd ID0gfm1hc2s7CiAgICAgICAgc3dpdGNoICgoNjQgLyAzMikpIHsKICAgICAgICBkZWZhdWx0Ogog ICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKC0xKSA/IChfX2J1aWx0aW5fY29u c3RhbnRfcCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkpKSA/IF9fY29uc3RhbnRfY19hbmRf Y291bnRfbWVtc2V0KCgoJnNldC0+c2lnWzFdKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNo YXIpKC0xKSkpLCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkpKSkgOiBfX2NvbnN0YW50X2Nf bWVtc2V0KCgoJnNldC0+c2lnWzFdKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKC0x KSkpLCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkpKSkpIDogKF9fYnVpbHRpbl9jb25zdGFu dF9wKChzaXplb2YobG9uZykqKCg2NCAvIDMyKS0xKSkpID8gX19tZW1zZXRfZ2VuZXJpYygoKCgm c2V0LT5zaWdbMV0pKSksKCgoLTEpKSksKCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkpKSkp IDogX19tZW1zZXRfZ2VuZXJpYygoKCZzZXQtPnNpZ1sxXSkpLCgoLTEpKSwoKHNpemVvZihsb25n KSooKDY0IC8gMzIpLTEpKSkpKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNl IDI6IHNldC0+c2lnWzFdID0gLTE7CiAgICAgICAgY2FzZSAxOiA7CiAgICAgICAgfQp9CgoKCnN0 YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NpZ3BlbmRpbmcoc3RydWN0IHNpZ3BlbmRpbmcgKnNpZykK ewogICAgICAgIHNpZ2VtcHR5c2V0KCZzaWctPnNpZ25hbCk7CiAgICAgICAgc2lnLT5oZWFkID0g KCh2b2lkICopMCk7CiAgICAgICAgc2lnLT50YWlsID0gJnNpZy0+aGVhZDsKfQoKZXh0ZXJuIGxv bmcgZG9fc2lncGVuZGluZyh2b2lkICosIHVuc2lnbmVkIGxvbmcpOwojIDI2ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvc2VjdXJlYml0cy5oIiAxCgoKCgoKZXh0ZXJuIHVuc2lnbmVk IHNlY3VyZWJpdHM7CiMgMjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3Nj aGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9mc19zdHJ1 Y3QuaCIgMQoKCgoKc3RydWN0IGZzX3N0cnVjdCB7CiAgICAgICAgYXRvbWljX3QgY291bnQ7CiAg ICAgICAgcndsb2NrX3QgbG9jazsKICAgICAgICBpbnQgdW1hc2s7CiAgICAgICAgc3RydWN0IGRl bnRyeSAqIHJvb3QsICogcHdkLCAqIGFsdHJvb3Q7CiAgICAgICAgc3RydWN0IHZmc21vdW50ICog cm9vdG1udCwgKiBwd2RtbnQsICogYWx0cm9vdG1udDsKfTsKIyAyMCAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmgiCmV4dGVybiB2b2lkIGV4aXRfZnMoc3Ry dWN0IHRhc2tfc3RydWN0ICopOwpleHRlcm4gdm9pZCBzZXRfZnNfYWx0cm9vdCh2b2lkKTsKCnN0 cnVjdCBmc19zdHJ1Y3QgKmNvcHlfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKm9sZCk7CnZv aWQgcHV0X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0ICpmcyk7CiMgMjggIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKCnN0cnVjdCBleGVjX2RvbWFpbjsK IyA1NyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc2NoZWQuaCIKZXh0ZXJu IHVuc2lnbmVkIGxvbmcgYXZlbnJ1bltdOwojIDc0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9saW51eC9zY2hlZC5oIgpleHRlcm4gaW50IG5yX3J1bm5pbmcsIG5yX3RocmVhZHM7CmV4 dGVybiBpbnQgbGFzdF9waWQ7CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xp bnV4L2ZzLmgiIDEKIyA3OCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc2No ZWQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3RpbWUuaCIg MQojIDc5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvcGFyYW0uaCIgMQoKCgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9wYXJhbS5oIiAxCiMgNSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvcGFyYW0uaCIgMgojIDgwICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvcmVzb3VyY2UuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3RpbWUuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2xpbnV4L3Jlc291cmNlLmgiIDIKIyAyMSAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvbGludXgvcmVzb3VyY2UuaCIKc3RydWN0IHJ1c2FnZSB7CiAgICAgICAgc3RydWN0 IHRpbWV2YWwgcnVfdXRpbWU7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7CiAgICAg ICAgbG9uZyBydV9tYXhyc3M7CiAgICAgICAgbG9uZyBydV9peHJzczsKICAgICAgICBsb25nIHJ1 X2lkcnNzOwogICAgICAgIGxvbmcgcnVfaXNyc3M7CiAgICAgICAgbG9uZyBydV9taW5mbHQ7CiAg ICAgICAgbG9uZyBydV9tYWpmbHQ7CiAgICAgICAgbG9uZyBydV9uc3dhcDsKICAgICAgICBsb25n IHJ1X2luYmxvY2s7CiAgICAgICAgbG9uZyBydV9vdWJsb2NrOwogICAgICAgIGxvbmcgcnVfbXNn c25kOwogICAgICAgIGxvbmcgcnVfbXNncmN2OwogICAgICAgIGxvbmcgcnVfbnNpZ25hbHM7CiAg ICAgICAgbG9uZyBydV9udmNzdzsKICAgICAgICBsb25nIHJ1X25pdmNzdzsKfTsKCnN0cnVjdCBy bGltaXQgewogICAgICAgIHVuc2lnbmVkIGxvbmcgcmxpbV9jdXI7CiAgICAgICAgdW5zaWduZWQg bG9uZyBybGltX21heDsKfTsKIyA1NiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvcmVzb3VyY2UuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vcmVz b3VyY2UuaCIgMQojIDU3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9yZXNv dXJjZS5oIiAyCiMgODEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NjaGVk LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC90aW1lci5oIiAx CiMgODIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIiAxCiMgODQg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxMjUgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCnN0cnVjdCBzY2hlZF9w YXJhbSB7CiAgICAgICAgaW50IHNjaGVkX3ByaW9yaXR5Owp9OwoKc3RydWN0IGNvbXBsZXRpb247 CgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCIg MQojIDEzNCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgoK CgoKCgoKZXh0ZXJuIHJ3bG9ja190IHRhc2tsaXN0X2xvY2s7CmV4dGVybiBzcGlubG9ja190IHJ1 bnF1ZXVlX2xvY2s7CmV4dGVybiBzcGlubG9ja190IG1tbGlzdF9sb2NrOwoKZXh0ZXJuIHZvaWQg c2NoZWRfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgaW5pdF9pZGxlKHZvaWQpOwpleHRlcm4gdm9p ZCBzaG93X3N0YXRlKHZvaWQpOwpleHRlcm4gdm9pZCBjcHVfaW5pdCAodm9pZCk7CmV4dGVybiB2 b2lkIHRyYXBfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgdXBkYXRlX3Byb2Nlc3NfdGltZXMoaW50 IHVzZXIpOwpleHRlcm4gdm9pZCB1cGRhdGVfb25lX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0 ICpwLCB1bnNpZ25lZCBsb25nIHVzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBsb25nIHN5c3RlbSwgaW50IGNwdSk7CgoKZXh0ZXJuIHNpZ25lZCBsb25nIHNjaGVk dWxlX3RpbWVvdXQoc2lnbmVkIGxvbmcgdGltZW91dCkgX19hdHRyaWJ1dGVfXygocmVncGFybSgz KSkpOwogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIHZvaWQgc2NoZWR1bGUodm9pZCk7Cgog X19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIHZvaWQgcHJlZW1wdF9zY2hlZHVsZSh2b2lkKTsK CgpleHRlcm4gaW50IHNjaGVkdWxlX3Rhc2soc3RydWN0IHRxX3N0cnVjdCAqdGFzayk7CmV4dGVy biB2b2lkIGZsdXNoX3NjaGVkdWxlZF90YXNrcyh2b2lkKTsKZXh0ZXJuIGludCBzdGFydF9jb250 ZXh0X3RocmVhZCh2b2lkKTsKZXh0ZXJuIGludCBjdXJyZW50X2lzX2tldmVudGQodm9pZCk7CiMg MTc1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zY2hlZC5oIgpzdHJ1Y3Qg ZmlsZXNfc3RydWN0IHsKICAgICAgICBhdG9taWNfdCBjb3VudDsKICAgICAgICByd2xvY2tfdCBm aWxlX2xvY2s7CiAgICAgICAgaW50IG1heF9mZHM7CiAgICAgICAgaW50IG1heF9mZHNldDsKICAg ICAgICBpbnQgbmV4dF9mZDsKICAgICAgICBzdHJ1Y3QgZmlsZSAqKiBmZDsKICAgICAgICBmZF9z ZXQgKmNsb3NlX29uX2V4ZWM7CiAgICAgICAgZmRfc2V0ICpvcGVuX2ZkczsKICAgICAgICBmZF9z ZXQgY2xvc2Vfb25fZXhlY19pbml0OwogICAgICAgIGZkX3NldCBvcGVuX2Zkc19pbml0OwogICAg ICAgIHN0cnVjdCBmaWxlICogZmRfYXJyYXlbMzJdOwp9OwojIDIwNyAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvc2NoZWQuaCIKZXh0ZXJuIGludCBtYXhfbWFwX2NvdW50OwoK CgoKc3RydWN0IG1tX3N0cnVjdCB7CiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogbW1h cDsKICAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiBtbWFwX2F2bDsKICAgICAgICBzdHJ1 Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiBtbWFwX2NhY2hlOwogICAgICAgIHBnZF90ICogcGdkOwogICAg ICAgIGF0b21pY190IG1tX3VzZXJzOwogICAgICAgIGF0b21pY190IG1tX2NvdW50OwogICAgICAg IGludCBtYXBfY291bnQ7CiAgICAgICAgc3RydWN0IHJ3X3NlbWFwaG9yZSBtbWFwX3NlbTsKICAg ICAgICBzcGlubG9ja190IHBhZ2VfdGFibGVfbG9jazsKCiAgICAgICAgc3RydWN0IGxpc3RfaGVh ZCBtbWxpc3Q7CgoKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfY29kZSwgZW5kX2NvZGUs IHN0YXJ0X2RhdGEsIGVuZF9kYXRhOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfYnJrLCBi cmssIHN0YXJ0X3N0YWNrOwogICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnX3N0YXJ0LCBhcmdfZW5k LCBlbnZfc3RhcnQsIGVudl9lbmQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyByc3MsIHRvdGFsX3Zt LCBsb2NrZWRfdm07CiAgICAgICAgdW5zaWduZWQgbG9uZyBkZWZfZmxhZ3M7CiAgICAgICAgdW5z aWduZWQgbG9uZyBjcHVfdm1fbWFzazsKICAgICAgICB1bnNpZ25lZCBsb25nIHN3YXBfYWRkcmVz czsKCiAgICAgICAgdW5zaWduZWQgZHVtcGFibGU6MTsKCgogICAgICAgIG1tX2NvbnRleHRfdCBj b250ZXh0Owp9OwoKZXh0ZXJuIGludCBtbWxpc3RfbnI7CiMgMjU4ICIvdXNyL3NyYy9saW51eC0y LjQuMTMvaW5jbHVkZS9saW51eC9zY2hlZC5oIgpzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCB7CiAgICAg ICAgYXRvbWljX3QgY291bnQ7CiAgICAgICAgc3RydWN0IGtfc2lnYWN0aW9uIGFjdGlvbls2NF07 CiAgICAgICAgc3BpbmxvY2tfdCBzaWdsb2NrOwp9OwojIDI3NCAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2luY2x1ZGUvbGludXgvc2NoZWQuaCIKc3RydWN0IHVzZXJfc3RydWN0IHsKICAgICAgICBh dG9taWNfdCBfX2NvdW50OwogICAgICAgIGF0b21pY190IHByb2Nlc3NlczsKICAgICAgICBhdG9t aWNfdCBmaWxlczsKCgogICAgICAgIHN0cnVjdCB1c2VyX3N0cnVjdCAqbmV4dCwgKipwcHJldjsK ICAgICAgICB1aWRfdCB1aWQ7Cn07CgoKCgoKCmV4dGVybiBzdHJ1Y3QgdXNlcl9zdHJ1Y3Qgcm9v dF91c2VyOwoKCnN0cnVjdCB0YXNrX3N0cnVjdCB7CgoKCiAgICAgICAgdm9sYXRpbGUgbG9uZyBz dGF0ZTsKIyAzMDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NjaGVkLmgi CiAgICAgICAgaW50IHByZWVtcHRfY291bnQ7CiAgICAgICAgaW50IHNpZ3BlbmRpbmc7CiAgICAg ICAgbW1fc2VnbWVudF90IGFkZHJfbGltaXQ7CgoKCiAgICAgICAgc3RydWN0IGV4ZWNfZG9tYWlu ICpleGVjX2RvbWFpbjsKICAgICAgICB2b2xhdGlsZSBsb25nIG5lZWRfcmVzY2hlZDsKICAgICAg ICB1bnNpZ25lZCBsb25nIHB0cmFjZTsKCiAgICAgICAgaW50IGxvY2tfZGVwdGg7CgoKCgoKCiAg ICAgICAgbG9uZyBjb3VudGVyOwogICAgICAgIGxvbmcgbmljZTsKICAgICAgICB1bnNpZ25lZCBs b25nIHBvbGljeTsKICAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICptbTsKICAgICAgICBpbnQgaGFz X2NwdSwgcHJvY2Vzc29yOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3B1c19hbGxvd2VkOwoKCgoK ICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHJ1bl9saXN0OwogICAgICAgIHVuc2lnbmVkIGxvbmcg c2xlZXBfdGltZTsKCiAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0X3Rhc2ssICpwcmV2 X3Rhc2s7CiAgICAgICAgc3RydWN0IG1tX3N0cnVjdCAqYWN0aXZlX21tOwogICAgICAgIHVuc2ln bmVkIGxvbmcgZmxhZ3M7CgoKICAgICAgICBzdHJ1Y3QgbGludXhfYmluZm10ICpiaW5mbXQ7CiAg ICAgICAgaW50IGV4aXRfY29kZSwgZXhpdF9zaWduYWw7CiAgICAgICAgaW50IHBkZWF0aF9zaWdu YWw7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgcGVyc29uYWxpdHk7CiAgICAgICAgaW50IGRpZF9l eGVjOjE7CiAgICAgICAgcGlkX3QgcGlkOwogICAgICAgIHBpZF90IHBncnA7CiAgICAgICAgcGlk X3QgdHR5X29sZF9wZ3JwOwogICAgICAgIHBpZF90IHNlc3Npb247CiAgICAgICAgcGlkX3QgdGdp ZDsKCiAgICAgICAgaW50IGxlYWRlcjsKCgoKCgogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAq cF9vcHB0ciwgKnBfcHB0ciwgKnBfY3B0ciwgKnBfeXNwdHIsICpwX29zcHRyOwogICAgICAgIHN0 cnVjdCBsaXN0X2hlYWQgdGhyZWFkX2dyb3VwOwoKCiAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0 ICpwaWRoYXNoX25leHQ7CiAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICoqcGlkaGFzaF9wcHJl djsKCiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9jaGxkZXhpdDsKICAgICAgICBzdHJ1 Y3QgY29tcGxldGlvbiAqdmZvcmtfZG9uZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHJ0X3ByaW9y aXR5OwogICAgICAgIHVuc2lnbmVkIGxvbmcgaXRfcmVhbF92YWx1ZSwgaXRfcHJvZl92YWx1ZSwg aXRfdmlydF92YWx1ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGl0X3JlYWxfaW5jciwgaXRfcHJv Zl9pbmNyLCBpdF92aXJ0X2luY3I7CiAgICAgICAgc3RydWN0IHRpbWVyX2xpc3QgcmVhbF90aW1l cjsKICAgICAgICBzdHJ1Y3QgdG1zIHRpbWVzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRf dGltZTsKICAgICAgICBsb25nIHBlcl9jcHVfdXRpbWVbMV0sIHBlcl9jcHVfc3RpbWVbMV07Cgog ICAgICAgIHVuc2lnbmVkIGxvbmcgbWluX2ZsdCwgbWFqX2ZsdCwgbnN3YXAsIGNtaW5fZmx0LCBj bWFqX2ZsdCwgY25zd2FwOwogICAgICAgIGludCBzd2FwcGFibGU6MTsKCiAgICAgICAgdWlkX3Qg dWlkLGV1aWQsc3VpZCxmc3VpZDsKICAgICAgICBnaWRfdCBnaWQsZWdpZCxzZ2lkLGZzZ2lkOwog ICAgICAgIGludCBuZ3JvdXBzOwogICAgICAgIGdpZF90IGdyb3Vwc1szMl07CiAgICAgICAga2Vy bmVsX2NhcF90IGNhcF9lZmZlY3RpdmUsIGNhcF9pbmhlcml0YWJsZSwgY2FwX3Blcm1pdHRlZDsK ICAgICAgICBpbnQga2VlcF9jYXBhYmlsaXRpZXM6MTsKICAgICAgICBzdHJ1Y3QgdXNlcl9zdHJ1 Y3QgKnVzZXI7CgogICAgICAgIHN0cnVjdCBybGltaXQgcmxpbVsxMV07CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgdXNlZF9tYXRoOwogICAgICAgIGNoYXIgY29tbVsxNl07CgogICAgICAgIGludCBs aW5rX2NvdW50LCB0b3RhbF9saW5rX2NvdW50OwogICAgICAgIHN0cnVjdCB0dHlfc3RydWN0ICp0 dHk7CiAgICAgICAgdW5zaWduZWQgaW50IGxvY2tzOwoKICAgICAgICBzdHJ1Y3Qgc2VtX3VuZG8g KnNlbXVuZG87CiAgICAgICAgc3RydWN0IHNlbV9xdWV1ZSAqc2Vtc2xlZXBpbmc7CgogICAgICAg IHN0cnVjdCB0aHJlYWRfc3RydWN0IHRocmVhZDsKCiAgICAgICAgc3RydWN0IGZzX3N0cnVjdCAq ZnM7CgogICAgICAgIHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzOwoKICAgICAgICBzcGlubG9j a190IHNpZ21hc2tfbG9jazsKICAgICAgICBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOwoKICAg ICAgICBzaWdzZXRfdCBibG9ja2VkOwogICAgICAgIHN0cnVjdCBzaWdwZW5kaW5nIHBlbmRpbmc7 CgogICAgICAgIHVuc2lnbmVkIGxvbmcgc2FzX3NzX3NwOwogICAgICAgIHNpemVfdCBzYXNfc3Nf c2l6ZTsKICAgICAgICBpbnQgKCpub3RpZmllcikodm9pZCAqcHJpdik7CiAgICAgICAgdm9pZCAq bm90aWZpZXJfZGF0YTsKICAgICAgICBzaWdzZXRfdCAqbm90aWZpZXJfbWFzazsKCgogICAgICAg IHUzMiBwYXJlbnRfZXhlY19pZDsKICAgICAgICB1MzIgc2VsZl9leGVjX2lkOwoKICAgICAgICBz cGlubG9ja190IGFsbG9jX2xvY2s7CgoKICAgICAgICB2b2lkICpqb3VybmFsX2luZm87Cn07CiMg NDY2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zY2hlZC5oIgpleHRlcm4g c3RydWN0IGV4ZWNfZG9tYWluIGRlZmF1bHRfZXhlY19kb21haW47CiMgNTE5ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zY2hlZC5oIgp1bmlvbiB0YXNrX3VuaW9uIHsKICAg ICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgdGFzazsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0YWNr WyhzaXplb2Yoc3RydWN0IHRhc2tfc3RydWN0KSArIHNpemVvZihzdHJ1Y3QgdGFza19zdHJ1Y3Rf aW5mbykpL3NpemVvZihsb25nKV07Cn07CgpleHRlcm4gdW5pb24gdGFza191bmlvbiBpbml0X3Rh c2tfdW5pb247CgpleHRlcm4gc3RydWN0IG1tX3N0cnVjdCBpbml0X21tOwpleHRlcm4gc3RydWN0 IHRhc2tfc3RydWN0ICppbml0X3Rhc2tzWzFdOwoKCgpleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0 ICpwaWRoYXNoWyg0MDk2ID4+IDIpXTsKCgoKc3RhdGljIGlubGluZSB2b2lkIGhhc2hfcGlkKHN0 cnVjdCB0YXNrX3N0cnVjdCAqcCkKewogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqKmh0YWJs ZSA9ICZwaWRoYXNoWygoKChwLT5waWQpID4+IDgpIF4gKHAtPnBpZCkpICYgKCg0MDk2ID4+IDIp IC0gMSkpXTsKCiAgICAgICAgaWYoKHAtPnBpZGhhc2hfbmV4dCA9ICpodGFibGUpICE9ICgodm9p ZCAqKTApKQogICAgICAgICAgICAgICAgKCpodGFibGUpLT5waWRoYXNoX3BwcmV2ID0gJnAtPnBp ZGhhc2hfbmV4dDsKICAgICAgICAqaHRhYmxlID0gcDsKICAgICAgICBwLT5waWRoYXNoX3BwcmV2 ID0gaHRhYmxlOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdW5oYXNoX3BpZChzdHJ1Y3QgdGFza19z dHJ1Y3QgKnApCnsKICAgICAgICBpZihwLT5waWRoYXNoX25leHQpCiAgICAgICAgICAgICAgICBw LT5waWRoYXNoX25leHQtPnBpZGhhc2hfcHByZXYgPSBwLT5waWRoYXNoX3BwcmV2OwogICAgICAg ICpwLT5waWRoYXNoX3BwcmV2ID0gcC0+cGlkaGFzaF9uZXh0Owp9CgpzdGF0aWMgaW5saW5lIHN0 cnVjdCB0YXNrX3N0cnVjdCAqZmluZF90YXNrX2J5X3BpZChpbnQgcGlkKQp7CiAgICAgICAgc3Ry dWN0IHRhc2tfc3RydWN0ICpwLCAqKmh0YWJsZSA9ICZwaWRoYXNoWygoKChwaWQpID4+IDgpIF4g KHBpZCkpICYgKCg0MDk2ID4+IDIpIC0gMSkpXTsKCiAgICAgICAgZm9yKHAgPSAqaHRhYmxlOyBw ICYmIHAtPnBpZCAhPSBwaWQ7IHAgPSBwLT5waWRoYXNoX25leHQpCiAgICAgICAgICAgICAgICA7 CgogICAgICAgIHJldHVybiBwOwp9CgoKZXh0ZXJuIHN0cnVjdCB1c2VyX3N0cnVjdCAqIGFsbG9j X3VpZCh1aWRfdCk7CmV4dGVybiB2b2lkIGZyZWVfdWlkKHN0cnVjdCB1c2VyX3N0cnVjdCAqKTsK CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2N1cnJlbnQuaCIgMQoKCgpz dHJ1Y3QgdGFza19zdHJ1Y3Q7CgpzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGdl dF9jdXJyZW50KHZvaWQpCnsKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKICAgICAg ICBfX2FzbV9fKCJtb3ZsICUlY3IyLCUwOyI6ICI9ciIgKHRzaykpOwogICAgICAgIHJldHVybiB0 c2s7Cn0KCgpzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGhhcmRfZ2V0X2N1cnJl bnQodm9pZCkKewogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqKnB0c2s7CiAgICAgICAgX19h c21fXygiYW5kbCAlJWVzcCwlMDsgIjoiPXIiIChwdHNrKSA6ICIwIiAofjgxOTFVTCkpOwogICAg ICAgIHJldHVybiAqcHRzazsKfQoKc3RhdGljIGlubGluZSB2b2lkIHNldF9jdXJyZW50KHN0cnVj dCB0YXNrX3N0cnVjdCAqdHNrKQp7CiAgICAgICAgX19hc21fXygibW92bCAlMCwlJWNyMjsiCiAg ICAgICAgICAgICAgICAgICAgICAgIDoKICAgICAgICAgICAgICAgICAgICAgICAgOiJyIiAodHNr KSk7Cn0KIyA1NjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NjaGVkLmgi IDIKCmV4dGVybiB1bnNpZ25lZCBsb25nIHZvbGF0aWxlIGppZmZpZXM7CmV4dGVybiB1bnNpZ25l ZCBsb25nIGl0aW1lcl90aWNrczsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaXRpbWVyX25leHQ7CmV4 dGVybiBzdHJ1Y3QgdGltZXZhbCB4dGltZTsKZXh0ZXJuIHZvaWQgZG9fdGltZXIoc3RydWN0IHB0 X3JlZ3MgKik7CgpleHRlcm4gdW5zaWduZWQgaW50ICogcHJvZl9idWZmZXI7CmV4dGVybiB1bnNp Z25lZCBsb25nIHByb2ZfbGVuOwpleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9mX3NoaWZ0OwoKCgpl eHRlcm4gdm9pZCBfX3dha2VfdXAod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHVuc2lnbmVkIGludCBt b2RlLCBpbnQgbnIpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgX193 YWtlX3VwX3N5bmMod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHVuc2lnbmVkIGludCBtb2RlLCBpbnQg bnIpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgX191bndha2V1cF9w cm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsIGxvbmcgc3RhdGUpIF9fYXR0cmlidXRlX18o KHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgc2xlZXBfb24od2FpdF9xdWV1ZV9oZWFkX3QgKnEp IF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIGxvbmcgc2xlZXBfb25fdGltZW91 dCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgc2lnbmVkIGxvbmcgdGltZW91dCkgX19hdHRyaWJ1dGVf XygocmVncGFybSgzKSkpOwoKZXh0ZXJuIHZvaWQgaW50ZXJydXB0aWJsZV9zbGVlcF9vbih3YWl0 X3F1ZXVlX2hlYWRfdCAqcSkgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gbG9u ZyBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHNp Z25lZCBsb25nIHRpbWVvdXQpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKCmV4dGVybiBp bnQgd2FrZV91cF9wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHRzaykgX19hdHRyaWJ1dGVf XygocmVncGFybSgzKSkpOwojIDYwOCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvc2NoZWQuaCIKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBsb25nIHN5c193YWl0NChw aWRfdCBwaWQsdW5zaWduZWQgaW50ICogc3RhdF9hZGRyLCBpbnQgb3B0aW9ucywgc3RydWN0IHJ1 c2FnZSAqIHJ1KTsKCmV4dGVybiBpbnQgaW5fZ3JvdXBfcChnaWRfdCk7CmV4dGVybiBpbnQgaW5f ZWdyb3VwX3AoZ2lkX3QpOwoKZXh0ZXJuIHZvaWQgcHJvY19jYWNoZXNfaW5pdCh2b2lkKTsKZXh0 ZXJuIHZvaWQgZmx1c2hfc2lnbmFscyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CmV4dGVybiB2b2lk IGZsdXNoX3NpZ25hbF9oYW5kbGVycyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CmV4dGVybiBpbnQg ZGVxdWV1ZV9zaWduYWwoc2lnc2V0X3QgKiwgc2lnaW5mb190ICopOwpleHRlcm4gdm9pZCBibG9j a19hbGxfc2lnbmFscyhpbnQgKCpub3RpZmllcikodm9pZCAqcHJpdiksIHZvaWQgKnByaXYsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ3NldF90ICptYXNrKTsKZXh0ZXJuIHZvaWQg dW5ibG9ja19hbGxfc2lnbmFscyh2b2lkKTsKZXh0ZXJuIGludCBzZW5kX3NpZ19pbmZvKGludCwg c3RydWN0IHNpZ2luZm8gKiwgc3RydWN0IHRhc2tfc3RydWN0ICopOwpleHRlcm4gaW50IGZvcmNl X3NpZ19pbmZvKGludCwgc3RydWN0IHNpZ2luZm8gKiwgc3RydWN0IHRhc2tfc3RydWN0ICopOwpl eHRlcm4gaW50IGtpbGxfcGdfaW5mbyhpbnQsIHN0cnVjdCBzaWdpbmZvICosIHBpZF90KTsKZXh0 ZXJuIGludCBraWxsX3NsX2luZm8oaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCBwaWRfdCk7CmV4dGVy biBpbnQga2lsbF9wcm9jX2luZm8oaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCBwaWRfdCk7CmV4dGVy biB2b2lkIG5vdGlmeV9wYXJlbnQoc3RydWN0IHRhc2tfc3RydWN0ICosIGludCk7CmV4dGVybiB2 b2lkIGRvX25vdGlmeV9wYXJlbnQoc3RydWN0IHRhc2tfc3RydWN0ICosIGludCk7CmV4dGVybiB2 b2lkIGZvcmNlX3NpZyhpbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZXh0ZXJuIGludCBzZW5k X3NpZyhpbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBpbnQpOwpleHRlcm4gaW50IGtpbGxfcGco cGlkX3QsIGludCwgaW50KTsKZXh0ZXJuIGludCBraWxsX3NsKHBpZF90LCBpbnQsIGludCk7CmV4 dGVybiBpbnQga2lsbF9wcm9jKHBpZF90LCBpbnQsIGludCk7CmV4dGVybiBpbnQgZG9fc2lnYWN0 aW9uKGludCwgY29uc3Qgc3RydWN0IGtfc2lnYWN0aW9uICosIHN0cnVjdCBrX3NpZ2FjdGlvbiAq KTsKZXh0ZXJuIGludCBkb19zaWdhbHRzdGFjayhjb25zdCBzdGFja190ICosIHN0YWNrX3QgKiwg dW5zaWduZWQgbG9uZyk7CgpzdGF0aWMgaW5saW5lIGludCBzaWduYWxfcGVuZGluZyhzdHJ1Y3Qg dGFza19zdHJ1Y3QgKnApCnsKICAgICAgICByZXR1cm4gKHAtPnNpZ3BlbmRpbmcgIT0gMCk7Cn0K CgoKCgpzdGF0aWMgaW5saW5lIGludCBoYXNfcGVuZGluZ19zaWduYWxzKHNpZ3NldF90ICpzaWdu YWwsIHNpZ3NldF90ICpibG9ja2VkKQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyByZWFkeTsKICAg ICAgICBsb25nIGk7CgogICAgICAgIHN3aXRjaCAoKDY0IC8gMzIpKSB7CiAgICAgICAgZGVmYXVs dDoKICAgICAgICAgICAgICAgIGZvciAoaSA9ICg2NCAvIDMyKSwgcmVhZHkgPSAwOyAtLWkgPj0g MCA7KQogICAgICAgICAgICAgICAgICAgICAgICByZWFkeSB8PSBzaWduYWwtPnNpZ1tpXSAmfiBi bG9ja2VkLT5zaWdbaV07CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSA0OiBy ZWFkeSA9IHNpZ25hbC0+c2lnWzNdICZ+IGJsb2NrZWQtPnNpZ1szXTsKICAgICAgICAgICAgICAg IHJlYWR5IHw9IHNpZ25hbC0+c2lnWzJdICZ+IGJsb2NrZWQtPnNpZ1syXTsKICAgICAgICAgICAg ICAgIHJlYWR5IHw9IHNpZ25hbC0+c2lnWzFdICZ+IGJsb2NrZWQtPnNpZ1sxXTsKICAgICAgICAg ICAgICAgIHJlYWR5IHw9IHNpZ25hbC0+c2lnWzBdICZ+IGJsb2NrZWQtPnNpZ1swXTsKICAgICAg ICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDI6IHJlYWR5ID0gc2lnbmFsLT5zaWdbMV0g Jn4gYmxvY2tlZC0+c2lnWzFdOwogICAgICAgICAgICAgICAgcmVhZHkgfD0gc2lnbmFsLT5zaWdb MF0gJn4gYmxvY2tlZC0+c2lnWzBdOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNh c2UgMTogcmVhZHkgPSBzaWduYWwtPnNpZ1swXSAmfiBibG9ja2VkLT5zaWdbMF07CiAgICAgICAg fQogICAgICAgIHJldHVybiByZWFkeSAhPSAwOwp9CgoKCgoKc3RhdGljIGlubGluZSB2b2lkIHJl Y2FsY19zaWdwZW5kaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKewogICAgICAgIHQtPnNpZ3Bl bmRpbmcgPSBoYXNfcGVuZGluZ19zaWduYWxzKCZ0LT5wZW5kaW5nLnNpZ25hbCwgJnQtPmJsb2Nr ZWQpOwp9CgoKCnN0YXRpYyBpbmxpbmUgaW50IG9uX3NpZ19zdGFjayh1bnNpZ25lZCBsb25nIHNw KQp7CiAgICAgICAgcmV0dXJuIChzcCAtIGdldF9jdXJyZW50KCktPnNhc19zc19zcCA8IGdldF9j dXJyZW50KCktPnNhc19zc19zaXplKTsKfQoKc3RhdGljIGlubGluZSBpbnQgc2FzX3NzX2ZsYWdz KHVuc2lnbmVkIGxvbmcgc3ApCnsKICAgICAgICByZXR1cm4gKGdldF9jdXJyZW50KCktPnNhc19z c19zaXplID09IDAgPyAyCiAgICAgICAgICAgICAgICA6IG9uX3NpZ19zdGFjayhzcCkgPyAxIDog MCk7Cn0KCmV4dGVybiBpbnQgcmVxdWVzdF9pcnEodW5zaWduZWQgaW50LAogICAgICAgICAgICAg ICAgICAgICAgIHZvaWQgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiks CiAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZywgY29uc3QgY2hhciAqLCB2b2lk ICopOwpleHRlcm4gdm9pZCBmcmVlX2lycSh1bnNpZ25lZCBpbnQsIHZvaWQgKik7CiMgNzExICIv dXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zY2hlZC5oIgpzdGF0aWMgaW5saW5l IGludCBzdXNlcih2b2lkKQp7CiAgICAgICAgaWYgKCEoICgxIDw8ICgwICsxKSkgJiAweDAwMDAw MDAwID8gKDEgPDwgKDApKSAmIDB4MDAwMDAwMDAgOiAoMSA8PCAoMCkpICYgc2VjdXJlYml0cyAp ICYmIGdldF9jdXJyZW50KCktPmV1aWQgPT0gMCkgewogICAgICAgICAgICAgICAgZ2V0X2N1cnJl bnQoKS0+ZmxhZ3MgfD0gMHgwMDAwMDEwMDsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAg ICAgIH0KICAgICAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQgZnN1c2VyKHZvaWQp CnsKICAgICAgICBpZiAoISggKDEgPDwgKDAgKzEpKSAmIDB4MDAwMDAwMDAgPyAoMSA8PCAoMCkp ICYgMHgwMDAwMDAwMCA6ICgxIDw8ICgwKSkgJiBzZWN1cmViaXRzICkgJiYgZ2V0X2N1cnJlbnQo KS0+ZnN1aWQgPT0gMCkgewogICAgICAgICAgICAgICAgZ2V0X2N1cnJlbnQoKS0+ZmxhZ3MgfD0g MHgwMDAwMDEwMDsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICBy ZXR1cm4gMDsKfQoKCgoKCgoKc3RhdGljIGlubGluZSBpbnQgY2FwYWJsZShpbnQgY2FwKQp7Cgog ICAgICAgIGlmICgoKGdldF9jdXJyZW50KCktPmNhcF9lZmZlY3RpdmUpICYgKDEgPDwgKGNhcCkp KSkKCgoKICAgICAgICB7CiAgICAgICAgICAgICAgICBnZXRfY3VycmVudCgpLT5mbGFncyB8PSAw eDAwMDAwMTAwOwogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAgIHJl dHVybiAwOwp9CgoKCgpleHRlcm4gc3RydWN0IG1tX3N0cnVjdCAqIG1tX2FsbG9jKHZvaWQpOwoK ZXh0ZXJuIHN0cnVjdCBtbV9zdHJ1Y3QgKiBzdGFydF9sYXp5X3RsYih2b2lkKTsKZXh0ZXJuIHZv aWQgZW5kX2xhenlfdGxiKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKCgpleHRlcm4gaW5saW5lIHZv aWQgX19tbWRyb3Aoc3RydWN0IG1tX3N0cnVjdCAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMp KSk7CnN0YXRpYyBpbmxpbmUgdm9pZCBtbWRyb3Aoc3RydWN0IG1tX3N0cnVjdCAqIG1tKQp7CiAg ICAgICAgaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1tLT5tbV9jb3VudCkpCiAgICAgICAgICAg ICAgICBfX21tZHJvcChtbSk7Cn0KCgpleHRlcm4gdm9pZCBtbXB1dChzdHJ1Y3QgbW1fc3RydWN0 ICopOwoKZXh0ZXJuIHZvaWQgbW1fcmVsZWFzZSh2b2lkKTsKCgoKCmV4dGVybiBzdHJ1Y3QgZmls ZSAqKiBhbGxvY19mZF9hcnJheShpbnQpOwpleHRlcm4gaW50IGV4cGFuZF9mZF9hcnJheShzdHJ1 Y3QgZmlsZXNfc3RydWN0ICosIGludCBucik7CmV4dGVybiB2b2lkIGZyZWVfZmRfYXJyYXkoc3Ry dWN0IGZpbGUgKiosIGludCk7CgpleHRlcm4gZmRfc2V0ICphbGxvY19mZHNldChpbnQpOwpleHRl cm4gaW50IGV4cGFuZF9mZHNldChzdHJ1Y3QgZmlsZXNfc3RydWN0ICosIGludCBucik7CmV4dGVy biB2b2lkIGZyZWVfZmRzZXQoZmRfc2V0ICosIGludCk7CgpleHRlcm4gaW50IGNvcHlfdGhyZWFk KGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgc3RydWN0 IHRhc2tfc3RydWN0ICosIHN0cnVjdCBwdF9yZWdzICopOwpleHRlcm4gdm9pZCBmbHVzaF90aHJl YWQodm9pZCk7CmV4dGVybiB2b2lkIGV4aXRfdGhyZWFkKHZvaWQpOwoKZXh0ZXJuIHZvaWQgZXhp dF9tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CmV4dGVybiB2b2lkIGV4aXRfZmlsZXMoc3RydWN0 IHRhc2tfc3RydWN0ICopOwpleHRlcm4gdm9pZCBleGl0X3NpZ2hhbmQoc3RydWN0IHRhc2tfc3Ry dWN0ICopOwoKZXh0ZXJuIHZvaWQgcmVwYXJlbnRfdG9faW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQg ZGFlbW9uaXplKHZvaWQpOwoKZXh0ZXJuIGludCBkb19leGVjdmUoY2hhciAqLCBjaGFyICoqLCBj aGFyICoqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKZXh0ZXJuIGludCBkb19mb3JrKHVuc2lnbmVkIGxv bmcsIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBwdF9yZWdzICosIHVuc2lnbmVkIGxvbmcpOwoKZXh0 ZXJuIHZvaWQgYWRkX3dhaXRfcXVldWUod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHdhaXRfcXVldWVf dCAqIHdhaXQpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgYWRkX3dh aXRfcXVldWVfZXhjbHVzaXZlKHdhaXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKiB3 YWl0KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIHJlbW92ZV93YWl0 X3F1ZXVlKHdhaXRfcXVldWVfaGVhZF90ICpxLCB3YWl0X3F1ZXVlX3QgKiB3YWl0KSBfX2F0dHJp YnV0ZV9fKChyZWdwYXJtKDMpKSk7CiMgODc5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVk ZS9saW51eC9zY2hlZC5oIgpzdGF0aWMgaW5saW5lIHZvaWQgZGVsX2Zyb21fcnVucXVldWUoc3Ry dWN0IHRhc2tfc3RydWN0ICogcCkKewogICAgICAgIG5yX3J1bm5pbmctLTsKICAgICAgICBwLT5z bGVlcF90aW1lID0gamlmZmllczsKICAgICAgICBsaXN0X2RlbCgmcC0+cnVuX2xpc3QpOwogICAg ICAgIHAtPnJ1bl9saXN0Lm5leHQgPSAoKHZvaWQgKikwKTsKfQoKc3RhdGljIGlubGluZSBpbnQg dGFza19vbl9ydW5xdWV1ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCnsKICAgICAgICByZXR1cm4g KHAtPnJ1bl9saXN0Lm5leHQgIT0gKCh2b2lkICopMCkpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQg dW5oYXNoX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICpwKQp7CiAgICAgICAgaWYgKHRhc2tf b25fcnVucXVldWUocCkpIF9fYXNtX18gX192b2xhdGlsZV9fKCIuYnl0ZSAweDBmLDB4MGIiKTsK ICAgICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJjbGkiOiA6IDoibWVtb3J5Iik7ICh7 ZG8geyArK2dldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192b2xhdGlsZV9f KCIiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOyAodm9pZCkoJnRhc2tsaXN0X2xvY2spO30p OyB9IHdoaWxlICgwKTsKICAgICAgICBucl90aHJlYWRzLS07CiAgICAgICAgdW5oYXNoX3BpZChw KTsKICAgICAgICBkbyB7IChwKS0+bmV4dF90YXNrLT5wcmV2X3Rhc2sgPSAocCktPnByZXZfdGFz azsgKHApLT5wcmV2X3Rhc2stPm5leHRfdGFzayA9IChwKS0+bmV4dF90YXNrOyBpZiAoKHApLT5w X29zcHRyKSAocCktPnBfb3NwdHItPnBfeXNwdHIgPSAocCktPnBfeXNwdHI7IGlmICgocCktPnBf eXNwdHIpIChwKS0+cF95c3B0ci0+cF9vc3B0ciA9IChwKS0+cF9vc3B0cjsgZWxzZSAocCktPnBf cHB0ci0+cF9jcHRyID0gKHApLT5wX29zcHRyOyB9IHdoaWxlICgwKTsKICAgICAgICBsaXN0X2Rl bCgmcC0+dGhyZWFkX2dyb3VwKTsKICAgICAgICBkbyB7ICh7ZG8geyB9IHdoaWxlKDApOyBkbyB7 IC0tZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudDsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6 IDogOiJtZW1vcnkiKTsgaWYgKChnZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50ID09IDApICYm IGdldF9jdXJyZW50KCktPm5lZWRfcmVzY2hlZCkgcHJlZW1wdF9zY2hlZHVsZSgpOyB9IHdoaWxl ICgwKTt9KTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aSI6IDogOiJtZW1vcnkiKTsgfSB3aGls ZSAoMCk7Cn0KCgpzdGF0aWMgaW5saW5lIHZvaWQgdGFza19sb2NrKHN0cnVjdCB0YXNrX3N0cnVj dCAqcCkKewogICAgICAgIGRvIHsgZG8geyArK2dldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7 IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOyAodm9p ZCkoJnAtPmFsbG9jX2xvY2spOyB9IHdoaWxlKDApOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdGFz a191bmxvY2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQp7CiAgICAgICAgZG8geyBkbyB7IH0gd2hp bGUoMCk7IGRvIHsgLS1nZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50OyBfX2FzbV9fIF9fdm9s YXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyBpZiAoKGdldF9jdXJyZW50KCktPnByZWVtcHRfY291 bnQgPT0gMCkgJiYgZ2V0X2N1cnJlbnQoKS0+bmVlZF9yZXNjaGVkKSBwcmVlbXB0X3NjaGVkdWxl KCk7IH0gd2hpbGUgKDApOyB9IHdoaWxlICgwKTsKfQoKCnN0YXRpYyBpbmxpbmUgY2hhciAqIGRf cGF0aChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCB2ZnNtb3VudCAqdmZzbW50LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKewogICAg ICAgIGNoYXIgKnJlczsKICAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKnJvb3RtbnQ7CiAgICAgICAg c3RydWN0IGRlbnRyeSAqcm9vdDsKICAgICAgICAoe2RvIHsgKytnZXRfY3VycmVudCgpLT5wcmVl bXB0X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxl ICgwKTsgKHZvaWQpKCZnZXRfY3VycmVudCgpLT5mcy0+bG9jayk7fSk7CiAgICAgICAgcm9vdG1u dCA9IG1udGdldChnZXRfY3VycmVudCgpLT5mcy0+cm9vdG1udCk7CiAgICAgICAgcm9vdCA9IGRn ZXQoZ2V0X2N1cnJlbnQoKS0+ZnMtPnJvb3QpOwogICAgICAgICh7ZG8geyB9IHdoaWxlKDApOyBk byB7IC0tZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudDsgX19hc21fXyBfX3ZvbGF0aWxlX18o IiI6IDogOiJtZW1vcnkiKTsgaWYgKChnZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50ID09IDAp ICYmIGdldF9jdXJyZW50KCktPm5lZWRfcmVzY2hlZCkgcHJlZW1wdF9zY2hlZHVsZSgpOyB9IHdo aWxlICgwKTt9KTsKICAgICAgICBkbyB7IGRvIHsgKytnZXRfY3VycmVudCgpLT5wcmVlbXB0X2Nv dW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlICgwKTsg KHZvaWQpKCZkY2FjaGVfbG9jayk7IH0gd2hpbGUoMCk7CiAgICAgICAgcmVzID0gX19kX3BhdGgo ZGVudHJ5LCB2ZnNtbnQsIHJvb3QsIHJvb3RtbnQsIGJ1ZiwgYnVmbGVuKTsKICAgICAgICBkbyB7 IGRvIHsgfSB3aGlsZSgwKTsgZG8geyAtLWdldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9f YXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IGlmICgoZ2V0X2N1cnJlbnQoKS0+ cHJlZW1wdF9jb3VudCA9PSAwKSAmJiBnZXRfY3VycmVudCgpLT5uZWVkX3Jlc2NoZWQpIHByZWVt cHRfc2NoZWR1bGUoKTsgfSB3aGlsZSAoMCk7IH0gd2hpbGUgKDApOwogICAgICAgIGRwdXQocm9v dCk7CiAgICAgICAgbW50cHV0KHJvb3RtbnQpOwogICAgICAgIHJldHVybiByZXM7Cn0KCgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oIiAxCiMgMjc1ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9kY2FjaGUuaCIKc3RhdGljIF9faW5s aW5lX18gdm9pZCBkX2Ryb3Aoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSkKewogICAgICAgIGRvIHsg ZG8geyArK2dldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192b2xhdGlsZV9f KCIiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOyAodm9pZCkoJmRjYWNoZV9sb2NrKTsgfSB3 aGlsZSgwKTsKICAgICAgICBsaXN0X2RlbCgmZGVudHJ5LT5kX2hhc2gpOwogICAgICAgIGRvIHsg KCZkZW50cnktPmRfaGFzaCktPm5leHQgPSAoJmRlbnRyeS0+ZF9oYXNoKTsgKCZkZW50cnktPmRf aGFzaCktPnByZXYgPSAoJmRlbnRyeS0+ZF9oYXNoKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgZG8g eyBkbyB7IH0gd2hpbGUoMCk7IGRvIHsgLS1nZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50OyBf X2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyBpZiAoKGdldF9jdXJyZW50KCkt PnByZWVtcHRfY291bnQgPT0gMCkgJiYgZ2V0X2N1cnJlbnQoKS0+bmVlZF9yZXNjaGVkKSBwcmVl bXB0X3NjaGVkdWxlKCk7IH0gd2hpbGUgKDApOyB9IHdoaWxlICgwKTsKfQojIDkzNSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3RxdWV1ZS5oIiAxCiMgMTE2ICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9saW51eC90cXVldWUuaCIKc3RhdGljIGlubGluZSBpbnQgcXVldWVf dGFzayhzdHJ1Y3QgdHFfc3RydWN0ICpiaF9wb2ludGVyLCB0YXNrX3F1ZXVlICpiaF9saXN0KQp7 CiAgICAgICAgaW50IHJldCA9IDA7CiAgICAgICAgaWYgKCF0ZXN0X2FuZF9zZXRfYml0KDAsJmJo X3BvaW50ZXItPnN5bmMpKSB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwog ICAgICAgICAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAl MCA7IGNsaSI6Ij1nIiAoZmxhZ3MpOiA6Im1lbW9yeSIpOyBkbyB7IGRvIHsgKytnZXRfY3VycmVu dCgpLT5wcmVlbXB0X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIp OyB9IHdoaWxlICgwKTsgKHZvaWQpKCZ0cXVldWVfbG9jayk7IH0gd2hpbGUoMCk7IH0gd2hpbGUg KDApOwogICAgICAgICAgICAgICAgbGlzdF9hZGRfdGFpbCgmYmhfcG9pbnRlci0+bGlzdCwgYmhf bGlzdCk7CiAgICAgICAgICAgICAgICBkbyB7IGRvIHsgZG8geyB9IHdoaWxlKDApOyBkbyB7IC0t Z2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudDsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDog OiJtZW1vcnkiKTsgaWYgKChnZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50ID09IDApICYmIGdl dF9jdXJyZW50KCktPm5lZWRfcmVzY2hlZCkgcHJlZW1wdF9zY2hlZHVsZSgpOyB9IHdoaWxlICgw KTsgfSB3aGlsZSAoMCk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjog OiJnIiAoZmxhZ3MpOiJtZW1vcnkiLCAiY2MiKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAg ICByZXQgPSAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0Owp9CiMgOTM2ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmgiIDEKIyAzNyAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvZnNfc3RydWN0LmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBz ZXRfZnNfcm9vdChzdHJ1Y3QgZnNfc3RydWN0ICpmcywKICAgICAgICBzdHJ1Y3QgdmZzbW91bnQg Km1udCwKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCnsKICAgICAgICBzdHJ1Y3QgZGVu dHJ5ICpvbGRfcm9vdDsKICAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKm9sZF9yb290bW50OwogICAg ICAgICh7ZG8geyArK2dldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192b2xh dGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOyAodm9pZCkoJmZzLT5sb2NrKTt9 KTsKICAgICAgICBvbGRfcm9vdCA9IGZzLT5yb290OwogICAgICAgIG9sZF9yb290bW50ID0gZnMt PnJvb3RtbnQ7CiAgICAgICAgZnMtPnJvb3RtbnQgPSBtbnRnZXQobW50KTsKICAgICAgICBmcy0+ cm9vdCA9IGRnZXQoZGVudHJ5KTsKICAgICAgICAoe2RvIHsgfSB3aGlsZSgwKTsgZG8geyAtLWdl dF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoi bWVtb3J5Iik7IGlmICgoZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudCA9PSAwKSAmJiBnZXRf Y3VycmVudCgpLT5uZWVkX3Jlc2NoZWQpIHByZWVtcHRfc2NoZWR1bGUoKTsgfSB3aGlsZSAoMCk7 fSk7CiAgICAgICAgaWYgKG9sZF9yb290KSB7CiAgICAgICAgICAgICAgICBkcHV0KG9sZF9yb290 KTsKICAgICAgICAgICAgICAgIG1udHB1dChvbGRfcm9vdG1udCk7CiAgICAgICAgfQp9CgoKCgoK CnN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfZnNfcHdkKHN0cnVjdCBmc19zdHJ1Y3QgKmZzLAogICAg ICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50LAogICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkK ewogICAgICAgIHN0cnVjdCBkZW50cnkgKm9sZF9wd2Q7CiAgICAgICAgc3RydWN0IHZmc21vdW50 ICpvbGRfcHdkbW50OwogICAgICAgICh7ZG8geyArK2dldF9jdXJyZW50KCktPnByZWVtcHRfY291 bnQ7IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOyAo dm9pZCkoJmZzLT5sb2NrKTt9KTsKICAgICAgICBvbGRfcHdkID0gZnMtPnB3ZDsKICAgICAgICBv bGRfcHdkbW50ID0gZnMtPnB3ZG1udDsKICAgICAgICBmcy0+cHdkbW50ID0gbW50Z2V0KG1udCk7 CiAgICAgICAgZnMtPnB3ZCA9IGRnZXQoZGVudHJ5KTsKICAgICAgICAoe2RvIHsgfSB3aGlsZSgw KTsgZG8geyAtLWdldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192b2xhdGls ZV9fKCIiOiA6IDoibWVtb3J5Iik7IGlmICgoZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudCA9 PSAwKSAmJiBnZXRfY3VycmVudCgpLT5uZWVkX3Jlc2NoZWQpIHByZWVtcHRfc2NoZWR1bGUoKTsg fSB3aGlsZSAoMCk7fSk7CiAgICAgICAgaWYgKG9sZF9wd2QpIHsKICAgICAgICAgICAgICAgIGRw dXQob2xkX3B3ZCk7CiAgICAgICAgICAgICAgICBtbnRwdXQob2xkX3B3ZG1udCk7CiAgICAgICAg fQp9CiMgOTM3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAy CiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvbW0uaCIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDEKIyA2ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9tbS5oIiAyCgoKCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyAxMCAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvbW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9p bmNsdWRlL2xpbnV4L3N0cmluZy5oIiAxCiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNs dWRlL2xpbnV4L21tLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51 eC9saXN0LmgiIDEKIyAxMiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvbW0u aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L21tem9uZS5oIiAx CgoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvY29uZmlnLmgi IDEKIyA4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9tbXpvbmUuaCIgMgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiIDEKIyA5 ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9tbXpvbmUuaCIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2xpc3QuaCIgMQojIDEwICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9tbXpvbmUuaCIgMgojIDIxICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9tbXpvbmUuaCIKdHlwZWRlZiBzdHJ1Y3QgZnJlZV9h cmVhX3N0cnVjdCB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CiAgICAgICAg dW5zaWduZWQgbG9uZyAqbWFwOwp9IGZyZWVfYXJlYV90OwoKc3RydWN0IHBnbGlzdF9kYXRhOwoj IDM2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9tbXpvbmUuaCIKdHlwZWRl ZiBzdHJ1Y3Qgem9uZV9zdHJ1Y3QgewoKCgogICAgICAgIHNwaW5sb2NrX3QgbG9jazsKICAgICAg ICB1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpbmFjdGl2 ZV9jbGVhbl9wYWdlczsKICAgICAgICB1bnNpZ25lZCBsb25nIGluYWN0aXZlX2RpcnR5X3BhZ2Vz OwogICAgICAgIHVuc2lnbmVkIGxvbmcgcGFnZXNfbWluLCBwYWdlc19sb3csIHBhZ2VzX2hpZ2g7 CgoKCgogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgaW5hY3RpdmVfY2xlYW5fbGlzdDsKICAgICAg ICBmcmVlX2FyZWFfdCBmcmVlX2FyZWFbMTBdOwoKCgoKICAgICAgICBzdHJ1Y3QgcGdsaXN0X2Rh dGEgKnpvbmVfcGdkYXQ7CiAgICAgICAgc3RydWN0IHBhZ2UgKnpvbmVfbWVtX21hcDsKICAgICAg ICB1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGFkZHI7CiAgICAgICAgdW5zaWduZWQgbG9uZyB6 b25lX3N0YXJ0X21hcG5yOwoKCgoKICAgICAgICBjaGFyICpuYW1lOwogICAgICAgIHVuc2lnbmVk IGxvbmcgc2l6ZTsKfSB6b25lX3Q7CiMgODMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2xpbnV4L21tem9uZS5oIgp0eXBlZGVmIHN0cnVjdCB6b25lbGlzdF9zdHJ1Y3QgewogICAgICAg IHpvbmVfdCAqIHpvbmVzIFszICsxXTsKfSB6b25lbGlzdF90OwojIDEwMCAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvbW16b25lLmgiCnN0cnVjdCBib290bWVtX2RhdGE7CnR5 cGVkZWYgc3RydWN0IHBnbGlzdF9kYXRhIHsKICAgICAgICB6b25lX3Qgbm9kZV96b25lc1szXTsK ICAgICAgICB6b25lbGlzdF90IG5vZGVfem9uZWxpc3RzWzB4MGYgKzFdOwogICAgICAgIHN0cnVj dCBwYWdlICpub2RlX21lbV9tYXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyAqdmFsaWRfYWRkcl9i aXRtYXA7CiAgICAgICAgc3RydWN0IGJvb3RtZW1fZGF0YSAqYmRhdGE7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBub2RlX3N0YXJ0X3BhZGRyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbm9kZV9zdGFy dF9tYXBucjsKICAgICAgICB1bnNpZ25lZCBsb25nIG5vZGVfc2l6ZTsKICAgICAgICBpbnQgbm9k ZV9pZDsKICAgICAgICBzdHJ1Y3QgcGdsaXN0X2RhdGEgKm5vZGVfbmV4dDsKfSBwZ19kYXRhX3Q7 CgpleHRlcm4gaW50IG51bW5vZGVzOwpleHRlcm4gcGdfZGF0YV90ICpwZ2RhdF9saXN0OwojIDEy NCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvbW16b25lLmgiCnN0cnVjdCBw YWdlOwpleHRlcm4gdm9pZCBzaG93X2ZyZWVfYXJlYXNfY29yZShwZ19kYXRhX3QgKnBnZGF0KTsK ZXh0ZXJuIHZvaWQgZnJlZV9hcmVhX2luaXRfY29yZShpbnQgbmlkLCBwZ19kYXRhX3QgKnBnZGF0 LCBzdHJ1Y3QgcGFnZSAqKmdtYXAsCiAgdW5zaWduZWQgbG9uZyAqem9uZXNfc2l6ZSwgdW5zaWdu ZWQgbG9uZyBwYWRkciwgdW5zaWduZWQgbG9uZyAqemhvbGVzX3NpemUsCiAgc3RydWN0IHBhZ2Ug KnBtYXApOwoKZXh0ZXJuIHBnX2RhdGFfdCBjb250aWdfcGFnZV9kYXRhOwojIDEzICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9tbS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvc3dhcC5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2xpbnV4L3N3YXAuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNs dWRlL2FzbS9wYWdlLmgiIDEKIyA2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51 eC9zd2FwLmgiIDIKIyAyNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc3dh cC5oIgp1bmlvbiBzd2FwX2hlYWRlciB7CiAgICAgICAgc3RydWN0CiAgICAgICAgewogICAgICAg ICAgICAgICAgY2hhciByZXNlcnZlZFsoMVVMIDw8IDEyKSAtIDEwXTsKICAgICAgICAgICAgICAg IGNoYXIgbWFnaWNbMTBdOwogICAgICAgIH0gbWFnaWM7CiAgICAgICAgc3RydWN0CiAgICAgICAg ewogICAgICAgICAgICAgICAgY2hhciBib290Yml0c1sxMDI0XTsKICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCB2ZXJzaW9uOwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxhc3RfcGFn ZTsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBucl9iYWRwYWdlczsKICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBwYWRkaW5nWzEyNV07CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgYmFkcGFnZXNbMV07CiAgICAgICAgfSBpbmZvOwp9OwojIDUxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvaW5jbHVkZS9saW51eC9zd2FwLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2lu Y2x1ZGUvYXNtL2F0b21pYy5oIiAxCiMgNTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2xpbnV4L3N3YXAuaCIgMgojIDY0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51 eC9zd2FwLmgiCnN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBpbnQg ZmxhZ3M7CiAgICAgICAga2Rldl90IHN3YXBfZGV2aWNlOwogICAgICAgIHNwaW5sb2NrX3Qgc2Rl dl9sb2NrOwogICAgICAgIHN0cnVjdCBkZW50cnkgKiBzd2FwX2ZpbGU7CiAgICAgICAgc3RydWN0 IHZmc21vdW50ICpzd2FwX3Zmc21udDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCAqIHN3YXBfbWFw OwogICAgICAgIHVuc2lnbmVkIGludCBsb3dlc3RfYml0OwogICAgICAgIHVuc2lnbmVkIGludCBo aWdoZXN0X2JpdDsKICAgICAgICB1bnNpZ25lZCBpbnQgY2x1c3Rlcl9uZXh0OwogICAgICAgIHVu c2lnbmVkIGludCBjbHVzdGVyX25yOwogICAgICAgIGludCBwcmlvOwogICAgICAgIGludCBwYWdl czsKICAgICAgICB1bnNpZ25lZCBsb25nIG1heDsKICAgICAgICBpbnQgbmV4dDsKfTsKCmV4dGVy biBpbnQgbnJfc3dhcF9wYWdlczsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbnVtX3BoeXNwYWdlczsK ZXh0ZXJuIHVuc2lnbmVkIGludCBucl9mcmVlX3BhZ2VzKHZvaWQpOwpleHRlcm4gdW5zaWduZWQg aW50IG5yX2ZyZWVfcGFnZXNfem9uZShpbnQpOwpleHRlcm4gdW5zaWduZWQgaW50IG5yX2luYWN0 aXZlX2NsZWFuX3BhZ2VzKHZvaWQpOwpleHRlcm4gdW5zaWduZWQgaW50IG5yX2luYWN0aXZlX2Ns ZWFuX3BhZ2VzX3pvbmUoaW50KTsKZXh0ZXJuIHVuc2lnbmVkIGludCBucl9mcmVlX2J1ZmZlcl9w YWdlcyh2b2lkKTsKZXh0ZXJuIGludCBucl9hY3RpdmVfcGFnZXM7CmV4dGVybiBpbnQgbnJfaW5h Y3RpdmVfZGlydHlfcGFnZXM7CmV4dGVybiBhdG9taWNfdCBwYWdlX2NhY2hlX3NpemU7CmV4dGVy biBhdG9taWNfdCBidWZmZXJtZW1fcGFnZXM7CmV4dGVybiBzcGlubG9ja190IHBhZ2VjYWNoZV9s b2NrOwpleHRlcm4gdm9pZCBfX3JlbW92ZV9pbm9kZV9wYWdlKHN0cnVjdCBwYWdlICopOwoKCmV4 dGVybiBpbnQgdm1fcGFnZV9hZ2luZ190YWN0aWM7CmV4dGVybiBpbnQgdm1fc3RhdGljX2luYWN0 aXZlX3RhcmdldDsKZXh0ZXJuIGludCB2bV9kcm9wX2JlaGluZDsKCgpzdHJ1Y3QgdGFza19zdHJ1 Y3Q7CnN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKc3RydWN0IHN5c2luZm87CgpzdHJ1Y3Qgem9uZV90 OwoKCmV4dGVybiB2b2lkIGRlYWN0aXZhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKZXh0ZXJuIHZv aWQgZGVhY3RpdmF0ZV9wYWdlX25vbG9jayhzdHJ1Y3QgcGFnZSAqKTsKZXh0ZXJuIHZvaWQgYWN0 aXZhdGVfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKZXh0ZXJuIHZvaWQgYWN0aXZhdGVfcGFnZV9ub2xv Y2soc3RydWN0IHBhZ2UgKik7CmV4dGVybiB2b2lkIGxydV9jYWNoZV9hZGQoc3RydWN0IHBhZ2Ug Kik7CmV4dGVybiB2b2lkIF9fbHJ1X2NhY2hlX2RlbChzdHJ1Y3QgcGFnZSAqKTsKZXh0ZXJuIHZv aWQgbHJ1X2NhY2hlX2RlbChzdHJ1Y3QgcGFnZSAqKTsKZXh0ZXJuIHZvaWQgc3dhcF9zZXR1cCh2 b2lkKTsKCgpleHRlcm4gc3RydWN0IHBhZ2UgKiByZWNsYWltX3BhZ2Uoem9uZV90ICopOwpleHRl cm4gd2FpdF9xdWV1ZV9oZWFkX3Qga3N3YXBkX3dhaXQ7CmV4dGVybiB3YWl0X3F1ZXVlX2hlYWRf dCBrcmVjbGFpbWRfd2FpdDsKZXh0ZXJuIGludCBwYWdlX2xhdW5kZXIoaW50LCBpbnQpOwpleHRl cm4gaW50IGZyZWVfc2hvcnRhZ2Uodm9pZCk7CmV4dGVybiBpbnQgdG90YWxfZnJlZV9zaG9ydGFn ZSh2b2lkKTsKZXh0ZXJuIGludCBpbmFjdGl2ZV9zaG9ydGFnZSh2b2lkKTsKZXh0ZXJuIGludCB0 b3RhbF9pbmFjdGl2ZV9zaG9ydGFnZSh2b2lkKTsKZXh0ZXJuIHZvaWQgd2FrZXVwX2tzd2FwZCh2 b2lkKTsKZXh0ZXJuIGludCB0cnlfdG9fZnJlZV9wYWdlcyh1bnNpZ25lZCBpbnQgZ2ZwX21hc2sp OwoKZXh0ZXJuIHVuc2lnbmVkIGludCB6b25lX2ZyZWVfc2hvcnRhZ2Uoem9uZV90ICp6b25lKTsK ZXh0ZXJuIHVuc2lnbmVkIGludCB6b25lX2luYWN0aXZlX3Nob3J0YWdlKHpvbmVfdCAqem9uZSk7 CgoKZXh0ZXJuIHZvaWQgcndfc3dhcF9wYWdlKGludCwgc3RydWN0IHBhZ2UgKik7CmV4dGVybiB2 b2lkIHJ3X3N3YXBfcGFnZV9ub2xvY2soaW50LCBzd3BfZW50cnlfdCwgY2hhciAqKTsKCgoKCgoK ZXh0ZXJuIHZvaWQgc2hvd19zd2FwX2NhY2hlX2luZm8odm9pZCk7CgpleHRlcm4gaW50IGFkZF90 b19zd2FwX2NhY2hlKHN0cnVjdCBwYWdlICosIHN3cF9lbnRyeV90KTsKZXh0ZXJuIHZvaWQgX19k ZWxldGVfZnJvbV9zd2FwX2NhY2hlKHN0cnVjdCBwYWdlICpwYWdlKTsKZXh0ZXJuIHZvaWQgZGVs ZXRlX2Zyb21fc3dhcF9jYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CmV4dGVybiB2b2lkIGZyZWVf cGFnZV9hbmRfc3dhcF9jYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CmV4dGVybiB2b2lkIGZyZWVf c3dhcF9hbmRfc3dhcF9jYWNoZShzd3BfZW50cnlfdCk7CmV4dGVybiBzdHJ1Y3QgcGFnZSAqIGxv b2t1cF9zd2FwX2NhY2hlKHN3cF9lbnRyeV90KTsKZXh0ZXJuIHN0cnVjdCBwYWdlICogcmVhZF9z d2FwX2NhY2hlX2FzeW5jKHN3cF9lbnRyeV90KTsKCgpleHRlcm4gaW50IG91dF9vZl9tZW1vcnko dm9pZCk7CmV4dGVybiB2b2lkIG9vbV9raWxsKHZvaWQpOwoKCmV4dGVybiBpbnQgdm1fc3dhcF9m dWxsKHZvaWQpOwpleHRlcm4gdW5zaWduZWQgaW50IG5yX3N3YXBmaWxlczsKZXh0ZXJuIHN0cnVj dCBzd2FwX2luZm9fc3RydWN0IHN3YXBfaW5mb1tdOwpleHRlcm4gaW50IGlzX3N3YXBfcGFydGl0 aW9uKGtkZXZfdCk7CmV4dGVybiB2b2lkIHNpX3N3YXBpbmZvKHN0cnVjdCBzeXNpbmZvICopOwpl eHRlcm4gc3dwX2VudHJ5X3QgZ2V0X3N3YXBfcGFnZSh2b2lkKTsKZXh0ZXJuIHZvaWQgZ2V0X3N3 YXBoYW5kbGVfaW5mbyhzd3BfZW50cnlfdCwgdW5zaWduZWQgbG9uZyAqLCBrZGV2X3QgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbm9kZSAqKik7CmV4 dGVybiBpbnQgc3dhcF9kdXBsaWNhdGUoc3dwX2VudHJ5X3QpOwpleHRlcm4gaW50IHN3YXBfY291 bnQoc3RydWN0IHBhZ2UgKik7CmV4dGVybiBpbnQgdmFsaWRfc3dhcGhhbmRsZXMoc3dwX2VudHJ5 X3QsIHVuc2lnbmVkIGxvbmcgKik7CmV4dGVybiB2b2lkIHN3YXBfZnJlZShzd3BfZW50cnlfdCk7 CnN0cnVjdCBzd2FwX2xpc3RfdCB7CiAgICAgICAgaW50IGhlYWQ7CiAgICAgICAgaW50IG5leHQ7 Cn07CmV4dGVybiBzdHJ1Y3Qgc3dhcF9saXN0X3Qgc3dhcF9saXN0OwogX19hdHRyaWJ1dGVfXygo cmVncGFybSgwKSkpIGxvbmcgc3lzX3N3YXBvZmYoY29uc3QgY2hhciAqKTsKIF9fYXR0cmlidXRl X18oKHJlZ3Bhcm0oMCkpKSBsb25nIHN5c19zd2Fwb24oY29uc3QgY2hhciAqLCBpbnQpOwoKZXh0 ZXJuIHNwaW5sb2NrX3QgcGFnZW1hcF9scnVfbG9jazsKIyAyNTQgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2xpbnV4L3N3YXAuaCIKc3RhdGljIGlubGluZSBpbnQgaW5hY3RpdmVfdGFy Z2V0KHZvaWQpCnsKICAgICAgICBpZiAodm1fc3RhdGljX2luYWN0aXZlX3RhcmdldCkKICAgICAg ICAgICAgICAgIHJldHVybiB2bV9zdGF0aWNfaW5hY3RpdmVfdGFyZ2V0OwoKICAgICAgICByZXR1 cm4gbnVtX3BoeXNwYWdlcyAvIDU7Cn0KIyAyNzkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNs dWRlL2xpbnV4L3N3YXAuaCIKZXh0ZXJuIHNwaW5sb2NrX3Qgc3dhcGxvY2s7CgoKCgoKCmV4dGVy biB2b2lkIHNobWVtX3VudXNlKHN3cF9lbnRyeV90IGVudHJ5LCBzdHJ1Y3QgcGFnZSAqcGFnZSk7 CiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L21tLmgiIDIKCmV4dGVy biB1bnNpZ25lZCBsb25nIG1heF9tYXBucjsKZXh0ZXJuIHZvaWQgKiBoaWdoX21lbW9yeTsKZXh0 ZXJuIGludCBwYWdlX2NsdXN0ZXI7CgpleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBhY3RpdmVfbGlz dDsKZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaW5hY3RpdmVfZGlydHlfbGlzdDsKCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3BhZ2UuaCIgMQojIDIzICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9tbS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjEzL2luY2x1ZGUvYXNtL3BndGFibGUuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2lu Y2x1ZGUvYXNtL3BndGFibGUuaCIgMgojIDE2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVk ZS9hc20vcGd0YWJsZS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9w cm9jZXNzb3IuaCIgMQojIDE3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vcGd0 YWJsZS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2ZpeG1hcC5o IiAxCiMgMTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9maXhtYXAuaCIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDE3ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vZml4bWFwLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMQojIDE4ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9hc20vZml4bWFwLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvaW5jbHVkZS9hc20vYXBpY2RlZi5oIiAxCiMgMTIyICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9hc20vYXBpY2RlZi5oIgpzdHJ1Y3QgbG9jYWxfYXBpYyB7CgogICAgICAgIHN0 cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDE7CgogICAg ICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDI7 CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZl ZF8xIDogMjQsCiAgICAgICAgICAgICAgICAgICAgICAgIHBoeXNfYXBpY19pZCA6IDQsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDQ7CiAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgX19yZXNlcnZlZFszXTsKICAgICAgICB9IGlkOwoKICAgICAgICBjb25zdAogICAg ICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmVyc2lvbiA6IDgsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMSA6IDgsCiAgICAgICAgICAgICAgICAg ICAgICAgIG1heF9sdnQgOiA4LAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzIg OiA4OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbM107CiAgICAgICAg fSB2ZXJzaW9uOwoKICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsg fSBfX3Jlc2VydmVkXzAzOwoKICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZl ZFs0XTsgfSBfX3Jlc2VydmVkXzA0OwoKICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19y ZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzA1OwoKICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBp bnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzA2OwoKICAgICAgICBzdHJ1Y3QgewogICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IHByaW9yaXR5IDogOCwKICAgICAgICAgICAgICAgICAg ICAgICAgX19yZXNlcnZlZF8xIDogMjQ7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19y ZXNlcnZlZF8yWzNdOwogICAgICAgIH0gdHByOwoKICAgICAgICBjb25zdAogICAgICAgIHN0cnVj dCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcHJpb3JpdHkgOiA4LAogICAgICAgICAg ICAgICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiAyNDsKICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBfX3Jlc2VydmVkXzJbM107CiAgICAgICAgfSBhcHI7CgogICAgICAgIGNvbnN0CiAgICAg ICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwcmlvcml0eSA6IDgsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMSA6IDI0OwogICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMlszXTsKICAgICAgICB9IHBwcjsKCiAgICAgICAgc3Ry dWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBlb2k7CiAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgX19yZXNlcnZlZFszXTsKICAgICAgICB9IGVvaTsKCiAgICAgICAgc3RydWN0 IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wNzsKCiAgICAgICAg c3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzEgOiAyNCwK ICAgICAgICAgICAgICAgICAgICAgICAgbG9naWNhbF9kZXN0IDogODsKICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzJbM107CiAgICAgICAgfSBsZHI7CgogICAgICAgIHN0 cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8xIDogMjgsCiAg ICAgICAgICAgICAgICAgICAgICAgIG1vZGVsIDogNDsKICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBfX3Jlc2VydmVkXzJbM107CiAgICAgICAgfSBkZnI7CgogICAgICAgIHN0cnVjdCB7CiAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc3B1cmlvdXNfdmVjdG9yIDogOCwKICAgICAgICAg ICAgICAgICAgICAgICAgYXBpY19lbmFibGVkIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAg Zm9jdXNfY3B1IDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8yIDogMjI7 CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8zWzNdOwogICAgICAgIH0g c3ZyOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJpdGZp ZWxkOwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbM107CiAgICAgICAg fSBpc3IgWzhdOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IGJpdGZpZWxkOwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbM107CiAg ICAgICAgfSB0bXIgWzhdOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IGJpdGZpZWxkOwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRb M107CiAgICAgICAgfSBpcnIgWzhdOwoKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBz dHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2VuZF9jc19lcnJv ciA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZV9jc19lcnJvciA6 IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZF9hY2NlcHRfZXJyb3IgOiAx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfYWNjZXB0X2Vycm9yIDog MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiAxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfaWxsZWdhbF92ZWN0b3IgOiAxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfaWxsZWdhbF92ZWN0b3IgOiAxLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlsbGVnYWxfcmVnaXN0ZXJfYWRkcmVzcyA6 IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8yIDogMjQ7CiAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzNbM107CiAgICAg ICAgICAgICAgICB9IGVycm9yX2JpdHM7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXJyb3JzOwogICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8zWzNdOwogICAgICAgICAgICAgICAgfSBhbGxf ZXJyb3JzOwogICAgICAgIH0gZXNyOwoKICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19y ZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzA4OwoKICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBp bnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzA5OwoKICAgICAgICBzdHJ1Y3QgeyB1bnNp Z25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzEwOwoKICAgICAgICBzdHJ1Y3Qg eyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzExOwoKICAgICAgICBz dHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzEyOwoKICAg ICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzEz OwoKICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2Vy dmVkXzE0OwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZl Y3RvciA6IDgsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5X21vZGUgOiAzLAogICAg ICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbl9tb2RlIDogMSwKICAgICAgICAgICAgICAg ICAgICAgICAgZGVsaXZlcnlfc3RhdHVzIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19y ZXNlcnZlZF8xIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwgOiAxLAogICAgICAg ICAgICAgICAgICAgICAgICB0cmlnZ2VyIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19y ZXNlcnZlZF8yIDogMiwKICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kIDogMiwKICAg ICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8zIDogMTI7CiAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgX19yZXNlcnZlZF80WzNdOwogICAgICAgIH0gaWNyMTsKCiAgICAgICAgc3Ry dWN0IHsKICAgICAgICAgICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgaW50IF9fcmVzZXJ2ZWRfMSA6IDI0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBoeXNfZGVzdCA6IDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNl cnZlZF8yIDogNDsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2 ZWRfMyA6IDI0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxfZGVzdCA6 IDg7CiAgICAgICAgICAgICAgICB9IGRlc3Q7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg X19yZXNlcnZlZF80WzNdOwogICAgICAgIH0gaWNyMjsKCiAgICAgICAgc3RydWN0IHsKICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCB2ZWN0b3IgOiA4LAogICAgICAgICAgICAgICAgICAgICAg ICBfX3Jlc2VydmVkXzEgOiA0LAogICAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeV9zdGF0 dXMgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzIgOiAzLAogICAgICAg ICAgICAgICAgICAgICAgICBtYXNrIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJf bW9kZSA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMyA6IDE0OwogICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfNFszXTsKICAgICAgICB9IGx2dF90 aW1lcjsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19y ZXNlcnZlZF8xNTsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCB2ZWN0b3IgOiA4LAogICAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeV9tb2RlIDogMywK ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8xIDogMSwKICAgICAgICAgICAgICAg ICAgICAgICAgZGVsaXZlcnlfc3RhdHVzIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19y ZXNlcnZlZF8yIDogMywKICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA6IDEsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMyA6IDE1OwogICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IF9fcmVzZXJ2ZWRfNFszXTsKICAgICAgICB9IGx2dF9wYzsKCiAgICAgICAgc3RydWN0 IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2ZWN0b3IgOiA4LAogICAgICAgICAgICAg ICAgICAgICAgICBkZWxpdmVyeV9tb2RlIDogMywKICAgICAgICAgICAgICAgICAgICAgICAgX19y ZXNlcnZlZF8xIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcnlfc3RhdHVzIDog MSwKICAgICAgICAgICAgICAgICAgICAgICAgcG9sYXJpdHkgOiAxLAogICAgICAgICAgICAgICAg ICAgICAgICByZW1vdGVfaXJyIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlciA6 IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgOiAxLAogICAgICAgICAgICAgICAgICAg ICAgICBfX3Jlc2VydmVkXzIgOiAxNTsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jl c2VydmVkXzNbM107CiAgICAgICAgfSBsdnRfbGludDA7CgogICAgICAgIHN0cnVjdCB7CiAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmVjdG9yIDogOCwKICAgICAgICAgICAgICAgICAgICAg ICAgZGVsaXZlcnlfbW9kZSA6IDMsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRf MSA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5X3N0YXR1cyA6IDEsCiAgICAg ICAgICAgICAgICAgICAgICAgIHBvbGFyaXR5IDogMSwKICAgICAgICAgICAgICAgICAgICAgICAg cmVtb3RlX2lyciA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIgOiAxLAogICAg ICAgICAgICAgICAgICAgICAgICBtYXNrIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19y ZXNlcnZlZF8yIDogMTU7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8z WzNdOwogICAgICAgIH0gbHZ0X2xpbnQxOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IHZlY3RvciA6IDgsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVz ZXJ2ZWRfMSA6IDQsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5X3N0YXR1cyA6IDEs CiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDMsCiAgICAgICAgICAgICAg ICAgICAgICAgIG1hc2sgOiAxLAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzMg OiAxNTsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzRbM107CiAgICAg ICAgfSBsdnRfZXJyb3I7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgaW5pdGlhbF9jb3VudDsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2Vy dmVkXzJbM107CiAgICAgICAgfSB0aW1lcl9pY3I7CgogICAgICAgIGNvbnN0CiAgICAgICAgc3Ry dWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjdXJyX2NvdW50OwogICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMlszXTsKICAgICAgICB9IHRpbWVyX2NjcjsK CiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZl ZF8xNjsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19y ZXNlcnZlZF8xNzsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07 IH0gX19yZXNlcnZlZF8xODsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2 ZWRbNF07IH0gX19yZXNlcnZlZF8xOTsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBkaXZpc29yIDogNCwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNl cnZlZF8xIDogMjg7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8yWzNd OwogICAgICAgIH0gdGltZXJfZGNyOwoKICAgICAgICBzdHJ1Y3QgeyB1bnNpZ25lZCBpbnQgX19y ZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzIwOwoKfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7 CiMgMTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9maXhtYXAuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9wYWdlLmgiIDEKIyAyMCAiL3Vzci9z cmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIiAyCiMgNTAgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9maXhtYXAuaCIKZW51bSBmaXhlZF9hZGRyZXNzZXMgewoK ICAgICAgICBGSVhfQVBJQ19CQVNFLAoKCiAgICAgICAgRklYX0lPX0FQSUNfQkFTRV8wLAogICAg ICAgIEZJWF9JT19BUElDX0JBU0VfRU5EID0gRklYX0lPX0FQSUNfQkFTRV8wICsgOCAtMSwKIyA2 OCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIgogICAgICAgIF9f ZW5kX29mX2ZpeGVkX2FkZHJlc3Nlcwp9OwoKZXh0ZXJuIHZvaWQgX19zZXRfZml4bWFwIChlbnVt IGZpeGVkX2FkZHJlc3NlcyBpZHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIHBoeXMsIHBncHJvdF90IGZsYWdzKTsKIyA5NCAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIgpleHRlcm4gdm9pZCBfX3RoaXNfZml4 bWFwX2RvZXNfbm90X2V4aXN0KHZvaWQpOwoKCgoKCgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxv bmcgZml4X3RvX3ZpcnQoY29uc3QgdW5zaWduZWQgaW50IGlkeCkKewojIDExMiAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIgogICAgICAgIGlmIChpZHggPj0gX19l bmRfb2ZfZml4ZWRfYWRkcmVzc2VzKQogICAgICAgICAgICAgICAgX190aGlzX2ZpeG1hcF9kb2Vz X25vdF9leGlzdCgpOwoKICAgICAgICByZXR1cm4gKCgweGZmZmZlMDAwVUwpIC0gKChpZHgpIDw8 IDEyKSk7Cn0KIyAxOCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3BndGFibGUu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3RocmVhZHMuaCIg MQojIDE5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIiAyCgoK CgoKZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyWzEwMjRdOwpleHRlcm4gdm9pZCBwYWdpbmdf aW5pdCh2b2lkKTsKIyA2NyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3BndGFi bGUuaCIKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGdrZXJuX21hc2s7CiMgOTUgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgiCmV4dGVybiB1bnNpZ25lZCBsb25nIGVt cHR5X3plcm9fcGFnZVsxMDI0XTsKIyAxMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2FzbS9wZ3RhYmxlLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3Bn dGFibGUtMmxldmVsLmgiIDEKIyAzMiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNt L3BndGFibGUtMmxldmVsLmgiCnN0YXRpYyBpbmxpbmUgaW50IHBnZF9ub25lKHBnZF90IHBnZCkg eyByZXR1cm4gMDsgfQpzdGF0aWMgaW5saW5lIGludCBwZ2RfYmFkKHBnZF90IHBnZCkgeyByZXR1 cm4gMDsgfQpzdGF0aWMgaW5saW5lIGludCBwZ2RfcHJlc2VudChwZ2RfdCBwZ2QpIHsgcmV0dXJu IDE7IH0KIyA1MyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3BndGFibGUtMmxl dmVsLmgiCnN0YXRpYyBpbmxpbmUgcG1kX3QgKiBwbWRfb2Zmc2V0KHBnZF90ICogZGlyLCB1bnNp Z25lZCBsb25nIGFkZHJlc3MpCnsKICAgICAgICByZXR1cm4gKHBtZF90ICopIGRpcjsKfQojIDEx NiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3BndGFibGUuaCIgMgojIDI1NiAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3BndGFibGUuaCIKZXh0ZXJuIHVuc2ln bmVkIGxvbmcgcGcwWzEwMjRdOwojIDI3NyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUv YXNtL3BndGFibGUuaCIKc3RhdGljIGlubGluZSBpbnQgcHRlX3JlYWQocHRlX3QgcHRlKSB7IHJl dHVybiAocHRlKS5wdGVfbG93ICYgMHgwMDQ7IH0Kc3RhdGljIGlubGluZSBpbnQgcHRlX2V4ZWMo cHRlX3QgcHRlKSB7IHJldHVybiAocHRlKS5wdGVfbG93ICYgMHgwMDQ7IH0Kc3RhdGljIGlubGlu ZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkgeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIDB4MDQw OyB9CnN0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpIHsgcmV0dXJuIChwdGUp LnB0ZV9sb3cgJiAweDAyMDsgfQpzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRl KSB7IHJldHVybiAocHRlKS5wdGVfbG93ICYgMHgwMDI7IH0KCnN0YXRpYyBpbmxpbmUgcHRlX3Qg cHRlX3JkcHJvdGVjdChwdGVfdCBwdGUpIHsgKHB0ZSkucHRlX2xvdyAmPSB+MHgwMDQ7IHJldHVy biBwdGU7IH0Kc3RhdGljIGlubGluZSBwdGVfdCBwdGVfZXhwcm90ZWN0KHB0ZV90IHB0ZSkgeyAo cHRlKS5wdGVfbG93ICY9IH4weDAwNDsgcmV0dXJuIHB0ZTsgfQpzdGF0aWMgaW5saW5lIHB0ZV90 IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkgeyAocHRlKS5wdGVfbG93ICY9IH4weDA0MDsgcmV0dXJu IHB0ZTsgfQpzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpIHsgKHB0ZSku cHRlX2xvdyAmPSB+MHgwMjA7IHJldHVybiBwdGU7IH0Kc3RhdGljIGlubGluZSBwdGVfdCBwdGVf d3Jwcm90ZWN0KHB0ZV90IHB0ZSkgeyAocHRlKS5wdGVfbG93ICY9IH4weDAwMjsgcmV0dXJuIHB0 ZTsgfQpzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3JlYWQocHRlX3QgcHRlKSB7IChwdGUpLnB0 ZV9sb3cgfD0gMHgwMDQ7IHJldHVybiBwdGU7IH0Kc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtl eGVjKHB0ZV90IHB0ZSkgeyAocHRlKS5wdGVfbG93IHw9IDB4MDA0OyByZXR1cm4gcHRlOyB9CnN0 YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKSB7IChwdGUpLnB0ZV9sb3cg fD0gMHgwNDA7IHJldHVybiBwdGU7IH0Kc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhw dGVfdCBwdGUpIHsgKHB0ZSkucHRlX2xvdyB8PSAweDAyMDsgcmV0dXJuIHB0ZTsgfQpzdGF0aWMg aW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkgeyAocHRlKS5wdGVfbG93IHw9IDB4 MDAyOyByZXR1cm4gcHRlOyB9CgpzdGF0aWMgaW5saW5lIGludCBwdGVwX3Rlc3RfYW5kX2NsZWFy X2RpcnR5KHB0ZV90ICpwdGVwKSB7IHJldHVybiB0ZXN0X2FuZF9jbGVhcl9iaXQoNiwgcHRlcCk7 IH0Kc3RhdGljIGlubGluZSBpbnQgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhwdGVfdCAqcHRl cCkgeyByZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KDUsIHB0ZXApOyB9CnN0YXRpYyBpbmxpbmUg dm9pZCBwdGVwX3NldF93cnByb3RlY3QocHRlX3QgKnB0ZXApIHsgY2xlYXJfYml0KDEsIHB0ZXAp OyB9CnN0YXRpYyBpbmxpbmUgdm9pZCBwdGVwX21rZGlydHkocHRlX3QgKnB0ZXApIHsgc2V0X2Jp dCg2LCBwdGVwKTsgfQojIDMwOSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3Bn dGFibGUuaCIKc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90 X3QgbmV3cHJvdCkKewogICAgICAgIHB0ZS5wdGVfbG93ICY9ICgofigoMVVMIDw8IDEyKS0xKSkg fCAweDAyMCB8IDB4MDQwKTsKICAgICAgICBwdGUucHRlX2xvdyB8PSAoKG5ld3Byb3QpLnBncHJv dCk7CiAgICAgICAgcmV0dXJuIHB0ZTsKfQojIDI0ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9saW51eC9tbS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNt L2F0b21pYy5oIiAxCiMgMjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L21t LmgiIDIKIyA0MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvbW0uaCIKc3Ry dWN0IHZtX2FyZWFfc3RydWN0IHsKICAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICogdm1fbW07CiAg ICAgICAgdW5zaWduZWQgbG9uZyB2bV9zdGFydDsKICAgICAgICB1bnNpZ25lZCBsb25nIHZtX2Vu ZDsKCgoKICAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtX25leHQ7CgogICAgICAgIHBn cHJvdF90IHZtX3BhZ2VfcHJvdDsKICAgICAgICB1bnNpZ25lZCBsb25nIHZtX2ZsYWdzOwoKCiAg ICAgICAgc2hvcnQgdm1fYXZsX2hlaWdodDsKICAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KiB2bV9hdmxfbGVmdDsKICAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bV9hdmxfcmln aHQ7CgoKCgoKCiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bV9uZXh0X3NoYXJlOwog ICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtX3BwcmV2X3NoYXJlOwoKCiAgICAgICAg c3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0ICogdm1fb3BzOwoKCiAgICAgICAgdW5zaWduZWQg bG9uZyB2bV9wZ29mZjsKCiAgICAgICAgc3RydWN0IGZpbGUgKiB2bV9maWxlOwogICAgICAgIHVu c2lnbmVkIGxvbmcgdm1fcmFlbmQ7CiAgICAgICAgdm9pZCAqIHZtX3ByaXZhdGVfZGF0YTsKfTsK IyAxMTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L21tLmgiCmV4dGVybiBp bnQgdm1fbWluX3JlYWRhaGVhZDsKZXh0ZXJuIGludCB2bV9tYXhfcmVhZGFoZWFkOwoKCgoKCmV4 dGVybiBwZ3Byb3RfdCBwcm90ZWN0aW9uX21hcFsxNl07CgoKCgoKCgpzdHJ1Y3Qgdm1fb3BlcmF0 aW9uc19zdHJ1Y3QgewogICAgICAgIHZvaWQgKCpvcGVuKShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KiBhcmVhKTsKICAgICAgICB2b2lkICgqY2xvc2UpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIGFy ZWEpOwogICAgICAgIHN0cnVjdCBwYWdlICogKCpub3BhZ2UpKHN0cnVjdCB2bV9hcmVhX3N0cnVj dCAqIGFyZWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHdyaXRlX2FjY2Vzcyk7Cn07CiMg MTUyICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9tbS5oIgp0eXBlZGVmIHN0 cnVjdCBwYWdlIHsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAgICAgICAgc3RydWN0 IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpbmRleDsKCiAg ICAgICAgc3RydWN0IHBhZ2UgKm5leHRfaGFzaDsKCiAgICAgICAgYXRvbWljX3QgY291bnQ7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKCiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBscnU7 CgogICAgICAgIHVuc2lnbmVkIGxvbmcgYWdlOwogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IHdh aXQ7CiAgICAgICAgc3RydWN0IHBhZ2UgKipwcHJldl9oYXNoOwogICAgICAgIHN0cnVjdCBidWZm ZXJfaGVhZCAqIGJ1ZmZlcnM7CiAgICAgICAgdm9pZCAqdmlydHVhbDsKCiAgICAgICAgc3RydWN0 IHpvbmVfc3RydWN0ICp6b25lOwp9IG1lbV9tYXBfdDsKIyAzMDYgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2xpbnV4L21tLmgiCmV4dGVybiB2b2lkIF9fc2V0X3BhZ2VfZGlydHkoc3Ry dWN0IHBhZ2UgKik7CgpzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BhZ2VfZGlydHkoc3RydWN0IHBh Z2UgKiBwYWdlKQp7CiAgICAgICAgaWYgKCF0ZXN0X2FuZF9zZXRfYml0KDQsICZwYWdlLT5mbGFn cykpCiAgICAgICAgICAgICAgICBfX3NldF9wYWdlX2RpcnR5KHBhZ2UpOwp9CiMgMzY2ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9tbS5oIgpzdGF0aWMgaW5saW5lIHZvaWQg dG91Y2hfcGFnZShzdHJ1Y3QgcGFnZSAqIHBhZ2UpCnsKICAgICAgICBpZiAoKF9fYnVpbHRpbl9j b25zdGFudF9wKDExKSA/IGNvbnN0YW50X3Rlc3RfYml0KCgxMSksKCYocGFnZSktPmZsYWdzKSkg OiB2YXJpYWJsZV90ZXN0X2JpdCgoMTEpLCgmKHBhZ2UpLT5mbGFncykpKSkKICAgICAgICAgICAg ICAgIGFjdGl2YXRlX3BhZ2UocGFnZSk7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgc2V0 X2JpdCgyLCAmKHBhZ2UpLT5mbGFncyk7Cn0KIyAzODEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9p bmNsdWRlL2xpbnV4L21tLmgiCmV4dGVybiBtZW1fbWFwX3QgKiBtZW1fbWFwOwoKCgoKCgoKZXh0 ZXJuIHN0cnVjdCBwYWdlICogX2FsbG9jX3BhZ2VzKHVuc2lnbmVkIGludCBnZnBfbWFzaywgdW5z aWduZWQgbG9uZyBvcmRlcikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gc3Ry dWN0IHBhZ2UgKiBfX2FsbG9jX3BhZ2VzKHVuc2lnbmVkIGludCBnZnBfbWFzaywgdW5zaWduZWQg bG9uZyBvcmRlciwgem9uZWxpc3RfdCAqem9uZWxpc3QpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0o MykpKTsKZXh0ZXJuIHN0cnVjdCBwYWdlICogYWxsb2NfcGFnZXNfbm9kZShpbnQgbmlkLCBpbnQg Z2ZwX21hc2ssIHVuc2lnbmVkIGxvbmcgb3JkZXIpOwoKc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFn ZSAqIGFsbG9jX3BhZ2VzKGludCBnZnBfbWFzaywgdW5zaWduZWQgbG9uZyBvcmRlcikKewoKCgog ICAgICAgIGlmIChvcmRlciA+PSAxMCkKICAgICAgICAgICAgICAgIHJldHVybiAoKHZvaWQgKikw KTsKICAgICAgICByZXR1cm4gX2FsbG9jX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcik7Cn0KCgoKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgX19nZXRfZnJlZV9wYWdlcyhpbnQgZ2ZwX21hc2ssIHVuc2lnbmVk IGxvbmcgb3JkZXIpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHVuc2lnbmVk IGxvbmcgZ2V0X3plcm9lZF9wYWdlKGludCBnZnBfbWFzaykgX19hdHRyaWJ1dGVfXygocmVncGFy bSgzKSkpOwojIDQyMiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvbW0uaCIK ZXh0ZXJuIHZvaWQgX19mcmVlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25n IG9yZGVyKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIGZyZWVfcGFn ZXModW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG9yZGVyKSBfX2F0dHJpYnV0ZV9f KChyZWdwYXJtKDMpKSk7CgoKCgpleHRlcm4gdm9pZCBzaG93X2ZyZWVfYXJlYXModm9pZCk7CmV4 dGVybiB2b2lkIHNob3dfZnJlZV9hcmVhc19ub2RlKHBnX2RhdGFfdCAqcGdkYXQpOwoKZXh0ZXJu IHZvaWQgY2xlYXJfcGFnZV90YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25n LCBpbnQpOwoKc3RydWN0IHBhZ2UgKiBzaG1lbV9ub3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0 ICogdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCBub19zaGFyZSk7CnN0cnVjdCBmaWxl ICpzaG1lbV9maWxlX3NldHVwKGNoYXIgKiBuYW1lLCBsb2ZmX3Qgc2l6ZSk7CmV4dGVybiB2b2lk IHNobWVtX2xvY2soc3RydWN0IGZpbGUgKiBmaWxlLCBpbnQgbG9jayk7CmV4dGVybiBpbnQgc2ht ZW1femVyb19zZXR1cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CgpleHRlcm4gdm9pZCB6YXBf cGFnZV9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1 bnNpZ25lZCBsb25nIHNpemUpOwpleHRlcm4gdm9pZCB6YXBfaW5vZGVfbWFwcGluZyhzdHJ1Y3Qg YWRkcmVzc19zcGFjZSAqbWFwcGluZyk7CmV4dGVybiBpbnQgY29weV9wYWdlX3JhbmdlKHN0cnVj dCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLCBzdHJ1Y3Qgdm1fYXJlYV9z dHJ1Y3QgKnZtYSk7CmV4dGVybiBpbnQgcmVtYXBfcGFnZV9yYW5nZSh1bnNpZ25lZCBsb25nIGZy b20sIHVuc2lnbmVkIGxvbmcgdG8sIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCk7 CmV4dGVybiBpbnQgemVyb21hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWdu ZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KTsKCmV4dGVybiBpbnQgdm10cnVuY2F0ZShzdHJ1 Y3QgaW5vZGUgKiBpbm9kZSwgbG9mZl90IG9mZnNldCk7CmV4dGVybiBwbWRfdCAqX19wbWRfYWxs b2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVz cykgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gcHRlX3QgKnB0ZV9hbGxvYyhz dHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKSBf X2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiBpbnQgaGFuZGxlX21tX2ZhdWx0KHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tLHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBs b25nIGFkZHJlc3MsIGludCB3cml0ZV9hY2Nlc3MpOwpleHRlcm4gaW50IG1ha2VfcGFnZXNfcHJl c2VudCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kKTsKZXh0ZXJuIGludCBh Y2Nlc3NfcHJvY2Vzc192bShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBh ZGRyLCB2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSk7CmV4dGVybiBpbnQgcHRyYWNlX3Jl YWRkYXRhKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIHNyYywgY2hhciAq ZHN0LCBpbnQgbGVuKTsKZXh0ZXJuIGludCBwdHJhY2Vfd3JpdGVkYXRhKHN0cnVjdCB0YXNrX3N0 cnVjdCAqdHNrLCBjaGFyICogc3JjLCB1bnNpZ25lZCBsb25nIGRzdCwgaW50IGxlbik7CmV4dGVy biBpbnQgcHRyYWNlX2F0dGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CmV4dGVybiBpbnQg cHRyYWNlX2RldGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgdW5zaWduZWQgaW50KTsKZXh0ZXJu IHZvaWQgcHRyYWNlX2Rpc2FibGUoc3RydWN0IHRhc2tfc3RydWN0ICopOwoKaW50IGdldF91c2Vy X3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5z aWduZWQgbG9uZyBzdGFydCwKICAgICAgICAgICAgICAgIGludCBsZW4sIGludCB3cml0ZSwgaW50 IGZvcmNlLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFz KTsKIyA0NjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L21tLmgiCnN0YXRp YyBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBn ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQp7CiAgICAgICAgaWYgKCFwZ2RfcHJlc2VudCgqcGdk KSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3BtZF9hbGxvYyhtbSwgcGdkLCBhZGRyZXNzKTsK ICAgICAgICByZXR1cm4gcG1kX29mZnNldChwZ2QsIGFkZHJlc3MpOwp9CgpleHRlcm4gaW50IHBn dF9jYWNoZV93YXRlclsyXTsKZXh0ZXJuIGludCBjaGVja19wZ3RfY2FjaGUodm9pZCk7CgpleHRl cm4gdm9pZCBmcmVlX2FyZWFfaW5pdCh1bnNpZ25lZCBsb25nICogem9uZXNfc2l6ZSk7CmV4dGVy biB2b2lkIGZyZWVfYXJlYV9pbml0X25vZGUoaW50IG5pZCwgcGdfZGF0YV90ICpwZ2RhdCwgc3Ry dWN0IHBhZ2UgKnBtYXAsCiAgICAgICAgdW5zaWduZWQgbG9uZyAqIHpvbmVzX3NpemUsIHVuc2ln bmVkIGxvbmcgem9uZV9zdGFydF9wYWRkciwKICAgICAgICB1bnNpZ25lZCBsb25nICp6aG9sZXNf c2l6ZSk7CmV4dGVybiB2b2lkIG1lbV9pbml0KHZvaWQpOwpleHRlcm4gdm9pZCBzaG93X21lbSh2 b2lkKTsKZXh0ZXJuIHZvaWQgc2lfbWVtaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqIHZhbCk7CmV4dGVy biB2b2lkIHN3YXBpbl9yZWFkYWhlYWQoc3dwX2VudHJ5X3QpOwoKZXh0ZXJuIHN0cnVjdCBhZGRy ZXNzX3NwYWNlIHN3YXBwZXJfc3BhY2U7CgoKCgoKCnN0YXRpYyBpbmxpbmUgaW50IGV4Y2x1c2l2 ZV9zd2FwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCnsKICAgICAgICBpZiAoIShfX2J1aWx0aW5f Y29uc3RhbnRfcCgwKSA/IGNvbnN0YW50X3Rlc3RfYml0KCgwKSwoJihwYWdlKS0+ZmxhZ3MpKSA6 IHZhcmlhYmxlX3Rlc3RfYml0KCgwKSwoJihwYWdlKS0+ZmxhZ3MpKSkpCiAgICAgICAgICAgICAg ICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmJ5dGUgMHgwZiwweDBiIik7CiAgICAgICAgaWYgKCEo KHBhZ2UpLT5tYXBwaW5nID09ICZzd2FwcGVyX3NwYWNlKSkKICAgICAgICAgICAgICAgIHJldHVy biAwOwogICAgICAgIGlmICgoKCYocGFnZSktPmNvdW50KS0+Y291bnRlcikgLSAhIXBhZ2UtPmJ1 ZmZlcnMgIT0gMikKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIHJldHVybiBzd2Fw X2NvdW50KHBhZ2UpID09IDE7Cn0KCgoKc3RhdGljIGlubGluZSB2b2lkIF9fZnJlZV9wdGUocHRl X3QgcHRlKQp7CiAgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UgPSAobWVtX21hcCsoKHVuc2lnbmVk IGxvbmcpKCgocHRlKS5wdGVfbG93ID4+IDEyKSkpKTsKICAgICAgICBpZiAoKCEoKHBhZ2UgLSBt ZW1fbWFwKSA8IG1heF9tYXBucikpIHx8IChfX2J1aWx0aW5fY29uc3RhbnRfcCgzMSkgPyBjb25z dGFudF90ZXN0X2JpdCgoMzEpLCgmKHBhZ2UpLT5mbGFncykpIDogdmFyaWFibGVfdGVzdF9iaXQo KDMxKSwoJihwYWdlKS0+ZmxhZ3MpKSkpCiAgICAgICAgICAgICAgICByZXR1cm47CgoKCgogICAg ICAgIGlmIChwdGVfZGlydHkocHRlKSAmJiBwYWdlLT5tYXBwaW5nKQogICAgICAgICAgICAgICAg c2V0X3BhZ2VfZGlydHkocGFnZSk7CiAgICAgICAgZnJlZV9wYWdlX2FuZF9zd2FwX2NhY2hlKHBh Z2UpOwp9CgoKZXh0ZXJuIHZvaWQgbG9ja192bWFfbWFwcGluZ3Moc3RydWN0IHZtX2FyZWFfc3Ry dWN0ICopOwpleHRlcm4gdm9pZCB1bmxvY2tfdm1hX21hcHBpbmdzKHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqKTsKZXh0ZXJuIHZvaWQgaW5zZXJ0X3ZtX3N0cnVjdChzdHJ1Y3QgbW1fc3RydWN0ICos IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgX19pbnNlcnRfdm1fc3RydWN0 KHN0cnVjdCBtbV9zdHJ1Y3QgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwpleHRlcm4gdm9p ZCBidWlsZF9tbWFwX2F2bChzdHJ1Y3QgbW1fc3RydWN0ICopOwpleHRlcm4gdm9pZCBleGl0X21t YXAoc3RydWN0IG1tX3N0cnVjdCAqKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGdldF91bm1hcHBl ZF9hcmVhKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2ln bmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZG9fbW1hcF9w Z29mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAogICAgICAgIHVuc2ln bmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHByb3QsCiAgICAgICAgdW5zaWduZWQgbG9uZyBm bGFnLCB1bnNpZ25lZCBsb25nIHBnb2ZmKTsKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBk b19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAgICAgICAgdW5z aWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcHJvdCwKICAgICAgICB1bnNpZ25lZCBsb25n IGZsYWcsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyByZXQg PSAtMjI7CiAgICAgICAgaWYgKChvZmZzZXQgKyAoKChsZW4pKygxVUwgPDwgMTIpLTEpJih+KCgx VUwgPDwgMTIpLTEpKSkpIDwgb2Zmc2V0KQogICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAg ICAgaWYgKCEob2Zmc2V0ICYgfih+KCgxVUwgPDwgMTIpLTEpKSkpCiAgICAgICAgICAgICAgICBy ZXQgPSBkb19tbWFwX3Bnb2ZmKGZpbGUsIGFkZHIsIGxlbiwgcHJvdCwgZmxhZywgb2Zmc2V0ID4+ IDEyKTsKb3V0OgogICAgICAgIHJldHVybiByZXQ7Cn0KCmV4dGVybiBpbnQgZG9fbXVubWFwKHN0 cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgc2l6ZV90KTsKCmV4dGVybiB1bnNpZ25l ZCBsb25nIGRvX2Jyayh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKZXh0ZXJuIHZvaWQg bWVyZ2VfYW5vbl92bWFzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0 LCB1bnNpZ25lZCBsb25nIGVuZCk7CgpzdHJ1Y3Qgem9uZV90OwoKZXh0ZXJuIHZvaWQgcmVtb3Zl X2lub2RlX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CmV4dGVybiB1bnNpZ25lZCBsb25nIHBhZ2VfdW51 c2Uoc3RydWN0IHBhZ2UgKik7CmV4dGVybiB2b2lkIHRydW5jYXRlX2lub2RlX3BhZ2VzKHN0cnVj dCBhZGRyZXNzX3NwYWNlICosIGxvZmZfdCk7CgoKZXh0ZXJuIGludCBmaWxlbWFwX3N5bmMoc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHNpemVfdCwgdW5zaWduZWQgaW50 KTsKZXh0ZXJuIHN0cnVjdCBwYWdlICpmaWxlbWFwX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1 Y3QgKiwgdW5zaWduZWQgbG9uZywgaW50KTsKIyA1OTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9p bmNsdWRlL2xpbnV4L21tLmgiCnN0YXRpYyBpbmxpbmUgaW50IGV4cGFuZF9zdGFjayhzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKewogICAgICAgIHVu c2lnbmVkIGxvbmcgZ3JvdzsKCiAgICAgICAgZG8geyBkbyB7ICsrZ2V0X2N1cnJlbnQoKS0+cHJl ZW1wdF9jb3VudDsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgfSB3aGls ZSAoMCk7ICh2b2lkKSgmdm1hLT52bV9tbS0+cGFnZV90YWJsZV9sb2NrKTsgfSB3aGlsZSgwKTsK ICAgICAgICBhZGRyZXNzICY9ICh+KCgxVUwgPDwgMTIpLTEpKTsKICAgICAgICBncm93ID0gKHZt YS0+dm1fc3RhcnQgLSBhZGRyZXNzKSA+PiAxMjsKICAgICAgICBpZiAodm1hLT52bV9lbmQgLSBh ZGRyZXNzID4gZ2V0X2N1cnJlbnQoKS0+cmxpbVszXS5ybGltX2N1ciB8fAogICAgICAgICAgICAo KHZtYS0+dm1fbW0tPnRvdGFsX3ZtICsgZ3JvdykgPDwgMTIpID4gZ2V0X2N1cnJlbnQoKS0+cmxp bVs5XS5ybGltX2N1cikgewogICAgICAgICAgICAgICAgZG8geyBkbyB7IH0gd2hpbGUoMCk7IGRv IHsgLS1nZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygi IjogOiA6Im1lbW9yeSIpOyBpZiAoKGdldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQgPT0gMCkg JiYgZ2V0X2N1cnJlbnQoKS0+bmVlZF9yZXNjaGVkKSBwcmVlbXB0X3NjaGVkdWxlKCk7IH0gd2hp bGUgKDApOyB9IHdoaWxlICgwKTsKICAgICAgICAgICAgICAgIHJldHVybiAtMTI7CiAgICAgICAg fQogICAgICAgIHZtYS0+dm1fc3RhcnQgPSBhZGRyZXNzOwogICAgICAgIHZtYS0+dm1fcGdvZmYg LT0gZ3JvdzsKICAgICAgICB2bWEtPnZtX21tLT50b3RhbF92bSArPSBncm93OwogICAgICAgIGlm ICh2bWEtPnZtX2ZsYWdzICYgMHgwMDAwMjAwMCkKICAgICAgICAgICAgICAgIHZtYS0+dm1fbW0t PmxvY2tlZF92bSArPSBncm93OwogICAgICAgIGRvIHsgZG8geyB9IHdoaWxlKDApOyBkbyB7IC0t Z2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudDsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDog OiJtZW1vcnkiKTsgaWYgKChnZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50ID09IDApICYmIGdl dF9jdXJyZW50KCktPm5lZWRfcmVzY2hlZCkgcHJlZW1wdF9zY2hlZHVsZSgpOyB9IHdoaWxlICgw KTsgfSB3aGlsZSAoMCk7CiAgICAgICAgcmV0dXJuIDA7Cn0KCgpleHRlcm4gc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICogZmluZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqIG1tLCB1bnNpZ25lZCBsb25n IGFkZHIpOwpleHRlcm4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICogZmluZF92bWFfcHJldihzdHJ1 Y3QgbW1fc3RydWN0ICogbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqcHByZXYp OwoKCgpzdGF0aWMgaW5saW5lIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIGZpbmRfdm1hX2ludGVy c2VjdGlvbihzdHJ1Y3QgbW1fc3RydWN0ICogbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkciwg dW5zaWduZWQgbG9uZyBlbmRfYWRkcikKewogICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq IHZtYSA9IGZpbmRfdm1hKG1tLHN0YXJ0X2FkZHIpOwoKICAgICAgICBpZiAodm1hICYmIGVuZF9h ZGRyIDw9IHZtYS0+dm1fc3RhcnQpCiAgICAgICAgICAgICAgICB2bWEgPSAoKHZvaWQgKikwKTsK ICAgICAgICByZXR1cm4gdm1hOwp9CgpleHRlcm4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5k X2V4dGVuZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcik7CiMg MjQgImtlcm5lbC9zY2hlZC5jIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUv bGludXgvaW5pdC5oIiAxCiMgMjUgImtlcm5lbC9zY2hlZC5jIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgvc21wX2xvY2suaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvc21wX2xvY2suaCIgMgojIDE2ICIvdXNyL3NyYy9saW51eC0y LjQuMTMvaW5jbHVkZS9saW51eC9zbXBfbG9jay5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2FzbS9zbXBsb2NrLmgiIDEKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIiAxCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgNiAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMQojIDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNs dWRlL2xpbnV4L2ludGVycnVwdC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgvc21wLmgiIDEKIyA4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51 eC9pbnRlcnJ1cHQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4 L2NhY2hlLmgiIDEKIyA5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9pbnRl cnJ1cHQuaCIgMgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vYml0b3Bz LmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvaW50ZXJydXB0 LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vYXRvbWljLmgiIDEK IyAxMiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vcHRyYWNlLmgiIDEKIyAxMyAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiIDIKCnN0cnVj dCBpcnFhY3Rpb24gewogICAgICAgIHZvaWQgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0 IHB0X3JlZ3MgKik7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAgICB1bnNpZ25l ZCBsb25nIG1hc2s7CiAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKICAgICAgICB2b2lkICpkZXZf aWQ7CiAgICAgICAgc3RydWN0IGlycWFjdGlvbiAqbmV4dDsKfTsKCgoKCgplbnVtIHsKICAgICAg ICBUSU1FUl9CSCA9IDAsCiAgICAgICAgVFFVRVVFX0JILAogICAgICAgIERJR0lfQkgsCiAgICAg ICAgU0VSSUFMX0JILAogICAgICAgIFJJU0NPTThfQkgsCiAgICAgICAgU1BFQ0lBTElYX0JILAog ICAgICAgIEFVUk9SQV9CSCwKICAgICAgICBFU1BfQkgsCiAgICAgICAgU0NTSV9CSCwKICAgICAg ICBJTU1FRElBVEVfQkgsCiAgICAgICAgQ1lDTEFERVNfQkgsCiAgICAgICAgQ00yMDZfQkgsCiAg ICAgICAgSlNfQkgsCiAgICAgICAgTUFDU0VSSUFMX0JILAogICAgICAgIElTSUNPTV9CSAp9OwoK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vaGFyZGlycS5oIiAxCgoKCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyA1ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vaGFyZGlycS5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdGhyZWFkcy5oIiAxCiMgNiAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2lycS5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4x My9pbmNsdWRlL2xpbnV4L2lycS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2xpbnV4L2NvbmZpZy5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xp bnV4L2lycS5oIiAyCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgv Y2FjaGUuaCIgMQojIDE3ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9pcnEu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgi IDEKIyAxOCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvaXJxLmgiIDIKCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2lycS5oIiAxCiMgMTMgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9pcnEuaCIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTMvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9hc20vaXJxLmgiIDIKIyAyOCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvYXNtL2lycS5oIgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgaXJxX2Nhbm5vbmljYWxpemUoaW50 IGlycSkKewogICAgICAgIHJldHVybiAoKGlycSA9PSAyKSA/IDkgOiBpcnEpOwp9CgpleHRlcm4g dm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQpOwpleHRlcm4gdm9pZCBkaXNhYmxlX2lycV9u b3N5bmModW5zaWduZWQgaW50KTsKZXh0ZXJuIHZvaWQgZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQp OwojIDIwICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9pcnEuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9wdHJhY2UuaCIgMQojIDIxICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9pcnEuaCIgMgojIDM5ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9pcnEuaCIKc3RydWN0IGh3X2ludGVycnVwdF90eXBl IHsKICAgICAgICBjb25zdCBjaGFyICogdHlwZW5hbWU7CiAgICAgICAgdW5zaWduZWQgaW50ICgq c3RhcnR1cCkodW5zaWduZWQgaW50IGlycSk7CiAgICAgICAgdm9pZCAoKnNodXRkb3duKSh1bnNp Z25lZCBpbnQgaXJxKTsKICAgICAgICB2b2lkICgqZW5hYmxlKSh1bnNpZ25lZCBpbnQgaXJxKTsK ICAgICAgICB2b2lkICgqZGlzYWJsZSkodW5zaWduZWQgaW50IGlycSk7CiAgICAgICAgdm9pZCAo KmFjaykodW5zaWduZWQgaW50IGlycSk7CiAgICAgICAgdm9pZCAoKmVuZCkodW5zaWduZWQgaW50 IGlycSk7CiAgICAgICAgdm9pZCAoKnNldF9hZmZpbml0eSkodW5zaWduZWQgaW50IGlycSwgdW5z aWduZWQgbG9uZyBtYXNrKTsKfTsKCnR5cGVkZWYgc3RydWN0IGh3X2ludGVycnVwdF90eXBlIGh3 X2lycV9jb250cm9sbGVyOwojIDU5ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51 eC9pcnEuaCIKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGludCBzdGF0dXM7CiAg ICAgICAgaHdfaXJxX2NvbnRyb2xsZXIgKmhhbmRsZXI7CiAgICAgICAgc3RydWN0IGlycWFjdGlv biAqYWN0aW9uOwogICAgICAgIHVuc2lnbmVkIGludCBkZXB0aDsKICAgICAgICBzcGlubG9ja190 IGxvY2s7Cn0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oKDEgPDwgKCg1KSkpKSkpIGlycV9k ZXNjX3Q7CgpleHRlcm4gaXJxX2Rlc2NfdCBpcnFfZGVzYyBbMjI0XTsKCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2h3X2lycS5oIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMy9pbmNsdWRlL2FzbS9od19pcnEuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDE2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5j bHVkZS9hc20vaHdfaXJxLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9h c20vYXRvbWljLmgiIDEKIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2h3 X2lycS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2lycS5oIiAx CiMgMTggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9od19pcnEuaCIgMgojIDYx ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vaHdfaXJxLmgiCmV4dGVybiBpbnQg aXJxX3ZlY3RvclsyMjRdOwojIDcxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20v aHdfaXJxLmgiCmV4dGVybiB2b2lkIG1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpOwpleHRlcm4g dm9pZCB1bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpOwpleHRlcm4gdm9pZCBkaXNhYmxlXzgy NTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKZXh0ZXJuIHZvaWQgZW5hYmxlXzgyNTlBX2lycSh1 bnNpZ25lZCBpbnQgaXJxKTsKZXh0ZXJuIGludCBpODI1OUFfaXJxX3BlbmRpbmcodW5zaWduZWQg aW50IGlycSk7CmV4dGVybiB2b2lkIG1ha2VfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOwpl eHRlcm4gdm9pZCBpbml0XzgyNTlBKGludCBhZW9pKTsKZXh0ZXJuIHZvaWQgc2VuZF9JUElfc2Vs ZihpbnQgdmVjdG9yKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIGlu aXRfVklTV1NfQVBJQ19pcnFzKHZvaWQpOwpleHRlcm4gdm9pZCBzZXR1cF9JT19BUElDKHZvaWQp OwpleHRlcm4gdm9pZCBkaXNhYmxlX0lPX0FQSUModm9pZCk7CmV4dGVybiB2b2lkIHByaW50X0lP X0FQSUModm9pZCk7CmV4dGVybiBpbnQgSU9fQVBJQ19nZXRfUENJX2lycV92ZWN0b3IoaW50IGJ1 cywgaW50IHNsb3QsIGludCBmbik7CmV4dGVybiB2b2lkIHNlbmRfSVBJKGludCBkZXN0LCBpbnQg dmVjdG9yKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGlvX2FwaWNfaXJxczsKCmV4dGVybiBhdG9t aWNfdCBpcnFfZXJyX2NvdW50OwpleHRlcm4gYXRvbWljX3QgaXJxX21pc19jb3VudDsKCmV4dGVy biBjaGFyIF9zdGV4dCwgX2V0ZXh0OwojIDIwMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvYXNtL2h3X2lycS5oIgpleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9mX2NwdV9tYXNrOwpleHRl cm4gdW5zaWduZWQgaW50ICogcHJvZl9idWZmZXI7CmV4dGVybiB1bnNpZ25lZCBsb25nIHByb2Zf bGVuOwpleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9mX3NoaWZ0OwoKCgoKCnN0YXRpYyBpbmxpbmUg dm9pZCB4ODZfZG9fcHJvZmlsZSAodW5zaWduZWQgbG9uZyBlaXApCnsKICAgICAgICBpZiAoIXBy b2ZfYnVmZmVyKQogICAgICAgICAgICAgICAgcmV0dXJuOwoKCgoKCiAgICAgICAgaWYgKCEoKDE8 PDApICYgcHJvZl9jcHVfbWFzaykpCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgIGVp cCAtPSAodW5zaWduZWQgbG9uZykgJl9zdGV4dDsKICAgICAgICBlaXAgPj49IHByb2Zfc2hpZnQ7 CgoKCgoKICAgICAgICBpZiAoZWlwID4gcHJvZl9sZW4tMSkKICAgICAgICAgICAgICAgIGVpcCA9 IHByb2ZfbGVuLTE7CiAgICAgICAgYXRvbWljX2luYygoYXRvbWljX3QgKikmcHJvZl9idWZmZXJb ZWlwXSk7Cn0KCgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBo d19pbnRlcnJ1cHRfdHlwZSAqaCwgdW5zaWduZWQgaW50IGkpIHt9CiMgNzAgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2lycS5oIiAyCgpleHRlcm4gaW50IGhhbmRsZV9JUlFf ZXZlbnQodW5zaWduZWQgaW50LCBzdHJ1Y3QgcHRfcmVncyAqLCBzdHJ1Y3QgaXJxYWN0aW9uICop OwpleHRlcm4gaW50IHNldHVwX2lycSh1bnNpZ25lZCBpbnQgLCBzdHJ1Y3QgaXJxYWN0aW9uICog KTsKCmV4dGVybiBod19pcnFfY29udHJvbGxlciBub19pcnFfdHlwZTsKZXh0ZXJuIHZvaWQgbm9f YWN0aW9uKGludCBjcGwsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwojIDcg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9oYXJkaXJxLmgiIDIKCgp0eXBlZGVm IHN0cnVjdCB7CiAgICAgICAgdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwogICAgICAg IHVuc2lnbmVkIGludCBfX2xvY2FsX2lycV9jb3VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgX19s b2NhbF9iaF9jb3VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgX19zeXNjYWxsX2NvdW50OwogICAg ICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqIF9fa3NvZnRpcnFkX3Rhc2s7CiAgICAgICAgdW5zaWdu ZWQgaW50IF9fbm1pX2NvdW50Owp9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKCgxIDw8ICgo NSkpKSkpKSBpcnFfY3B1c3RhdF90OwoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVk ZS9saW51eC9pcnFfY3B1c3RhdC5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNs dWRlL2xpbnV4L2lycV9jcHVzdGF0LmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1 ZGUvbGludXgvY29uZmlnLmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUv bGludXgvaXJxX2NwdXN0YXQuaCIgMgoKCgoKCgoKZXh0ZXJuIGlycV9jcHVzdGF0X3QgaXJxX3N0 YXRbXTsKIyAxOSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCIg MgojIDQ2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zb2Z0aXJxLmgiIDEKCgoK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vYXRvbWljLmgiIDEKIyA1ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vc29mdGlycS5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCIgMQojIDYgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zb2Z0aXJxLmgiIDIKIyA0NyAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiIDIKIyA1NiAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiCmVudW0KewogICAgICAgIEhJX1NPRlRJ UlE9MCwKICAgICAgICBORVRfVFhfU09GVElSUSwKICAgICAgICBORVRfUlhfU09GVElSUSwKICAg ICAgICBUQVNLTEVUX1NPRlRJUlEKfTsKCgoKCgpzdHJ1Y3Qgc29mdGlycV9hY3Rpb24KewogICAg ICAgIHZvaWQgKCphY3Rpb24pKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqKTsKICAgICAgICB2b2lk ICpkYXRhOwp9OwoKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSB2b2lkIGRvX3NvZnRpcnEo dm9pZCk7CmV4dGVybiB2b2lkIG9wZW5fc29mdGlycShpbnQgbnIsIHZvaWQgKCphY3Rpb24pKHN0 cnVjdCBzb2Z0aXJxX2FjdGlvbiopLCB2b2lkICpkYXRhKTsKZXh0ZXJuIHZvaWQgc29mdGlycV9p bml0KHZvaWQpOwoKZXh0ZXJuIHZvaWQgY3B1X3JhaXNlX3NvZnRpcnEodW5zaWduZWQgaW50IGNw dSwgdW5zaWduZWQgaW50IG5yKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2 b2lkIHJhaXNlX3NvZnRpcnEodW5zaWduZWQgaW50IG5yKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJt KDMpKSk7CiMgMTAzICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9pbnRlcnJ1 cHQuaCIKc3RydWN0IHRhc2tsZXRfc3RydWN0CnsKICAgICAgICBzdHJ1Y3QgdGFza2xldF9zdHJ1 Y3QgKm5leHQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzdGF0ZTsKICAgICAgICBhdG9taWNfdCBj b3VudDsKICAgICAgICB2b2lkICgqZnVuYykodW5zaWduZWQgbG9uZyk7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBkYXRhOwp9OwojIDExOSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvaW50ZXJydXB0LmgiCmVudW0KewogICAgICAgIFRBU0tMRVRfU1RBVEVfU0NIRUQsCiAgICAg ICAgVEFTS0xFVF9TVEFURV9SVU4KfTsKCnN0cnVjdCB0YXNrbGV0X2hlYWQKewogICAgICAgIHN0 cnVjdCB0YXNrbGV0X3N0cnVjdCAqbGlzdDsKfSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18o KDEgPDwgKCg1KSkpKSkpOwoKZXh0ZXJuIHN0cnVjdCB0YXNrbGV0X2hlYWQgdGFza2xldF92ZWNb MV07CmV4dGVybiBzdHJ1Y3QgdGFza2xldF9oZWFkIHRhc2tsZXRfaGlfdmVjWzFdOwojIDE1NSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiCmV4dGVybiB2 b2lkIF9fdGFza2xldF9zY2hlZHVsZShzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpIF9fYXR0cmli dXRlX18oKHJlZ3Bhcm0oMykpKTsKCnN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X3NjaGVkdWxl KHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkKewogICAgICAgIGlmICghdGVzdF9hbmRfc2V0X2Jp dChUQVNLTEVUX1NUQVRFX1NDSEVELCAmdC0+c3RhdGUpKQogICAgICAgICAgICAgICAgX190YXNr bGV0X3NjaGVkdWxlKHQpOwp9CgpleHRlcm4gdm9pZCBfX3Rhc2tsZXRfaGlfc2NoZWR1bGUoc3Ry dWN0IHRhc2tsZXRfc3RydWN0ICp0KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CgpzdGF0 aWMgaW5saW5lIHZvaWQgdGFza2xldF9oaV9zY2hlZHVsZShzdHJ1Y3QgdGFza2xldF9zdHJ1Y3Qg KnQpCnsKICAgICAgICBpZiAoIXRlc3RfYW5kX3NldF9iaXQoVEFTS0xFVF9TVEFURV9TQ0hFRCwg JnQtPnN0YXRlKSkKICAgICAgICAgICAgICAgIF9fdGFza2xldF9oaV9zY2hlZHVsZSh0KTsKfQoK CnN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X2Rpc2FibGVfbm9zeW5jKHN0cnVjdCB0YXNrbGV0 X3N0cnVjdCAqdCkKewogICAgICAgIGF0b21pY19pbmMoJnQtPmNvdW50KTsKICAgICAgICBfX2Fz bV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQg dGFza2xldF9kaXNhYmxlKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkKewogICAgICAgIHRhc2ts ZXRfZGlzYWJsZV9ub3N5bmModCk7CiAgICAgICAgZG8geyB9IHdoaWxlICgwKTsKICAgICAgICBf X2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOwp9CgpzdGF0aWMgaW5saW5lIHZv aWQgdGFza2xldF9lbmFibGUoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KQp7CiAgICAgICAgX19h c21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsKICAgICAgICBhdG9taWNfZGVjKCZ0 LT5jb3VudCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X2hpX2VuYWJsZShzdHJ1Y3Qg dGFza2xldF9zdHJ1Y3QgKnQpCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6 Im1lbW9yeSIpOwogICAgICAgIGF0b21pY19kZWMoJnQtPmNvdW50KTsKfQoKZXh0ZXJuIHZvaWQg dGFza2xldF9raWxsKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7CmV4dGVybiB2b2lkIHRhc2ts ZXRfaW5pdChzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQsCiAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICgqZnVuYykodW5zaWduZWQgbG9uZyksIHVuc2lnbmVkIGxvbmcgZGF0YSk7CiMgMjIy ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCIKZXh0ZXJu IHN0cnVjdCB0YXNrbGV0X3N0cnVjdCBiaF90YXNrX3ZlY1tdOwoKCmV4dGVybiBzcGlubG9ja190 IGdsb2JhbF9iaF9sb2NrOwoKc3RhdGljIGlubGluZSB2b2lkIG1hcmtfYmgoaW50IG5yKQp7CiAg ICAgICAgdGFza2xldF9oaV9zY2hlZHVsZShiaF90YXNrX3ZlYytucik7Cn0KCmV4dGVybiB2b2lk IGluaXRfYmgoaW50IG5yLCB2b2lkICgqcm91dGluZSkodm9pZCkpOwpleHRlcm4gdm9pZCByZW1v dmVfYmgoaW50IG5yKTsKIyAyNjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4 L2ludGVycnVwdC5oIgpleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9iZV9pcnFfb24odm9pZCk7CmV4 dGVybiBpbnQgcHJvYmVfaXJxX29mZih1bnNpZ25lZCBsb25nKTsKZXh0ZXJuIHVuc2lnbmVkIGlu dCBwcm9iZV9pcnFfbWFzayh1bnNpZ25lZCBsb25nKTsKIyA3ICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9hc20vc21wbG9jay5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2lu Y2x1ZGUvbGludXgvc3BpbmxvY2suaCIgMQojIDggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNs dWRlL2FzbS9zbXBsb2NrLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9s aW51eC9zY2hlZC5oIiAxCiMgOSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3Nt cGxvY2suaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9jdXJyZW50 LmgiIDEKIyAxMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3NtcGxvY2suaCIg MgoKZXh0ZXJuIHNwaW5sb2NrX3Qga2VybmVsX2ZsYWc7CiMgNTEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2FzbS9zbXBsb2NrLmgiCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgbG9ja19r ZXJuZWwodm9pZCkKewoKICAgICAgICBpZiAoZ2V0X2N1cnJlbnQoKS0+bG9ja19kZXB0aCA9PSAt MSkKICAgICAgICAgICAgICAgIGRvIHsgZG8geyArK2dldF9jdXJyZW50KCktPnByZWVtcHRfY291 bnQ7IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOyAo dm9pZCkoJmtlcm5lbF9mbGFnKTsgfSB3aGlsZSgwKTsKICAgICAgICArK2dldF9jdXJyZW50KCkt PmxvY2tfZGVwdGg7CiMgNzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9zbXBs b2NrLmgiCn0KCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgdW5sb2NrX2tlcm5lbCh2b2lkKQp7CiAg ICAgICAgaWYgKGdldF9jdXJyZW50KCktPmxvY2tfZGVwdGggPCAwKQogICAgICAgICAgICAgICAg X19hc21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYsMHgwYiIpOwoKICAgICAgICBpZiAoLS1n ZXRfY3VycmVudCgpLT5sb2NrX2RlcHRoIDwgMCkKICAgICAgICAgICAgICAgIGRvIHsgZG8geyB9 IHdoaWxlKDApOyBkbyB7IC0tZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudDsgX19hc21fXyBf X3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgaWYgKChnZXRfY3VycmVudCgpLT5wcmVlbXB0 X2NvdW50ID09IDApICYmIGdldF9jdXJyZW50KCktPm5lZWRfcmVzY2hlZCkgcHJlZW1wdF9zY2hl ZHVsZSgpOyB9IHdoaWxlICgwKTsgfSB3aGlsZSAoMCk7CiMgODkgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2FzbS9zbXBsb2NrLmgiCn0KIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvbGludXgvc21wX2xvY2suaCIgMgojIDI2ICJrZXJuZWwvc2NoZWQuYyIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L25taS5oIiAxCgoKCgoKCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2lycS5oIiAxCiMgOCAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvbm1pLmgiIDIKIyAxNyAiL3Vzci9zcmMvbGludXgt Mi40LjEzL2luY2x1ZGUvbGludXgvbm1pLmgiCmV4dGVybiB2b2lkIHRvdWNoX25taV93YXRjaGRv Zyh2b2lkKTsKIyAyNyAia2VybmVsL3NjaGVkLmMiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCIgMQojIDI4ICJrZXJuZWwvc2NoZWQuYyIgMgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgiIDEK CgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQoj IDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vaXJxLmgiIDEKIyA2ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc21wLmgiIDEKIyA3ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvdGhyZWFkcy5oIiAxCiMgOCAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaCIgMgojIDE4ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oIgpzdHJ1Y3Qga2VybmVsX3N0 YXQgewogICAgICAgIHVuc2lnbmVkIGludCBwZXJfY3B1X3VzZXJbMV0sCiAgICAgICAgICAgICAg ICAgICAgIHBlcl9jcHVfbmljZVsxXSwKICAgICAgICAgICAgICAgICAgICAgcGVyX2NwdV9zeXN0 ZW1bMV07CiAgICAgICAgdW5zaWduZWQgaW50IGRrX2RyaXZlWzk5XVsxNl07CiAgICAgICAgdW5z aWduZWQgaW50IGRrX2RyaXZlX3Jpb1s5OV1bMTZdOwogICAgICAgIHVuc2lnbmVkIGludCBka19k cml2ZV93aW9bOTldWzE2XTsKICAgICAgICB1bnNpZ25lZCBpbnQgZGtfZHJpdmVfcmJsa1s5OV1b MTZdOwogICAgICAgIHVuc2lnbmVkIGludCBka19kcml2ZV93YmxrWzk5XVsxNl07CiAgICAgICAg dW5zaWduZWQgaW50IHBncGdpbiwgcGdwZ291dDsKICAgICAgICB1bnNpZ25lZCBpbnQgcHN3cGlu LCBwc3dwb3V0OwoKICAgICAgICB1bnNpZ25lZCBpbnQgaXJxc1sxXVsyMjRdOwoKICAgICAgICB1 bnNpZ25lZCBpbnQgaXBhY2tldHMsIG9wYWNrZXRzOwogICAgICAgIHVuc2lnbmVkIGludCBpZXJy b3JzLCBvZXJyb3JzOwogICAgICAgIHVuc2lnbmVkIGludCBjb2xsaXNpb25zOwogICAgICAgIHVu c2lnbmVkIGludCBjb250ZXh0X3N3dGNoOwp9OwoKZXh0ZXJuIHN0cnVjdCBrZXJuZWxfc3RhdCBr c3RhdDsKCgoKCgpzdGF0aWMgaW5saW5lIGludCBrc3RhdF9pcnFzIChpbnQgaXJxKQp7CiAgICAg ICAgaW50IGksIHN1bT0wOwoKICAgICAgICBmb3IgKGkgPSAwIDsgaSA8IDEgOyBpKyspCiAgICAg ICAgICAgICAgICBzdW0gKz0ga3N0YXQuaXJxc1swXVtpcnFdOwoKICAgICAgICByZXR1cm4gc3Vt Owp9CiMgMjkgImtlcm5lbC9zY2hlZC5jIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2lu Y2x1ZGUvbGludXgvY29tcGxldGlvbi5oIiAxCiMgMzAgImtlcm5lbC9zY2hlZC5jIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaCIgMQojIDMxICJr ZXJuZWwvc2NoZWQuYyIgMgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20v dWFjY2Vzcy5oIiAxCgoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGlu dXgvY29uZmlnLmgiIDEKIyA4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vdWFj Y2Vzcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvc2NoZWQu aCIgMQojIDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS91YWNjZXNzLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oIiAxCiMg MTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS91YWNjZXNzLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vcGFnZS5oIiAxCiMgMTEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS91YWNjZXNzLmgiIDIKIyAzNSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIKZXh0ZXJuIGludCBfX3ZlcmlmeV93cml0 ZShjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOwojIDYyICIvdXNyL3NyYy9saW51eC0yLjQu MTMvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpzdGF0aWMgaW5saW5lIGludCB2ZXJpZnlfYXJlYShp bnQgdHlwZSwgY29uc3Qgdm9pZCAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKewogICAgICAg IHJldHVybiAoKHsgdW5zaWduZWQgbG9uZyBmbGFnLHN1bTsgYXNtKCJhZGRsICUzLCUxIDsgc2Ji bCAlMCwlMDsgY21wbCAlMSwlNDsgc2JibCAkMCwlMCIgOiI9JnIiIChmbGFnKSwgIj1yIiAoc3Vt KSA6IjEiIChhZGRyKSwiZyIgKChpbnQpKHNpemUpKSwiZyIgKGdldF9jdXJyZW50KCktPmFkZHJf bGltaXQuc2VnKSk7IGZsYWc7IH0pID09IDApID8gMCA6IC0xNDsKfQojIDgxICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxl X2VudHJ5CnsKICAgICAgICB1bnNpZ25lZCBsb25nIGluc24sIGZpeHVwOwp9OwoKCmV4dGVybiB1 bnNpZ25lZCBsb25nIHNlYXJjaF9leGNlcHRpb25fdGFibGUodW5zaWduZWQgbG9uZyk7CiMgMTA1 ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpleHRlcm4gdm9p ZCBfX2dldF91c2VyXzEodm9pZCk7CmV4dGVybiB2b2lkIF9fZ2V0X3VzZXJfMih2b2lkKTsKZXh0 ZXJuIHZvaWQgX19nZXRfdXNlcl80KHZvaWQpOwojIDEyNyAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIKZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl8xKHZvaWQpOwpl eHRlcm4gdm9pZCBfX3B1dF91c2VyXzIodm9pZCk7CmV4dGVybiB2b2lkIF9fcHV0X3VzZXJfNCh2 b2lkKTsKZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl84KHZvaWQpOwoKZXh0ZXJuIHZvaWQgX19wdXRf dXNlcl9iYWQodm9pZCk7CiMgMTg4ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20v dWFjY2Vzcy5oIgpzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGJ1ZlsxMDBd OyB9OwojIDIyMCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIK ZXh0ZXJuIGxvbmcgX19nZXRfdXNlcl9iYWQodm9pZCk7CiMgMzA4ICIvdXNyL3NyYy9saW51eC0y LjQuMTMvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcK X19nZW5lcmljX2NvcHlfZnJvbV91c2VyX25vY2hlY2sodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZy b20sIHVuc2lnbmVkIGxvbmcgbikKewogICAgICAgIGRvIHsgaW50IF9fZDAsIF9fZDE7IF9fYXNt X18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiCW1vdmwgJTMsJTBcbiIgIjE6CXJl cDsgbW92c2JcbiIgIjI6XG4iICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICIzOglsZWEgMCgl MywlMCw0KSwlMFxuIiAiNDoJcHVzaGwgJTBcbiIgIglwdXNobCAlJWVheFxuIiAiCXhvcmwgJSVl YXgsJSVlYXhcbiIgIglyZXA7IHN0b3NiXG4iICIJcG9wbCAlJWVheFxuIiAiCXBvcGwgJTBcbiIg IglqbXAgMmJcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAi CS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsM2JcbiIgIgkubG9uZyAxYiw0YlxuIiAiLnByZXZpb3Vz IiA6ICI9JmMiKG4pLCAiPSZEIiAoX19kMCksICI9JlMiIChfX2QxKSA6ICJyIihuICYgMyksICIw IihuIC8gNCksICIxIih0byksICIyIihmcm9tKSA6ICJtZW1vcnkiKTsgfSB3aGlsZSAoMCk7CiAg ICAgICAgcmV0dXJuIG47Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwpfX2dlbmVyaWNf Y29weV90b191c2VyX25vY2hlY2sodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVk IGxvbmcgbikKewogICAgICAgIGRvIHsgaW50IF9fZDAsIF9fZDE7IF9fYXNtX18gX192b2xhdGls ZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiCW1vdmwgJTMsJTBcbiIgIjE6CXJlcDsgbW92c2JcbiIg IjI6XG4iICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICIzOglsZWEgMCglMywlMCw0KSwlMFxu IiAiCWptcCAyYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4i ICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwzYlxuIiAiCS5sb25nIDFiLDJiXG4iICIucHJldmlv dXMiIDogIj0mYyIobiksICI9JkQiIChfX2QwKSwgIj0mUyIgKF9fZDEpIDogInIiKG4gJiAzKSwg IjAiKG4gLyA0KSwgIjEiKHRvKSwgIjIiKGZyb20pIDogIm1lbW9yeSIpOyB9IHdoaWxlICgwKTsK ICAgICAgICByZXR1cm4gbjsKfQojIDU0MyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUv YXNtL3VhY2Nlc3MuaCIKdW5zaWduZWQgbG9uZyBfX2dlbmVyaWNfY29weV90b191c2VyKHZvaWQg KiwgY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCBsb25nKTsKdW5zaWduZWQgbG9uZyBfX2dlbmVyaWNf Y29weV9mcm9tX3VzZXIodm9pZCAqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOwoKc3Rh dGljIGlubGluZSB1bnNpZ25lZCBsb25nCl9fY29uc3RhbnRfY29weV90b191c2VyKHZvaWQgKnRv LCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCnsKICAgICAgICBwcmVmZXRjaChm cm9tKTsKICAgICAgICBpZiAoKCh7IHVuc2lnbmVkIGxvbmcgZmxhZyxzdW07IGFzbSgiYWRkbCAl MywlMSA7IHNiYmwgJTAsJTA7IGNtcGwgJTEsJTQ7IHNiYmwgJDAsJTAiIDoiPSZyIiAoZmxhZyks ICI9ciIgKHN1bSkgOiIxIiAodG8pLCJnIiAoKGludCkobikpLCJnIiAoZ2V0X2N1cnJlbnQoKS0+ YWRkcl9saW1pdC5zZWcpKTsgZmxhZzsgfSkgPT0gMCkpCiAgICAgICAgICAgICAgICBkbyB7IGlu dCBfX2QwLCBfX2QxOyBzd2l0Y2ggKG4gJiAzKSB7IGRlZmF1bHQ6IF9fYXNtX18gX192b2xhdGls ZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiMTpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIg IjI6CXNobCAkMiwlMFxuIiAiCWptcCAxYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4 X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwyYlxuIiAiLnByZXZpb3Vz IiA6ICI9YyIobiksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIo dG8pLCAiMCIobi80KSA6ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMTogX19hc21fXyBfX3ZvbGF0 aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIxOgltb3ZzYlxuIiAiMjpcbiIgIi5zZWN0aW9uIC5m aXh1cCxcImF4XCJcbiIgIjM6CXNobCAkMiwlMFxuIiAiNDoJaW5jbCAlMFxuIiAiCWptcCAyYlxu IiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRc biIgIgkubG9uZyAwYiwzYlxuIiAiCS5sb25nIDFiLDRiXG4iICIucHJldmlvdXMiIDogIj1jIihu KSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihu LzQpIDogIm1lbW9yeSIpOyBicmVhazsgY2FzZSAyOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6 CXJlcDsgbW92c2xcbiIgIjE6CW1vdnN3XG4iICIyOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhc IlxuIiAiMzoJc2hsICQyLCUwXG4iICI0OglhZGRsICQyLCUwXG4iICIJam1wIDJiXG4iICIucHJl dmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5s b25nIDBiLDNiXG4iICIJLmxvbmcgMWIsNGJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZT IiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAi bWVtb3J5Iik7IGJyZWFrOyBjYXNlIDM6IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBt b3ZzbFxuIiAiMToJbW92c3dcbiIgIjI6CW1vdnNiXG4iICIzOlxuIiAiLnNlY3Rpb24gLmZpeHVw LFwiYXhcIlxuIiAiNDoJc2hsICQyLCUwXG4iICI1OglhZGRsICQyLCUwXG4iICI2OglpbmNsICUw XG4iICIJam1wIDNiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJc biIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDRiXG4iICIJLmxvbmcgMWIsNWJcbiIgIgkubG9u ZyAyYiw2YlxuIiAiLnByZXZpb3VzIiA6ICI9YyIobiksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9f ZDEpIDogIjEiKGZyb20pLCAiMiIodG8pLCAiMCIobi80KSA6ICJtZW1vcnkiKTsgYnJlYWs7IH0g fSB3aGlsZSAoMCk7CiAgICAgICAgcmV0dXJuIG47Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQg bG9uZwpfX2NvbnN0YW50X2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9t LCB1bnNpZ25lZCBsb25nIG4pCnsKICAgICAgICBpZiAoKCh7IHVuc2lnbmVkIGxvbmcgZmxhZyxz dW07IGFzbSgiYWRkbCAlMywlMSA7IHNiYmwgJTAsJTA7IGNtcGwgJTEsJTQ7IHNiYmwgJDAsJTAi IDoiPSZyIiAoZmxhZyksICI9ciIgKHN1bSkgOiIxIiAoZnJvbSksImciICgoaW50KShuKSksImci IChnZXRfY3VycmVudCgpLT5hZGRyX2xpbWl0LnNlZykpOyBmbGFnOyB9KSA9PSAwKSkKICAgICAg ICAgICAgICAgIGRvIHsgaW50IF9fZDAsIF9fZDE7IHN3aXRjaCAobiAmIDMpIHsgZGVmYXVsdDog X19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIxOlxuIiAiLnNlY3Rpb24g LmZpeHVwLFwiYXhcIlxuIiAiMjoJcHVzaGwgJTBcbiIgIglwdXNobCAlJWVheFxuIiAiCXhvcmwg JSVlYXgsJSVlYXhcbiIgIglyZXA7IHN0b3NsXG4iICIJcG9wbCAlJWVheFxuIiAiCXBvcGwgJTBc biIgIglzaGwgJDIsJTBcbiIgIglqbXAgMWJcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19l eF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsMmJcbiIgIi5wcmV2aW91 cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9tKSwgIjIi KHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNlIDE6IF9fYXNtX18gX192b2xh dGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c2JcbiIgIjI6XG4iICIuc2VjdGlvbiAu Zml4dXAsXCJheFwiXG4iICIzOglwdXNobCAlMFxuIiAiCXB1c2hsICUlZWF4XG4iICIJeG9ybCAl JWVheCwlJWVheFxuIiAiCXJlcDsgc3Rvc2xcbiIgIglzdG9zYlxuIiAiCXBvcGwgJSVlYXhcbiIg Iglwb3BsICUwXG4iICIJc2hsICQyLCUwXG4iICIJaW5jbCAlMFxuIiAiCWptcCAyYlxuIiAiNDoJ cHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJc3Rvc2JcbiIgIglwb3BsICUl ZWF4XG4iICIJaW5jbCAlMFxuIiAiCWptcCAyYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBf X2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwzYlxuIiAiCS5sb25n IDFiLDRiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19k MSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVhazsgY2Fz ZSAyOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6CW1vdnN3XG4i ICIyOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAiMzoJcHVzaGwgJTBcbiIgIglwdXNo bCAlJWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIgIglyZXA7IHN0b3NsXG4iICIJc3Rvc3dc biIgIglwb3BsICUlZWF4XG4iICIJcG9wbCAlMFxuIiAiCXNobCAkMiwlMFxuIiAiCWFkZGwgJDIs JTBcbiIgIglqbXAgMmJcbiIgIjQ6CXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxu IiAiCXN0b3N3XG4iICIJcG9wbCAlJWVheFxuIiAiCWFkZGwgJDIsJTBcbiIgIglqbXAgMmJcbiIg Ii5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4i ICIJLmxvbmcgMGIsM2JcbiIgIgkubG9uZyAxYiw0YlxuIiAiLnByZXZpb3VzIiA6ICI9YyIobiks ICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIodG8pLCAiMCIobi80 KSA6ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMzogX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOgly ZXA7IG1vdnNsXG4iICIxOgltb3Zzd1xuIiAiMjoJbW92c2JcbiIgIjM6XG4iICIuc2VjdGlvbiAu Zml4dXAsXCJheFwiXG4iICI0OglwdXNobCAlMFxuIiAiCXB1c2hsICUlZWF4XG4iICIJeG9ybCAl JWVheCwlJWVheFxuIiAiCXJlcDsgc3Rvc2xcbiIgIglzdG9zd1xuIiAiCXN0b3NiXG4iICIJcG9w bCAlJWVheFxuIiAiCXBvcGwgJTBcbiIgIglzaGwgJDIsJTBcbiIgIglhZGRsICQzLCUwXG4iICIJ am1wIDJiXG4iICI1OglwdXNobCAlJWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIgIglzdG9z d1xuIiAiCXN0b3NiXG4iICIJcG9wbCAlJWVheFxuIiAiCWFkZGwgJDMsJTBcbiIgIglqbXAgMmJc biIgIjY6CXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAiCXN0b3NiXG4iICIJ cG9wbCAlJWVheFxuIiAiCWluY2wgJTBcbiIgIglqbXAgM2JcbiIgIi5wcmV2aW91c1xuIiAiLnNl Y3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsNGJcbiIg IgkubG9uZyAxYiw1YlxuIiAiCS5sb25nIDJiLDZiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwg Ij0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQp IDogIm1lbW9yeSIpOyBicmVhazsgfSB9IHdoaWxlICgwKTsKICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3Ao KG4pKSA/IF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KCgodG8pKSwoKDB4MDEwMTAxMDFV TCoodW5zaWduZWQgY2hhcikoMCkpKSwoKG4pKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgodG8p KSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKG4pKSkpIDogKF9fYnVpbHRp bl9jb25zdGFudF9wKChuKSkgPyBfX21lbXNldF9nZW5lcmljKCgoKHRvKSkpLCgoKDApKSksKCgo bikpKSkgOiBfX21lbXNldF9nZW5lcmljKCgodG8pKSwoKDApKSwoKG4pKSkpKTsKICAgICAgICBy ZXR1cm4gbjsKfQoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCl9fY29uc3RhbnRfY29weV90 b191c2VyX25vY2hlY2sodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcg bikKewogICAgICAgIGRvIHsgaW50IF9fZDAsIF9fZDE7IHN3aXRjaCAobiAmIDMpIHsgZGVmYXVs dDogX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIxOlxuIiAiLnNlY3Rp b24gLmZpeHVwLFwiYXhcIlxuIiAiMjoJc2hsICQyLCUwXG4iICIJam1wIDFiXG4iICIucHJldmlv dXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25n IDBiLDJiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19k MSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVhazsgY2Fz ZSAxOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6CW1vdnNiXG4i ICIyOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAiMzoJc2hsICQyLCUwXG4iICI0Oglp bmNsICUwXG4iICIJam1wIDJiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUs XCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDNiXG4iICIJLmxvbmcgMWIsNGJcbiIg Ii5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihm cm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNlIDI6IF9fYXNt X18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c3dcbiIgIjI6XG4iICIu c2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICIzOglzaGwgJDIsJTBcbiIgIjQ6CWFkZGwgJDIsJTBc biIgIglqbXAgMmJcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxu IiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsM2JcbiIgIgkubG9uZyAxYiw0YlxuIiAiLnByZXZp b3VzIiA6ICI9YyIobiksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAi MiIodG8pLCAiMCIobi80KSA6ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMzogX19hc21fXyBfX3Zv bGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIxOgltb3Zzd1xuIiAiMjoJbW92c2JcbiIgIjM6 XG4iICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICI0OglzaGwgJDIsJTBcbiIgIjU6CWFkZGwg JDIsJTBcbiIgIjY6CWluY2wgJTBcbiIgIglqbXAgM2JcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rp b24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsNGJcbiIgIgku bG9uZyAxYiw1YlxuIiAiCS5sb25nIDJiLDZiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0m UyIgKF9fZDApLCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDog Im1lbW9yeSIpOyBicmVhazsgfSB9IHdoaWxlICgwKTsKICAgICAgICByZXR1cm4gbjsKfQoKc3Rh dGljIGlubGluZSB1bnNpZ25lZCBsb25nCl9fY29uc3RhbnRfY29weV9mcm9tX3VzZXJfbm9jaGVj ayh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQp7CiAgICAgICAg ZG8geyBpbnQgX19kMCwgX19kMTsgc3dpdGNoIChuICYgMykgeyBkZWZhdWx0OiBfX2FzbV9fIF9f dm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6XG4iICIuc2VjdGlvbiAuZml4dXAsXCJh eFwiXG4iICIyOglwdXNobCAlMFxuIiAiCXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVh eFxuIiAiCXJlcDsgc3Rvc2xcbiIgIglwb3BsICUlZWF4XG4iICIJcG9wbCAlMFxuIiAiCXNobCAk MiwlMFxuIiAiCWptcCAxYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwi YVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwyYlxuIiAiLnByZXZpb3VzIiA6ICI9YyIo biksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIodG8pLCAiMCIo bi80KSA6ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMTogX19hc21fXyBfX3ZvbGF0aWxlX18oICIw OglyZXA7IG1vdnNsXG4iICIxOgltb3ZzYlxuIiAiMjpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4 XCJcbiIgIjM6CXB1c2hsICUwXG4iICIJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4 XG4iICIJcmVwOyBzdG9zbFxuIiAiCXN0b3NiXG4iICIJcG9wbCAlJWVheFxuIiAiCXBvcGwgJTBc biIgIglzaGwgJDIsJTBcbiIgIglpbmNsICUwXG4iICIJam1wIDJiXG4iICI0OglwdXNobCAlJWVh eFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIgIglzdG9zYlxuIiAiCXBvcGwgJSVlYXhcbiIgIglp bmNsICUwXG4iICIJam1wIDJiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUs XCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDNiXG4iICIJLmxvbmcgMWIsNGJcbiIg Ii5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihm cm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNlIDI6IF9fYXNt X18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c3dcbiIgIjI6XG4iICIu c2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICIzOglwdXNobCAlMFxuIiAiCXB1c2hsICUlZWF4XG4i ICIJeG9ybCAlJWVheCwlJWVheFxuIiAiCXJlcDsgc3Rvc2xcbiIgIglzdG9zd1xuIiAiCXBvcGwg JSVlYXhcbiIgIglwb3BsICUwXG4iICIJc2hsICQyLCUwXG4iICIJYWRkbCAkMiwlMFxuIiAiCWpt cCAyYlxuIiAiNDoJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJc3Rvc3dc biIgIglwb3BsICUlZWF4XG4iICIJYWRkbCAkMiwlMFxuIiAiCWptcCAyYlxuIiAiLnByZXZpb3Vz XG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAw YiwzYlxuIiAiCS5sb25nIDFiLDRiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9f ZDApLCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9y eSIpOyBicmVhazsgY2FzZSAzOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xc biIgIjE6CW1vdnN3XG4iICIyOgltb3ZzYlxuIiAiMzpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4 XCJcbiIgIjQ6CXB1c2hsICUwXG4iICIJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4 XG4iICIJcmVwOyBzdG9zbFxuIiAiCXN0b3N3XG4iICIJc3Rvc2JcbiIgIglwb3BsICUlZWF4XG4i ICIJcG9wbCAlMFxuIiAiCXNobCAkMiwlMFxuIiAiCWFkZGwgJDMsJTBcbiIgIglqbXAgMmJcbiIg IjU6CXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAiCXN0b3N3XG4iICIJc3Rv c2JcbiIgIglwb3BsICUlZWF4XG4iICIJYWRkbCAkMywlMFxuIiAiCWptcCAyYlxuIiAiNjoJcHVz aGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJc3Rvc2JcbiIgIglwb3BsICUlZWF4 XG4iICIJaW5jbCAlMFxuIiAiCWptcCAzYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4 X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiw0YlxuIiAiCS5sb25nIDFi LDViXG4iICIJLmxvbmcgMmIsNmJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19k MCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5 Iik7IGJyZWFrOyB9IH0gd2hpbGUgKDApOwogICAgICAgIHJldHVybiBuOwp9CiMgNTk5ICIvdXNy L3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpsb25nIHN0cm5jcHlfZnJv bV91c2VyKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBsb25nIGNvdW50KTsKbG9uZyBfX3N0 cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBsb25nIGNvdW50KTsK Cmxvbmcgc3Rybmxlbl91c2VyKGNvbnN0IGNoYXIgKnN0ciwgbG9uZyBuKTsKdW5zaWduZWQgbG9u ZyBjbGVhcl91c2VyKHZvaWQgKm1lbSwgdW5zaWduZWQgbG9uZyBsZW4pOwp1bnNpZ25lZCBsb25n IF9fY2xlYXJfdXNlcih2b2lkICptZW0sIHVuc2lnbmVkIGxvbmcgbGVuKTsKIyAzMyAia2VybmVs L3NjaGVkLmMiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vbW11X2Nv bnRleHQuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2xpbnV4L2Nv bmZpZy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL21tdV9jb250 ZXh0LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vZGVzYy5oIiAx CgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL2xkdC5oIiAxCiMgMTUg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9sZHQuaCIKc3RydWN0IG1vZGlmeV9s ZHRfbGR0X3MgewogICAgICAgIHVuc2lnbmVkIGludCBlbnRyeV9udW1iZXI7CiAgICAgICAgdW5z aWduZWQgbG9uZyBiYXNlX2FkZHI7CiAgICAgICAgdW5zaWduZWQgaW50IGxpbWl0OwogICAgICAg IHVuc2lnbmVkIGludCBzZWdfMzJiaXQ6MTsKICAgICAgICB1bnNpZ25lZCBpbnQgY29udGVudHM6 MjsKICAgICAgICB1bnNpZ25lZCBpbnQgcmVhZF9leGVjX29ubHk6MTsKICAgICAgICB1bnNpZ25l ZCBpbnQgbGltaXRfaW5fcGFnZXM6MTsKICAgICAgICB1bnNpZ25lZCBpbnQgc2VnX25vdF9wcmVz ZW50OjE7CiAgICAgICAgdW5zaWduZWQgaW50IHVzZWFibGU6MTsKfTsKIyA1ICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9hc20vZGVzYy5oIiAyCiMgNTIgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2FzbS9kZXNjLmgiCnN0cnVjdCBkZXNjX3N0cnVjdCB7CiAgICAgICAgdW5z aWduZWQgbG9uZyBhLGI7Cn07CgpleHRlcm4gc3RydWN0IGRlc2Nfc3RydWN0IGdkdF90YWJsZVtd OwpleHRlcm4gc3RydWN0IGRlc2Nfc3RydWN0ICppZHQsICpnZHQ7CgpzdHJ1Y3QgWGd0X2Rlc2Nf c3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzaXplOwogICAgICAgIHVuc2lnbmVkIGxv bmcgYWRkcmVzcyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKfTsKIyA3NSAiL3Vzci9zcmMvbGlu dXgtMi40LjEzL2luY2x1ZGUvYXNtL2Rlc2MuaCIKZXh0ZXJuIHN0cnVjdCBkZXNjX3N0cnVjdCBk ZWZhdWx0X2xkdFtdOwpleHRlcm4gdm9pZCBzZXRfaW50cl9nYXRlKHVuc2lnbmVkIGludCBpcnEs IHZvaWQgKiBhZGRyKTsKZXh0ZXJuIHZvaWQgc2V0X2xkdF9kZXNjKHVuc2lnbmVkIGludCBuLCB2 b2lkICphZGRyLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CmV4dGVybiB2b2lkIHNldF90c3NfZGVzYyh1 bnNpZ25lZCBpbnQgbiwgdm9pZCAqYWRkcik7CgpzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfTERU KHZvaWQpCnsKICAgICAgICBpbnQgY3B1ID0gMDsKICAgICAgICBzZXRfbGR0X2Rlc2MoY3B1LCAm ZGVmYXVsdF9sZHRbMF0sIDUpOwogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsbGR0ICUl YXgiOjoiYSIgKCgoKGNwdSk8PDIpICsgKDIwICsxKSk8PDMpKTsKfQoKCgoKc3RhdGljIGlubGlu ZSB2b2lkIGxvYWRfTERUIChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKewogICAgICAgIGludCBjcHUg PSAwOwogICAgICAgIHZvaWQgKnNlZ21lbnRzID0gbW0tPmNvbnRleHQuc2VnbWVudHM7CiAgICAg ICAgaW50IGNvdW50ID0gODE5MjsKCiAgICAgICAgaWYgKCFzZWdtZW50cykgewogICAgICAgICAg ICAgICAgc2VnbWVudHMgPSAmZGVmYXVsdF9sZHRbMF07CiAgICAgICAgICAgICAgICBjb3VudCA9 IDU7CiAgICAgICAgfQoKICAgICAgICBzZXRfbGR0X2Rlc2MoY3B1LCBzZWdtZW50cywgY291bnQp OwogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsbGR0ICUlYXgiOjoiYSIgKCgoKGNwdSk8 PDIpICsgKDIwICsxKSk8PDMpKTsKfQojIDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRl L2FzbS9tbXVfY29udGV4dC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUv YXNtL2F0b21pYy5oIiAxCiMgNyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL21t dV9jb250ZXh0LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vcGdh bGxvYy5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvbGludXgvY29u ZmlnLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vcGdhbGxvYy5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIiAx CiMgNiAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9maXhtYXAuaCIgMQojIDcgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMTMvaW5jbHVkZS9saW51eC90aHJlYWRzLmgiIDEKIyA4ICIvdXNyL3NyYy9saW51 eC0yLjQuMTMvaW5jbHVkZS9hc20vcGdhbGxvYy5oIiAyCiMgNTcgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMy9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgiCnN0YXRpYyBpbmxpbmUgcGdkX3QgKmdldF9wZ2Rf c2xvdyh2b2lkKQp7CiAgICAgICAgcGdkX3QgKnBnZCA9IChwZ2RfdCAqKV9fZ2V0X2ZyZWVfcGFn ZXMoKCgweDIwIHwgMHgxMCB8IDB4NDAgfCAweDgwKSksMCk7CgogICAgICAgIGlmIChwZ2QpIHsK ICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgwKSA/IChfX2J1aWx0aW5fY29u c3RhbnRfcCgoKCgoKHVuc2lnbmVkIGxvbmcpKDB4QzAwMDAwMDApKSkvKDFVTCA8PCAyMikpICog c2l6ZW9mKHBnZF90KSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKChwZ2QpKSwo KDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKCgoKCh1bnNpZ25lZCBsb25nKSgw eEMwMDAwMDAwKSkpLygxVUwgPDwgMjIpKSAqIHNpemVvZihwZ2RfdCkpKSkgOiBfX2NvbnN0YW50 X2NfbWVtc2V0KCgocGdkKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKCgo KCgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKS8oMVVMIDw8IDIyKSkgKiBzaXplb2YocGdk X3QpKSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoKCgoKHVuc2lnbmVkIGxvbmcpKDB4QzAw MDAwMDApKSkvKDFVTCA8PCAyMikpICogc2l6ZW9mKHBnZF90KSkpID8gX19tZW1zZXRfZ2VuZXJp YygoKChwZ2QpKSksKCgoMCkpKSwoKCgoKCgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKS8o MVVMIDw8IDIyKSkgKiBzaXplb2YocGdkX3QpKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKChwZ2Qp KSwoKDApKSwoKCgoKCh1bnNpZ25lZCBsb25nKSgweEMwMDAwMDAwKSkpLygxVUwgPDwgMjIpKSAq IHNpemVvZihwZ2RfdCkpKSkpKTsKICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRf cCgoMTAyNCAtICgoKCh1bnNpZ25lZCBsb25nKSgweEMwMDAwMDAwKSkpLygxVUwgPDwgMjIpKSkg KiBzaXplb2YocGdkX3QpKSA/IF9fY29uc3RhbnRfbWVtY3B5KChwZ2QgKyAoKCgodW5zaWduZWQg bG9uZykoMHhDMDAwMDAwMCkpKS8oMVVMIDw8IDIyKSkpLChzd2FwcGVyX3BnX2RpciArICgoKCh1 bnNpZ25lZCBsb25nKSgweEMwMDAwMDAwKSkpLygxVUwgPDwgMjIpKSksKCgxMDI0IC0gKCgoKHVu c2lnbmVkIGxvbmcpKDB4QzAwMDAwMDApKSkvKDFVTCA8PCAyMikpKSAqIHNpemVvZihwZ2RfdCkp KSA6IF9fbWVtY3B5KChwZ2QgKyAoKCgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKS8oMVVM IDw8IDIyKSkpLChzd2FwcGVyX3BnX2RpciArICgoKCh1bnNpZ25lZCBsb25nKSgweEMwMDAwMDAw KSkpLygxVUwgPDwgMjIpKSksKCgxMDI0IC0gKCgoKHVuc2lnbmVkIGxvbmcpKDB4QzAwMDAwMDAp KSkvKDFVTCA8PCAyMikpKSAqIHNpemVvZihwZ2RfdCkpKSk7CiAgICAgICAgfQogICAgICAgIHJl dHVybiBwZ2Q7Cn0KCgoKc3RhdGljIGlubGluZSBwZ2RfdCAqZ2V0X3BnZF9mYXN0KHZvaWQpCnsK ICAgICAgICB1bnNpZ25lZCBsb25nICpyZXQ7CgogICAgICAgIGRvIHsgKytnZXRfY3VycmVudCgp LT5wcmVlbXB0X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyB9 IHdoaWxlICgwKTsKICAgICAgICBpZiAoKHJldCA9IChib290X2NwdV9kYXRhLnBnZF9xdWljaykp ICE9ICgodm9pZCAqKTApKSB7CiAgICAgICAgICAgICAgICAoYm9vdF9jcHVfZGF0YS5wZ2RfcXVp Y2spID0gKHVuc2lnbmVkIGxvbmcgKikoKnJldCk7CiAgICAgICAgICAgICAgICByZXRbMF0gPSAw OwogICAgICAgICAgICAgICAgKGJvb3RfY3B1X2RhdGEucGd0YWJsZV9jYWNoZV9zeiktLTsKICAg ICAgICAgICAgICAgIGRvIHsgLS1nZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50OyBfX2FzbV9f IF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyBpZiAoKGdldF9jdXJyZW50KCktPnByZWVt cHRfY291bnQgPT0gMCkgJiYgZ2V0X2N1cnJlbnQoKS0+bmVlZF9yZXNjaGVkKSBwcmVlbXB0X3Nj aGVkdWxlKCk7IH0gd2hpbGUgKDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBk byB7IC0tZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudDsgX19hc21fXyBfX3ZvbGF0aWxlX18o IiI6IDogOiJtZW1vcnkiKTsgaWYgKChnZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50ID09IDAp ICYmIGdldF9jdXJyZW50KCktPm5lZWRfcmVzY2hlZCkgcHJlZW1wdF9zY2hlZHVsZSgpOyB9IHdo aWxlICgwKTsKICAgICAgICAgICAgICAgIHJldCA9ICh1bnNpZ25lZCBsb25nICopZ2V0X3BnZF9z bG93KCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAocGdkX3QgKilyZXQ7Cn0KCnN0YXRpYyBp bmxpbmUgdm9pZCBmcmVlX3BnZF9mYXN0KHBnZF90ICpwZ2QpCnsKICAgICAgICBkbyB7ICsrZ2V0 X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudDsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJt ZW1vcnkiKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgKih1bnNpZ25lZCBsb25nICopcGdkID0gKHVu c2lnbmVkIGxvbmcpIChib290X2NwdV9kYXRhLnBnZF9xdWljayk7CiAgICAgICAgKGJvb3RfY3B1 X2RhdGEucGdkX3F1aWNrKSA9ICh1bnNpZ25lZCBsb25nICopIHBnZDsKICAgICAgICAoYm9vdF9j cHVfZGF0YS5wZ3RhYmxlX2NhY2hlX3N6KSsrOwogICAgICAgIGRvIHsgLS1nZXRfY3VycmVudCgp LT5wcmVlbXB0X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyBp ZiAoKGdldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQgPT0gMCkgJiYgZ2V0X2N1cnJlbnQoKS0+ bmVlZF9yZXNjaGVkKSBwcmVlbXB0X3NjaGVkdWxlKCk7IH0gd2hpbGUgKDApOwp9CgpzdGF0aWMg aW5saW5lIHZvaWQgZnJlZV9wZ2Rfc2xvdyhwZ2RfdCAqcGdkKQp7CgoKCgoKCgogICAgICAgIGZy ZWVfcGFnZXMoKCh1bnNpZ25lZCBsb25nKXBnZCksMCk7Cgp9CgpzdGF0aWMgaW5saW5lIHB0ZV90 ICpwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJl c3MpCnsKICAgICAgICBwdGVfdCAqcHRlOwoKICAgICAgICBwdGUgPSAocHRlX3QgKikgX19nZXRf ZnJlZV9wYWdlcygoKDB4MjAgfCAweDEwIHwgMHg0MCB8IDB4ODApKSwwKTsKICAgICAgICBpZiAo cHRlKQogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKDApID8gKF9fYnVpbHRp bl9jb25zdGFudF9wKCgoMVVMIDw8IDEyKSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1z ZXQoKCgodm9pZCAqKShwdGUpKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSks KCgoMVVMIDw8IDEyKSkpKSA6IF9fY29uc3RhbnRfY19tZW1zZXQoKCgodm9pZCAqKShwdGUpKSks KCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKCgoMVVMIDw8IDEyKSkpKSkgOiAo X19idWlsdGluX2NvbnN0YW50X3AoKCgxVUwgPDwgMTIpKSkgPyBfX21lbXNldF9nZW5lcmljKCgo KCh2b2lkICopKHB0ZSkpKSksKCgoMCkpKSwoKCgoMVVMIDw8IDEyKSkpKSkgOiBfX21lbXNldF9n ZW5lcmljKCgoKHZvaWQgKikocHRlKSkpLCgoMCkpLCgoKDFVTCA8PCAxMikpKSkpKTsKICAgICAg ICByZXR1cm4gcHRlOwp9CgpzdGF0aWMgaW5saW5lIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2Zhc3Qo c3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKewogICAgICAgIHVu c2lnbmVkIGxvbmcgKnJldDsKCiAgICAgICAgZG8geyArK2dldF9jdXJyZW50KCktPnByZWVtcHRf Y291bnQ7IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDAp OwogICAgICAgIGlmICgocmV0ID0gKHVuc2lnbmVkIGxvbmcgKikoYm9vdF9jcHVfZGF0YS5wdGVf cXVpY2spKSAhPSAoKHZvaWQgKikwKSkgewogICAgICAgICAgICAgICAgKGJvb3RfY3B1X2RhdGEu cHRlX3F1aWNrKSA9ICh1bnNpZ25lZCBsb25nICopKCpyZXQpOwogICAgICAgICAgICAgICAgcmV0 WzBdID0gcmV0WzFdOwogICAgICAgICAgICAgICAgKGJvb3RfY3B1X2RhdGEucGd0YWJsZV9jYWNo ZV9zeiktLTsKICAgICAgICB9CiAgICAgICAgZG8geyAtLWdldF9jdXJyZW50KCktPnByZWVtcHRf Y291bnQ7IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IGlmICgoZ2V0X2N1 cnJlbnQoKS0+cHJlZW1wdF9jb3VudCA9PSAwKSAmJiBnZXRfY3VycmVudCgpLT5uZWVkX3Jlc2No ZWQpIHByZWVtcHRfc2NoZWR1bGUoKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgcmV0dXJuIChwdGVf dCAqKXJldDsKfQoKc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlX2Zhc3QocHRlX3QgKnB0ZSkK ewogICAgICAgIGRvIHsgKytnZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50OyBfX2FzbV9fIF9f dm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlICgwKTsKICAgICAgICAqKHVuc2ln bmVkIGxvbmcgKilwdGUgPSAodW5zaWduZWQgbG9uZykgKGJvb3RfY3B1X2RhdGEucHRlX3F1aWNr KTsKICAgICAgICAoYm9vdF9jcHVfZGF0YS5wdGVfcXVpY2spID0gKHVuc2lnbmVkIGxvbmcgKikg cHRlOwogICAgICAgIChib290X2NwdV9kYXRhLnBndGFibGVfY2FjaGVfc3opKys7CiAgICAgICAg ZG8geyAtLWdldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192b2xhdGlsZV9f KCIiOiA6IDoibWVtb3J5Iik7IGlmICgoZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudCA9PSAw KSAmJiBnZXRfY3VycmVudCgpLT5uZWVkX3Jlc2NoZWQpIHByZWVtcHRfc2NoZWR1bGUoKTsgfSB3 aGlsZSAoMCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9zbG93KHB0ZV90ICpwdGUp CnsKICAgICAgICBmcmVlX3BhZ2VzKCgodW5zaWduZWQgbG9uZylwdGUpLDApOwp9CiMgMTY0ICIv dXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vcGdhbGxvYy5oIgpleHRlcm4gaW50IGRv X2NoZWNrX3BndF9jYWNoZShpbnQsIGludCk7CiMgMTg2ICIvdXNyL3NyYy9saW51eC0yLjQuMTMv aW5jbHVkZS9hc20vcGdhbGxvYy5oIgpzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX21tKHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tKQp7CiAgICAgICAgaWYgKG1tID09IGdldF9jdXJyZW50KCktPmFj dGl2ZV9tbSkKICAgICAgICAgICAgICAgIGRvIHsgdW5zaWduZWQgaW50IHRtcHJlZzsgX19hc21f XyBfX3ZvbGF0aWxlX18oICJtb3ZsICUlY3IzLCAlMDsgICMgZmx1c2ggVExCIFxuIiAibW92bCAl MCwgJSVjcjM7ICAgICAgICAgICAgICBcbiIgOiAiPXIiICh0bXByZWcpIDo6ICJtZW1vcnkiKTsg fSB3aGlsZSAoMCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qg dm1fYXJlYV9zdHJ1Y3QgKnZtYSwKICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIpCnsKICAgICAg ICBpZiAodm1hLT52bV9tbSA9PSBnZXRfY3VycmVudCgpLT5hY3RpdmVfbW0pCiAgICAgICAgICAg ICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiaW52bHBnICUwIjogOiJtIiAoKihjaGFyICopIGFk ZHIpKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3QgbW1fc3Ry dWN0ICptbSwKICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkK ewogICAgICAgIGlmIChtbSA9PSBnZXRfY3VycmVudCgpLT5hY3RpdmVfbW0pCiAgICAgICAgICAg ICAgICBkbyB7IHVuc2lnbmVkIGludCB0bXByZWc7IF9fYXNtX18gX192b2xhdGlsZV9fKCAibW92 bCAlJWNyMywgJTA7ICAjIGZsdXNoIFRMQiBcbiIgIm1vdmwgJTAsICUlY3IzOyAgICAgICAgICAg ICAgXG4iIDogIj1yIiAodG1wcmVnKSA6OiAibWVtb3J5Iik7IH0gd2hpbGUgKDApOwp9CiMgMjM4 ICIvdXNyL3NyYy9saW51eC0yLjQuMTMvaW5jbHVkZS9hc20vcGdhbGxvYy5oIgpzdGF0aWMgaW5s aW5lIHZvaWQgZmx1c2hfdGxiX3BndGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2ln bmVkIGxvbmcgZW5kKQp7Cgp9CiMgOCAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNt L21tdV9jb250ZXh0LmgiIDIKIyAyMyAiL3Vzci9zcmMvbGludXgtMi40LjEzL2luY2x1ZGUvYXNt L21tdV9jb250ZXh0LmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBlbnRlcl9sYXp5X3RsYihzdHJ1Y3Qg bW1fc3RydWN0ICptbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGNwdSkKewp9 CgoKc3RhdGljIGlubGluZSB2b2lkIHN3aXRjaF9tbShzdHJ1Y3QgbW1fc3RydWN0ICpwcmV2LCBz dHJ1Y3QgbW1fc3RydWN0ICpuZXh0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQg Y3B1KQp7CgogICAgICAgIGlmICgoZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudCkgPT0gMCkK ICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIuYnl0ZSAweDBmLDB4MGIiKTsK CiAgICAgICAgaWYgKHByZXYgIT0gbmV4dCkgewoKICAgICAgICAgICAgICAgIGNsZWFyX2JpdChj cHUsICZwcmV2LT5jcHVfdm1fbWFzayk7CgoKCiAgICAgICAgICAgICAgICBpZiAocHJldi0+Y29u dGV4dC5zZWdtZW50cyAhPSBuZXh0LT5jb250ZXh0LnNlZ21lbnRzKQogICAgICAgICAgICAgICAg ICAgICAgICBsb2FkX0xEVChuZXh0KTsKCgoKCiAgICAgICAgICAgICAgICBzZXRfYml0KGNwdSwg Jm5leHQtPmNwdV92bV9tYXNrKTsKICAgICAgICAgICAgICAgIHNldF9iaXQoY3B1LCAmbmV4dC0+ Y29udGV4dC5jcHV2YWxpZCk7CgogICAgICAgICAgICAgICAgYXNtIHZvbGF0aWxlKCJtb3ZsICUw LCUlY3IzIjogOiJyIiAoKCh1bnNpZ25lZCBsb25nKShuZXh0LT5wZ2QpLSgodW5zaWduZWQgbG9u ZykoMHhDMDAwMDAwMCkpKSkpOwogICAgICAgIH0KIyA2NiAiL3Vzci9zcmMvbGludXgtMi40LjEz L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgiCn0KIyAzNCAia2VybmVsL3NjaGVkLmMiIDIKCmV4 dGVybiB2b2lkIHRpbWVyX2JoKHZvaWQpOwpleHRlcm4gdm9pZCB0cXVldWVfYmgodm9pZCk7CmV4 dGVybiB2b2lkIGltbWVkaWF0ZV9iaCh2b2lkKTsKCgoKCgp1bnNpZ25lZCBzZWN1cmViaXRzID0g MHgwMDAwMDAwMDsKCmV4dGVybiB2b2lkIG1lbV91c2Uodm9pZCk7CiMgNzggImtlcm5lbC9zY2hl ZC5jIgpzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBpbml0X3Rhc2tzWzFdID0geyYoaW5pdF90YXNrX3Vu aW9uLnRhc2spLCB9OwojIDkxICJrZXJuZWwvc2NoZWQuYyIKc3BpbmxvY2tfdCBydW5xdWV1ZV9s b2NrIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKCgxIDw8ICgoNSkpKSksIF9fc2VjdGlvbl9f KCIuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCIpKSkgPSAoc3BpbmxvY2tfdCkgeyB9Owpyd2xvY2tf dCB0YXNrbGlzdF9sb2NrIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKCgxIDw8ICgoNSkpKSks IF9fc2VjdGlvbl9fKCIuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCIpKSkgPSAocndsb2NrX3QpIHsg fTsKCnN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHJ1bnF1ZXVlX2hlYWQgPSB7ICYocnVucXVldWVf aGVhZCksICYocnVucXVldWVfaGVhZCkgfTsKCgoKCgpzdGF0aWMgdW5pb24gewogICAgICAgIHN0 cnVjdCBzY2hlZHVsZV9kYXRhIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAq IGN1cnI7CiAgICAgICAgICAgICAgICBjeWNsZXNfdCBsYXN0X3NjaGVkdWxlOwogICAgICAgIH0g c2NoZWR1bGVfZGF0YTsKICAgICAgICBjaGFyIF9fcGFkIFsoMSA8PCAoKDUpKSldOwp9IGFsaWdu ZWRfZGF0YSBbMV0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oKDEgPDwgKCg1KSkpKSwgX19z ZWN0aW9uX18oIi5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIikpKSA9IHsge3smKGluaXRfdGFza191 bmlvbi50YXNrKSwwfX19OwoKCgoKc3RydWN0IGtlcm5lbF9zdGF0IGtzdGF0OwpleHRlcm4gc3Ry dWN0IHRhc2tfc3RydWN0ICpjaGlsZF9yZWFwZXI7CiMgMTI3ICJrZXJuZWwvc2NoZWQuYyIKdm9p ZCBzY2hlZHVsaW5nX2Z1bmN0aW9uc19zdGFydF9oZXJlKHZvaWQpIHsgfQojIDE0MyAia2VybmVs L3NjaGVkLmMiCnN0YXRpYyBpbmxpbmUgaW50IGdvb2RuZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAq IHAsIGludCB0aGlzX2NwdSwgc3RydWN0IG1tX3N0cnVjdCAqdGhpc19tbSkKewogICAgICAgIGlu dCB3ZWlnaHQ7CgoKCgoKCiAgICAgICAgd2VpZ2h0ID0gLTE7CiAgICAgICAgaWYgKHAtPnBvbGlj eSAmIDB4MTApCiAgICAgICAgICAgICAgICBnb3RvIG91dDsKCgoKCiAgICAgICAgaWYgKHAtPnBv bGljeSA9PSAwKSB7CgoKCgoKCgogICAgICAgICAgICAgICAgd2VpZ2h0ID0gcC0+Y291bnRlcjsK ICAgICAgICAgICAgICAgIGlmICghd2VpZ2h0KQogICAgICAgICAgICAgICAgICAgICAgICBnb3Rv IG91dDsKIyAxNzkgImtlcm5lbC9zY2hlZC5jIgogICAgICAgICAgICAgICAgaWYgKHAtPm1tID09 IHRoaXNfbW0gfHwgIXAtPm1tKQogICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQgKz0gMTsK ICAgICAgICAgICAgICAgIHdlaWdodCArPSAyMCAtIHAtPm5pY2U7CiAgICAgICAgICAgICAgICBn b3RvIG91dDsKICAgICAgICB9CgoKCgoKCiAgICAgICAgd2VpZ2h0ID0gMTAwMCArIHAtPnJ0X3By aW9yaXR5OwpvdXQ6CiAgICAgICAgcmV0dXJuIHdlaWdodDsKfQoKCgoKCnN0YXRpYyBpbmxpbmUg aW50IHByZWVtcHRpb25fZ29vZG5lc3Moc3RydWN0IHRhc2tfc3RydWN0ICogcHJldiwgc3RydWN0 IHRhc2tfc3RydWN0ICogcCwgaW50IGNwdSkKewogICAgICAgIHJldHVybiBnb29kbmVzcyhwLCBj cHUsIHByZXYtPmFjdGl2ZV9tbSkgLSBnb29kbmVzcyhwcmV2LCBjcHUsIHByZXYtPmFjdGl2ZV9t bSk7Cn0KCgoKCgoKc3RhdGljIHZvaWQgcmVzY2hlZHVsZV9pZGxlKHN0cnVjdCB0YXNrX3N0cnVj dCAqIHApIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKCnN0YXRpYyB2b2lkIHJlc2NoZWR1 bGVfaWRsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwKQp7CiMgMjkzICJrZXJuZWwvc2NoZWQuYyIK ICAgICAgICBpbnQgdGhpc19jcHUgPSAwOwogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNr OwoKICAgICAgICB0c2sgPSBhbGlnbmVkX2RhdGFbKHRoaXNfY3B1KV0uc2NoZWR1bGVfZGF0YS5j dXJyOwogICAgICAgIGlmIChwcmVlbXB0aW9uX2dvb2RuZXNzKHRzaywgcCwgdGhpc19jcHUpID4g MCkKICAgICAgICAgICAgICAgIHRzay0+bmVlZF9yZXNjaGVkID0gMTsKCn0KIyAzMDkgImtlcm5l bC9zY2hlZC5jIgpzdGF0aWMgaW5saW5lIHZvaWQgYWRkX3RvX3J1bnF1ZXVlKHN0cnVjdCB0YXNr X3N0cnVjdCAqIHApCnsKICAgICAgICBsaXN0X2FkZCgmcC0+cnVuX2xpc3QsICZydW5xdWV1ZV9o ZWFkKTsKICAgICAgICBucl9ydW5uaW5nKys7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlX2xh c3RfcnVucXVldWUoc3RydWN0IHRhc2tfc3RydWN0ICogcCkKewogICAgICAgIGxpc3RfZGVsKCZw LT5ydW5fbGlzdCk7CiAgICAgICAgbGlzdF9hZGRfdGFpbCgmcC0+cnVuX2xpc3QsICZydW5xdWV1 ZV9oZWFkKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIG1vdmVfZmlyc3RfcnVucXVldWUoc3RydWN0 IHRhc2tfc3RydWN0ICogcCkKewogICAgICAgIGxpc3RfZGVsKCZwLT5ydW5fbGlzdCk7CiAgICAg ICAgbGlzdF9hZGQoJnAtPnJ1bl9saXN0LCAmcnVucXVldWVfaGVhZCk7Cn0KIyAzMzUgImtlcm5l bC9zY2hlZC5jIgpzdGF0aWMgaW5saW5lIGludCB0cnlfdG9fd2FrZV91cChzdHJ1Y3QgdGFza19z dHJ1Y3QgKiBwLCBpbnQgc3luY2hyb25vdXMpCnsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdz OwogICAgICAgIGludCBzdWNjZXNzID0gMDsKCgoKCiAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9s YXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCA7IGNsaSI6Ij1nIiAoZmxhZ3MpOiA6Im1lbW9yeSIp OyBkbyB7IGRvIHsgKytnZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50OyBfX2FzbV9fIF9fdm9s YXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlICgwKTsgKHZvaWQpKCZydW5xdWV1ZV9s b2NrKTsgfSB3aGlsZSgwKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgcC0+c3RhdGUgPSAwOwogICAg ICAgIGlmICh0YXNrX29uX3J1bnF1ZXVlKHApKQogICAgICAgICAgICAgICAgZ290byBvdXQ7CiAg ICAgICAgYWRkX3RvX3J1bnF1ZXVlKHApOwogICAgICAgIGlmICghc3luY2hyb25vdXMgfHwgIShw LT5jcHVzX2FsbG93ZWQgJiAoMSA8PCAwKSkpCiAgICAgICAgICAgICAgICByZXNjaGVkdWxlX2lk bGUocCk7CiAgICAgICAgc3VjY2VzcyA9IDE7Cm91dDoKICAgICAgICBkbyB7IGRvIHsgZG8geyB9 IHdoaWxlKDApOyBkbyB7IC0tZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudDsgX19hc21fXyBf X3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgaWYgKChnZXRfY3VycmVudCgpLT5wcmVlbXB0 X2NvdW50ID09IDApICYmIGdldF9jdXJyZW50KCktPm5lZWRfcmVzY2hlZCkgcHJlZW1wdF9zY2hl ZHVsZSgpOyB9IHdoaWxlICgwKTsgfSB3aGlsZSAoMCk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJw dXNobCAlMCA7IHBvcGZsIjogOiJnIiAoZmxhZ3MpOiJtZW1vcnkiLCAiY2MiKTsgfSB3aGlsZSAo MCk7CiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7Cn0KCmlubGluZSBpbnQgd2FrZV91cF9wcm9jZXNz KHN0cnVjdCB0YXNrX3N0cnVjdCAqIHApCnsKICAgICAgICByZXR1cm4gdHJ5X3RvX3dha2VfdXAo cCwgMCk7Cn0KCnN0YXRpYyB2b2lkIHByb2Nlc3NfdGltZW91dCh1bnNpZ25lZCBsb25nIF9fZGF0 YSkKewogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAgPSAoc3RydWN0IHRhc2tfc3RydWN0 ICopIF9fZGF0YTsKCiAgICAgICAgd2FrZV91cF9wcm9jZXNzKHApOwp9CiMgMzk0ICJrZXJuZWwv c2NoZWQuYyIKc2lnbmVkIGxvbmcgc2NoZWR1bGVfdGltZW91dChzaWduZWQgbG9uZyB0aW1lb3V0 KQp7CiAgICAgICAgc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBleHBpcmU7CgogICAgICAgIHN3aXRjaCAodGltZW91dCkKICAgICAgICB7CiAgICAgICAgY2Fz ZSAoKGxvbmcpKH4wVUw+PjEpKToKCgoKCgoKCiAgICAgICAgICAgICAgICBzY2hlZHVsZSgpOwog ICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgZGVmYXVsdDoKCgoKCgoKCiAgICAgICAg ICAgICAgICBpZiAodGltZW91dCA8IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICAgIHByaW50aygiPDM+IiAic2NoZWR1bGVfdGltZW91dDogd3JvbmcgdGltZW91dCAi CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUgJWx4IGZyb20gJXBcbiIsIHRp bWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2Fk ZHJlc3MoMCkpOwogICAgICAgICAgICAgICAgICAgICAgICBnZXRfY3VycmVudCgpLT5zdGF0ZSA9 IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OwogICAgICAgICAgICAgICAgfQog ICAgICAgIH0KCiAgICAgICAgZXhwaXJlID0gdGltZW91dCArIGppZmZpZXM7CgogICAgICAgIGlu aXRfdGltZXIoJnRpbWVyKTsKICAgICAgICB0aW1lci5leHBpcmVzID0gZXhwaXJlOwogICAgICAg IHRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZ2V0X2N1cnJlbnQoKTsKICAgICAgICB0aW1l ci5mdW5jdGlvbiA9IHByb2Nlc3NfdGltZW91dDsKCiAgICAgICAgYWRkX3RpbWVyKCZ0aW1lcik7 CiAgICAgICAgc2NoZWR1bGUoKTsKICAgICAgICBkZWxfdGltZXIoJnRpbWVyKTsKCiAgICAgICAg dGltZW91dCA9IGV4cGlyZSAtIGppZmZpZXM7Cgogb3V0OgogICAgICAgIHJldHVybiB0aW1lb3V0 IDwgMCA/IDAgOiB0aW1lb3V0Owp9CgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NjaGVkdWxl X3RhaWwoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KQp7CiMgNTE0ICJrZXJuZWwvc2NoZWQuYyIK ICAgICAgICBwcmV2LT5wb2xpY3kgJj0gfjB4MTA7Cgp9Cgp2b2lkIHNjaGVkdWxlX3RhaWwoc3Ry dWN0IHRhc2tfc3RydWN0ICpwcmV2KQp7CiAgICAgICAgX19zY2hlZHVsZV90YWlsKHByZXYpOwog ICAgICAgIGRvIHsgLS1nZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50OyBfX2FzbV9fIF9fdm9s YXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyBpZiAoKGdldF9jdXJyZW50KCktPnByZWVtcHRfY291 bnQgPT0gMCkgJiYgZ2V0X2N1cnJlbnQoKS0+bmVlZF9yZXNjaGVkKSBwcmVlbXB0X3NjaGVkdWxl KCk7IH0gd2hpbGUgKDApOwp9CiMgNTM0ICJrZXJuZWwvc2NoZWQuYyIKIF9fYXR0cmlidXRlX18o KHJlZ3Bhcm0oMCkpKSB2b2lkIHNjaGVkdWxlKHZvaWQpCnsKICAgICAgICBzdHJ1Y3Qgc2NoZWR1 bGVfZGF0YSAqIHNjaGVkX2RhdGE7CiAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCAq bmV4dCwgKnA7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqdG1wOwogICAgICAgIGludCB0aGlz X2NwdSwgYzsKCgogICAgICAgIHByZWZldGNodygmcnVucXVldWVfbG9jayk7CgogICAgICAgIGRv IHsgKytnZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygi IjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlICgwKTsKCiAgICAgICAgaWYgKCFnZXRfY3VycmVudCgp LT5hY3RpdmVfbW0pIF9fYXNtX18gX192b2xhdGlsZV9fKCIuYnl0ZSAweDBmLDB4MGIiKTsKbmVl ZF9yZXNjaGVkX2JhY2s6CiAgICAgICAgcHJldiA9IGdldF9jdXJyZW50KCk7CiAgICAgICAgdGhp c19jcHUgPSBwcmV2LT5wcm9jZXNzb3I7CgogICAgICAgIGlmICgoeyBpbnQgX19jcHUgPSAwOyAo KCh2b2lkKSgoX19jcHUpKSwgaXJxX3N0YXRbMF0uX19sb2NhbF9pcnFfY291bnQpICsgKCh2b2lk KSgoX19jcHUpKSwgaXJxX3N0YXRbMF0uX19sb2NhbF9iaF9jb3VudCkgIT0gMCk7IH0pKQogICAg ICAgICAgICAgICAgZ290byBzY2hlZHVsaW5nX2luX2ludGVycnVwdDsKCiAgICAgICAgZG8geyBp ZiAocHJldi0+bG9ja19kZXB0aCA+PSAwKSBkbyB7IGRvIHsgfSB3aGlsZSgwKTsgZG8geyAtLWdl dF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoi bWVtb3J5Iik7IGlmICgoZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudCA9PSAwKSAmJiBnZXRf Y3VycmVudCgpLT5uZWVkX3Jlc2NoZWQpIHByZWVtcHRfc2NoZWR1bGUoKTsgfSB3aGlsZSAoMCk7 IH0gd2hpbGUgKDApOyBkbyB7IH0gd2hpbGUgKDApOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3Rp IjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlICgwKTsKCgoKCgogICAgICAgIHNjaGVkX2RhdGEgPSAm IGFsaWduZWRfZGF0YVt0aGlzX2NwdV0uc2NoZWR1bGVfZGF0YTsKCiAgICAgICAgZG8geyBfX2Fz bV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIpOyBkbyB7IGRvIHsgKytnZXRfY3Vy cmVudCgpLT5wcmVlbXB0X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9y eSIpOyB9IHdoaWxlICgwKTsgKHZvaWQpKCZydW5xdWV1ZV9sb2NrKTsgfSB3aGlsZSgwKTsgfSB3 aGlsZSAoMCk7CgoKICAgICAgICBpZiAocHJldi0+cG9saWN5ID09IDIpCiAgICAgICAgICAgICAg ICBnb3RvIG1vdmVfcnJfbGFzdDsKbW92ZV9ycl9iYWNrOgoKCiAgICAgICAgaWYgKChnZXRfY3Vy cmVudCgpLT5wcmVlbXB0X2NvdW50KSAmIDB4NDAwMDAwMDApIGdvdG8gdHJlYXRfbGlrZV9ydW47 CgogICAgICAgIHN3aXRjaCAocHJldi0+c3RhdGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgMToK ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25hbF9wZW5kaW5nKHByZXYpKSB7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+c3RhdGUgPSAwOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICBkZWxfZnJvbV9ydW5x dWV1ZShwcmV2KTsKICAgICAgICAgICAgICAgIGNhc2UgMDo7CiAgICAgICAgfQoKICAgICAgICB0 cmVhdF9saWtlX3J1bjoKCiAgICAgICAgcHJldi0+bmVlZF9yZXNjaGVkID0gMDsKCgoKCgpyZXBl YXRfc2NoZWR1bGU6CgoKCiAgICAgICAgbmV4dCA9ICgmKGluaXRfdGFza191bmlvbi50YXNrKSk7 CiAgICAgICAgYyA9IC0xMDAwOwogICAgICAgIGlmICh0YXNrX29uX3J1bnF1ZXVlKHByZXYpKQog ICAgICAgICAgICAgICAgZ290byBzdGlsbF9ydW5uaW5nOwoKc3RpbGxfcnVubmluZ19iYWNrOgog ICAgICAgIGZvciAodG1wID0gKCZydW5xdWV1ZV9oZWFkKS0+bmV4dCwgcHJlZmV0Y2godG1wLT5u ZXh0KTsgdG1wICE9ICgmcnVucXVldWVfaGVhZCk7IHRtcCA9IHRtcC0+bmV4dCwgcHJlZmV0Y2go dG1wLT5uZXh0KSkgewogICAgICAgICAgICAgICAgcCA9ICgoc3RydWN0IHRhc2tfc3RydWN0ICop KChjaGFyICopKHRtcCktKHVuc2lnbmVkIGxvbmcpKCYoKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTAp LT5ydW5fbGlzdCkpKTsKICAgICAgICAgICAgICAgIGlmICgoMSkpIHsKICAgICAgICAgICAgICAg ICAgICAgICAgaW50IHdlaWdodCA9IGdvb2RuZXNzKHAsIHRoaXNfY3B1LCBwcmV2LT5hY3RpdmVf bW0pOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAod2VpZ2h0ID4gYykKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjID0gd2VpZ2h0LCBuZXh0ID0gcDsKICAgICAgICAgICAgICAg IH0KICAgICAgICB9CgoKICAgICAgICBpZiAoIWMpCiAgICAgICAgICAgICAgICBnb3RvIHJlY2Fs Y3VsYXRlOwoKCgoKCiAgICAgICAgc2NoZWRfZGF0YS0+Y3VyciA9IG5leHQ7CgoKCgogICAgICAg IGRvIHsgZG8geyBkbyB7IH0gd2hpbGUoMCk7IGRvIHsgLS1nZXRfY3VycmVudCgpLT5wcmVlbXB0 X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyBpZiAoKGdldF9j dXJyZW50KCktPnByZWVtcHRfY291bnQgPT0gMCkgJiYgZ2V0X2N1cnJlbnQoKS0+bmVlZF9yZXNj aGVkKSBwcmVlbXB0X3NjaGVkdWxlKCk7IH0gd2hpbGUgKDApOyB9IHdoaWxlICgwKTsgX19hc21f XyBfX3ZvbGF0aWxlX18oInN0aSI6IDogOiJtZW1vcnkiKTsgfSB3aGlsZSAoMCk7CgogICAgICAg IGlmIChwcmV2ID09IG5leHQpIHsKCiAgICAgICAgICAgICAgICBwcmV2LT5wb2xpY3kgJj0gfjB4 MTA7CiAgICAgICAgICAgICAgICBnb3RvIHNhbWVfcHJvY2VzczsKICAgICAgICB9CiMgNjQ5ICJr ZXJuZWwvc2NoZWQuYyIKICAgICAgICBrc3RhdC5jb250ZXh0X3N3dGNoKys7CiMgNjU5ICJrZXJu ZWwvc2NoZWQuYyIKICAgICAgICBkbyB7IH0gd2hpbGUoMCk7CiAgICAgICAgewogICAgICAgICAg ICAgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBuZXh0LT5tbTsKICAgICAgICAgICAgICAgIHN0 cnVjdCBtbV9zdHJ1Y3QgKm9sZG1tID0gcHJldi0+YWN0aXZlX21tOwogICAgICAgICAgICAgICAg aWYgKCFtbSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dC0+YWN0aXZlX21tKSBf X2FzbV9fIF9fdm9sYXRpbGVfXygiLmJ5dGUgMHgwZiwweDBiIik7CiAgICAgICAgICAgICAgICAg ICAgICAgIG5leHQtPmFjdGl2ZV9tbSA9IG9sZG1tOwogICAgICAgICAgICAgICAgICAgICAgICBh dG9taWNfaW5jKCZvbGRtbS0+bW1fY291bnQpOwogICAgICAgICAgICAgICAgICAgICAgICBlbnRl cl9sYXp5X3RsYihvbGRtbSwgbmV4dCwgdGhpc19jcHUpOwogICAgICAgICAgICAgICAgfSBlbHNl IHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQtPmFjdGl2ZV9tbSAhPSBtbSkgX19h c21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYsMHgwYiIpOwogICAgICAgICAgICAgICAgICAg ICAgICBzd2l0Y2hfbW0ob2xkbW0sIG1tLCBuZXh0LCB0aGlzX2NwdSk7CiAgICAgICAgICAgICAg ICB9CgogICAgICAgICAgICAgICAgaWYgKCFwcmV2LT5tbSkgewogICAgICAgICAgICAgICAgICAg ICAgICBwcmV2LT5hY3RpdmVfbW0gPSAoKHZvaWQgKikwKTsKICAgICAgICAgICAgICAgICAgICAg ICAgbW1kcm9wKG9sZG1tKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgoKCgoKICAgICAg ICBkbyB7IGFzbSB2b2xhdGlsZSgicHVzaGwgJSVlc2lcblx0IiAicHVzaGwgJSVlZGlcblx0IiAi cHVzaGwgJSVlYnBcblx0IiAibW92bCAlJWVzcCwlMFxuXHQiICJtb3ZsICUzLCUlZXNwXG5cdCIg Im1vdmwgJDFmLCUxXG5cdCIgInB1c2hsICU0XG5cdCIgImptcCBfX3N3aXRjaF90b1xuIiAiMTpc dCIgInBvcGwgJSVlYnBcblx0IiAicG9wbCAlJWVkaVxuXHQiICJwb3BsICUlZXNpXG5cdCIgOiI9 bSIgKHByZXYtPnRocmVhZC5lc3ApLCI9bSIgKHByZXYtPnRocmVhZC5laXApLCAiPWIiIChwcmV2 KSA6Im0iIChuZXh0LT50aHJlYWQuZXNwKSwibSIgKG5leHQtPnRocmVhZC5laXApLCAiYSIgKHBy ZXYpLCAiZCIgKG5leHQpLCAiYiIgKHByZXYpKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgX19zY2hl ZHVsZV90YWlsKHByZXYpOwoKc2FtZV9wcm9jZXNzOgogICAgICAgIGRvIHsgaWYgKGdldF9jdXJy ZW50KCktPmxvY2tfZGVwdGggPj0gMCkgZG8geyBkbyB7ICsrZ2V0X2N1cnJlbnQoKS0+cHJlZW1w dF9jb3VudDsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgfSB3aGlsZSAo MCk7ICh2b2lkKSgma2VybmVsX2ZsYWcpOyB9IHdoaWxlKDApOyB9IHdoaWxlICgwKTsKICAgICAg ICBpZiAoZ2V0X2N1cnJlbnQoKS0+bmVlZF9yZXNjaGVkKQogICAgICAgICAgICAgICAgZ290byBu ZWVkX3Jlc2NoZWRfYmFjazsKICAgICAgICBkbyB7IC0tZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9j b3VudDsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgfSB3aGlsZSAoMCk7 CiAgICAgICAgcmV0dXJuOwoKcmVjYWxjdWxhdGU6CiAgICAgICAgewogICAgICAgICAgICAgICAg c3RydWN0IHRhc2tfc3RydWN0ICpwOwogICAgICAgICAgICAgICAgZG8geyBkbyB7IGRvIHsgfSB3 aGlsZSgwKTsgZG8geyAtLWdldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192 b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IGlmICgoZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9j b3VudCA9PSAwKSAmJiBnZXRfY3VycmVudCgpLT5uZWVkX3Jlc2NoZWQpIHByZWVtcHRfc2NoZWR1 bGUoKTsgfSB3aGlsZSAoMCk7IH0gd2hpbGUgKDApOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3Rp IjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlICgwKTsKICAgICAgICAgICAgICAgICh7ZG8geyArK2dl dF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoi bWVtb3J5Iik7IH0gd2hpbGUgKDApOyAodm9pZCkoJnRhc2tsaXN0X2xvY2spO30pOwogICAgICAg ICAgICAgICAgZm9yIChwID0gJihpbml0X3Rhc2tfdW5pb24udGFzaykgOyAocCA9IHAtPm5leHRf dGFzaykgIT0gJihpbml0X3Rhc2tfdW5pb24udGFzaykgOyApCiAgICAgICAgICAgICAgICAgICAg ICAgIHAtPmNvdW50ZXIgPSAocC0+Y291bnRlciA+PiAxKSArICgoKDIwLShwLT5uaWNlKSkgPj4g MikrMSk7CiAgICAgICAgICAgICAgICAoe2RvIHsgfSB3aGlsZSgwKTsgZG8geyAtLWdldF9jdXJy ZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5 Iik7IGlmICgoZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudCA9PSAwKSAmJiBnZXRfY3VycmVu dCgpLT5uZWVkX3Jlc2NoZWQpIHByZWVtcHRfc2NoZWR1bGUoKTsgfSB3aGlsZSAoMCk7fSk7CiAg ICAgICAgICAgICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJjbGkiOiA6IDoibWVtb3J5 Iik7IGRvIHsgZG8geyArK2dldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192 b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOyAodm9pZCkoJnJ1bnF1ZXVl X2xvY2spOyB9IHdoaWxlKDApOyB9IHdoaWxlICgwKTsKICAgICAgICB9CiAgICAgICAgZ290byBy ZXBlYXRfc2NoZWR1bGU7CgpzdGlsbF9ydW5uaW5nOgogICAgICAgIGlmICghKHByZXYtPmNwdXNf YWxsb3dlZCAmICgxVUwgPDwgdGhpc19jcHUpKSkKICAgICAgICAgICAgICAgIGdvdG8gc3RpbGxf cnVubmluZ19iYWNrOwogICAgICAgIGMgPSBnb29kbmVzcyhwcmV2LCB0aGlzX2NwdSwgcHJldi0+ YWN0aXZlX21tKTsKICAgICAgICBuZXh0ID0gcHJldjsKICAgICAgICBnb3RvIHN0aWxsX3J1bm5p bmdfYmFjazsKCm1vdmVfcnJfbGFzdDoKICAgICAgICBpZiAoIXByZXYtPmNvdW50ZXIpIHsKICAg ICAgICAgICAgICAgIHByZXYtPmNvdW50ZXIgPSAoKCgyMC0ocHJldi0+bmljZSkpID4+IDIpKzEp OwogICAgICAgICAgICAgICAgbW92ZV9sYXN0X3J1bnF1ZXVlKHByZXYpOwogICAgICAgIH0KICAg ICAgICBnb3RvIG1vdmVfcnJfYmFjazsKCnNjaGVkdWxpbmdfaW5faW50ZXJydXB0OgogICAgICAg IHByaW50aygiU2NoZWR1bGluZyBpbiBpbnRlcnJ1cHRcbiIpOwogICAgICAgIF9fYXNtX18gX192 b2xhdGlsZV9fKCIuYnl0ZSAweDBmLDB4MGIiKTsKICAgICAgICByZXR1cm47Cn0KIyA3MzQgImtl cm5lbC9zY2hlZC5jIgpzdGF0aWMgaW5saW5lIHZvaWQgX193YWtlX3VwX2NvbW1vbiAod2FpdF9x dWV1ZV9oZWFkX3QgKnEsIHVuc2lnbmVkIGludCBtb2RlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IG5yX2V4Y2x1c2l2ZSwgY29uc3QgaW50IHN5bmMpCnsKICAgICAg ICBzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CiAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwOwoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKICAgICAgICBmb3IgKHRtcCA9ICgmcS0+dGFza19saXN0KS0+bmV4 dCwgcHJlZmV0Y2godG1wLT5uZXh0KTsgdG1wICE9ICgmcS0+dGFza19saXN0KTsgdG1wID0gdG1w LT5uZXh0LCBwcmVmZXRjaCh0bXAtPm5leHQpKSB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgc3RhdGU7CiAgICAgICAgICAgICAgICB3YWl0X3F1ZXVlX3QgKmN1cnIgPSAoKHdhaXRfcXVl dWVfdCAqKSgoY2hhciAqKSh0bXApLSh1bnNpZ25lZCBsb25nKSgmKCh3YWl0X3F1ZXVlX3QgKikw KS0+dGFza19saXN0KSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgcCA9IGN1cnItPnRhc2s7CiAgICAgICAgICAgICAgICBzdGF0 ZSA9IHAtPnN0YXRlOwogICAgICAgICAgICAgICAgaWYgKHN0YXRlICYgbW9kZSkgewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg ICAgICBpZiAodHJ5X3RvX3dha2VfdXAocCwgc3luYykgJiYgKGN1cnItPmZsYWdzJjB4MDEpICYm ICEtLW5yX2V4Y2x1c2l2ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIH0KICAgICAgICB9Cn0KCnZvaWQgX193YWtlX3VwKHdhaXRfcXVldWVf aGVhZF90ICpxLCB1bnNpZ25lZCBpbnQgbW9kZSwgaW50IG5yKQp7CiAgICAgICAgaWYgKHEpIHsK ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgICAgICAgICBkbyB7 IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xpIjoiPWciIChmbGFn cyk6IDoibWVtb3J5Iik7IGRvIHsgZG8geyArK2dldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7 IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOyAodm9p ZCkoJnEtPmxvY2spOyB9IHdoaWxlKDApOyB9IHdoaWxlICgwKTsKICAgICAgICAgICAgICAgIF9f d2FrZV91cF9jb21tb24ocSwgbW9kZSwgbnIsIDApOwogICAgICAgICAgICAgICAgZG8geyBkbyB7 IGRvIHsgfSB3aGlsZSgwKTsgZG8geyAtLWdldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9f YXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IGlmICgoZ2V0X2N1cnJlbnQoKS0+ cHJlZW1wdF9jb3VudCA9PSAwKSAmJiBnZXRfY3VycmVudCgpLT5uZWVkX3Jlc2NoZWQpIHByZWVt cHRfc2NoZWR1bGUoKTsgfSB3aGlsZSAoMCk7IH0gd2hpbGUgKDApOyBfX2FzbV9fIF9fdm9sYXRp bGVfXygicHVzaGwgJTAgOyBwb3BmbCI6IDoiZyIgKGZsYWdzKToibWVtb3J5IiwgImNjIik7IH0g d2hpbGUgKDApOwogICAgICAgIH0KfQoKdm9pZCBfX3dha2VfdXBfc3luYyh3YWl0X3F1ZXVlX2hl YWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsIGludCBucikKewogICAgICAgIGlmIChxKSB7CiAg ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgICAgICAgICAgZG8geyBf X2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCA7IGNsaSI6Ij1nIiAoZmxhZ3Mp OiA6Im1lbW9yeSIpOyBkbyB7IGRvIHsgKytnZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50OyBf X2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlICgwKTsgKHZvaWQp KCZxLT5sb2NrKTsgfSB3aGlsZSgwKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICBfX3dh a2VfdXBfY29tbW9uKHEsIG1vZGUsIG5yLCAxKTsKICAgICAgICAgICAgICAgIGRvIHsgZG8geyBk byB7IH0gd2hpbGUoMCk7IGRvIHsgLS1nZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50OyBfX2Fz bV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyBpZiAoKGdldF9jdXJyZW50KCktPnBy ZWVtcHRfY291bnQgPT0gMCkgJiYgZ2V0X2N1cnJlbnQoKS0+bmVlZF9yZXNjaGVkKSBwcmVlbXB0 X3NjaGVkdWxlKCk7IH0gd2hpbGUgKDApOyB9IHdoaWxlICgwKTsgX19hc21fXyBfX3ZvbGF0aWxl X18oInB1c2hsICUwIDsgcG9wZmwiOiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIpOyB9IHdo aWxlICgwKTsKICAgICAgICB9Cn0KCnZvaWQgY29tcGxldGUoc3RydWN0IGNvbXBsZXRpb24gKngp CnsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwoKICAgICAgICBkbyB7IF9fYXNtX18gX192 b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xpIjoiPWciIChmbGFncyk6IDoibWVtb3J5 Iik7IGRvIHsgZG8geyArK2dldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192 b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOyAodm9pZCkoJngtPndhaXQu bG9jayk7IH0gd2hpbGUoMCk7IH0gd2hpbGUgKDApOwogICAgICAgIHgtPmRvbmUrKzsKICAgICAg ICBfX3dha2VfdXBfY29tbW9uKCZ4LT53YWl0LCAyIHwgMSwgMSwgMCk7CiAgICAgICAgZG8geyBk byB7IGRvIHsgfSB3aGlsZSgwKTsgZG8geyAtLWdldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7 IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IGlmICgoZ2V0X2N1cnJlbnQo KS0+cHJlZW1wdF9jb3VudCA9PSAwKSAmJiBnZXRfY3VycmVudCgpLT5uZWVkX3Jlc2NoZWQpIHBy ZWVtcHRfc2NoZWR1bGUoKTsgfSB3aGlsZSAoMCk7IH0gd2hpbGUgKDApOyBfX2FzbV9fIF9fdm9s YXRpbGVfXygicHVzaGwgJTAgOyBwb3BmbCI6IDoiZyIgKGZsYWdzKToibWVtb3J5IiwgImNjIik7 IH0gd2hpbGUgKDApOwp9Cgp2b2lkIHdhaXRfZm9yX2NvbXBsZXRpb24oc3RydWN0IGNvbXBsZXRp b24gKngpCnsKICAgICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJjbGkiOiA6IDoibWVt b3J5Iik7IGRvIHsgZG8geyArK2dldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18g X192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOyAodm9pZCkoJngtPndh aXQubG9jayk7IH0gd2hpbGUoMCk7IH0gd2hpbGUgKDApOwogICAgICAgIGlmICgheC0+ZG9uZSkg ewogICAgICAgICAgICAgICAgd2FpdF9xdWV1ZV90IHdhaXQgPSB7IHRhc2s6IGdldF9jdXJyZW50 KCksIHRhc2tfbGlzdDogeyAoKHZvaWQgKikwKSwgKCh2b2lkICopMCkgfSwgfTsKCiAgICAgICAg ICAgICAgICB3YWl0LmZsYWdzIHw9IDB4MDE7CiAgICAgICAgICAgICAgICBfX2FkZF93YWl0X3F1 ZXVlX3RhaWwoJngtPndhaXQsICZ3YWl0KTsKICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAg ICAgICAgICAgICAgICAgZG8geyBnZXRfY3VycmVudCgpLT5zdGF0ZSA9ICgyKTsgfSB3aGlsZSAo MCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsgZG8geyBkbyB7IH0gd2hpbGUoMCk7IGRv IHsgLS1nZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygi IjogOiA6Im1lbW9yeSIpOyBpZiAoKGdldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQgPT0gMCkg JiYgZ2V0X2N1cnJlbnQoKS0+bmVlZF9yZXNjaGVkKSBwcmVlbXB0X3NjaGVkdWxlKCk7IH0gd2hp bGUgKDApOyB9IHdoaWxlICgwKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aSI6IDogOiJtZW1v cnkiKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlKCk7CiAg ICAgICAgICAgICAgICAgICAgICAgIGRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18oImNsaSI6IDog OiJtZW1vcnkiKTsgZG8geyBkbyB7ICsrZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudDsgX19h c21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgfSB3aGlsZSAoMCk7ICh2b2lkKSgm eC0+d2FpdC5sb2NrKTsgfSB3aGlsZSgwKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICB9 IHdoaWxlICgheC0+ZG9uZSk7CiAgICAgICAgICAgICAgICBfX3JlbW92ZV93YWl0X3F1ZXVlKCZ4 LT53YWl0LCAmd2FpdCk7CiAgICAgICAgfQogICAgICAgIHgtPmRvbmUtLTsKICAgICAgICBkbyB7 IGRvIHsgZG8geyB9IHdoaWxlKDApOyBkbyB7IC0tZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3Vu dDsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgaWYgKChnZXRfY3VycmVu dCgpLT5wcmVlbXB0X2NvdW50ID09IDApICYmIGdldF9jdXJyZW50KCktPm5lZWRfcmVzY2hlZCkg cHJlZW1wdF9zY2hlZHVsZSgpOyB9IHdoaWxlICgwKTsgfSB3aGlsZSAoMCk7IF9fYXNtX18gX192 b2xhdGlsZV9fKCJzdGkiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOwp9CiMgODIzICJrZXJu ZWwvc2NoZWQuYyIKdm9pZCBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKHdhaXRfcXVldWVfaGVhZF90 ICpxKQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsgd2FpdF9xdWV1ZV90IHdhaXQ7IGlu aXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBnZXRfY3VycmVudCgpKTsKCiAgICAgICAgZ2V0X2N1 cnJlbnQoKS0+c3RhdGUgPSAxOwoKICAgICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJw dXNoZmwgOyBwb3BsICUwIDsgY2xpIjoiPWciIChmbGFncyk6IDoibWVtb3J5Iik7IGRvIHsgZG8g eyArK2dldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192b2xhdGlsZV9fKCIi OiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOyAodm9pZCkoJnEtPmxvY2spOyB9IHdoaWxlKDAp OyB9IHdoaWxlICgwKTsgX19hZGRfd2FpdF9xdWV1ZShxLCAmd2FpdCk7IGRvIHsgZG8geyB9IHdo aWxlKDApOyBkbyB7IC0tZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudDsgX19hc21fXyBfX3Zv bGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgaWYgKChnZXRfY3VycmVudCgpLT5wcmVlbXB0X2Nv dW50ID09IDApICYmIGdldF9jdXJyZW50KCktPm5lZWRfcmVzY2hlZCkgcHJlZW1wdF9zY2hlZHVs ZSgpOyB9IHdoaWxlICgwKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgc2NoZWR1bGUoKTsKICAgICAg ICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJjbGkiOiA6IDoibWVtb3J5Iik7IGRvIHsgZG8g eyArK2dldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192b2xhdGlsZV9fKCIi OiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOyAodm9pZCkoJnEtPmxvY2spOyB9IHdoaWxlKDAp OyB9IHdoaWxlICgwKTsgX19yZW1vdmVfd2FpdF9xdWV1ZShxLCAmd2FpdCk7IGRvIHsgZG8geyBk byB7IH0gd2hpbGUoMCk7IGRvIHsgLS1nZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50OyBfX2Fz bV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyBpZiAoKGdldF9jdXJyZW50KCktPnBy ZWVtcHRfY291bnQgPT0gMCkgJiYgZ2V0X2N1cnJlbnQoKS0+bmVlZF9yZXNjaGVkKSBwcmVlbXB0 X3NjaGVkdWxlKCk7IH0gd2hpbGUgKDApOyB9IHdoaWxlICgwKTsgX19hc21fXyBfX3ZvbGF0aWxl X18oInB1c2hsICUwIDsgcG9wZmwiOiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIpOyB9IHdo aWxlICgwKTsKfQoKbG9uZyBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQod2FpdF9xdWV1 ZV9oZWFkX3QgKnEsIGxvbmcgdGltZW91dCkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7 IHdhaXRfcXVldWVfdCB3YWl0OyBpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgZ2V0X2N1cnJl bnQoKSk7CgogICAgICAgIGdldF9jdXJyZW50KCktPnN0YXRlID0gMTsKCiAgICAgICAgZG8geyBf X2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCA7IGNsaSI6Ij1nIiAoZmxhZ3Mp OiA6Im1lbW9yeSIpOyBkbyB7IGRvIHsgKytnZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50OyBf X2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlICgwKTsgKHZvaWQp KCZxLT5sb2NrKTsgfSB3aGlsZSgwKTsgfSB3aGlsZSAoMCk7IF9fYWRkX3dhaXRfcXVldWUocSwg JndhaXQpOyBkbyB7IGRvIHsgfSB3aGlsZSgwKTsgZG8geyAtLWdldF9jdXJyZW50KCktPnByZWVt cHRfY291bnQ7IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IGlmICgoZ2V0 X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudCA9PSAwKSAmJiBnZXRfY3VycmVudCgpLT5uZWVkX3Jl c2NoZWQpIHByZWVtcHRfc2NoZWR1bGUoKTsgfSB3aGlsZSAoMCk7IH0gd2hpbGUgKDApOwogICAg ICAgIHRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwogICAgICAgIGRvIHsgX19h c21fXyBfX3ZvbGF0aWxlX18oImNsaSI6IDogOiJtZW1vcnkiKTsgZG8geyBkbyB7ICsrZ2V0X2N1 cnJlbnQoKS0+cHJlZW1wdF9jb3VudDsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1v cnkiKTsgfSB3aGlsZSAoMCk7ICh2b2lkKSgmcS0+bG9jayk7IH0gd2hpbGUoMCk7IH0gd2hpbGUg KDApOyBfX3JlbW92ZV93YWl0X3F1ZXVlKHEsICZ3YWl0KTsgZG8geyBkbyB7IGRvIHsgfSB3aGls ZSgwKTsgZG8geyAtLWdldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192b2xh dGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IGlmICgoZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3Vu dCA9PSAwKSAmJiBnZXRfY3VycmVudCgpLT5uZWVkX3Jlc2NoZWQpIHByZWVtcHRfc2NoZWR1bGUo KTsgfSB3aGlsZSAoMCk7IH0gd2hpbGUgKDApOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwg JTAgOyBwb3BmbCI6IDoiZyIgKGZsYWdzKToibWVtb3J5IiwgImNjIik7IH0gd2hpbGUgKDApOwoK ICAgICAgICByZXR1cm4gdGltZW91dDsKfQoKdm9pZCBzbGVlcF9vbih3YWl0X3F1ZXVlX2hlYWRf dCAqcSkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7IHdhaXRfcXVldWVfdCB3YWl0OyBp bml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgZ2V0X2N1cnJlbnQoKSk7CgogICAgICAgIGdldF9j dXJyZW50KCktPnN0YXRlID0gMjsKCiAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygi cHVzaGZsIDsgcG9wbCAlMCA7IGNsaSI6Ij1nIiAoZmxhZ3MpOiA6Im1lbW9yeSIpOyBkbyB7IGRv IHsgKytnZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygi IjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlICgwKTsgKHZvaWQpKCZxLT5sb2NrKTsgfSB3aGlsZSgw KTsgfSB3aGlsZSAoMCk7IF9fYWRkX3dhaXRfcXVldWUocSwgJndhaXQpOyBkbyB7IGRvIHsgfSB3 aGlsZSgwKTsgZG8geyAtLWdldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192 b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IGlmICgoZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9j b3VudCA9PSAwKSAmJiBnZXRfY3VycmVudCgpLT5uZWVkX3Jlc2NoZWQpIHByZWVtcHRfc2NoZWR1 bGUoKTsgfSB3aGlsZSAoMCk7IH0gd2hpbGUgKDApOwogICAgICAgIHNjaGVkdWxlKCk7CiAgICAg ICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIpOyBkbyB7IGRv IHsgKytnZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygi IjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlICgwKTsgKHZvaWQpKCZxLT5sb2NrKTsgfSB3aGlsZSgw KTsgfSB3aGlsZSAoMCk7IF9fcmVtb3ZlX3dhaXRfcXVldWUocSwgJndhaXQpOyBkbyB7IGRvIHsg ZG8geyB9IHdoaWxlKDApOyBkbyB7IC0tZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudDsgX19h c21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgaWYgKChnZXRfY3VycmVudCgpLT5w cmVlbXB0X2NvdW50ID09IDApICYmIGdldF9jdXJyZW50KCktPm5lZWRfcmVzY2hlZCkgcHJlZW1w dF9zY2hlZHVsZSgpOyB9IHdoaWxlICgwKTsgfSB3aGlsZSAoMCk7IF9fYXNtX18gX192b2xhdGls ZV9fKCJwdXNobCAlMCA7IHBvcGZsIjogOiJnIiAoZmxhZ3MpOiJtZW1vcnkiLCAiY2MiKTsgfSB3 aGlsZSAoMCk7Cn0KCmxvbmcgc2xlZXBfb25fdGltZW91dCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwg bG9uZyB0aW1lb3V0KQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsgd2FpdF9xdWV1ZV90 IHdhaXQ7IGluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBnZXRfY3VycmVudCgpKTsKCiAgICAg ICAgZ2V0X2N1cnJlbnQoKS0+c3RhdGUgPSAyOwoKICAgICAgICBkbyB7IF9fYXNtX18gX192b2xh dGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xpIjoiPWciIChmbGFncyk6IDoibWVtb3J5Iik7 IGRvIHsgZG8geyArK2dldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192b2xh dGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOyAodm9pZCkoJnEtPmxvY2spOyB9 IHdoaWxlKDApOyB9IHdoaWxlICgwKTsgX19hZGRfd2FpdF9xdWV1ZShxLCAmd2FpdCk7IGRvIHsg ZG8geyB9IHdoaWxlKDApOyBkbyB7IC0tZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudDsgX19h c21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgaWYgKChnZXRfY3VycmVudCgpLT5w cmVlbXB0X2NvdW50ID09IDApICYmIGdldF9jdXJyZW50KCktPm5lZWRfcmVzY2hlZCkgcHJlZW1w dF9zY2hlZHVsZSgpOyB9IHdoaWxlICgwKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgdGltZW91dCA9 IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7CiAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9sYXRp bGVfXygiY2xpIjogOiA6Im1lbW9yeSIpOyBkbyB7IGRvIHsgKytnZXRfY3VycmVudCgpLT5wcmVl bXB0X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxl ICgwKTsgKHZvaWQpKCZxLT5sb2NrKTsgfSB3aGlsZSgwKTsgfSB3aGlsZSAoMCk7IF9fcmVtb3Zl X3dhaXRfcXVldWUocSwgJndhaXQpOyBkbyB7IGRvIHsgZG8geyB9IHdoaWxlKDApOyBkbyB7IC0t Z2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudDsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDog OiJtZW1vcnkiKTsgaWYgKChnZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50ID09IDApICYmIGdl dF9jdXJyZW50KCktPm5lZWRfcmVzY2hlZCkgcHJlZW1wdF9zY2hlZHVsZSgpOyB9IHdoaWxlICgw KTsgfSB3aGlsZSAoMCk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjog OiJnIiAoZmxhZ3MpOiJtZW1vcnkiLCAiY2MiKTsgfSB3aGlsZSAoMCk7CgogICAgICAgIHJldHVy biB0aW1lb3V0Owp9Cgp2b2lkIHNjaGVkdWxpbmdfZnVuY3Rpb25zX2VuZF9oZXJlKHZvaWQpIHsg fQojIDg4MSAia2VybmVsL3NjaGVkLmMiCiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgbG9u ZyBzeXNfbmljZShpbnQgaW5jcmVtZW50KQp7CiAgICAgICAgbG9uZyBuZXdwcmlvOwoKCgoKCgog ICAgICAgIGlmIChpbmNyZW1lbnQgPCAwKSB7CiAgICAgICAgICAgICAgICBpZiAoIWNhcGFibGUo MjMpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICAgICBp ZiAoaW5jcmVtZW50IDwgLTQwKQogICAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnQgPSAt NDA7CiAgICAgICAgfQogICAgICAgIGlmIChpbmNyZW1lbnQgPiA0MCkKICAgICAgICAgICAgICAg IGluY3JlbWVudCA9IDQwOwoKICAgICAgICBuZXdwcmlvID0gZ2V0X2N1cnJlbnQoKS0+bmljZSAr IGluY3JlbWVudDsKICAgICAgICBpZiAobmV3cHJpbyA8IC0yMCkKICAgICAgICAgICAgICAgIG5l d3ByaW8gPSAtMjA7CiAgICAgICAgaWYgKG5ld3ByaW8gPiAxOSkKICAgICAgICAgICAgICAgIG5l d3ByaW8gPSAxOTsKICAgICAgICBnZXRfY3VycmVudCgpLT5uaWNlID0gbmV3cHJpbzsKICAgICAg ICByZXR1cm4gMDsKfQoKCgpzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqZmluZF9w cm9jZXNzX2J5X3BpZChwaWRfdCBwaWQpCnsKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRz ayA9IGdldF9jdXJyZW50KCk7CgogICAgICAgIGlmIChwaWQpCiAgICAgICAgICAgICAgICB0c2sg PSBmaW5kX3Rhc2tfYnlfcGlkKHBpZCk7CiAgICAgICAgcmV0dXJuIHRzazsKfQoKc3RhdGljIGlu dCBzZXRzY2hlZHVsZXIocGlkX3QgcGlkLCBpbnQgcG9saWN5LAogICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKQp7CiAgICAgICAgc3RydWN0IHNjaGVkX3Bh cmFtIGxwOwogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKICAgICAgICBpbnQgcmV0dmFs OwoKICAgICAgICByZXR2YWwgPSAtMjI7CiAgICAgICAgaWYgKCFwYXJhbSB8fCBwaWQgPCAwKQog ICAgICAgICAgICAgICAgZ290byBvdXRfbm91bmxvY2s7CgogICAgICAgIHJldHZhbCA9IC0xNDsK ICAgICAgICBpZiAoKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemVvZihzdHJ1Y3Qgc2NoZWRfcGFy YW0pKSA/IF9fY29uc3RhbnRfY29weV9mcm9tX3VzZXIoKCZscCksKHBhcmFtKSwoc2l6ZW9mKHN0 cnVjdCBzY2hlZF9wYXJhbSkpKSA6IF9fZ2VuZXJpY19jb3B5X2Zyb21fdXNlcigoJmxwKSwocGFy YW0pLChzaXplb2Yoc3RydWN0IHNjaGVkX3BhcmFtKSkpKSkKICAgICAgICAgICAgICAgIGdvdG8g b3V0X25vdW5sb2NrOwoKCgoKICAgICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJjbGki OiA6IDoibWVtb3J5Iik7ICh7ZG8geyArK2dldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9f YXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOyAodm9pZCko JnRhc2tsaXN0X2xvY2spO30pOyB9IHdoaWxlICgwKTsKICAgICAgICBkbyB7IGRvIHsgKytnZXRf Y3VycmVudCgpLT5wcmVlbXB0X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1l bW9yeSIpOyB9IHdoaWxlICgwKTsgKHZvaWQpKCZydW5xdWV1ZV9sb2NrKTsgfSB3aGlsZSgwKTsK CiAgICAgICAgcCA9IGZpbmRfcHJvY2Vzc19ieV9waWQocGlkKTsKCiAgICAgICAgcmV0dmFsID0g LTM7CiAgICAgICAgaWYgKCFwKQogICAgICAgICAgICAgICAgZ290byBvdXRfdW5sb2NrOwoKICAg ICAgICBpZiAocG9saWN5IDwgMCkKICAgICAgICAgICAgICAgIHBvbGljeSA9IHAtPnBvbGljeTsK ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHZhbCA9IC0yMjsKICAgICAgICAgICAg ICAgIGlmIChwb2xpY3kgIT0gMSAmJiBwb2xpY3kgIT0gMiAmJgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBvbGljeSAhPSAwKQogICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91 dF91bmxvY2s7CiAgICAgICAgfQoKCgoKCiAgICAgICAgcmV0dmFsID0gLTIyOwogICAgICAgIGlm IChscC5zY2hlZF9wcmlvcml0eSA8IDAgfHwgbHAuc2NoZWRfcHJpb3JpdHkgPiA5OSkKICAgICAg ICAgICAgICAgIGdvdG8gb3V0X3VubG9jazsKICAgICAgICBpZiAoKHBvbGljeSA9PSAwKSAhPSAo bHAuc2NoZWRfcHJpb3JpdHkgPT0gMCkpCiAgICAgICAgICAgICAgICBnb3RvIG91dF91bmxvY2s7 CgogICAgICAgIHJldHZhbCA9IC0xOwogICAgICAgIGlmICgocG9saWN5ID09IDEgfHwgcG9saWN5 ID09IDIpICYmCiAgICAgICAgICAgICFjYXBhYmxlKDIzKSkKICAgICAgICAgICAgICAgIGdvdG8g b3V0X3VubG9jazsKICAgICAgICBpZiAoKGdldF9jdXJyZW50KCktPmV1aWQgIT0gcC0+ZXVpZCkg JiYgKGdldF9jdXJyZW50KCktPmV1aWQgIT0gcC0+dWlkKSAmJgogICAgICAgICAgICAhY2FwYWJs ZSgyMykpCiAgICAgICAgICAgICAgICBnb3RvIG91dF91bmxvY2s7CgogICAgICAgIHJldHZhbCA9 IDA7CiAgICAgICAgcC0+cG9saWN5ID0gcG9saWN5OwogICAgICAgIHAtPnJ0X3ByaW9yaXR5ID0g bHAuc2NoZWRfcHJpb3JpdHk7CiAgICAgICAgaWYgKHRhc2tfb25fcnVucXVldWUocCkpCiAgICAg ICAgICAgICAgICBtb3ZlX2ZpcnN0X3J1bnF1ZXVlKHApOwoKICAgICAgICBnZXRfY3VycmVudCgp LT5uZWVkX3Jlc2NoZWQgPSAxOwoKb3V0X3VubG9jazoKICAgICAgICBkbyB7IGRvIHsgfSB3aGls ZSgwKTsgZG8geyAtLWdldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192b2xh dGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IGlmICgoZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3Vu dCA9PSAwKSAmJiBnZXRfY3VycmVudCgpLT5uZWVkX3Jlc2NoZWQpIHByZWVtcHRfc2NoZWR1bGUo KTsgfSB3aGlsZSAoMCk7IH0gd2hpbGUgKDApOwogICAgICAgIGRvIHsgKHtkbyB7IH0gd2hpbGUo MCk7IGRvIHsgLS1nZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRp bGVfXygiIjogOiA6Im1lbW9yeSIpOyBpZiAoKGdldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQg PT0gMCkgJiYgZ2V0X2N1cnJlbnQoKS0+bmVlZF9yZXNjaGVkKSBwcmVlbXB0X3NjaGVkdWxlKCk7 IH0gd2hpbGUgKDApO30pOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RpIjogOiA6Im1lbW9yeSIp OyB9IHdoaWxlICgwKTsKCm91dF9ub3VubG9jazoKICAgICAgICByZXR1cm4gcmV0dmFsOwp9Cgog X19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGxvbmcgc3lzX3NjaGVkX3NldHNjaGVkdWxlcihw aWRfdCBwaWQsIGludCBwb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSkKewogICAgICAgIHJldHVybiBzZXRzY2hlZHVs ZXIocGlkLCBwb2xpY3ksIHBhcmFtKTsKfQoKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBs b25nIHN5c19zY2hlZF9zZXRwYXJhbShwaWRfdCBwaWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFy YW0pCnsKICAgICAgICByZXR1cm4gc2V0c2NoZWR1bGVyKHBpZCwgLTEsIHBhcmFtKTsKfQojIDEw MTIgImtlcm5lbC9zY2hlZC5jIgogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIHZvaWQgcHJl ZW1wdF9zY2hlZHVsZSh2b2lkKQp7CiAgICAgICAgd2hpbGUgKGdldF9jdXJyZW50KCktPm5lZWRf cmVzY2hlZCkgewoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg ICAgICAgICBnZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50ICs9IDB4NDAwMDAwMDAgKyAxOwog ICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsKICAg ICAgICAgICAgICAgIHNjaGVkdWxlKCk7CiAgICAgICAgICAgICAgICBnZXRfY3VycmVudCgpLT5w cmVlbXB0X2NvdW50IC09IDB4NDAwMDAwMDAgKyAxOwogICAgICAgICAgICAgICAgX19hc21fXyBf X3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgICAgICAgfQp9CgoKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBs b25nIHN5c19zY2hlZF9nZXRzY2hlZHVsZXIocGlkX3QgcGlkKQp7CiAgICAgICAgc3RydWN0IHRh c2tfc3RydWN0ICpwOwogICAgICAgIGludCByZXR2YWw7CgogICAgICAgIHJldHZhbCA9IC0yMjsK ICAgICAgICBpZiAocGlkIDwgMCkKICAgICAgICAgICAgICAgIGdvdG8gb3V0X25vdW5sb2NrOwoK ICAgICAgICByZXR2YWwgPSAtMzsKICAgICAgICAoe2RvIHsgKytnZXRfY3VycmVudCgpLT5wcmVl bXB0X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxl ICgwKTsgKHZvaWQpKCZ0YXNrbGlzdF9sb2NrKTt9KTsKICAgICAgICBwID0gZmluZF9wcm9jZXNz X2J5X3BpZChwaWQpOwogICAgICAgIGlmIChwKQogICAgICAgICAgICAgICAgcmV0dmFsID0gcC0+ cG9saWN5ICYgfjB4MTA7CiAgICAgICAgKHtkbyB7IH0gd2hpbGUoMCk7IGRvIHsgLS1nZXRfY3Vy cmVudCgpLT5wcmVlbXB0X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9y eSIpOyBpZiAoKGdldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQgPT0gMCkgJiYgZ2V0X2N1cnJl bnQoKS0+bmVlZF9yZXNjaGVkKSBwcmVlbXB0X3NjaGVkdWxlKCk7IH0gd2hpbGUgKDApO30pOwoK b3V0X25vdW5sb2NrOgogICAgICAgIHJldHVybiByZXR2YWw7Cn0KCiBfX2F0dHJpYnV0ZV9fKChy ZWdwYXJtKDApKSkgbG9uZyBzeXNfc2NoZWRfZ2V0cGFyYW0ocGlkX3QgcGlkLCBzdHJ1Y3Qgc2No ZWRfcGFyYW0gKnBhcmFtKQp7CiAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwOwogICAgICAg IHN0cnVjdCBzY2hlZF9wYXJhbSBscDsKICAgICAgICBpbnQgcmV0dmFsOwoKICAgICAgICByZXR2 YWwgPSAtMjI7CiAgICAgICAgaWYgKCFwYXJhbSB8fCBwaWQgPCAwKQogICAgICAgICAgICAgICAg Z290byBvdXRfbm91bmxvY2s7CgogICAgICAgICh7ZG8geyArK2dldF9jdXJyZW50KCktPnByZWVt cHRfY291bnQ7IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUg KDApOyAodm9pZCkoJnRhc2tsaXN0X2xvY2spO30pOwogICAgICAgIHAgPSBmaW5kX3Byb2Nlc3Nf YnlfcGlkKHBpZCk7CiAgICAgICAgcmV0dmFsID0gLTM7CiAgICAgICAgaWYgKCFwKQogICAgICAg ICAgICAgICAgZ290byBvdXRfdW5sb2NrOwogICAgICAgIGxwLnNjaGVkX3ByaW9yaXR5ID0gcC0+ cnRfcHJpb3JpdHk7CiAgICAgICAgKHtkbyB7IH0gd2hpbGUoMCk7IGRvIHsgLS1nZXRfY3VycmVu dCgpLT5wcmVlbXB0X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIp OyBpZiAoKGdldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQgPT0gMCkgJiYgZ2V0X2N1cnJlbnQo KS0+bmVlZF9yZXNjaGVkKSBwcmVlbXB0X3NjaGVkdWxlKCk7IH0gd2hpbGUgKDApO30pOwoKCgoK ICAgICAgICByZXR2YWwgPSAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZW9mKCpwYXJhbSkpID8g X19jb25zdGFudF9jb3B5X3RvX3VzZXIoKHBhcmFtKSwoJmxwKSwoc2l6ZW9mKCpwYXJhbSkpKSA6 IF9fZ2VuZXJpY19jb3B5X3RvX3VzZXIoKHBhcmFtKSwoJmxwKSwoc2l6ZW9mKCpwYXJhbSkpKSkg PyAtMTQgOiAwOwoKb3V0X25vdW5sb2NrOgogICAgICAgIHJldHVybiByZXR2YWw7CgpvdXRfdW5s b2NrOgogICAgICAgICh7ZG8geyB9IHdoaWxlKDApOyBkbyB7IC0tZ2V0X2N1cnJlbnQoKS0+cHJl ZW1wdF9jb3VudDsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgaWYgKChn ZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50ID09IDApICYmIGdldF9jdXJyZW50KCktPm5lZWRf cmVzY2hlZCkgcHJlZW1wdF9zY2hlZHVsZSgpOyB9IHdoaWxlICgwKTt9KTsKICAgICAgICByZXR1 cm4gcmV0dmFsOwp9CgogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGxvbmcgc3lzX3NjaGVk X3lpZWxkKHZvaWQpCnsKIyAxMDg5ICJrZXJuZWwvc2NoZWQuYyIKICAgICAgICBpbnQgbnJfcGVu ZGluZyA9IG5yX3J1bm5pbmc7CiMgMTEwMiAia2VybmVsL3NjaGVkLmMiCiAgICAgICAgbnJfcGVu ZGluZy0tOwoKICAgICAgICBpZiAobnJfcGVuZGluZykgewoKCgoKICAgICAgICAgICAgICAgIGlm IChnZXRfY3VycmVudCgpLT5wb2xpY3kgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0 X2N1cnJlbnQoKS0+cG9saWN5IHw9IDB4MTA7CiAgICAgICAgICAgICAgICBnZXRfY3VycmVudCgp LT5uZWVkX3Jlc2NoZWQgPSAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gMDsKfQoKIF9fYXR0 cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBsb25nIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4KGlu dCBwb2xpY3kpCnsKICAgICAgICBpbnQgcmV0ID0gLTIyOwoKICAgICAgICBzd2l0Y2ggKHBvbGlj eSkgewogICAgICAgIGNhc2UgMToKICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICByZXQg PSA5OTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMDoKICAgICAgICAgICAg ICAgIHJldCA9IDA7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmV0 dXJuIHJldDsKfQoKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBsb25nIHN5c19zY2hlZF9n ZXRfcHJpb3JpdHlfbWluKGludCBwb2xpY3kpCnsKICAgICAgICBpbnQgcmV0ID0gLTIyOwoKICAg ICAgICBzd2l0Y2ggKHBvbGljeSkgewogICAgICAgIGNhc2UgMToKICAgICAgICBjYXNlIDI6CiAg ICAgICAgICAgICAgICByZXQgPSAxOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2Fz ZSAwOgogICAgICAgICAgICAgICAgcmV0ID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJl dDsKfQoKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBsb25nIHN5c19zY2hlZF9ycl9nZXRf aW50ZXJ2YWwocGlkX3QgcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKmludGVydmFsKQp7CiAgICAgICAg c3RydWN0IHRpbWVzcGVjIHQ7CiAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwOwogICAgICAg IGludCByZXR2YWwgPSAtMjI7CgogICAgICAgIGlmIChwaWQgPCAwKQogICAgICAgICAgICAgICAg Z290byBvdXRfbm91bmxvY2s7CgogICAgICAgIHJldHZhbCA9IC0zOwogICAgICAgICh7ZG8geyAr K2dldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6 IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOyAodm9pZCkoJnRhc2tsaXN0X2xvY2spO30pOwogICAg ICAgIHAgPSBmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZCk7CiAgICAgICAgaWYgKHApCiAgICAgICAg ICAgICAgICBqaWZmaWVzX3RvX3RpbWVzcGVjKHAtPnBvbGljeSAmIDEgPyAwIDogKCgoMjAtKHAt Pm5pY2UpKSA+PiAyKSsxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnQp OwogICAgICAgICh7ZG8geyB9IHdoaWxlKDApOyBkbyB7IC0tZ2V0X2N1cnJlbnQoKS0+cHJlZW1w dF9jb3VudDsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgaWYgKChnZXRf Y3VycmVudCgpLT5wcmVlbXB0X2NvdW50ID09IDApICYmIGdldF9jdXJyZW50KCktPm5lZWRfcmVz Y2hlZCkgcHJlZW1wdF9zY2hlZHVsZSgpOyB9IHdoaWxlICgwKTt9KTsKICAgICAgICBpZiAocCkK ICAgICAgICAgICAgICAgIHJldHZhbCA9IChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplb2YodCkp ID8gX19jb25zdGFudF9jb3B5X3RvX3VzZXIoKGludGVydmFsKSwoJnQpLChzaXplb2YodCkpKSA6 IF9fZ2VuZXJpY19jb3B5X3RvX3VzZXIoKGludGVydmFsKSwoJnQpLChzaXplb2YodCkpKSkgPyAt MTQgOiAwOwpvdXRfbm91bmxvY2s6CiAgICAgICAgcmV0dXJuIHJldHZhbDsKfQoKc3RhdGljIHZv aWQgc2hvd190YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHApCnsKICAgICAgICB1bnNpZ25lZCBs b25nIGZyZWUgPSAwOwogICAgICAgIGludCBzdGF0ZTsKICAgICAgICBzdGF0aWMgY29uc3QgY2hh ciAqIHN0YXRfbmFtW10gPSB7ICJSIiwgIlMiLCAiRCIsICJaIiwgIlQiLCAiVyIgfTsKCiAgICAg ICAgcHJpbnRrKCIlLTEzLjEzcyAiLCBwLT5jb21tKTsKICAgICAgICBzdGF0ZSA9IHAtPnN0YXRl ID8gZmZ6KH5wLT5zdGF0ZSkgKyAxIDogMDsKICAgICAgICBpZiAoKCh1bnNpZ25lZCkgc3RhdGUp IDwgc2l6ZW9mKHN0YXRfbmFtKS9zaXplb2YoY2hhciAqKSkKICAgICAgICAgICAgICAgIHByaW50 ayhzdGF0X25hbVtzdGF0ZV0pOwogICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHByaW50aygi ICIpOwoKICAgICAgICBpZiAocCA9PSBnZXRfY3VycmVudCgpKQogICAgICAgICAgICAgICAgcHJp bnRrKCIgY3VycmVudCAgIik7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcHJpbnRrKCIg JTA4bFggIiwgdGhyZWFkX3NhdmVkX3BjKCZwLT50aHJlYWQpKTsKCgoKCgoKICAgICAgICB7CiAg ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICogbiA9ICh1bnNpZ25lZCBsb25nICopIChwKzEp OwogICAgICAgICAgICAgICAgd2hpbGUgKCEqbikKICAgICAgICAgICAgICAgICAgICAgICAgbisr OwogICAgICAgICAgICAgICAgZnJlZSA9ICh1bnNpZ25lZCBsb25nKSBuIC0gKHVuc2lnbmVkIGxv bmcpKHArMSk7CiAgICAgICAgfQogICAgICAgIHByaW50aygiJTVsdSAlNWQgJTZkICIsIGZyZWUs IHAtPnBpZCwgcC0+cF9wcHRyLT5waWQpOwogICAgICAgIGlmIChwLT5wX2NwdHIpCiAgICAgICAg ICAgICAgICBwcmludGsoIiU1ZCAiLCBwLT5wX2NwdHItPnBpZCk7CiAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgcHJpbnRrKCIgICAgICAiKTsKICAgICAgICBpZiAocC0+cF95c3B0cikKICAg ICAgICAgICAgICAgIHByaW50aygiJTdkIiwgcC0+cF95c3B0ci0+cGlkKTsKICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICBwcmludGsoIiAgICAgICAiKTsKICAgICAgICBpZiAocC0+cF9vc3B0 cikKICAgICAgICAgICAgICAgIHByaW50aygiICU1ZCIsIHAtPnBfb3NwdHItPnBpZCk7CiAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgcHJpbnRrKCIgICAgICAiKTsKICAgICAgICBpZiAoIXAt Pm1tKQogICAgICAgICAgICAgICAgcHJpbnRrKCIgKEwtVExCKVxuIik7CiAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgcHJpbnRrKCIgKE5PVExCKVxuIik7CgoKCiAgICAgICAgewogICAgICAg ICAgICAgICAgZXh0ZXJuIHZvaWQgc2hvd190cmFjZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAq dHNrKTsKICAgICAgICAgICAgICAgIHNob3dfdHJhY2VfdGFzayhwKTsKICAgICAgICB9Cgp9Cgpj aGFyICogcmVuZGVyX3NpZ3NldF90KHNpZ3NldF90ICpzZXQsIGNoYXIgKmJ1ZmZlcikKewogICAg ICAgIGludCBpID0gNjQsIHg7CiAgICAgICAgZG8gewogICAgICAgICAgICAgICAgaSAtPSA0LCB4 ID0gMDsKICAgICAgICAgICAgICAgIGlmICgoX19idWlsdGluX2NvbnN0YW50X3AoaSsxKSA/IF9f Y29uc3Rfc2lnaXNtZW1iZXIoKHNldCksKGkrMSkpIDogX19nZW5fc2lnaXNtZW1iZXIoKHNldCks KGkrMSkpKSkgeCB8PSAxOwogICAgICAgICAgICAgICAgaWYgKChfX2J1aWx0aW5fY29uc3RhbnRf cChpKzIpID8gX19jb25zdF9zaWdpc21lbWJlcigoc2V0KSwoaSsyKSkgOiBfX2dlbl9zaWdpc21l bWJlcigoc2V0KSwoaSsyKSkpKSB4IHw9IDI7CiAgICAgICAgICAgICAgICBpZiAoKF9fYnVpbHRp bl9jb25zdGFudF9wKGkrMykgPyBfX2NvbnN0X3NpZ2lzbWVtYmVyKChzZXQpLChpKzMpKSA6IF9f Z2VuX3NpZ2lzbWVtYmVyKChzZXQpLChpKzMpKSkpIHggfD0gNDsKICAgICAgICAgICAgICAgIGlm ICgoX19idWlsdGluX2NvbnN0YW50X3AoaSs0KSA/IF9fY29uc3Rfc2lnaXNtZW1iZXIoKHNldCks KGkrNCkpIDogX19nZW5fc2lnaXNtZW1iZXIoKHNldCksKGkrNCkpKSkgeCB8PSA4OwogICAgICAg ICAgICAgICAgKmJ1ZmZlcisrID0gKHggPCAxMCA/ICcwJyA6ICdhJyAtIDEwKSArIHg7CiAgICAg ICAgfSB3aGlsZSAoaSA+PSA0KTsKICAgICAgICAqYnVmZmVyID0gMDsKICAgICAgICByZXR1cm4g YnVmZmVyOwp9Cgp2b2lkIHNob3dfc3RhdGUodm9pZCkKewogICAgICAgIHN0cnVjdCB0YXNrX3N0 cnVjdCAqcDsKCgogICAgICAgIHByaW50aygiXG4iCiAgICAgICAgICAgICAgICIgICAgICAgICAg ICAgICAgICAgICAgICAgZnJlZSAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmdcbiIpOwog ICAgICAgIHByaW50aygiICB0YXNrICAgICAgICAgICAgIFBDICAgIHN0YWNrICAgcGlkIGZhdGhl ciBjaGlsZCB5b3VuZ2VyIG9sZGVyXG4iKTsKCgoKCgogICAgICAgICh7ZG8geyArK2dldF9jdXJy ZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5 Iik7IH0gd2hpbGUgKDApOyAodm9pZCkoJnRhc2tsaXN0X2xvY2spO30pOwogICAgICAgIGZvciAo cCA9ICYoaW5pdF90YXNrX3VuaW9uLnRhc2spIDsgKHAgPSBwLT5uZXh0X3Rhc2spICE9ICYoaW5p dF90YXNrX3VuaW9uLnRhc2spIDsgKSB7CgoKCgogICAgICAgICAgICAgICAgdG91Y2hfbm1pX3dh dGNoZG9nKCk7CiAgICAgICAgICAgICAgICBzaG93X3Rhc2socCk7CiAgICAgICAgfQogICAgICAg ICh7ZG8geyB9IHdoaWxlKDApOyBkbyB7IC0tZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudDsg X19hc21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgaWYgKChnZXRfY3VycmVudCgp LT5wcmVlbXB0X2NvdW50ID09IDApICYmIGdldF9jdXJyZW50KCktPm5lZWRfcmVzY2hlZCkgcHJl ZW1wdF9zY2hlZHVsZSgpOyB9IHdoaWxlICgwKTt9KTsKfQojIDEyNzcgImtlcm5lbC9zY2hlZC5j Igp2b2lkIHJlcGFyZW50X3RvX2luaXQodm9pZCkKewogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVj dCAqdGhpc190YXNrID0gZ2V0X2N1cnJlbnQoKTsKCiAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9s YXRpbGVfXygiY2xpIjogOiA6Im1lbW9yeSIpOyAoe2RvIHsgKytnZXRfY3VycmVudCgpLT5wcmVl bXB0X2NvdW50OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxl ICgwKTsgKHZvaWQpKCZ0YXNrbGlzdF9sb2NrKTt9KTsgfSB3aGlsZSAoMCk7CgoKICAgICAgICBk byB7ICh0aGlzX3Rhc2spLT5uZXh0X3Rhc2stPnByZXZfdGFzayA9ICh0aGlzX3Rhc2spLT5wcmV2 X3Rhc2s7ICh0aGlzX3Rhc2spLT5wcmV2X3Rhc2stPm5leHRfdGFzayA9ICh0aGlzX3Rhc2spLT5u ZXh0X3Rhc2s7IGlmICgodGhpc190YXNrKS0+cF9vc3B0cikgKHRoaXNfdGFzayktPnBfb3NwdHIt PnBfeXNwdHIgPSAodGhpc190YXNrKS0+cF95c3B0cjsgaWYgKCh0aGlzX3Rhc2spLT5wX3lzcHRy KSAodGhpc190YXNrKS0+cF95c3B0ci0+cF9vc3B0ciA9ICh0aGlzX3Rhc2spLT5wX29zcHRyOyBl bHNlICh0aGlzX3Rhc2spLT5wX3BwdHItPnBfY3B0ciA9ICh0aGlzX3Rhc2spLT5wX29zcHRyOyB9 IHdoaWxlICgwKTsKICAgICAgICB0aGlzX3Rhc2stPnBfcHB0ciA9IGNoaWxkX3JlYXBlcjsKICAg ICAgICB0aGlzX3Rhc2stPnBfb3BwdHIgPSBjaGlsZF9yZWFwZXI7CiAgICAgICAgZG8geyAodGhp c190YXNrKS0+bmV4dF90YXNrID0gJihpbml0X3Rhc2tfdW5pb24udGFzayk7ICh0aGlzX3Rhc2sp LT5wcmV2X3Rhc2sgPSAoaW5pdF90YXNrX3VuaW9uLnRhc2spLnByZXZfdGFzazsgKGluaXRfdGFz a191bmlvbi50YXNrKS5wcmV2X3Rhc2stPm5leHRfdGFzayA9ICh0aGlzX3Rhc2spOyAoaW5pdF90 YXNrX3VuaW9uLnRhc2spLnByZXZfdGFzayA9ICh0aGlzX3Rhc2spOyAodGhpc190YXNrKS0+cF95 c3B0ciA9ICgodm9pZCAqKTApOyBpZiAoKCh0aGlzX3Rhc2spLT5wX29zcHRyID0gKHRoaXNfdGFz ayktPnBfcHB0ci0+cF9jcHRyKSAhPSAoKHZvaWQgKikwKSkgKHRoaXNfdGFzayktPnBfb3NwdHIt PnBfeXNwdHIgPSB0aGlzX3Rhc2s7ICh0aGlzX3Rhc2spLT5wX3BwdHItPnBfY3B0ciA9IHRoaXNf dGFzazsgfSB3aGlsZSAoMCk7CgoKICAgICAgICB0aGlzX3Rhc2stPmV4aXRfc2lnbmFsID0gMTc7 CgoKCiAgICAgICAgZG8geyBkbyB7ICsrZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudDsgX19h c21fXyBfX3ZvbGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsgfSB3aGlsZSAoMCk7ICh2b2lkKSgm cnVucXVldWVfbG9jayk7IH0gd2hpbGUoMCk7CgogICAgICAgIHRoaXNfdGFzay0+cHRyYWNlID0g MDsKICAgICAgICB0aGlzX3Rhc2stPm5pY2UgPSAoMCk7CiAgICAgICAgdGhpc190YXNrLT5wb2xp Y3kgPSAwOwoKCgogICAgICAgIHRoaXNfdGFzay0+Y2FwX2VmZmVjdGl2ZSA9ICh+MCAmIH4oMSA8 PCAoOCkpKTsKICAgICAgICB0aGlzX3Rhc2stPmNhcF9pbmhlcml0YWJsZSA9ICgwKTsKICAgICAg ICB0aGlzX3Rhc2stPmNhcF9wZXJtaXR0ZWQgPSAofjApOwogICAgICAgIHRoaXNfdGFzay0+a2Vl cF9jYXBhYmlsaXRpZXMgPSAwOwogICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplb2Yo Kih0aGlzX3Rhc2stPnJsaW0pKSkgPyBfX2NvbnN0YW50X21lbWNweSgodGhpc190YXNrLT5ybGlt KSwoKGluaXRfdGFza191bmlvbi50YXNrKS5ybGltKSwoc2l6ZW9mKCoodGhpc190YXNrLT5ybGlt KSkpKSA6IF9fbWVtY3B5KCh0aGlzX3Rhc2stPnJsaW0pLCgoaW5pdF90YXNrX3VuaW9uLnRhc2sp LnJsaW0pLChzaXplb2YoKih0aGlzX3Rhc2stPnJsaW0pKSkpKTsKICAgICAgICB0aGlzX3Rhc2st PnVzZXIgPSAoJnJvb3RfdXNlcik7CgogICAgICAgIGRvIHsgZG8geyB9IHdoaWxlKDApOyBkbyB7 IC0tZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudDsgX19hc21fXyBfX3ZvbGF0aWxlX18oIiI6 IDogOiJtZW1vcnkiKTsgaWYgKChnZXRfY3VycmVudCgpLT5wcmVlbXB0X2NvdW50ID09IDApICYm IGdldF9jdXJyZW50KCktPm5lZWRfcmVzY2hlZCkgcHJlZW1wdF9zY2hlZHVsZSgpOyB9IHdoaWxl ICgwKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgZG8geyAoe2RvIHsgfSB3aGlsZSgwKTsgZG8geyAt LWdldF9jdXJyZW50KCktPnByZWVtcHRfY291bnQ7IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6 IDoibWVtb3J5Iik7IGlmICgoZ2V0X2N1cnJlbnQoKS0+cHJlZW1wdF9jb3VudCA9PSAwKSAmJiBn ZXRfY3VycmVudCgpLT5uZWVkX3Jlc2NoZWQpIHByZWVtcHRfc2NoZWR1bGUoKTsgfSB3aGlsZSAo MCk7fSk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJzdGkiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUg KDApOwp9CgoKCgoKCnZvaWQgZGFlbW9uaXplKHZvaWQpCnsKICAgICAgICBzdHJ1Y3QgZnNfc3Ry dWN0ICpmczsKCgoKCgoKCiAgICAgICAgZXhpdF9tbShnZXRfY3VycmVudCgpKTsKCiAgICAgICAg Z2V0X2N1cnJlbnQoKS0+c2Vzc2lvbiA9IDE7CiAgICAgICAgZ2V0X2N1cnJlbnQoKS0+cGdycCA9 IDE7CiAgICAgICAgZ2V0X2N1cnJlbnQoKS0+dHR5ID0gKCh2b2lkICopMCk7CgoKCiAgICAgICAg ZXhpdF9mcyhnZXRfY3VycmVudCgpKTsKICAgICAgICBmcyA9IChpbml0X3Rhc2tfdW5pb24udGFz aykuZnM7CiAgICAgICAgZ2V0X2N1cnJlbnQoKS0+ZnMgPSBmczsKICAgICAgICBhdG9taWNfaW5j KCZmcy0+Y291bnQpOwogICAgICAgIGV4aXRfZmlsZXMoZ2V0X2N1cnJlbnQoKSk7CiAgICAgICAg Z2V0X2N1cnJlbnQoKS0+ZmlsZXMgPSAoaW5pdF90YXNrX3VuaW9uLnRhc2spLmZpbGVzOwogICAg ICAgIGF0b21pY19pbmMoJmdldF9jdXJyZW50KCktPmZpbGVzLT5jb3VudCk7Cn0KCmV4dGVybiB1 bnNpZ25lZCBsb25nIHdhaXRfaW5pdF9pZGxlOwoKdm9pZCBfX2F0dHJpYnV0ZV9fICgoX19zZWN0 aW9uX18gKCIudGV4dC5pbml0IikpKSBpbml0X2lkbGUodm9pZCkKewogICAgICAgIHN0cnVjdCBz Y2hlZHVsZV9kYXRhICogc2NoZWRfZGF0YTsKICAgICAgICBzY2hlZF9kYXRhID0gJmFsaWduZWRf ZGF0YVswXS5zY2hlZHVsZV9kYXRhOwoKICAgICAgICBpZiAoZ2V0X2N1cnJlbnQoKSAhPSAmKGlu aXRfdGFza191bmlvbi50YXNrKSAmJiB0YXNrX29uX3J1bnF1ZXVlKGdldF9jdXJyZW50KCkpKSB7 CiAgICAgICAgICAgICAgICBwcmludGsoIlVHSCEgKCVkOiVkKSB3YXMgb24gdGhlIHJ1bnF1ZXVl LCByZW1vdmluZy5cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIDAsIGdldF9jdXJyZW50KCkt PnBpZCk7CiAgICAgICAgICAgICAgICBkZWxfZnJvbV9ydW5xdWV1ZShnZXRfY3VycmVudCgpKTsK ICAgICAgICB9CiAgICAgICAgc2NoZWRfZGF0YS0+Y3VyciA9IGdldF9jdXJyZW50KCk7CiAgICAg ICAgc2NoZWRfZGF0YS0+bGFzdF9zY2hlZHVsZSA9IGdldF9jeWNsZXMoKTsKICAgICAgICBjbGVh cl9iaXQoZ2V0X2N1cnJlbnQoKS0+cHJvY2Vzc29yLCAmd2FpdF9pbml0X2lkbGUpOwp9CgpleHRl cm4gdm9pZCBpbml0X3RpbWVydmVjcyAodm9pZCk7Cgp2b2lkIF9fYXR0cmlidXRlX18gKChfX3Nl Y3Rpb25fXyAoIi50ZXh0LmluaXQiKSkpIHNjaGVkX2luaXQodm9pZCkKewoKCgoKICAgICAgICBp bnQgY3B1ID0gMDsKICAgICAgICBpbnQgbnI7CgogICAgICAgIChpbml0X3Rhc2tfdW5pb24udGFz aykucHJvY2Vzc29yID0gY3B1OwoKICAgICAgICBmb3IobnIgPSAwOyBuciA8ICg0MDk2ID4+IDIp OyBucisrKQogICAgICAgICAgICAgICAgcGlkaGFzaFtucl0gPSAoKHZvaWQgKikwKTsKCiAgICAg ICAgaW5pdF90aW1lcnZlY3MoKTsKCiAgICAgICAgaW5pdF9iaChUSU1FUl9CSCwgdGltZXJfYmgp OwogICAgICAgIGluaXRfYmgoVFFVRVVFX0JILCB0cXVldWVfYmgpOwogICAgICAgIGluaXRfYmgo SU1NRURJQVRFX0JILCBpbW1lZGlhdGVfYmgpOwoKCgoKICAgICAgICBhdG9taWNfaW5jKCZpbml0 X21tLm1tX2NvdW50KTsKICAgICAgICBlbnRlcl9sYXp5X3RsYigmaW5pdF9tbSwgZ2V0X2N1cnJl bnQoKSwgY3B1KTsKfQo=