From mboxrd@z Thu Jan 1 00:00:00 1970 From: Inki Dae Subject: Re: [PATCH v4 4/9] drm/exynos: gsc: Convert driver to IPP v2 core API Date: Wed, 01 Nov 2017 15:02:15 +0900 Message-ID: <59F96367.2090409@samsung.com> References: <20171023075428.7003-1-m.szyprowski@samsung.com> <20171023075428.7003-5-m.szyprowski@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-reply-to: <20171023075428.7003-5-m.szyprowski@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Marek Szyprowski , dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org Cc: Tobias Jakobi , Bartlomiej Zolnierkiewicz , Seung-Woo Kim , Krzysztof Kozlowski , Sylwester Nawrocki , Andrzej Pietrasiewicz , Hoegeun Kwon List-Id: linux-samsung-soc@vger.kernel.org CgoyMDE364WEIDEw7JuUIDIz7J28IDE2OjU07JeQIE1hcmVrIFN6eXByb3dza2kg7J20KOqwgCkg 7JO0IOq4gDoKPiBUaGlzIHBhdGNoIGFkYXB0cyBFeHlub3MgRFJNIEdTY2FsZXIgZHJpdmVyIHRv IG5ldyBJUFAgdjIgY29yZSBBUEkuCj4gVGhlIHNpZGUgZWZmZWN0IG9mIHRoaXMgY29udmVyc2lv biBpcyBhIHN3aXRjaCB0byBkcml2ZXIgY29tcG9uZW50IEFQSQo+IHRvIHJlZ2lzdGVyIHByb3Bl cmx5IGluIHRoZSBFeHlub3MgRFJNIGNvcmUuIER1cmluZyB0aGUgY29udmVyc2lvbgo+IGRyaXZl ciBoYXMgYmVlbiBhZGFwdGVkIHRvIHN1cHBvcnQgbW9yZSBzcGVjaWZpYyBjb21wYXRpYmxlIHN0 cmluZ3MKPiB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIEV4eW5vczUyNTAgYW5kIEV4eW5vczU0MjAg KGRpZmZlcmVudCBoYXJkd2FyZQo+IGxpbWl0cykuIFN1cHBvcnQgZm9yIEV4eW5vczU0MzMgdmFy aWFudCBoYXMgYmVlbiBhZGRlZCB0b28KPiAoZGlmZmVyZW50IGxpbWl0cyB0YWJsZSwgcmVtb3Zl ZCBkZXBlbmRlbmN5IG9uIEFSQ0hfRVhZTk9TNSkuCj4gCj4gU2lnbmVkLW9mZi1ieTogTWFyZWsg U3p5cHJvd3NraSA8bS5zenlwcm93c2tpQHNhbXN1bmcuY29tPgo+IFRlc3RlZC1ieTogSG9lZ2V1 biBLd29uIDxob2VnZXVuLmt3b25Ac2Ftc3VuZy5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2Ry bS9leHlub3MvS2NvbmZpZyAgICAgICAgICB8ICAgIDMgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2V4 eW5vcy9leHlub3NfZHJtX2Rydi5jIHwgICAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9leHlub3Mv ZXh5bm9zX2RybV9nc2MuYyB8IDEwMDEgKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ ICBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZ3NjLmggfCAgIDI0IC0KPiAgNCBm aWxlcyBjaGFuZ2VkLCAzMjEgaW5zZXJ0aW9ucygrKSwgNzA4IGRlbGV0aW9ucygtKQo+ICBkZWxl dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dzYy5oCj4g Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZyBiL2RyaXZlcnMv Z3B1L2RybS9leHlub3MvS2NvbmZpZwo+IGluZGV4IGMxMGM5Y2EwZDhiNC4uOWI2NmE5ODM4ZGNh IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZwo+IEBAIC0xMTEsNyArMTExLDggQEAgY29uZmln IERSTV9FWFlOT1NfUk9UQVRPUgo+ICAKPiAgY29uZmlnIERSTV9FWFlOT1NfR1NDCj4gIAlib29s ICJHU2NhbGVyIgo+IC0JZGVwZW5kcyBvbiBCUk9LRU4gJiYgQVJDSF9FWFlOT1M1ICYmIFZJREVP X1NBTVNVTkdfRVhZTk9TX0dTQz1uCj4gKwlkZXBlbmRzIG9uIFZJREVPX1NBTVNVTkdfRVhZTk9T X0dTQz1uCj4gKwlzZWxlY3QgRFJNX0VYWU5PU19JUFAKPiAgCWhlbHAKPiAgCSAgQ2hvb3NlIHRo aXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHVzZSBFeHlub3MgR1NDIGZvciBEUk0uCj4gIAo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMgYi9kcml2 ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMKPiBpbmRleCAzYWRlMmIwYWQxNWQu LmNhYzBkODQzODVkMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5v c19kcm1fZHJ2LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2 LmMKPiBAQCAtMjYwLDYgKzI2MCw3IEBAIHN0YXRpYyBzdHJ1Y3QgZXh5bm9zX2RybV9kcml2ZXJf aW5mbyBleHlub3NfZHJtX2RyaXZlcnNbXSA9IHsKPiAgCQlEUk1fQ09NUE9ORU5UX0RSSVZFUgo+ ICAJfSwgewo+ICAJCURSVl9QVFIoZ3NjX2RyaXZlciwgQ09ORklHX0RSTV9FWFlOT1NfR1NDKSwK PiArCQlEUk1fQ09NUE9ORU5UX0RSSVZFUgo+ICAJfSwgewo+ICAJCSZleHlub3NfZHJtX3BsYXRm b3JtX2RyaXZlciwKPiAgCQlEUk1fVklSVFVBTF9ERVZJQ0UKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dzYy5jIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5v cy9leHlub3NfZHJtX2dzYy5jCj4gaW5kZXggMDUwNmIyYjE3YWMxLi40NjcxYWM0MTQ2OWQgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dzYy5jCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2dzYy5jCj4gQEAgLTEyLDE4ICsx MiwyMCBAQAo+ICAgKgo+ICAgKi8KPiAgI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5j bHVkZSA8bGludXgvY29tcG9uZW50Lmg+Cj4gICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZp Y2UuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgo+ICAjaW5jbHVkZSA8bGludXgvcG1fcnVu dGltZS5oPgo+ICAjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvb2ZfZGV2aWNlLmg+Cj4gICNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KPiAgCj4gICNpbmNs dWRlIDxkcm0vZHJtUC5oPgo+ICAjaW5jbHVkZSA8ZHJtL2V4eW5vc19kcm0uaD4KPiAgI2luY2x1 ZGUgInJlZ3MtZ3NjLmgiCj4gICNpbmNsdWRlICJleHlub3NfZHJtX2Rydi5oIgo+ICsjaW5jbHVk ZSAiZXh5bm9zX2RybV9pb21tdS5oIgo+ICAjaW5jbHVkZSAiZXh5bm9zX2RybV9pcHAuaCIKPiAt I2luY2x1ZGUgImV4eW5vc19kcm1fZ3NjLmgiCj4gIAo+ICAvKgo+ICAgKiBHU0Mgc3RhbmRzIGZv ciBHZW5lcmFsIFNDYWxlciBhbmQKPiBAQCAtMzEsMjYgKzMzLDEwIEBACj4gICAqIGlucHV0IERN QSByZWFkcyBpbWFnZSBkYXRhIGZyb20gdGhlIG1lbW9yeS4KPiAgICogb3V0cHV0IERNQSB3cml0 ZXMgaW1hZ2UgZGF0YSB0byBtZW1vcnkuCj4gICAqIEdTQyBzdXBwb3J0cyBpbWFnZSByb3RhdGlv biBhbmQgaW1hZ2UgZWZmZWN0IGZ1bmN0aW9ucy4KPiAtICoKPiAtICogTTJNIG9wZXJhdGlvbiA6 IHN1cHBvcnRzIGNyb3Avc2NhbGUvcm90YXRpb24vY3NjIHNvIG9uLgo+IC0gKiBNZW1vcnkgLS0t LT4gR1NDIEgvVyAtLS0tPiBNZW1vcnkuCj4gLSAqIFdyaXRlYmFjayBvcGVyYXRpb24gOiBzdXBw b3J0cyBjbG9uZWQgc2NyZWVuIHdpdGggRklNRC4KPiAtICogRklNRCAtLS0tPiBHU0MgSC9XIC0t LS0+IE1lbW9yeS4KPiAtICogT3V0cHV0IG9wZXJhdGlvbiA6IHN1cHBvcnRzIGRpcmVjdCBkaXNw bGF5IHVzaW5nIGxvY2FsIHBhdGguCj4gLSAqIE1lbW9yeSAtLS0tPiBHU0MgSC9XIC0tLS0+IEZJ TUQsIE1peGVyLgo+ICAgKi8KPiAgCj4gLS8qCj4gLSAqIFRPRE8KPiAtICogMS4gY2hlY2sgc3Vz cGVuZC9yZXN1bWUgYXBpIGlmIG5lZWRlZC4KPiAtICogMi4gbmVlZCB0byBjaGVjayB1c2UgY2Fz ZSBwbGF0Zm9ybV9kZXZpY2VfaWQuCj4gLSAqIDMuIGNoZWNrIHNyYy9kc3Qgc2l6ZSB3aXRoLCBo ZWlnaHQuCj4gLSAqIDQuIGFkZGVkIGNoZWNrX3ByZXBhcmUgYXBpIGZvciByaWdodCByZWdpc3Rl ci4KPiAtICogNS4gbmVlZCB0byBhZGQgc3VwcG9ydGVkIGxpc3QgaW4gcHJvcF9saXN0Lgo+IC0g KiA2LiBjaGVjayBwcmVzY2FsZXIvc2NhbGVyIG9wdGltaXphdGlvbi4KPiAtICovCj4gIAo+IC0j ZGVmaW5lIEdTQ19NQVhfREVWUwk0Cj4gKyNkZWZpbmUgR1NDX01BWF9DTE9DS1MJOAo+ICAjZGVm aW5lIEdTQ19NQVhfU1JDCQk0Cj4gICNkZWZpbmUgR1NDX01BWF9EU1QJCTE2Cj4gICNkZWZpbmUg R1NDX1JFU0VUX1RJTUVPVVQJNTAKPiBAQCAtNjUsOCArNTEsNiBAQAo+ICAjZGVmaW5lIEdTQ19T Q19ET1dOX1JBVElPXzRfOAkJMTMxMDcyCj4gICNkZWZpbmUgR1NDX1NDX0RPV05fUkFUSU9fM184 CQkxNzQ3NjIKPiAgI2RlZmluZSBHU0NfU0NfRE9XTl9SQVRJT18yXzgJCTI2MjE0NAo+IC0jZGVm aW5lIEdTQ19SRUZSRVNIX01JTgkxMgo+IC0jZGVmaW5lIEdTQ19SRUZSRVNIX01BWAk2MAo+ICAj ZGVmaW5lIEdTQ19DUk9QX01BWAk4MTkyCj4gICNkZWZpbmUgR1NDX0NST1BfTUlOCTMyCj4gICNk ZWZpbmUgR1NDX1NDQUxFX01BWAk0MjI0Cj4gQEAgLTc3LDEwICs2MSw5IEBACj4gICNkZWZpbmUg R1NDX0NPRUZfSF84VAk4Cj4gICNkZWZpbmUgR1NDX0NPRUZfVl80VAk0Cj4gICNkZWZpbmUgR1ND X0NPRUZfREVQVEgJMwo+ICsjZGVmaW5lIEdTQ19BVVRPU1VTUEVORF9ERUxBWQkJMjAwMAo+ICAK PiAgI2RlZmluZSBnZXRfZ3NjX2NvbnRleHQoZGV2KQlwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19w bGF0Zm9ybV9kZXZpY2UoZGV2KSkKPiAtI2RlZmluZSBnZXRfY3R4X2Zyb21faXBwZHJ2KGlwcGRy dikJY29udGFpbmVyX29mKGlwcGRydixcCj4gLQkJCQkJc3RydWN0IGdzY19jb250ZXh0LCBpcHBk cnYpOwo+ICAjZGVmaW5lIGdzY19yZWFkKG9mZnNldCkJCXJlYWRsKGN0eC0+cmVncyArIChvZmZz ZXQpKQo+ICAjZGVmaW5lIGdzY193cml0ZShjZmcsIG9mZnNldCkJd3JpdGVsKGNmZywgY3R4LT5y ZWdzICsgKG9mZnNldCkpCj4gIAo+IEBAIC0xMjQsNyArMTA3LDYgQEAgc3RydWN0IGdzY19jYXBh YmlsaXR5IHsKPiAgLyoKPiAgICogQSBzdHJ1Y3R1cmUgb2YgZ3NjIGNvbnRleHQuCj4gICAqCj4g LSAqIEBpcHBkcnY6IHByZXBhcmUgaW5pdGlhbGl6YXRpb24gdXNpbmcgaXBwZHJ2Lgo+ICAgKiBA cmVnc19yZXM6IHJlZ2lzdGVyIHJlc291cmNlcy4KPiAgICogQHJlZ3M6IG1lbW9yeSBtYXBwZWQg aW8gcmVnaXN0ZXJzLgo+ICAgKiBAc3lzcmVnOiBoYW5kbGUgdG8gU1lTUkVHIGJsb2NrIHJlZ21h cC4KPiBAQCAtMTM3LDEyICsxMTksMTggQEAgc3RydWN0IGdzY19jYXBhYmlsaXR5IHsKPiAgICog QHN1c3BlbmRlZDogcW9zIG9wZXJhdGlvbnMuCj4gICAqLwo+ICBzdHJ1Y3QgZ3NjX2NvbnRleHQg ewo+IC0Jc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2CWlwcGRydjsKPiArCXN0cnVjdCBleHlub3Nf ZHJtX2lwcCBpcHA7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldjsKPiArCXN0cnVjdCBk ZXZpY2UJKmRldjsKPiArCXN0cnVjdCBleHlub3NfZHJtX2lwcF90YXNrCSp0YXNrOwo+ICsJc3Ry dWN0IGV4eW5vc19kcm1faXBwX2Zvcm1hdHMJKmZvcm1hdHM7Cj4gKwo+ICAJc3RydWN0IHJlc291 cmNlCSpyZWdzX3JlczsKPiAgCXZvaWQgX19pb21lbQkqcmVnczsKPiAgCXN0cnVjdCByZWdtYXAJ KnN5c3JlZzsKPiAtCXN0cnVjdCBtdXRleAlsb2NrOwo+IC0Jc3RydWN0IGNsawkqZ3NjX2NsazsK PiArCWNvbnN0IGNoYXIJKipjbGtfbmFtZXM7Cj4gKwlzdHJ1Y3QgY2xrCSpjbG9ja3NbR1NDX01B WF9DTE9DS1NdOwo+ICsJaW50CQludW1fY2xvY2tzOwo+ICAJc3RydWN0IGdzY19zY2FsZXIJc2M7 Cj4gIAlpbnQJaWQ7Cj4gIAlpbnQJaXJxOwo+IEBAIC0xNTAsNiArMTM4LDE5IEBAIHN0cnVjdCBn c2NfY29udGV4dCB7Cj4gIAlib29sCXN1c3BlbmRlZDsKPiAgfTsKPiAgCj4gKy8qKgo+ICsgKiBz dHJ1Y3QgZ3NjX2RyaXZlcmRhdGEgLSBwZXIgZGV2aWNlIHR5cGUgZHJpdmVyIGRhdGEgZm9yIGlu aXQgdGltZS4KPiArICoKPiArICogQGxpbWl0czogcGljdHVyZSBzaXplIGxpbWl0cyBhcnJheQo+ ICsgKiBAY2xrX25hbWVzOiBuYW1lcyBvZiBjbG9ja3MgbmVlZGVkIGJ5IHRoaXMgdmFyaWFudAo+ ICsgKiBAbnVtX2Nsb2NrczogdGhlIG51bWJlciBvZiBjbG9ja3MgbmVlZGVkIGJ5IHRoaXMgdmFy aWFudAo+ICsgKi8KPiArc3RydWN0IGdzY19kcml2ZXJkYXRhIHsKPiArCWNvbnN0IHN0cnVjdCBk cm1fZXh5bm9zX2lwcF9saW1pdCAqbGltaXRzOwo+ICsJY29uc3QgY2hhcgkqY2xrX25hbWVzW0dT Q19NQVhfQ0xPQ0tTXTsKPiArCWludAkJbnVtX2Nsb2NrczsKPiArfTsKPiArCj4gIC8qIDgtdGFw IEZpbHRlciBDb2VmZmljaWVudCAqLwo+ICBzdGF0aWMgY29uc3QgaW50IGhfY29lZl84dFtHU0Nf Q09FRl9SQVRJT11bR1NDX0NPRUZfQVRUUl1bR1NDX0NPRUZfSF84VF0gPSB7Cj4gIAl7CS8qIFJh dGlvIDw9IDY1NTM2ICh+ODo4KSAqLwo+IEBAIC00MzgsMjUgKzQzOSw2IEBAIHN0YXRpYyBpbnQg Z3NjX3N3X3Jlc2V0KHN0cnVjdCBnc2NfY29udGV4dCAqY3R4KQo+ICAJcmV0dXJuIDA7Cj4gIH0K PiAgCj4gLXN0YXRpYyB2b2lkIGdzY19zZXRfZ3NjYmxrX2ZpbWRfd2Ioc3RydWN0IGdzY19jb250 ZXh0ICpjdHgsIGJvb2wgZW5hYmxlKQo+IC17Cj4gLQl1bnNpZ25lZCBpbnQgZ3NjYmxrX2NmZzsK PiAtCj4gLQlpZiAoIWN0eC0+c3lzcmVnKQo+IC0JCXJldHVybjsKPiAtCj4gLQlyZWdtYXBfcmVh ZChjdHgtPnN5c3JlZywgU1lTUkVHX0dTQ0JMS19DRkcxLCAmZ3NjYmxrX2NmZyk7Cj4gLQo+IC0J aWYgKGVuYWJsZSkKPiAtCQlnc2NibGtfY2ZnIHw9IEdTQ19CTEtfRElTUDFXQl9ERVNUKGN0eC0+ aWQpIHwKPiAtCQkJCUdTQ19CTEtfR1NDTF9XQl9JTl9TUkNfU0VMKGN0eC0+aWQpIHwKPiAtCQkJ CUdTQ19CTEtfU1dfUkVTRVRfV0JfREVTVChjdHgtPmlkKTsKPiAtCWVsc2UKPiAtCQlnc2NibGtf Y2ZnIHw9IEdTQ19CTEtfUFhMQVNZTkNfTE9fTUFTS19XQihjdHgtPmlkKTsKPiAtCj4gLQlyZWdt YXBfd3JpdGUoY3R4LT5zeXNyZWcsIFNZU1JFR19HU0NCTEtfQ0ZHMSwgZ3NjYmxrX2NmZyk7Cj4g LX0KPiAtCj4gIHN0YXRpYyB2b2lkIGdzY19oYW5kbGVfaXJxKHN0cnVjdCBnc2NfY29udGV4dCAq Y3R4LCBib29sIGVuYWJsZSwKPiAgCQlib29sIG92ZXJmbG93LCBib29sIGRvbmUpCj4gIHsKPiBA QCAtNDg3LDEwICs0NjksOCBAQCBzdGF0aWMgdm9pZCBnc2NfaGFuZGxlX2lycShzdHJ1Y3QgZ3Nj X2NvbnRleHQgKmN0eCwgYm9vbCBlbmFibGUsCj4gIH0KPiAgCj4gIAo+IC1zdGF0aWMgaW50IGdz Y19zcmNfc2V0X2ZtdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBmbXQpCj4gK3N0YXRpYyBpbnQg Z3NjX3NyY19zZXRfZm10KHN0cnVjdCBnc2NfY29udGV4dCAqY3R4LCB1MzIgZm10KQo+ICB7Cj4g LQlzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0eCA9IGdldF9nc2NfY29udGV4dChkZXYpOwo+IC0Jc3Ry dWN0IGV4eW5vc19kcm1faXBwZHJ2ICppcHBkcnYgPSAmY3R4LT5pcHBkcnY7Cj4gIAl1MzIgY2Zn Owo+ICAKPiAgCURSTV9ERUJVR19LTVMoImZtdFsweCV4XVxuIiwgZm10KTsKPiBAQCAtNTQ5LDcg KzUyOSw3IEBAIHN0YXRpYyBpbnQgZ3NjX3NyY19zZXRfZm10KHN0cnVjdCBkZXZpY2UgKmRldiwg dTMyIGZtdCkKPiAgCQkJR1NDX0lOX1lVVjQyMF8yUCk7Cj4gIAkJYnJlYWs7Cj4gIAlkZWZhdWx0 Ogo+IC0JCWRldl9lcnIoaXBwZHJ2LT5kZXYsICJpbnZhbGlkIHRhcmdldCB5dXYgb3JkZXIgMHgl eC5cbiIsIGZtdCk7Cj4gKwkJZGV2X2VycihjdHgtPmRldiwgImludmFsaWQgdGFyZ2V0IHl1diBv cmRlciAweCV4LlxuIiwgZm10KTsKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCX0KPiAgCj4gQEAg LTU1OCwxMDUgKzUzOCw4MSBAQCBzdGF0aWMgaW50IGdzY19zcmNfc2V0X2ZtdChzdHJ1Y3QgZGV2 aWNlICpkZXYsIHUzMiBmbXQpCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBn c2Nfc3JjX3NldF90cmFuc2Yoc3RydWN0IGRldmljZSAqZGV2LAo+IC0JCWVudW0gZHJtX2V4eW5v c19kZWdyZWUgZGVncmVlLAo+IC0JCWVudW0gZHJtX2V4eW5vc19mbGlwIGZsaXAsIGJvb2wgKnN3 YXApCj4gK3N0YXRpYyBpbnQgZ3NjX3NyY19zZXRfdHJhbnNmKHN0cnVjdCBnc2NfY29udGV4dCAq Y3R4LCB1bnNpZ25lZCBpbnQgcm90YXRpb24pCgpUaGlzIGZ1bmN0aW9uIG5ldmVyIHJldHVybiBh IGVycm9yLgoKPiAgewo+IC0Jc3RydWN0IGdzY19jb250ZXh0ICpjdHggPSBnZXRfZ3NjX2NvbnRl eHQoZGV2KTsKPiAtCXN0cnVjdCBleHlub3NfZHJtX2lwcGRydiAqaXBwZHJ2ID0gJmN0eC0+aXBw ZHJ2Owo+ICsJdW5zaWduZWQgaW50IGRlZ3JlZSA9IHJvdGF0aW9uICYgRFJNX01PREVfUk9UQVRF X01BU0s7Cj4gIAl1MzIgY2ZnOwo+ICAKPiAtCURSTV9ERUJVR19LTVMoImRlZ3JlZVslZF1mbGlw WzB4JXhdXG4iLCBkZWdyZWUsIGZsaXApOwo+IC0KPiAgCWNmZyA9IGdzY19yZWFkKEdTQ19JTl9D T04pOwo+ICAJY2ZnICY9IH5HU0NfSU5fUk9UX01BU0s7Cj4gIAo+ICAJc3dpdGNoIChkZWdyZWUp IHsKPiAtCWNhc2UgRVhZTk9TX0RSTV9ERUdSRUVfMDoKPiAtCQlpZiAoZmxpcCAmIEVYWU5PU19E Uk1fRkxJUF9WRVJUSUNBTCkKPiArCWNhc2UgRFJNX01PREVfUk9UQVRFXzA6Cj4gKwkJaWYgKHJv dGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9ZKQo+ICAJCQljZmcgfD0gR1NDX0lOX1JPVF9YRkxJ UDsKPiAtCQlpZiAoZmxpcCAmIEVYWU5PU19EUk1fRkxJUF9IT1JJWk9OVEFMKQo+ICsJCWlmIChy b3RhdGlvbiAmIERSTV9NT0RFX1JFRkxFQ1RfWCkKPiAgCQkJY2ZnIHw9IEdTQ19JTl9ST1RfWUZM SVA7Cj4gIAkJYnJlYWs7Cj4gLQljYXNlIEVYWU5PU19EUk1fREVHUkVFXzkwOgo+IC0JCWlmIChm bGlwICYgRVhZTk9TX0RSTV9GTElQX1ZFUlRJQ0FMKQo+ICsJY2FzZSBEUk1fTU9ERV9ST1RBVEVf OTA6Cj4gKwkJaWYgKHJvdGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9ZKQo+ICAJCQljZmcgfD0g R1NDX0lOX1JPVF85MF9YRkxJUDsKPiAtCQllbHNlIGlmIChmbGlwICYgRVhZTk9TX0RSTV9GTElQ X0hPUklaT05UQUwpCj4gKwkJZWxzZSBpZiAocm90YXRpb24gJiBEUk1fTU9ERV9SRUZMRUNUX1gp Cj4gIAkJCWNmZyB8PSBHU0NfSU5fUk9UXzkwX1lGTElQOwo+ICAJCWVsc2UKPiAgCQkJY2ZnIHw9 IEdTQ19JTl9ST1RfOTA7Cj4gIAkJYnJlYWs7Cj4gLQljYXNlIEVYWU5PU19EUk1fREVHUkVFXzE4 MDoKPiArCWNhc2UgRFJNX01PREVfUk9UQVRFXzE4MDoKPiAgCQljZmcgfD0gR1NDX0lOX1JPVF8x ODA7Cj4gLQkJaWYgKGZsaXAgJiBFWFlOT1NfRFJNX0ZMSVBfVkVSVElDQUwpCj4gKwkJaWYgKHJv dGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9ZKQo+ICAJCQljZmcgJj0gfkdTQ19JTl9ST1RfWEZM SVA7Cj4gLQkJaWYgKGZsaXAgJiBFWFlOT1NfRFJNX0ZMSVBfSE9SSVpPTlRBTCkKPiArCQlpZiAo cm90YXRpb24gJiBEUk1fTU9ERV9SRUZMRUNUX1gpCj4gIAkJCWNmZyAmPSB+R1NDX0lOX1JPVF9Z RkxJUDsKPiAgCQlicmVhazsKPiAtCWNhc2UgRVhZTk9TX0RSTV9ERUdSRUVfMjcwOgo+ICsJY2Fz ZSBEUk1fTU9ERV9ST1RBVEVfMjcwOgo+ICAJCWNmZyB8PSBHU0NfSU5fUk9UXzI3MDsKPiAtCQlp ZiAoZmxpcCAmIEVYWU5PU19EUk1fRkxJUF9WRVJUSUNBTCkKPiArCQlpZiAocm90YXRpb24gJiBE Uk1fTU9ERV9SRUZMRUNUX1kpCj4gIAkJCWNmZyAmPSB+R1NDX0lOX1JPVF9YRkxJUDsKPiAtCQlp ZiAoZmxpcCAmIEVYWU5PU19EUk1fRkxJUF9IT1JJWk9OVEFMKQo+ICsJCWlmIChyb3RhdGlvbiAm IERSTV9NT0RFX1JFRkxFQ1RfWCkKPiAgCQkJY2ZnICY9IH5HU0NfSU5fUk9UX1lGTElQOwo+ICAJ CWJyZWFrOwo+IC0JZGVmYXVsdDoKPiAtCQlkZXZfZXJyKGlwcGRydi0+ZGV2LCAiaW52YWxpZCBk ZWdyZWUgdmFsdWUgJWQuXG4iLCBkZWdyZWUpOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+ICAJfQo+ ICAKPiAgCWdzY193cml0ZShjZmcsIEdTQ19JTl9DT04pOwo+ICAKPiAgCWN0eC0+cm90YXRpb24g PSAoY2ZnICYgR1NDX0lOX1JPVF85MCkgPyAxIDogMDsKPiAtCSpzd2FwID0gY3R4LT5yb3RhdGlv bjsKPiAtCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBnc2Nfc3JjX3NldF9z aXplKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHN3YXAsCj4gLQkJc3RydWN0IGRybV9leHlub3Nf cG9zICpwb3MsIHN0cnVjdCBkcm1fZXh5bm9zX3N6ICpzeikKPiArc3RhdGljIGludCBnc2Nfc3Jj X3NldF9zaXplKHN0cnVjdCBnc2NfY29udGV4dCAqY3R4LAo+ICsJCXN0cnVjdCBleHlub3NfZHJt X2lwcF9idWZmZXIgKmJ1ZikKCmRpdHRvLgoKPiAgewo+IC0Jc3RydWN0IGdzY19jb250ZXh0ICpj dHggPSBnZXRfZ3NjX2NvbnRleHQoZGV2KTsKPiAtCXN0cnVjdCBkcm1fZXh5bm9zX3BvcyBpbWdf cG9zID0gKnBvczsKPiAgCXN0cnVjdCBnc2Nfc2NhbGVyICpzYyA9ICZjdHgtPnNjOwo+ICAJdTMy IGNmZzsKPiAgCj4gLQlEUk1fREVCVUdfS01TKCJzd2FwWyVkXXhbJWRdeVslZF13WyVkXWhbJWRd XG4iLAo+IC0JCXN3YXAsIHBvcy0+eCwgcG9zLT55LCBwb3MtPncsIHBvcy0+aCk7Cj4gLQo+IC0J aWYgKHN3YXApIHsKPiAtCQlpbWdfcG9zLncgPSBwb3MtPmg7Cj4gLQkJaW1nX3Bvcy5oID0gcG9z LT53Owo+IC0JfQo+IC0KPiAgCS8qIHBpeGVsIG9mZnNldCAqLwo+IC0JY2ZnID0gKEdTQ19TUkNJ TUdfT0ZGU0VUX1goaW1nX3Bvcy54KSB8Cj4gLQkJR1NDX1NSQ0lNR19PRkZTRVRfWShpbWdfcG9z LnkpKTsKPiArCWNmZyA9IChHU0NfU1JDSU1HX09GRlNFVF9YKGJ1Zi0+cmVjdC54KSB8Cj4gKwkJ R1NDX1NSQ0lNR19PRkZTRVRfWShidWYtPnJlY3QueSkpOwo+ICAJZ3NjX3dyaXRlKGNmZywgR1ND X1NSQ0lNR19PRkZTRVQpOwo+ICAKPiAgCS8qIGNyb3BwZWQgc2l6ZSAqLwo+IC0JY2ZnID0gKEdT Q19DUk9QUEVEX1dJRFRIKGltZ19wb3MudykgfAo+IC0JCUdTQ19DUk9QUEVEX0hFSUdIVChpbWdf cG9zLmgpKTsKPiArCWNmZyA9IChHU0NfQ1JPUFBFRF9XSURUSChidWYtPnJlY3QudykgfAo+ICsJ CUdTQ19DUk9QUEVEX0hFSUdIVChidWYtPnJlY3QuaCkpOwo+ICAJZ3NjX3dyaXRlKGNmZywgR1ND X0NST1BQRURfU0laRSk7Cj4gIAo+IC0JRFJNX0RFQlVHX0tNUygiaHNpemVbJWRddnNpemVbJWRd XG4iLCBzei0+aHNpemUsIHN6LT52c2l6ZSk7Cj4gLQo+ICAJLyogb3JpZ2luYWwgc2l6ZSAqLwo+ ICAJY2ZnID0gZ3NjX3JlYWQoR1NDX1NSQ0lNR19TSVpFKTsKPiAgCWNmZyAmPSB+KEdTQ19TUkNJ TUdfSEVJR0hUX01BU0sgfAo+ICAJCUdTQ19TUkNJTUdfV0lEVEhfTUFTSyk7Cj4gIAo+IC0JY2Zn IHw9IChHU0NfU1JDSU1HX1dJRFRIKHN6LT5oc2l6ZSkgfAo+IC0JCUdTQ19TUkNJTUdfSEVJR0hU KHN6LT52c2l6ZSkpOwo+ICsJY2ZnIHw9IChHU0NfU1JDSU1HX1dJRFRIKGJ1Zi0+YnVmLndpZHRo KSB8Cj4gKwkJR1NDX1NSQ0lNR19IRUlHSFQoYnVmLT5idWYuaGVpZ2h0KSk7Cj4gIAo+ICAJZ3Nj X3dyaXRlKGNmZywgR1NDX1NSQ0lNR19TSVpFKTsKPiAgCj4gIAljZmcgPSBnc2NfcmVhZChHU0Nf SU5fQ09OKTsKPiAgCWNmZyAmPSB+R1NDX0lOX1JHQl9UWVBFX01BU0s7Cj4gIAo+IC0JRFJNX0RF QlVHX0tNUygid2lkdGhbJWRdcmFuZ2VbJWRdXG4iLCBwb3MtPncsIHNjLT5yYW5nZSk7Cj4gLQo+ IC0JaWYgKHBvcy0+dyA+PSBHU0NfV0lEVEhfSVRVXzcwOSkKPiArCWlmIChidWYtPnJlY3QudyA+ PSBHU0NfV0lEVEhfSVRVXzcwOSkKPiAgCQlpZiAoc2MtPnJhbmdlKQo+ICAJCQljZmcgfD0gR1ND X0lOX1JHQl9IRF9XSURFOwo+ICAJCWVsc2UKPiBAQCAtNjczLDMwICs2MjksMTUgQEAgc3RhdGlj IGludCBnc2Nfc3JjX3NldF9zaXplKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHN3YXAsCj4gIH0K PiAgCj4gIHN0YXRpYyBpbnQgZ3NjX3NyY19zZXRfYnVmX3NlcShzdHJ1Y3QgZ3NjX2NvbnRleHQg KmN0eCwgdTMyIGJ1Zl9pZCwKPiAtCQllbnVtIGRybV9leHlub3NfaXBwX2J1Zl90eXBlIGJ1Zl90 eXBlKQo+ICsJCQkgICAgICAgYm9vbCBlbnF1ZXVlKQoKZGl0dG8uCgo+ICB7Cj4gLQlzdHJ1Y3Qg ZXh5bm9zX2RybV9pcHBkcnYgKmlwcGRydiA9ICZjdHgtPmlwcGRydjsKPiAtCWJvb2wgbWFza2Vk Owo+ICsJYm9vbCBtYXNrZWQgPSAhZW5xdWV1ZTsKPiAgCXUzMiBjZmc7Cj4gIAl1MzIgbWFzayA9 IDB4MDAwMDAwMDEgPDwgYnVmX2lkOwo+ICAKPiAtCURSTV9ERUJVR19LTVMoImJ1Zl9pZFslZF1i dWZfdHlwZVslZF1cbiIsIGJ1Zl9pZCwgYnVmX3R5cGUpOwo+IC0KPiAgCS8qIG1hc2sgcmVnaXN0 ZXIgc2V0ICovCj4gIAljZmcgPSBnc2NfcmVhZChHU0NfSU5fQkFTRV9BRERSX1lfTUFTSyk7Cj4g IAo+IC0Jc3dpdGNoIChidWZfdHlwZSkgewo+IC0JY2FzZSBJUFBfQlVGX0VOUVVFVUU6Cj4gLQkJ bWFza2VkID0gZmFsc2U7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIElQUF9CVUZfREVRVUVVRToKPiAt CQltYXNrZWQgPSB0cnVlOwo+IC0JCWJyZWFrOwo+IC0JZGVmYXVsdDoKPiAtCQlkZXZfZXJyKGlw cGRydi0+ZGV2LCAiaW52YWxpZCBidWYgY3RybCBwYXJhbWV0ZXIuXG4iKTsKPiAtCQlyZXR1cm4g LUVJTlZBTDsKPiAtCX0KPiAtCj4gIAkvKiBzZXF1ZW5jZSBpZCAqLwo+ICAJY2ZnICY9IH5tYXNr Owo+ICAJY2ZnIHw9IG1hc2tlZCA8PCBidWZfaWQ7Cj4gQEAgLTcwNyw2NCArNjQ4LDE5IEBAIHN0 YXRpYyBpbnQgZ3NjX3NyY19zZXRfYnVmX3NlcShzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0eCwgdTMy IGJ1Zl9pZCwKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50IGdzY19zcmNfc2V0 X2FkZHIoc3RydWN0IGRldmljZSAqZGV2LAo+IC0JCXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9idWZf aW5mbyAqYnVmX2luZm8sIHUzMiBidWZfaWQsCj4gLQkJZW51bSBkcm1fZXh5bm9zX2lwcF9idWZf dHlwZSBidWZfdHlwZSkKPiArc3RhdGljIGludCBnc2Nfc3JjX3NldF9hZGRyKHN0cnVjdCBnc2Nf Y29udGV4dCAqY3R4LCB1MzIgYnVmX2lkLAo+ICsJCQkgICAgc3RydWN0IGV4eW5vc19kcm1faXBw X2J1ZmZlciAqYnVmKQo+ICB7Cj4gLQlzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0eCA9IGdldF9nc2Nf Y29udGV4dChkZXYpOwo+IC0Jc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2ICppcHBkcnYgPSAmY3R4 LT5pcHBkcnY7Cj4gLQlzdHJ1Y3QgZHJtX2V4eW5vc19pcHBfY21kX25vZGUgKmNfbm9kZSA9IGlw cGRydi0+Y19ub2RlOwo+IC0Jc3RydWN0IGRybV9leHlub3NfaXBwX3Byb3BlcnR5ICpwcm9wZXJ0 eTsKPiAtCj4gLQlpZiAoIWNfbm9kZSkgewo+IC0JCURSTV9FUlJPUigiZmFpbGVkIHRvIGdldCBj X25vZGUuXG4iKTsKPiAtCQlyZXR1cm4gLUVGQVVMVDsKPiAtCX0KPiAtCj4gLQlwcm9wZXJ0eSA9 ICZjX25vZGUtPnByb3BlcnR5Owo+IC0KPiAtCURSTV9ERUJVR19LTVMoInByb3BfaWRbJWRdYnVm X2lkWyVkXWJ1Zl90eXBlWyVkXVxuIiwKPiAtCQlwcm9wZXJ0eS0+cHJvcF9pZCwgYnVmX2lkLCBi dWZfdHlwZSk7Cj4gLQo+IC0JaWYgKGJ1Zl9pZCA+IEdTQ19NQVhfU1JDKSB7Cj4gLQkJZGV2X2lu Zm8oaXBwZHJ2LT5kZXYsICJpbnZhbGlkIGJ1Zl9pZCAlZC5cbiIsIGJ1Zl9pZCk7Cj4gLQkJcmV0 dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+ICAJLyogYWRkcmVzcyByZWdpc3RlciBzZXQgKi8KPiAt CXN3aXRjaCAoYnVmX3R5cGUpIHsKPiAtCWNhc2UgSVBQX0JVRl9FTlFVRVVFOgo+IC0JCWdzY193 cml0ZShidWZfaW5mby0+YmFzZVtFWFlOT1NfRFJNX1BMQU5BUl9ZXSwKPiAtCQkJR1NDX0lOX0JB U0VfQUREUl9ZKGJ1Zl9pZCkpOwo+IC0JCWdzY193cml0ZShidWZfaW5mby0+YmFzZVtFWFlOT1Nf RFJNX1BMQU5BUl9DQl0sCj4gLQkJCUdTQ19JTl9CQVNFX0FERFJfQ0IoYnVmX2lkKSk7Cj4gLQkJ Z3NjX3dyaXRlKGJ1Zl9pbmZvLT5iYXNlW0VYWU5PU19EUk1fUExBTkFSX0NSXSwKPiAtCQkJR1ND X0lOX0JBU0VfQUREUl9DUihidWZfaWQpKTsKPiAtCQlicmVhazsKPiAtCWNhc2UgSVBQX0JVRl9E RVFVRVVFOgo+IC0JCWdzY193cml0ZSgweDAsIEdTQ19JTl9CQVNFX0FERFJfWShidWZfaWQpKTsK PiAtCQlnc2Nfd3JpdGUoMHgwLCBHU0NfSU5fQkFTRV9BRERSX0NCKGJ1Zl9pZCkpOwo+IC0JCWdz Y193cml0ZSgweDAsIEdTQ19JTl9CQVNFX0FERFJfQ1IoYnVmX2lkKSk7Cj4gLQkJYnJlYWs7Cj4g LQlkZWZhdWx0Ogo+IC0JCS8qIGJ5cGFzcyAqLwo+IC0JCWJyZWFrOwo+IC0JfQo+ICsJZ3NjX3dy aXRlKGJ1Zi0+ZG1hX2FkZHJbMF0sIEdTQ19JTl9CQVNFX0FERFJfWShidWZfaWQpKTsKPiArCWdz Y193cml0ZShidWYtPmRtYV9hZGRyWzFdLCBHU0NfSU5fQkFTRV9BRERSX0NCKGJ1Zl9pZCkpOwo+ ICsJZ3NjX3dyaXRlKGJ1Zi0+ZG1hX2FkZHJbMl0sIEdTQ19JTl9CQVNFX0FERFJfQ1IoYnVmX2lk KSk7Cj4gIAo+IC0JcmV0dXJuIGdzY19zcmNfc2V0X2J1Zl9zZXEoY3R4LCBidWZfaWQsIGJ1Zl90 eXBlKTsKPiArCXJldHVybiBnc2Nfc3JjX3NldF9idWZfc2VxKGN0eCwgYnVmX2lkLCB0cnVlKTsK PiAgfQo+ICAKPiAtc3RhdGljIHN0cnVjdCBleHlub3NfZHJtX2lwcF9vcHMgZ3NjX3NyY19vcHMg PSB7Cj4gLQkuc2V0X2ZtdCA9IGdzY19zcmNfc2V0X2ZtdCwKPiAtCS5zZXRfdHJhbnNmID0gZ3Nj X3NyY19zZXRfdHJhbnNmLAo+IC0JLnNldF9zaXplID0gZ3NjX3NyY19zZXRfc2l6ZSwKPiAtCS5z ZXRfYWRkciA9IGdzY19zcmNfc2V0X2FkZHIsCj4gLX07Cj4gLQo+IC1zdGF0aWMgaW50IGdzY19k c3Rfc2V0X2ZtdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBmbXQpCj4gK3N0YXRpYyBpbnQgZ3Nj X2RzdF9zZXRfZm10KHN0cnVjdCBnc2NfY29udGV4dCAqY3R4LCB1MzIgZm10KQoKZGl0dG8uCgo+ ICB7Cj4gLQlzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0eCA9IGdldF9nc2NfY29udGV4dChkZXYpOwo+ IC0Jc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2ICppcHBkcnYgPSAmY3R4LT5pcHBkcnY7Cj4gIAl1 MzIgY2ZnOwo+ICAKPiAgCURSTV9ERUJVR19LTVMoImZtdFsweCV4XVxuIiwgZm10KTsKPiBAQCAt ODE5LDkgKzcxNSw2IEBAIHN0YXRpYyBpbnQgZ3NjX2RzdF9zZXRfZm10KHN0cnVjdCBkZXZpY2Ug KmRldiwgdTMyIGZtdCkKPiAgCQljZmcgfD0gKEdTQ19PVVRfQ0hST01BX09SREVSX0NCQ1IgfAo+ ICAJCQlHU0NfT1VUX1lVVjQyMF8yUCk7Cj4gIAkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCWRl dl9lcnIoaXBwZHJ2LT5kZXYsICJpbnZhbGlkIHRhcmdldCB5dXYgb3JkZXIgMHgleC5cbiIsIGZt dCk7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gIAl9Cj4gIAo+ICAJZ3NjX3dyaXRlKGNmZywgR1ND X09VVF9DT04pOwo+IEBAIC04MjksNjEgKzcyMiw2IEBAIHN0YXRpYyBpbnQgZ3NjX2RzdF9zZXRf Zm10KHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGZtdCkKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+ IC1zdGF0aWMgaW50IGdzY19kc3Rfc2V0X3RyYW5zZihzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gLQkJ ZW51bSBkcm1fZXh5bm9zX2RlZ3JlZSBkZWdyZWUsCj4gLQkJZW51bSBkcm1fZXh5bm9zX2ZsaXAg ZmxpcCwgYm9vbCAqc3dhcCkKPiAtewo+IC0Jc3RydWN0IGdzY19jb250ZXh0ICpjdHggPSBnZXRf Z3NjX2NvbnRleHQoZGV2KTsKPiAtCXN0cnVjdCBleHlub3NfZHJtX2lwcGRydiAqaXBwZHJ2ID0g JmN0eC0+aXBwZHJ2Owo+IC0JdTMyIGNmZzsKPiAtCj4gLQlEUk1fREVCVUdfS01TKCJkZWdyZWVb JWRdZmxpcFsweCV4XVxuIiwgZGVncmVlLCBmbGlwKTsKPiAtCj4gLQljZmcgPSBnc2NfcmVhZChH U0NfSU5fQ09OKTsKPiAtCWNmZyAmPSB+R1NDX0lOX1JPVF9NQVNLOwo+IC0KPiAtCXN3aXRjaCAo ZGVncmVlKSB7Cj4gLQljYXNlIEVYWU5PU19EUk1fREVHUkVFXzA6Cj4gLQkJaWYgKGZsaXAgJiBF WFlOT1NfRFJNX0ZMSVBfVkVSVElDQUwpCj4gLQkJCWNmZyB8PSBHU0NfSU5fUk9UX1hGTElQOwo+ IC0JCWlmIChmbGlwICYgRVhZTk9TX0RSTV9GTElQX0hPUklaT05UQUwpCj4gLQkJCWNmZyB8PSBH U0NfSU5fUk9UX1lGTElQOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV85 MDoKPiAtCQlpZiAoZmxpcCAmIEVYWU5PU19EUk1fRkxJUF9WRVJUSUNBTCkKPiAtCQkJY2ZnIHw9 IEdTQ19JTl9ST1RfOTBfWEZMSVA7Cj4gLQkJZWxzZSBpZiAoZmxpcCAmIEVYWU5PU19EUk1fRkxJ UF9IT1JJWk9OVEFMKQo+IC0JCQljZmcgfD0gR1NDX0lOX1JPVF85MF9ZRkxJUDsKPiAtCQllbHNl Cj4gLQkJCWNmZyB8PSBHU0NfSU5fUk9UXzkwOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBFWFlOT1Nf RFJNX0RFR1JFRV8xODA6Cj4gLQkJY2ZnIHw9IEdTQ19JTl9ST1RfMTgwOwo+IC0JCWlmIChmbGlw ICYgRVhZTk9TX0RSTV9GTElQX1ZFUlRJQ0FMKQo+IC0JCQljZmcgJj0gfkdTQ19JTl9ST1RfWEZM SVA7Cj4gLQkJaWYgKGZsaXAgJiBFWFlOT1NfRFJNX0ZMSVBfSE9SSVpPTlRBTCkKPiAtCQkJY2Zn ICY9IH5HU0NfSU5fUk9UX1lGTElQOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBFWFlOT1NfRFJNX0RF R1JFRV8yNzA6Cj4gLQkJY2ZnIHw9IEdTQ19JTl9ST1RfMjcwOwo+IC0JCWlmIChmbGlwICYgRVhZ Tk9TX0RSTV9GTElQX1ZFUlRJQ0FMKQo+IC0JCQljZmcgJj0gfkdTQ19JTl9ST1RfWEZMSVA7Cj4g LQkJaWYgKGZsaXAgJiBFWFlOT1NfRFJNX0ZMSVBfSE9SSVpPTlRBTCkKPiAtCQkJY2ZnICY9IH5H U0NfSU5fUk9UX1lGTElQOwo+IC0JCWJyZWFrOwo+IC0JZGVmYXVsdDoKPiAtCQlkZXZfZXJyKGlw cGRydi0+ZGV2LCAiaW52YWxpZCBkZWdyZWUgdmFsdWUgJWQuXG4iLCBkZWdyZWUpOwo+IC0JCXJl dHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCWdzY193cml0ZShjZmcsIEdTQ19JTl9DT04pOwo+ IC0KPiAtCWN0eC0+cm90YXRpb24gPSAoY2ZnICYgR1NDX0lOX1JPVF85MCkgPyAxIDogMDsKPiAt CSpzd2FwID0gY3R4LT5yb3RhdGlvbjsKPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+IC0KPiAgc3Rh dGljIGludCBnc2NfZ2V0X3JhdGlvX3NoaWZ0KHUzMiBzcmMsIHUzMiBkc3QsIHUzMiAqcmF0aW8p Cj4gIHsKPiAgCURSTV9ERUJVR19LTVMoInNyY1slZF1kc3RbJWRdXG4iLCBzcmMsIGRzdCk7Cj4g QEAgLTkxOSw5ICs3NTcsOCBAQCBzdGF0aWMgdm9pZCBnc2NfZ2V0X3ByZXNjYWxlcl9zaGZhY3Rv cih1MzIgaHJhdGlvLCB1MzIgdnJhdGlvLCB1MzIgKnNoZmFjdG9yKQo+ICB9Cj4gIAo+ICBzdGF0 aWMgaW50IGdzY19zZXRfcHJlc2NhbGVyKHN0cnVjdCBnc2NfY29udGV4dCAqY3R4LCBzdHJ1Y3Qg Z3NjX3NjYWxlciAqc2MsCj4gLQkJc3RydWN0IGRybV9leHlub3NfcG9zICpzcmMsIHN0cnVjdCBk cm1fZXh5bm9zX3BvcyAqZHN0KQo+ICsgICAgIHN0cnVjdCBkcm1fZXh5bm9zX2lwcF90YXNrX3Jl Y3QgKnNyYywgc3RydWN0IGRybV9leHlub3NfaXBwX3Rhc2tfcmVjdCAqZHN0KQo+ICB7Cj4gLQlz dHJ1Y3QgZXh5bm9zX2RybV9pcHBkcnYgKmlwcGRydiA9ICZjdHgtPmlwcGRydjsKPiAgCXUzMiBj Zmc7Cj4gIAl1MzIgc3JjX3csIHNyY19oLCBkc3RfdywgZHN0X2g7Cj4gIAlpbnQgcmV0ID0gMDsK PiBAQCAtOTM5LDEzICs3NzYsMTMgQEAgc3RhdGljIGludCBnc2Nfc2V0X3ByZXNjYWxlcihzdHJ1 Y3QgZ3NjX2NvbnRleHQgKmN0eCwgc3RydWN0IGdzY19zY2FsZXIgKnNjLAo+ICAKPiAgCXJldCA9 IGdzY19nZXRfcmF0aW9fc2hpZnQoc3JjX3csIGRzdF93LCAmc2MtPnByZV9ocmF0aW8pOwo+ICAJ aWYgKHJldCkgewo+IC0JCWRldl9lcnIoaXBwZHJ2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHJhdGlv IGhvcml6b250YWwuXG4iKTsKPiArCQlkZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIGdldCBy YXRpbyBob3Jpem9udGFsLlxuIik7Cj4gIAkJcmV0dXJuIHJldDsKPiAgCX0KPiAgCj4gIAlyZXQg PSBnc2NfZ2V0X3JhdGlvX3NoaWZ0KHNyY19oLCBkc3RfaCwgJnNjLT5wcmVfdnJhdGlvKTsKPiAg CWlmIChyZXQpIHsKPiAtCQlkZXZfZXJyKGlwcGRydi0+ZGV2LCAiZmFpbGVkIHRvIGdldCByYXRp byB2ZXJ0aWNhbC5cbiIpOwo+ICsJCWRldl9lcnIoY3R4LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHJh dGlvIHZlcnRpY2FsLlxuIik7Cj4gIAkJcmV0dXJuIHJldDsKPiAgCX0KPiAgCj4gQEAgLTEwMzks NDcgKzg3NiwzNyBAQCBzdGF0aWMgdm9pZCBnc2Nfc2V0X3NjYWxlcihzdHJ1Y3QgZ3NjX2NvbnRl eHQgKmN0eCwgc3RydWN0IGdzY19zY2FsZXIgKnNjKQo+ICAJZ3NjX3dyaXRlKGNmZywgR1NDX01B SU5fVl9SQVRJTyk7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgZ3NjX2RzdF9zZXRfc2l6ZShzdHJ1 Y3QgZGV2aWNlICpkZXYsIGludCBzd2FwLAo+IC0JCXN0cnVjdCBkcm1fZXh5bm9zX3BvcyAqcG9z LCBzdHJ1Y3QgZHJtX2V4eW5vc19zeiAqc3opCj4gK3N0YXRpYyBpbnQgZ3NjX2RzdF9zZXRfc2l6 ZShzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0eCwKPiArCQkJICAgIHN0cnVjdCBleHlub3NfZHJtX2lw cF9idWZmZXIgKmJ1ZikKCmRpdHRvLgoKPiAgewo+IC0Jc3RydWN0IGdzY19jb250ZXh0ICpjdHgg PSBnZXRfZ3NjX2NvbnRleHQoZGV2KTsKPiAtCXN0cnVjdCBkcm1fZXh5bm9zX3BvcyBpbWdfcG9z ID0gKnBvczsKPiAgCXN0cnVjdCBnc2Nfc2NhbGVyICpzYyA9ICZjdHgtPnNjOwo+ICAJdTMyIGNm ZzsKPiAgCj4gLQlEUk1fREVCVUdfS01TKCJzd2FwWyVkXXhbJWRdeVslZF13WyVkXWhbJWRdXG4i LAo+IC0JCXN3YXAsIHBvcy0+eCwgcG9zLT55LCBwb3MtPncsIHBvcy0+aCk7Cj4gLQo+IC0JaWYg KHN3YXApIHsKPiAtCQlpbWdfcG9zLncgPSBwb3MtPmg7Cj4gLQkJaW1nX3Bvcy5oID0gcG9zLT53 Owo+IC0JfQo+IC0KPiAgCS8qIHBpeGVsIG9mZnNldCAqLwo+IC0JY2ZnID0gKEdTQ19EU1RJTUdf T0ZGU0VUX1gocG9zLT54KSB8Cj4gLQkJR1NDX0RTVElNR19PRkZTRVRfWShwb3MtPnkpKTsKPiAr CWNmZyA9IChHU0NfRFNUSU1HX09GRlNFVF9YKGJ1Zi0+cmVjdC54KSB8Cj4gKwkJR1NDX0RTVElN R19PRkZTRVRfWShidWYtPnJlY3QueSkpOwo+ICAJZ3NjX3dyaXRlKGNmZywgR1NDX0RTVElNR19P RkZTRVQpOwo+ICAKPiAgCS8qIHNjYWxlZCBzaXplICovCj4gLQljZmcgPSAoR1NDX1NDQUxFRF9X SURUSChpbWdfcG9zLncpIHwgR1NDX1NDQUxFRF9IRUlHSFQoaW1nX3Bvcy5oKSk7Cj4gKwlpZiAo Y3R4LT5yb3RhdGlvbikKPiArCQljZmcgPSAoR1NDX1NDQUxFRF9XSURUSChidWYtPnJlY3QuaCkg fAo+ICsJCSAgICAgICBHU0NfU0NBTEVEX0hFSUdIVChidWYtPnJlY3QudykpOwo+ICsJZWxzZQo+ ICsJCWNmZyA9IChHU0NfU0NBTEVEX1dJRFRIKGJ1Zi0+cmVjdC53KSB8Cj4gKwkJICAgICAgIEdT Q19TQ0FMRURfSEVJR0hUKGJ1Zi0+cmVjdC5oKSk7Cj4gIAlnc2Nfd3JpdGUoY2ZnLCBHU0NfU0NB TEVEX1NJWkUpOwo+ICAKPiAtCURSTV9ERUJVR19LTVMoImhzaXplWyVkXXZzaXplWyVkXVxuIiwg c3otPmhzaXplLCBzei0+dnNpemUpOwo+IC0KPiAgCS8qIG9yaWdpbmFsIHNpemUgKi8KPiAgCWNm ZyA9IGdzY19yZWFkKEdTQ19EU1RJTUdfU0laRSk7Cj4gLQljZmcgJj0gfihHU0NfRFNUSU1HX0hF SUdIVF9NQVNLIHwKPiAtCQlHU0NfRFNUSU1HX1dJRFRIX01BU0spOwo+IC0JY2ZnIHw9IChHU0Nf RFNUSU1HX1dJRFRIKHN6LT5oc2l6ZSkgfAo+IC0JCUdTQ19EU1RJTUdfSEVJR0hUKHN6LT52c2l6 ZSkpOwo+ICsJY2ZnICY9IH4oR1NDX0RTVElNR19IRUlHSFRfTUFTSyB8IEdTQ19EU1RJTUdfV0lE VEhfTUFTSyk7Cj4gKwljZmcgfD0gR1NDX0RTVElNR19XSURUSChidWYtPmJ1Zi53aWR0aCkgfAo+ ICsJICAgICAgIEdTQ19EU1RJTUdfSEVJR0hUKGJ1Zi0+YnVmLmhlaWdodCk7Cj4gIAlnc2Nfd3Jp dGUoY2ZnLCBHU0NfRFNUSU1HX1NJWkUpOwo+ICAKPiAgCWNmZyA9IGdzY19yZWFkKEdTQ19PVVRf Q09OKTsKPiAgCWNmZyAmPSB+R1NDX09VVF9SR0JfVFlQRV9NQVNLOwo+ICAKPiAtCURSTV9ERUJV R19LTVMoIndpZHRoWyVkXXJhbmdlWyVkXVxuIiwgcG9zLT53LCBzYy0+cmFuZ2UpOwo+IC0KPiAt CWlmIChwb3MtPncgPj0gR1NDX1dJRFRIX0lUVV83MDkpCj4gKwlpZiAoYnVmLT5yZWN0LncgPj0g R1NDX1dJRFRIX0lUVV83MDkpCj4gIAkJaWYgKHNjLT5yYW5nZSkKPiAgCQkJY2ZnIHw9IEdTQ19P VVRfUkdCX0hEX1dJREU7Cj4gIAkJZWxzZQo+IEBAIC0xMTEyLDM0ICs5MzksMTYgQEAgc3RhdGlj IGludCBnc2NfZHN0X2dldF9idWZfc2VxKHN0cnVjdCBnc2NfY29udGV4dCAqY3R4KQo+ICB9Cj4g IAo+ICBzdGF0aWMgaW50IGdzY19kc3Rfc2V0X2J1Zl9zZXEoc3RydWN0IGdzY19jb250ZXh0ICpj dHgsIHUzMiBidWZfaWQsCj4gLQkJZW51bSBkcm1fZXh5bm9zX2lwcF9idWZfdHlwZSBidWZfdHlw ZSkKPiArCQkJICAgICAgIGJvb2wgZW5xdWV1ZSkKPiAgewo+IC0Jc3RydWN0IGV4eW5vc19kcm1f aXBwZHJ2ICppcHBkcnYgPSAmY3R4LT5pcHBkcnY7Cj4gLQlib29sIG1hc2tlZDsKPiArCWJvb2wg bWFza2VkID0gIWVucXVldWU7Cj4gIAl1MzIgY2ZnOwo+ICAJdTMyIG1hc2sgPSAweDAwMDAwMDAx IDw8IGJ1Zl9pZDsKPiAgCWludCByZXQgPSAwOwoKJ3JldCcgdmFyaWFibGUgYWx3YXlzIHJldHVy bnMgMCBzbyBzZWVtcyB1bm5lY2Vzc2FyeSwgYW5kIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBuZWVk ICdpbnQnIHJldHVybiBkYXRhIHR5cGUuCgo+ICAKPiAtCURSTV9ERUJVR19LTVMoImJ1Zl9pZFsl ZF1idWZfdHlwZVslZF1cbiIsIGJ1Zl9pZCwgYnVmX3R5cGUpOwo+IC0KPiAtCW11dGV4X2xvY2so JmN0eC0+bG9jayk7Cj4gLQo+ICAJLyogbWFzayByZWdpc3RlciBzZXQgKi8KPiAgCWNmZyA9IGdz Y19yZWFkKEdTQ19PVVRfQkFTRV9BRERSX1lfTUFTSyk7Cj4gIAo+IC0Jc3dpdGNoIChidWZfdHlw ZSkgewo+IC0JY2FzZSBJUFBfQlVGX0VOUVVFVUU6Cj4gLQkJbWFza2VkID0gZmFsc2U7Cj4gLQkJ YnJlYWs7Cj4gLQljYXNlIElQUF9CVUZfREVRVUVVRToKPiAtCQltYXNrZWQgPSB0cnVlOwo+IC0J CWJyZWFrOwo+IC0JZGVmYXVsdDoKPiAtCQlkZXZfZXJyKGlwcGRydi0+ZGV2LCAiaW52YWxpZCBi dWYgY3RybCBwYXJhbWV0ZXIuXG4iKTsKPiAtCQlyZXQgPSAgLUVJTlZBTDsKPiAtCQlnb3RvIGVy cl91bmxvY2s7Cj4gLQl9Cj4gLQo+ICAJLyogc2VxdWVuY2UgaWQgKi8KPiAgCWNmZyAmPSB+bWFz azsKPiAgCWNmZyB8PSBtYXNrZWQgPDwgYnVmX2lkOwo+IEBAIC0xMTQ4LDg3ICs5NTcsMjUgQEAg c3RhdGljIGludCBnc2NfZHN0X3NldF9idWZfc2VxKHN0cnVjdCBnc2NfY29udGV4dCAqY3R4LCB1 MzIgYnVmX2lkLAo+ICAJZ3NjX3dyaXRlKGNmZywgR1NDX09VVF9CQVNFX0FERFJfQ1JfTUFTSyk7 Cj4gIAo+ICAJLyogaW50ZXJydXB0IGVuYWJsZSAqLwo+IC0JaWYgKGJ1Zl90eXBlID09IElQUF9C VUZfRU5RVUVVRSAmJgo+IC0JICAgIGdzY19kc3RfZ2V0X2J1Zl9zZXEoY3R4KSA+PSBHU0NfQlVG X1NUQVJUKQo+ICsJaWYgKGVucXVldWUgJiYgZ3NjX2RzdF9nZXRfYnVmX3NlcShjdHgpID49IEdT Q19CVUZfU1RBUlQpCj4gIAkJZ3NjX2hhbmRsZV9pcnEoY3R4LCB0cnVlLCBmYWxzZSwgdHJ1ZSk7 Cj4gIAo+ICAJLyogaW50ZXJydXB0IGRpc2FibGUgKi8KPiAtCWlmIChidWZfdHlwZSA9PSBJUFBf QlVGX0RFUVVFVUUgJiYKPiAtCSAgICBnc2NfZHN0X2dldF9idWZfc2VxKGN0eCkgPD0gR1NDX0JV Rl9TVE9QKQo+ICsJaWYgKCFlbnF1ZXVlICYmIGdzY19kc3RfZ2V0X2J1Zl9zZXEoY3R4KSA8PSBH U0NfQlVGX1NUT1ApCj4gIAkJZ3NjX2hhbmRsZV9pcnEoY3R4LCBmYWxzZSwgZmFsc2UsIHRydWUp Owo+ICAKPiAtZXJyX3VubG9jazoKPiAtCW11dGV4X3VubG9jaygmY3R4LT5sb2NrKTsKPiAgCXJl dHVybiByZXQ7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgZ3NjX2RzdF9zZXRfYWRkcihzdHJ1Y3Qg ZGV2aWNlICpkZXYsCj4gLQkJc3RydWN0IGRybV9leHlub3NfaXBwX2J1Zl9pbmZvICpidWZfaW5m bywgdTMyIGJ1Zl9pZCwKPiAtCQllbnVtIGRybV9leHlub3NfaXBwX2J1Zl90eXBlIGJ1Zl90eXBl KQo+ICtzdGF0aWMgaW50IGdzY19kc3Rfc2V0X2FkZHIoc3RydWN0IGdzY19jb250ZXh0ICpjdHgs Cj4gKwkJdTMyIGJ1Zl9pZCwgc3RydWN0IGV4eW5vc19kcm1faXBwX2J1ZmZlciAqYnVmKQo+ICB7 CgpObyBuZWVkIHJldHVybiBkYXRhIHR5cGUgYmVjYXVzZSB0aGUgcmV0dXJuIHZhbHVlIG9mIGdz Y19kc3Rfc2V0X2J1Zl9zZXEgZnVuY3Rpb24gaXNuJ3QgbmVlZGVkLgoKPiAtCXN0cnVjdCBnc2Nf Y29udGV4dCAqY3R4ID0gZ2V0X2dzY19jb250ZXh0KGRldik7Cj4gLQlzdHJ1Y3QgZXh5bm9zX2Ry bV9pcHBkcnYgKmlwcGRydiA9ICZjdHgtPmlwcGRydjsKPiAtCXN0cnVjdCBkcm1fZXh5bm9zX2lw cF9jbWRfbm9kZSAqY19ub2RlID0gaXBwZHJ2LT5jX25vZGU7Cj4gLQlzdHJ1Y3QgZHJtX2V4eW5v c19pcHBfcHJvcGVydHkgKnByb3BlcnR5Owo+IC0KPiAtCWlmICghY19ub2RlKSB7Cj4gLQkJRFJN X0VSUk9SKCJmYWlsZWQgdG8gZ2V0IGNfbm9kZS5cbiIpOwo+IC0JCXJldHVybiAtRUZBVUxUOwo+ IC0JfQo+IC0KPiAtCXByb3BlcnR5ID0gJmNfbm9kZS0+cHJvcGVydHk7Cj4gLQo+IC0JRFJNX0RF QlVHX0tNUygicHJvcF9pZFslZF1idWZfaWRbJWRdYnVmX3R5cGVbJWRdXG4iLAo+IC0JCXByb3Bl cnR5LT5wcm9wX2lkLCBidWZfaWQsIGJ1Zl90eXBlKTsKPiAtCj4gLQlpZiAoYnVmX2lkID4gR1ND X01BWF9EU1QpIHsKPiAtCQlkZXZfaW5mbyhpcHBkcnYtPmRldiwgImludmFsaWQgYnVmX2lkICVk LlxuIiwgYnVmX2lkKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gIAkvKiBhZGRy ZXNzIHJlZ2lzdGVyIHNldCAqLwo+IC0Jc3dpdGNoIChidWZfdHlwZSkgewo+IC0JY2FzZSBJUFBf QlVGX0VOUVVFVUU6Cj4gLQkJZ3NjX3dyaXRlKGJ1Zl9pbmZvLT5iYXNlW0VYWU5PU19EUk1fUExB TkFSX1ldLAo+IC0JCQlHU0NfT1VUX0JBU0VfQUREUl9ZKGJ1Zl9pZCkpOwo+IC0JCWdzY193cml0 ZShidWZfaW5mby0+YmFzZVtFWFlOT1NfRFJNX1BMQU5BUl9DQl0sCj4gLQkJCUdTQ19PVVRfQkFT RV9BRERSX0NCKGJ1Zl9pZCkpOwo+IC0JCWdzY193cml0ZShidWZfaW5mby0+YmFzZVtFWFlOT1Nf RFJNX1BMQU5BUl9DUl0sCj4gLQkJCUdTQ19PVVRfQkFTRV9BRERSX0NSKGJ1Zl9pZCkpOwo+IC0J CWJyZWFrOwo+IC0JY2FzZSBJUFBfQlVGX0RFUVVFVUU6Cj4gLQkJZ3NjX3dyaXRlKDB4MCwgR1ND X09VVF9CQVNFX0FERFJfWShidWZfaWQpKTsKPiAtCQlnc2Nfd3JpdGUoMHgwLCBHU0NfT1VUX0JB U0VfQUREUl9DQihidWZfaWQpKTsKPiAtCQlnc2Nfd3JpdGUoMHgwLCBHU0NfT1VUX0JBU0VfQURE Ul9DUihidWZfaWQpKTsKPiAtCQlicmVhazsKPiAtCWRlZmF1bHQ6Cj4gLQkJLyogYnlwYXNzICov Cj4gLQkJYnJlYWs7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIGdzY19kc3Rfc2V0X2J1Zl9zZXEoY3R4 LCBidWZfaWQsIGJ1Zl90eXBlKTsKPiAtfQo+IC0KPiAtc3RhdGljIHN0cnVjdCBleHlub3NfZHJt X2lwcF9vcHMgZ3NjX2RzdF9vcHMgPSB7Cj4gLQkuc2V0X2ZtdCA9IGdzY19kc3Rfc2V0X2ZtdCwK PiAtCS5zZXRfdHJhbnNmID0gZ3NjX2RzdF9zZXRfdHJhbnNmLAo+IC0JLnNldF9zaXplID0gZ3Nj X2RzdF9zZXRfc2l6ZSwKPiAtCS5zZXRfYWRkciA9IGdzY19kc3Rfc2V0X2FkZHIsCj4gLX07Cj4g LQo+IC1zdGF0aWMgaW50IGdzY19jbGtfY3RybChzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0eCwgYm9v bCBlbmFibGUpCj4gLXsKPiAtCURSTV9ERUJVR19LTVMoImVuYWJsZVslZF1cbiIsIGVuYWJsZSk7 Cj4gLQo+IC0JaWYgKGVuYWJsZSkgewo+IC0JCWNsa19wcmVwYXJlX2VuYWJsZShjdHgtPmdzY19j bGspOwo+IC0JCWN0eC0+c3VzcGVuZGVkID0gZmFsc2U7Cj4gLQl9IGVsc2Ugewo+IC0JCWNsa19k aXNhYmxlX3VucHJlcGFyZShjdHgtPmdzY19jbGspOwo+IC0JCWN0eC0+c3VzcGVuZGVkID0gdHJ1 ZTsKPiAtCX0KPiArCWdzY193cml0ZShidWYtPmRtYV9hZGRyWzBdLCBHU0NfT1VUX0JBU0VfQURE Ul9ZKGJ1Zl9pZCkpOwo+ICsJZ3NjX3dyaXRlKGJ1Zi0+ZG1hX2FkZHJbMV0sIEdTQ19PVVRfQkFT RV9BRERSX0NCKGJ1Zl9pZCkpOwo+ICsJZ3NjX3dyaXRlKGJ1Zi0+ZG1hX2FkZHJbMl0sIEdTQ19P VVRfQkFTRV9BRERSX0NSKGJ1Zl9pZCkpOwo+ICAKPiAtCXJldHVybiAwOwo+ICsJcmV0dXJuIGdz Y19kc3Rfc2V0X2J1Zl9zZXEoY3R4LCBidWZfaWQsIHRydWUpOwoKU28ganVzdCBjYWxsIGdzY19k c3Rfc2V0X2J1Zl9zZXEoY3R4LCBidWZfaWQsIHRydWUpOwoKPiAgfQo+ICAKPiAgc3RhdGljIGlu dCBnc2NfZ2V0X3NyY19idWZfaW5kZXgoc3RydWN0IGdzY19jb250ZXh0ICpjdHgpCj4gQEAgLTEy NDksMjAgKzk5NiwyMCBAQCBzdGF0aWMgaW50IGdzY19nZXRfc3JjX2J1Zl9pbmRleChzdHJ1Y3Qg Z3NjX2NvbnRleHQgKmN0eCkKPiAgCQl9Cj4gIAl9Cj4gIAo+ICsJRFJNX0RFQlVHX0tNUygiY2Zn WzB4JXhdY3Vycl9pbmRleFslZF1idWZfaWRbJWRdXG4iLCBjZmcsCj4gKwkJY3Vycl9pbmRleCwg YnVmX2lkKTsKPiArCj4gIAlpZiAoYnVmX2lkID09IEdTQ19NQVhfU1JDKSB7Cj4gIAkJRFJNX0VS Uk9SKCJmYWlsZWQgdG8gZ2V0IGluIGJ1ZmZlciBpbmRleC5cbiIpOwo+ICAJCXJldHVybiAtRUlO VkFMOwo+ICAJfQo+ICAKPiAtCXJldCA9IGdzY19zcmNfc2V0X2J1Zl9zZXEoY3R4LCBidWZfaWQs IElQUF9CVUZfREVRVUVVRSk7Cj4gKwlyZXQgPSBnc2Nfc3JjX3NldF9idWZfc2VxKGN0eCwgYnVm X2lkLCBmYWxzZSk7CgpTbyB1bm5lY2Vzc2FyeSBlcnJvciBjaGVjay4KCj4gIAlpZiAocmV0IDwg MCkgewo+ICAJCURSTV9FUlJPUigiZmFpbGVkIHRvIGRlcXVldWUuXG4iKTsKPiAgCQlyZXR1cm4g cmV0Owo+ICAJfQo+ICAKPiAtCURSTV9ERUJVR19LTVMoImNmZ1sweCV4XWN1cnJfaW5kZXhbJWRd YnVmX2lkWyVkXVxuIiwgY2ZnLAo+IC0JCWN1cnJfaW5kZXgsIGJ1Zl9pZCk7Cj4gLQo+ICAJcmV0 dXJuIGJ1Zl9pZDsKPiAgfQo+ICAKPiBAQCAtMTI4OSw3ICsxMDM2LDcgQEAgc3RhdGljIGludCBn c2NfZ2V0X2RzdF9idWZfaW5kZXgoc3RydWN0IGdzY19jb250ZXh0ICpjdHgpCj4gIAkJcmV0dXJu IC1FSU5WQUw7Cj4gIAl9Cj4gIAo+IC0JcmV0ID0gZ3NjX2RzdF9zZXRfYnVmX3NlcShjdHgsIGJ1 Zl9pZCwgSVBQX0JVRl9ERVFVRVVFKTsKPiArCXJldCA9IGdzY19kc3Rfc2V0X2J1Zl9zZXEoY3R4 LCBidWZfaWQsIGZhbHNlKTsKCmRpdHRvLgoKPiAgCWlmIChyZXQgPCAwKSB7Cj4gIAkJRFJNX0VS Uk9SKCJmYWlsZWQgdG8gZGVxdWV1ZS5cbiIpOwo+ICAJCXJldHVybiByZXQ7Cj4gQEAgLTEzMDQs MjE1ICsxMDUxLDU1IEBAIHN0YXRpYyBpbnQgZ3NjX2dldF9kc3RfYnVmX2luZGV4KHN0cnVjdCBn c2NfY29udGV4dCAqY3R4KQo+ICBzdGF0aWMgaXJxcmV0dXJuX3QgZ3NjX2lycV9oYW5kbGVyKGlu dCBpcnEsIHZvaWQgKmRldl9pZCkKPiAgewo+ICAJc3RydWN0IGdzY19jb250ZXh0ICpjdHggPSBk ZXZfaWQ7Cj4gLQlzdHJ1Y3QgZXh5bm9zX2RybV9pcHBkcnYgKmlwcGRydiA9ICZjdHgtPmlwcGRy djsKPiAtCXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9jbWRfbm9kZSAqY19ub2RlID0gaXBwZHJ2LT5j X25vZGU7Cj4gLQlzdHJ1Y3QgZHJtX2V4eW5vc19pcHBfZXZlbnRfd29yayAqZXZlbnRfd29yayA9 Cj4gLQkJY19ub2RlLT5ldmVudF93b3JrOwo+ICAJdTMyIHN0YXR1czsKPiAtCWludCBidWZfaWRb RVhZTk9TX0RSTV9PUFNfTUFYXTsKPiArCWludCBlcnIgPSAwOwo+ICAKPiAgCURSTV9ERUJVR19L TVMoImdzYyBpZFslZF1cbiIsIGN0eC0+aWQpOwo+ICAKPiAgCXN0YXR1cyA9IGdzY19yZWFkKEdT Q19JUlEpOwo+ICAJaWYgKHN0YXR1cyAmIEdTQ19JUlFfU1RBVFVTX09SX0lSUSkgewo+IC0JCWRl dl9lcnIoaXBwZHJ2LT5kZXYsICJvY2N1cnJlZCBvdmVyZmxvdyBhdCAlZCwgc3RhdHVzIDB4JXgu XG4iLAo+ICsJCWRldl9lcnIoY3R4LT5kZXYsICJvY2N1cnJlZCBvdmVyZmxvdyBhdCAlZCwgc3Rh dHVzIDB4JXguXG4iLAo+ICAJCQljdHgtPmlkLCBzdGF0dXMpOwo+IC0JCXJldHVybiBJUlFfTk9O RTsKPiArCQllcnIgPSAtRUlOVkFMOwo+ICAJfQo+ICAKPiAgCWlmIChzdGF0dXMgJiBHU0NfSVJR X1NUQVRVU19PUl9GUk1fRE9ORSkgewo+IC0JCWRldl9kYmcoaXBwZHJ2LT5kZXYsICJvY2N1cnJl ZCBmcmFtZSBkb25lIGF0ICVkLCBzdGF0dXMgMHgleC5cbiIsCj4gLQkJCWN0eC0+aWQsIHN0YXR1 cyk7Cj4gLQo+IC0JCWJ1Zl9pZFtFWFlOT1NfRFJNX09QU19TUkNdID0gZ3NjX2dldF9zcmNfYnVm X2luZGV4KGN0eCk7Cj4gLQkJaWYgKGJ1Zl9pZFtFWFlOT1NfRFJNX09QU19TUkNdIDwgMCkKPiAt CQkJcmV0dXJuIElSUV9IQU5ETEVEOwo+IC0KPiAtCQlidWZfaWRbRVhZTk9TX0RSTV9PUFNfRFNU XSA9IGdzY19nZXRfZHN0X2J1Zl9pbmRleChjdHgpOwo+IC0JCWlmIChidWZfaWRbRVhZTk9TX0RS TV9PUFNfRFNUXSA8IDApCj4gLQkJCXJldHVybiBJUlFfSEFORExFRDsKPiAtCj4gLQkJRFJNX0RF QlVHX0tNUygiYnVmX2lkX3NyY1slZF1idWZfaWRfZHN0WyVkXVxuIiwKPiAtCQkJYnVmX2lkW0VY WU5PU19EUk1fT1BTX1NSQ10sIGJ1Zl9pZFtFWFlOT1NfRFJNX09QU19EU1RdKTsKPiAtCj4gLQkJ ZXZlbnRfd29yay0+aXBwZHJ2ID0gaXBwZHJ2Owo+IC0JCWV2ZW50X3dvcmstPmJ1Zl9pZFtFWFlO T1NfRFJNX09QU19TUkNdID0KPiAtCQkJYnVmX2lkW0VYWU5PU19EUk1fT1BTX1NSQ107Cj4gLQkJ ZXZlbnRfd29yay0+YnVmX2lkW0VYWU5PU19EUk1fT1BTX0RTVF0gPQo+IC0JCQlidWZfaWRbRVhZ Tk9TX0RSTV9PUFNfRFNUXTsKPiAtCQlxdWV1ZV93b3JrKGlwcGRydi0+ZXZlbnRfd29ya3EsICZl dmVudF93b3JrLT53b3JrKTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gLX0K PiAtCj4gLXN0YXRpYyBpbnQgZ3NjX2luaXRfcHJvcF9saXN0KHN0cnVjdCBleHlub3NfZHJtX2lw cGRydiAqaXBwZHJ2KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2V4eW5vc19pcHBfcHJvcF9saXN0ICpw cm9wX2xpc3QgPSAmaXBwZHJ2LT5wcm9wX2xpc3Q7Cj4gLQo+IC0JcHJvcF9saXN0LT52ZXJzaW9u ID0gMTsKPiAtCXByb3BfbGlzdC0+d3JpdGViYWNrID0gMTsKPiAtCXByb3BfbGlzdC0+cmVmcmVz aF9taW4gPSBHU0NfUkVGUkVTSF9NSU47Cj4gLQlwcm9wX2xpc3QtPnJlZnJlc2hfbWF4ID0gR1ND X1JFRlJFU0hfTUFYOwo+IC0JcHJvcF9saXN0LT5mbGlwID0gKDEgPDwgRVhZTk9TX0RSTV9GTElQ X1ZFUlRJQ0FMKSB8Cj4gLQkJCQkoMSA8PCBFWFlOT1NfRFJNX0ZMSVBfSE9SSVpPTlRBTCk7Cj4g LQlwcm9wX2xpc3QtPmRlZ3JlZSA9ICgxIDw8IEVYWU5PU19EUk1fREVHUkVFXzApIHwKPiAtCQkJ CSgxIDw8IEVYWU5PU19EUk1fREVHUkVFXzkwKSB8Cj4gLQkJCQkoMSA8PCBFWFlOT1NfRFJNX0RF R1JFRV8xODApIHwKPiAtCQkJCSgxIDw8IEVYWU5PU19EUk1fREVHUkVFXzI3MCk7Cj4gLQlwcm9w X2xpc3QtPmNzYyA9IDE7Cj4gLQlwcm9wX2xpc3QtPmNyb3AgPSAxOwo+IC0JcHJvcF9saXN0LT5j cm9wX21heC5oc2l6ZSA9IEdTQ19DUk9QX01BWDsKPiAtCXByb3BfbGlzdC0+Y3JvcF9tYXgudnNp emUgPSBHU0NfQ1JPUF9NQVg7Cj4gLQlwcm9wX2xpc3QtPmNyb3BfbWluLmhzaXplID0gR1NDX0NS T1BfTUlOOwo+IC0JcHJvcF9saXN0LT5jcm9wX21pbi52c2l6ZSA9IEdTQ19DUk9QX01JTjsKPiAt CXByb3BfbGlzdC0+c2NhbGUgPSAxOwo+IC0JcHJvcF9saXN0LT5zY2FsZV9tYXguaHNpemUgPSBH U0NfU0NBTEVfTUFYOwo+IC0JcHJvcF9saXN0LT5zY2FsZV9tYXgudnNpemUgPSBHU0NfU0NBTEVf TUFYOwo+IC0JcHJvcF9saXN0LT5zY2FsZV9taW4uaHNpemUgPSBHU0NfU0NBTEVfTUlOOwo+IC0J cHJvcF9saXN0LT5zY2FsZV9taW4udnNpemUgPSBHU0NfU0NBTEVfTUlOOwo+IC0KPiAtCXJldHVy biAwOwo+IC19Cj4gKwkJaW50IHNyY19idWZfaWQsIGRzdF9idWZfaWQ7Cj4gIAo+IC1zdGF0aWMg aW5saW5lIGJvb2wgZ3NjX2NoZWNrX2RybV9mbGlwKGVudW0gZHJtX2V4eW5vc19mbGlwIGZsaXAp Cj4gLXsKPiAtCXN3aXRjaCAoZmxpcCkgewo+IC0JY2FzZSBFWFlOT1NfRFJNX0ZMSVBfTk9ORToK PiAtCWNhc2UgRVhZTk9TX0RSTV9GTElQX1ZFUlRJQ0FMOgo+IC0JY2FzZSBFWFlOT1NfRFJNX0ZM SVBfSE9SSVpPTlRBTDoKPiAtCWNhc2UgRVhZTk9TX0RSTV9GTElQX0JPVEg6Cj4gLQkJcmV0dXJu IHRydWU7Cj4gLQlkZWZhdWx0Ogo+IC0JCURSTV9ERUJVR19LTVMoImludmFsaWQgZmxpcFxuIik7 Cj4gLQkJcmV0dXJuIGZhbHNlOwo+IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGdzY19pcHBk cnZfY2hlY2tfcHJvcGVydHkoc3RydWN0IGRldmljZSAqZGV2LAo+IC0JCXN0cnVjdCBkcm1fZXh5 bm9zX2lwcF9wcm9wZXJ0eSAqcHJvcGVydHkpCj4gLXsKPiAtCXN0cnVjdCBnc2NfY29udGV4dCAq Y3R4ID0gZ2V0X2dzY19jb250ZXh0KGRldik7Cj4gLQlzdHJ1Y3QgZXh5bm9zX2RybV9pcHBkcnYg KmlwcGRydiA9ICZjdHgtPmlwcGRydjsKPiAtCXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9wcm9wX2xp c3QgKnBwID0gJmlwcGRydi0+cHJvcF9saXN0Owo+IC0Jc3RydWN0IGRybV9leHlub3NfaXBwX2Nv bmZpZyAqY29uZmlnOwo+IC0Jc3RydWN0IGRybV9leHlub3NfcG9zICpwb3M7Cj4gLQlzdHJ1Y3Qg ZHJtX2V4eW5vc19zeiAqc3o7Cj4gLQlib29sIHN3YXA7Cj4gLQlpbnQgaTsKPiAtCj4gLQlmb3Jf ZWFjaF9pcHBfb3BzKGkpIHsKPiAtCQlpZiAoKGkgPT0gRVhZTk9TX0RSTV9PUFNfU1JDKSAmJgo+ IC0JCQkocHJvcGVydHktPmNtZCA9PSBJUFBfQ01EX1dCKSkKPiAtCQkJY29udGludWU7Cj4gLQo+ IC0JCWNvbmZpZyA9ICZwcm9wZXJ0eS0+Y29uZmlnW2ldOwo+IC0JCXBvcyA9ICZjb25maWctPnBv czsKPiAtCQlzeiA9ICZjb25maWctPnN6Owo+IC0KPiAtCQkvKiBjaGVjayBmb3IgZmxpcCAqLwo+ IC0JCWlmICghZ3NjX2NoZWNrX2RybV9mbGlwKGNvbmZpZy0+ZmxpcCkpIHsKPiAtCQkJRFJNX0VS Uk9SKCJpbnZhbGlkIGZsaXAuXG4iKTsKPiAtCQkJZ290byBlcnJfcHJvcGVydHk7Cj4gLQkJfQo+ IC0KPiAtCQkvKiBjaGVjayBmb3IgZGVncmVlICovCj4gLQkJc3dpdGNoIChjb25maWctPmRlZ3Jl ZSkgewo+IC0JCWNhc2UgRVhZTk9TX0RSTV9ERUdSRUVfOTA6Cj4gLQkJY2FzZSBFWFlOT1NfRFJN X0RFR1JFRV8yNzA6Cj4gLQkJCXN3YXAgPSB0cnVlOwo+IC0JCQlicmVhazsKPiAtCQljYXNlIEVY WU5PU19EUk1fREVHUkVFXzA6Cj4gLQkJY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV8xODA6Cj4gLQkJ CXN3YXAgPSBmYWxzZTsKPiAtCQkJYnJlYWs7Cj4gLQkJZGVmYXVsdDoKPiAtCQkJRFJNX0VSUk9S KCJpbnZhbGlkIGRlZ3JlZS5cbiIpOwo+IC0JCQlnb3RvIGVycl9wcm9wZXJ0eTsKPiAtCQl9Cj4g KwkJZGV2X2RiZyhjdHgtPmRldiwgIm9jY3VycmVkIGZyYW1lIGRvbmUgYXQgJWQsIHN0YXR1cyAw eCV4LlxuIiwKPiArCQkJY3R4LT5pZCwgc3RhdHVzKTsKPiAgCj4gLQkJLyogY2hlY2sgZm9yIGJ1 ZmZlciBib3VuZCAqLwo+IC0JCWlmICgocG9zLT54ICsgcG9zLT53ID4gc3otPmhzaXplKSB8fAo+ IC0JCQkocG9zLT55ICsgcG9zLT5oID4gc3otPnZzaXplKSkgewo+IC0JCQlEUk1fRVJST1IoIm91 dCBvZiBidWYgYm91bmQuXG4iKTsKPiAtCQkJZ290byBlcnJfcHJvcGVydHk7Cj4gLQkJfQo+ICsJ CXNyY19idWZfaWQgPSBnc2NfZ2V0X3NyY19idWZfaW5kZXgoY3R4KTsKPiArCQlkc3RfYnVmX2lk ID0gZ3NjX2dldF9kc3RfYnVmX2luZGV4KGN0eCk7Cj4gIAo+IC0JCS8qIGNoZWNrIGZvciBjcm9w ICovCj4gLQkJaWYgKChpID09IEVYWU5PU19EUk1fT1BTX1NSQykgJiYgKHBwLT5jcm9wKSkgewo+ IC0JCQlpZiAoc3dhcCkgewo+IC0JCQkJaWYgKChwb3MtPmggPCBwcC0+Y3JvcF9taW4uaHNpemUp IHx8Cj4gLQkJCQkJKHN6LT52c2l6ZSA+IHBwLT5jcm9wX21heC5oc2l6ZSkgfHwKPiAtCQkJCQko cG9zLT53IDwgcHAtPmNyb3BfbWluLnZzaXplKSB8fAo+IC0JCQkJCShzei0+aHNpemUgPiBwcC0+ Y3JvcF9tYXgudnNpemUpKSB7Cj4gLQkJCQkJRFJNX0VSUk9SKCJvdXQgb2YgY3JvcCBzaXplLlxu Iik7Cj4gLQkJCQkJZ290byBlcnJfcHJvcGVydHk7Cj4gLQkJCQl9Cj4gLQkJCX0gZWxzZSB7Cj4g LQkJCQlpZiAoKHBvcy0+dyA8IHBwLT5jcm9wX21pbi5oc2l6ZSkgfHwKPiAtCQkJCQkoc3otPmhz aXplID4gcHAtPmNyb3BfbWF4LmhzaXplKSB8fAo+IC0JCQkJCShwb3MtPmggPCBwcC0+Y3JvcF9t aW4udnNpemUpIHx8Cj4gLQkJCQkJKHN6LT52c2l6ZSA+IHBwLT5jcm9wX21heC52c2l6ZSkpIHsK PiAtCQkJCQlEUk1fRVJST1IoIm91dCBvZiBjcm9wIHNpemUuXG4iKTsKPiAtCQkJCQlnb3RvIGVy cl9wcm9wZXJ0eTsKPiAtCQkJCX0KPiAtCQkJfQo+IC0JCX0KPiArCQlEUk1fREVCVUdfS01TKCJi dWZfaWRfc3JjWyVkXWJ1Zl9pZF9kc3RbJWRdXG4iLAlzcmNfYnVmX2lkLAo+ICsJCQkgICAgICBk c3RfYnVmX2lkKTsKPiAgCj4gLQkJLyogY2hlY2sgZm9yIHNjYWxlICovCj4gLQkJaWYgKChpID09 IEVYWU5PU19EUk1fT1BTX0RTVCkgJiYgKHBwLT5zY2FsZSkpIHsKPiAtCQkJaWYgKHN3YXApIHsK PiAtCQkJCWlmICgocG9zLT5oIDwgcHAtPnNjYWxlX21pbi5oc2l6ZSkgfHwKPiAtCQkJCQkoc3ot PnZzaXplID4gcHAtPnNjYWxlX21heC5oc2l6ZSkgfHwKPiAtCQkJCQkocG9zLT53IDwgcHAtPnNj YWxlX21pbi52c2l6ZSkgfHwKPiAtCQkJCQkoc3otPmhzaXplID4gcHAtPnNjYWxlX21heC52c2l6 ZSkpIHsKPiAtCQkJCQlEUk1fRVJST1IoIm91dCBvZiBzY2FsZSBzaXplLlxuIik7Cj4gLQkJCQkJ Z290byBlcnJfcHJvcGVydHk7Cj4gLQkJCQl9Cj4gLQkJCX0gZWxzZSB7Cj4gLQkJCQlpZiAoKHBv cy0+dyA8IHBwLT5zY2FsZV9taW4uaHNpemUpIHx8Cj4gLQkJCQkJKHN6LT5oc2l6ZSA+IHBwLT5z Y2FsZV9tYXguaHNpemUpIHx8Cj4gLQkJCQkJKHBvcy0+aCA8IHBwLT5zY2FsZV9taW4udnNpemUp IHx8Cj4gLQkJCQkJKHN6LT52c2l6ZSA+IHBwLT5zY2FsZV9tYXgudnNpemUpKSB7Cj4gLQkJCQkJ RFJNX0VSUk9SKCJvdXQgb2Ygc2NhbGUgc2l6ZS5cbiIpOwo+IC0JCQkJCWdvdG8gZXJyX3Byb3Bl cnR5Owo+IC0JCQkJfQo+IC0JCQl9Cj4gLQkJfQo+ICsJCWlmIChzcmNfYnVmX2lkIDwgMCB8fCBk c3RfYnVmX2lkIDwgMCkKPiArCQkJZXJyID0gLUVJTlZBTDsKPiAgCX0KPiAgCj4gLQlyZXR1cm4g MDsKPiArCWlmIChjdHgtPnRhc2spIHsKPiArCQlzdHJ1Y3QgZXh5bm9zX2RybV9pcHBfdGFzayAq dGFzayA9IGN0eC0+dGFzazsKPiAgCj4gLWVycl9wcm9wZXJ0eToKPiAtCWZvcl9lYWNoX2lwcF9v cHMoaSkgewo+IC0JCWlmICgoaSA9PSBFWFlOT1NfRFJNX09QU19TUkMpICYmCj4gLQkJCShwcm9w ZXJ0eS0+Y21kID09IElQUF9DTURfV0IpKQo+IC0JCQljb250aW51ZTsKPiAtCj4gLQkJY29uZmln ID0gJnByb3BlcnR5LT5jb25maWdbaV07Cj4gLQkJcG9zID0gJmNvbmZpZy0+cG9zOwo+IC0JCXN6 ID0gJmNvbmZpZy0+c3o7Cj4gLQo+IC0JCURSTV9FUlJPUigiWyVzXWZbJWRdclslZF1wb3NbJWQg JWQgJWQgJWRdc3pbJWQgJWRdXG4iLAo+IC0JCQlpID8gImRzdCIgOiAic3JjIiwgY29uZmlnLT5m bGlwLCBjb25maWctPmRlZ3JlZSwKPiAtCQkJcG9zLT54LCBwb3MtPnksIHBvcy0+dywgcG9zLT5o LAo+IC0JCQlzei0+aHNpemUsIHN6LT52c2l6ZSk7Cj4gKwkJY3R4LT50YXNrID0gTlVMTDsKPiAr CQlwbV9ydW50aW1lX21hcmtfbGFzdF9idXN5KGN0eC0+ZGV2KTsKPiArCQlwbV9ydW50aW1lX3B1 dF9hdXRvc3VzcGVuZChjdHgtPmRldik7Cj4gKwkJZXh5bm9zX2RybV9pcHBfdGFza19kb25lKHRh c2ssIGVycik7Cj4gIAl9Cj4gIAo+IC0JcmV0dXJuIC1FSU5WQUw7Cj4gKwlyZXR1cm4gSVJRX0hB TkRMRUQ7Cj4gIH0KPiAgCj4gLQo+IC1zdGF0aWMgaW50IGdzY19pcHBkcnZfcmVzZXQoc3RydWN0 IGRldmljZSAqZGV2KQo+ICtzdGF0aWMgaW50IGdzY19yZXNldChzdHJ1Y3QgZ3NjX2NvbnRleHQg KmN0eCkKPiAgewo+IC0Jc3RydWN0IGdzY19jb250ZXh0ICpjdHggPSBnZXRfZ3NjX2NvbnRleHQo ZGV2KTsKPiAgCXN0cnVjdCBnc2Nfc2NhbGVyICpzYyA9ICZjdHgtPnNjOwo+ICAJaW50IHJldDsK PiAgCj4gIAkvKiByZXNldCBoL3cgYmxvY2sgKi8KPiAgCXJldCA9IGdzY19zd19yZXNldChjdHgp Owo+ICAJaWYgKHJldCA8IDApIHsKPiAtCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXNldCBo YXJkd2FyZS5cbiIpOwo+ICsJCWRldl9lcnIoY3R4LT5kZXYsICJmYWlsZWQgdG8gcmVzZXQgaGFy ZHdhcmUuXG4iKTsKPiAgCQlyZXR1cm4gcmV0Owo+ICAJfQo+ICAKPiBAQCAtMTUyMyw5NiArMTEx MCwyOSBAQCBzdGF0aWMgaW50IGdzY19pcHBkcnZfcmVzZXQoc3RydWN0IGRldmljZSAqZGV2KQo+ ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgZ3NjX2lwcGRydl9zdGFydChzdHJ1 Y3QgZGV2aWNlICpkZXYsIGVudW0gZHJtX2V4eW5vc19pcHBfY21kIGNtZCkKPiArc3RhdGljIGlu dCBnc2Nfc3RhcnQoc3RydWN0IGdzY19jb250ZXh0ICpjdHgpCgpObyBuZWVkICdpbnQnIHJldHVy biBkYXRhIHR5cGUuCgo+ICB7Cj4gLQlzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0eCA9IGdldF9nc2Nf Y29udGV4dChkZXYpOwo+IC0Jc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2ICppcHBkcnYgPSAmY3R4 LT5pcHBkcnY7Cj4gLQlzdHJ1Y3QgZHJtX2V4eW5vc19pcHBfY21kX25vZGUgKmNfbm9kZSA9IGlw cGRydi0+Y19ub2RlOwo+IC0Jc3RydWN0IGRybV9leHlub3NfaXBwX3Byb3BlcnR5ICpwcm9wZXJ0 eTsKPiAtCXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9jb25maWcgKmNvbmZpZzsKPiAtCXN0cnVjdCBk cm1fZXh5bm9zX3BvcwlpbWdfcG9zW0VYWU5PU19EUk1fT1BTX01BWF07Cj4gLQlzdHJ1Y3QgZHJt X2V4eW5vc19pcHBfc2V0X3diIHNldF93YjsKPiAgCXUzMiBjZmc7Cj4gLQlpbnQgcmV0LCBpOwo+ IC0KPiAtCURSTV9ERUJVR19LTVMoImNtZFslZF1cbiIsIGNtZCk7Cj4gLQo+IC0JaWYgKCFjX25v ZGUpIHsKPiAtCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgY19ub2RlLlxuIik7Cj4gLQkJcmV0 dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JcHJvcGVydHkgPSAmY19ub2RlLT5wcm9wZXJ0eTsK PiAgCj4gIAlnc2NfaGFuZGxlX2lycShjdHgsIHRydWUsIGZhbHNlLCB0cnVlKTsKPiAgCj4gLQlm b3JfZWFjaF9pcHBfb3BzKGkpIHsKPiAtCQljb25maWcgPSAmcHJvcGVydHktPmNvbmZpZ1tpXTsK PiAtCQlpbWdfcG9zW2ldID0gY29uZmlnLT5wb3M7Cj4gLQl9Cj4gKwkvKiBlbmFibGUgb25lIHNo b3QgKi8KPiArCWNmZyA9IGdzY19yZWFkKEdTQ19FTkFCTEUpOwo+ICsJY2ZnICY9IH4oR1NDX0VO QUJMRV9PTl9DTEVBUl9NQVNLIHwKPiArCQlHU0NfRU5BQkxFX0NMS19HQVRFX01PREVfTUFTSyk7 Cj4gKwljZmcgfD0gR1NDX0VOQUJMRV9PTl9DTEVBUl9PTkVTSE9UOwo+ICsJZ3NjX3dyaXRlKGNm ZywgR1NDX0VOQUJMRSk7Cj4gIAo+IC0Jc3dpdGNoIChjbWQpIHsKPiAtCWNhc2UgSVBQX0NNRF9N Mk06Cj4gLQkJLyogZW5hYmxlIG9uZSBzaG90ICovCj4gLQkJY2ZnID0gZ3NjX3JlYWQoR1NDX0VO QUJMRSk7Cj4gLQkJY2ZnICY9IH4oR1NDX0VOQUJMRV9PTl9DTEVBUl9NQVNLIHwKPiAtCQkJR1ND X0VOQUJMRV9DTEtfR0FURV9NT0RFX01BU0spOwo+IC0JCWNmZyB8PSBHU0NfRU5BQkxFX09OX0NM RUFSX09ORVNIT1Q7Cj4gLQkJZ3NjX3dyaXRlKGNmZywgR1NDX0VOQUJMRSk7Cj4gLQo+IC0JCS8q IHNyYyBkbWEgbWVtb3J5ICovCj4gLQkJY2ZnID0gZ3NjX3JlYWQoR1NDX0lOX0NPTik7Cj4gLQkJ Y2ZnICY9IH4oR1NDX0lOX1BBVEhfTUFTSyB8IEdTQ19JTl9MT0NBTF9TRUxfTUFTSyk7Cj4gLQkJ Y2ZnIHw9IEdTQ19JTl9QQVRIX01FTU9SWTsKPiAtCQlnc2Nfd3JpdGUoY2ZnLCBHU0NfSU5fQ09O KTsKPiAtCj4gLQkJLyogZHN0IGRtYSBtZW1vcnkgKi8KPiAtCQljZmcgPSBnc2NfcmVhZChHU0Nf T1VUX0NPTik7Cj4gLQkJY2ZnIHw9IEdTQ19PVVRfUEFUSF9NRU1PUlk7Cj4gLQkJZ3NjX3dyaXRl KGNmZywgR1NDX09VVF9DT04pOwo+IC0JCWJyZWFrOwo+IC0JY2FzZSBJUFBfQ01EX1dCOgo+IC0J CXNldF93Yi5lbmFibGUgPSAxOwo+IC0JCXNldF93Yi5yZWZyZXNoID0gcHJvcGVydHktPnJlZnJl c2hfcmF0ZTsKPiAtCQlnc2Nfc2V0X2dzY2Jsa19maW1kX3diKGN0eCwgc2V0X3diLmVuYWJsZSk7 Cj4gLQkJZXh5bm9zX2RybV9pcHBuYl9zZW5kX2V2ZW50KElQUF9TRVRfV1JJVEVCQUNLLCAodm9p ZCAqKSZzZXRfd2IpOwo+IC0KPiAtCQkvKiBzcmMgbG9jYWwgcGF0aCAqLwo+IC0JCWNmZyA9IGdz Y19yZWFkKEdTQ19JTl9DT04pOwo+IC0JCWNmZyAmPSB+KEdTQ19JTl9QQVRIX01BU0sgfCBHU0Nf SU5fTE9DQUxfU0VMX01BU0spOwo+IC0JCWNmZyB8PSAoR1NDX0lOX1BBVEhfTE9DQUwgfCBHU0Nf SU5fTE9DQUxfRklNRF9XQik7Cj4gLQkJZ3NjX3dyaXRlKGNmZywgR1NDX0lOX0NPTik7Cj4gLQo+ IC0JCS8qIGRzdCBkbWEgbWVtb3J5ICovCj4gLQkJY2ZnID0gZ3NjX3JlYWQoR1NDX09VVF9DT04p Owo+IC0JCWNmZyB8PSBHU0NfT1VUX1BBVEhfTUVNT1JZOwo+IC0JCWdzY193cml0ZShjZmcsIEdT Q19PVVRfQ09OKTsKPiAtCQlicmVhazsKPiAtCWNhc2UgSVBQX0NNRF9PVVRQVVQ6Cj4gLQkJLyog c3JjIGRtYSBtZW1vcnkgKi8KPiAtCQljZmcgPSBnc2NfcmVhZChHU0NfSU5fQ09OKTsKPiAtCQlj ZmcgJj0gfihHU0NfSU5fUEFUSF9NQVNLIHwgR1NDX0lOX0xPQ0FMX1NFTF9NQVNLKTsKPiAtCQlj ZmcgfD0gR1NDX0lOX1BBVEhfTUVNT1JZOwo+IC0JCWdzY193cml0ZShjZmcsIEdTQ19JTl9DT04p Owo+IC0KPiAtCQkvKiBkc3QgbG9jYWwgcGF0aCAqLwo+IC0JCWNmZyA9IGdzY19yZWFkKEdTQ19P VVRfQ09OKTsKPiAtCQljZmcgfD0gR1NDX09VVF9QQVRIX01FTU9SWTsKPiAtCQlnc2Nfd3JpdGUo Y2ZnLCBHU0NfT1VUX0NPTik7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCXJldCA9IC1F SU5WQUw7Cj4gLQkJZGV2X2VycihkZXYsICJpbnZhbGlkIG9wZXJhdGlvbnMuXG4iKTsKPiAtCQly ZXR1cm4gcmV0Owo+IC0JfQo+ICsJLyogc3JjIGRtYSBtZW1vcnkgKi8KPiArCWNmZyA9IGdzY19y ZWFkKEdTQ19JTl9DT04pOwo+ICsJY2ZnICY9IH4oR1NDX0lOX1BBVEhfTUFTSyB8IEdTQ19JTl9M T0NBTF9TRUxfTUFTSyk7Cj4gKwljZmcgfD0gR1NDX0lOX1BBVEhfTUVNT1JZOwo+ICsJZ3NjX3dy aXRlKGNmZywgR1NDX0lOX0NPTik7Cj4gIAo+IC0JcmV0ID0gZ3NjX3NldF9wcmVzY2FsZXIoY3R4 LCAmY3R4LT5zYywKPiAtCQkmaW1nX3Bvc1tFWFlOT1NfRFJNX09QU19TUkNdLAo+IC0JCSZpbWdf cG9zW0VYWU5PU19EUk1fT1BTX0RTVF0pOwo+IC0JaWYgKHJldCkgewo+IC0JCWRldl9lcnIoZGV2 LCAiZmFpbGVkIHRvIHNldCBwcmVzY2FsZXIuXG4iKTsKPiAtCQlyZXR1cm4gcmV0Owo+IC0JfQo+ ICsJLyogZHN0IGRtYSBtZW1vcnkgKi8KPiArCWNmZyA9IGdzY19yZWFkKEdTQ19PVVRfQ09OKTsK PiArCWNmZyB8PSBHU0NfT1VUX1BBVEhfTUVNT1JZOwo+ICsJZ3NjX3dyaXRlKGNmZywgR1NDX09V VF9DT04pOwo+ICAKPiAgCWdzY19zZXRfc2NhbGVyKGN0eCwgJmN0eC0+c2MpOwo+ICAKPiBAQCAt MTYyMyw2NiArMTE0MywxMzIgQEAgc3RhdGljIGludCBnc2NfaXBwZHJ2X3N0YXJ0KHN0cnVjdCBk ZXZpY2UgKmRldiwgZW51bSBkcm1fZXh5bm9zX2lwcF9jbWQgY21kKQo+ICAJcmV0dXJuIDA7Cj4g IH0KPiAgCj4gLXN0YXRpYyB2b2lkIGdzY19pcHBkcnZfc3RvcChzdHJ1Y3QgZGV2aWNlICpkZXYs IGVudW0gZHJtX2V4eW5vc19pcHBfY21kIGNtZCkKPiArc3RhdGljIGludCBnc2NfY29tbWl0KHN0 cnVjdCBleHlub3NfZHJtX2lwcCAqaXBwLAo+ICsJCQkgIHN0cnVjdCBleHlub3NfZHJtX2lwcF90 YXNrICp0YXNrKQo+ICB7Cj4gLQlzdHJ1Y3QgZ3NjX2NvbnRleHQgKmN0eCA9IGdldF9nc2NfY29u dGV4dChkZXYpOwo+IC0Jc3RydWN0IGRybV9leHlub3NfaXBwX3NldF93YiBzZXRfd2IgPSB7MCwg MH07Cj4gLQl1MzIgY2ZnOwo+ICsJc3RydWN0IGdzY19jb250ZXh0ICpjdHggPSBjb250YWluZXJf b2YoaXBwLCBzdHJ1Y3QgZ3NjX2NvbnRleHQsIGlwcCk7Cj4gKwo+ICsJcG1fcnVudGltZV9nZXRf c3luYyhjdHgtPmRldik7Cj4gKwljdHgtPnRhc2sgPSB0YXNrOwo+ICsKPiArCWdzY19yZXNldChj dHgpOwo+ICsJZ3NjX3NyY19zZXRfZm10KGN0eCwgdGFzay0+c3JjLmJ1Zi5mb3VyY2MpOwoKVGhp cyBmdW5jdGlvbiBjYW4gcmV0dXJuIGEgZXJyb3Igc28gcGxlYXNlIGNoZWNrIGEgZXJyb3IgaGVy ZS4KClRoYW5rcywKSW5raSBEYWUKCgo+ICsJZ3NjX3NyY19zZXRfdHJhbnNmKGN0eCwgdGFzay0+ dHJhbnNmb3JtLnJvdGF0aW9uKTsKPiArCWdzY19zcmNfc2V0X3NpemUoY3R4LCAmdGFzay0+c3Jj KTsKPiArCWdzY19zcmNfc2V0X2FkZHIoY3R4LCAwLCAmdGFzay0+c3JjKTsKPiArCWdzY19kc3Rf c2V0X2ZtdChjdHgsIHRhc2stPmRzdC5idWYuZm91cmNjKTsKPiArCWdzY19kc3Rfc2V0X3NpemUo Y3R4LCAmdGFzay0+ZHN0KTsKPiArCWdzY19kc3Rfc2V0X2FkZHIoY3R4LCAwLCAmdGFzay0+ZHN0 KTsKPiArCWdzY19zZXRfcHJlc2NhbGVyKGN0eCwgJmN0eC0+c2MsICZ0YXNrLT5zcmMucmVjdCwg JnRhc2stPmRzdC5yZWN0KTsKPiArCWdzY19zdGFydChjdHgpOwo+ICAKPiAtCURSTV9ERUJVR19L TVMoImNtZFslZF1cbiIsIGNtZCk7Cj4gKwlyZXR1cm4gMDsKPiArfQpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK