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.3 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,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 F40E4C43603 for ; Mon, 16 Dec 2019 21:04:38 +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 BBA9E22464 for ; Mon, 16 Dec 2019 21:04:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="IxGX0UIf" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org BBA9E22464 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-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-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=gkdB8Dw4pbZrm6uJipQkJgqFYH0yo1rkU/QPBt7PWP4=; b=IxGX0UIfRcJu6i9NCG3A77v+q H4WdqN5HFI9O5UkNOhJdmXWgzxi760XI+0WTAW4XwtK8h3J5dT0sNtD/jxuAxN4FS2ZT0CI85Kbzj hsHxRoz+w8gzYLmXZuGwzVviGBTlKX4o8BkUPzxNEv8DByPqjy+vqiEa/L9XB0w7qizOMEE5sU8FQ YevxEe7jwv+6RgoTXxh+heeTuE5GVW+Y22TTCaHTSuBqrgIiCNu6VJ0nyG1NuwtHkDXpn1FwDw14Q mw2uJVjILNp1NrJMVpA4VwXiGaOtL+SV27KqAjLDsR1RgRDWsxZ7Y50YmB3rSd0Lm2LJKMoDTDfrj wjqjDSQmQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1igxXh-0001uK-UR; Mon, 16 Dec 2019 21:04:37 +0000 Received: from mga02.intel.com ([134.134.136.20]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1igxXd-0001tt-DJ for linux-arm-kernel@lists.infradead.org; Mon, 16 Dec 2019 21:04:35 +0000 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Dec 2019 13:04:32 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,322,1571727600"; d="scan'208";a="205245149" Received: from yoojae-mobl1.amr.corp.intel.com (HELO [10.7.153.147]) ([10.7.153.147]) by orsmga007.jf.intel.com with ESMTP; 16 Dec 2019 13:04:31 -0800 Subject: Re: [PATCH v11 14/14] hwmon: Add PECI dimmtemp driver To: Guenter Roeck , Rob Herring , Greg Kroah-Hartman , Lee Jones , Jean Delvare , Mark Rutland , Joel Stanley , Andrew Jeffery , Jonathan Corbet , Gustavo Pimentel , Kishon Vijay Abraham I , Lorenzo Pieralisi , "Darrick J . Wong" , Eric Sandeen , Arnd Bergmann , Wu Hao , Tomohiro Kusumi , "Bryant G . Ly" , Frederic Barrat , "David S . Miller" , Mauro Carvalho Chehab , Andrew Morton , Randy Dunlap , Philippe Ombredanne , Vinod Koul , Stephen Boyd , David Kershner , Uwe Kleine-Konig , Sagar Dharia , Johan Hovold , Thomas Gleixner , Juergen Gross , Cyrille Pitchen , Tomer Maimon References: <20191211194624.2872-1-jae.hyun.yoo@linux.intel.com> <20191211194624.2872-15-jae.hyun.yoo@linux.intel.com> From: Jae Hyun Yoo Message-ID: <5ed9f292-e024-ffda-a1a8-870ba0f05c58@linux.intel.com> Date: Mon, 16 Dec 2019 13:04:31 -0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191216_130433_529676_23B54841 X-CRM114-Status: GOOD ( 27.71 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-hwmon@vger.kernel.org, devicetree@vger.kernel.org, linux-doc@vger.kernel.org, openbmc@lists.ozlabs.org, Miguel Ojeda , Andrew Lunn , Stef van Os , Jason M Biils , Andy Shevchenko , linux-arm-kernel@lists.infradead.org, Alan Cox Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgR3VlbnRlciwKCk9uIDEyLzEyLzIwMTkgMTA6MzIgUE0sIEd1ZW50ZXIgUm9lY2sgd3JvdGU6 Cj4gT24gMTIvMTEvMTkgMTE6NDYgQU0sIEphZSBIeXVuIFlvbyB3cm90ZToKPj4gVGhpcyBjb21t aXQgYWRkcyBQRUNJIGRpbW10ZW1wIGh3bW9uIGRyaXZlci4KPj4KPj4gQ2M6IEd1ZW50ZXIgUm9l Y2sgPGxpbnV4QHJvZWNrLXVzLm5ldD4KPj4gQ2M6IEplYW4gRGVsdmFyZSA8amRlbHZhcmVAc3Vz ZS5jb20+Cj4+IENjOiBBbGFuIENveCA8YWxhbkBsaW51eC5pbnRlbC5jb20+Cj4+IENjOiBBbmRy ZXcgSmVmZmVyeSA8YW5kcmV3QGFqLmlkLmF1Pgo+PiBDYzogQW5keSBTaGV2Y2hlbmtvIDxhbmRy aXkuc2hldmNoZW5rb0BsaW51eC5pbnRlbC5jb20+Cj4+IENjOiBBcm5kIEJlcmdtYW5uIDxhcm5k QGFybmRiLmRlPgo+PiBDYzogSmFzb24gTSBCaWlscyA8amFzb24ubS5iaWxsc0BsaW51eC5pbnRl bC5jb20+Cj4+IENjOiBKb2VsIFN0YW5sZXkgPGpvZWxAam1zLmlkLmF1Pgo+PiBDYzogTWlndWVs IE9qZWRhIDxtaWd1ZWwub2plZGEuc2FuZG9uaXNAZ21haWwuY29tPgo+PiBDYzogQW5kcmV3IEx1 bm4gPGFuZHJld0BsdW5uLmNoPgo+PiBDYzogU3RlZiB2YW4gT3MgPHN0ZWYudmFuLm9zQHByb2Ry aXZlLXRlY2hub2xvZ2llcy5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6IEphZSBIeXVuIFlvbyA8amFl Lmh5dW4ueW9vQGxpbnV4LmludGVsLmNvbT4KPj4gUmV2aWV3ZWQtYnk6IEhhaXl1ZSBXYW5nIDxo YWl5dWUud2FuZ0BsaW51eC5pbnRlbC5jb20+Cj4+IFJldmlld2VkLWJ5OiBKYW1lcyBGZWlzdCA8 amFtZXMuZmVpc3RAbGludXguaW50ZWwuY29tPgo+PiBSZXZpZXdlZC1ieTogVmVybm9uIE1hdWVy eSA8dmVybm9uLm1hdWVyeUBsaW51eC5pbnRlbC5jb20+Cj4+IEFja2VkLWJ5OiBHdWVudGVyIFJv ZWNrIDxsaW51eEByb2Vjay11cy5uZXQ+Cj4+IC0tLQo+PiBDaGFuZ2VzIHNpbmNlIHYxMDoKPj4g LSBBZGRlZCBTa3lsYWtlIFhlb24gRCBzdXBwb3J0Lgo+PiAtIEFkZGVkIG1heCBhbmQgY3JpdCBw cm9wZXJ0aWVzIGZvciB0ZW1wZXJhdHVyZSB0aHJlc2hvbGQgY2hlY2tpbmcuCj4+IC0gRml4ZWQg bWlub3IgYnVncyBhbmQgc3R5bGUgaXNzdWVzLgo+Pgo+PiDCoCBkcml2ZXJzL2h3bW9uL0tjb25m aWfCoMKgwqDCoMKgwqDCoMKgIHzCoCAxNCArKwo+PiDCoCBkcml2ZXJzL2h3bW9uL01ha2VmaWxl wqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4+IMKgIGRyaXZlcnMvaHdtb24vcGVjaS1kaW1tdGVt cC5jIHwgMzkzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gwqAgMyBmaWxl cyBjaGFuZ2VkLCA0MDggaW5zZXJ0aW9ucygrKQo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9od21vbi9wZWNpLWRpbW10ZW1wLmMKPj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdt b24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwo+PiBpbmRleCBiNjYwNDc1OTU3OWMu LmQzMzcwZmJhYjQwYyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCj4+ICsr KyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwo+PiBAQCAtMTM2Myw2ICsxMzYzLDIwIEBAIGNvbmZp ZyBTRU5TT1JTX1BFQ0lfQ1BVVEVNUAo+PiDCoMKgwqDCoMKgwqDCoCBUaGlzIGRyaXZlciBjYW4g YWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKPj4gwqDCoMKgwqDC oMKgwqAgd2lsbCBiZSBjYWxsZWQgcGVjaS1jcHV0ZW1wLgo+PiArY29uZmlnIFNFTlNPUlNfUEVD SV9ESU1NVEVNUAo+PiArwqDCoMKgIHRyaXN0YXRlICJQRUNJIERJTU0gdGVtcGVyYXR1cmUgbW9u aXRvcmluZyBjbGllbnQiCj4+ICvCoMKgwqAgZGVwZW5kcyBvbiBQRUNJCj4+ICvCoMKgwqAgc2Vs ZWN0IE1GRF9JTlRFTF9QRUNJX0NMSUVOVAo+PiArwqDCoMKgIGhlbHAKPj4gK8KgwqDCoMKgwqAg SWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBnZW5lcmljIEludGVs IFBFQ0kgCj4+IGh3bW9uCj4+ICvCoMKgwqDCoMKgIGRyaXZlciB3aGljaCBwcm92aWRlcyBEaWdp dGFsIFRoZXJtYWwgU2Vuc29yIChEVFMpIHRoZXJtYWwgCj4+IHJlYWRpbmdzIG9mCj4+ICvCoMKg wqDCoMKgIERJTU0gY29tcG9uZW50cyB0aGF0IGFyZSBhY2Nlc3NpYmxlIHVzaW5nIHRoZSBQRUNJ IENsaWVudCBDb21tYW5kCj4+ICvCoMKgwqDCoMKgIFN1aXRlIHZpYSB0aGUgcHJvY2Vzc29yIFBF Q0kgY2xpZW50Lgo+PiArwqDCoMKgwqDCoCBDaGVjayA8ZmlsZTpEb2N1bWVudGF0aW9uL2h3bW9u L3BlY2ktZGltbXRlbXAucnN0PiBmb3IgZGV0YWlscy4KPj4gKwo+PiArwqDCoMKgwqDCoCBUaGlz IGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUK Pj4gK8KgwqDCoMKgwqAgd2lsbCBiZSBjYWxsZWQgcGVjaS1kaW1tdGVtcC4KPj4gKwo+PiDCoCBz b3VyY2UgImRyaXZlcnMvaHdtb24vcG1idXMvS2NvbmZpZyIKPj4gwqAgY29uZmlnIFNFTlNPUlNf UFdNX0ZBTgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9NYWtlZmlsZSBiL2RyaXZlcnMv aHdtb24vTWFrZWZpbGUKPj4gaW5kZXggZDZmZWE0ODY5N2FmLi40MDE1YzRiNjBiZjQgMTAwNjQ0 Cj4+IC0tLSBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKPj4gKysrIGIvZHJpdmVycy9od21vbi9N YWtlZmlsZQo+PiBAQCAtMTQ1LDYgKzE0NSw3IEBAIG9iai0kKENPTkZJR19TRU5TT1JTX1BDODcz NjApwqDCoMKgICs9IHBjODczNjAubwo+PiDCoCBvYmotJChDT05GSUdfU0VOU09SU19QQzg3NDI3 KcKgwqDCoCArPSBwYzg3NDI3Lm8KPj4gwqAgb2JqLSQoQ09ORklHX1NFTlNPUlNfUENGODU5MSnC oMKgwqAgKz0gcGNmODU5MS5vCj4+IMKgIG9iai0kKENPTkZJR19TRU5TT1JTX1BFQ0lfQ1BVVEVN UCnCoMKgwqAgKz0gcGVjaS1jcHV0ZW1wLm8KPj4gK29iai0kKENPTkZJR19TRU5TT1JTX1BFQ0lf RElNTVRFTVApwqDCoMKgICs9IHBlY2ktZGltbXRlbXAubwo+PiDCoCBvYmotJChDT05GSUdfU0VO U09SU19QT1dSMTIyMCnCoCArPSBwb3dyMTIyMC5vCj4+IMKgIG9iai0kKENPTkZJR19TRU5TT1JT X1BXTV9GQU4pwqDCoMKgICs9IHB3bS1mYW4ubwo+PiDCoCBvYmotJChDT05GSUdfU0VOU09SU19S QVNQQkVSUllQSV9IV01PTinCoMKgwqAgKz0gcmFzcGJlcnJ5cGktaHdtb24ubwo+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9od21vbi9wZWNpLWRpbW10ZW1wLmMgCj4+IGIvZHJpdmVycy9od21vbi9w ZWNpLWRpbW10ZW1wLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAw MDAwLi45NzRmNDUzZjkzNjYKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2h3bW9u L3BlY2ktZGltbXRlbXAuYwo+PiBAQCAtMCwwICsxLDM5MyBAQAo+PiArLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAKPj4gKy8vIENvcHlyaWdodCAoYykgMjAxOC0yMDE5IEludGVs IENvcnBvcmF0aW9uCj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPgo+PiArI2luY2x1 ZGUgPGxpbnV4L2ppZmZpZXMuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tZmQvaW50ZWwtcGVjaS1j bGllbnQuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPj4gKyNpbmNsdWRlIDxsaW51 eC9vZl9kZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPj4g KyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KPj4gKyNpbmNsdWRlICJwZWNpLWh3bW9uLmgi Cj4+ICsKPj4gKyNkZWZpbmUgRElNTV9NQVNLX0NIRUNLX0RFTEFZX0pJRkZJRVPCoCBtc2Vjc190 b19qaWZmaWVzKDUwMDApCj4+ICsjZGVmaW5lIERJTU1fTUFTS19DSEVDS19SRVRSWV9NQVjCoMKg wqDCoMKgIDYwIC8qIDYwIHggNSBzZWNzID0gNSBtaW51dGVzICovCj4+ICsKPj4gK3N0cnVjdCBw ZWNpX2RpbW10ZW1wIHsKPj4gK8KgwqDCoCBzdHJ1Y3QgcGVjaV9jbGllbnRfbWFuYWdlciAqbWdy Owo+PiArwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldjsKPj4gK8KgwqDCoCBjaGFyIG5hbWVbUEVD SV9OQU1FX1NJWkVdOwo+PiArwqDCoMKgIGNvbnN0IHN0cnVjdCBjcHVfZ2VuX2luZm8gKmdlbl9p bmZvOwo+PiArwqDCoMKgIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3b3JrX3F1ZXVlOwo+PiAr wqDCoMKgIHN0cnVjdCBkZWxheWVkX3dvcmsgd29ya19oYW5kbGVyOwo+PiArwqDCoMKgIHN0cnVj dCBwZWNpX3NlbnNvcl9kYXRhIHRlbXBbRElNTV9OVU1TX01BWF07Cj4+ICvCoMKgwqAgbG9uZyB0 ZW1wX21heFtESU1NX05VTVNfTUFYXTsKPj4gK8KgwqDCoCBsb25nIHRlbXBfY3JpdFtESU1NX05V TVNfTUFYXTsKPj4gK8KgwqDCoCB1MzIgZGltbV9tYXNrOwo+PiArwqDCoMKgIGludCByZXRyeV9j b3VudDsKPj4gK8KgwqDCoCB1MzIgdGVtcF9jb25maWdbRElNTV9OVU1TX01BWCArIDFdOwo+PiAr wqDCoMKgIHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gdGVtcF9pbmZvOwo+PiArwqDCoMKgIGNv bnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKmluZm9bMl07Cj4+ICvCoMKgwqAgc3RydWN0 IGh3bW9uX2NoaXBfaW5mbyBjaGlwOwo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IGNoYXIg KmRpbW10ZW1wX2xhYmVsW0NIQU5fUkFOS19NQVhdW0RJTU1fSURYX01BWF0gPSB7Cj4+ICvCoMKg wqAgeyAiRElNTSBBMSIsICJESU1NIEEyIiwgIkRJTU0gQTMiIH0sCj4+ICvCoMKgwqAgeyAiRElN TSBCMSIsICJESU1NIEIyIiwgIkRJTU0gQjMiIH0sCj4+ICvCoMKgwqAgeyAiRElNTSBDMSIsICJE SU1NIEMyIiwgIkRJTU0gQzMiIH0sCj4+ICvCoMKgwqAgeyAiRElNTSBEMSIsICJESU1NIEQyIiwg IkRJTU0gRDMiIH0sCj4+ICvCoMKgwqAgeyAiRElNTSBFMSIsICJESU1NIEUyIiwgIkRJTU0gRTMi IH0sCj4+ICvCoMKgwqAgeyAiRElNTSBGMSIsICJESU1NIEYyIiwgIkRJTU0gRjMiIH0sCj4+ICvC oMKgwqAgeyAiRElNTSBHMSIsICJESU1NIEcyIiwgIkRJTU0gRzMiIH0sCj4+ICvCoMKgwqAgeyAi RElNTSBIMSIsICJESU1NIEgyIiwgIkRJTU0gSDMiIH0sCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMg aW5saW5lIGludCByZWFkX2Rkcl9kaW1tX3RlbXBfY29uZmlnKHN0cnVjdCBwZWNpX2RpbW10ZW1w ICpwcml2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBpbnQgY2hhbl9yYW5rLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB1OCAqY2ZnX2RhdGEpCj4+ICt7Cj4+ICvCoMKgwqAgcmV0dXJuIHBlY2lfY2xp ZW50X3JlYWRfcGFja2FnZV9jb25maWcocHJpdi0+bWdyLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBQRUNJX01CWF9JTkRFWF9ERFJfRElN TV9URU1QLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBjaGFuX3JhbmssIGNmZ19kYXRhKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBn ZXRfZGltbV90ZW1wKHN0cnVjdCBwZWNpX2RpbW10ZW1wICpwcml2LCBpbnQgZGltbV9ubykKPj4g K3sKPj4gK8KgwqDCoCBpbnQgZGltbV9vcmRlciA9IGRpbW1fbm8gJSBwcml2LT5nZW5faW5mby0+ ZGltbV9pZHhfbWF4Owo+PiArwqDCoMKgIGludCBjaGFuX3JhbmsgPSBkaW1tX25vIC8gcHJpdi0+ Z2VuX2luZm8tPmRpbW1faWR4X21heDsKPj4gK8KgwqDCoCBzdHJ1Y3QgcGVjaV9yZF9wY2lfY2Zn X2xvY2FsX21zZyBycF9tc2c7Cj4+ICvCoMKgwqAgdTjCoCBjZmdfZGF0YVs0XTsKPj4gK8KgwqDC oCBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqAgaWYgKCFwZWNpX3NlbnNvcl9uZWVkX3VwZGF0ZSgm cHJpdi0+dGVtcFtkaW1tX25vXSkpCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gKwo+ PiArwqDCoMKgIHJldCA9IHJlYWRfZGRyX2RpbW1fdGVtcF9jb25maWcocHJpdiwgY2hhbl9yYW5r LCBjZmdfZGF0YSk7Cj4+ICvCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVy biByZXQ7Cj4+ICsKPj4gK8KgwqDCoCBwcml2LT50ZW1wW2RpbW1fbm9dLnZhbHVlID0gY2ZnX2Rh dGFbZGltbV9vcmRlcl0gKiAxMDAwOwo+PiArCj4+ICvCoMKgwqAgc3dpdGNoIChwcml2LT5nZW5f aW5mby0+bW9kZWwpIHsKPj4gK8KgwqDCoCBjYXNlIElOVEVMX0ZBTTZfU0tZTEFLRV9YOgo+PiAr wqDCoMKgwqDCoMKgwqAgcnBfbXNnLmFkZHIgPSBwcml2LT5tZ3ItPmNsaWVudC0+YWRkcjsKPj4g K8KgwqDCoMKgwqDCoMKgIHJwX21zZy5idXMgPSAyOwo+PiArwqDCoMKgwqDCoMKgwqAgLyoKPj4g K8KgwqDCoMKgwqDCoMKgwqAgKiBEZXZpY2UgMTAsIEZ1bmN0aW9uIDI6IElNQyAwIGNoYW5uZWwg MCAtPiByYW5rIDAKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBEZXZpY2UgMTAsIEZ1bmN0aW9uIDY6 IElNQyAwIGNoYW5uZWwgMSAtPiByYW5rIDEKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBEZXZpY2Ug MTEsIEZ1bmN0aW9uIDI6IElNQyAwIGNoYW5uZWwgMiAtPiByYW5rIDIKPj4gK8KgwqDCoMKgwqDC oMKgwqAgKiBEZXZpY2UgMTIsIEZ1bmN0aW9uIDI6IElNQyAxIGNoYW5uZWwgMCAtPiByYW5rIDMK Pj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBEZXZpY2UgMTIsIEZ1bmN0aW9uIDY6IElNQyAxIGNoYW5u ZWwgMSAtPiByYW5rIDQKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBEZXZpY2UgMTMsIEZ1bmN0aW9u IDI6IElNQyAxIGNoYW5uZWwgMiAtPiByYW5rIDUKPj4gK8KgwqDCoMKgwqDCoMKgwqAgKi8KPj4g K8KgwqDCoMKgwqDCoMKgIHJwX21zZy5kZXZpY2UgPSAxMCArIGNoYW5fcmFuayAvIDMgKiAyICsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChjaGFuX3JhbmsgJSAzID09IDIg PyAxIDogMCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBycF9tc2cuZnVuY3Rpb24gPSBjaGFuX3Jhbmsg JSAzID09IDEgPyA2IDogMjsKPj4gK8KgwqDCoMKgwqDCoMKgIHJwX21zZy5yZWcgPSAweDEyMCAr IGRpbW1fb3JkZXIgKiA0Owo+PiArwqDCoMKgwqDCoMKgwqAgcnBfbXNnLnJ4X2xlbiA9IDQ7Cj4+ ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IHBlY2lfY29tbWFuZChwcml2LT5tZ3ItPmNsaWVu dC0+YWRhcHRlciwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBQRUNJ X0NNRF9SRF9QQ0lfQ0ZHX0xPQ0FMLCAmcnBfbXNnKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChy cF9tc2cuY2MgIT0gUEVDSV9ERVZfQ0NfU1VDQ0VTUykKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0ID0gLUVBR0FJTjsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHByaXYt PnRlbXBfbWF4W2RpbW1fbm9dID0gcnBfbXNnLnBjaV9jb25maWdbMV0gKiAxMDAwOwo+PiArwqDC oMKgwqDCoMKgwqAgcHJpdi0+dGVtcF9jcml0W2RpbW1fbm9dID0gcnBfbXNnLnBjaV9jb25maWdb Ml0gKiAxMDAwOwo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqAgY2FzZSBJTlRF TF9GQU02X1NLWUxBS0VfWEQ6Cj4+ICvCoMKgwqDCoMKgwqDCoCBycF9tc2cuYWRkciA9IHByaXYt Pm1nci0+Y2xpZW50LT5hZGRyOwo+PiArwqDCoMKgwqDCoMKgwqAgcnBfbXNnLmJ1cyA9IDI7Cj4+ ICvCoMKgwqDCoMKgwqDCoCAvKgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIERldmljZSAxMCwgRnVu Y3Rpb24gMjogSU1DIDAgY2hhbm5lbCAwIC0+IHJhbmsgMAo+PiArwqDCoMKgwqDCoMKgwqDCoCAq IERldmljZSAxMCwgRnVuY3Rpb24gNjogSU1DIDAgY2hhbm5lbCAxIC0+IHJhbmsgMQo+PiArwqDC oMKgwqDCoMKgwqDCoCAqIERldmljZSAxMiwgRnVuY3Rpb24gMjogSU1DIDEgY2hhbm5lbCAwIC0+ IHJhbmsgMgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIERldmljZSAxMiwgRnVuY3Rpb24gNjogSU1D IDEgY2hhbm5lbCAxIC0+IHJhbmsgMwo+PiArwqDCoMKgwqDCoMKgwqDCoCAqLwo+PiArwqDCoMKg wqDCoMKgwqAgcnBfbXNnLmRldmljZSA9IDEwICsgY2hhbl9yYW5rIC8gMiAqIDI7Cj4+ICvCoMKg wqDCoMKgwqDCoCBycF9tc2cuZnVuY3Rpb24gPSAoY2hhbl9yYW5rICUgMikgPyA2IDogMjsKPj4g K8KgwqDCoMKgwqDCoMKgIHJwX21zZy5yZWcgPSAweDEyMCArIGRpbW1fb3JkZXIgKiA0Owo+PiAr wqDCoMKgwqDCoMKgwqAgcnBfbXNnLnJ4X2xlbiA9IDQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKg IHJldCA9IHBlY2lfY29tbWFuZChwcml2LT5tZ3ItPmNsaWVudC0+YWRhcHRlciwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBQRUNJX0NNRF9SRF9QQ0lfQ0ZHX0xPQ0FM LCAmcnBfbXNnKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChycF9tc2cuY2MgIT0gUEVDSV9ERVZf Q0NfU1VDQ0VTUykKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVBR0FJTjsKPj4g K8KgwqDCoMKgwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVy biByZXQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIHByaXYtPnRlbXBfbWF4W2RpbW1fbm9dID0g cnBfbXNnLnBjaV9jb25maWdbMV0gKiAxMDAwOwo+PiArwqDCoMKgwqDCoMKgwqAgcHJpdi0+dGVt cF9jcml0W2RpbW1fbm9dID0gcnBfbXNnLnBjaV9jb25maWdbMl0gKiAxMDAwOwo+PiArwqDCoMKg wqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqAgY2FzZSBJTlRFTF9GQU02X0hBU1dFTExfWDoKPj4g K8KgwqDCoCBjYXNlIElOVEVMX0ZBTTZfQlJPQURXRUxMX1g6Cj4+ICvCoMKgwqDCoMKgwqDCoCBy cF9tc2cuYWRkciA9IHByaXYtPm1nci0+Y2xpZW50LT5hZGRyOwo+PiArwqDCoMKgwqDCoMKgwqAg cnBfbXNnLmJ1cyA9IDE7Cj4+ICvCoMKgwqDCoMKgwqDCoCAvKgo+PiArwqDCoMKgwqDCoMKgwqDC oCAqIERldmljZSAyMCwgRnVuY3Rpb24gMDogSU1DIDAgY2hhbm5lbCAwIC0+IHJhbmsgMAo+PiAr wqDCoMKgwqDCoMKgwqDCoCAqIERldmljZSAyMCwgRnVuY3Rpb24gMTogSU1DIDAgY2hhbm5lbCAx IC0+IHJhbmsgMQo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIERldmljZSAyMSwgRnVuY3Rpb24gMDog SU1DIDAgY2hhbm5lbCAyIC0+IHJhbmsgMgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIERldmljZSAy MSwgRnVuY3Rpb24gMTogSU1DIDAgY2hhbm5lbCAzIC0+IHJhbmsgMwo+PiArwqDCoMKgwqDCoMKg wqDCoCAqIERldmljZSAyMywgRnVuY3Rpb24gMDogSU1DIDEgY2hhbm5lbCAwIC0+IHJhbmsgNAo+ PiArwqDCoMKgwqDCoMKgwqDCoCAqIERldmljZSAyMywgRnVuY3Rpb24gMTogSU1DIDEgY2hhbm5l bCAxIC0+IHJhbmsgNQo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIERldmljZSAyNCwgRnVuY3Rpb24g MDogSU1DIDEgY2hhbm5lbCAyIC0+IHJhbmsgNgo+PiArwqDCoMKgwqDCoMKgwqDCoCAqIERldmlj ZSAyNCwgRnVuY3Rpb24gMTogSU1DIDEgY2hhbm5lbCAzIC0+IHJhbmsgNwo+PiArwqDCoMKgwqDC oMKgwqDCoCAqLwo+PiArwqDCoMKgwqDCoMKgwqAgcnBfbXNnLmRldmljZSA9IDIwICsgY2hhbl9y YW5rIC8gMiArIGNoYW5fcmFuayAvIDQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCBycF9tc2cuZnVuY3Rp b24gPSBjaGFuX3JhbmsgJSAyOwo+PiArwqDCoMKgwqDCoMKgwqAgcnBfbXNnLnJlZyA9IDB4MTIw ICsgZGltbV9vcmRlciAqIDQ7Cj4+ICvCoMKgwqDCoMKgwqDCoCBycF9tc2cucnhfbGVuID0gNDsK Pj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0ID0gcGVjaV9jb21tYW5kKHByaXYtPm1nci0+Y2xp ZW50LT5hZGFwdGVyLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFBF Q0lfQ01EX1JEX1BDSV9DRkdfTE9DQUwsICZycF9tc2cpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYg KHJwX21zZy5jYyAhPSBQRUNJX0RFVl9DQ19TVUNDRVNTKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXQgPSAtRUFHQUlOOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgcHJp di0+dGVtcF9tYXhbZGltbV9ub10gPSBycF9tc2cucGNpX2NvbmZpZ1sxXSAqIDEwMDA7Cj4+ICvC oMKgwqDCoMKgwqDCoCBwcml2LT50ZW1wX2NyaXRbZGltbV9ub10gPSBycF9tc2cucGNpX2NvbmZp Z1syXSAqIDEwMDA7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCBkZWZhdWx0 Ogo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FT1BOT1RTVVBQOwo+IAo+IEl0IGxvb2tzIGxp a2UgdGhlIHNlbnNvcnMgYXJlIGNyZWF0ZWQgZXZlbiBvbiB1bnN1cHBvcnRlZCBwbGF0Zm9ybXMs Cj4gd2hpY2ggd291bGQgZ2VuZXJhdGUgZXJyb3IgbWVzc2FnZXMgd2hlbmV2ZXIgc29tZW9uZSB0 cmllcyB0byByZWFkCj4gdGhlIGF0dHJpYnV0ZXMuCj4gCj4gVGhlcmUgc2hvdWxkIGJlIHNvbWUg Y29kZSBlYXJseSBvbiBjaGVja2luZyB0aGlzLCBhbmQgdGhlIGRyaXZlcgo+IHNob3VsZCBub3Qg ZXZlbiBpbnN0YW50aWF0ZSBpZiB0aGUgQ1BVIG1vZGVsIGlzIG5vdCBzdXBwb3J0ZWQuCgpBY3R1 YWxseSwgdGhpcyAnZGVmYXVsdCcgY2FzZSB3aWxsIG5vdCBiZSBoYXBwZW5lZCBiZWNhdXNlIHRo aXMgZHJpdmVyCndpbGwgYmUgcmVnaXN0ZXJlZCBvbmx5IHdoZW4gdGhlIENQVSBtb2RlbCBpcyBz dXBwb3J0ZWQuIFRoZSBDUFUgbW9kZWwKY2hlY2tpbmcgY29kZSBpcyBpbiAnaW50ZWwtcGVjaS1j bGllbnQuYycgd2hpY2ggaXMgWzExLzE0XSBvZiB0aGlzCnBhdGNoIHNldC4KCj4+ICvCoMKgwqAg fQo+PiArCj4+ICvCoMKgwqAgcGVjaV9zZW5zb3JfbWFya191cGRhdGVkKCZwcml2LT50ZW1wW2Rp bW1fbm9dKTsKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGRpbW10ZW1wX3JlYWRfc3RyaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgY29u c3QgY2hhciAqKnN0cikKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgcGVjaV9kaW1tdGVtcCAqcHJp diA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+PiArwqDCoMKgIHUzMiBkaW1tX2lkeF9tYXggPSBw cml2LT5nZW5faW5mby0+ZGltbV9pZHhfbWF4Owo+PiArwqDCoMKgIGludCBjaGFuX3JhbmssIGRp bW1faWR4Owo+PiArCj4+ICvCoMKgwqAgaWYgKGF0dHIgIT0gaHdtb25fdGVtcF9sYWJlbCkKPj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiAtRU9QTk9UU1VQUDsKPj4gKwo+PiArwqDCoMKgIGNoYW5f cmFuayA9IGNoYW5uZWwgLyBkaW1tX2lkeF9tYXg7Cj4+ICvCoMKgwqAgZGltbV9pZHggPSBjaGFu bmVsICUgZGltbV9pZHhfbWF4Owo+PiArwqDCoMKgICpzdHIgPSBkaW1tdGVtcF9sYWJlbFtjaGFu X3JhbmtdW2RpbW1faWR4XTsKPiAKPiBTaW1pbGFyIHRvIHRoZSBvdGhlciBwYXRjaCwgSSBhbSBj b25jZXJuZWQgdGhhdCB0aGlzIGNhbiBlbmQgdXAgc2V0dGluZyAKPiAqc3RyCj4gdG8gTlVMTCBh dCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuCgpPa2F5LiBJJ2xsIG1ha2UgZHluYW1pYyBsYWJl bCBzdHJpbmcgdGFibGUgZ2VuZXJhdGlvbiBjb2RlIGZvciBpdCBhcwp3ZWxsLgoKPj4gKwo+PiAr wqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGRpbW10ZW1wX3JlYWQo c3RydWN0IGRldmljZSAqZGV2LCBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyAKPj4gdHlwZSwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgYXR0ciwgaW50IGNoYW5uZWwsIGxvbmcgKnZh bCkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgcGVjaV9kaW1tdGVtcCAqcHJpdiA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOwo+PiArwqDCoMKgIGludCByZXQ7Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBn ZXRfZGltbV90ZW1wKHByaXYsIGNoYW5uZWwpOwo+PiArwqDCoMKgIGlmIChyZXQpCj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArCj4+ICvCoMKgwqAgc3dpdGNoIChhdHRyKSB7Cj4+ ICvCoMKgwqAgY2FzZSBod21vbl90ZW1wX2lucHV0Ogo+PiArwqDCoMKgwqDCoMKgwqAgKnZhbCA9 IHByaXYtPnRlbXBbY2hhbm5lbF0udmFsdWU7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4g K8KgwqDCoCBjYXNlIGh3bW9uX3RlbXBfbWF4Ogo+PiArwqDCoMKgwqDCoMKgwqAgKnZhbCA9IHBy aXYtPnRlbXBfbWF4W2NoYW5uZWxdOwo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKg wqAgY2FzZSBod21vbl90ZW1wX2NyaXQ6Cj4+ICvCoMKgwqDCoMKgwqDCoCAqdmFsID0gcHJpdi0+ dGVtcF9jcml0W2NoYW5uZWxdOwo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqAg ZGVmYXVsdDoKPj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IC1FT1BOT1RTVVBQOwo+PiArwqDCoMKg wqDCoMKgwqAgYnJlYWs7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgcmV0dXJuIHJldDsK Pj4gK30KPj4gKwo+PiArc3RhdGljIHVtb2RlX3QgZGltbXRlbXBfaXNfdmlzaWJsZShjb25zdCB2 b2lkICpkYXRhLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0g aHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgdTMyIGF0dHIsIGludCBjaGFubmVsKQo+PiArewo+PiArwqDCoMKgIGNvbnN0IHN0 cnVjdCBwZWNpX2RpbW10ZW1wICpwcml2ID0gZGF0YTsKPj4gKwo+PiArwqDCoMKgIGlmIChwcml2 LT50ZW1wX2NvbmZpZ1tjaGFubmVsXSAmIEJJVChhdHRyKSAmJgo+PiArwqDCoMKgwqDCoMKgwqAg cHJpdi0+ZGltbV9tYXNrICYgQklUKGNoYW5uZWwpKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IDA0NDQ7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNv bnN0IHN0cnVjdCBod21vbl9vcHMgZGltbXRlbXBfb3BzID0gewo+PiArwqDCoMKgIC5pc192aXNp YmxlID0gZGltbXRlbXBfaXNfdmlzaWJsZSwKPj4gK8KgwqDCoCAucmVhZF9zdHJpbmcgPSBkaW1t dGVtcF9yZWFkX3N0cmluZywKPj4gK8KgwqDCoCAucmVhZCA9IGRpbW10ZW1wX3JlYWQsCj4+ICt9 Owo+PiArCj4+ICtzdGF0aWMgaW50IGNoZWNrX3BvcHVsYXRlZF9kaW1tcyhzdHJ1Y3QgcGVjaV9k aW1tdGVtcCAqcHJpdikKPj4gK3sKPj4gK8KgwqDCoCB1MzIgY2hhbl9yYW5rX21heCA9IHByaXYt Pmdlbl9pbmZvLT5jaGFuX3JhbmtfbWF4Owo+PiArwqDCoMKgIHUzMiBkaW1tX2lkeF9tYXggPSBw cml2LT5nZW5faW5mby0+ZGltbV9pZHhfbWF4Owo+PiArwqDCoMKgIGludCBjaGFuX3JhbmssIGRp bW1faWR4Owo+PiArwqDCoMKgIHU4wqAgY2ZnX2RhdGFbNF07Cj4+ICsKPj4gK8KgwqDCoCBmb3Ig KGNoYW5fcmFuayA9IDA7IGNoYW5fcmFuayA8IGNoYW5fcmFua19tYXg7IGNoYW5fcmFuaysrKSB7 Cj4+ICvCoMKgwqDCoMKgwqDCoCBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCByZXQg PSByZWFkX2Rkcl9kaW1tX3RlbXBfY29uZmlnKHByaXYsIGNoYW5fcmFuaywgY2ZnX2RhdGEpOwo+ PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBw cml2LT5kaW1tX21hc2sgPSAwOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0 Owo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGRpbW1f aWR4ID0gMDsgZGltbV9pZHggPCBkaW1tX2lkeF9tYXg7IGRpbW1faWR4KyspCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlmIChjZmdfZGF0YVtkaW1tX2lkeF0pCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcHJpdi0+ZGltbV9tYXNrIHw9IEJJVChjaGFuX3JhbmsgKgo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGRpbW1faWR4X21heCArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGltbV9pZHgpOwo+PiArwqDCoMKgIH0KPj4gKwo+ PiArwqDCoMKgIGlmICghcHJpdi0+ZGltbV9tYXNrKQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJu IC1FQUdBSU47Cj4+ICsKPj4gK8KgwqDCoCBkZXZfZGJnKHByaXYtPmRldiwgIlNjYW5uZWQgcG9w dWxhdGVkIERJTU1zOiAweCV4XG4iLCAKPj4gcHJpdi0+ZGltbV9tYXNrKTsKPj4gKwo+PiArwqDC oMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGNyZWF0ZV9kaW1tX3RlbXBf aW5mbyhzdHJ1Y3QgcGVjaV9kaW1tdGVtcCAqcHJpdikKPj4gK3sKPj4gK8KgwqDCoCBpbnQgcmV0 LCBpLCBjb25maWdfaWR4LCBjaGFubmVsczsKPj4gK8KgwqDCoCBzdHJ1Y3QgZGV2aWNlICpod21v bl9kZXY7Cj4+ICsKPj4gK8KgwqDCoCByZXQgPSBjaGVja19wb3B1bGF0ZWRfZGltbXMocHJpdik7 Cj4+ICvCoMKgwqAgaWYgKHJldCkgewo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA9PSAtRUFH QUlOKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChwcml2LT5yZXRyeV9jb3VudCA8 IERJTU1fTUFTS19DSEVDS19SRVRSWV9NQVgpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya19xdWV1ZSwKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnByaXYtPndvcmtf aGFuZGxlciwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBESU1NX01BU0tfQ0hFQ0tfREVMQVlfSklGRklFUyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcHJpdi0+cmV0cnlfY291bnQrKzsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBkZXZfZGJnKHByaXYtPmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICJEZWZlcnJlZCBESU1NIHRlbXAgaW5mbyBjcmVhdGlvblxuIik7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZGV2X2Vycihwcml2LT5kZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAiVGltZW91dCBESU1NIHRlbXAgaW5mbyBjcmVhdGlvblxuIik7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVUSU1FRE9VVDsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArCj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGNo YW5uZWxzID0gcHJpdi0+Z2VuX2luZm8tPmNoYW5fcmFua19tYXggKgo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqAgcHJpdi0+Z2VuX2luZm8tPmRpbW1faWR4X21heDsKPj4gK8KgwqDCoCBmb3IgKGkg PSAwLCBjb25maWdfaWR4ID0gMDsgaSA8IGNoYW5uZWxzOyBpKyspCj4+ICvCoMKgwqDCoMKgwqDC oCBpZiAocHJpdi0+ZGltbV9tYXNrICYgQklUKGkpKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB3aGlsZSAoaSA+PSBjb25maWdfaWR4KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHByaXYtPnRlbXBfY29uZmlnW2NvbmZpZ19pZHgrK10gPQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSFdNT05fVF9MQUJFTCB8IEhXTU9OX1RfSU5QVVQgfAo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSFdNT05fVF9NQVggfCBI V01PTl9UX0NSSVQ7Cj4+ICsKPj4gK8KgwqDCoCBwcml2LT5jaGlwLm9wcyA9ICZkaW1tdGVtcF9v cHM7Cj4+ICvCoMKgwqAgcHJpdi0+Y2hpcC5pbmZvID0gcHJpdi0+aW5mbzsKPj4gKwo+PiArwqDC oMKgIHByaXYtPmluZm9bMF0gPSAmcHJpdi0+dGVtcF9pbmZvOwo+PiArCj4+ICvCoMKgwqAgcHJp di0+dGVtcF9pbmZvLnR5cGUgPSBod21vbl90ZW1wOwo+PiArwqDCoMKgIHByaXYtPnRlbXBfaW5m by5jb25maWcgPSBwcml2LT50ZW1wX2NvbmZpZzsKPj4gKwo+PiArwqDCoMKgIGh3bW9uX2RldiA9 IGRldm1faHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhwcml2LT5kZXYsCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwcml2 LT5uYW1lLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcHJpdiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICZwcml2LT5jaGlwLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTlVMTCk7Cj4+ICvCoMKgwqAg cmV0ID0gUFRSX0VSUl9PUl9aRVJPKGh3bW9uX2Rldik7Cj4+ICvCoMKgwqAgaWYgKCFyZXQpCj4+ ICvCoMKgwqDCoMKgwqDCoCBkZXZfZGJnKHByaXYtPmRldiwgIiVzOiBzZW5zb3IgJyVzJ1xuIiwK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X25hbWUoaHdtb25fZGV2KSwgcHJpdi0+bmFt ZSk7Cj4+ICsKPiAKPiBBbnkgY2hhbmNlIHRvIG1ha2UgdGhpcyBjb25zaXN0ZW50IHdpdGggdGhl IG90aGVyIGRyaXZlciA/CgpXaWxsIGNoYW5nZSB0aGlzIHRvOgoKaWYgKElTX0VSUihod21vbl9k ZXYpKSB7CglkZXZfZXJyKCZwcml2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgaHdtb24gZGV2 aWNlXG4iKTsKCXJldHVybiBQVFJfRVJSKGh3bW9uX2Rldik7Cn0KCj4+ICvCoMKgwqAgcmV0dXJu IHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgY3JlYXRlX2RpbW1fdGVtcF9pbmZvX2Rl bGF5ZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBk ZWxheWVkX3dvcmsgKmR3b3JrID0gdG9fZGVsYXllZF93b3JrKHdvcmspOwo+PiArwqDCoMKgIHN0 cnVjdCBwZWNpX2RpbW10ZW1wICpwcml2ID0gY29udGFpbmVyX29mKGR3b3JrLCBzdHJ1Y3QgCj4+ IHBlY2lfZGltbXRlbXAsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB3b3JrX2hhbmRsZXIpOwo+PiArwqDCoMKgIGludCByZXQ7Cj4+ICsKPj4g K8KgwqDCoCByZXQgPSBjcmVhdGVfZGltbV90ZW1wX2luZm8ocHJpdik7Cj4+ICvCoMKgwqAgaWYg KHJldCAmJiByZXQgIT0gLUVBR0FJTikKPj4gK8KgwqDCoMKgwqDCoMKgIGRldl9kYmcocHJpdi0+ ZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBESU1NIHRlbXAgaW5mb1xuIik7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBpbnQgcGVjaV9kaW1tdGVtcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQo+PiArewo+PiArwqDCoMKgIHN0cnVjdCBwZWNpX2NsaWVudF9tYW5hZ2VyICptZ3IgPSBk ZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7Cj4+ICvCoMKgwqAgc3RydWN0IGRldmlj ZSAqZGV2ID0gJnBkZXYtPmRldjsKPj4gK8KgwqDCoCBzdHJ1Y3QgcGVjaV9kaW1tdGVtcCAqcHJp djsKPj4gK8KgwqDCoCBpbnQgcmV0Owo+PiArCj4+ICvCoMKgwqAgaWYgKChtZ3ItPmNsaWVudC0+ YWRhcHRlci0+Y21kX21hc2sgJgo+PiArwqDCoMKgwqDCoMKgwqAgKEJJVChQRUNJX0NNRF9HRVRf VEVNUCkgfCBCSVQoUEVDSV9DTURfUkRfUEtHX0NGRykpKSAhPQo+PiArwqDCoMKgwqDCoMKgwqAg KEJJVChQRUNJX0NNRF9HRVRfVEVNUCkgfCBCSVQoUEVDSV9DTURfUkRfUEtHX0NGRykpKQo+PiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9ERVY7Cj4+ICsKPj4gK8KgwqDCoCBwcml2ID0gZGV2 bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7Cj4+ICvCoMKgwqAgaWYg KCFwcml2KQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+ICsKPj4gK8KgwqDC oCBkZXZfc2V0X2RydmRhdGEoZGV2LCBwcml2KTsKPj4gK8KgwqDCoCBwcml2LT5tZ3IgPSBtZ3I7 Cj4+ICvCoMKgwqAgcHJpdi0+ZGV2ID0gZGV2Owo+PiArwqDCoMKgIHByaXYtPmdlbl9pbmZvID0g bWdyLT5nZW5faW5mbzsKPj4gKwo+PiArwqDCoMKgIHNucHJpbnRmKHByaXYtPm5hbWUsIFBFQ0lf TkFNRV9TSVpFLCAicGVjaV9kaW1tdGVtcC5jcHUlZCIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgIHBy aXYtPm1nci0+Y2xpZW50LT5hZGRyIC0gUEVDSV9CQVNFX0FERFIpOwo+PiArCj4+ICvCoMKgwqAg cHJpdi0+d29ya19xdWV1ZSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKHByaXYtPm5hbWUsIDAp Owo+PiArwqDCoMKgIGlmICghcHJpdi0+d29ya19xdWV1ZSkKPj4gK8KgwqDCoMKgwqDCoMKgIHJl dHVybiAtRU5PTUVNOwo+PiArCj4+ICvCoMKgwqAgSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPndv cmtfaGFuZGxlciwgCj4+IGNyZWF0ZV9kaW1tX3RlbXBfaW5mb19kZWxheWVkKTsKPj4gKwo+PiAr wqDCoMKgIHJldCA9IGNyZWF0ZV9kaW1tX3RlbXBfaW5mbyhwcml2KTsKPj4gK8KgwqDCoCBpZiAo cmV0ICYmIHJldCAhPSAtRUFHQUlOKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwg IkZhaWxlZCB0byBjcmVhdGUgRElNTSB0ZW1wIGluZm9cbiIpOwo+IAo+IERvZXMgdGhpcyBnZW5l cmF0ZSBlcnJvciBtZXNzYWdlcyBpZiB0aGVyZSBhcmUgbm8gRElNTVMgPwoKWWVzLCB0aGlzIGVy cm9yIG1lc3NhZ2Ugd2lsbCBiZSBwcmludGVkIG91dCBvbmNlIGlmIGl0IG1lZXRzIGEgdGltZW91 dAppbiBESU1NIHNjYW5uaW5nIHdoZW4gdGhlcmUgaXMgbm8gRElNTS4KClRoYW5rcyBhIGxvdCBm b3IgeW91ciByZXZpZXchCgotSmFlCgo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBlcnJfZnJlZV93 cTsKPj4gK8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gMDsKPj4gKwo+PiArZXJyX2Zy ZWVfd3E6Cj4+ICvCoMKgwqAgZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya19xdWV1ZSk7Cj4+ ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBwZWNpX2RpbW10 ZW1wX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+PiArewo+PiArwqDCoMKg IHN0cnVjdCBwZWNpX2RpbW10ZW1wICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYp Owo+PiArCj4+ICvCoMKgwqAgY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT53b3JrX2hh bmRsZXIpOwo+PiArwqDCoMKgIGRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPndvcmtfcXVldWUpOwo+ PiArCj4+ICvCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIHBlY2lfZGltbXRlbXBfaWRzW10gPSB7Cj4+ICvCoMKgwqAg eyAubmFtZSA9ICJwZWNpLWRpbW10ZW1wIiwgLmRyaXZlcl9kYXRhID0gMCB9LAo+PiArwqDCoMKg IHsgfQo+PiArfTsKPj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIHBlY2lfZGltbXRl bXBfaWRzKTsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGVjaV9kaW1t dGVtcF9kcml2ZXIgPSB7Cj4+ICvCoMKgwqAgLnByb2JlwqDCoMKgID0gcGVjaV9kaW1tdGVtcF9w cm9iZSwKPj4gK8KgwqDCoCAucmVtb3ZlwqDCoCA9IHBlY2lfZGltbXRlbXBfcmVtb3ZlLAo+PiAr wqDCoMKgIC5pZF90YWJsZSA9IHBlY2lfZGltbXRlbXBfaWRzLAo+PiArwqDCoMKgIC5kcml2ZXLC oMKgID0geyAubmFtZSA9IEtCVUlMRF9NT0ROQU1FLCB9LAo+PiArfTsKPj4gK21vZHVsZV9wbGF0 Zm9ybV9kcml2ZXIocGVjaV9kaW1tdGVtcF9kcml2ZXIpOwo+PiArCj4+ICtNT0RVTEVfQVVUSE9S KCJKYWUgSHl1biBZb28gPGphZS5oeXVuLnlvb0BsaW51eC5pbnRlbC5jb20+Iik7Cj4+ICtNT0RV TEVfREVTQ1JJUFRJT04oIlBFQ0kgZGltbXRlbXAgZHJpdmVyIik7Cj4+ICtNT0RVTEVfTElDRU5T RSgiR1BMIHYyIik7Cj4+Cj4gCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2Vy bmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1h bi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==