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 A5899CA0EE6 for ; Tue, 19 Aug 2025 13:14:42 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uoMAM-0005Rh-SV; Tue, 19 Aug 2025 09:14:18 -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 1uoMAK-0005Pd-Eu for grub-devel@gnu.org; Tue, 19 Aug 2025 09:14:16 -0400 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uoMAH-0007aq-IS for grub-devel@gnu.org; Tue, 19 Aug 2025 09:14:16 -0400 Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 57J1qf24011891; Tue, 19 Aug 2025 13:14:10 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=XTTsNE/0vtmGea6Ml p1parnLia0BAUJiLf1i6Wf+2BI=; b=TFa/UwlMs5+wU+yfrDymlY1wguugf/wbw p8pfEYsdY7aiyfkLapUcPofgZ2xNnLRqUDnY+Cf4tccLFqGQQ1hFneFpbegK5Zoc MzzT4MkARcup/H0cT6D4qUNMcGZMualiFAeSz6HGeqJdSuxMM2bqENGfXUqB/ncL d+qnUI2r7RaNEL24flMwpSrWoLYWJnobfq2N7V1LpDpRh8epj7ytBLjXqzOj138h 99s68ME4hutddoZ6rdaWukyn9jE8CsFkYuI4FZ0HHM8DKXgC95OrX9sriiXXH1V+ nAtQe7OeqxdbpupweYLo0g0S/VYYsV8AbXzjVRKmhIUoH7LQuy5Og== Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 48jhny70r0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 19 Aug 2025 13:14:08 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 57JBRC1U002397; Tue, 19 Aug 2025 13:14:06 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 48k71322jm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 19 Aug 2025 13:14:05 +0000 Received: from smtpav05.fra02v.mail.ibm.com (smtpav05.fra02v.mail.ibm.com [10.20.54.104]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 57JDE2OM10355116 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 19 Aug 2025 13:14:02 GMT Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 33BA120040; Tue, 19 Aug 2025 13:14:02 +0000 (GMT) Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7FA5120043; Tue, 19 Aug 2025 13:13:58 +0000 (GMT) Received: from localhost.localdomain (unknown [9.124.211.37]) by smtpav05.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 19 Aug 2025 13:13:58 +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 v7 07/20] appended signatures: Parse PKCS#7 signedData Date: Tue, 19 Aug 2025 18:43:10 +0530 Message-Id: <20250819131323.57631-8-sudhakar@linux.ibm.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20250819131323.57631-1-sudhakar@linux.ibm.com> References: <20250819131323.57631-1-sudhakar@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=XbqJzJ55 c=1 sm=1 tr=0 ts=68a478a0 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=2OwXVqhp2XgA:10 a=mDV3o1hIAAAA:8 a=JuTF4qcAAAAA:8 a=VnNF1IyMAAAA:8 a=yPCof4ZbAAAA:8 a=85m_z7xpNodlgxy4YroA:9 a=WlT8qwTXB_Kj6um4hl3b:22 X-Proofpoint-ORIG-GUID: uQfm3F0OGSN8-RjY28k_MZyvRgolpdoH X-Proofpoint-GUID: uQfm3F0OGSN8-RjY28k_MZyvRgolpdoH X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwODE2MDAyNyBTYWx0ZWRfX2yBDtjvM1q+z JMwGeYlGnTrx9xsdutmUi0RlllSxZDy9w6m7ZB0xGEjhGKytROCjqG3tkcieCWMi6dhXvSz7J87 wA6MrFki2YsI1MMYLd2ioZHMt+2Ty0L0GmyKo12vPpFJxrjMQCd0unDaN0B33HlgtAB7Qk1QFCd BtmvMhfsKwEXzfFhebaSfEyLS90IFWOxPhz8d9uP/GTwXb01MeIkUkJ/ogYPWT5KAJ6LzUQgQ+6 G6i+msKLHvxFLpj73t0+1MjOOg84OymSUfSHLSbo5Dur1dD7xTfhssLvaKjkmgJ0riUeeAYG+Vy VV14Ub6nMQYRgBg8NSB7tud/mZ6c2E5Fn4B6cIZJwQrtsSURkYANsC95Q+zSTBRuRPYkH7hFcwx pMgKe+Hw X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-08-19_02,2025-08-14_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 adultscore=0 suspectscore=0 priorityscore=1501 bulkscore=0 clxscore=1015 malwarescore=0 spamscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2508160027 Received-SPF: pass client-ip=148.163.156.1; envelope-from=sudhakar@linux.ibm.com; helo=mx0a-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.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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 VGhpcyBjb2RlIGFsbG93cyB1cyB0byBwYXJzZToKCiAtIFBLQ1MjNyBzaWduZWREYXRhIG1lc3Nh Z2VzLiBPbmx5IGEgc2luZ2xlIHNpZ25lckluZm8gaXMgc3VwcG9ydGVkLAogICB3aGljaCBpcyBh bGwgdGhhdCB0aGUgTGludXggc2lnbi1maWxlIHV0aWxpdHkgc3VwcG9ydHMgY3JlYXRpbmcKICAg b3V0LW9mLXRoZS1ib3guIE9ubHkgUlNBLCBTSEEtMjU2IGFuZCBTSEEtNTEyIGFyZSBzdXBwb3J0 ZWQuCiAgIEFueSBjZXJ0aWZpY2F0ZSBlbWJlZGRlZCBpbiB0aGUgUEtDUyM3IG1lc3NhZ2Ugd2ls bCBiZSBpZ25vcmVkLgoKU2lnbmVkLW9mZi1ieTogRGFuaWVsIEF4dGVucyA8ZGphQGF4dGVucy5u ZXQ+ClNpZ25lZC1vZmYtYnk6IFN1ZGhha2FyIEt1cHB1c2FteSA8c3VkaGFrYXJAbGludXguaWJt LmNvbT4KUmV2aWV3ZWQtYnk6IFN0ZWZhbiBCZXJnZXIgPHN0ZWZhbmJAbGludXguaWJtLmNvbT4K UmV2aWV3ZWQtYnk6IEF2bmlzaCBDaG91aGFuIDxhdm5pc2hAbGludXguaWJtLmNvbT4KUmV2aWV3 ZWQtYnk6IERhbmllbCBLaXBlciA8ZGFuaWVsLmtpcGVyQG9yYWNsZS5jb20+Ci0tLQogZ3J1Yi1j b3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmggfCAgMzYgKysKIGdydWItY29y ZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9wa2NzNy5jICAgICAgIHwgNDU0ICsrKysrKysrKysrKysr KysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNDkwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw MDY0NCBncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvcGtjczcuYwoKZGlmZiAtLWdpdCBh L2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5oIGIvZ3J1Yi1jb3Jl L2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmgKaW5kZXggOTFjYzA0MGJiLi5jYWM3 ZmIwMmMgMTAwNjQ0Ci0tLSBhL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRl ZHNpZy5oCisrKyBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5o CkBAIC0xNywxMSArMTcsNDcgQEAKICAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKi8KIAorI2luY2x1ZGUgPGdydWIvY3J5 cHRvLmg+CiAjaW5jbHVkZSA8bGlidGFzbjEuaD4KIAogZXh0ZXJuIGFzbjFfbm9kZSBncnViX2du dXRsc19nbnV0bHNfYXNuOwogZXh0ZXJuIGFzbjFfbm9kZSBncnViX2dudXRsc19wa2l4X2FzbjsK IAorI2RlZmluZSBNQVhfT0lEX0xFTiAzMgorCisvKiBBIFBLQ1MjNyBzaWduZWREYXRhIHNpZ25l ckluZm8uICovCitzdHJ1Y3QgcGtjczdfc2lnbmVySW5mbworeworICBjb25zdCBnY3J5X21kX3Nw ZWNfdCAqaGFzaDsKKyAgZ2NyeV9tcGlfdCBzaWdfbXBpOworfTsKKworLyoKKyAqIEEgUEtDUyM3 IHNpZ25lZERhdGEgbWVzc2FnZS4KKyAqIFdlIG1ha2Ugbm8gYXR0ZW1wdCB0byBtYXRjaCBpbnRl bGxpZ2VudGx5LCBzbyB3ZSBkb24ndCBzYXZlIGFueSBpbmZvIGFib3V0CisgKiB0aGUgc2lnbmVy LgorICovCitzdHJ1Y3QgcGtjczdfc2lnbmVkRGF0YQoreworICBpbnQgc2lnbmVySW5mb19jb3Vu dDsKKyAgc3RydWN0IHBrY3M3X3NpZ25lckluZm8gKnNpZ25lckluZm9zOworfTsKKworLyoKKyAq IFBhcnNlIGEgUEtDUyM3IG1lc3NhZ2UsIHdoaWNoIG11c3QgYmUgYSBzaWduZWREYXRhIG1lc3Nh Z2UuCisgKiBUaGUgbWVzc2FnZSBtdXN0IGJlIGluICdzaWdidWYnIGFuZCBvZiBzaXplICdkYXRh X3NpemUnLiBUaGUgcmVzdWx0IGlzCisgKiBwbGFjZWQgaW4gJ21zZycsIHdoaWNoIG11c3QgYWxy ZWFkeSBiZSBhbGxvY2F0ZWQuCisgKi8KK2V4dGVybiBncnViX2Vycl90CitwYXJzZV9wa2NzN19z aWduZWREYXRhIChjb25zdCB2b2lkICpzaWdidWYsIGdydWJfc2l6ZV90IGRhdGFfc2l6ZSwgc3Ry dWN0IHBrY3M3X3NpZ25lZERhdGEgKm1zZyk7CisKKy8qCisgKiBSZWxlYXNlIGFsbCB0aGUgc3Rv cmFnZSBhc3NvY2lhdGVkIHdpdGggdGhlIFBLQ1MjNyBtZXNzYWdlLgorICogSWYgdGhlIGNhbGxl ciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdGhlIG1lc3NhZ2UsIGl0IG11c3QgZnJlZSBpdC4KKyAq LworZXh0ZXJuIHZvaWQKK3BrY3M3X3NpZ25lZERhdGFfcmVsZWFzZSAoc3RydWN0IHBrY3M3X3Np Z25lZERhdGEgKm1zZyk7CisKIC8qIERvIGxpYnRhc24xIGluaXQuICovCiBleHRlcm4gaW50CiBh c24xX2luaXQgKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVk c2lnL3BrY3M3LmMgYi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvcGtjczcuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjU3ZGMyYTk4MQotLS0gL2Rldi9udWxs CisrKyBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9wa2NzNy5jCkBAIC0wLDAgKzEs NDU0IEBACisvKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBD b3B5cmlnaHQgKEMpIDIwMjAsIDIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisg KiAgQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIyLCAyMDI1IElCTSBDb3Jwb3JhdGlvbgorICoKKyAq ICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlCisgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlICJhcHBlbmRlZHNpZy5oIgorI2luY2x1ZGUg PGdydWIvbWlzYy5oPgorI2luY2x1ZGUgPGdydWIvY3J5cHRvLmg+CisjaW5jbHVkZSA8Z3J1Yi9n Y3J5cHQvZ2NyeXB0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK3N0YXRpYyBjaGFyIGFz bjFfZXJyb3JbQVNOMV9NQVhfRVJST1JfREVTQ1JJUFRJT05fU0laRV07CisKKy8qIFJGQyA1NjUy IHMgNS4xLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKnNpZ25lZERhdGFfb2lkID0gIjEuMi44NDAu MTEzNTQ5LjEuNy4yIjsKKworLyogUkZDIDQwNTUgcyAyLjEuICovCitzdGF0aWMgY29uc3QgY2hh ciAqc2hhMjU2X29pZCA9ICIyLjE2Ljg0MC4xLjEwMS4zLjQuMi4xIjsKK3N0YXRpYyBjb25zdCBj aGFyICpzaGE1MTJfb2lkID0gIjIuMTYuODQwLjEuMTAxLjMuNC4yLjMiOworCitzdGF0aWMgZ3J1 Yl9lcnJfdAorcHJvY2Vzc19jb250ZW50IChncnViX3VpbnQ4X3QgKmNvbnRlbnQsIGludCBzaXpl LCBzdHJ1Y3QgcGtjczdfc2lnbmVkRGF0YSAqbXNnKQoreworICBpbnQgcmVzOworICBhc24xX25v ZGUgc2lnbmVkX3BhcnQ7CisgIGdydWJfZXJyX3QgZXJyID0gR1JVQl9FUlJfTk9ORTsKKyAgY2hh ciBhbGdvX29pZFtNQVhfT0lEX0xFTl07CisgIGludCBhbGdvX29pZF9zaXplOworICBpbnQgYWxn b19jb3VudDsKKyAgaW50IHNpZ25lcl9jb3VudDsKKyAgaW50IGk7CisgIGNoYXIgdmVyc2lvbjsK KyAgaW50IHZlcnNpb25fc2l6ZSA9IHNpemVvZiAodmVyc2lvbik7CisgIGdydWJfdWludDhfdCAq cmVzdWx0X2J1ZjsKKyAgaW50IHJlc3VsdF9zaXplID0gMDsKKyAgaW50IGNybHNfc2l6ZSA9IDA7 CisgIGdjcnlfZXJyb3JfdCBnY3J5X2VycjsKKyAgYm9vbCBzaGEyNTZfaW5fZGEsIHNoYTI1Nl9p bl9zaSwgc2hhNTEyX2luX2RhLCBzaGE1MTJfaW5fc2k7CisgIGNoYXIgKmRhX3BhdGg7CisgIGNo YXIgKnNpX3NpZ19wYXRoOworICBjaGFyICpzaV9kYV9wYXRoOworCisgIHJlcyA9IGFzbjFfY3Jl YXRlX2VsZW1lbnQgKGdydWJfZ251dGxzX3BraXhfYXNuLCAiUEtJWDEucGtjcy03LVNpZ25lZERh dGEiLCAmc2lnbmVkX3BhcnQpOworICBpZiAocmVzICE9IEFTTjFfU1VDQ0VTUykKKyAgICByZXR1 cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwKKyAgICAgICAgICAgICAgICAg ICAgICAgImNvdWxkIG5vdCBjcmVhdGUgQVNOLjEgc3RydWN0dXJlIGZvciBQS0NTIzcgc2lnbmVk IHBhcnQiKTsKKworICByZXMgPSBhc24xX2Rlcl9kZWNvZGluZzIgKCZzaWduZWRfcGFydCwgY29u dGVudCwgJnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOMV9ERUNPREVfRkxB R19TVFJJQ1RfREVSLCBhc24xX2Vycm9yKTsKKyAgaWYgKHJlcyAhPSBBU04xX1NVQ0NFU1MpCisg ICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICJlcnJvciByZWFkaW5nIFBLQ1MjNyBzaWduZWQgZGF0YTog JXMiLCBhc24xX2Vycm9yKTsKKyAgICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKKyAgICB9 CisKKyAgLyoKKyAgICogU2lnbmVkRGF0YSA6Oj0gU0VRVUVOQ0UgeworICAgKiAgICAgdmVyc2lv biBDTVNWZXJzaW9uLAorICAgKiAgICAgZGlnZXN0QWxnb3JpdGhtcyBEaWdlc3RBbGdvcml0aG1J ZGVudGlmaWVycywKKyAgICogICAgIGVuY2FwQ29udGVudEluZm8gRW5jYXBzdWxhdGVkQ29udGVu dEluZm8sCisgICAqICAgICBjZXJ0aWZpY2F0ZXMgWzBdIElNUExJQ0lUIENlcnRpZmljYXRlU2V0 IE9QVElPTkFMLAorICAgKiAgICAgY3JscyBbMV0gSU1QTElDSVQgUmV2b2NhdGlvbkluZm9DaG9p Y2VzIE9QVElPTkFMLAorICAgKiAgICAgc2lnbmVySW5mb3MgU2lnbmVySW5mb3MgfQorICAgKi8K KworICByZXMgPSBhc24xX3JlYWRfdmFsdWUgKHNpZ25lZF9wYXJ0LCAidmVyc2lvbiIsICZ2ZXJz aW9uLCAmdmVyc2lvbl9zaXplKTsKKyAgaWYgKHJlcyAhPSBBU04xX1NVQ0NFU1MpCisgICAgewor ICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwgImVycm9yIHJl YWRpbmcgc2lnbmVkRGF0YSB2ZXJzaW9uOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBh c24xX3N0cmVycm9yIChyZXMpKTsKKyAgICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKKyAg ICB9CisKKyAgLyogU2lnbmF0dXJlIHZlcnNpb24gbXVzdCBiZSAxIGJlY2F1c2UgYXBwZW5kZWQg c2lnbmF0dXJlIG9ubHkgc3VwcG9ydCB2MS4gKi8KKyAgaWYgKHZlcnNpb24gIT0gMSkKKyAgICB7 CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAorICAgICAg ICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgc2lnbmF0dXJlIHZlcnNpb24gdiVkLCBvbmx5 IHYxIHN1cHBvcnRlZCIsIHZlcnNpb24pOworICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0 OworICAgIH0KKworICAvKgorICAgKiBkaWdlc3RBbGdvcml0aG1zIERpZ2VzdEFsZ29yaXRobUlk ZW50aWZpZXJzCisgICAqCisgICAqIERpZ2VzdEFsZ29yaXRobUlkZW50aWZpZXJzIDo6PSBTRVQg T0YgRGlnZXN0QWxnb3JpdGhtSWRlbnRpZmllcgorICAgKiBEaWdlc3RBbGdvcml0aG1JZGVudGlm ZXIgaXMgYW4gWC41MDkgQWxnb3JpdGhtSWRlbnRpZmllciAoMTAuMS4xKQorICAgKgorICAgKiBS RkMgNDA1NSBzIDIuMToKKyAgICogc2hhMjU2SWRlbnRpZmllciAgQWxnb3JpdGhtSWRlbnRpZmll ciAgOjo9ICB7IGlkLXNoYTI1NiwgTlVMTCB9CisgICAqIHNoYTUxMklkZW50aWZpZXIgIEFsZ29y aXRobUlkZW50aWZpZXIgIDo6PSAgeyBpZC1zaGE1MTIsIE5VTEwgfQorICAgKgorICAgKiBXZSBv bmx5IHN1cHBvcnQgMSBlbGVtZW50IGluIHRoZSBzZXQsIGFuZCB3ZSBkbyBub3QgY2hlY2sgcGFy YW1ldGVycyBhdG0uCisgICAqLworICByZXMgPSBhc24xX251bWJlcl9vZl9lbGVtZW50cyAoc2ln bmVkX3BhcnQsICJkaWdlc3RBbGdvcml0aG1zIiwgJmFsZ29fY291bnQpOworICBpZiAocmVzICE9 IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9C QURfU0lHTkFUVVJFLCAiZXJyb3IgY291bnRpbmcgbnVtYmVyIG9mIGRpZ2VzdCBhbGdvcml0aG1z OiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXMpKTsKKyAg ICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKKyAgICB9CisKKyAgaWYgKGFsZ29fY291bnQg PD0gMCkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFU VVJFLCAiYSBtaW5pbXVtIG9mIDEgZGlnZXN0IGFsZ29yaXRobSBpcyByZXF1aXJlZCIpOworICAg ICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0OworICAgIH0KKworICBpZiAoYWxnb19jb3VudCA+ IDIpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9UX0lNUExFTUVO VEVEX1lFVCwgImEgbWF4aW11bSBvZiAyIGRpZ2VzdCBhbGdvcml0aG1zIGlzIHN1cHBvcnRlZCIp OworICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0OworICAgIH0KKworICBzaGEyNTZfaW5f ZGEgPSBmYWxzZTsKKyAgc2hhNTEyX2luX2RhID0gZmFsc2U7CisKKyAgZm9yIChpID0gMDsgaSA8 IGFsZ29fY291bnQ7IGkrKykKKyAgICB7CisgICAgICBkYV9wYXRoID0gZ3J1Yl94YXNwcmludGYg KCJkaWdlc3RBbGdvcml0aG1zLj8lZC5hbGdvcml0aG0iLCBpICsgMSk7CisgICAgICBpZiAoZGFf cGF0aCA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JV Ql9FUlJfT1VUX09GX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQg bm90IGFsbG9jYXRlIHBhdGggZm9yIGRpZ2VzdCBhbGdvcml0aG0gcGFyc2luZyBwYXRoIik7Cisg ICAgICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0OworICAgICAgICB9CisKKyAgICAgIGFs Z29fb2lkX3NpemUgPSBzaXplb2YgKGFsZ29fb2lkKTsKKyAgICAgIHJlcyA9IGFzbjFfcmVhZF92 YWx1ZSAoc2lnbmVkX3BhcnQsIGRhX3BhdGgsIGFsZ29fb2lkLCAmYWxnb19vaWRfc2l6ZSk7Cisg ICAgICBpZiAocmVzICE9IEFTTjFfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgIGVyciA9 IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsICJlcnJvciByZWFkaW5nIGRpZ2Vz dCBhbGdvcml0aG06ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVy cm9yIChyZXMpKTsKKyAgICAgICAgICBncnViX2ZyZWUgKGRhX3BhdGgpOworICAgICAgICAgIGdv dG8gY2xlYW51cF9zaWduZWRfcGFydDsKKyAgICAgICAgfQorCisgICAgICBpZiAoZ3J1Yl9zdHJu Y21wIChzaGE1MTJfb2lkLCBhbGdvX29pZCwgYWxnb19vaWRfc2l6ZSkgPT0gMCkKKyAgICAgICAg eworICAgICAgICAgIGlmIChzaGE1MTJfaW5fZGEgPT0gZmFsc2UpCisgICAgICAgICAgICBzaGE1 MTJfaW5fZGEgPSB0cnVlOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlNIQS01MTIgc3BlY2lmaWVkIHR3aWNlIGluIGRpZ2Vz dCBhbGdvcml0aG0gbGlzdCIpOworICAgICAgICAgICAgICBncnViX2ZyZWUgKGRhX3BhdGgpOwor ICAgICAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGdydWJfc3RybmNtcCAoc2hhMjU2X29pZCwgYWxnb19v aWQsIGFsZ29fb2lkX3NpemUpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoc2hhMjU2 X2luX2RhID09IGZhbHNlKQorICAgICAgICAgICAgc2hhMjU2X2luX2RhID0gdHJ1ZTsKKyAgICAg ICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9IGdydWJfZXJyb3Ig KEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJTSEEtMjU2IHNwZWNpZmllZCB0d2ljZSBpbiBkaWdlc3QgYWxnb3JpdGhtIGxpc3QiKTsKKyAg ICAgICAgICAgICAgZ3J1Yl9mcmVlIChkYV9wYXRoKTsKKyAgICAgICAgICAgICAgZ290byBjbGVh bnVwX3NpZ25lZF9wYXJ0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisg ICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9OT1RfSU1QTEVN RU5URURfWUVULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbmx5IFNIQS0yNTYgYW5k IFNIQS01MTIgaGFzaGVzIGFyZSBzdXBwb3J0ZWQsIGZvdW5kIE9JRCAlcyIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYWxnb19vaWQpOworICAgICAgICAgIGdydWJfZnJlZSAoZGFfcGF0 aCk7CisgICAgICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0OworICAgICAgICB9CisKKyAg ICAgIGdydWJfZnJlZSAoZGFfcGF0aCk7CisgICAgfQorCisgIC8qIEF0IHRoaXMgcG9pbnQsIGF0 IGxlYXN0IG9uZSBvZiBzaGF7MjU2LDUxMn1faW5fZGEgbXVzdCBiZSB0cnVlLiAqLworCisgIC8q CisgICAqIFdlIGlnbm9yZSB0aGUgY2VydGlmaWNhdGVzLCBidXQgd2UgZG9uJ3QgcGVybWl0IENS THMuCisgICAqIEEgQ1JMIGVudHJ5IG1pZ2h0IGJlIHJldm9raW5nIHRoZSBjZXJ0aWZpY2F0ZSB3 ZSdyZSB1c2luZywgYW5kIHdlIGhhdmUKKyAgICogbm8gd2F5IG9mIGRlYWxpbmcgd2l0aCB0aGF0 IGF0IHRoZSBtb21lbnQuCisgICAqLworICByZXMgPSBhc24xX3JlYWRfdmFsdWUgKHNpZ25lZF9w YXJ0LCAiY3JscyIsIE5VTEwsICZjcmxzX3NpemUpOworICBpZiAocmVzICE9IEFTTjFfRUxFTUVO VF9OT1RfRk9VTkQpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9U X0lNUExFTUVOVEVEX1lFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJQS0NTIzcgbWVzc2Fn ZXMgd2l0aCBlbWJlZGRlZCBDUkxzIGFyZSBub3Qgc3VwcG9ydGVkIik7CisgICAgICBnb3RvIGNs ZWFudXBfc2lnbmVkX3BhcnQ7CisgICAgfQorCisgIC8qIFJlYWQgdGhlIHNpZ25hdHVyZXMgKi8K KyAgcmVzID0gYXNuMV9udW1iZXJfb2ZfZWxlbWVudHMgKHNpZ25lZF9wYXJ0LCAic2lnbmVySW5m b3MiLCAmc2lnbmVyX2NvdW50KTsKKyAgaWYgKHJlcyAhPSBBU04xX1NVQ0NFU1MpCisgICAgewor ICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwgImVycm9yIGNv dW50aW5nIG51bWJlciBvZiBzaWduZXJzOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBh c24xX3N0cmVycm9yIChyZXMpKTsKKyAgICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKKyAg ICB9CisKKyAgaWYgKHNpZ25lcl9jb3VudCA8PSAwKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJf ZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsICJhIG1pbmltdW0gb2YgMSBzaWduZXIgaXMg cmVxdWlyZWQiKTsKKyAgICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKKyAgICB9CisKKyAg bXNnLT5zaWduZXJJbmZvcyA9IGdydWJfY2FsbG9jIChzaWduZXJfY291bnQsIHNpemVvZiAoc3Ry dWN0IHBrY3M3X3NpZ25lckluZm8pKTsKKyAgaWYgKG1zZy0+c2lnbmVySW5mb3MgPT0gTlVMTCkK KyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAor ICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBhbGxvY2F0ZSBzcGFjZSBmb3IgJWQg c2lnbmVycyIsIHNpZ25lcl9jb3VudCk7CisgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7 CisgICAgfQorCisgIG1zZy0+c2lnbmVySW5mb19jb3VudCA9IDA7CisgIGZvciAoaSA9IDA7IGkg PCBzaWduZXJfY291bnQ7IGkrKykKKyAgICB7CisgICAgICBzaV9kYV9wYXRoID0gZ3J1Yl94YXNw cmludGYgKCJzaWduZXJJbmZvcy4/JWQuZGlnZXN0QWxnb3JpdGhtLmFsZ29yaXRobSIsIGkgKyAx KTsKKyAgICAgIGlmIChzaV9kYV9wYXRoID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBl cnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJjb3VsZCBub3QgYWxsb2NhdGUgcGF0aCBmb3Igc2lnbmVyICVkJ3MgZGln ZXN0IGFsZ29yaXRobSBwYXJzaW5nIHBhdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IGkpOworICAgICAgICAgIGdvdG8gY2xlYW51cF9zaWduZXJJbmZvczsKKyAgICAgICAgfQorCisg ICAgICBhbGdvX29pZF9zaXplID0gc2l6ZW9mIChhbGdvX29pZCk7CisgICAgICByZXMgPSBhc24x X3JlYWRfdmFsdWUgKHNpZ25lZF9wYXJ0LCBzaV9kYV9wYXRoLCBhbGdvX29pZCwgJmFsZ29fb2lk X3NpemUpOworICAgICAgaWYgKHJlcyAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAg ICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJlcnJvciByZWFkaW5nIHNpZ25lciAlZCdzIGRpZ2VzdCBhbGdv cml0aG06ICVzIiwgaSwgYXNuMV9zdHJlcnJvciAocmVzKSk7CisgICAgICAgICAgZ3J1Yl9mcmVl IChzaV9kYV9wYXRoKTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVySW5mb3M7CisgICAg ICAgIH0KKworICAgICAgZ3J1Yl9mcmVlIChzaV9kYV9wYXRoKTsKKworICAgICAgaWYgKGdydWJf c3RybmNtcCAoc2hhNTEyX29pZCwgYWxnb19vaWQsIGFsZ29fb2lkX3NpemUpID09IDApCisgICAg ICAgIHsKKyAgICAgICAgICBpZiAoc2hhNTEyX2luX2RhID09IGZhbHNlKQorICAgICAgICAgICAg eworICAgICAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJF LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2lnbmVyICVkIGNsYWltcyBhIFNI QS01MTIgc2lnbmF0dXJlIHdoaWNoIHdhcyBub3QgIgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAic3BlY2lmaWVkIGluIHRoZSBvdXRlciBEaWdlc3RBbGdvcml0aG1zIiwgaSk7Cisg ICAgICAgICAgICAgIGdvdG8gY2xlYW51cF9zaWduZXJJbmZvczsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHNoYTUxMl9pbl9zaSA9 IHRydWU7CisgICAgICAgICAgICAgIG1zZy0+c2lnbmVySW5mb3NbaV0uaGFzaCA9IGdydWJfY3J5 cHRvX2xvb2t1cF9tZF9ieV9uYW1lICgic2hhNTEyIik7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICAgIGVsc2UgaWYgKGdydWJfc3RybmNtcCAoc2hhMjU2X29pZCwgYWxnb19vaWQsIGFs Z29fb2lkX3NpemUpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoc2hhMjU2X2luX2Rh ID09IGZhbHNlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnIgPSBncnViX2Vycm9y IChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAic2lnbmVyICVkIGNsYWltcyBhIFNIQS0yNTYgc2lnbmF0dXJlIHdoaWNoIHdhcyBub3QgIgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BlY2lmaWVkIGluIHRoZSBvdXRlciBE aWdlc3RBbGdvcml0aG1zIiwgaSk7CisgICAgICAgICAgICAgIGdvdG8gY2xlYW51cF9zaWduZXJJ bmZvczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgIHNoYTI1Nl9pbl9zaSA9IHRydWU7CisgICAgICAgICAgICAgIG1zZy0+c2lnbmVy SW5mb3NbaV0uaGFzaCA9IGdydWJfY3J5cHRvX2xvb2t1cF9tZF9ieV9uYW1lICgic2hhMjU2Iik7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg ICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX05PVF9JTVBMRU1FTlRFRF9ZRVQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIm9ubHkgU0hBLTI1NiBhbmQgU0hBLTUxMiBoYXNoZXMg YXJlIHN1cHBvcnRlZCwgZm91bmQgT0lEICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhbGdvX29pZCk7CisgICAgICAgICAgZ290byBjbGVhbnVwX3NpZ25lckluZm9zOworICAgICAg ICB9CisKKyAgICAgIGlmIChtc2ctPnNpZ25lckluZm9zW2ldLmhhc2ggPT0gTlVMTCkKKyAgICAg ICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhhc2ggYWxnb3JpdGhtIGZvciBzaWduZXIg JWQgKE9JRCAlcykgbm90IGxvYWRlZCIsIGksIGFsZ29fb2lkKTsKKyAgICAgICAgICBnb3RvIGNs ZWFudXBfc2lnbmVySW5mb3M7CisgICAgICAgIH0KKworICAgICAgc2lfc2lnX3BhdGggPSBncnVi X3hhc3ByaW50ZiAoInNpZ25lckluZm9zLj8lZC5zaWduYXR1cmUiLCBpICsgMSk7CisgICAgICBp ZiAoc2lfc2lnX3BhdGggPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJf ZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImNvdWxkIG5vdCBhbGxvY2F0ZSBwYXRoIGZvciBzaWduZXIgJWQncyBzaWduYXR1cmUgcGFy c2luZyBwYXRoIiwgaSk7CisgICAgICAgICAgZ290byBjbGVhbnVwX3NpZ25lckluZm9zOworICAg ICAgICB9CisKKyAgICAgIHJlc3VsdF9idWYgPSBncnViX2FzbjFfYWxsb2NhdGVfYW5kX3JlYWQg KHNpZ25lZF9wYXJ0LCBzaV9zaWdfcGF0aCwgInNpZ25hdHVyZSBkYXRhIiwgJnJlc3VsdF9zaXpl KTsKKyAgICAgIGdydWJfZnJlZSAoc2lfc2lnX3BhdGgpOworCisgICAgICBpZiAocmVzdWx0X2J1 ZiA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJubzsKKyAgICAg ICAgICBnb3RvIGNsZWFudXBfc2lnbmVySW5mb3M7CisgICAgICAgIH0KKworICAgICAgZ2NyeV9l cnIgPSBfZ2NyeV9tcGlfc2NhbiAoJihtc2ctPnNpZ25lckluZm9zW2ldLnNpZ19tcGkpLCBHQ1JZ TVBJX0ZNVF9VU0csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfYnVm LCByZXN1bHRfc2l6ZSwgTlVMTCk7CisgICAgICBncnViX2ZyZWUgKHJlc3VsdF9idWYpOworCisg ICAgICBpZiAoZ2NyeV9lcnIgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICAgICAgeworICAgICAg ICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgImVycm9yIGxvYWRpbmcgc2lnbmF0dXJlICVkIGludG8gTVBJIHN0 cnVjdHVyZTogJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIGdjcnlfZXJyKTsK KyAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVySW5mb3M7CisgICAgICAgIH0KKworICAgICAg LyoKKyAgICAgICAqIFVzZSBtc2ctPnNpZ25lckluZm9fY291bnQgdG8gdHJhY2sgZnVsbHkgcG9w dWxhdGVkIHNpZ25lckluZm9zIHNvIHdlCisgICAgICAgKiBrbm93IGhvdyBtYW55IHdlIG5lZWQg dG8gY2xlYW4gdXAuCisgICAgICAgKi8KKyAgICAgIG1zZy0+c2lnbmVySW5mb19jb3VudCsrOwor ICAgIH0KKworICAvKgorICAgKiBGaW5hbCBjb25zaXN0ZW5jeSBjaGVjayBvZiBzaWduZXJJbmZv LiouZGlnZXN0QWxnb3JpdGhtIHZzCisgICAqIGRpZ2VzdEFsZ29yaXRobXMuKi5hbGdvcml0aG0u IEFuIGFsZ29yaXRobSBtdXN0IGJlIHByZXNlbnQgaW4gYm90aAorICAgKiBkaWdlc3RBbGdvcml0 aG1zIGFuZCBzaWduZXJJbmZvIG9yIGluIG5laXRoZXIuIFdlIGhhdmUgYWxyZWFkeSBjaGVja2Vk CisgICAqIGZvciBhbiBhbGdvcml0aG0gaW4gc2lnbmVySW5mbyB0aGF0IGlzIG5vdCBpbiBkaWdl c3RBbGdvcml0aG1zLCBoZXJlIHdlCisgICAqIGNoZWNrIGZvciBhbGdvcml0aG1zIGluIGRpZ2Vz dEFsZ29yaXRobXMgYnV0IG5vdCBpbiBzaWduZXJJbmZvcy4KKyAgICovCisgIGlmIChzaGE1MTJf aW5fZGEgPT0gdHJ1ZSAmJiBzaGE1MTJfaW5fc2kgPT0gZmFsc2UpCisgICAgeworICAgICAgZXJy ID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICJTSEEtNTEyIHNwZWNpZmllZCBpbiBEaWdlc3RBbGdvcml0aG1zIGJ1dCBkaWQgbm90 IGFwcGVhciBpbiBTaWduZXJJbmZvcyIpOworICAgICAgZ290byBjbGVhbnVwX3NpZ25lckluZm9z OworICAgIH0KKworICBpZiAoc2hhMjU2X2luX2RhID09IHRydWUgJiYgc2hhMjU2X2luX3NpID09 IGZhbHNlKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdO QVRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAiU0hBLTI1NiBzcGVjaWZpZWQgaW4gRGln ZXN0QWxnb3JpdGhtcyBidXQgZGlkIG5vdCBhcHBlYXIgaW4gU2lnbmVySW5mb3MiKTsKKyAgICAg IGdvdG8gY2xlYW51cF9zaWduZXJJbmZvczsKKyAgICB9CisKKyAgYXNuMV9kZWxldGVfc3RydWN0 dXJlICgmc2lnbmVkX3BhcnQpOworCisgIHJldHVybiBHUlVCX0VSUl9OT05FOworCisgY2xlYW51 cF9zaWduZXJJbmZvczoKKyAgZm9yIChpID0gMDsgaSA8IG1zZy0+c2lnbmVySW5mb19jb3VudDsg aSsrKQorICAgIF9nY3J5X21waV9yZWxlYXNlIChtc2ctPnNpZ25lckluZm9zW2ldLnNpZ19tcGkp OworCisgIGdydWJfZnJlZSAobXNnLT5zaWduZXJJbmZvcyk7CisKKyBjbGVhbnVwX3NpZ25lZF9w YXJ0OgorICBhc24xX2RlbGV0ZV9zdHJ1Y3R1cmUgKCZzaWduZWRfcGFydCk7CisKKyAgcmV0dXJu IGVycjsKK30KKworZ3J1Yl9lcnJfdAorcGFyc2VfcGtjczdfc2lnbmVkRGF0YSAoY29uc3Qgdm9p ZCAqc2lnYnVmLCBncnViX3NpemVfdCBkYXRhX3NpemUsIHN0cnVjdCBwa2NzN19zaWduZWREYXRh ICptc2cpCit7CisgIGludCByZXM7CisgIGFzbjFfbm9kZSBjb250ZW50X2luZm87CisgIGdydWJf ZXJyX3QgZXJyID0gR1JVQl9FUlJfTk9ORTsKKyAgY2hhciBjb250ZW50X29pZFtNQVhfT0lEX0xF Tl07CisgIGdydWJfdWludDhfdCAqY29udGVudDsKKyAgaW50IGNvbnRlbnRfc2l6ZTsKKyAgaW50 IGNvbnRlbnRfb2lkX3NpemUgPSBzaXplb2YgKGNvbnRlbnRfb2lkKTsKKyAgaW50IHNpemU7CisK KyAgaWYgKGRhdGFfc2l6ZSA+IEdSVUJfSU5UX01BWCkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfT1VUX09GX1JBTkdFLAorICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IHBh cnNlIGEgUEtDUyM3IG1lc3NhZ2Ugd2hlcmUgZGF0YSBzaXplID4gR1JVQl9JTlRfTUFYIik7CisK KyAgc2l6ZSA9IChpbnQpIGRhdGFfc2l6ZTsKKworICByZXMgPSBhc24xX2NyZWF0ZV9lbGVtZW50 IChncnViX2dudXRsc19wa2l4X2FzbiwgIlBLSVgxLnBrY3MtNy1Db250ZW50SW5mbyIsICZjb250 ZW50X2luZm8pOworICBpZiAocmVzICE9IEFTTjFfU1VDQ0VTUykKKyAgICByZXR1cm4gZ3J1Yl9l cnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgImNv dWxkIG5vdCBjcmVhdGUgQVNOLjEgc3RydWN0dXJlIGZvciBQS0NTIzcgZGF0YTogJXMiLAorICAg ICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXMpKTsKKworICByZXMgPSBhc24x X2Rlcl9kZWNvZGluZzIgKCZjb250ZW50X2luZm8sIHNpZ2J1ZiwgJnNpemUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQVNOMV9ERUNPREVfRkxBR19TVFJJQ1RfREVSIHwgQVNOMV9ERUNP REVfRkxBR19BTExPV19QQURESU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFf ZXJyb3IpOworICBpZiAocmVzICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAgICBlcnIgPSBn cnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAorICAgICAgICAgICAgICAgICAgICAg ICAgImVycm9yIGRlY29kaW5nIFBLQ1MjNyBtZXNzYWdlIERFUjogJXMiLCBhc24xX2Vycm9yKTsK KyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgLyoKKyAgICogQ29udGVudEluZm8gOjo9 IFNFUVVFTkNFIHsKKyAgICogICAgIGNvbnRlbnRUeXBlIENvbnRlbnRUeXBlLAorICAgKiAgICAg Y29udGVudCBbMF0gRVhQTElDSVQgQU5ZIERFRklORUQgQlkgY29udGVudFR5cGUgfQorICAgKgor ICAgKiBDb250ZW50VHlwZSA6Oj0gT0JKRUNUIElERU5USUZJRVIKKyAgICovCisgIHJlcyA9IGFz bjFfcmVhZF92YWx1ZSAoY29udGVudF9pbmZvLCAiY29udGVudFR5cGUiLCBjb250ZW50X29pZCwg JmNvbnRlbnRfb2lkX3NpemUpOworICBpZiAocmVzICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7Cisg ICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLCAiZXJyb3IgcmVh ZGluZyBQS0NTIzcgY29udGVudCB0eXBlOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBh c24xX3N0cmVycm9yIChyZXMpKTsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgLyog T0lEIGZvciBTaWduZWREYXRhIGRlZmluZWQgaW4gNS4xLiAqLworICBpZiAoZ3J1Yl9zdHJuY21w IChzaWduZWREYXRhX29pZCwgY29udGVudF9vaWQsIGNvbnRlbnRfb2lkX3NpemUpICE9IDApCisg ICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIGNvbnRlbnQgdHlwZSBpbiBQS0NTIzcg bWVzc2FnZTogT0lEICVzIiwgY29udGVudF9vaWQpOworICAgICAgZ290byBjbGVhbnVwOworICAg IH0KKworICBjb250ZW50ID0gZ3J1Yl9hc24xX2FsbG9jYXRlX2FuZF9yZWFkIChjb250ZW50X2lu Zm8sICJjb250ZW50IiwgIlBLQ1MjNyBtZXNzYWdlIGNvbnRlbnQiLCAmY29udGVudF9zaXplKTsK KyAgaWYgKGNvbnRlbnQgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm5vOwor ICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBlcnIgPSBwcm9jZXNzX2NvbnRlbnQgKGNv bnRlbnQsIGNvbnRlbnRfc2l6ZSwgbXNnKTsKKyAgZ3J1Yl9mcmVlIChjb250ZW50KTsKKworIGNs ZWFudXA6CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJmNvbnRlbnRfaW5mbyk7CisKKyAgcmV0 dXJuIGVycjsKK30KKworLyoKKyAqIFJlbGVhc2UgYWxsIHRoZSBzdG9yYWdlIGFzc29jaWF0ZWQg d2l0aCB0aGUgUEtDUyM3IG1lc3NhZ2UuCisgKiBJZiB0aGUgY2FsbGVyIGR5bmFtaWNhbGx5IGFs bG9jYXRlZCB0aGUgbWVzc2FnZSwgaXQgbXVzdCBmcmVlIGl0LgorICovCit2b2lkCitwa2NzN19z aWduZWREYXRhX3JlbGVhc2UgKHN0cnVjdCBwa2NzN19zaWduZWREYXRhICptc2cpCit7CisgIGdy dWJfc3NpemVfdCBpOworCisgIGZvciAoaSA9IDA7IGkgPCBtc2ctPnNpZ25lckluZm9fY291bnQ7 IGkrKykKKyAgICBfZ2NyeV9tcGlfcmVsZWFzZSAobXNnLT5zaWduZXJJbmZvc1tpXS5zaWdfbXBp KTsKKworICBncnViX2ZyZWUgKG1zZy0+c2lnbmVySW5mb3MpOworfQotLSAKMi4zOS41IChBcHBs ZSBHaXQtMTU0KQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkdydWItZGV2ZWwgbWFpbGluZyBsaXN0CkdydWItZGV2ZWxAZ251Lm9yZwpodHRwczovL2xp c3RzLmdudS5vcmcvbWFpbG1hbi9saXN0aW5mby9ncnViLWRldmVsCg==