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 16190CA0EEB for ; Tue, 19 Aug 2025 13:14:25 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uoMAS-0005aw-28; Tue, 19 Aug 2025 09:14:24 -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 1uoMAP-0005XO-2r for grub-devel@gnu.org; Tue, 19 Aug 2025 09:14:21 -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 1uoMAL-0007bG-8K for grub-devel@gnu.org; Tue, 19 Aug 2025 09:14:20 -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 57JAmHb8004734; Tue, 19 Aug 2025 13:14:13 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=XD6wXwOIWPj7NvSsG eu7Y7QrjjAwM7G3s0Y+nzFx6r0=; b=eb/eb4FCOdTIJqpCAVfrMEe8X/tN7OqGJ mNa795lJwtjYVVV5tfas9W3HtFOBu9dbCfvnrbfhaubCfhiKixZ60Mc5Ht5ZLAEc 6pMFrU9JlOF8vx9NwosnVxcv/M+oDKTNtVO6B48NLJPFT0jnvwoCW4+4aq7rx6Le PMF3n4l6o7bMrHLo4DKfnU04a4yETkF0/INzQs/siXEWW/3vj3wSiqaQ2ZFhzan9 xuhiNm/R4K/iYJHjJm+87QBQzsPV+vgEgTg+sS/Cphgob2fr2t38Y1v2SxAy3Wq3 RdizhXfVVo2+uSpfUzO9RYblVy5m1YioM5JL+z6zfTM5uPbMTDxXg== 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 48jhny70rr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 19 Aug 2025 13:14:13 +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 57JBDZdH002385; Tue, 19 Aug 2025 13:14:12 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 48k71322kb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 19 Aug 2025 13:14:12 +0000 Received: from smtpav05.fra02v.mail.ibm.com (smtpav05.fra02v.mail.ibm.com [10.20.54.104]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 57JDE84O57540886 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 19 Aug 2025 13:14:08 GMT Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5102F2004B; Tue, 19 Aug 2025 13:14:08 +0000 (GMT) Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 979C820040; Tue, 19 Aug 2025 13:14:05 +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:14:05 +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, Javier Martinez Canillas , Daniel Kiper Subject: [PATCH v7 08/20] appended signatures: Parse X.509 certificates Date: Tue, 19 Aug 2025 18:43:11 +0530 Message-Id: <20250819131323.57631-9-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=68a478a5 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=2OwXVqhp2XgA:10 a=mDV3o1hIAAAA:8 a=20KFwNOVAAAA:8 a=iox4zFpeAAAA:8 a=JuTF4qcAAAAA:8 a=VnNF1IyMAAAA:8 a=yPCof4ZbAAAA:8 a=jJ3KTT9Sk_ckzuZ4kIYA:9 a=WzC6qhA0u3u7Ye7llzcV:22 a=WlT8qwTXB_Kj6um4hl3b:22 X-Proofpoint-ORIG-GUID: 6YBHZtLEi79sOnMww6uTkBbNa5lqqnfe X-Proofpoint-GUID: 6YBHZtLEi79sOnMww6uTkBbNa5lqqnfe X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwODE2MDAyNyBTYWx0ZWRfX9vPEvrBzLYKl CAirC7TSeAr+2DwCai03y16AMzhKuIDMYUOVkNXNSS11AQZPqo04aYOouWz7AOCQnq6Wjb84rJ+ Z6sNtD+O1Fbti57nE1wi+p0nf0V42o4h7coiRXjedbe+NYOqxRdH5eSoXL04SSwJ5T+80S9DJQ0 OgyNmj8wSTff6c6DHnfMoGPEX76fG17Mf+Fg1K1zn5mO/zVGEKhsp0PkXxvWkOQHMdTlkwo8/UF Kdz3Cy9uf0iwVEAMs8p7nqEf6pyFPvpfkXvdI47efsj+SFcvTzcLJ2pJpZMg21+wd8GUptaBm0T poieUFyRlROpZLUIevAJGY9II7R4gJvQoag4zx5AhwUt/pHizxXzC1/NhtDyGYZ8t9e97yXkjoh P2kJmTVX 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 VGhpcyBjb2RlIGFsbG93cyB1cyB0byBwYXJzZToKCiAtIFguNTA5IGNlcnRpZmljYXRlczogYXQg bGVhc3QgZW5vdWdoIHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlcyBvbiB0aGUKICAgUEtDUyM3IG1l c3NhZ2VzLiBXZSBleHBlY3QgdGhhdCB0aGUgY2VydGlmaWNhdGVzIGVtYmVkZGVkIGluIEdSVUIg d2lsbAogICBiZSBsZWFmIGNlcnRpZmljYXRlcywgbm90IENBIGNlcnRpZmljYXRlcy4gVGhlIHBh cnNlciBlbmZvcmNlcyB0aGlzLgoKIC0gWC41MDkgY2VydGlmaWNhdGVzIHN1cHBvcnQgdGhlIEV4 dGVuZGVkIEtleSBVc2FnZSBleHRlbnNpb24gYW5kIGhhbmRsZQogICBpdCBieSB2ZXJpZnlpbmcg dGhhdCB0aGUgY2VydGlmaWNhdGUgaGFzIGEgQ29kZSBTaWduaW5nIHVzYWdlLgoKU2lnbmVkLW9m Zi1ieTogSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJtQHJlZGhhdC5jb20+ICMgRUtV IHN1cHBvcnQKUmVwb3J0ZWQtYnk6IE1pY2hhbCBTdWNoYW5layA8bXN1Y2hhbmVrQHN1c2UuY29t PiAjIGtleSB1c2FnZSBpc3N1ZQpTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgQXh0ZW5zIDxkamFAYXh0 ZW5zLm5ldD4KU2lnbmVkLW9mZi1ieTogU3VkaGFrYXIgS3VwcHVzYW15IDxzdWRoYWthckBsaW51 eC5pYm0uY29tPgpSZXZpZXdlZC1ieTogU3RlZmFuIEJlcmdlciA8c3RlZmFuYkBsaW51eC5pYm0u Y29tPgpSZXZpZXdlZC1ieTogQXZuaXNoIENob3VoYW4gPGF2bmlzaEBsaW51eC5pYm0uY29tPgpS ZXZpZXdlZC1ieTogRGFuaWVsIEtpcGVyIDxkYW5pZWwua2lwZXJAb3JhY2xlLmNvbT4KLS0tCiBn cnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuaCB8ICAzMyArCiBncnVi LWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcveDUwOS5jICAgICAgICB8IDk1NyArKysrKysrKysr KysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDk5MCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL3g1MDkuYwoKZGlmZiAtLWdp dCBhL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5oIGIvZ3J1Yi1j b3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmgKaW5kZXggY2FjN2ZiMDJjLi41 ZWEzMWYxZmQgMTAwNjQ0Ci0tLSBhL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBl bmRlZHNpZy5oCisrKyBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNp Zy5oCkBAIC0yNSw2ICsyNSwyNCBAQCBleHRlcm4gYXNuMV9ub2RlIGdydWJfZ251dGxzX3BraXhf YXNuOwogCiAjZGVmaW5lIE1BWF9PSURfTEVOIDMyCiAKKy8qCisgKiBPbmUgb3IgbW9yZSB4NTA5 IGNlcnRpZmljYXRlcy4KKyAqIFdlIGRvIGxpbWl0ZWQgcGFyc2luZzoKKyAqIGV4dHJhY3Rpbmcg b25seSB0aGUgc2VyaWFsLCBpc3N1ZXIsIHN1YmplY3QgYW5kIFJTQSBwdWJsaWMga2V5LgorICov CitzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZQoreworICBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAq bmV4dDsKKyAgZ3J1Yl91aW50OF90ICpzZXJpYWw7CisgIGdydWJfc2l6ZV90IHNlcmlhbF9sZW47 CisgIGNoYXIgKmlzc3VlcjsKKyAgZ3J1Yl9zaXplX3QgaXNzdWVyX2xlbjsKKyAgY2hhciAqc3Vi amVjdDsKKyAgZ3J1Yl9zaXplX3Qgc3ViamVjdF9sZW47CisgIC8qIFdlIG9ubHkgc3VwcG9ydCBS U0EgcHVibGljIGtleXMuIFRoaXMgZW5jb2RlcyBbbW9kdWx1cywgcHVibGljRXhwb25lbnRdLiAq LworICBnY3J5X21waV90IG1waXNbMl07Cit9OworCiAvKiBBIFBLQ1MjNyBzaWduZWREYXRhIHNp Z25lckluZm8uICovCiBzdHJ1Y3QgcGtjczdfc2lnbmVySW5mbwogewpAQCAtNDMsNiArNjEsMjEg QEAgc3RydWN0IHBrY3M3X3NpZ25lZERhdGEKICAgc3RydWN0IHBrY3M3X3NpZ25lckluZm8gKnNp Z25lckluZm9zOwogfTsKIAorLyoKKyAqIEltcG9ydCBhIERFUi1lbmNvZGVkIGNlcnRpZmljYXRl IGF0ICdkYXRhJywgb2Ygc2l6ZSAnc2l6ZScuCisgKiBQbGFjZSB0aGUgcmVzdWx0cyBpbnRvICdy ZXN1bHRzJywgd2hpY2ggbXVzdCBiZSBhbHJlYWR5IGFsbG9jYXRlZC4KKyAqLworZXh0ZXJuIGdy dWJfZXJyX3QKK3BhcnNlX3g1MDlfY2VydGlmaWNhdGUgKGNvbnN0IHZvaWQgKmRhdGEsIGdydWJf c2l6ZV90IHNpemUsIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpyZXN1bHRzKTsKKworLyoKKyAq IFJlbGVhc2UgYWxsIHRoZSBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgeDUwOSBjZXJ0aWZp Y2F0ZS4KKyAqIElmIHRoZSBjYWxsZXIgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHRoZSBjZXJ0aWZp Y2F0ZSwgaXQgbXVzdCBmcmVlIGl0LgorICogVGhlIGNhbGxlciBpcyBhbHNvIHJlc3BvbnNpYmxl IGZvciBtYWludGVuYW5jZSBvZiB0aGUgbGlua2VkIGxpc3QuCisgKi8KK2V4dGVybiB2b2lkCitj ZXJ0aWZpY2F0ZV9yZWxlYXNlIChzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqY2VydCk7CisKIC8q CiAgKiBQYXJzZSBhIFBLQ1MjNyBtZXNzYWdlLCB3aGljaCBtdXN0IGJlIGEgc2lnbmVkRGF0YSBt ZXNzYWdlLgogICogVGhlIG1lc3NhZ2UgbXVzdCBiZSBpbiAnc2lnYnVmJyBhbmQgb2Ygc2l6ZSAn ZGF0YV9zaXplJy4gVGhlIHJlc3VsdCBpcwpkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRz L2FwcGVuZGVkc2lnL3g1MDkuYyBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy94NTA5 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi42OGIxMjY0NGEKLS0tIC9k ZXYvbnVsbAorKysgYi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcveDUwOS5jCkBAIC0w LDAgKzEsOTU3IEBACisvKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIK KyAqICBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIyLCAyMDI1IElCTSBDb3Jwb3JhdGlvbgor ICoKKyAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor ICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxsaWJ0YXNuMS5oPgorI2luY2x1 ZGUgPGdydWIvdHlwZXMuaD4KKyNpbmNsdWRlIDxncnViL2Vyci5oPgorI2luY2x1ZGUgPGdydWIv bW0uaD4KKyNpbmNsdWRlIDxncnViL2NyeXB0by5oPgorI2luY2x1ZGUgPGdydWIvbWlzYy5oPgor I2luY2x1ZGUgPGdydWIvZ2NyeXB0L2djcnlwdC5oPgorCisjaW5jbHVkZSAiYXBwZW5kZWRzaWcu aCIKKworc3RhdGljIGNoYXIgYXNuMV9lcnJvcltBU04xX01BWF9FUlJPUl9ERVNDUklQVElPTl9T SVpFXTsKKworCisvKiBSRkMgMzI3OSAyLjMuMSAgUlNBIEtleXMuICovCitzdGF0aWMgY29uc3Qg Y2hhciAqcnNhRW5jcnlwdGlvbl9vaWQgPSAiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOworCisvKiBS RkMgNTI4MCBBcHBlbmRpeCBBLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKmNvbW1vbk5hbWVfb2lk ID0gIjIuNS40LjMiOworCisvKiBSRkMgNTI4MCA0LjIuMS4zIEtleSBVc2FnZS4gKi8KK3N0YXRp YyBjb25zdCBjaGFyICprZXlVc2FnZV9vaWQgPSAiMi41LjI5LjE1IjsKKworc3RhdGljIGNvbnN0 IGdydWJfdWludDhfdCBkaWdpdGFsU2lnbmF0dXJlVXNhZ2UgPSAweDgwOworCisvKiBSRkMgNTI4 MCA0LjIuMS45IEJhc2ljIENvbnN0cmFpbnRzLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKmJhc2lj Q29uc3RyYWludHNfb2lkID0gIjIuNS4yOS4xOSI7CisKKy8qIFJGQyA1MjgwIDQuMi4xLjEyIEV4 dGVuZGVkIEtleSBVc2FnZS4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICpleHRlbmRlZEtleVVzYWdl X29pZCA9ICIyLjUuMjkuMzciOworc3RhdGljIGNvbnN0IGNoYXIgKmNvZGVTaWduaW5nVXNhZ2Vf b2lkID0gIjEuMy42LjEuNS41LjcuMy4zIjsKKworLyoKKyAqIFJGQyAzMjc5IDIuMy4xCisgKgor ICogIFRoZSBSU0EgcHVibGljIGtleSBNVVNUIGJlIGVuY29kZWQgdXNpbmcgdGhlIEFTTi4xIHR5 cGUgUlNBUHVibGljS2V5OgorICoKKyAqICAgICBSU0FQdWJsaWNLZXkgOjo9IFNFUVVFTkNFIHsK KyAqICAgICAgICBtb2R1bHVzICAgICAgICAgICAgSU5URUdFUiwgICAgLS0gbgorICogICAgICAg IHB1YmxpY0V4cG9uZW50ICAgICBJTlRFR0VSICB9ICAtLSBlCisgKgorICogIHdoZXJlIG1vZHVs dXMgaXMgdGhlIG1vZHVsdXMgbiwgYW5kIHB1YmxpY0V4cG9uZW50IGlzIHRoZSBwdWJsaWMKKyAq ICBleHBvbmVudCBlLgorICovCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl9wYXJzZV9yc2FfcHVi a2V5IChncnViX3VpbnQ4X3QgKmRlciwgaW50IGRlcnNpemUsIHN0cnVjdCB4NTA5X2NlcnRpZmlj YXRlICpjZXJ0aWZpY2F0ZSkKK3sKKyAgaW50IHJlc3VsdDsKKyAgYXNuMV9ub2RlIHNwayA9IE5V TEw7CisgIGdydWJfdWludDhfdCAqbV9kYXRhLCAqZV9kYXRhOworICBpbnQgbV9zaXplLCBlX3Np emU7CisgIGdydWJfZXJyX3QgZXJyID0gR1JVQl9FUlJfTk9ORTsKKyAgZ2NyeV9lcnJvcl90IGdj cnlfZXJyOworCisgIHJlc3VsdCA9IGFzbjFfY3JlYXRlX2VsZW1lbnQgKGdydWJfZ251dGxzX2du dXRsc19hc24sICJHTlVUTFMuUlNBUHVibGljS2V5IiwgJnNwayk7CisgIGlmIChyZXN1bHQgIT0g QVNOMV9TVUNDRVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVN T1JZLAorICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGNyZWF0ZSBzdG9yYWdlIGZvciBw dWJsaWMga2V5IEFTTi4xIGRhdGEiKTsKKworICByZXN1bHQgPSBhc24xX2Rlcl9kZWNvZGluZzIg KCZzcGssIGRlciwgJmRlcnNpemUsIEFTTjFfREVDT0RFX0ZMQUdfU1RSSUNUX0RFUiwgYXNuMV9l cnJvcik7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9 IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAgICAgICAgICAgICAg ICAgICAiY2Fubm90IGRlY29kZSBjZXJ0aWZpY2F0ZSBwdWJsaWMga2V5IERFUjogJXMiLCBhc24x X2Vycm9yKTsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgbV9kYXRhID0gZ3J1Yl9h c24xX2FsbG9jYXRlX2FuZF9yZWFkIChzcGssICJtb2R1bHVzIiwgIlJTQSBtb2R1bHVzIiwgJm1f c2l6ZSk7CisgIGlmIChtX2RhdGEgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vy cm5vOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBlX2RhdGEgPSBncnViX2FzbjFf YWxsb2NhdGVfYW5kX3JlYWQgKHNwaywgInB1YmxpY0V4cG9uZW50IiwgIlJTQSBwdWJsaWMgZXhw b25lbnQiLCAmZV9zaXplKTsKKyAgaWYgKGVfZGF0YSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVy ciA9IGdydWJfZXJybm87CisgICAgICBnb3RvIGNsZWFudXBfbV9kYXRhOworICAgIH0KKworICAv KgorICAgKiBDb252ZXJ0IG0sIGUgdG8gbXBpCisgICAqCisgICAqIG5zY2FubmVkIGlzIG5vdCBz ZXQgZm9yIEZNVF9VU0csIGl0J3Mgb25seSBzZXQgZm9yIEZNVF9QR1AsCisgICAqIHNvIHdlIGNh bid0IHZlcmlmeSBpdC4KKyAgICovCisgIGdjcnlfZXJyID0gX2djcnlfbXBpX3NjYW4gKCZjZXJ0 aWZpY2F0ZS0+bXBpc1swXSwgR0NSWU1QSV9GTVRfVVNHLCBtX2RhdGEsIG1fc2l6ZSwgTlVMTCk7 CisgIGlmIChnY3J5X2VyciAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgIHsKKyAgICAgIGVyciA9 IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAgICAgICAgICAgICAg ICAgICAiZXJyb3IgbG9hZGluZyBSU0EgbW9kdWx1cyBpbnRvIE1QSSBzdHJ1Y3R1cmU6ICVkIiwg Z2NyeV9lcnIpOworICAgICAgZ290byBjbGVhbnVwX2VfZGF0YTsKKyAgICB9CisKKyAgZ2NyeV9l cnIgPSBfZ2NyeV9tcGlfc2NhbiAoJmNlcnRpZmljYXRlLT5tcGlzWzFdLCBHQ1JZTVBJX0ZNVF9V U0csIGVfZGF0YSwgZV9zaXplLCBOVUxMKTsKKyAgaWYgKGdjcnlfZXJyICE9IEdQR19FUlJfTk9f RVJST1IpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVf VFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBsb2FkaW5nIFJTQSBleHBvbmVu dCBpbnRvIE1QSSBzdHJ1Y3R1cmU6ICVkIiwgZ2NyeV9lcnIpOworICAgICAgZ290byBjbGVhbnVw X21fbXBpOworICAgIH0KKworICBncnViX2ZyZWUgKGVfZGF0YSk7CisgIGdydWJfZnJlZSAobV9k YXRhKTsKKyAgYXNuMV9kZWxldGVfc3RydWN0dXJlICgmc3BrKTsKKworICByZXR1cm4gR1JVQl9F UlJfTk9ORTsKKworIGNsZWFudXBfbV9tcGk6CisgIF9nY3J5X21waV9yZWxlYXNlIChjZXJ0aWZp Y2F0ZS0+bXBpc1swXSk7CisgY2xlYW51cF9lX2RhdGE6CisgIGdydWJfZnJlZSAoZV9kYXRhKTsK KyBjbGVhbnVwX21fZGF0YToKKyAgZ3J1Yl9mcmVlIChtX2RhdGEpOworIGNsZWFudXA6CisgIGFz bjFfZGVsZXRlX3N0cnVjdHVyZSAoJnNwayk7CisKKyAgcmV0dXJuIGVycjsKK30KKworLyoKKyAq IFJGQyA1MjgwOgorICogICBTdWJqZWN0UHVibGljS2V5SW5mbyAgOjo9ICBTRVFVRU5DRSAgewor ICogICAgICAgYWxnb3JpdGhtICAgICAgICAgICAgQWxnb3JpdGhtSWRlbnRpZmllciwKKyAqICAg ICAgIHN1YmplY3RQdWJsaWNLZXkgICAgIEJJVCBTVFJJTkcgIH0KKyAqCisgKiBBbGdvcml0aG1J ZGVudGlmaWVycyBjb21lIGZyb20gUkZDIDMyNzksIHdlIGFyZSBub3Qgc3RyaWN0bHkgY29tcGls YW50IGFzIHdlCisgKiBvbmx5IHN1cHBvcnQgUlNBIEVuY3J5cHRpb24uCisgKi8KK3N0YXRpYyBn cnViX2Vycl90CitncnViX3g1MDlfcmVhZF9zdWJqZWN0X3B1YmxpY19rZXkgKGFzbjFfbm9kZSBh c24sIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpyZXN1bHRzKQoreworICBpbnQgcmVzdWx0Owor ICBncnViX2Vycl90IGVycjsKKyAgY29uc3QgY2hhciAqYWxnb19uYW1lID0gInRic0NlcnRpZmlj YXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvLmFsZ29yaXRobS5hbGdvcml0aG0iOworICBjb25zdCBj aGFyICpwYXJhbXNfbmFtZSA9ICJ0YnNDZXJ0aWZpY2F0ZS5zdWJqZWN0UHVibGljS2V5SW5mby5h bGdvcml0aG0ucGFyYW1ldGVycyI7CisgIGNvbnN0IGNoYXIgKnBrX25hbWUgPSAidGJzQ2VydGlm aWNhdGUuc3ViamVjdFB1YmxpY0tleUluZm8uc3ViamVjdFB1YmxpY0tleSI7CisgIGNoYXIgYWxn b19vaWRbTUFYX09JRF9MRU5dOworICBpbnQgYWxnb19zaXplID0gc2l6ZW9mIChhbGdvX29pZCk7 CisgIGNoYXIgcGFyYW1zX3ZhbHVlWzJdOworICBpbnQgcGFyYW1zX3NpemUgPSBzaXplb2YgKHBh cmFtc192YWx1ZSk7CisgIGdydWJfdWludDhfdCAqa2V5X2RhdGEgPSBOVUxMOworICBpbnQga2V5 X3NpemUgPSAwOworICB1bnNpZ25lZCBpbnQga2V5X3R5cGU7CisKKyAgLyogQWxnb3JpdGhtOiBz ZWUgbm90ZXMgZm9yIHJzYUVuY3J5cHRpb25fb2lkLiAqLworICByZXN1bHQgPSBhc24xX3JlYWRf dmFsdWUgKGFzbiwgYWxnb19uYW1lLCBhbGdvX29pZCwgJmFsZ29fc2l6ZSk7CisgIGlmIChyZXN1 bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURf RklMRV9UWVBFLCAiZXJyb3IgcmVhZGluZyB4NTA5IHB1YmxpYyBrZXkgYWxnb3JpdGhtOiAlcyIs CisgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOworCisgIGlm IChncnViX3N0cm5jbXAgKGFsZ29fb2lkLCByc2FFbmNyeXB0aW9uX29pZCwgc2l6ZW9mIChyc2FF bmNyeXB0aW9uX29pZCkpICE9IDApCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX05P VF9JTVBMRU1FTlRFRF9ZRVQsCisgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCB4 NTA5IHB1YmxpYyBrZXkgYWxnb3JpdGhtOiAlcyIsIGFsZ29fb2lkKTsKKworICAvKgorICAgKiBS RkMgMzI3OSAyLjMuMQorICAgKiBUaGUgcnNhRW5jcnlwdGlvbiBPSUQgaXMgaW50ZW5kZWQgdG8g YmUgdXNlZCBpbiB0aGUgYWxnb3JpdGhtIGZpZWxkCisgICAqIG9mIGEgdmFsdWUgb2YgdHlwZSBB bGdvcml0aG1JZGVudGlmaWVyLiAgVGhlIHBhcmFtZXRlcnMgZmllbGQgTVVTVAorICAgKiBoYXZl IEFTTi4xIHR5cGUgTlVMTCBmb3IgdGhpcyBhbGdvcml0aG0gaWRlbnRpZmllci4KKyAgICovCisg IHJlc3VsdCA9IGFzbjFfcmVhZF92YWx1ZSAoYXNuLCBwYXJhbXNfbmFtZSwgcGFyYW1zX3ZhbHVl LCAmcGFyYW1zX3NpemUpOworICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICByZXR1 cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIHJlYWRpbmcgeDUw OSBwdWJsaWMga2V5IHBhcmFtZXRlcnM6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYXNu MV9zdHJlcnJvciAocmVzdWx0KSk7CisKKyAgaWYgKHBhcmFtc192YWx1ZVswXSAhPSBBU04xX1RB R19OVUxMKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAor ICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCB4NTA5IHB1YmxpYyBrZXkgcGFyYW1ldGVy czogZXhwZWN0ZWQgTlVMTCIpOworCisgIC8qCisgICAqIFJGQyAzMjc5IDIuMy4xOiAgVGhlIERF UiBlbmNvZGVkIFJTQVB1YmxpY0tleSBpcyB0aGUgdmFsdWUgb2YgdGhlIEJJVAorICAgKiBTVFJJ Tkcgc3ViamVjdFB1YmxpY0tleS4KKyAgICovCisgIHJlc3VsdCA9IGFzbjFfcmVhZF92YWx1ZV90 eXBlIChhc24sIHBrX25hbWUsIE5VTEwsICZrZXlfc2l6ZSwgJmtleV90eXBlKTsKKyAgaWYgKHJl c3VsdCAhPSBBU04xX01FTV9FUlJPUikKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf QkFEX0ZJTEVfVFlQRSwgImVycm9yIHJlYWRpbmcgc2l6ZSBvZiB4NTA5IHB1YmxpYyBrZXk6ICVz IiwKKyAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgIGlm IChrZXlfdHlwZSAhPSBBU04xX0VUWVBFX0JJVF9TVFJJTkcpCisgICAgcmV0dXJuIGdydWJfZXJy b3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJ1bmV4cGVjdGVkIEFTTi4xIHR5cGUgd2hlbiBy ZWFkaW5nIHg1MDkgcHVibGljIGtleTogJXgiLAorICAgICAgICAgICAgICAgICAgICAgICBrZXlf dHlwZSk7CisKKyAgLyogTGVuZ3RoIGlzIGluIGJpdHMuICovCisgIGtleV9zaXplID0gKGtleV9z aXplICsgNykgLyA4OworCisgIGtleV9kYXRhID0gZ3J1Yl9tYWxsb2MgKGtleV9zaXplKTsKKyAg aWYgKGtleV9kYXRhID09IE5VTEwpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09V VF9PRl9NRU1PUlksICJvdXQgb2YgbWVtb3J5IGZvciB4NTA5IHB1YmxpYyBrZXkiKTsKKworICBy ZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGFzbiwgcGtfbmFtZSwga2V5X2RhdGEsICZrZXlfc2l6 ZSk7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGdydWJfZnJl ZSAoa2V5X2RhdGEpOworICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxF X1RZUEUsICJlcnJvciByZWFkaW5nIHB1YmxpYyBrZXkgZGF0YSIpOworICAgIH0KKworICBrZXlf c2l6ZSA9IChrZXlfc2l6ZSArIDcpIC8gODsKKyAgZXJyID0gZ3J1Yl9wYXJzZV9yc2FfcHVia2V5 IChrZXlfZGF0YSwga2V5X3NpemUsIHJlc3VsdHMpOworICBncnViX2ZyZWUgKGtleV9kYXRhKTsK KworICByZXR1cm4gZXJyOworfQorCisvKiBEZWNvZGUgYSBzdHJpbmcgYXMgZGVmaW5lZCBpbiBB cHBlbmRpeCBBLiAqLworc3RhdGljIGdydWJfZXJyX3QKK2RlY29kZV9zdHJpbmcgKGNoYXIgKmRl ciwgaW50IGRlcl9zaXplLCBjaGFyICoqc3RyaW5nLCBncnViX3NpemVfdCAqc3RyaW5nX3NpemUp Cit7CisgIGFzbjFfbm9kZSBzdHJhc247CisgIGludCByZXN1bHQ7CisgIGNoYXIgKmNob2ljZTsK KyAgaW50IGNob2ljZV9zaXplID0gMDsKKyAgaW50IHRtcF9zaXplID0gMDsKKyAgZ3J1Yl9lcnJf dCBlcnIgPSBHUlVCX0VSUl9OT05FOworCisgIHJlc3VsdCA9IGFzbjFfY3JlYXRlX2VsZW1lbnQg KGdydWJfZ251dGxzX3BraXhfYXNuLCAiUEtJWDEuRGlyZWN0b3J5U3RyaW5nIiwgJnN0cmFzbik7 CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChH UlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90 IGNyZWF0ZSBBU04uMSBzdHJ1Y3R1cmUgZm9yIGNlcnRpZmljYXRlOiAlcyIsCisgICAgICAgICAg ICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOworCisgIHJlc3VsdCA9IGFzbjFf ZGVyX2RlY29kaW5nMiAoJnN0cmFzbiwgZGVyLCAmZGVyX3NpemUsIEFTTjFfREVDT0RFX0ZMQUdf U1RSSUNUX0RFUiwgYXNuMV9lcnJvcik7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQor ICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisg ICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IHBhcnNlIERFUiBmb3IgRGlyZWN0b3J5 U3RyaW5nOiAlcyIsIGFzbjFfZXJyb3IpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKwor ICBjaG9pY2UgPSBncnViX2FzbjFfYWxsb2NhdGVfYW5kX3JlYWQgKHN0cmFzbiwgIiIsICJEaXJl Y3RvcnlTdHJpbmcgY2hvaWNlIiwgJmNob2ljZV9zaXplKTsKKyAgaWYgKGNob2ljZSA9PSBOVUxM KQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJybm87CisgICAgICBnb3RvIGNsZWFudXA7Cisg ICAgfQorCisgIGlmIChncnViX3N0cm5jbXAgKCJ1dGY4U3RyaW5nIiwgY2hvaWNlLCBjaG9pY2Vf c2l6ZSkgPT0gMCkKKyAgICB7CisgICAgICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKHN0cmFz biwgInV0ZjhTdHJpbmciLCBOVUxMLCAmdG1wX3NpemUpOworICAgICAgaWYgKHJlc3VsdCAhPSBB U04xX01FTV9FUlJPUikKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdS VUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIHNpemUgb2YgVVRGLTggc3RyaW5n OiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0 KSk7CisgICAgICAgICAgZ290byBjbGVhbnVwX2Nob2ljZTsKKyAgICAgICAgfQorICAgIH0KKyAg ZWxzZSBpZiAoZ3J1Yl9zdHJuY21wICgicHJpbnRhYmxlU3RyaW5nIiwgY2hvaWNlLCBjaG9pY2Vf c2l6ZSkgPT0gMCkKKyAgICB7CisgICAgICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKHN0cmFz biwgInByaW50YWJsZVN0cmluZyIsIE5VTEwsICZ0bXBfc2l6ZSk7CisgICAgICBpZiAocmVzdWx0 ICE9IEFTTjFfTUVNX0VSUk9SKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJv ciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIHJlYWRpbmcgc2l6ZSBvZiBwcmludGFi bGVTdHJpbmc6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9y IChyZXN1bHQpKTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfY2hvaWNlOworICAgICAgICB9Cisg ICAgfQorICBlbHNlCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9U X0lNUExFTUVOVEVEX1lFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJvbmx5IFVURi04IGFu ZCBwcmludGFibGUgRGlyZWN0b3J5U3RyaW5ncyBhcmUgc3VwcG9ydGVkLCBnb3QgJXMiLAorICAg ICAgICAgICAgICAgICAgICAgICAgY2hvaWNlKTsKKyAgICAgIGdvdG8gY2xlYW51cF9jaG9pY2U7 CisgICAgfQorCisgIC8qIFJlYWQgc2l6ZSBkb2VzIG5vdCBpbmNsdWRlIHRyYWlsaW5nIE5VTC4g Ki8KKyAgdG1wX3NpemUrKzsKKworICAqc3RyaW5nID0gZ3J1Yl9tYWxsb2MgKHRtcF9zaXplKTsK KyAgaWYgKCpzdHJpbmcgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChH UlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBh bGxvY2F0ZSBtZW1vcnkgZm9yIERpcmVjdG9yeVN0cmluZyBjb250ZW50cyIpOworICAgICAgZ290 byBjbGVhbnVwX2Nob2ljZTsKKyAgICB9CisKKyAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChz dHJhc24sIGNob2ljZSwgKnN0cmluZywgJnRtcF9zaXplKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04x X1NVQ0NFU1MpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJ TEVfVFlQRSwgImVycm9yIHJlYWRpbmcgb3V0ICVzIGluIERpcmVjdG9yeVN0cmluZzogJXMiLAor ICAgICAgICAgICAgICAgICAgICAgICAgY2hvaWNlLCBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsK KyAgICAgIGdydWJfZnJlZSAoKnN0cmluZyk7CisgICAgICAqc3RyaW5nID0gTlVMTDsKKyAgICAg IGdvdG8gY2xlYW51cF9jaG9pY2U7CisgICAgfQorCisgICpzdHJpbmdfc2l6ZSA9IHRtcF9zaXpl ICsgMTsKKyAgKCpzdHJpbmcpW3RtcF9zaXplXSA9ICdcMCc7CisKKyBjbGVhbnVwX2Nob2ljZToK KyAgZ3J1Yl9mcmVlIChjaG9pY2UpOworIGNsZWFudXA6CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVy ZSAoJnN0cmFzbik7CisKKyAgcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFRCU0NlcnRpZmljYXRl ICA6Oj0gIFNFUVVFTkNFICB7CisgKiAgICAgICB2ZXJzaW9uICAgICAgICAgWzBdICBFWFBMSUNJ VCBWZXJzaW9uIERFRkFVTFQgdjEsCisgKiAuLi4KKyAqCisgKiBWZXJzaW9uICA6Oj0gIElOVEVH RVIgIHsgIHYxKDApLCB2MigxKSwgdjMoMikgIH0KKyAqLworc3RhdGljIGdydWJfZXJyX3QKK2No ZWNrX3ZlcnNpb24gKGFzbjFfbm9kZSBjZXJ0aWZpY2F0ZSkKK3sKKyAgaW50IHJjOworICBjb25z dCBjaGFyICpuYW1lID0gInRic0NlcnRpZmljYXRlLnZlcnNpb24iOworICBncnViX3VpbnQ4X3Qg dmVyc2lvbjsKKyAgaW50IGxlbiA9IHNpemVvZiAodmVyc2lvbik7CisKKyAgcmMgPSBhc24xX3Jl YWRfdmFsdWUgKGNlcnRpZmljYXRlLCBuYW1lLCAmdmVyc2lvbiwgJmxlbik7CisKKyAgLyogUmVx dWlyZSB2ZXJzaW9uIDMuICovCisgIGlmIChyYyAhPSBBU04xX1NVQ0NFU1MgfHwgbGVuICE9IDEp CisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciBy ZWFkaW5nIGNlcnRpZmljYXRlIHZlcnNpb24iKTsKKworICBpZiAodmVyc2lvbiAhPSAweDAyKQor ICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAorICAgICAgICAg ICAgICAgICAgICAgICAiaW52YWxpZCB4NTA5IGNlcnRpZmljYXRlIHZlcnNpb24sIGV4cGVjdGVk IHYzICgweDAyKSwgZ290IDB4JTAyeC4iLAorICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9u KTsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKworLyoKKyAqIFRoaXMgaXMgYW4gWC41 MDEgTmFtZSwgd2hpY2ggaXMgY29tcGxleC4KKyAqCisgKiBGb3Igc2ltcGxpY2l0eSwgd2UgZXh0 cmFjdCBvbmx5IHRoZSBDTi4KKyAqLworc3RhdGljIGdydWJfZXJyX3QKK3JlYWRfbmFtZSAoYXNu MV9ub2RlIGFzbiwgY29uc3QgY2hhciAqbmFtZV9wYXRoLCBjaGFyICoqbmFtZSwgZ3J1Yl9zaXpl X3QgKm5hbWVfc2l6ZSkKK3sKKyAgaW50IHNlcV9jb21wb25lbnRzLCBzZXRfY29tcG9uZW50czsK KyAgaW50IHJlc3VsdDsKKyAgaW50IGksIGo7CisgIGNoYXIgKnRvcF9wYXRoLCAqc2V0X3BhdGgs ICp0eXBlX3BhdGgsICp2YWxfcGF0aDsKKyAgY2hhciB0eXBlW01BWF9PSURfTEVOXTsKKyAgaW50 IHR5cGVfbGVuID0gc2l6ZW9mICh0eXBlKTsKKyAgaW50IHN0cmluZ19zaXplID0gMDsKKyAgY2hh ciAqc3RyaW5nX2RlcjsKKyAgZ3J1Yl9lcnJfdCBlcnI7CisKKyAgKm5hbWUgPSBOVUxMOworCisg IHRvcF9wYXRoID0gZ3J1Yl94YXNwcmludGYgKCIlcy5yZG5TZXF1ZW5jZSIsIG5hbWVfcGF0aCk7 CisgIGlmICh0b3BfcGF0aCA9PSBOVUxMKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VS Ul9PVVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGFsbG9j YXRlIG1lbW9yeSBmb3IgJXMgbmFtZSBwYXJzaW5nIHBhdGgiLCBuYW1lX3BhdGgpOworCisgIHJl c3VsdCA9IGFzbjFfbnVtYmVyX29mX2VsZW1lbnRzIChhc24sIHRvcF9wYXRoLCAmc2VxX2NvbXBv bmVudHMpOworICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAgICBlcnIg PSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3IgY291bnRpbmcgbmFt ZSBjb21wb25lbnRzOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9y IChyZXN1bHQpKTsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgZm9yIChpID0gMTsg aSA8PSBzZXFfY29tcG9uZW50czsgaSsrKQorICAgIHsKKyAgICAgIHNldF9wYXRoID0gZ3J1Yl94 YXNwcmludGYgKCIlcy4/JWQiLCB0b3BfcGF0aCwgaSk7CisgICAgICBpZiAoc2V0X3BhdGggPT0g TlVMTCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX09V VF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBhbGxv Y2F0ZSBtZW1vcnkgZm9yICVzIG5hbWUgc2V0IHBhcnNpbmcgcGF0aCIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbmFtZV9wYXRoKTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfc2V0Owor ICAgICAgICB9CisgICAgICAvKiBUaGlzIGJyaW5ncyB1cywgaG9wZWZ1bGx5LCB0byBhIHNldC4g Ki8KKyAgICAgIHJlc3VsdCA9IGFzbjFfbnVtYmVyX29mX2VsZW1lbnRzIChhc24sIHNldF9wYXRo LCAmc2V0X2NvbXBvbmVudHMpOworICAgICAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisg ICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9U WVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBjb3VudGluZyBuYW1lIHN1 Yi1jb21wb25lbnRzIGNvbXBvbmVudHMgKGVsZW1lbnQgJWQpOiAlcyIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaSwgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAgICAgICAgZ290 byBjbGVhbnVwX3NldDsKKyAgICAgICAgfQorICAgICAgZm9yIChqID0gMTsgaiA8PSBzZXRfY29t cG9uZW50czsgaisrKQorICAgICAgICB7CisgICAgICAgICAgdHlwZV9wYXRoID0gZ3J1Yl94YXNw cmludGYgKCIlcy4/JWQuPyVkLnR5cGUiLCB0b3BfcGF0aCwgaSwgaik7CisgICAgICAgICAgaWYg KHR5cGVfcGF0aCA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnIgPSBn cnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgJXMgbmFtZSBjb21wb25l bnQgdHlwZSBwYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9wYXRo KTsKKyAgICAgICAgICAgICAgZ290byBjbGVhbnVwX3NldDsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICB0eXBlX2xlbiA9IHNpemVvZiAodHlwZSk7CisgICAgICAgICAgcmVzdWx0ID0gYXNuMV9y ZWFkX3ZhbHVlIChhc24sIHR5cGVfcGF0aCwgdHlwZSwgJnR5cGVfbGVuKTsKKyAgICAgICAgICBp ZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIHJlYWRpbmcg JXMgbmFtZSBjb21wb25lbnQgdHlwZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBuYW1lX3BhdGgsIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOworICAgICAgICAgICAgICBn b3RvIGNsZWFudXBfdHlwZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChncnViX3N0 cm5jbXAgKHR5cGUsIGNvbW1vbk5hbWVfb2lkLCB0eXBlX2xlbikgIT0gMCkKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgZ3J1Yl9mcmVlICh0eXBlX3BhdGgpOworICAgICAgICAgICAgICBj b250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIHZhbF9wYXRoID0gZ3J1Yl94YXNw cmludGYgKCIlcy4/JWQuPyVkLnZhbHVlIiwgdG9wX3BhdGgsIGksIGopOworICAgICAgICAgIGlm ICh2YWxfcGF0aCA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnIgPSBn cnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgJXMgbmFtZSBjb21wb25l bnQgdmFsdWUgcGF0aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfcGF0 aCk7CisgICAgICAgICAgICAgIGdvdG8gY2xlYW51cF90eXBlOworICAgICAgICAgICAgfQorCisg ICAgICAgICAgc3RyaW5nX2RlciA9IGdydWJfYXNuMV9hbGxvY2F0ZV9hbmRfcmVhZCAoYXNuLCB2 YWxfcGF0aCwgbmFtZV9wYXRoLCAmc3RyaW5nX3NpemUpOworICAgICAgICAgIGlmIChzdHJpbmdf ZGVyID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9IGdydWJfZXJy bm87CisgICAgICAgICAgICAgIGdvdG8gY2xlYW51cF92YWxfcGF0aDsKKyAgICAgICAgICAgIH0K KworICAgICAgICAgIGVyciA9IGRlY29kZV9zdHJpbmcgKHN0cmluZ19kZXIsIHN0cmluZ19zaXpl LCBuYW1lLCBuYW1lX3NpemUpOworICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICBnb3Rv IGNsZWFudXBfc3RyaW5nOworCisgICAgICAgICAgZ3J1Yl9mcmVlIChzdHJpbmdfZGVyKTsKKyAg ICAgICAgICBncnViX2ZyZWUgKHR5cGVfcGF0aCk7CisgICAgICAgICAgZ3J1Yl9mcmVlICh2YWxf cGF0aCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgZ3J1Yl9mcmVlIChz ZXRfcGF0aCk7CisgICAgICBpZiAoKm5hbWUpCisgICAgICAgIGJyZWFrOworICAgIH0KKworICBn cnViX2ZyZWUgKHRvcF9wYXRoKTsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKKworIGNsZWFu dXBfc3RyaW5nOgorICBncnViX2ZyZWUgKHN0cmluZ19kZXIpOworIGNsZWFudXBfdmFsX3BhdGg6 CisgIGdydWJfZnJlZSAodmFsX3BhdGgpOworIGNsZWFudXBfdHlwZToKKyAgZ3J1Yl9mcmVlICh0 eXBlX3BhdGgpOworIGNsZWFudXBfc2V0OgorICBncnViX2ZyZWUgKHNldF9wYXRoKTsKKyBjbGVh bnVwOgorICBncnViX2ZyZWUgKHRvcF9wYXRoKTsKKworICByZXR1cm4gZXJyOworfQorCisvKgor ICogVmVyaWZ5IHRoZSBLZXkgVXNhZ2UgZXh0ZW5zaW9uLgorICogV2UgcmVxdWlyZSB0aGUgRGln aXRhbCBTaWduYXR1cmUgdXNhZ2UuCisgKi8KK3N0YXRpYyBncnViX2Vycl90Cit2ZXJpZnlfa2V5 X3VzYWdlIChncnViX3VpbnQ4X3QgKnZhbHVlLCBpbnQgdmFsdWVfc2l6ZSkKK3sKKyAgYXNuMV9u b2RlIHVzYWdlYXNuOworICBpbnQgcmVzdWx0OworICBncnViX2Vycl90IGVyciA9IEdSVUJfRVJS X05PTkU7CisgIGdydWJfdWludDhfdCB1c2FnZSA9IDB4ZmY7CisgIGludCB1c2FnZV9zaXplID0g c2l6ZW9mICh1c2FnZV9zaXplKTsKKworICByZXN1bHQgPSBhc24xX2NyZWF0ZV9lbGVtZW50IChn cnViX2dudXRsc19wa2l4X2FzbiwgIlBLSVgxLktleVVzYWdlIiwgJnVzYWdlYXNuKTsKKyAgaWYg KHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJS X09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRl IEFTTi4xIHN0cnVjdHVyZSBmb3Iga2V5IHVzYWdlIik7CisKKyAgcmVzdWx0ID0gYXNuMV9kZXJf ZGVjb2RpbmcyICgmdXNhZ2Vhc24sIHZhbHVlLCAmdmFsdWVfc2l6ZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBU04xX0RFQ09ERV9GTEFHX1NUUklDVF9ERVIsIGFzbjFfZXJyb3Ip OworICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAgICBlcnIgPSBncnVi X2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAg ImVycm9yIHBhcnNpbmcgREVSIGZvciBLZXkgVXNhZ2U6ICVzIiwgYXNuMV9lcnJvcik7CisgICAg ICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIHJlc3VsdCA9IGFzbjFfcmVhZF92YWx1ZSAodXNh Z2Vhc24sICIiLCAmdXNhZ2UsICZ1c2FnZV9zaXplKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NV Q0NFU1MpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVf VFlQRSwgImVycm9yIHJlYWRpbmcgS2V5IFVzYWdlIHZhbHVlOiAlcyIsCisgICAgICAgICAgICAg ICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAgICAgIGdvdG8gY2xlYW51cDsK KyAgICB9CisKKyAgaWYgKCEodXNhZ2UgJiBkaWdpdGFsU2lnbmF0dXJlVXNhZ2UpKQorICAgIHsK KyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAg ICAgICAgICAgICAgICAgICAia2V5IHVzYWdlICgweCV4KSBtaXNzaW5nIERpZ2l0YWwgU2lnbmF0 dXJlIHVzYWdlIiwgdXNhZ2UpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworIGNsZWFu dXA6CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJnVzYWdlYXNuKTsKKworICByZXR1cm4gZXJy OworfQorCisvKgorICogQmFzaWNDb25zdHJhaW50cyA6Oj0gU0VRVUVOQ0UgeworICogICAgICAg Y0EgICAgICAgICAgICAgICAgICAgICAgQk9PTEVBTiBERUZBVUxUIEZBTFNFLAorICogICAgICAg cGF0aExlbkNvbnN0cmFpbnQgICAgICAgSU5URUdFUiAoMC4uTUFYKSBPUFRJT05BTCB9CisgKi8K K3N0YXRpYyBncnViX2Vycl90Cit2ZXJpZnlfYmFzaWNfY29uc3RyYWludHMgKGdydWJfdWludDhf dCAqdmFsdWUsIGludCB2YWx1ZV9zaXplKQoreworICBhc24xX25vZGUgYmFzaWNhc247CisgIGlu dCByZXN1bHQ7CisgIGdydWJfZXJyX3QgZXJyID0gR1JVQl9FUlJfTk9ORTsKKyAgY2hhciBjQVs2 XTsgLyogRkFMU0Ugb3IgVFJVRS4gKi8KKyAgaW50IGNBX3NpemUgPSBzaXplb2YgKGNBKTsKKwor ICByZXN1bHQgPSBhc24xX2NyZWF0ZV9lbGVtZW50IChncnViX2dudXRsc19wa2l4X2FzbiwgIlBL SVgxLkJhc2ljQ29uc3RyYWludHMiLCAmYmFzaWNhc24pOworICBpZiAocmVzdWx0ICE9IEFTTjFf U1VDQ0VTUykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwK KyAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgQVNOLjEgc3RydWN0dXJl IGZvciBCYXNpYyBDb25zdHJhaW50cyIpOworCisgIHJlc3VsdCA9IGFzbjFfZGVyX2RlY29kaW5n MiAoJmJhc2ljYXNuLCB2YWx1ZSwgJnZhbHVlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQVNOMV9ERUNPREVfRkxBR19TVFJJQ1RfREVSLCBhc24xX2Vycm9yKTsKKyAgaWYg KHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBw YXJzaW5nIERFUiBmb3IgQmFzaWMgQ29uc3RyYWludHM6ICVzIiwgYXNuMV9lcnJvcik7CisgICAg ICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIHJlc3VsdCA9IGFzbjFfcmVhZF92YWx1ZSAoYmFz aWNhc24sICJjQSIsIGNBLCAmY0Ffc2l6ZSk7CisgIGlmIChyZXN1bHQgPT0gQVNOMV9FTEVNRU5U X05PVF9GT1VORCkKKyAgICB7CisgICAgICAvKiBOb3QgcHJlc2VudCwgZGVmYXVsdCBpcyBGYWxz ZSwgc28gdGhpcyBpcyBPSy4gKi8KKyAgICAgIGVyciA9IEdSVUJfRVJSX05PTkU7CisgICAgICBn b3RvIGNsZWFudXA7CisgICAgfQorICBlbHNlIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQor ICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJl cnJvciByZWFkaW5nIEJhc2ljIENvbnN0cmFpbnRzIGNBIHZhbHVlOiAlcyIsCisgICAgICAgICAg ICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAgICAgIGdvdG8gY2xlYW51 cDsKKyAgICB9CisKKyAgLyogVGhlIGNlcnRpZmljYXRlIG11c3Qgbm90IGJlIGEgQ0EgY2VydGlm aWNhdGUuICovCisgIGlmIChncnViX3N0cm5jbXAgKCJGQUxTRSIsIGNBLCBjQV9zaXplKSAhPSAw KQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUs ICJ1bmV4cGVjdGVkIENBIHZhbHVlOiAlcyIsIGNBKTsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAg ICB9CisKKyBjbGVhbnVwOgorICBhc24xX2RlbGV0ZV9zdHJ1Y3R1cmUgKCZiYXNpY2Fzbik7CisK KyAgcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFZlcmlmeSB0aGUgRXh0ZW5kZWQgS2V5IFVzYWdl IGV4dGVuc2lvbi4KKyAqIFdlIHJlcXVpcmUgdGhlIENvZGUgU2lnbmluZyB1c2FnZS4KKyAqCisg KiBFeHRLZXlVc2FnZVN5bnRheCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4uTUFYKSBPRiBLZXlQdXJw b3NlSWQKKyAqCisgKiBLZXlQdXJwb3NlSWQgOjo9IE9CSkVDVCBJREVOVElGSUVSCisgKi8KK3N0 YXRpYyBncnViX2Vycl90Cit2ZXJpZnlfZXh0ZW5kZWRfa2V5X3VzYWdlIChncnViX3VpbnQ4X3Qg KnZhbHVlLCBpbnQgdmFsdWVfc2l6ZSkKK3sKKyAgYXNuMV9ub2RlIGV4dGVuZGVkYXNuOworICBp bnQgcmVzdWx0LCBjb3VudCwgaSA9IDA7CisgIGdydWJfZXJyX3QgZXJyID0gR1JVQl9FUlJfTk9O RTsKKyAgY2hhciB1c2FnZVtNQVhfT0lEX0xFTl0sIG5hbWVbM107CisgIGludCB1c2FnZV9zaXpl ID0gc2l6ZW9mICh1c2FnZSk7CisKKyAgcmVzdWx0ID0gYXNuMV9jcmVhdGVfZWxlbWVudCAoZ3J1 Yl9nbnV0bHNfcGtpeF9hc24sICJQS0lYMS5FeHRLZXlVc2FnZVN5bnRheCIsICZleHRlbmRlZGFz bik7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJldHVybiBncnViX2Vycm9y IChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAiY291bGQg bm90IGNyZWF0ZSBBU04uMSBzdHJ1Y3R1cmUgZm9yIEV4dGVuZGVkIEtleSBVc2FnZSIpOworCisg IHJlc3VsdCA9IGFzbjFfZGVyX2RlY29kaW5nMiAoJmV4dGVuZGVkYXNuLCB2YWx1ZSwgJnZhbHVl X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOMV9ERUNPREVfRkxBR19T VFJJQ1RfREVSLCBhc24xX2Vycm9yKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisg ICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBwYXJzaW5nIERFUiBmb3IgRXh0ZW5kZWQgS2V5 IFVzYWdlOiAlcyIsIGFzbjFfZXJyb3IpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKwor ICAvKiBJZiBFS1VzIGFyZSBwcmVzZW50LCBpdCBjaGVja3MgdGhlIHByZXNlbnRzIG9mIENvZGUg U2lnbmluZyB1c2FnZS4gKi8KKyAgcmVzdWx0ID0gYXNuMV9udW1iZXJfb2ZfZWxlbWVudHMgKGV4 dGVuZGVkYXNuLCAiIiwgJmNvdW50KTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisg ICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVy cm9yIGNvdW50aW5nIG51bWJlciBvZiBFeHRlbmRlZCBLZXkgVXNhZ2VzOiAlcyIsCisgICAgICAg ICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAgICAgIGdvdG8gY2xl YW51cDsKKyAgICB9CisKKyAgZm9yIChpID0gMTsgaSA8IGNvdW50ICsgMTsgaSsrKQorICAgIHsK KyAgICAgIGdydWJfbWVtc2V0IChuYW1lLCAwLCBzaXplb2YgKG5hbWUpKTsKKyAgICAgIGdydWJf c25wcmludGYgKG5hbWUsIHNpemVvZiAobmFtZSksICI/JWQiLCBpKTsKKyAgICAgIHJlc3VsdCA9 IGFzbjFfcmVhZF92YWx1ZSAoZXh0ZW5kZWRhc24sIG5hbWUsIHVzYWdlLCAmdXNhZ2Vfc2l6ZSk7 CisgICAgICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAg IGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5n IEV4dGVuZGVkIEtleSBVc2FnZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFz bjFfc3RyZXJyb3IgKHJlc3VsdCkpOworICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAg fQorCisgICAgICBpZiAoZ3J1Yl9zdHJuY21wIChjb2RlU2lnbmluZ1VzYWdlX29pZCwgdXNhZ2Us IHVzYWdlX3NpemUpID09IDApCisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgZXJy ID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImV4dGVuZGVkIGtleSB1c2Fn ZSBtaXNzaW5nIENvZGUgU2lnbmluZyB1c2FnZSIpOworCisgY2xlYW51cDoKKyAgYXNuMV9kZWxl dGVfc3RydWN0dXJlICgmZXh0ZW5kZWRhc24pOworCisgIHJldHVybiBlcnI7Cit9CisKKy8qCisg KiBFeHRlbnNpb25zICA6Oj0gIFNFUVVFTkNFIFNJWkUgKDEuLk1BWCkgT0YgRXh0ZW5zaW9uCisg KgorICogRXh0ZW5zaW9uICA6Oj0gIFNFUVVFTkNFICB7CisgKiAgICAgIGV4dG5JRCAgICAgIE9C SkVDVCBJREVOVElGSUVSLAorICogICAgICBjcml0aWNhbCAgICBCT09MRUFOIERFRkFVTFQgRkFM U0UsCisgKiAgICAgIGV4dG5WYWx1ZSAgIE9DVEVUIFNUUklORworICogICAgICAgICAgICAgICAg ICAtLSBjb250YWlucyB0aGUgREVSIGVuY29kaW5nIG9mIGFuIEFTTi4xIHZhbHVlCisgKiAgICAg ICAgICAgICAgICAgIC0tIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGV4dGVuc2lvbiB0eXBlIGlkZW50 aWZpZWQKKyAqICAgICAgICAgICAgICAgICAgLS0gYnkgZXh0bklECisgKiB9CisgKgorICogQSBj ZXJ0aWZpY2F0ZSBtdXN0OgorICogIC0gY29udGFpbiB0aGUgRGlnaXRhbCBTaWduYXR1cmUgdXNh Z2UKKyAqICAtIG5vdCBiZSBhIENBCisgKiAgLSBjb250YWluIG5vIGV4dGVuZGVkIHVzYWdlcywg b3IgY29udGFpbiB0aGUgQ29kZSBTaWduaW5nIGV4dGVuZGVkIHVzYWdlCisgKiAgLSBub3QgY29u dGFpbiBhbnkgb3RoZXIgY3JpdGljYWwgZXh0ZW5zaW9ucyAoUkZDIDUyODAgcyA0LjIpCisgKi8K K3N0YXRpYyBncnViX2Vycl90Cit2ZXJpZnlfZXh0ZW5zaW9ucyAoYXNuMV9ub2RlIGNlcnQpCit7 CisgIGludCByZXN1bHQ7CisgIGludCBleHQsIG51bV9leHRlbnNpb25zID0gMDsKKyAgaW50IHVz YWdlX3ByZXNlbnQgPSAwLCBjb25zdHJhaW50c19wcmVzZW50ID0gMCwgZXh0ZW5kZWRfdXNhZ2Vf cHJlc2VudCA9IDA7CisgIGNoYXIgKm9pZF9wYXRoLCAqY3JpdGljYWxfcGF0aCwgKnZhbHVlX3Bh dGg7CisgIGNoYXIgZXh0bklEW01BWF9PSURfTEVOXTsKKyAgaW50IGV4dG5JRF9zaXplOworICBn cnViX2Vycl90IGVycjsKKyAgY2hhciBjcml0aWNhbFs2XTsgLyogV2UgZ2V0IGVpdGhlciAiVFJV RSIgb3IgIkZBTFNFIi4gKi8KKyAgaW50IGNyaXRpY2FsX3NpemU7CisgIGdydWJfdWludDhfdCAq dmFsdWU7CisgIGludCB2YWx1ZV9zaXplOworCisgIHJlc3VsdCA9IGFzbjFfbnVtYmVyX29mX2Vs ZW1lbnRzIChjZXJ0LCAidGJzQ2VydGlmaWNhdGUuZXh0ZW5zaW9ucyIsICZudW1fZXh0ZW5zaW9u cyk7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJldHVybiBncnViX2Vycm9y IChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3IgY291bnRpbmcgbnVtYmVyIG9mIGV4dGVu c2lvbnM6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0 KSk7CisKKyAgaWYgKG51bV9leHRlbnNpb25zIDwgMikKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgImluc3VmZmlj aWVudCBudW1iZXIgb2YgZXh0ZW5zaW9ucyBmb3IgY2VydGlmaWNhdGUsIG5lZWQgYXQgbGVhc3Qg MiwgZ290ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgbnVtX2V4dGVuc2lvbnMpOworCisg IGZvciAoZXh0ID0gMTsgZXh0IDw9IG51bV9leHRlbnNpb25zOyBleHQrKykKKyAgICB7CisgICAg ICBvaWRfcGF0aCA9IGdydWJfeGFzcHJpbnRmICgidGJzQ2VydGlmaWNhdGUuZXh0ZW5zaW9ucy4/ JWQuZXh0bklEIiwgZXh0KTsKKyAgICAgIGlmIChvaWRfcGF0aCA9PSBOVUxMKQorICAgICAgICB7 CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVy cm9yIGV4dGVuc2lvbiBPSUQgcGF0aCBpcyBlbXB0eSIpOworICAgICAgICAgIHJldHVybiBlcnI7 CisgICAgICAgIH0KKworICAgICAgZXh0bklEX3NpemUgPSBzaXplb2YgKGV4dG5JRCk7CisgICAg ICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGNlcnQsIG9pZF9wYXRoLCBleHRuSUQsICZleHRu SURfc2l6ZSk7CisgICAgICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICAgICAgewor ICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJv ciByZWFkaW5nIGV4dGVuc2lvbiBPSUQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfb2lkX3Bh dGg7CisgICAgICAgIH0KKworICAgICAgY3JpdGljYWxfcGF0aCA9IGdydWJfeGFzcHJpbnRmICgi dGJzQ2VydGlmaWNhdGUuZXh0ZW5zaW9ucy4/JWQuY3JpdGljYWwiLCBleHQpOworICAgICAgaWYg KGNyaXRpY2FsX3BhdGggPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJf ZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciBjcml0aWNhbCBwYXRoIGlzIGVt cHR5Iik7CisgICAgICAgICAgZ290byBjbGVhbnVwX29pZF9wYXRoOworICAgICAgICB9CisKKyAg ICAgIGNyaXRpY2FsX3NpemUgPSBzaXplb2YgKGNyaXRpY2FsKTsKKyAgICAgIHJlc3VsdCA9IGFz bjFfcmVhZF92YWx1ZSAoY2VydCwgY3JpdGljYWxfcGF0aCwgY3JpdGljYWwsICZjcml0aWNhbF9z aXplKTsKKyAgICAgIGlmIChyZXN1bHQgPT0gQVNOMV9FTEVNRU5UX05PVF9GT1VORCkKKyAgICAg ICAgY3JpdGljYWxbMF0gPSAnXDAnOworICAgICAgZWxzZSBpZiAocmVzdWx0ICE9IEFTTjFfU1VD Q0VTUykKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JB RF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIGV4dGVuc2lvbiBjcml0aWNhbGl0eTogJXMiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOworICAg ICAgICAgIGdvdG8gY2xlYW51cF9jcml0aWNhbF9wYXRoOworICAgICAgICB9CisKKyAgICAgIHZh bHVlX3BhdGggPSBncnViX3hhc3ByaW50ZiAoInRic0NlcnRpZmljYXRlLmV4dGVuc2lvbnMuPyVk LmV4dG5WYWx1ZSIsIGV4dCk7CisgICAgICBpZiAodmFsdWVfcGF0aCA9PSBOVUxMKQorICAgICAg ICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwg ImVycm9yIGV4dG5WYWx1ZSBwYXRoIGlzIGVtcHR5Iik7CisgICAgICAgICAgZ290byBjbGVhbnVw X2NyaXRpY2FsX3BhdGg7CisgICAgICAgIH0KKworICAgICAgdmFsdWUgPSBncnViX2FzbjFfYWxs b2NhdGVfYW5kX3JlYWQgKGNlcnQsIHZhbHVlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgImNlcnRpZmljYXRlIGV4dGVuc2lvbiB2YWx1ZSIsICZ2YWx1 ZV9zaXplKTsKKyAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAg ZXJyID0gZ3J1Yl9lcnJubzsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfdmFsdWVfcGF0aDsKKyAg ICAgICAgfQorCisgICAgICAvKgorICAgICAgICogTm93IHdlIG11c3Qgc2VlIGlmIHdlIHJlY29n bmlzZSB0aGUgT0lELgorICAgICAgICogSWYgd2UgaGF2ZSBhbiB1bnJlY29nbmlzZWQgY3JpdGlj YWwgZXh0ZW5zaW9uIHdlIE1VU1QgYmFpbC4KKyAgICAgICAqLworICAgICAgaWYgKGdydWJfc3Ry bmNtcCAoa2V5VXNhZ2Vfb2lkLCBleHRuSUQsIGV4dG5JRF9zaXplKSA9PSAwKQorICAgICAgICB7 CisgICAgICAgICAgZXJyID0gdmVyaWZ5X2tleV91c2FnZSAodmFsdWUsIHZhbHVlX3NpemUpOwor ICAgICAgICAgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICAgICAgICAgIGdvdG8gY2xl YW51cF92YWx1ZTsKKworICAgICAgICAgIHVzYWdlX3ByZXNlbnQrKzsKKyAgICAgICAgfQorICAg ICAgZWxzZSBpZiAoZ3J1Yl9zdHJuY21wIChiYXNpY0NvbnN0cmFpbnRzX29pZCwgZXh0bklELCBl eHRuSURfc2l6ZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IHZlcmlmeV9iYXNp Y19jb25zdHJhaW50cyAodmFsdWUsIHZhbHVlX3NpemUpOworICAgICAgICAgIGlmIChlcnIgIT0g R1JVQl9FUlJfTk9ORSkKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cF92YWx1ZTsKKworICAgICAg ICAgIGNvbnN0cmFpbnRzX3ByZXNlbnQrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoZ3J1 Yl9zdHJuY21wIChleHRlbmRlZEtleVVzYWdlX29pZCwgZXh0bklELCBleHRuSURfc2l6ZSkgPT0g MCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IHZlcmlmeV9leHRlbmRlZF9rZXlfdXNhZ2Ug KHZhbHVlLCB2YWx1ZV9zaXplKTsKKyAgICAgICAgICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUp CisgICAgICAgICAgICBnb3RvIGNsZWFudXBfdmFsdWU7CisKKyAgICAgICAgICBleHRlbmRlZF91 c2FnZV9wcmVzZW50Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGdydWJfc3RybmNtcCAo IlRSVUUiLCBjcml0aWNhbCwgY3JpdGljYWxfc2l6ZSkgPT0gMCkKKyAgICAgICAgeworICAgICAg ICAgIC8qCisgICAgICAgICAgICogUGVyIHRoZSBSRkMsIHdlIG11c3Qgbm90IHByb2Nlc3MgYSBj ZXJ0aWZpY2F0ZSB3aXRoCisgICAgICAgICAgICogYSBjcml0aWNhbCBleHRlbnNpb24gd2UgZG8g bm90IHVuZGVyc3RhbmQuCisgICAgICAgICAgICovCisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJv ciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAi dW5oYW5kbGVkIGNyaXRpY2FsIHg1MDkgZXh0ZW5zaW9uIHdpdGggT0lEICVzIiwgZXh0bklEKTsK KyAgICAgICAgICBnb3RvIGNsZWFudXBfdmFsdWU7CisgICAgICAgIH0KKworICAgICAgZ3J1Yl9m cmVlICh2YWx1ZSk7CisgICAgICBncnViX2ZyZWUgKHZhbHVlX3BhdGgpOworICAgICAgZ3J1Yl9m cmVlIChjcml0aWNhbF9wYXRoKTsKKyAgICAgIGdydWJfZnJlZSAob2lkX3BhdGgpOworICAgIH0K KworICBpZiAodXNhZ2VfcHJlc2VudCAhPSAxKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVC X0VSUl9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBu dW1iZXIgb2YgS2V5IFVzYWdlIGV4dGVuc2lvbnMgLSBleHBlY3RlZCAxLCBnb3QgJWQiLAorICAg ICAgICAgICAgICAgICAgICAgICB1c2FnZV9wcmVzZW50KTsKKworICBpZiAoY29uc3RyYWludHNf cHJlc2VudCAhPSAxKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9U WVBFLAorICAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBudW1iZXIgb2YgYmFzaWMg Y29uc3RyYWludHMgZXh0ZW5zaW9ucyAtIGV4cGVjdGVkIDEsIGdvdCAlZCIsCisgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0cmFpbnRzX3ByZXNlbnQpOworCisgIGlmIChleHRlbmRlZF91c2Fn ZV9wcmVzZW50ID4gMSkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVf VFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgbnVtYmVyIG9mIEV4dGVu ZGVkIEtleSBVc2FnZSBleHRlbnNpb25zIC0gZXhwZWN0ZWQgMCBvciAxLCBnb3QgJWQiLAorICAg ICAgICAgICAgICAgICAgICAgICBleHRlbmRlZF91c2FnZV9wcmVzZW50KTsKKworICByZXR1cm4g R1JVQl9FUlJfTk9ORTsKKworIGNsZWFudXBfdmFsdWU6CisgIGdydWJfZnJlZSAodmFsdWUpOwor IGNsZWFudXBfdmFsdWVfcGF0aDoKKyAgZ3J1Yl9mcmVlICh2YWx1ZV9wYXRoKTsKKyBjbGVhbnVw X2NyaXRpY2FsX3BhdGg6CisgIGdydWJfZnJlZSAoY3JpdGljYWxfcGF0aCk7CisgY2xlYW51cF9v aWRfcGF0aDoKKyAgZ3J1Yl9mcmVlIChvaWRfcGF0aCk7CisKKyAgcmV0dXJuIGVycjsKK30KKwor LyoKKyAqIFBhcnNlIGEgY2VydGlmaWNhdGUgd2hvc2UgREVSLWVuY29kZWQgZm9ybSBpcyBpbiBA ZGF0YSwgb2Ygc2l6ZSBAZGF0YV9zaXplLgorICogUmV0dXJuIHRoZSByZXN1bHRzIGluIEByZXN1 bHRzLCB3aGljaCBtdXN0IHBvaW50IHRvIGFuIGFsbG9jYXRlZCB4NTA5IGNlcnRpZmljYXRlLgor ICovCitncnViX2Vycl90CitwYXJzZV94NTA5X2NlcnRpZmljYXRlIChjb25zdCB2b2lkICpkYXRh LCBncnViX3NpemVfdCBkYXRhX3NpemUsIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpyZXN1bHRz KQoreworICBpbnQgcmVzdWx0ID0gMDsKKyAgYXNuMV9ub2RlIGNlcnQ7CisgIGdydWJfZXJyX3Qg ZXJyOworICBpbnQgc2l6ZTsKKyAgaW50IHRtcF9zaXplOworCisgIGlmIChkYXRhX3NpemUgPiBH UlVCX0lOVF9NQVgpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9SQU5H RSwKKyAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBwYXJzZSBhIGNlcnRpZmljYXRlIHdo ZXJlIGRhdGEgc2l6ZSA+IEdSVUJfSU5UX01BWCIpOworICBzaXplID0gKGludCkgZGF0YV9zaXpl OworCisgIHJlc3VsdCA9IGFzbjFfY3JlYXRlX2VsZW1lbnQgKGdydWJfZ251dGxzX3BraXhfYXNu LCAiUEtJWDEuQ2VydGlmaWNhdGUiLCAmY2VydCk7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUND RVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAg ICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSBBU04uMSBzdHJ1Y3R1cmUgZm9y IGNlcnRpZmljYXRlOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3Ig KHJlc3VsdCkpOworCisgIHJlc3VsdCA9IGFzbjFfZGVyX2RlY29kaW5nMiAoJmNlcnQsIGRhdGEs ICZzaXplLCBBU04xX0RFQ09ERV9GTEFHX1NUUklDVF9ERVIsIGFzbjFfZXJyb3IpOworICBpZiAo cmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChH UlVCX0VSUl9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5v dCBwYXJzZSBERVIgZm9yIGNlcnRpZmljYXRlOiAlcyIsIGFzbjFfZXJyb3IpOworICAgICAgZ290 byBjbGVhbnVwOworICAgIH0KKworICAvKgorICAgKiBUQlNDZXJ0aWZpY2F0ZSAgOjo9ICBTRVFV RU5DRSB7CisgICAqICAgICB2ZXJzaW9uICAgICAgICAgWzBdICBFWFBMSUNJVCBWZXJzaW9uIERF RkFVTFQgdjEKKyAgICovCisgIGVyciA9IGNoZWNrX3ZlcnNpb24gKGNlcnQpOworICBpZiAoZXJy ICE9IEdSVUJfRVJSX05PTkUpCisgICAgZ290byBjbGVhbnVwOworCisgIC8qCisgICAqIHNlcmlh bE51bWJlciAgICAgICAgIENlcnRpZmljYXRlU2VyaWFsTnVtYmVyLAorICAgKgorICAgKiBDZXJ0 aWZpY2F0ZVNlcmlhbE51bWJlciAgOjo9ICBJTlRFR0VSCisgICAqLworICByZXN1bHRzLT5zZXJp YWwgPSBncnViX2FzbjFfYWxsb2NhdGVfYW5kX3JlYWQgKGNlcnQsICJ0YnNDZXJ0aWZpY2F0ZS5z ZXJpYWxOdW1iZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJjZXJ0aWZpY2F0ZSBzZXJpYWwgbnVtYmVyIiwgJnRtcF9zaXplKTsKKyAgaWYgKHJl c3VsdHMtPnNlcmlhbCA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJybm87Cisg ICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorICAvKgorICAgKiBJdCdzIHNhZmUgdG8gY2FzdCB0 aGUgc2lnbmVkIGludCB0byBhbiB1bnNpZ25lZCBoZXJlLCB3ZSBrbm93CisgICAqIGxlbmd0aCBp cyBub24tbmVnYXRpdmUuCisgICAqLworICByZXN1bHRzLT5zZXJpYWxfbGVuID0gdG1wX3NpemU7 CisKKyAgLyoKKyAgICogc2lnbmF0dXJlICAgICAgICAgICAgQWxnb3JpdGhtSWRlbnRpZmllciwK KyAgICoKKyAgICogV2UgZG9uJ3QgbG9hZCB0aGUgc2lnbmF0dXJlIG9yIGlzc3VlciBhdCB0aGUg bW9tZW50LAorICAgKiBhcyB3ZSBkb24ndCBhdHRlbXB0IHg1MDkgdmVyaWZpY2F0aW9uLgorICAg Ki8KKworICAvKgorICAgKiB2YWxpZGl0eSAgICAgICAgICAgICBWYWxpZGl0eSwKKyAgICoKKyAg ICogVmFsaWRpdHkgOjo9IFNFUVVFTkNFIHsKKyAgICogICAgIG5vdEJlZm9yZSAgICAgIFRpbWUs CisgICAqICAgICBub3RBZnRlciAgICAgICBUaW1lIH0KKyAgICoKKyAgICogV2UgY2FuJ3QgdmFs aWRhdGUgdGhpcyByZWFzb25hYmx5LCB3ZSBoYXZlIG5vIHRydWUgdGltZSBzb3VyY2Ugb24gc2V2 ZXJhbAorICAgKiBwbGF0Zm9ybXMuIEZvciBub3cgd2UgZG8gbm90IHBhcnNlIHRoZW0uCisgICAq LworCisgIC8qCisgICAqIGlzc3VlciAgICAgICAgICAgICAgTmFtZSwKKyAgICoKKyAgICogVGhp cyBpcyBhbiBYNTAxIG5hbWUsIHdlIHBhcnNlIG91dCBqdXN0IHRoZSBDTi4KKyAgICovCisgIGVy ciA9IHJlYWRfbmFtZSAoY2VydCwgInRic0NlcnRpZmljYXRlLmlzc3VlciIsICZyZXN1bHRzLT5p c3N1ZXIsICZyZXN1bHRzLT5pc3N1ZXJfbGVuKTsKKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05F KQorICAgIGdvdG8gY2xlYW51cF9zZXJpYWw7CisKKyAgLyoKKyAgICogc3ViamVjdCAgICAgICAg ICAgICAgTmFtZSwKKyAgICoKKyAgICogVGhpcyBpcyBhbiBYNTAxIG5hbWUsIHdlIHBhcnNlIG91 dCBqdXN0IHRoZSBDTi4KKyAgICovCisgIGVyciA9IHJlYWRfbmFtZSAoY2VydCwgInRic0NlcnRp ZmljYXRlLnN1YmplY3QiLCAmcmVzdWx0cy0+c3ViamVjdCwgJnJlc3VsdHMtPnN1YmplY3RfbGVu KTsKKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAgIGdvdG8gY2xlYW51cF9pc3N1ZXI7 CisKKyAgLyoKKyAgICogVEJTQ2VydGlmaWNhdGUgIDo6PSAgU0VRVUVOQ0UgIHsKKyAgICogICAg Li4uCisgICAqICAgIHN1YmplY3RQdWJsaWNLZXlJbmZvIFN1YmplY3RQdWJsaWNLZXlJbmZvLAor ICAgKiAgICAuLi4KKyAgICovCisgIGVyciA9IGdydWJfeDUwOV9yZWFkX3N1YmplY3RfcHVibGlj X2tleSAoY2VydCwgcmVzdWx0cyk7CisgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICBn b3RvIGNsZWFudXBfbmFtZTsKKworICAvKgorICAgKiBUQlNDZXJ0aWZpY2F0ZSAgOjo9ICBTRVFV RU5DRSAgeworICAgKiAgICAuLi4KKyAgICogICAgZXh0ZW5zaW9ucyAgICAgIFszXSAgRVhQTElD SVQgRXh0ZW5zaW9ucyBPUFRJT05BTAorICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtLSBJ ZiBwcmVzZW50LCB2ZXJzaW9uIE1VU1QgYmUgdjMKKyAgICogfQorICAgKi8KKyAgZXJyID0gdmVy aWZ5X2V4dGVuc2lvbnMgKGNlcnQpOworICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCisgICAg Z290byBjbGVhbnVwX21waXM7CisKKyAgLyoKKyAgICogV2UgZG8gbm90IHJlYWQgb3IgY2hlY2sg dGhlIHNpZ25hdHVyZSBvbiB0aGUgY2VydGlmaWNhdGU6CisgICAqIGFzIGRpc2N1c3NlZCB3ZSBk byBub3QgdHJ5IHRvIHZhbGlkYXRlIHRoZSBjZXJ0aWZpY2F0ZSBidXQgdHJ1c3QKKyAgICogaXQg aW1wbGljdGx5LgorICAgKi8KKyAgYXNuMV9kZWxldGVfc3RydWN0dXJlICgmY2VydCk7CisKKyAg cmV0dXJuIEdSVUJfRVJSX05PTkU7CisKKyBjbGVhbnVwX21waXM6CisgIF9nY3J5X21waV9yZWxl YXNlIChyZXN1bHRzLT5tcGlzWzBdKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHJlc3VsdHMtPm1w aXNbMV0pOworIGNsZWFudXBfbmFtZToKKyAgZ3J1Yl9mcmVlIChyZXN1bHRzLT5zdWJqZWN0KTsK KyBjbGVhbnVwX2lzc3VlcjoKKyAgZ3J1Yl9mcmVlIChyZXN1bHRzLT5pc3N1ZXIpOworIGNsZWFu dXBfc2VyaWFsOgorICBncnViX2ZyZWUgKHJlc3VsdHMtPnNlcmlhbCk7CisgY2xlYW51cDoKKyAg YXNuMV9kZWxldGVfc3RydWN0dXJlICgmY2VydCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworLyoK KyAqIFJlbGVhc2UgYWxsIHRoZSBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgeDUwOSBjZXJ0 aWZpY2F0ZS4KKyAqIElmIHRoZSBjYWxsZXIgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHRoZSBjZXJ0 aWZpY2F0ZSwgaXQgbXVzdCBmcmVlIGl0LgorICogVGhlIGNhbGxlciBpcyBhbHNvIHJlc3BvbnNp YmxlIGZvciBtYWludGVuYW5jZSBvZiB0aGUgbGlua2VkIGxpc3QuCisgKi8KK3ZvaWQKK2NlcnRp ZmljYXRlX3JlbGVhc2UgKHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpjZXJ0KQoreworICBncnVi X2ZyZWUgKGNlcnQtPmlzc3Vlcik7CisgIGdydWJfZnJlZSAoY2VydC0+c3ViamVjdCk7CisgIGdy dWJfZnJlZSAoY2VydC0+c2VyaWFsKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKGNlcnQtPm1waXNb MF0pOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoY2VydC0+bXBpc1sxXSk7Cit9Ci0tIAoyLjM5LjUg KEFwcGxlIEdpdC0xNTQpCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KR3J1Yi1kZXZlbCBtYWlsaW5nIGxpc3QKR3J1Yi1kZXZlbEBnbnUub3JnCmh0dHBz Oi8vbGlzdHMuZ251Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2dydWItZGV2ZWwK