From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BC685CCA470 for ; Mon, 6 Oct 2025 07:28:16 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v5fbW-0007fM-Ql; Mon, 06 Oct 2025 03:25:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v5fbV-0007fC-MJ for grub-devel@gnu.org; Mon, 06 Oct 2025 03:25:53 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v5fbS-0001vv-VA for grub-devel@gnu.org; Mon, 06 Oct 2025 03:25:53 -0400 Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 595Lii2t022693; Mon, 6 Oct 2025 07:25:48 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=8BKcYCA8mdd3WtynU v+qDn/Rqhyb/hPBFhkTUkOlWtE=; b=n0oqRddERyhrsnnf5oTgHIXx9eikDsqng eeybtR6zY1Qia9F/z6FniNjYAXKnkNnqM46NYtvPyGqjr74DAVWHsfvRH9BCOA0q rj7oKbO++MabSyWzCjq3NWPA+3/1YQ/QP/6fpbVkXZYoysvoGmMYAEPnFwzT/gvq GOjJ1PGHV3/sH9ixzprEaA3IFtWGzHjTDY508TM5ilQTlq1kOZWotE/MlnfEXeKF KnUG4Nh7bAZruwjTOzi0yCpvrSeuWXpH9xgm+NgtL9Ge1WkCp845Obc3GKf/3dJ2 7ZTjQ4WRXlLfhSX7ZsenxN4Tv8RygQdw9aamQUxZxaorkXXwzu7bA== Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 49jt0p7md4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 06 Oct 2025 07:25:48 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 5964XR2D019627; Mon, 6 Oct 2025 07:25:47 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 49kdws50sq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 06 Oct 2025 07:25:47 +0000 Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 5967PhMx55443776 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 6 Oct 2025 07:25:43 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 92E312004D; Mon, 6 Oct 2025 07:25:43 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id EA8C42004B; Mon, 6 Oct 2025 07:25:40 +0000 (GMT) Received: from localhost.localdomain (unknown [9.124.213.16]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 6 Oct 2025 07:25:40 +0000 (GMT) From: Sudhakar Kuppusamy To: grub-devel@gnu.org Cc: dja@axtens.net, jan.setjeeilers@oracle.com, julian.klode@canonical.com, mate.kukri@canonical.com, pjones@redhat.com, msuchanek@suse.com, mlewando@redhat.com, stefanb@linux.ibm.com, avnish@linux.ibm.com, nayna@linux.ibm.com, ssrish@linux.ibm.com, Sudhakar Kuppusamy , sridharm@linux.ibm.com, Daniel Kiper Subject: [PATCH v18 07/20] appended signatures: Parse PKCS#7 signed data Date: Mon, 6 Oct 2025 12:54:52 +0530 Message-ID: <20251006072508.19088-8-sudhakar@linux.ibm.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251006072508.19088-1-sudhakar@linux.ibm.com> References: <20251006072508.19088-1-sudhakar@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=XvT3+FF9 c=1 sm=1 tr=0 ts=68e36efc cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=x6icFKpwvdMA:10 a=mDV3o1hIAAAA:8 a=JuTF4qcAAAAA:8 a=VnNF1IyMAAAA:8 a=yPCof4ZbAAAA:8 a=foKWCotKXrICIOwrmvMA:9 a=WlT8qwTXB_Kj6um4hl3b:22 a=cPQSjfK2_nFv0Q5t_7PE:22 X-Proofpoint-ORIG-GUID: XWfvRFV0o6QRTlul31C-zDTpq8s2AqBp X-Proofpoint-GUID: XWfvRFV0o6QRTlul31C-zDTpq8s2AqBp X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMDA0MDAwOSBTYWx0ZWRfX/O53fr1gvoMt 0pHLXpJnNuCNcyUASk9AZan8KbG1HZcExn6eRHYm74/GipGmWS9d9QbH/TH95uhbJQOsh1flIK6 vncWFs9K1rJ75m6pesG4sIas3/VglpnfBWVXmVuUSjrNnKmO/RKwE2ScPWVkMG+adZzcqCsVTB0 1lf+SB/4lqeef9EZKckjjsgvLOGR0X9R0JJVMGYPZh4r+0s1RE9d7vLjGA7wzCnqo5krhK6Frvt 1ic8G7rdIiD0LjlAmymX+5pHYmaZCaCYHDCfDvUOcjBT3DcnNijkM/e9wB24iFfo49ao816wBZN b/ktxvkysL5GAuIMZPCm3mmkMq0m6Bfgd1OINCI/1vZyqx2QOK1sOn75+lhBuPMWLgB+7OaKxm8 r/ZmlmNUp0fha4Q/y/lRwH1cujxS8A== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-10-06_02,2025-10-02_03,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 malwarescore=0 spamscore=0 lowpriorityscore=0 suspectscore=0 phishscore=0 priorityscore=1501 clxscore=1015 adultscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2509150000 definitions=main-2510040009 Received-SPF: pass client-ip=148.163.158.5; envelope-from=sudhakar@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: The development of GNU GRUB Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org VGhpcyBjb2RlIGFsbG93cyB1cyB0byBwYXJzZToKCiAtIFBLQ1MjNyBzaWduZWQgZGF0YSBtZXNz YWdlcy4gT25seSBhIHNpbmdsZSBzaWduZXIgaW5mbyBpcyBzdXBwb3J0ZWQsIHdoaWNoCiAgIGlz IGFsbCB0aGF0IHRoZSBMaW51eCBzaWduLWZpbGUgdXRpbGl0eSBzdXBwb3J0cyBjcmVhdGluZyBv dXQtb2YtdGhlLWJveC4KICAgT25seSBSU0EsIFNIQS0yNTYgYW5kIFNIQS01MTIgYXJlIHN1cHBv cnRlZC4gQW55IGNlcnRpZmljYXRlIGVtYmVkZGVkIGluCiAgIHRoZSBQS0NTIzcgbWVzc2FnZSB3 aWxsIGJlIGlnbm9yZWQuCgpTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgQXh0ZW5zIDxkamFAYXh0ZW5z Lm5ldD4KU2lnbmVkLW9mZi1ieTogU3VkaGFrYXIgS3VwcHVzYW15IDxzdWRoYWthckBsaW51eC5p Ym0uY29tPgpSZXZpZXdlZC1ieTogQXZuaXNoIENob3VoYW4gPGF2bmlzaEBsaW51eC5pYm0uY29t PgpSZXZpZXdlZC1ieTogRGFuaWVsIEtpcGVyIDxkYW5pZWwua2lwZXJAb3JhY2xlLmNvbT4KLS0t CiBncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuaCB8ICAzNyArKwog Z3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL3BrY3M3LmMgICAgICAgfCA0NTIgKysrKysr KysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA0ODkgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGdydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9wa2NzNy5jCgpkaWZm IC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmggYi9n cnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuaAppbmRleCA2MDFkNjE2 NGYuLmIwYmViODkzNSAxMDA2NDQKLS0tIGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2ln L2FwcGVuZGVkc2lnLmgKKysrIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVu ZGVkc2lnLmgKQEAgLTE3LDExICsxNyw0OCBAQAogICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAqLwogCisjaW5jbHVkZSA8 Z3J1Yi9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaWJ0YXNuMS5oPgogCiBleHRlcm4gYXNuMV9ub2Rl IGdydWJfZ251dGxzX2dudXRsc19hc247CiBleHRlcm4gYXNuMV9ub2RlIGdydWJfZ251dGxzX3Br aXhfYXNuOwogCisjZGVmaW5lIEdSVUJfTUFYX09JRF9MRU4gICAgICAgICAzMgorCisvKiBBIFBL Q1MjNyBzaWduZWQgZGF0YSBzaWduZXIgaW5mby4gKi8KK3N0cnVjdCBwa2NzN19zaWduZXIKK3sK KyAgY29uc3QgZ2NyeV9tZF9zcGVjX3QgKmhhc2g7CisgIGdjcnlfbXBpX3Qgc2lnX21waTsKK307 Cit0eXBlZGVmIHN0cnVjdCBwa2NzN19zaWduZXIgZ3J1Yl9wa2NzN19zaWduZXJfdDsKKworLyoK KyAqIEEgUEtDUyM3IHNpZ25lZCBkYXRhIG1lc3NhZ2UuIFdlIG1ha2Ugbm8gYXR0ZW1wdCB0byBt YXRjaCBpbnRlbGxpZ2VudGx5LCBzbworICogd2UgZG9uJ3Qgc2F2ZSBhbnkgaW5mbyBhYm91dCB0 aGUgc2lnbmVyLgorICovCitzdHJ1Y3QgcGtjczdfZGF0YQoreworICBncnViX2ludDMyX3Qgc2ln bmVyX2NvdW50OworICBncnViX3BrY3M3X3NpZ25lcl90ICpzaWduZXJzOworfTsKK3R5cGVkZWYg c3RydWN0IHBrY3M3X2RhdGEgZ3J1Yl9wa2NzN19kYXRhX3Q7CisKKy8qCisgKiBQYXJzZSBhIFBL Q1MjNyBtZXNzYWdlLCB3aGljaCBtdXN0IGJlIGEgc2lnbmVkIGRhdGEgbWVzc2FnZS4gVGhlIG1l c3NhZ2UgbXVzdAorICogYmUgaW4gJ3NpZ2J1ZicgYW5kIG9mIHNpemUgJ2RhdGFfc2l6ZScuIFRo ZSByZXN1bHQgaXMgcGxhY2VkIGluICdtc2cnLCB3aGljaAorICogbXVzdCBhbHJlYWR5IGJlIGFs bG9jYXRlZC4KKyAqLworZXh0ZXJuIGdydWJfZXJyX3QKK2dydWJfcGtjczdfZGF0YV9wYXJzZSAo Y29uc3Qgdm9pZCAqc2lnYnVmLCBncnViX3NpemVfdCBkYXRhX3NpemUsIGdydWJfcGtjczdfZGF0 YV90ICptc2cpOworCisvKgorICogUmVsZWFzZSBhbGwgdGhlIHN0b3JhZ2UgYXNzb2NpYXRlZCB3 aXRoIHRoZSBQS0NTIzcgbWVzc2FnZS4gSWYgdGhlIGNhbGxlcgorICogZHluYW1pY2FsbHkgYWxs b2NhdGVkIHRoZSBtZXNzYWdlLCBpdCBtdXN0IGZyZWUgaXQuCisgKi8KK2V4dGVybiB2b2lkCitn cnViX3BrY3M3X2RhdGFfcmVsZWFzZSAoZ3J1Yl9wa2NzN19kYXRhX3QgKm1zZyk7CisKIC8qIERv IGxpYnRhc24xIGluaXQuICovCiBleHRlcm4gaW50CiBncnViX2FzbjFfaW5pdCAodm9pZCk7CmRp ZmYgLS1naXQgYS9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvcGtjczcuYyBiL2dydWIt Y29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9wa2NzNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMC4uYjhlMjcyMDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZ3J1Yi1jb3JlL2Nv bW1hbmRzL2FwcGVuZGVkc2lnL3BrY3M3LmMKQEAgLTAsMCArMSw0NTIgQEAKKy8qCisgKiAgR1JV QiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgorICogIENvcHlyaWdodCAoQykgMjAyMCwg MjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIw MjAsIDIwMjIsIDIwMjUgSUJNIENvcnBvcmF0aW9uCisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0 d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBv ZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u LgorICoKKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRo IEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8K KworI2luY2x1ZGUgImFwcGVuZGVkc2lnLmgiCisjaW5jbHVkZSA8Z3J1Yi9taXNjLmg+CisjaW5j bHVkZSA8Z3J1Yi9jcnlwdG8uaD4KKyNpbmNsdWRlIDxncnViL2djcnlwdC9nY3J5cHQuaD4KKyNp bmNsdWRlIDxzeXMvdHlwZXMuaD4KKworc3RhdGljIGNoYXIgYXNuMV9lcnJvcltBU04xX01BWF9F UlJPUl9ERVNDUklQVElPTl9TSVpFXTsKKworLyogUkZDIDU2NTIgcyA1LjEuICovCitzdGF0aWMg Y29uc3QgY2hhciAqc2lnbmVkRGF0YV9vaWQgPSAiMS4yLjg0MC4xMTM1NDkuMS43LjIiOworCisv KiBSRkMgNDA1NSBzIDIuMS4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICpzaGEyNTZfb2lkID0gIjIu MTYuODQwLjEuMTAxLjMuNC4yLjEiOworc3RhdGljIGNvbnN0IGNoYXIgKnNoYTUxMl9vaWQgPSAi Mi4xNi44NDAuMS4xMDEuMy40LjIuMyI7CisKK3N0YXRpYyBncnViX2Vycl90Citwcm9jZXNzX2Nv bnRlbnQgKGdydWJfdWludDhfdCAqY29udGVudCwgZ3J1Yl9pbnQzMl90IHNpemUsIGdydWJfcGtj czdfZGF0YV90ICptc2cpCit7CisgIGdydWJfaW50MzJfdCByZXM7CisgIGFzbjFfbm9kZSBzaWdu ZWRfcGFydDsKKyAgZ3J1Yl9lcnJfdCBlcnIgPSBHUlVCX0VSUl9OT05FOworICBjaGFyIGFsZ29f b2lkW0dSVUJfTUFYX09JRF9MRU5dOworICBncnViX2ludDMyX3QgYWxnb19vaWRfc2l6ZTsKKyAg Z3J1Yl9pbnQzMl90IGFsZ29fY291bnQ7CisgIGdydWJfaW50MzJfdCBzaWduZXJfY291bnQ7Cisg IGdydWJfaW50MzJfdCBpOworICBjaGFyIHZlcnNpb247CisgIGdydWJfaW50MzJfdCB2ZXJzaW9u X3NpemUgPSBzaXplb2YgKHZlcnNpb24pOworICBncnViX3VpbnQ4X3QgKnJlc3VsdF9idWY7Cisg IGdydWJfaW50MzJfdCByZXN1bHRfc2l6ZSA9IDA7CisgIGdydWJfaW50MzJfdCBjcmxzX3NpemUg PSAwOworICBnY3J5X2Vycm9yX3QgZ2NyeV9lcnI7CisgIGJvb2wgc2hhMjU2X2luX2RhLCBzaGEy NTZfaW5fc2ksIHNoYTUxMl9pbl9kYSwgc2hhNTEyX2luX3NpOworICBjaGFyICpkYV9wYXRoOwor ICBjaGFyICpzaV9zaWdfcGF0aDsKKyAgY2hhciAqc2lfZGFfcGF0aDsKKworICByZXMgPSBhc24x X2NyZWF0ZV9lbGVtZW50IChncnViX2dudXRsc19wa2l4X2FzbiwgIlBLSVgxLnBrY3MtNy1TaWdu ZWREYXRhIiwgJnNpZ25lZF9wYXJ0KTsKKyAgaWYgKHJlcyAhPSBBU04xX1NVQ0NFU1MpCisgICAg cmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAg ICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlIEFTTi4xIHN0cnVjdHVyZSBmb3IgUEtDUyM3IHNp Z25lZCBwYXJ0Iik7CisKKyAgcmVzID0gYXNuMV9kZXJfZGVjb2RpbmcyICgmc2lnbmVkX3BhcnQs IGNvbnRlbnQsICZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTjFfREVDT0RF X0ZMQUdfU1RSSUNUX0RFUiwgYXNuMV9lcnJvcik7CisgIGlmIChyZXMgIT0gQVNOMV9TVUNDRVNT KQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUs CisgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgcmVhZGluZyBQS0NTIzcgc2lnbmVkIGRh dGE6ICVzIiwgYXNuMV9lcnJvcik7CisgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7Cisg ICAgfQorCisgIC8qCisgICAqIFNpZ25lZERhdGEgOjo9IFNFUVVFTkNFIHsKKyAgICogICAgIHZl cnNpb24gQ01TVmVyc2lvbiwKKyAgICogICAgIGRpZ2VzdEFsZ29yaXRobXMgRGlnZXN0QWxnb3Jp dGhtSWRlbnRpZmllcnMsCisgICAqICAgICBlbmNhcENvbnRlbnRJbmZvIEVuY2Fwc3VsYXRlZENv bnRlbnRJbmZvLAorICAgKiAgICAgY2VydGlmaWNhdGVzIFswXSBJTVBMSUNJVCBDZXJ0aWZpY2F0 ZVNldCBPUFRJT05BTCwKKyAgICogICAgIGNybHMgWzFdIElNUExJQ0lUIFJldm9jYXRpb25JbmZv Q2hvaWNlcyBPUFRJT05BTCwKKyAgICogICAgIHNpZ25lckluZm9zIFNpZ25lckluZm9zIH0KKyAg ICovCisKKyAgcmVzID0gYXNuMV9yZWFkX3ZhbHVlIChzaWduZWRfcGFydCwgInZlcnNpb24iLCAm dmVyc2lvbiwgJnZlcnNpb25fc2l6ZSk7CisgIGlmIChyZXMgIT0gQVNOMV9TVUNDRVNTKQorICAg IHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsICJlcnJv ciByZWFkaW5nIHNpZ25lZERhdGEgdmVyc2lvbjogJXMiLAorICAgICAgICAgICAgICAgICAgICAg ICAgYXNuMV9zdHJlcnJvciAocmVzKSk7CisgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7 CisgICAgfQorCisgIC8qIFNpZ25hdHVyZSB2ZXJzaW9uIG11c3QgYmUgMSBiZWNhdXNlIGFwcGVu ZGVkIHNpZ25hdHVyZSBvbmx5IHN1cHBvcnQgdjEuICovCisgIGlmICh2ZXJzaW9uICE9IDEpCisg ICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIHNpZ25hdHVyZSB2ZXJzaW9uIHYlZCwg b25seSB2MSBzdXBwb3J0ZWQiLCB2ZXJzaW9uKTsKKyAgICAgIGdvdG8gY2xlYW51cF9zaWduZWRf cGFydDsKKyAgICB9CisKKyAgLyoKKyAgICogZGlnZXN0QWxnb3JpdGhtcyBEaWdlc3RBbGdvcml0 aG1JZGVudGlmaWVycworICAgKgorICAgKiBEaWdlc3RBbGdvcml0aG1JZGVudGlmaWVycyA6Oj0g U0VUIE9GIERpZ2VzdEFsZ29yaXRobUlkZW50aWZpZXIKKyAgICogRGlnZXN0QWxnb3JpdGhtSWRl bnRpZmVyIGlzIGFuIFguNTA5IEFsZ29yaXRobUlkZW50aWZpZXIgKDEwLjEuMSkKKyAgICoKKyAg ICogUkZDIDQwNTUgcyAyLjE6CisgICAqIHNoYTI1NklkZW50aWZpZXIgIEFsZ29yaXRobUlkZW50 aWZpZXIgIDo6PSAgeyBpZC1zaGEyNTYsIE5VTEwgfQorICAgKiBzaGE1MTJJZGVudGlmaWVyICBB bGdvcml0aG1JZGVudGlmaWVyICA6Oj0gIHsgaWQtc2hhNTEyLCBOVUxMIH0KKyAgICoKKyAgICog V2Ugb25seSBzdXBwb3J0IDEgZWxlbWVudCBpbiB0aGUgc2V0LCBhbmQgd2UgZG8gbm90IGNoZWNr IHBhcmFtZXRlcnMgYXRtLgorICAgKi8KKyAgcmVzID0gYXNuMV9udW1iZXJfb2ZfZWxlbWVudHMg KHNpZ25lZF9wYXJ0LCAiZGlnZXN0QWxnb3JpdGhtcyIsICZhbGdvX2NvdW50KTsKKyAgaWYgKHJl cyAhPSBBU04xX1NVQ0NFU1MpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9F UlJfQkFEX1NJR05BVFVSRSwgImVycm9yIGNvdW50aW5nIG51bWJlciBvZiBkaWdlc3QgYWxnb3Jp dGhtczogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzKSk7 CisgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7CisgICAgfQorCisgIGlmIChhbGdvX2Nv dW50IDw9IDApCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJ R05BVFVSRSwgImEgbWluaW11bSBvZiAxIGRpZ2VzdCBhbGdvcml0aG0gaXMgcmVxdWlyZWQiKTsK KyAgICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKKyAgICB9CisKKyAgaWYgKGFsZ29fY291 bnQgPiAyKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX05PVF9JTVBM RU1FTlRFRF9ZRVQsICJhIG1heGltdW0gb2YgMiBkaWdlc3QgYWxnb3JpdGhtcyBpcyBzdXBwb3J0 ZWQiKTsKKyAgICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKKyAgICB9CisKKyAgc2hhMjU2 X2luX2RhID0gZmFsc2U7CisgIHNoYTUxMl9pbl9kYSA9IGZhbHNlOworCisgIGZvciAoaSA9IDA7 IGkgPCBhbGdvX2NvdW50OyBpKyspCisgICAgeworICAgICAgZGFfcGF0aCA9IGdydWJfeGFzcHJp bnRmICgiZGlnZXN0QWxnb3JpdGhtcy4/JWQuYWxnb3JpdGhtIiwgaSArIDEpOworICAgICAgaWYg KGRhX3BhdGggPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3Ig KEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNv dWxkIG5vdCBhbGxvY2F0ZSBwYXRoIGZvciBkaWdlc3QgYWxnb3JpdGhtIHBhcnNpbmcgcGF0aCIp OworICAgICAgICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKKyAgICAgICAgfQorCisgICAg ICBhbGdvX29pZF9zaXplID0gc2l6ZW9mIChhbGdvX29pZCk7CisgICAgICByZXMgPSBhc24xX3Jl YWRfdmFsdWUgKHNpZ25lZF9wYXJ0LCBkYV9wYXRoLCBhbGdvX29pZCwgJmFsZ29fb2lkX3NpemUp OworICAgICAgaWYgKHJlcyAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICBl cnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLCAiZXJyb3IgcmVhZGluZyBk aWdlc3QgYWxnb3JpdGhtOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9z dHJlcnJvciAocmVzKSk7CisgICAgICAgICAgZ3J1Yl9mcmVlIChkYV9wYXRoKTsKKyAgICAgICAg ICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7CisgICAgICAgIH0KKworICAgICAgaWYgKGdydWJf c3RybmNtcCAoc2hhNTEyX29pZCwgYWxnb19vaWQsIGFsZ29fb2lkX3NpemUpID09IDApCisgICAg ICAgIHsKKyAgICAgICAgICBpZiAoc2hhNTEyX2luX2RhID09IGZhbHNlKQorICAgICAgICAgICAg c2hhNTEyX2luX2RhID0gdHJ1ZTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTSEEtNTEyIHNwZWNpZmllZCB0d2ljZSBpbiBk aWdlc3QgYWxnb3JpdGhtIGxpc3QiKTsKKyAgICAgICAgICAgICAgZ3J1Yl9mcmVlIChkYV9wYXRo KTsKKyAgICAgICAgICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0OworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgICBlbHNlIGlmIChncnViX3N0cm5jbXAgKHNoYTI1Nl9vaWQsIGFs Z29fb2lkLCBhbGdvX29pZF9zaXplKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgaWYgKHNo YTI1Nl9pbl9kYSA9PSBmYWxzZSkKKyAgICAgICAgICAgIHNoYTI1Nl9pbl9kYSA9IHRydWU7Cisg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnIgPSBncnViX2Vy cm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiU0hBLTI1NiBzcGVjaWZpZWQgdHdpY2UgaW4gZGlnZXN0IGFsZ29yaXRobSBsaXN0Iik7 CisgICAgICAgICAgICAgIGdydWJfZnJlZSAoZGFfcGF0aCk7CisgICAgICAgICAgICAgIGdvdG8g Y2xlYW51cF9zaWduZWRfcGFydDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxz ZQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9UX0lN UExFTUVOVEVEX1lFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAib25seSBTSEEtMjU2 IGFuZCBTSEEtNTEyIGhhc2hlcyBhcmUgc3VwcG9ydGVkLCBmb3VuZCBPSUQgJXMiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGFsZ29fb2lkKTsKKyAgICAgICAgICBncnViX2ZyZWUgKGRh X3BhdGgpOworICAgICAgICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKKyAgICAgICAgfQor CisgICAgICBncnViX2ZyZWUgKGRhX3BhdGgpOworICAgIH0KKworICAvKiBBdCB0aGlzIHBvaW50 LCBhdCBsZWFzdCBvbmUgb2Ygc2hhezI1Niw1MTJ9X2luX2RhIG11c3QgYmUgdHJ1ZS4gKi8KKwor ICAvKgorICAgKiBXZSBpZ25vcmUgdGhlIGNlcnRpZmljYXRlcywgYnV0IHdlIGRvbid0IHBlcm1p dCBDUkxzLiBBIENSTCBlbnRyeSBtaWdodCBiZQorICAgKiByZXZva2luZyB0aGUgY2VydGlmaWNh dGUgd2UncmUgdXNpbmcsIGFuZCB3ZSBoYXZlIG5vIHdheSBvZiBkZWFsaW5nIHdpdGgKKyAgICog dGhhdCBhdCB0aGUgbW9tZW50LgorICAgKi8KKyAgcmVzID0gYXNuMV9yZWFkX3ZhbHVlIChzaWdu ZWRfcGFydCwgImNybHMiLCBOVUxMLCAmY3Jsc19zaXplKTsKKyAgaWYgKHJlcyAhPSBBU04xX0VM RU1FTlRfTk9UX0ZPVU5EKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJS X05PVF9JTVBMRU1FTlRFRF9ZRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAiUEtDUyM3IG1l c3NhZ2VzIHdpdGggZW1iZWRkZWQgQ1JMcyBhcmUgbm90IHN1cHBvcnRlZCIpOworICAgICAgZ290 byBjbGVhbnVwX3NpZ25lZF9wYXJ0OworICAgIH0KKworICAvKiBSZWFkIHRoZSBzaWduYXR1cmVz ICovCisgIHJlcyA9IGFzbjFfbnVtYmVyX29mX2VsZW1lbnRzIChzaWduZWRfcGFydCwgInNpZ25l ckluZm9zIiwgJnNpZ25lcl9jb3VudCk7CisgIGlmIChyZXMgIT0gQVNOMV9TVUNDRVNTKQorICAg IHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsICJlcnJv ciBjb3VudGluZyBudW1iZXIgb2Ygc2lnbmVyczogJXMiLAorICAgICAgICAgICAgICAgICAgICAg ICAgYXNuMV9zdHJlcnJvciAocmVzKSk7CisgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7 CisgICAgfQorCisgIGlmIChzaWduZXJfY291bnQgPD0gMCkKKyAgICB7CisgICAgICBlcnIgPSBn cnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLCAiYSBtaW5pbXVtIG9mIDEgc2lnbmVy IGlzIHJlcXVpcmVkIik7CisgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7CisgICAgfQor CisgIG1zZy0+c2lnbmVycyA9IGdydWJfY2FsbG9jIChzaWduZXJfY291bnQsIHNpemVvZiAoZ3J1 Yl9wa2NzN19zaWduZXJfdCkpOworICBpZiAobXNnLT5zaWduZXJzID09IE5VTEwpCisgICAgewor ICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICJjb3VsZCBub3QgYWxsb2NhdGUgc3BhY2UgZm9yICVkIHNpZ25lcnMi LCBzaWduZXJfY291bnQpOworICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0OworICAgIH0K KworICBtc2ctPnNpZ25lcl9jb3VudCA9IDA7CisgIGZvciAoaSA9IDA7IGkgPCBzaWduZXJfY291 bnQ7IGkrKykKKyAgICB7CisgICAgICBzaV9kYV9wYXRoID0gZ3J1Yl94YXNwcmludGYgKCJzaWdu ZXJJbmZvcy4/JWQuZGlnZXN0QWxnb3JpdGhtLmFsZ29yaXRobSIsIGkgKyAxKTsKKyAgICAgIGlm IChzaV9kYV9wYXRoID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vy cm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJjb3VsZCBub3QgYWxsb2NhdGUgcGF0aCBmb3Igc2lnbmVyICVkJ3MgZGlnZXN0IGFsZ29yaXRo bSBwYXJzaW5nIHBhdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkpOworICAgICAg ICAgIGdvdG8gY2xlYW51cF9zaWduZXJJbmZvczsKKyAgICAgICAgfQorCisgICAgICBhbGdvX29p ZF9zaXplID0gc2l6ZW9mIChhbGdvX29pZCk7CisgICAgICByZXMgPSBhc24xX3JlYWRfdmFsdWUg KHNpZ25lZF9wYXJ0LCBzaV9kYV9wYXRoLCBhbGdvX29pZCwgJmFsZ29fb2lkX3NpemUpOworICAg ICAgaWYgKHJlcyAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBn cnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJlcnJvciByZWFkaW5nIHNpZ25lciAlZCdzIGRpZ2VzdCBhbGdvcml0aG06ICVzIiwg aSwgYXNuMV9zdHJlcnJvciAocmVzKSk7CisgICAgICAgICAgZ3J1Yl9mcmVlIChzaV9kYV9wYXRo KTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVySW5mb3M7CisgICAgICAgIH0KKworICAg ICAgZ3J1Yl9mcmVlIChzaV9kYV9wYXRoKTsKKworICAgICAgaWYgKGdydWJfc3RybmNtcCAoc2hh NTEyX29pZCwgYWxnb19vaWQsIGFsZ29fb2lkX3NpemUpID09IDApCisgICAgICAgIHsKKyAgICAg ICAgICBpZiAoc2hhNTEyX2luX2RhID09IGZhbHNlKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAic2lnbmVyICVkIGNsYWltcyBhIFNIQS01MTIgc2lnbmF0 dXJlIHdoaWNoIHdhcyBub3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Bl Y2lmaWVkIGluIHRoZSBvdXRlciBEaWdlc3RBbGdvcml0aG1zIiwgaSk7CisgICAgICAgICAgICAg IGdvdG8gY2xlYW51cF9zaWduZXJJbmZvczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNl CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHNoYTUxMl9pbl9zaSA9IHRydWU7CisgICAg ICAgICAgICAgIG1zZy0+c2lnbmVyc1tpXS5oYXNoID0gZ3J1Yl9jcnlwdG9fbG9va3VwX21kX2J5 X25hbWUgKCJzaGE1MTIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZSBp ZiAoZ3J1Yl9zdHJuY21wIChzaGEyNTZfb2lkLCBhbGdvX29pZCwgYWxnb19vaWRfc2l6ZSkgPT0g MCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChzaGEyNTZfaW5fZGEgPT0gZmFsc2UpCisgICAg ICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9T SUdOQVRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaWduZXIgJWQgY2xh aW1zIGEgU0hBLTI1NiBzaWduYXR1cmUgd2hpY2ggd2FzIG5vdCAiCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJzcGVjaWZpZWQgaW4gdGhlIG91dGVyIERpZ2VzdEFsZ29yaXRobXMi LCBpKTsKKyAgICAgICAgICAgICAgZ290byBjbGVhbnVwX3NpZ25lckluZm9zOworICAgICAgICAg ICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2hhMjU2 X2luX3NpID0gdHJ1ZTsKKyAgICAgICAgICAgICAgbXNnLT5zaWduZXJzW2ldLmhhc2ggPSBncnVi X2NyeXB0b19sb29rdXBfbWRfYnlfbmFtZSAoInNoYTI1NiIpOworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9y IChHUlVCX0VSUl9OT1RfSU1QTEVNRU5URURfWUVULAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJvbmx5IFNIQS0yNTYgYW5kIFNIQS01MTIgaGFzaGVzIGFyZSBzdXBwb3J0ZWQsIGZvdW5k IE9JRCAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnb19vaWQpOworICAgICAg ICAgIGdvdG8gY2xlYW51cF9zaWduZXJJbmZvczsKKyAgICAgICAgfQorCisgICAgICBpZiAobXNn LT5zaWduZXJzW2ldLmhhc2ggPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdy dWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIkhhc2ggYWxnb3JpdGhtIGZvciBzaWduZXIgJWQgKE9JRCAlcykgbm90IGxvYWRlZCIs IGksIGFsZ29fb2lkKTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVySW5mb3M7CisgICAg ICAgIH0KKworICAgICAgc2lfc2lnX3BhdGggPSBncnViX3hhc3ByaW50ZiAoInNpZ25lckluZm9z Lj8lZC5zaWduYXR1cmUiLCBpICsgMSk7CisgICAgICBpZiAoc2lfc2lnX3BhdGggPT0gTlVMTCkK KyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9N RU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBhbGxvY2F0ZSBw YXRoIGZvciBzaWduZXIgJWQncyBzaWduYXR1cmUgcGFyc2luZyBwYXRoIiwgaSk7CisgICAgICAg ICAgZ290byBjbGVhbnVwX3NpZ25lckluZm9zOworICAgICAgICB9CisKKyAgICAgIHJlc3VsdF9i dWYgPSBncnViX2FzbjFfYWxsb2NhdGVfYW5kX3JlYWQgKHNpZ25lZF9wYXJ0LCBzaV9zaWdfcGF0 aCwgInNpZ25hdHVyZSBkYXRhIiwgJnJlc3VsdF9zaXplKTsKKyAgICAgIGdydWJfZnJlZSAoc2lf c2lnX3BhdGgpOworCisgICAgICBpZiAocmVzdWx0X2J1ZiA9PSBOVUxMKQorICAgICAgICB7Cisg ICAgICAgICAgZXJyID0gZ3J1Yl9lcnJubzsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVy SW5mb3M7CisgICAgICAgIH0KKworICAgICAgZ2NyeV9lcnIgPSBfZ2NyeV9tcGlfc2NhbiAoJiht c2ctPnNpZ25lcnNbaV0uc2lnX21waSksIEdDUllNUElfRk1UX1VTRywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJlc3VsdF9idWYsIHJlc3VsdF9zaXplLCBOVUxMKTsKKyAgICAg IGdydWJfZnJlZSAocmVzdWx0X2J1Zik7CisKKyAgICAgIGlmIChnY3J5X2VyciAhPSBHUEdfRVJS X05PX0VSUk9SKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9F UlJfQkFEX1NJR05BVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgbG9h ZGluZyBzaWduYXR1cmUgJWQgaW50byBNUEkgc3RydWN0dXJlOiAlZCIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaSwgZ2NyeV9lcnIpOworICAgICAgICAgIGdvdG8gY2xlYW51cF9zaWdu ZXJJbmZvczsKKyAgICAgICAgfQorCisgICAgICAvKgorICAgICAgICogVXNlIG1zZy0+c2lnbmVy X2NvdW50IHRvIHRyYWNrIGZ1bGx5IHBvcHVsYXRlZCBzaWduZXJJbmZvcyBzbyB3ZSBrbm93Cisg ICAgICAgKiBob3cgbWFueSB3ZSBuZWVkIHRvIGNsZWFuIHVwLgorICAgICAgICovCisgICAgICBt c2ctPnNpZ25lcl9jb3VudCsrOworICAgIH0KKworICAvKgorICAgKiBGaW5hbCBjb25zaXN0ZW5j eSBjaGVjayBvZiBzaWduZXJJbmZvLiouZGlnZXN0QWxnb3JpdGhtIHZzIGRpZ2VzdEFsZ29yaXRo bXMKKyAgICogLiouYWxnb3JpdGhtLiBBbiBhbGdvcml0aG0gbXVzdCBiZSBwcmVzZW50IGluIGJv dGggZGlnZXN0QWxnb3JpdGhtcyBhbmQKKyAgICogc2lnbmVySW5mbyBvciBpbiBuZWl0aGVyLiBX ZSBoYXZlIGFscmVhZHkgY2hlY2tlZCBmb3IgYW4gYWxnb3JpdGhtIGluCisgICAqIHNpZ25lcklu Zm8gdGhhdCBpcyBub3QgaW4gZGlnZXN0QWxnb3JpdGhtcywgaGVyZSB3ZSBjaGVjayBmb3IgYWxn b3JpdGhtcyBpbgorICAgKiBkaWdlc3RBbGdvcml0aG1zIGJ1dCBub3QgaW4gc2lnbmVySW5mb3Mu CisgICAqLworICBpZiAoc2hhNTEyX2luX2RhID09IHRydWUgJiYgc2hhNTEyX2luX3NpID09IGZh bHNlKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRV UkUsCisgICAgICAgICAgICAgICAgICAgICAgICAiU0hBLTUxMiBzcGVjaWZpZWQgaW4gRGlnZXN0 QWxnb3JpdGhtcyBidXQgZGlkIG5vdCBhcHBlYXIgaW4gU2lnbmVySW5mb3MiKTsKKyAgICAgIGdv dG8gY2xlYW51cF9zaWduZXJJbmZvczsKKyAgICB9CisKKyAgaWYgKHNoYTI1Nl9pbl9kYSA9PSB0 cnVlICYmIHNoYTI1Nl9pbl9zaSA9PSBmYWxzZSkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vy cm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgIlNI QS0yNTYgc3BlY2lmaWVkIGluIERpZ2VzdEFsZ29yaXRobXMgYnV0IGRpZCBub3QgYXBwZWFyIGlu IFNpZ25lckluZm9zIik7CisgICAgICBnb3RvIGNsZWFudXBfc2lnbmVySW5mb3M7CisgICAgfQor CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJnNpZ25lZF9wYXJ0KTsKKworICByZXR1cm4gR1JV Ql9FUlJfTk9ORTsKKworIGNsZWFudXBfc2lnbmVySW5mb3M6CisgIGZvciAoaSA9IDA7IGkgPCBt c2ctPnNpZ25lcl9jb3VudDsgaSsrKQorICAgIF9nY3J5X21waV9yZWxlYXNlIChtc2ctPnNpZ25l cnNbaV0uc2lnX21waSk7CisKKyAgZ3J1Yl9mcmVlIChtc2ctPnNpZ25lcnMpOworCisgY2xlYW51 cF9zaWduZWRfcGFydDoKKyAgYXNuMV9kZWxldGVfc3RydWN0dXJlICgmc2lnbmVkX3BhcnQpOwor CisgIHJldHVybiBlcnI7Cit9CisKK2dydWJfZXJyX3QKK2dydWJfcGtjczdfZGF0YV9wYXJzZSAo Y29uc3Qgdm9pZCAqc2lnYnVmLCBncnViX3NpemVfdCBkYXRhX3NpemUsIGdydWJfcGtjczdfZGF0 YV90ICptc2cpCit7CisgIGdydWJfaW50MzJfdCByZXM7CisgIGFzbjFfbm9kZSBjb250ZW50X2lu Zm87CisgIGdydWJfZXJyX3QgZXJyID0gR1JVQl9FUlJfTk9ORTsKKyAgY2hhciBjb250ZW50X29p ZFtHUlVCX01BWF9PSURfTEVOXTsKKyAgZ3J1Yl91aW50OF90ICpjb250ZW50OworICBncnViX2lu dDMyX3QgY29udGVudF9zaXplOworICBncnViX2ludDMyX3QgY29udGVudF9vaWRfc2l6ZSA9IHNp emVvZiAoY29udGVudF9vaWQpOworICBncnViX2ludDMyX3Qgc2l6ZSA9IChncnViX2ludDMyX3Qp IGRhdGFfc2l6ZTsKKworICBpZiAoZGF0YV9zaXplID4gR1JVQl9VSU5UX01BWCkKKyAgICByZXR1 cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX1JBTkdFLAorICAgICAgICAgICAgICAgICAg ICAgICAiY2Fubm90IHBhcnNlIGEgUEtDUyM3IG1lc3NhZ2Ugd2hlcmUgZGF0YSBzaXplID4gR1JV Ql9VSU5UX01BWCIpOworCisgIHJlcyA9IGFzbjFfY3JlYXRlX2VsZW1lbnQgKGdydWJfZ251dGxz X3BraXhfYXNuLCAiUEtJWDEucGtjcy03LUNvbnRlbnRJbmZvIiwgJmNvbnRlbnRfaW5mbyk7Cisg IGlmIChyZXMgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VS Ul9PVVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0 ZSBBU04uMSBzdHJ1Y3R1cmUgZm9yIFBLQ1MjNyBkYXRhOiAlcyIsCisgICAgICAgICAgICAgICAg ICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlcykpOworCisgIHJlcyA9IGFzbjFfZGVyX2RlY29kaW5n MiAoJmNvbnRlbnRfaW5mbywgc2lnYnVmLCAmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBU04xX0RFQ09ERV9GTEFHX1NUUklDVF9ERVIgfCBBU04xX0RFQ09ERV9GTEFHX0FMTE9X X1BBRERJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9lcnJvcik7CisgIGlm IChyZXMgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdS VUJfRVJSX0JBRF9TSUdOQVRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgZGVj b2RpbmcgUEtDUyM3IG1lc3NhZ2UgREVSOiAlcyIsIGFzbjFfZXJyb3IpOworICAgICAgZ290byBj bGVhbnVwOworICAgIH0KKworICAvKgorICAgKiBDb250ZW50SW5mbyA6Oj0gU0VRVUVOQ0Ugewor ICAgKiAgICAgY29udGVudFR5cGUgQ29udGVudFR5cGUsCisgICAqICAgICBjb250ZW50IFswXSBF WFBMSUNJVCBBTlkgREVGSU5FRCBCWSBjb250ZW50VHlwZSB9CisgICAqCisgICAqIENvbnRlbnRU eXBlIDo6PSBPQkpFQ1QgSURFTlRJRklFUgorICAgKi8KKyAgcmVzID0gYXNuMV9yZWFkX3ZhbHVl IChjb250ZW50X2luZm8sICJjb250ZW50VHlwZSIsIGNvbnRlbnRfb2lkLCAmY29udGVudF9vaWRf c2l6ZSk7CisgIGlmIChyZXMgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9IGdy dWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsICJlcnJvciByZWFkaW5nIFBLQ1MjNyBj b250ZW50IHR5cGU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3Ig KHJlcykpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAvKiBPSUQgZm9yIFNpZ25l ZERhdGEgZGVmaW5lZCBpbiA1LjEuICovCisgIGlmIChncnViX3N0cm5jbXAgKHNpZ25lZERhdGFf b2lkLCBjb250ZW50X29pZCwgY29udGVudF9vaWRfc2l6ZSkgIT0gMCkKKyAgICB7CisgICAgICBl cnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAorICAgICAgICAgICAgICAg ICAgICAgICAgInVuZXhwZWN0ZWQgY29udGVudCB0eXBlIGluIFBLQ1MjNyBtZXNzYWdlOiBPSUQg JXMiLCBjb250ZW50X29pZCk7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIGNvbnRl bnQgPSBncnViX2FzbjFfYWxsb2NhdGVfYW5kX3JlYWQgKGNvbnRlbnRfaW5mbywgImNvbnRlbnQi LCAiUEtDUyM3IG1lc3NhZ2UgY29udGVudCIsICZjb250ZW50X3NpemUpOworICBpZiAoY29udGVu dCA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJybm87CisgICAgICBnb3RvIGNs ZWFudXA7CisgICAgfQorCisgIGVyciA9IHByb2Nlc3NfY29udGVudCAoY29udGVudCwgY29udGVu dF9zaXplLCBtc2cpOworICBncnViX2ZyZWUgKGNvbnRlbnQpOworCisgY2xlYW51cDoKKyAgYXNu MV9kZWxldGVfc3RydWN0dXJlICgmY29udGVudF9pbmZvKTsKKworICByZXR1cm4gZXJyOworfQor CisvKgorICogUmVsZWFzZSBhbGwgdGhlIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBQS0NT IzcgbWVzc2FnZS4gSWYgdGhlIGNhbGxlcgorICogZHluYW1pY2FsbHkgYWxsb2NhdGVkIHRoZSBt ZXNzYWdlLCBpdCBtdXN0IGZyZWUgaXQuCisgKi8KK3ZvaWQKK2dydWJfcGtjczdfZGF0YV9yZWxl YXNlIChncnViX3BrY3M3X2RhdGFfdCAqbXNnKQoreworICBncnViX2ludDMyX3QgaTsKKworICBm b3IgKGkgPSAwOyBpIDwgbXNnLT5zaWduZXJfY291bnQ7IGkrKykKKyAgICBfZ2NyeV9tcGlfcmVs ZWFzZSAobXNnLT5zaWduZXJzW2ldLnNpZ19tcGkpOworCisgIGdydWJfZnJlZSAobXNnLT5zaWdu ZXJzKTsKK30KLS0gCjIuNTAuMSAoQXBwbGUgR2l0LTE1NSkKCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpHcnViLWRldmVsIG1haWxpbmcgbGlzdApHcnVi LWRldmVsQGdudS5vcmcKaHR0cHM6Ly9saXN0cy5nbnUub3JnL21haWxtYW4vbGlzdGluZm8vZ3J1 Yi1kZXZlbAo=