From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= Subject: Re: [RFC 1/5] drm: Add DRM support for tiny LCD displays Date: Thu, 17 Mar 2016 22:51:55 +0100 Message-ID: <56EB26FB.3030402@tronnes.org> References: <1458135259-31050-1-git-send-email-noralf@tronnes.org> <1458135259-31050-2-git-send-email-noralf@tronnes.org> <20160316151123.GP14170@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.domeneshop.no (smtp.domeneshop.no [IPv6:2a01:5b40:0:3005::1]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0B8846EB05 for ; Thu, 17 Mar 2016 21:58:03 +0000 (UTC) In-Reply-To: <20160316151123.GP14170@phenom.ffwll.local> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: thomas.petazzoni@free-electrons.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org CkRlbiAxNi4wMy4yMDE2IDE2OjExLCBza3JldiBEYW5pZWwgVmV0dGVyOgo+IE9uIFdlZCwgTWFy IDE2LCAyMDE2IGF0IDAyOjM0OjE1UE0gKzAxMDAsIE5vcmFsZiBUcsO4bm5lcyB3cm90ZToKPj4g dGlueWRybSBwcm92aWRlcyBhIHZlcnkgc2ltcGxpZmllZCB2aWV3IG9mIERSTSBmb3IgZGlzcGxh eXMgdGhhdCBoYXMKPj4gb25ib2FyZCB2aWRlbyBtZW1vcnkgYW5kIGlzIGNvbm5lY3RlZCB0aHJv dWdoIGEgc2xvdyBidXMgbGlrZSBTUEkvSTJDLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBOb3JhbGYg VHLDuG5uZXMgPG5vcmFsZkB0cm9ubmVzLm9yZz4KPiBZYXksIGl0IGZpbmFsbHkgaGFwcGVucyEg SSBhbHJlYWR5IG1hZGUgYSBjb21tZW50IG9uIHRoZSBjb3ZlciBsZXR0ZXIKPiBhYm91dCB0aGUg ZmJkZXYgc3R1ZmYsIEkgdGhpbmsgdGhhdCdzIHRoZSBiaWdnZXN0IHBhcnQgdG8gc3BsaXQgb3V0 IGZyb20KPiB0aW55ZHJtIGhlcmUuIEknbSBub3QgZW50aXJlbHkgc3VyZSBhIGRldGFpbGVkIGNv ZGUgcmV2aWV3IG1ha2VzIHNlbnNlCj4gYmVmb3JlIHRoYXQgcGFydCBpcyBkb25lIChhbmQgaGV5 IHdlIGNhbiBzdGFydCBtZXJnaW5nIGFscmVhZHkpLCBzbyBqdXN0IGEKPiBoaWdoIGxldmVsIHJl dmlldyBmb3Igbm93Ogo+Cj4gVGhlIGJpZyBzdG9yeSBpbiBrbXMvZHJtIGluIHRoZSBwYXN0IHll YXJzIGlzIHRoYXQgd2UndmUgcmVqZWN0aW5nCj4gYW55dGhpbmcgdGhhdCByZW1vdGVseSBsb29r cyBsaWtlIGEgbWlkbGF5ZXIuIEluc3RlYWQgdGhlIHByZWZlcnJlZCBkZXNpZ24KPiBwYXR0ZXJu IGlzIGEgbGlicmFyeSBvZiBoZWxwZXIgZnVuY3Rpb25zIHRvIGltcGxlbWVudCB1c2VmdWwgZGVm YXVsdAo+IGJlaGF2aW91ciwgb3Igc29tZXRpbWVzIGp1c3QgYnVpbGRpbmcgYmxvY2tzIGZvciB1 c2VmdWwgZGVmYXVsdCBiZWhhdmlvdXIuCj4gQW5kIHRoZW4gYnVpbGQgdXAgcmVhbCBkcml2ZXJz IHVzaW5nIHRoZXNlIHBpZWNlcy4gVGhlIGJlbmVmaXQgb2YgdGhhdCBpcwo+IHR3by1mb2xkOgo+ IC0gZWFzaWVyIHRvIHNoYXJlIGNvZGUgd2l0aCBvdGhlciBkcml2ZXJzIHRoYXQgb25seSBuZWVk IHBhcnQgb2YgdGhlCj4gICAgYmVoYXZpb3VyIChlLmcuIGZiZGV2IGRlZmVycmVkIGlvIHN1cHBv cnQpLgo+IC0gZWFzaWVyIHRvIGFkYXB0IHRvIHNwZWNpYWwgaHcgdGhhdCBuZWVkcyBleGNlcHRp b25zIHNpbmNlIHdvcnN0IGNhc2UgeW91Cj4gICAgY2FuIGp1c3QgY29weXBhc3RlIGFuIGVudGly ZSBob29rLiBPciBpbXBsZW1lbnQgdGhlIHNwZWNpYWwgY2FzZSBhbmQKPiAgICBjYWxsIHRoZSBk ZWZhdWx0IGhlbHBlciBmb3IgdGhlIG5vcm1hbCBjYXNlcy4KPgo+IGx3biBoYXMgYSBnb29kIGFy dGljbGUgb24gdGhpcyBwYXR0ZXJuOgo+Cj4gaHR0cHM6Ly9sd24ubmV0L0FydGljbGVzLzMzNjI2 Mi8KCkkgd2FzIGFmcmFpZCB5b3Ugd291bGQgc2F5ICJtaWRsYXllciIgOi0pCgpIb3cgYWJvdXQg Y3JlYXRpbmcgbWFjcm9zIGxpa2UgU0lNUExFX0RFVl9QTV9PUFMgYW5kIGZyaWVuZHMgdG8gc2lt cGxpZnkKdGhlIGRybV9kcml2ZXIgYm9pbGVycGxhdGUgYW5kIHVzZSB0aGF0IGluIHRoZSBkcml2 ZXJzPwoKI2RlZmluZSBTRVRfRFJNX0RSSVZFUl9HRU1fQ01BX09QUyBcCiAgICAgLmdlbV9mcmVl X29iamVjdCAgICA9IGRybV9nZW1fY21hX2ZyZWVfb2JqZWN0LCBcCiAgICAgLmdlbV92bV9vcHMg ICAgICAgID0gJmRybV9nZW1fY21hX3ZtX29wcywgXAogICAgIC5wcmltZV9oYW5kbGVfdG9fZmQg ICAgPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwgXAogICAgIC5wcmltZV9mZF90b19oYW5k bGUgICAgPSBkcm1fZ2VtX3ByaW1lX2ZkX3RvX2hhbmRsZSwgXAogICAgIC5nZW1fcHJpbWVfaW1w b3J0ICAgID0gZHJtX2dlbV9wcmltZV9pbXBvcnQsIFwKICAgICAuZ2VtX3ByaW1lX2V4cG9ydCAg ICA9IGRybV9nZW1fcHJpbWVfZXhwb3J0LCBcCiAgICAgLmdlbV9wcmltZV9nZXRfc2dfdGFibGUg ICAgPSBkcm1fZ2VtX2NtYV9wcmltZV9nZXRfc2dfdGFibGUsIFwKICAgICAuZ2VtX3ByaW1lX2lt cG9ydF9zZ190YWJsZSA9IGRybV9nZW1fY21hX3ByaW1lX2ltcG9ydF9zZ190YWJsZSwgXAogICAg IC5nZW1fcHJpbWVfdm1hcCAgICAgICAgPSBkcm1fZ2VtX2NtYV9wcmltZV92bWFwLCBcCiAgICAg LmdlbV9wcmltZV92dW5tYXAgICAgPSBkcm1fZ2VtX2NtYV9wcmltZV92dW5tYXAsIFwKICAgICAu Z2VtX3ByaW1lX21tYXAgICAgICAgID0gZHJtX2dlbV9jbWFfcHJpbWVfbW1hcCwgXAogICAgIC5k dW1iX2NyZWF0ZSAgICAgICAgPSBkcm1fZ2VtX2NtYV9kdW1iX2NyZWF0ZSwgXAogICAgIC5kdW1i X21hcF9vZmZzZXQgICAgPSBkcm1fZ2VtX2NtYV9kdW1iX21hcF9vZmZzZXQsIFwKICAgICAuZHVt Yl9kZXN0cm95ICAgICAgICA9IGRybV9nZW1fZHVtYl9kZXN0cm95LAoKI2RlZmluZSBUSU5ZRFJN X0RSTV9EUklWRVIobmFtZV9zdHJ1Y3QsIG5hbWVfc3RyLCBkZXNjX3N0ciwgZGF0ZV9zdHIpIFwK c3RhdGljIHN0cnVjdCBkcm1fZHJpdmVyIG5hbWVfc3RydWN0ID0geyBcCiAgICAgLmRyaXZlcl9m ZWF0dXJlcyAgICA9IERSSVZFUl9HRU0gfCBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9QUklNRSBc CiAgICAgICAgICAgICAgICAgfCBEUklWRVJfQVRPTUlDLCBcCiAgICAgLmxvYWQgICAgICAgICAg ICA9IHRpbnlkcm1fbG9hZCwgXAogICAgIC51bmxvYWQgICAgICAgICAgICA9IHRpbnlkcm1fdW5s b2FkLCBcCiAgICAgLmxhc3RjbG9zZSAgICAgICAgPSB0aW55ZHJtX2xhc3RjbG9zZSwgXAogICAg IFNFVF9EUk1fRFJJVkVSX0dFTV9DTUFfT1BTIFwKICAgICAuZm9wcyAgICAgICAgICAgID0gJnRp bnlkcm1fZm9wcywgXAogICAgIC5uYW1lICAgICAgICAgICAgPSBuYW1lX3N0ciwgXAogICAgIC5k ZXNjICAgICAgICAgICAgPSBkZXNjX3N0ciwgXAogICAgIC5kYXRlICAgICAgICAgICAgPSBkYXRl X3N0ciwgXAogICAgIC5tYWpvciAgICAgICAgICAgID0gMSwgXAogICAgIC5taW5vciAgICAgICAg ICAgID0gMCwgXAp9CgpOb3cgdGhlIGRyaXZlciBjYW4gZG8gdGhpczoKVElOWURSTV9EUk1fRFJJ VkVSKGFkYWZydWl0X3RmdCwgImFkYWZydWl0LXRmdCIsIEFkYWZydWl0IFRGVCIsICIyMDE2MDMx NyIpOwoKSW4gYWRkaXRpb24gdG8gdGhhdCwgdGhlIHRpbnlkcm0gc3BlY2lmaWMgcGFydHMgdGhh dCBtYWtlIHVwCnRpbnlkcm1fbG9hZC91bmxvYWQgY2FuIGJlIGV4cG9ydGVkIGlmIHNvbWVvbmUg d2FudHMgaXQgc2xpZ2h0bHkgZGlmZmVyZW50LgoKCj4gSW4gdGhlIGNhc2Ugb2YgdGlueWRybSBJ IHRoaW5rIHRoYXQgbWVhbnMgd2Ugc2hvdWxkIGhhdmUgYSBidW5jaCBvZiBuZXcKPiBkcm0gaGVs cGVycywgb3IgZXh0ZW5zaW9ucyBmb3IgZXhpc3Rpbmcgb25lczoKPiAtIGZiZGV2IGRlZmVycmVk IGlvIHN1cHBvcnQgdXNpbmcgLT5kaXJ0eWZiIGluIGRybV9mYl9oZWxwZXIuYy4KCkFyZSB5b3Ug dGhpbmtpbmcgc29tZXRoaW5nIGxpa2UgdGhpcz8KCnN0cnVjdCBkcm1fZmJfaGVscGVyX2Z1bmNz IHsKICAgICBpbnQgKCpkaXJ0eWZiKShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyLAog ICAgICAgICAgICAgICAgc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXApOwp9OwoKc3RydWN0IGRy bV9mYl9oZWxwZXIgewogICAgIHNwaW5sb2NrX3QgZGlydHlfbG9jazsKICAgICBzdHJ1Y3QgZHJt X2NsaXBfcmVjdCAqZGlydHlfY2xpcDsKfTsKCgpTaG91bGQgSSBleHRlbmQgZHJtX2ZiX2hlbHBl cl9zeXNfKiBvciBtYWtlIGl0IGV4cGxpY2l0IHdpdGgKZHJtX2ZiX2hlbHBlcl9zeXNfKl9kZWZl cnJlZCBmdW5jdGlvbnM/CgojaWZkZWYgQ09ORklHX0ZCX0RFRkVSUkVEX0lPCi8qIFdpbGwganVz dCByZXR1cm4gaWYgaW5mby0+ZmJkZWZpbyBpcyBub3Qgc2V0ICovCnZvaWQgZHJtX2ZiX2hlbHBl cl9zeXNfZGVmZXJyZWQoc3RydWN0IGZiX2luZm8gKmluZm8sIHUzMiB4LCB1MzIgeSwKICAgICAg ICAgICAgICAgICB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpOwojZWxzZQpzdGF0aWMgaW5saW5lIHZv aWQgZHJtX2ZiX2hlbHBlcl9zeXNfZGVmZXJyZWQoc3RydWN0IGZiX2luZm8gKmluZm8sIHUzMiAK eCwgdTMyIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiB3aWR0aCwgdTMyIGhlaWdo dCkKeyB9CiNlbmRpZgoKdm9pZCBkcm1fZmJfaGVscGVyX3N5c19pbWFnZWJsaXQoc3RydWN0IGZi X2luZm8gKmluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1 Y3QgZmJfaW1hZ2UgKmltYWdlKQp7CiAgICAgICAgIHN5c19pbWFnZWJsaXQoaW5mbywgaW1hZ2Up OwogICAgIGRybV9mYl9oZWxwZXJfc3lzX2RlZmVycmVkKGluZm8sIGltYWdlLT5keCwgaW1hZ2Ut PmR5LCBpbWFnZS0+d2lkdGgsCiAgICAgICAgICAgICAgICAgICAgaW1hZ2UtPmhlaWdodCk7Cn0K Ck9SCgp2b2lkIGRybV9mYl9oZWxwZXJfc3lzX2ltYWdlYmxpdF9kZWZlcnJlZChzdHJ1Y3QgZmJf aW5mbyAqaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCnsKICAgICBkcm1fZmJfaGVscGVyX3N5c19pbWFn ZWJsaXQoaW5mbywgaW1hZ2UpOwogICAgIGRybV9mYl9oZWxwZXJfc3lzX2RlZmVycmVkKGluZm8s IGltYWdlLT5keCwgaW1hZ2UtPmR5LCBpbWFnZS0+d2lkdGgsCiAgICAgICAgICAgICAgICAgICAg aW1hZ2UtPmhlaWdodCk7Cn0KCgpJbml0aWFsbHkgSSB1c2VkIGRybV9mYl9jbWFfaGVscGVyLmMg d2l0aCBzb21lIGFkZGVkIGRlZmVycmVkIGNvZGUuClRoaXMgd29ya2VkIGZpbmUgZm9yIGZiY29u LCBidXQgdGhlIGRlZmVycmVkIG1tYXAgcGFydCBkaWRuJ3Qgd29yayB3ZWxsLgpGb3IgaW5zdGFu Y2Ugd2hlbiB1c2luZyBmYnRlc3QsIEkgZ290IHNob3J0IHJhbmRvbSBob3Jpem9udGFsIGxpbmVz IG9uIHRoZQpkaXNwbGF5IHRoYXQgZGlkbid0IGNvbnRhaW4gdGhlIGxhdGVzdCBwaXhlbHMuIEkg aGFkIHRvIHdyaXRlIHNldmVyYWwgdGltZXMKdG8gL2Rldi9mYjEgdG8gdHJpZ2dlciBhIGRpc3Bs YXkgdXBkYXRlIHRvIGdldCBhbGwgdGhlIHByZXZpb3VzIHBpeGVscyB0byBnbwphd2F5IGFuZCBn ZXQgdGhlIGN1cnJlbnQgaW1hZ2UuIE1heWJlIGl0J3Mgc29tZSBjYWNoaW5nIGlzc3VlLCBJIGRv bid0IGtub3cuClRoZSBSYXNwYmVycnkgUGkgZG9lc24ndCBzdXBwb3J0IDE2LWJpdCBTUEksIHNv IHRpbnlkcm0gZG9lcyBhIGJ5dGUgc3dhcCB0bwphIG5ldyBidWZmZXIgYmVmb3JlIHNlbmRpbmcg aXQgdXNpbmcgOC1iaXQuCk1heWJlIEkgbmVlZCB0byBjYWxsIHNvbWUga2luZCBvZiBETUEgc3lu YyBmdW5jdGlvbj8KClRoZSBkdW1iIGJ1ZmZlciB1c2VzIGRybV9nZW1fY21hX2R1bWJfY3JlYXRl KCkgd2hpY2ggaXMgYmFja2VkIGJ5IGNtYSwgYW5kCnRoYXQgd29ya3MganVzdCBmaW5lIChJIGhh dmUgb25seSB0ZXN0ZWQgd2l0aCBEYXZpZCBIZXJybWFubidzIG1vZGVzZXRbMV0pLgpBIHNpbWls YXIgYnl0ZSBzd2FwcGluZyBoYXBwZW5zIGhlcmUuCgpJIGFsc28gaGFkIHRvIGRvIHRoaXMgZm9y IHRoZSBkZWZlcnJlZCBpbyB0byB3b3JrOgoKaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBfX3BhKGlu Zm8tPnNjcmVlbl9iYXNlKTsKCmRybV9mYl9jbWFfaGVscGVyIGFzc2lnbnMgdGhlIGRtYSBhZGRy ZXNzIHRvIHNtZW1fc3RhcnQsIGJ1dCBhdCBsZWFzdCBvbgp0aGUgUmFzcGJlcnJ5IFBpIHRoaXMg YnVzIGFkZHJlc3MgY2FuJ3QgYmUgdXNlZCBieSBkZWZlcnJlZF9pbwooZmJfZGVmZXJyZWRfaW9f ZmF1bHQoKSkuIEFuZCB0aGUgQVJNIHZlcnNpb24gb2YgX19wYSBzdGF0ZXMgdGhhdCBpdApzaG91 bGRuJ3QgYmUgdXNlZCBieSBkcml2ZXJzLCBzbyB3aGVuIG15IHZtYWxsb2MgdmVyc2lvbiB3b3Jr ZWQsIEkgd2VudAp3aXRoIHRoYXQuIEJ1dCBJIHNlZSB0aGF0IHRoZXJlJ3MgYSB2aXJ0X3RvX3Bo eXMoKSBmdW5jdGlvbiB0aGF0IGRvZXNuJ3QKaGF2ZSB0aGF0IHN0YXRlbWVudCBhYm91dCBub3Qg YmVpbmcgdXNlZCBieSBkcml2ZXJzLCBzbyBtYXliZSB0aGlzIGlzbid0CmEgc2hvdyBzdG9wcGVy IGFmdGVyIGFsbD8KCkFueSB0aG91Z2h0cyBvbiB0aGlzIHByb2JsZW0/IEkgd291bGQgcmF0aGVy IGhhdmUgYSBjbWEgYmFja2VkIGZiZGV2CmZyYW1lYnVmZmVyIHNpbmNlIHRoYXQgd291bGQgZ2l2 ZSBtZSB0aGUgc2FtZSB0eXBlIG9mIG1lbW9yeSBib3RoIGZvcgpmYmRldiBhbmQgRFJNLgoKSSBj YW4gaG93ZXZlciBsaXZlIHdpdGggYSB2bWFsbG9jIGJ1ZmZlciwgYmVjYXVzZSB0aGUgU1BJIHN1 YnN5c3RlbSB1c2VzCnRoZSBETUEgc3RyZWFtaW5nIEFQSSBhbmQgc3VwcG9ydHMgdm1hbGxvYyBi dWZmZXJzIChzcGlfbWFwX2J1ZigpKS4KVGhlIHZhc3QgbWFqb3JpdHkgb2YgdGhlc2UgZGlzcGxh eXMgYXJlIGNvbm5lY3RlZCB0aHJvdWdoIFNQSS4KQWxzbyB0aGUgZG1hIGFkZHJlc3MgYXQgdGhl IGhlYWQgb2YgdGhlIGJ1ZmZlciBpc24ndCBtdWNoIHVzZSB0byBtZSBzaW5jZQphbG1vc3QgYWxs IG9mIHRoZXNlIGRpc3BsYXkgY29udHJvbGxlcnMgc3VwcG9ydHMgcGFydGlhbCB1cGRhdGVzLCBz byBJCmNhbid0IHVzZSBpdCBtdWNoIGFueXdheSAocGFydGlhbCB1cGRhdGVzIGlzbid0IGltcGxl bWVudGVkIGluIHRoZSBjdXJyZW50CmNvZGUgeWV0KS4KClsxXSBodHRwczovL2dpdGh1Yi5jb20v ZHZkaHJtL2RvY3MvYmxvYi9tYXN0ZXIvZHJtLWhvd3RvL21vZGVzZXQuYwoKCj4gLSBIZWxwZXIg dG8gZ2VuZXJhdGUgYSBzaW1wbGUgZGlzcGxheSBwaXBlbGluZSB3aXRoIDEgcGxhbmUsIDEgY3J0 YywgMQo+ICAgIGVuY29kZXIgcG9pbnRpbmcgYXQgYSBzcGVjaWZpYyBkcm1fY29ubmVjdG9yLiBU aGVyZSdzIGxvdHMgb2Ygb3RoZXIKPiAgICBzaW1wbGUgaHcgdGhhdCBjb3VsZCB1c2UgdGhpcy4g TWF5YmUgY3JlYXRlIGEgbmV3Cj4gICAgZHJtX3NpbXBsZV9rbXNfaGVscGVyLmMgZm9yIHRoaXMu Cj4gLSBBIGhlbHBlciB0byBjcmVhdGUgYSBzaW1wbGUgZHJtX2Nvbm5lY3RvciBmcm9tIGEgZHJt X3BhbmVsICh0aGUKPiAgICBnZXRfbW9kZXMgaG9va3MgeW91IGhhdmUgaGVyZSksIG1heWJlIGFs c28gaW4gZHJtX3NpbXBsZV9rbXNfaGVscGVyLmMuCgpIb3cgYWJvdXQgdGhpczoKCnN0cnVjdCBk cm1fY29ubmVjdG9yICpkcm1fc2ltcGxlX2ttc19jcmVhdGVfcGFuZWxfY29ubmVjdG9yKHN0cnVj dCAKZHJtX2RldmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZHJtX3BhbmVsICpwYW5lbCk7CgppbnQgZHJtX3NpbXBsZV9rbXNfY3JlYXRlX3BpcGVsaW5l KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAgICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fcGxhbmVf aGVscGVyX2Z1bmNzICpwbGFuZV9oZWxwZXJfZnVuY3MsCiAgICAgICAgIGNvbnN0IHVpbnQzMl90 ICpwbGFuZV9mb3JtYXRzLCB1bnNpZ25lZCBpbnQgZm9ybWF0X2NvdW50LAogICAgICAgICBjb25z dCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2hlbHBlcl9mdW5jcywKICAgICAg ICAgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jb2Rlcl9oZWxwZXJf ZnVuY3MsCiAgICAgICAgIGludCBlbmNvZGVyX3R5cGUsIHN0cnVjdCBkcm1fY29ubmVjdG9yICpj b25uZWN0b3IpOwoKT3Igd2l0aCBEUk1fTU9ERV9FTkNPREVSX05PTkU6CgppbnQgZHJtX3NpbXBs ZV9rbXNfY3JlYXRlX3BpcGVsaW5lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAgICAgICAgIGNv bnN0IHN0cnVjdCBkcm1fcGxhbmVfaGVscGVyX2Z1bmNzICpwbGFuZV9oZWxwZXJfZnVuY3MsCiAg ICAgICAgIGNvbnN0IHVpbnQzMl90ICpwbGFuZV9mb3JtYXRzLCB1bnNpZ25lZCBpbnQgZm9ybWF0 X2NvdW50LAogICAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRj X2hlbHBlcl9mdW5jcywKICAgICAgICAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7 Cgo+IC0gSGVscGVycyB0byBoYW5kbGUgZGlydHlmYiwgbGlrZSB0aGUgY2xpcCByZWN0IG1lcmdl IGZ1bmN0aW9uIHlvdSBoYXZlIGluCj4gICAgaGVyZS4KPiAtIEhlbHBlciBtYXliZSBmb3IgcHVy ZWx5IHNvZnR3YXJlIGZyYW1lYnVmZmVycyB0aGF0IGFyZSB1cGxvYWRlZCB1c2luZwo+ICAgIGNw dSBhY2Nlc3MgaW5zdGVhZCBvZiBkbWEuCj4KPiBUaGVuIGJ1cy1zcGVjaWZpYyBzdXBwb3J0IHlv dSBoYXZlIGluIGxhdGVyIHBhdGNoZXMgZm9yIHRpbnlkcm0gd291bGQgZWFjaAo+IGJlIGEgc2Vw YXJhdGUgZHJtIGRyaXZlciwgYXNzZW1lYmxlZCB1c2luZyB0aG9zZSBoZWxwZXIgYmxvY2tzLiBJ dCdzIGEKPiBub3RjaCBtb3JlIGJvaWxlcnBsYXRlIG1heWJlLCBidXQgYWxsIHRoZSBzZXBhcmF0 ZSBwaWVjZXMgSSBsaXN0ZWQgYWJvdmUKPiB3b3VsZCBiZSB1c2VmdWwgaW4gZHJpdmVycyBvdXRz aWRlIG9mIGp1c3QgdGlueWRybS4gQW5kIG1heWJlIG90aGVyCj4gZHJpdmVycyB3b3VsZCBuZWVk IGFsbW9zdCBldmVyeXRoaW5nLCBleGNlcHQgdGhlIGRybV9mcmFtZWJ1ZmZlciBtdXN0IGJlCj4g YWxsb2NlZCB1c2luZyB0aGUgZG1hIGFwaSAoaS5lLiB0aG9zZSBzaG91bGQgdXNlIHRoZSBjbWEg aGVscGVycyksIGUuZy4KPiB3aGVuIHlvdXIgZHVtYiBidXMgY2FuIGRvIGRtYSBvZiBzb21lIHNv cnQuCj4KPiBBbnl3YXkgZmlyc3QgdGhvdWdodHMsIEknbSByZWFsbHkgaGFwcHkgdGhhdCBzb21l dGhpbmcgbGlrZSB0aGlzIGZpbmFsbHkKPiBoYXBwZW5zIQo+Cj4gQ2hlZXJzLCBEYW5pZWwKClRo YW5rcyBEYW5pZWwsCgpOb3JhbGYuCgo+PiAtLS0KPj4gICBkcml2ZXJzL2dwdS9kcm0vS2NvbmZp ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArCj4+ICAgZHJpdmVycy9ncHUvZHJt L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwo+PiAgIGRyaXZlcnMv Z3B1L2RybS90aW55ZHJtL0tjb25maWcgICAgICAgICAgICAgICAgICAgIHwgIDExICsKPj4gICBk cml2ZXJzL2dwdS9kcm0vdGlueWRybS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgMSAr Cj4+ICAgZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS9NYWtlZmlsZSAgICAgICAgICAgICAg fCAgIDggKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvaW50ZXJuYWwuaCAgICAg ICAgICAgIHwgIDQzICsrKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRy bS1jb3JlLmMgICAgICAgIHwgMTk0ICsrKysrKysrKysrKwo+PiAgIGRyaXZlcnMvZ3B1L2RybS90 aW55ZHJtL2NvcmUvdGlueWRybS1jcnRjLmMgICAgICAgIHwgMjAzICsrKysrKysrKysrKwo+PiAg IGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1kZWZlcnJlZC5jICAgIHwgMTE2 ICsrKysrKysKPj4gICBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0tZmJkZXYu YyAgICAgICB8IDM0NSArKysrKysrKysrKysrKysrKysrKysKPj4gICBkcml2ZXJzL2dwdS9kcm0v dGlueWRybS9jb3JlL3Rpbnlkcm0tZnJhbWVidWZmZXIuYyB8IDExMiArKysrKysrCj4+ICAgZHJp dmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWhlbHBlcnMuYyAgICAgfCAgOTcgKysr KysrCj4+ICAgZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLXBsYW5lLmMgICAg ICAgfCAgNTAgKysrCj4+ICAgaW5jbHVkZS9kcm0vdGlueWRybS90aW55ZHJtLmggICAgICAgICAg ICAgICAgICAgICAgfCAxNDIgKysrKysrKysrCj4+ICAgMTQgZmlsZXMgY2hhbmdlZCwgMTMyNSBp bnNlcnRpb25zKCspCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aW55 ZHJtL0tjb25maWcKPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Rpbnlk cm0vTWFrZWZpbGUKPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Rpbnlk cm0vY29yZS9NYWtlZmlsZQo+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v dGlueWRybS9jb3JlL2ludGVybmFsLmgKPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWNvcmUuYwo+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0tY3J0Yy5jCj4+ICAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1kZWZlcnJl ZC5jCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUv dGlueWRybS1mYmRldi5jCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS90 aW55ZHJtL2NvcmUvdGlueWRybS1mcmFtZWJ1ZmZlci5jCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1oZWxwZXJzLmMKPj4gICBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLXBsYW5l LmMKPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vdGlueWRybS90aW55ZHJtLmgK Pj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUv ZHJtL0tjb25maWcKPj4gaW5kZXggYzRiZjlhMS4uM2Y4ZWRlMCAxMDA2NDQKPj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPj4g QEAgLTI2NiwzICsyNjYsNSBAQCBzb3VyY2UgImRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tj b25maWciCj4+ICAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vaW14L0tjb25maWciCj4+ICAgCj4+ ICAgc291cmNlICJkcml2ZXJzL2dwdS9kcm0vdmM0L0tjb25maWciCj4+ICsKPj4gK3NvdXJjZSAi ZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vS2NvbmZpZyIKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+PiBpbmRleCAxZTlm ZjRjLi5jN2M1YzE2IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4+IEBAIC03NSwzICs3NSw0IEBAIG9iai15 CQkJKz0gaTJjLwo+PiAgIG9iai15CQkJKz0gcGFuZWwvCj4+ICAgb2JqLXkJCQkrPSBicmlkZ2Uv Cj4+ICAgb2JqLSQoQ09ORklHX0RSTV9GU0xfRENVKSArPSBmc2wtZGN1Lwo+PiArb2JqLSQoQ09O RklHX0RSTV9USU5ZRFJNKSArPSB0aW55ZHJtLwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL3Rpbnlkcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL0tjb25maWcKPj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uZjI5MDA0NQo+PiAtLS0gL2Rl di9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL0tjb25maWcKPj4gQEAgLTAs MCArMSwxMSBAQAo+PiArbWVudWNvbmZpZyBEUk1fVElOWURSTQo+PiArCXRyaXN0YXRlICJTdXBw b3J0IGZvciBzbWFsbCBURlQgTENEIGRpc3BsYXkgbW9kdWxlcyIKPj4gKwlkZXBlbmRzIG9uIERS TQo+PiArCXNlbGVjdCBEUk1fS01TX0hFTFBFUgo+PiArCXNlbGVjdCBEUk1fS01TX0NNQV9IRUxQ RVIKPj4gKwlzZWxlY3QgRFJNX0dFTV9DTUFfSEVMUEVSCj4+ICsJc2VsZWN0IERSTV9QQU5FTAo+ PiArCXNlbGVjdCBWSURFT01PREVfSEVMUEVSUwo+PiArCWhlbHAKPj4gKwkgIENob29zZSB0aGlz IG9wdGlvbiBpZiB5b3UgaGF2ZSBhIHRpbnlkcm0gc3VwcG9ydGVkIGRpc3BsYXkuCj4+ICsJICBJ ZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGlueWRybS4KPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUv ZHJtL3Rpbnlkcm0vTWFrZWZpbGUKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAw MDAwMC4uNzQ3NmVkMQo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90 aW55ZHJtL01ha2VmaWxlCj4+IEBAIC0wLDAgKzEgQEAKPj4gK29iai0kKENPTkZJR19EUk1fVElO WURSTSkJCSs9IGNvcmUvCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9j b3JlL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS9NYWtlZmlsZQo+PiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi4wMzMwOWY0Cj4+IC0tLSAvZGV2 L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS9NYWtlZmlsZQo+PiBA QCAtMCwwICsxLDggQEAKPj4gK29iai0kKENPTkZJR19EUk1fVElOWURSTSkJCSs9IHRpbnlkcm0u bwo+PiArdGlueWRybS15CQkJCSs9IHRpbnlkcm0tY29yZS5vCj4+ICt0aW55ZHJtLXkJCQkJKz0g dGlueWRybS1jcnRjLm8KPj4gK3Rpbnlkcm0teQkJCQkrPSB0aW55ZHJtLWZyYW1lYnVmZmVyLm8K Pj4gK3Rpbnlkcm0teQkJCQkrPSB0aW55ZHJtLXBsYW5lLm8KPj4gK3Rpbnlkcm0teQkJCQkrPSB0 aW55ZHJtLWhlbHBlcnMubwo+PiArdGlueWRybS15CQkJCSs9IHRpbnlkcm0tZGVmZXJyZWQubwo+ PiArdGlueWRybS0kKENPTkZJR19EUk1fS01TX0ZCX0hFTFBFUikJKz0gdGlueWRybS1mYmRldi5v Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL2ludGVybmFsLmgg Yi9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL2ludGVybmFsLmgKPj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uYTEyNjY1OAo+PiAtLS0gL2Rldi9udWxsCj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvaW50ZXJuYWwuaAo+PiBAQCAtMCwwICsx LDQzIEBACj4+ICsvKgo+PiArICogQ29weXJpZ2h0IChDKSAyMDE2IE5vcmFsZiBUcsO4bm5lcwo+ PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+PiArICogdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg b3IKPj4gKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+ICsgKi8KPj4g Kwo+PiAraW50IHRpbnlkcm1fY3J0Y19jcmVhdGUoc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2 KTsKPj4gKwo+PiArc3RhdGljIGlubGluZSBib29sIHRpbnlkcm1fYWN0aXZlKHN0cnVjdCB0aW55 ZHJtX2RldmljZSAqdGRldikKPj4gK3sKPj4gKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7Cj4+ICsK Pj4gKwlkcm1fZm9yX2VhY2hfY3J0YyhjcnRjLCB0ZGV2LT5iYXNlKQo+PiArCQlyZXR1cm4gY3J0 Yy0+c3RhdGUgJiYgY3J0Yy0+c3RhdGUtPmFjdGl2ZTsKPj4gKwo+PiArCXJldHVybiBmYWxzZTsK Pj4gK30KPj4gKwo+PiArdm9pZCB0aW55ZHJtX21vZGVfY29uZmlnX2luaXQoc3RydWN0IHRpbnlk cm1fZGV2aWNlICp0ZGV2KTsKPj4gKwo+PiAraW50IHRpbnlkcm1fcGxhbmVfaW5pdChzdHJ1Y3Qg dGlueWRybV9kZXZpY2UgKnRkZXYpOwo+PiArCj4+ICsjaWZkZWYgQ09ORklHX0RSTV9LTVNfRkJf SEVMUEVSCj4+ICtpbnQgdGlueWRybV9mYmRldl9pbml0KHN0cnVjdCB0aW55ZHJtX2RldmljZSAq dGRldik7Cj4+ICt2b2lkIHRpbnlkcm1fZmJkZXZfZmluaShzdHJ1Y3QgdGlueWRybV9kZXZpY2Ug KnRkZXYpOwo+PiArdm9pZCB0aW55ZHJtX2ZiZGV2X3Jlc3RvcmVfbW9kZShzdHJ1Y3QgdGlueWRy bV9mYmRldiAqZmJkZXYpOwo+PiArI2Vsc2UKPj4gK3N0YXRpYyBpbmxpbmUgaW50IHRpbnlkcm1f ZmJkZXZfaW5pdChzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpCj4+ICt7Cj4+ICsJcmV0dXJu IDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW55ZHJtX2ZiZGV2X2Zpbmko c3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2KQo+PiArewo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW5saW5lIHZvaWQgdGlueWRybV9mYmRldl9yZXN0b3JlX21vZGUoc3RydWN0IHRpbnlkcm1fZmJk ZXYgKmZiZGV2KQo+PiArewo+PiArfQo+PiArI2VuZGlmCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0tY29yZS5jIGIvZHJpdmVycy9ncHUvZHJtL3Rp bnlkcm0vY29yZS90aW55ZHJtLWNvcmUuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRl eCAwMDAwMDAwLi5jYjNjZjcxCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJtLWNvcmUuYwo+PiBAQCAtMCwwICsxLDE5NCBAQAo+PiAr Ly8jZGVmaW5lIERFQlVHCj4+ICsvKgo+PiArICogQ29weXJpZ2h0IChDKSAyMDE2IE5vcmFsZiBU csO4bm5lcwo+PiArICoKPj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4+ICsgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+PiAr ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUg TGljZW5zZSwgb3IKPj4gKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+ ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUgPGRybS9kcm1QLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9hdG9taWNfaGVscGVyLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5o Pgo+PiArI2luY2x1ZGUgPGRybS90aW55ZHJtL3Rpbnlkcm0uaD4KPj4gKyNpbmNsdWRlIDxsaW51 eC9kZXZpY2UuaD4KPj4gKwo+PiArI2luY2x1ZGUgImludGVybmFsLmgiCj4+ICsKPj4gK3N0YXRp YyBpbnQgdGlueWRybV9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2LCB1bnNpZ25lZCBsb25n IGZsYWdzKQo+PiArewo+PiArCXN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldiA9IGRkZXYtPmRl dl9wcml2YXRlOwo+PiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4+ICsJaW50 IHJldDsKPj4gKwo+PiArCURSTV9ERUJVR19LTVMoIlxuIik7Cj4+ICsKPj4gKwl0aW55ZHJtX21v ZGVfY29uZmlnX2luaXQodGRldik7Cj4+ICsKPj4gKwlyZXQgPSB0aW55ZHJtX3BsYW5lX2luaXQo dGRldik7Cj4+ICsJaWYgKHJldCkKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCXJldCA9IHRp bnlkcm1fY3J0Y19jcmVhdGUodGRldik7Cj4+ICsJaWYgKHJldCkKPj4gKwkJcmV0dXJuIHJldDsK Pj4gKwo+PiArCWNvbm5lY3RvciA9IGxpc3RfZmlyc3RfZW50cnkoJmRkZXYtPm1vZGVfY29uZmln LmNvbm5lY3Rvcl9saXN0LAo+PiArCQkJCSAgICAgdHlwZW9mKCpjb25uZWN0b3IpLCBoZWFkKTsK Pj4gKwljb25uZWN0b3ItPnN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwo+PiAr Cj4+ICsJZHJtX3BhbmVsX2luaXQoJnRkZXYtPnBhbmVsKTsKPj4gKwlkcm1fcGFuZWxfYWRkKCZ0 ZGV2LT5wYW5lbCk7Cj4+ICsJZHJtX3BhbmVsX2F0dGFjaCgmdGRldi0+cGFuZWwsIGNvbm5lY3Rv cik7Cj4+ICsKPj4gKwlkcm1fbW9kZV9jb25maWdfcmVzZXQoZGRldik7Cj4+ICsKPj4gKwlyZXQg PSB0aW55ZHJtX2ZiZGV2X2luaXQodGRldik7Cj4+ICsJaWYgKHJldCkKPj4gKwkJcmV0dXJuIHJl dDsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB0aW55ZHJt X2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGRldikKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlu eWRybV9kZXZpY2UgKnRkZXYgPSBkZGV2LT5kZXZfcHJpdmF0ZTsKPj4gKwo+PiArCURSTV9ERUJV R19LTVMoIlxuIik7Cj4+ICsJdGlueWRybV9mYmRldl9yZXN0b3JlX21vZGUodGRldi0+ZmJkZXYp Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0aW55 ZHJtX2ZvcHMgPSB7Cj4+ICsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAo+PiArCS5vcGVuCQk9IGRy bV9vcGVuLAo+PiArCS5yZWxlYXNlCT0gZHJtX3JlbGVhc2UsCj4+ICsJLnVubG9ja2VkX2lvY3Rs CT0gZHJtX2lvY3RsLAo+PiArI2lmZGVmIENPTkZJR19DT01QQVQKPj4gKwkuY29tcGF0X2lvY3Rs CT0gZHJtX2NvbXBhdF9pb2N0bCwKPj4gKyNlbmRpZgo+PiArCS5wb2xsCQk9IGRybV9wb2xsLAo+ PiArCS5yZWFkCQk9IGRybV9yZWFkLAo+PiArCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAo+PiArCS5t bWFwCQk9IGRybV9nZW1fY21hX21tYXAsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGRy bV9kcml2ZXIgdGlueWRybV9kcml2ZXIgPSB7Cj4+ICsJLmRyaXZlcl9mZWF0dXJlcwk9IERSSVZF Ul9HRU0gfCBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9QUklNRQo+PiArCQkJCXwgRFJJVkVSX0FU T01JQywKPj4gKwkubG9hZAkJCT0gdGlueWRybV9sb2FkLAo+PiArCS5sYXN0Y2xvc2UJCT0gdGlu eWRybV9sYXN0Y2xvc2UsCj4+ICsvLwkudW5sb2FkCQkJPSB0aW55ZHJtX3VubG9hZCwKPj4gKwku Z2V0X3ZibGFua19jb3VudGVyCT0gZHJtX3ZibGFua19jb3VudCwKPj4gKy8vCS5lbmFibGVfdmJs YW5rCQk9IHRpbnlkcm1fZW5hYmxlX3ZibGFuaywKPj4gKy8vCS5kaXNhYmxlX3ZibGFuawkJPSB0 aW55ZHJtX2Rpc2FibGVfdmJsYW5rLAo+PiArCS5nZW1fZnJlZV9vYmplY3QJPSBkcm1fZ2VtX2Nt YV9mcmVlX29iamVjdCwKPj4gKwkuZ2VtX3ZtX29wcwkJPSAmZHJtX2dlbV9jbWFfdm1fb3BzLAo+ PiArCS5wcmltZV9oYW5kbGVfdG9fZmQJPSBkcm1fZ2VtX3ByaW1lX2hhbmRsZV90b19mZCwKPj4g KwkucHJpbWVfZmRfdG9faGFuZGxlCT0gZHJtX2dlbV9wcmltZV9mZF90b19oYW5kbGUsCj4+ICsJ LmdlbV9wcmltZV9pbXBvcnQJPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwKPj4gKwkuZ2VtX3ByaW1l X2V4cG9ydAk9IGRybV9nZW1fcHJpbWVfZXhwb3J0LAo+PiArCS5nZW1fcHJpbWVfZ2V0X3NnX3Rh YmxlCT0gZHJtX2dlbV9jbWFfcHJpbWVfZ2V0X3NnX3RhYmxlLAo+PiArCS5nZW1fcHJpbWVfaW1w b3J0X3NnX3RhYmxlID0gZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxlLAo+PiArCS5n ZW1fcHJpbWVfdm1hcAkJPSBkcm1fZ2VtX2NtYV9wcmltZV92bWFwLAo+PiArCS5nZW1fcHJpbWVf dnVubWFwCT0gZHJtX2dlbV9jbWFfcHJpbWVfdnVubWFwLAo+PiArCS5nZW1fcHJpbWVfbW1hcAkJ PSBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwLAo+PiArCS5kdW1iX2NyZWF0ZQkJPSBkcm1fZ2VtX2Nt YV9kdW1iX2NyZWF0ZSwKPj4gKwkuZHVtYl9tYXBfb2Zmc2V0CT0gZHJtX2dlbV9jbWFfZHVtYl9t YXBfb2Zmc2V0LAo+PiArCS5kdW1iX2Rlc3Ryb3kJCT0gZHJtX2dlbV9kdW1iX2Rlc3Ryb3ksCj4+ ICsJLmZvcHMJCQk9ICZ0aW55ZHJtX2ZvcHMsCj4+ICsJLm5hbWUJCQk9ICJ0aW55ZHJtIiwKPj4g KwkuZGVzYwkJCT0gInRpbnlkcm0iLAo+PiArCS5kYXRlCQkJPSAiMjAxNTA5MTYiLAo+PiArCS5t YWpvcgkJCT0gMSwKPj4gKwkubWlub3IJCQk9IDAsCj4+ICt9Owo+PiArCj4+ICt2b2lkIHRpbnlk cm1fcmVsZWFzZShzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpCj4+ICt7Cj4+ICsJRFJNX0RF QlVHX0tNUygiXG4iKTsKPj4gKwo+PiArCWlmICh0ZGV2LT5kZWZlcnJlZCkKPj4gKwkJY2FuY2Vs X2RlbGF5ZWRfd29ya19zeW5jKCZ0ZGV2LT5kZWZlcnJlZC0+ZHdvcmspOwo+PiArCj4+ICsJdGlu eWRybV9mYmRldl9maW5pKHRkZXYpOwo+PiArCj4+ICsJZHJtX3BhbmVsX2RldGFjaCgmdGRldi0+ cGFuZWwpOwo+PiArCWRybV9wYW5lbF9yZW1vdmUoJnRkZXYtPnBhbmVsKTsKPj4gKwo+PiArCWRy bV9tb2RlX2NvbmZpZ19jbGVhbnVwKHRkZXYtPmJhc2UpOwo+PiArCWRybV9kZXZfdW5yZWdpc3Rl cih0ZGV2LT5iYXNlKTsKPj4gKwlkcm1fZGV2X3VucmVmKHRkZXYtPmJhc2UpOwo+PiArfQo+PiAr RVhQT1JUX1NZTUJPTCh0aW55ZHJtX3JlbGVhc2UpOwo+PiArCj4+ICtpbnQgdGlueWRybV9yZWdp c3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldikKPj4g K3sKPj4gKwlzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyID0gJnRpbnlkcm1fZHJpdmVyOwo+PiAr CXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2Owo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlkZXZfaW5m byhkZXYsICIlc1xuIiwgX19mdW5jX18pOwo+PiArCj4+ICtkZXYtPmNvaGVyZW50X2RtYV9tYXNr ID0gRE1BX0JJVF9NQVNLKDMyKTsKPj4gKwo+PiArCWlmIChXQVJOX09OKCF0ZGV2LT5kaXJ0eWZi KSkKPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsKPj4gKwlkZGV2ID0gZHJtX2Rldl9hbGxvYyhk cml2ZXIsIGRldik7Cj4+ICsJaWYgKCFkZGV2KQo+PiArCQlyZXR1cm4gLUVOT01FTTsKPj4gKwo+ PiArCXRkZXYtPmJhc2UgPSBkZGV2Owo+PiArCWRkZXYtPmRldl9wcml2YXRlID0gdGRldjsKPj4g Kwo+PiArCXJldCA9IGRybV9kZXZfc2V0X3VuaXF1ZShkZGV2LCBkZXZfbmFtZShkZGV2LT5kZXYp KTsKPj4gKwlpZiAocmV0KQo+PiArCQlnb3RvIGVycl9mcmVlOwo+PiArCj4+ICsJcmV0ID0gZHJt X2Rldl9yZWdpc3RlcihkZGV2LCAwKTsKPj4gKwlpZiAocmV0KQo+PiArCQlnb3RvIGVycl9mcmVl Owo+PiArCj4+ICsJRFJNX0lORk8oIkRldmljZTogJXNcbiIsIGRldl9uYW1lKGRldikpOwo+PiAr CURSTV9JTkZPKCJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCBvbiBtaW5vciAlZFxuIiwKPj4gKwkJ IGRyaXZlci0+bmFtZSwgZHJpdmVyLT5tYWpvciwgZHJpdmVyLT5taW5vciwgZHJpdmVyLT5wYXRj aGxldmVsLAo+PiArCQkgZGRldi0+cHJpbWFyeS0+aW5kZXgpOwo+PiArCj4+ICsJcmV0dXJuIDA7 Cj4+ICsKPj4gK2Vycl9mcmVlOgo+PiArCWRybV9kZXZfdW5yZWYoZGRldik7Cj4+ICsKPj4gKwly ZXR1cm4gcmV0Owo+PiArfQo+PiArRVhQT1JUX1NZTUJPTCh0aW55ZHJtX3JlZ2lzdGVyKTsKPj4g Kwo+PiArc3RhdGljIHZvaWQgZGV2bV90aW55ZHJtX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2 LCB2b2lkICpyZXMpCj4+ICt7Cj4+ICsJdGlueWRybV9yZWxlYXNlKCooc3RydWN0IHRpbnlkcm1f ZGV2aWNlICoqKXJlcyk7Cj4+ICt9Cj4+ICsKPj4gK2ludCBkZXZtX3Rpbnlkcm1fcmVnaXN0ZXIo c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpCj4+ICt7Cj4+ ICsJc3RydWN0IHRpbnlkcm1fZGV2aWNlICoqcHRyOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlw dHIgPSBkZXZyZXNfYWxsb2MoZGV2bV90aW55ZHJtX3JlbGVhc2UsIHNpemVvZigqcHRyKSwgR0ZQ X0tFUk5FTCk7Cj4+ICsJaWYgKCFwdHIpCj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJ cmV0ID0gdGlueWRybV9yZWdpc3RlcihkZXYsIHRkZXYpOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJ ZGV2cmVzX2ZyZWUocHRyKTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsKPj4gKwkqcHRy ID0gdGRldjsKPj4gKwlkZXZyZXNfYWRkKGRldiwgcHRyKTsKPj4gKwo+PiArCXJldHVybiAwOwo+ PiArfQo+PiArRVhQT1JUX1NZTUJPTChkZXZtX3Rpbnlkcm1fcmVnaXN0ZXIpOwo+PiArCj4+ICtN T0RVTEVfTElDRU5TRSgiR1BMIik7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlu eWRybS9jb3JlL3Rpbnlkcm0tY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90 aW55ZHJtLWNydGMuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi42 NWIzNDI2Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0v Y29yZS90aW55ZHJtLWNydGMuYwo+PiBAQCAtMCwwICsxLDIwMyBAQAo+PiArLyoKPj4gKyAqIENv cHlyaWdodCAoQykgMjAxNiBOb3JhbGYgVHLDuG5uZXMKPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eQo+PiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKPj4gKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCj4+ICsgKiAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxkcm0vZHJt UC5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+PiArI2luY2x1ZGUg PGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KPj4gKyNpbmNsdWRlIDxkcm0vdGlueWRybS90aW55ZHJt Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+PiArCj4+ICsjaW5jbHVkZSAiaW50ZXJu YWwuaCIKPj4gKwo+PiArc3RhdGljIGludCB0aW55ZHJtX2Nvbm5lY3Rvcl9nZXRfbW9kZXMoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlueWRybV9k ZXZpY2UgKnRkZXYgPSBjb25uZWN0b3ItPmRldi0+ZGV2X3ByaXZhdGU7Cj4+ICsJc3RydWN0IGRy bV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCURSTV9ERUJVR19L TVMoIlxuIik7Cj4+ICsJcmV0ID0gZHJtX3BhbmVsX2dldF9tb2RlcygmdGRldi0+cGFuZWwpOwo+ PiArCWlmIChyZXQgPiAwKQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJbW9kZSA9IGRybV9j dnRfbW9kZShjb25uZWN0b3ItPmRldiwgdGRldi0+d2lkdGgsIHRkZXYtPmhlaWdodCwgNjAsIGZh bHNlLCBmYWxzZSwgZmFsc2UpOwo+PiArCWlmICghbW9kZSkKPj4gKwkJcmV0dXJuIDA7Cj4+ICsK Pj4gKwltb2RlLT50eXBlIHw9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVEOwo+PiArCWRybV9tb2Rl X3Byb2JlZF9hZGQoY29ubmVjdG9yLCBtb2RlKTsKPj4gKwo+PiArCXJldHVybiAxOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgc3RydWN0IGRybV9lbmNvZGVyICoKPj4gK3Rpbnlkcm1fY29ubmVjdG9y X2Jlc3RfZW5jb2RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+PiArewo+PiAr CXJldHVybiBkcm1fZW5jb2Rlcl9maW5kKGNvbm5lY3Rvci0+ZGV2LCBjb25uZWN0b3ItPmVuY29k ZXJfaWRzWzBdKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVj dG9yX2hlbHBlcl9mdW5jcyB0aW55ZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgPSB7Cj4+ICsJ LmdldF9tb2RlcyA9IHRpbnlkcm1fY29ubmVjdG9yX2dldF9tb2RlcywKPj4gKwkuYmVzdF9lbmNv ZGVyID0gdGlueWRybV9jb25uZWN0b3JfYmVzdF9lbmNvZGVyLAo+PiArfTsKPj4gKwo+PiArc3Rh dGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKPj4gK3Rpbnlkcm1fY29ubmVjdG9yX2RldGVj dChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLCBib29sIGZvcmNlKQo+PiArewo+PiAr CURSTV9ERUJVR19LTVMoInN0YXR1cyA9ICVkXG4iLCBjb25uZWN0b3ItPnN0YXR1cyk7Cj4+ICsK Pj4gKwlpZiAoZHJtX2RldmljZV9pc191bnBsdWdnZWQoY29ubmVjdG9yLT5kZXYpKQo+PiArCQly ZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cj4+ICsKPj4gKwlyZXR1cm4gY29u bmVjdG9yLT5zdGF0dXM7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRpbnlkcm1fY29ubmVj dG9yX2Rlc3Ryb3koc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPj4gK3sKPj4gKwlE Uk1fREVCVUdfS01TKCJcbiIpOwo+PiArCWRybV9jb25uZWN0b3JfdW5yZWdpc3Rlcihjb25uZWN0 b3IpOwo+PiArCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwo+PiArCWtmcmVlKGNv bm5lY3Rvcik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rv cl9mdW5jcyB0aW55ZHJtX2Nvbm5lY3Rvcl9mdW5jcyA9IHsKPj4gKwkuZHBtcyA9IGRybV9hdG9t aWNfaGVscGVyX2Nvbm5lY3Rvcl9kcG1zLAo+PiArCS5yZXNldCA9IGRybV9hdG9taWNfaGVscGVy X2Nvbm5lY3Rvcl9yZXNldCwKPj4gKwkuZGV0ZWN0ID0gdGlueWRybV9jb25uZWN0b3JfZGV0ZWN0 LAo+PiArCS5maWxsX21vZGVzID0gZHJtX2hlbHBlcl9wcm9iZV9zaW5nbGVfY29ubmVjdG9yX21v ZGVzLAo+PiArCS5kZXN0cm95ID0gdGlueWRybV9jb25uZWN0b3JfZGVzdHJveSwKPj4gKwkuYXRv bWljX2R1cGxpY2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNh dGVfc3RhdGUsCj4+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJf Y29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgdm9pZCB0aW55 ZHJtX2VuY29kZXJfZGlzYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCj4+ICt7Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRpbnlkcm1fZW5jb2Rlcl9lbmFibGUoc3RydWN0IGRy bV9lbmNvZGVyICplbmNvZGVyKQo+PiArewo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHRpbnlk cm1fZW5jb2Rlcl9hdG9taWNfY2hlY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAo+PiAr CQkJCQlzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKmNydGNfc3RhdGUsCj4+ICsJCQkJCXN0cnVjdCBk cm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQo+PiArewo+PiArCXJldHVybiAwOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyB0 aW55ZHJtX2VuY29kZXJfaGVscGVyX2Z1bmNzID0gewo+PiArCS5kaXNhYmxlID0gdGlueWRybV9l bmNvZGVyX2Rpc2FibGUsCj4+ICsJLmVuYWJsZSA9IHRpbnlkcm1fZW5jb2Rlcl9lbmFibGUsCj4+ ICsJLmF0b21pY19jaGVjayA9IHRpbnlkcm1fZW5jb2Rlcl9hdG9taWNfY2hlY2ssCj4+ICt9Owo+ PiArCj4+ICtzdGF0aWMgdm9pZCB0aW55ZHJtX2VuY29kZXJfY2xlYW51cChzdHJ1Y3QgZHJtX2Vu Y29kZXIgKmVuY29kZXIpCj4+ICt7Cj4+ICsJRFJNX0RFQlVHX0tNUygiXG4iKTsKPj4gKwlkcm1f ZW5jb2Rlcl9jbGVhbnVwKGVuY29kZXIpOwo+PiArCWtmcmVlKGVuY29kZXIpOwo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIHRpbnlkcm1fZW5jb2Rl cl9mdW5jcyA9IHsKPj4gKwkuZGVzdHJveSA9IHRpbnlkcm1fZW5jb2Rlcl9jbGVhbnVwLAo+PiAr fTsKPj4gKwo+PiArc3RhdGljIHZvaWQgdGlueWRybV9jcnRjX2VuYWJsZShzdHJ1Y3QgZHJtX2Ny dGMgKmNydGMpCj4+ICt7Cj4+ICsJc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2ID0gY3J0Yy0+ ZGV2LT5kZXZfcHJpdmF0ZTsKPj4gKwo+PiArCURSTV9ERUJVR19LTVMoInByZXBhcmVkPSV1LCBl bmFibGVkPSV1XG4iLCB0ZGV2LT5wcmVwYXJlZCwgdGRldi0+ZW5hYmxlZCk7Cj4+ICsKPj4gKwkv KiBUaGUgcGFuZWwgbXVzdCBiZSBwcmVwYXJlZCBvbiB0aGUgZmlyc3QgY3J0YyBlbmFibGUgYWZ0 ZXIgcHJvYmUgKi8KPj4gKwl0aW55ZHJtX3ByZXBhcmUodGRldik7Cj4+ICsJLyogVGhlIHBhbmVs IGlzIGVuYWJsZWQgYWZ0ZXIgdGhlIGZpcnN0IGRpc3BsYXkgdXBkYXRlICovCj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyB2b2lkIHRpbnlkcm1fY3J0Y19kaXNhYmxlKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YykKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYgPSBjcnRjLT5kZXYtPmRl dl9wcml2YXRlOwo+PiArCj4+ICsJRFJNX0RFQlVHX0tNUygicHJlcGFyZWQ9JXUsIGVuYWJsZWQ9 JXVcbiIsIHRkZXYtPnByZXBhcmVkLCB0ZGV2LT5lbmFibGVkKTsKPj4gKwo+PiArCXRpbnlkcm1f ZGlzYWJsZSh0ZGV2KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0 Y19oZWxwZXJfZnVuY3MgdGlueWRybV9jcnRjX2hlbHBlcl9mdW5jcyA9IHsKPj4gKwkuZGlzYWJs ZSA9IHRpbnlkcm1fY3J0Y19kaXNhYmxlLAo+PiArCS5lbmFibGUgPSB0aW55ZHJtX2NydGNfZW5h YmxlLAo+PiArfTsKPj4gKwo+PiArc3RhdGljIHZvaWQgdGlueWRybV9jcnRjX2NsZWFudXAoc3Ry dWN0IGRybV9jcnRjICpjcnRjKQo+PiArewo+PiArCURSTV9ERUJVR19LTVMoIlxuIik7Cj4+ICsJ ZHJtX2NydGNfY2xlYW51cChjcnRjKTsKPj4gKwlrZnJlZShjcnRjKTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY3J0Y19mdW5jcyB0aW55ZHJtX2NydGNfZnVuY3MgPSB7 Cj4+ICsJLnJlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfY3J0Y19yZXNldCwKPj4gKwkuZGVzdHJv eSA9IHRpbnlkcm1fY3J0Y19jbGVhbnVwLAo+PiArCS5zZXRfY29uZmlnID0gZHJtX2F0b21pY19o ZWxwZXJfc2V0X2NvbmZpZywKPj4gKwkucGFnZV9mbGlwID0gZHJtX2F0b21pY19oZWxwZXJfcGFn ZV9mbGlwLAo+PiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJf Y3J0Y19kdXBsaWNhdGVfc3RhdGUsCj4+ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0 b21pY19oZWxwZXJfY3J0Y19kZXN0cm95X3N0YXRlLAo+PiArfTsKPj4gKwo+PiAraW50IHRpbnlk cm1fY3J0Y19jcmVhdGUoc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2KQo+PiArewo+PiArCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSB0ZGV2LT5iYXNlOwo+PiArCXN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3I7Cj4+ICsJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOwo+PiArCXN0 cnVjdCBkcm1fY3J0YyAqY3J0YzsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJY29ubmVjdG9yID0g a3phbGxvYyhzaXplb2YoKmNvbm5lY3RvciksIEdGUF9LRVJORUwpOwo+PiArCWVuY29kZXIgPSBr emFsbG9jKHNpemVvZigqZW5jb2RlciksIEdGUF9LRVJORUwpOwo+PiArCWNydGMgPSBremFsbG9j KHNpemVvZigqY3J0YyksIEdGUF9LRVJORUwpOwo+PiArCWlmICghY29ubmVjdG9yIHx8ICFlbmNv ZGVyIHx8ICFjcnRjKSB7Cj4+ICsJCXJldCA9IC1FTk9NRU07Cj4+ICsJCWdvdG8gZXJyb3JfZnJl ZTsKPj4gKwl9Cj4+ICsKPj4gKwlkcm1fY3J0Y19oZWxwZXJfYWRkKGNydGMsICZ0aW55ZHJtX2Ny dGNfaGVscGVyX2Z1bmNzKTsKPj4gKwlyZXQgPSBkcm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzKGRl diwgY3J0YywgJnRkZXYtPnBsYW5lLCBOVUxMLAo+PiArCQkJCQkmdGlueWRybV9jcnRjX2Z1bmNz KTsKPj4gKwlpZiAocmV0KQo+PiArCQlnb3RvIGVycm9yX2ZyZWU7Cj4+ICsKPj4gKwllbmNvZGVy LT5wb3NzaWJsZV9jcnRjcyA9IDEgPDwgZHJtX2NydGNfaW5kZXgoY3J0Yyk7Cj4+ICsJZHJtX2Vu Y29kZXJfaGVscGVyX2FkZChlbmNvZGVyLCAmdGlueWRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyk7 Cj4+ICsJcmV0ID0gZHJtX2VuY29kZXJfaW5pdChkZXYsIGVuY29kZXIsICZ0aW55ZHJtX2VuY29k ZXJfZnVuY3MsCj4+ICsJCQkgICAgICAgRFJNX01PREVfRU5DT0RFUl9OT05FKTsKPj4gKwlpZiAo cmV0KQo+PiArCQlnb3RvIGVycm9yX2ZyZWU7Cj4+ICsKPj4gKwlkcm1fY29ubmVjdG9yX2hlbHBl cl9hZGQoY29ubmVjdG9yLCAmdGlueWRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzKTsKPj4gKwly ZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZ0aW55ZHJtX2Nvbm5lY3Rv cl9mdW5jcywKPj4gKwkJCQkgRFJNX01PREVfQ09OTkVDVE9SX1ZJUlRVQUwpOwo+PiArCWlmIChy ZXQpCj4+ICsJCWdvdG8gZXJyb3JfZnJlZTsKPj4gKwo+PiArCXJldCA9IGRybV9tb2RlX2Nvbm5l Y3Rvcl9hdHRhY2hfZW5jb2Rlcihjb25uZWN0b3IsIGVuY29kZXIpOwo+PiArCWlmIChyZXQpCj4+ ICsJCWdvdG8gZXJyb3JfZnJlZTsKPj4gKwo+PiArCXJldCA9IGRybV9jb25uZWN0b3JfcmVnaXN0 ZXIoY29ubmVjdG9yKTsKPj4gKwlpZiAocmV0KQo+PiArCQlnb3RvIGVycm9yX2ZyZWU7Cj4+ICsK Pj4gKwlyZXR1cm4gMDsKPj4gKwo+PiArZXJyb3JfZnJlZToKPj4gKwlrZnJlZShjcnRjKTsKPj4g KwlrZnJlZShlbmNvZGVyKTsKPj4gKwlrZnJlZShjb25uZWN0b3IpOwo+PiArCj4+ICsJcmV0dXJu IHJldDsKPj4gK30KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUv dGlueWRybS1kZWZlcnJlZC5jIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55ZHJt LWRlZmVycmVkLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uMTY1 NTNhNgo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2Nv cmUvdGlueWRybS1kZWZlcnJlZC5jCj4+IEBAIC0wLDAgKzEsMTE2IEBACj4+ICsjaW5jbHVkZSA8 ZHJtL3Rpbnlkcm0vdGlueWRybS5oPgo+PiArCj4+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCIKPj4g Kwo+PiArYm9vbCB0aW55ZHJtX2RlZmVycmVkX2JlZ2luKHN0cnVjdCB0aW55ZHJtX2RldmljZSAq dGRldiwKPj4gKwkJCSAgICBzdHJ1Y3QgdGlueWRybV9mYl9jbGlwICpmYl9jbGlwKQo+PiArewo+ PiArCXN0cnVjdCB0aW55ZHJtX2RlZmVycmVkICpkZWZlcnJlZCA9IHRkZXYtPmRlZmVycmVkOwo+ PiArCj4+ICsJc3Bpbl9sb2NrKCZkZWZlcnJlZC0+bG9jayk7Cj4+ICsJKmZiX2NsaXAgPSBkZWZl cnJlZC0+ZmJfY2xpcDsKPj4gKwl0aW55ZHJtX3Jlc2V0X2NsaXAoJmRlZmVycmVkLT5mYl9jbGlw LmNsaXApOwo+PiArCWRlZmVycmVkLT5mYl9jbGlwLmZiID0gTlVMTDsKPj4gKwlkZWZlcnJlZC0+ ZmJfY2xpcC52bWVtID0gTlVMTDsKPj4gKwlzcGluX3VubG9jaygmZGVmZXJyZWQtPmxvY2spOwo+ PiArCj4+ICsJLyogVGhlIGNydGMgbWlnaHQgaGF2ZSBiZWVuIGRpc2FibGVkIGJ5IHRoZSB0aW1l IHdlIGdldCBoZXJlICovCj4+ICsJaWYgKCF0aW55ZHJtX2FjdGl2ZSh0ZGV2KSkKPj4gKwkJcmV0 dXJuIGZhbHNlOwo+PiArCj4+ICsJLyogT24gZmlyc3QgdXBkYXRlIG1ha2Ugc3VyZSB0byBkbyB0 aGUgZW50aXJlIGZyYW1lYnVmZmVyICovCj4+ICsJaWYgKCF0ZGV2LT5lbmFibGVkKSB7Cj4+ICsJ CWZiX2NsaXAtPmNsaXAueDEgPSAwOwo+PiArCQlmYl9jbGlwLT5jbGlwLngyID0gZmJfY2xpcC0+ ZmItPndpZHRoIC0gMTsKPj4gKwkJZmJfY2xpcC0+Y2xpcC55MSA9IDA7Cj4+ICsJCWZiX2NsaXAt PmNsaXAueTIgPSBmYl9jbGlwLT5mYi0+aGVpZ2h0IC0gMTsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBU T0RPOiBzdXBwb3J0IHBhcnRpYWwgdXBkYXRlcyAqLwo+PiArCWZiX2NsaXAtPmNsaXAueDEgPSAw Owo+PiArCWZiX2NsaXAtPmNsaXAueDIgPSBmYl9jbGlwLT5mYi0+d2lkdGggLSAxOwo+PiArCWZi X2NsaXAtPmNsaXAueTEgPSAwOwo+PiArCWZiX2NsaXAtPmNsaXAueTIgPSBmYl9jbGlwLT5mYi0+ aGVpZ2h0IC0gMTsKPj4gKwo+PiArCXJldHVybiB0cnVlOwo+PiArfQo+PiArRVhQT1JUX1NZTUJP TCh0aW55ZHJtX2RlZmVycmVkX2JlZ2luKTsKPj4gKwo+PiArdm9pZCB0aW55ZHJtX2RlZmVycmVk X2VuZChzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpCj4+ICt7Cj4+ICsJaWYgKHRkZXYtPnBy ZXBhcmVkICYmICF0ZGV2LT5lbmFibGVkKSB7Cj4+ICsJCWRybV9wYW5lbF9lbmFibGUoJnRkZXYt PnBhbmVsKTsKPj4gKwkJdGRldi0+ZW5hYmxlZCA9IHRydWU7Cj4+ICsJfQo+PiArfQo+PiArRVhQ T1JUX1NZTUJPTCh0aW55ZHJtX2RlZmVycmVkX2VuZCk7Cj4+ICsKPj4gK2ludCB0aW55ZHJtX2Rp cnR5ZmIoc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIHZvaWQgKnZtZW0sIHVuc2lnbmVkIGZs YWdzLAo+PiArCQkgICAgdW5zaWduZWQgY29sb3IsIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlw cywKPj4gKwkJICAgIHVuc2lnbmVkIG51bV9jbGlwcykKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlueWRy bV9kZXZpY2UgKnRkZXYgPSBmYi0+ZGV2LT5kZXZfcHJpdmF0ZTsKPj4gKwo+PiArCXN0cnVjdCB0 aW55ZHJtX2RlZmVycmVkICpkZWZlcnJlZCA9IHRkZXYtPmRlZmVycmVkOwo+PiArCXN0cnVjdCB0 aW55ZHJtX2ZiX2NsaXAgKmZiX2NsaXAgPSAmdGRldi0+ZGVmZXJyZWQtPmZiX2NsaXA7Cj4+ICsK Pj4gKwlib29sIG5vX2RlbGF5ID0gZGVmZXJyZWQtPm5vX2RlbGF5Owo+PiArCXVuc2lnbmVkIGxv bmcgZGVsYXk7Cj4+ICsKPj4gKwlkZXZfZGJnKHRkZXYtPmJhc2UtPmRldiwgIiVzKGZiID0gJXAs IHZtZW0gPSAlcCwgY2xpcHMgPSAlcCwgbnVtX2NsaXBzID0gJXUsIG5vX2RlbGF5ID0gJXUpXG4i LCBfX2Z1bmNfXywgZmIsIHZtZW0sIGNsaXBzLCBudW1fY2xpcHMsIG5vX2RlbGF5KTsKPj4gKwo+ PiArCWlmICghdm1lbSB8fCAhZmIpCj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCj4+ICsJc3Bp bl9sb2NrKCZkZWZlcnJlZC0+bG9jayk7Cj4+ICsJZmJfY2xpcC0+ZmIgPSBmYjsKPj4gKwlmYl9j bGlwLT52bWVtID0gdm1lbTsKPj4gKwl0aW55ZHJtX21lcmdlX2NsaXBzKCZmYl9jbGlwLT5jbGlw LCBjbGlwcywgbnVtX2NsaXBzLCBmbGFncywKPj4gKwkJCSAgICBmYi0+d2lkdGgsIGZiLT5oZWln aHQpOwo+PiArCWlmICh0aW55ZHJtX2lzX2Z1bGxfY2xpcCgmZmJfY2xpcC0+Y2xpcCwgZmItPndp ZHRoLCBmYi0+aGVpZ2h0KSkKPj4gKwkJbm9fZGVsYXkgPSB0cnVlOwo+PiArCXNwaW5fdW5sb2Nr KCZkZWZlcnJlZC0+bG9jayk7Cj4+ICsKPj4gKwlkZWxheSA9IG5vX2RlbGF5ID8gMCA6IG1zZWNz X3RvX2ppZmZpZXMoZGVmZXJyZWQtPmRlZmVyX21zKTsKPj4gKwo+PiArCWlmIChzY2hlZHVsZV9k ZWxheWVkX3dvcmsoJmRlZmVycmVkLT5kd29yaywgZGVsYXkpKQo+PiArCQlkZXZfZGJnKHRkZXYt PmJhc2UtPmRldiwgIiVzOiBBbHJlYWR5IHNjaGVkdWxlZFxuIiwgX19mdW5jX18pOwo+PiArCj4+ ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICtFWFBPUlRfU1lNQk9MKHRpbnlkcm1fZGlydHlmYik7Cj4+ ICsKPj4gK3ZvaWQgdGlueWRybV9tZXJnZV9jbGlwcyhzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqZHN0 LAo+PiArCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywgdW5zaWduZWQgbnVtX2NsaXBz LAo+PiArCQkJIHVuc2lnbmVkIGZsYWdzLCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpCj4+ICt7Cj4+ ICsJc3RydWN0IGRybV9jbGlwX3JlY3QgZnVsbF9jbGlwID0gewo+PiArCQkueDEgPSAwLAo+PiAr CQkueDIgPSB3aWR0aCAtIDEsCj4+ICsJCS55MSA9IDAsCj4+ICsJCS55MiA9IGhlaWdodCAtIDEs Cj4+ICsJfTsKPj4gKwlpbnQgaTsKPj4gKwo+PiArCWlmICghY2xpcHMpIHsKPj4gKwkJY2xpcHMg PSAmZnVsbF9jbGlwOwo+PiArCQludW1fY2xpcHMgPSAxOwo+PiArCX0KPj4gKwo+PiArCWZvciAo aSA9IDA7IGkgPCBudW1fY2xpcHM7IGkrKykgewo+PiArCQlkc3QtPngxID0gbWluKGRzdC0+eDEs IGNsaXBzW2ldLngxKTsKPj4gKwkJZHN0LT54MiA9IG1heChkc3QtPngyLCBjbGlwc1tpXS54Mik7 Cj4+ICsJCWRzdC0+eTEgPSBtaW4oZHN0LT55MSwgY2xpcHNbaV0ueTEpOwo+PiArCQlkc3QtPnky ID0gbWF4KGRzdC0+eTIsIGNsaXBzW2ldLnkyKTsKPj4gKwo+PiArCQlpZiAoZmxhZ3MgJiBEUk1f TU9ERV9GQl9ESVJUWV9BTk5PVEFURV9DT1BZKSB7Cj4+ICsJCQlpKys7Cj4+ICsJCQlkc3QtPngy ID0gbWF4KGRzdC0+eDIsIGNsaXBzW2ldLngyKTsKPj4gKwkJCWRzdC0+eTIgPSBtYXgoZHN0LT55 MiwgY2xpcHNbaV0ueTIpOwo+PiArCQl9Cj4+ICsJfQo+PiArCj4+ICsJZHN0LT54MiA9IG1pbl90 KHUzMiwgZHN0LT54Miwgd2lkdGggLSAxKTsKPj4gKwlkc3QtPnkyID0gbWluX3QodTMyLCBkc3Qt PnkyLCBoZWlnaHQgLSAxKTsKPj4gK30KPj4gK0VYUE9SVF9TWU1CT0wodGlueWRybV9tZXJnZV9j bGlwcyk7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlk cm0tZmJkZXYuYyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1mYmRldi5j Cj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjQ0YjZhOTUKPj4gLS0t IC9kZXYvbnVsbAo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0t ZmJkZXYuYwo+PiBAQCAtMCwwICsxLDM0NSBAQAo+PiArLy8jZGVmaW5lIERFQlVHCj4+ICsvKgo+ PiArICogQ29weXJpZ2h0IChDKSAyMDE2IE5vcmFsZiBUcsO4bm5lcwo+PiArICoKPj4gKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5Cj4+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+PiArICogdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPj4gKyAqIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUg PGRybS9kcm1QLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9jcnRjX2hlbHBlci5oPgo+PiArI2lu Y2x1ZGUgPGRybS9kcm1fZmJfY21hX2hlbHBlci5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1fZmJf aGVscGVyLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1fY21hX2hlbHBlci5oPgo+PiArI2lu Y2x1ZGUgPGRybS90aW55ZHJtL3Rpbnlkcm0uaD4KPj4gKwo+PiArI2luY2x1ZGUgImludGVybmFs LmgiCj4+ICsKPj4gKyNkZWZpbmUgREVGQVVMVF9ERUZJT19ERUxBWSBIWi8zMAo+PiArCj4+ICtz dHJ1Y3QgdGlueWRybV9mYmRldiB7Cj4+ICsJc3RydWN0IGRybV9mYl9oZWxwZXIgZmJfaGVscGVy Owo+PiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgZmI7Cj4+ICsJdm9pZCAqdm1lbTsKPj4gK307 Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRpbnlkcm1fZmJkZXYgKmhlbHBlcl90b19m YmRldihzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyKQo+PiArewo+PiArCXJldHVybiBjb250 YWluZXJfb2YoaGVscGVyLCBzdHJ1Y3QgdGlueWRybV9mYmRldiwgZmJfaGVscGVyKTsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlueWRybV9mYmRldiAqZmJfdG9fZmJkZXYo c3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCj4+ICt7Cj4+ICsJcmV0dXJuIGNvbnRhaW5lcl9v ZihmYiwgc3RydWN0IHRpbnlkcm1fZmJkZXYsIGZiKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgdGlueWRybV9mYmRldl9kaXJ0eShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKPj4gKwkJCQlzdHJ1 Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcCwgYm9vbCBydW5fbm93KQo+PiArewo+PiArCXN0cnVjdCBk cm1fZmJfaGVscGVyICpoZWxwZXIgPSBpbmZvLT5wYXI7Cj4+ICsJc3RydWN0IHRpbnlkcm1fZGV2 aWNlICp0ZGV2ID0gaGVscGVyLT5kZXYtPmRldl9wcml2YXRlOwo+PiArCXN0cnVjdCBkcm1fZnJh bWVidWZmZXIgKmZiID0gaGVscGVyLT5mYjsKPj4gKwo+PiArCWlmICh0ZGV2LT5wbGFuZS5mYiAh PSBmYikKPj4gKwkJcmV0dXJuOwo+PiArCj4+ICsJaWYgKHRkZXYtPmRlZmVycmVkKQo+PiArCQl0 ZGV2LT5kZWZlcnJlZC0+bm9fZGVsYXkgPSBydW5fbm93Owo+PiArCXRkZXYtPmRpcnR5ZmIoZmIs IGluZm8tPnNjcmVlbl9idWZmZXIsIDAsIDAsIGNsaXAsIDEpOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgdm9pZCB0aW55ZHJtX2ZiZGV2X2RlZmVycmVkX2lvKHN0cnVjdCBmYl9pbmZvICppbmZvLAo+ PiArCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0KQo+PiArewo+PiArCXVuc2ln bmVkIGxvbmcgc3RhcnQsIGVuZCwgbmV4dCwgbWluLCBtYXg7Cj4+ICsJc3RydWN0IGRybV9jbGlw X3JlY3QgY2xpcDsKPj4gKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKPj4gK2ludCBjb3VudCA9IDA7Cj4+ ICsKPj4gKwltaW4gPSBVTE9OR19NQVg7Cj4+ICsJbWF4ID0gMDsKPj4gKwluZXh0ID0gMDsKPj4g KwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhZ2UsIHBhZ2VsaXN0LCBscnUpIHsKPj4gKwkJc3RhcnQg PSBwYWdlLT5pbmRleCA8PCBQQUdFX1NISUZUOwo+PiArCQllbmQgPSBzdGFydCArIFBBR0VfU0la RSAtIDE7Cj4+ICsJCW1pbiA9IG1pbihtaW4sIHN0YXJ0KTsKPj4gKwkJbWF4ID0gbWF4KG1heCwg ZW5kKTsKPj4gK2NvdW50Kys7Cj4+ICsJfQo+PiArCj4+ICsJaWYgKG1pbiA8IG1heCkgewo+PiAr CQljbGlwLngxID0gMDsKPj4gKwkJY2xpcC54MiA9IGluZm8tPnZhci54cmVzIC0gMTsKPj4gKwkJ Y2xpcC55MSA9IG1pbiAvIGluZm8tPmZpeC5saW5lX2xlbmd0aDsKPj4gKwkJY2xpcC55MiA9IG1p bl90KHUzMiwgbWF4IC8gaW5mby0+Zml4LmxpbmVfbGVuZ3RoLAo+PiArCQkJCSAgICBpbmZvLT52 YXIueXJlcyAtIDEpOwo+PiArCQlwcl9kZWJ1ZygiJXM6IHgxPSV1LCB4Mj0ldSwgeTE9JXUsIHky PSV1LCBjb3VudD0lZFxuIiwgX19mdW5jX18sIGNsaXAueDEsIGNsaXAueDIsIGNsaXAueTEsIGNs aXAueTIsIGNvdW50KTsKPj4gKwkJdGlueWRybV9mYmRldl9kaXJ0eShpbmZvLCAmY2xpcCwgdHJ1 ZSk7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB0aW55ZHJtX2ZiZGV2X2ZiX2Zp bGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLAo+PiArCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBm Yl9maWxscmVjdCAqcmVjdCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwID0g ewo+PiArCQkueDEgPSByZWN0LT5keCwKPj4gKwkJLngyID0gcmVjdC0+ZHggKyByZWN0LT53aWR0 aCAtIDEsCj4+ICsJCS55MSA9IHJlY3QtPmR5LAo+PiArCQkueTIgPSByZWN0LT5keSArIHJlY3Qt PmhlaWdodCAtIDEsCj4+ICsJfTsKPj4gKwo+PiArCWRldl9kYmcoaW5mby0+ZGV2LCAiJXM6IGR4 PSVkLCBkeT0lZCwgd2lkdGg9JWQsIGhlaWdodD0lZFxuIiwKPj4gKwkJX19mdW5jX18sIHJlY3Qt PmR4LCByZWN0LT5keSwgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7Cj4+ICsJc3lzX2ZpbGxy ZWN0KGluZm8sIHJlY3QpOwo+PiArCXRpbnlkcm1fZmJkZXZfZGlydHkoaW5mbywgJmNsaXAsIGZh bHNlKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgdGlueWRybV9mYmRldl9mYl9jb3B5YXJl YShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKPj4gKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZmJfY29w eWFyZWEgKmFyZWEpCj4+ICt7Cj4+ICsJc3RydWN0IGRybV9jbGlwX3JlY3QgY2xpcCA9IHsKPj4g KwkJLngxID0gYXJlYS0+ZHgsCj4+ICsJCS54MiA9IGFyZWEtPmR4ICsgYXJlYS0+d2lkdGggLSAx LAo+PiArCQkueTEgPSBhcmVhLT5keSwKPj4gKwkJLnkyID0gYXJlYS0+ZHkgKyBhcmVhLT5oZWln aHQgLSAxLAo+PiArCX07Cj4+ICsKPj4gKwlkZXZfZGJnKGluZm8tPmRldiwgIiVzOiBkeD0lZCwg ZHk9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWRcbiIsCj4+ICsJCV9fZnVuY19fLCAgYXJlYS0+ZHgs IGFyZWEtPmR5LCBhcmVhLT53aWR0aCwgYXJlYS0+aGVpZ2h0KTsKPj4gKwlzeXNfY29weWFyZWEo aW5mbywgYXJlYSk7Cj4+ICsJdGlueWRybV9mYmRldl9kaXJ0eShpbmZvLCAmY2xpcCwgZmFsc2Up Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCB0aW55ZHJtX2ZiZGV2X2ZiX2ltYWdlYmxpdChz dHJ1Y3QgZmJfaW5mbyAqaW5mbywKPj4gKwkJCQkgICAgICAgY29uc3Qgc3RydWN0IGZiX2ltYWdl ICppbWFnZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwID0gewo+PiArCQku eDEgPSBpbWFnZS0+ZHgsCj4+ICsJCS54MiA9IGltYWdlLT5keCArIGltYWdlLT53aWR0aCAtIDEs Cj4+ICsJCS55MSA9IGltYWdlLT5keSwKPj4gKwkJLnkyID0gaW1hZ2UtPmR5ICsgaW1hZ2UtPmhl aWdodCAtIDEsCj4+ICsJfTsKPj4gKwo+PiArCWRldl9kYmcoaW5mby0+ZGV2LCAiJXM6IGR4PSVk LCBkeT0lZCwgd2lkdGg9JWQsIGhlaWdodD0lZFxuIiwKPj4gKwkJX19mdW5jX18sICBpbWFnZS0+ ZHgsIGltYWdlLT5keSwgaW1hZ2UtPndpZHRoLCBpbWFnZS0+aGVpZ2h0KTsKPj4gKwlzeXNfaW1h Z2VibGl0KGluZm8sIGltYWdlKTsKPj4gKwl0aW55ZHJtX2ZiZGV2X2RpcnR5KGluZm8sICZjbGlw LCBmYWxzZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBzc2l6ZV90IHRpbnlkcm1fZmJkZXZfZmJf d3JpdGUoc3RydWN0IGZiX2luZm8gKmluZm8sCj4+ICsJCQkJICAgICAgY29uc3QgY2hhciBfX3Vz ZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAo+PiArCQkJCSAgICAgIGxvZmZfdCAqcHBvcykKPj4gK3sK Pj4gKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBjbGlwID0gewo+PiArCQkueDEgPSAwLAo+PiArCQku eDIgPSBpbmZvLT52YXIueHJlcyAtIDEsCj4+ICsJCS55MSA9IDAsCj4+ICsJCS55MiA9IGluZm8t PnZhci55cmVzIC0gMSwKPj4gKwl9Owo+PiArCXNzaXplX3QgcmV0Owo+PiArCj4+ICsJZGV2X2Ri ZyhpbmZvLT5kZXYsICIlczpcbiIsIF9fZnVuY19fKTsKPj4gKwlyZXQgPSBmYl9zeXNfd3JpdGUo aW5mbywgYnVmLCBjb3VudCwgcHBvcyk7Cj4+ICsJdGlueWRybV9mYmRldl9kaXJ0eShpbmZvLCAm Y2xpcCwgZmFsc2UpOwo+PiArCj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGlj IHZvaWQgdGlueWRybV9mYmRldl9mYl9kZXN0cm95KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi KQo+PiArewo+PiArfQo+PiArCj4+ICtzdGF0aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5j cyB0aW55ZHJtX2ZiZGV2X2ZiX2Z1bmNzID0gewo+PiArCS5kZXN0cm95ID0gdGlueWRybV9mYmRl dl9mYl9kZXN0cm95LAo+PiArfTsKPj4gKwo+PiArc3RhdGljIGludCB0aW55ZHJtX2ZiZGV2X2Ny ZWF0ZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyLAo+PiArCQkJCXN0cnVjdCBkcm1fZmJf aGVscGVyX3N1cmZhY2Vfc2l6ZSAqc2l6ZXMpCj4+ICt7Cj4+ICsJc3RydWN0IHRpbnlkcm1fZmJk ZXYgKmZiZGV2ID0gaGVscGVyX3RvX2ZiZGV2KGhlbHBlcik7Cj4+ICsJc3RydWN0IGRybV9tb2Rl X2ZiX2NtZDIgbW9kZV9jbWQgPSB7IDAgfTsKPj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0g aGVscGVyLT5kZXY7Cj4+ICsJc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2ID0gZGV2LT5kZXZf cHJpdmF0ZTsKPj4gKwlzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gKmZiZGVmaW87Cj4+ICsJc3RydWN0 IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4+ICsJdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9waXhlbCA9 IERJVl9ST1VORF9VUChzaXplcy0+c3VyZmFjZV9icHAsIDgpOwo+PiArCXN0cnVjdCBmYl9vcHMg KmZib3BzOwo+PiArCXN0cnVjdCBmYl9pbmZvICpmYmk7Cj4+ICsJc2l6ZV90IHNpemU7Cj4+ICsJ Y2hhciAqc2NyZWVuX2J1ZmZlcjsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJbW9kZV9jbWQud2lk dGggPSBzaXplcy0+c3VyZmFjZV93aWR0aDsKPj4gKwltb2RlX2NtZC5oZWlnaHQgPSBzaXplcy0+ c3VyZmFjZV9oZWlnaHQ7Cj4+ICsJbW9kZV9jbWQucGl0Y2hlc1swXSA9IHNpemVzLT5zdXJmYWNl X3dpZHRoICogYnl0ZXNfcGVyX3BpeGVsOwo+PiArCW1vZGVfY21kLnBpeGVsX2Zvcm1hdCA9IGRy bV9tb2RlX2xlZ2FjeV9mYl9mb3JtYXQoc2l6ZXMtPnN1cmZhY2VfYnBwLAo+PiArCQkJCQkJCXNp emVzLT5zdXJmYWNlX2RlcHRoKTsKPj4gKwlzaXplID0gbW9kZV9jbWQucGl0Y2hlc1swXSAqIG1v ZGVfY21kLmhlaWdodDsKPj4gKwo+PiArCS8qCj4+ICsJICogQSBwZXIgZGV2aWNlIGZib3BzIHN0 cnVjdHVyZSBpcyBuZWVkZWQgYmVjYXVzZQo+PiArCSAqIGZiX2RlZmVycmVkX2lvX2NsZWFudXAo KSBjbGVhcnMgZmJvcHMuZmJfbW1hcAo+PiArCSAqLwo+PiArCWZib3BzID0gZGV2bV9remFsbG9j KGRldi0+ZGV2LCBzaXplb2YoKmZib3BzKSwgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFmYm9wcykg ewo+PiArCQlkZXZfZXJyKGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGZib3BzXG4iKTsK Pj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4+ICsJfQo+PiArCj4+ICsJLyogQSBwZXIgZGV2aWNlIHN0 cnVjdHVyZSBpcyBuZWVkZWQgZm9yIGluZGl2aWR1YWwgZGVsYXlzICovCj4+ICsJZmJkZWZpbyA9 IGRldm1fa3phbGxvYyhkZXYtPmRldiwgc2l6ZW9mKCpmYmRlZmlvKSwgR0ZQX0tFUk5FTCk7Cj4+ ICsJaWYgKCFmYmRlZmlvKSB7Cj4+ICsJCWRldl9lcnIoZGV2LT5kZXYsICJDb3VsZCBub3QgYWxs b2NhdGUgZmJkZWZpb1xuIik7Cj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCX0KPj4gKwo+PiAr CWZiaSA9IGRybV9mYl9oZWxwZXJfYWxsb2NfZmJpKGhlbHBlcik7Cj4+ICsJaWYgKElTX0VSUihm YmkpKSB7Cj4+ICsJCWRldl9lcnIoZGV2LT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgZmJpXG4i KTsKPj4gKwkJcmV0dXJuIFBUUl9FUlIoZmJpKTsKPj4gKwl9Cj4+ICsKPj4gKwlzY3JlZW5fYnVm ZmVyID0gdnphbGxvYyhzaXplKTsKPj4gKwlpZiAoIXNjcmVlbl9idWZmZXIpIHsKPj4gKwkJZGV2 X2VycihkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBmYmRldiBzY3JlZW4gYnVmZmVyLlxu Iik7Cj4+ICsJCXJldCA9IC1FTk9NRU07Cj4+ICsJCWdvdG8gZXJyX2ZiX2luZm9fZGVzdHJveTsK Pj4gKwl9Cj4+ICsKPj4gKwlmYiA9ICZmYmRldi0+ZmI7Cj4+ICsJaGVscGVyLT5mYiA9IGZiOwo+ PiArCWRybV9oZWxwZXJfbW9kZV9maWxsX2ZiX3N0cnVjdChmYiwgJm1vZGVfY21kKTsKPj4gKwly ZXQgPSBkcm1fZnJhbWVidWZmZXJfaW5pdChkZXYsIGZiLCAmdGlueWRybV9mYmRldl9mYl9mdW5j cyk7Cj4+ICsJaWYgKHJldCkgewo+PiArCQlkZXZfZXJyKGRldi0+ZGV2LCAiZmFpbGVkIHRvIGlu aXQgZnJhbWVidWZmZXI6ICVkXG4iLCByZXQpOwo+PiArCQl2ZnJlZShzY3JlZW5fYnVmZmVyKTsK Pj4gKwkJZ290byBlcnJfZmJfaW5mb19kZXN0cm95Owo+PiArCX0KPj4gKwo+PiArCURSTV9ERUJV R19LTVMoImZiZGV2IEZCIElEOiAlZCwgdm1lbSA9ICVwXG4iLCBmYi0+YmFzZS5pZCwgZmJkZXYt PnZtZW0pOwo+PiArCj4+ICsJZmJpLT5wYXIgPSBoZWxwZXI7Cj4+ICsJZmJpLT5mbGFncyA9IEZC SU5GT19GTEFHX0RFRkFVTFQgfCBGQklORk9fVklSVEZCOwo+PiArCXN0cmNweShmYmktPmZpeC5p ZCwgInRpbnlkcm0iKTsKPj4gKwo+PiArCWZib3BzLT5vd25lciAgICAgICAgICA9IFRISVNfTU9E VUxFLAo+PiArCWZib3BzLT5mYl9maWxscmVjdCAgICA9IHRpbnlkcm1fZmJkZXZfZmJfZmlsbHJl Y3QsCj4+ICsJZmJvcHMtPmZiX2NvcHlhcmVhICAgID0gdGlueWRybV9mYmRldl9mYl9jb3B5YXJl YSwKPj4gKwlmYm9wcy0+ZmJfaW1hZ2VibGl0ICAgPSB0aW55ZHJtX2ZiZGV2X2ZiX2ltYWdlYmxp dCwKPj4gKwlmYm9wcy0+ZmJfd3JpdGUgICAgICAgPSB0aW55ZHJtX2ZiZGV2X2ZiX3dyaXRlLAo+ PiArCWZib3BzLT5mYl9jaGVja192YXIgICA9IGRybV9mYl9oZWxwZXJfY2hlY2tfdmFyLAo+PiAr CWZib3BzLT5mYl9zZXRfcGFyICAgICA9IGRybV9mYl9oZWxwZXJfc2V0X3BhciwKPj4gKwlmYm9w cy0+ZmJfYmxhbmsgICAgICAgPSBkcm1fZmJfaGVscGVyX2JsYW5rLAo+PiArCWZib3BzLT5mYl9z ZXRjbWFwICAgICA9IGRybV9mYl9oZWxwZXJfc2V0Y21hcCwKPj4gKwlmYmktPmZib3BzID0gZmJv cHM7Cj4+ICsKPj4gKwlkcm1fZmJfaGVscGVyX2ZpbGxfZml4KGZiaSwgZmItPnBpdGNoZXNbMF0s IGZiLT5kZXB0aCk7Cj4+ICsJZHJtX2ZiX2hlbHBlcl9maWxsX3ZhcihmYmksIGhlbHBlciwgc2l6 ZXMtPmZiX3dpZHRoLCBzaXplcy0+ZmJfaGVpZ2h0KTsKPj4gKwo+PiArCWZiZGV2LT52bWVtID0g c2NyZWVuX2J1ZmZlcjsKPj4gKwlmYmktPnNjcmVlbl9idWZmZXIgPSBzY3JlZW5fYnVmZmVyOwo+ PiArCWZiaS0+c2NyZWVuX3NpemUgPSBzaXplOwo+PiArCWZiaS0+Zml4LnNtZW1fbGVuID0gc2l6 ZTsKPj4gKwo+PiArCWlmICh0ZGV2LT5kZWZlcnJlZCkKPj4gKwkJZmJkZWZpby0+ZGVsYXkgPSBt c2Vjc190b19qaWZmaWVzKHRkZXYtPmRlZmVycmVkLT5kZWZlcl9tcyk7Cj4+ICsJZWxzZQo+PiAr CQlmYmRlZmlvLT5kZWxheSA9IERFRkFVTFRfREVGSU9fREVMQVk7Cj4+ICsJLyogZGVsYXk9MCBp cyB0dXJuZWQgaW50byBkZWxheT1IWiwgc28gdXNlIDEgYXMgYSBtaW5pbXVtICovCj4+ICsJaWYg KCFmYmRlZmlvLT5kZWxheSkKPj4gKwkJZmJkZWZpby0+ZGVsYXkgPSAxOwo+PiArCWZiZGVmaW8t PmRlZmVycmVkX2lvID0gdGlueWRybV9mYmRldl9kZWZlcnJlZF9pbzsKPj4gKwlmYmktPmZiZGVm aW8gPSBmYmRlZmlvOwo+PiArCWZiX2RlZmVycmVkX2lvX2luaXQoZmJpKTsKPj4gKwo+PiArCXJl dHVybiAwOwo+PiArCj4+ICtlcnJfZmJfaW5mb19kZXN0cm95Ogo+PiArCWRybV9mYl9oZWxwZXJf cmVsZWFzZV9mYmkoaGVscGVyKTsKPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2ZiX2hlbHBlcl9mdW5jcyB0aW55ZHJtX2ZiX2hlbHBl cl9mdW5jcyA9IHsKPj4gKwkuZmJfcHJvYmUgPSB0aW55ZHJtX2ZiZGV2X2NyZWF0ZSwKPj4gK307 Cj4+ICsKPj4gK2ludCB0aW55ZHJtX2ZiZGV2X2luaXQoc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0 ZGV2KQo+PiArewo+PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSB0ZGV2LT5iYXNlOwo+PiAr CXN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXI7Cj4+ICsJc3RydWN0IHRpbnlkcm1fZmJkZXYg KmZiZGV2Owo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlEUk1fREVCVUdfS01TKCJJTlxuIik7Cj4+ ICsKPj4gKwlmYmRldiA9IGRldm1fa3phbGxvYyhkZXYtPmRldiwgc2l6ZW9mKCpmYmRldiksIEdG UF9LRVJORUwpOwo+PiArCWlmICghZmJkZXYpIHsKPj4gKwkJZGV2X2VycihkZXYtPmRldiwgIkZh aWxlZCB0byBhbGxvY2F0ZSBkcm0gZmJkZXYuXG4iKTsKPj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4+ ICsJfQo+PiArCj4+ICsJaGVscGVyID0gJmZiZGV2LT5mYl9oZWxwZXI7Cj4+ICsKPj4gKwlkcm1f ZmJfaGVscGVyX3ByZXBhcmUoZGV2LCBoZWxwZXIsICZ0aW55ZHJtX2ZiX2hlbHBlcl9mdW5jcyk7 Cj4+ICsKPj4gKwlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXQoZGV2LCBoZWxwZXIsIDEsIDEpOwo+ PiArCWlmIChyZXQgPCAwKSB7Cj4+ICsJCWRldl9lcnIoZGV2LT5kZXYsICJGYWlsZWQgdG8gaW5p dGlhbGl6ZSBkcm0gZmIgaGVscGVyLlxuIik7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+PiAr Cj4+ICsJcmV0ID0gZHJtX2ZiX2hlbHBlcl9zaW5nbGVfYWRkX2FsbF9jb25uZWN0b3JzKGhlbHBl cik7Cj4+ICsJaWYgKHJldCA8IDApIHsKPj4gKwkJZGV2X2VycihkZXYtPmRldiwgIkZhaWxlZCB0 byBhZGQgY29ubmVjdG9ycy5cbiIpOwo+PiArCQlnb3RvIGVycl9kcm1fZmJfaGVscGVyX2Zpbmk7 Cj4+ICsKPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXRpYWxfY29uZmln KGhlbHBlciwgMTYpOwo+PiArCWlmIChyZXQgPCAwKSB7Cj4+ICsJCWRldl9lcnIoZGV2LT5kZXYs ICJGYWlsZWQgdG8gc2V0IGluaXRpYWwgaHcgY29uZmlndXJhdGlvbi5cbiIpOwo+PiArCQlnb3Rv IGVycl9kcm1fZmJfaGVscGVyX2Zpbmk7Cj4+ICsJfQo+PiArCj4+ICsJdGRldi0+ZmJkZXYgPSBm YmRldjsKPj4gKwlEUk1fREVCVUdfS01TKCJPVVRcbiIpOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ ICsKPj4gK2Vycl9kcm1fZmJfaGVscGVyX2Zpbmk6Cj4+ICsJZHJtX2ZiX2hlbHBlcl9maW5pKGhl bHBlcik7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICt2b2lkIHRpbnlkcm1f ZmJkZXZfZmluaShzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpCj4+ICt7Cj4+ICsJc3RydWN0 IHRpbnlkcm1fZmJkZXYgKmZiZGV2ID0gdGRldi0+ZmJkZXY7Cj4+ICsJc3RydWN0IGRybV9mYl9o ZWxwZXIgKmZiX2hlbHBlciA9ICZmYmRldi0+ZmJfaGVscGVyOwo+PiArCj4+ICsJRFJNX0RFQlVH X0tNUygiSU5cbiIpOwo+PiArCj4+ICsJZHJtX2ZiX2hlbHBlcl91bnJlZ2lzdGVyX2ZiaShmYl9o ZWxwZXIpOwo+PiArCWZiX2RlZmVycmVkX2lvX2NsZWFudXAoZmJfaGVscGVyLT5mYmRldik7Cj4+ ICsJZHJtX2ZiX2hlbHBlcl9yZWxlYXNlX2ZiaShmYl9oZWxwZXIpOwo+PiArCWRybV9mYl9oZWxw ZXJfZmluaShmYl9oZWxwZXIpOwo+PiArCj4+ICsJZHJtX2ZyYW1lYnVmZmVyX3VucmVnaXN0ZXJf cHJpdmF0ZSgmZmJkZXYtPmZiKTsKPj4gKwlkcm1fZnJhbWVidWZmZXJfY2xlYW51cCgmZmJkZXYt PmZiKTsKPj4gKwo+PiArCXZmcmVlKGZiZGV2LT52bWVtKTsKPj4gKwo+PiArCXRkZXYtPmZiZGV2 ID0gTlVMTDsKPj4gKwlEUk1fREVCVUdfS01TKCJPVVRcbiIpOwo+PiArfQo+PiArCj4+ICsvKiBU T0RPOiBwYXNzIHRkZXYgaW5zdGVhZCA/ICovCj4+ICt2b2lkIHRpbnlkcm1fZmJkZXZfcmVzdG9y ZV9tb2RlKHN0cnVjdCB0aW55ZHJtX2ZiZGV2ICpmYmRldikKPj4gK3sKPj4gKwlpZiAoZmJkZXYp Cj4+ICsJCWRybV9mYl9oZWxwZXJfcmVzdG9yZV9mYmRldl9tb2RlX3VubG9ja2VkKCZmYmRldi0+ ZmJfaGVscGVyKTsKPj4gK30KPj4gK0VYUE9SVF9TWU1CT0wodGlueWRybV9mYmRldl9yZXN0b3Jl X21vZGUpOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90aW55 ZHJtLWZyYW1lYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vdGlueWRybS9jb3JlL3Rpbnlkcm0t ZnJhbWVidWZmZXIuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi4x MDU2YmM2Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0v Y29yZS90aW55ZHJtLWZyYW1lYnVmZmVyLmMKPj4gQEAgLTAsMCArMSwxMTIgQEAKPj4gKy8qCj4+ ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTm9yYWxmIFRyw7hubmVzCj4+ICsgKgo+PiArICogVGhp cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v ciBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4+ICsgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+PiArICogKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPj4gKyAqLwo+PiArCj4+ICsjaW5jbHVkZSA8 ZHJtL2RybVAuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4KPj4gKyNp bmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9nZW1f Y21hX2hlbHBlci5oPgo+PiArI2luY2x1ZGUgPGRybS90aW55ZHJtL3Rpbnlkcm0uaD4KPj4gKwo+ PiArc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlueWRybV9mcmFtZWJ1ZmZlciAqdG9fdGlueWRybV9m cmFtZWJ1ZmZlcihzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKPj4gK3sKPj4gKwlyZXR1cm4g Y29udGFpbmVyX29mKGZiLCBzdHJ1Y3QgdGlueWRybV9mcmFtZWJ1ZmZlciwgYmFzZSk7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRpbnlkcm1fZnJhbWVidWZmZXJfZGVzdHJveShzdHJ1Y3Qg ZHJtX2ZyYW1lYnVmZmVyICpmYikKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlueWRybV9mcmFtZWJ1ZmZl ciAqdGlueWRybV9mYiA9IHRvX3Rpbnlkcm1fZnJhbWVidWZmZXIoZmIpOwo+PiArCXN0cnVjdCB0 aW55ZHJtX2RldmljZSAqdGRldiA9IGZiLT5kZXYtPmRldl9wcml2YXRlOwo+PiArCj4+ICsJRFJN X0RFQlVHX0tNUygiZmIgPSAlcCwgY21hX29iaiA9ICVwXG4iLCBmYiwgdGlueWRybV9mYi0+Y21h X29iaik7Cj4+ICsKPj4gKwlpZiAodGRldi0+ZGVmZXJyZWQpCj4+ICsJCWZsdXNoX2RlbGF5ZWRf d29yaygmdGRldi0+ZGVmZXJyZWQtPmR3b3JrKTsKPj4gKwo+PiArCWlmICh0aW55ZHJtX2ZiLT5j bWFfb2JqKQo+PiArCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmdGlueWRy bV9mYi0+Y21hX29iai0+YmFzZSk7Cj4+ICsKPj4gKwlkcm1fZnJhbWVidWZmZXJfY2xlYW51cChm Yik7Cj4+ICsJa2ZyZWUodGlueWRybV9mYik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgdGlu eWRybV9mcmFtZWJ1ZmZlcl9kaXJ0eShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKPj4gKwkJ CQkgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LAo+PiArCQkJCSAgICAgdW5zaWduZWQg ZmxhZ3MsIHVuc2lnbmVkIGNvbG9yLAo+PiArCQkJCSAgICAgc3RydWN0IGRybV9jbGlwX3JlY3Qg KmNsaXBzLAo+PiArCQkJCSAgICAgdW5zaWduZWQgbnVtX2NsaXBzKQo+PiArewo+PiArCXN0cnVj dCB0aW55ZHJtX2ZyYW1lYnVmZmVyICp0ZmIgPSB0b190aW55ZHJtX2ZyYW1lYnVmZmVyKGZiKTsK Pj4gKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYgPSBmYi0+ZGV2LT5kZXZfcHJpdmF0ZTsK Pj4gKwo+PiArCWRldl9kYmcoZmItPmRldi0+ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKPj4gKwo+ PiArCXJldHVybiB0ZGV2LT5kaXJ0eWZiKGZiLCB0ZmItPmNtYV9vYmotPnZhZGRyLCBmbGFncywg Y29sb3IsIGNsaXBzLCBudW1fY2xpcHMpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyB0aW55ZHJtX2ZiX2Z1bmNzID0gewo+PiArCS5kZXN0 cm95ID0gdGlueWRybV9mcmFtZWJ1ZmZlcl9kZXN0cm95LAo+PiArCS5kaXJ0eSA9IHRpbnlkcm1f ZnJhbWVidWZmZXJfZGlydHksCj4+ICsvKglUT0RPPwo+PiArICoJLmNyZWF0ZV9oYW5kbGUgPSB0 aW55ZHJtX2ZyYW1lYnVmZmVyX2NyZWF0ZV9oYW5kbGUsICovCj4+ICt9Owo+PiArCj4+ICtzdGF0 aWMgc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqCj4+ICt0aW55ZHJtX2ZiX2NyZWF0ZShzdHJ1Y3Qg ZHJtX2RldmljZSAqZGRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCj4+ICsJCSAgc3Ry dWN0IGRybV9tb2RlX2ZiX2NtZDIgKm1vZGVfY21kKQo+PiArewo+PiArCXN0cnVjdCB0aW55ZHJt X2ZyYW1lYnVmZmVyICp0aW55ZHJtX2ZiOwo+PiArCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2Jq Owo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwkvKiBUT0RPPyBWYWxpZGF0ZSB0aGUgcGl4ZWwgZm9y bWF0LCBzaXplIGFuZCBwaXRjaGVzICovCj4+ICsJRFJNX0RFQlVHX0tNUygicGl4ZWxfZm9ybWF0 PSVzXG4iLCBkcm1fZ2V0X2Zvcm1hdF9uYW1lKG1vZGVfY21kLT5waXhlbF9mb3JtYXQpKTsKPj4g KwlEUk1fREVCVUdfS01TKCJ3aWR0aD0ldVxuIiwgbW9kZV9jbWQtPndpZHRoKTsKPj4gKwlEUk1f REVCVUdfS01TKCJoZWlnaHQ9JXVcbiIsIG1vZGVfY21kLT5oZWlnaHQpOwo+PiArCURSTV9ERUJV R19LTVMoInBpdGNoZXNbMF09JXVcbiIsIG1vZGVfY21kLT5waXRjaGVzWzBdKTsKPj4gKwo+PiAr CW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZGV2LCBmaWxlX3ByaXYsIG1vZGVfY21kLT5o YW5kbGVzWzBdKTsKPj4gKwlpZiAoIW9iaikKPj4gKwkJcmV0dXJuIE5VTEw7Cj4+ICsKPj4gKwl0 aW55ZHJtX2ZiID0ga3phbGxvYyhzaXplb2YoKnRpbnlkcm1fZmIpLCBHRlBfS0VSTkVMKTsKPj4g KwlpZiAoIXRpbnlkcm1fZmIpCj4+ICsJCXJldHVybiBOVUxMOwo+PiArCj4+ICsJdGlueWRybV9m Yi0+Y21hX29iaiA9IHRvX2RybV9nZW1fY21hX29iaihvYmopOwo+PiArCj4+ICsJcmV0ID0gZHJt X2ZyYW1lYnVmZmVyX2luaXQoZGRldiwgJnRpbnlkcm1fZmItPmJhc2UsICZ0aW55ZHJtX2ZiX2Z1 bmNzKTsKPj4gKwlpZiAocmV0KSB7Cj4+ICsJCWtmcmVlKHRpbnlkcm1fZmIpOwo+PiArCQlkcm1f Z2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwo+PiArCQlyZXR1cm4gTlVMTDsK Pj4gKwl9Cj4+ICsKPj4gKwlkcm1faGVscGVyX21vZGVfZmlsbF9mYl9zdHJ1Y3QoJnRpbnlkcm1f ZmItPmJhc2UsIG1vZGVfY21kKTsKPj4gKwo+PiArCXJldHVybiAmdGlueWRybV9mYi0+YmFzZTsK Pj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3Mg dGlueWRybV9tb2RlX2NvbmZpZ19mdW5jcyA9IHsKPj4gKwkuZmJfY3JlYXRlID0gdGlueWRybV9m Yl9jcmVhdGUsCj4+ICsJLmF0b21pY19jaGVjayA9IGRybV9hdG9taWNfaGVscGVyX2NoZWNrLAo+ PiArCS5hdG9taWNfY29tbWl0ID0gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0LAo+PiArfTsKPj4g Kwo+PiArdm9pZCB0aW55ZHJtX21vZGVfY29uZmlnX2luaXQoc3RydWN0IHRpbnlkcm1fZGV2aWNl ICp0ZGV2KQo+PiArewo+PiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZGV2ID0gdGRldi0+YmFzZTsK Pj4gKwo+PiArCWRybV9tb2RlX2NvbmZpZ19pbml0KGRkZXYpOwo+PiArCj4+ICsJZGRldi0+bW9k ZV9jb25maWcubWluX3dpZHRoID0gdGRldi0+d2lkdGg7Cj4+ICsJZGRldi0+bW9kZV9jb25maWcu bWluX2hlaWdodCA9IHRkZXYtPmhlaWdodDsKPj4gKwlkZGV2LT5tb2RlX2NvbmZpZy5tYXhfd2lk dGggPSB0ZGV2LT53aWR0aDsKPj4gKwlkZGV2LT5tb2RlX2NvbmZpZy5tYXhfaGVpZ2h0ID0gdGRl di0+aGVpZ2h0Owo+PiArCWRkZXYtPm1vZGVfY29uZmlnLmZ1bmNzID0gJnRpbnlkcm1fbW9kZV9j b25maWdfZnVuY3M7Cj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdGlueWRy bS9jb3JlL3Rpbnlkcm0taGVscGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vY29yZS90 aW55ZHJtLWhlbHBlcnMuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAw Li44ZWQ5YTE1Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlk cm0vY29yZS90aW55ZHJtLWhlbHBlcnMuYwo+PiBAQCAtMCwwICsxLDk3IEBACj4+ICsvKgo+PiAr ICogQ29weXJpZ2h0IChDKSAyMDE2IE5vcmFsZiBUcsO4bm5lcwo+PiArICoKPj4gKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5Cj4+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+PiArICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPj4gKyAqIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUgPGRy bS9kcm1QLmg+Cj4+ICsjaW5jbHVkZSA8ZHJtL3Rpbnlkcm0vdGlueWRybS5oPgo+PiArI2luY2x1 ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KPj4g Kwo+PiArI2luY2x1ZGUgImludGVybmFsLmgiCj4+ICsKPj4gK3N0cnVjdCBiYWNrbGlnaHRfZGV2 aWNlICp0aW55ZHJtX29mX2ZpbmRfYmFja2xpZ2h0KHN0cnVjdCBkZXZpY2UgKmRldikKPj4gK3sK Pj4gKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0Owo+PiArCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqbnA7Cj4+ICsKPj4gKwlucCA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5vZl9ub2Rl LCAiYmFja2xpZ2h0IiwgMCk7Cj4+ICsJaWYgKCFucCkKPj4gKwkJcmV0dXJuIE5VTEw7Cj4+ICsK Pj4gKwliYWNrbGlnaHQgPSBvZl9maW5kX2JhY2tsaWdodF9ieV9ub2RlKG5wKTsKPj4gKwlvZl9u b2RlX3B1dChucCk7Cj4+ICsKPj4gKwlpZiAoIWJhY2tsaWdodCkKPj4gKwkJcmV0dXJuIEVSUl9Q VFIoLUVQUk9CRV9ERUZFUik7Cj4+ICsKPj4gKwlyZXR1cm4gYmFja2xpZ2h0Owo+PiArfQo+PiAr RVhQT1JUX1NZTUJPTCh0aW55ZHJtX29mX2ZpbmRfYmFja2xpZ2h0KTsKPj4gKwo+PiAraW50IHRp bnlkcm1fcGFuZWxfZW5hYmxlX2JhY2tsaWdodChzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKPj4g K3sKPj4gKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYgPSB0aW55ZHJtX2Zyb21fcGFuZWwo cGFuZWwpOwo+PiArCj4+ICsJaWYgKHRkZXYtPmJhY2tsaWdodCkgewo+PiArCQlpZiAodGRldi0+ YmFja2xpZ2h0LT5wcm9wcy5icmlnaHRuZXNzID09IDApCj4+ICsJCQl0ZGV2LT5iYWNrbGlnaHQt PnByb3BzLmJyaWdodG5lc3MgPQo+PiArCQkJCQl0ZGV2LT5iYWNrbGlnaHQtPnByb3BzLm1heF9i cmlnaHRuZXNzOwo+PiArCQl0ZGV2LT5iYWNrbGlnaHQtPnByb3BzLnN0YXRlICY9IH5CTF9DT1JF X1NVU1BFTkRFRDsKPj4gKwkJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXModGRldi0+YmFja2xpZ2h0 KTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gK0VYUE9SVF9TWU1CT0wodGlu eWRybV9wYW5lbF9lbmFibGVfYmFja2xpZ2h0KTsKPj4gKwo+PiAraW50IHRpbnlkcm1fcGFuZWxf ZGlzYWJsZV9iYWNrbGlnaHQoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4+ICt7Cj4+ICsJc3Ry dWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2ID0gdGlueWRybV9mcm9tX3BhbmVsKHBhbmVsKTsKPj4g Kwo+PiArCWlmICh0ZGV2LT5iYWNrbGlnaHQpIHsKPj4gKwkJdGRldi0+YmFja2xpZ2h0LT5wcm9w cy5zdGF0ZSB8PSBCTF9DT1JFX1NVU1BFTkRFRDsKPj4gKwkJYmFja2xpZ2h0X3VwZGF0ZV9zdGF0 dXModGRldi0+YmFja2xpZ2h0KTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4g K0VYUE9SVF9TWU1CT0wodGlueWRybV9wYW5lbF9kaXNhYmxlX2JhY2tsaWdodCk7Cj4+ICsKPj4g K3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgdGlueWRybV9wbV9zdXNwZW5kKHN0cnVjdCBkZXZp Y2UgKmRldikKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYgPSBkZXZfZ2V0 X2RydmRhdGEoZGV2KTsKPj4gKwo+PiArCXRpbnlkcm1fZGlzYWJsZSh0ZGV2KTsKPj4gKwl0aW55 ZHJtX3VucHJlcGFyZSh0ZGV2KTsKPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHRpbnlkcm1fcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2Ug KmRldikKPj4gK3sKPj4gKwlzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKPj4gKwo+PiArCXRpbnlkcm1fcHJlcGFyZSh0ZGV2KTsKPj4gKwkvKiBUaGUg cGFuZWwgaXMgZW5hYmxlZCBhZnRlciB0aGUgZmlyc3QgZGlzcGxheSB1cGRhdGUgKi8KPj4gKwo+ PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB0aW55 ZHJtX3NpbXBsZV9wbV9vcHMgPSB7Cj4+ICsgICAgICAgIFNFVF9TWVNURU1fU0xFRVBfUE1fT1BT KHRpbnlkcm1fcG1fc3VzcGVuZCwgdGlueWRybV9wbV9yZXN1bWUpCj4+ICt9Owo+PiArRVhQT1JU X1NZTUJPTCh0aW55ZHJtX3NpbXBsZV9wbV9vcHMpOwo+PiArCj4+ICt2b2lkIHRpbnlkcm1fc3Bp X3NodXRkb3duKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCj4+ICt7Cj4+ICsJc3RydWN0IHRpbnlk cm1fZGV2aWNlICp0ZGV2ID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7Cj4+ICsKPj4gKwl0aW55ZHJt X2Rpc2FibGUodGRldik7Cj4+ICsJdGlueWRybV91bnByZXBhcmUodGRldik7Cj4+ICt9Cj4+ICtF WFBPUlRfU1lNQk9MKHRpbnlkcm1fc3BpX3NodXRkb3duKTsKPj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJt L3Rpbnlkcm0vY29yZS90aW55ZHJtLXBsYW5lLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4g aW5kZXggMDAwMDAwMC4uNzc3NGU4Ywo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS90aW55ZHJtL2NvcmUvdGlueWRybS1wbGFuZS5jCj4+IEBAIC0wLDAgKzEsNTAgQEAK Pj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTm9yYWxmIFRyw7hubmVzCj4+ICsgKgo+ PiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4+ICsgKiB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+PiAr ICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPj4gKyAqLwo+PiArCj4+ICsj aW5jbHVkZSA8ZHJtL2RybVAuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIu aD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX3Bs YW5lX2hlbHBlci5oPgo+PiArI2luY2x1ZGUgPGRybS90aW55ZHJtL3Rpbnlkcm0uaD4KPj4gKwo+ PiArLyogVE9ETzogQ29uZmlndXJhYmxlICovCj4+ICtzdGF0aWMgY29uc3QgdWludDMyX3QgdGlu eWRybV9mb3JtYXRzW10gPSB7Cj4+ICsJRFJNX0ZPUk1BVF9SR0I1NjUsCj4+ICsJRFJNX0ZPUk1B VF9YUkdCODg4OCwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIHRpbnlkcm1fcGxhbmVfYXRv bWljX3VwZGF0ZShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPj4gKwkJCQkJc3RydWN0IGRybV9w bGFuZV9zdGF0ZSAqb2xkX3N0YXRlKQo+PiArewo+PiArCURSTV9ERUJVRygiaGFuZGxlIDB4JXgs IGNydGMgJWR4JWQrJWQrJWRcbiIsIDAsCj4+ICsJCSAgcGxhbmUtPnN0YXRlLT5jcnRjX3csIHBs YW5lLT5zdGF0ZS0+Y3J0Y19oLAo+PiArCQkgIHBsYW5lLT5zdGF0ZS0+Y3J0Y194LCBwbGFuZS0+ c3RhdGUtPmNydGNfeSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3Bs YW5lX2hlbHBlcl9mdW5jcyB0aW55ZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyA9IHsKPj4gKwkuYXRv bWljX3VwZGF0ZSA9IHRpbnlkcm1fcGxhbmVfYXRvbWljX3VwZGF0ZSwKPj4gK307Cj4+ICsKPj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5lX2Z1bmNzIHRpbnlkcm1fcGxhbmVfZnVuY3Mg PSB7Cj4+ICsJLnVwZGF0ZV9wbGFuZQkJPSBkcm1fYXRvbWljX2hlbHBlcl91cGRhdGVfcGxhbmUs Cj4+ICsJLmRpc2FibGVfcGxhbmUJCT0gZHJtX2F0b21pY19oZWxwZXJfZGlzYWJsZV9wbGFuZSwK Pj4gKwkuZGVzdHJveQkJPSBkcm1fcGxhbmVfY2xlYW51cCwKPj4gKwkucmVzZXQJCQk9IGRybV9h dG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0LAo+PiArCS5hdG9taWNfZHVwbGljYXRlX3N0YXRlCT0g ZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfZHVwbGljYXRlX3N0YXRlLAo+PiArCS5hdG9taWNfZGVz dHJveV9zdGF0ZQk9IGRybV9hdG9taWNfaGVscGVyX3BsYW5lX2Rlc3Ryb3lfc3RhdGUsCj4+ICt9 Owo+PiArCj4+ICtpbnQgdGlueWRybV9wbGFuZV9pbml0KHN0cnVjdCB0aW55ZHJtX2RldmljZSAq dGRldikKPj4gK3sKPj4gKwlkcm1fcGxhbmVfaGVscGVyX2FkZCgmdGRldi0+cGxhbmUsICZ0aW55 ZHJtX3BsYW5lX2hlbHBlcl9mdW5jcyk7Cj4+ICsJcmV0dXJuIGRybV91bml2ZXJzYWxfcGxhbmVf aW5pdCh0ZGV2LT5iYXNlLCAmdGRldi0+cGxhbmUsIDAsCj4+ICsJCQkJCSZ0aW55ZHJtX3BsYW5l X2Z1bmNzLCB0aW55ZHJtX2Zvcm1hdHMsCj4+ICsJCQkJCUFSUkFZX1NJWkUodGlueWRybV9mb3Jt YXRzKSwKPj4gKwkJCQkJRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7Cj4+ICt9Cj4+IGRpZmYgLS1n aXQgYS9pbmNsdWRlL2RybS90aW55ZHJtL3Rpbnlkcm0uaCBiL2luY2x1ZGUvZHJtL3Rpbnlkcm0v dGlueWRybS5oCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjY5NWU0 ODMKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9pbmNsdWRlL2RybS90aW55ZHJtL3Rpbnlkcm0u aAo+PiBAQCAtMCwwICsxLDE0MiBAQAo+PiArLyoKPj4gKyAqIENvcHlyaWdodCAoQykgMjAxNiBO b3JhbGYgVHLDuG5uZXMKPj4gKyAqCj4+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+PiArICogaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkKPj4gKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIg b2YgdGhlIExpY2Vuc2UsIG9yCj4+ICsgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgo+PiArICovCj4+ICsKPj4gKyNpZm5kZWYgX19MSU5VWF9USU5ZRFJNX0gKPj4gKyNkZWZp bmUgX19MSU5VWF9USU5ZRFJNX0gKPj4gKwo+PiArCj4+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4K Pj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVs Lmg+Cj4+ICsKPj4gK3N0cnVjdCB0aW55ZHJtX2RlZmVycmVkOwo+PiArc3RydWN0IHRpbnlkcm1f ZmJkZXY7Cj4+ICtzdHJ1Y3Qgc3BpX2RldmljZTsKPj4gK3N0cnVjdCByZWd1bGF0b3I7Cj4+ICtz dHJ1Y3QgbGNkcmVnOwo+PiArCj4+ICtzdHJ1Y3QgdGlueWRybV9mcmFtZWJ1ZmZlciB7Cj4+ICsJ c3RydWN0IGRybV9mcmFtZWJ1ZmZlciBiYXNlOwo+PiArCXN0cnVjdCBkcm1fZ2VtX2NtYV9vYmpl Y3QgKmNtYV9vYmo7Cj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgdGlueWRybV9kZXZpY2Ugewo+PiAr CXN0cnVjdCBkcm1fZGV2aWNlICpiYXNlOwo+PiArCXUzMiB3aWR0aCwgaGVpZ2h0Owo+PiArCXN0 cnVjdCBkcm1fcGFuZWwgcGFuZWw7Cj4+ICsJc3RydWN0IGRybV9wbGFuZSBwbGFuZTsKPj4gKwlz dHJ1Y3QgdGlueWRybV9mYmRldiAqZmJkZXY7Cj4+ICsJc3RydWN0IHRpbnlkcm1fZGVmZXJyZWQg KmRlZmVycmVkOwo+PiArCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQ7Cj4+ICsJ c3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yOwo+PiArCXN0cnVjdCBsY2RyZWcgKmxjZHJlZzsK Pj4gKwlib29sIHByZXBhcmVkOwo+PiArCWJvb2wgZW5hYmxlZDsKPj4gKwl2b2lkICpkZXZfcHJp dmF0ZTsKPj4gKwo+PiArCWludCAoKmRpcnR5ZmIpKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZi LCB2b2lkICp2bWVtLCB1bnNpZ25lZCBmbGFncywKPj4gKwkJICAgICAgIHVuc2lnbmVkIGNvbG9y LCBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHMsCj4+ICsJCSAgICAgICB1bnNpZ25lZCBudW1f Y2xpcHMpOwo+PiArfTsKPj4gKwo+PiAraW50IGRldm1fdGlueWRybV9yZWdpc3RlcihzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldik7Cj4+ICtpbnQgdGlueWRy bV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRl dik7Cj4+ICt2b2lkIHRpbnlkcm1fcmVsZWFzZShzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYp Owo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGlueWRybV9m cm9tX3BhbmVsKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+PiArewo+PiArCXJldHVybiBwYW5l bC0+Y29ubmVjdG9yLT5kZXYtPmRldl9wcml2YXRlOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5s aW5lIHZvaWQgdGlueWRybV9wcmVwYXJlKHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldikKPj4g K3sKPj4gKwlpZiAoIXRkZXYtPnByZXBhcmVkKSB7Cj4+ICsJCWRybV9wYW5lbF9wcmVwYXJlKCZ0 ZGV2LT5wYW5lbCk7Cj4+ICsJCXRkZXYtPnByZXBhcmVkID0gdHJ1ZTsKPj4gKwl9Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW55ZHJtX3VucHJlcGFyZShzdHJ1Y3QgdGlueWRy bV9kZXZpY2UgKnRkZXYpCj4+ICt7Cj4+ICsJaWYgKHRkZXYtPnByZXBhcmVkKSB7Cj4+ICsJCWRy bV9wYW5lbF91bnByZXBhcmUoJnRkZXYtPnBhbmVsKTsKPj4gKwkJdGRldi0+cHJlcGFyZWQgPSBm YWxzZTsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW55ZHJtX2Vu YWJsZShzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKnRkZXYpCj4+ICt7Cj4+ICsJaWYgKCF0ZGV2LT5l bmFibGVkKSB7Cj4+ICsJCWRybV9wYW5lbF9lbmFibGUoJnRkZXYtPnBhbmVsKTsKPj4gKwkJdGRl di0+ZW5hYmxlZCA9IHRydWU7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHZv aWQgdGlueWRybV9kaXNhYmxlKHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldikKPj4gK3sKPj4g KwlpZiAodGRldi0+ZW5hYmxlZCkgewo+PiArCQlkcm1fcGFuZWxfZGlzYWJsZSgmdGRldi0+cGFu ZWwpOwo+PiArCQl0ZGV2LT5lbmFibGVkID0gZmFsc2U7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtz dHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqdGlueWRybV9vZl9maW5kX2JhY2tsaWdodChzdHJ1Y3Qg ZGV2aWNlICpkZXYpOwo+PiAraW50IHRpbnlkcm1fcGFuZWxfZW5hYmxlX2JhY2tsaWdodChzdHJ1 Y3QgZHJtX3BhbmVsICpwYW5lbCk7Cj4+ICtpbnQgdGlueWRybV9wYW5lbF9kaXNhYmxlX2JhY2ts aWdodChzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCk7Cj4+ICtleHRlcm4gY29uc3Qgc3RydWN0IGRl dl9wbV9vcHMgdGlueWRybV9zaW1wbGVfcG1fb3BzOwo+PiArdm9pZCB0aW55ZHJtX3NwaV9zaHV0 ZG93bihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKTsKPj4gKwo+PiArc3RydWN0IHRpbnlkcm1fZmJf Y2xpcCB7Cj4+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmI7Cj4+ICsJc3RydWN0IGRybV9j bGlwX3JlY3QgY2xpcDsKPj4gKwl2b2lkICp2bWVtOwo+PiArfTsKPj4gKwo+PiArc3RydWN0IHRp bnlkcm1fZGVmZXJyZWQgewo+PiArCXN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcms7Cj4+ICsJc3Ry dWN0IHRpbnlkcm1fZmJfY2xpcCBmYl9jbGlwOwo+PiArCXVuc2lnbmVkIGRlZmVyX21zOwo+PiAr CXNwaW5sb2NrX3QgbG9jazsKPj4gKwlib29sIG5vX2RlbGF5Owo+PiArfTsKPj4gKwo+PiArc3Rh dGljIGlubGluZSBzdHJ1Y3QgdGlueWRybV9kZXZpY2UgKndvcmtfdG9fdGlueWRybShzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspCj4+ICt7Cj4+ICsJc3RydWN0IHRpbnlkcm1fZGVmZXJyZWQgKmRl ZmVycmVkOwo+PiArCj4+ICsJZGVmZXJyZWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHRp bnlkcm1fZGVmZXJyZWQsIGR3b3JrLndvcmspOwo+PiArCXJldHVybiBkZWZlcnJlZC0+ZmJfY2xp cC5mYi0+ZGV2LT5kZXZfcHJpdmF0ZTsKPj4gK30KPj4gKwo+PiArYm9vbCB0aW55ZHJtX2RlZmVy cmVkX2JlZ2luKHN0cnVjdCB0aW55ZHJtX2RldmljZSAqdGRldiwKPj4gKwkJCSAgICBzdHJ1Y3Qg dGlueWRybV9mYl9jbGlwICpmYl9jbGlwKTsKPj4gK3ZvaWQgdGlueWRybV9kZWZlcnJlZF9lbmQo c3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2KTsKPj4gK2ludCB0aW55ZHJtX2RpcnR5ZmIoc3Ry dWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIsIHZvaWQgKnZtZW0sIHVuc2lnbmVkIGZsYWdzLAo+PiAr CQkgICAgdW5zaWduZWQgY29sb3IsIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywKPj4gKwkJ ICAgIHVuc2lnbmVkIG51bV9jbGlwcyk7Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgYm9vbCB0aW55 ZHJtX2lzX2Z1bGxfY2xpcChzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcCwgdTMyIHdpZHRoLCB1 MzIgaGVpZ2h0KQo+PiArewo+PiArCXJldHVybiBjbGlwLT54MSA9PSAwICYmIGNsaXAtPngyID49 ICh3aWR0aCAtIDEpICYmCj4+ICsJICAgICAgIGNsaXAtPnkxID09IDAgJiYgY2xpcC0+eTIgPj0g KGhlaWdodCAtMSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW55ZHJtX3Jl c2V0X2NsaXAoc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXApCj4+ICt7Cj4+ICsJY2xpcC0+eDEg PSB+MDsKPj4gKwljbGlwLT54MiA9IDA7Cj4+ICsJY2xpcC0+eTEgPSB+MDsKPj4gKwljbGlwLT55 MiA9IDA7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgdGlueWRybV9tZXJnZV9jbGlwcyhzdHJ1Y3QgZHJt X2NsaXBfcmVjdCAqZHN0LAo+PiArCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywgdW5z aWduZWQgbnVtX2NsaXBzLAo+PiArCQkJIHVuc2lnbmVkIGZsYWdzLCB1MzIgd2lkdGgsIHUzMiBo ZWlnaHQpOwo+PiArCj4+ICsjZW5kaWYgLyogX19MSU5VWF9USU5ZRFJNX0ggKi8KPj4gLS0gCj4+ IDIuMi4yCj4+Cj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCj4+IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwo+PiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2RyaS1kZXZlbAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs Cg==