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 939C8C54FB3 for ; Thu, 29 May 2025 11:00:01 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uKaz6-0005pK-JP; Thu, 29 May 2025 06:59:40 -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 1uKaz4-0005ov-38 for grub-devel@gnu.org; Thu, 29 May 2025 06:59:38 -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 1uKayy-00045V-UB for grub-devel@gnu.org; Thu, 29 May 2025 06:59:37 -0400 Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 54T1fcqH016415; Thu, 29 May 2025 10:59:30 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pp1; bh=IMKDhn SJWtkJl/liQkn2cYZ8/wWSrY11kKvlXcqw78Y=; b=HsSZSWHZ9Cfsw8Vl4Qk9C5 Xq7EB/P5Taa+tvcyKFN1Hl1QO5BFuz1F7NQgBlqRyn4qHiCw2IcCY9GDV865+2SD /V6kyOksCAj0lgDZpISrMH5RegCsYcKyiEgOoRektbQpuVsH4GageQ4nrsAfUwQX 960c8n2ZZ+IvmrCrKLrRMKGDMDi6g+vE3yV4uMbSqtbKJwiJWKs2a+WjGKazWFoZ V9P4i5XV1uW5xKf+jAl1GG8fSoR4STqSyAQ0gH9iA6xdAAtTkR0Iakw+6hXa+aYS rO3kXVMPqOjy37DzxSbLatJbvnXwRTG80wXt8gVyxQwWO/2qv4FZFpdWoTnkz2IQ == 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 46x40jw038-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 29 May 2025 10:59:30 +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 54T7ra62001429; Thu, 29 May 2025 10:59:28 GMT Received: from smtprelay07.dal12v.mail.ibm.com ([172.16.1.9]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 46useq412m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 29 May 2025 10:59:28 +0000 Received: from smtpav01.dal12v.mail.ibm.com (smtpav01.dal12v.mail.ibm.com [10.241.53.100]) by smtprelay07.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 54TAxSko28705332 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 29 May 2025 10:59:28 GMT Received: from smtpav01.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1C3FF5805D; Thu, 29 May 2025 10:59:28 +0000 (GMT) Received: from smtpav01.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CB74458057; Thu, 29 May 2025 10:59:27 +0000 (GMT) Received: from ltc.linux.ibm.com (unknown [9.5.196.140]) by smtpav01.dal12v.mail.ibm.com (Postfix) with ESMTP; Thu, 29 May 2025 10:59:27 +0000 (GMT) MIME-Version: 1.0 Date: Thu, 29 May 2025 16:29:27 +0530 From: Avnish Chouhan To: alec.r.brown@oracle.com Cc: grub-devel@gnu.org, Daniel Kiper Subject: Re: [PATCH v4 2/4] blsuki: Add blscfg command to parse Boot Loader Specification snippets In-Reply-To: References: Message-ID: <7f60d0d1dc924a12c3bfadb029356c3c@linux.ibm.com> X-Sender: avnish@linux.ibm.com X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=SdL3duRu c=1 sm=1 tr=0 ts=68383e12 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=kj9zAlcOel0A:10 a=dt9VzEwgFbYA:10 a=mDV3o1hIAAAA:8 a=nv23E9fyAAAA:8 a=yPCof4ZbAAAA:8 a=KKAkSRfTAAAA:8 a=DfNHnWVPAAAA:8 a=20KFwNOVAAAA:8 a=xNf9USuDAAAA:8 a=pGLkceISAAAA:8 a=EqdPLkY1AAAA:8 a=SPeI6YYf_SrBQQjTB-kA:9 a=RrAQO7gkZyzcDZiy:21 a=CjuIK1q_8ugA:10 a=ehkDpipTsgk7cDPTKqUC:22 a=cvBusfyB2V15izCimMoJ:22 a=rjTVMONInIDnV1a_A2c_:22 a=dfeKg4RqpEhWThG6bP4-:22 X-Proofpoint-GUID: KB4VUlXMA6N6WU-vLsYwKwXCjBqHWqHz X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTI5MDEwMiBTYWx0ZWRfX2BGzlhiqexSK uSZn9ucDtCuOyvVTubm8BzUAr9OQGv781huwN+85N+DOcwsy1RKbEe7gqfkXHKeeKwB5rVDTqn+ AGlr8MG3VQd2Vj1pP/elykavtNh3ja2NPq1g49UGwq8OcLKEsXgzWX0TW8EjzBEYLh5oB19WZyL 1YOy/dYnFdC/Poq3yxyM1jk+O/yRecqinNBhTTeX3oDCDS4itCYrFUWhQQGcFutCVl04VQnmznH QZjFDc84N1T0Cr671M5tPj2sq1M/jqEDHP4uAD8DeBixuBFmw/vpZObxdEgdNYrlNKWdohtOK7D EE/IcqiDFtlhAjowyUdxrP91MyDwASNbSunqwukts77U3S8wvQS9SOGjvHH7W2boXm/WMgMRf1v 93RLoFEZaXYafMImgji6/v0iv0wKqr1o1AiZpCK/BTOC4E9IrYCGjuY6EWeyAgZwvTxZecpP X-Proofpoint-ORIG-GUID: KB4VUlXMA6N6WU-vLsYwKwXCjBqHWqHz X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-29_05,2025-05-29_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 lowpriorityscore=0 mlxscore=0 adultscore=0 priorityscore=1501 impostorscore=0 malwarescore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 spamscore=0 clxscore=1011 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000 definitions=main-2505290102 Received-SPF: pass client-ip=148.163.156.1; envelope-from=avnish@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_H5=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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org T24gMjAyNS0wNS0yMSAxODoyMSwgZ3J1Yi1kZXZlbC1yZXF1ZXN0QGdudS5vcmcgd3JvdGU6Cj4g U2VuZCBHcnViLWRldmVsIG1haWxpbmcgbGlzdCBzdWJtaXNzaW9ucyB0bwo+IAlncnViLWRldmVs QGdudS5vcmcKPiAKPiBUbyBzdWJzY3JpYmUgb3IgdW5zdWJzY3JpYmUgdmlhIHRoZSBXb3JsZCBX aWRlIFdlYiwgdmlzaXQKPiAJaHR0cHM6Ly9saXN0cy5nbnUub3JnL21haWxtYW4vbGlzdGluZm8v Z3J1Yi1kZXZlbAo+IG9yLCB2aWEgZW1haWwsIHNlbmQgYSBtZXNzYWdlIHdpdGggc3ViamVjdCBv ciBib2R5ICdoZWxwJyB0bwo+IAlncnViLWRldmVsLXJlcXVlc3RAZ251Lm9yZwo+IAo+IFlvdSBj YW4gcmVhY2ggdGhlIHBlcnNvbiBtYW5hZ2luZyB0aGUgbGlzdCBhdAo+IAlncnViLWRldmVsLW93 bmVyQGdudS5vcmcKPiAKPiBXaGVuIHJlcGx5aW5nLCBwbGVhc2UgZWRpdCB5b3VyIFN1YmplY3Qg bGluZSBzbyBpdCBpcyBtb3JlIHNwZWNpZmljCj4gdGhhbiAiUmU6IENvbnRlbnRzIG9mIEdydWIt ZGV2ZWwgZGlnZXN0Li4uIgo+IAo+IAo+IFRvZGF5J3MgVG9waWNzOgo+IAo+ICAgIDEuIFtQQVRD SCB2NCAyLzRdIGJsc3VraTogQWRkIGJsc2NmZyBjb21tYW5kIHRvIHBhcnNlIEJvb3QKPiAgICAg ICBMb2FkZXIgU3BlY2lmaWNhdGlvbiBzbmlwcGV0cyAoQWxlYyBCcm93bikKPiAKPiAKPiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCj4gCj4gTWVzc2FnZTogMQo+IERhdGU6IFdlZCwgMjEgTWF5IDIwMjUgMTI6NTE6 MjQgKzAwMDAKPiBGcm9tOiBBbGVjIEJyb3duIDxhbGVjLnIuYnJvd25Ab3JhY2xlLmNvbT4KPiBU bzogZ3J1Yi1kZXZlbEBnbnUub3JnCj4gQ2M6IGNocmlzdG9waGVyLm9iYmFyZEBsaW5hcm8ub3Jn LCBkYW5pZWwua2lwZXJAb3JhY2xlLmNvbSwKPiAJamFuLnNldGplZWlsZXJzQG9yYWNsZS5jb20s IGFsZWMuci5icm93bkBvcmFjbGUuY29tLAo+IAltYXRlLmt1a3JpQGNhbm9uaWNhbC5jb20sIHBq b25lc0ByZWRoYXQuY29tLAo+IAlyb3NzLnBoaWxpcHNvbkBvcmFjbGUuY29tLCA5M3NhbUBkZWJp YW4ub3JnLCBwaGNvZGVyQGdtYWlsLmNvbQo+IFN1YmplY3Q6IFtQQVRDSCB2NCAyLzRdIGJsc3Vr aTogQWRkIGJsc2NmZyBjb21tYW5kIHRvIHBhcnNlIEJvb3QKPiAJTG9hZGVyIFNwZWNpZmljYXRp b24gc25pcHBldHMKPiBNZXNzYWdlLUlEOiA8MjAyNTA1MjExMjUxMjYuMzkyODM1MC0zLWFsZWMu ci5icm93bkBvcmFjbGUuY29tPgo+IAo+IEZyb206IFBldGVyIEpvbmVzIDxwam9uZXNAcmVkaGF0 LmNvbT4KPiAKPiBUaGUgQm9vdExvYWRlclNwZWMgKEJMUykgZGVmaW5lcyBhIHNjaGVtZSB3aGVy ZSBkaWZmZXJlbnQgYm9vdGxvYWRlcnMgCj4gY2FuCj4gc2hhcmUgYSBmb3JtYXQgZm9yIGJvb3Qg aXRlbXMgYW5kIGEgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkgdGhhdCAKPiBhY2NlcHRzCj4gdGhl c2UgY29tbW9uIGNvbmZpZ3VyYXRpb25zIGFzIGRyb3AtaW4gZmlsZXMuCj4gCj4gVGhlIEJMUyBT cGVjaWZpY2F0aW9uOgo+IGh0dHBzOi8vdWFwaS1ncm91cC5vcmcvc3BlY2lmaWNhdGlvbnMvc3Bl Y3MvYm9vdF9sb2FkZXJfc3BlY2lmaWNhdGlvbi8KPiAKPiBTaWduZWQtb2ZmLWJ5OiBQZXRlciBK b25lcyA8cGpvbmVzQHJlZGhhdC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogSmF2aWVyIE1hcnRpbmV6 IENhbmlsbGFzIDxqYXZpZXJtQHJlZGhhdC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogV2lsbCBUaG9t cHNvbiA8d2p0QGVuZGxlc3NtLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBBbGVjIEJyb3duIDxhbGVj LnIuYnJvd25Ab3JhY2xlLmNvbT4KPiAtLS0KPiAgZG9jcy9ncnViLnRleGkgICAgICAgICAgICAg ICAgIHwgICA0NyArKwo+ICBncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYgICAgfCAgIDEwICsK PiAgZ3J1Yi1jb3JlL2NvbW1hbmRzL2Jsc3VraS5jICAgIHwgMTE5OCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+ICBncnViLWNvcmUvY29tbWFuZHMvbGVnYWN5Y2ZnLmMgfCAgICA0 ICstCj4gIGdydWItY29yZS9jb21tYW5kcy9tZW51ZW50cnkuYyB8ICAgIDggKy0KPiAgZ3J1Yi1j b3JlL25vcm1hbC9tYWluLmMgICAgICAgIHwgICAgNiArCj4gIGluY2x1ZGUvZ3J1Yi9tZW51Lmgg ICAgICAgICAgICB8ICAgMTUgKwo+ICBpbmNsdWRlL2dydWIvbm9ybWFsLmggICAgICAgICAgfCAg ICAyICstCj4gIDggZmlsZXMgY2hhbmdlZCwgMTI4NCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9u cygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZ3J1Yi1jb3JlL2NvbW1hbmRzL2Jsc3VraS5jCj4g Cj4gZGlmZiAtLWdpdCBhL2RvY3MvZ3J1Yi50ZXhpIGIvZG9jcy9ncnViLnRleGkKPiBpbmRleCBk OWIyNmZhMzYuLmFkYWI5MzY2OCAxMDA2NDQKPiAtLS0gYS9kb2NzL2dydWIudGV4aQo+ICsrKyBi L2RvY3MvZ3J1Yi50ZXhpCj4gQEAgLTY0MTcsNiArNjQxNyw3IEBAIHlvdSBmb3JnZXQgYSBjb21t YW5kLCB5b3UgY2FuIHJ1biB0aGUgY29tbWFuZAo+IEBjb21tYW5ke2hlbHB9Cj4gICogYmFja2dy b3VuZF9pbWFnZTo6ICAgICAgICAgICAgTG9hZCBiYWNrZ3JvdW5kIGltYWdlIGZvciBhY3RpdmUg Cj4gdGVybWluYWwKPiAgKiBiYWRyYW06OiAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXIgb3V0 IGJhZCByZWdpb25zIG9mIFJBTQo+ICAqIGJsb2NrbGlzdDo6ICAgICAgICAgICAgICAgICAgIFBy aW50IGEgYmxvY2sgbGlzdAo+ICsqIGJsc2NmZzo6ICAgICAgICAgICAgICAgICAgICAgIExvYWQg Qm9vdCBMb2FkZXIgU3BlY2lmaWNhdGlvbiBtZW51IAo+IGVudHJpZXMKPiAgKiBib290OjogICAg ICAgICAgICAgICAgICAgICAgICBTdGFydCB1cCB5b3VyIG9wZXJhdGluZyBzeXN0ZW0KPiAgKiBj YXQ6OiAgICAgICAgICAgICAgICAgICAgICAgICBTaG93IHRoZSBjb250ZW50cyBvZiBhIGZpbGUK PiAgKiBjbGVhcjo6ICAgICAgICAgICAgICAgICAgICAgICBDbGVhciB0aGUgc2NyZWVuCj4gQEAg LTY2MDMsNiArNjYwNCw1MiBAQCBQcmludCBhIGJsb2NrIGxpc3QgKEBweHJlZntCbG9jayBsaXN0 IHN5bnRheH0pCj4gZm9yIEB2YXJ7ZmlsZX0uCj4gIEBlbmQgZGVmZm4KPiAKPiAKPiArQG5vZGUg YmxzY2ZnCj4gK0BzdWJzZWN0aW9uIGJsc2NmZwo+ICsKPiArQGRlZmZuIENvbW1hbmQgYmxzY2Zn IFtAb3B0aW9uey1wfC0tcGF0aH0gZGlyXQo+IFtAb3B0aW9uey1mfC0tZW5hYmxlLWZhbGxiYWNr fV0gW0BvcHRpb257LWR8LS1zaG93LWRlZmF1bHR9XQo+IFtAb3B0aW9uey1ufC0tc2hvdy1ub24t ZGVmYXVsdH1dIFtAb3B0aW9uey1lfC0tZW50cnl9IGZpbGVdCj4gK0xvYWQgQm9vdCBMb2FkZXIg U3BlY2lmaWNhdGlvbiAoQkxTKSBlbnRyaWVzIGludG8gdGhlIEdSVUIgbWVudS4gQm9vdCAKPiBl bnRyaWVzCj4gK2dlbmVyYXRlZCBmcm9tIEBjb21tYW5ke2Jsc2NmZ30gd29uJ3QgaW50ZXJmZXJl IHdpdGggZW50cmllcyBmcm9tCj4gQGZpbGV7Z3J1Yi5jZmd9IGFwcGVhcmluZyBpbgo+ICt0aGUg R1JVQiBtZW51LiBBbHNvLCBlbnRyaWVzIGdlbmVyYXRlZCBmcm9tIEBjb21tYW5ke2Jsc2NmZ30g b25seQo+IGdlbmVyYXRlIGluIG1lbW9yeSBhbmQKPiArZG9uJ3QgdXBkYXRlIEBmaWxle2dydWIu Y2ZnfS4KPiArCj4gK1RoZSBAb3B0aW9uey0tcGF0aH0gb3B0aW9uIG92ZXJyaWRlcyB0aGUgZGVm YXVsdCBwYXRoIHRvIHRoZQo+IGRpcmVjdG9yeSBjb250YWluaW5nCj4gK3RoZSBCTFMgZW50cmll cy4gSWYgdGhpcyBvcHRpb24gaXNuJ3QgdXNlZCwgdGhlIGRlZmF1bHQgbG9jYXRpb24gaXMKPiAr L2xvYWRlci9lbnRyaWVzIGluIEBjb2RleyRCT09UfS4gSWYgbm8gQkxTIGVudHJpZXMgYXJlIGZv dW5kLCB0aGUKPiArQG9wdGlvbnstLWVuYWJsZS1mYWxsYmFja30gb3B0aW9uIGNhbiBiZSB1c2Vk IHRvIGNoZWNrIGZvciBlbnRyaWVzIGluCj4gdGhlIGRlZmF1bHQKPiArZGlyZWN0b3J5Lgo+ICsK PiArVGhlIEBvcHRpb257LS1zaG93LWRlZmF1bHR9IG9wdGlvbiBhbGxvd3MgdGhlIGRlZmF1bHQg Ym9vdCBlbnRyeSB0bwo+IGJlIGFkZGVkIHRvIHRoZQo+ICtHUlVCIG1lbnUgZnJvbSB0aGUgQkxT IGVudHJpZXMuCj4gKwo+ICtUaGUgQG9wdGlvbnstLXNob3ctbm9uLWRlZmF1bHR9IG9wdGlvbiBh bGxvd3Mgbm9uLWRlZmF1bHQgYm9vdAo+IGVudHJpZXMgdG8gYmUgYWRkZWQgdG8KPiArdGhlIEdS VUIgbWVudSBmcm9tIHRoZSBCTFMgZW50cmllcy4KPiArCj4gK1RoZSBAb3B0aW9uey0tZW50cnl9 IG9wdGlvbiBhbGxvd3Mgc3BlY2lmaWMgYm9vdCBlbnRyaWVzIHRvIGJlIGFkZGVkCj4gdG8gdGhl IEdSVUIgbWVudQo+ICtmcm9tIHRoZSBCTFMgZW50cmllcy4KPiArCj4gK1RoZSBAb3B0aW9uey0t ZW50cnl9LCBAb3B0aW9uey0tc2hvdy1kZWZhdWx0fSwgYW5kCj4gQG9wdGlvbnstLXNob3ctbm9u LWRlZmF1bHR9IG9wdGlvbnMKPiArYXJlIHVzZWQgdG8gZmlsdGVyIHdoaWNoIEJMUyBlbnRyaWVz IGFyZSBhZGRlZCB0byB0aGUgR1JVQiBtZW51LiBJZiAKPiBub25lIGFyZQo+ICt1c2VkLCBhbGwg ZW50cmllcyBpbiB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvciB0aGUgbG9jYXRpb24gc3BlY2lmaWVk Cj4gYnkgQG9wdGlvbnstLXBhdGh9Cj4gK3dpbGwgYmUgYWRkZWQgdG8gdGhlIEdSVUIgbWVudS4K PiArCj4gK0EgQkxTIGNvbmZpZyBmaWxlIGV4YW1wbGU6Cj4gK0BleGFtcGxlCj4gKyMKPiAvYm9v dC9sb2FkZXIvZW50cmllcy82YTk4NTdhMzkzNzI0YjdhOTgxZWJiNWI4NDk1YjllYS0zLjguMC0y LmZjMTkueDg2XzY0LmNvbmYKPiArdGl0bGUgICAgICAgIEZlZG9yYSAxOSAoUmF3aGlkZSkKPiAr c29ydC1rZXkgICAgIGZlZG9yYQo+ICttYWNoaW5lLWlkICAgNmE5ODU3YTM5MzcyNGI3YTk4MWVi YjViODQ5NWI5ZWEKPiArdmVyc2lvbiAgICAgIDMuOC4wLTIuZmMxOS54ODZfNjQKPiArb3B0aW9u cyAgICAgIHJvb3Q9VVVJRD02ZDMzNzZlNC1mYzkzLTQ1MDktOTVlYy1hMjFkNjgwMTFkYTIgcXVp ZXQKPiArYXJjaGl0ZWN0dXJlIHg2NAo+ICtsaW51eCAgICAgICAgCj4gLzZhOTg1N2EzOTM3MjRi N2E5ODFlYmI1Yjg0OTViOWVhLzMuOC4wLTIuZmMxOS54ODZfNjQvbGludXgKPiAraW5pdHJkICAg ICAgIAo+IC82YTk4NTdhMzkzNzI0YjdhOTgxZWJiNWI4NDk1YjllYS8zLjguMC0yLmZjMTkueDg2 XzY0L2luaXRyZAo+ICtAZW5kIGV4YW1wbGUKPiArCj4gK1JlZmVyZW5jZXM6Cj4gQHVyZWZ7aHR0 cHM6Ly91YXBpLWdyb3VwLm9yZy9zcGVjaWZpY2F0aW9ucy9zcGVjcy9ib290X2xvYWRlcl9zcGVj aWZpY2F0aW9uLywKPiBUaGUgQm9vdCBMb2FkZXIgU3BlY2lmaWNhdGlvbn0KPiArQGVuZCBkZWZm bgo+ICsKPiArCj4gIEBub2RlIGJvb3QKPiAgQHN1YnNlY3Rpb24gYm9vdAo+IAo+IGRpZmYgLS1n aXQgYS9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYgYi9ncnViLWNvcmUvTWFrZWZpbGUuY29y ZS5kZWYKPiBpbmRleCBmNzBlMDJlNjkuLjY3NjI4ZjY1ZiAxMDA2NDQKPiAtLS0gYS9ncnViLWNv cmUvTWFrZWZpbGUuY29yZS5kZWYKPiArKysgYi9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYK PiBAQCAtODQ1LDYgKzg0NSwxNiBAQCBtb2R1bGUgPSB7Cj4gICAgY29tbW9uID0gY29tbWFuZHMv YmxvY2tsaXN0LmM7Cj4gIH07Cj4gCj4gK21vZHVsZSA9IHsKPiArICBuYW1lID0gYmxzdWtpOwo+ ICsgIGNvbW1vbiA9IGNvbW1hbmRzL2Jsc3VraS5jOwo+ICsgIGNvbW1vbiA9IGtlcm4vdmVyY21w LmM7Cj4gKyAgZW5hYmxlID0gcG93ZXJwY19pZWVlMTI3NTsKPiArICBlbmFibGUgPSBlZmk7Cj4g KyAgZW5hYmxlID0gaTM4Nl9wYzsKPiArICBlbmFibGUgPSBlbXU7Cj4gK307Cj4gKwo+ICBtb2R1 bGUgPSB7Cj4gICAgbmFtZSA9IGJvb3Q7Cj4gICAgY29tbW9uID0gY29tbWFuZHMvYm9vdC5jOwo+ IGRpZmYgLS1naXQgYS9ncnViLWNvcmUvY29tbWFuZHMvYmxzdWtpLmMgYi9ncnViLWNvcmUvY29t bWFuZHMvYmxzdWtpLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMC4u MmFkOTYwYWUzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2dydWItY29yZS9jb21tYW5kcy9ibHN1 a2kuYwo+IEBAIC0wLDAgKzEsMTE5OCBAQAo+ICsvKgo+ICsgKiAgR1JVQiAgLS0gIEdSYW5kIFVu aWZpZWQgQm9vdGxvYWRlcgo+ICsgKiAgQ29weXJpZ2h0IChDKSAyMDI1ICBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KPiArICoKPiArICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiAgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgCj4gYnkK PiArICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2Yg dGhlIExpY2Vuc2UsIG9yCj4gKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u Lgo+ICsgKgo+ICsgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAo+ICsgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKPiArICogIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqICBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo+ ICsgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+Lgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxncnViL2xpc3QuaD4KPiArI2luY2x1 ZGUgPGdydWIvdHlwZXMuaD4KPiArI2luY2x1ZGUgPGdydWIvbWlzYy5oPgo+ICsjaW5jbHVkZSA8 Z3J1Yi9tbS5oPgo+ICsjaW5jbHVkZSA8Z3J1Yi9lcnIuaD4KPiArI2luY2x1ZGUgPGdydWIvZGwu aD4KPiArI2luY2x1ZGUgPGdydWIvZXh0Y21kLmg+Cj4gKyNpbmNsdWRlIDxncnViL2kxOG4uaD4K PiArI2luY2x1ZGUgPGdydWIvZnMuaD4KPiArI2luY2x1ZGUgPGdydWIvZW52Lmg+Cj4gKyNpbmNs dWRlIDxncnViL2ZpbGUuaD4KPiArI2luY2x1ZGUgPGdydWIvbm9ybWFsLmg+Cj4gKyNpbmNsdWRl IDxncnViL3NhZmVtYXRoLmg+Cj4gKyNpbmNsdWRlIDxncnViL3ZlcmNtcC5oPgo+ICsjaW5jbHVk ZSA8Z3J1Yi9saWIvZW52YmxrLmg+Cj4gKwo+ICtHUlVCX01PRF9MSUNFTlNFICgiR1BMdjMrIik7 Cj4gKwo+ICsjZGVmaW5lIEdSVUJfQkxTX0NPTkZJR19QQVRIICIvbG9hZGVyL2VudHJpZXMvIgo+ ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBncnViX2FyZ19vcHRpb24gYmxzX29wdFtdID0KPiAr ICB7Cj4gKyAgICB7InBhdGgiLCAncCcsIDAsICJTcGVjaWZ5IHBhdGggdG8gZmluZCBCTFMgZW50 cmllcy4iLCBOXygiRElSIiksCj4gQVJHX1RZUEVfUEFUSE5BTUV9LAo+ICsgICAgeyJlbmFibGUt ZmFsbGJhY2siLCAnZicsIDAsICJGYWxsYmFjayB0byB0aGUgZGVmYXVsdCBCTFMgcGF0aCBpZgo+ IC0tcGF0aCBmYWlscyB0byBmaW5kIEJMUyBlbnRyaWVzLiIsIDAsIEFSR19UWVBFX05PTkV9LAo+ ICsgICAgeyJzaG93LWRlZmF1bHQiLCAnZCcsIDAsICJBbGxvdyB0aGUgZGVmYXVsdCBCTFMgZW50 cnkgdG8gYmUgYWRkZWQKPiB0byB0aGUgR1JVQiBtZW51LiIsIDAsIEFSR19UWVBFX05PTkV9LAo+ ICsgICAgeyJzaG93LW5vbi1kZWZhdWx0IiwgJ24nLCAwLCAiQWxsb3cgdGhlIG5vbi1kZWZhdWx0 IEJMUyBlbnRyaWVzCj4gdG8gYmUgYWRkZWQgdG8gdGhlIEdSVUIgbWVudS4iLCAwLCBBUkdfVFlQ RV9OT05FfSwKPiArICAgIHsiZW50cnkiLCAnZScsIDAsICJBbGxvdyBzcGVjaWZpYyBCTFMgZW50 cmllcyB0byBiZSBhZGRlZCB0byB0aGUKPiBHUlVCIG1lbnUuIiwgTl8oIkZJTEUiKSwgQVJHX1RZ UEVfRklMRX0sCj4gKyAgICB7MCwgMCwgMCwgMCwgMCwgMH0KPiArICB9Owo+ICsKPiArc3RydWN0 IGtleXZhbAo+ICt7Cj4gKyAgY29uc3QgY2hhciAqa2V5Owo+ICsgIGNoYXIgKnZhbDsKPiArfTsK PiArCj4gK3N0YXRpYyBncnViX2Jsc3VraV9lbnRyeV90ICplbnRyaWVzID0gTlVMTDsKPiArCj4g KyNkZWZpbmUgRk9SX0JMU1VLSV9FTlRSSUVTKHZhcikgRk9SX0xJU1RfRUxFTUVOVFMgKHZhciwg ZW50cmllcykKPiArCj4gKy8qCj4gKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhZGQgYSBuZXcga2V5 dmFsIHBhaXIgdG8gYSBsaXN0IG9mIGtleXZhbHMgCj4gc3RvcmVkIGluIHRoZQo+ICsgKiBlbnRy eSBwYXJhbWV0ZXIuCj4gKyAqLwo+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+ICtibHN1a2lfYWRkX2tl eXZhbCAoZ3J1Yl9ibHN1a2lfZW50cnlfdCAqZW50cnksIGNoYXIgKmtleSwgY2hhciAqdmFsKQo+ ICt7Cj4gKyAgY2hhciAqaywgKnY7Cj4gKyAgc3RydWN0IGtleXZhbCAqKmt2cywgKmt2Owo+ICsg IGdydWJfc2l6ZV90IHNpemU7Cj4gKyAgaW50IG5ld19uID0gZW50cnktPm5rZXl2YWxzICsgMTsK PiArCj4gKyAgaWYgKGVudHJ5LT5rZXl2YWxzX3NpemUgPT0gMCkKPiArICAgIHsKPiArICAgICAg c2l6ZSA9IHNpemVvZiAoc3RydWN0IGtleXZhbCAqKTsKPiArICAgICAga3ZzID0gZ3J1Yl9tYWxs b2MgKHNpemUpOwo+ICsgICAgICBpZiAoa3ZzID09IE5VTEwpCj4gKwlyZXR1cm4gZ3J1Yl9lcnJv ciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwgImNvdWxkbid0IGFsbG9jYXRlIHNwYWNlCj4gZm9y IEJMUyBrZXkgdmFsdWVzIik7CgpIaSBBbGVjLAoKSW5kZW50YXRpb24gc2VlbXMgb2ZmIGhlcmUh Cgo+ICsKPiArICAgICAgZW50cnktPmtleXZhbHMgPSBrdnM7Cj4gKyAgICAgIGVudHJ5LT5rZXl2 YWxzX3NpemUgPSBzaXplOwo+ICsgICAgfQo+ICsgIGVsc2UgaWYgKGVudHJ5LT5rZXl2YWxzX3Np emUgPCBuZXdfbiAqIHNpemVvZiAoc3RydWN0IGtleXZhbCAqKSkKPiArICAgIHsKPiArICAgICAg c2l6ZSA9IGVudHJ5LT5rZXl2YWxzX3NpemUgKiAyOwo+ICsgICAgICBrdnMgPSBncnViX3JlYWxs b2MgKGVudHJ5LT5rZXl2YWxzLCBzaXplKTsKPiArICAgICAgaWYgKGt2cyA9PSBOVUxMKQo+ICsJ cmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksICJjb3VsZG4ndCByZWFs bG9jYXRlCj4gc3BhY2UgZm9yIEJMUyBrZXkgdmFsdWVzIik7Cj4gKwoKSW5kZW50YXRpb24gc2Vl bXMgb2ZmIGhlcmUhCgo+ICsgICAgICBlbnRyeS0+a2V5dmFscyA9IGt2czsKPiArICAgICAgZW50 cnktPmtleXZhbHNfc2l6ZSA9IHNpemU7Cj4gKyAgICB9Cj4gKwo+ICsgIGt2ID0gZ3J1Yl9tYWxs b2MgKHNpemVvZiAoc3RydWN0IGtleXZhbCkpOwo+ICsgIGlmIChrdiA9PSBOVUxMKQo+ICsgICAg cmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksICJjb3VsZG4ndCBmaW5k IHNwYWNlCj4gZm9yIG5ldyBCTFMga2V5IHZhbHVlIik7Cj4gKwo+ICsgIGsgPSBncnViX3N0cmR1 cCAoa2V5KTsKPiArICBpZiAoayA9PSBOVUxMKQo+ICsgICAgewo+ICsgICAgICBncnViX2ZyZWUg KGt2KTsKPiArICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlks ICJjb3VsZG4ndCBmaW5kIHNwYWNlCj4gZm9yIG5ldyBCTFMga2V5IHZhbHVlIik7Cj4gKyAgICB9 Cj4gKwo+ICsgIHYgPSBncnViX3N0cmR1cCAodmFsKTsKPiArICBpZiAodiA9PSBOVUxMKQo+ICsg ICAgewo+ICsgICAgICBncnViX2ZyZWUgKGspOwo+ICsgICAgICBncnViX2ZyZWUgKGt2KTsKPiAr ICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksICJjb3VsZG4n dCBmaW5kIHNwYWNlCj4gZm9yIG5ldyBCTFMga2V5IHZhbHVlIik7Cj4gKyAgICB9Cj4gKwo+ICsg IGt2LT5rZXkgPSBrOwo+ICsgIGt2LT52YWwgPSB2Owo+ICsKPiArICBlbnRyeS0+a2V5dmFsc1tl bnRyeS0+bmtleXZhbHNdID0ga3Y7Cj4gKyAgZW50cnktPm5rZXl2YWxzID0gbmV3X247Cj4gKwo+ ICsgIHJldHVybiBHUlVCX0VSUl9OT05FOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBGaW5kIHRoZSB2 YWx1ZSBvZiB0aGUga2V5IG5hbWVkIGJ5IGtleW5hbWUuIElmIHRoZXJlIGFyZSBhbGxvd2VkIHRv IAo+IGJlCj4gKyAqIG1vcmUgdGhhbiBvbmUsIHBhc3MgYSBwb2ludGVyIHRvIGFuIGludCBzZXQg dG8gLTEgdGhlIGZpcnN0IHRpbWUsIAo+IGFuZCBwYXNzCj4gKyAqIHRoZSBzYW1lIHBvaW50ZXIg dGhyb3VnaCBlYWNoIHRpbWUgYWZ0ZXIsIGFuZCBpdCdsbCByZXR1cm4gdGhlbSBpbiAKPiBzb3J0 ZWQKPiArICogb3JkZXIgYXMgZGVmaW5lZCBpbiB0aGUgQkxTIGZyYWdtZW50IGZpbGUuCj4gKyAq Lwo+ICtzdGF0aWMgY2hhciAqCj4gK2Jsc3VraV9nZXRfdmFsIChncnViX2Jsc3VraV9lbnRyeV90 ICplbnRyeSwgY29uc3QgY2hhciAqa2V5bmFtZSwgaW50IAo+ICpsYXN0KQo+ICt7Cj4gKyAgaW50 IGlkeCwgc3RhcnQgPSAwOwo+ICsgIHN0cnVjdCBrZXl2YWwgKmt2ID0gTlVMTDsKPiArICBjaGFy ICpyZXQgPSBOVUxMOwo+ICsKPiArICBpZiAobGFzdCAhPSBOVUxMKQo+ICsgICAgc3RhcnQgPSAq bGFzdCArIDE7Cj4gKwo+ICsgIGZvciAoaWR4ID0gc3RhcnQ7IGlkeCA8IGVudHJ5LT5ua2V5dmFs czsgaWR4KyspCj4gKyAgICB7Cj4gKyAgICAgIGt2ID0gZW50cnktPmtleXZhbHNbaWR4XTsKPiAr Cj4gKyAgICAgIGlmIChncnViX3N0cmNtcCAoa2V5bmFtZSwga3YtPmtleSkgPT0gMCkKPiArCXsK PiArCSAgcmV0ID0ga3YtPnZhbDsKPiArCSAgYnJlYWs7Cj4gKwl9CgpJbmRlbnRhdGlvbiBzZWVt cyBvZmYgaW4gaWYgY29uZGl0aW9uIQoKPiArICAgIH0KPiArCj4gKyAgaWYgKGxhc3QgIT0gTlVM TCkKPiArICAgIHsKPiArICAgICAgaWYgKGlkeCA9PSBlbnRyeS0+bmtleXZhbHMpCj4gKwkqbGFz dCA9IC0xOwo+ICsgICAgICBlbHNlCj4gKwkqbGFzdCA9IGlkeDsKClNhbWUgYXMgYWJvdmUhCgo+ ICsgICAgfQo+ICsKPiArICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBBZGQgYSBu ZXcgZ3J1Yl9ibHN1a2lfZW50cnlfdCBzdHJ1Y3QgdG8gdGhlIGVudHJpZXMgbGlzdCBhbmQgc29y dCAKPiBpdCdzCj4gKyAqIHBvc2l0aW9uIG9uIHRoZSBsaXN0Lgo+ICsgKi8KPiArc3RhdGljIGdy dWJfZXJyX3QKPiArYmxzdWtpX2FkZF9lbnRyeSAoZ3J1Yl9ibHN1a2lfZW50cnlfdCAqZW50cnkp Cj4gK3sKPiArICBncnViX2Jsc3VraV9lbnRyeV90ICplLCAqbGFzdCA9IE5VTEw7Cj4gKyAgZ3J1 Yl9lcnJfdCBlcnI7Cj4gKyAgaW50IHJjOwo+ICsKPiArICBpZiAoZW50cmllcyA9PSBOVUxMKQo+ ICsgICAgewo+ICsgICAgICBncnViX2RwcmludGYgKCJibHN1a2kiLCAiQWRkIGVudHJ5IHdpdGgg aWQgXCIlc1wiXG4iLCAKPiBlbnRyeS0+ZmlsZW5hbWUpOwo+ICsgICAgICBlbnRyaWVzID0gZW50 cnk7Cj4gKyAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOwo+ICsgICAgfQo+ICsKPiArICBGT1Jf QkxTVUtJX0VOVFJJRVMgKGUpCj4gKyAgICB7Cj4gKyAgICAgIGVyciA9IGdydWJfc3BsaXRfdmVy Y21wIChlbnRyeS0+ZmlsZW5hbWUsIGUtPmZpbGVuYW1lLCB0cnVlLCAKPiAmcmMpOwo+ICsgICAg ICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCj4gKwlyZXR1cm4gZXJyOwoKSW5kZW50YXRpb24g c2VlbXMgb2ZmIQoKPiArCj4gKyAgICAgIGlmIChyYyA9PSBHUlVCX1ZFUkNNUF9TQU1FKQo+ICsJ cmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgImR1cGxpY2F0ZSBmaWxl Iik7Cj4gKwoKU2FtZSBoZXJlIQoKPiArICAgICAgaWYgKHJjID09IEdSVUJfVkVSQ01QX05FV0VS KQo+ICsJewo+ICsJICBncnViX2RwcmludGYgKCJibHN1a2kiLCAiQWRkIGVudHJ5IHdpdGggaWQg XCIlc1wiXG4iLCAKPiBlbnRyeS0+ZmlsZW5hbWUpOwo+ICsJICBncnViX2xpc3RfcHVzaCAoR1JV Ql9BU19MSVNUX1AgKCZlKSwgR1JVQl9BU19MSVNUIChlbnRyeSkpOwo+ICsJICBpZiAoZW50cnkt Pm5leHQgPT0gZW50cmllcykKPiArCSAgICB7Cj4gKwkgICAgICBlbnRyaWVzID0gZW50cnk7Cj4g KwkgICAgICBlbnRyeS0+cHJldiA9IE5VTEw7Cj4gKwkgICAgfQo+ICsJICBlbHNlCj4gKwkgICAg bGFzdC0+bmV4dCA9IGVudHJ5Owo+ICsJICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKPiArCX0KPiAr ICAgICAgbGFzdCA9IGU7Cj4gKyAgICB9CgpJbmRlbnRhdGlvbiBzZWVtcyBvZmYgaW4gaWYgY29u ZGl0aW9uIQoKPiArCj4gKyAgaWYgKGxhc3QgIT0gTlVMTCkKPiArICAgIHsKPiArICAgICAgZ3J1 Yl9kcHJpbnRmICgiYmxzdWtpIiwgIkFkZCBlbnRyeSB3aXRoIGlkIFwiJXNcIlxuIiwgCj4gZW50 cnktPmZpbGVuYW1lKTsKPiArICAgICAgbGFzdC0+bmV4dCA9IGVudHJ5Owo+ICsgICAgICBlbnRy eS0+cHJldiA9ICZsYXN0Owo+ICsgICAgfQo+ICsKPiArICByZXR1cm4gR1JVQl9FUlJfTk9ORTsK PiArfQo+ICsKPiArLyoKPiArICogVGhpcyBmdW5jdGlvbiBwYXJzZXMgZWFjaCBsaW5lIG9mIGEg QkxTIGNvbmZpZyBmaWxlIHRvIG9idGFpbiB0aGUgCj4ga2V5IHZhbHVlCj4gKyAqIHBhaXJzIHRo YXQgd2lsbCBiZSB1c2VkIHRvIHNldHVwIHRoZSBHUlVCIG1lbnUgZW50cmllcy4gVGhlIGtleSAK PiB2YWx1ZSBwYWlyCj4gKyAqIHdpbGwgYmUgc3RvcmVkIGluIGEgbGlzdCBpbiB0aGUgZW50cnkg cGFyYW1ldGVyLgo+ICsgKi8KPiArc3RhdGljIGdydWJfZXJyX3QKPiArYmxzX3BhcnNlX2tleXZh bHMgKGdydWJfZmlsZV90IGYsIGdydWJfYmxzdWtpX2VudHJ5X3QgKmVudHJ5KQo+ICt7Cj4gKyAg Z3J1Yl9lcnJfdCBlcnIgPSBHUlVCX0VSUl9OT05FOwo+ICsKPiArICBmb3IgKDs7KQo+ICsgICAg ewo+ICsgICAgICBjaGFyICpidWY7Cj4gKyAgICAgIGNoYXIgKnNlcGFyYXRvcjsKPiArCj4gKyAg ICAgIGJ1ZiA9IGdydWJfZmlsZV9nZXRsaW5lIChmKTsKPiArICAgICAgaWYgKGJ1ZiA9PSBOVUxM KQo+ICsJYnJlYWs7CgpJbmRlbnRhdGlvbiBzZWVtcyBvZmYhCgo+ICsKPiArICAgICAgd2hpbGUg KGJ1ZiAhPSBOVUxMICYmIGJ1ZlswXSAhPSAnXDAnICYmIChidWZbMF0gPT0gJyAnIHx8Cj4gYnVm WzBdID09ICdcdCcpKQo+ICsJYnVmKys7CgpJbmRlbnRhdGlvbiBzZWVtcyBvZmYhCgo+ICsgICAg ICBpZiAoYnVmWzBdID09ICcjJykKPiArCXsKPiArCSAgZ3J1Yl9mcmVlIChidWYpOwo+ICsJICBj b250aW51ZTsKPiArCX0KCkluZGVudGF0aW9uIHNlZW1zIG9mZiBpbiBpZiBjb25kaXRpb24hCgo+ ICsKPiArICAgICAgc2VwYXJhdG9yID0gZ3J1Yl9zdHJjaHIgKGJ1ZiwgJyAnKTsKPiArCj4gKyAg ICAgIGlmIChzZXBhcmF0b3IgPT0gTlVMTCkKPiArCXNlcGFyYXRvciA9IGdydWJfc3RyY2hyIChi dWYsICdcdCcpOwoKSW5kZW50YXRpb24gc2VlbXMgb2ZmIQoKPiArCj4gKyAgICAgIGlmIChzZXBh cmF0b3IgPT0gTlVMTCB8fCBzZXBhcmF0b3JbMV0gPT0gJ1wwJykKPiArCXsKPiArCSAgZ3J1Yl9m cmVlIChidWYpOwo+ICsJICBicmVhazsKPiArCX0KCkluZGVudGF0aW9uIHNlZW1zIG9mZiBpbiBp ZiBjb25kaXRpb24hCgo+ICsKPiArICAgICAgc2VwYXJhdG9yWzBdID0gJ1wwJzsKPiArCj4gKyAg ICAgIGRvCj4gKwl7Cj4gKwkgIHNlcGFyYXRvcisrOwo+ICsJfQoKSW5kZW50YXRpb24gc2VlbXMg b2ZmIQoKPiArICAgICAgd2hpbGUgKCpzZXBhcmF0b3IgPT0gJyAnIHx8ICpzZXBhcmF0b3IgPT0g J1x0Jyk7CgpXaGF0J3MgdGhlIHVzZSBvZiB0aGlzIHdoaWxlIGNvbmRpdGlvbj8gSXQgbWF5IHJl c3VsdCBpbiBhbiBpbmZpbml0ZSAKbG9vcC4uLgoKPiArCj4gKyAgICAgIGVyciA9IGJsc3VraV9h ZGRfa2V5dmFsIChlbnRyeSwgYnVmLCBzZXBhcmF0b3IpOwo+ICsgICAgICBncnViX2ZyZWUgKGJ1 Zik7Cj4gKyAgICAgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKPiArCWJyZWFrOwoKSW5kZW50 YXRpb24gc2VlbXMgb2ZmIQoKPiArICAgIH0KPiArCj4gKyAgcmV0dXJuIGVycjsKPiArfQo+ICsK PiArc3RydWN0IHJlYWRfZW50cnlfaW5mbwo+ICt7Cj4gKyAgY29uc3QgY2hhciAqZGV2aWQ7Cj4g KyAgY29uc3QgY2hhciAqZGlybmFtZTsKPiArICBncnViX2ZpbGVfdCBmaWxlOwo+ICt9Owo+ICsK PiArLyoKPiArICogSWYgYSBmaWxlIGhhc24ndCBhbHJlYWR5IGJlZW4gb3BlbmVkLCB0aGlzIGZ1 bmN0aW9uIG9wZW5zIGEgQkxTIAo+IGNvbmZpZyBmaWxlCj4gKyAqIGFuZCBpbml0aWFsaXplcyBl bnRyeSBkYXRhIGJlZm9yZSBwYXJzaW5nIGtleXZhbHMgYW5kIGFkZGluZyB0aGUgCj4gZW50cnkg dG8KPiArICogdGhlIGxpc3Qgb2YgQkxTIGVudHJpZXMuCj4gKyAqLwo+ICtzdGF0aWMgaW50Cj4g K2Jsc3VraV9yZWFkX2VudHJ5IChjb25zdCBjaGFyICpmaWxlbmFtZSwKPiArCQkgICBjb25zdCBz dHJ1Y3QgZ3J1Yl9kaXJob29rX2luZm8gKmRpcmhvb2tfaW5mbyBfX2F0dHJpYnV0ZV9fIAo+ICgo X191bnVzZWRfXykpLAo+ICsJCSAgIHZvaWQgKmRhdGEpCgpJbmRlbnRhdGlvbiBzZWVtcyBvZmYh CgpibHN1a2lfcmVhZF9lbnRyeSAoY29uc3QgY2hhciAqZmlsZW5hbWUsCiAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc3RydWN0IGdydWJfZGlyaG9va19pbmZvICpkaXJob29rX2luZm8gCl9fYXR0 cmlidXRlX18gKChfX3VudXNlZF9fKSksCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSkK Cj4gK3sKPiArICBncnViX3NpemVfdCBwcmVmaXhfbGVuID0gMCwgZmlsZW5hbWVfbGVuLCBleHRf bGVuID0gNTsKPiArICBncnViX2Vycl90IGVycjsKPiArICBjaGFyICpwID0gTlVMTDsKPiArICBn cnViX2ZpbGVfdCBmID0gTlVMTDsKPiArICBncnViX2Jsc3VraV9lbnRyeV90ICplbnRyeTsKPiAr ICBzdHJ1Y3QgcmVhZF9lbnRyeV9pbmZvICppbmZvID0gKHN0cnVjdCByZWFkX2VudHJ5X2luZm8g KikgZGF0YTsKPiArCj4gKyAgZ3J1Yl9kcHJpbnRmICgiYmxzdWtpIiwgImZpbGVuYW1lOiBcIiVz XCJcbiIsIGZpbGVuYW1lKTsKPiArCj4gKyAgZmlsZW5hbWVfbGVuID0gZ3J1Yl9zdHJsZW4gKGZp bGVuYW1lKTsKPiArCj4gKyAgaWYgKGluZm8tPmZpbGUgIT0gTlVMTCkKPiArICAgIGYgPSBpbmZv LT5maWxlOwo+ICsgIGVsc2UKPiArICAgIHsKPiArICAgICAgaWYgKGZpbGVuYW1lX2xlbiA8IGV4 dF9sZW4gfHwgZ3J1Yl9zdHJjbXAgKGZpbGVuYW1lICsKPiBmaWxlbmFtZV9sZW4gLSBleHRfbGVu LCAiLmNvbmYiKSAhPSAwKQo+ICsJcmV0dXJuIDA7CgpJbmRlbnRhdGlvbiBzZWVtcyBvZmYhCgo+ ICsKPiArICAgICAgcCA9IGdydWJfeGFzcHJpbnRmICgiKCVzKSVzLyVzIiwgaW5mby0+ZGV2aWQs IGluZm8tPmRpcm5hbWUsIAo+IGZpbGVuYW1lKTsKPiArCj4gKyAgICAgIGYgPSBncnViX2ZpbGVf b3BlbiAocCwgR1JVQl9GSUxFX1RZUEVfQ09ORklHKTsKPiArICAgICAgZ3J1Yl9mcmVlIChwKTsK PiArICAgICAgaWYgKGYgPT0gTlVMTCkKPiArCWdvdG8gZmluaXNoOwoKSW5kZW50YXRpb24gc2Vl bXMgb2ZmIQoKPiArICAgIH0KPiArCj4gKyAgZW50cnkgPSBncnViX3phbGxvYyAoc2l6ZW9mICgq ZW50cnkpKTsKPiArICBpZiAoZW50cnkgPT0gTlVMTCkKPiArICAgIGdvdG8gZmluaXNoOwo+ICsK PiArICAvKgo+ICsgICAqIElmIGEgZmlsZSBpcyBvcGVuZWQgYmVmb3JlIHRoaXMgZnVuY3Rpb24s IHRoZSBmaWxlbmFtZSBtYXkgaGF2ZSBhIAo+IHByZWZpeC4KPiArICAgKiBTaW5jZSB0aGUgZmls ZW5hbWUgaXMgdXNlZCBmb3IgdGhlIElEIG9mIHRoZSBHUlVCIG1lbnUgZW50cnksIHdlIAo+IGNh bgo+ICsgICAqIHJlbW92ZSB0aGUgcHJlZml4Lgo+ICsgICAqLwo+ICsgIGlmIChpbmZvLT5maWxl ICE9IE5VTEwpCj4gKyAgICB7Cj4gKyAgICAgIGNoYXIgKnNsYXNoOwo+ICsKPiArICAgICAgc2xh c2ggPSBncnViX3N0cnJjaHIgKGZpbGVuYW1lLCAnLycpOwo+ICsgICAgICBpZiAoc2xhc2ggPT0g TlVMTCkKPiArCXNsYXNoID0gZ3J1Yl9zdHJyY2hyIChmaWxlbmFtZSwgJ1xcJyk7CgpJbmRlbnRh dGlvbiBzZWVtcyBvZmYhCgo+ICsKPiArICAgICAgaWYgKHNsYXNoICE9IE5VTEwpCj4gKwl7Cj4g KwkgIHdoaWxlICgqc2xhc2ggPT0gJy8nIHx8ICpzbGFzaCA9PSAnXFwnKQo+ICsJICAgIHNsYXNo Kys7Cj4gKwo+ICsJICBwcmVmaXhfbGVuID0gc2xhc2ggLSBmaWxlbmFtZTsKPiArCX0KCkluZGVu dGF0aW9uIHNlZW1zIG9mZiBpbiBpZiBjb25kaXRpb24hCgo+ICsgICAgfQo+ICsgIGZpbGVuYW1l X2xlbiAtPSBwcmVmaXhfbGVuOwo+ICsKPiArICBlbnRyeS0+ZmlsZW5hbWUgPSBncnViX3N0cm5k dXAgKGZpbGVuYW1lICsgcHJlZml4X2xlbiwgCj4gZmlsZW5hbWVfbGVuKTsKPiArICBpZiAoZW50 cnktPmZpbGVuYW1lID09IE5VTEwpCj4gKyAgICB7Cj4gKyAgICAgIGdydWJfZnJlZSAoZW50cnkp Owo+ICsgICAgICBnb3RvIGZpbmlzaDsKPiArICAgIH0KPiArCj4gKyAgZXJyID0gYmxzX3BhcnNl X2tleXZhbHMgKGYsIGVudHJ5KTsKPiArCj4gKyAgaWYgKGVyciA9PSBHUlVCX0VSUl9OT05FKQo+ ICsgICAgYmxzdWtpX2FkZF9lbnRyeSAoZW50cnkpOwo+ICsgIGVsc2UKPiArICAgIGdydWJfZnJl ZSAoZW50cnkpOwo+ICsKPiArIGZpbmlzaDoKPiArICBpZiAoZiAhPSBOVUxMKQo+ICsgICAgZ3J1 Yl9maWxlX2Nsb3NlIChmKTsKPiArCj4gKyAgcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qCj4gKyAq IFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgdmFsdWVzIHRoYXQgaGFkIHRoZSBzYW1l IGtleSBpbiB0aGUgCj4gQkxTCj4gKyAqIGNvbmZpZyBmaWxlLiBUaGUgbnVtYmVyIG9mIGVudHJp ZXMgaW4gdGhpcyBsaXN0IGlzIHJldHVybmVkIGJ5IHRoZSAKPiBsZW4KPiArICogcGFyYW1ldGVy Lgo+ICsgKi8KPiArc3RhdGljIGNoYXIgKioKPiArYmxzdWtpX21ha2VfbGlzdCAoZ3J1Yl9ibHN1 a2lfZW50cnlfdCAqZW50cnksIGNvbnN0IGNoYXIgKmtleSwgaW50IAo+ICpsZW4pCj4gK3sKPiAr ICBpbnQgbGFzdCA9IC0xOwo+ICsgIGNoYXIgKnZhbDsKPiArICBpbnQgbmxpc3QgPSAwOwo+ICsg IGNoYXIgKipsaXN0Owo+ICsKPiArICBsaXN0ID0gZ3J1Yl96YWxsb2MgKHNpemVvZiAoY2hhciAq KSk7Cj4gKyAgaWYgKGxpc3QgPT0gTlVMTCkKPiArICAgIHJldHVybiBOVUxMOwo+ICsKPiArICB3 aGlsZSAoMSkKPiArICAgIHsKPiArICAgICAgY2hhciAqKm5ldzsKPiArCj4gKyAgICAgIC8qCj4g KyAgICAgICAqIFNpbmNlIHRoZSBzYW1lIGtleSBtaWdodCBhcHBlYXIgbW9yZSB0aGFuIG9uY2Us IHRoZSAnbGFzdCcgCj4gdmFyaWFibGUKPiArICAgICAgICogc3RhcnRzIGF0IC0xIGFuZCBpbmNy ZW1lbnRzIHRvIGluZGljYXRlIHRoZSBsYXN0IGluZGV4IGluIHRoZSAKPiBsaXN0Cj4gKyAgICAg ICAqIHdlIG9idGFpbmVkIGZyb20gYmxzdWtpX2dldF92YWwoKS4KPiArICAgICAgICovCj4gKyAg ICAgIHZhbCA9IGJsc3VraV9nZXRfdmFsIChlbnRyeSwga2V5LCAmbGFzdCk7Cj4gKyAgICAgIGlm ICh2YWwgPT0gTlVMTCkKPiArCWJyZWFrOwoKSW5kZW50YXRpb24gc2VlbXMgb2ZmIQoKPiArCj4g KyAgICAgIG5ldyA9IGdydWJfcmVhbGxvYyAobGlzdCwgKG5saXN0ICsgMikgKiBzaXplb2YgKGNo YXIgKikpOwo+ICsgICAgICBpZiAobmV3ID09IE5VTEwpCj4gKwlicmVhazsKCkluZGVudGF0aW9u IHNlZW1zIG9mZiEKCj4gKwo+ICsgICAgICBsaXN0ID0gbmV3Owo+ICsgICAgICBsaXN0W25saXN0 KytdID0gdmFsOwo+ICsgICAgICBsaXN0W25saXN0XSA9IE5VTEw7Cj4gKyAgfQo+ICsKPiArICBp ZiAobmxpc3QgPT0gMCkKPiArICAgIHsKPiArICAgICAgZ3J1Yl9mcmVlIChsaXN0KTsKPiArICAg ICAgcmV0dXJuIE5VTEw7Cj4gKyAgICB9Cj4gKwo+ICsgIGlmIChsZW4gIT0gTlVMTCkKPiArICAg ICpsZW4gPSBubGlzdDsKPiArCj4gKyAgcmV0dXJuIGxpc3Q7Cj4gK30KPiArCj4gKy8qCj4gKyAq IFRoaXMgZnVuY3Rpb24gYXBwZW5kcyBhIGZpZWxkIHRvIHRoZSBlbmQgb2YgYSBidWZmZXIuIElm IHRoZSBmaWVsZCAKPiBnaXZlbiBpcwo+ICsgKiBhbiBlbnZpb3JubWVudGFsIHZhcmlhYmxlLCBp dCBnZXRzIHRoZSB2YWx1ZSBzdG9yZWQgZm9yIHRoYXQgCj4gdmFyaWFibGUgYW5kCj4gKyAqIGFw cGVuZHMgdGhhdCB0byB0aGUgYnVmZmVyIGluc3RlYWQuCj4gKyAqLwo+ICtzdGF0aWMgY2hhciAq Cj4gK2Jsc3VraV9maWVsZF9hcHBlbmQgKGJvb2wgaXNfZW52X3ZhciwgY2hhciAqYnVmZmVyLCBj b25zdCBjaGFyCj4gKnN0YXJ0LCBjb25zdCBjaGFyICplbmQpCj4gK3sKPiArICBjaGFyICp0bXA7 Cj4gKyAgY29uc3QgY2hhciAqZmllbGQ7Cj4gKyAgaW50IHRlcm0gPSAoaXNfZW52X3ZhciA9PSB0 cnVlKSA/IDIgOiAxOwo+ICsgIGdydWJfc2l6ZV90IHNpemUgPSAwOwo+ICsKPiArICB0bXAgPSBn cnViX3N0cm5kdXAgKHN0YXJ0LCBlbmQgLSBzdGFydCArIDEpOwo+ICsgIGlmICh0bXAgPT0gTlVM TCkKPiArICAgIHJldHVybiBOVUxMOwo+ICsKPiArICBmaWVsZCA9IHRtcDsKPiArCj4gKyAgaWYg KGlzX2Vudl92YXIgPT0gdHJ1ZSkKPiArICAgIHsKPiArICAgICAgZmllbGQgPSBncnViX2Vudl9n ZXQgKHRtcCk7Cj4gKyAgICAgIGlmIChmaWVsZCA9PSBOVUxMKQo+ICsJcmV0dXJuIGJ1ZmZlcjsK PiArICAgIH0KPiArCj4gKyAgaWYgKGdydWJfYWRkIChncnViX3N0cmxlbiAoZmllbGQpLCB0ZXJt LCAmc2l6ZSkpCj4gKyAgICByZXR1cm4gTlVMTDsKPiArCj4gKyAgaWYgKGJ1ZmZlciA9PSBOVUxM KQo+ICsgICAgYnVmZmVyID0gZ3J1Yl96YWxsb2MgKHNpemUpOwo+ICsgIGVsc2UKPiArICAgIHsK PiArICAgICAgaWYgKGdydWJfYWRkIChzaXplLCBncnViX3N0cmxlbiAoYnVmZmVyKSwgJnNpemUp KQo+ICsJcmV0dXJuIE5VTEw7CgpJbmRlbnRhdGlvbiBzZWVtcyBvZmYhCkFkZGluZyBvbmUgbmV3 IGxpbmUgd291bGQgYmUgZ29vZCBoZXJlIQoKPiArICAgICAgYnVmZmVyID0gZ3J1Yl9yZWFsbG9j IChidWZmZXIsIHNpemUpOwo+ICsgICAgfQo+ICsKPiArICBpZiAoYnVmZmVyID09IE5VTEwpCj4g KyAgICByZXR1cm4gTlVMTDsKPiArCj4gKyAgdG1wID0gYnVmZmVyICsgZ3J1Yl9zdHJsZW4gKGJ1 ZmZlcik7Cj4gKyAgdG1wID0gZ3J1Yl9zdHBjcHkgKHRtcCwgZmllbGQpOwo+ICsKPiArICBpZiAo aXNfZW52X3ZhciA9PSB0cnVlKQo+ICsgICAgdG1wID0gZ3J1Yl9zdHBjcHkgKHRtcCwgIiAiKTsK PiArCj4gKyAgcmV0dXJuIGJ1ZmZlcjsKPiArfQo+ICsKPiArLyoKPiArICogVGhpcyBmdW5jdGlv biB0YWtlcyBhIHZhbHVlIHN0cmluZywgY2hlY2tzIGZvciBlbnZpcm9ubWVudGFsIAo+IHZhcmlh YmxlcywgYW5kCj4gKyAqIHJldHVybnMgdGhlIHZhbHVlIHN0cmluZyB3aXRoIGFsbCBlbnZpcm9u bWVudGFsIHZhcmlhYmxlcyByZXBsYWNlZCAKPiB3aXRoIHRoZQo+ICsgKiB2YWx1ZSBzdG9yZWQg aW4gdGhlIHZhcmlhYmxlLgo+ICsgKi8KPiArc3RhdGljIGNoYXIgKgo+ICtibHN1a2lfZXhwYW5k X3ZhbCAoY29uc3QgY2hhciAqdmFsdWUpCj4gK3sKPiArICBjaGFyICpidWZmZXIgPSBOVUxMOwo+ ICsgIGNvbnN0IGNoYXIgKnN0YXJ0ID0gdmFsdWU7Cj4gKyAgY29uc3QgY2hhciAqZW5kID0gdmFs dWU7Cj4gKyAgYm9vbCBpc19lbnZfdmFyID0gZmFsc2U7Cj4gKwo+ICsgIGlmICh2YWx1ZSA9PSBO VUxMKQo+ICsgICAgcmV0dXJuIE5VTEw7Cj4gKwo+ICsgIHdoaWxlICgqdmFsdWUgIT0gJ1wwJykK PiArICAgIHsKPiArICAgICAgaWYgKCp2YWx1ZSA9PSAnJCcpCj4gKwl7Cj4gKwkgIGlmIChzdGFy dCAhPSBlbmQpCj4gKwkgICAgewo+ICsJICAgICAgYnVmZmVyID0gYmxzdWtpX2ZpZWxkX2FwcGVu ZCAoaXNfZW52X3ZhciwgYnVmZmVyLCBzdGFydCwgZW5kKTsKPiArCSAgICAgIGlmIChidWZmZXIg PT0gTlVMTCkKPiArCQlyZXR1cm4gTlVMTDsKPiArCSAgICB9Cj4gKwo+ICsJICBpc19lbnZfdmFy ID0gdHJ1ZTsKPiArCSAgc3RhcnQgPSB2YWx1ZSArIDE7Cj4gKwl9Cj4gKyAgICAgIGVsc2UgaWYg KGlzX2Vudl92YXIgPT0gdHJ1ZSkKPiArCXsKPiArCSAgaWYgKGdydWJfaXNhbG51bSAoKnZhbHVl KSA9PSAwICYmICp2YWx1ZSAhPSAnXycpCj4gKwkgICAgewo+ICsJICAgICAgYnVmZmVyID0gYmxz dWtpX2ZpZWxkX2FwcGVuZCAoaXNfZW52X3ZhciwgYnVmZmVyLCBzdGFydCwgZW5kKTsKPiArCSAg ICAgIGlzX2Vudl92YXIgPSBmYWxzZTsKPiArCSAgICAgIHN0YXJ0ID0gdmFsdWU7Cj4gKwkgICAg ICBpZiAoKnN0YXJ0ID09ICcgJykKPiArCQlzdGFydCsrOwo+ICsJICAgIH0KPiArCX0KCkluZGVu dGF0aW9uIHNlZW1zIG9mZiBpbiAiaWYgKCp2YWx1ZSA9PSAnJCcpIiBhbmQgZWxzZSBpZiBjb25k aXRpb25zLgpNaXNzaW5nIGVsc2UgY29uZGl0aW9uIGluIGlmIGVsc2UgbGFkZGVyLiBBZGRpbmcg aXQgd291bGQgYmUgZ29vZCEKCj4gKwo+ICsgICAgICBlbmQgPSB2YWx1ZTsKPiArICAgICAgdmFs dWUrKzsKPiArICAgIH0KPiArCj4gKyAgaWYgKHN0YXJ0ICE9IGVuZCkKPiArICAgIHsKPiArICAg ICAgYnVmZmVyID0gYmxzdWtpX2ZpZWxkX2FwcGVuZCAoaXNfZW52X3ZhciwgYnVmZmVyLCBzdGFy dCwgZW5kKTsKPiArICAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQo+ICsJcmV0dXJuIE5VTEw7CgpJ bmRlbnRhdGlvbiBzZWVtcyBvZmYhCgo+ICsgICAgfQo+ICsKPiArICByZXR1cm4gYnVmZmVyOwo+ ICt9Cj4gKwo+ICsvKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyBhIHN0cmluZyBjb250YWlu aW5nIGluaXRyZCBwYXRocyBhbmQgcmV0dXJucyAKPiBpdCBhcyBhCj4gKyAqIGxpc3QuCj4gKyAq Lwo+ICtzdGF0aWMgY2hhciAqKgo+ICtibHN1a2lfZWFybHlfaW5pdHJkX2xpc3QgKGNvbnN0IGNo YXIgKmluaXRyZCkKPiArewo+ICsgIGludCBubGlzdCA9IDA7Cj4gKyAgY2hhciAqKmxpc3QgPSBO VUxMOwo+ICsgIGNvbnN0IGNoYXIgKnNlcGFyYXRvciA9IGluaXRyZDsKPiArICBjaGFyICp0bXA7 Cj4gKwo+ICsgIGZvciAoOzspCj4gKyAgICB7Cj4gKyAgICAgIHdoaWxlICgqc2VwYXJhdG9yICE9 ICdcMCcgJiYgKnNlcGFyYXRvciAhPSAnICcgJiYgKnNlcGFyYXRvciAhPSAKPiAnXHQnKQo+ICsJ c2VwYXJhdG9yKys7CgpJbmRlbnRhdGlvbiBzZWVtcyBvZmYhCgo+ICsgICAgICBpZiAoKnNlcGFy YXRvciA9PSAnXDAnKQo+ICsJYnJlYWs7CgpJbmRlbnRhdGlvbiBzZWVtcyBvZmYhCgo+ICsKPiAr ICAgICAgbGlzdCA9IGdydWJfcmVhbGxvYyAobGlzdCwgKG5saXN0ICsgMikgKiBzaXplb2YgKGNo YXIgKikpOwoKR29vZCB0byB1c2UgZ3J1Yl9tYWxsb2MgaGVyZSEKCj4gKyAgICAgIGlmIChsaXN0 ID09IE5VTEwpCj4gKwlyZXR1cm4gTlVMTDsKCkluZGVudGF0aW9uIHNlZW1zIG9mZiEKCj4gKwo+ ICsgICAgICB0bXAgPSBncnViX3N0cm5kdXAgKGluaXRyZCwgc2VwYXJhdG9yIC0gaW5pdHJkKTsK PiArICAgICAgaWYgKHRtcCA9PSBOVUxMKQo+ICsJewo+ICsJICBncnViX2ZyZWUgKGxpc3QpOwo+ ICsJICByZXR1cm4gTlVMTDsKPiArCX0KCkluZGVudGF0aW9uIHNlZW1zIG9mZiBpbiBpZiBjb25k aXRpb24hCgo+ICsgICAgICBsaXN0W25saXN0KytdID0gdG1wOwo+ICsgICAgICBsaXN0W25saXN0 XSA9IE5VTEw7Cj4gKyAgICAgIHNlcGFyYXRvcisrOwo+ICsgICAgICBpbml0cmQgPSBzZXBhcmF0 b3I7Cj4gKyAgICB9Cj4gKwo+ICsgIGxpc3QgPSBncnViX3JlYWxsb2MgKGxpc3QsIChubGlzdCAr IDIpICogc2l6ZW9mIChjaGFyICopKTsKPiArICBpZiAobGlzdCA9PSBOVUxMKQo+ICsgICAgcmV0 dXJuIE5VTEw7Cj4gKwo+ICsgIHRtcCA9IGdydWJfc3RybmR1cCAoaW5pdHJkLCBncnViX3N0cmxl biAoaW5pdHJkKSk7Cj4gKyAgaWYgKHRtcCA9PSBOVUxMKQo+ICsgICAgewo+ICsgICAgICBncnVi X2ZyZWUgKGxpc3QpOwo+ICsgICAgICByZXR1cm4gTlVMTDsKPiArICAgIH0KPiArICBsaXN0W25s aXN0KytdID0gdG1wOwo+ICsgIGxpc3Rbbmxpc3RdID0gTlVMTDsKPiArCj4gKyAgcmV0dXJuIGxp c3Q7Cj4gK30KPiArCj4gKy8qCj4gKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyB3 aXRoIHRoZSBjb21tYW5kIHRvIGxvYWQgYSBsaW51eCAKPiBrZXJuZWwgd2l0aAo+ICsgKiBrZXJu ZWwgY29tbWFuZC1saW5lIG9wdGlvbnMgYmFzZWQgb24gd2hhdCB3YXMgc3BlY2lmaWVkIGluIHRo ZSBCTFMgCj4gY29uZmlnCj4gKyAqIGZpbGUuCj4gKyAqLwo+ICtzdGF0aWMgY2hhciAqCj4gK2Js c19nZXRfbGludXggKGdydWJfYmxzdWtpX2VudHJ5X3QgKmVudHJ5KQo+ICt7Cj4gKyAgY2hhciAq bGludXhfcGF0aDsKPiArICBjaGFyICpsaW51eF9jbWQgPSBOVUxMOwo+ICsgIGNoYXIgKm9wdGlv bnMgPSBOVUxMOwo+ICsgIGNoYXIgKnRtcDsKPiArICBncnViX3NpemVfdCBzaXplOwo+ICsKPiAr ICBsaW51eF9wYXRoID0gYmxzdWtpX2dldF92YWwgKGVudHJ5LCAibGludXgiLCBOVUxMKTsKPiAr ICBvcHRpb25zID0gYmxzdWtpX2V4cGFuZF92YWwgKGJsc3VraV9nZXRfdmFsIChlbnRyeSwgIm9w dGlvbnMiLCAKPiBOVUxMKSk7Cj4gKwo+ICsgIGlmIChvcHRpb25zID09IE5VTEwpCj4gKyAgICBv cHRpb25zID0gYmxzdWtpX2V4cGFuZF92YWwgKGdydWJfZW52X2dldCAoImRlZmF1bHRfa2VybmVs b3B0cyIpKTsKPiArCj4gKyAgaWYgKGdydWJfYWRkIChncnViX3N0cmxlbiAoImxpbnV4ICIpLCBn cnViX3N0cmxlbiAobGludXhfcGF0aCksIAo+ICZzaXplKSkKPiArICAgIHsKPiArICAgICAgZ3J1 Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX1JBTkdFLCAib3ZlcmZsb3cgZGV0ZWN0ZWQgd2hpbGUK PiBjYWxjdWxhdGluZyBsaW51eCBidWZmZXIgc2l6ZSIpOwo+ICsgICAgICBnb3RvIGZpbmlzaDsK PiArICAgIH0KPiArCj4gKyAgaWYgKG9wdGlvbnMgIT0gTlVMTCkKPiArICAgIHsKPiArICAgICAg aWYgKGdydWJfYWRkIChzaXplLCBncnViX3N0cmxlbiAob3B0aW9ucyksICZzaXplKSB8fAo+ICsJ ICBncnViX2FkZCAoc2l6ZSwgMSwgJnNpemUpKQo+ICsJewo+ICsJICBncnViX2Vycm9yIChHUlVC X0VSUl9PVVRfT0ZfUkFOR0UsICJvdmVyZmxvdyBkZXRlY3RlZCB3aGlsZQo+IGNhbGN1bGF0aW5n IGxpbnV4IGJ1ZmZlciBzaXplIik7Cj4gKwkgIGdvdG8gZmluaXNoOwo+ICsJfQoKSW5kZW50YXRp b24gc2VlbXMgb2ZmIQoKICAgICAgaWYgKGdydWJfYWRkIChzaXplLCBncnViX3N0cmxlbiAob3B0 aW9ucyksICZzaXplKSB8fCBncnViX2FkZCAKKHNpemUsIDEsICZzaXplKSkKICAgICAgICB7CiAg ICAgICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfUkFOR0UsICJvdmVyZmxvdyBkZXRl Y3RlZCB3aGlsZSAKY2FsY3VsYXRpbmcgbGludXggYnVmZmVyIHNpemUiKTsKICAgICAgICAgIGdv dG8gZmluaXNoOwogICAgICAgIH0KCj4gKyAgICB9Cj4gKwo+ICsgIGxpbnV4X2NtZCA9IGdydWJf bWFsbG9jIChzaXplKTsKPiArICBpZiAobGludXhfY21kID09IE5VTEwpCj4gKyAgICBnb3RvIGZp bmlzaDsKPiArCj4gKyAgdG1wID0gbGludXhfY21kOwo+ICsgIHRtcCA9IGdydWJfc3RwY3B5ICh0 bXAsICJsaW51eCAiKTsKPiArICB0bXAgPSBncnViX3N0cGNweSAodG1wLCBsaW51eF9wYXRoKTsK PiArICBpZiAob3B0aW9ucyAhPSBOVUxMKQo+ICsgICAgewo+ICsgICAgICB0bXAgPSBncnViX3N0 cGNweSAodG1wLCAiICIpOwo+ICsgICAgICB0bXAgPSBncnViX3N0cGNweSAodG1wLCBvcHRpb25z KTsKPiArICAgIH0KPiArICB0bXAgPSBncnViX3N0cGNweSAodG1wLCAiXG4iKTsKPiArCj4gKyBm aW5pc2g6Cj4gKyAgZ3J1Yl9mcmVlIChvcHRpb25zKTsKPiArCj4gKyAgcmV0dXJuIGxpbnV4X2Nt ZDsKPiArfQo+ICsKPiArLyoKPiArICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIHdp dGggdGhlIGNvbW1hbmQgdG8gbG9hZCBhbGwgaW5pdHJkcyAKPiBmb3IgYQo+ICsgKiBsaW51eCBr ZXJuZWwgaW1hZ2UgYmFzZWQgb24gdGhlIGxpc3QgcHJvdmlkZWQgYnkgdGhlIEJMUyBjb25maWcg Cj4gZmlsZS4KPiArICovCj4gK3N0YXRpYyBjaGFyICoKPiArYmxzX2dldF9pbml0cmQgKGdydWJf YmxzdWtpX2VudHJ5X3QgKmVudHJ5KQo+ICt7Cj4gKyAgY2hhciAqKmluaXRyZF9saXN0Owo+ICsg IGNoYXIgKmluaXRyZF9jbWQgPSBOVUxMOwo+ICsgIGNvbnN0IGNoYXIgKmVhcmx5X2luaXRyZDsK PiArICBjaGFyICoqZWFybHlfaW5pdHJkX2xpc3QgPSBOVUxMOwo+ICsgIGNoYXIgKnRtcDsKPiAr ICBjaGFyICpzbGFzaDsKPiArICBjaGFyICpwcmVmaXggPSBOVUxMOwo+ICsgIGdydWJfc2l6ZV90 IHByZWZpeF9sZW4gPSAwOwo+ICsgIGNoYXIgKmxpbnV4X3BhdGg7Cj4gKyAgZ3J1Yl9zaXplX3Qg c2l6ZTsKPiArICBpbnQgaTsKPiArCj4gKyAgaW5pdHJkX2xpc3QgPSBibHN1a2lfbWFrZV9saXN0 IChlbnRyeSwgImluaXRyZCIsIE5VTEwpOwo+ICsgIGVhcmx5X2luaXRyZCA9IGdydWJfZW52X2dl dCAoImVhcmx5X2luaXRyZCIpOwo+ICsKPiArICBpZiAoZWFybHlfaW5pdHJkICE9IE5VTEwpCj4g KyAgICB7Cj4gKyAgICAgIGVhcmx5X2luaXRyZF9saXN0ID0gYmxzdWtpX2Vhcmx5X2luaXRyZF9s aXN0IChlYXJseV9pbml0cmQpOwo+ICsgICAgICBpZiAoZWFybHlfaW5pdHJkX2xpc3QgPT0gTlVM TCkKPiArCXsKPiArCSAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwgTl8oImZh aWxlZCB0byBjcmVhdGUgZWFybHkKPiBpbml0cmQgbGlzdCIpKTsKPiArCSAgZ290byBmaW5pc2g7 Cj4gKwl9CgpJbmRlbnRhdGlvbiBzZWVtcyBvZmYgaW4gaWYgY29uZGl0aW9uIQoKPiArCj4gKyAg ICAgIGlmIChpbml0cmRfbGlzdCAhPSBOVUxMICYmIGluaXRyZF9saXN0WzBdICE9IE5VTEwpCj4g Kwl7Cj4gKwkgIHNsYXNoID0gZ3J1Yl9zdHJyY2hyIChpbml0cmRfbGlzdFswXSwgJy8nKTsKPiAr CSAgaWYgKHNsYXNoID09IE5VTEwpCj4gKwkgICAgcHJlZml4X2xlbiA9IHNsYXNoIC0gaW5pdHJk X2xpc3RbMF0gKyAxOwo+ICsJICBwcmVmaXggPSBncnViX3N0cm5kdXAgKGluaXRyZF9saXN0WzBd LCBwcmVmaXhfbGVuKTsKPiArCX0KCkluZGVudGF0aW9uIHNlZW1zIG9mZiBpbiBpZiBjb25kaXRp b24hCgo+ICsgICAgICBlbHNlCj4gKwl7Cj4gKwkgIGxpbnV4X3BhdGggPSBibHN1a2lfZ2V0X3Zh bCAoZW50cnksICJsaW51eCIsIE5VTEwpOwo+ICsJICBzbGFzaCA9IGdydWJfc3RycmNociAobGlu dXhfcGF0aCwgJy8nKTsKPiArCSAgaWYgKHNsYXNoICE9IE5VTEwpCj4gKwkgICAgcHJlZml4X2xl biA9IHNsYXNoIC0gbGludXhfcGF0aCArIDE7Cj4gKwkgIHByZWZpeCA9IGdydWJfc3RybmR1cCAo bGludXhfcGF0aCwgcHJlZml4X2xlbik7Cj4gKwl9CgpJbmRlbnRhdGlvbiBzZWVtcyBvZmYgaW4g ZWxzZSBjb25kaXRpb24hCgo+ICsKPiArICAgICAgaWYgKHByZWZpeCA9PSBOVUxMKQo+ICsJewo+ ICsJICBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLCBOXygiZmFpbGVkIHRvIGFs bG9jYXRlIGluaXRyZAo+IHByZWZpeCBidWZmZXIiKSk7Cj4gKwkgIGdvdG8gZmluaXNoOwo+ICsJ fQoKSW5kZW50YXRpb24gc2VlbXMgb2ZmIGluIGlmIGNvbmRpdGlvbiEKCj4gKyAgICB9Cj4gKwo+ ICsgIGlmIChlYXJseV9pbml0cmRfbGlzdCAhPSBOVUxMIHx8IGluaXRyZF9saXN0ICE9IE5VTEwp Cj4gKyAgICB7Cj4gKwo+ICsgICAgICBzaXplID0gZ3J1Yl9zdHJsZW4gKCJpbml0cmQiKTsKPiAr Cj4gKyAgICAgIGZvciAoaSA9IDA7IGVhcmx5X2luaXRyZF9saXN0ICE9IE5VTEwgJiYgZWFybHlf aW5pdHJkX2xpc3RbaV0KPiAhPSBOVUxMOyBpKyspCj4gKwl7Cj4gKwkgIGlmIChncnViX2FkZCAo c2l6ZSwgMSwgJnNpemUpIHx8Cj4gKwkgICAgICBncnViX2FkZCAoc2l6ZSwgZ3J1Yl9zdHJsZW4g KHByZWZpeCksICZzaXplKSB8fAo+ICsJICAgICAgZ3J1Yl9hZGQgKHNpemUsIGdydWJfc3RybGVu IChlYXJseV9pbml0cmRfbGlzdFtpXSksICZzaXplKSkKPiArCSAgICB7Cj4gKwkgICAgICBncnVi X2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfUkFOR0UsICJvdmVyZmxvdyBkZXRlY3RlZAo+IGNhbGN1 bGF0aW5nIGluaXRyZCBidWZmZXIgc2l6ZSIpOwo+ICsJICAgICAgZ290byBmaW5pc2g7Cj4gKwkg ICAgfQo+ICsJfQo+ICsKPiArICAgICAgZm9yIChpID0gMDsgaW5pdHJkX2xpc3QgIT0gTlVMTCAm JiBpbml0cmRfbGlzdFtpXSAhPSBOVUxMOyBpKyspCj4gKwl7CgpJbmRlbnRhdGlvbiBzZWVtcyBv ZmYhCgo+ICsJICBpZiAoZ3J1Yl9hZGQgKHNpemUsIDEsICZzaXplKSB8fAo+ICsJICAgICAgZ3J1 Yl9hZGQgKHNpemUsIGdydWJfc3RybGVuIChpbml0cmRfbGlzdFtpXSksICZzaXplKSkKPiArCSAg ICB7Cj4gKwkgICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfUkFOR0UsICJvdmVyZmxv dyBkZXRlY3RlZAo+IGNhbGN1bGF0aW5nIGluaXRyZCBidWZmZXIgc2l6ZSIpOwo+ICsJICAgICAg Z290byBmaW5pc2g7Cj4gKwkgICAgfQo+ICsJfQo+ICsKPiArICAgICAgaWYgKGdydWJfYWRkIChz aXplLCAxLCAmc2l6ZSkpCj4gKwl7Cj4gKwkgIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9S QU5HRSwgIm92ZXJmbG93IGRldGVjdGVkIGNhbGN1bGF0aW5nCj4gaW5pdHJkIGJ1ZmZlciBzaXpl Iik7Cj4gKwkgIGdvdG8gZmluaXNoOwo+ICsJfQoKSW5kZW50YXRpb24gc2VlbXMgb2ZmIGluIGlm IGNvbmRpdGlvbiEKCj4gKwo+ICsgICAgICBpbml0cmRfY21kID0gZ3J1Yl9tYWxsb2MgKHNpemUp Owo+ICsgICAgICBpZiAoaW5pdHJkX2NtZCA9PSBOVUxMKQo+ICsJZ290byBmaW5pc2g7CgpJbmRl bnRhdGlvbiBzZWVtcyBvZmYhCgo+ICsKPiArICAgICAgdG1wID0gZ3J1Yl9zdHBjcHkgKGluaXRy ZF9jbWQsICJpbml0cmQiKTsKPiArICAgICAgZm9yIChpID0gMDsgZWFybHlfaW5pdHJkX2xpc3Qg IT0gTlVMTCAmJiBlYXJseV9pbml0cmRfbGlzdFtpXQo+ICE9IE5VTEw7IGkrKykKPiArCXsKCklu ZGVudGF0aW9uIHNlZW1zIG9mZiEKCj4gKwkgIGdydWJfZHByaW50ZiAoImJsc3VraSIsICJhZGRp bmcgZWFybHkgaW5pdHJkICVzXG4iLCAKPiBlYXJseV9pbml0cmRfbGlzdFtpXSk7Cj4gKwkgIHRt cCA9IGdydWJfc3RwY3B5ICh0bXAsICIgIik7Cj4gKwkgIHRtcCA9IGdydWJfc3RwY3B5ICh0bXAs IHByZWZpeCk7Cj4gKwkgIHRtcCA9IGdydWJfc3RwY3B5ICh0bXAsIGVhcmx5X2luaXRyZF9saXN0 W2ldKTsKPiArCX0KPiArCj4gKyAgICAgIGZvciAoaSA9IDA7IGluaXRyZF9saXN0ICE9IE5VTEwg JiYgaW5pdHJkX2xpc3RbaV0gIT0gTlVMTDsgaSsrKQo+ICsJewoKSW5kZW50YXRpb24gc2VlbXMg b2ZmIQoKPiArCSAgZ3J1Yl9kcHJpbnRmICgiYmxzdWtpIiwgImFkZGluZyBpbml0cmQgJXNcbiIs IGluaXRyZF9saXN0W2ldKTsKPiArCSAgdG1wID0gZ3J1Yl9zdHBjcHkgKHRtcCwgIiAiKTsKPiAr CSAgdG1wID0gZ3J1Yl9zdHBjcHkgKHRtcCwgaW5pdHJkX2xpc3RbaV0pOwo+ICsJfQo+ICsgICAg ICB0bXAgPSBncnViX3N0cGNweSAodG1wLCAiXG4iKTsKPiArICAgIH0KPiArCj4gKyBmaW5pc2g6 Cj4gKyAgZm9yIChpID0gMDsgZWFybHlfaW5pdHJkX2xpc3QgIT0gTlVMTCAmJiBlYXJseV9pbml0 cmRfbGlzdFtpXSAhPSAKPiBOVUxMOyBpKyspCj4gKyAgICBncnViX2ZyZWUgKGVhcmx5X2luaXRy ZF9saXN0W2ldKTsKPiArICBncnViX2ZyZWUgKHByZWZpeCk7Cj4gKwo+ICsgIHJldHVybiBpbml0 cmRfY21kOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJp bmcgd2l0aCB0aGUgY29tbWFuZCB0byBsb2FkIGEgZGV2aWNlIAo+IHRyZWUgYmxvYgo+ICsgKiBm cm9tIHRoZSBCTFMgY29uZmlnIGZpbGUuCj4gKyAqLwo+ICtzdGF0aWMgY2hhciAqCj4gK2Jsc19n ZXRfZGV2aWNldHJlZSAoZ3J1Yl9ibHN1a2lfZW50cnlfdCAqZW50cnkpCj4gK3sKPiArICBjaGFy ICpkdF9wYXRoOwo+ICsgIGNoYXIgKmR0X2NtZCA9IE5VTEw7Cj4gKyAgY2hhciAqdG1wOwo+ICsg IGNoYXIgKmxpbnV4X3BhdGg7Cj4gKyAgY2hhciAqc2xhc2g7Cj4gKyAgY2hhciAqcHJlZml4ID0g TlVMTDsKPiArICBncnViX3NpemVfdCBwcmVmaXhfbGVuID0gMDsKPiArICBncnViX3NpemVfdCBz aXplOwo+ICsgIGJvb2wgYWRkX2R0X3ByZWZpeCA9IGZhbHNlOwo+ICsKPiArICBkdF9wYXRoID0g YmxzdWtpX2V4cGFuZF92YWwgKGJsc3VraV9nZXRfdmFsIChlbnRyeSwgImRldmljZXRyZWUiLCAK PiBOVUxMKSk7Cj4gKwo+ICsgIGlmIChkdF9wYXRoID09IE5VTEwpCj4gKyAgICB7Cj4gKyAgICAg IGR0X3BhdGggPSBibHN1a2lfZXhwYW5kX3ZhbCAoZ3J1Yl9lbnZfZ2V0ICgiZGV2aWNldHJlZSIp KTsKPiArICAgICAgYWRkX2R0X3ByZWZpeCA9IHRydWU7Cj4gKyAgICB9Cj4gKwo+ICsgIGlmIChk dF9wYXRoICE9IE5VTEwpCj4gKyAgICB7Cj4gKyAgICAgIGlmIChhZGRfZHRfcHJlZml4ID09IHRy dWUpCj4gKwl7CgpJbmRlbnRhdGlvbiBzZWVtcyBvZmYhCgo+ICsJICBsaW51eF9wYXRoID0gYmxz dWtpX2dldF92YWwgKGVudHJ5LCAibGludXgiLCBOVUxMKTsKPiArCSAgc2xhc2ggPSBncnViX3N0 cmNociAobGludXhfcGF0aCwgJy8nKTsKPiArCSAgaWYgKHNsYXNoICE9IE5VTEwpCj4gKwkgICAg cHJlZml4X2xlbiA9IHNsYXNoIC0gbGludXhfcGF0aCArIDE7CgpBZGRpbmcgYSBuZXcgbGluZSBo ZXJlIHdvdWxkIGJlIGdvb2QhCgoKPiArCSAgcHJlZml4ID0gZ3J1Yl9zdHJuZHVwIChsaW51eF9w YXRoLCBwcmVmaXhfbGVuKTsKPiArCSAgaWYgKHByZWZpeCA9PSBOVUxMKQo+ICsJICAgIHsKPiAr CSAgICAgIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksIE5fKCJmYWlsZWQgdG8g YWxsb2NhdGUKPiBwcmVmaXggYnVmZmVyIikpOwo+ICsJICAgICAgZ290byBmaW5pc2g7Cj4gKwkg ICAgfQo+ICsJfQo+ICsKPiArICAgICAgaWYgKGdydWJfYWRkIChncnViX3N0cmxlbiAoImRldmlj ZXRyZWUgIiksIGdydWJfc3RybGVuCj4gKGR0X3BhdGgpLCAmc2l6ZSkgfHwKPiArCSAgZ3J1Yl9h ZGQgKHNpemUsIDEsICZzaXplKSkKCkluZGVudGF0aW9uIHNlZW1zIG9mZiEKCj4gKwl7CgpJbmRl bnRhdGlvbiBzZWVtcyBvZmYhCgo+ICsJICBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfUkFO R0UsICJvdmVyZmxvdyBkZXRlY3RlZCBjYWxjdWxhdGluZwo+IGRldmljZSB0cmVlIGJ1ZmZlciBz aXplIik7Cj4gKwkgIGdvdG8gZmluaXNoOwo+ICsJfQo+ICsKPiArICAgICAgaWYgKGFkZF9kdF9w cmVmaXggPT0gdHJ1ZSkKPiArCXsKCkluZGVudGF0aW9uIHNlZW1zIG9mZiEKCj4gKwkgIGlmIChn cnViX2FkZCAoc2l6ZSwgZ3J1Yl9zdHJsZW4gKHByZWZpeCksICZzaXplKSkKPiArCSAgICB7Cj4g KwkgICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfUkFOR0UsICJvdmVyZmxvdyBkZXRl Y3RlZAo+IGNhbGN1bGF0aW5nIGRldmljZSB0cmVlIGJ1ZmZlciBzaXplIik7Cj4gKwkgICAgICBn b3RvIGZpbmlzaDsKPiArCSAgICB9Cj4gKwl9Cj4gKyAgICAgIGR0X2NtZCA9IGdydWJfbWFsbG9j IChzaXplKTsKPiArICAgICAgaWYgKGR0X2NtZCA9PSBOVUxMKQo+ICsJZ290byBmaW5pc2g7CgpJ bmRlbnRhdGlvbiBzZWVtcyBvZmYhIGFuZCBhbmRpbmcgYSBuZXcgbGluZSB3b3VsZCBiZSBnb29k IQoKPiArICAgICAgdG1wID0gZHRfY21kOwo+ICsgICAgICB0bXAgPSBncnViX3N0cGNweSAoZHRf Y21kLCAiZGV2aWNldHJlZSIpOwo+ICsgICAgICB0bXAgPSBncnViX3N0cGNweSAodG1wLCAiICIp Owo+ICsgICAgICBpZiAoYWRkX2R0X3ByZWZpeCA9PSB0cnVlKQo+ICsgICAgICAgIHRtcCA9IGdy dWJfc3RwY3B5ICh0bXAsIHByZWZpeCk7CgpBZGRpbmcgYSBuZXcgbGluZSB3b3VsZCBiZSBnb29k IQoKPiArICAgICAgdG1wID0gZ3J1Yl9zdHBjcHkgKHRtcCwgZHRfcGF0aCk7Cj4gKyAgICAgIHRt cCA9IGdydWJfc3RwY3B5ICh0bXAsICJcbiIpOwo+ICsgICAgfQo+ICsKPiArIGZpbmlzaDoKPiAr ICBncnViX2ZyZWUgKHByZWZpeCk7Cj4gKwo+ICsgIHJldHVybiBkdF9jbWQ7Cj4gK30KPiArCj4g Ky8qCj4gKyAqIFRoaXMgZnVuY3Rpb24gcHV0cyB0b2dldGhlciBhbGwgb2YgdGhlIGNvbW1hbmRz IGdlbmVyYXRlZCBmcm9tIHRoZSAKPiBjb250ZW50cwo+ICsgKiBvZiB0aGUgQkxTIGNvbmZpZyBm aWxlIGFuZCBjcmVhdGVzIGEgbmV3IGVudHJ5IGluIHRoZSBHUlVCIGJvb3QgCj4gbWVudS4KPiAr ICovCj4gK3N0YXRpYyB2b2lkCj4gK2Jsc19jcmVhdGVfZW50cnkgKGdydWJfYmxzdWtpX2VudHJ5 X3QgKmVudHJ5KQo+ICt7Cj4gKyAgaW50IGFyZ2MgPSAwOwo+ICsgIGNvbnN0IGNoYXIgKiphcmd2 ID0gTlVMTDsKPiArICBjaGFyICp0aXRsZSA9IE5VTEw7Cj4gKyAgY2hhciAqbGludXhfcGF0aCA9 IE5VTEw7Cj4gKyAgY2hhciAqbGludXhfY21kID0gTlVMTDsKPiArICBjaGFyICppbml0cmRfY21k ID0gTlVMTDsKPiArICBjaGFyICpkdF9jbWQgPSBOVUxMOwo+ICsgIGNoYXIgKmlkID0gZW50cnkt PmZpbGVuYW1lOwo+ICsgIGdydWJfc2l6ZV90IGlkX2xlbjsKPiArICBjaGFyICpob3RrZXkgPSBO VUxMOwo+ICsgIGNoYXIgKnVzZXJzID0gTlVMTDsKPiArICBjaGFyICoqY2xhc3NlcyA9IE5VTEw7 Cj4gKyAgY2hhciAqKmFyZ3MgPSBOVUxMOwo+ICsgIGNoYXIgKnNyYyA9IE5VTEw7Cj4gKyAgY29u c3QgY2hhciAqc2R2YWwgPSBOVUxMOwo+ICsgIGludCBpOwo+ICsgIGdydWJfc2l6ZV90IHNpemU7 Cj4gKyAgYm9vbCBzYXZlZGVmYXVsdDsKPiArCj4gKyAgbGludXhfcGF0aCA9IGJsc3VraV9nZXRf dmFsIChlbnRyeSwgImxpbnV4IiwgTlVMTCk7Cj4gKyAgaWYgKGxpbnV4X3BhdGggPT0gTlVMTCkK PiArICAgIHsKPiArICAgICAgZ3J1Yl9kcHJpbnRmICgiYmxzdWtpIiwgIlNraXBwaW5nIGZpbGUg JXMgd2l0aCBubyAnbGludXgnCj4ga2V5LlxuIiwgZW50cnktPmZpbGVuYW1lKTsKPiArICAgICAg Z290byBmaW5pc2g7Cj4gKyAgICB9Cj4gKwo+ICsgIGlkX2xlbiA9IGdydWJfc3RybGVuIChpZCk7 Cj4gKyAgaWYgKGlkX2xlbiA+PSA1ICYmIGdydWJfc3RyY21wIChpZCArIGlkX2xlbiAtIDUsICIu Y29uZiIpID09IDApCj4gKyAgICBpZFtpZF9sZW4gLSA1XSA9ICdcMCc7Cj4gKwo+ICsgIHRpdGxl ID0gYmxzdWtpX2dldF92YWwgKGVudHJ5LCAidGl0bGUiLCBOVUxMKTsKPiArICBob3RrZXkgPSBi bHN1a2lfZ2V0X3ZhbCAoZW50cnksICJncnViX2hvdGtleSIsIE5VTEwpOwo+ICsgIHVzZXJzID0g YmxzdWtpX2V4cGFuZF92YWwgKGJsc3VraV9nZXRfdmFsIChlbnRyeSwgImdydWJfdXNlcnMiLCAK PiBOVUxMKSk7Cj4gKyAgY2xhc3NlcyA9IGJsc3VraV9tYWtlX2xpc3QgKGVudHJ5LCAiZ3J1Yl9j bGFzcyIsIE5VTEwpOwo+ICsgIGFyZ3MgPSBibHN1a2lfbWFrZV9saXN0IChlbnRyeSwgImdydWJf YXJnIiwgJmFyZ2MpOwo+ICsKPiArICBhcmdjKys7Cj4gKyAgaWYgKGdydWJfbXVsIChhcmdjICsg MSwgc2l6ZW9mIChjaGFyICopLCAmc2l6ZSkpCj4gKyAgICB7Cj4gKyAgICAgIGdydWJfZXJyb3Ig KEdSVUJfRVJSX09VVF9PRl9SQU5HRSwgTl8oIm92ZXJmbG93IGRldGVjdGVkCj4gY3JlYXRpbmcg YXJndiBsaXN0IikpOwo+ICsgICAgICBnb3RvIGZpbmlzaDsKPiArICAgIH0KPiArCj4gKyAgYXJn diA9IGdydWJfbWFsbG9jIChzaXplKTsKPiArICBpZiAoYXJndiA9PSBOVUxMKQo+ICsgICAgZ290 byBmaW5pc2g7CgpBZGRpbmcgYSBuZXcgbGluZSB3b3VsZCBiZSBnb29kIQoKPiArICBhcmd2WzBd ID0gdGl0bGUgPyB0aXRsZSA6IGxpbnV4X3BhdGg7Cj4gKyAgZm9yIChpID0gMTsgaSA8IGFyZ2M7 IGkrKykKPiArICAgIGFyZ3ZbaV0gPSBhcmdzW2ktMV07CgpBZGRpbmcgYSBuZXcgbGluZSB3b3Vs ZCBiZSBnb29kIQoKPiArICBhcmd2W2FyZ2NdID0gTlVMTDsKPiArCj4gKyAgbGludXhfY21kID0g YmxzX2dldF9saW51eCAoZW50cnkpOwo+ICsgIGlmIChsaW51eF9jbWQgPT0gTlVMTCkKPiArICAg IGdvdG8gZmluaXNoOwo+ICsKPiArICBpbml0cmRfY21kID0gYmxzX2dldF9pbml0cmQgKGVudHJ5 KTsKPiArICBpZiAoZ3J1Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FKQo+ICsgICAgZ290byBmaW5p c2g7Cj4gKwo+ICsgIGR0X2NtZCA9IGJsc19nZXRfZGV2aWNldHJlZSAoZW50cnkpOwo+ICsgIGlm IChncnViX2Vycm5vICE9IEdSVUJfRVJSX05PTkUpCj4gKyAgICBnb3RvIGZpbmlzaDsKPiArCj4g KyAgc2R2YWwgPSBncnViX2Vudl9nZXQgKCJzYXZlX2RlZmF1bHQiKTsKPiArICBzYXZlZGVmYXVs dCA9ICgoTlVMTCAhPSBzZHZhbCkgJiYgKGdydWJfc3RyY21wIChzZHZhbCwgInRydWUiKSA9PSAK PiAwKSk7Cj4gKyAgc3JjID0gZ3J1Yl94YXNwcmludGYgKCIlcyVzJXMlcyIsCj4gKwkJCXNhdmVk ZWZhdWx0ID8gInNhdmVkZWZhdWx0XG4iIDogIiIsCj4gKwkJCWxpbnV4X2NtZCwgaW5pdHJkX2Nt ZCA/IGluaXRyZF9jbWQgOiAiIiwKPiArCQkJZHRfY21kID8gZHRfY21kIDogIiIpOwoKSW5kZW50 YXRpb24gc2VlbXMgb2ZmIQoKPiArCj4gKyAgZ3J1Yl9ub3JtYWxfYWRkX21lbnVfZW50cnkgKGFy Z2MsIGFyZ3YsIGNsYXNzZXMsIGlkLCB1c2VycywgaG90a2V5LAo+IE5VTEwsIHNyYywgMCwgZW50 cnkpOwo+ICsKPiArIGZpbmlzaDoKPiArICBncnViX2ZyZWUgKGxpbnV4X2NtZCk7Cj4gKyAgZ3J1 Yl9mcmVlIChkdF9jbWQpOwo+ICsgIGdydWJfZnJlZSAoaW5pdHJkX2NtZCk7Cj4gKyAgZ3J1Yl9m cmVlIChjbGFzc2VzKTsKPiArICBncnViX2ZyZWUgKGFyZ3MpOwo+ICsgIGdydWJfZnJlZSAoYXJn dik7Cj4gKyAgZ3J1Yl9mcmVlIChzcmMpOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgZmluZF9lbnRyeV9p bmZvCj4gK3sKPiArICBjb25zdCBjaGFyICpkaXJuYW1lOwo+ICsgIGNvbnN0IGNoYXIgKmRldmlk Owo+ICsgIGdydWJfZGV2aWNlX3QgZGV2Owo+ICsgIGdydWJfZnNfdCBmczsKPiArfTsKPiArCj4g Ky8qCj4gKyAqIFRoaXMgZnVuY3Rpb24gZmlsbHMgYSBmaW5kX2VudHJ5X2luZm8gc3RydWN0IHBh c3NlZCBpbiBieSB0aGUgaW5mbwo+IHBhcmFtZXRlci4KPiArICogSWYgdGhlIGRpcm5hbWUgb3Ig ZGV2aWQgcGFyYW1ldGVycyBhcmUgc2V0IHRvIE5VTEwsIHRoZSBkaXJuYW1lIGFuZCAKPiBkZXZp ZAo+ICsgKiBmaWVsZHMgaW4gdGhlIGluZm8gcGFyYW1ldGVyIHdpbGwgYmUgc2V0IHRvIGRlZmF1 bHQgdmFsdWVzLiBJZiBpbmZvIAo+IGFscmVhZHkKPiArICogaGFzIGEgdmFsdWUgaW4gdGhlIGRl diBmaWVsZHMsIHdlIGNhbiBjb21wYXJlIGl0IHRvIHRoZSB2YWx1ZSAKPiBwYXNzZWQgaW4gYnkK PiArICogdGhlIGRldmlkIHBhcmFtZXRlciBvciB0aGUgZGVmYXVsdCBkZXZpZCB0byBzZWUgaWYg d2UgbmVlZCB0byBvcGVuIAo+IGEgbmV3Cj4gKyAqIGRldmljZS4KPiArICovCj4gK3N0YXRpYyBn cnViX2Vycl90Cj4gK2Jsc3VraV9zZXRfZmluZF9lbnRyeV9pbmZvIChzdHJ1Y3QgZmluZF9lbnRy eV9pbmZvICppbmZvLCBjb25zdCBjaGFyCj4gKmRpcm5hbWUsIGNvbnN0IGNoYXIgKmRldmlkKQo+ ICt7Cj4gKyAgZ3J1Yl9kZXZpY2VfdCBkZXY7Cj4gKyAgZ3J1Yl9mc190IGZzOwo+ICsKPiArICBp ZiAoaW5mbyA9PSBOVUxMKQo+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9B UkdVTUVOVCwgImluZm8gcGFyYW1ldGVyIGlzIG5vdCAKPiBzZXQiKTsKPiArCj4gKyAgaWYgKGRl dmlkID09IE5VTEwpCj4gKyAgICB7Cj4gKyAgICAgIGRldmlkID0gZ3J1Yl9lbnZfZ2V0ICgicm9v dCIpOwo+ICsgICAgICBpZiAoZGV2aWQgPT0gTlVMTCkKPiArCXJldHVybiBncnViX2Vycm9yIChH UlVCX0VSUl9GSUxFX05PVF9GT1VORCwgTl8oInZhcmlhYmxlIGAlcycgaXNuJ3QKCkluZGVudGF0 aW9uIHNlZW1zIG9mZiEKCj4gc2V0IiksICJyb290Iik7Cj4gKyAgICB9Cj4gKwo+ICsgIC8qIENo ZWNrIHRoYXQgd2UgYXJlbid0IGNsb3NpbmcgYW5kIG9wZW5pbmcgdGhlIHNhbWUgZGV2aWNlLiAq Lwo+ICsgIGlmIChpbmZvLT5kZXYgIT0gTlVMTCAmJiBncnViX3N0cmNtcCAoaW5mby0+ZGV2aWQs IGRldmlkKSAhPSAwKQo+ICsgICAgewo+ICsgICAgICBncnViX2RldmljZV9jbG9zZSAoaW5mby0+ ZGV2KTsKPiArICAgICAgaW5mby0+ZGV2ID0gTlVMTDsKPiArICAgIH0KPiArICAvKiBJZiB3ZSBh cmUgdXNpbmcgdGhlIHNhbWUgZGV2aWNlLCB0aGVuIHdlIGNhbiBza2lwIHRoaXMgc3RlcCBhbmQK PiBvbmx5IHNldCB0aGUgZGlyZWN0b3J5LiAqLwo+ICsgIGlmIChpbmZvLT5kZXYgPT0gTlVMTCkK PiArICAgIHsKPiArICAgICAgZ3J1Yl9kcHJpbnRmICgiYmxzdWtpIiwgIm9wZW5pbmcgJXNcbiIs IGRldmlkKTsKPiArICAgICAgZGV2ID0gZ3J1Yl9kZXZpY2Vfb3BlbiAoZGV2aWQpOwo+ICsgICAg ICBpZiAoZGV2ID09IE5VTEwpCj4gKwlyZXR1cm4gZ3J1Yl9lcnJubzsKCkluZGVudGF0aW9uIHNl ZW1zIG9mZiEKCj4gKwo+ICsgICAgICBncnViX2RwcmludGYgKCJibHN1a2kiLCAicHJvYmluZyBm c1xuIik7Cj4gKyAgICAgIGZzID0gZ3J1Yl9mc19wcm9iZSAoZGV2KTsKPiArICAgICAgaWYgKGZz ID09IE5VTEwpCj4gKwl7Cj4gKwkgIGdydWJfZGV2aWNlX2Nsb3NlIChkZXYpOwo+ICsJICByZXR1 cm4gZ3J1Yl9lcnJubzsKPiArCX0KCkluZGVudGF0aW9uIHNlZW1zIG9mZiBpbiBpZiBjb25kaXRp b24hCgo+ICsKPiArICAgICAgaW5mby0+ZGV2aWQgPSBkZXZpZDsKPiArICAgICAgaW5mby0+ZGV2 ID0gZGV2Owo+ICsgICAgICBpbmZvLT5mcyA9IGZzOwo+ICsgICAgfQo+ICsKPiArICBpbmZvLT5k aXJuYW1lID0gZGlybmFtZTsKPiArCj4gKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4gK30KPiAr Cj4gKy8qCj4gKyAqIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgZm9yIEJMUyBjb25maWcgZmlsZXMg YmFzZWQgb24gdGhlIGRhdGEgaW4gCj4gdGhlIGluZm8KPiArICogcGFyYW1ldGVyLiBJZiB0aGUg ZmFsbGJhY2sgb3B0aW9uIGlzIGVuYWJsZWQsIHRoZSBkZWZhdWx0IGxvY2F0aW9uIAo+IHdpbGwg YmUKPiArICogY2hlY2tlZCBmb3IgQkxTIGNvbmZpZyBmaWxlcyBpZiB0aGUgZmlyc3QgYXR0ZW1w dCBmYWlscy4KPiArICovCj4gK3N0YXRpYyB2b2lkCj4gK2Jsc3VraV9maW5kX2VudHJ5IChzdHJ1 Y3QgZmluZF9lbnRyeV9pbmZvICppbmZvLCBib29sIGVuYWJsZV9mYWxsYmFjaykKPiArewo+ICsg IHN0cnVjdCByZWFkX2VudHJ5X2luZm8gcmVhZF9lbnRyeV9pbmZvOwo+ICsgIGdydWJfZnNfdCBk aXJfZnMgPSBOVUxMOwo+ICsgIGdydWJfZGV2aWNlX3QgZGlyX2RldiA9IE5VTEw7Cj4gKyAgYm9v bCBmYWxsYmFjayA9IGZhbHNlOwo+ICsgIGludCByOwo+ICsKPiArICBkbwo+ICsgICAgewo+ICsg ICAgICByZWFkX2VudHJ5X2luZm8uZmlsZSA9IE5VTEw7Cj4gKyAgICAgIHJlYWRfZW50cnlfaW5m by5kaXJuYW1lID0gaW5mby0+ZGlybmFtZTsKPiArCj4gKyAgICAgIGdydWJfZHByaW50ZiAoImJs c3VraSIsICJzY2FubmluZyBkaXI6ICVzXG4iLCBpbmZvLT5kaXJuYW1lKTsKPiArICAgICAgZGly X2RldiA9IGluZm8tPmRldjsKPiArICAgICAgZGlyX2ZzID0gaW5mby0+ZnM7Cj4gKyAgICAgIHJl YWRfZW50cnlfaW5mby5kZXZpZCA9IGluZm8tPmRldmlkOwo+ICsKPiArICAgICAgciA9IGRpcl9m cy0+ZnNfZGlyIChkaXJfZGV2LCByZWFkX2VudHJ5X2luZm8uZGlybmFtZSwgCj4gYmxzdWtpX3Jl YWRfZW50cnksCj4gKwkJCSAgJnJlYWRfZW50cnlfaW5mbyk7CgpJbmRlbnRhdGlvbiBzZWVtcyBv ZmYhCgo+ICsgICAgICBpZiAociAhPSAwKQo+ICsJewo+ICsJICBncnViX2RwcmludGYgKCJibHN1 a2kiLCAiYmxzdWtpX3JlYWRfZW50cnkgcmV0dXJuZWQgZXJyb3JcbiIpOwo+ICsJICBncnViX2Vy cm5vID0gR1JVQl9FUlJfTk9ORTsKPiArCX0KCkluZGVudGF0aW9uIHNlZW1zIG9mZiBpbiBpZiBj b25kaXRpb24hCgo+ICsKPiArICAgICAgLyoKPiArICAgICAgICogSWYgd2UgYXJlbid0IGFibGUg dG8gZmluZCBCTFMgZW50cmllcyBpbiB0aGUgZGlyZWN0b3J5IGdpdmVuCj4gYnkgaW5mby0+ZGly bmFtZSwKPiArICAgICAgICogd2UgY2FuIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IGxvY2F0aW9u Cj4gIi9ib290L2xvYWRlci9lbnRyaWVzLyIgYW5kIHNlZSBpZiB3ZQo+ICsgICAgICAgKiBjYW4g ZmluZCB0aGUgZmlsZXMgdGhlcmUuCj4gKyAgICAgICAqLwo+ICsgICAgICBpZiAoZW50cmllcyA9 PSBOVUxMICYmIGZhbGxiYWNrID09IGZhbHNlICYmIGVuYWJsZV9mYWxsYmFjayA9PSAKPiB0cnVl KQo+ICsJewo+ICsJICBibHN1a2lfc2V0X2ZpbmRfZW50cnlfaW5mbyAoaW5mbywgR1JVQl9CTFNf Q09ORklHX1BBVEgsIE5VTEwpOwo+ICsJICBncnViX2RwcmludGYgKCJibHN1a2kiLCAiRW50cmll cyB3ZXJlbid0IGZvdW5kIGluICVzLCBmYWxsYmFjayB0byAKPiAlc1xuIiwKPiArCQkJcmVhZF9l bnRyeV9pbmZvLmRpcm5hbWUsIGluZm8tPmRpcm5hbWUpOwo+ICsJICBmYWxsYmFjayA9IHRydWU7 Cj4gKwl9CgpJbmRlbnRhdGlvbiBzZWVtcyBvZmYgaW4gaWYgY29uZGl0aW9uIQoKPiArICAgICAg ZWxzZQo+ICsJZmFsbGJhY2sgPSBmYWxzZTsKCkluZGVudGF0aW9uIHNlZW1zIG9mZiEKCj4gKyAg ICB9Cj4gKyAgd2hpbGUgKGZhbGxiYWNrID09IHRydWUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgZ3J1 Yl9lcnJfdAo+ICtibHN1a2lfbG9hZF9lbnRyaWVzIChjaGFyICpwYXRoLCBib29sIGVuYWJsZV9m YWxsYmFjaykKPiArewo+ICsgIGdydWJfc2l6ZV90IGxlbjsKPiArICBzdGF0aWMgZ3J1Yl9lcnJf dCByOwo+ICsgIGNvbnN0IGNoYXIgKmRldmlkID0gTlVMTDsKPiArICBjaGFyICpkaXIgPSBOVUxM Owo+ICsgIHN0cnVjdCBmaW5kX2VudHJ5X2luZm8gaW5mbyA9IHsKPiArICAgICAgLmRldiA9IE5V TEwsCj4gKyAgICAgIC5mcyA9IE5VTEwsCj4gKyAgICAgIC5kaXJuYW1lID0gTlVMTCwKPiArICB9 Owo+ICsgIHN0cnVjdCByZWFkX2VudHJ5X2luZm8gcmVpID0gewo+ICsgICAgICAuZGV2aWQgPSBO VUxMLAo+ICsgICAgICAuZGlybmFtZSA9IE5VTEwsCj4gKyAgfTsKPiArCj4gKyAgaWYgKHBhdGgg IT0gTlVMTCkKPiArICAgIHsKPiArICAgICAgbGVuID0gZ3J1Yl9zdHJsZW4gKHBhdGgpOwo+ICsg ICAgICBpZiAobGVuID49IDUgJiYgZ3J1Yl9zdHJjbXAgKHBhdGggKyBsZW4gLSA1LCAiLmNvbmYi KSA9PSAwKQo+ICsJewo+ICsJICByZWkuZmlsZSA9IGdydWJfZmlsZV9vcGVuIChwYXRoLCBHUlVC X0ZJTEVfVFlQRV9DT05GSUcpOwo+ICsJICBpZiAocmVpLmZpbGUgPT0gTlVMTCkKPiArCSAgICBy ZXR1cm4gZ3J1Yl9lcnJubzsKPiArCj4gKwkgIC8qIGJsc3VraV9yZWFkX2VudHJ5KCkgY2xvc2Vz IHRoZSBmaWxlLiAqLwo+ICsJICByZXR1cm4gYmxzdWtpX3JlYWRfZW50cnkgKHBhdGgsIE5VTEws ICZyZWkpOwo+ICsJfQo+ICsgICAgICBlbHNlIGlmIChwYXRoWzBdID09ICcoJykKPiArCXsKPiAr CSAgZGV2aWQgPSBwYXRoICsgMTsKPiArCj4gKwkgIGRpciA9IGdydWJfc3RyY2hyIChwYXRoLCAn KScpOwo+ICsJICBpZiAoZGlyID09IE5VTEwpCj4gKwkgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdS VUJfRVJSX0JBRF9BUkdVTUVOVCwgTl8oImludmFsaWQgZmlsZSBuYW1lCj4gYCVzJyIpLCBwYXRo KTsKPiArCj4gKwkgICpkaXIgPSAnXDAnOwo+ICsKPiArCSAgLyogQ2hlY2sgaWYgdGhlcmUgaXMg bW9yZSB0aGFuIHRoZSBkZXZpZCBpbiB0aGUgcGF0aC4gKi8KPiArCSAgaWYgKGRpciArIDEgPCBw YXRoICsgbGVuKQo+ICsJICAgIGRpciA9IGRpciArIDE7Cj4gKwl9Cj4gKyAgICAgIGVsc2UgaWYg KHBhdGhbMF0gPT0gJy8nKQo+ICsJZGlyID0gcGF0aDsKPiArICAgIH0KCkluZGVudGF0aW9uIHNl ZW1zIG9mZiBpbiBpZiBlbHNlIGxhZGRlciEgYWRkaW5nIGVsc2UgY29uZGl0aW9uIHdvdWxkIGJl IApnb29kIQoKPiArCj4gKyAgaWYgKGRpciA9PSBOVUxMKQo+ICsgICAgZGlyID0gKGNoYXIgKikg R1JVQl9CTFNfQ09ORklHX1BBVEg7Cj4gKwo+ICsgIHIgPSBibHN1a2lfc2V0X2ZpbmRfZW50cnlf aW5mbyAoJmluZm8sIGRpciwgZGV2aWQpOwo+ICsgIGlmIChyID09IEdSVUJfRVJSX05PTkUpCj4g KyAgICBibHN1a2lfZmluZF9lbnRyeSAoJmluZm8sIGVuYWJsZV9mYWxsYmFjayk7Cj4gKwo+ICsg IGlmIChpbmZvLmRldiAhPSBOVUxMKQo+ICsgICAgZ3J1Yl9kZXZpY2VfY2xvc2UgKGluZm8uZGV2 KTsKPiArCj4gKyAgcmV0dXJuIHI7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sCj4gK2Jsc3VraV9p c19kZWZhdWx0X2VudHJ5IChjb25zdCBjaGFyICpkZWZfZW50cnksIGdydWJfYmxzdWtpX2VudHJ5 X3QKPiAqZW50cnksIGludCBpZHgpCj4gK3sKPiArICBjb25zdCBjaGFyICp0aXRsZTsKPiArICBj b25zdCBjaGFyICpkZWZfZW50cnlfZW5kOwo+ICsgIGludCBkZWZfaWR4Owo+ICsKPiArICBpZiAo ZGVmX2VudHJ5ID09IE5VTEwpCj4gKyAgICByZXR1cm4gZmFsc2U7Cj4gKwo+ICsgIGlmIChncnVi X3N0cmNtcCAoZGVmX2VudHJ5LCBlbnRyeS0+ZmlsZW5hbWUpID09IDApCj4gKyAgICByZXR1cm4g dHJ1ZTsKPiArCj4gKyAgdGl0bGUgPSBibHN1a2lfZ2V0X3ZhbCAoZW50cnksICJ0aXRsZSIsIE5V TEwpOwo+ICsKPiArICBpZiAodGl0bGUgIT0gTlVMTCAmJiBncnViX3N0cmNtcCAoZGVmX2VudHJ5 LCB0aXRsZSkgPT0gMCkKPiArICAgIHJldHVybiB0cnVlOwo+ICsKPiArICBkZWZfaWR4ID0gKGlu dCkgZ3J1Yl9zdHJ0b2wgKGRlZl9lbnRyeSwgJmRlZl9lbnRyeV9lbmQsIDApOwo+ICsgIGlmIChn cnViX2Vycm5vICE9IEdSVUJfRVJSX05PTkUpCj4gKyAgICB7Cj4gKyAgICAgIGdydWJfZXJybm8g PSBHUlVCX0VSUl9OT05FOwo+ICsgICAgICByZXR1cm4gZmFsc2U7Cj4gKyAgICB9Cj4gKyAgaWYg KCpkZWZfZW50cnkgPT0gJ1wwJyB8fCAqZGVmX2VudHJ5X2VuZCAhPSAnXDAnKQo+ICsgICAgcmV0 dXJuIGZhbHNlOwo+ICsKPiArICBpZiAoZGVmX2lkeCA9PSBpZHgpCj4gKyAgICByZXR1cm4gdHJ1 ZTsKPiArCj4gKyAgcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBUaGlzIGZ1bmN0 aW9uIGNyZWF0ZXMgYSBHUlVCIGJvb3QgbWVudSBlbnRyeSBmb3IgZWFjaCBCTFMgZW50cnkgaW4g Cj4gdGhlCj4gKyAqIGVudHJpZXMgbGlzdC4KPiArICovCj4gK3N0YXRpYyBncnViX2Vycl90Cj4g K2Jsc3VraV9jcmVhdGVfZW50cmllcyAoYm9vbCBzaG93X2RlZmF1bHQsIGJvb2wgc2hvd19ub25f ZGVmYXVsdCwgY2hhcgo+ICplbnRyeV9pZCkKPiArewo+ICsgIGNvbnN0IGNoYXIgKmRlZl9lbnRy eSA9IE5VTEw7Cj4gKyAgZ3J1Yl9ibHN1a2lfZW50cnlfdCAqZW50cnkgPSBOVUxMOwo+ICsgIGlu dCBpZHggPSAwOwo+ICsKPiArICBkZWZfZW50cnkgPSBncnViX2Vudl9nZXQgKCJkZWZhdWx0Iik7 Cj4gKwo+ICsgIEZPUl9CTFNVS0lfRU5UUklFUyhlbnRyeSkKPiArICAgIHsKPiArICAgICAgaWYg KGVudHJ5LT52aXNpYmxlID09IDEpCj4gKwl7Cj4gKwkgIGlkeCsrOwo+ICsJICBjb250aW51ZTsK PiArCX0KPiArICAgICAgaWYgKChzaG93X2RlZmF1bHQgPT0gdHJ1ZSAmJiBibHN1a2lfaXNfZGVm YXVsdF9lbnRyeQo+IChkZWZfZW50cnksIGVudHJ5LCBpZHgpID09IHRydWUpIHx8Cj4gKwkgIChz aG93X25vbl9kZWZhdWx0ID09IHRydWUgJiYgYmxzdWtpX2lzX2RlZmF1bHRfZW50cnkgKGRlZl9l bnRyeSwKPiBlbnRyeSwgaWR4KSA9PSBmYWxzZSkgfHwKPiArCSAgKGVudHJ5X2lkICE9IE5VTEwg JiYgZ3J1Yl9zdHJjbXAgKGVudHJ5X2lkLCBlbnRyeS0+ZmlsZW5hbWUpID09IDApKQo+ICsJewo+ ICsJICBibHNfY3JlYXRlX2VudHJ5IChlbnRyeSk7Cj4gKwkgIGVudHJ5LT52aXNpYmxlID0gMTsK PiArCX0KPiArICAgICAgaWR4Kys7Cj4gKyAgICB9CgpJbmRlbnRhdGlvbiBzZWVtcyBvZmYgaW4g Ym90aCBpZiBjb25kaXRpb25zIQoKPiArCj4gKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4gK30K PiArCj4gK3N0YXRpYyBncnViX2Vycl90Cj4gK2dydWJfY21kX2Jsc2NmZyAoZ3J1Yl9leHRjbWRf Y29udGV4dF90IGN0eHQsIGludCBhcmdjIF9fYXR0cmlidXRlX18gCj4gKCh1bnVzZWQpKSwKPiAr CQkgY2hhciAqKmFyZ3MgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpKQo+ICt7Cj4gKyAgZ3J1Yl9l cnJfdCBlcnI7Cj4gKyAgc3RydWN0IGdydWJfYXJnX2xpc3QgKnN0YXRlID0gY3R4dC0+c3RhdGU7 Cj4gKyAgY2hhciAqcGF0aCA9IE5VTEw7Cj4gKyAgY2hhciAqZW50cnlfaWQgPSBOVUxMOwo+ICsg IGJvb2wgZW5hYmxlX2ZhbGxiYWNrID0gZmFsc2U7Cj4gKyAgYm9vbCBzaG93X2RlZmF1bHQgPSBm YWxzZTsKPiArICBib29sIHNob3dfbm9uX2RlZmF1bHQgPSBmYWxzZTsKPiArICBib29sIGFsbCA9 IHRydWU7Cj4gKwo+ICsgIGlmIChzdGF0ZVswXS5zZXQpCj4gKyAgICBwYXRoID0gc3RhdGVbMF0u YXJnOwo+ICsgIGlmIChzdGF0ZVsxXS5zZXQpCj4gKyAgICBlbmFibGVfZmFsbGJhY2sgPSB0cnVl Owo+ICsgIGlmIChzdGF0ZVsyXS5zZXQpCj4gKyAgICB7Cj4gKyAgICAgIHNob3dfZGVmYXVsdCA9 IHRydWU7Cj4gKyAgICAgIGFsbCA9IGZhbHNlOwo+ICsgICAgfQo+ICsgIGlmIChzdGF0ZVszXS5z ZXQpCj4gKyAgICB7Cj4gKyAgICAgIHNob3dfbm9uX2RlZmF1bHQgPSB0cnVlOwo+ICsgICAgICBh bGwgPSBmYWxzZTsKPiArICAgIH0KPiArICBpZiAoc3RhdGVbNF0uc2V0KQo+ICsgICAgewo+ICsg ICAgICBlbnRyeV9pZCA9IHN0YXRlWzRdLmFyZzsKPiArICAgICAgYWxsID0gZmFsc2U7Cj4gKyAg ICB9Cj4gKyAgaWYgKGFsbCA9PSB0cnVlKQo+ICsgICAgewo+ICsgICAgICBzaG93X2RlZmF1bHQg PSB0cnVlOwo+ICsgICAgICBzaG93X25vbl9kZWZhdWx0ID0gdHJ1ZTsKPiArICAgIH0KPiArCj4g KyAgZXJyID0gYmxzdWtpX2xvYWRfZW50cmllcyAocGF0aCwgZW5hYmxlX2ZhbGxiYWNrKTsKPiAr ICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCj4gKyAgICByZXR1cm4gZXJyOwo+ICsKPiArICBy ZXR1cm4gYmxzdWtpX2NyZWF0ZV9lbnRyaWVzIChzaG93X2RlZmF1bHQsIHNob3dfbm9uX2RlZmF1 bHQsIAo+IGVudHJ5X2lkKTsKPiArfQo+ICsKPiArc3RhdGljIGdydWJfZXh0Y21kX3QgYmxzX2Nt ZDsKPiArCj4gK0dSVUJfTU9EX0lOSVQoYmxzdWtpKQo+ICt7Cj4gKyAgYmxzX2NtZCA9IGdydWJf cmVnaXN0ZXJfZXh0Y21kICgiYmxzY2ZnIiwgZ3J1Yl9jbWRfYmxzY2ZnLCAwLAo+ICsJCQkJICBO XygiWy1wfC0tcGF0aF0gWy1mfC0tZW5hYmxlLWZhbGxiYWNrXSBESVIgWy1kfC0tc2hvdy1kZWZh dWx0XQo+IFstbnwtLXNob3ctbm9uLWRlZmF1bHRdIFstZXwtLWVudHJ5XSBGSUxFIiksCj4gKwkJ CQkgIE5fKCJJbXBvcnQgQm9vdCBMb2FkZXIgU3BlY2lmaWNhdGlvbiBzbmlwcGV0cy4iKSwKPiAr CQkJCSAgYmxzX29wdCk7Cj4gK30KPiArCj4gK0dSVUJfTU9EX0ZJTkkoYmxzdWtpKQo+ICt7Cj4g KyAgZ3J1Yl91bnJlZ2lzdGVyX2V4dGNtZCAoYmxzX2NtZCk7Cj4gK30KPiBkaWZmIC0tZ2l0IGEv Z3J1Yi1jb3JlL2NvbW1hbmRzL2xlZ2FjeWNmZy5jIAo+IGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2xl Z2FjeWNmZy5jCj4gaW5kZXggM2JmOWZlMmU0Li5mM2M4NmRjN2YgMTAwNjQ0Cj4gLS0tIGEvZ3J1 Yi1jb3JlL2NvbW1hbmRzL2xlZ2FjeWNmZy5jCj4gKysrIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2xl Z2FjeWNmZy5jCj4gQEAgLTE0Myw3ICsxNDMsNyBAQCBsZWdhY3lfZmlsZSAoY29uc3QgY2hhciAq ZmlsZW5hbWUpCj4gIAkgICAgYXJnc1swXSA9IG9sZG5hbWU7Cj4gIAkgICAgZ3J1Yl9ub3JtYWxf YWRkX21lbnVfZW50cnkgKDEsIGFyZ3MsIE5VTEwsIE5VTEwsICJsZWdhY3kiLAo+ICAJCQkJCU5V TEwsIE5VTEwsCj4gLQkJCQkJZW50cnlzcmMsIDApOwo+ICsJCQkJCWVudHJ5c3JjLCAwLCBOVUxM KTsKPiAgCSAgICBncnViX2ZyZWUgKGFyZ3MpOwo+ICAJICAgIGVudHJ5c3JjWzBdID0gMDsKPiAg CSAgICBncnViX2ZyZWUgKG9sZG5hbWUpOwo+IEBAIC0yMDQsNyArMjA0LDcgQEAgbGVnYWN5X2Zp bGUgKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQo+ICAJfQo+ICAgICAgICBhcmdzWzBdID0gZW50cnlu YW1lOwo+ICAgICAgICBncnViX25vcm1hbF9hZGRfbWVudV9lbnRyeSAoMSwgYXJncywgTlVMTCwg TlVMTCwgTlVMTCwKPiAtCQkJCSAgTlVMTCwgTlVMTCwgZW50cnlzcmMsIDApOwo+ICsJCQkJICBO VUxMLCBOVUxMLCBlbnRyeXNyYywgMCwgTlVMTCk7Cj4gICAgICAgIGdydWJfZnJlZSAoYXJncyk7 Cj4gICAgICB9Cj4gCj4gZGlmZiAtLWdpdCBhL2dydWItY29yZS9jb21tYW5kcy9tZW51ZW50cnku YyAKPiBiL2dydWItY29yZS9jb21tYW5kcy9tZW51ZW50cnkuYwo+IGluZGV4IDcyMGU2ZDhlYS4u MDk3NDljNDE1IDEwMDY0NAo+IC0tLSBhL2dydWItY29yZS9jb21tYW5kcy9tZW51ZW50cnkuYwo+ ICsrKyBiL2dydWItY29yZS9jb21tYW5kcy9tZW51ZW50cnkuYwo+IEBAIC03OCw3ICs3OCw3IEBA IGdydWJfbm9ybWFsX2FkZF9tZW51X2VudHJ5IChpbnQgYXJnYywgY29uc3QgY2hhciAKPiAqKmFy Z3MsCj4gIAkJCSAgICBjaGFyICoqY2xhc3NlcywgY29uc3QgY2hhciAqaWQsCj4gIAkJCSAgICBj b25zdCBjaGFyICp1c2VycywgY29uc3QgY2hhciAqaG90a2V5LAo+ICAJCQkgICAgY29uc3QgY2hh ciAqcHJlZml4LCBjb25zdCBjaGFyICpzb3VyY2Vjb2RlLAo+IC0JCQkgICAgaW50IHN1Ym1lbnUp Cj4gKwkJCSAgICBpbnQgc3VibWVudSwgZ3J1Yl9ibHN1a2lfZW50cnlfdCAqYmxzdWtpKQo+ICB7 Cj4gICAgaW50IG1lbnVfaG90a2V5ID0gMDsKPiAgICBjaGFyICoqbWVudV9hcmdzID0gTlVMTDsK PiBAQCAtMTg4LDYgKzE4OCw3IEBAIGdydWJfbm9ybWFsX2FkZF9tZW51X2VudHJ5IChpbnQgYXJn YywgY29uc3QgY2hhciAKPiAqKmFyZ3MsCj4gICAgKCpsYXN0KS0+YXJncyA9IG1lbnVfYXJnczsK PiAgICAoKmxhc3QpLT5zb3VyY2Vjb2RlID0gbWVudV9zb3VyY2Vjb2RlOwo+ICAgICgqbGFzdCkt PnN1Ym1lbnUgPSBzdWJtZW51Owo+ICsgICgqbGFzdCktPmJsc3VraSA9IGJsc3VraTsKPiAKPiAg ICBtZW51LT5zaXplKys7Cj4gICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4gQEAgLTI4Niw3ICsy ODcsOCBAQCBncnViX2NtZF9tZW51ZW50cnkgKGdydWJfZXh0Y21kX2NvbnRleHRfdCBjdHh0LAo+ IGludCBhcmdjLCBjaGFyICoqYXJncykKPiAgCQkJCSAgICAgICB1c2VycywKPiAgCQkJCSAgICAg ICBjdHh0LT5zdGF0ZVsyXS5hcmcsIDAsCj4gIAkJCQkgICAgICAgY3R4dC0+c3RhdGVbM10uYXJn LAo+IC0JCQkJICAgICAgIGN0eHQtPmV4dGNtZC0+Y21kLT5uYW1lWzBdID09ICdzJyk7Cj4gKwkJ CQkgICAgICAgY3R4dC0+ZXh0Y21kLT5jbWQtPm5hbWVbMF0gPT0gJ3MnLAo+ICsJCQkJICAgICAg IE5VTEwpOwo+IAo+ICAgIHNyYyA9IGFyZ3NbYXJnYyAtIDFdOwo+ICAgIGFyZ3NbYXJnYyAtIDFd ID0gTlVMTDsKPiBAQCAtMzAzLDcgKzMwNSw3IEBAIGdydWJfY21kX21lbnVlbnRyeSAoZ3J1Yl9l eHRjbWRfY29udGV4dF90IGN0eHQsCj4gaW50IGFyZ2MsIGNoYXIgKiphcmdzKQo+ICAJCQkJICBj dHh0LT5zdGF0ZVswXS5hcmdzLCBjdHh0LT5zdGF0ZVs0XS5hcmcsCj4gIAkJCQkgIHVzZXJzLAo+ ICAJCQkJICBjdHh0LT5zdGF0ZVsyXS5hcmcsIHByZWZpeCwgc3JjICsgMSwKPiAtCQkJCSAgY3R4 dC0+ZXh0Y21kLT5jbWQtPm5hbWVbMF0gPT0gJ3MnKTsKPiArCQkJCSAgY3R4dC0+ZXh0Y21kLT5j bWQtPm5hbWVbMF0gPT0gJ3MnLCBOVUxMKTsKPiAKPiAgICBzcmNbbGVuIC0gMV0gPSBjaDsKPiAg ICBhcmdzW2FyZ2MgLSAxXSA9IHNyYzsKPiBkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL25vcm1hbC9t YWluLmMgYi9ncnViLWNvcmUvbm9ybWFsL21haW4uYwo+IGluZGV4IDA0ZDA1OGY1NS4uMmQ0OTNm MjFlIDEwMDY0NAo+IC0tLSBhL2dydWItY29yZS9ub3JtYWwvbWFpbi5jCj4gKysrIGIvZ3J1Yi1j b3JlL25vcm1hbC9tYWluLmMKPiBAQCAtMjEsNiArMjEsNyBAQAo+ICAjaW5jbHVkZSA8Z3J1Yi9u ZXQuaD4KPiAgI2luY2x1ZGUgPGdydWIvbm9ybWFsLmg+Cj4gICNpbmNsdWRlIDxncnViL2RsLmg+ Cj4gKyNpbmNsdWRlIDxncnViL21lbnUuaD4KPiAgI2luY2x1ZGUgPGdydWIvbWlzYy5oPgo+ICAj aW5jbHVkZSA8Z3J1Yi9maWxlLmg+Cj4gICNpbmNsdWRlIDxncnViL21tLmg+Cj4gQEAgLTY3LDYg KzY4LDExIEBAIGdydWJfbm9ybWFsX2ZyZWVfbWVudSAoZ3J1Yl9tZW51X3QgbWVudSkKPiAgCSAg Z3J1Yl9mcmVlIChlbnRyeS0+YXJncyk7Cj4gIAl9Cj4gCj4gKyAgICAgIGlmIChlbnRyeS0+Ymxz dWtpKQo+ICsJewo+ICsJICBlbnRyeS0+YmxzdWtpLT52aXNpYmxlID0gMDsKPiArCX0KCkJyYWNr ZXRzIG5vdCByZXF1aXJlZCEKCkFsZWMgLCBJIHNlZSBtYW55IEluZGVudGF0aW9uIGlzc3Vlcy4g SSBoYXZlIHRyaWVkIHBvaW50aW5nIG91dCBhcyBtdWNoIAphcyBJIGNhbi4gUGxlYXNlIGZpeCEK VGhhbmsgeW91IQoKUmVnYXJkcywKQXZuaXNoIENob3VoYW4KCj4gKwoKPiBFbmQgb2YgR3J1Yi1k ZXZlbCBEaWdlc3QsIFZvbCAyNTUsIElzc3VlIDUxCj4gKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KR3J1Yi1kZXZlbCBtYWlsaW5nIGxpc3QKR3J1Yi1kZXZlbEBnbnUub3JnCmh0 dHBzOi8vbGlzdHMuZ251Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2dydWItZGV2ZWwK