From mboxrd@z Thu Jan 1 00:00:00 1970 From: Inki Dae Subject: Re: [PATCH v4 3/9] drm/exynos: rotator: Convert driver to IPP v2 core API Date: Wed, 01 Nov 2017 14:40:08 +0900 Message-ID: <59F95E38.6030400@samsung.com> References: <20171023075428.7003-1-m.szyprowski@samsung.com> <20171023075428.7003-4-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-4-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 7JO0IOq4gDoKPiBUaGlzIHBhdGNoIGFkYXB0cyBFeHlub3MgRFJNIHJvdGF0b3IgZHJpdmVyIHRv IG5ldyBJUFAgdjIgY29yZSBBUEkuCj4gVGhlIHNpZGUgZWZmZWN0IG9mIHRoaXMgY29udmVyc2lv biBpcyBhIHN3aXRjaCB0byBkcml2ZXIgY29tcG9uZW50IEFQSQo+IHRvIHJlZ2lzdGVyIHByb3Bl cmx5IGluIHRoZSBFeHlub3MgRFJNIGNvcmUuCj4gCj4gU2lnbmVkLW9mZi1ieTogTWFyZWsgU3p5 cHJvd3NraSA8bS5zenlwcm93c2tpQHNhbXN1bmcuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9k cm0vZXh5bm9zL0tjb25maWcgICAgICAgICAgICAgIHwgICAyICstCj4gIGRyaXZlcnMvZ3B1L2Ry bS9leHlub3MvZXh5bm9zX2RybV9kcnYuYyAgICAgfCAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0v ZXh5bm9zL2V4eW5vc19kcm1fcm90YXRvci5jIHwgNzQwICsrKysrKystLS0tLS0tLS0tLS0tLS0t LS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX3JvdGF0b3IuaCB8ICAx OSAtCj4gIDQgZmlsZXMgY2hhbmdlZCwgMTc4IGluc2VydGlvbnMoKyksIDU4NCBkZWxldGlvbnMo LSkKPiAgZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2Ry bV9yb3RhdG9yLmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9LY29u ZmlnIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9LY29uZmlnCj4gaW5kZXggMmUwOTdhODFkZjEy Li5jMTBjOWNhMGQ4YjQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9LY29u ZmlnCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9LY29uZmlnCj4gQEAgLTEwNSw3ICsx MDUsNyBAQCBjb25maWcgRFJNX0VYWU5PU19GSU1DCj4gIAo+ICBjb25maWcgRFJNX0VYWU5PU19S T1RBVE9SCj4gIAlib29sICJSb3RhdG9yIgo+IC0JZGVwZW5kcyBvbiBCUk9LRU4KPiArCXNlbGVj dCBEUk1fRVhZTk9TX0lQUAo+ICAJaGVscAo+ICAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91 IHdhbnQgdG8gdXNlIEV4eW5vcyBSb3RhdG9yIGZvciBEUk0uCj4gIAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0v ZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMKPiBpbmRleCBkZTRjY2UyNThhNWIuLjNhZGUyYjBhZDE1 ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMKPiBAQCAtMjU3 LDYgKzI1Nyw3IEBAIHN0YXRpYyBzdHJ1Y3QgZXh5bm9zX2RybV9kcml2ZXJfaW5mbyBleHlub3Nf ZHJtX2RyaXZlcnNbXSA9IHsKPiAgCQlEUlZfUFRSKGZpbWNfZHJpdmVyLCBDT05GSUdfRFJNX0VY WU5PU19GSU1DKSwKPiAgCX0sIHsKPiAgCQlEUlZfUFRSKHJvdGF0b3JfZHJpdmVyLCBDT05GSUdf RFJNX0VYWU5PU19ST1RBVE9SKSwKPiArCQlEUk1fQ09NUE9ORU5UX0RSSVZFUgo+ICAJfSwgewo+ ICAJCURSVl9QVFIoZ3NjX2RyaXZlciwgQ09ORklHX0RSTV9FWFlOT1NfR1NDKSwKPiAgCX0sIHsK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX3JvdGF0b3Iu YyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9yb3RhdG9yLmMKPiBpbmRleCA3 OTI4MmE4MjBlY2MuLmZmYmM0OWI4NDU2MiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v ZXh5bm9zL2V4eW5vc19kcm1fcm90YXRvci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5v cy9leHlub3NfZHJtX3JvdGF0b3IuYwo+IEBAIC0xMCw2ICsxMCw3IEBACj4gICAqLwo+ICAKPiAg I2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5jbHVkZSA8bGludXgvY29tcG9uZW50Lmg+ Cj4gICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5o Pgo+ICAjaW5jbHVkZSA8bGludXgvaW8uaD4KPiBAQCAtMjIsMjkgKzIzLDE4IEBACj4gICNpbmNs dWRlIDxkcm0vZXh5bm9zX2RybS5oPgo+ICAjaW5jbHVkZSAicmVncy1yb3RhdG9yLmgiCj4gICNp bmNsdWRlICJleHlub3NfZHJtX2Rydi5oIgo+ICsjaW5jbHVkZSAiZXh5bm9zX2RybV9pb21tdS5o Igo+ICAjaW5jbHVkZSAiZXh5bm9zX2RybV9pcHAuaCIKPiAgCj4gIC8qCj4gICAqIFJvdGF0b3Ig c3VwcG9ydHMgaW1hZ2UgY3JvcC9yb3RhdG9yIGFuZCBpbnB1dC9vdXRwdXQgRE1BIG9wZXJhdGlv bnMuCj4gICAqIGlucHV0IERNQSByZWFkcyBpbWFnZSBkYXRhIGZyb20gdGhlIG1lbW9yeS4KPiAg ICogb3V0cHV0IERNQSB3cml0ZXMgaW1hZ2UgZGF0YSB0byBtZW1vcnkuCj4gLSAqCj4gLSAqIE0y TSBvcGVyYXRpb24gOiBzdXBwb3J0cyBjcm9wL3NjYWxlL3JvdGF0aW9uL2NzYyBzbyBvbi4KPiAt ICogTWVtb3J5IC0tLS0+IFJvdGF0b3IgSC9XIC0tLS0+IE1lbW9yeS4KPiAgICovCj4gIAo+IC0v Kgo+IC0gKiBUT0RPCj4gLSAqIDEuIGNoZWNrIHN1c3BlbmQvcmVzdW1lIGFwaSBpZiBuZWVkZWQu Cj4gLSAqIDIuIG5lZWQgdG8gY2hlY2sgdXNlIGNhc2UgcGxhdGZvcm1fZGV2aWNlX2lkLgo+IC0g KiAzLiBjaGVjayBzcmMvZHN0IHNpemUgd2l0aCwgaGVpZ2h0Lgo+IC0gKiA0LiBuZWVkIHRvIGFk ZCBzdXBwb3J0ZWQgbGlzdCBpbiBwcm9wX2xpc3QuCj4gLSAqLwo+ICsjZGVmaW5lIFJPVEFUT1Jf QVVUT1NVU1BFTkRfREVMQVkJMjAwMAo+ICAKPiAtI2RlZmluZSBnZXRfcm90X2NvbnRleHQoZGV2 KQlwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSkKPiAtI2RlZmlu ZSBnZXRfY3R4X2Zyb21faXBwZHJ2KGlwcGRydikJY29udGFpbmVyX29mKGlwcGRydixcCj4gLQkJ CQkJc3RydWN0IHJvdF9jb250ZXh0LCBpcHBkcnYpOwo+IC0jZGVmaW5lIHJvdF9yZWFkKG9mZnNl dCkJCXJlYWRsKHJvdC0+cmVncyArIChvZmZzZXQpKQo+ICsjZGVmaW5lIHJvdF9yZWFkKG9mZnNl dCkJcmVhZGwocm90LT5yZWdzICsgKG9mZnNldCkpCj4gICNkZWZpbmUgcm90X3dyaXRlKGNmZywg b2Zmc2V0KQl3cml0ZWwoY2ZnLCByb3QtPnJlZ3MgKyAob2Zmc2V0KSkKPiAgCj4gIGVudW0gcm90 X2lycV9zdGF0dXMgewo+IEBAIC01Miw1NCArNDIsMjIgQEAgZW51bSByb3RfaXJxX3N0YXR1cyB7 Cj4gIAlST1RfSVJRX1NUQVRVU19JTExFR0FMCT0gOSwKPiAgfTsKPiAgCj4gLS8qCj4gLSAqIEEg c3RydWN0dXJlIG9mIGxpbWl0YXRpb24uCj4gLSAqCj4gLSAqIEBtaW5fdzogbWluaW11bSB3aWR0 aC4KPiAtICogQG1pbl9oOiBtaW5pbXVtIGhlaWdodC4KPiAtICogQG1heF93OiBtYXhpbXVtIHdp ZHRoLgo+IC0gKiBAbWF4X2g6IG1heGltdW0gaGVpZ2h0Lgo+IC0gKiBAYWxpZ246IGFsaWduIHNp emUuCj4gLSAqLwo+IC1zdHJ1Y3Qgcm90X2xpbWl0IHsKPiAtCXUzMgltaW5fdzsKPiAtCXUzMglt aW5faDsKPiAtCXUzMgltYXhfdzsKPiAtCXUzMgltYXhfaDsKPiAtCXUzMglhbGlnbjsKPiAtfTsK PiAtCj4gLS8qCj4gLSAqIEEgc3RydWN0dXJlIG9mIGxpbWl0YXRpb24gdGFibGUuCj4gLSAqCj4g LSAqIEB5Y2JjcjQyMF8ycDogY2FzZSBvZiBZVVYuCj4gLSAqIEByZ2I4ODg6IGNhc2Ugb2YgUkdC Lgo+IC0gKi8KPiAtc3RydWN0IHJvdF9saW1pdF90YWJsZSB7Cj4gLQlzdHJ1Y3Qgcm90X2xpbWl0 CXljYmNyNDIwXzJwOwo+IC0Jc3RydWN0IHJvdF9saW1pdAlyZ2I4ODg7Cj4gLX07Cj4gLQo+ICAv Kgo+ICAgKiBBIHN0cnVjdHVyZSBvZiByb3RhdG9yIGNvbnRleHQuCj4gICAqIEBpcHBkcnY6IHBy ZXBhcmUgaW5pdGlhbGl6YXRpb24gdXNpbmcgaXBwZHJ2Lgo+IC0gKiBAcmVnc19yZXM6IHJlZ2lz dGVyIHJlc291cmNlcy4KPiAgICogQHJlZ3M6IG1lbW9yeSBtYXBwZWQgaW8gcmVnaXN0ZXJzLgo+ ICAgKiBAY2xvY2s6IHJvdGF0b3IgZ2F0ZSBjbG9jay4KPiAgICogQGxpbWl0X3RibDogbGltaXRh dGlvbiBvZiByb3RhdG9yLgo+ICAgKiBAaXJxOiBpcnEgbnVtYmVyLgo+IC0gKiBAY3VyX2J1Zl9p ZDogY3VycmVudCBvcGVyYXRpb24gYnVmZmVyIGlkLgo+IC0gKiBAc3VzcGVuZGVkOiBzdXNwZW5k ZWQgc3RhdGUuCj4gICAqLwo+ICBzdHJ1Y3Qgcm90X2NvbnRleHQgewo+IC0Jc3RydWN0IGV4eW5v c19kcm1faXBwZHJ2CWlwcGRydjsKPiAtCXN0cnVjdCByZXNvdXJjZQkqcmVnc19yZXM7Cj4gKwlz dHJ1Y3QgZXh5bm9zX2RybV9pcHAgaXBwOwo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXY7 Cj4gKwlzdHJ1Y3QgZGV2aWNlCSpkZXY7Cj4gIAl2b2lkIF9faW9tZW0JKnJlZ3M7Cj4gIAlzdHJ1 Y3QgY2xrCSpjbG9jazsKPiAtCXN0cnVjdCByb3RfbGltaXRfdGFibGUJKmxpbWl0X3RibDsKPiAt CWludAlpcnE7Cj4gLQlpbnQJY3VyX2J1Zl9pZFtFWFlOT1NfRFJNX09QU19NQVhdOwo+IC0JYm9v bAlzdXNwZW5kZWQ7Cj4gKwljb25zdCBzdHJ1Y3QgZXh5bm9zX2RybV9pcHBfZm9ybWF0cyAqZm9y bWF0czsKPiArCXN0cnVjdCBleHlub3NfZHJtX2lwcF90YXNrCSp0YXNrOwo+ICB9Owo+ICAKPiAg c3RhdGljIHZvaWQgcm90YXRvcl9yZWdfc2V0X2lycShzdHJ1Y3Qgcm90X2NvbnRleHQgKnJvdCwg Ym9vbCBlbmFibGUpCj4gQEAgLTExNCwxNSArNzIsNiBAQCBzdGF0aWMgdm9pZCByb3RhdG9yX3Jl Z19zZXRfaXJxKHN0cnVjdCByb3RfY29udGV4dCAqcm90LCBib29sIGVuYWJsZSkKPiAgCXJvdF93 cml0ZSh2YWwsIFJPVF9DT05GSUcpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdTMyIHJvdGF0b3JfcmVn X2dldF9mbXQoc3RydWN0IHJvdF9jb250ZXh0ICpyb3QpCj4gLXsKPiAtCXUzMiB2YWwgPSByb3Rf cmVhZChST1RfQ09OVFJPTCk7Cj4gLQo+IC0JdmFsICY9IFJPVF9DT05UUk9MX0ZNVF9NQVNLOwo+ IC0KPiAtCXJldHVybiB2YWw7Cj4gLX0KPiAtCj4gIHN0YXRpYyBlbnVtIHJvdF9pcnFfc3RhdHVz IHJvdGF0b3JfcmVnX2dldF9pcnFfc3RhdHVzKHN0cnVjdCByb3RfY29udGV4dCAqcm90KQo+ICB7 Cj4gIAl1MzIgdmFsID0gcm90X3JlYWQoUk9UX1NUQVRVUyk7Cj4gQEAgLTEzOCw5ICs4Nyw2IEBA IHN0YXRpYyBlbnVtIHJvdF9pcnFfc3RhdHVzIHJvdGF0b3JfcmVnX2dldF9pcnFfc3RhdHVzKHN0 cnVjdCByb3RfY29udGV4dCAqcm90KQo+ICBzdGF0aWMgaXJxcmV0dXJuX3Qgcm90YXRvcl9pcnFf aGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCj4gIHsKPiAgCXN0cnVjdCByb3RfY29udGV4dCAq cm90ID0gYXJnOwo+IC0Jc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2ICppcHBkcnYgPSAmcm90LT5p cHBkcnY7Cj4gLQlzdHJ1Y3QgZHJtX2V4eW5vc19pcHBfY21kX25vZGUgKmNfbm9kZSA9IGlwcGRy di0+Y19ub2RlOwo+IC0Jc3RydWN0IGRybV9leHlub3NfaXBwX2V2ZW50X3dvcmsgKmV2ZW50X3dv cmsgPSBjX25vZGUtPmV2ZW50X3dvcms7Cj4gIAllbnVtIHJvdF9pcnFfc3RhdHVzIGlycV9zdGF0 dXM7Cj4gIAl1MzIgdmFsOwo+ICAKPiBAQCAtMTUyLDU2ICs5OCwyMSBAQCBzdGF0aWMgaXJxcmV0 dXJuX3Qgcm90YXRvcl9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICphcmcpCj4gIAl2YWwgfD0g Uk9UX1NUQVRVU19JUlFfUEVORElORygodTMyKWlycV9zdGF0dXMpOwo+ICAJcm90X3dyaXRlKHZh bCwgUk9UX1NUQVRVUyk7Cj4gIAo+IC0JaWYgKGlycV9zdGF0dXMgPT0gUk9UX0lSUV9TVEFUVVNf Q09NUExFVEUpIHsKPiAtCQlldmVudF93b3JrLT5pcHBkcnYgPSBpcHBkcnY7Cj4gLQkJZXZlbnRf d29yay0+YnVmX2lkW0VYWU5PU19EUk1fT1BTX0RTVF0gPQo+IC0JCQlyb3QtPmN1cl9idWZfaWRb RVhZTk9TX0RSTV9PUFNfRFNUXTsKPiAtCQlxdWV1ZV93b3JrKGlwcGRydi0+ZXZlbnRfd29ya3Es ICZldmVudF93b3JrLT53b3JrKTsKPiAtCX0gZWxzZSB7Cj4gLQkJRFJNX0VSUk9SKCJ0aGUgU0ZS IGlzIHNldCBpbGxlZ2FsbHlcbiIpOwo+ICsJaWYgKHJvdC0+dGFzaykgewo+ICsJCXN0cnVjdCBl eHlub3NfZHJtX2lwcF90YXNrICp0YXNrID0gcm90LT50YXNrOwo+ICsKPiArCQlyb3QtPnRhc2sg PSBOVUxMOwo+ICsJCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3kocm90LT5kZXYpOwo+ICsJCXBt X3J1bnRpbWVfcHV0X2F1dG9zdXNwZW5kKHJvdC0+ZGV2KTsKPiArCQlleHlub3NfZHJtX2lwcF90 YXNrX2RvbmUodGFzaywKPiArCQkJaXJxX3N0YXR1cyA9PSBST1RfSVJRX1NUQVRVU19DT01QTEVU RSA/IDAgOiAtRUlOVkFMKTsKPiAgCX0KPiAgCj4gIAlyZXR1cm4gSVJRX0hBTkRMRUQ7Cj4gIH0K PiAgCj4gLXN0YXRpYyB2b2lkIHJvdGF0b3JfYWxpZ25fc2l6ZShzdHJ1Y3Qgcm90X2NvbnRleHQg KnJvdCwgdTMyIGZtdCwgdTMyICpoc2l6ZSwKPiAtCQl1MzIgKnZzaXplKQo+IC17Cj4gLQlzdHJ1 Y3Qgcm90X2xpbWl0X3RhYmxlICpsaW1pdF90YmwgPSByb3QtPmxpbWl0X3RibDsKPiAtCXN0cnVj dCByb3RfbGltaXQgKmxpbWl0Owo+IC0JdTMyIG1hc2ssIHZhbDsKPiAtCj4gLQkvKiBHZXQgc2l6 ZSBsaW1pdCAqLwo+IC0JaWYgKGZtdCA9PSBST1RfQ09OVFJPTF9GTVRfUkdCODg4KQo+IC0JCWxp bWl0ID0gJmxpbWl0X3RibC0+cmdiODg4Owo+IC0JZWxzZQo+IC0JCWxpbWl0ID0gJmxpbWl0X3Ri bC0+eWNiY3I0MjBfMnA7Cj4gLQo+IC0JLyogR2V0IG1hc2sgZm9yIHJvdW5kaW5nIHRvIG5lYXJl c3QgYWxpZ25lZCB2YWwgKi8KPiAtCW1hc2sgPSB+KCgxIDw8IGxpbWl0LT5hbGlnbikgLSAxKTsK PiAtCj4gLQkvKiBTZXQgYWxpZ25lZCB3aWR0aCAqLwo+IC0JdmFsID0gUk9UX0FMSUdOKCpoc2l6 ZSwgbGltaXQtPmFsaWduLCBtYXNrKTsKPiAtCWlmICh2YWwgPCBsaW1pdC0+bWluX3cpCj4gLQkJ KmhzaXplID0gUk9UX01JTihsaW1pdC0+bWluX3csIG1hc2spOwo+IC0JZWxzZSBpZiAodmFsID4g bGltaXQtPm1heF93KQo+IC0JCSpoc2l6ZSA9IFJPVF9NQVgobGltaXQtPm1heF93LCBtYXNrKTsK PiAtCWVsc2UKPiAtCQkqaHNpemUgPSB2YWw7Cj4gLQo+IC0JLyogU2V0IGFsaWduZWQgaGVpZ2h0 ICovCj4gLQl2YWwgPSBST1RfQUxJR04oKnZzaXplLCBsaW1pdC0+YWxpZ24sIG1hc2spOwo+IC0J aWYgKHZhbCA8IGxpbWl0LT5taW5faCkKPiAtCQkqdnNpemUgPSBST1RfTUlOKGxpbWl0LT5taW5f aCwgbWFzayk7Cj4gLQllbHNlIGlmICh2YWwgPiBsaW1pdC0+bWF4X2gpCj4gLQkJKnZzaXplID0g Uk9UX01BWChsaW1pdC0+bWF4X2gsIG1hc2spOwo+IC0JZWxzZQo+IC0JCSp2c2l6ZSA9IHZhbDsK PiAtfQo+IC0KPiAtc3RhdGljIGludCByb3RhdG9yX3NyY19zZXRfZm10KHN0cnVjdCBkZXZpY2Ug KmRldiwgdTMyIGZtdCkKPiArc3RhdGljIGludCByb3RhdG9yX3NyY19zZXRfZm10KHN0cnVjdCBy b3RfY29udGV4dCAqcm90LCB1MzIgZm10KQoKTmV2ZXIgcmV0dXJuIGFueSBlcnJvciBzbyB0aGlz IGZ1bmN0aW9uIGRvZXNuJ3QgbmVlZCByZXR1cm4gdHlwZS4KCj4gIHsKPiAtCXN0cnVjdCByb3Rf Y29udGV4dCAqcm90ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gIAl1MzIgdmFsOwo+ICAKPiAg CXZhbCA9IHJvdF9yZWFkKFJPVF9DT05UUk9MKTsKPiBAQCAtMjE0LDkgKzEyNSw2IEBAIHN0YXRp YyBpbnQgcm90YXRvcl9zcmNfc2V0X2ZtdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBmbXQpCj4g IAljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Cj4gIAkJdmFsIHw9IFJPVF9DT05UUk9MX0ZNVF9S R0I4ODg7Cj4gIAkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCURSTV9FUlJPUigiaW52YWxpZCBp bWFnZSBmb3JtYXRcbiIpOwo+IC0JCXJldHVybiAtRUlOVkFMOwo+ICAJfQo+ICAKPiAgCXJvdF93 cml0ZSh2YWwsIFJPVF9DT05UUk9MKTsKPiBAQCAtMjI0LDUwNSArMTMyLDE3NiBAQCBzdGF0aWMg aW50IHJvdGF0b3Jfc3JjX3NldF9mbXQoc3RydWN0IGRldmljZSAqZGV2LCB1MzIgZm10KQo+ICAJ cmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbmxpbmUgYm9vbCByb3RhdG9yX2NoZWNrX3Jl Z19mbXQodTMyIGZtdCkKPiArc3RhdGljIGludCByb3RhdG9yX3NyY19zZXRfYnVmKHN0cnVjdCBy b3RfY29udGV4dCAqcm90LAo+ICsJCQkgICAgICAgc3RydWN0IGV4eW5vc19kcm1faXBwX2J1ZmZl ciAqYnVmKQoKZGl0dG8uCgo+ICB7Cj4gLQlpZiAoKGZtdCA9PSBST1RfQ09OVFJPTF9GTVRfWUNC Q1I0MjBfMlApIHx8Cj4gLQkgICAgKGZtdCA9PSBST1RfQ09OVFJPTF9GTVRfUkdCODg4KSkKPiAt CQlyZXR1cm4gdHJ1ZTsKPiAtCj4gLQlyZXR1cm4gZmFsc2U7Cj4gLX0KPiAtCj4gLXN0YXRpYyBp bnQgcm90YXRvcl9zcmNfc2V0X3NpemUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc3dhcCwKPiAt CQlzdHJ1Y3QgZHJtX2V4eW5vc19wb3MgKnBvcywKPiAtCQlzdHJ1Y3QgZHJtX2V4eW5vc19zeiAq c3opCj4gLXsKPiAtCXN0cnVjdCByb3RfY29udGV4dCAqcm90ID0gZGV2X2dldF9kcnZkYXRhKGRl dik7Cj4gLQl1MzIgZm10LCBoc2l6ZSwgdnNpemU7Cj4gIAl1MzIgdmFsOwo+ICAKPiAtCS8qIEdl dCBmb3JtYXQgKi8KPiAtCWZtdCA9IHJvdGF0b3JfcmVnX2dldF9mbXQocm90KTsKPiAtCWlmICgh cm90YXRvcl9jaGVja19yZWdfZm10KGZtdCkpIHsKPiAtCQlEUk1fRVJST1IoImludmFsaWQgZm9y bWF0LlxuIik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JLyogQWxpZ24gYnVm ZmVyIHNpemUgKi8KPiAtCWhzaXplID0gc3otPmhzaXplOwo+IC0JdnNpemUgPSBzei0+dnNpemU7 Cj4gLQlyb3RhdG9yX2FsaWduX3NpemUocm90LCBmbXQsICZoc2l6ZSwgJnZzaXplKTsKPiAtCj4g IAkvKiBTZXQgYnVmZmVyIHNpemUgY29uZmlndXJhdGlvbiAqLwo+IC0JdmFsID0gUk9UX1NFVF9C VUZfU0laRV9IKHZzaXplKSB8IFJPVF9TRVRfQlVGX1NJWkVfVyhoc2l6ZSk7Cj4gKwl2YWwgPSBS T1RfU0VUX0JVRl9TSVpFX0goYnVmLT5idWYuaGVpZ2h0KSB8Cj4gKwkgICAgICBST1RfU0VUX0JV Rl9TSVpFX1coYnVmLT5idWYucGl0Y2hbMF0gLyBidWYtPmZvcm1hdC0+Y3BwWzBdKTsKPiAgCXJv dF93cml0ZSh2YWwsIFJPVF9TUkNfQlVGX1NJWkUpOwo+ICAKPiAgCS8qIFNldCBjcm9wIGltYWdl IHBvc2l0aW9uIGNvbmZpZ3VyYXRpb24gKi8KPiAtCXZhbCA9IFJPVF9DUk9QX1BPU19ZKHBvcy0+ eSkgfCBST1RfQ1JPUF9QT1NfWChwb3MtPngpOwo+ICsJdmFsID0gUk9UX0NST1BfUE9TX1koYnVm LT5yZWN0LnkpIHwgUk9UX0NST1BfUE9TX1goYnVmLT5yZWN0LngpOwo+ICAJcm90X3dyaXRlKHZh bCwgUk9UX1NSQ19DUk9QX1BPUyk7Cj4gLQl2YWwgPSBST1RfU1JDX0NST1BfU0laRV9IKHBvcy0+ aCkgfCBST1RfU1JDX0NST1BfU0laRV9XKHBvcy0+dyk7Cj4gKwl2YWwgPSBST1RfU1JDX0NST1Bf U0laRV9IKGJ1Zi0+cmVjdC5oKSB8Cj4gKwkgICAgICBST1RfU1JDX0NST1BfU0laRV9XKGJ1Zi0+ cmVjdC53KTsKPiAgCXJvdF93cml0ZSh2YWwsIFJPVF9TUkNfQ1JPUF9TSVpFKTsKPiAgCj4gLQly ZXR1cm4gMDsKPiAtfQo+IC0KPiAtc3RhdGljIGludCByb3RhdG9yX3NyY19zZXRfYWRkcihzdHJ1 Y3QgZGV2aWNlICpkZXYsCj4gLQkJc3RydWN0IGRybV9leHlub3NfaXBwX2J1Zl9pbmZvICpidWZf aW5mbywKPiAtCQl1MzIgYnVmX2lkLCBlbnVtIGRybV9leHlub3NfaXBwX2J1Zl90eXBlIGJ1Zl90 eXBlKQo+IC17Cj4gLQlzdHJ1Y3Qgcm90X2NvbnRleHQgKnJvdCA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOwo+IC0JZG1hX2FkZHJfdCBhZGRyW0VYWU5PU19EUk1fUExBTkFSX01BWF07Cj4gLQl1MzIg dmFsLCBmbXQsIGhzaXplLCB2c2l6ZTsKPiAtCWludCBpOwo+IC0KPiAtCS8qIFNldCBjdXJyZW50 IGJ1Zl9pZCAqLwo+IC0Jcm90LT5jdXJfYnVmX2lkW0VYWU5PU19EUk1fT1BTX1NSQ10gPSBidWZf aWQ7Cj4gLQo+IC0Jc3dpdGNoIChidWZfdHlwZSkgewo+IC0JY2FzZSBJUFBfQlVGX0VOUVVFVUU6 Cj4gLQkJLyogU2V0IGFkZHJlc3MgY29uZmlndXJhdGlvbiAqLwo+IC0JCWZvcl9lYWNoX2lwcF9w bGFuYXIoaSkKPiAtCQkJYWRkcltpXSA9IGJ1Zl9pbmZvLT5iYXNlW2ldOwo+IC0KPiAtCQkvKiBH ZXQgZm9ybWF0ICovCj4gLQkJZm10ID0gcm90YXRvcl9yZWdfZ2V0X2ZtdChyb3QpOwo+IC0JCWlm ICghcm90YXRvcl9jaGVja19yZWdfZm10KGZtdCkpIHsKPiAtCQkJRFJNX0VSUk9SKCJpbnZhbGlk IGZvcm1hdC5cbiIpOwo+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPiAtCQl9Cj4gLQo+IC0JCS8qIFJl LXNldCBjYiBwbGFuYXIgZm9yIE5WMTIgZm9ybWF0ICovCj4gLQkJaWYgKChmbXQgPT0gUk9UX0NP TlRST0xfRk1UX1lDQkNSNDIwXzJQKSAmJgo+IC0JCSAgICAhYWRkcltFWFlOT1NfRFJNX1BMQU5B Ul9DQl0pIHsKPiAtCj4gLQkJCXZhbCA9IHJvdF9yZWFkKFJPVF9TUkNfQlVGX1NJWkUpOwo+IC0J CQloc2l6ZSA9IFJPVF9HRVRfQlVGX1NJWkVfVyh2YWwpOwo+IC0JCQl2c2l6ZSA9IFJPVF9HRVRf QlVGX1NJWkVfSCh2YWwpOwo+IC0KPiAtCQkJLyogU2V0IGNiIHBsYW5hciAqLwo+IC0JCQlhZGRy W0VYWU5PU19EUk1fUExBTkFSX0NCXSA9Cj4gLQkJCQlhZGRyW0VYWU5PU19EUk1fUExBTkFSX1ld ICsgaHNpemUgKiB2c2l6ZTsKPiAtCQl9Cj4gLQo+IC0JCWZvcl9lYWNoX2lwcF9wbGFuYXIoaSkK PiAtCQkJcm90X3dyaXRlKGFkZHJbaV0sIFJPVF9TUkNfQlVGX0FERFIoaSkpOwo+IC0JCWJyZWFr Owo+IC0JY2FzZSBJUFBfQlVGX0RFUVVFVUU6Cj4gLQkJZm9yX2VhY2hfaXBwX3BsYW5hcihpKQo+ IC0JCQlyb3Rfd3JpdGUoMHgwLCBST1RfU1JDX0JVRl9BRERSKGkpKTsKPiAtCQlicmVhazsKPiAt CWRlZmF1bHQ6Cj4gLQkJLyogTm90aGluZyB0byBkbyAqLwo+IC0JCWJyZWFrOwo+IC0JfQo+ICsJ LyogU2V0IGJ1ZmZlciBETUEgYWRkcmVzcyAqLwo+ICsJcm90X3dyaXRlKGJ1Zi0+ZG1hX2FkZHJb MF0sIFJPVF9TUkNfQlVGX0FERFIoMCkpOwo+ICsJcm90X3dyaXRlKGJ1Zi0+ZG1hX2FkZHJbMV0s IFJPVF9TUkNfQlVGX0FERFIoMSkpOwo+ICAKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IC1zdGF0 aWMgaW50IHJvdGF0b3JfZHN0X3NldF90cmFuc2Yoc3RydWN0IGRldmljZSAqZGV2LAo+IC0JCWVu dW0gZHJtX2V4eW5vc19kZWdyZWUgZGVncmVlLAo+IC0JCWVudW0gZHJtX2V4eW5vc19mbGlwIGZs aXAsIGJvb2wgKnN3YXApCj4gK3N0YXRpYyBpbnQgcm90YXRvcl9kc3Rfc2V0X3RyYW5zZihzdHJ1 Y3Qgcm90X2NvbnRleHQgKnJvdCwKPiArCQkJCSAgdW5zaWduZWQgaW50IHJvdGF0aW9uKQoKZGl0 dG8uCgo+ICB7Cj4gLQlzdHJ1Y3Qgcm90X2NvbnRleHQgKnJvdCA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOwo+ICAJdTMyIHZhbDsKPiAgCj4gIAkvKiBTZXQgdHJhbnNmb3JtIGNvbmZpZ3VyYXRpb24g Ki8KPiAgCXZhbCA9IHJvdF9yZWFkKFJPVF9DT05UUk9MKTsKPiAgCXZhbCAmPSB+Uk9UX0NPTlRS T0xfRkxJUF9NQVNLOwo+ICAKPiAtCXN3aXRjaCAoZmxpcCkgewo+IC0JY2FzZSBFWFlOT1NfRFJN X0ZMSVBfVkVSVElDQUw6Cj4gLQkJdmFsIHw9IFJPVF9DT05UUk9MX0ZMSVBfVkVSVElDQUw7Cj4g LQkJYnJlYWs7Cj4gLQljYXNlIEVYWU5PU19EUk1fRkxJUF9IT1JJWk9OVEFMOgo+ICsJaWYgKHJv dGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9YKQo+ICAJCXZhbCB8PSBST1RfQ09OVFJPTF9GTElQ X0hPUklaT05UQUw7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCS8qIEZsaXAgTm9uZSAq Lwo+IC0JCWJyZWFrOwo+IC0JfQo+ICsJaWYgKHJvdGF0aW9uICYgRFJNX01PREVfUkVGTEVDVF9Z KQo+ICsJCXZhbCB8PSBST1RfQ09OVFJPTF9GTElQX1ZFUlRJQ0FMOwo+ICAKPiAgCXZhbCAmPSB+ Uk9UX0NPTlRST0xfUk9UX01BU0s7Cj4gIAo+IC0Jc3dpdGNoIChkZWdyZWUpIHsKPiAtCWNhc2Ug RVhZTk9TX0RSTV9ERUdSRUVfOTA6Cj4gKwlpZiAocm90YXRpb24gJiBEUk1fTU9ERV9ST1RBVEVf OTApCj4gIAkJdmFsIHw9IFJPVF9DT05UUk9MX1JPVF85MDsKPiAtCQlicmVhazsKPiAtCWNhc2Ug RVhZTk9TX0RSTV9ERUdSRUVfMTgwOgo+ICsJZWxzZSBpZiAocm90YXRpb24gJiBEUk1fTU9ERV9S T1RBVEVfMTgwKQo+ICAJCXZhbCB8PSBST1RfQ09OVFJPTF9ST1RfMTgwOwo+IC0JCWJyZWFrOwo+ IC0JY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV8yNzA6Cj4gKwllbHNlIGlmIChyb3RhdGlvbiAmIERS TV9NT0RFX1JPVEFURV8yNzApCj4gIAkJdmFsIHw9IFJPVF9DT05UUk9MX1JPVF8yNzA7Cj4gLQkJ YnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCS8qIFJvdGF0aW9uIDAgRGVncmVlICovCj4gLQkJYnJl YWs7Cj4gLQl9Cj4gIAo+ICAJcm90X3dyaXRlKHZhbCwgUk9UX0NPTlRST0wpOwo+ICAKPiAtCS8q IENoZWNrIGRlZ3JlZSBmb3Igc2V0dGluZyBidWZmZXIgc2l6ZSBzd2FwICovCj4gLQlpZiAoKGRl Z3JlZSA9PSBFWFlOT1NfRFJNX0RFR1JFRV85MCkgfHwKPiAtCSAgICAoZGVncmVlID09IEVYWU5P U19EUk1fREVHUkVFXzI3MCkpCj4gLQkJKnN3YXAgPSB0cnVlOwo+IC0JZWxzZQo+IC0JCSpzd2Fw ID0gZmFsc2U7Cj4gLQo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgcm90YXRv cl9kc3Rfc2V0X3NpemUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc3dhcCwKPiAtCQlzdHJ1Y3Qg ZHJtX2V4eW5vc19wb3MgKnBvcywKPiAtCQlzdHJ1Y3QgZHJtX2V4eW5vc19zeiAqc3opCj4gK3N0 YXRpYyBpbnQgcm90YXRvcl9kc3Rfc2V0X2J1ZihzdHJ1Y3Qgcm90X2NvbnRleHQgKnJvdCwKPiAr CQkJICAgICAgIHN0cnVjdCBleHlub3NfZHJtX2lwcF9idWZmZXIgKmJ1ZikKCmRpdHRvLgoKPiAg ewo+IC0Jc3RydWN0IHJvdF9jb250ZXh0ICpyb3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiAt CXUzMiB2YWwsIGZtdCwgaHNpemUsIHZzaXplOwo+IC0KPiAtCS8qIEdldCBmb3JtYXQgKi8KPiAt CWZtdCA9IHJvdGF0b3JfcmVnX2dldF9mbXQocm90KTsKPiAtCWlmICghcm90YXRvcl9jaGVja19y ZWdfZm10KGZtdCkpIHsKPiAtCQlEUk1fRVJST1IoImludmFsaWQgZm9ybWF0LlxuIik7Cj4gLQkJ cmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JLyogQWxpZ24gYnVmZmVyIHNpemUgKi8KPiAt CWhzaXplID0gc3otPmhzaXplOwo+IC0JdnNpemUgPSBzei0+dnNpemU7Cj4gLQlyb3RhdG9yX2Fs aWduX3NpemUocm90LCBmbXQsICZoc2l6ZSwgJnZzaXplKTsKPiArCXUzMiB2YWw7Cj4gIAo+ICAJ LyogU2V0IGJ1ZmZlciBzaXplIGNvbmZpZ3VyYXRpb24gKi8KPiAtCXZhbCA9IFJPVF9TRVRfQlVG X1NJWkVfSCh2c2l6ZSkgfCBST1RfU0VUX0JVRl9TSVpFX1coaHNpemUpOwo+ICsJdmFsID0gUk9U X1NFVF9CVUZfU0laRV9IKGJ1Zi0+YnVmLmhlaWdodCkgfAo+ICsJICAgICAgUk9UX1NFVF9CVUZf U0laRV9XKGJ1Zi0+YnVmLnBpdGNoWzBdIC8gYnVmLT5mb3JtYXQtPmNwcFswXSk7Cj4gIAlyb3Rf d3JpdGUodmFsLCBST1RfRFNUX0JVRl9TSVpFKTsKPiAgCj4gIAkvKiBTZXQgY3JvcCBpbWFnZSBw b3NpdGlvbiBjb25maWd1cmF0aW9uICovCj4gLQl2YWwgPSBST1RfQ1JPUF9QT1NfWShwb3MtPnkp IHwgUk9UX0NST1BfUE9TX1gocG9zLT54KTsKPiArCXZhbCA9IFJPVF9DUk9QX1BPU19ZKGJ1Zi0+ cmVjdC55KSB8IFJPVF9DUk9QX1BPU19YKGJ1Zi0+cmVjdC54KTsKPiAgCXJvdF93cml0ZSh2YWws IFJPVF9EU1RfQ1JPUF9QT1MpOwo+ICAKPiAtCXJldHVybiAwOwo+IC19Cj4gLQo+IC1zdGF0aWMg aW50IHJvdGF0b3JfZHN0X3NldF9hZGRyKHN0cnVjdCBkZXZpY2UgKmRldiwKPiAtCQlzdHJ1Y3Qg ZHJtX2V4eW5vc19pcHBfYnVmX2luZm8gKmJ1Zl9pbmZvLAo+IC0JCXUzMiBidWZfaWQsIGVudW0g ZHJtX2V4eW5vc19pcHBfYnVmX3R5cGUgYnVmX3R5cGUpCj4gLXsKPiAtCXN0cnVjdCByb3RfY29u dGV4dCAqcm90ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gLQlkbWFfYWRkcl90IGFkZHJbRVhZ Tk9TX0RSTV9QTEFOQVJfTUFYXTsKPiAtCXUzMiB2YWwsIGZtdCwgaHNpemUsIHZzaXplOwo+IC0J aW50IGk7Cj4gLQo+IC0JLyogU2V0IGN1cnJlbnQgYnVmX2lkICovCj4gLQlyb3QtPmN1cl9idWZf aWRbRVhZTk9TX0RSTV9PUFNfRFNUXSA9IGJ1Zl9pZDsKPiAtCj4gLQlzd2l0Y2ggKGJ1Zl90eXBl KSB7Cj4gLQljYXNlIElQUF9CVUZfRU5RVUVVRToKPiAtCQkvKiBTZXQgYWRkcmVzcyBjb25maWd1 cmF0aW9uICovCj4gLQkJZm9yX2VhY2hfaXBwX3BsYW5hcihpKQo+IC0JCQlhZGRyW2ldID0gYnVm X2luZm8tPmJhc2VbaV07Cj4gLQo+IC0JCS8qIEdldCBmb3JtYXQgKi8KPiAtCQlmbXQgPSByb3Rh dG9yX3JlZ19nZXRfZm10KHJvdCk7Cj4gLQkJaWYgKCFyb3RhdG9yX2NoZWNrX3JlZ19mbXQoZm10 KSkgewo+IC0JCQlEUk1fRVJST1IoImludmFsaWQgZm9ybWF0LlxuIik7Cj4gLQkJCXJldHVybiAt RUlOVkFMOwo+IC0JCX0KPiAtCj4gLQkJLyogUmUtc2V0IGNiIHBsYW5hciBmb3IgTlYxMiBmb3Jt YXQgKi8KPiAtCQlpZiAoKGZtdCA9PSBST1RfQ09OVFJPTF9GTVRfWUNCQ1I0MjBfMlApICYmCj4g LQkJICAgICFhZGRyW0VYWU5PU19EUk1fUExBTkFSX0NCXSkgewo+IC0JCQkvKiBHZXQgYnVmIHNp emUgKi8KPiAtCQkJdmFsID0gcm90X3JlYWQoUk9UX0RTVF9CVUZfU0laRSk7Cj4gLQo+IC0JCQlo c2l6ZSA9IFJPVF9HRVRfQlVGX1NJWkVfVyh2YWwpOwo+IC0JCQl2c2l6ZSA9IFJPVF9HRVRfQlVG X1NJWkVfSCh2YWwpOwo+IC0KPiAtCQkJLyogU2V0IGNiIHBsYW5hciAqLwo+IC0JCQlhZGRyW0VY WU5PU19EUk1fUExBTkFSX0NCXSA9Cj4gLQkJCQlhZGRyW0VYWU5PU19EUk1fUExBTkFSX1ldICsg aHNpemUgKiB2c2l6ZTsKPiAtCQl9Cj4gLQo+IC0JCWZvcl9lYWNoX2lwcF9wbGFuYXIoaSkKPiAt CQkJcm90X3dyaXRlKGFkZHJbaV0sIFJPVF9EU1RfQlVGX0FERFIoaSkpOwo+IC0JCWJyZWFrOwo+ IC0JY2FzZSBJUFBfQlVGX0RFUVVFVUU6Cj4gLQkJZm9yX2VhY2hfaXBwX3BsYW5hcihpKQo+IC0J CQlyb3Rfd3JpdGUoMHgwLCBST1RfRFNUX0JVRl9BRERSKGkpKTsKPiAtCQlicmVhazsKPiAtCWRl ZmF1bHQ6Cj4gLQkJLyogTm90aGluZyB0byBkbyAqLwo+IC0JCWJyZWFrOwo+IC0JfQo+ICsJLyog U2V0IGJ1ZmZlciBETUEgYWRkcmVzcyAqLwo+ICsJcm90X3dyaXRlKGJ1Zi0+ZG1hX2FkZHJbMF0s IFJPVF9EU1RfQlVGX0FERFIoMCkpOwo+ICsJcm90X3dyaXRlKGJ1Zi0+ZG1hX2FkZHJbMV0sIFJP VF9EU1RfQlVGX0FERFIoMSkpOwo+ICAKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+IC1zdGF0aWMg c3RydWN0IGV4eW5vc19kcm1faXBwX29wcyByb3Rfc3JjX29wcyA9IHsKPiAtCS5zZXRfZm10CT0J cm90YXRvcl9zcmNfc2V0X2ZtdCwKPiAtCS5zZXRfc2l6ZQk9CXJvdGF0b3Jfc3JjX3NldF9zaXpl LAo+IC0JLnNldF9hZGRyCT0Jcm90YXRvcl9zcmNfc2V0X2FkZHIsCj4gLX07Cj4gK3N0YXRpYyBp bnQgcm90YXRvcl9zdGFydChzdHJ1Y3Qgcm90X2NvbnRleHQgKnJvdCkKCmRpdHRvLgoKPiArewo+ ICsJdTMyIHZhbDsKPiAgCj4gLXN0YXRpYyBzdHJ1Y3QgZXh5bm9zX2RybV9pcHBfb3BzIHJvdF9k c3Rfb3BzID0gewo+IC0JLnNldF90cmFuc2YJPQlyb3RhdG9yX2RzdF9zZXRfdHJhbnNmLAo+IC0J LnNldF9zaXplCT0Jcm90YXRvcl9kc3Rfc2V0X3NpemUsCj4gLQkuc2V0X2FkZHIJPQlyb3RhdG9y X2RzdF9zZXRfYWRkciwKPiAtfTsKPiArCS8qIFNldCBpbnRlcnJ1cHQgZW5hYmxlICovCj4gKwly b3RhdG9yX3JlZ19zZXRfaXJxKHJvdCwgdHJ1ZSk7Cj4gIAo+IC1zdGF0aWMgaW50IHJvdGF0b3Jf aW5pdF9wcm9wX2xpc3Qoc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2ICppcHBkcnYpCj4gLXsKPiAt CXN0cnVjdCBkcm1fZXh5bm9zX2lwcF9wcm9wX2xpc3QgKnByb3BfbGlzdCA9ICZpcHBkcnYtPnBy b3BfbGlzdDsKPiAtCj4gLQlwcm9wX2xpc3QtPnZlcnNpb24gPSAxOwo+IC0JcHJvcF9saXN0LT5m bGlwID0gKDEgPDwgRVhZTk9TX0RSTV9GTElQX1ZFUlRJQ0FMKSB8Cj4gLQkJCQkoMSA8PCBFWFlO T1NfRFJNX0ZMSVBfSE9SSVpPTlRBTCk7Cj4gLQlwcm9wX2xpc3QtPmRlZ3JlZSA9ICgxIDw8IEVY WU5PU19EUk1fREVHUkVFXzApIHwKPiAtCQkJCSgxIDw8IEVYWU5PU19EUk1fREVHUkVFXzkwKSB8 Cj4gLQkJCQkoMSA8PCBFWFlOT1NfRFJNX0RFR1JFRV8xODApIHwKPiAtCQkJCSgxIDw8IEVYWU5P U19EUk1fREVHUkVFXzI3MCk7Cj4gLQlwcm9wX2xpc3QtPmNzYyA9IDA7Cj4gLQlwcm9wX2xpc3Qt PmNyb3AgPSAwOwo+IC0JcHJvcF9saXN0LT5zY2FsZSA9IDA7Cj4gKwl2YWwgPSByb3RfcmVhZChS T1RfQ09OVFJPTCk7Cj4gKwl2YWwgfD0gUk9UX0NPTlRST0xfU1RBUlQ7Cj4gKwlyb3Rfd3JpdGUo dmFsLCBST1RfQ09OVFJPTCk7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBp bmxpbmUgYm9vbCByb3RhdG9yX2NoZWNrX2RybV9mbXQodTMyIGZtdCkKPiArc3RhdGljIGludCBy b3RhdG9yX2NvbW1pdChzdHJ1Y3QgZXh5bm9zX2RybV9pcHAgKmlwcCwKPiArCQkJICBzdHJ1Y3Qg ZXh5bm9zX2RybV9pcHBfdGFzayAqdGFzaykKPiAgewo+IC0Jc3dpdGNoIChmbXQpIHsKPiAtCWNh c2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9OVjEyOgo+IC0JCXJl dHVybiB0cnVlOwo+IC0JZGVmYXVsdDoKPiAtCQlEUk1fREVCVUdfS01TKCJub3Qgc3VwcG9ydCBm b3JtYXRcbiIpOwo+IC0JCXJldHVybiBmYWxzZTsKPiAtCX0KPiAtfQo+ICsJc3RydWN0IHJvdF9j b250ZXh0ICpyb3QgPQo+ICsJCQljb250YWluZXJfb2YoaXBwLCBzdHJ1Y3Qgcm90X2NvbnRleHQs IGlwcCk7Cj4gIAo+IC1zdGF0aWMgaW5saW5lIGJvb2wgcm90YXRvcl9jaGVja19kcm1fZmxpcChl bnVtIGRybV9leHlub3NfZmxpcCBmbGlwKQo+IC17Cj4gLQlzd2l0Y2ggKGZsaXApIHsKPiAtCWNh c2UgRVhZTk9TX0RSTV9GTElQX05PTkU6Cj4gLQljYXNlIEVYWU5PU19EUk1fRkxJUF9WRVJUSUNB TDoKPiAtCWNhc2UgRVhZTk9TX0RSTV9GTElQX0hPUklaT05UQUw6Cj4gLQljYXNlIEVYWU5PU19E Uk1fRkxJUF9CT1RIOgo+IC0JCXJldHVybiB0cnVlOwo+IC0JZGVmYXVsdDoKPiAtCQlEUk1fREVC VUdfS01TKCJpbnZhbGlkIGZsaXBcbiIpOwo+IC0JCXJldHVybiBmYWxzZTsKPiAtCX0KPiAtfQo+ ICsJcG1fcnVudGltZV9nZXRfc3luYyhyb3QtPmRldik7Cj4gKwlyb3QtPnRhc2sgPSB0YXNrOwo+ ICAKPiAtc3RhdGljIGludCByb3RhdG9yX2lwcGRydl9jaGVja19wcm9wZXJ0eShzdHJ1Y3QgZGV2 aWNlICpkZXYsCj4gLQkJc3RydWN0IGRybV9leHlub3NfaXBwX3Byb3BlcnR5ICpwcm9wZXJ0eSkK PiAtewo+IC0Jc3RydWN0IGRybV9leHlub3NfaXBwX2NvbmZpZyAqc3JjX2NvbmZpZyA9Cj4gLQkJ CQkJJnByb3BlcnR5LT5jb25maWdbRVhZTk9TX0RSTV9PUFNfU1JDXTsKPiAtCXN0cnVjdCBkcm1f ZXh5bm9zX2lwcF9jb25maWcgKmRzdF9jb25maWcgPQo+IC0JCQkJCSZwcm9wZXJ0eS0+Y29uZmln W0VYWU5PU19EUk1fT1BTX0RTVF07Cj4gLQlzdHJ1Y3QgZHJtX2V4eW5vc19wb3MgKnNyY19wb3Mg PSAmc3JjX2NvbmZpZy0+cG9zOwo+IC0Jc3RydWN0IGRybV9leHlub3NfcG9zICpkc3RfcG9zID0g JmRzdF9jb25maWctPnBvczsKPiAtCXN0cnVjdCBkcm1fZXh5bm9zX3N6ICpzcmNfc3ogPSAmc3Jj X2NvbmZpZy0+c3o7Cj4gLQlzdHJ1Y3QgZHJtX2V4eW5vc19zeiAqZHN0X3N6ID0gJmRzdF9jb25m aWctPnN6Owo+IC0JYm9vbCBzd2FwID0gZmFsc2U7Cj4gLQo+IC0JLyogQ2hlY2sgZm9ybWF0IGNv bmZpZ3VyYXRpb24gKi8KPiAtCWlmIChzcmNfY29uZmlnLT5mbXQgIT0gZHN0X2NvbmZpZy0+Zm10 KSB7Cj4gLQkJRFJNX0RFQlVHX0tNUygibm90IHN1cHBvcnQgY3NjIGZlYXR1cmVcbiIpOwo+IC0J CXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCWlmICghcm90YXRvcl9jaGVja19kcm1fZm10 KGRzdF9jb25maWctPmZtdCkpIHsKPiAtCQlEUk1fREVCVUdfS01TKCJpbnZhbGlkIGZvcm1hdFxu Iik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JLyogQ2hlY2sgdHJhbnNmb3Jt IGNvbmZpZ3VyYXRpb24gKi8KPiAtCWlmIChzcmNfY29uZmlnLT5kZWdyZWUgIT0gRVhZTk9TX0RS TV9ERUdSRUVfMCkgewo+IC0JCURSTV9ERUJVR19LTVMoIm5vdCBzdXBwb3J0IHNvdXJjZS1zaWRl IHJvdGF0aW9uXG4iKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlzd2l0Y2gg KGRzdF9jb25maWctPmRlZ3JlZSkgewo+IC0JY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV85MDoKPiAt CWNhc2UgRVhZTk9TX0RSTV9ERUdSRUVfMjcwOgo+IC0JCXN3YXAgPSB0cnVlOwo+IC0JY2FzZSBF WFlOT1NfRFJNX0RFR1JFRV8wOgo+IC0JY2FzZSBFWFlOT1NfRFJNX0RFR1JFRV8xODA6Cj4gLQkJ LyogTm8gcHJvYmxlbSAqLwo+IC0JCWJyZWFrOwo+IC0JZGVmYXVsdDoKPiAtCQlEUk1fREVCVUdf S01TKCJpbnZhbGlkIGRlZ3JlZVxuIik7Cj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+ IC0JaWYgKHNyY19jb25maWctPmZsaXAgIT0gRVhZTk9TX0RSTV9GTElQX05PTkUpIHsKPiAtCQlE Uk1fREVCVUdfS01TKCJub3Qgc3VwcG9ydCBzb3VyY2Utc2lkZSBmbGlwXG4iKTsKPiAtCQlyZXR1 cm4gLUVJTlZBTDsKPiAtCX0KPiAtCj4gLQlpZiAoIXJvdGF0b3JfY2hlY2tfZHJtX2ZsaXAoZHN0 X2NvbmZpZy0+ZmxpcCkpIHsKPiAtCQlEUk1fREVCVUdfS01TKCJpbnZhbGlkIGZsaXBcbiIpOwo+ IC0JCXJldHVybiAtRUlOVkFMOwo+IC0JfQo+IC0KPiAtCS8qIENoZWNrIHNpemUgY29uZmlndXJh dGlvbiAqLwo+IC0JaWYgKChzcmNfcG9zLT54ICsgc3JjX3Bvcy0+dyA+IHNyY19zei0+aHNpemUp IHx8Cj4gLQkJKHNyY19wb3MtPnkgKyBzcmNfcG9zLT5oID4gc3JjX3N6LT52c2l6ZSkpIHsKPiAt CQlEUk1fREVCVUdfS01TKCJvdXQgb2Ygc291cmNlIGJ1ZmZlciBib3VuZFxuIik7Cj4gLQkJcmV0 dXJuIC1FSU5WQUw7Cj4gLQl9Cj4gLQo+IC0JaWYgKHN3YXApIHsKPiAtCQlpZiAoKGRzdF9wb3Mt PnggKyBkc3RfcG9zLT5oID4gZHN0X3N6LT52c2l6ZSkgfHwKPiAtCQkJKGRzdF9wb3MtPnkgKyBk c3RfcG9zLT53ID4gZHN0X3N6LT5oc2l6ZSkpIHsKPiAtCQkJRFJNX0RFQlVHX0tNUygib3V0IG9m IGRlc3RpbmF0aW9uIGJ1ZmZlciBib3VuZFxuIik7Cj4gLQkJCXJldHVybiAtRUlOVkFMOwo+IC0J CX0KPiAtCj4gLQkJaWYgKChzcmNfcG9zLT53ICE9IGRzdF9wb3MtPmgpIHx8IChzcmNfcG9zLT5o ICE9IGRzdF9wb3MtPncpKSB7Cj4gLQkJCURSTV9ERUJVR19LTVMoIm5vdCBzdXBwb3J0IHNjYWxl IGZlYXR1cmVcbiIpOwo+IC0JCQlyZXR1cm4gLUVJTlZBTDsKPiAtCQl9Cj4gLQl9IGVsc2Ugewo+ IC0JCWlmICgoZHN0X3Bvcy0+eCArIGRzdF9wb3MtPncgPiBkc3Rfc3otPmhzaXplKSB8fAo+IC0J CQkoZHN0X3Bvcy0+eSArIGRzdF9wb3MtPmggPiBkc3Rfc3otPnZzaXplKSkgewo+IC0JCQlEUk1f REVCVUdfS01TKCJvdXQgb2YgZGVzdGluYXRpb24gYnVmZmVyIGJvdW5kXG4iKTsKPiAtCQkJcmV0 dXJuIC1FSU5WQUw7Cj4gLQkJfQo+IC0KPiAtCQlpZiAoKHNyY19wb3MtPncgIT0gZHN0X3Bvcy0+ dykgfHwgKHNyY19wb3MtPmggIT0gZHN0X3Bvcy0+aCkpIHsKPiAtCQkJRFJNX0RFQlVHX0tNUygi bm90IHN1cHBvcnQgc2NhbGUgZmVhdHVyZVxuIik7Cj4gLQkJCXJldHVybiAtRUlOVkFMOwo+IC0J CX0KPiAtCX0KPiArCXJvdGF0b3Jfc3JjX3NldF9mbXQocm90LCB0YXNrLT5zcmMuYnVmLmZvdXJj Yyk7Cj4gKwlyb3RhdG9yX3NyY19zZXRfYnVmKHJvdCwgJnRhc2stPnNyYyk7Cj4gKwlyb3RhdG9y X2RzdF9zZXRfdHJhbnNmKHJvdCwgdGFzay0+dHJhbnNmb3JtLnJvdGF0aW9uKTsKPiArCXJvdGF0 b3JfZHN0X3NldF9idWYocm90LCAmdGFzay0+ZHN0KTsKPiArCXJvdGF0b3Jfc3RhcnQocm90KTsK PiAgCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGludCByb3RhdG9yX2lwcGRydl9z dGFydChzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gZHJtX2V4eW5vc19pcHBfY21kIGNtZCkKPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBleHlub3NfZHJtX2lwcF9mdW5jcyBpcHBfZnVuY3MgPSB7Cj4g KwkuY29tbWl0ID0gcm90YXRvcl9jb21taXQsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHJvdGF0 b3JfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3Rlciwgdm9pZCAq ZGF0YSkKPiAgewo+ICAJc3RydWN0IHJvdF9jb250ZXh0ICpyb3QgPSBkZXZfZ2V0X2RydmRhdGEo ZGV2KTsKPiAtCXUzMiB2YWw7Cj4gLQo+IC0JaWYgKHJvdC0+c3VzcGVuZGVkKSB7Cj4gLQkJRFJN X0VSUk9SKCJzdXNwZW5kZWQgc3RhdGVcbiIpOwo+IC0JCXJldHVybiAtRVBFUk07Cj4gLQl9Cj4g LQo+IC0JaWYgKGNtZCAhPSBJUFBfQ01EX00yTSkgewo+IC0JCURSTV9FUlJPUigibm90IHN1cHBv cnQgY21kOiAlZFxuIiwgY21kKTsKPiAtCQlyZXR1cm4gLUVJTlZBTDsKPiAtCX0KPiArCXN0cnVj dCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKPiArCXN0cnVjdCBleHlub3NfZHJtX2lwcCAq aXBwID0gJnJvdC0+aXBwOwo+ICAKPiAtCS8qIFNldCBpbnRlcnJ1cHQgZW5hYmxlICovCj4gLQly b3RhdG9yX3JlZ19zZXRfaXJxKHJvdCwgdHJ1ZSk7Cj4gKwlyb3QtPmRybV9kZXYgPSBkcm1fZGV2 Owo+ICsJZHJtX2lvbW11X2F0dGFjaF9kZXZpY2UoZHJtX2RldiwgZGV2KTsKPiAgCj4gLQl2YWwg PSByb3RfcmVhZChST1RfQ09OVFJPTCk7Cj4gLQl2YWwgfD0gUk9UX0NPTlRST0xfU1RBUlQ7Cj4g KwlleHlub3NfZHJtX2lwcF9yZWdpc3Rlcihkcm1fZGV2LCBpcHAsICZpcHBfZnVuY3MsCj4gKwkJ CSAgIERSTV9FWFlOT1NfSVBQX0NBUF9DUk9QIHwgRFJNX0VYWU5PU19JUFBfQ0FQX1JPVEFURSwK PiArCQkJICAgcm90LT5mb3JtYXRzLCAicm90YXRvciIpOwo+ICAKPiAtCXJvdF93cml0ZSh2YWws IFJPVF9DT05UUk9MKTsKPiArCWRldl9pbmZvKGRldiwgIlRoZSBleHlub3Mgcm90YXRvciBoYXMg YmVlbiBwcm9iZWQgc3VjY2Vzc2Z1bGx5XG4iKTsKPiAgCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAK PiAtc3RhdGljIHN0cnVjdCByb3RfbGltaXRfdGFibGUgcm90X2xpbWl0X3RibF80MjEwID0gewo+ IC0JLnljYmNyNDIwXzJwID0gewo+IC0JCS5taW5fdyA9IDMyLAo+IC0JCS5taW5faCA9IDMyLAo+ IC0JCS5tYXhfdyA9IFNaXzY0SywKPiAtCQkubWF4X2ggPSBTWl82NEssCj4gLQkJLmFsaWduID0g MywKPiAtCX0sCj4gLQkucmdiODg4ID0gewo+IC0JCS5taW5fdyA9IDgsCj4gLQkJLm1pbl9oID0g OCwKPiAtCQkubWF4X3cgPSBTWl8xNkssCj4gLQkJLm1heF9oID0gU1pfMTZLLAo+IC0JCS5hbGln biA9IDIsCj4gLQl9LAo+IC19Owo+ICtzdGF0aWMgdm9pZCByb3RhdG9yX3VuYmluZChzdHJ1Y3Qg ZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKm1hc3RlciwKPiArCQkJdm9pZCAqZGF0YSkKPiAr ewo+ICsJc3RydWN0IHJvdF9jb250ZXh0ICpyb3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiAr CXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGF0YTsKPiArCXN0cnVjdCBleHlub3NfZHJt X2lwcCAqaXBwID0gJnJvdC0+aXBwOwo+ICAKPiAtc3RhdGljIHN0cnVjdCByb3RfbGltaXRfdGFi bGUgcm90X2xpbWl0X3RibF80eDEyID0gewo+IC0JLnljYmNyNDIwXzJwID0gewo+IC0JCS5taW5f dyA9IDMyLAo+IC0JCS5taW5faCA9IDMyLAo+IC0JCS5tYXhfdyA9IFNaXzMySywKPiAtCQkubWF4 X2ggPSBTWl8zMkssCj4gLQkJLmFsaWduID0gMywKPiAtCX0sCj4gLQkucmdiODg4ID0gewo+IC0J CS5taW5fdyA9IDgsCj4gLQkJLm1pbl9oID0gOCwKPiAtCQkubWF4X3cgPSBTWl84SywKPiAtCQku bWF4X2ggPSBTWl84SywKPiAtCQkuYWxpZ24gPSAyLAo+IC0JfSwKPiAtfTsKPiArCWV4eW5vc19k cm1faXBwX3VucmVnaXN0ZXIoZHJtX2RldiwgaXBwKTsKPiArCWRybV9pb21tdV9kZXRhY2hfZGV2 aWNlKHJvdC0+ZHJtX2Rldiwgcm90LT5kZXYpOwo+ICt9Cj4gIAo+IC1zdGF0aWMgc3RydWN0IHJv dF9saW1pdF90YWJsZSByb3RfbGltaXRfdGJsXzUyNTAgPSB7Cj4gLQkueWNiY3I0MjBfMnAgPSB7 Cj4gLQkJLm1pbl93ID0gMzIsCj4gLQkJLm1pbl9oID0gMzIsCj4gLQkJLm1heF93ID0gU1pfMzJL LAo+IC0JCS5tYXhfaCA9IFNaXzMySywKPiAtCQkuYWxpZ24gPSAzLAo+IC0JfSwKPiAtCS5yZ2I4 ODggPSB7Cj4gLQkJLm1pbl93ID0gOCwKPiAtCQkubWluX2ggPSA4LAo+IC0JCS5tYXhfdyA9IFNa XzhLLAo+IC0JCS5tYXhfaCA9IFNaXzhLLAo+IC0JCS5hbGlnbiA9IDEsCj4gLQl9LAo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGNvbXBvbmVudF9vcHMgcm90YXRvcl9jb21wb25lbnRfb3BzID0gewo+ ICsJLmJpbmQJPSByb3RhdG9yX2JpbmQsCj4gKwkudW5iaW5kID0gcm90YXRvcl91bmJpbmQsCj4g IH07Cj4gIAo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBleHlub3Nfcm90YXRv cl9tYXRjaFtdID0gewo+IC0Jewo+IC0JCS5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIx MC1yb3RhdG9yIiwKPiAtCQkuZGF0YSA9ICZyb3RfbGltaXRfdGJsXzQyMTAsCj4gLQl9LAo+IC0J ewo+IC0JCS5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMi1yb3RhdG9yIiwKPiAtCQku ZGF0YSA9ICZyb3RfbGltaXRfdGJsXzR4MTIsCj4gLQl9LAo+IC0Jewo+IC0JCS5jb21wYXRpYmxl ID0gInNhbXN1bmcsZXh5bm9zNTI1MC1yb3RhdG9yIiwKPiAtCQkuZGF0YSA9ICZyb3RfbGltaXRf dGJsXzUyNTAsCj4gLQl9LAo+IC0Je30sCj4gLX07Cj4gLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2Ys IGV4eW5vc19yb3RhdG9yX21hdGNoKTsKPiAtCj4gIHN0YXRpYyBpbnQgcm90YXRvcl9wcm9iZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICB7Cj4gIAlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmcGRldi0+ZGV2Owo+ICsJc3RydWN0IHJlc291cmNlCSpyZWdzX3JlczsKPiAgCXN0cnVjdCBy b3RfY29udGV4dCAqcm90Owo+IC0Jc3RydWN0IGV4eW5vc19kcm1faXBwZHJ2ICppcHBkcnY7Cj4g KwlpbnQgaXJxOwo+ICAJaW50IHJldDsKPiAgCj4gLQlpZiAoIWRldi0+b2Zfbm9kZSkgewo+IC0J CWRldl9lcnIoZGV2LCAiY2Fubm90IGZpbmQgb2Zfbm9kZS5cbiIpOwo+IC0JCXJldHVybiAtRU5P REVWOwo+IC0JfQo+IC0KPiAgCXJvdCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcm90KSwg R0ZQX0tFUk5FTCk7Cj4gIAlpZiAoIXJvdCkKPiAgCQlyZXR1cm4gLUVOT01FTTsKPiAgCj4gLQly b3QtPmxpbWl0X3RibCA9IChzdHJ1Y3Qgcm90X2xpbWl0X3RhYmxlICopCj4gLQkJCQlvZl9kZXZp Y2VfZ2V0X21hdGNoX2RhdGEoZGV2KTsKPiAtCXJvdC0+cmVnc19yZXMgPSBwbGF0Zm9ybV9nZXRf cmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwo+IC0Jcm90LT5yZWdzID0gZGV2bV9p b3JlbWFwX3Jlc291cmNlKGRldiwgcm90LT5yZWdzX3Jlcyk7Cj4gKwlyb3QtPmZvcm1hdHMgPSBv Zl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTsKPiArCXJvdC0+ZGV2ID0gZGV2Owo+ICsJcmVn c19yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwo+ ICsJcm90LT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVnc19yZXMpOwo+ICAJ aWYgKElTX0VSUihyb3QtPnJlZ3MpKQo+ICAJCXJldHVybiBQVFJfRVJSKHJvdC0+cmVncyk7Cj4g IAo+IC0Jcm90LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwo+IC0JaWYgKHJvdC0+ aXJxIDwgMCkgewo+ICsJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKPiArCWlmIChp cnEgPCAwKSB7Cj4gIAkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGlycVxuIik7Cj4gLQkJ cmV0dXJuIHJvdC0+aXJxOwo+ICsJCXJldHVybiBpcnE7Cj4gIAl9Cj4gIAo+IC0JcmV0ID0gZGV2 bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIHJvdC0+aXJxLCBOVUxMLAo+IC0JCQlyb3RhdG9y X2lycV9oYW5kbGVyLCBJUlFGX09ORVNIT1QsICJkcm1fcm90YXRvciIsIHJvdCk7Cj4gKwlyZXQg PSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLCByb3RhdG9yX2lycV9oYW5kbGVyLCAwLCBkZXZf bmFtZShkZXYpLAo+ICsJCQkgICAgICAgcm90KTsKPiAgCWlmIChyZXQgPCAwKSB7Cj4gIAkJZGV2 X2VycihkZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBpcnFcbiIpOwo+ICAJCXJldHVybiByZXQ7Cj4g QEAgLTczNCwzNSArMzEzLDE5IEBAIHN0YXRpYyBpbnQgcm90YXRvcl9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQo+ICAJCXJldHVybiBQVFJfRVJSKHJvdC0+Y2xvY2spOwo+ICAJ fQo+ICAKPiArCXBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKGRldik7Cj4gKwlwbV9ydW50aW1l X3NldF9hdXRvc3VzcGVuZF9kZWxheShkZXYsIFJPVEFUT1JfQVVUT1NVU1BFTkRfREVMQVkpOwo+ ICAJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKPiAtCj4gLQlpcHBkcnYgPSAmcm90LT5pcHBkcnY7 Cj4gLQlpcHBkcnYtPmRldiA9IGRldjsKPiAtCWlwcGRydi0+b3BzW0VYWU5PU19EUk1fT1BTX1NS Q10gPSAmcm90X3NyY19vcHM7Cj4gLQlpcHBkcnYtPm9wc1tFWFlOT1NfRFJNX09QU19EU1RdID0g JnJvdF9kc3Rfb3BzOwo+IC0JaXBwZHJ2LT5jaGVja19wcm9wZXJ0eSA9IHJvdGF0b3JfaXBwZHJ2 X2NoZWNrX3Byb3BlcnR5Owo+IC0JaXBwZHJ2LT5zdGFydCA9IHJvdGF0b3JfaXBwZHJ2X3N0YXJ0 Owo+IC0JcmV0ID0gcm90YXRvcl9pbml0X3Byb3BfbGlzdChpcHBkcnYpOwo+IC0JaWYgKHJldCA8 IDApIHsKPiAtCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0IHByb3BlcnR5IGxpc3QuXG4i KTsKPiAtCQlnb3RvIGVycl9pcHBkcnZfcmVnaXN0ZXI7Cj4gLQl9Cj4gLQo+IC0JRFJNX0RFQlVH X0tNUygiaXBwZHJ2WyVwS11cbiIsIGlwcGRydik7Cj4gLQo+ICAJcGxhdGZvcm1fc2V0X2RydmRh dGEocGRldiwgcm90KTsKPiAgCj4gLQlyZXQgPSBleHlub3NfZHJtX2lwcGRydl9yZWdpc3Rlcihp cHBkcnYpOwo+IC0JaWYgKHJldCA8IDApIHsKPiAtCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBy ZWdpc3RlciBkcm0gcm90YXRvciBkZXZpY2VcbiIpOwo+IC0JCWdvdG8gZXJyX2lwcGRydl9yZWdp c3RlcjsKPiAtCX0KPiAtCj4gLQlkZXZfaW5mbyhkZXYsICJUaGUgZXh5bm9zIHJvdGF0b3IgaXMg cHJvYmVkIHN1Y2Nlc3NmdWxseVxuIik7Cj4gKwlyZXQgPSBjb21wb25lbnRfYWRkKGRldiwgJnJv dGF0b3JfY29tcG9uZW50X29wcyk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX2NvbXBvbmVu dDsKPiAgCj4gIAlyZXR1cm4gMDsKPiAgCj4gLWVycl9pcHBkcnZfcmVnaXN0ZXI6Cj4gK2Vycl9j b21wb25lbnQ6Cj4gKwlwbV9ydW50aW1lX2RvbnRfdXNlX2F1dG9zdXNwZW5kKGRldik7Cj4gIAlw bV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiBAQCAtNzcwLDQ1 ICszMzMsOTQgQEAgc3RhdGljIGludCByb3RhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCj4gIHN0YXRpYyBpbnQgcm90YXRvcl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikKPiAgewo+ICAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKPiAt CXN0cnVjdCByb3RfY29udGV4dCAqcm90ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gLQlzdHJ1 Y3QgZXh5bm9zX2RybV9pcHBkcnYgKmlwcGRydiA9ICZyb3QtPmlwcGRydjsKPiAtCj4gLQlleHlu b3NfZHJtX2lwcGRydl91bnJlZ2lzdGVyKGlwcGRydik7Cj4gIAo+ICsJY29tcG9uZW50X2RlbChk ZXYsICZyb3RhdG9yX2NvbXBvbmVudF9vcHMpOwo+ICsJcG1fcnVudGltZV9kb250X3VzZV9hdXRv c3VzcGVuZChkZXYpOwo+ICAJcG1fcnVudGltZV9kaXNhYmxlKGRldik7Cj4gIAo+ICAJcmV0dXJu IDA7Cj4gIH0KPiAgCj4gICNpZmRlZiBDT05GSUdfUE0KPiAtc3RhdGljIGludCByb3RhdG9yX2Ns a19jcnRsKHN0cnVjdCByb3RfY29udGV4dCAqcm90LCBib29sIGVuYWJsZSkKPiAtewo+IC0JaWYg KGVuYWJsZSkgewo+IC0JCWNsa19wcmVwYXJlX2VuYWJsZShyb3QtPmNsb2NrKTsKPiAtCQlyb3Qt PnN1c3BlbmRlZCA9IGZhbHNlOwo+IC0JfSBlbHNlIHsKPiAtCQljbGtfZGlzYWJsZV91bnByZXBh cmUocm90LT5jbG9jayk7Cj4gLQkJcm90LT5zdXNwZW5kZWQgPSB0cnVlOwo+IC0JfQo+IC0KPiAt CXJldHVybiAwOwo+IC19Cj4gLQo+ICBzdGF0aWMgaW50IHJvdGF0b3JfcnVudGltZV9zdXNwZW5k KHN0cnVjdCBkZXZpY2UgKmRldikKPiAgewo+ICAJc3RydWN0IHJvdF9jb250ZXh0ICpyb3QgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiAgCj4gLQlyZXR1cm4gIHJvdGF0b3JfY2xrX2NydGwocm90 LCBmYWxzZSk7Cj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUocm90LT5jbG9jayk7Cj4gKwlyZXR1 cm4gMDsKPiAgfQo+ICAKPiAgc3RhdGljIGludCByb3RhdG9yX3J1bnRpbWVfcmVzdW1lKHN0cnVj dCBkZXZpY2UgKmRldikKPiAgewo+ICAJc3RydWN0IHJvdF9jb250ZXh0ICpyb3QgPSBkZXZfZ2V0 X2RydmRhdGEoZGV2KTsKPiAgCj4gLQlyZXR1cm4gIHJvdGF0b3JfY2xrX2NydGwocm90LCB0cnVl KTsKPiArCXJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUocm90LT5jbG9jayk7Cj4gIH0KPiAgI2Vu ZGlmCj4gIAo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9leHlub3NfaXBwX2xpbWl0IHJvdGF0 b3JfNDIxMF9yYmc4ODhfbGltaXRzW10gPSB7Cj4gKwl7IElQUF9TSVpFX0xJTUlUKEJVRkZFUiwg LmggPSB7OCwgU1pfMTZLfSwgLnYgPSB7OCwgU1pfMTZLfSkgfSwKCkxlYXZlIGEgc3BhY2UgYnJh Y2UgYW5kIGNvbnN0YW50IHZhbHVlLCBhbmQgYmVsb3cgZGVjbGFyYXRpb25zIGFsc28uCgpUaGFu a3MsCklua2kgRGFlCgo+ICsJeyBJUFBfU0laRV9MSU1JVChBUkVBLCAuaC5hbGlnbiA9IDQsIC52 LmFsaWduID0gNCkgfSwKPiArCXsgfQo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fZXh5bm9zX2lwcF9saW1pdCByb3RhdG9yXzQ0MTJfcmJnODg4X2xpbWl0c1tdID0gewo+ICsJ eyBJUFBfU0laRV9MSU1JVChCVUZGRVIsIC5oID0gezgsIFNaXzhLfSwgLnYgPSB7OCwgU1pfOEt9 KSB9LAo+ICsJeyBJUFBfU0laRV9MSU1JVChBUkVBLCAuaC5hbGlnbiA9IDQsIC52LmFsaWduID0g NCkgfSwKPiArCXsgfQo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZXh5bm9z X2lwcF9saW1pdCByb3RhdG9yXzUyNTBfcmJnODg4X2xpbWl0c1tdID0gewo+ICsJeyBJUFBfU0la RV9MSU1JVChCVUZGRVIsIC5oID0gezgsIFNaXzhLfSwgLnYgPSB7OCwgU1pfOEt9KSB9LAo+ICsJ eyBJUFBfU0laRV9MSU1JVChBUkVBLCAuaC5hbGlnbiA9IDIsIC52LmFsaWduID0gMikgfSwKPiAr CXsgfQo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZXh5bm9zX2lwcF9saW1p dCByb3RhdG9yXzQyMTBfeXV2X2xpbWl0c1tdID0gewo+ICsJeyBJUFBfU0laRV9MSU1JVChCVUZG RVIsIC5oID0gezMyLCBTWl82NEt9LCAudiA9IHszMiwgU1pfNjRLfSkgfSwKPiArCXsgSVBQX1NJ WkVfTElNSVQoQVJFQSwgLmguYWxpZ24gPSA4LCAudi5hbGlnbiA9IDgpIH0sCj4gKwl7IH0KPiAr fTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2V4eW5vc19pcHBfbGltaXQgcm90YXRv cl80NDEyX3l1dl9saW1pdHNbXSA9IHsKPiArCXsgSVBQX1NJWkVfTElNSVQoQlVGRkVSLCAuaCA9 IHszMiwgU1pfMzJLfSwgLnYgPSB7MzIsIFNaXzMyS30pIH0sCj4gKwl7IElQUF9TSVpFX0xJTUlU KEFSRUEsIC5oLmFsaWduID0gOCwgLnYuYWxpZ24gPSA4KSB9LAo+ICsJeyB9Cj4gK307Cj4gKwo+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGV4eW5vc19kcm1faXBwX2Zvcm1hdHMgcm90YXRvcl80MjEw X2Zvcm1hdHNbXSA9IHsKPiArCXsgSVBQX1NSQ0RTVF9GT1JNQVQoWFJHQjg4ODgsIHJvdGF0b3Jf NDIxMF9yYmc4ODhfbGltaXRzKSB9LAo+ICsJeyBJUFBfU1JDRFNUX0ZPUk1BVChOVjEyLCByb3Rh dG9yXzQyMTBfeXV2X2xpbWl0cykgfSwKPiArCXsgfQo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBleHlub3NfZHJtX2lwcF9mb3JtYXRzIHJvdGF0b3JfNDQxMl9mb3JtYXRzW10gPSB7 Cj4gKwl7IElQUF9TUkNEU1RfRk9STUFUKFhSR0I4ODg4LCByb3RhdG9yXzQ0MTJfcmJnODg4X2xp bWl0cykgfSwKPiArCXsgSVBQX1NSQ0RTVF9GT1JNQVQoTlYxMiwgcm90YXRvcl80NDEyX3l1dl9s aW1pdHMpIH0sCj4gKwl7IH0KPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXh5bm9z X2RybV9pcHBfZm9ybWF0cyByb3RhdG9yXzUyNTBfZm9ybWF0c1tdID0gewo+ICsJeyBJUFBfU1JD RFNUX0ZPUk1BVChYUkdCODg4OCwgcm90YXRvcl81MjUwX3JiZzg4OF9saW1pdHMpIH0sCj4gKwl7 IElQUF9TUkNEU1RfRk9STUFUKE5WMTIsIHJvdGF0b3JfNDQxMl95dXZfbGltaXRzKSB9LAo+ICsJ eyB9Cj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBleHlub3Nf cm90YXRvcl9tYXRjaFtdID0gewo+ICsJewo+ICsJCS5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5 bm9zNDIxMC1yb3RhdG9yIiwKPiArCQkuZGF0YSA9IHJvdGF0b3JfNDIxMF9mb3JtYXRzLAo+ICsJ fSwgewo+ICsJCS5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDIxMi1yb3RhdG9yIiwKPiAr CQkuZGF0YSA9IHJvdGF0b3JfNDQxMl9mb3JtYXRzLAo+ICsJfSwgewo+ICsJCS5jb21wYXRpYmxl ID0gInNhbXN1bmcsZXh5bm9zNTI1MC1yb3RhdG9yIiwKPiArCQkuZGF0YSA9IHJvdGF0b3JfNTI1 MF9mb3JtYXRzLAo+ICsJfSwgewo+ICsJfSwKPiArfTsKPiArTU9EVUxFX0RFVklDRV9UQUJMRShv ZiwgZXh5bm9zX3JvdGF0b3JfbWF0Y2gpOwo+ICsKPiAgc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZf cG1fb3BzIHJvdGF0b3JfcG1fb3BzID0gewo+ICAJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMocG1f cnVudGltZV9mb3JjZV9zdXNwZW5kLAo+ICAJCQkJcG1fcnVudGltZV9mb3JjZV9yZXN1bWUpCj4g QEAgLTgyMCw3ICs0MzIsNyBAQCBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJvdGF0b3JfZHJpdmVy ID0gewo+ICAJLnByb2JlCQk9IHJvdGF0b3JfcHJvYmUsCj4gIAkucmVtb3ZlCQk9IHJvdGF0b3Jf cmVtb3ZlLAo+ICAJLmRyaXZlcgkJPSB7Cj4gLQkJLm5hbWUJPSAiZXh5bm9zLXJvdCIsCj4gKwkJ Lm5hbWUJPSAiZXh5bm9zLXJvdGF0b3IiLAo+ICAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAo+ICAJ CS5wbQk9ICZyb3RhdG9yX3BtX29wcywKPiAgCQkub2ZfbWF0Y2hfdGFibGUgPSBleHlub3Nfcm90 YXRvcl9tYXRjaCwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3Nf ZHJtX3JvdGF0b3IuaCBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9yb3RhdG9y LmgKPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCA3MWEwYjRjMGMxZTguLjAwMDAw MDAwMDAwMAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9yb3RhdG9y LmgKPiArKysgL2Rldi9udWxsCj4gQEAgLTEsMTkgKzAsMCBAQAo+IC0vKgo+IC0gKiBDb3B5cmln aHQgKGMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KPiAtICoKPiAtICogQXV0 aG9yczoKPiAtICoJWW91bmdKdW4gQ2hvIDx5ajQ0LmNob0BzYW1zdW5nLmNvbT4KPiAtICoJRXVu Y2h1bCBLaW0gPGNodWxzcHJvLmtpbUBzYW1zdW5nLmNvbT4KPiAtICoKPiAtICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9k aWZ5IGl0Cj4gLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQo+IC0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKPiAtICog b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiAtICovCj4gLQo+IC0jaWZuZGVmCV9FWFlOT1Nf RFJNX1JPVEFUT1JfSF8KPiAtI2RlZmluZQlfRVhZTk9TX0RSTV9ST1RBVE9SX0hfCj4gLQo+IC0v KiBUT0RPICovCj4gLQo+IC0jZW5kaWYKPiAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZHJpLWRldmVsCg==