From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13218 invoked by alias); 2 Mar 2003 03:46:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 13201 invoked by uid 71); 2 Mar 2003 03:46:00 -0000 Resent-Date: 2 Mar 2003 03:46:00 -0000 Resent-Message-ID: <20030302034600.13199.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, eezyy@gmx.net Received: (qmail 12823 invoked by uid 48); 2 Mar 2003 03:41:38 -0000 Message-Id: <20030302034138.12822.qmail@sources.redhat.com> Date: Sun, 02 Mar 2003 03:46:00 -0000 From: eezyy@gmx.net Reply-To: eezyy@gmx.net To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: optimization/9900: map coloring failure X-SW-Source: 2003-03/txt/msg00032.txt.bz2 List-Id: >Number: 9900 >Category: optimization >Synopsis: map coloring failure >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Sun Mar 02 03:46:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: me >Release: gcc version 3.4 20030301 cvs >Organization: >Environment: >Description: tried to compile binutils, got this: readelf.c: In function `get_dynamic_flags': readelf.c:4603: internal compiler error: Didn't find a coloring. preprocessed source attached >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="readelf.C" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="readelf.C" IyAxICJyZWFkZWxmLmMiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKIyAx ICJyZWFkZWxmLmMiCiMgMjUgInJlYWRlbGYuYyIKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0Lmgi IDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVh dHVyZXMuaCIgMSAzCiMgMjkxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjkyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg MiAzCiMgMzIwICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9n bnUvc3R1YnMuaCIgMSAzCiMgMzIxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzcg Ii91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMiAzCiMgNjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIg MwoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9u LCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIF9fYXR0cmlidXRl X18gKChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAo aW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgX19hdHRyaWJ1dGVfXyAo KF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9f YXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgojIDI2ICJyZWFkZWxmLmMiIDIKIyAxICIvdXNyL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMK CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUv Yml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjQvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjEzICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHNp emVfdDsKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNp Z25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlw ZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25n OwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRf dDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91 c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsK dHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50 IF9faW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRl ZiBzaWduZWQgaW50IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsK Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9f ZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0 eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsK dHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVm IF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3Vf aW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90 IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5 cGVkZWYgX191X2xvbmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0 eXBlZGVmIF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxb Ml07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAq X19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGlu dCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBs b25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVm IGludCBfX2Nsb2NraWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYg aW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoK CnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxr Y250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcg X19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRl ZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRf dDsKCgp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19v ZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBl ZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv cHRocmVhZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1 ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2No ZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi IDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAg aW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1 Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MK ewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3Nj aGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2Nv cGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAq X19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0 eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9w dGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0 cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5z aWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21f cmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAg aW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhy ZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRo cmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBl ZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2Nr IF9fcndfbG9jazsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3Jp dGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2Ny IF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7 Cn0gcHRocmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5k OwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZv bGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVj dCBfcHRocmVhZF9mYXN0bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50 IF9fYmFfcHJlc2VudDsKICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVhZF9i YXJyaWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9i YXJyaWVyYXR0cl90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90Owoj IDE0NCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9z aG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9s b25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90 Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoK Cgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7 CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoK Cgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7 CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoK CgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90 OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7 CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJf dDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTMyICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyA1OCAiL3Vzci9pbmNsdWRl L3RpbWUuaCIgMwoKCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CgoKCiMgNzQgIi91c3IvaW5j bHVkZS90aW1lLmgiIDMKCgp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKCgoKIyA5MiAiL3Vzci9p bmNsdWRlL3RpbWUuaCIgMwp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsKIyAxMDQgIi91 c3IvaW5jbHVkZS90aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMzMgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNv bmRzX3Q7CgoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgoKCgojIDEgIi91 c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkZGVmLmgiIDEg MwojIDE0NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiB1bnNpZ25l ZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBl ZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE5MCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAz CnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsK dHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsK dHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsK dHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsK Cgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g KF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQxNl90IF9fYXR0cmlidXRlX18g KChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDMyX3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVf aW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykpKTsKCnR5cGVkZWYgaW50 IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dvcmRfXykpKTsKIyAyMTIg Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIg MSAzCiMgMzcgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz L2VuZGlhbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyAyMTMgIi91 c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVj dC5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIg MiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMjMgIi91c3IvaW5j bHVkZS9iaXRzL3NpZ3NldC5oIiAzCnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlw ZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICog c2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAgfSBfX3NpZ3NldF90OwojIDM1ICIvdXNy L2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90 OwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMTE2ICIvdXNyL2luY2x1ZGUv dGltZS5oIiAzCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIGxv bmcgaW50IHR2X25zZWM7CiAgfTsKIyA0NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAz CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNjcgIi91c3IvaW5jbHVkZS9i aXRzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAg IF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsKICB9OwojIDQ3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVj dC5oIiAyIDMKIyA1NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwp0eXBlZGVmIGxvbmcg aW50IF9fZmRfbWFzazsKIyA2NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwp0eXBlZGVm IHN0cnVjdAogIHsKCgoKICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2Yg KF9fZmRfbWFzaykpXTsKCgoKCgogIH0gZmRfc2V0OwoKCgoKCgp0eXBlZGVmIF9fZmRfbWFzayBm ZF9tYXNrOwojIDk5ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCgoKCgoKCgpleHRlcm4g aW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAg ICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAg ICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAg ICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSA7CgoKCgoKZXh0ZXJuIGlu dCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAg ICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAg ICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAg ICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0LAogICAgICAg ICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zaWdtYXNrKSA7CgoK CiMgMjE2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRl L3N5cy9zeXNtYWNyb3MuaCIgMSAzCiMgMjE5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIg MwoKCgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYgX19ibGtj bnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlw ZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsKIyAyNTcgIi91c3IvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMwp0eXBlZGVmIF9fYmxrY250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtj bnQ2NF90IGZzYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7 CgoKCiMgMjcgInJlYWRlbGYuYyIgMgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAxIDMK IyAzMiAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5o IiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIgMwojIDk2ICIvdXNyL2luY2x1 ZGUvc3lzL3N0YXQuaCIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RhdC5oIiAxIDMKIyAz NiAiL3Vzci9pbmNsdWRlL2JpdHMvc3RhdC5oIiAzCnN0cnVjdCBzdGF0CiAgewogICAgX19kZXZf dCBzdF9kZXY7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19wYWQxOwoKICAgIF9faW5vX3Qgc3Rf aW5vOwoKCgogICAgX19tb2RlX3Qgc3RfbW9kZTsKICAgIF9fbmxpbmtfdCBzdF9ubGluazsKICAg IF9fdWlkX3Qgc3RfdWlkOwogICAgX19naWRfdCBzdF9naWQ7CiAgICBfX2Rldl90IHN0X3JkZXY7 CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19wYWQyOwoKICAgIF9fb2ZmX3Qgc3Rfc2l6ZTsKCgoK ICAgIF9fYmxrc2l6ZV90IHN0X2Jsa3NpemU7CgoKICAgIF9fYmxrY250X3Qgc3RfYmxvY2tzOwoK CgogICAgX190aW1lX3Qgc3RfYXRpbWU7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDE7 CiAgICBfX3RpbWVfdCBzdF9tdGltZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMjsK ICAgIF9fdGltZV90IHN0X2N0aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQzOwoK ICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkNDsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9f dW51c2VkNTsKCgoKICB9OwoKCnN0cnVjdCBzdGF0NjQKICB7CiAgICBfX2Rldl90IHN0X2RldjsK ICAgIHVuc2lnbmVkIGludCBfX3BhZDE7CgogICAgX19pbm9fdCBfX3N0X2lubzsKICAgIF9fbW9k ZV90IHN0X21vZGU7CiAgICBfX25saW5rX3Qgc3Rfbmxpbms7CiAgICBfX3VpZF90IHN0X3VpZDsK ICAgIF9fZ2lkX3Qgc3RfZ2lkOwogICAgX19kZXZfdCBzdF9yZGV2OwogICAgdW5zaWduZWQgaW50 IF9fcGFkMjsKICAgIF9fb2ZmNjRfdCBzdF9zaXplOwogICAgX19ibGtzaXplX3Qgc3RfYmxrc2l6 ZTsKCiAgICBfX2Jsa2NudDY0X3Qgc3RfYmxvY2tzOwogICAgX190aW1lX3Qgc3RfYXRpbWU7CiAg ICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDE7CiAgICBfX3RpbWVfdCBzdF9tdGltZTsKICAg IHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMjsKICAgIF9fdGltZV90IHN0X2N0aW1lOwogICAg dW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQzOwogICAgX19pbm82NF90IHN0X2lubzsKICB9Owoj IDk5ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMiAzCiMgMjAwICIvdXNyL2luY2x1ZGUvc3lz L3N0YXQuaCIgMwpleHRlcm4gaW50IHN0YXQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zp bGUsCiAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fcmVzdHJpY3QgX19idWYpIDsKCgoK ZXh0ZXJuIGludCBmc3RhdCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0ICpfX2J1ZikgOwojIDIxOSAi L3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKZXh0ZXJuIGludCBzdGF0NjQgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdDY0ICpf X3Jlc3RyaWN0IF9fYnVmKSA7CmV4dGVybiBpbnQgZnN0YXQ2NCAoaW50IF9fZmQsIHN0cnVjdCBz dGF0NjQgKl9fYnVmKSA7CgoKCgoKCmV4dGVybiBpbnQgbHN0YXQgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2ZpbGUsCiAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3Jlc3RyaWN0 IF9fYnVmKSA7CiMgMjQxICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4gaW50IGxz dGF0NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGUsCiAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHN0YXQ2NCAqX19yZXN0cmljdCBfX2J1ZikgOwoKCgoKCgpleHRlcm4gaW50IGNo bW9kIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19tb2RlX3QgX19tb2RlKSA7CgoKCmV4dGVybiBp bnQgZmNobW9kIChpbnQgX19mZCwgX19tb2RlX3QgX19tb2RlKSA7CgoKCgoKZXh0ZXJuIF9fbW9k ZV90IHVtYXNrIChfX21vZGVfdCBfX21hc2spIDsKCgoKCmV4dGVybiBfX21vZGVfdCBnZXR1bWFz ayAodm9pZCkgOwoKCgpleHRlcm4gaW50IG1rZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19t b2RlX3QgX19tb2RlKSA7CgoKCgoKZXh0ZXJuIGludCBta25vZCAoX19jb25zdCBjaGFyICpfX3Bh dGgsIF9fbW9kZV90IF9fbW9kZSwgX19kZXZfdCBfX2RldikKICAgICA7CgoKCgpleHRlcm4gaW50 IG1rZmlmbyAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSkgOwojIDMwNiAi L3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKZXh0ZXJuIGludCBfX2Z4c3RhdCAoaW50IF9fdmVy LCBpbnQgX19maWxkZXMsIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSA7CmV4dGVybiBpbnQgX194 c3RhdCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUsCiAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHN0YXQgKl9fc3RhdF9idWYpIDsKZXh0ZXJuIGludCBfX2x4c3RhdCAoaW50 IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSA7CiMgMzMwICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIg MwpleHRlcm4gaW50IF9fZnhzdGF0NjQgKGludCBfX3ZlciwgaW50IF9fZmlsZGVzLCBzdHJ1Y3Qg c3RhdDY0ICpfX3N0YXRfYnVmKQogICAgIDsKZXh0ZXJuIGludCBfX3hzdGF0NjQgKGludCBfX3Zl ciwgX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHN0YXQ2NCAqX19zdGF0X2J1ZikgOwpleHRlcm4gaW50IF9fbHhzdGF0NjQgKGludCBfX3Zlciwg X19jb25zdCBjaGFyICpfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz dGF0NjQgKl9fc3RhdF9idWYpIDsKCmV4dGVybiBpbnQgX194bWtub2QgKGludCBfX3ZlciwgX19j b25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSwKICAgICAgICAgICAgICAgICAgICAg X19kZXZfdCAqX19kZXYpIDsKCgoKCmV4dGVybiBfX2lubGluZV9fIGludCBzdGF0IChfX2NvbnN0 IGNoYXIgKl9fcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpf X3N0YXRidWYpCnsKICByZXR1cm4gX194c3RhdCAoMywgX19wYXRoLCBfX3N0YXRidWYpOwp9CgoK ZXh0ZXJuIF9faW5saW5lX18gaW50IGxzdGF0IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqX19zdGF0YnVmKQp7CiAgcmV0dXJu IF9fbHhzdGF0ICgzLCBfX3BhdGgsIF9fc3RhdGJ1Zik7Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBp bnQgZnN0YXQgKGludCBfX2ZkLCBzdHJ1Y3Qgc3RhdCAqX19zdGF0YnVmKQp7CiAgcmV0dXJuIF9f ZnhzdGF0ICgzLCBfX2ZkLCBfX3N0YXRidWYpOwp9CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IG1r bm9kIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fZGV2X3QgX19kZXYpCnsKICByZXR1cm4gX194bWtub2QgKDEsIF9f cGF0aCwgX19tb2RlLCAmX19kZXYpOwp9CgoKCgoKZXh0ZXJuIF9faW5saW5lX18gaW50IHN0YXQ2 NCAoX19jb25zdCBjaGFyICpfX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBzdGF0NjQgKl9fc3RhdGJ1ZikKewogIHJldHVybiBfX3hzdGF0NjQgKDMsIF9fcGF0aCwg X19zdGF0YnVmKTsKfQoKCmV4dGVybiBfX2lubGluZV9fIGludCBsc3RhdDY0IChfX2NvbnN0IGNo YXIgKl9fcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQg Kl9fc3RhdGJ1ZikKewogIHJldHVybiBfX2x4c3RhdDY0ICgzLCBfX3BhdGgsIF9fc3RhdGJ1Zik7 Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgZnN0YXQ2NCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0 NjQgKl9fc3RhdGJ1ZikKewogIHJldHVybiBfX2Z4c3RhdDY0ICgzLCBfX2ZkLCBfX3N0YXRidWYp Owp9CgoKCgoKIyAyOCAicmVhZGVsZi5jIiAyCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAzOSAiL3Vzci9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAzCgoKCgojIDEgIi91c3Iv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj IDQ0ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGlv LmgiIDIgMwojIDUzICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNs dWRlL3N0ZGlvLmgiIDMKCgp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwoKCgoKCiMgNzEg Ii91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIg Mwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgODEgIi91c3IvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDE0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMK IyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRl Zi5oIiAxIDMKIyAzMjUgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2lu Y2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiBsb25nIGludCB3Y2hhcl90OwojIDM1NCAiL3Vzci9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBl ZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CiMgMTUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIg MiAzCiMgMjQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93 Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAi L3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5o IiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDYzICIvdXNyL2luY2x1ZGUv d2NoYXIuaCIgMwoKCgoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1bmlv bgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1ZTsK fSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCnR5cGVk ZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0df ZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0ZV90 IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIg MwojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL2djb252 LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93 Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5j bHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2MyAi L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKCiMgMjkgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMK CgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3Rk ZGVmLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKCgoKZW51bQp7CiAg X19HQ09OVl9PSyA9IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9fR0NP TlZfTk9NRU0sCgogIF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBVVCwK ICBfX0dDT05WX0lMTEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoKICBf X0dDT05WX0lMTEVHQUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07CgoK CmVudW0KewogIF9fR0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9FUlJP UlMgPSAweDAwMDIKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2NvbnZfc3Rl cF9kYXRhOwpzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90cmFu c19kYXRhOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3Rl cCAqLCBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3QgKiwgaW50 LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252 X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252 X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19n Y29udl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX19n Y29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9f Z2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hhciAq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90 cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGlu dCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBl ZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2Nv bnZfdHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2Nv bnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5z X2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29u dl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVj dCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29uc3QgY2hhciAq X19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFtZTsKICBjaGFy ICpfX3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19p bml0X2ZjdDsKICBfX2djb252X2VuZF9mY3QgX19lbmRfZmN0OwoKCgogIGludCBfX21pbl9uZWVk ZWRfZnJvbTsKICBpbnQgX19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90bzsK ICBpbnQgX19tYXhfbmVlZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0 YTsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25lZCBjaGFyICpfX291 dGJ1ZjsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoKICBpbnQgX19mbGFnczsKCgoK ICBpbnQgX19pbnZvY2F0aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBf X21ic3RhdGVfdCAqX19zdGF0ZXA7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKCgoKICBzdHJ1Y3Qg X19nY29udl90cmFuc19kYXRhICpfX3RyYW5zOwp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfX2djb252 X2luZm8KewogIHNpemVfdCBfX25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBz OwogIF9fZXh0ZW5zaW9uX18gc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbXTsKfSAq X19nY29udl90OwojIDQ1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwp0eXBlZGVmIHVu aW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAgc3RydWN0 IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsK ICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19h dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3Qg X19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50 IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVm IHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lf XykpKTsKIyAzMyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDUzICIvdXNyL2luY2x1ZGUv bGliaW8uaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2lu Y2x1ZGUvc3RkYXJnLmgiIDEgMwojIDQzICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt Z251LzMuNC9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19n bnVjX3ZhX2xpc3Q7CiMgNTQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyAxNjIgIi91c3Iv aW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fanVtcF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CiMg MTcyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoK CgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVj dCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMgMTk1ICIvdXNyL2luY2x1ZGUvbGli aW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29rLAogIF9f Y29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRfbm9jb252Cn07 CiMgMjYzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX0ZJTEUgewogIGludCBf ZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVhZF9lbmQ7CiAg Y2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBjaGFyKiBfSU9f d3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1Zl9iYXNlOwog IGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNoYXIgKl9JT19i YWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9fbWFya2VyICpf bWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBfZmlsZW5vOwoKCgog IGludCBfZmxhZ3MyOwoKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVkIHNob3J0 IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIgX3Nob3J0 YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMxMSAiL3Vzci9pbmNsdWRlL2xpYmlv LmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgoKCgogIHZvaWQgKl9fcGFkMTsKICB2b2lkICpf X3BhZDI7CgogIGludCBfbW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAt IDIgKiBzaXplb2YgKHZvaWQgKildOwoKfTsKCgp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfSU9f RklMRTsKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1 cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3Rk b3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsKIyAzNTAg Ii91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAo dm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwoKCgoKCgoKdHlw ZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hh ciAqX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pOwoK CgoKCgoKdHlwZWRlZiBpbnQgX19pb19zZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90 ICpfX3BvcywgaW50IF9fdyk7CgoKdHlwZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAqX19j b29raWUpOwoKCgoKdHlwZWRlZiBfX2lvX3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rpb25fdDsK dHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNvb2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBlZGVmIF9f aW9fc2Vla19mbiBjb29raWVfc2Vla19mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xvc2VfZm4g Y29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9fcmVhZF9m biAqcmVhZDsKICBfX2lvX3dyaXRlX2ZuICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNlZWs7CiAg X19pb19jbG9zZV9mbiAqY2xvc2U7Cn0gX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKdHlwZWRl ZiBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsKCnN0cnVj dCBfSU9fY29va2llX2ZpbGU7CgoKZXh0ZXJuIHZvaWQgX0lPX2Nvb2tpZV9pbml0IChzdHJ1Y3Qg X0lPX2Nvb2tpZV9maWxlICpfX2NmaWxlLCBpbnQgX19yZWFkX3dyaXRlLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKl9fY29va2llLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190 IF9fZm5zKTsKCgoKCgoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICopIDsKZXh0 ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lP X0ZJTEUgKiwgaW50KSA7CmV4dGVybiB3aW50X3QgX193dW5kZXJmbG93IChfSU9fRklMRSAqKSA7 CmV4dGVybiB3aW50X3QgX193dWZsb3cgKF9JT19GSUxFICopIDsKZXh0ZXJuIHdpbnRfdCBfX3dv dmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSA7CiMgNDMyICIvdXNyL2luY2x1ZGUvbGliaW8u aCIgMwpleHRlcm4gaW50IF9JT19nZXRjIChfSU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50IF9J T19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50IF9JT19mZW9mIChf SU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50IF9JT19mZXJyb3IgKF9JT19GSUxFICpfX2ZwKSA7 CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2ZwKSA7CgoKCgoKZXh0 ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgOwpleHRlcm4gdm9pZCBfSU9fZnVu bG9ja2ZpbGUgKF9JT19GSUxFICopIDsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9f RklMRSAqKSA7CiMgNDYyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192 ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAog ICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSA7 CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hh ciAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSA7 CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90KSA7 CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgOwoK ZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQs IGludCkgOwpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0 X3QsIGludCkgOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICop IDsKIyA4MiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9z dGRpby5oIiAyIDMKCgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgX19ub3RfdmFfbGlzdF9fOwoj IDk1ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGlv LmgiIDMKCgp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgoKdHlwZWRlZiBfR19mcG9zNjRf dCBmcG9zNjRfdDsKIyAxNDcgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40 L2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAx IDMKIyAxNDggIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUv c3RkaW8uaCIgMiAzCgoKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEUgKnN0ZGluOwpleHRlcm4gc3Ry dWN0IF9JT19GSUxFICpzdGRvdXQ7CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEUgKnN0ZGVycjsKCgoK CgoKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIDsKCmV4dGVy biBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSA7 CgoKCgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSA7CiMgMTgwICIvdXNyL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIg KnRtcG5hbSAoY2hhciAqX19zKSA7CgoKCmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQpIDsK CgoKCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgOwojIDIwMiAiL3Vzci9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBj aGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQog ICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0ZXJuIGludCBmY2xvc2Ug KEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gaW50IGZmbHVzaCAoRklMRSAqX19zdHJlYW0pIDsK CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0 ZXJuIGludCBmY2xvc2VhbGwgKHZvaWQpIDsKCgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgOwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICBG SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CiMgMjQ4ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGlvLmgiIDMKCgpleHRlcm4gRklMRSAqZm9wZW42 NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgOwpleHRlcm4gRklMRSAqZnJl b3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAg ICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgoKCmV4dGVybiBGSUxF ICpmZG9wZW4gKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIDsKCgoKCgpleHRlcm4g RklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lvX2Z1 bmNzKSA7CgoKZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwg X19jb25zdCBjaGFyICpfX21vZGVzKSA7CgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJlYW0g KGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVmbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCAqX19yZXN0cmljdCBfX3NpemVsb2MpIDsKCgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVm IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoK CmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19y ZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9f bikgOwoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZlciAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVh bSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19zaXplKSA7CgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIDsKCgoK CgpleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4 dGVybiBpbnQgcHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg OwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgOwoKCmV4dGVy biBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJn KSA7CgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hh ciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAg ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIDsKCgoKCgpleHRlcm4gaW50 IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAg ICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVy biBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAog ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBf X2dudWNfdmFfbGlzdCBfX2FyZykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w cmludGZfXywgMywgMCkpKTsKCgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jl c3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAg ICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9y bWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAq Kl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f cHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0 IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m bXQsIC4uLikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwg MykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykK ICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0 ZXJuIGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10 LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMp KSk7CgoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg OwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu Li4pIDsKCmV4dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAog ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p IDsKCgoKCgpleHRlcm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3Zh X2xpc3QgX19hcmcpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywg MiwgMCkpKTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f Zm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt YXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNzY2FuZiAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIF9fYXR0cmlidXRl X18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKCgoKCmV4dGVybiBpbnQgZmdl dGMgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZ2V0YyAoRklMRSAqX19zdHJlYW0pIDsK CgpleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIDsKCgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5s b2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9p ZCkgOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoK CgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50 IHB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBwdXRjaGFyIChp bnQgX19jKSA7CgoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklM RSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklM RSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSA7CgoK CgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgOwoKCmV4dGVybiBpbnQgcHV0dyAo aW50IF9fdywgRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAg IDsKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgOwoKCgoKZXh0ZXJuIGNoYXIgKmZn ZXRzX3VubG9ja2VkIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CiMgNDcwICIvdXNy L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0 ZXJuIF9fc3NpemVfdCBfX2dldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQg X19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtKSA7CmV4dGVybiBfX3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3Ry aWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVz dHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0bGluZSAo Y2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUg Kl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIDsKCgpl eHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19zKSA7CgoKCmV4dGVybiBpbnQgdW5nZXRj IChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lk ICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBz aXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSA7CgpleHRlcm4gc2l6ZV90IGZ3 cml0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIDsKCgoK CmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsK CgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIs IHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24s IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIDsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2Nr ZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0pIDsKCgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQg X19vZmYsIGludCBfX3doZW5jZSkgOwoKZXh0ZXJuIGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0 cmVhbSkgOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgOwoKIyA1MzcgIi91 c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMwpl eHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19vZmYsIGludCBfX3do ZW5jZSkgOwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0cmVhbSkgOwojIDU1MyAi L3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAz CgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190 ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIDsKCmV4dGVybiBpbnQgZnNldHBvcyAoRklMRSAqX19z dHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgOwojIDU3MiAiL3Vzci9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBpbnQgZnNl ZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgOwpl eHRlcm4gX19vZmY2NF90IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZn ZXRwb3M2NCAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVzdHJpY3Qg X19wb3MpCiAgICAgOwpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJlYW0sIF9fY29u c3QgZnBvczY0X3QgKl9fcG9zKSA7CgoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklMRSAqX19z dHJlYW0pIDsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQg ZmVycm9yIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2Nr ZWQgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19z dHJlYW0pIDsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoK CgoKZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNoYXIgKl9fcykgOwoKCgoKCgojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3N5c19lcnJsaXN0LmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0 cy9zeXNfZXJybGlzdC5oIiAzCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNo YXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJu IF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKIyA2MDkgIi91c3IvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgpleHRl cm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3Vu bG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKF9fY29u c3QgY2hhciAqX19jb21tYW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIDsKCgpleHRlcm4gaW50 IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hh ciAqX19zKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykgOwoKCgoKc3Ry dWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sg Kl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19m b3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBvYnN0YWNrX3ZwcmludGYg KHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJncykKICAgICBfX2F0dHJpYnV0ZV9f ICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKCgoKCgoKCmV4dGVybiB2b2lkIGZs b2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJ TEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFt KSA7CiMgNjgzICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRl L3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAxIDMKIyAzMyAiL3Vz ci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMwpleHRlcm4gX19pbmxpbmUgaW50CnZwcmludGYgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCnsKICBy ZXR1cm4gdmZwcmludGYgKHN0ZG91dCwgX19mbXQsIF9fYXJnKTsKfQoKCmV4dGVybiBfX2lubGlu ZSBpbnQKZ2V0Y2hhciAodm9pZCkKewogIHJldHVybiBfSU9fZ2V0YyAoc3RkaW4pOwp9CgoKCgpl eHRlcm4gX19pbmxpbmUgaW50CmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fZnApCnsKICByZXR1cm4g KChfX2ZwKS0+X0lPX3JlYWRfcHRyID49IChfX2ZwKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAo X19mcCkgOiAqKHVuc2lnbmVkIGNoYXIgKikgKF9fZnApLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgpl eHRlcm4gX19pbmxpbmUgaW50CmdldGNoYXJfdW5sb2NrZWQgKHZvaWQpCnsKICByZXR1cm4gKChz dGRpbiktPl9JT19yZWFkX3B0ciA+PSAoc3RkaW4pLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChz dGRpbikgOiAqKHVuc2lnbmVkIGNoYXIgKikgKHN0ZGluKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoK CgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNoYXIgKGludCBfX2MpCnsKICByZXR1cm4gX0lPX3B1 dGMgKF9fYywgc3Rkb3V0KTsKfQoKCgoKZXh0ZXJuIF9faW5saW5lIGludApmcHV0Y191bmxvY2tl ZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9f d3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19z dHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCooX19zdHJl YW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKCgoKZXh0ZXJuIF9faW5saW5lIGlu dApwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkKewogIHJldHVybiAoKChf X3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRlX2VuZCkgPyBf X292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1bnNpZ25lZCBj aGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgpleHRlcm4g X19pbmxpbmUgaW50CnB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpCnsKICByZXR1cm4gKCgoc3Rk b3V0KS0+X0lPX3dyaXRlX3B0ciA+PSAoc3Rkb3V0KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJm bG93IChzdGRvdXQsICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCoo c3Rkb3V0KS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmV4dGVybiBfX2lubGlu ZSBfX3NzaXplX3QKZ2V0bGluZSAoY2hhciAqKl9fbGluZXB0ciwgc2l6ZV90ICpfX24sIEZJTEUg Kl9fc3RyZWFtKQp7CiAgcmV0dXJuIF9fZ2V0ZGVsaW0gKF9fbGluZXB0ciwgX19uLCAnXG4nLCBf X3N0cmVhbSk7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUgaW50CmZlb2ZfdW5sb2NrZWQgKEZJTEUg Kl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgxMCkgIT0gMCk7 Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50CmZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0p CnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAweDIwKSAhPSAwKTsKfQojIDY4NCAi L3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRpby5oIiAy IDMKCgoKIyAyOSAicmVhZGVsZi5jIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMg MzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2lu Y2x1ZGUvdGltZS5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwoj IDQzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKIyAxMjcgIi91c3IvaW5jbHVkZS90aW1lLmgi IDMKCgpzdHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1faG91 cjsKICBpbnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGludCB0bV93 ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dtdG9m ZjsKICBfX2NvbnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoKCgoKCnN0cnVjdCBpdGltZXJz cGVjCiAgewogICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwogICAgc3RydWN0IHRpbWVz cGVjIGl0X3ZhbHVlOwogIH07CgoKc3RydWN0IHNpZ2V2ZW50OwojIDE3NiAiL3Vzci9pbmNsdWRl L3RpbWUuaCIgMwoKCgpleHRlcm4gY2xvY2tfdCBjbG9jayAodm9pZCkgOwoKCmV4dGVybiB0aW1l X3QgdGltZSAodGltZV90ICpfX3RpbWVyKSA7CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGlt ZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSA7CgoKCgoKZXh0 ZXJuIHNpemVfdCBzdHJmdGltZSAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNp emUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv cm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJp Y3QgX190cCkgOwoKCgoKCmV4dGVybiBjaGFyICpzdHJwdGltZSAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mbXQsIHN0cnVjdCB0bSAqX190cCkKICAgICA7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUv eGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMwp0eXBlZGVmIHN0 cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewoKICBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sx M107CgoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQg Kl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91cHBlcjsKCgogIGNvbnN0 IGNoYXIgKl9fbmFtZXNbMTNdOwp9ICpfX2xvY2FsZV90OwojIDIxMiAiL3Vzci9pbmNsdWRlL3Rp bWUuaCIgMiAzCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lX2wgKGNoYXIgKl9fcmVzdHJpY3QgX19z LCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9f bG9jYWxlX3QgX19sb2MpIDsKCmV4dGVybiBjaGFyICpzdHJwdGltZV9sIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm10LCBzdHJ1Y3QgdG0gKl9fdHAsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX2xvY2FsZV90IF9fbG9jKSA7CgoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAoX19j b25zdCB0aW1lX3QgKl9fdGltZXIpIDsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChf X2NvbnN0IHRpbWVfdCAqX190aW1lcikgOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZV9y IChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIDsKCgoKZXh0ZXJuIHN0cnVjdCB0 bSAqbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgOwoK CgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCkgOwoKCmV4 dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIDsKCgoKCgoKCmV4dGVy biBjaGFyICphc2N0aW1lX3IgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIDsKCgpleHRlcm4g Y2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIDsKCgoKCmV4dGVybiBjaGFy ICpfX3R6bmFtZVsyXTsKZXh0ZXJuIGludCBfX2RheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgX190 aW1lem9uZTsKCgoKCmV4dGVybiBjaGFyICp0em5hbWVbMl07CgoKCmV4dGVybiB2b2lkIHR6c2V0 ICh2b2lkKSA7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCB0aW1lem9u ZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193aGVuKSA7CiMgMzA3 ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0g Kl9fdHApIDsKCgpleHRlcm4gdGltZV90IHRpbWVsb2NhbCAoc3RydWN0IHRtICpfX3RwKSA7CgoK ZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgoKCgpleHRlcm4gaW50IG5hbm9zbGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9f cmVxdWVzdGVkX3RpbWUsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9f cmVtYWluaW5nKSA7CgoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lkX3QgX19jbG9j a19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3JlcykgOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0dGlt ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqX190cCkgOwoKCmV4dGVy biBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29uc3Qgc3RydWN0 IHRpbWVzcGVjICpfX3RwKQogICAgIDsKCgoKZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAgKGNs b2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW0pIDsKCgpleHRlcm4gaW50IGNsb2NrX2dldGNw dWNsb2NraWQgKHBpZF90IF9fcGlkLCBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIDsKCgoKCmV4dGVy biBpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lkX3QgX19jbG9ja19pZCwKICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCBfX2V2cCwKICAgICAgICAgICAg ICAgICAgICAgICAgIHRpbWVyX3QgKl9fcmVzdHJpY3QgX190aW1lcmlkKSA7CgoKZXh0ZXJuIGlu dCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSA7CgoKZXh0ZXJuIGludCB0aW1lcl9z ZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgaW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX3ZhbHVlLAog ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9f b3ZhbHVlKSA7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwg c3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0 b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIDsKIyAzNzggIi91c3IvaW5jbHVkZS90aW1lLmgi IDMKZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRl IChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSA7CiMgMzkzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz CmV4dGVybiBpbnQgZ2V0ZGF0ZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zdHJpbmcs CiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX19yZXNidWZwKSA7 CgoKCiMgMzAgInJlYWRlbGYuYyIgMgojIDM5ICJyZWFkZWxmLmMiCiMgMSAiLi4vYmZkL2JmZC5o IiAxCiMgMzggIi4uL2JmZC9iZmQuaCIKIyAxICIuLi9pbmNsdWRlL2Fuc2lkZWNsLmgiIDEKIyAz OSAiLi4vYmZkL2JmZC5oIiAyCiMgMSAiLi4vaW5jbHVkZS9zeW1jYXQuaCIgMQojIDQwICIuLi9i ZmQvYmZkLmgiIDIKIyA3OSAiLi4vYmZkL2JmZC5oIgp0eXBlZGVmIHN0cnVjdCBiZmQgYmZkOwoj IDkwICIuLi9iZmQvYmZkLmgiCnR5cGVkZWYgaW50IGJmZF9ib29sZWFuOwojIDEzMCAiLi4vYmZk L2JmZC5oIgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBiZmRfdm1hOwp0eXBlZGVmIGxvbmcg bG9uZyBiZmRfc2lnbmVkX3ZtYTsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgYmZkX3NpemVf dHlwZTsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgc3ltdmFsdWU7CiMgMTc5ICIuLi9iZmQv YmZkLmgiCnR5cGVkZWYgYmZkX3NpZ25lZF92bWEgZmlsZV9wdHI7CnR5cGVkZWYgYmZkX3ZtYSB1 ZmlsZV9wdHI7CgpleHRlcm4gdm9pZCBiZmRfc3ByaW50Zl92bWEKICAoYmZkICosIGNoYXIgKiwg YmZkX3ZtYSk7CmV4dGVybiB2b2lkIGJmZF9mcHJpbnRmX3ZtYQogIChiZmQgKiwgdm9pZCAqLCBi ZmRfdm1hKTsKCgoKCnR5cGVkZWYgdW5zaWduZWQgaW50IGZsYWd3b3JkOwp0eXBlZGVmIHVuc2ln bmVkIGNoYXIgYmZkX2J5dGU7CgoKCnR5cGVkZWYgZW51bSBiZmRfZm9ybWF0CnsKICBiZmRfdW5r bm93biA9IDAsCiAgYmZkX29iamVjdCwKICBiZmRfYXJjaGl2ZSwKICBiZmRfY29yZSwKICBiZmRf dHlwZV9lbmQKfQpiZmRfZm9ybWF0OwojIDI2OCAiLi4vYmZkL2JmZC5oIgp0eXBlZGVmIHVuc2ln bmVkIGxvbmcgc3ltaW5kZXg7CgoKdHlwZWRlZiBjb25zdCBzdHJ1Y3QgcmVsb2NfaG93dG9fc3Ry dWN0IHJlbG9jX2hvd3RvX3R5cGU7CiMgMjkwICIuLi9iZmQvYmZkLmgiCnR5cGVkZWYgc3RydWN0 IGNhcnN5bQp7CiAgY2hhciAqbmFtZTsKICBmaWxlX3B0ciBmaWxlX29mZnNldDsKfQpjYXJzeW07 CgoKCnN0cnVjdCBvcmwKewogIGNoYXIgKipuYW1lOwogIHVuaW9uCiAgewogICAgZmlsZV9wdHIg cG9zOwogICAgYmZkICphYmZkOwogIH0gdTsKICBpbnQgbmFtaWR4Owp9OwoKCnR5cGVkZWYgc3Ry dWN0IGxpbmVub19jYWNoZV9lbnRyeQp7CiAgdW5zaWduZWQgaW50IGxpbmVfbnVtYmVyOwogIHVu aW9uCiAgewogICAgc3RydWN0IHN5bWJvbF9jYWNoZV9lbnRyeSAqc3ltOwogICAgYmZkX3ZtYSBv ZmZzZXQ7CiAgfSB1Owp9CmFsZW50OwoKCgoKCgp0eXBlZGVmIHN0cnVjdCBzZWMgKnNlY19wdHI7 CiMgMzQ3ICIuLi9iZmQvYmZkLmgiCnR5cGVkZWYgc3RydWN0IHN0YXQgc3RhdF90eXBlOwoKdHlw ZWRlZiBlbnVtIGJmZF9wcmludF9zeW1ib2wKewogIGJmZF9wcmludF9zeW1ib2xfbmFtZSwKICBi ZmRfcHJpbnRfc3ltYm9sX21vcmUsCiAgYmZkX3ByaW50X3N5bWJvbF9hbGwKfSBiZmRfcHJpbnRf c3ltYm9sX3R5cGU7CgoKCnR5cGVkZWYgc3RydWN0IF9zeW1ib2xfaW5mbwp7CiAgc3ltdmFsdWUg dmFsdWU7CiAgY2hhciB0eXBlOwogIGNvbnN0IGNoYXIgKm5hbWU7CiAgdW5zaWduZWQgY2hhciBz dGFiX3R5cGU7CiAgY2hhciBzdGFiX290aGVyOwogIHNob3J0IHN0YWJfZGVzYzsKICBjb25zdCBj aGFyICpzdGFiX25hbWU7Cn0gc3ltYm9sX2luZm87CgoKCmV4dGVybiBjb25zdCBjaGFyICpiZmRf Z2V0X3N0YWJfbmFtZQogIChpbnQpOwoKCgoKCgpzdHJ1Y3QgYmZkX2hhc2hfZW50cnkKewoKICBz dHJ1Y3QgYmZkX2hhc2hfZW50cnkgKm5leHQ7CgogIGNvbnN0IGNoYXIgKnN0cmluZzsKCgogIHVu c2lnbmVkIGxvbmcgaGFzaDsKfTsKCgoKc3RydWN0IGJmZF9oYXNoX3RhYmxlCnsKCiAgc3RydWN0 IGJmZF9oYXNoX2VudHJ5ICoqdGFibGU7CgogIHVuc2lnbmVkIGludCBzaXplOwoKCgoKCgoKICBz dHJ1Y3QgYmZkX2hhc2hfZW50cnkgKigqbmV3ZnVuYykKICAgIChzdHJ1Y3QgYmZkX2hhc2hfZW50 cnkgKiwgc3RydWN0IGJmZF9oYXNoX3RhYmxlICosIGNvbnN0IGNoYXIgKik7CgoKICB2b2lkICog bWVtb3J5Owp9OwoKCmV4dGVybiBiZmRfYm9vbGVhbiBiZmRfaGFzaF90YWJsZV9pbml0CiAgKHN0 cnVjdCBiZmRfaGFzaF90YWJsZSAqLCBzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKigqKSAoc3RydWN0 IGJmZF9oYXNoX2VudHJ5ICosIHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqLCBjb25zdCBjaGFyICop KTsKCgoKCgpleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2hhc2hfdGFibGVfaW5pdF9uCiAgKHN0cnVj dCBiZmRfaGFzaF90YWJsZSAqLCBzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKigqKSAoc3RydWN0IGJm ZF9oYXNoX2VudHJ5ICosIHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqLCBjb25zdCBjaGFyICopLCB1 bnNpZ25lZCBpbnQgc2l6ZSk7CgoKCgoKCmV4dGVybiB2b2lkIGJmZF9oYXNoX3RhYmxlX2ZyZWUK ICAoc3RydWN0IGJmZF9oYXNoX3RhYmxlICopOwoKCgoKCmV4dGVybiBzdHJ1Y3QgYmZkX2hhc2hf ZW50cnkgKmJmZF9oYXNoX2xvb2t1cAogIChzdHJ1Y3QgYmZkX2hhc2hfdGFibGUgKiwgY29uc3Qg Y2hhciAqLCBiZmRfYm9vbGVhbiBjcmVhdGUsIGJmZF9ib29sZWFuIGNvcHkpOwoKCgpleHRlcm4g dm9pZCBiZmRfaGFzaF9yZXBsYWNlCiAgKHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqLCBzdHJ1Y3Qg YmZkX2hhc2hfZW50cnkgKm9sZCwgc3RydWN0IGJmZF9oYXNoX2VudHJ5ICpudyk7CgoKCmV4dGVy biBzdHJ1Y3QgYmZkX2hhc2hfZW50cnkgKmJmZF9oYXNoX25ld2Z1bmMKICAoc3RydWN0IGJmZF9o YXNoX2VudHJ5ICosIHN0cnVjdCBiZmRfaGFzaF90YWJsZSAqLCBjb25zdCBjaGFyICopOwoKCgpl eHRlcm4gdm9pZCAqIGJmZF9oYXNoX2FsbG9jYXRlCiAgKHN0cnVjdCBiZmRfaGFzaF90YWJsZSAq LCB1bnNpZ25lZCBpbnQpOwoKCgoKZXh0ZXJuIHZvaWQgYmZkX2hhc2hfdHJhdmVyc2UKICAoc3Ry dWN0IGJmZF9oYXNoX3RhYmxlICosIGJmZF9ib29sZWFuICgqKSAoc3RydWN0IGJmZF9oYXNoX2Vu dHJ5ICosIHZvaWQgKiksIHZvaWQgKiBpbmZvKTsKIyA0NjggIi4uL2JmZC9iZmQuaCIKZXh0ZXJu IGJmZF9zaXplX3R5cGUgYmZkX2JyZWFkCiAgKHZvaWQgKiwgYmZkX3NpemVfdHlwZSwgYmZkICop OwpleHRlcm4gYmZkX3NpemVfdHlwZSBiZmRfYndyaXRlCiAgKGNvbnN0IHZvaWQgKiwgYmZkX3Np emVfdHlwZSwgYmZkICopOwpleHRlcm4gaW50IGJmZF9zZWVrCiAgKGJmZCAqLCBmaWxlX3B0ciwg aW50KTsKZXh0ZXJuIHVmaWxlX3B0ciBiZmRfdGVsbAogIChiZmQgKik7CmV4dGVybiBpbnQgYmZk X2ZsdXNoCiAgKGJmZCAqKTsKZXh0ZXJuIGludCBiZmRfc3RhdAogIChiZmQgKiwgc3RydWN0IHN0 YXQgKik7CiMgNDk3ICIuLi9iZmQvYmZkLmgiCmV4dGVybiB2b2lkIHdhcm5fZGVwcmVjYXRlZAog IChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopOwojIDUzNiAi Li4vYmZkL2JmZC5oIgpleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2NhY2hlX2Nsb3NlCiAgKGJmZCAq YWJmZCk7CgoKZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9yZWNvcmRfcGhkcgogIChiZmQgKiwgdW5z aWduZWQgbG9uZywgYmZkX2Jvb2xlYW4sIGZsYWd3b3JkLCBiZmRfYm9vbGVhbiwgYmZkX3ZtYSwg YmZkX2Jvb2xlYW4sIGJmZF9ib29sZWFuLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBzZWMgKiopOwoK CgoKYmZkX3ZtYSBiZmRfZ2V0YjY0CiAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKik7CmJmZF92bWEg YmZkX2dldGw2NAogIChjb25zdCB1bnNpZ25lZCBjaGFyICopOwpiZmRfc2lnbmVkX3ZtYSBiZmRf Z2V0Yl9zaWduZWRfNjQKICAoY29uc3QgdW5zaWduZWQgY2hhciAqKTsKYmZkX3NpZ25lZF92bWEg YmZkX2dldGxfc2lnbmVkXzY0CiAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKik7CmJmZF92bWEgYmZk X2dldGIzMgogIChjb25zdCB1bnNpZ25lZCBjaGFyICopOwpiZmRfdm1hIGJmZF9nZXRsMzIKICAo Y29uc3QgdW5zaWduZWQgY2hhciAqKTsKYmZkX3NpZ25lZF92bWEgYmZkX2dldGJfc2lnbmVkXzMy CiAgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKik7CmJmZF9zaWduZWRfdm1hIGJmZF9nZXRsX3NpZ25l ZF8zMgogIChjb25zdCB1bnNpZ25lZCBjaGFyICopOwpiZmRfdm1hIGJmZF9nZXRiMTYKICAoY29u c3QgdW5zaWduZWQgY2hhciAqKTsKYmZkX3ZtYSBiZmRfZ2V0bDE2CiAgKGNvbnN0IHVuc2lnbmVk IGNoYXIgKik7CmJmZF9zaWduZWRfdm1hIGJmZF9nZXRiX3NpZ25lZF8xNgogIChjb25zdCB1bnNp Z25lZCBjaGFyICopOwpiZmRfc2lnbmVkX3ZtYSBiZmRfZ2V0bF9zaWduZWRfMTYKICAoY29uc3Qg dW5zaWduZWQgY2hhciAqKTsKdm9pZCBiZmRfcHV0YjY0CiAgKGJmZF92bWEsIHVuc2lnbmVkIGNo YXIgKik7CnZvaWQgYmZkX3B1dGw2NAogIChiZmRfdm1hLCB1bnNpZ25lZCBjaGFyICopOwp2b2lk IGJmZF9wdXRiMzIKICAoYmZkX3ZtYSwgdW5zaWduZWQgY2hhciAqKTsKdm9pZCBiZmRfcHV0bDMy CiAgKGJmZF92bWEsIHVuc2lnbmVkIGNoYXIgKik7CnZvaWQgYmZkX3B1dGIxNgogIChiZmRfdm1h LCB1bnNpZ25lZCBjaGFyICopOwp2b2lkIGJmZF9wdXRsMTYKICAoYmZkX3ZtYSwgdW5zaWduZWQg Y2hhciAqKTsKCgoKYmZkX3ZtYSBiZmRfZ2V0X2JpdHMKICAoYmZkX2J5dGUgKiwgaW50LCBiZmRf Ym9vbGVhbik7CnZvaWQgYmZkX3B1dF9iaXRzCiAgKGJmZF92bWEsIGJmZF9ieXRlICosIGludCwg YmZkX2Jvb2xlYW4pOwoKCgoKc3RydWN0IGVjb2ZmX2RlYnVnX2luZm87CnN0cnVjdCBlY29mZl9k ZWJ1Z19zd2FwOwpzdHJ1Y3QgZWNvZmZfZXh0cjsKc3RydWN0IHN5bWJvbF9jYWNoZV9lbnRyeTsK c3RydWN0IGJmZF9saW5rX2luZm87CnN0cnVjdCBiZmRfbGlua19oYXNoX2VudHJ5OwpzdHJ1Y3Qg YmZkX2VsZl92ZXJzaW9uX3RyZWU7CgpleHRlcm4gYmZkX3ZtYSBiZmRfZWNvZmZfZ2V0X2dwX3Zh bHVlCiAgKGJmZCAqIGFiZmQpOwpleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2Vjb2ZmX3NldF9ncF92 YWx1ZQogIChiZmQgKmFiZmQsIGJmZF92bWEgZ3BfdmFsdWUpOwpleHRlcm4gYmZkX2Jvb2xlYW4g YmZkX2Vjb2ZmX3NldF9yZWdtYXNrcwogIChiZmQgKmFiZmQsIHVuc2lnbmVkIGxvbmcgZ3BybWFz aywgdW5zaWduZWQgbG9uZyBmcHJtYXNrLCB1bnNpZ25lZCBsb25nICpjcHJtYXNrKTsKCmV4dGVy biB2b2lkICogYmZkX2Vjb2ZmX2RlYnVnX2luaXQKICAoYmZkICpvdXRwdXRfYmZkLCBzdHJ1Y3Qg ZWNvZmZfZGVidWdfaW5mbyAqb3V0cHV0X2RlYnVnLCBjb25zdCBzdHJ1Y3QgZWNvZmZfZGVidWdf c3dhcCAqb3V0cHV0X3N3YXAsIHN0cnVjdCBiZmRfbGlua19pbmZvICopOwoKCmV4dGVybiB2b2lk IGJmZF9lY29mZl9kZWJ1Z19mcmVlCiAgKHZvaWQgKiBoYW5kbGUsIGJmZCAqb3V0cHV0X2JmZCwg c3RydWN0IGVjb2ZmX2RlYnVnX2luZm8gKm91dHB1dF9kZWJ1ZywgY29uc3Qgc3RydWN0IGVjb2Zm X2RlYnVnX3N3YXAgKm91dHB1dF9zd2FwLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKCgpleHRl cm4gYmZkX2Jvb2xlYW4gYmZkX2Vjb2ZmX2RlYnVnX2FjY3VtdWxhdGUKICAodm9pZCAqIGhhbmRs ZSwgYmZkICpvdXRwdXRfYmZkLCBzdHJ1Y3QgZWNvZmZfZGVidWdfaW5mbyAqb3V0cHV0X2RlYnVn LCBjb25zdCBzdHJ1Y3QgZWNvZmZfZGVidWdfc3dhcCAqb3V0cHV0X3N3YXAsIGJmZCAqaW5wdXRf YmZkLCBzdHJ1Y3QgZWNvZmZfZGVidWdfaW5mbyAqaW5wdXRfZGVidWcsIGNvbnN0IHN0cnVjdCBl Y29mZl9kZWJ1Z19zd2FwICppbnB1dF9zd2FwLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKCgoK CmV4dGVybiBiZmRfYm9vbGVhbiBiZmRfZWNvZmZfZGVidWdfYWNjdW11bGF0ZV9vdGhlcgogICh2 b2lkICogaGFuZGxlLCBiZmQgKm91dHB1dF9iZmQsIHN0cnVjdCBlY29mZl9kZWJ1Z19pbmZvICpv dXRwdXRfZGVidWcsIGNvbnN0IHN0cnVjdCBlY29mZl9kZWJ1Z19zd2FwICpvdXRwdXRfc3dhcCwg YmZkICppbnB1dF9iZmQsIHN0cnVjdCBiZmRfbGlua19pbmZvICopOwoKCmV4dGVybiBiZmRfYm9v bGVhbiBiZmRfZWNvZmZfZGVidWdfZXh0ZXJuYWxzCiAgKGJmZCAqYWJmZCwgc3RydWN0IGVjb2Zm X2RlYnVnX2luZm8gKmRlYnVnLCBjb25zdCBzdHJ1Y3QgZWNvZmZfZGVidWdfc3dhcCAqc3dhcCwg YmZkX2Jvb2xlYW4gcmVsb2NhdGVhYmxlLCBiZmRfYm9vbGVhbiAoKmdldF9leHRyKSAoc3RydWN0 IHN5bWJvbF9jYWNoZV9lbnRyeSAqLCBzdHJ1Y3QgZWNvZmZfZXh0ciAqKSwgdm9pZCAoKnNldF9p bmRleCkgKHN0cnVjdCBzeW1ib2xfY2FjaGVfZW50cnkgKiwgYmZkX3NpemVfdHlwZSkpOwoKCgoK CgpleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2Vjb2ZmX2RlYnVnX29uZV9leHRlcm5hbAogIChiZmQg KmFiZmQsIHN0cnVjdCBlY29mZl9kZWJ1Z19pbmZvICpkZWJ1ZywgY29uc3Qgc3RydWN0IGVjb2Zm X2RlYnVnX3N3YXAgKnN3YXAsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBlY29mZl9leHRyICpl c3ltKTsKCgpleHRlcm4gYmZkX3NpemVfdHlwZSBiZmRfZWNvZmZfZGVidWdfc2l6ZQogIChiZmQg KmFiZmQsIHN0cnVjdCBlY29mZl9kZWJ1Z19pbmZvICpkZWJ1ZywgY29uc3Qgc3RydWN0IGVjb2Zm X2RlYnVnX3N3YXAgKnN3YXApOwoKZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9lY29mZl93cml0ZV9k ZWJ1ZwogIChiZmQgKmFiZmQsIHN0cnVjdCBlY29mZl9kZWJ1Z19pbmZvICpkZWJ1ZywgY29uc3Qg c3RydWN0IGVjb2ZmX2RlYnVnX3N3YXAgKnN3YXAsIGZpbGVfcHRyIHdoZXJlKTsKCmV4dGVybiBi ZmRfYm9vbGVhbiBiZmRfZWNvZmZfd3JpdGVfYWNjdW11bGF0ZWRfZGVidWcKICAodm9pZCAqIGhh bmRsZSwgYmZkICphYmZkLCBzdHJ1Y3QgZWNvZmZfZGVidWdfaW5mbyAqZGVidWcsIGNvbnN0IHN0 cnVjdCBlY29mZl9kZWJ1Z19zd2FwICpzd2FwLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqaW5mbywg ZmlsZV9wdHIgd2hlcmUpOwoKCmV4dGVybiBiZmRfYm9vbGVhbiBiZmRfbWlwc19lY29mZl9jcmVh dGVfZW1iZWRkZWRfcmVsb2NzCiAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBzdHJ1 Y3Qgc2VjICosIHN0cnVjdCBzZWMgKiwgY2hhciAqKik7CgoKCgpzdHJ1Y3QgYmZkX2xpbmtfbmVl ZGVkX2xpc3QKewogIHN0cnVjdCBiZmRfbGlua19uZWVkZWRfbGlzdCAqbmV4dDsKICBiZmQgKmJ5 OwogIGNvbnN0IGNoYXIgKm5hbWU7Cn07CgpleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2VsZjMyX3Jl Y29yZF9saW5rX2Fzc2lnbm1lbnQKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGNv bnN0IGNoYXIgKiwgYmZkX2Jvb2xlYW4pOwpleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2VsZjY0X3Jl Y29yZF9saW5rX2Fzc2lnbm1lbnQKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGNv bnN0IGNoYXIgKiwgYmZkX2Jvb2xlYW4pOwpleHRlcm4gc3RydWN0IGJmZF9saW5rX25lZWRlZF9s aXN0ICpiZmRfZWxmX2dldF9uZWVkZWRfbGlzdAogIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2lu Zm8gKik7CmV4dGVybiBiZmRfYm9vbGVhbiBiZmRfZWxmX2dldF9iZmRfbmVlZGVkX2xpc3QKICAo YmZkICosIHN0cnVjdCBiZmRfbGlua19uZWVkZWRfbGlzdCAqKik7CmV4dGVybiBiZmRfYm9vbGVh biBiZmRfZWxmMzJfc2l6ZV9keW5hbWljX3NlY3Rpb25zCiAgKGJmZCAqLCBjb25zdCBjaGFyICos IGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICogY29uc3QgKiwgc3RydWN0 IGJmZF9saW5rX2luZm8gKiwgc3RydWN0IHNlYyAqKiwgc3RydWN0IGJmZF9lbGZfdmVyc2lvbl90 cmVlICopOwoKCmV4dGVybiBiZmRfYm9vbGVhbiBiZmRfZWxmNjRfc2l6ZV9keW5hbWljX3NlY3Rp b25zCiAgKGJmZCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBj b25zdCBjaGFyICogY29uc3QgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgc3RydWN0IHNlYyAq Kiwgc3RydWN0IGJmZF9lbGZfdmVyc2lvbl90cmVlICopOwoKCmV4dGVybiB2b2lkIGJmZF9lbGZf c2V0X2R0X25lZWRlZF9uYW1lCiAgKGJmZCAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gdm9pZCBi ZmRfZWxmX3NldF9kdF9uZWVkZWRfc29uYW1lCiAgKGJmZCAqLCBjb25zdCBjaGFyICopOwpleHRl cm4gY29uc3QgY2hhciAqYmZkX2VsZl9nZXRfZHRfc29uYW1lCiAgKGJmZCAqKTsKZXh0ZXJuIHN0 cnVjdCBiZmRfbGlua19uZWVkZWRfbGlzdCAqYmZkX2VsZl9nZXRfcnVucGF0aF9saXN0CiAgKGJm ZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9lbGYz Ml9kaXNjYXJkX2luZm8KICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOwpleHRlcm4g YmZkX2Jvb2xlYW4gYmZkX2VsZjY0X2Rpc2NhcmRfaW5mbwogIChiZmQgKiwgc3RydWN0IGJmZF9s aW5rX2luZm8gKik7CgoKCgpleHRlcm4gbG9uZyBiZmRfZ2V0X2VsZl9waGRyX3VwcGVyX2JvdW5k CiAgKGJmZCAqYWJmZCk7CiMgNzAzICIuLi9iZmQvYmZkLmgiCmV4dGVybiBpbnQgYmZkX2dldF9l bGZfcGhkcnMKICAoYmZkICphYmZkLCB2b2lkICpwaGRycyk7CgoKZXh0ZXJuIGludCBiZmRfZ2V0 X2FyY2hfc2l6ZQogIChiZmQgKik7CgoKZXh0ZXJuIGludCBiZmRfZ2V0X3NpZ25fZXh0ZW5kX3Zt YQogIChiZmQgKik7CgpleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX202OGtfZWxmMzJfY3JlYXRlX2Vt YmVkZGVkX3JlbG9jcwogIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwgc3RydWN0IHNl YyAqLCBzdHJ1Y3Qgc2VjICosIGNoYXIgKiopOwoKZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF9taXBz X2VsZjMyX2NyZWF0ZV9lbWJlZGRlZF9yZWxvY3MKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19p bmZvICosIHN0cnVjdCBzZWMgKiwgc3RydWN0IHNlYyAqLCBjaGFyICoqKTsKCgoKCmV4dGVybiBz dHJ1Y3QgYmZkX2xpbmtfbmVlZGVkX2xpc3QgKmJmZF9zdW5vc19nZXRfbmVlZGVkX2xpc3QKICAo YmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOwpleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX3N1 bm9zX3JlY29yZF9saW5rX2Fzc2lnbm1lbnQKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZv ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBiZmRfYm9vbGVhbiBiZmRfc3Vub3Nfc2l6ZV9keW5h bWljX3NlY3Rpb25zCiAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBzdHJ1Y3Qgc2Vj ICoqLCBzdHJ1Y3Qgc2VjICoqLCBzdHJ1Y3Qgc2VjICoqKTsKCgoKCmV4dGVybiBiZmRfYm9vbGVh biBiZmRfaTM4NmxpbnV4X3NpemVfZHluYW1pY19zZWN0aW9ucwogIChiZmQgKiwgc3RydWN0IGJm ZF9saW5rX2luZm8gKik7CmV4dGVybiBiZmRfYm9vbGVhbiBiZmRfbTY4a2xpbnV4X3NpemVfZHlu YW1pY19zZWN0aW9ucwogIChiZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CmV4dGVybiBi ZmRfYm9vbGVhbiBiZmRfc3BhcmNsaW51eF9zaXplX2R5bmFtaWNfc2VjdGlvbnMKICAoYmZkICos IHN0cnVjdCBiZmRfbGlua19pbmZvICopOwoKCgpzdHJ1Y3QgX2JmZF93aW5kb3dfaW50ZXJuYWw7 CnR5cGVkZWYgc3RydWN0IF9iZmRfd2luZG93X2ludGVybmFsIGJmZF93aW5kb3dfaW50ZXJuYWw7 Cgp0eXBlZGVmIHN0cnVjdCBfYmZkX3dpbmRvdwp7CgogIHZvaWQgKiBkYXRhOwogIGJmZF9zaXpl X3R5cGUgc2l6ZTsKCgoKCgoKICBzdHJ1Y3QgX2JmZF93aW5kb3dfaW50ZXJuYWwgKmk7Cn0KYmZk X3dpbmRvdzsKCmV4dGVybiB2b2lkIGJmZF9pbml0X3dpbmRvdwogIChiZmRfd2luZG93ICopOwpl eHRlcm4gdm9pZCBiZmRfZnJlZV93aW5kb3cKICAoYmZkX3dpbmRvdyAqKTsKZXh0ZXJuIGJmZF9i b29sZWFuIGJmZF9nZXRfZmlsZV93aW5kb3cKICAoYmZkICosIGZpbGVfcHRyLCBiZmRfc2l6ZV90 eXBlLCBiZmRfd2luZG93ICosIGJmZF9ib29sZWFuKTsKCgoKZXh0ZXJuIGJmZF9ib29sZWFuIGJm ZF94Y29mZl9saW5rX3JlY29yZF9zZXQKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICos IHN0cnVjdCBiZmRfbGlua19oYXNoX2VudHJ5ICosIGJmZF9zaXplX3R5cGUpOwoKZXh0ZXJuIGJm ZF9ib29sZWFuIGJmZF94Y29mZl9pbXBvcnRfc3ltYm9sCiAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xp bmtfaW5mbyAqLCBzdHJ1Y3QgYmZkX2xpbmtfaGFzaF9lbnRyeSAqLCBiZmRfdm1hLCBjb25zdCBj aGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQpOwoKZXh0ZXJu IGJmZF9ib29sZWFuIGJmZF94Y29mZl9leHBvcnRfc3ltYm9sCiAgKGJmZCAqLCBzdHJ1Y3QgYmZk X2xpbmtfaW5mbyAqLCBzdHJ1Y3QgYmZkX2xpbmtfaGFzaF9lbnRyeSAqKTsKZXh0ZXJuIGJmZF9i b29sZWFuIGJmZF94Y29mZl9saW5rX2NvdW50X3JlbG9jCiAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xp bmtfaW5mbyAqLCBjb25zdCBjaGFyICopOwpleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX3hjb2ZmX3Jl Y29yZF9saW5rX2Fzc2lnbm1lbnQKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIGNv bnN0IGNoYXIgKik7CmV4dGVybiBiZmRfYm9vbGVhbiBiZmRfeGNvZmZfc2l6ZV9keW5hbWljX3Nl Y3Rpb25zCiAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBjb25zdCBjaGFyICosIGNv bnN0IGNoYXIgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywg YmZkX2Jvb2xlYW4sIGludCwgYmZkX2Jvb2xlYW4sIGJmZF9ib29sZWFuLCBzdHJ1Y3Qgc2VjICoq LCBiZmRfYm9vbGVhbik7CgoKZXh0ZXJuIGJmZF9ib29sZWFuIGJmZF94Y29mZl9saW5rX2dlbmVy YXRlX3J0aW5pdAogIChiZmQgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGJmZF9ib29s ZWFuKTsKCgpleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX3hjb2ZmX2FyX2FyY2hpdmVfc2V0X21hZ2lj CiAgKGJmZCAqLCBjaGFyICopOwoKCgoKc3RydWN0IGludGVybmFsX3N5bWVudDsKdW5pb24gaW50 ZXJuYWxfYXV4ZW50OwoKCmV4dGVybiBiZmRfYm9vbGVhbiBiZmRfY29mZl9nZXRfc3ltZW50CiAg KGJmZCAqLCBzdHJ1Y3Qgc3ltYm9sX2NhY2hlX2VudHJ5ICosIHN0cnVjdCBpbnRlcm5hbF9zeW1l bnQgKik7CgpleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2NvZmZfZ2V0X2F1eGVudAogIChiZmQgKiwg c3RydWN0IHN5bWJvbF9jYWNoZV9lbnRyeSAqLCBpbnQsIHVuaW9uIGludGVybmFsX2F1eGVudCAq KTsKCmV4dGVybiBiZmRfYm9vbGVhbiBiZmRfY29mZl9zZXRfc3ltYm9sX2NsYXNzCiAgKGJmZCAq LCBzdHJ1Y3Qgc3ltYm9sX2NhY2hlX2VudHJ5ICosIHVuc2lnbmVkIGludCk7CgpleHRlcm4gYmZk X2Jvb2xlYW4gYmZkX202OGtfY29mZl9jcmVhdGVfZW1iZWRkZWRfcmVsb2NzCiAgKGJmZCAqLCBz dHJ1Y3QgYmZkX2xpbmtfaW5mbyAqLCBzdHJ1Y3Qgc2VjICosIHN0cnVjdCBzZWMgKiwgY2hhciAq Kik7CgoKCmV4dGVybiBiZmRfYm9vbGVhbiBiZmRfYXJtX2FsbG9jYXRlX2ludGVyd29ya2luZ19z ZWN0aW9ucwogIChzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKCmV4dGVybiBiZmRfYm9vbGVhbiBi ZmRfYXJtX3Byb2Nlc3NfYmVmb3JlX2FsbG9jYXRpb24KICAoYmZkICosIHN0cnVjdCBiZmRfbGlu a19pbmZvICosIGludCk7CgpleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2FybV9nZXRfYmZkX2Zvcl9p bnRlcndvcmtpbmcKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOwoKCmV4dGVybiBi ZmRfYm9vbGVhbiBiZmRfYXJtX3BlX2FsbG9jYXRlX2ludGVyd29ya2luZ19zZWN0aW9ucwogIChz dHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKCmV4dGVybiBiZmRfYm9vbGVhbiBiZmRfYXJtX3BlX3By b2Nlc3NfYmVmb3JlX2FsbG9jYXRpb24KICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICos IGludCk7CgpleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2FybV9wZV9nZXRfYmZkX2Zvcl9pbnRlcndv cmtpbmcKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOwoKCmV4dGVybiBiZmRfYm9v bGVhbiBiZmRfZWxmMzJfYXJtX2FsbG9jYXRlX2ludGVyd29ya2luZ19zZWN0aW9ucwogIChzdHJ1 Y3QgYmZkX2xpbmtfaW5mbyAqKTsKCmV4dGVybiBiZmRfYm9vbGVhbiBiZmRfZWxmMzJfYXJtX3By b2Nlc3NfYmVmb3JlX2FsbG9jYXRpb24KICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICos IGludCk7CgpleHRlcm4gYmZkX2Jvb2xlYW4gYmZkX2VsZjMyX2FybV9nZXRfYmZkX2Zvcl9pbnRl cndvcmtpbmcKICAoYmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICopOwoKZXh0ZXJuIGJmZF9i b29sZWFuIGJmZF9lbGYzMl9hcm1fYWRkX2dsdWVfc2VjdGlvbnNfdG9fYmZkCiAgKGJmZCAqLCBz dHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKCgpleHRlcm4gdm9pZCBiZmRfdGljb2ZmX3NldF9zZWN0 aW9uX2xvYWRfcGFnZQogIChzdHJ1Y3Qgc2VjICosIGludCk7CgpleHRlcm4gaW50IGJmZF90aWNv ZmZfZ2V0X3NlY3Rpb25fbG9hZF9wYWdlCiAgKHN0cnVjdCBzZWMgKik7CgoKdm9pZApiZmRfaW5p dCAodm9pZCk7CgoKYmZkICoKYmZkX29wZW5yIChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3Qg Y2hhciAqdGFyZ2V0KTsKCmJmZCAqCmJmZF9mZG9wZW5yIChjb25zdCBjaGFyICpmaWxlbmFtZSwg Y29uc3QgY2hhciAqdGFyZ2V0LCBpbnQgZmQpOwoKYmZkICoKYmZkX29wZW5zdHJlYW1yIChjb25z dCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKCmJmZCAqCmJmZF9vcGVudyAoY29uc3Qg Y2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKnRhcmdldCk7CgpiZmRfYm9vbGVhbgpiZmRfY2xv c2UgKGJmZCAqYWJmZCk7CgpiZmRfYm9vbGVhbgpiZmRfY2xvc2VfYWxsX2RvbmUgKGJmZCAqKTsK CmJmZCAqCmJmZF9jcmVhdGUgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBiZmQgKnRlbXBsKTsKCmJm ZF9ib29sZWFuCmJmZF9tYWtlX3dyaXRhYmxlIChiZmQgKmFiZmQpOwoKYmZkX2Jvb2xlYW4KYmZk X21ha2VfcmVhZGFibGUgKGJmZCAqYWJmZCk7CgpjaGFyICoKYmZkX2ZvbGxvd19nbnVfZGVidWds aW5rIChiZmQgKmFiZmQsIGNvbnN0IGNoYXIgKmRpcik7CiMgMTAyOSAiLi4vYmZkL2JmZC5oIgps b25nCmJmZF9nZXRfbXRpbWUgKGJmZCAqYWJmZCk7Cgpsb25nCmJmZF9nZXRfc2l6ZSAoYmZkICph YmZkKTsKIyAxMDQyICIuLi9iZmQvYmZkLmgiCnN0cnVjdCBiZmRfY29tZGF0X2luZm8KewoKICBj b25zdCBjaGFyICpuYW1lOwoKCgoKCiAgbG9uZyBzeW1ib2w7Cn07Cgp0eXBlZGVmIHN0cnVjdCBz ZWMKewoKCiAgY29uc3QgY2hhciAqbmFtZTsKCgogIGludCBpZDsKCgogIGludCBpbmRleDsKCgog IHN0cnVjdCBzZWMgKm5leHQ7CgoKCgogIGZsYWd3b3JkIGZsYWdzOwojIDEyNTAgIi4uL2JmZC9i ZmQuaCIKICB1bnNpZ25lZCBpbnQgdXNlcl9zZXRfdm1hIDogMTsKCgogIHVuc2lnbmVkIGludCBy ZWxvY19kb25lIDogMTsKCgogIHVuc2lnbmVkIGludCBsaW5rZXJfbWFyayA6IDE7CgoKCiAgdW5z aWduZWQgaW50IGxpbmtlcl9oYXNfaW5wdXQgOiAxOwoKCiAgdW5zaWduZWQgaW50IGdjX21hcmsg OiAxOwoKCgoKICB1bnNpZ25lZCBpbnQgc2VnbWVudF9tYXJrIDogMTsKCgogIHVuc2lnbmVkIGlu dCBzZWNfaW5mb190eXBlOjM7CgoKCgoKCgogIHVuc2lnbmVkIGludCB1c2VfcmVsYV9wOjE7CgoK ICB1bnNpZ25lZCBpbnQgaGFzX3Rsc19yZWxvYzoxOwoKCiAgdW5zaWduZWQgaW50IGZsYWcxMTox OwogIHVuc2lnbmVkIGludCBmbGFnMTI6MTsKICB1bnNpZ25lZCBpbnQgZmxhZzEzOjE7CiAgdW5z aWduZWQgaW50IGZsYWcxNDoxOwogIHVuc2lnbmVkIGludCBmbGFnMTU6MTsKICB1bnNpZ25lZCBp bnQgZmxhZzE2OjQ7CiAgdW5zaWduZWQgaW50IGZsYWcyMDo0OwogIHVuc2lnbmVkIGludCBmbGFn MjQ6ODsKIyAxMzAyICIuLi9iZmQvYmZkLmgiCiAgYmZkX3ZtYSB2bWE7CgoKCgogIGJmZF92bWEg bG1hOwoKCgoKICBiZmRfc2l6ZV90eXBlIF9jb29rZWRfc2l6ZTsKCgoKCiAgYmZkX3NpemVfdHlw ZSBfcmF3X3NpemU7CiMgMTMyNiAiLi4vYmZkL2JmZC5oIgogIGJmZF92bWEgb3V0cHV0X29mZnNl dDsKCgogIHN0cnVjdCBzZWMgKm91dHB1dF9zZWN0aW9uOwoKCgogIHVuc2lnbmVkIGludCBhbGln bm1lbnRfcG93ZXI7CgoKCiAgc3RydWN0IHJlbG9jX2NhY2hlX2VudHJ5ICpyZWxvY2F0aW9uOwoK CgogIHN0cnVjdCByZWxvY19jYWNoZV9lbnRyeSAqKm9yZWxvY2F0aW9uOwoKCiAgdW5zaWduZWQg cmVsb2NfY291bnQ7CgoKCgoKICBmaWxlX3B0ciBmaWxlcG9zOwoKCiAgZmlsZV9wdHIgcmVsX2Zp bGVwb3M7CgoKICBmaWxlX3B0ciBsaW5lX2ZpbGVwb3M7CgoKICB2b2lkICogdXNlcmRhdGE7CgoK CiAgdW5zaWduZWQgY2hhciAqY29udGVudHM7CgoKICBhbGVudCAqbGluZW5vOwoKCiAgdW5zaWdu ZWQgaW50IGxpbmVub19jb3VudDsKCgogIHVuc2lnbmVkIGludCBlbnRzaXplOwoKCiAgc3RydWN0 IGJmZF9jb21kYXRfaW5mbyAqY29tZGF0OwoKCgogIGZpbGVfcHRyIG1vdmluZ19saW5lX2ZpbGVw b3M7CgoKICBpbnQgdGFyZ2V0X2luZGV4OwoKICB2b2lkICogdXNlZF9ieV9iZmQ7CgoKCiAgc3Ry dWN0IHJlbGVudF9jaGFpbiAqY29uc3RydWN0b3JfY2hhaW47CgoKICBiZmQgKm93bmVyOwoKCiAg c3RydWN0IHN5bWJvbF9jYWNoZV9lbnRyeSAqc3ltYm9sOwogIHN0cnVjdCBzeW1ib2xfY2FjaGVf ZW50cnkgKipzeW1ib2xfcHRyX3B0cjsKCiAgc3RydWN0IGJmZF9saW5rX29yZGVyICpsaW5rX29y ZGVyX2hlYWQ7CiAgc3RydWN0IGJmZF9saW5rX29yZGVyICpsaW5rX29yZGVyX3RhaWw7Cn0gYXNl Y3Rpb247CiMgMTQxMiAiLi4vYmZkL2JmZC5oIgpleHRlcm4gY29uc3QgYXNlY3Rpb24gYmZkX2Fi c19zZWN0aW9uOwoKCgpleHRlcm4gY29uc3QgYXNlY3Rpb24gYmZkX3VuZF9zZWN0aW9uOwoKCgpl eHRlcm4gY29uc3QgYXNlY3Rpb24gYmZkX2NvbV9zZWN0aW9uOwoKCmV4dGVybiBjb25zdCBhc2Vj dGlvbiBiZmRfaW5kX3NlY3Rpb247CiMgMTQzMyAiLi4vYmZkL2JmZC5oIgpleHRlcm4gY29uc3Qg c3RydWN0IHN5bWJvbF9jYWNoZV9lbnRyeSAqIGNvbnN0IGJmZF9hYnNfc3ltYm9sOwpleHRlcm4g Y29uc3Qgc3RydWN0IHN5bWJvbF9jYWNoZV9lbnRyeSAqIGNvbnN0IGJmZF9jb21fc3ltYm9sOwpl eHRlcm4gY29uc3Qgc3RydWN0IHN5bWJvbF9jYWNoZV9lbnRyeSAqIGNvbnN0IGJmZF91bmRfc3lt Ym9sOwpleHRlcm4gY29uc3Qgc3RydWN0IHN5bWJvbF9jYWNoZV9lbnRyeSAqIGNvbnN0IGJmZF9p bmRfc3ltYm9sOwojIDE0NjkgIi4uL2JmZC9iZmQuaCIKdm9pZApiZmRfc2VjdGlvbl9saXN0X2Ns ZWFyIChiZmQgKik7Cgphc2VjdGlvbiAqCmJmZF9nZXRfc2VjdGlvbl9ieV9uYW1lIChiZmQgKmFi ZmQsIGNvbnN0IGNoYXIgKm5hbWUpOwoKY2hhciAqCmJmZF9nZXRfdW5pcXVlX3NlY3Rpb25fbmFt ZSAoYmZkICphYmZkLCBjb25zdCBjaGFyICp0ZW1wbGF0LCBpbnQgKmNvdW50KTsKCgoKYXNlY3Rp b24gKgpiZmRfbWFrZV9zZWN0aW9uX29sZF93YXkgKGJmZCAqYWJmZCwgY29uc3QgY2hhciAqbmFt ZSk7Cgphc2VjdGlvbiAqCmJmZF9tYWtlX3NlY3Rpb25fYW55d2F5IChiZmQgKmFiZmQsIGNvbnN0 IGNoYXIgKm5hbWUpOwoKYXNlY3Rpb24gKgpiZmRfbWFrZV9zZWN0aW9uIChiZmQgKiwgY29uc3Qg Y2hhciAqbmFtZSk7CgpiZmRfYm9vbGVhbgpiZmRfc2V0X3NlY3Rpb25fZmxhZ3MgKGJmZCAqYWJm ZCwgYXNlY3Rpb24gKnNlYywgZmxhZ3dvcmQgZmxhZ3MpOwoKdm9pZApiZmRfbWFwX292ZXJfc2Vj dGlvbnMgKGJmZCAqYWJmZCwgdm9pZCAoKmZ1bmMpIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWN0 LCB2b2lkICogb2JqKSwgdm9pZCAqIG9iaik7CgoKCgoKYmZkX2Jvb2xlYW4KYmZkX3NldF9zZWN0 aW9uX3NpemUgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNlYywgYmZkX3NpemVfdHlwZSB2YWwpOwoK YmZkX2Jvb2xlYW4KYmZkX3NldF9zZWN0aW9uX2NvbnRlbnRzIChiZmQgKmFiZmQsIGFzZWN0aW9u ICpzZWN0aW9uLCB2b2lkICogZGF0YSwgZmlsZV9wdHIgb2Zmc2V0LCBiZmRfc2l6ZV90eXBlIGNv dW50KTsKCgoKYmZkX2Jvb2xlYW4KYmZkX2dldF9zZWN0aW9uX2NvbnRlbnRzIChiZmQgKmFiZmQs IGFzZWN0aW9uICpzZWN0aW9uLCB2b2lkICogbG9jYXRpb24sIGZpbGVfcHRyIG9mZnNldCwgYmZk X3NpemVfdHlwZSBjb3VudCk7CgoKCmJmZF9ib29sZWFuCmJmZF9jb3B5X3ByaXZhdGVfc2VjdGlv bl9kYXRhIChiZmQgKmliZmQsIGFzZWN0aW9uICppc2VjLCBiZmQgKm9iZmQsIGFzZWN0aW9uICpv c2VjKTsKCgoKCgp2b2lkCl9iZmRfc3RyaXBfc2VjdGlvbl9mcm9tX291dHB1dCAoc3RydWN0IGJm ZF9saW5rX2luZm8gKmluZm8sIGFzZWN0aW9uICpzZWN0aW9uKTsKCmJmZF9ib29sZWFuCmJmZF9n ZW5lcmljX2Rpc2NhcmRfZ3JvdXAgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKmdyb3VwKTsKCgplbnVt IGJmZF9hcmNoaXRlY3R1cmUKewogIGJmZF9hcmNoX3Vua25vd24sCiAgYmZkX2FyY2hfb2JzY3Vy ZSwKICBiZmRfYXJjaF9tNjhrLAojIDE1NDMgIi4uL2JmZC9iZmQuaCIKICBiZmRfYXJjaF92YXgs CiAgYmZkX2FyY2hfaTk2MCwKIyAxNTYyICIuLi9iZmQvYmZkLmgiCiAgYmZkX2FyY2hfb3IzMiwK CiAgYmZkX2FyY2hfYTI5aywKICBiZmRfYXJjaF9zcGFyYywKIyAxNTgxICIuLi9iZmQvYmZkLmgi CiAgYmZkX2FyY2hfbWlwcywKIyAxNjA2ICIuLi9iZmQvYmZkLmgiCiAgYmZkX2FyY2hfaTM4NiwK CgoKCgogIGJmZF9hcmNoX3dlMzJrLAogIGJmZF9hcmNoX3RhaG9lLAogIGJmZF9hcmNoX2k4NjAs CiAgYmZkX2FyY2hfaTM3MCwKICBiZmRfYXJjaF9yb21wLAogIGJmZF9hcmNoX2FsbGlhbnQsCiAg YmZkX2FyY2hfY29udmV4LAogIGJmZF9hcmNoX204OGssCiAgYmZkX2FyY2hfbTk4aywKICBiZmRf YXJjaF9weXJhbWlkLAogIGJmZF9hcmNoX2g4MzAwLAoKCgogIGJmZF9hcmNoX3BkcDExLAogIGJm ZF9hcmNoX3Bvd2VycGMsCiMgMTY0NyAiLi4vYmZkL2JmZC5oIgogIGJmZF9hcmNoX3JzNjAwMCwK CgoKCiAgYmZkX2FyY2hfaHBwYSwKICBiZmRfYXJjaF9kMTB2LAoKCgogIGJmZF9hcmNoX2QzMHYs CiAgYmZkX2FyY2hfZGx4LAogIGJmZF9hcmNoX202OGhjMTEsCiAgYmZkX2FyY2hfbTY4aGMxMiwK CgoKICBiZmRfYXJjaF96OGssCgoKICBiZmRfYXJjaF9oODUwMCwKICBiZmRfYXJjaF9zaCwKIyAx Njc4ICIuLi9iZmQvYmZkLmgiCiAgYmZkX2FyY2hfYWxwaGEsCgoKCiAgYmZkX2FyY2hfYXJtLAoj IDE2OTQgIi4uL2JmZC9iZmQuaCIKICBiZmRfYXJjaF9uczMyaywKICBiZmRfYXJjaF93NjUsCiAg YmZkX2FyY2hfdGljMzAsCiAgYmZkX2FyY2hfdGljNHgsCgoKICBiZmRfYXJjaF90aWM1NHgsCiAg YmZkX2FyY2hfdGljODAsCiAgYmZkX2FyY2hfdjg1MCwKCgogIGJmZF9hcmNoX2FyYywKCgoKCiAg YmZkX2FyY2hfbTMyciwKCgogIGJmZF9hcmNoX21uMTAyMDAsCiAgYmZkX2FyY2hfbW4xMDMwMCwK CgogIGJmZF9hcmNoX2ZyMzAsCgogIGJmZF9hcmNoX2ZydiwKCgoKCgoKICBiZmRfYXJjaF9tY29y ZSwKICBiZmRfYXJjaF9pYTY0LAoKCiAgYmZkX2FyY2hfaXAyaywKCgogYmZkX2FyY2hfaXEyMDAw LAoKCiAgYmZkX2FyY2hfcGosCiAgYmZkX2FyY2hfYXZyLAoKCgoKCiAgYmZkX2FyY2hfY3JpcywK ICBiZmRfYXJjaF9zMzkwLAoKCiAgYmZkX2FyY2hfb3BlbnJpc2MsCiAgYmZkX2FyY2hfbW1peCwK ICBiZmRfYXJjaF94c3Rvcm15MTYsCgogIGJmZF9hcmNoX21zcDQzMCwKIyAxNzY1ICIuLi9iZmQv YmZkLmgiCiAgYmZkX2FyY2hfbGFzdAogIH07Cgp0eXBlZGVmIHN0cnVjdCBiZmRfYXJjaF9pbmZv CnsKICBpbnQgYml0c19wZXJfd29yZDsKICBpbnQgYml0c19wZXJfYWRkcmVzczsKICBpbnQgYml0 c19wZXJfYnl0ZTsKICBlbnVtIGJmZF9hcmNoaXRlY3R1cmUgYXJjaDsKICB1bnNpZ25lZCBsb25n IG1hY2g7CiAgY29uc3QgY2hhciAqYXJjaF9uYW1lOwogIGNvbnN0IGNoYXIgKnByaW50YWJsZV9u YW1lOwogIHVuc2lnbmVkIGludCBzZWN0aW9uX2FsaWduX3Bvd2VyOwoKCgogIGJmZF9ib29sZWFu IHRoZV9kZWZhdWx0OwogIGNvbnN0IHN0cnVjdCBiZmRfYXJjaF9pbmZvICogKCpjb21wYXRpYmxl KQogICAgICAgKGNvbnN0IHN0cnVjdCBiZmRfYXJjaF9pbmZvICphLCBjb25zdCBzdHJ1Y3QgYmZk X2FyY2hfaW5mbyAqYik7CgoKICBiZmRfYm9vbGVhbiAoKnNjYW4pIChjb25zdCBzdHJ1Y3QgYmZk X2FyY2hfaW5mbyAqLCBjb25zdCBjaGFyICopOwoKICBjb25zdCBzdHJ1Y3QgYmZkX2FyY2hfaW5m byAqbmV4dDsKfQpiZmRfYXJjaF9pbmZvX3R5cGU7Cgpjb25zdCBjaGFyICoKYmZkX3ByaW50YWJs ZV9uYW1lIChiZmQgKmFiZmQpOwoKY29uc3QgYmZkX2FyY2hfaW5mb190eXBlICoKYmZkX3NjYW5f YXJjaCAoY29uc3QgY2hhciAqc3RyaW5nKTsKCmNvbnN0IGNoYXIgKioKYmZkX2FyY2hfbGlzdCAo dm9pZCk7Cgpjb25zdCBiZmRfYXJjaF9pbmZvX3R5cGUgKgpiZmRfYXJjaF9nZXRfY29tcGF0aWJs ZSAoIGNvbnN0IGJmZCAqYWJmZCwgY29uc3QgYmZkICpiYmZkLCBiZmRfYm9vbGVhbiBhY2NlcHRf dW5rbm93bnMpOwoKCgoKdm9pZApiZmRfc2V0X2FyY2hfaW5mbyAoYmZkICphYmZkLCBjb25zdCBi ZmRfYXJjaF9pbmZvX3R5cGUgKmFyZyk7CgplbnVtIGJmZF9hcmNoaXRlY3R1cmUKYmZkX2dldF9h cmNoIChiZmQgKmFiZmQpOwoKdW5zaWduZWQgbG9uZwpiZmRfZ2V0X21hY2ggKGJmZCAqYWJmZCk7 Cgp1bnNpZ25lZCBpbnQKYmZkX2FyY2hfYml0c19wZXJfYnl0ZSAoYmZkICphYmZkKTsKCnVuc2ln bmVkIGludApiZmRfYXJjaF9iaXRzX3Blcl9hZGRyZXNzIChiZmQgKmFiZmQpOwoKY29uc3QgYmZk X2FyY2hfaW5mb190eXBlICoKYmZkX2dldF9hcmNoX2luZm8gKGJmZCAqYWJmZCk7Cgpjb25zdCBi ZmRfYXJjaF9pbmZvX3R5cGUgKgpiZmRfbG9va3VwX2FyY2ggKGVudW0gYmZkX2FyY2hpdGVjdHVy ZSBhcmNoLCB1bnNpZ25lZCBsb25nIG1hY2hpbmUpOwoKCgpjb25zdCBjaGFyICoKYmZkX3ByaW50 YWJsZV9hcmNoX21hY2ggKGVudW0gYmZkX2FyY2hpdGVjdHVyZSBhcmNoLCB1bnNpZ25lZCBsb25n IG1hY2hpbmUpOwoKdW5zaWduZWQgaW50CmJmZF9vY3RldHNfcGVyX2J5dGUgKGJmZCAqYWJmZCk7 Cgp1bnNpZ25lZCBpbnQKYmZkX2FyY2hfbWFjaF9vY3RldHNfcGVyX2J5dGUgKGVudW0gYmZkX2Fy Y2hpdGVjdHVyZSBhcmNoLCB1bnNpZ25lZCBsb25nIG1hY2hpbmUpOwoKCgp0eXBlZGVmIGVudW0g YmZkX3JlbG9jX3N0YXR1cwp7CgogIGJmZF9yZWxvY19vaywKCgogIGJmZF9yZWxvY19vdmVyZmxv dywKCgogIGJmZF9yZWxvY19vdXRvZnJhbmdlLAoKCiAgYmZkX3JlbG9jX2NvbnRpbnVlLAoKCiAg YmZkX3JlbG9jX25vdHN1cHBvcnRlZCwKCgogIGJmZF9yZWxvY19vdGhlciwKCgogIGJmZF9yZWxv Y191bmRlZmluZWQsCgoKCgoKICBiZmRfcmVsb2NfZGFuZ2Vyb3VzCiB9CiBiZmRfcmVsb2Nfc3Rh dHVzX3R5cGU7CgoKdHlwZWRlZiBzdHJ1Y3QgcmVsb2NfY2FjaGVfZW50cnkKewoKICBzdHJ1Y3Qg c3ltYm9sX2NhY2hlX2VudHJ5ICoqc3ltX3B0cl9wdHI7CgoKICBiZmRfc2l6ZV90eXBlIGFkZHJl c3M7CgoKICBiZmRfdm1hIGFkZGVuZDsKCgogIHJlbG9jX2hvd3RvX3R5cGUgKmhvd3RvOwoKfQph cmVsZW50OwoKZW51bSBjb21wbGFpbl9vdmVyZmxvdwp7CgogIGNvbXBsYWluX292ZXJmbG93X2Rv bnQsCgoKCiAgY29tcGxhaW5fb3ZlcmZsb3dfYml0ZmllbGQsCgoKCiAgY29tcGxhaW5fb3ZlcmZs b3dfc2lnbmVkLAoKCgogIGNvbXBsYWluX292ZXJmbG93X3Vuc2lnbmVkCn07CgpzdHJ1Y3QgcmVs b2NfaG93dG9fc3RydWN0CnsKCgoKCgoKICB1bnNpZ25lZCBpbnQgdHlwZTsKCgoKICB1bnNpZ25l ZCBpbnQgcmlnaHRzaGlmdDsKCgoKCiAgaW50IHNpemU7CgoKCiAgdW5zaWduZWQgaW50IGJpdHNp emU7CgoKCgoKICBiZmRfYm9vbGVhbiBwY19yZWxhdGl2ZTsKCgoKICB1bnNpZ25lZCBpbnQgYml0 cG9zOwoKCgogIGVudW0gY29tcGxhaW5fb3ZlcmZsb3cgY29tcGxhaW5fb25fb3ZlcmZsb3c7CgoK CgoKICBiZmRfcmVsb2Nfc3RhdHVzX3R5cGUgKCpzcGVjaWFsX2Z1bmN0aW9uKQogICAgKGJmZCAq LCBhcmVsZW50ICosIHN0cnVjdCBzeW1ib2xfY2FjaGVfZW50cnkgKiwgdm9pZCAqLCBhc2VjdGlv biAqLCBiZmQgKiwgY2hhciAqKik7CgoKCiAgY2hhciAqbmFtZTsKIyAxOTcxICIuLi9iZmQvYmZk LmgiCiAgYmZkX2Jvb2xlYW4gcGFydGlhbF9pbnBsYWNlOwojIDE5ODEgIi4uL2JmZC9iZmQuaCIK ICBiZmRfdm1hIHNyY19tYXNrOwoKCgogIGJmZF92bWEgZHN0X21hc2s7CgoKCgoKCgogIGJmZF9i b29sZWFuIHBjcmVsX29mZnNldDsKfTsKIyAyMDIxICIuLi9iZmQvYmZkLmgiCnVuc2lnbmVkIGlu dApiZmRfZ2V0X3JlbG9jX3NpemUgKHJlbG9jX2hvd3RvX3R5cGUgKik7Cgp0eXBlZGVmIHN0cnVj dCByZWxlbnRfY2hhaW4KewogIGFyZWxlbnQgcmVsZW50OwogIHN0cnVjdCByZWxlbnRfY2hhaW4g Km5leHQ7Cn0KYXJlbGVudF9jaGFpbjsKCmJmZF9yZWxvY19zdGF0dXNfdHlwZQpiZmRfY2hlY2tf b3ZlcmZsb3cgKGVudW0gY29tcGxhaW5fb3ZlcmZsb3cgaG93LCB1bnNpZ25lZCBpbnQgYml0c2l6 ZSwgdW5zaWduZWQgaW50IHJpZ2h0c2hpZnQsIHVuc2lnbmVkIGludCBhZGRyc2l6ZSwgYmZkX3Zt YSByZWxvY2F0aW9uKTsKCgoKCgpiZmRfcmVsb2Nfc3RhdHVzX3R5cGUKYmZkX3BlcmZvcm1fcmVs b2NhdGlvbiAoYmZkICphYmZkLCBhcmVsZW50ICpyZWxvY19lbnRyeSwgdm9pZCAqIGRhdGEsIGFz ZWN0aW9uICppbnB1dF9zZWN0aW9uLCBiZmQgKm91dHB1dF9iZmQsIGNoYXIgKiplcnJvcl9tZXNz YWdlKTsKCgoKCgoKYmZkX3JlbG9jX3N0YXR1c190eXBlCmJmZF9pbnN0YWxsX3JlbG9jYXRpb24g KGJmZCAqYWJmZCwgYXJlbGVudCAqcmVsb2NfZW50cnksIHZvaWQgKiBkYXRhLCBiZmRfdm1hIGRh dGFfc3RhcnQsIGFzZWN0aW9uICppbnB1dF9zZWN0aW9uLCBjaGFyICoqZXJyb3JfbWVzc2FnZSk7 CgoKCgoKZW51bSBiZmRfcmVsb2NfY29kZV9yZWFsIHsKICBfZHVtbXlfZmlyc3RfYmZkX3JlbG9j X2NvZGVfcmVhbCwKCgoKICBCRkRfUkVMT0NfNjQsCiAgQkZEX1JFTE9DXzMyLAogIEJGRF9SRUxP Q18yNiwKICBCRkRfUkVMT0NfMjQsCiAgQkZEX1JFTE9DXzE2LAogIEJGRF9SRUxPQ18xNCwKICBC RkRfUkVMT0NfOCwKCgoKCgoKICBCRkRfUkVMT0NfNjRfUENSRUwsCiAgQkZEX1JFTE9DXzMyX1BD UkVMLAogIEJGRF9SRUxPQ18yNF9QQ1JFTCwKICBCRkRfUkVMT0NfMTZfUENSRUwsCiAgQkZEX1JF TE9DXzEyX1BDUkVMLAogIEJGRF9SRUxPQ184X1BDUkVMLAoKCiAgQkZEX1JFTE9DXzMyX0dPVF9Q Q1JFTCwKICBCRkRfUkVMT0NfMTZfR09UX1BDUkVMLAogIEJGRF9SRUxPQ184X0dPVF9QQ1JFTCwK ICBCRkRfUkVMT0NfMzJfR09UT0ZGLAogIEJGRF9SRUxPQ18xNl9HT1RPRkYsCiAgQkZEX1JFTE9D X0xPMTZfR09UT0ZGLAogIEJGRF9SRUxPQ19ISTE2X0dPVE9GRiwKICBCRkRfUkVMT0NfSEkxNl9T X0dPVE9GRiwKICBCRkRfUkVMT0NfOF9HT1RPRkYsCiAgQkZEX1JFTE9DXzY0X1BMVF9QQ1JFTCwK ICBCRkRfUkVMT0NfMzJfUExUX1BDUkVMLAogIEJGRF9SRUxPQ18yNF9QTFRfUENSRUwsCiAgQkZE X1JFTE9DXzE2X1BMVF9QQ1JFTCwKICBCRkRfUkVMT0NfOF9QTFRfUENSRUwsCiAgQkZEX1JFTE9D XzY0X1BMVE9GRiwKICBCRkRfUkVMT0NfMzJfUExUT0ZGLAogIEJGRF9SRUxPQ18xNl9QTFRPRkYs CiAgQkZEX1JFTE9DX0xPMTZfUExUT0ZGLAogIEJGRF9SRUxPQ19ISTE2X1BMVE9GRiwKICBCRkRf UkVMT0NfSEkxNl9TX1BMVE9GRiwKICBCRkRfUkVMT0NfOF9QTFRPRkYsCgoKICBCRkRfUkVMT0Nf NjhLX0dMT0JfREFULAogIEJGRF9SRUxPQ182OEtfSk1QX1NMT1QsCiAgQkZEX1JFTE9DXzY4S19S RUxBVElWRSwKCgogIEJGRF9SRUxPQ18zMl9CQVNFUkVMLAogIEJGRF9SRUxPQ18xNl9CQVNFUkVM LAogIEJGRF9SRUxPQ19MTzE2X0JBU0VSRUwsCiAgQkZEX1JFTE9DX0hJMTZfQkFTRVJFTCwKICBC RkRfUkVMT0NfSEkxNl9TX0JBU0VSRUwsCiAgQkZEX1JFTE9DXzhfQkFTRVJFTCwKICBCRkRfUkVM T0NfUlZBLAoKCiAgQkZEX1JFTE9DXzhfRkZubiwKCgoKCgoKCiAgQkZEX1JFTE9DXzMyX1BDUkVM X1MyLAogIEJGRF9SRUxPQ18xNl9QQ1JFTF9TMiwKICBCRkRfUkVMT0NfMjNfUENSRUxfUzIsCgoK CiAgQkZEX1JFTE9DX0hJMjIsCiAgQkZEX1JFTE9DX0xPMTAsCgoKCgoKICBCRkRfUkVMT0NfR1BS RUwxNiwKICBCRkRfUkVMT0NfR1BSRUwzMiwKCgogIEJGRF9SRUxPQ19JOTYwX0NBTExKLAoKCgog IEJGRF9SRUxPQ19OT05FLAogIEJGRF9SRUxPQ19TUEFSQ19XRElTUDIyLAogIEJGRF9SRUxPQ19T UEFSQzIyLAogIEJGRF9SRUxPQ19TUEFSQzEzLAogIEJGRF9SRUxPQ19TUEFSQ19HT1QxMCwKICBC RkRfUkVMT0NfU1BBUkNfR09UMTMsCiAgQkZEX1JFTE9DX1NQQVJDX0dPVDIyLAogIEJGRF9SRUxP Q19TUEFSQ19QQzEwLAogIEJGRF9SRUxPQ19TUEFSQ19QQzIyLAogIEJGRF9SRUxPQ19TUEFSQ19X UExUMzAsCiAgQkZEX1JFTE9DX1NQQVJDX0NPUFksCiAgQkZEX1JFTE9DX1NQQVJDX0dMT0JfREFU LAogIEJGRF9SRUxPQ19TUEFSQ19KTVBfU0xPVCwKICBCRkRfUkVMT0NfU1BBUkNfUkVMQVRJVkUs CiAgQkZEX1JFTE9DX1NQQVJDX1VBMTYsCiAgQkZEX1JFTE9DX1NQQVJDX1VBMzIsCiAgQkZEX1JF TE9DX1NQQVJDX1VBNjQsCgoKICBCRkRfUkVMT0NfU1BBUkNfQkFTRTEzLAogIEJGRF9SRUxPQ19T UEFSQ19CQVNFMjIsCgoKCiAgQkZEX1JFTE9DX1NQQVJDXzEwLAogIEJGRF9SRUxPQ19TUEFSQ18x MSwKICBCRkRfUkVMT0NfU1BBUkNfT0xPMTAsCiAgQkZEX1JFTE9DX1NQQVJDX0hIMjIsCiAgQkZE X1JFTE9DX1NQQVJDX0hNMTAsCiAgQkZEX1JFTE9DX1NQQVJDX0xNMjIsCiAgQkZEX1JFTE9DX1NQ QVJDX1BDX0hIMjIsCiAgQkZEX1JFTE9DX1NQQVJDX1BDX0hNMTAsCiAgQkZEX1JFTE9DX1NQQVJD X1BDX0xNMjIsCiAgQkZEX1JFTE9DX1NQQVJDX1dESVNQMTYsCiAgQkZEX1JFTE9DX1NQQVJDX1dE SVNQMTksCiAgQkZEX1JFTE9DX1NQQVJDXzcsCiAgQkZEX1JFTE9DX1NQQVJDXzYsCiAgQkZEX1JF TE9DX1NQQVJDXzUsCgogIEJGRF9SRUxPQ19TUEFSQ19QTFQzMiwKICBCRkRfUkVMT0NfU1BBUkNf UExUNjQsCiAgQkZEX1JFTE9DX1NQQVJDX0hJWDIyLAogIEJGRF9SRUxPQ19TUEFSQ19MT1gxMCwK ICBCRkRfUkVMT0NfU1BBUkNfSDQ0LAogIEJGRF9SRUxPQ19TUEFSQ19NNDQsCiAgQkZEX1JFTE9D X1NQQVJDX0w0NCwKICBCRkRfUkVMT0NfU1BBUkNfUkVHSVNURVIsCgoKICBCRkRfUkVMT0NfU1BB UkNfUkVWMzIsCgoKICBCRkRfUkVMT0NfU1BBUkNfVExTX0dEX0hJMjIsCiAgQkZEX1JFTE9DX1NQ QVJDX1RMU19HRF9MTzEwLAogIEJGRF9SRUxPQ19TUEFSQ19UTFNfR0RfQURELAogIEJGRF9SRUxP Q19TUEFSQ19UTFNfR0RfQ0FMTCwKICBCRkRfUkVMT0NfU1BBUkNfVExTX0xETV9ISTIyLAogIEJG RF9SRUxPQ19TUEFSQ19UTFNfTERNX0xPMTAsCiAgQkZEX1JFTE9DX1NQQVJDX1RMU19MRE1fQURE LAogIEJGRF9SRUxPQ19TUEFSQ19UTFNfTERNX0NBTEwsCiAgQkZEX1JFTE9DX1NQQVJDX1RMU19M RE9fSElYMjIsCiAgQkZEX1JFTE9DX1NQQVJDX1RMU19MRE9fTE9YMTAsCiAgQkZEX1JFTE9DX1NQ QVJDX1RMU19MRE9fQURELAogIEJGRF9SRUxPQ19TUEFSQ19UTFNfSUVfSEkyMiwKICBCRkRfUkVM T0NfU1BBUkNfVExTX0lFX0xPMTAsCiAgQkZEX1JFTE9DX1NQQVJDX1RMU19JRV9MRCwKICBCRkRf UkVMT0NfU1BBUkNfVExTX0lFX0xEWCwKICBCRkRfUkVMT0NfU1BBUkNfVExTX0lFX0FERCwKICBC RkRfUkVMT0NfU1BBUkNfVExTX0xFX0hJWDIyLAogIEJGRF9SRUxPQ19TUEFSQ19UTFNfTEVfTE9Y MTAsCiAgQkZEX1JFTE9DX1NQQVJDX1RMU19EVFBNT0QzMiwKICBCRkRfUkVMT0NfU1BBUkNfVExT X0RUUE1PRDY0LAogIEJGRF9SRUxPQ19TUEFSQ19UTFNfRFRQT0ZGMzIsCiAgQkZEX1JFTE9DX1NQ QVJDX1RMU19EVFBPRkY2NCwKICBCRkRfUkVMT0NfU1BBUkNfVExTX1RQT0ZGMzIsCiAgQkZEX1JF TE9DX1NQQVJDX1RMU19UUE9GRjY0LAoKCgoKCgoKICBCRkRfUkVMT0NfQUxQSEFfR1BESVNQX0hJ MTYsCgoKCgoKICBCRkRfUkVMT0NfQUxQSEFfR1BESVNQX0xPMTYsCgoKCgogIEJGRF9SRUxPQ19B TFBIQV9HUERJU1AsCiMgMjI2NCAiLi4vYmZkL2JmZC5oIgogIEJGRF9SRUxPQ19BTFBIQV9MSVRF UkFMLAogIEJGRF9SRUxPQ19BTFBIQV9FTEZfTElURVJBTCwKICBCRkRfUkVMT0NfQUxQSEFfTElU VVNFLAoKCgoKICBCRkRfUkVMT0NfQUxQSEFfSElOVCwKCgoKICBCRkRfUkVMT0NfQUxQSEFfTElO S0FHRSwKCgoKICBCRkRfUkVMT0NfQUxQSEFfQ09ERUFERFIsCgoKCiAgQkZEX1JFTE9DX0FMUEhB X0dQUkVMX0hJMTYsCiAgQkZEX1JFTE9DX0FMUEhBX0dQUkVMX0xPMTYsCgoKCgogIEJGRF9SRUxP Q19BTFBIQV9CUlNHUCwKCgogIEJGRF9SRUxPQ19BTFBIQV9UTFNHRCwKICBCRkRfUkVMT0NfQUxQ SEFfVExTTERNLAogIEJGRF9SRUxPQ19BTFBIQV9EVFBNT0Q2NCwKICBCRkRfUkVMT0NfQUxQSEFf R09URFRQUkVMMTYsCiAgQkZEX1JFTE9DX0FMUEhBX0RUUFJFTDY0LAogIEJGRF9SRUxPQ19BTFBI QV9EVFBSRUxfSEkxNiwKICBCRkRfUkVMT0NfQUxQSEFfRFRQUkVMX0xPMTYsCiAgQkZEX1JFTE9D X0FMUEhBX0RUUFJFTDE2LAogIEJGRF9SRUxPQ19BTFBIQV9HT1RUUFJFTDE2LAogIEJGRF9SRUxP Q19BTFBIQV9UUFJFTDY0LAogIEJGRF9SRUxPQ19BTFBIQV9UUFJFTF9ISTE2LAogIEJGRF9SRUxP Q19BTFBIQV9UUFJFTF9MTzE2LAogIEJGRF9SRUxPQ19BTFBIQV9UUFJFTDE2LAoKCgogIEJGRF9S RUxPQ19NSVBTX0pNUCwKCgogIEJGRF9SRUxPQ19NSVBTMTZfSk1QLAoKCiAgQkZEX1JFTE9DX01J UFMxNl9HUFJFTCwKCgogIEJGRF9SRUxPQ19ISTE2LAoKCgoKCiAgQkZEX1JFTE9DX0hJMTZfUywK CgogIEJGRF9SRUxPQ19MTzE2LAoKCiAgQkZEX1JFTE9DX1BDUkVMX0hJMTZfUywKCgogIEJGRF9S RUxPQ19QQ1JFTF9MTzE2LAoKCiAgQkZEX1JFTE9DX01JUFNfTElURVJBTCwKCgogIEJGRF9SRUxP Q19NSVBTX0dPVDE2LAogIEJGRF9SRUxPQ19NSVBTX0NBTEwxNiwKICBCRkRfUkVMT0NfTUlQU19H T1RfSEkxNiwKICBCRkRfUkVMT0NfTUlQU19HT1RfTE8xNiwKICBCRkRfUkVMT0NfTUlQU19DQUxM X0hJMTYsCiAgQkZEX1JFTE9DX01JUFNfQ0FMTF9MTzE2LAogIEJGRF9SRUxPQ19NSVBTX1NVQiwK ICBCRkRfUkVMT0NfTUlQU19HT1RfUEFHRSwKICBCRkRfUkVMT0NfTUlQU19HT1RfT0ZTVCwKICBC RkRfUkVMT0NfTUlQU19HT1RfRElTUCwKICBCRkRfUkVMT0NfTUlQU19TSElGVDUsCiAgQkZEX1JF TE9DX01JUFNfU0hJRlQ2LAogIEJGRF9SRUxPQ19NSVBTX0lOU0VSVF9BLAogIEJGRF9SRUxPQ19N SVBTX0lOU0VSVF9CLAogIEJGRF9SRUxPQ19NSVBTX0RFTEVURSwKICBCRkRfUkVMT0NfTUlQU19I SUdIRVNULAogIEJGRF9SRUxPQ19NSVBTX0hJR0hFUiwKICBCRkRfUkVMT0NfTUlQU19TQ05fRElT UCwKICBCRkRfUkVMT0NfTUlQU19SRUwxNiwKICBCRkRfUkVMT0NfTUlQU19SRUxHT1QsCiAgQkZE X1JFTE9DX01JUFNfSkFMUiwKCgogIEJGRF9SRUxPQ19GUlZfTEFCRUwxNiwKICBCRkRfUkVMT0Nf RlJWX0xBQkVMMjQsCiAgQkZEX1JFTE9DX0ZSVl9MTzE2LAogIEJGRF9SRUxPQ19GUlZfSEkxNiwK ICBCRkRfUkVMT0NfRlJWX0dQUkVMMTIsCiAgQkZEX1JFTE9DX0ZSVl9HUFJFTFUxMiwKICBCRkRf UkVMT0NfRlJWX0dQUkVMMzIsCiAgQkZEX1JFTE9DX0ZSVl9HUFJFTEhJLAogIEJGRF9SRUxPQ19G UlZfR1BSRUxMTywKCgoKICBCRkRfUkVMT0NfMzg2X0dPVDMyLAogIEJGRF9SRUxPQ18zODZfUExU MzIsCiAgQkZEX1JFTE9DXzM4Nl9DT1BZLAogIEJGRF9SRUxPQ18zODZfR0xPQl9EQVQsCiAgQkZE X1JFTE9DXzM4Nl9KVU1QX1NMT1QsCiAgQkZEX1JFTE9DXzM4Nl9SRUxBVElWRSwKICBCRkRfUkVM T0NfMzg2X0dPVE9GRiwKICBCRkRfUkVMT0NfMzg2X0dPVFBDLAogIEJGRF9SRUxPQ18zODZfVExT X1RQT0ZGLAogIEJGRF9SRUxPQ18zODZfVExTX0lFLAogIEJGRF9SRUxPQ18zODZfVExTX0dPVElF LAogIEJGRF9SRUxPQ18zODZfVExTX0xFLAogIEJGRF9SRUxPQ18zODZfVExTX0dELAogIEJGRF9S RUxPQ18zODZfVExTX0xETSwKICBCRkRfUkVMT0NfMzg2X1RMU19MRE9fMzIsCiAgQkZEX1JFTE9D XzM4Nl9UTFNfSUVfMzIsCiAgQkZEX1JFTE9DXzM4Nl9UTFNfTEVfMzIsCiAgQkZEX1JFTE9DXzM4 Nl9UTFNfRFRQTU9EMzIsCiAgQkZEX1JFTE9DXzM4Nl9UTFNfRFRQT0ZGMzIsCiAgQkZEX1JFTE9D XzM4Nl9UTFNfVFBPRkYzMiwKCgogIEJGRF9SRUxPQ19YODZfNjRfR09UMzIsCiAgQkZEX1JFTE9D X1g4Nl82NF9QTFQzMiwKICBCRkRfUkVMT0NfWDg2XzY0X0NPUFksCiAgQkZEX1JFTE9DX1g4Nl82 NF9HTE9CX0RBVCwKICBCRkRfUkVMT0NfWDg2XzY0X0pVTVBfU0xPVCwKICBCRkRfUkVMT0NfWDg2 XzY0X1JFTEFUSVZFLAogIEJGRF9SRUxPQ19YODZfNjRfR09UUENSRUwsCiAgQkZEX1JFTE9DX1g4 Nl82NF8zMlMsCiAgQkZEX1JFTE9DX1g4Nl82NF9EVFBNT0Q2NCwKICBCRkRfUkVMT0NfWDg2XzY0 X0RUUE9GRjY0LAogIEJGRF9SRUxPQ19YODZfNjRfVFBPRkY2NCwKICBCRkRfUkVMT0NfWDg2XzY0 X1RMU0dELAogIEJGRF9SRUxPQ19YODZfNjRfVExTTEQsCiAgQkZEX1JFTE9DX1g4Nl82NF9EVFBP RkYzMiwKICBCRkRfUkVMT0NfWDg2XzY0X0dPVFRQT0ZGLAogIEJGRF9SRUxPQ19YODZfNjRfVFBP RkYzMiwKCgogIEJGRF9SRUxPQ19OUzMyS19JTU1fOCwKICBCRkRfUkVMT0NfTlMzMktfSU1NXzE2 LAogIEJGRF9SRUxPQ19OUzMyS19JTU1fMzIsCiAgQkZEX1JFTE9DX05TMzJLX0lNTV84X1BDUkVM LAogIEJGRF9SRUxPQ19OUzMyS19JTU1fMTZfUENSRUwsCiAgQkZEX1JFTE9DX05TMzJLX0lNTV8z Ml9QQ1JFTCwKICBCRkRfUkVMT0NfTlMzMktfRElTUF84LAogIEJGRF9SRUxPQ19OUzMyS19ESVNQ XzE2LAogIEJGRF9SRUxPQ19OUzMyS19ESVNQXzMyLAogIEJGRF9SRUxPQ19OUzMyS19ESVNQXzhf UENSRUwsCiAgQkZEX1JFTE9DX05TMzJLX0RJU1BfMTZfUENSRUwsCiAgQkZEX1JFTE9DX05TMzJL X0RJU1BfMzJfUENSRUwsCgoKICBCRkRfUkVMT0NfUERQMTFfRElTUF84X1BDUkVMLAogIEJGRF9S RUxPQ19QRFAxMV9ESVNQXzZfUENSRUwsCgoKICBCRkRfUkVMT0NfUEpfQ09ERV9ISTE2LAogIEJG RF9SRUxPQ19QSl9DT0RFX0xPMTYsCiAgQkZEX1JFTE9DX1BKX0NPREVfRElSMTYsCiAgQkZEX1JF TE9DX1BKX0NPREVfRElSMzIsCiAgQkZEX1JFTE9DX1BKX0NPREVfUkVMMTYsCiAgQkZEX1JFTE9D X1BKX0NPREVfUkVMMzIsCgoKICBCRkRfUkVMT0NfUFBDX0IyNiwKICBCRkRfUkVMT0NfUFBDX0JB MjYsCiAgQkZEX1JFTE9DX1BQQ19UT0MxNiwKICBCRkRfUkVMT0NfUFBDX0IxNiwKICBCRkRfUkVM T0NfUFBDX0IxNl9CUlRBS0VOLAogIEJGRF9SRUxPQ19QUENfQjE2X0JSTlRBS0VOLAogIEJGRF9S RUxPQ19QUENfQkExNiwKICBCRkRfUkVMT0NfUFBDX0JBMTZfQlJUQUtFTiwKICBCRkRfUkVMT0Nf UFBDX0JBMTZfQlJOVEFLRU4sCiAgQkZEX1JFTE9DX1BQQ19DT1BZLAogIEJGRF9SRUxPQ19QUENf R0xPQl9EQVQsCiAgQkZEX1JFTE9DX1BQQ19KTVBfU0xPVCwKICBCRkRfUkVMT0NfUFBDX1JFTEFU SVZFLAogIEJGRF9SRUxPQ19QUENfTE9DQUwyNFBDLAogIEJGRF9SRUxPQ19QUENfRU1CX05BRERS MzIsCiAgQkZEX1JFTE9DX1BQQ19FTUJfTkFERFIxNiwKICBCRkRfUkVMT0NfUFBDX0VNQl9OQURE UjE2X0xPLAogIEJGRF9SRUxPQ19QUENfRU1CX05BRERSMTZfSEksCiAgQkZEX1JFTE9DX1BQQ19F TUJfTkFERFIxNl9IQSwKICBCRkRfUkVMT0NfUFBDX0VNQl9TREFJMTYsCiAgQkZEX1JFTE9DX1BQ Q19FTUJfU0RBMkkxNiwKICBCRkRfUkVMT0NfUFBDX0VNQl9TREEyUkVMLAogIEJGRF9SRUxPQ19Q UENfRU1CX1NEQTIxLAogIEJGRF9SRUxPQ19QUENfRU1CX01SS1JFRiwKICBCRkRfUkVMT0NfUFBD X0VNQl9SRUxTRUMxNiwKICBCRkRfUkVMT0NfUFBDX0VNQl9SRUxTVF9MTywKICBCRkRfUkVMT0Nf UFBDX0VNQl9SRUxTVF9ISSwKICBCRkRfUkVMT0NfUFBDX0VNQl9SRUxTVF9IQSwKICBCRkRfUkVM T0NfUFBDX0VNQl9CSVRfRkxELAogIEJGRF9SRUxPQ19QUENfRU1CX1JFTFNEQSwKICBCRkRfUkVM T0NfUFBDNjRfSElHSEVSLAogIEJGRF9SRUxPQ19QUEM2NF9ISUdIRVJfUywKICBCRkRfUkVMT0Nf UFBDNjRfSElHSEVTVCwKICBCRkRfUkVMT0NfUFBDNjRfSElHSEVTVF9TLAogIEJGRF9SRUxPQ19Q UEM2NF9UT0MxNl9MTywKICBCRkRfUkVMT0NfUFBDNjRfVE9DMTZfSEksCiAgQkZEX1JFTE9DX1BQ QzY0X1RPQzE2X0hBLAogIEJGRF9SRUxPQ19QUEM2NF9UT0MsCiAgQkZEX1JFTE9DX1BQQzY0X1BM VEdPVDE2LAogIEJGRF9SRUxPQ19QUEM2NF9QTFRHT1QxNl9MTywKICBCRkRfUkVMT0NfUFBDNjRf UExUR09UMTZfSEksCiAgQkZEX1JFTE9DX1BQQzY0X1BMVEdPVDE2X0hBLAogIEJGRF9SRUxPQ19Q UEM2NF9BRERSMTZfRFMsCiAgQkZEX1JFTE9DX1BQQzY0X0FERFIxNl9MT19EUywKICBCRkRfUkVM T0NfUFBDNjRfR09UMTZfRFMsCiAgQkZEX1JFTE9DX1BQQzY0X0dPVDE2X0xPX0RTLAogIEJGRF9S RUxPQ19QUEM2NF9QTFQxNl9MT19EUywKICBCRkRfUkVMT0NfUFBDNjRfU0VDVE9GRl9EUywKICBC RkRfUkVMT0NfUFBDNjRfU0VDVE9GRl9MT19EUywKICBCRkRfUkVMT0NfUFBDNjRfVE9DMTZfRFMs CiAgQkZEX1JFTE9DX1BQQzY0X1RPQzE2X0xPX0RTLAogIEJGRF9SRUxPQ19QUEM2NF9QTFRHT1Qx Nl9EUywKICBCRkRfUkVMT0NfUFBDNjRfUExUR09UMTZfTE9fRFMsCgoKICBCRkRfUkVMT0NfUFBD X1RMUywKICBCRkRfUkVMT0NfUFBDX0RUUE1PRCwKICBCRkRfUkVMT0NfUFBDX1RQUkVMMTYsCiAg QkZEX1JFTE9DX1BQQ19UUFJFTDE2X0xPLAogIEJGRF9SRUxPQ19QUENfVFBSRUwxNl9ISSwKICBC RkRfUkVMT0NfUFBDX1RQUkVMMTZfSEEsCiAgQkZEX1JFTE9DX1BQQ19UUFJFTCwKICBCRkRfUkVM T0NfUFBDX0RUUFJFTDE2LAogIEJGRF9SRUxPQ19QUENfRFRQUkVMMTZfTE8sCiAgQkZEX1JFTE9D X1BQQ19EVFBSRUwxNl9ISSwKICBCRkRfUkVMT0NfUFBDX0RUUFJFTDE2X0hBLAogIEJGRF9SRUxP Q19QUENfRFRQUkVMLAogIEJGRF9SRUxPQ19QUENfR09UX1RMU0dEMTYsCiAgQkZEX1JFTE9DX1BQ Q19HT1RfVExTR0QxNl9MTywKICBCRkRfUkVMT0NfUFBDX0dPVF9UTFNHRDE2X0hJLAogIEJGRF9S RUxPQ19QUENfR09UX1RMU0dEMTZfSEEsCiAgQkZEX1JFTE9DX1BQQ19HT1RfVExTTEQxNiwKICBC RkRfUkVMT0NfUFBDX0dPVF9UTFNMRDE2X0xPLAogIEJGRF9SRUxPQ19QUENfR09UX1RMU0xEMTZf SEksCiAgQkZEX1JFTE9DX1BQQ19HT1RfVExTTEQxNl9IQSwKICBCRkRfUkVMT0NfUFBDX0dPVF9U UFJFTDE2LAogIEJGRF9SRUxPQ19QUENfR09UX1RQUkVMMTZfTE8sCiAgQkZEX1JFTE9DX1BQQ19H T1RfVFBSRUwxNl9ISSwKICBCRkRfUkVMT0NfUFBDX0dPVF9UUFJFTDE2X0hBLAogIEJGRF9SRUxP Q19QUENfR09UX0RUUFJFTDE2LAogIEJGRF9SRUxPQ19QUENfR09UX0RUUFJFTDE2X0xPLAogIEJG RF9SRUxPQ19QUENfR09UX0RUUFJFTDE2X0hJLAogIEJGRF9SRUxPQ19QUENfR09UX0RUUFJFTDE2 X0hBLAogIEJGRF9SRUxPQ19QUEM2NF9UUFJFTDE2X0RTLAogIEJGRF9SRUxPQ19QUEM2NF9UUFJF TDE2X0xPX0RTLAogIEJGRF9SRUxPQ19QUEM2NF9UUFJFTDE2X0hJR0hFUiwKICBCRkRfUkVMT0Nf UFBDNjRfVFBSRUwxNl9ISUdIRVJBLAogIEJGRF9SRUxPQ19QUEM2NF9UUFJFTDE2X0hJR0hFU1Qs CiAgQkZEX1JFTE9DX1BQQzY0X1RQUkVMMTZfSElHSEVTVEEsCiAgQkZEX1JFTE9DX1BQQzY0X0RU UFJFTDE2X0RTLAogIEJGRF9SRUxPQ19QUEM2NF9EVFBSRUwxNl9MT19EUywKICBCRkRfUkVMT0Nf UFBDNjRfRFRQUkVMMTZfSElHSEVSLAogIEJGRF9SRUxPQ19QUEM2NF9EVFBSRUwxNl9ISUdIRVJB LAogIEJGRF9SRUxPQ19QUEM2NF9EVFBSRUwxNl9ISUdIRVNULAogIEJGRF9SRUxPQ19QUEM2NF9E VFBSRUwxNl9ISUdIRVNUQSwKCgogIEJGRF9SRUxPQ19JMzcwX0QxMiwKCgoKCiAgQkZEX1JFTE9D X0NUT1IsCgoKCiAgQkZEX1JFTE9DX0FSTV9QQ1JFTF9CUkFOQ0gsCgoKCgogIEJGRF9SRUxPQ19B Uk1fUENSRUxfQkxYLAoKCgoKICBCRkRfUkVMT0NfVEhVTUJfUENSRUxfQkxYLAoKCgogIEJGRF9S RUxPQ19BUk1fSU1NRURJQVRFLAogIEJGRF9SRUxPQ19BUk1fQURSTF9JTU1FRElBVEUsCiAgQkZE X1JFTE9DX0FSTV9PRkZTRVRfSU1NLAogIEJGRF9SRUxPQ19BUk1fU0hJRlRfSU1NLAogIEJGRF9S RUxPQ19BUk1fU1dJLAogIEJGRF9SRUxPQ19BUk1fTVVMVEksCiAgQkZEX1JFTE9DX0FSTV9DUF9P RkZfSU1NLAogIEJGRF9SRUxPQ19BUk1fQURSX0lNTSwKICBCRkRfUkVMT0NfQVJNX0xEUl9JTU0s CiAgQkZEX1JFTE9DX0FSTV9MSVRFUkFMLAogIEJGRF9SRUxPQ19BUk1fSU5fUE9PTCwKICBCRkRf UkVMT0NfQVJNX09GRlNFVF9JTU04LAogIEJGRF9SRUxPQ19BUk1fSFdMSVRFUkFMLAogIEJGRF9S RUxPQ19BUk1fVEhVTUJfQURELAogIEJGRF9SRUxPQ19BUk1fVEhVTUJfSU1NLAogIEJGRF9SRUxP Q19BUk1fVEhVTUJfU0hJRlQsCiAgQkZEX1JFTE9DX0FSTV9USFVNQl9PRkZTRVQsCiAgQkZEX1JF TE9DX0FSTV9HT1QxMiwKICBCRkRfUkVMT0NfQVJNX0dPVDMyLAogIEJGRF9SRUxPQ19BUk1fSlVN UF9TTE9ULAogIEJGRF9SRUxPQ19BUk1fQ09QWSwKICBCRkRfUkVMT0NfQVJNX0dMT0JfREFULAog IEJGRF9SRUxPQ19BUk1fUExUMzIsCiAgQkZEX1JFTE9DX0FSTV9SRUxBVElWRSwKICBCRkRfUkVM T0NfQVJNX0dPVE9GRiwKICBCRkRfUkVMT0NfQVJNX0dPVFBDLAoKCiAgQkZEX1JFTE9DX1NIX1BD RElTUDhCWTIsCiAgQkZEX1JFTE9DX1NIX1BDRElTUDEyQlkyLAogIEJGRF9SRUxPQ19TSF9JTU00 LAogIEJGRF9SRUxPQ19TSF9JTU00QlkyLAogIEJGRF9SRUxPQ19TSF9JTU00Qlk0LAogIEJGRF9S RUxPQ19TSF9JTU04LAogIEJGRF9SRUxPQ19TSF9JTU04QlkyLAogIEJGRF9SRUxPQ19TSF9JTU04 Qlk0LAogIEJGRF9SRUxPQ19TSF9QQ1JFTElNTThCWTIsCiAgQkZEX1JFTE9DX1NIX1BDUkVMSU1N OEJZNCwKICBCRkRfUkVMT0NfU0hfU1dJVENIMTYsCiAgQkZEX1JFTE9DX1NIX1NXSVRDSDMyLAog IEJGRF9SRUxPQ19TSF9VU0VTLAogIEJGRF9SRUxPQ19TSF9DT1VOVCwKICBCRkRfUkVMT0NfU0hf QUxJR04sCiAgQkZEX1JFTE9DX1NIX0NPREUsCiAgQkZEX1JFTE9DX1NIX0RBVEEsCiAgQkZEX1JF TE9DX1NIX0xBQkVMLAogIEJGRF9SRUxPQ19TSF9MT09QX1NUQVJULAogIEJGRF9SRUxPQ19TSF9M T09QX0VORCwKICBCRkRfUkVMT0NfU0hfQ09QWSwKICBCRkRfUkVMT0NfU0hfR0xPQl9EQVQsCiAg QkZEX1JFTE9DX1NIX0pNUF9TTE9ULAogIEJGRF9SRUxPQ19TSF9SRUxBVElWRSwKICBCRkRfUkVM T0NfU0hfR09UUEMsCiAgQkZEX1JFTE9DX1NIX0dPVF9MT1cxNiwKICBCRkRfUkVMT0NfU0hfR09U X01FRExPVzE2LAogIEJGRF9SRUxPQ19TSF9HT1RfTUVESEkxNiwKICBCRkRfUkVMT0NfU0hfR09U X0hJMTYsCiAgQkZEX1JFTE9DX1NIX0dPVFBMVF9MT1cxNiwKICBCRkRfUkVMT0NfU0hfR09UUExU X01FRExPVzE2LAogIEJGRF9SRUxPQ19TSF9HT1RQTFRfTUVESEkxNiwKICBCRkRfUkVMT0NfU0hf R09UUExUX0hJMTYsCiAgQkZEX1JFTE9DX1NIX1BMVF9MT1cxNiwKICBCRkRfUkVMT0NfU0hfUExU X01FRExPVzE2LAogIEJGRF9SRUxPQ19TSF9QTFRfTUVESEkxNiwKICBCRkRfUkVMT0NfU0hfUExU X0hJMTYsCiAgQkZEX1JFTE9DX1NIX0dPVE9GRl9MT1cxNiwKICBCRkRfUkVMT0NfU0hfR09UT0ZG X01FRExPVzE2LAogIEJGRF9SRUxPQ19TSF9HT1RPRkZfTUVESEkxNiwKICBCRkRfUkVMT0NfU0hf R09UT0ZGX0hJMTYsCiAgQkZEX1JFTE9DX1NIX0dPVFBDX0xPVzE2LAogIEJGRF9SRUxPQ19TSF9H T1RQQ19NRURMT1cxNiwKICBCRkRfUkVMT0NfU0hfR09UUENfTUVESEkxNiwKICBCRkRfUkVMT0Nf U0hfR09UUENfSEkxNiwKICBCRkRfUkVMT0NfU0hfQ09QWTY0LAogIEJGRF9SRUxPQ19TSF9HTE9C X0RBVDY0LAogIEJGRF9SRUxPQ19TSF9KTVBfU0xPVDY0LAogIEJGRF9SRUxPQ19TSF9SRUxBVElW RTY0LAogIEJGRF9SRUxPQ19TSF9HT1QxMEJZNCwKICBCRkRfUkVMT0NfU0hfR09UMTBCWTgsCiAg QkZEX1JFTE9DX1NIX0dPVFBMVDEwQlk0LAogIEJGRF9SRUxPQ19TSF9HT1RQTFQxMEJZOCwKICBC RkRfUkVMT0NfU0hfR09UUExUMzIsCiAgQkZEX1JFTE9DX1NIX1NITUVESUFfQ09ERSwKICBCRkRf UkVMT0NfU0hfSU1NVTUsCiAgQkZEX1JFTE9DX1NIX0lNTVM2LAogIEJGRF9SRUxPQ19TSF9JTU1T NkJZMzIsCiAgQkZEX1JFTE9DX1NIX0lNTVU2LAogIEJGRF9SRUxPQ19TSF9JTU1TMTAsCiAgQkZE X1JFTE9DX1NIX0lNTVMxMEJZMiwKICBCRkRfUkVMT0NfU0hfSU1NUzEwQlk0LAogIEJGRF9SRUxP Q19TSF9JTU1TMTBCWTgsCiAgQkZEX1JFTE9DX1NIX0lNTVMxNiwKICBCRkRfUkVMT0NfU0hfSU1N VTE2LAogIEJGRF9SRUxPQ19TSF9JTU1fTE9XMTYsCiAgQkZEX1JFTE9DX1NIX0lNTV9MT1cxNl9Q Q1JFTCwKICBCRkRfUkVMT0NfU0hfSU1NX01FRExPVzE2LAogIEJGRF9SRUxPQ19TSF9JTU1fTUVE TE9XMTZfUENSRUwsCiAgQkZEX1JFTE9DX1NIX0lNTV9NRURISTE2LAogIEJGRF9SRUxPQ19TSF9J TU1fTUVESEkxNl9QQ1JFTCwKICBCRkRfUkVMT0NfU0hfSU1NX0hJMTYsCiAgQkZEX1JFTE9DX1NI X0lNTV9ISTE2X1BDUkVMLAogIEJGRF9SRUxPQ19TSF9QVF8xNiwKICBCRkRfUkVMT0NfU0hfVExT X0dEXzMyLAogIEJGRF9SRUxPQ19TSF9UTFNfTERfMzIsCiAgQkZEX1JFTE9DX1NIX1RMU19MRE9f MzIsCiAgQkZEX1JFTE9DX1NIX1RMU19JRV8zMiwKICBCRkRfUkVMT0NfU0hfVExTX0xFXzMyLAog IEJGRF9SRUxPQ19TSF9UTFNfRFRQTU9EMzIsCiAgQkZEX1JFTE9DX1NIX1RMU19EVFBPRkYzMiwK ICBCRkRfUkVMT0NfU0hfVExTX1RQT0ZGMzIsCgoKCiAgQkZEX1JFTE9DX1RIVU1CX1BDUkVMX0JS QU5DSDksCiAgQkZEX1JFTE9DX1RIVU1CX1BDUkVMX0JSQU5DSDEyLAogIEJGRF9SRUxPQ19USFVN Ql9QQ1JFTF9CUkFOQ0gyMywKCgoKCgogIEJGRF9SRUxPQ19BUkNfQjIyX1BDUkVMLAoKCgoKICBC RkRfUkVMT0NfQVJDX0IyNiwKCgoKCiAgQkZEX1JFTE9DX0QxMFZfMTBfUENSRUxfUiwKCgoKCgoK ICBCRkRfUkVMT0NfRDEwVl8xMF9QQ1JFTF9MLAoKCgogIEJGRF9SRUxPQ19EMTBWXzE4LAoKCgog IEJGRF9SRUxPQ19EMTBWXzE4X1BDUkVMLAoKCgogIEJGRF9SRUxPQ19EMzBWXzYsCgoKCiAgQkZE X1JFTE9DX0QzMFZfOV9QQ1JFTCwKCgoKCgogIEJGRF9SRUxPQ19EMzBWXzlfUENSRUxfUiwKCgoK ICBCRkRfUkVMT0NfRDMwVl8xNSwKCgoKICBCRkRfUkVMT0NfRDMwVl8xNV9QQ1JFTCwKCgoKCgog IEJGRF9SRUxPQ19EMzBWXzE1X1BDUkVMX1IsCgoKCiAgQkZEX1JFTE9DX0QzMFZfMjEsCgoKCiAg QkZEX1JFTE9DX0QzMFZfMjFfUENSRUwsCgoKCgoKICBCRkRfUkVMT0NfRDMwVl8yMV9QQ1JFTF9S LAoKCiAgQkZEX1JFTE9DX0QzMFZfMzIsCgoKICBCRkRfUkVMT0NfRDMwVl8zMl9QQ1JFTCwKCgog IEJGRF9SRUxPQ19ETFhfSEkxNl9TLAoKCiAgQkZEX1JFTE9DX0RMWF9MTzE2LAoKCiAgQkZEX1JF TE9DX0RMWF9KTVAyNiwKCgoKICBCRkRfUkVMT0NfTTMyUl8yNCwKCgogIEJGRF9SRUxPQ19NMzJS XzEwX1BDUkVMLAoKCiAgQkZEX1JFTE9DX00zMlJfMThfUENSRUwsCgoKICBCRkRfUkVMT0NfTTMy Ul8yNl9QQ1JFTCwKCgoKICBCRkRfUkVMT0NfTTMyUl9ISTE2X1VMTywKCgoKICBCRkRfUkVMT0Nf TTMyUl9ISTE2X1NMTywKCgogIEJGRF9SRUxPQ19NMzJSX0xPMTYsCgoKCiAgQkZEX1JFTE9DX00z MlJfU0RBMTYsCgoKICBCRkRfUkVMT0NfVjg1MF85X1BDUkVMLAoKCiAgQkZEX1JFTE9DX1Y4NTBf MjJfUENSRUwsCgoKICBCRkRfUkVMT0NfVjg1MF9TREFfMTZfMTZfT0ZGU0VULAoKCgogIEJGRF9S RUxPQ19WODUwX1NEQV8xNV8xNl9PRkZTRVQsCgoKICBCRkRfUkVMT0NfVjg1MF9aREFfMTZfMTZf T0ZGU0VULAoKCgogIEJGRF9SRUxPQ19WODUwX1pEQV8xNV8xNl9PRkZTRVQsCgoKCiAgQkZEX1JF TE9DX1Y4NTBfVERBXzZfOF9PRkZTRVQsCgoKCiAgQkZEX1JFTE9DX1Y4NTBfVERBXzdfOF9PRkZT RVQsCgoKICBCRkRfUkVMT0NfVjg1MF9UREFfN183X09GRlNFVCwKCgogIEJGRF9SRUxPQ19WODUw X1REQV8xNl8xNl9PRkZTRVQsCgoKCiAgQkZEX1JFTE9DX1Y4NTBfVERBXzRfNV9PRkZTRVQsCgoK ICBCRkRfUkVMT0NfVjg1MF9UREFfNF80X09GRlNFVCwKCgoKICBCRkRfUkVMT0NfVjg1MF9TREFf MTZfMTZfU1BMSVRfT0ZGU0VULAoKCgogIEJGRF9SRUxPQ19WODUwX1pEQV8xNl8xNl9TUExJVF9P RkZTRVQsCgoKICBCRkRfUkVMT0NfVjg1MF9DQUxMVF82XzdfT0ZGU0VULAoKCiAgQkZEX1JFTE9D X1Y4NTBfQ0FMTFRfMTZfMTZfT0ZGU0VULAoKCiAgQkZEX1JFTE9DX1Y4NTBfTE9OR0NBTEwsCgoK ICBCRkRfUkVMT0NfVjg1MF9MT05HSlVNUCwKCgogIEJGRF9SRUxPQ19WODUwX0FMSUdOLAoKCgog IEJGRF9SRUxPQ19NTjEwMzAwXzMyX1BDUkVMLAoKCgogIEJGRF9SRUxPQ19NTjEwMzAwXzE2X1BD UkVMLAoKCgoKICBCRkRfUkVMT0NfVElDMzBfTERQLAoKCgoKICBCRkRfUkVMT0NfVElDNTRYX1BB UlRMUzcsCgoKCgogIEJGRF9SRUxPQ19USUM1NFhfUEFSVE1TOSwKCgogIEJGRF9SRUxPQ19USUM1 NFhfMjMsCgoKCgogIEJGRF9SRUxPQ19USUM1NFhfMTZfT0ZfMjMsCgoKCgogIEJGRF9SRUxPQ19U SUM1NFhfTVM3X09GXzIzLAoKCiAgQkZEX1JFTE9DX0ZSMzBfNDgsCgoKCiAgQkZEX1JFTE9DX0ZS MzBfMjAsCgoKCiAgQkZEX1JFTE9DX0ZSMzBfNl9JTl80LAoKCgogIEJGRF9SRUxPQ19GUjMwXzhf SU5fOCwKCgoKICBCRkRfUkVMT0NfRlIzMF85X0lOXzgsCgoKCiAgQkZEX1JFTE9DX0ZSMzBfMTBf SU5fOCwKCgoKICBCRkRfUkVMT0NfRlIzMF85X1BDUkVMLAoKCgogIEJGRF9SRUxPQ19GUjMwXzEy X1BDUkVMLAoKCiAgQkZEX1JFTE9DX01DT1JFX1BDUkVMX0lNTThCWTQsCiAgQkZEX1JFTE9DX01D T1JFX1BDUkVMX0lNTTExQlkyLAogIEJGRF9SRUxPQ19NQ09SRV9QQ1JFTF9JTU00QlkyLAogIEJG RF9SRUxPQ19NQ09SRV9QQ1JFTF8zMiwKICBCRkRfUkVMT0NfTUNPUkVfUENSRUxfSlNSX0lNTTEx QlkyLAogIEJGRF9SRUxPQ19NQ09SRV9SVkEsCgoKICBCRkRfUkVMT0NfTU1JWF9HRVRBLAogIEJG RF9SRUxPQ19NTUlYX0dFVEFfMSwKICBCRkRfUkVMT0NfTU1JWF9HRVRBXzIsCiAgQkZEX1JFTE9D X01NSVhfR0VUQV8zLAoKCiAgQkZEX1JFTE9DX01NSVhfQ0JSQU5DSCwKICBCRkRfUkVMT0NfTU1J WF9DQlJBTkNIX0osCiAgQkZEX1JFTE9DX01NSVhfQ0JSQU5DSF8xLAogIEJGRF9SRUxPQ19NTUlY X0NCUkFOQ0hfMiwKICBCRkRfUkVMT0NfTU1JWF9DQlJBTkNIXzMsCgoKICBCRkRfUkVMT0NfTU1J WF9QVVNISiwKICBCRkRfUkVMT0NfTU1JWF9QVVNISl8xLAogIEJGRF9SRUxPQ19NTUlYX1BVU0hK XzIsCiAgQkZEX1JFTE9DX01NSVhfUFVTSEpfMywKCgogIEJGRF9SRUxPQ19NTUlYX0pNUCwKICBC RkRfUkVMT0NfTU1JWF9KTVBfMSwKICBCRkRfUkVMT0NfTU1JWF9KTVBfMiwKICBCRkRfUkVMT0Nf TU1JWF9KTVBfMywKCgoKICBCRkRfUkVMT0NfTU1JWF9BRERSMTksCgoKICBCRkRfUkVMT0NfTU1J WF9BRERSMjcsCgoKCiAgQkZEX1JFTE9DX01NSVhfUkVHX09SX0JZVEUsCgoKCiAgQkZEX1JFTE9D X01NSVhfUkVHLAoKCgogIEJGRF9SRUxPQ19NTUlYX0JBU0VfUExVU19PRkZTRVQsCgoKCiAgQkZE X1JFTE9DX01NSVhfTE9DQUwsCgoKCiAgQkZEX1JFTE9DX0FWUl83X1BDUkVMLAoKCgogIEJGRF9S RUxPQ19BVlJfMTNfUENSRUwsCgoKCiAgQkZEX1JFTE9DX0FWUl8xNl9QTSwKCgoKICBCRkRfUkVM T0NfQVZSX0xPOF9MREksCgoKCiAgQkZEX1JFTE9DX0FWUl9ISThfTERJLAoKCgogIEJGRF9SRUxP Q19BVlJfSEg4X0xESSwKCgoKICBCRkRfUkVMT0NfQVZSX0xPOF9MRElfTkVHLAoKCgoKICBCRkRf UkVMT0NfQVZSX0hJOF9MRElfTkVHLAoKCgoKICBCRkRfUkVMT0NfQVZSX0hIOF9MRElfTkVHLAoK CgogIEJGRF9SRUxPQ19BVlJfTE84X0xESV9QTSwKCgoKICBCRkRfUkVMT0NfQVZSX0hJOF9MRElf UE0sCgoKCiAgQkZEX1JFTE9DX0FWUl9ISDhfTERJX1BNLAoKCgogIEJGRF9SRUxPQ19BVlJfTE84 X0xESV9QTV9ORUcsCgoKCgogIEJGRF9SRUxPQ19BVlJfSEk4X0xESV9QTV9ORUcsCgoKCgogIEJG RF9SRUxPQ19BVlJfSEg4X0xESV9QTV9ORUcsCgoKCiAgQkZEX1JFTE9DX0FWUl9DQUxMLAoKCiAg QkZEX1JFTE9DXzM5MF8xMiwKCgogIEJGRF9SRUxPQ18zOTBfR09UMTIsCgoKICBCRkRfUkVMT0Nf MzkwX1BMVDMyLAoKCiAgQkZEX1JFTE9DXzM5MF9DT1BZLAoKCiAgQkZEX1JFTE9DXzM5MF9HTE9C X0RBVCwKCgogIEJGRF9SRUxPQ18zOTBfSk1QX1NMT1QsCgoKICBCRkRfUkVMT0NfMzkwX1JFTEFU SVZFLAoKCiAgQkZEX1JFTE9DXzM5MF9HT1RQQywKCgogIEJGRF9SRUxPQ18zOTBfR09UMTYsCgoK ICBCRkRfUkVMT0NfMzkwX1BDMTZEQkwsCgoKICBCRkRfUkVMT0NfMzkwX1BMVDE2REJMLAoKCiAg QkZEX1JFTE9DXzM5MF9QQzMyREJMLAoKCiAgQkZEX1JFTE9DXzM5MF9QTFQzMkRCTCwKCgogIEJG RF9SRUxPQ18zOTBfR09UUENEQkwsCgoKICBCRkRfUkVMT0NfMzkwX0dPVDY0LAoKCiAgQkZEX1JF TE9DXzM5MF9QTFQ2NCwKCgogIEJGRF9SRUxPQ18zOTBfR09URU5ULAoKCiAgQkZEX1JFTE9DXzM5 MF9HT1RPRkY2NCwKCgogIEJGRF9SRUxPQ18zOTBfR09UUExUMTIsCgoKICBCRkRfUkVMT0NfMzkw X0dPVFBMVDE2LAoKCiAgQkZEX1JFTE9DXzM5MF9HT1RQTFQzMiwKCgogIEJGRF9SRUxPQ18zOTBf R09UUExUNjQsCgoKICBCRkRfUkVMT0NfMzkwX0dPVFBMVEVOVCwKCgogIEJGRF9SRUxPQ18zOTBf UExUT0ZGMTYsCgoKICBCRkRfUkVMT0NfMzkwX1BMVE9GRjMyLAoKCiAgQkZEX1JFTE9DXzM5MF9Q TFRPRkY2NCwKCgogIEJGRF9SRUxPQ18zOTBfVExTX0xPQUQsCiAgQkZEX1JFTE9DXzM5MF9UTFNf R0RDQUxMLAogIEJGRF9SRUxPQ18zOTBfVExTX0xEQ0FMTCwKICBCRkRfUkVMT0NfMzkwX1RMU19H RDMyLAogIEJGRF9SRUxPQ18zOTBfVExTX0dENjQsCiAgQkZEX1JFTE9DXzM5MF9UTFNfR09USUUx MiwKICBCRkRfUkVMT0NfMzkwX1RMU19HT1RJRTMyLAogIEJGRF9SRUxPQ18zOTBfVExTX0dPVElF NjQsCiAgQkZEX1JFTE9DXzM5MF9UTFNfTERNMzIsCiAgQkZEX1JFTE9DXzM5MF9UTFNfTERNNjQs CiAgQkZEX1JFTE9DXzM5MF9UTFNfSUUzMiwKICBCRkRfUkVMT0NfMzkwX1RMU19JRTY0LAogIEJG RF9SRUxPQ18zOTBfVExTX0lFRU5ULAogIEJGRF9SRUxPQ18zOTBfVExTX0xFMzIsCiAgQkZEX1JF TE9DXzM5MF9UTFNfTEU2NCwKICBCRkRfUkVMT0NfMzkwX1RMU19MRE8zMiwKICBCRkRfUkVMT0Nf MzkwX1RMU19MRE82NCwKICBCRkRfUkVMT0NfMzkwX1RMU19EVFBNT0QsCiAgQkZEX1JFTE9DXzM5 MF9UTFNfRFRQT0ZGLAogIEJGRF9SRUxPQ18zOTBfVExTX1RQT0ZGLAoKCiAgQkZEX1JFTE9DX0lQ MktfRlI5LAoKCiAgQkZEX1JFTE9DX0lQMktfQkFOSywKCgogIEJGRF9SRUxPQ19JUDJLX0FERFIx NkNKUCwKCgogIEJGRF9SRUxPQ19JUDJLX1BBR0UzLAoKCiAgQkZEX1JFTE9DX0lQMktfTE84REFU QSwKICBCRkRfUkVMT0NfSVAyS19ISThEQVRBLAogIEJGRF9SRUxPQ19JUDJLX0VYOERBVEEsCgoK ICBCRkRfUkVMT0NfSVAyS19MTzhJTlNOLAogIEJGRF9SRUxPQ19JUDJLX0hJOElOU04sCgoKICBC RkRfUkVMT0NfSVAyS19QQ19TS0lQLAoKCiAgQkZEX1JFTE9DX0lQMktfVEVYVCwKCgogIEJGRF9S RUxPQ19JUDJLX0ZSX09GRlNFVCwKCgogIEJGRF9SRUxPQ19WUEU0S01BVEhfREFUQSwKICBCRkRf UkVMT0NfVlBFNEtNQVRIX0lOU04sCiMgMzE5OCAiLi4vYmZkL2JmZC5oIgogIEJGRF9SRUxPQ19W VEFCTEVfSU5IRVJJVCwKICBCRkRfUkVMT0NfVlRBQkxFX0VOVFJZLAoKCiAgQkZEX1JFTE9DX0lB NjRfSU1NMTQsCiAgQkZEX1JFTE9DX0lBNjRfSU1NMjIsCiAgQkZEX1JFTE9DX0lBNjRfSU1NNjQs CiAgQkZEX1JFTE9DX0lBNjRfRElSMzJNU0IsCiAgQkZEX1JFTE9DX0lBNjRfRElSMzJMU0IsCiAg QkZEX1JFTE9DX0lBNjRfRElSNjRNU0IsCiAgQkZEX1JFTE9DX0lBNjRfRElSNjRMU0IsCiAgQkZE X1JFTE9DX0lBNjRfR1BSRUwyMiwKICBCRkRfUkVMT0NfSUE2NF9HUFJFTDY0SSwKICBCRkRfUkVM T0NfSUE2NF9HUFJFTDMyTVNCLAogIEJGRF9SRUxPQ19JQTY0X0dQUkVMMzJMU0IsCiAgQkZEX1JF TE9DX0lBNjRfR1BSRUw2NE1TQiwKICBCRkRfUkVMT0NfSUE2NF9HUFJFTDY0TFNCLAogIEJGRF9S RUxPQ19JQTY0X0xUT0ZGMjIsCiAgQkZEX1JFTE9DX0lBNjRfTFRPRkY2NEksCiAgQkZEX1JFTE9D X0lBNjRfUExUT0ZGMjIsCiAgQkZEX1JFTE9DX0lBNjRfUExUT0ZGNjRJLAogIEJGRF9SRUxPQ19J QTY0X1BMVE9GRjY0TVNCLAogIEJGRF9SRUxPQ19JQTY0X1BMVE9GRjY0TFNCLAogIEJGRF9SRUxP Q19JQTY0X0ZQVFI2NEksCiAgQkZEX1JFTE9DX0lBNjRfRlBUUjMyTVNCLAogIEJGRF9SRUxPQ19J QTY0X0ZQVFIzMkxTQiwKICBCRkRfUkVMT0NfSUE2NF9GUFRSNjRNU0IsCiAgQkZEX1JFTE9DX0lB NjRfRlBUUjY0TFNCLAogIEJGRF9SRUxPQ19JQTY0X1BDUkVMMjFCLAogIEJGRF9SRUxPQ19JQTY0 X1BDUkVMMjFCSSwKICBCRkRfUkVMT0NfSUE2NF9QQ1JFTDIxTSwKICBCRkRfUkVMT0NfSUE2NF9Q Q1JFTDIxRiwKICBCRkRfUkVMT0NfSUE2NF9QQ1JFTDIyLAogIEJGRF9SRUxPQ19JQTY0X1BDUkVM NjBCLAogIEJGRF9SRUxPQ19JQTY0X1BDUkVMNjRJLAogIEJGRF9SRUxPQ19JQTY0X1BDUkVMMzJN U0IsCiAgQkZEX1JFTE9DX0lBNjRfUENSRUwzMkxTQiwKICBCRkRfUkVMT0NfSUE2NF9QQ1JFTDY0 TVNCLAogIEJGRF9SRUxPQ19JQTY0X1BDUkVMNjRMU0IsCiAgQkZEX1JFTE9DX0lBNjRfTFRPRkZf RlBUUjIyLAogIEJGRF9SRUxPQ19JQTY0X0xUT0ZGX0ZQVFI2NEksCiAgQkZEX1JFTE9DX0lBNjRf TFRPRkZfRlBUUjMyTVNCLAogIEJGRF9SRUxPQ19JQTY0X0xUT0ZGX0ZQVFIzMkxTQiwKICBCRkRf UkVMT0NfSUE2NF9MVE9GRl9GUFRSNjRNU0IsCiAgQkZEX1JFTE9DX0lBNjRfTFRPRkZfRlBUUjY0 TFNCLAogIEJGRF9SRUxPQ19JQTY0X1NFR1JFTDMyTVNCLAogIEJGRF9SRUxPQ19JQTY0X1NFR1JF TDMyTFNCLAogIEJGRF9SRUxPQ19JQTY0X1NFR1JFTDY0TVNCLAogIEJGRF9SRUxPQ19JQTY0X1NF R1JFTDY0TFNCLAogIEJGRF9SRUxPQ19JQTY0X1NFQ1JFTDMyTVNCLAogIEJGRF9SRUxPQ19JQTY0 X1NFQ1JFTDMyTFNCLAogIEJGRF9SRUxPQ19JQTY0X1NFQ1JFTDY0TVNCLAogIEJGRF9SRUxPQ19J QTY0X1NFQ1JFTDY0TFNCLAogIEJGRF9SRUxPQ19JQTY0X1JFTDMyTVNCLAogIEJGRF9SRUxPQ19J QTY0X1JFTDMyTFNCLAogIEJGRF9SRUxPQ19JQTY0X1JFTDY0TVNCLAogIEJGRF9SRUxPQ19JQTY0 X1JFTDY0TFNCLAogIEJGRF9SRUxPQ19JQTY0X0xUVjMyTVNCLAogIEJGRF9SRUxPQ19JQTY0X0xU VjMyTFNCLAogIEJGRF9SRUxPQ19JQTY0X0xUVjY0TVNCLAogIEJGRF9SRUxPQ19JQTY0X0xUVjY0 TFNCLAogIEJGRF9SRUxPQ19JQTY0X0lQTFRNU0IsCiAgQkZEX1JFTE9DX0lBNjRfSVBMVExTQiwK ICBCRkRfUkVMT0NfSUE2NF9DT1BZLAogIEJGRF9SRUxPQ19JQTY0X0xUT0ZGMjJYLAogIEJGRF9S RUxPQ19JQTY0X0xEWE1PViwKICBCRkRfUkVMT0NfSUE2NF9UUFJFTDE0LAogIEJGRF9SRUxPQ19J QTY0X1RQUkVMMjIsCiAgQkZEX1JFTE9DX0lBNjRfVFBSRUw2NEksCiAgQkZEX1JFTE9DX0lBNjRf VFBSRUw2NE1TQiwKICBCRkRfUkVMT0NfSUE2NF9UUFJFTDY0TFNCLAogIEJGRF9SRUxPQ19JQTY0 X0xUT0ZGX1RQUkVMMjIsCiAgQkZEX1JFTE9DX0lBNjRfRFRQTU9ENjRNU0IsCiAgQkZEX1JFTE9D X0lBNjRfRFRQTU9ENjRMU0IsCiAgQkZEX1JFTE9DX0lBNjRfTFRPRkZfRFRQTU9EMjIsCiAgQkZE X1JFTE9DX0lBNjRfRFRQUkVMMTQsCiAgQkZEX1JFTE9DX0lBNjRfRFRQUkVMMjIsCiAgQkZEX1JF TE9DX0lBNjRfRFRQUkVMNjRJLAogIEJGRF9SRUxPQ19JQTY0X0RUUFJFTDMyTVNCLAogIEJGRF9S RUxPQ19JQTY0X0RUUFJFTDMyTFNCLAogIEJGRF9SRUxPQ19JQTY0X0RUUFJFTDY0TVNCLAogIEJG RF9SRUxPQ19JQTY0X0RUUFJFTDY0TFNCLAogIEJGRF9SRUxPQ19JQTY0X0xUT0ZGX0RUUFJFTDIy LAoKCgogIEJGRF9SRUxPQ19NNjhIQzExX0hJOCwKCgoKICBCRkRfUkVMT0NfTTY4SEMxMV9MTzgs CgoKCiAgQkZEX1JFTE9DX002OEhDMTFfM0IsCgoKCgoKCiAgQkZEX1JFTE9DX002OEhDMTFfUkxf SlVNUCwKCgoKCgogIEJGRF9SRUxPQ19NNjhIQzExX1JMX0dST1VQLAoKCgoKCiAgQkZEX1JFTE9D X002OEhDMTFfTE8xNiwKCgoKCgogIEJGRF9SRUxPQ19NNjhIQzExX1BBR0UsCgoKCgoKICBCRkRf UkVMT0NfTTY4SEMxMV8yNCwKCgoKICBCRkRfUkVMT0NfQ1JJU19CRElTUDgsCiAgQkZEX1JFTE9D X0NSSVNfVU5TSUdORURfNSwKICBCRkRfUkVMT0NfQ1JJU19TSUdORURfNiwKICBCRkRfUkVMT0Nf Q1JJU19VTlNJR05FRF82LAogIEJGRF9SRUxPQ19DUklTX1VOU0lHTkVEXzQsCgoKICBCRkRfUkVM T0NfQ1JJU19DT1BZLAogIEJGRF9SRUxPQ19DUklTX0dMT0JfREFULAogIEJGRF9SRUxPQ19DUklT X0pVTVBfU0xPVCwKICBCRkRfUkVMT0NfQ1JJU19SRUxBVElWRSwKCgogIEJGRF9SRUxPQ19DUklT XzMyX0dPVCwKCgogIEJGRF9SRUxPQ19DUklTXzE2X0dPVCwKCgogIEJGRF9SRUxPQ19DUklTXzMy X0dPVFBMVCwKCgogIEJGRF9SRUxPQ19DUklTXzE2X0dPVFBMVCwKCgogIEJGRF9SRUxPQ19DUklT XzMyX0dPVFJFTCwKCgogIEJGRF9SRUxPQ19DUklTXzMyX1BMVF9HT1RSRUwsCgoKICBCRkRfUkVM T0NfQ1JJU18zMl9QTFRfUENSRUwsCgoKICBCRkRfUkVMT0NfODYwX0NPUFksCiAgQkZEX1JFTE9D Xzg2MF9HTE9CX0RBVCwKICBCRkRfUkVMT0NfODYwX0pVTVBfU0xPVCwKICBCRkRfUkVMT0NfODYw X1JFTEFUSVZFLAogIEJGRF9SRUxPQ184NjBfUEMyNiwKICBCRkRfUkVMT0NfODYwX1BMVDI2LAog IEJGRF9SRUxPQ184NjBfUEMxNiwKICBCRkRfUkVMT0NfODYwX0xPVzAsCiAgQkZEX1JFTE9DXzg2 MF9TUExJVDAsCiAgQkZEX1JFTE9DXzg2MF9MT1cxLAogIEJGRF9SRUxPQ184NjBfU1BMSVQxLAog IEJGRF9SRUxPQ184NjBfTE9XMiwKICBCRkRfUkVMT0NfODYwX1NQTElUMiwKICBCRkRfUkVMT0Nf ODYwX0xPVzMsCiAgQkZEX1JFTE9DXzg2MF9MT0dPVDAsCiAgQkZEX1JFTE9DXzg2MF9TUEdPVDAs CiAgQkZEX1JFTE9DXzg2MF9MT0dPVDEsCiAgQkZEX1JFTE9DXzg2MF9TUEdPVDEsCiAgQkZEX1JF TE9DXzg2MF9MT0dPVE9GRjAsCiAgQkZEX1JFTE9DXzg2MF9TUEdPVE9GRjAsCiAgQkZEX1JFTE9D Xzg2MF9MT0dPVE9GRjEsCiAgQkZEX1JFTE9DXzg2MF9TUEdPVE9GRjEsCiAgQkZEX1JFTE9DXzg2 MF9MT0dPVE9GRjIsCiAgQkZEX1JFTE9DXzg2MF9MT0dPVE9GRjMsCiAgQkZEX1JFTE9DXzg2MF9M T1BDLAogIEJGRF9SRUxPQ184NjBfSElHSEFESiwKICBCRkRfUkVMT0NfODYwX0hBR09ULAogIEJG RF9SRUxPQ184NjBfSEFHT1RPRkYsCiAgQkZEX1JFTE9DXzg2MF9IQVBDLAogIEJGRF9SRUxPQ184 NjBfSElHSCwKICBCRkRfUkVMT0NfODYwX0hJR09ULAogIEJGRF9SRUxPQ184NjBfSElHT1RPRkYs CgoKICBCRkRfUkVMT0NfT1BFTlJJU0NfQUJTXzI2LAogIEJGRF9SRUxPQ19PUEVOUklTQ19SRUxf MjYsCgoKICBCRkRfUkVMT0NfSDhfRElSMTZBOCwKICBCRkRfUkVMT0NfSDhfRElSMTZSOCwKICBC RkRfUkVMT0NfSDhfRElSMjRBOCwKICBCRkRfUkVMT0NfSDhfRElSMjRSOCwKICBCRkRfUkVMT0Nf SDhfRElSMzJBMTYsCgoKICBCRkRfUkVMT0NfWFNUT1JNWTE2X1JFTF8xMiwKICBCRkRfUkVMT0Nf WFNUT1JNWTE2XzEyLAogIEJGRF9SRUxPQ19YU1RPUk1ZMTZfMjQsCiAgQkZEX1JFTE9DX1hTVE9S TVkxNl9GUFRSMTYsCgoKICBCRkRfUkVMT0NfVkFYX0dMT0JfREFULAogIEJGRF9SRUxPQ19WQVhf Sk1QX1NMT1QsCiAgQkZEX1JFTE9DX1ZBWF9SRUxBVElWRSwKCgogIEJGRF9SRUxPQ19NU1A0MzBf MTBfUENSRUwsCiAgQkZEX1JFTE9DX01TUDQzMF8xNl9QQ1JFTCwKICBCRkRfUkVMT0NfTVNQNDMw XzE2LAogIEJGRF9SRUxPQ19NU1A0MzBfMTZfUENSRUxfQllURSwKICBCRkRfUkVMT0NfTVNQNDMw XzE2X0JZVEUsCgoKICBCRkRfUkVMT0NfSVEyMDAwX09GRlNFVF8xNiwKICBCRkRfUkVMT0NfSVEy MDAwX09GRlNFVF8yMSwKICBCRkRfUkVMT0NfSVEyMDAwX1VISTE2LAogIEJGRF9SRUxPQ19VTlVT RUQgfTsKdHlwZWRlZiBlbnVtIGJmZF9yZWxvY19jb2RlX3JlYWwgYmZkX3JlbG9jX2NvZGVfcmVh bF90eXBlOwpyZWxvY19ob3d0b190eXBlICoKYmZkX3JlbG9jX3R5cGVfbG9va3VwIChiZmQgKmFi ZmQsIGJmZF9yZWxvY19jb2RlX3JlYWxfdHlwZSBjb2RlKTsKCmNvbnN0IGNoYXIgKgpiZmRfZ2V0 X3JlbG9jX2NvZGVfbmFtZSAoYmZkX3JlbG9jX2NvZGVfcmVhbF90eXBlIGNvZGUpOwoKCgp0eXBl ZGVmIHN0cnVjdCBzeW1ib2xfY2FjaGVfZW50cnkKewojIDM0NDggIi4uL2JmZC9iZmQuaCIKICBz dHJ1Y3QgYmZkICp0aGVfYmZkOwoKCgogIGNvbnN0IGNoYXIgKm5hbWU7CgoKCgogIHN5bXZhbHVl IHZhbHVlOwojIDM1NDQgIi4uL2JmZC9iZmQuaCIKICBmbGFnd29yZCBmbGFnczsKCgoKCiAgc3Ry dWN0IHNlYyAqc2VjdGlvbjsKCgogIHVuaW9uCiAgICB7CiAgICAgIHZvaWQgKiBwOwogICAgICBi ZmRfdm1hIGk7CiAgICB9CiAgdWRhdGE7Cn0KYXN5bWJvbDsKCgoKCmJmZF9ib29sZWFuCmJmZF9p c19sb2NhbF9sYWJlbCAoYmZkICphYmZkLCBhc3ltYm9sICpzeW0pOwoKYmZkX2Jvb2xlYW4KYmZk X2lzX2xvY2FsX2xhYmVsX25hbWUgKGJmZCAqYWJmZCwgY29uc3QgY2hhciAqbmFtZSk7CiMgMzU3 NyAiLi4vYmZkL2JmZC5oIgpiZmRfYm9vbGVhbgpiZmRfc2V0X3N5bXRhYiAoYmZkICphYmZkLCBh c3ltYm9sICoqbG9jYXRpb24sIHVuc2lnbmVkIGludCBjb3VudCk7Cgp2b2lkCmJmZF9wcmludF9z eW1ib2xfdmFuZGYgKGJmZCAqYWJmZCwgdm9pZCAqIGZpbGUsIGFzeW1ib2wgKnN5bWJvbCk7CgoK Cgphc3ltYm9sICoKX2JmZF9nZW5lcmljX21ha2VfZW1wdHlfc3ltYm9sIChiZmQgKik7CgoKCgpp bnQKYmZkX2RlY29kZV9zeW1jbGFzcyAoYXN5bWJvbCAqc3ltYm9sKTsKCmJmZF9ib29sZWFuCmJm ZF9pc191bmRlZmluZWRfc3ltY2xhc3MgKGludCBzeW1jbGFzcyk7Cgp2b2lkCmJmZF9zeW1ib2xf aW5mbyAoYXN5bWJvbCAqc3ltYm9sLCBzeW1ib2xfaW5mbyAqcmV0KTsKCmJmZF9ib29sZWFuCmJm ZF9jb3B5X3ByaXZhdGVfc3ltYm9sX2RhdGEgKGJmZCAqaWJmZCwgYXN5bWJvbCAqaXN5bSwgYmZk ICpvYmZkLCBhc3ltYm9sICpvc3ltKTsKCgoKCgoKc3RydWN0IGJmZAp7CgogIHVuc2lnbmVkIGlu dCBpZDsKCgogIGNvbnN0IGNoYXIgKmZpbGVuYW1lOwoKCiAgY29uc3Qgc3RydWN0IGJmZF90YXJn ZXQgKnh2ZWM7CiMgMzYyNyAiLi4vYmZkL2JmZC5oIgogIHZvaWQgKiBpb3N0cmVhbTsKCgoKICBi ZmRfYm9vbGVhbiBjYWNoZWFibGU7CgoKCgogIGJmZF9ib29sZWFuIHRhcmdldF9kZWZhdWx0ZWQ7 CgoKCiAgc3RydWN0IGJmZCAqbHJ1X3ByZXYsICpscnVfbmV4dDsKCgoKICB1ZmlsZV9wdHIgd2hl cmU7CgoKICBiZmRfYm9vbGVhbiBvcGVuZWRfb25jZTsKCgoKICBiZmRfYm9vbGVhbiBtdGltZV9z ZXQ7CgoKICBsb25nIG10aW1lOwoKCiAgaW50IGlmZDsKCgogIGJmZF9mb3JtYXQgZm9ybWF0OwoK CiAgZW51bSBiZmRfZGlyZWN0aW9uCiAgICB7CiAgICAgIG5vX2RpcmVjdGlvbiA9IDAsCiAgICAg IHJlYWRfZGlyZWN0aW9uID0gMSwKICAgICAgd3JpdGVfZGlyZWN0aW9uID0gMiwKICAgICAgYm90 aF9kaXJlY3Rpb24gPSAzCiAgICB9CiAgZGlyZWN0aW9uOwoKCiAgZmxhZ3dvcmQgZmxhZ3M7CgoK CgogIHVmaWxlX3B0ciBvcmlnaW47CgoKCiAgYmZkX2Jvb2xlYW4gb3V0cHV0X2hhc19iZWd1bjsK CgogIHN0cnVjdCBiZmRfaGFzaF90YWJsZSBzZWN0aW9uX2h0YWI7CgoKICBzdHJ1Y3Qgc2VjICpz ZWN0aW9uczsKCgogIHN0cnVjdCBzZWMgKipzZWN0aW9uX3RhaWw7CgoKICB1bnNpZ25lZCBpbnQg c2VjdGlvbl9jb3VudDsKCgoKICBiZmRfdm1hIHN0YXJ0X2FkZHJlc3M7CgoKICB1bnNpZ25lZCBp bnQgc3ltY291bnQ7CgoKICBzdHJ1Y3Qgc3ltYm9sX2NhY2hlX2VudHJ5ICoqb3V0c3ltYm9sczsK CgogIHVuc2lnbmVkIGludCBkeW5zeW1jb3VudDsKCgogIGNvbnN0IHN0cnVjdCBiZmRfYXJjaF9p bmZvICphcmNoX2luZm87CgoKICB2b2lkICogYXJlbHRfZGF0YTsKICBzdHJ1Y3QgYmZkICpteV9h cmNoaXZlOwogIHN0cnVjdCBiZmQgKm5leHQ7CiAgc3RydWN0IGJmZCAqYXJjaGl2ZV9oZWFkOwog IGJmZF9ib29sZWFuIGhhc19hcm1hcDsKCgogIHN0cnVjdCBiZmQgKmxpbmtfbmV4dDsKCgoKICBp bnQgYXJjaGl2ZV9wYXNzOwoKCiAgdW5pb24KICAgIHsKICAgICAgc3RydWN0IGFvdXRfZGF0YV9z dHJ1Y3QgKmFvdXRfZGF0YTsKICAgICAgc3RydWN0IGFydGRhdGEgKmFvdXRfYXJfZGF0YTsKICAg ICAgc3RydWN0IF9vYXN5c19kYXRhICpvYXN5c19vYmpfZGF0YTsKICAgICAgc3RydWN0IF9vYXN5 c19hcl9kYXRhICpvYXN5c19hcl9kYXRhOwogICAgICBzdHJ1Y3QgY29mZl90ZGF0YSAqY29mZl9v YmpfZGF0YTsKICAgICAgc3RydWN0IHBlX3RkYXRhICpwZV9vYmpfZGF0YTsKICAgICAgc3RydWN0 IHhjb2ZmX3RkYXRhICp4Y29mZl9vYmpfZGF0YTsKICAgICAgc3RydWN0IGVjb2ZmX3RkYXRhICpl Y29mZl9vYmpfZGF0YTsKICAgICAgc3RydWN0IGllZWVfZGF0YV9zdHJ1Y3QgKmllZWVfZGF0YTsK ICAgICAgc3RydWN0IGllZWVfYXJfZGF0YV9zdHJ1Y3QgKmllZWVfYXJfZGF0YTsKICAgICAgc3Ry dWN0IHNyZWNfZGF0YV9zdHJ1Y3QgKnNyZWNfZGF0YTsKICAgICAgc3RydWN0IGloZXhfZGF0YV9z dHJ1Y3QgKmloZXhfZGF0YTsKICAgICAgc3RydWN0IHRla2hleF9kYXRhX3N0cnVjdCAqdGVraGV4 X2RhdGE7CiAgICAgIHN0cnVjdCBlbGZfb2JqX3RkYXRhICplbGZfb2JqX2RhdGE7CiAgICAgIHN0 cnVjdCBubG1fb2JqX3RkYXRhICpubG1fb2JqX2RhdGE7CiAgICAgIHN0cnVjdCBib3V0X2RhdGFf c3RydWN0ICpib3V0X2RhdGE7CiAgICAgIHN0cnVjdCBtbW9fZGF0YV9zdHJ1Y3QgKm1tb19kYXRh OwogICAgICBzdHJ1Y3Qgc3VuX2NvcmVfc3RydWN0ICpzdW5fY29yZV9kYXRhOwogICAgICBzdHJ1 Y3Qgc2NvNV9jb3JlX3N0cnVjdCAqc2NvNV9jb3JlX2RhdGE7CiAgICAgIHN0cnVjdCB0cmFkX2Nv cmVfc3RydWN0ICp0cmFkX2NvcmVfZGF0YTsKICAgICAgc3RydWN0IHNvbV9kYXRhX3N0cnVjdCAq c29tX2RhdGE7CiAgICAgIHN0cnVjdCBocHV4X2NvcmVfc3RydWN0ICpocHV4X2NvcmVfZGF0YTsK ICAgICAgc3RydWN0IGhwcGFic2RfY29yZV9zdHJ1Y3QgKmhwcGFic2RfY29yZV9kYXRhOwogICAg ICBzdHJ1Y3Qgc2dpX2NvcmVfc3RydWN0ICpzZ2lfY29yZV9kYXRhOwogICAgICBzdHJ1Y3QgbHlu eF9jb3JlX3N0cnVjdCAqbHlueF9jb3JlX2RhdGE7CiAgICAgIHN0cnVjdCBvc2ZfY29yZV9zdHJ1 Y3QgKm9zZl9jb3JlX2RhdGE7CiAgICAgIHN0cnVjdCBjaXNjb19jb3JlX3N0cnVjdCAqY2lzY29f Y29yZV9kYXRhOwogICAgICBzdHJ1Y3QgdmVyc2Fkb3NfZGF0YV9zdHJ1Y3QgKnZlcnNhZG9zX2Rh dGE7CiAgICAgIHN0cnVjdCBuZXRic2RfY29yZV9zdHJ1Y3QgKm5ldGJzZF9jb3JlX2RhdGE7CiAg ICAgIHN0cnVjdCBtYWNoX29fZGF0YV9zdHJ1Y3QgKm1hY2hfb19kYXRhOwogICAgICBzdHJ1Y3Qg bWFjaF9vX2ZhdF9kYXRhX3N0cnVjdCAqbWFjaF9vX2ZhdF9kYXRhOwogICAgICBzdHJ1Y3QgYmZk X3BlZl9kYXRhX3N0cnVjdCAqcGVmX2RhdGE7CiAgICAgIHN0cnVjdCBiZmRfcGVmX3hsaWJfZGF0 YV9zdHJ1Y3QgKnBlZl94bGliX2RhdGE7CiAgICAgIHN0cnVjdCBiZmRfc3ltX2RhdGFfc3RydWN0 ICpzeW1fZGF0YTsKICAgICAgdm9pZCAqIGFueTsKICAgIH0KICB0ZGF0YTsKCgogIHZvaWQgKiB1 c3JkYXRhOwoKCgoKICB2b2lkICogbWVtb3J5Owp9OwoKdHlwZWRlZiBlbnVtIGJmZF9lcnJvcgp7 CiAgYmZkX2Vycm9yX25vX2Vycm9yID0gMCwKICBiZmRfZXJyb3Jfc3lzdGVtX2NhbGwsCiAgYmZk X2Vycm9yX2ludmFsaWRfdGFyZ2V0LAogIGJmZF9lcnJvcl93cm9uZ19mb3JtYXQsCiAgYmZkX2Vy cm9yX3dyb25nX29iamVjdF9mb3JtYXQsCiAgYmZkX2Vycm9yX2ludmFsaWRfb3BlcmF0aW9uLAog IGJmZF9lcnJvcl9ub19tZW1vcnksCiAgYmZkX2Vycm9yX25vX3N5bWJvbHMsCiAgYmZkX2Vycm9y X25vX2FybWFwLAogIGJmZF9lcnJvcl9ub19tb3JlX2FyY2hpdmVkX2ZpbGVzLAogIGJmZF9lcnJv cl9tYWxmb3JtZWRfYXJjaGl2ZSwKICBiZmRfZXJyb3JfZmlsZV9ub3RfcmVjb2duaXplZCwKICBi ZmRfZXJyb3JfZmlsZV9hbWJpZ3VvdXNseV9yZWNvZ25pemVkLAogIGJmZF9lcnJvcl9ub19jb250 ZW50cywKICBiZmRfZXJyb3Jfbm9ucmVwcmVzZW50YWJsZV9zZWN0aW9uLAogIGJmZF9lcnJvcl9u b19kZWJ1Z19zZWN0aW9uLAogIGJmZF9lcnJvcl9iYWRfdmFsdWUsCiAgYmZkX2Vycm9yX2ZpbGVf dHJ1bmNhdGVkLAogIGJmZF9lcnJvcl9maWxlX3Rvb19iaWcsCiAgYmZkX2Vycm9yX2ludmFsaWRf ZXJyb3JfY29kZQp9CmJmZF9lcnJvcl90eXBlOwoKYmZkX2Vycm9yX3R5cGUKYmZkX2dldF9lcnJv ciAodm9pZCk7Cgp2b2lkCmJmZF9zZXRfZXJyb3IgKGJmZF9lcnJvcl90eXBlIGVycm9yX3RhZyk7 Cgpjb25zdCBjaGFyICoKYmZkX2Vycm1zZyAoYmZkX2Vycm9yX3R5cGUgZXJyb3JfdGFnKTsKCnZv aWQKYmZkX3BlcnJvciAoY29uc3QgY2hhciAqbWVzc2FnZSk7Cgp0eXBlZGVmIHZvaWQgKCpiZmRf ZXJyb3JfaGFuZGxlcl90eXBlKSAoY29uc3QgY2hhciAqLCAuLi4pOwoKYmZkX2Vycm9yX2hhbmRs ZXJfdHlwZQpiZmRfc2V0X2Vycm9yX2hhbmRsZXIgKGJmZF9lcnJvcl9oYW5kbGVyX3R5cGUpOwoK dm9pZApiZmRfc2V0X2Vycm9yX3Byb2dyYW1fbmFtZSAoY29uc3QgY2hhciAqKTsKCmJmZF9lcnJv cl9oYW5kbGVyX3R5cGUKYmZkX2dldF9lcnJvcl9oYW5kbGVyICh2b2lkKTsKCmNvbnN0IGNoYXIg KgpiZmRfYXJjaGl2ZV9maWxlbmFtZSAoYmZkICopOwoKbG9uZwpiZmRfZ2V0X3JlbG9jX3VwcGVy X2JvdW5kIChiZmQgKmFiZmQsIGFzZWN0aW9uICpzZWN0KTsKCmxvbmcKYmZkX2Nhbm9uaWNhbGl6 ZV9yZWxvYyAoYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjLCBhcmVsZW50ICoqbG9jLCBhc3ltYm9s ICoqc3ltcyk7CgoKCgp2b2lkCmJmZF9zZXRfcmVsb2MgKGJmZCAqYWJmZCwgYXNlY3Rpb24gKnNl YywgYXJlbGVudCAqKnJlbCwgdW5zaWduZWQgaW50IGNvdW50KTsKCmJmZF9ib29sZWFuCmJmZF9z ZXRfZmlsZV9mbGFncyAoYmZkICphYmZkLCBmbGFnd29yZCBmbGFncyk7CgppbnQKYmZkX2dldF9h cmNoX3NpemUgKGJmZCAqYWJmZCk7CgppbnQKYmZkX2dldF9zaWduX2V4dGVuZF92bWEgKGJmZCAq YWJmZCk7CgpiZmRfYm9vbGVhbgpiZmRfc2V0X3N0YXJ0X2FkZHJlc3MgKGJmZCAqYWJmZCwgYmZk X3ZtYSB2bWEpOwoKdW5zaWduZWQgaW50CmJmZF9nZXRfZ3Bfc2l6ZSAoYmZkICphYmZkKTsKCnZv aWQKYmZkX3NldF9ncF9zaXplIChiZmQgKmFiZmQsIHVuc2lnbmVkIGludCBpKTsKCmJmZF92bWEK YmZkX3NjYW5fdm1hIChjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKiplbmQsIGludCBi YXNlKTsKCmJmZF9ib29sZWFuCmJmZF9jb3B5X3ByaXZhdGVfYmZkX2RhdGEgKGJmZCAqaWJmZCwg YmZkICpvYmZkKTsKCgoKCmJmZF9ib29sZWFuCmJmZF9tZXJnZV9wcml2YXRlX2JmZF9kYXRhIChi ZmQgKmliZmQsIGJmZCAqb2JmZCk7CgoKCgpiZmRfYm9vbGVhbgpiZmRfc2V0X3ByaXZhdGVfZmxh Z3MgKGJmZCAqYWJmZCwgZmxhZ3dvcmQgZmxhZ3MpOwojIDM5NDcgIi4uL2JmZC9iZmQuaCIKZXh0 ZXJuIGJmZF9ieXRlICpiZmRfZ2V0X3JlbG9jYXRlZF9zZWN0aW9uX2NvbnRlbnRzCiAgICAgICAo YmZkICosIHN0cnVjdCBiZmRfbGlua19pbmZvICosIHN0cnVjdCBiZmRfbGlua19vcmRlciAqLCBi ZmRfYnl0ZSAqLCBiZmRfYm9vbGVhbiwgYXN5bWJvbCAqKik7CgoKCmJmZF9ib29sZWFuCmJmZF9h bHRfbWFjaF9jb2RlIChiZmQgKmFiZmQsIGludCBhbHRlcm5hdGl2ZSk7CgpzdHJ1Y3QgYmZkX3By ZXNlcnZlCnsKICB2b2lkICogbWFya2VyOwogIHZvaWQgKiB0ZGF0YTsKICBmbGFnd29yZCBmbGFn czsKICBjb25zdCBzdHJ1Y3QgYmZkX2FyY2hfaW5mbyAqYXJjaF9pbmZvOwogIHN0cnVjdCBzZWMg KnNlY3Rpb25zOwogIHN0cnVjdCBzZWMgKipzZWN0aW9uX3RhaWw7CiAgdW5zaWduZWQgaW50IHNl Y3Rpb25fY291bnQ7CiAgc3RydWN0IGJmZF9oYXNoX3RhYmxlIHNlY3Rpb25faHRhYjsKfTsKCmJm ZF9ib29sZWFuCmJmZF9wcmVzZXJ2ZV9zYXZlIChiZmQgKiwgc3RydWN0IGJmZF9wcmVzZXJ2ZSAq KTsKCnZvaWQKYmZkX3ByZXNlcnZlX3Jlc3RvcmUgKGJmZCAqLCBzdHJ1Y3QgYmZkX3ByZXNlcnZl ICopOwoKdm9pZApiZmRfcHJlc2VydmVfZmluaXNoIChiZmQgKiwgc3RydWN0IGJmZF9wcmVzZXJ2 ZSAqKTsKCgpzeW1pbmRleApiZmRfZ2V0X25leHRfbWFwZW50IChiZmQgKmFiZmQsIHN5bWluZGV4 IHByZXZpb3VzLCBjYXJzeW0gKipzeW0pOwoKYmZkX2Jvb2xlYW4KYmZkX3NldF9hcmNoaXZlX2hl YWQgKGJmZCAqb3V0cHV0LCBiZmQgKm5ld19oZWFkKTsKCmJmZCAqCmJmZF9vcGVucl9uZXh0X2Fy Y2hpdmVkX2ZpbGUgKGJmZCAqYXJjaGl2ZSwgYmZkICpwcmV2aW91cyk7CgoKY29uc3QgY2hhciAq CmJmZF9jb3JlX2ZpbGVfZmFpbGluZ19jb21tYW5kIChiZmQgKmFiZmQpOwoKaW50CmJmZF9jb3Jl X2ZpbGVfZmFpbGluZ19zaWduYWwgKGJmZCAqYWJmZCk7CgpiZmRfYm9vbGVhbgpjb3JlX2ZpbGVf bWF0Y2hlc19leGVjdXRhYmxlX3AgKGJmZCAqY29yZV9iZmQsIGJmZCAqZXhlY19iZmQpOwojIDQw MTggIi4uL2JmZC9iZmQuaCIKZW51bSBiZmRfZmxhdm91cgp7CiAgYmZkX3RhcmdldF91bmtub3du X2ZsYXZvdXIsCiAgYmZkX3RhcmdldF9hb3V0X2ZsYXZvdXIsCiAgYmZkX3RhcmdldF9jb2ZmX2Zs YXZvdXIsCiAgYmZkX3RhcmdldF9lY29mZl9mbGF2b3VyLAogIGJmZF90YXJnZXRfeGNvZmZfZmxh dm91ciwKICBiZmRfdGFyZ2V0X2VsZl9mbGF2b3VyLAogIGJmZF90YXJnZXRfaWVlZV9mbGF2b3Vy LAogIGJmZF90YXJnZXRfbmxtX2ZsYXZvdXIsCiAgYmZkX3RhcmdldF9vYXN5c19mbGF2b3VyLAog IGJmZF90YXJnZXRfdGVraGV4X2ZsYXZvdXIsCiAgYmZkX3RhcmdldF9zcmVjX2ZsYXZvdXIsCiAg YmZkX3RhcmdldF9paGV4X2ZsYXZvdXIsCiAgYmZkX3RhcmdldF9zb21fZmxhdm91ciwKICBiZmRf dGFyZ2V0X29zOWtfZmxhdm91ciwKICBiZmRfdGFyZ2V0X3ZlcnNhZG9zX2ZsYXZvdXIsCiAgYmZk X3RhcmdldF9tc2Rvc19mbGF2b3VyLAogIGJmZF90YXJnZXRfb3ZheF9mbGF2b3VyLAogIGJmZF90 YXJnZXRfZXZheF9mbGF2b3VyLAogIGJmZF90YXJnZXRfbW1vX2ZsYXZvdXIsCiAgYmZkX3Rhcmdl dF9tYWNoX29fZmxhdm91ciwKICBiZmRfdGFyZ2V0X3BlZl9mbGF2b3VyLAogIGJmZF90YXJnZXRf cGVmX3hsaWJfZmxhdm91ciwKICBiZmRfdGFyZ2V0X3N5bV9mbGF2b3VyCn07CgplbnVtIGJmZF9l bmRpYW4geyBCRkRfRU5ESUFOX0JJRywgQkZEX0VORElBTl9MSVRUTEUsIEJGRF9FTkRJQU5fVU5L Tk9XTiB9OwoKCnR5cGVkZWYgc3RydWN0IGJmZF9saW5rX2luZm8gX2JmZF9saW5rX2luZm87Cgp0 eXBlZGVmIHN0cnVjdCBiZmRfdGFyZ2V0CnsKCiAgY2hhciAqbmFtZTsKCgoKICBlbnVtIGJmZF9m bGF2b3VyIGZsYXZvdXI7CgoKICBlbnVtIGJmZF9lbmRpYW4gYnl0ZW9yZGVyOwoKCiAgZW51bSBi ZmRfZW5kaWFuIGhlYWRlcl9ieXRlb3JkZXI7CgoKCiAgZmxhZ3dvcmQgb2JqZWN0X2ZsYWdzOwoK CgogIGZsYWd3b3JkIHNlY3Rpb25fZmxhZ3M7CgoKCiAgY2hhciBzeW1ib2xfbGVhZGluZ19jaGFy OwoKCiAgY2hhciBhcl9wYWRfY2hhcjsKCgogIHVuc2lnbmVkIHNob3J0IGFyX21heF9uYW1lbGVu OwoKCgoKICBiZmRfdm1hICgqYmZkX2dldHg2NCkgKGNvbnN0IGJmZF9ieXRlICopOwogIGJmZF9z aWduZWRfdm1hICgqYmZkX2dldHhfc2lnbmVkXzY0KSAoY29uc3QgYmZkX2J5dGUgKik7CiAgdm9p ZCAoKmJmZF9wdXR4NjQpIChiZmRfdm1hLCBiZmRfYnl0ZSAqKTsKICBiZmRfdm1hICgqYmZkX2dl dHgzMikgKGNvbnN0IGJmZF9ieXRlICopOwogIGJmZF9zaWduZWRfdm1hICgqYmZkX2dldHhfc2ln bmVkXzMyKSAoY29uc3QgYmZkX2J5dGUgKik7CiAgdm9pZCAoKmJmZF9wdXR4MzIpIChiZmRfdm1h LCBiZmRfYnl0ZSAqKTsKICBiZmRfdm1hICgqYmZkX2dldHgxNikgKGNvbnN0IGJmZF9ieXRlICop OwogIGJmZF9zaWduZWRfdm1hICgqYmZkX2dldHhfc2lnbmVkXzE2KSAoY29uc3QgYmZkX2J5dGUg Kik7CiAgdm9pZCAoKmJmZF9wdXR4MTYpIChiZmRfdm1hLCBiZmRfYnl0ZSAqKTsKCgogIGJmZF92 bWEgKCpiZmRfaF9nZXR4NjQpIChjb25zdCBiZmRfYnl0ZSAqKTsKICBiZmRfc2lnbmVkX3ZtYSAo KmJmZF9oX2dldHhfc2lnbmVkXzY0KSAoY29uc3QgYmZkX2J5dGUgKik7CiAgdm9pZCAoKmJmZF9o X3B1dHg2NCkgKGJmZF92bWEsIGJmZF9ieXRlICopOwogIGJmZF92bWEgKCpiZmRfaF9nZXR4MzIp IChjb25zdCBiZmRfYnl0ZSAqKTsKICBiZmRfc2lnbmVkX3ZtYSAoKmJmZF9oX2dldHhfc2lnbmVk XzMyKSAoY29uc3QgYmZkX2J5dGUgKik7CiAgdm9pZCAoKmJmZF9oX3B1dHgzMikgKGJmZF92bWEs IGJmZF9ieXRlICopOwogIGJmZF92bWEgKCpiZmRfaF9nZXR4MTYpIChjb25zdCBiZmRfYnl0ZSAq KTsKICBiZmRfc2lnbmVkX3ZtYSAoKmJmZF9oX2dldHhfc2lnbmVkXzE2KSAoY29uc3QgYmZkX2J5 dGUgKik7CiAgdm9pZCAoKmJmZF9oX3B1dHgxNikgKGJmZF92bWEsIGJmZF9ieXRlICopOwoKCgoK CiAgY29uc3Qgc3RydWN0IGJmZF90YXJnZXQgKigqX2JmZF9jaGVja19mb3JtYXRbYmZkX3R5cGVf ZW5kXSkgKGJmZCAqKTsKCgogIGJmZF9ib29sZWFuICgqX2JmZF9zZXRfZm9ybWF0W2JmZF90eXBl X2VuZF0pIChiZmQgKik7CgoKICBiZmRfYm9vbGVhbiAoKl9iZmRfd3JpdGVfY29udGVudHNbYmZk X3R5cGVfZW5kXSkgKGJmZCAqKTsKIyA0MTI5ICIuLi9iZmQvYmZkLmgiCiAgYmZkX2Jvb2xlYW4g KCpfY2xvc2VfYW5kX2NsZWFudXApIChiZmQgKik7CgogIGJmZF9ib29sZWFuICgqX2JmZF9mcmVl X2NhY2hlZF9pbmZvKSAoYmZkICopOwoKICBiZmRfYm9vbGVhbiAoKl9uZXdfc2VjdGlvbl9ob29r KSAoYmZkICosIHNlY19wdHIpOwoKICBiZmRfYm9vbGVhbiAoKl9iZmRfZ2V0X3NlY3Rpb25fY29u dGVudHMpCiAgICAoYmZkICosIHNlY19wdHIsIHZvaWQgKiwgZmlsZV9wdHIsIGJmZF9zaXplX3R5 cGUpOwogIGJmZF9ib29sZWFuICgqX2JmZF9nZXRfc2VjdGlvbl9jb250ZW50c19pbl93aW5kb3cp CiAgICAoYmZkICosIHNlY19wdHIsIGJmZF93aW5kb3cgKiwgZmlsZV9wdHIsIGJmZF9zaXplX3R5 cGUpOwojIDQxNTAgIi4uL2JmZC9iZmQuaCIKICBiZmRfYm9vbGVhbiAoKl9iZmRfY29weV9wcml2 YXRlX2JmZF9kYXRhKSAoYmZkICosIGJmZCAqKTsKCgogIGJmZF9ib29sZWFuICgqX2JmZF9tZXJn ZV9wcml2YXRlX2JmZF9kYXRhKSAoYmZkICosIGJmZCAqKTsKCgogIGJmZF9ib29sZWFuICgqX2Jm ZF9jb3B5X3ByaXZhdGVfc2VjdGlvbl9kYXRhKQogICAgKGJmZCAqLCBzZWNfcHRyLCBiZmQgKiwg c2VjX3B0cik7CgoKICBiZmRfYm9vbGVhbiAoKl9iZmRfY29weV9wcml2YXRlX3N5bWJvbF9kYXRh KQogICAgKGJmZCAqLCBhc3ltYm9sICosIGJmZCAqLCBhc3ltYm9sICopOwoKICBiZmRfYm9vbGVh biAoKl9iZmRfc2V0X3ByaXZhdGVfZmxhZ3MpIChiZmQgKiwgZmxhZ3dvcmQpOwoKCiAgYmZkX2Jv b2xlYW4gKCpfYmZkX3ByaW50X3ByaXZhdGVfYmZkX2RhdGEpIChiZmQgKiwgdm9pZCAqKTsKCgoK CgoKICBjaGFyICogKCpfY29yZV9maWxlX2ZhaWxpbmdfY29tbWFuZCkgKGJmZCAqKTsKICBpbnQg KCpfY29yZV9maWxlX2ZhaWxpbmdfc2lnbmFsKSAoYmZkICopOwogIGJmZF9ib29sZWFuICgqX2Nv cmVfZmlsZV9tYXRjaGVzX2V4ZWN1dGFibGVfcCkgKGJmZCAqLCBiZmQgKik7CiMgNDE4OSAiLi4v YmZkL2JmZC5oIgogIGJmZF9ib29sZWFuICgqX2JmZF9zbHVycF9hcm1hcCkgKGJmZCAqKTsKICBi ZmRfYm9vbGVhbiAoKl9iZmRfc2x1cnBfZXh0ZW5kZWRfbmFtZV90YWJsZSkgKGJmZCAqKTsKICBi ZmRfYm9vbGVhbiAoKl9iZmRfY29uc3RydWN0X2V4dGVuZGVkX25hbWVfdGFibGUpCiAgICAoYmZk ICosIGNoYXIgKiosIGJmZF9zaXplX3R5cGUgKiwgY29uc3QgY2hhciAqKik7CiAgdm9pZCAoKl9i ZmRfdHJ1bmNhdGVfYXJuYW1lKSAoYmZkICosIGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKICBiZmRf Ym9vbGVhbiAoKndyaXRlX2FybWFwKQogICAgKGJmZCAqLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBv cmwgKiwgdW5zaWduZWQgaW50LCBpbnQpOwogIHZvaWQgKiAoKl9iZmRfcmVhZF9hcl9oZHJfZm4p IChiZmQgKik7CiAgYmZkICogKCpvcGVucl9uZXh0X2FyY2hpdmVkX2ZpbGUpIChiZmQgKiwgYmZk ICopOwoKICBiZmQgKiAoKl9iZmRfZ2V0X2VsdF9hdF9pbmRleCkgKGJmZCAqLCBzeW1pbmRleCk7 CiAgaW50ICgqX2JmZF9zdGF0X2FyY2hfZWx0KSAoYmZkICosIHN0cnVjdCBzdGF0ICopOwogIGJm ZF9ib29sZWFuICgqX2JmZF91cGRhdGVfYXJtYXBfdGltZXN0YW1wKSAoYmZkICopOwojIDQyMTYg Ii4uL2JmZC9iZmQuaCIKICBsb25nICgqX2JmZF9nZXRfc3ltdGFiX3VwcGVyX2JvdW5kKSAoYmZk ICopOwogIGxvbmcgKCpfYmZkX2Nhbm9uaWNhbGl6ZV9zeW10YWIpIChiZmQgKiwgc3RydWN0IHN5 bWJvbF9jYWNoZV9lbnRyeSAqKik7CgogIHN0cnVjdCBzeW1ib2xfY2FjaGVfZW50cnkgKgogICAg ICAgICAgICAgICgqX2JmZF9tYWtlX2VtcHR5X3N5bWJvbCkgKGJmZCAqKTsKICB2b2lkICgqX2Jm ZF9wcmludF9zeW1ib2wpCiAgICAoYmZkICosIHZvaWQgKiwgc3RydWN0IHN5bWJvbF9jYWNoZV9l bnRyeSAqLCBiZmRfcHJpbnRfc3ltYm9sX3R5cGUpOwoKICB2b2lkICgqX2JmZF9nZXRfc3ltYm9s X2luZm8pCiAgICAoYmZkICosIHN0cnVjdCBzeW1ib2xfY2FjaGVfZW50cnkgKiwgc3ltYm9sX2lu Zm8gKik7CgogIGJmZF9ib29sZWFuICgqX2JmZF9pc19sb2NhbF9sYWJlbF9uYW1lKSAoYmZkICos IGNvbnN0IGNoYXIgKik7CgogIGFsZW50ICogKCpfZ2V0X2xpbmVubykgKGJmZCAqLCBzdHJ1Y3Qg c3ltYm9sX2NhY2hlX2VudHJ5ICopOwogIGJmZF9ib29sZWFuICgqX2JmZF9maW5kX25lYXJlc3Rf bGluZSkKICAgIChiZmQgKiwgc3RydWN0IHNlYyAqLCBzdHJ1Y3Qgc3ltYm9sX2NhY2hlX2VudHJ5 ICoqLCBiZmRfdm1hLCBjb25zdCBjaGFyICoqLCBjb25zdCBjaGFyICoqLCB1bnNpZ25lZCBpbnQg Kik7CgoKCgogIGFzeW1ib2wgKiAoKl9iZmRfbWFrZV9kZWJ1Z19zeW1ib2wpCiAgICAoYmZkICos IHZvaWQgKiwgdW5zaWduZWQgbG9uZyBzaXplKTsKCgogIGxvbmcgKCpfcmVhZF9taW5pc3ltYm9s cykKICAgIChiZmQgKiwgYmZkX2Jvb2xlYW4sIHZvaWQgKiAqLCB1bnNpZ25lZCBpbnQgKik7CgoK ICBhc3ltYm9sICogKCpfbWluaXN5bWJvbF90b19zeW1ib2wpCiAgICAoYmZkICosIGJmZF9ib29s ZWFuLCBjb25zdCB2b2lkICosIGFzeW1ib2wgKik7CgoKCgoKCiAgbG9uZyAoKl9nZXRfcmVsb2Nf dXBwZXJfYm91bmQpIChiZmQgKiwgc2VjX3B0cik7CiAgbG9uZyAoKl9iZmRfY2Fub25pY2FsaXpl X3JlbG9jKQogICAgKGJmZCAqLCBzZWNfcHRyLCBhcmVsZW50ICoqLCBzdHJ1Y3Qgc3ltYm9sX2Nh Y2hlX2VudHJ5ICoqKTsKCiAgcmVsb2NfaG93dG9fdHlwZSAqCiAgICAgICAgICAgICAgKCpyZWxv Y190eXBlX2xvb2t1cCkgKGJmZCAqLCBiZmRfcmVsb2NfY29kZV9yZWFsX3R5cGUpOwoKCgoKCiAg YmZkX2Jvb2xlYW4gKCpfYmZkX3NldF9hcmNoX21hY2gpCiAgICAoYmZkICosIGVudW0gYmZkX2Fy Y2hpdGVjdHVyZSwgdW5zaWduZWQgbG9uZyk7CiAgYmZkX2Jvb2xlYW4gKCpfYmZkX3NldF9zZWN0 aW9uX2NvbnRlbnRzKQogICAgKGJmZCAqLCBzZWNfcHRyLCB2b2lkICosIGZpbGVfcHRyLCBiZmRf c2l6ZV90eXBlKTsKIyA0MjgyICIuLi9iZmQvYmZkLmgiCiAgaW50ICgqX2JmZF9zaXplb2ZfaGVh ZGVycykgKGJmZCAqLCBiZmRfYm9vbGVhbik7CiAgYmZkX2J5dGUgKiAoKl9iZmRfZ2V0X3JlbG9j YXRlZF9zZWN0aW9uX2NvbnRlbnRzKQogICAgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAq LCBzdHJ1Y3QgYmZkX2xpbmtfb3JkZXIgKiwgYmZkX2J5dGUgKiwgYmZkX2Jvb2xlYW4sIHN0cnVj dCBzeW1ib2xfY2FjaGVfZW50cnkgKiopOwoKCiAgYmZkX2Jvb2xlYW4gKCpfYmZkX3JlbGF4X3Nl Y3Rpb24pCiAgICAoYmZkICosIHN0cnVjdCBzZWMgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKiwg YmZkX2Jvb2xlYW4gKik7CgoKCiAgc3RydWN0IGJmZF9saW5rX2hhc2hfdGFibGUgKgogICAgICAg ICAgICAgICgqX2JmZF9saW5rX2hhc2hfdGFibGVfY3JlYXRlKSAoYmZkICopOwoKCiAgdm9pZCAo Kl9iZmRfbGlua19oYXNoX3RhYmxlX2ZyZWUpCiAgICAoc3RydWN0IGJmZF9saW5rX2hhc2hfdGFi bGUgKik7CgoKICBiZmRfYm9vbGVhbiAoKl9iZmRfbGlua19hZGRfc3ltYm9scykKICAgIChiZmQg Kiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CgoKICB2b2lkICgqX2JmZF9saW5rX2p1c3Rfc3lt cykKICAgIChhc2VjdGlvbiAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKCgoKICBiZmRfYm9v bGVhbiAoKl9iZmRfZmluYWxfbGluaykgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsK CgogIGJmZF9ib29sZWFuICgqX2JmZF9saW5rX3NwbGl0X3NlY3Rpb24pIChiZmQgKiwgc3RydWN0 IHNlYyAqKTsKCgogIGJmZF9ib29sZWFuICgqX2JmZF9nY19zZWN0aW9ucykgKGJmZCAqLCBzdHJ1 Y3QgYmZkX2xpbmtfaW5mbyAqKTsKCgogIGJmZF9ib29sZWFuICgqX2JmZF9tZXJnZV9zZWN0aW9u cykgKGJmZCAqLCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKCgogIGJmZF9ib29sZWFuICgqX2Jm ZF9kaXNjYXJkX2dyb3VwKSAoYmZkICosIHN0cnVjdCBzZWMgKik7CiMgNDMzMCAiLi4vYmZkL2Jm ZC5oIgogIGxvbmcgKCpfYmZkX2dldF9keW5hbWljX3N5bXRhYl91cHBlcl9ib3VuZCkgKGJmZCAq KTsKCiAgbG9uZyAoKl9iZmRfY2Fub25pY2FsaXplX2R5bmFtaWNfc3ltdGFiKQogICAgKGJmZCAq LCBzdHJ1Y3Qgc3ltYm9sX2NhY2hlX2VudHJ5ICoqKTsKCiAgbG9uZyAoKl9iZmRfZ2V0X2R5bmFt aWNfcmVsb2NfdXBwZXJfYm91bmQpIChiZmQgKik7CgogIGxvbmcgKCpfYmZkX2Nhbm9uaWNhbGl6 ZV9keW5hbWljX3JlbG9jKQogICAgKGJmZCAqLCBhcmVsZW50ICoqLCBzdHJ1Y3Qgc3ltYm9sX2Nh Y2hlX2VudHJ5ICoqKTsKCgogIGNvbnN0IHN0cnVjdCBiZmRfdGFyZ2V0ICogYWx0ZXJuYXRpdmVf dGFyZ2V0OwoKCgogIHZvaWQgKiBiYWNrZW5kX2RhdGE7Cgp9IGJmZF90YXJnZXQ7CgpiZmRfYm9v bGVhbgpiZmRfc2V0X2RlZmF1bHRfdGFyZ2V0IChjb25zdCBjaGFyICpuYW1lKTsKCmNvbnN0IGJm ZF90YXJnZXQgKgpiZmRfZmluZF90YXJnZXQgKGNvbnN0IGNoYXIgKnRhcmdldF9uYW1lLCBiZmQg KmFiZmQpOwoKY29uc3QgY2hhciAqKgpiZmRfdGFyZ2V0X2xpc3QgKHZvaWQpOwoKY29uc3QgYmZk X3RhcmdldCAqCmJmZF9zZWFyY2hfZm9yX3RhcmdldCAoaW50ICgqIHNlYXJjaF9mdW5jKSAoY29u c3QgYmZkX3RhcmdldCAqLCB2b2lkICopLCB2b2lkICopOwoKCgoKYmZkX2Jvb2xlYW4KYmZkX2No ZWNrX2Zvcm1hdCAoYmZkICphYmZkLCBiZmRfZm9ybWF0IGZvcm1hdCk7CgpiZmRfYm9vbGVhbgpi ZmRfY2hlY2tfZm9ybWF0X21hdGNoZXMgKGJmZCAqYWJmZCwgYmZkX2Zvcm1hdCBmb3JtYXQsIGNo YXIgKioqbWF0Y2hpbmcpOwoKCmJmZF9ib29sZWFuCmJmZF9zZXRfZm9ybWF0IChiZmQgKmFiZmQs IGJmZF9mb3JtYXQgZm9ybWF0KTsKCmNvbnN0IGNoYXIgKgpiZmRfZm9ybWF0X3N0cmluZyAoYmZk X2Zvcm1hdCBmb3JtYXQpOwoKCmJmZF9ib29sZWFuCmJmZF9saW5rX3NwbGl0X3NlY3Rpb24gKGJm ZCAqYWJmZCwgYXNlY3Rpb24gKnNlYyk7CgoKCgoKYmZkX2J5dGUgKgpiZmRfc2ltcGxlX2dldF9y ZWxvY2F0ZWRfc2VjdGlvbl9jb250ZW50cyAoYmZkICphYmZkLCBhc2VjdGlvbiAqc2VjLCBiZmRf Ynl0ZSAqb3V0YnVmKTsKIyA0MCAicmVhZGVsZi5jIiAyCgojIDEgIi4uL2luY2x1ZGUvZWxmL2Nv bW1vbi5oIiAxCiMgNDIgInJlYWRlbGYuYyIgMgojIDEgIi4uL2luY2x1ZGUvZWxmL2V4dGVybmFs LmgiIDEKIyA0MCAiLi4vaW5jbHVkZS9lbGYvZXh0ZXJuYWwuaCIKdHlwZWRlZiBzdHJ1Y3Qgewog IHVuc2lnbmVkIGNoYXIgZV9pZGVudFsxNl07CiAgdW5zaWduZWQgY2hhciBlX3R5cGVbMl07CiAg dW5zaWduZWQgY2hhciBlX21hY2hpbmVbMl07CiAgdW5zaWduZWQgY2hhciBlX3ZlcnNpb25bNF07 CiAgdW5zaWduZWQgY2hhciBlX2VudHJ5WzRdOwogIHVuc2lnbmVkIGNoYXIgZV9waG9mZls0XTsK ICB1bnNpZ25lZCBjaGFyIGVfc2hvZmZbNF07CiAgdW5zaWduZWQgY2hhciBlX2ZsYWdzWzRdOwog IHVuc2lnbmVkIGNoYXIgZV9laHNpemVbMl07CiAgdW5zaWduZWQgY2hhciBlX3BoZW50c2l6ZVsy XTsKICB1bnNpZ25lZCBjaGFyIGVfcGhudW1bMl07CiAgdW5zaWduZWQgY2hhciBlX3NoZW50c2l6 ZVsyXTsKICB1bnNpZ25lZCBjaGFyIGVfc2hudW1bMl07CiAgdW5zaWduZWQgY2hhciBlX3Noc3Ry bmR4WzJdOwp9IEVsZjMyX0V4dGVybmFsX0VoZHI7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgdW5zaWdu ZWQgY2hhciBlX2lkZW50WzE2XTsKICB1bnNpZ25lZCBjaGFyIGVfdHlwZVsyXTsKICB1bnNpZ25l ZCBjaGFyIGVfbWFjaGluZVsyXTsKICB1bnNpZ25lZCBjaGFyIGVfdmVyc2lvbls0XTsKICB1bnNp Z25lZCBjaGFyIGVfZW50cnlbOF07CiAgdW5zaWduZWQgY2hhciBlX3Bob2ZmWzhdOwogIHVuc2ln bmVkIGNoYXIgZV9zaG9mZls4XTsKICB1bnNpZ25lZCBjaGFyIGVfZmxhZ3NbNF07CiAgdW5zaWdu ZWQgY2hhciBlX2Voc2l6ZVsyXTsKICB1bnNpZ25lZCBjaGFyIGVfcGhlbnRzaXplWzJdOwogIHVu c2lnbmVkIGNoYXIgZV9waG51bVsyXTsKICB1bnNpZ25lZCBjaGFyIGVfc2hlbnRzaXplWzJdOwog IHVuc2lnbmVkIGNoYXIgZV9zaG51bVsyXTsKICB1bnNpZ25lZCBjaGFyIGVfc2hzdHJuZHhbMl07 Cn0gRWxmNjRfRXh0ZXJuYWxfRWhkcjsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIGNo YXIgcF90eXBlWzRdOwogIHVuc2lnbmVkIGNoYXIgcF9vZmZzZXRbNF07CiAgdW5zaWduZWQgY2hh ciBwX3ZhZGRyWzRdOwogIHVuc2lnbmVkIGNoYXIgcF9wYWRkcls0XTsKICB1bnNpZ25lZCBjaGFy IHBfZmlsZXN6WzRdOwogIHVuc2lnbmVkIGNoYXIgcF9tZW1zels0XTsKICB1bnNpZ25lZCBjaGFy IHBfZmxhZ3NbNF07CiAgdW5zaWduZWQgY2hhciBwX2FsaWduWzRdOwp9IEVsZjMyX0V4dGVybmFs X1BoZHI7Cgp0eXBlZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgY2hhciBwX3R5cGVbNF07CiAgdW5z aWduZWQgY2hhciBwX2ZsYWdzWzRdOwogIHVuc2lnbmVkIGNoYXIgcF9vZmZzZXRbOF07CiAgdW5z aWduZWQgY2hhciBwX3ZhZGRyWzhdOwogIHVuc2lnbmVkIGNoYXIgcF9wYWRkcls4XTsKICB1bnNp Z25lZCBjaGFyIHBfZmlsZXN6WzhdOwogIHVuc2lnbmVkIGNoYXIgcF9tZW1zels4XTsKICB1bnNp Z25lZCBjaGFyIHBfYWxpZ25bOF07Cn0gRWxmNjRfRXh0ZXJuYWxfUGhkcjsKCgoKdHlwZWRlZiBz dHJ1Y3QgewogIHVuc2lnbmVkIGNoYXIgc2hfbmFtZVs0XTsKICB1bnNpZ25lZCBjaGFyIHNoX3R5 cGVbNF07CiAgdW5zaWduZWQgY2hhciBzaF9mbGFnc1s0XTsKICB1bnNpZ25lZCBjaGFyIHNoX2Fk ZHJbNF07CiAgdW5zaWduZWQgY2hhciBzaF9vZmZzZXRbNF07CiAgdW5zaWduZWQgY2hhciBzaF9z aXplWzRdOwogIHVuc2lnbmVkIGNoYXIgc2hfbGlua1s0XTsKICB1bnNpZ25lZCBjaGFyIHNoX2lu Zm9bNF07CiAgdW5zaWduZWQgY2hhciBzaF9hZGRyYWxpZ25bNF07CiAgdW5zaWduZWQgY2hhciBz aF9lbnRzaXplWzRdOwp9IEVsZjMyX0V4dGVybmFsX1NoZHI7Cgp0eXBlZGVmIHN0cnVjdCB7CiAg dW5zaWduZWQgY2hhciBzaF9uYW1lWzRdOwogIHVuc2lnbmVkIGNoYXIgc2hfdHlwZVs0XTsKICB1 bnNpZ25lZCBjaGFyIHNoX2ZsYWdzWzhdOwogIHVuc2lnbmVkIGNoYXIgc2hfYWRkcls4XTsKICB1 bnNpZ25lZCBjaGFyIHNoX29mZnNldFs4XTsKICB1bnNpZ25lZCBjaGFyIHNoX3NpemVbOF07CiAg dW5zaWduZWQgY2hhciBzaF9saW5rWzRdOwogIHVuc2lnbmVkIGNoYXIgc2hfaW5mb1s0XTsKICB1 bnNpZ25lZCBjaGFyIHNoX2FkZHJhbGlnbls4XTsKICB1bnNpZ25lZCBjaGFyIHNoX2VudHNpemVb OF07Cn0gRWxmNjRfRXh0ZXJuYWxfU2hkcjsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVk IGNoYXIgc3RfbmFtZVs0XTsKICB1bnNpZ25lZCBjaGFyIHN0X3ZhbHVlWzRdOwogIHVuc2lnbmVk IGNoYXIgc3Rfc2l6ZVs0XTsKICB1bnNpZ25lZCBjaGFyIHN0X2luZm9bMV07CiAgdW5zaWduZWQg Y2hhciBzdF9vdGhlclsxXTsKICB1bnNpZ25lZCBjaGFyIHN0X3NobmR4WzJdOwp9IEVsZjMyX0V4 dGVybmFsX1N5bTsKCnR5cGVkZWYgc3RydWN0IHsKICB1bnNpZ25lZCBjaGFyIHN0X25hbWVbNF07 CiAgdW5zaWduZWQgY2hhciBzdF9pbmZvWzFdOwogIHVuc2lnbmVkIGNoYXIgc3Rfb3RoZXJbMV07 CiAgdW5zaWduZWQgY2hhciBzdF9zaG5keFsyXTsKICB1bnNpZ25lZCBjaGFyIHN0X3ZhbHVlWzhd OwogIHVuc2lnbmVkIGNoYXIgc3Rfc2l6ZVs4XTsKfSBFbGY2NF9FeHRlcm5hbF9TeW07Cgp0eXBl ZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgY2hhciBlc3Rfc2huZHhbNF07Cn0gRWxmX0V4dGVybmFs X1N5bV9TaG5keDsKCgoKdHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIGNoYXIgbmFtZXN6WzRd OwogIHVuc2lnbmVkIGNoYXIgZGVzY3N6WzRdOwogIHVuc2lnbmVkIGNoYXIgdHlwZVs0XTsKICBj aGFyIG5hbWVbMV07Cn0gRWxmX0V4dGVybmFsX05vdGU7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHVu c2lnbmVkIGNoYXIgcl9vZmZzZXRbNF07CiAgdW5zaWduZWQgY2hhciByX2luZm9bNF07Cn0gRWxm MzJfRXh0ZXJuYWxfUmVsOwoKdHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIGNoYXIgcl9vZmZz ZXRbNF07CiAgdW5zaWduZWQgY2hhciByX2luZm9bNF07CiAgdW5zaWduZWQgY2hhciByX2FkZGVu ZFs0XTsKfSBFbGYzMl9FeHRlcm5hbF9SZWxhOwoKdHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVk IGNoYXIgcl9vZmZzZXRbOF07CiAgdW5zaWduZWQgY2hhciByX2luZm9bOF07Cn0gRWxmNjRfRXh0 ZXJuYWxfUmVsOwoKdHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIGNoYXIgcl9vZmZzZXRbOF07 CiAgdW5zaWduZWQgY2hhciByX2luZm9bOF07CiAgdW5zaWduZWQgY2hhciByX2FkZGVuZFs4XTsK fSBFbGY2NF9FeHRlcm5hbF9SZWxhOwoKCgp0eXBlZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgY2hh ciBkX3RhZ1s0XTsKICB1bmlvbiB7CiAgICB1bnNpZ25lZCBjaGFyIGRfdmFsWzRdOwogICAgdW5z aWduZWQgY2hhciBkX3B0cls0XTsKICB9IGRfdW47Cn0gRWxmMzJfRXh0ZXJuYWxfRHluOwoKdHlw ZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIGNoYXIgZF90YWdbOF07CiAgdW5pb24gewogICAgdW5z aWduZWQgY2hhciBkX3ZhbFs4XTsKICAgIHVuc2lnbmVkIGNoYXIgZF9wdHJbOF07CiAgfSBkX3Vu Owp9IEVsZjY0X0V4dGVybmFsX0R5bjsKCgoKCgoKCnR5cGVkZWYgc3RydWN0IHsKICB1bnNpZ25l ZCBjaGFyIHZkX3ZlcnNpb25bMl07CiAgdW5zaWduZWQgY2hhciB2ZF9mbGFnc1syXTsKICB1bnNp Z25lZCBjaGFyIHZkX25keFsyXTsKICB1bnNpZ25lZCBjaGFyIHZkX2NudFsyXTsKICB1bnNpZ25l ZCBjaGFyIHZkX2hhc2hbNF07CiAgdW5zaWduZWQgY2hhciB2ZF9hdXhbNF07CiAgdW5zaWduZWQg Y2hhciB2ZF9uZXh0WzRdOwp9IEVsZl9FeHRlcm5hbF9WZXJkZWY7CgoKCnR5cGVkZWYgc3RydWN0 IHsKICB1bnNpZ25lZCBjaGFyIHZkYV9uYW1lWzRdOwogIHVuc2lnbmVkIGNoYXIgdmRhX25leHRb NF07Cn0gRWxmX0V4dGVybmFsX1ZlcmRhdXg7CgoKCnR5cGVkZWYgc3RydWN0IHsKICB1bnNpZ25l ZCBjaGFyIHZuX3ZlcnNpb25bMl07CiAgdW5zaWduZWQgY2hhciB2bl9jbnRbMl07CiAgdW5zaWdu ZWQgY2hhciB2bl9maWxlWzRdOwogIHVuc2lnbmVkIGNoYXIgdm5fYXV4WzRdOwogIHVuc2lnbmVk IGNoYXIgdm5fbmV4dFs0XTsKfSBFbGZfRXh0ZXJuYWxfVmVybmVlZDsKCgoKdHlwZWRlZiBzdHJ1 Y3QgewogIHVuc2lnbmVkIGNoYXIgdm5hX2hhc2hbNF07CiAgdW5zaWduZWQgY2hhciB2bmFfZmxh Z3NbMl07CiAgdW5zaWduZWQgY2hhciB2bmFfb3RoZXJbMl07CiAgdW5zaWduZWQgY2hhciB2bmFf bmFtZVs0XTsKICB1bnNpZ25lZCBjaGFyIHZuYV9uZXh0WzRdOwp9IEVsZl9FeHRlcm5hbF9WZXJu YXV4OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIGNoYXIgdnNfdmVyc1syXTsKfQoK ICBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkKCiAgRWxmX0V4dGVybmFsX1ZlcnN5bTsKCgp0eXBl ZGVmIHN0cnVjdAp7CiAgdW5zaWduZWQgY2hhciBzaV9ib3VuZHRvWzJdOwogIHVuc2lnbmVkIGNo YXIgc2lfZmxhZ3NbMl07Cn0gRWxmX0V4dGVybmFsX1N5bWluZm87CiMgNDMgInJlYWRlbGYuYyIg MgojIDEgIi4uL2luY2x1ZGUvZWxmL2ludGVybmFsLmgiIDEKIyA0NCAiLi4vaW5jbHVkZS9lbGYv aW50ZXJuYWwuaCIKdHlwZWRlZiBzdHJ1Y3QgZWxmX2ludGVybmFsX2VoZHIgewogIHVuc2lnbmVk IGNoYXIgZV9pZGVudFsxNl07CiAgYmZkX3ZtYSBlX2VudHJ5OwogIGJmZF9zaXplX3R5cGUgZV9w aG9mZjsKICBiZmRfc2l6ZV90eXBlIGVfc2hvZmY7CiAgdW5zaWduZWQgbG9uZyBlX3ZlcnNpb247 CiAgdW5zaWduZWQgbG9uZyBlX2ZsYWdzOwogIHVuc2lnbmVkIHNob3J0IGVfdHlwZTsKICB1bnNp Z25lZCBzaG9ydCBlX21hY2hpbmU7CiAgdW5zaWduZWQgaW50IGVfZWhzaXplOwogIHVuc2lnbmVk IGludCBlX3BoZW50c2l6ZTsKICB1bnNpZ25lZCBpbnQgZV9waG51bTsKICB1bnNpZ25lZCBpbnQg ZV9zaGVudHNpemU7CiAgdW5zaWduZWQgaW50IGVfc2hudW07CiAgdW5zaWduZWQgaW50IGVfc2hz dHJuZHg7Cn0gRWxmX0ludGVybmFsX0VoZHI7CgoKCnN0cnVjdCBlbGZfaW50ZXJuYWxfcGhkciB7 CiAgdW5zaWduZWQgbG9uZyBwX3R5cGU7CiAgdW5zaWduZWQgbG9uZyBwX2ZsYWdzOwogIGJmZF92 bWEgcF9vZmZzZXQ7CiAgYmZkX3ZtYSBwX3ZhZGRyOwogIGJmZF92bWEgcF9wYWRkcjsKICBiZmRf dm1hIHBfZmlsZXN6OwogIGJmZF92bWEgcF9tZW1zejsKICBiZmRfdm1hIHBfYWxpZ247Cn07Cgp0 eXBlZGVmIHN0cnVjdCBlbGZfaW50ZXJuYWxfcGhkciBFbGZfSW50ZXJuYWxfUGhkcjsKCgoKdHlw ZWRlZiBzdHJ1Y3QgZWxmX2ludGVybmFsX3NoZHIgewogIHVuc2lnbmVkIGludCBzaF9uYW1lOwog IHVuc2lnbmVkIGludCBzaF90eXBlOwogIGJmZF92bWEgc2hfZmxhZ3M7CiAgYmZkX3ZtYSBzaF9h ZGRyOwogIGJmZF9zaXplX3R5cGUgc2hfc2l6ZTsKICBiZmRfc2l6ZV90eXBlIHNoX2VudHNpemU7 CiAgdW5zaWduZWQgbG9uZyBzaF9saW5rOwogIHVuc2lnbmVkIGxvbmcgc2hfaW5mbzsKICBmaWxl X3B0ciBzaF9vZmZzZXQ7CiAgdW5zaWduZWQgaW50IHNoX2FkZHJhbGlnbjsKCgogIGFzZWN0aW9u ICogYmZkX3NlY3Rpb247CiAgdW5zaWduZWQgY2hhciAqY29udGVudHM7Cn0gRWxmX0ludGVybmFs X1NoZHI7CgoKCnN0cnVjdCBlbGZfaW50ZXJuYWxfc3ltIHsKICBiZmRfdm1hIHN0X3ZhbHVlOwog IGJmZF92bWEgc3Rfc2l6ZTsKICB1bnNpZ25lZCBsb25nIHN0X25hbWU7CiAgdW5zaWduZWQgY2hh ciBzdF9pbmZvOwogIHVuc2lnbmVkIGNoYXIgc3Rfb3RoZXI7CiAgdW5zaWduZWQgaW50IHN0X3No bmR4Owp9OwoKdHlwZWRlZiBzdHJ1Y3QgZWxmX2ludGVybmFsX3N5bSBFbGZfSW50ZXJuYWxfU3lt OwoKCgp0eXBlZGVmIHN0cnVjdCBlbGZfaW50ZXJuYWxfbm90ZSB7CiAgdW5zaWduZWQgbG9uZyBu YW1lc3o7CiAgdW5zaWduZWQgbG9uZyBkZXNjc3o7CiAgdW5zaWduZWQgbG9uZyB0eXBlOwogIGNo YXIgKiBuYW1lZGF0YTsKICBjaGFyICogZGVzY2RhdGE7CiAgYmZkX3ZtYSBkZXNjcG9zOwp9IEVs Zl9JbnRlcm5hbF9Ob3RlOwoKCgp0eXBlZGVmIHN0cnVjdCBlbGZfaW50ZXJuYWxfcmVsYSB7CiAg YmZkX3ZtYSByX29mZnNldDsKICBiZmRfdm1hIHJfaW5mbzsKICBiZmRfdm1hIHJfYWRkZW5kOwp9 IEVsZl9JbnRlcm5hbF9SZWxhOwoKCgp0eXBlZGVmIHN0cnVjdCBlbGZfaW50ZXJuYWxfZHluIHsK CiAgYmZkX3ZtYSBkX3RhZzsKICB1bmlvbiB7CgogICAgYmZkX3ZtYSBkX3ZhbDsKICAgIGJmZF92 bWEgZF9wdHI7CiAgfSBkX3VuOwp9IEVsZl9JbnRlcm5hbF9EeW47CgoKCnR5cGVkZWYgc3RydWN0 IGVsZl9pbnRlcm5hbF92ZXJkZWYgewogIHVuc2lnbmVkIHNob3J0IHZkX3ZlcnNpb247CiAgdW5z aWduZWQgc2hvcnQgdmRfZmxhZ3M7CiAgdW5zaWduZWQgc2hvcnQgdmRfbmR4OwogIHVuc2lnbmVk IHNob3J0IHZkX2NudDsKICB1bnNpZ25lZCBsb25nIHZkX2hhc2g7CiAgdW5zaWduZWQgbG9uZyB2 ZF9hdXg7CiAgdW5zaWduZWQgbG9uZyB2ZF9uZXh0OwoKCgogIGJmZCAqdmRfYmZkOwogIGNvbnN0 IGNoYXIgKnZkX25vZGVuYW1lOwogIHN0cnVjdCBlbGZfaW50ZXJuYWxfdmVyZGVmICp2ZF9uZXh0 ZGVmOwogIHN0cnVjdCBlbGZfaW50ZXJuYWxfdmVyZGF1eCAqdmRfYXV4cHRyOwogIHVuc2lnbmVk IGludCB2ZF9leHBfcmVmbm87Cn0gRWxmX0ludGVybmFsX1ZlcmRlZjsKCgoKdHlwZWRlZiBzdHJ1 Y3QgZWxmX2ludGVybmFsX3ZlcmRhdXggewogIHVuc2lnbmVkIGxvbmcgdmRhX25hbWU7CiAgdW5z aWduZWQgbG9uZyB2ZGFfbmV4dDsKCgoKICBjb25zdCBjaGFyICp2ZGFfbm9kZW5hbWU7CiAgc3Ry dWN0IGVsZl9pbnRlcm5hbF92ZXJkYXV4ICp2ZGFfbmV4dHB0cjsKfSBFbGZfSW50ZXJuYWxfVmVy ZGF1eDsKCgoKdHlwZWRlZiBzdHJ1Y3QgZWxmX2ludGVybmFsX3Zlcm5lZWQgewogIHVuc2lnbmVk IHNob3J0IHZuX3ZlcnNpb247CiAgdW5zaWduZWQgc2hvcnQgdm5fY250OwogIHVuc2lnbmVkIGxv bmcgdm5fZmlsZTsKICB1bnNpZ25lZCBsb25nIHZuX2F1eDsKICB1bnNpZ25lZCBsb25nIHZuX25l eHQ7CgoKCiAgYmZkICp2bl9iZmQ7CiAgY29uc3QgY2hhciAqdm5fZmlsZW5hbWU7CiAgc3RydWN0 IGVsZl9pbnRlcm5hbF92ZXJuYXV4ICp2bl9hdXhwdHI7CiAgc3RydWN0IGVsZl9pbnRlcm5hbF92 ZXJuZWVkICp2bl9uZXh0cmVmOwp9IEVsZl9JbnRlcm5hbF9WZXJuZWVkOwoKCgp0eXBlZGVmIHN0 cnVjdCBlbGZfaW50ZXJuYWxfdmVybmF1eCB7CiAgdW5zaWduZWQgbG9uZyB2bmFfaGFzaDsKICB1 bnNpZ25lZCBzaG9ydCB2bmFfZmxhZ3M7CiAgdW5zaWduZWQgc2hvcnQgdm5hX290aGVyOwogIHVu c2lnbmVkIGxvbmcgdm5hX25hbWU7CiAgdW5zaWduZWQgbG9uZyB2bmFfbmV4dDsKCgoKICBjb25z dCBjaGFyICp2bmFfbm9kZW5hbWU7CiAgc3RydWN0IGVsZl9pbnRlcm5hbF92ZXJuYXV4ICp2bmFf bmV4dHB0cjsKfSBFbGZfSW50ZXJuYWxfVmVybmF1eDsKCgoKCnR5cGVkZWYgc3RydWN0IGVsZl9p bnRlcm5hbF92ZXJzeW0gewogIHVuc2lnbmVkIHNob3J0IHZzX3ZlcnM7Cn0gRWxmX0ludGVybmFs X1ZlcnN5bTsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgdW5zaWduZWQgc2hvcnQgaW50IHNpX2JvdW5k dG87CiAgdW5zaWduZWQgc2hvcnQgaW50IHNpX2ZsYWdzOwp9IEVsZl9JbnRlcm5hbF9TeW1pbmZv OwoKCgoKCnN0cnVjdCBlbGZfc2VnbWVudF9tYXAKewoKICBzdHJ1Y3QgZWxmX3NlZ21lbnRfbWFw ICpuZXh0OwoKICB1bnNpZ25lZCBsb25nIHBfdHlwZTsKCiAgdW5zaWduZWQgbG9uZyBwX2ZsYWdz OwoKICBiZmRfdm1hIHBfcGFkZHI7CgoKICB1bnNpZ25lZCBpbnQgcF9mbGFnc192YWxpZCA6IDE7 CgoKICB1bnNpZ25lZCBpbnQgcF9wYWRkcl92YWxpZCA6IDE7CgogIHVuc2lnbmVkIGludCBpbmNs dWRlc19maWxlaGRyIDogMTsKCiAgdW5zaWduZWQgaW50IGluY2x1ZGVzX3BoZHJzIDogMTsKCiAg dW5zaWduZWQgaW50IGNvdW50OwoKICBhc2VjdGlvbiAqc2VjdGlvbnNbMV07Cn07CiMgNDQgInJl YWRlbGYuYyIgMgojIDEgIi4uL2luY2x1ZGUvZWxmL2R3YXJmMi5oIiAxCiMgNDUgIi4uL2luY2x1 ZGUvZWxmL2R3YXJmMi5oIgp0eXBlZGVmIHN0cnVjdAp7CiAgdW5zaWduZWQgY2hhciBsaV9sZW5n dGggWzRdOwogIHVuc2lnbmVkIGNoYXIgbGlfdmVyc2lvbiBbMl07CiAgdW5zaWduZWQgY2hhciBs aV9wcm9sb2d1ZV9sZW5ndGggWzRdOwogIHVuc2lnbmVkIGNoYXIgbGlfbWluX2luc25fbGVuZ3Ro IFsxXTsKICB1bnNpZ25lZCBjaGFyIGxpX2RlZmF1bHRfaXNfc3RtdCBbMV07CiAgdW5zaWduZWQg Y2hhciBsaV9saW5lX2Jhc2UgWzFdOwogIHVuc2lnbmVkIGNoYXIgbGlfbGluZV9yYW5nZSBbMV07 CiAgdW5zaWduZWQgY2hhciBsaV9vcGNvZGVfYmFzZSBbMV07Cn0KRFdBUkYyX0V4dGVybmFsX0xp bmVJbmZvOwoKdHlwZWRlZiBzdHJ1Y3QKewogIHVuc2lnbmVkIGxvbmcgbGlfbGVuZ3RoOwogIHVu c2lnbmVkIHNob3J0IGxpX3ZlcnNpb247CiAgdW5zaWduZWQgaW50IGxpX3Byb2xvZ3VlX2xlbmd0 aDsKICB1bnNpZ25lZCBjaGFyIGxpX21pbl9pbnNuX2xlbmd0aDsKICB1bnNpZ25lZCBjaGFyIGxp X2RlZmF1bHRfaXNfc3RtdDsKICBpbnQgbGlfbGluZV9iYXNlOwogIHVuc2lnbmVkIGNoYXIgbGlf bGluZV9yYW5nZTsKICB1bnNpZ25lZCBjaGFyIGxpX29wY29kZV9iYXNlOwp9CkRXQVJGMl9JbnRl cm5hbF9MaW5lSW5mbzsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgdW5zaWduZWQgY2hhciBwbl9sZW5n dGggWzRdOwogIHVuc2lnbmVkIGNoYXIgcG5fdmVyc2lvbiBbMl07CiAgdW5zaWduZWQgY2hhciBw bl9vZmZzZXQgWzRdOwogIHVuc2lnbmVkIGNoYXIgcG5fc2l6ZSBbNF07Cn0KRFdBUkYyX0V4dGVy bmFsX1B1Yk5hbWVzOwoKdHlwZWRlZiBzdHJ1Y3QKewogIHVuc2lnbmVkIGxvbmcgcG5fbGVuZ3Ro OwogIHVuc2lnbmVkIHNob3J0IHBuX3ZlcnNpb247CiAgdW5zaWduZWQgbG9uZyBwbl9vZmZzZXQ7 CiAgdW5zaWduZWQgbG9uZyBwbl9zaXplOwp9CkRXQVJGMl9JbnRlcm5hbF9QdWJOYW1lczsKCgp0 eXBlZGVmIHN0cnVjdAp7CiAgdW5zaWduZWQgY2hhciBjdV9sZW5ndGggWzRdOwogIHVuc2lnbmVk IGNoYXIgY3VfdmVyc2lvbiBbMl07CiAgdW5zaWduZWQgY2hhciBjdV9hYmJyZXZfb2Zmc2V0IFs0 XTsKICB1bnNpZ25lZCBjaGFyIGN1X3BvaW50ZXJfc2l6ZSBbMV07Cn0KRFdBUkYyX0V4dGVybmFs X0NvbXBVbml0OwoKdHlwZWRlZiBzdHJ1Y3QKewogIHVuc2lnbmVkIGxvbmcgY3VfbGVuZ3RoOwog IHVuc2lnbmVkIHNob3J0IGN1X3ZlcnNpb247CiAgdW5zaWduZWQgbG9uZyBjdV9hYmJyZXZfb2Zm c2V0OwogIHVuc2lnbmVkIGNoYXIgY3VfcG9pbnRlcl9zaXplOwp9CkRXQVJGMl9JbnRlcm5hbF9D b21wVW5pdDsKCnR5cGVkZWYgc3RydWN0CnsKICB1bnNpZ25lZCBjaGFyIGFyX2xlbmd0aCBbNF07 CiAgdW5zaWduZWQgY2hhciBhcl92ZXJzaW9uIFsyXTsKICB1bnNpZ25lZCBjaGFyIGFyX2luZm9f b2Zmc2V0IFs0XTsKICB1bnNpZ25lZCBjaGFyIGFyX3BvaW50ZXJfc2l6ZSBbMV07CiAgdW5zaWdu ZWQgY2hhciBhcl9zZWdtZW50X3NpemUgWzFdOwp9CkRXQVJGMl9FeHRlcm5hbF9BUmFuZ2U7Cgp0 eXBlZGVmIHN0cnVjdAp7CiAgdW5zaWduZWQgbG9uZyBhcl9sZW5ndGg7CiAgdW5zaWduZWQgc2hv cnQgYXJfdmVyc2lvbjsKICB1bnNpZ25lZCBsb25nIGFyX2luZm9fb2Zmc2V0OwogIHVuc2lnbmVk IGNoYXIgYXJfcG9pbnRlcl9zaXplOwogIHVuc2lnbmVkIGNoYXIgYXJfc2VnbWVudF9zaXplOwp9 CkRXQVJGMl9JbnRlcm5hbF9BUmFuZ2U7CgoKCmVudW0gZHdhcmZfdGFnCiAgewogICAgRFdfVEFH X3BhZGRpbmcgPSAweDAwLAogICAgRFdfVEFHX2FycmF5X3R5cGUgPSAweDAxLAogICAgRFdfVEFH X2NsYXNzX3R5cGUgPSAweDAyLAogICAgRFdfVEFHX2VudHJ5X3BvaW50ID0gMHgwMywKICAgIERX X1RBR19lbnVtZXJhdGlvbl90eXBlID0gMHgwNCwKICAgIERXX1RBR19mb3JtYWxfcGFyYW1ldGVy ID0gMHgwNSwKICAgIERXX1RBR19pbXBvcnRlZF9kZWNsYXJhdGlvbiA9IDB4MDgsCiAgICBEV19U QUdfbGFiZWwgPSAweDBhLAogICAgRFdfVEFHX2xleGljYWxfYmxvY2sgPSAweDBiLAogICAgRFdf VEFHX21lbWJlciA9IDB4MGQsCiAgICBEV19UQUdfcG9pbnRlcl90eXBlID0gMHgwZiwKICAgIERX X1RBR19yZWZlcmVuY2VfdHlwZSA9IDB4MTAsCiAgICBEV19UQUdfY29tcGlsZV91bml0ID0gMHgx MSwKICAgIERXX1RBR19zdHJpbmdfdHlwZSA9IDB4MTIsCiAgICBEV19UQUdfc3RydWN0dXJlX3R5 cGUgPSAweDEzLAogICAgRFdfVEFHX3N1YnJvdXRpbmVfdHlwZSA9IDB4MTUsCiAgICBEV19UQUdf dHlwZWRlZiA9IDB4MTYsCiAgICBEV19UQUdfdW5pb25fdHlwZSA9IDB4MTcsCiAgICBEV19UQUdf dW5zcGVjaWZpZWRfcGFyYW1ldGVycyA9IDB4MTgsCiAgICBEV19UQUdfdmFyaWFudCA9IDB4MTks CiAgICBEV19UQUdfY29tbW9uX2Jsb2NrID0gMHgxYSwKICAgIERXX1RBR19jb21tb25faW5jbHVz aW9uID0gMHgxYiwKICAgIERXX1RBR19pbmhlcml0YW5jZSA9IDB4MWMsCiAgICBEV19UQUdfaW5s aW5lZF9zdWJyb3V0aW5lID0gMHgxZCwKICAgIERXX1RBR19tb2R1bGUgPSAweDFlLAogICAgRFdf VEFHX3B0cl90b19tZW1iZXJfdHlwZSA9IDB4MWYsCiAgICBEV19UQUdfc2V0X3R5cGUgPSAweDIw LAogICAgRFdfVEFHX3N1YnJhbmdlX3R5cGUgPSAweDIxLAogICAgRFdfVEFHX3dpdGhfc3RtdCA9 IDB4MjIsCiAgICBEV19UQUdfYWNjZXNzX2RlY2xhcmF0aW9uID0gMHgyMywKICAgIERXX1RBR19i YXNlX3R5cGUgPSAweDI0LAogICAgRFdfVEFHX2NhdGNoX2Jsb2NrID0gMHgyNSwKICAgIERXX1RB R19jb25zdF90eXBlID0gMHgyNiwKICAgIERXX1RBR19jb25zdGFudCA9IDB4MjcsCiAgICBEV19U QUdfZW51bWVyYXRvciA9IDB4MjgsCiAgICBEV19UQUdfZmlsZV90eXBlID0gMHgyOSwKICAgIERX X1RBR19mcmllbmQgPSAweDJhLAogICAgRFdfVEFHX25hbWVsaXN0ID0gMHgyYiwKICAgIERXX1RB R19uYW1lbGlzdF9pdGVtID0gMHgyYywKICAgIERXX1RBR19wYWNrZWRfdHlwZSA9IDB4MmQsCiAg ICBEV19UQUdfc3VicHJvZ3JhbSA9IDB4MmUsCiAgICBEV19UQUdfdGVtcGxhdGVfdHlwZV9wYXJh bSA9IDB4MmYsCiAgICBEV19UQUdfdGVtcGxhdGVfdmFsdWVfcGFyYW0gPSAweDMwLAogICAgRFdf VEFHX3Rocm93bl90eXBlID0gMHgzMSwKICAgIERXX1RBR190cnlfYmxvY2sgPSAweDMyLAogICAg RFdfVEFHX3ZhcmlhbnRfcGFydCA9IDB4MzMsCiAgICBEV19UQUdfdmFyaWFibGUgPSAweDM0LAog ICAgRFdfVEFHX3ZvbGF0aWxlX3R5cGUgPSAweDM1LAoKICAgIERXX1RBR19kd2FyZl9wcm9jZWR1 cmUgPSAweDM2LAogICAgRFdfVEFHX3Jlc3RyaWN0X3R5cGUgPSAweDM3LAogICAgRFdfVEFHX2lu dGVyZmFjZV90eXBlID0gMHgzOCwKICAgIERXX1RBR19uYW1lc3BhY2UgPSAweDM5LAogICAgRFdf VEFHX2ltcG9ydGVkX21vZHVsZSA9IDB4M2EsCiAgICBEV19UQUdfdW5zcGVjaWZpZWRfdHlwZSA9 IDB4M2IsCiAgICBEV19UQUdfcGFydGlhbF91bml0ID0gMHgzYywKICAgIERXX1RBR19pbXBvcnRl ZF91bml0ID0gMHgzZCwKCiAgICBEV19UQUdfTUlQU19sb29wID0gMHg0MDgxLAoKICAgIERXX1RB R19mb3JtYXRfbGFiZWwgPSAweDQxMDEsCiAgICBEV19UQUdfZnVuY3Rpb25fdGVtcGxhdGUgPSAw eDQxMDIsCiAgICBEV19UQUdfY2xhc3NfdGVtcGxhdGUgPSAweDQxMDMsCiAgICBEV19UQUdfR05V X0JJTkNMID0gMHg0MTA0LAogICAgRFdfVEFHX0dOVV9FSU5DTCA9IDB4NDEwNSwKCiAgICBEV19U QUdfdXBjX3NoYXJlZF90eXBlID0gMHg4NzY1LAogICAgRFdfVEFHX3VwY19zdHJpY3RfdHlwZSA9 IDB4ODc2NiwKICAgIERXX1RBR191cGNfcmVsYXhlZF90eXBlID0gMHg4NzY3CiAgfTsKIyAyMTIg Ii4uL2luY2x1ZGUvZWxmL2R3YXJmMi5oIgplbnVtIGR3YXJmX2Zvcm0KICB7CiAgICBEV19GT1JN X2FkZHIgPSAweDAxLAogICAgRFdfRk9STV9ibG9jazIgPSAweDAzLAogICAgRFdfRk9STV9ibG9j azQgPSAweDA0LAogICAgRFdfRk9STV9kYXRhMiA9IDB4MDUsCiAgICBEV19GT1JNX2RhdGE0ID0g MHgwNiwKICAgIERXX0ZPUk1fZGF0YTggPSAweDA3LAogICAgRFdfRk9STV9zdHJpbmcgPSAweDA4 LAogICAgRFdfRk9STV9ibG9jayA9IDB4MDksCiAgICBEV19GT1JNX2Jsb2NrMSA9IDB4MGEsCiAg ICBEV19GT1JNX2RhdGExID0gMHgwYiwKICAgIERXX0ZPUk1fZmxhZyA9IDB4MGMsCiAgICBEV19G T1JNX3NkYXRhID0gMHgwZCwKICAgIERXX0ZPUk1fc3RycCA9IDB4MGUsCiAgICBEV19GT1JNX3Vk YXRhID0gMHgwZiwKICAgIERXX0ZPUk1fcmVmX2FkZHIgPSAweDEwLAogICAgRFdfRk9STV9yZWYx ID0gMHgxMSwKICAgIERXX0ZPUk1fcmVmMiA9IDB4MTIsCiAgICBEV19GT1JNX3JlZjQgPSAweDEz LAogICAgRFdfRk9STV9yZWY4ID0gMHgxNCwKICAgIERXX0ZPUk1fcmVmX3VkYXRhID0gMHgxNSwK ICAgIERXX0ZPUk1faW5kaXJlY3QgPSAweDE2CiAgfTsKCgoKZW51bSBkd2FyZl9hdHRyaWJ1dGUK ICB7CiAgICBEV19BVF9zaWJsaW5nID0gMHgwMSwKICAgIERXX0FUX2xvY2F0aW9uID0gMHgwMiwK ICAgIERXX0FUX25hbWUgPSAweDAzLAogICAgRFdfQVRfb3JkZXJpbmcgPSAweDA5LAogICAgRFdf QVRfc3Vic2NyX2RhdGEgPSAweDBhLAogICAgRFdfQVRfYnl0ZV9zaXplID0gMHgwYiwKICAgIERX X0FUX2JpdF9vZmZzZXQgPSAweDBjLAogICAgRFdfQVRfYml0X3NpemUgPSAweDBkLAogICAgRFdf QVRfZWxlbWVudF9saXN0ID0gMHgwZiwKICAgIERXX0FUX3N0bXRfbGlzdCA9IDB4MTAsCiAgICBE V19BVF9sb3dfcGMgPSAweDExLAogICAgRFdfQVRfaGlnaF9wYyA9IDB4MTIsCiAgICBEV19BVF9s YW5ndWFnZSA9IDB4MTMsCiAgICBEV19BVF9tZW1iZXIgPSAweDE0LAogICAgRFdfQVRfZGlzY3Ig PSAweDE1LAogICAgRFdfQVRfZGlzY3JfdmFsdWUgPSAweDE2LAogICAgRFdfQVRfdmlzaWJpbGl0 eSA9IDB4MTcsCiAgICBEV19BVF9pbXBvcnQgPSAweDE4LAogICAgRFdfQVRfc3RyaW5nX2xlbmd0 aCA9IDB4MTksCiAgICBEV19BVF9jb21tb25fcmVmZXJlbmNlID0gMHgxYSwKICAgIERXX0FUX2Nv bXBfZGlyID0gMHgxYiwKICAgIERXX0FUX2NvbnN0X3ZhbHVlID0gMHgxYywKICAgIERXX0FUX2Nv bnRhaW5pbmdfdHlwZSA9IDB4MWQsCiAgICBEV19BVF9kZWZhdWx0X3ZhbHVlID0gMHgxZSwKICAg IERXX0FUX2lubGluZSA9IDB4MjAsCiAgICBEV19BVF9pc19vcHRpb25hbCA9IDB4MjEsCiAgICBE V19BVF9sb3dlcl9ib3VuZCA9IDB4MjIsCiAgICBEV19BVF9wcm9kdWNlciA9IDB4MjUsCiAgICBE V19BVF9wcm90b3R5cGVkID0gMHgyNywKICAgIERXX0FUX3JldHVybl9hZGRyID0gMHgyYSwKICAg IERXX0FUX3N0YXJ0X3Njb3BlID0gMHgyYywKICAgIERXX0FUX3N0cmlkZV9zaXplID0gMHgyZSwK ICAgIERXX0FUX3VwcGVyX2JvdW5kID0gMHgyZiwKICAgIERXX0FUX2Fic3RyYWN0X29yaWdpbiA9 IDB4MzEsCiAgICBEV19BVF9hY2Nlc3NpYmlsaXR5ID0gMHgzMiwKICAgIERXX0FUX2FkZHJlc3Nf Y2xhc3MgPSAweDMzLAogICAgRFdfQVRfYXJ0aWZpY2lhbCA9IDB4MzQsCiAgICBEV19BVF9iYXNl X3R5cGVzID0gMHgzNSwKICAgIERXX0FUX2NhbGxpbmdfY29udmVudGlvbiA9IDB4MzYsCiAgICBE V19BVF9jb3VudCA9IDB4MzcsCiAgICBEV19BVF9kYXRhX21lbWJlcl9sb2NhdGlvbiA9IDB4Mzgs CiAgICBEV19BVF9kZWNsX2NvbHVtbiA9IDB4MzksCiAgICBEV19BVF9kZWNsX2ZpbGUgPSAweDNh LAogICAgRFdfQVRfZGVjbF9saW5lID0gMHgzYiwKICAgIERXX0FUX2RlY2xhcmF0aW9uID0gMHgz YywKICAgIERXX0FUX2Rpc2NyX2xpc3QgPSAweDNkLAogICAgRFdfQVRfZW5jb2RpbmcgPSAweDNl LAogICAgRFdfQVRfZXh0ZXJuYWwgPSAweDNmLAogICAgRFdfQVRfZnJhbWVfYmFzZSA9IDB4NDAs CiAgICBEV19BVF9mcmllbmQgPSAweDQxLAogICAgRFdfQVRfaWRlbnRpZmllcl9jYXNlID0gMHg0 MiwKICAgIERXX0FUX21hY3JvX2luZm8gPSAweDQzLAogICAgRFdfQVRfbmFtZWxpc3RfaXRlbXMg PSAweDQ0LAogICAgRFdfQVRfcHJpb3JpdHkgPSAweDQ1LAogICAgRFdfQVRfc2VnbWVudCA9IDB4 NDYsCiAgICBEV19BVF9zcGVjaWZpY2F0aW9uID0gMHg0NywKICAgIERXX0FUX3N0YXRpY19saW5r ID0gMHg0OCwKICAgIERXX0FUX3R5cGUgPSAweDQ5LAogICAgRFdfQVRfdXNlX2xvY2F0aW9uID0g MHg0YSwKICAgIERXX0FUX3ZhcmlhYmxlX3BhcmFtZXRlciA9IDB4NGIsCiAgICBEV19BVF92aXJ0 dWFsaXR5ID0gMHg0YywKICAgIERXX0FUX3Z0YWJsZV9lbGVtX2xvY2F0aW9uID0gMHg0ZCwKCiAg ICBEV19BVF9hbGxvY2F0ZWQgPSAweDRlLAogICAgRFdfQVRfYXNzb2NpYXRlZCA9IDB4NGYsCiAg ICBEV19BVF9kYXRhX2xvY2F0aW9uID0gMHg1MCwKICAgIERXX0FUX3N0cmlkZSA9IDB4NTEsCiAg ICBEV19BVF9lbnRyeV9wYyA9IDB4NTIsCiAgICBEV19BVF91c2VfVVRGOCA9IDB4NTMsCiAgICBE V19BVF9leHRlbnNpb24gPSAweDU0LAogICAgRFdfQVRfcmFuZ2VzID0gMHg1NSwKICAgIERXX0FU X3RyYW1wb2xpbmUgPSAweDU2LAogICAgRFdfQVRfY2FsbF9jb2x1bW4gPSAweDU3LAogICAgRFdf QVRfY2FsbF9maWxlID0gMHg1OCwKICAgIERXX0FUX2NhbGxfbGluZSA9IDB4NTksCgogICAgRFdf QVRfTUlQU19mZGUgPSAweDIwMDEsCiAgICBEV19BVF9NSVBTX2xvb3BfYmVnaW4gPSAweDIwMDIs CiAgICBEV19BVF9NSVBTX3RhaWxfbG9vcF9iZWdpbiA9IDB4MjAwMywKICAgIERXX0FUX01JUFNf ZXBpbG9nX2JlZ2luID0gMHgyMDA0LAogICAgRFdfQVRfTUlQU19sb29wX3Vucm9sbF9mYWN0b3Ig PSAweDIwMDUsCiAgICBEV19BVF9NSVBTX3NvZnR3YXJlX3BpcGVsaW5lX2RlcHRoID0gMHgyMDA2 LAogICAgRFdfQVRfTUlQU19saW5rYWdlX25hbWUgPSAweDIwMDcsCiAgICBEV19BVF9NSVBTX3N0 cmlkZSA9IDB4MjAwOCwKICAgIERXX0FUX01JUFNfYWJzdHJhY3RfbmFtZSA9IDB4MjAwOSwKICAg IERXX0FUX01JUFNfY2xvbmVfb3JpZ2luID0gMHgyMDBhLAogICAgRFdfQVRfTUlQU19oYXNfaW5s aW5lcyA9IDB4MjAwYiwKCiAgICBEV19BVF9zZl9uYW1lcyA9IDB4MjEwMSwKICAgIERXX0FUX3Ny Y19pbmZvID0gMHgyMTAyLAogICAgRFdfQVRfbWFjX2luZm8gPSAweDIxMDMsCiAgICBEV19BVF9z cmNfY29vcmRzID0gMHgyMTA0LAogICAgRFdfQVRfYm9keV9iZWdpbiA9IDB4MjEwNSwKICAgIERX X0FUX2JvZHlfZW5kID0gMHgyMTA2LAogICAgRFdfQVRfR05VX3ZlY3RvciA9IDB4MjEwNywKCiAg ICBEV19BVF9WTVNfcnRuYmVnX3BkX2FkZHJlc3MgPSAweDIyMDEsCgogICAgRFdfQVRfdXBjX3Ro cmVhZHNfc2NhbGVkID0gMHgzMjEwCiAgfTsKCgoKCgplbnVtIGR3YXJmX2xvY2F0aW9uX2F0b20K ICB7CiAgICBEV19PUF9hZGRyID0gMHgwMywKICAgIERXX09QX2RlcmVmID0gMHgwNiwKICAgIERX X09QX2NvbnN0MXUgPSAweDA4LAogICAgRFdfT1BfY29uc3QxcyA9IDB4MDksCiAgICBEV19PUF9j b25zdDJ1ID0gMHgwYSwKICAgIERXX09QX2NvbnN0MnMgPSAweDBiLAogICAgRFdfT1BfY29uc3Q0 dSA9IDB4MGMsCiAgICBEV19PUF9jb25zdDRzID0gMHgwZCwKICAgIERXX09QX2NvbnN0OHUgPSAw eDBlLAogICAgRFdfT1BfY29uc3Q4cyA9IDB4MGYsCiAgICBEV19PUF9jb25zdHUgPSAweDEwLAog ICAgRFdfT1BfY29uc3RzID0gMHgxMSwKICAgIERXX09QX2R1cCA9IDB4MTIsCiAgICBEV19PUF9k cm9wID0gMHgxMywKICAgIERXX09QX292ZXIgPSAweDE0LAogICAgRFdfT1BfcGljayA9IDB4MTUs CiAgICBEV19PUF9zd2FwID0gMHgxNiwKICAgIERXX09QX3JvdCA9IDB4MTcsCiAgICBEV19PUF94 ZGVyZWYgPSAweDE4LAogICAgRFdfT1BfYWJzID0gMHgxOSwKICAgIERXX09QX2FuZCA9IDB4MWEs CiAgICBEV19PUF9kaXYgPSAweDFiLAogICAgRFdfT1BfbWludXMgPSAweDFjLAogICAgRFdfT1Bf bW9kID0gMHgxZCwKICAgIERXX09QX211bCA9IDB4MWUsCiAgICBEV19PUF9uZWcgPSAweDFmLAog ICAgRFdfT1Bfbm90ID0gMHgyMCwKICAgIERXX09QX29yID0gMHgyMSwKICAgIERXX09QX3BsdXMg PSAweDIyLAogICAgRFdfT1BfcGx1c191Y29uc3QgPSAweDIzLAogICAgRFdfT1Bfc2hsID0gMHgy NCwKICAgIERXX09QX3NociA9IDB4MjUsCiAgICBEV19PUF9zaHJhID0gMHgyNiwKICAgIERXX09Q X3hvciA9IDB4MjcsCiAgICBEV19PUF9icmEgPSAweDI4LAogICAgRFdfT1BfZXEgPSAweDI5LAog ICAgRFdfT1BfZ2UgPSAweDJhLAogICAgRFdfT1BfZ3QgPSAweDJiLAogICAgRFdfT1BfbGUgPSAw eDJjLAogICAgRFdfT1BfbHQgPSAweDJkLAogICAgRFdfT1BfbmUgPSAweDJlLAogICAgRFdfT1Bf c2tpcCA9IDB4MmYsCiAgICBEV19PUF9saXQwID0gMHgzMCwKICAgIERXX09QX2xpdDEgPSAweDMx LAogICAgRFdfT1BfbGl0MiA9IDB4MzIsCiAgICBEV19PUF9saXQzID0gMHgzMywKICAgIERXX09Q X2xpdDQgPSAweDM0LAogICAgRFdfT1BfbGl0NSA9IDB4MzUsCiAgICBEV19PUF9saXQ2ID0gMHgz NiwKICAgIERXX09QX2xpdDcgPSAweDM3LAogICAgRFdfT1BfbGl0OCA9IDB4MzgsCiAgICBEV19P UF9saXQ5ID0gMHgzOSwKICAgIERXX09QX2xpdDEwID0gMHgzYSwKICAgIERXX09QX2xpdDExID0g MHgzYiwKICAgIERXX09QX2xpdDEyID0gMHgzYywKICAgIERXX09QX2xpdDEzID0gMHgzZCwKICAg IERXX09QX2xpdDE0ID0gMHgzZSwKICAgIERXX09QX2xpdDE1ID0gMHgzZiwKICAgIERXX09QX2xp dDE2ID0gMHg0MCwKICAgIERXX09QX2xpdDE3ID0gMHg0MSwKICAgIERXX09QX2xpdDE4ID0gMHg0 MiwKICAgIERXX09QX2xpdDE5ID0gMHg0MywKICAgIERXX09QX2xpdDIwID0gMHg0NCwKICAgIERX X09QX2xpdDIxID0gMHg0NSwKICAgIERXX09QX2xpdDIyID0gMHg0NiwKICAgIERXX09QX2xpdDIz ID0gMHg0NywKICAgIERXX09QX2xpdDI0ID0gMHg0OCwKICAgIERXX09QX2xpdDI1ID0gMHg0OSwK ICAgIERXX09QX2xpdDI2ID0gMHg0YSwKICAgIERXX09QX2xpdDI3ID0gMHg0YiwKICAgIERXX09Q X2xpdDI4ID0gMHg0YywKICAgIERXX09QX2xpdDI5ID0gMHg0ZCwKICAgIERXX09QX2xpdDMwID0g MHg0ZSwKICAgIERXX09QX2xpdDMxID0gMHg0ZiwKICAgIERXX09QX3JlZzAgPSAweDUwLAogICAg RFdfT1BfcmVnMSA9IDB4NTEsCiAgICBEV19PUF9yZWcyID0gMHg1MiwKICAgIERXX09QX3JlZzMg PSAweDUzLAogICAgRFdfT1BfcmVnNCA9IDB4NTQsCiAgICBEV19PUF9yZWc1ID0gMHg1NSwKICAg IERXX09QX3JlZzYgPSAweDU2LAogICAgRFdfT1BfcmVnNyA9IDB4NTcsCiAgICBEV19PUF9yZWc4 ID0gMHg1OCwKICAgIERXX09QX3JlZzkgPSAweDU5LAogICAgRFdfT1BfcmVnMTAgPSAweDVhLAog ICAgRFdfT1BfcmVnMTEgPSAweDViLAogICAgRFdfT1BfcmVnMTIgPSAweDVjLAogICAgRFdfT1Bf cmVnMTMgPSAweDVkLAogICAgRFdfT1BfcmVnMTQgPSAweDVlLAogICAgRFdfT1BfcmVnMTUgPSAw eDVmLAogICAgRFdfT1BfcmVnMTYgPSAweDYwLAogICAgRFdfT1BfcmVnMTcgPSAweDYxLAogICAg RFdfT1BfcmVnMTggPSAweDYyLAogICAgRFdfT1BfcmVnMTkgPSAweDYzLAogICAgRFdfT1BfcmVn MjAgPSAweDY0LAogICAgRFdfT1BfcmVnMjEgPSAweDY1LAogICAgRFdfT1BfcmVnMjIgPSAweDY2 LAogICAgRFdfT1BfcmVnMjMgPSAweDY3LAogICAgRFdfT1BfcmVnMjQgPSAweDY4LAogICAgRFdf T1BfcmVnMjUgPSAweDY5LAogICAgRFdfT1BfcmVnMjYgPSAweDZhLAogICAgRFdfT1BfcmVnMjcg PSAweDZiLAogICAgRFdfT1BfcmVnMjggPSAweDZjLAogICAgRFdfT1BfcmVnMjkgPSAweDZkLAog ICAgRFdfT1BfcmVnMzAgPSAweDZlLAogICAgRFdfT1BfcmVnMzEgPSAweDZmLAogICAgRFdfT1Bf YnJlZzAgPSAweDcwLAogICAgRFdfT1BfYnJlZzEgPSAweDcxLAogICAgRFdfT1BfYnJlZzIgPSAw eDcyLAogICAgRFdfT1BfYnJlZzMgPSAweDczLAogICAgRFdfT1BfYnJlZzQgPSAweDc0LAogICAg RFdfT1BfYnJlZzUgPSAweDc1LAogICAgRFdfT1BfYnJlZzYgPSAweDc2LAogICAgRFdfT1BfYnJl ZzcgPSAweDc3LAogICAgRFdfT1BfYnJlZzggPSAweDc4LAogICAgRFdfT1BfYnJlZzkgPSAweDc5 LAogICAgRFdfT1BfYnJlZzEwID0gMHg3YSwKICAgIERXX09QX2JyZWcxMSA9IDB4N2IsCiAgICBE V19PUF9icmVnMTIgPSAweDdjLAogICAgRFdfT1BfYnJlZzEzID0gMHg3ZCwKICAgIERXX09QX2Jy ZWcxNCA9IDB4N2UsCiAgICBEV19PUF9icmVnMTUgPSAweDdmLAogICAgRFdfT1BfYnJlZzE2ID0g MHg4MCwKICAgIERXX09QX2JyZWcxNyA9IDB4ODEsCiAgICBEV19PUF9icmVnMTggPSAweDgyLAog ICAgRFdfT1BfYnJlZzE5ID0gMHg4MywKICAgIERXX09QX2JyZWcyMCA9IDB4ODQsCiAgICBEV19P UF9icmVnMjEgPSAweDg1LAogICAgRFdfT1BfYnJlZzIyID0gMHg4NiwKICAgIERXX09QX2JyZWcy MyA9IDB4ODcsCiAgICBEV19PUF9icmVnMjQgPSAweDg4LAogICAgRFdfT1BfYnJlZzI1ID0gMHg4 OSwKICAgIERXX09QX2JyZWcyNiA9IDB4OGEsCiAgICBEV19PUF9icmVnMjcgPSAweDhiLAogICAg RFdfT1BfYnJlZzI4ID0gMHg4YywKICAgIERXX09QX2JyZWcyOSA9IDB4OGQsCiAgICBEV19PUF9i cmVnMzAgPSAweDhlLAogICAgRFdfT1BfYnJlZzMxID0gMHg4ZiwKICAgIERXX09QX3JlZ3ggPSAw eDkwLAogICAgRFdfT1BfZmJyZWcgPSAweDkxLAogICAgRFdfT1BfYnJlZ3ggPSAweDkyLAogICAg RFdfT1BfcGllY2UgPSAweDkzLAogICAgRFdfT1BfZGVyZWZfc2l6ZSA9IDB4OTQsCiAgICBEV19P UF94ZGVyZWZfc2l6ZSA9IDB4OTUsCiAgICBEV19PUF9ub3AgPSAweDk2LAoKICAgIERXX09QX3B1 c2hfb2JqZWN0X2FkZHJlc3MgPSAweDk3LAogICAgRFdfT1BfY2FsbDIgPSAweDk4LAogICAgRFdf T1BfY2FsbDQgPSAweDk5LAogICAgRFdfT1BfY2FsbF9yZWYgPSAweDlhLAoKICAgIERXX09QX0dO VV9wdXNoX3Rsc19hZGRyZXNzID0gMHhlMAogIH07CgoKCgoKZW51bSBkd2FyZl90eXBlCiAgewog ICAgRFdfQVRFX3ZvaWQgPSAweDAsCiAgICBEV19BVEVfYWRkcmVzcyA9IDB4MSwKICAgIERXX0FU RV9ib29sZWFuID0gMHgyLAogICAgRFdfQVRFX2NvbXBsZXhfZmxvYXQgPSAweDMsCiAgICBEV19B VEVfZmxvYXQgPSAweDQsCiAgICBEV19BVEVfc2lnbmVkID0gMHg1LAogICAgRFdfQVRFX3NpZ25l ZF9jaGFyID0gMHg2LAogICAgRFdfQVRFX3Vuc2lnbmVkID0gMHg3LAogICAgRFdfQVRFX3Vuc2ln bmVkX2NoYXIgPSAweDgsCgogICAgRFdfQVRFX2ltYWdpbmFyeV9mbG9hdCA9IDB4OQogIH07CgoK CgoKZW51bSBkd2FyZl9hcnJheV9kaW1fb3JkZXJpbmcKICB7CiAgICBEV19PUkRfcm93X21ham9y ID0gMCwKICAgIERXX09SRF9jb2xfbWFqb3IgPSAxCiAgfTsKCgplbnVtIGR3YXJmX2FjY2Vzc19h dHRyaWJ1dGUKICB7CiAgICBEV19BQ0NFU1NfcHVibGljID0gMSwKICAgIERXX0FDQ0VTU19wcm90 ZWN0ZWQgPSAyLAogICAgRFdfQUNDRVNTX3ByaXZhdGUgPSAzCiAgfTsKCgplbnVtIGR3YXJmX3Zp c2liaWxpdHlfYXR0cmlidXRlCiAgewogICAgRFdfVklTX2xvY2FsID0gMSwKICAgIERXX1ZJU19l eHBvcnRlZCA9IDIsCiAgICBEV19WSVNfcXVhbGlmaWVkID0gMwogIH07CgoKZW51bSBkd2FyZl92 aXJ0dWFsaXR5X2F0dHJpYnV0ZQogIHsKICAgIERXX1ZJUlRVQUxJVFlfbm9uZSA9IDAsCiAgICBE V19WSVJUVUFMSVRZX3ZpcnR1YWwgPSAxLAogICAgRFdfVklSVFVBTElUWV9wdXJlX3ZpcnR1YWwg PSAyCiAgfTsKCgplbnVtIGR3YXJmX2lkX2Nhc2UKICB7CiAgICBEV19JRF9jYXNlX3NlbnNpdGl2 ZSA9IDAsCiAgICBEV19JRF91cF9jYXNlID0gMSwKICAgIERXX0lEX2Rvd25fY2FzZSA9IDIsCiAg ICBEV19JRF9jYXNlX2luc2Vuc2l0aXZlID0gMwogIH07CgoKZW51bSBkd2FyZl9jYWxsaW5nX2Nv bnZlbnRpb24KICB7CiAgICBEV19DQ19ub3JtYWwgPSAweDEsCiAgICBEV19DQ19wcm9ncmFtID0g MHgyLAogICAgRFdfQ0Nfbm9jYWxsID0gMHgzCiAgfTsKCgoKCgplbnVtIGR3YXJmX2lubGluZV9h dHRyaWJ1dGUKICB7CiAgICBEV19JTkxfbm90X2lubGluZWQgPSAwLAogICAgRFdfSU5MX2lubGlu ZWQgPSAxLAogICAgRFdfSU5MX2RlY2xhcmVkX25vdF9pbmxpbmVkID0gMiwKICAgIERXX0lOTF9k ZWNsYXJlZF9pbmxpbmVkID0gMwogIH07CgoKZW51bSBkd2FyZl9kaXNjcmltX2xpc3QKICB7CiAg ICBEV19EU0NfbGFiZWwgPSAwLAogICAgRFdfRFNDX3JhbmdlID0gMQogIH07CgoKZW51bSBkd2Fy Zl9saW5lX251bWJlcl9vcHMKICB7CiAgICBEV19MTlNfZXh0ZW5kZWRfb3AgPSAwLAogICAgRFdf TE5TX2NvcHkgPSAxLAogICAgRFdfTE5TX2FkdmFuY2VfcGMgPSAyLAogICAgRFdfTE5TX2FkdmFu Y2VfbGluZSA9IDMsCiAgICBEV19MTlNfc2V0X2ZpbGUgPSA0LAogICAgRFdfTE5TX3NldF9jb2x1 bW4gPSA1LAogICAgRFdfTE5TX25lZ2F0ZV9zdG10ID0gNiwKICAgIERXX0xOU19zZXRfYmFzaWNf YmxvY2sgPSA3LAogICAgRFdfTE5TX2NvbnN0X2FkZF9wYyA9IDgsCiAgICBEV19MTlNfZml4ZWRf YWR2YW5jZV9wYyA9IDksCgogICAgRFdfTE5TX3NldF9wcm9sb2d1ZV9lbmQgPSAxMCwKICAgIERX X0xOU19zZXRfZXBpbG9ndWVfYmVnaW4gPSAxMSwKICAgIERXX0xOU19zZXRfaXNhID0gMTIKICB9 OwoKCmVudW0gZHdhcmZfbGluZV9udW1iZXJfeF9vcHMKICB7CiAgICBEV19MTkVfZW5kX3NlcXVl bmNlID0gMSwKICAgIERXX0xORV9zZXRfYWRkcmVzcyA9IDIsCiAgICBEV19MTkVfZGVmaW5lX2Zp bGUgPSAzCiAgfTsKCgplbnVtIGR3YXJmX2NhbGxfZnJhbWVfaW5mbwogIHsKICAgIERXX0NGQV9h ZHZhbmNlX2xvYyA9IDB4NDAsCiAgICBEV19DRkFfb2Zmc2V0ID0gMHg4MCwKICAgIERXX0NGQV9y ZXN0b3JlID0gMHhjMCwKICAgIERXX0NGQV9ub3AgPSAweDAwLAogICAgRFdfQ0ZBX3NldF9sb2Mg PSAweDAxLAogICAgRFdfQ0ZBX2FkdmFuY2VfbG9jMSA9IDB4MDIsCiAgICBEV19DRkFfYWR2YW5j ZV9sb2MyID0gMHgwMywKICAgIERXX0NGQV9hZHZhbmNlX2xvYzQgPSAweDA0LAogICAgRFdfQ0ZB X29mZnNldF9leHRlbmRlZCA9IDB4MDUsCiAgICBEV19DRkFfcmVzdG9yZV9leHRlbmRlZCA9IDB4 MDYsCiAgICBEV19DRkFfdW5kZWZpbmVkID0gMHgwNywKICAgIERXX0NGQV9zYW1lX3ZhbHVlID0g MHgwOCwKICAgIERXX0NGQV9yZWdpc3RlciA9IDB4MDksCiAgICBEV19DRkFfcmVtZW1iZXJfc3Rh dGUgPSAweDBhLAogICAgRFdfQ0ZBX3Jlc3RvcmVfc3RhdGUgPSAweDBiLAogICAgRFdfQ0ZBX2Rl Zl9jZmEgPSAweDBjLAogICAgRFdfQ0ZBX2RlZl9jZmFfcmVnaXN0ZXIgPSAweDBkLAogICAgRFdf Q0ZBX2RlZl9jZmFfb2Zmc2V0ID0gMHgwZSwKCgogICAgRFdfQ0ZBX2RlZl9jZmFfZXhwcmVzc2lv biA9IDB4MGYsCiAgICBEV19DRkFfZXhwcmVzc2lvbiA9IDB4MTAsCiAgICBEV19DRkFfb2Zmc2V0 X2V4dGVuZGVkX3NmID0gMHgxMSwKICAgIERXX0NGQV9kZWZfY2ZhX3NmID0gMHgxMiwKICAgIERX X0NGQV9kZWZfY2ZhX29mZnNldF9zZiA9IDB4MTMsCgoKICAgIERXX0NGQV9NSVBTX2FkdmFuY2Vf bG9jOCA9IDB4MWQsCgoKICAgIERXX0NGQV9HTlVfd2luZG93X3NhdmUgPSAweDJkLAogICAgRFdf Q0ZBX0dOVV9hcmdzX3NpemUgPSAweDJlLAogICAgRFdfQ0ZBX0dOVV9uZWdhdGl2ZV9vZmZzZXRf ZXh0ZW5kZWQgPSAweDJmCiAgfTsKIyA2NjkgIi4uL2luY2x1ZGUvZWxmL2R3YXJmMi5oIgplbnVt IGR3YXJmX3NvdXJjZV9sYW5ndWFnZQogIHsKICAgIERXX0xBTkdfQzg5ID0gMHgwMDAxLAogICAg RFdfTEFOR19DID0gMHgwMDAyLAogICAgRFdfTEFOR19BZGE4MyA9IDB4MDAwMywKICAgIERXX0xB TkdfQ19wbHVzX3BsdXMgPSAweDAwMDQsCiAgICBEV19MQU5HX0NvYm9sNzQgPSAweDAwMDUsCiAg ICBEV19MQU5HX0NvYm9sODUgPSAweDAwMDYsCiAgICBEV19MQU5HX0ZvcnRyYW43NyA9IDB4MDAw NywKICAgIERXX0xBTkdfRm9ydHJhbjkwID0gMHgwMDA4LAogICAgRFdfTEFOR19QYXNjYWw4MyA9 IDB4MDAwOSwKICAgIERXX0xBTkdfTW9kdWxhMiA9IDB4MDAwYSwKICAgIERXX0xBTkdfSmF2YSA9 IDB4MDAwYiwKCiAgICBEV19MQU5HX0M5OSA9IDB4MDAwYywKICAgIERXX0xBTkdfQWRhOTUgPSAw eDAwMGQsCiAgICBEV19MQU5HX0ZvcnRyYW45NSA9IDB4MDAwZSwKCiAgICBEV19MQU5HX01pcHNf QXNzZW1ibGVyID0gMHg4MDAxLAoKICAgIERXX0xBTkdfVXBjID0gMHg4NzY1CiAgfTsKCgoKCgpl bnVtIGR3YXJmX21hY2luZm9fcmVjb3JkX3R5cGUKICB7CiAgICBEV19NQUNJTkZPX2RlZmluZSA9 IDEsCiAgICBEV19NQUNJTkZPX3VuZGVmID0gMiwKICAgIERXX01BQ0lORk9fc3RhcnRfZmlsZSA9 IDMsCiAgICBEV19NQUNJTkZPX2VuZF9maWxlID0gNCwKICAgIERXX01BQ0lORk9fdmVuZG9yX2V4 dCA9IDI1NQogIH07CiMgNDUgInJlYWRlbGYuYyIgMgoKCgoKCgoKIyAxICIuLi9pbmNsdWRlL2Vs Zi9hbHBoYS5oIiAxCiMgNTEgIi4uL2luY2x1ZGUvZWxmL2FscGhhLmgiCnR5cGVkZWYgc3RydWN0 CnsKCiAgdW5zaWduZWQgbG9uZyByaV9ncHJtYXNrOwoKICB1bnNpZ25lZCBsb25nIHJpX2Nwcm1h c2tbNF07CgogIGxvbmcgcmlfZ3BfdmFsdWU7Cn0gRWxmNjRfUmVnSW5mbzsKCgoKCgoKIyAxICIu Li9pbmNsdWRlL2VsZi9yZWxvYy1tYWNyb3MuaCIgMQojIDY3ICIuLi9pbmNsdWRlL2VsZi9hbHBo YS5oIiAyCgoKc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfYWxwaGFfcmVsb2NfdHlwZSAodW5zaWdu ZWQgbG9uZyBydHlwZSk7IHN0YXRpYyBjb25zdCBjaGFyICogZWxmX2FscGhhX3JlbG9jX3R5cGUg KHJ0eXBlKSB1bnNpZ25lZCBsb25nIHJ0eXBlOyB7IHN3aXRjaCAocnR5cGUpIHsKICBjYXNlIDAg OiByZXR1cm4gIlJfQUxQSEFfTk9ORSIgOwogIGNhc2UgMSA6IHJldHVybiAiUl9BTFBIQV9SRUZM T05HIiA7CiAgY2FzZSAyIDogcmV0dXJuICJSX0FMUEhBX1JFRlFVQUQiIDsKICBjYXNlIDMgOiBy ZXR1cm4gIlJfQUxQSEFfR1BSRUwzMiIgOwogIGNhc2UgNCA6IHJldHVybiAiUl9BTFBIQV9MSVRF UkFMIiA7CiAgY2FzZSA1IDogcmV0dXJuICJSX0FMUEhBX0xJVFVTRSIgOwogIGNhc2UgNiA6IHJl dHVybiAiUl9BTFBIQV9HUERJU1AiIDsKICBjYXNlIDcgOiByZXR1cm4gIlJfQUxQSEFfQlJBRERS IiA7CiAgY2FzZSA4IDogcmV0dXJuICJSX0FMUEhBX0hJTlQiIDsKICBjYXNlIDkgOiByZXR1cm4g IlJfQUxQSEFfU1JFTDE2IiA7CiAgY2FzZSAxMCA6IHJldHVybiAiUl9BTFBIQV9TUkVMMzIiIDsK ICBjYXNlIDExIDogcmV0dXJuICJSX0FMUEhBX1NSRUw2NCIgOwoKCgogIGNhc2UgMTcgOiByZXR1 cm4gIlJfQUxQSEFfR1BSRUxISUdIIiA7CiAgY2FzZSAxOCA6IHJldHVybiAiUl9BTFBIQV9HUFJF TExPVyIgOwogIGNhc2UgMTkgOiByZXR1cm4gIlJfQUxQSEFfR1BSRUwxNiIgOwoKCgoKICBjYXNl IDI0IDogcmV0dXJuICJSX0FMUEhBX0NPUFkiIDsKICBjYXNlIDI1IDogcmV0dXJuICJSX0FMUEhB X0dMT0JfREFUIiA7CiAgY2FzZSAyNiA6IHJldHVybiAiUl9BTFBIQV9KTVBfU0xPVCIgOwogIGNh c2UgMjcgOiByZXR1cm4gIlJfQUxQSEFfUkVMQVRJVkUiIDsKCgoKCiAgY2FzZSAyOCA6IHJldHVy biAiUl9BTFBIQV9CUlNHUCIgOwoKCiAgY2FzZSAyOSA6IHJldHVybiAiUl9BTFBIQV9UTFNHRCIg OwogIGNhc2UgMzAgOiByZXR1cm4gIlJfQUxQSEFfVExTTERNIiA7CiAgY2FzZSAzMSA6IHJldHVy biAiUl9BTFBIQV9EVFBNT0Q2NCIgOwogIGNhc2UgMzIgOiByZXR1cm4gIlJfQUxQSEFfR09URFRQ UkVMIiA7CiAgY2FzZSAzMyA6IHJldHVybiAiUl9BTFBIQV9EVFBSRUw2NCIgOwogIGNhc2UgMzQg OiByZXR1cm4gIlJfQUxQSEFfRFRQUkVMSEkiIDsKICBjYXNlIDM1IDogcmV0dXJuICJSX0FMUEhB X0RUUFJFTExPIiA7CiAgY2FzZSAzNiA6IHJldHVybiAiUl9BTFBIQV9EVFBSRUwxNiIgOwogIGNh c2UgMzcgOiByZXR1cm4gIlJfQUxQSEFfR09UVFBSRUwiIDsKICBjYXNlIDM4IDogcmV0dXJuICJS X0FMUEhBX1RQUkVMNjQiIDsKICBjYXNlIDM5IDogcmV0dXJuICJSX0FMUEhBX1RQUkVMSEkiIDsK ICBjYXNlIDQwIDogcmV0dXJuICJSX0FMUEhBX1RQUkVMTE8iIDsKICBjYXNlIDQxIDogcmV0dXJu ICJSX0FMUEhBX1RQUkVMMTYiIDsKCmRlZmF1bHQ6IHJldHVybiAoKHZvaWQgKikwKTsgfSB9CiMg NTMgInJlYWRlbGYuYyIgMgojIDEgIi4uL2luY2x1ZGUvZWxmL2FyYy5oIiAxCiMgMzAgIi4uL2lu Y2x1ZGUvZWxmL2FyYy5oIgpzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9hcmNfcmVsb2NfdHlwZSAo dW5zaWduZWQgbG9uZyBydHlwZSk7IHN0YXRpYyBjb25zdCBjaGFyICogZWxmX2FyY19yZWxvY190 eXBlIChydHlwZSkgdW5zaWduZWQgbG9uZyBydHlwZTsgeyBzd2l0Y2ggKHJ0eXBlKSB7CiAgY2Fz ZSAwIDogcmV0dXJuICJSX0FSQ19OT05FIiA7CiAgY2FzZSAxIDogcmV0dXJuICJSX0FSQ18zMiIg OwogIGNhc2UgMiA6IHJldHVybiAiUl9BUkNfQjI2IiA7CiAgY2FzZSAzIDogcmV0dXJuICJSX0FS Q19CMjJfUENSRUwiIDsKZGVmYXVsdDogcmV0dXJuICgodm9pZCAqKTApOyB9IH0KIyA1NCAicmVh ZGVsZi5jIiAyCiMgMSAiLi4vaW5jbHVkZS9lbGYvYXJtLmgiIDEKIyA3MyAiLi4vaW5jbHVkZS9l bGYvYXJtLmgiCnN0YXRpYyBjb25zdCBjaGFyICogZWxmX2FybV9yZWxvY190eXBlICh1bnNpZ25l ZCBsb25nIHJ0eXBlKTsgc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfYXJtX3JlbG9jX3R5cGUgKHJ0 eXBlKSB1bnNpZ25lZCBsb25nIHJ0eXBlOyB7IHN3aXRjaCAocnR5cGUpIHsKICBjYXNlIDAgOiBy ZXR1cm4gIlJfQVJNX05PTkUiIDsKICBjYXNlIDEgOiByZXR1cm4gIlJfQVJNX1BDMjQiIDsKICBj YXNlIDIgOiByZXR1cm4gIlJfQVJNX0FCUzMyIiA7CiAgY2FzZSAzIDogcmV0dXJuICJSX0FSTV9S RUwzMiIgOwojIDkxICIuLi9pbmNsdWRlL2VsZi9hcm0uaCIKICBjYXNlIDQgOiByZXR1cm4gIlJf QVJNX1BDMTMiIDsKICBjYXNlIDUgOiByZXR1cm4gIlJfQVJNX0FCUzE2IiA7CiAgY2FzZSA2IDog cmV0dXJuICJSX0FSTV9BQlMxMiIgOwogIGNhc2UgNyA6IHJldHVybiAiUl9BUk1fVEhNX0FCUzUi IDsKICBjYXNlIDggOiByZXR1cm4gIlJfQVJNX0FCUzgiIDsKICBjYXNlIDkgOiByZXR1cm4gIlJf QVJNX1NCUkVMMzIiIDsKICBjYXNlIDEwIDogcmV0dXJuICJSX0FSTV9USE1fUEMyMiIgOwogIGNh c2UgMTEgOiByZXR1cm4gIlJfQVJNX1RITV9QQzgiIDsKICBjYXNlIDEyIDogcmV0dXJuICJSX0FS TV9BTVBfVkNBTEw5IiA7CiAgY2FzZSAxMyA6IHJldHVybiAiUl9BUk1fU1dJMjQiIDsKICBjYXNl IDE0IDogcmV0dXJuICJSX0FSTV9USE1fU1dJOCIgOwogIGNhc2UgMTUgOiByZXR1cm4gIlJfQVJN X1hQQzI1IiA7CiAgY2FzZSAxNiA6IHJldHVybiAiUl9BUk1fVEhNX1hQQzIyIiA7CgogIGNhc2Ug MjAgOiByZXR1cm4gIlJfQVJNX0NPUFkiIDsKICBjYXNlIDIxIDogcmV0dXJuICJSX0FSTV9HTE9C X0RBVCIgOwogIGNhc2UgMjIgOiByZXR1cm4gIlJfQVJNX0pVTVBfU0xPVCIgOwogIGNhc2UgMjMg OiByZXR1cm4gIlJfQVJNX1JFTEFUSVZFIiA7CiAgY2FzZSAyNCA6IHJldHVybiAiUl9BUk1fR09U T0ZGIiA7CiAgY2FzZSAyNSA6IHJldHVybiAiUl9BUk1fR09UUEMiIDsKICBjYXNlIDI2IDogcmV0 dXJuICJSX0FSTV9HT1QzMiIgOwogIGNhc2UgMjcgOiByZXR1cm4gIlJfQVJNX1BMVDMyIiA7CgoK CgogCiAKICBjYXNlIDMyIDogcmV0dXJuICJSX0FSTV9BTFVfUENSRUw3XzAiIDsKICBjYXNlIDMz IDogcmV0dXJuICJSX0FSTV9BTFVfUENSRUwxNV84IiA7CiAgY2FzZSAzNCA6IHJldHVybiAiUl9B Uk1fQUxVX1BDUkVMMjNfMTUiIDsKICBjYXNlIDM1IDogcmV0dXJuICJSX0FSTV9MRFJfU0JSRUwx MV8wIiA7CiAgY2FzZSAzNiA6IHJldHVybiAiUl9BUk1fQUxVX1NCUkVMMTlfMTIiIDsKICBjYXNl IDM3IDogcmV0dXJuICJSX0FSTV9BTFVfU0JSRUwyN18yMCIgOwogCiAKICBjYXNlIDEwMCA6IHJl dHVybiAiUl9BUk1fR05VX1ZURU5UUlkiIDsKICBjYXNlIDEwMSA6IHJldHVybiAiUl9BUk1fR05V X1ZUSU5IRVJJVCIgOwogIGNhc2UgMTAyIDogcmV0dXJuICJSX0FSTV9USE1fUEMxMSIgOwogIGNh c2UgMTAzIDogcmV0dXJuICJSX0FSTV9USE1fUEM5IiA7CiAKIAogIGNhc2UgMjQ5IDogcmV0dXJu ICJSX0FSTV9SWFBDMjUiIDsKCiAgY2FzZSAyNTAgOiByZXR1cm4gIlJfQVJNX1JTQlJFTDMyIiA7 CiAgY2FzZSAyNTEgOiByZXR1cm4gIlJfQVJNX1RITV9SUEMyMiIgOwogIGNhc2UgMjUyIDogcmV0 dXJuICJSX0FSTV9SUkVMMzIiIDsKICBjYXNlIDI1MyA6IHJldHVybiAiUl9BUk1fUkFCUzMyIiA7 CiAgY2FzZSAyNTQgOiByZXR1cm4gIlJfQVJNX1JQQzI0IiA7CiAgY2FzZSAyNTUgOiByZXR1cm4g IlJfQVJNX1JCQVNFIiA7CmRlZmF1bHQ6IHJldHVybiAoKHZvaWQgKikwKTsgfSB9CiMgNTUgInJl YWRlbGYuYyIgMgojIDEgIi4uL2luY2x1ZGUvZWxmL2F2ci5oIiAxCiMgMzYgIi4uL2luY2x1ZGUv ZWxmL2F2ci5oIgpzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9hdnJfcmVsb2NfdHlwZSAodW5zaWdu ZWQgbG9uZyBydHlwZSk7IHN0YXRpYyBjb25zdCBjaGFyICogZWxmX2F2cl9yZWxvY190eXBlIChy dHlwZSkgdW5zaWduZWQgbG9uZyBydHlwZTsgeyBzd2l0Y2ggKHJ0eXBlKSB7CiAgICAgY2FzZSAw IDogcmV0dXJuICJSX0FWUl9OT05FIiA7CiAgICAgY2FzZSAxIDogcmV0dXJuICJSX0FWUl8zMiIg OwogICAgIGNhc2UgMiA6IHJldHVybiAiUl9BVlJfN19QQ1JFTCIgOwogICAgIGNhc2UgMyA6IHJl dHVybiAiUl9BVlJfMTNfUENSRUwiIDsKICAgICBjYXNlIDQgOiByZXR1cm4gIlJfQVZSXzE2IiA7 CiAgICAgY2FzZSA1IDogcmV0dXJuICJSX0FWUl8xNl9QTSIgOwogICAgIGNhc2UgNiA6IHJldHVy biAiUl9BVlJfTE84X0xESSIgOwogICAgIGNhc2UgNyA6IHJldHVybiAiUl9BVlJfSEk4X0xESSIg OwogICAgIGNhc2UgOCA6IHJldHVybiAiUl9BVlJfSEg4X0xESSIgOwogICAgIGNhc2UgOSA6IHJl dHVybiAiUl9BVlJfTE84X0xESV9ORUciIDsKICAgICBjYXNlIDEwIDogcmV0dXJuICJSX0FWUl9I SThfTERJX05FRyIgOwogICAgIGNhc2UgMTEgOiByZXR1cm4gIlJfQVZSX0hIOF9MRElfTkVHIiA7 CiAgICAgY2FzZSAxMiA6IHJldHVybiAiUl9BVlJfTE84X0xESV9QTSIgOwogICAgIGNhc2UgMTMg OiByZXR1cm4gIlJfQVZSX0hJOF9MRElfUE0iIDsKICAgICBjYXNlIDE0IDogcmV0dXJuICJSX0FW Ul9ISDhfTERJX1BNIiA7CiAgICAgY2FzZSAxNSA6IHJldHVybiAiUl9BVlJfTE84X0xESV9QTV9O RUciIDsKICAgICBjYXNlIDE2IDogcmV0dXJuICJSX0FWUl9ISThfTERJX1BNX05FRyIgOwogICAg IGNhc2UgMTcgOiByZXR1cm4gIlJfQVZSX0hIOF9MRElfUE1fTkVHIiA7CiAgICAgY2FzZSAxOCA6 IHJldHVybiAiUl9BVlJfQ0FMTCIgOwpkZWZhdWx0OiByZXR1cm4gKCh2b2lkICopMCk7IH0gfQoj IDU2ICJyZWFkZWxmLmMiIDIKIyAxICIuLi9pbmNsdWRlL2VsZi9jcmlzLmgiIDEKIyAyOCAiLi4v aW5jbHVkZS9lbGYvY3Jpcy5oIgpzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9jcmlzX3JlbG9jX3R5 cGUgKHVuc2lnbmVkIGxvbmcgcnR5cGUpOyBzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9jcmlzX3Jl bG9jX3R5cGUgKHJ0eXBlKSB1bnNpZ25lZCBsb25nIHJ0eXBlOyB7IHN3aXRjaCAocnR5cGUpIHsK ICBjYXNlIDAgOiByZXR1cm4gIlJfQ1JJU19OT05FIiA7CiAgY2FzZSAxIDogcmV0dXJuICJSX0NS SVNfOCIgOwogIGNhc2UgMiA6IHJldHVybiAiUl9DUklTXzE2IiA7CiAgY2FzZSAzIDogcmV0dXJu ICJSX0NSSVNfMzIiIDsKCgogIGNhc2UgNCA6IHJldHVybiAiUl9DUklTXzhfUENSRUwiIDsKICBj YXNlIDUgOiByZXR1cm4gIlJfQ1JJU18xNl9QQ1JFTCIgOwogIGNhc2UgNiA6IHJldHVybiAiUl9D UklTXzMyX1BDUkVMIiA7CgogIGNhc2UgNyA6IHJldHVybiAiUl9DUklTX0dOVV9WVElOSEVSSVQi IDsKICBjYXNlIDggOiByZXR1cm4gIlJfQ1JJU19HTlVfVlRFTlRSWSIgOwoKCgogIGNhc2UgOSA6 IHJldHVybiAiUl9DUklTX0NPUFkiIDsKCgoKICBjYXNlIDEwIDogcmV0dXJuICJSX0NSSVNfR0xP Ql9EQVQiIDsKCgoKICBjYXNlIDExIDogcmV0dXJuICJSX0NSSVNfSlVNUF9TTE9UIiA7CgoKCiAg Y2FzZSAxMiA6IHJldHVybiAiUl9DUklTX1JFTEFUSVZFIiA7CgoKCgogIGNhc2UgMTMgOiByZXR1 cm4gIlJfQ1JJU18xNl9HT1QiIDsKCgoKCiAgY2FzZSAxNCA6IHJldHVybiAiUl9DUklTXzMyX0dP VCIgOwoKCgoKICBjYXNlIDE1IDogcmV0dXJuICJSX0NSSVNfMTZfR09UUExUIiA7CgoKCgogIGNh c2UgMTYgOiByZXR1cm4gIlJfQ1JJU18zMl9HT1RQTFQiIDsKCgoKCiAgY2FzZSAxNyA6IHJldHVy biAiUl9DUklTXzMyX0dPVFJFTCIgOwoKCgoKICBjYXNlIDE4IDogcmV0dXJuICJSX0NSSVNfMzJf UExUX0dPVFJFTCIgOwoKCgoKCiAgY2FzZSAxOSA6IHJldHVybiAiUl9DUklTXzMyX1BMVF9QQ1JF TCIgOwoKCgpkZWZhdWx0OiByZXR1cm4gKCh2b2lkICopMCk7IH0gfQojIDU3ICJyZWFkZWxmLmMi IDIKIyAxICIuLi9pbmNsdWRlL2VsZi9kMTB2LmgiIDEKIyAyNiAiLi4vaW5jbHVkZS9lbGYvZDEw di5oIgpzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9kMTB2X3JlbG9jX3R5cGUgKHVuc2lnbmVkIGxv bmcgcnR5cGUpOyBzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9kMTB2X3JlbG9jX3R5cGUgKHJ0eXBl KSB1bnNpZ25lZCBsb25nIHJ0eXBlOyB7IHN3aXRjaCAocnR5cGUpIHsKICBjYXNlIDAgOiByZXR1 cm4gIlJfRDEwVl9OT05FIiA7CiAgY2FzZSAxIDogcmV0dXJuICJSX0QxMFZfMTBfUENSRUxfUiIg OwogIGNhc2UgMiA6IHJldHVybiAiUl9EMTBWXzEwX1BDUkVMX0wiIDsKICBjYXNlIDMgOiByZXR1 cm4gIlJfRDEwVl8xNiIgOwogIGNhc2UgNCA6IHJldHVybiAiUl9EMTBWXzE4IiA7CiAgY2FzZSA1 IDogcmV0dXJuICJSX0QxMFZfMThfUENSRUwiIDsKICBjYXNlIDYgOiByZXR1cm4gIlJfRDEwVl8z MiIgOwogIGNhc2UgNyA6IHJldHVybiAiUl9EMTBWX0dOVV9WVElOSEVSSVQiIDsKICBjYXNlIDgg OiByZXR1cm4gIlJfRDEwVl9HTlVfVlRFTlRSWSIgOwpkZWZhdWx0OiByZXR1cm4gKCh2b2lkICop MCk7IH0gfQojIDU4ICJyZWFkZWxmLmMiIDIKIyAxICIuLi9pbmNsdWRlL2VsZi9kMzB2LmgiIDEK IyAyNiAiLi4vaW5jbHVkZS9lbGYvZDMwdi5oIgpzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9kMzB2 X3JlbG9jX3R5cGUgKHVuc2lnbmVkIGxvbmcgcnR5cGUpOyBzdGF0aWMgY29uc3QgY2hhciAqIGVs Zl9kMzB2X3JlbG9jX3R5cGUgKHJ0eXBlKSB1bnNpZ25lZCBsb25nIHJ0eXBlOyB7IHN3aXRjaCAo cnR5cGUpIHsKICBjYXNlIDAgOiByZXR1cm4gIlJfRDMwVl9OT05FIiA7CiAgY2FzZSAxIDogcmV0 dXJuICJSX0QzMFZfNiIgOwogIGNhc2UgMiA6IHJldHVybiAiUl9EMzBWXzlfUENSRUwiIDsKICBj YXNlIDMgOiByZXR1cm4gIlJfRDMwVl85X1BDUkVMX1IiIDsKICBjYXNlIDQgOiByZXR1cm4gIlJf RDMwVl8xNSIgOwogIGNhc2UgNSA6IHJldHVybiAiUl9EMzBWXzE1X1BDUkVMIiA7CiAgY2FzZSA2 IDogcmV0dXJuICJSX0QzMFZfMTVfUENSRUxfUiIgOwogIGNhc2UgNyA6IHJldHVybiAiUl9EMzBW XzIxIiA7CiAgY2FzZSA4IDogcmV0dXJuICJSX0QzMFZfMjFfUENSRUwiIDsKICBjYXNlIDkgOiBy ZXR1cm4gIlJfRDMwVl8yMV9QQ1JFTF9SIiA7CiAgY2FzZSAxMCA6IHJldHVybiAiUl9EMzBWXzMy IiA7CiAgY2FzZSAxMSA6IHJldHVybiAiUl9EMzBWXzMyX1BDUkVMIiA7CiAgY2FzZSAxMiA6IHJl dHVybiAiUl9EMzBWXzMyX05PUk1BTCIgOwpkZWZhdWx0OiByZXR1cm4gKCh2b2lkICopMCk7IH0g fQojIDU5ICJyZWFkZWxmLmMiIDIKIyAxICIuLi9pbmNsdWRlL2VsZi9kbHguaCIgMQojIDM5ICIu Li9pbmNsdWRlL2VsZi9kbHguaCIKc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfZGx4X3JlbG9jX3R5 cGUgKHVuc2lnbmVkIGxvbmcgcnR5cGUpOyBzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9kbHhfcmVs b2NfdHlwZSAocnR5cGUpIHVuc2lnbmVkIGxvbmcgcnR5cGU7IHsgc3dpdGNoIChydHlwZSkgewog ICAgIGNhc2UgMCA6IHJldHVybiAiUl9ETFhfTk9ORSIgOwogICAgIGNhc2UgMSA6IHJldHVybiAi Ul9ETFhfUkVMT0NfOCIgOwogICAgIGNhc2UgMiA6IHJldHVybiAiUl9ETFhfUkVMT0NfMTYiIDsK ICAgICBjYXNlIDMgOiByZXR1cm4gIlJfRExYX1JFTE9DXzMyIiA7CiAgICAgY2FzZSA0IDogcmV0 dXJuICJSX0RMWF9HTlVfVlRJTkhFUklUIiA7CiAgICAgY2FzZSA1IDogcmV0dXJuICJSX0RMWF9H TlVfVlRFTlRSWSIgOwogICAgIGNhc2UgNiA6IHJldHVybiAiUl9ETFhfUkVMT0NfMTZfSEkiIDsK ICAgICBjYXNlIDcgOiByZXR1cm4gIlJfRExYX1JFTE9DXzE2X0xPIiA7CiAgICAgY2FzZSA4IDog cmV0dXJuICJSX0RMWF9SRUxPQ18xNl9QQ1JFTCIgOwogICAgIGNhc2UgOSA6IHJldHVybiAiUl9E TFhfUkVMT0NfMjZfUENSRUwiIDsKZGVmYXVsdDogcmV0dXJuICgodm9pZCAqKTApOyB9IH0KIyA2 MCAicmVhZGVsZi5jIiAyCiMgMSAiLi4vaW5jbHVkZS9lbGYvZnIzMC5oIiAxCiMgMjYgIi4uL2lu Y2x1ZGUvZWxmL2ZyMzAuaCIKc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfZnIzMF9yZWxvY190eXBl ICh1bnNpZ25lZCBsb25nIHJ0eXBlKTsgc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfZnIzMF9yZWxv Y190eXBlIChydHlwZSkgdW5zaWduZWQgbG9uZyBydHlwZTsgeyBzd2l0Y2ggKHJ0eXBlKSB7CiAg Y2FzZSAwIDogcmV0dXJuICJSX0ZSMzBfTk9ORSIgOwogIGNhc2UgMSA6IHJldHVybiAiUl9GUjMw XzgiIDsKICBjYXNlIDIgOiByZXR1cm4gIlJfRlIzMF8yMCIgOwogIGNhc2UgMyA6IHJldHVybiAi Ul9GUjMwXzMyIiA7CiAgY2FzZSA0IDogcmV0dXJuICJSX0ZSMzBfNDgiIDsKICBjYXNlIDUgOiBy ZXR1cm4gIlJfRlIzMF82X0lOXzQiIDsKICBjYXNlIDYgOiByZXR1cm4gIlJfRlIzMF84X0lOXzgi IDsKICBjYXNlIDcgOiByZXR1cm4gIlJfRlIzMF85X0lOXzgiIDsKICBjYXNlIDggOiByZXR1cm4g IlJfRlIzMF8xMF9JTl84IiA7CiAgY2FzZSA5IDogcmV0dXJuICJSX0ZSMzBfOV9QQ1JFTCIgOwog IGNhc2UgMTAgOiByZXR1cm4gIlJfRlIzMF8xMl9QQ1JFTCIgOwogIGNhc2UgMTEgOiByZXR1cm4g IlJfRlIzMF9HTlVfVlRJTkhFUklUIiA7CiAgY2FzZSAxMiA6IHJldHVybiAiUl9GUjMwX0dOVV9W VEVOVFJZIiA7CmRlZmF1bHQ6IHJldHVybiAoKHZvaWQgKikwKTsgfSB9CiMgNjEgInJlYWRlbGYu YyIgMgojIDEgIi4uL2luY2x1ZGUvZWxmL2Zydi5oIiAxCiMgMjYgIi4uL2luY2x1ZGUvZWxmL2Zy di5oIgpzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9mcnZfcmVsb2NfdHlwZSAodW5zaWduZWQgbG9u ZyBydHlwZSk7IHN0YXRpYyBjb25zdCBjaGFyICogZWxmX2Zydl9yZWxvY190eXBlIChydHlwZSkg dW5zaWduZWQgbG9uZyBydHlwZTsgeyBzd2l0Y2ggKHJ0eXBlKSB7CiAgY2FzZSAwIDogcmV0dXJu ICJSX0ZSVl9OT05FIiA7CiAgY2FzZSAxIDogcmV0dXJuICJSX0ZSVl8zMiIgOwogIGNhc2UgMiA6 IHJldHVybiAiUl9GUlZfTEFCRUwxNiIgOwogIGNhc2UgMyA6IHJldHVybiAiUl9GUlZfTEFCRUwy NCIgOwogIGNhc2UgNCA6IHJldHVybiAiUl9GUlZfTE8xNiIgOwogIGNhc2UgNSA6IHJldHVybiAi Ul9GUlZfSEkxNiIgOwogIGNhc2UgNiA6IHJldHVybiAiUl9GUlZfR1BSRUwxMiIgOwogIGNhc2Ug NyA6IHJldHVybiAiUl9GUlZfR1BSRUxVMTIiIDsKICBjYXNlIDggOiByZXR1cm4gIlJfRlJWX0dQ UkVMMzIiIDsKICBjYXNlIDkgOiByZXR1cm4gIlJfRlJWX0dQUkVMSEkiIDsKICBjYXNlIDEwIDog cmV0dXJuICJSX0ZSVl9HUFJFTExPIiA7CiAgY2FzZSAyMDAgOiByZXR1cm4gIlJfRlJWX0dOVV9W VElOSEVSSVQiIDsKICBjYXNlIDIwMSA6IHJldHVybiAiUl9GUlZfR05VX1ZURU5UUlkiIDsKZGVm YXVsdDogcmV0dXJuICgodm9pZCAqKTApOyB9IH0KIyA2MiAicmVhZGVsZi5jIiAyCiMgMSAiLi4v aW5jbHVkZS9lbGYvaDguaCIgMQojIDI3ICIuLi9pbmNsdWRlL2VsZi9oOC5oIgpzdGF0aWMgY29u c3QgY2hhciAqIGVsZl9oOF9yZWxvY190eXBlICh1bnNpZ25lZCBsb25nIHJ0eXBlKTsgc3RhdGlj IGNvbnN0IGNoYXIgKiBlbGZfaDhfcmVsb2NfdHlwZSAocnR5cGUpIHVuc2lnbmVkIGxvbmcgcnR5 cGU7IHsgc3dpdGNoIChydHlwZSkgewogIGNhc2UgMCA6IHJldHVybiAiUl9IOF9OT05FIiA7CiAg Y2FzZSAxIDogcmV0dXJuICJSX0g4X0RJUjMyIiA7CiAgY2FzZSAyIDogcmV0dXJuICJSX0g4X0RJ UjMyXzI4IiA7CiAgY2FzZSAzIDogcmV0dXJuICJSX0g4X0RJUjMyXzI0IiA7CiAgY2FzZSA0IDog cmV0dXJuICJSX0g4X0RJUjMyXzE2IiA7CiAgY2FzZSA2IDogcmV0dXJuICJSX0g4X0RJUjMyVSIg OwogIGNhc2UgNyA6IHJldHVybiAiUl9IOF9ESVIzMlVfMjgiIDsKICBjYXNlIDggOiByZXR1cm4g IlJfSDhfRElSMzJVXzI0IiA7CiAgY2FzZSA5IDogcmV0dXJuICJSX0g4X0RJUjMyVV8yMCIgOwog IGNhc2UgMTAgOiByZXR1cm4gIlJfSDhfRElSMzJVXzE2IiA7CiAgY2FzZSAxMSA6IHJldHVybiAi Ul9IOF9ESVIyNCIgOwogIGNhc2UgMTIgOiByZXR1cm4gIlJfSDhfRElSMjRfMjAiIDsKICBjYXNl IDEzIDogcmV0dXJuICJSX0g4X0RJUjI0XzE2IiA7CiAgY2FzZSAxNCA6IHJldHVybiAiUl9IOF9E SVIyNFUiIDsKICBjYXNlIDE1IDogcmV0dXJuICJSX0g4X0RJUjI0VV8yMCIgOwogIGNhc2UgMTYg OiByZXR1cm4gIlJfSDhfRElSMjRVXzE2IiA7CiAgY2FzZSAxNyA6IHJldHVybiAiUl9IOF9ESVIx NiIgOwogIGNhc2UgMTggOiByZXR1cm4gIlJfSDhfRElSMTZVIiA7CiAgY2FzZSAxOSA6IHJldHVy biAiUl9IOF9ESVIxNlNfMzIiIDsKICBjYXNlIDIwIDogcmV0dXJuICJSX0g4X0RJUjE2U18yOCIg OwogIGNhc2UgMjEgOiByZXR1cm4gIlJfSDhfRElSMTZTXzI0IiA7CiAgY2FzZSAyMiA6IHJldHVy biAiUl9IOF9ESVIxNlNfMjAiIDsKICBjYXNlIDIzIDogcmV0dXJuICJSX0g4X0RJUjE2UyIgOwog IGNhc2UgMjQgOiByZXR1cm4gIlJfSDhfRElSOCIgOwogIGNhc2UgMjUgOiByZXR1cm4gIlJfSDhf RElSOFUiIDsKICBjYXNlIDI2IDogcmV0dXJuICJSX0g4X0RJUjhaXzMyIiA7CiAgY2FzZSAyNyA6 IHJldHVybiAiUl9IOF9ESVI4Wl8yOCIgOwogIGNhc2UgMjggOiByZXR1cm4gIlJfSDhfRElSOFpf MjQiIDsKICBjYXNlIDI5IDogcmV0dXJuICJSX0g4X0RJUjhaXzIwIiA7CiAgY2FzZSAzMCA6IHJl dHVybiAiUl9IOF9ESVI4Wl8xNiIgOwogIGNhc2UgMzEgOiByZXR1cm4gIlJfSDhfUENSRUwxNiIg OwogIGNhc2UgMzIgOiByZXR1cm4gIlJfSDhfUENSRUw4IiA7CiAgY2FzZSAzMyA6IHJldHVybiAi Ul9IOF9CUE9TIiA7CiAKIAogIGNhc2UgNTkgOiByZXR1cm4gIlJfSDhfRElSMTZBOCIgOwogIGNh c2UgNjAgOiByZXR1cm4gIlJfSDhfRElSMTZSOCIgOwogIGNhc2UgNjEgOiByZXR1cm4gIlJfSDhf RElSMjRBOCIgOwogIGNhc2UgNjIgOiByZXR1cm4gIlJfSDhfRElSMjRSOCIgOwogIGNhc2UgNjMg OiByZXR1cm4gIlJfSDhfRElSMzJBMTYiIDsKICBjYXNlIDY1IDogcmV0dXJuICJSX0g4X0FCUzMy IiA7CiAgY2FzZSAxMjcgOiByZXR1cm4gIlJfSDhfQUJTMzJBMTYiIDsKICBjYXNlIDEyOCA6IHJl dHVybiAiUl9IOF9TWU0iIDsKICBjYXNlIDEyOSA6IHJldHVybiAiUl9IOF9PUG5lZyIgOwogIGNh c2UgMTMwIDogcmV0dXJuICJSX0g4X09QYWRkIiA7CiAgY2FzZSAxMzEgOiByZXR1cm4gIlJfSDhf T1BzdWIiIDsKICBjYXNlIDEzMiA6IHJldHVybiAiUl9IOF9PUG11bCIgOwogIGNhc2UgMTMzIDog cmV0dXJuICJSX0g4X09QZGl2IiA7CiAgY2FzZSAxMzQgOiByZXR1cm4gIlJfSDhfT1BzaGxhIiA7 CiAgY2FzZSAxMzUgOiByZXR1cm4gIlJfSDhfT1BzaHJhIiA7CiAgY2FzZSAxMzYgOiByZXR1cm4g IlJfSDhfT1BzY3RzaXplIiA7CiAgY2FzZSAxMzcgOiByZXR1cm4gIlJfSDhfT1Bod29yZCIgOwog IGNhc2UgMTM4IDogcmV0dXJuICJSX0g4X09QbHdvcmQiIDsKICBjYXNlIDEzOSA6IHJldHVybiAi Ul9IOF9PUGhpZ2giIDsKICBjYXNlIDE0MCA6IHJldHVybiAiUl9IOF9PUGxvdyIgOwogIGNhc2Ug MTQxIDogcmV0dXJuICJSX0g4X09Qc2N0dG9wIiA7CmRlZmF1bHQ6IHJldHVybiAoKHZvaWQgKikw KTsgfSB9CiMgNjMgInJlYWRlbGYuYyIgMgojIDEgIi4uL2luY2x1ZGUvZWxmL2hwcGEuaCIgMQoj IDEwNSAiLi4vaW5jbHVkZS9lbGYvaHBwYS5oIgpzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9ocHBh X3JlbG9jX3R5cGUgKHVuc2lnbmVkIGxvbmcgcnR5cGUpOyBzdGF0aWMgY29uc3QgY2hhciAqIGVs Zl9ocHBhX3JlbG9jX3R5cGUgKHJ0eXBlKSB1bnNpZ25lZCBsb25nIHJ0eXBlOyB7IHN3aXRjaCAo cnR5cGUpIHsKY2FzZSAwIDogcmV0dXJuICJSX1BBUklTQ19OT05FIiA7CgoKCmNhc2UgMSA6IHJl dHVybiAiUl9QQVJJU0NfRElSMzIiIDsKCgpjYXNlIDIgOiByZXR1cm4gIlJfUEFSSVNDX0RJUjIx TCIgOwoKCmNhc2UgMyA6IHJldHVybiAiUl9QQVJJU0NfRElSMTdSIiA7CgoKY2FzZSA0IDogcmV0 dXJuICJSX1BBUklTQ19ESVIxN0YiIDsKCgpjYXNlIDYgOiByZXR1cm4gIlJfUEFSSVNDX0RJUjE0 UiIgOwoKCmNhc2UgNyA6IHJldHVybiAiUl9QQVJJU0NfRElSMTRGIiA7CiMgMTQyICIuLi9pbmNs dWRlL2VsZi9ocHBhLmgiCmNhc2UgOCA6IHJldHVybiAiUl9QQVJJU0NfUENSRUwxMkYiIDsKCgpj YXNlIDkgOiByZXR1cm4gIlJfUEFSSVNDX1BDUkVMMzIiIDsKCgpjYXNlIDEwIDogcmV0dXJuICJS X1BBUklTQ19QQ1JFTDIxTCIgOwoKCmNhc2UgMTEgOiByZXR1cm4gIlJfUEFSSVNDX1BDUkVMMTdS IiA7CgoKY2FzZSAxMiA6IHJldHVybiAiUl9QQVJJU0NfUENSRUwxN0YiIDsKCgpjYXNlIDEzIDog cmV0dXJuICJSX1BBUklTQ19QQ1JFTDE3QyIgOwoKCmNhc2UgMTQgOiByZXR1cm4gIlJfUEFSSVND X1BDUkVMMTRSIiA7CgoKY2FzZSAxNSA6IHJldHVybiAiUl9QQVJJU0NfUENSRUwxNEYiIDsKCgoK CmNhc2UgMTggOiByZXR1cm4gIlJfUEFSSVNDX0RQUkVMMjFMIiA7CgoKY2FzZSAxOSA6IHJldHVy biAiUl9QQVJJU0NfRFBSRUwxNFdSIiA7CgoKY2FzZSAyMCA6IHJldHVybiAiUl9QQVJJU0NfRFBS RUwxNERSIiA7CgoKY2FzZSAyMiA6IHJldHVybiAiUl9QQVJJU0NfRFBSRUwxNFIiIDsKCgpjYXNl IDIzIDogcmV0dXJuICJSX1BBUklTQ19EUFJFTDE0RiIgOwojIDE5MCAiLi4vaW5jbHVkZS9lbGYv aHBwYS5oIgpjYXNlIDI2IDogcmV0dXJuICJSX1BBUklTQ19ETFRSRUwyMUwiIDsKCgpjYXNlIDMw IDogcmV0dXJuICJSX1BBUklTQ19ETFRSRUwxNFIiIDsKCgpjYXNlIDMxIDogcmV0dXJuICJSX1BB UklTQ19ETFRSRUwxNEYiIDsKCgoKCmNhc2UgMzQgOiByZXR1cm4gIlJfUEFSSVNDX0RMVElORDIx TCIgOwoKCmNhc2UgMzggOiByZXR1cm4gIlJfUEFSSVNDX0RMVElORDE0UiIgOwoKCmNhc2UgMzkg OiByZXR1cm4gIlJfUEFSSVNDX0RMVElORDE0RiIgOwoKCgoKY2FzZSA0MCA6IHJldHVybiAiUl9Q QVJJU0NfU0VUQkFTRSIgOwoKCmNhc2UgNDEgOiByZXR1cm4gIlJfUEFSSVNDX1NFQ1JFTDMyIiA7 CgoKY2FzZSA0MiA6IHJldHVybiAiUl9QQVJJU0NfQkFTRVJFTDIxTCIgOwoKCmNhc2UgNDMgOiBy ZXR1cm4gIlJfUEFSSVNDX0JBU0VSRUwxN1IiIDsKCgpjYXNlIDQ0IDogcmV0dXJuICJSX1BBUklT Q19CQVNFUkVMMTdGIiA7CgoKY2FzZSA0NiA6IHJldHVybiAiUl9QQVJJU0NfQkFTRVJFTDE0UiIg OwoKCmNhc2UgNDcgOiByZXR1cm4gIlJfUEFSSVNDX0JBU0VSRUwxNEYiIDsKCgoKCmNhc2UgNDgg OiByZXR1cm4gIlJfUEFSSVNDX1NFR0JBU0UiIDsKCgpjYXNlIDQ5IDogcmV0dXJuICJSX1BBUklT Q19TRUdSRUwzMiIgOwoKCgoKY2FzZSA1MCA6IHJldHVybiAiUl9QQVJJU0NfUExUT0ZGMjFMIiA7 CgoKY2FzZSA1NCA6IHJldHVybiAiUl9QQVJJU0NfUExUT0ZGMTRSIiA7CgoKY2FzZSA1NSA6IHJl dHVybiAiUl9QQVJJU0NfUExUT0ZGMTRGIiA7CgoKCmNhc2UgNTcgOiByZXR1cm4gIlJfUEFSSVND X0xUT0ZGX0ZQVFIzMiIgOwoKCmNhc2UgNTggOiByZXR1cm4gIlJfUEFSSVNDX0xUT0ZGX0ZQVFIy MUwiIDsKCgpjYXNlIDYyIDogcmV0dXJuICJSX1BBUklTQ19MVE9GRl9GUFRSMTRSIiA7CgoKCmNh c2UgNjQgOiByZXR1cm4gIlJfUEFSSVNDX0ZQVFI2NCIgOwoKCgoKY2FzZSA2NSA6IHJldHVybiAi Ul9QQVJJU0NfUExBQkVMMzIiIDsKCgpjYXNlIDY2IDogcmV0dXJuICJSX1BBUklTQ19QTEFCRUwy MUwiIDsKCgpjYXNlIDcwIDogcmV0dXJuICJSX1BBUklTQ19QTEFCRUwxNFIiIDsKCgoKCmNhc2Ug NzIgOiByZXR1cm4gIlJfUEFSSVNDX1BDUkVMNjQiIDsKCgpjYXNlIDczIDogcmV0dXJuICJSX1BB UklTQ19QQ1JFTDIyQyIgOwoKCmNhc2UgNzQgOiByZXR1cm4gIlJfUEFSSVNDX1BDUkVMMjJGIiA7 CgoKY2FzZSA3NSA6IHJldHVybiAiUl9QQVJJU0NfUENSRUwxNFdSIiA7CgoKY2FzZSA3NiA6IHJl dHVybiAiUl9QQVJJU0NfUENSRUwxNERSIiA7CgoKY2FzZSA3NyA6IHJldHVybiAiUl9QQVJJU0Nf UENSRUwxNkYiIDsKCgpjYXNlIDc4IDogcmV0dXJuICJSX1BBUklTQ19QQ1JFTDE2V0YiIDsKCgpj YXNlIDc5IDogcmV0dXJuICJSX1BBUklTQ19QQ1JFTDE2REYiIDsKCgoKY2FzZSA4MCA6IHJldHVy biAiUl9QQVJJU0NfRElSNjQiIDsKCgpjYXNlIDgxIDogcmV0dXJuICJSX1BBUklTQ19ESVI2NFdS IiA7CgoKY2FzZSA4MiA6IHJldHVybiAiUl9QQVJJU0NfRElSNjREUiIgOwoKCmNhc2UgODMgOiBy ZXR1cm4gIlJfUEFSSVNDX0RJUjE0V1IiIDsKCgpjYXNlIDg0IDogcmV0dXJuICJSX1BBUklTQ19E SVIxNERSIiA7CgoKY2FzZSA4NSA6IHJldHVybiAiUl9QQVJJU0NfRElSMTZGIiA7CgoKY2FzZSA4 NiA6IHJldHVybiAiUl9QQVJJU0NfRElSMTZXRiIgOwoKCmNhc2UgODcgOiByZXR1cm4gIlJfUEFS SVNDX0RJUjE2REYiIDsKCgpjYXNlIDg4IDogcmV0dXJuICJSX1BBUklTQ19HUFJFTDY0IiA7CgoK Y2FzZSA5MSA6IHJldHVybiAiUl9QQVJJU0NfRExUUkVMMTRXUiIgOwoKCmNhc2UgOTIgOiByZXR1 cm4gIlJfUEFSSVNDX0RMVFJFTDE0RFIiIDsKCgpjYXNlIDkzIDogcmV0dXJuICJSX1BBUklTQ19H UFJFTDE2RiIgOwoKCmNhc2UgOTQgOiByZXR1cm4gIlJfUEFSSVNDX0dQUkVMMTZXRiIgOwoKCmNh c2UgOTUgOiByZXR1cm4gIlJfUEFSSVNDX0dQUkVMMTZERiIgOwoKCgpjYXNlIDk2IDogcmV0dXJu ICJSX1BBUklTQ19MVE9GRjY0IiA7CgoKY2FzZSA5OSA6IHJldHVybiAiUl9QQVJJU0NfRExUSU5E MTRXUiIgOwoKCmNhc2UgMTAwIDogcmV0dXJuICJSX1BBUklTQ19ETFRJTkQxNERSIiA7CgoKY2Fz ZSAxMDEgOiByZXR1cm4gIlJfUEFSSVNDX0xUT0ZGMTZGIiA7CgoKY2FzZSAxMDIgOiByZXR1cm4g IlJfUEFSSVNDX0xUT0ZGMTZXRiIgOwoKCmNhc2UgMTAzIDogcmV0dXJuICJSX1BBUklTQ19MVE9G RjE2REYiIDsKCgoKY2FzZSAxMDQgOiByZXR1cm4gIlJfUEFSSVNDX1NFQ1JFTDY0IiA7CgoKY2Fz ZSAxMDcgOiByZXR1cm4gIlJfUEFSSVNDX0JBU0VSRUwxNFdSIiA7CgoKY2FzZSAxMDggOiByZXR1 cm4gIlJfUEFSSVNDX0JBU0VSRUwxNERSIiA7CgoKCmNhc2UgMTEyIDogcmV0dXJuICJSX1BBUklT Q19TRUdSRUw2NCIgOwoKCmNhc2UgMTE1IDogcmV0dXJuICJSX1BBUklTQ19QTFRPRkYxNFdSIiA7 CgoKY2FzZSAxMTYgOiByZXR1cm4gIlJfUEFSSVNDX1BMVE9GRjE0RFIiIDsKCgpjYXNlIDExNyA6 IHJldHVybiAiUl9QQVJJU0NfUExUT0ZGMTZGIiA7CgoKY2FzZSAxMTggOiByZXR1cm4gIlJfUEFS SVNDX1BMVE9GRjE2V0YiIDsKCgpjYXNlIDExOSA6IHJldHVybiAiUl9QQVJJU0NfUExUT0ZGMTZE RiIgOwoKCgpjYXNlIDEyMCA6IHJldHVybiAiUl9QQVJJU0NfTFRPRkZfRlBUUjY0IiA7CgoKY2Fz ZSAxMjMgOiByZXR1cm4gIlJfUEFSSVNDX0xUT0ZGX0ZQVFIxNFdSIiA7CgoKY2FzZSAxMjQgOiBy ZXR1cm4gIlJfUEFSSVNDX0xUT0ZGX0ZQVFIxNERSIiA7CgoKY2FzZSAxMjUgOiByZXR1cm4gIlJf UEFSSVNDX0xUT0ZGX0ZQVFIxNkYiIDsKCgpjYXNlIDEyNiA6IHJldHVybiAiUl9QQVJJU0NfTFRP RkZfRlBUUjE2V0YiIDsKCgpjYXNlIDEyNyA6IHJldHVybiAiUl9QQVJJU0NfTFRPRkZfRlBUUjE2 REYiIDsKCgoKY2FzZSAxMjggOiByZXR1cm4gIlJfUEFSSVNDX0NPUFkiIDsKCgpjYXNlIDEyOSA6 IHJldHVybiAiUl9QQVJJU0NfSVBMVCIgOwoKCmNhc2UgMTMwIDogcmV0dXJuICJSX1BBUklTQ19F UExUIiA7CgoKCmNhc2UgMTUzIDogcmV0dXJuICJSX1BBUklTQ19UUFJFTDMyIiA7CgoKY2FzZSAx NTQgOiByZXR1cm4gIlJfUEFSSVNDX1RQUkVMMjFMIiA7CgoKY2FzZSAxNTggOiByZXR1cm4gIlJf UEFSSVNDX1RQUkVMMTRSIiA7CgoKCmNhc2UgMTYyIDogcmV0dXJuICJSX1BBUklTQ19MVE9GRl9U UDIxTCIgOwoKCmNhc2UgMTY2IDogcmV0dXJuICJSX1BBUklTQ19MVE9GRl9UUDE0UiIgOwoKCmNh c2UgMTY3IDogcmV0dXJuICJSX1BBUklTQ19MVE9GRl9UUDE0RiIgOwoKCgpjYXNlIDIxNiA6IHJl dHVybiAiUl9QQVJJU0NfVFBSRUw2NCIgOwoKCmNhc2UgMjE5IDogcmV0dXJuICJSX1BBUklTQ19U UFJFTDE0V1IiIDsKCgpjYXNlIDIyMCA6IHJldHVybiAiUl9QQVJJU0NfVFBSRUwxNERSIiA7CgoK Y2FzZSAyMjEgOiByZXR1cm4gIlJfUEFSSVNDX1RQUkVMMTZGIiA7CgoKY2FzZSAyMjIgOiByZXR1 cm4gIlJfUEFSSVNDX1RQUkVMMTZXRiIgOwoKCmNhc2UgMjIzIDogcmV0dXJuICJSX1BBUklTQ19U UFJFTDE2REYiIDsKCgoKY2FzZSAyMjQgOiByZXR1cm4gIlJfUEFSSVNDX0xUT0ZGX1RQNjQiIDsK CgpjYXNlIDIyNyA6IHJldHVybiAiUl9QQVJJU0NfTFRPRkZfVFAxNFdSIiA7CgoKY2FzZSAyMjgg OiByZXR1cm4gIlJfUEFSSVNDX0xUT0ZGX1RQMTREUiIgOwoKCmNhc2UgMjI5IDogcmV0dXJuICJS X1BBUklTQ19MVE9GRl9UUDE2RiIgOwoKCmNhc2UgMjMwIDogcmV0dXJuICJSX1BBUklTQ19MVE9G Rl9UUDE2V0YiIDsKCgpjYXNlIDIzMSA6IHJldHVybiAiUl9QQVJJU0NfTFRPRkZfVFAxNkRGIiA7 CgoKY2FzZSAyMzIgOiByZXR1cm4gIlJfUEFSSVNDX0dOVV9WVEVOVFJZIiA7CmNhc2UgMjMzIDog cmV0dXJuICJSX1BBUklTQ19HTlVfVlRJTkhFUklUIiA7CgpkZWZhdWx0OiByZXR1cm4gKCh2b2lk ICopMCk7IH0gfQojIDY0ICJyZWFkZWxmLmMiIDIKIyAxICIuLi9pbmNsdWRlL2VsZi9pMzg2Lmgi IDEKIyAyNSAiLi4vaW5jbHVkZS9lbGYvaTM4Ni5oIgpzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9p Mzg2X3JlbG9jX3R5cGUgKHVuc2lnbmVkIGxvbmcgcnR5cGUpOyBzdGF0aWMgY29uc3QgY2hhciAq IGVsZl9pMzg2X3JlbG9jX3R5cGUgKHJ0eXBlKSB1bnNpZ25lZCBsb25nIHJ0eXBlOyB7IHN3aXRj aCAocnR5cGUpIHsKICAgICBjYXNlIDAgOiByZXR1cm4gIlJfMzg2X05PTkUiIDsKICAgICBjYXNl IDEgOiByZXR1cm4gIlJfMzg2XzMyIiA7CiAgICAgY2FzZSAyIDogcmV0dXJuICJSXzM4Nl9QQzMy IiA7CiAgICAgY2FzZSAzIDogcmV0dXJuICJSXzM4Nl9HT1QzMiIgOwogICAgIGNhc2UgNCA6IHJl dHVybiAiUl8zODZfUExUMzIiIDsKICAgICBjYXNlIDUgOiByZXR1cm4gIlJfMzg2X0NPUFkiIDsK ICAgICBjYXNlIDYgOiByZXR1cm4gIlJfMzg2X0dMT0JfREFUIiA7CiAgICAgY2FzZSA3IDogcmV0 dXJuICJSXzM4Nl9KVU1QX1NMT1QiIDsKICAgICBjYXNlIDggOiByZXR1cm4gIlJfMzg2X1JFTEFU SVZFIiA7CiAgICAgY2FzZSA5IDogcmV0dXJuICJSXzM4Nl9HT1RPRkYiIDsKICAgICBjYXNlIDEw IDogcmV0dXJuICJSXzM4Nl9HT1RQQyIgOwogICAgIGNhc2UgMTEgOiByZXR1cm4gIlJfMzg2XzMy UExUIiA7CiAgICAKICAgIAogICAgIGNhc2UgMTQgOiByZXR1cm4gIlJfMzg2X1RMU19UUE9GRiIg OwogICAgIGNhc2UgMTUgOiByZXR1cm4gIlJfMzg2X1RMU19JRSIgOwogICAgIGNhc2UgMTYgOiBy ZXR1cm4gIlJfMzg2X1RMU19HT1RJRSIgOwogICAgIGNhc2UgMTcgOiByZXR1cm4gIlJfMzg2X1RM U19MRSIgOwogICAgIGNhc2UgMTggOiByZXR1cm4gIlJfMzg2X1RMU19HRCIgOwogICAgIGNhc2Ug MTkgOiByZXR1cm4gIlJfMzg2X1RMU19MRE0iIDsKICAgICBjYXNlIDIwIDogcmV0dXJuICJSXzM4 Nl8xNiIgOwogICAgIGNhc2UgMjEgOiByZXR1cm4gIlJfMzg2X1BDMTYiIDsKICAgICBjYXNlIDIy IDogcmV0dXJuICJSXzM4Nl84IiA7CiAgICAgY2FzZSAyMyA6IHJldHVybiAiUl8zODZfUEM4IiA7 CiAgICAgY2FzZSAyNCA6IHJldHVybiAiUl8zODZfVExTX0dEXzMyIiA7CiAgICAgY2FzZSAyNSA6 IHJldHVybiAiUl8zODZfVExTX0dEX1BVU0giIDsKICAgICBjYXNlIDI2IDogcmV0dXJuICJSXzM4 Nl9UTFNfR0RfQ0FMTCIgOwogICAgIGNhc2UgMjcgOiByZXR1cm4gIlJfMzg2X1RMU19HRF9QT1Ai IDsKICAgICBjYXNlIDI4IDogcmV0dXJuICJSXzM4Nl9UTFNfTERNXzMyIiA7CiAgICAgY2FzZSAy OSA6IHJldHVybiAiUl8zODZfVExTX0xETV9QVVNIIiA7CiAgICAgY2FzZSAzMCA6IHJldHVybiAi Ul8zODZfVExTX0xETV9DQUxMIiA7CiAgICAgY2FzZSAzMSA6IHJldHVybiAiUl8zODZfVExTX0xE TV9QT1AiIDsKICAgICBjYXNlIDMyIDogcmV0dXJuICJSXzM4Nl9UTFNfTERPXzMyIiA7CiAgICAg Y2FzZSAzMyA6IHJldHVybiAiUl8zODZfVExTX0lFXzMyIiA7CiAgICAgY2FzZSAzNCA6IHJldHVy biAiUl8zODZfVExTX0xFXzMyIiA7CiAgICAgY2FzZSAzNSA6IHJldHVybiAiUl8zODZfVExTX0RU UE1PRDMyIiA7CiAgICAgY2FzZSAzNiA6IHJldHVybiAiUl8zODZfVExTX0RUUE9GRjMyIiA7CiAg ICAgY2FzZSAzNyA6IHJldHVybiAiUl8zODZfVExTX1RQT0ZGMzIiIDsKCgogICAgIGNhc2UgMjUw IDogcmV0dXJuICJSXzM4Nl9HTlVfVlRJTkhFUklUIiA7CiAgICAgY2FzZSAyNTEgOiByZXR1cm4g IlJfMzg2X0dOVV9WVEVOVFJZIiA7CmRlZmF1bHQ6IHJldHVybiAoKHZvaWQgKikwKTsgfSB9CiMg NjUgInJlYWRlbGYuYyIgMgojIDEgIi4uL2luY2x1ZGUvZWxmL2kzNzAuaCIgMQojIDUzICIuLi9p bmNsdWRlL2VsZi9pMzcwLmgiCnN0YXRpYyBjb25zdCBjaGFyICogaTM3MF9yZWxvY190eXBlICh1 bnNpZ25lZCBsb25nIHJ0eXBlKTsgc3RhdGljIGNvbnN0IGNoYXIgKiBpMzcwX3JlbG9jX3R5cGUg KHJ0eXBlKSB1bnNpZ25lZCBsb25nIHJ0eXBlOyB7IHN3aXRjaCAocnR5cGUpIHsKICBjYXNlIDAg OiByZXR1cm4gIlJfSTM3MF9OT05FIiA7CiAgY2FzZSAxIDogcmV0dXJuICJSX0kzNzBfQUREUjMx IiA7CiAgY2FzZSAyIDogcmV0dXJuICJSX0kzNzBfQUREUjMyIiA7CiAgY2FzZSAzIDogcmV0dXJu ICJSX0kzNzBfQUREUjE2IiA7CiAgY2FzZSA0IDogcmV0dXJuICJSX0kzNzBfUkVMMzEiIDsKICBj YXNlIDUgOiByZXR1cm4gIlJfSTM3MF9SRUwzMiIgOwogIGNhc2UgNiA6IHJldHVybiAiUl9JMzcw X0FERFIxMiIgOwogIGNhc2UgNyA6IHJldHVybiAiUl9JMzcwX1JFTDEyIiA7CiAgY2FzZSA4IDog cmV0dXJuICJSX0kzNzBfQUREUjgiIDsKICBjYXNlIDkgOiByZXR1cm4gIlJfSTM3MF9SRUw4IiA7 CiAgY2FzZSAxMCA6IHJldHVybiAiUl9JMzcwX0NPUFkiIDsKICBjYXNlIDExIDogcmV0dXJuICJS X0kzNzBfUkVMQVRJVkUiIDsKZGVmYXVsdDogcmV0dXJuICgodm9pZCAqKTApOyB9IH0KIyA2NiAi cmVhZGVsZi5jIiAyCiMgMSAiLi4vaW5jbHVkZS9lbGYvaTg2MC5oIiAxCiMgMjkgIi4uL2luY2x1 ZGUvZWxmL2k4NjAuaCIKc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfaTg2MF9yZWxvY190eXBlICh1 bnNpZ25lZCBsb25nIHJ0eXBlKTsgc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfaTg2MF9yZWxvY190 eXBlIChydHlwZSkgdW5zaWduZWQgbG9uZyBydHlwZTsgeyBzd2l0Y2ggKHJ0eXBlKSB7CiAgICAg Y2FzZSAweDAwIDogcmV0dXJuICJSXzg2MF9OT05FIiA7CiAgICAgY2FzZSAweDAxIDogcmV0dXJu ICJSXzg2MF8zMiIgOwogICAgIGNhc2UgMHgwMiA6IHJldHVybiAiUl84NjBfQ09QWSIgOwogICAg IGNhc2UgMHgwMyA6IHJldHVybiAiUl84NjBfR0xPQl9EQVQiIDsKICAgICBjYXNlIDB4MDQgOiBy ZXR1cm4gIlJfODYwX0pVTVBfU0xPVCIgOwogICAgIGNhc2UgMHgwNSA6IHJldHVybiAiUl84NjBf UkVMQVRJVkUiIDsKICAgICBjYXNlIDB4MzAgOiByZXR1cm4gIlJfODYwX1BDMjYiIDsKICAgICBj YXNlIDB4MzEgOiByZXR1cm4gIlJfODYwX1BMVDI2IiA7CiAgICAgY2FzZSAweDMyIDogcmV0dXJu ICJSXzg2MF9QQzE2IiA7CiAgICAgY2FzZSAweDQwIDogcmV0dXJuICJSXzg2MF9MT1cwIiA7CiAg ICAgY2FzZSAweDQyIDogcmV0dXJuICJSXzg2MF9TUExJVDAiIDsKICAgICBjYXNlIDB4NDQgOiBy ZXR1cm4gIlJfODYwX0xPVzEiIDsKICAgICBjYXNlIDB4NDYgOiByZXR1cm4gIlJfODYwX1NQTElU MSIgOwogICAgIGNhc2UgMHg0OCA6IHJldHVybiAiUl84NjBfTE9XMiIgOwogICAgIGNhc2UgMHg0 QSA6IHJldHVybiAiUl84NjBfU1BMSVQyIiA7CiAgICAgY2FzZSAweDRDIDogcmV0dXJuICJSXzg2 MF9MT1czIiA7CiAgICAgY2FzZSAweDUwIDogcmV0dXJuICJSXzg2MF9MT0dPVDAiIDsKICAgICBj YXNlIDB4NTIgOiByZXR1cm4gIlJfODYwX1NQR09UMCIgOwogICAgIGNhc2UgMHg1NCA6IHJldHVy biAiUl84NjBfTE9HT1QxIiA7CiAgICAgY2FzZSAweDU2IDogcmV0dXJuICJSXzg2MF9TUEdPVDEi IDsKICAgICBjYXNlIDB4NjAgOiByZXR1cm4gIlJfODYwX0xPR09UT0ZGMCIgOwogICAgIGNhc2Ug MHg2MiA6IHJldHVybiAiUl84NjBfU1BHT1RPRkYwIiA7CiAgICAgY2FzZSAweDY0IDogcmV0dXJu ICJSXzg2MF9MT0dPVE9GRjEiIDsKICAgICBjYXNlIDB4NjYgOiByZXR1cm4gIlJfODYwX1NQR09U T0ZGMSIgOwogICAgIGNhc2UgMHg2OCA6IHJldHVybiAiUl84NjBfTE9HT1RPRkYyIiA7CiAgICAg Y2FzZSAweDZDIDogcmV0dXJuICJSXzg2MF9MT0dPVE9GRjMiIDsKICAgICBjYXNlIDB4NzAgOiBy ZXR1cm4gIlJfODYwX0xPUEMiIDsKICAgICBjYXNlIDB4ODAgOiByZXR1cm4gIlJfODYwX0hJR0hB REoiIDsKICAgICBjYXNlIDB4OTAgOiByZXR1cm4gIlJfODYwX0hBR09UIiA7CiAgICAgY2FzZSAw eEEwIDogcmV0dXJuICJSXzg2MF9IQUdPVE9GRiIgOwogICAgIGNhc2UgMHhCMCA6IHJldHVybiAi Ul84NjBfSEFQQyIgOwogICAgIGNhc2UgMHhDMCA6IHJldHVybiAiUl84NjBfSElHSCIgOwogICAg IGNhc2UgMHhEMCA6IHJldHVybiAiUl84NjBfSElHT1QiIDsKICAgICBjYXNlIDB4RTAgOiByZXR1 cm4gIlJfODYwX0hJR09UT0ZGIiA7CmRlZmF1bHQ6IHJldHVybiAoKHZvaWQgKikwKTsgfSB9CiMg NjcgInJlYWRlbGYuYyIgMgojIDEgIi4uL2luY2x1ZGUvZWxmL2k5NjAuaCIgMQojIDI2ICIuLi9p bmNsdWRlL2VsZi9pOTYwLmgiCnN0YXRpYyBjb25zdCBjaGFyICogZWxmX2k5NjBfcmVsb2NfdHlw ZSAodW5zaWduZWQgbG9uZyBydHlwZSk7IHN0YXRpYyBjb25zdCBjaGFyICogZWxmX2k5NjBfcmVs b2NfdHlwZSAocnR5cGUpIHVuc2lnbmVkIGxvbmcgcnR5cGU7IHsgc3dpdGNoIChydHlwZSkgewog ICAgIGNhc2UgMCA6IHJldHVybiAiUl85NjBfTk9ORSIgOwogICAgIGNhc2UgMSA6IHJldHVybiAi Ul85NjBfMTIiIDsKICAgICBjYXNlIDIgOiByZXR1cm4gIlJfOTYwXzMyIiA7CiAgICAgY2FzZSAz IDogcmV0dXJuICJSXzk2MF9JUDI0IiA7CiAgICAgY2FzZSA0IDogcmV0dXJuICJSXzk2MF9TVUIi IDsKICAgICBjYXNlIDUgOiByZXR1cm4gIlJfOTYwX09QVENBTEwiIDsKICAgICBjYXNlIDYgOiBy ZXR1cm4gIlJfOTYwX09QVENBTExYIiA7CiAgICAgY2FzZSA3IDogcmV0dXJuICJSXzk2MF9PUFRD QUxMWEEiIDsKZGVmYXVsdDogcmV0dXJuICgodm9pZCAqKTApOyB9IH0KIyA2OCAicmVhZGVsZi5j IiAyCiMgMSAiLi4vaW5jbHVkZS9lbGYvaWE2NC5oIiAxCiMgMTEzICIuLi9pbmNsdWRlL2VsZi9p YTY0LmgiCnN0YXRpYyBjb25zdCBjaGFyICogZWxmX2lhNjRfcmVsb2NfdHlwZSAodW5zaWduZWQg bG9uZyBydHlwZSk7IHN0YXRpYyBjb25zdCBjaGFyICogZWxmX2lhNjRfcmVsb2NfdHlwZSAocnR5 cGUpIHVuc2lnbmVkIGxvbmcgcnR5cGU7IHsgc3dpdGNoIChydHlwZSkgewogIGNhc2UgMHgwMCA6 IHJldHVybiAiUl9JQTY0X05PTkUiIDsKCiAgY2FzZSAweDIxIDogcmV0dXJuICJSX0lBNjRfSU1N MTQiIDsKICBjYXNlIDB4MjIgOiByZXR1cm4gIlJfSUE2NF9JTU0yMiIgOwogIGNhc2UgMHgyMyA6 IHJldHVybiAiUl9JQTY0X0lNTTY0IiA7CiAgY2FzZSAweDI0IDogcmV0dXJuICJSX0lBNjRfRElS MzJNU0IiIDsKICBjYXNlIDB4MjUgOiByZXR1cm4gIlJfSUE2NF9ESVIzMkxTQiIgOwogIGNhc2Ug MHgyNiA6IHJldHVybiAiUl9JQTY0X0RJUjY0TVNCIiA7CiAgY2FzZSAweDI3IDogcmV0dXJuICJS X0lBNjRfRElSNjRMU0IiIDsKCiAgY2FzZSAweDJhIDogcmV0dXJuICJSX0lBNjRfR1BSRUwyMiIg OwogIGNhc2UgMHgyYiA6IHJldHVybiAiUl9JQTY0X0dQUkVMNjRJIiA7CiAgY2FzZSAweDJjIDog cmV0dXJuICJSX0lBNjRfR1BSRUwzMk1TQiIgOwogIGNhc2UgMHgyZCA6IHJldHVybiAiUl9JQTY0 X0dQUkVMMzJMU0IiIDsKICBjYXNlIDB4MmUgOiByZXR1cm4gIlJfSUE2NF9HUFJFTDY0TVNCIiA7 CiAgY2FzZSAweDJmIDogcmV0dXJuICJSX0lBNjRfR1BSRUw2NExTQiIgOwoKICBjYXNlIDB4MzIg OiByZXR1cm4gIlJfSUE2NF9MVE9GRjIyIiA7CiAgY2FzZSAweDMzIDogcmV0dXJuICJSX0lBNjRf TFRPRkY2NEkiIDsKCiAgY2FzZSAweDNhIDogcmV0dXJuICJSX0lBNjRfUExUT0ZGMjIiIDsKICBj YXNlIDB4M2IgOiByZXR1cm4gIlJfSUE2NF9QTFRPRkY2NEkiIDsKICBjYXNlIDB4M2UgOiByZXR1 cm4gIlJfSUE2NF9QTFRPRkY2NE1TQiIgOwogIGNhc2UgMHgzZiA6IHJldHVybiAiUl9JQTY0X1BM VE9GRjY0TFNCIiA7CgogIGNhc2UgMHg0MyA6IHJldHVybiAiUl9JQTY0X0ZQVFI2NEkiIDsKICBj YXNlIDB4NDQgOiByZXR1cm4gIlJfSUE2NF9GUFRSMzJNU0IiIDsKICBjYXNlIDB4NDUgOiByZXR1 cm4gIlJfSUE2NF9GUFRSMzJMU0IiIDsKICBjYXNlIDB4NDYgOiByZXR1cm4gIlJfSUE2NF9GUFRS NjRNU0IiIDsKICBjYXNlIDB4NDcgOiByZXR1cm4gIlJfSUE2NF9GUFRSNjRMU0IiIDsKCiAgY2Fz ZSAweDQ4IDogcmV0dXJuICJSX0lBNjRfUENSRUw2MEIiIDsKICBjYXNlIDB4NDkgOiByZXR1cm4g IlJfSUE2NF9QQ1JFTDIxQiIgOwogIGNhc2UgMHg0YSA6IHJldHVybiAiUl9JQTY0X1BDUkVMMjFN IiA7CiAgY2FzZSAweDRiIDogcmV0dXJuICJSX0lBNjRfUENSRUwyMUYiIDsKICBjYXNlIDB4NGMg OiByZXR1cm4gIlJfSUE2NF9QQ1JFTDMyTVNCIiA7CiAgY2FzZSAweDRkIDogcmV0dXJuICJSX0lB NjRfUENSRUwzMkxTQiIgOwogIGNhc2UgMHg0ZSA6IHJldHVybiAiUl9JQTY0X1BDUkVMNjRNU0Ii IDsKICBjYXNlIDB4NGYgOiByZXR1cm4gIlJfSUE2NF9QQ1JFTDY0TFNCIiA7CgogIGNhc2UgMHg1 MiA6IHJldHVybiAiUl9JQTY0X0xUT0ZGX0ZQVFIyMiIgOwogIGNhc2UgMHg1MyA6IHJldHVybiAi Ul9JQTY0X0xUT0ZGX0ZQVFI2NEkiIDsKICBjYXNlIDB4NTQgOiByZXR1cm4gIlJfSUE2NF9MVE9G Rl9GUFRSMzJNU0IiIDsKICBjYXNlIDB4NTUgOiByZXR1cm4gIlJfSUE2NF9MVE9GRl9GUFRSMzJM U0IiIDsKICBjYXNlIDB4NTYgOiByZXR1cm4gIlJfSUE2NF9MVE9GRl9GUFRSNjRNU0IiIDsKICBj YXNlIDB4NTcgOiByZXR1cm4gIlJfSUE2NF9MVE9GRl9GUFRSNjRMU0IiIDsKCiAgY2FzZSAweDVj IDogcmV0dXJuICJSX0lBNjRfU0VHUkVMMzJNU0IiIDsKICBjYXNlIDB4NWQgOiByZXR1cm4gIlJf SUE2NF9TRUdSRUwzMkxTQiIgOwogIGNhc2UgMHg1ZSA6IHJldHVybiAiUl9JQTY0X1NFR1JFTDY0 TVNCIiA7CiAgY2FzZSAweDVmIDogcmV0dXJuICJSX0lBNjRfU0VHUkVMNjRMU0IiIDsKCiAgY2Fz ZSAweDY0IDogcmV0dXJuICJSX0lBNjRfU0VDUkVMMzJNU0IiIDsKICBjYXNlIDB4NjUgOiByZXR1 cm4gIlJfSUE2NF9TRUNSRUwzMkxTQiIgOwogIGNhc2UgMHg2NiA6IHJldHVybiAiUl9JQTY0X1NF Q1JFTDY0TVNCIiA7CiAgY2FzZSAweDY3IDogcmV0dXJuICJSX0lBNjRfU0VDUkVMNjRMU0IiIDsK CiAgY2FzZSAweDZjIDogcmV0dXJuICJSX0lBNjRfUkVMMzJNU0IiIDsKICBjYXNlIDB4NmQgOiBy ZXR1cm4gIlJfSUE2NF9SRUwzMkxTQiIgOwogIGNhc2UgMHg2ZSA6IHJldHVybiAiUl9JQTY0X1JF TDY0TVNCIiA7CiAgY2FzZSAweDZmIDogcmV0dXJuICJSX0lBNjRfUkVMNjRMU0IiIDsKCiAgY2Fz ZSAweDc0IDogcmV0dXJuICJSX0lBNjRfTFRWMzJNU0IiIDsKICBjYXNlIDB4NzUgOiByZXR1cm4g IlJfSUE2NF9MVFYzMkxTQiIgOwogIGNhc2UgMHg3NiA6IHJldHVybiAiUl9JQTY0X0xUVjY0TVNC IiA7CiAgY2FzZSAweDc3IDogcmV0dXJuICJSX0lBNjRfTFRWNjRMU0IiIDsKCiAgY2FzZSAweDc5 IDogcmV0dXJuICJSX0lBNjRfUENSRUwyMUJJIiA7CiAgY2FzZSAweDdhIDogcmV0dXJuICJSX0lB NjRfUENSRUwyMiIgOwogIGNhc2UgMHg3YiA6IHJldHVybiAiUl9JQTY0X1BDUkVMNjRJIiA7Cgog IGNhc2UgMHg4MCA6IHJldHVybiAiUl9JQTY0X0lQTFRNU0IiIDsKICBjYXNlIDB4ODEgOiByZXR1 cm4gIlJfSUE2NF9JUExUTFNCIiA7CiAgY2FzZSAweDg0IDogcmV0dXJuICJSX0lBNjRfQ09QWSIg OwogIGNhc2UgMHg4NiA6IHJldHVybiAiUl9JQTY0X0xUT0ZGMjJYIiA7CiAgY2FzZSAweDg3IDog cmV0dXJuICJSX0lBNjRfTERYTU9WIiA7CgogIGNhc2UgMHg5MSA6IHJldHVybiAiUl9JQTY0X1RQ UkVMMTQiIDsKICBjYXNlIDB4OTIgOiByZXR1cm4gIlJfSUE2NF9UUFJFTDIyIiA7CiAgY2FzZSAw eDkzIDogcmV0dXJuICJSX0lBNjRfVFBSRUw2NEkiIDsKICBjYXNlIDB4OTYgOiByZXR1cm4gIlJf SUE2NF9UUFJFTDY0TVNCIiA7CiAgY2FzZSAweDk3IDogcmV0dXJuICJSX0lBNjRfVFBSRUw2NExT QiIgOwoKICBjYXNlIDB4OWEgOiByZXR1cm4gIlJfSUE2NF9MVE9GRl9UUFJFTDIyIiA7CgogIGNh c2UgMHhhNiA6IHJldHVybiAiUl9JQTY0X0RUUE1PRDY0TVNCIiA7CiAgY2FzZSAweGE3IDogcmV0 dXJuICJSX0lBNjRfRFRQTU9ENjRMU0IiIDsKICBjYXNlIDB4YWEgOiByZXR1cm4gIlJfSUE2NF9M VE9GRl9EVFBNT0QyMiIgOwoKICBjYXNlIDB4YjEgOiByZXR1cm4gIlJfSUE2NF9EVFBSRUwxNCIg OwogIGNhc2UgMHhiMiA6IHJldHVybiAiUl9JQTY0X0RUUFJFTDIyIiA7CiAgY2FzZSAweGIzIDog cmV0dXJuICJSX0lBNjRfRFRQUkVMNjRJIiA7CiAgY2FzZSAweGI0IDogcmV0dXJuICJSX0lBNjRf RFRQUkVMMzJNU0IiIDsKICBjYXNlIDB4YjUgOiByZXR1cm4gIlJfSUE2NF9EVFBSRUwzMkxTQiIg OwogIGNhc2UgMHhiNiA6IHJldHVybiAiUl9JQTY0X0RUUFJFTDY0TVNCIiA7CiAgY2FzZSAweGI3 IDogcmV0dXJuICJSX0lBNjRfRFRQUkVMNjRMU0IiIDsKCiAgY2FzZSAweGJhIDogcmV0dXJuICJS X0lBNjRfTFRPRkZfRFRQUkVMMjIiIDsKCiAKZGVmYXVsdDogcmV0dXJuICgodm9pZCAqKTApOyB9 IH0KIyA2OSAicmVhZGVsZi5jIiAyCiMgMSAiLi4vaW5jbHVkZS9lbGYvaXAyay5oIiAxCiMgMjYg Ii4uL2luY2x1ZGUvZWxmL2lwMmsuaCIKc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfaXAya19yZWxv Y190eXBlICh1bnNpZ25lZCBsb25nIHJ0eXBlKTsgc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfaXAy a19yZWxvY190eXBlIChydHlwZSkgdW5zaWduZWQgbG9uZyBydHlwZTsgeyBzd2l0Y2ggKHJ0eXBl KSB7CiAgY2FzZSAwIDogcmV0dXJuICJSX0lQMktfTk9ORSIgOwogIGNhc2UgMSA6IHJldHVybiAi Ul9JUDJLXzE2IiA7CiAgY2FzZSAyIDogcmV0dXJuICJSX0lQMktfMzIiIDsKICBjYXNlIDMgOiBy ZXR1cm4gIlJfSVAyS19GUjkiIDsKICBjYXNlIDQgOiByZXR1cm4gIlJfSVAyS19CQU5LIiA7CiAg Y2FzZSA1IDogcmV0dXJuICJSX0lQMktfQUREUjE2Q0pQIiA7CiAgY2FzZSA2IDogcmV0dXJuICJS X0lQMktfUEFHRTMiIDsKICBjYXNlIDcgOiByZXR1cm4gIlJfSVAyS19MTzhEQVRBIiA7CiAgY2Fz ZSA4IDogcmV0dXJuICJSX0lQMktfSEk4REFUQSIgOwogIGNhc2UgOSA6IHJldHVybiAiUl9JUDJL X0xPOElOU04iIDsKICBjYXNlIDEwIDogcmV0dXJuICJSX0lQMktfSEk4SU5TTiIgOwogIGNhc2Ug MTEgOiByZXR1cm4gIlJfSVAyS19QQ19TS0lQIiA7CiAgY2FzZSAxMiA6IHJldHVybiAiUl9JUDJL X1RFWFQiIDsKICBjYXNlIDEzIDogcmV0dXJuICJSX0lQMktfRlJfT0ZGU0VUIiA7CiAgY2FzZSAx NCA6IHJldHVybiAiUl9JUDJLX0VYOERBVEEiIDsKZGVmYXVsdDogcmV0dXJuICgodm9pZCAqKTAp OyB9IH0KIyA3MCAicmVhZGVsZi5jIiAyCiMgMSAiLi4vaW5jbHVkZS9lbGYvbTMyci5oIiAxCiMg MjYgIi4uL2luY2x1ZGUvZWxmL20zMnIuaCIKc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfbTMycl9y ZWxvY190eXBlICh1bnNpZ25lZCBsb25nIHJ0eXBlKTsgc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZf bTMycl9yZWxvY190eXBlIChydHlwZSkgdW5zaWduZWQgbG9uZyBydHlwZTsgeyBzd2l0Y2ggKHJ0 eXBlKSB7CiAgY2FzZSAwIDogcmV0dXJuICJSX00zMlJfTk9ORSIgOwogIGNhc2UgMSA6IHJldHVy biAiUl9NMzJSXzE2IiA7CiAgY2FzZSAyIDogcmV0dXJuICJSX00zMlJfMzIiIDsKICBjYXNlIDMg OiByZXR1cm4gIlJfTTMyUl8yNCIgOwogIGNhc2UgNCA6IHJldHVybiAiUl9NMzJSXzEwX1BDUkVM IiA7CiAgY2FzZSA1IDogcmV0dXJuICJSX00zMlJfMThfUENSRUwiIDsKICBjYXNlIDYgOiByZXR1 cm4gIlJfTTMyUl8yNl9QQ1JFTCIgOwogIGNhc2UgNyA6IHJldHVybiAiUl9NMzJSX0hJMTZfVUxP IiA7CiAgY2FzZSA4IDogcmV0dXJuICJSX00zMlJfSEkxNl9TTE8iIDsKICBjYXNlIDkgOiByZXR1 cm4gIlJfTTMyUl9MTzE2IiA7CiAgY2FzZSAxMCA6IHJldHVybiAiUl9NMzJSX1NEQTE2IiA7CiAg Y2FzZSAxMSA6IHJldHVybiAiUl9NMzJSX0dOVV9WVElOSEVSSVQiIDsKICBjYXNlIDEyIDogcmV0 dXJuICJSX00zMlJfR05VX1ZURU5UUlkiIDsKZGVmYXVsdDogcmV0dXJuICgodm9pZCAqKTApOyB9 IH0KIyA3MSAicmVhZGVsZi5jIiAyCiMgMSAiLi4vaW5jbHVkZS9lbGYvbTY4ay5oIiAxCiMgMjYg Ii4uL2luY2x1ZGUvZWxmL202OGsuaCIKc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfbTY4a19yZWxv Y190eXBlICh1bnNpZ25lZCBsb25nIHJ0eXBlKTsgc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfbTY4 a19yZWxvY190eXBlIChydHlwZSkgdW5zaWduZWQgbG9uZyBydHlwZTsgeyBzd2l0Y2ggKHJ0eXBl KSB7CiAgY2FzZSAwIDogcmV0dXJuICJSXzY4S19OT05FIiA7CiAgY2FzZSAxIDogcmV0dXJuICJS XzY4S18zMiIgOwogIGNhc2UgMiA6IHJldHVybiAiUl82OEtfMTYiIDsKICBjYXNlIDMgOiByZXR1 cm4gIlJfNjhLXzgiIDsKICBjYXNlIDQgOiByZXR1cm4gIlJfNjhLX1BDMzIiIDsKICBjYXNlIDUg OiByZXR1cm4gIlJfNjhLX1BDMTYiIDsKICBjYXNlIDYgOiByZXR1cm4gIlJfNjhLX1BDOCIgOwog IGNhc2UgNyA6IHJldHVybiAiUl82OEtfR09UMzIiIDsKICBjYXNlIDggOiByZXR1cm4gIlJfNjhL X0dPVDE2IiA7CiAgY2FzZSA5IDogcmV0dXJuICJSXzY4S19HT1Q4IiA7CiAgY2FzZSAxMCA6IHJl dHVybiAiUl82OEtfR09UMzJPIiA7CiAgY2FzZSAxMSA6IHJldHVybiAiUl82OEtfR09UMTZPIiA7 CiAgY2FzZSAxMiA6IHJldHVybiAiUl82OEtfR09UOE8iIDsKICBjYXNlIDEzIDogcmV0dXJuICJS XzY4S19QTFQzMiIgOwogIGNhc2UgMTQgOiByZXR1cm4gIlJfNjhLX1BMVDE2IiA7CiAgY2FzZSAx NSA6IHJldHVybiAiUl82OEtfUExUOCIgOwogIGNhc2UgMTYgOiByZXR1cm4gIlJfNjhLX1BMVDMy TyIgOwogIGNhc2UgMTcgOiByZXR1cm4gIlJfNjhLX1BMVDE2TyIgOwogIGNhc2UgMTggOiByZXR1 cm4gIlJfNjhLX1BMVDhPIiA7CiAgY2FzZSAxOSA6IHJldHVybiAiUl82OEtfQ09QWSIgOwogIGNh c2UgMjAgOiByZXR1cm4gIlJfNjhLX0dMT0JfREFUIiA7CiAgY2FzZSAyMSA6IHJldHVybiAiUl82 OEtfSk1QX1NMT1QiIDsKICBjYXNlIDIyIDogcmV0dXJuICJSXzY4S19SRUxBVElWRSIgOwoKICBj YXNlIDIzIDogcmV0dXJuICJSXzY4S19HTlVfVlRJTkhFUklUIiA7CiAgY2FzZSAyNCA6IHJldHVy biAiUl82OEtfR05VX1ZURU5UUlkiIDsKZGVmYXVsdDogcmV0dXJuICgodm9pZCAqKTApOyB9IH0K IyA3MiAicmVhZGVsZi5jIiAyCiMgMSAiLi4vaW5jbHVkZS9lbGYvbTY4aGMxMS5oIiAxCiMgMjYg Ii4uL2luY2x1ZGUvZWxmL202OGhjMTEuaCIKc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfbTY4aGMx MV9yZWxvY190eXBlICh1bnNpZ25lZCBsb25nIHJ0eXBlKTsgc3RhdGljIGNvbnN0IGNoYXIgKiBl bGZfbTY4aGMxMV9yZWxvY190eXBlIChydHlwZSkgdW5zaWduZWQgbG9uZyBydHlwZTsgeyBzd2l0 Y2ggKHJ0eXBlKSB7CiAgY2FzZSAwIDogcmV0dXJuICJSX002OEhDMTFfTk9ORSIgOwogIGNhc2Ug MSA6IHJldHVybiAiUl9NNjhIQzExXzgiIDsKICBjYXNlIDIgOiByZXR1cm4gIlJfTTY4SEMxMV9I STgiIDsKICBjYXNlIDMgOiByZXR1cm4gIlJfTTY4SEMxMV9MTzgiIDsKICBjYXNlIDQgOiByZXR1 cm4gIlJfTTY4SEMxMV9QQ1JFTF84IiA7CiAgY2FzZSA1IDogcmV0dXJuICJSX002OEhDMTFfMTYi IDsKICBjYXNlIDYgOiByZXR1cm4gIlJfTTY4SEMxMV8zMiIgOwogIGNhc2UgNyA6IHJldHVybiAi Ul9NNjhIQzExXzNCIiA7CiAgY2FzZSA4IDogcmV0dXJuICJSX002OEhDMTFfUENSRUxfMTYiIDsK CgogIGNhc2UgOSA6IHJldHVybiAiUl9NNjhIQzExX0dOVV9WVElOSEVSSVQiIDsKICBjYXNlIDEw IDogcmV0dXJuICJSX002OEhDMTFfR05VX1ZURU5UUlkiIDsKCiAgY2FzZSAxMSA6IHJldHVybiAi Ul9NNjhIQzExXzI0IiA7CiAgY2FzZSAxMiA6IHJldHVybiAiUl9NNjhIQzExX0xPMTYiIDsKICBj YXNlIDEzIDogcmV0dXJuICJSX002OEhDMTFfUEFHRSIgOwoKCgogIGNhc2UgMjAgOiByZXR1cm4g IlJfTTY4SEMxMV9STF9KVU1QIiA7CgoKICBjYXNlIDIxIDogcmV0dXJuICJSX002OEhDMTFfUkxf R1JPVVAiIDsKZGVmYXVsdDogcmV0dXJuICgodm9pZCAqKTApOyB9IH0KIyA3MyAicmVhZGVsZi5j IiAyCiMgMSAiLi4vaW5jbHVkZS9lbGYvbWNvcmUuaCIgMQojIDI3ICIuLi9pbmNsdWRlL2VsZi9t Y29yZS5oIgpzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9tY29yZV9yZWxvY190eXBlICh1bnNpZ25l ZCBsb25nIHJ0eXBlKTsgc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfbWNvcmVfcmVsb2NfdHlwZSAo cnR5cGUpIHVuc2lnbmVkIGxvbmcgcnR5cGU7IHsgc3dpdGNoIChydHlwZSkgewogIGNhc2UgMCA6 IHJldHVybiAiUl9NQ09SRV9OT05FIiA7CiAgY2FzZSAxIDogcmV0dXJuICJSX01DT1JFX0FERFIz MiIgOwogIGNhc2UgMiA6IHJldHVybiAiUl9NQ09SRV9QQ1JFTElNTThCWTQiIDsKICBjYXNlIDMg OiByZXR1cm4gIlJfTUNPUkVfUENSRUxJTU0xMUJZMiIgOwogIGNhc2UgNCA6IHJldHVybiAiUl9N Q09SRV9QQ1JFTElNTTRCWTIiIDsKICBjYXNlIDUgOiByZXR1cm4gIlJfTUNPUkVfUENSRUwzMiIg OwogIGNhc2UgNiA6IHJldHVybiAiUl9NQ09SRV9QQ1JFTEpTUl9JTU0xMUJZMiIgOwogIGNhc2Ug NyA6IHJldHVybiAiUl9NQ09SRV9HTlVfVlRJTkhFUklUIiA7CiAgY2FzZSA4IDogcmV0dXJuICJS X01DT1JFX0dOVV9WVEVOVFJZIiA7CiAgY2FzZSA5IDogcmV0dXJuICJSX01DT1JFX1JFTEFUSVZF IiA7CiAgY2FzZSAxMCA6IHJldHVybiAiUl9NQ09SRV9DT1BZIiA7CiAgY2FzZSAxMSA6IHJldHVy biAiUl9NQ09SRV9HTE9CX0RBVCIgOwogIGNhc2UgMTIgOiByZXR1cm4gIlJfTUNPUkVfSlVNUF9T TE9UIiA7CmRlZmF1bHQ6IHJldHVybiAoKHZvaWQgKikwKTsgfSB9CiMgNzQgInJlYWRlbGYuYyIg MgojIDEgIi4uL2luY2x1ZGUvZWxmL21pcHMuaCIgMQojIDM0ICIuLi9pbmNsdWRlL2VsZi9taXBz LmgiCnN0YXRpYyBjb25zdCBjaGFyICogZWxmX21pcHNfcmVsb2NfdHlwZSAodW5zaWduZWQgbG9u ZyBydHlwZSk7IHN0YXRpYyBjb25zdCBjaGFyICogZWxmX21pcHNfcmVsb2NfdHlwZSAocnR5cGUp IHVuc2lnbmVkIGxvbmcgcnR5cGU7IHsgc3dpdGNoIChydHlwZSkgewogIGNhc2UgMCA6IHJldHVy biAiUl9NSVBTX05PTkUiIDsKICBjYXNlIDEgOiByZXR1cm4gIlJfTUlQU18xNiIgOwogIGNhc2Ug MiA6IHJldHVybiAiUl9NSVBTXzMyIiA7CiAgY2FzZSAzIDogcmV0dXJuICJSX01JUFNfUkVMMzIi IDsKICBjYXNlIDQgOiByZXR1cm4gIlJfTUlQU18yNiIgOwogIGNhc2UgNSA6IHJldHVybiAiUl9N SVBTX0hJMTYiIDsKICBjYXNlIDYgOiByZXR1cm4gIlJfTUlQU19MTzE2IiA7CiAgY2FzZSA3IDog cmV0dXJuICJSX01JUFNfR1BSRUwxNiIgOwogIGNhc2UgOCA6IHJldHVybiAiUl9NSVBTX0xJVEVS QUwiIDsKICBjYXNlIDkgOiByZXR1cm4gIlJfTUlQU19HT1QxNiIgOwogIGNhc2UgMTAgOiByZXR1 cm4gIlJfTUlQU19QQzE2IiA7CiAgY2FzZSAxMSA6IHJldHVybiAiUl9NSVBTX0NBTEwxNiIgOwog IGNhc2UgMTIgOiByZXR1cm4gIlJfTUlQU19HUFJFTDMyIiA7CgoKICBjYXNlIDEzIDogcmV0dXJu ICJSX01JUFNfVU5VU0VEMSIgOwogIGNhc2UgMTQgOiByZXR1cm4gIlJfTUlQU19VTlVTRUQyIiA7 CiAgY2FzZSAxNSA6IHJldHVybiAiUl9NSVBTX1VOVVNFRDMiIDsKICBjYXNlIDE2IDogcmV0dXJu ICJSX01JUFNfU0hJRlQ1IiA7CiAgY2FzZSAxNyA6IHJldHVybiAiUl9NSVBTX1NISUZUNiIgOwog IGNhc2UgMTggOiByZXR1cm4gIlJfTUlQU182NCIgOwogIGNhc2UgMTkgOiByZXR1cm4gIlJfTUlQ U19HT1RfRElTUCIgOwogIGNhc2UgMjAgOiByZXR1cm4gIlJfTUlQU19HT1RfUEFHRSIgOwogIGNh c2UgMjEgOiByZXR1cm4gIlJfTUlQU19HT1RfT0ZTVCIgOwogIGNhc2UgMjIgOiByZXR1cm4gIlJf TUlQU19HT1RfSEkxNiIgOwogIGNhc2UgMjMgOiByZXR1cm4gIlJfTUlQU19HT1RfTE8xNiIgOwog IGNhc2UgMjQgOiByZXR1cm4gIlJfTUlQU19TVUIiIDsKICBjYXNlIDI1IDogcmV0dXJuICJSX01J UFNfSU5TRVJUX0EiIDsKICBjYXNlIDI2IDogcmV0dXJuICJSX01JUFNfSU5TRVJUX0IiIDsKICBj YXNlIDI3IDogcmV0dXJuICJSX01JUFNfREVMRVRFIiA7CiAgY2FzZSAyOCA6IHJldHVybiAiUl9N SVBTX0hJR0hFUiIgOwogIGNhc2UgMjkgOiByZXR1cm4gIlJfTUlQU19ISUdIRVNUIiA7CiAgY2Fz ZSAzMCA6IHJldHVybiAiUl9NSVBTX0NBTExfSEkxNiIgOwogIGNhc2UgMzEgOiByZXR1cm4gIlJf TUlQU19DQUxMX0xPMTYiIDsKICBjYXNlIDMyIDogcmV0dXJuICJSX01JUFNfU0NOX0RJU1AiIDsK ICBjYXNlIDMzIDogcmV0dXJuICJSX01JUFNfUkVMMTYiIDsKICBjYXNlIDM0IDogcmV0dXJuICJS X01JUFNfQUREX0lNTUVESUFURSIgOwogIGNhc2UgMzUgOiByZXR1cm4gIlJfTUlQU19QSlVNUCIg OwogIGNhc2UgMzYgOiByZXR1cm4gIlJfTUlQU19SRUxHT1QiIDsKICBjYXNlIDM3IDogcmV0dXJu ICJSX01JUFNfSkFMUiIgOwogIGNhc2UgMzggOiByZXR1cm4gIlJfTUlQU19tYXgiIDsKCiAgY2Fz ZSAxMDAgOiByZXR1cm4gIlJfTUlQUzE2XzI2IiA7CiAgY2FzZSAxMDEgOiByZXR1cm4gIlJfTUlQ UzE2X0dQUkVMIiA7CgogIGNhc2UgMjQ4IDogcmV0dXJuICJSX01JUFNfUEMzMiIgOwogIGNhc2Ug MjQ5IDogcmV0dXJuICJSX01JUFNfUEM2NCIgOwogIGNhc2UgMjUwIDogcmV0dXJuICJSX01JUFNf R05VX1JFTDE2X1MyIiA7CiAgY2FzZSAyNTEgOiByZXR1cm4gIlJfTUlQU19HTlVfUkVMX0xPMTYi IDsKICBjYXNlIDI1MiA6IHJldHVybiAiUl9NSVBTX0dOVV9SRUxfSEkxNiIgOwoKICBjYXNlIDI1 MyA6IHJldHVybiAiUl9NSVBTX0dOVV9WVElOSEVSSVQiIDsKICBjYXNlIDI1NCA6IHJldHVybiAi Ul9NSVBTX0dOVV9WVEVOVFJZIiA7CmRlZmF1bHQ6IHJldHVybiAoKHZvaWQgKikwKTsgfSB9CiMg MzQxICIuLi9pbmNsdWRlL2VsZi9taXBzLmgiCnR5cGVkZWYgc3RydWN0CnsKCiAgdW5zaWduZWQg bG9uZyBsX25hbWU7CgogIHVuc2lnbmVkIGxvbmcgbF90aW1lX3N0YW1wOwoKICB1bnNpZ25lZCBs b25nIGxfY2hlY2tzdW07CgogIHVuc2lnbmVkIGxvbmcgbF92ZXJzaW9uOwoKICB1bnNpZ25lZCBs b25nIGxfZmxhZ3M7Cn0gRWxmMzJfTGliOwoKCnR5cGVkZWYgc3RydWN0CnsKICB1bnNpZ25lZCBj aGFyIGxfbmFtZVs0XTsKICB1bnNpZ25lZCBjaGFyIGxfdGltZV9zdGFtcFs0XTsKICB1bnNpZ25l ZCBjaGFyIGxfY2hlY2tzdW1bNF07CiAgdW5zaWduZWQgY2hhciBsX3ZlcnNpb25bNF07CiAgdW5z aWduZWQgY2hhciBsX2ZsYWdzWzRdOwp9IEVsZjMyX0V4dGVybmFsX0xpYjsKIyAzODkgIi4uL2lu Y2x1ZGUvZWxmL21pcHMuaCIKdHlwZWRlZiB1bnNpZ25lZCBsb25nIEVsZjMyX0NvbmZsaWN0Owp0 eXBlZGVmIHVuc2lnbmVkIGNoYXIgRWxmMzJfRXh0ZXJuYWxfQ29uZmxpY3RbNF07Cgp0eXBlZGVm IHVuc2lnbmVkIGxvbmcgRWxmNjRfQ29uZmxpY3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBFbGY2 NF9FeHRlcm5hbF9Db25mbGljdFs4XTsKIyA0MDMgIi4uL2luY2x1ZGUvZWxmL21pcHMuaCIKdHlw ZWRlZiB1bmlvbgp7CiAgc3RydWN0CiAgICB7CgogICAgICB1bnNpZ25lZCBsb25nIGd0X2N1cnJl bnRfZ192YWx1ZTsKCiAgICAgIHVuc2lnbmVkIGxvbmcgZ3RfdW51c2VkOwogICAgfSBndF9oZWFk ZXI7CiAgc3RydWN0CiAgICB7CgogICAgICB1bnNpZ25lZCBsb25nIGd0X2dfdmFsdWU7CgogICAg ICB1bnNpZ25lZCBsb25nIGd0X2J5dGVzOwogICAgfSBndF9lbnRyeTsKfSBFbGYzMl9ncHRhYjsK CgoKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0CiAgICB7CiAgICAgIHVuc2lnbmVkIGNoYXIgZ3Rf Y3VycmVudF9nX3ZhbHVlWzRdOwogICAgICB1bnNpZ25lZCBjaGFyIGd0X3VudXNlZFs0XTsKICAg IH0gZ3RfaGVhZGVyOwogIHN0cnVjdAogICAgewogICAgICB1bnNpZ25lZCBjaGFyIGd0X2dfdmFs dWVbNF07CiAgICAgIHVuc2lnbmVkIGNoYXIgZ3RfYnl0ZXNbNF07CiAgICB9IGd0X2VudHJ5Owp9 IEVsZjMyX0V4dGVybmFsX2dwdGFiOwoKCgp0eXBlZGVmIHN0cnVjdAp7CgogIHVuc2lnbmVkIGxv bmcgcmlfZ3BybWFzazsKCiAgdW5zaWduZWQgbG9uZyByaV9jcHJtYXNrWzRdOwoKICBsb25nIHJp X2dwX3ZhbHVlOwp9IEVsZjMyX1JlZ0luZm87CgoKdHlwZWRlZiBzdHJ1Y3QKewogIHVuc2lnbmVk IGNoYXIgcmlfZ3BybWFza1s0XTsKICB1bnNpZ25lZCBjaGFyIHJpX2Nwcm1hc2tbNF1bNF07CiAg dW5zaWduZWQgY2hhciByaV9ncF92YWx1ZVs0XTsKfSBFbGYzMl9FeHRlcm5hbF9SZWdJbmZvOwoK CmV4dGVybiB2b2lkIGJmZF9taXBzX2VsZjMyX3N3YXBfcmVnaW5mb19pbgogIChiZmQgKiwgY29u c3QgRWxmMzJfRXh0ZXJuYWxfUmVnSW5mbyAqLCBFbGYzMl9SZWdJbmZvICopOwpleHRlcm4gdm9p ZCBiZmRfbWlwc19lbGYzMl9zd2FwX3JlZ2luZm9fb3V0CiAgKGJmZCAqLCBjb25zdCBFbGYzMl9S ZWdJbmZvICosIEVsZjMyX0V4dGVybmFsX1JlZ0luZm8gKik7CiMgNzA2ICIuLi9pbmNsdWRlL2Vs Zi9taXBzLmgiCnR5cGVkZWYgc3RydWN0CnsKCiAgdW5zaWduZWQgY2hhciByX29mZnNldFs4XTsK CiAgdW5zaWduZWQgY2hhciByX3N5bVs0XTsKCiAgdW5zaWduZWQgY2hhciByX3NzeW1bMV07Cgog IHVuc2lnbmVkIGNoYXIgcl90eXBlM1sxXTsKCiAgdW5zaWduZWQgY2hhciByX3R5cGUyWzFdOwoK ICB1bnNpZ25lZCBjaGFyIHJfdHlwZVsxXTsKfSBFbGY2NF9NaXBzX0V4dGVybmFsX1JlbDsKCnR5 cGVkZWYgc3RydWN0CnsKCiAgYmZkX3ZtYSByX29mZnNldDsKCiAgdW5zaWduZWQgbG9uZyByX3N5 bTsKCiAgdW5zaWduZWQgY2hhciByX3NzeW07CgogIHVuc2lnbmVkIGNoYXIgcl90eXBlMzsKCiAg dW5zaWduZWQgY2hhciByX3R5cGUyOwoKICB1bnNpZ25lZCBjaGFyIHJfdHlwZTsKfSBFbGY2NF9N aXBzX0ludGVybmFsX1JlbDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewoKICB1bnNpZ25lZCBjaGFyIHJf b2Zmc2V0WzhdOwoKICB1bnNpZ25lZCBjaGFyIHJfc3ltWzRdOwoKICB1bnNpZ25lZCBjaGFyIHJf c3N5bVsxXTsKCiAgdW5zaWduZWQgY2hhciByX3R5cGUzWzFdOwoKICB1bnNpZ25lZCBjaGFyIHJf dHlwZTJbMV07CgogIHVuc2lnbmVkIGNoYXIgcl90eXBlWzFdOwoKICB1bnNpZ25lZCBjaGFyIHJf YWRkZW5kWzhdOwp9IEVsZjY0X01pcHNfRXh0ZXJuYWxfUmVsYTsKCnR5cGVkZWYgc3RydWN0CnsK CiAgYmZkX3ZtYSByX29mZnNldDsKCiAgdW5zaWduZWQgbG9uZyByX3N5bTsKCiAgdW5zaWduZWQg Y2hhciByX3NzeW07CgogIHVuc2lnbmVkIGNoYXIgcl90eXBlMzsKCiAgdW5zaWduZWQgY2hhciBy X3R5cGUyOwoKICB1bnNpZ25lZCBjaGFyIHJfdHlwZTsKCiAgYmZkX3NpZ25lZF92bWEgcl9hZGRl bmQ7Cn0gRWxmNjRfTWlwc19JbnRlcm5hbF9SZWxhOwojIDc5OSAiLi4vaW5jbHVkZS9lbGYvbWlw cy5oIgp0eXBlZGVmIHN0cnVjdAp7CgogIHVuc2lnbmVkIGNoYXIga2luZFsxXTsKCiAgdW5zaWdu ZWQgY2hhciBzaXplWzFdOwoKICB1bnNpZ25lZCBjaGFyIHNlY3Rpb25bMl07CgogIHVuc2lnbmVk IGNoYXIgaW5mb1s0XTsKfSBFbGZfRXh0ZXJuYWxfT3B0aW9uczsKCnR5cGVkZWYgc3RydWN0CnsK CiAgdW5zaWduZWQgY2hhciBraW5kOwoKICB1bnNpZ25lZCBjaGFyIHNpemU7CgogIHVuc2lnbmVk IHNob3J0IHNlY3Rpb247CgogIHVuc2lnbmVkIGxvbmcgaW5mbzsKfSBFbGZfSW50ZXJuYWxfT3B0 aW9uczsKCgpleHRlcm4gdm9pZCBiZmRfbWlwc19lbGZfc3dhcF9vcHRpb25zX2luCiAgKGJmZCAq LCBjb25zdCBFbGZfRXh0ZXJuYWxfT3B0aW9ucyAqLCBFbGZfSW50ZXJuYWxfT3B0aW9ucyAqKTsK ZXh0ZXJuIHZvaWQgYmZkX21pcHNfZWxmX3N3YXBfb3B0aW9uc19vdXQKICAoYmZkICosIGNvbnN0 IEVsZl9JbnRlcm5hbF9PcHRpb25zICosIEVsZl9FeHRlcm5hbF9PcHRpb25zICopOwojIDg2OSAi Li4vaW5jbHVkZS9lbGYvbWlwcy5oIgp0eXBlZGVmIHN0cnVjdAp7CgogIHVuc2lnbmVkIGNoYXIg cmlfZ3BybWFza1s0XTsKCiAgdW5zaWduZWQgY2hhciByaV9wYWRbNF07CgogIHVuc2lnbmVkIGNo YXIgcmlfY3BybWFza1s0XVs0XTsKCiAgdW5zaWduZWQgY2hhciByaV9ncF92YWx1ZVs4XTsKfSBF bGY2NF9FeHRlcm5hbF9SZWdJbmZvOwoKdHlwZWRlZiBzdHJ1Y3QKewoKICB1bnNpZ25lZCBsb25n IHJpX2dwcm1hc2s7CgogIHVuc2lnbmVkIGxvbmcgcmlfcGFkOwoKICB1bnNpZ25lZCBsb25nIHJp X2Nwcm1hc2tbNF07CgogIGJmZF92bWEgcmlfZ3BfdmFsdWU7Cn0gRWxmNjRfSW50ZXJuYWxfUmVn SW5mbzsKCnR5cGVkZWYgc3RydWN0CnsKCgogIHVuc2lnbmVkIGNoYXIgbXNfaGFzaF92YWx1ZVs0 XTsKCgoKCgoKCiAgdW5zaWduZWQgY2hhciBtc19pbmZvWzRdOwp9IEVsZjMyX0V4dGVybmFsX01z eW07Cgp0eXBlZGVmIHN0cnVjdAp7CgoKICB1bnNpZ25lZCBsb25nIG1zX2hhc2hfdmFsdWU7CgoK CgoKCgogIHVuc2lnbmVkIGxvbmcgbXNfaW5mbzsKfSBFbGYzMl9JbnRlcm5hbF9Nc3ltOwoKCgoK CgpleHRlcm4gdm9pZCBiZmRfbWlwc19lbGY2NF9zd2FwX3JlZ2luZm9faW4KICAoYmZkICosIGNv bnN0IEVsZjY0X0V4dGVybmFsX1JlZ0luZm8gKiwgRWxmNjRfSW50ZXJuYWxfUmVnSW5mbyAqKTsK ZXh0ZXJuIHZvaWQgYmZkX21pcHNfZWxmNjRfc3dhcF9yZWdpbmZvX291dAogIChiZmQgKiwgY29u c3QgRWxmNjRfSW50ZXJuYWxfUmVnSW5mbyAqLCBFbGY2NF9FeHRlcm5hbF9SZWdJbmZvICopOwoj IDc1ICJyZWFkZWxmLmMiIDIKIyAxICIuLi9pbmNsdWRlL2VsZi9tbWl4LmgiIDEKIyAyNyAiLi4v aW5jbHVkZS9lbGYvbW1peC5oIgpzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9tbWl4X3JlbG9jX3R5 cGUgKHVuc2lnbmVkIGxvbmcgcnR5cGUpOyBzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9tbWl4X3Jl bG9jX3R5cGUgKHJ0eXBlKSB1bnNpZ25lZCBsb25nIHJ0eXBlOyB7IHN3aXRjaCAocnR5cGUpIHsK ICBjYXNlIDAgOiByZXR1cm4gIlJfTU1JWF9OT05FIiA7CgoKICBjYXNlIDEgOiByZXR1cm4gIlJf TU1JWF84IiA7CiAgY2FzZSAyIDogcmV0dXJuICJSX01NSVhfMTYiIDsKICBjYXNlIDMgOiByZXR1 cm4gIlJfTU1JWF8yNCIgOwogIGNhc2UgNCA6IHJldHVybiAiUl9NTUlYXzMyIiA7CiAgY2FzZSA1 IDogcmV0dXJuICJSX01NSVhfNjQiIDsKCgogIGNhc2UgNiA6IHJldHVybiAiUl9NTUlYX1BDXzgi IDsKICBjYXNlIDcgOiByZXR1cm4gIlJfTU1JWF9QQ18xNiIgOwogIGNhc2UgOCA6IHJldHVybiAi Ul9NTUlYX1BDXzI0IiA7CiAgY2FzZSA5IDogcmV0dXJuICJSX01NSVhfUENfMzIiIDsKICBjYXNl IDEwIDogcmV0dXJuICJSX01NSVhfUENfNjQiIDsKCgogIGNhc2UgMTEgOiByZXR1cm4gIlJfTU1J WF9HTlVfVlRJTkhFUklUIiA7CiAgY2FzZSAxMiA6IHJldHVybiAiUl9NTUlYX0dOVV9WVEVOVFJZ IiA7CgoKICBjYXNlIDEzIDogcmV0dXJuICJSX01NSVhfR0VUQSIgOwogIGNhc2UgMTQgOiByZXR1 cm4gIlJfTU1JWF9HRVRBXzEiIDsKICBjYXNlIDE1IDogcmV0dXJuICJSX01NSVhfR0VUQV8yIiA7 CiAgY2FzZSAxNiA6IHJldHVybiAiUl9NTUlYX0dFVEFfMyIgOwoKCiAgY2FzZSAxNyA6IHJldHVy biAiUl9NTUlYX0NCUkFOQ0giIDsKICBjYXNlIDE4IDogcmV0dXJuICJSX01NSVhfQ0JSQU5DSF9K IiA7CiAgY2FzZSAxOSA6IHJldHVybiAiUl9NTUlYX0NCUkFOQ0hfMSIgOwogIGNhc2UgMjAgOiBy ZXR1cm4gIlJfTU1JWF9DQlJBTkNIXzIiIDsKICBjYXNlIDIxIDogcmV0dXJuICJSX01NSVhfQ0JS QU5DSF8zIiA7CgoKICBjYXNlIDIyIDogcmV0dXJuICJSX01NSVhfUFVTSEoiIDsKICBjYXNlIDIz IDogcmV0dXJuICJSX01NSVhfUFVTSEpfMSIgOwogIGNhc2UgMjQgOiByZXR1cm4gIlJfTU1JWF9Q VVNISl8yIiA7CiAgY2FzZSAyNSA6IHJldHVybiAiUl9NTUlYX1BVU0hKXzMiIDsKCgogIGNhc2Ug MjYgOiByZXR1cm4gIlJfTU1JWF9KTVAiIDsKICBjYXNlIDI3IDogcmV0dXJuICJSX01NSVhfSk1Q XzEiIDsKICBjYXNlIDI4IDogcmV0dXJuICJSX01NSVhfSk1QXzIiIDsKICBjYXNlIDI5IDogcmV0 dXJuICJSX01NSVhfSk1QXzMiIDsKCgogIGNhc2UgMzAgOiByZXR1cm4gIlJfTU1JWF9BRERSMTki IDsKCgogIGNhc2UgMzEgOiByZXR1cm4gIlJfTU1JWF9BRERSMjciIDsKCgogIGNhc2UgMzIgOiBy ZXR1cm4gIlJfTU1JWF9SRUdfT1JfQllURSIgOwoKCiAgY2FzZSAzMyA6IHJldHVybiAiUl9NTUlY X1JFRyIgOwoKCgoKCiAgY2FzZSAzNCA6IHJldHVybiAiUl9NTUlYX0JBU0VfUExVU19PRkZTRVQi IDsKCgogIGNhc2UgMzUgOiByZXR1cm4gIlJfTU1JWF9MT0NBTCIgOwpkZWZhdWx0OiByZXR1cm4g KCh2b2lkICopMCk7IH0gfQojIDE2MCAiLi4vaW5jbHVkZS9lbGYvbW1peC5oIgpleHRlcm4gYmZk X2Jvb2xlYW4gX2JmZF9tbWl4X3ByZXBhcmVfbGlua2VyX2FsbG9jYXRlZF9ncmVncwogKGJmZCAq LCBzdHJ1Y3QgYmZkX2xpbmtfaW5mbyAqKTsKZXh0ZXJuIGJmZF9ib29sZWFuIF9iZmRfbW1peF9m aW5hbGl6ZV9saW5rZXJfYWxsb2NhdGVkX2dyZWdzCiAoYmZkICosIHN0cnVjdCBiZmRfbGlua19p bmZvICopOwpleHRlcm4gYmZkX2Jvb2xlYW4gX2JmZF9tbWl4X2NoZWNrX2FsbF9yZWxvY3MKIChi ZmQgKiwgc3RydWN0IGJmZF9saW5rX2luZm8gKik7CiMgNzYgInJlYWRlbGYuYyIgMgojIDEgIi4u L2luY2x1ZGUvZWxmL21uMTAyMDAuaCIgMQojIDI4ICIuLi9pbmNsdWRlL2VsZi9tbjEwMjAwLmgi CnN0YXRpYyBjb25zdCBjaGFyICogZWxmX21uMTAyMDBfcmVsb2NfdHlwZSAodW5zaWduZWQgbG9u ZyBydHlwZSk7IHN0YXRpYyBjb25zdCBjaGFyICogZWxmX21uMTAyMDBfcmVsb2NfdHlwZSAocnR5 cGUpIHVuc2lnbmVkIGxvbmcgcnR5cGU7IHsgc3dpdGNoIChydHlwZSkgewogIGNhc2UgMCA6IHJl dHVybiAiUl9NTjEwMjAwX05PTkUiIDsKICBjYXNlIDEgOiByZXR1cm4gIlJfTU4xMDIwMF8zMiIg OwogIGNhc2UgMiA6IHJldHVybiAiUl9NTjEwMjAwXzE2IiA7CiAgY2FzZSAzIDogcmV0dXJuICJS X01OMTAyMDBfOCIgOwogIGNhc2UgNCA6IHJldHVybiAiUl9NTjEwMjAwXzI0IiA7CiAgY2FzZSA1 IDogcmV0dXJuICJSX01OMTAyMDBfUENSRUw4IiA7CiAgY2FzZSA2IDogcmV0dXJuICJSX01OMTAy MDBfUENSRUwxNiIgOwogIGNhc2UgNyA6IHJldHVybiAiUl9NTjEwMjAwX1BDUkVMMjQiIDsKZGVm YXVsdDogcmV0dXJuICgodm9pZCAqKTApOyB9IH0KIyA3NyAicmVhZGVsZi5jIiAyCiMgMSAiLi4v aW5jbHVkZS9lbGYvbW4xMDMwMC5oIiAxCiMgMjggIi4uL2luY2x1ZGUvZWxmL21uMTAzMDAuaCIK c3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfbW4xMDMwMF9yZWxvY190eXBlICh1bnNpZ25lZCBsb25n IHJ0eXBlKTsgc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfbW4xMDMwMF9yZWxvY190eXBlIChydHlw ZSkgdW5zaWduZWQgbG9uZyBydHlwZTsgeyBzd2l0Y2ggKHJ0eXBlKSB7CiAgY2FzZSAwIDogcmV0 dXJuICJSX01OMTAzMDBfTk9ORSIgOwogIGNhc2UgMSA6IHJldHVybiAiUl9NTjEwMzAwXzMyIiA7 CiAgY2FzZSAyIDogcmV0dXJuICJSX01OMTAzMDBfMTYiIDsKICBjYXNlIDMgOiByZXR1cm4gIlJf TU4xMDMwMF84IiA7CiAgY2FzZSA0IDogcmV0dXJuICJSX01OMTAzMDBfUENSRUwzMiIgOwogIGNh c2UgNSA6IHJldHVybiAiUl9NTjEwMzAwX1BDUkVMMTYiIDsKICBjYXNlIDYgOiByZXR1cm4gIlJf TU4xMDMwMF9QQ1JFTDgiIDsKICBjYXNlIDcgOiByZXR1cm4gIlJfTU4xMDMwMF9HTlVfVlRJTkhF UklUIiA7CiAgY2FzZSA4IDogcmV0dXJuICJSX01OMTAzMDBfR05VX1ZURU5UUlkiIDsKICBjYXNl IDkgOiByZXR1cm4gIlJfTU4xMDMwMF8yNCIgOwpkZWZhdWx0OiByZXR1cm4gKCh2b2lkICopMCk7 IH0gfQojIDc4ICJyZWFkZWxmLmMiIDIKIyAxICIuLi9pbmNsdWRlL2VsZi9tc3A0MzAuaCIgMQoj IDQ0ICIuLi9pbmNsdWRlL2VsZi9tc3A0MzAuaCIKc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfbXNw NDMwX3JlbG9jX3R5cGUgKHVuc2lnbmVkIGxvbmcgcnR5cGUpOyBzdGF0aWMgY29uc3QgY2hhciAq IGVsZl9tc3A0MzBfcmVsb2NfdHlwZSAocnR5cGUpIHVuc2lnbmVkIGxvbmcgcnR5cGU7IHsgc3dp dGNoIChydHlwZSkgewogICAgIGNhc2UgMCA6IHJldHVybiAiUl9NU1A0MzBfTk9ORSIgOwogICAg IGNhc2UgMSA6IHJldHVybiAiUl9NU1A0MzBfMzIiIDsKICAgICBjYXNlIDIgOiByZXR1cm4gIlJf TVNQNDMwXzEwX1BDUkVMIiA7CiAgICAgY2FzZSAzIDogcmV0dXJuICJSX01TUDQzMF8xNiIgOwog ICAgIGNhc2UgNCA6IHJldHVybiAiUl9NU1A0MzBfMTZfUENSRUwiIDsKICAgICBjYXNlIDUgOiBy ZXR1cm4gIlJfTVNQNDMwXzE2X0JZVEUiIDsKICAgICBjYXNlIDYgOiByZXR1cm4gIlJfTVNQNDMw XzE2X1BDUkVMX0JZVEUiIDsKCmRlZmF1bHQ6IHJldHVybiAoKHZvaWQgKikwKTsgfSB9CiMgNzkg InJlYWRlbGYuYyIgMgojIDEgIi4uL2luY2x1ZGUvZWxmL29yMzIuaCIgMQojIDI3ICIuLi9pbmNs dWRlL2VsZi9vcjMyLmgiCnN0YXRpYyBjb25zdCBjaGFyICogZWxmX29yMzJfcmVsb2NfdHlwZSAo dW5zaWduZWQgbG9uZyBydHlwZSk7IHN0YXRpYyBjb25zdCBjaGFyICogZWxmX29yMzJfcmVsb2Nf dHlwZSAocnR5cGUpIHVuc2lnbmVkIGxvbmcgcnR5cGU7IHsgc3dpdGNoIChydHlwZSkgewogIGNh c2UgMCA6IHJldHVybiAiUl9PUjMyX05PTkUiIDsKICBjYXNlIDEgOiByZXR1cm4gIlJfT1IzMl8z MiIgOwogIGNhc2UgMiA6IHJldHVybiAiUl9PUjMyXzE2IiA7CiAgY2FzZSAzIDogcmV0dXJuICJS X09SMzJfOCIgOwogIGNhc2UgNCA6IHJldHVybiAiUl9PUjMyX0NPTlNUIiA7CiAgY2FzZSA1IDog cmV0dXJuICJSX09SMzJfQ09OU1RIIiA7CiAgY2FzZSA2IDogcmV0dXJuICJSX09SMzJfSlVNUFRB UkciIDsKICBjYXNlIDcgOiByZXR1cm4gIlJfT1IzMl9HTlVfVlRFTlRSWSIgOwogIGNhc2UgOCA6 IHJldHVybiAiUl9PUjMyX0dOVV9WVElOSEVSSVQiIDsKZGVmYXVsdDogcmV0dXJuICgodm9pZCAq KTApOyB9IH0KIyA4MCAicmVhZGVsZi5jIiAyCiMgMSAiLi4vaW5jbHVkZS9lbGYvcGouaCIgMQoj IDI3ICIuLi9pbmNsdWRlL2VsZi9wai5oIgpzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9wal9yZWxv Y190eXBlICh1bnNpZ25lZCBsb25nIHJ0eXBlKTsgc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfcGpf cmVsb2NfdHlwZSAocnR5cGUpIHVuc2lnbmVkIGxvbmcgcnR5cGU7IHsgc3dpdGNoIChydHlwZSkg ewogIGNhc2UgMCA6IHJldHVybiAiUl9QSl9OT05FIiA7CiAgY2FzZSAxIDogcmV0dXJuICJSX1BK X0RBVEFfRElSMzIiIDsKICBjYXNlIDIgOiByZXR1cm4gIlJfUEpfQ09ERV9SRUwzMiIgOwogIGNh c2UgMyA6IHJldHVybiAiUl9QSl9DT0RFX1JFTDE2IiA7CiAgY2FzZSA2IDogcmV0dXJuICJSX1BK X0NPREVfRElSMzIiIDsKICBjYXNlIDcgOiByZXR1cm4gIlJfUEpfQ09ERV9ESVIxNiIgOwogIGNh c2UgMTMgOiByZXR1cm4gIlJfUEpfQ09ERV9MTzE2IiA7CiAgY2FzZSAxNCA6IHJldHVybiAiUl9Q Sl9DT0RFX0hJMTYiIDsKICBjYXNlIDE1IDogcmV0dXJuICJSX1BKX0dOVV9WVElOSEVSSVQiIDsK ICBjYXNlIDE2IDogcmV0dXJuICJSX1BKX0dOVV9WVEVOVFJZIiA7CmRlZmF1bHQ6IHJldHVybiAo KHZvaWQgKikwKTsgfSB9CiMgODEgInJlYWRlbGYuYyIgMgojIDEgIi4uL2luY2x1ZGUvZWxmL3Bw Yy5oIiAxCiMgMzQgIi4uL2luY2x1ZGUvZWxmL3BwYy5oIgpzdGF0aWMgY29uc3QgY2hhciAqIGVs Zl9wcGNfcmVsb2NfdHlwZSAodW5zaWduZWQgbG9uZyBydHlwZSk7IHN0YXRpYyBjb25zdCBjaGFy ICogZWxmX3BwY19yZWxvY190eXBlIChydHlwZSkgdW5zaWduZWQgbG9uZyBydHlwZTsgeyBzd2l0 Y2ggKHJ0eXBlKSB7CiAgY2FzZSAwIDogcmV0dXJuICJSX1BQQ19OT05FIiA7CiAgY2FzZSAxIDog cmV0dXJuICJSX1BQQ19BRERSMzIiIDsKICBjYXNlIDIgOiByZXR1cm4gIlJfUFBDX0FERFIyNCIg OwogIGNhc2UgMyA6IHJldHVybiAiUl9QUENfQUREUjE2IiA7CiAgY2FzZSA0IDogcmV0dXJuICJS X1BQQ19BRERSMTZfTE8iIDsKICBjYXNlIDUgOiByZXR1cm4gIlJfUFBDX0FERFIxNl9ISSIgOwog IGNhc2UgNiA6IHJldHVybiAiUl9QUENfQUREUjE2X0hBIiA7CiAgY2FzZSA3IDogcmV0dXJuICJS X1BQQ19BRERSMTQiIDsKICBjYXNlIDggOiByZXR1cm4gIlJfUFBDX0FERFIxNF9CUlRBS0VOIiA7 CiAgY2FzZSA5IDogcmV0dXJuICJSX1BQQ19BRERSMTRfQlJOVEFLRU4iIDsKICBjYXNlIDEwIDog cmV0dXJuICJSX1BQQ19SRUwyNCIgOwogIGNhc2UgMTEgOiByZXR1cm4gIlJfUFBDX1JFTDE0IiA7 CiAgY2FzZSAxMiA6IHJldHVybiAiUl9QUENfUkVMMTRfQlJUQUtFTiIgOwogIGNhc2UgMTMgOiBy ZXR1cm4gIlJfUFBDX1JFTDE0X0JSTlRBS0VOIiA7CiAgY2FzZSAxNCA6IHJldHVybiAiUl9QUENf R09UMTYiIDsKICBjYXNlIDE1IDogcmV0dXJuICJSX1BQQ19HT1QxNl9MTyIgOwogIGNhc2UgMTYg OiByZXR1cm4gIlJfUFBDX0dPVDE2X0hJIiA7CiAgY2FzZSAxNyA6IHJldHVybiAiUl9QUENfR09U MTZfSEEiIDsKICBjYXNlIDE4IDogcmV0dXJuICJSX1BQQ19QTFRSRUwyNCIgOwogIGNhc2UgMTkg OiByZXR1cm4gIlJfUFBDX0NPUFkiIDsKICBjYXNlIDIwIDogcmV0dXJuICJSX1BQQ19HTE9CX0RB VCIgOwogIGNhc2UgMjEgOiByZXR1cm4gIlJfUFBDX0pNUF9TTE9UIiA7CiAgY2FzZSAyMiA6IHJl dHVybiAiUl9QUENfUkVMQVRJVkUiIDsKICBjYXNlIDIzIDogcmV0dXJuICJSX1BQQ19MT0NBTDI0 UEMiIDsKICBjYXNlIDI0IDogcmV0dXJuICJSX1BQQ19VQUREUjMyIiA7CiAgY2FzZSAyNSA6IHJl dHVybiAiUl9QUENfVUFERFIxNiIgOwogIGNhc2UgMjYgOiByZXR1cm4gIlJfUFBDX1JFTDMyIiA7 CiAgY2FzZSAyNyA6IHJldHVybiAiUl9QUENfUExUMzIiIDsKICBjYXNlIDI4IDogcmV0dXJuICJS X1BQQ19QTFRSRUwzMiIgOwogIGNhc2UgMjkgOiByZXR1cm4gIlJfUFBDX1BMVDE2X0xPIiA7CiAg Y2FzZSAzMCA6IHJldHVybiAiUl9QUENfUExUMTZfSEkiIDsKICBjYXNlIDMxIDogcmV0dXJuICJS X1BQQ19QTFQxNl9IQSIgOwogIGNhc2UgMzIgOiByZXR1cm4gIlJfUFBDX1NEQVJFTDE2IiA7CiAg Y2FzZSAzMyA6IHJldHVybiAiUl9QUENfU0VDVE9GRiIgOwogIGNhc2UgMzQgOiByZXR1cm4gIlJf UFBDX1NFQ1RPRkZfTE8iIDsKICBjYXNlIDM1IDogcmV0dXJuICJSX1BQQ19TRUNUT0ZGX0hJIiA7 CiAgY2FzZSAzNiA6IHJldHVybiAiUl9QUENfU0VDVE9GRl9IQSIgOwogIGNhc2UgMzcgOiByZXR1 cm4gIlJfUFBDX0FERFIzMCIgOwoKCiAgY2FzZSA2NyA6IHJldHVybiAiUl9QUENfVExTIiA7CiAg Y2FzZSA2OCA6IHJldHVybiAiUl9QUENfRFRQTU9EMzIiIDsKICBjYXNlIDY5IDogcmV0dXJuICJS X1BQQ19UUFJFTDE2IiA7CiAgY2FzZSA3MCA6IHJldHVybiAiUl9QUENfVFBSRUwxNl9MTyIgOwog IGNhc2UgNzEgOiByZXR1cm4gIlJfUFBDX1RQUkVMMTZfSEkiIDsKICBjYXNlIDcyIDogcmV0dXJu ICJSX1BQQ19UUFJFTDE2X0hBIiA7CiAgY2FzZSA3MyA6IHJldHVybiAiUl9QUENfVFBSRUwzMiIg OwogIGNhc2UgNzQgOiByZXR1cm4gIlJfUFBDX0RUUFJFTDE2IiA7CiAgY2FzZSA3NSA6IHJldHVy biAiUl9QUENfRFRQUkVMMTZfTE8iIDsKICBjYXNlIDc2IDogcmV0dXJuICJSX1BQQ19EVFBSRUwx Nl9ISSIgOwogIGNhc2UgNzcgOiByZXR1cm4gIlJfUFBDX0RUUFJFTDE2X0hBIiA7CiAgY2FzZSA3 OCA6IHJldHVybiAiUl9QUENfRFRQUkVMMzIiIDsKICBjYXNlIDc5IDogcmV0dXJuICJSX1BQQ19H T1RfVExTR0QxNiIgOwogIGNhc2UgODAgOiByZXR1cm4gIlJfUFBDX0dPVF9UTFNHRDE2X0xPIiA7 CiAgY2FzZSA4MSA6IHJldHVybiAiUl9QUENfR09UX1RMU0dEMTZfSEkiIDsKICBjYXNlIDgyIDog cmV0dXJuICJSX1BQQ19HT1RfVExTR0QxNl9IQSIgOwogIGNhc2UgODMgOiByZXR1cm4gIlJfUFBD X0dPVF9UTFNMRDE2IiA7CiAgY2FzZSA4NCA6IHJldHVybiAiUl9QUENfR09UX1RMU0xEMTZfTE8i IDsKICBjYXNlIDg1IDogcmV0dXJuICJSX1BQQ19HT1RfVExTTEQxNl9ISSIgOwogIGNhc2UgODYg OiByZXR1cm4gIlJfUFBDX0dPVF9UTFNMRDE2X0hBIiA7CiAgY2FzZSA4NyA6IHJldHVybiAiUl9Q UENfR09UX1RQUkVMMTYiIDsKICBjYXNlIDg4IDogcmV0dXJuICJSX1BQQ19HT1RfVFBSRUwxNl9M TyIgOwogIGNhc2UgODkgOiByZXR1cm4gIlJfUFBDX0dPVF9UUFJFTDE2X0hJIiA7CiAgY2FzZSA5 MCA6IHJldHVybiAiUl9QUENfR09UX1RQUkVMMTZfSEEiIDsKICBjYXNlIDkxIDogcmV0dXJuICJS X1BQQ19HT1RfRFRQUkVMMTYiIDsKICBjYXNlIDkyIDogcmV0dXJuICJSX1BQQ19HT1RfRFRQUkVM MTZfTE8iIDsKICBjYXNlIDkzIDogcmV0dXJuICJSX1BQQ19HT1RfRFRQUkVMMTZfSEkiIDsKICBj YXNlIDk0IDogcmV0dXJuICJSX1BQQ19HT1RfRFRQUkVMMTZfSEEiIDsKCgoKICBjYXNlIDEwMSA6 IHJldHVybiAiUl9QUENfRU1CX05BRERSMzIiIDsKICBjYXNlIDEwMiA6IHJldHVybiAiUl9QUENf RU1CX05BRERSMTYiIDsKICBjYXNlIDEwMyA6IHJldHVybiAiUl9QUENfRU1CX05BRERSMTZfTE8i IDsKICBjYXNlIDEwNCA6IHJldHVybiAiUl9QUENfRU1CX05BRERSMTZfSEkiIDsKICBjYXNlIDEw NSA6IHJldHVybiAiUl9QUENfRU1CX05BRERSMTZfSEEiIDsKICBjYXNlIDEwNiA6IHJldHVybiAi Ul9QUENfRU1CX1NEQUkxNiIgOwogIGNhc2UgMTA3IDogcmV0dXJuICJSX1BQQ19FTUJfU0RBMkkx NiIgOwogIGNhc2UgMTA4IDogcmV0dXJuICJSX1BQQ19FTUJfU0RBMlJFTCIgOwogIGNhc2UgMTA5 IDogcmV0dXJuICJSX1BQQ19FTUJfU0RBMjEiIDsKICBjYXNlIDExMCA6IHJldHVybiAiUl9QUENf RU1CX01SS1JFRiIgOwogIGNhc2UgMTExIDogcmV0dXJuICJSX1BQQ19FTUJfUkVMU0VDMTYiIDsK ICBjYXNlIDExMiA6IHJldHVybiAiUl9QUENfRU1CX1JFTFNUX0xPIiA7CiAgY2FzZSAxMTMgOiBy ZXR1cm4gIlJfUFBDX0VNQl9SRUxTVF9ISSIgOwogIGNhc2UgMTE0IDogcmV0dXJuICJSX1BQQ19F TUJfUkVMU1RfSEEiIDsKICBjYXNlIDExNSA6IHJldHVybiAiUl9QUENfRU1CX0JJVF9GTEQiIDsK ICBjYXNlIDExNiA6IHJldHVybiAiUl9QUENfRU1CX1JFTFNEQSIgOwoKCiAgY2FzZSAyNTMgOiBy ZXR1cm4gIlJfUFBDX0dOVV9WVElOSEVSSVQiIDsKICBjYXNlIDI1NCA6IHJldHVybiAiUl9QUENf R05VX1ZURU5UUlkiIDsKCgoKICBjYXNlIDI1NSA6IHJldHVybiAiUl9QUENfVE9DMTYiIDsKCmRl ZmF1bHQ6IHJldHVybiAoKHZvaWQgKikwKTsgfSB9CiMgODIgInJlYWRlbGYuYyIgMgojIDEgIi4u L2luY2x1ZGUvZWxmL3BwYzY0LmgiIDEKIyAyNiAiLi4vaW5jbHVkZS9lbGYvcHBjNjQuaCIKc3Rh dGljIGNvbnN0IGNoYXIgKiBlbGZfcHBjNjRfcmVsb2NfdHlwZSAodW5zaWduZWQgbG9uZyBydHlw ZSk7IHN0YXRpYyBjb25zdCBjaGFyICogZWxmX3BwYzY0X3JlbG9jX3R5cGUgKHJ0eXBlKSB1bnNp Z25lZCBsb25nIHJ0eXBlOyB7IHN3aXRjaCAocnR5cGUpIHsKICBjYXNlIDAgOiByZXR1cm4gIlJf UFBDNjRfTk9ORSIgOwogIGNhc2UgMSA6IHJldHVybiAiUl9QUEM2NF9BRERSMzIiIDsKICBjYXNl IDIgOiByZXR1cm4gIlJfUFBDNjRfQUREUjI0IiA7CiAgY2FzZSAzIDogcmV0dXJuICJSX1BQQzY0 X0FERFIxNiIgOwogIGNhc2UgNCA6IHJldHVybiAiUl9QUEM2NF9BRERSMTZfTE8iIDsKICBjYXNl IDUgOiByZXR1cm4gIlJfUFBDNjRfQUREUjE2X0hJIiA7CiAgY2FzZSA2IDogcmV0dXJuICJSX1BQ QzY0X0FERFIxNl9IQSIgOwogIGNhc2UgNyA6IHJldHVybiAiUl9QUEM2NF9BRERSMTQiIDsKICBj YXNlIDggOiByZXR1cm4gIlJfUFBDNjRfQUREUjE0X0JSVEFLRU4iIDsKICBjYXNlIDkgOiByZXR1 cm4gIlJfUFBDNjRfQUREUjE0X0JSTlRBS0VOIiA7CiAgY2FzZSAxMCA6IHJldHVybiAiUl9QUEM2 NF9SRUwyNCIgOwogIGNhc2UgMTEgOiByZXR1cm4gIlJfUFBDNjRfUkVMMTQiIDsKICBjYXNlIDEy IDogcmV0dXJuICJSX1BQQzY0X1JFTDE0X0JSVEFLRU4iIDsKICBjYXNlIDEzIDogcmV0dXJuICJS X1BQQzY0X1JFTDE0X0JSTlRBS0VOIiA7CiAgY2FzZSAxNCA6IHJldHVybiAiUl9QUEM2NF9HT1Qx NiIgOwogIGNhc2UgMTUgOiByZXR1cm4gIlJfUFBDNjRfR09UMTZfTE8iIDsKICBjYXNlIDE2IDog cmV0dXJuICJSX1BQQzY0X0dPVDE2X0hJIiA7CiAgY2FzZSAxNyA6IHJldHVybiAiUl9QUEM2NF9H T1QxNl9IQSIgOwoKICBjYXNlIDE5IDogcmV0dXJuICJSX1BQQzY0X0NPUFkiIDsKICBjYXNlIDIw IDogcmV0dXJuICJSX1BQQzY0X0dMT0JfREFUIiA7CiAgY2FzZSAyMSA6IHJldHVybiAiUl9QUEM2 NF9KTVBfU0xPVCIgOwogIGNhc2UgMjIgOiByZXR1cm4gIlJfUFBDNjRfUkVMQVRJVkUiIDsKCiAg Y2FzZSAyNCA6IHJldHVybiAiUl9QUEM2NF9VQUREUjMyIiA7CiAgY2FzZSAyNSA6IHJldHVybiAi Ul9QUEM2NF9VQUREUjE2IiA7CiAgY2FzZSAyNiA6IHJldHVybiAiUl9QUEM2NF9SRUwzMiIgOwog IGNhc2UgMjcgOiByZXR1cm4gIlJfUFBDNjRfUExUMzIiIDsKICBjYXNlIDI4IDogcmV0dXJuICJS X1BQQzY0X1BMVFJFTDMyIiA7CiAgY2FzZSAyOSA6IHJldHVybiAiUl9QUEM2NF9QTFQxNl9MTyIg OwogIGNhc2UgMzAgOiByZXR1cm4gIlJfUFBDNjRfUExUMTZfSEkiIDsKICBjYXNlIDMxIDogcmV0 dXJuICJSX1BQQzY0X1BMVDE2X0hBIiA7CgogIGNhc2UgMzMgOiByZXR1cm4gIlJfUFBDNjRfU0VD VE9GRiIgOwogIGNhc2UgMzQgOiByZXR1cm4gIlJfUFBDNjRfU0VDVE9GRl9MTyIgOwogIGNhc2Ug MzUgOiByZXR1cm4gIlJfUFBDNjRfU0VDVE9GRl9ISSIgOwogIGNhc2UgMzYgOiByZXR1cm4gIlJf UFBDNjRfU0VDVE9GRl9IQSIgOwogIGNhc2UgMzcgOiByZXR1cm4gIlJfUFBDNjRfUkVMMzAiIDsK ICBjYXNlIDM4IDogcmV0dXJuICJSX1BQQzY0X0FERFI2NCIgOwogIGNhc2UgMzkgOiByZXR1cm4g IlJfUFBDNjRfQUREUjE2X0hJR0hFUiIgOwogIGNhc2UgNDAgOiByZXR1cm4gIlJfUFBDNjRfQURE UjE2X0hJR0hFUkEiIDsKICBjYXNlIDQxIDogcmV0dXJuICJSX1BQQzY0X0FERFIxNl9ISUdIRVNU IiA7CiAgY2FzZSA0MiA6IHJldHVybiAiUl9QUEM2NF9BRERSMTZfSElHSEVTVEEiIDsKICBjYXNl IDQzIDogcmV0dXJuICJSX1BQQzY0X1VBRERSNjQiIDsKICBjYXNlIDQ0IDogcmV0dXJuICJSX1BQ QzY0X1JFTDY0IiA7CiAgY2FzZSA0NSA6IHJldHVybiAiUl9QUEM2NF9QTFQ2NCIgOwogIGNhc2Ug NDYgOiByZXR1cm4gIlJfUFBDNjRfUExUUkVMNjQiIDsKICBjYXNlIDQ3IDogcmV0dXJuICJSX1BQ QzY0X1RPQzE2IiA7CiAgY2FzZSA0OCA6IHJldHVybiAiUl9QUEM2NF9UT0MxNl9MTyIgOwogIGNh c2UgNDkgOiByZXR1cm4gIlJfUFBDNjRfVE9DMTZfSEkiIDsKICBjYXNlIDUwIDogcmV0dXJuICJS X1BQQzY0X1RPQzE2X0hBIiA7CiAgY2FzZSA1MSA6IHJldHVybiAiUl9QUEM2NF9UT0MiIDsKICBj YXNlIDUyIDogcmV0dXJuICJSX1BQQzY0X1BMVEdPVDE2IiA7CiAgY2FzZSA1MyA6IHJldHVybiAi Ul9QUEM2NF9QTFRHT1QxNl9MTyIgOwogIGNhc2UgNTQgOiByZXR1cm4gIlJfUFBDNjRfUExUR09U MTZfSEkiIDsKICBjYXNlIDU1IDogcmV0dXJuICJSX1BQQzY0X1BMVEdPVDE2X0hBIiA7CgoKCiAg Y2FzZSA1NiA6IHJldHVybiAiUl9QUEM2NF9BRERSMTZfRFMiIDsKICBjYXNlIDU3IDogcmV0dXJu ICJSX1BQQzY0X0FERFIxNl9MT19EUyIgOwogIGNhc2UgNTggOiByZXR1cm4gIlJfUFBDNjRfR09U MTZfRFMiIDsKICBjYXNlIDU5IDogcmV0dXJuICJSX1BQQzY0X0dPVDE2X0xPX0RTIiA7CiAgY2Fz ZSA2MCA6IHJldHVybiAiUl9QUEM2NF9QTFQxNl9MT19EUyIgOwogIGNhc2UgNjEgOiByZXR1cm4g IlJfUFBDNjRfU0VDVE9GRl9EUyIgOwogIGNhc2UgNjIgOiByZXR1cm4gIlJfUFBDNjRfU0VDVE9G Rl9MT19EUyIgOwogIGNhc2UgNjMgOiByZXR1cm4gIlJfUFBDNjRfVE9DMTZfRFMiIDsKICBjYXNl IDY0IDogcmV0dXJuICJSX1BQQzY0X1RPQzE2X0xPX0RTIiA7CiAgY2FzZSA2NSA6IHJldHVybiAi Ul9QUEM2NF9QTFRHT1QxNl9EUyIgOwogIGNhc2UgNjYgOiByZXR1cm4gIlJfUFBDNjRfUExUR09U MTZfTE9fRFMiIDsKCgogIGNhc2UgNjcgOiByZXR1cm4gIlJfUFBDNjRfVExTIiA7CiAgY2FzZSA2 OCA6IHJldHVybiAiUl9QUEM2NF9EVFBNT0Q2NCIgOwogIGNhc2UgNjkgOiByZXR1cm4gIlJfUFBD NjRfVFBSRUwxNiIgOwogIGNhc2UgNzAgOiByZXR1cm4gIlJfUFBDNjRfVFBSRUwxNl9MTyIgOwog IGNhc2UgNzEgOiByZXR1cm4gIlJfUFBDNjRfVFBSRUwxNl9ISSIgOwogIGNhc2UgNzIgOiByZXR1 cm4gIlJfUFBDNjRfVFBSRUwxNl9IQSIgOwogIGNhc2UgNzMgOiByZXR1cm4gIlJfUFBDNjRfVFBS RUw2NCIgOwogIGNhc2UgNzQgOiByZXR1cm4gIlJfUFBDNjRfRFRQUkVMMTYiIDsKICBjYXNlIDc1 IDogcmV0dXJuICJSX1BQQzY0X0RUUFJFTDE2X0xPIiA7CiAgY2FzZSA3NiA6IHJldHVybiAiUl9Q UEM2NF9EVFBSRUwxNl9ISSIgOwogIGNhc2UgNzcgOiByZXR1cm4gIlJfUFBDNjRfRFRQUkVMMTZf SEEiIDsKICBjYXNlIDc4IDogcmV0dXJuICJSX1BQQzY0X0RUUFJFTDY0IiA7CiAgY2FzZSA3OSA6 IHJldHVybiAiUl9QUEM2NF9HT1RfVExTR0QxNiIgOwogIGNhc2UgODAgOiByZXR1cm4gIlJfUFBD NjRfR09UX1RMU0dEMTZfTE8iIDsKICBjYXNlIDgxIDogcmV0dXJuICJSX1BQQzY0X0dPVF9UTFNH RDE2X0hJIiA7CiAgY2FzZSA4MiA6IHJldHVybiAiUl9QUEM2NF9HT1RfVExTR0QxNl9IQSIgOwog IGNhc2UgODMgOiByZXR1cm4gIlJfUFBDNjRfR09UX1RMU0xEMTYiIDsKICBjYXNlIDg0IDogcmV0 dXJuICJSX1BQQzY0X0dPVF9UTFNMRDE2X0xPIiA7CiAgY2FzZSA4NSA6IHJldHVybiAiUl9QUEM2 NF9HT1RfVExTTEQxNl9ISSIgOwogIGNhc2UgODYgOiByZXR1cm4gIlJfUFBDNjRfR09UX1RMU0xE MTZfSEEiIDsKICBjYXNlIDg3IDogcmV0dXJuICJSX1BQQzY0X0dPVF9UUFJFTDE2X0RTIiA7CiAg Y2FzZSA4OCA6IHJldHVybiAiUl9QUEM2NF9HT1RfVFBSRUwxNl9MT19EUyIgOwogIGNhc2UgODkg OiByZXR1cm4gIlJfUFBDNjRfR09UX1RQUkVMMTZfSEkiIDsKICBjYXNlIDkwIDogcmV0dXJuICJS X1BQQzY0X0dPVF9UUFJFTDE2X0hBIiA7CiAgY2FzZSA5MSA6IHJldHVybiAiUl9QUEM2NF9HT1Rf RFRQUkVMMTZfRFMiIDsKICBjYXNlIDkyIDogcmV0dXJuICJSX1BQQzY0X0dPVF9EVFBSRUwxNl9M T19EUyIgOwogIGNhc2UgOTMgOiByZXR1cm4gIlJfUFBDNjRfR09UX0RUUFJFTDE2X0hJIiA7CiAg Y2FzZSA5NCA6IHJldHVybiAiUl9QUEM2NF9HT1RfRFRQUkVMMTZfSEEiIDsKICBjYXNlIDk1IDog cmV0dXJuICJSX1BQQzY0X1RQUkVMMTZfRFMiIDsKICBjYXNlIDk2IDogcmV0dXJuICJSX1BQQzY0 X1RQUkVMMTZfTE9fRFMiIDsKICBjYXNlIDk3IDogcmV0dXJuICJSX1BQQzY0X1RQUkVMMTZfSElH SEVSIiA7CiAgY2FzZSA5OCA6IHJldHVybiAiUl9QUEM2NF9UUFJFTDE2X0hJR0hFUkEiIDsKICBj YXNlIDk5IDogcmV0dXJuICJSX1BQQzY0X1RQUkVMMTZfSElHSEVTVCIgOwogIGNhc2UgMTAwIDog cmV0dXJuICJSX1BQQzY0X1RQUkVMMTZfSElHSEVTVEEiIDsKICBjYXNlIDEwMSA6IHJldHVybiAi Ul9QUEM2NF9EVFBSRUwxNl9EUyIgOwogIGNhc2UgMTAyIDogcmV0dXJuICJSX1BQQzY0X0RUUFJF TDE2X0xPX0RTIiA7CiAgY2FzZSAxMDMgOiByZXR1cm4gIlJfUFBDNjRfRFRQUkVMMTZfSElHSEVS IiA7CiAgY2FzZSAxMDQgOiByZXR1cm4gIlJfUFBDNjRfRFRQUkVMMTZfSElHSEVSQSIgOwogIGNh c2UgMTA1IDogcmV0dXJuICJSX1BQQzY0X0RUUFJFTDE2X0hJR0hFU1QiIDsKICBjYXNlIDEwNiA6 IHJldHVybiAiUl9QUEM2NF9EVFBSRUwxNl9ISUdIRVNUQSIgOwoKCiAgY2FzZSAyNTMgOiByZXR1 cm4gIlJfUFBDNjRfR05VX1ZUSU5IRVJJVCIgOwogIGNhc2UgMjU0IDogcmV0dXJuICJSX1BQQzY0 X0dOVV9WVEVOVFJZIiA7CgpkZWZhdWx0OiByZXR1cm4gKCh2b2lkICopMCk7IH0gfQojIDgzICJy ZWFkZWxmLmMiIDIKIyAxICIuLi9pbmNsdWRlL2VsZi9zMzkwLmgiIDEKIyAzOCAiLi4vaW5jbHVk ZS9lbGYvczM5MC5oIgpzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9zMzkwX3JlbG9jX3R5cGUgKHVu c2lnbmVkIGxvbmcgcnR5cGUpOyBzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9zMzkwX3JlbG9jX3R5 cGUgKHJ0eXBlKSB1bnNpZ25lZCBsb25nIHJ0eXBlOyB7IHN3aXRjaCAocnR5cGUpIHsKICAgIGNh c2UgMCA6IHJldHVybiAiUl8zOTBfTk9ORSIgOwogICAgY2FzZSAxIDogcmV0dXJuICJSXzM5MF84 IiA7CiAgICBjYXNlIDIgOiByZXR1cm4gIlJfMzkwXzEyIiA7CiAgICBjYXNlIDMgOiByZXR1cm4g IlJfMzkwXzE2IiA7CiAgICBjYXNlIDQgOiByZXR1cm4gIlJfMzkwXzMyIiA7CiAgICBjYXNlIDUg OiByZXR1cm4gIlJfMzkwX1BDMzIiIDsKICAgIGNhc2UgNiA6IHJldHVybiAiUl8zOTBfR09UMTIi IDsKICAgIGNhc2UgNyA6IHJldHVybiAiUl8zOTBfR09UMzIiIDsKICAgIGNhc2UgOCA6IHJldHVy biAiUl8zOTBfUExUMzIiIDsKICAgIGNhc2UgOSA6IHJldHVybiAiUl8zOTBfQ09QWSIgOwogICAg Y2FzZSAxMCA6IHJldHVybiAiUl8zOTBfR0xPQl9EQVQiIDsKICAgIGNhc2UgMTEgOiByZXR1cm4g IlJfMzkwX0pNUF9TTE9UIiA7CiAgICBjYXNlIDEyIDogcmV0dXJuICJSXzM5MF9SRUxBVElWRSIg OwogICAgY2FzZSAxMyA6IHJldHVybiAiUl8zOTBfR09UT0ZGMzIiIDsKICAgIGNhc2UgMTQgOiBy ZXR1cm4gIlJfMzkwX0dPVFBDIiA7CiAgICBjYXNlIDE1IDogcmV0dXJuICJSXzM5MF9HT1QxNiIg OwogICAgY2FzZSAxNiA6IHJldHVybiAiUl8zOTBfUEMxNiIgOwogICAgY2FzZSAxNyA6IHJldHVy biAiUl8zOTBfUEMxNkRCTCIgOwogICAgY2FzZSAxOCA6IHJldHVybiAiUl8zOTBfUExUMTZEQkwi IDsKICAgIGNhc2UgMTkgOiByZXR1cm4gIlJfMzkwX1BDMzJEQkwiIDsKICAgIGNhc2UgMjAgOiBy ZXR1cm4gIlJfMzkwX1BMVDMyREJMIiA7CiAgICBjYXNlIDIxIDogcmV0dXJuICJSXzM5MF9HT1RQ Q0RCTCIgOwogICAgY2FzZSAyMiA6IHJldHVybiAiUl8zOTBfNjQiIDsKICAgIGNhc2UgMjMgOiBy ZXR1cm4gIlJfMzkwX1BDNjQiIDsKICAgIGNhc2UgMjQgOiByZXR1cm4gIlJfMzkwX0dPVDY0IiA7 CiAgICBjYXNlIDI1IDogcmV0dXJuICJSXzM5MF9QTFQ2NCIgOwogICAgY2FzZSAyNiA6IHJldHVy biAiUl8zOTBfR09URU5UIiA7CiAgICBjYXNlIDI3IDogcmV0dXJuICJSXzM5MF9HT1RPRkYxNiIg OwogICAgY2FzZSAyOCA6IHJldHVybiAiUl8zOTBfR09UT0ZGNjQiIDsKICAgIGNhc2UgMjkgOiBy ZXR1cm4gIlJfMzkwX0dPVFBMVDEyIiA7CiAgICBjYXNlIDMwIDogcmV0dXJuICJSXzM5MF9HT1RQ TFQxNiIgOwogICAgY2FzZSAzMSA6IHJldHVybiAiUl8zOTBfR09UUExUMzIiIDsKICAgIGNhc2Ug MzIgOiByZXR1cm4gIlJfMzkwX0dPVFBMVDY0IiA7CiAgICBjYXNlIDMzIDogcmV0dXJuICJSXzM5 MF9HT1RQTFRFTlQiIDsKICAgIGNhc2UgMzQgOiByZXR1cm4gIlJfMzkwX1BMVE9GRjE2IiA7CiAg ICBjYXNlIDM1IDogcmV0dXJuICJSXzM5MF9QTFRPRkYzMiIgOwogICAgY2FzZSAzNiA6IHJldHVy biAiUl8zOTBfUExUT0ZGNjQiIDsKICAgIGNhc2UgMzcgOiByZXR1cm4gIlJfMzkwX1RMU19MT0FE IiA7CiAgICBjYXNlIDM4IDogcmV0dXJuICJSXzM5MF9UTFNfR0RDQUxMIiA7CgogICAgY2FzZSAz OSA6IHJldHVybiAiUl8zOTBfVExTX0xEQ0FMTCIgOwoKICAgIGNhc2UgNDAgOiByZXR1cm4gIlJf MzkwX1RMU19HRDMyIiA7CgogICAgY2FzZSA0MSA6IHJldHVybiAiUl8zOTBfVExTX0dENjQiIDsK CiAgICBjYXNlIDQyIDogcmV0dXJuICJSXzM5MF9UTFNfR09USUUxMiIgOwoKICAgIGNhc2UgNDMg OiByZXR1cm4gIlJfMzkwX1RMU19HT1RJRTMyIiA7CgogICAgY2FzZSA0NCA6IHJldHVybiAiUl8z OTBfVExTX0dPVElFNjQiIDsKCiAgICBjYXNlIDQ1IDogcmV0dXJuICJSXzM5MF9UTFNfTERNMzIi IDsKCiAgICBjYXNlIDQ2IDogcmV0dXJuICJSXzM5MF9UTFNfTERNNjQiIDsKCiAgICBjYXNlIDQ3 IDogcmV0dXJuICJSXzM5MF9UTFNfSUUzMiIgOwoKICAgIGNhc2UgNDggOiByZXR1cm4gIlJfMzkw X1RMU19JRTY0IiA7CgogICAgY2FzZSA0OSA6IHJldHVybiAiUl8zOTBfVExTX0lFRU5UIiA7Cgog ICAgY2FzZSA1MCA6IHJldHVybiAiUl8zOTBfVExTX0xFMzIiIDsKCiAgICBjYXNlIDUxIDogcmV0 dXJuICJSXzM5MF9UTFNfTEU2NCIgOwoKICAgIGNhc2UgNTIgOiByZXR1cm4gIlJfMzkwX1RMU19M RE8zMiIgOwoKICAgIGNhc2UgNTMgOiByZXR1cm4gIlJfMzkwX1RMU19MRE82NCIgOwoKICAgIGNh c2UgNTQgOiByZXR1cm4gIlJfMzkwX1RMU19EVFBNT0QiIDsKICAgIGNhc2UgNTUgOiByZXR1cm4g IlJfMzkwX1RMU19EVFBPRkYiIDsKICAgIGNhc2UgNTYgOiByZXR1cm4gIlJfMzkwX1RMU19UUE9G RiIgOwoKCiAgICBjYXNlIDI1MCA6IHJldHVybiAiUl8zOTBfR05VX1ZUSU5IRVJJVCIgOwogICAg Y2FzZSAyNTEgOiByZXR1cm4gIlJfMzkwX0dOVV9WVEVOVFJZIiA7CmRlZmF1bHQ6IHJldHVybiAo KHZvaWQgKikwKTsgfSB9CiMgODQgInJlYWRlbGYuYyIgMgojIDEgIi4uL2luY2x1ZGUvZWxmL3No LmgiIDEKIyA4NyAiLi4vaW5jbHVkZS9lbGYvc2guaCIKc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZf c2hfcmVsb2NfdHlwZSAodW5zaWduZWQgbG9uZyBydHlwZSk7IHN0YXRpYyBjb25zdCBjaGFyICog ZWxmX3NoX3JlbG9jX3R5cGUgKHJ0eXBlKSB1bnNpZ25lZCBsb25nIHJ0eXBlOyB7IHN3aXRjaCAo cnR5cGUpIHsKICBjYXNlIDAgOiByZXR1cm4gIlJfU0hfTk9ORSIgOwogIGNhc2UgMSA6IHJldHVy biAiUl9TSF9ESVIzMiIgOwogIGNhc2UgMiA6IHJldHVybiAiUl9TSF9SRUwzMiIgOwogIGNhc2Ug MyA6IHJldHVybiAiUl9TSF9ESVI4V1BOIiA7CiAgY2FzZSA0IDogcmV0dXJuICJSX1NIX0lORDEy VyIgOwogIGNhc2UgNSA6IHJldHVybiAiUl9TSF9ESVI4V1BMIiA7CiAgY2FzZSA2IDogcmV0dXJu ICJSX1NIX0RJUjhXUFoiIDsKICBjYXNlIDcgOiByZXR1cm4gIlJfU0hfRElSOEJQIiA7CiAgY2Fz ZSA4IDogcmV0dXJuICJSX1NIX0RJUjhXIiA7CiAgY2FzZSA5IDogcmV0dXJuICJSX1NIX0RJUjhM IiA7CiAKIAogIGNhc2UgMjUgOiByZXR1cm4gIlJfU0hfU1dJVENIMTYiIDsKICBjYXNlIDI2IDog cmV0dXJuICJSX1NIX1NXSVRDSDMyIiA7CiAgY2FzZSAyNyA6IHJldHVybiAiUl9TSF9VU0VTIiA7 CiAgY2FzZSAyOCA6IHJldHVybiAiUl9TSF9DT1VOVCIgOwogIGNhc2UgMjkgOiByZXR1cm4gIlJf U0hfQUxJR04iIDsKICBjYXNlIDMwIDogcmV0dXJuICJSX1NIX0NPREUiIDsKICBjYXNlIDMxIDog cmV0dXJuICJSX1NIX0RBVEEiIDsKICBjYXNlIDMyIDogcmV0dXJuICJSX1NIX0xBQkVMIiA7CiAg Y2FzZSAzMyA6IHJldHVybiAiUl9TSF9TV0lUQ0g4IiA7CiAgY2FzZSAzNCA6IHJldHVybiAiUl9T SF9HTlVfVlRJTkhFUklUIiA7CiAgY2FzZSAzNSA6IHJldHVybiAiUl9TSF9HTlVfVlRFTlRSWSIg OwogIGNhc2UgMzYgOiByZXR1cm4gIlJfU0hfTE9PUF9TVEFSVCIgOwogIGNhc2UgMzcgOiByZXR1 cm4gIlJfU0hfTE9PUF9FTkQiIDsKIAogCiAgY2FzZSA0NSA6IHJldHVybiAiUl9TSF9ESVI1VSIg OwogIGNhc2UgNDYgOiByZXR1cm4gIlJfU0hfRElSNlUiIDsKICBjYXNlIDQ3IDogcmV0dXJuICJS X1NIX0RJUjZTIiA7CiAgY2FzZSA0OCA6IHJldHVybiAiUl9TSF9ESVIxMFMiIDsKICBjYXNlIDQ5 IDogcmV0dXJuICJSX1NIX0RJUjEwU1ciIDsKICBjYXNlIDUwIDogcmV0dXJuICJSX1NIX0RJUjEw U0wiIDsKICBjYXNlIDUxIDogcmV0dXJuICJSX1NIX0RJUjEwU1EiIDsKIAogCiAgY2FzZSAxNDQg OiByZXR1cm4gIlJfU0hfVExTX0dEXzMyIiA7CiAgY2FzZSAxNDUgOiByZXR1cm4gIlJfU0hfVExT X0xEXzMyIiA7CiAgY2FzZSAxNDYgOiByZXR1cm4gIlJfU0hfVExTX0xET18zMiIgOwogIGNhc2Ug MTQ3IDogcmV0dXJuICJSX1NIX1RMU19JRV8zMiIgOwogIGNhc2UgMTQ4IDogcmV0dXJuICJSX1NI X1RMU19MRV8zMiIgOwogIGNhc2UgMTQ5IDogcmV0dXJuICJSX1NIX1RMU19EVFBNT0QzMiIgOwog IGNhc2UgMTUwIDogcmV0dXJuICJSX1NIX1RMU19EVFBPRkYzMiIgOwogIGNhc2UgMTUxIDogcmV0 dXJuICJSX1NIX1RMU19UUE9GRjMyIiA7CiAKIAogIGNhc2UgMTYwIDogcmV0dXJuICJSX1NIX0dP VDMyIiA7CiAgY2FzZSAxNjEgOiByZXR1cm4gIlJfU0hfUExUMzIiIDsKICBjYXNlIDE2MiA6IHJl dHVybiAiUl9TSF9DT1BZIiA7CiAgY2FzZSAxNjMgOiByZXR1cm4gIlJfU0hfR0xPQl9EQVQiIDsK ICBjYXNlIDE2NCA6IHJldHVybiAiUl9TSF9KTVBfU0xPVCIgOwogIGNhc2UgMTY1IDogcmV0dXJu ICJSX1NIX1JFTEFUSVZFIiA7CiAgY2FzZSAxNjYgOiByZXR1cm4gIlJfU0hfR09UT0ZGIiA7CiAg Y2FzZSAxNjcgOiByZXR1cm4gIlJfU0hfR09UUEMiIDsKICBjYXNlIDE2OCA6IHJldHVybiAiUl9T SF9HT1RQTFQzMiIgOwogIGNhc2UgMTY5IDogcmV0dXJuICJSX1NIX0dPVF9MT1cxNiIgOwogIGNh c2UgMTcwIDogcmV0dXJuICJSX1NIX0dPVF9NRURMT1cxNiIgOwogIGNhc2UgMTcxIDogcmV0dXJu ICJSX1NIX0dPVF9NRURISTE2IiA7CiAgY2FzZSAxNzIgOiByZXR1cm4gIlJfU0hfR09UX0hJMTYi IDsKICBjYXNlIDE3MyA6IHJldHVybiAiUl9TSF9HT1RQTFRfTE9XMTYiIDsKICBjYXNlIDE3NCA6 IHJldHVybiAiUl9TSF9HT1RQTFRfTUVETE9XMTYiIDsKICBjYXNlIDE3NSA6IHJldHVybiAiUl9T SF9HT1RQTFRfTUVESEkxNiIgOwogIGNhc2UgMTc2IDogcmV0dXJuICJSX1NIX0dPVFBMVF9ISTE2 IiA7CiAgY2FzZSAxNzcgOiByZXR1cm4gIlJfU0hfUExUX0xPVzE2IiA7CiAgY2FzZSAxNzggOiBy ZXR1cm4gIlJfU0hfUExUX01FRExPVzE2IiA7CiAgY2FzZSAxNzkgOiByZXR1cm4gIlJfU0hfUExU X01FREhJMTYiIDsKICBjYXNlIDE4MCA6IHJldHVybiAiUl9TSF9QTFRfSEkxNiIgOwogIGNhc2Ug MTgxIDogcmV0dXJuICJSX1NIX0dPVE9GRl9MT1cxNiIgOwogIGNhc2UgMTgyIDogcmV0dXJuICJS X1NIX0dPVE9GRl9NRURMT1cxNiIgOwogIGNhc2UgMTgzIDogcmV0dXJuICJSX1NIX0dPVE9GRl9N RURISTE2IiA7CiAgY2FzZSAxODQgOiByZXR1cm4gIlJfU0hfR09UT0ZGX0hJMTYiIDsKICBjYXNl IDE4NSA6IHJldHVybiAiUl9TSF9HT1RQQ19MT1cxNiIgOwogIGNhc2UgMTg2IDogcmV0dXJuICJS X1NIX0dPVFBDX01FRExPVzE2IiA7CiAgY2FzZSAxODcgOiByZXR1cm4gIlJfU0hfR09UUENfTUVE SEkxNiIgOwogIGNhc2UgMTg4IDogcmV0dXJuICJSX1NIX0dPVFBDX0hJMTYiIDsKICBjYXNlIDE4 OSA6IHJldHVybiAiUl9TSF9HT1QxMEJZNCIgOwogIGNhc2UgMTkwIDogcmV0dXJuICJSX1NIX0dP VFBMVDEwQlk0IiA7CiAgY2FzZSAxOTEgOiByZXR1cm4gIlJfU0hfR09UMTBCWTgiIDsKICBjYXNl IDE5MiA6IHJldHVybiAiUl9TSF9HT1RQTFQxMEJZOCIgOwogIGNhc2UgMTkzIDogcmV0dXJuICJS X1NIX0NPUFk2NCIgOwogIGNhc2UgMTk0IDogcmV0dXJuICJSX1NIX0dMT0JfREFUNjQiIDsKICBj YXNlIDE5NSA6IHJldHVybiAiUl9TSF9KTVBfU0xPVDY0IiA7CiAgY2FzZSAxOTYgOiByZXR1cm4g IlJfU0hfUkVMQVRJVkU2NCIgOwogCiAKICBjYXNlIDI0MiA6IHJldHVybiAiUl9TSF9TSE1FRElB X0NPREUiIDsKICBjYXNlIDI0MyA6IHJldHVybiAiUl9TSF9QVF8xNiIgOwogIGNhc2UgMjQ0IDog cmV0dXJuICJSX1NIX0lNTVMxNiIgOwogIGNhc2UgMjQ1IDogcmV0dXJuICJSX1NIX0lNTVUxNiIg OwogIGNhc2UgMjQ2IDogcmV0dXJuICJSX1NIX0lNTV9MT1cxNiIgOwogIGNhc2UgMjQ3IDogcmV0 dXJuICJSX1NIX0lNTV9MT1cxNl9QQ1JFTCIgOwogIGNhc2UgMjQ4IDogcmV0dXJuICJSX1NIX0lN TV9NRURMT1cxNiIgOwogIGNhc2UgMjQ5IDogcmV0dXJuICJSX1NIX0lNTV9NRURMT1cxNl9QQ1JF TCIgOwogIGNhc2UgMjUwIDogcmV0dXJuICJSX1NIX0lNTV9NRURISTE2IiA7CiAgY2FzZSAyNTEg OiByZXR1cm4gIlJfU0hfSU1NX01FREhJMTZfUENSRUwiIDsKICBjYXNlIDI1MiA6IHJldHVybiAi Ul9TSF9JTU1fSEkxNiIgOwogIGNhc2UgMjUzIDogcmV0dXJuICJSX1NIX0lNTV9ISTE2X1BDUkVM IiA7CiAgY2FzZSAyNTQgOiByZXR1cm4gIlJfU0hfNjQiIDsKICBjYXNlIDI1NSA6IHJldHVybiAi Ul9TSF82NF9QQ1JFTCIgOwpkZWZhdWx0OiByZXR1cm4gKCh2b2lkICopMCk7IH0gfQojIDg1ICJy ZWFkZWxmLmMiIDIKIyAxICIuLi9pbmNsdWRlL2VsZi9zcGFyYy5oIiAxCiMgNjIgIi4uL2luY2x1 ZGUvZWxmL3NwYXJjLmgiCnN0YXRpYyBjb25zdCBjaGFyICogZWxmX3NwYXJjX3JlbG9jX3R5cGUg KHVuc2lnbmVkIGxvbmcgcnR5cGUpOyBzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9zcGFyY19yZWxv Y190eXBlIChydHlwZSkgdW5zaWduZWQgbG9uZyBydHlwZTsgeyBzd2l0Y2ggKHJ0eXBlKSB7CiAg Y2FzZSAwIDogcmV0dXJuICJSX1NQQVJDX05PTkUiIDsKICBjYXNlIDEgOiByZXR1cm4gIlJfU1BB UkNfOCIgOwogIGNhc2UgMiA6IHJldHVybiAiUl9TUEFSQ18xNiIgOwogIGNhc2UgMyA6IHJldHVy biAiUl9TUEFSQ18zMiIgOwogIGNhc2UgNCA6IHJldHVybiAiUl9TUEFSQ19ESVNQOCIgOwogIGNh c2UgNSA6IHJldHVybiAiUl9TUEFSQ19ESVNQMTYiIDsKICBjYXNlIDYgOiByZXR1cm4gIlJfU1BB UkNfRElTUDMyIiA7CiAgY2FzZSA3IDogcmV0dXJuICJSX1NQQVJDX1dESVNQMzAiIDsKICBjYXNl IDggOiByZXR1cm4gIlJfU1BBUkNfV0RJU1AyMiIgOwogIGNhc2UgOSA6IHJldHVybiAiUl9TUEFS Q19ISTIyIiA7CiAgY2FzZSAxMCA6IHJldHVybiAiUl9TUEFSQ18yMiIgOwogIGNhc2UgMTEgOiBy ZXR1cm4gIlJfU1BBUkNfMTMiIDsKICBjYXNlIDEyIDogcmV0dXJuICJSX1NQQVJDX0xPMTAiIDsK ICBjYXNlIDEzIDogcmV0dXJuICJSX1NQQVJDX0dPVDEwIiA7CiAgY2FzZSAxNCA6IHJldHVybiAi Ul9TUEFSQ19HT1QxMyIgOwogIGNhc2UgMTUgOiByZXR1cm4gIlJfU1BBUkNfR09UMjIiIDsKICBj YXNlIDE2IDogcmV0dXJuICJSX1NQQVJDX1BDMTAiIDsKICBjYXNlIDE3IDogcmV0dXJuICJSX1NQ QVJDX1BDMjIiIDsKICBjYXNlIDE4IDogcmV0dXJuICJSX1NQQVJDX1dQTFQzMCIgOwogIGNhc2Ug MTkgOiByZXR1cm4gIlJfU1BBUkNfQ09QWSIgOwogIGNhc2UgMjAgOiByZXR1cm4gIlJfU1BBUkNf R0xPQl9EQVQiIDsKICBjYXNlIDIxIDogcmV0dXJuICJSX1NQQVJDX0pNUF9TTE9UIiA7CiAgY2Fz ZSAyMiA6IHJldHVybiAiUl9TUEFSQ19SRUxBVElWRSIgOwogIGNhc2UgMjMgOiByZXR1cm4gIlJf U1BBUkNfVUEzMiIgOwoKCgoKCgogIGNhc2UgMjQgOiByZXR1cm4gIlJfU1BBUkNfUExUMzIiIDsK ICBjYXNlIDI1IDogcmV0dXJuICJSX1NQQVJDX0hJUExUMjIiIDsKICBjYXNlIDI2IDogcmV0dXJu ICJSX1NQQVJDX0xPUExUMTAiIDsKICBjYXNlIDI3IDogcmV0dXJuICJSX1NQQVJDX1BDUExUMzIi IDsKICBjYXNlIDI4IDogcmV0dXJuICJSX1NQQVJDX1BDUExUMjIiIDsKICBjYXNlIDI5IDogcmV0 dXJuICJSX1NQQVJDX1BDUExUMTAiIDsKCgoKICBjYXNlIDMwIDogcmV0dXJuICJSX1NQQVJDXzEw IiA7CiAgY2FzZSAzMSA6IHJldHVybiAiUl9TUEFSQ18xMSIgOwogIGNhc2UgMzIgOiByZXR1cm4g IlJfU1BBUkNfNjQiIDsKICBjYXNlIDMzIDogcmV0dXJuICJSX1NQQVJDX09MTzEwIiA7CiAgY2Fz ZSAzNCA6IHJldHVybiAiUl9TUEFSQ19ISDIyIiA7CiAgY2FzZSAzNSA6IHJldHVybiAiUl9TUEFS Q19ITTEwIiA7CiAgY2FzZSAzNiA6IHJldHVybiAiUl9TUEFSQ19MTTIyIiA7CiAgY2FzZSAzNyA6 IHJldHVybiAiUl9TUEFSQ19QQ19ISDIyIiA7CiAgY2FzZSAzOCA6IHJldHVybiAiUl9TUEFSQ19Q Q19ITTEwIiA7CiAgY2FzZSAzOSA6IHJldHVybiAiUl9TUEFSQ19QQ19MTTIyIiA7CiAgY2FzZSA0 MCA6IHJldHVybiAiUl9TUEFSQ19XRElTUDE2IiA7CiAgY2FzZSA0MSA6IHJldHVybiAiUl9TUEFS Q19XRElTUDE5IiA7CiAgY2FzZSA0MiA6IHJldHVybiAiUl9TUEFSQ19VTlVTRURfNDIiIDsKICBj YXNlIDQzIDogcmV0dXJuICJSX1NQQVJDXzciIDsKICBjYXNlIDQ0IDogcmV0dXJuICJSX1NQQVJD XzUiIDsKICBjYXNlIDQ1IDogcmV0dXJuICJSX1NQQVJDXzYiIDsKICBjYXNlIDQ2IDogcmV0dXJu ICJSX1NQQVJDX0RJU1A2NCIgOwogIGNhc2UgNDcgOiByZXR1cm4gIlJfU1BBUkNfUExUNjQiIDsK ICBjYXNlIDQ4IDogcmV0dXJuICJSX1NQQVJDX0hJWDIyIiA7CiAgY2FzZSA0OSA6IHJldHVybiAi Ul9TUEFSQ19MT1gxMCIgOwogIGNhc2UgNTAgOiByZXR1cm4gIlJfU1BBUkNfSDQ0IiA7CiAgY2Fz ZSA1MSA6IHJldHVybiAiUl9TUEFSQ19NNDQiIDsKICBjYXNlIDUyIDogcmV0dXJuICJSX1NQQVJD X0w0NCIgOwogIGNhc2UgNTMgOiByZXR1cm4gIlJfU1BBUkNfUkVHSVNURVIiIDsKICBjYXNlIDU0 IDogcmV0dXJuICJSX1NQQVJDX1VBNjQiIDsKICBjYXNlIDU1IDogcmV0dXJuICJSX1NQQVJDX1VB MTYiIDsKCiAgY2FzZSA1NiA6IHJldHVybiAiUl9TUEFSQ19UTFNfR0RfSEkyMiIgOwogIGNhc2Ug NTcgOiByZXR1cm4gIlJfU1BBUkNfVExTX0dEX0xPMTAiIDsKICBjYXNlIDU4IDogcmV0dXJuICJS X1NQQVJDX1RMU19HRF9BREQiIDsKICBjYXNlIDU5IDogcmV0dXJuICJSX1NQQVJDX1RMU19HRF9D QUxMIiA7CiAgY2FzZSA2MCA6IHJldHVybiAiUl9TUEFSQ19UTFNfTERNX0hJMjIiIDsKICBjYXNl IDYxIDogcmV0dXJuICJSX1NQQVJDX1RMU19MRE1fTE8xMCIgOwogIGNhc2UgNjIgOiByZXR1cm4g IlJfU1BBUkNfVExTX0xETV9BREQiIDsKICBjYXNlIDYzIDogcmV0dXJuICJSX1NQQVJDX1RMU19M RE1fQ0FMTCIgOwogIGNhc2UgNjQgOiByZXR1cm4gIlJfU1BBUkNfVExTX0xET19ISVgyMiIgOwog IGNhc2UgNjUgOiByZXR1cm4gIlJfU1BBUkNfVExTX0xET19MT1gxMCIgOwogIGNhc2UgNjYgOiBy ZXR1cm4gIlJfU1BBUkNfVExTX0xET19BREQiIDsKICBjYXNlIDY3IDogcmV0dXJuICJSX1NQQVJD X1RMU19JRV9ISTIyIiA7CiAgY2FzZSA2OCA6IHJldHVybiAiUl9TUEFSQ19UTFNfSUVfTE8xMCIg OwogIGNhc2UgNjkgOiByZXR1cm4gIlJfU1BBUkNfVExTX0lFX0xEIiA7CiAgY2FzZSA3MCA6IHJl dHVybiAiUl9TUEFSQ19UTFNfSUVfTERYIiA7CiAgY2FzZSA3MSA6IHJldHVybiAiUl9TUEFSQ19U TFNfSUVfQUREIiA7CiAgY2FzZSA3MiA6IHJldHVybiAiUl9TUEFSQ19UTFNfTEVfSElYMjIiIDsK ICBjYXNlIDczIDogcmV0dXJuICJSX1NQQVJDX1RMU19MRV9MT1gxMCIgOwogIGNhc2UgNzQgOiBy ZXR1cm4gIlJfU1BBUkNfVExTX0RUUE1PRDMyIiA7CiAgY2FzZSA3NSA6IHJldHVybiAiUl9TUEFS Q19UTFNfRFRQTU9ENjQiIDsKICBjYXNlIDc2IDogcmV0dXJuICJSX1NQQVJDX1RMU19EVFBPRkYz MiIgOwogIGNhc2UgNzcgOiByZXR1cm4gIlJfU1BBUkNfVExTX0RUUE9GRjY0IiA7CiAgY2FzZSA3 OCA6IHJldHVybiAiUl9TUEFSQ19UTFNfVFBPRkYzMiIgOwogIGNhc2UgNzkgOiByZXR1cm4gIlJf U1BBUkNfVExTX1RQT0ZGNjQiIDsKCiAKCiAgY2FzZSAyNTAgOiByZXR1cm4gIlJfU1BBUkNfR05V X1ZUSU5IRVJJVCIgOwogIGNhc2UgMjUxIDogcmV0dXJuICJSX1NQQVJDX0dOVV9WVEVOVFJZIiA7 CiAgY2FzZSAyNTIgOiByZXR1cm4gIlJfU1BBUkNfUkVWMzIiIDsKCmRlZmF1bHQ6IHJldHVybiAo KHZvaWQgKikwKTsgfSB9CiMgODYgInJlYWRlbGYuYyIgMgojIDEgIi4uL2luY2x1ZGUvZWxmL3Y4 NTAuaCIgMQojIDQ5ICIuLi9pbmNsdWRlL2VsZi92ODUwLmgiCnN0YXRpYyBjb25zdCBjaGFyICog djg1MF9yZWxvY190eXBlICh1bnNpZ25lZCBsb25nIHJ0eXBlKTsgc3RhdGljIGNvbnN0IGNoYXIg KiB2ODUwX3JlbG9jX3R5cGUgKHJ0eXBlKSB1bnNpZ25lZCBsb25nIHJ0eXBlOyB7IHN3aXRjaCAo cnR5cGUpIHsKICAgICBjYXNlIDAgOiByZXR1cm4gIlJfVjg1MF9OT05FIiA7CiAgICAgY2FzZSAx IDogcmV0dXJuICJSX1Y4NTBfOV9QQ1JFTCIgOwogICAgIGNhc2UgMiA6IHJldHVybiAiUl9WODUw XzIyX1BDUkVMIiA7CiAgICAgY2FzZSAzIDogcmV0dXJuICJSX1Y4NTBfSEkxNl9TIiA7CiAgICAg Y2FzZSA0IDogcmV0dXJuICJSX1Y4NTBfSEkxNiIgOwogICAgIGNhc2UgNSA6IHJldHVybiAiUl9W ODUwX0xPMTYiIDsKICAgICBjYXNlIDYgOiByZXR1cm4gIlJfVjg1MF8zMiIgOwogICAgIGNhc2Ug NyA6IHJldHVybiAiUl9WODUwXzE2IiA7CiAgICAgY2FzZSA4IDogcmV0dXJuICJSX1Y4NTBfOCIg OwogICAgIGNhc2UgOSA6IHJldHVybiAiUl9WODUwX1NEQV8xNl8xNl9PRkZTRVQiIDsKICAgICBj YXNlIDEwIDogcmV0dXJuICJSX1Y4NTBfU0RBXzE1XzE2X09GRlNFVCIgOwogICAgIGNhc2UgMTEg OiByZXR1cm4gIlJfVjg1MF9aREFfMTZfMTZfT0ZGU0VUIiA7CiAgICAgY2FzZSAxMiA6IHJldHVy biAiUl9WODUwX1pEQV8xNV8xNl9PRkZTRVQiIDsKICAgICBjYXNlIDEzIDogcmV0dXJuICJSX1Y4 NTBfVERBXzZfOF9PRkZTRVQiIDsKICAgICBjYXNlIDE0IDogcmV0dXJuICJSX1Y4NTBfVERBXzdf OF9PRkZTRVQiIDsKICAgICBjYXNlIDE1IDogcmV0dXJuICJSX1Y4NTBfVERBXzdfN19PRkZTRVQi IDsKICAgICBjYXNlIDE2IDogcmV0dXJuICJSX1Y4NTBfVERBXzE2XzE2X09GRlNFVCIgOwogICAg IGNhc2UgMTcgOiByZXR1cm4gIlJfVjg1MF9UREFfNF81X09GRlNFVCIgOwogICAgIGNhc2UgMTgg OiByZXR1cm4gIlJfVjg1MF9UREFfNF80X09GRlNFVCIgOwogICAgIGNhc2UgMTkgOiByZXR1cm4g IlJfVjg1MF9TREFfMTZfMTZfU1BMSVRfT0ZGU0VUIiA7CiAgICAgY2FzZSAyMCA6IHJldHVybiAi Ul9WODUwX1pEQV8xNl8xNl9TUExJVF9PRkZTRVQiIDsKICAgICBjYXNlIDIxIDogcmV0dXJuICJS X1Y4NTBfQ0FMTFRfNl83X09GRlNFVCIgOwogICAgIGNhc2UgMjIgOiByZXR1cm4gIlJfVjg1MF9D QUxMVF8xNl8xNl9PRkZTRVQiIDsKICAgICBjYXNlIDIzIDogcmV0dXJuICJSX1Y4NTBfR05VX1ZU SU5IRVJJVCIgOwogICAgIGNhc2UgMjQgOiByZXR1cm4gIlJfVjg1MF9HTlVfVlRFTlRSWSIgOwog ICAgIGNhc2UgMjUgOiByZXR1cm4gIlJfVjg1MF9MT05HQ0FMTCIgOwogICAgIGNhc2UgMjYgOiBy ZXR1cm4gIlJfVjg1MF9MT05HSlVNUCIgOwogICAgIGNhc2UgMjcgOiByZXR1cm4gIlJfVjg1MF9B TElHTiIgOwpkZWZhdWx0OiByZXR1cm4gKCh2b2lkICopMCk7IH0gfQojIDg3ICJyZWFkZWxmLmMi IDIKIyAxICIuLi9pbmNsdWRlL2VsZi92YXguaCIgMQojIDI3ICIuLi9pbmNsdWRlL2VsZi92YXgu aCIKc3RhdGljIGNvbnN0IGNoYXIgKiBlbGZfdmF4X3JlbG9jX3R5cGUgKHVuc2lnbmVkIGxvbmcg cnR5cGUpOyBzdGF0aWMgY29uc3QgY2hhciAqIGVsZl92YXhfcmVsb2NfdHlwZSAocnR5cGUpIHVu c2lnbmVkIGxvbmcgcnR5cGU7IHsgc3dpdGNoIChydHlwZSkgewogIGNhc2UgMCA6IHJldHVybiAi Ul9WQVhfTk9ORSIgOwogIGNhc2UgMSA6IHJldHVybiAiUl9WQVhfMzIiIDsKICBjYXNlIDIgOiBy ZXR1cm4gIlJfVkFYXzE2IiA7CiAgY2FzZSAzIDogcmV0dXJuICJSX1ZBWF84IiA7CiAgY2FzZSA0 IDogcmV0dXJuICJSX1ZBWF9QQzMyIiA7CiAgY2FzZSA1IDogcmV0dXJuICJSX1ZBWF9QQzE2IiA7 CiAgY2FzZSA2IDogcmV0dXJuICJSX1ZBWF9QQzgiIDsKICBjYXNlIDcgOiByZXR1cm4gIlJfVkFY X0dPVDMyIiA7CiAgY2FzZSAxMyA6IHJldHVybiAiUl9WQVhfUExUMzIiIDsKICBjYXNlIDE5IDog cmV0dXJuICJSX1ZBWF9DT1BZIiA7CiAgY2FzZSAyMCA6IHJldHVybiAiUl9WQVhfR0xPQl9EQVQi IDsKICBjYXNlIDIxIDogcmV0dXJuICJSX1ZBWF9KTVBfU0xPVCIgOwogIGNhc2UgMjIgOiByZXR1 cm4gIlJfVkFYX1JFTEFUSVZFIiA7CgogIGNhc2UgMjMgOiByZXR1cm4gIlJfVkFYX0dOVV9WVElO SEVSSVQiIDsKICBjYXNlIDI0IDogcmV0dXJuICJSX1ZBWF9HTlVfVlRFTlRSWSIgOwpkZWZhdWx0 OiByZXR1cm4gKCh2b2lkICopMCk7IH0gfQojIDg4ICJyZWFkZWxmLmMiIDIKIyAxICIuLi9pbmNs dWRlL2VsZi94ODYtNjQuaCIgMQojIDI2ICIuLi9pbmNsdWRlL2VsZi94ODYtNjQuaCIKc3RhdGlj IGNvbnN0IGNoYXIgKiBlbGZfeDg2XzY0X3JlbG9jX3R5cGUgKHVuc2lnbmVkIGxvbmcgcnR5cGUp OyBzdGF0aWMgY29uc3QgY2hhciAqIGVsZl94ODZfNjRfcmVsb2NfdHlwZSAocnR5cGUpIHVuc2ln bmVkIGxvbmcgcnR5cGU7IHsgc3dpdGNoIChydHlwZSkgewogICAgIGNhc2UgMCA6IHJldHVybiAi Ul9YODZfNjRfTk9ORSIgOwogICAgIGNhc2UgMSA6IHJldHVybiAiUl9YODZfNjRfNjQiIDsKICAg ICBjYXNlIDIgOiByZXR1cm4gIlJfWDg2XzY0X1BDMzIiIDsKICAgICBjYXNlIDMgOiByZXR1cm4g IlJfWDg2XzY0X0dPVDMyIiA7CiAgICAgY2FzZSA0IDogcmV0dXJuICJSX1g4Nl82NF9QTFQzMiIg OwogICAgIGNhc2UgNSA6IHJldHVybiAiUl9YODZfNjRfQ09QWSIgOwogICAgIGNhc2UgNiA6IHJl dHVybiAiUl9YODZfNjRfR0xPQl9EQVQiIDsKICAgICBjYXNlIDcgOiByZXR1cm4gIlJfWDg2XzY0 X0pVTVBfU0xPVCIgOwogICAgIGNhc2UgOCA6IHJldHVybiAiUl9YODZfNjRfUkVMQVRJVkUiIDsK ICAgICBjYXNlIDkgOiByZXR1cm4gIlJfWDg2XzY0X0dPVFBDUkVMIiA7CgogICAgIGNhc2UgMTAg OiByZXR1cm4gIlJfWDg2XzY0XzMyIiA7CiAgICAgY2FzZSAxMSA6IHJldHVybiAiUl9YODZfNjRf MzJTIiA7CiAgICAgY2FzZSAxMiA6IHJldHVybiAiUl9YODZfNjRfMTYiIDsKICAgICBjYXNlIDEz IDogcmV0dXJuICJSX1g4Nl82NF9QQzE2IiA7CiAgICAgY2FzZSAxNCA6IHJldHVybiAiUl9YODZf NjRfOCIgOwogICAgIGNhc2UgMTUgOiByZXR1cm4gIlJfWDg2XzY0X1BDOCIgOwogICAgIGNhc2Ug MTYgOiByZXR1cm4gIlJfWDg2XzY0X0RUUE1PRDY0IiA7CiAgICAgY2FzZSAxNyA6IHJldHVybiAi Ul9YODZfNjRfRFRQT0ZGNjQiIDsKICAgICBjYXNlIDE4IDogcmV0dXJuICJSX1g4Nl82NF9UUE9G RjY0IiA7CiAgICAgY2FzZSAxOSA6IHJldHVybiAiUl9YODZfNjRfVExTR0QiIDsKICAgICBjYXNl IDIwIDogcmV0dXJuICJSX1g4Nl82NF9UTFNMRCIgOwogICAgIGNhc2UgMjEgOiByZXR1cm4gIlJf WDg2XzY0X0RUUE9GRjMyIiA7CiAgICAgY2FzZSAyMiA6IHJldHVybiAiUl9YODZfNjRfR09UVFBP RkYiIDsKICAgICBjYXNlIDIzIDogcmV0dXJuICJSX1g4Nl82NF9UUE9GRjMyIiA7CiAgICAgY2Fz ZSAyNTAgOiByZXR1cm4gIlJfWDg2XzY0X0dOVV9WVElOSEVSSVQiIDsKICAgICBjYXNlIDI1MSA6 IHJldHVybiAiUl9YODZfNjRfR05VX1ZURU5UUlkiIDsKZGVmYXVsdDogcmV0dXJuICgodm9pZCAq KTApOyB9IH0KIyA4OSAicmVhZGVsZi5jIiAyCiMgMSAiLi4vaW5jbHVkZS9lbGYveHN0b3JteTE2 LmgiIDEKIyAyNiAiLi4vaW5jbHVkZS9lbGYveHN0b3JteTE2LmgiCnN0YXRpYyBjb25zdCBjaGFy ICogZWxmX3hzdG9ybXkxNl9yZWxvY190eXBlICh1bnNpZ25lZCBsb25nIHJ0eXBlKTsgc3RhdGlj IGNvbnN0IGNoYXIgKiBlbGZfeHN0b3JteTE2X3JlbG9jX3R5cGUgKHJ0eXBlKSB1bnNpZ25lZCBs b25nIHJ0eXBlOyB7IHN3aXRjaCAocnR5cGUpIHsKICBjYXNlIDAgOiByZXR1cm4gIlJfWFNUT1JN WTE2X05PTkUiIDsKCiAgY2FzZSAxIDogcmV0dXJuICJSX1hTVE9STVkxNl8zMiIgOwogIGNhc2Ug MiA6IHJldHVybiAiUl9YU1RPUk1ZMTZfMTYiIDsKICBjYXNlIDMgOiByZXR1cm4gIlJfWFNUT1JN WTE2XzgiIDsKICBjYXNlIDQgOiByZXR1cm4gIlJfWFNUT1JNWTE2X1BDMzIiIDsKICBjYXNlIDUg OiByZXR1cm4gIlJfWFNUT1JNWTE2X1BDMTYiIDsKICBjYXNlIDYgOiByZXR1cm4gIlJfWFNUT1JN WTE2X1BDOCIgOwoKICBjYXNlIDcgOiByZXR1cm4gIlJfWFNUT1JNWTE2X1JFTF8xMiIgOwogIGNh c2UgOCA6IHJldHVybiAiUl9YU1RPUk1ZMTZfMjQiIDsKICBjYXNlIDkgOiByZXR1cm4gIlJfWFNU T1JNWTE2X0ZQVFIxNiIgOwoKICBjYXNlIDEwIDogcmV0dXJuICJSX1hTVE9STVkxNl9MTzE2IiA7 CiAgY2FzZSAxMSA6IHJldHVybiAiUl9YU1RPUk1ZMTZfSEkxNiIgOwogIGNhc2UgMTIgOiByZXR1 cm4gIlJfWFNUT1JNWTE2XzEyIiA7CgogIGNhc2UgMTI4IDogcmV0dXJuICJSX1hTVE9STVkxNl9H TlVfVlRJTkhFUklUIiA7CiAgY2FzZSAxMjkgOiByZXR1cm4gIlJfWFNUT1JNWTE2X0dOVV9WVEVO VFJZIiA7CmRlZmF1bHQ6IHJldHVybiAoKHZvaWQgKikwKTsgfSB9CiMgOTAgInJlYWRlbGYuYyIg MgojIDEgIi4uL2luY2x1ZGUvZWxmL2lxMjAwMC5oIiAxCiMgMjYgIi4uL2luY2x1ZGUvZWxmL2lx MjAwMC5oIgpzdGF0aWMgY29uc3QgY2hhciAqIGVsZl9pcTIwMDBfcmVsb2NfdHlwZSAodW5zaWdu ZWQgbG9uZyBydHlwZSk7IHN0YXRpYyBjb25zdCBjaGFyICogZWxmX2lxMjAwMF9yZWxvY190eXBl IChydHlwZSkgdW5zaWduZWQgbG9uZyBydHlwZTsgeyBzd2l0Y2ggKHJ0eXBlKSB7CiAgY2FzZSAw IDogcmV0dXJuICJSX0lRMjAwMF9OT05FIiA7CiAgY2FzZSAxIDogcmV0dXJuICJSX0lRMjAwMF8x NiIgOwogIGNhc2UgMiA6IHJldHVybiAiUl9JUTIwMDBfMzIiIDsKICBjYXNlIDMgOiByZXR1cm4g IlJfSVEyMDAwXzI2IiA7CiAgY2FzZSA0IDogcmV0dXJuICJSX0lRMjAwMF9QQzE2IiA7CiAgY2Fz ZSA1IDogcmV0dXJuICJSX0lRMjAwMF9ISTE2IiA7CiAgY2FzZSA2IDogcmV0dXJuICJSX0lRMjAw MF9MTzE2IiA7CiAgY2FzZSA3IDogcmV0dXJuICJSX0lRMjAwMF9PRkZTRVRfMTYiIDsKICBjYXNl IDggOiByZXR1cm4gIlJfSVEyMDAwX09GRlNFVF8yMSIgOwogIGNhc2UgOSA6IHJldHVybiAiUl9J UTIwMDBfVUhJMTYiIDsKICBjYXNlIDEwIDogcmV0dXJuICJSX0lRMjAwMF8zMl9ERUJVRyIgOwog IGNhc2UgMjAwIDogcmV0dXJuICJSX0lRMjAwMF9HTlVfVlRJTkhFUklUIiA7CiAgY2FzZSAyMDEg OiByZXR1cm4gIlJfSVEyMDAwX0dOVV9WVEVOVFJZIiA7CmRlZmF1bHQ6IHJldHVybiAoKHZvaWQg KikwKTsgfSB9CiMgOTEgInJlYWRlbGYuYyIgMgoKIyAxICIuL2J1Y29tbS5oIiAxCiMgMjggIi4v YnVjb21tLmgiCiMgMSAiLi9jb25maWcuaCIgMQojIDI5ICIuL2J1Y29tbS5oIiAyCiMgMSAiLi4v aW5jbHVkZS9iaW4tYnVncy5oIiAxCiMgMzAgIi4vYnVjb21tLmgiIDIKCgojIDEgIi91c3IvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkYXJnLmgiIDEgMwojIDEw NSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjQvaW5jbHVkZS9zdGRhcmcu aCIgMwp0eXBlZGVmIF9fZ251Y192YV9saXN0IHZhX2xpc3Q7CiMgMzMgIi4vYnVjb21tLmgiIDIK CgoKCgoKCiMgMSAiLi4vaW5jbHVkZS9mb3Blbi1zYW1lLmgiIDEKIyA0MSAiLi9idWNvbW0uaCIg MgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZXJy bm8uaCIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAxIDMKIyAyNSAiL3Vz ci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5o IiAxIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEgMwojIDUgIi91c3IvaW5j bHVkZS9saW51eC9lcnJuby5oIiAyIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIg MiAzCiMgMzggIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKZXh0ZXJuIGludCAqX19lcnJu b19sb2NhdGlvbiAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDM3ICIvdXNy L2luY2x1ZGUvZXJybm8uaCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVy biBjaGFyICpwcm9ncmFtX2ludm9jYXRpb25fbmFtZSwgKnByb2dyYW1faW52b2NhdGlvbl9zaG9y dF9uYW1lOwoKCgoKIyA2OSAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDMKdHlwZWRlZiBpbnQgZXJy b3JfdDsKIyA0NCAiLi9idWNvbW0uaCIgMgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o IiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCgojIDE3NSAiL3Vzci9pbmNsdWRl L3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXhfb3B0LmgiIDEgMwojIDE3 NiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9l bnZpcm9ubWVudHMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50cy5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMjQgIi91c3IvaW5j bHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIiAyIDMKIyAxODAgIi91c3IvaW5jbHVkZS91bmlzdGQu aCIgMiAzCiMgMTk5ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKIyAxICIvdXNyL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDAgIi91 c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCiMgMjQwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMK dHlwZWRlZiBfX2ludHB0cl90IGludHB0cl90OwoKCgoKCgp0eXBlZGVmIF9fc29ja2xlbl90IHNv Y2tsZW5fdDsKIyAyNjAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGFjY2Vz cyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpIDsKCgoKCmV4dGVybiBpbnQgZXVp ZGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpIDsKIyAyOTAgIi91c3Iv aW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmZfdCBsc2VlayAoaW50IF9fZmQsIF9fb2Zm X3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgOwojIDMwMiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o IiAzCmV4dGVybiBfX29mZjY0X3QgbHNlZWs2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX29mZnNl dCwgaW50IF9fd2hlbmNlKSA7CgoKCmV4dGVybiBpbnQgY2xvc2UgKGludCBfX2ZkKSA7CgoKCmV4 dGVybiBzc2l6ZV90IHJlYWQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVz KSA7CgoKZXh0ZXJuIHNzaXplX3Qgd3JpdGUgKGludCBfX2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVm LCBzaXplX3QgX19uKSA7CgoKCmV4dGVybiBzc2l6ZV90IHByZWFkIChpbnQgX19mZCwgdm9pZCAq X19idWYsIHNpemVfdCBfX25ieXRlcywgX19vZmZfdCBfX29mZnNldCkKICAgICA7CmV4dGVybiBz c2l6ZV90IHB3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24s CiAgICAgICAgICAgICAgICAgICAgICAgX19vZmZfdCBfX29mZnNldCkgOwojIDM0MCAiL3Vzci9p bmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBzc2l6ZV90IHByZWFkNjQgKGludCBfX2ZkLCB2b2lk ICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0 X3QgX19vZmZzZXQpIDsKCgpleHRlcm4gc3NpemVfdCBwd3JpdGU2NCAoaW50IF9fZmQsIF9fY29u c3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICBfX29m ZjY0X3QgX19vZmZzZXQpIDsKCgoKCgoKCmV4dGVybiBpbnQgcGlwZSAoaW50IF9fcGlwZWRlc1sy XSkgOwojIDM2MiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiB1bnNpZ25lZCBpbnQg YWxhcm0gKHVuc2lnbmVkIGludCBfX3NlY29uZHMpIDsKIyAzNzEgIi91c3IvaW5jbHVkZS91bmlz dGQuaCIgMwpleHRlcm4gdW5zaWduZWQgaW50IHNsZWVwICh1bnNpZ25lZCBpbnQgX19zZWNvbmRz KSA7CgoKCgoKCmV4dGVybiBfX3VzZWNvbmRzX3QgdWFsYXJtIChfX3VzZWNvbmRzX3QgX192YWx1 ZSwgX191c2Vjb25kc190IF9faW50ZXJ2YWwpCiAgICAgOwoKCgpleHRlcm4gaW50IHVzbGVlcCAo X191c2Vjb25kc190IF9fdXNlY29uZHMpIDsKCgoKCgpleHRlcm4gaW50IHBhdXNlICh2b2lkKSA7 CgoKCmV4dGVybiBpbnQgY2hvd24gKF9fY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90IF9fb3du ZXIsIF9fZ2lkX3QgX19ncm91cCkKICAgICA7CgoKCmV4dGVybiBpbnQgZmNob3duIChpbnQgX19m ZCwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApIDsKCgoKCmV4dGVybiBpbnQgbGNo b3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3Jv dXApCiAgICAgOwoKCgoKZXh0ZXJuIGludCBjaGRpciAoX19jb25zdCBjaGFyICpfX3BhdGgpIDsK CgoKZXh0ZXJuIGludCBmY2hkaXIgKGludCBfX2ZkKSA7CiMgNDIzICIvdXNyL2luY2x1ZGUvdW5p c3RkLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGN3ZCAoY2hhciAqX19idWYsIHNpemVfdCBfX3NpemUp IDsKCgoKCgpleHRlcm4gY2hhciAqZ2V0X2N1cnJlbnRfZGlyX25hbWUgKHZvaWQpIDsKCgoKCgoK ZXh0ZXJuIGNoYXIgKmdldHdkIChjaGFyICpfX2J1ZikgOwoKCgoKZXh0ZXJuIGludCBkdXAgKGlu dCBfX2ZkKSA7CgoKZXh0ZXJuIGludCBkdXAyIChpbnQgX19mZCwgaW50IF9fZmQyKSA7CgoKZXh0 ZXJuIGNoYXIgKipfX2Vudmlyb247CgpleHRlcm4gY2hhciAqKmVudmlyb247CgoKCgoKZXh0ZXJu IGludCBleGVjdmUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9fYXJndltd LAogICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCBfX2VudnBbXSkgOwoKCgoKZXh0ZXJu IGludCBmZXhlY3ZlIChpbnQgX19mZCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSwgY2hhciAqX19j b25zdCBfX2VudnBbXSkKICAgICA7CgoKCgpleHRlcm4gaW50IGV4ZWN2IChfX2NvbnN0IGNoYXIg Kl9fcGF0aCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSkgOwoKCgpleHRlcm4gaW50IGV4ZWNsZSAo X19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgOwoKCgpleHRl cm4gaW50IGV4ZWNsIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2FyZywg Li4uKSA7CgoKCmV4dGVybiBpbnQgZXhlY3ZwIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgY2hhciAq X19jb25zdCBfX2FyZ3ZbXSkgOwoKCgoKZXh0ZXJuIGludCBleGVjbHAgKF9fY29uc3QgY2hhciAq X19maWxlLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pIDsKCgoKCmV4dGVybiBpbnQgbmljZSAo aW50IF9faW5jKSA7CgoKCgpleHRlcm4gdm9pZCBfZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJp YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9jb25m bmFtZS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMwplbnVtCiAg ewogICAgX1BDX0xJTktfTUFYLAoKICAgIF9QQ19NQVhfQ0FOT04sCgogICAgX1BDX01BWF9JTlBV VCwKCiAgICBfUENfTkFNRV9NQVgsCgogICAgX1BDX1BBVEhfTUFYLAoKICAgIF9QQ19QSVBFX0JV RiwKCiAgICBfUENfQ0hPV05fUkVTVFJJQ1RFRCwKCiAgICBfUENfTk9fVFJVTkMsCgogICAgX1BD X1ZESVNBQkxFLAoKICAgIF9QQ19TWU5DX0lPLAoKICAgIF9QQ19BU1lOQ19JTywKCiAgICBfUENf UFJJT19JTywKCiAgICBfUENfU09DS19NQVhCVUYsCgogICAgX1BDX0ZJTEVTSVpFQklUUywKCiAg ICBfUENfUkVDX0lOQ1JfWEZFUl9TSVpFLAoKICAgIF9QQ19SRUNfTUFYX1hGRVJfU0laRSwKCiAg ICBfUENfUkVDX01JTl9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19YRkVSX0FMSUdOLAoKICAgIF9Q Q19BTExPQ19TSVpFX01JTiwKCiAgICBfUENfU1lNTElOS19NQVgKCiAgfTsKCgplbnVtCiAgewog ICAgX1NDX0FSR19NQVgsCgogICAgX1NDX0NISUxEX01BWCwKCiAgICBfU0NfQ0xLX1RDSywKCiAg ICBfU0NfTkdST1VQU19NQVgsCgogICAgX1NDX09QRU5fTUFYLAoKICAgIF9TQ19TVFJFQU1fTUFY LAoKICAgIF9TQ19UWk5BTUVfTUFYLAoKICAgIF9TQ19KT0JfQ09OVFJPTCwKCiAgICBfU0NfU0FW RURfSURTLAoKICAgIF9TQ19SRUFMVElNRV9TSUdOQUxTLAoKICAgIF9TQ19QUklPUklUWV9TQ0hF RFVMSU5HLAoKICAgIF9TQ19USU1FUlMsCgogICAgX1NDX0FTWU5DSFJPTk9VU19JTywKCiAgICBf U0NfUFJJT1JJVElaRURfSU8sCgogICAgX1NDX1NZTkNIUk9OSVpFRF9JTywKCiAgICBfU0NfRlNZ TkMsCgogICAgX1NDX01BUFBFRF9GSUxFUywKCiAgICBfU0NfTUVNTE9DSywKCiAgICBfU0NfTUVN TE9DS19SQU5HRSwKCiAgICBfU0NfTUVNT1JZX1BST1RFQ1RJT04sCgogICAgX1NDX01FU1NBR0Vf UEFTU0lORywKCiAgICBfU0NfU0VNQVBIT1JFUywKCiAgICBfU0NfU0hBUkVEX01FTU9SWV9PQkpF Q1RTLAoKICAgIF9TQ19BSU9fTElTVElPX01BWCwKCiAgICBfU0NfQUlPX01BWCwKCiAgICBfU0Nf QUlPX1BSSU9fREVMVEFfTUFYLAoKICAgIF9TQ19ERUxBWVRJTUVSX01BWCwKCiAgICBfU0NfTVFf T1BFTl9NQVgsCgogICAgX1NDX01RX1BSSU9fTUFYLAoKICAgIF9TQ19WRVJTSU9OLAoKICAgIF9T Q19QQUdFU0laRSwKCgogICAgX1NDX1JUU0lHX01BWCwKCiAgICBfU0NfU0VNX05TRU1TX01BWCwK CiAgICBfU0NfU0VNX1ZBTFVFX01BWCwKCiAgICBfU0NfU0lHUVVFVUVfTUFYLAoKICAgIF9TQ19U SU1FUl9NQVgsCgoKCgogICAgX1NDX0JDX0JBU0VfTUFYLAoKICAgIF9TQ19CQ19ESU1fTUFYLAoK ICAgIF9TQ19CQ19TQ0FMRV9NQVgsCgogICAgX1NDX0JDX1NUUklOR19NQVgsCgogICAgX1NDX0NP TExfV0VJR0hUU19NQVgsCgogICAgX1NDX0VRVUlWX0NMQVNTX01BWCwKCiAgICBfU0NfRVhQUl9O RVNUX01BWCwKCiAgICBfU0NfTElORV9NQVgsCgogICAgX1NDX1JFX0RVUF9NQVgsCgogICAgX1ND X0NIQVJDTEFTU19OQU1FX01BWCwKCgogICAgX1NDXzJfVkVSU0lPTiwKCiAgICBfU0NfMl9DX0JJ TkQsCgogICAgX1NDXzJfQ19ERVYsCgogICAgX1NDXzJfRk9SVF9ERVYsCgogICAgX1NDXzJfRk9S VF9SVU4sCgogICAgX1NDXzJfU1dfREVWLAoKICAgIF9TQ18yX0xPQ0FMRURFRiwKCgogICAgX1ND X1BJSSwKCiAgICBfU0NfUElJX1hUSSwKCiAgICBfU0NfUElJX1NPQ0tFVCwKCiAgICBfU0NfUElJ X0lOVEVSTkVULAoKICAgIF9TQ19QSUlfT1NJLAoKICAgIF9TQ19QT0xMLAoKICAgIF9TQ19TRUxF Q1QsCgogICAgX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX0lPVl9NQVggPSBfU0NfVUlPX01BWElP ViwKCiAgICBfU0NfUElJX0lOVEVSTkVUX1NUUkVBTSwKCiAgICBfU0NfUElJX0lOVEVSTkVUX0RH UkFNLAoKICAgIF9TQ19QSUlfT1NJX0NPVFMsCgogICAgX1NDX1BJSV9PU0lfQ0xUUywKCiAgICBf U0NfUElJX09TSV9NLAoKICAgIF9TQ19UX0lPVl9NQVgsCgoKCiAgICBfU0NfVEhSRUFEUywKCiAg ICBfU0NfVEhSRUFEX1NBRkVfRlVOQ1RJT05TLAoKICAgIF9TQ19HRVRHUl9SX1NJWkVfTUFYLAoK ICAgIF9TQ19HRVRQV19SX1NJWkVfTUFYLAoKICAgIF9TQ19MT0dJTl9OQU1FX01BWCwKCiAgICBf U0NfVFRZX05BTUVfTUFYLAoKICAgIF9TQ19USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TLAoK ICAgIF9TQ19USFJFQURfS0VZU19NQVgsCgogICAgX1NDX1RIUkVBRF9TVEFDS19NSU4sCgogICAg X1NDX1RIUkVBRF9USFJFQURTX01BWCwKCiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSLAoK ICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS1NJWkUsCgogICAgX1NDX1RIUkVBRF9QUklPUklUWV9T Q0hFRFVMSU5HLAoKICAgIF9TQ19USFJFQURfUFJJT19JTkhFUklULAoKICAgIF9TQ19USFJFQURf UFJJT19QUk9URUNULAoKICAgIF9TQ19USFJFQURfUFJPQ0VTU19TSEFSRUQsCgoKICAgIF9TQ19O UFJPQ0VTU09SU19DT05GLAoKICAgIF9TQ19OUFJPQ0VTU09SU19PTkxOLAoKICAgIF9TQ19QSFlT X1BBR0VTLAoKICAgIF9TQ19BVlBIWVNfUEFHRVMsCgogICAgX1NDX0FURVhJVF9NQVgsCgogICAg X1NDX1BBU1NfTUFYLAoKCiAgICBfU0NfWE9QRU5fVkVSU0lPTiwKCiAgICBfU0NfWE9QRU5fWENV X1ZFUlNJT04sCgogICAgX1NDX1hPUEVOX1VOSVgsCgogICAgX1NDX1hPUEVOX0NSWVBULAoKICAg IF9TQ19YT1BFTl9FTkhfSTE4TiwKCiAgICBfU0NfWE9QRU5fU0hNLAoKCiAgICBfU0NfMl9DSEFS X1RFUk0sCgogICAgX1NDXzJfQ19WRVJTSU9OLAoKICAgIF9TQ18yX1VQRSwKCgogICAgX1NDX1hP UEVOX1hQRzIsCgogICAgX1NDX1hPUEVOX1hQRzMsCgogICAgX1NDX1hPUEVOX1hQRzQsCgoKICAg IF9TQ19DSEFSX0JJVCwKCiAgICBfU0NfQ0hBUl9NQVgsCgogICAgX1NDX0NIQVJfTUlOLAoKICAg IF9TQ19JTlRfTUFYLAoKICAgIF9TQ19JTlRfTUlOLAoKICAgIF9TQ19MT05HX0JJVCwKCiAgICBf U0NfV09SRF9CSVQsCgogICAgX1NDX01CX0xFTl9NQVgsCgogICAgX1NDX05aRVJPLAoKICAgIF9T Q19TU0laRV9NQVgsCgogICAgX1NDX1NDSEFSX01BWCwKCiAgICBfU0NfU0NIQVJfTUlOLAoKICAg IF9TQ19TSFJUX01BWCwKCiAgICBfU0NfU0hSVF9NSU4sCgogICAgX1NDX1VDSEFSX01BWCwKCiAg ICBfU0NfVUlOVF9NQVgsCgogICAgX1NDX1VMT05HX01BWCwKCiAgICBfU0NfVVNIUlRfTUFYLAoK CiAgICBfU0NfTkxfQVJHTUFYLAoKICAgIF9TQ19OTF9MQU5HTUFYLAoKICAgIF9TQ19OTF9NU0dN QVgsCgogICAgX1NDX05MX05NQVgsCgogICAgX1NDX05MX1NFVE1BWCwKCiAgICBfU0NfTkxfVEVY VE1BWCwKCgogICAgX1NDX1hCUzVfSUxQMzJfT0ZGMzIsCgogICAgX1NDX1hCUzVfSUxQMzJfT0ZG QklHLAoKICAgIF9TQ19YQlM1X0xQNjRfT0ZGNjQsCgogICAgX1NDX1hCUzVfTFBCSUdfT0ZGQklH LAoKCiAgICBfU0NfWE9QRU5fTEVHQUNZLAoKICAgIF9TQ19YT1BFTl9SRUFMVElNRSwKCiAgICBf U0NfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUywKCgogICAgX1NDX0FEVklTT1JZX0lORk8sCgogICAg X1NDX0JBUlJJRVJTLAoKICAgIF9TQ19CQVNFLAoKICAgIF9TQ19DX0xBTkdfU1VQUE9SVCwKCiAg ICBfU0NfQ19MQU5HX1NVUFBPUlRfUiwKCiAgICBfU0NfQ0xPQ0tfU0VMRUNUSU9OLAoKICAgIF9T Q19DUFVUSU1FLAoKICAgIF9TQ19USFJFQURfQ1BVVElNRSwKCiAgICBfU0NfREVWSUNFX0lPLAoK ICAgIF9TQ19ERVZJQ0VfU1BFQ0lGSUMsCgogICAgX1NDX0RFVklDRV9TUEVDSUZJQ19SLAoKICAg IF9TQ19GRF9NR01ULAoKICAgIF9TQ19GSUZPLAoKICAgIF9TQ19QSVBFLAoKICAgIF9TQ19GSUxF X0FUVFJJQlVURVMsCgogICAgX1NDX0ZJTEVfTE9DS0lORywKCiAgICBfU0NfRklMRV9TWVNURU0s CgogICAgX1NDX01PTk9UT05JQ19DTE9DSywKCiAgICBfU0NfTVVMVElfUFJPQ0VTUywKCiAgICBf U0NfU0lOR0xFX1BST0NFU1MsCgogICAgX1NDX05FVFdPUktJTkcsCgogICAgX1NDX1JFQURFUl9X UklURVJfTE9DS1MsCgogICAgX1NDX1NQSU5fTE9DS1MsCgogICAgX1NDX1JFR0VYUCwKCiAgICBf U0NfUkVHRVhfVkVSU0lPTiwKCiAgICBfU0NfU0hFTEwsCgogICAgX1NDX1NJR05BTFMsCgogICAg X1NDX1NQQVdOLAoKICAgIF9TQ19TUE9SQURJQ19TRVJWRVIsCgogICAgX1NDX1RIUkVBRF9TUE9S QURJQ19TRVJWRVIsCgogICAgX1NDX1NZU1RFTV9EQVRBQkFTRSwKCiAgICBfU0NfU1lTVEVNX0RB VEFCQVNFX1IsCgogICAgX1NDX1RJTUVPVVRTLAoKICAgIF9TQ19UWVBFRF9NRU1PUllfT0JKRUNU UywKCiAgICBfU0NfVVNFUl9HUk9VUFMsCgogICAgX1NDX1VTRVJfR1JPVVBTX1IsCgogICAgX1ND XzJfUEJTLAoKICAgIF9TQ18yX1BCU19BQ0NPVU5USU5HLAoKICAgIF9TQ18yX1BCU19MT0NBVEUs CgogICAgX1NDXzJfUEJTX01FU1NBR0UsCgogICAgX1NDXzJfUEJTX1RSQUNLLAoKICAgIF9TQ19T WU1MT09QX01BWCwKCiAgICBfU0NfU1RSRUFNUywKCiAgICBfU0NfMl9QQlNfQ0hFQ0tQT0lOVCwK CgogICAgX1NDX1Y2X0lMUDMyX09GRjMyLAoKICAgIF9TQ19WNl9JTFAzMl9PRkZCSUcsCgogICAg X1NDX1Y2X0xQNjRfT0ZGNjQsCgogICAgX1NDX1Y2X0xQQklHX09GRkJJRywKCgogICAgX1NDX0hP U1RfTkFNRV9NQVgsCgogICAgX1NDX1RSQUNFLAoKICAgIF9TQ19UUkFDRV9FVkVOVF9GSUxURVIs CgogICAgX1NDX1RSQUNFX0lOSEVSSVQsCgogICAgX1NDX1RSQUNFX0xPRwoKICB9OwoKCgoKCmVu dW0KICB7CiAgICBfQ1NfUEFUSCwKCgoKCiAgICBfQ1NfTEZTX0NGTEFHUyA9IDEwMDAsCgogICAg X0NTX0xGU19MREZMQUdTLAoKICAgIF9DU19MRlNfTElCUywKCiAgICBfQ1NfTEZTX0xJTlRGTEFH UywKCiAgICBfQ1NfTEZTNjRfQ0ZMQUdTLAoKICAgIF9DU19MRlM2NF9MREZMQUdTLAoKICAgIF9D U19MRlM2NF9MSUJTLAoKICAgIF9DU19MRlM2NF9MSU5URkxBR1MsCgoKCgogICAgX0NTX1hCUzVf SUxQMzJfT0ZGMzJfQ0ZMQUdTID0gMTEwMCwKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MREZM QUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xJQlMsCgogICAgX0NTX1hCUzVfSUxQMzJf T0ZGMzJfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19DRkxBR1MsCgogICAg X0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklH X0xJQlMsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJTlRGTEFHUywKCiAgICBfQ1NfWEJT NV9MUDY0X09GRjY0X0NGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xERkxBR1MsCgog ICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSUJTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElO VEZMQUdTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1hCUzVf TFBCSUdfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xJQlMsCgog ICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xJTlRGTEFHUywKCgoKICAgIF9DU19QT1NJWF9WNl9J TFAzMl9PRkYzMl9DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xERkxBR1Ms CgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xJQlMsCgogICAgX0NTX1BPU0lYX1Y2X0lM UDMyX09GRjMyX0xJTlRGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0NGTEFH UywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1BPU0lY X1Y2X0lMUDMyX09GRkJJR19MSUJTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTElO VEZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09GRjY0X0NGTEFHUywKCiAgICBfQ1NfUE9T SVhfVjZfTFA2NF9PRkY2NF9MREZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09GRjY0X0xJ QlMsCgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElOVEZMQUdTLAoKICAgIF9DU19QT1NJ WF9WNl9MUEJJR19PRkZCSUdfQ0ZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdf TERGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xJQlMsCgogICAgX0NTX1BP U0lYX1Y2X0xQQklHX09GRkJJR19MSU5URkxBR1MsCgoKCiAgICBfQ1NfVjZfV0lEVEhfUkVTVFJJ Q1RFRF9FTlZTCgogIH07CiMgNTAxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCmV4dGVy biBsb25nIGludCBwYXRoY29uZiAoX19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX25hbWUpIDsK CgpleHRlcm4gbG9uZyBpbnQgZnBhdGhjb25mIChpbnQgX19mZCwgaW50IF9fbmFtZSkgOwoKCmV4 dGVybiBsb25nIGludCBzeXNjb25mIChpbnQgX19uYW1lKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCmV4dGVybiBzaXplX3QgY29uZnN0ciAoaW50IF9fbmFtZSwgY2hhciAqX19idWYs IHNpemVfdCBfX2xlbikgOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGlkICh2b2lkKSA7CgoKZXh0 ZXJuIF9fcGlkX3QgZ2V0cHBpZCAodm9pZCkgOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAo dm9pZCkgOwojIDUzNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IF9f Z2V0cGdpZCAoX19waWRfdCBfX3BpZCkgOwoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdpZCAoX19waWRf dCBfX3BpZCkgOwoKCgoKCgpleHRlcm4gaW50IHNldHBnaWQgKF9fcGlkX3QgX19waWQsIF9fcGlk X3QgX19wZ2lkKSA7CiMgNTYyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBz ZXRwZ3JwICh2b2lkKSA7CiMgNTgwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9f cGlkX3Qgc2V0c2lkICh2b2lkKSA7CgoKCmV4dGVybiBfX3BpZF90IGdldHNpZCAoX19waWRfdCBf X3BpZCkgOwoKCgpleHRlcm4gX191aWRfdCBnZXR1aWQgKHZvaWQpIDsKCgpleHRlcm4gX191aWRf dCBnZXRldWlkICh2b2lkKSA7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lkICh2b2lkKSA7CgoKZXh0 ZXJuIF9fZ2lkX3QgZ2V0ZWdpZCAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBnZXRncm91cHMgKGlu dCBfX3NpemUsIF9fZ2lkX3QgX19saXN0W10pIDsKCgoKZXh0ZXJuIGludCBncm91cF9tZW1iZXIg KF9fZ2lkX3QgX19naWQpIDsKCgoKCgoKZXh0ZXJuIGludCBzZXR1aWQgKF9fdWlkX3QgX191aWQp IDsKCgoKCmV4dGVybiBpbnQgc2V0cmV1aWQgKF9fdWlkX3QgX19ydWlkLCBfX3VpZF90IF9fZXVp ZCkgOwoKCgoKZXh0ZXJuIGludCBzZXRldWlkIChfX3VpZF90IF9fdWlkKSA7CgoKCgoKCmV4dGVy biBpbnQgc2V0Z2lkIChfX2dpZF90IF9fZ2lkKSA7CgoKCgpleHRlcm4gaW50IHNldHJlZ2lkIChf X2dpZF90IF9fcmdpZCwgX19naWRfdCBfX2VnaWQpIDsKCgoKCmV4dGVybiBpbnQgc2V0ZWdpZCAo X19naWRfdCBfX2dpZCkgOwoKCgoKCgpleHRlcm4gX19waWRfdCBmb3JrICh2b2lkKSA7CgoKCgoK CmV4dGVybiBfX3BpZF90IHZmb3JrICh2b2lkKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKnR0eW5hbWUg KGludCBfX2ZkKSA7CgoKCmV4dGVybiBpbnQgdHR5bmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19i dWYsIHNpemVfdCBfX2J1ZmxlbikgOwoKCgpleHRlcm4gaW50IGlzYXR0eSAoaW50IF9fZmQpIDsK CgoKCgpleHRlcm4gaW50IHR0eXNsb3QgKHZvaWQpIDsKCgoKCmV4dGVybiBpbnQgbGluayAoX19j b25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgOwoKCgpleHRlcm4gaW50IHN5 bWxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8pIDsKCgoKCmV4 dGVybiBpbnQgcmVhZGxpbmsgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3BhdGgsIGNoYXIg Kl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgOwoK CgpleHRlcm4gaW50IHVubGluayAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgpleHRlcm4gaW50 IHJtZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgOwoKCgpleHRlcm4gX19waWRfdCB0Y2dldHBn cnAgKGludCBfX2ZkKSA7CgoKZXh0ZXJuIGludCB0Y3NldHBncnAgKGludCBfX2ZkLCBfX3BpZF90 IF9fcGdycF9pZCkgOwoKCgpleHRlcm4gY2hhciAqZ2V0bG9naW4gKHZvaWQpIDsKCgoKCmV4dGVy biBpbnQgZ2V0bG9naW5fciAoY2hhciAqX19uYW1lLCBzaXplX3QgX19uYW1lX2xlbikgOwoKCgoK ZXh0ZXJuIGludCBzZXRsb2dpbiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKIyA3MjYgIi91c3Iv aW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi4uL2luY2x1ZGUvZ2V0b3B0LmgiIDEgMwojIDM2ICIu Li9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBjaGFyICpvcHRhcmc7CiMgNTAgIi4uL2luY2x1 ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGludCBvcHRpbmQ7CgoKCgpleHRlcm4gaW50IG9wdGVycjsK CgoKZXh0ZXJuIGludCBvcHRvcHQ7CiMgODIgIi4uL2luY2x1ZGUvZ2V0b3B0LmgiIDMKc3RydWN0 IG9wdGlvbgp7CgogIGNvbnN0IGNoYXIgKm5hbWU7CgoKCgoKICBpbnQgaGFzX2FyZzsKICBpbnQg KmZsYWc7CiAgaW50IHZhbDsKfTsKIyAxMTMgIi4uL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJu IGludCBnZXRvcHQgKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwgY29uc3QgY2hhciAqc2hv cnRvcHRzKTsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0b3B0X2xvbmcgKGludCBhcmdjLCBjaGFyICpj b25zdCAqYXJndiwgY29uc3QgY2hhciAqc2hvcnRvcHRzLAogICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25nb3B0cywgaW50ICpsb25naW5kKTsKZXh0ZXJuIGlu dCBnZXRvcHRfbG9uZ19vbmx5IChpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc2hvcnRvcHRzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLCBpbnQgKmxvbmdp bmQpOwoKCmV4dGVybiBpbnQgX2dldG9wdF9pbnRlcm5hbCAoaW50IGFyZ2MsIGNoYXIgKmNvbnN0 ICphcmd2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNob3J0b3B0 cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25n b3B0cywgaW50ICpsb25naW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsb25n X29ubHkpOwojIDcyNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgoKCgoKCmV4dGVybiBp bnQgZ2V0aG9zdG5hbWUgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSA7CgoKCgoKCmV4dGVy biBpbnQgc2V0aG9zdG5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIDsK CgoKZXh0ZXJuIGludCBzZXRob3N0aWQgKGxvbmcgaW50IF9faWQpIDsKCgoKCgpleHRlcm4gaW50 IGdldGRvbWFpbm5hbWUgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSA7CmV4dGVybiBpbnQg c2V0ZG9tYWlubmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgOwoKCgoK CmV4dGVybiBpbnQgdmhhbmd1cCAodm9pZCkgOwoKCmV4dGVybiBpbnQgcmV2b2tlIChfX2NvbnN0 IGNoYXIgKl9fZmlsZSkgOwoKCgoKCgoKZXh0ZXJuIGludCBwcm9maWwgKHVuc2lnbmVkIHNob3J0 IGludCAqX19zYW1wbGVfYnVmZmVyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fb2Zmc2V0LCB1bnNpZ25lZCBpbnQgX19zY2FsZSkgOwoKCgoKCmV4dGVybiBpbnQg YWNjdCAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgoKZXh0ZXJuIGNoYXIgKmdldHVzZXJzaGVs bCAodm9pZCkgOwpleHRlcm4gdm9pZCBlbmR1c2Vyc2hlbGwgKHZvaWQpIDsKZXh0ZXJuIHZvaWQg c2V0dXNlcnNoZWxsICh2b2lkKSA7CgoKCgoKZXh0ZXJuIGludCBkYWVtb24gKGludCBfX25vY2hk aXIsIGludCBfX25vY2xvc2UpIDsKCgoKCgoKZXh0ZXJuIGludCBjaHJvb3QgKF9fY29uc3QgY2hh ciAqX19wYXRoKSA7CgoKCmV4dGVybiBjaGFyICpnZXRwYXNzIChfX2NvbnN0IGNoYXIgKl9fcHJv bXB0KSA7CgoKCgoKZXh0ZXJuIGludCBmc3luYyAoaW50IF9fZmQpIDsKCgoKCgoKZXh0ZXJuIGxv bmcgaW50IGdldGhvc3RpZCAodm9pZCkgOwoKCmV4dGVybiB2b2lkIHN5bmMgKHZvaWQpIDsKCgoK CmV4dGVybiBpbnQgZ2V0cGFnZXNpemUgKHZvaWQpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCgoKCmV4dGVybiBpbnQgdHJ1bmNhdGUgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX29mZl90 IF9fbGVuZ3RoKSA7CiMgODM2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCB0 cnVuY2F0ZTY0IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19vZmY2NF90IF9fbGVuZ3RoKSA7CgoK CgpleHRlcm4gaW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQsIF9fb2ZmX3QgX19sZW5ndGgpIDsKIyA4 NTEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGZ0cnVuY2F0ZTY0IChpbnQg X19mZCwgX19vZmY2NF90IF9fbGVuZ3RoKSA7CgoKCgoKZXh0ZXJuIGludCBnZXRkdGFibGVzaXpl ICh2b2lkKSA7CiMgODY2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBicmsg KHZvaWQgKl9fYWRkcikgOwoKCgoKCmV4dGVybiB2b2lkICpzYnJrIChpbnRwdHJfdCBfX2RlbHRh KSA7CiMgODg3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGxvbmcgaW50IHN5c2Nh bGwgKGxvbmcgaW50IF9fc3lzbm8sIC4uLikgOwojIDkwNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o IiAzCmV4dGVybiBpbnQgbG9ja2YgKGludCBfX2ZkLCBpbnQgX19jbWQsIF9fb2ZmX3QgX19sZW4p IDsKIyA5MTcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGxvY2tmNjQgKGlu dCBfX2ZkLCBpbnQgX19jbWQsIF9fb2ZmNjRfdCBfX2xlbikgOwojIDkzOCAiL3Vzci9pbmNsdWRl L3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgZmRhdGFzeW5jIChpbnQgX19maWxkZXMpIDsKCgoKCgoK CmV4dGVybiBjaGFyICpjcnlwdCAoX19jb25zdCBjaGFyICpfX2tleSwgX19jb25zdCBjaGFyICpf X3NhbHQpIDsKCgoKZXh0ZXJuIHZvaWQgZW5jcnlwdCAoY2hhciAqX19ibG9jaywgaW50IF9fZWRm bGFnKSA7CgoKCgoKCmV4dGVybiB2b2lkIHN3YWIgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBf X2Zyb20sIHZvaWQgKl9fcmVzdHJpY3QgX190bywKICAgICAgICAgICAgICAgICAgc3NpemVfdCBf X24pIDsKCgoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIDsKIyA5ODMgIi91 c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgq X19wcmVwYXJlKSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3Bh cmVudCkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19jaGlsZCkg KHZvaWQpKSA7CgoKCiMgNTAgIi4vYnVjb21tLmgiIDIKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3Ry aW5nLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKCgojIDEgIi91c3Iv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj IDM0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAo dm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9p ZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiB2b2lkICptZW1tb3Zl ICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgOwoK CgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29u c3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Ms IHNpemVfdCBfX24pCiAgICAgOwoKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywg aW50IF9fYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQg Kl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywg aW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK CgoKZXh0ZXJuIHZvaWQgKnJhd21lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0 IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rl c3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgpleHRlcm4gY2hhciAq c3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gY2hh ciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fc3JjKQogICAgIDsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0 IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAg ICAgICAgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9f czEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f czIsIHNpemVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu IGludCBzdHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAg ICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hh ciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgojIDExNyAiL3Vzci9pbmNsdWRlL3N0 cmluZy5oIiAzCmV4dGVybiBpbnQgc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u c3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm1fbCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNo YXIgKl9fc3JjLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVf dCBfX2wpIDsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19zKSBfX2F0 dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19j b25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19t YWxsb2NfXykpOwojIDE2MCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCgoKZXh0ZXJuIGNoYXIg KnN0cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1 cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVs IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBj aGFyICpfX3JlamVjdCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4g c2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQp CiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAo X19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9f aGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICA7CgoKCgpleHRlcm4gY2hhciAq X19zdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tf ciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGlt LAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsK CgoKCmV4dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9f Y29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK CgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90 IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVk bGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK CgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90 IF9fbikgOwpleHRlcm4gdm9pZCAqbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVf dCBfX24pIDsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19j b25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQogICAgIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9fZXJybnVtKSA7 CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwg c2l6ZV90IF9fYnVmbGVuKSA7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNp emVfdCBfX24pIDsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZv aWQgKl9fZGVzdCwgc2l6ZV90IF9fbikgOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3Ms IHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19j b25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3Qg Y2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJu IGludCBmZnMgKGludCBfX2kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVy biBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7Cgpf X2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9f Y29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19z MSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9f czEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxl X3QgX19sb2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY2Fz ZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIF9fYXR0 cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipf X3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZGVsaW0pIDsKCgoKCmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBj aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSA7CgoKZXh0ZXJuIGNo YXIgKl9fc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fc3JjKQogICAgIDsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmlj dCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgoKCmV4dGVy biBjaGFyICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsK ZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7 CgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIDsKCgpleHRlcm4gdm9pZCAq bWVtZnJvYiAodm9pZCAqX19zLCBzaXplX3QgX19uKSA7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNl bmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSA7CiMgMzcyICIvdXNyL2luY2x1ZGUvc3Ry aW5nLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdHJpbmcuaCIgMSAzCiMgMzczICIvdXNy L2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5o IiAxIDMKIyAzODkgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gdm9pZCAq X19yYXdtZW1jaHIgKGNvbnN0IHZvaWQgKl9fcywgaW50IF9fYyk7CiMgOTE5ICIvdXNyL2luY2x1 ZGUvYml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzEg KF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90 Cl9fc3RyY3Nwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdCkKewogIHJlZ2lz dGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CiAgd2hpbGUgKF9fc1tfX3Jlc3VsdF0gIT0gJ1wwJyAm JiBfX3NbX19yZXN1bHRdICE9IF9fcmVqZWN0KQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19y ZXN1bHQ7Cn0KCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJjc3BuX2MyIChfX2NvbnN0IGNo YXIgKl9fcywgaW50IF9fcmVqZWN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBfX3JlamVjdDIpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3RyY3Nwbl9jMiAo X19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdDEsIGludCBfX3JlamVjdDIpCnsKICByZWdp c3RlciBzaXplX3QgX19yZXN1bHQgPSAwOwogIHdoaWxlIChfX3NbX19yZXN1bHRdICE9ICdcMCcg JiYgX19zW19fcmVzdWx0XSAhPSBfX3JlamVjdDEKICAgICAgICAgJiYgX19zW19fcmVzdWx0XSAh PSBfX3JlamVjdDIpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKZXh0ZXJu IF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fYzMgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19y ZWplY3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcmVqZWN0 MiwgaW50IF9fcmVqZWN0Myk7CmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJjc3BuX2MzIChf X2NvbnN0IGNoYXIgKl9fcywgaW50IF9fcmVqZWN0MSwgaW50IF9fcmVqZWN0MiwKICAgICAgICAg ICAgICBpbnQgX19yZWplY3QzKQp7CiAgcmVnaXN0ZXIgc2l6ZV90IF9fcmVzdWx0ID0gMDsKICB3 aGlsZSAoX19zW19fcmVzdWx0XSAhPSAnXDAnICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3Qx CiAgICAgICAgICYmIF9fc1tfX3Jlc3VsdF0gIT0gX19yZWplY3QyICYmIF9fc1tfX3Jlc3VsdF0g IT0gX19yZWplY3QzKQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KIyA5NzYg Ii91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9f c3Ryc3BuX2MxIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0KTsKZXh0ZXJuIF9faW5s aW5lIHNpemVfdApfX3N0cnNwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdCkK ewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CgogIHdoaWxlIChfX3NbX19yZXN1bHRd ID09IF9fYWNjZXB0KQogICAgKytfX3Jlc3VsdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCmV4dGVy biBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19h Y2NlcHQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19hY2NlcHQy KTsKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0cnNwbl9jMiAoX19jb25zdCBjaGFyICpfX3Ms IGludCBfX2FjY2VwdDEsIGludCBfX2FjY2VwdDIpCnsKICByZWdpc3RlciBzaXplX3QgX19yZXN1 bHQgPSAwOwoKICB3aGlsZSAoX19zW19fcmVzdWx0XSA9PSBfX2FjY2VwdDEgfHwgX19zW19fcmVz dWx0XSA9PSBfX2FjY2VwdDIpCiAgICArK19fcmVzdWx0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoK ZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cnNwbl9jMyAoX19jb25zdCBjaGFyICpfX3MsIGlu dCBfX2FjY2VwdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Fj Y2VwdDIsIGludCBfX2FjY2VwdDMpOwpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9fc3Ryc3BuX2Mz IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MiwgaW50IF9f YWNjZXB0MykKewogIHJlZ2lzdGVyIHNpemVfdCBfX3Jlc3VsdCA9IDA7CgogIHdoaWxlIChfX3Nb X19yZXN1bHRdID09IF9fYWNjZXB0MSB8fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MgogICAg ICAgICB8fCBfX3NbX19yZXN1bHRdID09IF9fYWNjZXB0MykKICAgICsrX19yZXN1bHQ7CiAgcmV0 dXJuIF9fcmVzdWx0Owp9CiMgMTAzMyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4 dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnBicmtfYzIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQg X19hY2NlcHQxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYWNj ZXB0Mik7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJrX2MyIChfX2NvbnN0IGNoYXIg Kl9fcywgaW50IF9fYWNjZXB0MSwgaW50IF9fYWNjZXB0MikKewoKICB3aGlsZSAoKl9fcyAhPSAn XDAnICYmICpfX3MgIT0gX19hY2NlcHQxICYmICpfX3MgIT0gX19hY2NlcHQyKQogICAgKytfX3M7 CiAgcmV0dXJuICpfX3MgPT0gJ1wwJyA/ICgodm9pZCAqKTApIDogKGNoYXIgKikgKHNpemVfdCkg X19zOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJwYnJrX2MzIChfX2NvbnN0IGNoYXIg Kl9fcywgaW50IF9fYWNjZXB0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCBfX2FjY2VwdDIsIGludCBfX2FjY2VwdDMpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9f c3RycGJya19jMyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdDEsIGludCBfX2FjY2Vw dDIsCiAgICAgICAgICAgICAgaW50IF9fYWNjZXB0MykKewoKICB3aGlsZSAoKl9fcyAhPSAnXDAn ICYmICpfX3MgIT0gX19hY2NlcHQxICYmICpfX3MgIT0gX19hY2NlcHQyCiAgICAgICAgICYmICpf X3MgIT0gX19hY2NlcHQzKQogICAgKytfX3M7CiAgcmV0dXJuICpfX3MgPT0gJ1wwJyA/ICgodm9p ZCAqKTApIDogKGNoYXIgKikgKHNpemVfdCkgX19zOwp9CiMgMTA4NSAiL3Vzci9pbmNsdWRlL2Jp dHMvc3RyaW5nMi5oIiAzCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnRva19yXzFjIChjaGFy ICpfX3MsIGNoYXIgX19zZXAsIGNoYXIgKipfX25leHRwKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIg KgpfX3N0cnRva19yXzFjIChjaGFyICpfX3MsIGNoYXIgX19zZXAsIGNoYXIgKipfX25leHRwKQp7 CiAgY2hhciAqX19yZXN1bHQ7CiAgaWYgKF9fcyA9PSAoKHZvaWQgKikwKSkKICAgIF9fcyA9ICpf X25leHRwOwogIHdoaWxlICgqX19zID09IF9fc2VwKQogICAgKytfX3M7CiAgX19yZXN1bHQgPSAo KHZvaWQgKikwKTsKICBpZiAoKl9fcyAhPSAnXDAnKQogICAgewogICAgICBfX3Jlc3VsdCA9IF9f cysrOwogICAgICB3aGlsZSAoKl9fcyAhPSAnXDAnKQogICAgICAgIGlmICgqX19zKysgPT0gX19z ZXApCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fc1stMV0gPSAnXDAnOwogICAgICAgICAgICBi cmVhazsKICAgICAgICAgIH0KICAgICAgKl9fbmV4dHAgPSBfX3M7CiAgICB9CiAgcmV0dXJuIF9f cmVzdWx0Owp9CiMgMTExNyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RyaW5nMi5oIiAzCmV4dGVybiBj aGFyICpfX3N0cnNlcF9nIChjaGFyICoqX19zdHJpbmdwLCBfX2NvbnN0IGNoYXIgKl9fZGVsaW0p OwojIDExMzUgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwpleHRlcm4gX19pbmxpbmUg Y2hhciAqX19zdHJzZXBfMWMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QpOwpleHRlcm4gX19p bmxpbmUgY2hhciAqCl9fc3Ryc2VwXzFjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0KQp7CiAg cmVnaXN0ZXIgY2hhciAqX19yZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZhbCAhPSAoKHZvaWQg KikwKSAmJiAoKl9fcyA9IChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19y ZWplY3QpICYmIChfX3JlamVjdCkgPT0gJ1wwJyA/IChjaGFyICopIF9fcmF3bWVtY2hyIChfX3Jl dHZhbCwgX19yZWplY3QpIDogc3RyY2hyIChfX3JldHZhbCwgX19yZWplY3QpKSkpICE9ICgodm9p ZCAqKTApKQogICAgKigqX19zKSsrID0gJ1wwJzsKICByZXR1cm4gX19yZXR2YWw7Cn0KCmV4dGVy biBfX2lubGluZSBjaGFyICpfX3N0cnNlcF8yYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEs IGNoYXIgX19yZWplY3QyKTsKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnNlcF8yYyAoY2hh ciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWplY3QyKQp7CiAgcmVnaXN0ZXIgY2hh ciAqX19yZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZhbCAhPSAoKHZvaWQgKikwKSkKICAgIHsK ICAgICAgcmVnaXN0ZXIgY2hhciAqX19jcCA9IF9fcmV0dmFsOwogICAgICB3aGlsZSAoMSkKICAg ICAgICB7CiAgICAgICAgICBpZiAoKl9fY3AgPT0gJ1wwJykKICAgICAgICAgICAgewogICAgICAg ICAgICAgIF9fY3AgPSAoKHZvaWQgKikwKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9 CiAgICAgICAgICBpZiAoKl9fY3AgPT0gX19yZWplY3QxIHx8ICpfX2NwID09IF9fcmVqZWN0MikK ICAgICAgICAgICAgewogICAgICAgICAgICAgICpfX2NwKysgPSAnXDAnOwogICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICArK19fY3A7CiAgICAgICAgfQogICAgICAq X19zID0gX19jcDsKICAgIH0KICByZXR1cm4gX19yZXR2YWw7Cn0KCmV4dGVybiBfX2lubGluZSBj aGFyICpfX3N0cnNlcF8zYyAoY2hhciAqKl9fcywgY2hhciBfX3JlamVjdDEsIGNoYXIgX19yZWpl Y3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19yZWplY3QzKTsK ZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cnNlcF8zYyAoY2hhciAqKl9fcywgY2hhciBfX3Jl amVjdDEsIGNoYXIgX19yZWplY3QyLCBjaGFyIF9fcmVqZWN0MykKewogIHJlZ2lzdGVyIGNoYXIg Kl9fcmV0dmFsID0gKl9fczsKICBpZiAoX19yZXR2YWwgIT0gKCh2b2lkICopMCkpCiAgICB7CiAg ICAgIHJlZ2lzdGVyIGNoYXIgKl9fY3AgPSBfX3JldHZhbDsKICAgICAgd2hpbGUgKDEpCiAgICAg ICAgewogICAgICAgICAgaWYgKCpfX2NwID09ICdcMCcpCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBfX2NwID0gKCh2b2lkICopMCk7CiAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQog ICAgICAgICAgaWYgKCpfX2NwID09IF9fcmVqZWN0MSB8fCAqX19jcCA9PSBfX3JlamVjdDIgfHwg Kl9fY3AgPT0gX19yZWplY3QzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9fY3ArKyA9 ICdcMCc7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICsrX19j cDsKICAgICAgICB9CiAgICAgICpfX3MgPSBfX2NwOwogICAgfQogIHJldHVybiBfX3JldHZhbDsK fQojIDEyMTEgIi91c3IvaW5jbHVkZS9iaXRzL3N0cmluZzIuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9zdGRsaWIuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3Iv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj IDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCiMgNTUyICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDMKCgpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3QgX19zaXplKSBfX2F0dHJpYnV0 ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIs IHNpemVfdCBfX3NpemUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCiMgOTE0 ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCiMgMTIxMiAiL3Vzci9pbmNsdWRlL2JpdHMvc3Ry aW5nMi5oIiAyIDMKCgoKCmV4dGVybiBjaGFyICpfX3N0cmR1cCAoX19jb25zdCBjaGFyICpfX3N0 cmluZykgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxMjM1ICIvdXNyL2luY2x1ZGUv Yml0cy9zdHJpbmcyLmgiIDMKZXh0ZXJuIGNoYXIgKl9fc3RybmR1cCAoX19jb25zdCBjaGFyICpf X3N0cmluZywgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoj IDM3NiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKCiMgNTQgIi4vYnVjb21tLmgiIDIK IyA2NCAiLi9idWNvbW0uaCIKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDMzICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAyIDMKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRmbGFncy5oIiAxIDMK IyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93 YWl0c3RhdHVzLmgiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDMK dW5pb24gd2FpdAogIHsKICAgIGludCB3X3N0YXR1czsKICAgIHN0cnVjdAogICAgICB7CgogICAg ICAgIHVuc2lnbmVkIGludCBfX3dfdGVybXNpZzo3OwogICAgICAgIHVuc2lnbmVkIGludCBfX3df Y29yZWR1bXA6MTsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3JldGNvZGU6ODsKICAgICAgICB1 bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCgogICAgICB9IF9fd2FpdF90ZXJtaW5hdGVkOwogICAgc3Ry dWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wdmFsOjg7CiAgICAgICAg dW5zaWduZWQgaW50IF9fd19zdG9wc2lnOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoK CgogICAgICB9IF9fd2FpdF9zdG9wcGVkOwogIH07CiMgNDQgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMiAzCiMgNjggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwp0eXBlZGVmIHVuaW9uCiAgewog ICAgdW5pb24gd2FpdCAqX191cHRyOwogICAgaW50ICpfX2lwdHI7CiAgfSBfX1dBSVRfU1RBVFVT IF9fYXR0cmlidXRlX18gKChfX3RyYW5zcGFyZW50X3VuaW9uX18pKTsKIyA5MyAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAzCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGlu dCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90 OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKCgoKCgoKX19leHRlbnNpb25fXyB0eXBl ZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQg cmVtOwogIH0gbGxkaXZfdDsKCgojIDEzNyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVy biBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkgOwoKCgoKZXh0ZXJuIGRvdWJs ZSBhdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CgpleHRlcm4gaW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSBfX2F0dHJpYnV0ZV9fICgo X19wdXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbG9u ZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCiAgICAgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAq X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX2VuZHB0cikgOwoKCgoKCmV4dGVybiBmbG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f ZW5kcHRyKSA7CgpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyKSA7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIDsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBz dHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2Up CiAgICAgOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIDsKCl9fZXh0ZW5zaW9u X18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgOwoKCgoKCl9fZXh0 ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIDsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2ln bmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICA7CgojIDIyOSAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAzCmV4dGVybiBsb25nIGludCBzdHJ0b2xfbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf X2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90 IF9fbG9jKSA7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bF9sIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgOwoKX19leHRlbnNpb25fXwpl eHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg X19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s b2NhbGVfdCBfX2xvYykgOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25n IGludCBzdHJ0b3VsbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFz ZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICA7CgpleHRlcm4gZG91YmxlIHN0cnRvZF9sIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFy ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICA7CgpleHRlcm4g ZmxvYXQgc3RydG9mX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19s b2MpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkX2wgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9f bG9jKSA7CgoKCgoKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICA7CmV4dGVybiBmbG9h dCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg aW50IF9fZ3JvdXApCiAgICAgOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFs IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIDsKCmV4dGVybiBsb25nIGlu dCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19n cm91cCkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2ludGVybmFsIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3Jv dXApIDsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2lu dGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dy b3VwKSA7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19z dHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICA7CgoKCgoKCgoKZXh0ZXJuIF9faW5s aW5lIGRvdWJsZQpzdHJ0b2QgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyKQp7CiAgcmV0dXJuIF9fc3RydG9kX2ludGVybmFsIChfX25w dHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKc3RydG9sIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK ICAgICAgICBpbnQgX19iYXNlKQp7CiAgcmV0dXJuIF9fc3RydG9sX2ludGVybmFsIChfX25wdHIs IF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CmV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBsb25nIGlu dApzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvdWxf aW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKCmV4dGVybiBfX2lu bGluZSBmbG9hdApzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg KipfX3Jlc3RyaWN0IF9fZW5kcHRyKQp7CiAgcmV0dXJuIF9fc3RydG9mX2ludGVybmFsIChfX25w dHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUKc3RydG9sZCAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw dHIpCnsKICByZXR1cm4gX19zdHJ0b2xkX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsK fQoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludApzdHJ0b3Eg KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k cHRyLAogICAgICAgIGludCBfX2Jhc2UpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChf X25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5s aW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jh c2UpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19i YXNlLCAwKTsKfQoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGlu dApzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0 cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvbGxf aW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBl eHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VsbCAoX19jb25zdCBj aGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg ICAgICAgaW50IF9fYmFzZSkKewogIHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIs IF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCgpleHRlcm4gX19pbmxpbmUgZG91YmxlCmF0b2Yg KF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIHN0cnRvZCAoX19ucHRyLCAoY2hhciAq KikgKCh2b2lkICopMCkpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25zdCBjaGFy ICpfX25wdHIpCnsKICByZXR1cm4gKGludCkgc3RydG9sIChfX25wdHIsIChjaGFyICoqKSAoKHZv aWQgKikwKSwgMTApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludAphdG9sIChfX2NvbnN0IGNo YXIgKl9fbnB0cikKewogIHJldHVybiBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopICgodm9pZCAq KTApLCAxMCk7Cn0KCgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBp bnQKYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0 ciwgKGNoYXIgKiopICgodm9pZCAqKTApLCAxMCk7Cn0KCiMgNDA4ICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgOwoKCmV4dGVybiBsb25n IGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CiMgNDIxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGxvbmcgaW50IHJhbmRvbSAo dm9pZCkgOwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIDsKCgoK CgpleHRlcm4gY2hhciAqaW5pdHN0YXRlICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0 YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgOwoKCgpl eHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIDsKCgoKCgoKCnN0cnVjdCBy YW5kb21fZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAg aW50MzJfdCAqc3RhdGU7CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAg aW50IHJhbmRfc2VwOwogICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5k b21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAg ICAgICAgICBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgpleHRlcm4gaW50IHNyYW5k b21fciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgOwoK ZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0 cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxl biwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0 IF9fYnVmKSA7CgpleHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0 ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJp Y3QgX19idWYpIDsKCgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSA7CgpleHRlcm4gdm9pZCBz cmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2ln bmVkIGludCAqX19zZWVkKSA7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIDsK ZXh0ZXJuIGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoK CmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSA7CmV4dGVybiBsb25nIGludCBucmFuZDQ4 ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBtcmFu ZDQ4ICh2b2lkKSA7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQg X194c3ViaVszXSkgOwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkg OwpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBf X3NlZWQxNnZbM10pIDsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9f cGFyYW1bN10pIDsKCgoKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hv cnQgaW50IF9feFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5z aWduZWQgc2hvcnQgaW50IF9fYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1 bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChz dHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAg ICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgZXJhbmQ0OF9y ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAg ICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IGxyYW5kNDhf ciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAg ICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgbnJh bmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAg ICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgOwoKCmV4dGVybiBpbnQg bXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAg ICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIDsKZXh0ZXJu IGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAg ICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSA7CgoKZXh0 ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0 YSAqX19idWZmZXIpCiAgICAgOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQg aW50IF9fc2VlZDE2dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0 YSAqX19idWZmZXIpIDsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQg X19wYXJhbVs3XSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f YnVmZmVyKSA7CiMgNTYyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKZXh0ZXJuIHZvaWQg KnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSBfX2F0dHJpYnV0ZV9fICgoX19t YWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIDsKCgoKCmV4dGVybiB2 b2lkIGNmcmVlICh2b2lkICpfX3B0cikgOwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIg MSAzCiMgMjUgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIv aTY4Ni1wYy1saW51eC1nbnUvMy40L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2lu Y2x1ZGUvYWxsb2NhLmgiIDIgMwoKCgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9f c2l6ZSkgOwoKCgoKCgojIDU3NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVy biB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19f KSk7CgoKCgpleHRlcm4gaW50IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19tZW1wdHIsIHNpemVf dCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxs b2NfXykpOwoKCgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIF9fYXR0cmlidXRlX18gKChfX25v cmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkg OwoKCgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywg dm9pZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICA7CgoKCgoKCmV4dGVybiB2b2lkIGV4aXQg KGludCBfX3N0YXR1cykgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgpleHRl cm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f KSk7CgoKCgoKCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CgoK CgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoK CgoKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgOwoKCgoKCmV4dGVybiBpbnQg c2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQg X19yZXBsYWNlKQogICAgIDsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9f bmFtZSkgOwoKCgoKCgpleHRlcm4gaW50IGNsZWFyZW52ICh2b2lkKSA7CiMgNjYxICIvdXNyL2lu Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkg OwoKCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSA7CiMgNjc4ICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIgKl9fdGVt cGxhdGUpIDsKIyA2ODggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWtk dGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgOwoKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0 IGNoYXIgKl9fY29tbWFuZCkgOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKmNhbm9uaWNhbGl6ZV9maWxl X25hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CiMgNzEyICIvdXNyL2luY2x1ZGUvc3RkbGli LmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u YW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkg OwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19j b25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoK CgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZv aWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3Qg X19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZv aWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAg ICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcg aW50IF9feCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4 dGVybiBsb25nIGxvbmcgaW50IGxsYWJzIChsb25nIGxvbmcgaW50IF9feCkKICAgICBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1l ciwgaW50IF9fZGVub20pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4g bGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbGxkaXZf dCBsbGRpdiAobG9uZyBsb25nIGludCBfX251bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsb25nIGxvbmcgaW50IF9fZGVub20pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKIyA3NzYgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAq ZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVj cHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CgoKCgpleHRl cm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3Ry aWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7 CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hh ciAqX19idWYpIDsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwg aW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0 LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3Vi bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0 cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSA7CmV4dGVybiBjaGFyICpxZ2N2 dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgOwoKCgoK ZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19y ZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2ln biwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xl bikgOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50 ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg X19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90 IF9fbGVuKSA7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBf X25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50 ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0 IF9fYnVmLCBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBf X3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0 IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hh ciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CgoKCgoKCgpleHRlcm4gaW50IG1i bGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWJ0b3dj ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgd2N0b21iIChj aGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgOwoKZXh0ZXJuIHNpemVfdCB3Y3N0 b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pCiAgICAgOwoKCgoKCgoK CmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSA7CiMgODU4ICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBnZXRzdWJvcHQgKGNoYXIgKipfX3Jl c3RyaWN0IF9fb3B0aW9ucCwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29uc3QgKl9f cmVzdHJpY3QgX190b2tlbnMsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj dCBfX3ZhbHVlcCkgOwoKCgoKCmV4dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tl eSkgOwoKCgoKCgoKZXh0ZXJuIGludCBwb3NpeF9vcGVucHQgKGludCBfX29mbGFnKSA7CgoKCgoK CgpleHRlcm4gaW50IGdyYW50cHQgKGludCBfX2ZkKSA7CgoKCmV4dGVybiBpbnQgdW5sb2NrcHQg KGludCBfX2ZkKSA7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIDsKCgoKCgoK ZXh0ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVm bGVuKSA7CgoKZXh0ZXJuIGludCBnZXRwdCAodm9pZCkgOwoKCgoKCgpleHRlcm4gaW50IGdldGxv YWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIDsKCgoKCgoKIyA2NSAiLi9i dWNvbW0uaCIgMgoKCgojIDEgIi91c3IvaW5jbHVkZS9mY250bC5oIiAxIDMKIyAyOSAiL3Vzci9p bmNsdWRlL2ZjbnRsLmgiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZmNudGwuaCIgMSAz CiMgMTM2ICIvdXNyL2luY2x1ZGUvYml0cy9mY250bC5oIiAzCnN0cnVjdCBmbG9jawogIHsKICAg IHNob3J0IGludCBsX3R5cGU7CiAgICBzaG9ydCBpbnQgbF93aGVuY2U7CgogICAgX19vZmZfdCBs X3N0YXJ0OwogICAgX19vZmZfdCBsX2xlbjsKCgoKCiAgICBfX3BpZF90IGxfcGlkOwogIH07CgoK c3RydWN0IGZsb2NrNjQKICB7CiAgICBzaG9ydCBpbnQgbF90eXBlOwogICAgc2hvcnQgaW50IGxf d2hlbmNlOwogICAgX19vZmY2NF90IGxfc3RhcnQ7CiAgICBfX29mZjY0X3QgbF9sZW47CiAgICBf X3BpZF90IGxfcGlkOwogIH07CiMgMzQgIi91c3IvaW5jbHVkZS9mY250bC5oIiAyIDMKIyA2MCAi L3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDMKZXh0ZXJuIGludCBmY250bCAoaW50IF9fZmQsIGludCBf X2NtZCwgLi4uKSA7CgoKCgoKZXh0ZXJuIGludCBvcGVuIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwg aW50IF9fb2ZsYWcsIC4uLikgOwojIDc2ICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMwpleHRlcm4g aW50IG9wZW42NCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX29mbGFnLCAuLi4pIDsKCgoK CgoKZXh0ZXJuIGludCBjcmVhdCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fbW9kZV90IF9fbW9k ZSkgOwojIDkzICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMwpleHRlcm4gaW50IGNyZWF0NjQgKF9f Y29uc3QgY2hhciAqX19maWxlLCBfX21vZGVfdCBfX21vZGUpIDsKIyAxMzAgIi91c3IvaW5jbHVk ZS9mY250bC5oIiAzCmV4dGVybiBpbnQgcG9zaXhfZmFkdmlzZSAoaW50IF9fZmQsIF9fb2ZmX3Qg X19vZmZzZXQsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19h ZHZpc2UpIDsKIyAxNDIgIi91c3IvaW5jbHVkZS9mY250bC5oIiAzCmV4dGVybiBpbnQgcG9zaXhf ZmFkdmlzZTY0IChpbnQgX19mZCwgX19vZmY2NF90IF9fb2Zmc2V0LCBzaXplX3QgX19sZW4sCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19hZHZpc2UpIDsKCgoKCgpleHRlcm4gaW50 IHBvc2l4X2ZhbGxvY2F0ZSAoaW50IF9fZmQsIF9fb2ZmX3QgX19vZmZzZXQsIHNpemVfdCBfX2xl bikgOwojIDE2MCAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDMKZXh0ZXJuIGludCBwb3NpeF9mYWxs b2NhdGU2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX29mZnNldCwgc2l6ZV90IF9fbGVuKQogICAg IDsKCgoKCiMgNjkgIi4vYnVjb21tLmgiIDIKIyA5MCAiLi9idWNvbW0uaCIKZXh0ZXJuIGNoYXIg KiplbnZpcm9uOwojIDEyOSAiLi9idWNvbW0uaCIKIyAxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgi IDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuNC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9p bmNsdWRlL2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAz CiMgMjcgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAzCmVudW0KewogIF9fTENfQ1RZUEUg PSAwLAogIF9fTENfTlVNRVJJQyA9IDEsCiAgX19MQ19USU1FID0gMiwKICBfX0xDX0NPTExBVEUg PSAzLAogIF9fTENfTU9ORVRBUlkgPSA0LAogIF9fTENfTUVTU0FHRVMgPSA1LAogIF9fTENfQUxM ID0gNiwKICBfX0xDX1BBUEVSID0gNywKICBfX0xDX05BTUUgPSA4LAogIF9fTENfQUREUkVTUyA9 IDksCiAgX19MQ19URUxFUEhPTkUgPSAxMCwKICBfX0xDX01FQVNVUkVNRU5UID0gMTEsCiAgX19M Q19JREVOVElGSUNBVElPTiA9IDEyCn07CiMgMzEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAz CgoKIyA1MiAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCnN0cnVjdCBsY29udgp7CgoKICBjaGFy ICpkZWNpbWFsX3BvaW50OwogIGNoYXIgKnRob3VzYW5kc19zZXA7CgoKCgoKICBjaGFyICpncm91 cGluZzsKCgoKCgogIGNoYXIgKmludF9jdXJyX3N5bWJvbDsKICBjaGFyICpjdXJyZW5jeV9zeW1i b2w7CiAgY2hhciAqbW9uX2RlY2ltYWxfcG9pbnQ7CiAgY2hhciAqbW9uX3Rob3VzYW5kc19zZXA7 CiAgY2hhciAqbW9uX2dyb3VwaW5nOwogIGNoYXIgKnBvc2l0aXZlX3NpZ247CiAgY2hhciAqbmVn YXRpdmVfc2lnbjsKICBjaGFyIGludF9mcmFjX2RpZ2l0czsKICBjaGFyIGZyYWNfZGlnaXRzOwoK ICBjaGFyIHBfY3NfcHJlY2VkZXM7CgogIGNoYXIgcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgbl9j c19wcmVjZWRlczsKCiAgY2hhciBuX3NlcF9ieV9zcGFjZTsKCgoKCgoKICBjaGFyIHBfc2lnbl9w b3NuOwogIGNoYXIgbl9zaWduX3Bvc247CgoKICBjaGFyIGludF9wX2NzX3ByZWNlZGVzOwoKICBj aGFyIGludF9wX3NlcF9ieV9zcGFjZTsKCiAgY2hhciBpbnRfbl9jc19wcmVjZWRlczsKCiAgY2hh ciBpbnRfbl9zZXBfYnlfc3BhY2U7CgoKCgoKCiAgY2hhciBpbnRfcF9zaWduX3Bvc247CiAgY2hh ciBpbnRfbl9zaWduX3Bvc247CiMgMTE5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKfTsKCgoK CgpleHRlcm4gY2hhciAqc2V0bG9jYWxlIChpbnQgX19jYXRlZ29yeSwgX19jb25zdCBjaGFyICpf X2xvY2FsZSkgOwoKCmV4dGVybiBzdHJ1Y3QgbGNvbnYgKmxvY2FsZWNvbnYgKHZvaWQpIDsKCgoj IDE0OCAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCnR5cGVkZWYgX19sb2NhbGVfdCBsb2NhbGVf dDsKCgoKCgpleHRlcm4gX19sb2NhbGVfdCBuZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5X21hc2ss IF9fY29uc3QgY2hhciAqX19sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s b2NhbGVfdCBfX2Jhc2UpIDsKIyAxODkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwpleHRlcm4g X19sb2NhbGVfdCBkdXBsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSA7CgoKCmV4dGVybiB2 b2lkIGZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSA7CgoKCgoKCmV4dGVybiBfX2xv Y2FsZV90IHVzZWxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIDsKCgoKCgoKCgojIDEzMCAi Li9idWNvbW0uaCIgMgojIDE1MSAiLi9idWNvbW0uaCIKdm9pZCBiZmRfbm9uZmF0YWwKICAoY29u c3QgY2hhciAqKTsKCnZvaWQgYmZkX2ZhdGFsCiAgKGNvbnN0IGNoYXIgKikgX19hdHRyaWJ1dGVf XyAoKF9fbm9yZXR1cm5fXykpOwoKdm9pZCByZXBvcnQKICAoY29uc3QgY2hhciAqLCB2YV9saXN0 KTsKCnZvaWQgZmF0YWwKICAoY29uc3QgY2hhciAqLCAuLi4pIF9fYXR0cmlidXRlX18gKChfX2Zv cm1hdF9fIChfX3ByaW50Zl9fLCAxLCAyKSkpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18p KTsKCnZvaWQgbm9uX2ZhdGFsCiAgKGNvbnN0IGNoYXIgKiwgLi4uKSBfX2F0dHJpYnV0ZV9fICgo X19mb3JtYXRfXyAoX19wcmludGZfXywgMSwgMikpKTsKCnZvaWQgc2V0X2RlZmF1bHRfYmZkX3Rh cmdldAogICh2b2lkKTsKCnZvaWQgbGlzdF9tYXRjaGluZ19mb3JtYXRzCiAgKGNoYXIgKipwKTsK CnZvaWQgbGlzdF9zdXBwb3J0ZWRfdGFyZ2V0cwogIChjb25zdCBjaGFyICosIEZJTEUgKik7Cgp2 b2lkIGxpc3Rfc3VwcG9ydGVkX2FyY2hpdGVjdHVyZXMKICAoY29uc3QgY2hhciAqLCBGSUxFICop OwoKdm9pZCBwcmludF9hcmVsdF9kZXNjcgogIChGSUxFICpmaWxlLCBiZmQgKmFiZmQsIGJmZF9i b29sZWFuIHZlcmJvc2UpOwoKY2hhciAqbWFrZV90ZW1wbmFtZQogIChjaGFyICopOwoKYmZkX3Zt YSBwYXJzZV92bWEKICAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwoKZXh0ZXJuIGNoYXIg KnByb2dyYW1fbmFtZTsKCgp2b2lkIG1vZGVfc3RyaW5nCiAgKHVuc2lnbmVkIGxvbmcgbW9kZSwg Y2hhciAqYnVmKTsKCgpleHRlcm4gdm9pZCBwcmludF92ZXJzaW9uCiAgKGNvbnN0IGNoYXIgKik7 CgoKZXh0ZXJuIHZvaWQgc2V0X3RpbWVzCiAgKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHN0 YXQgKik7CgpleHRlcm4gaW50IHNtYXJ0X3JlbmFtZQogIChjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKiwgaW50KTsKCgp2b2lkICogeG1hbGxvYwogIChzaXplX3QpOwoKdm9pZCAqIHhyZWFsbG9j CiAgKHZvaWQgKiwgc2l6ZV90KTsKIyA5MyAicmVhZGVsZi5jIiAyCgoKY2hhciAqcHJvZ3JhbV9u YW1lID0gInJlYWRlbGYiOwp1bnNpZ25lZCBsb25nIGR5bmFtaWNfYWRkcjsKYmZkX3NpemVfdHlw ZSBkeW5hbWljX3NpemU7CmNoYXIgKmR5bmFtaWNfc3RyaW5nczsKY2hhciAqc3RyaW5nX3RhYmxl Owp1bnNpZ25lZCBsb25nIHN0cmluZ190YWJsZV9sZW5ndGg7CnVuc2lnbmVkIGxvbmcgbnVtX2R5 bmFtaWNfc3ltczsKRWxmX0ludGVybmFsX1N5bSAqZHluYW1pY19zeW1ib2xzOwpFbGZfSW50ZXJu YWxfU3ltaW5mbyAqZHluYW1pY19zeW1pbmZvOwp1bnNpZ25lZCBsb25nIGR5bmFtaWNfc3ltaW5m b19vZmZzZXQ7CnVuc2lnbmVkIGludCBkeW5hbWljX3N5bWluZm9fbmVudDsKY2hhciBwcm9ncmFt X2ludGVycHJldGVyWzY0XTsKbG9uZyBkeW5hbWljX2luZm9bMjMgKyAxXTsKbG9uZyB2ZXJzaW9u X2luZm9bMTZdOwpsb25nIGxvYWRhZGRyID0gMDsKRWxmX0ludGVybmFsX0VoZHIgZWxmX2hlYWRl cjsKRWxmX0ludGVybmFsX1NoZHIgKnNlY3Rpb25faGVhZGVyczsKRWxmX0ludGVybmFsX0R5biAq ZHluYW1pY19zZWdtZW50OwpFbGZfSW50ZXJuYWxfU2hkciAqc3ltdGFiX3NobmR4X2hkcjsKaW50 IHNob3dfbmFtZTsKaW50IGRvX2R5bmFtaWM7CmludCBkb19zeW1zOwppbnQgZG9fcmVsb2M7Cmlu dCBkb19zZWN0aW9uczsKaW50IGRvX3NlZ21lbnRzOwppbnQgZG9fdW53aW5kOwppbnQgZG9fdXNp bmdfZHluYW1pYzsKaW50IGRvX2hlYWRlcjsKaW50IGRvX2R1bXA7CmludCBkb192ZXJzaW9uOwpp bnQgZG9fd2lkZTsKaW50IGRvX2hpc3RvZ3JhbTsKaW50IGRvX2RlYnVnZ2luZzsKaW50IGRvX2Rl YnVnX2luZm87CmludCBkb19kZWJ1Z19hYmJyZXZzOwppbnQgZG9fZGVidWdfbGluZXM7CmludCBk b19kZWJ1Z19wdWJuYW1lczsKaW50IGRvX2RlYnVnX2FyYW5nZXM7CmludCBkb19kZWJ1Z19mcmFt ZXM7CmludCBkb19kZWJ1Z19mcmFtZXNfaW50ZXJwOwppbnQgZG9fZGVidWdfbWFjaW5mbzsKaW50 IGRvX2RlYnVnX3N0cjsKaW50IGRvX2RlYnVnX2xvYzsKaW50IGRvX2FyY2g7CmludCBkb19ub3Rl czsKaW50IGlzXzMyYml0X2VsZjsKCgpjaGFyICpkdW1wX3NlY3RzID0gKCh2b2lkICopMCk7CnVu c2lnbmVkIGludCBudW1fZHVtcF9zZWN0cyA9IDA7CgoKCgoKCnR5cGVkZWYgZW51bSBwcmludF9t b2RlCnsKICBIRVgsCiAgREVDLAogIERFQ181LAogIFVOU0lHTkVELAogIFBSRUZJWF9IRVgsCiAg RlVMTF9IRVgsCiAgTE9OR19IRVgKfQpwcmludF9tb2RlOwoKCnN0YXRpYyB2b2lkIHByaW50X3Zt YQogIChiZmRfdm1hLCBwcmludF9tb2RlKTsKc3RhdGljIHZvaWQgcHJpbnRfc3ltYm9sCiAgKGlu dCwgY29uc3QgY2hhciAqKTsKc3RhdGljIGJmZF92bWEgKCpieXRlX2dldCkKICAodW5zaWduZWQg Y2hhciAqLCBpbnQpOwpzdGF0aWMgYmZkX3ZtYSBieXRlX2dldF9saXR0bGVfZW5kaWFuCiAgKHVu c2lnbmVkIGNoYXIgKiwgaW50KTsKc3RhdGljIGJmZF92bWEgYnl0ZV9nZXRfYmlnX2VuZGlhbgog ICh1bnNpZ25lZCBjaGFyICosIGludCk7CnN0YXRpYyBjb25zdCBjaGFyICpnZXRfbWlwc19keW5h bWljX3R5cGUKICAodW5zaWduZWQgbG9uZyk7CnN0YXRpYyBjb25zdCBjaGFyICpnZXRfc3BhcmM2 NF9keW5hbWljX3R5cGUKICAodW5zaWduZWQgbG9uZyk7CnN0YXRpYyBjb25zdCBjaGFyICpnZXRf cHBjNjRfZHluYW1pY190eXBlCiAgKHVuc2lnbmVkIGxvbmcpOwpzdGF0aWMgY29uc3QgY2hhciAq Z2V0X3BhcmlzY19keW5hbWljX3R5cGUKICAodW5zaWduZWQgbG9uZyk7CnN0YXRpYyBjb25zdCBj aGFyICpnZXRfaWE2NF9keW5hbWljX3R5cGUKICAodW5zaWduZWQgbG9uZyk7CnN0YXRpYyBjb25z dCBjaGFyICpnZXRfZHluYW1pY190eXBlCiAgKHVuc2lnbmVkIGxvbmcpOwpzdGF0aWMgaW50IHNs dXJwX3JlbGFfcmVsb2NzCiAgKEZJTEUgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywg RWxmX0ludGVybmFsX1JlbGEgKiosIHVuc2lnbmVkIGxvbmcgKik7CgpzdGF0aWMgaW50IHNsdXJw X3JlbF9yZWxvY3MKICAoRklMRSAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBFbGZf SW50ZXJuYWxfUmVsYSAqKiwgdW5zaWduZWQgbG9uZyAqKTsKCnN0YXRpYyBpbnQgZHVtcF9yZWxv Y2F0aW9ucwogIChGSUxFICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIEVsZl9JbnRl cm5hbF9TeW0gKiwgdW5zaWduZWQgbG9uZywgY2hhciAqLCBpbnQpOwoKc3RhdGljIGNoYXIgKmdl dF9maWxlX3R5cGUKICAodW5zaWduZWQpOwpzdGF0aWMgY2hhciAqZ2V0X21hY2hpbmVfbmFtZQog ICh1bnNpZ25lZCk7CnN0YXRpYyB2b2lkIGRlY29kZV9BUk1fbWFjaGluZV9mbGFncwogICh1bnNp Z25lZCwgY2hhcltdKTsKc3RhdGljIGNoYXIgKmdldF9tYWNoaW5lX2ZsYWdzCiAgKHVuc2lnbmVk LCB1bnNpZ25lZCk7CnN0YXRpYyBjb25zdCBjaGFyICpnZXRfbWlwc19zZWdtZW50X3R5cGUKICAo dW5zaWduZWQgbG9uZyk7CnN0YXRpYyBjb25zdCBjaGFyICpnZXRfcGFyaXNjX3NlZ21lbnRfdHlw ZQogICh1bnNpZ25lZCBsb25nKTsKc3RhdGljIGNvbnN0IGNoYXIgKmdldF9pYTY0X3NlZ21lbnRf dHlwZQogICh1bnNpZ25lZCBsb25nKTsKc3RhdGljIGNvbnN0IGNoYXIgKmdldF9zZWdtZW50X3R5 cGUKICAodW5zaWduZWQgbG9uZyk7CnN0YXRpYyBjb25zdCBjaGFyICpnZXRfbWlwc19zZWN0aW9u X3R5cGVfbmFtZQogICh1bnNpZ25lZCBpbnQpOwpzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3Bhcmlz Y19zZWN0aW9uX3R5cGVfbmFtZQogICh1bnNpZ25lZCBpbnQpOwpzdGF0aWMgY29uc3QgY2hhciAq Z2V0X2lhNjRfc2VjdGlvbl90eXBlX25hbWUKICAodW5zaWduZWQgaW50KTsKc3RhdGljIGNvbnN0 IGNoYXIgKmdldF9zZWN0aW9uX3R5cGVfbmFtZQogICh1bnNpZ25lZCBpbnQpOwpzdGF0aWMgY29u c3QgY2hhciAqZ2V0X3N5bWJvbF9iaW5kaW5nCiAgKHVuc2lnbmVkIGludCk7CnN0YXRpYyBjb25z dCBjaGFyICpnZXRfc3ltYm9sX3R5cGUKICAodW5zaWduZWQgaW50KTsKc3RhdGljIGNvbnN0IGNo YXIgKmdldF9zeW1ib2xfdmlzaWJpbGl0eQogICh1bnNpZ25lZCBpbnQpOwpzdGF0aWMgY29uc3Qg Y2hhciAqZ2V0X3N5bWJvbF9pbmRleF90eXBlCiAgKHVuc2lnbmVkIGludCk7CnN0YXRpYyBjb25z dCBjaGFyICpnZXRfZHluYW1pY19mbGFncwogIChiZmRfdm1hKTsKc3RhdGljIHZvaWQgdXNhZ2UK ICAodm9pZCk7CnN0YXRpYyB2b2lkIHBhcnNlX2FyZ3MKICAoaW50LCBjaGFyICoqKTsKc3RhdGlj IGludCBwcm9jZXNzX2ZpbGVfaGVhZGVyCiAgKHZvaWQpOwpzdGF0aWMgaW50IHByb2Nlc3NfcHJv Z3JhbV9oZWFkZXJzCiAgKEZJTEUgKik7CnN0YXRpYyBpbnQgcHJvY2Vzc19zZWN0aW9uX2hlYWRl cnMKICAoRklMRSAqKTsKc3RhdGljIGludCBwcm9jZXNzX3Vud2luZAogIChGSUxFICopOwpzdGF0 aWMgdm9pZCBkeW5hbWljX3NlZ21lbnRfbWlwc192YWwKICAoRWxmX0ludGVybmFsX0R5biAqKTsK c3RhdGljIHZvaWQgZHluYW1pY19zZWdtZW50X3BhcmlzY192YWwKICAoRWxmX0ludGVybmFsX0R5 biAqKTsKc3RhdGljIHZvaWQgZHluYW1pY19zZWdtZW50X2lhNjRfdmFsCiAgKEVsZl9JbnRlcm5h bF9EeW4gKik7CnN0YXRpYyBpbnQgcHJvY2Vzc19keW5hbWljX3NlZ21lbnQKICAoRklMRSAqKTsK c3RhdGljIGludCBwcm9jZXNzX3N5bWJvbF90YWJsZQogIChGSUxFICopOwpzdGF0aWMgaW50IHBy b2Nlc3Nfc3ltaW5mbwogIChGSUxFICopOwpzdGF0aWMgaW50IHByb2Nlc3Nfc2VjdGlvbl9jb250 ZW50cwogIChGSUxFICopOwpzdGF0aWMgdm9pZCBwcm9jZXNzX21pcHNfZnBlX2V4Y2VwdGlvbgog IChpbnQpOwpzdGF0aWMgaW50IHByb2Nlc3NfbWlwc19zcGVjaWZpYwogIChGSUxFICopOwpzdGF0 aWMgaW50IHByb2Nlc3NfZmlsZQogIChjaGFyICopOwpzdGF0aWMgaW50IHByb2Nlc3NfcmVsb2Nz CiAgKEZJTEUgKik7CnN0YXRpYyBpbnQgcHJvY2Vzc192ZXJzaW9uX3NlY3Rpb25zCiAgKEZJTEUg Kik7CnN0YXRpYyBjaGFyICpnZXRfdmVyX2ZsYWdzCiAgKHVuc2lnbmVkIGludCk7CnN0YXRpYyBp bnQgZ2V0XzMyYml0X3NlY3Rpb25faGVhZGVycwogIChGSUxFICosIHVuc2lnbmVkIGludCk7CnN0 YXRpYyBpbnQgZ2V0XzY0Yml0X3NlY3Rpb25faGVhZGVycwogIChGSUxFICosIHVuc2lnbmVkIGlu dCk7CnN0YXRpYyBpbnQgZ2V0XzMyYml0X3Byb2dyYW1faGVhZGVycwogIChGSUxFICosIEVsZl9J bnRlcm5hbF9QaGRyICopOwpzdGF0aWMgaW50IGdldF82NGJpdF9wcm9ncmFtX2hlYWRlcnMKICAo RklMRSAqLCBFbGZfSW50ZXJuYWxfUGhkciAqKTsKc3RhdGljIGludCBnZXRfZmlsZV9oZWFkZXIK ICAoRklMRSAqKTsKc3RhdGljIEVsZl9JbnRlcm5hbF9TeW0gKmdldF8zMmJpdF9lbGZfc3ltYm9s cwogIChGSUxFICosIEVsZl9JbnRlcm5hbF9TaGRyICopOwpzdGF0aWMgRWxmX0ludGVybmFsX1N5 bSAqZ2V0XzY0Yml0X2VsZl9zeW1ib2xzCiAgKEZJTEUgKiwgRWxmX0ludGVybmFsX1NoZHIgKik7 CnN0YXRpYyBjb25zdCBjaGFyICpnZXRfZWxmX3NlY3Rpb25fZmxhZ3MKICAoYmZkX3ZtYSk7CnN0 YXRpYyBpbnQgKmdldF9keW5hbWljX2RhdGEKICAoRklMRSAqLCB1bnNpZ25lZCBpbnQpOwpzdGF0 aWMgaW50IGdldF8zMmJpdF9keW5hbWljX3NlZ21lbnQKICAoRklMRSAqKTsKc3RhdGljIGludCBn ZXRfNjRiaXRfZHluYW1pY19zZWdtZW50CiAgKEZJTEUgKik7CgoKCgpzdGF0aWMgaW50IGR1bXBf c2VjdGlvbgogIChFbGZfSW50ZXJuYWxfU2hkciAqLCBGSUxFICopOwpzdGF0aWMgaW50IGRpc3Bs YXlfZGVidWdfc2VjdGlvbgogIChFbGZfSW50ZXJuYWxfU2hkciAqLCBGSUxFICopOwpzdGF0aWMg aW50IGRpc3BsYXlfZGVidWdfaW5mbwogIChFbGZfSW50ZXJuYWxfU2hkciAqLCB1bnNpZ25lZCBj aGFyICosIEZJTEUgKik7CnN0YXRpYyBpbnQgZGlzcGxheV9kZWJ1Z19ub3Rfc3VwcG9ydGVkCiAg KEVsZl9JbnRlcm5hbF9TaGRyICosIHVuc2lnbmVkIGNoYXIgKiwgRklMRSAqKTsKc3RhdGljIGlu dCBwcmVzY2FuX2RlYnVnX2luZm8KICAoRWxmX0ludGVybmFsX1NoZHIgKiwgdW5zaWduZWQgY2hh ciAqLCBGSUxFICopOwpzdGF0aWMgaW50IGRpc3BsYXlfZGVidWdfbGluZXMKICAoRWxmX0ludGVy bmFsX1NoZHIgKiwgdW5zaWduZWQgY2hhciAqLCBGSUxFICopOwpzdGF0aWMgaW50IGRpc3BsYXlf ZGVidWdfcHVibmFtZXMKICAoRWxmX0ludGVybmFsX1NoZHIgKiwgdW5zaWduZWQgY2hhciAqLCBG SUxFICopOwpzdGF0aWMgaW50IGRpc3BsYXlfZGVidWdfYWJicmV2CiAgKEVsZl9JbnRlcm5hbF9T aGRyICosIHVuc2lnbmVkIGNoYXIgKiwgRklMRSAqKTsKc3RhdGljIGludCBkaXNwbGF5X2RlYnVn X2FyYW5nZXMKICAoRWxmX0ludGVybmFsX1NoZHIgKiwgdW5zaWduZWQgY2hhciAqLCBGSUxFICop OwpzdGF0aWMgaW50IGRpc3BsYXlfZGVidWdfZnJhbWVzCiAgKEVsZl9JbnRlcm5hbF9TaGRyICos IHVuc2lnbmVkIGNoYXIgKiwgRklMRSAqKTsKc3RhdGljIGludCBkaXNwbGF5X2RlYnVnX21hY2lu Zm8KICAoRWxmX0ludGVybmFsX1NoZHIgKiwgdW5zaWduZWQgY2hhciAqLCBGSUxFICopOwpzdGF0 aWMgaW50IGRpc3BsYXlfZGVidWdfc3RyCiAgKEVsZl9JbnRlcm5hbF9TaGRyICosIHVuc2lnbmVk IGNoYXIgKiwgRklMRSAqKTsKc3RhdGljIGludCBkaXNwbGF5X2RlYnVnX2xvYwogIChFbGZfSW50 ZXJuYWxfU2hkciAqLCB1bnNpZ25lZCBjaGFyICosIEZJTEUgKik7CnN0YXRpYyB1bnNpZ25lZCBj aGFyICpwcm9jZXNzX2FiYnJldl9zZWN0aW9uCiAgKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQg Y2hhciAqKTsKc3RhdGljIHZvaWQgbG9hZF9kZWJ1Z19zdHIKICAoRklMRSAqKTsKc3RhdGljIHZv aWQgZnJlZV9kZWJ1Z19zdHIKICAodm9pZCk7CnN0YXRpYyBjb25zdCBjaGFyICpmZXRjaF9pbmRp cmVjdF9zdHJpbmcKICAodW5zaWduZWQgbG9uZyk7CnN0YXRpYyB2b2lkIGxvYWRfZGVidWdfbG9j CiAgKEZJTEUgKik7CnN0YXRpYyB2b2lkIGZyZWVfZGVidWdfbG9jCiAgKHZvaWQpOwpzdGF0aWMg dW5zaWduZWQgbG9uZyByZWFkX2xlYjEyOAogICh1bnNpZ25lZCBjaGFyICosIGludCAqLCBpbnQp OwpzdGF0aWMgaW50IHByb2Nlc3NfZXh0ZW5kZWRfbGluZV9vcAogICh1bnNpZ25lZCBjaGFyICos IGludCwgaW50KTsKc3RhdGljIHZvaWQgcmVzZXRfc3RhdGVfbWFjaGluZQogIChpbnQpOwpzdGF0 aWMgY2hhciAqZ2V0X1RBR19uYW1lCiAgKHVuc2lnbmVkIGxvbmcpOwpzdGF0aWMgY2hhciAqZ2V0 X0FUX25hbWUKICAodW5zaWduZWQgbG9uZyk7CnN0YXRpYyBjaGFyICpnZXRfRk9STV9uYW1lCiAg KHVuc2lnbmVkIGxvbmcpOwpzdGF0aWMgdm9pZCBmcmVlX2FiYnJldnMKICAodm9pZCk7CnN0YXRp YyB2b2lkIGFkZF9hYmJyZXYKICAodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KTsK c3RhdGljIHZvaWQgYWRkX2FiYnJldl9hdHRyCiAgKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxv bmcpOwpzdGF0aWMgdW5zaWduZWQgY2hhciAqcmVhZF9hbmRfZGlzcGxheV9hdHRyCiAgKHVuc2ln bmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgbG9uZywg dW5zaWduZWQgbG9uZyk7CgpzdGF0aWMgdW5zaWduZWQgY2hhciAqcmVhZF9hbmRfZGlzcGxheV9h dHRyX3ZhbHVlCiAgKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGNoYXIg KiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CgpzdGF0aWMgdW5zaWduZWQgY2hhciAq ZGlzcGxheV9ibG9jawogICh1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGxvbmcpOwpzdGF0aWMg dm9pZCBkZWNvZGVfbG9jYXRpb25fZXhwcmVzc2lvbgogICh1bnNpZ25lZCBjaGFyICosIHVuc2ln bmVkIGludCwgdW5zaWduZWQgbG9uZyk7CnN0YXRpYyB2b2lkIHJlcXVlc3RfZHVtcAogICh1bnNp Z25lZCBpbnQsIGludCk7CnN0YXRpYyBjb25zdCBjaGFyICpnZXRfZWxmX2NsYXNzCiAgKHVuc2ln bmVkIGludCk7CnN0YXRpYyBjb25zdCBjaGFyICpnZXRfZGF0YV9lbmNvZGluZwogICh1bnNpZ25l ZCBpbnQpOwpzdGF0aWMgY29uc3QgY2hhciAqZ2V0X29zYWJpX25hbWUKICAodW5zaWduZWQgaW50 KTsKc3RhdGljIGludCBndWVzc19pc19yZWxhCiAgKHVuc2lnbmVkIGxvbmcpOwpzdGF0aWMgY29u c3QgY2hhciAqZ2V0X25vdGVfdHlwZQogICh1bnNpZ25lZCBpbnQpOwpzdGF0aWMgY29uc3QgY2hh ciAqZ2V0X25ldGJzZF9lbGZjb3JlX25vdGVfdHlwZQogICh1bnNpZ25lZCBpbnQpOwpzdGF0aWMg aW50IHByb2Nlc3Nfbm90ZQogIChFbGZfSW50ZXJuYWxfTm90ZSAqKTsKc3RhdGljIGludCBwcm9j ZXNzX2NvcmVmaWxlX25vdGVfc2VnbWVudAogIChGSUxFICosIGJmZF92bWEsIGJmZF92bWEpOwpz dGF0aWMgaW50IHByb2Nlc3NfY29yZWZpbGVfbm90ZV9zZWdtZW50cwogIChGSUxFICopOwpzdGF0 aWMgaW50IHByb2Nlc3NfY29yZWZpbGVfY29udGVudHMKICAoRklMRSAqKTsKc3RhdGljIGludCBw cm9jZXNzX2FyY2hfc3BlY2lmaWMKICAoRklMRSAqKTsKc3RhdGljIGludCBwcm9jZXNzX2dudV9s aWJsaXN0CiAgKEZJTEUgKik7Cgp0eXBlZGVmIGludCBFbGYzMl9Xb3JkOwojIDQzNSAicmVhZGVs Zi5jIgpzdGF0aWMgdm9pZAplcnJvciAoY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQp7CiAgeyB2 YV9saXN0IGFyZ3M7IF9fYnVpbHRpbl92YV9zdGFydChhcmdzLG1lc3NhZ2UpOyB7IHN0cnVjdCBR ZG15OwogIHN0cnVjdCBRZG15OwoKICBmcHJpbnRmIChzdGRlcnIsICgiJXM6IEVycm9yOiAiKSwg cHJvZ3JhbV9uYW1lKTsKICB2ZnByaW50ZiAoc3RkZXJyLCBtZXNzYWdlLCBhcmdzKTsKICB9IF9f YnVpbHRpbl92YV9lbmQoYXJncyk7IH07Cn0KCnN0YXRpYyB2b2lkCndhcm4gKGNvbnN0IGNoYXIg Km1lc3NhZ2UsIC4uLikKewogIHsgdmFfbGlzdCBhcmdzOyBfX2J1aWx0aW5fdmFfc3RhcnQoYXJn cyxtZXNzYWdlKTsgeyBzdHJ1Y3QgUWRteTsKICBzdHJ1Y3QgUWRteTsKCiAgZnByaW50ZiAoc3Rk ZXJyLCAoIiVzOiBXYXJuaW5nOiAiKSwgcHJvZ3JhbV9uYW1lKTsKICB2ZnByaW50ZiAoc3RkZXJy LCBtZXNzYWdlLCBhcmdzKTsKICB9IF9fYnVpbHRpbl92YV9lbmQoYXJncyk7IH07Cn0KCnN0YXRp YyB2b2lkICogZ2V0X2RhdGEgKHZvaWQgKiwgRklMRSAqLCBsb25nLCBzaXplX3QsIGNvbnN0IGNo YXIgKik7CgpzdGF0aWMgdm9pZCAqCmdldF9kYXRhICh2YXIsIGZpbGUsIG9mZnNldCwgc2l6ZSwg cmVhc29uKQogICAgIHZvaWQgKiB2YXI7CiAgICAgRklMRSAqZmlsZTsKICAgICBsb25nIG9mZnNl dDsKICAgICBzaXplX3Qgc2l6ZTsKICAgICBjb25zdCBjaGFyICpyZWFzb247CnsKICB2b2lkICog bXZhcjsKCiAgaWYgKHNpemUgPT0gMCkKICAgIHJldHVybiAoKHZvaWQgKikwKTsKCiAgaWYgKGZz ZWVrIChmaWxlLCBvZmZzZXQsIDApKQogICAgewogICAgICBlcnJvciAoKCJVbmFibGUgdG8gc2Vl ayB0byAleCBmb3IgJXNcbiIpLCBvZmZzZXQsIHJlYXNvbik7CiAgICAgIHJldHVybiAoKHZvaWQg KikwKTsKICAgIH0KCiAgbXZhciA9IHZhcjsKICBpZiAobXZhciA9PSAoKHZvaWQgKikwKSkKICAg IHsKICAgICAgbXZhciA9ICh2b2lkICopIG1hbGxvYyAoc2l6ZSk7CgogICAgICBpZiAobXZhciA9 PSAoKHZvaWQgKikwKSkKICAgICAgICB7CiAgICAgICAgICBlcnJvciAoKCJPdXQgb2YgbWVtb3J5 IGFsbG9jYXRpbmcgJWQgYnl0ZXMgZm9yICVzXG4iKSwKICAgICAgICAgICAgICAgICBzaXplLCBy ZWFzb24pOwogICAgICAgICAgcmV0dXJuICgodm9pZCAqKTApOwogICAgICAgIH0KICAgIH0KCiAg aWYgKGZyZWFkIChtdmFyLCBzaXplLCAxLCBmaWxlKSAhPSAxKQogICAgewogICAgICBlcnJvciAo KCJVbmFibGUgdG8gcmVhZCBpbiAlZCBieXRlcyBvZiAlc1xuIiksIHNpemUsIHJlYXNvbik7CiAg ICAgIGlmIChtdmFyICE9IHZhcikKICAgICAgICBmcmVlIChtdmFyKTsKICAgICAgcmV0dXJuICgo dm9pZCAqKTApOwogICAgfQoKICByZXR1cm4gbXZhcjsKfQoKc3RhdGljIGJmZF92bWEKYnl0ZV9n ZXRfbGl0dGxlX2VuZGlhbiAoZmllbGQsIHNpemUpCiAgICAgdW5zaWduZWQgY2hhciAqZmllbGQ7 CiAgICAgaW50IHNpemU7CnsKICBzd2l0Y2ggKHNpemUpCiAgICB7CiAgICBjYXNlIDE6CiAgICAg IHJldHVybiAqZmllbGQ7CgogICAgY2FzZSAyOgogICAgICByZXR1cm4gKCh1bnNpZ25lZCBpbnQp IChmaWVsZFswXSkpCiAgICAgICAgfCAoKCh1bnNpZ25lZCBpbnQpIChmaWVsZFsxXSkpIDw8IDgp OwojIDUyMyAicmVhZGVsZi5jIgogICAgY2FzZSA0OgogICAgICByZXR1cm4gKCh1bnNpZ25lZCBs b25nKSAoZmllbGRbMF0pKQogICAgICAgIHwgKCgodW5zaWduZWQgbG9uZykgKGZpZWxkWzFdKSkg PDwgOCkKICAgICAgICB8ICgoKHVuc2lnbmVkIGxvbmcpIChmaWVsZFsyXSkpIDw8IDE2KQogICAg ICAgIHwgKCgodW5zaWduZWQgbG9uZykgKGZpZWxkWzNdKSkgPDwgMjQpOwoKCiAgICBjYXNlIDg6 CiAgICBjYXNlIC04OgoKCgoKICAgICAgcmV0dXJuICgoYmZkX3ZtYSkgKGZpZWxkWzBdKSkKICAg ICAgICB8ICgoKGJmZF92bWEpIChmaWVsZFsxXSkpIDw8IDgpCiAgICAgICAgfCAoKChiZmRfdm1h KSAoZmllbGRbMl0pKSA8PCAxNikKICAgICAgICB8ICgoKGJmZF92bWEpIChmaWVsZFszXSkpIDw8 IDI0KQogICAgICAgIHwgKCgoYmZkX3ZtYSkgKGZpZWxkWzRdKSkgPDwgMzIpCiAgICAgICAgfCAo KChiZmRfdm1hKSAoZmllbGRbNV0pKSA8PCA0MCkKICAgICAgICB8ICgoKGJmZF92bWEpIChmaWVs ZFs2XSkpIDw8IDQ4KQogICAgICAgIHwgKCgoYmZkX3ZtYSkgKGZpZWxkWzddKSkgPDwgNTYpOwoK ICAgIGRlZmF1bHQ6CiAgICAgIGVycm9yICgoIlVuaGFuZGxlZCBkYXRhIGxlbmd0aDogJWRcbiIp LCBzaXplKTsKICAgICAgYWJvcnQgKCk7CiAgICB9Cn0KCgpzdGF0aWMgdm9pZApwcmludF92bWEg KHZtYSwgbW9kZSkKICAgICBiZmRfdm1hIHZtYTsKICAgICBwcmludF9tb2RlIG1vZGU7CnsKCiAg aWYgKGlzXzMyYml0X2VsZikKCiAgICB7CiAgICAgIHN3aXRjaCAobW9kZSkKICAgICAgICB7CiAg ICAgICAgY2FzZSBGVUxMX0hFWDogcHJpbnRmICgiMHgiKTsKICAgICAgICBjYXNlIExPTkdfSEVY OiBwcmludGYgKCIlOC44bHgiLCAodW5zaWduZWQgbG9uZykgdm1hKTsgYnJlYWs7CiAgICAgICAg Y2FzZSBQUkVGSVhfSEVYOiBwcmludGYgKCIweCIpOwogICAgICAgIGNhc2UgSEVYOiBwcmludGYg KCIlbHgiLCAodW5zaWduZWQgbG9uZykgdm1hKTsgYnJlYWs7CiAgICAgICAgY2FzZSBERUM6IHBy aW50ZiAoIiVsZCIsICh1bnNpZ25lZCBsb25nKSB2bWEpOyBicmVhazsKICAgICAgICBjYXNlIERF Q181OiBwcmludGYgKCIlNWxkIiwgKGxvbmcpIHZtYSk7IGJyZWFrOwogICAgICAgIGNhc2UgVU5T SUdORUQ6IHByaW50ZiAoIiVsdSIsICh1bnNpZ25lZCBsb25nKSB2bWEpOyBicmVhazsKICAgICAg ICB9CiAgICB9CgogIGVsc2UKICAgIHsKICAgICAgc3dpdGNoIChtb2RlKQogICAgICAgIHsKICAg ICAgICBjYXNlIEZVTExfSEVYOgogICAgICAgICAgcHJpbnRmICgiMHgiKTsKCgogICAgICAgIGNh c2UgTE9OR19IRVg6CiAgICAgICAgICBmcHJpbnRmICgoc3Rkb3V0KSwgIiUwOGx4JTA4bHgiLCAo KHVuc2lnbmVkIGxvbmcpICgoKHZtYSkgPj4gMzIpICYgMHhmZmZmZmZmZikpLCAoKHVuc2lnbmVk IGxvbmcpICgoKHZtYSkgJiAweGZmZmZmZmZmKSkpKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAg ICBjYXNlIFBSRUZJWF9IRVg6CiAgICAgICAgICBwcmludGYgKCIweCIpOwoKCiAgICAgICAgY2Fz ZSBIRVg6CgoKCiAgICAgICAgICBpZiAoKCh1bnNpZ25lZCBsb25nKSAoKCh2bWEpID4+IDMyKSAm IDB4ZmZmZmZmZmYpKSkKICAgICAgICAgICAgcHJpbnRmICgiJWx4JTguOGx4IiwgKCh1bnNpZ25l ZCBsb25nKSAoKCh2bWEpID4+IDMyKSAmIDB4ZmZmZmZmZmYpKSwgKCh1bnNpZ25lZCBsb25nKSAo KCh2bWEpICYgMHhmZmZmZmZmZikpKSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHByaW50 ZiAoIiVseCIsICgodW5zaWduZWQgbG9uZykgKCgodm1hKSAmIDB4ZmZmZmZmZmYpKSkpOwoKICAg ICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIERFQzoKCgoKICAgICAgICAgIGlmICgoKHVuc2ln bmVkIGxvbmcpICgoKHZtYSkgPj4gMzIpICYgMHhmZmZmZmZmZikpKQoKICAgICAgICAgICAgcHJp bnRmICgiKyslbGQiLCAoKHVuc2lnbmVkIGxvbmcpICgoKHZtYSkgJiAweGZmZmZmZmZmKSkpKTsK ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcHJpbnRmICgiJWxkIiwgKCh1bnNpZ25lZCBsb25n KSAoKCh2bWEpICYgMHhmZmZmZmZmZikpKSk7CgogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNh c2UgREVDXzU6CgoKCiAgICAgICAgICBpZiAoKCh1bnNpZ25lZCBsb25nKSAoKCh2bWEpID4+IDMy KSAmIDB4ZmZmZmZmZmYpKSkKCiAgICAgICAgICAgIHByaW50ZiAoIisrJWxkIiwgKCh1bnNpZ25l ZCBsb25nKSAoKCh2bWEpICYgMHhmZmZmZmZmZikpKSk7CiAgICAgICAgICBlbHNlCiAgICAgICAg ICAgIHByaW50ZiAoIiU1bGQiLCAoKHVuc2lnbmVkIGxvbmcpICgoKHZtYSkgJiAweGZmZmZmZmZm KSkpKTsKCiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBVTlNJR05FRDoKCgoKICAgICAg ICAgIGlmICgoKHVuc2lnbmVkIGxvbmcpICgoKHZtYSkgPj4gMzIpICYgMHhmZmZmZmZmZikpKQoK ICAgICAgICAgICAgcHJpbnRmICgiKyslbHUiLCAoKHVuc2lnbmVkIGxvbmcpICgoKHZtYSkgJiAw eGZmZmZmZmZmKSkpKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcHJpbnRmICgiJWx1Iiwg KCh1bnNpZ25lZCBsb25nKSAoKCh2bWEpICYgMHhmZmZmZmZmZikpKSk7CgogICAgICAgICAgYnJl YWs7CiAgICAgICAgfQogICAgfQoKfQoKCgoKCgoKc3RhdGljIHZvaWQKcHJpbnRfc3ltYm9sICh3 aWR0aCwgc3ltYm9sKQogICAgIGludCB3aWR0aDsKICAgICBjb25zdCBjaGFyICpzeW1ib2w7CnsK ICBpZiAoZG9fd2lkZSkKICAgIHByaW50ZiAoIiVzIiwgc3ltYm9sKTsKICBlbHNlIGlmICh3aWR0 aCA8IDApCiAgICBwcmludGYgKCIlLSouKnMiLCB3aWR0aCwgd2lkdGgsIHN5bWJvbCk7CiAgZWxz ZQogICAgcHJpbnRmICgiJS0uKnMiLCB3aWR0aCwgc3ltYm9sKTsKfQoKc3RhdGljIGJmZF92bWEK Ynl0ZV9nZXRfYmlnX2VuZGlhbiAoZmllbGQsIHNpemUpCiAgICAgdW5zaWduZWQgY2hhciAqZmll bGQ7CiAgICAgaW50IHNpemU7CnsKICBzd2l0Y2ggKHNpemUpCiAgICB7CiAgICBjYXNlIDE6CiAg ICAgIHJldHVybiAqZmllbGQ7CgogICAgY2FzZSAyOgogICAgICByZXR1cm4gKCh1bnNpZ25lZCBp bnQpIChmaWVsZFsxXSkpIHwgKCgoaW50KSAoZmllbGRbMF0pKSA8PCA4KTsKCiAgICBjYXNlIDQ6 CiAgICAgIHJldHVybiAoKHVuc2lnbmVkIGxvbmcpIChmaWVsZFszXSkpCiAgICAgICAgfCAoKCh1 bnNpZ25lZCBsb25nKSAoZmllbGRbMl0pKSA8PCA4KQogICAgICAgIHwgKCgodW5zaWduZWQgbG9u ZykgKGZpZWxkWzFdKSkgPDwgMTYpCiAgICAgICAgfCAoKCh1bnNpZ25lZCBsb25nKSAoZmllbGRb MF0pKSA8PCAyNCk7CiMgNjg3ICJyZWFkZWxmLmMiCiAgICBjYXNlIDg6CiAgICBjYXNlIC04OgoK CgoKICAgICAgcmV0dXJuICgoYmZkX3ZtYSkgKGZpZWxkWzddKSkKICAgICAgICB8ICgoKGJmZF92 bWEpIChmaWVsZFs2XSkpIDw8IDgpCiAgICAgICAgfCAoKChiZmRfdm1hKSAoZmllbGRbNV0pKSA8 PCAxNikKICAgICAgICB8ICgoKGJmZF92bWEpIChmaWVsZFs0XSkpIDw8IDI0KQogICAgICAgIHwg KCgoYmZkX3ZtYSkgKGZpZWxkWzNdKSkgPDwgMzIpCiAgICAgICAgfCAoKChiZmRfdm1hKSAoZmll bGRbMl0pKSA8PCA0MCkKICAgICAgICB8ICgoKGJmZF92bWEpIChmaWVsZFsxXSkpIDw8IDQ4KQog ICAgICAgIHwgKCgoYmZkX3ZtYSkgKGZpZWxkWzBdKSkgPDwgNTYpOwoKCiAgICBkZWZhdWx0Ogog ICAgICBlcnJvciAoKCJVbmhhbmRsZWQgZGF0YSBsZW5ndGg6ICVkXG4iKSwgc2l6ZSk7CiAgICAg IGFib3J0ICgpOwogICAgfQp9CgoKCnN0YXRpYyBpbnQKZ3Vlc3NfaXNfcmVsYSAoZV9tYWNoaW5l KQogICAgIHVuc2lnbmVkIGxvbmcgZV9tYWNoaW5lOwp7CiAgc3dpdGNoIChlX21hY2hpbmUpCiAg ICB7CgogICAgY2FzZSA0MDoKICAgIGNhc2UgMzoKICAgIGNhc2UgNjoKICAgIGNhc2UgMTk6CiAg ICBjYXNlIDB4NWFhNToKICAgIGNhc2UgOTI6CiAgICBjYXNlIDB4ODQ3MjoKICAgIGNhc2UgODg6 CiAgICBjYXNlIDB4OTA0MToKICAgIGNhc2UgODU6CiAgICBjYXNlIDB4NzY1MDoKICAgIGNhc2Ug ODoKICAgIGNhc2UgMTA6CiAgICAgIHJldHVybiAwOwoKCiAgICBjYXNlIDQ6CiAgICBjYXNlIDQ2 OgogICAgY2FzZSA0NzoKICAgIGNhc2UgNDg6CiAgICBjYXNlIDE4OgogICAgY2FzZSA0MzoKICAg IGNhc2UgMjoKICAgIGNhc2UgMjA6CiAgICBjYXNlIDIxOgogICAgY2FzZSA4NzoKICAgIGNhc2Ug MHg5MDgwOgogICAgY2FzZSA4NjoKICAgIGNhc2UgMHg3Njc2OgogICAgY2FzZSA5MDoKICAgIGNh c2UgMHhkZWFkOgogICAgY2FzZSA4OToKICAgIGNhc2UgMHhiZWVmOgogICAgY2FzZSA4NDoKICAg IGNhc2UgMHgzMzMwOgogICAgY2FzZSAweDU0NDE6CiAgICBjYXNlIDQyOgogICAgY2FzZSAweDkw MjY6CiAgICBjYXNlIDM5OgogICAgY2FzZSA1MDoKICAgIGNhc2UgODM6CiAgICBjYXNlIDB4MTA1 NzoKICAgIGNhc2UgNzY6CiAgICBjYXNlIDc6CiAgICBjYXNlIDYyOgogICAgY2FzZSAyMjoKICAg IGNhc2UgMHhhMzkwOgogICAgY2FzZSA4MDoKICAgIGNhc2UgMTA1OgogICAgY2FzZSAweDEwNTk6 CiAgICBjYXNlIDB4YWQ0NToKICAgIGNhc2UgNzU6CiAgICBjYXNlIDEwMToKICAgIGNhc2UgMHg4 MjE3OgogICAgY2FzZSAweEZFQkE6CiAgICAgIHJldHVybiAxOwoKICAgIGNhc2UgNTQ6CiAgICBj YXNlIDU1OgogICAgY2FzZSA1NjoKICAgIGNhc2UgNTc6CiAgICBjYXNlIDU4OgogICAgY2FzZSA1 OToKICAgIGNhc2UgNjA6CiAgICBjYXNlIDYxOgogICAgY2FzZSA2NjoKICAgIGNhc2UgNjc6CiAg ICBjYXNlIDY4OgogICAgY2FzZSA2OToKICAgIGNhc2UgNzA6CiAgICBjYXNlIDcxOgogICAgY2Fz ZSA3MjoKICAgIGNhc2UgNzM6CiAgICBjYXNlIDc0OgogICAgZGVmYXVsdDoKICAgICAgd2FybiAo KCJEb24ndCBrbm93IGFib3V0IHJlbG9jYXRpb25zIG9uIHRoaXMgbWFjaGluZSBhcmNoaXRlY3R1 cmVcbiIpKTsKICAgICAgcmV0dXJuIDA7CiAgICB9Cn0KCnN0YXRpYyBpbnQKc2x1cnBfcmVsYV9y ZWxvY3MgKGZpbGUsIHJlbF9vZmZzZXQsIHJlbF9zaXplLCByZWxhc3AsIG5yZWxhc3ApCiAgICAg RklMRSAqZmlsZTsKICAgICB1bnNpZ25lZCBsb25nIHJlbF9vZmZzZXQ7CiAgICAgdW5zaWduZWQg bG9uZyByZWxfc2l6ZTsKICAgICBFbGZfSW50ZXJuYWxfUmVsYSAqKnJlbGFzcDsKICAgICB1bnNp Z25lZCBsb25nICpucmVsYXNwOwp7CiAgRWxmX0ludGVybmFsX1JlbGEgKnJlbGFzOwogIHVuc2ln bmVkIGxvbmcgbnJlbGFzOwogIHVuc2lnbmVkIGludCBpOwoKICBpZiAoaXNfMzJiaXRfZWxmKQog ICAgewogICAgICBFbGYzMl9FeHRlcm5hbF9SZWxhICplcmVsYXM7CgogICAgICBlcmVsYXMgPSAo RWxmMzJfRXh0ZXJuYWxfUmVsYSAqKSBnZXRfZGF0YSAoKCh2b2lkICopMCksIGZpbGUsIHJlbF9v ZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZWxfc2l6ZSwgKCJyZWxvY3MiKSk7CiAgICAgIGlmICghZXJlbGFzKQogICAgICAgIHJldHVybiAw OwoKICAgICAgbnJlbGFzID0gcmVsX3NpemUgLyBzaXplb2YgKEVsZjMyX0V4dGVybmFsX1JlbGEp OwoKICAgICAgcmVsYXMgPSAoRWxmX0ludGVybmFsX1JlbGEgKikKICAgICAgICBtYWxsb2MgKG5y ZWxhcyAqIHNpemVvZiAoRWxmX0ludGVybmFsX1JlbGEpKTsKCiAgICAgIGlmIChyZWxhcyA9PSAo KHZvaWQgKikwKSkKICAgICAgICB7CiAgICAgICAgICBlcnJvcigoIm91dCBvZiBtZW1vcnkgcGFy c2luZyByZWxvY3MiKSk7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICBmb3Ig KGkgPSAwOyBpIDwgbnJlbGFzOyBpKyspCiAgICAgICAgewogICAgICAgICAgcmVsYXNbaV0ucl9v ZmZzZXQgPSBieXRlX2dldCAoZXJlbGFzW2ldLnJfb2Zmc2V0LCBzaXplb2YgKGVyZWxhc1tpXS5y X29mZnNldCkpOwogICAgICAgICAgcmVsYXNbaV0ucl9pbmZvID0gYnl0ZV9nZXQgKGVyZWxhc1tp XS5yX2luZm8sIHNpemVvZiAoZXJlbGFzW2ldLnJfaW5mbykpOwogICAgICAgICAgcmVsYXNbaV0u cl9hZGRlbmQgPSBieXRlX2dldCAoZXJlbGFzW2ldLnJfYWRkZW5kLCBzaXplb2YgKGVyZWxhc1tp XS5yX2FkZGVuZCkpOwogICAgICAgIH0KCiAgICAgIGZyZWUgKGVyZWxhcyk7CiAgICB9CiAgZWxz ZQogICAgewogICAgICBFbGY2NF9FeHRlcm5hbF9SZWxhICplcmVsYXM7CgogICAgICBlcmVsYXMg PSAoRWxmNjRfRXh0ZXJuYWxfUmVsYSAqKSBnZXRfZGF0YSAoKCh2b2lkICopMCksIGZpbGUsIHJl bF9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZWxfc2l6ZSwgKCJyZWxvY3MiKSk7CiAgICAgIGlmICghZXJlbGFzKQogICAgICAgIHJldHVy biAwOwoKICAgICAgbnJlbGFzID0gcmVsX3NpemUgLyBzaXplb2YgKEVsZjY0X0V4dGVybmFsX1Jl bGEpOwoKICAgICAgcmVsYXMgPSAoRWxmX0ludGVybmFsX1JlbGEgKikKICAgICAgICBtYWxsb2Mg KG5yZWxhcyAqIHNpemVvZiAoRWxmX0ludGVybmFsX1JlbGEpKTsKCiAgICAgIGlmIChyZWxhcyA9 PSAoKHZvaWQgKikwKSkKICAgICAgICB7CiAgICAgICAgICBlcnJvcigoIm91dCBvZiBtZW1vcnkg cGFyc2luZyByZWxvY3MiKSk7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICBm b3IgKGkgPSAwOyBpIDwgbnJlbGFzOyBpKyspCiAgICAgICAgewogICAgICAgICAgcmVsYXNbaV0u cl9vZmZzZXQgPSBieXRlX2dldCAoZXJlbGFzW2ldLnJfb2Zmc2V0LCAtOCk7CiAgICAgICAgICBy ZWxhc1tpXS5yX2luZm8gPSBieXRlX2dldCAoZXJlbGFzW2ldLnJfaW5mbywgLTgpOwogICAgICAg ICAgcmVsYXNbaV0ucl9hZGRlbmQgPSBieXRlX2dldCAoZXJlbGFzW2ldLnJfYWRkZW5kLCAtOCk7 CiAgICAgICAgfQoKICAgICAgZnJlZSAoZXJlbGFzKTsKICAgIH0KICAqcmVsYXNwID0gcmVsYXM7 CiAgKm5yZWxhc3AgPSBucmVsYXM7CiAgcmV0dXJuIDE7Cn0KCnN0YXRpYyBpbnQKc2x1cnBfcmVs X3JlbG9jcyAoZmlsZSwgcmVsX29mZnNldCwgcmVsX3NpemUsIHJlbHNwLCBucmVsc3ApCiAgICAg RklMRSAqZmlsZTsKICAgICB1bnNpZ25lZCBsb25nIHJlbF9vZmZzZXQ7CiAgICAgdW5zaWduZWQg bG9uZyByZWxfc2l6ZTsKICAgICBFbGZfSW50ZXJuYWxfUmVsYSAqKnJlbHNwOwogICAgIHVuc2ln bmVkIGxvbmcgKm5yZWxzcDsKewogIEVsZl9JbnRlcm5hbF9SZWxhICpyZWxzOwogIHVuc2lnbmVk IGxvbmcgbnJlbHM7CiAgdW5zaWduZWQgaW50IGk7CgogIGlmIChpc18zMmJpdF9lbGYpCiAgICB7 CiAgICAgIEVsZjMyX0V4dGVybmFsX1JlbCAqZXJlbHM7CgogICAgICBlcmVscyA9IChFbGYzMl9F eHRlcm5hbF9SZWwgKikgZ2V0X2RhdGEgKCgodm9pZCAqKTApLCBmaWxlLCByZWxfb2Zmc2V0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbF9zaXplLCAo InJlbG9jcyIpKTsKICAgICAgaWYgKCFlcmVscykKICAgICAgICByZXR1cm4gMDsKCiAgICAgIG5y ZWxzID0gcmVsX3NpemUgLyBzaXplb2YgKEVsZjMyX0V4dGVybmFsX1JlbCk7CgogICAgICByZWxz ID0gKEVsZl9JbnRlcm5hbF9SZWxhICopIG1hbGxvYyAobnJlbHMgKiBzaXplb2YgKEVsZl9JbnRl cm5hbF9SZWxhKSk7CgogICAgICBpZiAocmVscyA9PSAoKHZvaWQgKikwKSkKICAgICAgICB7CiAg ICAgICAgICBlcnJvcigoIm91dCBvZiBtZW1vcnkgcGFyc2luZyByZWxvY3MiKSk7CiAgICAgICAg ICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICBmb3IgKGkgPSAwOyBpIDwgbnJlbHM7IGkrKykK ICAgICAgICB7CiAgICAgICAgICByZWxzW2ldLnJfb2Zmc2V0ID0gYnl0ZV9nZXQgKGVyZWxzW2ld LnJfb2Zmc2V0LCBzaXplb2YgKGVyZWxzW2ldLnJfb2Zmc2V0KSk7CiAgICAgICAgICByZWxzW2ld LnJfaW5mbyA9IGJ5dGVfZ2V0IChlcmVsc1tpXS5yX2luZm8sIHNpemVvZiAoZXJlbHNbaV0ucl9p bmZvKSk7CiAgICAgICAgICByZWxzW2ldLnJfYWRkZW5kID0gMDsKICAgICAgICB9CgogICAgICBm cmVlIChlcmVscyk7CiAgICB9CiAgZWxzZQogICAgewogICAgICBFbGY2NF9FeHRlcm5hbF9SZWwg KmVyZWxzOwoKICAgICAgZXJlbHMgPSAoRWxmNjRfRXh0ZXJuYWxfUmVsICopIGdldF9kYXRhICgo KHZvaWQgKikwKSwgZmlsZSwgcmVsX29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZWxfc2l6ZSwgKCJyZWxvY3MiKSk7CiAgICAgIGlmICghZXJl bHMpCiAgICAgICAgcmV0dXJuIDA7CgogICAgICBucmVscyA9IHJlbF9zaXplIC8gc2l6ZW9mIChF bGY2NF9FeHRlcm5hbF9SZWwpOwoKICAgICAgcmVscyA9IChFbGZfSW50ZXJuYWxfUmVsYSAqKSBt YWxsb2MgKG5yZWxzICogc2l6ZW9mIChFbGZfSW50ZXJuYWxfUmVsYSkpOwoKICAgICAgaWYgKHJl bHMgPT0gKCh2b2lkICopMCkpCiAgICAgICAgewogICAgICAgICAgZXJyb3IoKCJvdXQgb2YgbWVt b3J5IHBhcnNpbmcgcmVsb2NzIikpOwogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQoKICAg ICAgZm9yIChpID0gMDsgaSA8IG5yZWxzOyBpKyspCiAgICAgICAgewogICAgICAgICAgcmVsc1tp XS5yX29mZnNldCA9IGJ5dGVfZ2V0IChlcmVsc1tpXS5yX29mZnNldCwgLTgpOwogICAgICAgICAg cmVsc1tpXS5yX2luZm8gPSBieXRlX2dldCAoZXJlbHNbaV0ucl9pbmZvLCAtOCk7CiAgICAgICAg ICByZWxzW2ldLnJfYWRkZW5kID0gMDsKICAgICAgICB9CgogICAgICBmcmVlIChlcmVscyk7CiAg ICB9CiAgKnJlbHNwID0gcmVsczsKICAqbnJlbHNwID0gbnJlbHM7CiAgcmV0dXJuIDE7Cn0KCgpz dGF0aWMgaW50CmR1bXBfcmVsb2NhdGlvbnMgKGZpbGUsIHJlbF9vZmZzZXQsIHJlbF9zaXplLCBz eW10YWIsIG5zeW1zLCBzdHJ0YWIsIGlzX3JlbGEpCiAgICAgRklMRSAqZmlsZTsKICAgICB1bnNp Z25lZCBsb25nIHJlbF9vZmZzZXQ7CiAgICAgdW5zaWduZWQgbG9uZyByZWxfc2l6ZTsKICAgICBF bGZfSW50ZXJuYWxfU3ltICpzeW10YWI7CiAgICAgdW5zaWduZWQgbG9uZyBuc3ltczsKICAgICBj aGFyICpzdHJ0YWI7CiAgICAgaW50IGlzX3JlbGE7CnsKICB1bnNpZ25lZCBpbnQgaTsKICBFbGZf SW50ZXJuYWxfUmVsYSAqcmVsczsKCgogIGlmIChpc19yZWxhID09IC0xKQogICAgaXNfcmVsYSA9 IGd1ZXNzX2lzX3JlbGEgKGVsZl9oZWFkZXIuZV9tYWNoaW5lKTsKCiAgaWYgKGlzX3JlbGEpCiAg ICB7CiAgICAgIGlmICghc2x1cnBfcmVsYV9yZWxvY3MgKGZpbGUsIHJlbF9vZmZzZXQsIHJlbF9z aXplLCAmcmVscywgJnJlbF9zaXplKSkKICAgICAgICByZXR1cm4gMDsKICAgIH0KICBlbHNlCiAg ICB7CiAgICAgIGlmICghc2x1cnBfcmVsX3JlbG9jcyAoZmlsZSwgcmVsX29mZnNldCwgcmVsX3Np emUsICZyZWxzLCAmcmVsX3NpemUpKQogICAgICAgIHJldHVybiAwOwogICAgfQoKICBpZiAoaXNf MzJiaXRfZWxmKQogICAgewogICAgICBpZiAoaXNfcmVsYSkKICAgICAgICB7CiAgICAgICAgICBp ZiAoZG9fd2lkZSkKICAgICAgICAgICAgcHJpbnRmICgoIiBPZmZzZXQgICAgIEluZm8gICAgVHlw ZSAgICAgICAgICAgICAgICBTeW0uIFZhbHVlICBTeW1ib2wncyBOYW1lICsgQWRkZW5kXG4iKSk7 CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHByaW50ZiAoKCIgT2Zmc2V0ICAgICBJbmZvICAg IFR5cGUgICAgICAgICAgICBTeW0uVmFsdWUgIFN5bS4gTmFtZSArIEFkZGVuZFxuIikpOwogICAg ICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGlmIChkb193aWRlKQogICAgICAg ICAgICBwcmludGYgKCgiIE9mZnNldCAgICAgSW5mbyAgICBUeXBlICAgICAgICAgICAgICAgIFN5 bS4gVmFsdWUgIFN5bWJvbCdzIE5hbWVcbiIpKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAg cHJpbnRmICgoIiBPZmZzZXQgICAgIEluZm8gICAgVHlwZSAgICAgICAgICAgIFN5bS5WYWx1ZSAg U3ltLiBOYW1lXG4iKSk7CiAgICAgICAgfQogICAgfQogIGVsc2UKICAgIHsKICAgICAgaWYgKGlz X3JlbGEpCiAgICAgICAgewogICAgICAgICAgaWYgKGRvX3dpZGUpCiAgICAgICAgICAgIHByaW50 ZiAoKCIgICAgT2Zmc2V0ICAgICAgICAgICAgIEluZm8gICAgICAgICAgICBUeXBlICAgICAgICAg ICAgICAgU3ltYm9sJ3MgVmFsdWUgIFN5bWJvbCdzIE5hbWUgKyBBZGRlbmRcbiIpKTsKICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgcHJpbnRmICgoIiAgT2Zmc2V0ICAgICAgICAgIEluZm8gICAg ICAgICAgIFR5cGUgICAgICAgICAgIFN5bS4gVmFsdWUgICAgU3ltLiBOYW1lICsgQWRkZW5kXG4i KSk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgaWYgKGRvX3dpZGUp CiAgICAgICAgICAgIHByaW50ZiAoKCIgICAgT2Zmc2V0ICAgICAgICAgICAgIEluZm8gICAgICAg ICAgICBUeXBlICAgICAgICAgICAgICAgU3ltYm9sJ3MgVmFsdWUgIFN5bWJvbCdzIE5hbWVcbiIp KTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcHJpbnRmICgoIiAgT2Zmc2V0ICAgICAgICAg IEluZm8gICAgICAgICAgIFR5cGUgICAgICAgICAgIFN5bS4gVmFsdWUgICAgU3ltLiBOYW1lXG4i KSk7CiAgICAgICAgfQogICAgfQoKICBmb3IgKGkgPSAwOyBpIDwgcmVsX3NpemU7IGkrKykKICAg IHsKICAgICAgY29uc3QgY2hhciAqcnR5cGU7CiAgICAgIGNvbnN0IGNoYXIgKnJ0eXBlMiA9ICgo dm9pZCAqKTApOwogICAgICBjb25zdCBjaGFyICpydHlwZTMgPSAoKHZvaWQgKikwKTsKICAgICAg YmZkX3ZtYSBvZmZzZXQ7CiAgICAgIGJmZF92bWEgaW5mbzsKICAgICAgYmZkX3ZtYSBzeW10YWJf aW5kZXg7CiAgICAgIGJmZF92bWEgdHlwZTsKICAgICAgYmZkX3ZtYSB0eXBlMiA9IChiZmRfdm1h KSAoKHZvaWQgKikwKTsKICAgICAgYmZkX3ZtYSB0eXBlMyA9IChiZmRfdm1hKSAoKHZvaWQgKikw KTsKCiAgICAgIG9mZnNldCA9IHJlbHNbaV0ucl9vZmZzZXQ7CiAgICAgIGluZm8gPSByZWxzW2ld LnJfaW5mbzsKCiAgICAgIGlmIChpc18zMmJpdF9lbGYpCiAgICAgICAgewogICAgICAgICAgdHlw ZSA9ICgoaW5mbykgJiAweGZmKTsKICAgICAgICAgIHN5bXRhYl9pbmRleCA9ICgoaW5mbykgPj4g OCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewoKCgoKICAgICAgICAgIGlmIChlbGZf aGVhZGVyLmVfbWFjaGluZSA9PSA4KQogICAgICAgICAgICB7CgoKCgogICAgICAgICAgICAgIGlm IChlbGZfaGVhZGVyLmVfaWRlbnRbNV0gIT0gMikKICAgICAgICAgICAgICAgIGluZm8gPSAoKChp bmZvICYgMHhmZmZmZmZmZikgPDwgMzIpCiAgICAgICAgICAgICAgICAgICAgICAgIHwgKChpbmZv ID4+IDU2KSAmIDB4ZmYpCiAgICAgICAgICAgICAgICAgICAgICAgIHwgKChpbmZvID4+IDQwKSAm IDB4ZmYwMCkKICAgICAgICAgICAgICAgICAgICAgICAgfCAoKGluZm8gPj4gMjQpICYgMHhmZjAw MDApCiAgICAgICAgICAgICAgICAgICAgICAgIHwgKChpbmZvID4+IDgpICYgMHhmZjAwMDAwMCkp OwogICAgICAgICAgICAgIHR5cGUgPSAoKGluZm8pICYgMHhmZik7CiAgICAgICAgICAgICAgdHlw ZTIgPSAoKChpbmZvKSA+PiA4KSAmIDB4ZmYpOwogICAgICAgICAgICAgIHR5cGUzID0gKCgoaW5m bykgPj4gMTYpICYgMHhmZik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKGVsZl9o ZWFkZXIuZV9tYWNoaW5lID09IDQzKQogICAgICAgICAgICB0eXBlID0gKChpbmZvKSAmIDB4ZmYp OwogICAgICAgICAgZWxzZQogICAgICAgICAgICB0eXBlID0gKChpbmZvKSAmIDB4ZmZmZmZmZmYp OwoKICAgICAgICAgIHN5bXRhYl9pbmRleCA9ICgoaW5mbykgPj4gMzIpOwoKICAgICAgICB9Cgog ICAgICBpZiAoaXNfMzJiaXRfZWxmKQogICAgICAgIHsKCiAgICAgICAgICBwcmludGYgKCIlOC44 bHggICU4LjhseCAiLCAoKHVuc2lnbmVkIGxvbmcpICgoKG9mZnNldCkgJiAweGZmZmZmZmZmKSkp LCAoKHVuc2lnbmVkIGxvbmcpICgoKGluZm8pICYgMHhmZmZmZmZmZikpKSk7CgoKCiAgICAgICAg fQogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgIHByaW50ZiAoZG9fd2lkZQogICAgICAg ICAgICAgICAgICA/ICIlOC44bHglOC44bHggICU4LjhseCU4LjhseCAiCiAgICAgICAgICAgICAg ICAgIDogIiU0LjRseCU4LjhseCAgJTQuNGx4JTguOGx4ICIsCiAgICAgICAgICAgICAgICAgICgo dW5zaWduZWQgbG9uZykgKCgob2Zmc2V0KSA+PiAzMikgJiAweGZmZmZmZmZmKSksCiAgICAgICAg ICAgICAgICAgICgodW5zaWduZWQgbG9uZykgKCgob2Zmc2V0KSAmIDB4ZmZmZmZmZmYpKSksCiAg ICAgICAgICAgICAgICAgICgodW5zaWduZWQgbG9uZykgKCgoaW5mbykgPj4gMzIpICYgMHhmZmZm ZmZmZikpLAogICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpICgoKGluZm8pICYgMHhm ZmZmZmZmZikpKSk7CgoKCgoKCiAgICAgICAgfQoKICAgICAgc3dpdGNoIChlbGZfaGVhZGVyLmVf bWFjaGluZSkKICAgICAgICB7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJ0eXBlID0gKCh2 b2lkICopMCk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSA4ODoKICAgICAgICBjYXNl IDB4OTA0MToKICAgICAgICAgIHJ0eXBlID0gZWxmX20zMnJfcmVsb2NfdHlwZSAodHlwZSk7CiAg ICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAzOgogICAgICAgIGNhc2UgNjoKICAgICAgICAg IHJ0eXBlID0gZWxmX2kzODZfcmVsb2NfdHlwZSAodHlwZSk7CiAgICAgICAgICBicmVhazsKCiAg ICAgICAgY2FzZSA3MDoKICAgICAgICBjYXNlIDUzOgogICAgICAgICAgcnR5cGUgPSBlbGZfbTY4 aGMxMV9yZWxvY190eXBlICh0eXBlKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDQ6 CiAgICAgICAgICBydHlwZSA9IGVsZl9tNjhrX3JlbG9jX3R5cGUgKHR5cGUpOwogICAgICAgICAg YnJlYWs7CgogICAgICAgIGNhc2UgMTk6CiAgICAgICAgICBydHlwZSA9IGVsZl9pOTYwX3JlbG9j X3R5cGUgKHR5cGUpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgODM6CiAgICAgICAg Y2FzZSAweDEwNTc6CiAgICAgICAgICBydHlwZSA9IGVsZl9hdnJfcmVsb2NfdHlwZSAodHlwZSk7 CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAxMToKICAgICAgICBjYXNlIDE4OgogICAg ICAgIGNhc2UgNDM6CiAgICAgICAgY2FzZSAyOgogICAgICAgICAgcnR5cGUgPSBlbGZfc3BhcmNf cmVsb2NfdHlwZSAodHlwZSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSA4NzoKICAg ICAgICBjYXNlIDB4OTA4MDoKICAgICAgICAgIHJ0eXBlID0gdjg1MF9yZWxvY190eXBlICh0eXBl KTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDg1OgogICAgICAgIGNhc2UgMHg3NjUw OgogICAgICAgICAgcnR5cGUgPSBlbGZfZDEwdl9yZWxvY190eXBlICh0eXBlKTsKICAgICAgICAg IGJyZWFrOwoKICAgICAgICBjYXNlIDg2OgogICAgICAgIGNhc2UgMHg3Njc2OgogICAgICAgICAg cnR5cGUgPSBlbGZfZDMwdl9yZWxvY190eXBlICh0eXBlKTsKICAgICAgICAgIGJyZWFrOwoKICAg ICAgICBjYXNlIDB4NWFhNToKICAgICAgICAgIHJ0eXBlID0gZWxmX2RseF9yZWxvY190eXBlICh0 eXBlKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDQyOgogICAgICAgICAgcnR5cGUg PSBlbGZfc2hfcmVsb2NfdHlwZSAodHlwZSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2Fz ZSA4OToKICAgICAgICBjYXNlIDB4YmVlZjoKICAgICAgICAgIHJ0eXBlID0gZWxmX21uMTAzMDBf cmVsb2NfdHlwZSAodHlwZSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSA5MDoKICAg ICAgICBjYXNlIDB4ZGVhZDoKICAgICAgICAgIHJ0eXBlID0gZWxmX21uMTAyMDBfcmVsb2NfdHlw ZSAodHlwZSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSA4NDoKICAgICAgICBjYXNl IDB4MzMzMDoKICAgICAgICAgIHJ0eXBlID0gZWxmX2ZyMzBfcmVsb2NfdHlwZSAodHlwZSk7CiAg ICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAweDU0NDE6CiAgICAgICAgICBydHlwZSA9IGVs Zl9mcnZfcmVsb2NfdHlwZSAodHlwZSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAz OToKICAgICAgICAgIHJ0eXBlID0gZWxmX21jb3JlX3JlbG9jX3R5cGUgKHR5cGUpOwogICAgICAg ICAgYnJlYWs7CgogICAgICAgIGNhc2UgODA6CiAgICAgICAgICBydHlwZSA9IGVsZl9tbWl4X3Jl bG9jX3R5cGUgKHR5cGUpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMTA1OgogICAg ICAgIGNhc2UgMHgxMDU5OgogICAgICAgICAgcnR5cGUgPSBlbGZfbXNwNDMwX3JlbG9jX3R5cGUg KHR5cGUpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMjA6CiAgICAgICAgICBydHlw ZSA9IGVsZl9wcGNfcmVsb2NfdHlwZSAodHlwZSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAg Y2FzZSAyMToKICAgICAgICAgIHJ0eXBlID0gZWxmX3BwYzY0X3JlbG9jX3R5cGUgKHR5cGUpOwog ICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgODoKICAgICAgICBjYXNlIDEwOgogICAgICAg ICAgcnR5cGUgPSBlbGZfbWlwc19yZWxvY190eXBlICh0eXBlKTsKICAgICAgICAgIGlmICghaXNf MzJiaXRfZWxmKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgcnR5cGUyID0gZWxmX21pcHNf cmVsb2NfdHlwZSAodHlwZTIpOwogICAgICAgICAgICAgIHJ0eXBlMyA9IGVsZl9taXBzX3JlbG9j X3R5cGUgKHR5cGUzKTsKICAgICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNh c2UgMHg5MDI2OgogICAgICAgICAgcnR5cGUgPSBlbGZfYWxwaGFfcmVsb2NfdHlwZSAodHlwZSk7 CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSA0MDoKICAgICAgICAgIHJ0eXBlID0gZWxm X2FybV9yZWxvY190eXBlICh0eXBlKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDQ1 OgogICAgICAgICAgcnR5cGUgPSBlbGZfYXJjX3JlbG9jX3R5cGUgKHR5cGUpOwogICAgICAgICAg YnJlYWs7CgogICAgICAgIGNhc2UgMTU6CiAgICAgICAgICBydHlwZSA9IGVsZl9ocHBhX3JlbG9j X3R5cGUgKHR5cGUpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgNDY6CiAgICAgICAg Y2FzZSA0NzoKICAgICAgICBjYXNlIDQ4OgogICAgICAgICAgcnR5cGUgPSBlbGZfaDhfcmVsb2Nf dHlwZSAodHlwZSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSA5MjoKICAgICAgICBj YXNlIDB4ODQ3MjoKICAgICAgICAgIHJ0eXBlID0gZWxmX29yMzJfcmVsb2NfdHlwZSAodHlwZSk7 CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSA5MToKICAgICAgICBjYXNlIDk5OgogICAg ICAgICAgcnR5cGUgPSBlbGZfcGpfcmVsb2NfdHlwZSAodHlwZSk7CiAgICAgICAgICBicmVhazsK ICAgICAgICBjYXNlIDUwOgogICAgICAgICAgcnR5cGUgPSBlbGZfaWE2NF9yZWxvY190eXBlICh0 eXBlKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDc2OgogICAgICAgICAgcnR5cGUg PSBlbGZfY3Jpc19yZWxvY190eXBlICh0eXBlKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBj YXNlIDc6CiAgICAgICAgICBydHlwZSA9IGVsZl9pODYwX3JlbG9jX3R5cGUgKHR5cGUpOwogICAg ICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgNjI6CiAgICAgICAgICBydHlwZSA9IGVsZl94ODZf NjRfcmVsb2NfdHlwZSAodHlwZSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSA5Ogog ICAgICAgICAgcnR5cGUgPSBpMzcwX3JlbG9jX3R5cGUgKHR5cGUpOwogICAgICAgICAgYnJlYWs7 CgogICAgICAgIGNhc2UgMHhhMzkwOgogICAgICAgIGNhc2UgMjI6CiAgICAgICAgICBydHlwZSA9 IGVsZl9zMzkwX3JlbG9jX3R5cGUgKHR5cGUpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNh c2UgMHhhZDQ1OgogICAgICAgICAgcnR5cGUgPSBlbGZfeHN0b3JteTE2X3JlbG9jX3R5cGUgKHR5 cGUpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgNzU6CiAgICAgICAgICBydHlwZSA9 IGVsZl92YXhfcmVsb2NfdHlwZSAodHlwZSk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2Fz ZSAxMDE6CiAgICAgICAgY2FzZSAweDgyMTc6CiAgICAgICAgICBydHlwZSA9IGVsZl9pcDJrX3Jl bG9jX3R5cGUgKHR5cGUpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMHhGRUJBOgog ICAgICAgICAgcnR5cGUgPSBlbGZfaXEyMDAwX3JlbG9jX3R5cGUgKHR5cGUpOwogICAgICAgICAg YnJlYWs7CiAgICAgICAgfQoKICAgICAgaWYgKHJ0eXBlID09ICgodm9pZCAqKTApKQoKICAgICAg ICBwcmludGYgKCgidW5yZWNvZ25pemVkOiAlLTdseCIpLCAoKHVuc2lnbmVkIGxvbmcpICgoKHR5 cGUpICYgMHhmZmZmZmZmZikpKSk7CgoKCiAgICAgIGVsc2UKICAgICAgICBwcmludGYgKGRvX3dp ZGUgPyAiJS0yMS4yMXMiIDogIiUtMTcuMTdzIiwgcnR5cGUpOwoKICAgICAgaWYgKHN5bXRhYl9p bmRleCkKICAgICAgICB7CiAgICAgICAgICBpZiAoc3ltdGFiID09ICgodm9pZCAqKTApIHx8IHN5 bXRhYl9pbmRleCA+PSBuc3ltcykKICAgICAgICAgICAgcHJpbnRmICgiIGJhZCBzeW1ib2wgaW5k ZXg6ICUwOGx4IiwgKHVuc2lnbmVkIGxvbmcpIHN5bXRhYl9pbmRleCk7CiAgICAgICAgICBlbHNl CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBFbGZfSW50ZXJuYWxfU3ltICpwc3ltOwoKICAg ICAgICAgICAgICBwc3ltID0gc3ltdGFiICsgc3ltdGFiX2luZGV4OwoKICAgICAgICAgICAgICBw cmludGYgKCIgIik7CiAgICAgICAgICAgICAgcHJpbnRfdm1hIChwc3ltLT5zdF92YWx1ZSwgTE9O R19IRVgpOwogICAgICAgICAgICAgIHByaW50ZiAoaXNfMzJiaXRfZWxmID8gIiAgICIgOiAiICIp OwoKICAgICAgICAgICAgICBpZiAocHN5bS0+c3RfbmFtZSA9PSAwKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzZWNfbmFtZSA9ICI8bnVsbD4iOwogICAg ICAgICAgICAgICAgICBjaGFyIG5hbWVfYnVmWzQwXTsKCiAgICAgICAgICAgICAgICAgIGlmICgo KHBzeW0tPnN0X2luZm8pICYgMHhGKSA9PSAzKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgIGJmZF92bWEgc2VjX2luZGV4ID0gKGJmZF92bWEpIC0xOwoKICAgICAg ICAgICAgICAgICAgICAgIGlmIChwc3ltLT5zdF9zaG5keCA8IDB4RkYwMCkKICAgICAgICAgICAg ICAgICAgICAgICAgc2VjX2luZGV4ID0gcHN5bS0+c3Rfc2huZHg7CiAgICAgICAgICAgICAgICAg ICAgICBlbHNlIGlmIChwc3ltLT5zdF9zaG5keCA+IDB4RkYwMCkKICAgICAgICAgICAgICAgICAg ICAgICAgc2VjX2luZGV4ID0gcHN5bS0+c3Rfc2huZHggLSAoMHhGRkZGICsgMQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDB4RkYwMCk7Cgog ICAgICAgICAgICAgICAgICAgICAgaWYgKHNlY19pbmRleCAhPSAoYmZkX3ZtYSkgLTEpCiAgICAg ICAgICAgICAgICAgICAgICAgIHNlY19uYW1lID0gKChzZWN0aW9uX2hlYWRlcnMgKyBzZWNfaW5k ZXgpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlY3Rpb25faGVhZGVycyArIHNlY19p bmRleCktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3Ry aW5nX3RhYmxlICsgKHNlY3Rpb25faGVhZGVycyArIHNlY19pbmRleCktPnNoX25hbWUpKTsKICAg ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBzeW0tPnN0X3NobmR4ID09IDB4RkZGMSkKICAg ICAgICAgICAgICAgICAgICAgICAgc2VjX25hbWUgPSAiQUJTIjsKICAgICAgICAgICAgICAgICAg ICAgIGVsc2UgaWYgKHBzeW0tPnN0X3NobmR4ID09IDB4RkZGMikKICAgICAgICAgICAgICAgICAg ICAgICAgc2VjX25hbWUgPSAiQ09NTU9OIjsKICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYg KG5hbWVfYnVmLCAiPHNlY3Rpb24gMHgleD4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICh1bnNpZ25lZCBpbnQpIHBzeW0tPnN0X3NobmR4KTsKICAgICAgICAgICAgICAgICAg ICAgICAgICBzZWNfbmFtZSA9IG5hbWVfYnVmOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBwcmludF9zeW1ib2wgKDIyLCBz ZWNfbmFtZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoc3RydGFi ID09ICgodm9pZCAqKTApKQogICAgICAgICAgICAgICAgcHJpbnRmICgoIjxzdHJpbmcgdGFibGUg aW5kZXggJTNsZD4iKSwgcHN5bS0+c3RfbmFtZSk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICAgcHJpbnRfc3ltYm9sICgyMiwgc3RydGFiICsgcHN5bS0+c3RfbmFtZSk7CgogICAg ICAgICAgICAgIGlmIChpc19yZWxhKQogICAgICAgICAgICAgICAgcHJpbnRmICgiICsgJWx4Iiwg KHVuc2lnbmVkIGxvbmcpIHJlbHNbaV0ucl9hZGRlbmQpOwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICBlbHNlIGlmIChpc19yZWxhKQogICAgICAgIHsKICAgICAgICAgIHByaW50ZiAoIiUq YyIsIGlzXzMyYml0X2VsZiA/IChkb193aWRlID8gMzQgOiAyOCkgOiAoZG9fd2lkZSA/IDI2IDog MjApLCAnICcpOwogICAgICAgICAgcHJpbnRfdm1hIChyZWxzW2ldLnJfYWRkZW5kLCBMT05HX0hF WCk7CiAgICAgICAgfQoKICAgICAgaWYgKGVsZl9oZWFkZXIuZV9tYWNoaW5lID09IDQzCiAgICAg ICAgICAmJiAhX19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9fczJfbGVuOyAoX19i dWlsdGluX2NvbnN0YW50X3AgKHJ0eXBlKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAoIlJfU1BB UkNfT0xPMTAiKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKHJ0eXBlKSwgX19zMl9sZW4gPSBzdHJs ZW4gKCJSX1NQQVJDX09MTzEwIiksICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKHJ0eXBlKSAr IDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShydHlwZSkgPT0gMSkgfHwgX19zMV9sZW4gPj0g NCkgJiYgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIlJfU1BBUkNfT0xPMTAiKSArIDEpIC0g KHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiUl9TUEFSQ19PTE8xMCIpID09IDEpIHx8IF9fczJfbGVu ID49IDQpKSA/IG1lbWNtcCAoKF9fY29uc3QgY2hhciAqKSAocnR5cGUpLCAoX19jb25zdCBjaGFy ICopICgiUl9TUEFSQ19PTE8xMCIpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDog X19zMl9sZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKHJ0eXBlKSAmJiAoKHNpemVf dCkoY29uc3Qgdm9pZCAqKSgocnR5cGUpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHJ0 eXBlKSA9PSAxKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKHJ0eXBlKSwgX19zMV9sZW4gPCA0KSA/ IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIlJfU1BBUkNfT0xPMTAiKSAmJiAoKHNpemVfdCkoY29u c3Qgdm9pZCAqKSgoIlJfU1BBUkNfT0xPMTAiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAq KSgiUl9TUEFSQ19PTE8xMCIpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50 IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KHJ0eXBlKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop KCJSX1NQQVJDX09MTzEwIikpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAw KSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKHJ0eXBlKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopICgiUl9TUEFSQ19PTE8xMCIpKVsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQg PT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopIChydHlwZSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoIlJfU1BBUkNfT0xPMTAiKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVz dWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKHJ0eXBlKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopICgiUl9TUEFSQ19PTE8xMCIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9f ZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiUl9TUEFSQ19PTE8xMCIpOyByZWdpc3Rl ciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAocnR5cGUpKVswXSAtIF9fczJbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAocnR5cGUpKVsxXSAtIF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVz dWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAocnR5cGUpKVsyXSAtIF9fczJbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9f cmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKHJ0eXBlKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDog KF9fYnVpbHRpbl9jb25zdGFudF9wICgiUl9TUEFSQ19PTE8xMCIpICYmICgoc2l6ZV90KShjb25z dCB2b2lkICopKCgiUl9TUEFSQ19PTE8xMCIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICop KCJSX1NQQVJDX09MTzEwIikgPT0gMSkgJiYgKF9fczJfbGVuID0gc3RybGVuICgiUl9TUEFSQ19P TE8xMCIpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wIChydHlwZSkgJiYg KChzaXplX3QpKGNvbnN0IHZvaWQgKikoKHJ0eXBlKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9p ZCAqKShydHlwZSkgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1 bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocnR5cGUp KVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoIlJfU1BB UkNfT0xPMTAiKSlbMF0pOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19y ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocnR5 cGUpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJS X1NQQVJDX09MTzEwIikpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7 IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KHJ0eXBlKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICgiUl9TUEFSQ19PTE8xMCIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0g MCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAocnR5cGUpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCJSX1NQQVJDX09MTzEwIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNp b25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKHJ0eXBlKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0g X19zMVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJS X1NQQVJDX09MTzEwIikpWzBdOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsg X19yZXN1bHQgPSAoX19zMVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKCJSX1NQQVJDX09MTzEwIikpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jl c3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopICgiUl9TUEFSQ19PTE8xMCIpKVsyXSk7IGlmIChfX3MyX2xl biA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJSX1NQQVJDX09MTzEwIikpWzNdKTsg fSB9IF9fcmVzdWx0OyB9KSkpIDogc3RyY21wIChydHlwZSwgIlJfU1BBUkNfT0xPMTAiKSkpKTsg fSkpCiAgICAgICAgcHJpbnRmICgiICsgJWx4IiwgKHVuc2lnbmVkIGxvbmcpICgoKGJmZF9zaWdu ZWRfdm1hKSgoKGluZm8pICYgMHhmZmZmZmZmZikgPj4gOCkgXiAweDgwMDAwMCkgLSAweDgwMDAw MCkpOwoKICAgICAgcHV0Y2hhciAoJ1xuJyk7CgogICAgICBpZiAoISBpc18zMmJpdF9lbGYgJiYg ZWxmX2hlYWRlci5lX21hY2hpbmUgPT0gOCkKICAgICAgICB7CiAgICAgICAgICBwcmludGYgKCIg ICAgICAgICAgICAgICAgICAgIFR5cGUyOiAiKTsKCiAgICAgICAgICBpZiAocnR5cGUyID09ICgo dm9pZCAqKTApKQoKICAgICAgICAgICAgcHJpbnRmICgoInVucmVjb2duaXplZDogJS03bHgiKSwg KCh1bnNpZ25lZCBsb25nKSAoKCh0eXBlMikgJiAweGZmZmZmZmZmKSkpKTsKCgoKICAgICAgICAg IGVsc2UKICAgICAgICAgICAgcHJpbnRmICgiJS0xNy4xN3MiLCBydHlwZTIpOwoKICAgICAgICAg IHByaW50ZigiXG4gICAgICAgICAgICAgICAgICAgIFR5cGUzOiAiKTsKCiAgICAgICAgICBpZiAo cnR5cGUzID09ICgodm9pZCAqKTApKQoKICAgICAgICAgICAgcHJpbnRmICgoInVucmVjb2duaXpl ZDogJS03bHgiKSwgKCh1bnNpZ25lZCBsb25nKSAoKCh0eXBlMykgJiAweGZmZmZmZmZmKSkpKTsK CgoKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcHJpbnRmICgiJS0xNy4xN3MiLCBydHlwZTMp OwoKICAgICAgICAgIHB1dGNoYXIgKCdcbicpOwogICAgICAgIH0KICAgIH0KCiAgZnJlZSAocmVs cyk7CgogIHJldHVybiAxOwp9CgpzdGF0aWMgY29uc3QgY2hhciAqCmdldF9taXBzX2R5bmFtaWNf dHlwZSAodHlwZSkKICAgICB1bnNpZ25lZCBsb25nIHR5cGU7CnsKICBzd2l0Y2ggKHR5cGUpCiAg ICB7CiAgICBjYXNlIDB4NzAwMDAwMDE6IHJldHVybiAiTUlQU19STERfVkVSU0lPTiI7CiAgICBj YXNlIDB4NzAwMDAwMDI6IHJldHVybiAiTUlQU19USU1FX1NUQU1QIjsKICAgIGNhc2UgMHg3MDAw MDAwMzogcmV0dXJuICJNSVBTX0lDSEVDS1NVTSI7CiAgICBjYXNlIDB4NzAwMDAwMDQ6IHJldHVy biAiTUlQU19JVkVSU0lPTiI7CiAgICBjYXNlIDB4NzAwMDAwMDU6IHJldHVybiAiTUlQU19GTEFH UyI7CiAgICBjYXNlIDB4NzAwMDAwMDY6IHJldHVybiAiTUlQU19CQVNFX0FERFJFU1MiOwogICAg Y2FzZSAweDcwMDAwMDA3OiByZXR1cm4gIk1JUFNfTVNZTSI7CiAgICBjYXNlIDB4NzAwMDAwMDg6 IHJldHVybiAiTUlQU19DT05GTElDVCI7CiAgICBjYXNlIDB4NzAwMDAwMDk6IHJldHVybiAiTUlQ U19MSUJMSVNUIjsKICAgIGNhc2UgMHg3MDAwMDAwYTogcmV0dXJuICJNSVBTX0xPQ0FMX0dPVE5P IjsKICAgIGNhc2UgMHg3MDAwMDAwYjogcmV0dXJuICJNSVBTX0NPTkZMSUNUTk8iOwogICAgY2Fz ZSAweDcwMDAwMDEwOiByZXR1cm4gIk1JUFNfTElCTElTVE5PIjsKICAgIGNhc2UgMHg3MDAwMDAx MTogcmV0dXJuICJNSVBTX1NZTVRBQk5PIjsKICAgIGNhc2UgMHg3MDAwMDAxMjogcmV0dXJuICJN SVBTX1VOUkVGRVhUTk8iOwogICAgY2FzZSAweDcwMDAwMDEzOiByZXR1cm4gIk1JUFNfR09UU1lN IjsKICAgIGNhc2UgMHg3MDAwMDAxNDogcmV0dXJuICJNSVBTX0hJUEFHRU5PIjsKICAgIGNhc2Ug MHg3MDAwMDAxNjogcmV0dXJuICJNSVBTX1JMRF9NQVAiOwogICAgY2FzZSAweDcwMDAwMDE3OiBy ZXR1cm4gIk1JUFNfREVMVEFfQ0xBU1MiOwogICAgY2FzZSAweDcwMDAwMDE4OiByZXR1cm4gIk1J UFNfREVMVEFfQ0xBU1NfTk8iOwogICAgY2FzZSAweDcwMDAwMDE5OiByZXR1cm4gIk1JUFNfREVM VEFfSU5TVEFOQ0UiOwogICAgY2FzZSAweDcwMDAwMDFhOiByZXR1cm4gIk1JUFNfREVMVEFfSU5T VEFOQ0VfTk8iOwogICAgY2FzZSAweDcwMDAwMDFiOiByZXR1cm4gIk1JUFNfREVMVEFfUkVMT0Mi OwogICAgY2FzZSAweDcwMDAwMDFjOiByZXR1cm4gIk1JUFNfREVMVEFfUkVMT0NfTk8iOwogICAg Y2FzZSAweDcwMDAwMDFkOiByZXR1cm4gIk1JUFNfREVMVEFfU1lNIjsKICAgIGNhc2UgMHg3MDAw MDAxZTogcmV0dXJuICJNSVBTX0RFTFRBX1NZTV9OTyI7CiAgICBjYXNlIDB4NzAwMDAwMjA6IHJl dHVybiAiTUlQU19ERUxUQV9DTEFTU1NZTSI7CiAgICBjYXNlIDB4NzAwMDAwMjE6IHJldHVybiAi TUlQU19ERUxUQV9DTEFTU1NZTV9OTyI7CiAgICBjYXNlIDB4NzAwMDAwMjI6IHJldHVybiAiTUlQ U19DWFhfRkxBR1MiOwogICAgY2FzZSAweDcwMDAwMDIzOiByZXR1cm4gIk1JUFNfUElYSUVfSU5J VCI7CiAgICBjYXNlIDB4NzAwMDAwMjQ6IHJldHVybiAiTUlQU19TWU1CT0xfTElCIjsKICAgIGNh c2UgMHg3MDAwMDAyNTogcmV0dXJuICJNSVBTX0xPQ0FMUEFHRV9HT1RJRFgiOwogICAgY2FzZSAw eDcwMDAwMDI2OiByZXR1cm4gIk1JUFNfTE9DQUxfR09USURYIjsKICAgIGNhc2UgMHg3MDAwMDAy NzogcmV0dXJuICJNSVBTX0hJRERFTl9HT1RJRFgiOwogICAgY2FzZSAweDcwMDAwMDI4OiByZXR1 cm4gIk1JUFNfUFJPVEVDVEVEX0dPVElEWCI7CiAgICBjYXNlIDB4NzAwMDAwMjk6IHJldHVybiAi TUlQU19PUFRJT05TIjsKICAgIGNhc2UgMHg3MDAwMDAyYTogcmV0dXJuICJNSVBTX0lOVEVSRkFD RSI7CiAgICBjYXNlIDB4NzAwMDAwMmI6IHJldHVybiAiTUlQU19EWU5TVFJfQUxJR04iOwogICAg Y2FzZSAweDcwMDAwMDJjOiByZXR1cm4gIk1JUFNfSU5URVJGQUNFX1NJWkUiOwogICAgY2FzZSAw eDcwMDAwMDJkOiByZXR1cm4gIk1JUFNfUkxEX1RFWFRfUkVTT0xWRV9BRERSIjsKICAgIGNhc2Ug MHg3MDAwMDAyZTogcmV0dXJuICJNSVBTX1BFUkZfU1VGRklYIjsKICAgIGNhc2UgMHg3MDAwMDAy ZjogcmV0dXJuICJNSVBTX0NPTVBBQ1RfU0laRSI7CiAgICBjYXNlIDB4NzAwMDAwMzA6IHJldHVy biAiTUlQU19HUF9WQUxVRSI7CiAgICBjYXNlIDB4NzAwMDAwMzE6IHJldHVybiAiTUlQU19BVVhf RFlOQU1JQyI7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gKCh2b2lkICopMCk7CiAgICB9Cn0K CnN0YXRpYyBjb25zdCBjaGFyICoKZ2V0X3NwYXJjNjRfZHluYW1pY190eXBlICh0eXBlKQogICAg IHVuc2lnbmVkIGxvbmcgdHlwZTsKewogIHN3aXRjaCAodHlwZSkKICAgIHsKICAgIGNhc2UgMHg3 MDAwMDAwMTogcmV0dXJuICJTUEFSQ19SRUdJU1RFUiI7CiAgICBkZWZhdWx0OgogICAgICByZXR1 cm4gKCh2b2lkICopMCk7CiAgICB9Cn0KCnN0YXRpYyBjb25zdCBjaGFyICoKZ2V0X3BwYzY0X2R5 bmFtaWNfdHlwZSAodHlwZSkKICAgICB1bnNpZ25lZCBsb25nIHR5cGU7CnsKICBzd2l0Y2ggKHR5 cGUpCiAgICB7CiAgICBjYXNlIDB4NzAwMDAwMDA6IHJldHVybiAiUFBDNjRfR0xJTksiOwogICAg Y2FzZSAoMHg3MDAwMDAwMCArIDEpOiByZXR1cm4gIlBQQzY0X09QRCI7CiAgICBjYXNlICgweDcw MDAwMDAwICsgMik6IHJldHVybiAiUFBDNjRfT1BEU1oiOwogICAgZGVmYXVsdDoKICAgICAgcmV0 dXJuICgodm9pZCAqKTApOwogICAgfQp9CgpzdGF0aWMgY29uc3QgY2hhciAqCmdldF9wYXJpc2Nf ZHluYW1pY190eXBlICh0eXBlKQogICAgIHVuc2lnbmVkIGxvbmcgdHlwZTsKewogIHN3aXRjaCAo dHlwZSkKICAgIHsKICAgIGNhc2UgKDB4NjAwMDAwMDAgKyAweDApOiByZXR1cm4gIkhQX0xPQURf TUFQIjsKICAgIGNhc2UgKDB4NjAwMDAwMDAgKyAweDEpOiByZXR1cm4gIkhQX0RMRF9GTEFHUyI7 CiAgICBjYXNlICgweDYwMDAwMDAwICsgMHgyKTogcmV0dXJuICJIUF9ETERfSE9PSyI7CiAgICBj YXNlICgweDYwMDAwMDAwICsgMHgzKTogcmV0dXJuICJIUF9VWDEwX0lOSVQiOwogICAgY2FzZSAo MHg2MDAwMDAwMCArIDB4NCk6IHJldHVybiAiSFBfVVgxMF9JTklUU1oiOwogICAgY2FzZSAoMHg2 MDAwMDAwMCArIDB4NSk6IHJldHVybiAiSFBfUFJFSU5JVCI7CiAgICBjYXNlICgweDYwMDAwMDAw ICsgMHg2KTogcmV0dXJuICJIUF9QUkVJTklUU1oiOwogICAgY2FzZSAoMHg2MDAwMDAwMCArIDB4 Nyk6IHJldHVybiAiSFBfTkVFREVEIjsKICAgIGNhc2UgKDB4NjAwMDAwMDAgKyAweDgpOiByZXR1 cm4gIkhQX1RJTUVfU1RBTVAiOwogICAgY2FzZSAoMHg2MDAwMDAwMCArIDB4OSk6IHJldHVybiAi SFBfQ0hFQ0tTVU0iOwogICAgY2FzZSAoMHg2MDAwMDAwMCArIDB4YSk6IHJldHVybiAiSFBfR1NU X1NJWkUiOwogICAgY2FzZSAoMHg2MDAwMDAwMCArIDB4Yik6IHJldHVybiAiSFBfR1NUX1ZFUlNJ T04iOwogICAgY2FzZSAoMHg2MDAwMDAwMCArIDB4Yyk6IHJldHVybiAiSFBfR1NUX0hBU0hWQUwi OwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuICgodm9pZCAqKTApOwogICAgfQp9CgpzdGF0aWMg Y29uc3QgY2hhciAqCmdldF9pYTY0X2R5bmFtaWNfdHlwZSAodHlwZSkKICAgICB1bnNpZ25lZCBs b25nIHR5cGU7CnsKICBzd2l0Y2ggKHR5cGUpCiAgICB7CiAgICBjYXNlICgweDcwMDAwMDAwICsg MCk6IHJldHVybiAiSUFfNjRfUExUX1JFU0VSVkUiOwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJu ICgodm9pZCAqKTApOwogICAgfQp9CgpzdGF0aWMgY29uc3QgY2hhciAqCmdldF9keW5hbWljX3R5 cGUgKHR5cGUpCiAgICAgdW5zaWduZWQgbG9uZyB0eXBlOwp7CiAgc3RhdGljIGNoYXIgYnVmZlsz Ml07CgogIHN3aXRjaCAodHlwZSkKICAgIHsKICAgIGNhc2UgMDogcmV0dXJuICJOVUxMIjsKICAg IGNhc2UgMTogcmV0dXJuICJORUVERUQiOwogICAgY2FzZSAyOiByZXR1cm4gIlBMVFJFTFNaIjsK ICAgIGNhc2UgMzogcmV0dXJuICJQTFRHT1QiOwogICAgY2FzZSA0OiByZXR1cm4gIkhBU0giOwog ICAgY2FzZSA1OiByZXR1cm4gIlNUUlRBQiI7CiAgICBjYXNlIDY6IHJldHVybiAiU1lNVEFCIjsK ICAgIGNhc2UgNzogcmV0dXJuICJSRUxBIjsKICAgIGNhc2UgODogcmV0dXJuICJSRUxBU1oiOwog ICAgY2FzZSA5OiByZXR1cm4gIlJFTEFFTlQiOwogICAgY2FzZSAxMDogcmV0dXJuICJTVFJTWiI7 CiAgICBjYXNlIDExOiByZXR1cm4gIlNZTUVOVCI7CiAgICBjYXNlIDEyOiByZXR1cm4gIklOSVQi OwogICAgY2FzZSAxMzogcmV0dXJuICJGSU5JIjsKICAgIGNhc2UgMTQ6IHJldHVybiAiU09OQU1F IjsKICAgIGNhc2UgMTU6IHJldHVybiAiUlBBVEgiOwogICAgY2FzZSAxNjogcmV0dXJuICJTWU1C T0xJQyI7CiAgICBjYXNlIDE3OiByZXR1cm4gIlJFTCI7CiAgICBjYXNlIDE4OiByZXR1cm4gIlJF TFNaIjsKICAgIGNhc2UgMTk6IHJldHVybiAiUkVMRU5UIjsKICAgIGNhc2UgMjA6IHJldHVybiAi UExUUkVMIjsKICAgIGNhc2UgMjE6IHJldHVybiAiREVCVUciOwogICAgY2FzZSAyMjogcmV0dXJu ICJURVhUUkVMIjsKICAgIGNhc2UgMjM6IHJldHVybiAiSk1QUkVMIjsKICAgIGNhc2UgMjQ6IHJl dHVybiAiQklORF9OT1ciOwogICAgY2FzZSAyNTogcmV0dXJuICJJTklUX0FSUkFZIjsKICAgIGNh c2UgMjY6IHJldHVybiAiRklOSV9BUlJBWSI7CiAgICBjYXNlIDI3OiByZXR1cm4gIklOSVRfQVJS QVlTWiI7CiAgICBjYXNlIDI4OiByZXR1cm4gIkZJTklfQVJSQVlTWiI7CiAgICBjYXNlIDI5OiBy ZXR1cm4gIlJVTlBBVEgiOwogICAgY2FzZSAzMDogcmV0dXJuICJGTEFHUyI7CgogICAgY2FzZSAz MjogcmV0dXJuICJQUkVJTklUX0FSUkFZIjsKICAgIGNhc2UgMzM6IHJldHVybiAiUFJFSU5JVF9B UlJBWVNaIjsKCiAgICBjYXNlIDB4NmZmZmZkZjg6IHJldHVybiAiQ0hFQ0tTVU0iOwogICAgY2Fz ZSAweDZmZmZmZGY5OiByZXR1cm4gIlBMVFBBRFNaIjsKICAgIGNhc2UgMHg2ZmZmZmRmYTogcmV0 dXJuICJNT1ZFRU5UIjsKICAgIGNhc2UgMHg2ZmZmZmRmYjogcmV0dXJuICJNT1ZFU1oiOwogICAg Y2FzZSAweDZmZmZmZGZjOiByZXR1cm4gIkZFQVRVUkUiOwogICAgY2FzZSAweDZmZmZmZGZkOiBy ZXR1cm4gIlBPU0ZMQUdfMSI7CiAgICBjYXNlIDB4NmZmZmZkZmU6IHJldHVybiAiU1lNSU5TWiI7 CiAgICBjYXNlIDB4NmZmZmZkZmY6IHJldHVybiAiU1lNSU5FTlQiOwoKICAgIGNhc2UgMHg2ZmZm ZmUwMDogcmV0dXJuICJBRERSUk5HTE8iOwogICAgY2FzZSAweDZmZmZmZWZhOiByZXR1cm4gIkNP TkZJRyI7CiAgICBjYXNlIDB4NmZmZmZlZmI6IHJldHVybiAiREVQQVVESVQiOwogICAgY2FzZSAw eDZmZmZmZWZjOiByZXR1cm4gIkFVRElUIjsKICAgIGNhc2UgMHg2ZmZmZmVmZDogcmV0dXJuICJQ TFRQQUQiOwogICAgY2FzZSAweDZmZmZmZWZlOiByZXR1cm4gIk1PVkVUQUIiOwogICAgY2FzZSAw eDZmZmZmZWZmOiByZXR1cm4gIlNZTUlORk8iOwoKICAgIGNhc2UgMHg2ZmZmZmZmMDogcmV0dXJu ICJWRVJTWU0iOwoKICAgIGNhc2UgMHg2ZmZmZmZmOTogcmV0dXJuICJSRUxBQ09VTlQiOwogICAg Y2FzZSAweDZmZmZmZmZhOiByZXR1cm4gIlJFTENPVU5UIjsKICAgIGNhc2UgMHg2ZmZmZmZmYjog cmV0dXJuICJGTEFHU18xIjsKICAgIGNhc2UgMHg2ZmZmZmZmYzogcmV0dXJuICJWRVJERUYiOwog ICAgY2FzZSAweDZmZmZmZmZkOiByZXR1cm4gIlZFUkRFRk5VTSI7CiAgICBjYXNlIDB4NmZmZmZm ZmU6IHJldHVybiAiVkVSTkVFRCI7CiAgICBjYXNlIDB4NmZmZmZmZmY6IHJldHVybiAiVkVSTkVF RE5VTSI7CgogICAgY2FzZSAweDdmZmZmZmZkOiByZXR1cm4gIkFVWElMSUFSWSI7CiAgICBjYXNl IDB4N2ZmZmZmZmU6IHJldHVybiAiVVNFRCI7CiAgICBjYXNlIDB4N2ZmZmZmZmY6IHJldHVybiAi RklMVEVSIjsKCiAgICBjYXNlIDB4NmZmZmZkZjU6IHJldHVybiAiR05VX1BSRUxJTktFRCI7CiAg ICBjYXNlIDB4NmZmZmZlZjg6IHJldHVybiAiR05VX0NPTkZMSUNUIjsKICAgIGNhc2UgMHg2ZmZm ZmRmNjogcmV0dXJuICJHTlVfQ09ORkxJQ1RTWiI7CiAgICBjYXNlIDB4NmZmZmZlZjk6IHJldHVy biAiR05VX0xJQkxJU1QiOwogICAgY2FzZSAweDZmZmZmZGY3OiByZXR1cm4gIkdOVV9MSUJMSVNU U1oiOwoKICAgIGRlZmF1bHQ6CiAgICAgIGlmICgodHlwZSA+PSAweDcwMDAwMDAwKSAmJiAodHlw ZSA8PSAweDdmZmZmZmZmKSkKICAgICAgICB7CiAgICAgICAgICBjb25zdCBjaGFyICpyZXN1bHQ7 CgogICAgICAgICAgc3dpdGNoIChlbGZfaGVhZGVyLmVfbWFjaGluZSkKICAgICAgICAgICAgewog ICAgICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgIGNhc2UgMTA6CiAgICAgICAgICAgICAgcmVz dWx0ID0gZ2V0X21pcHNfZHluYW1pY190eXBlICh0eXBlKTsKICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgY2FzZSA0MzoKICAgICAgICAgICAgICByZXN1bHQgPSBnZXRfc3BhcmM2NF9k eW5hbWljX3R5cGUgKHR5cGUpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNl IDIxOgogICAgICAgICAgICAgIHJlc3VsdCA9IGdldF9wcGM2NF9keW5hbWljX3R5cGUgKHR5cGUp OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDUwOgogICAgICAgICAgICAg IHJlc3VsdCA9IGdldF9pYTY0X2R5bmFtaWNfdHlwZSAodHlwZSk7CiAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgcmVzdWx0ID0gKCh2b2lkICop MCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAocmVz dWx0ICE9ICgodm9pZCAqKTApKQogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwoKICAgICAgICAg IHNwcmludGYgKGJ1ZmYsICgiUHJvY2Vzc29yIFNwZWNpZmljOiAlbHgiKSwgdHlwZSk7CiAgICAg ICAgfQogICAgICBlbHNlIGlmICgodHlwZSA+PSAweDYwMDAwMDBkKSAmJiAodHlwZSA8PSAweDZm ZmYwMDAwKSkKICAgICAgICB7CiAgICAgICAgICBjb25zdCBjaGFyICpyZXN1bHQ7CgogICAgICAg ICAgc3dpdGNoIChlbGZfaGVhZGVyLmVfbWFjaGluZSkKICAgICAgICAgICAgewogICAgICAgICAg ICBjYXNlIDE1OgogICAgICAgICAgICAgIHJlc3VsdCA9IGdldF9wYXJpc2NfZHluYW1pY190eXBl ICh0eXBlKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg ICAgICAgICByZXN1bHQgPSAoKHZvaWQgKikwKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgICAgfQoKICAgICAgICAgIGlmIChyZXN1bHQgIT0gKCh2b2lkICopMCkpCiAgICAgICAgICAg IHJldHVybiByZXN1bHQ7CgogICAgICAgICAgc3ByaW50ZiAoYnVmZiwgKCJPcGVyYXRpbmcgU3lz dGVtIHNwZWNpZmljOiAlbHgiKSwgdHlwZSk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg c3ByaW50ZiAoYnVmZiwgKCI8dW5rbm93bj46ICVseCIpLCB0eXBlKTsKCiAgICAgIHJldHVybiBi dWZmOwogICAgfQp9CgpzdGF0aWMgY2hhciAqCmdldF9maWxlX3R5cGUgKGVfdHlwZSkKICAgICB1 bnNpZ25lZCBlX3R5cGU7CnsKICBzdGF0aWMgY2hhciBidWZmWzMyXTsKCiAgc3dpdGNoIChlX3R5 cGUpCiAgICB7CiAgICBjYXNlIDA6IHJldHVybiAoIk5PTkUgKE5vbmUpIik7CiAgICBjYXNlIDE6 IHJldHVybiAoIlJFTCAoUmVsb2NhdGFibGUgZmlsZSkiKTsKICAgIGNhc2UgMjogcmV0dXJuICgi RVhFQyAoRXhlY3V0YWJsZSBmaWxlKSIpOwogICAgY2FzZSAzOiByZXR1cm4gKCJEWU4gKFNoYXJl ZCBvYmplY3QgZmlsZSkiKTsKICAgIGNhc2UgNDogcmV0dXJuICgiQ09SRSAoQ29yZSBmaWxlKSIp OwoKICAgIGRlZmF1bHQ6CiAgICAgIGlmICgoZV90eXBlID49IDB4RkYwMCkgJiYgKGVfdHlwZSA8 PSAweEZGRkYpKQogICAgICAgIHNwcmludGYgKGJ1ZmYsICgiUHJvY2Vzc29yIFNwZWNpZmljOiAo JXgpIiksIGVfdHlwZSk7CiAgICAgIGVsc2UgaWYgKChlX3R5cGUgPj0gMHhGRTAwKSAmJiAoZV90 eXBlIDw9IDB4RkVGRikpCiAgICAgICAgc3ByaW50ZiAoYnVmZiwgKCJPUyBTcGVjaWZpYzogKCV4 KSIpLCBlX3R5cGUpOwogICAgICBlbHNlCiAgICAgICAgc3ByaW50ZiAoYnVmZiwgKCI8dW5rbm93 bj46ICV4IiksIGVfdHlwZSk7CiAgICAgIHJldHVybiBidWZmOwogICAgfQp9CgpzdGF0aWMgY2hh ciAqCmdldF9tYWNoaW5lX25hbWUgKGVfbWFjaGluZSkKICAgICB1bnNpZ25lZCBlX21hY2hpbmU7 CnsKICBzdGF0aWMgY2hhciBidWZmWzY0XTsKCiAgc3dpdGNoIChlX21hY2hpbmUpCiAgICB7CiAg ICBjYXNlIDA6IHJldHVybiAoIk5vbmUiKTsKICAgIGNhc2UgMTogcmV0dXJuICJXRTMyMTAwIjsK ICAgIGNhc2UgMjogcmV0dXJuICJTcGFyYyI7CiAgICBjYXNlIDM6IHJldHVybiAiSW50ZWwgODAz ODYiOwogICAgY2FzZSA0OiByZXR1cm4gIk1DNjgwMDAiOwogICAgY2FzZSA1OiByZXR1cm4gIk1D ODgwMDAiOwogICAgY2FzZSA2OiByZXR1cm4gIkludGVsIDgwNDg2IjsKICAgIGNhc2UgNzogcmV0 dXJuICJJbnRlbCA4MDg2MCI7CiAgICBjYXNlIDg6IHJldHVybiAiTUlQUyBSMzAwMCI7CiAgICBj YXNlIDk6IHJldHVybiAiSUJNIFN5c3RlbS8zNzAiOwogICAgY2FzZSAxMDogcmV0dXJuICJNSVBT IFI0MDAwIGJpZy1lbmRpYW4iOwogICAgY2FzZSAxMTogcmV0dXJuICJTcGFyYyB2OSAob2xkKSI7 CiAgICBjYXNlIDE1OiByZXR1cm4gIkhQUEEiOwogICAgY2FzZSAxNzogcmV0dXJuICJQb3dlciBQ QyAob2xkKSI7CiAgICBjYXNlIDE4OiByZXR1cm4gIlNwYXJjIHY4KyIgOwogICAgY2FzZSAxOTog cmV0dXJuICJJbnRlbCA5MDg2MCI7CiAgICBjYXNlIDIwOiByZXR1cm4gIlBvd2VyUEMiOwogICAg Y2FzZSAyMTogcmV0dXJuICJQb3dlclBDNjQiOwogICAgY2FzZSAzNjogcmV0dXJuICJORUMgVjgw MCI7CiAgICBjYXNlIDM3OiByZXR1cm4gIkZ1aml0c3UgRlIyMCI7CiAgICBjYXNlIDM4OiByZXR1 cm4gIlRSVyBSSDMyIjsKICAgIGNhc2UgMzk6IHJldHVybiAiTUNPUkUiOwogICAgY2FzZSA0MDog cmV0dXJuICJBUk0iOwogICAgY2FzZSA0MTogcmV0dXJuICJEaWdpdGFsIEFscGhhIChvbGQpIjsK ICAgIGNhc2UgNDI6IHJldHVybiAiSGl0YWNoaSBTSCI7CiAgICBjYXNlIDQzOiByZXR1cm4gIlNw YXJjIHY5IjsKICAgIGNhc2UgNDQ6IHJldHVybiAiU2llbWVucyBUcmljb3JlIjsKICAgIGNhc2Ug NDU6IHJldHVybiAiQVJDIjsKICAgIGNhc2UgNDY6IHJldHVybiAiSGl0YWNoaSBIOC8zMDAiOwog ICAgY2FzZSA0NzogcmV0dXJuICJIaXRhY2hpIEg4LzMwMEgiOwogICAgY2FzZSA0ODogcmV0dXJu ICJIaXRhY2hpIEg4UyI7CiAgICBjYXNlIDQ5OiByZXR1cm4gIkhpdGFjaGkgSDgvNTAwIjsKICAg IGNhc2UgNTA6IHJldHVybiAiSW50ZWwgSUEtNjQiOwogICAgY2FzZSA1MTogcmV0dXJuICJTdGFu Zm9yZCBNSVBTLVgiOwogICAgY2FzZSA1MjogcmV0dXJuICJNb3Rvcm9sYSBDb2xkZmlyZSI7CiAg ICBjYXNlIDUzOiByZXR1cm4gIk1vdG9yb2xhIE02OEhDMTIiOwogICAgY2FzZSAweDkwMjY6IHJl dHVybiAiQWxwaGEiOwogICAgY2FzZSAweDc2NTA6CiAgICBjYXNlIDg1OiByZXR1cm4gImQxMHYi OwogICAgY2FzZSAweDc2NzY6CiAgICBjYXNlIDg2OiByZXR1cm4gImQzMHYiOwogICAgY2FzZSAw eDkwNDE6CiAgICBjYXNlIDg4OiByZXR1cm4gIk1pdHN1YmlzaGkgTTMyciI7CiAgICBjYXNlIDB4 OTA4MDoKICAgIGNhc2UgODc6IHJldHVybiAiTkVDIHY4NTAiOwogICAgY2FzZSAweGJlZWY6CiAg ICBjYXNlIDg5OiByZXR1cm4gIm1uMTAzMDAiOwogICAgY2FzZSAweGRlYWQ6CiAgICBjYXNlIDkw OiByZXR1cm4gIm1uMTAyMDAiOwogICAgY2FzZSAweDMzMzA6CiAgICBjYXNlIDg0OiByZXR1cm4g IkZ1aml0c3UgRlIzMCI7CiAgICBjYXNlIDB4NTQ0MTogcmV0dXJuICJGdWppdHN1IEZSLVYiOwog ICAgY2FzZSA5OToKICAgIGNhc2UgOTE6IHJldHVybiAicGljb0phdmEiOwogICAgY2FzZSA1NDog cmV0dXJuICJGdWppdHN1IE11bHRpbWVkaWEgQWNjZWxlcmF0b3IiOwogICAgY2FzZSA1NTogcmV0 dXJuICJTaWVtZW5zIFBDUCI7CiAgICBjYXNlIDU2OiByZXR1cm4gIlNvbnkgbkNQVSBlbWJlZGRl ZCBSSVNDIHByb2Nlc3NvciI7CiAgICBjYXNlIDU3OiByZXR1cm4gIkRlbnNvIE5EUjEgbWljcm9w cm9jZXNzcHIiOwogICAgY2FzZSA1ODogcmV0dXJuICJNb3Rvcm9sYSBTdGFyKkNvcmUgcHJvY2Vz c29yIjsKICAgIGNhc2UgNTk6IHJldHVybiAiVG95b3RhIE1FMTYgcHJvY2Vzc29yIjsKICAgIGNh c2UgNjA6IHJldHVybiAiU1RNaWNyb2VsZWN0cm9uaWNzIFNUMTAwIHByb2Nlc3NvciI7CiAgICBj YXNlIDYxOiByZXR1cm4gIkFkdmFuY2VkIExvZ2ljIENvcnAuIFRpbnlKIGVtYmVkZGVkIHByb2Nl c3NvciI7CiAgICBjYXNlIDY2OiByZXR1cm4gIlNpZW1lbnMgRlg2NiBtaWNyb2NvbnRyb2xsZXIi OwogICAgY2FzZSA2NzogcmV0dXJuICJTVE1pY3JvZWxlY3Ryb25pY3MgU1Q5KyA4LzE2IGJpdCBt aWNyb2NvbnRyb2xsZXIiOwogICAgY2FzZSA2ODogcmV0dXJuICJTVE1pY3JvZWxlY3Ryb25pY3Mg U1Q3IDgtYml0IG1pY3JvY29udHJvbGxlciI7CiAgICBjYXNlIDY5OiByZXR1cm4gIk1vdG9yb2xh IE1DNjhIQzE2IE1pY3JvY29udHJvbGxlciI7CiAgICBjYXNlIDcwOiByZXR1cm4gIk1vdG9yb2xh IE1DNjhIQzExIE1pY3JvY29udHJvbGxlciI7CiAgICBjYXNlIDcxOiByZXR1cm4gIk1vdG9yb2xh IE1DNjhIQzA4IE1pY3JvY29udHJvbGxlciI7CiAgICBjYXNlIDcyOiByZXR1cm4gIk1vdG9yb2xh IE1DNjhIQzA1IE1pY3JvY29udHJvbGxlciI7CiAgICBjYXNlIDczOiByZXR1cm4gIlNpbGljb24g R3JhcGhpY3MgU1Z4IjsKICAgIGNhc2UgNzQ6IHJldHVybiAiU1RNaWNyb2VsZWN0cm9uaWNzIFNU MTkgOC1iaXQgbWljcm9jb250cm9sbGVyIjsKICAgIGNhc2UgNzU6IHJldHVybiAiRGlnaXRhbCBW QVgiOwogICAgY2FzZSAweDEwNTc6CiAgICBjYXNlIDgzOiByZXR1cm4gIkF0bWVsIEFWUiA4LWJp dCBtaWNyb2NvbnRyb2xsZXIiOwogICAgY2FzZSA3NjogcmV0dXJuICJBeGlzIENvbW11bmljYXRp b25zIDMyLWJpdCBlbWJlZGRlZCBwcm9jZXNzb3IiOwogICAgY2FzZSA3NzogcmV0dXJuICJJbmZp bmVvbiBUZWNobm9sb2dpZXMgMzItYml0IGVtYmVkZGVkIGNwdSI7CiAgICBjYXNlIDc4OiByZXR1 cm4gIkVsZW1lbnQgMTQgNjQtYml0IERTUCBwcm9jZXNzb3IiOwogICAgY2FzZSA3OTogcmV0dXJu ICJMU0kgTG9naWMncyAxNi1iaXQgRFNQIHByb2Nlc3NvciI7CiAgICBjYXNlIDgwOiByZXR1cm4g IkRvbmFsZCBLbnV0aCdzIGVkdWNhdGlvbmFsIDY0LWJpdCBwcm9jZXNzb3IiOwogICAgY2FzZSA4 MTogcmV0dXJuICJIYXJ2YXJkIFVuaXZlcnNpdHlzJ3MgbWFjaGluZS1pbmRlcGVuZGVudCBvYmpl Y3QgZm9ybWF0IjsKICAgIGNhc2UgODI6IHJldHVybiAiVml0ZXNzZSBQcmlzbSI7CiAgICBjYXNl IDYyOiByZXR1cm4gIkFkdmFuY2VkIE1pY3JvIERldmljZXMgWDg2LTY0IjsKICAgIGNhc2UgMHhh MzkwOgogICAgY2FzZSAyMjogcmV0dXJuICJJQk0gUy8zOTAiOwogICAgY2FzZSAweGFkNDU6IHJl dHVybiAiU2FueW8gWHN0b3JteTE2IENQVSBjb3JlIjsKICAgIGNhc2UgOTI6CiAgICBjYXNlIDB4 ODQ3MjogcmV0dXJuICJPcGVuUklTQyI7CiAgICBjYXNlIDB4NWFhNTogcmV0dXJuICJPcGVuRExY IjsKICAgIGNhc2UgMHg4MjE3OgogICAgY2FzZSAxMDE6IHJldHVybiAiVWJpY29tIElQMnh4eCA4 LWJpdCBtaWNyb2NvbnRyb2xsZXJzIjsKICAgIGNhc2UgMHhGRUJBOiByZXR1cm4gIlZpdGVzc2Ug SVEyMDAwIjsKICAgIGRlZmF1bHQ6CiAgICAgIHNwcmludGYgKGJ1ZmYsICgiPHVua25vd24+OiAl eCIpLCBlX21hY2hpbmUpOwogICAgICByZXR1cm4gYnVmZjsKICAgIH0KfQoKc3RhdGljIHZvaWQK ZGVjb2RlX0FSTV9tYWNoaW5lX2ZsYWdzIChlX2ZsYWdzLCBidWYpCiAgICAgdW5zaWduZWQgZV9m bGFnczsKICAgICBjaGFyIGJ1ZltdOwp7CiAgdW5zaWduZWQgZWFiaTsKICBpbnQgdW5rbm93biA9 IDA7CgogIGVhYmkgPSAoKGVfZmxhZ3MpICYgMHhGRjAwMDAwMCk7CiAgZV9mbGFncyAmPSB+IDB4 RkYwMDAwMDA7CgoKICBpZiAoZV9mbGFncyAmIDB4MDEpCiAgICB7CiAgICAgIHN0cmNhdCAoYnVm LCAiLCByZWxvY2F0YWJsZSBleGVjdXRhYmxlIik7CiAgICAgIGVfZmxhZ3MgJj0gfiAweDAxOwog ICAgfQoKICBpZiAoZV9mbGFncyAmIDB4MDIpCiAgICB7CiAgICAgIHN0cmNhdCAoYnVmLCAiLCBo YXMgZW50cnkgcG9pbnQiKTsKICAgICAgZV9mbGFncyAmPSB+IDB4MDI7CiAgICB9CgoKICBzd2l0 Y2ggKGVhYmkpCiAgICB7CiAgICBkZWZhdWx0OgogICAgICBzdHJjYXQgKGJ1ZiwgIiwgPHVucmVj b2duaXplZCBFQUJJPiIpOwogICAgICBpZiAoZV9mbGFncykKICAgICAgICB1bmtub3duID0gMTsK ICAgICAgYnJlYWs7CgogICAgY2FzZSAweDAxMDAwMDAwOgogICAgICBzdHJjYXQgKGJ1ZiwgIiwg VmVyc2lvbjEgRUFCSSIpOwogICAgICB3aGlsZSAoZV9mbGFncykKICAgICAgICB7CiAgICAgICAg ICB1bnNpZ25lZCBmbGFnOwoKCiAgICAgICAgICBmbGFnID0gZV9mbGFncyAmIC0gZV9mbGFnczsK ICAgICAgICAgIGVfZmxhZ3MgJj0gfiBmbGFnOwoKICAgICAgICAgIHN3aXRjaCAoZmxhZykKICAg ICAgICAgICAgewogICAgICAgICAgICBjYXNlIDB4MDQ6CiAgICAgICAgICAgICAgc3RyY2F0IChi dWYsICIsIHNvcnRlZCBzeW1ib2wgdGFibGVzIik7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAg ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHVua25vd24gPSAxOwogICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBicmVhazsKCiAgICBjYXNlIDB4 MDIwMDAwMDA6CiAgICAgIHN0cmNhdCAoYnVmLCAiLCBWZXJzaW9uMiBFQUJJIik7CiAgICAgIHdo aWxlIChlX2ZsYWdzKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGZsYWc7CgoKICAgICAg ICAgIGZsYWcgPSBlX2ZsYWdzICYgLSBlX2ZsYWdzOwogICAgICAgICAgZV9mbGFncyAmPSB+IGZs YWc7CgogICAgICAgICAgc3dpdGNoIChmbGFnKQogICAgICAgICAgICB7CiAgICAgICAgICAgIGNh c2UgMHgwNDoKICAgICAgICAgICAgICBzdHJjYXQgKGJ1ZiwgIiwgc29ydGVkIHN5bWJvbCB0YWJs ZXMiKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgMHgwODoKICAgICAg ICAgICAgICBzdHJjYXQgKGJ1ZiwgIiwgZHluYW1pYyBzeW1ib2xzIHVzZSBzZWdtZW50IGluZGV4 Iik7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIDB4MTA6CiAgICAgICAg ICAgICAgc3RyY2F0IChidWYsICIsIG1hcHBpbmcgc3ltYm9scyBwcmVjZWRlIG90aGVycyIpOwog ICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICB1 bmtub3duID0gMTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0K ICAgICAgYnJlYWs7CgogICAgY2FzZSAweDAwMDAwMDAwOgogICAgICBzdHJjYXQgKGJ1ZiwgIiwg R05VIEVBQkkiKTsKICAgICAgd2hpbGUgKGVfZmxhZ3MpCiAgICAgICAgewogICAgICAgICAgdW5z aWduZWQgZmxhZzsKCgogICAgICAgICAgZmxhZyA9IGVfZmxhZ3MgJiAtIGVfZmxhZ3M7CiAgICAg ICAgICBlX2ZsYWdzICY9IH4gZmxhZzsKCiAgICAgICAgICBzd2l0Y2ggKGZsYWcpCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgY2FzZSAweDA0OgogICAgICAgICAgICAgIHN0cmNhdCAoYnVmLCAi LCBpbnRlcndvcmtpbmcgZW5hYmxlZCIpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAg ICAgY2FzZSAweDA4OgogICAgICAgICAgICAgIHN0cmNhdCAoYnVmLCAiLCB1c2VzIEFQQ1MvMjYi KTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgMHgxMDoKICAgICAgICAg ICAgICBzdHJjYXQgKGJ1ZiwgIiwgdXNlcyBBUENTL2Zsb2F0Iik7CiAgICAgICAgICAgICAgYnJl YWs7CgogICAgICAgICAgICBjYXNlIDB4MjA6CiAgICAgICAgICAgICAgc3RyY2F0IChidWYsICIs IHBvc2l0aW9uIGluZGVwZW5kZW50Iik7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAg ICBjYXNlIDB4NDA6CiAgICAgICAgICAgICAgc3RyY2F0IChidWYsICIsIDggYml0IHN0cnVjdHVy ZSBhbGlnbm1lbnQiKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgMHg4 MDoKICAgICAgICAgICAgICBzdHJjYXQgKGJ1ZiwgIiwgdXNlcyBuZXcgQUJJIik7CiAgICAgICAg ICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIDB4MTAwOgogICAgICAgICAgICAgIHN0cmNh dCAoYnVmLCAiLCB1c2VzIG9sZCBBQkkiKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAg ICAgIGNhc2UgMHgyMDA6CiAgICAgICAgICAgICAgc3RyY2F0IChidWYsICIsIHNvZnR3YXJlIEZQ Iik7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIDB4ODAwOgogICAgICAg ICAgICAgIHN0cmNhdCAoYnVmLCAiLCBNYXZlcmljayBGUCIpOwogICAgICAgICAgICAgIGJyZWFr OwoKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICB1bmtub3duID0gMTsKICAgICAg ICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgaWYgKHVua25v d24pCiAgICBzdHJjYXQgKGJ1ZiwiLCA8dW5rbm93bj4iKTsKfQoKc3RhdGljIGNoYXIgKgpnZXRf bWFjaGluZV9mbGFncyAoZV9mbGFncywgZV9tYWNoaW5lKQogICAgIHVuc2lnbmVkIGVfZmxhZ3M7 CiAgICAgdW5zaWduZWQgZV9tYWNoaW5lOwp7CiAgc3RhdGljIGNoYXIgYnVmWzEwMjRdOwoKICBi dWZbMF0gPSAnXDAnOwoKICBpZiAoZV9mbGFncykKICAgIHsKICAgICAgc3dpdGNoIChlX21hY2hp bmUpCiAgICAgICAgewogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBicmVhazsKCiAgICAgICAg Y2FzZSA0MDoKICAgICAgICAgIGRlY29kZV9BUk1fbWFjaGluZV9mbGFncyAoZV9mbGFncywgYnVm KTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDQ6CiAgICAgICAgICBpZiAoZV9mbGFn cyAmIDB4MDA4MTAwMDApCiAgICAgICAgICAgIHN0cmNhdCAoYnVmLCAiLCBjcHUzMiIpOwogICAg ICAgICAgaWYgKGVfZmxhZ3MgJiAweDAxMDAwMDAwKQogICAgICAgICAgICBzdHJjYXQgKGJ1Ziwg IiwgbTY4MDAwIik7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAyMDoKICAgICAgICAg IGlmIChlX2ZsYWdzICYgMHg4MDAwMDAwMCkKICAgICAgICAgICAgc3RyY2F0IChidWYsICIsIGVt YiIpOwoKICAgICAgICAgIGlmIChlX2ZsYWdzICYgMHgwMDAxMDAwMCkKICAgICAgICAgICAgc3Ry Y2F0IChidWYsICIsIHJlbG9jYXRhYmxlIik7CgogICAgICAgICAgaWYgKGVfZmxhZ3MgJiAweDAw MDA4MDAwKQogICAgICAgICAgICBzdHJjYXQgKGJ1ZiwgIiwgcmVsb2NhdGFibGUtbGliIik7CiAg ICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSA4NzoKICAgICAgICBjYXNlIDB4OTA4MDoKICAg ICAgICAgIHN3aXRjaCAoZV9mbGFncyAmIDB4ZjAwMDAwMDApCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgY2FzZSAweDEwMDAwMDAwOgogICAgICAgICAgICAgIHN0cmNhdCAoYnVmLCAiLCB2ODUw ZSIpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDB4MDAwMDAwMDA6CiAg ICAgICAgICAgICAgc3RyY2F0IChidWYsICIsIHY4NTAiKTsKICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBzdHJjYXQgKGJ1ZiwgIiwgdW5rbm93 biB2ODUwIGFyY2hpdGVjdHVyZSB2YXJpYW50Iik7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDg4OgogICAgICAgIGNhc2Ug MHg5MDQxOgogICAgICAgICAgaWYgKChlX2ZsYWdzICYgMHgzMDAwMDAwMCkgPT0gMHgwMDAwMDAw MCkKICAgICAgICAgICAgc3RyY2F0IChidWYsICIsIG0zMnIiKTsKCiAgICAgICAgICBicmVhazsK CiAgICAgICAgY2FzZSA4OgogICAgICAgIGNhc2UgMTA6CiAgICAgICAgICBpZiAoZV9mbGFncyAm IDB4MDAwMDAwMDEpCiAgICAgICAgICAgIHN0cmNhdCAoYnVmLCAiLCBub3Jlb3JkZXIiKTsKCiAg ICAgICAgICBpZiAoZV9mbGFncyAmIDB4MDAwMDAwMDIpCiAgICAgICAgICAgIHN0cmNhdCAoYnVm LCAiLCBwaWMiKTsKCiAgICAgICAgICBpZiAoZV9mbGFncyAmIDB4MDAwMDAwMDQpCiAgICAgICAg ICAgIHN0cmNhdCAoYnVmLCAiLCBjcGljIik7CgogICAgICAgICAgaWYgKGVfZmxhZ3MgJiAweDAw MDAwMDEwKQogICAgICAgICAgICBzdHJjYXQgKGJ1ZiwgIiwgdWdlbl9yZXNlcnZlZCIpOwoKICAg ICAgICAgIGlmIChlX2ZsYWdzICYgMHgwMDAwMDAyMCkKICAgICAgICAgICAgc3RyY2F0IChidWYs ICIsIGFiaTIiKTsKCiAgICAgICAgICBpZiAoZV9mbGFncyAmIDB4MDAwMDAwODApCiAgICAgICAg ICAgIHN0cmNhdCAoYnVmLCAiLCBvZGsgZmlyc3QiKTsKCiAgICAgICAgICBpZiAoZV9mbGFncyAm IDB4MDAwMDAxMDApCiAgICAgICAgICAgIHN0cmNhdCAoYnVmLCAiLCAzMmJpdG1vZGUiKTsKCiAg ICAgICAgICBzd2l0Y2ggKChlX2ZsYWdzICYgMHgwMEZGMDAwMCkpCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgY2FzZSAweDAwODEwMDAwOiBzdHJjYXQgKGJ1ZiwgIiwgMzkwMCIpOyBicmVhazsK ICAgICAgICAgICAgY2FzZSAweDAwODIwMDAwOiBzdHJjYXQgKGJ1ZiwgIiwgNDAxMCIpOyBicmVh azsKICAgICAgICAgICAgY2FzZSAweDAwODMwMDAwOiBzdHJjYXQgKGJ1ZiwgIiwgNDEwMCIpOyBi cmVhazsKICAgICAgICAgICAgY2FzZSAweDAwODgwMDAwOiBzdHJjYXQgKGJ1ZiwgIiwgNDExMSIp OyBicmVhazsKICAgICAgICAgICAgY2FzZSAweDAwODcwMDAwOiBzdHJjYXQgKGJ1ZiwgIiwgNDEy MCIpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAweDAwODUwMDAwOiBzdHJjYXQgKGJ1ZiwgIiwg NDY1MCIpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAweDAwOTEwMDAwOiBzdHJjYXQgKGJ1Ziwg IiwgNTQwMCIpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAweDAwOTgwMDAwOiBzdHJjYXQgKGJ1 ZiwgIiwgNTUwMCIpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAweDAwOGEwMDAwOiBzdHJjYXQg KGJ1ZiwgIiwgc2IxIik7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDA6CgoKCiAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6IHN0cmNhdCAoYnVmLCAiLCB1bmtub3duIENQ VSIpOyBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgIHN3aXRjaCAoKGVfZmxhZ3MgJiAw eDAwMDBGMDAwKSkKICAgICAgICAgICAgewogICAgICAgICAgICBjYXNlIDB4MDAwMDEwMDA6IHN0 cmNhdCAoYnVmLCAiLCBvMzIiKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMHgwMDAwMjAwMDog c3RyY2F0IChidWYsICIsIG82NCIpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAweDAwMDAzMDAw OiBzdHJjYXQgKGJ1ZiwgIiwgZWFiaTMyIik7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDB4MDAw MDQwMDA6IHN0cmNhdCAoYnVmLCAiLCBlYWJpNjQiKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2Ug MDoKCgoKCiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6IHN0cmNhdCAo YnVmLCAiLCB1bmtub3duIEFCSSIpOyBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlm IChlX2ZsYWdzICYgMHgwODAwMDAwMCkKICAgICAgICAgICAgc3RyY2F0IChidWYsICIsIG1kbXgi KTsKCiAgICAgICAgICBpZiAoZV9mbGFncyAmIDB4MDQwMDAwMDApCiAgICAgICAgICAgIHN0cmNh dCAoYnVmLCAiLCBtaXBzMTYiKTsKCiAgICAgICAgICBzd2l0Y2ggKChlX2ZsYWdzICYgMHhmMDAw MDAwMCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgY2FzZSAweDAwMDAwMDAwOiBzdHJjYXQg KGJ1ZiwgIiwgbWlwczEiKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMHgxMDAwMDAwMDogc3Ry Y2F0IChidWYsICIsIG1pcHMyIik7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDB4MjAwMDAwMDA6 IHN0cmNhdCAoYnVmLCAiLCBtaXBzMyIpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAweDMwMDAw MDAwOiBzdHJjYXQgKGJ1ZiwgIiwgbWlwczQiKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMHg0 MDAwMDAwMDogc3RyY2F0IChidWYsICIsIG1pcHM1Iik7IGJyZWFrOwogICAgICAgICAgICBjYXNl IDB4NTAwMDAwMDA6IHN0cmNhdCAoYnVmLCAiLCBtaXBzMzIiKTsgYnJlYWs7CiAgICAgICAgICAg IGNhc2UgMHg3MDAwMDAwMDogc3RyY2F0IChidWYsICIsIG1pcHMzMnIyIik7IGJyZWFrOwogICAg ICAgICAgICBjYXNlIDB4NjAwMDAwMDA6IHN0cmNhdCAoYnVmLCAiLCBtaXBzNjQiKTsgYnJlYWs7 CiAgICAgICAgICAgIGRlZmF1bHQ6IHN0cmNhdCAoYnVmLCAiLCB1bmtub3duIElTQSIpOyBicmVh azsKICAgICAgICAgICAgfQoKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDQzOgogICAg ICAgICAgaWYgKGVfZmxhZ3MgJiAweDAwMDEwMCkKICAgICAgICAgICAgc3RyY2F0IChidWYsICIs IHY4KyIpOwoKICAgICAgICAgIGlmIChlX2ZsYWdzICYgMHgwMDAyMDApCiAgICAgICAgICAgIHN0 cmNhdCAoYnVmLCAiLCB1bHRyYXNwYXJjSSIpOwoKICAgICAgICAgIGlmIChlX2ZsYWdzICYgMHgw MDA4MDApCiAgICAgICAgICAgIHN0cmNhdCAoYnVmLCAiLCB1bHRyYXNwYXJjSUlJIik7CgogICAg ICAgICAgaWYgKGVfZmxhZ3MgJiAweDAwMDQwMCkKICAgICAgICAgICAgc3RyY2F0IChidWYsICIs IGhhbHIxIik7CgogICAgICAgICAgaWYgKGVfZmxhZ3MgJiAweDgwMDAwMCkKICAgICAgICAgICAg c3RyY2F0IChidWYsICIsIGxlZGF0YSIpOwoKICAgICAgICAgIGlmICgoZV9mbGFncyAmIDB4Mykg PT0gMHgwKQogICAgICAgICAgICBzdHJjYXQgKGJ1ZiwgIiwgdHNvIik7CgogICAgICAgICAgaWYg KChlX2ZsYWdzICYgMHgzKSA9PSAweDEpCiAgICAgICAgICAgIHN0cmNhdCAoYnVmLCAiLCBwc28i KTsKCiAgICAgICAgICBpZiAoKGVfZmxhZ3MgJiAweDMpID09IDB4MikKICAgICAgICAgICAgc3Ry Y2F0IChidWYsICIsIHJtbyIpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMTU6CiAg ICAgICAgICBzd2l0Y2ggKGVfZmxhZ3MgJiAweDAwMDBmZmZmKQogICAgICAgICAgICB7CiAgICAg ICAgICAgIGNhc2UgMHgwMjBiOgogICAgICAgICAgICAgIHN0cmNweSAoYnVmLCAiLCBQQS1SSVND IDEuMCIpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDB4MDIxMDoKICAg ICAgICAgICAgICBzdHJjcHkgKGJ1ZiwgIiwgUEEtUklTQyAxLjEiKTsKICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgY2FzZSAweDAyMTQ6CiAgICAgICAgICAgICAgc3RyY3B5IChidWYs ICIsIFBBLVJJU0MgMi4wIik7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1 bHQ6CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChlX2Zs YWdzICYgMHgwMDAxMDAwMCkKICAgICAgICAgICAgc3RyY2F0IChidWYsICIsIHRyYXBuaWwiKTsK ICAgICAgICAgIGlmIChlX2ZsYWdzICYgMHgwMDAyMDAwMCkKICAgICAgICAgICAgc3RyY2F0IChi dWYsICIsIGV4dCIpOwogICAgICAgICAgaWYgKGVfZmxhZ3MgJiAweDAwMDQwMDAwKQogICAgICAg ICAgICBzdHJjYXQgKGJ1ZiwgIiwgbHNiIik7CiAgICAgICAgICBpZiAoZV9mbGFncyAmIDB4MDAw ODAwMDApCiAgICAgICAgICAgIHN0cmNhdCAoYnVmLCAiLCB3aWRlIik7CiAgICAgICAgICBpZiAo ZV9mbGFncyAmIDB4MDAxMDAwMDApCiAgICAgICAgICAgIHN0cmNhdCAoYnVmLCAiLCBubyBrYWJw Iik7CiAgICAgICAgICBpZiAoZV9mbGFncyAmIDB4MDA0MDAwMDApCiAgICAgICAgICAgIHN0cmNh dCAoYnVmLCAiLCBsYXp5c3dhcCIpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgOTE6 CiAgICAgICAgY2FzZSA5OToKICAgICAgICAgIGlmICgoZV9mbGFncyAmIDB4MDAwMDAwMTApID09 IDB4MDAwMDAwMTApCiAgICAgICAgICAgIHN0cmNhdCAoYnVmLCAiLCBuZXcgY2FsbGluZyBjb252 ZW50aW9uIik7CgogICAgICAgICAgaWYgKChlX2ZsYWdzICYgMHgwMDAwMDAyMCkgPT0gMHgwMDAw MDAyMCkKICAgICAgICAgICAgc3RyY2F0IChidWYsICIsIGdudSBjYWxsaW5nIGNvbnZlbnRpb24i KTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDUwOgogICAgICAgICAgaWYgKChlX2Zs YWdzICYgKDEgPDwgNCkpKQogICAgICAgICAgICBzdHJjYXQgKGJ1ZiwgIiwgNjQtYml0Iik7CiAg ICAgICAgICBlbHNlCiAgICAgICAgICAgIHN0cmNhdCAoYnVmLCAiLCAzMi1iaXQiKTsKICAgICAg ICAgIGlmICgoZV9mbGFncyAmICgxIDw8IDUpKSkKICAgICAgICAgICAgc3RyY2F0IChidWYsICIs IHJlZHVjZWQgZnAgbW9kZWwiKTsKICAgICAgICAgIGlmICgoZV9mbGFncyAmICgxIDw8IDcpKSkK ICAgICAgICAgICAgc3RyY2F0IChidWYsICIsIG5vIGZ1bmN0aW9uIGRlc2NyaXB0b3JzLCBjb25z dGFudCBncCIpOwogICAgICAgICAgZWxzZSBpZiAoKGVfZmxhZ3MgJiAoMSA8PCA2KSkpCiAgICAg ICAgICAgIHN0cmNhdCAoYnVmLCAiLCBjb25zdGFudCBncCIpOwogICAgICAgICAgaWYgKChlX2Zs YWdzICYgKDEgPDwgOCkpKQogICAgICAgICAgICBzdHJjYXQgKGJ1ZiwgIiwgYWJzb2x1dGUiKTsK ICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDc1OgogICAgICAgICAgaWYgKChlX2ZsYWdz ICYgMHgwMDAxKSkKICAgICAgICAgICAgc3RyY2F0IChidWYsICIsIG5vbi1QSUMiKTsKICAgICAg ICAgIGlmICgoZV9mbGFncyAmIDB4MDEwMCkpCiAgICAgICAgICAgIHN0cmNhdCAoYnVmLCAiLCBE LUZsb2F0Iik7CiAgICAgICAgICBpZiAoKGVfZmxhZ3MgJiAweDAyMDApKQogICAgICAgICAgICBz dHJjYXQgKGJ1ZiwgIiwgRy1GbG9hdCIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAg fQoKICByZXR1cm4gYnVmOwp9CgpzdGF0aWMgY29uc3QgY2hhciAqCmdldF9taXBzX3NlZ21lbnRf dHlwZSAodHlwZSkKICAgICB1bnNpZ25lZCBsb25nIHR5cGU7CnsKICBzd2l0Y2ggKHR5cGUpCiAg ICB7CiAgICBjYXNlIDB4NzAwMDAwMDA6CiAgICAgIHJldHVybiAiUkVHSU5GTyI7CiAgICBjYXNl IDB4NzAwMDAwMDE6CiAgICAgIHJldHVybiAiUlRQUk9DIjsKICAgIGNhc2UgMHg3MDAwMDAwMjoK ICAgICAgcmV0dXJuICJPUFRJT05TIjsKICAgIGRlZmF1bHQ6CiAgICAgIGJyZWFrOwogICAgfQoK ICByZXR1cm4gKCh2b2lkICopMCk7Cn0KCnN0YXRpYyBjb25zdCBjaGFyICoKZ2V0X3BhcmlzY19z ZWdtZW50X3R5cGUgKHR5cGUpCiAgICAgdW5zaWduZWQgbG9uZyB0eXBlOwp7CiAgc3dpdGNoICh0 eXBlKQogICAgewogICAgY2FzZSAoMHg2MDAwMDAwMCArIDB4MCk6IHJldHVybiAiSFBfVExTIjsK ICAgIGNhc2UgKDB4NjAwMDAwMDAgKyAweDEpOiByZXR1cm4gIkhQX0NPUkVfTk9ORSI7CiAgICBj YXNlICgweDYwMDAwMDAwICsgMHgyKTogcmV0dXJuICJIUF9DT1JFX1ZFUlNJT04iOwogICAgY2Fz ZSAoMHg2MDAwMDAwMCArIDB4Myk6IHJldHVybiAiSFBfQ09SRV9LRVJORUwiOwogICAgY2FzZSAo MHg2MDAwMDAwMCArIDB4NCk6IHJldHVybiAiSFBfQ09SRV9DT01NIjsKICAgIGNhc2UgKDB4NjAw MDAwMDAgKyAweDUpOiByZXR1cm4gIkhQX0NPUkVfUFJPQyI7CiAgICBjYXNlICgweDYwMDAwMDAw ICsgMHg2KTogcmV0dXJuICJIUF9DT1JFX0xPQURBQkxFIjsKICAgIGNhc2UgKDB4NjAwMDAwMDAg KyAweDcpOiByZXR1cm4gIkhQX0NPUkVfU1RBQ0siOwogICAgY2FzZSAoMHg2MDAwMDAwMCArIDB4 OCk6IHJldHVybiAiSFBfQ09SRV9TSE0iOwogICAgY2FzZSAoMHg2MDAwMDAwMCArIDB4OSk6IHJl dHVybiAiSFBfQ09SRV9NTUYiOwogICAgY2FzZSAoMHg2MDAwMDAwMCArIDB4MTApOiByZXR1cm4g IkhQX1BBUkFMTEVMIjsKICAgIGNhc2UgKDB4NjAwMDAwMDAgKyAweDExKTogcmV0dXJuICJIUF9G QVNUQklORCI7CiAgICBjYXNlIDB4NzAwMDAwMDA6IHJldHVybiAiUEFSSVNDX0FSQ0hFWFQiOwog ICAgY2FzZSAweDcwMDAwMDAxOiByZXR1cm4gIlBBUklTQ19VTldJTkQiOwogICAgZGVmYXVsdDoK ICAgICAgYnJlYWs7CiAgICB9CgogIHJldHVybiAoKHZvaWQgKikwKTsKfQoKc3RhdGljIGNvbnN0 IGNoYXIgKgpnZXRfaWE2NF9zZWdtZW50X3R5cGUgKHR5cGUpCiAgICAgdW5zaWduZWQgbG9uZyB0 eXBlOwp7CiAgc3dpdGNoICh0eXBlKQogICAgewogICAgY2FzZSAoMHg3MDAwMDAwMCArIDApOiBy ZXR1cm4gIklBXzY0X0FSQ0hFWFQiOwogICAgY2FzZSAoMHg3MDAwMDAwMCArIDEpOiByZXR1cm4g IklBXzY0X1VOV0lORCI7CiAgICBjYXNlICgweDYwMDAwMDAwICsgMHgwKTogcmV0dXJuICJIUF9U TFMiOwogICAgY2FzZSAoMHg2MDAwMDAwMCArIDB4MTIpOiByZXR1cm4gIkhQX09QVF9BTk5PVCI7 CiAgICBjYXNlICgweDYwMDAwMDAwICsgMHgxMyk6IHJldHVybiAiSFBfSFNMX0FOTk9UIjsKICAg IGNhc2UgKDB4NjAwMDAwMDAgKyAweDE0KTogcmV0dXJuICJIUF9TVEFDSyI7CiAgICBkZWZhdWx0 OgogICAgICBicmVhazsKICAgIH0KCiAgcmV0dXJuICgodm9pZCAqKTApOwp9CgpzdGF0aWMgY29u c3QgY2hhciAqCmdldF9zZWdtZW50X3R5cGUgKHBfdHlwZSkKICAgICB1bnNpZ25lZCBsb25nIHBf dHlwZTsKewogIHN0YXRpYyBjaGFyIGJ1ZmZbMzJdOwoKICBzd2l0Y2ggKHBfdHlwZSkKICAgIHsK ICAgIGNhc2UgMDogcmV0dXJuICJOVUxMIjsKICAgIGNhc2UgMTogcmV0dXJuICJMT0FEIjsKICAg IGNhc2UgMjogcmV0dXJuICJEWU5BTUlDIjsKICAgIGNhc2UgMzogcmV0dXJuICJJTlRFUlAiOwog ICAgY2FzZSA0OiByZXR1cm4gIk5PVEUiOwogICAgY2FzZSA1OiByZXR1cm4gIlNITElCIjsKICAg IGNhc2UgNjogcmV0dXJuICJQSERSIjsKICAgIGNhc2UgNzogcmV0dXJuICJUTFMiOwoKICAgIGNh c2UgKDB4NjAwMDAwMDAgKyAweDQ3NGU1NTApOgogICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gIkdOVV9FSF9GUkFNRSI7CgogICAgZGVmYXVsdDoKICAgICAgaWYgKChwX3R5cGUgPj0gMHg3 MDAwMDAwMCkgJiYgKHBfdHlwZSA8PSAweDdGRkZGRkZGKSkKICAgICAgICB7CiAgICAgICAgICBj b25zdCBjaGFyICpyZXN1bHQ7CgogICAgICAgICAgc3dpdGNoIChlbGZfaGVhZGVyLmVfbWFjaGlu ZSkKICAgICAgICAgICAgewogICAgICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgIGNhc2UgMTA6 CiAgICAgICAgICAgICAgcmVzdWx0ID0gZ2V0X21pcHNfc2VnbWVudF90eXBlIChwX3R5cGUpOwog ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDE1OgogICAgICAgICAgICAgIHJl c3VsdCA9IGdldF9wYXJpc2Nfc2VnbWVudF90eXBlIChwX3R5cGUpOwogICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICBjYXNlIDUwOgogICAgICAgICAgICAgIHJlc3VsdCA9IGdldF9pYTY0 X3NlZ21lbnRfdHlwZSAocF90eXBlKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ZGVmYXVsdDoKICAgICAgICAgICAgICByZXN1bHQgPSAoKHZvaWQgKikwKTsKICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChyZXN1bHQgIT0gKCh2b2lkICop MCkpCiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CgogICAgICAgICAgc3ByaW50ZiAoYnVmZiwg IkxPUFJPQyslbHgiLCBwX3R5cGUgLSAweDcwMDAwMDAwKTsKICAgICAgICB9CiAgICAgIGVsc2Ug aWYgKChwX3R5cGUgPj0gMHg2MDAwMDAwMCkgJiYgKHBfdHlwZSA8PSAweDZmZmZmZmZmKSkKICAg ICAgICB7CiAgICAgICAgICBjb25zdCBjaGFyICpyZXN1bHQ7CgogICAgICAgICAgc3dpdGNoIChl bGZfaGVhZGVyLmVfbWFjaGluZSkKICAgICAgICAgICAgewogICAgICAgICAgICBjYXNlIDE1Ogog ICAgICAgICAgICAgIHJlc3VsdCA9IGdldF9wYXJpc2Nfc2VnbWVudF90eXBlIChwX3R5cGUpOwog ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDUwOgogICAgICAgICAgICAgIHJl c3VsdCA9IGdldF9pYTY0X3NlZ21lbnRfdHlwZSAocF90eXBlKTsKICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICByZXN1bHQgPSAoKHZvaWQgKikw KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChyZXN1 bHQgIT0gKCh2b2lkICopMCkpCiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CgogICAgICAgICAg c3ByaW50ZiAoYnVmZiwgIkxPT1MrJWx4IiwgcF90eXBlIC0gMHg2MDAwMDAwMCk7CiAgICAgICAg fQogICAgICBlbHNlCiAgICAgICAgc3ByaW50ZiAoYnVmZiwgKCI8dW5rbm93bj46ICVseCIpLCBw X3R5cGUpOwoKICAgICAgcmV0dXJuIGJ1ZmY7CiAgICB9Cn0KCnN0YXRpYyBjb25zdCBjaGFyICoK Z2V0X21pcHNfc2VjdGlvbl90eXBlX25hbWUgKHNoX3R5cGUpCiAgICAgdW5zaWduZWQgaW50IHNo X3R5cGU7CnsKICBzd2l0Y2ggKHNoX3R5cGUpCiAgICB7CiAgICBjYXNlIDB4NzAwMDAwMDA6IHJl dHVybiAiTUlQU19MSUJMSVNUIjsKICAgIGNhc2UgMHg3MDAwMDAwMTogcmV0dXJuICJNSVBTX01T WU0iOwogICAgY2FzZSAweDcwMDAwMDAyOiByZXR1cm4gIk1JUFNfQ09ORkxJQ1QiOwogICAgY2Fz ZSAweDcwMDAwMDAzOiByZXR1cm4gIk1JUFNfR1BUQUIiOwogICAgY2FzZSAweDcwMDAwMDA0OiBy ZXR1cm4gIk1JUFNfVUNPREUiOwogICAgY2FzZSAweDcwMDAwMDA1OiByZXR1cm4gIk1JUFNfREVC VUciOwogICAgY2FzZSAweDcwMDAwMDA2OiByZXR1cm4gIk1JUFNfUkVHSU5GTyI7CiAgICBjYXNl IDB4NzAwMDAwMDc6IHJldHVybiAiTUlQU19QQUNLQUdFIjsKICAgIGNhc2UgMHg3MDAwMDAwODog cmV0dXJuICJNSVBTX1BBQ0tTWU0iOwogICAgY2FzZSAweDcwMDAwMDA5OiByZXR1cm4gIk1JUFNf UkVMRCI7CiAgICBjYXNlIDB4NzAwMDAwMGI6IHJldHVybiAiTUlQU19JRkFDRSI7CiAgICBjYXNl IDB4NzAwMDAwMGM6IHJldHVybiAiTUlQU19DT05URU5UIjsKICAgIGNhc2UgMHg3MDAwMDAwZDog cmV0dXJuICJNSVBTX09QVElPTlMiOwogICAgY2FzZSAweDcwMDAwMDEwOiByZXR1cm4gIk1JUFNf U0hEUiI7CiAgICBjYXNlIDB4NzAwMDAwMTE6IHJldHVybiAiTUlQU19GREVTQyI7CiAgICBjYXNl IDB4NzAwMDAwMTI6IHJldHVybiAiTUlQU19FWFRTWU0iOwogICAgY2FzZSAweDcwMDAwMDEzOiBy ZXR1cm4gIk1JUFNfREVOU0UiOwogICAgY2FzZSAweDcwMDAwMDE0OiByZXR1cm4gIk1JUFNfUERF U0MiOwogICAgY2FzZSAweDcwMDAwMDE1OiByZXR1cm4gIk1JUFNfTE9DU1lNIjsKICAgIGNhc2Ug MHg3MDAwMDAxNjogcmV0dXJuICJNSVBTX0FVWFNZTSI7CiAgICBjYXNlIDB4NzAwMDAwMTc6IHJl dHVybiAiTUlQU19PUFRTWU0iOwogICAgY2FzZSAweDcwMDAwMDE4OiByZXR1cm4gIk1JUFNfTE9D U1RSIjsKICAgIGNhc2UgMHg3MDAwMDAxOTogcmV0dXJuICJNSVBTX0xJTkUiOwogICAgY2FzZSAw eDcwMDAwMDFhOiByZXR1cm4gIk1JUFNfUkZERVNDIjsKICAgIGNhc2UgMHg3MDAwMDAxYjogcmV0 dXJuICJNSVBTX0RFTFRBU1lNIjsKICAgIGNhc2UgMHg3MDAwMDAxYzogcmV0dXJuICJNSVBTX0RF TFRBSU5TVCI7CiAgICBjYXNlIDB4NzAwMDAwMWQ6IHJldHVybiAiTUlQU19ERUxUQUNMQVNTIjsK ICAgIGNhc2UgMHg3MDAwMDAxZTogcmV0dXJuICJNSVBTX0RXQVJGIjsKICAgIGNhc2UgMHg3MDAw MDAxZjogcmV0dXJuICJNSVBTX0RFTFRBREVDTCI7CiAgICBjYXNlIDB4NzAwMDAwMjA6IHJldHVy biAiTUlQU19TWU1CT0xfTElCIjsKICAgIGNhc2UgMHg3MDAwMDAyMTogcmV0dXJuICJNSVBTX0VW RU5UUyI7CiAgICBjYXNlIDB4NzAwMDAwMjI6IHJldHVybiAiTUlQU19UUkFOU0xBVEUiOwogICAg Y2FzZSAweDcwMDAwMDIzOiByZXR1cm4gIk1JUFNfUElYSUUiOwogICAgY2FzZSAweDcwMDAwMDI0 OiByZXR1cm4gIk1JUFNfWExBVEUiOwogICAgY2FzZSAweDcwMDAwMDI1OiByZXR1cm4gIk1JUFNf WExBVEVfREVCVUciOwogICAgY2FzZSAweDcwMDAwMDI2OiByZXR1cm4gIk1JUFNfV0hJUkwiOwog ICAgY2FzZSAweDcwMDAwMDI3OiByZXR1cm4gIk1JUFNfRUhfUkVHSU9OIjsKICAgIGNhc2UgMHg3 MDAwMDAyODogcmV0dXJuICJNSVBTX1hMQVRFX09MRCI7CiAgICBjYXNlIDB4NzAwMDAwMjk6IHJl dHVybiAiTUlQU19QRFJfRVhDRVBUSU9OIjsKICAgIGRlZmF1bHQ6CiAgICAgIGJyZWFrOwogICAg fQogIHJldHVybiAoKHZvaWQgKikwKTsKfQoKc3RhdGljIGNvbnN0IGNoYXIgKgpnZXRfcGFyaXNj X3NlY3Rpb25fdHlwZV9uYW1lIChzaF90eXBlKQogICAgIHVuc2lnbmVkIGludCBzaF90eXBlOwp7 CiAgc3dpdGNoIChzaF90eXBlKQogICAgewogICAgY2FzZSAweDcwMDAwMDAwOiByZXR1cm4gIlBB UklTQ19FWFQiOwogICAgY2FzZSAweDcwMDAwMDAxOiByZXR1cm4gIlBBUklTQ19VTldJTkQiOwog ICAgY2FzZSAweDcwMDAwMDAyOiByZXR1cm4gIlBBUklTQ19ET0MiOwogICAgZGVmYXVsdDoKICAg ICAgYnJlYWs7CiAgICB9CiAgcmV0dXJuICgodm9pZCAqKTApOwp9CgpzdGF0aWMgY29uc3QgY2hh ciAqCmdldF9pYTY0X3NlY3Rpb25fdHlwZV9uYW1lIChzaF90eXBlKQogICAgIHVuc2lnbmVkIGlu dCBzaF90eXBlOwp7CgogIGlmICgoc2hfdHlwZSAmIDB4RkYwMDAwMDApID09ICgweDcwMDAwMDAw ICsgMHg4MDAwMDAwKSkKICAgIHJldHVybiBnZXRfb3NhYmlfbmFtZSAoKHNoX3R5cGUgJiAweDAw RkYwMDAwKSA+PiAxNik7CgogIHN3aXRjaCAoc2hfdHlwZSkKICAgIHsKICAgIGNhc2UgKDB4NzAw MDAwMDAgKyAwKTogcmV0dXJuICJJQV82NF9FWFQiOwogICAgY2FzZSAoMHg3MDAwMDAwMCArIDEp OiByZXR1cm4gIklBXzY0X1VOV0lORCI7CiAgICBjYXNlICgweDcwMDAwMDAwICsgMHg5MDAwMDAw KTogcmV0dXJuICJJQV82NF9QUklPUklUWV9JTklUIjsKICAgIGRlZmF1bHQ6CiAgICAgIGJyZWFr OwogICAgfQogIHJldHVybiAoKHZvaWQgKikwKTsKfQoKc3RhdGljIGNvbnN0IGNoYXIgKgpnZXRf c2VjdGlvbl90eXBlX25hbWUgKHNoX3R5cGUpCiAgICAgdW5zaWduZWQgaW50IHNoX3R5cGU7CnsK ICBzdGF0aWMgY2hhciBidWZmWzMyXTsKCiAgc3dpdGNoIChzaF90eXBlKQogICAgewogICAgY2Fz ZSAwOiByZXR1cm4gIk5VTEwiOwogICAgY2FzZSAxOiByZXR1cm4gIlBST0dCSVRTIjsKICAgIGNh c2UgMjogcmV0dXJuICJTWU1UQUIiOwogICAgY2FzZSAzOiByZXR1cm4gIlNUUlRBQiI7CiAgICBj YXNlIDQ6IHJldHVybiAiUkVMQSI7CiAgICBjYXNlIDU6IHJldHVybiAiSEFTSCI7CiAgICBjYXNl IDY6IHJldHVybiAiRFlOQU1JQyI7CiAgICBjYXNlIDc6IHJldHVybiAiTk9URSI7CiAgICBjYXNl IDg6IHJldHVybiAiTk9CSVRTIjsKICAgIGNhc2UgOTogcmV0dXJuICJSRUwiOwogICAgY2FzZSAx MDogcmV0dXJuICJTSExJQiI7CiAgICBjYXNlIDExOiByZXR1cm4gIkRZTlNZTSI7CiAgICBjYXNl IDE0OiByZXR1cm4gIklOSVRfQVJSQVkiOwogICAgY2FzZSAxNTogcmV0dXJuICJGSU5JX0FSUkFZ IjsKICAgIGNhc2UgMTY6IHJldHVybiAiUFJFSU5JVF9BUlJBWSI7CiAgICBjYXNlIDE3OiByZXR1 cm4gIkdST1VQIjsKICAgIGNhc2UgMTg6IHJldHVybiAiU1lNVEFCIFNFQ1RJT04gSU5ESUNJRVMi OwogICAgY2FzZSAweDZmZmZmZmZkOiByZXR1cm4gIlZFUkRFRiI7CiAgICBjYXNlIDB4NmZmZmZm ZmU6IHJldHVybiAiVkVSTkVFRCI7CiAgICBjYXNlIDB4NmZmZmZmZmY6IHJldHVybiAiVkVSU1lN IjsKICAgIGNhc2UgMHg2ZmZmZmZmMDogcmV0dXJuICJWRVJTWU0iOwogICAgY2FzZSAweDZmZmZm ZmZjOiByZXR1cm4gIlZFUkRFRiI7CiAgICBjYXNlIDB4N2ZmZmZmZmQ6IHJldHVybiAiQVVYSUxJ QVJZIjsKICAgIGNhc2UgMHg3ZmZmZmZmZjogcmV0dXJuICJGSUxURVIiOwogICAgY2FzZSAweDZm ZmZmZmY3OiByZXR1cm4gIkdOVV9MSUJMSVNUIjsKCiAgICBkZWZhdWx0OgogICAgICBpZiAoKHNo X3R5cGUgPj0gMHg3MDAwMDAwMCkgJiYgKHNoX3R5cGUgPD0gMHg3RkZGRkZGRikpCiAgICAgICAg ewogICAgICAgICAgY29uc3QgY2hhciAqcmVzdWx0OwoKICAgICAgICAgIHN3aXRjaCAoZWxmX2hl YWRlci5lX21hY2hpbmUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgY2FzZSA4OgogICAgICAg ICAgICBjYXNlIDEwOgogICAgICAgICAgICAgIHJlc3VsdCA9IGdldF9taXBzX3NlY3Rpb25fdHlw ZV9uYW1lIChzaF90eXBlKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAx NToKICAgICAgICAgICAgICByZXN1bHQgPSBnZXRfcGFyaXNjX3NlY3Rpb25fdHlwZV9uYW1lIChz aF90eXBlKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSA1MDoKICAgICAg ICAgICAgICByZXN1bHQgPSBnZXRfaWE2NF9zZWN0aW9uX3R5cGVfbmFtZSAoc2hfdHlwZSk7CiAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgcmVz dWx0ID0gKCh2b2lkICopMCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAg ICAgICAgICBpZiAocmVzdWx0ICE9ICgodm9pZCAqKTApKQogICAgICAgICAgICByZXR1cm4gcmVz dWx0OwoKICAgICAgICAgIHNwcmludGYgKGJ1ZmYsICJMT1BST0MrJXgiLCBzaF90eXBlIC0gMHg3 MDAwMDAwMCk7CiAgICAgICAgfQogICAgICBlbHNlIGlmICgoc2hfdHlwZSA+PSAweDYwMDAwMDAw KSAmJiAoc2hfdHlwZSA8PSAweDZmZmZmZmZmKSkKICAgICAgICBzcHJpbnRmIChidWZmLCAiTE9P UysleCIsIHNoX3R5cGUgLSAweDYwMDAwMDAwKTsKICAgICAgZWxzZSBpZiAoKHNoX3R5cGUgPj0g MHg4MDAwMDAwMCkgJiYgKHNoX3R5cGUgPD0gMHhGRkZGRkZGRikpCiAgICAgICAgc3ByaW50ZiAo YnVmZiwgIkxPVVNFUisleCIsIHNoX3R5cGUgLSAweDgwMDAwMDAwKTsKICAgICAgZWxzZQogICAg ICAgIHNwcmludGYgKGJ1ZmYsICgiPHVua25vd24+OiAleCIpLCBzaF90eXBlKTsKCiAgICAgIHJl dHVybiBidWZmOwogICAgfQp9CgoKCnN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0KewogIHsiYWxs IiwgMCwgMCwgJ2EnfSwKICB7ImZpbGUtaGVhZGVyIiwgMCwgMCwgJ2gnfSwKICB7InByb2dyYW0t aGVhZGVycyIsIDAsIDAsICdsJ30sCiAgeyJoZWFkZXJzIiwgMCwgMCwgJ2UnfSwKICB7Imhpc3Rv Z3JhbSIsIDAsIDAsICdJJ30sCiAgeyJzZWdtZW50cyIsIDAsIDAsICdsJ30sCiAgeyJzZWN0aW9u cyIsIDAsIDAsICdTJ30sCiAgeyJzZWN0aW9uLWhlYWRlcnMiLCAwLCAwLCAnUyd9LAogIHsic3lt Ym9scyIsIDAsIDAsICdzJ30sCiAgeyJzeW1zIiwgMCwgMCwgJ3MnfSwKICB7InJlbG9jcyIsIDAs IDAsICdyJ30sCiAgeyJub3RlcyIsIDAsIDAsICduJ30sCiAgeyJkeW5hbWljIiwgMCwgMCwgJ2Qn fSwKICB7ImFyY2gtc3BlY2lmaWMiLCAwLCAwLCAnQSd9LAogIHsidmVyc2lvbi1pbmZvIiwgMCwg MCwgJ1YnfSwKICB7InVzZS1keW5hbWljIiwgMCwgMCwgJ0QnfSwKICB7ImhleC1kdW1wIiwgMSwg MCwgJ3gnfSwKICB7ImRlYnVnLWR1bXAiLCAyLCAwLCA1MTJ9LAogIHsidW53aW5kIiwgMCwgMCwg J3UnfSwKCgoKCiAgeyJ2ZXJzaW9uIiwgMCwgMCwgJ3YnfSwKICB7IndpZGUiLCAwLCAwLCAnVyd9 LAogIHsiaGVscCIsIDAsIDAsICdIJ30sCiAgezAsIDAsIDAsIDB9Cn07CgpzdGF0aWMgdm9pZAp1 c2FnZSAoKQp7CiAgZnByaW50ZiAoc3Rkb3V0LCAoIlVzYWdlOiByZWFkZWxmIDxvcHRpb24ocyk+ IGVsZi1maWxlKHMpXG4iKSk7CiAgZnByaW50ZiAoc3Rkb3V0LCAoIiBEaXNwbGF5IGluZm9ybWF0 aW9uIGFib3V0IHRoZSBjb250ZW50cyBvZiBFTEYgZm9ybWF0IGZpbGVzXG4iKSk7CiAgZnByaW50 ZiAoc3Rkb3V0LCAoIiBPcHRpb25zIGFyZTpcbiAgLWEgLS1hbGwgICAgICAgICAgICAgICBFcXVp dmFsZW50IHRvOiAtaCAtbCAtUyAtcyAtciAtZCAtViAtQSAtSVxuICAtaCAtLWZpbGUtaGVhZGVy ICAgICAgIERpc3BsYXkgdGhlIEVMRiBmaWxlIGhlYWRlclxuICAtbCAtLXByb2dyYW0taGVhZGVy cyAgIERpc3BsYXkgdGhlIHByb2dyYW0gaGVhZGVyc1xuICAgICAtLXNlZ21lbnRzICAgICAgICAg IEFuIGFsaWFzIGZvciAtLXByb2dyYW0taGVhZGVyc1xuICAtUyAtLXNlY3Rpb24taGVhZGVycyAg IERpc3BsYXkgdGhlIHNlY3Rpb25zJyBoZWFkZXJcbiAgICAgLS1zZWN0aW9ucyAgICAgICAgICBB biBhbGlhcyBmb3IgLS1zZWN0aW9uLWhlYWRlcnNcbiAgLWUgLS1oZWFkZXJzICAgICAgICAgICBF cXVpdmFsZW50IHRvOiAtaCAtbCAtU1xuICAtcyAtLXN5bXMgICAgICAgICAgICAgIERpc3BsYXkg dGhlIHN5bWJvbCB0YWJsZVxuICAgICAgLS1zeW1ib2xzICAgICAgICAgIEFuIGFsaWFzIGZvciAt LXN5bXNcbiAgLW4gLS1ub3RlcyAgICAgICAgICAgICBEaXNwbGF5IHRoZSBjb3JlIG5vdGVzIChp ZiBwcmVzZW50KVxuICAtciAtLXJlbG9jcyAgICAgICAgICAgIERpc3BsYXkgdGhlIHJlbG9jYXRp b25zIChpZiBwcmVzZW50KVxuICAtdSAtLXVud2luZCAgICAgICAgICAgIERpc3BsYXkgdGhlIHVu d2luZCBpbmZvIChpZiBwcmVzZW50KVxuICAtZCAtLWR5bmFtaWMgICAgICAgICAgIERpc3BsYXkg dGhlIGR5bmFtaWMgc2VnbWVudCAoaWYgcHJlc2VudClcbiAgLVYgLS12ZXJzaW9uLWluZm8gICAg ICBEaXNwbGF5IHRoZSB2ZXJzaW9uIHNlY3Rpb25zIChpZiBwcmVzZW50KVxuICAtQSAtLWFyY2gt c3BlY2lmaWMgICAgIERpc3BsYXkgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGluZm9ybWF0aW9uIChp ZiBhbnkpLlxuICAtRCAtLXVzZS1keW5hbWljICAgICAgIFVzZSB0aGUgZHluYW1pYyBzZWN0aW9u IGluZm8gd2hlbiBkaXNwbGF5aW5nIHN5bWJvbHNcbiAgLXggLS1oZXgtZHVtcD08bnVtYmVyPiBE dW1wIHRoZSBjb250ZW50cyBvZiBzZWN0aW9uIDxudW1iZXI+XG4gIC13W2xpYXBybWZGc29dIG9y XG4gIC0tZGVidWctZHVtcFs9bGluZSw9aW5mbyw9YWJicmV2LD1wdWJuYW1lcyw9cmFuZ2VzLD1t YWNybyw9ZnJhbWVzLD1zdHIsPWxvY11cbiAgICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5 IHRoZSBjb250ZW50cyBvZiBEV0FSRjIgZGVidWcgc2VjdGlvbnNcbiIpKTsKIyAyNTA0ICJyZWFk ZWxmLmMiCiAgZnByaW50ZiAoc3Rkb3V0LCAoIiAgLUkgLS1oaXN0b2dyYW0gICAgICAgICBEaXNw bGF5IGhpc3RvZ3JhbSBvZiBidWNrZXQgbGlzdCBsZW5ndGhzXG4gIC1XIC0td2lkZSAgICAgICAg ICAgICAgQWxsb3cgb3V0cHV0IHdpZHRoIHRvIGV4Y2VlZCA4MCBjaGFyYWN0ZXJzXG4gIC1IIC0t aGVscCAgICAgICAgICAgICAgRGlzcGxheSB0aGlzIGluZm9ybWF0aW9uXG4gIC12IC0tdmVyc2lv biAgICAgICAgICAgRGlzcGxheSB0aGUgdmVyc2lvbiBudW1iZXIgb2YgcmVhZGVsZlxuIikpOwoK CgoKICBmcHJpbnRmIChzdGRvdXQsICgiUmVwb3J0IGJ1Z3MgdG8gJXNcbiIpLCAiYnVnLWJpbnV0 aWxzQGdudS5vcmciKTsKCiAgZXhpdCAoMCk7Cn0KCnN0YXRpYyB2b2lkCnJlcXVlc3RfZHVtcCAo c2VjdGlvbiwgdHlwZSkKICAgICB1bnNpZ25lZCBpbnQgc2VjdGlvbjsKICAgICBpbnQgdHlwZTsK ewogIGlmIChzZWN0aW9uID49IG51bV9kdW1wX3NlY3RzKQogICAgewogICAgICBjaGFyICpuZXdf ZHVtcF9zZWN0czsKCiAgICAgIG5ld19kdW1wX3NlY3RzID0gKGNoYXIgKikgY2FsbG9jIChzZWN0 aW9uICsgMSwgMSk7CgogICAgICBpZiAobmV3X2R1bXBfc2VjdHMgPT0gKCh2b2lkICopMCkpCiAg ICAgICAgZXJyb3IgKCgiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGR1bXAgcmVxdWVzdCB0YWJs ZS4iKSk7CiAgICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgbWVtY3B5IChuZXdfZHVtcF9z ZWN0cywgZHVtcF9zZWN0cywgbnVtX2R1bXBfc2VjdHMpOwoKICAgICAgICAgIGZyZWUgKGR1bXBf c2VjdHMpOwoKICAgICAgICAgIGR1bXBfc2VjdHMgPSBuZXdfZHVtcF9zZWN0czsKICAgICAgICAg IG51bV9kdW1wX3NlY3RzID0gc2VjdGlvbiArIDE7CiAgICAgICAgfQogICAgfQoKICBpZiAoZHVt cF9zZWN0cykKICAgIGR1bXBfc2VjdHNbc2VjdGlvbl0gfD0gdHlwZTsKCiAgcmV0dXJuOwp9Cgpz dGF0aWMgdm9pZApwYXJzZV9hcmdzIChhcmdjLCBhcmd2KQogICAgIGludCBhcmdjOwogICAgIGNo YXIgKiphcmd2Owp7CiAgaW50IGM7CgogIGlmIChhcmdjIDwgMikKICAgIHVzYWdlICgpOwoKICB3 aGlsZSAoKGMgPSBnZXRvcHRfbG9uZwogICAgICAgICAgKGFyZ2MsIGFyZ3YsICJlcnN1YWhubGRT REFJdzo6eDppOnZWV0giLCBvcHRpb25zLCAoKHZvaWQgKikwKSkpICE9ICgtMSkpCiAgICB7CiAg ICAgIGNoYXIgKmNwOwogICAgICBpbnQgc2VjdGlvbjsKCiAgICAgIHN3aXRjaCAoYykKICAgICAg ICB7CiAgICAgICAgY2FzZSAwOgoKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ0gnOgog ICAgICAgICAgdXNhZ2UgKCk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAnYSc6CiAg ICAgICAgICBkb19zeW1zKys7CiAgICAgICAgICBkb19yZWxvYysrOwogICAgICAgICAgZG9fdW53 aW5kKys7CiAgICAgICAgICBkb19keW5hbWljKys7CiAgICAgICAgICBkb19oZWFkZXIrKzsKICAg ICAgICAgIGRvX3NlY3Rpb25zKys7CiAgICAgICAgICBkb19zZWdtZW50cysrOwogICAgICAgICAg ZG9fdmVyc2lvbisrOwogICAgICAgICAgZG9faGlzdG9ncmFtKys7CiAgICAgICAgICBkb19hcmNo Kys7CiAgICAgICAgICBkb19ub3RlcysrOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAn ZSc6CiAgICAgICAgICBkb19oZWFkZXIrKzsKICAgICAgICAgIGRvX3NlY3Rpb25zKys7CiAgICAg ICAgICBkb19zZWdtZW50cysrOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnQSc6CiAg ICAgICAgICBkb19hcmNoKys7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdEJzoKICAg ICAgICAgIGRvX3VzaW5nX2R5bmFtaWMrKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2Ug J3InOgogICAgICAgICAgZG9fcmVsb2MrKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2Ug J3UnOgogICAgICAgICAgZG9fdW53aW5kKys7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNl ICdoJzoKICAgICAgICAgIGRvX2hlYWRlcisrOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2Fz ZSAnbCc6CiAgICAgICAgICBkb19zZWdtZW50cysrOwogICAgICAgICAgYnJlYWs7CiAgICAgICAg Y2FzZSAncyc6CiAgICAgICAgICBkb19zeW1zKys7CiAgICAgICAgICBicmVhazsKICAgICAgICBj YXNlICdTJzoKICAgICAgICAgIGRvX3NlY3Rpb25zKys7CiAgICAgICAgICBicmVhazsKICAgICAg ICBjYXNlICdkJzoKICAgICAgICAgIGRvX2R5bmFtaWMrKzsKICAgICAgICAgIGJyZWFrOwogICAg ICAgIGNhc2UgJ0knOgogICAgICAgICAgZG9faGlzdG9ncmFtKys7CiAgICAgICAgICBicmVhazsK ICAgICAgICBjYXNlICduJzoKICAgICAgICAgIGRvX25vdGVzKys7CiAgICAgICAgICBicmVhazsK ICAgICAgICBjYXNlICd4JzoKICAgICAgICAgIGRvX2R1bXArKzsKICAgICAgICAgIHNlY3Rpb24g PSBzdHJ0b3VsIChvcHRhcmcsICYgY3AsIDApOwogICAgICAgICAgaWYgKCEgKmNwICYmIHNlY3Rp b24gPj0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHJlcXVlc3RfZHVtcCAoc2VjdGlv biwgKDEgPDwgMCkpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAg ICBnb3RvIG9vcHM7CiAgICAgICAgY2FzZSAndyc6CiAgICAgICAgICBkb19kdW1wKys7CiAgICAg ICAgICBpZiAob3B0YXJnID09IDApCiAgICAgICAgICAgIGRvX2RlYnVnZ2luZyA9IDE7CiAgICAg ICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5kZXgg PSAwOwoKICAgICAgICAgICAgICBkb19kZWJ1Z2dpbmcgPSAwOwoKICAgICAgICAgICAgICB3aGls ZSAob3B0YXJnW2luZGV4XSkKICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0YXJnW2luZGV4Kytd KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNhc2UgJ2knOgogICAgICAg ICAgICAgICAgICBjYXNlICdJJzoKICAgICAgICAgICAgICAgICAgICBkb19kZWJ1Z19pbmZvID0g MTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgIGNhc2UgJ2En OgogICAgICAgICAgICAgICAgICBjYXNlICdBJzoKICAgICAgICAgICAgICAgICAgICBkb19kZWJ1 Z19hYmJyZXZzID0gMTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAg ICAgIGNhc2UgJ2wnOgogICAgICAgICAgICAgICAgICBjYXNlICdMJzoKICAgICAgICAgICAgICAg ICAgICBkb19kZWJ1Z19saW5lcyA9IDE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAg ICAgICAgICAgICAgICBjYXNlICdwJzoKICAgICAgICAgICAgICAgICAgY2FzZSAnUCc6CiAgICAg ICAgICAgICAgICAgICAgZG9fZGVidWdfcHVibmFtZXMgPSAxOwogICAgICAgICAgICAgICAgICAg IGJyZWFrOwoKICAgICAgICAgICAgICAgICAgY2FzZSAncic6CiAgICAgICAgICAgICAgICAgIGNh c2UgJ1InOgogICAgICAgICAgICAgICAgICAgIGRvX2RlYnVnX2FyYW5nZXMgPSAxOwogICAgICAg ICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgY2FzZSAnRic6CiAgICAgICAg ICAgICAgICAgICAgZG9fZGVidWdfZnJhbWVzX2ludGVycCA9IDE7CiAgICAgICAgICAgICAgICAg IGNhc2UgJ2YnOgogICAgICAgICAgICAgICAgICAgIGRvX2RlYnVnX2ZyYW1lcyA9IDE7CiAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICBjYXNlICdtJzoKICAgICAg ICAgICAgICAgICAgY2FzZSAnTSc6CiAgICAgICAgICAgICAgICAgICAgZG9fZGVidWdfbWFjaW5m byA9IDE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICBjYXNl ICdzJzoKICAgICAgICAgICAgICAgICAgY2FzZSAnUyc6CiAgICAgICAgICAgICAgICAgICAgZG9f ZGVidWdfc3RyID0gMTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAg ICAgIGNhc2UgJ28nOgogICAgICAgICAgICAgICAgICBjYXNlICdPJzoKICAgICAgICAgICAgICAg ICAgICBkb19kZWJ1Z19sb2MgPSAxOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAg ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICB3YXJuICgoIlVucmVjb2du aXplZCBkZWJ1ZyBvcHRpb24gJyVzJ1xuIiksIG9wdGFyZyk7CiAgICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgYnJlYWs7 CiAgICAgICAgY2FzZSA1MTI6CiAgICAgICAgICBkb19kdW1wKys7CiAgICAgICAgICBpZiAob3B0 YXJnID09IDApCiAgICAgICAgICAgIGRvX2RlYnVnZ2luZyA9IDE7CiAgICAgICAgICBlbHNlCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgY2hhciAqZGVidWdfZHVtcF9v cHRbXQogICAgICAgICAgICAgICAgPSB7ICJsaW5lIiwgImluZm8iLCAiYWJicmV2IiwgInB1Ym5h bWVzIiwgInJhbmdlcyIsCiAgICAgICAgICAgICAgICAgICAgIm1hY3JvIiwgImZyYW1lcyIsICJm cmFtZXMtaW50ZXJwIiwgInN0ciIsICJsb2MiLCAoKHZvaWQgKikwKSB9OwogICAgICAgICAgICAg IHVuc2lnbmVkIGludCBpbmRleDsKICAgICAgICAgICAgICBjb25zdCBjaGFyICpwOwoKICAgICAg ICAgICAgICBkb19kZWJ1Z2dpbmcgPSAwOwoKICAgICAgICAgICAgICBwID0gb3B0YXJnOwogICAg ICAgICAgICAgIHdoaWxlICgqcCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg Zm9yIChpbmRleCA9IDA7IGRlYnVnX2R1bXBfb3B0W2luZGV4XTsgaW5kZXgrKykKICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuIChk ZWJ1Z19kdW1wX29wdFtpbmRleF0pOwoKICAgICAgICAgICAgICAgICAgICAgIGlmICgoX19leHRl bnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKGxlbikgJiYgKChfX2J1aWx0aW5fY29uc3Rh bnRfcCAocCkgJiYgc3RybGVuIChwKSA8ICgoc2l6ZV90KSAobGVuKSkpIHx8IChfX2J1aWx0aW5f Y29uc3RhbnRfcCAoZGVidWdfZHVtcF9vcHRbaW5kZXhdKSAmJiBzdHJsZW4gKGRlYnVnX2R1bXBf b3B0W2luZGV4XSkgPCAoKHNpemVfdCkgKGxlbikpKSkgPyBfX2V4dGVuc2lvbl9fICh7IHNpemVf dCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAocCkgJiYgX19idWls dGluX2NvbnN0YW50X3AgKGRlYnVnX2R1bXBfb3B0W2luZGV4XSkgJiYgKF9fczFfbGVuID0gc3Ry bGVuIChwKSwgX19zMl9sZW4gPSBzdHJsZW4gKGRlYnVnX2R1bXBfb3B0W2luZGV4XSksICghKChz aXplX3QpKGNvbnN0IHZvaWQgKikoKHApICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHAp ID09IDEpIHx8IF9fczFfbGVuID49IDQpICYmICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGRl YnVnX2R1bXBfb3B0W2luZGV4XSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoZGVidWdf ZHVtcF9vcHRbaW5kZXhdKSA9PSAxKSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2Nv bnN0IGNoYXIgKikgKHApLCAoX19jb25zdCBjaGFyICopIChkZWJ1Z19kdW1wX29wdFtpbmRleF0p LCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDogX19zMl9sZW4pICsgMSkgOiAoX19i dWlsdGluX2NvbnN0YW50X3AgKHApICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChwKSArIDEp IC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShwKSA9PSAxKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4g KHApLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wIChkZWJ1Z19kdW1wX29w dFtpbmRleF0pICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChkZWJ1Z19kdW1wX29wdFtpbmRl eF0pICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGRlYnVnX2R1bXBfb3B0W2luZGV4XSkg PT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocCkpWzBdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKShkZWJ1Z19kdW1wX29wdFtpbmRleF0p KVswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwKSlbMV0gLSAoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkZWJ1Z19kdW1wX29wdFtp bmRleF0pKVsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3Vs dCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwKSlbMl0g LSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkZWJ1Z19kdW1w X29wdFtpbmRleF0pKVsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19y ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocCkp WzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGVidWdf ZHVtcF9vcHRbaW5kZXhdKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9f ICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMiA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoZGVidWdfZHVtcF9vcHRbaW5kZXhdKTsgcmVnaXN0ZXIgaW50 IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KHApKVswXSAtIF9fczJbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsg X19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo cCkpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBf X3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChw KSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jl c3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwKSlb M10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9w IChkZWJ1Z19kdW1wX29wdFtpbmRleF0pICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChkZWJ1 Z19kdW1wX29wdFtpbmRleF0pICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGRlYnVnX2R1 bXBfb3B0W2luZGV4XSkgPT0gMSkgJiYgKF9fczJfbGVuID0gc3RybGVuIChkZWJ1Z19kdW1wX29w dFtpbmRleF0pLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wIChwKSAmJiAo KHNpemVfdCkoY29uc3Qgdm9pZCAqKSgocCkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKiko cCkgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocCkpWzBdIC0gKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKShkZWJ1Z19kdW1wX29wdFtpbmRl eF0pKVswXSk7IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9 ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwKSlbMV0gLSAo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkZWJ1Z19kdW1wX29w dFtpbmRleF0pKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jl c3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwKSlb Ml0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkZWJ1Z19k dW1wX29wdFtpbmRleF0pKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkg X19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo cCkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGVi dWdfZHVtcF9vcHRbaW5kZXhdKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lv bl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMSA9IChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAocCk7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9IF9fczFb MF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkZWJ1Z19k dW1wX29wdFtpbmRleF0pKVswXTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7 IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChkZWJ1Z19kdW1wX29wdFtpbmRleF0pKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEg JiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzJdIC0gKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGVidWdfZHVtcF9vcHRbaW5kZXhdKSlbMl0p OyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKF9fczFbM10g LSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkZWJ1Z19kdW1w X29wdFtpbmRleF0pKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IHN0cmNtcCAocCwgZGVidWdf ZHVtcF9vcHRbaW5kZXhdKSkpKTsgfSkgOiBzdHJuY21wIChwLCBkZWJ1Z19kdW1wX29wdFtpbmRl eF0sIGxlbikpKSA9PSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHBbbGVuXSA9PSAn LCcgfHwgcFtsZW5dID09ICdcMCcpKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgc3dpdGNoIChwWzBdKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaSc6CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRvX2RlYnVnX2luZm8gPSAxOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhJzoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fZGVidWdfYWJicmV2cyA9IDE7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgJ2wnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocFsxXSA9PSAnaScp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fZGVidWdfbGluZXMgPSAxOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZG9fZGVidWdfbG9jID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncCc6CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRvX2RlYnVnX3B1Ym5hbWVzID0gMTsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncic6 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2RlYnVnX2FyYW5nZXMgPSAxOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXNlICdmJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDYp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9fZGVidWdfZnJhbWVzX2ludGVycCA9 IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2RlYnVnX2ZyYW1lcyA9IDE7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgJ20nOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19kZWJ1Z19t YWNpbmZvID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2FzZSAncyc6CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRvX2RlYnVnX3N0ciA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAg ICBwICs9IGxlbjsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgIGlm IChkZWJ1Z19kdW1wX29wdFtpbmRleF0gPT0gKCh2b2lkICopMCkpCiAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgd2FybiAoKCJVbnJlY29nbml6ZWQgZGVidWcgb3B0 aW9uICclcydcbiIpLCBwKTsKICAgICAgICAgICAgICAgICAgICAgIHAgPSAoX19leHRlbnNpb25f XyAoX19idWlsdGluX2NvbnN0YW50X3AgKCcsJykgJiYgKCcsJykgPT0gJ1wwJyA/IChjaGFyICop IF9fcmF3bWVtY2hyIChwLCAnLCcpIDogc3RyY2hyIChwLCAnLCcpKSk7CiAgICAgICAgICAgICAg ICAgICAgICBpZiAocCA9PSAoKHZvaWQgKikwKSkKICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgaWYgKCpwID09ICcs JykKICAgICAgICAgICAgICAgICAgICBwKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg IH0KICAgICAgICAgIGJyZWFrOwojIDI3ODggInJlYWRlbGYuYyIKICAgICAgICBjYXNlICd2JzoK ICAgICAgICAgIHByaW50X3ZlcnNpb24gKHByb2dyYW1fbmFtZSk7CiAgICAgICAgICBicmVhazsK ICAgICAgICBjYXNlICdWJzoKICAgICAgICAgIGRvX3ZlcnNpb24rKzsKICAgICAgICAgIGJyZWFr OwogICAgICAgIGNhc2UgJ1cnOgogICAgICAgICAgZG9fd2lkZSsrOwogICAgICAgICAgYnJlYWs7 CiAgICAgICAgZGVmYXVsdDoKICAgICAgICBvb3BzOgoKICAgICAgICAgIGVycm9yICgoIkludmFs aWQgb3B0aW9uICctJWMnXG4iKSwgYyk7CgogICAgICAgIGNhc2UgJz8nOgogICAgICAgICAgdXNh Z2UgKCk7CiAgICAgICAgfQogICAgfQoKICBpZiAoIWRvX2R5bmFtaWMgJiYgIWRvX3N5bXMgJiYg IWRvX3JlbG9jICYmICFkb191bndpbmQgJiYgIWRvX3NlY3Rpb25zCiAgICAgICYmICFkb19zZWdt ZW50cyAmJiAhZG9faGVhZGVyICYmICFkb19kdW1wICYmICFkb192ZXJzaW9uCiAgICAgICYmICFk b19oaXN0b2dyYW0gJiYgIWRvX2RlYnVnZ2luZyAmJiAhZG9fYXJjaCAmJiAhZG9fbm90ZXMpCiAg ICB1c2FnZSAoKTsKICBlbHNlIGlmIChhcmdjIDwgMykKICAgIHsKICAgICAgd2FybiAoKCJOb3Ro aW5nIHRvIGRvLlxuIikpOwogICAgICB1c2FnZSgpOwogICAgfQp9CgpzdGF0aWMgY29uc3QgY2hh ciAqCmdldF9lbGZfY2xhc3MgKGVsZl9jbGFzcykKICAgICB1bnNpZ25lZCBpbnQgZWxmX2NsYXNz Owp7CiAgc3RhdGljIGNoYXIgYnVmZlszMl07CgogIHN3aXRjaCAoZWxmX2NsYXNzKQogICAgewog ICAgY2FzZSAwOiByZXR1cm4gKCJub25lIik7CiAgICBjYXNlIDE6IHJldHVybiAiRUxGMzIiOwog ICAgY2FzZSAyOiByZXR1cm4gIkVMRjY0IjsKICAgIGRlZmF1bHQ6CiAgICAgIHNwcmludGYgKGJ1 ZmYsICgiPHVua25vd246ICV4PiIpLCBlbGZfY2xhc3MpOwogICAgICByZXR1cm4gYnVmZjsKICAg IH0KfQoKc3RhdGljIGNvbnN0IGNoYXIgKgpnZXRfZGF0YV9lbmNvZGluZyAoZW5jb2RpbmcpCiAg ICAgdW5zaWduZWQgaW50IGVuY29kaW5nOwp7CiAgc3RhdGljIGNoYXIgYnVmZlszMl07CgogIHN3 aXRjaCAoZW5jb2RpbmcpCiAgICB7CiAgICBjYXNlIDA6IHJldHVybiAoIm5vbmUiKTsKICAgIGNh c2UgMTogcmV0dXJuICgiMidzIGNvbXBsZW1lbnQsIGxpdHRsZSBlbmRpYW4iKTsKICAgIGNhc2Ug MjogcmV0dXJuICgiMidzIGNvbXBsZW1lbnQsIGJpZyBlbmRpYW4iKTsKICAgIGRlZmF1bHQ6CiAg ICAgIHNwcmludGYgKGJ1ZmYsICgiPHVua25vd246ICV4PiIpLCBlbmNvZGluZyk7CiAgICAgIHJl dHVybiBidWZmOwogICAgfQp9CgpzdGF0aWMgY29uc3QgY2hhciAqCmdldF9vc2FiaV9uYW1lIChv c2FiaSkKICAgICB1bnNpZ25lZCBpbnQgb3NhYmk7CnsKICBzdGF0aWMgY2hhciBidWZmWzMyXTsK CiAgc3dpdGNoIChvc2FiaSkKICAgIHsKICAgIGNhc2UgMDogcmV0dXJuICJVTklYIC0gU3lzdGVt IFYiOwogICAgY2FzZSAxOiByZXR1cm4gIlVOSVggLSBIUC1VWCI7CiAgICBjYXNlIDI6IHJldHVy biAiVU5JWCAtIE5ldEJTRCI7CiAgICBjYXNlIDM6IHJldHVybiAiVU5JWCAtIExpbnV4IjsKICAg IGNhc2UgNDogcmV0dXJuICJHTlUvSHVyZCI7CiAgICBjYXNlIDY6IHJldHVybiAiVU5JWCAtIFNv bGFyaXMiOwogICAgY2FzZSA3OiByZXR1cm4gIlVOSVggLSBBSVgiOwogICAgY2FzZSA4OiByZXR1 cm4gIlVOSVggLSBJUklYIjsKICAgIGNhc2UgOTogcmV0dXJuICJVTklYIC0gRnJlZUJTRCI7CiAg ICBjYXNlIDEwOiByZXR1cm4gIlVOSVggLSBUUlU2NCI7CiAgICBjYXNlIDExOiByZXR1cm4gIk5v dmVsbCAtIE1vZGVzdG8iOwogICAgY2FzZSAxMjogcmV0dXJuICJVTklYIC0gT3BlbkJTRCI7CiAg ICBjYXNlIDEzOiByZXR1cm4gIlZNUyAtIE9wZW5WTVMiOwogICAgY2FzZSAxNDogcmV0dXJuICJI UCAtIE5vbi1TdG9wIEtlcm5lbCI7CiAgICBjYXNlIDE1OiByZXR1cm4gIkFtaWdhIFJlc2VhcmNo IE9TIjsKICAgIGNhc2UgMjU1OiByZXR1cm4gKCJTdGFuZGFsb25lIEFwcCIpOwogICAgY2FzZSA5 NzogcmV0dXJuICJBUk0iOwogICAgZGVmYXVsdDoKICAgICAgc3ByaW50ZiAoYnVmZiwgKCI8dW5r bm93bjogJXg+IiksIG9zYWJpKTsKICAgICAgcmV0dXJuIGJ1ZmY7CiAgICB9Cn0KCgpzdGF0aWMg aW50CnByb2Nlc3NfZmlsZV9oZWFkZXIgKCkKewogIGlmICggZWxmX2hlYWRlci5lX2lkZW50WzBd ICE9IDB4N0YKICAgICAgfHwgZWxmX2hlYWRlci5lX2lkZW50WzFdICE9ICdFJwogICAgICB8fCBl bGZfaGVhZGVyLmVfaWRlbnRbMl0gIT0gJ0wnCiAgICAgIHx8IGVsZl9oZWFkZXIuZV9pZGVudFsz XSAhPSAnRicpCiAgICB7CiAgICAgIGVycm9yCiAgICAgICAgKCgiTm90IGFuIEVMRiBmaWxlIC0g aXQgaGFzIHRoZSB3cm9uZyBtYWdpYyBieXRlcyBhdCB0aGUgc3RhcnRcbiIpKTsKICAgICAgcmV0 dXJuIDA7CiAgICB9CgogIGlmIChkb19oZWFkZXIpCiAgICB7CiAgICAgIGludCBpOwoKICAgICAg cHJpbnRmICgoIkVMRiBIZWFkZXI6XG4iKSk7CiAgICAgIHByaW50ZiAoKCIgIE1hZ2ljOiAgICIp KTsKICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCiAgICAgICAgcHJpbnRmICgiJTIuMngg IiwgZWxmX2hlYWRlci5lX2lkZW50W2ldKTsKICAgICAgcHJpbnRmICgiXG4iKTsKICAgICAgcHJp bnRmICgoIiAgQ2xhc3M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlc1xuIiksCiAgICAg ICAgICAgICAgZ2V0X2VsZl9jbGFzcyAoZWxmX2hlYWRlci5lX2lkZW50WzRdKSk7CiAgICAgIHBy aW50ZiAoKCIgIERhdGE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXNcbiIpLAogICAg ICAgICAgICAgIGdldF9kYXRhX2VuY29kaW5nIChlbGZfaGVhZGVyLmVfaWRlbnRbNV0pKTsKICAg ICAgcHJpbnRmICgoIiAgVmVyc2lvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAlZCAlc1xu IiksCiAgICAgICAgICAgICAgZWxmX2hlYWRlci5lX2lkZW50WzZdLAogICAgICAgICAgICAgIChl bGZfaGVhZGVyLmVfaWRlbnRbNl0gPT0gMQogICAgICAgICAgICAgICA/ICIoY3VycmVudCkiCiAg ICAgICAgICAgICAgIDogKGVsZl9oZWFkZXIuZV9pZGVudFs2XSAhPSAwCiAgICAgICAgICAgICAg ICAgID8gIjx1bmtub3duOiAlbHg+IgogICAgICAgICAgICAgICAgICA6ICIiKSkpOwogICAgICBw cmludGYgKCgiICBPUy9BQkk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICVzXG4iKSwKICAg ICAgICAgICAgICBnZXRfb3NhYmlfbmFtZSAoZWxmX2hlYWRlci5lX2lkZW50WzddKSk7CiAgICAg IHByaW50ZiAoKCIgIEFCSSBWZXJzaW9uOiAgICAgICAgICAgICAgICAgICAgICAgJWRcbiIpLAog ICAgICAgICAgICAgIGVsZl9oZWFkZXIuZV9pZGVudFs4XSk7CiAgICAgIHByaW50ZiAoKCIgIFR5 cGU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXNcbiIpLAogICAgICAgICAgICAgIGdl dF9maWxlX3R5cGUgKGVsZl9oZWFkZXIuZV90eXBlKSk7CiAgICAgIHByaW50ZiAoKCIgIE1hY2hp bmU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJXNcbiIpLAogICAgICAgICAgICAgIGdldF9t YWNoaW5lX25hbWUgKGVsZl9oZWFkZXIuZV9tYWNoaW5lKSk7CiAgICAgIHByaW50ZiAoKCIgIFZl cnNpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHglbHhcbiIpLAogICAgICAgICAgICAg ICh1bnNpZ25lZCBsb25nKSBlbGZfaGVhZGVyLmVfdmVyc2lvbik7CgogICAgICBwcmludGYgKCgi ICBFbnRyeSBwb2ludCBhZGRyZXNzOiAgICAgICAgICAgICAgICIpKTsKICAgICAgcHJpbnRfdm1h ICgoYmZkX3ZtYSkgZWxmX2hlYWRlci5lX2VudHJ5LCBQUkVGSVhfSEVYKTsKICAgICAgcHJpbnRm ICgoIlxuICBTdGFydCBvZiBwcm9ncmFtIGhlYWRlcnM6ICAgICAgICAgICIpKTsKICAgICAgcHJp bnRfdm1hICgoYmZkX3ZtYSkgZWxmX2hlYWRlci5lX3Bob2ZmLCBERUMpOwogICAgICBwcmludGYg KCgiIChieXRlcyBpbnRvIGZpbGUpXG4gIFN0YXJ0IG9mIHNlY3Rpb24gaGVhZGVyczogICAgICAg ICAgIikpOwogICAgICBwcmludF92bWEgKChiZmRfdm1hKSBlbGZfaGVhZGVyLmVfc2hvZmYsIERF Qyk7CiAgICAgIHByaW50ZiAoKCIgKGJ5dGVzIGludG8gZmlsZSlcbiIpKTsKCiAgICAgIHByaW50 ZiAoKCIgIEZsYWdzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHglbHglc1xuIiksCiAg ICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIGVsZl9oZWFkZXIuZV9mbGFncywKICAgICAgICAg ICAgICBnZXRfbWFjaGluZV9mbGFncyAoZWxmX2hlYWRlci5lX2ZsYWdzLCBlbGZfaGVhZGVyLmVf bWFjaGluZSkpOwogICAgICBwcmludGYgKCgiICBTaXplIG9mIHRoaXMgaGVhZGVyOiAgICAgICAg ICAgICAgICVsZCAoYnl0ZXMpXG4iKSwKICAgICAgICAgICAgICAobG9uZykgZWxmX2hlYWRlci5l X2Voc2l6ZSk7CiAgICAgIHByaW50ZiAoKCIgIFNpemUgb2YgcHJvZ3JhbSBoZWFkZXJzOiAgICAg ICAgICAgJWxkIChieXRlcylcbiIpLAogICAgICAgICAgICAgIChsb25nKSBlbGZfaGVhZGVyLmVf cGhlbnRzaXplKTsKICAgICAgcHJpbnRmICgoIiAgTnVtYmVyIG9mIHByb2dyYW0gaGVhZGVyczog ICAgICAgICAlbGRcbiIpLAogICAgICAgICAgICAgIChsb25nKSBlbGZfaGVhZGVyLmVfcGhudW0p OwogICAgICBwcmludGYgKCgiICBTaXplIG9mIHNlY3Rpb24gaGVhZGVyczogICAgICAgICAgICVs ZCAoYnl0ZXMpXG4iKSwKICAgICAgICAgICAgICAobG9uZykgZWxmX2hlYWRlci5lX3NoZW50c2l6 ZSk7CiAgICAgIHByaW50ZiAoKCIgIE51bWJlciBvZiBzZWN0aW9uIGhlYWRlcnM6ICAgICAgICAg JWxkIiksCiAgICAgICAgICAgICAgKGxvbmcpIGVsZl9oZWFkZXIuZV9zaG51bSk7CiAgICAgIGlm IChzZWN0aW9uX2hlYWRlcnMgIT0gKCh2b2lkICopMCkgJiYgZWxmX2hlYWRlci5lX3NobnVtID09 IDApCiAgICAgICAgcHJpbnRmICgiICglbGQpIiwgKGxvbmcpIHNlY3Rpb25faGVhZGVyc1swXS5z aF9zaXplKTsKICAgICAgX0lPX3B1dGMgKCdcbicsIHN0ZG91dCk7CiAgICAgIHByaW50ZiAoKCIg IFNlY3Rpb24gaGVhZGVyIHN0cmluZyB0YWJsZSBpbmRleDogJWxkIiksCiAgICAgICAgICAgICAg KGxvbmcpIGVsZl9oZWFkZXIuZV9zaHN0cm5keCk7CiAgICAgIGlmIChzZWN0aW9uX2hlYWRlcnMg IT0gKCh2b2lkICopMCkgJiYgZWxmX2hlYWRlci5lX3Noc3RybmR4ID09IDB4RkZGRikKICAgICAg ICBwcmludGYgKCIgKCVsZCkiLCAobG9uZykgc2VjdGlvbl9oZWFkZXJzWzBdLnNoX2xpbmspOwog ICAgICBfSU9fcHV0YyAoJ1xuJywgc3Rkb3V0KTsKICAgIH0KCiAgaWYgKHNlY3Rpb25faGVhZGVy cyAhPSAoKHZvaWQgKikwKSkKICAgIHsKICAgICAgaWYgKGVsZl9oZWFkZXIuZV9zaG51bSA9PSAw KQogICAgICAgIGVsZl9oZWFkZXIuZV9zaG51bSA9IHNlY3Rpb25faGVhZGVyc1swXS5zaF9zaXpl OwogICAgICBpZiAoZWxmX2hlYWRlci5lX3Noc3RybmR4ID09IDB4RkZGRikKICAgICAgICBlbGZf aGVhZGVyLmVfc2hzdHJuZHggPSBzZWN0aW9uX2hlYWRlcnNbMF0uc2hfbGluazsKICAgICAgZnJl ZSAoc2VjdGlvbl9oZWFkZXJzKTsKICAgICAgc2VjdGlvbl9oZWFkZXJzID0gKCh2b2lkICopMCk7 CiAgICB9CgogIHJldHVybiAxOwp9CgoKc3RhdGljIGludApnZXRfMzJiaXRfcHJvZ3JhbV9oZWFk ZXJzIChmaWxlLCBwcm9ncmFtX2hlYWRlcnMpCiAgICAgRklMRSAqZmlsZTsKICAgICBFbGZfSW50 ZXJuYWxfUGhkciAqcHJvZ3JhbV9oZWFkZXJzOwp7CiAgRWxmMzJfRXh0ZXJuYWxfUGhkciAqcGhk cnM7CiAgRWxmMzJfRXh0ZXJuYWxfUGhkciAqZXh0ZXJuYWw7CiAgRWxmX0ludGVybmFsX1BoZHIg KmludGVybmFsOwogIHVuc2lnbmVkIGludCBpOwoKICBwaGRycyA9ICgoRWxmMzJfRXh0ZXJuYWxf UGhkciAqKQogICAgICAgICAgIGdldF9kYXRhICgoKHZvaWQgKikwKSwgZmlsZSwgZWxmX2hlYWRl ci5lX3Bob2ZmLAogICAgICAgICAgICAgICAgICAgICBlbGZfaGVhZGVyLmVfcGhlbnRzaXplICog ZWxmX2hlYWRlci5lX3BobnVtLAogICAgICAgICAgICAgICAgICAgICAoInByb2dyYW0gaGVhZGVy cyIpKSk7CiAgaWYgKCFwaGRycykKICAgIHJldHVybiAwOwoKICBmb3IgKGkgPSAwLCBpbnRlcm5h bCA9IHByb2dyYW1faGVhZGVycywgZXh0ZXJuYWwgPSBwaGRyczsKICAgICAgIGkgPCBlbGZfaGVh ZGVyLmVfcGhudW07CiAgICAgICBpKyssIGludGVybmFsKyssIGV4dGVybmFsKyspCiAgICB7CiAg ICAgIGludGVybmFsLT5wX3R5cGUgPSBieXRlX2dldCAoZXh0ZXJuYWwtPnBfdHlwZSwgc2l6ZW9m IChleHRlcm5hbC0+cF90eXBlKSk7CiAgICAgIGludGVybmFsLT5wX29mZnNldCA9IGJ5dGVfZ2V0 IChleHRlcm5hbC0+cF9vZmZzZXQsIHNpemVvZiAoZXh0ZXJuYWwtPnBfb2Zmc2V0KSk7CiAgICAg IGludGVybmFsLT5wX3ZhZGRyID0gYnl0ZV9nZXQgKGV4dGVybmFsLT5wX3ZhZGRyLCBzaXplb2Yg KGV4dGVybmFsLT5wX3ZhZGRyKSk7CiAgICAgIGludGVybmFsLT5wX3BhZGRyID0gYnl0ZV9nZXQg KGV4dGVybmFsLT5wX3BhZGRyLCBzaXplb2YgKGV4dGVybmFsLT5wX3BhZGRyKSk7CiAgICAgIGlu dGVybmFsLT5wX2ZpbGVzeiA9IGJ5dGVfZ2V0IChleHRlcm5hbC0+cF9maWxlc3osIHNpemVvZiAo ZXh0ZXJuYWwtPnBfZmlsZXN6KSk7CiAgICAgIGludGVybmFsLT5wX21lbXN6ID0gYnl0ZV9nZXQg KGV4dGVybmFsLT5wX21lbXN6LCBzaXplb2YgKGV4dGVybmFsLT5wX21lbXN6KSk7CiAgICAgIGlu dGVybmFsLT5wX2ZsYWdzID0gYnl0ZV9nZXQgKGV4dGVybmFsLT5wX2ZsYWdzLCBzaXplb2YgKGV4 dGVybmFsLT5wX2ZsYWdzKSk7CiAgICAgIGludGVybmFsLT5wX2FsaWduID0gYnl0ZV9nZXQgKGV4 dGVybmFsLT5wX2FsaWduLCBzaXplb2YgKGV4dGVybmFsLT5wX2FsaWduKSk7CiAgICB9CgogIGZy ZWUgKHBoZHJzKTsKCiAgcmV0dXJuIDE7Cn0KCnN0YXRpYyBpbnQKZ2V0XzY0Yml0X3Byb2dyYW1f aGVhZGVycyAoZmlsZSwgcHJvZ3JhbV9oZWFkZXJzKQogICAgIEZJTEUgKmZpbGU7CiAgICAgRWxm X0ludGVybmFsX1BoZHIgKnByb2dyYW1faGVhZGVyczsKewogIEVsZjY0X0V4dGVybmFsX1BoZHIg KnBoZHJzOwogIEVsZjY0X0V4dGVybmFsX1BoZHIgKmV4dGVybmFsOwogIEVsZl9JbnRlcm5hbF9Q aGRyICppbnRlcm5hbDsKICB1bnNpZ25lZCBpbnQgaTsKCiAgcGhkcnMgPSAoKEVsZjY0X0V4dGVy bmFsX1BoZHIgKikKICAgICAgICAgICBnZXRfZGF0YSAoKCh2b2lkICopMCksIGZpbGUsIGVsZl9o ZWFkZXIuZV9waG9mZiwKICAgICAgICAgICAgICAgICAgICAgZWxmX2hlYWRlci5lX3BoZW50c2l6 ZSAqIGVsZl9oZWFkZXIuZV9waG51bSwKICAgICAgICAgICAgICAgICAgICAgKCJwcm9ncmFtIGhl YWRlcnMiKSkpOwogIGlmICghcGhkcnMpCiAgICByZXR1cm4gMDsKCiAgZm9yIChpID0gMCwgaW50 ZXJuYWwgPSBwcm9ncmFtX2hlYWRlcnMsIGV4dGVybmFsID0gcGhkcnM7CiAgICAgICBpIDwgZWxm X2hlYWRlci5lX3BobnVtOwogICAgICAgaSsrLCBpbnRlcm5hbCsrLCBleHRlcm5hbCsrKQogICAg ewogICAgICBpbnRlcm5hbC0+cF90eXBlID0gYnl0ZV9nZXQgKGV4dGVybmFsLT5wX3R5cGUsIHNp emVvZiAoZXh0ZXJuYWwtPnBfdHlwZSkpOwogICAgICBpbnRlcm5hbC0+cF9mbGFncyA9IGJ5dGVf Z2V0IChleHRlcm5hbC0+cF9mbGFncywgc2l6ZW9mIChleHRlcm5hbC0+cF9mbGFncykpOwogICAg ICBpbnRlcm5hbC0+cF9vZmZzZXQgPSBieXRlX2dldCAoZXh0ZXJuYWwtPnBfb2Zmc2V0LCAtOCk7 CiAgICAgIGludGVybmFsLT5wX3ZhZGRyID0gYnl0ZV9nZXQgKGV4dGVybmFsLT5wX3ZhZGRyLCAt OCk7CiAgICAgIGludGVybmFsLT5wX3BhZGRyID0gYnl0ZV9nZXQgKGV4dGVybmFsLT5wX3BhZGRy LCAtOCk7CiAgICAgIGludGVybmFsLT5wX2ZpbGVzeiA9IGJ5dGVfZ2V0IChleHRlcm5hbC0+cF9m aWxlc3osIC04KTsKICAgICAgaW50ZXJuYWwtPnBfbWVtc3ogPSBieXRlX2dldCAoZXh0ZXJuYWwt PnBfbWVtc3osIC04KTsKICAgICAgaW50ZXJuYWwtPnBfYWxpZ24gPSBieXRlX2dldCAoZXh0ZXJu YWwtPnBfYWxpZ24sIC04KTsKICAgIH0KCiAgZnJlZSAocGhkcnMpOwoKICByZXR1cm4gMTsKfQoK CgpzdGF0aWMgaW50CnByb2Nlc3NfcHJvZ3JhbV9oZWFkZXJzIChmaWxlKQogICAgIEZJTEUgKmZp bGU7CnsKICBFbGZfSW50ZXJuYWxfUGhkciAqcHJvZ3JhbV9oZWFkZXJzOwogIEVsZl9JbnRlcm5h bF9QaGRyICpzZWdtZW50OwogIHVuc2lnbmVkIGludCBpOwoKICBpZiAoZWxmX2hlYWRlci5lX3Bo bnVtID09IDApCiAgICB7CiAgICAgIGlmIChkb19zZWdtZW50cykKICAgICAgICBwcmludGYgKCgi XG5UaGVyZSBhcmUgbm8gcHJvZ3JhbSBoZWFkZXJzIGluIHRoaXMgZmlsZS5cbiIpKTsKICAgICAg cmV0dXJuIDA7CiAgICB9CgogIGlmIChkb19zZWdtZW50cyAmJiAhZG9faGVhZGVyKQogICAgewog ICAgICBwcmludGYgKCgiXG5FbGYgZmlsZSB0eXBlIGlzICVzXG4iKSwgZ2V0X2ZpbGVfdHlwZSAo ZWxmX2hlYWRlci5lX3R5cGUpKTsKICAgICAgcHJpbnRmICgoIkVudHJ5IHBvaW50ICIpKTsKICAg ICAgcHJpbnRfdm1hICgoYmZkX3ZtYSkgZWxmX2hlYWRlci5lX2VudHJ5LCBQUkVGSVhfSEVYKTsK ICAgICAgcHJpbnRmICgoIlxuVGhlcmUgYXJlICVkIHByb2dyYW0gaGVhZGVycywgc3RhcnRpbmcg YXQgb2Zmc2V0ICIpLAogICAgICAgICAgICAgIGVsZl9oZWFkZXIuZV9waG51bSk7CiAgICAgIHBy aW50X3ZtYSAoKGJmZF92bWEpIGVsZl9oZWFkZXIuZV9waG9mZiwgREVDKTsKICAgICAgcHJpbnRm ICgiXG4iKTsKICAgIH0KCiAgcHJvZ3JhbV9oZWFkZXJzID0gKEVsZl9JbnRlcm5hbF9QaGRyICop IG1hbGxvYwogICAgKGVsZl9oZWFkZXIuZV9waG51bSAqIHNpemVvZiAoRWxmX0ludGVybmFsX1Bo ZHIpKTsKCiAgaWYgKHByb2dyYW1faGVhZGVycyA9PSAoKHZvaWQgKikwKSkKICAgIHsKICAgICAg ZXJyb3IgKCgiT3V0IG9mIG1lbW9yeVxuIikpOwogICAgICByZXR1cm4gMDsKICAgIH0KCiAgaWYg KGlzXzMyYml0X2VsZikKICAgIGkgPSBnZXRfMzJiaXRfcHJvZ3JhbV9oZWFkZXJzIChmaWxlLCBw cm9ncmFtX2hlYWRlcnMpOwogIGVsc2UKICAgIGkgPSBnZXRfNjRiaXRfcHJvZ3JhbV9oZWFkZXJz IChmaWxlLCBwcm9ncmFtX2hlYWRlcnMpOwoKICBpZiAoaSA9PSAwKQogICAgewogICAgICBmcmVl IChwcm9ncmFtX2hlYWRlcnMpOwogICAgICByZXR1cm4gMDsKICAgIH0KCiAgaWYgKGRvX3NlZ21l bnRzKQogICAgewogICAgICBpZiAoZWxmX2hlYWRlci5lX3BobnVtID4gMSkKICAgICAgICBwcmlu dGYgKCgiXG5Qcm9ncmFtIEhlYWRlcnM6XG4iKSk7CiAgICAgIGVsc2UKICAgICAgICBwcmludGYg KCgiXG5Qcm9ncmFtIEhlYWRlcnM6XG4iKSk7CgogICAgICBpZiAoaXNfMzJiaXRfZWxmKQogICAg ICAgIHByaW50ZgogICAgICAgICAgKCgiICBUeXBlICAgICAgICAgICBPZmZzZXQgICBWaXJ0QWRk ciAgIFBoeXNBZGRyICAgRmlsZVNpeiBNZW1TaXogIEZsZyBBbGlnblxuIikpOwogICAgICBlbHNl IGlmIChkb193aWRlKQogICAgICAgIHByaW50ZgogICAgICAgICAgKCgiICBUeXBlICAgICAgICAg ICBPZmZzZXQgICBWaXJ0QWRkciAgICAgICAgICAgUGh5c0FkZHIgICAgICAgICAgIEZpbGVTaXog IE1lbVNpeiAgIEZsZyBBbGlnblxuIikpOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAg cHJpbnRmCiAgICAgICAgICAgICgoIiAgVHlwZSAgICAgICAgICAgT2Zmc2V0ICAgICAgICAgICAg IFZpcnRBZGRyICAgICAgICAgICBQaHlzQWRkclxuIikpOwogICAgICAgICAgcHJpbnRmCiAgICAg ICAgICAgICgoIiAgICAgICAgICAgICAgICAgRmlsZVNpeiAgICAgICAgICAgIE1lbVNpeiAgICAg ICAgICAgICAgRmxhZ3MgIEFsaWduXG4iKSk7CiAgICAgICAgfQogICAgfQoKICBsb2FkYWRkciA9 IC0xOwogIGR5bmFtaWNfYWRkciA9IDA7CiAgZHluYW1pY19zaXplID0gMDsKCiAgZm9yIChpID0g MCwgc2VnbWVudCA9IHByb2dyYW1faGVhZGVyczsKICAgICAgIGkgPCBlbGZfaGVhZGVyLmVfcGhu dW07CiAgICAgICBpKyssIHNlZ21lbnQrKykKICAgIHsKICAgICAgaWYgKGRvX3NlZ21lbnRzKQog ICAgICAgIHsKICAgICAgICAgIHByaW50ZiAoIiAgJS0xNC4xNHMgIiwgZ2V0X3NlZ21lbnRfdHlw ZSAoc2VnbWVudC0+cF90eXBlKSk7CgogICAgICAgICAgaWYgKGlzXzMyYml0X2VsZikKICAgICAg ICAgICAgewogICAgICAgICAgICAgIHByaW50ZiAoIjB4JTYuNmx4ICIsICh1bnNpZ25lZCBsb25n KSBzZWdtZW50LT5wX29mZnNldCk7CiAgICAgICAgICAgICAgcHJpbnRmICgiMHglOC44bHggIiwg KHVuc2lnbmVkIGxvbmcpIHNlZ21lbnQtPnBfdmFkZHIpOwogICAgICAgICAgICAgIHByaW50ZiAo IjB4JTguOGx4ICIsICh1bnNpZ25lZCBsb25nKSBzZWdtZW50LT5wX3BhZGRyKTsKICAgICAgICAg ICAgICBwcmludGYgKCIweCU1LjVseCAiLCAodW5zaWduZWQgbG9uZykgc2VnbWVudC0+cF9maWxl c3opOwogICAgICAgICAgICAgIHByaW50ZiAoIjB4JTUuNWx4ICIsICh1bnNpZ25lZCBsb25nKSBz ZWdtZW50LT5wX21lbXN6KTsKICAgICAgICAgICAgICBwcmludGYgKCIlYyVjJWMgIiwKICAgICAg ICAgICAgICAgICAgICAgIChzZWdtZW50LT5wX2ZsYWdzICYgKDEgPDwgMikgPyAnUicgOiAnICcp LAogICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQtPnBfZmxhZ3MgJiAoMSA8PCAxKSA/ICdX JyA6ICcgJyksCiAgICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC0+cF9mbGFncyAmICgxIDw8 IDApID8gJ0UnIDogJyAnKSk7CiAgICAgICAgICAgICAgcHJpbnRmICgiJSNseCIsICh1bnNpZ25l ZCBsb25nKSBzZWdtZW50LT5wX2FsaWduKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBp ZiAoZG9fd2lkZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICgodW5zaWduZWQgbG9u Zykgc2VnbWVudC0+cF9vZmZzZXQgPT0gc2VnbWVudC0+cF9vZmZzZXQpCiAgICAgICAgICAgICAg ICBwcmludGYgKCIweCU2LjZseCAiLCAodW5zaWduZWQgbG9uZykgc2VnbWVudC0+cF9vZmZzZXQp OwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg cHJpbnRfdm1hIChzZWdtZW50LT5wX29mZnNldCwgRlVMTF9IRVgpOwogICAgICAgICAgICAgICAg ICBwdXRjaGFyICgnICcpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBwcmludF92 bWEgKHNlZ21lbnQtPnBfdmFkZHIsIEZVTExfSEVYKTsKICAgICAgICAgICAgICBwdXRjaGFyICgn ICcpOwogICAgICAgICAgICAgIHByaW50X3ZtYSAoc2VnbWVudC0+cF9wYWRkciwgRlVMTF9IRVgp OwogICAgICAgICAgICAgIHB1dGNoYXIgKCcgJyk7CgogICAgICAgICAgICAgIGlmICgodW5zaWdu ZWQgbG9uZykgc2VnbWVudC0+cF9maWxlc3ogPT0gc2VnbWVudC0+cF9maWxlc3opCiAgICAgICAg ICAgICAgICBwcmludGYgKCIweCU2LjZseCAiLCAodW5zaWduZWQgbG9uZykgc2VnbWVudC0+cF9m aWxlc3opOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgcHJpbnRfdm1hIChzZWdtZW50LT5wX2ZpbGVzeiwgRlVMTF9IRVgpOwogICAgICAgICAg ICAgICAgICBwdXRjaGFyICgnICcpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBp ZiAoKHVuc2lnbmVkIGxvbmcpIHNlZ21lbnQtPnBfbWVtc3ogPT0gc2VnbWVudC0+cF9tZW1zeikK ICAgICAgICAgICAgICAgIHByaW50ZiAoIjB4JTYuNmx4IiwgKHVuc2lnbmVkIGxvbmcpIHNlZ21l bnQtPnBfbWVtc3opOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgcHJpbnRfdm1hIChzZWdtZW50LT5wX29mZnNldCwgRlVMTF9IRVgpOwogICAg ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBwcmludGYgKCIgJWMlYyVjICIsCiAgICAgICAg ICAgICAgICAgICAgICAoc2VnbWVudC0+cF9mbGFncyAmICgxIDw8IDIpID8gJ1InIDogJyAnKSwK ICAgICAgICAgICAgICAgICAgICAgIChzZWdtZW50LT5wX2ZsYWdzICYgKDEgPDwgMSkgPyAnVycg OiAnICcpLAogICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQtPnBfZmxhZ3MgJiAoMSA8PCAw KSA/ICdFJyA6ICcgJykpOwoKICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpIHNlZ21l bnQtPnBfYWxpZ24gPT0gc2VnbWVudC0+cF9hbGlnbikKICAgICAgICAgICAgICAgIHByaW50ZiAo IiUjbHgiLCAodW5zaWduZWQgbG9uZykgc2VnbWVudC0+cF9hbGlnbik7CiAgICAgICAgICAgICAg ZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBwcmludF92bWEgKHNlZ21l bnQtPnBfYWxpZ24sIFBSRUZJWF9IRVgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9 CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBwcmludF92bWEgKHNl Z21lbnQtPnBfb2Zmc2V0LCBGVUxMX0hFWCk7CiAgICAgICAgICAgICAgcHV0Y2hhciAoJyAnKTsK ICAgICAgICAgICAgICBwcmludF92bWEgKHNlZ21lbnQtPnBfdmFkZHIsIEZVTExfSEVYKTsKICAg ICAgICAgICAgICBwdXRjaGFyICgnICcpOwogICAgICAgICAgICAgIHByaW50X3ZtYSAoc2VnbWVu dC0+cF9wYWRkciwgRlVMTF9IRVgpOwogICAgICAgICAgICAgIHByaW50ZiAoIlxuICAgICAgICAg ICAgICAgICAiKTsKICAgICAgICAgICAgICBwcmludF92bWEgKHNlZ21lbnQtPnBfZmlsZXN6LCBG VUxMX0hFWCk7CiAgICAgICAgICAgICAgcHV0Y2hhciAoJyAnKTsKICAgICAgICAgICAgICBwcmlu dF92bWEgKHNlZ21lbnQtPnBfbWVtc3osIEZVTExfSEVYKTsKICAgICAgICAgICAgICBwcmludGYg KCIgICVjJWMlYyAgICAiLAogICAgICAgICAgICAgICAgICAgICAgKHNlZ21lbnQtPnBfZmxhZ3Mg JiAoMSA8PCAyKSA/ICdSJyA6ICcgJyksCiAgICAgICAgICAgICAgICAgICAgICAoc2VnbWVudC0+ cF9mbGFncyAmICgxIDw8IDEpID8gJ1cnIDogJyAnKSwKICAgICAgICAgICAgICAgICAgICAgIChz ZWdtZW50LT5wX2ZsYWdzICYgKDEgPDwgMCkgPyAnRScgOiAnICcpKTsKICAgICAgICAgICAgICBw cmludF92bWEgKHNlZ21lbnQtPnBfYWxpZ24sIEhFWCk7CiAgICAgICAgICAgIH0KICAgICAgICB9 CgogICAgICBzd2l0Y2ggKHNlZ21lbnQtPnBfdHlwZSkKICAgICAgICB7CiAgICAgICAgY2FzZSAx OgogICAgICAgICAgaWYgKGxvYWRhZGRyID09IC0xKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyBhbGlnbl9tYXNrID0gLXNlZ21lbnQtPnBfYWxpZ247CgogICAgICAg ICAgICAgIGlmIChhbGlnbl9tYXNrID09IDApCiAgICAgICAgICAgICAgICAtLWFsaWduX21hc2s7 CiAgICAgICAgICAgICAgbG9hZGFkZHIgPSAoKHNlZ21lbnQtPnBfdmFkZHIgJiBhbGlnbl9tYXNr KQogICAgICAgICAgICAgICAgICAgICAgICAgIC0gKHNlZ21lbnQtPnBfb2Zmc2V0ICYgYWxpZ25f bWFzaykpOwogICAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAyOgog ICAgICAgICAgaWYgKGR5bmFtaWNfYWRkcikKICAgICAgICAgICAgZXJyb3IgKCgibW9yZSB0aGFu IG9uZSBkeW5hbWljIHNlZ21lbnRcbiIpKTsKCiAgICAgICAgICBkeW5hbWljX2FkZHIgPSBzZWdt ZW50LT5wX29mZnNldDsKICAgICAgICAgIGR5bmFtaWNfc2l6ZSA9IHNlZ21lbnQtPnBfZmlsZXN6 OwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMzoKICAgICAgICAgIGlmIChmc2VlayAo ZmlsZSwgKGxvbmcpIHNlZ21lbnQtPnBfb2Zmc2V0LCAwKSkKICAgICAgICAgICAgZXJyb3IgKCgi VW5hYmxlIHRvIGZpbmQgcHJvZ3JhbSBpbnRlcnByZXRlciBuYW1lXG4iKSk7CiAgICAgICAgICBl bHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBwcm9ncmFtX2ludGVycHJldGVyWzBdID0g MDsKICAgICAgICAgICAgICBmc2NhbmYgKGZpbGUsICIlNjNzIiwgcHJvZ3JhbV9pbnRlcnByZXRl cik7CgogICAgICAgICAgICAgIGlmIChkb19zZWdtZW50cykKICAgICAgICAgICAgICAgIHByaW50 ZiAoKCJcbiAgICAgIFtSZXF1ZXN0aW5nIHByb2dyYW0gaW50ZXJwcmV0ZXI6ICVzXSIpLAogICAg ICAgICAgICAgICAgICAgIHByb2dyYW1faW50ZXJwcmV0ZXIpOwogICAgICAgICAgICB9CiAgICAg ICAgICBicmVhazsKICAgICAgICB9CgogICAgICBpZiAoZG9fc2VnbWVudHMpCiAgICAgICAgX0lP X3B1dGMgKCdcbicsIHN0ZG91dCk7CiAgICB9CgogIGlmIChsb2FkYWRkciA9PSAtMSkKICAgIHsK CiAgICAgIGxvYWRhZGRyID0gMDsKICAgIH0KCiAgaWYgKGRvX3NlZ21lbnRzICYmIHNlY3Rpb25f aGVhZGVycyAhPSAoKHZvaWQgKikwKSkKICAgIHsKICAgICAgcHJpbnRmICgoIlxuIFNlY3Rpb24g dG8gU2VnbWVudCBtYXBwaW5nOlxuIikpOwogICAgICBwcmludGYgKCgiICBTZWdtZW50IFNlY3Rp b25zLi4uXG4iKSk7CgogICAgICAoKHZvaWQpICgoc3RyaW5nX3RhYmxlICE9ICgodm9pZCAqKTAp KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoInN0cmluZ190YWJsZSAhPSAoKHZvaWQgKikwKSIsICJy ZWFkZWxmLmMiLCAzMjUzLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKCiAgICAgIGZvciAo aSA9IDA7IGkgPCBlbGZfaGVhZGVyLmVfcGhudW07IGkrKykKICAgICAgICB7CiAgICAgICAgICB1 bnNpZ25lZCBpbnQgajsKICAgICAgICAgIEVsZl9JbnRlcm5hbF9TaGRyICpzZWN0aW9uOwoKICAg ICAgICAgIHNlZ21lbnQgPSBwcm9ncmFtX2hlYWRlcnMgKyBpOwogICAgICAgICAgc2VjdGlvbiA9 IHNlY3Rpb25faGVhZGVyczsKCiAgICAgICAgICBwcmludGYgKCIgICAlMi4yZCAgICAgIiwgaSk7 CgogICAgICAgICAgZm9yIChqID0gMTsgaiA8IGVsZl9oZWFkZXIuZV9zaG51bTsgaisrLCBzZWN0 aW9uKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoc2VjdGlvbi0+c2hfc2l6ZSA+ IDAKCgogICAgICAgICAgICAgICAgICAmJiAoc2VjdGlvbi0+c2hfZmxhZ3MgJiAoMSA8PCAxKQog ICAgICAgICAgICAgICAgICAgICAgPyAoc2VjdGlvbi0+c2hfYWRkciA+PSBzZWdtZW50LT5wX3Zh ZGRyCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzZWN0aW9uLT5zaF9hZGRyICsgc2VjdGlv bi0+c2hfc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgPD0gc2VnbWVudC0+cF92YWRkciAr IHNlZ21lbnQtPnBfbWVtc3opCiAgICAgICAgICAgICAgICAgICAgICA6ICgoYmZkX3ZtYSkgc2Vj dGlvbi0+c2hfb2Zmc2V0ID49IHNlZ21lbnQtPnBfb2Zmc2V0CiAgICAgICAgICAgICAgICAgICAg ICAgICAmJiAoc2VjdGlvbi0+c2hfb2Zmc2V0ICsgc2VjdGlvbi0+c2hfc2l6ZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDw9IHNlZ21lbnQtPnBfb2Zmc2V0ICsgc2VnbWVudC0+cF9maWxl c3opKSkpCiAgICAgICAgICAgICAgICBwcmludGYgKCIlcyAiLCAoKHNlY3Rpb24pID09ICgodm9p ZCAqKTApID8gIjxub25lPiIgOiAoKHNlY3Rpb24pLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9s ZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWN0aW9uKS0+c2hfbmFtZSkp KTsKICAgICAgICAgICAgfQoKICAgICAgICAgIF9JT19wdXRjICgnXG4nLCBzdGRvdXQpOwogICAg ICAgIH0KICAgIH0KCiAgZnJlZSAocHJvZ3JhbV9oZWFkZXJzKTsKCiAgcmV0dXJuIDE7Cn0KCgpz dGF0aWMgaW50CmdldF8zMmJpdF9zZWN0aW9uX2hlYWRlcnMgKGZpbGUsIG51bSkKICAgICBGSUxF ICpmaWxlOwogICAgIHVuc2lnbmVkIGludCBudW07CnsKICBFbGYzMl9FeHRlcm5hbF9TaGRyICpz aGRyczsKICBFbGZfSW50ZXJuYWxfU2hkciAqaW50ZXJuYWw7CiAgdW5zaWduZWQgaW50IGk7Cgog IHNoZHJzID0gKChFbGYzMl9FeHRlcm5hbF9TaGRyICopCiAgICAgICAgICAgZ2V0X2RhdGEgKCgo dm9pZCAqKTApLCBmaWxlLCBlbGZfaGVhZGVyLmVfc2hvZmYsCiAgICAgICAgICAgICAgICAgICAg IGVsZl9oZWFkZXIuZV9zaGVudHNpemUgKiBudW0sCiAgICAgICAgICAgICAgICAgICAgICgic2Vj dGlvbiBoZWFkZXJzIikpKTsKICBpZiAoIXNoZHJzKQogICAgcmV0dXJuIDA7CgogIHNlY3Rpb25f aGVhZGVycyA9ICgoRWxmX0ludGVybmFsX1NoZHIgKikKICAgICAgICAgICAgICAgICAgICAgbWFs bG9jIChudW0gKiBzaXplb2YgKEVsZl9JbnRlcm5hbF9TaGRyKSkpOwoKICBpZiAoc2VjdGlvbl9o ZWFkZXJzID09ICgodm9pZCAqKTApKQogICAgewogICAgICBlcnJvciAoKCJPdXQgb2YgbWVtb3J5 XG4iKSk7CiAgICAgIHJldHVybiAwOwogICAgfQoKICBmb3IgKGkgPSAwLCBpbnRlcm5hbCA9IHNl Y3Rpb25faGVhZGVyczsKICAgICAgIGkgPCBudW07CiAgICAgICBpKyssIGludGVybmFsKyspCiAg ICB7CiAgICAgIGludGVybmFsLT5zaF9uYW1lID0gYnl0ZV9nZXQgKHNoZHJzW2ldLnNoX25hbWUs IHNpemVvZiAoc2hkcnNbaV0uc2hfbmFtZSkpOwogICAgICBpbnRlcm5hbC0+c2hfdHlwZSA9IGJ5 dGVfZ2V0IChzaGRyc1tpXS5zaF90eXBlLCBzaXplb2YgKHNoZHJzW2ldLnNoX3R5cGUpKTsKICAg ICAgaW50ZXJuYWwtPnNoX2ZsYWdzID0gYnl0ZV9nZXQgKHNoZHJzW2ldLnNoX2ZsYWdzLCBzaXpl b2YgKHNoZHJzW2ldLnNoX2ZsYWdzKSk7CiAgICAgIGludGVybmFsLT5zaF9hZGRyID0gYnl0ZV9n ZXQgKHNoZHJzW2ldLnNoX2FkZHIsIHNpemVvZiAoc2hkcnNbaV0uc2hfYWRkcikpOwogICAgICBp bnRlcm5hbC0+c2hfb2Zmc2V0ID0gYnl0ZV9nZXQgKHNoZHJzW2ldLnNoX29mZnNldCwgc2l6ZW9m IChzaGRyc1tpXS5zaF9vZmZzZXQpKTsKICAgICAgaW50ZXJuYWwtPnNoX3NpemUgPSBieXRlX2dl dCAoc2hkcnNbaV0uc2hfc2l6ZSwgc2l6ZW9mIChzaGRyc1tpXS5zaF9zaXplKSk7CiAgICAgIGlu dGVybmFsLT5zaF9saW5rID0gYnl0ZV9nZXQgKHNoZHJzW2ldLnNoX2xpbmssIHNpemVvZiAoc2hk cnNbaV0uc2hfbGluaykpOwogICAgICBpbnRlcm5hbC0+c2hfaW5mbyA9IGJ5dGVfZ2V0IChzaGRy c1tpXS5zaF9pbmZvLCBzaXplb2YgKHNoZHJzW2ldLnNoX2luZm8pKTsKICAgICAgaW50ZXJuYWwt PnNoX2FkZHJhbGlnbiA9IGJ5dGVfZ2V0IChzaGRyc1tpXS5zaF9hZGRyYWxpZ24sIHNpemVvZiAo c2hkcnNbaV0uc2hfYWRkcmFsaWduKSk7CiAgICAgIGludGVybmFsLT5zaF9lbnRzaXplID0gYnl0 ZV9nZXQgKHNoZHJzW2ldLnNoX2VudHNpemUsIHNpemVvZiAoc2hkcnNbaV0uc2hfZW50c2l6ZSkp OwogICAgfQoKICBmcmVlIChzaGRycyk7CgogIHJldHVybiAxOwp9CgpzdGF0aWMgaW50CmdldF82 NGJpdF9zZWN0aW9uX2hlYWRlcnMgKGZpbGUsIG51bSkKICAgICBGSUxFICpmaWxlOwogICAgIHVu c2lnbmVkIGludCBudW07CnsKICBFbGY2NF9FeHRlcm5hbF9TaGRyICpzaGRyczsKICBFbGZfSW50 ZXJuYWxfU2hkciAqaW50ZXJuYWw7CiAgdW5zaWduZWQgaW50IGk7CgogIHNoZHJzID0gKChFbGY2 NF9FeHRlcm5hbF9TaGRyICopCiAgICAgICAgICAgZ2V0X2RhdGEgKCgodm9pZCAqKTApLCBmaWxl LCBlbGZfaGVhZGVyLmVfc2hvZmYsCiAgICAgICAgICAgICAgICAgICAgIGVsZl9oZWFkZXIuZV9z aGVudHNpemUgKiBudW0sCiAgICAgICAgICAgICAgICAgICAgICgic2VjdGlvbiBoZWFkZXJzIikp KTsKICBpZiAoIXNoZHJzKQogICAgcmV0dXJuIDA7CgogIHNlY3Rpb25faGVhZGVycyA9ICgoRWxm X0ludGVybmFsX1NoZHIgKikKICAgICAgICAgICAgICAgICAgICAgbWFsbG9jIChudW0gKiBzaXpl b2YgKEVsZl9JbnRlcm5hbF9TaGRyKSkpOwoKICBpZiAoc2VjdGlvbl9oZWFkZXJzID09ICgodm9p ZCAqKTApKQogICAgewogICAgICBlcnJvciAoKCJPdXQgb2YgbWVtb3J5XG4iKSk7CiAgICAgIHJl dHVybiAwOwogICAgfQoKICBmb3IgKGkgPSAwLCBpbnRlcm5hbCA9IHNlY3Rpb25faGVhZGVyczsK ICAgICAgIGkgPCBudW07CiAgICAgICBpKyssIGludGVybmFsKyspCiAgICB7CiAgICAgIGludGVy bmFsLT5zaF9uYW1lID0gYnl0ZV9nZXQgKHNoZHJzW2ldLnNoX25hbWUsIHNpemVvZiAoc2hkcnNb aV0uc2hfbmFtZSkpOwogICAgICBpbnRlcm5hbC0+c2hfdHlwZSA9IGJ5dGVfZ2V0IChzaGRyc1tp XS5zaF90eXBlLCBzaXplb2YgKHNoZHJzW2ldLnNoX3R5cGUpKTsKICAgICAgaW50ZXJuYWwtPnNo X2ZsYWdzID0gYnl0ZV9nZXQgKHNoZHJzW2ldLnNoX2ZsYWdzLCAtOCk7CiAgICAgIGludGVybmFs LT5zaF9hZGRyID0gYnl0ZV9nZXQgKHNoZHJzW2ldLnNoX2FkZHIsIC04KTsKICAgICAgaW50ZXJu YWwtPnNoX3NpemUgPSBieXRlX2dldCAoc2hkcnNbaV0uc2hfc2l6ZSwgLTgpOwogICAgICBpbnRl cm5hbC0+c2hfZW50c2l6ZSA9IGJ5dGVfZ2V0IChzaGRyc1tpXS5zaF9lbnRzaXplLCAtOCk7CiAg ICAgIGludGVybmFsLT5zaF9saW5rID0gYnl0ZV9nZXQgKHNoZHJzW2ldLnNoX2xpbmssIHNpemVv ZiAoc2hkcnNbaV0uc2hfbGluaykpOwogICAgICBpbnRlcm5hbC0+c2hfaW5mbyA9IGJ5dGVfZ2V0 IChzaGRyc1tpXS5zaF9pbmZvLCBzaXplb2YgKHNoZHJzW2ldLnNoX2luZm8pKTsKICAgICAgaW50 ZXJuYWwtPnNoX29mZnNldCA9IGJ5dGVfZ2V0IChzaGRyc1tpXS5zaF9vZmZzZXQsIHNpemVvZiAo c2hkcnNbaV0uc2hfb2Zmc2V0KSk7CiAgICAgIGludGVybmFsLT5zaF9hZGRyYWxpZ24gPSBieXRl X2dldCAoc2hkcnNbaV0uc2hfYWRkcmFsaWduLCBzaXplb2YgKHNoZHJzW2ldLnNoX2FkZHJhbGln bikpOwogICAgfQoKICBmcmVlIChzaGRycyk7CgogIHJldHVybiAxOwp9CgpzdGF0aWMgRWxmX0lu dGVybmFsX1N5bSAqCmdldF8zMmJpdF9lbGZfc3ltYm9scyAoZmlsZSwgc2VjdGlvbikKICAgICBG SUxFICpmaWxlOwogICAgIEVsZl9JbnRlcm5hbF9TaGRyICpzZWN0aW9uOwp7CiAgdW5zaWduZWQg bG9uZyBudW1iZXI7CiAgRWxmMzJfRXh0ZXJuYWxfU3ltICplc3ltczsKICBFbGZfRXh0ZXJuYWxf U3ltX1NobmR4ICpzaG5keDsKICBFbGZfSW50ZXJuYWxfU3ltICppc3ltczsKICBFbGZfSW50ZXJu YWxfU3ltICpwc3ltOwogIHVuc2lnbmVkIGludCBqOwoKICBlc3ltcyA9ICgoRWxmMzJfRXh0ZXJu YWxfU3ltICopCiAgICAgICAgICAgZ2V0X2RhdGEgKCgodm9pZCAqKTApLCBmaWxlLCBzZWN0aW9u LT5zaF9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24tPnNoX3NpemUsICgic3lt Ym9scyIpKSk7CiAgaWYgKCFlc3ltcykKICAgIHJldHVybiAoKHZvaWQgKikwKTsKCiAgc2huZHgg PSAoKHZvaWQgKikwKTsKICBpZiAoc3ltdGFiX3NobmR4X2hkciAhPSAoKHZvaWQgKikwKQogICAg ICAmJiAoc3ltdGFiX3NobmR4X2hkci0+c2hfbGluawogICAgICAgICAgPT0gKHVuc2lnbmVkIGxv bmcpICgoc2VjdGlvbiAtIHNlY3Rpb25faGVhZGVycykgPCAweEZGMDAgPyAoc2VjdGlvbiAtIHNl Y3Rpb25faGVhZGVycykgOiAoc2VjdGlvbiAtIHNlY3Rpb25faGVhZGVycykgKyAoMHhGRkZGICsg MSAtIDB4RkYwMCkpKSkKICAgIHsKICAgICAgc2huZHggPSAoKEVsZl9FeHRlcm5hbF9TeW1fU2hu ZHggKikKICAgICAgICAgICAgICAgZ2V0X2RhdGEgKCgodm9pZCAqKTApLCBmaWxlLCBzeW10YWJf c2huZHhfaGRyLT5zaF9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzeW10YWJfc2hu ZHhfaGRyLT5zaF9zaXplLCAoInN5bXRhYiBzaG5keCIpKSk7CiAgICAgIGlmICghc2huZHgpCiAg ICAgICAgewogICAgICAgICAgZnJlZSAoZXN5bXMpOwogICAgICAgICAgcmV0dXJuICgodm9pZCAq KTApOwogICAgICAgIH0KICAgIH0KCiAgbnVtYmVyID0gc2VjdGlvbi0+c2hfc2l6ZSAvIHNlY3Rp b24tPnNoX2VudHNpemU7CiAgaXN5bXMgPSAoRWxmX0ludGVybmFsX1N5bSAqKSBtYWxsb2MgKG51 bWJlciAqIHNpemVvZiAoRWxmX0ludGVybmFsX1N5bSkpOwoKICBpZiAoaXN5bXMgPT0gKCh2b2lk ICopMCkpCiAgICB7CiAgICAgIGVycm9yICgoIk91dCBvZiBtZW1vcnlcbiIpKTsKICAgICAgaWYg KHNobmR4KQogICAgICAgIGZyZWUgKHNobmR4KTsKICAgICAgZnJlZSAoZXN5bXMpOwogICAgICBy ZXR1cm4gKCh2b2lkICopMCk7CiAgICB9CgogIGZvciAoaiA9IDAsIHBzeW0gPSBpc3ltczsKICAg ICAgIGogPCBudW1iZXI7CiAgICAgICBqKyssIHBzeW0rKykKICAgIHsKICAgICAgcHN5bS0+c3Rf bmFtZSA9IGJ5dGVfZ2V0IChlc3ltc1tqXS5zdF9uYW1lLCBzaXplb2YgKGVzeW1zW2pdLnN0X25h bWUpKTsKICAgICAgcHN5bS0+c3RfdmFsdWUgPSBieXRlX2dldCAoZXN5bXNbal0uc3RfdmFsdWUs IHNpemVvZiAoZXN5bXNbal0uc3RfdmFsdWUpKTsKICAgICAgcHN5bS0+c3Rfc2l6ZSA9IGJ5dGVf Z2V0IChlc3ltc1tqXS5zdF9zaXplLCBzaXplb2YgKGVzeW1zW2pdLnN0X3NpemUpKTsKICAgICAg cHN5bS0+c3Rfc2huZHggPSBieXRlX2dldCAoZXN5bXNbal0uc3Rfc2huZHgsIHNpemVvZiAoZXN5 bXNbal0uc3Rfc2huZHgpKTsKICAgICAgaWYgKHBzeW0tPnN0X3NobmR4ID09IDB4RkZGRiAmJiBz aG5keCAhPSAoKHZvaWQgKikwKSkKICAgICAgICBwc3ltLT5zdF9zaG5keAogICAgICAgICAgPSBi eXRlX2dldCAoKHVuc2lnbmVkIGNoYXIgKikgJnNobmR4W2pdLCBzaXplb2YgKHNobmR4W2pdKSk7 CiAgICAgIHBzeW0tPnN0X2luZm8gPSBieXRlX2dldCAoZXN5bXNbal0uc3RfaW5mbywgc2l6ZW9m IChlc3ltc1tqXS5zdF9pbmZvKSk7CiAgICAgIHBzeW0tPnN0X290aGVyID0gYnl0ZV9nZXQgKGVz eW1zW2pdLnN0X290aGVyLCBzaXplb2YgKGVzeW1zW2pdLnN0X290aGVyKSk7CiAgICB9CgogIGlm IChzaG5keCkKICAgIGZyZWUgKHNobmR4KTsKICBmcmVlIChlc3ltcyk7CgogIHJldHVybiBpc3lt czsKfQoKc3RhdGljIEVsZl9JbnRlcm5hbF9TeW0gKgpnZXRfNjRiaXRfZWxmX3N5bWJvbHMgKGZp bGUsIHNlY3Rpb24pCiAgICAgRklMRSAqZmlsZTsKICAgICBFbGZfSW50ZXJuYWxfU2hkciAqc2Vj dGlvbjsKewogIHVuc2lnbmVkIGxvbmcgbnVtYmVyOwogIEVsZjY0X0V4dGVybmFsX1N5bSAqZXN5 bXM7CiAgRWxmX0V4dGVybmFsX1N5bV9TaG5keCAqc2huZHg7CiAgRWxmX0ludGVybmFsX1N5bSAq aXN5bXM7CiAgRWxmX0ludGVybmFsX1N5bSAqcHN5bTsKICB1bnNpZ25lZCBpbnQgajsKCiAgZXN5 bXMgPSAoKEVsZjY0X0V4dGVybmFsX1N5bSAqKQogICAgICAgICAgIGdldF9kYXRhICgoKHZvaWQg KikwKSwgZmlsZSwgc2VjdGlvbi0+c2hfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICBzZWN0 aW9uLT5zaF9zaXplLCAoInN5bWJvbHMiKSkpOwogIGlmICghZXN5bXMpCiAgICByZXR1cm4gKCh2 b2lkICopMCk7CgogIHNobmR4ID0gKCh2b2lkICopMCk7CiAgaWYgKHN5bXRhYl9zaG5keF9oZHIg IT0gKCh2b2lkICopMCkKICAgICAgJiYgKHN5bXRhYl9zaG5keF9oZHItPnNoX2xpbmsKICAgICAg ICAgID09ICh1bnNpZ25lZCBsb25nKSAoKHNlY3Rpb24gLSBzZWN0aW9uX2hlYWRlcnMpIDwgMHhG RjAwID8gKHNlY3Rpb24gLSBzZWN0aW9uX2hlYWRlcnMpIDogKHNlY3Rpb24gLSBzZWN0aW9uX2hl YWRlcnMpICsgKDB4RkZGRiArIDEgLSAweEZGMDApKSkpCiAgICB7CiAgICAgIHNobmR4ID0gKChF bGZfRXh0ZXJuYWxfU3ltX1NobmR4ICopCiAgICAgICAgICAgICAgIGdldF9kYXRhICgoKHZvaWQg KikwKSwgZmlsZSwgc3ltdGFiX3NobmR4X2hkci0+c2hfb2Zmc2V0LAogICAgICAgICAgICAgICAg ICAgICAgICAgc3ltdGFiX3NobmR4X2hkci0+c2hfc2l6ZSwgKCJzeW10YWIgc2huZHgiKSkpOwog ICAgICBpZiAoIXNobmR4KQogICAgICAgIHsKICAgICAgICAgIGZyZWUgKGVzeW1zKTsKICAgICAg ICAgIHJldHVybiAoKHZvaWQgKikwKTsKICAgICAgICB9CiAgICB9CgogIG51bWJlciA9IHNlY3Rp b24tPnNoX3NpemUgLyBzZWN0aW9uLT5zaF9lbnRzaXplOwogIGlzeW1zID0gKEVsZl9JbnRlcm5h bF9TeW0gKikgbWFsbG9jIChudW1iZXIgKiBzaXplb2YgKEVsZl9JbnRlcm5hbF9TeW0pKTsKCiAg aWYgKGlzeW1zID09ICgodm9pZCAqKTApKQogICAgewogICAgICBlcnJvciAoKCJPdXQgb2YgbWVt b3J5XG4iKSk7CiAgICAgIGlmIChzaG5keCkKICAgICAgICBmcmVlIChzaG5keCk7CiAgICAgIGZy ZWUgKGVzeW1zKTsKICAgICAgcmV0dXJuICgodm9pZCAqKTApOwogICAgfQoKICBmb3IgKGogPSAw LCBwc3ltID0gaXN5bXM7CiAgICAgICBqIDwgbnVtYmVyOwogICAgICAgaisrLCBwc3ltKyspCiAg ICB7CiAgICAgIHBzeW0tPnN0X25hbWUgPSBieXRlX2dldCAoZXN5bXNbal0uc3RfbmFtZSwgc2l6 ZW9mIChlc3ltc1tqXS5zdF9uYW1lKSk7CiAgICAgIHBzeW0tPnN0X2luZm8gPSBieXRlX2dldCAo ZXN5bXNbal0uc3RfaW5mbywgc2l6ZW9mIChlc3ltc1tqXS5zdF9pbmZvKSk7CiAgICAgIHBzeW0t PnN0X290aGVyID0gYnl0ZV9nZXQgKGVzeW1zW2pdLnN0X290aGVyLCBzaXplb2YgKGVzeW1zW2pd LnN0X290aGVyKSk7CiAgICAgIHBzeW0tPnN0X3NobmR4ID0gYnl0ZV9nZXQgKGVzeW1zW2pdLnN0 X3NobmR4LCBzaXplb2YgKGVzeW1zW2pdLnN0X3NobmR4KSk7CiAgICAgIGlmIChwc3ltLT5zdF9z aG5keCA9PSAweEZGRkYgJiYgc2huZHggIT0gKCh2b2lkICopMCkpCiAgICAgICAgcHN5bS0+c3Rf c2huZHgKICAgICAgICAgID0gYnl0ZV9nZXQgKCh1bnNpZ25lZCBjaGFyICopICZzaG5keFtqXSwg c2l6ZW9mIChzaG5keFtqXSkpOwogICAgICBwc3ltLT5zdF92YWx1ZSA9IGJ5dGVfZ2V0IChlc3lt c1tqXS5zdF92YWx1ZSwgLTgpOwogICAgICBwc3ltLT5zdF9zaXplID0gYnl0ZV9nZXQgKGVzeW1z W2pdLnN0X3NpemUsIC04KTsKICAgIH0KCiAgaWYgKHNobmR4KQogICAgZnJlZSAoc2huZHgpOwog IGZyZWUgKGVzeW1zKTsKCiAgcmV0dXJuIGlzeW1zOwp9CgpzdGF0aWMgY29uc3QgY2hhciAqCmdl dF9lbGZfc2VjdGlvbl9mbGFncyAoc2hfZmxhZ3MpCiAgICAgYmZkX3ZtYSBzaF9mbGFnczsKewog IHN0YXRpYyBjaGFyIGJ1ZmZbMzJdOwoKICAqYnVmZiA9IDA7CgogIHdoaWxlIChzaF9mbGFncykK ICAgIHsKICAgICAgYmZkX3ZtYSBmbGFnOwoKICAgICAgZmxhZyA9IHNoX2ZsYWdzICYgLSBzaF9m bGFnczsKICAgICAgc2hfZmxhZ3MgJj0gfiBmbGFnOwoKICAgICAgc3dpdGNoIChmbGFnKQogICAg ICAgIHsKICAgICAgICBjYXNlICgxIDw8IDApOiBzdHJjYXQgKGJ1ZmYsICJXIik7IGJyZWFrOwog ICAgICAgIGNhc2UgKDEgPDwgMSk6IHN0cmNhdCAoYnVmZiwgIkEiKTsgYnJlYWs7CiAgICAgICAg Y2FzZSAoMSA8PCAyKTogc3RyY2F0IChidWZmLCAiWCIpOyBicmVhazsKICAgICAgICBjYXNlICgx IDw8IDQpOiBzdHJjYXQgKGJ1ZmYsICJNIik7IGJyZWFrOwogICAgICAgIGNhc2UgKDEgPDwgNSk6 IHN0cmNhdCAoYnVmZiwgIlMiKTsgYnJlYWs7CiAgICAgICAgY2FzZSAoMSA8PCA2KTogc3RyY2F0 IChidWZmLCAiSSIpOyBicmVhazsKICAgICAgICBjYXNlICgxIDw8IDcpOiBzdHJjYXQgKGJ1ZmYs ICJMIik7IGJyZWFrOwogICAgICAgIGNhc2UgKDEgPDwgOCk6IHN0cmNhdCAoYnVmZiwgIk8iKTsg YnJlYWs7CiAgICAgICAgY2FzZSAoMSA8PCA5KTogc3RyY2F0IChidWZmLCAiRyIpOyBicmVhazsK ICAgICAgICBjYXNlICgxIDw8IDEwKTogc3RyY2F0IChidWZmLCAiVCIpOyBicmVhazsKCiAgICAg ICAgZGVmYXVsdDoKICAgICAgICAgIGlmIChmbGFnICYgMHgwRkYwMDAwMCkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIHN0cmNhdCAoYnVmZiwgIm8iKTsKICAgICAgICAgICAgICBzaF9mbGFn cyAmPSB+IDB4MEZGMDAwMDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKGZsYWcg JiAweEYwMDAwMDAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyY2F0IChidWZmLCAi cCIpOwogICAgICAgICAgICAgIHNoX2ZsYWdzICY9IH4gMHhGMDAwMDAwMDsKICAgICAgICAgICAg fQogICAgICAgICAgZWxzZQogICAgICAgICAgICBzdHJjYXQgKGJ1ZmYsICJ4Iik7CiAgICAgICAg ICBicmVhazsKICAgICAgICB9CiAgICB9CgogIHJldHVybiBidWZmOwp9CgpzdGF0aWMgaW50CnBy b2Nlc3Nfc2VjdGlvbl9oZWFkZXJzIChmaWxlKQogICAgIEZJTEUgKmZpbGU7CnsKICBFbGZfSW50 ZXJuYWxfU2hkciAqc2VjdGlvbjsKICB1bnNpZ25lZCBpbnQgaTsKCiAgc2VjdGlvbl9oZWFkZXJz ID0gKCh2b2lkICopMCk7CgogIGlmIChlbGZfaGVhZGVyLmVfc2hudW0gPT0gMCkKICAgIHsKICAg ICAgaWYgKGRvX3NlY3Rpb25zKQogICAgICAgIHByaW50ZiAoKCJcblRoZXJlIGFyZSBubyBzZWN0 aW9ucyBpbiB0aGlzIGZpbGUuXG4iKSk7CgogICAgICByZXR1cm4gMTsKICAgIH0KCiAgaWYgKGRv X3NlY3Rpb25zICYmICFkb19oZWFkZXIpCiAgICBwcmludGYgKCgiVGhlcmUgYXJlICVkIHNlY3Rp b24gaGVhZGVycywgc3RhcnRpbmcgYXQgb2Zmc2V0IDB4JWx4OlxuIiksCiAgICAgICAgICAgIGVs Zl9oZWFkZXIuZV9zaG51bSwgKHVuc2lnbmVkIGxvbmcpIGVsZl9oZWFkZXIuZV9zaG9mZik7Cgog IGlmIChpc18zMmJpdF9lbGYpCiAgICB7CiAgICAgIGlmICghIGdldF8zMmJpdF9zZWN0aW9uX2hl YWRlcnMgKGZpbGUsIGVsZl9oZWFkZXIuZV9zaG51bSkpCiAgICAgICAgcmV0dXJuIDA7CiAgICB9 CiAgZWxzZSBpZiAoISBnZXRfNjRiaXRfc2VjdGlvbl9oZWFkZXJzIChmaWxlLCBlbGZfaGVhZGVy LmVfc2hudW0pKQogICAgcmV0dXJuIDA7CgoKICBzZWN0aW9uID0gKHNlY3Rpb25faGVhZGVycyAr ICgoZWxmX2hlYWRlci5lX3Noc3RybmR4KSA8IDB4RkYwMCA/IChlbGZfaGVhZGVyLmVfc2hzdHJu ZHgpIDogKChlbGZfaGVhZGVyLmVfc2hzdHJuZHgpIDw9IDB4RkZGRiA/IDAgOiAoZWxmX2hlYWRl ci5lX3Noc3RybmR4KSAtICgweEZGRkYgKyAxIC0gMHhGRjAwKSkpKTsKCiAgaWYgKHNlY3Rpb24t PnNoX3NpemUgIT0gMCkKICAgIHsKICAgICAgc3RyaW5nX3RhYmxlID0gKGNoYXIgKikgZ2V0X2Rh dGEgKCgodm9pZCAqKTApLCBmaWxlLCBzZWN0aW9uLT5zaF9vZmZzZXQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLT5zaF9zaXplLCAoInN0cmluZyB0YWJs ZSIpKTsKCiAgICAgIHN0cmluZ190YWJsZV9sZW5ndGggPSBzZWN0aW9uLT5zaF9zaXplOwogICAg fQoKCgogIGR5bmFtaWNfc3ltYm9scyA9ICgodm9pZCAqKTApOwogIGR5bmFtaWNfc3RyaW5ncyA9 ICgodm9pZCAqKTApOwogIGR5bmFtaWNfc3ltaW5mbyA9ICgodm9pZCAqKTApOwogIHN5bXRhYl9z aG5keF9oZHIgPSAoKHZvaWQgKikwKTsKCiAgZm9yIChpID0gMCwgc2VjdGlvbiA9IHNlY3Rpb25f aGVhZGVyczsKICAgICAgIGkgPCBlbGZfaGVhZGVyLmVfc2hudW07CiAgICAgICBpKyssIHNlY3Rp b24rKykKICAgIHsKICAgICAgY2hhciAqbmFtZSA9ICgoc2VjdGlvbikgPT0gKCh2b2lkICopMCkg PyAiPG5vbmU+IiA6ICgoc2VjdGlvbiktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlY3Rpb24pLT5zaF9uYW1lKSk7CgogICAg ICBpZiAoc2VjdGlvbi0+c2hfdHlwZSA9PSAxMSkKICAgICAgICB7CiAgICAgICAgICBpZiAoZHlu YW1pY19zeW1ib2xzICE9ICgodm9pZCAqKTApKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg ZXJyb3IgKCgiRmlsZSBjb250YWlucyBtdWx0aXBsZSBkeW5hbWljIHN5bWJvbCB0YWJsZXNcbiIp KTsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgIG51bV9k eW5hbWljX3N5bXMgPSBzZWN0aW9uLT5zaF9zaXplIC8gc2VjdGlvbi0+c2hfZW50c2l6ZTsKICAg ICAgICAgIGR5bmFtaWNfc3ltYm9scyA9IChpc18zMmJpdF9lbGYgPyBnZXRfMzJiaXRfZWxmX3N5 bWJvbHMgKGZpbGUsIHNlY3Rpb24pIDogZ2V0XzY0Yml0X2VsZl9zeW1ib2xzIChmaWxlLCBzZWN0 aW9uKSk7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChzZWN0aW9uLT5zaF90eXBlID09IDMKICAg ICAgICAgICAgICAgJiYgX19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9fczJfbGVu OyAoX19idWlsdGluX2NvbnN0YW50X3AgKG5hbWUpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wICgi LmR5bnN0ciIpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAobmFtZSksIF9fczJfbGVuID0gc3RybGVu ICgiLmR5bnN0ciIpLCAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKChuYW1lKSArIDEpIC0gKHNp emVfdCkoY29uc3Qgdm9pZCAqKShuYW1lKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgo c2l6ZV90KShjb25zdCB2b2lkICopKCgiLmR5bnN0ciIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2 b2lkICopKCIuZHluc3RyIikgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21wICgoX19j b25zdCBjaGFyICopIChuYW1lKSwgKF9fY29uc3QgY2hhciAqKSAoIi5keW5zdHIiKSwgKF9fczFf bGVuIDwgX19zMl9sZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9j b25zdGFudF9wIChuYW1lKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmFtZSkgKyAxKSAt IChzaXplX3QpKGNvbnN0IHZvaWQgKikobmFtZSkgPT0gMSkgJiYgKF9fczFfbGVuID0gc3RybGVu IChuYW1lKSwgX19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIi5keW5zdHIi KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIi5keW5zdHIiKSArIDEpIC0gKHNpemVfdCko Y29uc3Qgdm9pZCAqKSgiLmR5bnN0ciIpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0 ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKG5hbWUpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikoIi5keW5zdHIiKSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDAp IHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAobmFtZSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoIi5keW5zdHIiKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsg X19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo bmFtZSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo Ii5keW5zdHIiKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUp KVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZHlu c3RyIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKCIuZHluc3RyIik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMF0gLSBfX3MyWzBdKTsg aWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsxXSAtIF9fczJbMV0p OyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJdIC0gX19zMlsy XSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzNdIC0gX19zMlsz XSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIi5keW5zdHIi KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIi5keW5zdHIiKSArIDEpIC0gKHNpemVfdCko Y29uc3Qgdm9pZCAqKSgiLmR5bnN0ciIpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAoIi5k eW5zdHIiKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAobmFtZSkgJiYg KChzaXplX3QpKGNvbnN0IHZvaWQgKikoKG5hbWUpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lk ICopKG5hbWUpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0 ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsw XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoIi5keW5zdHIi KSlbMF0pOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzFdIC0g KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5keW5zdHIiKSlb MV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJdIC0gKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5keW5zdHIiKSlbMl0p OyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVszXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZHluc3RyIikpWzNdKTsgfSB9 IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg Kl9fczEgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUp OyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5keW5zdHIiKSlbMF07IGlmIChfX3MyX2xlbiA+IDAg JiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5keW5zdHIiKSlbMV0pOyBpZiAoX19zMl9s ZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZHluc3RyIikpWzJdKTsgaWYg KF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5keW5zdHIiKSlbM10p OyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKG5hbWUsICIuZHluc3RyIikpKSk7IH0pID09 IDApCiAgICAgICAgewogICAgICAgICAgaWYgKGR5bmFtaWNfc3RyaW5ncyAhPSAoKHZvaWQgKikw KSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGVycm9yICgoIkZpbGUgY29udGFpbnMgbXVs dGlwbGUgZHluYW1pYyBzdHJpbmcgdGFibGVzXG4iKSk7CiAgICAgICAgICAgICAgY29udGludWU7 CiAgICAgICAgICAgIH0KCiAgICAgICAgICBkeW5hbWljX3N0cmluZ3MgPSAoY2hhciAqKSBnZXRf ZGF0YSAoKCh2b2lkICopMCksIGZpbGUsIHNlY3Rpb24tPnNoX29mZnNldCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLT5zaF9zaXplLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZHluYW1pYyBzdHJp bmdzIikpOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoc2VjdGlvbi0+c2hfdHlwZSA9PSAxOCkK ICAgICAgICB7CiAgICAgICAgICBpZiAoc3ltdGFiX3NobmR4X2hkciAhPSAoKHZvaWQgKikwKSkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIGVycm9yICgoIkZpbGUgY29udGFpbnMgbXVsdGlw bGUgc3ltdGFiIHNobmR4IHRhYmxlc1xuIikpOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg ICAgICAgICB9CiAgICAgICAgICBzeW10YWJfc2huZHhfaGRyID0gc2VjdGlvbjsKICAgICAgICB9 CiAgICAgIGVsc2UgaWYgKChkb19kZWJ1Z2dpbmcgfHwgZG9fZGVidWdfaW5mbyB8fCBkb19kZWJ1 Z19hYmJyZXZzCiAgICAgICAgICAgICAgICB8fCBkb19kZWJ1Z19saW5lcyB8fCBkb19kZWJ1Z19w dWJuYW1lcyB8fCBkb19kZWJ1Z19hcmFuZ2VzCiAgICAgICAgICAgICAgICB8fCBkb19kZWJ1Z19m cmFtZXMgfHwgZG9fZGVidWdfbWFjaW5mbyB8fCBkb19kZWJ1Z19zdHIKICAgICAgICAgICAgICAg IHx8IGRvX2RlYnVnX2xvYykKICAgICAgICAgICAgICAgJiYgKF9fZXh0ZW5zaW9uX18gKF9fYnVp bHRpbl9jb25zdGFudF9wICg3KSAmJiAoKF9fYnVpbHRpbl9jb25zdGFudF9wIChuYW1lKSAmJiBz dHJsZW4gKG5hbWUpIDwgKChzaXplX3QpICg3KSkpIHx8IChfX2J1aWx0aW5fY29uc3RhbnRfcCAo Ii5kZWJ1Z18iKSAmJiBzdHJsZW4gKCIuZGVidWdfIikgPCAoKHNpemVfdCkgKDcpKSkpID8gX19l eHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9fczJfbGVuOyAoX19idWlsdGluX2NvbnN0 YW50X3AgKG5hbWUpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wICgiLmRlYnVnXyIpICYmIChfX3Mx X2xlbiA9IHN0cmxlbiAobmFtZSksIF9fczJfbGVuID0gc3RybGVuICgiLmRlYnVnXyIpLCAoISgo c2l6ZV90KShjb25zdCB2b2lkICopKChuYW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAq KShuYW1lKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lk ICopKCgiLmRlYnVnXyIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCIuZGVidWdfIikg PT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21wICgoX19jb25zdCBjaGFyICopIChuYW1l KSwgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z18iKSwgKF9fczFfbGVuIDwgX19zMl9sZW4gPyBf X3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChuYW1lKSAm JiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmFtZSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZv aWQgKikobmFtZSkgPT0gMSkgJiYgKF9fczFfbGVuID0gc3RybGVuIChuYW1lKSwgX19zMV9sZW4g PCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIi5kZWJ1Z18iKSAmJiAoKHNpemVfdCkoY29u c3Qgdm9pZCAqKSgoIi5kZWJ1Z18iKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiLmRl YnVnXyIpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0g KCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVswXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoIi5kZWJ1Z18iKSlb MF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzFdIC0gKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z18iKSlbMV0p OyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJdIC0gKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z18iKSlbMl0pOyBp ZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVszXSAtICgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZGVidWdfIikpWzNdKTsgfSB9IF9f cmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9f czIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZGVidWdf Iik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChuYW1lKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAm JiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsxXSAtIF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAx ICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+ IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzNdIC0gX19zMlszXSk7IH0gfSBfX3Jlc3VsdDsg fSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIi5kZWJ1Z18iKSAmJiAoKHNpemVfdCkoY29u c3Qgdm9pZCAqKSgoIi5kZWJ1Z18iKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiLmRl YnVnXyIpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAoIi5kZWJ1Z18iKSwgX19zMl9sZW4g PCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAobmFtZSkgJiYgKChzaXplX3QpKGNvbnN0IHZv aWQgKikoKG5hbWUpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5hbWUpID09IDEpID8g KF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVswXSAtICgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoIi5kZWJ1Z18iKSlbMF0pOyBpZiAoX19zMl9s ZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z18iKSlbMV0pOyBpZiAoX19zMl9sZW4g PiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z18iKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAy ICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKCIuZGVidWdfIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAo X19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpOyByZWdpc3RlciBpbnQgX19y ZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoIi5kZWJ1Z18iKSlbMF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkg eyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoIi5kZWJ1Z18iKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKCIuZGVidWdfIikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBf X3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z18iKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0p KSkgOiBzdHJjbXAgKG5hbWUsICIuZGVidWdfIikpKSk7IH0pIDogc3RybmNtcCAobmFtZSwgIi5k ZWJ1Z18iLCA3KSkpID09IDApCiAgICAgICAgewogICAgICAgICAgbmFtZSArPSA3OwoKICAgICAg ICAgIGlmIChkb19kZWJ1Z2dpbmcKICAgICAgICAgICAgICB8fCAoZG9fZGVidWdfaW5mbyAmJiAo X19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9fczJfbGVuOyAoX19idWlsdGluX2Nv bnN0YW50X3AgKG5hbWUpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wICgiaW5mbyIpICYmIChfX3Mx X2xlbiA9IHN0cmxlbiAobmFtZSksIF9fczJfbGVuID0gc3RybGVuICgiaW5mbyIpLCAoISgoc2l6 ZV90KShjb25zdCB2b2lkICopKChuYW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShu YW1lKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICop KCgiaW5mbyIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJpbmZvIikgPT0gMSkgfHwg X19zMl9sZW4gPj0gNCkpID8gbWVtY21wICgoX19jb25zdCBjaGFyICopIChuYW1lKSwgKF9fY29u c3QgY2hhciAqKSAoImluZm8iKSwgKF9fczFfbGVuIDwgX19zMl9sZW4gPyBfX3MxX2xlbiA6IF9f czJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChuYW1lKSAmJiAoKHNpemVfdCko Y29uc3Qgdm9pZCAqKSgobmFtZSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikobmFtZSkg PT0gMSkgJiYgKF9fczFfbGVuID0gc3RybGVuIChuYW1lKSwgX19zMV9sZW4gPCA0KSA/IChfX2J1 aWx0aW5fY29uc3RhbnRfcCAoImluZm8iKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImlu Zm8iKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiaW5mbyIpID09IDEpID8gKF9fZXh0 ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikoImluZm8iKSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYm IF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoImluZm8iKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVz dWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAobmFtZSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoImluZm8iKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09 IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKG5hbWUpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCJpbmZvIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCJpbmZvIik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMF0gLSBfX3MyWzBd KTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsxXSAtIF9fczJb MV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJdIC0gX19z MlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzNdIC0gX19z MlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoImluZm8i KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImluZm8iKSArIDEpIC0gKHNpemVfdCkoY29u c3Qgdm9pZCAqKSgiaW5mbyIpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAoImluZm8iKSwg X19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAobmFtZSkgJiYgKChzaXplX3Qp KGNvbnN0IHZvaWQgKikoKG5hbWUpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5hbWUp ID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVswXSAtICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoImluZm8iKSlbMF0pOyBpZiAo X19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzFdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImluZm8iKSlbMV0pOyBpZiAoX19zMl9s ZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImluZm8iKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAy ICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKCJpbmZvIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19l eHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpOyByZWdpc3RlciBpbnQgX19yZXN1 bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoImluZm8iKSlbMF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jl c3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoImluZm8iKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsg X19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKCJpbmZvIikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAw KSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoImluZm8iKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKG5h bWUsICJpbmZvIikpKSk7IH0pID09IDApKQogICAgICAgICAgICAgIHx8IChkb19kZWJ1Z19hYmJy ZXZzICYmIChfX2V4dGVuc2lvbl9fICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1 aWx0aW5fY29uc3RhbnRfcCAobmFtZSkgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKCJhYmJyZXYi KSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKG5hbWUpLCBfX3MyX2xlbiA9IHN0cmxlbiAoImFiYnJl diIpLCAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKChuYW1lKSArIDEpIC0gKHNpemVfdCkoY29u c3Qgdm9pZCAqKShuYW1lKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShj b25zdCB2b2lkICopKCgiYWJicmV2IikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoImFi YnJldiIpID09IDEpIHx8IF9fczJfbGVuID49IDQpKSA/IG1lbWNtcCAoKF9fY29uc3QgY2hhciAq KSAobmFtZSksIChfX2NvbnN0IGNoYXIgKikgKCJhYmJyZXYiKSwgKF9fczFfbGVuIDwgX19zMl9s ZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChu YW1lKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmFtZSkgKyAxKSAtIChzaXplX3QpKGNv bnN0IHZvaWQgKikobmFtZSkgPT0gMSkgJiYgKF9fczFfbGVuID0gc3RybGVuIChuYW1lKSwgX19z MV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoImFiYnJldiIpICYmICgoc2l6ZV90 KShjb25zdCB2b2lkICopKCgiYWJicmV2IikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKiko ImFiYnJldiIpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0 ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsw XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoImFiYnJldiIp KVswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMV0gLSAo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiYWJicmV2IikpWzFd KTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsyXSAtICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJhYmJyZXYiKSlbMl0pOyBp ZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVszXSAtICgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJhYmJyZXYiKSlbM10pOyB9IH0gX19y ZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19z MiA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImFiYnJldiIp OyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAobmFtZSkpWzBdIC0gX19zMlswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYg X19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChuYW1lKSlbMV0gLSBfX3MyWzFdKTsgaWYgKF9fczFfbGVuID4gMSAm JiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsyXSAtIF9fczJbMl0pOyBpZiAoX19zMV9sZW4gPiAy ICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVszXSAtIF9fczJbM10pOyB9IH0gX19yZXN1bHQ7IH0p KSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKCJhYmJyZXYiKSAmJiAoKHNpemVfdCkoY29uc3Qg dm9pZCAqKSgoImFiYnJldiIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJhYmJyZXYi KSA9PSAxKSAmJiAoX19zMl9sZW4gPSBzdHJsZW4gKCJhYmJyZXYiKSwgX19zMl9sZW4gPCA0KSA/ IChfX2J1aWx0aW5fY29uc3RhbnRfcCAobmFtZSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKiko KG5hbWUpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5hbWUpID09IDEpID8gKF9fZXh0 ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikoImFiYnJldiIpKVswXSk7IGlmIChfX3MyX2xlbiA+IDAg JiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopICgiYWJicmV2IikpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBf X3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKG5hbWUpKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCJhYmJyZXYiKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVz dWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKG5hbWUpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKCJhYmJyZXYiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lv bl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMSA9IChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSk7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9IF9f czFbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiYWJi cmV2IikpWzBdOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQg PSAoX19zMVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCJhYmJyZXYiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19y ZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKCJhYmJyZXYiKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDAp IF9fcmVzdWx0ID0gKF9fczFbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopICgiYWJicmV2IikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogc3RyY21wIChu YW1lLCAiYWJicmV2IikpKSk7IH0pID09IDApKQogICAgICAgICAgICAgIHx8IChkb19kZWJ1Z19s aW5lcyAmJiAoX19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9fczJfbGVuOyAoX19i dWlsdGluX2NvbnN0YW50X3AgKG5hbWUpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wICgibGluZSIp ICYmIChfX3MxX2xlbiA9IHN0cmxlbiAobmFtZSksIF9fczJfbGVuID0gc3RybGVuICgibGluZSIp LCAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKChuYW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qg dm9pZCAqKShuYW1lKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25z dCB2b2lkICopKCgibGluZSIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJsaW5lIikg PT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21wICgoX19jb25zdCBjaGFyICopIChuYW1l KSwgKF9fY29uc3QgY2hhciAqKSAoImxpbmUiKSwgKF9fczFfbGVuIDwgX19zMl9sZW4gPyBfX3Mx X2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChuYW1lKSAmJiAo KHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmFtZSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQg KikobmFtZSkgPT0gMSkgJiYgKF9fczFfbGVuID0gc3RybGVuIChuYW1lKSwgX19zMV9sZW4gPCA0 KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoImxpbmUiKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9p ZCAqKSgoImxpbmUiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgibGluZSIpID09IDEp ID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVswXSAtICgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoImxpbmUiKSlbMF0pOyBpZiAoX19zMV9s ZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImxpbmUiKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAx ICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoImxpbmUiKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9f cmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKG5hbWUpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKCJsaW5lIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNp b25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJsaW5lIik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9 ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMF0g LSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0 ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsx XSAtIF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1 bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkp WzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1 bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkp WzNdIC0gX19zMlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRf cCAoImxpbmUiKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImxpbmUiKSArIDEpIC0gKHNp emVfdCkoY29uc3Qgdm9pZCAqKSgibGluZSIpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAo ImxpbmUiKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAobmFtZSkgJiYg KChzaXplX3QpKGNvbnN0IHZvaWQgKikoKG5hbWUpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lk ICopKG5hbWUpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0 ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsw XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoImxpbmUiKSlb MF0pOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzFdIC0gKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImxpbmUiKSlbMV0pOyBp ZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImxpbmUiKSlbMl0pOyBpZiAoX19z Ml9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVszXSAtICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJsaW5lIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9 KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpOyByZWdpc3RlciBp bnQgX19yZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoImxpbmUiKSlbMF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0g MCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoImxpbmUiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKCJsaW5lIikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jl c3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoImxpbmUiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBz dHJjbXAgKG5hbWUsICJsaW5lIikpKSk7IH0pID09IDApKQogICAgICAgICAgICAgIHx8IChkb19k ZWJ1Z19wdWJuYW1lcyAmJiAoX19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9fczJf bGVuOyAoX19idWlsdGluX2NvbnN0YW50X3AgKG5hbWUpICYmIF9fYnVpbHRpbl9jb25zdGFudF9w ICgicHVibmFtZXMiKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKG5hbWUpLCBfX3MyX2xlbiA9IHN0 cmxlbiAoInB1Ym5hbWVzIiksICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKG5hbWUpICsgMSkg LSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5hbWUpID09IDEpIHx8IF9fczFfbGVuID49IDQpICYm ICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJwdWJuYW1lcyIpICsgMSkgLSAoc2l6ZV90KShj b25zdCB2b2lkICopKCJwdWJuYW1lcyIpID09IDEpIHx8IF9fczJfbGVuID49IDQpKSA/IG1lbWNt cCAoKF9fY29uc3QgY2hhciAqKSAobmFtZSksIChfX2NvbnN0IGNoYXIgKikgKCJwdWJuYW1lcyIp LCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDogX19zMl9sZW4pICsgMSkgOiAoX19i dWlsdGluX2NvbnN0YW50X3AgKG5hbWUpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChuYW1l KSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShuYW1lKSA9PSAxKSAmJiAoX19zMV9sZW4g PSBzdHJsZW4gKG5hbWUpLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wICgi cHVibmFtZXMiKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoInB1Ym5hbWVzIikgKyAxKSAt IChzaXplX3QpKGNvbnN0IHZvaWQgKikoInB1Ym5hbWVzIikgPT0gMSkgPyAoX19leHRlbnNpb25f XyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSgicHVibmFtZXMiKSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9f cmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAobmFtZSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoInB1Ym5hbWVzIikpWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jl c3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKG5hbWUpKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKCJwdWJuYW1lcyIpKVsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1 bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAobmFtZSkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoInB1Ym5hbWVzIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNp b25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJwdWJuYW1lcyIpOyByZWdpc3RlciBpbnQgX19yZXN1 bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkp WzBdIC0gX19zMlswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jl c3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1l KSlbMV0gLSBfX3MyWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9f cmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5h bWUpKVsyXSAtIF9fczJbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9f cmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5h bWUpKVszXSAtIF9fczJbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiAoX19idWlsdGluX2NvbnN0 YW50X3AgKCJwdWJuYW1lcyIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgicHVibmFtZXMi KSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgicHVibmFtZXMiKSA9PSAxKSAmJiAoX19z Ml9sZW4gPSBzdHJsZW4gKCJwdWJuYW1lcyIpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9j b25zdGFudF9wIChuYW1lKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmFtZSkgKyAxKSAt IChzaXplX3QpKGNvbnN0IHZvaWQgKikobmFtZSkgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyBy ZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAobmFtZSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSgicHVibmFtZXMiKSlbMF0pOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAobmFtZSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoInB1Ym5hbWVzIikpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9 PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKG5hbWUpKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKCJwdWJuYW1lcyIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0g MCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAobmFtZSkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoInB1Ym5hbWVzIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAo eyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKG5hbWUpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSBfX3MxWzBd IC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoInB1Ym5hbWVz IikpWzBdOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo X19zMVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJw dWJuYW1lcyIpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jl c3VsdCA9IChfX3MxWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoInB1Ym5hbWVzIikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAw KSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoInB1Ym5hbWVzIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogc3RyY21w IChuYW1lLCAicHVibmFtZXMiKSkpKTsgfSkgPT0gMCkpCiAgICAgICAgICAgICAgfHwgKGRvX2Rl YnVnX2FyYW5nZXMgJiYgKF9fZXh0ZW5zaW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xl bjsgKF9fYnVpbHRpbl9jb25zdGFudF9wIChuYW1lKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAo ImFyYW5nZXMiKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKG5hbWUpLCBfX3MyX2xlbiA9IHN0cmxl biAoImFyYW5nZXMiKSwgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmFtZSkgKyAxKSAtIChz aXplX3QpKGNvbnN0IHZvaWQgKikobmFtZSkgPT0gMSkgfHwgX19zMV9sZW4gPj0gNCkgJiYgKCEo KHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImFyYW5nZXMiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qg dm9pZCAqKSgiYXJhbmdlcyIpID09IDEpIHx8IF9fczJfbGVuID49IDQpKSA/IG1lbWNtcCAoKF9f Y29uc3QgY2hhciAqKSAobmFtZSksIChfX2NvbnN0IGNoYXIgKikgKCJhcmFuZ2VzIiksIChfX3Mx X2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikgKyAxKSA6IChfX2J1aWx0aW5f Y29uc3RhbnRfcCAobmFtZSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKG5hbWUpICsgMSkg LSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5hbWUpID09IDEpICYmIChfX3MxX2xlbiA9IHN0cmxl biAobmFtZSksIF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKCJhcmFuZ2Vz IikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJhcmFuZ2VzIikgKyAxKSAtIChzaXplX3Qp KGNvbnN0IHZvaWQgKikoImFyYW5nZXMiKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lz dGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopIChuYW1lKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopKCJhcmFuZ2VzIikpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAw KSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKG5hbWUpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCJhcmFuZ2VzIikpWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7 IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KG5hbWUpKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCJhcmFuZ2VzIikpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jl c3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1l KSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiYXJh bmdlcyIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25z dCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopICgiYXJhbmdlcyIpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzBdIC0gX19zMlswXSk7 IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMV0gLSBfX3MyWzFd KTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsyXSAtIF9fczJb Ml0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVszXSAtIF9fczJb M10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKCJhcmFuZ2Vz IikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJhcmFuZ2VzIikgKyAxKSAtIChzaXplX3Qp KGNvbnN0IHZvaWQgKikoImFyYW5nZXMiKSA9PSAxKSAmJiAoX19zMl9sZW4gPSBzdHJsZW4gKCJh cmFuZ2VzIiksIF9fczJfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKG5hbWUpICYm ICgoc2l6ZV90KShjb25zdCB2b2lkICopKChuYW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9p ZCAqKShuYW1lKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3Vs dCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlb MF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKCJhcmFuZ2Vz IikpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0g KCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsxXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJhcmFuZ2VzIikp WzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsyXSAtICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJhcmFuZ2VzIikpWzJd KTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbM10gLSAoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiYXJhbmdlcyIpKVszXSk7IH0g fSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFy ICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1l KTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJhcmFuZ2VzIikpWzBdOyBpZiAoX19zMl9sZW4gPiAw ICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsxXSAtICgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJhcmFuZ2VzIikpWzFdKTsgaWYgKF9fczJf bGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMl0gLSAoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiYXJhbmdlcyIpKVsyXSk7IGlm IChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJhcmFuZ2VzIikpWzNd KTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogc3RyY21wIChuYW1lLCAiYXJhbmdlcyIpKSkpOyB9KSA9 PSAwKSkKICAgICAgICAgICAgICB8fCAoZG9fZGVidWdfZnJhbWVzICYmIChfX2V4dGVuc2lvbl9f ICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAobmFt ZSkgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKCJmcmFtZSIpICYmIChfX3MxX2xlbiA9IHN0cmxl biAobmFtZSksIF9fczJfbGVuID0gc3RybGVuICgiZnJhbWUiKSwgKCEoKHNpemVfdCkoY29uc3Qg dm9pZCAqKSgobmFtZSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikobmFtZSkgPT0gMSkg fHwgX19zMV9sZW4gPj0gNCkgJiYgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImZyYW1lIikg KyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoImZyYW1lIikgPT0gMSkgfHwgX19zMl9sZW4g Pj0gNCkpID8gbWVtY21wICgoX19jb25zdCBjaGFyICopIChuYW1lKSwgKF9fY29uc3QgY2hhciAq KSAoImZyYW1lIiksIChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikg KyAxKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAobmFtZSkgJiYgKChzaXplX3QpKGNvbnN0IHZv aWQgKikoKG5hbWUpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5hbWUpID09IDEpICYm IChfX3MxX2xlbiA9IHN0cmxlbiAobmFtZSksIF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGluX2Nv bnN0YW50X3AgKCJmcmFtZSIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiZnJhbWUiKSAr IDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiZnJhbWUiKSA9PSAxKSA/IChfX2V4dGVuc2lv bl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopKCJmcmFtZSIpKVswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19y ZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChuYW1lKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopICgiZnJhbWUiKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAobmFtZSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoImZyYW1lIikpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAw KSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop IChuYW1lKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICgiZnJhbWUiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9f Y29uc3QgdW5zaWduZWQgY2hhciAqX19zMiA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoImZyYW1lIik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMF0gLSBfX3MyWzBd KTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsxXSAtIF9fczJb MV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJdIC0gX19z MlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzNdIC0gX19z MlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoImZyYW1l IikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJmcmFtZSIpICsgMSkgLSAoc2l6ZV90KShj b25zdCB2b2lkICopKCJmcmFtZSIpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAoImZyYW1l IiksIF9fczJfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKG5hbWUpICYmICgoc2l6 ZV90KShjb25zdCB2b2lkICopKChuYW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShu YW1lKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMF0gLSAo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKCJmcmFtZSIpKVswXSk7 IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMV0gLSAoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiZnJhbWUiKSlbMV0pOyBpZiAo X19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImZyYW1lIikpWzJdKTsgaWYgKF9fczJf bGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgiZnJhbWUiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0p KSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMSA9IChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSk7IHJlZ2lzdGVyIGlu dCBfX3Jlc3VsdCA9IF9fczFbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopICgiZnJhbWUiKSlbMF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0g MCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoImZyYW1lIikpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3Vs dCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopICgiZnJhbWUiKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9f cmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKF9fczFbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopICgiZnJhbWUiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkg OiBzdHJjbXAgKG5hbWUsICJmcmFtZSIpKSkpOyB9KSA9PSAwKSkKICAgICAgICAgICAgICB8fCAo ZG9fZGVidWdfbWFjaW5mbyAmJiAoX19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9f czJfbGVuOyAoX19idWlsdGluX2NvbnN0YW50X3AgKG5hbWUpICYmIF9fYnVpbHRpbl9jb25zdGFu dF9wICgibWFjaW5mbyIpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAobmFtZSksIF9fczJfbGVuID0g c3RybGVuICgibWFjaW5mbyIpLCAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKChuYW1lKSArIDEp IC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShuYW1lKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAm JiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgibWFjaW5mbyIpICsgMSkgLSAoc2l6ZV90KShj b25zdCB2b2lkICopKCJtYWNpbmZvIikgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21w ICgoX19jb25zdCBjaGFyICopIChuYW1lKSwgKF9fY29uc3QgY2hhciAqKSAoIm1hY2luZm8iKSwg KF9fczFfbGVuIDwgX19zMl9sZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVp bHRpbl9jb25zdGFudF9wIChuYW1lKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmFtZSkg KyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikobmFtZSkgPT0gMSkgJiYgKF9fczFfbGVuID0g c3RybGVuIChuYW1lKSwgX19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIm1h Y2luZm8iKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIm1hY2luZm8iKSArIDEpIC0gKHNp emVfdCkoY29uc3Qgdm9pZCAqKSgibWFjaW5mbyIpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsg cmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKG5hbWUpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikoIm1hY2luZm8iKSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAobmFtZSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoIm1hY2luZm8iKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09 IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAobmFtZSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoIm1hY2luZm8iKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDAp IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KG5hbWUpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCJtYWNpbmZvIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCJtYWNpbmZvIik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMF0gLSBfX3My WzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsxXSAtIF9f czJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJdIC0g X19zMlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzNdIC0g X19zMlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIm1h Y2luZm8iKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIm1hY2luZm8iKSArIDEpIC0gKHNp emVfdCkoY29uc3Qgdm9pZCAqKSgibWFjaW5mbyIpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxl biAoIm1hY2luZm8iKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAobmFt ZSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKG5hbWUpICsgMSkgLSAoc2l6ZV90KShjb25z dCB2b2lkICopKG5hbWUpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9f cmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5h bWUpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoIm1h Y2luZm8iKSlbMF0pOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1 bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkp WzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIm1hY2lu Zm8iKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQg PSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJd IC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIm1hY2luZm8i KSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVszXSAtICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJtYWNpbmZvIikpWzNd KTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KG5hbWUpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIm1hY2luZm8iKSlbMF07IGlmIChfX3MyX2xl biA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIm1hY2luZm8iKSlbMV0pOyBpZiAo X19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJtYWNpbmZvIikpWzJd KTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNd IC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIm1hY2luZm8i KSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKG5hbWUsICJtYWNpbmZvIikpKSk7 IH0pID09IDApKQogICAgICAgICAgICAgIHx8IChkb19kZWJ1Z19zdHIgJiYgKF9fZXh0ZW5zaW9u X18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFudF9wIChu YW1lKSAmJiBfX2J1aWx0aW5fY29uc3RhbnRfcCAoInN0ciIpICYmIChfX3MxX2xlbiA9IHN0cmxl biAobmFtZSksIF9fczJfbGVuID0gc3RybGVuICgic3RyIiksICghKChzaXplX3QpKGNvbnN0IHZv aWQgKikoKG5hbWUpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5hbWUpID09IDEpIHx8 IF9fczFfbGVuID49IDQpICYmICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJzdHIiKSArIDEp IC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgic3RyIikgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkp ID8gbWVtY21wICgoX19jb25zdCBjaGFyICopIChuYW1lKSwgKF9fY29uc3QgY2hhciAqKSAoInN0 ciIpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDogX19zMl9sZW4pICsgMSkgOiAo X19idWlsdGluX2NvbnN0YW50X3AgKG5hbWUpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChu YW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShuYW1lKSA9PSAxKSAmJiAoX19zMV9s ZW4gPSBzdHJsZW4gKG5hbWUpLCBfX3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9w ICgic3RyIikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJzdHIiKSArIDEpIC0gKHNpemVf dCkoY29uc3Qgdm9pZCAqKSgic3RyIikgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3Rl ciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAobmFtZSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSgic3RyIikpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9f cmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5h bWUpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJz dHIiKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQg PSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJd IC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoInN0ciIpKVsy XSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzNdIC0gKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoInN0ciIpKVszXSk7IH0gfSBf X3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpf X3MyID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgic3RyIik7 IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChuYW1lKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBf X3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKG5hbWUpKVsxXSAtIF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYm IF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+IDIg JiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzNdIC0gX19zMlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkp KSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoInN0ciIpICYmICgoc2l6ZV90KShjb25zdCB2b2lk ICopKCgic3RyIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoInN0ciIpID09IDEpICYm IChfX3MyX2xlbiA9IHN0cmxlbiAoInN0ciIpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9j b25zdGFudF9wIChuYW1lKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmFtZSkgKyAxKSAt IChzaXplX3QpKGNvbnN0IHZvaWQgKikobmFtZSkgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyBy ZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAobmFtZSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSgic3RyIikpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAw KSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKG5hbWUpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCJzdHIiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19y ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFt ZSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoInN0 ciIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzNdIC0g KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoInN0ciIpKVszXSk7 IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBj aGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChu YW1lKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJzdHIiKSlbMF07IGlmIChfX3MyX2xlbiA+IDAg JiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoInN0ciIpKVsxXSk7IGlmIChfX3MyX2xlbiA+ IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzJdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoInN0ciIpKVsyXSk7IGlmIChfX3MyX2xl biA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJzdHIiKSlbM10pOyB9IH0gX19yZXN1 bHQ7IH0pKSkgOiBzdHJjbXAgKG5hbWUsICJzdHIiKSkpKTsgfSkgPT0gMCkpCiAgICAgICAgICAg ICAgfHwgKGRvX2RlYnVnX2xvYyAmJiAoX19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4s IF9fczJfbGVuOyAoX19idWlsdGluX2NvbnN0YW50X3AgKG5hbWUpICYmIF9fYnVpbHRpbl9jb25z dGFudF9wICgibG9jIikgJiYgKF9fczFfbGVuID0gc3RybGVuIChuYW1lKSwgX19zMl9sZW4gPSBz dHJsZW4gKCJsb2MiKSwgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmFtZSkgKyAxKSAtIChz aXplX3QpKGNvbnN0IHZvaWQgKikobmFtZSkgPT0gMSkgfHwgX19zMV9sZW4gPj0gNCkgJiYgKCEo KHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoImxvYyIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lk ICopKCJsb2MiKSA9PSAxKSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0IGNo YXIgKikgKG5hbWUpLCAoX19jb25zdCBjaGFyICopICgibG9jIiksIChfX3MxX2xlbiA8IF9fczJf bGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikgKyAxKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAo bmFtZSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKG5hbWUpICsgMSkgLSAoc2l6ZV90KShj b25zdCB2b2lkICopKG5hbWUpID09IDEpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAobmFtZSksIF9f czFfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKCJsb2MiKSAmJiAoKHNpemVfdCko Y29uc3Qgdm9pZCAqKSgoImxvYyIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJsb2Mi KSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMF0gLSAoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKCJsb2MiKSlbMF0pOyBpZiAo X19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzFdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImxvYyIpKVsxXSk7IGlmIChfX3MxX2xl biA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgibG9jIikpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAm JiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChuYW1lKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopICgibG9jIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRl bnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJsb2MiKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0 ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsw XSAtIF9fczJbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1 bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkp WzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jl c3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1l KSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jl c3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1l KSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9fYnVpbHRpbl9jb25zdGFu dF9wICgibG9jIikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJsb2MiKSArIDEpIC0gKHNp emVfdCkoY29uc3Qgdm9pZCAqKSgibG9jIikgPT0gMSkgJiYgKF9fczJfbGVuID0gc3RybGVuICgi bG9jIiksIF9fczJfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKG5hbWUpICYmICgo c2l6ZV90KShjb25zdCB2b2lkICopKChuYW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAq KShuYW1lKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9 ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMF0g LSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKCJsb2MiKSlbMF0p OyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzFdIC0gKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoImxvYyIpKVsxXSk7IGlmIChf X3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMl0gLSAoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgibG9jIikpWzJdKTsgaWYgKF9fczJfbGVu ID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopICgibG9jIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAo X19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpOyByZWdpc3RlciBpbnQgX19y ZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoImxvYyIpKVswXTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9f cmVzdWx0ID0gKF9fczFbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopICgibG9jIikpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7 IF9fcmVzdWx0ID0gKF9fczFbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopICgibG9jIikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAw KSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoImxvYyIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IHN0cmNtcCAobmFt ZSwgImxvYyIpKSkpOyB9KSA9PSAwKSkKICAgICAgICAgICAgICApCiAgICAgICAgICAgIHJlcXVl c3RfZHVtcCAoaSwgKDEgPDwgMikpOwogICAgICAgIH0KCiAgICAgIGVsc2UgaWYgKChkb19kZWJ1 Z2dpbmcgfHwgZG9fZGVidWdfaW5mbykKICAgICAgICAgICAgICAgJiYgKF9fZXh0ZW5zaW9uX18g KF9fYnVpbHRpbl9jb25zdGFudF9wICgxNykgJiYgKChfX2J1aWx0aW5fY29uc3RhbnRfcCAobmFt ZSkgJiYgc3RybGVuIChuYW1lKSA8ICgoc2l6ZV90KSAoMTcpKSkgfHwgKF9fYnVpbHRpbl9jb25z dGFudF9wICgiLmdudS5saW5rb25jZS53aS4iKSAmJiBzdHJsZW4gKCIuZ251LmxpbmtvbmNlLndp LiIpIDwgKChzaXplX3QpICgxNykpKSkgPyBfX2V4dGVuc2lvbl9fICh7IHNpemVfdCBfX3MxX2xl biwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAobmFtZSkgJiYgX19idWlsdGluX2Nv bnN0YW50X3AgKCIuZ251LmxpbmtvbmNlLndpLiIpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAobmFt ZSksIF9fczJfbGVuID0gc3RybGVuICgiLmdudS5saW5rb25jZS53aS4iKSwgKCEoKHNpemVfdCko Y29uc3Qgdm9pZCAqKSgobmFtZSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikobmFtZSkg PT0gMSkgfHwgX19zMV9sZW4gPj0gNCkgJiYgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIi5n bnUubGlua29uY2Uud2kuIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoIi5nbnUubGlu a29uY2Uud2kuIikgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21wICgoX19jb25zdCBj aGFyICopIChuYW1lKSwgKF9fY29uc3QgY2hhciAqKSAoIi5nbnUubGlua29uY2Uud2kuIiksIChf X3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikgKyAxKSA6IChfX2J1aWx0 aW5fY29uc3RhbnRfcCAobmFtZSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKG5hbWUpICsg MSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5hbWUpID09IDEpICYmIChfX3MxX2xlbiA9IHN0 cmxlbiAobmFtZSksIF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKCIuZ251 LmxpbmtvbmNlLndpLiIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiLmdudS5saW5rb25j ZS53aS4iKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiLmdudS5saW5rb25jZS53aS4i KSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMF0gLSAoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKCIuZ251LmxpbmtvbmNlLndp LiIpKVswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9 ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMV0g LSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLmdudS5saW5r b25jZS53aS4iKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19y ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFt ZSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5n bnUubGlua29uY2Uud2kuIikpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAw KSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop IChuYW1lKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICgiLmdudS5saW5rb25jZS53aS4iKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVu c2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMiA9IChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5nbnUubGlua29uY2Uud2kuIik7IHJlZ2lzdGVy IGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopIChuYW1lKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9 PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKG5hbWUpKVsxXSAtIF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAobmFtZSkpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1 bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAobmFtZSkpWzNdIC0gX19zMlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1 aWx0aW5fY29uc3RhbnRfcCAoIi5nbnUubGlua29uY2Uud2kuIikgJiYgKChzaXplX3QpKGNvbnN0 IHZvaWQgKikoKCIuZ251LmxpbmtvbmNlLndpLiIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lk ICopKCIuZ251LmxpbmtvbmNlLndpLiIpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAoIi5n bnUubGlua29uY2Uud2kuIiksIF9fczJfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3Ag KG5hbWUpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChuYW1lKSArIDEpIC0gKHNpemVfdCko Y29uc3Qgdm9pZCAqKShuYW1lKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGlu dCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop IChuYW1lKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop KCIuZ251LmxpbmtvbmNlLndpLiIpKVswXSk7IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQg PT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopIChuYW1lKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopICgiLmdudS5saW5rb25jZS53aS4iKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9f cmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAobmFtZSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoIi5nbnUubGlua29uY2Uud2kuIikpWzJdKTsgaWYgKF9fczJfbGVuID4g MiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopICgiLmdudS5saW5rb25jZS53aS4iKSlbM10pOyB9IH0gX19yZXN1 bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMSA9 IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSk7IHJlZ2lz dGVyIGludCBfX3Jlc3VsdCA9IF9fczFbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopICgiLmdudS5saW5rb25jZS53aS4iKSlbMF07IGlmIChfX3MyX2xlbiA+ IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5nbnUubGlua29uY2Uud2kuIikpWzFd KTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFb Ml0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLmdudS5s aW5rb25jZS53aS4iKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9f cmVzdWx0ID0gKF9fczFbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopICgiLmdudS5saW5rb25jZS53aS4iKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBz dHJjbXAgKG5hbWUsICIuZ251LmxpbmtvbmNlLndpLiIpKSkpOyB9KSA6IHN0cm5jbXAgKG5hbWUs ICIuZ251LmxpbmtvbmNlLndpLiIsIDE3KSkpID09IDApCiAgICAgICAgcmVxdWVzdF9kdW1wIChp LCAoMSA8PCAyKSk7CiAgICAgIGVsc2UgaWYgKGRvX2RlYnVnX2ZyYW1lcyAmJiBfX2V4dGVuc2lv bl9fICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAo bmFtZSkgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKCIuZWhfZnJhbWUiKSAmJiAoX19zMV9sZW4g PSBzdHJsZW4gKG5hbWUpLCBfX3MyX2xlbiA9IHN0cmxlbiAoIi5laF9mcmFtZSIpLCAoISgoc2l6 ZV90KShjb25zdCB2b2lkICopKChuYW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShu YW1lKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICop KCgiLmVoX2ZyYW1lIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoIi5laF9mcmFtZSIp ID09IDEpIHx8IF9fczJfbGVuID49IDQpKSA/IG1lbWNtcCAoKF9fY29uc3QgY2hhciAqKSAobmFt ZSksIChfX2NvbnN0IGNoYXIgKikgKCIuZWhfZnJhbWUiKSwgKF9fczFfbGVuIDwgX19zMl9sZW4g PyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChuYW1l KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmFtZSkgKyAxKSAtIChzaXplX3QpKGNvbnN0 IHZvaWQgKikobmFtZSkgPT0gMSkgJiYgKF9fczFfbGVuID0gc3RybGVuIChuYW1lKSwgX19zMV9s ZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIi5laF9mcmFtZSIpICYmICgoc2l6ZV90 KShjb25zdCB2b2lkICopKCgiLmVoX2ZyYW1lIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQg KikoIi5laF9mcmFtZSIpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9f cmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5h bWUpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoIi5l aF9mcmFtZSIpKVswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jl c3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1l KSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLmVo X2ZyYW1lIikpWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUp KVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZWhf ZnJhbWUiKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0 ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsz XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZWhfZnJh bWUiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3Qg dW5zaWduZWQgY2hhciAqX19zMiA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoIi5laF9mcmFtZSIpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzBdIC0gX19zMlswXSk7 IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMV0gLSBfX3MyWzFd KTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsyXSAtIF9fczJb Ml0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVszXSAtIF9fczJb M10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKCIuZWhfZnJh bWUiKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIi5laF9mcmFtZSIpICsgMSkgLSAoc2l6 ZV90KShjb25zdCB2b2lkICopKCIuZWhfZnJhbWUiKSA9PSAxKSAmJiAoX19zMl9sZW4gPSBzdHJs ZW4gKCIuZWhfZnJhbWUiKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAo bmFtZSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKG5hbWUpICsgMSkgLSAoc2l6ZV90KShj b25zdCB2b2lkICopKG5hbWUpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50 IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KG5hbWUpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKiko Ii5laF9mcmFtZSIpKVswXSk7IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBf X3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChu YW1lKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgi LmVoX2ZyYW1lIikpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9f cmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5h bWUpKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIu ZWhfZnJhbWUiKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUp KVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZWhf ZnJhbWUiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29u c3QgdW5zaWduZWQgY2hhciAqX19zMSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAobmFtZSk7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9IF9fczFbMF0gLSAoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLmVoX2ZyYW1lIikpWzBd OyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsx XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZWhfZnJh bWUiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQg PSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCIuZWhfZnJhbWUiKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9f cmVzdWx0ID0gKF9fczFbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopICgiLmVoX2ZyYW1lIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogc3RyY21wIChu YW1lLCAiLmVoX2ZyYW1lIikpKSk7IH0pID09IDApCiAgICAgICAgcmVxdWVzdF9kdW1wIChpLCAo MSA8PCAyKSk7CiAgICB9CgogIGlmICghIGRvX3NlY3Rpb25zKQogICAgcmV0dXJuIDE7CgogIGlm IChlbGZfaGVhZGVyLmVfc2hudW0gPiAxKQogICAgcHJpbnRmICgoIlxuU2VjdGlvbiBIZWFkZXJz OlxuIikpOwogIGVsc2UKICAgIHByaW50ZiAoKCJcblNlY3Rpb24gSGVhZGVyOlxuIikpOwoKICBp ZiAoaXNfMzJiaXRfZWxmKQogICAgcHJpbnRmCiAgICAgICgoIiAgW05yXSBOYW1lICAgICAgICAg ICAgICBUeXBlICAgICAgICAgICAgQWRkciAgICAgT2ZmICAgIFNpemUgICBFUyBGbGcgTGsgSW5m IEFsXG4iKSk7CiAgZWxzZSBpZiAoZG9fd2lkZSkKICAgIHByaW50ZgogICAgICAoKCIgIFtOcl0g TmFtZSAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgIEFkZHJlc3MgICAgICAgICAgT2ZmICAg IFNpemUgICBFUyBGbGcgTGsgSW5mIEFsXG4iKSk7CiAgZWxzZQogICAgewogICAgICBwcmludGYg KCgiICBbTnJdIE5hbWUgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgQWRkcmVzcyAgICAg ICAgICAgT2Zmc2V0XG4iKSk7CiAgICAgIHByaW50ZiAoKCIgICAgICAgU2l6ZSAgICAgICAgICAg ICAgRW50U2l6ZSAgICAgICAgICBGbGFncyAgTGluayAgSW5mbyAgQWxpZ25cbiIpKTsKICAgIH0K CiAgZm9yIChpID0gMCwgc2VjdGlvbiA9IHNlY3Rpb25faGVhZGVyczsKICAgICAgIGkgPCBlbGZf aGVhZGVyLmVfc2hudW07CiAgICAgICBpKyssIHNlY3Rpb24rKykKICAgIHsKICAgICAgcHJpbnRm ICgiICBbJTJ1XSAlLTE3LjE3cyAlLTE1LjE1cyAiLAogICAgICAgICAgICAgICgoaSkgPCAweEZG MDAgPyAoaSkgOiAoaSkgKyAoMHhGRkZGICsgMSAtIDB4RkYwMCkpLAogICAgICAgICAgICAgICgo c2VjdGlvbikgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjdGlvbiktPnNoX25hbWUg Pj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNl Y3Rpb24pLT5zaF9uYW1lKSksCiAgICAgICAgICAgICAgZ2V0X3NlY3Rpb25fdHlwZV9uYW1lIChz ZWN0aW9uLT5zaF90eXBlKSk7CgogICAgICBpZiAoaXNfMzJiaXRfZWxmKQogICAgICAgIHsKICAg ICAgICAgIHByaW50X3ZtYSAoc2VjdGlvbi0+c2hfYWRkciwgTE9OR19IRVgpOwoKICAgICAgICAg IHByaW50ZiAoICIgJTYuNmx4ICU2LjZseCAlMi4ybHgiLAogICAgICAgICAgICAgICAgICAgKHVu c2lnbmVkIGxvbmcpIHNlY3Rpb24tPnNoX29mZnNldCwKICAgICAgICAgICAgICAgICAgICh1bnNp Z25lZCBsb25nKSBzZWN0aW9uLT5zaF9zaXplLAogICAgICAgICAgICAgICAgICAgKHVuc2lnbmVk IGxvbmcpIHNlY3Rpb24tPnNoX2VudHNpemUpOwoKICAgICAgICAgIHByaW50ZiAoIiAlM3MgIiwg Z2V0X2VsZl9zZWN0aW9uX2ZsYWdzIChzZWN0aW9uLT5zaF9mbGFncykpOwoKICAgICAgICAgIHBy aW50ZiAoIiUybGQgJTNseCAlMmxkXG4iLAogICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9u Zykgc2VjdGlvbi0+c2hfbGluaywKICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIHNl Y3Rpb24tPnNoX2luZm8sCiAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBzZWN0aW9u LT5zaF9hZGRyYWxpZ24pOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoZG9fd2lkZSkKICAgICAg ICB7CiAgICAgICAgICBwcmludF92bWEgKHNlY3Rpb24tPnNoX2FkZHIsIExPTkdfSEVYKTsKCiAg ICAgICAgICBpZiAoKGxvbmcpIHNlY3Rpb24tPnNoX29mZnNldCA9PSBzZWN0aW9uLT5zaF9vZmZz ZXQpCiAgICAgICAgICAgIHByaW50ZiAoIiAlNi42bHgiLCAodW5zaWduZWQgbG9uZykgc2VjdGlv bi0+c2hfb2Zmc2V0KTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAg IHB1dGNoYXIgKCcgJyk7CiAgICAgICAgICAgICAgcHJpbnRfdm1hIChzZWN0aW9uLT5zaF9vZmZz ZXQsIExPTkdfSEVYKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmICgodW5zaWduZWQgbG9u Zykgc2VjdGlvbi0+c2hfc2l6ZSA9PSBzZWN0aW9uLT5zaF9zaXplKQogICAgICAgICAgICBwcmlu dGYgKCIgJTYuNmx4IiwgKHVuc2lnbmVkIGxvbmcpIHNlY3Rpb24tPnNoX3NpemUpOwogICAgICAg ICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgcHV0Y2hhciAoJyAnKTsKICAgICAg ICAgICAgICBwcmludF92bWEgKHNlY3Rpb24tPnNoX3NpemUsIExPTkdfSEVYKTsKICAgICAgICAg ICAgfQoKICAgICAgICAgIGlmICgodW5zaWduZWQgbG9uZykgc2VjdGlvbi0+c2hfZW50c2l6ZSA9 PSBzZWN0aW9uLT5zaF9lbnRzaXplKQogICAgICAgICAgICBwcmludGYgKCIgJTIuMmx4IiwgKHVu c2lnbmVkIGxvbmcpIHNlY3Rpb24tPnNoX2VudHNpemUpOwogICAgICAgICAgZWxzZQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgcHV0Y2hhciAoJyAnKTsKICAgICAgICAgICAgICBwcmludF92 bWEgKHNlY3Rpb24tPnNoX2VudHNpemUsIExPTkdfSEVYKTsKICAgICAgICAgICAgfQoKICAgICAg ICAgIHByaW50ZiAoIiAlM3MgIiwgZ2V0X2VsZl9zZWN0aW9uX2ZsYWdzIChzZWN0aW9uLT5zaF9m bGFncykpOwoKICAgICAgICAgIHByaW50ZiAoIiUybGQgJTNseCAiLAogICAgICAgICAgICAgICAg ICAodW5zaWduZWQgbG9uZykgc2VjdGlvbi0+c2hfbGluaywKICAgICAgICAgICAgICAgICAgKHVu c2lnbmVkIGxvbmcpIHNlY3Rpb24tPnNoX2luZm8pOwoKICAgICAgICAgIGlmICgodW5zaWduZWQg bG9uZykgc2VjdGlvbi0+c2hfYWRkcmFsaWduID09IHNlY3Rpb24tPnNoX2FkZHJhbGlnbikKICAg ICAgICAgICAgcHJpbnRmICgiJTJsZFxuIiwgKHVuc2lnbmVkIGxvbmcpIHNlY3Rpb24tPnNoX2Fk ZHJhbGlnbik7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBwcmlu dF92bWEgKHNlY3Rpb24tPnNoX2FkZHJhbGlnbiwgREVDKTsKICAgICAgICAgICAgICBwdXRjaGFy ICgnXG4nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAg ICAgICAgIHB1dGNoYXIgKCcgJyk7CiAgICAgICAgICBwcmludF92bWEgKHNlY3Rpb24tPnNoX2Fk ZHIsIExPTkdfSEVYKTsKICAgICAgICAgIGlmICgobG9uZykgc2VjdGlvbi0+c2hfb2Zmc2V0ID09 IHNlY3Rpb24tPnNoX29mZnNldCkKICAgICAgICAgICAgcHJpbnRmICgiICAlOC44bHgiLCAodW5z aWduZWQgbG9uZykgc2VjdGlvbi0+c2hfb2Zmc2V0KTsKICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgewogICAgICAgICAgICAgIHByaW50ZiAoIiAgIik7CiAgICAgICAgICAgICAgcHJpbnRfdm1h IChzZWN0aW9uLT5zaF9vZmZzZXQsIExPTkdfSEVYKTsKICAgICAgICAgICAgfQogICAgICAgICAg cHJpbnRmICgiXG4gICAgICAgIik7CiAgICAgICAgICBwcmludF92bWEgKHNlY3Rpb24tPnNoX3Np emUsIExPTkdfSEVYKTsKICAgICAgICAgIHByaW50ZiAoIiAgIik7CiAgICAgICAgICBwcmludF92 bWEgKHNlY3Rpb24tPnNoX2VudHNpemUsIExPTkdfSEVYKTsKCiAgICAgICAgICBwcmludGYgKCIg JTNzICIsIGdldF9lbGZfc2VjdGlvbl9mbGFncyAoc2VjdGlvbi0+c2hfZmxhZ3MpKTsKCiAgICAg ICAgICBwcmludGYgKCIgICAgICUybGQgICAlM2x4ICAgICAlbGRcbiIsCiAgICAgICAgICAgICAg ICAgICh1bnNpZ25lZCBsb25nKSBzZWN0aW9uLT5zaF9saW5rLAogICAgICAgICAgICAgICAgICAo dW5zaWduZWQgbG9uZykgc2VjdGlvbi0+c2hfaW5mbywKICAgICAgICAgICAgICAgICAgKHVuc2ln bmVkIGxvbmcpIHNlY3Rpb24tPnNoX2FkZHJhbGlnbik7CiAgICAgICAgfQogICAgfQoKICBwcmlu dGYgKCgiS2V5IHRvIEZsYWdzOlxuICBXICh3cml0ZSksIEEgKGFsbG9jKSwgWCAoZXhlY3V0ZSks IE0gKG1lcmdlKSwgUyAoc3RyaW5ncylcbiAgSSAoaW5mbyksIEwgKGxpbmsgb3JkZXIpLCBHIChn cm91cCksIHggKHVua25vd24pXG4gIE8gKGV4dHJhIE9TIHByb2Nlc3NpbmcgcmVxdWlyZWQpIG8g KE9TIHNwZWNpZmljKSwgcCAocHJvY2Vzc29yIHNwZWNpZmljKVxuIikpOwoKCgoKICByZXR1cm4g MTsKfQoKCnN0YXRpYyBpbnQKcHJvY2Vzc19yZWxvY3MgKGZpbGUpCiAgICAgRklMRSAqZmlsZTsK ewogIHVuc2lnbmVkIGxvbmcgcmVsX3NpemU7CiAgdW5zaWduZWQgbG9uZyByZWxfb2Zmc2V0OwoK CiAgaWYgKCFkb19yZWxvYykKICAgIHJldHVybiAxOwoKICBpZiAoZG9fdXNpbmdfZHluYW1pYykK ICAgIHsKICAgICAgaW50IGlzX3JlbGEgPSAwOwoKICAgICAgcmVsX3NpemUgPSAwOwogICAgICBy ZWxfb2Zmc2V0ID0gMDsKCiAgICAgIGlmIChkeW5hbWljX2luZm9bMTddKQogICAgICAgIHsKICAg ICAgICAgIHJlbF9vZmZzZXQgPSBkeW5hbWljX2luZm9bMTddOwogICAgICAgICAgcmVsX3NpemUg PSBkeW5hbWljX2luZm9bMThdOwogICAgICAgICAgaXNfcmVsYSA9IDA7CiAgICAgICAgfQogICAg ICBlbHNlIGlmIChkeW5hbWljX2luZm9bN10pCiAgICAgICAgewogICAgICAgICAgcmVsX29mZnNl dCA9IGR5bmFtaWNfaW5mb1s3XTsKICAgICAgICAgIHJlbF9zaXplID0gZHluYW1pY19pbmZvWzhd OwogICAgICAgICAgaXNfcmVsYSA9IDE7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChkeW5hbWlj X2luZm9bMjNdKQogICAgICAgIHsKICAgICAgICAgIHJlbF9vZmZzZXQgPSBkeW5hbWljX2luZm9b MjNdOwogICAgICAgICAgcmVsX3NpemUgPSBkeW5hbWljX2luZm9bMl07CgogICAgICAgICAgc3dp dGNoIChkeW5hbWljX2luZm9bMjBdKQogICAgICAgICAgICB7CiAgICAgICAgICAgIGNhc2UgMTc6 CiAgICAgICAgICAgICAgaXNfcmVsYSA9IDA7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgIGNhc2UgNzoKICAgICAgICAgICAgICBpc19yZWxhID0gMTsKICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBpc19yZWxhID0gLTE7CiAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBpZiAocmVsX3Np emUpCiAgICAgICAgewogICAgICAgICAgcHJpbnRmCiAgICAgICAgICAgICgoIlxuUmVsb2NhdGlv biBzZWN0aW9uIGF0IG9mZnNldCAweCVseCBjb250YWlucyAlbGQgYnl0ZXM6XG4iKSwKICAgICAg ICAgICAgIHJlbF9vZmZzZXQsIHJlbF9zaXplKTsKCiAgICAgICAgICBkdW1wX3JlbG9jYXRpb25z IChmaWxlLCByZWxfb2Zmc2V0IC0gbG9hZGFkZHIsIHJlbF9zaXplLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgZHluYW1pY19zeW1ib2xzLCBudW1fZHluYW1pY19zeW1zLCBkeW5hbWljX3N0 cmluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19yZWxhKTsKICAgICAgICB9CiAg ICAgIGVsc2UKICAgICAgICBwcmludGYgKCgiXG5UaGVyZSBhcmUgbm8gZHluYW1pYyByZWxvY2F0 aW9ucyBpbiB0aGlzIGZpbGUuXG4iKSk7CiAgICB9CiAgZWxzZQogICAgewogICAgICBFbGZfSW50 ZXJuYWxfU2hkciAqc2VjdGlvbjsKICAgICAgdW5zaWduZWQgbG9uZyBpOwogICAgICBpbnQgZm91 bmQgPSAwOwoKICAgICAgZm9yIChpID0gMCwgc2VjdGlvbiA9IHNlY3Rpb25faGVhZGVyczsKICAg ICAgICAgICBpIDwgZWxmX2hlYWRlci5lX3NobnVtOwogICAgICAgICAgIGkrKywgc2VjdGlvbisr KQogICAgICAgIHsKICAgICAgICAgIGlmICggc2VjdGlvbi0+c2hfdHlwZSAhPSA0CiAgICAgICAg ICAgICAgJiYgc2VjdGlvbi0+c2hfdHlwZSAhPSA5KQogICAgICAgICAgICBjb250aW51ZTsKCiAg ICAgICAgICByZWxfb2Zmc2V0ID0gc2VjdGlvbi0+c2hfb2Zmc2V0OwogICAgICAgICAgcmVsX3Np emUgPSBzZWN0aW9uLT5zaF9zaXplOwoKICAgICAgICAgIGlmIChyZWxfc2l6ZSkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIEVsZl9JbnRlcm5hbF9TaGRyICpzdHJzZWM7CiAgICAgICAgICAg ICAgRWxmX0ludGVybmFsX1N5bSAqc3ltdGFiOwogICAgICAgICAgICAgIGNoYXIgKnN0cnRhYjsK ICAgICAgICAgICAgICBpbnQgaXNfcmVsYTsKICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG5z eW1zOwoKICAgICAgICAgICAgICBwcmludGYgKCgiXG5SZWxvY2F0aW9uIHNlY3Rpb24gIikpOwoK ICAgICAgICAgICAgICBpZiAoc3RyaW5nX3RhYmxlID09ICgodm9pZCAqKTApKQogICAgICAgICAg ICAgICAgcHJpbnRmICgiJWQiLCBzZWN0aW9uLT5zaF9uYW1lKTsKICAgICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICBwcmludGYgKCgiJyVzJyIpLCAoKHNlY3Rpb24pID09ICgodm9pZCAq KTApID8gIjxub25lPiIgOiAoKHNlY3Rpb24pLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5n dGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWN0aW9uKS0+c2hfbmFtZSkpKTsK CiAgICAgICAgICAgICAgcHJpbnRmICgoIiBhdCBvZmZzZXQgMHglbHggY29udGFpbnMgJWx1IGVu dHJpZXM6XG4iKSwKICAgICAgICAgICAgICAgICByZWxfb2Zmc2V0LCAodW5zaWduZWQgbG9uZykg KHJlbF9zaXplIC8gc2VjdGlvbi0+c2hfZW50c2l6ZSkpOwoKICAgICAgICAgICAgICBzeW10YWIg PSAoKHZvaWQgKikwKTsKICAgICAgICAgICAgICBzdHJ0YWIgPSAoKHZvaWQgKikwKTsKICAgICAg ICAgICAgICBuc3ltcyA9IDA7CiAgICAgICAgICAgICAgaWYgKHNlY3Rpb24tPnNoX2xpbmspCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIEVsZl9JbnRlcm5hbF9TaGRyICpzeW1z ZWM7CgogICAgICAgICAgICAgICAgICBzeW1zZWMgPSAoc2VjdGlvbl9oZWFkZXJzICsgKChzZWN0 aW9uLT5zaF9saW5rKSA8IDB4RkYwMCA/IChzZWN0aW9uLT5zaF9saW5rKSA6ICgoc2VjdGlvbi0+ c2hfbGluaykgPD0gMHhGRkZGID8gMCA6IChzZWN0aW9uLT5zaF9saW5rKSAtICgweEZGRkYgKyAx IC0gMHhGRjAwKSkpKTsKICAgICAgICAgICAgICAgICAgbnN5bXMgPSBzeW1zZWMtPnNoX3NpemUg LyBzeW1zZWMtPnNoX2VudHNpemU7CiAgICAgICAgICAgICAgICAgIHN5bXRhYiA9IChpc18zMmJp dF9lbGYgPyBnZXRfMzJiaXRfZWxmX3N5bWJvbHMgKGZpbGUsIHN5bXNlYykgOiBnZXRfNjRiaXRf ZWxmX3N5bWJvbHMgKGZpbGUsIHN5bXNlYykpOwoKICAgICAgICAgICAgICAgICAgaWYgKHN5bXRh YiA9PSAoKHZvaWQgKikwKSkKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAg ICAgICAgICAgIHN0cnNlYyA9IChzZWN0aW9uX2hlYWRlcnMgKyAoKHN5bXNlYy0+c2hfbGluaykg PCAweEZGMDAgPyAoc3ltc2VjLT5zaF9saW5rKSA6ICgoc3ltc2VjLT5zaF9saW5rKSA8PSAweEZG RkYgPyAwIDogKHN5bXNlYy0+c2hfbGluaykgLSAoMHhGRkZGICsgMSAtIDB4RkYwMCkpKSk7Cgog ICAgICAgICAgICAgICAgICBzdHJ0YWIgPSAoY2hhciAqKSBnZXRfZGF0YSAoKCh2b2lkICopMCks IGZpbGUsIHN0cnNlYy0+c2hfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3Ryc2VjLT5zaF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCJzdHJpbmcgdGFibGUiKSk7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgaXNfcmVsYSA9IHNlY3Rpb24tPnNoX3R5cGUgPT0gNDsKCiAgICAgICAg ICAgICAgZHVtcF9yZWxvY2F0aW9ucyAoZmlsZSwgcmVsX29mZnNldCwgcmVsX3NpemUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltdGFiLCBuc3ltcywgc3RydGFiLCBpc19yZWxh KTsKCiAgICAgICAgICAgICAgaWYgKHN0cnRhYikKICAgICAgICAgICAgICAgIGZyZWUgKHN0cnRh Yik7CiAgICAgICAgICAgICAgaWYgKHN5bXRhYikKICAgICAgICAgICAgICAgIGZyZWUgKHN5bXRh Yik7CgogICAgICAgICAgICAgIGZvdW5kID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAg ICAgIGlmICghIGZvdW5kKQogICAgICAgIHByaW50ZiAoKCJcblRoZXJlIGFyZSBubyByZWxvY2F0 aW9ucyBpbiB0aGlzIGZpbGUuXG4iKSk7CiAgICB9CgogIHJldHVybiAxOwp9CgojIDEgIi4vdW53 aW5kLWlhNjQuaCIgMQojIDMxICIuL3Vud2luZC1pYTY0LmgiCmV4dGVybiBjb25zdCB1bnNpZ25l ZCBjaGFyICogdW53X2RlY29kZSAoY29uc3QgdW5zaWduZWQgY2hhciAqLCBpbnQsIHZvaWQgKik7 CiMgMzkzOSAicmVhZGVsZi5jIiAyCgoKCgoKc3RydWN0IGFic2FkZHIKICB7CiAgICB1bnNpZ25l ZCBzaG9ydCBzZWN0aW9uOwogICAgYmZkX3ZtYSBvZmZzZXQ7CiAgfTsKCnN0cnVjdCB1bndfYXV4 X2luZm8KICB7CiAgICBzdHJ1Y3QgdW53X3RhYmxlX2VudHJ5CiAgICAgIHsKICAgICAgICBzdHJ1 Y3QgYWJzYWRkciBzdGFydDsKICAgICAgICBzdHJ1Y3QgYWJzYWRkciBlbmQ7CiAgICAgICAgc3Ry dWN0IGFic2FkZHIgaW5mbzsKICAgICAgfQogICAgKnRhYmxlOwogICAgdW5zaWduZWQgbG9uZyB0 YWJsZV9sZW47CiAgICB1bnNpZ25lZCBjaGFyICppbmZvOwogICAgdW5zaWduZWQgbG9uZyBpbmZv X3NpemU7CiAgICBiZmRfdm1hIGluZm9fYWRkcjsKICAgIGJmZF92bWEgc2VnX2Jhc2U7CiAgICBF bGZfSW50ZXJuYWxfU3ltICpzeW10YWI7CiAgICB1bnNpZ25lZCBsb25nIG5zeW1zOwogICAgY2hh ciAqc3RydGFiOwogICAgdW5zaWduZWQgbG9uZyBzdHJ0YWJfc2l6ZTsKICB9OwoKc3RhdGljIHZv aWQgZmluZF9zeW1ib2xfZm9yX2FkZHJlc3MKICAoc3RydWN0IHVud19hdXhfaW5mbyAqLCBzdHJ1 Y3QgYWJzYWRkciwgY29uc3QgY2hhciAqKiwgYmZkX3ZtYSAqKTsKc3RhdGljIHZvaWQgZHVtcF9p YTY0X3Vud2luZAogIChzdHJ1Y3QgdW53X2F1eF9pbmZvICopOwpzdGF0aWMgaW50IHNsdXJwX2lh NjRfdW53aW5kX3RhYmxlCiAgKEZJTEUgKiwgc3RydWN0IHVud19hdXhfaW5mbyAqLCBFbGZfSW50 ZXJuYWxfU2hkciAqKTsKCnN0YXRpYyB2b2lkCmZpbmRfc3ltYm9sX2Zvcl9hZGRyZXNzIChhdXgs IGFkZHIsIHN5bW5hbWUsIG9mZnNldCkKICAgICBzdHJ1Y3QgdW53X2F1eF9pbmZvICphdXg7CiAg ICAgc3RydWN0IGFic2FkZHIgYWRkcjsKICAgICBjb25zdCBjaGFyICoqc3ltbmFtZTsKICAgICBi ZmRfdm1hICpvZmZzZXQ7CnsKICBiZmRfdm1hIGRpc3QgPSAoYmZkX3ZtYSkgMHgxMDAwMDA7CiAg RWxmX0ludGVybmFsX1N5bSAqc3ltLCAqYmVzdCA9ICgodm9pZCAqKTApOwogIHVuc2lnbmVkIGxv bmcgaTsKCiAgZm9yIChpID0gMCwgc3ltID0gYXV4LT5zeW10YWI7IGkgPCBhdXgtPm5zeW1zOyAr K2ksICsrc3ltKQogICAgewogICAgICBpZiAoKChzeW0tPnN0X2luZm8pICYgMHhGKSA9PSAyCiAg ICAgICAgICAmJiBzeW0tPnN0X25hbWUgIT0gMAogICAgICAgICAgJiYgKGFkZHIuc2VjdGlvbiA9 PSAwIHx8IGFkZHIuc2VjdGlvbiA9PSBzeW0tPnN0X3NobmR4KQogICAgICAgICAgJiYgYWRkci5v ZmZzZXQgPj0gc3ltLT5zdF92YWx1ZQogICAgICAgICAgJiYgYWRkci5vZmZzZXQgLSBzeW0tPnN0 X3ZhbHVlIDwgZGlzdCkKICAgICAgICB7CiAgICAgICAgICBiZXN0ID0gc3ltOwogICAgICAgICAg ZGlzdCA9IGFkZHIub2Zmc2V0IC0gc3ltLT5zdF92YWx1ZTsKICAgICAgICAgIGlmICghZGlzdCkK ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogIGlmIChiZXN0KQogICAgewogICAg ICAqc3ltbmFtZSA9IChiZXN0LT5zdF9uYW1lID49IGF1eC0+c3RydGFiX3NpemUKICAgICAgICAg ICAgICAgICAgPyAiPGNvcnJ1cHQ+IiA6IGF1eC0+c3RydGFiICsgYmVzdC0+c3RfbmFtZSk7CiAg ICAgICpvZmZzZXQgPSBkaXN0OwogICAgICByZXR1cm47CiAgICB9CiAgKnN5bW5hbWUgPSAoKHZv aWQgKikwKTsKICAqb2Zmc2V0ID0gYWRkci5vZmZzZXQ7Cn0KCnN0YXRpYyB2b2lkCmR1bXBfaWE2 NF91bndpbmQgKGF1eCkKICAgICBzdHJ1Y3QgdW53X2F1eF9pbmZvICphdXg7CnsKICBiZmRfdm1h IGFkZHJfc2l6ZTsKICBzdHJ1Y3QgdW53X3RhYmxlX2VudHJ5ICp0cDsKICBpbnQgaW5fYm9keTsK CiAgYWRkcl9zaXplID0gaXNfMzJiaXRfZWxmID8gNCA6IDg7CgogIGZvciAodHAgPSBhdXgtPnRh YmxlOyB0cCA8IGF1eC0+dGFibGUgKyBhdXgtPnRhYmxlX2xlbjsgKyt0cCkKICAgIHsKICAgICAg YmZkX3ZtYSBzdGFtcDsKICAgICAgYmZkX3ZtYSBvZmZzZXQ7CiAgICAgIGNvbnN0IHVuc2lnbmVk IGNoYXIgKmRwOwogICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkOwogICAgICBjb25zdCBj aGFyICpwcm9jbmFtZTsKCiAgICAgIGZpbmRfc3ltYm9sX2Zvcl9hZGRyZXNzIChhdXgsIHRwLT5z dGFydCwgJnByb2NuYW1lLCAmb2Zmc2V0KTsKCiAgICAgIGZwdXRzICgiXG48Iiwgc3Rkb3V0KTsK CiAgICAgIGlmIChwcm9jbmFtZSkKICAgICAgICB7CiAgICAgICAgICBmcHV0cyAocHJvY25hbWUs IHN0ZG91dCk7CgogICAgICAgICAgaWYgKG9mZnNldCkKICAgICAgICAgICAgcHJpbnRmICgiKyVs eCIsICh1bnNpZ25lZCBsb25nKSBvZmZzZXQpOwogICAgICAgIH0KCiAgICAgIGZwdXRzICgiPjog WyIsIHN0ZG91dCk7CiAgICAgIHByaW50X3ZtYSAodHAtPnN0YXJ0Lm9mZnNldCwgUFJFRklYX0hF WCk7CiAgICAgIGZwdXRjICgnLScsIHN0ZG91dCk7CiAgICAgIHByaW50X3ZtYSAodHAtPmVuZC5v ZmZzZXQsIFBSRUZJWF9IRVgpOwogICAgICBwcmludGYgKCJdLCBpbmZvIGF0ICsweCVseFxuIiwK ICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgKHRwLT5pbmZvLm9mZnNldCAtIGF1eC0+c2Vn X2Jhc2UpKTsKCiAgICAgIGhlYWQgPSBhdXgtPmluZm8gKyAodHAtPmluZm8ub2Zmc2V0IC0gYXV4 LT5pbmZvX2FkZHIpOwogICAgICBzdGFtcCA9IGJ5dGVfZ2V0ICgodW5zaWduZWQgY2hhciAqKSBo ZWFkLCAtOCk7CgogICAgICBwcmludGYgKCIgIHYldSwgZmxhZ3M9MHglbHggKCVzJXMpLCBsZW49 JWx1IGJ5dGVzXG4iLAogICAgICAgICAgICAgICh1bnNpZ25lZCkgKChzdGFtcCkgPj4gNDgpLAog ICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSAoKHN0YW1wICYgMHgwMDAwZmZmZjAwMDAwMDAw TEwpID4+IDMyKSwKICAgICAgICAgICAgICAoKHN0YW1wKSAmIDB4MDAwMDAwMDEwMDAwMDAwMExM KSA/ICIgZWhhbmRsZXIiIDogIiIsCiAgICAgICAgICAgICAgKChzdGFtcCkgJiAweDAwMDAwMDAy MDAwMDAwMDBMTCkgPyAiIHVoYW5kbGVyIiA6ICIiLAogICAgICAgICAgICAgICh1bnNpZ25lZCBs b25nKSAoYWRkcl9zaXplICogKChzdGFtcCkgJiAweDAwMDAwMDAwZmZmZmZmZmZMTCkpKTsKCiAg ICAgIGlmICgoKHN0YW1wKSA+PiA0OCkgIT0gMSkKICAgICAgICB7CiAgICAgICAgICBwcmludGYg KCJcdFVua25vd24gdmVyc2lvbi5cbiIpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoK ICAgICAgaW5fYm9keSA9IDA7CiAgICAgIGZvciAoZHAgPSBoZWFkICsgODsgZHAgPCBoZWFkICsg OCArIGFkZHJfc2l6ZSAqICgoc3RhbXApICYgMHgwMDAwMDAwMGZmZmZmZmZmTEwpOykKICAgICAg ICBkcCA9IHVud19kZWNvZGUgKGRwLCBpbl9ib2R5LCAmIGluX2JvZHkpOwogICAgfQp9CgpzdGF0 aWMgaW50CnNsdXJwX2lhNjRfdW53aW5kX3RhYmxlIChmaWxlLCBhdXgsIHNlYykKICAgICBGSUxF ICpmaWxlOwogICAgIHN0cnVjdCB1bndfYXV4X2luZm8gKmF1eDsKICAgICBFbGZfSW50ZXJuYWxf U2hkciAqc2VjOwp7CiAgdW5zaWduZWQgbG9uZyBzaXplLCBhZGRyX3NpemUsIG5yZWxhcywgaTsK ICBFbGZfSW50ZXJuYWxfUGhkciAqcHJvZ19oZHJzLCAqc2VnOwogIHN0cnVjdCB1bndfdGFibGVf ZW50cnkgKnRlcDsKICBFbGZfSW50ZXJuYWxfU2hkciAqcmVsc2VjOwogIEVsZl9JbnRlcm5hbF9S ZWxhICpyZWxhLCAqcnA7CiAgdW5zaWduZWQgY2hhciAqdGFibGUsICp0cDsKICBFbGZfSW50ZXJu YWxfU3ltICpzeW07CiAgY29uc3QgY2hhciAqcmVsbmFtZTsKICBpbnQgcmVzdWx0OwoKICBhZGRy X3NpemUgPSBpc18zMmJpdF9lbGYgPyA0IDogODsKCgoKCiAgaWYgKGVsZl9oZWFkZXIuZV9waG51 bSkKICAgIHsKICAgICAgcHJvZ19oZHJzID0gKEVsZl9JbnRlcm5hbF9QaGRyICopCiAgICAgICAg eG1hbGxvYyAoZWxmX2hlYWRlci5lX3BobnVtICogc2l6ZW9mIChFbGZfSW50ZXJuYWxfUGhkcikp OwoKICAgICAgaWYgKGlzXzMyYml0X2VsZikKICAgICAgICByZXN1bHQgPSBnZXRfMzJiaXRfcHJv Z3JhbV9oZWFkZXJzIChmaWxlLCBwcm9nX2hkcnMpOwogICAgICBlbHNlCiAgICAgICAgcmVzdWx0 ID0gZ2V0XzY0Yml0X3Byb2dyYW1faGVhZGVycyAoZmlsZSwgcHJvZ19oZHJzKTsKCiAgICAgIGlm ICghcmVzdWx0KQogICAgICAgIHsKICAgICAgICAgIGZyZWUgKHByb2dfaGRycyk7CiAgICAgICAg ICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICBmb3IgKHNlZyA9IHByb2dfaGRyczsgc2VnIDwg cHJvZ19oZHJzICsgZWxmX2hlYWRlci5lX3BobnVtOyArK3NlZykKICAgICAgICB7CiAgICAgICAg ICBpZiAoc2VnLT5wX3R5cGUgIT0gMSkKICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAg aWYgKHNlYy0+c2hfYWRkciA+PSBzZWctPnBfdmFkZHIKICAgICAgICAgICAgICAmJiAoc2VjLT5z aF9hZGRyICsgc2VjLT5zaF9zaXplIDw9IHNlZy0+cF92YWRkciArIHNlZy0+cF9tZW1zeikpCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBhdXgtPnNlZ19iYXNlID0gc2VnLT5wX3ZhZGRyOwog ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgZnJlZSAo cHJvZ19oZHJzKTsKICAgIH0KCgogIHNpemUgPSBzZWMtPnNoX3NpemU7CiAgdGFibGUgPSAoY2hh ciAqKSBnZXRfZGF0YSAoKCh2b2lkICopMCksIGZpbGUsIHNlYy0+c2hfb2Zmc2V0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemUsICgidW53aW5kIHRhYmxlIikpOwogIGlmICghdGFi bGUpCiAgICByZXR1cm4gMDsKCiAgdGVwID0gYXV4LT50YWJsZSA9IHhtYWxsb2MgKHNpemUgLyAo MyAqIGFkZHJfc2l6ZSkgKiBzaXplb2YgKGF1eC0+dGFibGVbMF0pKTsKICBmb3IgKHRwID0gdGFi bGU7IHRwIDwgdGFibGUgKyBzaXplOyB0cCArPSAzICogYWRkcl9zaXplLCArK3RlcCkKICAgIHsK ICAgICAgdGVwLT5zdGFydC5zZWN0aW9uID0gMDsKICAgICAgdGVwLT5lbmQuc2VjdGlvbiA9IDA7 CiAgICAgIHRlcC0+aW5mby5zZWN0aW9uID0gMDsKICAgICAgaWYgKGlzXzMyYml0X2VsZikKICAg ICAgICB7CiAgICAgICAgICB0ZXAtPnN0YXJ0Lm9mZnNldCA9IGJ5dGVfZ2V0ICgodW5zaWduZWQg Y2hhciAqKSB0cCArIDAsIDQpOwogICAgICAgICAgdGVwLT5lbmQub2Zmc2V0ID0gYnl0ZV9nZXQg KCh1bnNpZ25lZCBjaGFyICopIHRwICsgNCwgNCk7CiAgICAgICAgICB0ZXAtPmluZm8ub2Zmc2V0 ID0gYnl0ZV9nZXQgKCh1bnNpZ25lZCBjaGFyICopIHRwICsgOCwgNCk7CiAgICAgICAgfQogICAg ICBlbHNlCiAgICAgICAgewogICAgICAgICAgdGVwLT5zdGFydC5vZmZzZXQgPSBieXRlX2dldCAo KHVuc2lnbmVkIGNoYXIgKikgdHAgKyAwLCAtOCk7CiAgICAgICAgICB0ZXAtPmVuZC5vZmZzZXQg PSBieXRlX2dldCAoKHVuc2lnbmVkIGNoYXIgKikgdHAgKyA4LCAtOCk7CiAgICAgICAgICB0ZXAt PmluZm8ub2Zmc2V0ID0gYnl0ZV9nZXQgKCh1bnNpZ25lZCBjaGFyICopIHRwICsgMTYsIC04KTsK ICAgICAgICB9CiAgICAgIHRlcC0+c3RhcnQub2Zmc2V0ICs9IGF1eC0+c2VnX2Jhc2U7CiAgICAg IHRlcC0+ZW5kLm9mZnNldCArPSBhdXgtPnNlZ19iYXNlOwogICAgICB0ZXAtPmluZm8ub2Zmc2V0 ICs9IGF1eC0+c2VnX2Jhc2U7CiAgICB9CiAgZnJlZSAodGFibGUpOwoKCgogIGZvciAocmVsc2Vj ID0gc2VjdGlvbl9oZWFkZXJzOwogICAgICAgcmVsc2VjIDwgc2VjdGlvbl9oZWFkZXJzICsgZWxm X2hlYWRlci5lX3NobnVtOwogICAgICAgKytyZWxzZWMpCiAgICB7CiAgICAgIGlmIChyZWxzZWMt PnNoX3R5cGUgIT0gNAogICAgICAgICAgfHwgKHNlY3Rpb25faGVhZGVycyArICgocmVsc2VjLT5z aF9pbmZvKSA8IDB4RkYwMCA/IChyZWxzZWMtPnNoX2luZm8pIDogKChyZWxzZWMtPnNoX2luZm8p IDw9IDB4RkZGRiA/IDAgOiAocmVsc2VjLT5zaF9pbmZvKSAtICgweEZGRkYgKyAxIC0gMHhGRjAw KSkpKSAhPSBzZWMpCiAgICAgICAgY29udGludWU7CgogICAgICBpZiAoIXNsdXJwX3JlbGFfcmVs b2NzIChmaWxlLCByZWxzZWMtPnNoX29mZnNldCwgcmVsc2VjLT5zaF9zaXplLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmIHJlbGEsICYgbnJlbGFzKSkKICAgICAgICByZXR1cm4gMDsK CiAgICAgIGZvciAocnAgPSByZWxhOyBycCA8IHJlbGEgKyBucmVsYXM7ICsrcnApCiAgICAgICAg ewogICAgICAgICAgaWYgKGlzXzMyYml0X2VsZikKICAgICAgICAgICAgewogICAgICAgICAgICAg IHJlbG5hbWUgPSBlbGZfaWE2NF9yZWxvY190eXBlICgoKHJwLT5yX2luZm8pICYgMHhmZikpOwog ICAgICAgICAgICAgIHN5bSA9IGF1eC0+c3ltdGFiICsgKChycC0+cl9pbmZvKSA+PiA4KTsKCiAg ICAgICAgICAgICAgaWYgKCgoc3ltLT5zdF9pbmZvKSAmIDB4RikgIT0gMykKICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgd2FybiAoKCJTa2lwcGluZyB1bmV4cGVjdGVkIHN5bWJv bCB0eXBlICV1XG4iKSwKICAgICAgICAgICAgICAgICAgICAgICAgKChzeW0tPnN0X2luZm8pICYg MHhGKSk7CiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAg ICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICByZWxu YW1lID0gZWxmX2lhNjRfcmVsb2NfdHlwZSAoKChycC0+cl9pbmZvKSAmIDB4ZmZmZmZmZmYpKTsK ICAgICAgICAgICAgICBzeW0gPSBhdXgtPnN5bXRhYiArICgocnAtPnJfaW5mbykgPj4gMzIpOwoK ICAgICAgICAgICAgICBpZiAoKChzeW0tPnN0X2luZm8pICYgMHhGKSAhPSAzKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICB3YXJuICgoIlNraXBwaW5nIHVuZXhwZWN0ZWQgc3lt Ym9sIHR5cGUgJXVcbiIpLAogICAgICAgICAgICAgICAgICAgICAgICAoKHN5bS0+c3RfaW5mbykg JiAweEYpKTsKICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25z dGFudF9wICgxMykgJiYgKChfX2J1aWx0aW5fY29uc3RhbnRfcCAocmVsbmFtZSkgJiYgc3RybGVu IChyZWxuYW1lKSA8ICgoc2l6ZV90KSAoMTMpKSkgfHwgKF9fYnVpbHRpbl9jb25zdGFudF9wICgi Ul9JQTY0X1NFR1JFTCIpICYmIHN0cmxlbiAoIlJfSUE2NF9TRUdSRUwiKSA8ICgoc2l6ZV90KSAo MTMpKSkpID8gX19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9fczJfbGVuOyAoX19i dWlsdGluX2NvbnN0YW50X3AgKHJlbG5hbWUpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wICgiUl9J QTY0X1NFR1JFTCIpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAocmVsbmFtZSksIF9fczJfbGVuID0g c3RybGVuICgiUl9JQTY0X1NFR1JFTCIpLCAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKChyZWxu YW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShyZWxuYW1lKSA9PSAxKSB8fCBfX3Mx X2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiUl9JQTY0X1NFR1JFTCIp ICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJSX0lBNjRfU0VHUkVMIikgPT0gMSkgfHwg X19zMl9sZW4gPj0gNCkpID8gbWVtY21wICgoX19jb25zdCBjaGFyICopIChyZWxuYW1lKSwgKF9f Y29uc3QgY2hhciAqKSAoIlJfSUE2NF9TRUdSRUwiKSwgKF9fczFfbGVuIDwgX19zMl9sZW4gPyBf X3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChyZWxuYW1l KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgocmVsbmFtZSkgKyAxKSAtIChzaXplX3QpKGNv bnN0IHZvaWQgKikocmVsbmFtZSkgPT0gMSkgJiYgKF9fczFfbGVuID0gc3RybGVuIChyZWxuYW1l KSwgX19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIlJfSUE2NF9TRUdSRUwi KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIlJfSUE2NF9TRUdSRUwiKSArIDEpIC0gKHNp emVfdCkoY29uc3Qgdm9pZCAqKSgiUl9JQTY0X1NFR1JFTCIpID09IDEpID8gKF9fZXh0ZW5zaW9u X18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKHJlbG5hbWUpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikoIlJfSUE2NF9TRUdSRUwiKSlbMF0pOyBpZiAoX19zMV9sZW4g PiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAocmVsbmFtZSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIlJfSUE2NF9TRUdSRUwiKSlbMV0pOyBpZiAoX19z MV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocmVsbmFtZSkpWzJdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIlJfSUE2NF9TRUdSRUwiKSlbMl0pOyBp ZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHJlbG5hbWUpKVszXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJSX0lBNjRfU0VHUkVMIikpWzNd KTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCJSX0lBNjRfU0VHUkVMIik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChyZWxuYW1lKSlbMF0gLSBfX3MyWzBdKTsg aWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHJlbG5hbWUpKVsxXSAtIF9fczJb MV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocmVsbmFtZSkpWzJdIC0g X19zMlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocmVsbmFtZSkpWzNd IC0gX19zMlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAo IlJfSUE2NF9TRUdSRUwiKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIlJfSUE2NF9TRUdS RUwiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiUl9JQTY0X1NFR1JFTCIpID09IDEp ICYmIChfX3MyX2xlbiA9IHN0cmxlbiAoIlJfSUE2NF9TRUdSRUwiKSwgX19zMl9sZW4gPCA0KSA/ IChfX2J1aWx0aW5fY29uc3RhbnRfcCAocmVsbmFtZSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQg KikoKHJlbG5hbWUpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHJlbG5hbWUpID09IDEp ID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHJlbG5hbWUpKVswXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoIlJfSUE2NF9TRUdSRUwiKSlbMF0p OyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocmVsbmFtZSkpWzFdIC0gKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIlJfSUE2NF9TRUdSRUwi KSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocmVsbmFtZSkpWzJd IC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIlJfSUE2NF9T RUdSRUwiKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0 ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHJlbG5hbWUp KVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJSX0lB NjRfU0VHUkVMIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKHJlbG5hbWUpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSBfX3MxWzBd IC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIlJfSUE2NF9T RUdSRUwiKSlbMF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3Vs dCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoIlJfSUE2NF9TRUdSRUwiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09 IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCJSX0lBNjRfU0VHUkVMIikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAm JiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIlJfSUE2NF9TRUdSRUwiKSlbM10pOyB9IH0gX19y ZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKHJlbG5hbWUsICJSX0lBNjRfU0VHUkVMIikpKSk7IH0pIDog c3RybmNtcCAocmVsbmFtZSwgIlJfSUE2NF9TRUdSRUwiLCAxMykpKSAhPSAwKQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgd2FybiAoKCJTa2lwcGluZyB1bmV4cGVjdGVkIHJlbG9jYXRpb24g dHlwZSAlc1xuIiksIHJlbG5hbWUpOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg ICB9CgogICAgICAgICAgaSA9IHJwLT5yX29mZnNldCAvICgzICogYWRkcl9zaXplKTsKCiAgICAg ICAgICBzd2l0Y2ggKHJwLT5yX29mZnNldC9hZGRyX3NpemUgJSAzKQogICAgICAgICAgICB7CiAg ICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBhdXgtPnRhYmxlW2ldLnN0YXJ0LnNlY3Rp b24gPSBzeW0tPnN0X3NobmR4OwogICAgICAgICAgICAgIGF1eC0+dGFibGVbaV0uc3RhcnQub2Zm c2V0ICs9IHJwLT5yX2FkZGVuZDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2Fz ZSAxOgogICAgICAgICAgICAgIGF1eC0+dGFibGVbaV0uZW5kLnNlY3Rpb24gPSBzeW0tPnN0X3No bmR4OwogICAgICAgICAgICAgIGF1eC0+dGFibGVbaV0uZW5kLm9mZnNldCArPSBycC0+cl9hZGRl bmQ7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAg ICBhdXgtPnRhYmxlW2ldLmluZm8uc2VjdGlvbiA9IHN5bS0+c3Rfc2huZHg7CiAgICAgICAgICAg ICAgYXV4LT50YWJsZVtpXS5pbmZvLm9mZnNldCArPSBycC0+cl9hZGRlbmQ7CiAgICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgIH0KICAgICAgICB9CgogICAgICBmcmVlIChyZWxhKTsKICAgIH0KCiAgYXV4LT50YWJs ZV9sZW4gPSBzaXplIC8gKDMgKiBhZGRyX3NpemUpOwogIHJldHVybiAxOwp9CgpzdGF0aWMgaW50 CnByb2Nlc3NfdW53aW5kIChmaWxlKQogICAgIEZJTEUgKmZpbGU7CnsKICBFbGZfSW50ZXJuYWxf U2hkciAqc2VjLCAqdW53c2VjID0gKCh2b2lkICopMCksICpzdHJzZWM7CiAgdW5zaWduZWQgbG9u ZyBpLCBhZGRyX3NpemUsIHVud2NvdW50ID0gMCwgdW53c3RhcnQgPSAwOwogIHN0cnVjdCB1bndf YXV4X2luZm8gYXV4OwoKICBpZiAoIWRvX3Vud2luZCkKICAgIHJldHVybiAxOwoKICBpZiAoZWxm X2hlYWRlci5lX21hY2hpbmUgIT0gNTApCiAgICB7CiAgICAgIHByaW50ZiAoKCJcblRoZXJlIGFy ZSBubyB1bndpbmQgc2VjdGlvbnMgaW4gdGhpcyBmaWxlLlxuIikpOwogICAgICByZXR1cm4gMTsK ICAgIH0KCiAgKF9fZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzaXplb2YgKGF1 eCkpICYmIChzaXplb2YgKGF1eCkpIDw9IDE2ID8gKChzaXplb2YgKGF1eCkpID09IDEgPyAoeyB2 b2lkICpfX3MgPSAoJiBhdXgpOyAqKChfX3VpbnQ4X3QgKikgX19zKSA9IChfX3VpbnQ4X3QpIDA7 IF9fczsgfSkgOiAoeyB2b2lkICpfX3MgPSAoJiBhdXgpOyB1bmlvbiB7IHVuc2lnbmVkIGludCBf X3VpOyB1bnNpZ25lZCBzaG9ydCBpbnQgX191c2k7IHVuc2lnbmVkIGNoYXIgX191YzsgfSAqX191 ID0gX19zOyBfX3VpbnQ4X3QgX19jID0gKF9fdWludDhfdCkgKDApOyBzd2l0Y2ggKCh1bnNpZ25l ZCBpbnQpIChzaXplb2YgKGF1eCkpKSB7IGNhc2UgMTU6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEw MTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDExOiBf X3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAq KSBfX3UgKyA0KTsgY2FzZSA3OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBf X2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAzOiBfX3UtPl9fdXNpID0gKHVu c2lnbmVkIHNob3J0IGludCkgX19jICogMHgwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9p ZCAqKSBfX3UgKyAyKTsgX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNh c2UgMTQ6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18g KCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDEwOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAx OyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA2OiBfX3UtPl9f dWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3Ug KyA0KTsgY2FzZSAyOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19jICogMHgw MTAxOyBicmVhazsgY2FzZSAxMzogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0g X19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgOTogX191LT5fX3VpID0gX19j ICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNh c2UgNTogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAo KHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTogX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9f YzsgYnJlYWs7IGNhc2UgMTY6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9f ZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDEyOiBfX3UtPl9fdWkgPSBfX2Mg KiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2Fz ZSA4OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgo dm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA0OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBj YXNlIDA6IGJyZWFrOyB9IF9fczsgfSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgwKSAmJiAo MCkgPT0gJ1wwJyA/ICh7IHZvaWQgKl9fcyA9ICgmIGF1eCk7IF9fYnVpbHRpbl9tZW1zZXQgKF9f cywgJ1wwJywgc2l6ZW9mIChhdXgpKTsgX19zOyB9KSA6IG1lbXNldCAoJiBhdXgsIDAsIHNpemVv ZiAoYXV4KSkpKSk7CgogIGFkZHJfc2l6ZSA9IGlzXzMyYml0X2VsZiA/IDQgOiA4OwoKICBmb3Ig KGkgPSAwLCBzZWMgPSBzZWN0aW9uX2hlYWRlcnM7IGkgPCBlbGZfaGVhZGVyLmVfc2hudW07ICsr aSwgKytzZWMpCiAgICB7CiAgICAgIGlmIChzZWMtPnNoX3R5cGUgPT0gMikKICAgICAgICB7CiAg ICAgICAgICBhdXgubnN5bXMgPSBzZWMtPnNoX3NpemUgLyBzZWMtPnNoX2VudHNpemU7CiAgICAg ICAgICBhdXguc3ltdGFiID0gKGlzXzMyYml0X2VsZiA/IGdldF8zMmJpdF9lbGZfc3ltYm9scyAo ZmlsZSwgc2VjKSA6IGdldF82NGJpdF9lbGZfc3ltYm9scyAoZmlsZSwgc2VjKSk7CgogICAgICAg ICAgc3Ryc2VjID0gKHNlY3Rpb25faGVhZGVycyArICgoc2VjLT5zaF9saW5rKSA8IDB4RkYwMCA/ IChzZWMtPnNoX2xpbmspIDogKChzZWMtPnNoX2xpbmspIDw9IDB4RkZGRiA/IDAgOiAoc2VjLT5z aF9saW5rKSAtICgweEZGRkYgKyAxIC0gMHhGRjAwKSkpKTsKICAgICAgICAgIGF1eC5zdHJ0YWJf c2l6ZSA9IHN0cnNlYy0+c2hfc2l6ZTsKICAgICAgICAgIGF1eC5zdHJ0YWIgPSAoY2hhciAqKSBn ZXRfZGF0YSAoKCh2b2lkICopMCksIGZpbGUsIHN0cnNlYy0+c2hfb2Zmc2V0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXguc3RydGFiX3NpemUsICgic3RyaW5n IHRhYmxlIikpOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoc2VjLT5zaF90eXBlID09ICgweDcw MDAwMDAwICsgMSkpCiAgICAgICAgdW53Y291bnQrKzsKICAgIH0KCiAgaWYgKCF1bndjb3VudCkK ICAgIHByaW50ZiAoKCJcblRoZXJlIGFyZSBubyB1bndpbmQgc2VjdGlvbnMgaW4gdGhpcyBmaWxl LlxuIikpOwoKICB3aGlsZSAodW53Y291bnQtLSA+IDApCiAgICB7CiAgICAgIGNoYXIgKnN1ZmZp eDsKICAgICAgc2l6ZV90IGxlbiwgbGVuMjsKCiAgICAgIGZvciAoaSA9IHVud3N0YXJ0LCBzZWMg PSBzZWN0aW9uX2hlYWRlcnMgKyB1bndzdGFydDsKICAgICAgICAgICBpIDwgZWxmX2hlYWRlci5l X3NobnVtOyArK2ksICsrc2VjKQogICAgICAgIGlmIChzZWMtPnNoX3R5cGUgPT0gKDB4NzAwMDAw MDAgKyAxKSkKICAgICAgICAgIHsKICAgICAgICAgICAgdW53c2VjID0gc2VjOwogICAgICAgICAg ICBicmVhazsKICAgICAgICAgIH0KCiAgICAgIHVud3N0YXJ0ID0gaSArIDE7CiAgICAgIGxlbiA9 IHNpemVvZiAoIi5nbnUubGlua29uY2UuaWE2NHVudy4iKSAtIDE7CgogICAgICBpZiAoKF9fZXh0 ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChsZW4pICYmICgoX19idWlsdGluX2NvbnN0 YW50X3AgKCgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKCh1bndzZWMpLT5z aF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJs ZSArICh1bndzZWMpLT5zaF9uYW1lKSkpICYmIHN0cmxlbiAoKCh1bndzZWMpID09ICgodm9pZCAq KTApID8gIjxub25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0 aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNoX25hbWUpKSkgPCAo KHNpemVfdCkgKGxlbikpKSB8fCAoX19idWlsdGluX2NvbnN0YW50X3AgKCIuZ251LmxpbmtvbmNl LmlhNjR1bncuIikgJiYgc3RybGVuICgiLmdudS5saW5rb25jZS5pYTY0dW53LiIpIDwgKChzaXpl X3QpIChsZW4pKSkpID8gX19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9fczJfbGVu OyAoX19idWlsdGluX2NvbnN0YW50X3AgKCgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9u ZT4iIDogKCh1bndzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1 cHQ+IiA6IHN0cmluZ190YWJsZSArICh1bndzZWMpLT5zaF9uYW1lKSkpICYmIF9fYnVpbHRpbl9j b25zdGFudF9wICgiLmdudS5saW5rb25jZS5pYTY0dW53LiIpICYmIChfX3MxX2xlbiA9IHN0cmxl biAoKCh1bndzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHVud3NlYyktPnNoX25h bWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsg KHVud3NlYyktPnNoX25hbWUpKSksIF9fczJfbGVuID0gc3RybGVuICgiLmdudS5saW5rb25jZS5p YTY0dW53LiIpLCAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgoKHVud3NlYykgPT0gKCh2b2lk ICopMCkgPyAiPG5vbmU+IiA6ICgodW53c2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVu Z3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAodW53c2VjKS0+c2hfbmFtZSkpKSAr IDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKHVud3NlYykgPT0gKCh2b2lkICopMCkgPyAi PG5vbmU+IiA6ICgodW53c2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxj b3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAodW53c2VjKS0+c2hfbmFtZSkpKSA9PSAxKSB8fCBf X3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiLmdudS5saW5rb25j ZS5pYTY0dW53LiIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCIuZ251LmxpbmtvbmNl LmlhNjR1bncuIikgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21wICgoX19jb25zdCBj aGFyICopICgoKHVud3NlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgodW53c2VjKS0+ c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFi bGUgKyAodW53c2VjKS0+c2hfbmFtZSkpKSwgKF9fY29uc3QgY2hhciAqKSAoIi5nbnUubGlua29u Y2UuaWE2NHVudy4iKSwgKF9fczFfbGVuIDwgX19zMl9sZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVu KSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKHVud3NlYykgPT0gKCh2b2lkICopMCkg PyAiPG5vbmU+IiA6ICgodW53c2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8g Ijxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAodW53c2VjKS0+c2hfbmFtZSkpKSAmJiAoKHNp emVfdCkoY29uc3Qgdm9pZCAqKSgoKCh1bndzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIg OiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4i IDogc3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNoX25hbWUpKSkgKyAxKSAtIChzaXplX3QpKGNv bnN0IHZvaWQgKikoKCh1bndzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHVud3Nl YyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5n X3RhYmxlICsgKHVud3NlYyktPnNoX25hbWUpKSkgPT0gMSkgJiYgKF9fczFfbGVuID0gc3RybGVu ICgoKHVud3NlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgodW53c2VjKS0+c2hfbmFt ZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAo dW53c2VjKS0+c2hfbmFtZSkpKSwgX19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRf cCAoIi5nbnUubGlua29uY2UuaWE2NHVudy4iKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgo Ii5nbnUubGlua29uY2UuaWE2NHVudy4iKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgi LmdudS5saW5rb25jZS5pYTY0dW53LiIpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0 ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKCgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKCh1bndzZWMpLT5z aF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJs ZSArICh1bndzZWMpLT5zaF9uYW1lKSkpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikoIi5nbnUubGlua29uY2UuaWE2NHVudy4iKSlbMF0pOyBpZiAoX19z MV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCh1bndzZWMpID09ICgodm9pZCAqKTApID8g Ijxub25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8 Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNoX25hbWUpKSkpWzFdIC0gKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5nbnUubGlua29uY2Uu aWE2NHVudy4iKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19y ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCh1 bndzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUgPj0g c3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVud3Nl YyktPnNoX25hbWUpKSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoIi5nbnUubGlua29uY2UuaWE2NHVudy4iKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAy ICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKCgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDog KCh1bndzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6 IHN0cmluZ190YWJsZSArICh1bndzZWMpLT5zaF9uYW1lKSkpKVszXSAtICgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZ251LmxpbmtvbmNlLmlhNjR1bncuIikp WzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCIuZ251LmxpbmtvbmNlLmlhNjR1bncuIik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKHVud3NlYykgPT0g KCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgodW53c2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFi bGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAodW53c2VjKS0+c2hfbmFt ZSkpKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7 IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKCh1bndzZWMpLT5zaF9uYW1l ID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArICh1 bndzZWMpLT5zaF9uYW1lKSkpKVsxXSAtIF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9f cmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoKCh1bndzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHVu d3NlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3Ry aW5nX3RhYmxlICsgKHVud3NlYyktPnNoX25hbWUpKSkpWzJdIC0gX19zMlsyXSk7IGlmIChfX3Mx X2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCh1bndzZWMpID09ICgodm9pZCAqKTApID8gIjxu b25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29y cnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNoX25hbWUpKSkpWzNdIC0gX19zMlsz XSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIi5nbnUubGlu a29uY2UuaWE2NHVudy4iKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIi5nbnUubGlua29u Y2UuaWE2NHVudy4iKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiLmdudS5saW5rb25j ZS5pYTY0dW53LiIpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAoIi5nbnUubGlua29uY2Uu aWE2NHVudy4iKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKCh1bndz ZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3Ry aW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVud3NlYykt PnNoX25hbWUpKSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgodW53c2VjKSA9PSAoKHZv aWQgKikwKSA/ICI8bm9uZT4iIDogKCh1bndzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9s ZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArICh1bndzZWMpLT5zaF9uYW1lKSkp ICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ ICI8bm9uZT4iIDogKCh1bndzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAi PGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArICh1bndzZWMpLT5zaF9uYW1lKSkpID09IDEpID8g KF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ ICI8bm9uZT4iIDogKCh1bndzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAi PGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArICh1bndzZWMpLT5zaF9uYW1lKSkpKVswXSAtICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoIi5nbnUubGlua29uY2Uu aWE2NHVudy4iKSlbMF0pOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19y ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCh1 bndzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUgPj0g c3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVud3Nl YyktPnNoX25hbWUpKSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoIi5nbnUubGlua29uY2UuaWE2NHVudy4iKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAx ICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoKCh1bndzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIg OiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4i IDogc3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNoX25hbWUpKSkpWzJdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5nbnUubGlua29uY2UuaWE2NHVudy4i KSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgodW53c2VjKSA9PSAo KHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKCh1bndzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJs ZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArICh1bndzZWMpLT5zaF9uYW1l KSkpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIu Z251LmxpbmtvbmNlLmlhNjR1bncuIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRl bnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8 bm9uZT4iIDogKCh1bndzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNv cnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArICh1bndzZWMpLT5zaF9uYW1lKSkpOyByZWdpc3RlciBp bnQgX19yZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoIi5nbnUubGlua29uY2UuaWE2NHVudy4iKSlbMF07IGlmIChfX3MyX2xlbiA+ IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5nbnUubGlua29uY2UuaWE2NHVudy4i KSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo X19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIu Z251LmxpbmtvbmNlLmlhNjR1bncuIikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3Vs dCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoIi5nbnUubGlua29uY2UuaWE2NHVudy4iKSlbM10pOyB9IH0gX19y ZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKCgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4i IDogKCh1bndzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+ IiA6IHN0cmluZ190YWJsZSArICh1bndzZWMpLT5zaF9uYW1lKSksICIuZ251LmxpbmtvbmNlLmlh NjR1bncuIikpKSk7IH0pIDogc3RybmNtcCAoKCh1bndzZWMpID09ICgodm9pZCAqKTApID8gIjxu b25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29y cnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNoX25hbWUpKSwgIi5nbnUubGlua29u Y2UuaWE2NHVudy4iLCBsZW4pKSkgPT0gMCkKCiAgICAgICAgewoKICAgICAgICAgIGxlbjIgPSBz aXplb2YgKCIuZ251LmxpbmtvbmNlLmlhNjR1bndpLiIpIC0gMTsKICAgICAgICAgIHN1ZmZpeCA9 ICgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKCh1bndzZWMpLT5zaF9uYW1l ID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArICh1 bndzZWMpLT5zaF9uYW1lKSkgKyBsZW47CiAgICAgICAgICBmb3IgKGkgPSAwLCBzZWMgPSBzZWN0 aW9uX2hlYWRlcnM7IGkgPCBlbGZfaGVhZGVyLmVfc2hudW07CiAgICAgICAgICAgICAgICsraSwg KytzZWMpCiAgICAgICAgICAgIGlmICgoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50 X3AgKGxlbjIpICYmICgoX19idWlsdGluX2NvbnN0YW50X3AgKCgoc2VjKSA9PSAoKHZvaWQgKikw KSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAi PGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpICYmIHN0cmxlbiAo KChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3Ry aW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNo X25hbWUpKSkgPCAoKHNpemVfdCkgKGxlbjIpKSkgfHwgKF9fYnVpbHRpbl9jb25zdGFudF9wICgi LmdudS5saW5rb25jZS5pYTY0dW53aS4iKSAmJiBzdHJsZW4gKCIuZ251LmxpbmtvbmNlLmlhNjR1 bndpLiIpIDwgKChzaXplX3QpIChsZW4yKSkpKSA/IF9fZXh0ZW5zaW9uX18gKHsgc2l6ZV90IF9f czFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKHNlYykgPT0gKCh2b2lk ICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3Ro ID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSAmJiBfX2J1 aWx0aW5fY29uc3RhbnRfcCAoIi5nbnUubGlua29uY2UuaWE2NHVud2kuIikgJiYgKF9fczFfbGVu ID0gc3RybGVuICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hf bmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUg KyAoc2VjKS0+c2hfbmFtZSkpKSwgX19zMl9sZW4gPSBzdHJsZW4gKCIuZ251LmxpbmtvbmNlLmlh NjR1bndpLiIpLCAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgoKHNlYykgPT0gKCh2b2lkICop MCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8g Ijxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSArIDEpIC0gKHNp emVfdCkoY29uc3Qgdm9pZCAqKSgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgo c2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJp bmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAo ISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiLmdudS5saW5rb25jZS5pYTY0dW53aS4iKSArIDEp IC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiLmdudS5saW5rb25jZS5pYTY0dW53aS4iKSA9PSAx KSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9 PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJs ZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkp LCAoX19jb25zdCBjaGFyICopICgiLmdudS5saW5rb25jZS5pYTY0dW53aS4iKSwgKF9fczFfbGVu IDwgX19zMl9sZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25z dGFudF9wICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFt ZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAo c2VjKS0+c2hfbmFtZSkpKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKChzZWMpID09ICgo dm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xl bmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkgKyAx KSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25l PiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4i IDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkgPT0gMSkgJiYgKF9fczFfbGVuID0g c3RybGVuICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFt ZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAo c2VjKS0+c2hfbmFtZSkpKSwgX19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAo Ii5nbnUubGlua29uY2UuaWE2NHVud2kuIikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCIu Z251LmxpbmtvbmNlLmlhNjR1bndpLiIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCIu Z251LmxpbmtvbmNlLmlhNjR1bndpLiIpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0 ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1l ID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChz ZWMpLT5zaF9uYW1lKSkpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikoIi5nbnUubGlua29uY2UuaWE2NHVud2kuIikpWzBdKTsgaWYgKF9fczFfbGVuID4g MCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDog KChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0 cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZ251LmxpbmtvbmNlLmlhNjR1bndpLiIpKVsxXSk7 IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICop MCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8g Ijxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSlbMl0gLSAoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLmdudS5saW5rb25jZS5p YTY0dW53aS4iKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoc2Vj KSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190 YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1l KSkpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIu Z251LmxpbmtvbmNlLmlhNjR1bndpLiIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0 ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLmdudS5saW5rb25jZS5pYTY0dW53aS4iKTsg cmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5z aF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJs ZSArIChzZWMpLT5zaF9uYW1lKSkpKVswXSAtIF9fczJbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYm IF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNl YyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5n X3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+ IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6 ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBz dHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFf bGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+ IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIg OiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9f cmVzdWx0OyB9KSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgiLmdudS5saW5rb25jZS5pYTY0 dW53aS4iKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIi5nbnUubGlua29uY2UuaWE2NHVu d2kuIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoIi5nbnUubGlua29uY2UuaWE2NHVu d2kuIikgPT0gMSkgJiYgKF9fczJfbGVuID0gc3RybGVuICgiLmdudS5saW5rb25jZS5pYTY0dW53 aS4iKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKChzZWMpID09ICgo dm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xl bmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkgJiYg KChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4i IDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6 IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2 b2lkICopKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1l ID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChz ZWMpLT5zaF9uYW1lKSkpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9f cmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgo c2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmlu Z190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9u YW1lKSkpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKiko Ii5nbnUubGlua29uY2UuaWE2NHVud2kuIikpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jl c3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5z aF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJs ZSArIChzZWMpLT5zaF9uYW1lKSkpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCIuZ251LmxpbmtvbmNlLmlhNjR1bndpLiIpKVsxXSk7IGlmIChfX3My X2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5v bmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0 PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSlbMl0gLSAoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLmdudS5saW5rb25jZS5pYTY0dW53aS4i KSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZv aWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5n dGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpKVszXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZ251Lmxpbmtv bmNlLmlhNjR1bndpLiIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18g KHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgo c2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJp bmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19z MVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZ251 LmxpbmtvbmNlLmlhNjR1bndpLiIpKVswXTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9 PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopICgiLmdudS5saW5rb25jZS5pYTY0dW53aS4iKSlbMV0pOyBpZiAoX19z Ml9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZ251LmxpbmtvbmNlLmlh NjR1bndpLiIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1 bHQgPSAoX19zMVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCIuZ251LmxpbmtvbmNlLmlhNjR1bndpLiIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6 IHN0cmNtcCAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25h bWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsg KHNlYyktPnNoX25hbWUpKSwgIi5nbnUubGlua29uY2UuaWE2NHVud2kuIikpKSk7IH0pIDogc3Ry bmNtcCAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUg Pj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNl YyktPnNoX25hbWUpKSwgIi5nbnUubGlua29uY2UuaWE2NHVud2kuIiwgbGVuMikpKSA9PSAwCgog ICAgICAgICAgICAgICAgJiYgX19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9fczJf bGVuOyAoX19idWlsdGluX2NvbnN0YW50X3AgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9u ZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+ IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkgKyBsZW4yKSAmJiBfX2J1aWx0aW5f Y29uc3RhbnRfcCAoc3VmZml4KSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKCgoc2VjKSA9PSAoKHZv aWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5n dGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkgKyBsZW4y KSwgX19zMl9sZW4gPSBzdHJsZW4gKHN1ZmZpeCksICghKChzaXplX3QpKGNvbnN0IHZvaWQgKiko KCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0 cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5z aF9uYW1lKSkgKyBsZW4yKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKHNlYykgPT0g KCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVf bGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpICsg bGVuMikgPT0gMSkgfHwgX19zMV9sZW4gPj0gNCkgJiYgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAq KSgoc3VmZml4KSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShzdWZmaXgpID09IDEpIHx8 IF9fczJfbGVuID49IDQpKSA/IG1lbWNtcCAoKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgo dm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xl bmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSArIGxl bjIpLCAoX19jb25zdCBjaGFyICopIChzdWZmaXgpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9f czFfbGVuIDogX19zMl9sZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKCgoc2VjKSA9 PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJs ZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkg KyBsZW4yKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKChzZWMpID09ICgodm9pZCAqKTAp ID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8 Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSArIGxlbjIpICsgMSkg LSAoc2l6ZV90KShjb25zdCB2b2lkICopKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4i IDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6 IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkgKyBsZW4yKSA9PSAxKSAmJiAoX19zMV9s ZW4gPSBzdHJsZW4gKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5z aF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJs ZSArIChzZWMpLT5zaF9uYW1lKSkgKyBsZW4yKSwgX19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5f Y29uc3RhbnRfcCAoc3VmZml4KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoc3VmZml4KSAr IDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShzdWZmaXgpID09IDEpID8gKF9fZXh0ZW5zaW9u X18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChz ZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmlu Z190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkgKyBsZW4yKSlbMF0gLSAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKHN1ZmZpeCkpWzBdKTsgaWYgKF9fczFfbGVuID4g MCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDog KChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0 cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkgKyBsZW4yKSlbMV0gLSAoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzdWZmaXgpKVsxXSk7IGlmIChfX3MxX2xl biA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+ IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIg OiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpICsgbGVuMikpWzJdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoc3VmZml4KSlbMl0pOyBpZiAoX19z MV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9u ZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+ IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkgKyBsZW4yKSlbM10gLSAoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzdWZmaXgpKVszXSk7IH0gfSBf X3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpf X3MyID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzdWZmaXgp OyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYykt PnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3Rh YmxlICsgKHNlYyktPnNoX25hbWUpKSArIGxlbjIpKVswXSAtIF9fczJbMF0pOyBpZiAoX19zMV9s ZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25l PiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4i IDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSArIGxlbjIpKVsxXSAtIF9fczJbMV0p OyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAq KTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSArIGxlbjIpKVsy XSAtIF9fczJbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0 ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9 PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJs ZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkg KyBsZW4yKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9fYnVpbHRpbl9j b25zdGFudF9wIChzdWZmaXgpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChzdWZmaXgpICsg MSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHN1ZmZpeCkgPT0gMSkgJiYgKF9fczJfbGVuID0g c3RybGVuIChzdWZmaXgpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wICgo KHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJp bmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hf bmFtZSkpICsgbGVuMikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoc2VjKSA9PSAoKHZv aWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5n dGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkgKyBsZW4y KSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAi PG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3Jy dXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpICsgbGVuMikgPT0gMSkgPyAo X19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxu b25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVw dD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSArIGxlbjIpKVswXSAtICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoc3VmZml4KSlbMF0pOyBpZiAo X19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8g Ijxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29y cnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSArIGxlbjIpKVsxXSAtICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHN1ZmZpeCkpWzFdKTsg aWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikw KSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAi PGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkgKyBsZW4yKSlbMl0g LSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzdWZmaXgpKVsy XSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAq KTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSArIGxlbjIpKVsz XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHN1ZmZpeCkp WzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49 IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMp LT5zaF9uYW1lKSkgKyBsZW4yKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHN1ZmZpeCkpWzBdOyBp ZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsxXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHN1ZmZpeCkpWzFd KTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFb Ml0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChzdWZmaXgp KVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoX19z MVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHN1ZmZp eCkpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogc3RyY21wICgoKHNlYykgPT0gKCh2b2lkICop MCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8g Ijxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpICsgbGVuMiwgc3Vm Zml4KSkpKTsgfSkgPT0gMCkKICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGVs c2UKICAgICAgICB7CgoKICAgICAgICAgIGxlbiA9IHNpemVvZiAoIi5JQV82NC51bndpbmQiKSAt IDE7CiAgICAgICAgICBsZW4yID0gc2l6ZW9mICgiLklBXzY0LnVud2luZF9pbmZvIikgLSAxOwog ICAgICAgICAgc3VmZml4ID0gIiI7CiAgICAgICAgICBpZiAoKF9fZXh0ZW5zaW9uX18gKF9fYnVp bHRpbl9jb25zdGFudF9wIChsZW4pICYmICgoX19idWlsdGluX2NvbnN0YW50X3AgKCgodW53c2Vj KSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKCh1bndzZWMpLT5zaF9uYW1lID49IHN0cmlu Z190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArICh1bndzZWMpLT5z aF9uYW1lKSkpICYmIHN0cmxlbiAoKCh1bndzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIg OiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4i IDogc3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNoX25hbWUpKSkgPCAoKHNpemVfdCkgKGxlbikp KSB8fCAoX19idWlsdGluX2NvbnN0YW50X3AgKCIuSUFfNjQudW53aW5kIikgJiYgc3RybGVuICgi LklBXzY0LnVud2luZCIpIDwgKChzaXplX3QpIChsZW4pKSkpID8gX19leHRlbnNpb25fXyAoeyBz aXplX3QgX19zMV9sZW4sIF9fczJfbGVuOyAoX19idWlsdGluX2NvbnN0YW50X3AgKCgodW53c2Vj KSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKCh1bndzZWMpLT5zaF9uYW1lID49IHN0cmlu Z190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArICh1bndzZWMpLT5z aF9uYW1lKSkpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wICgiLklBXzY0LnVud2luZCIpICYmIChf X3MxX2xlbiA9IHN0cmxlbiAoKCh1bndzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAo KHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDog c3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNoX25hbWUpKSksIF9fczJfbGVuID0gc3RybGVuICgi LklBXzY0LnVud2luZCIpLCAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgoKHVud3NlYykgPT0g KCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgodW53c2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFi bGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAodW53c2VjKS0+c2hfbmFt ZSkpKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKHVud3NlYykgPT0gKCh2b2lkICop MCkgPyAiPG5vbmU+IiA6ICgodW53c2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3Ro ID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAodW53c2VjKS0+c2hfbmFtZSkpKSA9PSAx KSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiLklBXzY0 LnVud2luZCIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCIuSUFfNjQudW53aW5kIikg PT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21wICgoX19jb25zdCBjaGFyICopICgoKHVu d3NlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgodW53c2VjKS0+c2hfbmFtZSA+PSBz dHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAodW53c2Vj KS0+c2hfbmFtZSkpKSwgKF9fY29uc3QgY2hhciAqKSAoIi5JQV82NC51bndpbmQiKSwgKF9fczFf bGVuIDwgX19zMl9sZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9j b25zdGFudF9wICgoKHVud3NlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgodW53c2Vj KS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdf dGFibGUgKyAodW53c2VjKS0+c2hfbmFtZSkpKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgo KCh1bndzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUg Pj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVu d3NlYyktPnNoX25hbWUpKSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCh1bndzZWMp ID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5n X3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNo X25hbWUpKSkgPT0gMSkgJiYgKF9fczFfbGVuID0gc3RybGVuICgoKHVud3NlYykgPT0gKCh2b2lk ICopMCkgPyAiPG5vbmU+IiA6ICgodW53c2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVu Z3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAodW53c2VjKS0+c2hfbmFtZSkpKSwg X19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIi5JQV82NC51bndpbmQiKSAm JiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIi5JQV82NC51bndpbmQiKSArIDEpIC0gKHNpemVf dCkoY29uc3Qgdm9pZCAqKSgiLklBXzY0LnVud2luZCIpID09IDEpID8gKF9fZXh0ZW5zaW9uX18g KHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKCh1 bndzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0 cmluZ190YWJsZSArICh1bndzZWMpLT5zaF9uYW1lKSkpKVswXSAtICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoIi5JQV82NC51bndpbmQiKSlbMF0pOyBpZiAoX19z MV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCh1bndzZWMpID09ICgodm9pZCAqKTApID8g Ijxub25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8 Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNoX25hbWUpKSkpWzFdIC0gKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5JQV82NC51bndpbmQi KSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCh1bndzZWMpID09 ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5nX3Rh YmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNoX25h bWUpKSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo Ii5JQV82NC51bndpbmQiKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDAp IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKCh1bndzZWMpLT5zaF9uYW1l ID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArICh1 bndzZWMpLT5zaF9uYW1lKSkpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKCIuSUFfNjQudW53aW5kIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAo X19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIgPSAoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuSUFfNjQudW53aW5kIik7IHJlZ2lz dGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopICgoKHVud3NlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgodW53c2VjKS0+ c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFi bGUgKyAodW53c2VjKS0+c2hfbmFtZSkpKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4g MCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKCgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4i IDogKCh1bndzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+ IiA6IHN0cmluZ190YWJsZSArICh1bndzZWMpLT5zaF9uYW1lKSkpKVsxXSAtIF9fczJbMV0pOyBp ZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCh1bndzZWMpID09ICgodm9pZCAq KTApID8gIjxub25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0 aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNoX25hbWUpKSkpWzJd IC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQg PSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCh1bndzZWMp ID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5n X3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNo X25hbWUpKSkpWzNdIC0gX19zMlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5f Y29uc3RhbnRfcCAoIi5JQV82NC51bndpbmQiKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgo Ii5JQV82NC51bndpbmQiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiLklBXzY0LnVu d2luZCIpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAoIi5JQV82NC51bndpbmQiKSwgX19z Ml9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKCh1bndzZWMpID09ICgodm9pZCAq KTApID8gIjxub25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0 aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNoX25hbWUpKSkgJiYg KChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9u ZT4iIDogKCh1bndzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1 cHQ+IiA6IHN0cmluZ190YWJsZSArICh1bndzZWMpLT5zaF9uYW1lKSkpICsgMSkgLSAoc2l6ZV90 KShjb25zdCB2b2lkICopKCgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKCh1 bndzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0 cmluZ190YWJsZSArICh1bndzZWMpLT5zaF9uYW1lKSkpID09IDEpID8gKF9fZXh0ZW5zaW9uX18g KHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKCh1 bndzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0 cmluZ190YWJsZSArICh1bndzZWMpLT5zaF9uYW1lKSkpKVswXSAtICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoIi5JQV82NC51bndpbmQiKSlbMF0pOyBpZiAoX19z Ml9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCh1bndzZWMpID09ICgodm9pZCAqKTApID8g Ijxub25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8 Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNoX25hbWUpKSkpWzFdIC0gKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5JQV82NC51bndpbmQi KSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKCh1bndzZWMpID09 ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5nX3Rh YmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNoX25h bWUpKSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo Ii5JQV82NC51bndpbmQiKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDAp IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKCh1bndzZWMpLT5zaF9uYW1l ID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArICh1 bndzZWMpLT5zaF9uYW1lKSkpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKCIuSUFfNjQudW53aW5kIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAo X19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgodW53c2VjKSA9PSAoKHZvaWQgKikw KSA/ICI8bm9uZT4iIDogKCh1bndzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGgg PyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArICh1bndzZWMpLT5zaF9uYW1lKSkpOyByZWdp c3RlciBpbnQgX19yZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoIi5JQV82NC51bndpbmQiKSlbMF07IGlmIChfX3MyX2xlbiA+IDAg JiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5JQV82NC51bndpbmQiKSlbMV0pOyBpZiAo X19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuSUFfNjQudW53aW5k IikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChf X3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5J QV82NC51bndpbmQiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKCgodW53c2Vj KSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKCh1bndzZWMpLT5zaF9uYW1lID49IHN0cmlu Z190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArICh1bndzZWMpLT5z aF9uYW1lKSksICIuSUFfNjQudW53aW5kIikpKSk7IH0pIDogc3RybmNtcCAoKCh1bndzZWMpID09 ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5nX3Rh YmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNoX25h bWUpKSwgIi5JQV82NC51bndpbmQiLCBsZW4pKSkgPT0gMCkKCiAgICAgICAgICAgIHN1ZmZpeCA9 ICgodW53c2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKCh1bndzZWMpLT5zaF9uYW1l ID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArICh1 bndzZWMpLT5zaF9uYW1lKSkgKyBsZW47CiAgICAgICAgICBmb3IgKGkgPSAwLCBzZWMgPSBzZWN0 aW9uX2hlYWRlcnM7IGkgPCBlbGZfaGVhZGVyLmVfc2hudW07CiAgICAgICAgICAgICAgICsraSwg KytzZWMpCiAgICAgICAgICAgIGlmICgoX19leHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50 X3AgKGxlbjIpICYmICgoX19idWlsdGluX2NvbnN0YW50X3AgKCgoc2VjKSA9PSAoKHZvaWQgKikw KSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAi PGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpICYmIHN0cmxlbiAo KChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3Ry aW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNo X25hbWUpKSkgPCAoKHNpemVfdCkgKGxlbjIpKSkgfHwgKF9fYnVpbHRpbl9jb25zdGFudF9wICgi LklBXzY0LnVud2luZF9pbmZvIikgJiYgc3RybGVuICgiLklBXzY0LnVud2luZF9pbmZvIikgPCAo KHNpemVfdCkgKGxlbjIpKSkpID8gX19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9sZW4sIF9f czJfbGVuOyAoX19idWlsdGluX2NvbnN0YW50X3AgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8 bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1 cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpICYmIF9fYnVpbHRpbl9jb25z dGFudF9wICgiLklBXzY0LnVud2luZF9pbmZvIikgJiYgKF9fczFfbGVuID0gc3RybGVuICgoKHNl YykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdf dGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFt ZSkpKSwgX19zMl9sZW4gPSBzdHJsZW4gKCIuSUFfNjQudW53aW5kX2luZm8iKSwgKCEoKHNpemVf dCkoY29uc3Qgdm9pZCAqKSgoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNl YyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5n X3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKiko KChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3Ry aW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNo X25hbWUpKSkgPT0gMSkgfHwgX19zMV9sZW4gPj0gNCkgJiYgKCEoKHNpemVfdCkoY29uc3Qgdm9p ZCAqKSgoIi5JQV82NC51bndpbmRfaW5mbyIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICop KCIuSUFfNjQudW53aW5kX2luZm8iKSA9PSAxKSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAg KChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChz ZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmlu Z190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpLCAoX19jb25zdCBjaGFyICopICgiLklBXzY0LnVu d2luZF9pbmZvIiksIChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikg KyAxKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxu b25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVw dD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkgJiYgKChzaXplX3QpKGNvbnN0 IHZvaWQgKikoKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9u YW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSAr IChzZWMpLT5zaF9uYW1lKSkpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCgoc2VjKSA9 PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJs ZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkp ID09IDEpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxu b25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVw dD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSksIF9fczFfbGVuIDwgNCkgPyAo X19idWlsdGluX2NvbnN0YW50X3AgKCIuSUFfNjQudW53aW5kX2luZm8iKSAmJiAoKHNpemVfdCko Y29uc3Qgdm9pZCAqKSgoIi5JQV82NC51bndpbmRfaW5mbyIpICsgMSkgLSAoc2l6ZV90KShjb25z dCB2b2lkICopKCIuSUFfNjQudW53aW5kX2luZm8iKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7 IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+ c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFi bGUgKyAoc2VjKS0+c2hfbmFtZSkpKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopKCIuSUFfNjQudW53aW5kX2luZm8iKSlbMF0pOyBpZiAoX19zMV9sZW4g PiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIg OiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDog c3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5JQV82NC51bndpbmRfaW5mbyIpKVsxXSk7IGlm IChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkg PyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxj b3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSlbMl0gLSAoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLklBXzY0LnVud2luZF9pbmZv IikpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2 b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVu Z3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSlbM10g LSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLklBXzY0LnVu d2luZF9pbmZvIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCIuSUFfNjQudW53aW5kX2luZm8iKTsgcmVnaXN0ZXIgaW50IF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoc2Vj KSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190 YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1l KSkpKVswXSAtIF9fczJbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsg X19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo KChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3Ry aW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNo X25hbWUpKSkpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0g MCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+ PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2Vj KS0+c2hfbmFtZSkpKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3Vs dCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFt ZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAo c2VjKS0+c2hfbmFtZSkpKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9f YnVpbHRpbl9jb25zdGFudF9wICgiLklBXzY0LnVud2luZF9pbmZvIikgJiYgKChzaXplX3QpKGNv bnN0IHZvaWQgKikoKCIuSUFfNjQudW53aW5kX2luZm8iKSArIDEpIC0gKHNpemVfdCkoY29uc3Qg dm9pZCAqKSgiLklBXzY0LnVud2luZF9pbmZvIikgPT0gMSkgJiYgKF9fczJfbGVuID0gc3RybGVu ICgiLklBXzY0LnVud2luZF9pbmZvIiksIF9fczJfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0 YW50X3AgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1l ID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChz ZWMpLT5zaF9uYW1lKSkpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgoKHNlYykgPT0gKCh2 b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVu Z3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSArIDEp IC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+ IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIg OiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9f ICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2Vj KS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdf dGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopKCIuSUFfNjQudW53aW5kX2luZm8iKSlbMF0pOyBpZiAoX19zMl9s ZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25l PiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4i IDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkpWzFdIC0gKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5JQV82NC51bndpbmRfaW5mbyIpKVsxXSk7 IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICop MCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8g Ijxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSlbMl0gLSAoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLklBXzY0LnVud2luZF9p bmZvIikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9 ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKHNlYykgPT0g KCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVf bGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSlb M10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLklBXzY0 LnVud2luZF9pbmZvIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAo eyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChz ZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmlu Z190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSBfX3Mx WzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5JQV82 NC51bndpbmRfaW5mbyIpKVswXTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7 IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopICgiLklBXzY0LnVud2luZF9pbmZvIikpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAm JiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMl0gLSAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLklBXzY0LnVud2luZF9pbmZvIikpWzJdKTsg aWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0g KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5JQV82NC51bndp bmRfaW5mbyIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IHN0cmNtcCAoKChzZWMpID09ICgo dm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xl bmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSwgIi5J QV82NC51bndpbmRfaW5mbyIpKSkpOyB9KSA6IHN0cm5jbXAgKCgoc2VjKSA9PSAoKHZvaWQgKikw KSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAi PGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSksICIuSUFfNjQudW53 aW5kX2luZm8iLCBsZW4yKSkpID09IDAKCiAgICAgICAgICAgICAgICAmJiBfX2V4dGVuc2lvbl9f ICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKChz ZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5n X3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25h bWUpKSArIGxlbjIpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wIChzdWZmaXgpICYmIChfX3MxX2xl biA9IHN0cmxlbiAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNo X25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxl ICsgKHNlYyktPnNoX25hbWUpKSArIGxlbjIpLCBfX3MyX2xlbiA9IHN0cmxlbiAoc3VmZml4KSwg KCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25l PiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4i IDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSArIGxlbjIpICsgMSkgLSAoc2l6ZV90 KShjb25zdCB2b2lkICopKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMp LT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190 YWJsZSArIChzZWMpLT5zaF9uYW1lKSkgKyBsZW4yKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAm JiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKChzdWZmaXgpICsgMSkgLSAoc2l6ZV90KShjb25z dCB2b2lkICopKHN1ZmZpeCkgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21wICgoX19j b25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+ c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFi bGUgKyAoc2VjKS0+c2hfbmFtZSkpICsgbGVuMiksIChfX2NvbnN0IGNoYXIgKikgKHN1ZmZpeCks IChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikgKyAxKSA6IChfX2J1 aWx0aW5fY29uc3RhbnRfcCAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNl YyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5n X3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSArIGxlbjIpICYmICgoc2l6ZV90KShjb25zdCB2b2lk ICopKCgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+ PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2Vj KS0+c2hfbmFtZSkpICsgbGVuMikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKChzZWMp ID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3Rh YmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUp KSArIGxlbjIpID09IDEpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoKChzZWMpID09ICgodm9pZCAq KTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSArIGxlbjIpLCBf X3MxX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzdWZmaXgpICYmICgoc2l6ZV90 KShjb25zdCB2b2lkICopKChzdWZmaXgpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHN1 ZmZpeCkgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgo dm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xl bmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSArIGxl bjIpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoc3Vm Zml4KSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQg PSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09 ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxl X2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSAr IGxlbjIpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KHN1ZmZpeCkpWzFdKTsgaWYgKF9fczFfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoc2Vj KSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190 YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1l KSkgKyBsZW4yKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopIChzdWZmaXgpKVsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19y ZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChz ZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5n X3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25h bWUpKSArIGxlbjIpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKHN1ZmZpeCkpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAo eyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKHN1ZmZpeCk7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lk ICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3Ro ID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpICsgbGVuMikp WzBdIC0gX19zMlswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jl c3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKHNl YykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdf dGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFt ZSkpICsgbGVuMikpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQg PT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFt ZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAo c2VjKS0+c2hfbmFtZSkpICsgbGVuMikpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+IDIg JiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNl YyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5n X3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSArIGxlbjIpKVszXSAtIF9fczJbM10pOyB9IH0gX19y ZXN1bHQ7IH0pKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKHN1ZmZpeCkgJiYgKChzaXplX3Qp KGNvbnN0IHZvaWQgKikoKHN1ZmZpeCkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoc3Vm Zml4KSA9PSAxKSAmJiAoX19zMl9sZW4gPSBzdHJsZW4gKHN1ZmZpeCksIF9fczJfbGVuIDwgNCkg PyAoX19idWlsdGluX2NvbnN0YW50X3AgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4i IDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6 IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkgKyBsZW4yKSAmJiAoKHNpemVfdCkoY29u c3Qgdm9pZCAqKSgoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNo X25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxl ICsgKHNlYyktPnNoX25hbWUpKSArIGxlbjIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICop KCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0 cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5z aF9uYW1lKSkgKyBsZW4yKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBf X3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgo KHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJp bmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hf bmFtZSkpICsgbGVuMikpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKShzdWZmaXgpKVswXSk7IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkg eyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBz dHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+ c2hfbmFtZSkpICsgbGVuMikpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoc3VmZml4KSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09 IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUg Pj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNl YyktPnNoX25hbWUpKSArIGxlbjIpKVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKHN1ZmZpeCkpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3Vs dCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFt ZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAo c2VjKS0+c2hfbmFtZSkpICsgbGVuMikpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoc3VmZml4KSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4 dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMSA9IChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxu b25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVw dD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSArIGxlbjIpOyByZWdpc3RlciBp bnQgX19yZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoc3VmZml4KSlbMF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0g MCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoc3VmZml4KSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKHN1ZmZpeCkpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jl c3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoc3VmZml4KSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBz dHJjbXAgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1l ID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChz ZWMpLT5zaF9uYW1lKSkgKyBsZW4yLCBzdWZmaXgpKSkpOyB9KSA9PSAwKQogICAgICAgICAgICAg IGJyZWFrOwogICAgICAgIH0KCiAgICAgIGlmIChpID09IGVsZl9oZWFkZXIuZV9zaG51bSkKICAg ICAgICB7CiAgICAgICAgICBwcmludGYgKCgiXG5Db3VsZCBub3QgZmluZCB1bndpbmQgaW5mbyBz ZWN0aW9uIGZvciAiKSk7CgogICAgICAgICAgaWYgKHN0cmluZ190YWJsZSA9PSAoKHZvaWQgKikw KSkKICAgICAgICAgICAgcHJpbnRmICgiJWQiLCB1bndzZWMtPnNoX25hbWUpOwogICAgICAgICAg ZWxzZQogICAgICAgICAgICBwcmludGYgKCgiJyVzJyIpLCAoKHVud3NlYykgPT0gKCh2b2lkICop MCkgPyAiPG5vbmU+IiA6ICgodW53c2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3Ro ID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAodW53c2VjKS0+c2hfbmFtZSkpKTsKICAg ICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBhdXguaW5mb19zaXplID0gc2Vj LT5zaF9zaXplOwogICAgICAgICAgYXV4LmluZm9fYWRkciA9IHNlYy0+c2hfYWRkcjsKICAgICAg ICAgIGF1eC5pbmZvID0gKGNoYXIgKikgZ2V0X2RhdGEgKCgodm9pZCAqKTApLCBmaWxlLCBzZWMt PnNoX29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1eC5p bmZvX3NpemUsICgidW53aW5kIGluZm8iKSk7CgogICAgICAgICAgcHJpbnRmICgoIlxuVW53aW5k IHNlY3Rpb24gIikpOwoKICAgICAgICAgIGlmIChzdHJpbmdfdGFibGUgPT0gKCh2b2lkICopMCkp CiAgICAgICAgICAgIHByaW50ZiAoIiVkIiwgdW53c2VjLT5zaF9uYW1lKTsKICAgICAgICAgIGVs c2UKICAgICAgICAgICAgcHJpbnRmICgoIiclcyciKSwgKCh1bndzZWMpID09ICgodm9pZCAqKTAp ID8gIjxub25lPiIgOiAoKHVud3NlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHVud3NlYyktPnNoX25hbWUpKSk7CgogICAg ICAgICAgcHJpbnRmICgoIiBhdCBvZmZzZXQgMHglbHggY29udGFpbnMgJWx1IGVudHJpZXM6XG4i KSwKICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIHVud3NlYy0+c2hfb2Zmc2V0LAog ICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgKHVud3NlYy0+c2hfc2l6ZSAvICgzICog YWRkcl9zaXplKSkpOwoKICAgICAgICAgICh2b2lkKSBzbHVycF9pYTY0X3Vud2luZF90YWJsZSAo ZmlsZSwgJiBhdXgsIHVud3NlYyk7CgogICAgICAgICAgaWYgKGF1eC50YWJsZV9sZW4gPiAwKQog ICAgICAgICAgICBkdW1wX2lhNjRfdW53aW5kICgmIGF1eCk7CgogICAgICAgICAgaWYgKGF1eC50 YWJsZSkKICAgICAgICAgICAgZnJlZSAoKGNoYXIgKikgYXV4LnRhYmxlKTsKICAgICAgICAgIGlm IChhdXguaW5mbykKICAgICAgICAgICAgZnJlZSAoKGNoYXIgKikgYXV4LmluZm8pOwogICAgICAg ICAgYXV4LnRhYmxlID0gKCh2b2lkICopMCk7CiAgICAgICAgICBhdXguaW5mbyA9ICgodm9pZCAq KTApOwogICAgICAgIH0KICAgIH0KCiAgaWYgKGF1eC5zeW10YWIpCiAgICBmcmVlIChhdXguc3lt dGFiKTsKICBpZiAoYXV4LnN0cnRhYikKICAgIGZyZWUgKChjaGFyICopIGF1eC5zdHJ0YWIpOwoK ICByZXR1cm4gMTsKfQoKc3RhdGljIHZvaWQKZHluYW1pY19zZWdtZW50X21pcHNfdmFsIChlbnRy eSkKICAgICBFbGZfSW50ZXJuYWxfRHluICplbnRyeTsKewogIHN3aXRjaCAoZW50cnktPmRfdGFn KQogICAgewogICAgY2FzZSAweDcwMDAwMDA1OgogICAgICBpZiAoZW50cnktPmRfdW4uZF92YWwg PT0gMCkKICAgICAgICBwcmludGYgKCJOT05FXG4iKTsKICAgICAgZWxzZQogICAgICAgIHsKICAg ICAgICAgIHN0YXRpYyBjb25zdCBjaGFyICogb3B0c1tdID0KICAgICAgICAgIHsKICAgICAgICAg ICAgIlFVSUNLU1RBUlQiLCAiTk9UUE9UIiwgIk5PX0xJQlJBUllfUkVQTEFDRU1FTlQiLAogICAg ICAgICAgICAiTk9fTU9WRSIsICJTR0lfT05MWSIsICJHVUFSQU5URUVfSU5JVCIsICJERUxUQV9D X1BMVVNfUExVUyIsCiAgICAgICAgICAgICJHVUFSQU5URUVfU1RBUlRfSU5JVCIsICJQSVhJRSIs ICJERUZBVUxUX0RFTEFZX0xPQUQiLAogICAgICAgICAgICAiUkVRVUlDS1NUQVJUIiwgIlJFUVVJ Q0tTVEFSVEVEIiwgIkNPUkQiLCAiTk9fVU5SRVNfVU5ERUYiLAogICAgICAgICAgICAiUkxEX09S REVSX1NBRkUiCiAgICAgICAgICB9OwogICAgICAgICAgdW5zaWduZWQgaW50IGNudDsKICAgICAg ICAgIGludCBmaXJzdCA9IDE7CiAgICAgICAgICBmb3IgKGNudCA9IDA7IGNudCA8IChzaXplb2Yg KG9wdHMpIC8gc2l6ZW9mICgob3B0cylbMF0pKTsgKytjbnQpCiAgICAgICAgICAgIGlmIChlbnRy eS0+ZF91bi5kX3ZhbCAmICgxIDw8IGNudCkpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgcHJpbnRmICgiJXMlcyIsIGZpcnN0ID8gIiIgOiAiICIsIG9wdHNbY250XSk7CiAgICAgICAg ICAgICAgICBmaXJzdCA9IDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgcHV0cyAoIiIpOwog ICAgICAgIH0KICAgICAgYnJlYWs7CgogICAgY2FzZSAweDcwMDAwMDA0OgogICAgICBpZiAoZHlu YW1pY19zdHJpbmdzICE9ICgodm9pZCAqKTApKQogICAgICAgIHByaW50ZiAoIkludGVyZmFjZSBW ZXJzaW9uOiAlc1xuIiwKICAgICAgICAgICAgICAgIGR5bmFtaWNfc3RyaW5ncyArIGVudHJ5LT5k X3VuLmRfdmFsKTsKICAgICAgZWxzZQogICAgICAgIHByaW50ZiAoIiVsZFxuIiwgKGxvbmcpIGVu dHJ5LT5kX3VuLmRfcHRyKTsKICAgICAgYnJlYWs7CgogICAgY2FzZSAweDcwMDAwMDAyOgogICAg ICB7CiAgICAgICAgY2hhciB0aW1lYnVmWzIwXTsKICAgICAgICBzdHJ1Y3QgdG0gKnRtcDsKCiAg ICAgICAgdGltZV90IHRpbWUgPSBlbnRyeS0+ZF91bi5kX3ZhbDsKICAgICAgICB0bXAgPSBnbXRp bWUgKCZ0aW1lKTsKICAgICAgICBzcHJpbnRmICh0aW1lYnVmLCAiJTA0dS0lMDJ1LSUwMnVUJTAy dTolMDJ1OiUwMnUiLAogICAgICAgICAgICAgICAgIHRtcC0+dG1feWVhciArIDE5MDAsIHRtcC0+ dG1fbW9uICsgMSwgdG1wLT50bV9tZGF5LAogICAgICAgICAgICAgICAgIHRtcC0+dG1faG91ciwg dG1wLT50bV9taW4sIHRtcC0+dG1fc2VjKTsKICAgICAgICBwcmludGYgKCJUaW1lIFN0YW1wOiAl c1xuIiwgdGltZWJ1Zik7CiAgICAgIH0KICAgICAgYnJlYWs7CgogICAgY2FzZSAweDcwMDAwMDAx OgogICAgY2FzZSAweDcwMDAwMDBhOgogICAgY2FzZSAweDcwMDAwMDBiOgogICAgY2FzZSAweDcw MDAwMDEwOgogICAgY2FzZSAweDcwMDAwMDExOgogICAgY2FzZSAweDcwMDAwMDEyOgogICAgY2Fz ZSAweDcwMDAwMDE0OgogICAgY2FzZSAweDcwMDAwMDE4OgogICAgY2FzZSAweDcwMDAwMDFhOgog ICAgY2FzZSAweDcwMDAwMDFjOgogICAgY2FzZSAweDcwMDAwMDFlOgogICAgY2FzZSAweDcwMDAw MDIxOgogICAgY2FzZSAweDcwMDAwMDJmOgogICAgICBwcmludGYgKCIlbGRcbiIsIChsb25nKSBl bnRyeS0+ZF91bi5kX3B0cik7CiAgICAgIGJyZWFrOwoKICAgIGRlZmF1bHQ6CiAgICAgIHByaW50 ZiAoIiUjbHhcbiIsIChsb25nKSBlbnRyeS0+ZF91bi5kX3B0cik7CiAgICB9Cn0KCgpzdGF0aWMg dm9pZApkeW5hbWljX3NlZ21lbnRfcGFyaXNjX3ZhbCAoZW50cnkpCiAgICAgRWxmX0ludGVybmFs X0R5biAqZW50cnk7CnsKICBzd2l0Y2ggKGVudHJ5LT5kX3RhZykKICAgIHsKICAgIGNhc2UgKDB4 NjAwMDAwMDAgKyAweDEpOgogICAgICB7CiAgICAgICAgc3RhdGljIHN0cnVjdAogICAgICAgIHsK ICAgICAgICAgIGxvbmcgaW50IGJpdDsKICAgICAgICAgIGNvbnN0IGNoYXIgKnN0cjsKICAgICAg ICB9CiAgICAgICAgZmxhZ3NbXSA9CiAgICAgICAgewogICAgICAgICAgeyAweDAwMDEsICJIUF9E RUJVR19QUklWQVRFIiB9LAogICAgICAgICAgeyAweDAwMDIsICJIUF9ERUJVR19DQUxMQkFDSyIg fSwKICAgICAgICAgIHsgMHgwMDA0LCAiSFBfREVCVUdfQ0FMTEJBQ0tfQk9SIiB9LAogICAgICAg ICAgeyAweDAwMDgsICJIUF9OT19FTlZWQVIiIH0sCiAgICAgICAgICB7IDB4MDAxMCwgIkhQX0JJ TkRfTk9XIiB9LAogICAgICAgICAgeyAweDAwMjAsICJIUF9CSU5EX05PTkZBVEFMIiB9LAogICAg ICAgICAgeyAweDAwNDAsICJIUF9CSU5EX1ZFUkJPU0UiIH0sCiAgICAgICAgICB7IDB4MDA4MCwg IkhQX0JJTkRfUkVTVFJJQ1RFRCIgfSwKICAgICAgICAgIHsgMHgwMTAwLCAiSFBfQklORF9TWU1C T0xJQyIgfSwKICAgICAgICAgIHsgMHgwMjAwLCAiSFBfUlBBVEhfRklSU1QiIH0sCiAgICAgICAg ICB7IDB4MDQwMCwgIkhQX0JJTkRfREVQVEhfRklSU1QiIH0KICAgICAgICB9OwogICAgICAgIGlu dCBmaXJzdCA9IDE7CiAgICAgICAgc2l6ZV90IGNudDsKICAgICAgICBiZmRfdm1hIHZhbCA9IGVu dHJ5LT5kX3VuLmRfdmFsOwoKICAgICAgICBmb3IgKGNudCA9IDA7IGNudCA8IHNpemVvZiAoZmxh Z3MpIC8gc2l6ZW9mIChmbGFnc1swXSk7ICsrY250KQogICAgICAgICAgaWYgKHZhbCAmIGZsYWdz W2NudF0uYml0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCEgZmlyc3QpCiAgICAg ICAgICAgICAgICBwdXRjaGFyICgnICcpOwogICAgICAgICAgICAgIGZwdXRzIChmbGFnc1tjbnRd LnN0ciwgc3Rkb3V0KTsKICAgICAgICAgICAgICBmaXJzdCA9IDA7CiAgICAgICAgICAgICAgdmFs IF49IGZsYWdzW2NudF0uYml0OwogICAgICAgICAgICB9CgogICAgICAgIGlmICh2YWwgIT0gMCB8 fCBmaXJzdCkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKCEgZmlyc3QpCiAgICAgICAgICAg ICAgcHV0Y2hhciAoJyAnKTsKICAgICAgICAgICAgcHJpbnRfdm1hICh2YWwsIEhFWCk7CiAgICAg ICAgICB9CiAgICAgIH0KICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAgICAgcHJpbnRfdm1h IChlbnRyeS0+ZF91bi5kX3B0ciwgUFJFRklYX0hFWCk7CiAgICAgIGJyZWFrOwogICAgfQogIHB1 dGNoYXIgKCdcbicpOwp9CgpzdGF0aWMgdm9pZApkeW5hbWljX3NlZ21lbnRfaWE2NF92YWwgKGVu dHJ5KQogICAgIEVsZl9JbnRlcm5hbF9EeW4gKmVudHJ5Owp7CiAgc3dpdGNoIChlbnRyeS0+ZF90 YWcpCiAgICB7CiAgICBjYXNlICgweDcwMDAwMDAwICsgMCk6CgogICAgICBwcmludF92bWEgKGVu dHJ5LT5kX3VuLmRfcHRyLCBQUkVGSVhfSEVYKTsKICAgICAgcHJpbnRmICgiIC0tICIpOwogICAg ICBwcmludF92bWEgKGVudHJ5LT5kX3VuLmRfcHRyICsgKDMgKiA4KSwgUFJFRklYX0hFWCk7CiAg ICAgIHByaW50ZiAoIlxuIik7CiAgICB9Cn0KCnN0YXRpYyBpbnQKZ2V0XzMyYml0X2R5bmFtaWNf c2VnbWVudCAoZmlsZSkKICAgICBGSUxFICpmaWxlOwp7CiAgRWxmMzJfRXh0ZXJuYWxfRHluICpl ZHluOwogIEVsZl9JbnRlcm5hbF9EeW4gKmVudHJ5OwogIGJmZF9zaXplX3R5cGUgaTsKCiAgZWR5 biA9IChFbGYzMl9FeHRlcm5hbF9EeW4gKikgZ2V0X2RhdGEgKCgodm9pZCAqKTApLCBmaWxlLCBk eW5hbWljX2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5 bmFtaWNfc2l6ZSwgKCJkeW5hbWljIHNlZ21lbnQiKSk7CiAgaWYgKCFlZHluKQogICAgcmV0dXJu IDA7CgoKCgogIGR5bmFtaWNfc2l6ZSA9IDA7CiAgd2hpbGUgKCooRWxmMzJfV29yZCAqKSBlZHlu W2R5bmFtaWNfc2l6ZSsrXS5kX3RhZyAhPSAwKQogICAgOwoKICBkeW5hbWljX3NlZ21lbnQgPSAo RWxmX0ludGVybmFsX0R5biAqKQogICAgbWFsbG9jIChkeW5hbWljX3NpemUgKiBzaXplb2YgKEVs Zl9JbnRlcm5hbF9EeW4pKTsKCiAgaWYgKGR5bmFtaWNfc2VnbWVudCA9PSAoKHZvaWQgKikwKSkK ICAgIHsKICAgICAgZXJyb3IgKCgiT3V0IG9mIG1lbW9yeVxuIikpOwogICAgICBmcmVlIChlZHlu KTsKICAgICAgcmV0dXJuIDA7CiAgICB9CgogIGZvciAoaSA9IDAsIGVudHJ5ID0gZHluYW1pY19z ZWdtZW50OwogICAgICAgaSA8IGR5bmFtaWNfc2l6ZTsKICAgICAgIGkrKywgZW50cnkrKykKICAg IHsKICAgICAgZW50cnktPmRfdGFnID0gYnl0ZV9nZXQgKGVkeW5baV0uZF90YWcsIHNpemVvZiAo ZWR5bltpXS5kX3RhZykpOwogICAgICBlbnRyeS0+ZF91bi5kX3ZhbCA9IGJ5dGVfZ2V0IChlZHlu W2ldLmRfdW4uZF92YWwsIHNpemVvZiAoZWR5bltpXS5kX3VuLmRfdmFsKSk7CiAgICB9CgogIGZy ZWUgKGVkeW4pOwoKICByZXR1cm4gMTsKfQoKc3RhdGljIGludApnZXRfNjRiaXRfZHluYW1pY19z ZWdtZW50IChmaWxlKQogICAgIEZJTEUgKmZpbGU7CnsKICBFbGY2NF9FeHRlcm5hbF9EeW4gKmVk eW47CiAgRWxmX0ludGVybmFsX0R5biAqZW50cnk7CiAgYmZkX3NpemVfdHlwZSBpOwoKICBlZHlu ID0gKEVsZjY0X0V4dGVybmFsX0R5biAqKSBnZXRfZGF0YSAoKCh2b2lkICopMCksIGZpbGUsIGR5 bmFtaWNfYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHlu YW1pY19zaXplLCAoImR5bmFtaWMgc2VnbWVudCIpKTsKICBpZiAoIWVkeW4pCiAgICByZXR1cm4g MDsKCgoKCiAgZHluYW1pY19zaXplID0gMDsKICB3aGlsZSAoKihiZmRfdm1hICopIGVkeW5bZHlu YW1pY19zaXplKytdLmRfdGFnICE9IDApCiAgICA7CgogIGR5bmFtaWNfc2VnbWVudCA9IChFbGZf SW50ZXJuYWxfRHluICopCiAgICBtYWxsb2MgKGR5bmFtaWNfc2l6ZSAqIHNpemVvZiAoRWxmX0lu dGVybmFsX0R5bikpOwoKICBpZiAoZHluYW1pY19zZWdtZW50ID09ICgodm9pZCAqKTApKQogICAg ewogICAgICBlcnJvciAoKCJPdXQgb2YgbWVtb3J5XG4iKSk7CiAgICAgIGZyZWUgKGVkeW4pOwog ICAgICByZXR1cm4gMDsKICAgIH0KCiAgZm9yIChpID0gMCwgZW50cnkgPSBkeW5hbWljX3NlZ21l bnQ7CiAgICAgICBpIDwgZHluYW1pY19zaXplOwogICAgICAgaSsrLCBlbnRyeSsrKQogICAgewog ICAgICBlbnRyeS0+ZF90YWcgPSBieXRlX2dldCAoZWR5bltpXS5kX3RhZywgLTgpOwogICAgICBl bnRyeS0+ZF91bi5kX3ZhbCA9IGJ5dGVfZ2V0IChlZHluW2ldLmRfdW4uZF92YWwsIC04KTsKICAg IH0KCiAgZnJlZSAoZWR5bik7CgogIHJldHVybiAxOwp9CgpzdGF0aWMgY29uc3QgY2hhciAqCmdl dF9keW5hbWljX2ZsYWdzIChmbGFncykKICAgICBiZmRfdm1hIGZsYWdzOwp7CiAgc3RhdGljIGNo YXIgYnVmZlsxMjhdOwogIGNoYXIgKnAgPSBidWZmOwoKICAqcCA9ICdcMCc7CiAgd2hpbGUgKGZs YWdzKQogICAgewogICAgICBiZmRfdm1hIGZsYWc7CgogICAgICBmbGFnID0gZmxhZ3MgJiAtIGZs YWdzOwogICAgICBmbGFncyAmPSB+IGZsYWc7CgogICAgICBpZiAocCAhPSBidWZmKQogICAgICAg ICpwKysgPSAnICc7CgogICAgICBzd2l0Y2ggKGZsYWcpCiAgICAgICAgewogICAgICAgIGNhc2Ug KDEgPDwgMCk6IHN0cmNweSAocCwgIk9SSUdJTiIpOyBicmVhazsKICAgICAgICBjYXNlICgxIDw8 IDEpOiBzdHJjcHkgKHAsICJTWU1CT0xJQyIpOyBicmVhazsKICAgICAgICBjYXNlICgxIDw8IDIp OiBzdHJjcHkgKHAsICJURVhUUkVMIik7IGJyZWFrOwogICAgICAgIGNhc2UgKDEgPDwgMyk6IHN0 cmNweSAocCwgIkJJTkRfTk9XIik7IGJyZWFrOwogICAgICAgIGNhc2UgKDEgPDwgNCk6IHN0cmNw eSAocCwgIlNUQVRJQ19UTFMiKTsgYnJlYWs7CiAgICAgICAgZGVmYXVsdDogc3RyY3B5IChwLCAi dW5rbm93biIpOyBicmVhazsKICAgICAgICB9CgogICAgICBwID0gKF9fZXh0ZW5zaW9uX18gKF9f YnVpbHRpbl9jb25zdGFudF9wICgnXDAnKSAmJiAoJ1wwJykgPT0gJ1wwJyA/IChjaGFyICopIF9f cmF3bWVtY2hyIChwLCAnXDAnKSA6IHN0cmNociAocCwgJ1wwJykpKTsKICAgIH0KICByZXR1cm4g YnVmZjsKfQoKCnN0YXRpYyBpbnQKcHJvY2Vzc19keW5hbWljX3NlZ21lbnQgKGZpbGUpCiAgICAg RklMRSAqZmlsZTsKewogIEVsZl9JbnRlcm5hbF9EeW4gKmVudHJ5OwogIGJmZF9zaXplX3R5cGUg aTsKCiAgaWYgKGR5bmFtaWNfc2l6ZSA9PSAwKQogICAgewogICAgICBpZiAoZG9fZHluYW1pYykK ICAgICAgICBwcmludGYgKCgiXG5UaGVyZSBpcyBubyBkeW5hbWljIHNlZ21lbnQgaW4gdGhpcyBm aWxlLlxuIikpOwoKICAgICAgcmV0dXJuIDE7CiAgICB9CgogIGlmIChpc18zMmJpdF9lbGYpCiAg ICB7CiAgICAgIGlmICghIGdldF8zMmJpdF9keW5hbWljX3NlZ21lbnQgKGZpbGUpKQogICAgICAg IHJldHVybiAwOwogICAgfQogIGVsc2UgaWYgKCEgZ2V0XzY0Yml0X2R5bmFtaWNfc2VnbWVudCAo ZmlsZSkpCiAgICByZXR1cm4gMDsKCgogIGlmIChkeW5hbWljX3N5bWJvbHMgPT0gKCh2b2lkICop MCkpCiAgICB7CiAgICAgIGZvciAoaSA9IDAsIGVudHJ5ID0gZHluYW1pY19zZWdtZW50OwogICAg ICAgICAgIGkgPCBkeW5hbWljX3NpemU7CiAgICAgICAgICAgKytpLCArK2VudHJ5KQogICAgICAg IHsKICAgICAgICAgIEVsZl9JbnRlcm5hbF9TaGRyIHNlY3Rpb247CgogICAgICAgICAgaWYgKGVu dHJ5LT5kX3RhZyAhPSA2KQogICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICBkeW5hbWlj X2luZm9bNl0gPSBlbnRyeS0+ZF91bi5kX3ZhbDsKCgoKCgogICAgICAgICAgc2VjdGlvbi5zaF9v ZmZzZXQgPSBlbnRyeS0+ZF91bi5kX3ZhbCAtIGxvYWRhZGRyOwoKICAgICAgICAgIGlmIChmc2Vl ayAoZmlsZSwgMCwgMikpCiAgICAgICAgICAgIGVycm9yICgoIlVuYWJsZSB0byBzZWVrIHRvIGVu ZCBvZiBmaWxlISIpKTsKCiAgICAgICAgICBzZWN0aW9uLnNoX3NpemUgPSBmdGVsbCAoZmlsZSkg LSBzZWN0aW9uLnNoX29mZnNldDsKICAgICAgICAgIGlmIChpc18zMmJpdF9lbGYpCiAgICAgICAg ICAgIHNlY3Rpb24uc2hfZW50c2l6ZSA9IHNpemVvZiAoRWxmMzJfRXh0ZXJuYWxfU3ltKTsKICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgc2VjdGlvbi5zaF9lbnRzaXplID0gc2l6ZW9mIChFbGY2 NF9FeHRlcm5hbF9TeW0pOwoKICAgICAgICAgIG51bV9keW5hbWljX3N5bXMgPSBzZWN0aW9uLnNo X3NpemUgLyBzZWN0aW9uLnNoX2VudHNpemU7CiAgICAgICAgICBpZiAobnVtX2R5bmFtaWNfc3lt cyA8IDEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBlcnJvciAoKCJVbmFibGUgdG8gZGV0 ZXJtaW5lIHRoZSBudW1iZXIgb2Ygc3ltYm9scyB0byBsb2FkXG4iKSk7CiAgICAgICAgICAgICAg Y29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBkeW5hbWljX3N5bWJvbHMgPSAoaXNf MzJiaXRfZWxmID8gZ2V0XzMyYml0X2VsZl9zeW1ib2xzIChmaWxlLCAmc2VjdGlvbikgOiBnZXRf NjRiaXRfZWxmX3N5bWJvbHMgKGZpbGUsICZzZWN0aW9uKSk7CiAgICAgICAgfQogICAgfQoKCiAg aWYgKGR5bmFtaWNfc3RyaW5ncyA9PSAoKHZvaWQgKikwKSkKICAgIHsKICAgICAgZm9yIChpID0g MCwgZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7CiAgICAgICAgICAgaSA8IGR5bmFtaWNfc2l6ZTsK ICAgICAgICAgICArK2ksICsrZW50cnkpCiAgICAgICAgewogICAgICAgICAgdW5zaWduZWQgbG9u ZyBvZmZzZXQ7CiAgICAgICAgICBsb25nIHN0cl90YWJfbGVuOwoKICAgICAgICAgIGlmIChlbnRy eS0+ZF90YWcgIT0gNSkKICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgZHluYW1pY19p bmZvWzVdID0gZW50cnktPmRfdW4uZF92YWw7CgoKCgoKCiAgICAgICAgICBvZmZzZXQgPSBlbnRy eS0+ZF91bi5kX3ZhbCAtIGxvYWRhZGRyOwogICAgICAgICAgaWYgKGZzZWVrIChmaWxlLCAwLCAy KSkKICAgICAgICAgICAgZXJyb3IgKCgiVW5hYmxlIHRvIHNlZWsgdG8gZW5kIG9mIGZpbGVcbiIp KTsKICAgICAgICAgIHN0cl90YWJfbGVuID0gZnRlbGwgKGZpbGUpIC0gb2Zmc2V0OwoKICAgICAg ICAgIGlmIChzdHJfdGFiX2xlbiA8IDEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBlcnJv cgogICAgICAgICAgICAgICAgKCgiVW5hYmxlIHRvIGRldGVybWluZSB0aGUgbGVuZ3RoIG9mIHRo ZSBkeW5hbWljIHN0cmluZyB0YWJsZVxuIikpOwogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg ICAgICAgICB9CgogICAgICAgICAgZHluYW1pY19zdHJpbmdzID0gKGNoYXIgKikgZ2V0X2RhdGEg KCgodm9pZCAqKTApLCBmaWxlLCBvZmZzZXQsIHN0cl90YWJfbGVuLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZHluYW1pYyBzdHJpbmcgdGFibGUiKSk7 CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgoKICBpZiAoZHluYW1pY19zeW1pbmZv ID09ICgodm9pZCAqKTApKQogICAgewogICAgICB1bnNpZ25lZCBsb25nIHN5bWluc3ogPSAwOwoK ICAgICAgZm9yIChpID0gMCwgZW50cnkgPSBkeW5hbWljX3NlZ21lbnQ7CiAgICAgICAgICAgaSA8 IGR5bmFtaWNfc2l6ZTsKICAgICAgICAgICArK2ksICsrZW50cnkpCiAgICAgICAgewogICAgICAg ICAgaWYgKGVudHJ5LT5kX3RhZyA9PSAweDZmZmZmZGZmKQogICAgICAgICAgICB7CgoKICAgICAg ICAgICAgICAoKHZvaWQpICgoc2l6ZW9mIChFbGZfRXh0ZXJuYWxfU3ltaW5mbykgPT0gZW50cnkt PmRfdW4uZF92YWwpID8gMCA6IChfX2Fzc2VydF9mYWlsICgic2l6ZW9mIChFbGZfRXh0ZXJuYWxf U3ltaW5mbykgPT0gZW50cnktPmRfdW4uZF92YWwiLCAicmVhZGVsZi5jIiwgNDc0OCwgX19QUkVU VFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKGVu dHJ5LT5kX3RhZyA9PSAweDZmZmZmZGZlKQogICAgICAgICAgICBzeW1pbnN6ID0gZW50cnktPmRf dW4uZF92YWw7CiAgICAgICAgICBlbHNlIGlmIChlbnRyeS0+ZF90YWcgPT0gMHg2ZmZmZmVmZikK ICAgICAgICAgICAgZHluYW1pY19zeW1pbmZvX29mZnNldCA9IGVudHJ5LT5kX3VuLmRfdmFsIC0g bG9hZGFkZHI7CiAgICAgICAgfQoKICAgICAgaWYgKGR5bmFtaWNfc3ltaW5mb19vZmZzZXQgIT0g MCAmJiBzeW1pbnN6ICE9IDApCiAgICAgICAgewogICAgICAgICAgRWxmX0V4dGVybmFsX1N5bWlu Zm8gKmV4dHN5bWluZm87CiAgICAgICAgICBFbGZfSW50ZXJuYWxfU3ltaW5mbyAqc3ltaW5mbzsK CgogICAgICAgICAgZXh0c3ltaW5mbyA9ICgoRWxmX0V4dGVybmFsX1N5bWluZm8gKikKICAgICAg ICAgICAgICAgICAgICAgICAgZ2V0X2RhdGEgKCgodm9pZCAqKTApLCBmaWxlLCBkeW5hbWljX3N5 bWluZm9fb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltaW5zeiwg KCJzeW1ib2wgaW5mb3JtYXRpb24iKSkpOwogICAgICAgICAgaWYgKCFleHRzeW1pbmZvKQogICAg ICAgICAgICByZXR1cm4gMDsKCiAgICAgICAgICBkeW5hbWljX3N5bWluZm8gPSAoRWxmX0ludGVy bmFsX1N5bWluZm8gKikgbWFsbG9jIChzeW1pbnN6KTsKICAgICAgICAgIGlmIChkeW5hbWljX3N5 bWluZm8gPT0gKCh2b2lkICopMCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBlcnJvciAo KCJPdXQgb2YgbWVtb3J5XG4iKSk7CiAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAg IH0KCiAgICAgICAgICBkeW5hbWljX3N5bWluZm9fbmVudCA9IHN5bWluc3ogLyBzaXplb2YgKEVs Zl9FeHRlcm5hbF9TeW1pbmZvKTsKICAgICAgICAgIGZvciAoaSA9IDAsIHN5bWluZm8gPSBkeW5h bWljX3N5bWluZm87IGkgPCBkeW5hbWljX3N5bWluZm9fbmVudDsKICAgICAgICAgICAgICAgKytp LCArK3N5bWluZm8pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzeW1pbmZvLT5zaV9ib3Vu ZHRvID0gYnl0ZV9nZXQgKGV4dHN5bWluZm9baV0uc2lfYm91bmR0bywgc2l6ZW9mIChleHRzeW1p bmZvW2ldLnNpX2JvdW5kdG8pKTsKICAgICAgICAgICAgICBzeW1pbmZvLT5zaV9mbGFncyA9IGJ5 dGVfZ2V0IChleHRzeW1pbmZvW2ldLnNpX2ZsYWdzLCBzaXplb2YgKGV4dHN5bWluZm9baV0uc2lf ZmxhZ3MpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGZyZWUgKGV4dHN5bWluZm8pOwogICAg ICAgIH0KICAgIH0KCiAgaWYgKGRvX2R5bmFtaWMgJiYgZHluYW1pY19hZGRyKQogICAgcHJpbnRm ICgoIlxuRHluYW1pYyBzZWdtZW50IGF0IG9mZnNldCAweCVseCBjb250YWlucyAlbGQgZW50cmll czpcbiIpLAogICAgICAgICAgICBkeW5hbWljX2FkZHIsIChsb25nKSBkeW5hbWljX3NpemUpOwog IGlmIChkb19keW5hbWljKQogICAgcHJpbnRmICgoIiAgVGFnICAgICAgICBUeXBlICAgICAgICAg ICAgICAgICAgICAgICAgIE5hbWUvVmFsdWVcbiIpKTsKCiAgZm9yIChpID0gMCwgZW50cnkgPSBk eW5hbWljX3NlZ21lbnQ7CiAgICAgICBpIDwgZHluYW1pY19zaXplOwogICAgICAgaSsrLCBlbnRy eSsrKQogICAgewogICAgICBpZiAoZG9fZHluYW1pYykKICAgICAgICB7CiAgICAgICAgICBjb25z dCBjaGFyICpkdHlwZTsKCiAgICAgICAgICBwdXRjaGFyICgnICcpOwogICAgICAgICAgcHJpbnRf dm1hIChlbnRyeS0+ZF90YWcsIEZVTExfSEVYKTsKICAgICAgICAgIGR0eXBlID0gZ2V0X2R5bmFt aWNfdHlwZSAoZW50cnktPmRfdGFnKTsKICAgICAgICAgIHByaW50ZiAoIiAoJXMpJSpzIiwgZHR5 cGUsCiAgICAgICAgICAgICAgICAgICgoaXNfMzJiaXRfZWxmID8gMjcgOiAxOSkKICAgICAgICAg ICAgICAgICAgIC0gKGludCkgc3RybGVuIChkdHlwZSkpLAogICAgICAgICAgICAgICAgICAiICIp OwogICAgICAgIH0KCiAgICAgIHN3aXRjaCAoZW50cnktPmRfdGFnKQogICAgICAgIHsKICAgICAg ICBjYXNlIDMwOgogICAgICAgICAgaWYgKGRvX2R5bmFtaWMpCiAgICAgICAgICAgIHB1dHMgKGdl dF9keW5hbWljX2ZsYWdzIChlbnRyeS0+ZF91bi5kX3ZhbCkpOwogICAgICAgICAgYnJlYWs7Cgog ICAgICAgIGNhc2UgMHg3ZmZmZmZmZDoKICAgICAgICBjYXNlIDB4N2ZmZmZmZmY6CiAgICAgICAg Y2FzZSAweDZmZmZmZWZhOgogICAgICAgIGNhc2UgMHg2ZmZmZmVmYjoKICAgICAgICBjYXNlIDB4 NmZmZmZlZmM6CiAgICAgICAgICBpZiAoZG9fZHluYW1pYykKICAgICAgICAgICAgewogICAgICAg ICAgICAgIHN3aXRjaCAoZW50cnktPmRfdGFnKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgY2FzZSAweDdmZmZmZmZkOgogICAgICAgICAgICAgICAgICBwcmludGYgKCgiQXV4aWxp YXJ5IGxpYnJhcnkiKSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAg IGNhc2UgMHg3ZmZmZmZmZjoKICAgICAgICAgICAgICAgICAgcHJpbnRmICgoIkZpbHRlciBsaWJy YXJ5IikpOwogICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIDB4 NmZmZmZlZmE6CiAgICAgICAgICAgICAgICAgIHByaW50ZiAoKCJDb25maWd1cmF0aW9uIGZpbGUi KSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgMHg2ZmZm ZmVmYjoKICAgICAgICAgICAgICAgICAgcHJpbnRmICgoIkRlcGVuZGVuY3kgYXVkaXQgbGlicmFy eSIpKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAweDZm ZmZmZWZjOgogICAgICAgICAgICAgICAgICBwcmludGYgKCgiQXVkaXQgbGlicmFyeSIpKTsKICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGlm IChkeW5hbWljX3N0cmluZ3MpCiAgICAgICAgICAgICAgICBwcmludGYgKCI6IFslc11cbiIsIGR5 bmFtaWNfc3RyaW5ncyArIGVudHJ5LT5kX3VuLmRfdmFsKTsKICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHByaW50ZiAoIjogIik7CiAgICAgICAg ICAgICAgICAgIHByaW50X3ZtYSAoZW50cnktPmRfdW4uZF92YWwsIFBSRUZJWF9IRVgpOwogICAg ICAgICAgICAgICAgICBwdXRjaGFyICgnXG4nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMHg2ZmZmZmRmYzoKICAgICAgICAg IGlmIChkb19keW5hbWljKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgcHJpbnRmICgoIkZs YWdzOiIpKTsKCiAgICAgICAgICAgICAgaWYgKGVudHJ5LT5kX3VuLmRfdmFsID09IDApCiAgICAg ICAgICAgICAgICBwcmludGYgKCgiIE5vbmVcbiIpKTsKICAgICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50IHZhbCA9IGVu dHJ5LT5kX3VuLmRfdmFsOwoKICAgICAgICAgICAgICAgICAgaWYgKHZhbCAmIDB4MDAwMDAwMDEp CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiIFBB UklOSVQiKTsKICAgICAgICAgICAgICAgICAgICAgIHZhbCBePSAweDAwMDAwMDAxOwogICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKHZhbCAmIDB4MDAwMDAwMDIpCiAg ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiIENPTkZF WFAiKTsKICAgICAgICAgICAgICAgICAgICAgIHZhbCBePSAweDAwMDAwMDAyOwogICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKHZhbCAhPSAwKQogICAgICAgICAgICAg ICAgICAgIHByaW50ZiAoIiAlbHgiLCB2YWwpOwogICAgICAgICAgICAgICAgICBwdXRzICgiIik7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAg ICBjYXNlIDB4NmZmZmZkZmQ6CiAgICAgICAgICBpZiAoZG9fZHluYW1pYykKICAgICAgICAgICAg ewogICAgICAgICAgICAgIHByaW50ZiAoKCJGbGFnczoiKSk7CgogICAgICAgICAgICAgIGlmIChl bnRyeS0+ZF91bi5kX3ZhbCA9PSAwKQogICAgICAgICAgICAgICAgcHJpbnRmICgoIiBOb25lXG4i KSk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nIGludCB2YWwgPSBlbnRyeS0+ZF91bi5kX3ZhbDsKCiAgICAgICAgICAg ICAgICAgIGlmICh2YWwgJiAweDAwMDAwMDAxKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgIHByaW50ZiAoIiBMQVpZTE9BRCIpOwogICAgICAgICAgICAgICAgICAg ICAgdmFsIF49IDB4MDAwMDAwMDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICBpZiAodmFsICYgMHgwMDAwMDAwMikKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgICAgICBwcmludGYgKCIgR1JPVVBQRVJNIik7CiAgICAgICAgICAgICAgICAgICAg ICB2YWwgXj0gMHgwMDAwMDAwMjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgIGlmICh2YWwgIT0gMCkKICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgJWx4IiwgdmFs KTsKICAgICAgICAgICAgICAgICAgcHV0cyAoIiIpOwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAweDZmZmZmZmZiOgogICAgICAg ICAgaWYgKGRvX2R5bmFtaWMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBwcmludGYgKCgi RmxhZ3M6IikpOwogICAgICAgICAgICAgIGlmIChlbnRyeS0+ZF91bi5kX3ZhbCA9PSAwKQogICAg ICAgICAgICAgICAgcHJpbnRmICgoIiBOb25lXG4iKSk7CiAgICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGludCB2YWwgPSBl bnRyeS0+ZF91bi5kX3ZhbDsKCiAgICAgICAgICAgICAgICAgIGlmICh2YWwgJiAweDAwMDAwMDAx KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiBO T1ciKTsKICAgICAgICAgICAgICAgICAgICAgIHZhbCBePSAweDAwMDAwMDAxOwogICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKHZhbCAmIDB4MDAwMDAwMDIpCiAgICAg ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiIEdMT0JBTCIp OwogICAgICAgICAgICAgICAgICAgICAgdmFsIF49IDB4MDAwMDAwMDI7CiAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAodmFsICYgMHgwMDAwMDAwNCkKICAgICAgICAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgR1JPVVAiKTsKICAg ICAgICAgICAgICAgICAgICAgIHZhbCBePSAweDAwMDAwMDA0OwogICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgaWYgKHZhbCAmIDB4MDAwMDAwMDgpCiAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiIE5PREVMRVRFIik7CiAgICAg ICAgICAgICAgICAgICAgICB2YWwgXj0gMHgwMDAwMDAwODsKICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgIGlmICh2YWwgJiAweDAwMDAwMDEwKQogICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiBMT0FERkxUUiIpOwogICAgICAg ICAgICAgICAgICAgICAgdmFsIF49IDB4MDAwMDAwMTA7CiAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICBpZiAodmFsICYgMHgwMDAwMDAyMCkKICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgSU5JVEZJUlNUIik7CiAgICAgICAg ICAgICAgICAgICAgICB2YWwgXj0gMHgwMDAwMDAyMDsKICAgICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgICAgIGlmICh2YWwgJiAweDAwMDAwMDQwKQogICAgICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiBOT09QRU4iKTsKICAgICAgICAgICAg ICAgICAgICAgIHZhbCBePSAweDAwMDAwMDQwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICAgICAgaWYgKHZhbCAmIDB4MDAwMDAwODApCiAgICAgICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgiIE9SSUdJTiIpOwogICAgICAgICAgICAgICAg ICAgICAgdmFsIF49IDB4MDAwMDAwODA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgICAgICBpZiAodmFsICYgMHgwMDAwMDEwMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgICBwcmludGYgKCIgRElSRUNUIik7CiAgICAgICAgICAgICAgICAgICAg ICB2YWwgXj0gMHgwMDAwMDEwMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgIGlmICh2YWwgJiAweDAwMDAwMjAwKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgIHByaW50ZiAoIiBUUkFOUyIpOwogICAgICAgICAgICAgICAgICAgICAgdmFs IF49IDB4MDAwMDAyMDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBp ZiAodmFsICYgMHgwMDAwMDQwMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICBwcmludGYgKCIgSU5URVJQT1NFIik7CiAgICAgICAgICAgICAgICAgICAgICB2YWwg Xj0gMHgwMDAwMDQwMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlm ICh2YWwgJiAweDAwMDAwODAwKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZiAoIiBOT0RFRkxJQiIpOwogICAgICAgICAgICAgICAgICAgICAgdmFsIF49 IDB4MDAwMDA4MDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAo dmFsICYgMHgwMDAwMTAwMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICBwcmludGYgKCIgTk9EVU1QIik7CiAgICAgICAgICAgICAgICAgICAgICB2YWwgXj0gMHgw MDAwMTAwMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICh2YWwg JiAweDAwMDAyMDAwKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg IHByaW50ZiAoIiBDT05MRkFUIik7CiAgICAgICAgICAgICAgICAgICAgICB2YWwgXj0gMHgwMDAw MjAwMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGlmICh2YWwgIT0g MCkKICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgJWx4IiwgdmFsKTsKICAgICAgICAgICAg ICAgICAgcHV0cyAoIiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg ICBicmVhazsKCiAgICAgICAgY2FzZSAyMDoKICAgICAgICAgIGlmIChkb19keW5hbWljKQogICAg ICAgICAgICBwdXRzIChnZXRfZHluYW1pY190eXBlIChlbnRyeS0+ZF91bi5kX3ZhbCkpOwogICAg ICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMCA6CiAgICAgICAgY2FzZSAxIDoKICAgICAgICBj YXNlIDMgOgogICAgICAgIGNhc2UgNCA6CiAgICAgICAgY2FzZSA1IDoKICAgICAgICBjYXNlIDYg OgogICAgICAgIGNhc2UgNyA6CiAgICAgICAgY2FzZSAxMiA6CiAgICAgICAgY2FzZSAxMyA6CiAg ICAgICAgY2FzZSAxNCA6CiAgICAgICAgY2FzZSAxNSA6CiAgICAgICAgY2FzZSAxNjoKICAgICAg ICBjYXNlIDE3IDoKICAgICAgICBjYXNlIDIxIDoKICAgICAgICBjYXNlIDIyIDoKICAgICAgICBj YXNlIDIzIDoKICAgICAgICBjYXNlIDI5IDoKICAgICAgICAgIGR5bmFtaWNfaW5mb1tlbnRyeS0+ ZF90YWddID0gZW50cnktPmRfdW4uZF92YWw7CgogICAgICAgICAgaWYgKGRvX2R5bmFtaWMpCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyICpuYW1lOwoKICAgICAgICAgICAgICBpZiAo ZHluYW1pY19zdHJpbmdzID09ICgodm9pZCAqKTApKQogICAgICAgICAgICAgICAgbmFtZSA9ICgo dm9pZCAqKTApOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIG5hbWUgPSBkeW5h bWljX3N0cmluZ3MgKyBlbnRyeS0+ZF91bi5kX3ZhbDsKCiAgICAgICAgICAgICAgaWYgKG5hbWUp CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZW50cnktPmRfdGFn KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAg ICAgICAgICAgICAgICAgICBwcmludGYgKCgiU2hhcmVkIGxpYnJhcnk6IFslc10iKSwgbmFtZSk7 CgogICAgICAgICAgICAgICAgICAgICAgaWYgKF9fZXh0ZW5zaW9uX18gKHsgc2l6ZV90IF9fczFf bGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFudF9wIChuYW1lKSAmJiBfX2J1aWx0aW5f Y29uc3RhbnRfcCAocHJvZ3JhbV9pbnRlcnByZXRlcikgJiYgKF9fczFfbGVuID0gc3RybGVuIChu YW1lKSwgX19zMl9sZW4gPSBzdHJsZW4gKHByb2dyYW1faW50ZXJwcmV0ZXIpLCAoISgoc2l6ZV90 KShjb25zdCB2b2lkICopKChuYW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShuYW1l KSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKChw cm9ncmFtX2ludGVycHJldGVyKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShwcm9ncmFt X2ludGVycHJldGVyKSA9PSAxKSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0 IGNoYXIgKikgKG5hbWUpLCAoX19jb25zdCBjaGFyICopIChwcm9ncmFtX2ludGVycHJldGVyKSwg KF9fczFfbGVuIDwgX19zMl9sZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVp bHRpbl9jb25zdGFudF9wIChuYW1lKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmFtZSkg KyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikobmFtZSkgPT0gMSkgJiYgKF9fczFfbGVuID0g c3RybGVuIChuYW1lKSwgX19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAocHJv Z3JhbV9pbnRlcnByZXRlcikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKHByb2dyYW1faW50 ZXJwcmV0ZXIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKHByb2dyYW1faW50ZXJwcmV0 ZXIpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVswXSAtICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikocHJvZ3JhbV9pbnRlcnBy ZXRlcikpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0 ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsx XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHByb2dyYW1f aW50ZXJwcmV0ZXIpKVsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBf X3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChu YW1lKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChw cm9ncmFtX2ludGVycHJldGVyKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09 IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKG5hbWUpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKHByb2dyYW1faW50ZXJwcmV0ZXIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0 ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwcm9ncmFtX2ludGVycHJldGVyKTsgcmVnaXN0 ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKG5hbWUpKVswXSAtIF9fczJbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAobmFtZSkpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1 bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChuYW1lKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jl c3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChuYW1lKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogKF9f YnVpbHRpbl9jb25zdGFudF9wIChwcm9ncmFtX2ludGVycHJldGVyKSAmJiAoKHNpemVfdCkoY29u c3Qgdm9pZCAqKSgocHJvZ3JhbV9pbnRlcnByZXRlcikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZv aWQgKikocHJvZ3JhbV9pbnRlcnByZXRlcikgPT0gMSkgJiYgKF9fczJfbGVuID0gc3RybGVuIChw cm9ncmFtX2ludGVycHJldGVyKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRf cCAobmFtZSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKG5hbWUpICsgMSkgLSAoc2l6ZV90 KShjb25zdCB2b2lkICopKG5hbWUpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIg aW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKG5hbWUpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikocHJvZ3JhbV9pbnRlcnByZXRlcikpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3Vs dCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKG5hbWUpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKHByb2dyYW1faW50ZXJwcmV0ZXIpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYg X19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChuYW1lKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChwcm9ncmFtX2ludGVycHJldGVyKSlbMl0pOyBpZiAoX19zMl9sZW4g PiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKHByb2dyYW1faW50ZXJwcmV0ZXIpKVszXSk7IH0gfSBfX3Jl c3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3Mx ID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKTsgcmVn aXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKHByb2dyYW1faW50ZXJwcmV0ZXIpKVswXTsgaWYgKF9fczJfbGVu ID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwcm9ncmFtX2ludGVycHJldGVyKSlb MV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19z MVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHByb2dy YW1faW50ZXJwcmV0ZXIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkg X19yZXN1bHQgPSAoX19zMVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKHByb2dyYW1faW50ZXJwcmV0ZXIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6 IHN0cmNtcCAobmFtZSwgcHJvZ3JhbV9pbnRlcnByZXRlcikpKSk7IH0pID09IDApCiAgICAgICAg ICAgICAgICAgICAgICAgIHByaW50ZiAoKCIgcHJvZ3JhbSBpbnRlcnByZXRlciIpKTsKICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OgogICAg ICAgICAgICAgICAgICAgICAgcHJpbnRmICgoIkxpYnJhcnkgc29uYW1lOiBbJXNdIiksIG5hbWUp OwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2Ug MTU6CiAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCgiTGlicmFyeSBycGF0aDogWyVzXSIp LCBuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAg ICBjYXNlIDI5OgogICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgoIkxpYnJhcnkgcnVucGF0 aDogWyVzXSIpLCBuYW1lKTsKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAg ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgcHJpbnRfdm1hIChlbnRy eS0+ZF91bi5kX3ZhbCwgUFJFRklYX0hFWCk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgcHJpbnRfdm1hIChlbnRyeS0+ZF91bi5kX3ZhbCwgUFJFRklYX0hF WCk7CgogICAgICAgICAgICAgIHB1dGNoYXIgKCdcbicpOwogICAgICAgICAgICB9CiAgICAgICAg ICBicmVhazsKCiAgICAgICAgY2FzZSAyOgogICAgICAgIGNhc2UgOCA6CiAgICAgICAgY2FzZSAx MCA6CiAgICAgICAgY2FzZSAxOCA6CiAgICAgICAgY2FzZSA5IDoKICAgICAgICBjYXNlIDExIDoK ICAgICAgICBjYXNlIDE5IDoKICAgICAgICBjYXNlIDB4NmZmZmZkZjk6CiAgICAgICAgY2FzZSAw eDZmZmZmZGZhIDoKICAgICAgICBjYXNlIDB4NmZmZmZkZmIgOgogICAgICAgIGNhc2UgMjc6CiAg ICAgICAgY2FzZSAyODoKICAgICAgICBjYXNlIDB4NmZmZmZkZjY6CiAgICAgICAgY2FzZSAweDZm ZmZmZGY3OgogICAgICAgICAgaWYgKGRvX2R5bmFtaWMpCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBwcmludF92bWEgKGVudHJ5LT5kX3VuLmRfdmFsLCBVTlNJR05FRCk7CiAgICAgICAgICAg ICAgcHJpbnRmICgiIChieXRlcylcbiIpOwogICAgICAgICAgICB9CiAgICAgICAgICBicmVhazsK CiAgICAgICAgY2FzZSAweDZmZmZmZmZkOgogICAgICAgIGNhc2UgMHg2ZmZmZmZmZjoKICAgICAg ICBjYXNlIDB4NmZmZmZmZjk6CiAgICAgICAgY2FzZSAweDZmZmZmZmZhOgogICAgICAgICAgaWYg KGRvX2R5bmFtaWMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBwcmludF92bWEgKGVudHJ5 LT5kX3VuLmRfdmFsLCBVTlNJR05FRCk7CiAgICAgICAgICAgICAgcHV0Y2hhciAoJ1xuJyk7CiAg ICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDB4NmZmZmZkZmU6CiAg ICAgICAgY2FzZSAweDZmZmZmZGZmOgogICAgICAgIGNhc2UgMHg2ZmZmZmVmZjoKICAgICAgICBj YXNlIDB4N2ZmZmZmZmU6CiAgICAgICAgY2FzZSAyNToKICAgICAgICBjYXNlIDI2OgogICAgICAg ICAgaWYgKGRvX2R5bmFtaWMpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoZHluYW1p Y19zdHJpbmdzICE9ICgodm9pZCAqKTApICYmIGVudHJ5LT5kX3RhZyA9PSAweDdmZmZmZmZlKQog ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBjaGFyICpuYW1lOwoKICAgICAgICAg ICAgICAgICAgbmFtZSA9IGR5bmFtaWNfc3RyaW5ncyArIGVudHJ5LT5kX3VuLmRfdmFsOwoKICAg ICAgICAgICAgICAgICAgaWYgKCpuYW1lKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICAgIHByaW50ZiAoKCJOb3QgbmVlZGVkIG9iamVjdDogWyVzXVxuIiksIG5hbWUp OwogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBwcmludF92bWEgKGVudHJ5LT5kX3VuLmRfdmFs LCBQUkVGSVhfSEVYKTsKICAgICAgICAgICAgICBwdXRjaGFyICgnXG4nKTsKICAgICAgICAgICAg fQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgMjQ6CgogICAgICAgICAgaWYgKGRvX2R5 bmFtaWMpCiAgICAgICAgICAgIHB1dGNoYXIgKCdcbicpOwogICAgICAgICAgYnJlYWs7CgogICAg ICAgIGNhc2UgMHg2ZmZmZmRmNToKICAgICAgICAgIGlmIChkb19keW5hbWljKQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgc3RydWN0IHRtICp0bXA7CiAgICAgICAgICAgICAgdGltZV90IHRp bWUgPSBlbnRyeS0+ZF91bi5kX3ZhbDsKCiAgICAgICAgICAgICAgdG1wID0gZ210aW1lICgmdGlt ZSk7CiAgICAgICAgICAgICAgcHJpbnRmICgiJTA0dS0lMDJ1LSUwMnVUJTAydTolMDJ1OiUwMnVc biIsCiAgICAgICAgICAgICAgICAgICAgICB0bXAtPnRtX3llYXIgKyAxOTAwLCB0bXAtPnRtX21v biArIDEsIHRtcC0+dG1fbWRheSwKICAgICAgICAgICAgICAgICAgICAgIHRtcC0+dG1faG91ciwg dG1wLT50bV9taW4sIHRtcC0+dG1fc2VjKTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGJyZWFr OwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgaWYgKChlbnRyeS0+ZF90YWcgPj0gMHg2ZmZm ZmZmMCkgJiYgKGVudHJ5LT5kX3RhZyA8PSAweDZmZmZmZmZmKSkKICAgICAgICAgICAgdmVyc2lv bl9pbmZvWygweDZmZmZmZmZmIC0gKGVudHJ5LT5kX3RhZykpXSA9CiAgICAgICAgICAgICAgZW50 cnktPmRfdW4uZF92YWw7CgogICAgICAgICAgaWYgKGRvX2R5bmFtaWMpCiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBzd2l0Y2ggKGVsZl9oZWFkZXIuZV9tYWNoaW5lKQogICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAgICAgY2FzZSAxMDoKICAg ICAgICAgICAgICAgICAgZHluYW1pY19zZWdtZW50X21pcHNfdmFsIChlbnRyeSk7CiAgICAgICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAxNToKICAgICAgICAgICAgICAg ICAgZHluYW1pY19zZWdtZW50X3BhcmlzY192YWwgKGVudHJ5KTsKICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDUwOgogICAgICAgICAgICAgICAgICBkeW5hbWlj X3NlZ21lbnRfaWE2NF92YWwgKGVudHJ5KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICBwcmludF92bWEgKGVudHJ5LT5k X3VuLmRfdmFsLCBQUkVGSVhfSEVYKTsKICAgICAgICAgICAgICAgICAgcHV0Y2hhciAoJ1xuJyk7 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAg IH0KICAgIH0KCiAgcmV0dXJuIDE7Cn0KCnN0YXRpYyBjaGFyICoKZ2V0X3Zlcl9mbGFncyAoZmxh Z3MpCiAgICAgdW5zaWduZWQgaW50IGZsYWdzOwp7CiAgc3RhdGljIGNoYXIgYnVmZlszMl07Cgog IGJ1ZmZbMF0gPSAwOwoKICBpZiAoZmxhZ3MgPT0gMCkKICAgIHJldHVybiAoIm5vbmUiKTsKCiAg aWYgKGZsYWdzICYgMHgxKQogICAgc3RyY2F0IChidWZmLCAiQkFTRSAiKTsKCiAgaWYgKGZsYWdz ICYgMHgyKQogICAgewogICAgICBpZiAoZmxhZ3MgJiAweDEpCiAgICAgICAgc3RyY2F0IChidWZm LCAifCAiKTsKCiAgICAgIHN0cmNhdCAoYnVmZiwgIldFQUsgIik7CiAgICB9CgogIGlmIChmbGFn cyAmIH4oMHgxIHwgMHgyKSkKICAgIHN0cmNhdCAoYnVmZiwgInwgPHVua25vd24+Iik7CgogIHJl dHVybiBidWZmOwp9CgoKc3RhdGljIGludApwcm9jZXNzX3ZlcnNpb25fc2VjdGlvbnMgKGZpbGUp CiAgICAgRklMRSAqZmlsZTsKewogIEVsZl9JbnRlcm5hbF9TaGRyICpzZWN0aW9uOwogIHVuc2ln bmVkIGk7CiAgaW50IGZvdW5kID0gMDsKCiAgaWYgKCEgZG9fdmVyc2lvbikKICAgIHJldHVybiAx OwoKICBmb3IgKGkgPSAwLCBzZWN0aW9uID0gc2VjdGlvbl9oZWFkZXJzOwogICAgICAgaSA8IGVs Zl9oZWFkZXIuZV9zaG51bTsKICAgICAgIGkrKywgc2VjdGlvbisrKQogICAgewogICAgICBzd2l0 Y2ggKHNlY3Rpb24tPnNoX3R5cGUpCiAgICAgICAgewogICAgICAgIGNhc2UgMHg2ZmZmZmZmZDoK ICAgICAgICAgIHsKICAgICAgICAgICAgRWxmX0V4dGVybmFsX1ZlcmRlZiAqZWRlZnM7CiAgICAg ICAgICAgIHVuc2lnbmVkIGludCBpZHg7CiAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbnQ7Cgog ICAgICAgICAgICBmb3VuZCA9IDE7CgogICAgICAgICAgICBwcmludGYKICAgICAgICAgICAgICAo KCJcblZlcnNpb24gZGVmaW5pdGlvbiBzZWN0aW9uICclcycgY29udGFpbnMgJWxkIGVudHJpZXM6 XG4iKSwKICAgICAgICAgICAgICAgKChzZWN0aW9uKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4i IDogKChzZWN0aW9uKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0 PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjdGlvbiktPnNoX25hbWUpKSwgc2VjdGlvbi0+c2hfaW5m byk7CgogICAgICAgICAgICBwcmludGYgKCgiICBBZGRyOiAweCIpKTsKICAgICAgICAgICAgZnBy aW50ZiAoKHN0ZG91dCksICIlMDhseCUwOGx4IiwgKCh1bnNpZ25lZCBsb25nKSAoKChzZWN0aW9u LT5zaF9hZGRyKSA+PiAzMikgJiAweGZmZmZmZmZmKSksICgodW5zaWduZWQgbG9uZykgKCgoc2Vj dGlvbi0+c2hfYWRkcikgJiAweGZmZmZmZmZmKSkpKTsKICAgICAgICAgICAgcHJpbnRmICgoIiAg T2Zmc2V0OiAlIzA4bHggIExpbms6ICVseCAoJXMpXG4iKSwKICAgICAgICAgICAgICAgICAgICAo dW5zaWduZWQgbG9uZykgc2VjdGlvbi0+c2hfb2Zmc2V0LCBzZWN0aW9uLT5zaF9saW5rLAogICAg ICAgICAgICAgICAgICAgICgoKHNlY3Rpb25faGVhZGVycyArICgoc2VjdGlvbi0+c2hfbGluaykg PCAweEZGMDAgPyAoc2VjdGlvbi0+c2hfbGluaykgOiAoKHNlY3Rpb24tPnNoX2xpbmspIDw9IDB4 RkZGRiA/IDAgOiAoc2VjdGlvbi0+c2hfbGluaykgLSAoMHhGRkZGICsgMSAtIDB4RkYwMCkpKSkp ID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKChzZWN0aW9uX2hlYWRlcnMgKyAoKHNlY3Rp b24tPnNoX2xpbmspIDwgMHhGRjAwID8gKHNlY3Rpb24tPnNoX2xpbmspIDogKChzZWN0aW9uLT5z aF9saW5rKSA8PSAweEZGRkYgPyAwIDogKHNlY3Rpb24tPnNoX2xpbmspIC0gKDB4RkZGRiArIDEg LSAweEZGMDApKSkpKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0 PiIgOiBzdHJpbmdfdGFibGUgKyAoKHNlY3Rpb25faGVhZGVycyArICgoc2VjdGlvbi0+c2hfbGlu aykgPCAweEZGMDAgPyAoc2VjdGlvbi0+c2hfbGluaykgOiAoKHNlY3Rpb24tPnNoX2xpbmspIDw9 IDB4RkZGRiA/IDAgOiAoc2VjdGlvbi0+c2hfbGluaykgLSAoMHhGRkZGICsgMSAtIDB4RkYwMCkp KSkpLT5zaF9uYW1lKSkpOwoKICAgICAgICAgICAgZWRlZnMgPSAoKEVsZl9FeHRlcm5hbF9WZXJk ZWYgKikKICAgICAgICAgICAgICAgICAgICAgZ2V0X2RhdGEgKCgodm9pZCAqKTApLCBmaWxlLCBz ZWN0aW9uLT5zaF9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9u LT5zaF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ2ZXJzaW9uIGRlZmlu aXRpb24gc2VjdGlvbiIpKSk7CiAgICAgICAgICAgIGlmICghZWRlZnMpCiAgICAgICAgICAgICAg YnJlYWs7CgogICAgICAgICAgICBmb3IgKGlkeCA9IGNudCA9IDA7IGNudCA8IHNlY3Rpb24tPnNo X2luZm87ICsrY250KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNoYXIgKnZzdGFy dDsKICAgICAgICAgICAgICAgIEVsZl9FeHRlcm5hbF9WZXJkZWYgKmVkZWY7CiAgICAgICAgICAg ICAgICBFbGZfSW50ZXJuYWxfVmVyZGVmIGVudDsKICAgICAgICAgICAgICAgIEVsZl9FeHRlcm5h bF9WZXJkYXV4ICplYXV4OwogICAgICAgICAgICAgICAgRWxmX0ludGVybmFsX1ZlcmRhdXggYXV4 OwogICAgICAgICAgICAgICAgaW50IGo7CiAgICAgICAgICAgICAgICBpbnQgaXN1bTsKCiAgICAg ICAgICAgICAgICB2c3RhcnQgPSAoKGNoYXIgKikgZWRlZnMpICsgaWR4OwoKICAgICAgICAgICAg ICAgIGVkZWYgPSAoRWxmX0V4dGVybmFsX1ZlcmRlZiAqKSB2c3RhcnQ7CgogICAgICAgICAgICAg ICAgZW50LnZkX3ZlcnNpb24gPSBieXRlX2dldCAoZWRlZi0+dmRfdmVyc2lvbiwgc2l6ZW9mIChl ZGVmLT52ZF92ZXJzaW9uKSk7CiAgICAgICAgICAgICAgICBlbnQudmRfZmxhZ3MgPSBieXRlX2dl dCAoZWRlZi0+dmRfZmxhZ3MsIHNpemVvZiAoZWRlZi0+dmRfZmxhZ3MpKTsKICAgICAgICAgICAg ICAgIGVudC52ZF9uZHggPSBieXRlX2dldCAoZWRlZi0+dmRfbmR4LCBzaXplb2YgKGVkZWYtPnZk X25keCkpOwogICAgICAgICAgICAgICAgZW50LnZkX2NudCA9IGJ5dGVfZ2V0IChlZGVmLT52ZF9j bnQsIHNpemVvZiAoZWRlZi0+dmRfY250KSk7CiAgICAgICAgICAgICAgICBlbnQudmRfaGFzaCA9 IGJ5dGVfZ2V0IChlZGVmLT52ZF9oYXNoLCBzaXplb2YgKGVkZWYtPnZkX2hhc2gpKTsKICAgICAg ICAgICAgICAgIGVudC52ZF9hdXggPSBieXRlX2dldCAoZWRlZi0+dmRfYXV4LCBzaXplb2YgKGVk ZWYtPnZkX2F1eCkpOwogICAgICAgICAgICAgICAgZW50LnZkX25leHQgPSBieXRlX2dldCAoZWRl Zi0+dmRfbmV4dCwgc2l6ZW9mIChlZGVmLT52ZF9uZXh0KSk7CgogICAgICAgICAgICAgICAgcHJp bnRmICgoIiAgJSMwNng6IFJldjogJWQgIEZsYWdzOiAlcyIpLAogICAgICAgICAgICAgICAgICAg ICAgICBpZHgsIGVudC52ZF92ZXJzaW9uLCBnZXRfdmVyX2ZsYWdzIChlbnQudmRfZmxhZ3MpKTsK CiAgICAgICAgICAgICAgICBwcmludGYgKCgiICBJbmRleDogJWQgIENudDogJWQgICIpLAogICAg ICAgICAgICAgICAgICAgICAgICBlbnQudmRfbmR4LCBlbnQudmRfY250KTsKCiAgICAgICAgICAg ICAgICB2c3RhcnQgKz0gZW50LnZkX2F1eDsKCiAgICAgICAgICAgICAgICBlYXV4ID0gKEVsZl9F eHRlcm5hbF9WZXJkYXV4ICopIHZzdGFydDsKCiAgICAgICAgICAgICAgICBhdXgudmRhX25hbWUg PSBieXRlX2dldCAoZWF1eC0+dmRhX25hbWUsIHNpemVvZiAoZWF1eC0+dmRhX25hbWUpKTsKICAg ICAgICAgICAgICAgIGF1eC52ZGFfbmV4dCA9IGJ5dGVfZ2V0IChlYXV4LT52ZGFfbmV4dCwgc2l6 ZW9mIChlYXV4LT52ZGFfbmV4dCkpOwoKICAgICAgICAgICAgICAgIGlmIChkeW5hbWljX3N0cmlu Z3MpCiAgICAgICAgICAgICAgICAgIHByaW50ZiAoKCJOYW1lOiAlc1xuIiksIGR5bmFtaWNfc3Ry aW5ncyArIGF1eC52ZGFfbmFtZSk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ICAgIHByaW50ZiAoKCJOYW1lIGluZGV4OiAlbGRcbiIpLCBhdXgudmRhX25hbWUpOwoKICAgICAg ICAgICAgICAgIGlzdW0gPSBpZHggKyBlbnQudmRfYXV4OwoKICAgICAgICAgICAgICAgIGZvciAo aiA9IDE7IGogPCBlbnQudmRfY250OyBqKyspCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgICBpc3VtICs9IGF1eC52ZGFfbmV4dDsKICAgICAgICAgICAgICAgICAgICB2c3Rh cnQgKz0gYXV4LnZkYV9uZXh0OwoKICAgICAgICAgICAgICAgICAgICBlYXV4ID0gKEVsZl9FeHRl cm5hbF9WZXJkYXV4ICopIHZzdGFydDsKCiAgICAgICAgICAgICAgICAgICAgYXV4LnZkYV9uYW1l ID0gYnl0ZV9nZXQgKGVhdXgtPnZkYV9uYW1lLCBzaXplb2YgKGVhdXgtPnZkYV9uYW1lKSk7CiAg ICAgICAgICAgICAgICAgICAgYXV4LnZkYV9uZXh0ID0gYnl0ZV9nZXQgKGVhdXgtPnZkYV9uZXh0 LCBzaXplb2YgKGVhdXgtPnZkYV9uZXh0KSk7CgogICAgICAgICAgICAgICAgICAgIGlmIChkeW5h bWljX3N0cmluZ3MpCiAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCgiICAlIzA2eDogUGFy ZW50ICVkOiAlc1xuIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzdW0sIGosIGR5 bmFtaWNfc3RyaW5ncyArIGF1eC52ZGFfbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgoIiAgJSMwNng6IFBhcmVudCAlZCwgbmFtZSBp bmRleDogJWxkXG4iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXN1bSwgaiwgYXV4 LnZkYV9uYW1lKTsKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlkeCArPSBl bnQudmRfbmV4dDsKICAgICAgICAgICAgICB9CgogICAgICAgICAgICBmcmVlIChlZGVmcyk7CiAg ICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAweDZmZmZmZmZlOgogICAg ICAgICAgewogICAgICAgICAgICBFbGZfRXh0ZXJuYWxfVmVybmVlZCAqZW5lZWQ7CiAgICAgICAg ICAgIHVuc2lnbmVkIGludCBpZHg7CiAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbnQ7CgogICAg ICAgICAgICBmb3VuZCA9IDE7CgogICAgICAgICAgICBwcmludGYgKCgiXG5WZXJzaW9uIG5lZWRz IHNlY3Rpb24gJyVzJyBjb250YWlucyAlbGQgZW50cmllczpcbiIpLAogICAgICAgICAgICAgICAg ICAgICgoc2VjdGlvbikgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjdGlvbiktPnNo X25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxl ICsgKHNlY3Rpb24pLT5zaF9uYW1lKSksIHNlY3Rpb24tPnNoX2luZm8pOwoKICAgICAgICAgICAg cHJpbnRmICgoIiBBZGRyOiAweCIpKTsKICAgICAgICAgICAgZnByaW50ZiAoKHN0ZG91dCksICIl MDhseCUwOGx4IiwgKCh1bnNpZ25lZCBsb25nKSAoKChzZWN0aW9uLT5zaF9hZGRyKSA+PiAzMikg JiAweGZmZmZmZmZmKSksICgodW5zaWduZWQgbG9uZykgKCgoc2VjdGlvbi0+c2hfYWRkcikgJiAw eGZmZmZmZmZmKSkpKTsKICAgICAgICAgICAgcHJpbnRmICgoIiAgT2Zmc2V0OiAlIzA4bHggIExp bmsgdG8gc2VjdGlvbjogJWxkICglcylcbiIpLAogICAgICAgICAgICAgICAgICAgICh1bnNpZ25l ZCBsb25nKSBzZWN0aW9uLT5zaF9vZmZzZXQsIHNlY3Rpb24tPnNoX2xpbmssCiAgICAgICAgICAg ICAgICAgICAgKCgoc2VjdGlvbl9oZWFkZXJzICsgKChzZWN0aW9uLT5zaF9saW5rKSA8IDB4RkYw MCA/IChzZWN0aW9uLT5zaF9saW5rKSA6ICgoc2VjdGlvbi0+c2hfbGluaykgPD0gMHhGRkZGID8g MCA6IChzZWN0aW9uLT5zaF9saW5rKSAtICgweEZGRkYgKyAxIC0gMHhGRjAwKSkpKSkgPT0gKCh2 b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoKHNlY3Rpb25faGVhZGVycyArICgoc2VjdGlvbi0+c2hf bGluaykgPCAweEZGMDAgPyAoc2VjdGlvbi0+c2hfbGluaykgOiAoKHNlY3Rpb24tPnNoX2xpbmsp IDw9IDB4RkZGRiA/IDAgOiAoc2VjdGlvbi0+c2hfbGluaykgLSAoMHhGRkZGICsgMSAtIDB4RkYw MCkpKSkpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0 cmluZ190YWJsZSArICgoc2VjdGlvbl9oZWFkZXJzICsgKChzZWN0aW9uLT5zaF9saW5rKSA8IDB4 RkYwMCA/IChzZWN0aW9uLT5zaF9saW5rKSA6ICgoc2VjdGlvbi0+c2hfbGluaykgPD0gMHhGRkZG ID8gMCA6IChzZWN0aW9uLT5zaF9saW5rKSAtICgweEZGRkYgKyAxIC0gMHhGRjAwKSkpKSktPnNo X25hbWUpKSk7CgogICAgICAgICAgICBlbmVlZCA9ICgoRWxmX0V4dGVybmFsX1Zlcm5lZWQgKikK ICAgICAgICAgICAgICAgICAgICAgZ2V0X2RhdGEgKCgodm9pZCAqKTApLCBmaWxlLCBzZWN0aW9u LT5zaF9vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLT5zaF9z aXplLCAoInZlcnNpb24gbmVlZCBzZWN0aW9uIikpKTsKICAgICAgICAgICAgaWYgKCFlbmVlZCkK ICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGZvciAoaWR4ID0gY250ID0gMDsgY250 IDwgc2VjdGlvbi0+c2hfaW5mbzsgKytjbnQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgRWxmX0V4dGVybmFsX1Zlcm5lZWQgKmVudHJ5OwogICAgICAgICAgICAgICAgRWxmX0ludGVy bmFsX1Zlcm5lZWQgZW50OwogICAgICAgICAgICAgICAgaW50IGo7CiAgICAgICAgICAgICAgICBp bnQgaXN1bTsKICAgICAgICAgICAgICAgIGNoYXIgKnZzdGFydDsKCiAgICAgICAgICAgICAgICB2 c3RhcnQgPSAoKGNoYXIgKikgZW5lZWQpICsgaWR4OwoKICAgICAgICAgICAgICAgIGVudHJ5ID0g KEVsZl9FeHRlcm5hbF9WZXJuZWVkICopIHZzdGFydDsKCiAgICAgICAgICAgICAgICBlbnQudm5f dmVyc2lvbiA9IGJ5dGVfZ2V0IChlbnRyeS0+dm5fdmVyc2lvbiwgc2l6ZW9mIChlbnRyeS0+dm5f dmVyc2lvbikpOwogICAgICAgICAgICAgICAgZW50LnZuX2NudCA9IGJ5dGVfZ2V0IChlbnRyeS0+ dm5fY250LCBzaXplb2YgKGVudHJ5LT52bl9jbnQpKTsKICAgICAgICAgICAgICAgIGVudC52bl9m aWxlID0gYnl0ZV9nZXQgKGVudHJ5LT52bl9maWxlLCBzaXplb2YgKGVudHJ5LT52bl9maWxlKSk7 CiAgICAgICAgICAgICAgICBlbnQudm5fYXV4ID0gYnl0ZV9nZXQgKGVudHJ5LT52bl9hdXgsIHNp emVvZiAoZW50cnktPnZuX2F1eCkpOwogICAgICAgICAgICAgICAgZW50LnZuX25leHQgPSBieXRl X2dldCAoZW50cnktPnZuX25leHQsIHNpemVvZiAoZW50cnktPnZuX25leHQpKTsKCiAgICAgICAg ICAgICAgICBwcmludGYgKCgiICAlIzA2eDogVmVyc2lvbjogJWQiKSwgaWR4LCBlbnQudm5fdmVy c2lvbik7CgogICAgICAgICAgICAgICAgaWYgKGR5bmFtaWNfc3RyaW5ncykKICAgICAgICAgICAg ICAgICAgcHJpbnRmICgoIiAgRmlsZTogJXMiKSwgZHluYW1pY19zdHJpbmdzICsgZW50LnZuX2Zp bGUpOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICBwcmludGYgKCgiICBG aWxlOiAlbHgiKSwgZW50LnZuX2ZpbGUpOwoKICAgICAgICAgICAgICAgIHByaW50ZiAoKCIgIENu dDogJWRcbiIpLCBlbnQudm5fY250KTsKCiAgICAgICAgICAgICAgICB2c3RhcnQgKz0gZW50LnZu X2F1eDsKCiAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBpc3VtID0gaWR4ICsgZW50LnZuX2F1 eDsgaiA8IGVudC52bl9jbnQ7ICsraikKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICAgIEVsZl9FeHRlcm5hbF9WZXJuYXV4ICplYXV4OwogICAgICAgICAgICAgICAgICAgIEVs Zl9JbnRlcm5hbF9WZXJuYXV4IGF1eDsKCiAgICAgICAgICAgICAgICAgICAgZWF1eCA9IChFbGZf RXh0ZXJuYWxfVmVybmF1eCAqKSB2c3RhcnQ7CgogICAgICAgICAgICAgICAgICAgIGF1eC52bmFf aGFzaCA9IGJ5dGVfZ2V0IChlYXV4LT52bmFfaGFzaCwgc2l6ZW9mIChlYXV4LT52bmFfaGFzaCkp OwogICAgICAgICAgICAgICAgICAgIGF1eC52bmFfZmxhZ3MgPSBieXRlX2dldCAoZWF1eC0+dm5h X2ZsYWdzLCBzaXplb2YgKGVhdXgtPnZuYV9mbGFncykpOwogICAgICAgICAgICAgICAgICAgIGF1 eC52bmFfb3RoZXIgPSBieXRlX2dldCAoZWF1eC0+dm5hX290aGVyLCBzaXplb2YgKGVhdXgtPnZu YV9vdGhlcikpOwogICAgICAgICAgICAgICAgICAgIGF1eC52bmFfbmFtZSA9IGJ5dGVfZ2V0IChl YXV4LT52bmFfbmFtZSwgc2l6ZW9mIChlYXV4LT52bmFfbmFtZSkpOwogICAgICAgICAgICAgICAg ICAgIGF1eC52bmFfbmV4dCA9IGJ5dGVfZ2V0IChlYXV4LT52bmFfbmV4dCwgc2l6ZW9mIChlYXV4 LT52bmFfbmV4dCkpOwoKICAgICAgICAgICAgICAgICAgICBpZiAoZHluYW1pY19zdHJpbmdzKQog ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgoIiAgJSMwNng6IE5hbWU6ICVzIiksCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlzdW0sIGR5bmFtaWNfc3RyaW5ncyArIGF1eC52bmFf bmFtZSk7CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgcHJp bnRmICgoIiAgJSMwNng6IE5hbWUgaW5kZXg6ICVseCIpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpc3VtLCBhdXgudm5hX25hbWUpOwoKICAgICAgICAgICAgICAgICAgICBwcmludGYg KCgiICBGbGFnczogJXMgIFZlcnNpb246ICVkXG4iKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdldF92ZXJfZmxhZ3MgKGF1eC52bmFfZmxhZ3MpLCBhdXgudm5hX290aGVyKTsKCiAgICAg ICAgICAgICAgICAgICAgaXN1bSArPSBhdXgudm5hX25leHQ7CiAgICAgICAgICAgICAgICAgICAg dnN0YXJ0ICs9IGF1eC52bmFfbmV4dDsKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg ICAgIGlkeCArPSBlbnQudm5fbmV4dDsKICAgICAgICAgICAgICB9CgogICAgICAgICAgICBmcmVl IChlbmVlZCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAweDZm ZmZmZmZmOgogICAgICAgICAgewogICAgICAgICAgICBFbGZfSW50ZXJuYWxfU2hkciAqbGlua19z ZWN0aW9uOwogICAgICAgICAgICBpbnQgdG90YWw7CiAgICAgICAgICAgIGludCBjbnQ7CiAgICAg ICAgICAgIHVuc2lnbmVkIGNoYXIgKmVkYXRhOwogICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAq ZGF0YTsKICAgICAgICAgICAgY2hhciAqc3RydGFiOwogICAgICAgICAgICBFbGZfSW50ZXJuYWxf U3ltICpzeW1ib2xzOwogICAgICAgICAgICBFbGZfSW50ZXJuYWxfU2hkciAqc3RyaW5nX3NlYzsK CiAgICAgICAgICAgIGxpbmtfc2VjdGlvbiA9IChzZWN0aW9uX2hlYWRlcnMgKyAoKHNlY3Rpb24t PnNoX2xpbmspIDwgMHhGRjAwID8gKHNlY3Rpb24tPnNoX2xpbmspIDogKChzZWN0aW9uLT5zaF9s aW5rKSA8PSAweEZGRkYgPyAwIDogKHNlY3Rpb24tPnNoX2xpbmspIC0gKDB4RkZGRiArIDEgLSAw eEZGMDApKSkpOwogICAgICAgICAgICB0b3RhbCA9IHNlY3Rpb24tPnNoX3NpemUgLyBzZWN0aW9u LT5zaF9lbnRzaXplOwoKICAgICAgICAgICAgZm91bmQgPSAxOwoKICAgICAgICAgICAgc3ltYm9s cyA9IChpc18zMmJpdF9lbGYgPyBnZXRfMzJiaXRfZWxmX3N5bWJvbHMgKGZpbGUsIGxpbmtfc2Vj dGlvbikgOiBnZXRfNjRiaXRfZWxmX3N5bWJvbHMgKGZpbGUsIGxpbmtfc2VjdGlvbikpOwoKICAg ICAgICAgICAgc3RyaW5nX3NlYyA9IChzZWN0aW9uX2hlYWRlcnMgKyAoKGxpbmtfc2VjdGlvbi0+ c2hfbGluaykgPCAweEZGMDAgPyAobGlua19zZWN0aW9uLT5zaF9saW5rKSA6ICgobGlua19zZWN0 aW9uLT5zaF9saW5rKSA8PSAweEZGRkYgPyAwIDogKGxpbmtfc2VjdGlvbi0+c2hfbGluaykgLSAo MHhGRkZGICsgMSAtIDB4RkYwMCkpKSk7CgogICAgICAgICAgICBzdHJ0YWIgPSAoY2hhciAqKSBn ZXRfZGF0YSAoKCh2b2lkICopMCksIGZpbGUsIHN0cmluZ19zZWMtPnNoX29mZnNldCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ19zZWMtPnNoX3NpemUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInZlcnNpb24gc3RyaW5nIHRh YmxlIikpOwogICAgICAgICAgICBpZiAoIXN0cnRhYikKICAgICAgICAgICAgICBicmVhazsKCiAg ICAgICAgICAgIHByaW50ZiAoKCJcblZlcnNpb24gc3ltYm9scyBzZWN0aW9uICclcycgY29udGFp bnMgJWQgZW50cmllczpcbiIpLAogICAgICAgICAgICAgICAgICAgICgoc2VjdGlvbikgPT0gKCh2 b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjdGlvbiktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxl X2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlY3Rpb24pLT5zaF9uYW1l KSksIHRvdGFsKTsKCiAgICAgICAgICAgIHByaW50ZiAoKCIgQWRkcjogIikpOwogICAgICAgICAg ICBmcHJpbnRmICgoc3Rkb3V0KSwgIiUwOGx4JTA4bHgiLCAoKHVuc2lnbmVkIGxvbmcpICgoKHNl Y3Rpb24tPnNoX2FkZHIpID4+IDMyKSAmIDB4ZmZmZmZmZmYpKSwgKCh1bnNpZ25lZCBsb25nKSAo KChzZWN0aW9uLT5zaF9hZGRyKSAmIDB4ZmZmZmZmZmYpKSkpOwogICAgICAgICAgICBwcmludGYg KCgiICBPZmZzZXQ6ICUjMDhseCAgTGluazogJWx4ICglcylcbiIpLAogICAgICAgICAgICAgICAg ICAgICh1bnNpZ25lZCBsb25nKSBzZWN0aW9uLT5zaF9vZmZzZXQsIHNlY3Rpb24tPnNoX2xpbmss CiAgICAgICAgICAgICAgICAgICAgKChsaW5rX3NlY3Rpb24pID09ICgodm9pZCAqKTApID8gIjxu b25lPiIgOiAoKGxpbmtfc2VjdGlvbiktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKGxpbmtfc2VjdGlvbiktPnNoX25hbWUpKSk7 CgogICAgICAgICAgICBlZGF0YSA9CiAgICAgICAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopCiAg ICAgICAgICAgICAgIGdldF9kYXRhICgoKHZvaWQgKikwKSwgZmlsZSwKICAgICAgICAgICAgICAg ICAgICAgICAgIHZlcnNpb25faW5mb1soMHg2ZmZmZmZmZiAtICgweDZmZmZmZmYwKSldIC0gbG9h ZGFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCAqIHNpemVvZiAoc2hvcnQpLCAo InZlcnNpb24gc3ltYm9sIGRhdGEiKSkpOwogICAgICAgICAgICBpZiAoIWVkYXRhKQogICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgIGZyZWUgKHN0cnRhYik7CiAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICB9CgogICAgICAgICAgICBkYXRhID0gKHVuc2lnbmVkIHNob3J0 ICopIG1hbGxvYyAodG90YWwgKiBzaXplb2YgKHNob3J0KSk7CgogICAgICAgICAgICBmb3IgKGNu dCA9IHRvdGFsOyBjbnQgLS07KQogICAgICAgICAgICAgIGRhdGFbY250XSA9IGJ5dGVfZ2V0IChl ZGF0YSArIGNudCAqIHNpemVvZiAoc2hvcnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplb2YgKHNob3J0KSk7CgogICAgICAgICAgICBmcmVlIChlZGF0YSk7CgogICAg ICAgICAgICBmb3IgKGNudCA9IDA7IGNudCA8IHRvdGFsOyBjbnQgKz0gNCkKICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICBpbnQgaiwgbm47CiAgICAgICAgICAgICAgICBpbnQgY2hlY2tf ZGVmLCBjaGVja19uZWVkOwogICAgICAgICAgICAgICAgY2hhciAqbmFtZTsKCiAgICAgICAgICAg ICAgICBwcmludGYgKCIgICUwM3g6IiwgY250KTsKCiAgICAgICAgICAgICAgICBmb3IgKGogPSAw OyAoaiA8IDQpICYmIChjbnQgKyBqKSA8IHRvdGFsOyArK2opCiAgICAgICAgICAgICAgICAgIHN3 aXRjaCAoZGF0YVtjbnQgKyBqXSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICAgICAgZnB1dHMgKCgiICAgMCAoKmxvY2Fs KikgICAgIiksIHN0ZG91dCk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAg ICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgZnB1dHMgKCgiICAgMSAo Kmdsb2JhbCopICAgIiksIHN0ZG91dCk7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAg ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgIG5uID0gcHJp bnRmICgiJTR4JWMiLCBkYXRhW2NudCArIGpdICYgMHg3ZmZmLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRhdGFbY250ICsgal0gJiAweDgwMDAgPyAnaCcgOiAnICcpOwoKICAg ICAgICAgICAgICAgICAgICAgIGNoZWNrX2RlZiA9IDE7CiAgICAgICAgICAgICAgICAgICAgICBj aGVja19uZWVkID0gMTsKICAgICAgICAgICAgICAgICAgICAgIGlmICgoc2VjdGlvbl9oZWFkZXJz ICsgKChzeW1ib2xzW2NudCArIGpdLnN0X3NobmR4KSA8IDB4RkYwMCA/IChzeW1ib2xzW2NudCAr IGpdLnN0X3NobmR4KSA6ICgoc3ltYm9sc1tjbnQgKyBqXS5zdF9zaG5keCkgPD0gMHhGRkZGID8g MCA6IChzeW1ib2xzW2NudCArIGpdLnN0X3NobmR4KSAtICgweEZGRkYgKyAxIC0gMHhGRjAwKSkp KS0+c2hfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICE9IDgpCiAgICAgICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ltYm9sc1tjbnQgKyBq XS5zdF9zaG5keCA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfZGVmID0g MDsKICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjaGVja19uZWVkID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg ICAgICAgICAgICAgIGlmIChjaGVja19uZWVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg dmVyc2lvbl9pbmZvWygweDZmZmZmZmZmIC0gKDB4NmZmZmZmZmUpKV0pCiAgICAgICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZfSW50ZXJuYWxfVmVybmVl ZCBpdm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQ7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHZlcnNpb25faW5mb1soMHg2ZmZmZmZm ZiAtICgweDZmZmZmZmZlKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGxvYWRhZGRy OwoKICAgICAgICAgICAgICAgICAgICAgICAgICBkbwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZfSW50ZXJuYWxfVmVybmF1eCBp dm5hOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZfRXh0ZXJuYWxfVmVybmVlZCBl dm47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZl9FeHRlcm5hbF9WZXJuYXV4IGV2 bmE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYV9vZmY7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfZGF0YSAoJmV2biwgZmlsZSwgb2Zmc2V0 LCBzaXplb2YgKGV2biksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo InZlcnNpb24gbmVlZCIpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2bi52bl9h dXggPSBieXRlX2dldCAoZXZuLnZuX2F1eCwgc2l6ZW9mIChldm4udm5fYXV4KSk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGl2bi52bl9uZXh0ID0gYnl0ZV9nZXQgKGV2bi52bl9uZXh0 LCBzaXplb2YgKGV2bi52bl9uZXh0KSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh X29mZiA9IG9mZnNldCArIGl2bi52bl9hdXg7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdldF9kYXRhICgmZXZuYSwgZmlsZSwgYV9vZmYsIHNpemVvZiAoZXZu YSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ2ZXJzaW9u IG5lZWQgYXV4ICgyKSIpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdm5h LnZuYV9uZXh0ID0gYnl0ZV9nZXQgKGV2bmEudm5hX25leHQsIHNpemVvZiAoZXZuYS52bmFfbmV4 dCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZuYS52bmFfb3RoZXIgPSBi eXRlX2dldCAoZXZuYS52bmFfb3RoZXIsIHNpemVvZiAoZXZuYS52bmFfb3RoZXIpKTsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhX29mZiArPSBpdm5hLnZuYV9uZXh0OwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgd2hpbGUgKGl2bmEudm5hX290aGVyICE9IGRhdGFbY250ICsgal0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICYmIGl2bmEudm5hX25leHQgIT0gMCk7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoaXZuYS52bmFfb3RoZXIgPT0gZGF0YVtjbnQgKyBqXSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpdm5hLnZuYV9uYW1lID0gYnl0ZV9nZXQgKGV2bmEudm5hX25hbWUsIHNpemVv ZiAoZXZuYS52bmFfbmFtZSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5h bWUgPSBzdHJ0YWIgKyBpdm5hLnZuYV9uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbm4gKz0gcHJpbnRmICgiKCVzJS0qcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDEyIC0gKGludCkgc3RybGVuIChuYW1lKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikiKTsKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoZWNrX2RlZiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gaXZuLnZuX25leHQ7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGl2 bi52bl9uZXh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAg ICAgIGlmIChjaGVja19kZWYgJiYgZGF0YVtjbnQgKyBqXSAhPSAweDgwMDEKICAgICAgICAgICAg ICAgICAgICAgICAgICAmJiB2ZXJzaW9uX2luZm9bKDB4NmZmZmZmZmYgLSAoMHg2ZmZmZmZmYykp XSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIEVs Zl9JbnRlcm5hbF9WZXJkZWYgaXZkOwogICAgICAgICAgICAgICAgICAgICAgICAgIEVsZl9FeHRl cm5hbF9WZXJkZWYgZXZkOwogICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg b2Zmc2V0OwoKICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAodmVyc2lvbl9pbmZv WygweDZmZmZmZmZmIC0gKDB4NmZmZmZmZmMpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLSBsb2FkYWRkcik7CgogICAgICAgICAgICAgICAgICAgICAgICAgIGRvCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl dF9kYXRhICgmZXZkLCBmaWxlLCBvZmZzZXQsIHNpemVvZiAoZXZkKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgidmVyc2lvbiBkZWYiKSk7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpdmQudmRfbmV4dCA9IGJ5dGVfZ2V0IChldmQudmRfbmV4dCwgc2l6 ZW9mIChldmQudmRfbmV4dCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdmQudmRf bmR4ID0gYnl0ZV9nZXQgKGV2ZC52ZF9uZHgsIHNpemVvZiAoZXZkLnZkX25keCkpOwoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGl2ZC52ZF9uZXh0OwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpdmQu dmRfbmR4ICE9IChkYXRhW2NudCArIGpdICYgMHg3ZmZmKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmJiBpdmQudmRfbmV4dCAhPSAwKTsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKGl2ZC52ZF9uZHggPT0gKGRhdGFbY250ICsgal0gJiAweDdmZmYpKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZfRXh0 ZXJuYWxfVmVyZGF1eCBldmRhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZfSW50 ZXJuYWxfVmVyZGF1eCBpdmRhOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZkLnZk X2F1eCA9IGJ5dGVfZ2V0IChldmQudmRfYXV4LCBzaXplb2YgKGV2ZC52ZF9hdXgpKTsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9kYXRhICgmZXZkYSwgZmlsZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAtIGl2ZC52ZF9uZXh0ICsgaXZk LnZkX2F1eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAo ZXZkYSksICgidmVyc2lvbiBkZWYgYXV4IikpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaXZkYS52ZGFfbmFtZSA9IGJ5dGVfZ2V0IChldmRhLnZkYV9uYW1lLCBzaXplb2YgKGV2ZGEu dmRhX25hbWUpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBzdHJ0YWIg KyBpdmRhLnZkYV9uYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBubiArPSBwcmlu dGYgKCIoJXMlLSpzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyIC0g KGludCkgc3RybGVuIChuYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAiKSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgaWYgKG5uIDwgMTgpCiAgICAgICAg ICAgICAgICAgICAgICAgIHByaW50ZiAoIiUqYyIsIDE4IC0gbm4sICcgJyk7CiAgICAgICAgICAg ICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHB1dGNoYXIgKCdcbicpOwogICAgICAgICAgICAg IH0KCiAgICAgICAgICAgIGZyZWUgKGRhdGEpOwogICAgICAgICAgICBmcmVlIChzdHJ0YWIpOwog ICAgICAgICAgICBmcmVlIChzeW1ib2xzKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoK ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICBpZiAo ISBmb3VuZCkKICAgIHByaW50ZiAoKCJcbk5vIHZlcnNpb24gaW5mb3JtYXRpb24gZm91bmQgaW4g dGhpcyBmaWxlLlxuIikpOwoKICByZXR1cm4gMTsKfQoKc3RhdGljIGNvbnN0IGNoYXIgKgpnZXRf c3ltYm9sX2JpbmRpbmcgKGJpbmRpbmcpCiAgICAgdW5zaWduZWQgaW50IGJpbmRpbmc7CnsKICBz dGF0aWMgY2hhciBidWZmWzMyXTsKCiAgc3dpdGNoIChiaW5kaW5nKQogICAgewogICAgY2FzZSAw OiByZXR1cm4gIkxPQ0FMIjsKICAgIGNhc2UgMTogcmV0dXJuICJHTE9CQUwiOwogICAgY2FzZSAy OiByZXR1cm4gIldFQUsiOwogICAgZGVmYXVsdDoKICAgICAgaWYgKGJpbmRpbmcgPj0gMTMgJiYg YmluZGluZyA8PSAxNSkKICAgICAgICBzcHJpbnRmIChidWZmLCAoIjxwcm9jZXNzb3Igc3BlY2lm aWM+OiAlZCIpLCBiaW5kaW5nKTsKICAgICAgZWxzZSBpZiAoYmluZGluZyA+PSAxMCAmJiBiaW5k aW5nIDw9IDEyKQogICAgICAgIHNwcmludGYgKGJ1ZmYsICgiPE9TIHNwZWNpZmljPjogJWQiKSwg YmluZGluZyk7CiAgICAgIGVsc2UKICAgICAgICBzcHJpbnRmIChidWZmLCAoIjx1bmtub3duPjog JWQiKSwgYmluZGluZyk7CiAgICAgIHJldHVybiBidWZmOwogICAgfQp9CgpzdGF0aWMgY29uc3Qg Y2hhciAqCmdldF9zeW1ib2xfdHlwZSAodHlwZSkKICAgICB1bnNpZ25lZCBpbnQgdHlwZTsKewog IHN0YXRpYyBjaGFyIGJ1ZmZbMzJdOwoKICBzd2l0Y2ggKHR5cGUpCiAgICB7CiAgICBjYXNlIDA6 IHJldHVybiAiTk9UWVBFIjsKICAgIGNhc2UgMTogcmV0dXJuICJPQkpFQ1QiOwogICAgY2FzZSAy OiByZXR1cm4gIkZVTkMiOwogICAgY2FzZSAzOiByZXR1cm4gIlNFQ1RJT04iOwogICAgY2FzZSA0 OiByZXR1cm4gIkZJTEUiOwogICAgY2FzZSA1OiByZXR1cm4gIkNPTU1PTiI7CiAgICBjYXNlIDY6 IHJldHVybiAiVExTIjsKICAgIGRlZmF1bHQ6CiAgICAgIGlmICh0eXBlID49IDEzICYmIHR5cGUg PD0gMTUpCiAgICAgICAgewogICAgICAgICAgaWYgKGVsZl9oZWFkZXIuZV9tYWNoaW5lID09IDQw ICYmIHR5cGUgPT0gMTMpCiAgICAgICAgICAgIHJldHVybiAiVEhVTUJfRlVOQyI7CgogICAgICAg ICAgaWYgKGVsZl9oZWFkZXIuZV9tYWNoaW5lID09IDQzICYmIHR5cGUgPT0gMTMpCiAgICAgICAg ICAgIHJldHVybiAiUkVHSVNURVIiOwoKICAgICAgICAgIGlmIChlbGZfaGVhZGVyLmVfbWFjaGlu ZSA9PSAxNSAmJiB0eXBlID09IDEzKQogICAgICAgICAgICByZXR1cm4gIlBBUklTQ19NSUxMSSI7 CgogICAgICAgICAgc3ByaW50ZiAoYnVmZiwgKCI8cHJvY2Vzc29yIHNwZWNpZmljPjogJWQiKSwg dHlwZSk7CiAgICAgICAgfQogICAgICBlbHNlIGlmICh0eXBlID49IDEwICYmIHR5cGUgPD0gMTIp CiAgICAgICAgewogICAgICAgICAgaWYgKGVsZl9oZWFkZXIuZV9tYWNoaW5lID09IDE1KQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gKDEwICsgMHgxKSkKICAgICAgICAg ICAgICAgIHJldHVybiAiSFBfT1BBUVVFIjsKICAgICAgICAgICAgICBpZiAodHlwZSA9PSAoMTAg KyAweDIpKQogICAgICAgICAgICAgICAgcmV0dXJuICJIUF9TVFVCIjsKICAgICAgICAgICAgfQoK ICAgICAgICAgIHNwcmludGYgKGJ1ZmYsICgiPE9TIHNwZWNpZmljPjogJWQiKSwgdHlwZSk7CiAg ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgc3ByaW50ZiAoYnVmZiwgKCI8dW5rbm93bj46ICVk IiksIHR5cGUpOwogICAgICByZXR1cm4gYnVmZjsKICAgIH0KfQoKc3RhdGljIGNvbnN0IGNoYXIg KgpnZXRfc3ltYm9sX3Zpc2liaWxpdHkgKHZpc2liaWxpdHkpCiAgICAgdW5zaWduZWQgaW50IHZp c2liaWxpdHk7CnsKICBzd2l0Y2ggKHZpc2liaWxpdHkpCiAgICB7CiAgICBjYXNlIDA6IHJldHVy biAiREVGQVVMVCI7CiAgICBjYXNlIDE6IHJldHVybiAiSU5URVJOQUwiOwogICAgY2FzZSAyOiBy ZXR1cm4gIkhJRERFTiI7CiAgICBjYXNlIDM6IHJldHVybiAiUFJPVEVDVEVEIjsKICAgIGRlZmF1 bHQ6IGFib3J0ICgpOwogICAgfQp9CgpzdGF0aWMgY29uc3QgY2hhciAqCmdldF9zeW1ib2xfaW5k ZXhfdHlwZSAodHlwZSkKICAgICB1bnNpZ25lZCBpbnQgdHlwZTsKewogIHN0YXRpYyBjaGFyIGJ1 ZmZbMzJdOwoKICBzd2l0Y2ggKHR5cGUpCiAgICB7CiAgICBjYXNlIDA6IHJldHVybiAiVU5EIjsK ICAgIGNhc2UgMHhGRkYxOiByZXR1cm4gIkFCUyI7CiAgICBjYXNlIDB4RkZGMjogcmV0dXJuICJD T00iOwogICAgZGVmYXVsdDoKICAgICAgaWYgKHR5cGUgPj0gMHhGRjAwICYmIHR5cGUgPD0gMHhG RjFGKQogICAgICAgIHNwcmludGYgKGJ1ZmYsICJQUkNbMHglMDR4XSIsIHR5cGUpOwogICAgICBl bHNlIGlmICh0eXBlID49IDB4RkYyMCAmJiB0eXBlIDw9IDB4RkYzRikKICAgICAgICBzcHJpbnRm IChidWZmLCAiT1MgWzB4JTA0eF0iLCB0eXBlKTsKICAgICAgZWxzZSBpZiAodHlwZSA+PSAweEZG MDAgJiYgdHlwZSA8PSAweEZGRkYpCiAgICAgICAgc3ByaW50ZiAoYnVmZiwgIlJTVlsweCUwNHhd IiwgdHlwZSk7CiAgICAgIGVsc2UKICAgICAgICBzcHJpbnRmIChidWZmLCAiJTNkIiwgdHlwZSk7 CiAgICAgIGJyZWFrOwogICAgfQoKICByZXR1cm4gYnVmZjsKfQoKc3RhdGljIGludCAqCmdldF9k eW5hbWljX2RhdGEgKGZpbGUsIG51bWJlcikKICAgICBGSUxFICpmaWxlOwogICAgIHVuc2lnbmVk IGludCBudW1iZXI7CnsKICB1bnNpZ25lZCBjaGFyICplX2RhdGE7CiAgaW50ICppX2RhdGE7Cgog IGVfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopIG1hbGxvYyAobnVtYmVyICogNCk7CgogIGlmIChl X2RhdGEgPT0gKCh2b2lkICopMCkpCiAgICB7CiAgICAgIGVycm9yICgoIk91dCBvZiBtZW1vcnlc biIpKTsKICAgICAgcmV0dXJuICgodm9pZCAqKTApOwogICAgfQoKICBpZiAoZnJlYWQgKGVfZGF0 YSwgNCwgbnVtYmVyLCBmaWxlKSAhPSBudW1iZXIpCiAgICB7CiAgICAgIGVycm9yICgoIlVuYWJs ZSB0byByZWFkIGluIGR5bmFtaWMgZGF0YVxuIikpOwogICAgICByZXR1cm4gKCh2b2lkICopMCk7 CiAgICB9CgogIGlfZGF0YSA9IChpbnQgKikgbWFsbG9jIChudW1iZXIgKiBzaXplb2YgKCppX2Rh dGEpKTsKCiAgaWYgKGlfZGF0YSA9PSAoKHZvaWQgKikwKSkKICAgIHsKICAgICAgZXJyb3IgKCgi T3V0IG9mIG1lbW9yeVxuIikpOwogICAgICBmcmVlIChlX2RhdGEpOwogICAgICByZXR1cm4gKCh2 b2lkICopMCk7CiAgICB9CgogIHdoaWxlIChudW1iZXItLSkKICAgIGlfZGF0YVtudW1iZXJdID0g Ynl0ZV9nZXQgKGVfZGF0YSArIG51bWJlciAqIDQsIDQpOwoKICBmcmVlIChlX2RhdGEpOwoKICBy ZXR1cm4gaV9kYXRhOwp9CgoKc3RhdGljIGludApwcm9jZXNzX3N5bWJvbF90YWJsZSAoZmlsZSkK ICAgICBGSUxFICpmaWxlOwp7CiAgRWxmX0ludGVybmFsX1NoZHIgKnNlY3Rpb247CiAgdW5zaWdu ZWQgY2hhciBuYls0XTsKICB1bnNpZ25lZCBjaGFyIG5jWzRdOwogIGludCBuYnVja2V0cyA9IDA7 CiAgaW50IG5jaGFpbnMgPSAwOwogIGludCAqYnVja2V0cyA9ICgodm9pZCAqKTApOwogIGludCAq Y2hhaW5zID0gKCh2b2lkICopMCk7CgogIGlmICghIGRvX3N5bXMgJiYgIWRvX2hpc3RvZ3JhbSkK ICAgIHJldHVybiAxOwoKICBpZiAoZHluYW1pY19pbmZvWzRdICYmICgoZG9fdXNpbmdfZHluYW1p YyAmJiBkeW5hbWljX3N0cmluZ3MgIT0gKCh2b2lkICopMCkpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfHwgZG9faGlzdG9ncmFtKSkKICAgIHsKICAgICAgaWYgKGZzZWVrIChmaWxl LCBkeW5hbWljX2luZm9bNF0gLSBsb2FkYWRkciwgMCkpCiAgICAgICAgewogICAgICAgICAgZXJy b3IgKCgiVW5hYmxlIHRvIHNlZWsgdG8gc3RhcnQgb2YgZHluYW1pYyBpbmZvcm1hdGlvbiIpKTsK ICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KCiAgICAgIGlmIChmcmVhZCAobmIsIHNpemVv ZiAobmIpLCAxLCBmaWxlKSAhPSAxKQogICAgICAgIHsKICAgICAgICAgIGVycm9yICgoIkZhaWxl ZCB0byByZWFkIGluIG51bWJlciBvZiBidWNrZXRzXG4iKSk7CiAgICAgICAgICByZXR1cm4gMDsK ICAgICAgICB9CgogICAgICBpZiAoZnJlYWQgKG5jLCBzaXplb2YgKG5jKSwgMSwgZmlsZSkgIT0g MSkKICAgICAgICB7CiAgICAgICAgICBlcnJvciAoKCJGYWlsZWQgdG8gcmVhZCBpbiBudW1iZXIg b2YgY2hhaW5zXG4iKSk7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICBuYnVj a2V0cyA9IGJ5dGVfZ2V0IChuYiwgNCk7CiAgICAgIG5jaGFpbnMgPSBieXRlX2dldCAobmMsIDQp OwoKICAgICAgYnVja2V0cyA9IGdldF9keW5hbWljX2RhdGEgKGZpbGUsIG5idWNrZXRzKTsKICAg ICAgY2hhaW5zID0gZ2V0X2R5bmFtaWNfZGF0YSAoZmlsZSwgbmNoYWlucyk7CgogICAgICBpZiAo YnVja2V0cyA9PSAoKHZvaWQgKikwKSB8fCBjaGFpbnMgPT0gKCh2b2lkICopMCkpCiAgICAgICAg cmV0dXJuIDA7CiAgICB9CgogIGlmIChkb19zeW1zCiAgICAgICYmIGR5bmFtaWNfaW5mb1s0XSAm JiBkb191c2luZ19keW5hbWljICYmIGR5bmFtaWNfc3RyaW5ncyAhPSAoKHZvaWQgKikwKSkKICAg IHsKICAgICAgaW50IGhuOwogICAgICBpbnQgc2k7CgogICAgICBwcmludGYgKCgiXG5TeW1ib2wg dGFibGUgZm9yIGltYWdlOlxuIikpOwogICAgICBpZiAoaXNfMzJiaXRfZWxmKQogICAgICAgIHBy aW50ZiAoKCIgIE51bSBCdWM6ICAgIFZhbHVlICBTaXplICAgVHlwZSAgIEJpbmQgVmlzICAgICAg TmR4IE5hbWVcbiIpKTsKICAgICAgZWxzZQogICAgICAgIHByaW50ZiAoKCIgIE51bSBCdWM6ICAg IFZhbHVlICAgICAgICAgIFNpemUgICBUeXBlICAgQmluZCBWaXMgICAgICBOZHggTmFtZVxuIikp OwoKICAgICAgZm9yIChobiA9IDA7IGhuIDwgbmJ1Y2tldHM7IGhuKyspCiAgICAgICAgewogICAg ICAgICAgaWYgKCEgYnVja2V0c1tobl0pCiAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAg IGZvciAoc2kgPSBidWNrZXRzW2huXTsgc2kgPCBuY2hhaW5zICYmIHNpID4gMDsgc2kgPSBjaGFp bnNbc2ldKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgRWxmX0ludGVybmFsX1N5bSAqcHN5 bTsKCiAgICAgICAgICAgICAgcHN5bSA9IGR5bmFtaWNfc3ltYm9scyArIHNpOwoKICAgICAgICAg ICAgICBwcmludGYgKCIgICUzZCAlM2Q6ICIsIHNpLCBobik7CiAgICAgICAgICAgICAgcHJpbnRf dm1hIChwc3ltLT5zdF92YWx1ZSwgTE9OR19IRVgpOwogICAgICAgICAgICAgIHB1dGNoYXIgKCcg JyApOwogICAgICAgICAgICAgIHByaW50X3ZtYSAocHN5bS0+c3Rfc2l6ZSwgREVDXzUpOwoKICAg ICAgICAgICAgICBwcmludGYgKCIgICU2cyIsIGdldF9zeW1ib2xfdHlwZSAoKChwc3ltLT5zdF9p bmZvKSAmIDB4RikpKTsKICAgICAgICAgICAgICBwcmludGYgKCIgJTZzIiwgZ2V0X3N5bWJvbF9i aW5kaW5nICgoKCh1bnNpZ25lZCBpbnQpKHBzeW0tPnN0X2luZm8pKSA+PiA0KSkpOwogICAgICAg ICAgICAgIHByaW50ZiAoIiAlM3MiLCBnZXRfc3ltYm9sX3Zpc2liaWxpdHkgKCgocHN5bS0+c3Rf b3RoZXIpICYgMHgzKSkpOwogICAgICAgICAgICAgIHByaW50ZiAoIiAlMy4zcyAiLCBnZXRfc3lt Ym9sX2luZGV4X3R5cGUgKHBzeW0tPnN0X3NobmR4KSk7CiAgICAgICAgICAgICAgcHJpbnRfc3lt Ym9sICgyNSwgZHluYW1pY19zdHJpbmdzICsgcHN5bS0+c3RfbmFtZSk7CiAgICAgICAgICAgICAg cHV0Y2hhciAoJ1xuJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgZWxzZSBpZiAo ZG9fc3ltcyAmJiAhZG9fdXNpbmdfZHluYW1pYykKICAgIHsKICAgICAgdW5zaWduZWQgaW50IGk7 CgogICAgICBmb3IgKGkgPSAwLCBzZWN0aW9uID0gc2VjdGlvbl9oZWFkZXJzOwogICAgICAgICAg IGkgPCBlbGZfaGVhZGVyLmVfc2hudW07CiAgICAgICAgICAgaSsrLCBzZWN0aW9uKyspCiAgICAg ICAgewogICAgICAgICAgdW5zaWduZWQgaW50IHNpOwogICAgICAgICAgY2hhciAqc3RydGFiOwog ICAgICAgICAgRWxmX0ludGVybmFsX1N5bSAqc3ltdGFiOwogICAgICAgICAgRWxmX0ludGVybmFs X1N5bSAqcHN5bTsKCgogICAgICAgICAgaWYgKCBzZWN0aW9uLT5zaF90eXBlICE9IDIKICAgICAg ICAgICAgICAmJiBzZWN0aW9uLT5zaF90eXBlICE9IDExKQogICAgICAgICAgICBjb250aW51ZTsK CiAgICAgICAgICBwcmludGYgKCgiXG5TeW1ib2wgdGFibGUgJyVzJyBjb250YWlucyAlbHUgZW50 cmllczpcbiIpLAogICAgICAgICAgICAgICAgICAoKHNlY3Rpb24pID09ICgodm9pZCAqKTApID8g Ijxub25lPiIgOiAoKHNlY3Rpb24pLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAi PGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWN0aW9uKS0+c2hfbmFtZSkpLAogICAgICAg ICAgICAgICAgICAodW5zaWduZWQgbG9uZykgKHNlY3Rpb24tPnNoX3NpemUgLyBzZWN0aW9uLT5z aF9lbnRzaXplKSk7CiAgICAgICAgICBpZiAoaXNfMzJiaXRfZWxmKQogICAgICAgICAgICBwcmlu dGYgKCgiICAgTnVtOiAgICBWYWx1ZSAgU2l6ZSBUeXBlICAgIEJpbmQgICBWaXMgICAgICBOZHgg TmFtZVxuIikpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBwcmludGYgKCgiICAgTnVtOiAg ICBWYWx1ZSAgICAgICAgICBTaXplIFR5cGUgICAgQmluZCAgIFZpcyAgICAgIE5keCBOYW1lXG4i KSk7CgogICAgICAgICAgc3ltdGFiID0gKGlzXzMyYml0X2VsZiA/IGdldF8zMmJpdF9lbGZfc3lt Ym9scyAoZmlsZSwgc2VjdGlvbikgOiBnZXRfNjRiaXRfZWxmX3N5bWJvbHMgKGZpbGUsIHNlY3Rp b24pKTsKICAgICAgICAgIGlmIChzeW10YWIgPT0gKCh2b2lkICopMCkpCiAgICAgICAgICAgIGNv bnRpbnVlOwoKICAgICAgICAgIGlmIChzZWN0aW9uLT5zaF9saW5rID09IGVsZl9oZWFkZXIuZV9z aHN0cm5keCkKICAgICAgICAgICAgc3RydGFiID0gc3RyaW5nX3RhYmxlOwogICAgICAgICAgZWxz ZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgRWxmX0ludGVybmFsX1NoZHIgKnN0cmluZ19z ZWM7CgogICAgICAgICAgICAgIHN0cmluZ19zZWMgPSAoc2VjdGlvbl9oZWFkZXJzICsgKChzZWN0 aW9uLT5zaF9saW5rKSA8IDB4RkYwMCA/IChzZWN0aW9uLT5zaF9saW5rKSA6ICgoc2VjdGlvbi0+ c2hfbGluaykgPD0gMHhGRkZGID8gMCA6IChzZWN0aW9uLT5zaF9saW5rKSAtICgweEZGRkYgKyAx IC0gMHhGRjAwKSkpKTsKCiAgICAgICAgICAgICAgc3RydGFiID0gKGNoYXIgKikgZ2V0X2RhdGEg KCgodm9pZCAqKTApLCBmaWxlLCBzdHJpbmdfc2VjLT5zaF9vZmZzZXQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ19zZWMtPnNoX3NpemUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgic3RyaW5nIHRhYmxlIikpOwogICAg ICAgICAgICB9CgogICAgICAgICAgZm9yIChzaSA9IDAsIHBzeW0gPSBzeW10YWI7CiAgICAgICAg ICAgICAgIHNpIDwgc2VjdGlvbi0+c2hfc2l6ZSAvIHNlY3Rpb24tPnNoX2VudHNpemU7CiAgICAg ICAgICAgICAgIHNpKyssIHBzeW0rKykKICAgICAgICAgICAgewogICAgICAgICAgICAgIHByaW50 ZiAoIiU2ZDogIiwgc2kpOwogICAgICAgICAgICAgIHByaW50X3ZtYSAocHN5bS0+c3RfdmFsdWUs IExPTkdfSEVYKTsKICAgICAgICAgICAgICBwdXRjaGFyICgnICcpOwogICAgICAgICAgICAgIHBy aW50X3ZtYSAocHN5bS0+c3Rfc2l6ZSwgREVDXzUpOwogICAgICAgICAgICAgIHByaW50ZiAoIiAl LTdzIiwgZ2V0X3N5bWJvbF90eXBlICgoKHBzeW0tPnN0X2luZm8pICYgMHhGKSkpOwogICAgICAg ICAgICAgIHByaW50ZiAoIiAlLTZzIiwgZ2V0X3N5bWJvbF9iaW5kaW5nICgoKCh1bnNpZ25lZCBp bnQpKHBzeW0tPnN0X2luZm8pKSA+PiA0KSkpOwogICAgICAgICAgICAgIHByaW50ZiAoIiAlLTNz IiwgZ2V0X3N5bWJvbF92aXNpYmlsaXR5ICgoKHBzeW0tPnN0X290aGVyKSAmIDB4MykpKTsKICAg ICAgICAgICAgICBwcmludGYgKCIgJTRzICIsIGdldF9zeW1ib2xfaW5kZXhfdHlwZSAocHN5bS0+ c3Rfc2huZHgpKTsKICAgICAgICAgICAgICBwcmludF9zeW1ib2wgKDI1LCBzdHJ0YWIgKyBwc3lt LT5zdF9uYW1lKTsKCiAgICAgICAgICAgICAgaWYgKHNlY3Rpb24tPnNoX3R5cGUgPT0gMTEgJiYK ICAgICAgICAgICAgICAgICAgdmVyc2lvbl9pbmZvWygweDZmZmZmZmZmIC0gKDB4NmZmZmZmZjAp KV0gIT0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hh ciBkYXRhWzJdOwogICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB2ZXJzX2RhdGE7CiAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogICAgICAgICAgICAgICAgICBp bnQgaXNfbm9iaXRzOwogICAgICAgICAgICAgICAgICBpbnQgY2hlY2tfZGVmOwoKICAgICAgICAg ICAgICAgICAgb2Zmc2V0ID0gdmVyc2lvbl9pbmZvWygweDZmZmZmZmZmIC0gKDB4NmZmZmZmZjAp KV0KICAgICAgICAgICAgICAgICAgICAtIGxvYWRhZGRyOwoKICAgICAgICAgICAgICAgICAgZ2V0 X2RhdGEgKCZkYXRhLCBmaWxlLCBvZmZzZXQgKyBzaSAqIHNpemVvZiAodmVyc19kYXRhKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoZGF0YSksICgidmVyc2lvbiBkYXRhIikp OwoKICAgICAgICAgICAgICAgICAgdmVyc19kYXRhID0gYnl0ZV9nZXQgKGRhdGEsIDIpOwoKICAg ICAgICAgICAgICAgICAgaXNfbm9iaXRzID0gKChzZWN0aW9uX2hlYWRlcnMgKyAoKHBzeW0tPnN0 X3NobmR4KSA8IDB4RkYwMCA/IChwc3ltLT5zdF9zaG5keCkgOiAoKHBzeW0tPnN0X3NobmR4KSA8 PSAweEZGRkYgPyAwIDogKHBzeW0tPnN0X3NobmR4KSAtICgweEZGRkYgKyAxIC0gMHhGRjAwKSkp KS0+c2hfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gOCk7CgogICAgICAg ICAgICAgICAgICBjaGVja19kZWYgPSAocHN5bS0+c3Rfc2huZHggIT0gMCk7CgogICAgICAgICAg ICAgICAgICBpZiAoKHZlcnNfZGF0YSAmIDB4ODAwMCkgfHwgdmVyc19kYXRhID4gMSkKICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyc2lvbl9pbmZvWygw eDZmZmZmZmZmIC0gKDB4NmZmZmZmZmUpKV0KICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAo aXNfbm9iaXRzIHx8ICEgY2hlY2tfZGVmKSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgICAgICAgIEVsZl9FeHRlcm5hbF9WZXJuZWVkIGV2bjsKICAgICAgICAg ICAgICAgICAgICAgICAgICBFbGZfSW50ZXJuYWxfVmVybmVlZCBpdm47CiAgICAgICAgICAgICAg ICAgICAgICAgICAgRWxmX0ludGVybmFsX1Zlcm5hdXggaXZuYTsKCgogICAgICAgICAgICAgICAg ICAgICAgICAgIG9mZnNldCA9ICh2ZXJzaW9uX2luZm9bKDB4NmZmZmZmZmYgLSAoMHg2ZmZmZmZm ZSkpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGxvYWRhZGRyKTsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgZG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2bmFfb2ZmOwoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2RhdGEgKCZldm4sIGZpbGUsIG9mZnNldCwg c2l6ZW9mIChldm4pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ2 ZXJzaW9uIG5lZWQiKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdm4udm5fYXV4 ID0gYnl0ZV9nZXQgKGV2bi52bl9hdXgsIHNpemVvZiAoZXZuLnZuX2F1eCkpOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpdm4udm5fbmV4dCA9IGJ5dGVfZ2V0IChldm4udm5fbmV4dCwg c2l6ZW9mIChldm4udm5fbmV4dCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm5h X29mZiA9IG9mZnNldCArIGl2bi52bl9hdXg7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEVsZl9FeHRlcm5hbF9WZXJuYXV4IGV2bmE7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2V0X2RhdGEgKCZldm5hLCBmaWxlLCB2bmFfb2ZmLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoZXZuYSksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ2ZXJzaW9uIG5lZWQg YXV4ICgzKSIpKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdm5hLnZuYV9v dGhlciA9IGJ5dGVfZ2V0IChldm5hLnZuYV9vdGhlciwgc2l6ZW9mIChldm5hLnZuYV9vdGhlcikp OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZuYS52bmFfbmV4dCA9IGJ5dGVf Z2V0IChldm5hLnZuYV9uZXh0LCBzaXplb2YgKGV2bmEudm5hX25leHQpKTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGl2bmEudm5hX25hbWUgPSBieXRlX2dldCAoZXZuYS52bmFf bmFtZSwgc2l6ZW9mIChldm5hLnZuYV9uYW1lKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm5hX29mZiArPSBpdm5hLnZuYV9uZXh0OwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGl2bmEudm5h X290aGVyICE9IHZlcnNfZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgaXZuYS52bmFfbmV4dCAhPSAwKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm IChpdm5hLnZuYV9vdGhlciA9PSB2ZXJzX2RhdGEpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gaXZu LnZuX25leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgICAgICAgd2hpbGUgKGl2bi52bl9uZXh0ICE9IDApOwoKICAgICAgICAgICAgICAgICAgICAg ICAgICBpZiAoaXZuYS52bmFfb3RoZXIgPT0gdmVyc19kYXRhKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCJAJXMgKCVk KSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydGFiICsgaXZuYS52 bmFfbmFtZSwgaXZuYS52bmFfb3RoZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGVja19kZWYgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgICAgICAgIGVsc2UgaWYgKCEgaXNfbm9iaXRzKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgZXJyb3IgKCgiYmFkIGR5bmFtaWMgc3ltYm9sIikpOwogICAgICAgICAgICAgICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2RlZiA9IDE7CiAg ICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tf ZGVmKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgKHZlcnNfZGF0YSAhPSAweDgwMDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYg dmVyc2lvbl9pbmZvWygweDZmZmZmZmZmIC0gKDB4NmZmZmZmZmMpKV0pCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZl9JbnRlcm5h bF9WZXJkZWYgaXZkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZfSW50ZXJuYWxf VmVyZGF1eCBpdmRhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGZfRXh0ZXJuYWxf VmVyZGF1eCBldmRhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n IG9mZnNldDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgID0gKHZlcnNpb25faW5mb1soMHg2ZmZmZmZmZiAtICgweDZm ZmZmZmZjKSldCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBsb2FkYWRkcik7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZl9FeHRlcm5h bF9WZXJkZWYgZXZkOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9kYXRh ICgmZXZkLCBmaWxlLCBvZmZzZXQsIHNpemVvZiAoZXZkKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoInZlcnNpb24gZGVmIikpOwoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGl2ZC52ZF9uZHggPSBieXRlX2dldCAoZXZkLnZkX25keCwgc2l6 ZW9mIChldmQudmRfbmR4KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdmQu dmRfYXV4ID0gYnl0ZV9nZXQgKGV2ZC52ZF9hdXgsIHNpemVvZiAoZXZkLnZkX2F1eCkpOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXZkLnZkX25leHQgPSBieXRlX2dldCAoZXZk LnZkX25leHQsIHNpemVvZiAoZXZkLnZkX25leHQpKTsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvZmZzZXQgKz0gaXZkLnZkX25leHQ7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaXZkLnZkX25k eCAhPSAodmVyc19kYXRhICYgMHg3ZmZmKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgaXZkLnZkX25leHQgIT0gMCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBvZmZzZXQgLT0gaXZkLnZkX25leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9m ZnNldCArPSBpdmQudmRfYXV4OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2Rh dGEgKCZldmRhLCBmaWxlLCBvZmZzZXQsIHNpemVvZiAoZXZkYSksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoInZlcnNpb24gZGVmIGF1eCIpKTsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGl2ZGEudmRhX25hbWUgPSBieXRlX2dldCAoZXZkYS52ZGFfbmFt ZSwgc2l6ZW9mIChldmRhLnZkYV9uYW1lKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiAocHN5bS0+c3RfbmFtZSAhPSBpdmRhLnZkYV9uYW1lKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHByaW50ZiAoKHZlcnNfZGF0YSAmIDB4ODAwMCkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgID8gIkAlcyIgOiAiQEAlcyIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ0YWIgKyBpdmRhLnZkYV9uYW1lKTsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgcHV0Y2hhciAo J1xuJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBmcmVlIChzeW10YWIpOwogICAgICAgICAg aWYgKHN0cnRhYiAhPSBzdHJpbmdfdGFibGUpCiAgICAgICAgICAgIGZyZWUgKHN0cnRhYik7CiAg ICAgICAgfQogICAgfQogIGVsc2UgaWYgKGRvX3N5bXMpCiAgICBwcmludGYKICAgICAgKCgiXG5E eW5hbWljIHN5bWJvbCBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIGZvciBkaXNwbGF5aW5n IHN5bWJvbHMuXG4iKSk7CgogIGlmIChkb19oaXN0b2dyYW0gJiYgYnVja2V0cyAhPSAoKHZvaWQg KikwKSkKICAgIHsKICAgICAgaW50ICpsZW5ndGhzOwogICAgICBpbnQgKmNvdW50czsKICAgICAg aW50IGhuOwogICAgICBpbnQgc2k7CiAgICAgIGludCBtYXhsZW5ndGggPSAwOwogICAgICBpbnQg bnplcm9fY291bnRzID0gMDsKICAgICAgaW50IG5zeW1zID0gMDsKCiAgICAgIHByaW50ZiAoKCJc bkhpc3RvZ3JhbSBmb3IgYnVja2V0IGxpc3QgbGVuZ3RoICh0b3RhbCBvZiAlZCBidWNrZXRzKTpc biIpLAogICAgICAgICAgICAgIG5idWNrZXRzKTsKICAgICAgcHJpbnRmICgoIiBMZW5ndGggIE51 bWJlciAgICAgJSUgb2YgdG90YWwgIENvdmVyYWdlXG4iKSk7CgogICAgICBsZW5ndGhzID0gKGlu dCAqKSBjYWxsb2MgKG5idWNrZXRzLCBzaXplb2YgKGludCkpOwogICAgICBpZiAobGVuZ3RocyA9 PSAoKHZvaWQgKikwKSkKICAgICAgICB7CiAgICAgICAgICBlcnJvciAoKCJPdXQgb2YgbWVtb3J5 IikpOwogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQogICAgICBmb3IgKGhuID0gMDsgaG4g PCBuYnVja2V0czsgKytobikKICAgICAgICB7CiAgICAgICAgICBpZiAoISBidWNrZXRzW2huXSkK ICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgZm9yIChzaSA9IGJ1Y2tldHNbaG5dOyBz aSA+IDAgJiYgc2kgPCBuY2hhaW5zOyBzaSA9IGNoYWluc1tzaV0pCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICArK25zeW1zOwogICAgICAgICAgICAgIGlmIChtYXhsZW5ndGggPCArK2xlbmd0 aHNbaG5dKQogICAgICAgICAgICAgICAgKyttYXhsZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAg ICB9CgogICAgICBjb3VudHMgPSAoaW50ICopIGNhbGxvYyAobWF4bGVuZ3RoICsgMSwgc2l6ZW9m IChpbnQpKTsKICAgICAgaWYgKGNvdW50cyA9PSAoKHZvaWQgKikwKSkKICAgICAgICB7CiAgICAg ICAgICBlcnJvciAoKCJPdXQgb2YgbWVtb3J5IikpOwogICAgICAgICAgcmV0dXJuIDA7CiAgICAg ICAgfQoKICAgICAgZm9yIChobiA9IDA7IGhuIDwgbmJ1Y2tldHM7ICsraG4pCiAgICAgICAgKytj b3VudHNbbGVuZ3Roc1tobl1dOwoKICAgICAgaWYgKG5idWNrZXRzID4gMCkKICAgICAgICB7CiAg ICAgICAgICBwcmludGYgKCIgICAgICAwICAlLTEwZCAoJTUuMWYlJSlcbiIsCiAgICAgICAgICAg ICAgICAgIGNvdW50c1swXSwgKGNvdW50c1swXSAqIDEwMC4wKSAvIG5idWNrZXRzKTsKICAgICAg ICAgIGZvciAoc2kgPSAxOyBzaSA8PSBtYXhsZW5ndGg7ICsrc2kpCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBuemVyb19jb3VudHMgKz0gY291bnRzW3NpXSAqIHNpOwogICAgICAgICAgICAg IHByaW50ZiAoIiU3ZCAgJS0xMGQgKCU1LjFmJSUpICAgICU1LjFmJSVcbiIsCiAgICAgICAgICAg ICAgICAgICAgICBzaSwgY291bnRzW3NpXSwgKGNvdW50c1tzaV0gKiAxMDAuMCkgLyBuYnVja2V0 cywKICAgICAgICAgICAgICAgICAgICAgIChuemVyb19jb3VudHMgKiAxMDAuMCkgLyBuc3ltcyk7 CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBmcmVlIChjb3VudHMpOwogICAgICBmcmVl IChsZW5ndGhzKTsKICAgIH0KCiAgaWYgKGJ1Y2tldHMgIT0gKCh2b2lkICopMCkpCiAgICB7CiAg ICAgIGZyZWUgKGJ1Y2tldHMpOwogICAgICBmcmVlIChjaGFpbnMpOwogICAgfQoKICByZXR1cm4g MTsKfQoKc3RhdGljIGludApwcm9jZXNzX3N5bWluZm8gKGZpbGUpCiAgICAgRklMRSAqZmlsZSBf X2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwp7CiAgdW5zaWduZWQgaW50IGk7CgogIGlmIChk eW5hbWljX3N5bWluZm8gPT0gKCh2b2lkICopMCkKICAgICAgfHwgIWRvX2R5bmFtaWMpCgogICAg cmV0dXJuIDE7CgoKICBpZiAoZHluYW1pY19zeW1ib2xzID09ICgodm9pZCAqKTApIHx8IGR5bmFt aWNfc3RyaW5ncyA9PSAoKHZvaWQgKikwKSkKICAgIHJldHVybiAwOwoKICBpZiAoZHluYW1pY19h ZGRyKQogICAgcHJpbnRmICgoIlxuRHluYW1pYyBpbmZvIHNlZ21lbnQgYXQgb2Zmc2V0IDB4JWx4 IGNvbnRhaW5zICVkIGVudHJpZXM6XG4iKSwKICAgICAgICAgICAgZHluYW1pY19zeW1pbmZvX29m ZnNldCwgZHluYW1pY19zeW1pbmZvX25lbnQpOwoKICBwcmludGYgKCgiIE51bTogTmFtZSAgICAg ICAgICAgICAgICAgICAgICAgICAgIEJvdW5kVG8gICAgIEZsYWdzXG4iKSk7CiAgZm9yIChpID0g MDsgaSA8IGR5bmFtaWNfc3ltaW5mb19uZW50OyArK2kpCiAgICB7CiAgICAgIHVuc2lnbmVkIHNo b3J0IGludCBmbGFncyA9IGR5bmFtaWNfc3ltaW5mb1tpXS5zaV9mbGFnczsKCiAgICAgIHByaW50 ZiAoIiU0ZDogIiwgaSk7CiAgICAgIHByaW50X3N5bWJvbCAoMzAsIGR5bmFtaWNfc3RyaW5ncyAr IGR5bmFtaWNfc3ltYm9sc1tpXS5zdF9uYW1lKTsKICAgICAgcHV0Y2hhciAoJyAnKTsKCiAgICAg IHN3aXRjaCAoZHluYW1pY19zeW1pbmZvW2ldLnNpX2JvdW5kdG8pCiAgICAgICAgewogICAgICAg IGNhc2UgMHhmZmZmOgogICAgICAgICAgZnB1dHMgKCJTRUxGICAgICAgICIsIHN0ZG91dCk7CiAg ICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDB4ZmZmZToKICAgICAgICAgIGZwdXRzICgiUEFS RU5UICAgICAiLCBzdGRvdXQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAg ICAgICAgIGlmIChkeW5hbWljX3N5bWluZm9baV0uc2lfYm91bmR0byA+IDAKICAgICAgICAgICAg ICAmJiBkeW5hbWljX3N5bWluZm9baV0uc2lfYm91bmR0byA8IGR5bmFtaWNfc2l6ZSkKICAgICAg ICAgICAgewogICAgICAgICAgICAgIHByaW50X3N5bWJvbCAoMTAsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkeW5hbWljX3N0cmluZ3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICsg KGR5bmFtaWNfc2VnbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2R5bmFtaWNf c3ltaW5mb1tpXS5zaV9ib3VuZHRvXS5kX3VuLmRfdmFsKSk7CiAgICAgICAgICAgICAgcHV0Y2hh ciAoJyAnICk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcHJpbnRm ICgiJS0xMGQgIiwgZHluYW1pY19zeW1pbmZvW2ldLnNpX2JvdW5kdG8pOwogICAgICAgICAgYnJl YWs7CiAgICAgICAgfQoKICAgICAgaWYgKGZsYWdzICYgMHgwMDAxKQogICAgICAgIHByaW50ZiAo IiBESVJFQ1QiKTsKICAgICAgaWYgKGZsYWdzICYgMHgwMDAyKQogICAgICAgIHByaW50ZiAoIiBQ QVNTVEhSVSIpOwogICAgICBpZiAoZmxhZ3MgJiAweDAwMDQpCiAgICAgICAgcHJpbnRmICgiIENP UFkiKTsKICAgICAgaWYgKGZsYWdzICYgMHgwMDA4KQogICAgICAgIHByaW50ZiAoIiBMQVpZTE9B RCIpOwoKICAgICAgcHV0cyAoIiIpOwogICAgfQoKICByZXR1cm4gMTsKfQojIDYxOTQgInJlYWRl bGYuYyIKc3RhdGljIGludApkdW1wX3NlY3Rpb24gKHNlY3Rpb24sIGZpbGUpCiAgICAgRWxmX0lu dGVybmFsX1NoZHIgKnNlY3Rpb247CiAgICAgRklMRSAqZmlsZTsKewogIGJmZF9zaXplX3R5cGUg Ynl0ZXM7CiAgYmZkX3ZtYSBhZGRyOwogIHVuc2lnbmVkIGNoYXIgKmRhdGE7CiAgdW5zaWduZWQg Y2hhciAqc3RhcnQ7CgogIGJ5dGVzID0gc2VjdGlvbi0+c2hfc2l6ZTsKCiAgaWYgKGJ5dGVzID09 IDApCiAgICB7CiAgICAgIHByaW50ZiAoKCJcblNlY3Rpb24gJyVzJyBoYXMgbm8gZGF0YSB0byBk dW1wLlxuIiksCiAgICAgICAgICAgICAgKChzZWN0aW9uKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9u ZT4iIDogKChzZWN0aW9uKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3Jy dXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjdGlvbiktPnNoX25hbWUpKSk7CiAgICAgIHJldHVy biAwOwogICAgfQogIGVsc2UKICAgIHByaW50ZiAoKCJcbkhleCBkdW1wIG9mIHNlY3Rpb24gJyVz JzpcbiIpLCAoKHNlY3Rpb24pID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlY3Rpb24p LT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190 YWJsZSArIChzZWN0aW9uKS0+c2hfbmFtZSkpKTsKCiAgYWRkciA9IHNlY3Rpb24tPnNoX2FkZHI7 CgogIHN0YXJ0ID0gKHVuc2lnbmVkIGNoYXIgKikgZ2V0X2RhdGEgKCgodm9pZCAqKTApLCBmaWxl LCBzZWN0aW9uLT5zaF9vZmZzZXQsIGJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICgic2VjdGlvbiBkYXRhIikpOwogIGlmICghc3RhcnQpCiAgICByZXR1cm4gMDsK CiAgZGF0YSA9IHN0YXJ0OwoKICB3aGlsZSAoYnl0ZXMpCiAgICB7CiAgICAgIGludCBqOwogICAg ICBpbnQgazsKICAgICAgaW50IGxieXRlczsKCiAgICAgIGxieXRlcyA9IChieXRlcyA+IDE2ID8g MTYgOiBieXRlcyk7CgogICAgICBwcmludGYgKCIgIDB4JTguOGx4ICIsICh1bnNpZ25lZCBsb25n KSBhZGRyKTsKCiAgICAgIHN3aXRjaCAoZWxmX2hlYWRlci5lX2lkZW50WzVdKQogICAgICAgIHsK ICAgICAgICBkZWZhdWx0OgogICAgICAgIGNhc2UgMToKICAgICAgICAgIGZvciAoaiA9IDE1OyBq ID49IDA7IGogLS0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoaiA8IGxieXRlcykK ICAgICAgICAgICAgICAgIHByaW50ZiAoIiUyLjJ4IiwgZGF0YVtqXSk7CiAgICAgICAgICAgICAg ZWxzZQogICAgICAgICAgICAgICAgcHJpbnRmICgiICAiKTsKCiAgICAgICAgICAgICAgaWYgKCEo aiAmIDB4MykpCiAgICAgICAgICAgICAgICBwcmludGYgKCIgIik7CiAgICAgICAgICAgIH0KICAg ICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwg MTY7IGorKykKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChqIDwgbGJ5dGVzKQogICAg ICAgICAgICAgICAgcHJpbnRmICgiJTIuMngiLCBkYXRhW2pdKTsKICAgICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICBwcmludGYgKCIgICIpOwoKICAgICAgICAgICAgICBpZiAoKGogJiAz KSA9PSAzKQogICAgICAgICAgICAgICAgcHJpbnRmICgiICIpOwogICAgICAgICAgICB9CiAgICAg ICAgICBicmVhazsKICAgICAgICB9CgogICAgICBmb3IgKGogPSAwOyBqIDwgbGJ5dGVzOyBqKysp CiAgICAgICAgewogICAgICAgICAgayA9IGRhdGFbal07CiAgICAgICAgICBpZiAoayA+PSAnICcg JiYgayA8IDB4ODApCiAgICAgICAgICAgIHByaW50ZiAoIiVjIiwgayk7CiAgICAgICAgICBlbHNl CiAgICAgICAgICAgIHByaW50ZiAoIi4iKTsKICAgICAgICB9CgogICAgICBwdXRjaGFyICgnXG4n KTsKCiAgICAgIGRhdGEgKz0gbGJ5dGVzOwogICAgICBhZGRyICs9IGxieXRlczsKICAgICAgYnl0 ZXMgLT0gbGJ5dGVzOwogICAgfQoKICBmcmVlIChzdGFydCk7CgogIHJldHVybiAxOwp9CgoKc3Rh dGljIHVuc2lnbmVkIGxvbmcgaW50CnJlYWRfbGViMTI4IChkYXRhLCBsZW5ndGhfcmV0dXJuLCBz aWduKQogICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CiAgICAgaW50ICpsZW5ndGhfcmV0dXJuOwog ICAgIGludCBzaWduOwp7CiAgdW5zaWduZWQgbG9uZyBpbnQgcmVzdWx0ID0gMDsKICB1bnNpZ25l ZCBpbnQgbnVtX3JlYWQgPSAwOwogIGludCBzaGlmdCA9IDA7CiAgdW5zaWduZWQgY2hhciBieXRl OwoKICBkbwogICAgewogICAgICBieXRlID0gKmRhdGErKzsKICAgICAgbnVtX3JlYWQrKzsKCiAg ICAgIHJlc3VsdCB8PSAoYnl0ZSAmIDB4N2YpIDw8IHNoaWZ0OwoKICAgICAgc2hpZnQgKz0gNzsK CiAgICB9CiAgd2hpbGUgKGJ5dGUgJiAweDgwKTsKCiAgaWYgKGxlbmd0aF9yZXR1cm4gIT0gKCh2 b2lkICopMCkpCiAgICAqbGVuZ3RoX3JldHVybiA9IG51bV9yZWFkOwoKICBpZiAoc2lnbiAmJiAo c2hpZnQgPCAzMikgJiYgKGJ5dGUgJiAweDQwKSkKICAgIHJlc3VsdCB8PSAtMSA8PCBzaGlmdDsK CiAgcmV0dXJuIHJlc3VsdDsKfQoKdHlwZWRlZiBzdHJ1Y3QgU3RhdGVfTWFjaGluZV9SZWdpc3Rl cnMKewogIHVuc2lnbmVkIGxvbmcgYWRkcmVzczsKICB1bnNpZ25lZCBpbnQgZmlsZTsKICB1bnNp Z25lZCBpbnQgbGluZTsKICB1bnNpZ25lZCBpbnQgY29sdW1uOwogIGludCBpc19zdG10OwogIGlu dCBiYXNpY19ibG9jazsKICBpbnQgZW5kX3NlcXVlbmNlOwoKCiAgdW5zaWduZWQgaW50IGxhc3Rf ZmlsZV9lbnRyeTsKfSBTTVI7CgpzdGF0aWMgU01SIHN0YXRlX21hY2hpbmVfcmVnczsKCnN0YXRp YyB2b2lkCnJlc2V0X3N0YXRlX21hY2hpbmUgKGlzX3N0bXQpCiAgICAgaW50IGlzX3N0bXQ7CnsK ICBzdGF0ZV9tYWNoaW5lX3JlZ3MuYWRkcmVzcyA9IDA7CiAgc3RhdGVfbWFjaGluZV9yZWdzLmZp bGUgPSAxOwogIHN0YXRlX21hY2hpbmVfcmVncy5saW5lID0gMTsKICBzdGF0ZV9tYWNoaW5lX3Jl Z3MuY29sdW1uID0gMDsKICBzdGF0ZV9tYWNoaW5lX3JlZ3MuaXNfc3RtdCA9IGlzX3N0bXQ7CiAg c3RhdGVfbWFjaGluZV9yZWdzLmJhc2ljX2Jsb2NrID0gMDsKICBzdGF0ZV9tYWNoaW5lX3JlZ3Mu ZW5kX3NlcXVlbmNlID0gMDsKICBzdGF0ZV9tYWNoaW5lX3JlZ3MubGFzdF9maWxlX2VudHJ5ID0g MDsKfQoKCgpzdGF0aWMgaW50CnByb2Nlc3NfZXh0ZW5kZWRfbGluZV9vcCAoZGF0YSwgaXNfc3Rt dCwgcG9pbnRlcl9zaXplKQogICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CiAgICAgaW50IGlzX3N0 bXQ7CiAgICAgaW50IHBvaW50ZXJfc2l6ZTsKewogIHVuc2lnbmVkIGNoYXIgb3BfY29kZTsKICBp bnQgYnl0ZXNfcmVhZDsKICB1bnNpZ25lZCBpbnQgbGVuOwogIHVuc2lnbmVkIGNoYXIgKm5hbWU7 CiAgdW5zaWduZWQgbG9uZyBhZHI7CgogIGxlbiA9IHJlYWRfbGViMTI4IChkYXRhLCAmIGJ5dGVz X3JlYWQsIDApOwogIGRhdGEgKz0gYnl0ZXNfcmVhZDsKCiAgaWYgKGxlbiA9PSAwKQogICAgewog ICAgICB3YXJuICgoImJhZGx5IGZvcm1lZCBleHRlbmRlZCBsaW5lIG9wIGVuY291bnRlcmVkIVxu IikpOwogICAgICByZXR1cm4gYnl0ZXNfcmVhZDsKICAgIH0KCiAgbGVuICs9IGJ5dGVzX3JlYWQ7 CiAgb3BfY29kZSA9ICpkYXRhKys7CgogIHByaW50ZiAoKCIgIEV4dGVuZGVkIG9wY29kZSAlZDog IiksIG9wX2NvZGUpOwoKICBzd2l0Y2ggKG9wX2NvZGUpCiAgICB7CiAgICBjYXNlIERXX0xORV9l bmRfc2VxdWVuY2U6CiAgICAgIHByaW50ZiAoKCJFbmQgb2YgU2VxdWVuY2VcblxuIikpOwogICAg ICByZXNldF9zdGF0ZV9tYWNoaW5lIChpc19zdG10KTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBE V19MTkVfc2V0X2FkZHJlc3M6CiAgICAgIGFkciA9IGJ5dGVfZ2V0IChkYXRhLCBwb2ludGVyX3Np emUpOwogICAgICBwcmludGYgKCgic2V0IEFkZHJlc3MgdG8gMHglbHhcbiIpLCBhZHIpOwogICAg ICBzdGF0ZV9tYWNoaW5lX3JlZ3MuYWRkcmVzcyA9IGFkcjsKICAgICAgYnJlYWs7CgogICAgY2Fz ZSBEV19MTkVfZGVmaW5lX2ZpbGU6CiAgICAgIHByaW50ZiAoKCIgIGRlZmluZSBuZXcgRmlsZSBU YWJsZSBlbnRyeVxuIikpOwogICAgICBwcmludGYgKCgiICBFbnRyeVx0RGlyXHRUaW1lXHRTaXpl XHROYW1lXG4iKSk7CgogICAgICBwcmludGYgKCgiICAgJWRcdCIpLCArK3N0YXRlX21hY2hpbmVf cmVncy5sYXN0X2ZpbGVfZW50cnkpOwogICAgICBuYW1lID0gZGF0YTsKICAgICAgZGF0YSArPSBz dHJsZW4gKChjaGFyICopIGRhdGEpICsgMTsKICAgICAgcHJpbnRmICgoIiVsdVx0IiksIHJlYWRf bGViMTI4IChkYXRhLCAmIGJ5dGVzX3JlYWQsIDApKTsKICAgICAgZGF0YSArPSBieXRlc19yZWFk OwogICAgICBwcmludGYgKCgiJWx1XHQiKSwgcmVhZF9sZWIxMjggKGRhdGEsICYgYnl0ZXNfcmVh ZCwgMCkpOwogICAgICBkYXRhICs9IGJ5dGVzX3JlYWQ7CiAgICAgIHByaW50ZiAoKCIlbHVcdCIp LCByZWFkX2xlYjEyOCAoZGF0YSwgJiBieXRlc19yZWFkLCAwKSk7CiAgICAgIHByaW50ZiAoKCIl c1xuXG4iKSwgbmFtZSk7CiAgICAgIGJyZWFrOwoKICAgIGRlZmF1bHQ6CiAgICAgIHByaW50ZiAo KCJVTktOT1dOOiBsZW5ndGggJWRcbiIpLCBsZW4gLSBieXRlc19yZWFkKTsKICAgICAgYnJlYWs7 CiAgICB9CgogIHJldHVybiBsZW47Cn0KCgoKCnN0YXRpYyBpbnQgZGVidWdfbGluZV9wb2ludGVy X3NpemUgPSA0OwoKc3RhdGljIGludApkaXNwbGF5X2RlYnVnX2xpbmVzIChzZWN0aW9uLCBzdGFy dCwgZmlsZSkKICAgICBFbGZfSW50ZXJuYWxfU2hkciAqc2VjdGlvbjsKICAgICB1bnNpZ25lZCBj aGFyICogc3RhcnQ7CiAgICAgRklMRSAqZmlsZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykp Owp7CiAgRFdBUkYyX0V4dGVybmFsX0xpbmVJbmZvICpleHRlcm5hbDsKICBEV0FSRjJfSW50ZXJu YWxfTGluZUluZm8gaW5mbzsKICB1bnNpZ25lZCBjaGFyICpzdGFuZGFyZF9vcGNvZGVzOwogIHVu c2lnbmVkIGNoYXIgKmRhdGEgPSBzdGFydDsKICB1bnNpZ25lZCBjaGFyICplbmQgPSBzdGFydCAr IHNlY3Rpb24tPnNoX3NpemU7CiAgdW5zaWduZWQgY2hhciAqZW5kX29mX3NlcXVlbmNlOwogIGlu dCBpOwoKICBwcmludGYgKCgiXG5EdW1wIG9mIGRlYnVnIGNvbnRlbnRzIG9mIHNlY3Rpb24gJXM6 XG5cbiIpLAogICAgICAgICAgKChzZWN0aW9uKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDog KChzZWN0aW9uKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIg OiBzdHJpbmdfdGFibGUgKyAoc2VjdGlvbiktPnNoX25hbWUpKSk7CgogIHdoaWxlIChkYXRhIDwg ZW5kKQogICAgewogICAgICBleHRlcm5hbCA9IChEV0FSRjJfRXh0ZXJuYWxfTGluZUluZm8gKikg ZGF0YTsKCgogICAgICBpbmZvLmxpX2xlbmd0aCA9IGJ5dGVfZ2V0IChleHRlcm5hbC0+bGlfbGVu Z3RoLCBzaXplb2YgKGV4dGVybmFsLT5saV9sZW5ndGgpKTsKCiAgICAgIGlmIChpbmZvLmxpX2xl bmd0aCA9PSAweGZmZmZmZmZmKQogICAgICAgIHsKICAgICAgICAgIHdhcm4gKCgiNjQtYml0IERX QVJGIGxpbmUgaW5mbyBpcyBub3Qgc3VwcG9ydGVkIHlldC5cbiIpKTsKICAgICAgICAgIGJyZWFr OwogICAgICAgIH0KCiAgICAgIGlmIChpbmZvLmxpX2xlbmd0aCArIHNpemVvZiAoZXh0ZXJuYWwt PmxpX2xlbmd0aCkgPiBzZWN0aW9uLT5zaF9zaXplKQogICAgICAgIHsKICAgICAgICAgIHdhcm4K ICAgICAgICAgICAgKCgiVGhlIGxpbmUgaW5mbyBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQgLSB0aGUg c2VjdGlvbiBpcyB0b28gc21hbGxcbiIpKTsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0K CgogICAgICBpbmZvLmxpX3ZlcnNpb24gPSBieXRlX2dldCAoZXh0ZXJuYWwtPmxpX3ZlcnNpb24s IHNpemVvZiAoZXh0ZXJuYWwtPmxpX3ZlcnNpb24pKTsKICAgICAgaWYgKGluZm8ubGlfdmVyc2lv biAhPSAyKQogICAgICAgIHsKICAgICAgICAgIHdhcm4gKCgiT25seSBEV0FSRiB2ZXJzaW9uIDIg bGluZSBpbmZvIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4iKSk7CiAgICAgICAgICByZXR1cm4g MDsKICAgICAgICB9CgogICAgICBpbmZvLmxpX3Byb2xvZ3VlX2xlbmd0aCA9IGJ5dGVfZ2V0IChl eHRlcm5hbC0+bGlfcHJvbG9ndWVfbGVuZ3RoLCBzaXplb2YgKGV4dGVybmFsLT5saV9wcm9sb2d1 ZV9sZW5ndGgpKTsKICAgICAgaW5mby5saV9taW5faW5zbl9sZW5ndGggPSBieXRlX2dldCAoZXh0 ZXJuYWwtPmxpX21pbl9pbnNuX2xlbmd0aCwgc2l6ZW9mIChleHRlcm5hbC0+bGlfbWluX2luc25f bGVuZ3RoKSk7CiAgICAgIGluZm8ubGlfZGVmYXVsdF9pc19zdG10ID0gYnl0ZV9nZXQgKGV4dGVy bmFsLT5saV9kZWZhdWx0X2lzX3N0bXQsIHNpemVvZiAoZXh0ZXJuYWwtPmxpX2RlZmF1bHRfaXNf c3RtdCkpOwogICAgICBpbmZvLmxpX2xpbmVfYmFzZSA9IGJ5dGVfZ2V0IChleHRlcm5hbC0+bGlf bGluZV9iYXNlLCBzaXplb2YgKGV4dGVybmFsLT5saV9saW5lX2Jhc2UpKTsKICAgICAgaW5mby5s aV9saW5lX3JhbmdlID0gYnl0ZV9nZXQgKGV4dGVybmFsLT5saV9saW5lX3JhbmdlLCBzaXplb2Yg KGV4dGVybmFsLT5saV9saW5lX3JhbmdlKSk7CiAgICAgIGluZm8ubGlfb3Bjb2RlX2Jhc2UgPSBi eXRlX2dldCAoZXh0ZXJuYWwtPmxpX29wY29kZV9iYXNlLCBzaXplb2YgKGV4dGVybmFsLT5saV9v cGNvZGVfYmFzZSkpOwoKCiAgICAgIGluZm8ubGlfbGluZV9iYXNlIDw8PSAyNDsKICAgICAgaW5m by5saV9saW5lX2Jhc2UgPj49IDI0OwoKICAgICAgcHJpbnRmICgoIiAgTGVuZ3RoOiAgICAgICAg ICAgICAgICAgICAgICAlbGRcbiIpLCBpbmZvLmxpX2xlbmd0aCk7CiAgICAgIHByaW50ZiAoKCIg IERXQVJGIFZlcnNpb246ICAgICAgICAgICAgICAgJWRcbiIpLCBpbmZvLmxpX3ZlcnNpb24pOwog ICAgICBwcmludGYgKCgiICBQcm9sb2d1ZSBMZW5ndGg6ICAgICAgICAgICAgICVkXG4iKSwgaW5m by5saV9wcm9sb2d1ZV9sZW5ndGgpOwogICAgICBwcmludGYgKCgiICBNaW5pbXVtIEluc3RydWN0 aW9uIExlbmd0aDogICVkXG4iKSwgaW5mby5saV9taW5faW5zbl9sZW5ndGgpOwogICAgICBwcmlu dGYgKCgiICBJbml0aWFsIHZhbHVlIG9mICdpc19zdG10JzogICVkXG4iKSwgaW5mby5saV9kZWZh dWx0X2lzX3N0bXQpOwogICAgICBwcmludGYgKCgiICBMaW5lIEJhc2U6ICAgICAgICAgICAgICAg ICAgICVkXG4iKSwgaW5mby5saV9saW5lX2Jhc2UpOwogICAgICBwcmludGYgKCgiICBMaW5lIFJh bmdlOiAgICAgICAgICAgICAgICAgICVkXG4iKSwgaW5mby5saV9saW5lX3JhbmdlKTsKICAgICAg cHJpbnRmICgoIiAgT3Bjb2RlIEJhc2U6ICAgICAgICAgICAgICAgICAlZFxuIiksIGluZm8ubGlf b3Bjb2RlX2Jhc2UpOwoKICAgICAgZW5kX29mX3NlcXVlbmNlID0gZGF0YSArIGluZm8ubGlfbGVu Z3RoICsgc2l6ZW9mIChleHRlcm5hbC0+bGlfbGVuZ3RoKTsKCiAgICAgIHJlc2V0X3N0YXRlX21h Y2hpbmUgKGluZm8ubGlfZGVmYXVsdF9pc19zdG10KTsKCgogICAgICBzdGFuZGFyZF9vcGNvZGVz ID0gZGF0YSArIHNpemVvZiAoKmV4dGVybmFsKTsKCiAgICAgIHByaW50ZiAoKCJcbiBPcGNvZGVz OlxuIikpOwoKICAgICAgZm9yIChpID0gMTsgaSA8IGluZm8ubGlfb3Bjb2RlX2Jhc2U7IGkrKykK ICAgICAgICBwcmludGYgKCgiICBPcGNvZGUgJWQgaGFzICVkIGFyZ3NcbiIpLCBpLCBzdGFuZGFy ZF9vcGNvZGVzW2kgLSAxXSk7CgoKICAgICAgZGF0YSA9IHN0YW5kYXJkX29wY29kZXMgKyBpbmZv LmxpX29wY29kZV9iYXNlIC0gMTsKCiAgICAgIGlmICgqZGF0YSA9PSAwKQogICAgICAgIHByaW50 ZiAoKCJcbiBUaGUgRGlyZWN0b3J5IFRhYmxlIGlzIGVtcHR5LlxuIikpOwogICAgICBlbHNlCiAg ICAgICAgewogICAgICAgICAgcHJpbnRmICgoIlxuIFRoZSBEaXJlY3RvcnkgVGFibGU6XG4iKSk7 CgogICAgICAgICAgd2hpbGUgKCpkYXRhICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBwcmludGYgKCgiICAlc1xuIiksIGRhdGEpOwoKICAgICAgICAgICAgICBkYXRhICs9IHN0cmxl biAoKGNoYXIgKikgZGF0YSkgKyAxOwogICAgICAgICAgICB9CiAgICAgICAgfQoKCiAgICAgIGRh dGErKzsKCgogICAgICBpZiAoKmRhdGEgPT0gMCkKICAgICAgICBwcmludGYgKCgiXG4gVGhlIEZp bGUgTmFtZSBUYWJsZSBpcyBlbXB0eS5cbiIpKTsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAg ICAgIHByaW50ZiAoKCJcbiBUaGUgRmlsZSBOYW1lIFRhYmxlOlxuIikpOwogICAgICAgICAgcHJp bnRmICgoIiAgRW50cnlcdERpclx0VGltZVx0U2l6ZVx0TmFtZVxuIikpOwoKICAgICAgICAgIHdo aWxlICgqZGF0YSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdW5zaWduZWQgY2hh ciAqbmFtZTsKICAgICAgICAgICAgICBpbnQgYnl0ZXNfcmVhZDsKCiAgICAgICAgICAgICAgcHJp bnRmICgoIiAgJWRcdCIpLCArK3N0YXRlX21hY2hpbmVfcmVncy5sYXN0X2ZpbGVfZW50cnkpOwog ICAgICAgICAgICAgIG5hbWUgPSBkYXRhOwoKICAgICAgICAgICAgICBkYXRhICs9IHN0cmxlbiAo KGNoYXIgKikgZGF0YSkgKyAxOwoKICAgICAgICAgICAgICBwcmludGYgKCgiJWx1XHQiKSwgcmVh ZF9sZWIxMjggKGRhdGEsICYgYnl0ZXNfcmVhZCwgMCkpOwogICAgICAgICAgICAgIGRhdGEgKz0g Ynl0ZXNfcmVhZDsKICAgICAgICAgICAgICBwcmludGYgKCgiJWx1XHQiKSwgcmVhZF9sZWIxMjgg KGRhdGEsICYgYnl0ZXNfcmVhZCwgMCkpOwogICAgICAgICAgICAgIGRhdGEgKz0gYnl0ZXNfcmVh ZDsKICAgICAgICAgICAgICBwcmludGYgKCgiJWx1XHQiKSwgcmVhZF9sZWIxMjggKGRhdGEsICYg Ynl0ZXNfcmVhZCwgMCkpOwogICAgICAgICAgICAgIGRhdGEgKz0gYnl0ZXNfcmVhZDsKICAgICAg ICAgICAgICBwcmludGYgKCgiJXNcbiIpLCBuYW1lKTsKICAgICAgICAgICAgfQogICAgICAgIH0K CgogICAgICBkYXRhKys7CgoKICAgICAgcHJpbnRmICgoIlxuIExpbmUgTnVtYmVyIFN0YXRlbWVu dHM6XG4iKSk7CgoKICAgICAgd2hpbGUgKGRhdGEgPCBlbmRfb2Zfc2VxdWVuY2UpCiAgICAgICAg ewogICAgICAgICAgdW5zaWduZWQgY2hhciBvcF9jb2RlOwogICAgICAgICAgaW50IGFkdjsKICAg ICAgICAgIGludCBieXRlc19yZWFkOwoKICAgICAgICAgIG9wX2NvZGUgPSAqZGF0YSsrOwoKICAg ICAgICAgIGlmIChvcF9jb2RlID49IGluZm8ubGlfb3Bjb2RlX2Jhc2UpCiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBvcF9jb2RlIC09IGluZm8ubGlfb3Bjb2RlX2Jhc2U7CiAgICAgICAgICAg ICAgYWR2ID0gKG9wX2NvZGUgLyBpbmZvLmxpX2xpbmVfcmFuZ2UpICogaW5mby5saV9taW5faW5z bl9sZW5ndGg7CiAgICAgICAgICAgICAgc3RhdGVfbWFjaGluZV9yZWdzLmFkZHJlc3MgKz0gYWR2 OwogICAgICAgICAgICAgIHByaW50ZiAoKCIgIFNwZWNpYWwgb3Bjb2RlICVkOiBhZHZhbmNlIEFk ZHJlc3MgYnkgJWQgdG8gMHglbHgiKSwKICAgICAgICAgICAgICAgICAgICAgIG9wX2NvZGUsIGFk diwgc3RhdGVfbWFjaGluZV9yZWdzLmFkZHJlc3MpOwogICAgICAgICAgICAgIGFkdiA9IChvcF9j b2RlICUgaW5mby5saV9saW5lX3JhbmdlKSArIGluZm8ubGlfbGluZV9iYXNlOwogICAgICAgICAg ICAgIHN0YXRlX21hY2hpbmVfcmVncy5saW5lICs9IGFkdjsKICAgICAgICAgICAgICBwcmludGYg KCgiIGFuZCBMaW5lIGJ5ICVkIHRvICVkXG4iKSwKICAgICAgICAgICAgICAgICAgICAgIGFkdiwg c3RhdGVfbWFjaGluZV9yZWdzLmxpbmUpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHN3 aXRjaCAob3BfY29kZSkKICAgICAgICAgICAgewogICAgICAgICAgICBjYXNlIERXX0xOU19leHRl bmRlZF9vcDoKICAgICAgICAgICAgICBkYXRhICs9IHByb2Nlc3NfZXh0ZW5kZWRfbGluZV9vcCAo ZGF0YSwgaW5mby5saV9kZWZhdWx0X2lzX3N0bXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2xpbmVfcG9pbnRlcl9zaXplKTsKICAgICAgICAg ICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgRFdfTE5TX2NvcHk6CiAgICAgICAgICAgICAg cHJpbnRmICgoIiAgQ29weVxuIikpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAg Y2FzZSBEV19MTlNfYWR2YW5jZV9wYzoKICAgICAgICAgICAgICBhZHYgPSBpbmZvLmxpX21pbl9p bnNuX2xlbmd0aCAqIHJlYWRfbGViMTI4IChkYXRhLCAmIGJ5dGVzX3JlYWQsIDApOwogICAgICAg ICAgICAgIGRhdGEgKz0gYnl0ZXNfcmVhZDsKICAgICAgICAgICAgICBzdGF0ZV9tYWNoaW5lX3Jl Z3MuYWRkcmVzcyArPSBhZHY7CiAgICAgICAgICAgICAgcHJpbnRmICgoIiAgQWR2YW5jZSBQQyBi eSAlZCB0byAlbHhcbiIpLCBhZHYsCiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9tYWNoaW5l X3JlZ3MuYWRkcmVzcyk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIERX X0xOU19hZHZhbmNlX2xpbmU6CiAgICAgICAgICAgICAgYWR2ID0gcmVhZF9sZWIxMjggKGRhdGEs ICYgYnl0ZXNfcmVhZCwgMSk7CiAgICAgICAgICAgICAgZGF0YSArPSBieXRlc19yZWFkOwogICAg ICAgICAgICAgIHN0YXRlX21hY2hpbmVfcmVncy5saW5lICs9IGFkdjsKICAgICAgICAgICAgICBw cmludGYgKCgiICBBZHZhbmNlIExpbmUgYnkgJWQgdG8gJWRcbiIpLCBhZHYsCiAgICAgICAgICAg ICAgICAgICAgICBzdGF0ZV9tYWNoaW5lX3JlZ3MubGluZSk7CiAgICAgICAgICAgICAgYnJlYWs7 CgogICAgICAgICAgICBjYXNlIERXX0xOU19zZXRfZmlsZToKICAgICAgICAgICAgICBhZHYgPSBy ZWFkX2xlYjEyOCAoZGF0YSwgJiBieXRlc19yZWFkLCAwKTsKICAgICAgICAgICAgICBkYXRhICs9 IGJ5dGVzX3JlYWQ7CiAgICAgICAgICAgICAgcHJpbnRmICgoIiAgU2V0IEZpbGUgTmFtZSB0byBl bnRyeSAlZCBpbiB0aGUgRmlsZSBOYW1lIFRhYmxlXG4iKSwKICAgICAgICAgICAgICAgICAgICAg IGFkdik7CiAgICAgICAgICAgICAgc3RhdGVfbWFjaGluZV9yZWdzLmZpbGUgPSBhZHY7CiAgICAg ICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIERXX0xOU19zZXRfY29sdW1uOgogICAg ICAgICAgICAgIGFkdiA9IHJlYWRfbGViMTI4IChkYXRhLCAmIGJ5dGVzX3JlYWQsIDApOwogICAg ICAgICAgICAgIGRhdGEgKz0gYnl0ZXNfcmVhZDsKICAgICAgICAgICAgICBwcmludGYgKCgiICBT ZXQgY29sdW1uIHRvICVkXG4iKSwgYWR2KTsKICAgICAgICAgICAgICBzdGF0ZV9tYWNoaW5lX3Jl Z3MuY29sdW1uID0gYWR2OwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBE V19MTlNfbmVnYXRlX3N0bXQ6CiAgICAgICAgICAgICAgYWR2ID0gc3RhdGVfbWFjaGluZV9yZWdz LmlzX3N0bXQ7CiAgICAgICAgICAgICAgYWR2ID0gISBhZHY7CiAgICAgICAgICAgICAgcHJpbnRm ICgoIiAgU2V0IGlzX3N0bXQgdG8gJWRcbiIpLCBhZHYpOwogICAgICAgICAgICAgIHN0YXRlX21h Y2hpbmVfcmVncy5pc19zdG10ID0gYWR2OwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAg ICAgY2FzZSBEV19MTlNfc2V0X2Jhc2ljX2Jsb2NrOgogICAgICAgICAgICAgIHByaW50ZiAoKCIg IFNldCBiYXNpYyBibG9ja1xuIikpOwogICAgICAgICAgICAgIHN0YXRlX21hY2hpbmVfcmVncy5i YXNpY19ibG9jayA9IDE7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIERX X0xOU19jb25zdF9hZGRfcGM6CiAgICAgICAgICAgICAgYWR2ID0gKCgoMjU1IC0gaW5mby5saV9v cGNvZGVfYmFzZSkgLyBpbmZvLmxpX2xpbmVfcmFuZ2UpCiAgICAgICAgICAgICAgICAgICAgICog aW5mby5saV9taW5faW5zbl9sZW5ndGgpOwogICAgICAgICAgICAgIHN0YXRlX21hY2hpbmVfcmVn cy5hZGRyZXNzICs9IGFkdjsKICAgICAgICAgICAgICBwcmludGYgKCgiICBBZHZhbmNlIFBDIGJ5 IGNvbnN0YW50ICVkIHRvIDB4JWx4XG4iKSwgYWR2LAogICAgICAgICAgICAgICAgICAgICAgc3Rh dGVfbWFjaGluZV9yZWdzLmFkZHJlc3MpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAg ICAgY2FzZSBEV19MTlNfZml4ZWRfYWR2YW5jZV9wYzoKICAgICAgICAgICAgICBhZHYgPSBieXRl X2dldCAoZGF0YSwgMik7CiAgICAgICAgICAgICAgZGF0YSArPSAyOwogICAgICAgICAgICAgIHN0 YXRlX21hY2hpbmVfcmVncy5hZGRyZXNzICs9IGFkdjsKICAgICAgICAgICAgICBwcmludGYgKCgi ICBBZHZhbmNlIFBDIGJ5IGZpeGVkIHNpemUgYW1vdW50ICVkIHRvIDB4JWx4XG4iKSwKICAgICAg ICAgICAgICAgICAgICAgIGFkdiwgc3RhdGVfbWFjaGluZV9yZWdzLmFkZHJlc3MpOwogICAgICAg ICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBEV19MTlNfc2V0X3Byb2xvZ3VlX2VuZDoK ICAgICAgICAgICAgICBwcmludGYgKCgiICBTZXQgcHJvbG9ndWVfZW5kIHRvIHRydWVcbiIpKTsK ICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgRFdfTE5TX3NldF9lcGlsb2d1 ZV9iZWdpbjoKICAgICAgICAgICAgICBwcmludGYgKCgiICBTZXQgZXBpbG9ndWVfYmVnaW4gdG8g dHJ1ZVxuIikpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBEV19MTlNf c2V0X2lzYToKICAgICAgICAgICAgICBhZHYgPSByZWFkX2xlYjEyOCAoZGF0YSwgJiBieXRlc19y ZWFkLCAwKTsKICAgICAgICAgICAgICBkYXRhICs9IGJ5dGVzX3JlYWQ7CiAgICAgICAgICAgICAg cHJpbnRmICgoIiAgU2V0IElTQSB0byAlZFxuIiksIGFkdik7CiAgICAgICAgICAgICAgYnJlYWs7 CgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHByaW50ZiAoKCIgIFVua25vd24g b3Bjb2RlICVkIHdpdGggb3BlcmFuZHM6ICIpLCBvcF9jb2RlKTsKICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICBpbnQgaTsKICAgICAgICAgICAgICAgIGZvciAoaSA9IHN0YW5kYXJkX29w Y29kZXNbb3BfY29kZSAtIDFdOyBpID4gMCA7IC0taSkKICAgICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAgIHByaW50ZiAoIjB4JWx4JXMiLCByZWFkX2xlYjEyOCAoZGF0YSwgJmJ5 dGVzX3JlYWQsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9PSAxID8gIiIgOiAi LCAiKTsKICAgICAgICAgICAgICAgICAgICBkYXRhICs9IGJ5dGVzX3JlYWQ7CiAgICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICAgIHB1dGNoYXIgKCdcbicpOwogICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcHV0Y2hh ciAoJ1xuJyk7CiAgICB9CgogIHJldHVybiAxOwp9CgpzdGF0aWMgaW50CmRpc3BsYXlfZGVidWdf cHVibmFtZXMgKHNlY3Rpb24sIHN0YXJ0LCBmaWxlKQogICAgIEVsZl9JbnRlcm5hbF9TaGRyICpz ZWN0aW9uOwogICAgIHVuc2lnbmVkIGNoYXIgKnN0YXJ0OwogICAgIEZJTEUgKmZpbGUgX19hdHRy aWJ1dGVfXyAoKF9fdW51c2VkX18pKTsKewogIERXQVJGMl9FeHRlcm5hbF9QdWJOYW1lcyAqZXh0 ZXJuYWw7CiAgRFdBUkYyX0ludGVybmFsX1B1Yk5hbWVzIHB1Ym5hbWVzOwogIHVuc2lnbmVkIGNo YXIgKmVuZDsKCiAgZW5kID0gc3RhcnQgKyBzZWN0aW9uLT5zaF9zaXplOwoKICBwcmludGYgKCgi Q29udGVudHMgb2YgdGhlICVzIHNlY3Rpb246XG5cbiIpLCAoKHNlY3Rpb24pID09ICgodm9pZCAq KTApID8gIjxub25lPiIgOiAoKHNlY3Rpb24pLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5n dGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWN0aW9uKS0+c2hfbmFtZSkpKTsK CiAgd2hpbGUgKHN0YXJ0IDwgZW5kKQogICAgewogICAgICB1bnNpZ25lZCBjaGFyICpkYXRhOwog ICAgICB1bnNpZ25lZCBsb25nIG9mZnNldDsKCiAgICAgIGV4dGVybmFsID0gKERXQVJGMl9FeHRl cm5hbF9QdWJOYW1lcyAqKSBzdGFydDsKCiAgICAgIHB1Ym5hbWVzLnBuX2xlbmd0aCA9IGJ5dGVf Z2V0IChleHRlcm5hbC0+cG5fbGVuZ3RoLCBzaXplb2YgKGV4dGVybmFsLT5wbl9sZW5ndGgpKTsK ICAgICAgcHVibmFtZXMucG5fdmVyc2lvbiA9IGJ5dGVfZ2V0IChleHRlcm5hbC0+cG5fdmVyc2lv biwgc2l6ZW9mIChleHRlcm5hbC0+cG5fdmVyc2lvbikpOwogICAgICBwdWJuYW1lcy5wbl9vZmZz ZXQgPSBieXRlX2dldCAoZXh0ZXJuYWwtPnBuX29mZnNldCwgc2l6ZW9mIChleHRlcm5hbC0+cG5f b2Zmc2V0KSk7CiAgICAgIHB1Ym5hbWVzLnBuX3NpemUgPSBieXRlX2dldCAoZXh0ZXJuYWwtPnBu X3NpemUsIHNpemVvZiAoZXh0ZXJuYWwtPnBuX3NpemUpKTsKCiAgICAgIGRhdGEgPSBzdGFydCAr IHNpemVvZiAoKmV4dGVybmFsKTsKICAgICAgc3RhcnQgKz0gcHVibmFtZXMucG5fbGVuZ3RoICsg c2l6ZW9mIChleHRlcm5hbC0+cG5fbGVuZ3RoKTsKCiAgICAgIGlmIChwdWJuYW1lcy5wbl9sZW5n dGggPT0gMHhmZmZmZmZmZikKICAgICAgICB7CiAgICAgICAgICB3YXJuICgoIjY0LWJpdCBEV0FS RiBwdWJuYW1lcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuXG4iKSk7CiAgICAgICAgICBicmVhazsK ICAgICAgICB9CgogICAgICBpZiAocHVibmFtZXMucG5fdmVyc2lvbiAhPSAyKQogICAgICAgIHsK ICAgICAgICAgIHN0YXRpYyBpbnQgd2FybmVkID0gMDsKCiAgICAgICAgICBpZiAoISB3YXJuZWQp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB3YXJuICgoIk9ubHkgRFdBUkYgMiBwdWJuYW1l cyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZFxuIikpOwogICAgICAgICAgICAgIHdhcm5lZCA9IDE7 CiAgICAgICAgICAgIH0KCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICBwcmlu dGYgKCgiICBMZW5ndGg6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJWxkXG4iKSwKICAg ICAgICAgICAgICBwdWJuYW1lcy5wbl9sZW5ndGgpOwogICAgICBwcmludGYgKCgiICBWZXJzaW9u OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJWRcbiIpLAogICAgICAgICAgICAgIHB1Ym5h bWVzLnBuX3ZlcnNpb24pOwogICAgICBwcmludGYgKCgiICBPZmZzZXQgaW50byAuZGVidWdfaW5m byBzZWN0aW9uOiAgICAgJWxkXG4iKSwKICAgICAgICAgICAgICBwdWJuYW1lcy5wbl9vZmZzZXQp OwogICAgICBwcmludGYgKCgiICBTaXplIG9mIGFyZWEgaW4gLmRlYnVnX2luZm8gc2VjdGlvbjog JWxkXG4iKSwKICAgICAgICAgICAgICBwdWJuYW1lcy5wbl9zaXplKTsKCiAgICAgIHByaW50ZiAo KCJcbiAgICBPZmZzZXRcdE5hbWVcbiIpKTsKCiAgICAgIGRvCiAgICAgICAgewogICAgICAgICAg b2Zmc2V0ID0gYnl0ZV9nZXQgKGRhdGEsIDQpOwoKICAgICAgICAgIGlmIChvZmZzZXQgIT0gMCkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIGRhdGEgKz0gNDsKICAgICAgICAgICAgICBwcmlu dGYgKCIgICAgJWxkXHRcdCVzXG4iLCBvZmZzZXQsIGRhdGEpOwogICAgICAgICAgICAgIGRhdGEg Kz0gc3RybGVuICgoY2hhciAqKSBkYXRhKSArIDE7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIHdoaWxlIChvZmZzZXQgIT0gMCk7CiAgICB9CgogIHByaW50ZiAoIlxuIik7CiAgcmV0dXJu IDE7Cn0KCnN0YXRpYyBjaGFyICoKZ2V0X1RBR19uYW1lICh0YWcpCiAgICAgdW5zaWduZWQgbG9u ZyB0YWc7CnsKICBzd2l0Y2ggKHRhZykKICAgIHsKICAgIGNhc2UgRFdfVEFHX3BhZGRpbmc6IHJl dHVybiAiRFdfVEFHX3BhZGRpbmciOwogICAgY2FzZSBEV19UQUdfYXJyYXlfdHlwZTogcmV0dXJu ICJEV19UQUdfYXJyYXlfdHlwZSI7CiAgICBjYXNlIERXX1RBR19jbGFzc190eXBlOiByZXR1cm4g IkRXX1RBR19jbGFzc190eXBlIjsKICAgIGNhc2UgRFdfVEFHX2VudHJ5X3BvaW50OiByZXR1cm4g IkRXX1RBR19lbnRyeV9wb2ludCI7CiAgICBjYXNlIERXX1RBR19lbnVtZXJhdGlvbl90eXBlOiBy ZXR1cm4gIkRXX1RBR19lbnVtZXJhdGlvbl90eXBlIjsKICAgIGNhc2UgRFdfVEFHX2Zvcm1hbF9w YXJhbWV0ZXI6IHJldHVybiAiRFdfVEFHX2Zvcm1hbF9wYXJhbWV0ZXIiOwogICAgY2FzZSBEV19U QUdfaW1wb3J0ZWRfZGVjbGFyYXRpb246IHJldHVybiAiRFdfVEFHX2ltcG9ydGVkX2RlY2xhcmF0 aW9uIjsKICAgIGNhc2UgRFdfVEFHX2xhYmVsOiByZXR1cm4gIkRXX1RBR19sYWJlbCI7CiAgICBj YXNlIERXX1RBR19sZXhpY2FsX2Jsb2NrOiByZXR1cm4gIkRXX1RBR19sZXhpY2FsX2Jsb2NrIjsK ICAgIGNhc2UgRFdfVEFHX21lbWJlcjogcmV0dXJuICJEV19UQUdfbWVtYmVyIjsKICAgIGNhc2Ug RFdfVEFHX3BvaW50ZXJfdHlwZTogcmV0dXJuICJEV19UQUdfcG9pbnRlcl90eXBlIjsKICAgIGNh c2UgRFdfVEFHX3JlZmVyZW5jZV90eXBlOiByZXR1cm4gIkRXX1RBR19yZWZlcmVuY2VfdHlwZSI7 CiAgICBjYXNlIERXX1RBR19jb21waWxlX3VuaXQ6IHJldHVybiAiRFdfVEFHX2NvbXBpbGVfdW5p dCI7CiAgICBjYXNlIERXX1RBR19zdHJpbmdfdHlwZTogcmV0dXJuICJEV19UQUdfc3RyaW5nX3R5 cGUiOwogICAgY2FzZSBEV19UQUdfc3RydWN0dXJlX3R5cGU6IHJldHVybiAiRFdfVEFHX3N0cnVj dHVyZV90eXBlIjsKICAgIGNhc2UgRFdfVEFHX3N1YnJvdXRpbmVfdHlwZTogcmV0dXJuICJEV19U QUdfc3Vicm91dGluZV90eXBlIjsKICAgIGNhc2UgRFdfVEFHX3R5cGVkZWY6IHJldHVybiAiRFdf VEFHX3R5cGVkZWYiOwogICAgY2FzZSBEV19UQUdfdW5pb25fdHlwZTogcmV0dXJuICJEV19UQUdf dW5pb25fdHlwZSI7CiAgICBjYXNlIERXX1RBR191bnNwZWNpZmllZF9wYXJhbWV0ZXJzOiByZXR1 cm4gIkRXX1RBR191bnNwZWNpZmllZF9wYXJhbWV0ZXJzIjsKICAgIGNhc2UgRFdfVEFHX3Zhcmlh bnQ6IHJldHVybiAiRFdfVEFHX3ZhcmlhbnQiOwogICAgY2FzZSBEV19UQUdfY29tbW9uX2Jsb2Nr OiByZXR1cm4gIkRXX1RBR19jb21tb25fYmxvY2siOwogICAgY2FzZSBEV19UQUdfY29tbW9uX2lu Y2x1c2lvbjogcmV0dXJuICJEV19UQUdfY29tbW9uX2luY2x1c2lvbiI7CiAgICBjYXNlIERXX1RB R19pbmhlcml0YW5jZTogcmV0dXJuICJEV19UQUdfaW5oZXJpdGFuY2UiOwogICAgY2FzZSBEV19U QUdfaW5saW5lZF9zdWJyb3V0aW5lOiByZXR1cm4gIkRXX1RBR19pbmxpbmVkX3N1YnJvdXRpbmUi OwogICAgY2FzZSBEV19UQUdfbW9kdWxlOiByZXR1cm4gIkRXX1RBR19tb2R1bGUiOwogICAgY2Fz ZSBEV19UQUdfcHRyX3RvX21lbWJlcl90eXBlOiByZXR1cm4gIkRXX1RBR19wdHJfdG9fbWVtYmVy X3R5cGUiOwogICAgY2FzZSBEV19UQUdfc2V0X3R5cGU6IHJldHVybiAiRFdfVEFHX3NldF90eXBl IjsKICAgIGNhc2UgRFdfVEFHX3N1YnJhbmdlX3R5cGU6IHJldHVybiAiRFdfVEFHX3N1YnJhbmdl X3R5cGUiOwogICAgY2FzZSBEV19UQUdfd2l0aF9zdG10OiByZXR1cm4gIkRXX1RBR193aXRoX3N0 bXQiOwogICAgY2FzZSBEV19UQUdfYWNjZXNzX2RlY2xhcmF0aW9uOiByZXR1cm4gIkRXX1RBR19h Y2Nlc3NfZGVjbGFyYXRpb24iOwogICAgY2FzZSBEV19UQUdfYmFzZV90eXBlOiByZXR1cm4gIkRX X1RBR19iYXNlX3R5cGUiOwogICAgY2FzZSBEV19UQUdfY2F0Y2hfYmxvY2s6IHJldHVybiAiRFdf VEFHX2NhdGNoX2Jsb2NrIjsKICAgIGNhc2UgRFdfVEFHX2NvbnN0X3R5cGU6IHJldHVybiAiRFdf VEFHX2NvbnN0X3R5cGUiOwogICAgY2FzZSBEV19UQUdfY29uc3RhbnQ6IHJldHVybiAiRFdfVEFH X2NvbnN0YW50IjsKICAgIGNhc2UgRFdfVEFHX2VudW1lcmF0b3I6IHJldHVybiAiRFdfVEFHX2Vu dW1lcmF0b3IiOwogICAgY2FzZSBEV19UQUdfZmlsZV90eXBlOiByZXR1cm4gIkRXX1RBR19maWxl X3R5cGUiOwogICAgY2FzZSBEV19UQUdfZnJpZW5kOiByZXR1cm4gIkRXX1RBR19mcmllbmQiOwog ICAgY2FzZSBEV19UQUdfbmFtZWxpc3Q6IHJldHVybiAiRFdfVEFHX25hbWVsaXN0IjsKICAgIGNh c2UgRFdfVEFHX25hbWVsaXN0X2l0ZW06IHJldHVybiAiRFdfVEFHX25hbWVsaXN0X2l0ZW0iOwog ICAgY2FzZSBEV19UQUdfcGFja2VkX3R5cGU6IHJldHVybiAiRFdfVEFHX3BhY2tlZF90eXBlIjsK ICAgIGNhc2UgRFdfVEFHX3N1YnByb2dyYW06IHJldHVybiAiRFdfVEFHX3N1YnByb2dyYW0iOwog ICAgY2FzZSBEV19UQUdfdGVtcGxhdGVfdHlwZV9wYXJhbTogcmV0dXJuICJEV19UQUdfdGVtcGxh dGVfdHlwZV9wYXJhbSI7CiAgICBjYXNlIERXX1RBR190ZW1wbGF0ZV92YWx1ZV9wYXJhbTogcmV0 dXJuICJEV19UQUdfdGVtcGxhdGVfdmFsdWVfcGFyYW0iOwogICAgY2FzZSBEV19UQUdfdGhyb3du X3R5cGU6IHJldHVybiAiRFdfVEFHX3Rocm93bl90eXBlIjsKICAgIGNhc2UgRFdfVEFHX3RyeV9i bG9jazogcmV0dXJuICJEV19UQUdfdHJ5X2Jsb2NrIjsKICAgIGNhc2UgRFdfVEFHX3ZhcmlhbnRf cGFydDogcmV0dXJuICJEV19UQUdfdmFyaWFudF9wYXJ0IjsKICAgIGNhc2UgRFdfVEFHX3Zhcmlh YmxlOiByZXR1cm4gIkRXX1RBR192YXJpYWJsZSI7CiAgICBjYXNlIERXX1RBR192b2xhdGlsZV90 eXBlOiByZXR1cm4gIkRXX1RBR192b2xhdGlsZV90eXBlIjsKICAgIGNhc2UgRFdfVEFHX01JUFNf bG9vcDogcmV0dXJuICJEV19UQUdfTUlQU19sb29wIjsKICAgIGNhc2UgRFdfVEFHX2Zvcm1hdF9s YWJlbDogcmV0dXJuICJEV19UQUdfZm9ybWF0X2xhYmVsIjsKICAgIGNhc2UgRFdfVEFHX2Z1bmN0 aW9uX3RlbXBsYXRlOiByZXR1cm4gIkRXX1RBR19mdW5jdGlvbl90ZW1wbGF0ZSI7CiAgICBjYXNl IERXX1RBR19jbGFzc190ZW1wbGF0ZTogcmV0dXJuICJEV19UQUdfY2xhc3NfdGVtcGxhdGUiOwoK ICAgIGNhc2UgRFdfVEFHX2R3YXJmX3Byb2NlZHVyZTogcmV0dXJuICJEV19UQUdfZHdhcmZfcHJv Y2VkdXJlIjsKICAgIGNhc2UgRFdfVEFHX3Jlc3RyaWN0X3R5cGU6IHJldHVybiAiRFdfVEFHX3Jl c3RyaWN0X3R5cGUiOwogICAgY2FzZSBEV19UQUdfaW50ZXJmYWNlX3R5cGU6IHJldHVybiAiRFdf VEFHX2ludGVyZmFjZV90eXBlIjsKICAgIGNhc2UgRFdfVEFHX25hbWVzcGFjZTogcmV0dXJuICJE V19UQUdfbmFtZXNwYWNlIjsKICAgIGNhc2UgRFdfVEFHX2ltcG9ydGVkX21vZHVsZTogcmV0dXJu ICJEV19UQUdfaW1wb3J0ZWRfbW9kdWxlIjsKICAgIGNhc2UgRFdfVEFHX3Vuc3BlY2lmaWVkX3R5 cGU6IHJldHVybiAiRFdfVEFHX3Vuc3BlY2lmaWVkX3R5cGUiOwogICAgY2FzZSBEV19UQUdfcGFy dGlhbF91bml0OiByZXR1cm4gIkRXX1RBR19wYXJ0aWFsX3VuaXQiOwogICAgY2FzZSBEV19UQUdf aW1wb3J0ZWRfdW5pdDogcmV0dXJuICJEV19UQUdfaW1wb3J0ZWRfdW5pdCI7CgogICAgY2FzZSBE V19UQUdfdXBjX3NoYXJlZF90eXBlOiByZXR1cm4gIkRXX1RBR191cGNfc2hhcmVkX3R5cGUiOwog ICAgY2FzZSBEV19UQUdfdXBjX3N0cmljdF90eXBlOiByZXR1cm4gIkRXX1RBR191cGNfc3RyaWN0 X3R5cGUiOwogICAgY2FzZSBEV19UQUdfdXBjX3JlbGF4ZWRfdHlwZTogcmV0dXJuICJEV19UQUdf dXBjX3JlbGF4ZWRfdHlwZSI7CiAgICBkZWZhdWx0OgogICAgICB7CiAgICAgICAgc3RhdGljIGNo YXIgYnVmZmVyWzEwMF07CgogICAgICAgIHNwcmludGYgKGJ1ZmZlciwgKCJVbmtub3duIFRBRyB2 YWx1ZTogJWx4IiksIHRhZyk7CiAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKICAgICAgfQogICAgfQp9 CgpzdGF0aWMgY2hhciAqCmdldF9BVF9uYW1lIChhdHRyaWJ1dGUpCiAgICAgdW5zaWduZWQgbG9u ZyBhdHRyaWJ1dGU7CnsKICBzd2l0Y2ggKGF0dHJpYnV0ZSkKICAgIHsKICAgIGNhc2UgRFdfQVRf c2libGluZzogcmV0dXJuICJEV19BVF9zaWJsaW5nIjsKICAgIGNhc2UgRFdfQVRfbG9jYXRpb246 IHJldHVybiAiRFdfQVRfbG9jYXRpb24iOwogICAgY2FzZSBEV19BVF9uYW1lOiByZXR1cm4gIkRX X0FUX25hbWUiOwogICAgY2FzZSBEV19BVF9vcmRlcmluZzogcmV0dXJuICJEV19BVF9vcmRlcmlu ZyI7CiAgICBjYXNlIERXX0FUX3N1YnNjcl9kYXRhOiByZXR1cm4gIkRXX0FUX3N1YnNjcl9kYXRh IjsKICAgIGNhc2UgRFdfQVRfYnl0ZV9zaXplOiByZXR1cm4gIkRXX0FUX2J5dGVfc2l6ZSI7CiAg ICBjYXNlIERXX0FUX2JpdF9vZmZzZXQ6IHJldHVybiAiRFdfQVRfYml0X29mZnNldCI7CiAgICBj YXNlIERXX0FUX2JpdF9zaXplOiByZXR1cm4gIkRXX0FUX2JpdF9zaXplIjsKICAgIGNhc2UgRFdf QVRfZWxlbWVudF9saXN0OiByZXR1cm4gIkRXX0FUX2VsZW1lbnRfbGlzdCI7CiAgICBjYXNlIERX X0FUX3N0bXRfbGlzdDogcmV0dXJuICJEV19BVF9zdG10X2xpc3QiOwogICAgY2FzZSBEV19BVF9s b3dfcGM6IHJldHVybiAiRFdfQVRfbG93X3BjIjsKICAgIGNhc2UgRFdfQVRfaGlnaF9wYzogcmV0 dXJuICJEV19BVF9oaWdoX3BjIjsKICAgIGNhc2UgRFdfQVRfbGFuZ3VhZ2U6IHJldHVybiAiRFdf QVRfbGFuZ3VhZ2UiOwogICAgY2FzZSBEV19BVF9tZW1iZXI6IHJldHVybiAiRFdfQVRfbWVtYmVy IjsKICAgIGNhc2UgRFdfQVRfZGlzY3I6IHJldHVybiAiRFdfQVRfZGlzY3IiOwogICAgY2FzZSBE V19BVF9kaXNjcl92YWx1ZTogcmV0dXJuICJEV19BVF9kaXNjcl92YWx1ZSI7CiAgICBjYXNlIERX X0FUX3Zpc2liaWxpdHk6IHJldHVybiAiRFdfQVRfdmlzaWJpbGl0eSI7CiAgICBjYXNlIERXX0FU X2ltcG9ydDogcmV0dXJuICJEV19BVF9pbXBvcnQiOwogICAgY2FzZSBEV19BVF9zdHJpbmdfbGVu Z3RoOiByZXR1cm4gIkRXX0FUX3N0cmluZ19sZW5ndGgiOwogICAgY2FzZSBEV19BVF9jb21tb25f cmVmZXJlbmNlOiByZXR1cm4gIkRXX0FUX2NvbW1vbl9yZWZlcmVuY2UiOwogICAgY2FzZSBEV19B VF9jb21wX2RpcjogcmV0dXJuICJEV19BVF9jb21wX2RpciI7CiAgICBjYXNlIERXX0FUX2NvbnN0 X3ZhbHVlOiByZXR1cm4gIkRXX0FUX2NvbnN0X3ZhbHVlIjsKICAgIGNhc2UgRFdfQVRfY29udGFp bmluZ190eXBlOiByZXR1cm4gIkRXX0FUX2NvbnRhaW5pbmdfdHlwZSI7CiAgICBjYXNlIERXX0FU X2RlZmF1bHRfdmFsdWU6IHJldHVybiAiRFdfQVRfZGVmYXVsdF92YWx1ZSI7CiAgICBjYXNlIERX X0FUX2lubGluZTogcmV0dXJuICJEV19BVF9pbmxpbmUiOwogICAgY2FzZSBEV19BVF9pc19vcHRp b25hbDogcmV0dXJuICJEV19BVF9pc19vcHRpb25hbCI7CiAgICBjYXNlIERXX0FUX2xvd2VyX2Jv dW5kOiByZXR1cm4gIkRXX0FUX2xvd2VyX2JvdW5kIjsKICAgIGNhc2UgRFdfQVRfcHJvZHVjZXI6 IHJldHVybiAiRFdfQVRfcHJvZHVjZXIiOwogICAgY2FzZSBEV19BVF9wcm90b3R5cGVkOiByZXR1 cm4gIkRXX0FUX3Byb3RvdHlwZWQiOwogICAgY2FzZSBEV19BVF9yZXR1cm5fYWRkcjogcmV0dXJu ICJEV19BVF9yZXR1cm5fYWRkciI7CiAgICBjYXNlIERXX0FUX3N0YXJ0X3Njb3BlOiByZXR1cm4g IkRXX0FUX3N0YXJ0X3Njb3BlIjsKICAgIGNhc2UgRFdfQVRfc3RyaWRlX3NpemU6IHJldHVybiAi RFdfQVRfc3RyaWRlX3NpemUiOwogICAgY2FzZSBEV19BVF91cHBlcl9ib3VuZDogcmV0dXJuICJE V19BVF91cHBlcl9ib3VuZCI7CiAgICBjYXNlIERXX0FUX2Fic3RyYWN0X29yaWdpbjogcmV0dXJu ICJEV19BVF9hYnN0cmFjdF9vcmlnaW4iOwogICAgY2FzZSBEV19BVF9hY2Nlc3NpYmlsaXR5OiBy ZXR1cm4gIkRXX0FUX2FjY2Vzc2liaWxpdHkiOwogICAgY2FzZSBEV19BVF9hZGRyZXNzX2NsYXNz OiByZXR1cm4gIkRXX0FUX2FkZHJlc3NfY2xhc3MiOwogICAgY2FzZSBEV19BVF9hcnRpZmljaWFs OiByZXR1cm4gIkRXX0FUX2FydGlmaWNpYWwiOwogICAgY2FzZSBEV19BVF9iYXNlX3R5cGVzOiBy ZXR1cm4gIkRXX0FUX2Jhc2VfdHlwZXMiOwogICAgY2FzZSBEV19BVF9jYWxsaW5nX2NvbnZlbnRp b246IHJldHVybiAiRFdfQVRfY2FsbGluZ19jb252ZW50aW9uIjsKICAgIGNhc2UgRFdfQVRfY291 bnQ6IHJldHVybiAiRFdfQVRfY291bnQiOwogICAgY2FzZSBEV19BVF9kYXRhX21lbWJlcl9sb2Nh dGlvbjogcmV0dXJuICJEV19BVF9kYXRhX21lbWJlcl9sb2NhdGlvbiI7CiAgICBjYXNlIERXX0FU X2RlY2xfY29sdW1uOiByZXR1cm4gIkRXX0FUX2RlY2xfY29sdW1uIjsKICAgIGNhc2UgRFdfQVRf ZGVjbF9maWxlOiByZXR1cm4gIkRXX0FUX2RlY2xfZmlsZSI7CiAgICBjYXNlIERXX0FUX2RlY2xf bGluZTogcmV0dXJuICJEV19BVF9kZWNsX2xpbmUiOwogICAgY2FzZSBEV19BVF9kZWNsYXJhdGlv bjogcmV0dXJuICJEV19BVF9kZWNsYXJhdGlvbiI7CiAgICBjYXNlIERXX0FUX2Rpc2NyX2xpc3Q6 IHJldHVybiAiRFdfQVRfZGlzY3JfbGlzdCI7CiAgICBjYXNlIERXX0FUX2VuY29kaW5nOiByZXR1 cm4gIkRXX0FUX2VuY29kaW5nIjsKICAgIGNhc2UgRFdfQVRfZXh0ZXJuYWw6IHJldHVybiAiRFdf QVRfZXh0ZXJuYWwiOwogICAgY2FzZSBEV19BVF9mcmFtZV9iYXNlOiByZXR1cm4gIkRXX0FUX2Zy YW1lX2Jhc2UiOwogICAgY2FzZSBEV19BVF9mcmllbmQ6IHJldHVybiAiRFdfQVRfZnJpZW5kIjsK ICAgIGNhc2UgRFdfQVRfaWRlbnRpZmllcl9jYXNlOiByZXR1cm4gIkRXX0FUX2lkZW50aWZpZXJf Y2FzZSI7CiAgICBjYXNlIERXX0FUX21hY3JvX2luZm86IHJldHVybiAiRFdfQVRfbWFjcm9faW5m byI7CiAgICBjYXNlIERXX0FUX25hbWVsaXN0X2l0ZW1zOiByZXR1cm4gIkRXX0FUX25hbWVsaXN0 X2l0ZW1zIjsKICAgIGNhc2UgRFdfQVRfcHJpb3JpdHk6IHJldHVybiAiRFdfQVRfcHJpb3JpdHki OwogICAgY2FzZSBEV19BVF9zZWdtZW50OiByZXR1cm4gIkRXX0FUX3NlZ21lbnQiOwogICAgY2Fz ZSBEV19BVF9zcGVjaWZpY2F0aW9uOiByZXR1cm4gIkRXX0FUX3NwZWNpZmljYXRpb24iOwogICAg Y2FzZSBEV19BVF9zdGF0aWNfbGluazogcmV0dXJuICJEV19BVF9zdGF0aWNfbGluayI7CiAgICBj YXNlIERXX0FUX3R5cGU6IHJldHVybiAiRFdfQVRfdHlwZSI7CiAgICBjYXNlIERXX0FUX3VzZV9s b2NhdGlvbjogcmV0dXJuICJEV19BVF91c2VfbG9jYXRpb24iOwogICAgY2FzZSBEV19BVF92YXJp YWJsZV9wYXJhbWV0ZXI6IHJldHVybiAiRFdfQVRfdmFyaWFibGVfcGFyYW1ldGVyIjsKICAgIGNh c2UgRFdfQVRfdmlydHVhbGl0eTogcmV0dXJuICJEV19BVF92aXJ0dWFsaXR5IjsKICAgIGNhc2Ug RFdfQVRfdnRhYmxlX2VsZW1fbG9jYXRpb246IHJldHVybiAiRFdfQVRfdnRhYmxlX2VsZW1fbG9j YXRpb24iOwoKICAgIGNhc2UgRFdfQVRfYWxsb2NhdGVkOiByZXR1cm4gIkRXX0FUX2FsbG9jYXRl ZCI7CiAgICBjYXNlIERXX0FUX2Fzc29jaWF0ZWQ6IHJldHVybiAiRFdfQVRfYXNzb2NpYXRlZCI7 CiAgICBjYXNlIERXX0FUX2RhdGFfbG9jYXRpb246IHJldHVybiAiRFdfQVRfZGF0YV9sb2NhdGlv biI7CiAgICBjYXNlIERXX0FUX3N0cmlkZTogcmV0dXJuICJEV19BVF9zdHJpZGUiOwogICAgY2Fz ZSBEV19BVF9lbnRyeV9wYzogcmV0dXJuICJEV19BVF9lbnRyeV9wYyI7CiAgICBjYXNlIERXX0FU X3VzZV9VVEY4OiByZXR1cm4gIkRXX0FUX3VzZV9VVEY4IjsKICAgIGNhc2UgRFdfQVRfZXh0ZW5z aW9uOiByZXR1cm4gIkRXX0FUX2V4dGVuc2lvbiI7CiAgICBjYXNlIERXX0FUX3JhbmdlczogcmV0 dXJuICJEV19BVF9yYW5nZXMiOwogICAgY2FzZSBEV19BVF90cmFtcG9saW5lOiByZXR1cm4gIkRX X0FUX3RyYW1wb2xpbmUiOwogICAgY2FzZSBEV19BVF9jYWxsX2NvbHVtbjogcmV0dXJuICJEV19B VF9jYWxsX2NvbHVtbiI7CiAgICBjYXNlIERXX0FUX2NhbGxfZmlsZTogcmV0dXJuICJEV19BVF9j YWxsX2ZpbGUiOwogICAgY2FzZSBEV19BVF9jYWxsX2xpbmU6IHJldHVybiAiRFdfQVRfY2FsbF9s aW5lIjsKCiAgICBjYXNlIERXX0FUX01JUFNfZmRlOiByZXR1cm4gIkRXX0FUX01JUFNfZmRlIjsK ICAgIGNhc2UgRFdfQVRfTUlQU19sb29wX2JlZ2luOiByZXR1cm4gIkRXX0FUX01JUFNfbG9vcF9i ZWdpbiI7CiAgICBjYXNlIERXX0FUX01JUFNfdGFpbF9sb29wX2JlZ2luOiByZXR1cm4gIkRXX0FU X01JUFNfdGFpbF9sb29wX2JlZ2luIjsKICAgIGNhc2UgRFdfQVRfTUlQU19lcGlsb2dfYmVnaW46 IHJldHVybiAiRFdfQVRfTUlQU19lcGlsb2dfYmVnaW4iOwogICAgY2FzZSBEV19BVF9NSVBTX2xv b3BfdW5yb2xsX2ZhY3RvcjogcmV0dXJuICJEV19BVF9NSVBTX2xvb3BfdW5yb2xsX2ZhY3RvciI7 CiAgICBjYXNlIERXX0FUX01JUFNfc29mdHdhcmVfcGlwZWxpbmVfZGVwdGg6CiAgICAgIHJldHVy biAiRFdfQVRfTUlQU19zb2Z0d2FyZV9waXBlbGluZV9kZXB0aCI7CiAgICBjYXNlIERXX0FUX01J UFNfbGlua2FnZV9uYW1lOiByZXR1cm4gIkRXX0FUX01JUFNfbGlua2FnZV9uYW1lIjsKICAgIGNh c2UgRFdfQVRfTUlQU19zdHJpZGU6IHJldHVybiAiRFdfQVRfTUlQU19zdHJpZGUiOwogICAgY2Fz ZSBEV19BVF9NSVBTX2Fic3RyYWN0X25hbWU6IHJldHVybiAiRFdfQVRfTUlQU19hYnN0cmFjdF9u YW1lIjsKICAgIGNhc2UgRFdfQVRfTUlQU19jbG9uZV9vcmlnaW46IHJldHVybiAiRFdfQVRfTUlQ U19jbG9uZV9vcmlnaW4iOwogICAgY2FzZSBEV19BVF9NSVBTX2hhc19pbmxpbmVzOiByZXR1cm4g IkRXX0FUX01JUFNfaGFzX2lubGluZXMiOwoKICAgIGNhc2UgRFdfQVRfc2ZfbmFtZXM6IHJldHVy biAiRFdfQVRfc2ZfbmFtZXMiOwogICAgY2FzZSBEV19BVF9zcmNfaW5mbzogcmV0dXJuICJEV19B VF9zcmNfaW5mbyI7CiAgICBjYXNlIERXX0FUX21hY19pbmZvOiByZXR1cm4gIkRXX0FUX21hY19p bmZvIjsKICAgIGNhc2UgRFdfQVRfc3JjX2Nvb3JkczogcmV0dXJuICJEV19BVF9zcmNfY29vcmRz IjsKICAgIGNhc2UgRFdfQVRfYm9keV9iZWdpbjogcmV0dXJuICJEV19BVF9ib2R5X2JlZ2luIjsK ICAgIGNhc2UgRFdfQVRfYm9keV9lbmQ6IHJldHVybiAiRFdfQVRfYm9keV9lbmQiOwogICAgY2Fz ZSBEV19BVF9HTlVfdmVjdG9yOiByZXR1cm4gIkRXX0FUX0dOVV92ZWN0b3IiOwoKICAgIGNhc2Ug RFdfQVRfdXBjX3RocmVhZHNfc2NhbGVkOiByZXR1cm4gIkRXX0FUX3VwY190aHJlYWRzX3NjYWxl ZCI7CiAgICBkZWZhdWx0OgogICAgICB7CiAgICAgICAgc3RhdGljIGNoYXIgYnVmZmVyWzEwMF07 CgogICAgICAgIHNwcmludGYgKGJ1ZmZlciwgKCJVbmtub3duIEFUIHZhbHVlOiAlbHgiKSwgYXR0 cmlidXRlKTsKICAgICAgICByZXR1cm4gYnVmZmVyOwogICAgICB9CiAgICB9Cn0KCnN0YXRpYyBj aGFyICoKZ2V0X0ZPUk1fbmFtZSAoZm9ybSkKICAgICB1bnNpZ25lZCBsb25nIGZvcm07CnsKICBz d2l0Y2ggKGZvcm0pCiAgICB7CiAgICBjYXNlIERXX0ZPUk1fYWRkcjogcmV0dXJuICJEV19GT1JN X2FkZHIiOwogICAgY2FzZSBEV19GT1JNX2Jsb2NrMjogcmV0dXJuICJEV19GT1JNX2Jsb2NrMiI7 CiAgICBjYXNlIERXX0ZPUk1fYmxvY2s0OiByZXR1cm4gIkRXX0ZPUk1fYmxvY2s0IjsKICAgIGNh c2UgRFdfRk9STV9kYXRhMjogcmV0dXJuICJEV19GT1JNX2RhdGEyIjsKICAgIGNhc2UgRFdfRk9S TV9kYXRhNDogcmV0dXJuICJEV19GT1JNX2RhdGE0IjsKICAgIGNhc2UgRFdfRk9STV9kYXRhODog cmV0dXJuICJEV19GT1JNX2RhdGE4IjsKICAgIGNhc2UgRFdfRk9STV9zdHJpbmc6IHJldHVybiAi RFdfRk9STV9zdHJpbmciOwogICAgY2FzZSBEV19GT1JNX2Jsb2NrOiByZXR1cm4gIkRXX0ZPUk1f YmxvY2siOwogICAgY2FzZSBEV19GT1JNX2Jsb2NrMTogcmV0dXJuICJEV19GT1JNX2Jsb2NrMSI7 CiAgICBjYXNlIERXX0ZPUk1fZGF0YTE6IHJldHVybiAiRFdfRk9STV9kYXRhMSI7CiAgICBjYXNl IERXX0ZPUk1fZmxhZzogcmV0dXJuICJEV19GT1JNX2ZsYWciOwogICAgY2FzZSBEV19GT1JNX3Nk YXRhOiByZXR1cm4gIkRXX0ZPUk1fc2RhdGEiOwogICAgY2FzZSBEV19GT1JNX3N0cnA6IHJldHVy biAiRFdfRk9STV9zdHJwIjsKICAgIGNhc2UgRFdfRk9STV91ZGF0YTogcmV0dXJuICJEV19GT1JN X3VkYXRhIjsKICAgIGNhc2UgRFdfRk9STV9yZWZfYWRkcjogcmV0dXJuICJEV19GT1JNX3JlZl9h ZGRyIjsKICAgIGNhc2UgRFdfRk9STV9yZWYxOiByZXR1cm4gIkRXX0ZPUk1fcmVmMSI7CiAgICBj YXNlIERXX0ZPUk1fcmVmMjogcmV0dXJuICJEV19GT1JNX3JlZjIiOwogICAgY2FzZSBEV19GT1JN X3JlZjQ6IHJldHVybiAiRFdfRk9STV9yZWY0IjsKICAgIGNhc2UgRFdfRk9STV9yZWY4OiByZXR1 cm4gIkRXX0ZPUk1fcmVmOCI7CiAgICBjYXNlIERXX0ZPUk1fcmVmX3VkYXRhOiByZXR1cm4gIkRX X0ZPUk1fcmVmX3VkYXRhIjsKICAgIGNhc2UgRFdfRk9STV9pbmRpcmVjdDogcmV0dXJuICJEV19G T1JNX2luZGlyZWN0IjsKICAgIGRlZmF1bHQ6CiAgICAgIHsKICAgICAgICBzdGF0aWMgY2hhciBi dWZmZXJbMTAwXTsKCiAgICAgICAgc3ByaW50ZiAoYnVmZmVyLCAoIlVua25vd24gRk9STSB2YWx1 ZTogJWx4IiksIGZvcm0pOwogICAgICAgIHJldHVybiBidWZmZXI7CiAgICAgIH0KICAgIH0KfQoK CgoKdHlwZWRlZiBzdHJ1Y3QgYWJicmV2X2F0dHIKewogIHVuc2lnbmVkIGxvbmcgYXR0cmlidXRl OwogIHVuc2lnbmVkIGxvbmcgZm9ybTsKICBzdHJ1Y3QgYWJicmV2X2F0dHIgKm5leHQ7Cn0KYWJi cmV2X2F0dHI7Cgp0eXBlZGVmIHN0cnVjdCBhYmJyZXZfZW50cnkKewogIHVuc2lnbmVkIGxvbmcg ZW50cnk7CiAgdW5zaWduZWQgbG9uZyB0YWc7CiAgaW50IGNoaWxkcmVuOwogIHN0cnVjdCBhYmJy ZXZfYXR0ciAqZmlyc3RfYXR0cjsKICBzdHJ1Y3QgYWJicmV2X2F0dHIgKmxhc3RfYXR0cjsKICBz dHJ1Y3QgYWJicmV2X2VudHJ5ICpuZXh0Owp9CmFiYnJldl9lbnRyeTsKCnN0YXRpYyBhYmJyZXZf ZW50cnkgKmZpcnN0X2FiYnJldiA9ICgodm9pZCAqKTApOwpzdGF0aWMgYWJicmV2X2VudHJ5ICps YXN0X2FiYnJldiA9ICgodm9pZCAqKTApOwoKc3RhdGljIHZvaWQKZnJlZV9hYmJyZXZzICgpCnsK ICBhYmJyZXZfZW50cnkgKmFiYnJldjsKCiAgZm9yIChhYmJyZXYgPSBmaXJzdF9hYmJyZXY7IGFi YnJldjspCiAgICB7CiAgICAgIGFiYnJldl9lbnRyeSAqbmV4dCA9IGFiYnJldi0+bmV4dDsKICAg ICAgYWJicmV2X2F0dHIgKmF0dHI7CgogICAgICBmb3IgKGF0dHIgPSBhYmJyZXYtPmZpcnN0X2F0 dHI7IGF0dHI7KQogICAgICAgIHsKICAgICAgICAgIGFiYnJldl9hdHRyICpuZXh0ID0gYXR0ci0+ bmV4dDsKCiAgICAgICAgICBmcmVlIChhdHRyKTsKICAgICAgICAgIGF0dHIgPSBuZXh0OwogICAg ICAgIH0KCiAgICAgIGZyZWUgKGFiYnJldik7CiAgICAgIGFiYnJldiA9IG5leHQ7CiAgICB9Cgog IGxhc3RfYWJicmV2ID0gZmlyc3RfYWJicmV2ID0gKCh2b2lkICopMCk7Cn0KCnN0YXRpYyB2b2lk CmFkZF9hYmJyZXYgKG51bWJlciwgdGFnLCBjaGlsZHJlbikKICAgICB1bnNpZ25lZCBsb25nIG51 bWJlcjsKICAgICB1bnNpZ25lZCBsb25nIHRhZzsKICAgICBpbnQgY2hpbGRyZW47CnsKICBhYmJy ZXZfZW50cnkgKmVudHJ5OwoKICBlbnRyeSA9IChhYmJyZXZfZW50cnkgKikgbWFsbG9jIChzaXpl b2YgKCplbnRyeSkpOwoKICBpZiAoZW50cnkgPT0gKCh2b2lkICopMCkpCgogICAgcmV0dXJuOwoK ICBlbnRyeS0+ZW50cnkgPSBudW1iZXI7CiAgZW50cnktPnRhZyA9IHRhZzsKICBlbnRyeS0+Y2hp bGRyZW4gPSBjaGlsZHJlbjsKICBlbnRyeS0+Zmlyc3RfYXR0ciA9ICgodm9pZCAqKTApOwogIGVu dHJ5LT5sYXN0X2F0dHIgPSAoKHZvaWQgKikwKTsKICBlbnRyeS0+bmV4dCA9ICgodm9pZCAqKTAp OwoKICBpZiAoZmlyc3RfYWJicmV2ID09ICgodm9pZCAqKTApKQogICAgZmlyc3RfYWJicmV2ID0g ZW50cnk7CiAgZWxzZQogICAgbGFzdF9hYmJyZXYtPm5leHQgPSBlbnRyeTsKCiAgbGFzdF9hYmJy ZXYgPSBlbnRyeTsKfQoKc3RhdGljIHZvaWQKYWRkX2FiYnJldl9hdHRyIChhdHRyaWJ1dGUsIGZv cm0pCiAgICAgdW5zaWduZWQgbG9uZyBhdHRyaWJ1dGU7CiAgICAgdW5zaWduZWQgbG9uZyBmb3Jt Owp7CiAgYWJicmV2X2F0dHIgKmF0dHI7CgogIGF0dHIgPSAoYWJicmV2X2F0dHIgKikgbWFsbG9j IChzaXplb2YgKCphdHRyKSk7CgogIGlmIChhdHRyID09ICgodm9pZCAqKTApKQoKICAgIHJldHVy bjsKCiAgYXR0ci0+YXR0cmlidXRlID0gYXR0cmlidXRlOwogIGF0dHItPmZvcm0gPSBmb3JtOwog IGF0dHItPm5leHQgPSAoKHZvaWQgKikwKTsKCiAgaWYgKGxhc3RfYWJicmV2LT5maXJzdF9hdHRy ID09ICgodm9pZCAqKTApKQogICAgbGFzdF9hYmJyZXYtPmZpcnN0X2F0dHIgPSBhdHRyOwogIGVs c2UKICAgIGxhc3RfYWJicmV2LT5sYXN0X2F0dHItPm5leHQgPSBhdHRyOwoKICBsYXN0X2FiYnJl di0+bGFzdF9hdHRyID0gYXR0cjsKfQoKCgoKCgpzdGF0aWMgdW5zaWduZWQgY2hhciAqCnByb2Nl c3NfYWJicmV2X3NlY3Rpb24gKHN0YXJ0LCBlbmQpCiAgICAgdW5zaWduZWQgY2hhciAqc3RhcnQ7 CiAgICAgdW5zaWduZWQgY2hhciAqZW5kOwp7CiAgaWYgKGZpcnN0X2FiYnJldiAhPSAoKHZvaWQg KikwKSkKICAgIHJldHVybiAoKHZvaWQgKikwKTsKCiAgd2hpbGUgKHN0YXJ0IDwgZW5kKQogICAg ewogICAgICBpbnQgYnl0ZXNfcmVhZDsKICAgICAgdW5zaWduZWQgbG9uZyBlbnRyeTsKICAgICAg dW5zaWduZWQgbG9uZyB0YWc7CiAgICAgIHVuc2lnbmVkIGxvbmcgYXR0cmlidXRlOwogICAgICBp bnQgY2hpbGRyZW47CgogICAgICBlbnRyeSA9IHJlYWRfbGViMTI4IChzdGFydCwgJiBieXRlc19y ZWFkLCAwKTsKICAgICAgc3RhcnQgKz0gYnl0ZXNfcmVhZDsKCgoKCiAgICAgIGlmIChlbnRyeSA9 PSAwKQogICAgICAgIHJldHVybiBzdGFydCA9PSBlbmQgPyAoKHZvaWQgKikwKSA6IHN0YXJ0OwoK ICAgICAgdGFnID0gcmVhZF9sZWIxMjggKHN0YXJ0LCAmIGJ5dGVzX3JlYWQsIDApOwogICAgICBz dGFydCArPSBieXRlc19yZWFkOwoKICAgICAgY2hpbGRyZW4gPSAqc3RhcnQrKzsKCiAgICAgIGFk ZF9hYmJyZXYgKGVudHJ5LCB0YWcsIGNoaWxkcmVuKTsKCiAgICAgIGRvCiAgICAgICAgewogICAg ICAgICAgdW5zaWduZWQgbG9uZyBmb3JtOwoKICAgICAgICAgIGF0dHJpYnV0ZSA9IHJlYWRfbGVi MTI4IChzdGFydCwgJiBieXRlc19yZWFkLCAwKTsKICAgICAgICAgIHN0YXJ0ICs9IGJ5dGVzX3Jl YWQ7CgogICAgICAgICAgZm9ybSA9IHJlYWRfbGViMTI4IChzdGFydCwgJiBieXRlc19yZWFkLCAw KTsKICAgICAgICAgIHN0YXJ0ICs9IGJ5dGVzX3JlYWQ7CgogICAgICAgICAgaWYgKGF0dHJpYnV0 ZSAhPSAwKQogICAgICAgICAgICBhZGRfYWJicmV2X2F0dHIgKGF0dHJpYnV0ZSwgZm9ybSk7CiAg ICAgICAgfQogICAgICB3aGlsZSAoYXR0cmlidXRlICE9IDApOwogICAgfQoKICByZXR1cm4gKCh2 b2lkICopMCk7Cn0KCgpzdGF0aWMgaW50CmRpc3BsYXlfZGVidWdfbWFjaW5mbyAoc2VjdGlvbiwg c3RhcnQsIGZpbGUpCiAgICAgRWxmX0ludGVybmFsX1NoZHIgKnNlY3Rpb247CiAgICAgdW5zaWdu ZWQgY2hhciAqc3RhcnQ7CiAgICAgRklMRSAqZmlsZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRf XykpOwp7CiAgdW5zaWduZWQgY2hhciAqZW5kID0gc3RhcnQgKyBzZWN0aW9uLT5zaF9zaXplOwog IHVuc2lnbmVkIGNoYXIgKmN1cnIgPSBzdGFydDsKICB1bnNpZ25lZCBpbnQgYnl0ZXNfcmVhZDsK ICBlbnVtIGR3YXJmX21hY2luZm9fcmVjb3JkX3R5cGUgb3A7CgogIHByaW50ZiAoKCJDb250ZW50 cyBvZiB0aGUgJXMgc2VjdGlvbjpcblxuIiksICgoc2VjdGlvbikgPT0gKCh2b2lkICopMCkgPyAi PG5vbmU+IiA6ICgoc2VjdGlvbiktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8 Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlY3Rpb24pLT5zaF9uYW1lKSkpOwoKICB3aGls ZSAoY3VyciA8IGVuZCkKICAgIHsKICAgICAgdW5zaWduZWQgaW50IGxpbmVubzsKICAgICAgY29u c3QgY2hhciAqc3RyaW5nOwoKICAgICAgb3AgPSAqY3VycjsKICAgICAgY3VycisrOwoKICAgICAg c3dpdGNoIChvcCkKICAgICAgICB7CiAgICAgICAgY2FzZSBEV19NQUNJTkZPX3N0YXJ0X2ZpbGU6 CiAgICAgICAgICB7CiAgICAgICAgICAgIHVuc2lnbmVkIGludCBmaWxlbnVtOwoKICAgICAgICAg ICAgbGluZW5vID0gcmVhZF9sZWIxMjggKGN1cnIsICYgYnl0ZXNfcmVhZCwgMCk7CiAgICAgICAg ICAgIGN1cnIgKz0gYnl0ZXNfcmVhZDsKICAgICAgICAgICAgZmlsZW51bSA9IHJlYWRfbGViMTI4 IChjdXJyLCAmIGJ5dGVzX3JlYWQsIDApOwogICAgICAgICAgICBjdXJyICs9IGJ5dGVzX3JlYWQ7 CgogICAgICAgICAgICBwcmludGYgKCgiIERXX01BQ0lORk9fc3RhcnRfZmlsZSAtIGxpbmVubzog JWQgZmlsZW51bTogJWRcbiIpLCBsaW5lbm8sIGZpbGVudW0pOwogICAgICAgICAgfQogICAgICAg ICAgYnJlYWs7CgogICAgICAgIGNhc2UgRFdfTUFDSU5GT19lbmRfZmlsZToKICAgICAgICAgIHBy aW50ZiAoKCIgRFdfTUFDSU5GT19lbmRfZmlsZVxuIikpOwogICAgICAgICAgYnJlYWs7CgogICAg ICAgIGNhc2UgRFdfTUFDSU5GT19kZWZpbmU6CiAgICAgICAgICBsaW5lbm8gPSByZWFkX2xlYjEy OCAoY3VyciwgJiBieXRlc19yZWFkLCAwKTsKICAgICAgICAgIGN1cnIgKz0gYnl0ZXNfcmVhZDsK ICAgICAgICAgIHN0cmluZyA9IGN1cnI7CiAgICAgICAgICBjdXJyICs9IHN0cmxlbiAoc3RyaW5n KSArIDE7CiAgICAgICAgICBwcmludGYgKCgiIERXX01BQ0lORk9fZGVmaW5lIC0gbGluZW5vIDog JWQgbWFjcm8gOiAlc1xuIiksIGxpbmVubywgc3RyaW5nKTsKICAgICAgICAgIGJyZWFrOwoKICAg ICAgICBjYXNlIERXX01BQ0lORk9fdW5kZWY6CiAgICAgICAgICBsaW5lbm8gPSByZWFkX2xlYjEy OCAoY3VyciwgJiBieXRlc19yZWFkLCAwKTsKICAgICAgICAgIGN1cnIgKz0gYnl0ZXNfcmVhZDsK ICAgICAgICAgIHN0cmluZyA9IGN1cnI7CiAgICAgICAgICBjdXJyICs9IHN0cmxlbiAoc3RyaW5n KSArIDE7CiAgICAgICAgICBwcmludGYgKCgiIERXX01BQ0lORk9fdW5kZWYgLSBsaW5lbm8gOiAl ZCBtYWNybyA6ICVzXG4iKSwgbGluZW5vLCBzdHJpbmcpOwogICAgICAgICAgYnJlYWs7CgogICAg ICAgIGNhc2UgRFdfTUFDSU5GT192ZW5kb3JfZXh0OgogICAgICAgICAgewogICAgICAgICAgICB1 bnNpZ25lZCBpbnQgY29uc3RhbnQ7CgogICAgICAgICAgICBjb25zdGFudCA9IHJlYWRfbGViMTI4 IChjdXJyLCAmIGJ5dGVzX3JlYWQsIDApOwogICAgICAgICAgICBjdXJyICs9IGJ5dGVzX3JlYWQ7 CiAgICAgICAgICAgIHN0cmluZyA9IGN1cnI7CiAgICAgICAgICAgIGN1cnIgKz0gc3RybGVuIChz dHJpbmcpICsgMTsKICAgICAgICAgICAgcHJpbnRmICgoIiBEV19NQUNJTkZPX3ZlbmRvcl9leHQg LSBjb25zdGFudCA6ICVkIHN0cmluZyA6ICVzXG4iKSwgY29uc3RhbnQsIHN0cmluZyk7CiAgICAg ICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogIHJldHVybiAxOwp9CgoK c3RhdGljIGludApkaXNwbGF5X2RlYnVnX2FiYnJldiAoc2VjdGlvbiwgc3RhcnQsIGZpbGUpCiAg ICAgRWxmX0ludGVybmFsX1NoZHIgKnNlY3Rpb247CiAgICAgdW5zaWduZWQgY2hhciAqc3RhcnQ7 CiAgICAgRklMRSAqZmlsZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwp7CiAgYWJicmV2 X2VudHJ5ICplbnRyeTsKICB1bnNpZ25lZCBjaGFyICplbmQgPSBzdGFydCArIHNlY3Rpb24tPnNo X3NpemU7CgogIHByaW50ZiAoKCJDb250ZW50cyBvZiB0aGUgJXMgc2VjdGlvbjpcblxuIiksICgo c2VjdGlvbikgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjdGlvbiktPnNoX25hbWUg Pj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNl Y3Rpb24pLT5zaF9uYW1lKSkpOwoKICBkbwogICAgewogICAgICBzdGFydCA9IHByb2Nlc3NfYWJi cmV2X3NlY3Rpb24gKHN0YXJ0LCBlbmQpOwoKICAgICAgaWYgKGZpcnN0X2FiYnJldiA9PSAoKHZv aWQgKikwKSkKICAgICAgICBjb250aW51ZTsKCiAgICAgIHByaW50ZiAoKCIgIE51bWJlciBUQUdc biIpKTsKCiAgICAgIGZvciAoZW50cnkgPSBmaXJzdF9hYmJyZXY7IGVudHJ5OyBlbnRyeSA9IGVu dHJ5LT5uZXh0KQogICAgICAgIHsKICAgICAgICAgIGFiYnJldl9hdHRyICphdHRyOwoKICAgICAg ICAgIHByaW50ZiAoKCIgICAlbGQgICAgICAlcyAgICBbJXNdXG4iKSwKICAgICAgICAgICAgICAg ICAgZW50cnktPmVudHJ5LAogICAgICAgICAgICAgICAgICBnZXRfVEFHX25hbWUgKGVudHJ5LT50 YWcpLAogICAgICAgICAgICAgICAgICBlbnRyeS0+Y2hpbGRyZW4gPyAoImhhcyBjaGlsZHJlbiIp IDogKCJubyBjaGlsZHJlbiIpKTsKCiAgICAgICAgICBmb3IgKGF0dHIgPSBlbnRyeS0+Zmlyc3Rf YXR0cjsgYXR0cjsgYXR0ciA9IGF0dHItPm5leHQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBwcmludGYgKCgiICAgICUtMThzICVzXG4iKSwKICAgICAgICAgICAgICAgICAgICAgIGdldF9B VF9uYW1lIChhdHRyLT5hdHRyaWJ1dGUpLAogICAgICAgICAgICAgICAgICAgICAgZ2V0X0ZPUk1f bmFtZSAoYXR0ci0+Zm9ybSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgZnJlZV9h YmJyZXZzICgpOwogICAgfQogIHdoaWxlIChzdGFydCk7CgogIHByaW50ZiAoIlxuIik7CgogIHJl dHVybiAxOwp9CgoKc3RhdGljIHVuc2lnbmVkIGNoYXIgKgpkaXNwbGF5X2Jsb2NrIChkYXRhLCBs ZW5ndGgpCiAgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKICAgICB1bnNpZ25lZCBsb25nIGxlbmd0 aDsKewogIHByaW50ZiAoKCIgJWx1IGJ5dGUgYmxvY2s6ICIpLCBsZW5ndGgpOwoKICB3aGlsZSAo bGVuZ3RoIC0tKQogICAgcHJpbnRmICgiJWx4ICIsICh1bnNpZ25lZCBsb25nKSBieXRlX2dldCAo ZGF0YSsrLCAxKSk7CgogIHJldHVybiBkYXRhOwp9CgpzdGF0aWMgdm9pZApkZWNvZGVfbG9jYXRp b25fZXhwcmVzc2lvbiAoZGF0YSwgcG9pbnRlcl9zaXplLCBsZW5ndGgpCiAgICAgdW5zaWduZWQg Y2hhciAqIGRhdGE7CiAgICAgdW5zaWduZWQgaW50IHBvaW50ZXJfc2l6ZTsKICAgICB1bnNpZ25l ZCBsb25nIGxlbmd0aDsKewogIHVuc2lnbmVkIG9wOwogIGludCBieXRlc19yZWFkOwogIHVuc2ln bmVkIGxvbmcgdXZhbHVlOwogIHVuc2lnbmVkIGNoYXIgKmVuZCA9IGRhdGEgKyBsZW5ndGg7Cgog IHdoaWxlIChkYXRhIDwgZW5kKQogICAgewogICAgICBvcCA9ICpkYXRhKys7CgogICAgICBzd2l0 Y2ggKG9wKQogICAgICAgIHsKICAgICAgICBjYXNlIERXX09QX2FkZHI6CiAgICAgICAgICBwcmlu dGYgKCJEV19PUF9hZGRyOiAlbHgiLAogICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykg Ynl0ZV9nZXQgKGRhdGEsIHBvaW50ZXJfc2l6ZSkpOwogICAgICAgICAgZGF0YSArPSBwb2ludGVy X3NpemU7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIERXX09QX2RlcmVmOgogICAgICAg ICAgcHJpbnRmICgiRFdfT1BfZGVyZWYiKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2Ug RFdfT1BfY29uc3QxdToKICAgICAgICAgIHByaW50ZiAoIkRXX09QX2NvbnN0MXU6ICVsdSIsICh1 bnNpZ25lZCBsb25nKSBieXRlX2dldCAoZGF0YSsrLCAxKSk7CiAgICAgICAgICBicmVhazsKICAg ICAgICBjYXNlIERXX09QX2NvbnN0MXM6CiAgICAgICAgICBwcmludGYgKCJEV19PUF9jb25zdDFz OiAlbGQiLCAobG9uZykgYnl0ZV9nZXQgKGRhdGErKywgMSkpOwogICAgICAgICAgYnJlYWs7CiAg ICAgICAgY2FzZSBEV19PUF9jb25zdDJ1OgogICAgICAgICAgcHJpbnRmICgiRFdfT1BfY29uc3Qy dTogJWx1IiwgKHVuc2lnbmVkIGxvbmcpIGJ5dGVfZ2V0IChkYXRhLCAyKSk7CiAgICAgICAgICBk YXRhICs9IDI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIERXX09QX2NvbnN0MnM6CiAg ICAgICAgICBwcmludGYgKCJEV19PUF9jb25zdDJzOiAlbGQiLCAobG9uZykgYnl0ZV9nZXQgKGRh dGEsIDIpKTsKICAgICAgICAgIGRhdGEgKz0gMjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNh c2UgRFdfT1BfY29uc3Q0dToKICAgICAgICAgIHByaW50ZiAoIkRXX09QX2NvbnN0NHU6ICVsdSIs ICh1bnNpZ25lZCBsb25nKSBieXRlX2dldCAoZGF0YSwgNCkpOwogICAgICAgICAgZGF0YSArPSA0 OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBEV19PUF9jb25zdDRzOgogICAgICAgICAg cHJpbnRmICgiRFdfT1BfY29uc3Q0czogJWxkIiwgKGxvbmcpIGJ5dGVfZ2V0IChkYXRhLCA0KSk7 CiAgICAgICAgICBkYXRhICs9IDQ7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIERXX09Q X2NvbnN0OHU6CiAgICAgICAgICBwcmludGYgKCJEV19PUF9jb25zdDh1OiAlbHUgJWx1IiwgKHVu c2lnbmVkIGxvbmcpIGJ5dGVfZ2V0IChkYXRhLCA0KSwKICAgICAgICAgICAgICAgICAgKHVuc2ln bmVkIGxvbmcpIGJ5dGVfZ2V0IChkYXRhICsgNCwgNCkpOwogICAgICAgICAgZGF0YSArPSA4Owog ICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBEV19PUF9jb25zdDhzOgogICAgICAgICAgcHJp bnRmICgiRFdfT1BfY29uc3Q4czogJWxkICVsZCIsIChsb25nKSBieXRlX2dldCAoZGF0YSwgNCks CiAgICAgICAgICAgICAgICAgIChsb25nKSBieXRlX2dldCAoZGF0YSArIDQsIDQpKTsKICAgICAg ICAgIGRhdGEgKz0gODsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRFdfT1BfY29uc3R1 OgogICAgICAgICAgcHJpbnRmICgiRFdfT1BfY29uc3R1OiAlbHUiLCByZWFkX2xlYjEyOCAoZGF0 YSwgJmJ5dGVzX3JlYWQsIDApKTsKICAgICAgICAgIGRhdGEgKz0gYnl0ZXNfcmVhZDsKICAgICAg ICAgIGJyZWFrOwogICAgICAgIGNhc2UgRFdfT1BfY29uc3RzOgogICAgICAgICAgcHJpbnRmICgi RFdfT1BfY29uc3RzOiAlbGQiLCByZWFkX2xlYjEyOCAoZGF0YSwgJmJ5dGVzX3JlYWQsIDEpKTsK ICAgICAgICAgIGRhdGEgKz0gYnl0ZXNfcmVhZDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNh c2UgRFdfT1BfZHVwOgogICAgICAgICAgcHJpbnRmICgiRFdfT1BfZHVwIik7CiAgICAgICAgICBi cmVhazsKICAgICAgICBjYXNlIERXX09QX2Ryb3A6CiAgICAgICAgICBwcmludGYgKCJEV19PUF9k cm9wIik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIERXX09QX292ZXI6CiAgICAgICAg ICBwcmludGYgKCJEV19PUF9vdmVyIik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIERX X09QX3BpY2s6CiAgICAgICAgICBwcmludGYgKCJEV19PUF9waWNrOiAlbGQiLCAodW5zaWduZWQg bG9uZykgYnl0ZV9nZXQgKGRhdGErKywgMSkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2Fz ZSBEV19PUF9zd2FwOgogICAgICAgICAgcHJpbnRmICgiRFdfT1Bfc3dhcCIpOwogICAgICAgICAg YnJlYWs7CiAgICAgICAgY2FzZSBEV19PUF9yb3Q6CiAgICAgICAgICBwcmludGYgKCJEV19PUF9y b3QiKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRFdfT1BfeGRlcmVmOgogICAgICAg ICAgcHJpbnRmICgiRFdfT1BfeGRlcmVmIik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNl IERXX09QX2FiczoKICAgICAgICAgIHByaW50ZiAoIkRXX09QX2FicyIpOwogICAgICAgICAgYnJl YWs7CiAgICAgICAgY2FzZSBEV19PUF9hbmQ6CiAgICAgICAgICBwcmludGYgKCJEV19PUF9hbmQi KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRFdfT1BfZGl2OgogICAgICAgICAgcHJp bnRmICgiRFdfT1BfZGl2Iik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIERXX09QX21p bnVzOgogICAgICAgICAgcHJpbnRmICgiRFdfT1BfbWludXMiKTsKICAgICAgICAgIGJyZWFrOwog ICAgICAgIGNhc2UgRFdfT1BfbW9kOgogICAgICAgICAgcHJpbnRmICgiRFdfT1BfbW9kIik7CiAg ICAgICAgICBicmVhazsKICAgICAgICBjYXNlIERXX09QX211bDoKICAgICAgICAgIHByaW50ZiAo IkRXX09QX211bCIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBEV19PUF9uZWc6CiAg ICAgICAgICBwcmludGYgKCJEV19PUF9uZWciKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNh c2UgRFdfT1Bfbm90OgogICAgICAgICAgcHJpbnRmICgiRFdfT1Bfbm90Iik7CiAgICAgICAgICBi cmVhazsKICAgICAgICBjYXNlIERXX09QX29yOgogICAgICAgICAgcHJpbnRmICgiRFdfT1Bfb3Ii KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRFdfT1BfcGx1czoKICAgICAgICAgIHBy aW50ZiAoIkRXX09QX3BsdXMiKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRFdfT1Bf cGx1c191Y29uc3Q6CiAgICAgICAgICBwcmludGYgKCJEV19PUF9wbHVzX3Vjb25zdDogJWx1IiwK ICAgICAgICAgICAgICAgICAgcmVhZF9sZWIxMjggKGRhdGEsICZieXRlc19yZWFkLCAwKSk7CiAg ICAgICAgICBkYXRhICs9IGJ5dGVzX3JlYWQ7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNl IERXX09QX3NobDoKICAgICAgICAgIHByaW50ZiAoIkRXX09QX3NobCIpOwogICAgICAgICAgYnJl YWs7CiAgICAgICAgY2FzZSBEV19PUF9zaHI6CiAgICAgICAgICBwcmludGYgKCJEV19PUF9zaHIi KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRFdfT1Bfc2hyYToKICAgICAgICAgIHBy aW50ZiAoIkRXX09QX3NocmEiKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRFdfT1Bf eG9yOgogICAgICAgICAgcHJpbnRmICgiRFdfT1BfeG9yIik7CiAgICAgICAgICBicmVhazsKICAg ICAgICBjYXNlIERXX09QX2JyYToKICAgICAgICAgIHByaW50ZiAoIkRXX09QX2JyYTogJWxkIiwg KGxvbmcpIGJ5dGVfZ2V0IChkYXRhLCAyKSk7CiAgICAgICAgICBkYXRhICs9IDI7CiAgICAgICAg ICBicmVhazsKICAgICAgICBjYXNlIERXX09QX2VxOgogICAgICAgICAgcHJpbnRmICgiRFdfT1Bf ZXEiKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRFdfT1BfZ2U6CiAgICAgICAgICBw cmludGYgKCJEV19PUF9nZSIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBEV19PUF9n dDoKICAgICAgICAgIHByaW50ZiAoIkRXX09QX2d0Iik7CiAgICAgICAgICBicmVhazsKICAgICAg ICBjYXNlIERXX09QX2xlOgogICAgICAgICAgcHJpbnRmICgiRFdfT1BfbGUiKTsKICAgICAgICAg IGJyZWFrOwogICAgICAgIGNhc2UgRFdfT1BfbHQ6CiAgICAgICAgICBwcmludGYgKCJEV19PUF9s dCIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBEV19PUF9uZToKICAgICAgICAgIHBy aW50ZiAoIkRXX09QX25lIik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIERXX09QX3Nr aXA6CiAgICAgICAgICBwcmludGYgKCJEV19PUF9za2lwOiAlbGQiLCAobG9uZykgYnl0ZV9nZXQg KGRhdGEsIDIpKTsKICAgICAgICAgIGRhdGEgKz0gMjsKICAgICAgICAgIGJyZWFrOwoKICAgICAg ICBjYXNlIERXX09QX2xpdDA6CiAgICAgICAgY2FzZSBEV19PUF9saXQxOgogICAgICAgIGNhc2Ug RFdfT1BfbGl0MjoKICAgICAgICBjYXNlIERXX09QX2xpdDM6CiAgICAgICAgY2FzZSBEV19PUF9s aXQ0OgogICAgICAgIGNhc2UgRFdfT1BfbGl0NToKICAgICAgICBjYXNlIERXX09QX2xpdDY6CiAg ICAgICAgY2FzZSBEV19PUF9saXQ3OgogICAgICAgIGNhc2UgRFdfT1BfbGl0ODoKICAgICAgICBj YXNlIERXX09QX2xpdDk6CiAgICAgICAgY2FzZSBEV19PUF9saXQxMDoKICAgICAgICBjYXNlIERX X09QX2xpdDExOgogICAgICAgIGNhc2UgRFdfT1BfbGl0MTI6CiAgICAgICAgY2FzZSBEV19PUF9s aXQxMzoKICAgICAgICBjYXNlIERXX09QX2xpdDE0OgogICAgICAgIGNhc2UgRFdfT1BfbGl0MTU6 CiAgICAgICAgY2FzZSBEV19PUF9saXQxNjoKICAgICAgICBjYXNlIERXX09QX2xpdDE3OgogICAg ICAgIGNhc2UgRFdfT1BfbGl0MTg6CiAgICAgICAgY2FzZSBEV19PUF9saXQxOToKICAgICAgICBj YXNlIERXX09QX2xpdDIwOgogICAgICAgIGNhc2UgRFdfT1BfbGl0MjE6CiAgICAgICAgY2FzZSBE V19PUF9saXQyMjoKICAgICAgICBjYXNlIERXX09QX2xpdDIzOgogICAgICAgIGNhc2UgRFdfT1Bf bGl0MjQ6CiAgICAgICAgY2FzZSBEV19PUF9saXQyNToKICAgICAgICBjYXNlIERXX09QX2xpdDI2 OgogICAgICAgIGNhc2UgRFdfT1BfbGl0Mjc6CiAgICAgICAgY2FzZSBEV19PUF9saXQyODoKICAg ICAgICBjYXNlIERXX09QX2xpdDI5OgogICAgICAgIGNhc2UgRFdfT1BfbGl0MzA6CiAgICAgICAg Y2FzZSBEV19PUF9saXQzMToKICAgICAgICAgIHByaW50ZiAoIkRXX09QX2xpdCVkIiwgb3AgLSBE V19PUF9saXQwKTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIERXX09QX3JlZzA6CiAg ICAgICAgY2FzZSBEV19PUF9yZWcxOgogICAgICAgIGNhc2UgRFdfT1BfcmVnMjoKICAgICAgICBj YXNlIERXX09QX3JlZzM6CiAgICAgICAgY2FzZSBEV19PUF9yZWc0OgogICAgICAgIGNhc2UgRFdf T1BfcmVnNToKICAgICAgICBjYXNlIERXX09QX3JlZzY6CiAgICAgICAgY2FzZSBEV19PUF9yZWc3 OgogICAgICAgIGNhc2UgRFdfT1BfcmVnODoKICAgICAgICBjYXNlIERXX09QX3JlZzk6CiAgICAg ICAgY2FzZSBEV19PUF9yZWcxMDoKICAgICAgICBjYXNlIERXX09QX3JlZzExOgogICAgICAgIGNh c2UgRFdfT1BfcmVnMTI6CiAgICAgICAgY2FzZSBEV19PUF9yZWcxMzoKICAgICAgICBjYXNlIERX X09QX3JlZzE0OgogICAgICAgIGNhc2UgRFdfT1BfcmVnMTU6CiAgICAgICAgY2FzZSBEV19PUF9y ZWcxNjoKICAgICAgICBjYXNlIERXX09QX3JlZzE3OgogICAgICAgIGNhc2UgRFdfT1BfcmVnMTg6 CiAgICAgICAgY2FzZSBEV19PUF9yZWcxOToKICAgICAgICBjYXNlIERXX09QX3JlZzIwOgogICAg ICAgIGNhc2UgRFdfT1BfcmVnMjE6CiAgICAgICAgY2FzZSBEV19PUF9yZWcyMjoKICAgICAgICBj YXNlIERXX09QX3JlZzIzOgogICAgICAgIGNhc2UgRFdfT1BfcmVnMjQ6CiAgICAgICAgY2FzZSBE V19PUF9yZWcyNToKICAgICAgICBjYXNlIERXX09QX3JlZzI2OgogICAgICAgIGNhc2UgRFdfT1Bf cmVnMjc6CiAgICAgICAgY2FzZSBEV19PUF9yZWcyODoKICAgICAgICBjYXNlIERXX09QX3JlZzI5 OgogICAgICAgIGNhc2UgRFdfT1BfcmVnMzA6CiAgICAgICAgY2FzZSBEV19PUF9yZWczMToKICAg ICAgICAgIHByaW50ZiAoIkRXX09QX3JlZyVkIiwgb3AgLSBEV19PUF9yZWcwKTsKICAgICAgICAg IGJyZWFrOwoKICAgICAgICBjYXNlIERXX09QX2JyZWcwOgogICAgICAgIGNhc2UgRFdfT1BfYnJl ZzE6CiAgICAgICAgY2FzZSBEV19PUF9icmVnMjoKICAgICAgICBjYXNlIERXX09QX2JyZWczOgog ICAgICAgIGNhc2UgRFdfT1BfYnJlZzQ6CiAgICAgICAgY2FzZSBEV19PUF9icmVnNToKICAgICAg ICBjYXNlIERXX09QX2JyZWc2OgogICAgICAgIGNhc2UgRFdfT1BfYnJlZzc6CiAgICAgICAgY2Fz ZSBEV19PUF9icmVnODoKICAgICAgICBjYXNlIERXX09QX2JyZWc5OgogICAgICAgIGNhc2UgRFdf T1BfYnJlZzEwOgogICAgICAgIGNhc2UgRFdfT1BfYnJlZzExOgogICAgICAgIGNhc2UgRFdfT1Bf YnJlZzEyOgogICAgICAgIGNhc2UgRFdfT1BfYnJlZzEzOgogICAgICAgIGNhc2UgRFdfT1BfYnJl ZzE0OgogICAgICAgIGNhc2UgRFdfT1BfYnJlZzE1OgogICAgICAgIGNhc2UgRFdfT1BfYnJlZzE2 OgogICAgICAgIGNhc2UgRFdfT1BfYnJlZzE3OgogICAgICAgIGNhc2UgRFdfT1BfYnJlZzE4Ogog ICAgICAgIGNhc2UgRFdfT1BfYnJlZzE5OgogICAgICAgIGNhc2UgRFdfT1BfYnJlZzIwOgogICAg ICAgIGNhc2UgRFdfT1BfYnJlZzIxOgogICAgICAgIGNhc2UgRFdfT1BfYnJlZzIyOgogICAgICAg IGNhc2UgRFdfT1BfYnJlZzIzOgogICAgICAgIGNhc2UgRFdfT1BfYnJlZzI0OgogICAgICAgIGNh c2UgRFdfT1BfYnJlZzI1OgogICAgICAgIGNhc2UgRFdfT1BfYnJlZzI2OgogICAgICAgIGNhc2Ug RFdfT1BfYnJlZzI3OgogICAgICAgIGNhc2UgRFdfT1BfYnJlZzI4OgogICAgICAgIGNhc2UgRFdf T1BfYnJlZzI5OgogICAgICAgIGNhc2UgRFdfT1BfYnJlZzMwOgogICAgICAgIGNhc2UgRFdfT1Bf YnJlZzMxOgogICAgICAgICAgcHJpbnRmICgiRFdfT1BfYnJlZyVkOiAlbGQiLCBvcCAtIERXX09Q X2JyZWcwLAogICAgICAgICAgICAgICAgICByZWFkX2xlYjEyOCAoZGF0YSwgJmJ5dGVzX3JlYWQs IDEpKTsKICAgICAgICAgIGRhdGEgKz0gYnl0ZXNfcmVhZDsKICAgICAgICAgIGJyZWFrOwoKICAg ICAgICBjYXNlIERXX09QX3JlZ3g6CiAgICAgICAgICBwcmludGYgKCJEV19PUF9yZWd4OiAlbHUi LCByZWFkX2xlYjEyOCAoZGF0YSwgJmJ5dGVzX3JlYWQsIDApKTsKICAgICAgICAgIGRhdGEgKz0g Ynl0ZXNfcmVhZDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRFdfT1BfZmJyZWc6CiAg ICAgICAgICBwcmludGYgKCJEV19PUF9mYnJlZzogJWxkIiwgcmVhZF9sZWIxMjggKGRhdGEsICZi eXRlc19yZWFkLCAxKSk7CiAgICAgICAgICBkYXRhICs9IGJ5dGVzX3JlYWQ7CiAgICAgICAgICBi cmVhazsKICAgICAgICBjYXNlIERXX09QX2JyZWd4OgogICAgICAgICAgdXZhbHVlID0gcmVhZF9s ZWIxMjggKGRhdGEsICZieXRlc19yZWFkLCAwKTsKICAgICAgICAgIGRhdGEgKz0gYnl0ZXNfcmVh ZDsKICAgICAgICAgIHByaW50ZiAoIkRXX09QX2JyZWd4OiAlbHUgJWxkIiwgdXZhbHVlLAogICAg ICAgICAgICAgICAgICByZWFkX2xlYjEyOCAoZGF0YSwgJmJ5dGVzX3JlYWQsIDEpKTsKICAgICAg ICAgIGRhdGEgKz0gYnl0ZXNfcmVhZDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRFdf T1BfcGllY2U6CiAgICAgICAgICBwcmludGYgKCJEV19PUF9waWVjZTogJWx1IiwgcmVhZF9sZWIx MjggKGRhdGEsICZieXRlc19yZWFkLCAwKSk7CiAgICAgICAgICBkYXRhICs9IGJ5dGVzX3JlYWQ7 CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIERXX09QX2RlcmVmX3NpemU6CiAgICAgICAg ICBwcmludGYgKCJEV19PUF9kZXJlZl9zaXplOiAlbGQiLCAobG9uZykgYnl0ZV9nZXQgKGRhdGEr KywgMSkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBEV19PUF94ZGVyZWZfc2l6ZToK ICAgICAgICAgIHByaW50ZiAoIkRXX09QX3hkZXJlZl9zaXplOiAlbGQiLCAobG9uZykgYnl0ZV9n ZXQgKGRhdGErKywgMSkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBEV19PUF9ub3A6 CiAgICAgICAgICBwcmludGYgKCJEV19PUF9ub3AiKTsKICAgICAgICAgIGJyZWFrOwoKCiAgICAg ICAgY2FzZSBEV19PUF9wdXNoX29iamVjdF9hZGRyZXNzOgogICAgICAgICAgcHJpbnRmICgiRFdf T1BfcHVzaF9vYmplY3RfYWRkcmVzcyIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBE V19PUF9jYWxsMjoKICAgICAgICAgIHByaW50ZiAoIkRXX09QX2NhbGwyOiA8JWx4PiIsIChsb25n KSBieXRlX2dldCAoZGF0YSwgMikpOwogICAgICAgICAgZGF0YSArPSAyOwogICAgICAgICAgYnJl YWs7CiAgICAgICAgY2FzZSBEV19PUF9jYWxsNDoKICAgICAgICAgIHByaW50ZiAoIkRXX09QX2Nh bGw0OiA8JWx4PiIsIChsb25nKSBieXRlX2dldCAoZGF0YSwgNCkpOwogICAgICAgICAgZGF0YSAr PSA0OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBEV19PUF9jYWxsX3JlZjoKICAgICAg ICAgIHByaW50ZiAoIkRXX09QX2NhbGxfcmVmIik7CiAgICAgICAgICBicmVhazsKCgogICAgICAg IGNhc2UgRFdfT1BfR05VX3B1c2hfdGxzX2FkZHJlc3M6CiAgICAgICAgICBwcmludGYgKCJEV19P UF9HTlVfcHVzaF90bHNfYWRkcmVzcyIpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGRlZmF1 bHQ6CiAgICAgICAgICBpZiAob3AgPj0gMHhlMAogICAgICAgICAgICAgICYmIG9wIDw9IDB4ZmYp CiAgICAgICAgICAgIHByaW50ZiAoKCIoVXNlciBkZWZpbmVkIGxvY2F0aW9uIG9wKSIpKTsKICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgcHJpbnRmICgoIihVbmtub3duIGxvY2F0aW9uIG9wKSIp KTsKCiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKCiAgICAgIHByaW50ZiAoIjsgIik7CiAg ICB9Cn0KCnN0YXRpYyBjb25zdCBjaGFyICpkZWJ1Z19sb2NfY29udGVudHM7CnN0YXRpYyBiZmRf dm1hIGRlYnVnX2xvY19zaXplOwoKc3RhdGljIHZvaWQKbG9hZF9kZWJ1Z19sb2MgKGZpbGUpCiAg ICAgRklMRSAqZmlsZTsKewogIEVsZl9JbnRlcm5hbF9TaGRyICpzZWM7CiAgdW5zaWduZWQgaW50 IGk7CgoKICBpZiAoZGVidWdfbG9jX2NvbnRlbnRzICE9ICgodm9pZCAqKTApKQogICAgcmV0dXJu OwoKCiAgZm9yIChpID0gMCwgc2VjID0gc2VjdGlvbl9oZWFkZXJzOwogICAgICAgaSA8IGVsZl9o ZWFkZXIuZV9zaG51bTsKICAgICAgIGkrKywgc2VjKyspCiAgICBpZiAoX19leHRlbnNpb25fXyAo eyBzaXplX3QgX19zMV9sZW4sIF9fczJfbGVuOyAoX19idWlsdGluX2NvbnN0YW50X3AgKCgoc2Vj KSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190 YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1l KSkpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wICgiLmRlYnVnX2xvYyIpICYmIChfX3MxX2xlbiA9 IHN0cmxlbiAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25h bWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsg KHNlYyktPnNoX25hbWUpKSksIF9fczJfbGVuID0gc3RybGVuICgiLmRlYnVnX2xvYyIpLCAoISgo c2l6ZV90KShjb25zdCB2b2lkICopKCgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6 ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBz dHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9p ZCAqKSgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+ PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2Vj KS0+c2hfbmFtZSkpKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25z dCB2b2lkICopKCgiLmRlYnVnX2xvYyIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCIu ZGVidWdfbG9jIikgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21wICgoX19jb25zdCBj aGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFt ZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAo c2VjKS0+c2hfbmFtZSkpKSwgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z19sb2MiKSwgKF9fczFf bGVuIDwgX19zMl9sZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9j b25zdGFudF9wICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hf bmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUg KyAoc2VjKS0+c2hfbmFtZSkpKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKChzZWMpID09 ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxl X2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkg KyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxu b25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVw dD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkgPT0gMSkgJiYgKF9fczFfbGVu ID0gc3RybGVuICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hf bmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUg KyAoc2VjKS0+c2hfbmFtZSkpKSwgX19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRf cCAoIi5kZWJ1Z19sb2MiKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIi5kZWJ1Z19sb2Mi KSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiLmRlYnVnX2xvYyIpID09IDEpID8gKF9f ZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9u ZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+ IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpKVswXSAtICgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoIi5kZWJ1Z19sb2MiKSlbMF0pOyBpZiAoX19z MV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxu b25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVw dD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkpWzFdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z19sb2MiKSlbMV0pOyBpZiAo X19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8g Ijxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29y cnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkpWzJdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z19sb2MiKSlbMl0pOyBp ZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1 bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNv cnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpKVszXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZGVidWdfbG9jIikpWzNdKTsg fSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIu ZGVidWdfbG9jIik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+ IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIg OiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9f czFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8 bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1 cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpKVsxXSAtIF9fczJbMV0pOyBp ZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTAp ID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8 Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkpWzJdIC0gX19zMlsy XSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAq KTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkpWzNdIC0gX19z MlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIi5kZWJ1 Z19sb2MiKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIi5kZWJ1Z19sb2MiKSArIDEpIC0g KHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiLmRlYnVnX2xvYyIpID09IDEpICYmIChfX3MyX2xlbiA9 IHN0cmxlbiAoIi5kZWJ1Z19sb2MiKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3Rh bnRfcCAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUg Pj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNl YyktPnNoX25hbWUpKSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoc2VjKSA9PSAoKHZv aWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5n dGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpICsgMSkg LSAoc2l6ZV90KShjb25zdCB2b2lkICopKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4i IDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6 IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpID09IDEpID8gKF9fZXh0ZW5zaW9uX18g KHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMp LT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190 YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikoIi5kZWJ1Z19sb2MiKSlbMF0pOyBpZiAoX19zMl9sZW4gPiAwICYm IF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNl YyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5n X3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z19sb2MiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAx ICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAo KHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3Ry aW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z19sb2MiKSlbMl0pOyBpZiAoX19zMl9sZW4g PiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDog KChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0 cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZGVidWdfbG9jIikpWzNdKTsgfSB9IF9fcmVzdWx0 OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZv aWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5n dGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpOyByZWdp c3RlciBpbnQgX19yZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z19sb2MiKSlbMF07IGlmIChfX3MyX2xlbiA+IDAgJiYg X19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z19sb2MiKSlbMV0pOyBpZiAoX19zMl9s ZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZGVidWdfbG9jIikpWzJdKTsg aWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0g KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z19sb2Mi KSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKCgoc2VjKSA9PSAoKHZvaWQgKikw KSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAi PGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSksICIuZGVidWdfbG9j IikpKSk7IH0pID09IDApCiAgICAgIGJyZWFrOwoKICBpZiAoaSA9PSBlbGZfaGVhZGVyLmVfc2hu dW0gfHwgc2VjLT5zaF9zaXplID09IDApCiAgICByZXR1cm47CgogIGRlYnVnX2xvY19zaXplID0g c2VjLT5zaF9zaXplOwoKICBkZWJ1Z19sb2NfY29udGVudHMgPSAoKGNoYXIgKikKICAgICAgICAg ICAgICAgICAgICAgICAgZ2V0X2RhdGEgKCgodm9pZCAqKTApLCBmaWxlLCBzZWMtPnNoX29mZnNl dCwgc2VjLT5zaF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJkZWJ1 Z19sb2Mgc2VjdGlvbiBkYXRhIikpKTsKfQoKc3RhdGljIHZvaWQKZnJlZV9kZWJ1Z19sb2MgKCkK ewogIGlmIChkZWJ1Z19sb2NfY29udGVudHMgPT0gKCh2b2lkICopMCkpCiAgICByZXR1cm47Cgog IGZyZWUgKChjaGFyICopIGRlYnVnX2xvY19jb250ZW50cyk7CiAgZGVidWdfbG9jX2NvbnRlbnRz ID0gKCh2b2lkICopMCk7CiAgZGVidWdfbG9jX3NpemUgPSAwOwp9CgoKc3RhdGljIGludApkaXNw bGF5X2RlYnVnX2xvYyAoc2VjdGlvbiwgc3RhcnQsIGZpbGUpCiAgICAgRWxmX0ludGVybmFsX1No ZHIgKnNlY3Rpb247CiAgICAgdW5zaWduZWQgY2hhciAqc3RhcnQ7CiAgICAgRklMRSAqZmlsZSBf X2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwp7CiAgdW5zaWduZWQgY2hhciAqc2VjdGlvbl9l bmQ7CiAgdW5zaWduZWQgbG9uZyBieXRlczsKICB1bnNpZ25lZCBjaGFyICpzZWN0aW9uX2JlZ2lu ID0gc3RhcnQ7CiAgYmZkX3ZtYSBhZGRyOwoKICBhZGRyID0gc2VjdGlvbi0+c2hfYWRkcjsKICBi eXRlcyA9IHNlY3Rpb24tPnNoX3NpemU7CiAgc2VjdGlvbl9lbmQgPSBzdGFydCArIGJ5dGVzOwoK ICBpZiAoYnl0ZXMgPT0gMCkKICAgIHsKICAgICAgcHJpbnRmICgoIlxuVGhlIC5kZWJ1Z19sb2Mg c2VjdGlvbiBpcyBlbXB0eS5cbiIpKTsKICAgICAgcmV0dXJuIDA7CiAgICB9CgogIHByaW50ZiAo KCJDb250ZW50cyBvZiB0aGUgLmRlYnVnX2xvYyBzZWN0aW9uOlxuXG4iKSk7CiAgcHJpbnRmICgo IlxuICAgIE9mZnNldCAgIEJlZ2luICAgIEVuZCAgICAgIEV4cHJlc3Npb25cbiIpKTsKCiAgd2hp bGUgKHN0YXJ0IDwgc2VjdGlvbl9lbmQpCiAgICB7CiAgICAgIHVuc2lnbmVkIGxvbmcgYmVnaW47 CiAgICAgIHVuc2lnbmVkIGxvbmcgZW5kOwogICAgICB1bnNpZ25lZCBzaG9ydCBsZW5ndGg7CiAg ICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0OwoKICAgICAgb2Zmc2V0ID0gc3RhcnQgLSBzZWN0aW9u X2JlZ2luOwoKICAgICAgd2hpbGUgKDEpCiAgICAgICAgewoKCgoKCgogICAgICAgICAgYmVnaW4g PSBieXRlX2dldCAoc3RhcnQsIGRlYnVnX2xpbmVfcG9pbnRlcl9zaXplKTsKICAgICAgICAgIHN0 YXJ0ICs9IGRlYnVnX2xpbmVfcG9pbnRlcl9zaXplOwogICAgICAgICAgZW5kID0gYnl0ZV9nZXQg KHN0YXJ0LCBkZWJ1Z19saW5lX3BvaW50ZXJfc2l6ZSk7CiAgICAgICAgICBzdGFydCArPSBkZWJ1 Z19saW5lX3BvaW50ZXJfc2l6ZTsKCiAgICAgICAgICBpZiAoYmVnaW4gPT0gMCAmJiBlbmQgPT0g MCkKICAgICAgICAgICAgYnJlYWs7CgoKICAgICAgICAgIGlmIChiZWdpbiA9PSAweGZmZmZmZmZm KQogICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICBiZWdpbiArPSBhZGRyOwogICAgICAg ICAgZW5kICs9IGFkZHI7CgogICAgICAgICAgbGVuZ3RoID0gYnl0ZV9nZXQgKHN0YXJ0LCAyKTsK ICAgICAgICAgIHN0YXJ0ICs9IDI7CgogICAgICAgICAgcHJpbnRmICgiICAgICU4LjhseCAlOC44 bHggJTguOGx4ICgiLCBvZmZzZXQsIGJlZ2luLCBlbmQpOwogICAgICAgICAgZGVjb2RlX2xvY2F0 aW9uX2V4cHJlc3Npb24gKHN0YXJ0LCBkZWJ1Z19saW5lX3BvaW50ZXJfc2l6ZSwgbGVuZ3RoKTsK ICAgICAgICAgIHByaW50ZiAoIilcbiIpOwoKICAgICAgICAgIHN0YXJ0ICs9IGxlbmd0aDsKICAg ICAgICB9CiAgICAgIHByaW50ZiAoIlxuIik7CiAgICB9CiAgcmV0dXJuIDE7Cn0KCnN0YXRpYyBj b25zdCBjaGFyICpkZWJ1Z19zdHJfY29udGVudHM7CnN0YXRpYyBiZmRfdm1hIGRlYnVnX3N0cl9z aXplOwoKc3RhdGljIHZvaWQKbG9hZF9kZWJ1Z19zdHIgKGZpbGUpCiAgICAgRklMRSAqZmlsZTsK ewogIEVsZl9JbnRlcm5hbF9TaGRyICpzZWM7CiAgdW5zaWduZWQgaW50IGk7CgoKICBpZiAoZGVi dWdfc3RyX2NvbnRlbnRzICE9ICgodm9pZCAqKTApKQogICAgcmV0dXJuOwoKCiAgZm9yIChpID0g MCwgc2VjID0gc2VjdGlvbl9oZWFkZXJzOwogICAgICAgaSA8IGVsZl9oZWFkZXIuZV9zaG51bTsK ICAgICAgIGkrKywgc2VjKyspCiAgICBpZiAoX19leHRlbnNpb25fXyAoeyBzaXplX3QgX19zMV9s ZW4sIF9fczJfbGVuOyAoX19idWlsdGluX2NvbnN0YW50X3AgKCgoc2VjKSA9PSAoKHZvaWQgKikw KSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAi PGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpICYmIF9fYnVpbHRp bl9jb25zdGFudF9wICgiLmRlYnVnX3N0ciIpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoKChzZWMp ID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3Rh YmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUp KSksIF9fczJfbGVuID0gc3RybGVuICgiLmRlYnVnX3N0ciIpLCAoISgoc2l6ZV90KShjb25zdCB2 b2lkICopKCgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFt ZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAo c2VjKS0+c2hfbmFtZSkpKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKHNlYykgPT0g KCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVf bGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSA9 PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiLmRl YnVnX3N0ciIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCIuZGVidWdfc3RyIikgPT0g MSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21wICgoX19jb25zdCBjaGFyICopICgoKHNlYykg PT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFi bGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkp KSwgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z19zdHIiKSwgKF9fczFfbGVuIDwgX19zMl9sZW4g PyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKHNl YykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdf dGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFt ZSkpKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKChzZWMpID09ICgodm9pZCAqKTApID8g Ijxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29y cnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkgKyAxKSAtIChzaXplX3Qp KGNvbnN0IHZvaWQgKikoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYykt PnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3Rh YmxlICsgKHNlYyktPnNoX25hbWUpKSkgPT0gMSkgJiYgKF9fczFfbGVuID0gc3RybGVuICgoKHNl YykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdf dGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFt ZSkpKSwgX19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIi5kZWJ1Z19zdHIi KSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoIi5kZWJ1Z19zdHIiKSArIDEpIC0gKHNpemVf dCkoY29uc3Qgdm9pZCAqKSgiLmRlYnVnX3N0ciIpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsg cmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5z aF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJs ZSArIChzZWMpLT5zaF9uYW1lKSkpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikoIi5kZWJ1Z19zdHIiKSlbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYmIF9f cmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYykt PnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3Rh YmxlICsgKHNlYyktPnNoX25hbWUpKSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z19zdHIiKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYm IF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNl YyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5n X3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z19zdHIiKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAy ICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChz ZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmlu Z190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKCIuZGVidWdfc3RyIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9 KSkgOiAoX19leHRlbnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIgPSAoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZGVidWdfc3RyIik7IHJl Z2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hf bmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUg KyAoc2VjKS0+c2hfbmFtZSkpKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBf X3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMp LT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190 YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpKVsxXSAtIF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAx ICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAo KHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3Ry aW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xl biA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIg OiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDog c3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkpWzNdIC0gX19zMlszXSk7IH0gfSBfX3Jl c3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIi5kZWJ1Z19zdHIiKSAmJiAoKHNp emVfdCkoY29uc3Qgdm9pZCAqKSgoIi5kZWJ1Z19zdHIiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qg dm9pZCAqKSgiLmRlYnVnX3N0ciIpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxlbiAoIi5kZWJ1 Z19zdHIiKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoKChzZWMpID09 ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxl X2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkg JiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9u ZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+ IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpICsgMSkgLSAoc2l6ZV90KShjb25z dCB2b2lkICopKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9u YW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSAr IChzZWMpLT5zaF9uYW1lKSkpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50 IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0 cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5z aF9uYW1lKSkpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikoIi5kZWJ1Z19zdHIiKSlbMF0pOyBpZiAoX19zMl9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDAp IHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0g c3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYykt PnNoX25hbWUpKSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoIi5kZWJ1Z19zdHIiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09 IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUg Pj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNl YyktPnNoX25hbWUpKSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoIi5kZWJ1Z19zdHIiKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0 ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1l ID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChz ZWMpLT5zaF9uYW1lKSkpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKCIuZGVidWdfc3RyIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRl bnNpb25fXyAoeyBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczEgPSAoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9u ZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+ IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpOyByZWdpc3RlciBpbnQgX19yZXN1 bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoIi5kZWJ1Z19zdHIiKSlbMF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkg eyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoIi5kZWJ1Z19zdHIiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVz dWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKCIuZGVidWdfc3RyIikpWzJdKTsgaWYgKF9fczJfbGVuID4g MiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z19zdHIiKSlbM10pOyB9IH0gX19y ZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDog KChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0 cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSksICIuZGVidWdfc3RyIikpKSk7IH0pID09IDAp CiAgICAgIGJyZWFrOwoKICBpZiAoaSA9PSBlbGZfaGVhZGVyLmVfc2hudW0gfHwgc2VjLT5zaF9z aXplID09IDApCiAgICByZXR1cm47CgogIGRlYnVnX3N0cl9zaXplID0gc2VjLT5zaF9zaXplOwoK ICBkZWJ1Z19zdHJfY29udGVudHMgPSAoKGNoYXIgKikKICAgICAgICAgICAgICAgICAgICAgICAg Z2V0X2RhdGEgKCgodm9pZCAqKTApLCBmaWxlLCBzZWMtPnNoX29mZnNldCwgc2VjLT5zaF9zaXpl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJkZWJ1Z19zdHIgc2VjdGlvbiBk YXRhIikpKTsKfQoKc3RhdGljIHZvaWQKZnJlZV9kZWJ1Z19zdHIgKCkKewogIGlmIChkZWJ1Z19z dHJfY29udGVudHMgPT0gKCh2b2lkICopMCkpCiAgICByZXR1cm47CgogIGZyZWUgKChjaGFyICop IGRlYnVnX3N0cl9jb250ZW50cyk7CiAgZGVidWdfc3RyX2NvbnRlbnRzID0gKCh2b2lkICopMCk7 CiAgZGVidWdfc3RyX3NpemUgPSAwOwp9CgpzdGF0aWMgY29uc3QgY2hhciAqCmZldGNoX2luZGly ZWN0X3N0cmluZyAob2Zmc2V0KQogICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0Owp7CiAgaWYgKGRl YnVnX3N0cl9jb250ZW50cyA9PSAoKHZvaWQgKikwKSkKICAgIHJldHVybiAoIjxubyAuZGVidWdf c3RyIHNlY3Rpb24+Iik7CgogIGlmIChvZmZzZXQgPiBkZWJ1Z19zdHJfc2l6ZSkKICAgIHJldHVy biAoIjxvZmZzZXQgaXMgdG9vIGJpZz4iKTsKCiAgcmV0dXJuIGRlYnVnX3N0cl9jb250ZW50cyAr IG9mZnNldDsKfQoKc3RhdGljIGludApkaXNwbGF5X2RlYnVnX3N0ciAoc2VjdGlvbiwgc3RhcnQs IGZpbGUpCiAgICAgRWxmX0ludGVybmFsX1NoZHIgKnNlY3Rpb247CiAgICAgdW5zaWduZWQgY2hh ciAqc3RhcnQ7CiAgICAgRklMRSAqZmlsZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwp7 CiAgdW5zaWduZWQgbG9uZyBieXRlczsKICBiZmRfdm1hIGFkZHI7CgogIGFkZHIgPSBzZWN0aW9u LT5zaF9hZGRyOwogIGJ5dGVzID0gc2VjdGlvbi0+c2hfc2l6ZTsKCiAgaWYgKGJ5dGVzID09IDAp CiAgICB7CiAgICAgIHByaW50ZiAoKCJcblRoZSAuZGVidWdfc3RyIHNlY3Rpb24gaXMgZW1wdHku XG4iKSk7CiAgICAgIHJldHVybiAwOwogICAgfQoKICBwcmludGYgKCgiQ29udGVudHMgb2YgdGhl IC5kZWJ1Z19zdHIgc2VjdGlvbjpcblxuIikpOwoKICB3aGlsZSAoYnl0ZXMpCiAgICB7CiAgICAg IGludCBqOwogICAgICBpbnQgazsKICAgICAgaW50IGxieXRlczsKCiAgICAgIGxieXRlcyA9IChi eXRlcyA+IDE2ID8gMTYgOiBieXRlcyk7CgogICAgICBwcmludGYgKCIgIDB4JTguOGx4ICIsICh1 bnNpZ25lZCBsb25nKSBhZGRyKTsKCiAgICAgIGZvciAoaiA9IDA7IGogPCAxNjsgaisrKQogICAg ICAgIHsKICAgICAgICAgIGlmIChqIDwgbGJ5dGVzKQogICAgICAgICAgICBwcmludGYgKCIlMi4y eCIsIHN0YXJ0W2pdKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcHJpbnRmICgiICAiKTsK CiAgICAgICAgICBpZiAoKGogJiAzKSA9PSAzKQogICAgICAgICAgICBwcmludGYgKCIgIik7CiAg ICAgICAgfQoKICAgICAgZm9yIChqID0gMDsgaiA8IGxieXRlczsgaisrKQogICAgICAgIHsKICAg ICAgICAgIGsgPSBzdGFydFtqXTsKICAgICAgICAgIGlmIChrID49ICcgJyAmJiBrIDwgMHg4MCkK ICAgICAgICAgICAgcHJpbnRmICgiJWMiLCBrKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAg cHJpbnRmICgiLiIpOwogICAgICAgIH0KCiAgICAgIHB1dGNoYXIgKCdcbicpOwoKICAgICAgc3Rh cnQgKz0gbGJ5dGVzOwogICAgICBhZGRyICs9IGxieXRlczsKICAgICAgYnl0ZXMgLT0gbGJ5dGVz OwogICAgfQoKICByZXR1cm4gMTsKfQoKc3RhdGljIHVuc2lnbmVkIGNoYXIgKgpyZWFkX2FuZF9k aXNwbGF5X2F0dHJfdmFsdWUgKGF0dHJpYnV0ZSwgZm9ybSwgZGF0YSwgY3Vfb2Zmc2V0LCBwb2lu dGVyX3NpemUpCiAgICAgdW5zaWduZWQgbG9uZyBhdHRyaWJ1dGU7CiAgICAgdW5zaWduZWQgbG9u ZyBmb3JtOwogICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CiAgICAgdW5zaWduZWQgbG9uZyBjdV9v ZmZzZXQ7CiAgICAgdW5zaWduZWQgbG9uZyBwb2ludGVyX3NpemU7CnsKICB1bnNpZ25lZCBsb25n IHV2YWx1ZSA9IDA7CiAgdW5zaWduZWQgY2hhciAqYmxvY2tfc3RhcnQgPSAoKHZvaWQgKikwKTsK ICBpbnQgYnl0ZXNfcmVhZDsKCiAgc3dpdGNoIChmb3JtKQogICAgewogICAgZGVmYXVsdDoKICAg ICAgYnJlYWs7CgogICAgY2FzZSBEV19GT1JNX3JlZl9hZGRyOgogICAgY2FzZSBEV19GT1JNX2Fk ZHI6CiAgICAgIHV2YWx1ZSA9IGJ5dGVfZ2V0IChkYXRhLCBwb2ludGVyX3NpemUpOwogICAgICBk YXRhICs9IHBvaW50ZXJfc2l6ZTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBEV19GT1JNX3N0cnA6 CiAgICAgIHV2YWx1ZSA9IGJ5dGVfZ2V0IChkYXRhLCA0KTsKICAgICAgZGF0YSArPSA0OwogICAg ICBicmVhazsKCiAgICBjYXNlIERXX0ZPUk1fcmVmMToKICAgIGNhc2UgRFdfRk9STV9mbGFnOgog ICAgY2FzZSBEV19GT1JNX2RhdGExOgogICAgICB1dmFsdWUgPSBieXRlX2dldCAoZGF0YSsrLCAx KTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBEV19GT1JNX3JlZjI6CiAgICBjYXNlIERXX0ZPUk1f ZGF0YTI6CiAgICAgIHV2YWx1ZSA9IGJ5dGVfZ2V0IChkYXRhLCAyKTsKICAgICAgZGF0YSArPSAy OwogICAgICBicmVhazsKCiAgICBjYXNlIERXX0ZPUk1fcmVmNDoKICAgIGNhc2UgRFdfRk9STV9k YXRhNDoKICAgICAgdXZhbHVlID0gYnl0ZV9nZXQgKGRhdGEsIDQpOwogICAgICBkYXRhICs9IDQ7 CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgRFdfRk9STV9zZGF0YToKICAgICAgdXZhbHVlID0gcmVh ZF9sZWIxMjggKGRhdGEsICYgYnl0ZXNfcmVhZCwgMSk7CiAgICAgIGRhdGEgKz0gYnl0ZXNfcmVh ZDsKICAgICAgYnJlYWs7CgogICAgY2FzZSBEV19GT1JNX3JlZl91ZGF0YToKICAgIGNhc2UgRFdf Rk9STV91ZGF0YToKICAgICAgdXZhbHVlID0gcmVhZF9sZWIxMjggKGRhdGEsICYgYnl0ZXNfcmVh ZCwgMCk7CiAgICAgIGRhdGEgKz0gYnl0ZXNfcmVhZDsKICAgICAgYnJlYWs7CgogICAgY2FzZSBE V19GT1JNX2luZGlyZWN0OgogICAgICBmb3JtID0gcmVhZF9sZWIxMjggKGRhdGEsICYgYnl0ZXNf cmVhZCwgMCk7CiAgICAgIGRhdGEgKz0gYnl0ZXNfcmVhZDsKICAgICAgcHJpbnRmICgiICVzIiwg Z2V0X0ZPUk1fbmFtZSAoZm9ybSkpOwogICAgICByZXR1cm4gcmVhZF9hbmRfZGlzcGxheV9hdHRy X3ZhbHVlIChhdHRyaWJ1dGUsIGZvcm0sIGRhdGEsIGN1X29mZnNldCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlcl9zaXplKTsKICAgIH0KCiAgc3dpdGNo IChmb3JtKQogICAgewogICAgY2FzZSBEV19GT1JNX3JlZl9hZGRyOgogICAgICBwcmludGYgKCIg PCMlbHg+IiwgdXZhbHVlKTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBEV19GT1JNX3JlZjE6CiAg ICBjYXNlIERXX0ZPUk1fcmVmMjoKICAgIGNhc2UgRFdfRk9STV9yZWY0OgogICAgY2FzZSBEV19G T1JNX3JlZl91ZGF0YToKICAgICAgcHJpbnRmICgiIDwlbHg+IiwgdXZhbHVlICsgY3Vfb2Zmc2V0 KTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBEV19GT1JNX2FkZHI6CiAgICAgIHByaW50ZiAoIiAl I2x4IiwgdXZhbHVlKTsKCiAgICBjYXNlIERXX0ZPUk1fZmxhZzoKICAgIGNhc2UgRFdfRk9STV9k YXRhMToKICAgIGNhc2UgRFdfRk9STV9kYXRhMjoKICAgIGNhc2UgRFdfRk9STV9kYXRhNDoKICAg IGNhc2UgRFdfRk9STV9zZGF0YToKICAgIGNhc2UgRFdfRk9STV91ZGF0YToKICAgICAgcHJpbnRm ICgiICVsZCIsIHV2YWx1ZSk7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgRFdfRk9STV9yZWY4Ogog ICAgY2FzZSBEV19GT1JNX2RhdGE4OgogICAgICB1dmFsdWUgPSBieXRlX2dldCAoZGF0YSwgNCk7 CiAgICAgIHByaW50ZiAoIiAlbHgiLCB1dmFsdWUpOwogICAgICBwcmludGYgKCIgJWx4IiwgKHVu c2lnbmVkIGxvbmcpIGJ5dGVfZ2V0IChkYXRhICsgNCwgNCkpOwogICAgICBkYXRhICs9IDg7CiAg ICAgIGJyZWFrOwoKICAgIGNhc2UgRFdfRk9STV9zdHJpbmc6CiAgICAgIHByaW50ZiAoIiAlcyIs IGRhdGEpOwogICAgICBkYXRhICs9IHN0cmxlbiAoKGNoYXIgKikgZGF0YSkgKyAxOwogICAgICBi cmVhazsKCiAgICBjYXNlIERXX0ZPUk1fYmxvY2s6CiAgICAgIHV2YWx1ZSA9IHJlYWRfbGViMTI4 IChkYXRhLCAmIGJ5dGVzX3JlYWQsIDApOwogICAgICBibG9ja19zdGFydCA9IGRhdGEgKyBieXRl c19yZWFkOwogICAgICBkYXRhID0gZGlzcGxheV9ibG9jayAoYmxvY2tfc3RhcnQsIHV2YWx1ZSk7 CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgRFdfRk9STV9ibG9jazE6CiAgICAgIHV2YWx1ZSA9IGJ5 dGVfZ2V0IChkYXRhLCAxKTsKICAgICAgYmxvY2tfc3RhcnQgPSBkYXRhICsgMTsKICAgICAgZGF0 YSA9IGRpc3BsYXlfYmxvY2sgKGJsb2NrX3N0YXJ0LCB1dmFsdWUpOwogICAgICBicmVhazsKCiAg ICBjYXNlIERXX0ZPUk1fYmxvY2syOgogICAgICB1dmFsdWUgPSBieXRlX2dldCAoZGF0YSwgMik7 CiAgICAgIGJsb2NrX3N0YXJ0ID0gZGF0YSArIDI7CiAgICAgIGRhdGEgPSBkaXNwbGF5X2Jsb2Nr IChibG9ja19zdGFydCwgdXZhbHVlKTsKICAgICAgYnJlYWs7CgogICAgY2FzZSBEV19GT1JNX2Js b2NrNDoKICAgICAgdXZhbHVlID0gYnl0ZV9nZXQgKGRhdGEsIDQpOwogICAgICBibG9ja19zdGFy dCA9IGRhdGEgKyA0OwogICAgICBkYXRhID0gZGlzcGxheV9ibG9jayAoYmxvY2tfc3RhcnQsIHV2 YWx1ZSk7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgRFdfRk9STV9zdHJwOgogICAgICBwcmludGYg KCgiIChpbmRpcmVjdCBzdHJpbmcsIG9mZnNldDogMHglbHgpOiAlcyIpLAogICAgICAgICAgICAg IHV2YWx1ZSwgZmV0Y2hfaW5kaXJlY3Rfc3RyaW5nICh1dmFsdWUpKTsKICAgICAgYnJlYWs7Cgog ICAgY2FzZSBEV19GT1JNX2luZGlyZWN0OgoKICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAg ICAgd2FybiAoKCJVbnJlY29nbml6ZWQgZm9ybTogJWRcbiIpLCBmb3JtKTsKICAgICAgYnJlYWs7 CiAgICB9CgoKCiAgcHJpbnRmICgiXHQiKTsKCiAgc3dpdGNoIChhdHRyaWJ1dGUpCiAgICB7CiAg ICBjYXNlIERXX0FUX2lubGluZToKICAgICAgc3dpdGNoICh1dmFsdWUpCiAgICAgICAgewogICAg ICAgIGNhc2UgRFdfSU5MX25vdF9pbmxpbmVkOgogICAgICAgICAgcHJpbnRmICgoIihub3QgaW5s aW5lZCkiKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIERXX0lOTF9pbmxpbmVkOgog ICAgICAgICAgcHJpbnRmICgoIihpbmxpbmVkKSIpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAg IGNhc2UgRFdfSU5MX2RlY2xhcmVkX25vdF9pbmxpbmVkOgogICAgICAgICAgcHJpbnRmICgoIihk ZWNsYXJlZCBhcyBpbmxpbmUgYnV0IGlnbm9yZWQpIikpOwogICAgICAgICAgYnJlYWs7CiAgICAg ICAgY2FzZSBEV19JTkxfZGVjbGFyZWRfaW5saW5lZDoKICAgICAgICAgIHByaW50ZiAoKCIoZGVj bGFyZWQgYXMgaW5saW5lIGFuZCBpbmxpbmVkKSIpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAg IGRlZmF1bHQ6CiAgICAgICAgICBwcmludGYgKCgiICAoVW5rbm93biBpbmxpbmUgYXR0cmlidXRl IHZhbHVlOiAlbHgpIiksIHV2YWx1ZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAg IGJyZWFrOwoKICAgIGNhc2UgRFdfQVRfbGFuZ3VhZ2U6CiAgICAgIHN3aXRjaCAodXZhbHVlKQog ICAgICAgIHsKICAgICAgICBjYXNlIERXX0xBTkdfQzogcHJpbnRmICgiKG5vbi1BTlNJIEMpIik7 IGJyZWFrOwogICAgICAgIGNhc2UgRFdfTEFOR19DODk6IHByaW50ZiAoIihBTlNJIEMpIik7IGJy ZWFrOwogICAgICAgIGNhc2UgRFdfTEFOR19DX3BsdXNfcGx1czogcHJpbnRmICgiKEMrKykiKTsg YnJlYWs7CiAgICAgICAgY2FzZSBEV19MQU5HX0ZvcnRyYW43NzogcHJpbnRmICgiKEZPUlRSQU4g NzcpIik7IGJyZWFrOwogICAgICAgIGNhc2UgRFdfTEFOR19Gb3J0cmFuOTA6IHByaW50ZiAoIihG b3J0cmFuIDkwKSIpOyBicmVhazsKICAgICAgICBjYXNlIERXX0xBTkdfTW9kdWxhMjogcHJpbnRm ICgiKE1vZHVsYSAyKSIpOyBicmVhazsKICAgICAgICBjYXNlIERXX0xBTkdfUGFzY2FsODM6IHBy aW50ZiAoIihBTlNJIFBhc2NhbCkiKTsgYnJlYWs7CiAgICAgICAgY2FzZSBEV19MQU5HX0FkYTgz OiBwcmludGYgKCIoQWRhKSIpOyBicmVhazsKICAgICAgICBjYXNlIERXX0xBTkdfQ29ib2w3NDog cHJpbnRmICgiKENvYm9sIDc0KSIpOyBicmVhazsKICAgICAgICBjYXNlIERXX0xBTkdfQ29ib2w4 NTogcHJpbnRmICgiKENvYm9sIDg1KSIpOyBicmVhazsKCiAgICAgICAgY2FzZSBEV19MQU5HX0M5 OTogcHJpbnRmICgiKEFOU0kgQzk5KSIpOyBicmVhazsKICAgICAgICBjYXNlIERXX0xBTkdfQWRh OTU6IHByaW50ZiAoIihBREEgOTUpIik7IGJyZWFrOwogICAgICAgIGNhc2UgRFdfTEFOR19Gb3J0 cmFuOTU6IHByaW50ZiAoIihGb3J0cmFuIDk1KSIpOyBicmVhazsKCiAgICAgICAgY2FzZSBEV19M QU5HX01pcHNfQXNzZW1ibGVyOiBwcmludGYgKCIoTUlQUyBhc3NlbWJsZXIpIik7IGJyZWFrOwoK ICAgICAgICBjYXNlIERXX0xBTkdfVXBjOiBwcmludGYgKCIoVW5pZmllZCBQYXJhbGxlbCBDKSIp OyBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcHJpbnRmICgiKFVua25vd246ICVs eCkiLCB1dmFsdWUpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBicmVhazsKCiAg ICBjYXNlIERXX0FUX2VuY29kaW5nOgogICAgICBzd2l0Y2ggKHV2YWx1ZSkKICAgICAgICB7CiAg ICAgICAgY2FzZSBEV19BVEVfdm9pZDogcHJpbnRmICgiKHZvaWQpIik7IGJyZWFrOwogICAgICAg IGNhc2UgRFdfQVRFX2FkZHJlc3M6IHByaW50ZiAoIihtYWNoaW5lIGFkZHJlc3MpIik7IGJyZWFr OwogICAgICAgIGNhc2UgRFdfQVRFX2Jvb2xlYW46IHByaW50ZiAoIihib29sZWFuKSIpOyBicmVh azsKICAgICAgICBjYXNlIERXX0FURV9jb21wbGV4X2Zsb2F0OiBwcmludGYgKCIoY29tcGxleCBm bG9hdCkiKTsgYnJlYWs7CiAgICAgICAgY2FzZSBEV19BVEVfZmxvYXQ6IHByaW50ZiAoIihmbG9h dCkiKTsgYnJlYWs7CiAgICAgICAgY2FzZSBEV19BVEVfc2lnbmVkOiBwcmludGYgKCIoc2lnbmVk KSIpOyBicmVhazsKICAgICAgICBjYXNlIERXX0FURV9zaWduZWRfY2hhcjogcHJpbnRmICgiKHNp Z25lZCBjaGFyKSIpOyBicmVhazsKICAgICAgICBjYXNlIERXX0FURV91bnNpZ25lZDogcHJpbnRm ICgiKHVuc2lnbmVkKSIpOyBicmVhazsKICAgICAgICBjYXNlIERXX0FURV91bnNpZ25lZF9jaGFy OiBwcmludGYgKCIodW5zaWduZWQgY2hhcikiKTsgYnJlYWs7CgogICAgICAgIGNhc2UgRFdfQVRF X2ltYWdpbmFyeV9mbG9hdDogcHJpbnRmICgiKGltYWdpbmFyeSBmbG9hdCkiKTsgYnJlYWs7CiAg ICAgICAgZGVmYXVsdDoKICAgICAgICAgIGlmICh1dmFsdWUgPj0gMHg4MAogICAgICAgICAgICAg ICYmIHV2YWx1ZSA8PSAweGZmKQogICAgICAgICAgICBwcmludGYgKCIodXNlciBkZWZpbmVkIHR5 cGUpIik7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHByaW50ZiAoIih1bmtub3duIHR5cGUp Iik7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgRFdf QVRfYWNjZXNzaWJpbGl0eToKICAgICAgc3dpdGNoICh1dmFsdWUpCiAgICAgICAgewogICAgICAg IGNhc2UgRFdfQUNDRVNTX3B1YmxpYzogcHJpbnRmICgiKHB1YmxpYykiKTsgYnJlYWs7CiAgICAg ICAgY2FzZSBEV19BQ0NFU1NfcHJvdGVjdGVkOiBwcmludGYgKCIocHJvdGVjdGVkKSIpOyBicmVh azsKICAgICAgICBjYXNlIERXX0FDQ0VTU19wcml2YXRlOiBwcmludGYgKCIocHJpdmF0ZSkiKTsg YnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHByaW50ZiAoIih1bmtub3duIGFjY2Vz c2liaWxpdHkpIik7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGJyZWFrOwoKICAg IGNhc2UgRFdfQVRfdmlzaWJpbGl0eToKICAgICAgc3dpdGNoICh1dmFsdWUpCiAgICAgICAgewog ICAgICAgIGNhc2UgRFdfVklTX2xvY2FsOiBwcmludGYgKCIobG9jYWwpIik7IGJyZWFrOwogICAg ICAgIGNhc2UgRFdfVklTX2V4cG9ydGVkOiBwcmludGYgKCIoZXhwb3J0ZWQpIik7IGJyZWFrOwog ICAgICAgIGNhc2UgRFdfVklTX3F1YWxpZmllZDogcHJpbnRmICgiKHF1YWxpZmllZCkiKTsgYnJl YWs7CiAgICAgICAgZGVmYXVsdDogcHJpbnRmICgiKHVua25vd24gdmlzaWJpbGl0eSkiKTsgYnJl YWs7CiAgICAgICAgfQogICAgICBicmVhazsKCiAgICBjYXNlIERXX0FUX3ZpcnR1YWxpdHk6CiAg ICAgIHN3aXRjaCAodXZhbHVlKQogICAgICAgIHsKICAgICAgICBjYXNlIERXX1ZJUlRVQUxJVFlf bm9uZTogcHJpbnRmICgiKG5vbmUpIik7IGJyZWFrOwogICAgICAgIGNhc2UgRFdfVklSVFVBTElU WV92aXJ0dWFsOiBwcmludGYgKCIodmlydHVhbCkiKTsgYnJlYWs7CiAgICAgICAgY2FzZSBEV19W SVJUVUFMSVRZX3B1cmVfdmlydHVhbDpwcmludGYgKCIocHVyZV92aXJ0dWFsKSIpOyBicmVhazsK ICAgICAgICBkZWZhdWx0OiBwcmludGYgKCIodW5rbm93biB2aXJ0dWFsaXR5KSIpOyBicmVhazsK ICAgICAgICB9CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgRFdfQVRfaWRlbnRpZmllcl9jYXNlOgog ICAgICBzd2l0Y2ggKHV2YWx1ZSkKICAgICAgICB7CiAgICAgICAgY2FzZSBEV19JRF9jYXNlX3Nl bnNpdGl2ZTogcHJpbnRmICgiKGNhc2Vfc2Vuc2l0aXZlKSIpOyBicmVhazsKICAgICAgICBjYXNl IERXX0lEX3VwX2Nhc2U6IHByaW50ZiAoIih1cF9jYXNlKSIpOyBicmVhazsKICAgICAgICBjYXNl IERXX0lEX2Rvd25fY2FzZTogcHJpbnRmICgiKGRvd25fY2FzZSkiKTsgYnJlYWs7CiAgICAgICAg Y2FzZSBEV19JRF9jYXNlX2luc2Vuc2l0aXZlOiBwcmludGYgKCIoY2FzZV9pbnNlbnNpdGl2ZSki KTsgYnJlYWs7CiAgICAgICAgZGVmYXVsdDogcHJpbnRmICgiKHVua25vd24gY2FzZSkiKTsgYnJl YWs7CiAgICAgICAgfQogICAgICBicmVhazsKCiAgICBjYXNlIERXX0FUX2NhbGxpbmdfY29udmVu dGlvbjoKICAgICAgc3dpdGNoICh1dmFsdWUpCiAgICAgICAgewogICAgICAgIGNhc2UgRFdfQ0Nf bm9ybWFsOiBwcmludGYgKCIobm9ybWFsKSIpOyBicmVhazsKICAgICAgICBjYXNlIERXX0NDX3By b2dyYW06IHByaW50ZiAoIihwcm9ncmFtKSIpOyBicmVhazsKICAgICAgICBjYXNlIERXX0NDX25v Y2FsbDogcHJpbnRmICgiKG5vY2FsbCkiKTsgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAg ICAgIGlmICh1dmFsdWUgPj0gMHg0MAogICAgICAgICAgICAgICYmIHV2YWx1ZSA8PSAweGZmKQog ICAgICAgICAgICBwcmludGYgKCIodXNlciBkZWZpbmVkKSIpOwogICAgICAgICAgZWxzZQogICAg ICAgICAgICBwcmludGYgKCIodW5rbm93biBjb252ZW50aW9uKSIpOwogICAgICAgIH0KICAgICAg YnJlYWs7CgogICAgY2FzZSBEV19BVF9vcmRlcmluZzoKICAgICAgc3dpdGNoICh1dmFsdWUpCiAg ICAgICAgewogICAgICAgIGNhc2UgLTE6IHByaW50ZiAoIih1bmRlZmluZWQpIik7IGJyZWFrOwog ICAgICAgIGNhc2UgMDogcHJpbnRmICgiKHJvdyBtYWpvcikiKTsgYnJlYWs7CiAgICAgICAgY2Fz ZSAxOiBwcmludGYgKCIoY29sdW1uIG1ham9yKSIpOyBicmVhazsKICAgICAgICB9CiAgICAgIGJy ZWFrOwoKICAgIGNhc2UgRFdfQVRfZnJhbWVfYmFzZToKICAgIGNhc2UgRFdfQVRfbG9jYXRpb246 CiAgICBjYXNlIERXX0FUX2RhdGFfbWVtYmVyX2xvY2F0aW9uOgogICAgY2FzZSBEV19BVF92dGFi bGVfZWxlbV9sb2NhdGlvbjoKICAgIGNhc2UgRFdfQVRfYWxsb2NhdGVkOgogICAgY2FzZSBEV19B VF9hc3NvY2lhdGVkOgogICAgY2FzZSBEV19BVF9kYXRhX2xvY2F0aW9uOgogICAgY2FzZSBEV19B VF9zdHJpZGU6CiAgICBjYXNlIERXX0FUX3VwcGVyX2JvdW5kOgogICAgY2FzZSBEV19BVF9sb3dl cl9ib3VuZDoKICAgICAgaWYgKGJsb2NrX3N0YXJ0KQogICAgICAgIHsKICAgICAgICAgIHByaW50 ZiAoIigiKTsKICAgICAgICAgIGRlY29kZV9sb2NhdGlvbl9leHByZXNzaW9uIChibG9ja19zdGFy dCwgcG9pbnRlcl9zaXplLCB1dmFsdWUpOwogICAgICAgICAgcHJpbnRmICgiKSIpOwogICAgICAg IH0KICAgICAgZWxzZSBpZiAoZm9ybSA9PSBEV19GT1JNX2RhdGE0KQogICAgICAgIHsKICAgICAg ICAgIHByaW50ZiAoIigiKTsKICAgICAgICAgIHByaW50ZiAoImxvY2F0aW9uIGxpc3QiKTsKICAg ICAgICAgIHByaW50ZiAoIikiKTsKICAgICAgICB9CiAgICAgIGJyZWFrOwoKICAgIGRlZmF1bHQ6 CiAgICAgIGJyZWFrOwogICAgfQoKICByZXR1cm4gZGF0YTsKfQoKc3RhdGljIHVuc2lnbmVkIGNo YXIgKgpyZWFkX2FuZF9kaXNwbGF5X2F0dHIgKGF0dHJpYnV0ZSwgZm9ybSwgZGF0YSwgY3Vfb2Zm c2V0LCBwb2ludGVyX3NpemUpCiAgICAgdW5zaWduZWQgbG9uZyBhdHRyaWJ1dGU7CiAgICAgdW5z aWduZWQgbG9uZyBmb3JtOwogICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CiAgICAgdW5zaWduZWQg bG9uZyBjdV9vZmZzZXQ7CiAgICAgdW5zaWduZWQgbG9uZyBwb2ludGVyX3NpemU7CnsKICBwcmlu dGYgKCIgICAgICUtMThzOiIsIGdldF9BVF9uYW1lIChhdHRyaWJ1dGUpKTsKICBkYXRhID0gcmVh ZF9hbmRfZGlzcGxheV9hdHRyX3ZhbHVlIChhdHRyaWJ1dGUsIGZvcm0sIGRhdGEsIGN1X29mZnNl dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyX3NpemUpOwog IHByaW50ZiAoIlxuIik7CiAgcmV0dXJuIGRhdGE7Cn0KCnN0YXRpYyBpbnQKZGlzcGxheV9kZWJ1 Z19pbmZvIChzZWN0aW9uLCBzdGFydCwgZmlsZSkKICAgICBFbGZfSW50ZXJuYWxfU2hkciAqc2Vj dGlvbjsKICAgICB1bnNpZ25lZCBjaGFyICpzdGFydDsKICAgICBGSUxFICpmaWxlOwp7CiAgdW5z aWduZWQgY2hhciAqZW5kID0gc3RhcnQgKyBzZWN0aW9uLT5zaF9zaXplOwogIHVuc2lnbmVkIGNo YXIgKnNlY3Rpb25fYmVnaW4gPSBzdGFydDsKCiAgcHJpbnRmICgoIlRoZSBzZWN0aW9uICVzIGNv bnRhaW5zOlxuXG4iKSwgKChzZWN0aW9uKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChz ZWN0aW9uKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBz dHJpbmdfdGFibGUgKyAoc2VjdGlvbiktPnNoX25hbWUpKSk7CgogIGxvYWRfZGVidWdfc3RyIChm aWxlKTsKICBsb2FkX2RlYnVnX2xvYyAoZmlsZSk7CgogIHdoaWxlIChzdGFydCA8IGVuZCkKICAg IHsKICAgICAgRFdBUkYyX0V4dGVybmFsX0NvbXBVbml0ICpleHRlcm5hbDsKICAgICAgRFdBUkYy X0ludGVybmFsX0NvbXBVbml0IGNvbXB1bml0OwogICAgICBFbGZfSW50ZXJuYWxfU2hkciAqcmVs c2VjOwogICAgICB1bnNpZ25lZCBjaGFyICp0YWdzOwogICAgICB1bnNpZ25lZCBpbnQgaTsKICAg ICAgaW50IGxldmVsOwogICAgICB1bnNpZ25lZCBsb25nIGN1X29mZnNldDsKCiAgICAgIGV4dGVy bmFsID0gKERXQVJGMl9FeHRlcm5hbF9Db21wVW5pdCAqKSBzdGFydDsKCiAgICAgIGNvbXB1bml0 LmN1X2xlbmd0aCA9IGJ5dGVfZ2V0IChleHRlcm5hbC0+Y3VfbGVuZ3RoLCBzaXplb2YgKGV4dGVy bmFsLT5jdV9sZW5ndGgpKTsKICAgICAgY29tcHVuaXQuY3VfdmVyc2lvbiA9IGJ5dGVfZ2V0IChl eHRlcm5hbC0+Y3VfdmVyc2lvbiwgc2l6ZW9mIChleHRlcm5hbC0+Y3VfdmVyc2lvbikpOwogICAg ICBjb21wdW5pdC5jdV9hYmJyZXZfb2Zmc2V0ID0gYnl0ZV9nZXQgKGV4dGVybmFsLT5jdV9hYmJy ZXZfb2Zmc2V0LCBzaXplb2YgKGV4dGVybmFsLT5jdV9hYmJyZXZfb2Zmc2V0KSk7CiAgICAgIGNv bXB1bml0LmN1X3BvaW50ZXJfc2l6ZSA9IGJ5dGVfZ2V0IChleHRlcm5hbC0+Y3VfcG9pbnRlcl9z aXplLCBzaXplb2YgKGV4dGVybmFsLT5jdV9wb2ludGVyX3NpemUpKTsKCiAgICAgIGlmIChjb21w dW5pdC5jdV9sZW5ndGggPT0gMHhmZmZmZmZmZikKICAgICAgICB7CiAgICAgICAgICB3YXJuICgo IjY0LWJpdCBEV0FSRiBkZWJ1ZyBpbmZvIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LlxuIikpOwogICAg ICAgICAgYnJlYWs7CiAgICAgICAgfQoKCgogICAgICBmb3IgKHJlbHNlYyA9IHNlY3Rpb25faGVh ZGVyczsKICAgICAgICAgICByZWxzZWMgPCBzZWN0aW9uX2hlYWRlcnMgKyBlbGZfaGVhZGVyLmVf c2hudW07CiAgICAgICAgICAgKytyZWxzZWMpCiAgICAgICAgewogICAgICAgICAgdW5zaWduZWQg bG9uZyBucmVsYXM7CiAgICAgICAgICBFbGZfSW50ZXJuYWxfUmVsYSAqcmVsYSwgKnJwOwogICAg ICAgICAgRWxmX0ludGVybmFsX1NoZHIgKnN5bXNlYzsKICAgICAgICAgIEVsZl9JbnRlcm5hbF9T eW0gKnN5bXRhYjsKICAgICAgICAgIEVsZl9JbnRlcm5hbF9TeW0gKnN5bTsKCiAgICAgICAgICBp ZiAocmVsc2VjLT5zaF90eXBlICE9IDQKICAgICAgICAgICAgICB8fCAoc2VjdGlvbl9oZWFkZXJz ICsgKChyZWxzZWMtPnNoX2luZm8pIDwgMHhGRjAwID8gKHJlbHNlYy0+c2hfaW5mbykgOiAoKHJl bHNlYy0+c2hfaW5mbykgPD0gMHhGRkZGID8gMCA6IChyZWxzZWMtPnNoX2luZm8pIC0gKDB4RkZG RiArIDEgLSAweEZGMDApKSkpICE9IHNlY3Rpb24KICAgICAgICAgICAgICB8fCByZWxzZWMtPnNo X3NpemUgPT0gMCkKICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgaWYgKCFzbHVycF9y ZWxhX3JlbG9jcyAoZmlsZSwgcmVsc2VjLT5zaF9vZmZzZXQsIHJlbHNlYy0+c2hfc2l6ZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgcmVsYSwgJiBucmVsYXMpKQogICAgICAg ICAgICByZXR1cm4gMDsKCiAgICAgICAgICBzeW1zZWMgPSAoc2VjdGlvbl9oZWFkZXJzICsgKChy ZWxzZWMtPnNoX2xpbmspIDwgMHhGRjAwID8gKHJlbHNlYy0+c2hfbGluaykgOiAoKHJlbHNlYy0+ c2hfbGluaykgPD0gMHhGRkZGID8gMCA6IChyZWxzZWMtPnNoX2xpbmspIC0gKDB4RkZGRiArIDEg LSAweEZGMDApKSkpOwogICAgICAgICAgc3ltdGFiID0gKGlzXzMyYml0X2VsZiA/IGdldF8zMmJp dF9lbGZfc3ltYm9scyAoZmlsZSwgc3ltc2VjKSA6IGdldF82NGJpdF9lbGZfc3ltYm9scyAoZmls ZSwgc3ltc2VjKSk7CgogICAgICAgICAgZm9yIChycCA9IHJlbGE7IHJwIDwgcmVsYSArIG5yZWxh czsgKytycCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChycC0+cl9vZmZzZXQKICAg ICAgICAgICAgICAgICAgIT0gKGJmZF92bWEpICgodW5zaWduZWQgY2hhciAqKSAmZXh0ZXJuYWwt PmN1X2FiYnJldl9vZmZzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIHNlY3Rp b25fYmVnaW4pKQogICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICAgIGlmIChp c18zMmJpdF9lbGYpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN5bSA9IHN5 bXRhYiArICgocnAtPnJfaW5mbykgPj4gOCk7CgogICAgICAgICAgICAgICAgICBpZiAoKChycC0+ cl9pbmZvKSA+PiA4KSAhPSAwCiAgICAgICAgICAgICAgICAgICAgICAmJiAoKHN5bS0+c3RfaW5m bykgJiAweEYpICE9IDMpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg ICAgd2FybiAoKCJTa2lwcGluZyB1bmV4cGVjdGVkIHN5bWJvbCB0eXBlICV1XG4iKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgoc3ltLT5zdF9pbmZvKSAmIDB4RikpOwogICAgICAgICAg ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgc3ltID0gc3ltdGFiICsgKChycC0+cl9pbmZvKSA+PiAzMik7CgogICAgICAgICAgICAgICAg ICBpZiAoKChycC0+cl9pbmZvKSA+PiAzMikgIT0gMAogICAgICAgICAgICAgICAgICAgICAgJiYg KChzeW0tPnN0X2luZm8pICYgMHhGKSAhPSAzKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgIHdhcm4gKCgiU2tpcHBpbmcgdW5leHBlY3RlZCBzeW1ib2wgdHlwZSAl dVxuIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHN5bS0+c3RfaW5mbykgJiAweEYp KTsKICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgY29tcHVuaXQuY3VfYWJicmV2X29mZnNl dCA9IHJwLT5yX2FkZGVuZDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAg ICAgICAgIGZyZWUgKHJlbGEpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgdGFn cyA9IHN0YXJ0ICsgc2l6ZW9mICgqZXh0ZXJuYWwpOwogICAgICBjdV9vZmZzZXQgPSBzdGFydCAt IHNlY3Rpb25fYmVnaW47CiAgICAgIHN0YXJ0ICs9IGNvbXB1bml0LmN1X2xlbmd0aCArIHNpemVv ZiAoZXh0ZXJuYWwtPmN1X2xlbmd0aCk7CgogICAgICBwcmludGYgKCgiICBDb21waWxhdGlvbiBV bml0IEAgJWx4OlxuIiksIGN1X29mZnNldCk7CiAgICAgIHByaW50ZiAoKCIgICBMZW5ndGg6ICAg ICAgICAlbGRcbiIpLCBjb21wdW5pdC5jdV9sZW5ndGgpOwogICAgICBwcmludGYgKCgiICAgVmVy c2lvbjogICAgICAgJWRcbiIpLCBjb21wdW5pdC5jdV92ZXJzaW9uKTsKICAgICAgcHJpbnRmICgo IiAgIEFiYnJldiBPZmZzZXQ6ICVsZFxuIiksIGNvbXB1bml0LmN1X2FiYnJldl9vZmZzZXQpOwog ICAgICBwcmludGYgKCgiICAgUG9pbnRlciBTaXplOiAgJWRcbiIpLCBjb21wdW5pdC5jdV9wb2lu dGVyX3NpemUpOwoKICAgICAgaWYgKGNvbXB1bml0LmN1X3ZlcnNpb24gIT0gMikKICAgICAgICB7 CiAgICAgICAgICB3YXJuICgoIk9ubHkgdmVyc2lvbiAyIERXQVJGIGRlYnVnIGluZm9ybWF0aW9u IGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQuXG4iKSk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAg ICB9CgogICAgICBmcmVlX2FiYnJldnMgKCk7CgoKICAgICAgewogICAgICAgIEVsZl9JbnRlcm5h bF9TaGRyICpzZWM7CiAgICAgICAgdW5zaWduZWQgY2hhciAqYmVnaW47CgoKICAgICAgICBmb3Ig KGkgPSAwLCBzZWMgPSBzZWN0aW9uX2hlYWRlcnM7CiAgICAgICAgICAgICBpIDwgZWxmX2hlYWRl ci5lX3NobnVtOwogICAgICAgICAgICAgaSsrLCBzZWMrKykKICAgICAgICAgIGlmIChfX2V4dGVu c2lvbl9fICh7IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRf cCAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0g c3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYykt PnNoX25hbWUpKSkgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKCIuZGVidWdfYWJicmV2IikgJiYg KF9fczFfbGVuID0gc3RybGVuICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgo c2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJp bmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSwgX19zMl9sZW4gPSBzdHJsZW4gKCIuZGVidWdf YWJicmV2IiksICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCgoc2VjKSA9PSAoKHZvaWQgKikw KSA/ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAi PGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpICsgMSkgLSAoc2l6 ZV90KShjb25zdCB2b2lkICopKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChz ZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmlu Z190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpID09IDEpIHx8IF9fczFfbGVuID49IDQpICYmICgh KChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCIuZGVidWdfYWJicmV2IikgKyAxKSAtIChzaXplX3Qp KGNvbnN0IHZvaWQgKikoIi5kZWJ1Z19hYmJyZXYiKSA9PSAxKSB8fCBfX3MyX2xlbiA+PSA0KSkg PyBtZW1jbXAgKChfX2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9u ZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+ IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpLCAoX19jb25zdCBjaGFyICopICgi LmRlYnVnX2FiYnJldiIpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVuIDogX19zMl9s ZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNv cnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpICYmICgoc2l6ZV90KShj b25zdCB2b2lkICopKCgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+ c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFi bGUgKyAoc2VjKS0+c2hfbmFtZSkpKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKHNl YykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdf dGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFt ZSkpKSA9PSAxKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ ICI8bm9uZT4iIDogKChzZWMpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNv cnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpLCBfX3MxX2xlbiA8IDQp ID8gKF9fYnVpbHRpbl9jb25zdGFudF9wICgiLmRlYnVnX2FiYnJldiIpICYmICgoc2l6ZV90KShj b25zdCB2b2lkICopKCgiLmRlYnVnX2FiYnJldiIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lk ICopKCIuZGVidWdfYWJicmV2IikgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBp bnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0g c3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYykt PnNoX25hbWUpKSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSgiLmRlYnVnX2FiYnJldiIpKVswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQg PT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFt ZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAo c2VjKS0+c2hfbmFtZSkpKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopICgiLmRlYnVnX2FiYnJldiIpKVsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19y ZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+ c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFi bGUgKyAoc2VjKS0+c2hfbmFtZSkpKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopICgiLmRlYnVnX2FiYnJldiIpKVsyXSk7IGlmIChfX3MxX2xlbiA+IDIg JiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNl YyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5n X3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z19hYmJyZXYiKSlbM10pOyB9IH0gX19yZXN1bHQ7 IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMiA9IChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z19hYmJyZXYi KTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCgoc2VjKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWMp LT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190 YWJsZSArIChzZWMpLT5zaF9uYW1lKSkpKVswXSAtIF9fczJbMF0pOyBpZiAoX19zMV9sZW4gPiAw ICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAo KHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3Ry aW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xl biA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+ IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIg OiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9f czFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5v bmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0 PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSlbM10gLSBfX3MyWzNdKTsgfSB9 IF9fcmVzdWx0OyB9KSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgiLmRlYnVnX2FiYnJldiIp ICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiLmRlYnVnX2FiYnJldiIpICsgMSkgLSAoc2l6 ZV90KShjb25zdCB2b2lkICopKCIuZGVidWdfYWJicmV2IikgPT0gMSkgJiYgKF9fczJfbGVuID0g c3RybGVuICgiLmRlYnVnX2FiYnJldiIpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25z dGFudF9wICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjKS0+c2hfbmFt ZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAo c2VjKS0+c2hfbmFtZSkpKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKChzZWMpID09ICgo dm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xl bmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkgKyAx KSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25l PiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4i IDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkgPT0gMSkgPyAoX19leHRlbnNpb25f XyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNl YyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5n X3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSgiLmRlYnVnX2FiYnJldiIpKVswXSk7IGlmIChfX3MyX2xlbiA+ IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hh ciAqKSAoX19jb25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6 ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBz dHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLmRlYnVnX2FiYnJldiIpKVsxXSk7IGlmIChfX3My X2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKHNlYykgPT0gKCh2b2lkICopMCkgPyAiPG5v bmU+IiA6ICgoc2VjKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0 PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjKS0+c2hfbmFtZSkpKSlbMl0gLSAoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLmRlYnVnX2FiYnJldiIpKVsyXSk7IGlm IChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWMpID09ICgodm9pZCAqKTApID8g Ijxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29y cnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNoX25hbWUpKSkpWzNdIC0gKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5kZWJ1Z19hYmJyZXYiKSlbM10p OyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQg Y2hhciAqX19zMSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo KChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUgPj0gc3Ry aW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlYyktPnNo X25hbWUpKSk7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9IF9fczFbMF0gLSAoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLmRlYnVnX2FiYnJldiIpKVswXTsgaWYg KF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLmRlYnVnX2FiYnJl diIpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9 IChfX3MxWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo Ii5kZWJ1Z19hYmJyZXYiKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDAp IF9fcmVzdWx0ID0gKF9fczFbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopICgiLmRlYnVnX2FiYnJldiIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IHN0 cmNtcCAoKChzZWMpID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlYyktPnNoX25hbWUg Pj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNl YyktPnNoX25hbWUpKSwgIi5kZWJ1Z19hYmJyZXYiKSkpKTsgfSkgPT0gMCkKICAgICAgICAgICAg YnJlYWs7CgogICAgICAgIGlmIChpID09IGVsZl9oZWFkZXIuZV9zaG51bSB8fCBzZWMtPnNoX3Np emUgPT0gMCkKICAgICAgICAgIHsKICAgICAgICAgICAgd2FybiAoKCJVbmFibGUgdG8gbG9jYXRl IC5kZWJ1Z19hYmJyZXYgc2VjdGlvbiFcbiIpKTsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg ICAgICB9CgogICAgICAgIGJlZ2luID0gKCh1bnNpZ25lZCBjaGFyICopCiAgICAgICAgICAgICAg ICAgZ2V0X2RhdGEgKCgodm9pZCAqKTApLCBmaWxlLCBzZWMtPnNoX29mZnNldCwgc2VjLT5zaF9z aXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAoImRlYnVnX2FiYnJldiBzZWN0aW9uIGRh dGEiKSkpOwogICAgICAgIGlmICghYmVnaW4pCiAgICAgICAgICByZXR1cm4gMDsKCiAgICAgICAg cHJvY2Vzc19hYmJyZXZfc2VjdGlvbiAoYmVnaW4gKyBjb21wdW5pdC5jdV9hYmJyZXZfb2Zmc2V0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luICsgc2VjLT5zaF9zaXplKTsK CiAgICAgICAgZnJlZSAoYmVnaW4pOwogICAgICB9CgogICAgICBsZXZlbCA9IDA7CiAgICAgIHdo aWxlICh0YWdzIDwgc3RhcnQpCiAgICAgICAgewogICAgICAgICAgaW50IGJ5dGVzX3JlYWQ7CiAg ICAgICAgICB1bnNpZ25lZCBsb25nIGFiYnJldl9udW1iZXI7CiAgICAgICAgICBhYmJyZXZfZW50 cnkgKmVudHJ5OwogICAgICAgICAgYWJicmV2X2F0dHIgKmF0dHI7CgogICAgICAgICAgYWJicmV2 X251bWJlciA9IHJlYWRfbGViMTI4ICh0YWdzLCAmIGJ5dGVzX3JlYWQsIDApOwogICAgICAgICAg dGFncyArPSBieXRlc19yZWFkOwoKCiAgICAgICAgICBpZiAoYWJicmV2X251bWJlciA9PSAwKQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgLS1sZXZlbDsKICAgICAgICAgICAgICBjb250aW51 ZTsKICAgICAgICAgICAgfQoKCgogICAgICAgICAgZm9yIChlbnRyeSA9IGZpcnN0X2FiYnJldjsK ICAgICAgICAgICAgICAgZW50cnkgJiYgZW50cnktPmVudHJ5ICE9IGFiYnJldl9udW1iZXI7CiAg ICAgICAgICAgICAgIGVudHJ5ID0gZW50cnktPm5leHQpCiAgICAgICAgICAgIGNvbnRpbnVlOwoK ICAgICAgICAgIGlmIChlbnRyeSA9PSAoKHZvaWQgKikwKSkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIHdhcm4gKCgiVW5hYmxlIHRvIGxvY2F0ZSBlbnRyeSAlbHUgaW4gdGhlIGFiYnJldmlh dGlvbiB0YWJsZVxuIiksCiAgICAgICAgICAgICAgICAgICAgYWJicmV2X251bWJlcik7CiAgICAg ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBwcmludGYgKCgiIDwl ZD48JWx4PjogQWJicmV2IE51bWJlcjogJWx1ICglcylcbiIpLAogICAgICAgICAgICAgICAgICBs ZXZlbCwKICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpICh0YWdzIC0gc2VjdGlvbl9i ZWdpbiAtIGJ5dGVzX3JlYWQpLAogICAgICAgICAgICAgICAgICBhYmJyZXZfbnVtYmVyLAogICAg ICAgICAgICAgICAgICBnZXRfVEFHX25hbWUgKGVudHJ5LT50YWcpKTsKCiAgICAgICAgICBmb3Ig KGF0dHIgPSBlbnRyeS0+Zmlyc3RfYXR0cjsgYXR0cjsgYXR0ciA9IGF0dHItPm5leHQpCiAgICAg ICAgICAgIHRhZ3MgPSByZWFkX2FuZF9kaXNwbGF5X2F0dHIgKGF0dHItPmF0dHJpYnV0ZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci0+Zm9ybSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFncywgY3Vfb2Zmc2V0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdW5pdC5jdV9wb2ludGVy X3NpemUpOwoKICAgICAgICAgIGlmIChlbnRyeS0+Y2hpbGRyZW4pCiAgICAgICAgICAgICsrbGV2 ZWw7CiAgICAgICAgfQogICAgfQoKICBmcmVlX2RlYnVnX3N0ciAoKTsKICBmcmVlX2RlYnVnX2xv YyAoKTsKCiAgcHJpbnRmICgiXG4iKTsKCiAgcmV0dXJuIDE7Cn0KCnN0YXRpYyBpbnQKZGlzcGxh eV9kZWJ1Z19hcmFuZ2VzIChzZWN0aW9uLCBzdGFydCwgZmlsZSkKICAgICBFbGZfSW50ZXJuYWxf U2hkciAqc2VjdGlvbjsKICAgICB1bnNpZ25lZCBjaGFyICpzdGFydDsKICAgICBGSUxFICpmaWxl IF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CnsKICB1bnNpZ25lZCBjaGFyICplbmQgPSBz dGFydCArIHNlY3Rpb24tPnNoX3NpemU7CgogIHByaW50ZiAoKCJUaGUgc2VjdGlvbiAlcyBjb250 YWluczpcblxuIiksICgoc2VjdGlvbikgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2Vj dGlvbiktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3Ry aW5nX3RhYmxlICsgKHNlY3Rpb24pLT5zaF9uYW1lKSkpOwoKICB3aGlsZSAoc3RhcnQgPCBlbmQp CiAgICB7CiAgICAgIERXQVJGMl9FeHRlcm5hbF9BUmFuZ2UgKmV4dGVybmFsOwogICAgICBEV0FS RjJfSW50ZXJuYWxfQVJhbmdlIGFyYW5nZTsKICAgICAgdW5zaWduZWQgY2hhciAqcmFuZ2VzOwog ICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aDsKICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzOwog ICAgICBpbnQgZXhjZXNzOwoKICAgICAgZXh0ZXJuYWwgPSAoRFdBUkYyX0V4dGVybmFsX0FSYW5n ZSAqKSBzdGFydDsKCiAgICAgIGFyYW5nZS5hcl9sZW5ndGggPSBieXRlX2dldCAoZXh0ZXJuYWwt PmFyX2xlbmd0aCwgc2l6ZW9mIChleHRlcm5hbC0+YXJfbGVuZ3RoKSk7CiAgICAgIGFyYW5nZS5h cl92ZXJzaW9uID0gYnl0ZV9nZXQgKGV4dGVybmFsLT5hcl92ZXJzaW9uLCBzaXplb2YgKGV4dGVy bmFsLT5hcl92ZXJzaW9uKSk7CiAgICAgIGFyYW5nZS5hcl9pbmZvX29mZnNldCA9IGJ5dGVfZ2V0 IChleHRlcm5hbC0+YXJfaW5mb19vZmZzZXQsIHNpemVvZiAoZXh0ZXJuYWwtPmFyX2luZm9fb2Zm c2V0KSk7CiAgICAgIGFyYW5nZS5hcl9wb2ludGVyX3NpemUgPSBieXRlX2dldCAoZXh0ZXJuYWwt PmFyX3BvaW50ZXJfc2l6ZSwgc2l6ZW9mIChleHRlcm5hbC0+YXJfcG9pbnRlcl9zaXplKSk7CiAg ICAgIGFyYW5nZS5hcl9zZWdtZW50X3NpemUgPSBieXRlX2dldCAoZXh0ZXJuYWwtPmFyX3NlZ21l bnRfc2l6ZSwgc2l6ZW9mIChleHRlcm5hbC0+YXJfc2VnbWVudF9zaXplKSk7CgogICAgICBpZiAo YXJhbmdlLmFyX2xlbmd0aCA9PSAweGZmZmZmZmZmKQogICAgICAgIHsKICAgICAgICAgIHdhcm4g KCgiNjQtYml0IERXQVJGIGFyYW5nZXMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LlxuIikpOwogICAg ICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgaWYgKGFyYW5nZS5hcl92ZXJzaW9uICE9IDIp CiAgICAgICAgewogICAgICAgICAgd2FybiAoKCJPbmx5IERXQVJGIDIgYXJhbmdlcyBhcmUgY3Vy cmVudGx5IHN1cHBvcnRlZC5cbiIpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAg IHByaW50ZiAoKCIgIExlbmd0aDogICAgICAgICAgICAgICAgICAgJWxkXG4iKSwgYXJhbmdlLmFy X2xlbmd0aCk7CiAgICAgIHByaW50ZiAoKCIgIFZlcnNpb246ICAgICAgICAgICAgICAgICAgJWRc biIpLCBhcmFuZ2UuYXJfdmVyc2lvbik7CiAgICAgIHByaW50ZiAoKCIgIE9mZnNldCBpbnRvIC5k ZWJ1Z19pbmZvOiAgJWx4XG4iKSwgYXJhbmdlLmFyX2luZm9fb2Zmc2V0KTsKICAgICAgcHJpbnRm ICgoIiAgUG9pbnRlciBTaXplOiAgICAgICAgICAgICAlZFxuIiksIGFyYW5nZS5hcl9wb2ludGVy X3NpemUpOwogICAgICBwcmludGYgKCgiICBTZWdtZW50IFNpemU6ICAgICAgICAgICAgICVkXG4i KSwgYXJhbmdlLmFyX3NlZ21lbnRfc2l6ZSk7CgogICAgICBwcmludGYgKCgiXG4gICAgQWRkcmVz cyAgTGVuZ3RoXG4iKSk7CgogICAgICByYW5nZXMgPSBzdGFydCArIHNpemVvZiAoKmV4dGVybmFs KTsKCgogICAgICBleGNlc3MgPSBzaXplb2YgKCpleHRlcm5hbCkgJSAoMiAqIGFyYW5nZS5hcl9w b2ludGVyX3NpemUpOwogICAgICBpZiAoZXhjZXNzKQogICAgICAgIHJhbmdlcyArPSAoMiAqIGFy YW5nZS5hcl9wb2ludGVyX3NpemUpIC0gZXhjZXNzOwoKICAgICAgZm9yICg7OykKICAgICAgICB7 CiAgICAgICAgICBhZGRyZXNzID0gYnl0ZV9nZXQgKHJhbmdlcywgYXJhbmdlLmFyX3BvaW50ZXJf c2l6ZSk7CgogICAgICAgICAgcmFuZ2VzICs9IGFyYW5nZS5hcl9wb2ludGVyX3NpemU7CgogICAg ICAgICAgbGVuZ3RoID0gYnl0ZV9nZXQgKHJhbmdlcywgYXJhbmdlLmFyX3BvaW50ZXJfc2l6ZSk7 CgogICAgICAgICAgcmFuZ2VzICs9IGFyYW5nZS5hcl9wb2ludGVyX3NpemU7CgoKICAgICAgICAg IGlmIChhZGRyZXNzID09IDAgJiYgbGVuZ3RoID09IDApCiAgICAgICAgICAgIGJyZWFrOwoKICAg ICAgICAgIHByaW50ZiAoIiAgICAlOC44bHggJWx1XG4iLCBhZGRyZXNzLCBsZW5ndGgpOwogICAg ICAgIH0KCiAgICAgIHN0YXJ0ICs9IGFyYW5nZS5hcl9sZW5ndGggKyBzaXplb2YgKGV4dGVybmFs LT5hcl9sZW5ndGgpOwogICAgfQoKICBwcmludGYgKCJcbiIpOwoKICByZXR1cm4gMTsKfQoKdHlw ZWRlZiBzdHJ1Y3QgRnJhbWVfQ2h1bmsKewogIHN0cnVjdCBGcmFtZV9DaHVuayAqbmV4dDsKICB1 bnNpZ25lZCBjaGFyICpjaHVua19zdGFydDsKICBpbnQgbmNvbHM7CgogIHNob3J0IGludCAqY29s X3R5cGU7CiAgaW50ICpjb2xfb2Zmc2V0OwogIGNoYXIgKmF1Z21lbnRhdGlvbjsKICB1bnNpZ25l ZCBpbnQgY29kZV9mYWN0b3I7CiAgaW50IGRhdGFfZmFjdG9yOwogIHVuc2lnbmVkIGxvbmcgcGNf YmVnaW47CiAgdW5zaWduZWQgbG9uZyBwY19yYW5nZTsKICBpbnQgY2ZhX3JlZzsKICBpbnQgY2Zh X29mZnNldDsKICBpbnQgcmE7CiAgdW5zaWduZWQgY2hhciBmZGVfZW5jb2Rpbmc7Cn0KRnJhbWVf Q2h1bms7CgoKCgoKc3RhdGljIHZvaWQgZnJhbWVfbmVlZF9zcGFjZSAoRnJhbWVfQ2h1bmsgKiwg aW50KTsKc3RhdGljIHZvaWQgZnJhbWVfZGlzcGxheV9yb3cgKEZyYW1lX0NodW5rICosIGludCAq LCBpbnQgKik7CnN0YXRpYyBpbnQgc2l6ZV9vZl9lbmNvZGVkX3ZhbHVlIChpbnQpOwoKc3RhdGlj IHZvaWQKZnJhbWVfbmVlZF9zcGFjZSAoZmMsIHJlZykKICAgICBGcmFtZV9DaHVuayAqZmM7CiAg ICAgaW50IHJlZzsKewogIGludCBwcmV2ID0gZmMtPm5jb2xzOwoKICBpZiAocmVnIDwgZmMtPm5j b2xzKQogICAgcmV0dXJuOwoKICBmYy0+bmNvbHMgPSByZWcgKyAxOwogIGZjLT5jb2xfdHlwZSA9 IChzaG9ydCBpbnQgKikgeHJlYWxsb2MgKGZjLT5jb2xfdHlwZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmYy0+bmNvbHMgKiBzaXplb2YgKHNob3J0IGludCkpOwog IGZjLT5jb2xfb2Zmc2V0ID0gKGludCAqKSB4cmVhbGxvYyAoZmMtPmNvbF9vZmZzZXQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYy0+bmNvbHMgKiBzaXplb2YgKGludCkp OwoKICB3aGlsZSAocHJldiA8IGZjLT5uY29scykKICAgIHsKICAgICAgZmMtPmNvbF90eXBlW3By ZXZdID0gKC0xKTsKICAgICAgZmMtPmNvbF9vZmZzZXRbcHJldl0gPSAwOwogICAgICBwcmV2Kys7 CiAgICB9Cn0KCnN0YXRpYyB2b2lkCmZyYW1lX2Rpc3BsYXlfcm93IChmYywgbmVlZF9jb2xfaGVh ZGVycywgbWF4X3JlZ3MpCiAgICAgRnJhbWVfQ2h1bmsgKmZjOwogICAgIGludCAqbmVlZF9jb2xf aGVhZGVyczsKICAgICBpbnQgKm1heF9yZWdzOwp7CiAgaW50IHI7CiAgY2hhciB0bXBbMTAwXTsK CiAgaWYgKCptYXhfcmVncyA8IGZjLT5uY29scykKICAgICptYXhfcmVncyA9IGZjLT5uY29sczsK CiAgaWYgKCpuZWVkX2NvbF9oZWFkZXJzKQogICAgewogICAgICAqbmVlZF9jb2xfaGVhZGVycyA9 IDA7CgogICAgICBwcmludGYgKCIgICBMT0MgICBDRkEgICAgICAiKTsKCiAgICAgIGZvciAociA9 IDA7IHIgPCAqbWF4X3JlZ3M7IHIrKykKICAgICAgICBpZiAoZmMtPmNvbF90eXBlW3JdICE9ICgt MSkpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChyID09IGZjLT5yYSkKICAgICAgICAgICAg ICBwcmludGYgKCJyYSAgICIpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgcHJpbnRm ICgiciUtNGQiLCByKTsKICAgICAgICAgIH0KCiAgICAgIHByaW50ZiAoIlxuIik7CiAgICB9Cgog IHByaW50ZiAoIiUwOGx4ICIsIGZjLT5wY19iZWdpbik7CiAgc3ByaW50ZiAodG1wLCAiciVkJStk IiwgZmMtPmNmYV9yZWcsIGZjLT5jZmFfb2Zmc2V0KTsKICBwcmludGYgKCIlLThzICIsIHRtcCk7 CgogIGZvciAociA9IDA7IHIgPCBmYy0+bmNvbHM7IHIrKykKICAgIHsKICAgICAgaWYgKGZjLT5j b2xfdHlwZVtyXSAhPSAoLTEpKQogICAgICAgIHsKICAgICAgICAgIHN3aXRjaCAoZmMtPmNvbF90 eXBlW3JdKQogICAgICAgICAgICB7CiAgICAgICAgICAgIGNhc2UgRFdfQ0ZBX3VuZGVmaW5lZDoK ICAgICAgICAgICAgICBzdHJjcHkgKHRtcCwgInUiKTsKICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgY2FzZSBEV19DRkFfc2FtZV92YWx1ZToKICAgICAgICAgICAgICBzdHJjcHkgKHRt cCwgInMiKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBEV19DRkFfb2Zm c2V0OgogICAgICAgICAgICAgIHNwcmludGYgKHRtcCwgImMlK2QiLCBmYy0+Y29sX29mZnNldFty XSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgRFdfQ0ZBX3JlZ2lzdGVy OgogICAgICAgICAgICAgIHNwcmludGYgKHRtcCwgInIlZCIsIGZjLT5jb2xfb2Zmc2V0W3JdKTsK ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBz dHJjcHkgKHRtcCwgIm4vYSIpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAg ICAgICAgICBwcmludGYgKCIlLTVzIiwgdG1wKTsKICAgICAgICB9CiAgICB9CiAgcHJpbnRmICgi XG4iKTsKfQoKc3RhdGljIGludApzaXplX29mX2VuY29kZWRfdmFsdWUgKGVuY29kaW5nKQogICAg IGludCBlbmNvZGluZzsKewogIHN3aXRjaCAoZW5jb2RpbmcgJiAweDcpCiAgICB7CiAgICBkZWZh dWx0OgogICAgY2FzZSAwOiByZXR1cm4gaXNfMzJiaXRfZWxmID8gNCA6IDg7CiAgICBjYXNlIDI6 IHJldHVybiAyOwogICAgY2FzZSAzOiByZXR1cm4gNDsKICAgIGNhc2UgNDogcmV0dXJuIDg7CiAg ICB9Cn0KCgoKCgpzdGF0aWMgaW50CmRpc3BsYXlfZGVidWdfZnJhbWVzIChzZWN0aW9uLCBzdGFy dCwgZmlsZSkKICAgICBFbGZfSW50ZXJuYWxfU2hkciAqc2VjdGlvbjsKICAgICB1bnNpZ25lZCBj aGFyICpzdGFydDsKICAgICBGSUxFICpmaWxlIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7 CnsKICB1bnNpZ25lZCBjaGFyICplbmQgPSBzdGFydCArIHNlY3Rpb24tPnNoX3NpemU7CiAgdW5z aWduZWQgY2hhciAqc2VjdGlvbl9zdGFydCA9IHN0YXJ0OwogIEZyYW1lX0NodW5rICpjaHVua3Mg PSAwOwogIEZyYW1lX0NodW5rICpyZW1lbWJlcmVkX3N0YXRlID0gMDsKICBGcmFtZV9DaHVuayAq cnM7CiAgaW50IGlzX2VoID0gKF9fZXh0ZW5zaW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3My X2xlbjsgKF9fYnVpbHRpbl9jb25zdGFudF9wICgoKHNlY3Rpb24pID09ICgodm9pZCAqKTApID8g Ijxub25lPiIgOiAoKHNlY3Rpb24pLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAi PGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWN0aW9uKS0+c2hfbmFtZSkpKSAmJiBfX2J1 aWx0aW5fY29uc3RhbnRfcCAoIi5laF9mcmFtZSIpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoKChz ZWN0aW9uKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWN0aW9uKS0+c2hfbmFtZSA+ PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2Vj dGlvbiktPnNoX25hbWUpKSksIF9fczJfbGVuID0gc3RybGVuICgiLmVoX2ZyYW1lIiksICghKChz aXplX3QpKGNvbnN0IHZvaWQgKikoKCgoc2VjdGlvbikgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+ IiA6ICgoc2VjdGlvbiktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVw dD4iIDogc3RyaW5nX3RhYmxlICsgKHNlY3Rpb24pLT5zaF9uYW1lKSkpICsgMSkgLSAoc2l6ZV90 KShjb25zdCB2b2lkICopKCgoc2VjdGlvbikgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgo c2VjdGlvbiktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDog c3RyaW5nX3RhYmxlICsgKHNlY3Rpb24pLT5zaF9uYW1lKSkpID09IDEpIHx8IF9fczFfbGVuID49 IDQpICYmICghKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCIuZWhfZnJhbWUiKSArIDEpIC0gKHNp emVfdCkoY29uc3Qgdm9pZCAqKSgiLmVoX2ZyYW1lIikgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkp ID8gbWVtY21wICgoX19jb25zdCBjaGFyICopICgoKHNlY3Rpb24pID09ICgodm9pZCAqKTApID8g Ijxub25lPiIgOiAoKHNlY3Rpb24pLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAi PGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWN0aW9uKS0+c2hfbmFtZSkpKSwgKF9fY29u c3QgY2hhciAqKSAoIi5laF9mcmFtZSIpLCAoX19zMV9sZW4gPCBfX3MyX2xlbiA/IF9fczFfbGVu IDogX19zMl9sZW4pICsgMSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKCgoc2VjdGlvbikgPT0g KCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjdGlvbiktPnNoX25hbWUgPj0gc3RyaW5nX3Rh YmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlY3Rpb24pLT5zaF9u YW1lKSkpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgoKHNlY3Rpb24pID09ICgodm9pZCAq KTApID8gIjxub25lPiIgOiAoKHNlY3Rpb24pLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5n dGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWN0aW9uKS0+c2hfbmFtZSkpKSAr IDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKHNlY3Rpb24pID09ICgodm9pZCAqKTApID8g Ijxub25lPiIgOiAoKHNlY3Rpb24pLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAi PGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWN0aW9uKS0+c2hfbmFtZSkpKSA9PSAxKSAm JiAoX19zMV9sZW4gPSBzdHJsZW4gKCgoc2VjdGlvbikgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+ IiA6ICgoc2VjdGlvbiktPnNoX25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVw dD4iIDogc3RyaW5nX3RhYmxlICsgKHNlY3Rpb24pLT5zaF9uYW1lKSkpLCBfX3MxX2xlbiA8IDQp ID8gKF9fYnVpbHRpbl9jb25zdGFudF9wICgiLmVoX2ZyYW1lIikgJiYgKChzaXplX3QpKGNvbnN0 IHZvaWQgKikoKCIuZWhfZnJhbWUiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiLmVo X2ZyYW1lIikgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQg PSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWN0aW9u KSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWN0aW9uKS0+c2hfbmFtZSA+PSBzdHJp bmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjdGlvbikt PnNoX25hbWUpKSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSgiLmVoX2ZyYW1lIikpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAw KSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCgoc2VjdGlvbikgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjdGlvbiktPnNo X25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxl ICsgKHNlY3Rpb24pLT5zaF9uYW1lKSkpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKCIuZWhfZnJhbWUiKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYm IF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAoKChzZWN0aW9uKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDog KChzZWN0aW9uKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIg OiBzdHJpbmdfdGFibGUgKyAoc2VjdGlvbiktPnNoX25hbWUpKSkpWzJdIC0gKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5laF9mcmFtZSIpKVsyXSk7IGlmIChf X3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWN0aW9uKSA9PSAoKHZvaWQgKikwKSA/ ICI8bm9uZT4iIDogKChzZWN0aW9uKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8g Ijxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjdGlvbiktPnNoX25hbWUpKSkpWzNdIC0g KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5laF9mcmFtZSIp KVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNp Z25lZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopICgiLmVoX2ZyYW1lIik7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgoKHNlY3Rpb24pID09ICgodm9pZCAqKTAp ID8gIjxub25lPiIgOiAoKHNlY3Rpb24pLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGgg PyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWN0aW9uKS0+c2hfbmFtZSkpKSlbMF0g LSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0 ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCgoc2VjdGlv bikgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjdGlvbiktPnNoX25hbWUgPj0gc3Ry aW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlY3Rpb24p LT5zaF9uYW1lKSkpKVsxXSAtIF9fczJbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0 ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3Qg Y2hhciAqKSAoKChzZWN0aW9uKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWN0aW9u KS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdf dGFibGUgKyAoc2VjdGlvbiktPnNoX25hbWUpKSkpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xl biA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWN0aW9uKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9u ZT4iIDogKChzZWN0aW9uKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3Jy dXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjdGlvbiktPnNoX25hbWUpKSkpWzNdIC0gX19zMlsz XSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIi5laF9mcmFt ZSIpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKCgiLmVoX2ZyYW1lIikgKyAxKSAtIChzaXpl X3QpKGNvbnN0IHZvaWQgKikoIi5laF9mcmFtZSIpID09IDEpICYmIChfX3MyX2xlbiA9IHN0cmxl biAoIi5laF9mcmFtZSIpLCBfX3MyX2xlbiA8IDQpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wICgo KHNlY3Rpb24pID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlY3Rpb24pLT5zaF9uYW1l ID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChz ZWN0aW9uKS0+c2hfbmFtZSkpKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoKChzZWN0aW9u KSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWN0aW9uKS0+c2hfbmFtZSA+PSBzdHJp bmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjdGlvbikt PnNoX25hbWUpKSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoKChzZWN0aW9uKSA9PSAo KHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWN0aW9uKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFi bGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjdGlvbiktPnNoX25h bWUpKSkgPT0gMSkgPyAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWN0aW9uKSA9 PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChzZWN0aW9uKS0+c2hfbmFtZSA+PSBzdHJpbmdf dGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjdGlvbiktPnNo X25hbWUpKSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSgiLmVoX2ZyYW1lIikpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7 IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCgoc2VjdGlvbikgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjdGlvbiktPnNoX25h bWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsg KHNlY3Rpb24pLT5zaF9uYW1lKSkpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCIuZWhfZnJhbWUiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9f cmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoKChzZWN0aW9uKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDogKChz ZWN0aW9uKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIgOiBz dHJpbmdfdGFibGUgKyAoc2VjdGlvbiktPnNoX25hbWUpKSkpWzJdIC0gKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5laF9mcmFtZSIpKVsyXSk7IGlmIChfX3My X2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoKChzZWN0aW9uKSA9PSAoKHZvaWQgKikwKSA/ICI8 bm9uZT4iIDogKChzZWN0aW9uKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxj b3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjdGlvbiktPnNoX25hbWUpKSkpWzNdIC0gKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5laF9mcmFtZSIpKVsz XSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25l ZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICgoKHNlY3Rpb24pID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlY3Rpb24pLT5zaF9u YW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSAr IChzZWN0aW9uKS0+c2hfbmFtZSkpKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAt ICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZWhfZnJhbWUi KSlbMF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChf X3MxWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIi5l aF9mcmFtZSIpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jl c3VsdCA9IChfX3MxWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoIi5laF9mcmFtZSIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0g MCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKCIuZWhfZnJhbWUiKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJj bXAgKCgoc2VjdGlvbikgPT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjdGlvbiktPnNo X25hbWUgPj0gc3RyaW5nX3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxl ICsgKHNlY3Rpb24pLT5zaF9uYW1lKSksICIuZWhfZnJhbWUiKSkpKTsgfSkgPT0gMCk7CiAgaW50 IGxlbmd0aF9yZXR1cm47CiAgaW50IG1heF9yZWdzID0gMDsKICBpbnQgYWRkcl9zaXplID0gaXNf MzJiaXRfZWxmID8gNCA6IDg7CgogIHByaW50ZiAoKCJUaGUgc2VjdGlvbiAlcyBjb250YWluczpc biIpLCAoKHNlY3Rpb24pID09ICgodm9pZCAqKTApID8gIjxub25lPiIgOiAoKHNlY3Rpb24pLT5z aF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5ndGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJs ZSArIChzZWN0aW9uKS0+c2hfbmFtZSkpKTsKCiAgd2hpbGUgKHN0YXJ0IDwgZW5kKQogICAgewog ICAgICB1bnNpZ25lZCBjaGFyICpzYXZlZF9zdGFydDsKICAgICAgdW5zaWduZWQgY2hhciAqYmxv Y2tfZW5kOwogICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aDsKICAgICAgdW5zaWduZWQgbG9uZyBj aWVfaWQ7CiAgICAgIEZyYW1lX0NodW5rICpmYzsKICAgICAgRnJhbWVfQ2h1bmsgKmNpZTsKICAg ICAgaW50IG5lZWRfY29sX2hlYWRlcnMgPSAxOwogICAgICB1bnNpZ25lZCBjaGFyICphdWdtZW50 YXRpb25fZGF0YSA9ICgodm9pZCAqKTApOwogICAgICB1bnNpZ25lZCBsb25nIGF1Z21lbnRhdGlv bl9kYXRhX2xlbiA9IDA7CiAgICAgIGludCBlbmNvZGVkX3B0cl9zaXplID0gYWRkcl9zaXplOwoK ICAgICAgc2F2ZWRfc3RhcnQgPSBzdGFydDsKICAgICAgbGVuZ3RoID0gYnl0ZV9nZXQgKHN0YXJ0 LCA0KTsgc3RhcnQgKz0gNDsKCiAgICAgIGlmIChsZW5ndGggPT0gMCkKICAgICAgICB7CiAgICAg ICAgICBwcmludGYgKCJcbiUwOGx4IFpFUk8gdGVybWluYXRvclxuXG4iLAogICAgICAgICAgICAg ICAgICAgICh1bnNpZ25lZCBsb25nKShzYXZlZF9zdGFydCAtIHNlY3Rpb25fc3RhcnQpKTsKICAg ICAgICAgIHJldHVybiAxOwogICAgICAgIH0KCiAgICAgIGlmIChsZW5ndGggPT0gMHhmZmZmZmZm ZikKICAgICAgICB7CiAgICAgICAgICB3YXJuICgoIjY0LWJpdCBEV0FSRiBmb3JtYXQgZnJhbWVz IGFyZSBub3Qgc3VwcG9ydGVkIHlldC5cbiIpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0K CiAgICAgIGJsb2NrX2VuZCA9IHNhdmVkX3N0YXJ0ICsgbGVuZ3RoICsgNDsKICAgICAgY2llX2lk ID0gYnl0ZV9nZXQgKHN0YXJ0LCA0KTsgc3RhcnQgKz0gNDsKCiAgICAgIGlmIChpc19laCA/IChj aWVfaWQgPT0gMCkgOiAoY2llX2lkID09IDB4ZmZmZmZmZmYpKQogICAgICAgIHsKICAgICAgICAg IGludCB2ZXJzaW9uOwoKICAgICAgICAgIGZjID0gKEZyYW1lX0NodW5rICopIHhtYWxsb2MgKHNp emVvZiAoRnJhbWVfQ2h1bmspKTsKICAgICAgICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5f Y29uc3RhbnRfcCAoc2l6ZW9mIChGcmFtZV9DaHVuaykpICYmIChzaXplb2YgKEZyYW1lX0NodW5r KSkgPD0gMTYgPyAoKHNpemVvZiAoRnJhbWVfQ2h1bmspKSA9PSAxID8gKHsgdm9pZCAqX19zID0g KGZjKTsgKigoX191aW50OF90ICopIF9fcykgPSAoX191aW50OF90KSAwOyBfX3M7IH0pIDogKHsg dm9pZCAqX19zID0gKGZjKTsgdW5pb24geyB1bnNpZ25lZCBpbnQgX191aTsgdW5zaWduZWQgc2hv cnQgaW50IF9fdXNpOyB1bnNpZ25lZCBjaGFyIF9fdWM7IH0gKl9fdSA9IF9fczsgX191aW50OF90 IF9fYyA9IChfX3VpbnQ4X3QpICgwKTsgc3dpdGNoICgodW5zaWduZWQgaW50KSAoc2l6ZW9mIChG cmFtZV9DaHVuaykpKSB7IGNhc2UgMTU6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9f dSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDExOiBfX3UtPl9fdWkg PSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0 KTsgY2FzZSA3OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lv bl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAzOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNo b3J0IGludCkgX19jICogMHgwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3Ug KyAyKTsgX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTQ6IF9f dS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICop IF9fdSArIDQpOyBjYXNlIDEwOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBf X2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA2OiBfX3UtPl9fdWkgPSBfX2Mg KiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2Fz ZSAyOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19jICogMHgwMTAxOyBicmVh azsgY2FzZSAxMzogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNp b25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgOTogX191LT5fX3VpID0gX19jICogMHgwMTAx MDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgNTogX191 LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikg X191ICsgNCk7IGNhc2UgMTogX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7 IGNhc2UgMTY6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9u X18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDEyOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEw MTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA4OiBfX3Ut Pl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBf X3UgKyA0KTsgY2FzZSA0OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBjYXNlIDA6IGJy ZWFrOyB9IF9fczsgfSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgwKSAmJiAoMCkgPT0gJ1ww JyA/ICh7IHZvaWQgKl9fcyA9IChmYyk7IF9fYnVpbHRpbl9tZW1zZXQgKF9fcywgJ1wwJywgc2l6 ZW9mIChGcmFtZV9DaHVuaykpOyBfX3M7IH0pIDogbWVtc2V0IChmYywgMCwgc2l6ZW9mIChGcmFt ZV9DaHVuaykpKSkpOwoKICAgICAgICAgIGZjLT5uZXh0ID0gY2h1bmtzOwogICAgICAgICAgY2h1 bmtzID0gZmM7CiAgICAgICAgICBmYy0+Y2h1bmtfc3RhcnQgPSBzYXZlZF9zdGFydDsKICAgICAg ICAgIGZjLT5uY29scyA9IDA7CiAgICAgICAgICBmYy0+Y29sX3R5cGUgPSAoc2hvcnQgaW50ICop IHhtYWxsb2MgKHNpemVvZiAoc2hvcnQgaW50KSk7CiAgICAgICAgICBmYy0+Y29sX29mZnNldCA9 IChpbnQgKikgeG1hbGxvYyAoc2l6ZW9mIChpbnQpKTsKICAgICAgICAgIGZyYW1lX25lZWRfc3Bh Y2UgKGZjLCBtYXhfcmVncy0xKTsKCiAgICAgICAgICB2ZXJzaW9uID0gKnN0YXJ0Kys7CgogICAg ICAgICAgZmMtPmF1Z21lbnRhdGlvbiA9IHN0YXJ0OwogICAgICAgICAgc3RhcnQgPSAoX19leHRl bnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKCdcMCcpICYmICgnXDAnKSA9PSAnXDAnID8g KGNoYXIgKikgX19yYXdtZW1jaHIgKHN0YXJ0LCAnXDAnKSA6IHN0cmNociAoc3RhcnQsICdcMCcp KSkgKyAxOwoKICAgICAgICAgIGlmIChmYy0+YXVnbWVudGF0aW9uWzBdID09ICd6JykKICAgICAg ICAgICAgewogICAgICAgICAgICAgIGZjLT5jb2RlX2ZhY3RvciA9IHJlYWRfbGViMTI4IChzdGFy dCwgJiBsZW5ndGhfcmV0dXJuLCAwKTsgc3RhcnQgKz0gbGVuZ3RoX3JldHVybjsKICAgICAgICAg ICAgICBmYy0+ZGF0YV9mYWN0b3IgPSByZWFkX2xlYjEyOCAoc3RhcnQsICYgbGVuZ3RoX3JldHVy biwgMSk7IHN0YXJ0ICs9IGxlbmd0aF9yZXR1cm47CiAgICAgICAgICAgICAgZmMtPnJhID0gYnl0 ZV9nZXQgKHN0YXJ0LCAxKTsgc3RhcnQgKz0gMTsKICAgICAgICAgICAgICBhdWdtZW50YXRpb25f ZGF0YV9sZW4gPSByZWFkX2xlYjEyOCAoc3RhcnQsICYgbGVuZ3RoX3JldHVybiwgMCk7IHN0YXJ0 ICs9IGxlbmd0aF9yZXR1cm47CiAgICAgICAgICAgICAgYXVnbWVudGF0aW9uX2RhdGEgPSBzdGFy dDsKICAgICAgICAgICAgICBzdGFydCArPSBhdWdtZW50YXRpb25fZGF0YV9sZW47CiAgICAgICAg ICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fZXh0ZW5zaW9uX18gKHsgc2l6ZV90IF9fczFfbGVu LCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFudF9wIChmYy0+YXVnbWVudGF0aW9uKSAmJiBf X2J1aWx0aW5fY29uc3RhbnRfcCAoImVoIikgJiYgKF9fczFfbGVuID0gc3RybGVuIChmYy0+YXVn bWVudGF0aW9uKSwgX19zMl9sZW4gPSBzdHJsZW4gKCJlaCIpLCAoISgoc2l6ZV90KShjb25zdCB2 b2lkICopKChmYy0+YXVnbWVudGF0aW9uKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShm Yy0+YXVnbWVudGF0aW9uKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShj b25zdCB2b2lkICopKCgiZWgiKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgiZWgiKSA9 PSAxKSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAgKChfX2NvbnN0IGNoYXIgKikgKGZjLT5h dWdtZW50YXRpb24pLCAoX19jb25zdCBjaGFyICopICgiZWgiKSwgKF9fczFfbGVuIDwgX19zMl9s ZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChm Yy0+YXVnbWVudGF0aW9uKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoZmMtPmF1Z21lbnRh dGlvbikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoZmMtPmF1Z21lbnRhdGlvbikgPT0g MSkgJiYgKF9fczFfbGVuID0gc3RybGVuIChmYy0+YXVnbWVudGF0aW9uKSwgX19zMV9sZW4gPCA0 KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoImVoIikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQg KikoKCJlaCIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJlaCIpID09IDEpID8gKF9f ZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGZjLT5hdWdtZW50YXRpb24pKVswXSAtICgoX19j b25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoImVoIikpWzBdKTsgaWYgKF9f czFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGZjLT5hdWdtZW50YXRpb24pKVsxXSAtICgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJlaCIpKVsxXSk7IGlm IChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChmYy0+YXVnbWVudGF0aW9uKSlbMl0g LSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiZWgiKSlbMl0p OyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGZjLT5hdWdtZW50YXRpb24pKVsz XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJlaCIpKVsz XSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25l ZCBjaGFyICpfX3MyID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICgiZWgiKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKGZjLT5hdWdtZW50YXRpb24pKVswXSAtIF9fczJbMF0pOyBp ZiAoX19zMV9sZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0 IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZmMtPmF1Z21lbnRhdGlvbikpWzFd IC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3Vs dCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChmYy0+YXVn bWVudGF0aW9uKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9 PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopIChmYy0+YXVnbWVudGF0aW9uKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkp IDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgiZWgiKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAq KSgoImVoIikgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoImVoIikgPT0gMSkgJiYgKF9f czJfbGVuID0gc3RybGVuICgiZWgiKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3Rh bnRfcCAoZmMtPmF1Z21lbnRhdGlvbikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGZjLT5h dWdtZW50YXRpb24pICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGZjLT5hdWdtZW50YXRp b24pID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGZjLT5hdWdtZW50YXRp b24pKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoImVo IikpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0g KCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGZjLT5hdWdtZW50 YXRpb24pKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCJlaCIpKVsxXSk7IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3Vs dCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChmYy0+YXVn bWVudGF0aW9uKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFy ICopICgiZWgiKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKGZjLT5h dWdtZW50YXRpb24pKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKCJlaCIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsg X19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChmYy0+YXVnbWVudGF0aW9uKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0 ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCJlaCIpKVswXTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0 ID0gKF9fczFbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop ICgiZWgiKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1 bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCJlaCIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1 bHQgPSAoX19zMVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCJlaCIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IHN0cmNtcCAoZmMtPmF1Z21lbnRh dGlvbiwgImVoIikpKSk7IH0pID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdGFy dCArPSBhZGRyX3NpemU7CiAgICAgICAgICAgICAgZmMtPmNvZGVfZmFjdG9yID0gcmVhZF9sZWIx MjggKHN0YXJ0LCAmIGxlbmd0aF9yZXR1cm4sIDApOyBzdGFydCArPSBsZW5ndGhfcmV0dXJuOwog ICAgICAgICAgICAgIGZjLT5kYXRhX2ZhY3RvciA9IHJlYWRfbGViMTI4IChzdGFydCwgJiBsZW5n dGhfcmV0dXJuLCAxKTsgc3RhcnQgKz0gbGVuZ3RoX3JldHVybjsKICAgICAgICAgICAgICBmYy0+ cmEgPSBieXRlX2dldCAoc3RhcnQsIDEpOyBzdGFydCArPSAxOwogICAgICAgICAgICB9CiAgICAg ICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBmYy0+Y29kZV9mYWN0b3IgPSBy ZWFkX2xlYjEyOCAoc3RhcnQsICYgbGVuZ3RoX3JldHVybiwgMCk7IHN0YXJ0ICs9IGxlbmd0aF9y ZXR1cm47CiAgICAgICAgICAgICAgZmMtPmRhdGFfZmFjdG9yID0gcmVhZF9sZWIxMjggKHN0YXJ0 LCAmIGxlbmd0aF9yZXR1cm4sIDEpOyBzdGFydCArPSBsZW5ndGhfcmV0dXJuOwogICAgICAgICAg ICAgIGZjLT5yYSA9IGJ5dGVfZ2V0IChzdGFydCwgMSk7IHN0YXJ0ICs9IDE7CiAgICAgICAgICAg IH0KICAgICAgICAgIGNpZSA9IGZjOwoKICAgICAgICAgIGlmIChkb19kZWJ1Z19mcmFtZXNfaW50 ZXJwKQogICAgICAgICAgICBwcmludGYgKCJcbiUwOGx4ICUwOGx4ICUwOGx4IENJRSBcIiVzXCIg Y2Y9JWQgZGY9JWQgcmE9JWRcbiIsCiAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcp KHNhdmVkX3N0YXJ0IC0gc2VjdGlvbl9zdGFydCksIGxlbmd0aCwgY2llX2lkLAogICAgICAgICAg ICAgICAgICAgIGZjLT5hdWdtZW50YXRpb24sIGZjLT5jb2RlX2ZhY3RvciwgZmMtPmRhdGFfZmFj dG9yLAogICAgICAgICAgICAgICAgICAgIGZjLT5yYSk7CiAgICAgICAgICBlbHNlCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBwcmludGYgKCJcbiUwOGx4ICUwOGx4ICUwOGx4IENJRVxuIiwK ICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKShzYXZlZF9zdGFydCAtIHNlY3Rp b25fc3RhcnQpLCBsZW5ndGgsIGNpZV9pZCk7CiAgICAgICAgICAgICAgcHJpbnRmICgiICBWZXJz aW9uOiAgICAgICAgICAgICAgICVkXG4iLCB2ZXJzaW9uKTsKICAgICAgICAgICAgICBwcmludGYg KCIgIEF1Z21lbnRhdGlvbjogICAgICAgICAgXCIlc1wiXG4iLCBmYy0+YXVnbWVudGF0aW9uKTsK ICAgICAgICAgICAgICBwcmludGYgKCIgIENvZGUgYWxpZ25tZW50IGZhY3RvcjogJXVcbiIsIGZj LT5jb2RlX2ZhY3Rvcik7CiAgICAgICAgICAgICAgcHJpbnRmICgiICBEYXRhIGFsaWdubWVudCBm YWN0b3I6ICVkXG4iLCBmYy0+ZGF0YV9mYWN0b3IpOwogICAgICAgICAgICAgIHByaW50ZiAoIiAg UmV0dXJuIGFkZHJlc3MgY29sdW1uOiAlZFxuIiwgZmMtPnJhKTsKCiAgICAgICAgICAgICAgaWYg KGF1Z21lbnRhdGlvbl9kYXRhX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyBpOwogICAgICAgICAgICAgICAgICBwcmludGYgKCIgIEF1Z21lbnRh dGlvbiBkYXRhOiAgICAiKTsKICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGF1Z21l bnRhdGlvbl9kYXRhX2xlbjsgKytpKQogICAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAlMDJ4 IiwgYXVnbWVudGF0aW9uX2RhdGFbaV0pOwogICAgICAgICAgICAgICAgICBwdXRjaGFyICgnXG4n KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBwdXRjaGFyICgnXG4nKTsKICAgICAg ICAgICAgfQoKICAgICAgICAgIGlmIChhdWdtZW50YXRpb25fZGF0YV9sZW4pCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwLCAqcTsKICAgICAgICAgICAgICBwID0g ZmMtPmF1Z21lbnRhdGlvbiArIDE7CiAgICAgICAgICAgICAgcSA9IGF1Z21lbnRhdGlvbl9kYXRh OwoKICAgICAgICAgICAgICB3aGlsZSAoMSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgICAgaWYgKCpwID09ICdMJykKICAgICAgICAgICAgICAgICAgICBxKys7CiAgICAgICAgICAg ICAgICAgIGVsc2UgaWYgKCpwID09ICdQJykKICAgICAgICAgICAgICAgICAgICBxICs9IDEgKyBz aXplX29mX2VuY29kZWRfdmFsdWUgKCpxKTsKICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKnAg PT0gJ1InKQogICAgICAgICAgICAgICAgICAgIGZjLT5mZGVfZW5jb2RpbmcgPSAqcSsrOwogICAg ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICAgIHArKzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgaWYgKGZjLT5mZGVf ZW5jb2RpbmcpCiAgICAgICAgICAgICAgICBlbmNvZGVkX3B0cl9zaXplID0gc2l6ZV9vZl9lbmNv ZGVkX3ZhbHVlIChmYy0+ZmRlX2VuY29kaW5nKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGZy YW1lX25lZWRfc3BhY2UgKGZjLCBmYy0+cmEpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg IHsKICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmxvb2tfZm9yOwogICAgICAgICAgc3RhdGljIEZy YW1lX0NodW5rIGZkZV9mYzsKCiAgICAgICAgICBmYyA9ICYgZmRlX2ZjOwogICAgICAgICAgKF9f ZXh0ZW5zaW9uX18gKF9fYnVpbHRpbl9jb25zdGFudF9wIChzaXplb2YgKEZyYW1lX0NodW5rKSkg JiYgKHNpemVvZiAoRnJhbWVfQ2h1bmspKSA8PSAxNiA/ICgoc2l6ZW9mIChGcmFtZV9DaHVuaykp ID09IDEgPyAoeyB2b2lkICpfX3MgPSAoZmMpOyAqKChfX3VpbnQ4X3QgKikgX19zKSA9IChfX3Vp bnQ4X3QpIDA7IF9fczsgfSkgOiAoeyB2b2lkICpfX3MgPSAoZmMpOyB1bmlvbiB7IHVuc2lnbmVk IGludCBfX3VpOyB1bnNpZ25lZCBzaG9ydCBpbnQgX191c2k7IHVuc2lnbmVkIGNoYXIgX191Yzsg fSAqX191ID0gX19zOyBfX3VpbnQ4X3QgX19jID0gKF9fdWludDhfdCkgKDApOyBzd2l0Y2ggKCh1 bnNpZ25lZCBpbnQpIChzaXplb2YgKEZyYW1lX0NodW5rKSkpIHsgY2FzZSAxNTogX191LT5fX3Vp ID0gX19jICogMHgwMTAxMDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsg NCk7IGNhc2UgMTE6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5z aW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDc6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEw MTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDM6IF9f dS0+X191c2kgPSAodW5zaWduZWQgc2hvcnQgaW50KSBfX2MgKiAweDAxMDE7IF9fdSA9IF9fZXh0 ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDIpOyBfX3UtPl9fdWMgPSAodW5zaWduZWQgY2hhcikg X19jOyBicmVhazsgY2FzZSAxNDogX191LT5fX3VpID0gX19jICogMHgwMTAxMDEwMTsgX191ID0g X19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTA6IF9fdS0+X191aSA9IF9f YyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBj YXNlIDY6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18g KCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDI6IF9fdS0+X191c2kgPSAodW5zaWduZWQgc2hvcnQg aW50KSBfX2MgKiAweDAxMDE7IGJyZWFrOyBjYXNlIDEzOiBfX3UtPl9fdWkgPSBfX2MgKiAweDAx MDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA5OiBf X3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAq KSBfX3UgKyA0KTsgY2FzZSA1OiBfX3UtPl9fdWkgPSBfX2MgKiAweDAxMDEwMTAxOyBfX3UgPSBf X2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAxOiBfX3UtPl9fdWMgPSAodW5z aWduZWQgY2hhcikgX19jOyBicmVhazsgY2FzZSAxNjogX191LT5fX3VpID0gX19jICogMHgwMTAx MDEwMTsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTI6IF9f dS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICop IF9fdSArIDQpOyBjYXNlIDg6IF9fdS0+X191aSA9IF9fYyAqIDB4MDEwMTAxMDE7IF9fdSA9IF9f ZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDQ6IF9fdS0+X191aSA9IF9fYyAq IDB4MDEwMTAxMDE7IGNhc2UgMDogYnJlYWs7IH0gX19zOyB9KSkgOiAoX19idWlsdGluX2NvbnN0 YW50X3AgKDApICYmICgwKSA9PSAnXDAnID8gKHsgdm9pZCAqX19zID0gKGZjKTsgX19idWlsdGlu X21lbXNldCAoX19zLCAnXDAnLCBzaXplb2YgKEZyYW1lX0NodW5rKSk7IF9fczsgfSkgOiBtZW1z ZXQgKGZjLCAwLCBzaXplb2YgKEZyYW1lX0NodW5rKSkpKSk7CgogICAgICAgICAgbG9va19mb3Ig PSBpc19laCA/IHN0YXJ0IC0gNCAtIGNpZV9pZCA6IHNlY3Rpb25fc3RhcnQgKyBjaWVfaWQ7Cgog ICAgICAgICAgZm9yIChjaWUgPSBjaHVua3M7IGNpZSA7IGNpZSA9IGNpZS0+bmV4dCkKICAgICAg ICAgICAgaWYgKGNpZS0+Y2h1bmtfc3RhcnQgPT0gbG9va19mb3IpCiAgICAgICAgICAgICAgYnJl YWs7CgogICAgICAgICAgaWYgKCFjaWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB3YXJu ICgiSW52YWxpZCBDSUUgcG9pbnRlciAlMDhseCBpbiBGREUgYXQgJTA4bHhcbiIsCiAgICAgICAg ICAgICAgICAgICAgY2llX2lkLCBzYXZlZF9zdGFydCk7CiAgICAgICAgICAgICAgc3RhcnQgPSBi bG9ja19lbmQ7CiAgICAgICAgICAgICAgZmMtPm5jb2xzID0gMDsKICAgICAgICAgICAgICBmYy0+ Y29sX3R5cGUgPSAoc2hvcnQgaW50ICopIHhtYWxsb2MgKHNpemVvZiAoc2hvcnQgaW50KSk7CiAg ICAgICAgICAgICAgZmMtPmNvbF9vZmZzZXQgPSAoaW50ICopIHhtYWxsb2MgKHNpemVvZiAoaW50 KSk7CiAgICAgICAgICAgICAgZnJhbWVfbmVlZF9zcGFjZSAoZmMsIG1heF9yZWdzIC0gMSk7CiAg ICAgICAgICAgICAgY2llID0gZmM7CiAgICAgICAgICAgICAgZmMtPmF1Z21lbnRhdGlvbiA9ICIi OwogICAgICAgICAgICAgIGZjLT5mZGVfZW5jb2RpbmcgPSAwOwogICAgICAgICAgICB9CiAgICAg ICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBmYy0+bmNvbHMgPSBjaWUtPm5j b2xzOwogICAgICAgICAgICAgIGZjLT5jb2xfdHlwZSA9IChzaG9ydCBpbnQgKikgeG1hbGxvYyAo ZmMtPm5jb2xzICogc2l6ZW9mIChzaG9ydCBpbnQpKTsKICAgICAgICAgICAgICBmYy0+Y29sX29m ZnNldCA9IChpbnQgKikgeG1hbGxvYyAoZmMtPm5jb2xzICogc2l6ZW9mIChpbnQpKTsKICAgICAg ICAgICAgICBtZW1jcHkgKGZjLT5jb2xfdHlwZSwgY2llLT5jb2xfdHlwZSwgZmMtPm5jb2xzICog c2l6ZW9mIChzaG9ydCBpbnQpKTsKICAgICAgICAgICAgICBtZW1jcHkgKGZjLT5jb2xfb2Zmc2V0 LCBjaWUtPmNvbF9vZmZzZXQsIGZjLT5uY29scyAqIHNpemVvZiAoaW50KSk7CiAgICAgICAgICAg ICAgZmMtPmF1Z21lbnRhdGlvbiA9IGNpZS0+YXVnbWVudGF0aW9uOwogICAgICAgICAgICAgIGZj LT5jb2RlX2ZhY3RvciA9IGNpZS0+Y29kZV9mYWN0b3I7CiAgICAgICAgICAgICAgZmMtPmRhdGFf ZmFjdG9yID0gY2llLT5kYXRhX2ZhY3RvcjsKICAgICAgICAgICAgICBmYy0+Y2ZhX3JlZyA9IGNp ZS0+Y2ZhX3JlZzsKICAgICAgICAgICAgICBmYy0+Y2ZhX29mZnNldCA9IGNpZS0+Y2ZhX29mZnNl dDsKICAgICAgICAgICAgICBmYy0+cmEgPSBjaWUtPnJhOwogICAgICAgICAgICAgIGZyYW1lX25l ZWRfc3BhY2UgKGZjLCBtYXhfcmVncy0xKTsKICAgICAgICAgICAgICBmYy0+ZmRlX2VuY29kaW5n ID0gY2llLT5mZGVfZW5jb2Rpbmc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoZmMtPmZk ZV9lbmNvZGluZykKICAgICAgICAgICAgZW5jb2RlZF9wdHJfc2l6ZSA9IHNpemVfb2ZfZW5jb2Rl ZF92YWx1ZSAoZmMtPmZkZV9lbmNvZGluZyk7CgogICAgICAgICAgZmMtPnBjX2JlZ2luID0gYnl0 ZV9nZXQgKHN0YXJ0LCBlbmNvZGVkX3B0cl9zaXplKTsKICAgICAgICAgIGlmICgoZmMtPmZkZV9l bmNvZGluZyAmIDB4NzApID09IDB4MTApCiAgICAgICAgICAgIGZjLT5wY19iZWdpbiArPSBzZWN0 aW9uLT5zaF9hZGRyICsgKHN0YXJ0IC0gc2VjdGlvbl9zdGFydCk7CiAgICAgICAgICBzdGFydCAr PSBlbmNvZGVkX3B0cl9zaXplOwogICAgICAgICAgZmMtPnBjX3JhbmdlID0gYnl0ZV9nZXQgKHN0 YXJ0LCBlbmNvZGVkX3B0cl9zaXplKTsKICAgICAgICAgIHN0YXJ0ICs9IGVuY29kZWRfcHRyX3Np emU7CgogICAgICAgICAgaWYgKGNpZS0+YXVnbWVudGF0aW9uWzBdID09ICd6JykKICAgICAgICAg ICAgewogICAgICAgICAgICAgIGF1Z21lbnRhdGlvbl9kYXRhX2xlbiA9IHJlYWRfbGViMTI4IChz dGFydCwgJiBsZW5ndGhfcmV0dXJuLCAwKTsgc3RhcnQgKz0gbGVuZ3RoX3JldHVybjsKICAgICAg ICAgICAgICBhdWdtZW50YXRpb25fZGF0YSA9IHN0YXJ0OwogICAgICAgICAgICAgIHN0YXJ0ICs9 IGF1Z21lbnRhdGlvbl9kYXRhX2xlbjsKICAgICAgICAgICAgfQoKICAgICAgICAgIHByaW50ZiAo IlxuJTA4bHggJTA4bHggJTA4bHggRkRFIGNpZT0lMDhseCBwYz0lMDhseC4uJTA4bHhcbiIsCiAg ICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKShzYXZlZF9zdGFydCAtIHNlY3Rpb25fc3Rh cnQpLCBsZW5ndGgsIGNpZV9pZCwKICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKGNp ZS0+Y2h1bmtfc3RhcnQgLSBzZWN0aW9uX3N0YXJ0KSwKICAgICAgICAgICAgICAgICAgZmMtPnBj X2JlZ2luLCBmYy0+cGNfYmVnaW4gKyBmYy0+cGNfcmFuZ2UpOwogICAgICAgICAgaWYgKCEgZG9f ZGVidWdfZnJhbWVzX2ludGVycCAmJiBhdWdtZW50YXRpb25fZGF0YV9sZW4pCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGk7CiAgICAgICAgICAgICAgcHJpbnRmICgi ICBBdWdtZW50YXRpb24gZGF0YTogICAgIik7CiAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8 IGF1Z21lbnRhdGlvbl9kYXRhX2xlbjsgKytpKQogICAgICAgICAgICAgICAgcHJpbnRmICgiICUw MngiLCBhdWdtZW50YXRpb25fZGF0YVtpXSk7CiAgICAgICAgICAgICAgcHV0Y2hhciAoJ1xuJyk7 CiAgICAgICAgICAgICAgcHV0Y2hhciAoJ1xuJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgoK CgogICAgICBpZiAoZG9fZGVidWdfZnJhbWVzX2ludGVycCkKICAgICAgICB7CgoKICAgICAgICAg IHVuc2lnbmVkIGNoYXIgKnRtcCA9IHN0YXJ0OwoKICAgICAgICAgIHdoaWxlIChzdGFydCA8IGJs b2NrX2VuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHVuc2lnbmVkIG9wLCBvcGE7CiAg ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyByZWc7CgogICAgICAgICAgICAgIG9wID0gKnN0YXJ0 Kys7CiAgICAgICAgICAgICAgb3BhID0gb3AgJiAweDNmOwogICAgICAgICAgICAgIGlmIChvcCAm IDB4YzApCiAgICAgICAgICAgICAgICBvcCAmPSAweGMwOwoKCgogICAgICAgICAgICAgIHN3aXRj aCAob3ApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjYXNlIERXX0NGQV9hZHZh bmNlX2xvYzoKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIERX X0NGQV9vZmZzZXQ6CiAgICAgICAgICAgICAgICAgIHJlYWRfbGViMTI4IChzdGFydCwgJiBsZW5n dGhfcmV0dXJuLCAwKTsgc3RhcnQgKz0gbGVuZ3RoX3JldHVybjsKICAgICAgICAgICAgICAgICAg ZnJhbWVfbmVlZF9zcGFjZSAoZmMsIG9wYSk7CiAgICAgICAgICAgICAgICAgIGZjLT5jb2xfdHlw ZVtvcGFdID0gRFdfQ0ZBX3VuZGVmaW5lZDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICBjYXNlIERXX0NGQV9yZXN0b3JlOgogICAgICAgICAgICAgICAgICBmcmFtZV9u ZWVkX3NwYWNlIChmYywgb3BhKTsKICAgICAgICAgICAgICAgICAgZmMtPmNvbF90eXBlW29wYV0g PSBEV19DRkFfdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgIGNhc2UgRFdfQ0ZBX3NldF9sb2M6CiAgICAgICAgICAgICAgICAgIHN0YXJ0ICs9IGVuY29k ZWRfcHRyX3NpemU7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz ZSBEV19DRkFfYWR2YW5jZV9sb2MxOgogICAgICAgICAgICAgICAgICBzdGFydCArPSAxOwogICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgRFdfQ0ZBX2FkdmFuY2Vf bG9jMjoKICAgICAgICAgICAgICAgICAgc3RhcnQgKz0gMjsKICAgICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgICAgICAgICBjYXNlIERXX0NGQV9hZHZhbmNlX2xvYzQ6CiAgICAgICAgICAg ICAgICAgIHN0YXJ0ICs9IDQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgY2FzZSBEV19DRkFfb2Zmc2V0X2V4dGVuZGVkOgogICAgICAgICAgICAgICAgICByZWcgPSBy ZWFkX2xlYjEyOCAoc3RhcnQsICYgbGVuZ3RoX3JldHVybiwgMCk7IHN0YXJ0ICs9IGxlbmd0aF9y ZXR1cm47IHJlYWRfbGViMTI4IChzdGFydCwgJiBsZW5ndGhfcmV0dXJuLCAwKTsgc3RhcnQgKz0g bGVuZ3RoX3JldHVybjsKICAgICAgICAgICAgICAgICAgZnJhbWVfbmVlZF9zcGFjZSAoZmMsIHJl Zyk7CiAgICAgICAgICAgICAgICAgIGZjLT5jb2xfdHlwZVtyZWddID0gRFdfQ0ZBX3VuZGVmaW5l ZDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIERXX0NGQV9y ZXN0b3JlX2V4dGVuZGVkOgogICAgICAgICAgICAgICAgICByZWcgPSByZWFkX2xlYjEyOCAoc3Rh cnQsICYgbGVuZ3RoX3JldHVybiwgMCk7IHN0YXJ0ICs9IGxlbmd0aF9yZXR1cm47CiAgICAgICAg ICAgICAgICAgIGZyYW1lX25lZWRfc3BhY2UgKGZjLCByZWcpOwogICAgICAgICAgICAgICAgICBm Yy0+Y29sX3R5cGVbcmVnXSA9IERXX0NGQV91bmRlZmluZWQ7CiAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgY2FzZSBEV19DRkFfdW5kZWZpbmVkOgogICAgICAgICAgICAg ICAgICByZWcgPSByZWFkX2xlYjEyOCAoc3RhcnQsICYgbGVuZ3RoX3JldHVybiwgMCk7IHN0YXJ0 ICs9IGxlbmd0aF9yZXR1cm47CiAgICAgICAgICAgICAgICAgIGZyYW1lX25lZWRfc3BhY2UgKGZj LCByZWcpOwogICAgICAgICAgICAgICAgICBmYy0+Y29sX3R5cGVbcmVnXSA9IERXX0NGQV91bmRl ZmluZWQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBEV19D RkFfc2FtZV92YWx1ZToKICAgICAgICAgICAgICAgICAgcmVnID0gcmVhZF9sZWIxMjggKHN0YXJ0 LCAmIGxlbmd0aF9yZXR1cm4sIDApOyBzdGFydCArPSBsZW5ndGhfcmV0dXJuOwogICAgICAgICAg ICAgICAgICBmcmFtZV9uZWVkX3NwYWNlIChmYywgcmVnKTsKICAgICAgICAgICAgICAgICAgZmMt PmNvbF90eXBlW3JlZ10gPSBEV19DRkFfdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgIGNhc2UgRFdfQ0ZBX3JlZ2lzdGVyOgogICAgICAgICAgICAgICAg ICByZWcgPSByZWFkX2xlYjEyOCAoc3RhcnQsICYgbGVuZ3RoX3JldHVybiwgMCk7IHN0YXJ0ICs9 IGxlbmd0aF9yZXR1cm47IHJlYWRfbGViMTI4IChzdGFydCwgJiBsZW5ndGhfcmV0dXJuLCAwKTsg c3RhcnQgKz0gbGVuZ3RoX3JldHVybjsKICAgICAgICAgICAgICAgICAgZnJhbWVfbmVlZF9zcGFj ZSAoZmMsIHJlZyk7CiAgICAgICAgICAgICAgICAgIGZjLT5jb2xfdHlwZVtyZWddID0gRFdfQ0ZB X3VuZGVmaW5lZDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNl IERXX0NGQV9kZWZfY2ZhOgogICAgICAgICAgICAgICAgICByZWFkX2xlYjEyOCAoc3RhcnQsICYg bGVuZ3RoX3JldHVybiwgMCk7IHN0YXJ0ICs9IGxlbmd0aF9yZXR1cm47IHJlYWRfbGViMTI4IChz dGFydCwgJiBsZW5ndGhfcmV0dXJuLCAwKTsgc3RhcnQgKz0gbGVuZ3RoX3JldHVybjsKICAgICAg ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIERXX0NGQV9kZWZfY2ZhX3Jl Z2lzdGVyOgogICAgICAgICAgICAgICAgICByZWFkX2xlYjEyOCAoc3RhcnQsICYgbGVuZ3RoX3Jl dHVybiwgMCk7IHN0YXJ0ICs9IGxlbmd0aF9yZXR1cm47CiAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgY2FzZSBEV19DRkFfZGVmX2NmYV9vZmZzZXQ6CiAgICAgICAgICAg ICAgICAgIHJlYWRfbGViMTI4IChzdGFydCwgJiBsZW5ndGhfcmV0dXJuLCAwKTsgc3RhcnQgKz0g bGVuZ3RoX3JldHVybjsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBj YXNlIERXX0NGQV9vZmZzZXRfZXh0ZW5kZWRfc2Y6CiAgICAgICAgICAgICAgICAgIHJlZyA9IHJl YWRfbGViMTI4IChzdGFydCwgJiBsZW5ndGhfcmV0dXJuLCAwKTsgc3RhcnQgKz0gbGVuZ3RoX3Jl dHVybjsgcmVhZF9sZWIxMjggKHN0YXJ0LCAmIGxlbmd0aF9yZXR1cm4sIDEpOyBzdGFydCArPSBs ZW5ndGhfcmV0dXJuOwogICAgICAgICAgICAgICAgICBmcmFtZV9uZWVkX3NwYWNlIChmYywgcmVn KTsKICAgICAgICAgICAgICAgICAgZmMtPmNvbF90eXBlW3JlZ10gPSBEV19DRkFfdW5kZWZpbmVk OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgRFdfQ0ZBX2Rl Zl9jZmFfc2Y6CiAgICAgICAgICAgICAgICAgIHJlYWRfbGViMTI4IChzdGFydCwgJiBsZW5ndGhf cmV0dXJuLCAwKTsgc3RhcnQgKz0gbGVuZ3RoX3JldHVybjsgcmVhZF9sZWIxMjggKHN0YXJ0LCAm IGxlbmd0aF9yZXR1cm4sIDEpOyBzdGFydCArPSBsZW5ndGhfcmV0dXJuOwogICAgICAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgRFdfQ0ZBX2RlZl9jZmFfb2Zmc2V0X3Nm OgogICAgICAgICAgICAgICAgICByZWFkX2xlYjEyOCAoc3RhcnQsICYgbGVuZ3RoX3JldHVybiwg MSk7IHN0YXJ0ICs9IGxlbmd0aF9yZXR1cm47CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgY2FzZSBEV19DRkFfR05VX2FyZ3Nfc2l6ZToKICAgICAgICAgICAgICAgICAg cmVhZF9sZWIxMjggKHN0YXJ0LCAmIGxlbmd0aF9yZXR1cm4sIDApOyBzdGFydCArPSBsZW5ndGhf cmV0dXJuOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgRFdf Q0ZBX0dOVV9uZWdhdGl2ZV9vZmZzZXRfZXh0ZW5kZWQ6CiAgICAgICAgICAgICAgICAgIHJlZyA9 IHJlYWRfbGViMTI4IChzdGFydCwgJiBsZW5ndGhfcmV0dXJuLCAwKTsgc3RhcnQgKz0gbGVuZ3Ro X3JldHVybjsgcmVhZF9sZWIxMjggKHN0YXJ0LCAmIGxlbmd0aF9yZXR1cm4sIDApOyBzdGFydCAr PSBsZW5ndGhfcmV0dXJuOwogICAgICAgICAgICAgICAgICBmcmFtZV9uZWVkX3NwYWNlIChmYywg cmVnKTsKICAgICAgICAgICAgICAgICAgZmMtPmNvbF90eXBlW3JlZ10gPSBEV19DRkFfdW5kZWZp bmVkOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBzdGFydCA9IHRtcDsKICAg ICAgICB9CgoKCgogICAgICB3aGlsZSAoc3RhcnQgPCBibG9ja19lbmQpCiAgICAgICAgewogICAg ICAgICAgdW5zaWduZWQgb3AsIG9wYTsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdWwsIHJlZywg cm9mZnM7CiAgICAgICAgICBsb25nIGwsIG9mczsKICAgICAgICAgIGJmZF92bWEgdm1hOwoKICAg ICAgICAgIG9wID0gKnN0YXJ0Kys7CiAgICAgICAgICBvcGEgPSBvcCAmIDB4M2Y7CiAgICAgICAg ICBpZiAob3AgJiAweGMwKQogICAgICAgICAgICBvcCAmPSAweGMwOwoKCgogICAgICAgICAgc3dp dGNoIChvcCkKICAgICAgICAgICAgewogICAgICAgICAgICBjYXNlIERXX0NGQV9hZHZhbmNlX2xv YzoKICAgICAgICAgICAgICBpZiAoZG9fZGVidWdfZnJhbWVzX2ludGVycCkKICAgICAgICAgICAg ICAgIGZyYW1lX2Rpc3BsYXlfcm93IChmYywgJm5lZWRfY29sX2hlYWRlcnMsICZtYXhfcmVncyk7 CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcHJpbnRmICgiICBEV19DRkFfYWR2 YW5jZV9sb2M6ICVkIHRvICUwOGx4XG4iLAogICAgICAgICAgICAgICAgICAgICAgICBvcGEgKiBm Yy0+Y29kZV9mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgIGZjLT5wY19iZWdpbiArIG9w YSAqIGZjLT5jb2RlX2ZhY3Rvcik7CiAgICAgICAgICAgICAgZmMtPnBjX2JlZ2luICs9IG9wYSAq IGZjLT5jb2RlX2ZhY3RvcjsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2Ug RFdfQ0ZBX29mZnNldDoKICAgICAgICAgICAgICByb2ZmcyA9IHJlYWRfbGViMTI4IChzdGFydCwg JiBsZW5ndGhfcmV0dXJuLCAwKTsgc3RhcnQgKz0gbGVuZ3RoX3JldHVybjsKICAgICAgICAgICAg ICBpZiAoISBkb19kZWJ1Z19mcmFtZXNfaW50ZXJwKQogICAgICAgICAgICAgICAgcHJpbnRmICgi ICBEV19DRkFfb2Zmc2V0OiByJWQgYXQgY2ZhJStsZFxuIiwKICAgICAgICAgICAgICAgICAgICAg ICAgb3BhLCByb2ZmcyAqIGZjLT5kYXRhX2ZhY3Rvcik7CiAgICAgICAgICAgICAgZmMtPmNvbF90 eXBlW29wYV0gPSBEV19DRkFfb2Zmc2V0OwogICAgICAgICAgICAgIGZjLT5jb2xfb2Zmc2V0W29w YV0gPSByb2ZmcyAqIGZjLT5kYXRhX2ZhY3RvcjsKICAgICAgICAgICAgICBicmVhazsKCiAgICAg ICAgICAgIGNhc2UgRFdfQ0ZBX3Jlc3RvcmU6CiAgICAgICAgICAgICAgaWYgKCEgZG9fZGVidWdf ZnJhbWVzX2ludGVycCkKICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgRFdfQ0ZBX3Jlc3RvcmU6 IHIlZFxuIiwgb3BhKTsKICAgICAgICAgICAgICBmYy0+Y29sX3R5cGVbb3BhXSA9IGNpZS0+Y29s X3R5cGVbb3BhXTsKICAgICAgICAgICAgICBmYy0+Y29sX29mZnNldFtvcGFdID0gY2llLT5jb2xf b2Zmc2V0W29wYV07CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIERXX0NG QV9zZXRfbG9jOgogICAgICAgICAgICAgIHZtYSA9IGJ5dGVfZ2V0IChzdGFydCwgZW5jb2RlZF9w dHJfc2l6ZSk7CiAgICAgICAgICAgICAgaWYgKChmYy0+ZmRlX2VuY29kaW5nICYgMHg3MCkgPT0g MHgxMCkKICAgICAgICAgICAgICAgIHZtYSArPSBzZWN0aW9uLT5zaF9hZGRyICsgKHN0YXJ0IC0g c2VjdGlvbl9zdGFydCk7CiAgICAgICAgICAgICAgc3RhcnQgKz0gZW5jb2RlZF9wdHJfc2l6ZTsK ICAgICAgICAgICAgICBpZiAoZG9fZGVidWdfZnJhbWVzX2ludGVycCkKICAgICAgICAgICAgICAg IGZyYW1lX2Rpc3BsYXlfcm93IChmYywgJm5lZWRfY29sX2hlYWRlcnMsICZtYXhfcmVncyk7CiAg ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcHJpbnRmICgiICBEV19DRkFfc2V0X2xv YzogJTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKXZtYSk7CiAgICAgICAgICAgICAgZmMtPnBjX2Jl Z2luID0gdm1hOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBEV19DRkFf YWR2YW5jZV9sb2MxOgogICAgICAgICAgICAgIG9mcyA9IGJ5dGVfZ2V0IChzdGFydCwgMSk7IHN0 YXJ0ICs9IDE7CiAgICAgICAgICAgICAgaWYgKGRvX2RlYnVnX2ZyYW1lc19pbnRlcnApCiAgICAg ICAgICAgICAgICBmcmFtZV9kaXNwbGF5X3JvdyAoZmMsICZuZWVkX2NvbF9oZWFkZXJzLCAmbWF4 X3JlZ3MpOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgRFdf Q0ZBX2FkdmFuY2VfbG9jMTogJWxkIHRvICUwOGx4XG4iLAogICAgICAgICAgICAgICAgICAgICAg ICBvZnMgKiBmYy0+Y29kZV9mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgIGZjLT5wY19i ZWdpbiArIG9mcyAqIGZjLT5jb2RlX2ZhY3Rvcik7CiAgICAgICAgICAgICAgZmMtPnBjX2JlZ2lu ICs9IG9mcyAqIGZjLT5jb2RlX2ZhY3RvcjsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAg ICAgIGNhc2UgRFdfQ0ZBX2FkdmFuY2VfbG9jMjoKICAgICAgICAgICAgICBvZnMgPSBieXRlX2dl dCAoc3RhcnQsIDIpOyBzdGFydCArPSAyOwogICAgICAgICAgICAgIGlmIChkb19kZWJ1Z19mcmFt ZXNfaW50ZXJwKQogICAgICAgICAgICAgICAgZnJhbWVfZGlzcGxheV9yb3cgKGZjLCAmbmVlZF9j b2xfaGVhZGVycywgJm1heF9yZWdzKTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ICBwcmludGYgKCIgIERXX0NGQV9hZHZhbmNlX2xvYzI6ICVsZCB0byAlMDhseFxuIiwKICAgICAg ICAgICAgICAgICAgICAgICAgb2ZzICogZmMtPmNvZGVfZmFjdG9yLAogICAgICAgICAgICAgICAg ICAgICAgICBmYy0+cGNfYmVnaW4gKyBvZnMgKiBmYy0+Y29kZV9mYWN0b3IpOwogICAgICAgICAg ICAgIGZjLT5wY19iZWdpbiArPSBvZnMgKiBmYy0+Y29kZV9mYWN0b3I7CiAgICAgICAgICAgICAg YnJlYWs7CgogICAgICAgICAgICBjYXNlIERXX0NGQV9hZHZhbmNlX2xvYzQ6CiAgICAgICAgICAg ICAgb2ZzID0gYnl0ZV9nZXQgKHN0YXJ0LCA0KTsgc3RhcnQgKz0gNDsKICAgICAgICAgICAgICBp ZiAoZG9fZGVidWdfZnJhbWVzX2ludGVycCkKICAgICAgICAgICAgICAgIGZyYW1lX2Rpc3BsYXlf cm93IChmYywgJm5lZWRfY29sX2hlYWRlcnMsICZtYXhfcmVncyk7CiAgICAgICAgICAgICAgZWxz ZQogICAgICAgICAgICAgICAgcHJpbnRmICgiICBEV19DRkFfYWR2YW5jZV9sb2M0OiAlbGQgdG8g JTA4bHhcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9mcyAqIGZjLT5jb2RlX2ZhY3RvciwK ICAgICAgICAgICAgICAgICAgICAgICAgZmMtPnBjX2JlZ2luICsgb2ZzICogZmMtPmNvZGVfZmFj dG9yKTsKICAgICAgICAgICAgICBmYy0+cGNfYmVnaW4gKz0gb2ZzICogZmMtPmNvZGVfZmFjdG9y OwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBEV19DRkFfb2Zmc2V0X2V4 dGVuZGVkOgogICAgICAgICAgICAgIHJlZyA9IHJlYWRfbGViMTI4IChzdGFydCwgJiBsZW5ndGhf cmV0dXJuLCAwKTsgc3RhcnQgKz0gbGVuZ3RoX3JldHVybjsKICAgICAgICAgICAgICByb2ZmcyA9 IHJlYWRfbGViMTI4IChzdGFydCwgJiBsZW5ndGhfcmV0dXJuLCAwKTsgc3RhcnQgKz0gbGVuZ3Ro X3JldHVybjsKICAgICAgICAgICAgICBpZiAoISBkb19kZWJ1Z19mcmFtZXNfaW50ZXJwKQogICAg ICAgICAgICAgICAgcHJpbnRmICgiICBEV19DRkFfb2Zmc2V0X2V4dGVuZGVkOiByJWxkIGF0IGNm YSUrbGRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlZywgcm9mZnMgKiBmYy0+ZGF0YV9m YWN0b3IpOwogICAgICAgICAgICAgIGZjLT5jb2xfdHlwZVtyZWddID0gRFdfQ0ZBX29mZnNldDsK ICAgICAgICAgICAgICBmYy0+Y29sX29mZnNldFtyZWddID0gcm9mZnMgKiBmYy0+ZGF0YV9mYWN0 b3I7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIERXX0NGQV9yZXN0b3Jl X2V4dGVuZGVkOgogICAgICAgICAgICAgIHJlZyA9IHJlYWRfbGViMTI4IChzdGFydCwgJiBsZW5n dGhfcmV0dXJuLCAwKTsgc3RhcnQgKz0gbGVuZ3RoX3JldHVybjsKICAgICAgICAgICAgICBpZiAo ISBkb19kZWJ1Z19mcmFtZXNfaW50ZXJwKQogICAgICAgICAgICAgICAgcHJpbnRmICgiICBEV19D RkFfcmVzdG9yZV9leHRlbmRlZDogciVsZFxuIiwgcmVnKTsKICAgICAgICAgICAgICBmYy0+Y29s X3R5cGVbcmVnXSA9IGNpZS0+Y29sX3R5cGVbcmVnXTsKICAgICAgICAgICAgICBmYy0+Y29sX29m ZnNldFtyZWddID0gY2llLT5jb2xfb2Zmc2V0W3JlZ107CiAgICAgICAgICAgICAgYnJlYWs7Cgog ICAgICAgICAgICBjYXNlIERXX0NGQV91bmRlZmluZWQ6CiAgICAgICAgICAgICAgcmVnID0gcmVh ZF9sZWIxMjggKHN0YXJ0LCAmIGxlbmd0aF9yZXR1cm4sIDApOyBzdGFydCArPSBsZW5ndGhfcmV0 dXJuOwogICAgICAgICAgICAgIGlmICghIGRvX2RlYnVnX2ZyYW1lc19pbnRlcnApCiAgICAgICAg ICAgICAgICBwcmludGYgKCIgIERXX0NGQV91bmRlZmluZWQ6IHIlbGRcbiIsIHJlZyk7CiAgICAg ICAgICAgICAgZmMtPmNvbF90eXBlW3JlZ10gPSBEV19DRkFfdW5kZWZpbmVkOwogICAgICAgICAg ICAgIGZjLT5jb2xfb2Zmc2V0W3JlZ10gPSAwOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAg ICAgICAgY2FzZSBEV19DRkFfc2FtZV92YWx1ZToKICAgICAgICAgICAgICByZWcgPSByZWFkX2xl YjEyOCAoc3RhcnQsICYgbGVuZ3RoX3JldHVybiwgMCk7IHN0YXJ0ICs9IGxlbmd0aF9yZXR1cm47 CiAgICAgICAgICAgICAgaWYgKCEgZG9fZGVidWdfZnJhbWVzX2ludGVycCkKICAgICAgICAgICAg ICAgIHByaW50ZiAoIiAgRFdfQ0ZBX3NhbWVfdmFsdWU6IHIlbGRcbiIsIHJlZyk7CiAgICAgICAg ICAgICAgZmMtPmNvbF90eXBlW3JlZ10gPSBEV19DRkFfc2FtZV92YWx1ZTsKICAgICAgICAgICAg ICBmYy0+Y29sX29mZnNldFtyZWddID0gMDsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAg ICAgIGNhc2UgRFdfQ0ZBX3JlZ2lzdGVyOgogICAgICAgICAgICAgIHJlZyA9IHJlYWRfbGViMTI4 IChzdGFydCwgJiBsZW5ndGhfcmV0dXJuLCAwKTsgc3RhcnQgKz0gbGVuZ3RoX3JldHVybjsKICAg ICAgICAgICAgICByb2ZmcyA9IHJlYWRfbGViMTI4IChzdGFydCwgJiBsZW5ndGhfcmV0dXJuLCAw KTsgc3RhcnQgKz0gbGVuZ3RoX3JldHVybjsKICAgICAgICAgICAgICBpZiAoISBkb19kZWJ1Z19m cmFtZXNfaW50ZXJwKQogICAgICAgICAgICAgICAgcHJpbnRmICgiICBEV19DRkFfcmVnaXN0ZXI6 IHIlbGRcbiIsIHJlZyk7CiAgICAgICAgICAgICAgZmMtPmNvbF90eXBlW3JlZ10gPSBEV19DRkFf cmVnaXN0ZXI7CiAgICAgICAgICAgICAgZmMtPmNvbF9vZmZzZXRbcmVnXSA9IHJvZmZzOwogICAg ICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBEV19DRkFfcmVtZW1iZXJfc3RhdGU6 CiAgICAgICAgICAgICAgaWYgKCEgZG9fZGVidWdfZnJhbWVzX2ludGVycCkKICAgICAgICAgICAg ICAgIHByaW50ZiAoIiAgRFdfQ0ZBX3JlbWVtYmVyX3N0YXRlXG4iKTsKICAgICAgICAgICAgICBy cyA9IChGcmFtZV9DaHVuayAqKSB4bWFsbG9jIChzaXplb2YgKEZyYW1lX0NodW5rKSk7CiAgICAg ICAgICAgICAgcnMtPm5jb2xzID0gZmMtPm5jb2xzOwogICAgICAgICAgICAgIHJzLT5jb2xfdHlw ZSA9IChzaG9ydCBpbnQgKikgeG1hbGxvYyAocnMtPm5jb2xzICogc2l6ZW9mIChzaG9ydCBpbnQp KTsKICAgICAgICAgICAgICBycy0+Y29sX29mZnNldCA9IChpbnQgKikgeG1hbGxvYyAocnMtPm5j b2xzICogc2l6ZW9mIChpbnQpKTsKICAgICAgICAgICAgICBtZW1jcHkgKHJzLT5jb2xfdHlwZSwg ZmMtPmNvbF90eXBlLCBycy0+bmNvbHMpOwogICAgICAgICAgICAgIG1lbWNweSAocnMtPmNvbF9v ZmZzZXQsIGZjLT5jb2xfb2Zmc2V0LCBycy0+bmNvbHMgKiBzaXplb2YgKGludCkpOwogICAgICAg ICAgICAgIHJzLT5uZXh0ID0gcmVtZW1iZXJlZF9zdGF0ZTsKICAgICAgICAgICAgICByZW1lbWJl cmVkX3N0YXRlID0gcnM7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIERX X0NGQV9yZXN0b3JlX3N0YXRlOgogICAgICAgICAgICAgIGlmICghIGRvX2RlYnVnX2ZyYW1lc19p bnRlcnApCiAgICAgICAgICAgICAgICBwcmludGYgKCIgIERXX0NGQV9yZXN0b3JlX3N0YXRlXG4i KTsKICAgICAgICAgICAgICBycyA9IHJlbWVtYmVyZWRfc3RhdGU7CiAgICAgICAgICAgICAgcmVt ZW1iZXJlZF9zdGF0ZSA9IHJzLT5uZXh0OwogICAgICAgICAgICAgIGZyYW1lX25lZWRfc3BhY2Ug KGZjLCBycy0+bmNvbHMtMSk7CiAgICAgICAgICAgICAgbWVtY3B5IChmYy0+Y29sX3R5cGUsIHJz LT5jb2xfdHlwZSwgcnMtPm5jb2xzKTsKICAgICAgICAgICAgICBtZW1jcHkgKGZjLT5jb2xfb2Zm c2V0LCBycy0+Y29sX29mZnNldCwgcnMtPm5jb2xzICogc2l6ZW9mIChpbnQpKTsKICAgICAgICAg ICAgICBmcmVlIChycy0+Y29sX3R5cGUpOwogICAgICAgICAgICAgIGZyZWUgKHJzLT5jb2xfb2Zm c2V0KTsKICAgICAgICAgICAgICBmcmVlIChycyk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAg ICAgICAgICBjYXNlIERXX0NGQV9kZWZfY2ZhOgogICAgICAgICAgICAgIGZjLT5jZmFfcmVnID0g cmVhZF9sZWIxMjggKHN0YXJ0LCAmIGxlbmd0aF9yZXR1cm4sIDApOyBzdGFydCArPSBsZW5ndGhf cmV0dXJuOwogICAgICAgICAgICAgIGZjLT5jZmFfb2Zmc2V0ID0gcmVhZF9sZWIxMjggKHN0YXJ0 LCAmIGxlbmd0aF9yZXR1cm4sIDApOyBzdGFydCArPSBsZW5ndGhfcmV0dXJuOwogICAgICAgICAg ICAgIGlmICghIGRvX2RlYnVnX2ZyYW1lc19pbnRlcnApCiAgICAgICAgICAgICAgICBwcmludGYg KCIgIERXX0NGQV9kZWZfY2ZhOiByJWQgb2ZzICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAg ICBmYy0+Y2ZhX3JlZywgZmMtPmNmYV9vZmZzZXQpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAg ICAgICAgICAgY2FzZSBEV19DRkFfZGVmX2NmYV9yZWdpc3RlcjoKICAgICAgICAgICAgICBmYy0+ Y2ZhX3JlZyA9IHJlYWRfbGViMTI4IChzdGFydCwgJiBsZW5ndGhfcmV0dXJuLCAwKTsgc3RhcnQg Kz0gbGVuZ3RoX3JldHVybjsKICAgICAgICAgICAgICBpZiAoISBkb19kZWJ1Z19mcmFtZXNfaW50 ZXJwKQogICAgICAgICAgICAgICAgcHJpbnRmICgiICBEV19DRkFfZGVmX2NmYV9yZWc6IHIlZFxu IiwgZmMtPmNmYV9yZWcpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBE V19DRkFfZGVmX2NmYV9vZmZzZXQ6CiAgICAgICAgICAgICAgZmMtPmNmYV9vZmZzZXQgPSByZWFk X2xlYjEyOCAoc3RhcnQsICYgbGVuZ3RoX3JldHVybiwgMCk7IHN0YXJ0ICs9IGxlbmd0aF9yZXR1 cm47CiAgICAgICAgICAgICAgaWYgKCEgZG9fZGVidWdfZnJhbWVzX2ludGVycCkKICAgICAgICAg ICAgICAgIHByaW50ZiAoIiAgRFdfQ0ZBX2RlZl9jZmFfb2Zmc2V0OiAlZFxuIiwgZmMtPmNmYV9v ZmZzZXQpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBEV19DRkFfbm9w OgogICAgICAgICAgICAgIGlmICghIGRvX2RlYnVnX2ZyYW1lc19pbnRlcnApCiAgICAgICAgICAg ICAgICBwcmludGYgKCIgIERXX0NGQV9ub3BcbiIpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAg ICAgICAgICAgY2FzZSBEV19DRkFfb2Zmc2V0X2V4dGVuZGVkX3NmOgogICAgICAgICAgICAgIHJl ZyA9IHJlYWRfbGViMTI4IChzdGFydCwgJiBsZW5ndGhfcmV0dXJuLCAwKTsgc3RhcnQgKz0gbGVu Z3RoX3JldHVybjsKICAgICAgICAgICAgICBsID0gcmVhZF9sZWIxMjggKHN0YXJ0LCAmIGxlbmd0 aF9yZXR1cm4sIDEpOyBzdGFydCArPSBsZW5ndGhfcmV0dXJuOwogICAgICAgICAgICAgIGZyYW1l X25lZWRfc3BhY2UgKGZjLCByZWcpOwogICAgICAgICAgICAgIGlmICghIGRvX2RlYnVnX2ZyYW1l c19pbnRlcnApCiAgICAgICAgICAgICAgICBwcmludGYgKCIgIERXX0NGQV9vZmZzZXRfZXh0ZW5k ZWRfc2Y6IHIlbGQgYXQgY2ZhJStsZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmVnLCBs ICogZmMtPmRhdGFfZmFjdG9yKTsKICAgICAgICAgICAgICBmYy0+Y29sX3R5cGVbcmVnXSA9IERX X0NGQV9vZmZzZXQ7CiAgICAgICAgICAgICAgZmMtPmNvbF9vZmZzZXRbcmVnXSA9IGwgKiBmYy0+ ZGF0YV9mYWN0b3I7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIERXX0NG QV9kZWZfY2ZhX3NmOgogICAgICAgICAgICAgIGZjLT5jZmFfcmVnID0gcmVhZF9sZWIxMjggKHN0 YXJ0LCAmIGxlbmd0aF9yZXR1cm4sIDApOyBzdGFydCArPSBsZW5ndGhfcmV0dXJuOwogICAgICAg ICAgICAgIGZjLT5jZmFfb2Zmc2V0ID0gcmVhZF9sZWIxMjggKHN0YXJ0LCAmIGxlbmd0aF9yZXR1 cm4sIDEpOyBzdGFydCArPSBsZW5ndGhfcmV0dXJuOwogICAgICAgICAgICAgIGlmICghIGRvX2Rl YnVnX2ZyYW1lc19pbnRlcnApCiAgICAgICAgICAgICAgICBwcmludGYgKCIgIERXX0NGQV9kZWZf Y2ZhX3NmOiByJWQgb2ZzICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICBmYy0+Y2ZhX3Jl ZywgZmMtPmNmYV9vZmZzZXQpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2Fz ZSBEV19DRkFfZGVmX2NmYV9vZmZzZXRfc2Y6CiAgICAgICAgICAgICAgZmMtPmNmYV9vZmZzZXQg PSByZWFkX2xlYjEyOCAoc3RhcnQsICYgbGVuZ3RoX3JldHVybiwgMSk7IHN0YXJ0ICs9IGxlbmd0 aF9yZXR1cm47CiAgICAgICAgICAgICAgaWYgKCEgZG9fZGVidWdfZnJhbWVzX2ludGVycCkKICAg ICAgICAgICAgICAgIHByaW50ZiAoIiAgRFdfQ0ZBX2RlZl9jZmFfb2Zmc2V0X3NmOiAlZFxuIiwg ZmMtPmNmYV9vZmZzZXQpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBE V19DRkFfR05VX3dpbmRvd19zYXZlOgogICAgICAgICAgICAgIGlmICghIGRvX2RlYnVnX2ZyYW1l c19pbnRlcnApCiAgICAgICAgICAgICAgICBwcmludGYgKCIgIERXX0NGQV9HTlVfd2luZG93X3Nh dmVcbiIpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBEV19DRkFfR05V X2FyZ3Nfc2l6ZToKICAgICAgICAgICAgICB1bCA9IHJlYWRfbGViMTI4IChzdGFydCwgJiBsZW5n dGhfcmV0dXJuLCAwKTsgc3RhcnQgKz0gbGVuZ3RoX3JldHVybjsKICAgICAgICAgICAgICBpZiAo ISBkb19kZWJ1Z19mcmFtZXNfaW50ZXJwKQogICAgICAgICAgICAgICAgcHJpbnRmICgiICBEV19D RkFfR05VX2FyZ3Nfc2l6ZTogJWxkXG4iLCB1bCk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAg ICAgICAgICBjYXNlIERXX0NGQV9HTlVfbmVnYXRpdmVfb2Zmc2V0X2V4dGVuZGVkOgogICAgICAg ICAgICAgIHJlZyA9IHJlYWRfbGViMTI4IChzdGFydCwgJiBsZW5ndGhfcmV0dXJuLCAwKTsgc3Rh cnQgKz0gbGVuZ3RoX3JldHVybjsKICAgICAgICAgICAgICBsID0gLSByZWFkX2xlYjEyOCAoc3Rh cnQsICYgbGVuZ3RoX3JldHVybiwgMCk7IHN0YXJ0ICs9IGxlbmd0aF9yZXR1cm47CiAgICAgICAg ICAgICAgZnJhbWVfbmVlZF9zcGFjZSAoZmMsIHJlZyk7CiAgICAgICAgICAgICAgaWYgKCEgZG9f ZGVidWdfZnJhbWVzX2ludGVycCkKICAgICAgICAgICAgICAgIHByaW50ZiAoIiAgRFdfQ0ZBX0dO VV9uZWdhdGl2ZV9vZmZzZXRfZXh0ZW5kZWQ6IHIlbGQgYXQgY2ZhJStsZFxuIiwKICAgICAgICAg ICAgICAgICAgICAgICAgcmVnLCBsICogZmMtPmRhdGFfZmFjdG9yKTsKICAgICAgICAgICAgICBm Yy0+Y29sX3R5cGVbcmVnXSA9IERXX0NGQV9vZmZzZXQ7CiAgICAgICAgICAgICAgZmMtPmNvbF9v ZmZzZXRbcmVnXSA9IGwgKiBmYy0+ZGF0YV9mYWN0b3I7CiAgICAgICAgICAgICAgYnJlYWs7CgoK ICAgICAgICAgICAgY2FzZSBEV19DRkFfZGVmX2NmYV9leHByZXNzaW9uOgogICAgICAgICAgICAg IGZwcmludGYgKHN0ZGVyciwgInVuc3VwcG9ydGVkIERXX0NGQV9kZWZfY2ZhX2V4cHJlc3Npb25c biIpOwogICAgICAgICAgICAgIHN0YXJ0ID0gYmxvY2tfZW5kOwogICAgICAgICAgICAgIGJyZWFr OwoKICAgICAgICAgICAgY2FzZSBEV19DRkFfZXhwcmVzc2lvbjoKICAgICAgICAgICAgICBmcHJp bnRmIChzdGRlcnIsICJ1bnN1cHBvcnRlZCBEV19DRkFfZXhwcmVzc2lvblxuIik7CiAgICAgICAg ICAgICAgc3RhcnQgPSBibG9ja19lbmQ7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAg ICBkZWZhdWx0OgogICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgInVuc3VwcG9ydGVkIG9y IHVua25vd24gRFdfQ0ZBXyVkXG4iLCBvcCk7CiAgICAgICAgICAgICAgc3RhcnQgPSBibG9ja19l bmQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBpZiAoZG9fZGVidWdfZnJhbWVzX2lu dGVycCkKICAgICAgICBmcmFtZV9kaXNwbGF5X3JvdyAoZmMsICZuZWVkX2NvbF9oZWFkZXJzLCAm bWF4X3JlZ3MpOwoKICAgICAgc3RhcnQgPSBibG9ja19lbmQ7CiAgICB9CgogIHByaW50ZiAoIlxu Iik7CgogIHJldHVybiAxOwp9CgoKCgoKc3RhdGljIGludApkaXNwbGF5X2RlYnVnX25vdF9zdXBw b3J0ZWQgKHNlY3Rpb24sIHN0YXJ0LCBmaWxlKQogICAgIEVsZl9JbnRlcm5hbF9TaGRyICpzZWN0 aW9uOwogICAgIHVuc2lnbmVkIGNoYXIgKnN0YXJ0IF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9f KSk7CiAgICAgRklMRSAqZmlsZSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwp7CiAgcHJp bnRmICgoIkRpc3BsYXlpbmcgdGhlIGRlYnVnIGNvbnRlbnRzIG9mIHNlY3Rpb24gJXMgaXMgbm90 IHlldCBzdXBwb3J0ZWQuXG4iKSwKICAgICAgICAgICAgKChzZWN0aW9uKSA9PSAoKHZvaWQgKikw KSA/ICI8bm9uZT4iIDogKChzZWN0aW9uKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3Ro ID8gIjxjb3JydXB0PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjdGlvbiktPnNoX25hbWUpKSk7Cgog IHJldHVybiAxOwp9CgoKCgpzdGF0aWMgaW50CnByZXNjYW5fZGVidWdfaW5mbyAoc2VjdGlvbiwg c3RhcnQsIGZpbGUpCiAgICAgRWxmX0ludGVybmFsX1NoZHIgKnNlY3Rpb24gX19hdHRyaWJ1dGVf XyAoKF9fdW51c2VkX18pKTsKICAgICB1bnNpZ25lZCBjaGFyICpzdGFydDsKICAgICBGSUxFICpm aWxlIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CnsKICBEV0FSRjJfRXh0ZXJuYWxfQ29t cFVuaXQgKmV4dGVybmFsOwoKICBleHRlcm5hbCA9IChEV0FSRjJfRXh0ZXJuYWxfQ29tcFVuaXQg Kikgc3RhcnQ7CgogIGRlYnVnX2xpbmVfcG9pbnRlcl9zaXplID0gYnl0ZV9nZXQgKGV4dGVybmFs LT5jdV9wb2ludGVyX3NpemUsIHNpemVvZiAoZXh0ZXJuYWwtPmN1X3BvaW50ZXJfc2l6ZSkpOwog IHJldHVybiAwOwp9CgoKCgoKc3RydWN0CnsKICBjb25zdCBjaGFyICpjb25zdCBuYW1lOwogIGlu dCAoKmRpc3BsYXkpIChFbGZfSW50ZXJuYWxfU2hkciAqLCB1bnNpZ25lZCBjaGFyICosIEZJTEUg Kik7CiAgaW50ICgqcHJlc2NhbikgKEVsZl9JbnRlcm5hbF9TaGRyICosIHVuc2lnbmVkIGNoYXIg KiwgRklMRSAqKTsKfQpkZWJ1Z19kaXNwbGF5c1tdID0KewogIHsgIi5kZWJ1Z19hYmJyZXYiLCBk aXNwbGF5X2RlYnVnX2FiYnJldiwgKCh2b2lkICopMCkgfSwKICB7ICIuZGVidWdfYXJhbmdlcyIs IGRpc3BsYXlfZGVidWdfYXJhbmdlcywgKCh2b2lkICopMCkgfSwKICB7ICIuZGVidWdfZnJhbWUi LCBkaXNwbGF5X2RlYnVnX2ZyYW1lcywgKCh2b2lkICopMCkgfSwKICB7ICIuZGVidWdfaW5mbyIs IGRpc3BsYXlfZGVidWdfaW5mbywgcHJlc2Nhbl9kZWJ1Z19pbmZvIH0sCiAgeyAiLmRlYnVnX2xp bmUiLCBkaXNwbGF5X2RlYnVnX2xpbmVzLCAoKHZvaWQgKikwKSB9LAogIHsgIi5kZWJ1Z19wdWJu YW1lcyIsIGRpc3BsYXlfZGVidWdfcHVibmFtZXMsICgodm9pZCAqKTApIH0sCiAgeyAiLmVoX2Zy YW1lIiwgZGlzcGxheV9kZWJ1Z19mcmFtZXMsICgodm9pZCAqKTApIH0sCiAgeyAiLmRlYnVnX21h Y2luZm8iLCBkaXNwbGF5X2RlYnVnX21hY2luZm8sICgodm9pZCAqKTApIH0sCiAgeyAiLmRlYnVn X3N0ciIsIGRpc3BsYXlfZGVidWdfc3RyLCAoKHZvaWQgKikwKSB9LAogIHsgIi5kZWJ1Z19sb2Mi LCBkaXNwbGF5X2RlYnVnX2xvYywgKCh2b2lkICopMCkgfSwKICB7ICIuZGVidWdfcHVidHlwZXMi LCBkaXNwbGF5X2RlYnVnX25vdF9zdXBwb3J0ZWQsICgodm9pZCAqKTApIH0sCiAgeyAiLmRlYnVn X3JhbmdlcyIsIGRpc3BsYXlfZGVidWdfbm90X3N1cHBvcnRlZCwgKCh2b2lkICopMCkgfSwKICB7 ICIuZGVidWdfc3RhdGljX2Z1bmMiLCBkaXNwbGF5X2RlYnVnX25vdF9zdXBwb3J0ZWQsICgodm9p ZCAqKTApIH0sCiAgeyAiLmRlYnVnX3N0YXRpY192YXJzIiwgZGlzcGxheV9kZWJ1Z19ub3Rfc3Vw cG9ydGVkLCAoKHZvaWQgKikwKSB9LAogIHsgIi5kZWJ1Z190eXBlcyIsIGRpc3BsYXlfZGVidWdf bm90X3N1cHBvcnRlZCwgKCh2b2lkICopMCkgfSwKICB7ICIuZGVidWdfd2Vha25hbWVzIiwgZGlz cGxheV9kZWJ1Z19ub3Rfc3VwcG9ydGVkLCAoKHZvaWQgKikwKSB9Cn07CgpzdGF0aWMgaW50CmRp c3BsYXlfZGVidWdfc2VjdGlvbiAoc2VjdGlvbiwgZmlsZSkKICAgICBFbGZfSW50ZXJuYWxfU2hk ciAqc2VjdGlvbjsKICAgICBGSUxFICpmaWxlOwp7CiAgY2hhciAqbmFtZSA9ICgoc2VjdGlvbikg PT0gKCh2b2lkICopMCkgPyAiPG5vbmU+IiA6ICgoc2VjdGlvbiktPnNoX25hbWUgPj0gc3RyaW5n X3RhYmxlX2xlbmd0aCA/ICI8Y29ycnVwdD4iIDogc3RyaW5nX3RhYmxlICsgKHNlY3Rpb24pLT5z aF9uYW1lKSk7CiAgYmZkX3NpemVfdHlwZSBsZW5ndGg7CiAgdW5zaWduZWQgY2hhciAqc3RhcnQ7 CiAgaW50IGk7CgogIGxlbmd0aCA9IHNlY3Rpb24tPnNoX3NpemU7CiAgaWYgKGxlbmd0aCA9PSAw KQogICAgewogICAgICBwcmludGYgKCgiXG5TZWN0aW9uICclcycgaGFzIG5vIGRlYnVnZ2luZyBk YXRhLlxuIiksIG5hbWUpOwogICAgICByZXR1cm4gMDsKICAgIH0KCiAgc3RhcnQgPSAodW5zaWdu ZWQgY2hhciAqKSBnZXRfZGF0YSAoKCh2b2lkICopMCksIGZpbGUsIHNlY3Rpb24tPnNoX29mZnNl dCwgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZGVidWcg c2VjdGlvbiBkYXRhIikpOwogIGlmICghc3RhcnQpCiAgICByZXR1cm4gMDsKCgogIGlmICgoX19l eHRlbnNpb25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKDE3KSAmJiAoKF9fYnVpbHRpbl9jb25z dGFudF9wIChuYW1lKSAmJiBzdHJsZW4gKG5hbWUpIDwgKChzaXplX3QpICgxNykpKSB8fCAoX19i dWlsdGluX2NvbnN0YW50X3AgKCIuZ251LmxpbmtvbmNlLndpLiIpICYmIHN0cmxlbiAoIi5nbnUu bGlua29uY2Uud2kuIikgPCAoKHNpemVfdCkgKDE3KSkpKSA/IF9fZXh0ZW5zaW9uX18gKHsgc2l6 ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9jb25zdGFudF9wIChuYW1lKSAmJiBf X2J1aWx0aW5fY29uc3RhbnRfcCAoIi5nbnUubGlua29uY2Uud2kuIikgJiYgKF9fczFfbGVuID0g c3RybGVuIChuYW1lKSwgX19zMl9sZW4gPSBzdHJsZW4gKCIuZ251LmxpbmtvbmNlLndpLiIpLCAo ISgoc2l6ZV90KShjb25zdCB2b2lkICopKChuYW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9p ZCAqKShuYW1lKSA9PSAxKSB8fCBfX3MxX2xlbiA+PSA0KSAmJiAoISgoc2l6ZV90KShjb25zdCB2 b2lkICopKCgiLmdudS5saW5rb25jZS53aS4iKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAq KSgiLmdudS5saW5rb25jZS53aS4iKSA9PSAxKSB8fCBfX3MyX2xlbiA+PSA0KSkgPyBtZW1jbXAg KChfX2NvbnN0IGNoYXIgKikgKG5hbWUpLCAoX19jb25zdCBjaGFyICopICgiLmdudS5saW5rb25j ZS53aS4iKSwgKF9fczFfbGVuIDwgX19zMl9sZW4gPyBfX3MxX2xlbiA6IF9fczJfbGVuKSArIDEp IDogKF9fYnVpbHRpbl9jb25zdGFudF9wIChuYW1lKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAq KSgobmFtZSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikobmFtZSkgPT0gMSkgJiYgKF9f czFfbGVuID0gc3RybGVuIChuYW1lKSwgX19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3Rh bnRfcCAoIi5nbnUubGlua29uY2Uud2kuIikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCIu Z251LmxpbmtvbmNlLndpLiIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCIuZ251Lmxp bmtvbmNlLndpLiIpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgaW50IF9fcmVz dWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUp KVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoIi5nbnUu bGlua29uY2Uud2kuIikpWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7 IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KG5hbWUpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KCIuZ251LmxpbmtvbmNlLndpLiIpKVsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19yZXN1bHQg PT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopIChuYW1lKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopICgiLmdudS5saW5rb25jZS53aS4iKSlbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9f cmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKG5hbWUpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKCIuZ251LmxpbmtvbmNlLndpLiIpKVszXSk7IH0gfSBfX3Jlc3VsdDsgfSkp IDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MyID0gKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLmdudS5saW5rb25jZS53aS4i KTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKG5hbWUpKVswXSAtIF9fczJbMF0pOyBpZiAoX19zMV9sZW4gPiAwICYm IF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikg KF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+IDEg JiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMl0gLSBfX3MyWzJdKTsgaWYgKF9fczFfbGVuID4g MiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbM10gLSBfX3MyWzNdKTsgfSB9IF9fcmVzdWx0OyB9 KSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wICgiLmdudS5saW5rb25jZS53aS4iKSAmJiAoKHNp emVfdCkoY29uc3Qgdm9pZCAqKSgoIi5nbnUubGlua29uY2Uud2kuIikgKyAxKSAtIChzaXplX3Qp KGNvbnN0IHZvaWQgKikoIi5nbnUubGlua29uY2Uud2kuIikgPT0gMSkgJiYgKF9fczJfbGVuID0g c3RybGVuICgiLmdudS5saW5rb25jZS53aS4iKSwgX19zMl9sZW4gPCA0KSA/IChfX2J1aWx0aW5f Y29uc3RhbnRfcCAobmFtZSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKG5hbWUpICsgMSkg LSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5hbWUpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsg cmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikgKG5hbWUpKVswXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2Nv bnN0IGNoYXIgKikoIi5nbnUubGlua29uY2Uud2kuIikpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAm JiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVsxXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKCIuZ251LmxpbmtvbmNlLndpLiIpKVsxXSk7IGlmIChfX3MyX2xl biA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLmdudS5saW5rb25jZS53aS4iKSlbMl0pOyBpZiAo X19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKG5hbWUpKVszXSAtICgoX19jb25zdCB1bnNp Z25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZ251LmxpbmtvbmNlLndpLiIpKVszXSk7 IH0gfSBfX3Jlc3VsdDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBj aGFyICpfX3MxID0gKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChu YW1lKTsgcmVnaXN0ZXIgaW50IF9fcmVzdWx0ID0gX19zMVswXSAtICgoX19jb25zdCB1bnNpZ25l ZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCIuZ251LmxpbmtvbmNlLndpLiIpKVswXTsgaWYg KF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMV0gLSAo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiLmdudS5saW5rb25j ZS53aS4iKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1 bHQgPSAoX19zMVsyXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKCIuZ251LmxpbmtvbmNlLndpLiIpKVsyXSk7IGlmIChfX3MyX2xlbiA+IDIgJiYgX19yZXN1 bHQgPT0gMCkgX19yZXN1bHQgPSAoX19zMVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICop IChfX2NvbnN0IGNoYXIgKikgKCIuZ251LmxpbmtvbmNlLndpLiIpKVszXSk7IH0gfSBfX3Jlc3Vs dDsgfSkpKSA6IHN0cmNtcCAobmFtZSwgIi5nbnUubGlua29uY2Uud2kuIikpKSk7IH0pIDogc3Ry bmNtcCAobmFtZSwgIi5nbnUubGlua29uY2Uud2kuIiwgMTcpKSkgPT0gMCkKICAgIG5hbWUgPSAi LmRlYnVnX2luZm8iOwoKICBmb3IgKGkgPSAoc2l6ZW9mIChkZWJ1Z19kaXNwbGF5cykgLyBzaXpl b2YgKChkZWJ1Z19kaXNwbGF5cylbMF0pKTsgaS0tOykKICAgIGlmIChfX2V4dGVuc2lvbl9fICh7 IHNpemVfdCBfX3MxX2xlbiwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoZGVidWdf ZGlzcGxheXNbaV0ubmFtZSkgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKG5hbWUpICYmIChfX3Mx X2xlbiA9IHN0cmxlbiAoZGVidWdfZGlzcGxheXNbaV0ubmFtZSksIF9fczJfbGVuID0gc3RybGVu IChuYW1lKSwgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgoZGVidWdfZGlzcGxheXNbaV0ubmFt ZSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikoZGVidWdfZGlzcGxheXNbaV0ubmFtZSkg PT0gMSkgfHwgX19zMV9sZW4gPj0gNCkgJiYgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmFt ZSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikobmFtZSkgPT0gMSkgfHwgX19zMl9sZW4g Pj0gNCkpID8gbWVtY21wICgoX19jb25zdCBjaGFyICopIChkZWJ1Z19kaXNwbGF5c1tpXS5uYW1l KSwgKF9fY29uc3QgY2hhciAqKSAobmFtZSksIChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9s ZW4gOiBfX3MyX2xlbikgKyAxKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoZGVidWdfZGlzcGxh eXNbaV0ubmFtZSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGRlYnVnX2Rpc3BsYXlzW2ld Lm5hbWUpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKGRlYnVnX2Rpc3BsYXlzW2ldLm5h bWUpID09IDEpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAoZGVidWdfZGlzcGxheXNbaV0ubmFtZSks IF9fczFfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKG5hbWUpICYmICgoc2l6ZV90 KShjb25zdCB2b2lkICopKChuYW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShuYW1l KSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkZWJ1Z19kaXNwbGF5c1tp XS5uYW1lKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop KG5hbWUpKVswXSk7IGlmIChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3Vs dCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkZWJ1Z19k aXNwbGF5c1tpXS5uYW1lKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChuYW1lKSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDAp IHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoZGVidWdfZGlzcGxheXNbaV0ubmFtZSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jl c3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopIChkZWJ1Z19kaXNwbGF5c1tpXS5uYW1lKSlbM10gLSAoKF9fY29uc3QgdW5zaWdu ZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0p KSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMiA9IChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSk7IHJlZ2lzdGVyIGlu dCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop IChkZWJ1Z19kaXNwbGF5c1tpXS5uYW1lKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4g MCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFy ICopIChfX2NvbnN0IGNoYXIgKikgKGRlYnVnX2Rpc3BsYXlzW2ldLm5hbWUpKVsxXSAtIF9fczJb MV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGVidWdfZGlzcGxheXNb aV0ubmFtZSkpWzJdIC0gX19zMlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0g MCkgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoZGVidWdfZGlzcGxheXNbaV0ubmFtZSkpWzNdIC0gX19zMlszXSk7IH0gfSBfX3Jlc3VsdDsg fSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAobmFtZSkgJiYgKChzaXplX3QpKGNvbnN0IHZv aWQgKikoKG5hbWUpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5hbWUpID09IDEpICYm IChfX3MyX2xlbiA9IHN0cmxlbiAobmFtZSksIF9fczJfbGVuIDwgNCkgPyAoX19idWlsdGluX2Nv bnN0YW50X3AgKGRlYnVnX2Rpc3BsYXlzW2ldLm5hbWUpICYmICgoc2l6ZV90KShjb25zdCB2b2lk ICopKChkZWJ1Z19kaXNwbGF5c1tpXS5uYW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAq KShkZWJ1Z19kaXNwbGF5c1tpXS5uYW1lKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lz dGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBj aGFyICopIChkZWJ1Z19kaXNwbGF5c1tpXS5uYW1lKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopKG5hbWUpKVswXSk7IGlmIChfX3MyX2xlbiA+IDAgJiYg X19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAo X19jb25zdCBjaGFyICopIChkZWJ1Z19kaXNwbGF5c1tpXS5uYW1lKSlbMV0gLSAoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMV0pOyBpZiAoX19zMl9s ZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGVidWdfZGlzcGxheXNbaV0ubmFtZSkpWzJdIC0g KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJdKTsg aWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkZWJ1Z19kaXNwbGF5c1tpXS5uYW1l KSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1l KSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5z aWduZWQgY2hhciAqX19zMSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAoZGVidWdfZGlzcGxheXNbaV0ubmFtZSk7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9IF9f czFbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1l KSlbMF07IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChf X3MxWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFt ZSkpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0g KF9fczFbMl0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChu YW1lKSlbMl0pOyBpZiAoX19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0g KF9fczFbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChu YW1lKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKGRlYnVnX2Rpc3BsYXlzW2ld Lm5hbWUsIG5hbWUpKSkpOyB9KSA9PSAwKQogICAgICB7CiAgICAgICAgZGVidWdfZGlzcGxheXNb aV0uZGlzcGxheSAoc2VjdGlvbiwgc3RhcnQsIGZpbGUpOwogICAgICAgIGJyZWFrOwogICAgICB9 CgogIGlmIChpID09IC0xKQogICAgcHJpbnRmICgoIlVucmVjb2duaXplZCBkZWJ1ZyBzZWN0aW9u OiAlc1xuIiksIG5hbWUpOwoKICBmcmVlIChzdGFydCk7CgoKCiAgZnJlZV9hYmJyZXZzICgpOwoK ICByZXR1cm4gMTsKfQoKc3RhdGljIGludApwcm9jZXNzX3NlY3Rpb25fY29udGVudHMgKGZpbGUp CiAgICAgRklMRSAqZmlsZTsKewogIEVsZl9JbnRlcm5hbF9TaGRyICpzZWN0aW9uOwogIHVuc2ln bmVkIGludCBpOwoKICBpZiAoISBkb19kdW1wKQogICAgcmV0dXJuIDE7CgoKCgogIGZvciAoaSA9 IDAsIHNlY3Rpb24gPSBzZWN0aW9uX2hlYWRlcnM7CiAgICAgICBpIDwgZWxmX2hlYWRlci5lX3No bnVtICYmIGkgPCBudW1fZHVtcF9zZWN0czsKICAgICAgIGkrKywgc2VjdGlvbisrKQogICAgewog ICAgICBjaGFyICpuYW1lID0gKChzZWN0aW9uKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4iIDog KChzZWN0aW9uKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0PiIg OiBzdHJpbmdfdGFibGUgKyAoc2VjdGlvbiktPnNoX25hbWUpKTsKICAgICAgaW50IGo7CgogICAg ICBpZiAoc2VjdGlvbi0+c2hfc2l6ZSA9PSAwKQogICAgICAgIGNvbnRpbnVlOwoKCiAgICAgIGZv ciAoaiA9IChzaXplb2YgKGRlYnVnX2Rpc3BsYXlzKSAvIHNpemVvZiAoKGRlYnVnX2Rpc3BsYXlz KVswXSkpOyBqLS07KQogICAgICAgIGlmIChfX2V4dGVuc2lvbl9fICh7IHNpemVfdCBfX3MxX2xl biwgX19zMl9sZW47IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoZGVidWdfZGlzcGxheXNbal0ubmFt ZSkgJiYgX19idWlsdGluX2NvbnN0YW50X3AgKG5hbWUpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAo ZGVidWdfZGlzcGxheXNbal0ubmFtZSksIF9fczJfbGVuID0gc3RybGVuIChuYW1lKSwgKCEoKHNp emVfdCkoY29uc3Qgdm9pZCAqKSgoZGVidWdfZGlzcGxheXNbal0ubmFtZSkgKyAxKSAtIChzaXpl X3QpKGNvbnN0IHZvaWQgKikoZGVidWdfZGlzcGxheXNbal0ubmFtZSkgPT0gMSkgfHwgX19zMV9s ZW4gPj0gNCkgJiYgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgobmFtZSkgKyAxKSAtIChzaXpl X3QpKGNvbnN0IHZvaWQgKikobmFtZSkgPT0gMSkgfHwgX19zMl9sZW4gPj0gNCkpID8gbWVtY21w ICgoX19jb25zdCBjaGFyICopIChkZWJ1Z19kaXNwbGF5c1tqXS5uYW1lKSwgKF9fY29uc3QgY2hh ciAqKSAobmFtZSksIChfX3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikg KyAxKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoZGVidWdfZGlzcGxheXNbal0ubmFtZSkgJiYg KChzaXplX3QpKGNvbnN0IHZvaWQgKikoKGRlYnVnX2Rpc3BsYXlzW2pdLm5hbWUpICsgMSkgLSAo c2l6ZV90KShjb25zdCB2b2lkICopKGRlYnVnX2Rpc3BsYXlzW2pdLm5hbWUpID09IDEpICYmIChf X3MxX2xlbiA9IHN0cmxlbiAoZGVidWdfZGlzcGxheXNbal0ubmFtZSksIF9fczFfbGVuIDwgNCkg PyAoX19idWlsdGluX2NvbnN0YW50X3AgKG5hbWUpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICop KChuYW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShuYW1lKSA9PSAxKSA/IChfX2V4 dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQg Y2hhciAqKSAoX19jb25zdCBjaGFyICopIChkZWJ1Z19kaXNwbGF5c1tqXS5uYW1lKSlbMF0gLSAo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopKG5hbWUpKVswXSk7IGlm IChfX3MxX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3Qg dW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkZWJ1Z19kaXNwbGF5c1tqXS5uYW1l KSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1l KSlbMV0pOyBpZiAoX19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGVidWdfZGlzcGxh eXNbal0ubmFtZSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hh ciAqKSAobmFtZSkpWzJdKTsgaWYgKF9fczFfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jl c3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkZWJ1 Z19kaXNwbGF5c1tqXS5uYW1lKSlbM10gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChuYW1lKSlbM10pOyB9IH0gX19yZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lv bl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19zMiA9IChfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSk7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkZWJ1Z19kaXNwbGF5 c1tqXS5uYW1lKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9 PSAwKSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNo YXIgKikgKGRlYnVnX2Rpc3BsYXlzW2pdLm5hbWUpKVsxXSAtIF9fczJbMV0pOyBpZiAoX19zMV9s ZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGVidWdfZGlzcGxheXNbal0ubmFtZSkpWzJdIC0g X19zMlsyXSk7IGlmIChfX3MxX2xlbiA+IDIgJiYgX19yZXN1bHQgPT0gMCkgX19yZXN1bHQgPSAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGVidWdfZGlzcGxh eXNbal0ubmFtZSkpWzNdIC0gX19zMlszXSk7IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0 aW5fY29uc3RhbnRfcCAobmFtZSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKG5hbWUpICsg MSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKG5hbWUpID09IDEpICYmIChfX3MyX2xlbiA9IHN0 cmxlbiAobmFtZSksIF9fczJfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AgKGRlYnVn X2Rpc3BsYXlzW2pdLm5hbWUpICYmICgoc2l6ZV90KShjb25zdCB2b2lkICopKChkZWJ1Z19kaXNw bGF5c1tqXS5uYW1lKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShkZWJ1Z19kaXNwbGF5 c1tqXS5uYW1lKSA9PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3Vs dCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChkZWJ1Z19k aXNwbGF5c1tqXS5uYW1lKSlbMF0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25z dCBjaGFyICopKG5hbWUpKVswXSk7IGlmIChfX3MyX2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkg eyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICop IChkZWJ1Z19kaXNwbGF5c1tqXS5uYW1lKSlbMV0gLSAoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMV0pOyBpZiAoX19zMl9sZW4gPiAxICYmIF9fcmVz dWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29u c3QgY2hhciAqKSAoZGVidWdfZGlzcGxheXNbal0ubmFtZSkpWzJdIC0gKChfX2NvbnN0IHVuc2ln bmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzJdKTsgaWYgKF9fczJfbGVuID4g MiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAq KSAoX19jb25zdCBjaGFyICopIChkZWJ1Z19kaXNwbGF5c1tqXS5uYW1lKSlbM10gLSAoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbM10pOyB9IH0gX19y ZXN1bHQ7IH0pKSA6IChfX2V4dGVuc2lvbl9fICh7IF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19z MSA9IChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoZGVidWdfZGlz cGxheXNbal0ubmFtZSk7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9IF9fczFbMF0gLSAoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMF07IGlmIChfX3My X2xlbiA+IDAgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzFdIC0gKChfX2Nv bnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAobmFtZSkpWzFdKTsgaWYgKF9f czJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0ID0gKF9fczFbMl0gLSAoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbMl0pOyBpZiAo X19zMl9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKF9fczFbM10gLSAoKF9f Y29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChuYW1lKSlbM10pOyB9IH0g X19yZXN1bHQ7IH0pKSkgOiBzdHJjbXAgKGRlYnVnX2Rpc3BsYXlzW2pdLm5hbWUsIG5hbWUpKSkp OyB9KSA9PSAwKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoZGVidWdfZGlzcGxheXNbal0u cHJlc2NhbiAhPSAoKHZvaWQgKikwKSkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBi ZmRfc2l6ZV90eXBlIGxlbmd0aDsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnN0YXJ0 OwoKICAgICAgICAgICAgICAgIGxlbmd0aCA9IHNlY3Rpb24tPnNoX3NpemU7CiAgICAgICAgICAg ICAgICBzdGFydCA9ICgodW5zaWduZWQgY2hhciAqKQogICAgICAgICAgICAgICAgICAgICAgICAg Z2V0X2RhdGEgKCgodm9pZCAqKTApLCBmaWxlLCBzZWN0aW9uLT5zaF9vZmZzZXQsIGxlbmd0aCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImRlYnVnIHNlY3Rpb24gZGF0YSIp KSk7CiAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0KQogICAgICAgICAgICAgICAgICByZXR1cm4g MDsKCiAgICAgICAgICAgICAgICBkZWJ1Z19kaXNwbGF5c1tqXS5wcmVzY2FuIChzZWN0aW9uLCBz dGFydCwgZmlsZSk7CiAgICAgICAgICAgICAgICBmcmVlIChzdGFydCk7CiAgICAgICAgICAgICAg fQoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICB9CgogIGZvciAoaSA9IDAsIHNl Y3Rpb24gPSBzZWN0aW9uX2hlYWRlcnM7CiAgICAgICBpIDwgZWxmX2hlYWRlci5lX3NobnVtICYm IGkgPCBudW1fZHVtcF9zZWN0czsKICAgICAgIGkrKywgc2VjdGlvbisrKQogICAgewoKCgoKICAg ICAgaWYgKGR1bXBfc2VjdHNbaV0gJiAoMSA8PCAwKSkKICAgICAgICBkdW1wX3NlY3Rpb24gKHNl Y3Rpb24sIGZpbGUpOwoKICAgICAgaWYgKGR1bXBfc2VjdHNbaV0gJiAoMSA8PCAyKSkKICAgICAg ICBkaXNwbGF5X2RlYnVnX3NlY3Rpb24gKHNlY3Rpb24sIGZpbGUpOwogICAgfQoKICBpZiAoaSA8 IG51bV9kdW1wX3NlY3RzKQogICAgd2FybiAoKCJTb21lIHNlY3Rpb25zIHdlcmUgbm90IGR1bXBl ZCBiZWNhdXNlIHRoZXkgZG8gbm90IGV4aXN0IVxuIikpOwoKICByZXR1cm4gMTsKfQoKc3RhdGlj IHZvaWQKcHJvY2Vzc19taXBzX2ZwZV9leGNlcHRpb24gKG1hc2spCiAgICAgaW50IG1hc2s7CnsK ICBpZiAobWFzaykKICAgIHsKICAgICAgaW50IGZpcnN0ID0gMTsKICAgICAgaWYgKG1hc2sgJiAw eDAxKQogICAgICAgIGZwdXRzICgiSU5FWCIsIHN0ZG91dCksIGZpcnN0ID0gMDsKICAgICAgaWYg KG1hc2sgJiAweDAyKQogICAgICAgIHByaW50ZiAoIiVzVUZMTyIsIGZpcnN0ID8gIiIgOiAifCIp LCBmaXJzdCA9IDA7CiAgICAgIGlmIChtYXNrICYgMHgwNCkKICAgICAgICBwcmludGYgKCIlc09G TE8iLCBmaXJzdCA/ICIiIDogInwiKSwgZmlyc3QgPSAwOwogICAgICBpZiAobWFzayAmIDB4MDgp CiAgICAgICAgcHJpbnRmICgiJXNESVYwIiwgZmlyc3QgPyAiIiA6ICJ8IiksIGZpcnN0ID0gMDsK ICAgICAgaWYgKG1hc2sgJiAweDEwKQogICAgICAgIHByaW50ZiAoIiVzSU5WQUwiLCBmaXJzdCA/ ICIiIDogInwiKTsKICAgIH0KICBlbHNlCiAgICBmcHV0cyAoIjAiLCBzdGRvdXQpOwp9CgpzdGF0 aWMgaW50CnByb2Nlc3NfbWlwc19zcGVjaWZpYyAoZmlsZSkKICAgICBGSUxFICpmaWxlOwp7CiAg RWxmX0ludGVybmFsX0R5biAqZW50cnk7CiAgc2l6ZV90IGxpYmxpc3Rfb2Zmc2V0ID0gMDsKICBz aXplX3QgbGlibGlzdG5vID0gMDsKICBzaXplX3QgY29uZmxpY3Rzbm8gPSAwOwogIHNpemVfdCBv cHRpb25zX29mZnNldCA9IDA7CiAgc2l6ZV90IGNvbmZsaWN0c19vZmZzZXQgPSAwOwoKCiAgaWYg KGR5bmFtaWNfc2VnbWVudCA9PSAoKHZvaWQgKikwKSkKCiAgICByZXR1cm4gMDsKCiAgZm9yIChl bnRyeSA9IGR5bmFtaWNfc2VnbWVudDsgZW50cnktPmRfdGFnICE9IDA7ICsrZW50cnkpCiAgICBz d2l0Y2ggKGVudHJ5LT5kX3RhZykKICAgICAgewogICAgICBjYXNlIDB4NzAwMDAwMDk6CiAgICAg ICAgbGlibGlzdF9vZmZzZXQgPSBlbnRyeS0+ZF91bi5kX3ZhbCAtIGxvYWRhZGRyOwogICAgICAg IGJyZWFrOwogICAgICBjYXNlIDB4NzAwMDAwMTA6CiAgICAgICAgbGlibGlzdG5vID0gZW50cnkt PmRfdW4uZF92YWw7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMHg3MDAwMDAyOToKICAgICAg ICBvcHRpb25zX29mZnNldCA9IGVudHJ5LT5kX3VuLmRfdmFsIC0gbG9hZGFkZHI7CiAgICAgICAg YnJlYWs7CiAgICAgIGNhc2UgMHg3MDAwMDAwODoKICAgICAgICBjb25mbGljdHNfb2Zmc2V0ID0g ZW50cnktPmRfdW4uZF92YWwgLSBsb2FkYWRkcjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAw eDcwMDAwMDBiOgogICAgICAgIGNvbmZsaWN0c25vID0gZW50cnktPmRfdW4uZF92YWw7CiAgICAg ICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgaWYgKGxp Ymxpc3Rfb2Zmc2V0ICE9IDAgJiYgbGlibGlzdG5vICE9IDAgJiYgZG9fZHluYW1pYykKICAgIHsK ICAgICAgRWxmMzJfRXh0ZXJuYWxfTGliICplbGliOwogICAgICBzaXplX3QgY250OwoKICAgICAg ZWxpYiA9ICgoRWxmMzJfRXh0ZXJuYWxfTGliICopCiAgICAgICAgICAgICAgZ2V0X2RhdGEgKCgo dm9pZCAqKTApLCBmaWxlLCBsaWJsaXN0X29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAg bGlibGlzdG5vICogc2l6ZW9mIChFbGYzMl9FeHRlcm5hbF9MaWIpLAogICAgICAgICAgICAgICAg ICAgICAgICAoImxpYmxpc3QiKSkpOwogICAgICBpZiAoZWxpYikKICAgICAgICB7CiAgICAgICAg ICBwcmludGYgKCJcblNlY3Rpb24gJy5saWJsaXN0JyBjb250YWlucyAlbHUgZW50cmllczpcbiIs CiAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBsaWJsaXN0bm8pOwogICAgICAgICAg ZnB1dHMgKCIgICAgIExpYnJhcnkgICAgICAgICAgICAgIFRpbWUgU3RhbXAgICAgICAgICAgQ2hl Y2tzdW0gICBWZXJzaW9uIEZsYWdzXG4iLAogICAgICAgICAgICAgICAgIHN0ZG91dCk7CgogICAg ICAgICAgZm9yIChjbnQgPSAwOyBjbnQgPCBsaWJsaXN0bm87ICsrY250KQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgRWxmMzJfTGliIGxpYmxpc3Q7CiAgICAgICAgICAgICAgdGltZV90IHRp bWU7CiAgICAgICAgICAgICAgY2hhciB0aW1lYnVmWzIwXTsKICAgICAgICAgICAgICBzdHJ1Y3Qg dG0gKnRtcDsKCiAgICAgICAgICAgICAgbGlibGlzdC5sX25hbWUgPSBieXRlX2dldCAoZWxpYltj bnRdLmxfbmFtZSwgc2l6ZW9mIChlbGliW2NudF0ubF9uYW1lKSk7CiAgICAgICAgICAgICAgdGlt ZSA9IGJ5dGVfZ2V0IChlbGliW2NudF0ubF90aW1lX3N0YW1wLCBzaXplb2YgKGVsaWJbY250XS5s X3RpbWVfc3RhbXApKTsKICAgICAgICAgICAgICBsaWJsaXN0LmxfY2hlY2tzdW0gPSBieXRlX2dl dCAoZWxpYltjbnRdLmxfY2hlY2tzdW0sIHNpemVvZiAoZWxpYltjbnRdLmxfY2hlY2tzdW0pKTsK ICAgICAgICAgICAgICBsaWJsaXN0LmxfdmVyc2lvbiA9IGJ5dGVfZ2V0IChlbGliW2NudF0ubF92 ZXJzaW9uLCBzaXplb2YgKGVsaWJbY250XS5sX3ZlcnNpb24pKTsKICAgICAgICAgICAgICBsaWJs aXN0LmxfZmxhZ3MgPSBieXRlX2dldCAoZWxpYltjbnRdLmxfZmxhZ3MsIHNpemVvZiAoZWxpYltj bnRdLmxfZmxhZ3MpKTsKCiAgICAgICAgICAgICAgdG1wID0gZ210aW1lICgmdGltZSk7CiAgICAg ICAgICAgICAgc3ByaW50ZiAodGltZWJ1ZiwgIiUwNHUtJTAydS0lMDJ1VCUwMnU6JTAydTolMDJ1 IiwKICAgICAgICAgICAgICAgICAgICAgICB0bXAtPnRtX3llYXIgKyAxOTAwLCB0bXAtPnRtX21v biArIDEsIHRtcC0+dG1fbWRheSwKICAgICAgICAgICAgICAgICAgICAgICB0bXAtPnRtX2hvdXIs IHRtcC0+dG1fbWluLCB0bXAtPnRtX3NlYyk7CgogICAgICAgICAgICAgIHByaW50ZiAoIiUzbHU6 ICIsICh1bnNpZ25lZCBsb25nKSBjbnQpOwogICAgICAgICAgICAgIHByaW50X3N5bWJvbCAoMjAs IGR5bmFtaWNfc3RyaW5ncyArIGxpYmxpc3QubF9uYW1lKTsKICAgICAgICAgICAgICBwcmludGYg KCIgJXMgJSMxMGx4ICUtN2xkIiwgdGltZWJ1ZiwgbGlibGlzdC5sX2NoZWNrc3VtLAogICAgICAg ICAgICAgICAgICAgICAgbGlibGlzdC5sX3ZlcnNpb24pOwoKICAgICAgICAgICAgICBpZiAobGli bGlzdC5sX2ZsYWdzID09IDApCiAgICAgICAgICAgICAgICBwdXRzICgiIE5PTkUiKTsKICAgICAg ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN0YXRpYyBj b25zdCBzdHJ1Y3QKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKm5hbWU7CiAgICAgICAgICAgICAgICAgICAgaW50IGJpdDsKICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICBsX2ZsYWdzX3ZhbHNbXSA9CiAgICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgICB7ICIgRVhBQ1RfTUFUQ0giLCAweDAwMDAwMDAxIH0sCiAg ICAgICAgICAgICAgICAgICAgeyAiIElHTk9SRV9JTlRfVkVSIiwgMHgwMDAwMDAwMiB9LAogICAg ICAgICAgICAgICAgICAgIHsgIiBSRVFVSVJFX01JTk9SIiwgMHgwMDAwMDAwNCB9LAogICAgICAg ICAgICAgICAgICAgIHsgIiBFWFBPUlRTIiwgMHgwMDAwMDAwOCB9LAogICAgICAgICAgICAgICAg ICAgIHsgIiBERUxBWV9MT0FEIiwgMHgwMDAwMDAxMCB9LAogICAgICAgICAgICAgICAgICAgIHsg IiBERUxUQSIsIDB4MDAwMDAwMjAgfQogICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAg ICAgICBpbnQgZmxhZ3MgPSBsaWJsaXN0LmxfZmxhZ3M7CiAgICAgICAgICAgICAgICAgIHNpemVf dCBmY250OwoKICAgICAgICAgICAgICAgICAgZm9yIChmY250ID0gMDsKICAgICAgICAgICAgICAg ICAgICAgICBmY250IDwgc2l6ZW9mIChsX2ZsYWdzX3ZhbHMpIC8gc2l6ZW9mIChsX2ZsYWdzX3Zh bHNbMF0pOwogICAgICAgICAgICAgICAgICAgICAgICsrZmNudCkKICAgICAgICAgICAgICAgICAg ICBpZiAoKGZsYWdzICYgbF9mbGFnc192YWxzW2ZjbnRdLmJpdCkgIT0gMCkKICAgICAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZnB1dHMgKGxfZmxhZ3NfdmFsc1tm Y250XS5uYW1lLCBzdGRvdXQpOwogICAgICAgICAgICAgICAgICAgICAgICBmbGFncyBePSBsX2Zs YWdzX3ZhbHNbZmNudF0uYml0OwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICBpZiAoZmxhZ3MgIT0gMCkKICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgJSN4Iiwg KHVuc2lnbmVkIGludCkgZmxhZ3MpOwoKICAgICAgICAgICAgICAgICAgcHV0cyAoIiIpOwogICAg ICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgZnJlZSAoZWxpYik7CiAgICAg ICAgfQogICAgfQoKICBpZiAob3B0aW9uc19vZmZzZXQgIT0gMCkKICAgIHsKICAgICAgRWxmX0V4 dGVybmFsX09wdGlvbnMgKmVvcHQ7CiAgICAgIEVsZl9JbnRlcm5hbF9TaGRyICpzZWN0ID0gc2Vj dGlvbl9oZWFkZXJzOwogICAgICBFbGZfSW50ZXJuYWxfT3B0aW9ucyAqaW9wdDsKICAgICAgRWxm X0ludGVybmFsX09wdGlvbnMgKm9wdGlvbjsKICAgICAgc2l6ZV90IG9mZnNldDsKICAgICAgaW50 IGNudDsKCgogICAgICB3aGlsZSAoc2VjdC0+c2hfdHlwZSAhPSAweDcwMDAwMDBkKQogICAgICAg ICsrc2VjdDsKCiAgICAgIGVvcHQgPSAoRWxmX0V4dGVybmFsX09wdGlvbnMgKikgZ2V0X2RhdGEg KCgodm9pZCAqKTApLCBmaWxlLCBvcHRpb25zX29mZnNldCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdC0+c2hfc2l6ZSwgKCJvcHRpb25zIikpOwog ICAgICBpZiAoZW9wdCkKICAgICAgICB7CiAgICAgICAgICBpb3B0ID0gKChFbGZfSW50ZXJuYWxf T3B0aW9ucyAqKQogICAgICAgICAgICAgICAgICBtYWxsb2MgKChzZWN0LT5zaF9zaXplIC8gc2l6 ZW9mIChlb3B0KSkgKiBzaXplb2YgKCppb3B0KSkpOwogICAgICAgICAgaWYgKGlvcHQgPT0gKCh2 b2lkICopMCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBlcnJvciAoKCJPdXQgb2YgbWVt b3J5IikpOwogICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICB9CgogICAgICAgICAg b2Zmc2V0ID0gY250ID0gMDsKICAgICAgICAgIG9wdGlvbiA9IGlvcHQ7CgogICAgICAgICAgd2hp bGUgKG9mZnNldCA8IHNlY3QtPnNoX3NpemUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBF bGZfRXh0ZXJuYWxfT3B0aW9ucyAqZW9wdGlvbjsKCiAgICAgICAgICAgICAgZW9wdGlvbiA9IChF bGZfRXh0ZXJuYWxfT3B0aW9ucyAqKSAoKGNoYXIgKikgZW9wdCArIG9mZnNldCk7CgogICAgICAg ICAgICAgIG9wdGlvbi0+a2luZCA9IGJ5dGVfZ2V0IChlb3B0aW9uLT5raW5kLCBzaXplb2YgKGVv cHRpb24tPmtpbmQpKTsKICAgICAgICAgICAgICBvcHRpb24tPnNpemUgPSBieXRlX2dldCAoZW9w dGlvbi0+c2l6ZSwgc2l6ZW9mIChlb3B0aW9uLT5zaXplKSk7CiAgICAgICAgICAgICAgb3B0aW9u LT5zZWN0aW9uID0gYnl0ZV9nZXQgKGVvcHRpb24tPnNlY3Rpb24sIHNpemVvZiAoZW9wdGlvbi0+ c2VjdGlvbikpOwogICAgICAgICAgICAgIG9wdGlvbi0+aW5mbyA9IGJ5dGVfZ2V0IChlb3B0aW9u LT5pbmZvLCBzaXplb2YgKGVvcHRpb24tPmluZm8pKTsKCiAgICAgICAgICAgICAgb2Zmc2V0ICs9 IG9wdGlvbi0+c2l6ZTsKCiAgICAgICAgICAgICAgKytvcHRpb247CiAgICAgICAgICAgICAgKytj bnQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBwcmludGYgKCgiXG5TZWN0aW9uICclcycgY29u dGFpbnMgJWQgZW50cmllczpcbiIpLAogICAgICAgICAgICAgICAgICAoKHNlY3QpID09ICgodm9p ZCAqKTApID8gIjxub25lPiIgOiAoKHNlY3QpLT5zaF9uYW1lID49IHN0cmluZ190YWJsZV9sZW5n dGggPyAiPGNvcnJ1cHQ+IiA6IHN0cmluZ190YWJsZSArIChzZWN0KS0+c2hfbmFtZSkpLCBjbnQp OwoKICAgICAgICAgIG9wdGlvbiA9IGlvcHQ7CgogICAgICAgICAgd2hpbGUgKGNudC0tID4gMCkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBsZW47CgogICAgICAgICAgICAgIHN3 aXRjaCAob3B0aW9uLT5raW5kKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2Fz ZSAwOgoKICAgICAgICAgICAgICAgICAgcHJpbnRmICgiIE5VTEwgICAgICAgJWQgJWx4Iiwgb3B0 aW9uLT5zZWN0aW9uLCBvcHRpb24tPmluZm8pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgcHJpbnRmICgiIFJFR0lORk8g ICAgIik7CiAgICAgICAgICAgICAgICAgIGlmIChlbGZfaGVhZGVyLmVfbWFjaGluZSA9PSA4KQog ICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICBFbGYzMl9FeHRlcm5h bF9SZWdJbmZvICplcmVnOwogICAgICAgICAgICAgICAgICAgICAgRWxmMzJfUmVnSW5mbyByZWdp bmZvOwoKICAgICAgICAgICAgICAgICAgICAgIGVyZWcgPSAoRWxmMzJfRXh0ZXJuYWxfUmVnSW5m byAqKSAob3B0aW9uICsgMSk7CiAgICAgICAgICAgICAgICAgICAgICByZWdpbmZvLnJpX2dwcm1h c2sgPSBieXRlX2dldCAoZXJlZy0+cmlfZ3BybWFzaywgc2l6ZW9mIChlcmVnLT5yaV9ncHJtYXNr KSk7CiAgICAgICAgICAgICAgICAgICAgICByZWdpbmZvLnJpX2Nwcm1hc2tbMF0gPSBieXRlX2dl dCAoZXJlZy0+cmlfY3BybWFza1swXSwgc2l6ZW9mIChlcmVnLT5yaV9jcHJtYXNrWzBdKSk7CiAg ICAgICAgICAgICAgICAgICAgICByZWdpbmZvLnJpX2Nwcm1hc2tbMV0gPSBieXRlX2dldCAoZXJl Zy0+cmlfY3BybWFza1sxXSwgc2l6ZW9mIChlcmVnLT5yaV9jcHJtYXNrWzFdKSk7CiAgICAgICAg ICAgICAgICAgICAgICByZWdpbmZvLnJpX2Nwcm1hc2tbMl0gPSBieXRlX2dldCAoZXJlZy0+cmlf Y3BybWFza1syXSwgc2l6ZW9mIChlcmVnLT5yaV9jcHJtYXNrWzJdKSk7CiAgICAgICAgICAgICAg ICAgICAgICByZWdpbmZvLnJpX2Nwcm1hc2tbM10gPSBieXRlX2dldCAoZXJlZy0+cmlfY3BybWFz a1szXSwgc2l6ZW9mIChlcmVnLT5yaV9jcHJtYXNrWzNdKSk7CiAgICAgICAgICAgICAgICAgICAg ICByZWdpbmZvLnJpX2dwX3ZhbHVlID0gYnl0ZV9nZXQgKGVyZWctPnJpX2dwX3ZhbHVlLCBzaXpl b2YgKGVyZWctPnJpX2dwX3ZhbHVlKSk7CgogICAgICAgICAgICAgICAgICAgICAgcHJpbnRmICgi R1BSICUwOGx4ICBHUCAweCVseFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVn aW5mby5yaV9ncHJtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQg bG9uZykgcmVnaW5mby5yaV9ncF92YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICBwcmludGYg KCIgICAgICAgICAgICBDUFIwICUwOGx4ICBDUFIxICUwOGx4ICBDUFIyICUwOGx4ICBDUFIzICUw OGx4XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpbmZvLnJpX2Nwcm1hc2tb MF0sIHJlZ2luZm8ucmlfY3BybWFza1sxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmVnaW5mby5yaV9jcHJtYXNrWzJdLCByZWdpbmZvLnJpX2Nwcm1hc2tbM10pOwogICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHsK CiAgICAgICAgICAgICAgICAgICAgICBFbGY2NF9FeHRlcm5hbF9SZWdJbmZvICplcmVnOwogICAg ICAgICAgICAgICAgICAgICAgRWxmNjRfSW50ZXJuYWxfUmVnSW5mbyByZWdpbmZvOwoKICAgICAg ICAgICAgICAgICAgICAgIGVyZWcgPSAoRWxmNjRfRXh0ZXJuYWxfUmVnSW5mbyAqKSAob3B0aW9u ICsgMSk7CiAgICAgICAgICAgICAgICAgICAgICByZWdpbmZvLnJpX2dwcm1hc2sgPSBieXRlX2dl dCAoZXJlZy0+cmlfZ3BybWFzaywgc2l6ZW9mIChlcmVnLT5yaV9ncHJtYXNrKSk7CiAgICAgICAg ICAgICAgICAgICAgICByZWdpbmZvLnJpX2Nwcm1hc2tbMF0gPSBieXRlX2dldCAoZXJlZy0+cmlf Y3BybWFza1swXSwgc2l6ZW9mIChlcmVnLT5yaV9jcHJtYXNrWzBdKSk7CiAgICAgICAgICAgICAg ICAgICAgICByZWdpbmZvLnJpX2Nwcm1hc2tbMV0gPSBieXRlX2dldCAoZXJlZy0+cmlfY3BybWFz a1sxXSwgc2l6ZW9mIChlcmVnLT5yaV9jcHJtYXNrWzFdKSk7CiAgICAgICAgICAgICAgICAgICAg ICByZWdpbmZvLnJpX2Nwcm1hc2tbMl0gPSBieXRlX2dldCAoZXJlZy0+cmlfY3BybWFza1syXSwg c2l6ZW9mIChlcmVnLT5yaV9jcHJtYXNrWzJdKSk7CiAgICAgICAgICAgICAgICAgICAgICByZWdp bmZvLnJpX2Nwcm1hc2tbM10gPSBieXRlX2dldCAoZXJlZy0+cmlfY3BybWFza1szXSwgc2l6ZW9m IChlcmVnLT5yaV9jcHJtYXNrWzNdKSk7CiAgICAgICAgICAgICAgICAgICAgICByZWdpbmZvLnJp X2dwX3ZhbHVlID0gYnl0ZV9nZXQgKGVyZWctPnJpX2dwX3ZhbHVlLCAtOCk7CgogICAgICAgICAg ICAgICAgICAgICAgcHJpbnRmICgiR1BSICUwOGx4ICBHUCAweCIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlZ2luZm8ucmlfZ3BybWFzayk7CiAgICAgICAgICAgICAgICAgICAgICBm cHJpbnRmICgoc3Rkb3V0KSwgIiUwOGx4JTA4bHgiLCAoKHVuc2lnbmVkIGxvbmcpICgoKHJlZ2lu Zm8ucmlfZ3BfdmFsdWUpID4+IDMyKSAmIDB4ZmZmZmZmZmYpKSwgKCh1bnNpZ25lZCBsb25nKSAo KChyZWdpbmZvLnJpX2dwX3ZhbHVlKSAmIDB4ZmZmZmZmZmYpKSkpOwogICAgICAgICAgICAgICAg ICAgICAgcHJpbnRmICgiXG4iKTsKCiAgICAgICAgICAgICAgICAgICAgICBwcmludGYgKCIgICAg ICAgICAgICBDUFIwICUwOGx4ICBDUFIxICUwOGx4ICBDUFIyICUwOGx4ICBDUFIzICUwOGx4XG4i LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpbmZvLnJpX2Nwcm1hc2tbMF0sIHJl Z2luZm8ucmlfY3BybWFza1sxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW5m by5yaV9jcHJtYXNrWzJdLCByZWdpbmZvLnJpX2Nwcm1hc2tbM10pOwogICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgKytvcHRpb247CiAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOwogICAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICBmcHV0cyAoIiBF WENFUFRJT05TIGZwZV9taW4oIiwgc3Rkb3V0KTsKICAgICAgICAgICAgICAgICAgcHJvY2Vzc19t aXBzX2ZwZV9leGNlcHRpb24gKG9wdGlvbi0+aW5mbyAmIDB4MWYpOwogICAgICAgICAgICAgICAg ICBmcHV0cyAoIikgZnBlX21heCgiLCBzdGRvdXQpOwogICAgICAgICAgICAgICAgICBwcm9jZXNz X21pcHNfZnBlX2V4Y2VwdGlvbiAoKG9wdGlvbi0+aW5mbyAmIDB4MWYwMCkgPj4gOCk7CiAgICAg ICAgICAgICAgICAgIGZwdXRzICgiKSIsIHN0ZG91dCk7CgogICAgICAgICAgICAgICAgICBpZiAo b3B0aW9uLT5pbmZvICYgMHgxMDAwMCkKICAgICAgICAgICAgICAgICAgICBmcHV0cyAoIiBQQUdF MCIsIHN0ZG91dCk7CiAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24tPmluZm8gJiAweDIwMDAw KQogICAgICAgICAgICAgICAgICAgIGZwdXRzICgiIFNNTSIsIHN0ZG91dCk7CiAgICAgICAgICAg ICAgICAgIGlmIChvcHRpb24tPmluZm8gJiAweDQwMDAwKQogICAgICAgICAgICAgICAgICAgIGZw dXRzICgiIEZQREJVRyIsIHN0ZG91dCk7CiAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24tPmlu Zm8gJiAweDgwMDAwKQogICAgICAgICAgICAgICAgICAgIGZwdXRzICgiIERJU01JU1MiLCBzdGRv dXQpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgMzoKICAg ICAgICAgICAgICAgICAgZnB1dHMgKCIgUEFEICAgICAgICIsIHN0ZG91dCk7CiAgICAgICAgICAg ICAgICAgIGlmIChvcHRpb24tPmluZm8gJiAweDAxKQogICAgICAgICAgICAgICAgICAgIGZwdXRz ICgiIFBSRUZJWCIsIHN0ZG91dCk7CiAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24tPmluZm8g JiAweDAyKQogICAgICAgICAgICAgICAgICAgIGZwdXRzICgiIFBPU1RGSVgiLCBzdGRvdXQpOwog ICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLT5pbmZvICYgMHgwNCkKICAgICAgICAgICAgICAg ICAgICBmcHV0cyAoIiBTWU1CT0wiLCBzdGRvdXQpOwogICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICAgICAgZnB1dHMgKCIgSFdQQVRD SCAgICIsIHN0ZG91dCk7CiAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24tPmluZm8gJiAweDAw MDAwMDAxKQogICAgICAgICAgICAgICAgICAgIGZwdXRzICgiIFI0S0VPUCIsIHN0ZG91dCk7CiAg ICAgICAgICAgICAgICAgIGlmIChvcHRpb24tPmluZm8gJiAweDAwMDAwMDAyKQogICAgICAgICAg ICAgICAgICAgIGZwdXRzICgiIFI4S1BGRVRDSCIsIHN0ZG91dCk7CiAgICAgICAgICAgICAgICAg IGlmIChvcHRpb24tPmluZm8gJiAweDAwMDAwMDA0KQogICAgICAgICAgICAgICAgICAgIGZwdXRz ICgiIFI1S0VPUCIsIHN0ZG91dCk7CiAgICAgICAgICAgICAgICAgIGlmIChvcHRpb24tPmluZm8g JiAweDAwMDAwMDA4KQogICAgICAgICAgICAgICAgICAgIGZwdXRzICgiIFI1S0NWVEwiLCBzdGRv dXQpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgNToKICAg ICAgICAgICAgICAgICAgZnB1dHMgKCIgRklMTCAgICAgICAiLCBzdGRvdXQpOwoKICAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgICAg IGZwdXRzICgiIFRBR1MgICAgICAgIiwgc3Rkb3V0KTsKCiAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgY2FzZSA3OgogICAgICAgICAgICAgICAgICBmcHV0cyAoIiBIV0FO RCAgICAgIiwgc3Rkb3V0KTsKICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi0+aW5mbyAmIDB4 MDAwMDAwMDEpCiAgICAgICAgICAgICAgICAgICAgZnB1dHMgKCIgUjRLRU9QX0NIRUNLRUQiLCBz dGRvdXQpOwogICAgICAgICAgICAgICAgICBpZiAob3B0aW9uLT5pbmZvICYgMHgwMDAwMDAwMikK ICAgICAgICAgICAgICAgICAgICBmcHV0cyAoIiBSNEtFT1BfQ0xFQU4iLCBzdGRvdXQpOwogICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgODoKICAgICAgICAgICAg ICAgICAgZnB1dHMgKCIgSFdPUiAgICAgICIsIHN0ZG91dCk7CiAgICAgICAgICAgICAgICAgIGlm IChvcHRpb24tPmluZm8gJiAweDAwMDAwMDAxKQogICAgICAgICAgICAgICAgICAgIGZwdXRzICgi IFI0S0VPUF9DSEVDS0VEIiwgc3Rkb3V0KTsKICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbi0+ aW5mbyAmIDB4MDAwMDAwMDIpCiAgICAgICAgICAgICAgICAgICAgZnB1dHMgKCIgUjRLRU9QX0NM RUFOIiwgc3Rkb3V0KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBj YXNlIDk6CiAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiBHUF9HUk9VUCAgJSMwNmx4ICBzZWxm LWNvbnRhaW5lZCAlIzA2bHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi0+aW5m byAmIDB4MDAwMGZmZmYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbi0+aW5mbyAm IDB4ZmZmZjAwMDApID4+IDE2KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICBjYXNlIDEwOgogICAgICAgICAgICAgICAgICBwcmludGYgKCIgSURFTlQgICAgICUjMDZs eCAgc2VsZi1jb250YWluZWQgJSMwNmx4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRp b24tPmluZm8gJiAweDAwMDBmZmZmLAogICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb24t PmluZm8gJiAweGZmZmYwMDAwKSA+PiAxNik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgZGVmYXVsdDoKCiAgICAgICAgICAgICAgICAgIHByaW50ZiAoIiAlM2QgPz8/ ICAgICAlZCAlbHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi0+a2luZCwgb3B0 aW9uLT5zZWN0aW9uLCBvcHRpb24tPmluZm8pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgbGVuID0gc2l6ZW9mICgqZW9wdCk7CiAgICAg ICAgICAgICAgd2hpbGUgKGxlbiA8IG9wdGlvbi0+c2l6ZSkKICAgICAgICAgICAgICAgIGlmICgo KGNoYXIgKikgb3B0aW9uKVtsZW5dID49ICcgJwogICAgICAgICAgICAgICAgICAgICYmICgoY2hh ciAqKSBvcHRpb24pW2xlbl0gPCAweDdmKQogICAgICAgICAgICAgICAgICBwcmludGYgKCIlYyIs ICgoY2hhciAqKSBvcHRpb24pW2xlbisrXSk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICAgIHByaW50ZiAoIlxcJTAzbyIsICgoY2hhciAqKSBvcHRpb24pW2xlbisrXSk7Cgog ICAgICAgICAgICAgIGZwdXRzICgiXG4iLCBzdGRvdXQpOwogICAgICAgICAgICAgICsrb3B0aW9u OwogICAgICAgICAgICB9CgogICAgICAgICAgZnJlZSAoZW9wdCk7CiAgICAgICAgfQogICAgfQoK ICBpZiAoY29uZmxpY3RzX29mZnNldCAhPSAwICYmIGNvbmZsaWN0c25vICE9IDApCiAgICB7CiAg ICAgIEVsZjMyX0NvbmZsaWN0ICppY29uZjsKICAgICAgc2l6ZV90IGNudDsKCiAgICAgIGlmIChk eW5hbWljX3N5bWJvbHMgPT0gKCh2b2lkICopMCkpCiAgICAgICAgewogICAgICAgICAgZXJyb3Ig KCgiY29uZmxpY3QgbGlzdCBmb3VuZCB3aXRob3V0IGEgZHluYW1pYyBzeW1ib2wgdGFibGUiKSk7 CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICBpY29uZiA9IChFbGYzMl9Db25m bGljdCAqKSBtYWxsb2MgKGNvbmZsaWN0c25vICogc2l6ZW9mICgqaWNvbmYpKTsKICAgICAgaWYg KGljb25mID09ICgodm9pZCAqKTApKQogICAgICAgIHsKICAgICAgICAgIGVycm9yICgoIk91dCBv ZiBtZW1vcnkiKSk7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICBpZiAoaXNf MzJiaXRfZWxmKQogICAgICAgIHsKICAgICAgICAgIEVsZjMyX0V4dGVybmFsX0NvbmZsaWN0ICpl Y29uZjMyOwoKICAgICAgICAgIGVjb25mMzIgPSAoKEVsZjMyX0V4dGVybmFsX0NvbmZsaWN0ICop CiAgICAgICAgICAgICAgICAgICAgIGdldF9kYXRhICgoKHZvaWQgKikwKSwgZmlsZSwgY29uZmxp Y3RzX29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZsaWN0c25vICog c2l6ZW9mICgqZWNvbmYzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImNvbmZs aWN0IikpKTsKICAgICAgICAgIGlmICghZWNvbmYzMikKICAgICAgICAgICAgcmV0dXJuIDA7Cgog ICAgICAgICAgZm9yIChjbnQgPSAwOyBjbnQgPCBjb25mbGljdHNubzsgKytjbnQpCiAgICAgICAg ICAgIGljb25mW2NudF0gPSBieXRlX2dldCAoZWNvbmYzMltjbnRdLCBzaXplb2YgKGVjb25mMzJb Y250XSkpOwoKICAgICAgICAgIGZyZWUgKGVjb25mMzIpOwogICAgICAgIH0KICAgICAgZWxzZQog ICAgICAgIHsKICAgICAgICAgIEVsZjY0X0V4dGVybmFsX0NvbmZsaWN0ICplY29uZjY0OwoKICAg ICAgICAgIGVjb25mNjQgPSAoKEVsZjY0X0V4dGVybmFsX0NvbmZsaWN0ICopCiAgICAgICAgICAg ICAgICAgICAgIGdldF9kYXRhICgoKHZvaWQgKikwKSwgZmlsZSwgY29uZmxpY3RzX29mZnNldCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZsaWN0c25vICogc2l6ZW9mICgqZWNv bmY2NCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImNvbmZsaWN0IikpKTsKICAg ICAgICAgIGlmICghZWNvbmY2NCkKICAgICAgICAgICAgcmV0dXJuIDA7CgogICAgICAgICAgZm9y IChjbnQgPSAwOyBjbnQgPCBjb25mbGljdHNubzsgKytjbnQpCiAgICAgICAgICAgIGljb25mW2Nu dF0gPSBieXRlX2dldCAoZWNvbmY2NFtjbnRdLCBzaXplb2YgKGVjb25mNjRbY250XSkpOwoKICAg ICAgICAgIGZyZWUgKGVjb25mNjQpOwogICAgICAgIH0KCiAgICAgIHByaW50ZiAoKCJcblNlY3Rp b24gJy5jb25mbGljdCcgY29udGFpbnMgJWxkIGVudHJpZXM6XG4iKSwKICAgICAgICAgICAgICAo bG9uZykgY29uZmxpY3Rzbm8pOwogICAgICBwdXRzICgoIiAgTnVtOiAgICBJbmRleCAgICAgICBW YWx1ZSAgTmFtZSIpKTsKCiAgICAgIGZvciAoY250ID0gMDsgY250IDwgY29uZmxpY3Rzbm87ICsr Y250KQogICAgICAgIHsKICAgICAgICAgIEVsZl9JbnRlcm5hbF9TeW0gKnBzeW0gPSAmIGR5bmFt aWNfc3ltYm9sc1tpY29uZltjbnRdXTsKCiAgICAgICAgICBwcmludGYgKCIlNWx1OiAlOGx1ICAi LCAodW5zaWduZWQgbG9uZykgY250LCBpY29uZltjbnRdKTsKICAgICAgICAgIHByaW50X3ZtYSAo cHN5bS0+c3RfdmFsdWUsIEZVTExfSEVYKTsKICAgICAgICAgIHB1dGNoYXIgKCcgJyk7CiAgICAg ICAgICBwcmludF9zeW1ib2wgKDI1LCBkeW5hbWljX3N0cmluZ3MgKyBwc3ltLT5zdF9uYW1lKTsK ICAgICAgICAgIHB1dGNoYXIgKCdcbicpOwogICAgICAgIH0KCiAgICAgIGZyZWUgKGljb25mKTsK ICAgIH0KCiAgcmV0dXJuIDE7Cn0KCnN0YXRpYyBpbnQKcHJvY2Vzc19nbnVfbGlibGlzdCAoZmls ZSkKICAgICBGSUxFICpmaWxlOwp7CiAgRWxmX0ludGVybmFsX1NoZHIgKnNlY3Rpb24sICpzdHJp bmdfc2VjOwogIEVsZjMyX0V4dGVybmFsX0xpYiAqZWxpYjsKICBjaGFyICpzdHJ0YWI7CiAgc2l6 ZV90IGNudDsKICB1bnNpZ25lZCBpOwoKICBpZiAoISBkb19hcmNoKQogICAgcmV0dXJuIDA7Cgog IGZvciAoaSA9IDAsIHNlY3Rpb24gPSBzZWN0aW9uX2hlYWRlcnM7CiAgICAgICBpIDwgZWxmX2hl YWRlci5lX3NobnVtOwogICAgICAgaSsrLCBzZWN0aW9uKyspCiAgICB7CiAgICAgIHN3aXRjaCAo c2VjdGlvbi0+c2hfdHlwZSkKICAgICAgICB7CiAgICAgICAgY2FzZSAweDZmZmZmZmY3OgogICAg ICAgICAgZWxpYiA9ICgoRWxmMzJfRXh0ZXJuYWxfTGliICopCiAgICAgICAgICAgICAgICAgZ2V0 X2RhdGEgKCgodm9pZCAqKTApLCBmaWxlLCBzZWN0aW9uLT5zaF9vZmZzZXQsIHNlY3Rpb24tPnNo X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgibGlibGlzdCIpKSk7CgogICAgICAg ICAgaWYgKGVsaWIgPT0gKCh2b2lkICopMCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg c3RyaW5nX3NlYyA9IChzZWN0aW9uX2hlYWRlcnMgKyAoKHNlY3Rpb24tPnNoX2xpbmspIDwgMHhG RjAwID8gKHNlY3Rpb24tPnNoX2xpbmspIDogKChzZWN0aW9uLT5zaF9saW5rKSA8PSAweEZGRkYg PyAwIDogKHNlY3Rpb24tPnNoX2xpbmspIC0gKDB4RkZGRiArIDEgLSAweEZGMDApKSkpOwoKICAg ICAgICAgIHN0cnRhYiA9IChjaGFyICopIGdldF9kYXRhICgoKHZvaWQgKikwKSwgZmlsZSwgc3Ry aW5nX3NlYy0+c2hfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cmluZ19zZWMtPnNoX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKCJsaWJsaXN0IHN0cmluZyB0YWJsZSIpKTsKCiAgICAgICAgICBpZiAoc3RydGFiID09ICgo dm9pZCAqKTApCiAgICAgICAgICAgICAgfHwgc2VjdGlvbi0+c2hfZW50c2l6ZSAhPSBzaXplb2Yg KEVsZjMyX0V4dGVybmFsX0xpYikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBmcmVlIChl bGliKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgIHByaW50 ZiAoKCJcbkxpYnJhcnkgbGlzdCBzZWN0aW9uICclcycgY29udGFpbnMgJWx1IGVudHJpZXM6XG4i KSwKICAgICAgICAgICAgICAgICAgKChzZWN0aW9uKSA9PSAoKHZvaWQgKikwKSA/ICI8bm9uZT4i IDogKChzZWN0aW9uKS0+c2hfbmFtZSA+PSBzdHJpbmdfdGFibGVfbGVuZ3RoID8gIjxjb3JydXB0 PiIgOiBzdHJpbmdfdGFibGUgKyAoc2VjdGlvbiktPnNoX25hbWUpKSwKICAgICAgICAgICAgICAg ICAgKGxvbmcpIChzZWN0aW9uLT5zaF9zaXplIC8gc2l6ZW9mIChFbGYzMl9FeHRlcm5hbF9MaWIp KSk7CgogICAgICAgICAgcHV0cyAoIiAgICAgTGlicmFyeSAgICAgICAgICAgICAgVGltZSBTdGFt cCAgICAgICAgICBDaGVja3N1bSAgIFZlcnNpb24gRmxhZ3MiKTsKCiAgICAgICAgICBmb3IgKGNu dCA9IDA7IGNudCA8IHNlY3Rpb24tPnNoX3NpemUgLyBzaXplb2YgKEVsZjMyX0V4dGVybmFsX0xp Yik7CiAgICAgICAgICAgICAgICsrY250KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgRWxm MzJfTGliIGxpYmxpc3Q7CiAgICAgICAgICAgICAgdGltZV90IHRpbWU7CiAgICAgICAgICAgICAg Y2hhciB0aW1lYnVmWzIwXTsKICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKnRtcDsKCiAgICAgICAg ICAgICAgbGlibGlzdC5sX25hbWUgPSBieXRlX2dldCAoZWxpYltjbnRdLmxfbmFtZSwgc2l6ZW9m IChlbGliW2NudF0ubF9uYW1lKSk7CiAgICAgICAgICAgICAgdGltZSA9IGJ5dGVfZ2V0IChlbGli W2NudF0ubF90aW1lX3N0YW1wLCBzaXplb2YgKGVsaWJbY250XS5sX3RpbWVfc3RhbXApKTsKICAg ICAgICAgICAgICBsaWJsaXN0LmxfY2hlY2tzdW0gPSBieXRlX2dldCAoZWxpYltjbnRdLmxfY2hl Y2tzdW0sIHNpemVvZiAoZWxpYltjbnRdLmxfY2hlY2tzdW0pKTsKICAgICAgICAgICAgICBsaWJs aXN0LmxfdmVyc2lvbiA9IGJ5dGVfZ2V0IChlbGliW2NudF0ubF92ZXJzaW9uLCBzaXplb2YgKGVs aWJbY250XS5sX3ZlcnNpb24pKTsKICAgICAgICAgICAgICBsaWJsaXN0LmxfZmxhZ3MgPSBieXRl X2dldCAoZWxpYltjbnRdLmxfZmxhZ3MsIHNpemVvZiAoZWxpYltjbnRdLmxfZmxhZ3MpKTsKCiAg ICAgICAgICAgICAgdG1wID0gZ210aW1lICgmdGltZSk7CiAgICAgICAgICAgICAgc3ByaW50ZiAo dGltZWJ1ZiwgIiUwNHUtJTAydS0lMDJ1VCUwMnU6JTAydTolMDJ1IiwKICAgICAgICAgICAgICAg ICAgICAgICB0bXAtPnRtX3llYXIgKyAxOTAwLCB0bXAtPnRtX21vbiArIDEsIHRtcC0+dG1fbWRh eSwKICAgICAgICAgICAgICAgICAgICAgICB0bXAtPnRtX2hvdXIsIHRtcC0+dG1fbWluLCB0bXAt PnRtX3NlYyk7CgogICAgICAgICAgICAgIHByaW50ZiAoIiUzbHU6ICIsICh1bnNpZ25lZCBsb25n KSBjbnQpOwogICAgICAgICAgICAgIGlmIChkb193aWRlKQogICAgICAgICAgICAgICAgcHJpbnRm ICgiJS0yMHMiLCBzdHJ0YWIgKyBsaWJsaXN0LmxfbmFtZSk7CiAgICAgICAgICAgICAgZWxzZQog ICAgICAgICAgICAgICAgcHJpbnRmICgiJS0yMC4yMHMiLCBzdHJ0YWIgKyBsaWJsaXN0LmxfbmFt ZSk7CiAgICAgICAgICAgICAgcHJpbnRmICgiICVzICUjMDEwbHggJS03bGQgJS03bGRcbiIsIHRp bWVidWYsIGxpYmxpc3QubF9jaGVja3N1bSwKICAgICAgICAgICAgICAgICAgICAgIGxpYmxpc3Qu bF92ZXJzaW9uLCBsaWJsaXN0LmxfZmxhZ3MpOwogICAgICAgICAgICB9CgogICAgICAgICAgZnJl ZSAoZWxpYik7CiAgICAgICAgfQogICAgfQoKICByZXR1cm4gMTsKfQoKc3RhdGljIGNvbnN0IGNo YXIgKgpnZXRfbm90ZV90eXBlIChlX3R5cGUpCiAgICAgdW5zaWduZWQgZV90eXBlOwp7CiAgc3Rh dGljIGNoYXIgYnVmZls2NF07CgogIHN3aXRjaCAoZV90eXBlKQogICAgewogICAgY2FzZSAxOiBy ZXR1cm4gKCJOVF9QUlNUQVRVUyAocHJzdGF0dXMgc3RydWN0dXJlKSIpOwogICAgY2FzZSAyOiBy ZXR1cm4gKCJOVF9GUFJFR1NFVCAoZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzKSIpOwogICAgY2Fz ZSAzOiByZXR1cm4gKCJOVF9QUlBTSU5GTyAocHJwc2luZm8gc3RydWN0dXJlKSIpOwogICAgY2Fz ZSA0OiByZXR1cm4gKCJOVF9UQVNLU1RSVUNUICh0YXNrIHN0cnVjdHVyZSkiKTsKICAgIGNhc2Ug MHg0NmU2MmI3ZjogcmV0dXJuICgiTlRfUFJYRlBSRUcgKHVzZXJfeGZwcmVncyBzdHJ1Y3R1cmUp Iik7CiAgICBjYXNlIDEwOiByZXR1cm4gKCJOVF9QU1RBVFVTIChwc3RhdHVzIHN0cnVjdHVyZSki KTsKICAgIGNhc2UgMTI6IHJldHVybiAoIk5UX0ZQUkVHUyAoZmxvYXRpbmcgcG9pbnQgcmVnaXN0 ZXJzKSIpOwogICAgY2FzZSAxMzogcmV0dXJuICgiTlRfUFNJTkZPIChwc2luZm8gc3RydWN0dXJl KSIpOwogICAgY2FzZSAxNjogcmV0dXJuICgiTlRfTFdQU1RBVFVTIChsd3BzdGF0dXNfdCBzdHJ1 Y3R1cmUpIik7CiAgICBjYXNlIDE3OiByZXR1cm4gKCJOVF9MV1BTSU5GTyAobHdwc2luZm9fdCBz dHJ1Y3R1cmUpIik7CiAgICBjYXNlIDE4OiByZXR1cm4gKCJOVF9XSU4zMlBTVEFUVVMgKHdpbjMy X3BzdGF0dXMgc3RydWN0dXJlKSIpOwogICAgZGVmYXVsdDoKICAgICAgc3ByaW50ZiAoYnVmZiwg KCJVbmtub3duIG5vdGUgdHlwZTogKDB4JTA4eCkiKSwgZV90eXBlKTsKICAgICAgcmV0dXJuIGJ1 ZmY7CiAgICB9Cn0KCnN0YXRpYyBjb25zdCBjaGFyICoKZ2V0X25ldGJzZF9lbGZjb3JlX25vdGVf dHlwZSAoZV90eXBlKQogICAgIHVuc2lnbmVkIGVfdHlwZTsKewogIHN0YXRpYyBjaGFyIGJ1ZmZb NjRdOwoKICBpZiAoZV90eXBlID09IDEpCiAgICB7CgogICAgICByZXR1cm4gKCJOZXRCU0QgcHJv Y2luZm8gc3RydWN0dXJlIik7CiAgICB9CgoKCgoKCiAgaWYgKGVfdHlwZSA8IDMyKQogICAgewog ICAgICBzcHJpbnRmIChidWZmLCAoIlVua25vd24gbm90ZSB0eXBlOiAoMHglMDh4KSIpLCBlX3R5 cGUpOwogICAgICByZXR1cm4gYnVmZjsKICAgIH0KCiAgc3dpdGNoIChlbGZfaGVhZGVyLmVfbWFj aGluZSkKICAgIHsKCgoKICAgIGNhc2UgNDE6CiAgICBjYXNlIDB4OTAyNjoKICAgIGNhc2UgMjoK ICAgIGNhc2UgMTg6CiAgICBjYXNlIDQzOgogICAgICBzd2l0Y2ggKGVfdHlwZSkKICAgICAgICB7 CiAgICAgICAgY2FzZSAzMiArMDoKICAgICAgICAgIHJldHVybiAoIlBUX0dFVFJFR1MgKHJlZyBz dHJ1Y3R1cmUpIik7CiAgICAgICAgY2FzZSAzMiArMjoKICAgICAgICAgIHJldHVybiAoIlBUX0dF VEZQUkVHUyAoZnByZWcgc3RydWN0dXJlKSIpOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBi cmVhazsKICAgICAgICB9CiAgICAgIGJyZWFrOwoKCgogICAgZGVmYXVsdDoKICAgICAgc3dpdGNo IChlX3R5cGUpCiAgICAgICAgewogICAgICAgIGNhc2UgMzIgKzE6CiAgICAgICAgICByZXR1cm4g KCJQVF9HRVRSRUdTIChyZWcgc3RydWN0dXJlKSIpOwogICAgICAgIGNhc2UgMzIgKzM6CiAgICAg ICAgICByZXR1cm4gKCJQVF9HRVRGUFJFR1MgKGZwcmVnIHN0cnVjdHVyZSkiKTsKICAgICAgICBk ZWZhdWx0OgogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICBzcHJpbnRmIChidWZm LCAoIlBUX0ZJUlNUTUFDSCslZCIpLCBlX3R5cGUgLSAzMik7CiAgcmV0dXJuIGJ1ZmY7Cn0KCgoK CgoKc3RhdGljIGludApwcm9jZXNzX25vdGUgKHBub3RlKQogICAgIEVsZl9JbnRlcm5hbF9Ob3Rl ICpwbm90ZTsKewogIGNvbnN0IGNoYXIgKm50OwoKICBpZiAocG5vdGUtPm5hbWVzeiA9PSAwKQog ICAgewoKCiAgICAgIG50ID0gZ2V0X25vdGVfdHlwZSAocG5vdGUtPnR5cGUpOwogICAgfQogIGVs c2UgaWYgKChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoMTEpICYmICgoX19i dWlsdGluX2NvbnN0YW50X3AgKHBub3RlLT5uYW1lZGF0YSkgJiYgc3RybGVuIChwbm90ZS0+bmFt ZWRhdGEpIDwgKChzaXplX3QpICgxMSkpKSB8fCAoX19idWlsdGluX2NvbnN0YW50X3AgKCJOZXRC U0QtQ09SRSIpICYmIHN0cmxlbiAoIk5ldEJTRC1DT1JFIikgPCAoKHNpemVfdCkgKDExKSkpKSA/ IF9fZXh0ZW5zaW9uX18gKHsgc2l6ZV90IF9fczFfbGVuLCBfX3MyX2xlbjsgKF9fYnVpbHRpbl9j b25zdGFudF9wIChwbm90ZS0+bmFtZWRhdGEpICYmIF9fYnVpbHRpbl9jb25zdGFudF9wICgiTmV0 QlNELUNPUkUiKSAmJiAoX19zMV9sZW4gPSBzdHJsZW4gKHBub3RlLT5uYW1lZGF0YSksIF9fczJf bGVuID0gc3RybGVuICgiTmV0QlNELUNPUkUiKSwgKCEoKHNpemVfdCkoY29uc3Qgdm9pZCAqKSgo cG5vdGUtPm5hbWVkYXRhKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShwbm90ZS0+bmFt ZWRhdGEpID09IDEpIHx8IF9fczFfbGVuID49IDQpICYmICghKChzaXplX3QpKGNvbnN0IHZvaWQg KikoKCJOZXRCU0QtQ09SRSIpICsgMSkgLSAoc2l6ZV90KShjb25zdCB2b2lkICopKCJOZXRCU0Qt Q09SRSIpID09IDEpIHx8IF9fczJfbGVuID49IDQpKSA/IG1lbWNtcCAoKF9fY29uc3QgY2hhciAq KSAocG5vdGUtPm5hbWVkYXRhKSwgKF9fY29uc3QgY2hhciAqKSAoIk5ldEJTRC1DT1JFIiksIChf X3MxX2xlbiA8IF9fczJfbGVuID8gX19zMV9sZW4gOiBfX3MyX2xlbikgKyAxKSA6IChfX2J1aWx0 aW5fY29uc3RhbnRfcCAocG5vdGUtPm5hbWVkYXRhKSAmJiAoKHNpemVfdCkoY29uc3Qgdm9pZCAq KSgocG5vdGUtPm5hbWVkYXRhKSArIDEpIC0gKHNpemVfdCkoY29uc3Qgdm9pZCAqKShwbm90ZS0+ bmFtZWRhdGEpID09IDEpICYmIChfX3MxX2xlbiA9IHN0cmxlbiAocG5vdGUtPm5hbWVkYXRhKSwg X19zMV9sZW4gPCA0KSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIk5ldEJTRC1DT1JFIikgJiYg KChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJOZXRCU0QtQ09SRSIpICsgMSkgLSAoc2l6ZV90KShj b25zdCB2b2lkICopKCJOZXRCU0QtQ09SRSIpID09IDEpID8gKF9fZXh0ZW5zaW9uX18gKHsgcmVn aXN0ZXIgaW50IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0 IGNoYXIgKikgKHBub3RlLT5uYW1lZGF0YSkpWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSgiTmV0QlNELUNPUkUiKSlbMF0pOyBpZiAoX19zMV9sZW4gPiAw ICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KikgKF9fY29uc3QgY2hhciAqKSAocG5vdGUtPm5hbWVkYXRhKSlbMV0gLSAoKF9fY29uc3QgdW5z aWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiTmV0QlNELUNPUkUiKSlbMV0pOyBpZiAo X19zMV9sZW4gPiAxICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoKChfX2NvbnN0IHVu c2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocG5vdGUtPm5hbWVkYXRhKSlbMl0gLSAo KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopICgiTmV0QlNELUNPUkUi KSlbMl0pOyBpZiAoX19zMV9sZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgo X19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHBub3RlLT5uYW1lZGF0 YSkpWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIk5l dEJTRC1DT1JFIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkgOiAoX19leHRlbnNpb25fXyAoeyBf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKl9fczIgPSAoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChf X2NvbnN0IGNoYXIgKikgKCJOZXRCU0QtQ09SRSIpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSAo KChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAocG5vdGUtPm5hbWVk YXRhKSlbMF0gLSBfX3MyWzBdKTsgaWYgKF9fczFfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7 IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikg KHBub3RlLT5uYW1lZGF0YSkpWzFdIC0gX19zMlsxXSk7IGlmIChfX3MxX2xlbiA+IDEgJiYgX19y ZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChwbm90ZS0+bmFtZWRhdGEpKVsyXSAtIF9fczJbMl0pOyBpZiAoX19zMV9s ZW4gPiAyICYmIF9fcmVzdWx0ID09IDApIF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKHBub3RlLT5uYW1lZGF0YSkpWzNdIC0gX19zMlszXSk7 IH0gfSBfX3Jlc3VsdDsgfSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoIk5ldEJTRC1DT1JF IikgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKCJOZXRCU0QtQ09SRSIpICsgMSkgLSAoc2l6 ZV90KShjb25zdCB2b2lkICopKCJOZXRCU0QtQ09SRSIpID09IDEpICYmIChfX3MyX2xlbiA9IHN0 cmxlbiAoIk5ldEJTRC1DT1JFIiksIF9fczJfbGVuIDwgNCkgPyAoX19idWlsdGluX2NvbnN0YW50 X3AgKHBub3RlLT5uYW1lZGF0YSkgJiYgKChzaXplX3QpKGNvbnN0IHZvaWQgKikoKHBub3RlLT5u YW1lZGF0YSkgKyAxKSAtIChzaXplX3QpKGNvbnN0IHZvaWQgKikocG5vdGUtPm5hbWVkYXRhKSA9 PSAxKSA/IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIGludCBfX3Jlc3VsdCA9ICgoKF9fY29u c3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwbm90ZS0+bmFtZWRhdGEpKVsw XSAtICgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikoIk5ldEJTRC1D T1JFIikpWzBdKTsgaWYgKF9fczJfbGVuID4gMCAmJiBfX3Jlc3VsdCA9PSAwKSB7IF9fcmVzdWx0 ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKHBub3RlLT5u YW1lZGF0YSkpWzFdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAq KSAoIk5ldEJTRC1DT1JFIikpWzFdKTsgaWYgKF9fczJfbGVuID4gMSAmJiBfX3Jlc3VsdCA9PSAw KSB7IF9fcmVzdWx0ID0gKCgoX19jb25zdCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIg KikgKHBub3RlLT5uYW1lZGF0YSkpWzJdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9f Y29uc3QgY2hhciAqKSAoIk5ldEJTRC1DT1JFIikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBf X3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9ICgoKF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19j b25zdCBjaGFyICopIChwbm90ZS0+bmFtZWRhdGEpKVszXSAtICgoX19jb25zdCB1bnNpZ25lZCBj aGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJOZXRCU0QtQ09SRSIpKVszXSk7IH0gfSBfX3Jlc3Vs dDsgfSkpIDogKF9fZXh0ZW5zaW9uX18gKHsgX19jb25zdCB1bnNpZ25lZCBjaGFyICpfX3MxID0g KF9fY29uc3QgdW5zaWduZWQgY2hhciAqKSAoX19jb25zdCBjaGFyICopIChwbm90ZS0+bmFtZWRh dGEpOyByZWdpc3RlciBpbnQgX19yZXN1bHQgPSBfX3MxWzBdIC0gKChfX2NvbnN0IHVuc2lnbmVk IGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIk5ldEJTRC1DT1JFIikpWzBdOyBpZiAoX19zMl9s ZW4gPiAwICYmIF9fcmVzdWx0ID09IDApIHsgX19yZXN1bHQgPSAoX19zMVsxXSAtICgoX19jb25z dCB1bnNpZ25lZCBjaGFyICopIChfX2NvbnN0IGNoYXIgKikgKCJOZXRCU0QtQ09SRSIpKVsxXSk7 IGlmIChfX3MyX2xlbiA+IDEgJiYgX19yZXN1bHQgPT0gMCkgeyBfX3Jlc3VsdCA9IChfX3MxWzJd IC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAoIk5ldEJTRC1D T1JFIikpWzJdKTsgaWYgKF9fczJfbGVuID4gMiAmJiBfX3Jlc3VsdCA9PSAwKSBfX3Jlc3VsdCA9 IChfX3MxWzNdIC0gKChfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKikgKF9fY29uc3QgY2hhciAqKSAo Ik5ldEJTRC1DT1JFIikpWzNdKTsgfSB9IF9fcmVzdWx0OyB9KSkpIDogc3RyY21wIChwbm90ZS0+ bmFtZWRhdGEsICJOZXRCU0QtQ09SRSIpKSkpOyB9KSA6IHN0cm5jbXAgKHBub3RlLT5uYW1lZGF0 YSwgIk5ldEJTRC1DT1JFIiwgMTEpKSkgPT0gMCkKICAgIHsKCiAgICAgIG50ID0gZ2V0X25ldGJz ZF9lbGZjb3JlX25vdGVfdHlwZSAocG5vdGUtPnR5cGUpOwogICAgfQogIGVsc2UKICAgIHsKCgog ICAgICBudCA9IGdldF9ub3RlX3R5cGUgKHBub3RlLT50eXBlKTsKICAgIH0KCiAgcHJpbnRmICgi ICAlc1x0XHQweCUwOGx4XHQlc1xuIiwKICAgICAgICAgIHBub3RlLT5uYW1lc3ogPyBwbm90ZS0+ bmFtZWRhdGEgOiAiKE5PTkUpIiwKICAgICAgICAgIHBub3RlLT5kZXNjc3osIG50KTsKICByZXR1 cm4gMTsKfQoKCnN0YXRpYyBpbnQKcHJvY2Vzc19jb3JlZmlsZV9ub3RlX3NlZ21lbnQgKGZpbGUs IG9mZnNldCwgbGVuZ3RoKQogICAgIEZJTEUgKmZpbGU7CiAgICAgYmZkX3ZtYSBvZmZzZXQ7CiAg ICAgYmZkX3ZtYSBsZW5ndGg7CnsKICBFbGZfRXh0ZXJuYWxfTm90ZSAqcG5vdGVzOwogIEVsZl9F eHRlcm5hbF9Ob3RlICpleHRlcm5hbDsKICBpbnQgcmVzID0gMTsKCiAgaWYgKGxlbmd0aCA8PSAw KQogICAgcmV0dXJuIDA7CgogIHBub3RlcyA9IChFbGZfRXh0ZXJuYWxfTm90ZSAqKSBnZXRfZGF0 YSAoKCh2b2lkICopMCksIGZpbGUsIG9mZnNldCwgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKCJub3RlcyIpKTsKICBpZiAoIXBub3RlcykKICAgIHJl dHVybiAwOwoKICBleHRlcm5hbCA9IHBub3RlczsKCiAgcHJpbnRmICgoIlxuTm90ZXMgYXQgb2Zm c2V0IDB4JTA4bHggd2l0aCBsZW5ndGggMHglMDhseDpcbiIpLAogICAgICAgICAgKHVuc2lnbmVk IGxvbmcpIG9mZnNldCwgKHVuc2lnbmVkIGxvbmcpIGxlbmd0aCk7CiAgcHJpbnRmICgoIiAgT3du ZXJcdFx0RGF0YSBzaXplXHREZXNjcmlwdGlvblxuIikpOwoKICB3aGlsZSAoZXh0ZXJuYWwgPCAo RWxmX0V4dGVybmFsX05vdGUgKikoKGNoYXIgKikgcG5vdGVzICsgbGVuZ3RoKSkKICAgIHsKICAg ICAgRWxmX0V4dGVybmFsX05vdGUgKm5leHQ7CiAgICAgIEVsZl9JbnRlcm5hbF9Ob3RlIGlub3Rl OwogICAgICBjaGFyICp0ZW1wID0gKCh2b2lkICopMCk7CgogICAgICBpbm90ZS50eXBlID0gYnl0 ZV9nZXQgKGV4dGVybmFsLT50eXBlLCBzaXplb2YgKGV4dGVybmFsLT50eXBlKSk7CiAgICAgIGlu b3RlLm5hbWVzeiA9IGJ5dGVfZ2V0IChleHRlcm5hbC0+bmFtZXN6LCBzaXplb2YgKGV4dGVybmFs LT5uYW1lc3opKTsKICAgICAgaW5vdGUubmFtZWRhdGEgPSBleHRlcm5hbC0+bmFtZTsKICAgICAg aW5vdGUuZGVzY3N6ID0gYnl0ZV9nZXQgKGV4dGVybmFsLT5kZXNjc3osIHNpemVvZiAoZXh0ZXJu YWwtPmRlc2NzeikpOwogICAgICBpbm90ZS5kZXNjZGF0YSA9IGlub3RlLm5hbWVkYXRhICsgKCgo aW5vdGUubmFtZXN6KSArICgoYmZkX3ZtYSkgMSA8PCAoMikpIC0gMSkgJiAoKGJmZF92bWEpIC0x IDw8ICgyKSkpOwogICAgICBpbm90ZS5kZXNjcG9zID0gb2Zmc2V0ICsgKGlub3RlLmRlc2NkYXRh IC0gKGNoYXIgKikgcG5vdGVzKTsKCiAgICAgIG5leHQgPSAoRWxmX0V4dGVybmFsX05vdGUgKiko aW5vdGUuZGVzY2RhdGEgKyAoKChpbm90ZS5kZXNjc3opICsgKChiZmRfdm1hKSAxIDw8ICgyKSkg LSAxKSAmICgoYmZkX3ZtYSkgLTEgPDwgKDIpKSkpOwoKICAgICAgaWYgKCgoY2hhciAqKSBuZXh0 KSA+ICgoKGNoYXIgKikgcG5vdGVzKSArIGxlbmd0aCkpCiAgICAgICAgewogICAgICAgICAgd2Fy biAoKCJjb3JydXB0IG5vdGUgZm91bmQgYXQgb2Zmc2V0ICV4IGludG8gY29yZSBub3Rlc1xuIiks CiAgICAgICAgICAgICAgICAoKGNoYXIgKikgZXh0ZXJuYWwpIC0gKChjaGFyICopIHBub3Rlcykp OwogICAgICAgICAgd2FybiAoKCIgdHlwZTogJXgsIG5hbWVzaXplOiAlMDhseCwgZGVzY3NpemU6 ICUwOGx4XG4iKSwKICAgICAgICAgICAgICAgIGlub3RlLnR5cGUsIGlub3RlLm5hbWVzeiwgaW5v dGUuZGVzY3N6KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgIGV4dGVybmFsID0g bmV4dDsKCgoKCgogICAgICBpZiAoaW5vdGUubmFtZWRhdGFbaW5vdGUubmFtZXN6XSAhPSAnXDAn KQogICAgICAgIHsKICAgICAgICAgIHRlbXAgPSBtYWxsb2MgKGlub3RlLm5hbWVzeiArIDEpOwoK ICAgICAgICAgIGlmICh0ZW1wID09ICgodm9pZCAqKTApKQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgZXJyb3IgKCgiT3V0IG9mIG1lbW9yeVxuIikpOwogICAgICAgICAgICAgIHJlcyA9IDA7 CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAoX19leHRlbnNp b25fXyAoX19idWlsdGluX2NvbnN0YW50X3AgKGlub3RlLm5hbWVkYXRhKSAmJiBfX2J1aWx0aW5f Y29uc3RhbnRfcCAoaW5vdGUubmFtZXN6KSA/IChzdHJsZW4gKGlub3RlLm5hbWVkYXRhKSArIDEg Pj0gKChzaXplX3QpIChpbm90ZS5uYW1lc3opKSA/IChjaGFyICopIG1lbWNweSAodGVtcCwgaW5v dGUubmFtZWRhdGEsIGlub3RlLm5hbWVzeikgOiBzdHJuY3B5ICh0ZW1wLCBpbm90ZS5uYW1lZGF0 YSwgaW5vdGUubmFtZXN6KSkgOiBzdHJuY3B5ICh0ZW1wLCBpbm90ZS5uYW1lZGF0YSwgaW5vdGUu bmFtZXN6KSkpOwogICAgICAgICAgdGVtcFtpbm90ZS5uYW1lc3pdID0gMDsKCgogICAgICAgICAg aW5vdGUubmFtZWRhdGEgPSB0ZW1wOwogICAgICAgIH0KCiAgICAgIHJlcyAmPSBwcm9jZXNzX25v dGUgKCYgaW5vdGUpOwoKICAgICAgaWYgKHRlbXAgIT0gKCh2b2lkICopMCkpCiAgICAgICAgewog ICAgICAgICAgZnJlZSAodGVtcCk7CiAgICAgICAgICB0ZW1wID0gKCh2b2lkICopMCk7CiAgICAg ICAgfQogICAgfQoKICBmcmVlIChwbm90ZXMpOwoKICByZXR1cm4gcmVzOwp9CgpzdGF0aWMgaW50 CnByb2Nlc3NfY29yZWZpbGVfbm90ZV9zZWdtZW50cyAoZmlsZSkKICAgICBGSUxFICpmaWxlOwp7 CiAgRWxmX0ludGVybmFsX1BoZHIgKnByb2dyYW1faGVhZGVyczsKICBFbGZfSW50ZXJuYWxfUGhk ciAqc2VnbWVudDsKICB1bnNpZ25lZCBpbnQgaTsKICBpbnQgcmVzID0gMTsKCiAgcHJvZ3JhbV9o ZWFkZXJzID0gKEVsZl9JbnRlcm5hbF9QaGRyICopIG1hbGxvYwogICAgKGVsZl9oZWFkZXIuZV9w aG51bSAqIHNpemVvZiAoRWxmX0ludGVybmFsX1BoZHIpKTsKCiAgaWYgKHByb2dyYW1faGVhZGVy cyA9PSAoKHZvaWQgKikwKSkKICAgIHsKICAgICAgZXJyb3IgKCgiT3V0IG9mIG1lbW9yeVxuIikp OwogICAgICByZXR1cm4gMDsKICAgIH0KCiAgaWYgKGlzXzMyYml0X2VsZikKICAgIGkgPSBnZXRf MzJiaXRfcHJvZ3JhbV9oZWFkZXJzIChmaWxlLCBwcm9ncmFtX2hlYWRlcnMpOwogIGVsc2UKICAg IGkgPSBnZXRfNjRiaXRfcHJvZ3JhbV9oZWFkZXJzIChmaWxlLCBwcm9ncmFtX2hlYWRlcnMpOwoK ICBpZiAoaSA9PSAwKQogICAgewogICAgICBmcmVlIChwcm9ncmFtX2hlYWRlcnMpOwogICAgICBy ZXR1cm4gMDsKICAgIH0KCiAgZm9yIChpID0gMCwgc2VnbWVudCA9IHByb2dyYW1faGVhZGVyczsK ICAgICAgIGkgPCBlbGZfaGVhZGVyLmVfcGhudW07CiAgICAgICBpKyssIHNlZ21lbnQrKykKICAg IHsKICAgICAgaWYgKHNlZ21lbnQtPnBfdHlwZSA9PSA0KQogICAgICAgIHJlcyAmPSBwcm9jZXNz X2NvcmVmaWxlX25vdGVfc2VnbWVudCAoZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChiZmRfdm1hKSBzZWdtZW50LT5wX29mZnNldCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiZmRfdm1hKSBzZWdtZW50LT5w X2ZpbGVzeik7CiAgICB9CgogIGZyZWUgKHByb2dyYW1faGVhZGVycyk7CgogIHJldHVybiByZXM7 Cn0KCnN0YXRpYyBpbnQKcHJvY2Vzc19jb3JlZmlsZV9jb250ZW50cyAoZmlsZSkKICAgICBGSUxF ICpmaWxlOwp7CgogIGlmICghIGRvX25vdGVzKQogICAgcmV0dXJuIDE7CgoKICBpZiAoZWxmX2hl YWRlci5lX3R5cGUgIT0gNCkKICAgIHJldHVybiAxOwoKCiAgaWYgKGVsZl9oZWFkZXIuZV9waG51 bSA9PSAwKQogICAgewogICAgICBwcmludGYgKCgiTm8gbm90ZSBzZWdtZW50cyBwcmVzZW50IGlu IHRoZSBjb3JlIGZpbGUuXG4iKSk7CiAgICAgIHJldHVybiAxOwogICB9CgogIHJldHVybiBwcm9j ZXNzX2NvcmVmaWxlX25vdGVfc2VnbWVudHMgKGZpbGUpOwp9CgpzdGF0aWMgaW50CnByb2Nlc3Nf YXJjaF9zcGVjaWZpYyAoZmlsZSkKICAgICBGSUxFICpmaWxlOwp7CiAgaWYgKCEgZG9fYXJjaCkK ICAgIHJldHVybiAxOwoKICBzd2l0Y2ggKGVsZl9oZWFkZXIuZV9tYWNoaW5lKQogICAgewogICAg Y2FzZSA4OgogICAgY2FzZSAxMDoKICAgICAgcmV0dXJuIHByb2Nlc3NfbWlwc19zcGVjaWZpYyAo ZmlsZSk7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgYnJlYWs7CiAgICB9CiAgcmV0 dXJuIDE7Cn0KCnN0YXRpYyBpbnQKZ2V0X2ZpbGVfaGVhZGVyIChmaWxlKQogICAgIEZJTEUgKmZp bGU7CnsKCiAgaWYgKGZyZWFkIChlbGZfaGVhZGVyLmVfaWRlbnQsIDE2LCAxLCBmaWxlKSAhPSAx KQogICAgcmV0dXJuIDA7CgoKICBzd2l0Y2ggKGVsZl9oZWFkZXIuZV9pZGVudFs1XSkKICAgIHsK ICAgIGRlZmF1bHQ6CiAgICBjYXNlIDA6CiAgICBjYXNlIDE6IGJ5dGVfZ2V0ID0gYnl0ZV9nZXRf bGl0dGxlX2VuZGlhbjsgYnJlYWs7CiAgICBjYXNlIDI6IGJ5dGVfZ2V0ID0gYnl0ZV9nZXRfYmln X2VuZGlhbjsgYnJlYWs7CiAgICB9CgoKICBpc18zMmJpdF9lbGYgPSAoZWxmX2hlYWRlci5lX2lk ZW50WzRdICE9IDIpOwoKCiAgaWYgKGlzXzMyYml0X2VsZikKICAgIHsKICAgICAgRWxmMzJfRXh0 ZXJuYWxfRWhkciBlaGRyMzI7CgogICAgICBpZiAoZnJlYWQgKGVoZHIzMi5lX3R5cGUsIHNpemVv ZiAoZWhkcjMyKSAtIDE2LCAxLCBmaWxlKSAhPSAxKQogICAgICAgIHJldHVybiAwOwoKICAgICAg ZWxmX2hlYWRlci5lX3R5cGUgPSBieXRlX2dldCAoZWhkcjMyLmVfdHlwZSwgc2l6ZW9mIChlaGRy MzIuZV90eXBlKSk7CiAgICAgIGVsZl9oZWFkZXIuZV9tYWNoaW5lID0gYnl0ZV9nZXQgKGVoZHIz Mi5lX21hY2hpbmUsIHNpemVvZiAoZWhkcjMyLmVfbWFjaGluZSkpOwogICAgICBlbGZfaGVhZGVy LmVfdmVyc2lvbiA9IGJ5dGVfZ2V0IChlaGRyMzIuZV92ZXJzaW9uLCBzaXplb2YgKGVoZHIzMi5l X3ZlcnNpb24pKTsKICAgICAgZWxmX2hlYWRlci5lX2VudHJ5ID0gYnl0ZV9nZXQgKGVoZHIzMi5l X2VudHJ5LCBzaXplb2YgKGVoZHIzMi5lX2VudHJ5KSk7CiAgICAgIGVsZl9oZWFkZXIuZV9waG9m ZiA9IGJ5dGVfZ2V0IChlaGRyMzIuZV9waG9mZiwgc2l6ZW9mIChlaGRyMzIuZV9waG9mZikpOwog ICAgICBlbGZfaGVhZGVyLmVfc2hvZmYgPSBieXRlX2dldCAoZWhkcjMyLmVfc2hvZmYsIHNpemVv ZiAoZWhkcjMyLmVfc2hvZmYpKTsKICAgICAgZWxmX2hlYWRlci5lX2ZsYWdzID0gYnl0ZV9nZXQg KGVoZHIzMi5lX2ZsYWdzLCBzaXplb2YgKGVoZHIzMi5lX2ZsYWdzKSk7CiAgICAgIGVsZl9oZWFk ZXIuZV9laHNpemUgPSBieXRlX2dldCAoZWhkcjMyLmVfZWhzaXplLCBzaXplb2YgKGVoZHIzMi5l X2Voc2l6ZSkpOwogICAgICBlbGZfaGVhZGVyLmVfcGhlbnRzaXplID0gYnl0ZV9nZXQgKGVoZHIz Mi5lX3BoZW50c2l6ZSwgc2l6ZW9mIChlaGRyMzIuZV9waGVudHNpemUpKTsKICAgICAgZWxmX2hl YWRlci5lX3BobnVtID0gYnl0ZV9nZXQgKGVoZHIzMi5lX3BobnVtLCBzaXplb2YgKGVoZHIzMi5l X3BobnVtKSk7CiAgICAgIGVsZl9oZWFkZXIuZV9zaGVudHNpemUgPSBieXRlX2dldCAoZWhkcjMy LmVfc2hlbnRzaXplLCBzaXplb2YgKGVoZHIzMi5lX3NoZW50c2l6ZSkpOwogICAgICBlbGZfaGVh ZGVyLmVfc2hudW0gPSBieXRlX2dldCAoZWhkcjMyLmVfc2hudW0sIHNpemVvZiAoZWhkcjMyLmVf c2hudW0pKTsKICAgICAgZWxmX2hlYWRlci5lX3Noc3RybmR4ID0gYnl0ZV9nZXQgKGVoZHIzMi5l X3Noc3RybmR4LCBzaXplb2YgKGVoZHIzMi5lX3Noc3RybmR4KSk7CiAgICB9CiAgZWxzZQogICAg ewogICAgICBFbGY2NF9FeHRlcm5hbF9FaGRyIGVoZHI2NDsKCgoKCgogICAgICBpZiAoc2l6ZW9m IChiZmRfdm1hKSA8IDgpCiAgICAgICAgewogICAgICAgICAgZXJyb3IgKCgiVGhpcyBpbnN0YW5j ZSBvZiByZWFkZWxmIGhhcyBiZWVuIGJ1aWx0IHdpdGhvdXQgc3VwcG9ydCBmb3IgYVxuNjQgYml0 IGRhdGEgdHlwZSBhbmQgc28gaXQgY2Fubm90IHJlYWQgNjQgYml0IEVMRiBmaWxlcy5cbiIpKTsK CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CgogICAgICBpZiAoZnJlYWQgKGVoZHI2NC5l X3R5cGUsIHNpemVvZiAoZWhkcjY0KSAtIDE2LCAxLCBmaWxlKSAhPSAxKQogICAgICAgIHJldHVy biAwOwoKICAgICAgZWxmX2hlYWRlci5lX3R5cGUgPSBieXRlX2dldCAoZWhkcjY0LmVfdHlwZSwg c2l6ZW9mIChlaGRyNjQuZV90eXBlKSk7CiAgICAgIGVsZl9oZWFkZXIuZV9tYWNoaW5lID0gYnl0 ZV9nZXQgKGVoZHI2NC5lX21hY2hpbmUsIHNpemVvZiAoZWhkcjY0LmVfbWFjaGluZSkpOwogICAg ICBlbGZfaGVhZGVyLmVfdmVyc2lvbiA9IGJ5dGVfZ2V0IChlaGRyNjQuZV92ZXJzaW9uLCBzaXpl b2YgKGVoZHI2NC5lX3ZlcnNpb24pKTsKICAgICAgZWxmX2hlYWRlci5lX2VudHJ5ID0gYnl0ZV9n ZXQgKGVoZHI2NC5lX2VudHJ5LCAtOCk7CiAgICAgIGVsZl9oZWFkZXIuZV9waG9mZiA9IGJ5dGVf Z2V0IChlaGRyNjQuZV9waG9mZiwgLTgpOwogICAgICBlbGZfaGVhZGVyLmVfc2hvZmYgPSBieXRl X2dldCAoZWhkcjY0LmVfc2hvZmYsIC04KTsKICAgICAgZWxmX2hlYWRlci5lX2ZsYWdzID0gYnl0 ZV9nZXQgKGVoZHI2NC5lX2ZsYWdzLCBzaXplb2YgKGVoZHI2NC5lX2ZsYWdzKSk7CiAgICAgIGVs Zl9oZWFkZXIuZV9laHNpemUgPSBieXRlX2dldCAoZWhkcjY0LmVfZWhzaXplLCBzaXplb2YgKGVo ZHI2NC5lX2Voc2l6ZSkpOwogICAgICBlbGZfaGVhZGVyLmVfcGhlbnRzaXplID0gYnl0ZV9nZXQg KGVoZHI2NC5lX3BoZW50c2l6ZSwgc2l6ZW9mIChlaGRyNjQuZV9waGVudHNpemUpKTsKICAgICAg ZWxmX2hlYWRlci5lX3BobnVtID0gYnl0ZV9nZXQgKGVoZHI2NC5lX3BobnVtLCBzaXplb2YgKGVo ZHI2NC5lX3BobnVtKSk7CiAgICAgIGVsZl9oZWFkZXIuZV9zaGVudHNpemUgPSBieXRlX2dldCAo ZWhkcjY0LmVfc2hlbnRzaXplLCBzaXplb2YgKGVoZHI2NC5lX3NoZW50c2l6ZSkpOwogICAgICBl bGZfaGVhZGVyLmVfc2hudW0gPSBieXRlX2dldCAoZWhkcjY0LmVfc2hudW0sIHNpemVvZiAoZWhk cjY0LmVfc2hudW0pKTsKICAgICAgZWxmX2hlYWRlci5lX3Noc3RybmR4ID0gYnl0ZV9nZXQgKGVo ZHI2NC5lX3Noc3RybmR4LCBzaXplb2YgKGVoZHI2NC5lX3Noc3RybmR4KSk7CiAgICB9CgogIGlm IChlbGZfaGVhZGVyLmVfc2hvZmYpCiAgICB7CgoKICAgICAgaWYgKGlzXzMyYml0X2VsZikKICAg ICAgICBnZXRfMzJiaXRfc2VjdGlvbl9oZWFkZXJzIChmaWxlLCAxKTsKICAgICAgZWxzZQogICAg ICAgIGdldF82NGJpdF9zZWN0aW9uX2hlYWRlcnMgKGZpbGUsIDEpOwogICAgfQoKICByZXR1cm4g MTsKfQoKc3RhdGljIGludApwcm9jZXNzX2ZpbGUgKGZpbGVfbmFtZSkKICAgICBjaGFyICpmaWxl X25hbWU7CnsKICBGSUxFICpmaWxlOwogIHN0cnVjdCBzdGF0IHN0YXRidWY7CiAgdW5zaWduZWQg aW50IGk7CgogIGlmIChzdGF0IChmaWxlX25hbWUsICYgc3RhdGJ1ZikgPCAwKQogICAgewogICAg ICBlcnJvciAoKCJDYW5ub3Qgc3RhdCBpbnB1dCBmaWxlICVzLlxuIiksIGZpbGVfbmFtZSk7CiAg ICAgIHJldHVybiAxOwogICAgfQoKICBmaWxlID0gZm9wZW4gKGZpbGVfbmFtZSwgInJiIik7CiAg aWYgKGZpbGUgPT0gKCh2b2lkICopMCkpCiAgICB7CiAgICAgIGVycm9yICgoIklucHV0IGZpbGUg JXMgbm90IGZvdW5kLlxuIiksIGZpbGVfbmFtZSk7CiAgICAgIHJldHVybiAxOwogICAgfQoKICBp ZiAoISBnZXRfZmlsZV9oZWFkZXIgKGZpbGUpKQogICAgewogICAgICBlcnJvciAoKCIlczogRmFp bGVkIHRvIHJlYWQgZmlsZSBoZWFkZXJcbiIpLCBmaWxlX25hbWUpOwogICAgICBmY2xvc2UgKGZp bGUpOwogICAgICByZXR1cm4gMTsKICAgIH0KCgogIGZvciAoaSA9IChzaXplb2YgKHZlcnNpb25f aW5mbykgLyBzaXplb2YgKCh2ZXJzaW9uX2luZm8pWzBdKSk7IGktLTspCiAgICB2ZXJzaW9uX2lu Zm9baV0gPSAwOwoKICBmb3IgKGkgPSAoc2l6ZW9mIChkeW5hbWljX2luZm8pIC8gc2l6ZW9mICgo ZHluYW1pY19pbmZvKVswXSkpOyBpLS07KQogICAgZHluYW1pY19pbmZvW2ldID0gMDsKCgogIGlm IChzaG93X25hbWUpCiAgICBwcmludGYgKCgiXG5GaWxlOiAlc1xuIiksIGZpbGVfbmFtZSk7Cgog IGlmICghIHByb2Nlc3NfZmlsZV9oZWFkZXIgKCkpCiAgICB7CiAgICAgIGZjbG9zZSAoZmlsZSk7 CiAgICAgIHJldHVybiAxOwogICAgfQoKICBpZiAoISBwcm9jZXNzX3NlY3Rpb25faGVhZGVycyAo ZmlsZSkpCiAgICB7CgoKICAgICAgZG9fdW53aW5kID0gZG9fdmVyc2lvbiA9IGRvX2R1bXAgPSBk b19hcmNoID0gMDsKCiAgICAgIGlmICghIGRvX3VzaW5nX2R5bmFtaWMpCiAgICAgICAgZG9fc3lt cyA9IGRvX3JlbG9jID0gMDsKICAgIH0KCiAgaWYgKHByb2Nlc3NfcHJvZ3JhbV9oZWFkZXJzIChm aWxlKSkKICAgIHByb2Nlc3NfZHluYW1pY19zZWdtZW50IChmaWxlKTsKCiAgcHJvY2Vzc19yZWxv Y3MgKGZpbGUpOwoKICBwcm9jZXNzX3Vud2luZCAoZmlsZSk7CgogIHByb2Nlc3Nfc3ltYm9sX3Rh YmxlIChmaWxlKTsKCiAgcHJvY2Vzc19zeW1pbmZvIChmaWxlKTsKCiAgcHJvY2Vzc192ZXJzaW9u X3NlY3Rpb25zIChmaWxlKTsKCiAgcHJvY2Vzc19zZWN0aW9uX2NvbnRlbnRzIChmaWxlKTsKCiAg cHJvY2Vzc19jb3JlZmlsZV9jb250ZW50cyAoZmlsZSk7CgogIHByb2Nlc3NfZ251X2xpYmxpc3Qg KGZpbGUpOwoKICBwcm9jZXNzX2FyY2hfc3BlY2lmaWMgKGZpbGUpOwoKICBmY2xvc2UgKGZpbGUp OwoKICBpZiAoc2VjdGlvbl9oZWFkZXJzKQogICAgewogICAgICBmcmVlIChzZWN0aW9uX2hlYWRl cnMpOwogICAgICBzZWN0aW9uX2hlYWRlcnMgPSAoKHZvaWQgKikwKTsKICAgIH0KCiAgaWYgKHN0 cmluZ190YWJsZSkKICAgIHsKICAgICAgZnJlZSAoc3RyaW5nX3RhYmxlKTsKICAgICAgc3RyaW5n X3RhYmxlID0gKCh2b2lkICopMCk7CiAgICAgIHN0cmluZ190YWJsZV9sZW5ndGggPSAwOwogICAg fQoKICBpZiAoZHluYW1pY19zdHJpbmdzKQogICAgewogICAgICBmcmVlIChkeW5hbWljX3N0cmlu Z3MpOwogICAgICBkeW5hbWljX3N0cmluZ3MgPSAoKHZvaWQgKikwKTsKICAgIH0KCiAgaWYgKGR5 bmFtaWNfc3ltYm9scykKICAgIHsKICAgICAgZnJlZSAoZHluYW1pY19zeW1ib2xzKTsKICAgICAg ZHluYW1pY19zeW1ib2xzID0gKCh2b2lkICopMCk7CiAgICAgIG51bV9keW5hbWljX3N5bXMgPSAw OwogICAgfQoKICBpZiAoZHluYW1pY19zeW1pbmZvKQogICAgewogICAgICBmcmVlIChkeW5hbWlj X3N5bWluZm8pOwogICAgICBkeW5hbWljX3N5bWluZm8gPSAoKHZvaWQgKikwKTsKICAgIH0KCiAg cmV0dXJuIDA7Cn0KIyAxMDM1MyAicmVhZGVsZi5jIgppbnQgbWFpbiAoaW50LCBjaGFyICoqKTsK CmludAptYWluIChhcmdjLCBhcmd2KQogICAgIGludCBhcmdjOwogICAgIGNoYXIgKiphcmd2Owp7 CiAgaW50IGVycjsKICBjaGFyICpjbWRsaW5lX2R1bXBfc2VjdHMgPSAoKHZvaWQgKikwKTsKICB1 bnNpZ25lZCBudW1fY21kbGluZV9kdW1wX3NlY3RzID0gMDsKCgogIHNldGxvY2FsZSAoX19MQ19N RVNTQUdFUywgIiIpOwoKCiAgc2V0bG9jYWxlIChfX0xDX0NUWVBFLCAiIik7CgogIHdoaWxlICgw KTsKICB3aGlsZSAoMCk7CgogIHBhcnNlX2FyZ3MgKGFyZ2MsIGFyZ3YpOwoKICBpZiAob3B0aW5k IDwgKGFyZ2MgLSAxKSkKICAgIHNob3dfbmFtZSA9IDE7CgoKCiAgaWYgKG9wdGluZCArIDEgPCBh cmdjICYmIGR1bXBfc2VjdHMgIT0gKCh2b2lkICopMCkpCiAgICB7CiAgICAgIGNtZGxpbmVfZHVt cF9zZWN0cyA9IG1hbGxvYyAobnVtX2R1bXBfc2VjdHMpOwogICAgICBpZiAoY21kbGluZV9kdW1w X3NlY3RzID09ICgodm9pZCAqKTApKQogICAgICAgIGVycm9yICgoIk91dCBvZiBtZW1vcnkgYWxs b2NhdGluZyBkdW1wIHJlcXVlc3QgdGFibGUuIikpOwogICAgICBlbHNlCiAgICAgICAgewogICAg ICAgICAgbWVtY3B5IChjbWRsaW5lX2R1bXBfc2VjdHMsIGR1bXBfc2VjdHMsIG51bV9kdW1wX3Nl Y3RzKTsKICAgICAgICAgIG51bV9jbWRsaW5lX2R1bXBfc2VjdHMgPSBudW1fZHVtcF9zZWN0czsK ICAgICAgICB9CiAgICB9CgogIGVyciA9IDA7CiAgd2hpbGUgKG9wdGluZCA8IGFyZ2MpCiAgICB7 CiAgICAgIGVyciB8PSBwcm9jZXNzX2ZpbGUgKGFyZ3Zbb3B0aW5kKytdKTsKCgogICAgICBpZiAo b3B0aW5kIDwgYXJnYyAmJiBkdW1wX3NlY3RzICE9ICgodm9pZCAqKTApKQogICAgICAgIHsKICAg ICAgICAgIG51bV9kdW1wX3NlY3RzID0gbnVtX2NtZGxpbmVfZHVtcF9zZWN0czsKICAgICAgICAg IGlmIChudW1fY21kbGluZV9kdW1wX3NlY3RzID4gMCkKICAgICAgICAgICAgbWVtY3B5IChkdW1w X3NlY3RzLCBjbWRsaW5lX2R1bXBfc2VjdHMsIG51bV9jbWRsaW5lX2R1bXBfc2VjdHMpOwogICAg ICAgIH0KICAgIH0KCiAgaWYgKGR1bXBfc2VjdHMgIT0gKCh2b2lkICopMCkpCiAgICBmcmVlIChk dW1wX3NlY3RzKTsKICBpZiAoY21kbGluZV9kdW1wX3NlY3RzICE9ICgodm9pZCAqKTApKQogICAg ZnJlZSAoY21kbGluZV9kdW1wX3NlY3RzKTsKCiAgcmV0dXJuIGVycjsKfQo=