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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 D9C6DC433F5 for ; Mon, 10 Oct 2022 11:10:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=isDO/CY03rPWE99moI1KzCEn/ACt/pU37fTpGl1Nwao=; b=xFSfYnlZQzZcCY pbbqRBCJUDfjC9DVa68o2EKR7vprm6spss2e0VWNjJCa+9/SH5P8vsV04xf7uUIFiat4s+ADx28IS WmsITh/6fBFuaJGjw1LOenyFxpxmwEcPaO0Yab6+fQuEpKSF2HQLdZbU1m4mfDKQMqTMbYro9Jbs3 tN06EzZTEL0cjzn/ecGaCA8vDMs3RWJQoGxUQ30RQgAvhwc7iJEWovjQoSlnOabLkyWBwT0B/nPgJ Oms4GrmHQVWsf05CB6w+DUlw1ngfJfErOKyTXEMjKTrnD42npy8hqNE8fFXW2HI0uC6YYspEYN8dq WHACxahjT9AtRwc8BJWQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ohqf5-000XYK-Jm; Mon, 10 Oct 2022 11:09:31 +0000 Received: from mx0a-0031df01.pphosted.com ([205.220.168.131]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ohqez-000XX8-De for linux-arm-kernel@lists.infradead.org; Mon, 10 Oct 2022 11:09:30 +0000 Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 29AAU4OE013854; Mon, 10 Oct 2022 11:08:44 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=message-id : date : mime-version : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding; s=qcppdkim1; bh=IVSuDitcRv6a5A8qJfXVyJL0dofj7C3ms39/W6aeP6A=; b=SacXd1Xl2A2c/hZualj9e62quD7Td616Pf3ZEz9WiBGxESZGP1JlTUz9NFsYLOVMmNU/ 7M3586xy75SnnqEJw9SsFDg3jCMDF1EwsPLX44xNBjA8ITJgV4LEI63cqN+IhoPooQ/6 4CpoAX9EtDn56C1mnpBytG1xIcfXUhXamv6Ub3d0HCWF4bmTPVgyJCloflS02/6Fxzha d8OPtXzPA4GqWEo/Bv50CU+/FsFlE/e0iVm7J4iIKCV2Qfs01JQDm58NKpVQFB0EFNV+ Lz9cibMhjX4wCjISnhnb6EgLFdoP8OF8O/u173CKWdivI116kuN46kVfk9xOVw5xhY3h mg== Received: from nalasppmta02.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3k32gekw30-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 10 Oct 2022 11:08:44 +0000 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com [10.47.209.196]) by NALASPPMTA02.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 29AB8hTL004542 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 10 Oct 2022 11:08:43 GMT Received: from [10.111.140.239] (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.29; Mon, 10 Oct 2022 04:08:38 -0700 Message-ID: <72c8a5bc-830d-25a9-0528-5d428dd9f163@quicinc.com> Date: Mon, 10 Oct 2022 12:08:24 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.1.2 Subject: Re: [PATCH v10 1/3] ipmi: ssif_bmc: Add SSIF BMC driver To: Quan Nguyen CC: , Randy Dunlap , , Corey Minyard , Andrew Jeffery , , , Phong Vo , , Wolfram Sang , Brendan Higgins , Rob Herring , Joel Stanley , Krzysztof Kozlowski , , Open Source Submission , , References: <20221004093106.1653317-1-quan@os.amperecomputing.com> <20221004093106.1653317-2-quan@os.amperecomputing.com> <5fbc5a54-60f2-fc0d-a4a1-839f28a4d8ba@quicinc.com> <48a5e252-9a1e-65e6-e8bf-add3d39a0286@os.amperecomputing.com> From: Graeme Gregory In-Reply-To: <48a5e252-9a1e-65e6-e8bf-add3d39a0286@os.amperecomputing.com> X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nalasex01a.na.qualcomm.com (10.47.209.196) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: gWX2cBOZ0hKiQqMPJQr1zHd4vk3k9aCq X-Proofpoint-ORIG-GUID: gWX2cBOZ0hKiQqMPJQr1zHd4vk3k9aCq X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-10-10_06,2022-10-10_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 spamscore=0 malwarescore=0 mlxlogscore=999 clxscore=1015 adultscore=0 lowpriorityscore=0 bulkscore=0 phishscore=0 priorityscore=1501 suspectscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2209130000 definitions=main-2210100067 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221010_040925_500251_13577819 X-CRM114-Status: GOOD ( 34.20 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Ck9uIDEwLzEwLzIwMjIgMDI6MjgsIFF1YW4gTmd1eWVuIHdyb3RlOgo+Cj4KPiBPbiAwNy8xMC8y MDIyIDIwOjI2LCBHcmFlbWUgR3JlZ29yeSB3cm90ZToKPj4KPj4gT24gMDQvMTAvMjAyMiAxMDoz MSwgUXVhbiBOZ3V5ZW4gd3JvdGU6Cj4+PiBUaGUgU01CdXMgc3lzdGVtIGludGVyZmFjZSAoU1NJ RikgSVBNSSBCTUMgZHJpdmVyIGNhbiBiZSB1c2VkIHRvIAo+Pj4gcGVyZm9ybQo+Pj4gaW4tYmFu ZCBJUE1JIGNvbW11bmljYXRpb24gd2l0aCB0aGVpciBob3N0IGluIG1hbmFnZW1lbnQgKEJNQykg c2lkZS4KPj4+Cj4+PiBUaGFua3MgRGFuIGZvciB0aGUgY29weV9mcm9tX3VzZXIoKSBmaXggaW4g dGhlIGxpbmsgYmVsb3cuCj4+Pgo+Pj4gTGluazogCj4+PiBodHRwczovL2xvcmUua2VybmVsLm9y Zy9saW51eC1hcm0ta2VybmVsLzIwMjIwMzEwMTE0MTE5LjEzNzM2LTQtcXVhbkBvcy5hbXBlcmVj b21wdXRpbmcuY29tLwo+Pj4gU2lnbmVkLW9mZi1ieTogUXVhbiBOZ3V5ZW4gPHF1YW5Ab3MuYW1w ZXJlY29tcHV0aW5nLmNvbT4KPj4KPj4gSSBoYXZlIGJlZW4gdGVzdGluZyB0aGlzIG9uIG91ciBo YXJkd2FyZSBhbmQgSSBkb24ndCBzZWVtIHRvIGJlIGFibGUgCj4+IHRvIGdldCB0aGlzIGRyaXZl ciB3b3JraW5nLiBJIHdhcyB1c2luZyBhbiBvbGRlciB2ZXJzaW9uLgo+Pgo+PiBJIGhhdmUgaGFj a2VkIHNzaWZicmlkZ2VkIHRvIGRlYWwgd2l0aCB0aGUgY2hhbmdlIGluIGxlbiBmcm9tIHU4IHRv IAo+PiB1bnNpZ25lZCBpbnQuCj4+Cj4+IEl0IHdvcmtzIGFzIGxvbmcgYXMgSSBvbmx5IGV2ZXIg c2VuZCBTU0lGIGNvbW1hbmRzLCBhbnkgYXR0ZW1wdCB0byAKPj4gcmVhZCBhIHJlc3BvbnNlIGNy YXNoZXMgdGhlIHN0YXRlIG1hY2hpbmUgYW5kIHRoZSBkcml2ZXIgbmV2ZXIgCj4+IHJlY292ZXJz LiBObyBmdXJ0aGVyIFNTSUYgY29tbXMgaXMgcG9zc2libGUhIChzbGF2ZSBkb2VzbnQgZXZlbiBB Q0sgCj4+IHdyaXRlcykuCj4+Cj4+IEEgY291cGxlIG9mIGNvbW1lbnRzIGJlbG93IG9uIHBvc3Np YmxlIHN0YXRlIG1hY2hpbmUgZXJyb3JzLgo+Pgo+PiBJdHMgcG9zc2libGUgSSBhbSBkb2luZyBz b21ldGhpbmcgd3JvbmchCj4+Cj4KPiBUaGFua3MgR3JhZW1lIGZvciB0aGUgdGVzdCBhbmQgdGhl IGNvbW1lbnRzLgo+Cj4gV2hhdCdzIHlvdXIgdGVzdGluZyBoYXJkd2FyZT8KPgo+IFRoaXMgd2Fz IHRlc3RlZCB3aXRoIEFzcGVlZCBhc3QyNTAwIGFuZCBhc3QyNjAwIHdpdGggdGhlIHBhdGNoIHNl cmllcyAKPiBbMV0gYmVsb3cgYXBwbGllZC4KPgo+IElmIHlvdSB1c2UgdGhlIHNhbWUgaHcsIGNv dWxkIHlvdSBwaWNrIHRoZSBzZXJpZXMgYW5kIHNlZSBpZiBhbnkgdGhpbmcgCj4gaW1wcm92ZSA/ Cj4KPiBbMV0gCj4gaHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvYWxsLzIwMjEwNjE2MDMxMDQ2LjIz MTctMS1xdWFuQG9zLmFtcGVyZWNvbXB1dGluZy5jb20vCj4KVGhhbmtzLCB0aGF0IHBhdGNoIHNl cmllcyBkb2VzIHN0b3AgdGhlIHN0YXRlIG1hY2hpbmUgY3Jhc2hpbmcuCgpJIGFtIHRlc3Rpbmcg b24gQVNUMjYwMEVWQiB3aXRoIEExIHJldiwgYnV0IHdlIGFsc28gaGF2ZSBvdXIgb3duIERDLVND TSAKd2l0aCBBMyBjaGlwLgoKUmVzcG9uc2VzIGFyZSBzdGlsbCBub3Qgd29ya2luZyBmb3IgbWUs IGJ1dCBJIHRoaW5rIHRoYXQgbWF5IGJlIGFuIGVycm9yIAppbiBteSBzc2lmYnJpZGdlZCBoYWNr cy4KCk9jdCAxMCAxMDo1NDo1NSBxY29tLWV2Yi1wcm90by1jY2YzN2QxOGVhMGMgc3NpZmJyaWRn ZWRbMzM1XTogUmVhZCBzc2lmIApyZXF1ZXN0IG1lc3NhZ2Ugd2l0aCBsZW49MTMgbmV0Zm49NDQg bHVuPTAgY21kPTIKCk9jdCAxMCAxMDo1NDo1NSBxY29tLWV2Yi1wcm90by1jY2YzN2QxOGVhMGMg aXBtaWRbMzEyXTogQm9vdENvZGU6IAowMDAwMDAwMDAwMDAwMDAwMDAKCk9jdCAxMCAxMDo1NDo1 NSBxY29tLWV2Yi1wcm90by1jY2YzN2QxOGVhMGMgc3NpZmJyaWRnZWRbMzM1XTogU2VuZCBzc2lm IApyZXNwb25kIG1lc3NhZ2Ugd2l0aCBsZW49NCBuZXRmbj00NSBsdW49MCBjbWQ9MiBjYz0wCgpP Y3QgMTAgMTA6NTQ6NTUgcWNvbS1ldmItcHJvdG8tY2NmMzdkMThlYTBjIGtlcm5lbDogaXBtaS1z c2lmLWhvc3QgCjAtMDAxMDogV2Fybjogb25fcmVhZF9yZXF1ZXN0ZWRfZXZlbnQgdW5leHBlY3Rl ZCBSRUFEIFJFUVVFU1RFRCBpbiAKc3RhdGU9U1NJRl9SRUFEWQoKT2N0IDEwIDEwOjU0OjU1IHFj b20tZXZiLXByb3RvLWNjZjM3ZDE4ZWEwYyBrZXJuZWw6IGlwbWktc3NpZi1ob3N0IAowLTAwMTA6 IFdhcm46IG9uX3N0b3BfZXZlbnQgdW5leHBlY3RlZCBTTEFWRSBTVE9QIGluIHN0YXRlPVNTSUZf QUJPUlRJTkcKCj4+PiAtLS0KPj4+IHYxMDoKPj4+IMKgwqAgKyBOb25lCj4+Pgo+Pj4gdjk6Cj4+ PiDCoMKgICsgRml4IGRlcGVuZGVuY2Ugd2l0aCBJMkMgc3Vic3lzdGVtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIAo+Pj4gW1JhbmR5XQo+Pj4g wqDCoCArIFJlbW92ZSB1c2VsZXNzIGVycm9yIGhhbmRsaW5nIHBhdGjCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIAo+Pj4gW0NKXQo+Pj4g wqDCoCArIFVwZGF0ZSBjb21tZW50IGZvciBTU0lGX0FCT1JUSU5HIHN0YXRlwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgCj4+PiBbQ0pdCj4+PiDCoMKg ICsgRml4ICJ1bmtub3duIHR5cGUgbmFtZSAtLXU4IsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgW2tlcm5lbCB0ZXN0IAo+Pj4gcm9ib3RdCj4+PiDCoMKgICsgRml4IHNz aWZfYm1jX3JlbW92ZSgpIHRvIHJldHVybiB2b2lkIHRvIGFsaWduIHdpdGggcmVjZW50IGtlcm5l bAo+Pj4gY2hhbmdlIFtRdWFuXQo+Pj4KPj4+IHY4Ogo+Pj4gwqDCoCArIERyb3BwZWQgc3NpZl9i bWMuaCBmaWxlIGFuZCBtb3ZlIGl0cyBjb250ZW50IHRvIHNzaWZfYm1jLmPCoMKgIAo+Pj4gW0Nv cmV5XQo+Pj4gwqDCoCArIEFkZCBzdHJ1Y3QgaXBtaV9zc2lmX21zZyB0byBpbmNsdWRlL3VhcGkv bGludXgvaXBtaV9zc2lmX2JtYy5oCj4+PiDCoMKgIGhlYWRlciBmaWxlIFtDb3JleV0KPj4+IMKg wqAgKyBVc2UgdW5zaWduZWQgaW50IGZvciBsZW4gZmllbGQgaW4gc3RydWN0IGlwbWlfc3NpZl9t c2fCoMKgwqDCoMKgwqAgCj4+PiBbQ29yZXldCj4+PiDCoMKgICsgQXZvaWQgdXNpbmcgcGFja2Vk IHN0cnVjdHVyZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgCj4+PiBbQ29yZXldCj4+PiDCoMKgICsgQWRkIGNvbW1lbnQgdG8g Y2xhcmlmeSB0aGUgbG9naWMgZmxvd8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgCj4+PiBbQ29yZXldCj4+PiDCoMKgICsgRml4IG11bHRpcGFydCByZWFkIGVu ZCB3aXRoIGxlbj0wIGlzc3VlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIAo+Pj4gW0NvcmV5XQo+Pj4gwqDCoCArIFJlZmFjdG9yIGNvZGUgaGFuZGxlIHRoZSB0b28g YmlnIHJlcXVlc3QgbWVzc2FnZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAKPj4+IFtDb3JleV0K Pj4+IMKgwqAgKyBGaXggY29kZSBpbmRlbnRhdGlvbiBpc3N1ZcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIAo+Pj4gW0Nv cmV5XQo+Pj4gwqDCoCArIENsZWFuIGJ1ZmZlciBiZWZvcmUgcmVjZWl2aW5nIHJlcXVlc3QgdG8g YXZvaWQgZ2FyYmFnZcKgwqDCoMKgwqDCoMKgIAo+Pj4gW1F1YW5dCj4+PiDCoMKgICsgRml4IHRo ZSBsaWNlbnNlIHRvIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHnCoMKgwqDC oMKgIAo+Pj4gW1F1YW5dCj4+Pgo+Pj4gdjc6Cj4+PiDCoMKgICsgUmVtb3ZlIHVubmVjY2Vzc2Fy eSBkZWxfdGltZXIoKSBpbiByZXNwb25zZV90aW1lb3V0KCnCoMKgwqDCoMKgwqDCoCAKPj4+IFtD b3JleV0KPj4+IMKgwqAgKyBDaGFuZ2UgY29tcGF0aWJsZSBzdHJpbmcgZnJvbSAiYW1wZXJlLHNz aWYtYm1jIiB0byAic3NpZi1ibWMiwqAgCj4+PiBbSmFlXQo+Pj4gwqDCoCArIEFkZCBNT0RVTEVf REVWSUNFX1RBQkxFKG9mLCBzc2lmX2JtY19tYXRjaCksIGZpeCBibGFuayBsaW5lwqDCoMKgIAo+ Pj4gW0phZV0KPj4+IMKgwqAgKyBEcm9wcGVkIHRoZSB1c2Ugb2Ygc3NpZl9tc2dfbGVuKCkgbWFj cm8sIHVzZSB0aGUgbGVuIGRpcmVjdGx5IAo+Pj4gW1F1YW5dCj4+PiDCoMKgICsgU29sdmUgcG9z c2libGUgaXNzdWUgaWYgYm90aCByZXNwb25zZSB0aW1lciBhbmQgc3NpZl9ibWNfd3JpdGUoKQo+ Pj4gwqDCoCBvY2N1cnJlZCBhdCB0aGUgc2FtZSB0aW1lwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgCj4+PiBb Q29yZXldCj4+PiDCoMKgICsgRml4IHdyb25nIHJldHVybiB0eXBlIG9mIHNzaWZfYm1jX3BvbGwo KcKgwqDCoMKgwqDCoMKgwqAgW2tlcm5lbCByb2JvdCAKPj4+IHRlc3RdCj4+PiDCoMKgICsgUmVm YWN0b3IgYW5kIGludHJvZHVjZSBzc2lmX3BhcnRfYnVmZmVyIHN0cnVjdCB0byByZXBsYWNlIHRo ZQo+Pj4gwqDCoCByZXNwb25zZV9idWYgdG8gbWFuYWdlIGVhY2ggc2VuZC9yZWNlaXZlIHBhcnQg b2Ygc3NpZsKgwqDCoMKgwqDCoMKgwqDCoMKgIAo+Pj4gW1F1YW5dCj4+PiDCoMKgICsgQ2hhbmdl IFNTSUZfQkFEX1NNQlVTIHN0YXRlIHRvIFNTSUZfQUJPUlRJTkcgc3RhdGXCoMKgwqDCoMKgwqDC oMKgwqDCoCAKPj4+IFtDb3JleV0KPj4+IMKgwqAgKyBTdXBwb3J0IGFib3J0IGZlYXR1cmUgdG8g c2tpcCB0aGUgY3VycmVudCBiYWQgcmVxdWVzdC9yZXNwb25zZSBhbmQKPj4+IMKgwqAgd2FpdCB1 bnRpbCBuZXh0IG5ldyByZXF1ZXN0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAKPj4+IFtDb3JleV0KPj4+IMKgwqAg KyBSZWZhY3RvciB0aGUgUEVDIGNhbGN1bGF0aW9uIHRvIGF2b2lkIHRoZSByZS1jYWxjdWxhdGUg dGhlIFBFQyBvbgo+Pj4gwqDCoCBlYWNoIEkyQ19TTEFWRV9XUklURV9SRUNFSVZFRCBldmVudMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIAo+ Pj4gW1F1YW5dCj4+PiDCoMKgICsgRml4IHRoZSB1c2Ugb2YgZXJyb3ItcHJvbmVkIGlkeMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgCj4+ PiBbQ29yZXldCj4+PiDCoMKgICsgRGVmZXIgdGhlIHRlc3QgZm9yIHZhbGlkIFNNQnVzIGNvbW1h bmQgdW50aWwgdGhlIHJlYWQvd3JpdGUgcGFydAo+Pj4gwqDCoCBpcyBkZXRlcm1pbmVkIFtRdWFu XQo+Pj4gwqDCoCArIENoYW5nZS9zcGxpdCB1bnN1cHBvcnRlZF9zbWJ1c19jbWQoKSB0bwo+Pj4g c3VwcG9ydGVkX1t3cml0ZXxyZWFkXV9jbWQoKSBbQ29yZXldCj4+PiDCoMKgICsgQWJvcnQgdGhl IHJlcXVlc3QgaWYgc29tZWhvdyBpdHMgc2l6ZSBleGNlZWRlZCAyNTUgYnl0ZXPCoMKgwqDCoMKg IAo+Pj4gW1F1YW5dCj4+Pgo+Pj4gdjY6Cj4+PiDCoMKgICsgRHJvcCB0aGUgdXNlIG9mIHNsYXZl X2VuYWJsZSgpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgCj4+PiBbV29sZnJhbV0KPj4+IMKgwqAgKyBNYWtlIGkyYy1hc3BlZWQgdG8gaXNz dWUgUnhDbWRMYXN0IGNvbW1hbmQgb24gYWxsCj4+PiDCoMKgIEkyQ19TTEFWRV9XUklURV9SRVFV RVNURUQgZXZlbnQgdG8gYXNzZXJ0IE5BSyB3aGVuIHNsYXZlIGJ1c3nCoMKgIAo+Pj4gW1F1YW5d Cj4+PiDCoMKgICsgTWFrZSBpMmMgc2xhdmUgdG8gcmV0dXJuIC1FQlVTWSB3aGVuIGl0J3MgYnVz ecKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAKPj4+IFtRdWFuXQo+Pj4gwqDCoCArIERy b3AgdGhlIGFib3J0aW5nIGZlYXR1cmUgYXMgcmV0dXJuIENvbXBsZXRpb24gQ29kZSAweEZGIG1h eSBzdG9wCj4+PiDCoMKgIGhvc3QgdG8gcmV0cnkgYW5kIG1ha2UgaXBtaV9zc2lmLnNvIGZhaWxz IHRvIGxvYWTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIAo+Pj4gW1F1YW5dCj4+PiDCoMKg ICsgQWRkIHRpbWVyIHRvIHJlY292ZXIgc2xhdmUgZnJvbSBidXN5IHN0YXRlIHdoZW4gbm8gcmVz cG9uc2XCoMKgIAo+Pj4gW1F1YW5dCj4+PiDCoMKgICsgQ2xlYW4gcmVxdWVzdC9yZXNwb25zZSBi dWZmZXIgYXBwcm9wcmlhdGVsecKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAK Pj4+IFtRdWFuXQo+Pj4gwqDCoCArIEFkZCBzb21lIG1pbm9yIGNoYW5nZSBvbiBlcnJvciBhbmQg d2FybmluZyBtZXNzYWdlc8KgwqDCoMKgwqDCoMKgwqDCoMKgIAo+Pj4gW1F1YW5dCj4+Pgo+Pj4g djU6Cj4+PiDCoMKgICsgTm9uZQo+Pj4KPj4+IHY0Ogo+Pj4gwqDCoCArIFNlbmQgcmVzcG9uc2Ug d2l0aCBDb21wbGV0aW9uIGNvZGUgMHhGRiB3aGVuIGFib3J0aW5nwqDCoMKgwqDCoMKgwqDCoCAK Pj4+IFtRdWFuXQo+Pj4gwqDCoCArIEFkZGVkIGJvdW5kaW5nIGNoZWNrIG9uIFNNQnVzIHdyaXRl cyBhbmQgdGhlIHdob2xlIHJlcXVlc3TCoMKgwqDCoCAKPj4+IFtEYW5dCj4+PiDCoMKgICsgTW92 ZWQgYnVmZmVyIHRvIGVuZCBvZiBzdHJ1Y3Qgc3NpZl9ibWNfY3R4IHRvIGF2b2lkIGNvbnRleHQK Pj4+IMKgwqDCoMKgIGNvcnJ1cHRpb24gaWYgc29tZWhvdyBidWZmZXIgaXMgd3JpdHRlbiBwYXN0 IHRoZSBlbmTCoMKgwqDCoMKgwqDCoMKgwqDCoCAKPj4+IFtEYW5dCj4+PiDCoMKgICsgUmV0dXJu IC1FSU5WQUwgaWYgdXNlcnNwYWNlIGJ1ZmZlciB0b28gc21hbGwsIGRvbnQKPj4+IMKgwqDCoMKg IHNpbGVuY2UgdHJ1bmNhdGUgW0NvcmV5LCBKb2VsXQo+Pj4gwqDCoCArIE5vdCBuZWNlc3Nhcnkg dG8gY2hlY2sgTk9OQkxPQ0sgaW4gbG9ja8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAKPj4+IFtDb3JleV0KPj4+IMKgwqAgKyBFbmZvcmNlIG9uZSB1c2VyIGF0IGEg dGltZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgCj4+PiBbSm9lbF0KPj4+IMKgwqAgKyBSZWplY3Qgd3JpdGUgd2l0 aCBpbnZhbGlkIHJlc3BvbnNlIGxlbmd0aCBmcm9tIHVzZXJzcGFjZcKgwqDCoMKgIAo+Pj4gW0Nv cmV5XQo+Pj4gwqDCoCArIEFkZCBzdGF0ZSBtYWNoaW5lcyBmb3IgYmV0dGVyIHNzaWYgYm1jIHN0 YXRlIGhhbmRsaW5nwqDCoMKgwqDCoMKgwqDCoCAKPj4+IFtRdWFuXQo+Pj4gwqDCoCArIERyb3Ag c3NpZl9ibWNfYXNwZWVkLmMgYW5kIG1ha2Ugc3NpZl9ibWMuYyBpcyBnZW5lcmljCj4+PiDCoMKg wqDCoCBTU0lGIEJNQyBkcml2ZXLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAK Pj4+IFtRdWFuXQo+Pj4gwqDCoCArIENoYW5nZSBjb21wYXRpYmxlIHN0cmluZyAiYXNwZWVkLGFz dDI1MDAtc3NpZi1ibWMiIHRvCj4+PiAiYW1wZXJlLHNzaWYtYm1jIiBbUXVhbl0KPj4+IMKgwqAg KyBBYm9ydCBjdXJyZW50IHJlcXVlc3Qgd2l0aCBpbnZhbGlkIFNNQnVzIHdyaXRlIG9yCj4+PiDC oMKgwqDCoCBpbnZhbGlkIGNvbW1hbmTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAKPj4+IFtRdWFuXQo+Pj4gwqDCoCArIEFib3J0IGFsbCByZXF1ZXN0IGlmIHRoZXJlIGlzIHBl bmRpbmcgcmVzcG9uc2XCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgCj4+PiBbUXVhbl0K Pj4+IMKgwqAgKyBDaGFuZ2VkIHZhbGlkYXRlX3BlYygpIHRvIHZhbGlkYXRlX3JlcXVlc3QoKcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgCj4+PiBbUXVhbl0KPj4+IMKgwqAgKyBB ZGQgdW5zdXBwb3J0ZWRfc21idXNfY21kKCkgdG8gaGFuZGxlIHVua25vd24gU01CdXMgY29tbWFu ZMKgwqAgCj4+PiBbUXVhbl0KPj4+IMKgwqAgKyBQcmludCBpbnRlcm5hbCBzdGF0ZSBzdHJpbmcg Zm9yIGVhc2UgaW52ZXN0aWdhdGluZyBpc3N1ZcKgwqDCoMKgwqAgCj4+PiBbUXVhbl0KPj4+IMKg wqAgKyBNb3ZlIHRvIFJFQURZIHN0YXRlIG9uIFNMQVZFX1NUT1AgZXZlbnTCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAKPj4+IFtRdWFuXQo+Pj4gwqDCoCArIENo YW5nZSBpbml0aWxpemVfdHJhbnNmZXIoKSB0byBwcm9jZXNzX3NtYnVzX2NtZCgpwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAKPj4+IFtRdWFuXQo+Pj4gwqDCoCArIEludHJvZHVjZSBmdW5jdGlvbnMg Zm9yIGVhY2ggc2xhdmUgZXZlbnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgCj4+PiBbUXVhbl0KPj4+Cj4+PiB2MzoKPj4+IMKgwqAgKyBSZW1vdmVkIHJlZHVuZGFu dCBsaWNlbnNlIGluZm/CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAKPj4+IFtKb2VsXQo+Pj4gwqDCoCArIFN3aXRjaGVkIHRvIHVz ZSB0cmFkaXRpb25hbCBpZi1lbHNlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAKPj4+IFtKb2VsXQo+Pj4gwqDCoCArIFJlbW92ZWQgdW51c2VkIHNz aWZfYm1jX2lvY3RsKCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgCj4+PiBbSm9lbF0KPj4+IMKgwqAgKyBNYWRlIGhhbmRsZV9yZXF1 ZXN0KCkvY29tcGxldGVfcmVzcG9uc2UoKSB0byByZXR1cm4gdm9pZMKgwqDCoMKgwqAgCj4+PiBb Sm9lbF0KPj4+IMKgwqAgKyBSZWZhY3RvcmVkIHNlbmRfc3NpZl9ibWNfcmVzcG9uc2UoKSBhbmQK Pj4+IHJlY2VpdmVfc3NpZl9ibWNfcmVxdWVzdCgpIFtDb3JleV0KPj4+IMKgwqAgKyBSZW1vdmVk IG11dGV4wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAKPj4+IFtDb3JleV0K Pj4+IMKgwqAgKyBVc2Ugc3Bpbl9sb2NrL3VubG9ja19pcnFzYXZlL3Jlc3RvcmUgaW4gY2FsbGJh Y2vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgCj4+PiBbQ29yZXldCj4+PiDCoMKgICsgUmVtb3Zl ZCB0aGUgdW5uZWNlc3NhcnkgbWVtc2V0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIAo+Pj4gW0NvcmV5XQo+Pj4gwqDCoCArIFN3aXRj aCB0byB1c2UgZGV2X2VycigpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgCj4+PiBbQ29yZXldCj4+Pgo+Pj4g djI6Cj4+PiDCoMKgICsgRml4ZWQgY29tcGlsaW5nIGVycm9yIHdpdGggQ09NUElMRV9URVNUIGZv ciBhcmMKPj4+IC0tLQo+Pj4gwqAgZHJpdmVycy9jaGFyL2lwbWkvS2NvbmZpZ8KgwqDCoMKgwqDC oMKgwqDCoCB8wqAgMTAgKwo+Pj4gwqAgZHJpdmVycy9jaGFyL2lwbWkvTWFrZWZpbGXCoMKgwqDC oMKgwqDCoMKgIHzCoMKgIDEgKwo+Pj4gwqAgZHJpdmVycy9jaGFyL2lwbWkvc3NpZl9ibWMuY8Kg wqDCoMKgwqDCoCB8IDg3MyAKPj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+PiDC oCBpbmNsdWRlL3VhcGkvbGludXgvaXBtaV9zc2lmX2JtYy5oIHzCoCAxOCArCj4+PiDCoCA0IGZp bGVzIGNoYW5nZWQsIDkwMiBpbnNlcnRpb25zKCspCj4+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9jaGFyL2lwbWkvc3NpZl9ibWMuYwo+Pj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGlu Y2x1ZGUvdWFwaS9saW51eC9pcG1pX3NzaWZfYm1jLmgKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9jaGFyL2lwbWkvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9pcG1pL0tjb25maWcKPj4+IGlu ZGV4IDM5NTY1Y2Y3NGIyYy4uYjZjMGQzNWZjMWE1IDEwMDY0NAo+Pj4gLS0tIGEvZHJpdmVycy9j aGFyL2lwbWkvS2NvbmZpZwo+Pj4gKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvS2NvbmZpZwo+Pj4g QEAgLTE2OSw2ICsxNjksMTYgQEAgY29uZmlnIEFTUEVFRF9CVF9JUE1JX0JNQwo+Pj4gwqDCoMKg wqDCoMKgwqAgZm91bmQgb24gQXNwZWVkIFNPQ3MgKEFTVDI0MDAgYW5kIEFTVDI1MDApLiBUaGUg ZHJpdmVyCj4+PiDCoMKgwqDCoMKgwqDCoCBpbXBsZW1lbnRzIHRoZSBCTUMgc2lkZSBvZiB0aGUg QlQgaW50ZXJmYWNlLgo+Pj4gK2NvbmZpZyBTU0lGX0lQTUlfQk1DCj4+PiArwqDCoMKgIHRyaXN0 YXRlICJTU0lGIElQTUkgQk1DIGRyaXZlciIKPj4+ICvCoMKgwqAgZGVwZW5kcyBvbiBJMkMgJiYg STJDX1NMQVZFCj4+PiArwqDCoMKgIGhlbHAKPj4+ICvCoMKgwqDCoMKgIFRoaXMgZW5hYmxlcyB0 aGUgSVBNSSBTTUJ1cyBzeXN0ZW0gaW50ZXJmYWNlIChTU0lGKSBhdCB0aGUKPj4+ICvCoMKgwqDC oMKgIG1hbmFnZW1lbnQgKEJNQykgc2lkZS4KPj4+ICsKPj4+ICvCoMKgwqDCoMKgIFRoZSBkcml2 ZXIgaW1wbGVtZW50cyB0aGUgQk1DIHNpZGUgb2YgdGhlIFNNQnVzIHN5c3RlbQo+Pj4gK8KgwqDC oMKgwqAgaW50ZXJmYWNlIChTU0lGKS4KPj4+ICsKPj4+IMKgIGNvbmZpZyBJUE1CX0RFVklDRV9J TlRFUkZBQ0UKPj4+IMKgwqDCoMKgwqAgdHJpc3RhdGUgJ0lQTUIgSW50ZXJmYWNlIGhhbmRsZXIn Cj4+PiDCoMKgwqDCoMKgIGRlcGVuZHMgb24gSTJDCj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9j aGFyL2lwbWkvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvaXBtaS9NYWtlZmlsZQo+Pj4gaW5kZXgg N2NlNzkwZWZhZDkyLi5jYjYxMzhiOGRlZDkgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2NoYXIv aXBtaS9NYWtlZmlsZQo+Pj4gKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvTWFrZWZpbGUKPj4+IEBA IC0zMCwzICszMCw0IEBAIG9iai0kKENPTkZJR19BU1BFRURfQlRfSVBNSV9CTUMpICs9IGJ0LWJt Yy5vCj4+PiDCoCBvYmotJChDT05GSUdfQVNQRUVEX0tDU19JUE1JX0JNQykgKz0ga2NzX2JtY19h c3BlZWQubwo+Pj4gwqAgb2JqLSQoQ09ORklHX05QQ003WFhfS0NTX0lQTUlfQk1DKSArPSBrY3Nf Ym1jX25wY203eHgubwo+Pj4gwqAgb2JqLSQoQ09ORklHX0lQTUJfREVWSUNFX0lOVEVSRkFDRSkg Kz0gaXBtYl9kZXZfaW50Lm8KPj4+ICtvYmotJChDT05GSUdfU1NJRl9JUE1JX0JNQykgKz0gc3Np Zl9ibWMubwo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL3NzaWZfYm1jLmMgCj4+ PiBiL2RyaXZlcnMvY2hhci9pcG1pL3NzaWZfYm1jLmMKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmE3YmI0Yjk5MDAwZQo+Pj4gLS0tIC9kZXYvbnVsbAo+ Pj4gKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvc3NpZl9ibWMuYwo+Pj4gQEAgLTAsMCArMSw4NzMg QEAKPj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Cj4+PiArLyoK Pj4+ICsgKiBUaGUgZHJpdmVyIGZvciBCTUMgc2lkZSBvZiBTU0lGIGludGVyZmFjZQo+Pj4gKyAq Cj4+PiArICogQ29weXJpZ2h0IChjKSAyMDIyLCBBbXBlcmUgQ29tcHV0aW5nIExMQwo+Pj4gKyAq Cj4+PiArICovCj4+PiArCj4+PiArI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+Pj4gKyNpbmNsdWRl IDxsaW51eC9taXNjZGV2aWNlLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+Pj4g KyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvcG9sbC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9z Y2hlZC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51 eC9zcGlubG9jay5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgo+Pj4gKyNpbmNsdWRl IDxsaW51eC9qaWZmaWVzLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2lwbWlfc3NpZl9ibWMuaD4K Pj4+ICsKPj4+ICsjZGVmaW5lIERFVklDRV9OQU1FICJpcG1pLXNzaWYtaG9zdCIKPj4+ICsKPj4+ ICsjZGVmaW5lIEdFVF84QklUX0FERFIoYWRkcl83Yml0KcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAoKChhZGRyXzdiaXQpIDw8IDEpIAo+Pj4gJiAweGZmKQo+Pj4gKwo+Pj4gKy8qIEEg c3RhbmRhcmQgU01CdXMgVHJhbnNhY3Rpb24gaXMgbGltaXRlZCB0byAzMiBkYXRhIGJ5dGVzICov Cj4+PiArI2RlZmluZSBNQVhfUEFZTE9BRF9QRVJfVFJBTlNBQ1RJT07CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgMzIKPj4+ICsvKiBUcmFuc2FjdGlvbiBpbmNsdWRlcyB0aGUgYWRkcmVzcywgdGhl IGNvbW1hbmQsIHRoZSBsZW5ndGggYW5kIAo+Pj4gdGhlIFBFQyBieXRlICovCj4+PiArI2RlZmlu ZSBNQVhfVFJBTlNBQ1RJT04gKE1BWF9QQVlMT0FEX1BFUl9UUkFOU0FDVElPTiArIDQpCj4+PiAr Cj4+PiArI2RlZmluZSBNQVhfSVBNSV9EQVRBX1BFUl9TVEFSVF9UUkFOU0FDVElPTsKgwqDCoMKg IDMwCj4+PiArI2RlZmluZSBNQVhfSVBNSV9EQVRBX1BFUl9NSURETEVfVFJBTlNBQ1RJT07CoMKg wqAgMzEKPj4+ICsKPj4+ICsjZGVmaW5lIFNTSUZfSVBNSV9TSU5HTEVQQVJUX1dSSVRFwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgyCj4+PiArI2RlZmluZSBTU0lGX0lQTUlfU0lOR0xFUEFS VF9SRUFEwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDMKPj4+ICsjZGVmaW5lIFNTSUZf SVBNSV9NVUxUSVBBUlRfV1JJVEVfU1RBUlTCoMKgwqDCoMKgwqDCoMKgIDB4Ngo+Pj4gKyNkZWZp bmUgU1NJRl9JUE1JX01VTFRJUEFSVF9XUklURV9NSURETEXCoMKgwqDCoMKgwqDCoCAweDcKPj4+ ICsjZGVmaW5lIFNTSUZfSVBNSV9NVUxUSVBBUlRfV1JJVEVfRU5EwqDCoMKgwqDCoMKgwqDCoMKg wqAgMHg4Cj4+PiArI2RlZmluZSBTU0lGX0lQTUlfTVVMVElQQVJUX1JFQURfU1RBUlTCoMKgwqDC oMKgwqDCoMKgwqAgMHgzCj4+PiArI2RlZmluZSBTU0lGX0lQTUlfTVVMVElQQVJUX1JFQURfTUlE RExFwqDCoMKgwqDCoMKgwqDCoCAweDkKPj4+ICsKPj4+ICsvKgo+Pj4gKyAqIElQTUkgMi4wIFNw ZWMsIHNlY3Rpb24gMTIuNyBTU0lGIFRpbWluZywKPj4+ICsgKiBSZXF1ZXN0LXRvLVJlc3BvbnNl IFRpbWUgaXMgVDZtYXgoMjUwbXMpIC0gVDFtYXgoMjBtcykgLSAzbXMgPSAKPj4+IDIyN21zCj4+ PiArICogUmVjb3ZlciBzc2lmX2JtYyBmcm9tIGJ1c3kgc3RhdGUgaWYgaXQgdGFrZXMgdXAgdG8g NTAwbXMKPj4+ICsgKi8KPj4+ICsjZGVmaW5lIFJFU1BPTlNFX1RJTUVPVVTCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDUwMCAvKiBtcyAqLwo+Pj4gKwo+Pj4g K3N0cnVjdCBzc2lmX3BhcnRfYnVmZmVyIHsKPj4+ICvCoMKgwqAgdTggYWRkcmVzczsKPj4+ICvC oMKgwqAgdTggc21idXNfY21kOwo+Pj4gK8KgwqDCoCB1OCBsZW5ndGg7Cj4+PiArwqDCoMKgIHU4 IHBheWxvYWRbTUFYX1BBWUxPQURfUEVSX1RSQU5TQUNUSU9OXTsKPj4+ICvCoMKgwqAgdTggcGVj Owo+Pj4gK8KgwqDCoCB1OCBpbmRleDsKPj4+ICt9Owo+Pj4gKwo+Pj4gKy8qCj4+PiArICogU1NJ RiBpbnRlcm5hbCBzdGF0ZXM6Cj4+PiArICrCoMKgIFNTSUZfUkVBRFnCoMKgwqDCoMKgwqDCoMKg IDB4MDAgOiBSZWFkeSBzdGF0ZQo+Pj4gKyAqwqDCoCBTU0lGX1NUQVJUwqDCoMKgwqDCoMKgwqDC oCAweDAxIDogU3RhcnQgc21idXMgdHJhbnNhY3Rpb24KPj4+ICsgKsKgwqAgU1NJRl9TTUJVU19D TUTCoMKgwqDCoCAweDAyIDogUmVjZWl2ZWQgU01CdXMgY29tbWFuZAo+Pj4gKyAqwqDCoCBTU0lG X1JFUV9SRUNWSU5HwqDCoCAweDAzIDogUmVjZWl2aW5nIHJlcXVlc3QKPj4+ICsgKsKgwqAgU1NJ Rl9SRVNfU0VORElOR8KgwqAgMHgwNCA6IFNlbmRpbmcgcmVzcG9uc2UKPj4+ICsgKsKgwqAgU1NJ Rl9BQk9SVElOR8KgwqDCoMKgwqAgMHgwNSA6IEFib3J0aW5nIHN0YXRlCj4+PiArICovCj4+PiAr ZW51bSBzc2lmX3N0YXRlIHsKPj4+ICvCoMKgwqAgU1NJRl9SRUFEWSwKPj4+ICvCoMKgwqAgU1NJ Rl9TVEFSVCwKPj4+ICvCoMKgwqAgU1NJRl9TTUJVU19DTUQsCj4+PiArwqDCoMKgIFNTSUZfUkVR X1JFQ1ZJTkcsCj4+PiArwqDCoMKgIFNTSUZfUkVTX1NFTkRJTkcsCj4+PiArwqDCoMKgIFNTSUZf QUJPUlRJTkcsCj4+PiArwqDCoMKgIFNTSUZfU1RBVEVfTUFYCj4+PiArfTsKPj4+ICsKPj4+ICtz dHJ1Y3Qgc3NpZl9ibWNfY3R4IHsKPj4+ICvCoMKgwqAgc3RydWN0IGkyY19jbGllbnTCoMKgwqDC oMKgwqAgKmNsaWVudDsKPj4+ICvCoMKgwqAgc3RydWN0IG1pc2NkZXZpY2XCoMKgwqDCoMKgwqAg bWlzY2RldjsKPj4+ICvCoMKgwqAgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBtc2dfaWR4Owo+Pj4gK8KgwqDCoCBib29swqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcGVjX3N1cHBvcnQ7Cj4+PiArwqDCoMKgIC8qIHNzaWYgYm1jIHNwaW5s b2NrICovCj4+PiArwqDCoMKgIHNwaW5sb2NrX3TCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBs b2NrOwo+Pj4gK8KgwqDCoCB3YWl0X3F1ZXVlX2hlYWRfdMKgwqDCoMKgwqDCoCB3YWl0X3F1ZXVl Owo+Pj4gK8KgwqDCoCB1OMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBydW5uaW5nOwo+Pj4gK8KgwqDCoCBlbnVtIHNzaWZfc3RhdGXCoMKgwqDCoMKgwqDCoMKgIHN0 YXRlOwo+Pj4gK8KgwqDCoCAvKiBUaW1lb3V0IHdhaXRpbmcgZm9yIHJlc3BvbnNlICovCj4+PiAr wqDCoMKgIHN0cnVjdCB0aW1lcl9saXN0wqDCoMKgwqDCoMKgIHJlc3BvbnNlX3RpbWVyOwo+Pj4g K8KgwqDCoCBib29swqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVzcG9u c2VfdGltZXJfaW5pdGVkOwo+Pj4gK8KgwqDCoCAvKiBGbGFnIHRvIGlkZW50aWZ5IGEgTXVsdGkt cGFydCBSZWFkIFRyYW5zYWN0aW9uICovCj4+PiArwqDCoMKgIGJvb2zCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpc19zaW5nbGVwYXJ0X3JlYWQ7Cj4+PiArwqDCoMKgIHU4 wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5ieXRlc19wcm9jZXNz ZWQ7Cj4+PiArwqDCoMKgIHU4wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJlbWFpbl9sZW47Cj4+PiArwqDCoMKgIHU4wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJlY3ZfbGVuOwo+Pj4gK8KgwqDCoCAvKiBCbG9jayBOdW1iZXIgb2Yg YSBNdWx0aS1wYXJ0IFJlYWQgVHJhbnNhY3Rpb24gKi8KPj4+ICvCoMKgwqAgdTjCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmxvY2tfbnVtOwo+Pj4gK8KgwqDCoCBi b29swqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVxdWVzdF9hdmFpbGFi bGU7Cj4+PiArwqDCoMKgIGJvb2zCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXNwb25zZV9pbl9wcm9ncmVzczsKPj4+ICvCoMKgwqAgYm9vbMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJ1c3k7Cj4+PiArwqDCoMKgIGJvb2zCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhYm9ydGluZzsKPj4+ICvCoMKgwqAgLyogQnVmZmVy IGZvciBTU0lGIFRyYW5zYWN0aW9uIHBhcnQqLwo+Pj4gK8KgwqDCoCBzdHJ1Y3Qgc3NpZl9wYXJ0 X2J1ZmZlciBwYXJ0X2J1ZjsKPj4+ICvCoMKgwqAgc3RydWN0IGlwbWlfc3NpZl9tc2fCoMKgwqAg cmVzcG9uc2U7Cj4+PiArwqDCoMKgIHN0cnVjdCBpcG1pX3NzaWZfbXNnwqDCoMKgIHJlcXVlc3Q7 Cj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBzc2lmX2JtY19jdHggKnRv X3NzaWZfYm1jKHN0cnVjdCBmaWxlICpmaWxlKQo+Pj4gK3sKPj4+ICvCoMKgwqAgcmV0dXJuIGNv bnRhaW5lcl9vZihmaWxlLT5wcml2YXRlX2RhdGEsIHN0cnVjdCBzc2lmX2JtY19jdHgsIAo+Pj4g bWlzY2Rldik7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBjaGFyICpzdGF0ZV90b19z dHJpbmcoZW51bSBzc2lmX3N0YXRlIHN0YXRlKQo+Pj4gK3sKPj4+ICvCoMKgwqAgc3dpdGNoIChz dGF0ZSkgewo+Pj4gK8KgwqDCoCBjYXNlIFNTSUZfUkVBRFk6Cj4+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuICJTU0lGX1JFQURZIjsKPj4+ICvCoMKgwqAgY2FzZSBTU0lGX1NUQVJUOgo+Pj4gK8Kg wqDCoMKgwqDCoMKgIHJldHVybiAiU1NJRl9TVEFSVCI7Cj4+PiArwqDCoMKgIGNhc2UgU1NJRl9T TUJVU19DTUQ6Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuICJTU0lGX1NNQlVTX0NNRCI7Cj4+ PiArwqDCoMKgIGNhc2UgU1NJRl9SRVFfUkVDVklORzoKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gIlNTSUZfUkVRX1JFQ1ZJTkciOwo+Pj4gK8KgwqDCoCBjYXNlIFNTSUZfUkVTX1NFTkRJTkc6 Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuICJTU0lGX1JFU19TRU5ESU5HIjsKPj4+ICvCoMKg wqAgY2FzZSBTU0lGX0FCT1JUSU5HOgo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAiU1NJRl9B Qk9SVElORyI7Cj4+PiArwqDCoMKgIGRlZmF1bHQ6Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu ICJTU0lGX1NUQVRFX1VOS05PV04iOwo+Pj4gK8KgwqDCoCB9Cj4+PiArfQo+Pj4gKwo+Pj4gKy8q IEhhbmRsZSBTU0lGIG1lc3NhZ2UgdGhhdCB3aWxsIGJlIHNlbnQgdG8gdXNlciAqLwo+Pj4gK3N0 YXRpYyBzc2l6ZV90IHNzaWZfYm1jX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2Vy ICpidWYsIAo+Pj4gc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCj4+PiArewo+Pj4gK8KgwqDC oCBzdHJ1Y3Qgc3NpZl9ibWNfY3R4ICpzc2lmX2JtYyA9IHRvX3NzaWZfYm1jKGZpbGUpOwo+Pj4g K8KgwqDCoCBzdHJ1Y3QgaXBtaV9zc2lmX21zZyBtc2c7Cj4+PiArwqDCoMKgIHVuc2lnbmVkIGxv bmcgZmxhZ3M7Cj4+PiArwqDCoMKgIHNzaXplX3QgcmV0Owo+Pj4gKwo+Pj4gK8KgwqDCoCBzcGlu X2xvY2tfaXJxc2F2ZSgmc3NpZl9ibWMtPmxvY2ssIGZsYWdzKTsKPj4+ICvCoMKgwqAgd2hpbGUg KCFzc2lmX2JtYy0+cmVxdWVzdF9hdmFpbGFibGUpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZzc2lmX2JtYy0+bG9jaywgZmxhZ3MpOwo+Pj4gK8KgwqDCoMKg wqDCoMKgIGlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHJldHVybiAtRUFHQUlOOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IHdhaXRf ZXZlbnRfaW50ZXJydXB0aWJsZShzc2lmX2JtYy0+d2FpdF9xdWV1ZSwKPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzaWZfYm1jLT5yZXF1 ZXN0X2F2YWlsYWJsZSk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiArwqDCoMKgwqDCoMKgwqAgc3Bpbl9sb2Nr X2lycXNhdmUoJnNzaWZfYm1jLT5sb2NrLCBmbGFncyk7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ ICvCoMKgwqAgaWYgKGNvdW50IDwgbWluX3Qoc3NpemVfdCwKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzaXplb2ZfZmllbGQoc3RydWN0IGlwbWlfc3NpZl9tc2csIGxlbikgKyAKPj4+ IHNzaWZfYm1jLT5yZXF1ZXN0LmxlbiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz aXplb2Yoc3RydWN0IGlwbWlfc3NpZl9tc2cpKSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIHNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnNzaWZfYm1jLT5sb2NrLCBmbGFncyk7Cj4+PiArwqDCoMKgwqDC oMKgwqAgcmV0ID0gLUVJTlZBTDsKPj4+ICvCoMKgwqAgfSBlbHNlIHsKPj4+ICvCoMKgwqDCoMKg wqDCoCBjb3VudCA9IG1pbl90KHNzaXplX3QsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzaXplb2ZfZmllbGQoc3RydWN0IGlwbWlfc3NpZl9tc2csIGxlbikgKyAKPj4+ IHNzaWZfYm1jLT5yZXF1ZXN0LmxlbiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHNpemVvZihzdHJ1Y3QgaXBtaV9zc2lmX21zZykpOwo+Pj4gK8KgwqDCoMKgwqDCoMKg IG1lbWNweSgmbXNnLCAmc3NpZl9ibWMtPnJlcXVlc3QsIGNvdW50KTsKPj4+ICvCoMKgwqDCoMKg wqDCoCBzc2lmX2JtYy0+cmVxdWVzdF9hdmFpbGFibGUgPSBmYWxzZTsKPj4+ICvCoMKgwqDCoMKg wqDCoCBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzc2lmX2JtYy0+bG9jaywgZmxhZ3MpOwo+Pj4g Kwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IGNvcHlfdG9fdXNlcihidWYsICZtc2csIGNvdW50 KTsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCByZXR1cm4gKHJldCA8IDApID8gcmV0 IDogY291bnQ7Cj4+PiArfQo+Pj4gKwo+Pj4gKy8qIEhhbmRsZSBTU0lGIG1lc3NhZ2UgdGhhdCBp cyB3cml0dGVuIGJ5IHVzZXIgKi8KPj4+ICtzdGF0aWMgc3NpemVfdCBzc2lmX2JtY193cml0ZShz dHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgCj4+PiAqYnVmLCBzaXplX3QgY291 bnQsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsb2ZmX3QgKnBwb3Mp Cj4+PiArewo+Pj4gK8KgwqDCoCBzdHJ1Y3Qgc3NpZl9ibWNfY3R4ICpzc2lmX2JtYyA9IHRvX3Nz aWZfYm1jKGZpbGUpOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgaXBtaV9zc2lmX21zZyBtc2c7Cj4+PiAr wqDCoMKgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+PiArwqDCoMKgIHNzaXplX3QgcmV0Owo+Pj4g Kwo+Pj4gK8KgwqDCoCBpZiAoY291bnQgPiBzaXplb2Yoc3RydWN0IGlwbWlfc3NpZl9tc2cpKQo+ Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRUlOVkFMOwo+Pj4gKwo+Pj4gK8KgwqDCoCBpZiAo Y29weV9mcm9tX3VzZXIoJm1zZywgYnVmLCBjb3VudCkpCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIC1FRkFVTFQ7Cj4+PiArCj4+PiArwqDCoMKgIGlmICghbXNnLmxlbiB8fCBjb3VudCA8IHNp emVvZl9maWVsZChzdHJ1Y3QgaXBtaV9zc2lmX21zZywgbGVuKSAKPj4+ICsgbXNnLmxlbikKPj4+ ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4+ICsKPj4+ICvCoMKgwqAgc3Bpbl9s b2NrX2lycXNhdmUoJnNzaWZfYm1jLT5sb2NrLCBmbGFncyk7Cj4+PiArwqDCoMKgIHdoaWxlIChz c2lmX2JtYy0+cmVzcG9uc2VfaW5fcHJvZ3Jlc3MpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZzc2lmX2JtYy0+bG9jaywgZmxhZ3MpOwo+Pj4gK8KgwqDCoMKg wqDCoMKgIGlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHJldHVybiAtRUFHQUlOOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IHdhaXRf ZXZlbnRfaW50ZXJydXB0aWJsZShzc2lmX2JtYy0+d2FpdF9xdWV1ZSwKPj4+ICsgIXNzaWZfYm1j LT5yZXNwb25zZV9pbl9wcm9ncmVzcyk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+PiArwqDCoMKgwqDCoMKgwqAg c3Bpbl9sb2NrX2lycXNhdmUoJnNzaWZfYm1jLT5sb2NrLCBmbGFncyk7Cj4+PiArwqDCoMKgIH0K Pj4+ICsKPj4+ICvCoMKgwqAgLyoKPj4+ICvCoMKgwqDCoCAqIFRoZSB3cml0ZSBtdXN0IGNvbXBs ZXRlIGJlZm9yZSB0aGUgcmVzcG9uc2UgdGltZW91dCBmaXJlZCwgCj4+PiBvdGhlcndpc2UKPj4+ ICvCoMKgwqDCoCAqIHRoZSByZXNwb25zZSBpcyBhYm9ydGVkIGFuZCB3YWl0IGZvciBuZXh0IHJl cXVlc3QKPj4+ICvCoMKgwqDCoCAqIFJldHVybiAtRUlOVkFMIGlmIHRoZSByZXNwb25zZSBpcyBh Ym9ydGVkCj4+PiArwqDCoMKgwqAgKi8KPj4+ICvCoMKgwqAgcmV0ID0gKHNzaWZfYm1jLT5yZXNw b25zZV90aW1lcl9pbml0ZWQpID8gMCA6IC1FSU5WQUw7Cj4+PiArwqDCoMKgIGlmIChyZXQpCj4+ PiArwqDCoMKgwqDCoMKgwqAgZ290byBleGl0Owo+Pj4gKwo+Pj4gK8KgwqDCoCBkZWxfdGltZXIo JnNzaWZfYm1jLT5yZXNwb25zZV90aW1lcik7Cj4+PiArwqDCoMKgIHNzaWZfYm1jLT5yZXNwb25z ZV90aW1lcl9pbml0ZWQgPSBmYWxzZTsKPj4+ICsKPj4+ICvCoMKgwqAgbWVtY3B5KCZzc2lmX2Jt Yy0+cmVzcG9uc2UsICZtc2csIGNvdW50KTsKPj4+ICvCoMKgwqAgc3NpZl9ibWMtPmlzX3Npbmds ZXBhcnRfcmVhZCA9IChtc2cubGVuIDw9IAo+Pj4gTUFYX1BBWUxPQURfUEVSX1RSQU5TQUNUSU9O KTsKPj4+ICsKPj4+ICvCoMKgwqAgc3NpZl9ibWMtPnJlc3BvbnNlX2luX3Byb2dyZXNzID0gdHJ1 ZTsKPj4+ICsKPj4+ICvCoMKgwqAgLyogc3NpZl9ibWMgbm90IGJ1c3kgKi8KPj4+ICvCoMKgwqAg c3NpZl9ibWMtPmJ1c3kgPSBmYWxzZTsKPj4+ICsKPj4+ICvCoMKgwqAgLyogQ2xlYW4gb2xkIHJl cXVlc3QgYnVmZmVyICovCj4+PiArwqDCoMKgIG1lbXNldCgmc3NpZl9ibWMtPnJlcXVlc3QsIDAs IHNpemVvZihzdHJ1Y3QgaXBtaV9zc2lmX21zZykpOwo+Pj4gK2V4aXQ6Cj4+PiArwqDCoMKgIHNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJnNzaWZfYm1jLT5sb2NrLCBmbGFncyk7Cj4+PiArCj4+PiAr wqDCoMKgIHJldHVybiAocmV0IDwgMCkgPyByZXQgOiBjb3VudDsKPj4+ICt9Cj4+PiArCj4+PiAr c3RhdGljIGludCBzc2lmX2JtY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxl ICpmaWxlKQo+Pj4gK3sKPj4+ICvCoMKgwqAgc3RydWN0IHNzaWZfYm1jX2N0eCAqc3NpZl9ibWMg PSB0b19zc2lmX2JtYyhmaWxlKTsKPj4+ICvCoMKgwqAgaW50IHJldCA9IDA7Cj4+PiArCj4+PiAr wqDCoMKgIHNwaW5fbG9ja19pcnEoJnNzaWZfYm1jLT5sb2NrKTsKPj4+ICvCoMKgwqAgaWYgKCFz c2lmX2JtYy0+cnVubmluZykKPj4+ICvCoMKgwqDCoMKgwqDCoCBzc2lmX2JtYy0+cnVubmluZyA9 IDE7Cj4+PiArwqDCoMKgIGVsc2UKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSAtRUJVU1k7Cj4+ PiArwqDCoMKgIHNwaW5fdW5sb2NrX2lycSgmc3NpZl9ibWMtPmxvY2spOwo+Pj4gKwo+Pj4gK8Kg wqDCoCByZXR1cm4gcmV0Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgX19wb2xsX3Qgc3NpZl9i bWNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKPj4+ICt7Cj4+PiAr wqDCoMKgIHN0cnVjdCBzc2lmX2JtY19jdHggKnNzaWZfYm1jID0gdG9fc3NpZl9ibWMoZmlsZSk7 Cj4+PiArwqDCoMKgIF9fcG9sbF90IG1hc2sgPSAwOwo+Pj4gKwo+Pj4gK8KgwqDCoCBwb2xsX3dh aXQoZmlsZSwgJnNzaWZfYm1jLT53YWl0X3F1ZXVlLCB3YWl0KTsKPj4+ICsKPj4+ICvCoMKgwqAg c3Bpbl9sb2NrX2lycSgmc3NpZl9ibWMtPmxvY2spOwo+Pj4gK8KgwqDCoCAvKiBUaGUgcmVxdWVz dCBpcyBhdmFpbGFibGUsIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiBjYW4gZ2V0IHRoZSAKPj4+IHJl cXVlc3QgKi8KPj4+ICvCoMKgwqAgaWYgKHNzaWZfYm1jLT5yZXF1ZXN0X2F2YWlsYWJsZSkKPj4+ ICvCoMKgwqDCoMKgwqDCoCBtYXNrIHw9IFBPTExJTjsKPj4+ICsKPj4+ICvCoMKgwqAgc3Bpbl91 bmxvY2tfaXJxKCZzc2lmX2JtYy0+bG9jayk7Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiBtYXNr Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHNzaWZfYm1jX3JlbGVhc2Uoc3RydWN0IGlu b2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCj4+PiArewo+Pj4gK8KgwqDCoCBzdHJ1Y3Qg c3NpZl9ibWNfY3R4ICpzc2lmX2JtYyA9IHRvX3NzaWZfYm1jKGZpbGUpOwo+Pj4gKwo+Pj4gK8Kg wqDCoCBzcGluX2xvY2tfaXJxKCZzc2lmX2JtYy0+bG9jayk7Cj4+PiArwqDCoMKgIHNzaWZfYm1j LT5ydW5uaW5nID0gMDsKPj4+ICvCoMKgwqAgc3Bpbl91bmxvY2tfaXJxKCZzc2lmX2JtYy0+bG9j ayk7Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICsvKgo+Pj4g KyAqIFN5c3RlbSBjYWxscyB0byBkZXZpY2UgaW50ZXJmYWNlIGZvciB1c2VyIGFwcHMKPj4+ICsg Ki8KPj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzc2lmX2JtY19mb3Bz ID0gewo+Pj4gK8KgwqDCoCAub3duZXLCoMKgwqDCoMKgwqDCoCA9IFRISVNfTU9EVUxFLAo+Pj4g K8KgwqDCoCAub3BlbsKgwqDCoMKgwqDCoMKgID0gc3NpZl9ibWNfb3BlbiwKPj4+ICvCoMKgwqAg LnJlYWTCoMKgwqDCoMKgwqDCoCA9IHNzaWZfYm1jX3JlYWQsCj4+PiArwqDCoMKgIC53cml0ZcKg wqDCoMKgwqDCoMKgID0gc3NpZl9ibWNfd3JpdGUsCj4+PiArwqDCoMKgIC5yZWxlYXNlwqDCoMKg ID0gc3NpZl9ibWNfcmVsZWFzZSwKPj4+ICvCoMKgwqAgLnBvbGzCoMKgwqDCoMKgwqDCoCA9IHNz aWZfYm1jX3BvbGwsCj4+PiArfTsKPj4+ICsKPj4+ICsvKiBDYWxsZWQgd2l0aCBzc2lmX2JtYy0+ bG9jayBoZWxkLiAqLwo+Pj4gK3N0YXRpYyB2b2lkIGNvbXBsZXRlX3Jlc3BvbnNlKHN0cnVjdCBz c2lmX2JtY19jdHggKnNzaWZfYm1jKQo+Pj4gK3sKPj4+ICvCoMKgwqAgLyogSW52YWxpZGF0ZSBy ZXNwb25zZSBpbiBidWZmZXIgdG8gZGVub3RlIGl0IGhhdmluZyBiZWVuIHNlbnQuICovCj4+PiAr wqDCoMKgIHNzaWZfYm1jLT5yZXNwb25zZS5sZW4gPSAwOwo+Pj4gK8KgwqDCoCBzc2lmX2JtYy0+ cmVzcG9uc2VfaW5fcHJvZ3Jlc3MgPSBmYWxzZTsKPj4+ICvCoMKgwqAgc3NpZl9ibWMtPm5ieXRl c19wcm9jZXNzZWQgPSAwOwo+Pj4gK8KgwqDCoCBzc2lmX2JtYy0+cmVtYWluX2xlbiA9IDA7Cj4+ PiArwqDCoMKgIHNzaWZfYm1jLT5idXN5ID0gZmFsc2U7Cj4+PiArwqDCoMKgIG1lbXNldCgmc3Np Zl9ibWMtPnBhcnRfYnVmLCAwLCBzaXplb2Yoc3RydWN0IHNzaWZfcGFydF9idWZmZXIpKTsKPj4+ ICvCoMKgwqAgd2FrZV91cF9hbGwoJnNzaWZfYm1jLT53YWl0X3F1ZXVlKTsKPj4+ICt9Cj4+PiAr Cj4+PiArc3RhdGljIHZvaWQgcmVzcG9uc2VfdGltZW91dChzdHJ1Y3QgdGltZXJfbGlzdCAqdCkK Pj4+ICt7Cj4+PiArwqDCoMKgIHN0cnVjdCBzc2lmX2JtY19jdHggKnNzaWZfYm1jID0gZnJvbV90 aW1lcihzc2lmX2JtYywgdCwgCj4+PiByZXNwb25zZV90aW1lcik7Cj4+PiArwqDCoMKgIHVuc2ln bmVkIGxvbmcgZmxhZ3M7Cj4+PiArCj4+PiArwqDCoMKgIHNwaW5fbG9ja19pcnFzYXZlKCZzc2lm X2JtYy0+bG9jaywgZmxhZ3MpOwo+Pj4gKwo+Pj4gK8KgwqDCoCAvKiBEbyBub3RoaW5nIGlmIHRo ZSByZXNwb25zZSBpcyBpbiBwcm9ncmVzcyAqLwo+Pj4gK8KgwqDCoCBpZiAoIXNzaWZfYm1jLT5y ZXNwb25zZV9pbl9wcm9ncmVzcykgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIC8qIFJlY292ZXIgc3Np Zl9ibWMgZnJvbSBidXN5ICovCj4+PiArwqDCoMKgwqDCoMKgwqAgc3NpZl9ibWMtPmJ1c3kgPSBm YWxzZTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBzc2lmX2JtYy0+cmVzcG9uc2VfdGltZXJfaW5pdGVk ID0gZmFsc2U7Cj4+PiArwqDCoMKgwqDCoMKgwqAgLyogU2V0IGFib3J0aW5nIGZsYWcgKi8KPj4+ ICvCoMKgwqDCoMKgwqDCoCBzc2lmX2JtYy0+YWJvcnRpbmcgPSB0cnVlOwo+Pj4gK8KgwqDCoCB9 Cj4+PiArCj4+PiArwqDCoMKgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNzaWZfYm1jLT5sb2Nr LCBmbGFncyk7Cj4+PiArfQo+Pj4gKwo+Pj4gKy8qIENhbGxlZCB3aXRoIHNzaWZfYm1jLT5sb2Nr IGhlbGQuICovCj4+PiArc3RhdGljIHZvaWQgaGFuZGxlX3JlcXVlc3Qoc3RydWN0IHNzaWZfYm1j X2N0eCAqc3NpZl9ibWMpCj4+PiArewo+Pj4gK8KgwqDCoCAvKiBzZXQgc3NpZl9ibWMgdG8gYnVz eSB3YWl0aW5nIGZvciByZXNwb25zZSAqLwo+Pj4gK8KgwqDCoCBzc2lmX2JtYy0+YnVzeSA9IHRy dWU7Cj4+PiArwqDCoMKgIC8qIFJlcXVlc3QgbWVzc2FnZSBpcyBhdmFpbGFibGUgdG8gcHJvY2Vz cyAqLwo+Pj4gK8KgwqDCoCBzc2lmX2JtYy0+cmVxdWVzdF9hdmFpbGFibGUgPSB0cnVlOwo+Pj4g K8KgwqDCoCAvKiBDbGVhbiBvbGQgcmVzcG9uc2UgYnVmZmVyICovCj4+PiArwqDCoMKgIG1lbXNl dCgmc3NpZl9ibWMtPnJlc3BvbnNlLCAwLCBzaXplb2Yoc3RydWN0IGlwbWlfc3NpZl9tc2cpKTsK Pj4+ICvCoMKgwqAgLyogVGhpcyBpcyB0aGUgbmV3IFJFQUQgcmVxdWVzdC4qLwo+Pj4gK8KgwqDC oCB3YWtlX3VwX2FsbCgmc3NpZl9ibWMtPndhaXRfcXVldWUpOwo+Pj4gKwo+Pj4gK8KgwqDCoCAv KiBBcm1lZCB0aW1lciB0byByZWNvdmVyIHNsYXZlIGZyb20gYnVzeSBzdGF0ZSBpbiBjYXNlIG9m IG5vIAo+Pj4gcmVzcG9uc2UgKi8KPj4+ICvCoMKgwqAgaWYgKCFzc2lmX2JtYy0+cmVzcG9uc2Vf dGltZXJfaW5pdGVkKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgdGltZXJfc2V0dXAoJnNzaWZfYm1j LT5yZXNwb25zZV90aW1lciwgcmVzcG9uc2VfdGltZW91dCwgMCk7Cj4+PiArwqDCoMKgwqDCoMKg wqAgc3NpZl9ibWMtPnJlc3BvbnNlX3RpbWVyX2luaXRlZCA9IHRydWU7Cj4+PiArwqDCoMKgIH0K Pj4+ICvCoMKgwqAgbW9kX3RpbWVyKCZzc2lmX2JtYy0+cmVzcG9uc2VfdGltZXIsIGppZmZpZXMg KyAKPj4+IG1zZWNzX3RvX2ppZmZpZXMoUkVTUE9OU0VfVElNRU9VVCkpOwo+Pj4gK30KPj4+ICsK Pj4+ICtzdGF0aWMgdm9pZCBjYWxjdWxhdGVfcmVzcG9uc2VfcGFydF9wZWMoc3RydWN0IHNzaWZf cGFydF9idWZmZXIgKnBhcnQpCj4+PiArewo+Pj4gK8KgwqDCoCB1OCBhZGRyID0gcGFydC0+YWRk cmVzczsKPj4+ICsKPj4+ICvCoMKgwqAgLyogUEVDIC0gU3RhcnQgUmVhZCBBZGRyZXNzICovCj4+ PiArwqDCoMKgIHBhcnQtPnBlYyA9IGkyY19zbWJ1c19wZWMoMCwgJmFkZHIsIDEpOwo+Pj4gK8Kg wqDCoCAvKiBQRUMgLSBTU0lGIENvbW1hbmQgKi8KPj4+ICvCoMKgwqAgcGFydC0+cGVjID0gaTJj X3NtYnVzX3BlYyhwYXJ0LT5wZWMsICZwYXJ0LT5zbWJ1c19jbWQsIDEpOwo+Pj4gK8KgwqDCoCAv KiBQRUMgLSBSZXN0YXJ0IFdyaXRlIEFkZHJlc3MgKi8KPj4+ICvCoMKgwqAgYWRkciA9IGFkZHIg fCAweDAxOwo+Pj4gK8KgwqDCoCBwYXJ0LT5wZWMgPSBpMmNfc21idXNfcGVjKHBhcnQtPnBlYywg JmFkZHIsIDEpOwo+Pj4gK8KgwqDCoCBwYXJ0LT5wZWMgPSBpMmNfc21idXNfcGVjKHBhcnQtPnBl YywgJnBhcnQtPmxlbmd0aCwgMSk7Cj4+PiArwqDCoMKgIGlmIChwYXJ0LT5sZW5ndGgpCj4+PiAr wqDCoMKgwqDCoMKgwqAgcGFydC0+cGVjID0gaTJjX3NtYnVzX3BlYyhwYXJ0LT5wZWMsIHBhcnQt PnBheWxvYWQsIAo+Pj4gcGFydC0+bGVuZ3RoKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZv aWQgc2V0X3NpbmdsZXBhcnRfcmVzcG9uc2VfYnVmZmVyKHN0cnVjdCBzc2lmX2JtY19jdHggCj4+ PiAqc3NpZl9ibWMpCj4+PiArewo+Pj4gK8KgwqDCoCBzdHJ1Y3Qgc3NpZl9wYXJ0X2J1ZmZlciAq cGFydCA9ICZzc2lmX2JtYy0+cGFydF9idWY7Cj4+PiArCj4+PiArwqDCoMKgIHBhcnQtPmFkZHJl c3MgPSBHRVRfOEJJVF9BRERSKHNzaWZfYm1jLT5jbGllbnQtPmFkZHIpOwo+Pj4gK8KgwqDCoCBw YXJ0LT5sZW5ndGggPSAodTgpc3NpZl9ibWMtPnJlc3BvbnNlLmxlbjsKPj4+ICsKPj4+ICvCoMKg wqAgLyogQ2xlYXIgdGhlIHJlc3QgdG8gMCAqLwo+Pj4gK8KgwqDCoCBtZW1zZXQocGFydC0+cGF5 bG9hZCArIHBhcnQtPmxlbmd0aCwgMCwgCj4+PiBNQVhfUEFZTE9BRF9QRVJfVFJBTlNBQ1RJT04g LSBwYXJ0LT5sZW5ndGgpOwo+Pj4gK8KgwqDCoCBtZW1jcHkoJnBhcnQtPnBheWxvYWRbMF0sICZz c2lmX2JtYy0+cmVzcG9uc2UucGF5bG9hZFswXSwgCj4+PiBwYXJ0LT5sZW5ndGgpOwo+Pj4gK30K Pj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBzZXRfbXVsdGlwYXJ0X3Jlc3BvbnNlX2J1ZmZlcihzdHJ1 Y3Qgc3NpZl9ibWNfY3R4IAo+Pj4gKnNzaWZfYm1jKQo+Pj4gK3sKPj4+ICvCoMKgwqAgc3RydWN0 IHNzaWZfcGFydF9idWZmZXIgKnBhcnQgPSAmc3NpZl9ibWMtPnBhcnRfYnVmOwo+Pj4gK8KgwqDC oCB1OCBwYXJ0X2xlbiA9IDA7Cj4+PiArCj4+PiArwqDCoMKgIHBhcnQtPmFkZHJlc3MgPSBHRVRf OEJJVF9BRERSKHNzaWZfYm1jLT5jbGllbnQtPmFkZHIpOwo+Pj4gK8KgwqDCoCBzd2l0Y2ggKHBh cnQtPnNtYnVzX2NtZCkgewo+Pj4gK8KgwqDCoCBjYXNlIFNTSUZfSVBNSV9NVUxUSVBBUlRfUkVB RF9TVEFSVDoKPj4+ICvCoMKgwqDCoMKgwqDCoCAvKgo+Pj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBS ZWFkIFN0YXJ0IGxlbmd0aCBpcyAzMiBieXRlcy4KPj4+ICvCoMKgwqDCoMKgwqDCoMKgICogUmVh ZCBTdGFydCB0cmFuc2ZlciBmaXJzdCAzMCBieXRlcyBvZiBJUE1JIHJlc3BvbnNlCj4+PiArwqDC oMKgwqDCoMKgwqDCoCAqIGFuZCAyIHNwZWNpYWwgY29kZSAweDAwLCAweDAxLgo+Pj4gK8KgwqDC oMKgwqDCoMKgwqAgKi8KPj4+ICvCoMKgwqDCoMKgwqDCoCBzc2lmX2JtYy0+bmJ5dGVzX3Byb2Nl c3NlZCA9IDA7Cj4+PiArwqDCoMKgwqDCoMKgwqAgc3NpZl9ibWMtPmJsb2NrX251bSA9IDA7Cj4+ PiArwqDCoMKgwqDCoMKgwqAgcGFydC0+bGVuZ3RoID0gTUFYX1BBWUxPQURfUEVSX1RSQU5TQUNU SU9OOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHBhcnRfbGVuID0gTUFYX0lQTUlfREFUQV9QRVJfU1RB UlRfVFJBTlNBQ1RJT047Cj4+PiArwqDCoMKgwqDCoMKgwqAgc3NpZl9ibWMtPnJlbWFpbl9sZW4g PSBzc2lmX2JtYy0+cmVzcG9uc2UubGVuIC0gcGFydF9sZW47Cj4+PiArCj4+PiArwqDCoMKgwqDC oMKgwqAgcGFydC0+cGF5bG9hZFswXSA9IDB4MDA7IC8qIFN0YXJ0IEZsYWcgKi8KPj4+ICvCoMKg wqDCoMKgwqDCoCBwYXJ0LT5wYXlsb2FkWzFdID0gMHgwMTsgLyogU3RhcnQgRmxhZyAqLwo+Pj4g Kwo+Pj4gK8KgwqDCoMKgwqDCoMKgIG1lbWNweSgmcGFydC0+cGF5bG9hZFsyXSwgJnNzaWZfYm1j LT5yZXNwb25zZS5wYXlsb2FkWzBdLCAKPj4+IHBhcnRfbGVuKTsKPj4+ICvCoMKgwqDCoMKgwqDC oCBicmVhazsKPj4+ICsKPj4+ICvCoMKgwqAgY2FzZSBTU0lGX0lQTUlfTVVMVElQQVJUX1JFQURf TUlERExFOgo+Pj4gK8KgwqDCoMKgwqDCoMKgIC8qCj4+PiArwqDCoMKgwqDCoMKgwqDCoCAqIElQ TUkgUkVBRCBNaWRkbGUgb3IgUkVBRCBFbmQgbWVzc2FnZXMgY2FuIGNhcnJ5IHVwIHRvIDMxIAo+ Pj4gYnl0ZXMKPj4+ICvCoMKgwqDCoMKgwqDCoMKgICogSVBNSSBkYXRhIHBsdXMgYmxvY2sgbnVt YmVyIGJ5dGUuCj4+PiArwqDCoMKgwqDCoMKgwqDCoCAqLwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlm IChzc2lmX2JtYy0+cmVtYWluX2xlbiA8PSAKPj4+IE1BWF9JUE1JX0RBVEFfUEVSX01JRERMRV9U UkFOU0FDVElPTikgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyoKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKiBUaGlzIGlzIFJFQUQgRW5kIG1lc3NhZ2UKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKsKgIFJldHVybiBsZW5ndGggaXMgdGhlIHJlbWFpbmluZyByZXNw b25zZSBkYXRhIGxlbmd0aAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqwqAgcGx1cyBi bG9jayBudW1iZXIKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKsKgIEJsb2NrIG51bWJl ciAweEZGIGlzIHRvIGluZGljYXRlIHRoaXMgaXMgbGFzdCBtZXNzYWdlCj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICoKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIENsZWFuIHRoZSBidWZmZXIgKi8KPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIG1lbXNldCgmcGFydC0+cGF5bG9hZFswXSwgMCwgTUFYX1BBWUxPQURf UEVSX1RSQU5TQUNUSU9OKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhcnQtPmxlbmd0 aCA9IHNzaWZfYm1jLT5yZW1haW5fbGVuICsgMTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHBhcnRfbGVuID0gc3NpZl9ibWMtPnJlbWFpbl9sZW47Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzc2lmX2JtYy0+YmxvY2tfbnVtID0gMHhGRjsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHBhcnQtPnBheWxvYWRbMF0gPSBzc2lmX2JtYy0+YmxvY2tfbnVtOwo+Pj4gK8KgwqDCoMKg wqDCoMKgIH0gZWxzZSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKgo+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqIFRoaXMgaXMgUkVBRCBNaWRkbGUgbWVzc2FnZQo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqwqAgUmVzcG9uc2UgbGVuZ3RoIGlzIHRoZSBtYXhpbXVt IFNNQlVTIHRyYW5zZmVyIGxlbmd0aAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqwqAg QmxvY2sgbnVtYmVyIGJ5dGUgaXMgaW5jcmVtZW50ZWQKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKiBSZXR1cm4gbGVuZ3RoIGlzIG1heGltdW0gU01CVVMgdHJhbnNmZXIgbGVuZ3RoCj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBwYXJ0LT5sZW5ndGggPSBNQVhfUEFZTE9BRF9QRVJfVFJBTlNBQ1RJT047Cj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBwYXJ0X2xlbiA9IE1BWF9JUE1JX0RBVEFfUEVSX01JRERMRV9UUkFO U0FDVElPTjsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhcnQtPnBheWxvYWRbMF0gPSBz c2lmX2JtYy0+YmxvY2tfbnVtOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NpZl9ibWMt PmJsb2NrX251bSsrOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqDCoMKg wqDCoCBzc2lmX2JtYy0+cmVtYWluX2xlbiAtPSBwYXJ0X2xlbjsKPj4+ICvCoMKgwqDCoMKgwqDC oCBtZW1jcHkoJnBhcnQtPnBheWxvYWRbMV0sIHNzaWZfYm1jLT5yZXNwb25zZS5wYXlsb2FkICsg Cj4+PiBzc2lmX2JtYy0+bmJ5dGVzX3Byb2Nlc3NlZCwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHBhcnRfbGVuKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+ICsKPj4+ ICvCoMKgwqAgZGVmYXVsdDoKPj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBEbyBub3QgZXhwZWN0IHRv IGdvIHRvIHRoaXMgY2FzZSAqLwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRldl9lcnIoJnNzaWZfYm1j LT5jbGllbnQtPmRldiwgIiVzOiBVbmV4cGVjdGVkIFNNQnVzIAo+Pj4gY29tbWFuZCAweCV4XG4i LAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18sIHBhcnQtPnNtYnVzX2NtZCk7 Cj4+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKg wqAgc3NpZl9ibWMtPm5ieXRlc19wcm9jZXNzZWQgKz0gcGFydF9sZW47Cj4+PiArfQo+Pj4gKwo+ Pj4gK3N0YXRpYyBib29sIHN1cHBvcnRlZF9yZWFkX2NtZCh1OCBjbWQpCj4+PiArewo+Pj4gK8Kg wqDCoCBpZiAoY21kID09IFNTSUZfSVBNSV9TSU5HTEVQQVJUX1JFQUQgfHwKPj4+ICvCoMKgwqDC oMKgwqDCoCBjbWQgPT0gU1NJRl9JUE1JX01VTFRJUEFSVF9SRUFEX1NUQVJUIHx8Cj4+PiArwqDC oMKgwqDCoMKgwqAgY21kID09IFNTSUZfSVBNSV9NVUxUSVBBUlRfUkVBRF9NSURETEUpCj4+PiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuIHRydWU7Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiBmYWxz ZTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGJvb2wgc3VwcG9ydGVkX3dyaXRlX2NtZCh1OCBj bWQpCj4+PiArewo+Pj4gK8KgwqDCoCBpZiAoY21kID09IFNTSUZfSVBNSV9TSU5HTEVQQVJUX1dS SVRFIHx8Cj4+PiArwqDCoMKgwqDCoMKgwqAgY21kID09IFNTSUZfSVBNSV9NVUxUSVBBUlRfV1JJ VEVfU1RBUlQgfHwKPj4+ICvCoMKgwqDCoMKgwqDCoCBjbWQgPT0gU1NJRl9JUE1JX01VTFRJUEFS VF9XUklURV9NSURETEUgfHwKPj4+ICvCoMKgwqDCoMKgwqDCoCBjbWQgPT0gU1NJRl9JUE1JX01V TFRJUEFSVF9XUklURV9FTkQpCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHRydWU7Cj4+PiAr Cj4+PiArwqDCoMKgIHJldHVybiBmYWxzZTsKPj4+ICt9Cj4+PiArCj4+PiArLyogUHJvY2VzcyB0 aGUgSVBNSSByZXNwb25zZSB0aGF0IHdpbGwgYmUgcmVhZCBieSBtYXN0ZXIgKi8KPj4+ICtzdGF0 aWMgdm9pZCBoYW5kbGVfcmVhZF9wcm9jZXNzZWQoc3RydWN0IHNzaWZfYm1jX2N0eCAqc3NpZl9i bWMsIHU4IAo+Pj4gKnZhbCkKPj4+ICt7Cj4+PiArwqDCoMKgIHN0cnVjdCBzc2lmX3BhcnRfYnVm ZmVyICpwYXJ0ID0gJnNzaWZfYm1jLT5wYXJ0X2J1ZjsKPj4+ICsKPj4+ICvCoMKgwqAgLyogbXNn X2lkeCBzdGFydCBmcm9tIDAgKi8KPj4+ICvCoMKgwqAgaWYgKHBhcnQtPmluZGV4IDwgcGFydC0+ bGVuZ3RoKQo+Pj4gK8KgwqDCoMKgwqDCoMKgICp2YWwgPSBwYXJ0LT5wYXlsb2FkW3BhcnQtPmlu ZGV4XTsKPj4+ICvCoMKgwqAgZWxzZSBpZiAocGFydC0+aW5kZXggPT0gcGFydC0+bGVuZ3RoICYm IHNzaWZfYm1jLT5wZWNfc3VwcG9ydCkKPj4+ICvCoMKgwqDCoMKgwqDCoCAqdmFsID0gcGFydC0+ cGVjOwo+Pj4gK8KgwqDCoCBlbHNlCj4+PiArwqDCoMKgwqDCoMKgwqAgKnZhbCA9IDA7Cj4+PiAr Cj4+PiArwqDCoMKgIHBhcnQtPmluZGV4Kys7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lk IGhhbmRsZV93cml0ZV9yZWNlaXZlZChzdHJ1Y3Qgc3NpZl9ibWNfY3R4ICpzc2lmX2JtYywgdTgg Cj4+PiAqdmFsKQo+Pj4gK3sKPj4+ICvCoMKgwqAgLyoKPj4+ICvCoMKgwqDCoCAqIFRoZSBtc2df aWR4IG11c3QgYmUgMSB3aGVuIGZpcnN0IGVudGVyIFNTSUZfUkVRX1JFQ1ZJTkcgc3RhdGUKPj4+ ICvCoMKgwqDCoCAqIEFuZCBpdCB3b3VsZCBuZXZlciBleGNlZWRlZCAzNiBieXRlcyBpbmNsdWRl ZCB0aGUgMzIgYnl0ZXMgCj4+PiBtYXggcGF5bG9hZCArCj4+PiArwqDCoMKgwqAgKiB0aGUgYWRk cmVzcyArIHRoZSBjb21tYW5kICsgdGhlIGxlbiBhbmQgdGhlIFBFQy4KPj4+ICvCoMKgwqDCoCAq Lwo+Pj4gK8KgwqDCoCBpZiAoc3NpZl9ibWMtPm1zZ19pZHggPCAxwqAgfHwgc3NpZl9ibWMtPm1z Z19pZHggPiBNQVhfVFJBTlNBQ1RJT04pCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4g Kwo+Pj4gK8KgwqDCoCBpZiAoc3NpZl9ibWMtPm1zZ19pZHggPT0gMSkgewo+Pj4gK8KgwqDCoMKg wqDCoMKgIHNzaWZfYm1jLT5wYXJ0X2J1Zi5sZW5ndGggPSAqdmFsOwo+Pj4gK8KgwqDCoMKgwqDC oMKgIHNzaWZfYm1jLT5wYXJ0X2J1Zi5pbmRleCA9IDA7Cj4+PiArwqDCoMKgIH0gZWxzZSB7Cj4+ PiArIHNzaWZfYm1jLT5wYXJ0X2J1Zi5wYXlsb2FkW3NzaWZfYm1jLT5wYXJ0X2J1Zi5pbmRleCsr XSA9ICp2YWw7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgc3NpZl9ibWMtPm1zZ19p ZHgrKzsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGJvb2wgdmFsaWRhdGVfcmVxdWVzdF9wYXJ0 KHN0cnVjdCBzc2lmX2JtY19jdHggKnNzaWZfYm1jKQo+Pj4gK3sKPj4+ICvCoMKgwqAgc3RydWN0 IHNzaWZfcGFydF9idWZmZXIgKnBhcnQgPSAmc3NpZl9ibWMtPnBhcnRfYnVmOwo+Pj4gK8KgwqDC oCBib29sIHJldCA9IHRydWU7Cj4+PiArwqDCoMKgIHU4IGNwZWM7Cj4+PiArwqDCoMKgIHU4IGFk ZHI7Cj4+PiArCj4+PiArwqDCoMKgIGlmIChwYXJ0LT5pbmRleCA9PSBwYXJ0LT5sZW5ndGgpIHsK Pj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBQRUMgaXMgbm90IGluY2x1ZGVkICovCj4+PiArwqDCoMKg wqDCoMKgwqAgc3NpZl9ibWMtPnBlY19zdXBwb3J0ID0gZmFsc2U7Cj4+PiArwqDCoMKgwqDCoMKg wqAgcmV0ID0gdHJ1ZTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGV4aXQ7Cj4+PiArwqDCoMKg IH0KPj4+ICsKPj4+ICvCoMKgwqAgaWYgKHBhcnQtPmluZGV4ICE9IHBhcnQtPmxlbmd0aCArIDEp IHsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBmYWxzZTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBn b3RvIGV4aXQ7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgLyogUEVDIGlzIGluY2x1 ZGVkICovCj4+PiArwqDCoMKgIHNzaWZfYm1jLT5wZWNfc3VwcG9ydCA9IHRydWU7Cj4+PiArwqDC oMKgIHBhcnQtPnBlYyA9IHBhcnQtPnBheWxvYWRbcGFydC0+bGVuZ3RoXTsKPj4+ICvCoMKgwqAg YWRkciA9IEdFVF84QklUX0FERFIoc3NpZl9ibWMtPmNsaWVudC0+YWRkcik7Cj4+PiArwqDCoMKg IGNwZWMgPSBpMmNfc21idXNfcGVjKDAsICZhZGRyLCAxKTsKPj4+ICvCoMKgwqAgY3BlYyA9IGky Y19zbWJ1c19wZWMoY3BlYywgJnBhcnQtPnNtYnVzX2NtZCwgMSk7Cj4+PiArwqDCoMKgIGNwZWMg PSBpMmNfc21idXNfcGVjKGNwZWMsICZwYXJ0LT5sZW5ndGgsIDEpOwo+Pj4gK8KgwqDCoCAvKgo+ Pj4gK8KgwqDCoMKgICogQXMgU01CdXMgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBhbGxvdyB0aGUg bGVuZ3RoCj4+PiArwqDCoMKgwqAgKiAoYnl0ZSBjb3VudCkgaW4gdGhlIFdyaXRlLUJsb2NrIHBy b3RvY29sIHRvIGJlIHplcm8uCj4+PiArwqDCoMKgwqAgKiBUaGVyZWZvcmUsIGl0IGlzIGlsbGVn YWwgdG8gaGF2ZSB0aGUgbGFzdCBNaWRkbGUKPj4+ICvCoMKgwqDCoCAqIHRyYW5zYWN0aW9uIGlu IHRoZSBzZXF1ZW5jZSBjYXJyeSAzMi1ieXRlIGFuZCBoYXZlCj4+PiArwqDCoMKgwqAgKiBhIGxl bmd0aCBvZiDigJgw4oCZIGluIHRoZSBFbmQgdHJhbnNhY3Rpb24uCj4+PiArwqDCoMKgwqAgKiBC dXQgc29tZSB1c2VycyBtYXkgdHJ5IHRvIHVzZSB0aGlzIHdheSBhbmQgd2Ugc2hvdWxkCj4+PiAr wqDCoMKgwqAgKiBwcmV2ZW50IHNzaWZfYm1jIGRyaXZlciBicm9rZW4gaW4gdGhpcyBjYXNlLgo+ Pj4gK8KgwqDCoMKgICovCj4+PiArwqDCoMKgIGlmIChwYXJ0LT5sZW5ndGgpCj4+PiArwqDCoMKg wqDCoMKgwqAgY3BlYyA9IGkyY19zbWJ1c19wZWMoY3BlYywgcGFydC0+cGF5bG9hZCwgcGFydC0+ bGVuZ3RoKTsKPj4+ICsKPj4+ICvCoMKgwqAgaWYgKGNwZWMgIT0gcGFydC0+cGVjKQo+Pj4gK8Kg wqDCoMKgwqDCoMKgIHJldCA9IGZhbHNlOwo+Pj4gKwo+Pj4gK2V4aXQ6Cj4+PiArwqDCoMKgIHJl dHVybiByZXQ7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIHByb2Nlc3NfcmVxdWVzdF9w YXJ0KHN0cnVjdCBzc2lmX2JtY19jdHggKnNzaWZfYm1jKQo+Pj4gK3sKPj4+ICvCoMKgwqAgc3Ry dWN0IHNzaWZfcGFydF9idWZmZXIgKnBhcnQgPSAmc3NpZl9ibWMtPnBhcnRfYnVmOwo+Pj4gK8Kg wqDCoCB1bnNpZ25lZCBpbnQgbGVuOwo+Pj4gKwo+Pj4gK8KgwqDCoCBzd2l0Y2ggKHBhcnQtPnNt YnVzX2NtZCkgewo+Pj4gK8KgwqDCoCBjYXNlIFNTSUZfSVBNSV9TSU5HTEVQQVJUX1dSSVRFOgo+ Pj4gK8KgwqDCoMKgwqDCoMKgIC8qIHNhdmUgdGhlIHdob2xlIHBhcnQgdG8gcmVxdWVzdCovCj4+ PiArwqDCoMKgwqDCoMKgwqAgc3NpZl9ibWMtPnJlcXVlc3QubGVuID0gcGFydC0+bGVuZ3RoOwo+ Pj4gK8KgwqDCoMKgwqDCoMKgIG1lbWNweShzc2lmX2JtYy0+cmVxdWVzdC5wYXlsb2FkLCBwYXJ0 LT5wYXlsb2FkLCAKPj4+IHBhcnQtPmxlbmd0aCk7Cj4+PiArCj4+PiArwqDCoMKgwqDCoMKgwqAg YnJlYWs7Cj4+PiArwqDCoMKgIGNhc2UgU1NJRl9JUE1JX01VTFRJUEFSVF9XUklURV9TVEFSVDoK Pj4+ICvCoMKgwqDCoMKgwqDCoCBzc2lmX2JtYy0+cmVxdWVzdC5sZW4gPSAwOwo+Pj4gKwo+Pj4g K8KgwqDCoMKgwqDCoMKgIGZhbGx0aHJvdWdoOwo+Pj4gK8KgwqDCoCBjYXNlIFNTSUZfSVBNSV9N VUxUSVBBUlRfV1JJVEVfTUlERExFOgo+Pj4gK8KgwqDCoCBjYXNlIFNTSUZfSVBNSV9NVUxUSVBB UlRfV1JJVEVfRU5EOgo+Pj4gK8KgwqDCoMKgwqDCoMKgIGxlbiA9IHNzaWZfYm1jLT5yZXF1ZXN0 LmxlbiArIHBhcnQtPmxlbmd0aDsKPj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBEbyB0aGUgYm91bmQg Y2hlY2sgaGVyZSwgbm90IGFsbG93IHRoZSByZXF1ZXN0IGxlbiAKPj4+IGV4Y2VlZCAyNTQgYnl0 ZXMgKi8KPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAobGVuID4gSVBNSV9TU0lGX1BBWUxPQURfTUFY KSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfd2Fybigmc3NpZl9ibWMtPmNsaWVu dC0+ZGV2LAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJXYXJuOiBSZXF1 ZXN0IGV4Y2VlZGVkIDI1NCBieXRlcywgYWJvcnRpbmciKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC8qIFJlcXVlc3QgdG9vIGxvbmcsIGFib3J0aW5nICovCj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzc2lmX2JtYy0+YWJvcnRpbmcgPcKgIHRydWU7Cj4+PiArwqDCoMKgwqDCoMKg wqAgfSBlbHNlIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1lbWNweShzc2lmX2JtYy0+ cmVxdWVzdC5wYXlsb2FkICsgc3NpZl9ibWMtPnJlcXVlc3QubGVuLAo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYXJ0LT5wYXlsb2FkLCBwYXJ0LT5sZW5ndGgpOwo+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NpZl9ibWMtPnJlcXVlc3QubGVuICs9IHBhcnQt Pmxlbmd0aDsKPj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7 Cj4+PiArwqDCoMKgIGRlZmF1bHQ6Cj4+PiArwqDCoMKgwqDCoMKgwqAgLyogRG8gbm90IGV4cGVj dCB0byBnbyB0byB0aGlzIGNhc2UgKi8KPj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKCZzc2lm X2JtYy0+Y2xpZW50LT5kZXYsICIlczogVW5leHBlY3RlZCBTTUJ1cyAKPj4+IGNvbW1hbmQgMHgl eFxuIiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCBwYXJ0LT5zbWJ1c19j bWQpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4gK8KgwqDCoCB9Cj4+PiArfQo+Pj4g Kwo+Pj4gK3N0YXRpYyB2b2lkIHByb2Nlc3Nfc21idXNfY21kKHN0cnVjdCBzc2lmX2JtY19jdHgg KnNzaWZfYm1jLCB1OCAqdmFsKQo+Pj4gK3sKPj4+ICvCoMKgwqAgLyogU01CVVMgY29tbWFuZCBj YW4gdmFyeSAoc2luZ2xlIG9yIG11bHRpLXBhcnQpICovCj4+PiArwqDCoMKgIHNzaWZfYm1jLT5w YXJ0X2J1Zi5zbWJ1c19jbWQgPSAqdmFsOwo+Pj4gK8KgwqDCoCBzc2lmX2JtYy0+bXNnX2lkeCA9 IDE7Cj4+PiArwqDCoMKgIG1lbXNldCgmc3NpZl9ibWMtPnBhcnRfYnVmLnBheWxvYWRbMF0sIDAs IAo+Pj4gTUFYX1BBWUxPQURfUEVSX1RSQU5TQUNUSU9OKTsKPj4+ICsKPj4+ICvCoMKgwqAgaWYg KCp2YWwgPT0gU1NJRl9JUE1JX1NJTkdMRVBBUlRfV1JJVEUgfHwgKnZhbCA9PSAKPj4+IFNTSUZf SVBNSV9NVUxUSVBBUlRfV1JJVEVfU1RBUlQpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCAvKgo+Pj4g K8KgwqDCoMKgwqDCoMKgwqAgKiBUaGUgcmVzcG9uc2UgbWF5YmUgbm90IGNvbWUgaW4tdGltZSwg Y2F1c2luZyBob3N0IFNTSUYgCj4+PiBkcml2ZXIKPj4+ICvCoMKgwqDCoMKgwqDCoMKgICogdG8g dGltZW91dCBhbmQgcmVzZW5kIGEgbmV3IHJlcXVlc3QuIEluIHN1Y2ggY2FzZSBjaGVjayBmb3IK Pj4+ICvCoMKgwqDCoMKgwqDCoMKgICogcGVuZGluZyByZXNwb25zZSBhbmQgY2xlYXIgaXQKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgICovCj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHNzaWZfYm1jLT5y ZXNwb25zZV9pbl9wcm9ncmVzcykKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbXBsZXRl X3Jlc3BvbnNlKHNzaWZfYm1jKTsKPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBUaGlzIGlz IG5ldyByZXF1ZXN0LCBmbGlwIGFib3J0aW5nIGZsYWcgaWYgc2V0ICovCj4+PiArwqDCoMKgwqDC oMKgwqAgaWYgKHNzaWZfYm1jLT5hYm9ydGluZykKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHNzaWZfYm1jLT5hYm9ydGluZyA9IGZhbHNlOwo+Pj4gK8KgwqDCoCB9Cj4+PiArfQo+Pj4gKwo+ Pj4gK3N0YXRpYyB2b2lkIG9uX3JlYWRfcmVxdWVzdGVkX2V2ZW50KHN0cnVjdCBzc2lmX2JtY19j dHggKnNzaWZfYm1jLCAKPj4+IHU4ICp2YWwpCj4+PiArewo+Pj4gK8KgwqDCoCBpZiAoc3NpZl9i bWMtPnN0YXRlID09IFNTSUZfUkVBRFkgfHwKPj4gSXMgdGhpcyBhY3R1YWxseSBjb3JyZWN0PyBU aGUgc3RhdGUgbWFjaGluZSBzZWVtcyB0byBzZXQgdGhpcyBhcyB0aGUgCj4+IGRlZmF1bHQgc3Rh dGUgYW5kIGluIG15IHRlc3Rpbmcgd2Ugc2VlbSB0byBhbHdheXMgcmVhY2ggaGVyZSB3aXRoIHRo ZSAKPj4gc3RhdGUgPT0gU1NJRl9SRUFEWT8KPgo+IFRoZSBJMkNfU0xBVkVfUkVBRF9SRVFVRVNU RUQgZXZlbnQgaXMgZXhwZWN0ZWQgdG8gY29tZSBvbiAKPiBTU0lGX1NNQlVTX0NNRCBzdGF0ZSB3 aGVyZSBTbGF2ZSBoYXMgYWxyZWFkeSByZWNlaXZlZCBhbmQgdmFsaWRhdGVkIAo+IHRoZSBTTUJ1 cyBjb21tYW5kLCBpbiB0aGlzIGNhc2UgaXMgdGhlIEkyQ19TTEFWRV9SRUFEX1JFUVVFU1RFRCBl dmVudCAKPiBpZiB0aGUgU01CdXMgY29tbWFuZCBpbmRlZWQgaXMgdGhlIFJFQUQgY29tbWFuZC4g WW91IGNhbiBzZWUgdGhlIGNoZWNrIAo+IHN1cHBvcnRlZF9yZWFkX2NtZCgpIGJlbG93Lgo+Cj4g SWYgU2xhdmUgc2VlIHRoZSBJMkNfU0xBVkVfUkVBRF9SRVFVRVNURUQgZXZlbnQgb24gb3RoZXIg c3RhdGVzLCBpdCAKPiB3aWxsIHRyYW5zaXRpb24gdG8gU1NJRl9BQk9SVElORyBzdGF0ZSB0aGF0 IGRpc2NhcmQgZXZlcnl0aGluZyB1bnRpbCAKPiB0aGVyZSBpcyBhIG5ldyB0cmFuc2FjdGlvbiBj b21lLgo+Cj4gT24gUkVBRCwgdGhlIHNlcXVlbmNlIG9mIFNsYXZlIGV2ZW50IHNob3VsZCBiZSBh cyBiZWxvdzoKPiBJMkNfU0xBVkVfV1JJVEVfUkVRVUVTVEVEIChhZGRyKSA9PiBJMkNfU0xBVkVf V1JJVEVfUkVDRUlWRUQgKFNNQnVzIAo+IGNtZCkgPT4gSTJDX1NMQVZFX1JFQURfUkVRVUVTVEVE IChTbGF2ZSBmZWVkIHRoZSBmaXJzdCBieXRlKSA9PiAKPiBJMkNfU0xBVkVfUkVBRF9QUk9DRVNT RUQgKFNsYXZlIDJuZCBieXRlKSA9PiAuLi4uID0+IEkyQ19TTEFWRV9TVE9QCj4KPj4+ICvCoMKg wqDCoMKgwqDCoCBzc2lmX2JtYy0+c3RhdGUgPT0gU1NJRl9TVEFSVCB8fAo+Pj4gK8KgwqDCoMKg wqDCoMKgIHNzaWZfYm1jLT5zdGF0ZSA9PSBTU0lGX1JFUV9SRUNWSU5HIHx8Cj4+PiArwqDCoMKg wqDCoMKgwqAgc3NpZl9ibWMtPnN0YXRlID09IFNTSUZfUkVTX1NFTkRJTkcpIHsKPj4+ICvCoMKg wqDCoMKgwqDCoCBkZXZfd2Fybigmc3NpZl9ibWMtPmNsaWVudC0+ZGV2LAo+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAiV2FybjogJXMgdW5leHBlY3RlZCBSRUFEIFJFUVVFU1RFRCBpbiBz dGF0ZT0lc1xuIiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19mdW5jX18sIHN0YXRl X3RvX3N0cmluZyhzc2lmX2JtYy0+c3RhdGUpKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBzc2lmX2Jt Yy0+c3RhdGUgPSBTU0lGX0FCT1JUSU5HOwo+Pj4gK8KgwqDCoMKgwqDCoMKgICp2YWwgPSAwOwo+ Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4+ICsKPj4+ICvCoMKgwqAgfSBlbHNlIGlmIChz c2lmX2JtYy0+c3RhdGUgPT0gU1NJRl9TTUJVU19DTUQpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBp ZiAoIXN1cHBvcnRlZF9yZWFkX2NtZChzc2lmX2JtYy0+cGFydF9idWYuc21idXNfY21kKSkgewo+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X3dhcm4oJnNzaWZfYm1jLT5jbGllbnQtPmRl diwgIldhcm46IFVua25vd24gU01CdXMgCj4+PiByZWFkIGNvbW1hbmQ9MHgleCIsCj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NpZl9ibWMtPnBhcnRfYnVmLnNtYnVzX2Nt ZCk7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzc2lmX2JtYy0+YWJvcnRpbmcgPSB0cnVl Owo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoc3Np Zl9ibWMtPmFib3J0aW5nKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NpZl9ibWMtPnN0 YXRlID0gU1NJRl9BQk9SVElORzsKPj4+ICvCoMKgwqDCoMKgwqDCoCBlbHNlCj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzc2lmX2JtYy0+c3RhdGUgPSBTU0lGX1JFU19TRU5ESU5HOwo+Pj4g K8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIHNzaWZfYm1jLT5tc2dfaWR4ID0gMDsKPj4+ICsK Pj4+ICvCoMKgwqAgLyogU2VuZCAwIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gc2VuZCAqLwo+Pj4g K8KgwqDCoCBpZiAoIXNzaWZfYm1jLT5yZXNwb25zZV9pbl9wcm9ncmVzcyB8fCBzc2lmX2JtYy0+ c3RhdGUgPT0gCj4+PiBTU0lGX0FCT1JUSU5HKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgKnZhbCA9 IDA7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiAr wqDCoMKgIGlmIChzc2lmX2JtYy0+aXNfc2luZ2xlcGFydF9yZWFkKQo+Pj4gK8KgwqDCoMKgwqDC oMKgIHNldF9zaW5nbGVwYXJ0X3Jlc3BvbnNlX2J1ZmZlcihzc2lmX2JtYyk7Cj4+PiArwqDCoMKg IGVsc2UKPj4+ICvCoMKgwqDCoMKgwqDCoCBzZXRfbXVsdGlwYXJ0X3Jlc3BvbnNlX2J1ZmZlcihz c2lmX2JtYyk7Cj4+PiArCj4+PiArwqDCoMKgIGNhbGN1bGF0ZV9yZXNwb25zZV9wYXJ0X3BlYygm c3NpZl9ibWMtPnBhcnRfYnVmKTsKPj4+ICvCoMKgwqAgc3NpZl9ibWMtPnBhcnRfYnVmLmluZGV4 ID0gMDsKPj4+ICvCoMKgwqAgKnZhbCA9IHNzaWZfYm1jLT5wYXJ0X2J1Zi5sZW5ndGg7Cj4+PiAr fQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIG9uX3JlYWRfcHJvY2Vzc2VkX2V2ZW50KHN0cnVjdCBz c2lmX2JtY19jdHggKnNzaWZfYm1jLCAKPj4+IHU4ICp2YWwpCj4+PiArewo+Pj4gK8KgwqDCoCBp ZiAoc3NpZl9ibWMtPnN0YXRlID09IFNTSUZfUkVBRFkgfHwKPj4gU2FtZSBjb21tZW50IGFzIGFi b3ZlPwo+Cj4gU2FtZSBoZXJlLCBJMkNfU0xBVkVfUkVBRF9QUk9DRVNTRUQgaXMgZXhwZWN0ZWQg dG8gY29tZSBhZnRlciB0aGUgCj4gSTJDX1NMQVZFX1JFQURfUkVRVUVTVEVEIG9yIG90aGVyIEky Q19TTEFWRV9SRUFEX1BST0NFU1NFRC4gaWU6IHdoZW4gCj4gdGhlIHN0YXRlIGlzIFNTSUZfUkVT X1NFTkRJTkcuCj4gSWYgaXQgY29tZXMgd2hlbiBTbGF2ZSBpbiBzdGF0ZXMgb3RoZXIgdGhhbiBT U0lGX1JFU19TRU5ESU5HLCB0aGUgCj4gU2xhdmUgd2lsbCB0cmFuc2l0aW9uIHRvIFNTSUZfQUJP UlRJTkcgc3RhdGUuCj4KPj4+ICvCoMKgwqDCoMKgwqDCoCBzc2lmX2JtYy0+c3RhdGUgPT0gU1NJ Rl9TVEFSVCB8fAo+Pj4gK8KgwqDCoMKgwqDCoMKgIHNzaWZfYm1jLT5zdGF0ZSA9PSBTU0lGX1JF UV9SRUNWSU5HIHx8Cj4+PiArwqDCoMKgwqDCoMKgwqAgc3NpZl9ibWMtPnN0YXRlID09IFNTSUZf U01CVVNfQ01EKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgZGV2X3dhcm4oJnNzaWZfYm1jLT5jbGll bnQtPmRldiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIldhcm46ICVzIHVuZXhwZWN0 ZWQgUkVBRCBQUk9DRVNTRUQgaW4gc3RhdGU9JXNcbiIsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIF9fZnVuY19fLCBzdGF0ZV90b19zdHJpbmcoc3NpZl9ibWMtPnN0YXRlKSk7Cj4+PiAr wqDCoMKgwqDCoMKgwqAgc3NpZl9ibWMtPnN0YXRlID0gU1NJRl9BQk9SVElORzsKPj4+ICvCoMKg wqDCoMKgwqDCoCAqdmFsID0gMDsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+PiArwqDC oMKgIH0KPj4+ICsKPj4+ICvCoMKgwqAgLyogU2VuZCAwIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8g c2VuZCAqLwo+Pj4gK8KgwqDCoCBpZiAoIXNzaWZfYm1jLT5yZXNwb25zZV9pbl9wcm9ncmVzcyB8 fCBzc2lmX2JtYy0+c3RhdGUgPT0gCj4+PiBTU0lGX0FCT1JUSU5HKSB7Cj4+PiArwqDCoMKgwqDC oMKgwqAgKnZhbCA9IDA7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4gK8KgwqDCoCB9 Cj4+PiArCj4+PiArwqDCoMKgIGhhbmRsZV9yZWFkX3Byb2Nlc3NlZChzc2lmX2JtYywgdmFsKTsK Pj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgb25fd3JpdGVfcmVxdWVzdGVkX2V2ZW50KHN0 cnVjdCBzc2lmX2JtY19jdHggKnNzaWZfYm1jLCAKPj4+IHU4ICp2YWwpCj4+PiArewo+Pj4gK8Kg wqDCoCBpZiAoc3NpZl9ibWMtPnN0YXRlID09IFNTSUZfUkVBRFkgfHwgc3NpZl9ibWMtPnN0YXRl ID09IAo+Pj4gU1NJRl9TTUJVU19DTUQpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBzc2lmX2JtYy0+ c3RhdGUgPSBTU0lGX1NUQVJUOwo+Pj4gKwo+Pj4gK8KgwqDCoCB9IGVsc2UgaWYgKHNzaWZfYm1j LT5zdGF0ZSA9PSBTU0lGX1NUQVJUIHx8Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3NpZl9i bWMtPnN0YXRlID09IFNTSUZfUkVRX1JFQ1ZJTkcgfHwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oCBzc2lmX2JtYy0+c3RhdGUgPT0gU1NJRl9SRVNfU0VORElORykgewo+Pj4gK8KgwqDCoMKgwqDC oMKgIGRldl93YXJuKCZzc2lmX2JtYy0+Y2xpZW50LT5kZXYsCj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICJXYXJuOiAlcyB1bmV4cGVjdGVkIFdSSVRFIFJFUVVFU1QgaW4gc3RhdGU9JXNc biIsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fZnVuY19fLCBzdGF0ZV90b19zdHJp bmcoc3NpZl9ibWMtPnN0YXRlKSk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgc3NpZl9ibWMtPnN0YXRl ID0gU1NJRl9BQk9SVElORzsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+PiArwqDCoMKg IH0KPj4+ICsKPj4+ICvCoMKgwqAgc3NpZl9ibWMtPm1zZ19pZHggPSAwOwo+Pj4gK8KgwqDCoCBz c2lmX2JtYy0+cGFydF9idWYuYWRkcmVzcyA9ICp2YWw7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRp YyB2b2lkIG9uX3dyaXRlX3JlY2VpdmVkX2V2ZW50KHN0cnVjdCBzc2lmX2JtY19jdHggKnNzaWZf Ym1jLCAKPj4+IHU4ICp2YWwpCj4+PiArewo+Pj4gK8KgwqDCoCBpZiAoc3NpZl9ibWMtPnN0YXRl ID09IFNTSUZfUkVBRFkgfHwKPj4+ICvCoMKgwqDCoMKgwqDCoCBzc2lmX2JtYy0+c3RhdGUgPT0g U1NJRl9SRVNfU0VORElORykgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIGRldl93YXJuKCZzc2lmX2Jt Yy0+Y2xpZW50LT5kZXYsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJXYXJuOiAlcyB1 bmV4cGVjdGVkIFdSSVRFIFJFQ0VJVkVEIGluIHN0YXRlPSVzXG4iLAo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgc3RhdGVfdG9fc3RyaW5nKHNzaWZfYm1jLT5zdGF0ZSkp Owo+Pj4gK8KgwqDCoMKgwqDCoMKgIHNzaWZfYm1jLT5zdGF0ZSA9IFNTSUZfQUJPUlRJTkc7Cj4+ PiArCj4+PiArwqDCoMKgIH0gZWxzZSBpZiAoc3NpZl9ibWMtPnN0YXRlID09IFNTSUZfU1RBUlQp IHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBzc2lmX2JtYy0+c3RhdGUgPSBTU0lGX1NNQlVTX0NNRDsK Pj4+ICsKPj4+ICvCoMKgwqAgfSBlbHNlIGlmIChzc2lmX2JtYy0+c3RhdGUgPT0gU1NJRl9TTUJV U19DTUQpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIXN1cHBvcnRlZF93cml0ZV9jbWQoc3Np Zl9ibWMtPnBhcnRfYnVmLnNtYnVzX2NtZCkpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGRldl93YXJuKCZzc2lmX2JtYy0+Y2xpZW50LT5kZXYsICJXYXJuOiBVbmtub3duIFNNQnVzIAo+ Pj4gd3JpdGUgY29tbWFuZD0weCV4IiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzc2lmX2JtYy0+cGFydF9idWYuc21idXNfY21kKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHNzaWZfYm1jLT5hYm9ydGluZyA9IHRydWU7Cj4+PiArwqDCoMKgwqDCoMKgwqAgfQo+ Pj4gKwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChzc2lmX2JtYy0+YWJvcnRpbmcpCj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzc2lmX2JtYy0+c3RhdGUgPSBTU0lGX0FCT1JUSU5HOwo+Pj4g K8KgwqDCoMKgwqDCoMKgIGVsc2UKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzaWZfYm1j LT5zdGF0ZSA9IFNTSUZfUkVRX1JFQ1ZJTkc7Cj4+PiArwqDCoMKgIH0KPj4+ICsKPj4+ICvCoMKg wqAgLyogVGhpcyBpcyByZXNwb25zZSBzZW5kaW5nIHN0YXRlICovCj4+PiArwqDCoMKgIGlmIChz c2lmX2JtYy0+c3RhdGUgPT0gU1NJRl9SRVFfUkVDVklORykKPj4+ICvCoMKgwqDCoMKgwqDCoCBo YW5kbGVfd3JpdGVfcmVjZWl2ZWQoc3NpZl9ibWMsIHZhbCk7Cj4+PiArwqDCoMKgIGVsc2UgaWYg KHNzaWZfYm1jLT5zdGF0ZSA9PSBTU0lGX1NNQlVTX0NNRCkKPj4+ICvCoMKgwqDCoMKgwqDCoCBw cm9jZXNzX3NtYnVzX2NtZChzc2lmX2JtYywgdmFsKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGlj IHZvaWQgb25fc3RvcF9ldmVudChzdHJ1Y3Qgc3NpZl9ibWNfY3R4ICpzc2lmX2JtYywgdTggKnZh bCkKPj4+ICt7Cj4+PiArwqDCoMKgIGlmIChzc2lmX2JtYy0+c3RhdGUgPT0gU1NJRl9SRUFEWSB8 fAo+Pj4gK8KgwqDCoMKgwqDCoMKgIHNzaWZfYm1jLT5zdGF0ZSA9PSBTU0lGX1NUQVJUIHx8Cj4+ PiArwqDCoMKgwqDCoMKgwqAgc3NpZl9ibWMtPnN0YXRlID09IFNTSUZfU01CVVNfQ01EIHx8Cj4+ PiArwqDCoMKgwqDCoMKgwqAgc3NpZl9ibWMtPnN0YXRlID09IFNTSUZfQUJPUlRJTkcpIHsKPj4+ ICvCoMKgwqDCoMKgwqDCoCBkZXZfd2Fybigmc3NpZl9ibWMtPmNsaWVudC0+ZGV2LAo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiV2FybjogJXMgdW5leHBlY3RlZCBTTEFWRSBTVE9QIGlu IHN0YXRlPSVzXG4iLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Z1bmNfXywgc3Rh dGVfdG9fc3RyaW5nKHNzaWZfYm1jLT5zdGF0ZSkpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHNzaWZf Ym1jLT5zdGF0ZSA9IFNTSUZfUkVBRFk7Cj4+PiArCj4+PiArwqDCoMKgIH0gZWxzZSBpZiAoc3Np Zl9ibWMtPnN0YXRlID09IFNTSUZfUkVRX1JFQ1ZJTkcpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBp ZiAodmFsaWRhdGVfcmVxdWVzdF9wYXJ0KHNzaWZfYm1jKSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgcHJvY2Vzc19yZXF1ZXN0X3BhcnQoc3NpZl9ibWMpOwo+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKHNzaWZfYm1jLT5wYXJ0X2J1Zi5zbWJ1c19jbWQgPT0gCj4+PiBTU0lG X0lQTUlfU0lOR0xFUEFSVF9XUklURSB8fAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzc2lmX2JtYy0+cGFydF9idWYuc21idXNfY21kID09IAo+Pj4gU1NJRl9JUE1JX01VTFRJ UEFSVF9XUklURV9FTkQpCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGhhbmRs ZV9yZXF1ZXN0KHNzaWZfYm1jKTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNzaWZfYm1j LT5zdGF0ZSA9IFNTSUZfUkVBRFk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICog QSBCTUMgdGhhdCByZWNlaXZlcyBhbiBpbnZhbGlkIHJlcXVlc3QgZHJvcCB0aGUgZGF0YSAKPj4+ IGZvciB0aGUgd3JpdGUKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiB0cmFuc2FjdGlv biBhbmQgYW55IGZ1cnRoZXIgdHJhbnNhY3Rpb25zIChyZWFkIG9yIAo+Pj4gd3JpdGUpIHVudGls Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogdGhlIG5leHQgdmFsaWQgcmVhZCBvciB3 cml0ZSBTdGFydCB0cmFuc2FjdGlvbiBpcyAKPj4+IHJlY2VpdmVkCj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICovCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKCZzc2lm X2JtYy0+Y2xpZW50LT5kZXYsICJFcnJvcjogaW52YWxpZCBwZWNcbiIpOwo+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3NpZl9ibWMtPmFib3J0aW5nID0gdHJ1ZTsKPj4+ICvCoMKgwqDCoMKg wqDCoCB9Cj4+PiArwqDCoMKgIH0gZWxzZSBpZiAoc3NpZl9ibWMtPnN0YXRlID09IFNTSUZfUkVT X1NFTkRJTkcpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoc3NpZl9ibWMtPmlzX3NpbmdsZXBh cnRfcmVhZCB8fCBzc2lmX2JtYy0+YmxvY2tfbnVtID09IAo+Pj4gMHhGRikKPj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIC8qIEludmFsaWRhdGUgcmVzcG9uc2UgYnVmZmVyIHRvIGRlbm90ZSBp dCBpcyBzZW50ICovCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb21wbGV0ZV9yZXNwb25z ZShzc2lmX2JtYyk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgc3NpZl9ibWMtPnN0YXRlID0gU1NJRl9S RUFEWTsKPj4+ICvCoMKgwqAgfQo+Pj4gKwo+Pj4gK8KgwqDCoCAvKiBSZXNldCBtZXNzYWdlIGlu ZGV4ICovCj4+PiArwqDCoMKgIHNzaWZfYm1jLT5tc2dfaWR4ID0gMDsKPj4+ICt9Cj4+PiArCj4+ PiArLyoKPj4+ICsgKiBDYWxsYmFjayBmdW5jdGlvbiB0byBoYW5kbGUgSTJDIHNsYXZlIGV2ZW50 cwo+Pj4gKyAqLwo+Pj4gK3N0YXRpYyBpbnQgc3NpZl9ibWNfY2Ioc3RydWN0IGkyY19jbGllbnQg KmNsaWVudCwgZW51bSAKPj4+IGkyY19zbGF2ZV9ldmVudCBldmVudCwgdTggKnZhbCkKPj4+ICt7 Cj4+PiArwqDCoMKgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+PiArwqDCoMKgIHN0cnVjdCBzc2lm X2JtY19jdHggKnNzaWZfYm1jID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Cj4+PiArwqDC oMKgIGludCByZXQgPSAwOwo+Pj4gKwo+Pj4gK8KgwqDCoCBzcGluX2xvY2tfaXJxc2F2ZSgmc3Np Zl9ibWMtPmxvY2ssIGZsYWdzKTsKPj4+ICsKPj4+ICvCoMKgwqAgc3dpdGNoIChldmVudCkgewo+ Pj4gK8KgwqDCoCBjYXNlIEkyQ19TTEFWRV9SRUFEX1JFUVVFU1RFRDoKPj4+ICvCoMKgwqDCoMKg wqDCoCBvbl9yZWFkX3JlcXVlc3RlZF9ldmVudChzc2lmX2JtYywgdmFsKTsKPj4+ICvCoMKgwqDC oMKgwqDCoCBicmVhazsKPj4+ICsKPj4+ICvCoMKgwqAgY2FzZSA6Cj4+PiArwqDCoMKgwqDCoMKg wqAgb25fd3JpdGVfcmVxdWVzdGVkX2V2ZW50KHNzaWZfYm1jLCB2YWwpOwo+Pj4gK8KgwqDCoMKg wqDCoMKgIGJyZWFrOwo+Pj4gKwo+Pj4gK8KgwqDCoCBjYXNlIEkyQ19TTEFWRV9SRUFEX1BST0NF U1NFRDoKPj4+ICvCoMKgwqDCoMKgwqDCoCBvbl9yZWFkX3Byb2Nlc3NlZF9ldmVudChzc2lmX2Jt YywgdmFsKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+ICsKPj4+ICvCoMKgwqAgY2Fz ZSBJMkNfU0xBVkVfV1JJVEVfUkVDRUlWRUQ6Cj4+PiArwqDCoMKgwqDCoMKgwqAgb25fd3JpdGVf cmVjZWl2ZWRfZXZlbnQoc3NpZl9ibWMsIHZhbCk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7 Cj4+PiArCj4+PiArwqDCoMKgIGNhc2UgSTJDX1NMQVZFX1NUT1A6Cj4+PiArwqDCoMKgwqDCoMKg wqAgb25fc3RvcF9ldmVudChzc2lmX2JtYywgdmFsKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBicmVh azsKPj4+ICsKPj4+ICvCoMKgwqAgZGVmYXVsdDoKPj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfd2Fy bigmc3NpZl9ibWMtPmNsaWVudC0+ZGV2LCAiV2FybjogVW5rbm93biBpMmMgc2xhdmUgCj4+PiBl dmVudFxuIik7Cj4+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+PiArwqDCoMKgIH0KPj4+ICsK Pj4+ICvCoMKgwqAgaWYgKCFzc2lmX2JtYy0+YWJvcnRpbmcgJiYgc3NpZl9ibWMtPmJ1c3kpCj4+ PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVCVVNZOwo+Pj4gKwo+Pj4gK8KgwqDCoCBzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZzc2lmX2JtYy0+bG9jaywgZmxhZ3MpOwo+Pj4gKwo+Pj4gK8KgwqDC oCByZXR1cm4gcmV0Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHNzaWZfYm1jX3Byb2Jl KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCAKPj4+IGkyY19kZXZpY2Vf aWQgKmlkKQo+Pj4gK3sKPj4+ICvCoMKgwqAgc3RydWN0IHNzaWZfYm1jX2N0eCAqc3NpZl9ibWM7 Cj4+PiArwqDCoMKgIGludCByZXQ7Cj4+PiArCj4+PiArwqDCoMKgIHNzaWZfYm1jID0gZGV2bV9r emFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKCpzc2lmX2JtYyksIAo+Pj4gR0ZQX0tFUk5FTCk7 Cj4+PiArwqDCoMKgIGlmICghc3NpZl9ibWMpCj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1F Tk9NRU07Cj4+PiArCj4+PiArwqDCoMKgIHNwaW5fbG9ja19pbml0KCZzc2lmX2JtYy0+bG9jayk7 Cj4+PiArCj4+PiArwqDCoMKgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJnNzaWZfYm1jLT53YWl0X3F1 ZXVlKTsKPj4+ICvCoMKgwqAgc3NpZl9ibWMtPnJlcXVlc3RfYXZhaWxhYmxlID0gZmFsc2U7Cj4+ PiArwqDCoMKgIHNzaWZfYm1jLT5yZXNwb25zZV9pbl9wcm9ncmVzcyA9IGZhbHNlOwo+Pj4gK8Kg wqDCoCBzc2lmX2JtYy0+YnVzeSA9IGZhbHNlOwo+Pj4gK8KgwqDCoCBzc2lmX2JtYy0+cmVzcG9u c2VfdGltZXJfaW5pdGVkID0gZmFsc2U7Cj4+PiArCj4+PiArwqDCoMKgIC8qIFJlZ2lzdGVyIG1p c2MgZGV2aWNlIGludGVyZmFjZSAqLwo+Pj4gK8KgwqDCoCBzc2lmX2JtYy0+bWlzY2Rldi5taW5v ciA9IE1JU0NfRFlOQU1JQ19NSU5PUjsKPj4+ICvCoMKgwqAgc3NpZl9ibWMtPm1pc2NkZXYubmFt ZSA9IERFVklDRV9OQU1FOwo+Pj4gK8KgwqDCoCBzc2lmX2JtYy0+bWlzY2Rldi5mb3BzID0gJnNz aWZfYm1jX2ZvcHM7Cj4+PiArwqDCoMKgIHNzaWZfYm1jLT5taXNjZGV2LnBhcmVudCA9ICZjbGll bnQtPmRldjsKPj4+ICvCoMKgwqAgcmV0ID0gbWlzY19yZWdpc3Rlcigmc3NpZl9ibWMtPm1pc2Nk ZXYpOwo+Pj4gK8KgwqDCoCBpZiAocmV0KQo+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7 Cj4+PiArCj4+PiArwqDCoMKgIHNzaWZfYm1jLT5jbGllbnQgPSBjbGllbnQ7Cj4+PiArwqDCoMKg IHNzaWZfYm1jLT5jbGllbnQtPmZsYWdzIHw9IEkyQ19DTElFTlRfU0xBVkU7Cj4+PiArCj4+PiAr wqDCoMKgIC8qIFJlZ2lzdGVyIEkyQyBzbGF2ZSAqLwo+Pj4gK8KgwqDCoCBpMmNfc2V0X2NsaWVu dGRhdGEoY2xpZW50LCBzc2lmX2JtYyk7Cj4+PiArwqDCoMKgIHJldCA9IGkyY19zbGF2ZV9yZWdp c3RlcihjbGllbnQsIHNzaWZfYm1jX2NiKTsKPj4+ICvCoMKgwqAgaWYgKHJldCkKPj4+ICvCoMKg wqDCoMKgwqDCoCBtaXNjX2RlcmVnaXN0ZXIoJnNzaWZfYm1jLT5taXNjZGV2KTsKPj4+ICsKPj4+ ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgc3NpZl9i bWNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCj4+PiArewo+Pj4gK8KgwqDCoCBz dHJ1Y3Qgc3NpZl9ibWNfY3R4ICpzc2lmX2JtYyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQp Owo+Pj4gKwo+Pj4gK8KgwqDCoCBpMmNfc2xhdmVfdW5yZWdpc3RlcihjbGllbnQpOwo+Pj4gK8Kg wqDCoCBtaXNjX2RlcmVnaXN0ZXIoJnNzaWZfYm1jLT5taXNjZGV2KTsKPj4+ICt9Cj4+PiArCj4+ PiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc3NpZl9ibWNfbWF0Y2hbXSA9IHsK Pj4+ICvCoMKgwqAgeyAuY29tcGF0aWJsZSA9ICJzc2lmLWJtYyIgfSwKPj4+ICvCoMKgwqAgeyB9 LAo+Pj4gK307Cj4+PiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc3NpZl9ibWNfbWF0Y2gpOwo+ Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzc2lmX2JtY19pZFtd ID0gewo+Pj4gK8KgwqDCoCB7IERFVklDRV9OQU1FLCAwIH0sCj4+PiArwqDCoMKgIHsgfSwKPj4+ ICt9Owo+Pj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzc2lmX2JtY19pZCk7Cj4+PiArCj4+ PiArc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNzaWZfYm1jX2RyaXZlciA9IHsKPj4+ICvCoMKg wqAgLmRyaXZlcsKgwqDCoMKgwqDCoMKgwqAgPSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgLm5hbWXC oMKgwqDCoMKgwqDCoMKgwqDCoCA9IERFVklDRV9OQU1FLAo+Pj4gK8KgwqDCoMKgwqDCoMKgIC5v Zl9tYXRjaF90YWJsZSA9IHNzaWZfYm1jX21hdGNoLAo+Pj4gK8KgwqDCoCB9LAo+Pj4gK8KgwqDC oCAucHJvYmXCoMKgwqDCoMKgwqDCoMKgwqAgPSBzc2lmX2JtY19wcm9iZSwKPj4+ICvCoMKgwqAg LnJlbW92ZcKgwqDCoMKgwqDCoMKgwqAgPSBzc2lmX2JtY19yZW1vdmUsCj4+PiArwqDCoMKgIC5p ZF90YWJsZcKgwqDCoMKgwqDCoCA9IHNzaWZfYm1jX2lkLAo+Pj4gK307Cj4+PiArCj4+PiArbW9k dWxlX2kyY19kcml2ZXIoc3NpZl9ibWNfZHJpdmVyKTsKPj4+ICsKPj4+ICtNT0RVTEVfQVVUSE9S KCJRdWFuIE5ndXllbiA8cXVhbkBvcy5hbXBlcmVjb21wdXRpbmcuY29tPiIpOwo+Pj4gK01PRFVM RV9BVVRIT1IoIkNodW9uZyBUcmFuIDxjaHVvbmdAb3MuYW1wZXJlY29tcHV0aW5nLmNvbT4iKTsK Pj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkxpbnV4IGRldmljZSBkcml2ZXIgb2YgdGhlIEJNQyBJ UE1JIFNTSUYgCj4+PiBpbnRlcmZhY2UuIik7Cj4+PiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+ Pj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pcG1pX3NzaWZfYm1jLmggCj4+PiBi L2luY2x1ZGUvdWFwaS9saW51eC9pcG1pX3NzaWZfYm1jLmgKPj4+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjFjNmE3NTNkYWQwOAo+Pj4gLS0tIC9kZXYvbnVs bAo+Pj4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lwbWlfc3NpZl9ibWMuaAo+Pj4gQEAgLTAs MCArMSwxOCBAQAo+Pj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkg V0lUSCBMaW51eC1zeXNjYWxsLW5vdGUqLwo+Pj4gKy8qCj4+PiArICogQ29weXJpZ2h0IChjKSAy MDIyLCBBbXBlcmUgQ29tcHV0aW5nIExMQy4KPj4+ICsgKi8KPj4+ICsKPj4+ICsjaWZuZGVmIF9V QVBJX0xJTlVYX0lQTUlfU1NJRl9CTUNfSAo+Pj4gKyNkZWZpbmUgX1VBUElfTElOVVhfSVBNSV9T U0lGX0JNQ19ICj4+PiArCj4+PiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4+PiArCj4+PiAr LyogTWF4IGxlbmd0aCBvZiBpcG1pIHNzaWYgbWVzc2FnZSBpbmNsdWRlZCBuZXRmbiBhbmQgY21k IGZpZWxkICovCj4+PiArI2RlZmluZSBJUE1JX1NTSUZfUEFZTE9BRF9NQVjCoMKgwqDCoMKgwqDC oMKgIDI1NAo+Pj4gK3N0cnVjdCBpcG1pX3NzaWZfbXNnIHsKPj4+ICvCoMKgwqAgdW5zaWduZWQg aW50IGxlbjsKPj4+ICvCoMKgwqAgX191OMKgwqDCoCBwYXlsb2FkW0lQTUlfU1NJRl9QQVlMT0FE X01BWF07Cj4+PiArfTsKPj4+ICsKPj4+ICsjZW5kaWYgLyogX1VBUElfTElOVVhfSVBNSV9TU0lG X0JNQ19IICovCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hcm0ta2VybmVsCg==