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 CB4A3C02192 for ; Fri, 7 Feb 2025 05:57:42 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tgHMd-0000Va-3H; Fri, 07 Feb 2025 00:57:19 -0500 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 1tgHMb-0000VN-K4 for grub-devel@gnu.org; Fri, 07 Feb 2025 00:57:17 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tgHMY-0006fz-O8 for grub-devel@gnu.org; Fri, 07 Feb 2025 00:57:17 -0500 Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5170TbFJ027495; Fri, 7 Feb 2025 05:57:11 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=l0bbaP 5yiG9jJP7EHGJJioSmfjefzI/WbsBcMXKFNls=; b=AxhFdU4grQ+IG1x94ycHR8 CMoYb0V+GDfTNpDu28rFmWkbAYec7mDHNcrYl9KObX+PeCGGo2RWDE8/3nVyA5Jm Abg9ym9Xqylr8wVK8zviojfalDsrrm6KFvXLdUNu2FpmybxQDa4WLu9XY9bN9rHW FAf9VTXZTZrf+bNWPrGCv/W7yjOPTuZuyUuWGu0CEHOL1gG+GvutU+QS7b+ewlj1 yb+XFAgUJvpeUOS87XgAOQ/6hGbUcX9gT/pcHVg7W1ebU8D9/hCFJ9vqxibXy6H4 IqipI+GX2x+0gMpcQPc+eycwsKCfvbuczVS4p7cUE6Cad8jeN+k3BfgjF6eGKTog == Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 44mrsp5xqa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 07 Feb 2025 05:57:10 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 5175UOn4016391; Fri, 7 Feb 2025 05:57:10 GMT Received: from smtprelay02.dal12v.mail.ibm.com ([172.16.1.4]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 44hwxstb50-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 07 Feb 2025 05:57:10 +0000 Received: from smtpav03.wdc07v.mail.ibm.com (smtpav03.wdc07v.mail.ibm.com [10.39.53.230]) by smtprelay02.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 5175v9no19399284 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 7 Feb 2025 05:57:09 GMT Received: from smtpav03.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D268B580A2; Fri, 7 Feb 2025 05:57:08 +0000 (GMT) Received: from smtpav03.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E4A23580A0; Fri, 7 Feb 2025 05:57:07 +0000 (GMT) Received: from ltc.linux.ibm.com (unknown [9.5.196.140]) by smtpav03.wdc07v.mail.ibm.com (Postfix) with ESMTP; Fri, 7 Feb 2025 05:57:07 +0000 (GMT) MIME-Version: 1.0 Date: Fri, 07 Feb 2025 11:27:07 +0530 From: Avnish Chouhan To: Sudhakar Kuppusamy Cc: grub-devel@gnu.org, dja@axtens.net, jan.setjeeilers@oracle.com, julian.klode@canonical.com, mate.kukri@canonical.com, pjones@redhat.com, stefanb@linux.ibm.com, nayna@linux.ibm.com, ssrish@linux.ibm.com, daniel.kiper@oracle.com Subject: Re: [PATCH v1 15/21] ieee1275: Read the DB and DBX secure boot variables In-Reply-To: <20241218145647.1390837-16-sudhakar@linux.ibm.com> References: <20241218145647.1390837-1-sudhakar@linux.ibm.com> <20241218145647.1390837-16-sudhakar@linux.ibm.com> Message-ID: <10ded8921b9b25b713c1db7434eeefbe@linux.ibm.com> X-Sender: avnish@linux.ibm.com X-TM-AS-GCONF: 00 X-Proofpoint-GUID: fcjA4MixwTMI5Qfq0jDuh4ZkAJa2UVQ3 X-Proofpoint-ORIG-GUID: fcjA4MixwTMI5Qfq0jDuh4ZkAJa2UVQ3 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-07_02,2025-02-07_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 impostorscore=0 bulkscore=0 lowpriorityscore=0 malwarescore=0 suspectscore=0 adultscore=0 spamscore=0 phishscore=0 priorityscore=1501 mlxlogscore=999 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2501170000 definitions=main-2502070043 Received-SPF: pass client-ip=148.163.158.5; envelope-from=avnish@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, 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-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 U3VnZ2VzdGlvbiA6IENhbiB3ZSB1c2UgZ3J1Yl9kcHJpbnRmIGluc3RlYWQgb2YgZ3J1Yl9wcmlu dGYsIHVubGVzcyBpdCAKaXMgZXh0cmVtZWx5IG5lY2Vzc2FyeSEKClJldmlld2VkLWJ5OsKgQXZu aXNowqBDaG91aGFuwqA8YXZuaXNoQGxpbnV4LmlibS5jb20+CgpPbiAyMDI0LTEyLTE4IDIwOjI2 LCBTdWRoYWthciBLdXBwdXNhbXkgd3JvdGU6Cj4gSWYgc2VjdXJlIGJvb3QgaXMgZW5hYmxlZCB3 aXRoIFBLUywgaXQgd2lsbCByZWFkIHNlY3VyZSBib290IHZhcmlhYmxlcwo+IHN1Y2ggYXMgZGIg YW5kIGRieCBmcm9tIFBLUyBhbmQgZXh0cmFjdCBjZXJ0aWZpY2F0ZXMgZnJvbSBFU0wuCj4gSXQg d291bGQgYmUgc2F2ZWQgaW4gdGhlIHBsYXRmb3JtIGtleXN0b3JlIGJ1ZmZlciwgYW5kCj4gdGhl IGFwcGVuZGVkc2lnIChtb2R1bGUpIHdvdWxkIHJlYWQgaXQgbGF0ZXIgdG8gZXh0cmFjdAo+IHRo ZSBjZXJ0aWZpY2F0ZSdzIGRldGFpbHMuCj4gCj4gSW4gdGhlIGZvbGxvd2luZyBzY2VuYXJpb3Ms IHN0YXRpYyBrZXkgbW9kZSB3aWxsIGJlIGFjdGl2YXRlZDoKPiAgMS4gV2hlbiBzZWN1cmUgYm9v dCBpcyBlbmFibGVkIHdpdGggc3RhdGljCj4gIDIuIFdoZW4gU0IgVmVyc2lvbiBpcyB1bmF2YWls YWJsZSBidXQgU2VjdXJlIEJvb3QgaXMgZW5hYmxlZAo+ICAzLiBXaGVuIFBLUyBzdXBwb3J0IGlz IHVuYXZhaWxhYmxlIGJ1dCBzZWN1cmUgYm9vdCBpcyBlbmFibGVkCj4gCj4gTm90ZTotCj4gCj4g U0IgVmVyc2lvbiAtIHNlY3VyZSBib290IG1vZGUKPiAxIC0gUEtTCj4gMCAtIHN0YXRpYyBrZXkg KGVtYmVkZWQga2V5KQo+IAo+IFNpZ25lZC1vZmYtYnk6IFN1ZGhha2FyIEt1cHB1c2FteSA8c3Vk aGFrYXJAbGludXguaWJtLmNvbT4KPiAtLS0KPiAgZ3J1Yi1jb3JlL01ha2VmaWxlLmFtICAgICAg ICAgICAgICAgICAgICAgICB8ICAgMSArCj4gIGdydWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZiAg ICAgICAgICAgICAgICAgfCAgIDEgKwo+ICBncnViLWNvcmUva2Vybi9pZWVlMTI3NS9pbml0LmMg ICAgICAgICAgICAgIHwgIDE0ICstCj4gIGdydWItY29yZS9rZXJuL2llZWUxMjc1L3BsYXRmb3Jt X2tleXN0b3JlLmMgfCAzMzcgKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVkZS9ncnViL3Bs YXRmb3JtX2tleXN0b3JlLmggICAgICAgICAgICB8IDIzMyArKysrKysrKysrKysrKwo+ICA1IGZp bGVzIGNoYW5nZWQsIDU4NCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+ICBjcmVhdGUg bW9kZSAxMDA2NDQgZ3J1Yi1jb3JlL2tlcm4vaWVlZTEyNzUvcGxhdGZvcm1fa2V5c3RvcmUuYwo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9ncnViL3BsYXRmb3JtX2tleXN0b3JlLmgKPiAK PiBkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL01ha2VmaWxlLmFtIGIvZ3J1Yi1jb3JlL01ha2VmaWxl LmFtCj4gaW5kZXggZTUwZGI4MTA2Li5hZmIyNWRjNGYgMTAwNjQ0Cj4gLS0tIGEvZ3J1Yi1jb3Jl L01ha2VmaWxlLmFtCj4gKysrIGIvZ3J1Yi1jb3JlL01ha2VmaWxlLmFtCj4gQEAgLTc5LDYgKzc5 LDcgQEAgS0VSTkVMX0hFQURFUl9GSUxFUyArPSAKPiAkKHRvcF9zcmNkaXIpL2luY2x1ZGUvZ3J1 Yi9maWxlLmgKPiAgS0VSTkVMX0hFQURFUl9GSUxFUyArPSAkKHRvcF9zcmNkaXIpL2luY2x1ZGUv Z3J1Yi9mcy5oCj4gIEtFUk5FTF9IRUFERVJfRklMRVMgKz0gJCh0b3Bfc3JjZGlyKS9pbmNsdWRl L2dydWIvaTE4bi5oCj4gIEtFUk5FTF9IRUFERVJfRklMRVMgKz0gJCh0b3Bfc3JjZGlyKS9pbmNs dWRlL2dydWIva2VybmVsLmgKPiArS0VSTkVMX0hFQURFUl9GSUxFUyArPSAkKHRvcF9zcmNkaXIp L2luY2x1ZGUvZ3J1Yi9wbGF0Zm9ybV9rZXlzdG9yZS5oCj4gIEtFUk5FTF9IRUFERVJfRklMRVMg Kz0gJCh0b3Bfc3JjZGlyKS9pbmNsdWRlL2dydWIvbGlzdC5oCj4gIEtFUk5FTF9IRUFERVJfRklM RVMgKz0gJCh0b3Bfc3JjZGlyKS9pbmNsdWRlL2dydWIvbG9ja2Rvd24uaAo+ICBLRVJORUxfSEVB REVSX0ZJTEVTICs9ICQodG9wX3NyY2RpcikvaW5jbHVkZS9ncnViL21pc2MuaAo+IGRpZmYgLS1n aXQgYS9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYgYi9ncnViLWNvcmUvTWFrZWZpbGUuY29y ZS5kZWYKPiBpbmRleCAxZWQ1NWIwZTMuLjJmZDA2MDEyMyAxMDA2NDQKPiAtLS0gYS9ncnViLWNv cmUvTWFrZWZpbGUuY29yZS5kZWYKPiArKysgYi9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYK PiBAQCAtMTcwLDYgKzE3MCw3IEBAIGtlcm5lbCA9IHsKPiAgICBpZWVlMTI3NSA9IGtlcm4vaWVl ZTEyNzUvb3BlbmZ3LmM7Cj4gICAgaWVlZTEyNzUgPSB0ZXJtL2llZWUxMjc1L2NvbnNvbGUuYzsK PiAgICBpZWVlMTI3NSA9IGtlcm4vaWVlZTEyNzUvaW5pdC5jOwo+ICsgIGllZWUxMjc1ID0ga2Vy bi9pZWVlMTI3NS9wbGF0Zm9ybV9rZXlzdG9yZS5jOwo+IAo+ICAgIHVib290ID0gZGlzay91Ym9v dC91Ym9vdGRpc2suYzsKPiAgICB1Ym9vdCA9IGtlcm4vdWJvb3QvdWJvb3QuYzsKPiBkaWZmIC0t Z2l0IGEvZ3J1Yi1jb3JlL2tlcm4vaWVlZTEyNzUvaW5pdC5jIAo+IGIvZ3J1Yi1jb3JlL2tlcm4v aWVlZTEyNzUvaW5pdC5jCj4gaW5kZXggNTk5ODRiNjA1Li43ZDk2YzM4ZjMgMTAwNjQ0Cj4gLS0t IGEvZ3J1Yi1jb3JlL2tlcm4vaWVlZTEyNzUvaW5pdC5jCj4gKysrIGIvZ3J1Yi1jb3JlL2tlcm4v aWVlZTEyNzUvaW5pdC5jCj4gQEAgLTUwLDYgKzUwLDcgQEAKPiAgI2luY2x1ZGUgPGdydWIvaWVl ZTEyNzUvYWxsb2MuaD4KPiAgI2VuZGlmCj4gICNpbmNsdWRlIDxncnViL2xvY2tkb3duLmg+Cj4g KyNpbmNsdWRlIDxncnViL3BsYXRmb3JtX2tleXN0b3JlLmg+Cj4gCj4gIC8qIFRoZSBtYXhpbXVt IGhlYXAgc2l6ZSB3ZSdyZSBnb2luZyB0byBjbGFpbSBhdCBib290LiBOb3QgdXNlZCBieSAKPiBz cGFyYy4gKi8KPiAgI2lmZGVmIF9faTM4Nl9fCj4gQEAgLTk1OSw3ICs5NjAsNyBAQCBncnViX2dl dF9pZWVlMTI3NV9zZWN1cmVfYm9vdCAodm9pZCkKPiAgewo+ICAgIGdydWJfaWVlZTEyNzVfcGhh bmRsZV90IHJvb3Q7Cj4gICAgaW50IHJjOwo+IC0gIGdydWJfdWludDMyX3QgaXNfc2I7Cj4gKyAg Z3J1Yl91aW50MzJfdCBpc19zYiA9IDA7Cj4gCj4gICAgZ3J1Yl9pZWVlMTI3NV9maW5kZGV2aWNl ICgiLyIsICZyb290KTsKPiAKPiBAQCAtOTc2LDcgKzk3NywxNiBAQCBncnViX2dldF9pZWVlMTI3 NV9zZWN1cmVfYm9vdCAodm9pZCkKPiAgICAgKiBXZSBvbmx5IHN1cHBvcnQgZW5mb3JjZS4KPiAg ICAgKi8KPiAgICBpZiAocmMgPj0gMCAmJiBpc19zYiA+PSAyKQo+IC0gICAgZ3J1Yl9sb2NrZG93 biAoKTsKPiArICAgIHsKPiArICAgICAgZ3J1Yl9wcmludGYgKCJzZWN1cmUgYm9vdCBlbmFibGVk XG4iKTsKPiArICAgICAgcmMgPSBncnViX3BsYXRmb3JtX2tleXN0b3JlX2luaXQgKCk7Cj4gKyAg ICAgIGlmIChyYyAhPSBHUlVCX0VSUl9OT05FKQo+ICsgICAgICAgIGdydWJfcHJpbnRmICgiV2Fy bmluZzogaW5pdGlhbGl6YXRpb24gb2YgdGhlIHBsYXRmb3JtCj4ga2V5c3RvcmUgZmFpbGVkIVxu Iik7Cj4gKwo+ICsgICAgICBncnViX2xvY2tkb3duICgpOwo+ICsgICAgfQo+ICsgIGVsc2UKPiAr ICAgICAgZ3J1Yl9wcmludGYgKCJzZWN1cmUgYm9vdCBkaXNhYmxlZFxuIik7Cj4gIH0KPiAKPiAg Z3J1Yl9hZGRyX3QgZ3J1Yl9tb2RiYXNlOwo+IGRpZmYgLS1naXQgYS9ncnViLWNvcmUva2Vybi9p ZWVlMTI3NS9wbGF0Zm9ybV9rZXlzdG9yZS5jCj4gYi9ncnViLWNvcmUva2Vybi9pZWVlMTI3NS9w bGF0Zm9ybV9rZXlzdG9yZS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAuLjFjNTY0ZDVkYQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9ncnViLWNvcmUva2Vybi9pZWVl MTI3NS9wbGF0Zm9ybV9rZXlzdG9yZS5jCj4gQEAgLTAsMCArMSwzMzcgQEAKPiArLyoKPiArICog IEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKPiArICogIENvcHlyaWdodCAoQykg MjAyNCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCj4gKyAqICBDb3B5cmlnaHQgKEMp IDIwMjQgSUJNIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiArICogIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIAo+ IGJ5Cj4gKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAz IG9mIHRoZSBMaWNlbnNlLCBvcgo+ICsgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KPiArICoKPiArICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKPiArICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqICBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UKPiArICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8Z3J1Yi9tbS5oPgo+ICsjaW5j bHVkZSA8Z3J1Yi9pZWVlMTI3NS9pZWVlMTI3NS5oPgo+ICsjaW5jbHVkZSA8Z3J1Yi90eXBlcy5o Pgo+ICsjaW5jbHVkZSA8Z3J1Yi9taXNjLmg+Cj4gKyNpbmNsdWRlIDxncnViL2xvY2tkb3duLmg+ Cj4gKyNpbmNsdWRlIDxncnViL3BsYXRmb3JtX2tleXN0b3JlLmg+Cj4gKwo+ICsjZGVmaW5lIFBL U19DT05TVU1FUl9GVyAxCj4gKyNkZWZpbmUgU0JfVkVSU0lPTl9LRVlfTkFNRSAoKGdydWJfdWlu dDhfdCAqKSAiU0JfVkVSU0lPTiIpCj4gKyNkZWZpbmUgU0JfVkVSU0lPTl9LRVlfTEVOIDEwCj4g KyNkZWZpbmUgREIgMQo+ICsjZGVmaW5lIERCWCAyCj4gKyNkZWZpbmUgUEtTX09CSkVDVF9OT1Rf Rk9VTkQgKChncnViX2Vycl90KSAtNykKPiArCj4gKy8qIFBsYXRmb3JtIEtleXN0b3JlICovCj4g K3N0YXRpYyBncnViX3NpemVfdCBwa3NfbWF4X29iamVjdF9zaXplOwo+ICtncnViX3VpbnQ4X3Qg Z3J1Yl91c2VfcGxhdGZvcm1fa2V5c3RvcmUgPSAwOwo+ICtncnViX3Brc190IGdydWJfcGxhdGZv cm1fa2V5c3RvcmUgPSB7IC5kYiA9IE5VTEwsIC5kYnggPSBOVUxMLAo+IC5kYl9lbnRyaWVzID0g MCwgLmRieF9lbnRyaWVzID0gMCB9Owo+ICsKPiArLyogY29udmVydHMgdGhlIGVzbCBkYXRhIGlu dG8gdGhlIEVTTCAqLwo+ICtzdGF0aWMgZ3J1Yl9lc2xfdCAqCj4gK2dydWJfY29udmVydF90b19l c2wgKGNvbnN0IGdydWJfdWludDhfdCAqZXNsX2RhdGEsIGNvbnN0IGdydWJfc2l6ZV90Cj4gZXNs X2RhdGFfc2l6ZSkKPiArewo+ICsgIGdydWJfZXNsX3QgKmVzbCA9IE5VTEw7Cj4gKwo+ICsgIGlm IChlc2xfZGF0YV9zaXplIDwgc2l6ZW9mIChncnViX2VzbF90KSB8fCBlc2xfZGF0YSA9PSBOVUxM KQo+ICsgICAgcmV0dXJuIGVzbDsKPiArCj4gKyAgZXNsID0gKGdydWJfZXNsX3QgKikgZXNsX2Rh dGE7Cj4gKwo+ICsgIHJldHVybiBlc2w7Cj4gK30KPiArCj4gKy8qCj4gKyAqIGltcG9ydHMgdGhl IEdVSUQsIGVzZCwgYW5kIGl0cyBzaXplIGludG8gdGhlIHBrcyBzZCBidWZmZXIgYW5kCj4gKyAq IHBrcyBzZCBlbnRyaWVzIGZyb20gdGhlIEVGSSBzaWduYXR1cmUgbGlzdC4KPiArICovCj4gK3N0 YXRpYyBncnViX2Vycl90Cj4gK2dydWJfZXNkX2Zyb21fZXNsIChjb25zdCBncnViX3VpbnQ4X3Qg KmVzbF9kYXRhLCBncnViX3NpemVfdCBlc2xfc2l6ZSwKPiArICAgICAgICAgICAgICAgICAgIGNv bnN0IGdydWJfc2l6ZV90IHNpZ25hdHVyZV9zaXplLCBjb25zdCBncnViX3V1aWRfdCAKPiAqZ3Vp ZCwKPiArICAgICAgICAgICAgICAgICAgIGdydWJfcGtzX3NkX3QgKipwa3Nfc2QsIGdydWJfc2l6 ZV90IAo+ICpwa3Nfc2RfZW50cmllcykKPiArewo+ICsgIGdydWJfZXNkX3QgKmVzZCA9IE5VTEw7 Cj4gKyAgZ3J1Yl9wa3Nfc2RfdCAqc2lnbmF0dXJlID0gKnBrc19zZDsKPiArICBncnViX3NpemVf dCBlbnRyaWVzID0gKnBrc19zZF9lbnRyaWVzOwo+ICsgIGdydWJfc2l6ZV90IGRhdGFfc2l6ZSA9 IDAsIG9mZnNldCA9IDA7Cj4gKwo+ICsgIC8qIHJlYWRzIHRoZSBlc2QgZnJvbSBlc2wgKi8KPiAr ICB3aGlsZSAoZXNsX3NpemUgPiAwKQo+ICsgICAgewo+ICsgICAgICBlc2QgPSAoZ3J1Yl9lc2Rf dCAqKSAoZXNsX2RhdGEgKyBvZmZzZXQpOwo+ICsgICAgICBkYXRhX3NpemUgPSBzaWduYXR1cmVf c2l6ZSAtIHNpemVvZiAoZ3J1Yl9lc2RfdCk7Cj4gKwo+ICsgICAgICBpZiAoc2lnbmF0dXJlICE9 IE5VTEwpCj4gKyAgICAgICAgc2lnbmF0dXJlID0gZ3J1Yl9yZWFsbG9jIChzaWduYXR1cmUsIChl bnRyaWVzICsgMSkgKiBzaXplb2YKPiAoZ3J1Yl9wa3Nfc2RfdCkpOwo+ICsgICAgICBlbHNlCj4g KyAgICAgICAgc2lnbmF0dXJlID0gZ3J1Yl9tYWxsb2MgKHNpemVvZiAoZ3J1Yl9wa3Nfc2RfdCkp Owo+ICsKPiArICAgICAgaWYgKHNpZ25hdHVyZSA9PSBOVUxMKQo+ICsgICAgICAgIHJldHVybiBn cnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLCAib3V0IG9mIG1lbW9yeSIpOwo+ICsK PiArICAgICAgc2lnbmF0dXJlW2VudHJpZXNdLmRhdGEgPSBncnViX21hbGxvYyAoZGF0YV9zaXpl ICogc2l6ZW9mCj4gKGdydWJfdWludDhfdCkpOwo+ICsgICAgICBpZiAoc2lnbmF0dXJlW2VudHJp ZXNdLmRhdGEgPT0gTlVMTCkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAvKgo+ICsgICAgICAg ICAgICogYWxsb2NhdGVkIG1lbW9yeSB3aWxsIGJlIGZyZWVkIGJ5Cj4gKyAgICAgICAgICAgKiBn cnViX3JlbGVhc2VfcGxhdGZvcm1fa2V5c3RvcmUKPiArICAgICAgICAgICAqLwo+ICsgICAgICAg ICAgKnBrc19zZCA9IHNpZ25hdHVyZTsKPiArICAgICAgICAgICpwa3Nfc2RfZW50cmllcyA9IGVu dHJpZXMgKyAxOwo+ICsgICAgICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9P Rl9NRU1PUlksICJvdXQgb2YgbWVtb3J5Iik7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgZ3J1 Yl9tZW1jcHkgKHNpZ25hdHVyZVtlbnRyaWVzXS5kYXRhLCBlc2QtPnNpZ25hdHVyZWRhdGEsIAo+ IGRhdGFfc2l6ZSk7Cj4gKyAgICAgIHNpZ25hdHVyZVtlbnRyaWVzXS5kYXRhX3NpemUgPSBkYXRh X3NpemU7Cj4gKyAgICAgIHNpZ25hdHVyZVtlbnRyaWVzXS5ndWlkID0gKmd1aWQ7Cj4gKyAgICAg IGVudHJpZXMrKzsKPiArICAgICAgZXNsX3NpemUgLT0gc2lnbmF0dXJlX3NpemU7Cj4gKyAgICAg IG9mZnNldCArPSBzaWduYXR1cmVfc2l6ZTsKPiArICAgIH0KPiArCj4gKyAgKnBrc19zZCA9IHNp Z25hdHVyZTsKPiArICAqcGtzX3NkX2VudHJpZXMgPSBlbnRyaWVzOwo+ICsKPiArICByZXR1cm4g R1JVQl9FUlJfTk9ORTsKPiArfQo+ICsKPiArLyoKPiArICogZXh0cmFjdHMgdGhlIGVzZCBhZnRl ciByZW1vdmluZyB0aGUgZXNsIGhlYWRlciBmcm9tIGVzbC4KPiArICovCj4gK3N0YXRpYyBncnVi X2Vycl90Cj4gK2dydWJfZXNsX3RvX2VzZCAoY29uc3QgZ3J1Yl91aW50OF90ICplc2xfZGF0YSwg Z3J1Yl9zaXplX3QgKm5leHRfZXNsLAo+ICsgICAgICAgICAgICAgICAgIGdydWJfcGtzX3NkX3Qg Kipwa3Nfc2QsIGdydWJfc2l6ZV90ICpwa3Nfc2RfZW50cmllcykKPiArewo+ICsgIGdydWJfdXVp ZF90IGd1aWQgPSB7IDAgfTsKPiArICBncnViX2VzbF90ICplc2wgPSBOVUxMOwo+ICsgIGdydWJf c2l6ZV90IG9mZnNldCA9IDAsIGVzbF9zaXplID0gMCwKPiArICAgICAgICAgICAgICBzaWduYXR1 cmVfc2l6ZSA9IDAsIHNpZ25hdHVyZV9oZWFkZXJfc2l6ZSA9IDA7Cj4gKwo+ICsgIGVzbCA9IGdy dWJfY29udmVydF90b19lc2wgKGVzbF9kYXRhLCAqbmV4dF9lc2wpOwo+ICsgIGlmIChlc2wgPT0g TlVMTCkKPiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CVUcsICJpbnZhbGlkIEVT TCIpOwo+ICsKPiArICBlc2xfc2l6ZSA9IGdydWJfbGVfdG9fY3B1MzIgKGVzbC0+c2lnbmF0dXJl bGlzdHNpemUpOwo+ICsgIHNpZ25hdHVyZV9oZWFkZXJfc2l6ZSA9IGdydWJfbGVfdG9fY3B1MzIg KGVzbC0+c2lnbmF0dXJlaGVhZGVyc2l6ZSk7Cj4gKyAgc2lnbmF0dXJlX3NpemUgPSBncnViX2xl X3RvX2NwdTMyIChlc2wtPnNpZ25hdHVyZXNpemUpOwo+ICsgIGd1aWQgPSBlc2wtPnNpZ25hdHVy ZXR5cGU7Cj4gKwo+ICsgIGlmIChlc2xfc2l6ZSA8IHNpemVvZiAoZ3J1Yl9lc2xfdCkgfHwgZXNs X3NpemUgPiAqbmV4dF9lc2wpCj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQlVH LCAiaW52YWxpZCBFU0wgc2l6ZSAoJXUpXG4iLCAKPiBlc2xfc2l6ZSk7Cj4gKwo+ICsgICpuZXh0 X2VzbCA9IGVzbF9zaXplOwo+ICsgIG9mZnNldCA9IHNpemVvZiAoZ3J1Yl9lc2xfdCkgKyBzaWdu YXR1cmVfaGVhZGVyX3NpemU7Cj4gKyAgZXNsX3NpemUgPSBlc2xfc2l6ZSAtIG9mZnNldDsKPiAr Cj4gKyAgcmV0dXJuIGdydWJfZXNkX2Zyb21fZXNsIChlc2xfZGF0YSArIG9mZnNldCwgZXNsX3Np emUsIAo+IHNpZ25hdHVyZV9zaXplLCAmZ3VpZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBrc19zZCwgcGtzX3NkX2VudHJpZXMpOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBpbXBvcnRz IHRoZSBFRkkgc2lnbmF0dXJlIGRhdGEgYW5kIHRoZSBudW1iZXIgb2YgZXNkIGZyb20gdGhlIGVz bAo+ICsgKiBpbnRvIHRoZSBwa3Mgc2QgYnVmZmVyIGFuZCBwa3Mgc2QgZW50cmllcy4KPiArICov Cj4gK3N0YXRpYyBncnViX2Vycl90Cj4gK2dydWJfcGtzX3NkX2Zyb21fZXNsIChjb25zdCBncnVi X3VpbnQ4X3QgKmVzbF9kYXRhLCBncnViX3NpemVfdCAKPiBlc2xfc2l6ZSwKPiArICAgICAgICAg ICAgICAgICAgICAgIGdydWJfcGtzX3NkX3QgKipwa3Nfc2QsIGdydWJfc2l6ZV90IAo+ICpwa3Nf c2RfZW50cmllcykKPiArewo+ICsgIGdydWJfZXJyX3QgcmMgPSBHUlVCX0VSUl9OT05FOwo+ICsg IGdydWJfc2l6ZV90IG5leHRfZXNsID0gZXNsX3NpemU7Cj4gKwo+ICsgIGRvCj4gKyAgICB7Cj4g KyAgICAgIHJjID0gZ3J1Yl9lc2xfdG9fZXNkIChlc2xfZGF0YSwgJm5leHRfZXNsLCBwa3Nfc2Qs IAo+IHBrc19zZF9lbnRyaWVzKTsKPiArICAgICAgaWYgKHJjICE9IEdSVUJfRVJSX05PTkUpCj4g KyAgICAgICAgYnJlYWs7Cj4gKwo+ICsgICAgICBlc2xfZGF0YSArPSBuZXh0X2VzbDsKPiArICAg ICAgZXNsX3NpemUgLT0gbmV4dF9lc2w7Cj4gKyAgICAgIG5leHRfZXNsID0gZXNsX3NpemU7Cj4g KyAgICB9Cj4gKyAgd2hpbGUgKGVzbF9zaXplID4gMCk7Cj4gKwo+ICsgIHJldHVybiByYzsKPiAr fQo+ICsKPiArLyoKPiArICogcmVhZHMgdGhlIHNlY3VyZSBib290IHZlcnNpb24gZnJvbSBQS1Mg YXMgYW4gb2JqZWN0Lgo+ICsgKiBjYWxsZXIgbXVzdCBmcmVlIHJlc3VsdAo+ICsgKi8KPiArc3Rh dGljIGdydWJfZXJyX3QKPiArZ3J1Yl9yZWFkX3NidmVyc2lvbl9mcm9tX3BrcyAoZ3J1Yl91aW50 OF90ICoqb3V0LCBncnViX3NpemVfdAo+ICpvdXRsZW4sIGdydWJfc2l6ZV90ICpwb2xpY3kpCj4g K3sKPiArICAqb3V0ID0gZ3J1Yl9tYWxsb2MgKHBrc19tYXhfb2JqZWN0X3NpemUpOwo+ICsgIGlm ICgqb3V0ID09IE5VTEwpCj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09G X01FTU9SWSwgIm91dCBvZiBtZW1vcnkiKTsKPiArCj4gKyAgcmV0dXJuIGdydWJfaWVlZTEyNzVf cGtzX3JlYWRfb2JqZWN0IChQS1NfQ09OU1VNRVJfRlcsIAo+IFNCX1ZFUlNJT05fS0VZX05BTUUs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQl9WRVJTSU9OX0tF WV9MRU4sICpvdXQsCj4gcGtzX21heF9vYmplY3Rfc2l6ZSwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG91dGxlbiwgcG9saWN5KTsKPiArfQo+ICsKPiArLyoKPiAr ICogcmVhZHMgdGhlIHNlY3VyZSBib290IHZhcmlhYmxlIGZyb20gUEtTLgo+ICsgKiBjYWxsZXIg bXVzdCBmcmVlIHJlc3VsdAo+ICsgKi8KPiArc3RhdGljIGdydWJfZXJyX3QKPiArZ3J1Yl9yZWFk X3NidmFyX2Zyb21fcGtzIChjb25zdCBncnViX3VpbnQ4X3Qgc2J2YXJmbGFncywgY29uc3QKPiBn cnViX3VpbnQ4X3Qgc2J2YXJ0eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJf dWludDhfdCAqKm91dCwgZ3J1Yl9zaXplX3QgKm91dGxlbikKPiArewo+ICsgICpvdXQgPSBncnVi X21hbGxvYyAocGtzX21heF9vYmplY3Rfc2l6ZSk7Cj4gKyAgaWYgKCpvdXQgPT0gTlVMTCkKPiAr ICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLCAib3V0IG9mIG1l bW9yeSIpOwo+ICsKPiArICByZXR1cm4gZ3J1Yl9pZWVlMTI3NV9wa3NfcmVhZF9zYnZhciAoc2J2 YXJmbGFncywgc2J2YXJ0eXBlLCAqb3V0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwa3NfbWF4X29iamVjdF9zaXplLCBvdXRsZW4pOwo+ICt9Cj4gKwo+ICsvKiBU ZXN0IHRoZSBhdmFpbGFiaWxpdHkgb2YgUEtTIHN1cHBvcnQuICovCj4gK3N0YXRpYyBncnViX2Vy cl90Cj4gK2dydWJfaXNfc3VwcG9ydF9wa3MgKHZvaWQpCj4gK3sKPiArICBncnViX2Vycl90IHJj ID0gR1JVQl9FUlJfTk9ORTsKPiArICBncnViX2llZWUxMjc1X2NlbGxfdCBtaXNzaW5nID0gMDsK PiArCj4gKyAgcmMgPSBncnViX2llZWUxMjc1X3Rlc3QgKCJwa3MtbWF4LW9iamVjdC1zaXplIiwg Jm1pc3NpbmcpOwo+ICsgIGlmIChyYyAhPSBHUlVCX0VSUl9OT05FIHx8IChpbnQpIG1pc3Npbmcg PT0gLTEpCj4gKyAgICBncnViX3ByaW50ZiAoIldhcm5pbmc6IGRvZXNuJ3QgaGF2ZSBQS1Mgc3Vw cG9ydCFcbiIpOwo+ICsgIGVsc2UKPiArICAgIHsKPiArICAgICAgcmMgPSBncnViX2llZWUxMjc1 X3Brc19tYXhfb2JqZWN0X3NpemUgKCZwa3NfbWF4X29iamVjdF9zaXplKTsKPiArICAgICAgaWYg KHJjICE9IEdSVUJfRVJSX05PTkUpCj4gKyAgICAgICAgZ3J1Yl9wcmludGYgKCJXYXJuaW5nOiBQ S1Mgc3VwcG9ydCBpcyB0aGVyZSBidXQgaXQgaGFzIHplcm8KPiBvYmplY3RzIVxuIik7Cj4gKyAg ICB9Cj4gKwo+ICsgIHJldHVybiByYzsKPiArfQo+ICsKPiArLyoKPiArICogcmV0cmlldmVzIHRo ZSBzZWN1cmUgYm9vdCB2YXJpYWJsZSBmcm9tIFBLUywgdW5wYWNrcyBpdCwgcmVhZHMgdGhlIAo+ IGVzZAo+ICsgKiBmcm9tIEVTTCwgYW5kIHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHBr cyBzZCBidWZmZXIuCj4gKyAqLwo+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+ICtncnViX3JlYWRfc2Vj dXJlX2Jvb3RfdmFyaWFibGVzIChjb25zdCBncnViX3VpbnQ4X3Qgc2J2YXJmbGFncywgY29uc3QK PiBncnViX3VpbnQ4X3Qgc2J2YXJ0eXBlLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBncnViX3Brc19zZF90ICoqcGtzX3NkLCBncnViX3NpemVfdAo+ICpwa3Nfc2RfZW50cmll cykKPiArewo+ICsgIGdydWJfZXJyX3QgcmMgPSBHUlVCX0VSUl9OT05FOwo+ICsgIGdydWJfdWlu dDhfdCAqZXNsX2RhdGEgPSBOVUxMOwo+ICsgIGdydWJfc2l6ZV90IGVzbF9kYXRhX3NpemUgPSAw Owo+ICsKPiArICByYyA9IGdydWJfcmVhZF9zYnZhcl9mcm9tX3BrcyAoc2J2YXJmbGFncywgc2J2 YXJ0eXBlLCAmZXNsX2RhdGEsCj4gJmVzbF9kYXRhX3NpemUpOwo+ICsgIC8qCj4gKyAgICogYXQg dGhpcyBwb2ludCB3ZSBoYXZlIFNCX1ZFUlNJT04sIHNvIGFueSBlcnJvciBpcyB3b3J0aAo+ICsg ICAqIGF0IGxlYXN0IHNvbWUgdXNlci12aXNpYmxlIGluZm8KPiArICAgKi8KPiArICBpZiAocmMg IT0gR1JVQl9FUlJfTk9ORSkKPiArICAgIHJjID0gZ3J1Yl9lcnJvciAocmMsICJzZWN1cmUgYm9v dCB2YXJpYWJsZSAlcyByZWFkaW5nICglZCkiLAo+ICsgICAgICAgICAgICAgICAgICAgICAoc2J2 YXJ0eXBlID09IERCID8gImRiIiA6ICJkYngiKSwgcmMpOwo+ICsgIGVsc2UgaWYgKGVzbF9kYXRh X3NpemUgIT0gMCkKPiArICAgIHJjID0gZ3J1Yl9wa3Nfc2RfZnJvbV9lc2wgKChjb25zdCBncnVi X3VpbnQ4X3QgKikgZXNsX2RhdGEsIAo+IGVzbF9kYXRhX3NpemUsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwa3Nfc2QsIHBrc19zZF9lbnRyaWVzKTsKPiArICBncnViX2ZyZWUg KGVzbF9kYXRhKTsKPiArCj4gKyAgcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICsvKiByZWFkcyBzZWN1 cmUgYm9vdCB2ZXJzaW9uIChTQl9WRVJTSU9OKSAqLwo+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+ICtn cnViX2dldF9zZWN1cmVfYm9vdF92ZXJzaW9uICh2b2lkKQo+ICt7Cj4gKyAgZ3J1Yl9lcnJfdCBy YyA9IEdSVUJfRVJSX05PTkU7Cj4gKyAgZ3J1Yl91aW50OF90ICpkYXRhID0gTlVMTDsKPiArICBn cnViX3NpemVfdCBsZW4gPSAwLCBwb2xpY3kgPSAwOwo+ICsKPiArICByYyA9IGdydWJfcmVhZF9z YnZlcnNpb25fZnJvbV9wa3MgKCZkYXRhLCAmbGVuLCAmcG9saWN5KTsKPiArICBpZiAocmMgIT0g R1JVQl9FUlJfTk9ORSkKPiArICAgIGdydWJfcHJpbnRmICgiV2FybmluZzogU0IgdmVyc2lvbiBy ZWFkIGZhaWxlZCEgKCVkKVxuIiwgcmMpOwo+ICsgIGVsc2UgaWYgKGxlbiAhPSAxIHx8ICgqZGF0 YSAhPSAxICYmICpkYXRhICE9IDApKQo+ICsgICAgewo+ICsgICAgICBncnViX3ByaW50ZiAoIldh cm5pbmc6IGZvdW5kIHVuZXhwZWN0ZWQgU0IgdmVyc2lvbiEgKCVkKVxuIiwgCj4gKmRhdGEpOwo+ ICsgICAgICByYyA9IEdSVUJfRVJSX0lOVkFMSURfQ09NTUFORDsKPiArICAgIH0KPiArCj4gKyAg aWYgKHJjICE9IEdSVUJfRVJSX05PTkUpCj4gKyAgICB7Cj4gKyAgICAgIGdydWJfcHJpbnRmICgi V2FybmluZzogc3dpdGNoIHRvIHN0YXRpYyBrZXkhXG4iKTsKPiArICAgICAgaWYgKGdydWJfaXNf bG9ja2Rvd24gKCkgPT0gR1JVQl9MT0NLRE9XTl9FTkFCTEVEKQo+ICsgICAgICAgIGdydWJfZmF0 YWwgKCJTZWN1cmUgQm9vdCBsb2NrZWQgZG93biIpOwo+ICsgICAgfQo+ICsgIGVsc2UKPiArICAg IGdydWJfdXNlX3BsYXRmb3JtX2tleXN0b3JlID0gKmRhdGE7Cj4gKwo+ICsgIGdydWJfZnJlZSAo ZGF0YSk7Cj4gKwo+ICsgIHJldHVybiByYzsKPiArfQo+ICsKPiArLyogcmVsZWFzaW5nIGFsbG9j YXRlZCBtZW1vcnkgKi8KPiArdm9pZAo+ICtncnViX3JlbGVhc2VfcGxhdGZvcm1fa2V5c3RvcmUg KHZvaWQpCj4gK3sKPiArICBncnViX3NpemVfdCBpID0gMDsKPiArCj4gKyAgZm9yIChpID0gMDsg aSA8IGdydWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJfZW50cmllczsgaSsrKQo+ICsgICAgZ3J1Yl9m cmVlIChncnViX3BsYXRmb3JtX2tleXN0b3JlLmRiW2ldLmRhdGEpOwo+ICsKPiArICBmb3IgKGkg PSAwOyBpIDwgZ3J1Yl9wbGF0Zm9ybV9rZXlzdG9yZS5kYnhfZW50cmllczsgaSsrKQo+ICsgICAg Z3J1Yl9mcmVlIChncnViX3BsYXRmb3JtX2tleXN0b3JlLmRieFtpXS5kYXRhKTsKPiArCj4gKyAg Z3J1Yl9mcmVlIChncnViX3BsYXRmb3JtX2tleXN0b3JlLmRiKTsKPiArICBncnViX2ZyZWUgKGdy dWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJ4KTsKPiArICBncnViX21lbXNldCAoJmdydWJfcGxhdGZv cm1fa2V5c3RvcmUsIDB4MDAsIHNpemVvZiAoZ3J1Yl9wa3NfdCkpOwo+ICt9Cj4gKwo+ICsvKiBp bml0aWFsaXphdGlvbiBvZiB0aGUgUGxhdGZvcm0gS2V5c3RvcmUgKi8KPiArZ3J1Yl9lcnJfdAo+ ICtncnViX3BsYXRmb3JtX2tleXN0b3JlX2luaXQgKHZvaWQpCj4gK3sKPiArICBncnViX2Vycl90 IHJjID0gR1JVQl9FUlJfTk9ORTsKPiArCj4gKyAgZ3J1Yl9wcmludGYgKCJ0cnlpbmcgdG8gbG9h ZCBQbGF0Zm9ybSBLZXlzdG9yZVxuIik7Cj4gKwo+ICsgIHJjID0gZ3J1Yl9pc19zdXBwb3J0X3Br cyAoKTsKPiArICBpZiAocmMgIT0gR1JVQl9FUlJfTk9ORSkKPiArICAgIHsKPiArICAgICAgZ3J1 Yl9wcmludGYgKCJXYXJuaW5nOiBzd2l0Y2ggdG8gc3RhdGljIGtleSFcbiIpOwo+ICsgICAgICBy ZXR1cm4gcmM7Cj4gKyAgICB9Cj4gKwo+ICsgIC8qIFNCX1ZFUlNJT04gKi8KPiArICByYyA9IGdy dWJfZ2V0X3NlY3VyZV9ib290X3ZlcnNpb24gKCk7Cj4gKyAgaWYgKHJjICE9IEdSVUJfRVJSX05P TkUpCj4gKyAgICByZXR1cm4gcmM7Cj4gKwo+ICsgIGlmIChncnViX3VzZV9wbGF0Zm9ybV9rZXlz dG9yZSkKPiArICAgIHsKPiArICAgICAgZ3J1Yl9tZW1zZXQgKCZncnViX3BsYXRmb3JtX2tleXN0 b3JlLCAweDAwLCBzaXplb2YgCj4gKGdydWJfcGtzX3QpKTsKPiArICAgICAgLyogREIgKi8KPiAr ICAgICAgcmMgPSBncnViX3JlYWRfc2VjdXJlX2Jvb3RfdmFyaWFibGVzICgwLCBEQiwgCj4gJmdy dWJfcGxhdGZvcm1fa2V5c3RvcmUuZGIsCj4gKwo+ICZncnViX3BsYXRmb3JtX2tleXN0b3JlLmRi X2VudHJpZXMpOwo+ICsgICAgICBpZiAocmMgPT0gR1JVQl9FUlJfTk9ORSkKPiArICAgICAgICB7 Cj4gKyAgICAgICAgICAvKiBEQlggKi8KPiArICAgICAgICAgIHJjID0gZ3J1Yl9yZWFkX3NlY3Vy ZV9ib290X3ZhcmlhYmxlcyAoMCwgREJYLAo+ICZncnViX3BsYXRmb3JtX2tleXN0b3JlLmRieCwK PiArCj4gJmdydWJfcGxhdGZvcm1fa2V5c3RvcmUuZGJ4X2VudHJpZXMpOwo+ICsgICAgICAgICAg aWYgKHJjID09IFBLU19PQkpFQ1RfTk9UX0ZPVU5EKQo+ICsgICAgICAgICAgICB7Cj4gKyAgICAg ICAgICAgICAgZ3J1Yl9wcmludGYgKCJXYXJuaW5nOiBkYnggaXMgbm90IGZvdW5kIVxuIik7Cj4g KyAgICAgICAgICAgICAgcmMgPSBHUlVCX0VSUl9OT05FOwo+ICsgICAgICAgICAgICB9Cj4gKyAg ICAgICAgfQo+ICsKPiArICAgIH0KPiArCj4gKyAgaWYgKHJjICE9IEdSVUJfRVJSX05PTkUpCj4g KyAgICBncnViX3JlbGVhc2VfcGxhdGZvcm1fa2V5c3RvcmUgKCk7Cj4gKwo+ICsgIHJldHVybiBy YzsKPiArfQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2dydWIvcGxhdGZvcm1fa2V5c3RvcmUuaCAK PiBiL2luY2x1ZGUvZ3J1Yi9wbGF0Zm9ybV9rZXlzdG9yZS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiBpbmRleCAwMDAwMDAwMDAuLjdhNzM3ODkyNgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9p bmNsdWRlL2dydWIvcGxhdGZvcm1fa2V5c3RvcmUuaAo+IEBAIC0wLDAgKzEsMjMzIEBACj4gKy8q Cj4gKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMTUsIEludGVsIENvcnBvcmF0aW9uLiBBbGwg cmlnaHRzIHJlc2VydmVkLiAKPiBUaGlzCj4gKyAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlp bmcgbWF0ZXJpYWxzIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSAKPiBhdmFpbGFibGUKPiArICogdW5k ZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSAyLUNsYXVzZSBCU0QgTGljZW5zZSB3 aGljaAo+ICsgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4KPiArICoKPiArICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0Cj4gKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyAKPiBhcmUgbWV0Ogo+ICsgKgo+ICsgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCAK PiBub3RpY2UsCj4gKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIuCj4gKyAqCj4gKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgCj4gY29weXJpZ2h0Cj4gKyAqIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK PiArICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg dGhlIAo+IGRpc3RyaWJ1dGlvbi4KPiArICoKPiArICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAKPiAiQVMgSVMiCj4g KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIAo+IFRPLCBUSEUKPiArICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIAo+IFBVUlBPU0UKPiArICog QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9S IAo+IENPTlRSSUJVVE9SUyBCRQo+ICsgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCj4gKyAqIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIAo+IE9G Cj4gKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP UiBQUk9GSVRTOyBPUiAKPiBCVVNJTkVTUwo+ICsgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgCj4gV0hFVEhFUiBJTgo+ICsgKiBD T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgCj4gT1RIRVJXSVNFKQo+ICsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIAo+IE9GIFRIRQo+ICsgKiBQT1NTSUJJ TElUWSBPRiBTVUNIIERBTUFHRS4KPiArICoKPiArICoKPiArICogaHR0cHM6Ly9naXRodWIuY29t L3RpYW5vY29yZS9lZGsyLXN0YWdpbmcgKGVkazItc3RhZ2luZyByZXBvIG9mIAo+IHRpYW5vY29y ZSksCj4gKyAqIHRoZSBJbWFnZUF1dGhlbnRpY2F0aW9uLmggZmlsZSB1bmRlciBpdCwgYW5kIGhl cmUncyB0aGUgY29weXJpZ2h0Cj4gYW5kIGxpY2Vuc2UuCj4gKyAqCj4gKyAqIE1kZVBrZy9JbmNs dWRlL0d1aWQvSW1hZ2VBdXRoZW50aWNhdGlvbi5oCj4gKyAqCj4gKyAqIENvcHlyaWdodCAyMDI0 IElCTSBDb3JwLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19QTEFURk9STV9LRVlTVE9SRV9IX18K PiArI2RlZmluZSBfX1BMQVRGT1JNX0tFWVNUT1JFX0hfXwo+ICsKPiArI2luY2x1ZGUgPGdydWIv c3ltYm9sLmg+Cj4gKyNpbmNsdWRlIDxncnViL21tLmg+Cj4gKyNpbmNsdWRlIDxncnViL3R5cGVz Lmg+Cj4gKwo+ICsjaWYgX19HTlVDX18gPj0gOQo+ICsjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGln bm9yZWQgIi1XYWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVyIgo+ICsjZW5kaWYKPiArCj4gKyNkZWZp bmUgR1JVQl9VVUlEX1NJWkUgMTYKPiArI2RlZmluZSBHUlVCX01BWF9IQVNIX1NJWkUgNjQKPiAr Cj4gK3R5cGVkZWYgc3RydWN0IGdydWJfdXVpZCBncnViX3V1aWRfdDsKPiArdHlwZWRlZiBzdHJ1 Y3QgZ3J1Yl9lc2QgZ3J1Yl9lc2RfdDsKPiArdHlwZWRlZiBzdHJ1Y3QgZ3J1Yl9lc2wgZ3J1Yl9l c2xfdDsKPiArCj4gKy8qIFRoZSBzdHJ1Y3R1cmUgb2YgYSBVVUlELiovCj4gK3N0cnVjdCBncnVi X3V1aWQKPiArewo+ICsgIGdydWJfdWludDhfdCBiW0dSVUJfVVVJRF9TSVpFXTsKPiArfTsKPiAr Cj4gKy8qCj4gKyAqIEl0IGlzIGRlcml2ZWQgZnJvbSBFRklfU0lHTkFUVVJFX0RBVEEKPiArICoK PiBodHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL2VkazItc3RhZ2luZy9ibG9iL21hc3Rlci9N ZGVQa2cvSW5jbHVkZS9HdWlkL0ltYWdlQXV0aGVudGljYXRpb24uaAo+ICsgKgo+ICsgKiBUaGUg c3RydWN0dXJlIG9mIGFuIEVGSSBzaWduYXR1cmUgZGF0YWJhc2UgKEVTRCkuKi8KPiArc3RydWN0 IGdydWJfZXNkCj4gK3sKPiArICAvKgo+ICsgICAqIEFuIGlkZW50aWZpZXIgd2hpY2ggaWRlbnRp ZmllcyB0aGUgYWdlbnQgd2hpY2ggYWRkZWQKPiArICAgKiB0aGUgc2lnbmF0dXJlIHRvIHRoZSBs aXN0Lgo+ICsgICAqLwo+ICsgIGdydWJfdXVpZF90IHNpZ25hdHVyZW93bmVyOwo+ICsgIC8qIFRo ZSBmb3JtYXQgb2YgdGhlIHNpZ25hdHVyZSBpcyBkZWZpbmVkIGJ5IHRoZSBTaWduYXR1cmVUeXBl LiovCj4gKyAgZ3J1Yl91aW50OF90IHNpZ25hdHVyZWRhdGFbXTsKPiArfSBHUlVCX1BBQ0tFRDsK PiArCj4gKy8qCj4gKyAqIEl0IGlzIGRlcml2ZWQgZnJvbSBFRklfU0lHTkFUVVJFX0xJU1QKPiAr ICoKPiBodHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL2VkazItc3RhZ2luZy9ibG9iL21hc3Rl ci9NZGVQa2cvSW5jbHVkZS9HdWlkL0ltYWdlQXV0aGVudGljYXRpb24uaAo+ICsgKgo+ICsgKiBU aGUgc3RydWN0dXJlIG9mIGFuIEVGSSBzaWduYXR1cmUgbGlzdCAoRVNMKS4qLwo+ICtzdHJ1Y3Qg Z3J1Yl9lc2wKPiArewo+ICsgIC8qIFR5cGUgb2YgdGhlIHNpZ25hdHVyZS4gR1VJRCBzaWduYXR1 cmUgdHlwZXMgYXJlIGRlZmluZWQgaW4gCj4gYmVsb3cuKi8KPiArICBncnViX3V1aWRfdCBzaWdu YXR1cmV0eXBlOwo+ICsgIC8qIFRvdGFsIHNpemUgb2YgdGhlIHNpZ25hdHVyZSBsaXN0LCBpbmNs dWRpbmcgdGhpcyBoZWFkZXIuKi8KPiArICBncnViX3VpbnQzMl90IHNpZ25hdHVyZWxpc3RzaXpl Owo+ICsgIC8qCj4gKyAgICogU2l6ZSBvZiB0aGUgc2lnbmF0dXJlIGhlYWRlciB3aGljaCBwcmVj ZWRlcwo+ICsgICAqIHRoZSBhcnJheSBvZiBzaWduYXR1cmVzLgo+ICsgICAqLwo+ICsgIGdydWJf dWludDMyX3Qgc2lnbmF0dXJlaGVhZGVyc2l6ZTsKPiArICAvKiBTaXplIG9mIGVhY2ggc2lnbmF0 dXJlLiovCj4gKyAgZ3J1Yl91aW50MzJfdCBzaWduYXR1cmVzaXplOwo+ICt9IEdSVUJfUEFDS0VE Owo+ICsKPiArLyoKPiArICogSXQgaXMgZGVyaXZlZCBmcm9tIEVGSV9DRVJUX1g1MDlfR1VJRAo+ ICsgKgo+IGh0dHBzOi8vZ2l0aHViLmNvbS90aWFub2NvcmUvZWRrMi1zdGFnaW5nL2Jsb2IvbWFz dGVyL01kZVBrZy9JbmNsdWRlL0d1aWQvSW1hZ2VBdXRoZW50aWNhdGlvbi5oCj4gKyAqLwo+ICsj ZGVmaW5lIEdSVUJfUEtTX0NFUlRfWDUwOV9HVUlEICAgICAgICAgICAgXAo+ICsgIChncnViX3V1 aWRfdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAo+ICsgICAgICAweGExLCAweDU5LCAweGMwLCAweGE1LCAweGU0LCAw eDk0LCAgXAo+ICsgICAgICAweGE3LCAweDRhLCAweDg3LCAweGI1LCAweGFiLCAweDE1LCAgXAo+ ICsgICAgICAweDVjLCAweDJiLCAweGYwLCAweDcyICAgICAgICAgICAgICAgXAo+ICsgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgIH0KPiArCj4gKy8qCj4g KyAqIEl0IGlzIGRlcml2ZWQgZnJvbSBFRklfQ0VSVF9TSEEyNTZfR1VJRAo+ICsgKgo+IGh0dHBz Oi8vZ2l0aHViLmNvbS90aWFub2NvcmUvZWRrMi1zdGFnaW5nL2Jsb2IvbWFzdGVyL01kZVBrZy9J bmNsdWRlL0d1aWQvSW1hZ2VBdXRoZW50aWNhdGlvbi5oCj4gKyAqLwo+ICsjZGVmaW5lIEdSVUJf UEtTX0NFUlRfU0hBMjU2X0dVSUQgICAgICAgICAgXAo+ICsgIChncnViX3V1aWRfdCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAo+ICsgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAo+ICsgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAo+ICsgICAgICAweDI2LCAweDE2LCAweGM0LCAweGMxLCAweDRjLCAweDUwLCAgXAo+ICsg ICAgICAweDkyLCAweDQwLCAweGFjLCAweGE5LCAweDQxLCAweGY5LCAgXAo+ICsgICAgICAweDM2 LCAweDkzLCAweDQzLCAweDI4ICAgICAgICAgICAgICAgXAo+ICsgICAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgIH0KPiArCj4gKy8qCj4gKyAqIEl0IGlzIGRl cml2ZWQgZnJvbSBFRklfQ0VSVF9TSEEzODRfR1VJRAo+ICsgKgo+IGh0dHBzOi8vZ2l0aHViLmNv bS90aWFub2NvcmUvZWRrMi1zdGFnaW5nL2Jsb2IvbWFzdGVyL01kZVBrZy9JbmNsdWRlL0d1aWQv SW1hZ2VBdXRoZW50aWNhdGlvbi5oCj4gKyAqLwo+ICsjZGVmaW5lIEdSVUJfUEtTX0NFUlRfU0hB Mzg0X0dVSUQgICAgICAgICAgXAo+ICsgIChncnViX3V1aWRfdCkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAo+ICsgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAo+ICsgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAg ICAweDA3LCAweDUzLCAweDNlLCAweGZmLCAweGQwLCAweDlmLCAgXAo+ICsgICAgICAweGM5LCAw eDQ4LCAweDg1LCAweGYxLCAweDhhLCAweGQ1LCAgXAo+ICsgICAgICAweDZjLCAweDcwLCAweDFl LCAweDEgICAgICAgICAgICAgICAgXAo+ICsgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAo+ICsgIH0KPiArCj4gKy8qCj4gKyAqIEl0IGlzIGRlcml2ZWQgZnJvbSBF RklfQ0VSVF9TSEE1MTJfR1VJRAo+ICsgKgo+IGh0dHBzOi8vZ2l0aHViLmNvbS90aWFub2NvcmUv ZWRrMi1zdGFnaW5nL2Jsb2IvbWFzdGVyL01kZVBrZy9JbmNsdWRlL0d1aWQvSW1hZ2VBdXRoZW50 aWNhdGlvbi5oCj4gKyAqLwo+ICsjZGVmaW5lIEdSVUJfUEtTX0NFUlRfU0hBNTEyX0dVSUQgICAg ICAgICAgXAo+ICsgIChncnViX3V1aWRfdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ ICsgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgICAweGFlLCAweDBm LCAweDNlLCAweDA5LCAweGM0LCAweGE2LCAgXAo+ICsgICAgICAweDUwLCAweDRmLCAweDlmLCAw eDFiLCAweGQ0LCAweDFlLCAgXAo+ICsgICAgICAweDJiLCAweDg5LCAweGMxLCAweDlhICAgICAg ICAgICAgICAgXAo+ICsgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAo+ICsgIH0KPiArCj4gKy8qCj4gKyAqIEl0IGlzIGRlcml2ZWQgZnJvbSBFRklfQ0VSVF9YNTA5 X1NIQTI1Nl9HVUlECj4gKyAqCj4gaHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29yZS9lZGsyLXN0 YWdpbmcvYmxvYi9tYXN0ZXIvTWRlUGtnL0luY2x1ZGUvR3VpZC9JbWFnZUF1dGhlbnRpY2F0aW9u LmgKPiArICovCj4gKyNkZWZpbmUgR1JVQl9QS1NfQ0VSVF9YNTA5X1NIQTI1Nl9HVUlEICAgICBc Cj4gKyAgKGdydWJfdXVpZF90KSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAgICAgIDB4OTIsIDB4YTQsIDB4ZDIs IDB4M2IsIDB4YzAsIDB4OTYsICBcCj4gKyAgICAgIDB4NzksIDB4NDAsIDB4YjQsIDB4MjAsIDB4 ZmMsIDB4ZjksICBcCj4gKyAgICAgIDB4OGUsIDB4ZjEsIDB4MDMsIDB4ZWQgICAgICAgICAgICAg ICBcCj4gKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gKyAg fQo+ICsKPiArLyoKPiArICogSXQgaXMgZGVyaXZlZCBmcm9tIEVGSV9DRVJUX1g1MDlfU0hBMzg0 X0dVSUQKPiArICoKPiBodHRwczovL2dpdGh1Yi5jb20vdGlhbm9jb3JlL2VkazItc3RhZ2luZy9i bG9iL21hc3Rlci9NZGVQa2cvSW5jbHVkZS9HdWlkL0ltYWdlQXV0aGVudGljYXRpb24uaAo+ICsg Ki8KPiArI2RlZmluZSBHUlVCX1BLU19DRVJUX1g1MDlfU0hBMzg0X0dVSUQgICAgIFwKPiArICAo Z3J1Yl91dWlkX3QpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICB7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKPiArICAgICAgMHg2ZSwgMHg4NywgMHg3NiwgMHg3MCwg MHhjMiwgMHg4MCwgIFwKPiArICAgICAgMHhlNiwgMHg0ZSwgMHhhYSwgMHhkMiwgMHgyOCwgMHhi MywgIFwKPiArICAgICAgMHg0OSwgMHhhNiwgMHg4NiwgMHg1YiAgICAgICAgICAgICAgIFwKPiAr ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiArICB9Cj4gKwo+ ICsvKgo+ICsgKiBJdCBpcyBkZXJpdmVkIGZyb20gRUZJX0NFUlRfWDUwOV9TSEE1MTJfR1VJRAo+ ICsgKgo+IGh0dHBzOi8vZ2l0aHViLmNvbS90aWFub2NvcmUvZWRrMi1zdGFnaW5nL2Jsb2IvbWFz dGVyL01kZVBrZy9JbmNsdWRlL0d1aWQvSW1hZ2VBdXRoZW50aWNhdGlvbi5oCj4gKyAqLwo+ICsj ZGVmaW5lIEdSVUJfUEtTX0NFUlRfWDUwOV9TSEE1MTJfR1VJRCAgICAgXAo+ICsgIChncnViX3V1 aWRfdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAo+ICsgICAgICAweDYzLCAweGJmLCAweDZkLCAweDQ0LCAweDAyLCAw eDI1LCAgXAo+ICsgICAgICAweGRhLCAweDRjLCAweGJjLCAweGZhLCAweDI0LCAweDY1LCAgXAo+ ICsgICAgICAweGQyLCAweGIwLCAweGZlLCAweDlkICAgICAgICAgICAgICAgXAo+ICsgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgIH0KPiArCj4gK3R5cGVk ZWYgc3RydWN0IGdydWJfcGtzX3NkIGdydWJfcGtzX3NkX3Q7Cj4gK3R5cGVkZWYgc3RydWN0IGdy dWJfcGtzIGdydWJfcGtzX3Q7Cj4gKwo+ICsvKiBUaGUgc3RydWN0dXJlIG9mIGEgUEtTIHNpZ25h dHVyZSBkYXRhLiovCj4gK3N0cnVjdCBncnViX3Brc19zZAo+ICt7Cj4gKyAgZ3J1Yl91dWlkX3Qg Z3VpZDsgICAgICAvKiBzaWduYXR1cmUgdHlwZSAqLwo+ICsgIGdydWJfdWludDhfdCAqZGF0YTsg ICAgLyogc2lnbmF0dXJlIGRhdGEgKi8KPiArICBncnViX3NpemVfdCBkYXRhX3NpemU7IC8qIHNp emUgb2Ygc2lnbmF0dXJlIGRhdGEgKi8KPiArfSBHUlVCX1BBQ0tFRDsKPiArCj4gKy8qIFRoZSBz dHJ1Y3R1cmUgb2YgYSBQS1MuKi8KPiArc3RydWN0IGdydWJfcGtzCj4gK3sKPiArICBncnViX3Br c19zZF90ICpkYjsgICAgICAgIC8qIHNpZ25hdHVyZSBkYXRhYmFzZSAqLwo+ICsgIGdydWJfcGtz X3NkX3QgKmRieDsgICAgICAgLyogZm9yYmlkZGVuIHNpZ25hdHVyZSBkYXRhYmFzZSAqLwo+ICsg IGdydWJfc2l6ZV90IGRiX2VudHJpZXM7ICAgLyogc2l6ZSBvZiBzaWduYXR1cmUgZGF0YWJhc2Ug Ki8KPiArICBncnViX3NpemVfdCBkYnhfZW50cmllczsgIC8qIHNpemUgb2YgZm9yYmlkZGVuIHNp Z25hdHVyZSBkYXRhYmFzZSAqLwo+ICt9IEdSVUJfUEFDS0VEOwo+ICsKPiArI2lmZGVmIF9fcG93 ZXJwY19fCj4gKwo+ICsvKiBpbml0aWFsaXphdGlvbiBvZiB0aGUgUGxhdGZvcm0gS2V5c3RvcmUg Ki8KPiArZ3J1Yl9lcnJfdCBncnViX3BsYXRmb3JtX2tleXN0b3JlX2luaXQgKHZvaWQpOwo+ICsv KiByZWxlYXNpbmcgYWxsb2NhdGVkIG1lbW9yeSAqLwo+ICt2b2lkIEVYUE9SVF9GVU5DKGdydWJf cmVsZWFzZV9wbGF0Zm9ybV9rZXlzdG9yZSkgKHZvaWQpOwo+ICtleHRlcm4gZ3J1Yl91aW50OF90 IEVYUE9SVF9WQVIoZ3J1Yl91c2VfcGxhdGZvcm1fa2V5c3RvcmUpOwo+ICtleHRlcm4gZ3J1Yl9w a3NfdCBFWFBPUlRfVkFSKGdydWJfcGxhdGZvcm1fa2V5c3RvcmUpOwo+ICsKPiArI2Vsc2UKPiAr Cj4gKyNkZWZpbmUgZ3J1Yl91c2VfcGxhdGZvcm1fa2V5c3RvcmUJMAo+ICtncnViX3Brc190IGdy dWJfcGxhdGZvcm1fa2V5c3RvcmUgPSB7TlVMTCwgTlVMTCwgMCwgMH07Cj4gK3ZvaWQgZ3J1Yl9y ZWxlYXNlX3BsYXRmb3JtX2tleXN0b3JlICh2b2lkKTsKPiArCj4gKyNlbmRpZgo+ICsKPiArI2Vu ZGlmCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpHcnVi LWRldmVsIG1haWxpbmcgbGlzdApHcnViLWRldmVsQGdudS5vcmcKaHR0cHM6Ly9saXN0cy5nbnUu b3JnL21haWxtYW4vbGlzdGluZm8vZ3J1Yi1kZXZlbAo=