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=-8.5 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED,USER_AGENT_MUTT autolearn=ham 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 70DBDC43381 for ; Wed, 27 Mar 2019 17:38:59 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 1B9A920651 for ; Wed, 27 Mar 2019 17:38:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="ipchX6du" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1B9A920651 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: 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=sZ95LafaQXRfecAZ9l8KUmNV+N9PGBJxgsBfqwMyH/c=; b=ipchX6duZ2kEXr nUcgN3vXH9nFjIj25ASdQLWK8/qlb9Vx3cfdpYeb2TEM+LeeC/BAVmhnHneeDGSXbNW3aYGIg28bX TOZvEEyNb45HquKrLETPJuX6kWBsUamfB25bwsG0kVGKPPP/oGtPw3T3Vr1sptbJXlBcbbGv+GPgs dMVvSk/szi4sIrcDUp/csWuZij4jCOr1UFZM2D5YSDtXuAouLdsa4VoTygg3c2PJxN/lJUpN8y8OL Suri71r/353JbXCorIxsoxWkDfFg0VdFDKGmtpn9K6NKN+IMHuIEV8lmJeBwQHZcrAWKQ8yHYPRFF uDHebnHFtbiZyPc2ir+w==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1h9CVn-000233-ER; Wed, 27 Mar 2019 17:38:51 +0000 Received: from foss.arm.com ([217.140.101.70]) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1h9CVb-00022b-2v for linux-arm-kernel@lists.infradead.org; Wed, 27 Mar 2019 17:38:43 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 996B9A78; Wed, 27 Mar 2019 10:38:35 -0700 (PDT) Received: from red-moon (red-moon.cambridge.arm.com [10.1.197.39]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 5D2833F557; Wed, 27 Mar 2019 10:38:32 -0700 (PDT) Date: Wed, 27 Mar 2019 17:39:05 +0000 From: Lorenzo Pieralisi To: "Z.q. Hou" Subject: Re: [PATCHv4 16/28] PCI: mobiveil: refactor Mobiveil PCIe Host Bridge IP driver Message-ID: <20190327173905.GA19093@red-moon> References: <20190311093130.7209-1-Zhiqiang.Hou@nxp.com> <20190311093130.7209-17-Zhiqiang.Hou@nxp.com> <20190326173421.GB10666@e107981-ln.cambridge.arm.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190327_103839_166200_1C892DA0 X-CRM114-Status: GOOD ( 35.78 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "mark.rutland@arm.com" , "devicetree@vger.kernel.org" , Xiaowei Bao , "linux-pci@vger.kernel.org" , "l.subrahmanya@mobiveil.co.in" , "will.deacon@arm.com" , "linux-kernel@vger.kernel.org" , Leo Li , "M.h. Lian" , "robh+dt@kernel.org" , Mingkai Hu , "catalin.marinas@arm.com" , "bhelgaas@google.com" , "shawnguo@kernel.org" , "linux-arm-kernel@lists.infradead.org" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gV2VkLCBNYXIgMjcsIDIwMTkgYXQgMDI6MDQ6MDBBTSArMDAwMCwgWi5xLiBIb3Ugd3JvdGU6 Cj4gSGkgTG9yZW56bywKPiAKPiBUaGFua3MgZm9yIHlvdXIgY29tbWVudHMhCj4gCj4gPiAtLS0t LU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+ID4gRnJvbTogTG9yZW56byBQaWVyYWxpc2kgPGxvcmVu em8ucGllcmFsaXNpQGFybS5jb20+Cj4gPiBTZW50OiAyMDE55bm0M+aciDI35pelIDE6MzQKPiA+ IFRvOiBaLnEuIEhvdSA8emhpcWlhbmcuaG91QG54cC5jb20+Cj4gPiBDYzogbGludXgtcGNpQHZn ZXIua2VybmVsLm9yZzsgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOwo+ID4g ZGV2aWNldHJlZUB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7 Cj4gPiBiaGVsZ2Fhc0Bnb29nbGUuY29tOyByb2JoK2R0QGtlcm5lbC5vcmc7IG1hcmsucnV0bGFu ZEBhcm0uY29tOwo+ID4gbC5zdWJyYWhtYW55YUBtb2JpdmVpbC5jby5pbjsgc2hhd25ndW9Aa2Vy bmVsLm9yZzsgTGVvIExpCj4gPiA8bGVveWFuZy5saUBueHAuY29tPjsgY2F0YWxpbi5tYXJpbmFz QGFybS5jb207IHdpbGwuZGVhY29uQGFybS5jb207Cj4gPiBNaW5na2FpIEh1IDxtaW5na2FpLmh1 QG54cC5jb20+OyBNLmguIExpYW4gPG1pbmdodWFuLmxpYW5AbnhwLmNvbT47Cj4gPiBYaWFvd2Vp IEJhbyA8eGlhb3dlaS5iYW9AbnhwLmNvbT4KPiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0h2NCAxNi8y OF0gUENJOiBtb2JpdmVpbDogcmVmYWN0b3IgTW9iaXZlaWwgUENJZSBIb3N0Cj4gPiBCcmlkZ2Ug SVAgZHJpdmVyCj4gPiAKPiA+IE9uIE1vbiwgTWFyIDExLCAyMDE5IGF0IDA5OjMyOjA0QU0gKzAw MDAsIFoucS4gSG91IHdyb3RlOgo+ID4gPiBGcm9tOiBIb3UgWmhpcWlhbmcgPFpoaXFpYW5nLkhv dUBueHAuY29tPgo+ID4gPgo+ID4gPiBBcyB0aGUgTW9iaXZlaWwgUENJZSBjb250cm9sbGVyIHN1 cHBvcnQgUkMmRVAgREFVTCBtb2RlLCBhbmQgdG8gbWFrZQo+ID4gPiBwbGF0Zm9ybXMgd2hpY2gg aW50ZWdyYXRlZCB0aGUgTW9iaXZlaWwgUENJZSBJUCBtb3JlIGVhc3kgdG8gYWRkIHRoZWlyCj4g PiA+IGRyaXZlcnMsIHRoaXMgcGF0Y2ggbW92ZWQgdGhlIE1vYml2ZWlsIGRyaXZlciB0byBhIG5l dyBkaXJlY3RvcnkKPiA+ID4gJ2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwnIGFuZCBy ZWZhY3RvcmVkIGl0IGFjY29yZGluZyB0byB0aGUKPiA+ID4gYWJzdHJhY3Rpb24gb2YgUkMmRVAg KEVQIGRyaXZlciB3aWxsIGJlIGFkZGVkIGxhdGVyKS4KPiA+IAo+ID4gSSBkbyBub3Qgd2FudCB0 byBjcmVhdGUgYSBzdWJkaXJlY3RvcnkgZm9yIGV2ZXJ5IGNvbnRyb2xsZXIgdGhhdCBjYW4gd29y ayBpbgo+ID4gUkMmRVAgc28gZHJvcCB0aGlzIHBhdGNoLCBtb3JlIHNvIGdpdmVuIHRoYXQgaXQg d2lsbCBiZSByZXF1aXJlZCAibGF0ZXIiLCB3ZQo+ID4gd2lsbCBjcmVhdGUgYSBkaXJlY3Rvcnkg d2hlbiBhbmQgaWYgd2UgYWN0dWFsbHkgaGF2ZSB0by4KPiAKPiBQbGVhc2UgZG9uJ3QgZHJvcCB0 aGlzIHBhdGNoLCBYaWFvd2VpIEJhbyBoYXMgc2VudCB2MSBvZiB0aGUgRVAgbW9kZQo+IGRyaXZl ciwgd2hpY2ggaXMgZGVwZW5kcyBvbiB0aGlzIHBhdGNoLgoKSSB1bmRlcnN0YW5kIGJ1dCBoZSB3 aWxsIGhhdmUgdG8gcmViYXNlIHRoYXQgY29kZSBhbnl3YXksIEkgZG8Kbm90IHdhbnQgdG8gY3Jl YXRlIGEgZGlyZWN0b3J5IGZvciBtb2JpdmVpbCBiZWZvcmUgSSBzZWUgb3RoZXIKSVBzIGJ1aWx0 IG9uIGl0LCB3ZSBkaWQgbm90IGRvIGl0IGZvciB0aGUgY2FkZW5jZSBhbmQgcm9ja2NoaXAKY29u dHJvbGxlcnMgZWl0aGVyLiBTbyB5b3Ugd2lsbCBoYXZlIHRvIGRyb3AgdGhpcyBwYXRjaCBhbmQK cmV3b3JrIGl0LgoKVGhhbmtzLApMb3JlbnpvCgo+ID4gVGhhbmtzLAo+ID4gTG9yZW56bwo+ID4g Cj4gPiA+IFNpZ25lZC1vZmYtYnk6IEhvdSBaaGlxaWFuZyA8WmhpcWlhbmcuSG91QG54cC5jb20+ Cj4gPiA+IFJldmlld2VkLWJ5OiBNaW5naHVhbiBMaWFuIDxNaW5naHVhbi5MaWFuQG54cC5jb20+ Cj4gPiA+IFJldmlld2VkLWJ5OiBTdWJyYWhtYW55YSBMaW5nYXBwYSA8bC5zdWJyYWhtYW55YUBt b2JpdmVpbC5jby5pbj4KPiA+ID4gLS0tCj4gPiA+IFY0Ogo+ID4gPiAgLSBubyBjaGFuZ2UKPiA+ ID4KPiA+ID4gIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICAgMiArLQo+ID4gPiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnICAgICAgICAgICAg ICAgIHwgIDExICstCj4gPiA+ICBkcml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2VmaWxlICAgICAg ICAgICAgICAgfCAgIDIgKy0KPiA+ID4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwv S2NvbmZpZyAgICAgICB8ICAyNCArCj4gPiA+ICBkcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2 ZWlsL01ha2VmaWxlICAgICAgfCAgIDQgKwo+ID4gPiAgLi4uL3BjaWUtbW9iaXZlaWwtaG9zdC5j fSAgICAgICAgICAgICAgICAgICAgIHwgNTI4ICsrKy0tLS0tLS0tLS0tLS0tLQo+ID4gPiAgLi4u L2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1wbGF0LmMgIHwgIDU0ICsrCj4gPiA+ ICAuLi4vcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC5jICAgfCAyMjggKysr KysrKysKPiA+ID4gIC4uLi9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmgg ICB8IDE4NyArKysrKysrCj4gPiA+ICA5IGZpbGVzIGNoYW5nZWQsIDU4NyBpbnNlcnRpb25zKCsp LCA0NTMgZGVsZXRpb25zKC0pICBjcmVhdGUgbW9kZQo+ID4gPiAxMDA2NDQgZHJpdmVycy9wY2kv Y29udHJvbGxlci9tb2JpdmVpbC9LY29uZmlnCj4gPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9NYWtlZmlsZQo+ID4gPiAgcmVuYW1lIGRyaXZl cnMvcGNpL2NvbnRyb2xsZXIve3BjaWUtbW9iaXZlaWwuYyA9Pgo+ID4gPiBtb2JpdmVpbC9wY2ll LW1vYml2ZWlsLWhvc3QuY30gKDU1JSkgIGNyZWF0ZSBtb2RlIDEwMDY0NAo+ID4gPiBkcml2ZXJz L3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwtcGxhdC5jCj4gPiA+ICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2 ZWlsLmMKPiA+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BjaS9jb250cm9sbGVyL21v Yml2ZWlsL3BjaWUtbW9iaXZlaWwuaAo+ID4gPgo+ID4gPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5F UlMgYi9NQUlOVEFJTkVSUyBpbmRleAo+ID4gPiAxZTY0Mjc5ZjMzOGEuLjEwMTNlNzRiMTRmMiAx MDA2NDQKPiA+ID4gLS0tIGEvTUFJTlRBSU5FUlMKPiA+ID4gKysrIGIvTUFJTlRBSU5FUlMKPiA+ ID4gQEAgLTExODc3LDcgKzExODc3LDcgQEAgTToJU3VicmFobWFueWEgTGluZ2FwcGEKPiA+IDxs LnN1YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmluPgo+ID4gPiAgTDoJbGludXgtcGNpQHZnZXIua2Vy bmVsLm9yZwo+ID4gPiAgUzoJU3VwcG9ydGVkCj4gPiA+ICBGOglEb2N1bWVudGF0aW9uL2Rldmlj ZXRyZWUvYmluZGluZ3MvcGNpL21vYml2ZWlsLXBjaWUudHh0Cj4gPiA+IC1GOglkcml2ZXJzL3Bj aS9jb250cm9sbGVyL3BjaWUtbW9iaXZlaWwuYwo+ID4gPiArRjoJZHJpdmVycy9wY2kvY29udHJv bGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsKgo+ID4gPgo+ID4gPiAgUENJIERSSVZFUiBGT1Ig TVZFQlUgKE1hcnZlbGwgQXJtYWRhIDM3MCBhbmQgQXJtYWRhIFhQIFNPQwo+ID4gc3VwcG9ydCkK PiA+ID4gIE06CVRob21hcyBQZXRhenpvbmkgPHRob21hcy5wZXRhenpvbmlAYm9vdGxpbi5jb20+ Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWcKPiA+ID4g Yi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWcgaW5kZXggNjY3MTk0NmRiZjY2Li4wZTk4 MWVkMDBhNzUKPiA+ID4gMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIv S2NvbmZpZwo+ID4gPiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWcKPiA+ID4g QEAgLTI0MSwxNiArMjQxLDYgQEAgY29uZmlnIFBDSUVfTUVESUFURUsKPiA+ID4gIAkgIFNheSBZ IGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIFBDSWUgY29udHJvbGxlciBzdXBwb3J0IG9uCj4g PiA+ICAJICBNZWRpYVRlayBTb0NzLgo+ID4gPgo+ID4gPiAtY29uZmlnIFBDSUVfTU9CSVZFSUwK PiA+ID4gLQlib29sICJNb2JpdmVpbCBBWEkgUENJZSBjb250cm9sbGVyIgo+ID4gPiAtCWRlcGVu ZHMgb24gQVJDSF9aWU5RTVAgfHwgQ09NUElMRV9URVNUCj4gPiA+IC0JZGVwZW5kcyBvbiBPRgo+ ID4gPiAtCWRlcGVuZHMgb24gUENJX01TSV9JUlFfRE9NQUlOCj4gPiA+IC0JaGVscAo+ID4gPiAt CSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIE1vYml2 ZWlsIEFYSSBQQ0llCj4gPiA+IC0JICBTb2Z0IElQLiBJdCBoYXMgdXAgdG8gOCBvdXRib3VuZCBh bmQgaW5ib3VuZCB3aW5kb3dzCj4gPiA+IC0JICBmb3IgYWRkcmVzcyB0cmFuc2xhdGlvbiBhbmQg aXQgaXMgYSBQQ0llIEdlbjQgSVAuCj4gPiA+IC0KPiA+ID4gIGNvbmZpZyBQQ0lFX1RBTkdPX1NN UDg3NTkKPiA+ID4gIAlib29sICJUYW5nbyBTTVA4NzU5IFBDSWUgY29udHJvbGxlciAoREFOR0VS T1VTKSIKPiA+ID4gIAlkZXBlbmRzIG9uIEFSQ0hfVEFOR08gJiYgUENJX01TSSAmJiBPRiBAQCAt MjgxLDQgKzI3MSw1IEBACj4gPiBjb25maWcKPiA+ID4gVk1ECj4gPiA+ICAJICBtb2R1bGUgd2ls bCBiZSBjYWxsZWQgdm1kLgo+ID4gPgo+ID4gPiAgc291cmNlICJkcml2ZXJzL3BjaS9jb250cm9s bGVyL2R3Yy9LY29uZmlnIgo+ID4gPiArc291cmNlICJkcml2ZXJzL3BjaS9jb250cm9sbGVyL21v Yml2ZWlsL0tjb25maWciCj4gPiA+ICBlbmRtZW51Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3BjaS9jb250cm9sbGVyL01ha2VmaWxlCj4gPiA+IGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9N YWtlZmlsZSBpbmRleCBkNTZhNTA3NDk1YzUuLmI3OWE2MTUwNDFhMAo+ID4gPiAxMDA2NDQKPiA+ ID4gLS0tIGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZQo+ID4gPiArKysgYi9kcml2 ZXJzL3BjaS9jb250cm9sbGVyL01ha2VmaWxlCj4gPiA+IEBAIC0yNiwxMSArMjYsMTEgQEAgb2Jq LSQoQ09ORklHX1BDSUVfUk9DS0NISVApICs9IHBjaWUtcm9ja2NoaXAubwo+ID4gPiAgb2JqLSQo Q09ORklHX1BDSUVfUk9DS0NISVBfRVApICs9IHBjaWUtcm9ja2NoaXAtZXAubwo+ID4gPiAgb2Jq LSQoQ09ORklHX1BDSUVfUk9DS0NISVBfSE9TVCkgKz0gcGNpZS1yb2NrY2hpcC1ob3N0Lm8KPiA+ ID4gIG9iai0kKENPTkZJR19QQ0lFX01FRElBVEVLKSArPSBwY2llLW1lZGlhdGVrLm8KPiA+ID4g LW9iai0kKENPTkZJR19QQ0lFX01PQklWRUlMKSArPSBwY2llLW1vYml2ZWlsLm8KPiA+ID4gIG9i ai0kKENPTkZJR19QQ0lFX1RBTkdPX1NNUDg3NTkpICs9IHBjaWUtdGFuZ28ubwo+ID4gPiAgb2Jq LSQoQ09ORklHX1ZNRCkgKz0gdm1kLm8KPiA+ID4gICMgcGNpZS1oaXNpLm8gcXVpcmtzIGFyZSBu ZWVkZWQgZXZlbiB3aXRob3V0IENPTkZJR19QQ0lFX0RXCj4gPiA+ICBvYmoteQkJCQkrPSBkd2Mv Cj4gPiA+ICtvYmoteQkJCQkrPSBtb2JpdmVpbC8KPiA+ID4KPiA+ID4KPiA+ID4gICMgVGhlIGZv bGxvd2luZyBkcml2ZXJzIGFyZSBmb3IgZGV2aWNlcyB0aGF0IHVzZSB0aGUgZ2VuZXJpYyBBQ1BJ Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL0tjb25m aWcKPiA+ID4gYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL0tjb25maWcKPiA+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi42NDM0M2MwN2Jm ZWQKPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVy L21vYml2ZWlsL0tjb25maWcKPiA+ID4gQEAgLTAsMCArMSwyNCBAQAo+ID4gPiArIyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ID4gPiArCj4gPiA+ICttZW51ICJNb2JpdmVpbCBQ Q0llIENvcmUgU3VwcG9ydCIKPiA+ID4gKwlkZXBlbmRzIG9uIFBDSQo+ID4gPiArCj4gPiA+ICtj b25maWcgUENJRV9NT0JJVkVJTAo+ID4gPiArCWJvb2wKPiA+ID4gKwo+ID4gPiArY29uZmlnIFBD SUVfTU9CSVZFSUxfSE9TVAo+ID4gPiArICAgICAgICBib29sCj4gPiA+ICsJZGVwZW5kcyBvbiBQ Q0lfTVNJX0lSUV9ET01BSU4KPiA+ID4gKyAgICAgICAgc2VsZWN0IFBDSUVfTU9CSVZFSUwKPiA+ ID4gKwo+ID4gPiArY29uZmlnIFBDSUVfTU9CSVZFSUxfUExBVAo+ID4gPiArCWJvb2wgIk1vYml2 ZWlsIEFYSSBQQ0llIGNvbnRyb2xsZXIiCj4gPiA+ICsJZGVwZW5kcyBvbiBBUkNIX1pZTlFNUCB8 fCBDT01QSUxFX1RFU1QKPiA+ID4gKwlkZXBlbmRzIG9uIE9GCj4gPiA+ICsJc2VsZWN0IFBDSUVf TU9CSVZFSUxfSE9TVAo+ID4gPiArCWhlbHAKPiA+ID4gKwkgIFNheSBZIGhlcmUgaWYgeW91IHdh bnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBNb2JpdmVpbCBBWEkgUENJZQo+ID4gPiArCSAg U29mdCBJUC4gSXQgaGFzIHVwIHRvIDggb3V0Ym91bmQgYW5kIGluYm91bmQgd2luZG93cwo+ID4g PiArCSAgZm9yIGFkZHJlc3MgdHJhbnNsYXRpb24gYW5kIGl0IGlzIGEgUENJZSBHZW40IElQLgo+ ID4gPiArCj4gPiA+ICtlbmRtZW51Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250 cm9sbGVyL21vYml2ZWlsL01ha2VmaWxlCj4gPiA+IGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9t b2JpdmVpbC9NYWtlZmlsZQo+ID4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gPiBpbmRleCAw MDAwMDAwMDAwMDAuLjlmYjZkMWM2NTA0ZAo+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ICsrKyBi L2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvTWFrZWZpbGUKPiA+ID4gQEAgLTAsMCAr MSw0IEBACj4gPiA+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gPiA+ICtv YmotJChDT05GSUdfUENJRV9NT0JJVkVJTCkgKz0gcGNpZS1tb2JpdmVpbC5vCj4gPiA+ICtvYmot JChDT05GSUdfUENJRV9NT0JJVkVJTF9IT1NUKSArPSBwY2llLW1vYml2ZWlsLWhvc3Qubwo+ID4g PiArb2JqLSQoQ09ORklHX1BDSUVfTU9CSVZFSUxfUExBVCkgKz0gcGNpZS1tb2JpdmVpbC1wbGF0 Lm8KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tb2JpdmVp bC5jCj4gPiA+IGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWls LWhvc3QuYwo+ID4gPiBzaW1pbGFyaXR5IGluZGV4IDU1JQo+ID4gPiByZW5hbWUgZnJvbSBkcml2 ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbW9iaXZlaWwuYwo+ID4gPiByZW5hbWUgdG8gZHJpdmVy cy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLWhvc3QuYwo+ID4gPiBpbmRl eCA5MjEwMTY1ZmU4YzAuLmRjNTMyNGQ5NDQ2NiAxMDA2NDQKPiA+ID4gLS0tIGEvZHJpdmVycy9w Y2kvY29udHJvbGxlci9wY2llLW1vYml2ZWlsLmMKPiA+ID4gKysrIGIvZHJpdmVycy9wY2kvY29u dHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLWhvc3QuYwo+ID4gPiBAQCAtNCw5ICs0LDkg QEAKPiA+ID4gICAqCj4gPiA+ICAgKiBDb3B5cmlnaHQgKGMpIDIwMTggTW9iaXZlaWwgSW5jLgo+ ID4gPiAgICogQXV0aG9yOiBTdWJyYWhtYW55YSBMaW5nYXBwYSA8bC5zdWJyYWhtYW55YUBtb2Jp dmVpbC5jby5pbj4KPiA+ID4gKyAqIFJlZmFjdG9yOiBaaGlxaWFuZyBIb3UgPFpoaXFpYW5nLkhv dUBueHAuY29tPgo+ID4gPiAgICovCj4gPiA+Cj4gPiA+IC0jaW5jbHVkZSA8bGludXgvZGVsYXku aD4KPiA+ID4gICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cj4gPiA+ICAjaW5jbHVkZSA8bGludXgv aW50ZXJydXB0Lmg+Cj4gPiA+ICAjaW5jbHVkZSA8bGludXgvaXJxLmg+Cj4gPiA+IEBAIC0yMywy NzUgKzIzLDIxIEBACj4gPiA+ICAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4g PiA+ICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ID4gPgo+ID4gPiAtI2luY2x1ZGUgIi4uL3Bj aS5oIgo+ID4gPiAtCj4gPiA+IC0vKiByZWdpc3RlciBvZmZzZXRzIGFuZCBiaXQgcG9zaXRpb25z ICovCj4gPiA+IC0KPiA+ID4gLS8qCj4gPiA+IC0gKiB0cmFuc2xhdGlvbiB0YWJsZXMgYXJlIGdy b3VwZWQgaW50byB3aW5kb3dzLCBlYWNoIHdpbmRvdyByZWdpc3RlcnMKPiA+ID4gYXJlCj4gPiA+ IC0gKiBncm91cGVkIGludG8gYmxvY2tzIG9mIDQgb3IgMTYgcmVnaXN0ZXJzIGVhY2gKPiA+ID4g LSAqLwo+ID4gPiAtI2RlZmluZSBQQUJfUkVHX0JMT0NLX1NJWkUJCTE2Cj4gPiA+IC0jZGVmaW5l IFBBQl9FWFRfUkVHX0JMT0NLX1NJWkUJCTQKPiA+ID4gLQo+ID4gPiAtI2RlZmluZSBQQUJfUkVH X0FERFIob2Zmc2V0LCB3aW4pCVwKPiA+ID4gLQkob2Zmc2V0ICsgKHdpbiAqIFBBQl9SRUdfQkxP Q0tfU0laRSkpCj4gPiA+IC0jZGVmaW5lIFBBQl9FWFRfUkVHX0FERFIob2Zmc2V0LCB3aW4pCVwK PiA+ID4gLQkob2Zmc2V0ICsgKHdpbiAqIFBBQl9FWFRfUkVHX0JMT0NLX1NJWkUpKQo+ID4gPiAt Cj4gPiA+IC0jZGVmaW5lIExUU1NNX1NUQVRVUwkJCTB4MDQwNAo+ID4gPiAtI2RlZmluZSAgTFRT U01fU1RBVFVTX0wwX01BU0sJCTB4M2YKPiA+ID4gLSNkZWZpbmUgIExUU1NNX1NUQVRVU19MMAkJ MHgyZAo+ID4gPiAtCj4gPiA+IC0jZGVmaW5lIFBBQl9DVFJMCQkJMHgwODA4Cj4gPiA+IC0jZGVm aW5lICBBTUJBX1BJT19FTkFCTEVfU0hJRlQJCTAKPiA+ID4gLSNkZWZpbmUgIFBFWF9QSU9fRU5B QkxFX1NISUZUCQkxCj4gPiA+IC0jZGVmaW5lICBQQUdFX1NFTF9TSElGVAkJCTEzCj4gPiA+IC0j ZGVmaW5lICBQQUdFX1NFTF9NQVNLCQkJMHgzZgo+ID4gPiAtI2RlZmluZSAgUEFHRV9MT19NQVNL CQkJMHgzZmYKPiA+ID4gLSNkZWZpbmUgIFBBR0VfU0VMX09GRlNFVF9TSElGVAkJMTAKPiA+ID4g LQo+ID4gPiAtI2RlZmluZSBQQUJfQVhJX1BJT19DVFJMCQkweDA4NDAKPiA+ID4gLSNkZWZpbmUg IEFQSU9fRU5fTUFTSwkJCTB4Zgo+ID4gPiAtCj4gPiA+IC0jZGVmaW5lIFBBQl9QRVhfUElPX0NU UkwJCTB4MDhjMAo+ID4gPiAtI2RlZmluZSAgUElPX0VOQUJMRV9TSElGVAkJMAo+ID4gPiAtCj4g PiA+IC0jZGVmaW5lIFBBQl9JTlRQX0FNQkFfTUlTQ19FTkIJCTB4MGIwYwo+ID4gPiAtI2RlZmlu ZSBQQUJfSU5UUF9BTUJBX01JU0NfU1RBVAkJMHgwYjFjCj4gPiA+IC0jZGVmaW5lICBQQUJfSU5U UF9JTlRYX01BU0sJCTB4MDFlMAo+ID4gPiAtI2RlZmluZSAgUEFCX0lOVFBfTVNJX01BU0sJCTB4 OAo+ID4gPiAtCj4gPiA+IC0jZGVmaW5lIFBBQl9BWElfQU1BUF9DVFJMKHdpbikJCVBBQl9SRUdf QUREUigweDBiYTAsIHdpbikKPiA+ID4gLSNkZWZpbmUgIFdJTl9FTkFCTEVfU0hJRlQJCTAKPiA+ ID4gLSNkZWZpbmUgIFdJTl9UWVBFX1NISUZUCQkJMQo+ID4gPiAtI2RlZmluZSAgV0lOX1RZUEVf TUFTSwkJCTB4Mwo+ID4gPiAtI2RlZmluZSAgV0lOX1NJWkVfU0hJRlQJCQkxMAo+ID4gPiAtI2Rl ZmluZSAgV0lOX1NJWkVfTUFTSwkJCTB4M2ZmZmZmCj4gPiA+IC0KPiA+ID4gLSNkZWZpbmUgUEFC X0VYVF9BWElfQU1BUF9TSVpFKHdpbikJUEFCX0VYVF9SRUdfQUREUigweGJhZjAsCj4gPiB3aW4p Cj4gPiA+IC0KPiA+ID4gLSNkZWZpbmUgUEFCX0VYVF9BWElfQU1BUF9BWElfV0lOKHdpbikKPiA+ IAlQQUJfRVhUX1JFR19BRERSKDB4ODBhMCwgd2luKQo+ID4gPiAtI2RlZmluZSBQQUJfQVhJX0FN QVBfQVhJX1dJTih3aW4pCVBBQl9SRUdfQUREUigweDBiYTQsIHdpbikKPiA+ID4gLSNkZWZpbmUg IEFYSV9XSU5ET1dfQUxJR05fTUFTSwkJMwo+ID4gPiAtCj4gPiA+IC0jZGVmaW5lIFBBQl9BWElf QU1BUF9QRVhfV0lOX0wod2luKQlQQUJfUkVHX0FERFIoMHgwYmE4LAo+ID4gd2luKQo+ID4gPiAt I2RlZmluZSAgUEFCX0JVU19TSElGVAkJCTI0Cj4gPiA+IC0jZGVmaW5lICBQQUJfREVWSUNFX1NI SUZUCQkxOQo+ID4gPiAtI2RlZmluZSAgUEFCX0ZVTkNUSU9OX1NISUZUCQkxNgo+ID4gPiAtCj4g PiA+IC0jZGVmaW5lIFBBQl9BWElfQU1BUF9QRVhfV0lOX0god2luKQlQQUJfUkVHX0FERFIoMHgw YmFjLAo+ID4gd2luKQo+ID4gPiAtI2RlZmluZSBQQUJfSU5UUF9BWElfUElPX0NMQVNTCQkweDQ3 NAo+ID4gPiAtCj4gPiA+IC0jZGVmaW5lIFBBQl9QRVhfQU1BUF9DVFJMKHdpbikJCVBBQl9SRUdf QUREUigweDRiYTAsIHdpbikKPiA+ID4gLSNkZWZpbmUgIEFNQVBfQ1RSTF9FTl9TSElGVAkJMAo+ ID4gPiAtI2RlZmluZSAgQU1BUF9DVFJMX1RZUEVfU0hJRlQJCTEKPiA+ID4gLSNkZWZpbmUgIEFN QVBfQ1RSTF9UWVBFX01BU0sJCTMKPiA+ID4gLQo+ID4gPiAtI2RlZmluZSBQQUJfRVhUX1BFWF9B TUFQX1NJWkVOKHdpbikJUEFCX0VYVF9SRUdfQUREUigweGJlZjAsCj4gPiB3aW4pCj4gPiA+IC0j ZGVmaW5lIFBBQl9FWFRfUEVYX0FNQVBfQVhJX1dJTih3aW4pCj4gPiAJUEFCX0VYVF9SRUdfQURE UigweGI0YTAsIHdpbikKPiA+ID4gLSNkZWZpbmUgUEFCX1BFWF9BTUFQX0FYSV9XSU4od2luKQlQ QUJfUkVHX0FERFIoMHg0YmE0LCB3aW4pCj4gPiA+IC0jZGVmaW5lIFBBQl9QRVhfQU1BUF9QRVhf V0lOX0wod2luKQlQQUJfUkVHX0FERFIoMHg0YmE4LAo+ID4gd2luKQo+ID4gPiAtI2RlZmluZSBQ QUJfUEVYX0FNQVBfUEVYX1dJTl9IKHdpbikJUEFCX1JFR19BRERSKDB4NGJhYywKPiA+IHdpbikK PiA+ID4gLQo+ID4gPiAtLyogc3RhcnRpbmcgb2Zmc2V0IG9mIElOVFggYml0cyBpbiBzdGF0dXMg cmVnaXN0ZXIgKi8KPiA+ID4gLSNkZWZpbmUgUEFCX0lOVFhfU1RBUlQJCQk1Cj4gPiA+IC0KPiA+ ID4gLS8qIHN1cHBvcnRlZCBudW1iZXIgb2YgTVNJIGludGVycnVwdHMgKi8KPiA+ID4gLSNkZWZp bmUgUENJX05VTV9NU0kJCQkxNgo+ID4gPiAtCj4gPiA+IC0vKiBNU0kgcmVnaXN0ZXJzICovCj4g PiA+IC0jZGVmaW5lIE1TSV9CQVNFX0xPX09GRlNFVAkJMHgwNAo+ID4gPiAtI2RlZmluZSBNU0lf QkFTRV9ISV9PRkZTRVQJCTB4MDgKPiA+ID4gLSNkZWZpbmUgTVNJX1NJWkVfT0ZGU0VUCQkJMHgw Ywo+ID4gPiAtI2RlZmluZSBNU0lfRU5BQkxFX09GRlNFVAkJMHgxNAo+ID4gPiAtI2RlZmluZSBN U0lfU1RBVFVTX09GRlNFVAkJMHgxOAo+ID4gPiAtI2RlZmluZSBNU0lfREFUQV9PRkZTRVQJCQkw eDIwCj4gPiA+IC0jZGVmaW5lIE1TSV9BRERSX0xfT0ZGU0VUCQkweDI0Cj4gPiA+IC0jZGVmaW5l IE1TSV9BRERSX0hfT0ZGU0VUCQkweDI4Cj4gPiA+IC0KPiA+ID4gLS8qIG91dGJvdW5kIGFuZCBp bmJvdW5kIHdpbmRvdyBkZWZpbml0aW9ucyAqLwo+ID4gPiAtI2RlZmluZSBXSU5fTlVNXzAJCQkw Cj4gPiA+IC0jZGVmaW5lIFdJTl9OVU1fMQkJCTEKPiA+ID4gLSNkZWZpbmUgQ0ZHX1dJTkRPV19U WVBFCQkJMAo+ID4gPiAtI2RlZmluZSBJT19XSU5ET1dfVFlQRQkJCTEKPiA+ID4gLSNkZWZpbmUg TUVNX1dJTkRPV19UWVBFCQkJMgo+ID4gPiAtI2RlZmluZSBJQl9XSU5fU0laRQkJCSgodTY0KTI1 NiAqIDEwMjQgKiAxMDI0ICogMTAyNCkKPiA+ID4gLSNkZWZpbmUgTUFYX1BJT19XSU5ET1dTCQkJ OAo+ID4gPiAtCj4gPiA+IC0vKiBQYXJhbWV0ZXJzIGZvciB0aGUgd2FpdGluZyBmb3IgbGluayB1 cCByb3V0aW5lICovCj4gPiA+IC0jZGVmaW5lIExJTktfV0FJVF9NQVhfUkVUUklFUwkJMTAKPiA+ ID4gLSNkZWZpbmUgTElOS19XQUlUX01JTgkJCTkwMDAwCj4gPiA+IC0jZGVmaW5lIExJTktfV0FJ VF9NQVgJCQkxMDAwMDAKPiA+ID4gLQo+ID4gPiAtI2RlZmluZSBQQUdFRF9BRERSX0JORFJZCQkw eGMwMAo+ID4gPiAtI2RlZmluZSBPRkZTRVRfVE9fUEFHRV9BRERSKG9mZikJXAo+ID4gPiAtCSgo b2ZmICYgUEFHRV9MT19NQVNLKSB8IFBBR0VEX0FERFJfQk5EUlkpCj4gPiA+IC0jZGVmaW5lIE9G RlNFVF9UT19QQUdFX0lEWChvZmYpCQlcCj4gPiA+IC0JKChvZmYgPj4gUEFHRV9TRUxfT0ZGU0VU X1NISUZUKSAmIFBBR0VfU0VMX01BU0spCj4gPiA+IC0KPiA+ID4gLXN0cnVjdCBtb2JpdmVpbF9t c2kgewkJCS8qIE1TSSBpbmZvcm1hdGlvbiAqLwo+ID4gPiAtCXN0cnVjdCBtdXRleCBsb2NrOwkJ LyogcHJvdGVjdCBiaXRtYXAgdmFyaWFibGUgKi8KPiA+ID4gLQlzdHJ1Y3QgaXJxX2RvbWFpbiAq bXNpX2RvbWFpbjsKPiA+ID4gLQlzdHJ1Y3QgaXJxX2RvbWFpbiAqZGV2X2RvbWFpbjsKPiA+ID4g LQlwaHlzX2FkZHJfdCBtc2lfcGFnZXNfcGh5czsKPiA+ID4gLQlpbnQgbnVtX29mX3ZlY3RvcnM7 Cj4gPiA+IC0JREVDTEFSRV9CSVRNQVAobXNpX2lycV9pbl91c2UsIFBDSV9OVU1fTVNJKTsKPiA+ ID4gLX07Cj4gPiA+IC0KPiA+ID4gLXN0cnVjdCBtb2JpdmVpbF9wY2llIHsKPiA+ID4gLQlzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Owo+ID4gPiAtCXN0cnVjdCBsaXN0X2hlYWQgcmVzb3Vy Y2VzOwo+ID4gPiAtCXZvaWQgX19pb21lbSAqY29uZmlnX2F4aV9zbGF2ZV9iYXNlOwkvKiBlbmRw b2ludCBjb25maWcgYmFzZSAqLwo+ID4gPiAtCXZvaWQgX19pb21lbSAqY3NyX2F4aV9zbGF2ZV9i YXNlOwkvKiByb290IHBvcnQgY29uZmlnIGJhc2UgKi8KPiA+ID4gLQl2b2lkIF9faW9tZW0gKmFw Yl9jc3JfYmFzZTsJLyogTVNJIHJlZ2lzdGVyIGJhc2UgKi8KPiA+ID4gLQlwaHlzX2FkZHJfdCBw Y2llX3JlZ19iYXNlOwkvKiBQaHlzaWNhbCBQQ0llIENvbnRyb2xsZXIgQmFzZSAqLwo+ID4gPiAt CXN0cnVjdCBpcnFfZG9tYWluICppbnR4X2RvbWFpbjsKPiA+ID4gLQlyYXdfc3BpbmxvY2tfdCBp bnR4X21hc2tfbG9jazsKPiA+ID4gLQlpbnQgaXJxOwo+ID4gPiAtCWludCBhcGlvX3dpbnM7Cj4g PiA+IC0JaW50IHBwaW9fd2luczsKPiA+ID4gLQlpbnQgb2Jfd2luc19jb25maWd1cmVkOwkJLyog Y29uZmlndXJlZCBvdXRib3VuZCB3aW5kb3dzICovCj4gPiA+IC0JaW50IGliX3dpbnNfY29uZmln dXJlZDsJCS8qIGNvbmZpZ3VyZWQgaW5ib3VuZCB3aW5kb3dzICovCj4gPiA+IC0Jc3RydWN0IHJl c291cmNlICpvYl9pb19yZXM7Cj4gPiA+IC0JY2hhciByb290X2J1c19ucjsKPiA+ID4gLQlzdHJ1 Y3QgbW9iaXZlaWxfbXNpIG1zaTsKPiA+ID4gLX07Cj4gPiA+IC0KPiA+ID4gLS8qCj4gPiA+IC0g KiBtb2JpdmVpbF9wY2llX3NlbF9wYWdlIC0gcm91dGluZSB0byBhY2Nlc3MgcGFnZWQgcmVnaXN0 ZXIKPiA+ID4gLSAqCj4gPiA+IC0gKiBSZWdpc3RlcnMgd2hvc2UgYWRkcmVzcyBncmVhdGVyIHRo YW4gUEFHRURfQUREUl9CTkRSWSAoMHhjMDApIGFyZQo+ID4gPiBwYWdlZCwKPiA+ID4gLSAqIGZv ciB0aGlzIHNjaGVtZSB0byB3b3JrIGV4dHJhY3RlZCBoaWdoZXIgNiBiaXRzIG9mIHRoZSBvZmZz ZXQgd2lsbAo+ID4gPiBiZQo+ID4gPiAtICogd3JpdHRlbiB0byBwZ19zZWwgZmllbGQgb2YgUEFC X0NUUkwgcmVnaXN0ZXIgYW5kIHJlc3Qgb2YgdGhlIGxvd2VyCj4gPiA+IDEwCj4gPiA+IC0gKiBi aXRzIGVuYWJsZWQgd2l0aCBQQUdFRF9BRERSX0JORFJZIGFyZSB1c2VkIGFzIG9mZnNldCBvZiB0 aGUKPiA+IHJlZ2lzdGVyLgo+ID4gPiAtICovCj4gPiA+IC1zdGF0aWMgdm9pZCBtb2JpdmVpbF9w Y2llX3NlbF9wYWdlKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1OAo+ID4gPiBwZ19pZHgp IC17Cj4gPiA+IC0JdTMyIHZhbDsKPiA+ID4gLQo+ID4gPiAtCXZhbCA9IHJlYWRsKHBjaWUtPmNz cl9heGlfc2xhdmVfYmFzZSArIFBBQl9DVFJMKTsKPiA+ID4gLQl2YWwgJj0gfihQQUdFX1NFTF9N QVNLIDw8IFBBR0VfU0VMX1NISUZUKTsKPiA+ID4gLQl2YWwgfD0gKHBnX2lkeCAmIFBBR0VfU0VM X01BU0spIDw8IFBBR0VfU0VMX1NISUZUOwo+ID4gPiAtCj4gPiA+IC0Jd3JpdGVsKHZhbCwgcGNp ZS0+Y3NyX2F4aV9zbGF2ZV9iYXNlICsgUEFCX0NUUkwpOwo+ID4gPiAtfQo+ID4gPiAtCj4gPiA+ IC1zdGF0aWMgdm9pZCAqbW9iaXZlaWxfcGNpZV9jb21wX2FkZHIoc3RydWN0IG1vYml2ZWlsX3Bj aWUgKnBjaWUsIHUzMgo+ID4gPiBvZmYpIC17Cj4gPiA+IC0JaWYgKG9mZiA8IFBBR0VEX0FERFJf Qk5EUlkpIHsKPiA+ID4gLQkJLyogRm9yIGRpcmVjdGx5IGFjY2Vzc2VkIHJlZ2lzdGVycywgY2xl YXIgdGhlIHBnX3NlbCBmaWVsZCAqLwo+ID4gPiAtCQltb2JpdmVpbF9wY2llX3NlbF9wYWdlKHBj aWUsIDApOwo+ID4gPiAtCQlyZXR1cm4gcGNpZS0+Y3NyX2F4aV9zbGF2ZV9iYXNlICsgb2ZmOwo+ ID4gPiAtCX0KPiA+ID4gLQo+ID4gPiAtCW1vYml2ZWlsX3BjaWVfc2VsX3BhZ2UocGNpZSwgT0ZG U0VUX1RPX1BBR0VfSURYKG9mZikpOwo+ID4gPiAtCXJldHVybiBwY2llLT5jc3JfYXhpX3NsYXZl X2Jhc2UgKyBPRkZTRVRfVE9fUEFHRV9BRERSKG9mZik7Cj4gPiA+IC19Cj4gPiA+IC0KPiA+ID4g LXN0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV9yZWFkKHZvaWQgX19pb21lbSAqYWRkciwgaW50IHNp emUsIHUzMiAqdmFsKQo+ID4gPiAtewo+ID4gPiAtCWlmICgodWludHB0cl90KWFkZHIgJiAoc2l6 ZSAtIDEpKSB7Cj4gPiA+IC0JCSp2YWwgPSAwOwo+ID4gPiAtCQlyZXR1cm4gUENJQklPU19CQURf UkVHSVNURVJfTlVNQkVSOwo+ID4gPiAtCX0KPiA+ID4gLQo+ID4gPiAtCXN3aXRjaCAoc2l6ZSkg ewo+ID4gPiAtCWNhc2UgNDoKPiA+ID4gLQkJKnZhbCA9IHJlYWRsKGFkZHIpOwo+ID4gPiAtCQli cmVhazsKPiA+ID4gLQljYXNlIDI6Cj4gPiA+IC0JCSp2YWwgPSByZWFkdyhhZGRyKTsKPiA+ID4g LQkJYnJlYWs7Cj4gPiA+IC0JY2FzZSAxOgo+ID4gPiAtCQkqdmFsID0gcmVhZGIoYWRkcik7Cj4g PiA+IC0JCWJyZWFrOwo+ID4gPiAtCWRlZmF1bHQ6Cj4gPiA+IC0JCSp2YWwgPSAwOwo+ID4gPiAt CQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOwo+ID4gPiAtCX0KPiA+ID4gLQo+ ID4gPiAtCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cj4gPiA+IC19Cj4gPiA+IC0KPiA+ID4g LXN0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV93cml0ZSh2b2lkIF9faW9tZW0gKmFkZHIsIGludCBz aXplLCB1MzIgdmFsKQo+ID4gPiAtewo+ID4gPiAtCWlmICgodWludHB0cl90KWFkZHIgJiAoc2l6 ZSAtIDEpKQo+ID4gPiAtCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOwo+ID4g PiAtCj4gPiA+IC0Jc3dpdGNoIChzaXplKSB7Cj4gPiA+IC0JY2FzZSA0Ogo+ID4gPiAtCQl3cml0 ZWwodmFsLCBhZGRyKTsKPiA+ID4gLQkJYnJlYWs7Cj4gPiA+IC0JY2FzZSAyOgo+ID4gPiAtCQl3 cml0ZXcodmFsLCBhZGRyKTsKPiA+ID4gLQkJYnJlYWs7Cj4gPiA+IC0JY2FzZSAxOgo+ID4gPiAt CQl3cml0ZWIodmFsLCBhZGRyKTsKPiA+ID4gLQkJYnJlYWs7Cj4gPiA+IC0JZGVmYXVsdDoKPiA+ ID4gLQkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKPiA+ID4gLQl9Cj4gPiA+ IC0KPiA+ID4gLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwo+ID4gPiAtfQo+ID4gPiAtCj4g PiA+IC1zdGF0aWMgdTMyIGNzcl9yZWFkKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIg b2ZmLCBzaXplX3Qgc2l6ZSkKPiA+ID4gLXsKPiA+ID4gLQl2b2lkICphZGRyOwo+ID4gPiAtCXUz MiB2YWw7Cj4gPiA+IC0JaW50IHJldDsKPiA+ID4gLQo+ID4gPiAtCWFkZHIgPSBtb2JpdmVpbF9w Y2llX2NvbXBfYWRkcihwY2llLCBvZmYpOwo+ID4gPiAtCj4gPiA+IC0JcmV0ID0gbW9iaXZlaWxf cGNpZV9yZWFkKGFkZHIsIHNpemUsICZ2YWwpOwo+ID4gPiAtCWlmIChyZXQpCj4gPiA+IC0JCWRl dl9lcnIoJnBjaWUtPnBkZXYtPmRldiwgInJlYWQgQ1NSIGFkZHJlc3MgZmFpbGVkXG4iKTsKPiA+ ID4gLQo+ID4gPiAtCXJldHVybiB2YWw7Cj4gPiA+IC19Cj4gPiA+IC0KPiA+ID4gLXN0YXRpYyB2 b2lkIGNzcl93cml0ZShzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIHZhbCwgdTMyIG9m ZiwKPiA+ID4gc2l6ZV90IHNpemUpIC17Cj4gPiA+IC0Jdm9pZCAqYWRkcjsKPiA+ID4gLQlpbnQg cmV0Owo+ID4gPiAtCj4gPiA+IC0JYWRkciA9IG1vYml2ZWlsX3BjaWVfY29tcF9hZGRyKHBjaWUs IG9mZik7Cj4gPiA+IC0KPiA+ID4gLQlyZXQgPSBtb2JpdmVpbF9wY2llX3dyaXRlKGFkZHIsIHNp emUsIHZhbCk7Cj4gPiA+IC0JaWYgKHJldCkKPiA+ID4gLQkJZGV2X2VycigmcGNpZS0+cGRldi0+ ZGV2LCAid3JpdGUgQ1NSIGFkZHJlc3MgZmFpbGVkXG4iKTsKPiA+ID4gLX0KPiA+ID4gLQo+ID4g PiAtc3RhdGljIHUzMiBjc3JfcmVhZGwoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiBv ZmYpIC17Cj4gPiA+IC0JcmV0dXJuIGNzcl9yZWFkKHBjaWUsIG9mZiwgMHg0KTsKPiA+ID4gLX0K PiA+ID4gLQo+ID4gPiAtc3RhdGljIHZvaWQgY3NyX3dyaXRlbChzdHJ1Y3QgbW9iaXZlaWxfcGNp ZSAqcGNpZSwgdTMyIHZhbCwgdTMyIG9mZikKPiA+ID4gLXsKPiA+ID4gLQljc3Jfd3JpdGUocGNp ZSwgdmFsLCBvZmYsIDB4NCk7Cj4gPiA+IC19Cj4gPiA+IC0KPiA+ID4gLXN0YXRpYyBib29sIG1v Yml2ZWlsX3BjaWVfbGlua191cChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkgLXsKPiA+ID4g LQlyZXR1cm4gKGNzcl9yZWFkbChwY2llLCBMVFNTTV9TVEFUVVMpICYKPiA+ID4gLQkJTFRTU01f U1RBVFVTX0wwX01BU0spID09IExUU1NNX1NUQVRVU19MMDsKPiA+ID4gLX0KPiA+ID4gKyNpbmNs dWRlICJwY2llLW1vYml2ZWlsLmgiCj4gPiA+Cj4gPiA+ICBzdGF0aWMgYm9vbCBtb2JpdmVpbF9w Y2llX3ZhbGlkX2RldmljZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZAo+ID4gPiBpbnQg ZGV2Zm4pICB7Cj4gPiA+ICAJc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUgPSBidXMtPnN5c2Rh dGE7Cj4gPiA+Cj4gPiA+ICAJLyogT25seSBvbmUgZGV2aWNlIGRvd24gb24gZWFjaCByb290IHBv cnQgKi8KPiA+ID4gLQlpZiAoKGJ1cy0+bnVtYmVyID09IHBjaWUtPnJvb3RfYnVzX25yKSAmJiAo ZGV2Zm4gPiAwKSkKPiA+ID4gKwlpZiAoKGJ1cy0+bnVtYmVyID09IHBjaWUtPnJwLnJvb3RfYnVz X25yKSAmJiAoZGV2Zm4gPiAwKSkKPiA+ID4gIAkJcmV0dXJuIGZhbHNlOwo+ID4gPgo+ID4gPiAg CS8qCj4gPiA+ICAJICogRG8gbm90IHJlYWQgbW9yZSB0aGFuIG9uZSBkZXZpY2Ugb24gdGhlIGJ1 cyBkaXJlY3RseQo+ID4gPiAgCSAqIGF0dGFjaGVkIHRvIFJDCj4gPiA+ICAJICovCj4gPiA+IC0J aWYgKChidXMtPnByaW1hcnkgPT0gcGNpZS0+cm9vdF9idXNfbnIpICYmIChkZXZmbiA+IDApKQo+ ID4gPiArCWlmICgoYnVzLT5wcmltYXJ5ID09IHBjaWUtPnJwLnJvb3RfYnVzX25yKSAmJiAoZGV2 Zm4gPiAwKSkKPiA+ID4gIAkJcmV0dXJuIGZhbHNlOwo+ID4gPgo+ID4gPiAgCXJldHVybiB0cnVl Owo+ID4gPiBAQCAtMzExLDcgKzU3LDcgQEAgc3RhdGljIHZvaWQgX19pb21lbSAqbW9iaXZlaWxf cGNpZV9tYXBfYnVzKHN0cnVjdAo+ID4gcGNpX2J1cyAqYnVzLAo+ID4gPiAgCQlyZXR1cm4gTlVM TDsKPiA+ID4KPiA+ID4gIAkvKiBSQyBjb25maWcgYWNjZXNzICovCj4gPiA+IC0JaWYgKGJ1cy0+ bnVtYmVyID09IHBjaWUtPnJvb3RfYnVzX25yKQo+ID4gPiArCWlmIChidXMtPm51bWJlciA9PSBw Y2llLT5ycC5yb290X2J1c19ucikKPiA+ID4gIAkJcmV0dXJuIHBjaWUtPmNzcl9heGlfc2xhdmVf YmFzZSArIHdoZXJlOwo+ID4gPgo+ID4gPiAgCS8qCj4gPiA+IEBAIC0zMjYsNyArNzIsNyBAQCBz dGF0aWMgdm9pZCBfX2lvbWVtICptb2JpdmVpbF9wY2llX21hcF9idXMoc3RydWN0Cj4gPiA+IHBj aV9idXMgKmJ1cywKPiA+ID4KPiA+ID4gIAljc3Jfd3JpdGVsKHBjaWUsIHZhbHVlLCBQQUJfQVhJ X0FNQVBfUEVYX1dJTl9MKFdJTl9OVU1fMCkpOwo+ID4gPgo+ID4gPiAtCXJldHVybiBwY2llLT5j b25maWdfYXhpX3NsYXZlX2Jhc2UgKyB3aGVyZTsKPiA+ID4gKwlyZXR1cm4gcGNpZS0+cnAuY29u ZmlnX2F4aV9zbGF2ZV9iYXNlICsgd2hlcmU7Cj4gPiA+ICB9Cj4gPiA+Cj4gPiA+ICBzdGF0aWMg c3RydWN0IHBjaV9vcHMgbW9iaXZlaWxfcGNpZV9vcHMgPSB7IEBAIC0zNDAsNyArODYsNyBAQCBz dGF0aWMKPiA+ID4gdm9pZCBtb2JpdmVpbF9wY2llX2lzcihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2Mp Cj4gPiA+ICAJc3RydWN0IGlycV9jaGlwICpjaGlwID0gaXJxX2Rlc2NfZ2V0X2NoaXAoZGVzYyk7 Cj4gPiA+ICAJc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUgPSBpcnFfZGVzY19nZXRfaGFuZGxl cl9kYXRhKGRlc2MpOwo+ID4gPiAgCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwY2llLT5wZGV2LT5k ZXY7Cj4gPiA+IC0Jc3RydWN0IG1vYml2ZWlsX21zaSAqbXNpID0gJnBjaWUtPm1zaTsKPiA+ID4g KwlzdHJ1Y3QgbW9iaXZlaWxfbXNpICptc2kgPSAmcGNpZS0+cnAubXNpOwo+ID4gPiAgCXUzMiBt c2lfZGF0YSwgbXNpX2FkZHJfbG8sIG1zaV9hZGRyX2hpOwo+ID4gPiAgCXUzMiBpbnRyX3N0YXR1 cywgbXNpX3N0YXR1czsKPiA+ID4gIAl1bnNpZ25lZCBsb25nIHNoaWZ0ZWRfc3RhdHVzOwo+ID4g PiBAQCAtMzY1LDcgKzExMSw3IEBAIHN0YXRpYyB2b2lkIG1vYml2ZWlsX3BjaWVfaXNyKHN0cnVj dCBpcnFfZGVzYyAqZGVzYykKPiA+ID4gIAkJc2hpZnRlZF9zdGF0dXMgPj49IFBBQl9JTlRYX1NU QVJUOwo+ID4gPiAgCQlkbyB7Cj4gPiA+ICAJCQlmb3JfZWFjaF9zZXRfYml0KGJpdCwgJnNoaWZ0 ZWRfc3RhdHVzLCBQQ0lfTlVNX0lOVFgpIHsKPiA+ID4gLQkJCQl2aXJxID0gaXJxX2ZpbmRfbWFw cGluZyhwY2llLT5pbnR4X2RvbWFpbiwKPiA+ID4gKwkJCQl2aXJxID0gaXJxX2ZpbmRfbWFwcGlu ZyhwY2llLT5ycC5pbnR4X2RvbWFpbiwKPiA+ID4gIAkJCQkJCQliaXQgKyAxKTsKPiA+ID4gIAkJ CQlpZiAodmlycSkKPiA+ID4gIAkJCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOwo+ID4gPiBA QCAtNDI4LDEwICsxNzQsMTAgQEAgc3RhdGljIGludCBtb2JpdmVpbF9wY2llX3BhcnNlX2R0KHN0 cnVjdAo+ID4gbW9iaXZlaWxfcGNpZSAqcGNpZSkKPiA+ID4gIAkvKiBtYXAgY29uZmlnIHJlc291 cmNlICovCj4gPiA+ICAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJ T1JFU09VUkNFX01FTSwKPiA+ID4gIAkJCQkJICAgImNvbmZpZ19heGlfc2xhdmUiKTsKPiA+ID4g LQlwY2llLT5jb25maWdfYXhpX3NsYXZlX2Jhc2UgPSBkZXZtX3BjaV9yZW1hcF9jZmdfcmVzb3Vy Y2UoZGV2LCByZXMpOwo+ID4gPiAtCWlmIChJU19FUlIocGNpZS0+Y29uZmlnX2F4aV9zbGF2ZV9i YXNlKSkKPiA+ID4gLQkJcmV0dXJuIFBUUl9FUlIocGNpZS0+Y29uZmlnX2F4aV9zbGF2ZV9iYXNl KTsKPiA+ID4gLQlwY2llLT5vYl9pb19yZXMgPSByZXM7Cj4gPiA+ICsJcGNpZS0+cnAuY29uZmln X2F4aV9zbGF2ZV9iYXNlID0gZGV2bV9wY2lfcmVtYXBfY2ZnX3Jlc291cmNlKGRldiwKPiA+IHJl cyk7Cj4gPiA+ICsJaWYgKElTX0VSUihwY2llLT5ycC5jb25maWdfYXhpX3NsYXZlX2Jhc2UpKQo+ ID4gPiArCQlyZXR1cm4gUFRSX0VSUihwY2llLT5ycC5jb25maWdfYXhpX3NsYXZlX2Jhc2UpOwo+ ID4gPiArCXBjaWUtPnJwLm9iX2lvX3JlcyA9IHJlczsKPiA+ID4KPiA+ID4gIAkvKiBtYXAgY3Ny IHJlc291cmNlICovCj4gPiA+ICAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShw ZGV2LCBJT1JFU09VUkNFX01FTSwgQEAKPiA+IC00NDEsMTIKPiA+ID4gKzE4Nyw2IEBAIHN0YXRp YyBpbnQgbW9iaXZlaWxfcGNpZV9wYXJzZV9kdChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkK PiA+ID4gIAkJcmV0dXJuIFBUUl9FUlIocGNpZS0+Y3NyX2F4aV9zbGF2ZV9iYXNlKTsKPiA+ID4g IAlwY2llLT5wY2llX3JlZ19iYXNlID0gcmVzLT5zdGFydDsKPiA+ID4KPiA+ID4gLQkvKiBtYXAg TVNJIGNvbmZpZyByZXNvdXJjZSAqLwo+ID4gPiAtCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJj ZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sCj4gPiAiYXBiX2NzciIpOwo+ID4gPiAtCXBj aWUtPmFwYl9jc3JfYmFzZSA9IGRldm1fcGNpX3JlbWFwX2NmZ19yZXNvdXJjZShkZXYsIHJlcyk7 Cj4gPiA+IC0JaWYgKElTX0VSUihwY2llLT5hcGJfY3NyX2Jhc2UpKQo+ID4gPiAtCQlyZXR1cm4g UFRSX0VSUihwY2llLT5hcGJfY3NyX2Jhc2UpOwo+ID4gPiAtCj4gPiA+ICAJLyogcmVhZCB0aGUg bnVtYmVyIG9mIHdpbmRvd3MgcmVxdWVzdGVkICovCj4gPiA+ICAJaWYgKG9mX3Byb3BlcnR5X3Jl YWRfdTMyKG5vZGUsICJhcGlvLXdpbnMiLCAmcGNpZS0+YXBpb193aW5zKSkKPiA+ID4gIAkJcGNp ZS0+YXBpb193aW5zID0gTUFYX1BJT19XSU5ET1dTOwo+ID4gPiBAQCAtNDU0LDExOSArMTk0LDE1 IEBAIHN0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV9wYXJzZV9kdChzdHJ1Y3QKPiA+IG1vYml2ZWls X3BjaWUgKnBjaWUpCj4gPiA+ICAJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJwcGlv LXdpbnMiLCAmcGNpZS0+cHBpb193aW5zKSkKPiA+ID4gIAkJcGNpZS0+cHBpb193aW5zID0gTUFY X1BJT19XSU5ET1dTOwo+ID4gPgo+ID4gPiAtCXBjaWUtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEo cGRldiwgMCk7Cj4gPiA+IC0JaWYgKHBjaWUtPmlycSA8PSAwKSB7Cj4gPiA+IC0JCWRldl9lcnIo ZGV2LCAiZmFpbGVkIHRvIG1hcCBJUlE6ICVkXG4iLCBwY2llLT5pcnEpOwo+ID4gPiAtCQlyZXR1 cm4gLUVOT0RFVjsKPiA+ID4gLQl9Cj4gPiA+IC0KPiA+ID4gIAlyZXR1cm4gMDsKPiA+ID4gIH0K PiA+ID4KPiA+ID4gLXN0YXRpYyB2b2lkIHByb2dyYW1faWJfd2luZG93cyhzdHJ1Y3QgbW9iaXZl aWxfcGNpZSAqcGNpZSwgaW50IHdpbl9udW0sCj4gPiA+IC0JCQkgICAgICAgdTY0IGNwdV9hZGRy LCB1NjQgcGNpX2FkZHIsIHUzMiB0eXBlLCB1NjQgc2l6ZSkKPiA+ID4gLXsKPiA+ID4gLQl1MzIg dmFsdWU7Cj4gPiA+IC0JdTY0IHNpemU2NCA9IH4oc2l6ZSAtIDEpOwo+ID4gPiAtCj4gPiA+IC0J aWYgKHdpbl9udW0gPj0gcGNpZS0+cHBpb193aW5zKSB7Cj4gPiA+IC0JCWRldl9lcnIoJnBjaWUt PnBkZXYtPmRldiwKPiA+ID4gLQkJCSJFUlJPUjogbWF4IGluYm91bmQgd2luZG93cyByZWFjaGVk ICFcbiIpOwo+ID4gPiAtCQlyZXR1cm47Cj4gPiA+IC0JfQo+ID4gPiAtCj4gPiA+IC0JdmFsdWUg PSBjc3JfcmVhZGwocGNpZSwgUEFCX1BFWF9BTUFQX0NUUkwod2luX251bSkpOwo+ID4gPiAtCXZh bHVlICY9IH4oQU1BUF9DVFJMX1RZUEVfTUFTSyA8PCBBTUFQX0NUUkxfVFlQRV9TSElGVCB8Cj4g PiA+IC0JCSBXSU5fU0laRV9NQVNLIDw8IFdJTl9TSVpFX1NISUZUKTsKPiA+ID4gLQl2YWx1ZSB8 PSAodHlwZSA8PCBBTUFQX0NUUkxfVFlQRV9TSElGVCkgfCAoMSA8PAo+ID4gQU1BUF9DVFJMX0VO X1NISUZUKSB8Cj4gPiA+IC0JCSAobG93ZXJfMzJfYml0cyhzaXplNjQpICYgV0lOX1NJWkVfTUFT SyA8PCBXSU5fU0laRV9TSElGVCk7Cj4gPiA+IC0JY3NyX3dyaXRlbChwY2llLCB2YWx1ZSwgUEFC X1BFWF9BTUFQX0NUUkwod2luX251bSkpOwo+ID4gPiAtCj4gPiA+IC0JY3NyX3dyaXRlbChwY2ll LCB1cHBlcl8zMl9iaXRzKHNpemU2NCksCj4gPiA+IC0JCSAgIFBBQl9FWFRfUEVYX0FNQVBfU0la RU4od2luX251bSkpOwo+ID4gPiAtCj4gPiA+IC0JY3NyX3dyaXRlbChwY2llLCBsb3dlcl8zMl9i aXRzKGNwdV9hZGRyKSwKPiA+ID4gLQkJICAgUEFCX1BFWF9BTUFQX0FYSV9XSU4od2luX251bSkp Owo+ID4gPiAtCWNzcl93cml0ZWwocGNpZSwgdXBwZXJfMzJfYml0cyhjcHVfYWRkciksCj4gPiA+ IC0JCSAgIFBBQl9FWFRfUEVYX0FNQVBfQVhJX1dJTih3aW5fbnVtKSk7Cj4gPiA+IC0KPiA+ID4g LQljc3Jfd3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMocGNpX2FkZHIpLAo+ID4gPiAtCQkgICBQ QUJfUEVYX0FNQVBfUEVYX1dJTl9MKHdpbl9udW0pKTsKPiA+ID4gLQljc3Jfd3JpdGVsKHBjaWUs IHVwcGVyXzMyX2JpdHMocGNpX2FkZHIpLAo+ID4gPiAtCQkgICBQQUJfUEVYX0FNQVBfUEVYX1dJ Tl9IKHdpbl9udW0pKTsKPiA+ID4gLQo+ID4gPiAtCXBjaWUtPmliX3dpbnNfY29uZmlndXJlZCsr Owo+ID4gPiAtfQo+ID4gPiAtCj4gPiA+IC0vKgo+ID4gPiAtICogcm91dGluZSB0byBwcm9ncmFt IHRoZSBvdXRib3VuZCB3aW5kb3dzCj4gPiA+IC0gKi8KPiA+ID4gLXN0YXRpYyB2b2lkIHByb2dy YW1fb2Jfd2luZG93cyhzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50IHdpbl9udW0sCj4g PiA+IC0JCQkgICAgICAgdTY0IGNwdV9hZGRyLCB1NjQgcGNpX2FkZHIsIHUzMiB0eXBlLCB1NjQg c2l6ZSkKPiA+ID4gLXsKPiA+ID4gLQo+ID4gPiAtCXUzMiB2YWx1ZTsKPiA+ID4gLQl1NjQgc2l6 ZTY0ID0gfihzaXplIC0gMSk7Cj4gPiA+IC0KPiA+ID4gLQlpZiAod2luX251bSA+PSBwY2llLT5h cGlvX3dpbnMpIHsKPiA+ID4gLQkJZGV2X2VycigmcGNpZS0+cGRldi0+ZGV2LAo+ID4gPiAtCQkJ IkVSUk9SOiBtYXggb3V0Ym91bmQgd2luZG93cyByZWFjaGVkICFcbiIpOwo+ID4gPiAtCQlyZXR1 cm47Cj4gPiA+IC0JfQo+ID4gPiAtCj4gPiA+IC0JLyoKPiA+ID4gLQkgKiBwcm9ncmFtIEVuYWJs ZSBCaXQgdG8gMSwgVHlwZSBCaXQgdG8gKDAwKSBiYXNlIDIsIEFYSSBXaW5kb3cgU2l6ZSBCaXQK PiA+ID4gLQkgKiB0byA0IEtCIGluIFBBQl9BWElfQU1BUF9DVFJMIHJlZ2lzdGVyCj4gPiA+IC0J ICovCj4gPiA+IC0JdmFsdWUgPSBjc3JfcmVhZGwocGNpZSwgUEFCX0FYSV9BTUFQX0NUUkwod2lu X251bSkpOwo+ID4gPiAtCXZhbHVlICY9IH4oV0lOX1RZUEVfTUFTSyA8PCBXSU5fVFlQRV9TSElG VCB8Cj4gPiA+IC0JCSBXSU5fU0laRV9NQVNLIDw8IFdJTl9TSVpFX1NISUZUKTsKPiA+ID4gLQl2 YWx1ZSB8PSAxIDw8IFdJTl9FTkFCTEVfU0hJRlQgfCB0eXBlIDw8IFdJTl9UWVBFX1NISUZUIHwK PiA+ID4gLQkJIChsb3dlcl8zMl9iaXRzKHNpemU2NCkgJiBXSU5fU0laRV9NQVNLIDw8IFdJTl9T SVpFX1NISUZUKTsKPiA+ID4gLQljc3Jfd3JpdGVsKHBjaWUsIHZhbHVlLCBQQUJfQVhJX0FNQVBf Q1RSTCh3aW5fbnVtKSk7Cj4gPiA+IC0KPiA+ID4gLQljc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMy X2JpdHMoc2l6ZTY0KSwKPiA+IFBBQl9FWFRfQVhJX0FNQVBfU0laRSh3aW5fbnVtKSk7Cj4gPiA+ IC0KPiA+ID4gLQkvKgo+ID4gPiAtCSAqIHByb2dyYW0gQVhJIHdpbmRvdyBiYXNlIHdpdGggYXBw cm9wcmlhdGUgdmFsdWUgaW4KPiA+ID4gLQkgKiBQQUJfQVhJX0FNQVBfQVhJX1dJTjAgcmVnaXN0 ZXIKPiA+ID4gLQkgKi8KPiA+ID4gLQljc3Jfd3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMoY3B1 X2FkZHIpICYKPiA+ICh+QVhJX1dJTkRPV19BTElHTl9NQVNLKSwKPiA+ID4gLQkJICAgUEFCX0FY SV9BTUFQX0FYSV9XSU4od2luX251bSkpOwo+ID4gPiAtCWNzcl93cml0ZWwocGNpZSwgdXBwZXJf MzJfYml0cyhjcHVfYWRkciksCj4gPiA+IC0JCSAgIFBBQl9FWFRfQVhJX0FNQVBfQVhJX1dJTih3 aW5fbnVtKSk7Cj4gPiA+IC0KPiA+ID4gLQljc3Jfd3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMo cGNpX2FkZHIpLAo+ID4gPiAtCQkgICBQQUJfQVhJX0FNQVBfUEVYX1dJTl9MKHdpbl9udW0pKTsK PiA+ID4gLQljc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMocGNpX2FkZHIpLAo+ID4gPiAt CQkgICBQQUJfQVhJX0FNQVBfUEVYX1dJTl9IKHdpbl9udW0pKTsKPiA+ID4gLQo+ID4gPiAtCXBj aWUtPm9iX3dpbnNfY29uZmlndXJlZCsrOwo+ID4gPiAtfQo+ID4gPiAtCj4gPiA+IC1zdGF0aWMg aW50IG1vYml2ZWlsX2JyaW5ndXBfbGluayhzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkgLXsK PiA+ID4gLQlpbnQgcmV0cmllczsKPiA+ID4gLQo+ID4gPiAtCS8qIGNoZWNrIGlmIHRoZSBsaW5r IGlzIHVwIG9yIG5vdCAqLwo+ID4gPiAtCWZvciAocmV0cmllcyA9IDA7IHJldHJpZXMgPCBMSU5L X1dBSVRfTUFYX1JFVFJJRVM7IHJldHJpZXMrKykgewo+ID4gPiAtCQlpZiAobW9iaXZlaWxfcGNp ZV9saW5rX3VwKHBjaWUpKQo+ID4gPiAtCQkJcmV0dXJuIDA7Cj4gPiA+IC0KPiA+ID4gLQkJdXNs ZWVwX3JhbmdlKExJTktfV0FJVF9NSU4sIExJTktfV0FJVF9NQVgpOwo+ID4gPiAtCX0KPiA+ID4g LQo+ID4gPiAtCWRldl9lcnIoJnBjaWUtPnBkZXYtPmRldiwgImxpbmsgbmV2ZXIgY2FtZSB1cFxu Iik7Cj4gPiA+IC0KPiA+ID4gLQlyZXR1cm4gLUVUSU1FRE9VVDsKPiA+ID4gLX0KPiA+ID4gLQo+ ID4gPiAgc3RhdGljIHZvaWQgbW9iaXZlaWxfcGNpZV9lbmFibGVfbXNpKHN0cnVjdCBtb2JpdmVp bF9wY2llICpwY2llKSAgewo+ID4gPiAgCXBoeXNfYWRkcl90IG1zZ19hZGRyID0gcGNpZS0+cGNp ZV9yZWdfYmFzZTsKPiA+ID4gLQlzdHJ1Y3QgbW9iaXZlaWxfbXNpICptc2kgPSAmcGNpZS0+bXNp Owo+ID4gPiArCXN0cnVjdCBtb2JpdmVpbF9tc2kgKm1zaSA9ICZwY2llLT5ycC5tc2k7Cj4gPiA+ Cj4gPiA+IC0JcGNpZS0+bXNpLm51bV9vZl92ZWN0b3JzID0gUENJX05VTV9NU0k7Cj4gPiA+ICsJ bXNpLT5udW1fb2ZfdmVjdG9ycyA9IFBDSV9OVU1fTVNJOwo+ID4gPiAgCW1zaS0+bXNpX3BhZ2Vz X3BoeXMgPSAocGh5c19hZGRyX3QpbXNnX2FkZHI7Cj4gPiA+Cj4gPiA+ICAJd3JpdGVsX3JlbGF4 ZWQobG93ZXJfMzJfYml0cyhtc2dfYWRkciksCj4gPiA+IEBAIC02MDQsOSArMjQwLDYgQEAgc3Rh dGljIGludCBtb2JpdmVpbF9ob3N0X2luaXQoc3RydWN0IG1vYml2ZWlsX3BjaWUKPiA+ICpwY2ll KQo+ID4gPiAgCXBhYl9jdHJsIHw9ICgxIDw8IEFNQkFfUElPX0VOQUJMRV9TSElGVCkgfCAoMSA8 PAo+ID4gUEVYX1BJT19FTkFCTEVfU0hJRlQpOwo+ID4gPiAgCWNzcl93cml0ZWwocGNpZSwgcGFi X2N0cmwsIFBBQl9DVFJMKTsKPiA+ID4KPiA+ID4gLQljc3Jfd3JpdGVsKHBjaWUsIChQQUJfSU5U UF9JTlRYX01BU0sgfCBQQUJfSU5UUF9NU0lfTUFTSyksCj4gPiA+IC0JCSAgIFBBQl9JTlRQX0FN QkFfTUlTQ19FTkIpOwo+ID4gPiAtCj4gPiA+ICAJLyoKPiA+ID4gIAkgKiBwcm9ncmFtIFBJTyBF bmFibGUgQml0IHRvIDEgYW5kIENvbmZpZyBXaW5kb3cgRW5hYmxlIEJpdCB0byAxIGluCj4gPiA+ ICAJICogUEFCX0FYSV9QSU9fQ1RSTCBSZWdpc3Rlcgo+ID4gPiBAQCAtNjI4LDIwICsyNjEsMjQg QEAgc3RhdGljIGludCBtb2JpdmVpbF9ob3N0X2luaXQoc3RydWN0IG1vYml2ZWlsX3BjaWUKPiA+ ICpwY2llKQo+ID4gPiAgCSAqLwo+ID4gPgo+ID4gPiAgCS8qIGNvbmZpZyBvdXRib3VuZCB0cmFu c2xhdGlvbiB3aW5kb3cgKi8KPiA+ID4gLQlwcm9ncmFtX29iX3dpbmRvd3MocGNpZSwgV0lOX05V TV8wLCBwY2llLT5vYl9pb19yZXMtPnN0YXJ0LCAwLAo+ID4gPiAtCQkJICAgQ0ZHX1dJTkRPV19U WVBFLCByZXNvdXJjZV9zaXplKHBjaWUtPm9iX2lvX3JlcykpOwo+ID4gPiArCXByb2dyYW1fb2Jf d2luZG93cyhwY2llLCBXSU5fTlVNXzAsIHBjaWUtPnJwLm9iX2lvX3Jlcy0+c3RhcnQsIDAsCj4g PiA+ICsJCQkgICBDRkdfV0lORE9XX1RZUEUsIHJlc291cmNlX3NpemUocGNpZS0+cnAub2JfaW9f cmVzKSk7Cj4gPiA+Cj4gPiA+ICAJLyogbWVtb3J5IGluYm91bmQgdHJhbnNsYXRpb24gd2luZG93 ICovCj4gPiA+ICAJcHJvZ3JhbV9pYl93aW5kb3dzKHBjaWUsIFdJTl9OVU1fMCwgMCwgMCwgTUVN X1dJTkRPV19UWVBFLAo+ID4gSUJfV0lOX1NJWkUpOwo+ID4gPgo+ID4gPiAgCS8qIEdldCB0aGUg SS9PIGFuZCBtZW1vcnkgcmFuZ2VzIGZyb20gRFQgKi8KPiA+ID4gIAlyZXNvdXJjZV9saXN0X2Zv cl9lYWNoX2VudHJ5KHdpbiwgJnBjaWUtPnJlc291cmNlcykgewo+ID4gPiAtCQlpZiAocmVzb3Vy Y2VfdHlwZSh3aW4tPnJlcykgPT0gSU9SRVNPVVJDRV9NRU0pCj4gPiA+ICsJCWlmIChyZXNvdXJj ZV90eXBlKHdpbi0+cmVzKSA9PSBJT1JFU09VUkNFX01FTSkgewo+ID4gPiAgCQkJdHlwZSA9IE1F TV9XSU5ET1dfVFlQRTsKPiA+ID4gLQkJZWxzZSBpZiAocmVzb3VyY2VfdHlwZSh3aW4tPnJlcykg PT0gSU9SRVNPVVJDRV9JTykKPiA+ID4gKwkJfSBlbHNlIGlmIChyZXNvdXJjZV90eXBlKHdpbi0+ cmVzKSA9PSBJT1JFU09VUkNFX0lPKSB7Cj4gPiA+ICAJCQl0eXBlID0gSU9fV0lORE9XX1RZUEU7 Cj4gPiA+IC0JCWVsc2UKPiA+ID4gKwkJfSBlbHNlIGlmIChyZXNvdXJjZV90eXBlKHdpbi0+cmVz KSA9PSBJT1JFU09VUkNFX0JVUykgewo+ID4gPiArCQkJcGNpZS0+cnAucm9vdF9idXNfbnIgPSB3 aW4tPnJlcy0+c3RhcnQ7Cj4gPiA+ICsJCQljb250aW51ZTsKPiA+ID4gKwkJfSBlbHNlIHsKPiA+ ID4gIAkJCWNvbnRpbnVlOwo+ID4gPiArCQl9Cj4gPiA+Cj4gPiA+ICAJCS8qIGNvbmZpZ3VyZSBv dXRib3VuZCB0cmFuc2xhdGlvbiB3aW5kb3cgKi8KPiA+ID4gIAkJcHJvZ3JhbV9vYl93aW5kb3dz KHBjaWUsIHBjaWUtPm9iX3dpbnNfY29uZmlndXJlZCwKPiA+ID4gQEAgLTY1Niw5ICsyOTMsNiBA QCBzdGF0aWMgaW50IG1vYml2ZWlsX2hvc3RfaW5pdChzdHJ1Y3QgbW9iaXZlaWxfcGNpZQo+ID4g KnBjaWUpCj4gPiA+ICAJdmFsdWUgfD0gKFBDSV9DTEFTU19CUklER0VfUENJIDw8IDE2KTsKPiA+ ID4gIAljc3Jfd3JpdGVsKHBjaWUsIHZhbHVlLCBQQUJfSU5UUF9BWElfUElPX0NMQVNTKTsKPiA+ ID4KPiA+ID4gLQkvKiBzZXR1cCBNU0kgaGFyZHdhcmUgcmVnaXN0ZXJzICovCj4gPiA+IC0JbW9i aXZlaWxfcGNpZV9lbmFibGVfbXNpKHBjaWUpOwo+ID4gPiAtCj4gPiA+ICAJcmV0dXJuIDA7Cj4g PiA+ICB9Cj4gPiA+Cj4gPiA+IEBAIC02NzEsMTEgKzMwNSwxMSBAQCBzdGF0aWMgdm9pZCBtb2Jp dmVpbF9tYXNrX2ludHhfaXJxKHN0cnVjdAo+ID4gaXJxX2RhdGEgKmRhdGEpCj4gPiA+Cj4gPiA+ ICAJcGNpZSA9IGlycV9kZXNjX2dldF9jaGlwX2RhdGEoZGVzYyk7Cj4gPiA+ICAJbWFzayA9IDEg PDwgKChkYXRhLT5od2lycSArIFBBQl9JTlRYX1NUQVJUKSAtIDEpOwo+ID4gPiAtCXJhd19zcGlu X2xvY2tfaXJxc2F2ZSgmcGNpZS0+aW50eF9tYXNrX2xvY2ssIGZsYWdzKTsKPiA+ID4gKwlyYXdf c3Bpbl9sb2NrX2lycXNhdmUoJnBjaWUtPnJwLmludHhfbWFza19sb2NrLCBmbGFncyk7Cj4gPiA+ ICAJc2hpZnRlZF92YWwgPSBjc3JfcmVhZGwocGNpZSwgUEFCX0lOVFBfQU1CQV9NSVNDX0VOQik7 Cj4gPiA+ICAJc2hpZnRlZF92YWwgJj0gfm1hc2s7Cj4gPiA+ICAJY3NyX3dyaXRlbChwY2llLCBz aGlmdGVkX3ZhbCwgUEFCX0lOVFBfQU1CQV9NSVNDX0VOQik7Cj4gPiA+IC0JcmF3X3NwaW5fdW5s b2NrX2lycXJlc3RvcmUoJnBjaWUtPmludHhfbWFza19sb2NrLCBmbGFncyk7Cj4gPiA+ICsJcmF3 X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjaWUtPnJwLmludHhfbWFza19sb2NrLCBmbGFncyk7 Cj4gPiA+ICB9Cj4gPiA+Cj4gPiA+ICBzdGF0aWMgdm9pZCBtb2JpdmVpbF91bm1hc2tfaW50eF9p cnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQo+ID4gPiBAQCAtNjg3LDExICszMjEsMTEgQEAgc3Rh dGljIHZvaWQgbW9iaXZlaWxfdW5tYXNrX2ludHhfaXJxKHN0cnVjdAo+ID4gaXJxX2RhdGEgKmRh dGEpCj4gPiA+Cj4gPiA+ICAJcGNpZSA9IGlycV9kZXNjX2dldF9jaGlwX2RhdGEoZGVzYyk7Cj4g PiA+ICAJbWFzayA9IDEgPDwgKChkYXRhLT5od2lycSArIFBBQl9JTlRYX1NUQVJUKSAtIDEpOwo+ ID4gPiAtCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcGNpZS0+aW50eF9tYXNrX2xvY2ssIGZsYWdz KTsKPiA+ID4gKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnBjaWUtPnJwLmludHhfbWFza19sb2Nr LCBmbGFncyk7Cj4gPiA+ICAJc2hpZnRlZF92YWwgPSBjc3JfcmVhZGwocGNpZSwgUEFCX0lOVFBf QU1CQV9NSVNDX0VOQik7Cj4gPiA+ICAJc2hpZnRlZF92YWwgfD0gbWFzazsKPiA+ID4gIAljc3Jf d3JpdGVsKHBjaWUsIHNoaWZ0ZWRfdmFsLCBQQUJfSU5UUF9BTUJBX01JU0NfRU5CKTsKPiA+ID4g LQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNpZS0+aW50eF9tYXNrX2xvY2ssIGZsYWdz KTsKPiA+ID4gKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNpZS0+cnAuaW50eF9tYXNr X2xvY2ssIGZsYWdzKTsKPiA+ID4gIH0KPiA+ID4KPiA+ID4gIHN0YXRpYyBzdHJ1Y3QgaXJxX2No aXAgaW50eF9pcnFfY2hpcCA9IHsKPiA+ID4gQEAgLTc1OSw3ICszOTMsNyBAQCBzdGF0aWMgaW50 IG1vYml2ZWlsX2lycV9tc2lfZG9tYWluX2FsbG9jKHN0cnVjdAo+ID4gaXJxX2RvbWFpbiAqZG9t YWluLAo+ID4gPiAgCQkJCQkgdW5zaWduZWQgaW50IG5yX2lycXMsIHZvaWQgKmFyZ3MpCj4gPiA+ ICB7Cj4gPiA+ICAJc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUgPSBkb21haW4tPmhvc3RfZGF0 YTsKPiA+ID4gLQlzdHJ1Y3QgbW9iaXZlaWxfbXNpICptc2kgPSAmcGNpZS0+bXNpOwo+ID4gPiAr CXN0cnVjdCBtb2JpdmVpbF9tc2kgKm1zaSA9ICZwY2llLT5ycC5tc2k7Cj4gPiA+ICAJdW5zaWdu ZWQgbG9uZyBiaXQ7Cj4gPiA+Cj4gPiA+ICAJV0FSTl9PTihucl9pcnFzICE9IDEpOwo+ID4gPiBA QCAtNzg2LDcgKzQyMCw3IEBAIHN0YXRpYyB2b2lkIG1vYml2ZWlsX2lycV9tc2lfZG9tYWluX2Zy ZWUoc3RydWN0Cj4gPiBpcnFfZG9tYWluICpkb21haW4sCj4gPiA+ICB7Cj4gPiA+ICAJc3RydWN0 IGlycV9kYXRhICpkID0gaXJxX2RvbWFpbl9nZXRfaXJxX2RhdGEoZG9tYWluLCB2aXJxKTsKPiA+ ID4gIAlzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9k YXRhKGQpOwo+ID4gPiAtCXN0cnVjdCBtb2JpdmVpbF9tc2kgKm1zaSA9ICZwY2llLT5tc2k7Cj4g PiA+ICsJc3RydWN0IG1vYml2ZWlsX21zaSAqbXNpID0gJnBjaWUtPnJwLm1zaTsKPiA+ID4KPiA+ ID4gIAltdXRleF9sb2NrKCZtc2ktPmxvY2spOwo+ID4gPgo+ID4gPiBAQCAtODA3LDkgKzQ0MSw5 IEBAIHN0YXRpYyBpbnQgbW9iaXZlaWxfYWxsb2NhdGVfbXNpX2RvbWFpbnMoc3RydWN0Cj4gPiBt b2JpdmVpbF9wY2llICpwY2llKQo+ID4gPiAgewo+ID4gPiAgCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZwY2llLT5wZGV2LT5kZXY7Cj4gPiA+ICAJc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSA9 IG9mX25vZGVfdG9fZndub2RlKGRldi0+b2Zfbm9kZSk7Cj4gPiA+IC0Jc3RydWN0IG1vYml2ZWls X21zaSAqbXNpID0gJnBjaWUtPm1zaTsKPiA+ID4gKwlzdHJ1Y3QgbW9iaXZlaWxfbXNpICptc2kg PSAmcGNpZS0+cnAubXNpOwo+ID4gPgo+ID4gPiAtCW11dGV4X2luaXQoJnBjaWUtPm1zaS5sb2Nr KTsKPiA+ID4gKwltdXRleF9pbml0KCZtc2ktPmxvY2spOwo+ID4gPiAgCW1zaS0+ZGV2X2RvbWFp biA9IGlycV9kb21haW5fYWRkX2xpbmVhcihOVUxMLAo+ID4gbXNpLT5udW1fb2ZfdmVjdG9ycywK PiA+ID4gIAkJCQkJCSZtc2lfZG9tYWluX29wcywgcGNpZSk7Cj4gPiA+ICAJaWYgKCFtc2ktPmRl dl9kb21haW4pIHsKPiA+ID4gQEAgLTgzNiwxNSArNDcwLDE1IEBAIHN0YXRpYyBpbnQgbW9iaXZl aWxfcGNpZV9pbml0X2lycV9kb21haW4oc3RydWN0Cj4gPiBtb2JpdmVpbF9wY2llICpwY2llKQo+ ID4gPiAgCWludCByZXQ7Cj4gPiA+Cj4gPiA+ICAJLyogc2V0dXAgSU5UeCAqLwo+ID4gPiAtCXBj aWUtPmludHhfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKG5vZGUsIFBDSV9OVU1fSU5U WCwKPiA+ID4gLQkJCQkJCSAgJmludHhfZG9tYWluX29wcywgcGNpZSk7Cj4gPiA+ICsJcGNpZS0+ cnAuaW50eF9kb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIobm9kZSwgUENJX05VTV9JTlRY LAo+ID4gPiArCQkJCQkJICAgICAmaW50eF9kb21haW5fb3BzLCBwY2llKTsKPiA+ID4KPiA+ID4g LQlpZiAoIXBjaWUtPmludHhfZG9tYWluKSB7Cj4gPiA+ICsJaWYgKCFwY2llLT5ycC5pbnR4X2Rv bWFpbikgewo+ID4gPiAgCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgYSBJTlR4IElSUSBk b21haW5cbiIpOwo+ID4gPiAgCQlyZXR1cm4gLUVOT01FTTsKPiA+ID4gIAl9Cj4gPiA+Cj4gPiA+ IC0JcmF3X3NwaW5fbG9ja19pbml0KCZwY2llLT5pbnR4X21hc2tfbG9jayk7Cj4gPiA+ICsJcmF3 X3NwaW5fbG9ja19pbml0KCZwY2llLT5ycC5pbnR4X21hc2tfbG9jayk7Cj4gPiA+Cj4gPiA+ICAJ Lyogc2V0dXAgTVNJICovCj4gPiA+ICAJcmV0ID0gbW9iaXZlaWxfYWxsb2NhdGVfbXNpX2RvbWFp bnMocGNpZSk7Cj4gPiA+IEBAIC04NTQsMjQgKzQ4OCw1OCBAQCBzdGF0aWMgaW50IG1vYml2ZWls X3BjaWVfaW5pdF9pcnFfZG9tYWluKHN0cnVjdAo+ID4gbW9iaXZlaWxfcGNpZSAqcGNpZSkKPiA+ ID4gIAlyZXR1cm4gMDsKPiA+ID4gIH0KPiA+ID4KPiA+ID4gLXN0YXRpYyBpbnQgbW9iaXZlaWxf cGNpZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gPiArc3RhdGljIGlu dCBtb2JpdmVpbF9wY2llX2ludGVycnVwdF9pbml0KHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2ll KQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwY2llLT5wZGV2LT5kZXY7 Cj4gPiA+ICsJc3RydWN0IHJlc291cmNlICpyZXM7Cj4gPiA+ICsJaW50IHJldDsKPiA+ID4gKwo+ ID4gPiArCWlmIChwY2llLT5ycC5vcHMtPmludGVycnVwdF9pbml0KQo+ID4gPiArCQlyZXR1cm4g cGNpZS0+cnAub3BzLT5pbnRlcnJ1cHRfaW5pdChwY2llKTsKPiA+ID4gKwo+ID4gPiArCS8qIG1h cCBNU0kgY29uZmlnIHJlc291cmNlICovCj4gPiA+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291 cmNlX2J5bmFtZShwY2llLT5wZGV2LCBJT1JFU09VUkNFX01FTSwKPiA+ID4gKwkJCQkJICAgImFw Yl9jc3IiKTsKPiA+ID4gKwlwY2llLT5hcGJfY3NyX2Jhc2UgPSBkZXZtX3BjaV9yZW1hcF9jZmdf cmVzb3VyY2UoZGV2LCByZXMpOwo+ID4gPiArCWlmIChJU19FUlIocGNpZS0+YXBiX2Nzcl9iYXNl KSkKPiA+ID4gKwkJcmV0dXJuIFBUUl9FUlIocGNpZS0+YXBiX2Nzcl9iYXNlKTsKPiA+ID4gKwo+ ID4gPiArCS8qIHNldHVwIE1TSSBoYXJkd2FyZSByZWdpc3RlcnMgKi8KPiA+ID4gKwltb2JpdmVp bF9wY2llX2VuYWJsZV9tc2kocGNpZSk7Cj4gPiA+ICsKPiA+ID4gKwlwY2llLT5ycC5pcnEgPSBw bGF0Zm9ybV9nZXRfaXJxKHBjaWUtPnBkZXYsIDApOwo+ID4gPiArCWlmIChwY2llLT5ycC5pcnEg PD0gMCkgewo+ID4gPiArCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBtYXAgSVJROiAlZFxuIiwg cGNpZS0+cnAuaXJxKTsKPiA+ID4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gPiA+ICsJfQo+ID4gPiAr Cj4gPiA+ICsJLyogaW5pdGlhbGl6ZSB0aGUgSVJRIGRvbWFpbnMgKi8KPiA+ID4gKwlyZXQgPSBt b2JpdmVpbF9wY2llX2luaXRfaXJxX2RvbWFpbihwY2llKTsKPiA+ID4gKwlpZiAocmV0KSB7Cj4g PiA+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIGNyZWF0aW5nIElSUSBEb21haW5cbiIpOwo+ID4g PiArCQlyZXR1cm4gcmV0Owo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWlycV9zZXRfY2hhaW5l ZF9oYW5kbGVyX2FuZF9kYXRhKHBjaWUtPnJwLmlycSwKPiA+ID4gKwkJCQkJIG1vYml2ZWlsX3Bj aWVfaXNyLCBwY2llKTsKPiA+ID4gKwo+ID4gPiArCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCj4g PiA+ICsJY3NyX3dyaXRlbChwY2llLCAoUEFCX0lOVFBfSU5UWF9NQVNLIHwgUEFCX0lOVFBfTVNJ X01BU0spLAo+ID4gPiArCQkgICBQQUJfSU5UUF9BTUJBX01JU0NfRU5CKTsKPiA+ID4gKwo+ID4g PiArCXJldHVybiAwOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtpbnQgbW9iaXZlaWxfcGNpZV9o b3N0X3Byb2JlKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKQo+ID4gPiAgewo+ID4gPiAtCXN0 cnVjdCBtb2JpdmVpbF9wY2llICpwY2llOwo+ID4gPiAgCXN0cnVjdCBwY2lfYnVzICpidXM7Cj4g PiA+ICAJc3RydWN0IHBjaV9idXMgKmNoaWxkOwo+ID4gPiAgCXN0cnVjdCBwY2lfaG9zdF9icmlk Z2UgKmJyaWRnZTsKPiA+ID4gLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ID4g PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwY2llLT5wZGV2LT5kZXY7Cj4gPiA+ICAJcmVzb3Vy Y2Vfc2l6ZV90IGlvYmFzZTsKPiA+ID4gIAlpbnQgcmV0Owo+ID4gPgo+ID4gPiAtCS8qIGFsbG9j YXRlIHRoZSBQQ0llIHBvcnQgKi8KPiA+ID4gLQlicmlkZ2UgPSBkZXZtX3BjaV9hbGxvY19ob3N0 X2JyaWRnZShkZXYsIHNpemVvZigqcGNpZSkpOwo+ID4gPiAtCWlmICghYnJpZGdlKQo+ID4gPiAt CQlyZXR1cm4gLUVOT01FTTsKPiA+ID4gLQo+ID4gPiAtCXBjaWUgPSBwY2lfaG9zdF9icmlkZ2Vf cHJpdihicmlkZ2UpOwo+ID4gPiAtCj4gPiA+IC0JcGNpZS0+cGRldiA9IHBkZXY7Cj4gPiA+ICsJ SU5JVF9MSVNUX0hFQUQoJnBjaWUtPnJlc291cmNlcyk7Cj4gPiA+Cj4gPiA+ICAJcmV0ID0gbW9i aXZlaWxfcGNpZV9wYXJzZV9kdChwY2llKTsKPiA+ID4gIAlpZiAocmV0KSB7Cj4gPiA+IEBAIC04 NzksNyArNTQ3LDEwIEBAIHN0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV9wcm9iZShzdHJ1Y3QKPiA+ IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ID4gIAkJcmV0dXJuIHJldDsKPiA+ID4gIAl9Cj4g PiA+Cj4gPiA+IC0JSU5JVF9MSVNUX0hFQUQoJnBjaWUtPnJlc291cmNlcyk7Cj4gPiA+ICsJLyog YWxsb2NhdGUgdGhlIFBDSWUgcG9ydCAqLwo+ID4gPiArCWJyaWRnZSA9IGRldm1fcGNpX2FsbG9j X2hvc3RfYnJpZGdlKGRldiwgMCk7Cj4gPiA+ICsJaWYgKCFicmlkZ2UpCj4gPiA+ICsJCXJldHVy biAtRU5PTUVNOwo+ID4gPgo+ID4gPiAgCS8qIHBhcnNlIHRoZSBob3N0IGJyaWRnZSBiYXNlIGFk ZHJlc3NlcyBmcm9tIHRoZSBkZXZpY2UgdHJlZSBmaWxlICovCj4gPiA+ICAJcmV0ID0gZGV2bV9v Zl9wY2lfZ2V0X2hvc3RfYnJpZGdlX3Jlc291cmNlcyhkZXYsIDAsIDB4ZmYsCj4gPiA+IEBAIC04 OTksMTUgKzU3MCwxMiBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfcHJvYmUoc3RydWN0Cj4g PiBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiA+ICAJCWdvdG8gZXJyb3I7Cj4gPiA+ICAJfQo+ ID4gPgo+ID4gPiAtCS8qIGluaXRpYWxpemUgdGhlIElSUSBkb21haW5zICovCj4gPiA+IC0JcmV0 ID0gbW9iaXZlaWxfcGNpZV9pbml0X2lycV9kb21haW4ocGNpZSk7Cj4gPiA+ICsJcmV0ID0gbW9i aXZlaWxfcGNpZV9pbnRlcnJ1cHRfaW5pdChwY2llKTsKPiA+ID4gIAlpZiAocmV0KSB7Cj4gPiA+ IC0JCWRldl9lcnIoZGV2LCAiRmFpbGVkIGNyZWF0aW5nIElSUSBEb21haW5cbiIpOwo+ID4gPiAr CQlkZXZfZXJyKGRldiwgIkludGVycnVwdCBpbml0IGZhaWxlZFxuIik7Cj4gPiA+ICAJCWdvdG8g ZXJyb3I7Cj4gPiA+ICAJfQo+ID4gPgo+ID4gPiAtCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyX2Fu ZF9kYXRhKHBjaWUtPmlycSwgbW9iaXZlaWxfcGNpZV9pc3IsIHBjaWUpOwo+ID4gPiAtCj4gPiA+ ICAJcmV0ID0gZGV2bV9yZXF1ZXN0X3BjaV9idXNfcmVzb3VyY2VzKGRldiwgJnBjaWUtPnJlc291 cmNlcyk7Cj4gPiA+ICAJaWYgKHJldCkKPiA+ID4gIAkJZ290byBlcnJvcjsKPiA+ID4gQEAgLTkx Niw3ICs1ODQsNyBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfcHJvYmUoc3RydWN0Cj4gPiBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiA+ICAJbGlzdF9zcGxpY2VfaW5pdCgmcGNpZS0+cmVz b3VyY2VzLCAmYnJpZGdlLT53aW5kb3dzKTsKPiA+ID4gIAlicmlkZ2UtPmRldi5wYXJlbnQgPSBk ZXY7Cj4gPiA+ICAJYnJpZGdlLT5zeXNkYXRhID0gcGNpZTsKPiA+ID4gLQlicmlkZ2UtPmJ1c25y ID0gcGNpZS0+cm9vdF9idXNfbnI7Cj4gPiA+ICsJYnJpZGdlLT5idXNuciA9IHBjaWUtPnJwLnJv b3RfYnVzX25yOwo+ID4gPiAgCWJyaWRnZS0+b3BzID0gJm1vYml2ZWlsX3BjaWVfb3BzOwo+ID4g PiAgCWJyaWRnZS0+bWFwX2lycSA9IG9mX2lycV9wYXJzZV9hbmRfbWFwX3BjaTsKPiA+ID4gIAli cmlkZ2UtPnN3aXp6bGVfaXJxID0gcGNpX2NvbW1vbl9zd2l6emxlOwo+ID4gPiBAQCAtOTQ0LDI1 ICs2MTIsMyBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfcHJvYmUoc3RydWN0Cj4gPiBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiA+ICAJcGNpX2ZyZWVfcmVzb3VyY2VfbGlzdCgmcGNpZS0+ cmVzb3VyY2VzKTsKPiA+ID4gIAlyZXR1cm4gcmV0Owo+ID4gPiAgfQo+ID4gPiAtCj4gPiA+IC1z dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtb2JpdmVpbF9wY2llX29mX21hdGNoW10g PSB7Cj4gPiA+IC0Jey5jb21wYXRpYmxlID0gIm1idmwsZ3BleDQwLXBjaWUiLH0sCj4gPiA+IC0J e30sCj4gPiA+IC19Owo+ID4gPiAtCj4gPiA+IC1NT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtb2Jp dmVpbF9wY2llX29mX21hdGNoKTsKPiA+ID4gLQo+ID4gPiAtc3RhdGljIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgbW9iaXZlaWxfcGNpZV9kcml2ZXIgPSB7Cj4gPiA+IC0JLnByb2JlID0gbW9iaXZl aWxfcGNpZV9wcm9iZSwKPiA+ID4gLQkuZHJpdmVyID0gewo+ID4gPiAtCQkubmFtZSA9ICJtb2Jp dmVpbC1wY2llIiwKPiA+ID4gLQkJLm9mX21hdGNoX3RhYmxlID0gbW9iaXZlaWxfcGNpZV9vZl9t YXRjaCwKPiA+ID4gLQkJLnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLAo+ID4gPiAtCX0sCj4g PiA+IC19Owo+ID4gPiAtCj4gPiA+IC1idWlsdGluX3BsYXRmb3JtX2RyaXZlcihtb2JpdmVpbF9w Y2llX2RyaXZlcik7Cj4gPiA+IC0KPiA+ID4gLU1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKPiA+ ID4gLU1PRFVMRV9ERVNDUklQVElPTigiTW9iaXZlaWwgUENJZSBob3N0IGNvbnRyb2xsZXIgZHJp dmVyIik7Cj4gPiA+IC1NT0RVTEVfQVVUSE9SKCJTdWJyYWhtYW55YSBMaW5nYXBwYQo+ID4gPGwu c3VicmFobWFueWFAbW9iaXZlaWwuY28uaW4+Iik7Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwtcGxhdC5jCj4gPiBiL2RyaXZl cnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1wbGF0LmMKPiA+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4yMTZjNjJmMzU1NjgK PiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21v Yml2ZWlsL3BjaWUtbW9iaXZlaWwtcGxhdC5jCj4gPiA+IEBAIC0wLDAgKzEsNTQgQEAKPiA+ID4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gPiA+ICsvKgo+ID4gPiArICog UENJZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBNb2JpdmVpbCBQQ0llIEhvc3QgY29udHJv bGxlcgo+ID4gPiArICoKPiA+ID4gKyAqIENvcHlyaWdodCAoYykgMjAxOCBNb2JpdmVpbCBJbmMu Cj4gPiA+ICsgKiBBdXRob3I6IFN1YnJhaG1hbnlhIExpbmdhcHBhIDxsLnN1YnJhaG1hbnlhQG1v Yml2ZWlsLmNvLmluPgo+ID4gPiArICogUmVmYWN0b3I6IFpoaXFpYW5nIEhvdSA8WmhpcWlhbmcu SG91QG54cC5jb20+Cj4gPiA+ICsgKi8KPiA+ID4gKwo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2lu aXQuaD4KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPiA+ID4gKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9wY2kuaD4KPiA+ID4gKyNp bmNsdWRlIDxsaW51eC9wY2kuaD4KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaD4KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gPiA+ICsKPiA+ID4gKyNpbmNs dWRlICJwY2llLW1vYml2ZWlsLmgiCj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgbW9iaXZlaWxf cGNpZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gPiArewo+ID4gPiAr CXN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llOwo+ID4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZwZGV2LT5kZXY7Cj4gPiA+ICsKPiA+ID4gKwlwY2llID0gZGV2bV9remFsbG9jKGRldiwgc2l6 ZW9mKCpwY2llKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ICsJaWYgKCFwY2llKQo+ID4gPiArCQlyZXR1 cm4gLUVOT01FTTsKPiA+ID4gKwo+ID4gPiArCXBjaWUtPnBkZXYgPSBwZGV2Owo+ID4gPiArCj4g PiA+ICsJcmV0dXJuIG1vYml2ZWlsX3BjaWVfaG9zdF9wcm9iZShwY2llKTsKPiA+ID4gK30KPiA+ ID4gKwo+ID4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbW9iaXZlaWxfcGNp ZV9vZl9tYXRjaFtdID0gewo+ID4gPiArCXsuY29tcGF0aWJsZSA9ICJtYnZsLGdwZXg0MC1wY2ll Iix9LAo+ID4gPiArCXt9LAo+ID4gPiArfTsKPiA+ID4gKwo+ID4gPiArTU9EVUxFX0RFVklDRV9U QUJMRShvZiwgbW9iaXZlaWxfcGNpZV9vZl9tYXRjaCk7Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBz dHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1vYml2ZWlsX3BjaWVfZHJpdmVyID0gewo+ID4gPiArCS5w cm9iZSA9IG1vYml2ZWlsX3BjaWVfcHJvYmUsCj4gPiA+ICsJLmRyaXZlciA9IHsKPiA+ID4gKwkJ Lm5hbWUgPSAibW9iaXZlaWwtcGNpZSIsCj4gPiA+ICsJCS5vZl9tYXRjaF90YWJsZSA9IG1vYml2 ZWlsX3BjaWVfb2ZfbWF0Y2gsCj4gPiA+ICsJCS5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSwK PiA+ID4gKwl9LAo+ID4gPiArfTsKPiA+ID4gKwo+ID4gPiArYnVpbHRpbl9wbGF0Zm9ybV9kcml2 ZXIobW9iaXZlaWxfcGNpZV9kcml2ZXIpOwo+ID4gPiArCj4gPiA+ICtNT0RVTEVfTElDRU5TRSgi R1BMIHYyIik7Cj4gPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIk1vYml2ZWlsIFBDSWUgaG9zdCBj b250cm9sbGVyIGRyaXZlciIpOwo+ID4gPiArTU9EVUxFX0FVVEhPUigiU3VicmFobWFueWEgTGlu Z2FwcGEKPiA+IDxsLnN1YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmluPiIpOwo+ID4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmMKPiA+ IGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmMKPiA+ID4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5lZTY3OGE2MDgy NWQKPiA+ID4gLS0tIC9kZXYvbnVsbAo+ID4gPiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVy L21vYml2ZWlsL3BjaWUtbW9iaXZlaWwuYwo+ID4gPiBAQCAtMCwwICsxLDIyOCBAQAo+ID4gPiAr Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiA+ID4gKy8qCj4gPiA+ICsgKiBQ Q0llIGhvc3QgY29udHJvbGxlciBkcml2ZXIgZm9yIE1vYml2ZWlsIFBDSWUgSG9zdCBjb250cm9s bGVyCj4gPiA+ICsgKgo+ID4gPiArICogQ29weXJpZ2h0IChjKSAyMDE4IE1vYml2ZWlsIEluYy4K PiA+ID4gKyAqIEF1dGhvcjogU3VicmFobWFueWEgTGluZ2FwcGEgPGwuc3VicmFobWFueWFAbW9i aXZlaWwuY28uaW4+Cj4gPiA+ICsgKiBSZWZhY3RvcjogWmhpcWlhbmcgSG91IDxaaGlxaWFuZy5I b3VAbnhwLmNvbT4KPiA+ID4gKyAqLwo+ID4gPiArCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvZGVs YXkuaD4KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Cj4gPiA+ICsjaW5jbHVkZSA8bGlu dXgva2VybmVsLmg+Cj4gPiA+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4gPiA+ICsjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4gPiA+ICsKPiA+ID4gKyNpbmNsdWRlICJwY2ll LW1vYml2ZWlsLmgiCj4gPiA+ICsKPiA+ID4gKy8qCj4gPiA+ICsgKiBtb2JpdmVpbF9wY2llX3Nl bF9wYWdlIC0gcm91dGluZSB0byBhY2Nlc3MgcGFnZWQgcmVnaXN0ZXIKPiA+ID4gKyAqCj4gPiA+ ICsgKiBSZWdpc3RlcnMgd2hvc2UgYWRkcmVzcyBncmVhdGVyIHRoYW4gUEFHRURfQUREUl9CTkRS WSAoMHhjMDApIGFyZQo+ID4gcGFnZWQsCj4gPiA+ICsgKiBmb3IgdGhpcyBzY2hlbWUgdG8gd29y ayBleHRyYWN0ZWQgaGlnaGVyIDYgYml0cyBvZiB0aGUgb2Zmc2V0IHdpbGwgYmUKPiA+ID4gKyAq IHdyaXR0ZW4gdG8gcGdfc2VsIGZpZWxkIG9mIFBBQl9DVFJMIHJlZ2lzdGVyIGFuZCByZXN0IG9m IHRoZSBsb3dlciAxMAo+ID4gPiArICogYml0cyBlbmFibGVkIHdpdGggUEFHRURfQUREUl9CTkRS WSBhcmUgdXNlZCBhcyBvZmZzZXQgb2YgdGhlCj4gPiByZWdpc3Rlci4KPiA+ID4gKyAqLwo+ID4g PiArc3RhdGljIHZvaWQgbW9iaXZlaWxfcGNpZV9zZWxfcGFnZShzdHJ1Y3QgbW9iaXZlaWxfcGNp ZSAqcGNpZSwgdTggcGdfaWR4KQo+ID4gPiArewo+ID4gPiArCXUzMiB2YWw7Cj4gPiA+ICsKPiA+ ID4gKwl2YWwgPSByZWFkbChwY2llLT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyBQQUJfQ1RSTCk7Cj4g PiA+ICsJdmFsICY9IH4oUEFHRV9TRUxfTUFTSyA8PCBQQUdFX1NFTF9TSElGVCk7Cj4gPiA+ICsJ dmFsIHw9IChwZ19pZHggJiBQQUdFX1NFTF9NQVNLKSA8PCBQQUdFX1NFTF9TSElGVDsKPiA+ID4g Kwo+ID4gPiArCXdyaXRlbCh2YWwsIHBjaWUtPmNzcl9heGlfc2xhdmVfYmFzZSArIFBBQl9DVFJM KTsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIHZvaWQgKm1vYml2ZWlsX3BjaWVfY29t cF9hZGRyKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIgb2ZmKQo+ID4gPiArewo+ID4g PiArCWlmIChvZmYgPCBQQUdFRF9BRERSX0JORFJZKSB7Cj4gPiA+ICsJCS8qIEZvciBkaXJlY3Rs eSBhY2Nlc3NlZCByZWdpc3RlcnMsIGNsZWFyIHRoZSBwZ19zZWwgZmllbGQgKi8KPiA+ID4gKwkJ bW9iaXZlaWxfcGNpZV9zZWxfcGFnZShwY2llLCAwKTsKPiA+ID4gKwkJcmV0dXJuIHBjaWUtPmNz cl9heGlfc2xhdmVfYmFzZSArIG9mZjsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwltb2JpdmVp bF9wY2llX3NlbF9wYWdlKHBjaWUsIE9GRlNFVF9UT19QQUdFX0lEWChvZmYpKTsKPiA+ID4gKwly ZXR1cm4gcGNpZS0+Y3NyX2F4aV9zbGF2ZV9iYXNlICsgT0ZGU0VUX1RPX1BBR0VfQUREUihvZmYp Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfcmVhZCh2 b2lkIF9faW9tZW0gKmFkZHIsIGludCBzaXplLCB1MzIgKnZhbCkKPiA+ID4gK3sKPiA+ID4gKwlp ZiAoKHVpbnRwdHJfdClhZGRyICYgKHNpemUgLSAxKSkgewo+ID4gPiArCQkqdmFsID0gMDsKPiA+ ID4gKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKPiA+ID4gKwl9Cj4gPiA+ ICsKPiA+ID4gKwlzd2l0Y2ggKHNpemUpIHsKPiA+ID4gKwljYXNlIDQ6Cj4gPiA+ICsJCSp2YWwg PSByZWFkbChhZGRyKTsKPiA+ID4gKwkJYnJlYWs7Cj4gPiA+ICsJY2FzZSAyOgo+ID4gPiArCQkq dmFsID0gcmVhZHcoYWRkcik7Cj4gPiA+ICsJCWJyZWFrOwo+ID4gPiArCWNhc2UgMToKPiA+ID4g KwkJKnZhbCA9IHJlYWRiKGFkZHIpOwo+ID4gPiArCQlicmVhazsKPiA+ID4gKwlkZWZhdWx0Ogo+ ID4gPiArCQkqdmFsID0gMDsKPiA+ID4gKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05V TUJFUjsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVM Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfd3JpdGUo dm9pZCBfX2lvbWVtICphZGRyLCBpbnQgc2l6ZSwgdTMyIHZhbCkKPiA+ID4gK3sKPiA+ID4gKwlp ZiAoKHVpbnRwdHJfdClhZGRyICYgKHNpemUgLSAxKSkKPiA+ID4gKwkJcmV0dXJuIFBDSUJJT1Nf QkFEX1JFR0lTVEVSX05VTUJFUjsKPiA+ID4gKwo+ID4gPiArCXN3aXRjaCAoc2l6ZSkgewo+ID4g PiArCWNhc2UgNDoKPiA+ID4gKwkJd3JpdGVsKHZhbCwgYWRkcik7Cj4gPiA+ICsJCWJyZWFrOwo+ ID4gPiArCWNhc2UgMjoKPiA+ID4gKwkJd3JpdGV3KHZhbCwgYWRkcik7Cj4gPiA+ICsJCWJyZWFr Owo+ID4gPiArCWNhc2UgMToKPiA+ID4gKwkJd3JpdGViKHZhbCwgYWRkcik7Cj4gPiA+ICsJCWJy ZWFrOwo+ID4gPiArCWRlZmF1bHQ6Cj4gPiA+ICsJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RF Ul9OVU1CRVI7Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIFBDSUJJT1NfU1VDQ0VT U0ZVTDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArdTMyIGNzcl9yZWFkKHN0cnVjdCBtb2JpdmVp bF9wY2llICpwY2llLCB1MzIgb2ZmLCBzaXplX3Qgc2l6ZSkKPiA+ID4gK3sKPiA+ID4gKwl2b2lk ICphZGRyOwo+ID4gPiArCXUzMiB2YWw7Cj4gPiA+ICsJaW50IHJldDsKPiA+ID4gKwo+ID4gPiAr CWFkZHIgPSBtb2JpdmVpbF9wY2llX2NvbXBfYWRkcihwY2llLCBvZmYpOwo+ID4gPiArCj4gPiA+ ICsJcmV0ID0gbW9iaXZlaWxfcGNpZV9yZWFkKGFkZHIsIHNpemUsICZ2YWwpOwo+ID4gPiArCWlm IChyZXQpCj4gPiA+ICsJCWRldl9lcnIoJnBjaWUtPnBkZXYtPmRldiwgInJlYWQgQ1NSIGFkZHJl c3MgZmFpbGVkXG4iKTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiB2YWw7Cj4gPiA+ICt9Cj4gPiA+ ICsKPiA+ID4gK3ZvaWQgY3NyX3dyaXRlKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIg dmFsLCB1MzIgb2ZmLCBzaXplX3Qgc2l6ZSkKPiA+ID4gK3sKPiA+ID4gKwl2b2lkICphZGRyOwo+ ID4gPiArCWludCByZXQ7Cj4gPiA+ICsKPiA+ID4gKwlhZGRyID0gbW9iaXZlaWxfcGNpZV9jb21w X2FkZHIocGNpZSwgb2ZmKTsKPiA+ID4gKwo+ID4gPiArCXJldCA9IG1vYml2ZWlsX3BjaWVfd3Jp dGUoYWRkciwgc2l6ZSwgdmFsKTsKPiA+ID4gKwlpZiAocmV0KQo+ID4gPiArCQlkZXZfZXJyKCZw Y2llLT5wZGV2LT5kZXYsICJ3cml0ZSBDU1IgYWRkcmVzcyBmYWlsZWRcbiIpOwo+ID4gPiArfQo+ ID4gPiArCj4gPiA+ICtib29sIG1vYml2ZWlsX3BjaWVfbGlua191cChzdHJ1Y3QgbW9iaXZlaWxf cGNpZSAqcGNpZSkKPiA+ID4gK3sKPiA+ID4gKwlpZiAocGNpZS0+b3BzLT5saW5rX3VwKQo+ID4g PiArCQlyZXR1cm4gcGNpZS0+b3BzLT5saW5rX3VwKHBjaWUpOwo+ID4gPiArCj4gPiA+ICsJcmV0 dXJuIChjc3JfcmVhZGwocGNpZSwgTFRTU01fU1RBVFVTKSAmCj4gPiA+ICsJCUxUU1NNX1NUQVRV U19MMF9NQVNLKSA9PSBMVFNTTV9TVEFUVVNfTDA7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3Zv aWQgcHJvZ3JhbV9pYl93aW5kb3dzKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCBpbnQgd2lu X251bSwgdTY0Cj4gPiBjcHVfYWRkciwKPiA+ID4gKwkJCXU2NCBwY2lfYWRkciwgdTMyIHR5cGUs IHU2NCBzaXplKQo+ID4gPiArewo+ID4gPiArCXUzMiB2YWx1ZTsKPiA+ID4gKwl1NjQgc2l6ZTY0 ID0gfihzaXplIC0gMSk7Cj4gPiA+ICsKPiA+ID4gKwlpZiAod2luX251bSA+PSBwY2llLT5wcGlv X3dpbnMpIHsKPiA+ID4gKwkJZGV2X2VycigmcGNpZS0+cGRldi0+ZGV2LAo+ID4gPiArCQkJIkVS Uk9SOiBtYXggaW5ib3VuZCB3aW5kb3dzIHJlYWNoZWQgIVxuIik7Cj4gPiA+ICsJCXJldHVybjsK PiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwl2YWx1ZSA9IGNzcl9yZWFkbChwY2llLCBQQUJfUEVY X0FNQVBfQ1RSTCh3aW5fbnVtKSk7Cj4gPiA+ICsJdmFsdWUgJj0gfihBTUFQX0NUUkxfVFlQRV9N QVNLIDw8IEFNQVBfQ1RSTF9UWVBFX1NISUZUIHwKPiA+ID4gKwkJIFdJTl9TSVpFX01BU0sgPDwg V0lOX1NJWkVfU0hJRlQpOwo+ID4gPiArCXZhbHVlIHw9ICh0eXBlIDw8IEFNQVBfQ1RSTF9UWVBF X1NISUZUKSB8ICgxIDw8Cj4gPiBBTUFQX0NUUkxfRU5fU0hJRlQpIHwKPiA+ID4gKwkJIChsb3dl cl8zMl9iaXRzKHNpemU2NCkgJiBXSU5fU0laRV9NQVNLIDw8IFdJTl9TSVpFX1NISUZUKTsKPiA+ ID4gKwljc3Jfd3JpdGVsKHBjaWUsIHZhbHVlLCBQQUJfUEVYX0FNQVBfQ1RSTCh3aW5fbnVtKSk7 Cj4gPiA+ICsKPiA+ID4gKwljc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMoc2l6ZTY0KSwK PiA+ID4gKwkJICAgUEFCX0VYVF9QRVhfQU1BUF9TSVpFTih3aW5fbnVtKSk7Cj4gPiA+ICsKPiA+ ID4gKwljc3Jfd3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMoY3B1X2FkZHIpLAo+ID4gPiArCQkg ICBQQUJfUEVYX0FNQVBfQVhJX1dJTih3aW5fbnVtKSk7Cj4gPiA+ICsJY3NyX3dyaXRlbChwY2ll LCB1cHBlcl8zMl9iaXRzKGNwdV9hZGRyKSwKPiA+ID4gKwkJICAgUEFCX0VYVF9QRVhfQU1BUF9B WElfV0lOKHdpbl9udW0pKTsKPiA+ID4gKwo+ID4gPiArCWNzcl93cml0ZWwocGNpZSwgbG93ZXJf MzJfYml0cyhwY2lfYWRkciksCj4gPiA+ICsJCSAgIFBBQl9QRVhfQU1BUF9QRVhfV0lOX0wod2lu X251bSkpOwo+ID4gPiArCWNzcl93cml0ZWwocGNpZSwgdXBwZXJfMzJfYml0cyhwY2lfYWRkciks Cj4gPiA+ICsJCSAgIFBBQl9QRVhfQU1BUF9QRVhfV0lOX0god2luX251bSkpOwo+ID4gPiArCj4g PiA+ICsJcGNpZS0+aWJfd2luc19jb25maWd1cmVkKys7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4g Ky8qCj4gPiA+ICsgKiByb3V0aW5lIHRvIHByb2dyYW0gdGhlIG91dGJvdW5kIHdpbmRvd3MKPiA+ ID4gKyAqLwo+ID4gPiArdm9pZCBwcm9ncmFtX29iX3dpbmRvd3Moc3RydWN0IG1vYml2ZWlsX3Bj aWUgKnBjaWUsIGludCB3aW5fbnVtLCB1NjQKPiA+IGNwdV9hZGRyLAo+ID4gPiArCQkJdTY0IHBj aV9hZGRyLCB1MzIgdHlwZSwgdTY0IHNpemUpCj4gPiA+ICt7Cj4gPiA+ICsKPiA+ID4gKwl1MzIg dmFsdWU7Cj4gPiA+ICsJdTY0IHNpemU2NCA9IH4oc2l6ZSAtIDEpOwo+ID4gPiArCj4gPiA+ICsJ aWYgKHdpbl9udW0gPj0gcGNpZS0+YXBpb193aW5zKSB7Cj4gPiA+ICsJCWRldl9lcnIoJnBjaWUt PnBkZXYtPmRldiwKPiA+ID4gKwkJCSJFUlJPUjogbWF4IG91dGJvdW5kIHdpbmRvd3MgcmVhY2hl ZCAhXG4iKTsKPiA+ID4gKwkJcmV0dXJuOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCS8qCj4g PiA+ICsJICogcHJvZ3JhbSBFbmFibGUgQml0IHRvIDEsIFR5cGUgQml0IHRvICgwMCkgYmFzZSAy LCBBWEkgV2luZG93IFNpemUgQml0Cj4gPiA+ICsJICogdG8gNCBLQiBpbiBQQUJfQVhJX0FNQVBf Q1RSTCByZWdpc3Rlcgo+ID4gPiArCSAqLwo+ID4gPiArCXZhbHVlID0gY3NyX3JlYWRsKHBjaWUs IFBBQl9BWElfQU1BUF9DVFJMKHdpbl9udW0pKTsKPiA+ID4gKwl2YWx1ZSAmPSB+KFdJTl9UWVBF X01BU0sgPDwgV0lOX1RZUEVfU0hJRlQgfAo+ID4gPiArCQkgV0lOX1NJWkVfTUFTSyA8PCBXSU5f U0laRV9TSElGVCk7Cj4gPiA+ICsJdmFsdWUgfD0gMSA8PCBXSU5fRU5BQkxFX1NISUZUIHwgdHlw ZSA8PCBXSU5fVFlQRV9TSElGVCB8Cj4gPiA+ICsJCSAobG93ZXJfMzJfYml0cyhzaXplNjQpICYg V0lOX1NJWkVfTUFTSyA8PCBXSU5fU0laRV9TSElGVCk7Cj4gPiA+ICsJY3NyX3dyaXRlbChwY2ll LCB2YWx1ZSwgUEFCX0FYSV9BTUFQX0NUUkwod2luX251bSkpOwo+ID4gPiArCj4gPiA+ICsJY3Ny X3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKHNpemU2NCksCj4gPiBQQUJfRVhUX0FYSV9BTUFQ X1NJWkUod2luX251bSkpOwo+ID4gPiArCj4gPiA+ICsJLyoKPiA+ID4gKwkgKiBwcm9ncmFtIEFY SSB3aW5kb3cgYmFzZSB3aXRoIGFwcHJvcHJpYXRlIHZhbHVlIGluCj4gPiA+ICsJICogUEFCX0FY SV9BTUFQX0FYSV9XSU4wIHJlZ2lzdGVyCj4gPiA+ICsJICovCj4gPiA+ICsJY3NyX3dyaXRlbChw Y2llLCBsb3dlcl8zMl9iaXRzKGNwdV9hZGRyKSAmCj4gPiAofkFYSV9XSU5ET1dfQUxJR05fTUFT SyksCj4gPiA+ICsJCSAgIFBBQl9BWElfQU1BUF9BWElfV0lOKHdpbl9udW0pKTsKPiA+ID4gKwlj c3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMoY3B1X2FkZHIpLAo+ID4gPiArCQkgICBQQUJf RVhUX0FYSV9BTUFQX0FYSV9XSU4od2luX251bSkpOwo+ID4gPiArCj4gPiA+ICsJY3NyX3dyaXRl bChwY2llLCBsb3dlcl8zMl9iaXRzKHBjaV9hZGRyKSwKPiA+ID4gKwkJICAgUEFCX0FYSV9BTUFQ X1BFWF9XSU5fTCh3aW5fbnVtKSk7Cj4gPiA+ICsJY3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9i aXRzKHBjaV9hZGRyKSwKPiA+ID4gKwkJICAgUEFCX0FYSV9BTUFQX1BFWF9XSU5fSCh3aW5fbnVt KSk7Cj4gPiA+ICsKPiA+ID4gKwlwY2llLT5vYl93aW5zX2NvbmZpZ3VyZWQrKzsKPiA+ID4gK30K PiA+ID4gKwo+ID4gPiAraW50IG1vYml2ZWlsX2JyaW5ndXBfbGluayhzdHJ1Y3QgbW9iaXZlaWxf cGNpZSAqcGNpZSkKPiA+ID4gK3sKPiA+ID4gKwlpbnQgcmV0cmllczsKPiA+ID4gKwo+ID4gPiAr CS8qIGNoZWNrIGlmIHRoZSBsaW5rIGlzIHVwIG9yIG5vdCAqLwo+ID4gPiArCWZvciAocmV0cmll cyA9IDA7IHJldHJpZXMgPCBMSU5LX1dBSVRfTUFYX1JFVFJJRVM7IHJldHJpZXMrKykgewo+ID4g PiArCQlpZiAobW9iaXZlaWxfcGNpZV9saW5rX3VwKHBjaWUpKQo+ID4gPiArCQkJcmV0dXJuIDA7 Cj4gPiA+ICsKPiA+ID4gKwkJdXNsZWVwX3JhbmdlKExJTktfV0FJVF9NSU4sIExJTktfV0FJVF9N QVgpOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCWRldl9lcnIoJnBjaWUtPnBkZXYtPmRldiwg ImxpbmsgbmV2ZXIgY2FtZSB1cFxuIik7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gLUVUSU1FRE9V VDsKPiA+ID4gK30KPiA+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9i aXZlaWwvcGNpZS1tb2JpdmVpbC5oCj4gPiBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZl aWwvcGNpZS1tb2JpdmVpbC5oCj4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiA+IGluZGV4 IDAwMDAwMDAwMDAwMC4uZWI0Y2I2MTI5MWE4Cj4gPiA+IC0tLSAvZGV2L251bGwKPiA+ID4gKysr IGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmgKPiA+ID4g QEAgLTAsMCArMSwxODcgQEAKPiA+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wICovCj4gPiA+ICsvKgo+ID4gPiArICogUENJZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGZv ciBNb2JpdmVpbCBQQ0llIEhvc3QgY29udHJvbGxlcgo+ID4gPiArICoKPiA+ID4gKyAqIENvcHly aWdodCAoYykgMjAxOCBNb2JpdmVpbCBJbmMuCj4gPiA+ICsgKiBBdXRob3I6IFN1YnJhaG1hbnlh IExpbmdhcHBhIDxsLnN1YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmluPgo+ID4gPiArICogUmVmYWN0 b3I6IFpoaXFpYW5nIEhvdSA8WmhpcWlhbmcuSG91QG54cC5jb20+Cj4gPiA+ICsgKi8KPiA+ID4g Kwo+ID4gPiArI2lmbmRlZiBfUENJRV9NT0JJVkVJTF9ICj4gPiA+ICsjZGVmaW5lIF9QQ0lFX01P QklWRUlMX0gKPiA+ID4gKwo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgo+ID4gPiArI2lu Y2x1ZGUgPGxpbnV4L2lycS5oPgo+ID4gPiArI2luY2x1ZGUgPGxpbnV4L21zaS5oPgo+ID4gPiAr I2luY2x1ZGUgIi4uLy4uL3BjaS5oIgo+ID4gPiArCj4gPiA+ICsvKiByZWdpc3RlciBvZmZzZXRz IGFuZCBiaXQgcG9zaXRpb25zICovCj4gPiA+ICsKPiA+ID4gKy8qCj4gPiA+ICsgKiB0cmFuc2xh dGlvbiB0YWJsZXMgYXJlIGdyb3VwZWQgaW50byB3aW5kb3dzLCBlYWNoIHdpbmRvdyByZWdpc3Rl cnMgYXJlCj4gPiA+ICsgKiBncm91cGVkIGludG8gYmxvY2tzIG9mIDQgb3IgMTYgcmVnaXN0ZXJz IGVhY2gKPiA+ID4gKyAqLwo+ID4gPiArI2RlZmluZSBQQUJfUkVHX0JMT0NLX1NJWkUJCTE2Cj4g PiA+ICsjZGVmaW5lIFBBQl9FWFRfUkVHX0JMT0NLX1NJWkUJCTQKPiA+ID4gKwo+ID4gPiArI2Rl ZmluZSBQQUJfUkVHX0FERFIob2Zmc2V0LCB3aW4pCVwKPiA+ID4gKwkob2Zmc2V0ICsgKHdpbiAq IFBBQl9SRUdfQkxPQ0tfU0laRSkpCj4gPiA+ICsjZGVmaW5lIFBBQl9FWFRfUkVHX0FERFIob2Zm c2V0LCB3aW4pCVwKPiA+ID4gKwkob2Zmc2V0ICsgKHdpbiAqIFBBQl9FWFRfUkVHX0JMT0NLX1NJ WkUpKQo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIExUU1NNX1NUQVRVUwkJCTB4MDQwNAo+ID4gPiAr I2RlZmluZSAgTFRTU01fU1RBVFVTX0wwX01BU0sJCTB4M2YKPiA+ID4gKyNkZWZpbmUgIExUU1NN X1NUQVRVU19MMAkJMHgyZAo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIFBBQl9DVFJMCQkJMHgwODA4 Cj4gPiA+ICsjZGVmaW5lICBBTUJBX1BJT19FTkFCTEVfU0hJRlQJCTAKPiA+ID4gKyNkZWZpbmUg IFBFWF9QSU9fRU5BQkxFX1NISUZUCQkxCj4gPiA+ICsjZGVmaW5lICBQQUdFX1NFTF9TSElGVAkJ CTEzCj4gPiA+ICsjZGVmaW5lICBQQUdFX1NFTF9NQVNLCQkJMHgzZgo+ID4gPiArI2RlZmluZSAg UEFHRV9MT19NQVNLCQkJMHgzZmYKPiA+ID4gKyNkZWZpbmUgIFBBR0VfU0VMX09GRlNFVF9TSElG VAkJMTAKPiA+ID4gKwo+ID4gPiArI2RlZmluZSBQQUJfQVhJX1BJT19DVFJMCQkweDA4NDAKPiA+ ID4gKyNkZWZpbmUgIEFQSU9fRU5fTUFTSwkJCTB4Zgo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIFBB Ql9QRVhfUElPX0NUUkwJCTB4MDhjMAo+ID4gPiArI2RlZmluZSAgUElPX0VOQUJMRV9TSElGVAkJ MAo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIFBBQl9JTlRQX0FNQkFfTUlTQ19FTkIJCTB4MGIwYwo+ ID4gPiArI2RlZmluZSBQQUJfSU5UUF9BTUJBX01JU0NfU1RBVAkJMHgwYjFjCj4gPiA+ICsjZGVm aW5lICBQQUJfSU5UUF9JTlRYX01BU0sJCTB4MDFlMAo+ID4gPiArI2RlZmluZSAgUEFCX0lOVFBf TVNJX01BU0sJCTB4OAo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIFBBQl9BWElfQU1BUF9DVFJMKHdp bikJCVBBQl9SRUdfQUREUigweDBiYTAsIHdpbikKPiA+ID4gKyNkZWZpbmUgIFdJTl9FTkFCTEVf U0hJRlQJCTAKPiA+ID4gKyNkZWZpbmUgIFdJTl9UWVBFX1NISUZUCQkJMQo+ID4gPiArI2RlZmlu ZSAgV0lOX1RZUEVfTUFTSwkJCTB4Mwo+ID4gPiArI2RlZmluZSAgV0lOX1NJWkVfU0hJRlQJCQkx MAo+ID4gPiArI2RlZmluZSAgV0lOX1NJWkVfTUFTSwkJCTB4M2ZmZmZmCj4gPiA+ICsKPiA+ID4g KyNkZWZpbmUgUEFCX0VYVF9BWElfQU1BUF9TSVpFKHdpbikJUEFCX0VYVF9SRUdfQUREUigweGJh ZjAsCj4gPiB3aW4pCj4gPiA+ICsKPiA+ID4gKyNkZWZpbmUgUEFCX0VYVF9BWElfQU1BUF9BWElf V0lOKHdpbikKPiA+IAlQQUJfRVhUX1JFR19BRERSKDB4ODBhMCwgd2luKQo+ID4gPiArI2RlZmlu ZSBQQUJfQVhJX0FNQVBfQVhJX1dJTih3aW4pCVBBQl9SRUdfQUREUigweDBiYTQsIHdpbikKPiA+ ID4gKyNkZWZpbmUgIEFYSV9XSU5ET1dfQUxJR05fTUFTSwkJMwo+ID4gPiArCj4gPiA+ICsjZGVm aW5lIFBBQl9BWElfQU1BUF9QRVhfV0lOX0wod2luKQlQQUJfUkVHX0FERFIoMHgwYmE4LAo+ID4g d2luKQo+ID4gPiArI2RlZmluZSAgUEFCX0JVU19TSElGVAkJCTI0Cj4gPiA+ICsjZGVmaW5lICBQ QUJfREVWSUNFX1NISUZUCQkxOQo+ID4gPiArI2RlZmluZSAgUEFCX0ZVTkNUSU9OX1NISUZUCQkx Ngo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIFBBQl9BWElfQU1BUF9QRVhfV0lOX0god2luKQlQQUJf UkVHX0FERFIoMHgwYmFjLAo+ID4gd2luKQo+ID4gPiArI2RlZmluZSBQQUJfSU5UUF9BWElfUElP X0NMQVNTCQkweDQ3NAo+ID4gPiArCj4gPiA+ICsjZGVmaW5lIFBBQl9QRVhfQU1BUF9DVFJMKHdp bikJCVBBQl9SRUdfQUREUigweDRiYTAsCj4gPiB3aW4pCj4gPiA+ICsjZGVmaW5lICBBTUFQX0NU UkxfRU5fU0hJRlQJCTAKPiA+ID4gKyNkZWZpbmUgIEFNQVBfQ1RSTF9UWVBFX1NISUZUCQkxCj4g PiA+ICsjZGVmaW5lICBBTUFQX0NUUkxfVFlQRV9NQVNLCQkzCj4gPiA+ICsKPiA+ID4gKyNkZWZp bmUgUEFCX0VYVF9QRVhfQU1BUF9TSVpFTih3aW4pCVBBQl9FWFRfUkVHX0FERFIoMHhiZWYwLAo+ ID4gd2luKQo+ID4gPiArI2RlZmluZSBQQUJfRVhUX1BFWF9BTUFQX0FYSV9XSU4od2luKQo+ID4g CVBBQl9FWFRfUkVHX0FERFIoMHhiNGEwLCB3aW4pCj4gPiA+ICsjZGVmaW5lIFBBQl9QRVhfQU1B UF9BWElfV0lOKHdpbikJUEFCX1JFR19BRERSKDB4NGJhNCwgd2luKQo+ID4gPiArI2RlZmluZSBQ QUJfUEVYX0FNQVBfUEVYX1dJTl9MKHdpbikJUEFCX1JFR19BRERSKDB4NGJhOCwKPiA+IHdpbikK PiA+ID4gKyNkZWZpbmUgUEFCX1BFWF9BTUFQX1BFWF9XSU5fSCh3aW4pCVBBQl9SRUdfQUREUigw eDRiYWMsCj4gPiB3aW4pCj4gPiA+ICsKPiA+ID4gKy8qIHN0YXJ0aW5nIG9mZnNldCBvZiBJTlRY IGJpdHMgaW4gc3RhdHVzIHJlZ2lzdGVyICovCj4gPiA+ICsjZGVmaW5lIFBBQl9JTlRYX1NUQVJU CQkJNQo+ID4gPiArCj4gPiA+ICsvKiBzdXBwb3J0ZWQgbnVtYmVyIG9mIE1TSSBpbnRlcnJ1cHRz ICovCj4gPiA+ICsjZGVmaW5lIFBDSV9OVU1fTVNJCQkJMTYKPiA+ID4gKwo+ID4gPiArLyogTVNJ IHJlZ2lzdGVycyAqLwo+ID4gPiArI2RlZmluZSBNU0lfQkFTRV9MT19PRkZTRVQJCTB4MDQKPiA+ ID4gKyNkZWZpbmUgTVNJX0JBU0VfSElfT0ZGU0VUCQkweDA4Cj4gPiA+ICsjZGVmaW5lIE1TSV9T SVpFX09GRlNFVAkJCTB4MGMKPiA+ID4gKyNkZWZpbmUgTVNJX0VOQUJMRV9PRkZTRVQJCTB4MTQK PiA+ID4gKyNkZWZpbmUgTVNJX1NUQVRVU19PRkZTRVQJCTB4MTgKPiA+ID4gKyNkZWZpbmUgTVNJ X0RBVEFfT0ZGU0VUCQkJMHgyMAo+ID4gPiArI2RlZmluZSBNU0lfQUREUl9MX09GRlNFVAkJMHgy NAo+ID4gPiArI2RlZmluZSBNU0lfQUREUl9IX09GRlNFVAkJMHgyOAo+ID4gPiArCj4gPiA+ICsv KiBvdXRib3VuZCBhbmQgaW5ib3VuZCB3aW5kb3cgZGVmaW5pdGlvbnMgKi8KPiA+ID4gKyNkZWZp bmUgV0lOX05VTV8wCQkJMAo+ID4gPiArI2RlZmluZSBXSU5fTlVNXzEJCQkxCj4gPiA+ICsjZGVm aW5lIENGR19XSU5ET1dfVFlQRQkJCTAKPiA+ID4gKyNkZWZpbmUgSU9fV0lORE9XX1RZUEUJCQkx Cj4gPiA+ICsjZGVmaW5lIE1FTV9XSU5ET1dfVFlQRQkJCTIKPiA+ID4gKyNkZWZpbmUgSUJfV0lO X1NJWkUJCQkoKHU2NCkyNTYgKiAxMDI0ICogMTAyNCAqIDEwMjQpCj4gPiA+ICsjZGVmaW5lIE1B WF9QSU9fV0lORE9XUwkJCTgKPiA+ID4gKwo+ID4gPiArLyogUGFyYW1ldGVycyBmb3IgdGhlIHdh aXRpbmcgZm9yIGxpbmsgdXAgcm91dGluZSAqLwo+ID4gPiArI2RlZmluZSBMSU5LX1dBSVRfTUFY X1JFVFJJRVMJCTEwCj4gPiA+ICsjZGVmaW5lIExJTktfV0FJVF9NSU4JCQk5MDAwMAo+ID4gPiAr I2RlZmluZSBMSU5LX1dBSVRfTUFYCQkJMTAwMDAwCj4gPiA+ICsKPiA+ID4gKyNkZWZpbmUgUEFH RURfQUREUl9CTkRSWQkJMHhjMDAKPiA+ID4gKyNkZWZpbmUgT0ZGU0VUX1RPX1BBR0VfQUREUihv ZmYpCVwKPiA+ID4gKwkoKG9mZiAmIFBBR0VfTE9fTUFTSykgfCBQQUdFRF9BRERSX0JORFJZKQo+ ID4gPiArI2RlZmluZSBPRkZTRVRfVE9fUEFHRV9JRFgob2ZmKQkJXAo+ID4gPiArCSgob2ZmID4+ IFBBR0VfU0VMX09GRlNFVF9TSElGVCkgJiBQQUdFX1NFTF9NQVNLKQo+ID4gPiArCj4gPiA+ICtz dHJ1Y3QgbW9iaXZlaWxfcGNpZTsKPiA+ID4gKwo+ID4gPiArc3RydWN0IG1vYml2ZWlsX21zaSB7 CQkJLyogTVNJIGluZm9ybWF0aW9uICovCj4gPiA+ICsJc3RydWN0IG11dGV4IGxvY2s7CQkvKiBw cm90ZWN0IGJpdG1hcCB2YXJpYWJsZSAqLwo+ID4gPiArCXN0cnVjdCBpcnFfZG9tYWluICptc2lf ZG9tYWluOwo+ID4gPiArCXN0cnVjdCBpcnFfZG9tYWluICpkZXZfZG9tYWluOwo+ID4gPiArCXBo eXNfYWRkcl90IG1zaV9wYWdlc19waHlzOwo+ID4gPiArCWludCBudW1fb2ZfdmVjdG9yczsKPiA+ ID4gKwlERUNMQVJFX0JJVE1BUChtc2lfaXJxX2luX3VzZSwgUENJX05VTV9NU0kpOwo+ID4gPiAr fTsKPiA+ID4gKwo+ID4gPiArc3RydWN0IG1vYml2ZWlsX3JwX29wcyB7Cj4gPiA+ICsJaW50ICgq aW50ZXJydXB0X2luaXQpKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKTsKPiA+ID4gK307Cj4g PiA+ICsKPiA+ID4gK3N0cnVjdCByb290X3BvcnQgewo+ID4gPiArCXU4IHJvb3RfYnVzX25yOwo+ ID4gPiArCXZvaWQgX19pb21lbSAqY29uZmlnX2F4aV9zbGF2ZV9iYXNlOwkvKiBlbmRwb2ludCBj b25maWcgYmFzZSAqLwo+ID4gPiArCXN0cnVjdCByZXNvdXJjZSAqb2JfaW9fcmVzOwo+ID4gPiAr CXN0cnVjdCBtb2JpdmVpbF9ycF9vcHMgKm9wczsKPiA+ID4gKwlpbnQgaXJxOwo+ID4gPiArCXJh d19zcGlubG9ja190IGludHhfbWFza19sb2NrOwo+ID4gPiArCXN0cnVjdCBpcnFfZG9tYWluICpp bnR4X2RvbWFpbjsKPiA+ID4gKwlzdHJ1Y3QgbW9iaXZlaWxfbXNpIG1zaTsKPiA+ID4gK307Cj4g PiA+ICsKPiA+ID4gK3N0cnVjdCBtb2JpdmVpbF9wYWJfb3BzIHsKPiA+ID4gKwlpbnQgKCpsaW5r X3VwKShzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSk7Cj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ ICtzdHJ1Y3QgbW9iaXZlaWxfcGNpZSB7Cj4gPiA+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldjsKPiA+ID4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHJlc291cmNlczsKPiA+ID4gKwl2b2lkIF9f aW9tZW0gKmNzcl9heGlfc2xhdmVfYmFzZTsJLyogUEFCIHJlZ2lzdGVycyBiYXNlICovCj4gPiA+ ICsJcGh5c19hZGRyX3QgcGNpZV9yZWdfYmFzZTsJLyogUGh5c2ljYWwgUENJZSBDb250cm9sbGVy IEJhc2UgKi8KPiA+ID4gKwl2b2lkIF9faW9tZW0gKmFwYl9jc3JfYmFzZTsJLyogTVNJIHJlZ2lz dGVyIGJhc2UgKi8KPiA+ID4gKwl1MzIgYXBpb193aW5zOwo+ID4gPiArCXUzMiBwcGlvX3dpbnM7 Cj4gPiA+ICsJdTMyIG9iX3dpbnNfY29uZmlndXJlZDsJCS8qIGNvbmZpZ3VyZWQgb3V0Ym91bmQg d2luZG93cyAqLwo+ID4gPiArCXUzMiBpYl93aW5zX2NvbmZpZ3VyZWQ7CQkvKiBjb25maWd1cmVk IGluYm91bmQgd2luZG93cyAqLwo+ID4gPiArCWNvbnN0IHN0cnVjdCBtb2JpdmVpbF9wYWJfb3Bz ICpvcHM7Cj4gPiA+ICsJc3RydWN0IHJvb3RfcG9ydCBycDsKPiA+ID4gK307Cj4gPiA+ICsKPiA+ ID4gK2ludCBtb2JpdmVpbF9wY2llX2hvc3RfcHJvYmUoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBj aWUpOwo+ID4gPiArYm9vbCBtb2JpdmVpbF9wY2llX2xpbmtfdXAoc3RydWN0IG1vYml2ZWlsX3Bj aWUgKnBjaWUpOwo+ID4gPiAraW50IG1vYml2ZWlsX2JyaW5ndXBfbGluayhzdHJ1Y3QgbW9iaXZl aWxfcGNpZSAqcGNpZSk7Cj4gPiA+ICt2b2lkIHByb2dyYW1fb2Jfd2luZG93cyhzdHJ1Y3QgbW9i aXZlaWxfcGNpZSAqcGNpZSwgaW50IHdpbl9udW0sIHU2NAo+ID4gY3B1X2FkZHIsCj4gPiA+ICsJ CQl1NjQgcGNpX2FkZHIsIHUzMiB0eXBlLCB1NjQgc2l6ZSk7Cj4gPiA+ICt2b2lkIHByb2dyYW1f aWJfd2luZG93cyhzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50IHdpbl9udW0sIHU2NAo+ ID4gY3B1X2FkZHIsCj4gPiA+ICsJCQl1NjQgcGNpX2FkZHIsIHUzMiB0eXBlLCB1NjQgc2l6ZSk7 Cj4gPiA+ICt1MzIgY3NyX3JlYWQoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiBvZmYs IHNpemVfdCBzaXplKTsKPiA+ID4gK3ZvaWQgY3NyX3dyaXRlKHN0cnVjdCBtb2JpdmVpbF9wY2ll ICpwY2llLCB1MzIgdmFsLCB1MzIgb2ZmLCBzaXplX3Qgc2l6ZSk7Cj4gPiA+ICsKPiA+ID4gK3N0 YXRpYyBpbmxpbmUgdTMyIGNzcl9yZWFkbChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMy IG9mZikKPiA+ID4gK3sKPiA+ID4gKwlyZXR1cm4gY3NyX3JlYWQocGNpZSwgb2ZmLCAweDQpOwo+ ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQgY3NyX3dyaXRlbChzdHJ1 Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIHZhbCwgdTMyIG9mZikKPiA+ID4gK3sKPiA+ID4g Kwljc3Jfd3JpdGUocGNpZSwgdmFsLCBvZmYsIDB4NCk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4g KyNlbmRpZiAvKiBfUENJRV9NT0JJVkVJTF9IICovCj4gPiA+IC0tCj4gPiA+IDIuMTcuMQo+ID4g Pgo+IAo+IFRoYW5rcywKPiBaaGlxaWFuZwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJt LWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=