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 C5FA7C433EF for ; Thu, 9 Dec 2021 10:21:37 +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:MIME-Version:References:In-Reply-To: Message-ID:Subject:Cc: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=3Q5E601iiZBlzhualGR7nky150ohovLIY69UYCBdb20=; b=Ym7QQsT8jeFED7 uASKMIw+YYfTg3J2JNmrkcUMj6zy8mzQFHVe/kyYTwXqhV7EB6rkLr/fcUk+c8xdGIqWHuoovGWWS Ba30voGDS1CXhNde3GzsrxIQseQK7dGQ6QidX0lj+Cjo5Cg2V/uLMpcxop4EK+OcqRwA/11TBCLce oDDh9AjsIRNwSsKzK+4TX6YaFe/9A45whwaX+70ePSCKPl7JnAN+S2Dcs8j5t3ghKEfQyC9F9QIjp Wr1f3XNaw10k7oJAOz8IO2EMTKHKS6dSrthOflktLgR/U5+qvVD6wCsLmaToebonKkG6DZ286gK7F kOy2vDsTucw5XgKh5Jow==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mvGXf-00FajW-1q; Thu, 09 Dec 2021 10:20:47 +0000 Received: from relay10.mail.gandi.net ([217.70.178.230]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mvGXX-00FahP-LG; Thu, 09 Dec 2021 10:20:43 +0000 Received: (Authenticated sender: miquel.raynal@bootlin.com) by relay10.mail.gandi.net (Postfix) with ESMTPSA id DBED8240016; Thu, 9 Dec 2021 10:20:31 +0000 (UTC) Date: Thu, 9 Dec 2021 11:20:30 +0100 From: Miquel Raynal To: Xiangsheng Hou Cc: , , , , , , , , , , , , Subject: Re: [RFC,v4,3/5] spi: mtk: Add mediatek SPI Nand Flash interface driver Message-ID: <20211209112030.5cdcd07c@xps13> In-Reply-To: <20211130083202.14228-4-xiangsheng.hou@mediatek.com> References: <20211130083202.14228-1-xiangsheng.hou@mediatek.com> <20211130083202.14228-4-xiangsheng.hou@mediatek.com> Organization: Bootlin X-Mailer: Claws Mail 3.17.7 (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-20211209_022040_060278_BF1C1D31 X-CRM114-Status: GOOD ( 27.55 ) 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 SGkgWGlhbmdzaGVuZywKCnhpYW5nc2hlbmcuaG91QG1lZGlhdGVrLmNvbSB3cm90ZSBvbiBUdWUs IDMwIE5vdiAyMDIxIDE2OjMyOjAwICswODAwOgoKPiBUaGUgU1BJIE5hbmQgRmxhc2ggaW50ZXJm YWNlIGRyaXZlciBjb3dvcmsgd2l0aCBNZWRpYXRlayBwaXBlbGluZWQKPiBIVyBFQ0MgZW5naW5l Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IFhpYW5nc2hlbmcgSG91IDx4aWFuZ3NoZW5nLmhvdUBtZWRp YXRlay5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvc3BpL0tjb25maWcgICAgICAgIHwgICAxMSArCj4g IGRyaXZlcnMvc3BpL01ha2VmaWxlICAgICAgIHwgICAgMSArCj4gIGRyaXZlcnMvc3BpL3NwaS1t dGstc25maS5jIHwgMTExNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAg MyBmaWxlcyBjaGFuZ2VkLCAxMTI5IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvc3BpL3NwaS1tdGstc25maS5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3Bp L0tjb25maWcgYi9kcml2ZXJzL3NwaS9LY29uZmlnCj4gaW5kZXggNTk2NzA1ZDI0NDAwLi45Y2I2 YTE3M2IxZWYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9zcGkvS2NvbmZpZwo+ICsrKyBiL2RyaXZl cnMvc3BpL0tjb25maWcKPiBAQCAtNTM1LDYgKzUzNSwxNyBAQCBjb25maWcgU1BJX01UNjVYWAo+ ICAJICBzYXkgWSBvciBNIGhlcmUuSWYgeW91IGFyZSBub3Qgc3VyZSwgc2F5IE4uCj4gIAkgIFNQ SSBkcml2ZXJzIGZvciBNZWRpYXRlayBNVDY1WFggYW5kIE1UODFYWCBzZXJpZXMgQVJNIFNvQ3Mu Cj4gIAo+ICtjb25maWcgU1BJX01US19TTkZJCj4gKwl0cmlzdGF0ZSAiTWVkaWFUZWsgU1BJIE5B TkQgaW50ZXJmYWNlIgo+ICsJZGVwZW5kcyBvbiBNVEQKPiArCXNlbGVjdCBNVERfU1BJX05BTkQK PiArCXNlbGVjdCBNVERfTkFORF9FQ0NfTVRLCj4gKwloZWxwCj4gKwkgIFRoaXMgc2VsZWN0cyB0 aGUgU1BJIE5BTkQgRkxBU0ggaW50ZXJmYWNlKFNORkkpLAo+ICsJICB3aGljaCBjb3VsZCBiZSBm b3VuZCBvbiBNZWRpYVRlayBTb2MuCj4gKwkgIFNheSBZIG9yIE0gaGVyZS5JZiB5b3UgYXJlIG5v dCBzdXJlLCBzYXkgTi4KPiArCSAgTm90ZSBQYXJhbGxlbCBOYW5kIGFuZCBTUEkgTkFORCBpcyBh bHRlcm5hdGl2ZSBvbiBNZWRpYVRlayBTb0NzLgo+ICsKPiAgY29uZmlnIFNQSV9NVDc2MjEKPiAg CXRyaXN0YXRlICJNZWRpYVRlayBNVDc2MjEgU1BJIENvbnRyb2xsZXIiCj4gIAlkZXBlbmRzIG9u IFJBTElOSyB8fCBDT01QSUxFX1RFU1QKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvTWFrZWZp bGUgYi9kcml2ZXJzL3NwaS9NYWtlZmlsZQo+IGluZGV4IGRkNzM5M2E2MDQ2Zi4uNTdkMTFlZWNm NjYyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc3BpL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9z cGkvTWFrZWZpbGUKPiBAQCAtNzMsNiArNzMsNyBAQCBvYmotJChDT05GSUdfU1BJX01QQzUyeHgp CQkrPSBzcGktbXBjNTJ4eC5vCj4gIG9iai0kKENPTkZJR19TUElfTVQ2NVhYKSAgICAgICAgICAg ICAgICArPSBzcGktbXQ2NXh4Lm8KPiAgb2JqLSQoQ09ORklHX1NQSV9NVDc2MjEpCQkrPSBzcGkt bXQ3NjIxLm8KPiAgb2JqLSQoQ09ORklHX1NQSV9NVEtfTk9SKQkJKz0gc3BpLW10ay1ub3Iubwo+ ICtvYmotJChDT05GSUdfU1BJX01US19TTkZJKSAgICAgICAgICAgICAgKz0gc3BpLW10ay1zbmZp Lm8KPiAgb2JqLSQoQ09ORklHX1NQSV9NWElDKQkJCSs9IHNwaS1teGljLm8KPiAgb2JqLSQoQ09O RklHX1NQSV9NWFMpCQkJKz0gc3BpLW14cy5vCj4gIG9iai0kKENPTkZJR19TUElfTlBDTV9GSVUp CQkrPSBzcGktbnBjbS1maXUubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktbXRrLXNu ZmkuYyBiL2RyaXZlcnMvc3BpL3NwaS1tdGstc25maS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwMDAwMDAuLmI0ZGNlNmQ3ODE3Ngo+IC0tLSAvZGV2L251bGwKPiArKysg Yi9kcml2ZXJzL3NwaS9zcGktbXRrLXNuZmkuYwo+IEBAIC0wLDAgKzEsMTExNyBAQAo+ICsvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBEcml2ZXIgZm9yIE1l ZGlhVGVrIFNQSSBOYW5kIEZsYXNoIGludGVyZmFjZQo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMp IDIwMjEgTWVkaWFUZWsgSW5jLgo+ICsgKiBBdXRob3JzOglYaWFuZ3NoZW5nIEhvdQk8eGlhbmdz aGVuZy5ob3VAbWVkaWF0ZWsuY29tPgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9jbGsu aD4KPiArI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9p bnRlcnJ1cHQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgo+ICsjaW5jbHVkZSA8 bGludXgvbXRkL25hbmQtZWNjLW10ay5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiArI2lu Y2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2 aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9zcGkvc3BpLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLW1lbS5oPgo+ICsKPiArLyog UmVnaXN0ZXJzIHVzZWQgYnkgdGhlIGRyaXZlciAqLwo+ICsjZGVmaW5lIE5GSV9DTkZHCQkoMHgw MCkKPiArI2RlZmluZQkJQ05GR19ETUEJCUJJVCgwKQo+ICsjZGVmaW5lCQlDTkZHX1JFQURfRU4J CUJJVCgxKQo+ICsjZGVmaW5lCQlDTkZHX0RNQV9CVVJTVF9FTglCSVQoMikKPiArI2RlZmluZQkJ Q05GR19IV19FQ0NfRU4JCUJJVCg4KQo+ICsjZGVmaW5lCQlDTkZHX0FVVE9fRk1UX0VOCUJJVCg5 KQo+ICsjZGVmaW5lCQlDTkZHX09QX0NVU1QJCUdFTk1BU0soMTQsIDEzKQo+ICsjZGVmaW5lIE5G SV9QQUdFRk1UCQkoMHgwNCkKPiArI2RlZmluZQkJUEFHRUZNVF81MTJfMksJCSgwKQo+ICsjZGVm aW5lCQlQQUdFRk1UXzJLXzRLCQkoMSkKPiArI2RlZmluZQkJUEFHRUZNVF80S184SwkJKDIpCj4g KyNkZWZpbmUJCVBBR0VGTVRfOEtfMTZLCQkoMykKPiArI2RlZmluZQkJUEFHRUZNVF9QQUdFX01B U0sJR0VOTUFTSygxLCAwKQo+ICsjZGVmaW5lCQlQQUdFRk1UX1NFQ19TRUxfNTEyCUJJVCgyKQo+ ICsjZGVmaW5lCQlQQUdFRk1UX0ZETV9TSElGVAkoOCkKPiArI2RlZmluZQkJUEFHRUZNVF9GRE1f RUNDX1NISUZUCSgxMikKPiArI2RlZmluZQkJUEFHRUZNVF9TUEFSRV9TSElGVAkoMTYpCj4gKyNk ZWZpbmUJCVBBR0VGTVRfU1BBUkVfTUFTSwlHRU5NQVNLKDIxLCAxNikKPiArI2RlZmluZSBORklf Q09OCQkJKDB4MDgpCj4gKyNkZWZpbmUJCUNPTl9GSUZPX0ZMVVNICQlCSVQoMCkKPiArI2RlZmlu ZQkJQ09OX05GSV9SU1QJCUJJVCgxKQo+ICsjZGVmaW5lCQlDT05fQlJECQkJQklUKDgpCj4gKyNk ZWZpbmUJCUNPTl9CV1IJCQlCSVQoOSkKPiArI2RlZmluZQkJQ09OX1NFQ19TSElGVAkJKDEyKQo+ ICsjZGVmaW5lCQlDT05fU0VDX01BU0sJCUdFTk1BU0soMTYsIDEyKQo+ICsjZGVmaW5lIE5GSV9J TlRSX0VOCQkoMHgxMCkKPiArI2RlZmluZQkJSU5UUl9DVVNfUFJPR19FTglCSVQoNykKPiArI2Rl ZmluZQkJSU5UUl9DVVNfUkVBRF9FTglCSVQoOCkKPiArI2RlZmluZQkJSU5UUl9JUlFfRU4JCUJJ VCgzMSkKPiArI2RlZmluZSBORklfSU5UUl9TVEEJCSgweDE0KQo+ICsjZGVmaW5lIE5GSV9DTUQJ CQkoMHgyMCkKPiArI2RlZmluZQkJQ01EX0RVTU1ZCQkoMHgwMCkKPiArI2RlZmluZSBORklfU1RS REFUQQkJKDB4NDApCj4gKyNkZWZpbmUJCVNUQVJfRU4JCQlCSVQoMCkKPiArI2RlZmluZSBORklf U1RBCQkJKDB4NjApCj4gKyNkZWZpbmUJCU5GSV9GU01fTUFTSwkJR0VOTUFTSygxOSwgMTYpCj4g KyNkZWZpbmUJCVNUQV9FTVBfUEFHRQkJQklUKDEyKQo+ICsjZGVmaW5lIE5GSV9BRERSQ05UUgkJ KDB4NzApCj4gKyNkZWZpbmUJCUNOVFJfTUFTSwkJR0VOTUFTSygxNiwgMTIpCj4gKyNkZWZpbmUJ CUFERFJDTlRSX1NFQ19TSElGVAkoMTIpCj4gKyNkZWZpbmUJCUFERFJDTlRSX1NFQyh2YWwpIFwK PiArCQkoKCh2YWwpICYgQ05UUl9NQVNLKSA+PiBBRERSQ05UUl9TRUNfU0hJRlQpCj4gKyNkZWZp bmUgTkZJX1NUUkFERFIJCSgweDgwKQo+ICsjZGVmaW5lIE5GSV9CWVRFTEVOCQkoMHg4NCkKPiAr I2RlZmluZSBORklfRkRNTCh4KQkJKDB4QTAgKyAoeCkgKiBzaXplb2YodTMyKSAqIDIpCj4gKyNk ZWZpbmUgTkZJX0ZETU0oeCkJCSgweEE0ICsgKHgpICogc2l6ZW9mKHUzMikgKiAyKQo+ICsjZGVm aW5lIE5GSV9NQVNURVJTVEEJCSgweDIyNCkKPiArI2RlZmluZQkJQUhCX0JVU19CVVNZCQlHRU5N QVNLKDEsIDApCj4gKyNkZWZpbmUgU05GSV9NQUNfQ1RMCQkoMHg1MDApCj4gKyNkZWZpbmUJCU1B Q19XSVAJCQlCSVQoMCkKPiArI2RlZmluZQkJTUFDX1dJUF9SRUFEWQkJQklUKDEpCj4gKyNkZWZp bmUJCU1BQ19UUklHCQlCSVQoMikKPiArI2RlZmluZQkJTUFDX0VOCQkJQklUKDMpCj4gKyNkZWZp bmUJCU1BQ19TSU9fU0VMCQlCSVQoNCkKPiArI2RlZmluZSBTTkZJX01BQ19PVVRMCQkoMHg1MDQp Cj4gKyNkZWZpbmUgU05GSV9NQUNfSU5MCQkoMHg1MDgpCj4gKyNkZWZpbmUgU05GSV9SRF9DVEwy CQkoMHg1MTApCj4gKyNkZWZpbmUJCVJEX0NNRF9NQVNLCQlHRU5NQVNLKDcsIDApCj4gKyNkZWZp bmUJCVJEX0RVTU1ZX1NISUZUCQkoOCkKPiArI2RlZmluZSBTTkZJX1JEX0NUTDMJCSgweDUxNCkK PiArI2RlZmluZQkJUkRfQUREUl9NQVNLCQlHRU5NQVNLKDE2LCAwKQo+ICsjZGVmaW5lIFNORklf UEdfQ1RMMQkJKDB4NTI0KQo+ICsjZGVmaW5lCQlXUl9MT0FEX0NNRF9NQVNLCUdFTk1BU0soMTUs IDgpCj4gKyNkZWZpbmUJCVdSX0xPQURfQ01EX1NISUZUCSg4KQo+ICsjZGVmaW5lIFNORklfUEdf Q1RMMgkJKDB4NTI4KQo+ICsjZGVmaW5lCQlXUl9MT0FEX0FERFJfTUFTSwlHRU5NQVNLKDE1LCAw KQo+ICsjZGVmaW5lIFNORklfTUlTQ19DVEwJCSgweDUzOCkKPiArI2RlZmluZQkJUkRfQ1VTVE9N X0VOCQlCSVQoNikKPiArI2RlZmluZQkJV1JfQ1VTVE9NX0VOCQlCSVQoNykKPiArI2RlZmluZQkJ TEFUQ0hfTEFUX1NISUZUCQkoOCkKPiArI2RlZmluZQkJTEFUQ0hfTEFUX01BU0sJCUdFTk1BU0so OSwgOCkKPiArI2RlZmluZQkJUkRfTU9ERV9YMgkJQklUKDE2KQo+ICsjZGVmaW5lCQlSRF9NT0RF X1g0CQlCSVQoMTcpCj4gKyNkZWZpbmUJCVJEX01PREVfRFFVQUwJCUJJVCgxOCkKPiArI2RlZmlu ZQkJUkRfTU9ERV9NQVNLCQlHRU5NQVNLKDE4LCAxNikKPiArI2RlZmluZQkJV1JfWDRfRU4JCUJJ VCgyMCkKPiArI2RlZmluZQkJU1dfUlNUCQkJQklUKDI4KQo+ICsjZGVmaW5lIFNORklfTUlTQ19D VEwyCQkoMHg1M2MpCj4gKyNkZWZpbmUJCVdSX0xFTl9TSElGVAkJKDE2KQo+ICsjZGVmaW5lIFNO RklfRExZX0NUTDMJCSgweDU0OCkKPiArI2RlZmluZQkJU0FNX0RMWV9NQVNLCQlHRU5NQVNLKDUs IDApCj4gKyNkZWZpbmUgU05GSV9TVEFfQ1RMMQkJKDB4NTUwKQo+ICsjZGVmaW5lCQlTUElfU1RB VEUJCUdFTk1BU0soMywgMCkKPiArI2RlZmluZQkJQ1VTX1JFQURfRE9ORQkJQklUKDI3KQo+ICsj ZGVmaW5lCQlDVVNfUFJPR19ET05FCQlCSVQoMjgpCj4gKyNkZWZpbmUgU05GSV9DTkZHCQkoMHg1 NWMpCj4gKyNkZWZpbmUJCVNORklfTU9ERV9FTgkJQklUKDApCj4gKyNkZWZpbmUgU05GSV9HUFJB TV9EQVRBCQkoMHg4MDApCj4gKyNkZWZpbmUJCVNORklfR1BSQU1fTUFYX0xFTgkoMTYwKQo+ICsK PiArI2RlZmluZSBNVEtfU05GSV9USU1FT1VUCQkoNTAwMDAwKQo+ICsjZGVmaW5lIE1US19TTkZJ X1JFU0VUX1RJTUVPVVQJCSgxMDAwMDAwKQo+ICsjZGVmaW5lIE1US19TTkZJX0FVVE9TVVNQRU5E X0RFTEFZCSgxMDAwKQo+ICsjZGVmaW5lIEtCKHgpCQkJCSgoeCkgKiAxMDI0VUwpCj4gKwo+ICtz dHJ1Y3QgbXRrX3NuZmlfY2FwcyB7Cj4gKwl1OCBwYWdlZm9ybWF0X3NwYXJlX3NoaWZ0Owo+ICt9 Owo+ICsKPiArc3RydWN0IG10a19zbmZpIHsKPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiArCXN0 cnVjdCBjb21wbGV0aW9uIGRvbmU7Cj4gKwl2b2lkIF9faW9tZW0gKnJlZ3M7Cj4gKwljb25zdCBz dHJ1Y3QgbXRrX3NuZmlfY2FwcyAqY2FwczsKPiArCj4gKwlzdHJ1Y3QgY2xrICpuZmlfY2xrOwo+ ICsJc3RydWN0IGNsayAqc25maV9jbGs7Cj4gKwlzdHJ1Y3QgY2xrICpoY2xrOwo+ICsKPiArCXN0 cnVjdCBuYW5kX2VjY19lbmdpbmUgKmVuZ2luZTsKPiArCj4gKwl1MzIgc2FtcGxlX2RlbGF5Owo+ ICsJdTMyIHJlYWRfbGF0ZW5jeTsKPiArCj4gKwl2b2lkICp0eF9idWY7Cj4gKwlkbWFfYWRkcl90 IGRtYV9hZGRyOwo+ICt9Owo+ICsKPiArc3RhdGljIHN0cnVjdCBtdGtfZWNjX2VuZ2luZSAqbXRr X3NuZmlfdG9fZWNjX2VuZ2luZShzdHJ1Y3QgbXRrX3NuZmkgKnNuZmkpCj4gK3sKPiArCXJldHVy biBzbmZpLT5lbmdpbmUtPnByaXY7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19zbmZpX21h Y19lbmFibGUoc3RydWN0IG10a19zbmZpICpzbmZpKQo+ICt7Cj4gKwl1MzIgdmFsOwo+ICsKPiAr CXZhbCA9IHJlYWRsKHNuZmktPnJlZ3MgKyBTTkZJX01BQ19DVEwpOwo+ICsJdmFsICY9IH5NQUNf U0lPX1NFTDsKPiArCXZhbCB8PSBNQUNfRU47Cj4gKwo+ICsJd3JpdGVsKHZhbCwgc25maS0+cmVn cyArIFNORklfTUFDX0NUTCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXRrX3NuZmlfbWFjX3Ry aWdnZXIoc3RydWN0IG10a19zbmZpICpzbmZpKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsJdTMyIHZh bDsKPiArCj4gKwl2YWwgPSByZWFkbChzbmZpLT5yZWdzICsgU05GSV9NQUNfQ1RMKTsKPiArCXZh bCB8PSBNQUNfVFJJRzsKPiArCXdyaXRlbCh2YWwsIHNuZmktPnJlZ3MgKyBTTkZJX01BQ19DVEwp Owo+ICsKPiArCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dF9hdG9taWMoc25maS0+cmVncyArIFNO RklfTUFDX0NUTCwKPiArCQkJCQl2YWwsIHZhbCAmIE1BQ19XSVBfUkVBRFksCj4gKwkJCQkJMCwg TVRLX1NORklfVElNRU9VVCk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoc25maS0+ ZGV2LCAid2FpdCBmb3Igd2lwIHJlYWR5IHRpbWVvdXRcbiIpOwo+ICsJCXJldHVybiAtRUlPOwo+ ICsJfQo+ICsKPiArCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dF9hdG9taWMoc25maS0+cmVncyAr IFNORklfTUFDX0NUTCwKPiArCQkJCQl2YWwsICEodmFsICYgTUFDX1dJUCksIDAsCj4gKwkJCQkJ TVRLX1NORklfVElNRU9VVCk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoc25maS0+ ZGV2LCAiY29tbWFuZCB3cml0ZSB0aW1lb3V0XG4iKTsKPiArCQlyZXR1cm4gLUVJTzsKPiArCX0K PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX3NuZmlfbWFjX2Rp c2FibGUoc3RydWN0IG10a19zbmZpICpzbmZpKQo+ICt7Cj4gKwl1MzIgdmFsOwo+ICsKPiArCXZh bCA9IHJlYWRsKHNuZmktPnJlZ3MgKyBTTkZJX01BQ19DVEwpOwo+ICsJdmFsICY9IH4oTUFDX1RS SUcgfCBNQUNfRU4pOwo+ICsJd3JpdGVsKHZhbCwgc25maS0+cmVncyArIFNORklfTUFDX0NUTCk7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXRrX3NuZmlfbWFjX29wKHN0cnVjdCBtdGtfc25maSAq c25maSkKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwltdGtfc25maV9tYWNfZW5hYmxlKHNuZmkp Owo+ICsJcmV0ID0gbXRrX3NuZmlfbWFjX3RyaWdnZXIoc25maSk7Cj4gKwltdGtfc25maV9tYWNf ZGlzYWJsZShzbmZpKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5s aW5lIHZvaWQgbXRrX3NuZmlfcmVhZF9vb2JfZnJlZShzdHJ1Y3QgbXRrX3NuZmkgKnNuZmksCj4g KwkJCQkJICBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3ApCj4gK3sKPiArCXN0cnVjdCBtdGtf ZWNjX2VuZ2luZSAqZW5nID0gbXRrX3NuZmlfdG9fZWNjX2VuZ2luZShzbmZpKTsKPiArCXU4ICpv b2JwdHIgPSBvcC0+ZGF0YS5idWYuaW47Cj4gKwl1MzIgdmFsbCwgdmFsbTsKPiArCWludCBpLCBq Owo+ICsKPiArCW9vYnB0ciArPSBlbmctPnNlY3Rpb25fc2l6ZSAqIGVuZy0+bnN0ZXBzOwo+ICsJ Zm9yIChpID0gMDsgaSA8IGVuZy0+bnN0ZXBzOyBpKyspIHsKPiArCQl2YWxsID0gcmVhZGwoc25m aS0+cmVncyArIE5GSV9GRE1MKGkpKTsKPiArCQl2YWxtID0gcmVhZGwoc25maS0+cmVncyArIE5G SV9GRE1NKGkpKTsKPiArCj4gKwkJZm9yIChqID0gMDsgaiA8IGVuZy0+b29iX2ZyZWU7IGorKykK PiArCQkJb29icHRyW2pdID0gKGogPj0gNCA/IHZhbG0gOiB2YWxsKSA+PiAoKGogJSA0KSAqIDgp Owo+ICsKPiArCQlvb2JwdHIgKz0gZW5nLT5vb2JfZnJlZTsKPiArCX0KPiArfQo+ICsKPiArc3Rh dGljIGlubGluZSB2b2lkIG10a19zbmZpX3dyaXRlX29vYl9mcmVlKHN0cnVjdCBtdGtfc25maSAq c25maSwKPiArCQkJCQkgICBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3ApCj4gK3sKPiArCXN0 cnVjdCBtdGtfZWNjX2VuZ2luZSAqZW5nID0gbXRrX3NuZmlfdG9fZWNjX2VuZ2luZShzbmZpKTsK PiArCWNvbnN0IHU4ICpvb2JwdHIgPSBvcC0+ZGF0YS5idWYub3V0Owo+ICsJdTMyIHZhbGwsIHZh bG07Cj4gKwlpbnQgaSwgajsKPiArCj4gKwlvb2JwdHIgKz0gZW5nLT5zZWN0aW9uX3NpemUgKiBl bmctPm5zdGVwczsKPiArCWZvciAoaSA9IDA7IGkgPCBlbmctPm5zdGVwczsgaSsrKSB7Cj4gKwkJ dmFsbCA9IDA7Cj4gKwkJdmFsbSA9IDA7Cj4gKwkJZm9yIChqID0gMDsgaiA8IDg7IGorKykgewo+ ICsJCQlpZiAoaiA8IDQpCj4gKwkJCQl2YWxsIHw9IChqIDwgZW5nLT5vb2JfZnJlZSA/IG9vYnB0 cltqXSA6IDB4ZmYpCj4gKwkJCQkJPDwgKGogKiA4KTsKPiArCQkJZWxzZQo+ICsJCQkJdmFsbSB8 PSAoaiA8IGVuZy0+b29iX2ZyZWUgPyBvb2JwdHJbal0gOiAweGZmKQo+ICsJCQkJCTw8ICgoaiAt IDQpICogOCk7Cj4gKwkJfQo+ICsKPiArCQl3cml0ZWwodmFsbCwgc25maS0+cmVncyArIE5GSV9G RE1MKGkpKTsKPiArCQl3cml0ZWwodmFsbSwgc25maS0+cmVncyArIE5GSV9GRE1NKGkpKTsKPiAr CQlvb2JwdHIgKz0gZW5nLT5vb2JfZnJlZTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGlycXJl dHVybl90IG10a19zbmZpX2lycShpbnQgaXJxLCB2b2lkICppZCkKPiArewo+ICsJc3RydWN0IG10 a19zbmZpICpzbmZpID0gaWQ7Cj4gKwl1MzIgc3RhLCBpZW47Cj4gKwo+ICsJc3RhID0gcmVhZGwo c25maS0+cmVncyArIE5GSV9JTlRSX1NUQSk7Cj4gKwlpZW4gPSByZWFkbChzbmZpLT5yZWdzICsg TkZJX0lOVFJfRU4pOwo+ICsKPiArCWlmICghKHN0YSAmIGllbikpCj4gKwkJcmV0dXJuIElSUV9O T05FOwo+ICsKPiArCXdyaXRlbCgwLCBzbmZpLT5yZWdzICsgTkZJX0lOVFJfRU4pOwo+ICsJY29t cGxldGUoJnNuZmktPmRvbmUpOwo+ICsKPiArCXJldHVybiBJUlFfSEFORExFRDsKPiArfQo+ICsK PiArc3RhdGljIGludCBtdGtfc25maV9lbmFibGVfY2xrKHN0cnVjdCBkZXZpY2UgKmRldiwgc3Ry dWN0IG10a19zbmZpICpzbmZpKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGNsa19w cmVwYXJlX2VuYWJsZShzbmZpLT5uZmlfY2xrKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJy KGRldiwgImZhaWxlZCB0byBlbmFibGUgbmZpIGNsa1xuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiAr CX0KPiArCj4gKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoc25maS0+c25maV9jbGspOwo+ICsJ aWYgKHJldCkgewo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBzbmZpIGNsa1xu Iik7Cj4gKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNuZmktPm5maV9jbGspOwo+ICsJCXJldHVy biByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHNuZmktPmhjbGsp Owo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBoY2xr XG4iKTsKPiArCQljbGtfZGlzYWJsZV91bnByZXBhcmUoc25maS0+bmZpX2Nsayk7Cj4gKwkJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKHNuZmktPnNuZmlfY2xrKTsKCmRlZmluaXRlbHkgZGVzZXJ2ZXMg Z290byBzdGF0ZW1lbnRzIDopCgo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG10a19zbmZpX2Rpc2FibGVfY2xrKHN0cnVjdCBt dGtfc25maSAqc25maSkKPiArewo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNuZmktPm5maV9j bGspOwo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNuZmktPnNuZmlfY2xrKTsKPiArCWNsa19k aXNhYmxlX3VucHJlcGFyZShzbmZpLT5oY2xrKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdGtf c25maV9yZXNldChzdHJ1Y3QgbXRrX3NuZmkgKnNuZmkpCj4gK3sKPiArCXUzMiB2YWw7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCXZhbCA9IHJlYWRsKHNuZmktPnJlZ3MgKyBTTkZJX01JU0NfQ1RMKSB8 IFNXX1JTVDsKPiArCXdyaXRlbCh2YWwsIHNuZmktPnJlZ3MgKyBTTkZJX01JU0NfQ1RMKTsKPiAr Cj4gKwlyZXQgPSByZWFkd19wb2xsX3RpbWVvdXQoc25maS0+cmVncyArIFNORklfU1RBX0NUTDEs IHZhbCwKPiArCQkJCSAhKHZhbCAmIFNQSV9TVEFURSksIDAsCj4gKwkJCQkgTVRLX1NORklfUkVT RVRfVElNRU9VVCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X3dhcm4oc25maS0+ZGV2LCAid2Fp dCBzcGkgaWRsZSB0aW1lb3V0IDB4JXhcbiIsIHZhbCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0K PiArCj4gKwl2YWwgPSByZWFkbChzbmZpLT5yZWdzICsgU05GSV9NSVNDX0NUTCk7Cj4gKwl2YWwg Jj0gflNXX1JTVDsKPiArCXdyaXRlbCh2YWwsIHNuZmktPnJlZ3MgKyBTTkZJX01JU0NfQ1RMKTsK PiArCj4gKwl3cml0ZXcoQ09OX0ZJRk9fRkxVU0ggfCBDT05fTkZJX1JTVCwgc25maS0+cmVncyAr IE5GSV9DT04pOwo+ICsJcmV0ID0gcmVhZHdfcG9sbF90aW1lb3V0KHNuZmktPnJlZ3MgKyBORklf U1RBLCB2YWwsCj4gKwkJCQkgISh2YWwgJiBORklfRlNNX01BU0spLCAwLAo+ICsJCQkJIE1US19T TkZJX1JFU0VUX1RJTUVPVVQpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl93YXJuKHNuZmktPmRl diwgIndhaXQgbmZpIGZzbSBpZGxlIHRpbWVvdXQgMHgleFxuIiwgdmFsKTsKPiArCQlyZXR1cm4g cmV0Owo+ICsJfQo+ICsKPiArCXZhbCA9IHJlYWRsKHNuZmktPnJlZ3MgKyBORklfU1RSREFUQSk7 Cj4gKwl2YWwgJj0gflNUQVJfRU47Cj4gKwl3cml0ZXcodmFsLCBzbmZpLT5yZWdzICsgTkZJX1NU UkRBVEEpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19zbmZp X2luaXQoc3RydWN0IG10a19zbmZpICpzbmZpKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsJdTMyIHZh bDsKPiArCj4gKwlyZXQgPSBtdGtfc25maV9yZXNldChzbmZpKTsKPiArCWlmIChyZXQpCj4gKwkJ cmV0dXJuIHJldDsKPiArCj4gKwl3cml0ZWwoU05GSV9NT0RFX0VOLCBzbmZpLT5yZWdzICsgU05G SV9DTkZHKTsKPiArCj4gKwlpZiAoc25maS0+c2FtcGxlX2RlbGF5KSB7Cj4gKwkJdmFsID0gcmVh ZGwoc25maS0+cmVncyArIFNORklfRExZX0NUTDMpOwo+ICsJCXZhbCAmPSB+U0FNX0RMWV9NQVNL Owo+ICsJCXZhbCB8PSBzbmZpLT5zYW1wbGVfZGVsYXk7Cj4gKwkJd3JpdGVsKHZhbCwgc25maS0+ cmVncyArIFNORklfRExZX0NUTDMpOwo+ICsJfQo+ICsKPiArCWlmIChzbmZpLT5yZWFkX2xhdGVu Y3kpIHsKPiArCQl2YWwgPSByZWFkbChzbmZpLT5yZWdzICsgU05GSV9NSVNDX0NUTCk7Cj4gKwkJ dmFsICY9IH5MQVRDSF9MQVRfTUFTSzsKPiArCQl2YWwgfD0gKHNuZmktPnJlYWRfbGF0ZW5jeSA8 PCBMQVRDSF9MQVRfU0hJRlQpOwo+ICsJCXdyaXRlbCh2YWwsIHNuZmktPnJlZ3MgKyBTTkZJX01J U0NfQ1RMKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQg bXRrX3NuZmlfcHJlcGFyZV9mb3JfdHgoc3RydWN0IG10a19zbmZpICpzbmZpLAo+ICsJCQkJICAg IGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCkKPiArewo+ICsJc3RydWN0IG10a19lY2NfZW5n aW5lICplbmcgPSBtdGtfc25maV90b19lY2NfZW5naW5lKHNuZmkpOwo+ICsJdTMyIHZhbDsKPiAr Cj4gKwl2YWwgPSByZWFkbChzbmZpLT5yZWdzICsgU05GSV9QR19DVEwxKTsKPiArCXZhbCAmPSB+ V1JfTE9BRF9DTURfTUFTSzsKPiArCXZhbCB8PSBvcC0+Y21kLm9wY29kZSA8PCBXUl9MT0FEX0NN RF9TSElGVDsKPiArCXdyaXRlbCh2YWwsIHNuZmktPnJlZ3MgKyBTTkZJX1BHX0NUTDEpOwo+ICsK PiArCXdyaXRlbChvcC0+YWRkci52YWwgJiBXUl9MT0FEX0FERFJfTUFTSywKPiArCSAgICAgICBz bmZpLT5yZWdzICsgU05GSV9QR19DVEwyKTsKPiArCj4gKwl2YWwgPSByZWFkbChzbmZpLT5yZWdz ICsgU05GSV9NSVNDX0NUTCk7Cj4gKwl2YWwgfD0gV1JfQ1VTVE9NX0VOOwo+ICsJaWYgKG9wLT5k YXRhLmJ1c3dpZHRoID09IDQpCj4gKwkJdmFsIHw9IFdSX1g0X0VOOwo+ICsJd3JpdGVsKHZhbCwg c25maS0+cmVncyArIFNORklfTUlTQ19DVEwpOwo+ICsKPiArCXZhbCA9IGVuZy0+bnN0ZXBzICog KGVuZy0+b29iX3Blcl9zZWN0aW9uICsgZW5nLT5zZWN0aW9uX3NpemUpOwo+ICsJd3JpdGVsKHZh bCA8PCBXUl9MRU5fU0hJRlQsIHNuZmktPnJlZ3MgKyBTTkZJX01JU0NfQ1RMMik7Cj4gKwo+ICsJ d3JpdGVsKElOVFJfQ1VTX1BST0dfRU4gfCBJTlRSX0lSUV9FTiwgc25maS0+cmVncyArIE5GSV9J TlRSX0VOKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX3NuZmlfcHJlcGFyZV9mb3Jfcngo c3RydWN0IG10a19zbmZpICpzbmZpLAo+ICsJCQkJICAgIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29w ICpvcCkKPiArewo+ICsJc3RydWN0IG10a19lY2NfZW5naW5lICplbmcgPSBtdGtfc25maV90b19l Y2NfZW5naW5lKHNuZmkpOwo+ICsJdTMyIHZhbCwgZHVtbXlfY3ljbGU7Cj4gKwo+ICsJZHVtbXlf Y3ljbGUgPSAob3AtPmR1bW15Lm5ieXRlcyA8PCAzKSA+Pgo+ICsJCQkoZmZzKG9wLT5kdW1teS5i dXN3aWR0aCkgLSAxKTsKPiArCXZhbCA9IChvcC0+Y21kLm9wY29kZSAmIFJEX0NNRF9NQVNLKSB8 Cj4gKwkJICAoZHVtbXlfY3ljbGUgPDwgUkRfRFVNTVlfU0hJRlQpOwo+ICsJd3JpdGVsKHZhbCwg c25maS0+cmVncyArIFNORklfUkRfQ1RMMik7Cj4gKwo+ICsJd3JpdGVsKG9wLT5hZGRyLnZhbCAm IFJEX0FERFJfTUFTSywKPiArCSAgICAgICBzbmZpLT5yZWdzICsgU05GSV9SRF9DVEwzKTsKPiAr Cj4gKwl2YWwgPSByZWFkbChzbmZpLT5yZWdzICsgU05GSV9NSVNDX0NUTCk7Cj4gKwl2YWwgfD0g UkRfQ1VTVE9NX0VOOwo+ICsJdmFsICY9IH5SRF9NT0RFX01BU0s7Cj4gKwlpZiAob3AtPmRhdGEu YnVzd2lkdGggPT0gNCkKPiArCQl2YWwgfD0gUkRfTU9ERV9YNDsKPiArCWVsc2UgaWYgKG9wLT5k YXRhLmJ1c3dpZHRoID09IDIpCj4gKwkJdmFsIHw9IFJEX01PREVfWDI7Cj4gKwo+ICsJaWYgKG9w LT5hZGRyLmJ1c3dpZHRoICE9IDEpCj4gKwkJdmFsIHw9IFJEX01PREVfRFFVQUw7Cj4gKwo+ICsJ d3JpdGVsKHZhbCwgc25maS0+cmVncyArIFNORklfTUlTQ19DVEwpOwo+ICsKPiArCXZhbCA9IGVu Zy0+bnN0ZXBzICogKGVuZy0+b29iX3Blcl9zZWN0aW9uICsgZW5nLT5zZWN0aW9uX3NpemUpOwo+ ICsJd3JpdGVsKHZhbCwgc25maS0+cmVncyArIFNORklfTUlTQ19DVEwyKTsKPiArCj4gKwl3cml0 ZWwoSU5UUl9DVVNfUkVBRF9FTiB8IElOVFJfSVJRX0VOLCBzbmZpLT5yZWdzICsgTkZJX0lOVFJf RU4pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19zbmZpX3ByZXBhcmUoc3RydWN0IG10a19z bmZpICpzbmZpLAo+ICsJCQkgICAgY29uc3Qgc3RydWN0IHNwaV9tZW1fb3AgKm9wLCBib29sIHJ4 KQo+ICt7Cj4gKwlzdHJ1Y3QgbXRrX2VjY19lbmdpbmUgKmVuZyA9IG10a19zbmZpX3RvX2VjY19l bmdpbmUoc25maSk7Cj4gKwlkbWFfYWRkcl90IGFkZHI7Cj4gKwlpbnQgcmV0Owo+ICsJdTMyIHZh bDsKPiArCj4gKwlhZGRyID0gZG1hX21hcF9zaW5nbGUoc25maS0+ZGV2LAo+ICsJCQkgICAgICBv cC0+ZGF0YS5idWYuaW4sIG9wLT5kYXRhLm5ieXRlcywKPiArCQkJICAgICAgcnggPyBETUFfRlJP TV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFKTsKPiArCXJldCA9IGRtYV9tYXBwaW5nX2Vycm9yKHNu ZmktPmRldiwgYWRkcik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihzbmZpLT5kZXYsICJk bWEgbWFwcGluZyBlcnJvclxuIik7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJ c25maS0+ZG1hX2FkZHIgPSBhZGRyOwo+ICsJd3JpdGVsKGxvd2VyXzMyX2JpdHMoYWRkciksIHNu ZmktPnJlZ3MgKyBORklfU1RSQUREUik7Cj4gKwo+ICsJaWYgKG9wLT5lY2NfZW4gJiYgIXJ4KQo+ ICsJCW10a19zbmZpX3dyaXRlX29vYl9mcmVlKHNuZmksIG9wKTsKPiArCj4gKwl2YWwgPSByZWFk dyhzbmZpLT5yZWdzICsgTkZJX0NORkcpOwo+ICsJdmFsIHw9IENORkdfRE1BIHwgQ05GR19ETUFf QlVSU1RfRU4gfCBDTkZHX09QX0NVU1Q7Cj4gKwl2YWwgfD0gcnggPyBDTkZHX1JFQURfRU4gOiAw Owo+ICsKPiArCWlmIChvcC0+ZWNjX2VuKQo+ICsJCXZhbCB8PSBDTkZHX0hXX0VDQ19FTiB8IENO RkdfQVVUT19GTVRfRU47Cj4gKwo+ICsJd3JpdGV3KHZhbCwgc25maS0+cmVncyArIE5GSV9DTkZH KTsKPiArCj4gKwl3cml0ZWwoZW5nLT5uc3RlcHMgPDwgQ09OX1NFQ19TSElGVCwgc25maS0+cmVn cyArIE5GSV9DT04pOwo+ICsKPiArCWluaXRfY29tcGxldGlvbigmc25maS0+ZG9uZSk7Cj4gKwo+ ICsJLyogdHJpZ2dlciBzdGF0ZSBtYWNoaW5lIHRvIGN1c3RvbSBvcCBtb2RlICovCj4gKwl3cml0 ZWwoQ01EX0RVTU1ZLCBzbmZpLT5yZWdzICsgTkZJX0NNRCk7Cj4gKwo+ICsJaWYgKHJ4KQo+ICsJ CW10a19zbmZpX3ByZXBhcmVfZm9yX3J4KHNuZmksIG9wKTsKPiArCWVsc2UKPiArCQltdGtfc25m aV9wcmVwYXJlX2Zvcl90eChzbmZpLCBvcCk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIG10a19zbmZpX3RyaWdnZXIoc3RydWN0IG10a19zbmZpICpzbmZpLAo+ICsJ CQkgICAgIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCwgYm9vbCByeCkKPiArewo+ICsJdTMy IHZhbDsKPiArCj4gKwl2YWwgPSByZWFkbChzbmZpLT5yZWdzICsgTkZJX0NPTik7Cj4gKwl2YWwg fD0gcnggPyBDT05fQlJEIDogQ09OX0JXUjsKPiArCXdyaXRldyh2YWwsIHNuZmktPnJlZ3MgKyBO RklfQ09OKTsKPiArCj4gKwl3cml0ZXcoU1RBUl9FTiwgc25maS0+cmVncyArIE5GSV9TVFJEQVRB KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdGtfc25maV93YWl0X2RvbmUoc3RydWN0IG10a19z bmZpICpzbmZpLAo+ICsJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3AsIGJvb2wg cngpCj4gK3sKPiArCXN0cnVjdCBtdGtfZWNjX2VuZ2luZSAqZW5nID0gbXRrX3NuZmlfdG9fZWNj X2VuZ2luZShzbmZpKTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IHNuZmktPmRldjsKPiArCXUz MiB2YWw7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGlt ZW91dCgmc25maS0+ZG9uZSwgbXNlY3NfdG9famlmZmllcyg1MDApKTsKPiArCWlmICghcmV0KSB7 Cj4gKwkJZGV2X2VycihkZXYsICJ3YWl0IGZvciAlZCBjb21wbGV0aW9uIGRvbmUgdGltZW91dFxu IiwgcngpOwo+ICsJCXJldHVybiAtRVRJTUVET1VUOwo+ICsJfQo+ICsKPiArCWlmIChyeCkgewo+ ICsJCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dF9hdG9taWMoc25maS0+cmVncyArIE5GSV9CWVRF TEVOLAo+ICsJCQkJCQl2YWwsCj4gKwkJCQkJCUFERFJDTlRSX1NFQyh2YWwpID49Cj4gKwkJCQkJ CWVuZy0+bnN0ZXBzLAo+ICsJCQkJCQkwLCBNVEtfU05GSV9USU1FT1VUKTsKPiArCQlpZiAocmV0 KSB7Cj4gKwkJCWRldl9lcnIoZGV2LCAid2FpdCBmb3Igcnggc2VjdGlvbiBjb3VudCB0aW1lb3V0 XG4iKTsKPiArCQkJcmV0dXJuIC1FVElNRURPVVQ7Cj4gKwkJfQo+ICsKPiArCQlyZXQgPSByZWFk bF9wb2xsX3RpbWVvdXRfYXRvbWljKHNuZmktPnJlZ3MgKyBORklfTUFTVEVSU1RBLAo+ICsJCQkJ CQl2YWwsCj4gKwkJCQkJCSEodmFsICYgQUhCX0JVU19CVVNZKSwKPiArCQkJCQkJMCwgTVRLX1NO RklfVElNRU9VVCk7Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlkZXZfZXJyKGRldiwgIndhaXQgZm9y IGJ1cyBidXN5IHRpbWVvdXRcbiIpOwo+ICsJCQlyZXR1cm4gLUVUSU1FRE9VVDsKPiArCQl9Cj4g Kwl9IGVsc2Ugewo+ICsJCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dF9hdG9taWMoc25maS0+cmVn cyArIE5GSV9BRERSQ05UUiwKPiArCQkJCQkJdmFsLAo+ICsJCQkJCQlBRERSQ05UUl9TRUModmFs KSA+PQo+ICsJCQkJCQllbmctPm5zdGVwcywKPiArCQkJCQkJMCwgTVRLX1NORklfVElNRU9VVCk7 Cj4gKwkJaWYgKHJldCkgewo+ICsJCQlkZXZfZXJyKGRldiwgIndhaXQgZm9yIHR4IHNlY3Rpb24g Y291bnQgdGltZW91dFxuIik7Cj4gKwkJCXJldHVybiAtRVRJTUVET1VUOwo+ICsJCX0KPiArCX0K PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbXRrX3NuZmlfY29tcGxl dGUoc3RydWN0IG10a19zbmZpICpzbmZpLAo+ICsJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc3BpX21l bV9vcCAqb3AsIGJvb2wgcngpCj4gK3sKPiArCXUzMiB2YWw7Cj4gKwo+ICsJZG1hX3VubWFwX3Np bmdsZShzbmZpLT5kZXYsCj4gKwkJCSBzbmZpLT5kbWFfYWRkciwgb3AtPmRhdGEubmJ5dGVzLAo+ ICsJCQkgcnggPyBETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFKTsKPiArCj4gKwlpZiAo b3AtPmVjY19lbiAmJiByeCkKPiArCQltdGtfc25maV9yZWFkX29vYl9mcmVlKHNuZmksIG9wKTsK PiArCj4gKwl2YWwgPSByZWFkbChzbmZpLT5yZWdzICsgU05GSV9NSVNDX0NUTCk7Cj4gKwl2YWwg Jj0gcnggPyB+UkRfQ1VTVE9NX0VOIDogfldSX0NVU1RPTV9FTjsKPiArCXdyaXRlbCh2YWwsIHNu ZmktPnJlZ3MgKyBTTkZJX01JU0NfQ1RMKTsKPiArCj4gKwl2YWwgPSByZWFkbChzbmZpLT5yZWdz ICsgU05GSV9TVEFfQ1RMMSk7Cj4gKwl2YWwgfD0gcnggPyBDVVNfUkVBRF9ET05FIDogQ1VTX1BS T0dfRE9ORTsKPiArCXdyaXRldyh2YWwsIHNuZmktPnJlZ3MgKyBTTkZJX1NUQV9DVEwxKTsKPiAr CXZhbCAmPSByeCA/IH5DVVNfUkVBRF9ET05FIDogfkNVU19QUk9HX0RPTkU7Cj4gKwl3cml0ZXco dmFsLCBzbmZpLT5yZWdzICsgU05GSV9TVEFfQ1RMMSk7Cj4gKwo+ICsJLyogRGlzYWJsZSBpbnRl cnJ1cHQgKi8KPiArCXZhbCA9IHJlYWRsKHNuZmktPnJlZ3MgKyBORklfSU5UUl9FTik7Cj4gKwl2 YWwgJj0gcnggPyB+SU5UUl9DVVNfUkVBRF9FTiA6IH5JTlRSX0NVU19QUk9HX0VOOwo+ICsJd3Jp dGV3KHZhbCwgc25maS0+cmVncyArIE5GSV9JTlRSX0VOKTsKPiArCj4gKwl3cml0ZXcoMCwgc25m aS0+cmVncyArIE5GSV9DTkZHKTsKPiArCXdyaXRldygwLCBzbmZpLT5yZWdzICsgTkZJX0NPTik7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXRrX3NuZmlfdHJhbnNmZXJfZG1hKHN0cnVjdCBtdGtf c25maSAqc25maSwKPiArCQkJCSBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9vcCAqb3AsIGJvb2wgcngp Cj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gbXRrX3NuZmlfcHJlcGFyZShzbmZpLCBv cCwgcngpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCW10a19zbmZpX3Ry aWdnZXIoc25maSwgb3AsIHJ4KTsKPiArCj4gKwlyZXQgPSBtdGtfc25maV93YWl0X2RvbmUoc25m aSwgb3AsIHJ4KTsKPiArCj4gKwltdGtfc25maV9jb21wbGV0ZShzbmZpLCBvcCwgcngpOwo+ICsK PiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXRrX3NuZmlfdHJhbnNmZXJf bWFjKHN0cnVjdCBtdGtfc25maSAqc25maSwKPiArCQkJCSBjb25zdCB1OCAqdHhidWYsIHU4ICpy eGJ1ZiwKPiArCQkJCSBjb25zdCB1MzIgdHhsZW4sIGNvbnN0IHUzMiByeGxlbikKPiArewo+ICsJ dTMyIGksIGosIHZhbCwgdG1wOwo+ICsJdTggKnBfdG1wID0gKHU4ICopKCZ0bXApOwo+ICsJdTMy IG9mZnNldCA9IDA7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwkvKiBNb3ZlIHR4IGRhdGEgdG8g Z3ByYW0gaW4gc25maSBtYWMgbW9kZSAqLwo+ICsJZm9yIChpID0gMDsgaSA8IHR4bGVuOyApIHsK PiArCQlmb3IgKGogPSAwLCB0bXAgPSAwOyBpIDwgdHhsZW4gJiYgaiA8IDQ7IGkrKywgaisrKQo+ ICsJCQlwX3RtcFtqXSA9IHR4YnVmW2ldOwo+ICsKPiArCQl3cml0ZWwodG1wLCBzbmZpLT5yZWdz ICsgU05GSV9HUFJBTV9EQVRBICsgb2Zmc2V0KTsKPiArCQlvZmZzZXQgKz0gNDsKPiArCX0KPiAr Cj4gKwl3cml0ZWwodHhsZW4sIHNuZmktPnJlZ3MgKyBTTkZJX01BQ19PVVRMKTsKPiArCXdyaXRl bChyeGxlbiwgc25maS0+cmVncyArIFNORklfTUFDX0lOTCk7Cj4gKwo+ICsJcmV0ID0gbXRrX3Nu ZmlfbWFjX29wKHNuZmkpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl93YXJuKHNuZmktPmRldiwg InNuZmkgbWFjIG9wZXJhdGlvbiBmYWlsXG4iKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsK PiArCS8qIEdldCB0eCBkYXRhIGZyb20gZ3ByYW0gaW4gc25maSBtYWMgbW9kZSAqLwo+ICsJaWYg KHJ4bGVuKQo+ICsJCWZvciAoaSA9IDAsIG9mZnNldCA9IHJvdW5kZG93bih0eGxlbiwgNCk7IGkg PCByeGxlbjsgKSB7Cj4gKwkJCXZhbCA9IHJlYWRsKHNuZmktPnJlZ3MgKwo+ICsJCQkJICAgIFNO RklfR1BSQU1fREFUQSArIG9mZnNldCk7Cj4gKwkJCWZvciAoaiA9IDA7IGkgPCByeGxlbiAmJiBq IDwgNDsgaSsrLCBqKyssIHJ4YnVmKyspIHsKPiArCQkJCWlmIChpID09IDApCj4gKwkJCQkJaiA9 IHR4bGVuICUgNDsKPiArCQkJCSpyeGJ1ZiA9ICh2YWwgPj4gKGogKiA4KSkgJiAweGZmOwo+ICsJ CQl9Cj4gKwkJCW9mZnNldCArPSA0Owo+ICsJCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IG10a19zbmZpX2V4ZWNfb3Aoc3RydWN0IHNwaV9tZW0gKm1lbSwKPiAr CQkJICAgIGNvbnN0IHN0cnVjdCBzcGlfbWVtX29wICpvcCkKPiArewo+ICsJc3RydWN0IG10a19z bmZpICpzbmZpID0gc3BpX2NvbnRyb2xsZXJfZ2V0X2RldmRhdGEobWVtLT5zcGktPm1hc3Rlcik7 Cj4gKwl1OCAqYnVmLCAqdHhidWYgPSBzbmZpLT50eF9idWYsICpyeGJ1ZiA9IE5VTEw7Cj4gKwl1 MzIgdHhsZW4gPSAwLCByeGxlbiA9IDA7Cj4gKwlpbnQgaSwgcmV0ID0gMDsKPiArCWJvb2wgcng7 Cj4gKwo+ICsJcnggPSBvcC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX0lOOwo+ICsKPiArCXJl dCA9IG10a19zbmZpX3Jlc2V0KHNuZmkpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl93YXJuKHNu ZmktPmRldiwgInNuZmkgcmVzZXQgZmFpbFxuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiAr Cj4gKwkvKgo+ICsJICogSWYgdHgvcnggZGF0YSBidXN3aWR0aCBpcyBub3QgMC8xLCB1c2Ugc25m aSBETUEgbW9kZS4KPiArCSAqIE90aGVyd2lzZSwgdXNlIHNuZmkgbWFjIG1vZGUuCj4gKwkgKi8K PiArCWlmIChvcC0+ZGF0YS5idXN3aWR0aCAhPSAxICYmIG9wLT5kYXRhLmJ1c3dpZHRoICE9IDAp IHsKPiArCQlyZXQgPSBtdGtfc25maV90cmFuc2Zlcl9kbWEoc25maSwgb3AsIHJ4KTsKPiArCQlp ZiAocmV0KQo+ICsJCQlkZXZfd2FybihzbmZpLT5kZXYsICJzbmZpIGRtYSB0cmFuc2ZlciAlZCBm YWlsICVkXG4iLAo+ICsJCQkJIHJ4LCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ ICsJdHhidWZbdHhsZW4rK10gPSBvcC0+Y21kLm9wY29kZTsKPiArCj4gKwlpZiAob3AtPmFkZHIu bmJ5dGVzKQo+ICsJCWZvciAoaSA9IDA7IGkgPCBvcC0+YWRkci5uYnl0ZXM7IGkrKykKPiArCQkJ dHhidWZbdHhsZW4rK10gPSBvcC0+YWRkci52YWwgPj4KPiArCQkJCQkoOCAqIChvcC0+YWRkci5u Ynl0ZXMgLSBpIC0gMSkpOwo+ICsKPiArCXR4bGVuICs9IG9wLT5kdW1teS5uYnl0ZXM7Cj4gKwo+ ICsJaWYgKG9wLT5kYXRhLmRpciA9PSBTUElfTUVNX0RBVEFfT1VUKSB7Cj4gKwkJYnVmID0gKHU4 ICopb3AtPmRhdGEuYnVmLm91dDsKPiArCQlmb3IgKGkgPSAwOyBpIDwgb3AtPmRhdGEubmJ5dGVz OyBpKyspCj4gKwkJCXR4YnVmW3R4bGVuKytdID0gYnVmW2ldOwo+ICsJfQo+ICsKPiArCWlmIChv cC0+ZGF0YS5kaXIgPT0gU1BJX01FTV9EQVRBX0lOKSB7Cj4gKwkJcnhidWYgPSAodTggKilvcC0+ ZGF0YS5idWYuaW47Cj4gKwkJcnhsZW4gPSBvcC0+ZGF0YS5uYnl0ZXM7Cj4gKwl9Cj4gKwo+ICsJ cmV0ID0gbXRrX3NuZmlfdHJhbnNmZXJfbWFjKHNuZmksIHR4YnVmLCByeGJ1ZiwgdHhsZW4sIHJ4 bGVuKTsKPiArCWlmIChyZXQpCj4gKwkJZGV2X3dhcm4oc25maS0+ZGV2LCAic25maSBtYWMgdHJh bnNmZXIgJWQgZmFpbCAlZFxuIiwKPiArCQkJIG9wLT5kYXRhLmRpciwgcmV0KTsKPiArCj4gKwly ZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19zbmZpX2NoZWNrX2J1c3dpZHRo KHU4IHdpZHRoKQo+ICt7Cj4gKwlzd2l0Y2ggKHdpZHRoKSB7Cj4gKwljYXNlIDE6Cj4gKwljYXNl IDI6Cj4gKwljYXNlIDQ6Cj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJZGVmYXVsdDoKPiArCQlicmVh azsKPiArCX0KPiArCj4gKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gK30KPiArCj4gK3N0YXRpYyBi b29sIG10a19zbmZpX3N1cHBvcnRzX29wKHN0cnVjdCBzcGlfbWVtICptZW0sCj4gKwkJCQkgY29u c3Qgc3RydWN0IHNwaV9tZW1fb3AgKm9wKQo+ICt7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlp ZiAoIXNwaV9tZW1fZGVmYXVsdF9zdXBwb3J0c19vcChtZW0sIG9wKSkKCldpdGggdGhlIGludGVn cmF0aW9uIHByb3Blcmx5IHNldCwgdGhpcyBjYWxsIHdvdWxkIGFsd2F5cyByZXR1cm4gZmFsc2UK d2hlbiBlY2NfZW4gPSB0cnVlLiBZb3Ugc2hvdWxkIHN3aXRjaCB0bwoKCXNwaV9tZW1fZ2VuZXJp Y19zdXBwb3J0c19vcChtZW0sIG9wLCBmYWxzZSwgdHJ1ZSk7Cgo+ICsJCXJldHVybiBmYWxzZTsK PiArCj4gKwlpZiAob3AtPmNtZC5idXN3aWR0aCAhPSAxKQo+ICsJCXJldHVybiBmYWxzZTsKPiAr Cj4gKwkvKgo+ICsJICogRm9yIG9uZSBvcGVyYXRpb24gd2lsbCB1c2Ugc25maSBtYWMgbW9kZSB3 aGVuIGRhdGEKPiArCSAqIGJ1c3dpZHRoIGlzIDAvMS4gSG93ZXZlciwgdGhlIEhXIEVDQyBlbmdp bmUgY2FuIG5vdAo+ICsJICogYmUgdXNlZCBpbiBtYWMgbW9kZS4KPiArCSAqLwo+ICsJaWYgKG9w LT5lY2NfZW4gJiYgb3AtPmRhdGEuYnVzd2lkdGggPT0gMSAmJgo+ICsJICAgIG9wLT5kYXRhLm5i eXRlcyA+PSBTTkZJX0dQUkFNX01BWF9MRU4pCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCXN3 aXRjaCAob3AtPmRhdGEuZGlyKSB7Cj4gKwkvKiBGb3Igc3BpIG1lbSBkYXRhIGluLCBjYW4gc3Vw cG9ydCAxLzIvNCBidXN3aWR0aCAqLwo+ICsJY2FzZSBTUElfTUVNX0RBVEFfSU46Cj4gKwkJaWYg KG9wLT5hZGRyLm5ieXRlcykKPiArCQkJcmV0IHw9IG10a19zbmZpX2NoZWNrX2J1c3dpZHRoKG9w LT5hZGRyLmJ1c3dpZHRoKTsKPiArCj4gKwkJaWYgKG9wLT5kdW1teS5uYnl0ZXMpCj4gKwkJCXJl dCB8PSBtdGtfc25maV9jaGVja19idXN3aWR0aChvcC0+ZHVtbXkuYnVzd2lkdGgpOwo+ICsKPiAr CQlpZiAob3AtPmRhdGEubmJ5dGVzKQo+ICsJCQlyZXQgfD0gbXRrX3NuZmlfY2hlY2tfYnVzd2lk dGgob3AtPmRhdGEuYnVzd2lkdGgpOwo+ICsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1cm4gZmFs c2U7Cj4gKwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBTUElfTUVNX0RBVEFfT1VUOgo+ICsJCS8qCj4g KwkJICogRm9yIHNwaSBtZW0gZGF0YSBvdXQsIGNhbiBzdXBwb3J0IDAvMSBidXN3aWR0aAo+ICsJ CSAqIGZvciBhZGRyL2R1bW15IGFuZCAxLzQgYnVzd2lkdGggZm9yIGRhdGEuCj4gKwkJICovCj4g KwkJaWYgKG9wLT5hZGRyLmJ1c3dpZHRoICE9IDAgJiYgb3AtPmFkZHIuYnVzd2lkdGggIT0gMSkK PiArCQkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCQlpZiAob3AtPmR1bW15LmJ1c3dpZHRoICE9IDAg JiYgb3AtPmR1bW15LmJ1c3dpZHRoICE9IDEpCj4gKwkJCXJldHVybiBmYWxzZTsKPiArCj4gKwkJ aWYgKG9wLT5kYXRhLmJ1c3dpZHRoICE9IDEgJiYgb3AtPmRhdGEuYnVzd2lkdGggIT0gNCkKPiAr CQkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJYnJlYWs7 Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXRrX3Nu ZmlfYWRqdXN0X29wX3NpemUoc3RydWN0IHNwaV9tZW0gKm1lbSwKPiArCQkJCSAgIHN0cnVjdCBz cGlfbWVtX29wICpvcCkKPiArewo+ICsJdTMyIGxlbiwgbWF4X2xlbjsKPiArCj4gKwkvKgo+ICsJ ICogVGhlIG9wIHNpemUgb25seSBzdXBwb3J0IFNORklfR1BSQU1fTUFYX0xFTiB3aGljaCB3aWxs Cj4gKwkgKiB1c2UgdGhlIHNuZmkgbWFjIG1vZGUgd2hlbiBkYXRhIGJ1c3dpZHRoIGlzIDAvMS4K PiArCSAqIE90aGVyd2lzZSwgdGhlIHNuZmkgY2FuIG1heCBzdXBwb3J0IDE2S0IuCj4gKwkgKi8K PiArCWlmIChvcC0+ZGF0YS5idXN3aWR0aCA9PSAxIHx8IG9wLT5kYXRhLmJ1c3dpZHRoID09IDAp Cj4gKwkJbWF4X2xlbiA9IFNORklfR1BSQU1fTUFYX0xFTjsKPiArCWVsc2UKPiArCQltYXhfbGVu ID0gS0IoMTYpOwo+ICsKPiArCWxlbiA9IG9wLT5jbWQubmJ5dGVzICsgb3AtPmFkZHIubmJ5dGVz ICsgb3AtPmR1bW15Lm5ieXRlczsKPiArCWlmIChsZW4gPiBtYXhfbGVuKQo+ICsJCXJldHVybiAt RU9QTk9UU1VQUDsKPiArCj4gKwlpZiAoKGxlbiArIG9wLT5kYXRhLm5ieXRlcykgPiBtYXhfbGVu KQo+ICsJCW9wLT5kYXRhLm5ieXRlcyA9IG1heF9sZW4gLSBsZW47Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRrX3NuZmlfY2FwcyBtdGtfc25maV9j YXBzX210NzYyMiA9IHsKPiArCS5wYWdlZm9ybWF0X3NwYXJlX3NoaWZ0ID0gMTYsCj4gK307Cj4g Kwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9jb250cm9sbGVyX21lbV9vcHMgbXRrX3NuZmlf b3BzID0gewo+ICsJLmFkanVzdF9vcF9zaXplID0gbXRrX3NuZmlfYWRqdXN0X29wX3NpemUsCj4g Kwkuc3VwcG9ydHNfb3AgPSBtdGtfc25maV9zdXBwb3J0c19vcCwKPiArCS5leGVjX29wID0gbXRr X3NuZmlfZXhlY19vcCwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNl X2lkIG10a19zbmZpX2lkX3RhYmxlW10gPSB7Cj4gKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVr LG10NzYyMi1zbmZpIiwKPiArCSAgLmRhdGEgPSAmbXRrX3NuZmlfY2Fwc19tdDc2MjIsCj4gKwl9 LAo+ICsJeyAgLyogc2VudGluZWwgKi8gfQo+ICt9Owo+ICsKPiArLyogRUNDIHdyYXBwZXIgKi8K PiArc3RhdGljIHN0cnVjdCBtdGtfc25maSAqbXRrX25hbmRfdG9fc3BpKHN0cnVjdCBuYW5kX2Rl dmljZSAqbmFuZCkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gbmFuZC0+ZWNjLmVuZ2lu ZS0+ZGV2Owo+ICsJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOwo+ICsJc3RydWN0IG10a19zbmZpICpzbmZpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YSht YXN0ZXIpOwo+ICsKPiArCXJldHVybiBzbmZpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IG10a19z bmZpX2NvbmZpZyhzdHJ1Y3QgbmFuZF9kZXZpY2UgKm5hbmQsCj4gKwkJCSAgIHN0cnVjdCBtdGtf c25maSAqc25maSkKPiArewo+ICsJc3RydWN0IG10a19lY2NfZW5naW5lICplbmcgPSBtdGtfc25m aV90b19lY2NfZW5naW5lKHNuZmkpOwo+ICsJdTMyIHZhbDsKPiArCj4gKwlzd2l0Y2ggKG5hbmRk ZXZfcGFnZV9zaXplKG5hbmQpKSB7Cj4gKwljYXNlIDUxMjoKPiArCQl2YWwgPSBQQUdFRk1UXzUx Ml8ySyB8IFBBR0VGTVRfU0VDX1NFTF81MTI7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEtCKDIpOgo+ ICsJCWlmIChlbmctPnNlY3Rpb25fc2l6ZSA9PSA1MTIpCj4gKwkJCXZhbCA9IFBBR0VGTVRfMktf NEsgfCBQQUdFRk1UX1NFQ19TRUxfNTEyOwo+ICsJCWVsc2UKPiArCQkJdmFsID0gUEFHRUZNVF81 MTJfMks7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIEtCKDQpOgo+ICsJCWlmIChlbmctPnNlY3Rpb25f c2l6ZSA9PSA1MTIpCj4gKwkJCXZhbCA9IFBBR0VGTVRfNEtfOEsgfCBQQUdFRk1UX1NFQ19TRUxf NTEyOwo+ICsJCWVsc2UKPiArCQkJdmFsID0gUEFHRUZNVF8yS180SzsKPiArCQlicmVhazsKPiAr CWNhc2UgS0IoOCk6Cj4gKwkJaWYgKGVuZy0+c2VjdGlvbl9zaXplID09IDUxMikKPiArCQkJdmFs ID0gUEFHRUZNVF84S18xNksgfCBQQUdFRk1UX1NFQ19TRUxfNTEyOwo+ICsJCWVsc2UKPiArCQkJ dmFsID0gUEFHRUZNVF80S184SzsKPiArCQlicmVhazsKPiArCWNhc2UgS0IoMTYpOgo+ICsJCXZh bCA9IFBBR0VGTVRfOEtfMTZLOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlkZXZfZXJy KHNuZmktPmRldiwgImludmFsaWQgcGFnZSBsZW46ICVkXG4iLAo+ICsJCQluYW5kZGV2X3BhZ2Vf c2l6ZShuYW5kKSk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJdmFsIHw9IGVu Zy0+b29iX3Blcl9zZWN0aW9uX2lkeCA8PCBQQUdFRk1UX1NQQVJFX1NISUZUOwo+ICsJdmFsIHw9 IGVuZy0+b29iX2ZyZWUgPDwgUEFHRUZNVF9GRE1fU0hJRlQ7Cj4gKwl2YWwgfD0gZW5nLT5vb2Jf ZnJlZV9wcm90ZWN0ZWQgPDwgUEFHRUZNVF9GRE1fRUNDX1NISUZUOwo+ICsJd3JpdGVsKHZhbCwg c25maS0+cmVncyArIE5GSV9QQUdFRk1UKTsKClNob3VsZG4ndCB0aGlzIGJlIGNhbGN1bGF0ZWQg b25seSBvbmNlPwoKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdGtf c25maV9lY2NfaW5pdF9jdHgoc3RydWN0IG5hbmRfZGV2aWNlICpuYW5kKQo+ICt7Cj4gKwlzdHJ1 Y3QgbmFuZF9lY2NfZW5naW5lX29wcyAqb3BzID0gbXRrX2VjY19nZXRfcGlwZWxpbmVkX29wcygp Owo+ICsKPiArCXJldHVybiBvcHMtPmluaXRfY3R4KG5hbmQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBtdGtfc25maV9lY2NfY2xlYW51cF9jdHgoc3RydWN0IG5hbmRfZGV2aWNlICpuYW5kKQo+ ICt7Cj4gKwlzdHJ1Y3QgbmFuZF9lY2NfZW5naW5lX29wcyAqb3BzID0gbXRrX2VjY19nZXRfcGlw ZWxpbmVkX29wcygpOwo+ICsKPiArCW9wcy0+Y2xlYW51cF9jdHgobmFuZCk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgbXRrX3NuZmlfZWNjX3ByZXBhcmVfaW9fcmVxKHN0cnVjdCBuYW5kX2Rldmlj ZSAqbmFuZCwKPiArCQkJCSAgICAgICBzdHJ1Y3QgbmFuZF9wYWdlX2lvX3JlcSAqcmVxKQo+ICt7 Cj4gKwlzdHJ1Y3QgbmFuZF9lY2NfZW5naW5lX29wcyAqb3BzID0gbXRrX2VjY19nZXRfcGlwZWxp bmVkX29wcygpOwo+ICsJc3RydWN0IG10a19zbmZpICpzbmZpID0gbXRrX25hbmRfdG9fc3BpKG5h bmQpOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBtdGtfc25maV9jb25maWcobmFuZCwgc25m aSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0dXJuIG9wcy0+cHJl cGFyZV9pb19yZXEobmFuZCwgcmVxKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdGtfc25maV9l Y2NfZmluaXNoX2lvX3JlcShzdHJ1Y3QgbmFuZF9kZXZpY2UgKm5hbmQsCj4gKwkJCQkgICAgICBz dHJ1Y3QgbmFuZF9wYWdlX2lvX3JlcSAqcmVxKQo+ICt7Cj4gKwlzdHJ1Y3QgbmFuZF9lY2NfZW5n aW5lX29wcyAqb3BzID0gbXRrX2VjY19nZXRfcGlwZWxpbmVkX29wcygpOwo+ICsJc3RydWN0IG10 a19lY2NfZW5naW5lICplbmcgPSBuYW5kX3RvX2VjY19jdHgobmFuZCk7Cj4gKwlzdHJ1Y3QgbXRr X3NuZmkgKnNuZmkgPSBtdGtfbmFuZF90b19zcGkobmFuZCk7Cj4gKwo+ICsJaWYgKHJlcS0+bW9k ZSAhPSBNVERfT1BTX1JBVykKPiArCQllbmctPnJlYWRfZW1wdHkgPSByZWFkbChzbmZpLT5yZWdz ICsgTkZJX1NUQSkgJiBTVEFfRU1QX1BBR0U7Cj4gKwo+ICsJcmV0dXJuIG9wcy0+ZmluaXNoX2lv X3JlcShuYW5kLCByZXEpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IG5hbmRfZWNjX2VuZ2lu ZV9vcHMgbXRrX3NuZmlfZWNjX2VuZ2luZV9waXBlbGluZWRfb3BzID0gewo+ICsJLmluaXRfY3R4 ID0gbXRrX3NuZmlfZWNjX2luaXRfY3R4LAo+ICsJLmNsZWFudXBfY3R4ID0gbXRrX3NuZmlfZWNj X2NsZWFudXBfY3R4LAo+ICsJLnByZXBhcmVfaW9fcmVxID0gbXRrX3NuZmlfZWNjX3ByZXBhcmVf aW9fcmVxLAo+ICsJLmZpbmlzaF9pb19yZXEgPSBtdGtfc25maV9lY2NfZmluaXNoX2lvX3JlcSwK PiArfTsKPiArCj4gK3N0YXRpYyBpbnQgbXRrX3NuZmlfZWNjX3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYsCj4gKwkJCSAgICAgIHN0cnVjdCBtdGtfc25maSAqc25maSkKPiArewo+ ICsJc3RydWN0IG5hbmRfZWNjX2VuZ2luZSAqZWNjZW5nOwo+ICsKPiArCWlmICghbXRrX2VjY19n ZXRfcGlwZWxpbmVkX29wcygpKQo+ICsJCXJldHVybiAtRU9QTk9UU1VQUDsKPiArCj4gKwllY2Nl bmcgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCplY2NlbmcpLCBHRlBfS0VSTkVM KTsKPiArCWlmICghZWNjZW5nKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWVjY2VuZy0+ ZGV2ID0gJnBkZXYtPmRldjsKPiArCWVjY2VuZy0+b3BzID0gJm10a19zbmZpX2VjY19lbmdpbmVf cGlwZWxpbmVkX29wczsKCllvdSBuZWVkIHRvIHRlbGwgdGhlIGNvcmUgdGhhdCB0aGlzIGlzIGEg cGlwZWxpbmVkIGVuZ2luZSAobG9vayBhdCB0aGUKaW50ZWdyYXRpb24gZW50cnkpLgoKPiArCj4g KwluYW5kX2VjY19yZWdpc3Rlcl9vbl9ob3N0X2h3X2VuZ2luZShlY2NlbmcpOwo+ICsKPiArCXNu ZmktPmVuZ2luZSA9IGVjY2VuZzsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGlj IGludCBtdGtfc25maV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4g KwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7Cj4gKwlzdHJ1Y3Qg c3BpX2NvbnRyb2xsZXIgKmN0bHI7Cj4gKwlzdHJ1Y3QgbXRrX3NuZmkgKnNuZmk7Cj4gKwlzdHJ1 Y3QgcmVzb3VyY2UgKnJlczsKPiArCWludCByZXQsIGlycTsKPiArCXUzMiB2YWwgPSAwOwo+ICsK PiArCWN0bHIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5kZXYsIHNpemVvZigqc25maSkpOwo+ ICsJaWYgKCFjdGxyKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCXNuZmkgPSBzcGlfY29u dHJvbGxlcl9nZXRfZGV2ZGF0YShjdGxyKTsKPiArCXNuZmktPmRldiA9ICZwZGV2LT5kZXY7Cj4g Kwo+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAw KTsKPiArCXNuZmktPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2Uoc25maS0+ZGV2LCByZXMp Owo+ICsJaWYgKElTX0VSUihzbmZpLT5yZWdzKSkgewo+ICsJCXJldCA9IFBUUl9FUlIoc25maS0+ cmVncyk7Cj4gKwkJZ290byBlcnJfcHV0X21hc3RlcjsKPiArCX0KPiArCj4gKwlyZXQgPSBvZl9w cm9wZXJ0eV9yZWFkX3UzMihucCwgInNhbXBsZS1kZWxheSIsICZ2YWwpOwo+ICsJaWYgKCFyZXQp Cj4gKwkJc25maS0+c2FtcGxlX2RlbGF5ID0gdmFsOwo+ICsKPiArCXJldCA9IG9mX3Byb3BlcnR5 X3JlYWRfdTMyKG5wLCAicmVhZC1sYXRlbmN5IiwgJnZhbCk7Cj4gKwlpZiAoIXJldCkKPiArCQlz bmZpLT5yZWFkX2xhdGVuY3kgPSB2YWw7Cj4gKwo+ICsJc25maS0+bmZpX2NsayA9IGRldm1fY2xr X2dldChzbmZpLT5kZXYsICJuZmlfY2xrIik7Cj4gKwlpZiAoSVNfRVJSKHNuZmktPm5maV9jbGsp KSB7Cj4gKwkJZGV2X2VycihzbmZpLT5kZXYsICJub3QgZm91bmQgbmZpIGNsa1xuIik7Cj4gKwkJ cmV0ID0gUFRSX0VSUihzbmZpLT5uZmlfY2xrKTsKPiArCQlnb3RvIGVycl9wdXRfbWFzdGVyOwo+ ICsJfQo+ICsKPiArCXNuZmktPnNuZmlfY2xrID0gZGV2bV9jbGtfZ2V0KHNuZmktPmRldiwgInNu ZmlfY2xrIik7Cj4gKwlpZiAoSVNfRVJSKHNuZmktPnNuZmlfY2xrKSkgewo+ICsJCWRldl9lcnIo c25maS0+ZGV2LCAibm90IGZvdW5kIHNuZmkgY2xrXG4iKTsKPiArCQlyZXQgPSBQVFJfRVJSKHNu ZmktPnNuZmlfY2xrKTsKPiArCQlnb3RvIGVycl9wdXRfbWFzdGVyOwo+ICsJfQo+ICsKPiArCXNu ZmktPmhjbGsgPSBkZXZtX2Nsa19nZXQoc25maS0+ZGV2LCAiaGNsayIpOwo+ICsJaWYgKElTX0VS UihzbmZpLT5oY2xrKSkgewo+ICsJCWRldl9lcnIoc25maS0+ZGV2LCAibm90IGZvdW5kIGhjbGtc biIpOwo+ICsJCXJldCA9IFBUUl9FUlIoc25maS0+aGNsayk7Cj4gKwkJZ290byBlcnJfcHV0X21h c3RlcjsKPiArCX0KPiArCj4gKwlyZXQgPSBtdGtfc25maV9lbmFibGVfY2xrKHNuZmktPmRldiwg c25maSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX3B1dF9tYXN0ZXI7Cj4gKwo+ICsJc25m aS0+Y2FwcyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShzbmZpLT5kZXYpOwo+ICsKPiArCWly cSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Cj4gKwlpZiAoaXJxIDwgMCkgewo+ICsJCWRl dl9lcnIoc25maS0+ZGV2LCAibm90IGZvdW5kIHNuZmkgaXJxIHJlc291cmNlXG4iKTsKPiArCQly ZXQgPSAtRUlOVkFMOwo+ICsJCWdvdG8gY2xrX2Rpc2FibGU7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0g ZGV2bV9yZXF1ZXN0X2lycShzbmZpLT5kZXYsIGlycSwgbXRrX3NuZmlfaXJxLAo+ICsJCQkgICAg ICAgMCwgIm10ay1zbmZpIiwgc25maSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihzbmZp LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBzbmZpIGlycVxuIik7Cj4gKwkJZ290byBjbGtfZGlz YWJsZTsKPiArCX0KPiArCj4gKwlyZXQgPSBkbWFfc2V0X21hc2soc25maS0+ZGV2LCBETUFfQklU X01BU0soMzIpKTsKPiArCWlmIChyZXQpIHsKPiArCQlkZXZfZXJyKHNuZmktPmRldiwgImZhaWxl ZCB0byBzZXQgZG1hIG1hc2tcbiIpOwo+ICsJCWdvdG8gY2xrX2Rpc2FibGU7Cj4gKwl9Cj4gKwo+ ICsJc25maS0+dHhfYnVmID0ga3phbGxvYyhTTkZJX0dQUkFNX01BWF9MRU4sIEdGUF9LRVJORUwp Owo+ICsJaWYgKCFzbmZpLT50eF9idWYpIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8g Y2xrX2Rpc2FibGU7Cj4gKwl9Cj4gKwo+ICsJY3Rsci0+ZGV2Lm9mX25vZGUgPSBucDsKPiArCWN0 bHItPm1lbV9vcHMgPSAmbXRrX3NuZmlfb3BzOwo+ICsJY3Rsci0+bW9kZV9iaXRzID0gU1BJX1JY X0RVQUwgfCBTUElfUlhfUVVBRCB8IFNQSV9UWF9RVUFEOwo+ICsJY3Rsci0+YXV0b19ydW50aW1l X3BtID0gdHJ1ZTsKPiArCj4gKwlkZXZfc2V0X2RydmRhdGEoc25maS0+ZGV2LCBjdGxyKTsKPiAr Cj4gKwlyZXQgPSBtdGtfc25maV9pbml0KHNuZmkpOwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9l cnIoc25maS0+ZGV2LCAiZmFpbGVkIHRvIGluaXQgc25maVxuIik7Cj4gKwkJZ290byBmcmVlX2J1 ZjsKPiArCX0KPiArCj4gKwlyZXQgPSBtdGtfc25maV9lY2NfcHJvYmUocGRldiwgc25maSk7Cj4g KwlpZiAocmV0KSB7Cj4gKwkJZGV2X3dhcm4oc25maS0+ZGV2LCAiRUNDIGVuZ2luZSBub3QgYXZh aWxhYmxlXG4iKTsKPiArCQlnb3RvIGZyZWVfYnVmOwo+ICsJfQo+ICsKPiArCXBtX3J1bnRpbWVf ZW5hYmxlKHNuZmktPmRldik7Cj4gKwo+ICsJcmV0ID0gZGV2bV9zcGlfcmVnaXN0ZXJfbWFzdGVy KHNuZmktPmRldiwgY3Rscik7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZGV2X2VycihzbmZpLT5kZXYs ICJmYWlsZWQgdG8gcmVnaXN0ZXIgc3BpIG1hc3RlclxuIik7Cj4gKwkJZ290byBkaXNhYmxlX3Bt X3J1bnRpbWU7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtkaXNhYmxlX3BtX3J1bnRp bWU6Cj4gKwlwbV9ydW50aW1lX2Rpc2FibGUoc25maS0+ZGV2KTsKPiArCj4gK2ZyZWVfYnVmOgo+ ICsJa2ZyZWUoc25maS0+dHhfYnVmKTsKPiArCj4gK2Nsa19kaXNhYmxlOgo+ICsJbXRrX3NuZmlf ZGlzYWJsZV9jbGsoc25maSk7Cj4gKwo+ICtlcnJfcHV0X21hc3RlcjoKPiArCXNwaV9tYXN0ZXJf cHV0KGN0bHIpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbXRr X3NuZmlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0cnVj dCBzcGlfY29udHJvbGxlciAqY3RsciA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKPiAr CXN0cnVjdCBtdGtfc25maSAqc25maSA9IHNwaV9jb250cm9sbGVyX2dldF9kZXZkYXRhKGN0bHIp Owo+ICsJc3RydWN0IG5hbmRfZWNjX2VuZ2luZSAqZW5nID0gc25maS0+ZW5naW5lOwo+ICsKPiAr CXBtX3J1bnRpbWVfZGlzYWJsZShzbmZpLT5kZXYpOwo+ICsJbmFuZF9lY2NfdW5yZWdpc3Rlcl9v bl9ob3N0X2h3X2VuZ2luZShlbmcpOwo+ICsJa2ZyZWUoc25maS0+dHhfYnVmKTsKPiArCXNwaV9t YXN0ZXJfcHV0KGN0bHIpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsjaWZkZWYgQ09O RklHX1BNCj4gK3N0YXRpYyBpbnQgbXRrX3NuZmlfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZp Y2UgKmRldikKPiArewo+ICsJc3RydWN0IHNwaV9jb250cm9sbGVyICpjdGxyID0gZGV2X2dldF9k cnZkYXRhKGRldik7Cj4gKwlzdHJ1Y3QgbXRrX3NuZmkgKnNuZmkgPSBzcGlfY29udHJvbGxlcl9n ZXRfZGV2ZGF0YShjdGxyKTsKPiArCj4gKwltdGtfc25maV9kaXNhYmxlX2NsayhzbmZpKTsKPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBtdGtfc25maV9ydW50aW1lX3Jl c3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCBzcGlfY29udHJvbGxlciAq Y3RsciA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsJc3RydWN0IG10a19zbmZpICpzbmZpID0g c3BpX2NvbnRyb2xsZXJfZ2V0X2RldmRhdGEoY3Rscik7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJl dCA9IG10a19zbmZpX2VuYWJsZV9jbGsoZGV2LCBzbmZpKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0 dXJuIHJldDsKPiArCj4gKwlyZXQgPSBtdGtfc25maV9pbml0KHNuZmkpOwo+ICsJaWYgKHJldCkK PiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0IHNuZmlcbiIpOwo+ICsKPiArCXJldHVy biByZXQ7Cj4gK30KPiArI2VuZGlmIC8qIENPTkZJR19QTSAqLwo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBkZXZfcG1fb3BzIG10a19zbmZpX3BtX29wcyA9IHsKPiArCVNFVF9SVU5USU1FX1BN X09QUyhtdGtfc25maV9ydW50aW1lX3N1c3BlbmQsCj4gKwkJCSAgIG10a19zbmZpX3J1bnRpbWVf cmVzdW1lLCBOVUxMKQo+ICsJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMocG1fcnVudGltZV9mb3Jj ZV9zdXNwZW5kLAo+ICsJCQkJcG1fcnVudGltZV9mb3JjZV9yZXN1bWUpCj4gK307Cj4gKwo+ICtz dGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdGtfc25maV9kcml2ZXIgPSB7Cj4gKwkuZHJp dmVyID0gewo+ICsJCS5uYW1lCT0gIm10ay1zbmZpIiwKPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBt dGtfc25maV9pZF90YWJsZSwKPiArCQkucG0gPSAmbXRrX3NuZmlfcG1fb3BzLAo+ICsJfSwKPiAr CS5wcm9iZQkJPSBtdGtfc25maV9wcm9iZSwKPiArCS5yZW1vdmUJCT0gbXRrX3NuZmlfcmVtb3Zl LAo+ICt9Owo+ICsKPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihtdGtfc25maV9kcml2ZXIpOwo+ ICsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+ICtNT0RVTEVfQVVUSE9SKCJYaWFuZ3No ZW5nIEhvdSA8eGlhbmdzaGVuZy5ob3VAbWVkaWF0ZWsuY29tPiIpOwo+ICtNT0RVTEVfREVTQ1JJ UFRJT04oIk1lZGlhdGVrIFNQSSBOYW5kIEZsYXNoIGludGVyZmFjZSBkcml2ZXIiKTsKCk90aGVy d2lzZSBsb29rcyBnb29kLCBJIGJlbGlldmUgeW91IGNhbiBkcm9wIHRoZSBSRkMgcHJlZml4IG5v dy4KClRoYW5rcywKTWlxdcOobAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCkxpbnV4IE1URCBkaXNjdXNzaW9uIG1haWxpbmcgbGlzdApodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW10ZC8K