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 91945CAC592 for ; Mon, 22 Sep 2025 09:31:29 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0crT-0001Ih-R9; Mon, 22 Sep 2025 05:29:32 -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 1v0crQ-0001Hu-I4 for grub-devel@gnu.org; Mon, 22 Sep 2025 05:29:29 -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 1v0crG-0007MO-FI for grub-devel@gnu.org; Mon, 22 Sep 2025 05:29:28 -0400 Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 58M66kGT022074; Mon, 22 Sep 2025 09:29: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=95QUX6uuaf7VonYl4 dr8jZ4tMxIT/YGCgW7EpmA3tu4=; b=psPr4v8iheKDsWJ4CFUZqH88DObT7o5tG bdyIlTcldJDRPvNTL6Tb4XwzSeC2MN2vPphpb4DCgPl1feyNt0eJs/Hzhd9b17kE yrxpJXXx2ILGIjFb6wTyGPE3EH/7FuzSzxHAPmMKIzU5JiorwIjKMxxNM6U31GhM w/ceTcX3YsPa4swRHnAUxyYIePyS17LEdOdoEfPHssWPPdaDikmoncV+lUYDwoJm XJIEaK+7cPCjWUklSwZFRZay5bFVpvXL+3z50glOgYfEBXyteQlJ6CUfDjN6wY5O RSRiXLUE4ig58A/qQLAiHXrg8WDEhqRVy2teMut9sc/2a7NT4lB/Q== Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 499ksbhxr4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 22 Sep 2025 09:29:12 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 58M8sJpI018476; Mon, 22 Sep 2025 09:29:11 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 49a7kmdegy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 22 Sep 2025 09:29:11 +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 58M9T74A44630328 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 22 Sep 2025 09:29:07 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 176A02004B; Mon, 22 Sep 2025 09:29:07 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3FD3920040; Mon, 22 Sep 2025 09:29:04 +0000 (GMT) Received: from localhost.localdomain (unknown [9.124.218.27]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 22 Sep 2025 09:29:04 +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 v12 08/22] appended signatures: Parse X.509 certificates Date: Mon, 22 Sep 2025 14:57:49 +0530 Message-ID: <20250922092814.39630-9-sudhakar@linux.ibm.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250922092814.39630-1-sudhakar@linux.ibm.com> References: <20250922092814.39630-1-sudhakar@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: N5MCnhWSdaebhgq5Ht4J-BLZBWPavYfl X-Proofpoint-GUID: N5MCnhWSdaebhgq5Ht4J-BLZBWPavYfl X-Authority-Analysis: v=2.4 cv=SdH3duRu c=1 sm=1 tr=0 ts=68d116e8 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=yJojWOMRYYMA:10 a=mDV3o1hIAAAA:8 a=20KFwNOVAAAA:8 a=iox4zFpeAAAA:8 a=JuTF4qcAAAAA:8 a=VnNF1IyMAAAA:8 a=yPCof4ZbAAAA:8 a=1v2ztiOKZ6MkV5qvpLgA:9 a=WzC6qhA0u3u7Ye7llzcV:22 a=WlT8qwTXB_Kj6um4hl3b:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwOTIwMDAyMCBTYWx0ZWRfX8awQI1BVn1hq jluBQneO4M5gNjciAedo8noR+1PMQuBIyMlWo06YqLEOyVmk3W+3TDtNiQVsahGvVsn+Au/NOVW bVQYB0Yc4HZORwXlKKJkz/IcDlzybNz0pXXxa3Hq9IEk9xMUZz8+4oDVnGEqJSU/pe/Oc4f0EYr ALBHvqHDhl9/zEtiR56DmBhtEUYJZPIIUd0Zu+Ry1gQ+TFw46OyScPTgjRFDY8n6LkY/P2ePoan gKnY7IycwCxMlQ2lZ9f187WuorVLqHQ37o5ocF/h80YEnTl7afpYNLb8m+5B6kM3gpm6d0BSIfx kxgdWBggWbzVAV8pnmPgUTL2e2mFY9JSkyCM7gH0g7k0wW+ebu8n6vH3L1hDvC2oLn05YYNkH7T rLG6S1Cy 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-09-22_01,2025-09-19_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 phishscore=0 spamscore=0 bulkscore=0 priorityscore=1501 clxscore=1015 adultscore=0 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2509200020 Received-SPF: pass client-ip=148.163.156.1; envelope-from=sudhakar@linux.ibm.com; helo=mx0a-001b2d01.pphosted.com X-Spam_score_int: -23 X-Spam_score: -2.4 X-Spam_bar: -- X-Spam_report: (-2.4 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=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 VGhpcyBjb2RlIGFsbG93cyB1cyB0byBwYXJzZToKCiAtIFguNTA5IGNlcnRpZmljYXRlczogYXQg bGVhc3QgZW5vdWdoIHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlcyBvbiB0aGUKICAgUEtDUyM3IG1l c3NhZ2VzLiBXZSBleHBlY3QgdGhhdCB0aGUgY2VydGlmaWNhdGVzIGVtYmVkZGVkIGluIEdSVUIg d2lsbAogICBiZSBsZWFmIGNlcnRpZmljYXRlcywgbm90IENBIGNlcnRpZmljYXRlcy4gVGhlIHBh cnNlciBlbmZvcmNlcyB0aGlzLgoKIC0gWC41MDkgY2VydGlmaWNhdGVzIHN1cHBvcnQgdGhlIEV4 dGVuZGVkIEtleSBVc2FnZSBleHRlbnNpb24gYW5kIGhhbmRsZQogICBpdCBieSB2ZXJpZnlpbmcg dGhhdCB0aGUgY2VydGlmaWNhdGUgaGFzIGEgQ29kZSBTaWduaW5nIHVzYWdlLgoKU2lnbmVkLW9m Zi1ieTogSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJtQHJlZGhhdC5jb20+ICMgRUtV IHN1cHBvcnQKUmVwb3J0ZWQtYnk6IE1pY2hhbCBTdWNoYW5layA8bXN1Y2hhbmVrQHN1c2UuY29t PiAjIGtleSB1c2FnZSBpc3N1ZQpTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgQXh0ZW5zIDxkamFAYXh0 ZW5zLm5ldD4KU2lnbmVkLW9mZi1ieTogU3VkaGFrYXIgS3VwcHVzYW15IDxzdWRoYWthckBsaW51 eC5pYm0uY29tPgpSZXZpZXdlZC1ieTogU3RlZmFuIEJlcmdlciA8c3RlZmFuYkBsaW51eC5pYm0u Y29tPgpSZXZpZXdlZC1ieTogQXZuaXNoIENob3VoYW4gPGF2bmlzaEBsaW51eC5pYm0uY29tPgpS ZXZpZXdlZC1ieTogRGFuaWVsIEtpcGVyIDxkYW5pZWwua2lwZXJAb3JhY2xlLmNvbT4KLS0tCiBn cnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuaCB8ICA1MyArCiBncnVi LWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcveDUwOS5jICAgICAgICB8IDk3OSArKysrKysrKysr KysrKysrKysrCiBpbmNsdWRlL2dydWIvY3J5cHRvLmggICAgICAgICAgICAgICAgICAgICAgICB8 ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDEwMzMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGdydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy94NTA5LmMKCmRpZmYgLS1naXQg YS9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuaCBiL2dydWItY29y ZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5oCmluZGV4IGM2ZTM1NjBlYi4uYWQ2 OTRmOGNhIDEwMDY0NAotLS0gYS9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5k ZWRzaWcuaAorKysgYi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcu aApAQCAtMjUsNiArMjUsNDQgQEAgZXh0ZXJuIGFzbjFfbm9kZSBncnViX2dudXRsc19wa2l4X2Fz bjsKIAogI2RlZmluZSBHUlVCX01BWF9PSURfTEVOICAgICAgICAgMzIKIAorLyogUlNBIHB1Ymxp YyBrZXkuICovCisjZGVmaW5lIEdSVUJfTUFYX01QSSAgICAgICAgICAgICAyCisjZGVmaW5lIEdS VUJfUlNBX1BLX01PRFVMVVMgICAgICAwCisjZGVmaW5lIEdSVUJfUlNBX1BLX0VYUE9ORU5UICAg ICAxCisKKy8qIENlcnRpZmljYXRlIGZpbmdlcnByaW50LiAqLworI2RlZmluZSBHUlVCX01BWF9G SU5HRVJQUklOVCAgICAgMworI2RlZmluZSBHUlVCX0ZJTkdFUlBSSU5UX1NIQTI1NiAgMAorI2Rl ZmluZSBHUlVCX0ZJTkdFUlBSSU5UX1NIQTM4NCAgMQorI2RlZmluZSBHUlVCX0ZJTkdFUlBSSU5U X1NIQTUxMiAgMgorCisvKiBNYXggc2l6ZSBvZiBoYXNoIGRhdGEuICovCisjZGVmaW5lIEdSVUJf TUFYX0hBU0hfTEVOICAgICAgICA2NAorCisvKgorICogT25lIG9yIG1vcmUgeDUwOSBjZXJ0aWZp Y2F0ZXMuCisgKiBXZSBkbyBsaW1pdGVkIHBhcnNpbmc6CisgKiBleHRyYWN0aW5nIG9ubHkgdGhl IHZlcnNpb24sIHNlcmlhbCwgaXNzdWVyLCBzdWJqZWN0LCBSU0EgcHVibGljIGtleQorICogYW5k IGtleSBzaXplLgorICogQWxzbywgaG9sZCB0aGUgc2hhMjU2LCBzaGEzODQsIGFuZCBzaGE1MTIg ZmluZ2VycHJpbnQgb2YgdGhlIGNlcnRpZmljYXRlLgorICovCitzdHJ1Y3QgeDUwOV9jZXJ0aWZp Y2F0ZQoreworICBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqbmV4dDsKKyAgZ3J1Yl91aW50OF90 IHZlcnNpb247CisgIGdydWJfdWludDhfdCAqc2VyaWFsOworICBncnViX3NpemVfdCBzZXJpYWxf bGVuOworICBjaGFyICppc3N1ZXI7CisgIGdydWJfc2l6ZV90IGlzc3Vlcl9sZW47CisgIGNoYXIg KnN1YmplY3Q7CisgIGdydWJfc2l6ZV90IHN1YmplY3RfbGVuOworICAvKiBXZSBvbmx5IHN1cHBv cnQgUlNBIHB1YmxpYyBrZXlzLiBUaGlzIGVuY29kZXMgW21vZHVsdXMsIHB1YmxpY0V4cG9uZW50 XS4gKi8KKyAgZ2NyeV9tcGlfdCBtcGlzW0dSVUJfTUFYX01QSV07CisgIGdydWJfaW50MzJfdCBt b2R1bHVzX3NpemU7CisgIGdydWJfdWludDhfdCBmaW5nZXJwcmludFtHUlVCX01BWF9GSU5HRVJQ UklOVF1bR1JVQl9NQVhfSEFTSF9MRU5dOworfTsKK3R5cGVkZWYgc3RydWN0IHg1MDlfY2VydGlm aWNhdGUgZ3J1Yl94NTA5X2NlcnRfdDsKKwogLyogQSBQS0NTIzcgc2lnbmVkIGRhdGEgc2lnbmVy IGluZm8uICovCiBzdHJ1Y3QgcGtjczdfc2lnbmVyCiB7CkBAIC00NSw2ICs4MywyMSBAQCBzdHJ1 Y3QgcGtjczdfZGF0YQogfTsKIHR5cGVkZWYgc3RydWN0IHBrY3M3X2RhdGEgZ3J1Yl9wa2NzN19k YXRhX3Q7CiAKKy8qCisgKiBJbXBvcnQgYSBERVItZW5jb2RlZCBjZXJ0aWZpY2F0ZSBhdCAnZGF0 YScsIG9mIHNpemUgJ3NpemUnLgorICogUGxhY2UgdGhlIHJlc3VsdHMgaW50byAncmVzdWx0cycs IHdoaWNoIG11c3QgYmUgYWxyZWFkeSBhbGxvY2F0ZWQuCisgKi8KK2V4dGVybiBncnViX2Vycl90 CitncnViX3g1MDlfY2VydF9wYXJzZSAoY29uc3Qgdm9pZCAqZGF0YSwgZ3J1Yl9zaXplX3Qgc2l6 ZSwgZ3J1Yl94NTA5X2NlcnRfdCAqcmVzdWx0cyk7CisKKy8qCisgKiBSZWxlYXNlIGFsbCB0aGUg c3RvcmFnZSBhc3NvY2lhdGVkIHdpdGggdGhlIHg1MDkgY2VydGlmaWNhdGUuCisgKiBJZiB0aGUg Y2FsbGVyIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0aGUgY2VydGlmaWNhdGUsIGl0IG11c3QgZnJl ZSBpdC4KKyAqIFRoZSBjYWxsZXIgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgbWFpbnRlbmFuY2Ug b2YgdGhlIGxpbmtlZCBsaXN0LgorICovCitleHRlcm4gdm9pZAorZ3J1Yl94NTA5X2NlcnRfcmVs ZWFzZSAoZ3J1Yl94NTA5X2NlcnRfdCAqY2VydCk7CisKIC8qCiAgKiBQYXJzZSBhIFBLQ1MjNyBt ZXNzYWdlLCB3aGljaCBtdXN0IGJlIGEgc2lnbmVkIGRhdGEgbWVzc2FnZS4KICAqIFRoZSBtZXNz YWdlIG11c3QgYmUgaW4gJ3NpZ2J1ZicgYW5kIG9mIHNpemUgJ2RhdGFfc2l6ZScuIFRoZSByZXN1 bHQgaXMKZGlmZiAtLWdpdCBhL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy94NTA5LmMg Yi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcveDUwOS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMC4uOWFjMTZmOGNlCi0tLSAvZGV2L251bGwKKysrIGIvZ3J1Yi1j b3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL3g1MDkuYwpAQCAtMCwwICsxLDk3OSBAQAorLyoKKyAq ICBHUlVCICAtLSAgR1JhbmQgVW5pZmllZCBCb290bG9hZGVyCisgKiAgQ29weXJpZ2h0IChDKSAy MDIwLCAyMDIyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICogIENvcHlyaWdodCAo QykgMjAyMCwgMjAyMiwgMjAyNSBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgR1JVQiBpcyBmcmVl IHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisgKgorICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25n IHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KyAqLworCisjaW5jbHVkZSA8bGlidGFzbjEuaD4KKyNpbmNsdWRlIDxncnViL3R5cGVzLmg+Cisj aW5jbHVkZSA8Z3J1Yi9lcnIuaD4KKyNpbmNsdWRlIDxncnViL21tLmg+CisjaW5jbHVkZSA8Z3J1 Yi9jcnlwdG8uaD4KKyNpbmNsdWRlIDxncnViL21pc2MuaD4KKyNpbmNsdWRlIDxncnViL2djcnlw dC9nY3J5cHQuaD4KKworI2luY2x1ZGUgImFwcGVuZGVkc2lnLmgiCisKK3N0YXRpYyBjaGFyIGFz bjFfZXJyb3JbQVNOMV9NQVhfRVJST1JfREVTQ1JJUFRJT05fU0laRV07CisKKworLyogUkZDIDMy NzkgMi4zLjEgIFJTQSBLZXlzLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKnJzYUVuY3J5cHRpb25f b2lkID0gIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjsKKworLyogUkZDIDUyODAgQXBwZW5kaXggQS4g Ki8KK3N0YXRpYyBjb25zdCBjaGFyICpjb21tb25OYW1lX29pZCA9ICIyLjUuNC4zIjsKKworLyog UkZDIDUyODAgNC4yLjEuMyBLZXkgVXNhZ2UuICovCitzdGF0aWMgY29uc3QgY2hhciAqa2V5VXNh Z2Vfb2lkID0gIjIuNS4yOS4xNSI7CisKK3N0YXRpYyBjb25zdCBncnViX3VpbnQ4X3QgZGlnaXRh bFNpZ25hdHVyZVVzYWdlID0gMHg4MDsKKworLyogUkZDIDUyODAgNC4yLjEuOSBCYXNpYyBDb25z dHJhaW50cy4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICpiYXNpY0NvbnN0cmFpbnRzX29pZCA9ICIy LjUuMjkuMTkiOworCisvKiBSRkMgNTI4MCA0LjIuMS4xMiBFeHRlbmRlZCBLZXkgVXNhZ2UuICov CitzdGF0aWMgY29uc3QgY2hhciAqZXh0ZW5kZWRLZXlVc2FnZV9vaWQgPSAiMi41LjI5LjM3IjsK K3N0YXRpYyBjb25zdCBjaGFyICpjb2RlU2lnbmluZ1VzYWdlX29pZCA9ICIxLjMuNi4xLjUuNS43 LjMuMyI7CisKKy8qCisgKiBSRkMgMzI3OSAyLjMuMQorICoKKyAqICBUaGUgUlNBIHB1YmxpYyBr ZXkgTVVTVCBiZSBlbmNvZGVkIHVzaW5nIHRoZSBBU04uMSB0eXBlIFJTQVB1YmxpY0tleToKKyAq CisgKiAgICAgUlNBUHVibGljS2V5IDo6PSBTRVFVRU5DRSB7CisgKiAgICAgICAgbW9kdWx1cyAg ICAgICAgICAgIElOVEVHRVIsICAgIC0tIG4KKyAqICAgICAgICBwdWJsaWNFeHBvbmVudCAgICAg SU5URUdFUiAgfSAgLS0gZQorICoKKyAqICB3aGVyZSBtb2R1bHVzIGlzIHRoZSBtb2R1bHVzIG4s IGFuZCBwdWJsaWNFeHBvbmVudCBpcyB0aGUgcHVibGljCisgKiAgZXhwb25lbnQgZS4KKyAqLwor c3RhdGljIGdydWJfZXJyX3QKK2dydWJfcGFyc2VfcnNhX3B1YmtleSAoZ3J1Yl91aW50OF90ICpk ZXIsIGdydWJfaW50MzJfdCBkZXJzaXplLCBncnViX3g1MDlfY2VydF90ICpjZXJ0aWZpY2F0ZSkK K3sKKyAgZ3J1Yl9pbnQzMl90IHJlc3VsdDsKKyAgYXNuMV9ub2RlIHNwayA9IE5VTEw7CisgIGdy dWJfdWludDhfdCAqbV9kYXRhLCAqZV9kYXRhOworICBncnViX2ludDMyX3QgbV9zaXplLCBlX3Np 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 X21fbXBpOworICAgIH0KKworICAvKiBSU0Ega2V5IHNpemUgaW4gYml0cy4gKi8KKyAgY2VydGlm aWNhdGUtPm1vZHVsdXNfc2l6ZSA9IChtX3NpemUgKiA4KSAtIDg7CisKKyAgZ3J1Yl9mcmVlIChl X2RhdGEpOworICBncnViX2ZyZWUgKG1fZGF0YSk7CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAo JnNwayk7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisKKyBjbGVhbnVwX21fbXBpOgorICBf Z2NyeV9tcGlfcmVsZWFzZSAoY2VydGlmaWNhdGUtPm1waXNbMF0pOworIGNsZWFudXBfZV9kYXRh OgorICBncnViX2ZyZWUgKGVfZGF0YSk7CisgY2xlYW51cF9tX2RhdGE6CisgIGdydWJfZnJlZSAo bV9kYXRhKTsKKyBjbGVhbnVwOgorICBhc24xX2RlbGV0ZV9zdHJ1Y3R1cmUgKCZzcGspOworCisg IHJldHVybiBlcnI7Cit9CisKKy8qCisgKiBSRkMgNTI4MDoKKyAqICAgU3ViamVjdFB1YmxpY0tl eUluZm8gIDo6PSAgU0VRVUVOQ0UgIHsKKyAqICAgICAgIGFsZ29yaXRobSAgICAgICAgICAgIEFs Z29yaXRobUlkZW50aWZpZXIsCisgKiAgICAgICBzdWJqZWN0UHVibGljS2V5ICAgICBCSVQgU1RS SU5HICB9CisgKgorICogQWxnb3JpdGhtSWRlbnRpZmllcnMgY29tZSBmcm9tIFJGQyAzMjc5LCB3 ZSBhcmUgbm90IHN0cmljdGx5IGNvbXBpbGFudCBhcyB3ZQorICogb25seSBzdXBwb3J0IFJTQSBF bmNyeXB0aW9uLgorICovCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl94NTA5X3JlYWRfc3ViamVj dF9wdWJsaWNfa2V5IChhc24xX25vZGUgYXNuLCBncnViX3g1MDlfY2VydF90ICpyZXN1bHRzKQor eworICBncnViX2ludDMyX3QgcmVzdWx0OworICBncnViX2Vycl90IGVycjsKKyAgY29uc3QgY2hh ciAqYWxnb19uYW1lID0gInRic0NlcnRpZmljYXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvLmFsZ29y aXRobS5hbGdvcml0aG0iOworICBjb25zdCBjaGFyICpwYXJhbXNfbmFtZSA9ICJ0YnNDZXJ0aWZp Y2F0ZS5zdWJqZWN0UHVibGljS2V5SW5mby5hbGdvcml0aG0ucGFyYW1ldGVycyI7CisgIGNvbnN0 IGNoYXIgKnBrX25hbWUgPSAidGJzQ2VydGlmaWNhdGUuc3ViamVjdFB1YmxpY0tleUluZm8uc3Vi amVjdFB1YmxpY0tleSI7CisgIGNoYXIgYWxnb19vaWRbR1JVQl9NQVhfT0lEX0xFTl07CisgIGdy dWJfaW50MzJfdCBhbGdvX3NpemUgPSBzaXplb2YgKGFsZ29fb2lkKTsKKyAgY2hhciBwYXJhbXNf dmFsdWVbMl07CisgIGdydWJfaW50MzJfdCBwYXJhbXNfc2l6ZSA9IHNpemVvZiAocGFyYW1zX3Zh bHVlKTsKKyAgZ3J1Yl91aW50OF90ICprZXlfZGF0YSA9IE5VTEw7CisgIGdydWJfaW50MzJfdCBr ZXlfc2l6ZSA9IDA7CisgIGdydWJfdWludDMyX3Qga2V5X3R5cGU7CisKKyAgLyogQWxnb3JpdGht OiBzZWUgbm90ZXMgZm9yIHJzYUVuY3J5cHRpb25fb2lkLiAqLworICByZXN1bHQgPSBhc24xX3Jl YWRfdmFsdWUgKGFzbiwgYWxnb19uYW1lLCBhbGdvX29pZCwgJmFsZ29fc2l6ZSk7CisgIGlmIChy ZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9C QURfRklMRV9UWVBFLCAiZXJyb3IgcmVhZGluZyB4NTA5IHB1YmxpYyBrZXkgYWxnb3JpdGhtOiAl cyIsCisgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOworCisg IGlmIChncnViX3N0cm5jbXAgKGFsZ29fb2lkLCByc2FFbmNyeXB0aW9uX29pZCwgc2l6ZW9mIChy c2FFbmNyeXB0aW9uX29pZCkpICE9IDApCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJS X05PVF9JTVBMRU1FTlRFRF9ZRVQsCisgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRl ZCB4NTA5IHB1YmxpYyBrZXkgYWxnb3JpdGhtOiAlcyIsIGFsZ29fb2lkKTsKKworICAvKgorICAg KiBSRkMgMzI3OSAyLjMuMQorICAgKiBUaGUgcnNhRW5jcnlwdGlvbiBPSUQgaXMgaW50ZW5kZWQg dG8gYmUgdXNlZCBpbiB0aGUgYWxnb3JpdGhtIGZpZWxkCisgICAqIG9mIGEgdmFsdWUgb2YgdHlw ZSBBbGdvcml0aG1JZGVudGlmaWVyLiAgVGhlIHBhcmFtZXRlcnMgZmllbGQgTVVTVAorICAgKiBo YXZlIEFTTi4xIHR5cGUgTlVMTCBmb3IgdGhpcyBhbGdvcml0aG0gaWRlbnRpZmllci4KKyAgICov CisgIHJlc3VsdCA9IGFzbjFfcmVhZF92YWx1ZSAoYXNuLCBwYXJhbXNfbmFtZSwgcGFyYW1zX3Zh bHVlLCAmcGFyYW1zX3NpemUpOworICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICBy ZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIHJlYWRpbmcg eDUwOSBwdWJsaWMga2V5IHBhcmFtZXRlcnM6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAg YXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisKKyAgaWYgKHBhcmFtc192YWx1ZVswXSAhPSBBU04x X1RBR19OVUxMKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBF LAorICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCB4NTA5IHB1YmxpYyBrZXkgcGFyYW1l dGVyczogZXhwZWN0ZWQgTlVMTCIpOworCisgIC8qCisgICAqIFJGQyAzMjc5IDIuMy4xOiAgVGhl IERFUiBlbmNvZGVkIFJTQVB1YmxpY0tleSBpcyB0aGUgdmFsdWUgb2YgdGhlIEJJVAorICAgKiBT VFJJTkcgc3ViamVjdFB1YmxpY0tleS4KKyAgICovCisgIHJlc3VsdCA9IGFzbjFfcmVhZF92YWx1 ZV90eXBlIChhc24sIHBrX25hbWUsIE5VTEwsICZrZXlfc2l6ZSwgJmtleV90eXBlKTsKKyAgaWYg KHJlc3VsdCAhPSBBU04xX01FTV9FUlJPUikKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9F UlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIHJlYWRpbmcgc2l6ZSBvZiB4NTA5IHB1YmxpYyBrZXk6 ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7Cisg IGlmIChrZXlfdHlwZSAhPSBBU04xX0VUWVBFX0JJVF9TVFJJTkcpCisgICAgcmV0dXJuIGdydWJf ZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJ1bmV4cGVjdGVkIEFTTi4xIHR5cGUgd2hl biByZWFkaW5nIHg1MDkgcHVibGljIGtleTogJXgiLAorICAgICAgICAgICAgICAgICAgICAgICBr ZXlfdHlwZSk7CisKKyAgLyogTGVuZ3RoIGlzIGluIGJpdHMuICovCisgIGtleV9zaXplID0gKGtl eV9zaXplICsgNykgLyA4OworCisgIGtleV9kYXRhID0gZ3J1Yl9tYWxsb2MgKGtleV9zaXplKTsK KyAgaWYgKGtleV9kYXRhID09IE5VTEwpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJS X09VVF9PRl9NRU1PUlksICJvdXQgb2YgbWVtb3J5IGZvciB4NTA5IHB1YmxpYyBrZXkiKTsKKwor ICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGFzbiwgcGtfbmFtZSwga2V5X2RhdGEsICZrZXlf c2l6ZSk7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGdydWJf ZnJlZSAoa2V5X2RhdGEpOworICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9G SUxFX1RZUEUsICJlcnJvciByZWFkaW5nIHB1YmxpYyBrZXkgZGF0YSIpOworICAgIH0KKworICBr ZXlfc2l6ZSA9IChrZXlfc2l6ZSArIDcpIC8gODsKKyAgZXJyID0gZ3J1Yl9wYXJzZV9yc2FfcHVi a2V5IChrZXlfZGF0YSwga2V5X3NpemUsIHJlc3VsdHMpOworICBncnViX2ZyZWUgKGtleV9kYXRh KTsKKworICByZXR1cm4gZXJyOworfQorCisvKiBEZWNvZGUgYSBzdHJpbmcgYXMgZGVmaW5lZCBp biBBcHBlbmRpeCBBLiAqLworc3RhdGljIGdydWJfZXJyX3QKK2RlY29kZV9zdHJpbmcgKGNoYXIg KmRlciwgZ3J1Yl9pbnQzMl90IGRlcl9zaXplLCBjaGFyICoqc3RyaW5nLCBncnViX3NpemVfdCAq c3RyaW5nX3NpemUpCit7CisgIGFzbjFfbm9kZSBzdHJhc247CisgIGdydWJfaW50MzJfdCByZXN1 bHQ7CisgIGNoYXIgKmNob2ljZTsKKyAgZ3J1Yl9pbnQzMl90IGNob2ljZV9zaXplID0gMDsKKyAg Z3J1Yl9pbnQzMl90IHRtcF9zaXplID0gMDsKKyAgZ3J1Yl9lcnJfdCBlcnIgPSBHUlVCX0VSUl9O T05FOworCisgIHJlc3VsdCA9IGFzbjFfY3JlYXRlX2VsZW1lbnQgKGdydWJfZ251dGxzX3BraXhf YXNuLCAiUEtJWDEuRGlyZWN0b3J5U3RyaW5nIiwgJnN0cmFzbik7CisgIGlmIChyZXN1bHQgIT0g QVNOMV9TVUNDRVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVN T1JZLAorICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSBBU04uMSBzdHJ1 Y3R1cmUgZm9yIGNlcnRpZmljYXRlOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIGFzbjFf c3RyZXJyb3IgKHJlc3VsdCkpOworCisgIHJlc3VsdCA9IGFzbjFfZGVyX2RlY29kaW5nMiAoJnN0 cmFzbiwgZGVyLCAmZGVyX3NpemUsIEFTTjFfREVDT0RFX0ZMQUdfU1RSSUNUX0RFUiwgYXNuMV9l cnJvcik7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9 IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAgICAgICAgICAgICAg ICAgICAiY291bGQgbm90IHBhcnNlIERFUiBmb3IgRGlyZWN0b3J5U3RyaW5nOiAlcyIsIGFzbjFf ZXJyb3IpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBjaG9pY2UgPSBncnViX2Fz bjFfYWxsb2NhdGVfYW5kX3JlYWQgKHN0cmFzbiwgIiIsICJEaXJlY3RvcnlTdHJpbmcgY2hvaWNl IiwgJmNob2ljZV9zaXplKTsKKyAgaWYgKGNob2ljZSA9PSBOVUxMKQorICAgIHsKKyAgICAgIGVy ciA9IGdydWJfZXJybm87CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIGlmIChncnVi X3N0cm5jbXAgKCJ1dGY4U3RyaW5nIiwgY2hvaWNlLCBjaG9pY2Vfc2l6ZSkgPT0gMCkKKyAgICB7 CisgICAgICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKHN0cmFzbiwgInV0ZjhTdHJpbmciLCBO VUxMLCAmdG1wX3NpemUpOworICAgICAgaWYgKHJlc3VsdCAhPSBBU04xX01FTV9FUlJPUikKKyAg ICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZ UEUsICJlcnJvciByZWFkaW5nIHNpemUgb2YgVVRGLTggc3RyaW5nOiAlcyIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAgICAgICAgZ290 byBjbGVhbnVwX2Nob2ljZTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZSBpZiAoZ3J1Yl9zdHJu Y21wICgicHJpbnRhYmxlU3RyaW5nIiwgY2hvaWNlLCBjaG9pY2Vfc2l6ZSkgPT0gMCkKKyAgICB7 CisgICAgICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKHN0cmFzbiwgInByaW50YWJsZVN0cmlu ZyIsIE5VTEwsICZ0bXBfc2l6ZSk7CisgICAgICBpZiAocmVzdWx0ICE9IEFTTjFfTUVNX0VSUk9S KQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJ TEVfVFlQRSwgImVycm9yIHJlYWRpbmcgc2l6ZSBvZiBwcmludGFibGVTdHJpbmc6ICVzIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAgICAg ICAgICBnb3RvIGNsZWFudXBfY2hvaWNlOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAg eworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9UX0lNUExFTUVOVEVEX1lFVCwK KyAgICAgICAgICAgICAgICAgICAgICAgICJvbmx5IFVURi04IGFuZCBwcmludGFibGUgRGlyZWN0 b3J5U3RyaW5ncyBhcmUgc3VwcG9ydGVkLCBnb3QgJXMiLAorICAgICAgICAgICAgICAgICAgICAg ICAgY2hvaWNlKTsKKyAgICAgIGdvdG8gY2xlYW51cF9jaG9pY2U7CisgICAgfQorCisgIC8qIFJl YWQgc2l6ZSBkb2VzIG5vdCBpbmNsdWRlIHRyYWlsaW5nIE5VTC4gKi8KKyAgdG1wX3NpemUrKzsK KworICAqc3RyaW5nID0gZ3J1Yl9tYWxsb2MgKHRtcF9zaXplKTsKKyAgaWYgKCpzdHJpbmcgPT0g TlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVN T1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9y IERpcmVjdG9yeVN0cmluZyBjb250ZW50cyIpOworICAgICAgZ290byBjbGVhbnVwX2Nob2ljZTsK KyAgICB9CisKKyAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChzdHJhc24sIGNob2ljZSwgKnN0 cmluZywgJnRtcF9zaXplKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgewor ICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIHJl YWRpbmcgb3V0ICVzIGluIERpcmVjdG9yeVN0cmluZzogJXMiLAorICAgICAgICAgICAgICAgICAg ICAgICAgY2hvaWNlLCBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAgICAgIGdydWJfZnJlZSAo KnN0cmluZyk7CisgICAgICAqc3RyaW5nID0gTlVMTDsKKyAgICAgIGdvdG8gY2xlYW51cF9jaG9p Y2U7CisgICAgfQorCisgICpzdHJpbmdfc2l6ZSA9IHRtcF9zaXplICsgMTsKKyAgKCpzdHJpbmcp W3RtcF9zaXplXSA9ICdcMCc7CisKKyBjbGVhbnVwX2Nob2ljZToKKyAgZ3J1Yl9mcmVlIChjaG9p Y2UpOworIGNsZWFudXA6CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJnN0cmFzbik7CisKKyAg cmV0dXJuIGVycjsKK30KKworLyoKKyAqIFRCU0NlcnRpZmljYXRlICA6Oj0gIFNFUVVFTkNFICB7 CisgKiAgICAgICB2ZXJzaW9uICAgICAgICAgWzBdICBFWFBMSUNJVCBWZXJzaW9uIERFRkFVTFQg djEsCisgKiAuLi4KKyAqCisgKiBWZXJzaW9uICA6Oj0gIElOVEVHRVIgIHsgIHYxKDApLCB2Migx KSwgdjMoMikgIH0KKyAqLworc3RhdGljIGdydWJfZXJyX3QKK2NoZWNrX3ZlcnNpb24gKGFzbjFf bm9kZSBjZXJ0aWZpY2F0ZSwgZ3J1Yl94NTA5X2NlcnRfdCAqcmVzdWx0cykKK3sKKyAgZ3J1Yl9p bnQzMl90IHJjOworICBjb25zdCBjaGFyICpuYW1lID0gInRic0NlcnRpZmljYXRlLnZlcnNpb24i OworICBncnViX3VpbnQ4X3QgdmVyc2lvbjsKKyAgZ3J1Yl9pbnQzMl90IGxlbiA9IHNpemVvZiAo dmVyc2lvbik7CisKKyAgcmMgPSBhc24xX3JlYWRfdmFsdWUgKGNlcnRpZmljYXRlLCBuYW1lLCAm dmVyc2lvbiwgJmxlbik7CisKKyAgLyogUmVxdWlyZSB2ZXJzaW9uIDMuICovCisgIGlmIChyYyAh PSBBU04xX1NVQ0NFU1MgfHwgbGVuICE9IDEpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJf RVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIGNlcnRpZmljYXRlIHZlcnNpb24iKTsK KworICBpZiAodmVyc2lvbiAhPSAweDAyKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VS Ul9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCB4NTA5IGNl cnRpZmljYXRlIHZlcnNpb24sIGV4cGVjdGVkIHYzICgweDAyKSwgZ290IDB4JTAyeC4iLAorICAg ICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uKTsKKworICByZXN1bHRzLT52ZXJzaW9uID0gdmVy c2lvbjsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKworLyoKKyAqIFRoaXMgaXMgYW4g WC41MDEgTmFtZSwgd2hpY2ggaXMgY29tcGxleC4KKyAqCisgKiBGb3Igc2ltcGxpY2l0eSwgd2Ug ZXh0cmFjdCBvbmx5IHRoZSBDTi4KKyAqLworc3RhdGljIGdydWJfZXJyX3QKK3JlYWRfbmFtZSAo YXNuMV9ub2RlIGFzbiwgY29uc3QgY2hhciAqbmFtZV9wYXRoLCBjaGFyICoqbmFtZSwgZ3J1Yl9z aXplX3QgKm5hbWVfc2l6ZSkKK3sKKyAgZ3J1Yl9pbnQzMl90IHNlcV9jb21wb25lbnRzLCBzZXRf Y29tcG9uZW50czsKKyAgZ3J1Yl9pbnQzMl90IHJlc3VsdDsKKyAgZ3J1Yl9pbnQzMl90IGksIGo7 CisgIGNoYXIgKnRvcF9wYXRoLCAqc2V0X3BhdGgsICp0eXBlX3BhdGgsICp2YWxfcGF0aDsKKyAg Y2hhciB0eXBlW0dSVUJfTUFYX09JRF9MRU5dOworICBncnViX2ludDMyX3QgdHlwZV9sZW4gPSBz aXplb2YgKHR5cGUpOworICBncnViX2ludDMyX3Qgc3RyaW5nX3NpemUgPSAwOworICBjaGFyICpz dHJpbmdfZGVyOworICBncnViX2Vycl90IGVycjsKKworICAqbmFtZSA9IE5VTEw7CisKKyAgdG9w X3BhdGggPSBncnViX3hhc3ByaW50ZiAoIiVzLnJkblNlcXVlbmNlIiwgbmFtZV9wYXRoKTsKKyAg aWYgKHRvcF9wYXRoID09IE5VTEwpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09V VF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgYWxsb2NhdGUg bWVtb3J5IGZvciAlcyBuYW1lIHBhcnNpbmcgcGF0aCIsIG5hbWVfcGF0aCk7CisKKyAgcmVzdWx0 ID0gYXNuMV9udW1iZXJfb2ZfZWxlbWVudHMgKGFzbiwgdG9wX3BhdGgsICZzZXFfY29tcG9uZW50 cyk7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9IGdy dWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciBjb3VudGluZyBuYW1lIGNv bXBvbmVudHM6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJl c3VsdCkpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBmb3IgKGkgPSAxOyBpIDw9 IHNlcV9jb21wb25lbnRzOyBpKyspCisgICAgeworICAgICAgc2V0X3BhdGggPSBncnViX3hhc3By aW50ZiAoIiVzLj8lZCIsIHRvcF9wYXRoLCBpKTsKKyAgICAgIGlmIChzZXRfcGF0aCA9PSBOVUxM KQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09G X01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGFsbG9jYXRl IG1lbW9yeSBmb3IgJXMgbmFtZSBzZXQgcGFyc2luZyBwYXRoIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuYW1lX3BhdGgpOworICAgICAgICAgIGdvdG8gY2xlYW51cF9zZXQ7CisgICAg ICAgIH0KKyAgICAgIC8qIFRoaXMgYnJpbmdzIHVzLCBob3BlZnVsbHksIHRvIGEgc2V0LiAqLwor ICAgICAgcmVzdWx0ID0gYXNuMV9udW1iZXJfb2ZfZWxlbWVudHMgKGFzbiwgc2V0X3BhdGgsICZz ZXRfY29tcG9uZW50cyk7CisgICAgICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICAg ICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIGNvdW50aW5nIG5hbWUgc3ViLWNv bXBvbmVudHMgY29tcG9uZW50cyAoZWxlbWVudCAlZCk6ICVzIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpLCBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAgICAgICAgICBnb3RvIGNs ZWFudXBfc2V0OworICAgICAgICB9CisgICAgICBmb3IgKGogPSAxOyBqIDw9IHNldF9jb21wb25l bnRzOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICB0eXBlX3BhdGggPSBncnViX3hhc3ByaW50 ZiAoIiVzLj8lZC4/JWQudHlwZSIsIHRvcF9wYXRoLCBpLCBqKTsKKyAgICAgICAgICBpZiAodHlw ZV9wYXRoID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9IGdydWJf ZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciAlcyBuYW1lIGNvbXBvbmVudCB0 eXBlIHBhdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3BhdGgpOwor ICAgICAgICAgICAgICBnb3RvIGNsZWFudXBfc2V0OworICAgICAgICAgICAgfQorICAgICAgICAg IHR5cGVfbGVuID0gc2l6ZW9mICh0eXBlKTsKKyAgICAgICAgICByZXN1bHQgPSBhc24xX3JlYWRf dmFsdWUgKGFzbiwgdHlwZV9wYXRoLCB0eXBlLCAmdHlwZV9sZW4pOworICAgICAgICAgIGlmIChy ZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlcnIg PSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3IgcmVhZGluZyAlcyBu YW1lIGNvbXBvbmVudCB0eXBlOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5hbWVfcGF0aCwgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAgICAgICAgICAgIGdvdG8g Y2xlYW51cF90eXBlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGdydWJfc3RybmNt cCAodHlwZSwgY29tbW9uTmFtZV9vaWQsIHR5cGVfbGVuKSAhPSAwKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICBncnViX2ZyZWUgKHR5cGVfcGF0aCk7CisgICAgICAgICAgICAgIGNvbnRp bnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgdmFsX3BhdGggPSBncnViX3hhc3ByaW50 ZiAoIiVzLj8lZC4/JWQudmFsdWUiLCB0b3BfcGF0aCwgaSwgaik7CisgICAgICAgICAgaWYgKHZh bF9wYXRoID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGVyciA9IGdydWJf ZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciAlcyBuYW1lIGNvbXBvbmVudCB2 YWx1ZSBwYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9wYXRoKTsK KyAgICAgICAgICAgICAgZ290byBjbGVhbnVwX3R5cGU7CisgICAgICAgICAgICB9CisKKyAgICAg ICAgICBzdHJpbmdfZGVyID0gZ3J1Yl9hc24xX2FsbG9jYXRlX2FuZF9yZWFkIChhc24sIHZhbF9w YXRoLCBuYW1lX3BhdGgsICZzdHJpbmdfc2l6ZSk7CisgICAgICAgICAgaWYgKHN0cmluZ19kZXIg PT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJubzsK KyAgICAgICAgICAgICAgZ290byBjbGVhbnVwX3ZhbF9wYXRoOworICAgICAgICAgICAgfQorCisg ICAgICAgICAgZXJyID0gZGVjb2RlX3N0cmluZyAoc3RyaW5nX2Rlciwgc3RyaW5nX3NpemUsIG5h bWUsIG5hbWVfc2l6ZSk7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIGdvdG8gY2xl YW51cF9zdHJpbmc7CisKKyAgICAgICAgICBncnViX2ZyZWUgKHN0cmluZ19kZXIpOworICAgICAg ICAgIGdydWJfZnJlZSAodHlwZV9wYXRoKTsKKyAgICAgICAgICBncnViX2ZyZWUgKHZhbF9wYXRo KTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICBncnViX2ZyZWUgKHNldF9w YXRoKTsKKyAgICAgIGlmICgqbmFtZSkKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgIGdydWJf ZnJlZSAodG9wX3BhdGgpOworCisgIHJldHVybiBHUlVCX0VSUl9OT05FOworCisgY2xlYW51cF9z dHJpbmc6CisgIGdydWJfZnJlZSAoc3RyaW5nX2Rlcik7CisgY2xlYW51cF92YWxfcGF0aDoKKyAg Z3J1Yl9mcmVlICh2YWxfcGF0aCk7CisgY2xlYW51cF90eXBlOgorICBncnViX2ZyZWUgKHR5cGVf cGF0aCk7CisgY2xlYW51cF9zZXQ6CisgIGdydWJfZnJlZSAoc2V0X3BhdGgpOworIGNsZWFudXA6 CisgIGdydWJfZnJlZSAodG9wX3BhdGgpOworCisgIHJldHVybiBlcnI7Cit9CisKKy8qCisgKiBW ZXJpZnkgdGhlIEtleSBVc2FnZSBleHRlbnNpb24uCisgKiBXZSByZXF1aXJlIHRoZSBEaWdpdGFs IFNpZ25hdHVyZSB1c2FnZS4KKyAqLworc3RhdGljIGdydWJfZXJyX3QKK3ZlcmlmeV9rZXlfdXNh Z2UgKGdydWJfdWludDhfdCAqdmFsdWUsIGdydWJfaW50MzJfdCB2YWx1ZV9zaXplKQoreworICBh c24xX25vZGUgdXNhZ2Vhc247CisgIGdydWJfaW50MzJfdCByZXN1bHQ7CisgIGdydWJfZXJyX3Qg ZXJyID0gR1JVQl9FUlJfTk9ORTsKKyAgZ3J1Yl91aW50OF90IHVzYWdlID0gMHhmZjsKKyAgZ3J1 Yl9pbnQzMl90IHVzYWdlX3NpemUgPSBzaXplb2YgKHVzYWdlX3NpemUpOworCisgIHJlc3VsdCA9 IGFzbjFfY3JlYXRlX2VsZW1lbnQgKGdydWJfZ251dGxzX3BraXhfYXNuLCAiUEtJWDEuS2V5VXNh Z2UiLCAmdXNhZ2Vhc24pOworICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICByZXR1 cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwKKyAgICAgICAgICAgICAgICAg ICAgICAgImNvdWxkIG5vdCBjcmVhdGUgQVNOLjEgc3RydWN0dXJlIGZvciBrZXkgdXNhZ2UiKTsK KworICByZXN1bHQgPSBhc24xX2Rlcl9kZWNvZGluZzIgKCZ1c2FnZWFzbiwgdmFsdWUsICZ2YWx1 ZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTjFfREVDT0RFX0ZMQUdf U1RSSUNUX0RFUiwgYXNuMV9lcnJvcik7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQor ICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisg ICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgcGFyc2luZyBERVIgZm9yIEtleSBVc2FnZTog JXMiLCBhc24xX2Vycm9yKTsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgcmVzdWx0 ID0gYXNuMV9yZWFkX3ZhbHVlICh1c2FnZWFzbiwgIiIsICZ1c2FnZSwgJnVzYWdlX3NpemUpOwor ICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vy cm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3IgcmVhZGluZyBLZXkgVXNhZ2UgdmFs dWU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkp OworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBpZiAoISh1c2FnZSAmIGRpZ2l0YWxT aWduYXR1cmVVc2FnZSkpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf QkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJrZXkgdXNhZ2UgKDB4JXgp IG1pc3NpbmcgRGlnaXRhbCBTaWduYXR1cmUgdXNhZ2UiLCB1c2FnZSk7CisgICAgICBnb3RvIGNs ZWFudXA7CisgICAgfQorCisgY2xlYW51cDoKKyAgYXNuMV9kZWxldGVfc3RydWN0dXJlICgmdXNh Z2Vhc24pOworCisgIHJldHVybiBlcnI7Cit9CisKKy8qCisgKiBCYXNpY0NvbnN0cmFpbnRzIDo6 PSBTRVFVRU5DRSB7CisgKiAgICAgICBjQSAgICAgICAgICAgICAgICAgICAgICBCT09MRUFOIERF RkFVTFQgRkFMU0UsCisgKiAgICAgICBwYXRoTGVuQ29uc3RyYWludCAgICAgICBJTlRFR0VSICgw Li5NQVgpIE9QVElPTkFMIH0KKyAqLworc3RhdGljIGdydWJfZXJyX3QKK3ZlcmlmeV9iYXNpY19j b25zdHJhaW50cyAoZ3J1Yl91aW50OF90ICp2YWx1ZSwgZ3J1Yl9pbnQzMl90IHZhbHVlX3NpemUp Cit7CisgIGFzbjFfbm9kZSBiYXNpY2FzbjsKKyAgZ3J1Yl9pbnQzMl90IHJlc3VsdDsKKyAgZ3J1 Yl9lcnJfdCBlcnIgPSBHUlVCX0VSUl9OT05FOworICBjaGFyIGNBWzZdOyAvKiBGQUxTRSBvciBU UlVFLiAqLworICBncnViX2ludDMyX3QgY0Ffc2l6ZSA9IHNpemVvZiAoY0EpOworCisgIHJlc3Vs dCA9IGFzbjFfY3JlYXRlX2VsZW1lbnQgKGdydWJfZ251dGxzX3BraXhfYXNuLCAiUEtJWDEuQmFz aWNDb25zdHJhaW50cyIsICZiYXNpY2Fzbik7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNT KQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAgICAg ICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSBBU04uMSBzdHJ1Y3R1cmUgZm9yIEJh c2ljIENvbnN0cmFpbnRzIik7CisKKyAgcmVzdWx0ID0gYXNuMV9kZXJfZGVjb2RpbmcyICgmYmFz aWNhc24sIHZhbHVlLCAmdmFsdWVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBU04xX0RFQ09ERV9GTEFHX1NUUklDVF9ERVIsIGFzbjFfZXJyb3IpOworICBpZiAocmVzdWx0 ICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VS Ul9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIHBhcnNpbmcg REVSIGZvciBCYXNpYyBDb25zdHJhaW50czogJXMiLCBhc24xX2Vycm9yKTsKKyAgICAgIGdvdG8g Y2xlYW51cDsKKyAgICB9CisKKyAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChiYXNpY2Fzbiwg ImNBIiwgY0EsICZjQV9zaXplKTsKKyAgaWYgKHJlc3VsdCA9PSBBU04xX0VMRU1FTlRfTk9UX0ZP VU5EKQorICAgIHsKKyAgICAgIC8qIE5vdCBwcmVzZW50LCBkZWZhdWx0IGlzIEZhbHNlLCBzbyB0 aGlzIGlzIE9LLiAqLworICAgICAgZXJyID0gR1JVQl9FUlJfTk9ORTsKKyAgICAgIGdvdG8gY2xl YW51cDsKKyAgICB9CisgIGVsc2UgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgewor ICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIHJl YWRpbmcgQmFzaWMgQ29uc3RyYWludHMgY0EgdmFsdWU6ICVzIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOworICAgICAgZ290byBjbGVhbnVwOworICAg IH0KKworICAvKiBUaGUgY2VydGlmaWNhdGUgbXVzdCBub3QgYmUgYSBDQSBjZXJ0aWZpY2F0ZS4g Ki8KKyAgaWYgKGdydWJfc3RybmNtcCAoIkZBTFNFIiwgY0EsIGNBX3NpemUpICE9IDApCisgICAg eworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgInVuZXhw ZWN0ZWQgQ0EgdmFsdWU6ICVzIiwgY0EpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKwor IGNsZWFudXA6CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJmJhc2ljYXNuKTsKKworICByZXR1 cm4gZXJyOworfQorCisvKgorICogVmVyaWZ5IHRoZSBFeHRlbmRlZCBLZXkgVXNhZ2UgZXh0ZW5z aW9uLgorICogV2UgcmVxdWlyZSB0aGUgQ29kZSBTaWduaW5nIHVzYWdlLgorICoKKyAqIEV4dEtl eVVzYWdlU3ludGF4IDo6PSBTRVFVRU5DRSBTSVpFICgxLi5NQVgpIE9GIEtleVB1cnBvc2VJZAor ICoKKyAqIEtleVB1cnBvc2VJZCA6Oj0gT0JKRUNUIElERU5USUZJRVIKKyAqLworc3RhdGljIGdy dWJfZXJyX3QKK3ZlcmlmeV9leHRlbmRlZF9rZXlfdXNhZ2UgKGdydWJfdWludDhfdCAqdmFsdWUs IGdydWJfaW50MzJfdCB2YWx1ZV9zaXplKQoreworICBhc24xX25vZGUgZXh0ZW5kZWRhc247Cisg IGdydWJfaW50MzJfdCByZXN1bHQsIGNvdW50LCBpID0gMDsKKyAgZ3J1Yl9lcnJfdCBlcnIgPSBH UlVCX0VSUl9OT05FOworICBjaGFyIHVzYWdlW0dSVUJfTUFYX09JRF9MRU5dLCBuYW1lWzNdOwor ICBncnViX2ludDMyX3QgdXNhZ2Vfc2l6ZSA9IHNpemVvZiAodXNhZ2UpOworCisgIHJlc3VsdCA9 IGFzbjFfY3JlYXRlX2VsZW1lbnQgKGdydWJfZ251dGxzX3BraXhfYXNuLCAiUEtJWDEuRXh0S2V5 VXNhZ2VTeW50YXgiLCAmZXh0ZW5kZWRhc24pOworICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VT UykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwKKyAgICAg ICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgQVNOLjEgc3RydWN0dXJlIGZvciBF eHRlbmRlZCBLZXkgVXNhZ2UiKTsKKworICByZXN1bHQgPSBhc24xX2Rlcl9kZWNvZGluZzIgKCZl eHRlbmRlZGFzbiwgdmFsdWUsICZ2YWx1ZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFTTjFfREVDT0RFX0ZMQUdfU1RSSUNUX0RFUiwgYXNuMV9lcnJvcik7CisgIGlmIChy ZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdS VUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgcGFy c2luZyBERVIgZm9yIEV4dGVuZGVkIEtleSBVc2FnZTogJXMiLCBhc24xX2Vycm9yKTsKKyAgICAg IGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgLyogSWYgRUtVcyBhcmUgcHJlc2VudCwgaXQgY2hl Y2tzIHRoZSBwcmVzZW50cyBvZiBDb2RlIFNpZ25pbmcgdXNhZ2UuICovCisgIHJlc3VsdCA9IGFz bjFfbnVtYmVyX29mX2VsZW1lbnRzIChleHRlbmRlZGFzbiwgIiIsICZjb3VudCk7CisgIGlmIChy ZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdS VUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciBjb3VudGluZyBudW1iZXIgb2YgRXh0ZW5kZWQg S2V5IFVzYWdlczogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAo cmVzdWx0KSk7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIGZvciAoaSA9IDE7IGkg PCBjb3VudCArIDE7IGkrKykKKyAgICB7CisgICAgICBncnViX21lbXNldCAobmFtZSwgMCwgc2l6 ZW9mIChuYW1lKSk7CisgICAgICBncnViX3NucHJpbnRmIChuYW1lLCBzaXplb2YgKG5hbWUpLCAi PyVkIiwgaSk7CisgICAgICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGV4dGVuZGVkYXNuLCBu YW1lLCB1c2FnZSwgJnVzYWdlX3NpemUpOworICAgICAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NF U1MpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURf RklMRV9UWVBFLCAiZXJyb3IgcmVhZGluZyBFeHRlbmRlZCBLZXkgVXNhZ2U6ICVzIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAgICAgICAg ICBnb3RvIGNsZWFudXA7CisgICAgICAgIH0KKworICAgICAgaWYgKGdydWJfc3RybmNtcCAoY29k ZVNpZ25pbmdVc2FnZV9vaWQsIHVzYWdlLCB1c2FnZV9zaXplKSA9PSAwKQorICAgICAgICBnb3Rv IGNsZWFudXA7CisgICAgfQorCisgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxF X1RZUEUsICJleHRlbmRlZCBrZXkgdXNhZ2UgbWlzc2luZyBDb2RlIFNpZ25pbmcgdXNhZ2UiKTsK KworIGNsZWFudXA6CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJmV4dGVuZGVkYXNuKTsKKwor ICByZXR1cm4gZXJyOworfQorCisvKgorICogRXh0ZW5zaW9ucyAgOjo9ICBTRVFVRU5DRSBTSVpF ICgxLi5NQVgpIE9GIEV4dGVuc2lvbgorICoKKyAqIEV4dGVuc2lvbiAgOjo9ICBTRVFVRU5DRSAg eworICogICAgICBleHRuSUQgICAgICBPQkpFQ1QgSURFTlRJRklFUiwKKyAqICAgICAgY3JpdGlj YWwgICAgQk9PTEVBTiBERUZBVUxUIEZBTFNFLAorICogICAgICBleHRuVmFsdWUgICBPQ1RFVCBT VFJJTkcKKyAqICAgICAgICAgICAgICAgICAgLS0gY29udGFpbnMgdGhlIERFUiBlbmNvZGluZyBv ZiBhbiBBU04uMSB2YWx1ZQorICogICAgICAgICAgICAgICAgICAtLSBjb3JyZXNwb25kaW5nIHRv IHRoZSBleHRlbnNpb24gdHlwZSBpZGVudGlmaWVkCisgKiAgICAgICAgICAgICAgICAgIC0tIGJ5 IGV4dG5JRAorICogfQorICoKKyAqIEEgY2VydGlmaWNhdGUgbXVzdDoKKyAqICAtIGNvbnRhaW4g dGhlIERpZ2l0YWwgU2lnbmF0dXJlIHVzYWdlCisgKiAgLSBub3QgYmUgYSBDQQorICogIC0gY29u dGFpbiBubyBleHRlbmRlZCB1c2FnZXMsIG9yIGNvbnRhaW4gdGhlIENvZGUgU2lnbmluZyBleHRl bmRlZCB1c2FnZQorICogIC0gbm90IGNvbnRhaW4gYW55IG90aGVyIGNyaXRpY2FsIGV4dGVuc2lv bnMgKFJGQyA1MjgwIHMgNC4yKQorICovCitzdGF0aWMgZ3J1Yl9lcnJfdAordmVyaWZ5X2V4dGVu c2lvbnMgKGFzbjFfbm9kZSBjZXJ0KQoreworICBncnViX2ludDMyX3QgcmVzdWx0OworICBncnVi X2ludDMyX3QgZXh0LCBudW1fZXh0ZW5zaW9ucyA9IDA7CisgIGdydWJfaW50MzJfdCB1c2FnZV9w cmVzZW50ID0gMCwgY29uc3RyYWludHNfcHJlc2VudCA9IDAsIGV4dGVuZGVkX3VzYWdlX3ByZXNl bnQgPSAwOworICBjaGFyICpvaWRfcGF0aCwgKmNyaXRpY2FsX3BhdGgsICp2YWx1ZV9wYXRoOwor ICBjaGFyIGV4dG5JRFtHUlVCX01BWF9PSURfTEVOXTsKKyAgZ3J1Yl9pbnQzMl90IGV4dG5JRF9z aXplOworICBncnViX2Vycl90IGVycjsKKyAgY2hhciBjcml0aWNhbFs2XTsgLyogV2UgZ2V0IGVp dGhlciAiVFJVRSIgb3IgIkZBTFNFIi4gKi8KKyAgZ3J1Yl9pbnQzMl90IGNyaXRpY2FsX3NpemU7 CisgIGdydWJfdWludDhfdCAqdmFsdWU7CisgIGdydWJfaW50MzJfdCB2YWx1ZV9zaXplOworCisg IHJlc3VsdCA9IGFzbjFfbnVtYmVyX29mX2VsZW1lbnRzIChjZXJ0LCAidGJzQ2VydGlmaWNhdGUu ZXh0ZW5zaW9ucyIsICZudW1fZXh0ZW5zaW9ucyk7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUND RVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJy b3IgY291bnRpbmcgbnVtYmVyIG9mIGV4dGVuc2lvbnM6ICVzIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisKKyAgaWYgKG51bV9leHRlbnNpb25zIDwg MikKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAg ICAgICAgICAgICAgICAgICAgImluc3VmZmljaWVudCBudW1iZXIgb2YgZXh0ZW5zaW9ucyBmb3Ig Y2VydGlmaWNhdGUsIG5lZWQgYXQgbGVhc3QgMiwgZ290ICVkIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgbnVtX2V4dGVuc2lvbnMpOworCisgIGZvciAoZXh0ID0gMTsgZXh0IDw9IG51bV9leHRl bnNpb25zOyBleHQrKykKKyAgICB7CisgICAgICBvaWRfcGF0aCA9IGdydWJfeGFzcHJpbnRmICgi dGJzQ2VydGlmaWNhdGUuZXh0ZW5zaW9ucy4/JWQuZXh0bklEIiwgZXh0KTsKKyAgICAgIGlmIChv aWRfcGF0aCA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIGV4dGVuc2lvbiBPSUQgcGF0aCBpcyBlbXB0 eSIpOworICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKworICAgICAgZXh0bklEX3Np emUgPSBzaXplb2YgKGV4dG5JRCk7CisgICAgICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGNl cnQsIG9pZF9wYXRoLCBleHRuSUQsICZleHRuSURfc2l6ZSk7CisgICAgICBpZiAocmVzdWx0ICE9 IEFTTjFfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdS VUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIGV4dGVuc2lvbiBPSUQ6ICVzIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAg ICAgICAgICBnb3RvIGNsZWFudXBfb2lkX3BhdGg7CisgICAgICAgIH0KKworICAgICAgY3JpdGlj YWxfcGF0aCA9IGdydWJfeGFzcHJpbnRmICgidGJzQ2VydGlmaWNhdGUuZXh0ZW5zaW9ucy4/JWQu Y3JpdGljYWwiLCBleHQpOworICAgICAgaWYgKGNyaXRpY2FsX3BhdGggPT0gTlVMTCkKKyAgICAg ICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUs ICJlcnJvciBjcml0aWNhbCBwYXRoIGlzIGVtcHR5Iik7CisgICAgICAgICAgZ290byBjbGVhbnVw X29pZF9wYXRoOworICAgICAgICB9CisKKyAgICAgIGNyaXRpY2FsX3NpemUgPSBzaXplb2YgKGNy aXRpY2FsKTsKKyAgICAgIHJlc3VsdCA9IGFzbjFfcmVhZF92YWx1ZSAoY2VydCwgY3JpdGljYWxf cGF0aCwgY3JpdGljYWwsICZjcml0aWNhbF9zaXplKTsKKyAgICAgIGlmIChyZXN1bHQgPT0gQVNO MV9FTEVNRU5UX05PVF9GT1VORCkKKyAgICAgICAgY3JpdGljYWxbMF0gPSAnXDAnOworICAgICAg ZWxzZSBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICAgICAgeworICAgICAgICAgIGVy ciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIGV4 dGVuc2lvbiBjcml0aWNhbGl0eTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFz bjFfc3RyZXJyb3IgKHJlc3VsdCkpOworICAgICAgICAgIGdvdG8gY2xlYW51cF9jcml0aWNhbF9w YXRoOworICAgICAgICB9CisKKyAgICAgIHZhbHVlX3BhdGggPSBncnViX3hhc3ByaW50ZiAoInRi c0NlcnRpZmljYXRlLmV4dGVuc2lvbnMuPyVkLmV4dG5WYWx1ZSIsIGV4dCk7CisgICAgICBpZiAo dmFsdWVfcGF0aCA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJv ciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIGV4dG5WYWx1ZSBwYXRoIGlzIGVtcHR5 Iik7CisgICAgICAgICAgZ290byBjbGVhbnVwX2NyaXRpY2FsX3BhdGg7CisgICAgICAgIH0KKwor ICAgICAgdmFsdWUgPSBncnViX2FzbjFfYWxsb2NhdGVfYW5kX3JlYWQgKGNlcnQsIHZhbHVlX3Bh dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNlcnRpZmlj YXRlIGV4dGVuc2lvbiB2YWx1ZSIsICZ2YWx1ZV9zaXplKTsKKyAgICAgIGlmICh2YWx1ZSA9PSBO VUxMKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJubzsKKyAgICAgICAgICBn b3RvIGNsZWFudXBfdmFsdWVfcGF0aDsKKyAgICAgICAgfQorCisgICAgICAvKgorICAgICAgICog Tm93IHdlIG11c3Qgc2VlIGlmIHdlIHJlY29nbmlzZSB0aGUgT0lELgorICAgICAgICogSWYgd2Ug aGF2ZSBhbiB1bnJlY29nbmlzZWQgY3JpdGljYWwgZXh0ZW5zaW9uIHdlIE1VU1QgYmFpbC4KKyAg ICAgICAqLworICAgICAgaWYgKGdydWJfc3RybmNtcCAoa2V5VXNhZ2Vfb2lkLCBleHRuSUQsIGV4 dG5JRF9zaXplKSA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gdmVyaWZ5X2tleV91 c2FnZSAodmFsdWUsIHZhbHVlX3NpemUpOworICAgICAgICAgIGlmIChlcnIgIT0gR1JVQl9FUlJf Tk9ORSkKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cF92YWx1ZTsKKworICAgICAgICAgIHVzYWdl X3ByZXNlbnQrKzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoZ3J1Yl9zdHJuY21wIChiYXNp Y0NvbnN0cmFpbnRzX29pZCwgZXh0bklELCBleHRuSURfc2l6ZSkgPT0gMCkKKyAgICAgICAgewor ICAgICAgICAgIGVyciA9IHZlcmlmeV9iYXNpY19jb25zdHJhaW50cyAodmFsdWUsIHZhbHVlX3Np emUpOworICAgICAgICAgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICAgICAgICAgIGdv dG8gY2xlYW51cF92YWx1ZTsKKworICAgICAgICAgIGNvbnN0cmFpbnRzX3ByZXNlbnQrKzsKKyAg ICAgICAgfQorICAgICAgZWxzZSBpZiAoZ3J1Yl9zdHJuY21wIChleHRlbmRlZEtleVVzYWdlX29p ZCwgZXh0bklELCBleHRuSURfc2l6ZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9 IHZlcmlmeV9leHRlbmRlZF9rZXlfdXNhZ2UgKHZhbHVlLCB2YWx1ZV9zaXplKTsKKyAgICAgICAg ICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCisgICAgICAgICAgICBnb3RvIGNsZWFudXBfdmFs dWU7CisKKyAgICAgICAgICBleHRlbmRlZF91c2FnZV9wcmVzZW50Kys7CisgICAgICAgIH0KKyAg ICAgIGVsc2UgaWYgKGdydWJfc3RybmNtcCAoIlRSVUUiLCBjcml0aWNhbCwgY3JpdGljYWxfc2l6 ZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qCisgICAgICAgICAgICogUGVyIHRoZSBS RkMsIHdlIG11c3Qgbm90IHByb2Nlc3MgYSBjZXJ0aWZpY2F0ZSB3aXRoCisgICAgICAgICAgICog YSBjcml0aWNhbCBleHRlbnNpb24gd2UgZG8gbm90IHVuZGVyc3RhbmQuCisgICAgICAgICAgICov CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAidW5oYW5kbGVkIGNyaXRpY2FsIHg1MDkgZXh0ZW5z aW9uIHdpdGggT0lEICVzIiwgZXh0bklEKTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfdmFsdWU7 CisgICAgICAgIH0KKworICAgICAgZ3J1Yl9mcmVlICh2YWx1ZSk7CisgICAgICBncnViX2ZyZWUg KHZhbHVlX3BhdGgpOworICAgICAgZ3J1Yl9mcmVlIChjcml0aWNhbF9wYXRoKTsKKyAgICAgIGdy dWJfZnJlZSAob2lkX3BhdGgpOworICAgIH0KKworICBpZiAodXNhZ2VfcHJlc2VudCAhPSAxKQor ICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAorICAgICAgICAg ICAgICAgICAgICAgICAidW5leHBlY3RlZCBudW1iZXIgb2YgS2V5IFVzYWdlIGV4dGVuc2lvbnMg LSBleHBlY3RlZCAxLCBnb3QgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICB1c2FnZV9wcmVz ZW50KTsKKworICBpZiAoY29uc3RyYWludHNfcHJlc2VudCAhPSAxKQorICAgIHJldHVybiBncnVi X2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAi dW5leHBlY3RlZCBudW1iZXIgb2YgYmFzaWMgY29uc3RyYWludHMgZXh0ZW5zaW9ucyAtIGV4cGVj dGVkIDEsIGdvdCAlZCIsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRzX3ByZXNl bnQpOworCisgIGlmIChleHRlbmRlZF91c2FnZV9wcmVzZW50ID4gMSkKKyAgICByZXR1cm4gZ3J1 Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAg InVuZXhwZWN0ZWQgbnVtYmVyIG9mIEV4dGVuZGVkIEtleSBVc2FnZSBleHRlbnNpb25zIC0gZXhw ZWN0ZWQgMCBvciAxLCBnb3QgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICBleHRlbmRlZF91 c2FnZV9wcmVzZW50KTsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKKworIGNsZWFudXBfdmFs dWU6CisgIGdydWJfZnJlZSAodmFsdWUpOworIGNsZWFudXBfdmFsdWVfcGF0aDoKKyAgZ3J1Yl9m cmVlICh2YWx1ZV9wYXRoKTsKKyBjbGVhbnVwX2NyaXRpY2FsX3BhdGg6CisgIGdydWJfZnJlZSAo Y3JpdGljYWxfcGF0aCk7CisgY2xlYW51cF9vaWRfcGF0aDoKKyAgZ3J1Yl9mcmVlIChvaWRfcGF0 aCk7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQKK2FkZF9jZXJ0X2ZpbmdlcnBy aW50IChjb25zdCB2b2lkICpkYXRhLCBjb25zdCBncnViX3NpemVfdCBkYXRhX3NpemUsCisgICAg ICAgICAgICAgICAgICAgICAgZ3J1Yl94NTA5X2NlcnRfdCAqY29uc3QgY2VydCkKK3sKKyAgLyog QWRkIFNIQTI1NiBoYXNoIG9mIGNlcnRpZmljYXRlLiAqLworICBncnViX2NyeXB0b19oYXNoICgo Z2NyeV9tZF9zcGVjX3QgKikgJl9nY3J5X2RpZ2VzdF9zcGVjX3NoYTI1NiwKKyAgICAgICAgICAg ICAgICAgICAgJmNlcnQtPmZpbmdlcnByaW50W0dSVUJfRklOR0VSUFJJTlRfU0hBMjU2XSwgZGF0 YSwgZGF0YV9zaXplKTsKKyAgLyogQWRkIFNIQTM4NCBoYXNoIG9mIGNlcnRpZmljYXRlLiAqLwor ICBncnViX2NyeXB0b19oYXNoICgoZ2NyeV9tZF9zcGVjX3QgKikgJl9nY3J5X2RpZ2VzdF9zcGVj X3NoYTM4NCwKKyAgICAgICAgICAgICAgICAgICAgJmNlcnQtPmZpbmdlcnByaW50W0dSVUJfRklO R0VSUFJJTlRfU0hBMzg0XSwgZGF0YSwgZGF0YV9zaXplKTsKKyAgLyogQWRkIFNIQTUxMiBoYXNo IG9mIGNlcnRpZmljYXRlLiAqLworICBncnViX2NyeXB0b19oYXNoICgoZ2NyeV9tZF9zcGVjX3Qg KikgJl9nY3J5X2RpZ2VzdF9zcGVjX3NoYTUxMiwKKyAgICAgICAgICAgICAgICAgICAgJmNlcnQt PmZpbmdlcnByaW50W0dSVUJfRklOR0VSUFJJTlRfU0hBNTEyXSwgZGF0YSwgZGF0YV9zaXplKTsK K30KKworLyoKKyAqIFBhcnNlIGEgY2VydGlmaWNhdGUgd2hvc2UgREVSLWVuY29kZWQgZm9ybSBp cyBpbiBAZGF0YSwgb2Ygc2l6ZSBAZGF0YV9zaXplLgorICogUmV0dXJuIHRoZSByZXN1bHRzIGlu IEByZXN1bHRzLCB3aGljaCBtdXN0IHBvaW50IHRvIGFuIGFsbG9jYXRlZCB4NTA5IGNlcnRpZmlj YXRlLgorICovCitncnViX2Vycl90CitncnViX3g1MDlfY2VydF9wYXJzZSAoY29uc3Qgdm9pZCAq ZGF0YSwgZ3J1Yl9zaXplX3QgZGF0YV9zaXplLCBncnViX3g1MDlfY2VydF90ICpyZXN1bHRzKQor eworICBncnViX2ludDMyX3QgcmVzdWx0ID0gMDsKKyAgYXNuMV9ub2RlIGNlcnQ7CisgIGdydWJf ZXJyX3QgZXJyOworICBncnViX2ludDMyX3QgdG1wX3NpemU7CisgIGdydWJfaW50MzJfdCBzaXpl ID0gKGdydWJfaW50MzJfdCkgZGF0YV9zaXplOworCisgIGlmIChkYXRhX3NpemUgPiBHUlVCX1VJ TlRfTUFYKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfUkFOR0UsCisg ICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgcGFyc2UgYSBjZXJ0aWZpY2F0ZSB3aGVyZSBk YXRhIHNpemUgPiBHUlVCX1VJTlRfTUFYIik7CisKKyAgcmVzdWx0ID0gYXNuMV9jcmVhdGVfZWxl bWVudCAoZ3J1Yl9nbnV0bHNfcGtpeF9hc24sICJQS0lYMS5DZXJ0aWZpY2F0ZSIsICZjZXJ0KTsK KyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdS VUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3Qg Y3JlYXRlIEFTTi4xIHN0cnVjdHVyZSBmb3IgY2VydGlmaWNhdGU6ICVzIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisKKyAgcmVzdWx0ID0gYXNuMV9k ZXJfZGVjb2RpbmcyICgmY2VydCwgZGF0YSwgJnNpemUsIEFTTjFfREVDT0RFX0ZMQUdfU1RSSUNU X0RFUiwgYXNuMV9lcnJvcik7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsK KyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAg ICAgICAgICAgICAgICAgICAiY291bGQgbm90IHBhcnNlIERFUiBmb3IgY2VydGlmaWNhdGU6ICVz IiwgYXNuMV9lcnJvcik7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIC8qCisgICAq IFRCU0NlcnRpZmljYXRlICA6Oj0gIFNFUVVFTkNFIHsKKyAgICogICAgIHZlcnNpb24gICAgICAg ICBbMF0gIEVYUExJQ0lUIFZlcnNpb24gREVGQVVMVCB2MQorICAgKi8KKyAgZXJyID0gY2hlY2tf dmVyc2lvbiAoY2VydCwgcmVzdWx0cyk7CisgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKyAg ICBnb3RvIGNsZWFudXA7CisKKyAgLyoKKyAgICogc2VyaWFsTnVtYmVyICAgICAgICAgQ2VydGlm aWNhdGVTZXJpYWxOdW1iZXIsCisgICAqCisgICAqIENlcnRpZmljYXRlU2VyaWFsTnVtYmVyICA6 Oj0gIElOVEVHRVIKKyAgICovCisgIHJlc3VsdHMtPnNlcmlhbCA9IGdydWJfYXNuMV9hbGxvY2F0 ZV9hbmRfcmVhZCAoY2VydCwgInRic0NlcnRpZmljYXRlLnNlcmlhbE51bWJlciIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNlcnRpZmljYXRlIHNl cmlhbCBudW1iZXIiLCAmdG1wX3NpemUpOworICBpZiAocmVzdWx0cy0+c2VyaWFsID09IE5VTEwp CisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJubzsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAg ICB9CisgIC8qCisgICAqIEl0J3Mgc2FmZSB0byBjYXN0IHRoZSBzaWduZWQgaW50IHRvIGFuIHVu c2lnbmVkIGhlcmUsIHdlIGtub3cKKyAgICogbGVuZ3RoIGlzIG5vbi1uZWdhdGl2ZS4KKyAgICov CisgIHJlc3VsdHMtPnNlcmlhbF9sZW4gPSB0bXBfc2l6ZTsKKworICAvKgorICAgKiBzaWduYXR1 cmUgICAgICAgICAgICBBbGdvcml0aG1JZGVudGlmaWVyLAorICAgKgorICAgKiBXZSBkb24ndCBs b2FkIHRoZSBzaWduYXR1cmUgb3IgaXNzdWVyIGF0IHRoZSBtb21lbnQsCisgICAqIGFzIHdlIGRv bid0IGF0dGVtcHQgeDUwOSB2ZXJpZmljYXRpb24uCisgICAqLworCisgIC8qCisgICAqIHZhbGlk aXR5ICAgICAgICAgICAgIFZhbGlkaXR5LAorICAgKgorICAgKiBWYWxpZGl0eSA6Oj0gU0VRVUVO Q0UgeworICAgKiAgICAgbm90QmVmb3JlICAgICAgVGltZSwKKyAgICogICAgIG5vdEFmdGVyICAg ICAgIFRpbWUgfQorICAgKgorICAgKiBXZSBjYW4ndCB2YWxpZGF0ZSB0aGlzIHJlYXNvbmFibHks IHdlIGhhdmUgbm8gdHJ1ZSB0aW1lIHNvdXJjZSBvbiBzZXZlcmFsCisgICAqIHBsYXRmb3Jtcy4g Rm9yIG5vdyB3ZSBkbyBub3QgcGFyc2UgdGhlbS4KKyAgICovCisKKyAgLyoKKyAgICogaXNzdWVy ICAgICAgICAgICAgICBOYW1lLAorICAgKgorICAgKiBUaGlzIGlzIGFuIFg1MDEgbmFtZSwgd2Ug cGFyc2Ugb3V0IGp1c3QgdGhlIENOLgorICAgKi8KKyAgZXJyID0gcmVhZF9uYW1lIChjZXJ0LCAi dGJzQ2VydGlmaWNhdGUuaXNzdWVyIiwgJnJlc3VsdHMtPmlzc3VlciwgJnJlc3VsdHMtPmlzc3Vl cl9sZW4pOworICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCisgICAgZ290byBjbGVhbnVwX3Nl cmlhbDsKKworICAvKgorICAgKiBzdWJqZWN0ICAgICAgICAgICAgICBOYW1lLAorICAgKgorICAg KiBUaGlzIGlzIGFuIFg1MDEgbmFtZSwgd2UgcGFyc2Ugb3V0IGp1c3QgdGhlIENOLgorICAgKi8K KyAgZXJyID0gcmVhZF9uYW1lIChjZXJ0LCAidGJzQ2VydGlmaWNhdGUuc3ViamVjdCIsICZyZXN1 bHRzLT5zdWJqZWN0LCAmcmVzdWx0cy0+c3ViamVjdF9sZW4pOworICBpZiAoZXJyICE9IEdSVUJf RVJSX05PTkUpCisgICAgZ290byBjbGVhbnVwX2lzc3VlcjsKKworICAvKgorICAgKiBUQlNDZXJ0 aWZpY2F0ZSAgOjo9ICBTRVFVRU5DRSAgeworICAgKiAgICAuLi4KKyAgICogICAgc3ViamVjdFB1 YmxpY0tleUluZm8gU3ViamVjdFB1YmxpY0tleUluZm8sCisgICAqICAgIC4uLgorICAgKi8KKyAg ZXJyID0gZ3J1Yl94NTA5X3JlYWRfc3ViamVjdF9wdWJsaWNfa2V5IChjZXJ0LCByZXN1bHRzKTsK KyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAgIGdvdG8gY2xlYW51cF9uYW1lOworCisg IC8qCisgICAqIFRCU0NlcnRpZmljYXRlICA6Oj0gIFNFUVVFTkNFICB7CisgICAqICAgIC4uLgor ICAgKiAgICBleHRlbnNpb25zICAgICAgWzNdICBFWFBMSUNJVCBFeHRlbnNpb25zIE9QVElPTkFM CisgICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0tIElmIHByZXNlbnQsIHZlcnNpb24gTVVT VCBiZSB2MworICAgKiB9CisgICAqLworICBlcnIgPSB2ZXJpZnlfZXh0ZW5zaW9ucyAoY2VydCk7 CisgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICBnb3RvIGNsZWFudXBfbXBpczsKKwor ICAvKgorICAgKiBXZSBkbyBub3QgcmVhZCBvciBjaGVjayB0aGUgc2lnbmF0dXJlIG9uIHRoZSBj ZXJ0aWZpY2F0ZToKKyAgICogYXMgZGlzY3Vzc2VkIHdlIGRvIG5vdCB0cnkgdG8gdmFsaWRhdGUg dGhlIGNlcnRpZmljYXRlIGJ1dCB0cnVzdAorICAgKiBpdCBpbXBsaWN0bHkuCisgICAqLworICBh c24xX2RlbGV0ZV9zdHJ1Y3R1cmUgKCZjZXJ0KTsKKworICAvKiBBZGQgdGhlIGZpbmdlcnByaW50 IG9mIHRoZSBjZXJ0aWZpY2F0ZS4gKi8KKyAgYWRkX2NlcnRfZmluZ2VycHJpbnQgKGRhdGEsIGRh dGFfc2l6ZSwgcmVzdWx0cyk7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisKKyBjbGVhbnVw X21waXM6CisgIF9nY3J5X21waV9yZWxlYXNlIChyZXN1bHRzLT5tcGlzW0dSVUJfUlNBX1BLX01P RFVMVVNdKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHJlc3VsdHMtPm1waXNbR1JVQl9SU0FfUEtf RVhQT05FTlRdKTsKKyBjbGVhbnVwX25hbWU6CisgIGdydWJfZnJlZSAocmVzdWx0cy0+c3ViamVj dCk7CisgY2xlYW51cF9pc3N1ZXI6CisgIGdydWJfZnJlZSAocmVzdWx0cy0+aXNzdWVyKTsKKyBj bGVhbnVwX3NlcmlhbDoKKyAgZ3J1Yl9mcmVlIChyZXN1bHRzLT5zZXJpYWwpOworIGNsZWFudXA6 CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJmNlcnQpOworCisgIHJldHVybiBlcnI7Cit9CisK Ky8qCisgKiBSZWxlYXNlIGFsbCB0aGUgc3RvcmFnZSBhc3NvY2lhdGVkIHdpdGggdGhlIHg1MDkg Y2VydGlmaWNhdGUuCisgKiBJZiB0aGUgY2FsbGVyIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0aGUg Y2VydGlmaWNhdGUsIGl0IG11c3QgZnJlZSBpdC4KKyAqIFRoZSBjYWxsZXIgaXMgYWxzbyByZXNw b25zaWJsZSBmb3IgbWFpbnRlbmFuY2Ugb2YgdGhlIGxpbmtlZCBsaXN0LgorICovCit2b2lkCitn cnViX3g1MDlfY2VydF9yZWxlYXNlIChncnViX3g1MDlfY2VydF90ICpjZXJ0KQoreworICBncnVi X2ZyZWUgKGNlcnQtPmlzc3Vlcik7CisgIGdydWJfZnJlZSAoY2VydC0+c3ViamVjdCk7CisgIGdy dWJfZnJlZSAoY2VydC0+c2VyaWFsKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKGNlcnQtPm1waXNb R1JVQl9SU0FfUEtfTU9EVUxVU10pOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoY2VydC0+bXBpc1tH UlVCX1JTQV9QS19FWFBPTkVOVF0pOworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncnViL2NyeXB0 by5oIGIvaW5jbHVkZS9ncnViL2NyeXB0by5oCmluZGV4IDZhYjAyMWNiOC4uZTRlMmJkMWE3IDEw MDY0NAotLS0gYS9pbmNsdWRlL2dydWIvY3J5cHRvLmgKKysrIGIvaW5jbHVkZS9ncnViL2NyeXB0 by5oCkBAIC01MTgsNiArNTE4LDcgQEAgZ3J1Yl9jcnlwdG9faG1hY19idWZmZXIgKGNvbnN0IHN0 cnVjdCBnY3J5X21kX3NwZWMgKm1kLAogZXh0ZXJuIGdjcnlfbWRfc3BlY190IF9nY3J5X2RpZ2Vz dF9zcGVjX21kNTsKIGV4dGVybiBnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY19zaGEx OwogZXh0ZXJuIGdjcnlfbWRfc3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX3NoYTI1NjsKK2V4dGVy biBnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY19zaGEzODQ7CiBleHRlcm4gZ2NyeV9t ZF9zcGVjX3QgX2djcnlfZGlnZXN0X3NwZWNfc2hhNTEyOwogZXh0ZXJuIGdjcnlfbWRfc3BlY190 IF9nY3J5X2RpZ2VzdF9zcGVjX2NyYzMyOwogZXh0ZXJuIGdjcnlfY2lwaGVyX3NwZWNfdCBfZ2Ny eV9jaXBoZXJfc3BlY19hZXM7Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KR3J1Yi1kZXZlbCBtYWlsaW5n IGxpc3QKR3J1Yi1kZXZlbEBnbnUub3JnCmh0dHBzOi8vbGlzdHMuZ251Lm9yZy9tYWlsbWFuL2xp c3RpbmZvL2dydWItZGV2ZWwK