From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liu Ying Subject: Re: [PATCH RFC v6 16/21] drm: panel: Add support for Himax HX8369A MIPI DSI panel Date: Mon, 29 Dec 2014 18:07:14 +0800 Message-ID: <54A127D2.7080904@freescale.com> References: <1419835168-9034-1-git-send-email-Ying.Liu@freescale.com> <1419835168-9034-17-git-send-email-Ying.Liu@freescale.com> <54A11A65.1040509@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <54A11A65.1040509@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Andrzej Hajda , dri-devel@lists.freedesktop.org Cc: stefan.wahren@i2se.com, devicetree@vger.kernel.org, linux@arm.linux.org.uk, kernel@pengutronix.de, linux-kernel@vger.kernel.org, mturquette@linaro.org, linux-arm-kernel@lists.infradead.org, andyshrk@gmail.com List-Id: devicetree@vger.kernel.org T24gMTIvMjkvMjAxNCAwNTowOSBQTSwgQW5kcnplaiBIYWpkYSB3cm90ZToKPiBPbiAxMi8yOS8y MDE0IDA3OjM5IEFNLCBMaXUgWWluZyB3cm90ZToKPj4gVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQg Zm9yIEhpbWF4IEhYODM2OUEgTUlQSSBEU0kgcGFuZWwuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IExp dSBZaW5nIDxZaW5nLkxpdUBmcmVlc2NhbGUuY29tPgo+PiAtLS0KPj4gdjUtPnY2Ogo+PiAgICog TWFrZSB0aGUgY2hlY2twYXRjaC5wbCBzY3JpcHQgYmUgaGFwcGllci4KPj4gICAqIERvIG5vdCBz ZXQgdGhlIGRzaSBjaGFubmVsIG51bWJlciB0byBiZSB6ZXJvIGluIHByb2JlKCksIGJlY2F1c2Ug dGhlIE1JUEkgRFNJCj4+ICAgICBidXMgZHJpdmVyIHdvdWxkIHNldCBpdC4KPj4KPj4gdjQtPnY1 Ogo+PiAgICogQWRkcmVzcyBBbmRyemVqIEhhamRhJ3MgY29tbWVudHMuCj4+ICAgKiBHZXQgdGhl IGJzLWdwaW9zIHByb3BlcnR5IGluc3RlYWQgb2YgdGhlIGJzWzM6MF0tZ3Bpb3MgcHJvcGVydGll cy4KPj4gICAqIEltcGxlbWVudCBlcnJvciBwcm9wYWdhdGlvbiBmb3IgcGFuZWwgcmVnaXN0ZXIg Y29uZmlndXJhdGlvbnMuCj4+ICAgKiBPdGhlciBtaW5vciBjaGFuZ2VzIHRvIGltcHJvdmUgdGhl IGNvZGUgcXVhbGl0eS4KPj4KPj4gdjMtPnY0Ogo+PiAgICogTW92ZSB0aGUgcmVsZXZhbnQgZHQt YmluZGluZ3MgdG8gYSBzZXBhcmF0ZSBwYXRjaCB0byBhZGRyZXNzIFN0ZWZhbgo+PiAgICAgV2Fo cmVuJ3MgY29tbWVudC4KPj4KPj4gdjItPnYzOgo+PiAgICogU29ydCB0aGUgaW5jbHVkZWQgaGVh ZGVyIGZpbGVzIGFscGhhYmV0aWNhbGx5Lgo+Pgo+PiB2MS0+djI6Cj4+ICAgKiBBZGRyZXNzIGFs bW9zdCBhbGwgY29tbWVudHMgZnJvbSBUaGllcnJ5IFJlZGluZy4KPj4gICAqIFJlbW92ZSBzZXZl cmFsIERUIHByb3BlcnRpZXMgYXMgdGhleSBjYW4gYmUgaW1wbGllZCBieSB0aGUgY29tcGF0aWJs ZSBzdHJpbmcuCj4+ICAgKiBBZGQgdGhlIEhJTUFYL2hpbWF4IHByZWZpeGVzIHRvIHRoZSBkcml2 ZXIncyBLY29uZmlnIG5hbWUgYW5kIGRyaXZlciBuYW1lLgo+PiAgICogTW92ZSB0aGUgZHJpdmVy J3MgTWFrZWZpbGUgZW50cnkgcGxhY2UgdG8gc29ydCB0aGUgZW50cmllcyBhbHBoYWJldGljYWxs eS4KPj4gICAqIFJldXNlIHNldmVyYWwgc3RhbmRhcmQgRENTIGZ1bmN0aW9ucyBpbnN0ZWFkIG9m IGludmVudGluZyB3aGVlbHMuCj4+ICAgKiBNb3ZlIHRoZSBwYW5lbCByZXNldHRpbmcgYW5kIHBv d2VyIGxvZ2ljcyB0byB0aGUgZHJpdmVyIHByb2JlL3JlbW92ZSBzdGFnZXMuCj4+ICAgICBUaGlz IG1heSBzaW1wbGlmeSBwYW5lbCBwcmVwYXJlL3VucHJlcGFyZSBob29rcy4gVGhlIHBvd2VyIGNv bnN1bXB0aW9uIHNob3VsZAo+PiAgICAgbm90IGNoYW5nZSBhIGxvdCBhdCBEUE1TIHNpbmNlIHRo ZSBwYW5lbCBlbnRlcnMgc2xlZXAgbW9kZSBhdCB0aGF0IHRpbWUuCj4+ICAgKiBBZGQgdGhlIG1v ZHVsZSBhdXRob3IuCj4+ICAgKiBPdGhlciBtaW5vciBjaGFuZ2VzLCBzdWNoIGFzIGNvZGluZyBz dHlsZSBpc3N1ZXMuCj4+Cj4+ICAgZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgICAgICAg ICAgICAgICB8ICAgNSArCj4+ICAgZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlICAgICAg ICAgICAgICB8ICAgMSArCj4+ICAgZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLWhpbWF4LWh4 ODM2OWEuYyB8IDYxNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+ICAgMyBmaWxlcyBj aGFuZ2VkLCA2MjAgaW5zZXJ0aW9ucygrKQo+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L2dwdS9kcm0vcGFuZWwvcGFuZWwtaGltYXgtaHg4MzY5YS5jCj4+Cj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29u ZmlnCj4+IGluZGV4IDAyNGU5OGUuLjgxYjBiZjAgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9wYW5lbC9LY29uZmlnCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmln Cj4+IEBAIC0xNiw2ICsxNiwxMSBAQCBjb25maWcgRFJNX1BBTkVMX1NJTVBMRQo+PiAgIAkgIHRo YXQgaXQgY2FuIGJlIGF1dG9tYXRpY2FsbHkgdHVybmVkIG9mZiB3aGVuIHRoZSBwYW5lbCBnb2Vz IGludG8gYQo+PiAgIAkgIGxvdyBwb3dlciBzdGF0ZS4KPj4KPj4gK2NvbmZpZyBEUk1fUEFORUxf SElNQVhfSFg4MzY5QQo+PiArCXRyaXN0YXRlICJIaW1heCBIWDgzNjlBIHBhbmVsIgo+PiArCWRl cGVuZHMgb24gT0YKPj4gKwlzZWxlY3QgRFJNX01JUElfRFNJCj4+ICsKPj4gICBjb25maWcgRFJN X1BBTkVMX0xEOTA0MAo+PiAgIAl0cmlzdGF0ZSAiTEQ5MDQwIFJHQi9TUEkgcGFuZWwiCj4+ICAg CWRlcGVuZHMgb24gT0YgJiYgU1BJCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFu ZWwvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKPj4gaW5kZXggNGIy YTA0My4uZDVkYmUwNiAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2Vm aWxlCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQo+PiBAQCAtMSw0ICsx LDUgQEAKPj4gICBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NJTVBMRSkgKz0gcGFuZWwtc2ltcGxl Lm8KPj4gK29iai0kKENPTkZJR19EUk1fUEFORUxfSElNQVhfSFg4MzY5QSkgKz0gcGFuZWwtaGlt YXgtaHg4MzY5YS5vCj4+ICAgb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9MRDkwNDApICs9IHBhbmVs LWxkOTA0MC5vCj4+ICAgb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TNkU4QUEwKSArPSBwYW5lbC1z NmU4YWEwLm8KPj4gICBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NIQVJQX0xRMTAxUjFTWDAxKSAr PSBwYW5lbC1zaGFycC1scTEwMXIxc3gwMS5vCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vcGFuZWwvcGFuZWwtaGltYXgtaHg4MzY5YS5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3Bh bmVsLWhpbWF4LWh4ODM2OWEuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAw MDAwLi5lZWUzNmE3Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3Bh bmVsL3BhbmVsLWhpbWF4LWh4ODM2OWEuYwo+PiBAQCAtMCwwICsxLDYxNCBAQAo+PiArLyoKPj4g KyAqIEhpbWF4IEhYODM2OUEgcGFuZWwgZHJpdmVyLgo+PiArICoKPj4gKyAqIENvcHlyaWdodCAo QykgMjAxMS0yMDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCj4+ICsgKgo+PiArICog VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKPj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4+ICsgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KPj4gKyAqCj4+ICsgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBv biBTYW1zdW5nIHM2ZThhYTAgcGFuZWwgZHJpdmVyLgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRl IDxkcm0vZHJtUC5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KPj4gKyNpbmNs dWRlIDxkcm0vZHJtX3BhbmVsLmg+Cj4+ICsKPj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1 bWVyLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4+ICsjaW5jbHVkZSA8bGlu dXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Cj4+ICsKPj4gKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rp c3BsYXkuaD4KPj4gKyNpbmNsdWRlIDx2aWRlby9vZl92aWRlb21vZGUuaD4KPj4gKyNpbmNsdWRl IDx2aWRlby92aWRlb21vZGUuaD4KPj4gKwo+PiArI2RlZmluZSBXUkRJU0JWCQkweDUxCj4+ICsj ZGVmaW5lIFdSQ1RSTEQJCTB4NTMKPj4gKyNkZWZpbmUgV1JDQUJDCQkweDU1Cj4+ICsjZGVmaW5l IFNFVFBPV0VSCTB4YjEKPj4gKyNkZWZpbmUgU0VURElTUAkJMHhiMgo+PiArI2RlZmluZSBTRVRD WUMJCTB4YjQKPj4gKyNkZWZpbmUgU0VUVkNPTQkJMHhiNgo+PiArI2RlZmluZSBTRVRFWFRDCQkw eGI5Cj4+ICsjZGVmaW5lIFNFVE1JUEkJCTB4YmEKPj4gKyNkZWZpbmUgU0VUUEFORUwJMHhjYwo+ PiArI2RlZmluZSBTRVRHSVAJCTB4ZDUKPj4gKyNkZWZpbmUgU0VUR0FNTUEJMHhlMAo+PiArCj4+ ICsjZGVmaW5lIEhYODM2OUFfTUlOX0JSSUdIVE5FU1MJMHgwMAo+PiArI2RlZmluZSBIWDgzNjlB X01BWF9CUklHSFRORVNTCTB4ZmYKPj4gKwo+PiArZW51bSBoeDgzNjlhX21wdV9pbnRlcmZhY2Ug ewo+PiArCUhYODM2OUFfREJJX1RZUEVfQV84QklULAo+PiArCUhYODM2OUFfREJJX1RZUEVfQV85 QklULAo+PiArCUhYODM2OUFfREJJX1RZUEVfQV8xNkJJVCwKPj4gKwlIWDgzNjlBX0RCSV9UWVBF X0FfMThCSVQsCj4+ICsJSFg4MzY5QV9EQklfVFlQRV9CXzhCSVQsCj4+ICsJSFg4MzY5QV9EQklf VFlQRV9CXzlCSVQsCj4+ICsJSFg4MzY5QV9EQklfVFlQRV9CXzE2QklULAo+PiArCUhYODM2OUFf REJJX1RZUEVfQl8xOEJJVCwKPj4gKwlIWDgzNjlBX0RTSV9DTURfTU9ERSwKPj4gKwlIWDgzNjlB X0RCSV9UWVBFX0JfMjRCSVQsCj4+ICsJSFg4MzY5QV9EU0lfVklERU9fTU9ERSwKPj4gKwlIWDgz NjlBX01EREksCj4+ICsJSFg4MzY5QV9EUElfREJJX1RZUEVfQ19PUFQxLAo+PiArCUhYODM2OUFf RFBJX0RCSV9UWVBFX0NfT1BUMiwKPj4gKwlIWDgzNjlBX0RQSV9EQklfVFlQRV9DX09QVDMKPj4g K307Cj4+ICsKPj4gK2VudW0gaHg4MzY5YV9yZXNvbHV0aW9uIHsKPj4gKwlIWDgzNjlBX1JFU180 ODBfODY0LAo+PiArCUhYODM2OUFfUkVTXzQ4MF84NTQsCj4+ICsJSFg4MzY5QV9SRVNfNDgwXzgw MCwKPj4gKwlIWDgzNjlBX1JFU180ODBfNjQwLAo+PiArCUhYODM2OUFfUkVTXzM2MF82NDAsCj4+ ICsJSFg4MzY5QV9SRVNfNDgwXzcyMCwKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBoeDgzNjlhX3Bh bmVsX2Rlc2Mgewo+PiArCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOwo+PiAr Cj4+ICsJLyogbXMgKi8KPj4gKwl1bnNpZ25lZCBpbnQgcG93ZXJfb25fZGVsYXk7Cj4+ICsJdW5z aWduZWQgaW50IHJlc2V0X2RlbGF5Owo+PiArCj4+ICsJdW5zaWduZWQgaW50IGRzaV9sYW5lczsK Pj4gK307Cj4+ICsKPj4gK3N0cnVjdCBoeDgzNjlhIHsKPj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7 Cj4+ICsJc3RydWN0IGRybV9wYW5lbCBwYW5lbDsKPj4gKwo+PiArCWNvbnN0IHN0cnVjdCBoeDgz NjlhX3BhbmVsX2Rlc2MgKnBkOwo+PiArCj4+ICsJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEg c3VwcGxpZXNbNV07Cj4+ICsJc3RydWN0IGdwaW9fZGVzYyAqcmVzZXRfZ3BpbzsKPj4gKwlzdHJ1 Y3QgZ3Bpb19kZXNjICpic19ncGlvWzRdOwo+PiArCXU4IHJlc19zZWw7Cj4+ICt9Owo+PiArCj4+ ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBoeDgzNjlhICpwYW5lbF90b19oeDgzNjlhKHN0cnVjdCBk cm1fcGFuZWwgKnBhbmVsKQo+PiArewo+PiArCXJldHVybiBjb250YWluZXJfb2YocGFuZWwsIHN0 cnVjdCBoeDgzNjlhLCBwYW5lbCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgaHg4MzY5YV9k Y3Nfd3JpdGUoc3RydWN0IGh4ODM2OWEgKmN0eCwgY29uc3QgY2hhciAqZnVuYywKPj4gKwkJCSAg ICAgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKPj4gK3sKPj4gKwlzdHJ1Y3QgbWlwaV9k c2lfZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYpOwo+PiArCXNzaXpl X3QgcmV0Owo+PiArCj4+ICsJcmV0ID0gbWlwaV9kc2lfZGNzX3dyaXRlX2J1ZmZlcihkc2ksIGRh dGEsIGxlbik7Cj4+ICsJaWYgKHJldCA8IDApIHsKPj4gKwkJZGV2X2VycihjdHgtPmRldiwgIiVz IGZhaWxlZDogJWRcbiIsIGZ1bmMsIHJldCk7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+PiAr CXJldHVybiAwOwo+Cj4gTml0cGljay4gWW91IGNhbiByZXBsYWNlIDQgbGluZXMgYWJvdmUgd2l0 aDoKPiAgICAgIGlmIChyZXQgPCAwKQo+ICAgICAgICAgIGRldl9lcnIoY3R4LT5kZXYsICIlcyBm YWlsZWQ6ICVkXG4iLCBmdW5jLCByZXQpOwo+ICAgICAgcmV0dXJuIHJldDsKCkknbGwgZG8gdGhh dC4KCj4KPj4gK30KPj4gKwo+PiArI2RlZmluZSBoeDgzNjlhX2Rjc193cml0ZV9zZXEoY3R4LCBz ZXEuLi4pIFwKPj4gKyh7IFwKPj4gKwljb25zdCB1OCBkW10gPSB7IHNlcSB9OyBcCj4+ICsJQlVJ TERfQlVHX09OX01TRyhBUlJBWV9TSVpFKGQpID4gNjQsIFwKPj4gKwkJCSAiRENTIHNlcXVlbmNl IHRvbyBiaWcgZm9yIHN0YWNrIik7IFwKPj4gKwloeDgzNjlhX2Rjc193cml0ZShjdHgsIF9fZnVu Y19fLCBkLCBBUlJBWV9TSVpFKGQpKTsgXAo+PiArfSkKPj4gKwo+PiArI2RlZmluZSBoeDgzNjlh X2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgc2VxLi4uKSBcCj4+ICsoeyBcCj4+ICsJc3RhdGlj IGNvbnN0IHU4IGRbXSA9IHsgc2VxIH07IFwKPj4gKwloeDgzNjlhX2Rjc193cml0ZShjdHgsIF9f ZnVuY19fLCBkLCBBUlJBWV9TSVpFKGQpKTsgXAo+PiArfSkKPj4gKwo+PiArc3RhdGljIGludCBo eDgzNjlhX2RzaV9zZXRfZGlzcGxheV9yZWxhdGVkX3JlZ2lzdGVyKHN0cnVjdCBoeDgzNjlhICpj dHgpCj4+ICt7Cj4+ICsJdTggc2VjX3AgPSAoY3R4LT5yZXNfc2VsIDw8IDQpIHwgMHgwMzsKPj4g Kwo+PiArCXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9zZXEoY3R4LCBTRVRESVNQLCAweDAwLCBz ZWNfcCwgMHgwMywKPj4gKwkJCSAgIDB4MDMsIDB4NzAsIDB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAs IDB4MDAsCj4+ICsJCQkgICAweDAwLCAweDAzLCAweDAzLCAweDAwLCAweDAxKTsKPj4gK30KPj4g Kwo+PiArc3RhdGljIGludCBoeDgzNjlhX2RzaV9zZXRfZGlzcGxheV93YXZlZm9ybV9jeWNsZShz dHJ1Y3QgaHg4MzY5YSAqY3R4KQo+PiArewo+PiArCXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9z ZXFfc3RhdGljKGN0eCwgU0VUQ1lDLCAweDAwLCAweDFkLAo+PiArCQkJCQkweDVmLCAweDBlLCAw eDA2KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBoeDgzNjlhX2RzaV9zZXRfZ2lwKHN0cnVj dCBoeDgzNjlhICpjdHgpCj4+ICt7Cj4+ICsJcmV0dXJuIGh4ODM2OWFfZGNzX3dyaXRlX3NlcV9z dGF0aWMoY3R4LCBTRVRHSVAsIDB4MDAsIDB4MDQsCj4+ICsJCQkJIDB4MDMsIDB4MDAsIDB4MDEs IDB4MDUsIDB4MWMsIDB4NzAsCj4+ICsJCQkJIDB4MDEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4NDAs IDB4MDYsCj4+ICsJCQkJIDB4NTEsIDB4MDcsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MDYsCj4+ICsJ CQkJIDB4NTAsIDB4MDcsIDB4MDcsIDB4MGYsIDB4MDQpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGh4ODM2OWFfZHNpX3NldF9wb3dlcihzdHJ1Y3QgaHg4MzY5YSAqY3R4KQo+PiArewo+PiAr CXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgU0VUUE9XRVIsIDB4MDEs IDB4MDAsCj4+ICsJCQkJICAgMHgzNCwgMHgwNiwgMHgwMCwgMHgwZiwgMHgwZiwgMHgyYSwKPj4g KwkJCQkgICAweDMyLCAweDNmLCAweDNmLCAweDA3LCAweDNhLCAweDAxLAo+PiArCQkJCSAgIDB4 ZTYsIDB4ZTYsIDB4ZTYsIDB4ZTYsIDB4ZTYpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGh4 ODM2OWFfZHNpX3NldF92Y29tX3ZvbHRhZ2Uoc3RydWN0IGh4ODM2OWEgKmN0eCkKPj4gK3sKPj4g KwlyZXR1cm4gaHg4MzY5YV9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhjdHgsIFNFVFZDT00sIDB4NTYs IDB4NTYpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3NldF9wYW5lbChz dHJ1Y3QgaHg4MzY5YSAqY3R4KQo+PiArewo+PiArCXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9z ZXFfc3RhdGljKGN0eCwgU0VUUEFORUwsIDB4MDIpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGh4ODM2OWFfZHNpX3NldF9nYW1tYV9jdXJ2ZShzdHJ1Y3QgaHg4MzY5YSAqY3R4KQo+PiArewo+ PiArCXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0eCwgU0VUR0FNTUEsIDB4 MDAsIDB4MWQsCj4+ICsJCQkJICAgMHgyMiwgMHgzOCwgMHgzZCwgMHgzZiwgMHgyZSwgMHg0YSwK Pj4gKwkJCQkgICAweDA2LCAweDBkLCAweDBmLCAweDEzLCAweDE1LCAweDEzLAo+PiArCQkJCSAg IDB4MTYsIDB4MTAsIDB4MTksIDB4MDAsIDB4MWQsIDB4MjIsCj4+ICsJCQkJICAgMHgzOCwgMHgz ZCwgMHgzZiwgMHgyZSwgMHg0YSwgMHgwNiwKPj4gKwkJCQkgICAweDBkLCAweDBmLCAweDEzLCAw eDE1LCAweDEzLCAweDE2LAo+PiArCQkJCSAgIDB4MTAsIDB4MTkpOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IGh4ODM2OWFfZHNpX3NldF9taXBpKHN0cnVjdCBoeDgzNjlhICpjdHgpCj4+ICt7 Cj4+ICsJdTggZWxldmVudGhfcCA9IGN0eC0+cGQtPmRzaV9sYW5lcyA9PSAyID8gMHgxMSA6IDB4 MTA7Cj4+ICsKPj4gKwlyZXR1cm4gaHg4MzY5YV9kY3Nfd3JpdGVfc2VxKGN0eCwgU0VUTUlQSSwg MHgwMCwgMHhhMCwgMHhjNiwKPj4gKwkJCQkgMHgwMCwgMHgwYSwgMHgwMCwgMHgxMCwgMHgzMCwg MHg2ZiwKPj4gKwkJCQkgMHgwMiwgZWxldmVudGhfcCwgMHgxOCwgMHg0MCk7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lfc2V0X2ludGVyZmFjZV9waXhlbF9mb21hdChzdHJ1 Y3QgaHg4MzY5YSAqY3R4KQo+PiArewo+PiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSA9 IHRvX21pcGlfZHNpX2RldmljZShjdHgtPmRldik7Cj4+ICsJdTggZm9ybWF0Owo+PiArCWludCBy ZXQ7Cj4+ICsKPj4gKwlzd2l0Y2ggKGRzaS0+Zm9ybWF0KSB7Cj4+ICsJY2FzZSBNSVBJX0RTSV9G TVRfUkdCODg4Ogo+PiArCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2NjoKPj4gKwkJZm9ybWF0ID0g MHg3NzsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSBNSVBJX0RTSV9GTVRfUkdCNTY1Ogo+PiArCQlm b3JtYXQgPSAweDU1Owo+PiArCQlicmVhazsKPj4gKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjZf UEFDS0VEOgo+PiArCQlmb3JtYXQgPSAweDY2Owo+PiArCQlicmVhazsKPj4gKwlkZWZhdWx0Ogo+ PiArCQlkZXZfZXJyKGN0eC0+ZGV2LCAidW5zdXBwb3J0ZWQgRFNJIHBpeGVsIGZvcm1hdFxuIik7 Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCXJldCA9IG1pcGlfZHNpX2Rj c19zZXRfcGl4ZWxfZm9ybWF0KGRzaSwgZm9ybWF0KTsKPj4gKwlpZiAocmV0IDwgMCkKPj4gKwkJ ZGV2X2VycihjdHgtPmRldiwgIiVzIGZhaWxlZDogJWRcbiIsIF9fZnVuY19fLCByZXQpOwo+PiAr CXJldHVybiByZXQ7Cj4+ICt9Cj4KPiBUaGlzIGZ1bmN0aW9ucyBjb3VsZCBiZSBhbHNvIERTSSBo ZWxwZXIsIGl0IGlzIG5vdCBzcGVjaWZpYyB0byB0aGlzIHBhbmVsLAo+IGJ1dCBpdCBpcyBqdXN0 IGEgc3VnZ2VzdGlvbi4KCkFueSBkb2N1bWVudGF0aW9uIGNhbiByZWZsZWN0IHRoaXMgY291bGQg YmUgYSBjb21tb24gRFNJIGhlbHBlciwKbWF5YmUgdGhlIE1JUEkgRFNJIHNwZWM/Ckkgd3JvdGUg dGhpcyBmdW5jdGlvbiBieSB0YWtpbmcgdGhlIEhYODM2OUEgcGFuZWwgZGF0YSBzaGVldCBhcyBh CnJlZmVyZW5jZS4KCj4KPj4gKwo+PiArc3RhdGljIGludCBoeDgzNjlhX2RzaV9zZXRfY29sdW1u X2FkZHJlc3Moc3RydWN0IGh4ODM2OWEgKmN0eCkKPj4gK3sKPj4gKwlzdHJ1Y3QgbWlwaV9kc2lf ZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYpOwo+PiArCWNvbnN0IHN0 cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlID0gY3R4LT5wZC0+bW9kZTsKPj4gKwlpbnQgcmV0 Owo+PiArCj4+ICsJcmV0ID0gbWlwaV9kc2lfZGNzX3NldF9jb2x1bW5fYWRkcmVzcyhkc2ksIDAs IG1vZGUtPmhkaXNwbGF5IC0gMSk7Cj4+ICsJaWYgKHJldCA8IDApCj4+ICsJCWRldl9lcnIoY3R4 LT5kZXYsICIlcyBmYWlsZWQ6ICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKPj4gKwlyZXR1cm4gcmV0 Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3NldF9wYWdlX2FkZHJlc3Mo c3RydWN0IGh4ODM2OWEgKmN0eCkKPj4gK3sKPj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpk c2kgPSB0b19taXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYpOwo+PiArCWNvbnN0IHN0cnVjdCBkcm1f ZGlzcGxheV9tb2RlICptb2RlID0gY3R4LT5wZC0+bW9kZTsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ ICsJcmV0ID0gbWlwaV9kc2lfZGNzX3NldF9wYWdlX2FkZHJlc3MoZHNpLCAwLCBtb2RlLT52ZGlz cGxheSAtIDEpOwo+PiArCWlmIChyZXQgPCAwKQo+PiArCQlkZXZfZXJyKGN0eC0+ZGV2LCAiJXMg ZmFpbGVkOiAlZFxuIiwgX19mdW5jX18sIHJldCk7Cj4+ICsJcmV0dXJuIHJldDsKPj4gK30KPj4g Kwo+PiArc3RhdGljIGludCBoeDgzNjlhX2RzaV93cml0ZV9kaXNwbGF5X2JyaWdodG5lc3Moc3Ry dWN0IGh4ODM2OWEgKmN0eCwKPj4gKwkJCQkJCXU4IGJyaWdodG5lc3MpCj4+ICt7Cj4+ICsJcmV0 dXJuIGh4ODM2OWFfZGNzX3dyaXRlX3NlcShjdHgsIFdSRElTQlYsIGJyaWdodG5lc3MpOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW50IGh4ODM2OWFfZHNpX3dyaXRlX2NhYmMoc3RydWN0IGh4ODM2 OWEgKmN0eCkKPj4gK3sKPj4gKwlyZXR1cm4gaHg4MzY5YV9kY3Nfd3JpdGVfc2VxX3N0YXRpYyhj dHgsIFdSQ0FCQywgMHgwMSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgaHg4MzY5YV9kc2lf d3JpdGVfY29udHJvbF9kaXNwbGF5KHN0cnVjdCBoeDgzNjlhICpjdHgpCj4+ICt7Cj4+ICsJcmV0 dXJuIGh4ODM2OWFfZGNzX3dyaXRlX3NlcV9zdGF0aWMoY3R4LCBXUkNUUkxELCAweDI0KTsKPj4g K30KPj4gKwo+PiArI2RlZmluZSBoeDgzNjlhX2RzaV9pbml0X2hlbHBlcihjdHgsIHJldCwgbmFt ZSkgXAo+PiArKHsgXAo+PiArCXJldCA9IGh4ODM2OWFfZHNpXyMjbmFtZShjdHgpOyBcCj4+ICsJ aWYgKHJldCA8IDApIFwKPj4gKwkJcmV0dXJuIHJldDsgXAo+PiArfSkKPgo+IFllYWgsIGFub3Ro ZXIgaGFjayB0byBnZXQgcmlkIG9mIHJlZHVuZGFudCBjb2RlIDopCj4gVHdvIHVnbHkgdGhpbmdz IGhlcmU6ICMjIGFuZCByZXR1cm4gZnJvbSBtYWNyby4KPgo+PiArCj4+ICtzdGF0aWMgaW50IGh4 ODM2OWFfZHNpX3BhbmVsX2luaXQoc3RydWN0IGh4ODM2OWEgKmN0eCkKPj4gK3sKPj4gKwlpbnQg cmV0Owo+PiArCj4+ICsJaHg4MzY5YV9kc2lfaW5pdF9oZWxwZXIoY3R4LCByZXQsIHNldF9kaXNw bGF5X3JlbGF0ZWRfcmVnaXN0ZXIpOwo+PiArCWh4ODM2OWFfZHNpX2luaXRfaGVscGVyKGN0eCwg cmV0LCBzZXRfZGlzcGxheV93YXZlZm9ybV9jeWNsZSk7Cj4+ICsJaHg4MzY5YV9kc2lfaW5pdF9o ZWxwZXIoY3R4LCByZXQsIHNldF9naXApOwo+PiArCWh4ODM2OWFfZHNpX2luaXRfaGVscGVyKGN0 eCwgcmV0LCBzZXRfcG93ZXIpOwo+PiArCWh4ODM2OWFfZHNpX2luaXRfaGVscGVyKGN0eCwgcmV0 LCBzZXRfdmNvbV92b2x0YWdlKTsKPj4gKwloeDgzNjlhX2RzaV9pbml0X2hlbHBlcihjdHgsIHJl dCwgc2V0X3BhbmVsKTsKPj4gKwloeDgzNjlhX2RzaV9pbml0X2hlbHBlcihjdHgsIHJldCwgc2V0 X2dhbW1hX2N1cnZlKTsKPj4gKwloeDgzNjlhX2RzaV9pbml0X2hlbHBlcihjdHgsIHJldCwgc2V0 X21pcGkpOwo+PiArCWh4ODM2OWFfZHNpX2luaXRfaGVscGVyKGN0eCwgcmV0LCBzZXRfaW50ZXJm YWNlX3BpeGVsX2ZvbWF0KTsKPj4gKwloeDgzNjlhX2RzaV9pbml0X2hlbHBlcihjdHgsIHJldCwg c2V0X2NvbHVtbl9hZGRyZXNzKTsKPj4gKwloeDgzNjlhX2RzaV9pbml0X2hlbHBlcihjdHgsIHJl dCwgc2V0X3BhZ2VfYWRkcmVzcyk7Cj4+ICsJaHg4MzY5YV9kc2lfaW5pdF9oZWxwZXIoY3R4LCBy ZXQsIHdyaXRlX2NhYmMpOwo+PiArCWh4ODM2OWFfZHNpX2luaXRfaGVscGVyKGN0eCwgcmV0LCB3 cml0ZV9jb250cm9sX2Rpc3BsYXkpOwo+Cj4gTWF5YmUgaXQgd291bGQgYmUgYmV0dGVyIHRvIHJl cGxhY2UgdGhlIGhhY2sgYWJvdmUgd2l0aCBzb21ldGhpbmcgbGlrZToKPiB7Cj4gICAgICBpbnQg KCopKHN0cnVjdCBoeDgzNjlhICpjdHgpIGZ1bmNzW10gPSB7Cj4gICAgICAgICAgaHg4MzY5YV9k c2lfc2V0X2Rpc3BsYXlfcmVsYXRlZF9yZWdpc3RlciwKPiAgICAgICAgICBoeDgzNjlhX2RzaV9z ZXRfZGlzcGxheV93YXZlZm9ybV9jeWNsZSwKPiAgICAgICAgICAuLi4KPiAgICAgICB9Owo+ICAg ICAgaW50IHJldCwgaTsKPgo+ICAgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZnVuY3Mp OyArK2kpIHsKPiAgICAgICAgICByZXQgPSBmdW5jc1tpXShjdHgpOwo+ICAgICAgICAgIGlmIChy ZXQpCj4gICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gICAgICB9CgpJJ2xsIGNoYW5nZSB0byB1 c2UgdGhpcy4gIFRoYW5rcy4KCj4KPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IGh4ODM2OWFfZHNpX3NldF9leHRlbnNpb25fY29tbWFuZChzdHJ1Y3QgaHg4MzY5 YSAqY3R4KQo+PiArewo+PiArCXJldHVybiBoeDgzNjlhX2Rjc193cml0ZV9zZXFfc3RhdGljKGN0 eCwgU0VURVhUQywgMHhmZiwgMHg4MywgMHg2OSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQg aHg4MzY5YV9kc2lfc2V0X21heGltdW1fcmV0dXJuX3BhY2tldF9zaXplKHN0cnVjdCBoeDgzNjlh ICpjdHgsCj4+ICsJCQkJCQkgICAgICB1MTYgc2l6ZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgbWlwaV9k c2lfZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9kZXZpY2UoY3R4LT5kZXYpOwo+PiArCWludCBy ZXQ7Cj4+ICsKPj4gKwlyZXQgPSBtaXBpX2RzaV9zZXRfbWF4aW11bV9yZXR1cm5fcGFja2V0X3Np emUoZHNpLCBzaXplKTsKPj4gKwlpZiAocmV0IDwgMCkKPj4gKwkJZGV2X2VycihjdHgtPmRldiwK Pj4gKwkJCSJlcnJvciAlZCBzZXR0aW5nIG1heGltdW0gcmV0dXJuIHBhY2tldCBzaXplIHRvICVk XG4iLAo+PiArCQkJcmV0LCBzaXplKTsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IGh4ODM2OWFfZHNpX3NldF9zZXF1ZW5jZShzdHJ1Y3QgaHg4MzY5YSAqY3R4KQo+ PiArewo+PiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2Rldmlj ZShjdHgtPmRldik7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCXJldCA9IGh4ODM2OWFfZHNpX3Nl dF9leHRlbnNpb25fY29tbWFuZChjdHgpOwo+PiArCWlmIChyZXQgPCAwKQo+PiArCQlnb3RvIG91 dDsKPj4gKwo+PiArCXJldCA9IGh4ODM2OWFfZHNpX3NldF9tYXhpbXVtX3JldHVybl9wYWNrZXRf c2l6ZShjdHgsIDQpOwo+PiArCWlmIChyZXQgPCAwKQo+PiArCQlnb3RvIG91dDsKPj4gKwo+PiAr CXJldCA9IGh4ODM2OWFfZHNpX3BhbmVsX2luaXQoY3R4KTsKPj4gKwlpZiAocmV0IDwgMCkKPj4g KwkJZ290byBvdXQ7Cj4+ICsKPj4gKwlyZXQgPSBtaXBpX2RzaV9kY3NfZXhpdF9zbGVlcF9tb2Rl KGRzaSk7Cj4+ICsJaWYgKHJldCA8IDApIHsKPj4gKwkJZGV2X2VycihjdHgtPmRldiwgImZhaWxl ZCB0byBleGl0IHNsZWVwIG1vZGU6ICVkXG4iLCByZXQpOwo+PiArCQlnb3RvIG91dDsKPj4gKwl9 Cj4+ICsKPj4gKwlyZXQgPSBtaXBpX2RzaV9kY3Nfc2V0X2Rpc3BsYXlfb24oZHNpKTsKPj4gKwlp ZiAocmV0IDwgMCkgewo+PiArCQlkZXZfZXJyKGN0eC0+ZGV2LCAiZmFpbGVkIHRvIHNldCBkaXNw bGF5IG9uOiAlZFxuIiwgcmV0KTsKPj4gKwkJZ290byBvdXQ7Cj4+ICsJfQo+PiArCj4+ICsJLyoK Pj4gKwkgKiBJdCdzIG5lY2Vzc2FyeSB0byB3YWl0IDEyMG1zZWMgYWZ0ZXIgc2VuZGluZyB0aGUg U2xlZXAgT3V0Cj4+ICsJICogY29tbWFuZCBiZWZvcmUgU2xlZXAgSW4gY29tbWFuZCBjYW4gYmUg c2VudCwgYWNjb3JkaW5nIHRvCj4+ICsJICogdGhlIEhYODM2OUEgZGF0YSBzaGVldC4KPj4gKwkg Ki8KPj4gKwltc2xlZXAoMTIwKTsKPj4gK291dDoKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IGh4ODM2OWFfZHNpX2Rpc2FibGUoc3RydWN0IGRybV9wYW5lbCAqcGFu ZWwpCj4+ICt7Cj4+ICsJc3RydWN0IGh4ODM2OWEgKmN0eCA9IHBhbmVsX3RvX2h4ODM2OWEocGFu ZWwpOwo+PiArCj4+ICsJcmV0dXJuIGh4ODM2OWFfZHNpX3dyaXRlX2Rpc3BsYXlfYnJpZ2h0bmVz cyhjdHgsCj4+ICsJCQkJCQlIWDgzNjlBX01JTl9CUklHSFRORVNTKTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGludCBoeDgzNjlhX2RzaV91bnByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwp Cj4+ICt7Cj4+ICsJc3RydWN0IGh4ODM2OWEgKmN0eCA9IHBhbmVsX3RvX2h4ODM2OWEocGFuZWwp Owo+PiArCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2RldmljZShj dHgtPmRldik7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCXJldCA9IG1pcGlfZHNpX2Rjc19lbnRl cl9zbGVlcF9tb2RlKGRzaSk7Cj4+ICsJaWYgKHJldCA8IDApIHsKPj4gKwkJZGV2X2VycihjdHgt PmRldiwgImZhaWxlZCB0byBlbnRlciBzbGVlcCBtb2RlOiAlZFxuIiwgcmV0KTsKPj4gKwkJZ290 byBvdXQ7Cj4+ICsJfQo+PiArCj4+ICsJcmV0ID0gbWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X29m Zihkc2kpOwo+PiArCWlmIChyZXQgPCAwKSB7Cj4+ICsJCWRldl9lcnIoY3R4LT5kZXYsICJmYWls ZWQgdG8gc2V0IGRpc3BsYXkgb2ZmOiAlZFxuIiwgcmV0KTsKPj4gKwkJZ290byBvdXQ7Cj4+ICsJ fQo+PiArCj4+ICsJLyoKPj4gKwkgKiBUaGlzIGlzIHRvIGFsbG93IHRpbWUgZm9yIHRoZSBzdXBw bHkgdm9sdGFnZXMgYW5kIGNsb2NrCj4+ICsJICogY2lyY3VpdHMgdG8gc3RhYmxpemUsIGFjY29y ZGluZyB0byB0aGUgSFg4MzY5QSBkYXRhIHNoZWV0Lgo+PiArCSAqLwo+PiArCW1zbGVlcCg1KTsK Pj4gK291dDoKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGh4ODM2 OWFfZHNpX3ByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4+ICt7Cj4+ICsJc3RydWN0 IGh4ODM2OWEgKmN0eCA9IHBhbmVsX3RvX2h4ODM2OWEocGFuZWwpOwo+PiArCj4+ICsJcmV0dXJu IGh4ODM2OWFfZHNpX3NldF9zZXF1ZW5jZShjdHgpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50 IGh4ODM2OWFfZHNpX2VuYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKPj4gK3sKPj4gKwlz dHJ1Y3QgaHg4MzY5YSAqY3R4ID0gcGFuZWxfdG9faHg4MzY5YShwYW5lbCk7Cj4+ICsKPj4gKwly ZXR1cm4gaHg4MzY5YV9kc2lfd3JpdGVfZGlzcGxheV9icmlnaHRuZXNzKGN0eCwKPj4gKwkJCQkJ CUhYODM2OUFfTUFYX0JSSUdIVE5FU1MpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGh4ODM2 OWFfZ2V0X21vZGVzKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+PiArewo+PiArCXN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBwYW5lbC0+Y29ubmVjdG9yOwo+PiArCXN0cnVjdCBk cm1fZGV2aWNlICpkcm0gPSBwYW5lbC0+ZHJtOwo+PiArCXN0cnVjdCBoeDgzNjlhICpjdHggPSBw YW5lbF90b19oeDgzNjlhKHBhbmVsKTsKPj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZTsKPj4gKwljb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbSA9IGN0eC0+cGQtPm1vZGU7 Cj4+ICsKPj4gKwltb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRybSwgbSk7Cj4+ICsJaWYgKCFt b2RlKSB7Cj4+ICsJCWRldl9lcnIoZHJtLT5kZXYsICJmYWlsZWQgdG8gYWRkIG1vZGUgJXV4JXVA JXVcbiIsCj4+ICsJCQltLT5oZGlzcGxheSwgbS0+dmRpc3BsYXksIG0tPnZyZWZyZXNoKTsKPj4g KwkJcmV0dXJuIDA7Cj4+ICsJfQo+PiArCj4+ICsJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7Cj4+ ICsJbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJNX01PREVfVFlQRV9QUkVG RVJSRUQ7Cj4+ICsKPj4gKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5icGMgPSA4Owo+PiArCWNv bm5lY3Rvci0+ZGlzcGxheV9pbmZvLndpZHRoX21tID0gbW9kZS0+d2lkdGhfbW07Cj4+ICsJY29u bmVjdG9yLT5kaXNwbGF5X2luZm8uaGVpZ2h0X21tID0gbW9kZS0+aGVpZ2h0X21tOwo+PiArCj4+ ICsJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOwo+PiArCj4+ICsJcmV0dXJu IDE7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BhbmVsX2Z1bmNzIGh4 ODM2OWFfZHNpX2RybV9mdW5jcyA9IHsKPj4gKwkuZGlzYWJsZSA9IGh4ODM2OWFfZHNpX2Rpc2Fi bGUsCj4+ICsJLnVucHJlcGFyZSA9IGh4ODM2OWFfZHNpX3VucHJlcGFyZSwKPj4gKwkucHJlcGFy ZSA9IGh4ODM2OWFfZHNpX3ByZXBhcmUsCj4+ICsJLmVuYWJsZSA9IGh4ODM2OWFfZHNpX2VuYWJs ZSwKPj4gKwkuZ2V0X21vZGVzID0gaHg4MzY5YV9nZXRfbW9kZXMsCj4+ICt9Owo+PiArCj4+ICtz dGF0aWMgaW50IGh4ODM2OWFfcG93ZXJfb24oc3RydWN0IGh4ODM2OWEgKmN0eCkKPj4gK3sKPj4g KwlpbnQgcmV0Owo+PiArCj4+ICsJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJ WkUoY3R4LT5zdXBwbGllcyksIGN0eC0+c3VwcGxpZXMpOwo+PiArCWlmIChyZXQgPCAwKQo+PiAr CQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJbXNsZWVwKGN0eC0+cGQtPnBvd2VyX29uX2RlbGF5KTsK Pj4gKwo+PiArCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDEpOwo+PiArCXVzbGVl cF9yYW5nZSg1MCwgNjApOwo+PiArCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0X2dwaW8sIDAp Owo+PiArCj4+ICsJbXNsZWVwKGN0eC0+cGQtPnJlc2V0X2RlbGF5KTsKPj4gKwo+PiArCXJldHVy biAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGh4ODM2OWFfcG93ZXJfb2ZmKHN0cnVjdCBo eDgzNjlhICpjdHgpCj4+ICt7Cj4+ICsJcmV0dXJuIHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJS QVlfU0laRShjdHgtPnN1cHBsaWVzKSwKPj4gKwkJCQkgICAgICBjdHgtPnN1cHBsaWVzKTsKPj4g K30KPj4gKwo+PiArc3RhdGljIHZvaWQgaHg4MzY5YV92bV90b19yZXNfc2VsKHN0cnVjdCBoeDgz NjlhICpjdHgpCj4+ICt7Cj4+ICsJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUg PSBjdHgtPnBkLT5tb2RlOwo+PiArCj4+ICsJc3dpdGNoIChtb2RlLT5oZGlzcGxheSkgewo+PiAr CWNhc2UgNDgwOgo+PiArCQlzd2l0Y2ggKG1vZGUtPnZkaXNwbGF5KSB7Cj4+ICsJCWNhc2UgODY0 Ogo+PiArCQkJY3R4LT5yZXNfc2VsID0gSFg4MzY5QV9SRVNfNDgwXzg2NDsKPj4gKwkJCWJyZWFr Owo+PiArCQljYXNlIDg1NDoKPj4gKwkJCWN0eC0+cmVzX3NlbCA9IEhYODM2OUFfUkVTXzQ4MF84 NTQ7Cj4+ICsJCQlicmVhazsKPj4gKwkJY2FzZSA4MDA6Cj4+ICsJCQljdHgtPnJlc19zZWwgPSBI WDgzNjlBX1JFU180ODBfODAwOwo+PiArCQkJYnJlYWs7Cj4+ICsJCWNhc2UgNjQwOgo+PiArCQkJ Y3R4LT5yZXNfc2VsID0gSFg4MzY5QV9SRVNfNDgwXzY0MDsKPj4gKwkJCWJyZWFrOwo+PiArCQlj YXNlIDcyMDoKPj4gKwkJCWN0eC0+cmVzX3NlbCA9IEhYODM2OUFfUkVTXzQ4MF83MjA7Cj4+ICsJ CQlicmVhazsKPj4gKwkJZGVmYXVsdDoKPj4gKwkJCWJyZWFrOwo+PiArCQl9Cj4+ICsJCWJyZWFr Owo+PiArCWNhc2UgMzYwOgo+PiArCQlpZiAobW9kZS0+dmRpc3BsYXkgPT0gNjQwKQo+PiArCQkJ Y3R4LT5yZXNfc2VsID0gSFg4MzY5QV9SRVNfMzYwXzY0MDsKPj4gKwkJYnJlYWs7Cj4+ICsJZGVm YXVsdDoKPj4gKwkJYnJlYWs7Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgdHJ1bHlfdGZ0NDgwODAwXzE2X2VfbW9kZSA9IHsKPj4gKwku Y2xvY2sgPSAyNjQwMCwKPj4gKwkuaGRpc3BsYXkgPSA0ODAsCj4+ICsJLmhzeW5jX3N0YXJ0ID0g NDgwICsgOCwKPj4gKwkuaHN5bmNfZW5kID0gNDgwICsgOCArIDgsCj4+ICsJLmh0b3RhbCA9IDQ4 MCArIDggKyA4ICsgOCwKPj4gKwkudmRpc3BsYXkgPSA4MDAsCj4+ICsJLnZzeW5jX3N0YXJ0ID0g ODAwICsgNiwKPj4gKwkudnN5bmNfZW5kID0gODAwICsgNiArIDYsCj4+ICsJLnZ0b3RhbCA9IDgw MCArIDYgKyA2ICsgNiwKPj4gKwkudnJlZnJlc2ggPSA2MCwKPj4gKwkud2lkdGhfbW0gPSA0NSwK Pj4gKwkuaGVpZ2h0X21tID0gNzYsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IGh4ODM2OWFfcGFuZWxfZGVzYyB0cnVseV90ZnQ0ODA4MDBfMTZfZV9kc2kgPSB7Cj4+ICsJLm1v ZGUgPSAmdHJ1bHlfdGZ0NDgwODAwXzE2X2VfbW9kZSwKPj4gKwkucG93ZXJfb25fZGVsYXkgPSAx MCwKPj4gKwkucmVzZXRfZGVsYXkgPSAxMCwKPj4gKwkuZHNpX2xhbmVzID0gMiwKPj4gK307Cj4+ ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGh4ODM2OWFfZHNpX29mX21h dGNoW10gPSB7Cj4+ICsJewo+PiArCQkuY29tcGF0aWJsZSA9ICJ0cnVseSx0ZnQ0ODA4MDAtMTYt ZS1kc2kiLAo+PiArCQkuZGF0YSA9ICZ0cnVseV90ZnQ0ODA4MDBfMTZfZV9kc2ksCj4+ICsJfSwg ewo+PiArCQkvKiBzZW50aW5lbCAqLwo+PiArCX0sCj4+ICt9Owo+PiArTU9EVUxFX0RFVklDRV9U QUJMRShvZiwgaHg4MzY5YV9kc2lfb2ZfbWF0Y2gpOwo+PiArCj4+ICtzdGF0aWMgaW50IGh4ODM2 OWFfZHNpX3Byb2JlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKPj4gK3sKPj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmZHNpLT5kZXY7Cj4+ICsJY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCAqb2ZfaWQgPQo+PiArCQkJb2ZfbWF0Y2hfZGV2aWNlKGh4ODM2OWFfZHNpX29mX21hdGNoLCBk ZXYpOwo+PiArCXN0cnVjdCBoeDgzNjlhICpjdHg7Cj4+ICsJaW50IHJldCwgaTsKPj4gKwo+PiAr CWN0eCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY3R4KSwgR0ZQX0tFUk5FTCk7Cj4+ICsJ aWYgKCFjdHgpCj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCj4+ICsJY3R4LT5kZXYgPSBkZXY7 Cj4+ICsKPj4gKwlpZiAob2ZfaWQpIHsKPj4gKwkJY3R4LT5wZCA9IG9mX2lkLT5kYXRhOwo+PiAr CX0gZWxzZSB7Cj4+ICsJCWRldl9lcnIoZGV2LCAiY2Fubm90IGZpbmQgY29tcGF0aWJsZSBkZXZp Y2VcbiIpOwo+PiArCQlyZXR1cm4gLUVOT0RFVjsKPj4gKwl9Cj4+ICsKPj4gKwloeDgzNjlhX3Zt X3RvX3Jlc19zZWwoY3R4KTsKPj4gKwo+PiArCWN0eC0+c3VwcGxpZXNbMF0uc3VwcGx5ID0gInZk ZDEiOwo+PiArCWN0eC0+c3VwcGxpZXNbMV0uc3VwcGx5ID0gInZkZDIiOwo+PiArCWN0eC0+c3Vw cGxpZXNbMl0uc3VwcGx5ID0gInZkZDMiOwo+PiArCWN0eC0+c3VwcGxpZXNbM10uc3VwcGx5ID0g ImRzaS12Y2MiOwo+PiArCWN0eC0+c3VwcGxpZXNbNF0uc3VwcGx5ID0gInZwcCI7Cj4+ICsJcmV0 ID0gZGV2bV9yZWd1bGF0b3JfYnVsa19nZXQoZGV2LCBBUlJBWV9TSVpFKGN0eC0+c3VwcGxpZXMp LAo+PiArCQkJCSAgICAgIGN0eC0+c3VwcGxpZXMpOwo+PiArCWlmIChyZXQgPCAwKSB7Cj4+ICsJ CWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBnZXQgcmVndWxhdG9yczogJWRcbiIsIHJldCk7Cj4+ ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+PiArCj4+ICsJY3R4LT5yZXNldF9ncGlvID0gZGV2bV9n cGlvZF9nZXQoZGV2LCAicmVzZXQiLCBHUElPRF9PVVRfTE9XKTsKPj4gKwlpZiAoSVNfRVJSKGN0 eC0+cmVzZXRfZ3BpbykpIHsKPj4gKwkJZGV2X2luZm8oZGV2LCAiY2Fubm90IGdldCByZXNldC1n cGlvcyAlbGRcbiIsCj4+ICsJCQkgUFRSX0VSUihjdHgtPnJlc2V0X2dwaW8pKTsKPj4gKwkJcmV0 dXJuIFBUUl9FUlIoY3R4LT5yZXNldF9ncGlvKTsKPj4gKwl9Cj4+ICsKPj4gKwlmb3IgKGkgPSAw OyBpIDwgNDsgaSsrKSB7Cj4+ICsJCWN0eC0+YnNfZ3Bpb1tpXSA9IGRldm1fZ3Bpb2RfZ2V0X2lu ZGV4KGRldiwgImJzIiwgaSwKPj4gKwkJCQkJCQlHUElPRF9PVVRfSElHSCk7Cj4+ICsJCWlmICgh SVNfRVJSX09SX05VTEwoY3R4LT5ic19ncGlvW2ldKSkKPj4gKwkJCWRldl9kYmcoZGV2LCAiYnMl ZC1ncGlvIGlzIGNvbmZpZ3VyZWRcbiIsIGkpOwo+Cj4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRv IGNvbnRpbnVlIHByb2JlIG9uIGVycm9yIGR1cmluZyBnZXR0aW5nIGdwaW9zPwoKVGhlcmUgY291 bGQgYmUgaG9sZXMgaW4gdGhlIGdwaW8gbGlzdCBhcyBtZW50aW9uZWQgaW4gWzFdLgpGb3IgdGhp cyBwYW5lbCwgdGhlIHBvdGVudGlhbCBob2xlcyBtZWFuIHRoYXQgdGhlIHJlbGV2YW50CmdwaW9z IGFyZSBub3QgY29udHJvbGxlZCBieSB0aGUgZHJpdmVyIGJ1dCBvbmx5IGJ5IHRoZQpoYXJkd2Fy ZS4KClBlcmhhcHMsIEkgbmVlZCB0byBoYW5kbGUgdGhlIGVycm9yIGNhc2UuCkkgdHJpZWQgdG8g aW1wbGVtZW50IGl0IGluIHRoZSBmb2xsb3dpbmcgd2F5LgoKY3R4LT5ic19ncGlvW2ldID0gZGV2 bV9ncGlvZF9nZXRfaW5kZXgoZGV2LCAiYnMiLCBpLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR1BJT0RfT1VUX0hJR0gpOwppZiAoIUlTX0VSUl9PUl9OVUxMKGN0eC0+ YnNfZ3Bpb1tpXSkpIHsKICAgICBkZXZfZGJnKGRldiwgImJzJWQtZ3BpbyBpcyBjb25maWd1cmVk XG4iLCBpKTsKfSBlbHNlIGlmIChJU19FUlIoY3R4LT5ic19ncGlvW2ldKSkgewogICAgIGRldl9p bmZvKGRldiwgImZhaWxlZCB0byBnZXQgYnMlZC1ncGlvXG4iLCBpKTsKICAgICByZXR1cm4gUFRS X0VSUihjdHgtPmJzX2dwaW9baV0pOwp9CgpCdXQsIEkgZ2V0IHRoaXMgaW4gZG1lc2cuICBBbnkg aWRlYT8KWyAgICAxLjYyNTYzNF0gcGFuZWwtaHg4MzY5YS1kc2kgMjFlMDAwMC5taXBpLjA6IGZh aWxlZCB0byBnZXQgYnMwLWdwaW8KWyAgICAxLjYzMzA2MF0gcGFuZWwtaHg4MzY5YS1kc2k6IHBy b2JlIG9mIDIxZTAwMDAubWlwaS4wIGZhaWxlZCB3aXRoIAplcnJvciAtMgoKWzFdIERvY3VtZW50 YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL2dwaW8udHh0LgoKUmVnYXJkcywKCkxpdSBZ aW5nCgo+Cj4gQWZ0ZXIgYWRkcmVzc2luZyBhYm92ZSBjb21tZW50cyB5b3UgY2FuIGFkZDoKPgo+ IFJldmlld2VkLWJ5OiBBbmRyemVqIEhhamRhIDxhLmhhamRhQHNhbXN1bmcuY29tPgo+Cj4KPgo+ IFJlZ2FyZHMKPiBBbmRyemVqCj4KPgo+PiArCX0KPj4gKwo+PiArCXJldCA9IGh4ODM2OWFfcG93 ZXJfb24oY3R4KTsKPj4gKwlpZiAocmV0IDwgMCkgewo+PiArCQlkZXZfZXJyKGRldiwgImNhbm5v dCBwb3dlciBvblxuIik7Cj4+ICsJCXJldHVybiByZXQ7Cj4+ICsJfQo+PiArCj4+ICsJZHJtX3Bh bmVsX2luaXQoJmN0eC0+cGFuZWwpOwo+PiArCWN0eC0+cGFuZWwuZGV2ID0gZGV2Owo+PiArCWN0 eC0+cGFuZWwuZnVuY3MgPSAmaHg4MzY5YV9kc2lfZHJtX2Z1bmNzOwo+PiArCj4+ICsJcmV0ID0g ZHJtX3BhbmVsX2FkZCgmY3R4LT5wYW5lbCk7Cj4+ICsJaWYgKHJldCA8IDApCj4+ICsJCXJldHVy biByZXQ7Cj4+ICsKPj4gKwltaXBpX2RzaV9zZXRfZHJ2ZGF0YShkc2ksIGN0eCk7Cj4+ICsKPj4g Kwlkc2ktPmxhbmVzID0gY3R4LT5wZC0+ZHNpX2xhbmVzOwo+PiArCWRzaS0+Zm9ybWF0ID0gTUlQ SV9EU0lfRk1UX1JHQjg4ODsKPj4gKwlkc2ktPm1vZGVfZmxhZ3MgPSBNSVBJX0RTSV9NT0RFX1ZJ REVPIHwKPj4gKwkJCSAgTUlQSV9EU0lfTU9ERV9WSURFT19CVVJTVCB8Cj4+ICsJCQkgIE1JUElf RFNJX01PREVfVklERU9fU1lOQ19QVUxTRTsKPj4gKwlyZXQgPSBtaXBpX2RzaV9hdHRhY2goZHNp KTsKPj4gKwlpZiAocmV0IDwgMCkKPj4gKwkJZHJtX3BhbmVsX3JlbW92ZSgmY3R4LT5wYW5lbCk7 Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGh4ODM2OWFf ZHNpX3JlbW92ZShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCj4+ICt7Cj4+ICsJc3RydWN0 IGh4ODM2OWEgKmN0eCA9IG1pcGlfZHNpX2dldF9kcnZkYXRhKGRzaSk7Cj4+ICsKPj4gKwltaXBp X2RzaV9kZXRhY2goZHNpKTsKPj4gKwlkcm1fcGFuZWxfcmVtb3ZlKCZjdHgtPnBhbmVsKTsKPj4g KwlyZXR1cm4gaHg4MzY5YV9wb3dlcl9vZmYoY3R4KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHN0 cnVjdCBtaXBpX2RzaV9kcml2ZXIgaHg4MzY5YV9kc2lfZHJpdmVyID0gewo+PiArCS5wcm9iZSA9 IGh4ODM2OWFfZHNpX3Byb2JlLAo+PiArCS5yZW1vdmUgPSBoeDgzNjlhX2RzaV9yZW1vdmUsCj4+ ICsJLmRyaXZlciA9IHsKPj4gKwkJLm5hbWUgPSAicGFuZWwtaHg4MzY5YS1kc2kiLAo+PiArCQku b2ZfbWF0Y2hfdGFibGUgPSBoeDgzNjlhX2RzaV9vZl9tYXRjaCwKPj4gKwl9LAo+PiArfTsKPj4g K21vZHVsZV9taXBpX2RzaV9kcml2ZXIoaHg4MzY5YV9kc2lfZHJpdmVyKTsKPj4gKwo+PiArTU9E VUxFX0RFU0NSSVBUSU9OKCJIaW1heCBIWDgzNjlBIHBhbmVsIGRyaXZlciIpOwo+PiArTU9EVUxF X0FVVEhPUigiTGl1IFlpbmcgPFlpbmcuTGl1QGZyZWVzY2FsZS5jb20+Iik7Cj4+ICtNT0RVTEVf TElDRU5TRSgiR1BMIHYyIik7Cj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWwK