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 X-Spam-Level: X-Spam-Status: No, score=-11.2 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 69926C4363A for ; Fri, 30 Oct 2020 10:27:39 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 991E520704 for ; Fri, 30 Oct 2020 10:27:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ng/Cqr57" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 991E520704 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=bootlin.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-ID: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=ESXqsQIol2KcIKy9RgoQYQd1mdaUexuszAOom8htPEQ=; b=ng/Cqr57egmzUPeiZGsIubVJn bq8u66w8Qvtx2A16nFXynE8HTRKkeANuTcLL5gZt/KMcnInFQBbiMsKr9jtoGgYMAw25XnOqxhmId mmWspJ7Sl8yLR7Tr4p1moGDBAPUXv3+AXxCLJpJA1ixXOrt8OnvMLYbRVXbu4Nl9+hXiCQl6f6vb+ 84vgtAT/emSJT2HIkJAjkTuLCC6fRCNfC+p+n/3YI9/+iymvUhGK8Fq+jGI3EsY2yK05PFfJa54BJ m1aZ8eAB2yKe2tNlHN5Gjx+yielBYXFHCxU2prdIaVKOAh42IZAMogsEOt/mQxB5lmJ+y3AIfZKkG h4qqrmpGQ==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYRcV-0005fc-34; Fri, 30 Oct 2020 10:26:55 +0000 Received: from relay6-d.mail.gandi.net ([217.70.183.198]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYRcJ-0005dh-7Q; Fri, 30 Oct 2020 10:26:45 +0000 X-Originating-IP: 91.224.148.103 Received: from xps13 (unknown [91.224.148.103]) (Authenticated sender: miquel.raynal@bootlin.com) by relay6-d.mail.gandi.net (Postfix) with ESMTPSA id DE32AC0014; Fri, 30 Oct 2020 10:26:37 +0000 (UTC) Date: Fri, 30 Oct 2020 11:26:35 +0100 From: Miquel Raynal To: =?UTF-8?B?6LW15Luq5bOw?= Subject: Re: [PATCH v13 2/8] mtd: rawnand: rockchip: NFC drivers for RK3308, RK2928 and others Message-ID: <20201030112635.162bb709@xps13> In-Reply-To: <20201030181152443876127@rock-chips.com> References: <20201028095326.15562-1-yifeng.zhao@rock-chips.com> <20201028095326.15562-3-yifeng.zhao@rock-chips.com> <20201028114826.6cd6b841@xps13> <20201030181152443876127@rock-chips.com> Organization: Bootlin X-Mailer: Claws Mail 3.17.4 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201030_062643_586125_029F1A58 X-CRM114-Status: GOOD ( 33.92 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree , vigneshr , richard , linux-kernel , linux-rockchip , robh+dt , linux-mtd , linux-arm-kernel , =?UTF-8?B?SGVpa29TdMO8Ym5lcg==?= 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 SGkg6LW15Luq5bOwLAoK6LW15Luq5bOwIDx5aWZlbmcuemhhb0Byb2NrLWNoaXBzLmNvbT4gd3Jv dGUgb24gRnJpLCAzMCBPY3QgMjAyMCAxODoxMjo1MgorMDgwMDoKCj4gSGkgTWlxdWVsLAo+IAo+ ID5IaSBZaWZlbmcsCj4gPgo+ID5BIGZldyBtb3JlIGNvbW1lbnRzIGJlbG93LCBidXQgb3ZlcmFs bCBsb29rcyBiZXR0ZXIuCj4gPgo+ID5ZaWZlbmcgWmhhbyA8eWlmZW5nLnpoYW9Acm9jay1jaGlw cy5jb20+IHdyb3RlIG9uIFdlZCwgMjggT2N0IDIwMjAKPiA+MTc6NTM6MjQgKzA4MDA6Cj4gPiAg Cj4gPj4gVGhpcyBkcml2ZXIgc3VwcG9ydHMgUm9ja2NoaXAgTkZDIChOQU5EIEZsYXNoIENvbnRy b2xsZXIpIGZvdW5kIG9uIFJLMzMwOCwKPiA+PiBSSzI5MjgsIFJLUFgzMCwgUlYxMTA4IGFuZCBv dGhlciBTT0NzLiBUaGUgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCB1c2luZwo+ID4+IDgtYml0IE5B TkQgaW50ZXJmYWNlIG9uIHRoZSBBUk0gYmFzZWQgUkszMzA4IHBsYXRmb3JtLgo+ID4+Cj4gPj4g U3VwcG9ydCBSb2NrY2hpcCBTb0NzIGFuZCBORkMgdmVyc2lvbnM6Cj4gPj4gLSBQWDMwIGFuZCBS SzMzMjYoTkZDdjkwMCkuCj4gPj4gRUNDOiAxNi80MC82MC83MCBiaXRzLzFLQi4KPiA+PiBDTE9D SzogYWhiIGFuZCBuZmMuCj4gPj4gLSBSSzMzMDggYW5kIFJWMTEwOChORkN2ODAwKS4KPiA+PiBF Q0M6IDE2IGJpdHMvMUtCLgo+ID4+IENMT0NLOiBhaGIgYW5kIG5mYy4KPiA+PiAtIFJLMzAzNiBh bmQgUkszMTI4KE5GQ3Y2MjIpLgo+ID4+IEVDQzogMTYvMjQvNDAvNjAgYml0cy8xS0IuCj4gPj4g Q0xPQ0s6IGFoYiBhbmQgbmZjLgo+ID4+IC0gUkszMDY2LCBSSzMxODggYW5kIFJLMjkyOChORkN2 NjAwKS4KPiA+PiBFQ0M6IDE2LzI0LzQwLzYwIGJpdHMvMUtCLgo+ID4+IENMT0NLOiBhaGIuCj4g Pj4KPiA+PiBTdXBwb3J0ZWQgZmVhdHVyZXM6Cj4gPj4gLSBSZWFkIGZ1bGwgcGFnZSBkYXRhIGJ5 IERNQS4KPiA+PiAtIFN1cHBvcnQgSFcgRUNDKG9uZSBzdGVwIGlzIDFLQikuCj4gPj4gLSBTdXBw b3J0IDIgLSAzMksgcGFnZSBzaXplLgo+ID4+IC0gU3VwcG9ydCA4IENTKGRlcGVuZCBvbiBTb0Nz KQo+ID4+Cj4gPj4gTGltaXRhdGlvbnM6Cj4gPj4gLSBObyBzdXBwb3J0IGZvciB0aGUgZWNjIHN0 ZXAgc2l6ZSBpcyA1MTIuCj4gPj4gLSBVbnRlc3RlZCBvbiBzb21lIFNvQ3MuCj4gPj4gLSBObyBz dXBwb3J0IGZvciBzdWJwYWdlcy4KPiA+PiAtIE5vIHN1cHBvcnQgZm9yIHRoZSBidWlsdGluIHJh bmRvbWl6ZXIuCj4gPj4gLSBUaGUgb3JpZ2luYWwgYmFkIGJsb2NrIG1hc2sgaXMgbm90IHN1cHBv cnRlZC4gSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlCj4gPj7CoMKgIHRoZSBCQlQoYmFkIGJsb2Nr IHRhYmxlKS4KPiA+Pgo+ID4+IFNpZ25lZC1vZmYtYnk6IFlpZmVuZyBaaGFvIDx5aWZlbmcuemhh b0Byb2NrLWNoaXBzLmNvbT4KPiA+PiAtLS0KPiA+Pgo+ID4+IENoYW5nZXMgaW4gdjEzOgo+ID4+ IC0gVGhlIG5mYy0+YnVmZmVyIHdpbGwgcmVhbGxvYyB3aGlsZSB0aGUgcGFnZSBzaXplIG9mIHRo ZSBzZWNvbmQgbXRkCj4gPj7CoMKgIGlzIGxhcmdlIHRoYW4gdGhlIGZpcnN0IG9uZS4KPiA+PiAt IEZpeCBjb2Rpbmcgc3R5bGUuCj4gPj4gLSBGaXggc29tZSBjb21tZW50cy4KPiA+Pgo+ID4+IENo YW5nZXMgaW4gdjEyOiBOb25lCj4gPj4gQ2hhbmdlcyBpbiB2MTE6Cj4gPj4gLSBGaXggY29tcGls ZSBlcnJvci4KPiA+Pgo+ID4+IENoYW5nZXMgaW4gdjEwOgo+ID4+IC0gRml4IGNvbXBpbGUgZXJy b3Igb24gbWFzdGVyIHY1LjktcmM3Lgo+ID4+Cj4gPj4gQ2hhbmdlcyBpbiB2OToKPiA+PiAtIFRo ZSBuZmMtPmJ1ZmZlciB3aWxsIHJlYWxsb2Mgd2hpbGUgdGhlIHBhZ2Ugc2l6ZSBvZiB0aGUgc2Vj b25kIG10ZAo+ID4+wqDCoCBpcyBsYXJnZSB0aGFuIHRoZSBmaXJzdCBvbmUKPiA+PiAtIEZpeCBj b2Rpbmcgc3R5bGUuCj4gPj4gLSBSZW1vdmUgc3RydWN0IHJrX25mY19jbGsuCj4gPj4gLSBQcmVw ZW5kIHNvbWUgZnVuY3Rpb24gd2l0aCBya19uZmNfLgo+ID4+IC0gUmVwbGFjZSBmdW5jdGlvbiBy ZWFkbF9wb2xsX3RpbWVvdXRfYXRvbWljIHdpdGggcmVhZGxfcmVsYXhlZF9wb2xsX3RpbWVvdXQu Cj4gPj4gLSBSZW1vdmUgZnVuY3Rpb24gcmtfbmZjX3JlYWRfYnl0ZSBhbmQgcmtfbmZjX3dyaXRl X2J5dGUuCj4gPj4gLSBEb24ndCBzZWxlY3QgdGhlIGRpZSBpZiAnY2hlY2tfb25seSA9PSB0cnVl JyBpbiBmdW5jdGlvbiBya19uZmNfZXhlY19vcC4KPiA+PiAtIE1vZGlmeSBmdW5jdGlvbiBya19u ZmNfd3JpdGVfcGFnZSBhbmQgcmtfbmZjX3dyaXRlX3BhZ2VfcmF3Lgo+ID4+Cj4gPj4gQ2hhbmdl cyBpbiB2ODogTm9uZQo+ID4+IENoYW5nZXMgaW4gdjc6Cj4gPj4gLSBSZWJhc2UgdG8gbGludXgt bmV4dC4KPiA+PiAtIEZpeCBjb2Rpbmcgc3R5bGUuCj4gPj4gLSBSZXNlcnZlZCA0IGJ5dGVzIGF0 IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG9vYiBhcmVhLgo+ID4+IC0gUGFnZSByYXcgcmVhZCBhbmQg d3JpdGUgaW5jbHVkZWQgZWNjIGRhdGEuCj4gPj4KPiA+PiBDaGFuZ2VzIGluIHY2Ogo+ID4+IC0g VGhlIG10ZC0+bmFtZSBzZXQgYnkgTkFORCBsYWJlbCBwcm9wZXJ0eS4KPiA+PiAtIEFkZCBzb21l IGNvbW1lbnRzLgo+ID4+IC0gRml4IGNvbXBpbGUgZXJyb3IuCj4gPj4KPiA+PiBDaGFuZ2VzIGlu IHY1Ogo+ID4+IC0gQWRkIGJvb3QgYmxvY2tzIHN1cHBvcnTCoCB3aXRoIGRpZmZlcmVudCBFQ0Mg Zm9yIGJvb3RST00uCj4gPj4gLSBSZW5hbWUgcm9ja2NoaXAtbmFuZC5jIHRvIHJvY2tjaGlwLW5h bmQtY29udHJvbGxlci5jLgo+ID4+IC0gVW5pZmljYXRpb24gb2Ygb3RoZXIgdmFyaWFibGUgbmFt ZXMuCj4gPj4gLSBSZW1vdmUgc29tZSBjb21wYXRpYmxlIGRlZmluZS4KPiA+Pgo+ID4+IENoYW5n ZXMgaW4gdjQ6Cj4gPj4gLSBEZWZpbmUgcGxhdGZvcm0gZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoZSBy ZWdpc3RlciBvZmZzZXRzLgo+ID4+IC0gVGhlIGNvbXBhdGlibGUgZGVmaW5lIHdpdGggcmt4eF9u ZmMuCj4gPj4gLSBVc2UgU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMgdG8gZGVmaW5lIFBNX09QUy4K PiA+PiAtIFVzZSBleGVjX29wIGluc3RlYWQgb2YgbGVnYWN5IGhvb2tzLgo+ID4+Cj4gPj4gQ2hh bmdlcyBpbiB2MzogTm9uZQo+ID4+IENoYW5nZXMgaW4gdjI6Cj4gPj4gLSBGaXggY29tcGlsZSBl cnJvci4KPiA+PiAtIEluY2x1ZGUgaGVhZGVyIGZpbGVzIHNvcnRlZCBieSBmaWxlIG5hbWUuCj4g Pj4KPiA+PsKgIGRyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWfCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHzCoMKgIDEyICsKPiA+PsKgIGRyaXZlcnMvbXRkL25hbmQvcmF3L01h a2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqDCoCAxICsKPiA+PsKg IC4uLi9tdGQvbmFuZC9yYXcvcm9ja2NoaXAtbmFuZC1jb250cm9sbGVyLmPCoMKgIHwgMTQ2MCAr KysrKysrKysrKysrKysrKwo+ID4+wqAgMyBmaWxlcyBjaGFuZ2VkLCAxNDczIGluc2VydGlvbnMo KykKPiA+PsKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL210ZC9uYW5kL3Jhdy9yb2NrY2hp cC1uYW5kLWNvbnRyb2xsZXIuYwo+ID4+Cj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25h bmQvcmF3L0tjb25maWcgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnCj4gPj4gaW5kZXgg NmM0NmYyNWI1N2UyLi4yY2M1MzNlNGUyMzkgMTAwNjQ0Cj4gPj4gLS0tIGEvZHJpdmVycy9tdGQv bmFuZC9yYXcvS2NvbmZpZwo+ID4+ICsrKyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L0tjb25maWcK PiA+PiBAQCAtNDYyLDYgKzQ2MiwxOCBAQCBjb25maWcgTVREX05BTkRfQVJBU0FOCj4gPj7CoCDC oCBFbmFibGVzIHRoZSBkcml2ZXIgZm9yIHRoZSBBcmFzYW4gTkFORCBmbGFzaCBjb250cm9sbGVy IG9uCj4gPj7CoCDCoCBaeW5xIFVsdHJhc2NhbGUrIE1QU29DLgo+ID4+wqAKPiA+PiArY29uZmln IE1URF9OQU5EX1JPQ0tDSElQCj4gPj4gKwl0cmlzdGF0ZSAiUm9ja2NoaXAgTkFORCBjb250cm9s bGVyIgo+ID4+ICsJZGVwZW5kcyBvbiBBUkNIX1JPQ0tDSElQICYmIEhBU19JT01FTQo+ID4+ICsJ aGVscAo+ID4+ICsJwqAgRW5hYmxlcyBzdXBwb3J0IGZvciBOQU5EIGNvbnRyb2xsZXIgb24gUm9j a2NoaXAgU29Dcy4KPiA+PiArCcKgIFRoZXJlIGFyZSBmb3VyIGRpZmZlcmVudCB2ZXJzaW9ucyBv ZiBOQU5EIEZMQVNIIENvbnRyb2xsZXJzLAo+ID4+ICsJwqAgaW5jbHVkaW5nOgo+ID4+ICsJwqDC oMKgIE5GQyB2NjAwOiBSSzI5MjgsIFJLMzA2NiwgUkszMTg4Cj4gPj4gKwnCoMKgwqAgTkZDIHY2 MjI6IFJLMzAzNiwgUkszMTI4Cj4gPj4gKwnCoMKgwqAgTkZDIHY4MDA6IFJLMzMwOCwgUlYxMTA4 Cj4gPj4gKwnCoMKgwqAgTkZDIHY5MDA6IFBYMzAsIFJLMzMyNgo+ID4+ICsKPiA+PsKgIGNvbW1l bnQgIk1pc2MiCj4gPj7CoAo+ID4+wqAgY29uZmlnIE1URF9TTV9DT01NT04KPiA+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9uYW5kL3Jh dy9NYWtlZmlsZQo+ID4+IGluZGV4IDI5MzBmNWI5MDE1ZC4uOTYwYzliZTI1MjA0IDEwMDY0NAo+ ID4+IC0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L01ha2VmaWxlCj4gPj4gKysrIGIvZHJpdmVy cy9tdGQvbmFuZC9yYXcvTWFrZWZpbGUKPiA+PiBAQCAtNTgsNiArNTgsNyBAQCBvYmotJChDT05G SUdfTVREX05BTkRfU1RNMzJfRk1DMikJKz0gc3RtMzJfZm1jMl9uYW5kLm8KPiA+PsKgIG9iai0k KENPTkZJR19NVERfTkFORF9NRVNPTikJKz0gbWVzb25fbmFuZC5vCj4gPj7CoCBvYmotJChDT05G SUdfTVREX05BTkRfQ0FERU5DRSkJKz0gY2FkZW5jZS1uYW5kLWNvbnRyb2xsZXIubwo+ID4+wqAg b2JqLSQoQ09ORklHX01URF9OQU5EX0FSQVNBTikJKz0gYXJhc2FuLW5hbmQtY29udHJvbGxlci5v Cj4gPj4gK29iai0kKENPTkZJR19NVERfTkFORF9ST0NLQ0hJUCkJKz0gcm9ja2NoaXAtbmFuZC1j b250cm9sbGVyLm8KPiA+PsKgCj4gPj7CoCBuYW5kLW9ianMgOj0gbmFuZF9iYXNlLm8gbmFuZF9s ZWdhY3kubyBuYW5kX2JidC5vIG5hbmRfdGltaW5ncy5vIG5hbmRfaWRzLm8KPiA+PsKgIG5hbmQt b2JqcyArPSBuYW5kX29uZmkubwo+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3Jh dy9yb2NrY2hpcC1uYW5kLWNvbnRyb2xsZXIuYyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L3JvY2tj aGlwLW5hbmQtY29udHJvbGxlci5jCj4gPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+PiBpbmRl eCAwMDAwMDAwMDAwMDAuLjJlOTZmZDMxNDM0Ngo+ID4+IC0tLSAvZGV2L251bGwKPiA+PiArKysg Yi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9yb2NrY2hpcC1uYW5kLWNvbnRyb2xsZXIuYwo+ID4+IEBA IC0wLDAgKzEsMTQ2MCBAQAo+ID4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCBPUiBNSVQKPiA+PiArLyoKPiA+PiArICogUm9ja2NoaXAgTkFORCBGbGFzaCBjb250cm9sbGVy IGRyaXZlci4KPiA+PiArICogQ29weXJpZ2h0IChDKSAyMDIwIFJvY2tjaGlwIEluYy4KPiA+PiAr ICogQXV0aG9yOiBZaWZlbmcgWmhhbyA8eWlmZW5nLnpoYW9Acm9jay1jaGlwcy5jb20+Cj4gPj4g KyAqLwo+ID4+ICsKPiA+PiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ID4+ICsjaW5jbHVkZSA8 bGludXgvZGVsYXkuaD4KPiA+PiArI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Cj4gPj4g KyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KPiA+PiArI2luY2x1ZGUgPGxpbnV4L2ludGVy cnVwdC5oPgo+ID4+ICsjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+Cj4gPj4gKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KPiA+PiArI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KPiA+PiArI2lu Y2x1ZGUgPGxpbnV4L210ZC9yYXduYW5kLmg+Cj4gPj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ ID4+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4gPj4gKyNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4KPiA+PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiA+PiArCj4g Pj4gKy8qCj4gPj4gKyAqIE5GQyBQYWdlIERhdGEgTGF5b3V0Ogo+ID4+ICsgKgkxMDI0IEJ5dGVz IERhdGEgKyA0Qnl0ZXMgc3lzIGRhdGEgKyAyOEJ5dGVzfjEyNEJ5dGVzIGVjYyArCj4gPj4gKyAq CTEwMjQgQnl0ZXMgRGF0YSArIDRCeXRlcyBzeXMgZGF0YSArIDI4Qnl0ZXN+MTI0Qnl0ZXMgZWNj ICsKPiA+PiArICoJLi4uLi4uCj4gPj4gKyAqIE5BTkQgUGFnZSBEYXRhIExheW91dDoKPiA+PiAr ICoJMTAyNCAqIG4gRGF0YSArIG0gQnl0ZXMgb29iCj4gPj4gKyAqIE9yaWdpbmFsIEJhZCBCbG9j ayBNYXNrIExvY2F0aW9uOgo+ID4+ICsgKglGaXJzdCBieXRlIG9mIG9vYihzcGFyZSkuCj4gPj4g KyAqIG5hbmRfY2hpcC0+b29iX3BvaSBkYXRhIGxheW91dDoKPiA+PiArICoJNEJ5dGVzIHN5cyBk YXRhICsgLi4uLiArIDRCeXRlcyBzeXMgZGF0YSArIGVjYyBkYXRhLgo+ID4+ICsgKi8KPiA+PiAr Cj4gPj4gKy8qIE5BTkQgY29udHJvbGxlciByZWdpc3RlciBkZWZpbml0aW9uICovCj4gPj4gKyNk ZWZpbmUgTkZDX1JFQUQJKDApCj4gPj4gKyNkZWZpbmUgTkZDX1dSSVRFCSgxKQo+ID4+ICsKPiA+ PiArI2RlZmluZSBORkNfRk1DVEwJKDB4MDApCj4gPj4gKyNkZWZpbmXCoMKgIEZNQ1RMX0NFX1NF TF9NCTB4RkYKPiA+PiArI2RlZmluZcKgwqAgRk1DVExfQ0VfU0VMKHgpCSgxIDw8ICh4KSkKPiA+ PiArI2RlZmluZcKgwqAgRk1DVExfV1AJQklUKDgpCj4gPj4gKyNkZWZpbmXCoMKgIEZNQ1RMX1JE WQlCSVQoOSkKPiA+PiArCj4gPj4gKyNkZWZpbmUgTkZDX0ZNV0FJVAkoMHgwNCkKPiA+PiArI2Rl ZmluZcKgwqAgRkxDVExfUlNUCUJJVCgwKQo+ID4+ICsjZGVmaW5lwqDCoCBGTENUTF9XUgkoMSkJ LyogMDogcmVhZCwgMTogd3JpdGUgKi8KPiA+PiArI2RlZmluZcKgwqAgRkxDVExfWEZFUl9TVAlC SVQoMikKPiA+PiArI2RlZmluZcKgwqAgRkxDVExfWEZFUl9FTglCSVQoMykKPiA+PiArI2RlZmlu ZcKgwqAgRkxDVExfQUNPUlJFQ1QJQklUKDEwKSAvKiBBdXRvIGNvcnJlY3QgZXJyb3IgYml0cy4g Ki8KPiA+PiArI2RlZmluZcKgwqAgRkxDVExfWEZFUl9SRUFEWQlCSVQoMjApCj4gPj4gKyNkZWZp bmXCoMKgIEZMQ1RMX1hGRVJfU0VDVE9SCSgyMikKPiA+PiArI2RlZmluZcKgwqAgRkxDVExfVE9H X0ZJWAlCSVQoMjkpCj4gPj4gKwo+ID4+ICsjZGVmaW5lwqDCoCBCQ0hDVExfQkFOS19NCSg3IDw8 IDUpCj4gPj4gKyNkZWZpbmXCoMKgIEJDSENUTF9CQU5LCSg1KQo+ID4+ICsKPiA+PiArI2RlZmlu ZcKgwqAgRE1BX1NUCUJJVCgwKQo+ID4+ICsjZGVmaW5lwqDCoCBETUFfV1IJKDEpCS8qIDA6IHdy aXRlLCAxOiByZWFkICovCj4gPj4gKyNkZWZpbmXCoMKgIERNQV9FTglCSVQoMikKPiA+PiArI2Rl ZmluZcKgwqAgRE1BX0FIQl9TSVpFCSgzKQkvKiAwOiAxLCAxOiAyLCAyOiA0ICovCj4gPj4gKyNk ZWZpbmXCoMKgIERNQV9CVVJTVF9TSVpFCSg2KQkvKiAwOiAxLCAzOiA0LCA1OiA4LCA3OiAxNiAq Lwo+ID4+ICsjZGVmaW5lwqDCoCBETUFfSU5DX05VTQkoOSkJLyogMSAtIDE2ICovCj4gPj4gKwo+ ID4+ICsjZGVmaW5lIEVDQ19FUlJfQ05UKHgsIGUpICgoKCh4KSA+PiAoZSkubG93KSAmIChlKS5s b3dfbWFzaykgfFwKPiA+PiArCcKgICgoKHgpID4+IChlKS5oaWdoKSAmIChlKS5oaWdoX21hc2sp IDw8IChlKS5sb3dfYm4pCj4gPj4gKyNkZWZpbmXCoMKgIElOVF9ETUEJQklUKDApCj4gPj4gKyNk ZWZpbmUgTkZDX0JBTksJKDB4ODAwKQo+ID4+ICsjZGVmaW5lIE5GQ19CQU5LX1NURVAJKDB4MTAw KQo+ID4+ICsjZGVmaW5lwqDCoCBCQU5LX0RBVEEJKDB4MDApCj4gPj4gKyNkZWZpbmXCoMKgIEJB TktfQUREUgkoMHgwNCkKPiA+PiArI2RlZmluZcKgwqAgQkFOS19DTUQJKDB4MDgpCj4gPj4gKyNk ZWZpbmUgTkZDX1NSQU0wCSgweDEwMDApCj4gPj4gKyNkZWZpbmUgTkZDX1NSQU0xCSgweDE0MDAp Cj4gPj4gKyNkZWZpbmUgTkZDX1NSQU1fU0laRQkoMHg0MDApCj4gPj4gKyNkZWZpbmUgTkZDX1RJ TUVPVVQJKDUwMDAwMCkKPiA+PiArI2RlZmluZSBORkNfTUFYX09PQl9QRVJfU1RFUAkxMjgKPiA+ PiArI2RlZmluZSBORkNfTUlOX09PQl9QRVJfU1RFUAk2NAo+ID4+ICsjZGVmaW5lIE1BWF9EQVRB X1NJWkUJMHhGRkZDCj4gPj4gKyNkZWZpbmUgTUFYX0FERFJFU1NfQ1lDCTYKPiA+PiArI2RlZmlu ZSBORkNfRUNDX01BWF9NT0RFUwk0Cj4gPj4gKyNkZWZpbmUgTkZDX01BWF9OU0VMUwkoOCkgLyog U29tZSBTb2NzIG9ubHkgaGF2ZSAxIG9yIDIgQ1NzLiAqLwo+ID4+ICsjZGVmaW5lIE5GQ19TWVNf REFUQV9TSVpFCSg0KSAvKiA0IGJ5dGVzIHN5cyBkYXRhIGluIG9vYiBwcmUgMTAyNCBkYXRhLiov Cj4gPj4gKyNkZWZpbmUgUktfREVGQVVMVF9DTE9DS19SQVRFCSgxNTAgKiAxMDAwICogMTAwMCkg LyogMTUwIE1oeiAqLwo+ID4+ICsjZGVmaW5lIEFDQ1RJTUlORyhjc3J3LCByd3B3LCByd2NzKQko KGNzcncpIDw8IDEyIHwgKHJ3cHcpIDw8IDUgfCAocndjcykpCj4gPj4gKwo+ID4+ICtlbnVtIG5m Y190eXBlIHsKPiA+PiArCU5GQ19WNiwKPiA+PiArCU5GQ19WOCwKPiA+PiArCU5GQ19WOSwKPiA+ PiArfTsKPiA+PiArCj4gPj4gKy8qKgo+ID4+ICsgKiBzdHJ1Y3QgcmtfZWNjX2NudF9zdGF0dXM6 IHJlcHJlc2VudCBhIGVjYyBzdGF0dXMgZGF0YS4KPiA+PiArICogQGVycl9mbGFnX2JpdDogZXJy b3IgZmxhZyBiaXQgaW5kZXggYXQgcmVnaXN0ZXIuCj4gPj4gKyAqIEBsb3c6IGVjYyBjb3VudCBs b3cgYml0IGluZGV4IGF0IHJlZ2lzdGVyLgo+ID4+ICsgKiBAbG93X21hc2s6IG1hc2sgYml0Lgo+ ID4+ICsgKiBAbG93X2JuOiBlY2MgY291bnQgbG93IGJpdCBudW1iZXIuCj4gPj4gKyAqIEBoaWdo OiBlY2MgY291bnQgaGlnaCBiaXQgaW5kZXggYXQgcmVnaXN0ZXIuCj4gPj4gKyAqIEBoaWdoX21h c2s6IG1hc2sgYml0Cj4gPj4gKyAqLwo+ID4+ICtzdHJ1Y3QgZWNjX2NudF9zdGF0dXMgewo+ID4+ ICsJdTggZXJyX2ZsYWdfYml0Owo+ID4+ICsJdTggbG93Owo+ID4+ICsJdTggbG93X21hc2s7Cj4g Pj4gKwl1OCBsb3dfYm47Cj4gPj4gKwl1OCBoaWdoOwo+ID4+ICsJdTggaGlnaF9tYXNrOwo+ID4+ ICt9Owo+ID4+ICsKPiA+PiArLyoKPiA+PiArICogQHR5cGU6IG5mYyB2ZXJzaW9uCj4gPj4gKyAq IEBlY2Nfc3RyZW5ndGhzOiBlY2Mgc3RyZW5ndGhzCj4gPj4gKyAqIEBlY2NfY2ZnczogZWNjIGNv bmZpZyB2YWx1ZXMKPiA+PiArICogQGZsY3RsX29mZjogRkxDVEwgcmVnaXN0ZXIgb2Zmc2V0Cj4g Pj4gKyAqIEBiY2hjdGxfb2ZmOiBCQ0hDVEwgcmVnaXN0ZXIgb2Zmc2V0Cj4gPj4gKyAqIEBkbWFf ZGF0YV9idWZfb2ZmOiBETUFfREFUQV9CVUYgcmVnaXN0ZXIgb2Zmc2V0Cj4gPj4gKyAqIEBkbWFf b29iX2J1Zl9vZmY6IERNQV9PT0JfQlVGIHJlZ2lzdGVyIG9mZnNldAo+ID4+ICsgKiBAZG1hX2Nm Z19vZmY6IERNQV9DRkcgcmVnaXN0ZXIgb2Zmc2V0Cj4gPj4gKyAqIEBkbWFfc3Rfb2ZmOiBETUFf U1QgcmVnaXN0ZXIgb2Zmc2V0Cj4gPj4gKyAqIEBiY2hfc3Rfb2ZmOiBCQ0dfU1QgcmVnaXN0ZXIg b2Zmc2V0Cj4gPj4gKyAqIEByYW5kbXpfb2ZmOiBSQU5ETVogcmVnaXN0ZXIgb2Zmc2V0Cj4gPj4g KyAqIEBpbnRfZW5fb2ZmOiBpbnRlcnJ1cHQgZW5hYmxlIHJlZ2lzdGVyIG9mZnNldAo+ID4+ICsg KiBAaW50X2Nscl9vZmY6IGludGVycnVwdCBjbGVhbiByZWdpc3RlciBvZmZzZXQKPiA+PiArICog QGludF9zdF9vZmY6IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgb2Zmc2V0Cj4gPj4gKyAqIEBv b2IwX29mZjogb29iMCByZWdpc3RlciBvZmZzZXQKPiA+PiArICogQG9vYjFfb2ZmOiBvb2IxIHJl Z2lzdGVyIG9mZnNldAo+ID4+ICsgKiBAZWNjMDogcmVwcmVzZW50IEVDQzAgc3RhdHVzIGRhdGEK PiA+PiArICogQGVjYzE6IHJlcHJlc2VudCBFQ0MxIHN0YXR1cyBkYXRhCj4gPj4gKyAqLwo+ID4+ ICtzdHJ1Y3QgbmZjX2NmZyB7Cj4gPj4gKwllbnVtIG5mY190eXBlIHR5cGU7Cj4gPj4gKwl1OCBl Y2Nfc3RyZW5ndGhzW05GQ19FQ0NfTUFYX01PREVTXTsKPiA+PiArCXUzMiBlY2NfY2Znc1tORkNf RUNDX01BWF9NT0RFU107Cj4gPj4gKwl1MzIgZmxjdGxfb2ZmOwo+ID4+ICsJdTMyIGJjaGN0bF9v ZmY7Cj4gPj4gKwl1MzIgZG1hX2NmZ19vZmY7Cj4gPj4gKwl1MzIgZG1hX2RhdGFfYnVmX29mZjsK PiA+PiArCXUzMiBkbWFfb29iX2J1Zl9vZmY7Cj4gPj4gKwl1MzIgZG1hX3N0X29mZjsKPiA+PiAr CXUzMiBiY2hfc3Rfb2ZmOwo+ID4+ICsJdTMyIHJhbmRtel9vZmY7Cj4gPj4gKwl1MzIgaW50X2Vu X29mZjsKPiA+PiArCXUzMiBpbnRfY2xyX29mZjsKPiA+PiArCXUzMiBpbnRfc3Rfb2ZmOwo+ID4+ ICsJdTMyIG9vYjBfb2ZmOwo+ID4+ICsJdTMyIG9vYjFfb2ZmOwo+ID4+ICsJc3RydWN0IGVjY19j bnRfc3RhdHVzIGVjYzA7Cj4gPj4gKwlzdHJ1Y3QgZWNjX2NudF9zdGF0dXMgZWNjMTsKPiA+PiAr fTsKPiA+PiArCj4gPj4gK3N0cnVjdCBya19uZmNfbmFuZF9jaGlwIHsKPiA+PiArCXN0cnVjdCBs aXN0X2hlYWQgbm9kZTsKPiA+PiArCXN0cnVjdCBuYW5kX2NoaXAgY2hpcDsKPiA+PiArCj4gPj4g Kwl1MTYgc3BhcmVfcGVyX3NlY3RvcjsKPiA+PiArCXUxNiBvb2JfYnVmX3Blcl9zZWN0b3I7Cj4g Pj4gKwl1MTYgYm9vdF9ibGtzOwo+ID4+ICsJdTE2IGJvb3RfZWNjOwo+ID4+ICsJdTE2IG1ldGFk YXRhX3NpemU7Cj4gPj4gKwo+ID4+ICsJdTggbnNlbHM7Cj4gPj4gKwl1OCBzZWxzWzBdOwo+ID4+ ICsJLyogTm90aGluZyBhZnRlciB0aGlzIGZpZWxkLiAqLwo+ID4+ICt9Owo+ID4+ICsKPiA+PiAr c3RydWN0IHJrX25mYyB7Cj4gPj4gKwlzdHJ1Y3QgbmFuZF9jb250cm9sbGVyIGNvbnRyb2xsZXI7 Cj4gPj4gKwljb25zdCBzdHJ1Y3QgbmZjX2NmZyAqY2ZnOwo+ID4+ICsJc3RydWN0IGRldmljZSAq ZGV2Owo+ID4+ICsKPiA+PiArCXN0cnVjdCBjbGsgKm5mY19jbGs7Cj4gPj4gKwlzdHJ1Y3QgY2xr ICphaGJfY2xrOwo+ID4+ICsJdm9pZCBfX2lvbWVtICpyZWdzOwo+ID4+ICsKPiA+PiArCXUzMiBz ZWxlY3RlZF9iYW5rOwo+ID4+ICsJdTMyIGJhbmRfb2Zmc2V0Owo+ID4+ICsJdTMyIGN1cl9jbGs7 Cj4gPj4gKwo+ID4+ICsJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKPiA+PiArCXN0cnVjdCBsaXN0 X2hlYWQgY2hpcHM7Cj4gPj4gKwo+ID4+ICsJdTggKmJ1ZmZlcjsKPiA+PiArCXU4ICpwYWdlX2J1 ZjsKPiA+PiArCXUzMiAqb29iX2J1ZjsKPiA+PiArCXUzMiBidWZmZXJfc2l6ZTsKPiA+PiArCXUz MiBvb2JfYnVmX3NpemU7Cj4gPj4gKwo+ID4+ICsJdW5zaWduZWQgbG9uZyBhc3NpZ25lZF9jczsK PiA+PiArfTsKPiA+PiArCj4gPj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJrX25mY19uYW5kX2No aXAgKnJrX25mY190b19ya25hbmQoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCkKPiA+PiArewo+ID4+ ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcmtfbmZjX25hbmRfY2hpcCwgY2hp cCk7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyBpbmxpbmUgdTggKnJrX25mY19idWZfdG9f ZGF0YV9wdHIoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgY29uc3QgdTggKnAsIGludCBpKQo+ID4+ ICt7Cj4gPj4gKwlyZXR1cm4gKHU4ICopcCArIGkgKiBjaGlwLT5lY2Muc2l6ZTsKPiA+PiArfQo+ ID4+ICsKPiA+PiArc3RhdGljIGlubGluZSB1OCAqcmtfbmZjX2J1Zl90b19vb2JfcHRyKHN0cnVj dCBuYW5kX2NoaXAgKmNoaXAsIGludCBpKQo+ID4+ICt7Cj4gPj4gKwl1OCAqcG9pOwo+ID4+ICsK PiA+PiArCXBvaSA9IGNoaXAtPm9vYl9wb2kgKyBpICogTkZDX1NZU19EQVRBX1NJWkU7Cj4gPj4g Kwo+ID4+ICsJcmV0dXJuIHBvaTsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIGlubGluZSB1 OCAqcmtfbmZjX2J1Zl90b19vb2JfZWNjX3B0cihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQg aSkKPiA+PiArewo+ID4+ICsJc3RydWN0IHJrX25mY19uYW5kX2NoaXAgKnJrbmFuZCA9IHJrX25m Y190b19ya25hbmQoY2hpcCk7Cj4gPj4gKwl1OCAqcG9pOwo+ID4+ICsKPiA+PiArCXBvaSA9IGNo aXAtPm9vYl9wb2kgKyBya25hbmQtPm1ldGFkYXRhX3NpemUgKwo+ID4+ICsJwqDCoMKgwqDCoCBj aGlwLT5lY2MuYnl0ZXMgKiBpOwo+ID4+ICsKPiA+PiArCXJldHVybiBwb2k7Cj4gPj4gK30KPiA+ PiArCj4gPj4gK3N0YXRpYyBpbmxpbmUgaW50IHJrX25mY19kYXRhX2xlbihzdHJ1Y3QgbmFuZF9j aGlwICpjaGlwKQo+ID4+ICt7Cj4gPj4gKwlzdHJ1Y3QgcmtfbmZjX25hbmRfY2hpcCAqcmtuYW5k ID0gcmtfbmZjX3RvX3JrbmFuZChjaGlwKTsKPiA+PiArCj4gPj4gKwlyZXR1cm4gY2hpcC0+ZWNj LnNpemUgKyBya25hbmQtPnNwYXJlX3Blcl9zZWN0b3I7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0 YXRpYyBpbmxpbmUgdTggKnJrX25mY19kYXRhX3B0cihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLMKg IGludCBpKQo+ID4+ICt7Cj4gPj4gKwlzdHJ1Y3QgcmtfbmZjICpuZmMgPSBuYW5kX2dldF9jb250 cm9sbGVyX2RhdGEoY2hpcCk7Cj4gPj4gKwo+ID4+ICsJcmV0dXJuIG5mYy0+YnVmZmVyICsgaSAq IHJrX25mY19kYXRhX2xlbihjaGlwKTsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIGlubGlu ZSB1OCAqcmtfbmZjX29vYl9wdHIoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgaW50IGkpCj4gPj4g K3sKPiA+PiArCXN0cnVjdCBya19uZmMgKm5mYyA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShj aGlwKTsKPiA+PiArCj4gPj4gKwlyZXR1cm4gbmZjLT5idWZmZXIgKyBpICogcmtfbmZjX2RhdGFf bGVuKGNoaXApICsgY2hpcC0+ZWNjLnNpemU7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyB2 b2lkIHJrX25mY19zZWxlY3RfY2hpcChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgY3MpCj4g Pj4gK3sKPiA+PiArCXN0cnVjdCBya19uZmMgKm5mYyA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0 YShjaGlwKTsKPiA+PiArCXN0cnVjdCBya19uZmNfbmFuZF9jaGlwICpya25hbmQgPSBya19uZmNf dG9fcmtuYW5kKGNoaXApOwo+ID4+ICsJdTMyIHZhbDsKPiA+PiArCj4gPj4gKwlpZiAoY3MgPCAw KSB7Cj4gPj4gKwluZmMtPnNlbGVjdGVkX2JhbmsgPSAtMTsKPiA+PiArCS8qIERlc2VsZWN0IHRo ZSBjdXJyZW50bHkgc2VsZWN0ZWQgdGFyZ2V0LiAqLwo+ID4+ICsJdmFsID0gcmVhZGxfcmVsYXhl ZChuZmMtPnJlZ3MgKyBORkNfRk1DVEwpOwo+ID4+ICsJdmFsICY9IH5GTUNUTF9DRV9TRUxfTTsK PiA+PiArCXdyaXRlbCh2YWwsIG5mYy0+cmVncyArIE5GQ19GTUNUTCk7Cj4gPj4gKwlyZXR1cm47 Cj4gPj4gKwl9Cj4gPj4gKwo+ID4+ICsJbmZjLT5zZWxlY3RlZF9iYW5rID0gcmtuYW5kLT5zZWxz W2NzXTsKPiA+PiArCW5mYy0+YmFuZF9vZmZzZXQgPSBORkNfQkFOSyArIG5mYy0+c2VsZWN0ZWRf YmFuayAqIE5GQ19CQU5LX1NURVA7Cj4gPj4gKwo+ID4+ICsJdmFsID0gcmVhZGxfcmVsYXhlZChu ZmMtPnJlZ3MgKyBORkNfRk1DVEwpOwo+ID4+ICsJdmFsICY9IH5GTUNUTF9DRV9TRUxfTTsKPiA+ PiArCXZhbCB8PSBGTUNUTF9DRV9TRUwobmZjLT5zZWxlY3RlZF9iYW5rKTsKPiA+PiArCj4gPj4g Kwl3cml0ZWwodmFsLCBuZmMtPnJlZ3MgKyBORkNfRk1DVEwpOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ ICtzdGF0aWMgaW5saW5lIGludCBya19uZmNfd2FpdF9pb3JlYWR5KHN0cnVjdCBya19uZmMgKm5m YykKPiA+PiArewo+ID4+ICsJaW50IHJjOwo+ID4+ICsJdTMyIHZhbDsKPiA+PiArCj4gPj4gKwly YyA9IHJlYWRsX3JlbGF4ZWRfcG9sbF90aW1lb3V0KG5mYy0+cmVncyArIE5GQ19GTUNUTCwgdmFs LAo+ID4+ICsJdmFsICYgRk1DVExfUkRZLCAxMCwgTkZDX1RJTUVPVVQpOwo+ID4+ICsKPiA+PiAr CXJldHVybiByYzsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIHZvaWQgcmtfbmZjX3JlYWRf YnVmKHN0cnVjdCBya19uZmMgKm5mYywgdTggKmJ1ZiwgaW50IGxlbikKPiA+PiArewo+ID4+ICsJ aW50IGk7Cj4gPj4gKwo+ID4+ICsJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQo+ID4+ICsJYnVm W2ldID0gcmVhZGJfcmVsYXhlZChuZmMtPnJlZ3MgKyBuZmMtPmJhbmRfb2Zmc2V0ICsKPiA+PiAr CcKgwqDCoMKgwqDCoCBCQU5LX0RBVEEpOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgdm9p ZCBya19uZmNfd3JpdGVfYnVmKHN0cnVjdCBya19uZmMgKm5mYywgY29uc3QgdTggKmJ1ZiwgaW50 IGxlbikKPiA+PiArewo+ID4+ICsJaW50IGk7Cj4gPj4gKwo+ID4+ICsJZm9yIChpID0gMDsgaSA8 IGxlbjsgaSsrKQo+ID4+ICsJd3JpdGViKGJ1ZltpXSwgbmZjLT5yZWdzICsgbmZjLT5iYW5kX29m ZnNldCArIEJBTktfREFUQSk7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyBpbnQgcmtfbmZj X2NtZChzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAo+ID4+ICsJwqDCoMKgwqDCoCBjb25zdCBzdHJ1 Y3QgbmFuZF9zdWJvcCAqc3Vib3ApCj4gPj4gK3sKPiA+PiArCXN0cnVjdCBya19uZmMgKm5mYyA9 IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShjaGlwKTsKPiA+PiArCXVuc2lnbmVkIGludCBpLCBq LCByZW1haW5pbmcsIHN0YXJ0Owo+ID4+ICsJaW50IHJlZ19vZmZzZXQgPSBuZmMtPmJhbmRfb2Zm c2V0Owo+ID4+ICsJdTggKmluYnVmID0gTlVMTDsKPiA+PiArCWNvbnN0IHU4ICpvdXRidWY7Cj4g Pj4gKwl1MzIgY250ID0gMDsKPiA+PiArCWludCByZXQgPSAwOwo+ID4+ICsKPiA+PiArCWZvciAo aSA9IDA7IGkgPCBzdWJvcC0+bmluc3RyczsgaSsrKSB7Cj4gPj4gKwljb25zdCBzdHJ1Y3QgbmFu ZF9vcF9pbnN0ciAqaW5zdHIgPSAmc3Vib3AtPmluc3Ryc1tpXTsKPiA+PiArCj4gPj4gKwlzd2l0 Y2ggKGluc3RyLT50eXBlKSB7Cj4gPj4gKwljYXNlIE5BTkRfT1BfQ01EX0lOU1RSOgo+ID4+ICsJ d3JpdGViKGluc3RyLT5jdHguY21kLm9wY29kZSwKPiA+PiArCcKgwqDCoMKgwqDCoCBuZmMtPnJl Z3MgKyByZWdfb2Zmc2V0ICsgQkFOS19DTUQpOwo+ID4+ICsJYnJlYWs7Cj4gPj4gKwo+ID4+ICsJ Y2FzZSBOQU5EX09QX0FERFJfSU5TVFI6Cj4gPj4gKwlyZW1haW5pbmcgPSBuYW5kX3N1Ym9wX2dl dF9udW1fYWRkcl9jeWMoc3Vib3AsIGkpOwo+ID4+ICsJc3RhcnQgPSBuYW5kX3N1Ym9wX2dldF9h ZGRyX3N0YXJ0X29mZihzdWJvcCwgaSk7Cj4gPj4gKwo+ID4+ICsJZm9yIChqID0gMDsgaiA8IDgg JiYgaiArIHN0YXJ0IDwgcmVtYWluaW5nOyBqKyspCj4gPj4gKwl3cml0ZWIoaW5zdHItPmN0eC5h ZGRyLmFkZHJzW2ogKyBzdGFydF0sCj4gPj4gKwnCoMKgwqDCoMKgwqAgbmZjLT5yZWdzICsgcmVn X29mZnNldCArIEJBTktfQUREUik7Cj4gPj4gKwlicmVhazsKPiA+PiArCj4gPj4gKwljYXNlIE5B TkRfT1BfREFUQV9JTl9JTlNUUjoKPiA+PiArCWNhc2UgTkFORF9PUF9EQVRBX09VVF9JTlNUUjoK PiA+PiArCXN0YXJ0ID0gbmFuZF9zdWJvcF9nZXRfZGF0YV9zdGFydF9vZmYoc3Vib3AsIGkpOwo+ ID4+ICsJY250ID0gbmFuZF9zdWJvcF9nZXRfZGF0YV9sZW4oc3Vib3AsIGkpOwo+ID4+ICsKPiA+ PiArCWlmIChpbnN0ci0+dHlwZSA9PSBOQU5EX09QX0RBVEFfT1VUX0lOU1RSKSB7Cj4gPj4gKwlv dXRidWYgPSBpbnN0ci0+Y3R4LmRhdGEuYnVmLm91dCArIHN0YXJ0Owo+ID4+ICsJcmtfbmZjX3dy aXRlX2J1ZihuZmMsIG91dGJ1ZiwgY250KTsKPiA+PiArCX0gZWxzZSB7Cj4gPj4gKwlpbmJ1ZiA9 IGluc3RyLT5jdHguZGF0YS5idWYuaW4gKyBzdGFydDsKPiA+PiArCXJrX25mY19yZWFkX2J1Zihu ZmMsIGluYnVmLCBjbnQpOwo+ID4+ICsJfQo+ID4+ICsJYnJlYWs7Cj4gPj4gKwo+ID4+ICsJY2Fz ZSBOQU5EX09QX1dBSVRSRFlfSU5TVFI6Cj4gPj4gKwlpZiAocmtfbmZjX3dhaXRfaW9yZWFkeShu ZmMpIDwgMCkgewo+ID4+ICsJcmV0ID0gLUVUSU1FRE9VVDsKPiA+PiArCWRldl9lcnIobmZjLT5k ZXYsICJJTyBub3QgcmVhZHlcbiIpOwo+ID4+ICsJfQo+ID4+ICsJYnJlYWs7Cj4gPj4gKwl9Cj4g Pj4gKwl9Cj4gPj4gKwo+ID4+ICsJcmV0dXJuIHJldDsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3Rh dGljIGNvbnN0IHN0cnVjdCBuYW5kX29wX3BhcnNlciBya19uZmNfb3BfcGFyc2VyID0gTkFORF9P UF9QQVJTRVIoCj4gPj4gKwlOQU5EX09QX1BBUlNFUl9QQVRURVJOKAo+ID4+ICsJcmtfbmZjX2Nt ZCwKPiA+PiArCU5BTkRfT1BfUEFSU0VSX1BBVF9DTURfRUxFTSh0cnVlKSwKPiA+PiArCU5BTkRf T1BfUEFSU0VSX1BBVF9BRERSX0VMRU0odHJ1ZSwgTUFYX0FERFJFU1NfQ1lDKSwKPiA+PiArCU5B TkRfT1BfUEFSU0VSX1BBVF9DTURfRUxFTSh0cnVlKSwKPiA+PiArCU5BTkRfT1BfUEFSU0VSX1BB VF9XQUlUUkRZX0VMRU0odHJ1ZSksCj4gPj4gKwlOQU5EX09QX1BBUlNFUl9QQVRfREFUQV9JTl9F TEVNKHRydWUsIE1BWF9EQVRBX1NJWkUpKSwKPiA+PiArCU5BTkRfT1BfUEFSU0VSX1BBVFRFUk4o Cj4gPj4gKwlya19uZmNfY21kLAo+ID4+ICsJTkFORF9PUF9QQVJTRVJfUEFUX0NNRF9FTEVNKHRy dWUpLAo+ID4+ICsJTkFORF9PUF9QQVJTRVJfUEFUX0FERFJfRUxFTSh0cnVlLCBNQVhfQUREUkVT U19DWUMpLAo+ID4+ICsJTkFORF9PUF9QQVJTRVJfUEFUX0RBVEFfT1VUX0VMRU0odHJ1ZSwgTUFY X0RBVEFfU0laRSksCj4gPj4gKwlOQU5EX09QX1BBUlNFUl9QQVRfQ01EX0VMRU0odHJ1ZSksCj4g Pj4gKwlOQU5EX09QX1BBUlNFUl9QQVRfV0FJVFJEWV9FTEVNKHRydWUpKSwKPiA+PiArKTsKPiA+ PiArCj4gPj4gK3N0YXRpYyBpbnQgcmtfbmZjX2V4ZWNfb3Aoc3RydWN0IG5hbmRfY2hpcCAqY2hp cCwKPiA+PiArCcKgIGNvbnN0IHN0cnVjdCBuYW5kX29wZXJhdGlvbiAqb3AsCj4gPj4gKwnCoCBi b29sIGNoZWNrX29ubHkpCj4gPj4gK3sKPiA+PiArCWlmICghY2hlY2tfb25seSkKPiA+PiArCXJr X25mY19zZWxlY3RfY2hpcChjaGlwLCBvcC0+Y3MpOwo+ID4+ICsKPiA+PiArCXJldHVybiBuYW5k X29wX3BhcnNlcl9leGVjX29wKGNoaXAsICZya19uZmNfb3BfcGFyc2VyLCBvcCwKPiA+PiArCcKg wqDCoMKgwqAgY2hlY2tfb25seSk7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyBpbnQgcmtf bmZjX3NldHVwX2RhdGFfaW50ZXJmYWNlKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGludCBjc2xp bmUsCj4gPj4gKwnCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IG5hbmRfaW50ZXJmYWNlX2NvbmZp ZyAqY29uZikgIAo+ID4KPiA+UGxlYXNlIGhhdmUgYSBsb29rIGF0IHRoZSByZWNlbnQgY2hhbmdl cyBpbiB0aGUgY29yZSwgdGhpcyBoZWxwZXIKPiA+c2hvdWxkIGJlIG5hbWVkICJzZXR1cF9pbnRl cmZhY2UiLgo+ID4gIAo+ID4+ICt7Cj4gPj4gKwlzdHJ1Y3QgcmtfbmZjICpuZmMgPSBuYW5kX2dl dF9jb250cm9sbGVyX2RhdGEoY2hpcCk7Cj4gPj4gKwljb25zdCBzdHJ1Y3QgbmFuZF9zZHJfdGlt aW5ncyAqdGltaW5nczsKPiA+PiArCXUzMiByYXRlLCB0YzJydywgdHJ3cHcsIHRydzJjOwo+ID4+ ICsJdTMyIHRlbXA7Cj4gPj4gKwo+ID4+ICsJaWYgKGNzbGluZSA9PSBOQU5EX0RBVEFfSUZBQ0Vf Q0hFQ0tfT05MWSkKPiA+PiArCXJldHVybiAwOwo+ID4+ICsKPiA+PiArCXRpbWluZ3MgPSBuYW5k X2dldF9zZHJfdGltaW5ncyhjb25mKTsKPiA+PiArCWlmIChJU19FUlIodGltaW5ncykpCj4gPj4g KwlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gPj4gKwo+ID4+ICsJaWYgKElTX0VSUihuZmMtPm5mY19j bGspKQo+ID4+ICsJcmF0ZSA9IGNsa19nZXRfcmF0ZShuZmMtPmFoYl9jbGspOwo+ID4+ICsJZWxz ZQo+ID4+ICsJcmF0ZSA9IGNsa19nZXRfcmF0ZShuZmMtPm5mY19jbGspOwo+ID4+ICsKPiA+PiAr CS8qIFR1cm4gY2xvY2sgcmF0ZSBpbnRvIGtIei4gKi8KPiA+PiArCXJhdGUgLz0gMTAwMDsKPiA+ PiArCj4gPj4gKwl0YzJydyA9IDE7Cj4gPj4gKwl0cncyYyA9IDE7Cj4gPj4gKwo+ID4+ICsJdHJ3 cHcgPSBtYXgodGltaW5ncy0+dFdDX21pbiwgdGltaW5ncy0+dFJDX21pbikgLyAxMDAwOwo+ID4+ ICsJdHJ3cHcgPSBESVZfUk9VTkRfVVAodHJ3cHcgKiByYXRlLCAxMDAwMDAwKTsKPiA+PiArCj4g Pj4gKwl0ZW1wID0gdGltaW5ncy0+dFJFQV9tYXggLyAxMDAwOwo+ID4+ICsJdGVtcCA9IERJVl9S T1VORF9VUCh0ZW1wICogcmF0ZSwgMTAwMDAwMCk7Cj4gPj4gKwo+ID4+ICsJaWYgKHRyd3B3IDwg dGVtcCkKPiA+PiArCXRyd3B3ID0gdGVtcDsKPiA+PiArCj4gPj4gKwkvKgo+ID4+ICsJKiBBQ0NP TjogYWNjZXNzIHRpbWluZyBjb250cm9sIHJlZ2lzdGVyCj4gPj4gKwkqIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+PiArCSogMzE6MTg6IHJlc2VydmVkCj4gPj4gKwkq IDE3OjEyOiBjc3J3LCBjbG9jayBjeWNsZXMgZnJvbSB0aGUgZmFsbGluZyBlZGdlIG9mIENTbiB0 byB0aGUKPiA+PiArCSrCoMKgIGZhbGxpbmcgZWRnZSBvZiBSRG4gb3IgV1JuCj4gPj4gKwkqIDEx OjExOiByZXNlcnZlZAo+ID4+ICsJKiAxMDowNTogcndwdywgdGhlIHdpZHRoIG9mIFJEbiBvciBX Um4gaW4gcHJvY2Vzc29yIGNsb2NrIGN5Y2xlcwo+ID4+ICsJKiAwNDowMDogcndjcywgY2xvY2sg Y3ljbGVzIGZyb20gdGhlIHJpc2luZyBlZGdlIG9mIFJEbiBvciBXUm4gdG8gdGhlCj4gPj4gKwkq wqDCoCByaXNpbmcgZWRnZSBvZiBDU24KPiA+PiArCSovCj4gPj4gKwl0ZW1wID0gQUNDVElNSU5H KHRjMnJ3LCB0cndwdywgdHJ3MmMpOwo+ID4+ICsJd3JpdGVsKHRlbXAsIG5mYy0+cmVncyArIE5G Q19GTVdBSVQpOyAgCj4gPgo+ID5Zb3Ugc2hvdWxkIHNhdmUgdGhlIGNoaXAncyB0aW1pbmcgY29u ZmlndXJhdGlvbiBpbnN0ZWFkIG9mIHdyaXRpbmcgaXQKPiA+aGVyZSwgYW5kIHNldHRpbmcgdGhl IHJlZ2lzdGVyIHZhbHVlIGR1cmluZyBjaGlwIHNlbGVjdGlvbi4gVGhpcyB3YXkKPiA+eW91IG1h eSBoYW5kbGUgc2V2ZXJhbCBjaGlwcyB3aXRoIGRpZmZlcmVudCB0aW1pbmcKPiA+Y29uc3RyYWlu dHMvY29uZmlndXJhdGlvbnMuCj4gPiAgCj4gPj4gKwo+ID4+ICsJcmV0dXJuIDA7Cj4gPj4gK30K PiA+PiArCj4gPj4gK3N0YXRpYyBpbnQgcmtfbmZjX2h3X2VjY19zZXR1cChzdHJ1Y3QgbmFuZF9j aGlwICpjaGlwLAo+ID4+ICsJwqDCoMKgwqDCoMKgIHN0cnVjdCBuYW5kX2VjY19jdHJsICplY2Ms Cj4gPj4gKwnCoMKgwqDCoMKgwqAgdWludDMyX3Qgc3RyZW5ndGgpCj4gPj4gK3sKPiA+PiArCXN0 cnVjdCBya19uZmMgKm5mYyA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShjaGlwKTsKPiA+PiAr CXUzMiByZWcsIGk7Cj4gPj4gKwo+ID4+ICsJZm9yIChpID0gMDsgaSA8IE5GQ19FQ0NfTUFYX01P REVTOyBpKyspIHsKPiA+PiArCWlmIChlY2MtPnN0cmVuZ3RoID09IG5mYy0+Y2ZnLT5lY2Nfc3Ry ZW5ndGhzW2ldKSB7Cj4gPj4gKwlyZWcgPSBuZmMtPmNmZy0+ZWNjX2NmZ3NbaV07Cj4gPj4gKwli cmVhazsKPiA+PiArCX0KPiA+PiArCX0KPiA+PiArCj4gPj4gKwlpZiAoaSA+PSBORkNfRUNDX01B WF9NT0RFUykKPiA+PiArCXJldHVybiAtRUlOVkFMOwo+ID4+ICsKPiA+PiArCXdyaXRlbChyZWcs IG5mYy0+cmVncyArIG5mYy0+Y2ZnLT5iY2hjdGxfb2ZmKTsgIAo+ID4KPiA+U2FtZSBoZXJlLCBp ZiB5b3UgaGFuZGxlIGRpZmZlcmVudCBjaGlwcywgdGhleSBtYXkgdXNlIGRpZmZlcmVudCBFQ0MK PiA+Y29uZmlndXJhdGlvbnMsIHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQuCj4gPiAgCj4gPj4gKwo+ ID4+ICsJcmV0dXJuIDA7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyB2b2lkIHJrX25mY194 ZmVyX3N0YXJ0KHN0cnVjdCBya19uZmMgKm5mYywgdTggcncsIHU4IG5fS0IsCj4gPj4gKwnCoMKg wqDCoMKgIGRtYV9hZGRyX3QgZG1hX2RhdGEsIGRtYV9hZGRyX3QgZG1hX29vYikKPiA+PiArewo+ ID4+ICsJdTMyIGRtYV9yZWcsIGZsX3JlZywgYmNoX3JlZzsKPiA+PiArCj4gPj4gKwlkbWFfcmVn ID0gRE1BX1NUIHwgKCghcncpIDw8IERNQV9XUikgfCBETUFfRU4gfCAoMiA8PCBETUFfQUhCX1NJ WkUpIHwKPiA+PiArCcKgwqDCoMKgwqAgKDcgPDwgRE1BX0JVUlNUX1NJWkUpIHwgKDE2IDw8IERN QV9JTkNfTlVNKTsKPiA+PiArCj4gPj4gKwlmbF9yZWcgPSAocncgPDwgRkxDVExfV1IpIHwgRkxD VExfWEZFUl9FTiB8IEZMQ1RMX0FDT1JSRUNUIHwKPiA+PiArCShuX0tCIDw8IEZMQ1RMX1hGRVJf U0VDVE9SKSB8IEZMQ1RMX1RPR19GSVg7Cj4gPj4gKwo+ID4+ICsJaWYgKG5mYy0+Y2ZnLT50eXBl ID09IE5GQ19WNiB8fCBuZmMtPmNmZy0+dHlwZSA9PSBORkNfVjgpIHsKPiA+PiArCWJjaF9yZWcg PSByZWFkbF9yZWxheGVkKG5mYy0+cmVncyArIG5mYy0+Y2ZnLT5iY2hjdGxfb2ZmKTsKPiA+PiAr CWJjaF9yZWcgPSAoYmNoX3JlZyAmICh+QkNIQ1RMX0JBTktfTSkpIHwKPiA+PiArCcKgIChuZmMt PnNlbGVjdGVkX2JhbmsgPDwgQkNIQ1RMX0JBTkspOwo+ID4+ICsJd3JpdGVsKGJjaF9yZWcsIG5m Yy0+cmVncyArIG5mYy0+Y2ZnLT5iY2hjdGxfb2ZmKTsKPiA+PiArCX0KPiA+PiArCj4gPj4gKwl3 cml0ZWwoZG1hX3JlZywgbmZjLT5yZWdzICsgbmZjLT5jZmctPmRtYV9jZmdfb2ZmKTsKPiA+PiAr CXdyaXRlbCgodTMyKWRtYV9kYXRhLCBuZmMtPnJlZ3MgKyBuZmMtPmNmZy0+ZG1hX2RhdGFfYnVm X29mZik7Cj4gPj4gKwl3cml0ZWwoKHUzMilkbWFfb29iLCBuZmMtPnJlZ3MgKyBuZmMtPmNmZy0+ ZG1hX29vYl9idWZfb2ZmKTsKPiA+PiArCXdyaXRlbChmbF9yZWcsIG5mYy0+cmVncyArIG5mYy0+ Y2ZnLT5mbGN0bF9vZmYpOwo+ID4+ICsJZmxfcmVnIHw9IEZMQ1RMX1hGRVJfU1Q7Cj4gPj4gKwl3 cml0ZWwoZmxfcmVnLCBuZmMtPnJlZ3MgKyBuZmMtPmNmZy0+ZmxjdGxfb2ZmKTsKPiA+PiArfQo+ ID4+ICsKPiA+PiArc3RhdGljIGludCBya19uZmNfd2FpdF9mb3JfeGZlcl9kb25lKHN0cnVjdCBy a19uZmMgKm5mYykKPiA+PiArewo+ID4+ICsJdm9pZCBfX2lvbWVtICpwdHI7Cj4gPj4gKwlpbnQg cmV0ID0gMDsKPiA+PiArCXUzMiByZWc7Cj4gPj4gKwo+ID4+ICsJcHRyID0gbmZjLT5yZWdzICsg bmZjLT5jZmctPmZsY3RsX29mZjsKPiA+PiArCj4gPj4gKwlyZXQgPSByZWFkbF9yZWxheGVkX3Bv bGxfdGltZW91dChwdHIsIHJlZywKPiA+PiArCXJlZyAmIEZMQ1RMX1hGRVJfUkVBRFksCj4gPj4g KwkxMCwgTkZDX1RJTUVPVVQpOwo+ID4+ICsKPiA+PiArCXJldHVybiByZXQ7Cj4gPj4gK30KPiA+ PiArCj4gPj4gK3N0YXRpYyBpbnQgcmtfbmZjX3dyaXRlX3BhZ2VfcmF3KHN0cnVjdCBuYW5kX2No aXAgKmNoaXAsIGNvbnN0IHU4ICpidWYsCj4gPj4gKwlpbnQgb29iX29uLCBpbnQgcGFnZSkKPiA+ PiArewo+ID4+ICsJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsKPiA+ PiArCXN0cnVjdCBya19uZmMgKm5mYyA9IG5hbmRfZ2V0X2NvbnRyb2xsZXJfZGF0YShjaGlwKTsK PiA+PiArCXN0cnVjdCBuYW5kX2VjY19jdHJsICplY2MgPSAmY2hpcC0+ZWNjOwo+ID4+ICsJaW50 IHJldCA9IDA7Cj4gPj4gKwl1MzIgaTsKPiA+PiArCj4gPj4gKwlpZiAoIWJ1ZikKPiA+PiArCW1l bXNldChuZmMtPmJ1ZmZlciwgMHhmZiwgbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemUpOwo+ ID4+ICsKPiA+PiArCWZvciAoaSA9IDA7IGkgPCBlY2MtPnN0ZXBzOyBpKyspIHsKPiA+PiArCS8q IENvcHkgZGF0YSB0byBuZmMgYnVmZmVyLiAqLwo+ID4+ICsJaWYgKGJ1ZikKPiA+PiArCW1lbWNw eShya19uZmNfZGF0YV9wdHIoY2hpcCwgaSksCj4gPj4gKwnCoMKgwqDCoMKgwqAgcmtfbmZjX2J1 Zl90b19kYXRhX3B0cihjaGlwLCBidWYsIGkpLAo+ID4+ICsJwqDCoMKgwqDCoMKgIGVjYy0+c2l6 ZSk7Cj4gPj4gKwkvKgo+ID4+ICsJKiBUaGUgZmlyc3QgZm91ciBieXRlcyBvZiBPT0IgYXJlIHJl c2VydmVkIGZvciB0aGUKPiA+PiArCSogYm9vdCBST00uIEluIHNvbWUgZGVidWdnaW5nIGNhc2Vz LCBzdWNoIGFzIHdpdGggYQo+ID4+ICsJKiByZWFkLCBlcmFzZSBhbmQgd3JpdGUgYmFjayB0ZXN0 IHRoZXNlIDQgYnl0ZXMgc3RvcmVkCj4gPj4gKwkqIGluIE9PQiBhbHNvIG5lZWQgdG8gYmUgd3Jp dHRlbiBiYWNrLgo+ID4+ICsJKi8gIAo+ID4KPiA+VGhlIGNvbnRyb2xsZXIgZHJpdmVyIHNob3Vs ZCBub3QgYXJiaXRyYXRlIHRoaXMuIElmIHlvdSBkb24ndCB3YW50IHRvCj4gPmV4cG9zZSB0aGVz ZSBieXRlcywgdGhleSBzaG91bGQgbm90IGFwcGVhciAiZnJlZSIgaW4gdGhlIE9PQiBsYXlvdXQs Cj4gPmJ1dCBhIHJhdyBhY2Nlc3MgKm11c3QqIGJ1dCBhYmxlIHRvIGFkZHJlc3MgdGhlIGVudGly ZSBwYWdlL29vYi4gIAo+IAo+IEkgZG9uJ3QgaGF2ZSBhIHNvbHV0aW9uIHRvIGZpeCBpdC4KPiBU aGUgZnVuY3Rpb27CoG5hbmRfYmxvY2tfYmFkIGRldGVjdCBiYWQgYmxvY2sgbGlrZSBpdDoKPiDC oCDCoMKgYmFkID0gY2hpcC0+b29iX3BvaVtjaGlwLT5iYWRibG9ja3Bvc107IC8vY2hpcC0+YmFk YmxvY2twb3MgPSAwIGZvciBsYXJnZSBwYWdlIE5BTkQgRmxhc2guCj4gU2/CoGNoaXAtPm9vYl9w b2lbMF0gaXMgYmFkIG1hc2tlci4KPiAKPiBUaGUgb29iIGRhdGEgbGF5b3V0IGZvciByayBuZmMg aXM6Cj4gwqBQQTAgUEExIFBBMiBQQTMgfCBCQk0gT09CMSBPT0IyIE9PQjMgfCAuLi4KPiBvcgo+ IMKgMHhGRiAweEZGIDB4RkYgMHhGRiB8IEJCTSBPT0IxIE9PQjIgT09CMyB8IC4uLgo+IAo+IFRo ZSBjb2RlIGhlcmUganVzdCB0byBzd2FwIHRoZSBmaXJzdCA0IGJ5dGVzIHdpdGggdGhlIGxhc3Qg NCBieXRlcyBhbmQgd2l0aG91dCBkcm9wZWQgYW55IMKgZGF0YS4KPiBhbmQgdGhlIGNoaXAtPm9v Yl9wb2kgZGF0YSBsYXlvdXQ6Cj4gQkJNIE9PQjEgT09CMiBPT0IzfC4uLi4uLnzCoFBBMCBQQTEg UEEyIFBBM8KgCj4gCj4gVGhlIE9PQiBsYXlvdXQgZnJlZSBhbHJlYWR5IHJlc2VydmVkIHRoaXMg NCBieXRlczoKPiBvb2JfcmVnaW9uLT5vZmZzZXQgPSBORkNfU1lTX0RBVEFfU0laRSArIDI7Cj4g Cj4gPj4gKwlpZiAoIWkpCj4gPj4gKwltZW1jcHkocmtfbmZjX29vYl9wdHIoY2hpcCwgaSksCj4g Pj4gKwnCoMKgwqDCoMKgwqAgcmtfbmZjX2J1Zl90b19vb2JfcHRyKGNoaXAsIGVjYy0+c3RlcHMg LSAxKSwKPiA+PiArCcKgwqDCoMKgwqDCoCBORkNfU1lTX0RBVEFfU0laRSk7Cj4gPj4gKwllbHNl Cj4gPj4gKwltZW1jcHkocmtfbmZjX29vYl9wdHIoY2hpcCwgaSksCj4gPj4gKwnCoMKgwqDCoMKg wqAgcmtfbmZjX2J1Zl90b19vb2JfcHRyKGNoaXAsIGkgLSAxKSwKPiA+PiArCcKgwqDCoMKgwqDC oCBORkNfU1lTX0RBVEFfU0laRSk7Cj4gPj4gKwkvKiBDb3B5IEVDQyBkYXRhIHRvIHRoZSBORkMg YnVmZmVyLiAqLwo+ID4+ICsJbWVtY3B5KHJrX25mY19vb2JfcHRyKGNoaXAsIGkpICsgTkZDX1NZ U19EQVRBX1NJWkUsCj4gPj4gKwnCoMKgwqDCoMKgwqAgcmtfbmZjX2J1Zl90b19vb2JfZWNjX3B0 cihjaGlwLCBpKSwKPiA+PiArCcKgwqDCoMKgwqDCoCBlY2MtPmJ5dGVzKTsKPiA+PiArCX0KPiA+ PiArCj4gPj4gKwluYW5kX3Byb2dfcGFnZV9iZWdpbl9vcChjaGlwLCBwYWdlLCAwLCBOVUxMLCAw KTsKPiA+PiArCXJrX25mY193cml0ZV9idWYobmZjLCBidWYsIG10ZC0+d3JpdGVzaXplICsgbXRk LT5vb2JzaXplKTsKPiA+PiArCXJldCA9IG5hbmRfcHJvZ19wYWdlX2VuZF9vcChjaGlwKTsKPiA+ PiArCj4gPj4gKwkvKgo+ID4+ICsJKiBEZXNlbGVjdCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRh cmdldCBhZnRlciB0aGUgb3BzIGlzIGRvbmUKPiA+PiArCSogdG8gcmVkdWNlIHRoZSBwb3dlciBj b25zdW1wdGlvbi4KPiA+PiArCSovCj4gPj4gKwlya19uZmNfc2VsZWN0X2NoaXAoY2hpcCwgLTEp Owo+ID4+ICsKPiA+PiArCXJldHVybiByZXQ7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyBp bnQgcmtfbmZjX3dyaXRlX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCBpbnQgcGFnZSkKPiA+ PiArewo+ID4+ICsJcmV0dXJuIHJrX25mY193cml0ZV9wYWdlX3JhdyhjaGlwLCBOVUxMLCAxLCBw YWdlKTsgIAo+ID4KPiA+Tm90IHN1cmUgdGhpcyBpcyByZWxldmFudC4gWW91IHNob3VsZCBub3Qg ZG8gdGhhdCwgSSBndWVzcyB0aGUgY29yZQo+ID53aWxsIGF1dG9tYXRpY2FsbHkgdGFrZSBjYXJl IG9mIGl0Lgo+ID4gIAo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgaW50IHJrX25mY193cml0 ZV9wYWdlX2h3ZWNjKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGNvbnN0IHU4ICpidWYsCj4gPj4g KwnCoMKgIGludCBvb2Jfb24sIGludCBwYWdlKQo+ID4+ICt7Cj4gPj4gKwlzdHJ1Y3QgbXRkX2lu Zm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNoaXApOwo+ID4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0g bmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXApOwo+ID4+ICsJc3RydWN0IHJrX25mY19uYW5k X2NoaXAgKnJrbmFuZCA9IHJrX25mY190b19ya25hbmQoY2hpcCk7Cj4gPj4gKwlzdHJ1Y3QgbmFu ZF9lY2NfY3RybCAqZWNjID0gJmNoaXAtPmVjYzsKPiA+PiArCWludCBvb2Jfc3RlcCA9IChlY2Mt PmJ5dGVzID4gNjApID8gTkZDX01BWF9PT0JfUEVSX1NURVAgOgo+ID4+ICsJTkZDX01JTl9PT0Jf UEVSX1NURVA7Cj4gPj4gKwlpbnQgcGFnZXNfcGVyX2JsayA9IG10ZC0+ZXJhc2VzaXplIC8gbXRk LT53cml0ZXNpemU7Cj4gPj4gKwlpbnQgcmV0ID0gMCwgaSwgYm9vdF9yb21fbW9kZSA9IDA7Cj4g Pj4gKwlkbWFfYWRkcl90IGRtYV9kYXRhLCBkbWFfb29iOwo+ID4+ICsJdTMyIHJlZzsKPiA+PiAr CXU4ICpvb2I7Cj4gPj4gKwo+ID4+ICsJbmFuZF9wcm9nX3BhZ2VfYmVnaW5fb3AoY2hpcCwgcGFn ZSwgMCwgTlVMTCwgMCk7Cj4gPj4gKwo+ID4+ICsJbWVtY3B5KG5mYy0+cGFnZV9idWYsIGJ1Ziwg bXRkLT53cml0ZXNpemUpOwo+ID4+ICsKPiA+PiArCS8qCj4gPj4gKwkqIFRoZSBmaXJzdCBibG9j a3MgKDQsIDggb3IgMTYgZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UpIGFyZSB1c2VkCj4gPj4gKwkq IGJ5IHRoZSBib290IFJPTSBhbmQgdGhlIGZpcnN0IDMyIGJpdHMgb2YgT09CIG5lZWQgdG8gbGlu ayB0bwo+ID4+ICsJKiB0aGUgbmV4dCBwYWdlIGFkZHJlc3MgaW4gdGhlIHNhbWUgYmxvY2suIFdl IGNhbid0IGRpcmVjdGx5IGNvcHkKPiA+PiArCSogT09CIGRhdGEgZnJvbSB0aGUgTVREIGZyYW1l d29yaywgYmVjYXVzZSB0aGlzIHBhZ2UgYWRkcmVzcwo+ID4+ICsJKiBjb25mbGljdHMgZm9yIGV4 YW1wbGUgd2l0aCB0aGUgYmFkIGJsb2NrIG1hcmtlciAoQkJNKSwKPiA+PiArCSogc28gd2Ugc2hp ZnQgYWxsIE9PQiBkYXRhIGluY2x1ZGluZyB0aGUgQkJNIHdpdGggNCBieXRlIHBvc2l0aW9ucy4K PiA+PiArCSogQXMgYSBjb25zZXF1ZW5jZSB0aGUgT09CIHNpemUgYXZhaWxhYmxlIHRvIHRoZSBN VEQgZnJhbWV3b3JrIGlzCj4gPj4gKwkqIGFsc28gcmVkdWNlZCB3aXRoIDQgYnl0ZXMuCj4gPj4g KwkqCj4gPj4gKwkqwqDCoMKgIFBBMCBQQTEgUEEyIFBBMyB8IEJCTSBPT0IxIE9PQjIgT09CMyB8 IC4uLgo+ID4+ICsJKgo+ID4+ICsJKiBJZiBhIE5BTkQgaXMgbm90IGEgYm9vdCBtZWRpdW0gb3Ig dGhlIHBhZ2UgaXMgbm90IGEgYm9vdCBibG9jaywKPiA+PiArCSogdGhlIGZpcnN0IDQgYnl0ZXMg YXJlIGxlZnQgdW50b3VjaGVkIGJ5IHdyaXRpbmcgMHhGRiB0byB0aGVtLgo+ID4+ICsJKgo+ID4+ ICsJKsKgwqAgMHhGRiAweEZGIDB4RkYgMHhGRiB8IEJCTSBPT0IxIE9PQjIgT09CMyB8IC4uLgo+ ID4+ICsJKgo+ID4+ICsJKiBDb25maWd1cmUgdGhlIEVDQyBhbGdvcml0aG0gc3VwcG9ydGVkIGJ5 IHRoZSBib290IFJPTS4KPiA+PiArCSovCj4gPj4gKwlpZiAoKHBhZ2UgPCBwYWdlc19wZXJfYmxr ICogcmtuYW5kLT5ib290X2Jsa3MpICYmCj4gPj4gKwnCoMKgwqAgKGNoaXAtPm9wdGlvbnMgJiBO QU5EX0lTX0JPT1RfTUVESVVNKSkgewo+ID4+ICsJYm9vdF9yb21fbW9kZSA9IDE7Cj4gPj4gKwlp ZiAocmtuYW5kLT5ib290X2VjYyAhPSBlY2MtPnN0cmVuZ3RoKQo+ID4+ICsJcmtfbmZjX2h3X2Vj Y19zZXR1cChjaGlwLCBlY2MsCj4gPj4gKwnCoMKgwqAgcmtuYW5kLT5ib290X2VjYyk7Cj4gPj4g Kwl9Cj4gPj4gKwo+ID4+ICsJZm9yIChpID0gMDsgaSA8IGVjYy0+c3RlcHM7IGkrKykgewo+ID4+ ICsJaWYgKCFpKSB7Cj4gPj4gKwlyZWcgPSAweEZGRkZGRkZGOwo+ID4+ICsJfSBlbHNlIHsKPiA+ PiArCW9vYiA9IGNoaXAtPm9vYl9wb2kgKyAoaSAtIDEpICogTkZDX1NZU19EQVRBX1NJWkU7Cj4g Pj4gKwlyZWcgPSBvb2JbMF0gfCBvb2JbMV0gPDwgOCB8IG9vYlsyXSA8PCAxNiB8Cj4gPj4gKwnC oMKgwqDCoMKgIG9vYlszXSA8PCAyNDsKPiA+PiArCX0KPiA+PiArCWlmICghaSAmJiBib290X3Jv bV9tb2RlKQo+ID4+ICsJcmVnID0gKHBhZ2UgJiAocGFnZXNfcGVyX2JsayAtIDEpKSAqIDQ7Cj4g Pj4gKwo+ID4+ICsJaWYgKG5mYy0+Y2ZnLT50eXBlID09IE5GQ19WOSkKPiA+PiArCW5mYy0+b29i X2J1ZltpXSA9IHJlZzsKPiA+PiArCWVsc2UKPiA+PiArCW5mYy0+b29iX2J1ZltpICogKG9vYl9z dGVwIC8gNCldID0gcmVnOwo+ID4+ICsJfQo+ID4+ICsKPiA+PiArCWRtYV9kYXRhID0gZG1hX21h cF9zaW5nbGUobmZjLT5kZXYsICh2b2lkICopbmZjLT5wYWdlX2J1ZiwKPiA+PiArCcKgIG10ZC0+ d3JpdGVzaXplLCBETUFfVE9fREVWSUNFKTsKPiA+PiArCWRtYV9vb2IgPSBkbWFfbWFwX3Npbmds ZShuZmMtPmRldiwgbmZjLT5vb2JfYnVmLAo+ID4+ICsJZWNjLT5zdGVwcyAqIG9vYl9zdGVwLAo+ ID4+ICsJRE1BX1RPX0RFVklDRSk7Cj4gPj4gKwo+ID4+ICsJcmVpbml0X2NvbXBsZXRpb24oJm5m Yy0+ZG9uZSk7Cj4gPj4gKwl3cml0ZWwoSU5UX0RNQSwgbmZjLT5yZWdzICsgbmZjLT5jZmctPmlu dF9lbl9vZmYpOwo+ID4+ICsKPiA+PiArCXJrX25mY194ZmVyX3N0YXJ0KG5mYywgTkZDX1dSSVRF LCBlY2MtPnN0ZXBzLCBkbWFfZGF0YSwKPiA+PiArCcKgIGRtYV9vb2IpOwo+ID4+ICsJcmV0ID0g d2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZuZmMtPmRvbmUsCj4gPj4gKwnCoCBtc2Vjc190 b19qaWZmaWVzKDEwMCkpOwo+ID4+ICsJaWYgKCFyZXQpCj4gPj4gKwlkZXZfd2FybihuZmMtPmRl diwgIndyaXRlOiB3YWl0IGRtYSBkb25lIHRpbWVvdXQuXG4iKTsKPiA+PiArCS8qCj4gPj4gKwkq IFdoZXRoZXIgdGhlIERNQSB0cmFuc2ZlciBpcyBjb21wbGV0ZWQgb3Igbm90LiBUaGUgZHJpdmVy Cj4gPj4gKwkqIG5lZWRzIHRvIGNoZWNrIHRoZSBORkNgcyBzdGF0dXMgcmVnaXN0ZXIgdG8gc2Vl IGlmIHRoZSBkYXRhCj4gPj4gKwkqIHRyYW5zZmVyIHdhcyBjb21wbGV0ZWQuCj4gPj4gKwkqLwo+ ID4+ICsJcmV0ID0gcmtfbmZjX3dhaXRfZm9yX3hmZXJfZG9uZShuZmMpOwo+ID4+ICsKPiA+PiAr CWRtYV91bm1hcF9zaW5nbGUobmZjLT5kZXYsIGRtYV9kYXRhLCBtdGQtPndyaXRlc2l6ZSwKPiA+ PiArCURNQV9UT19ERVZJQ0UpOwo+ID4+ICsJZG1hX3VubWFwX3NpbmdsZShuZmMtPmRldiwgZG1h X29vYiwgZWNjLT5zdGVwcyAqIG9vYl9zdGVwLAo+ID4+ICsJRE1BX1RPX0RFVklDRSk7Cj4gPj4g Kwo+ID4+ICsJaWYgKGJvb3Rfcm9tX21vZGUgJiYgcmtuYW5kLT5ib290X2VjYyAhPSBlY2MtPnN0 cmVuZ3RoKQo+ID4+ICsJcmtfbmZjX2h3X2VjY19zZXR1cChjaGlwLCBlY2MsIGVjYy0+c3RyZW5n dGgpOwo+ID4+ICsKPiA+PiArCWlmIChyZXQpIHsKPiA+PiArCXJldCA9IC1FSU87Cj4gPj4gKwlk ZXZfZXJyKG5mYy0+ZGV2LAo+ID4+ICsJIndyaXRlOiB3YWl0IHRyYW5zZmVyIGRvbmUgdGltZW91 dC5cbiIpOwo+ID4+ICsJfQo+ID4+ICsKPiA+PiArCWlmIChyZXQpCj4gPj4gKwlyZXR1cm4gcmV0 Owo+ID4+ICsKPiA+PiArCXJldCA9IG5hbmRfcHJvZ19wYWdlX2VuZF9vcChjaGlwKTsKPiA+PiAr Cj4gPj4gKwkvKgo+ID4+ICsJKiBEZXNlbGVjdCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRhcmdl dCBhZnRlciB0aGUgb3BzIGlzIGRvbmUKPiA+PiArCSogdG8gcmVkdWNlIHRoZSBwb3dlciBjb25z dW1wdGlvbi4KPiA+PiArCSovICAKPiA+Cj4gPklmIHlvdSBmb3JjZSB0aGlzIGRlc2VsZWN0aW9u LCB5b3VyIHNob3VsZCBwcm9iYWJseSBkbyBpdCBldmVuIGluIGNhc2UKPiA+b2YgZXJyb3I/Cj4g PiAgCj4gPj4gKwlya19uZmNfc2VsZWN0X2NoaXAoY2hpcCwgLTEpOwo+ID4+ICsKPiA+PiArCXJl dHVybiByZXQ7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyBpbnQgcmtfbmZjX3JlYWRfcGFn ZV9yYXcoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgdTggKmJ1ZiwgaW50IG9vYl9vbiwKPiA+PiAr CWludCBwYWdlKQo+ID4+ICt7Cj4gPj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9f bXRkKGNoaXApOwo+ID4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxl cl9kYXRhKGNoaXApOwo+ID4+ICsJc3RydWN0IG5hbmRfZWNjX2N0cmwgKmVjYyA9ICZjaGlwLT5l Y2M7Cj4gPj4gKwlpbnQgaTsKPiA+PiArCj4gPj4gKwluYW5kX3JlYWRfcGFnZV9vcChjaGlwLCBw YWdlLCAwLCBOVUxMLCAwKTsKPiA+PiArCXJrX25mY19yZWFkX2J1ZihuZmMsIG5mYy0+YnVmZmVy LCBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZSk7Cj4gPj4gKwo+ID4+ICsJLyoKPiA+PiAr CSogRGVzZWxlY3QgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCB0YXJnZXQgYWZ0ZXIgdGhlIG9wcyBp cyBkb25lCj4gPj4gKwkqIHRvIHJlZHVjZSB0aGUgcG93ZXIgY29uc3VtcHRpb24uCj4gPj4gKwkq Lwo+ID4+ICsJcmtfbmZjX3NlbGVjdF9jaGlwKGNoaXAsIC0xKTsKPiA+PiArCj4gPj4gKwlmb3Ig KGkgPSAwOyBpIDwgZWNjLT5zdGVwczsgaSsrKSB7Cj4gPj4gKwkvKgo+ID4+ICsJKiBUaGUgZmly c3QgZm91ciBieXRlcyBvZiBPT0IgYXJlIHJlc2VydmVkIGZvciB0aGUKPiA+PiArCSogYm9vdCBS T00uIEluIHNvbWUgZGVidWdnaW5nIGNhc2VzLCBzdWNoIGFzIHdpdGggYSByZWFkLAo+ID4+ICsJ KiBlcmFzZSBhbmQgd3JpdGUgYmFjayB0ZXN0LCB0aGVzZSA0IGJ5dGVzIGFsc28gbXVzdCBiZQo+ ID4+ICsJKiBzYXZlZCBzb21ld2hlcmUsIG90aGVyd2lzZSB0aGlzIGluZm9ybWF0aW9uIHdpbGwg YmUKPiA+PiArCSogbG9zdCBkdXJpbmcgYSB3cml0ZSBiYWNrLiAgCj4gPgo+ID5EaXR0bwo+ID4g IAo+ID4+ICsJKi8KPiA+PiArCWlmICghaSkKPiA+PiArCW1lbWNweShya19uZmNfYnVmX3RvX29v Yl9wdHIoY2hpcCwgZWNjLT5zdGVwcyAtIDEpLAo+ID4+ICsJwqDCoMKgwqDCoMKgIHJrX25mY19v b2JfcHRyKGNoaXAsIGkpLAo+ID4+ICsJwqDCoMKgwqDCoMKgIE5GQ19TWVNfREFUQV9TSVpFKTsK PiA+PiArCWVsc2UKPiA+PiArCW1lbWNweShya19uZmNfYnVmX3RvX29vYl9wdHIoY2hpcCwgaSAt IDEpLAo+ID4+ICsJwqDCoMKgwqDCoMKgIHJrX25mY19vb2JfcHRyKGNoaXAsIGkpLAo+ID4+ICsJ wqDCoMKgwqDCoMKgIE5GQ19TWVNfREFUQV9TSVpFKTsKPiA+PiArCS8qIENvcHkgRUNDIGRhdGEg ZnJvbSB0aGUgTkZDIGJ1ZmZlci4gKi8KPiA+PiArCW1lbWNweShya19uZmNfYnVmX3RvX29vYl9l Y2NfcHRyKGNoaXAsIGkpLAo+ID4+ICsJwqDCoMKgwqDCoMKgIHJrX25mY19vb2JfcHRyKGNoaXAs IGkpICsgTkZDX1NZU19EQVRBX1NJWkUsCj4gPj4gKwnCoMKgwqDCoMKgwqAgZWNjLT5ieXRlcyk7 Cj4gPj4gKwkvKiBDb3B5IGRhdGEgZnJvbSB0aGUgTkZDIGJ1ZmZlci4gKi8KPiA+PiArCWlmIChi dWYpCj4gPj4gKwltZW1jcHkocmtfbmZjX2J1Zl90b19kYXRhX3B0cihjaGlwLCBidWYsIGkpLAo+ ID4+ICsJwqDCoMKgwqDCoMKgIHJrX25mY19kYXRhX3B0cihjaGlwLCBpKSwKPiA+PiArCcKgwqDC oMKgwqDCoCBlY2MtPnNpemUpOwo+ID4+ICsJfQo+ID4+ICsKPiA+PiArCXJldHVybiAwOwo+ID4+ ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgaW50IHJrX25mY19yZWFkX29vYihzdHJ1Y3QgbmFuZF9j aGlwICpjaGlwLCBpbnQgcGFnZSkKPiA+PiArewo+ID4+ICsJcmV0dXJuIHJrX25mY19yZWFkX3Bh Z2VfcmF3KGNoaXAsIE5VTEwsIDEsIHBhZ2UpOyAgCj4gPgo+ID5EaXR0bwo+ID4gIAo+ID4+ICt9 Cj4gPj4gKwo+ID4+ICtzdGF0aWMgaW50IHJrX25mY19yZWFkX3BhZ2VfaHdlY2Moc3RydWN0IG5h bmRfY2hpcCAqY2hpcCwgdTggKmJ1ZiwgaW50IG9vYl9vbiwKPiA+PiArCcKgIGludCBwYWdlKQo+ ID4+ICt7Cj4gPj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNoaXApOwo+ ID4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXAp Owo+ID4+ICsJc3RydWN0IHJrX25mY19uYW5kX2NoaXAgKnJrbmFuZCA9IHJrX25mY190b19ya25h bmQoY2hpcCk7Cj4gPj4gKwlzdHJ1Y3QgbmFuZF9lY2NfY3RybCAqZWNjID0gJmNoaXAtPmVjYzsK PiA+PiArCWludCBvb2Jfc3RlcCA9IChlY2MtPmJ5dGVzID4gNjApID8gTkZDX01BWF9PT0JfUEVS X1NURVAgOgo+ID4+ICsJTkZDX01JTl9PT0JfUEVSX1NURVA7Cj4gPj4gKwlpbnQgcGFnZXNfcGVy X2JsayA9IG10ZC0+ZXJhc2VzaXplIC8gbXRkLT53cml0ZXNpemU7Cj4gPj4gKwlkbWFfYWRkcl90 IGRtYV9kYXRhLCBkbWFfb29iOwo+ID4+ICsJaW50IHJldCA9IDAsIGksIGJvb3Rfcm9tX21vZGUg PSAwOwo+ID4+ICsJaW50IGJpdGZsaXBzID0gMCwgYmNoX3N0Owo+ID4+ICsJdTggKm9vYjsKPiA+ PiArCXUzMiB0bXA7Cj4gPj4gKwo+ID4+ICsJbmFuZF9yZWFkX3BhZ2Vfb3AoY2hpcCwgcGFnZSwg MCwgTlVMTCwgMCk7Cj4gPj4gKwo+ID4+ICsJZG1hX2RhdGEgPSBkbWFfbWFwX3NpbmdsZShuZmMt PmRldiwgbmZjLT5wYWdlX2J1ZiwKPiA+PiArCcKgIG10ZC0+d3JpdGVzaXplLAo+ID4+ICsJwqAg RE1BX0ZST01fREVWSUNFKTsKPiA+PiArCWRtYV9vb2IgPSBkbWFfbWFwX3NpbmdsZShuZmMtPmRl diwgbmZjLT5vb2JfYnVmLAo+ID4+ICsJZWNjLT5zdGVwcyAqIG9vYl9zdGVwLAo+ID4+ICsJRE1B X0ZST01fREVWSUNFKTsKPiA+PiArCj4gPj4gKwkvKgo+ID4+ICsJKiBUaGUgZmlyc3QgYmxvY2tz ICg0LCA4IG9yIDE2IGRlcGVuZGluZyBvbiB0aGUgZGV2aWNlKQo+ID4+ICsJKiBhcmUgdXNlZCBi eSB0aGUgYm9vdCBST00uCj4gPj4gKwkqIENvbmZpZ3VyZSB0aGUgRUNDIGFsZ29yaXRobSBzdXBw b3J0ZWQgYnkgdGhlIGJvb3QgUk9NLgo+ID4+ICsJKi8KPiA+PiArCWlmICgocGFnZSA8IHBhZ2Vz X3Blcl9ibGsgKiBya25hbmQtPmJvb3RfYmxrcykgJiYKPiA+PiArCcKgwqDCoCAoY2hpcC0+b3B0 aW9ucyAmIE5BTkRfSVNfQk9PVF9NRURJVU0pKSB7Cj4gPj4gKwlib290X3JvbV9tb2RlID0gMTsK PiA+PiArCWlmIChya25hbmQtPmJvb3RfZWNjICE9IGVjYy0+c3RyZW5ndGgpCj4gPj4gKwlya19u ZmNfaHdfZWNjX3NldHVwKGNoaXAsIGVjYywKPiA+PiArCcKgwqDCoCBya25hbmQtPmJvb3RfZWNj KTsKPiA+PiArCX0KPiA+PiArCj4gPj4gKwlyZWluaXRfY29tcGxldGlvbigmbmZjLT5kb25lKTsK PiA+PiArCXdyaXRlbChJTlRfRE1BLCBuZmMtPnJlZ3MgKyBuZmMtPmNmZy0+aW50X2VuX29mZik7 Cj4gPj4gKwlya19uZmNfeGZlcl9zdGFydChuZmMsIE5GQ19SRUFELCBlY2MtPnN0ZXBzLCBkbWFf ZGF0YSwKPiA+PiArCcKgIGRtYV9vb2IpOwo+ID4+ICsJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlv bl90aW1lb3V0KCZuZmMtPmRvbmUsCj4gPj4gKwnCoCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwo+ ID4+ICsJaWYgKCFyZXQpCj4gPj4gKwlkZXZfd2FybihuZmMtPmRldiwgInJlYWQ6IHdhaXQgZG1h IGRvbmUgdGltZW91dC5cbiIpOwo+ID4+ICsJLyoKPiA+PiArCSogV2hldGhlciB0aGUgRE1BIHRy YW5zZmVyIGlzIGNvbXBsZXRlZCBvciBub3QuIFRoZSBkcml2ZXIKPiA+PiArCSogbmVlZHMgdG8g Y2hlY2sgdGhlIE5GQ2BzIHN0YXR1cyByZWdpc3RlciB0byBzZWUgaWYgdGhlIGRhdGEKPiA+PiAr CSogdHJhbnNmZXIgd2FzIGNvbXBsZXRlZC4KPiA+PiArCSovCj4gPj4gKwlyZXQgPSBya19uZmNf d2FpdF9mb3JfeGZlcl9kb25lKG5mYyk7Cj4gPj4gKwlkbWFfdW5tYXBfc2luZ2xlKG5mYy0+ZGV2 LCBkbWFfZGF0YSwgbXRkLT53cml0ZXNpemUsCj4gPj4gKwlETUFfRlJPTV9ERVZJQ0UpOwo+ID4+ ICsJZG1hX3VubWFwX3NpbmdsZShuZmMtPmRldiwgZG1hX29vYiwgZWNjLT5zdGVwcyAqIG9vYl9z dGVwLAo+ID4+ICsJRE1BX0ZST01fREVWSUNFKTsKPiA+PiArCj4gPj4gKwlpZiAocmV0KSB7Cj4g Pj4gKwliaXRmbGlwcyA9IC1FSU87Cj4gPj4gKwlkZXZfZXJyKG5mYy0+ZGV2LAo+ID4+ICsJInJl YWQ6IHdhaXQgdHJhbnNmZXIgZG9uZSB0aW1lb3V0LlxuIik7Cj4gPj4gKwlnb3RvIG91dDsKPiA+ PiArCX0KPiA+PiArCj4gPj4gKwlmb3IgKGkgPSAxOyBpIDwgZWNjLT5zdGVwczsgaSsrKSB7Cj4g Pj4gKwlvb2IgPSBjaGlwLT5vb2JfcG9pICsgKGkgLSAxKSAqIE5GQ19TWVNfREFUQV9TSVpFOwo+ ID4+ICsJaWYgKG5mYy0+Y2ZnLT50eXBlID09IE5GQ19WOSkKPiA+PiArCXRtcCA9IG5mYy0+b29i X2J1ZltpXTsKPiA+PiArCWVsc2UKPiA+PiArCXRtcCA9IG5mYy0+b29iX2J1ZltpICogKG9vYl9z dGVwIC8gNCldOwo+ID4+ICsJKm9vYisrID0gKHU4KXRtcDsKPiA+PiArCSpvb2IrKyA9ICh1OCko dG1wID4+IDgpOwo+ID4+ICsJKm9vYisrID0gKHU4KSh0bXAgPj4gMTYpOwo+ID4+ICsJKm9vYisr ID0gKHU4KSh0bXAgPj4gMjQpOwo+ID4+ICsJfQo+ID4+ICsKPiA+PiArCWZvciAoaSA9IDA7IGkg PCAoZWNjLT5zdGVwcyAvIDIpOyBpKyspIHsKPiA+PiArCWJjaF9zdCA9IHJlYWRsX3JlbGF4ZWQo bmZjLT5yZWdzICsKPiA+PiArCcKgwqDCoMKgwqDCoCBuZmMtPmNmZy0+YmNoX3N0X29mZiArIGkg KiA0KTsKPiA+PiArCWlmIChiY2hfc3QgJiBCSVQobmZjLT5jZmctPmVjYzAuZXJyX2ZsYWdfYml0 KSB8fAo+ID4+ICsJwqDCoMKgIGJjaF9zdCAmIEJJVChuZmMtPmNmZy0+ZWNjMS5lcnJfZmxhZ19i aXQpKSB7Cj4gPj4gKwltdGQtPmVjY19zdGF0cy5mYWlsZWQrKzsKPiA+PiArCWJpdGZsaXBzID0g MDsKPiA+PiArCX0gZWxzZSB7Cj4gPj4gKwlyZXQgPSBFQ0NfRVJSX0NOVChiY2hfc3QsIG5mYy0+ Y2ZnLT5lY2MwKTsKPiA+PiArCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSByZXQ7Cj4gPj4g KwliaXRmbGlwcyA9IG1heF90KHUzMiwgYml0ZmxpcHMsIHJldCk7Cj4gPj4gKwo+ID4+ICsJcmV0 ID0gRUNDX0VSUl9DTlQoYmNoX3N0LCBuZmMtPmNmZy0+ZWNjMSk7Cj4gPj4gKwltdGQtPmVjY19z dGF0cy5jb3JyZWN0ZWQgKz0gcmV0Owo+ID4+ICsJYml0ZmxpcHMgPSBtYXhfdCh1MzIsIGJpdGZs aXBzLCByZXQpOwo+ID4+ICsJfQo+ID4+ICsJfQo+ID4+ICtvdXQ6Cj4gPj4gKwltZW1jcHkoYnVm LCBuZmMtPnBhZ2VfYnVmLCBtdGQtPndyaXRlc2l6ZSk7Cj4gPj4gKwo+ID4+ICsJaWYgKGJvb3Rf cm9tX21vZGUgJiYgcmtuYW5kLT5ib290X2VjYyAhPSBlY2MtPnN0cmVuZ3RoKQo+ID4+ICsJcmtf bmZjX2h3X2VjY19zZXR1cChjaGlwLCBlY2MsIGVjYy0+c3RyZW5ndGgpOwo+ID4+ICsKPiA+PiAr CWlmIChiaXRmbGlwcyA+IGVjYy0+c3RyZW5ndGgpCj4gPj4gKwlkZXZfZXJyKG5mYy0+ZGV2LCAi cmVhZCBwYWdlOiAleCBlY2MgZXJyb3IhXG4iLCBwYWdlKTsKPiA+PiArCj4gPj4gKwkvKgo+ID4+ ICsJKiBEZXNlbGVjdCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHRhcmdldCBhZnRlciB0aGUgb3Bz IGlzIGRvbmUKPiA+PiArCSogdG8gcmVkdWNlIHRoZSBwb3dlciBjb25zdW1wdGlvbi4KPiA+PiAr CSovCj4gPj4gKwlya19uZmNfc2VsZWN0X2NoaXAoY2hpcCwgLTEpOwo+ID4+ICsKPiA+PiArCXJl dHVybiBiaXRmbGlwczsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIGlubGluZSB2b2lkIHJr X25mY19od19pbml0KHN0cnVjdCBya19uZmMgKm5mYykKPiA+PiArewo+ID4+ICsJLyogRGlzYWJs ZSBmbGFzaCB3cC4gKi8KPiA+PiArCXdyaXRlbChGTUNUTF9XUCwgbmZjLT5yZWdzICsgTkZDX0ZN Q1RMKTsKPiA+PiArCS8qIENvbmZpZyBkZWZhdWx0IHRpbWluZyA0MG5zIGF0IDE1MCBNaHogbmZj IGNsb2NrLiAqLwo+ID4+ICsJd3JpdGVsKDB4MTA4MSwgbmZjLT5yZWdzICsgTkZDX0ZNV0FJVCk7 Cj4gPj4gKwkvKiBEaXNhYmxlIHJhbmRvbWl6ZXIgYW5kIERNQS4gKi8KPiA+PiArCXdyaXRlbCgw LCBuZmMtPnJlZ3MgKyBuZmMtPmNmZy0+cmFuZG16X29mZik7Cj4gPj4gKwl3cml0ZWwoMCwgbmZj LT5yZWdzICsgbmZjLT5jZmctPmRtYV9jZmdfb2ZmKTsKPiA+PiArCXdyaXRlbChGTENUTF9SU1Qs IG5mYy0+cmVncyArIG5mYy0+Y2ZnLT5mbGN0bF9vZmYpOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtz dGF0aWMgaXJxcmV0dXJuX3QgcmtfbmZjX2lycShpbnQgaXJxLCB2b2lkICppZCkKPiA+PiArewo+ ID4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gaWQ7Cj4gPj4gKwl1MzIgc3RhLCBpZW47Cj4gPj4g Kwo+ID4+ICsJc3RhID0gcmVhZGxfcmVsYXhlZChuZmMtPnJlZ3MgKyBuZmMtPmNmZy0+aW50X3N0 X29mZik7Cj4gPj4gKwlpZW4gPSByZWFkbF9yZWxheGVkKG5mYy0+cmVncyArIG5mYy0+Y2ZnLT5p bnRfZW5fb2ZmKTsKPiA+PiArCj4gPj4gKwlpZiAoIShzdGEgJiBpZW4pKQo+ID4+ICsJcmV0dXJu IElSUV9OT05FOwo+ID4+ICsKPiA+PiArCXdyaXRlbChzdGEsIG5mYy0+cmVncyArIG5mYy0+Y2Zn LT5pbnRfY2xyX29mZik7Cj4gPj4gKwl3cml0ZWwofnN0YSAmIGllbiwgbmZjLT5yZWdzICsgbmZj LT5jZmctPmludF9lbl9vZmYpOwo+ID4+ICsKPiA+PiArCWNvbXBsZXRlKCZuZmMtPmRvbmUpOwo+ ID4+ICsKPiA+PiArCXJldHVybiBJUlFfSEFORExFRDsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3Rh dGljIGludCBya19uZmNfZW5hYmxlX2Nsa3Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgcmtf bmZjICpuZmMpCj4gPj4gK3sKPiA+PiArCWludCByZXQ7Cj4gPj4gKwo+ID4+ICsJaWYgKCFJU19F UlIobmZjLT5uZmNfY2xrKSkgewo+ID4+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKG5mYy0+ bmZjX2Nsayk7Cj4gPj4gKwlpZiAocmV0KSB7Cj4gPj4gKwlkZXZfZXJyKGRldiwgImZhaWxlZCB0 byBlbmFibGUgbmZjIGNsa1xuIik7Cj4gPj4gKwlyZXR1cm4gcmV0Owo+ID4+ICsJfQo+ID4+ICsJ fQo+ID4+ICsKPiA+PiArCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShuZmMtPmFoYl9jbGspOwo+ ID4+ICsJaWYgKHJldCkgewo+ID4+ICsJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZW5hYmxlIGFo YiBjbGtcbiIpOwo+ID4+ICsJaWYgKCFJU19FUlIobmZjLT5uZmNfY2xrKSkKPiA+PiArCWNsa19k aXNhYmxlX3VucHJlcGFyZShuZmMtPm5mY19jbGspOwo+ID4+ICsJcmV0dXJuIHJldDsKPiA+PiAr CX0KPiA+PiArCj4gPj4gKwlyZXR1cm4gMDsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIHZv aWQgcmtfbmZjX2Rpc2FibGVfY2xrcyhzdHJ1Y3QgcmtfbmZjICpuZmMpCj4gPj4gK3sKPiA+PiAr CWlmICghSVNfRVJSKG5mYy0+bmZjX2NsaykpCj4gPj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUo bmZjLT5uZmNfY2xrKTsKPiA+PiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShuZmMtPmFoYl9jbGsp Owo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgaW50IHJrX25mY19vb2JsYXlvdXRfZnJlZShz dHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCj4gPj4gKwlzdHJ1Y3QgbXRkX29vYl9y ZWdpb24gKm9vYl9yZWdpb24pCj4gPj4gK3sKPiA+PiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAg PSBtdGRfdG9fbmFuZChtdGQpOwo+ID4+ICsJc3RydWN0IHJrX25mY19uYW5kX2NoaXAgKnJrbmFu ZCA9IHJrX25mY190b19ya25hbmQoY2hpcCk7Cj4gPj4gKwo+ID4+ICsJaWYgKHNlY3Rpb24pCj4g Pj4gKwlyZXR1cm4gLUVSQU5HRTsKPiA+PiArCj4gPj4gKwkvKgo+ID4+ICsJKiBUaGUgYmVnaW5u aW5nIG9mIHRoZSBPT0IgYXJlYSBzdG9yZXMgdGhlIHJlc2VydmVkIGRhdGEgZm9yIHRoZSBORkMs Cj4gPj4gKwkqIHRoZSBzaXplIG9mIHRoZSByZXNlcnZlZCBkYXRhIGlzIE5GQ19TWVNfREFUQV9T SVpFIGJ5dGVzLgo+ID4+ICsJKi8KPiA+PiArCW9vYl9yZWdpb24tPmxlbmd0aCA9IHJrbmFuZC0+ bWV0YWRhdGFfc2l6ZSAtIE5GQ19TWVNfREFUQV9TSVpFIC0gMjsKPiA+PiArCW9vYl9yZWdpb24t Pm9mZnNldCA9IE5GQ19TWVNfREFUQV9TSVpFICsgMjsKPiA+PiArCj4gPj4gKwlyZXR1cm4gMDsK PiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIGludCBya19uZmNfb29ibGF5b3V0X2VjYyhzdHJ1 Y3QgbXRkX2luZm8gKm10ZCwgaW50IHNlY3Rpb24sCj4gPj4gKwlzdHJ1Y3QgbXRkX29vYl9yZWdp b24gKm9vYl9yZWdpb24pCj4gPj4gK3sKPiA+PiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBt dGRfdG9fbmFuZChtdGQpOwo+ID4+ICsJc3RydWN0IHJrX25mY19uYW5kX2NoaXAgKnJrbmFuZCA9 IHJrX25mY190b19ya25hbmQoY2hpcCk7Cj4gPj4gKwo+ID4+ICsJaWYgKHNlY3Rpb24pCj4gPj4g KwlyZXR1cm4gLUVSQU5HRTsKPiA+PiArCj4gPj4gKwlvb2JfcmVnaW9uLT5sZW5ndGggPSBtdGQt Pm9vYnNpemUgLSBya25hbmQtPm1ldGFkYXRhX3NpemU7Cj4gPj4gKwlvb2JfcmVnaW9uLT5vZmZz ZXQgPSBya25hbmQtPm1ldGFkYXRhX3NpemU7Cj4gPj4gKwo+ID4+ICsJcmV0dXJuIDA7Cj4gPj4g K30KPiA+PiArCj4gPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX29vYmxheW91dF9vcHMgcmtf bmZjX29vYmxheW91dF9vcHMgPSB7Cj4gPj4gKwkuZnJlZSA9IHJrX25mY19vb2JsYXlvdXRfZnJl ZSwKPiA+PiArCS5lY2MgPSBya19uZmNfb29ibGF5b3V0X2VjYywKPiA+PiArfTsKPiA+PiArCj4g Pj4gK3N0YXRpYyBpbnQgcmtfbmZjX2VjY19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 IG10ZF9pbmZvICptdGQpCj4gPj4gK3sKPiA+PiArCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBt dGRfdG9fbmFuZChtdGQpOwo+ID4+ICsJc3RydWN0IHJrX25mYyAqbmZjID0gbmFuZF9nZXRfY29u dHJvbGxlcl9kYXRhKGNoaXApOwo+ID4+ICsJc3RydWN0IG5hbmRfZWNjX2N0cmwgKmVjYyA9ICZj aGlwLT5lY2M7Cj4gPj4gKwljb25zdCB1OCAqc3RyZW5ndGhzID0gbmZjLT5jZmctPmVjY19zdHJl bmd0aHM7Cj4gPj4gKwl1OCBtYXhfc3RyZW5ndGgsIG5mY19tYXhfc3RyZW5ndGg7Cj4gPj4gKwlp bnQgaTsKPiA+PiArCj4gPj4gKwluZmNfbWF4X3N0cmVuZ3RoID0gbmZjLT5jZmctPmVjY19zdHJl bmd0aHNbMF07Cj4gPj4gKwkvKiBJZiBvcHRpb25hbCBkdCBzZXR0aW5ncyBub3QgcHJlc2VudC4g Ki8KPiA+PiArCWlmICghZWNjLT5zaXplIHx8ICFlY2MtPnN0cmVuZ3RoIHx8Cj4gPj4gKwnCoMKg wqAgZWNjLT5zdHJlbmd0aCA+IG5mY19tYXhfc3RyZW5ndGgpIHsKPiA+PiArCWNoaXAtPmVjYy5z aXplID0gMTAyNDsKPiA+PiArCWVjYy0+c3RlcHMgPSBtdGQtPndyaXRlc2l6ZSAvIGVjYy0+c2l6 ZTsKPiA+PiArCj4gPj4gKwkvKgo+ID4+ICsJKiBIVyBFQ0MgYWx3YXlzIHJlcXVlc3RzIHRoZSBu dW1iZXIgb2YgRUNDIGJ5dGVzIHBlciAxMDI0IGJ5dGUKPiA+PiArCSogYmxvY2tzLiBUaGUgZmly c3QgNCBPT0IgYnl0ZXMgYXJlIHJlc2VydmVkIGZvciBzeXMgZGF0YS4KPiA+PiArCSovCj4gPj4g KwltYXhfc3RyZW5ndGggPSAoKG10ZC0+b29ic2l6ZSAvIGVjYy0+c3RlcHMpIC0gNCkgKiA4IC8K PiA+PiArCWZscyg4ICogMTAyNCk7Cj4gPj4gKwlpZiAobWF4X3N0cmVuZ3RoID4gbmZjX21heF9z dHJlbmd0aCkKPiA+PiArCW1heF9zdHJlbmd0aCA9IG5mY19tYXhfc3RyZW5ndGg7Cj4gPj4gKwo+ ID4+ICsJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewo+ID4+ICsJaWYgKG1heF9zdHJlbmd0aCA+ PSBzdHJlbmd0aHNbaV0pCj4gPj4gKwlicmVhazsKPiA+PiArCX0KPiA+PiArCj4gPj4gKwlpZiAo aSA+PSA0KSB7Cj4gPj4gKwlkZXZfZXJyKG5mYy0+ZGV2LCAiVW5zdXBwb3J0ZWQgRUNDIHN0cmVu Z3RoXG4iKTsKPiA+PiArCXJldHVybiAtRU9QTk9UU1VQUDsKPiA+PiArCX0KPiA+PiArCj4gPj4g KwllY2MtPnN0cmVuZ3RoID0gc3RyZW5ndGhzW2ldOwo+ID4+ICsJfQo+ID4+ICsJZWNjLT5zdGVw cyA9IG10ZC0+d3JpdGVzaXplIC8gZWNjLT5zaXplOwo+ID4+ICsJZWNjLT5ieXRlcyA9IERJVl9S T1VORF9VUChlY2MtPnN0cmVuZ3RoICogZmxzKDggKiAxMDI0KSwgOCk7ICAKPiA+Cj4gPkhlcmUg eW91IGFzc3VtZSAxMDI0IEVDQyBzdGVwIHNpemUsIHRoaXMgaXMgd3JvbmcuIEVpdGhlciB0aGUK PiA+Y29udHJvbGxlciBvbmx5IHN1cHBvcnRzIDEwMjQgYnl0ZXMgb3IgeW91IG9mZmljaWFsbHkg c3RhdGUgc29tZXdoZXJlCj4gPnRoYXQgeW91IGRvbid0IHN1cHBvcnQgbW9yZSBFQ0Mgc3RlcCBz aXplcyB5ZXQuCj4gPiAgCj4gPj4gKwkvKiBIVyBFQ0MgYWx3YXlzIHdvcmsgd2l0aCBldmVuIG51 bWJlcnMgb2YgRUNDIGJ5dGVzLiAqLwo+ID4+ICsJZWNjLT5ieXRlcyA9IEFMSUdOKGVjYy0+Ynl0 ZXMsIDIpOyAgCj4gPgo+ID5TaG91bGRuJ3QgeW91IGVuc3VyZSB0aGUgbnVtYmVyIG9mIGJ5dGVz IGlzIHJvdW5kZWQgdXAgPyAgCj4gCj4gVGhlIFY2IGFuZMKgVjkgY29udHJvbGxlciBzdXBwb3J0 cyBERFIgbW9kZSwgc28gRUNDIGJ5dGVzIG5lZWQgdG8gYmUgYWxpZ25lZCB0byBhbiBldmVuIG51 bWJlciBpZiBlbmFibGUgRERSIG1vZGUuCj4gVGhpcyBkcml2ZXJzIG5vIHN1cHBvcnQgZGRyIG1v ZGUgbm9377yMSSB3aWxsIGRyb3AgdGhpcyBjb2RlLgo+IAoKSSB0aGluayB5b3VyIGFwcHJvYWNo IGlzIGZpbmUsIEkganVzdCBtaXN1bmRlcnN0b29kIGl0IGJlY2F1c2Ugb2YgdGhlCmNvbW1lbnQu CgpNYXliZSB5b3UgY291bGQ6Ci0gQ3JlYXRlIGEgaGVscGVyIGZvciB0aGF0Ci0gQ29ycmVjdCB0 aGUgY29tbWVudCB0byBjbGVhcmx5IGV4cGxhaW4gd2hhdCB5b3UgZG8gKHlvdXIgZXhwbGFuYXRp b24KICBoZXJlIGlzIHZlcnkgY2xlYXIgdG8gbWUpCi0gSW5jbHVkZSB0aGUgY29tbWVudCBpbiB0 aGUgaGVscGVyLCBub3QgaW4gZWFjaCBmdW5jdGlvbgotIENhbGwgdGhlIGhlbHBlciBpbiBldmVy eSBmdW5jdGlvbiBhY2Nlc3NpbmcgdGhpcyBhcmVhIHVubGVzcyB0aGUKICBibG9jayBpcyByZXNl cnZlZCBmb3IgdGhlIGJvb3Ryb20/CgpUaGFua3MsCk1pcXXDqGwKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lv biBtYWlsaW5nIGxpc3QKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1tdGQvCg==