From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 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 9855AC4742C for ; Fri, 30 Oct 2020 03:23:28 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 131A920723 for ; Fri, 30 Oct 2020 03:23:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="z/1L1gri" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 131A920723 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=linux.intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:Reply-To:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date: Message-ID:From:References:To:Subject:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=46Cyf+6k3ERVrbSbRby8XLgSntkhPHiLM5ZDYMo2m+g=; b=z/1L1griZIBkv4 2vx8RX6urex57Df0eYxNKCUzI4qCtqPBLSpjjDIelgW251xC71fqsgNe7i+fwidC3hI6T1xCofz9Z qF67gRDxYPOVwC0sDmEWcpptno0rLpEULkhLYT1XZcvkvdlg5NQUnAAR/zqGnWOR+23OMWUdNDcQ/ CfxYFsdDJq9sN8XbYQEwj6cnsWbesItQ1K2e3L7gRCHblRDgXs98I79ADa8+5wu4FRNY9Etg96YiG YaOvqtShMBKvqMen2Mmu2lwB0luEUY9r0rTigHdoJyOtmbL90LHusENt7ZkTrgIWDKf3jqSnqYGoR Y8xWKD1SWynOkVBUYo9g==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYKzS-0004QU-Jr; Fri, 30 Oct 2020 03:22:10 +0000 Received: from mga03.intel.com ([134.134.136.65]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kYKzP-0004GM-Ij for linux-mtd@lists.infradead.org; Fri, 30 Oct 2020 03:22:09 +0000 IronPort-SDR: YCVkPZOGuWaLy72ITmW+Pvn4Hn6t0Yi9KyYafdrBPZEEeKxtfspxGomi9t0Nzz0x3Mt2jb7KqI 1vD+SqpHiKyA== X-IronPort-AV: E=McAfee;i="6000,8403,9789"; a="168649179" X-IronPort-AV: E=Sophos;i="5.77,432,1596524400"; d="scan'208";a="168649179" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2020 20:20:03 -0700 IronPort-SDR: nbApaDdm+HZ74Ch0LylF8gTm+3YVjG64eszfchn2EC/C9cAJwyd4oULVcSfYt7cikdrhVm2PUh Xk+F1EYqAtYA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,432,1596524400"; d="scan'208";a="362322038" Received: from linux.intel.com ([10.54.29.200]) by orsmga007.jf.intel.com with ESMTP; 29 Oct 2020 20:20:03 -0700 Received: from [10.255.142.248] (vramuthx-MOBL1.gar.corp.intel.com [10.255.142.248]) by linux.intel.com (Postfix) with ESMTP id 025855806E9; Thu, 29 Oct 2020 20:19:59 -0700 (PDT) Subject: Re: [RESENDPATCH v15 2/2] mtd: rawnand: Add NAND controller support on Intel LGM SoC To: Miquel Raynal References: <20201026073021.33327-1-vadivel.muruganx.ramuthevar@linux.intel.com> <20201026073021.33327-3-vadivel.muruganx.ramuthevar@linux.intel.com> <20201028112037.326c06e2@xps13> From: "Ramuthevar, Vadivel MuruganX" Message-ID: Date: Fri, 30 Oct 2020 11:19:58 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.12.1 MIME-Version: 1.0 In-Reply-To: <20201028112037.326c06e2@xps13> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201029_232207_867363_86AEF0F7 X-CRM114-Status: GOOD ( 32.02 ) X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: vadivel.muruganx.ramuthevar@linux.intel.com Cc: cheol.yong.kim@intel.com, devicetree@vger.kernel.org, vigneshr@ti.com, tudor.ambarus@microchip.com, richard@nod.at, simon.k.r.goldschmidt@gmail.com, linux-kernel@vger.kernel.org, dinguyen@kernel.org, robh+dt@kernel.org, linux-mtd@lists.infradead.org, boris.brezillon@collabora.com, qi-ming.wu@intel.com Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-mtd" Errors-To: linux-mtd-bounces+linux-mtd=archiver.kernel.org@lists.infradead.org SGkgTWlxdWVsLAoKVGhhbmsgeW91IHZlcnkgbXVjaCBmb3IgdGhlIHJldmlldyBjb21tZW50cy4u LgoKT24gMjgvMTAvMjAyMCA2OjIwIHBtLCBNaXF1ZWwgUmF5bmFsIHdyb3RlOgo+IEhlbGxvLAo+ IAo+ICJSYW11dGhldmFyLFZhZGl2ZWwgTXVydWdhblgiCj4gPHZhZGl2ZWwubXVydWdhbngucmFt dXRoZXZhckBsaW51eC5pbnRlbC5jb20+IHdyb3RlIG9uIE1vbiwgMjYgT2N0IDIwMjAKPiAxNToz MDoyMSArMDgwMDoKPiAKPj4gRnJvbTogUmFtdXRoZXZhciBWYWRpdmVsIE11cnVnYW4gPHZhZGl2 ZWwubXVydWdhbngucmFtdXRoZXZhckBsaW51eC5pbnRlbC5jb20+Cj4+Cj4+IFRoaXMgcGF0Y2gg YWRkcyB0aGUgbmV3IElQIG9mIE5hbmQgRmxhc2ggQ29udHJvbGxlcihORkMpIHN1cHBvcnQKPj4g b24gSW50ZWwncyBMaWdodG5pbmcgTW91bnRhaW4oTEdNKSBTb0MuCj4+Cj4+IERNQSBpcyB1c2Vk IGZvciBidXJzdCBkYXRhIHRyYW5zZmVyIG9wZXJhdGlvbiwgYWxzbyBETUEgSFcgc3VwcG9ydHMK Pj4gYWxpZ25lZCAzMmJpdCBtZW1vcnkgYWRkcmVzcyBhbmQgYWxpZ25lZCBkYXRhIGFjY2VzcyBi eSBkZWZhdWx0Lgo+PiBETUEgYnVyc3Qgb2YgOCBzdXBwb3J0ZWQuIERhdGEgcmVnaXN0ZXIgdXNl ZCB0byBzdXBwb3J0IHRoZSByZWFkL3dyaXRlCj4+IG9wZXJhdGlvbiBmcm9tL3RvIGRldmljZS4K Pj4KPj4gTkFORCBjb250cm9sbGVyIGRyaXZlciBpbXBsZW1lbnRzIC0+ZXhlY19vcCgpIHRvIHJl cGxhY2UgbGVnYWN5IGhvb2tzLAo+PiB0aGVzZSBzcGVjaWZpYyBjYWxsLWJhY2sgbWV0aG9kIHRv IGV4ZWN1dGUgTkFORCBvcGVyYXRpb25zLgo+IAo+IE5vIG5lZWQgdG8gbWVudGlvbiBsZWdhY3kg aG9va3MgaGVyZSBhcyB0aGV5IGFyZSBub3QgcGFydCBvZiB5b3VyCj4gZHJpdmVyIGF0IGFsbC4K T2ssIE5vdGVkLgo+IAo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBSYW11dGhldmFyIFZhZGl2ZWwgTXVy dWdhbiA8dmFkaXZlbC5tdXJ1Z2FueC5yYW11dGhldmFyQGxpbnV4LmludGVsLmNvbT4KPj4gLS0t Cj4+ICAgZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZyAgICAgICAgICAgICAgICAgfCAgIDgg Kwo+PiAgIGRyaXZlcnMvbXRkL25hbmQvcmF3L01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAx ICsKPj4gICBkcml2ZXJzL210ZC9uYW5kL3Jhdy9pbnRlbC1uYW5kLWNvbnRyb2xsZXIuYyB8IDcz NCArKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gICAzIGZpbGVzIGNoYW5nZWQsIDc0MyBp bnNlcnRpb25zKCspCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbXRkL25hbmQvcmF3 L2ludGVsLW5hbmQtY29udHJvbGxlci5jCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9u YW5kL3Jhdy9LY29uZmlnIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvS2NvbmZpZwo+PiBpbmRleCA2 YzQ2ZjI1YjU3ZTIuLjFiMzY5MGZkMDhkYyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9tdGQvbmFu ZC9yYXcvS2NvbmZpZwo+PiArKysgYi9kcml2ZXJzL210ZC9uYW5kL3Jhdy9LY29uZmlnCj4+IEBA IC00NjIsNiArNDYyLDE0IEBAIGNvbmZpZyBNVERfTkFORF9BUkFTQU4KPj4gICAJICBFbmFibGVz IHRoZSBkcml2ZXIgZm9yIHRoZSBBcmFzYW4gTkFORCBmbGFzaCBjb250cm9sbGVyIG9uCj4+ICAg CSAgWnlucSBVbHRyYXNjYWxlKyBNUFNvQy4KPj4gICAKPj4gK2NvbmZpZyBNVERfTkFORF9JTlRF TF9MR00KPj4gKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgTkFORCBjb250cm9sbGVyIG9uIEludGVs IExHTSBTb0MiCj4+ICsJZGVwZW5kcyBvbiBPRiB8fCBDT01QSUxFX1RFU1QKPj4gKwlkZXBlbmRz IG9uIEhBU19JT01FTQo+PiArCWhlbHAKPj4gKwkgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTkFORCBG bGFzaCBjaGlwcyBvbiBJbnRlbCdzIExHTSBTb0MuCj4+ICsJICBOQU5EIGZsYXNoIGNvbnRyb2xs ZXIgaW50ZXJmYWNlZCB0aHJvdWdoIHRoZSBFeHRlcm5hbCBCdXMgVW5pdC4KPj4gKwo+PiAgIGNv bW1lbnQgIk1pc2MiCj4+ICAgCj4+ICAgY29uZmlnIE1URF9TTV9DT01NT04KPj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcv TWFrZWZpbGUKPj4gaW5kZXggMjkzMGY1YjkwMTVkLi45ZTYwMzczNjNmYzYgMTAwNjQ0Cj4+IC0t LSBhL2RyaXZlcnMvbXRkL25hbmQvcmF3L01ha2VmaWxlCj4+ICsrKyBiL2RyaXZlcnMvbXRkL25h bmQvcmF3L01ha2VmaWxlCj4+IEBAIC01OCw2ICs1OCw3IEBAIG9iai0kKENPTkZJR19NVERfTkFO RF9TVE0zMl9GTUMyKQkrPSBzdG0zMl9mbWMyX25hbmQubwo+PiAgIG9iai0kKENPTkZJR19NVERf TkFORF9NRVNPTikJCSs9IG1lc29uX25hbmQubwo+PiAgIG9iai0kKENPTkZJR19NVERfTkFORF9D QURFTkNFKQkJKz0gY2FkZW5jZS1uYW5kLWNvbnRyb2xsZXIubwo+PiAgIG9iai0kKENPTkZJR19N VERfTkFORF9BUkFTQU4pCQkrPSBhcmFzYW4tbmFuZC1jb250cm9sbGVyLm8KPj4gK29iai0kKENP TkZJR19NVERfTkFORF9JTlRFTF9MR00pCSs9IGludGVsLW5hbmQtY29udHJvbGxlci5vCj4+ICAg Cj4+ICAgbmFuZC1vYmpzIDo9IG5hbmRfYmFzZS5vIG5hbmRfbGVnYWN5Lm8gbmFuZF9iYnQubyBu YW5kX3RpbWluZ3MubyBuYW5kX2lkcy5vCj4+ICAgbmFuZC1vYmpzICs9IG5hbmRfb25maS5vCj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3Jhdy9pbnRlbC1uYW5kLWNvbnRyb2xsZXIu YyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L2ludGVsLW5hbmQtY29udHJvbGxlci5jCj4+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uMGFlZmM0NDFjN2Q1Cj4+IC0t LSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvaW50ZWwtbmFuZC1jb250 cm9sbGVyLmMKPj4gQEAgLTAsMCArMSw3MzQgQEAKPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wKwo+PiArLyogQ29weXJpZ2h0IChjKSAyMDIwIEludGVsIENvcnBvcmF0aW9u LiAqLwo+PiArCj4+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgv Y29tcGxldGlvbi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgo+PiArI2luY2x1 ZGUgPGxpbnV4L2RtYS1kaXJlY3Rpb24uaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGlu Zy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2luaXQu aD4KPj4gKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPj4gKwo+PiArI2luY2x1ZGUgPGxp bnV4L210ZC9tdGQuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tdGQvcmF3bmFuZC5oPgo+PiArI2lu Y2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5k Lmg+Cj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPj4gKyNpbmNs dWRlIDxsaW51eC9zY2hlZC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPj4gKyNpbmNs dWRlIDxsaW51eC90eXBlcy5oPgo+PiArI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KPj4gKwo+ PiArI2RlZmluZSBFQlVfQ0xDCQkJMHgwMDAKPj4gKyNkZWZpbmUgRUJVX0NMQ19SU1QJCTB4MDAw MDAwMDB1Cj4+ICsKPj4gKyNkZWZpbmUgRUJVX0FERFJfU0VMKG4pCQkoMHgwMjAgKyAobikgKiA0 KQo+PiArLyogNSBiaXRzIDI2OjIyIGluY2x1ZGVkIGZvciBjb21wYXJpc29uIGluIHRoZSBBRERS X1NFTHggKi8KPj4gKyNkZWZpbmUgRUJVX0FERFJfTUFTSyh4KQkoKHgpIDw8IDQpCj4+ICsjZGVm aW5lIEVCVV9BRERSX1NFTF9SRUdFTgkweDEKPj4gKwo+PiArI2RlZmluZSBFQlVfQlVTQ09OKG4p CQkoMHgwNjAgKyAobikgKiA0KQo+PiArI2RlZmluZSBFQlVfQlVTQ09OX0NNVUxUX1Y0CTB4MQo+ PiArI2RlZmluZSBFQlVfQlVTQ09OX1JFQ09WQyhuKQkoKG4pIDw8IDIpCj4+ICsjZGVmaW5lIEVC VV9CVVNDT05fSE9MREMobikJKChuKSA8PCA0KQo+PiArI2RlZmluZSBFQlVfQlVTQ09OX1dBSVRS REMobikJKChuKSA8PCA2KQo+PiArI2RlZmluZSBFQlVfQlVTQ09OX1dBSVRXUkMobikJKChuKSA8 PCA4KQo+PiArI2RlZmluZSBFQlVfQlVTQ09OX0JDR0VOX0NTCTB4MAo+PiArI2RlZmluZSBFQlVf QlVTQ09OX1NFVFVQX0VOCUJJVCgyMikKPj4gKyNkZWZpbmUgRUJVX0JVU0NPTl9BTEVDCQkweEMw MDAKPj4gKwo+PiArI2RlZmluZSBFQlVfQ09OCQkJMHgwQjAKPj4gKyNkZWZpbmUgRUJVX0NPTl9O QU5ETV9FTglCSVQoMCkKPj4gKyNkZWZpbmUgRUJVX0NPTl9OQU5ETV9ESVMJMHgwCj4+ICsjZGVm aW5lIEVCVV9DT05fQ1NNVVhfRV9FTglCSVQoMSkKPj4gKyNkZWZpbmUgRUJVX0NPTl9BTEVfUF9M T1cJQklUKDIpCj4+ICsjZGVmaW5lIEVCVV9DT05fQ0xFX1BfTE9XCUJJVCgzKQo+PiArI2RlZmlu ZSBFQlVfQ09OX0NTX1BfTE9XCUJJVCg0KQo+PiArI2RlZmluZSBFQlVfQ09OX1NFX1BfTE9XCUJJ VCg1KQo+PiArI2RlZmluZSBFQlVfQ09OX1dQX1BfTE9XCUJJVCg2KQo+PiArI2RlZmluZSBFQlVf Q09OX1BSRV9QX0xPVwlCSVQoNykKPj4gKyNkZWZpbmUgRUJVX0NPTl9JTl9DU19TKG4pCSgobikg PDwgOCkKPj4gKyNkZWZpbmUgRUJVX0NPTl9PVVRfQ1NfUyhuKQkoKG4pIDw8IDEwKQo+PiArI2Rl ZmluZSBFQlVfQ09OX0xBVF9FTl9DU19QCSgoMHgzRCkgPDwgMTgpCj4+ICsKPj4gKyNkZWZpbmUg RUJVX1dBSVQJCTB4MEI0Cj4+ICsjZGVmaW5lIEVCVV9XQUlUX1JEQlkJCUJJVCgwKQo+PiArI2Rl ZmluZSBFQlVfV0FJVF9XUl9DCQlCSVQoMykKPj4gKwo+PiArI2RlZmluZSBIU05BTkRfQ1RMMQkJ MHgxMTAKPj4gKyNkZWZpbmUgSFNOQU5EX0NUTDFfQUREUl9TSElGVAkyNAo+PiArCj4+ICsjZGVm aW5lIEhTTkFORF9DVEwyCQkweDExNAo+PiArI2RlZmluZSBIU05BTkRfQ1RMMl9BRERSX1NISUZU CTgKPj4gKyNkZWZpbmUgSFNOQU5EX0NUTDJfQ1lDX05fVjUJKDB4MiA8PCAxNikKPj4gKwo+PiAr I2RlZmluZSBIU05BTkRfSU5UX01TS19DVEwJMHgxMjQKPj4gKyNkZWZpbmUgSFNOQU5EX0lOVF9N U0tfQ1RMX1dSX0MJQklUKDQpCj4+ICsKPj4gKyNkZWZpbmUgSFNOQU5EX0lOVF9TVEEJCTB4MTI4 Cj4+ICsjZGVmaW5lIEhTTkFORF9JTlRfU1RBX1dSX0MJQklUKDQpCj4+ICsKPj4gKyNkZWZpbmUg SFNOQU5EX0NUTAkJMHgxMzAKPj4gKyNkZWZpbmUgSFNOQU5EX0NUTF9FTkFCTEVfRUNDCUJJVCgw KQo+PiArI2RlZmluZSBIU05BTkRfQ1RMX0dPCQlCSVQoMikKPj4gKyNkZWZpbmUgSFNOQU5EX0NU TF9DRV9TRUxfQ1MobikJQklUKDMgKyAobikpCj4+ICsjZGVmaW5lIEhTTkFORF9DVExfUldfUkVB RAkweDAKPj4gKyNkZWZpbmUgSFNOQU5EX0NUTF9SV19XUklURQlCSVQoMTApCj4+ICsjZGVmaW5l IEhTTkFORF9DVExfRUNDX09GRl9WOFRICUJJVCgxMSkKPj4gKyNkZWZpbmUgSFNOQU5EX0NUTF9D S0ZGX0VOCTB4MAo+PiArI2RlZmluZSBIU05BTkRfQ1RMX01TR19FTglCSVQoMTcpCj4+ICsKPj4g KyNkZWZpbmUgSFNOQU5EX1BBUkEwCQkweDEzYwo+PiArI2RlZmluZSBIU05BTkRfUEFSQTBfUEFH RV9WODE5MgkweDMKPj4gKyNkZWZpbmUgSFNOQU5EX1BBUkEwX1BJQl9WMjU2CSgweDMgPDwgNCkK Pj4gKyNkZWZpbmUgSFNOQU5EX1BBUkEwX0JZUF9FTl9OUAkweDAKPj4gKyNkZWZpbmUgSFNOQU5E X1BBUkEwX0JZUF9ERUNfTlAJMHgwCj4+ICsjZGVmaW5lIEhTTkFORF9QQVJBMF9UWVBFX09ORkkJ QklUKDE4KQo+PiArI2RlZmluZSBIU05BTkRfUEFSQTBfQURFUF9FTglCSVQoMjEpCj4+ICsKPj4g KyNkZWZpbmUgSFNOQU5EX0NNU0dfMAkJMHgxNTAKPj4gKyNkZWZpbmUgSFNOQU5EX0NNU0dfMQkJ MHgxNTQKPj4gKwo+PiArI2RlZmluZSBIU05BTkRfQUxFX09GRlMJCUJJVCgyKQo+PiArI2RlZmlu ZSBIU05BTkRfQ0xFX09GRlMJCUJJVCgzKQo+PiArI2RlZmluZSBIU05BTkRfQ1NfT0ZGUwkJQklU KDQpCj4+ICsKPj4gKyNkZWZpbmUgSFNOQU5EX0VDQ19PRkZTRVQJMHgwMDgKPj4gKwo+PiArI2Rl ZmluZSBOQU5EX0RBVEFfSUZBQ0VfQ0hFQ0tfT05MWQktMQo+PiArCj4+ICsjZGVmaW5lIE1BWF9D UwkyCj4+ICsKPj4gKyNkZWZpbmUgSFpfUEVSX01IWgkxMDAwMDAwTAo+PiArI2RlZmluZSBVU0VD X1BFUl9TRUMJMTAwMDAwMEwKPj4gKwo+PiArc3RydWN0IGVidV9uYW5kX2NzIHsKPj4gKwl2b2lk IF9faW9tZW0gKmNoaXBhZGRyOwo+PiArCWRtYV9hZGRyX3QgbmFuZF9wYTsKPj4gKwl1MzIgYWRk cl9zZWw7Cj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgZWJ1X25hbmRfY29udHJvbGxlciB7Cj4+ICsJ c3RydWN0IG5hbmRfY29udHJvbGxlciBjb250cm9sbGVyOwo+PiArCXN0cnVjdCBuYW5kX2NoaXAg Y2hpcDsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ICsJdm9pZCBfX2lvbWVtICplYnU7Cj4+ ICsJdm9pZCBfX2lvbWVtICpoc25hbmQ7Cj4+ICsJc3RydWN0IGRtYV9jaGFuICpkbWFfdHg7Cj4+ ICsJc3RydWN0IGRtYV9jaGFuICpkbWFfcng7Cj4+ICsJc3RydWN0IGNvbXBsZXRpb24gZG1hX2Fj Y2Vzc19jb21wbGV0ZTsKPj4gKwl1bnNpZ25lZCBsb25nIGNsa19yYXRlOwo+PiArCXN0cnVjdCBj bGsgKmNsazsKPj4gKwl1MzIgbmRfcGFyYTA7Cj4+ICsJdTggY3NfbnVtOwo+PiArCXN0cnVjdCBl YnVfbmFuZF9jcyBjc1tNQVhfQ1NdOwo+PiArfTsKPj4gKwo+PiArc3RhdGljIGlubGluZSBzdHJ1 Y3QgZWJ1X25hbmRfY29udHJvbGxlciAqbmFuZF90b19lYnUoc3RydWN0IG5hbmRfY2hpcCAqY2hp cCkKPj4gK3sKPj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBlYnVfbmFuZF9j b250cm9sbGVyLCBjaGlwKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBlYnVfbmFuZF93YWl0 cmR5KHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCB0aW1lX291dCkKPiAKPiBQ bGVhc2UgbWVudGlvbiB0aGUgdW5pdCBzb21ld2hlcmUuU3VyZSwgd2lsbCB1cGRhdGUKPiAKPj4g K3sKPj4gKwlzdHJ1Y3QgZWJ1X25hbmRfY29udHJvbGxlciAqY3RybCA9IG5hbmRfdG9fZWJ1KGNo aXApOwo+PiArCXUzMiBzdGF0dXM7Cj4+ICsKPj4gKwlyZXR1cm4gcmVhZGxfcG9sbF90aW1lb3V0 KGN0cmwtPmVidSArIEVCVV9XQUlULCBzdGF0dXMsCj4+ICsJCQkJICAoc3RhdHVzICYgRUJVX1dB SVRfUkRCWSkgfHwKPj4gKwkJCQkgIChzdGF0dXMgJiBFQlVfV0FJVF9XUl9DKSwgMjAsIHRpbWVf b3V0KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHU4IGVidV9uYW5kX3JlYWRiKHN0cnVjdCBuYW5k X2NoaXAgKmNoaXApCj4+ICt7Cj4+ICsJc3RydWN0IGVidV9uYW5kX2NvbnRyb2xsZXIgKmVidV9o b3N0ID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXApOwo+PiArCXU4IGNzX251bSA9IGVi dV9ob3N0LT5jc19udW07Cj4+ICsJdTggdmFsOwo+PiArCj4+ICsJdmFsID0gcmVhZGIoZWJ1X2hv c3QtPmNzW2NzX251bV0uY2hpcGFkZHIgKyBIU05BTkRfQ1NfT0ZGUyk7Cj4+ICsJZWJ1X25hbmRf d2FpdHJkeShjaGlwLCAxMDAwKTsKPj4gKwlyZXR1cm4gdmFsOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgdm9pZCBlYnVfbmFuZF93cml0ZWIoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgdTMyIG9mZnNl dCwgdTggdmFsdWUpCj4+ICt7Cj4+ICsJc3RydWN0IGVidV9uYW5kX2NvbnRyb2xsZXIgKmVidV9o b3N0ID0gbmFuZF9nZXRfY29udHJvbGxlcl9kYXRhKGNoaXApOwo+PiArCXU4IGNzX251bSA9IGVi dV9ob3N0LT5jc19udW07Cj4+ICsKPj4gKwl3cml0ZWIodmFsdWUsIGVidV9ob3N0LT5jc1tjc19u dW1dLmNoaXBhZGRyICsgb2Zmc2V0KTsKPj4gKwllYnVfbmFuZF93YWl0cmR5KGNoaXAsIDEwMDAp Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBlYnVfcmVhZF9idWYoc3RydWN0IG5hbmRfY2hp cCAqY2hpcCwgdV9jaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4pCj4+ICt7Cj4+ICsJaW50IGk7 Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCj4+ICsJCWJ1ZltpXSA9IGVidV9u YW5kX3JlYWRiKGNoaXApOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBlYnVfd3JpdGVfYnVm KHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQo+PiAr ewo+PiArCWludCBpOwo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQo+PiArCQll YnVfbmFuZF93cml0ZWIoY2hpcCwgSFNOQU5EX0NTX09GRlMsIGJ1ZltpXSk7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyB2b2lkIGVidV9uYW5kX2Rpc2FibGUoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCkK Pj4gK3sKPj4gKwlzdHJ1Y3QgZWJ1X25hbmRfY29udHJvbGxlciAqZWJ1X2hvc3QgPSBuYW5kX2dl dF9jb250cm9sbGVyX2RhdGEoY2hpcCk7Cj4+ICsKPj4gKwl3cml0ZWwoMCwgZWJ1X2hvc3QtPmVi dSArIEVCVV9DT04pOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBlYnVfc2VsZWN0X2NoaXAo c3RydWN0IG5hbmRfY2hpcCAqY2hpcCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZWJ1X25hbmRfY29udHJv bGxlciAqZWJ1X2hvc3QgPSBuYW5kX2dldF9jb250cm9sbGVyX2RhdGEoY2hpcCk7Cj4+ICsJdm9p ZCBfX2lvbWVtICpuYW5kX2NvbiA9IGVidV9ob3N0LT5lYnUgKyBFQlVfQ09OOwo+PiArCXUzMiBj cyA9IGVidV9ob3N0LT5jc19udW07Cj4+ICsKPj4gKwl3cml0ZWwoRUJVX0NPTl9OQU5ETV9FTiB8 IEVCVV9DT05fQ1NNVVhfRV9FTiB8IEVCVV9DT05fQ1NfUF9MT1cgfAo+PiArCSAgICAgICBFQlVf Q09OX1NFX1BfTE9XIHwgRUJVX0NPTl9XUF9QX0xPVyB8IEVCVV9DT05fUFJFX1BfTE9XIHwKPj4g KwkgICAgICAgRUJVX0NPTl9JTl9DU19TKGNzKSB8IEVCVV9DT05fT1VUX0NTX1MoY3MpIHwKPj4g KwkgICAgICAgRUJVX0NPTl9MQVRfRU5fQ1NfUCwgbmFuZF9jb24pOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgdm9pZCBlYnVfbmFuZF9zZXR1cF90aW1pbmcoc3RydWN0IGVidV9uYW5kX2NvbnRyb2xs ZXIgKmN0cmwsCj4+ICsJCQkJICBjb25zdCBzdHJ1Y3QgbmFuZF9zZHJfdGltaW5ncyAqdGltaW5n cykKPj4gK3sKPj4gKwl1bnNpZ25lZCBpbnQgcmF0ZSA9IGNsa19nZXRfcmF0ZShjdHJsLT5jbGsp IC8gSFpfUEVSX01IWjsKPj4gKwl1bnNpZ25lZCBpbnQgcGVyaW9kID0gRElWX1JPVU5EX1VQKFVT RUNfUEVSX1NFQywgcmF0ZSk7Cj4+ICsJdTMyIHRyZWNvdiwgdGhvbGQsIHR3cndhaXQsIHRyZHdh aXQ7Cj4+ICsJdTMyIHJlZyA9IDA7Cj4+ICsKPj4gKwl0cmVjb3YgPSBESVZfUk9VTkRfVVAobWF4 KHRpbWluZ3MtPnRSRUFfbWF4LCB0aW1pbmdzLT50UkVIX21pbiksCj4+ICsJCQkgICAgICBwZXJp b2QpOwo+PiArCXJlZyB8PSBFQlVfQlVTQ09OX1JFQ09WQyh0cmVjb3YpOwo+PiArCj4+ICsJdGhv bGQgPSBESVZfUk9VTkRfVVAobWF4KHRpbWluZ3MtPnRESF9taW4sIHRpbWluZ3MtPnREU19taW4p LCBwZXJpb2QpOwo+PiArCXJlZyB8PSBFQlVfQlVTQ09OX0hPTERDKHRob2xkKTsKPj4gKwo+PiAr CXRyZHdhaXQgPSBESVZfUk9VTkRfVVAobWF4KHRpbWluZ3MtPnRSQ19taW4sIHRpbWluZ3MtPnRS RUhfbWluKSwKPj4gKwkJCSAgICAgICBwZXJpb2QpOwo+PiArCXJlZyB8PSBFQlVfQlVTQ09OX1dB SVRSREModHJkd2FpdCk7Cj4+ICsKPj4gKwl0d3J3YWl0ID0gRElWX1JPVU5EX1VQKG1heCh0aW1p bmdzLT50V0NfbWluLCB0aW1pbmdzLT50V0hfbWluKSwgcGVyaW9kKTsKPj4gKwlyZWcgfD0gRUJV X0JVU0NPTl9XQUlUV1JDKHR3cndhaXQpOwo+PiArCj4+ICsJcmVnIHw9IEVCVV9CVVNDT05fQ01V TFRfVjQgfCBFQlVfQlVTQ09OX0JDR0VOX0NTIHwgRUJVX0JVU0NPTl9BTEVDIHwKPj4gKwkJRUJV X0JVU0NPTl9TRVRVUF9FTjsKPj4gKwo+PiArCXdyaXRlbChyZWcsIGN0cmwtPmVidSArIEVCVV9C VVNDT04oY3RybC0+Y3NfbnVtKSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZWJ1X25hbmRf c2V0X3RpbWluZ3Moc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgaW50IGNzbGluZSwKPj4gKwkJCQlj b25zdCBzdHJ1Y3QgbmFuZF9pbnRlcmZhY2VfY29uZmlnICpjb25mKQo+PiArewo+PiArCXN0cnVj dCBlYnVfbmFuZF9jb250cm9sbGVyICpjdHJsID0gbmFuZF90b19lYnUoY2hpcCk7Cj4+ICsJY29u c3Qgc3RydWN0IG5hbmRfc2RyX3RpbWluZ3MgKnRpbWluZ3M7Cj4+ICsKPj4gKwl0aW1pbmdzID0g bmFuZF9nZXRfc2RyX3RpbWluZ3MoY29uZik7Cj4+ICsJaWYgKElTX0VSUih0aW1pbmdzKSkKPj4g KwkJcmV0dXJuIFBUUl9FUlIodGltaW5ncyk7Cj4+ICsKPj4gKwlpZiAoY3NsaW5lID09IE5BTkRf REFUQV9JRkFDRV9DSEVDS19PTkxZKQo+PiArCQlyZXR1cm4gMDsKPj4gKwo+PiArCWVidV9uYW5k X3NldHVwX3RpbWluZyhjdHJsLCB0aW1pbmdzKTsKPiAKPiBJIGRvbid0IHRoaW5rIGFkZGluZyB0 aGlzIGhlbHBlciBoZWxwcyBtdWNoLiBZb3UgY291bGQgaW5zZXJ0IHRoZSBjb2RlCj4gZnJvbSB0 aGlzIGZ1bmN0aW9uIGhlcmUgZGlyZWN0bHk/ClllcywgWW91J3JlIHJpZ2h0LCBlYXJsaWVyIHdl IGFkZGVkIGRpcmVjdGVseSwgdGhlIGR1cmluZyB0aGUgY29kZSAKYWRhcHRhdGlvbiBleGVjX29w KCkgY2hhbmdlZCwgd2lsbCB1cGRhdGUgaXQgYXMgcGVyIHlvdXIgc3VnZ2VzdGlvbnMKPiAKPj4g Kwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGVidV9uYW5kX29vYmxh eW91dF9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzZWN0aW9uLAo+PiArCQkJCSAgc3Ry dWN0IG10ZF9vb2JfcmVnaW9uICpvb2JyZWdpb24pCj4+ICt7Cj4+ICsJc3RydWN0IG5hbmRfY2hp cCAqY2hpcCA9IG10ZF90b19uYW5kKG10ZCk7Cj4+ICsKPj4gKwlpZiAoc2VjdGlvbikKPj4gKwkJ cmV0dXJuIC1FUkFOR0U7Cj4+ICsKPj4gKwlvb2JyZWdpb24tPm9mZnNldCA9IEhTTkFORF9FQ0Nf T0ZGU0VUOwo+PiArCW9vYnJlZ2lvbi0+bGVuZ3RoID0gY2hpcC0+ZWNjLnRvdGFsOwo+PiArCj4+ ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZWJ1X25hbmRfb29ibGF5b3V0 X2ZyZWUoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBzZWN0aW9uLAo+PiArCQkJCSAgIHN0cnVj dCBtdGRfb29iX3JlZ2lvbiAqb29icmVnaW9uKQo+PiArewo+PiArCXN0cnVjdCBuYW5kX2NoaXAg KmNoaXAgPSBtdGRfdG9fbmFuZChtdGQpOwo+PiArCj4+ICsJaWYgKHNlY3Rpb24pCj4+ICsJCXJl dHVybiAtRVJBTkdFOwo+PiArCj4+ICsJb29icmVnaW9uLT5vZmZzZXQgPSBjaGlwLT5lY2MudG90 YWwgKyBIU05BTkRfRUNDX09GRlNFVDsKPj4gKwlvb2JyZWdpb24tPmxlbmd0aCA9IG10ZC0+b29i c2l6ZSAtIG9vYnJlZ2lvbi0+b2Zmc2V0Owo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX29vYmxheW91dF9vcHMgZWJ1X25hbmRfb29ibGF5 b3V0X29wcyA9IHsKPj4gKwkuZWNjID0gZWJ1X25hbmRfb29ibGF5b3V0X2VjYywKPj4gKwkuZnJl ZSA9IGVidV9uYW5kX29vYmxheW91dF9mcmVlLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIHZvaWQg ZWJ1X2RtYV9yeF9jYWxsYmFjayh2b2lkICpjb29raWUpCj4+ICt7Cj4+ICsJc3RydWN0IGVidV9u YW5kX2NvbnRyb2xsZXIgKmVidV9ob3N0ID0gY29va2llOwo+PiArCj4+ICsJZG1hZW5naW5lX3Rl cm1pbmF0ZV9hc3luYyhlYnVfaG9zdC0+ZG1hX3J4KTsKPj4gKwo+PiArCWNvbXBsZXRlKCZlYnVf aG9zdC0+ZG1hX2FjY2Vzc19jb21wbGV0ZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGVi dV9kbWFfdHhfY2FsbGJhY2sodm9pZCAqY29va2llKQo+PiArewo+PiArCXN0cnVjdCBlYnVfbmFu ZF9jb250cm9sbGVyICplYnVfaG9zdCA9IGNvb2tpZTsKPj4gKwo+PiArCWRtYWVuZ2luZV90ZXJt aW5hdGVfYXN5bmMoZWJ1X2hvc3QtPmRtYV90eCk7Cj4+ICsKPj4gKwljb21wbGV0ZSgmZWJ1X2hv c3QtPmRtYV9hY2Nlc3NfY29tcGxldGUpOwo+IAo+IFBsZWFzZSBjaGVjayByZXR1cm4gY29kZXMg d2hlbiB0aGV5IGFyZSByZWxldmFudCwgYW5kIHJldHVybiB0aGUKPiBlcnJvcnMuIEFsc28gdHJl YXQgdGhlbSBiZWxvdy4KTm90ZWQuCj4gCj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZWJ1X2Rt YV9zdGFydChzdHJ1Y3QgZWJ1X25hbmRfY29udHJvbGxlciAqZWJ1X2hvc3QsIHUzMiBkaXIsCj4+ ICsJCQkgY29uc3QgdTggKmJ1ZiwgdTMyIGxlbikKPj4gK3sKPj4gKwlzdHJ1Y3QgZG1hX2FzeW5j X3R4X2Rlc2NyaXB0b3IgKnR4Owo+PiArCXN0cnVjdCBjb21wbGV0aW9uICpkbWFfY29tcGxldGlv bjsKPj4gKwlkbWFfYXN5bmNfdHhfY2FsbGJhY2sgY2FsbGJhY2s7Cj4+ICsJc3RydWN0IGRtYV9j aGFuICpjaGFuOwo+PiArCWRtYV9jb29raWVfdCBjb29raWU7Cj4+ICsJdW5zaWduZWQgbG9uZyBm bGFncyA9IERNQV9DVFJMX0FDSyB8IERNQV9QUkVQX0lOVEVSUlVQVDsKPj4gKwlkbWFfYWRkcl90 IGJ1Zl9kbWE7Cj4+ICsJaW50IHJldDsKPj4gKwl1MzIgdGltZW91dDsKPj4gKwo+PiArCWlmIChk aXIgPT0gRE1BX0RFVl9UT19NRU0pIHsKPj4gKwkJY2hhbiA9IGVidV9ob3N0LT5kbWFfcng7Cj4+ ICsJCWRtYV9jb21wbGV0aW9uID0gJmVidV9ob3N0LT5kbWFfYWNjZXNzX2NvbXBsZXRlOwo+PiAr CQljYWxsYmFjayA9IGVidV9kbWFfcnhfY2FsbGJhY2s7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJY2hh biA9IGVidV9ob3N0LT5kbWFfdHg7Cj4+ICsJCWRtYV9jb21wbGV0aW9uID0gJmVidV9ob3N0LT5k bWFfYWNjZXNzX2NvbXBsZXRlOwo+PiArCQljYWxsYmFjayA9IGVidV9kbWFfdHhfY2FsbGJhY2s7 Cj4+ICsJfQo+PiArCj4+ICsJYnVmX2RtYSA9IGRtYV9tYXBfc2luZ2xlKGNoYW4tPmRldmljZS0+ ZGV2LCAodm9pZCAqKWJ1ZiwgbGVuLCBkaXIpOwo+PiArCWlmIChkbWFfbWFwcGluZ19lcnJvcihj aGFuLT5kZXZpY2UtPmRldiwgYnVmX2RtYSkpIHsKPj4gKwkJZGV2X2VycihlYnVfaG9zdC0+ZGV2 LCAiRmFpbGVkIHRvIG1hcCBETUEgYnVmZmVyXG4iKTsKPj4gKwkJcmV0ID0gLUVJTzsKPj4gKwkJ Z290byBlcnJfdW5tYXA7Cj4+ICsJfQo+PiArCj4+ICsJdHggPSBkbWFlbmdpbmVfcHJlcF9zbGF2 ZV9zaW5nbGUoY2hhbiwgYnVmX2RtYSwgbGVuLCBkaXIsIGZsYWdzKTsKPj4gKwlpZiAoIXR4KQo+ PiArCQlyZXR1cm4gLUVOWElPOwo+PiArCj4+ICsJdHgtPmNhbGxiYWNrID0gY2FsbGJhY2s7Cj4+ ICsJdHgtPmNhbGxiYWNrX3BhcmFtID0gZWJ1X2hvc3Q7Cj4+ICsJY29va2llID0gdHgtPnR4X3N1 Ym1pdCh0eCk7Cj4+ICsKPj4gKwlyZXQgPSBkbWFfc3VibWl0X2Vycm9yKGNvb2tpZSk7Cj4+ICsJ aWYgKHJldCkgewo+PiArCQlkZXZfZXJyKGVidV9ob3N0LT5kZXYsICJkbWFfc3VibWl0X2Vycm9y ICVkXG4iLCBjb29raWUpOwo+PiArCQlyZXQgPSAtRUlPOwo+PiArCQlnb3RvIGVycl91bm1hcDsK Pj4gKwl9Cj4+ICsKPj4gKwlpbml0X2NvbXBsZXRpb24oZG1hX2NvbXBsZXRpb24pOwo+PiArCWRt YV9hc3luY19pc3N1ZV9wZW5kaW5nKGNoYW4pOwo+PiArCj4+ICsJLyogV2FpdCBETUEgdG8gZmlu aXNoIHRoZSBkYXRhIHRyYW5zZmVyLiovCj4+ICsJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRp b25fdGltZW91dChkbWFfY29tcGxldGlvbiwgbXNlY3NfdG9famlmZmllcygxMDAwKSk7Cj4+ICsJ aWYgKCF0aW1lb3V0KSB7Cj4+ICsJCWRldl9lcnIoZWJ1X2hvc3QtPmRldiwgIkkvTyBFcnJvciBp biBETUEgUlggKHN0YXR1cyAlZClcbiIsCj4+ICsJCQlkbWFlbmdpbmVfdHhfc3RhdHVzKGNoYW4s IGNvb2tpZSwgTlVMTCkpOwo+PiArCQlkbWFlbmdpbmVfdGVybWluYXRlX3N5bmMoY2hhbik7Cj4+ ICsJCXJldCA9IC1FVElNRURPVVQ7Cj4+ICsJCWdvdG8gZXJyX3VubWFwOwo+PiArCX0KPj4gKwo+ PiArCXJldHVybiAwOwo+PiArCj4+ICtlcnJfdW5tYXA6Cj4+ICsJZG1hX3VubWFwX3NpbmdsZShl YnVfaG9zdC0+ZGV2LCBidWZfZG1hLCBsZW4sIGRpcik7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+ PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBlYnVfbmFuZF90cmlnZ2VyKHN0cnVjdCBlYnVfbmFu ZF9jb250cm9sbGVyICplYnVfaG9zdCwKPj4gKwkJCSAgICAgaW50IHBhZ2UsIHUzMiBjbWQpCj4+ ICt7Cj4+ICsJdW5zaWduZWQgaW50IHZhbDsKPj4gKwo+PiArCXZhbCA9IGNtZCB8IChwYWdlICYg MHhGRikgPDwgSFNOQU5EX0NUTDFfQUREUl9TSElGVDsKPj4gKwl3cml0ZWwodmFsLCBlYnVfaG9z dC0+aHNuYW5kICsgSFNOQU5EX0NUTDEpOwo+PiArCXZhbCA9IChwYWdlICYgMHhGRkZGMDApID4+ IDggfCBIU05BTkRfQ1RMMl9DWUNfTl9WNTsKPj4gKwl3cml0ZWwodmFsLCBlYnVfaG9zdC0+aHNu YW5kICsgSFNOQU5EX0NUTDIpOwo+PiArCj4+ICsJd3JpdGVsKGVidV9ob3N0LT5uZF9wYXJhMCwg ZWJ1X2hvc3QtPmhzbmFuZCArIEhTTkFORF9QQVJBMCk7Cj4+ICsKPj4gKwkvKiBjbGVhciBmaXJz dCwgd2lsbCB1cGRhdGUgbGF0ZXIgKi8KPj4gKwl3cml0ZWwoMHhGRkZGRkZGRiwgZWJ1X2hvc3Qt PmhzbmFuZCArIEhTTkFORF9DTVNHXzApOwo+PiArCXdyaXRlbCgweEZGRkZGRkZGLCBlYnVfaG9z dC0+aHNuYW5kICsgSFNOQU5EX0NNU0dfMSk7Cj4+ICsKPj4gKwl3cml0ZWwoSFNOQU5EX0lOVF9N U0tfQ1RMX1dSX0MsCj4+ICsJICAgICAgIGVidV9ob3N0LT5oc25hbmQgKyBIU05BTkRfSU5UX01T S19DVEwpOwo+PiArCj4+ICsJaWYgKCFjbWQpCj4+ICsJCXZhbCA9IEhTTkFORF9DVExfUldfUkVB RDsKPj4gKwllbHNlCj4+ICsJCXZhbCA9IEhTTkFORF9DVExfUldfV1JJVEU7Cj4+ICsKPj4gKwl3 cml0ZWwoSFNOQU5EX0NUTF9NU0dfRU4gfCBIU05BTkRfQ1RMX0NLRkZfRU4gfAo+PiArCSAgICAg ICBIU05BTkRfQ1RMX0VDQ19PRkZfVjhUSCB8IEhTTkFORF9DVExfQ0VfU0VMX0NTKGVidV9ob3N0 LT5jc19udW0pIHwKPj4gKwkgICAgICAgSFNOQU5EX0NUTF9FTkFCTEVfRUNDIHwgSFNOQU5EX0NU TF9HTyB8IHZhbCwKPj4gKwkgICAgICAgZWJ1X2hvc3QtPmhzbmFuZCArIEhTTkFORF9DVEwpOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGVidV9uYW5kX3JlYWRfcGFnZV9od2VjYyhzdHJ1Y3Qg bmFuZF9jaGlwICpjaGlwLCB1OCAqYnVmLAo+PiArCQkJCSAgICBpbnQgb29iX3JlcXVpcmVkLCBp bnQgcGFnZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRkKGNo aXApOwo+PiArCXN0cnVjdCBlYnVfbmFuZF9jb250cm9sbGVyICplYnVfaG9zdCA9IG5hbmRfZ2V0 X2NvbnRyb2xsZXJfZGF0YShjaGlwKTsKPj4gKwlpbnQgcmV0LCByZWdfZGF0YTsKPj4gKwo+PiAr CWVidV9uYW5kX3RyaWdnZXIoZWJ1X2hvc3QsIHBhZ2UsIE5BTkRfQ01EX1JFQUQwKTsKPj4gKwo+ PiArCXJldCA9IGVidV9kbWFfc3RhcnQoZWJ1X2hvc3QsIERNQV9ERVZfVE9fTUVNLCBidWYsIG10 ZC0+d3JpdGVzaXplKTsKPj4gKwlpZiAocmV0KQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJ aWYgKG9vYl9yZXF1aXJlZCkKPj4gKwkJY2hpcC0+ZWNjLnJlYWRfb29iKGNoaXAsIHBhZ2UpOwo+ PiArCj4+ICsJcmVnX2RhdGEgPSByZWFkbChlYnVfaG9zdC0+aHNuYW5kICsgSFNOQU5EX0NUTCk7 Cj4+ICsJcmVnX2RhdGEgJj0gfkhTTkFORF9DVExfR087Cj4+ICsJd3JpdGVsKHJlZ19kYXRhLCBl YnVfaG9zdC0+aHNuYW5kICsgSFNOQU5EX0NUTCk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGludCBlYnVfbmFuZF93cml0ZV9wYWdlX2h3ZWNjKHN0cnVjdCBuYW5k X2NoaXAgKmNoaXAsIGNvbnN0IHU4ICpidWYsCj4+ICsJCQkJICAgICBpbnQgb29iX3JlcXVpcmVk LCBpbnQgcGFnZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5hbmRfdG9fbXRk KGNoaXApOwo+PiArCXN0cnVjdCBlYnVfbmFuZF9jb250cm9sbGVyICplYnVfaG9zdCA9IG5hbmRf Z2V0X2NvbnRyb2xsZXJfZGF0YShjaGlwKTsKPj4gKwl2b2lkIF9faW9tZW0gKmludF9zdGEgPSBl YnVfaG9zdC0+aHNuYW5kICsgSFNOQU5EX0lOVF9TVEE7Cj4+ICsJaW50IHJlZ19kYXRhLCByZXQs IHZhbDsKPj4gKwl1MzIgcmVnOwo+PiArCj4+ICsJZWJ1X25hbmRfdHJpZ2dlcihlYnVfaG9zdCwg cGFnZSwgTkFORF9DTURfU0VRSU4pOwo+PiArCj4+ICsJcmV0ID0gZWJ1X2RtYV9zdGFydChlYnVf aG9zdCwgRE1BX01FTV9UT19ERVYsIGJ1ZiwgbXRkLT53cml0ZXNpemUpOwo+PiArCWlmIChyZXQp Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsKPj4gKwlpZiAob29iX3JlcXVpcmVkKSB7Cj4+ICsJCXJl ZyA9IGdldF91bmFsaWduZWRfbGUzMihjaGlwLT5vb2JfcG9pKTsKPj4gKwkJd3JpdGVsKHJlZywg ZWJ1X2hvc3QtPmhzbmFuZCArIEhTTkFORF9DTVNHXzApOwo+PiArCj4+ICsJCXJlZyA9IGdldF91 bmFsaWduZWRfbGUzMihjaGlwLT5vb2JfcG9pICsgNCk7Cj4+ICsJCXdyaXRlbChyZWcsIGVidV9o b3N0LT5oc25hbmQgKyBIU05BTkRfQ01TR18xKTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSByZWFk bF9wb2xsX3RpbWVvdXRfYXRvbWljKGludF9zdGEsIHZhbCwgISh2YWwgJiBIU05BTkRfSU5UX1NU QV9XUl9DKSwKPj4gKwkJCQkJMTAsIDEwMDApOwo+PiArCWlmIChyZXQpCj4+ICsJCXJldHVybiBy ZXQ7Cj4+ICsKPj4gKwlyZWdfZGF0YSA9IHJlYWRsKGVidV9ob3N0LT5oc25hbmQgKyBIU05BTkRf Q1RMKTsKPj4gKwlyZWdfZGF0YSAmPSB+SFNOQU5EX0NUTF9HTzsKPj4gKwl3cml0ZWwocmVnX2Rh dGEsIGVidV9ob3N0LT5oc25hbmQgKyBIU05BTkRfQ1RMKTsKPj4gKwo+PiArCXJldHVybiAwOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3QgdTggZWNjX3N0cmVuZ3RoW10gPSB7IDEsIDEsIDQs IDgsIDI0LCAzMiwgNDAsIDYwLCB9Owo+PiArCj4+ICtzdGF0aWMgaW50IGVidV9uYW5kX2F0dGFj aF9jaGlwKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXApCj4+ICt7Cj4+ICsJc3RydWN0IG10ZF9pbmZv ICptdGQgPSBuYW5kX3RvX210ZChjaGlwKTsKPj4gKwlzdHJ1Y3QgZWJ1X25hbmRfY29udHJvbGxl ciAqZWJ1X2hvc3QgPSBuYW5kX2dldF9jb250cm9sbGVyX2RhdGEoY2hpcCk7Cj4+ICsJdTMyIGVj Y19zdGVwcywgZWNjX2J5dGVzLCBlY2NfdG90YWwsIHBhZ2VzaXplLCBwZ19wZXJfYmxrOwo+PiAr CXUzMiBlY2Nfc3RyZW5ndGhfZHMgPSBjaGlwLT5lY2Muc3RyZW5ndGg7Cj4+ICsJdTMyIGVjY19z aXplID0gY2hpcC0+ZWNjLnNpemU7Cj4+ICsJdTMyIHdyaXRlc2l6ZSA9IG10ZC0+d3JpdGVzaXpl Owo+PiArCXUzMiBibG9ja3NpemUgPSBtdGQtPmVyYXNlc2l6ZTsKPj4gKwlpbnQgYmNoX2FsZ28s IHN0YXJ0LCB2YWw7Cj4+ICsKPj4gKwkvKiBEZWZhdWx0IHRvIGFuIEVDQyBzaXplIG9mIDUxMiAq Lwo+PiArCWlmICghY2hpcC0+ZWNjLnNpemUpCj4+ICsJCWNoaXAtPmVjYy5zaXplID0gNTEyOwo+ PiArCj4+ICsJc3dpdGNoIChlY2Nfc2l6ZSkgewo+PiArCWNhc2UgNTEyOgo+PiArCQlzdGFydCA9 IDE7Cj4+ICsJCWlmICghZWNjX3N0cmVuZ3RoX2RzKQo+PiArCQkJZWNjX3N0cmVuZ3RoX2RzID0g NDsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSAxMDI0Ogo+PiArCQlzdGFydCA9IDQ7Cj4+ICsJCWlm ICghZWNjX3N0cmVuZ3RoX2RzKQo+PiArCQkJZWNjX3N0cmVuZ3RoX2RzID0gMzI7Cj4+ICsJCWJy ZWFrOwo+PiArCWRlZmF1bHQ6Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiAr CS8qIEJDSCBFQ0MgYWxnb3JpdGhtIFNldHRpbmdzIGZvciBudW1iZXIgb2YgYml0cyBwZXIgNTEy Qi8xMDI0QiAqLwo+PiArCWJjaF9hbGdvID0gcm91bmRfdXAoc3RhcnQgKyAxLCA0KTsKPj4gKwlm b3IgKHZhbCA9IHN0YXJ0OyB2YWwgPCBiY2hfYWxnbzsgdmFsKyspIHsKPj4gKwkJaWYgKGVjY19z dHJlbmd0aF9kcyA9PSBlY2Nfc3RyZW5ndGhbdmFsXSkKPj4gKwkJCWJyZWFrOwo+PiArCX0KPj4g KwlpZiAodmFsID09IGJjaF9hbGdvKQo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArCWlm IChlY2Nfc3RyZW5ndGhfZHMgPT0gOCkKPj4gKwkJZWNjX2J5dGVzID0gMTQ7Cj4+ICsJZWxzZQo+ PiArCQllY2NfYnl0ZXMgPSBESVZfUk9VTkRfVVAoZWNjX3N0cmVuZ3RoX2RzICogZmxzKDggKiBl Y2Nfc2l6ZSksIDgpOwo+PiArCj4+ICsJZWNjX3N0ZXBzID0gd3JpdGVzaXplIC8gZWNjX3NpemU7 Cj4+ICsJZWNjX3RvdGFsID0gZWNjX3N0ZXBzICogZWNjX2J5dGVzOwo+PiArCWlmICgoZWNjX3Rv dGFsICsgOCkgPiBtdGQtPm9vYnNpemUpCj4+ICsJCXJldHVybiAtRVJBTkdFOwo+PiArCj4+ICsJ Y2hpcC0+ZWNjLnRvdGFsID0gZWNjX3RvdGFsOwo+PiArCXBhZ2VzaXplID0gZmxzKHdyaXRlc2l6 ZSA+PiAxMSk7Cj4+ICsJaWYgKHBhZ2VzaXplID4gSFNOQU5EX1BBUkEwX1BBR0VfVjgxOTIpCj4+ ICsJCXJldHVybiAtRVJBTkdFOwo+PiArCj4+ICsJcGdfcGVyX2JsayA9IGZscygoYmxvY2tzaXpl IC8gd3JpdGVzaXplKSA+PiA2KSAvIDg7Cj4+ICsJaWYgKHBnX3Blcl9ibGsgPiBIU05BTkRfUEFS QTBfUElCX1YyNTYpCj4+ICsJCXJldHVybiAtRVJBTkdFOwo+PiArCj4+ICsJZWJ1X2hvc3QtPm5k X3BhcmEwID0gcGFnZXNpemUgfCBwZ19wZXJfYmxrIHwgSFNOQU5EX1BBUkEwX0JZUF9FTl9OUCB8 Cj4+ICsJCQkgICAgIEhTTkFORF9QQVJBMF9CWVBfREVDX05QIHwgSFNOQU5EX1BBUkEwX0FERVBf RU4gfAo+PiArCQkJICAgICBIU05BTkRfUEFSQTBfVFlQRV9PTkZJIHwgKHZhbCA8PCAyOSk7Cj4+ ICsKPj4gKwltdGRfc2V0X29vYmxheW91dChtdGQsICZlYnVfbmFuZF9vb2JsYXlvdXRfb3BzKTsK Pj4gKwljaGlwLT5lY2MucmVhZF9wYWdlID0gZWJ1X25hbmRfcmVhZF9wYWdlX2h3ZWNjOwo+PiAr CWNoaXAtPmVjYy53cml0ZV9wYWdlID0gZWJ1X25hbmRfd3JpdGVfcGFnZV9od2VjYzsKPj4gKwo+ PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGVidV9uYW5kX2V4ZWNfb3Ao c3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKPj4gKwkJCSAgICBjb25zdCBzdHJ1Y3QgbmFuZF9vcGVy YXRpb24gKm9wLCBib29sIGNoZWNrX29ubHkpCj4+ICt7Cj4+ICsJY29uc3Qgc3RydWN0IG5hbmRf b3BfaW5zdHIgKmluc3RyID0gTlVMTDsKPj4gKwl1bnNpZ25lZCBpbnQgb3BfaWQ7Cj4+ICsJaW50 IGksIHRpbWVfb3V0LCByZXQgPSAwOwo+PiArCj4+ICsJaWYgKGNoZWNrX29ubHkpCj4+ICsJCXJl dHVybiAwOwo+PiArCj4+ICsJZWJ1X3NlbGVjdF9jaGlwKGNoaXApOwo+PiArCWZvciAob3BfaWQg PSAwOyBvcF9pZCA8IG9wLT5uaW5zdHJzOyBvcF9pZCsrKSB7Cj4+ICsJCWluc3RyID0gJm9wLT5p bnN0cnNbb3BfaWRdOwo+PiArCj4+ICsJCXN3aXRjaCAoaW5zdHItPnR5cGUpIHsKPj4gKwkJY2Fz ZSBOQU5EX09QX0NNRF9JTlNUUjoKPj4gKwkJCWVidV9uYW5kX3dyaXRlYihjaGlwLCBIU05BTkRf Q0xFX09GRlMgfCBIU05BTkRfQ1NfT0ZGUywKPj4gKwkJCQkJaW5zdHItPmN0eC5jbWQub3Bjb2Rl KTsKPj4gKwkJCWJyZWFrOwo+PiArCj4+ICsJCWNhc2UgTkFORF9PUF9BRERSX0lOU1RSOgo+PiAr CQkJZm9yIChpID0gMDsgaSA8IGluc3RyLT5jdHguYWRkci5uYWRkcnM7IGkrKykKPj4gKwkJCQll YnVfbmFuZF93cml0ZWIoY2hpcCwKPj4gKwkJCQkJCUhTTkFORF9BTEVfT0ZGUyB8IEhTTkFORF9D U19PRkZTLAo+PiArCQkJCQkJaW5zdHItPmN0eC5hZGRyLmFkZHJzW2ldKTsKPj4gKwkJCWJyZWFr Owo+PiArCj4+ICsJCWNhc2UgTkFORF9PUF9EQVRBX0lOX0lOU1RSOgo+PiArCQkJZWJ1X3JlYWRf YnVmKGNoaXAsIGluc3RyLT5jdHguZGF0YS5idWYuaW4sCj4+ICsJCQkJICAgICBpbnN0ci0+Y3R4 LmRhdGEubGVuKTsKPj4gKwkJCWJyZWFrOwo+PiArCj4+ICsJCWNhc2UgTkFORF9PUF9EQVRBX09V VF9JTlNUUjoKPj4gKwkJCWVidV93cml0ZV9idWYoY2hpcCwgaW5zdHItPmN0eC5kYXRhLmJ1Zi5v dXQsCj4+ICsJCQkJICAgICAgaW5zdHItPmN0eC5kYXRhLmxlbik7Cj4+ICsJCQlicmVhazsKPj4g Kwo+PiArCQljYXNlIE5BTkRfT1BfV0FJVFJEWV9JTlNUUjoKPj4gKwkJCXRpbWVfb3V0ID0gaW5z dHItPmN0eC53YWl0cmR5LnRpbWVvdXRfbXMgKiAxMDAwOwo+PiArCQkJcmV0ID0gZWJ1X25hbmRf d2FpdHJkeShjaGlwLCB0aW1lX291dCk7Cj4+ICsJCQlicmVhazsKPj4gKwkJfQo+PiArCX0KPj4g Kwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmFu ZF9jb250cm9sbGVyX29wcyBlYnVfbmFuZF9jb250cm9sbGVyX29wcyA9IHsKPj4gKwkuYXR0YWNo X2NoaXAgPSBlYnVfbmFuZF9hdHRhY2hfY2hpcCwKPj4gKwkuc2V0dXBfaW50ZXJmYWNlID0gZWJ1 X25hbmRfc2V0X3RpbWluZ3MsCj4+ICsJLmV4ZWNfb3AgPSBlYnVfbmFuZF9leGVjX29wLAo+PiAr fTsKPj4gKwo+PiArc3RhdGljIHZvaWQgZWJ1X2RtYV9jbGVhbnVwKHN0cnVjdCBlYnVfbmFuZF9j b250cm9sbGVyICplYnVfaG9zdCkKPj4gK3sKPj4gKwlpZiAoZWJ1X2hvc3QtPmRtYV9yeCkKPj4g KwkJZG1hX3JlbGVhc2VfY2hhbm5lbChlYnVfaG9zdC0+ZG1hX3J4KTsKPj4gKwo+PiArCWlmIChl YnVfaG9zdC0+ZG1hX3R4KQo+PiArCQlkbWFfcmVsZWFzZV9jaGFubmVsKGVidV9ob3N0LT5kbWFf dHgpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGVidV9uYW5kX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICt7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYt PmRldjsKPj4gKwlzdHJ1Y3QgZWJ1X25hbmRfY29udHJvbGxlciAqZWJ1X2hvc3Q7Cj4+ICsJc3Ry dWN0IG5hbmRfY2hpcCAqbmFuZDsKPj4gKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKPj4gKwlzdHJ1 Y3QgcmVzb3VyY2UgKnJlczsKPj4gKwljaGFyICpyZXNuYW1lOwo+PiArCWludCByZXQsIGk7Cj4+ ICsJdTMyIHJlZzsKPj4gKwo+PiArCWVidV9ob3N0ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9m KCplYnVfaG9zdCksIEdGUF9LRVJORUwpOwo+PiArCWlmICghZWJ1X2hvc3QpCj4+ICsJCXJldHVy biAtRU5PTUVNOwo+PiArCj4+ICsJZWJ1X2hvc3QtPmRldiA9IGRldjsKPj4gKwluYW5kX2NvbnRy b2xsZXJfaW5pdCgmZWJ1X2hvc3QtPmNvbnRyb2xsZXIpOwo+PiArCj4+ICsJcmVzID0gcGxhdGZv cm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgImVidW5hbmQiKTsK Pj4gKwllYnVfaG9zdC0+ZWJ1ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJl cyk7Cj4+ICsJaWYgKElTX0VSUihlYnVfaG9zdC0+ZWJ1KSkKPj4gKwkJcmV0dXJuIFBUUl9FUlIo ZWJ1X2hvc3QtPmVidSk7Cj4+ICsKPj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnlu YW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiaHNuYW5kIik7Cj4+ICsJZWJ1X2hvc3QtPmhzbmFu ZCA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOwo+PiArCWlmIChJU19F UlIoZWJ1X2hvc3QtPmhzbmFuZCkpCj4+ICsJCXJldHVybiBQVFJfRVJSKGVidV9ob3N0LT5oc25h bmQpOwo+PiArCj4+ICsJcmV0ID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgIm5hbmQs Y3MiLCAmcmVnKTsKPiAKPiBUaGVyZSBpcyBubyBuYW5kLGNzIHByb3BlcnR5LiBVc2UgJ3JlZycg aW5zdGVhZC4KTm90ZWQuCj4gCj4+ICsJaWYgKHJldCkgewo+PiArCQlkZXZfZXJyKGRldiwgImZh aWxlZCB0byBnZXQgY2hpcCBzZWxlY3Q6ICVkXG4iLCByZXQpOwo+PiArCQlyZXR1cm4gcmV0Owo+ PiArCX0KPj4gKwllYnVfaG9zdC0+Y3NfbnVtID0gcmVnOwo+IAo+IFRoZSBmb2xsb3dpbmcgZm9y IGxvb3AgaXMgd2VpcmQsIGFib3ZlIHlvdSBjYW4gb25seSBzdG9yZSBhIHNpbmdsZSBjcwo+IG51 bWJlciwgd2hpbGUgYmVsb3cgeW91IHNlZW0gdG8gcmVzZXJ2ZSBzZXJ2ZXJhbCBtZW1vcnkgYXJl YXMuIFBsZWFzZQo+IGNsYXJpZnkgdGhpcyBjb2RlLgpUaGlzIElQIHN1cHBvcnRzIDIgY2hpcCBz ZWxlY3QgZm9yIDIgZGlmZmVyZW50IG1lbW9yeSByZWdpb25zIHNvIHdlIHVzZWQgCnRoZSBiZWxv dyBmb3IgbG9vcCwgYXMgcGVyIHJldmlld2VycyBjb21tZW50IHVwZGF0ZWQuCgkJIEVCVV9DUzBf QkFTRSAgICAgMHhFMUMwXzAwMDAgKE1lbW9yeS1NYXBwZWQpCgkJIEVCVV9DUzBfSU9fQkFTRSAg MHgxNzQwXzAwMDAgKEZQSSBJL08gTWFwcGVkKQoKICAgICAgICAgICAgICAgICAgRUJVX0NTMV9C QVNFICAgICAweEUxNDBfMDAwMCAoTWVtb3J5LU1hcHBlZCkKICAgICAgICAgICAgICAgICAgRUJV X0NTMV9JT19CQVNFICAweDE3QzBfMDAwMCAoRlBJIEkvTyBNYXBwZWQpCgo+IAo+PiArCj4+ICsJ Zm9yIChpID0gMDsgaSA8IE1BWF9DUzsgaSsrKSB7Cj4+ICsJCXJlc25hbWUgPSBkZXZtX2thc3By aW50ZihkZXYsIEdGUF9LRVJORUwsICJuYW5kX2NzJWQiLCBpKTsKPj4gKwkJcmVzID0gcGxhdGZv cm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwKPj4gKwkJCQkJCSAg IHJlc25hbWUpOwo+PiArCQllYnVfaG9zdC0+Y3NbaV0uY2hpcGFkZHIgPSBkZXZtX2lvcmVtYXBf cmVzb3VyY2UoZGV2LCByZXMpOwo+PiArCQllYnVfaG9zdC0+Y3NbaV0ubmFuZF9wYSA9IHJlcy0+ c3RhcnQ7Cj4+ICsJCWlmIChJU19FUlIoZWJ1X2hvc3QtPmNzW2ldLmNoaXBhZGRyKSkKPj4gKwkJ CXJldHVybiBQVFJfRVJSKGVidV9ob3N0LT5jc1tpXS5jaGlwYWRkcik7Cj4+ICsJfQo+PiArCj4+ ICsJZWJ1X2hvc3QtPmNsayA9IGRldm1fY2xrX2dldChkZXYsIE5VTEwpOwo+PiArCWlmIChJU19F UlIoZWJ1X2hvc3QtPmNsaykpCj4+ICsJCXJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VS UihlYnVfaG9zdC0+Y2xrKSwKPj4gKwkJCQkgICAgICJmYWlsZWQgdG8gZ2V0IGNsb2NrXG4iKTsK Pj4gKwo+PiArCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShlYnVfaG9zdC0+Y2xrKTsKPj4gKwlp ZiAocmV0KSB7Cj4+ICsJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBjbG9jazogJWRc biIsIHJldCk7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+PiArCWVidV9ob3N0LT5jbGtfcmF0 ZSA9IGNsa19nZXRfcmF0ZShlYnVfaG9zdC0+Y2xrKTsKPj4gKwo+PiArCWVidV9ob3N0LT5kbWFf dHggPSBkbWFfcmVxdWVzdF9jaGFuKGRldiwgInR4Iik7Cj4+ICsJaWYgKElTX0VSUihlYnVfaG9z dC0+ZG1hX3R4KSkKPj4gKwkJcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGVidV9o b3N0LT5kbWFfdHgpLAo+PiArCQkJCSAgICAgImZhaWxlZCB0byByZXF1ZXN0IERNQSB0eCBjaGFu IS5cbiIpOwo+PiArCj4+ICsJZWJ1X2hvc3QtPmRtYV9yeCA9IGRtYV9yZXF1ZXN0X2NoYW4oZGV2 LCAicngiKTsKPj4gKwlpZiAoSVNfRVJSKGVidV9ob3N0LT5kbWFfcngpKQo+PiArCQlyZXR1cm4g ZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoZWJ1X2hvc3QtPmRtYV9yeCksCj4+ICsJCQkJICAg ICAiZmFpbGVkIHRvIHJlcXVlc3QgRE1BIHJ4IGNoYW4hLlxuIik7Cj4+ICsKPj4gKwlmb3IgKGkg PSAwOyBpIDwgTUFYX0NTOyBpKyspIHsKPj4gKwkJcmVzbmFtZSA9IGRldm1fa2FzcHJpbnRmKGRl diwgR0ZQX0tFUk5FTCwgImFkZHJfc2VsJWQiLCBpKTsKPj4gKwkJcmVzID0gcGxhdGZvcm1fZ2V0 X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwKPj4gKwkJCQkJCSAgIHJlc25h bWUpOwo+PiArCQlpZiAoIXJlcykKPj4gKwkJCXJldHVybiAtRUlOVkFMOwo+PiArCQllYnVfaG9z dC0+Y3NbaV0uYWRkcl9zZWwgPSByZXMtPnN0YXJ0Owo+PiArCQl3cml0ZWwoZWJ1X2hvc3QtPmNz W2ldLmFkZHJfc2VsIHwgRUJVX0FERFJfTUFTSyg1KSB8Cj4+ICsJCSAgICAgICBFQlVfQUREUl9T RUxfUkVHRU4sIGVidV9ob3N0LT5lYnUgKyBFQlVfQUREUl9TRUwoaSkpOwo+PiArCX0KPj4gKwo+ PiArCW5hbmRfc2V0X2ZsYXNoX25vZGUoJmVidV9ob3N0LT5jaGlwLCBkZXYtPm9mX25vZGUpOwo+ PiArCWlmICghbXRkLT5uYW1lKSB7Cj4+ICsJCWRldl9lcnIoZWJ1X2hvc3QtPmRldiwgIk5BTkQg bGFiZWwgcHJvcGVydHkgaXMgbWFuZGF0b3J5XG4iKTsKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ ICsJfQo+PiArCj4+ICsJbXRkID0gbmFuZF90b19tdGQoJmVidV9ob3N0LT5jaGlwKTsKPj4gKwlt dGQtPmRldi5wYXJlbnQgPSBkZXY7Cj4+ICsJZWJ1X2hvc3QtPmRldiA9IGRldjsKPj4gKwo+PiAr CXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGVidV9ob3N0KTsKPj4gKwluYW5kX3NldF9jb250 cm9sbGVyX2RhdGEoJmVidV9ob3N0LT5jaGlwLCBlYnVfaG9zdCk7Cj4+ICsKPj4gKwluYW5kID0g JmVidV9ob3N0LT5jaGlwOwo+PiArCW5hbmQtPmNvbnRyb2xsZXIgPSAmZWJ1X2hvc3QtPmNvbnRy b2xsZXI7Cj4+ICsJbmFuZC0+Y29udHJvbGxlci0+b3BzID0gJmVidV9uYW5kX2NvbnRyb2xsZXJf b3BzOwo+PiArCj4+ICsJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICov Cj4+ICsJcmV0ID0gbmFuZF9zY2FuKCZlYnVfaG9zdC0+Y2hpcCwgMSk7Cj4+ICsJaWYgKHJldCkK Pj4gKwkJZ290byBlcnJfY2xlYW51cF9kbWE7Cj4+ICsKPj4gKwlyZXQgPSBtdGRfZGV2aWNlX3Jl Z2lzdGVyKG10ZCwgTlVMTCwgMCk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJZ290byBlcnJfY2xlYW5f bmFuZDsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArCj4+ICtlcnJfY2xlYW5fbmFuZDoKPj4gKwlu YW5kX2NsZWFudXAoJmVidV9ob3N0LT5jaGlwKTsKPj4gK2Vycl9jbGVhbnVwX2RtYToKPj4gKwll YnVfZG1hX2NsZWFudXAoZWJ1X2hvc3QpOwo+PiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShlYnVf aG9zdC0+Y2xrKTsKPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBp bnQgZWJ1X25hbmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICt7Cj4+ ICsJc3RydWN0IGVidV9uYW5kX2NvbnRyb2xsZXIgKmVidV9ob3N0ID0gcGxhdGZvcm1fZ2V0X2Ry dmRhdGEocGRldik7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCXJldCA9IG10ZF9kZXZpY2VfdW5y ZWdpc3RlcihuYW5kX3RvX210ZCgmZWJ1X2hvc3QtPmNoaXApKTsKPj4gKwlXQVJOX09OKHJldCk7 Cj4+ICsJbmFuZF9jbGVhbnVwKCZlYnVfaG9zdC0+Y2hpcCk7Cj4+ICsJZWJ1X25hbmRfZGlzYWJs ZSgmZWJ1X2hvc3QtPmNoaXApOwo+PiArCWVidV9kbWFfY2xlYW51cChlYnVfaG9zdCk7Cj4+ICsJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGVidV9ob3N0LT5jbGspOwo+PiArCj4+ICsJcmV0dXJuIDA7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGVidV9uYW5k X21hdGNoW10gPSB7Cj4+ICsJeyAuY29tcGF0aWJsZSA9ICJpbnRlbCxuYW5kLWNvbnRyb2xsZXIi LCB9LAo+IAo+IE5vIHZlcnNpb24gb3Igc29jIGluIHRoZSBjb21wYXRpYmxlPyAobm90IG1hbmRh dG9yeSkuClllcywgeW91J3JlIHJpZ2h0LCBpdCBzaG91bGQgYmUgImludGVsLGxnbS1lYnVuYW5k IiwgYnV0IHRoaXMgc2FtZSAKZHJpdmVyIHN1cHBvcnRzIDIgZGZmZXJlbnQgU09DJ3MgLCB0aGF0 J3MgdGhlIHJlYXNvbiBrZXB0IGFzIGdlbmVyaWMKImludGVsLG5hbmQtY29udHJvbGxlciIKCkJl c3QgUmVnYXJkcwpWYWRpdmVsCj4gCj4+ICsJe30KPj4gK307Cj4+ICtNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBlYnVfbmFuZF9tYXRjaCk7Cj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1f ZHJpdmVyIGVidV9uYW5kX2RyaXZlciA9IHsKPj4gKwkucHJvYmUgPSBlYnVfbmFuZF9wcm9iZSwK Pj4gKwkucmVtb3ZlID0gZWJ1X25hbmRfcmVtb3ZlLAo+PiArCS5kcml2ZXIgPSB7Cj4+ICsJCS5u YW1lID0gImludGVsLW5hbmQtY29udHJvbGxlciIsCj4+ICsJCS5vZl9tYXRjaF90YWJsZSA9IGVi dV9uYW5kX21hdGNoLAo+PiArCX0sCj4+ICsKPj4gK307Cj4+ICttb2R1bGVfcGxhdGZvcm1fZHJp dmVyKGVidV9uYW5kX2RyaXZlcik7Cj4+ICsKPj4gK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsK Pj4gK01PRFVMRV9BVVRIT1IoIlZhZGl2ZWwgTXVydWdhbiBSIDx2YWRpdmVsLm11cnVnYW54LnJh bXV0aGV2YXJAaW50ZWwuY29tPiIpOwo+PiArTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbCdzIExH TSBFeHRlcm5hbCBCdXMgTkFORCBDb250cm9sbGVyIGRyaXZlciIpOwo+IAo+IFRoYW5rcywKPiBN aXF1w6hsCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KTGludXggTVREIGRpc2N1c3Npb24gbWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5p bmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbXRkLwo=