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 B1870C77B7C for ; Thu, 4 May 2023 06:21:09 +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-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:References:CC:To:From: 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=o7mdaNfc+ukP4yJIfZoCzpPrYYl82IA5o+8o6Ldr7GU=; b=CGzOxQHgbgaJUb vJrCtrdCgZtf1MtLqKWiewZeMGB9MSEc0jQGZlcwLUCUGsnMaY8Hrh4U6u8kkgUg/btZV9UOc2WsQ o8X2LxOxiyYDcTvcnfdCN5qh3gbcJElxJ/3BSxN8gQoCrOWBl5kWKZSqPqWbReM51KCrc/AQ+pM/m Kc7+6EyTwAto/FL79OhdL7kQ0ENJlmBDF80N6I0YAQzRUBdemVsH2Nfshabp9y9WrS5rMgkqcKNgc 4pktAPqcwMbgh4fnAohkcDDZAtU3HEU0vZjL7NZdGDYGDx/ghBivfLazbJ7uTfnI1PZLRK9F1/54E I6WL6RQXc99j75QJl4fA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1puSKm-006ju5-35; Thu, 04 May 2023 06:20:56 +0000 Received: from mx.sberdevices.ru ([45.89.227.171]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1puSKf-006jsQ-2b; Thu, 04 May 2023 06:20:54 +0000 Received: from s-lin-edge02.sberdevices.ru (localhost [127.0.0.1]) by mx.sberdevices.ru (Postfix) with ESMTP id 6DEE65FD02; Thu, 4 May 2023 09:20:41 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sberdevices.ru; s=mail; t=1683181241; bh=HTgYs3lMdUbVNGrKqzRx1gu2fx9DcAjcbL1fUgr4SB8=; h=Message-ID:Date:MIME-Version:Subject:From:To:Content-Type; b=lRvGXc5B9n0Tsn5jgORDMgmjKpvNk3+1Jg39xaTRAEjuY1Lug38dpWGf0EA+JCNuP gnNiFRT/HY/2Q+5zeG0FwN26s5nNq6cdgjRSyx9nOeFqY9xuOp1qLBuIzySm5eiaGp nkIuWPjeXgbcfeDLiFtLmVToPYFO4j8qznMmdfOyEId7FXI2KvdSy3yhhz1Q0hEq8Y fBIaQavlJyCp2fWvpRjHmQ3pZ5ptUg5QoiBCaeNlRupIQBsY0LiDkxEHUEydc8Xw2y +iZAgG9xF/00LyBTJuHN+P+7+cON16kglTZz8YTAXcWEae0JmFl+X7TdU5MXyfJrnS DZsMtoNPEiovw== Received: from S-MS-EXCH01.sberdevices.ru (S-MS-EXCH01.sberdevices.ru [172.16.1.4]) by mx.sberdevices.ru (Postfix) with ESMTP; Thu, 4 May 2023 09:20:39 +0300 (MSK) Message-ID: Date: Thu, 4 May 2023 09:16:12 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Subject: Re: [PATCH v1 1/5] mtd: rawnand: meson: fix NAND access for read/write Content-Language: en-US From: Arseniy Krasnov To: Liang Yang , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl , Jianxin Pan , Aml_yonghui.yu CC: , , , , , References: <20230412061700.1492474-1-AVKrasnov@sberdevices.ru> <20230412061700.1492474-2-AVKrasnov@sberdevices.ru> <889cf54e-584c-9bee-2106-633155897324@amlogic.com> <3f247cbe-2798-4871-82a5-5124142fdcc5@sberdevices.ru> <4f552f57-c31e-985c-82be-081dff38d377@sberdevices.ru> <68f3bea8-4b79-db48-172f-712dcabce65b@sberdevices.ru> <6c573ffd-55a1-6a39-1ca1-c2681e0e960d@amlogic.com> <44dd5bcc-2b98-d402-7e8f-5e2d4babf898@sberdevices.ru> <1f32ad9e-fe2f-1248-164f-a5d328b22942@amlogic.com> <592584e4-10e5-4f99-cef9-de417482a49d@sberdevices.ru> In-Reply-To: <592584e4-10e5-4f99-cef9-de417482a49d@sberdevices.ru> X-Originating-IP: [172.16.1.6] X-ClientProxiedBy: S-MS-EXCH01.sberdevices.ru (172.16.1.4) To S-MS-EXCH01.sberdevices.ru (172.16.1.4) X-KSMG-Rule-ID: 4 X-KSMG-Message-Action: clean X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiPhishing: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 1.1.2.30, bases: 2023/05/04 02:16:00 #21216024 X-KSMG-AntiVirus-Status: Clean, skipped X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230503_232050_717002_FA23FB16 X-CRM114-Status: GOOD ( 20.50 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org CgpPbiAyNi4wNC4yMDIzIDE3OjQ3LCBBcnNlbml5IEtyYXNub3Ygd3JvdGU6Cj4gCj4gCj4gT24g MjYuMDQuMjAyMyAxNToxNywgTGlhbmcgWWFuZyB3cm90ZToKPj4gSGkgQXJzZW5peSwKPj4KPj4g T24gMjAyMy80LzIwIDM6NDMsIEFyc2VuaXkgS3Jhc25vdiB3cm90ZToKPj4+IFsgRVhURVJOQUwg RU1BSUwgXQo+Pj4KPj4+IE9uIDE3LjA0LjIwMjMgMTc6MTAsIEFyc2VuaXkgS3Jhc25vdiB3cm90 ZToKPj4+Pgo+Pj4+Cj4+Pj4gT24gMTcuMDQuMjAyMyAxNjo1NCwgTGlhbmcgWWFuZyB3cm90ZToK Pj4+Pj4gSGkgQXJzZW5peSwKPj4+Pj4KPj4+Pj4gT24gMjAyMy80LzE3IDE0OjQ3LCBBcnNlbml5 IEtyYXNub3Ygd3JvdGU6Cj4+Pj4+PiBbIEVYVEVSTkFMIEVNQUlMIF0KPj4+Pj4+Cj4+Pj4+Pgo+ Pj4+Pj4KPj4+Pj4+IE9uIDEzLjA0LjIwMjMgMDg6NTcsIExpYW5nIFlhbmcgd3JvdGU6Cj4+Pj4+ Pj4gSGkgQXJzZW5peSwKPj4+Pj4+Pgo+Pj4+Pj4+IE9uIDIwMjMvNC8xMyAxMzoxMCwgQXJzZW5p eSBLcmFzbm92IHdyb3RlOgo+Pj4+Pj4+PiBbIEVYVEVSTkFMIEVNQUlMIF0KPj4+Pj4+Pj4KPj4+ Pj4+Pj4KPj4+Pj4+Pj4KPj4+Pj4+Pj4gT24gMTIuMDQuMjAyMyAxNjozMCwgTGlhbmcgWWFuZyB3 cm90ZToKPj4+Pj4+Pj4+IEhpLAo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IE9uIDIwMjMvNC8xMiAyMDow MywgQXJzZW5peSBLcmFzbm92IHdyb3RlOgo+Pj4+Pj4+Pj4+IFsgRVhURVJOQUwgRU1BSUwgXQo+ Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+IE9uIDEyLjA0LjIwMjMg MTM6MjQsIEFyc2VuaXkgS3Jhc25vdiB3cm90ZToKPj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4KPj4+ Pj4+Pj4+Pj4gT24gMTIuMDQuMjAyMyAxMjozNywgTGlhbmcgWWFuZyB3cm90ZToKPj4+Pj4+Pj4+ Pj4+IEhpIEFyc2VuaXksCj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4gVGhhbmtzIGZvciBwb2lu dGluZyBvdXQgdGhpcyBwcm9ibGVtLiBhbHNvIGNvbW1lbnQgaW5saW5lLgo+Pj4+Pj4+Pj4+Pj4K Pj4+Pj4+Pj4+Pj4+IE9uIDIwMjMvNC8xMiAxNDoxNiwgQXJzZW5peSBLcmFzbm92IHdyb3RlOgo+ Pj4+Pj4+Pj4+Pj4+IFsgRVhURVJOQUwgRU1BSUwgXQo+Pj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+ Pj4gVGhpcyBmaXhlcyByZWFkL3dyaXRlIGZ1bmN0aW9uYWxpdHkuIE5ldyBjb21tYW5kIHNlcXVl bmNlcyB3ZXJlIHBvcnRlZAo+Pj4+Pj4+Pj4+Pj4+IGZyb20gb2xkIHZlbmRvcidzIGRyaXZlci4g V2l0aG91dCB0aGlzIHBhdGNoIGRyaXZlciB3b3JrcyB1bnN0YWJsZS4gVGhpcwo+Pj4+Pj4+Pj4+ Pj4+IGNoYW5nZSBpcyB0ZXN0ZWQgd2l0aCAnbmFuZGR1bXAnLyduYW5kd3JpdGUnIHV0aWxpdGll cyBhbmQgbW91bnRpbmcKPj4+Pj4+Pj4+Pj4+PiBKRkZTMiBmaWxlc3lzdGVtIG9uIEFYRyBmYW1p bHkgKEExMTNYIFNvQykuCj4+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+PiBGaXhlczogOGZhZTg1 NmM1MzUwICgibXRkOiByYXduYW5kOiBtZXNvbjogYWRkIHN1cHBvcnQgZm9yIEFtbG9naWMgTkFO RCBmbGFzaCBjb250cm9sbGVyIikKPj4+Pj4+Pj4+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBBcnNlbml5 IEtyYXNub3YgPEFWS3Jhc25vdkBzYmVyZGV2aWNlcy5ydT4KPj4+Pj4+Pj4+Pj4+PiAtLS0KPj4+ Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgIGRyaXZlcnMvbXRkL25hbmQvcmF3L21lc29uX25hbmQuYyB8 IDExNiArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDC oMKgIDEgZmlsZSBjaGFuZ2VkLCAxMDEgaW5zZXJ0aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pCj4+ Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9y YXcvbWVzb25fbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvbWVzb25fbmFuZC5jCj4+Pj4+ Pj4+Pj4+Pj4gaW5kZXggMDc0ZTE0MjI1YzA2Li4yNTZjMzdjNzY1MjYgMTAwNjQ0Cj4+Pj4+Pj4+ Pj4+Pj4gLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvbWVzb25fbmFuZC5jCj4+Pj4+Pj4+Pj4+ Pj4gKysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvbWVzb25fbmFuZC5jCj4+Pj4+Pj4+Pj4+Pj4g QEAgLTI2LDYgKzI2LDcgQEAKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgICNkZWZpbmUgTkZDX0NN RF9JRExFwqDCoMKgwqDCoMKgwqAgKDB4YyA8PCAxNCkKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKg ICNkZWZpbmUgTkZDX0NNRF9DTEXCoMKgwqDCoMKgwqDCoCAoMHg1IDw8IDE0KQo+Pj4+Pj4+Pj4+ Pj4+IMKgwqDCoMKgwqAgI2RlZmluZSBORkNfQ01EX0FMRcKgwqDCoMKgwqDCoMKgICgweDYgPDwg MTQpCj4+Pj4+Pj4+Pj4+Pj4gKyNkZWZpbmUgTkZDX0NNRF9EUkTCoMKgwqDCoMKgwqDCoCAoMHg4 IDw8IDE0KQo+Pj4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqAgI2RlZmluZSBORkNfQ01EX0FETMKgwqDC oMKgwqDCoMKgICgoMCA8PCAxNikgfCAoMyA8PCAyMCkpCj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDC oCAjZGVmaW5lIE5GQ19DTURfQURIwqDCoMKgwqDCoMKgwqAgKCgxIDw8IDE2KSB8ICgzIDw8IDIw KSkKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgICNkZWZpbmUgTkZDX0NNRF9BSUzCoMKgwqDCoMKg wqDCoCAoKDIgPDwgMTYpIHwgKDMgPDwgMjApKQo+Pj4+Pj4+Pj4+Pj4+IEBAIC04NCw2ICs4NSw3 IEBACj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKgwqAgI2RlZmluZSBETUFfQlVTWV9USU1FT1VU wqDCoMKgIDB4MTAwMDAwCj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoCAjZGVmaW5lIENNRF9GSUZP X0VNUFRZX1RJTUVPVVTCoMKgwqAgMTAwMAo+Pj4+Pj4+Pj4+Pj4+ICsjZGVmaW5lIERFVklDRV9S RUFEWV9USU1FT1VUwqDCoMKgIDEwMDAKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoCAjZGVm aW5lIE1BWF9DRV9OVU3CoMKgwqDCoMKgwqDCoCAyCj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoCBA QCAtMjU1LDggKzI1NywyNiBAQCBzdGF0aWMgdm9pZCBtZXNvbl9uZmNfc2VsZWN0X2NoaXAoc3Ry dWN0IG5hbmRfY2hpcCAqbmFuZCwgaW50IGNoaXApCj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgIH0KPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgIH0KPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDC oMKgICtzdGF0aWMgaW50IG1lc29uX25mY193YWl0X2NtZF9maW5pc2goc3RydWN0IG1lc29uX25m YyAqbmZjLAo+Pj4+Pj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHVuc2lnbmVkIGludCB0aW1lb3V0X21zKQo+Pj4+Pj4+Pj4+Pj4+ICt7Cj4+Pj4+Pj4+ Pj4+Pj4gK8KgwqDCoCB1MzIgY21kX3NpemUgPSAwOwo+Pj4+Pj4+Pj4+Pj4+ICvCoMKgwqAgaW50 IHJldDsKPj4+Pj4+Pj4+Pj4+PiArCj4+Pj4+Pj4+Pj4+Pj4gK8KgwqDCoCAvKiB3YWl0IGNtZCBm aWZvIGlzIGVtcHR5ICovCj4+Pj4+Pj4+Pj4+Pj4gK8KgwqDCoCByZXQgPSByZWFkbF9yZWxheGVk X3BvbGxfdGltZW91dChuZmMtPnJlZ19iYXNlICsgTkZDX1JFR19DTUQsIGNtZF9zaXplLAo+Pj4+ Pj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICFORkNf Q01EX0dFVF9TSVpFKGNtZF9zaXplKSwKPj4+Pj4+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAxMCwgdGltZW91dF9tcyAqIDEwMDApOwo+Pj4+Pj4+Pj4+ Pj4+ICvCoMKgwqAgaWYgKHJldCkKPj4+Pj4+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2Vy cihuZmMtPmRldiwgIndhaXQgZm9yIGVtcHR5IENNRCBGSUZPIHRpbWVkIG91dFxuIik7Cj4+Pj4+ Pj4+Pj4+Pj4gKwo+Pj4+Pj4+Pj4+Pj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4+Pj4+Pj4+ PiArfQo+Pj4+Pj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgIHN0YXRpYyB2b2lk IG1lc29uX25mY19jbWRfaWRsZShzdHJ1Y3QgbWVzb25fbmZjICpuZmMsIHUzMiB0aW1lKQo+Pj4+ Pj4+Pj4+Pj4+IMKgwqDCoMKgwqAgewo+Pj4+Pj4+Pj4+Pj4+ICvCoMKgwqAgbWVzb25fbmZjX3dh aXRfY21kX2ZpbmlzaChuZmMsIDApOwo+Pj4+Pj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4+Pj4+PiDCoMKg wqDCoMKgwqDCoMKgwqAgd3JpdGVsKG5mYy0+cGFyYW0uY2hpcF9zZWxlY3QgfCBORkNfQ01EX0lE TEUgfCAodGltZSAmIDB4M2ZmKSwKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBuZmMtPnJlZ19iYXNlICsgTkZDX1JFR19DTUQpOwo+Pj4+Pj4+Pj4+Pj4+IMKg wqDCoMKgwqAgfQo+Pj4+Pj4+Pj4+Pj4+IEBAIC0zMDgsMjMgKzMyOCw5IEBAIHN0YXRpYyB2b2lk IG1lc29uX25mY19kcmFpbl9jbWQoc3RydWN0IG1lc29uX25mYyAqbmZjKQo+Pj4+Pj4+Pj4+Pj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IG1lc29uX25mY19jbWRfaWRsZShuZmMsIDApOwo+Pj4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKg wqDCoCBtZXNvbl9uZmNfY21kX2lkbGUobmZjLCAwKTsKPj4+Pj4+Pj4+Pj4+PiArwqDCoMKgIG1l c29uX25mY193YWl0X2NtZF9maW5pc2gobmZjLCAxMDAwKTsKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDC oMKgIH0KPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgIC1zdGF0aWMgaW50IG1lc29uX25mY193YWl0 X2NtZF9maW5pc2goc3RydWN0IG1lc29uX25mYyAqbmZjLAo+Pj4+Pj4+Pj4+Pj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGludCB0aW1lb3V0X21z KQo+Pj4+Pj4+Pj4+Pj4+IC17Cj4+Pj4+Pj4+Pj4+Pj4gLcKgwqDCoCB1MzIgY21kX3NpemUgPSAw Owo+Pj4+Pj4+Pj4+Pj4+IC3CoMKgwqAgaW50IHJldDsKPj4+Pj4+Pj4+Pj4+PiAtCj4+Pj4+Pj4+ Pj4+Pj4gLcKgwqDCoCAvKiB3YWl0IGNtZCBmaWZvIGlzIGVtcHR5ICovCj4+Pj4+Pj4+Pj4+Pj4g LcKgwqDCoCByZXQgPSByZWFkbF9yZWxheGVkX3BvbGxfdGltZW91dChuZmMtPnJlZ19iYXNlICsg TkZDX1JFR19DTUQsIGNtZF9zaXplLAo+Pj4+Pj4+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICFORkNfQ01EX0dFVF9TSVpFKGNtZF9zaXplKSwKPj4+Pj4+ Pj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAxMCwgdGlt ZW91dF9tcyAqIDEwMDApOwo+Pj4+Pj4+Pj4+Pj4+IC3CoMKgwqAgaWYgKHJldCkKPj4+Pj4+Pj4+ Pj4+PiAtwqDCoMKgwqDCoMKgwqAgZGV2X2VycihuZmMtPmRldiwgIndhaXQgZm9yIGVtcHR5IENN RCBGSUZPIHRpbWUgb3V0XG4iKTsKPj4+Pj4+Pj4+Pj4+PiAtCj4+Pj4+Pj4+Pj4+Pj4gLcKgwqDC oCByZXR1cm4gcmV0Owo+Pj4+Pj4+Pj4+Pj4+IC19Cj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKg wqAgc3RhdGljIGludCBtZXNvbl9uZmNfd2FpdF9kbWFfZmluaXNoKHN0cnVjdCBtZXNvbl9uZmMg Km5mYykKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgIHsKPj4+Pj4+Pj4+Pj4+PiBAQCAtNjMxLDYg KzYzNyw0OCBAQCBzdGF0aWMgaW50IG1lc29uX25mY19yd19jbWRfcHJlcGFyZV9hbmRfZXhlY3V0 ZShzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAo+Pj4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gMDsKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgIH0KPj4+Pj4+Pj4+Pj4+PiDCoMKg wqDCoMKgICtzdGF0aWMgdWludDhfdCBtZXNvbl9uZmNfcmVhZF9ieXRlKHN0cnVjdCBuYW5kX2No aXAgKm5hbmQpCj4+Pj4+Pj4+Pj4+Pj4gK3sKPj4+Pj4+Pj4+Pj4+PiArwqDCoMKgIHN0cnVjdCBt ZXNvbl9uZmMgKm5mYyA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShuYW5kKTsKPj4+Pj4+Pj4+ Pj4+PiArCj4+Pj4+Pj4+Pj4+Pj4gK8KgwqDCoCB3cml0ZWwoTkZDX0NNRF9EUkQsIG5mYy0+cmVn X2Jhc2UgKyBORkNfUkVHX0NNRCk7Cj4+Pj4+Pj4+Pj4+Pj4gK8KgwqDCoCBtZXNvbl9uZmNfY21k X2lkbGUobmZjLCBuZmMtPnRpbWluZy50d2IpOwo+Pj4+Pj4+Pj4+Pj4+ICvCoMKgwqAgbWVzb25f bmZjX2RyYWluX2NtZChuZmMpOwo+Pj4+Pj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4+Pj4+PiArwqDCoMKg IHJldHVybiByZWFkbChuZmMtPnJlZ19iYXNlICsgTkZDX1JFR19CVUYpOwo+Pj4+Pj4+Pj4+Pj4+ ICt9Cj4+Pj4+Pj4+Pj4+Pj4gKwo+Pj4+Pj4+Pj4+Pj4+ICtzdGF0aWMgaW50IG1lc29uX25mY193 YWl0X2Rldl9yZWFkeShzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kKQo+Pj4+Pj4+Pj4+Pj4+ICt7Cj4+ Pj4+Pj4+Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgbWVzb25fbmZjICpuZmMgPSBuYW5kX2dldF9jb250 cm9sbGVyX2RhdGEobmFuZCk7Cj4+Pj4+Pj4+Pj4+Pj4gK8KgwqDCoCB1MzIgY3MgPSBuZmMtPnBh cmFtLmNoaXBfc2VsZWN0Owo+Pj4+Pj4+Pj4+Pj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZyBjbnQg PSAwOwo+Pj4+Pj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4+Pj4+PiArwqDCoMKgIG1lc29uX25mY19kcmFp bl9jbWQobmZjKTsKPj4+Pj4+Pj4+Pj4+PiArCj4+Pj4+Pj4+Pj4+Pj4gK8KgwqDCoCB3cml0ZWwo Y3MgfCBORkNfQ01EX0NMRSB8IE5BTkRfQ01EX1NUQVRVUywgbmZjLT5yZWdfYmFzZSArIE5GQ19S RUdfQ01EKTsKPj4+Pj4+Pj4+Pj4+PiArCj4+Pj4+Pj4+Pj4+Pj4gK8KgwqDCoCAvKiAxMCBtcy4g Ki8KPj4+Pj4+Pj4+Pj4+PiArwqDCoMKgIHdoaWxlIChjbnQgPCBERVZJQ0VfUkVBRFlfVElNRU9V VCkgewo+Pj4+Pj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB1aW50OF90IHN0YXR1czsKPj4+Pj4+ Pj4+Pj4+PiArCj4+Pj4+Pj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0YXR1cyA9IG1lc29uX25m Y19yZWFkX2J5dGUobmFuZCk7Cj4+Pj4+Pj4+Pj4+Pj4gKwo+Pj4+Pj4+Pj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCBpZiAoc3RhdHVzICYgTkFORF9TVEFUVVNfUkVBRFkpCj4+Pj4+Pj4+Pj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+Pj4+Pj4+Pj4+Pj4gKwo+Pj4+Pj4+Pj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoCB1c2xlZXBfcmFuZ2UoMTAsIDExKTsKPj4+Pj4+Pj4+Pj4+PiArwqDC oMKgwqDCoMKgwqAgY250Kys7Cj4+Pj4+Pj4+Pj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+Pj4+Pj4+Pj4g Kwo+Pj4+Pj4+Pj4+Pj4+ICvCoMKgwqAgaWYgKGNudCA9PSBERVZJQ0VfUkVBRFlfVElNRU9VVCkg ewo+Pj4+Pj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKG5mYy0+ZGV2LCAiZGV2aWNl IHJlYWR5IHRpbWVvdXRcbiIpOwo+Pj4+Pj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g LUVUSU1FRE9VVDsKPj4+Pj4+Pj4+Pj4+PiArwqDCoMKgIH0KPj4+Pj4+Pj4+Pj4+PiArCj4+Pj4+ Pj4+Pj4+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+Pj4+Pj4+Pj4+PiArfQo+Pj4+Pj4+Pj4+Pj4+ ICsKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgIHN0YXRpYyBpbnQgbWVzb25fbmZjX3dyaXRlX3Bh Z2Vfc3ViKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsCj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IHBhZ2UsIGludCByYXcp Cj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoCB7Cj4+Pj4+Pj4+Pj4+Pj4gQEAgLTY0Myw2ICs2OTEs MTAgQEAgc3RhdGljIGludCBtZXNvbl9uZmNfd3JpdGVfcGFnZV9zdWIoc3RydWN0IG5hbmRfY2hp cCAqbmFuZCwKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGNtZDsKPj4+Pj4+ Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaW50IHJldDsKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDC oMKgICvCoMKgwqAgcmV0ID0gbWVzb25fbmZjX3dhaXRfZGV2X3JlYWR5KG5hbmQpOwo+Pj4+Pj4+ Pj4+Pj4+ICvCoMKgwqAgaWYgKHJldCkKPj4+Pj4+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIHJldDsKPj4+Pj4+Pj4+Pj4+PiArCj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg IG1lc29uX25mY19zZWxlY3RfY2hpcChuYW5kLCBuYW5kLT5jdXJfY3MpOwo+Pj4+Pj4+Pj4+Pj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGF0YV9sZW4gPcKgIG10ZC0+d3JpdGVzaXplICsgbXRk LT5vb2JzaXplOwo+Pj4+Pj4+Pj4+Pj4+IEBAIC02NjcsMTIgKzcxOSwyMCBAQCBzdGF0aWMgaW50 IG1lc29uX25mY193cml0ZV9wYWdlX3N1YihzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kLAo+Pj4+Pj4+ Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgTkZDX0NNRF9TQ1JBTUJMRVJfRElTQUJMRSk7Cj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgIH0KPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgICvCoMKgwqAgcmV0ID0gbWVzb25fbmZj X3dhaXRfZG1hX2ZpbmlzaChuZmMpOwo+Pj4+Pj4+Pj4+Pj4+ICvCoMKgwqAgaWYgKHJldCkKPj4+ Pj4+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4+Pj4+Pj4+PiArCj4+ Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGNtZCA9IG5mYy0+cGFyYW0uY2hpcF9zZWxl Y3QgfCBORkNfQ01EX0NMRSB8IE5BTkRfQ01EX1BBR0VQUk9HOwo+Pj4+Pj4+Pj4+Pj4+IMKgwqDC oMKgwqDCoMKgwqDCoCB3cml0ZWwoY21kLCBuZmMtPnJlZ19iYXNlICsgTkZDX1JFR19DTUQpOwo+ Pj4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBtZXNvbl9uZmNfcXVldWVfcmIobmZjLCBQ U0VDX1RPX01TRUMoc2RyLT50UFJPR19tYXgpKTsKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIG1lc29uX25mY19kbWFfYnVmZmVyX3JlbGVhc2UobmFuZCwgZGF0YV9sZW4sIGlu Zm9fbGVuLCBETUFfVE9fREVWSUNFKTsKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgICvCoMKgwqAg cmV0ID0gbWVzb25fbmZjX3dhaXRfZGV2X3JlYWR5KG5hbmQpOwo+Pj4+Pj4+Pj4+Pj4+ICvCoMKg wqAgaWYgKHJldCkKPj4+Pj4+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+ Pj4+Pj4+Pj4+PiArCj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7 Cj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoCB9Cj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoCBAQCAt NzIwLDYgKzc4MCwyMSBAQCBzdGF0aWMgdm9pZCBtZXNvbl9uZmNfY2hlY2tfZWNjX3BhZ2VzX3Zh bGlkKHN0cnVjdCBtZXNvbl9uZmMgKm5mYywKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKg wqAgfSB3aGlsZSAoIXJldCk7Cj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoCB9Cj4+Pj4+Pj4+Pj4+ Pj4gwqDCoMKgwqDCoCArc3RhdGljIGlubGluZSBpbnQgbWVzb25fbmZjX3NlbmRfcmVhZChzdHJ1 Y3QgbmFuZF9jaGlwICpuYW5kKQo+Pj4+Pj4+Pj4+Pj4+ICt7Cj4+Pj4+Pj4+Pj4+Pj4gK8KgwqDC oCBzdHJ1Y3QgbWVzb25fbmZjICpuZmMgPSBuYW5kX2dldF9jb250cm9sbGVyX2RhdGEobmFuZCk7 Cj4+Pj4+Pj4+Pj4+Pj4gK8KgwqDCoCB1MzIgY3MgPSBuZmMtPnBhcmFtLmNoaXBfc2VsZWN0Owo+ Pj4+Pj4+Pj4+Pj4+ICvCoMKgwqAgaW50IHJldDsKPj4+Pj4+Pj4+Pj4+PiArCj4+Pj4+Pj4+Pj4+ Pj4gK8KgwqDCoCByZXQgPSBtZXNvbl9uZmNfd2FpdF9kZXZfcmVhZHkobmFuZCk7Cj4+Pj4+Pj4+ Pj4+Pj4gK8KgwqDCoCBpZiAocmV0KQo+Pj4+Pj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gcmV0Owo+Pj4+Pj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4+Pj4+PiArwqDCoMKgIHdyaXRlbChjcyB8 IE5GQ19DTURfQ0xFIHwgTkFORF9DTURfUkVBRDAsIG5mYy0+cmVnX2Jhc2UgKyBORkNfUkVHX0NN RCk7Cj4+Pj4+Pj4+Pj4+Pj4gKwo+Pj4+Pj4+Pj4+Pj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+Pj4+ Pj4+Pj4+Pj4gK30KPj4+Pj4+Pj4+Pj4+PiArCj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4gaXQg YWxyZWFkeSBjYWxscyBtZXNvbl9uZmNfcXVldWVfcmIoKSBpbiBtZXNvbl9uZmNfcndfY21kX3By ZXBhcmVfYW5kX2V4ZWN1dGUoKS4gQ291bGQgeW91IGltcGxlbWVudHMgdGhpcyBpbiBtZXNvbl9u ZmNfcXVldWVfcmIoKT8gYW5kIHdlIGNhbiB1c2UgdGhlIGlycSBtZXRob2QuCj4+Pj4+Pj4+Pj4+ PiBhbHNvIHdpdGhvdXQgUmVhZHkvQnVzeSBwaW4sIHRoZSBtZXNvbl9uZmNfcXVldWVfcmIoKSBz aG91bGQgY2hhbmdlIGxpa2UgYmVsb3c6Cj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoCAuLi4u Li4KPj4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgICNkZWZpbmUgTkZDX0NNRF9SQl9JTlTCoMKg wqAgKCgweGIgPDwgMTApIHwgQklUKDE4KSkKPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+IFNvcnJ5LCBJ IGNhbiBzZWUgdGhpcyBkZWZpbmUgYXMgKGFuZCBpdCBpcyB1c2VkIGluIHRoZSBkcml2ZXIpOgo+ Pj4+Pj4+Pj4+ICNkZWZpbmUgTkZDX0NNRF9SQl9JTlTCoMKgwqDCoMKgwqDCoMKgwqAgQklUKDE0 KQo+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gaW4gZHJpdmVycy9tdGQvbmFuZC9yYXcvbWVzb25fbmFu ZC5jCj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+PiBXaGljaCBvbmUgaXMgY29ycmVjdCA/Cj4+Pj4+Pj4+ Pgo+Pj4+Pj4+Pj4gd2UgbmVlZCB0byBtb2RpZnkgdGhlIGRlZmluZSAnTkZDX0NNRF9SQl9JTlQn IGFzICgoMHhiIDw8IDEwKSB8IEJJVCgxOCkpLgo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4KPj4+Pj4+Pj4g T2ssIE5GQ19DTURfUkJfSU5UIC0gaXQgaXMgIlJlYWR5L0J1c3lfSW50ZXJydXB0IiA/IFlvdSBz dXBwb3NlIHRoYXQgY3VycmVudGx5IGl0IGlzCj4+Pj4+Pj4+IGRlZmluZWQgaW5jb3JyZWN0bHks IHNvIGlycSB3YWl0aW5nIGRvZXMgbm90IHdvcms/Cj4+Pj4+Pj4KPj4+Pj4+PiBQcmV2aW91cyBk ZWZpbmVkIEJJVCgxNCkgaXMgZm9yIGhhdmluZyB0aGUgZXh0ZXJuYWwgUmVhZHkvQnVzeSBwaW4g b2YgdGhlIE5BTkQgZGV2aWNlIGNvbm5lY3RlZCB0byB0aGUgY29udHJvbGxlci4gdGhlIG5ldyBk ZWZpbmUgaXMgZm9yIHJlYWRpbmcgc3RhdHVzIGJ5IHNlbmRpbmcgcmVhZCBzdGF0dXMoNzBIKSBj b21tYW5kIGFuZCByZWFkIHN0YXR1cyBmcm9tIHRoZSBkYXRhIGJ1cyhjaGVja2luZyB0aGUgSU82 KS4gdGhlIGJvdGggY2FuIHdvcmsgb24gQVhHIHNvYy4KPj4+Pj4+PiB3aGVuIHRoZSBjb250cm9s bGVyIFJCIGNvbW1hbmQgaXMgc2VudCwgdGhlIGNvbnRyb2xsZXIgYXV0b21hdGljYWxseSBjaGVj a3MgdGhlIGxldmVsIG9mIGV4dGVybmFsIFJlYWR5L0J1c3kgcGluIG9yIHRoZSBkYXRhIGJ1cyhJ TzYpIHBlcmlvZGljaXR5LiBhbmQgZ2VuZXJhdGUgdGhlIGlycSBzaWduYWwgaWYgc3RhdHVzIGlz IHJlYWR5Lgo+Pj4+Pj4+Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IFRoYW5rcywgQXJzZW5peQo+Pj4+Pj4+ Pgo+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gVGhhbmtzLCBBcnNlbml5Cj4+Pj4+Pj4+Pj4KPj4+Pj4+ Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoCBtZXNvbl9uZmNfY21kX2lkbGUobmZj LCAwKTsKPj4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgIGNtZCA9IG5mYy0+cGFyYW0uY2hpcF9z ZWxlY3QgfCBORkNfQ01EX0NMRSB8IE5BTkRfQ01EX1NUQVRVUzsKPj4+Pj4+Pj4+Pj4+IMKgwqDC oMKgwqDCoMKgIHdyaXRlbChjbWQsIG5mYy0+cmVnX2Jhc2UgKyBORkNfUkVHX0NNRCk7Cj4+Pj4+ Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoCBtZXNvbl9uZmNfY21kX2lkbGUobmZjLCA1KTsKPj4+Pj4+ Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgIGNtZCA9IE5GQ19DTURfUkIgfCBORkNfQ01EX1JCX0lOVCB8 IG5mYy0+dGltaW5nLnRiZXJzX21heDsKPj4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgIHdyaXRl bChjbWQsIG5mYy0+cmVnX2Jhc2UgKyBORkNfUkVHX0NNRCk7Cj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+ Pj4+Pj4gwqDCoMKgwqDCoMKgwqAgcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZu ZmMtPmNvbXBsZXRpb24sCj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpKTsKPj4+ Pj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgIGlmIChyZXQgPT0gMCkKPj4+Pj4+Pj4+Pj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLTE7Cj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4gwqDC oMKgwqDCoMKgwqAgd3JpdGVsKGNzIHwgTkZDX0NNRF9DTEUgfCBOQU5EX0NNRF9SRUFEMCwgbmZj LT5yZWdfYmFzZSArIE5GQ19SRUdfQ01EKTsKPj4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgIC4u Li4uLgo+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Cj4+Pj4+PiBIZWxsbyBMaWFuZyEKPj4+Pj4+Cj4+Pj4+ PiBJJ3ZlIGdvdCBzbWFsbCBxdWVzdGlvbnMgdG8gY2xhcmlmeSBZb3VyIGNvbW1lbnQuIFlvdSBz dWdnZXN0IHR3byB0aGluZyBJSVVDOgo+Pj4+Pj4KPj4+Pj4+IDEpIFNlbmQgTkFORF9DTURfUkVB RDAgZnJvbSAnbWVzb25fbmZjX3F1ZXVlX3JiKCknLiBUaGlzIG1lYW5zIHRoYXQgZXh0cmEgYXJn dW1lbnQgaXMgbmVlZGVkIHRvCj4+Pj4+PiAnbWVzb25fbmZjX3F1ZXVlX3JiKCknIHdoaWNoIHNo b3dzIHRoYXQgcmVhZCBvcGVyYXRpb24gaXMgZ29pbmcgdG8gYmUgcGVyZm9ybWVkLiBXZSBjYW4n dCBzZW5kCj4+Pj4+PiBOQU5EX0NNRF9SRUFEMCBmb3Igd3JpdGUgb3BlcmF0aW9uPwo+Pj4+Pgo+ Pj4+PiBpdCBpcyBvayB0byBtZS4gYnV0IGRvZXMgTkFORF9DTURfUkVBRDAgcmVhbGx5IG5lZWQg dG8gc2VuZCBpbiB0aGUgY29udHJvbGxlciBkcml2ZXI/IGkgZG9uJ3QgZmluZCB0aGUgb3RoZXIg Y29udHJvbGxlciBkcml2ZXJzIGhhdmUgdG8gc2VuZCBpdCBmb3IgdGhlIG9sZCB2ZW5kb3IgTkFO RCBkZXZpY2UuCj4+Pj4KPj4+PiBIbSwgSSBmb3VuZCB0aGlzIGNvbW1hbmQgaW4gdGhlIG9sZCBk cml2ZXIuIEZvciBleGFtcGxlIHdpdGhvdXQgaXQgSSBnZXQgdGhlIGZvbGxvd2luZyBlcnJvcjoK Pj4+Pgo+Pj4+ICMgbmFuZGR1bXAgLWMgLXMgMCAtbCAyMDQ4IC9kZXYvbXRkMCAtLW9vYgo+Pj4+ IEVDQyBmYWlsZWQ6IDM5NzUKPj4+PiBFQ0MgY29ycmVjdGVkOiA0Nwo+Pj4+IE51bWJlciBvZiBi YWQgYmxvY2tzOiAxMAo+Pj4+IE51bWJlciBvZiBiYnQgYmxvY2tzOiAwCj4+Pj4gQmxvY2sgc2l6 ZSAxMzEwNzIsIHBhZ2Ugc2l6ZSAyMDQ4LCBPT0Igc2l6ZSA2NAo+Pj4+IER1bXBpbmcgZGF0YSBz dGFydGluZyBhdCAweDAwMDAwMDAwIGFuZCBlbmRpbmcgYXQgMHgwMDAwMDgwMC4uLgo+Pj4+Cj4+ Pj4gQnV0IGRhdGEgaXMgbm90IGNvcnJ1cHRlZCBhbmQgc2VlbXMgb2suIFdpdGggdGhpcyBleHRy YSBOQU5EX0NNRF9SRUFEMCBldmVyeXRoaW5nIGlzIG9rIC0gZGF0YSBpcyBzdGlsbCB2YWxpZCBh bmQKPj4+PiB0aGVyZSBhcmUgbm8gRUNDIGVycm9ycy4KPj4KPj4gQWZ0ZXIgc2VuZGluZyBOQU5E X0NNRF9SRUFEMCwgYWRkcmVzcywgTkFORF9DTURfUkVBRFNUQVJUIGFuZCByZWFkIHN0YXR1cyhO QU5EX0NNRF9TVEFUVVMgPSAweDcwKSBjb21tYW5kcywgaXQgc2hvdWxkIHNlbmQgTkFORF9DTURf UkVBRDAgY29tbWFuZCBmb3IgZXhpdGluZyB0aGUgcmVhZCBzdGF0dXMgbW9kZSBmcm9tIHRoZSBk YXRhc2hlZXQgZnJvbSBOQU5EIGRldmljZS4gYnV0IHByZXZpb3VzIG1lc29uX25mY19xdWV1ZV9y YigpIG9ubHkgY2hlY2tzIHRoZSBSZWFkeS9CdXN5IHBpbiBhbmQgaXQgZG9lc24ndCBzZW5kIHJl YWQgc3RhdHVzKE5BTkRfQ01EX1NUQVRVUyA9IDB4NzApIGNvbW1hbmQuCj4+IGkgdGhpbmsgdGhl cmUgaXMgc29tZXRoaW5nIHdyb25nIHdpdGggdGhlIFJlYWR5L0J1c3kgcGluKHBsZWFzZSBjaGVj ayB0aGUgaGFyZHdhcmUgd2hldGhlciB0aGlzIFJlYWR5L0J1c3kgcGluIGlzIGNvbm5lY3RlZCB3 aXRoIFNPQykgb3IgdGhlIHNvdXJjZSBjb2RlLiBpIGhhdmUgdGhlIGJvYXJkIHdpdGhvdXQgUmVh ZHkvQnVzeSBwaW4gYW5kIHByZWZlciB0byB1c2UgdGhlIG5mYyBjb21tYW5kIGNhbGxlZCBSQl9J TzYuIGl0IHNlbmRzIE5BTkRfQ01EX1NUQVRVUyBjb21tYW5kIGFuZCBjaGVja3MgYml0NiBvZiB0 aGUgc3RhdHVzIHJlZ2lzdGVyIG9mIE5BTkQgZGV2aWNlIGZyb20gdGhlIGRhdGEgYnVzIGFuZCBn ZW5lcmF0ZSBJUlEgaWYgcmVhZHkuCj4+Cj4+Pj4KPj4+Pj4KPj4+Pj4+Cj4+Pj4+PiAyKSBBYm91 dCBjb2RlIGFuZCBkZWZpbmUgYWJvdmUsIEkgdHJpZWQgdG8gcmVwbGFjZSBjdXJyZW50IGJvZHkg b2YgJ21lc29uX25mY19xdWV1ZV9yYigpJywgYnV0IGl0Cj4+Pj4+PiBkaWRuJ3Qgd29yay4gTWF5 IGJlIEkgZGlkIGl0IHdyb25nLCBiZWNhdXNlIHdoYXQgdG8gZG8gd2l0aCAnbWVzb25fbmZjX3dh aXRfZGV2X3JlYWR5KCknIGFuZCBpdCdzCj4+Pj4+PiBjYWxsIHNpdGVzPyBJdCBtdXN0IGJlIHJl bW92ZWQ/IENvdWxkIFlvdSBwbGVhc2UgZXhwbGFpbiBZb3VyIGlkZWEgaW4gbW9yZSBkZXRhaWxz PyBJJ20gYXNraW5nIFlvdQo+Pj4+Pj4gYmVjYXVzZSBJIGRvbid0IGhhdmUgZG9jIGZvciB0aGlz IE5BTkQgY29udHJvbGxlciwgc28gaXQgaXMgdmVyeSBkaWZmaWN1bHQgdG8gbWUgdG8gYWRkIHZh bGlkCj4+Pj4+PiBsb2dpYyB0byB0aGlzIGRyaXZlciB3aXRob3V0IGFueSByZWZlcmVuY2VzCj4+ Pj4+Cj4+Pj4+IENvdWxkIHlvdSBwbGVhc2UgdHJ5IHRoZSBmb2xsb3dpbmc/IGkgaGF2ZSB0ZXN0 ZWQgaXQgb24gYW5vdGhlciBTT0MgKG5vdCBheGcpLgo+Pj4+Pgo+Pj4+PiBzdGF0aWMgaW50IG1l c29uX25mY19xdWV1ZV9yYihzdHJ1Y3QgbWVzb25fbmZjICpuZmMsIGludCB0aW1lb3V0X21zKQo+ Pj4+PiB7Cj4+Pj4+IMKgwqDCoMKgIHUzMiBjbWQsIGNmZzsKPj4+Pj4gwqDCoMKgwqAgaW50IHJl dCA9IDA7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgIG1lc29uX25mY19jbWRfaWRsZShuZmMsIG5mYy0+ dGltaW5nLnR3Yik7Cj4+Pj4+IMKgwqDCoMKgIG1lc29uX25mY19kcmFpbl9jbWQobmZjKTsKPj4+ Pj4gwqDCoMKgwqAgbWVzb25fbmZjX3dhaXRfY21kX2ZpbmlzaChuZmMsIENNRF9GSUZPX0VNUFRZ X1RJTUVPVVQpOwo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoCBjZmcgPSByZWFkbChuZmMtPnJlZ19iYXNl ICsgTkZDX1JFR19DRkcpOwo+Pj4+PiDCoMKgwqDCoCBjZmcgfD0gTkZDX1JCX0lSUV9FTjsKPj4+ Pj4gwqDCoMKgwqAgd3JpdGVsKGNmZywgbmZjLT5yZWdfYmFzZSArIE5GQ19SRUdfQ0ZHKTsKPj4+ Pj4KPj4+Pj4gwqDCoMKgwqAgcmVpbml0X2NvbXBsZXRpb24oJm5mYy0+Y29tcGxldGlvbik7Cj4+ Pj4+Cj4+Pj4+IMKgwqDCoMKgIG1lc29uX25mY19jbWRfaWRsZShuZmMsIDApOwo+Pj4+PiDCoMKg wqDCoCBjbWQgPSBuZmMtPnBhcmFtLmNoaXBfc2VsZWN0IHwgTkZDX0NNRF9DTEUgfCBOQU5EX0NN RF9TVEFUVVM7Cj4+Pj4+IMKgwqDCoMKgIHdyaXRlbChjbWQsIG5mYy0+cmVnX2Jhc2UgKyBORkNf UkVHX0NNRCk7Cj4+Pj4+IMKgwqDCoMKgIG1lc29uX25mY19jbWRfaWRsZShuZmMsIDUpOwo+Pj4+ PiDCoMKgwqDCoCBjbWQgPSBORkNfQ01EX1JCIHwgTkZDX0NNRF9SQl9JTlQKPj4+Pj4gwqDCoMKg wqDCoMKgwqDCoCB8IG5mYy0+cGFyYW0uY2hpcF9zZWxlY3QgfCBuZmMtPnRpbWluZy50YmVyc19t YXg7Cj4+Pj4+IMKgwqDCoMKgIHdyaXRlbChjbWQsIG5mYy0+cmVnX2Jhc2UgKyBORkNfUkVHX0NN RCk7Cj4+Pj4+IMKgwqDCoMKgIG1lc29uX25mY19kcmFpbl9jbWQobmZjKTsKPj4+Pj4KPj4+Pj4g wqDCoMKgwqAgcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZuZmMtPmNvbXBsZXRp b24sCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1z ZWNzX3RvX2ppZmZpZXModGltZW91dF9tcykpOwo+Pj4+PiDCoMKgwqDCoCBpZiAocmV0ID09IDAp Cj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLTE7Cj4+Pj4+Cj4+Pj4+IMKgwqDCoMKgIHdy aXRlbCgxIDw8IDMxLCBuZmMtPnJlZ19iYXNlICsgTkZDX1JFR19DTUQpOwo+Pj4+Pgo+Pj4+PiDC oMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+PiB9Cj4+Pj4KPj4+PiBPayEgVGhhbmtzLCBJJ2xsIHRy eSBpdCEKPj4+Pgo+Pj4+IFRoYW5rcywgQXJzZW5peQo+Pj4KPj4+IEhlbGxvIEBMaWFuZywgSSB0 cmllZCB0aGlzIGNvZGUsIHNlZW1zIHdpdGggdGhpcyBpbXBsZW1lbnRhdGlvbiBOQU5EIGRyaXZl ciB3b3JrcyB2ZXJ5IHNsb3csCj4+PiBoZXJlIGlzIGZvciBleGFtcGxlIG91dHB1dCBidXJpbmcg YmFkIGJsb2NrcyBsb29rdXA6Cj4+Pgo+Pj4gW8KgwqDCoCAyLjA2MDgzNV0gU2Nhbm5pbmcgZGV2 aWNlIGZvciBiYWQgYmxvY2tzCj4+PiBbwqDCoMKgIDMuMzUwMDg1XSBCYWQgZXJhc2VibG9jayAy MCBhdCAweDAwMDAwMDI4MDAwMAo+Pj4gW8KgwqDCoCAzLjUzNjM4OV0gRnJlZWluZyBpbml0cmQg bWVtb3J5OiAxMTgwOEsKPj4+IFvCoMKgIDM5LjEzMzk1Ml0gQmFkIGVyYXNlYmxvY2sgNTgxIGF0 IDB4MDAwMDA0OGEwMDAwCj4+PiBbwqDCoCA0NC44Mzc5MTddIEJhZCBlcmFzZWJsb2NrIDY3MSBh dCAweDAwMDAwNTNlMDAwMAo+Pj4gW8KgwqAgNDUuNjc3OTY0XSBCYWQgZXJhc2VibG9jayA2ODUg YXQgMHgwMDAwMDU1YTAwMDAKPj4+IFvCoMKgIDgzLjYzNzkxN10gQmFkIGVyYXNlYmxvY2sgMTI3 OSBhdCAweDAwMDAwOWZlMDAwMAo+Pj4gW8KgIDEzMi44MzMzMThdIG1vZHByb2JlICg1NikgdXNl ZCBncmVhdGVzdCBzdGFjayBkZXB0aDogMTI2NzIgYnl0ZXMgbGVmdAo+Pj4KPj4+Cj4+PiBUYWtl IGEgbG9vayBhdCB0aW1lb3V0cy4gSSB1c2VkIFlvdXIgdmFyaWFudCBvZiAnbWVzb25fbmZjX3F1 ZXVlX3JiKCknIGZyb20gYWJvdmUsCj4+PiAjZGVmaW5lIE5GQ19DTURfUkJfSU5UIGlzICgoMHhi IDw8IDEwKSB8IEJJVCgxOCkpLiBJIHRlc3RlZCBpdCB3aXRoIG15IHBvcnRzIG9mCj4+PiBvZiBk ZXYgcmVhZHkgY2FsbHMgZnJvbSB0aGUgb2xkIHZlbmRvcidzIGRyaXZlci4KPj4+Cj4+PiBUaGFu a3MsIEFyc2VuaXkKPj4KPj4gWWVzLCB0aGVyZSBpcyBzb21ldGhpbmcgd3JvbmcuIGkgbWFrZSBh IHBhdGNoIGFuZCBpdCB3b3JrcyBvbiBBWEcgcGxhdGZyb20uIHBsZWFzZSB0cnkgaXQuIFRoYW5r cy4KPiAKPiBPaywgVGhhbmsgWW91IHZlcnkgbXVjaCwgSSdsbCB0cnkgaXQgQVNBUCEKPiAKPiBU aGFua3MsIEFyc2VuaXkKCkhlbGxvIEBMaWFuZyEgU29ycnkgZm9yIGxhdGUgcmVwbHksIHdhcyBh IGxpdHRsZSBiaXQgYnVzeS4gSSd2ZSB0ZXN0ZWQgcGF0Y2ggYmVsb3csIHNlZW1zIGl0Cndvcmtz ISBUaGFuayBZb3UhIFNvIEkgdGhpbmsgSSBjYW4gcmVwbGFjZSB0aGlzIHBhdGNoIGZyb20gY3Vy cmVudCBwYXRjaHNldCB3aXRoIHRoaXMgY29kZSEKClRoYW5rcywgQXJzZW5peQoKPiAKPj4KPj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L21lc29uX25hbmQuYyBiL2RyaXZlcnMv bXRkL25hbmQvcmF3L21lc29uX25hbmQuYwo+PiBvbGQgbW9kZSAxMDA2NDQKPj4gbmV3IG1vZGUg MTAwNzU1Cj4+IGluZGV4IDA3NGUxNDIyNWMwNi4uNTI5ZDFhNDFhNGE0Cj4+IC0tLSBhL2RyaXZl cnMvbXRkL25hbmQvcmF3L21lc29uX25hbmQuYwo+PiArKysgYi9kcml2ZXJzL210ZC9uYW5kL3Jh dy9tZXNvbl9uYW5kLmMKPj4gQEAgLTM3LDcgKzM3LDcgQEAKPj4gwqAjZGVmaW5lIE5GQ19DTURf U0NSQU1CTEVSX0VOQUJMRcKgwqDCoMKgwqDCoCBCSVQoMTkpCj4+IMKgI2RlZmluZSBORkNfQ01E X1NDUkFNQkxFUl9ESVNBQkxFwqDCoMKgwqDCoCAwCj4+IMKgI2RlZmluZSBORkNfQ01EX1NIT1JU TU9ERV9ESVNBQkxFwqDCoMKgwqDCoCAwCj4+IC0jZGVmaW5lIE5GQ19DTURfUkJfSU5UwqDCoMKg wqDCoMKgwqDCoCBCSVQoMTQpCj4+ICsjZGVmaW5lIE5GQ19DTURfUkJfSU5UICgoMHhiIDw8IDEw KSB8IEJJVCgxOCkgfCBCSVQoMTYpKQo+Pgo+PiDCoCNkZWZpbmUgTkZDX0NNRF9HRVRfU0laRSh4 KcKgwqDCoCAoKCh4KSA+PiAyMikgJiBHRU5NQVNLKDQsIDApKQo+Pgo+PiBAQCAtMzkyLDcgKzM5 Miw3IEBAIHN0YXRpYyB2b2lkIG1lc29uX25mY19zZXRfZGF0YV9vb2Ioc3RydWN0IG5hbmRfY2hp cCAqbmFuZCwKPj4gwqDCoMKgwqDCoMKgwqAgfQo+PiDCoH0KPj4KPj4gLXN0YXRpYyBpbnQgbWVz b25fbmZjX3F1ZXVlX3JiKHN0cnVjdCBtZXNvbl9uZmMgKm5mYywgaW50IHRpbWVvdXRfbXMpCj4+ ICtzdGF0aWMgaW50IG1lc29uX25mY19xdWV1ZV9yYihzdHJ1Y3QgbWVzb25fbmZjICpuZmMsIGlu dCB0aW1lb3V0X21zLCBpbnQgY21kX3JlYWQwKQo+PiDCoHsKPj4gwqDCoMKgwqDCoMKgwqAgdTMy IGNtZCwgY2ZnOwo+PiDCoMKgwqDCoMKgwqDCoCBpbnQgcmV0ID0gMDsKPj4gQEAgLTQwNywxNyAr NDA3LDI5IEBAIHN0YXRpYyBpbnQgbWVzb25fbmZjX3F1ZXVlX3JiKHN0cnVjdCBtZXNvbl9uZmMg Km5mYywgaW50IHRpbWVvdXRfbXMpCj4+Cj4+IMKgwqDCoMKgwqDCoMKgIHJlaW5pdF9jb21wbGV0 aW9uKCZuZmMtPmNvbXBsZXRpb24pOwo+Pgo+PiArwqDCoMKgwqDCoMKgIGNtZCA9IG5mYy0+cGFy YW0uY2hpcF9zZWxlY3QgfCBORkNfQ01EX0NMRSB8IE5BTkRfQ01EX1NUQVRVUzsKPj4gK8KgwqDC oMKgwqDCoCB3cml0ZWwoY21kLCBuZmMtPnJlZ19iYXNlICsgTkZDX1JFR19DTUQpOwo+PiArwqDC oMKgwqDCoMKgIG1lc29uX25mY19jbWRfaWRsZShuZmMsIDUpOwo+PiArCj4+IMKgwqDCoMKgwqDC oMKgIC8qIHVzZSB0aGUgbWF4IGVyYXNlIHRpbWUgYXMgdGhlIG1heGltdW0gY2xvY2sgZm9yIHdh aXRpbmcgUi9CICovCj4+IC3CoMKgwqDCoMKgwqAgY21kID0gTkZDX0NNRF9SQiB8IE5GQ19DTURf UkJfSU5UCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHwgbmZjLT5wYXJhbS5jaGlw X3NlbGVjdCB8IG5mYy0+dGltaW5nLnRiZXJzX21heDsKPj4gK8KgwqDCoMKgwqDCoCBjbWQgPSBO RkNfQ01EX1JCIHwgTkZDX0NNRF9SQl9JTlQgfCBuZmMtPnRpbWluZy50YmVyc19tYXg7Cj4+IMKg wqDCoMKgwqDCoMKgIHdyaXRlbChjbWQsIG5mYy0+cmVnX2Jhc2UgKyBORkNfUkVHX0NNRCk7Cj4+ ICvCoMKgwqDCoMKgwqAgbWVzb25fbmZjX2NtZF9pZGxlKG5mYywgMik7Cj4+Cj4+IMKgwqDCoMKg wqDCoMKgIHJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmbmZjLT5jb21wbGV0aW9u LAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9t cykpOwo+PiDCoMKgwqDCoMKgwqDCoCBpZiAocmV0ID09IDApCj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldCA9IC0xOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gLTE7Cj4+Cj4+IC3CoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gK8KgwqDCoMKgwqDC oCBpZiAoIWNtZF9yZWFkMCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IDA7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoCBjbWQgPSBuZmMtPnBhcmFtLmNoaXBfc2VsZWN0IHwg TkZDX0NNRF9DTEUgfCBOQU5EX0NNRF9SRUFEMDsKPj4gK8KgwqDCoMKgwqDCoCB3cml0ZWwoY21k LCBuZmMtPnJlZ19iYXNlICsgTkZDX1JFR19DTUQpOwo+PiArwqDCoMKgwqDCoMKgIG1lc29uX25m Y19kcmFpbl9jbWQobmZjKTsKPj4gK8KgwqDCoMKgwqDCoCBtZXNvbl9uZmNfd2FpdF9jbWRfZmlu aXNoKG5mYywgQ01EX0ZJRk9fRU1QVFlfVElNRU9VVCk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoCBy ZXR1cm4gMDsKPj4gwqB9Cj4+Cj4+IMKgc3RhdGljIHZvaWQgbWVzb25fbmZjX3NldF91c2VyX2J5 dGUoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwgdTggKm9vYl9idWYpCj4+IEBAIC02MjMsNyArNjM1 LDcgQEAgc3RhdGljIGludCBtZXNvbl9uZmNfcndfY21kX3ByZXBhcmVfYW5kX2V4ZWN1dGUoc3Ry dWN0IG5hbmRfY2hpcCAqbmFuZCwKPj4gwqDCoMKgwqDCoMKgwqAgaWYgKGluKSB7Cj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuZmMtPmNtZGZpZm8ucncuY21kMSA9IGNzIHwgTkZD X0NNRF9DTEUgfCBOQU5EX0NNRF9SRUFEU1RBUlQ7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB3cml0ZWwobmZjLT5jbWRmaWZvLnJ3LmNtZDEsIG5mYy0+cmVnX2Jhc2UgKyBORkNf UkVHX0NNRCk7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1lc29uX25mY19xdWV1 ZV9yYihuZmMsIFBTRUNfVE9fTVNFQyhzZHItPnRSX21heCkpOwo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBtZXNvbl9uZmNfcXVldWVfcmIobmZjLCBQU0VDX1RPX01TRUMoc2RyLT50 Ul9tYXgpLCAxKTsKPj4gwqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsKPj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIG1lc29uX25mY19jbWRfaWRsZShuZmMsIG5mYy0+dGltaW5nLnRhZGwp Owo+PiDCoMKgwqDCoMKgwqDCoCB9Cj4+IEBAIC02NjksNyArNjgxLDcgQEAgc3RhdGljIGludCBt ZXNvbl9uZmNfd3JpdGVfcGFnZV9zdWIoc3RydWN0IG5hbmRfY2hpcCAqbmFuZCwKPj4KPj4gwqDC oMKgwqDCoMKgwqAgY21kID0gbmZjLT5wYXJhbS5jaGlwX3NlbGVjdCB8IE5GQ19DTURfQ0xFIHwg TkFORF9DTURfUEFHRVBST0c7Cj4+IMKgwqDCoMKgwqDCoMKgIHdyaXRlbChjbWQsIG5mYy0+cmVn X2Jhc2UgKyBORkNfUkVHX0NNRCk7Cj4+IC3CoMKgwqDCoMKgwqAgbWVzb25fbmZjX3F1ZXVlX3Ji KG5mYywgUFNFQ19UT19NU0VDKHNkci0+dFBST0dfbWF4KSk7Cj4+ICvCoMKgwqDCoMKgwqAgbWVz b25fbmZjX3F1ZXVlX3JiKG5mYywgUFNFQ19UT19NU0VDKHNkci0+dFBST0dfbWF4KSwgMCk7Cj4+ Cj4+IMKgwqDCoMKgwqDCoMKgIG1lc29uX25mY19kbWFfYnVmZmVyX3JlbGVhc2UobmFuZCwgZGF0 YV9sZW4sIGluZm9fbGVuLCBETUFfVE9fREVWSUNFKTsKPj4KPj4gQEAgLTk1Miw3ICs5NjQsNyBA QCBzdGF0aWMgaW50IG1lc29uX25mY19leGVjX29wKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjYXNlIE5BTkRfT1BfV0FJVFJEWV9J TlNUUjoKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1l c29uX25mY19xdWV1ZV9yYihuZmMsIGluc3RyLT5jdHgud2FpdHJkeS50aW1lb3V0X21zKTsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1lc29uX25mY19x dWV1ZV9yYihuZmMsIGluc3RyLT5jdHgud2FpdHJkeS50aW1lb3V0X21zLCAwKTsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoaW5zdHItPmRlbGF5 X25zKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBtZXNvbl9uZmNfY21kX2lkbGUobmZjLCBkZWxheV9pZGxlKTsKPj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+Cj4+ Pj4KPj4+Pj4KPj4+Pj4gYWxzbyB3ZSBuZWVkIHRvIGNoZWNrIGFuZCByZXR1cm4gdGhlIHJldHVy biB2YWx1ZSBmb3IgbWVzb25fbmZjX3F1ZXVlX3JiKCkgaW4gbWVzb25fbmZjX3J3X2NtZF9wcmVw YXJlX2FuZF9leGVjdXRlKCkgYW5kIG1lc29uX25mY193cml0ZV9wYWdlX3N1YigpLgo+Pj4+Pgo+ Pj4+Pj4KPj4+Pj4+IE1heSBiZSBJIGNhbiBzZW5kIHYyIHBhdGNoc2V0IGZvciByZXZpZXcgd2l0 aG91dCB0aGlzIGNoYW5nZSwgYXMgdjIgYWxyZWFkeSBpbmNsdWRlcyB1ZHBhdGUgZm9yIE9PQgo+ Pj4+Pj4gaGFuZGxpbmcgd2hpY2ggaXMgSSB0aGluayBtb3JlIGNyaXRpY2FsPwo+Pj4+Pj4KPj4+ Pj4KPj4+Pj4gc3VyZSwgaXQgaXMgdXAgdG8geW91LiBpdCBpcyBtb3JlIGltcG9ydGFudCwgdGhh bmtzIGFnYWluLgo+Pj4+Pgo+Pj4+Pj4gVGhhbmtzLCBBcnNlbml5Cj4+Pj4+Pgo+Pj4+Pj4+Pj4+ Pgo+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoCBUaGFua3MgZm9yIHJlcGx5ISBJJ2xsIHRyeSB0 aGlzIGNvZGUhIE9uZSBtb3JlIHF1ZXN0aW9uIGFib3V0IE9PQiBwcm9jZXNzaW5nIGluIHRoaXMK Pj4+Pj4+Pj4+Pj4gZHJpdmVyIChhcyBZb3UgYXJlIGF1dGhvciBvZiBpdCk6Cj4+Pj4+Pj4+Pj4+ Cj4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoCBPT0Igc2l6ZSBpcyA2NCBieXRlcywgYnV0IGZvciBl eGFtcGxlIGlmIEkgaGF2ZSAxSyBFQ0MsIDIgYnl0ZXMgdXNlciBieXRlcyBhbmQgMTQKPj4+Pj4+ Pj4+Pj4gwqDCoMKgwqDCoMKgIGJ5dGVzIGZvciBFQ0MgY29kZSBmb3IgZWFjaCAxSy4gSW4gdGhp cyBjYXNlIEkgaGF2ZSBhY2Nlc3MgdG8gb25seSAzMiBieXRlcyBvZiBPT0I6Cj4+Pj4+Pj4+Pj4+ IMKgwqDCoMKgwqDCoCAyIHggKDIgdXNlciBieXRlcyArIDE0IEVDQyBieXRlcykuIENvcnJlY3Qg bWUgaWYgaSdtIHdyb25nLCBidXQgcmVzdCBvZiBPT0IgKG5leHQKPj4+Pj4+Pj4+Pj4gwqDCoMKg wqDCoMKgIDMyIGJ5dGVzKSBiZWNvbWUgdW5hdmFpbGFibGUgKGluIGJvdGggcmF3IGFuZCBFQ0Mg bW9kZXMpID8KPj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4gVGhhbmtzLCBBcnNlbml5Cj4+Pj4+Pj4+ Pj4+Cj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoCBzdGF0aWMgaW50IG1lc29uX25mY19yZWFkX3Bh Z2Vfc3ViKHN0cnVjdCBuYW5kX2NoaXAgKm5hbmQsCj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCBwYWdlLCBpbnQgcmF3KQo+ Pj4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqAgewo+Pj4+Pj4+Pj4+Pj4+IEBAIC03MzQsMTAgKzgwOSwx OCBAQCBzdGF0aWMgaW50IG1lc29uX25mY19yZWFkX3BhZ2Vfc3ViKHN0cnVjdCBuYW5kX2NoaXAg Km5hbmQsCj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGRhdGFfbGVuID3CoCBtdGQt PndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZTsKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKg wqAgaW5mb19sZW4gPSBuYW5kLT5lY2Muc3RlcHMgKiBQRVJfSU5GT19CWVRFOwo+Pj4+Pj4+Pj4+ Pj4+IMKgwqDCoMKgwqAgK8KgwqDCoCByZXQgPSBtZXNvbl9uZmNfd2FpdF9kZXZfcmVhZHkobmFu ZCk7Cj4+Pj4+Pj4+Pj4+Pj4gK8KgwqDCoCBpZiAocmV0KQo+Pj4+Pj4+Pj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+Pj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0ID0gbWVzb25fbmZjX3J3X2NtZF9wcmVwYXJlX2FuZF9leGVjdXRlKG5h bmQsIHBhZ2UsIERJUlJFQUQpOwo+Pj4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAo cmV0KQo+Pj4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7 Cj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoCArwqDCoMKgIHJldCA9IG1lc29uX25mY19zZW5kX3Jl YWQobmFuZCk7Cj4+Pj4+Pj4+Pj4+Pj4gK8KgwqDCoCBpZiAocmV0KQo+Pj4+Pj4+Pj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+Pj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4+Pj4+PiDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gbWVzb25fbmZjX2RtYV9idWZmZXJfc2V0dXAobmFuZCwg bWVzb25fY2hpcC0+ZGF0YV9idWYsCj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkYXRhX2xlbiwgbWVzb25fY2hpcC0+aW5m b19idWYsCj4+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpbmZvX2xlbiwgRE1BX0ZST01fREVWSUNFKTsKPj4+Pj4+Pj4+Pj4+ PiBAQCAtNzU0LDYgKzgzNyw5IEBAIHN0YXRpYyBpbnQgbWVzb25fbmZjX3JlYWRfcGFnZV9zdWIo c3RydWN0IG5hbmRfY2hpcCAqbmFuZCwKPj4+Pj4+Pj4+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAg fQo+Pj4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gbWVzb25fbmZjX3dh aXRfZG1hX2ZpbmlzaChuZmMpOwo+Pj4+Pj4+Pj4+Pj4+ICvCoMKgwqAgaWYgKHJldCkKPj4+Pj4+ Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4+Pj4+Pj4+PiArCj4+Pj4+ Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIG1lc29uX25mY19jaGVja19lY2NfcGFnZXNfdmFs aWQobmZjLCBuYW5kLCByYXcpOwo+Pj4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg bWVzb25fbmZjX2RtYV9idWZmZXJfcmVsZWFzZShuYW5kLCBkYXRhX2xlbiwgaW5mb19sZW4sIERN QV9GUk9NX0RFVklDRSk7Cj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pgo+Pj4+Pj4+ Pgo+Pj4+Pj4+Cj4+Pj4+PgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkxpbnV4IE1URCBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdApodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW10ZC8K