From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hyungwon Hwang Subject: Re: [PATCH v2 3/6] drm/exynos: mic: add MIC driver Date: Thu, 26 Mar 2015 11:27:21 +0900 Message-ID: <20150326112721.69a0ca2b@hwh-ubuntu> References: <1426666591-16103-1-git-send-email-human.hwang@samsung.com> <1426666591-16103-4-git-send-email-human.hwang@samsung.com> <5510FB63.9070001@samsung.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-reply-to: <5510FB63.9070001@samsung.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Inki Dae Cc: devicetree@vger.kernel.org, sw0312.kim@samsung.com, dh09.lee@samsung.com, dri-devel@lists.freedesktop.org, cw00.choi@samsung.com List-Id: devicetree@vger.kernel.org RGVhciBJbmtpIGRhZSwKCk9uIFR1ZSwgMjQgTWFyIDIwMTUgMTQ6NTE6MzEgKzA5MDAKSW5raSBE YWUgPGlua2kuZGFlQHNhbXN1bmcuY29tPiB3cm90ZToKCj4gT24gMjAxNeuFhCAwM+yblCAxOOyd vCAxNzoxNiwgSHl1bmd3b24gSHdhbmcgd3JvdGU6Cj4gPiBNSUMoTW9iaWxlIGltYWdlIGNvbXBy ZXNzb3IpIGlzIG5ld2x5IGFkZGVkIElQIGluIEV4eW5vczU0MzMuIE1JQwo+ID4gcmVzaWRlcyBi ZXR3ZWVuIGRlY29uIGFuZCBtaXBpIGRzaW0sIGFuZCBjb21wcmVzc2VzIGZyYW1lIGRhdGEgYnkK PiA+IDUwJS4gV2l0aCBkc2ksIG5vdCBkaXNwbGF5IHBvcnQsIHRvIHNlbmQgZnJhbWUgZGF0YSB0 byB0aGUgcGFuZWwsCj4gPiB0aGUgYmFuZHdpZHRoIGlzIG5vdCBlbm91Z2guIFRoYXQgaXMgd2h5 IHRoaXMgY29tcHJlc3NvciBpcwo+ID4gaW50cm9kdWNlZC4KPiA+IAo+ID4gU2lnbmVkLW9mZi1i eTogSHl1bmd3b24gSHdhbmcgPGh1bWFuLmh3YW5nQHNhbXN1bmcuY29tPgo+ID4gLS0tCj4gPiBD aGFuZ2VzIGZvciB2MjoKPiA+IC0gbWFrZSBtaWMgZHJpdmVyIHRvIGJlIHJlZ2lzdGVyZWQgYnkg ZXh5bm9zIGRybSBkcml2ZXIgaW5zdGVhZCBhcwo+ID4gYSBtb2R1bGUgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwKPiA+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+IGRyaXZlcgo+ID4gfAo+ID4gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ID4gLSBjaGFuZ2UgdGhl IGRlc2NyaXB0aW9uIG9mIG1pYyBkcml2ZXIgaW4gZG9jdW1lbnRhdGlvbgo+ID4gLSBhZGQgbW9k dWxlIGF1dGhvciBhdCB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgZmlsZSByZW1vdmluZwo+ID4gTU9E VUxFX09XTkVSLCBNT0RVTEVfREVTQ1JJUFRJT04sIE1PRFVMRV9MSUNFTlNFCj4gPiAgLi4uL2Rl dmljZXRyZWUvYmluZGluZ3MvdmlkZW8vZXh5bm9zLW1pYy50eHQgICAgICAgfCAgNDkgKysrCj4g PiAgZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgfCAg IDYgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvTWFrZWZpbGUgICAgICAgICAgICAgICAg ICAgIHwgICAxICsKPiA+ICBkcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMg ICAgICAgICAgICB8ICAgMyArCj4gPiAgZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJt X2Rydi5oICAgICAgICAgICAgfCAgIDEgKwo+ID4gIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5 bm9zX2RybV9taWMuYyAgICAgICAgICAgIHwgNDgxCj4gPiArKysrKysrKysrKysrKysrKysrKysg NiBmaWxlcyBjaGFuZ2VkLCA1NDEgaW5zZXJ0aW9ucygrKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0 NAo+ID4gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3ZpZGVvL2V4eW5vcy1taWMu dHh0IGNyZWF0ZSBtb2RlCj4gPiAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3Nf ZHJtX21pYy5jCj4gPiAKPiA+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUv YmluZGluZ3MvdmlkZW8vZXh5bm9zLW1pYy50eHQKPiA+IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0 cmVlL2JpbmRpbmdzL3ZpZGVvL2V4eW5vcy1taWMudHh0IG5ldyBmaWxlCj4gPiBtb2RlIDEwMDY0 NCBpbmRleCAwMDAwMDAwLi4wMDZkMDcyCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9Eb2N1 bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmlkZW8vZXh5bm9zLW1pYy50eHQKPiA+IEBA IC0wLDAgKzEsNDkgQEAKPiA+ICtEZXZpY2UtVHJlZSBiaW5kaW5ncyBmb3IgU2Ftc3VuZyBFeHlu b3MgU29DIG1vYmlsZSBpbWFnZQo+ID4gY29tcHJlc3NvciAoTUlDKSArCj4gPiArTUlDIChtb2Jp bGUgaW1hZ2UgY29tcHJlc3NvcikgcmVzaWRlcyBiZXR3ZWVuIGRlY29uIGFuZCBtaXBpIGRzaS4K PiA+IE1pcGkgZHNpIGlzICtub3QgY2FwYWJsZSB0byB0cmFuc2ZlciBoaWdoIHJlc29sdHVpb24g ZnJhbWUgZGF0YSBhcwo+ID4gZGVjb24gY2FuIHNlbmQuIE1JQyArc29sdmVzIHRoaXMgcHJvYmxl bSBieSBjb21wcmVzc2luZyB0aGUgZnJhbWUKPiA+IGRhdGEgYnkgMS8yIGJlZm9yZSBpdCBpcyB0 cmFuc2ZlcmVkICt0aHJvdWdoIG1pcGkgZHNpLiBUaGUKPiA+IGNvbXByZXNzZWQgZnJhbWUgZGF0 YSBtdXN0IGJlIHVuY29tcHJlc3NlZCBpbiB0aGUgcGFuZWwgK1BDQi4KPiA+ICsKPiA+ICtSZXF1 aXJlZCBwcm9wZXJ0aWVzOgo+ID4gKy0gY29tcGF0aWJsZTogdmFsdWUgc2hvdWxkIGJlICJzYW1z dW5nLGV4eW5vczU0MzMtbWljIi4KPiA+ICstIHJlZzogcGh5c2ljYWwgYmFzZSBhZGRyZXNzIGFu ZCBsZW5ndGggb2YgdGhlIE1JQyByZWdpc3RlcnMgc2V0Cj4gPiBhbmQgc3lzdGVtCj4gPiArICAg ICAgIHJlZ2lzdGVyIG9mIG1pYy4KPiA+ICstIGNsb2NrczogbXVzdCBpbmNsdWRlIGNsb2NrIHNw ZWNpZmllcnMgY29ycmVzcG9uZGluZyB0byBlbnRyaWVzCj4gPiBpbiB0aGUKPiA+ICsJICBjbG9j ay1uYW1lcyBwcm9wZXJ0eS4KPiA+ICstIGNsb2NrLW5hbWVzOiBsaXN0IG9mIGNsb2NrIG5hbWVz IHNvcnRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUKPiA+IGNsb2Nrcwo+ID4gKwkgICAgICAg cHJvcGVydHkuIE11c3QgY29udGFpbiAicGNsa19taWMwIiwKPiA+ICJzY2xrX3JnYl92Y2xrX3Rv X21pYzAiLiArLSBwb3J0czogY29udGFpbnMgYSBwb3J0IHdoaWNoIGlzCj4gPiBjb25uZWN0ZWQg dG8gZGVjb24gbm9kZSBhbmQgZHNpIG5vZGUuCj4gPiArCSBhZGRyZXNzLWNlbGxzIGFuZCBzaXpl LWNlbGxzIG11c3QgMSBhbmQgMCwgcmVzcGVjdGl2ZWx5Lgo+ID4gKy0gcG9ydDogY29udGFpbnMg YW4gZW5kcG9pbnQgbm9kZSB3aGljaCBpcyBjb25uZWN0ZWQgdG8gdGhlCj4gPiBlbmRwb2ludCBp biB0aGUKPiA+ICsJZGVjb24gbm9kZSBvciBkc2kgbm9kZS4gVGhlIHJlZyB2YWx1ZSBtdXN0IGJl IDAgYW5kIDEKPiA+IHJlc3BlY3RpdmVseS4gKwo+ID4gK0V4YW1wbGU6Cj4gPiArU29DIHNwZWNp ZmljIERUIGVudHJ5Ogo+ID4gK21pYzogbWljQDEzOTMwMDAwIHsKPiA+ICsJY29tcGF0aWJsZSA9 ICJzYW1zdW5nLGV4eW5vczU0MzMtbWljIjsKPiA+ICsJcmVnID0gPDB4MTM5MzAwMDAgMHg0OCAw eDEzQjgwMDAwIDB4MTAxMD47Cj4gPiArCWNsb2NrcyA9IDwmY211X2Rpc3AgQ0xLX1BDTEtfTUlD MD4sCj4gPiArCSAgICAgICA8JmNtdV9kaXNwIENMS19TQ0xLX1JHQl9WQ0xLX1RPX01JQzA+Owo+ ID4gKwljbG9jay1uYW1lcyA9ICJwY2xrX21pYzAiLCAic2Nsa19yZ2JfdmNsa190b19taWMwIjsK PiA+ICsKPiA+ICsJcG9ydHMgewo+ID4gKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Cj4gPiArCQkj c2l6ZS1jZWxscyA9IDwwPjsKPiA+ICsKPiA+ICsJCXBvcnRAMCB7Cj4gPiArCQkJcmVnID0gPDA+ Owo+ID4gKwkJCW1pY190b19kZWNvbjogZW5kcG9pbnQgewo+ID4gKwkJCQlyZW1vdGUtZW5kcG9p bnQgPSA8JmRlY29uX3RvX21pYz47Cj4gPiArCQkJfTsKPiA+ICsJCX07Cj4gPiArCj4gPiArCQlw b3J0QDEgewo+ID4gKwkJCXJlZyA9IDwxPjsKPiA+ICsJCQltaWNfdG9fZHNpOiBlbmRwb2ludCB7 Cj4gPiArCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmZHNpX3RvX21pYz47Cj4gPiArCQkJfTsKPiA+ ICsJCX07Cj4gPiArCX07Cj4gPiArfTsKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v ZXh5bm9zL0tjb25maWcKPiA+IGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9LY29uZmlnIGluZGV4 IGUxNWNjMmUuLmE3OTYxNzUgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZXh5bm9z L0tjb25maWcKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvS2NvbmZpZwo+ID4gQEAg LTEwMywzICsxMDMsOSBAQCBjb25maWcgRFJNX0VYWU5PU19HU0MKPiA+ICAJZGVwZW5kcyBvbiBE Uk1fRVhZTk9TX0lQUCAmJiBBUkNIX0VYWU5PUzUKPiA+ICYmICFBUkNIX01VTFRJUExBVEZPUk0g aGVscAo+ID4gIAkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgRXh5bm9z IEdTQyBmb3IgRFJNLgo+ID4gKwo+ID4gK2NvbmZpZyBEUk1fRVhZTk9TX01JQwo+ID4gKwlib29s ICJFeHlub3MgRFJNIE1JQyIKPiA+ICsJZGVwZW5kcyBvbiAoRFJNX0VYWU5PUyAmJiBEUk1fRVhZ Tk9TNTQzM19ERUNPTikKPiA+ICsJaGVscAo+ID4gKwkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5 b3Ugd2FudCB0byB1c2UgRXh5bm9zIE1JQyBmb3IgRFJNLgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9leHlub3MvTWFrZWZpbGUKPiA+IGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9N YWtlZmlsZSBpbmRleCBmYmQwODRkLi43ZGUwYjEwIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2V4eW5vcy9NYWtlZmlsZQo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9N YWtlZmlsZQo+ID4gQEAgLTIyLDUgKzIyLDYgQEAgZXh5bm9zZHJtLSQoQ09ORklHX0RSTV9FWFlO T1NfSVBQKQkrPQo+ID4gZXh5bm9zX2RybV9pcHAubyBleHlub3Nkcm0tJChDT05GSUdfRFJNX0VY WU5PU19GSU1DKQkrPQo+ID4gZXh5bm9zX2RybV9maW1jLm8gZXh5bm9zZHJtLSQoQ09ORklHX0RS TV9FWFlOT1NfUk9UQVRPUikJKz0KPiA+IGV4eW5vc19kcm1fcm90YXRvci5vIGV4eW5vc2RybS0k KENPTkZJR19EUk1fRVhZTk9TX0dTQykJKz0KPiA+IGV4eW5vc19kcm1fZ3NjLm8gK2V4eW5vc2Ry bS0kKENPTkZJR19EUk1fRVhZTk9TX01JQykgICAgICs9Cj4gPiBleHlub3NfZHJtX21pYy5vCj4g PiAKPiA+ICBvYmotJChDT05GSUdfRFJNX0VYWU5PUykJCSs9IGV4eW5vc2RybS5vCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2Rydi5jCj4gPiBiL2Ry aXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kcnYuYyBpbmRleCAxZmEwZGQwLi5lYzk5 ODRkCj4gPiAxMDA2NDQgLS0tIGEvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2Ry di5jCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmMKPiA+ IEBAIC01NjIsNiArNTYyLDkgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmNvbnN0 Cj4gPiBleHlub3NfZHJtX2ttc19kcml2ZXJzW10gPSB7ICNpZmRlZiBDT05GSUdfRFJNX0VYWU5P UzdfREVDT04KPiA+ICAJJmRlY29uX2RyaXZlciwKPiA+ICAjZW5kaWYKPiA+ICsjaWZkZWYgQ09O RklHX0RSTV9FWFlOT1NfTUlDCj4gPiArCSZtaWNfZHJpdmVyLAo+ID4gKyNlbmRpZgo+ID4gICNp ZmRlZiBDT05GSUdfRFJNX0VYWU5PU19EUAo+ID4gIAkmZHBfZHJpdmVyLAo+ID4gICNlbmRpZgo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9kcnYuaAo+ ID4gYi9kcml2ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fZHJ2LmggaW5kZXggNDA5OTZk OC4uOWM5NGRjOQo+ID4gMTAwNjQ0IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9z X2RybV9kcnYuaAo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2V4eW5vcy9leHlub3NfZHJtX2Ry di5oCj4gPiBAQCAtMzU3LDQgKzM1Nyw1IEBAIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IGZpbWNfZHJpdmVyOwo+ID4gIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJvdGF0b3Jf ZHJpdmVyOwo+ID4gIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdzY19kcml2ZXI7Cj4g PiAgZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaXBwX2RyaXZlcjsKPiA+ICtleHRlcm4g c3RydWN0IHBsYXRmb3JtX2RyaXZlciBtaWNfZHJpdmVyOwo+ID4gICNlbmRpZgo+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9taWMuYwo+ID4gYi9kcml2 ZXJzL2dwdS9kcm0vZXh5bm9zL2V4eW5vc19kcm1fbWljLmMgbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiA+IGluZGV4IDAwMDAwMDAuLmI4OThhMmEKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9taWMuYwo+ID4gQEAgLTAsMCArMSw0ODEg QEAKPiA+ICsvKgo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxNSBTYW1zdW5nIEVsZWN0cm9uaWNz IENvLkx0ZAo+ID4gKyAqIEF1dGhvcnM6Cj4gPiArICoJSHl1bmd3b24gSHdhbmcgPGh1bWFuLmh3 YW5nQHNhbXN1bmcuY29tPgo+ID4gKyAqCj4gPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ID4gbW9kaWZ5Cj4gPiArICog aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJz aW9uIDIKPiA+IGFzCj4gPiArICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb25yCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rldmlj ZS5oPgo+ID4gKyNpbmNsdWRlIDx2aWRlby9vZl92aWRlb21vZGUuaD4KPiA+ICsjaW5jbHVkZSA8 bGludXgvb2ZfYWRkcmVzcy5oPgo+ID4gKyNpbmNsdWRlIDx2aWRlby92aWRlb21vZGUuaD4KPiA+ ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+ Cj4gPiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+ Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2Ns ay5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ID4gKwo+ID4gKy8qIFN5c3JlZyByZWdp c3RlcnMgZm9yIE1JQyAqLwo+ID4gKyNkZWZpbmUgRFNEX0NGR19NVVgJMHgxMDA0Cj4gPiArI2Rl ZmluZSBNSUMwX1JHQl9NVVgJKDEgPDwgMCkKPiA+ICsjZGVmaW5lIE1JQzBfSTgwX01VWAkoMSA8 PCAxKQo+ID4gKyNkZWZpbmUgTUlDMF9PTl9NVVgJKDEgPDwgNSkKPiA+ICsKPiA+ICsvKiBNSUMg cmVnaXN0ZXJzICovCj4gPiArI2RlZmluZSBNSUNfT1AJCQkJMHgwCj4gPiArI2RlZmluZSBNSUNf SVBfVkVSCQkJMHgwMDA0Cj4gPiArI2RlZmluZSBNSUNfVl9USU1JTkdfMAkJCTB4MDAwOAo+ID4g KyNkZWZpbmUgTUlDX1ZfVElNSU5HXzEJCQkweDAwMEMKPiA+ICsjZGVmaW5lIE1JQ19JTUdfU0la RQkJCTB4MDAxMAo+ID4gKyNkZWZpbmUgTUlDX0lOUFVUX1RJTUlOR18wCQkweDAwMTQKPiA+ICsj ZGVmaW5lIE1JQ19JTlBVVF9USU1JTkdfMQkJMHgwMDE4Cj4gPiArI2RlZmluZSBNSUNfMkRfT1VU UFVUX1RJTUlOR18wCQkweDAwMUMKPiA+ICsjZGVmaW5lIE1JQ18yRF9PVVRQVVRfVElNSU5HXzEJ CTB4MDAyMAo+ID4gKyNkZWZpbmUgTUlDXzJEX09VVFBVVF9USU1JTkdfMgkJMHgwMDI0Cj4gPiAr I2RlZmluZSBNSUNfM0RfT1VUUFVUX1RJTUlOR18wCQkweDAwMjgKPiA+ICsjZGVmaW5lIE1JQ18z RF9PVVRQVVRfVElNSU5HXzEJCTB4MDAyQwo+ID4gKyNkZWZpbmUgTUlDXzNEX09VVFBVVF9USU1J TkdfMgkJMHgwMDMwCj4gPiArI2RlZmluZSBNSUNfQ09SRV9QQVJBXzAJCQkweDAwMzQKPiA+ICsj ZGVmaW5lIE1JQ19DT1JFX1BBUkFfMQkJCTB4MDAzOAo+ID4gKyNkZWZpbmUgTUlDX0NUQ19DVFJM CQkJMHgwMDQwCj4gPiArI2RlZmluZSBNSUNfUkRfREFUQQkJCTB4MDA0NAo+ID4gKwo+ID4gKyNk ZWZpbmUgTUlDX1VQRF9SRUcJCQkoMSA8PCAzMSkKPiA+ICsjZGVmaW5lIE1JQ19PTl9SRUcJCQko MSA8PCAzMCkKPiA+ICsjZGVmaW5lIE1JQ19URF9PTl9SRUcJCQkoMSA8PCAyOSkKPiA+ICsjZGVm aW5lIE1JQ19CU19DSEdfT1VUCQkJKDEgPDwgMTYpCj4gPiArI2RlZmluZSBNSUNfVklERU9fVFlQ RSh4KQkJKCgoeCkgJiAweGYpIDw8IDEyKQo+ID4gKyNkZWZpbmUgTUlDX1BTUl9FTgkJCSgxIDw8 IDUpCj4gPiArI2RlZmluZSBNSUNfU1dfUlNUCQkJKDEgPDwgNCkKPiA+ICsjZGVmaW5lIE1JQ19B TExfUlNUCQkJKDEgPDwgMykKPiA+ICsjZGVmaW5lIE1JQ19DT1JFX1ZFUl9DT05UUk9MCQkoMSA8 PCAyKQo+ID4gKyNkZWZpbmUgTUlDX01PREVfU0VMX0NPTU1BTkRfTU9ERQkoMSA8PCAxKQo+ID4g KyNkZWZpbmUgTUlDX01PREVfU0VMX01BU0sJCSgxIDw8IDEpCj4gPiArI2RlZmluZSBNSUNfQ09S RV9FTgkJCSgxIDw8IDApCj4gPiArCj4gPiArI2RlZmluZSBNSUNfVl9QVUxTRV9XSURUSCh4KQkJ KCgoeCkgJiAweDNmZmYpIDw8IDE2KQo+ID4gKyNkZWZpbmUgTUlDX1ZfUEVSSU9EX0xJTkUoeCkJ CSgoeCkgJiAweDNmZmYpCj4gPiArCj4gPiArI2RlZmluZSBNSUNfVkJQX1NJWkUoeCkJCQkoKCh4 KSAmIDB4M2ZmZikgPDwKPiA+IDE2KSArI2RlZmluZSBNSUNfVkZQX1NJWkUoeCkJCQkoKHgpICYg MHgzZmZmKQo+ID4gKwo+ID4gKyNkZWZpbmUgTUlDX0lNR19WX1NJWkUoeCkJCSgoKHgpICYgMHgz ZmZmKSA8PCAxNikKPiA+ICsjZGVmaW5lIE1JQ19JTUdfSF9TSVpFKHgpCQkoKHgpICYgMHgzZmZm KQo+ID4gKwo+ID4gKyNkZWZpbmUgTUlDX0hfUFVMU0VfV0lEVEhfSU4oeCkJCSgoKHgpICYgMHgz ZmZmKSA8PAo+ID4gMTYpICsjZGVmaW5lIE1JQ19IX1BFUklPRF9QSVhFTF9JTih4KQkoKHgpICYg MHgzZmZmKQo+ID4gKwo+ID4gKyNkZWZpbmUgTUlDX0hCUF9TSVpFX0lOKHgpCQkoKCh4KSAmIDB4 M2ZmZikgPDwgMTYpCj4gPiArI2RlZmluZSBNSUNfSEZQX1NJWkVfSU4oeCkJCSgoeCkgJiAweDNm ZmYpCj4gPiArCj4gPiArI2RlZmluZSBNSUNfSF9QVUxTRV9XSURUSF8yRCh4KQkJKCgoeCkgJiAw eDNmZmYpIDw8Cj4gPiAxNikgKyNkZWZpbmUgTUlDX0hfUEVSSU9EX1BJWEVMXzJEKHgpCSgoeCkg JiAweDNmZmYpCj4gPiArCj4gPiArI2RlZmluZSBNSUNfSEJQX1NJWkVfMkQoeCkJCSgoKHgpICYg MHgzZmZmKSA8PCAxNikKPiA+ICsjZGVmaW5lIE1JQ19IRlBfU0laRV8yRCh4KQkJKCh4KSAmIDB4 M2ZmZikKPiA+ICsKPiA+ICsjZGVmaW5lIE1JQ19CU19TSVpFXzJEKHgpCSgoeCkgJiAweDNmZmYp Cj4gPiArCj4gPiArZW51bSB7Cj4gPiArCUVORFBPSU5UX0RFQ09OX05PREUsCj4gPiArCUVORFBP SU5UX0RTSV9OT0RFLAo+ID4gKwlOVU1fRU5EUE9JTlRTCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0 aWMgY2hhciAqY2xrX25hbWVzW10gPSB7ICJwY2xrX21pYzAiLAo+ID4gInNjbGtfcmdiX3ZjbGtf dG9fbWljMCIgfTsgKyNkZWZpbmUgTlVNX0NMS1MKPiA+IEFSUkFZX1NJWkUoY2xrX25hbWVzKSAr c3RhdGljIERFRklORV9NVVRFWChtaWNfbXV0ZXgpOwo+ID4gKwo+ID4gK3N0cnVjdCBleHlub3Nf bWljIHsKPiA+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ID4gKwl2b2lkIF9faW9tZW0gKnJlZzsK PiA+ICsJdm9pZCBfX2lvbWVtICpzeXNyZWc7Cj4gPiArCXN0cnVjdCBjbGsgKmNsa3NbTlVNX0NM S1NdOwo+ID4gKwo+ID4gKwlib29sIGk4MF9tb2RlOwo+ID4gKwlzdHJ1Y3QgdmlkZW9tb2RlIHZt Owo+ID4gKwlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Cj4gPiArCXN0cnVjdCBkcm1fYnJp ZGdlIGJyaWRnZTsKPiA+ICsKPiA+ICsJYm9vbCBlbmFibGVkOwo+ID4gK307Cj4gPiArCj4gPiAr c3RhdGljIHZvaWQgbWljX3NldF9wYXRoKHN0cnVjdCBleHlub3NfbWljICptaWMsIGJvb2wgZW5h YmxlKQo+ID4gK3sKPiA+ICsJdTMyIHJlZzsKPiA+ICsKPiA+ICsJcmVnID0gcmVhZGwobWljLT5z eXNyZWcgKyBEU0RfQ0ZHX01VWCk7Cj4gPiArCWlmIChlbmFibGUpCj4gPiArCQlyZWcgfD0gTUlD MF9SR0JfTVVYIHwgTUlDMF9JODBfTVVYIHwgTUlDMF9PTl9NVVg7Cj4gPiArCWVsc2UKPiA+ICsJ CXJlZyAmPSB+KE1JQzBfUkdCX01VWCB8IE1JQzBfSTgwX01VWCB8Cj4gPiBNSUMwX09OX01VWCk7 Cj4gCj4gZXh5bm9zX21pYyBoYXMgYWxyZWFkeSB3aGljaCB2aWRlbyBtb2RlIC0gUkdCIG9yIGk4 MCAtIGlzIHVzZWQgc28gaXQnZAo+IGJlIHJlYXNvbmFibGUgdG8gc2VsZWN0IG9uZSBvZiB0aGVt IHRvIGF2b2lkIGNvbmZ1c2luZy4KPiAKClllcy4gSSBhZ3JlZS4KCj4gPiArCj4gPiArCXdyaXRl bChyZWcsIG1pYy0+c3lzcmVnICsgRFNEX0NGR19NVVgpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0 aWMgaW50IG1pY19zd19yZXNldChzdHJ1Y3QgZXh5bm9zX21pYyAqbWljKQo+ID4gK3sKPiA+ICsJ dW5zaWduZWQgaW50IHJldHJ5ID0gMTAwOwo+ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwl3cml0 ZWwoTUlDX1NXX1JTVCwgbWljLT5yZWcgKyBNSUNfT1ApOwo+ID4gKwo+ID4gKwl3aGlsZSAocmV0 cnktLSA+IDApIHsKPiA+ICsJCXJldCA9IHJlYWRsKG1pYy0+cmVnICsgTUlDX09QKTsKPiA+ICsJ CWlmICghKHJldCAmIE1JQ19TV19SU1QpKQo+ID4gKwkJCXJldHVybiAwOwo+ID4gKwo+ID4gKwkJ dWRlbGF5KDEwKTsKPiA+ICsJfQo+ID4gKwo+ID4gKwlyZXR1cm4gLUVUSU1FRE9VVDsKPiA+ICt9 Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbWljX3NldF9wb3JjaF90aW1pbmcoc3RydWN0IGV4eW5v c19taWMgKm1pYykKPiA+ICt7Cj4gPiArCXN0cnVjdCB2aWRlb21vZGUgdm07Cj4gPiArCXUzMiBy ZWc7Cj4gPiArCj4gPiArCWlmICghbWljLT5pODBfbW9kZSkgewo+IAo+IEl0J2QgYmUgYmV0dGVy IHRvIGNoZWNrIGl0IGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhpcwo+IGZ1bmNp b24gY2FsbCByZWFsbHkgaXMgdW5uZWNlc3NhcnkgaW4gY2FzZSBvZiBpODAgbW9kZS4KPiAKCgo+ ID4gKwkJdm0gPSBtaWMtPnZtOwo+ID4gKwo+ID4gKwkJcmVnID0gTUlDX1ZfUFVMU0VfV0lEVEgo dm0udnN5bmNfbGVuKSArCj4gPiArCQkJTUlDX1ZfUEVSSU9EX0xJTkUodm0udnN5bmNfbGVuICsK PiA+IHZtLnZhY3RpdmUgKwo+ID4gKwkJCQkJdm0udmJhY2tfcG9yY2ggKwo+ID4gdm0udmZyb250 X3BvcmNoKTsKPiA+ICsJCXdyaXRlbChyZWcsIG1pYy0+cmVnICsgTUlDX1ZfVElNSU5HXzApOwo+ ID4gKwo+ID4gKwkJcmVnID0gTUlDX1ZCUF9TSVpFKHZtLnZiYWNrX3BvcmNoKSArCj4gPiArCj4g PiBNSUNfVkZQX1NJWkUodm0udmZyb250X3BvcmNoKTsKPiA+ICsJCXdyaXRlbChyZWcsIG1pYy0+ cmVnICsgTUlDX1ZfVElNSU5HXzEpOwo+ID4gKwo+ID4gKwkJcmVnID0gTUlDX1ZfUFVMU0VfV0lE VEgodm0uaHN5bmNfbGVuKSArCj4gPiArCQkJTUlDX1ZfUEVSSU9EX0xJTkUodm0uaHN5bmNfbGVu ICsKPiA+IHZtLmhhY3RpdmUgKwo+ID4gKwkJCQkJdm0uaGJhY2tfcG9yY2ggKwo+ID4gdm0uaGZy b250X3BvcmNoKTsKPiA+ICsJCXdyaXRlbChyZWcsIG1pYy0+cmVnICsgTUlDX0lOUFVUX1RJTUlO R18wKTsKPiA+ICsKPiA+ICsJCXJlZyA9IE1JQ19WQlBfU0laRSh2bS5oYmFja19wb3JjaCkgKwo+ ID4gKwo+ID4gTUlDX1ZGUF9TSVpFKHZtLmhmcm9udF9wb3JjaCk7Cj4gPiArCQl3cml0ZWwocmVn LCBtaWMtPnJlZyArIE1JQ19JTlBVVF9USU1JTkdfMSk7Cj4gPiArCX0KPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIHZvaWQgbWljX3NldF9pbWdfc2l6ZShzdHJ1Y3QgZXh5bm9zX21pYyAqbWljKQo+ ID4gK3sKPiA+ICsJc3RydWN0IHZpZGVvbW9kZSAqdm0gPSAmbWljLT52bTsKPiA+ICsJdTMyIHJl ZzsKPiA+ICsKPiA+ICsJcmVnID0gTUlDX0lNR19IX1NJWkUodm0tPmhhY3RpdmUpICsKPiA+ICsJ CU1JQ19JTUdfVl9TSVpFKHZtLT52YWN0aXZlKTsKPiA+ICsKPiA+ICsJd3JpdGVsKHJlZywgbWlj LT5yZWcgKyBNSUNfSU1HX1NJWkUpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBtaWNf c2V0X291dHB1dF90aW1pbmcoc3RydWN0IGV4eW5vc19taWMgKm1pYykKPiA+ICt7Cj4gPiArCXN0 cnVjdCB2aWRlb21vZGUgdm0gPSBtaWMtPnZtOwo+ID4gKwl1MzIgcmVnLCBic19zaXplXzJkOwo+ ID4gKwo+ID4gKwlEUk1fREVCVUcoInc6ICV1LCBoOiAldVxuIiwgdm0uaGFjdGl2ZSwgdm0udmFj dGl2ZSk7Cj4gPiArCWJzX3NpemVfMmQgPSAoKHZtLmhhY3RpdmUgPj4gMikgPDwgMSkgKyAodm0u dmFjdGl2ZSAlIDQpOwo+ID4gKwlyZWcgPSBNSUNfQlNfU0laRV8yRChic19zaXplXzJkKTsKPiA+ ICsJd3JpdGVsKHJlZywgbWljLT5yZWcgKyBNSUNfMkRfT1VUUFVUX1RJTUlOR18yKTsKPiA+ICsK PiA+ICsJaWYgKCFtaWMtPmk4MF9tb2RlKSB7Cj4gCj4gRGl0dG8uCj4gCj4gPiArCQlyZWcgPSBN SUNfSF9QVUxTRV9XSURUSF8yRCh2bS5oc3luY19sZW4pICsKPiA+ICsJCQlNSUNfSF9QRVJJT0Rf UElYRUxfMkQodm0uaHN5bmNfbGVuICsKPiA+IGJzX3NpemVfMmQgKwo+ID4gKwkJCQkJdm0uaGJh Y2tfcG9yY2ggKwo+ID4gdm0uaGZyb250X3BvcmNoKTsKPiA+ICsJCXdyaXRlbChyZWcsIG1pYy0+ cmVnICsgTUlDXzJEX09VVFBVVF9USU1JTkdfMCk7Cj4gPiArCj4gPiArCQlyZWcgPSBNSUNfSEJQ X1NJWkVfMkQodm0uaGJhY2tfcG9yY2gpICsKPiA+ICsJCQlNSUNfSF9QRVJJT0RfUElYRUxfMkQo dm0uaGZyb250X3BvcmNoKTsKPiA+ICsJCXdyaXRlbChyZWcsIG1pYy0+cmVnICsgTUlDXzJEX09V VFBVVF9USU1JTkdfMSk7Cj4gPiArCX0KPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbWlj X3NldF9yZWdfb24oc3RydWN0IGV4eW5vc19taWMgKm1pYywgYm9vbCBlbmFibGUpCj4gPiArewo+ ID4gKwl1MzIgcmVnID0gcmVhZGwobWljLT5yZWcgKyBNSUNfT1ApOwo+ID4gKwo+ID4gKwlpZiAo ZW5hYmxlKSB7Cj4gPiArCQlyZWcgJj0gfihNSUNfTU9ERV9TRUxfTUFTSyB8IE1JQ19DT1JFX1ZF Ul9DT05UUk9MCj4gPiB8IE1JQ19QU1JfRU4pOwo+ID4gKwkJcmVnIHw9IChNSUNfQ09SRV9FTiB8 IE1JQ19CU19DSEdfT1VUIHwgTUlDX09OX1JFRyk7Cj4gPiArCj4gPiArCQlpZiAobWljLT5pODBf bW9kZSkKPiA+ICsJCQlyZWcgfD0gTUlDX01PREVfU0VMX0NPTU1BTkRfTU9ERTsKPiAKPiBTZXQg ZXhwbGljaXRseSBpdCB0byB2aWRlbyBtb2RlIGluIGNhc2Ugb2YgUkdCIG1vZGUgZXZlbiB0aG91 Z2gKPiBNT0RFX1NFVCBmaWVsZCBvZiB0aGlzIHJlZ2lzdGVyIGhhcyAweDAgYXMgZGVmYXVsdC4K PiAKPiBpLmUuLAo+ICAgICAgICAgICAgICAgIHJlZyAgJj0gfk1JQ19NT0RFX1NFTF9DT01NQU5E X01PREU7Cj4gICAgICAgICAgICAgICAgaWYgKG1pYy0+aTgwX21vZGUpCj4gICAgICAgICAgICAg ICAgICAgICAgICAgcmVnIHw9IE1JQ19NT0RFX1NFTF9DT01NQU5EX01PREU7Cj4gCj4gPiArCX0g ZWxzZSB7Cj4gPiArCQlyZWcgJj0gfk1JQ19DT1JFX0VOOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJl ZyB8PSBNSUNfVVBEX1JFRzsKPiA+ICsJd3JpdGVsKHJlZywgbWljLT5yZWcgKyBNSUNfT1ApOwo+ ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpnZXRfcmVtb3RlX25v ZGUoc3RydWN0IGRldmljZV9ub2RlCj4gPiAqZnJvbSwgaW50IHJlZykgK3sKPiA+ICsJc3RydWN0 IGRldmljZV9ub2RlICplbmRwb2ludCA9IE5VTEwsICpyZW1vdGVfbm9kZSA9IE5VTEw7Cj4gPiAr Cj4gPiArCWVuZHBvaW50ID0gb2ZfZ3JhcGhfZ2V0X2VuZHBvaW50X2J5X3JlZ3MoZnJvbSwgcmVn LCAtMSk7Cj4gPiArCWlmICghZW5kcG9pbnQpIHsKPiA+ICsJCURSTV9FUlJPUigibWljOiBGYWls ZWQgdG8gZmluZCByZW1vdGUgcG9ydCBmcm9tCj4gPiAlcyIsCj4gPiArCQkJCWZyb20tPmZ1bGxf bmFtZSk7Cj4gPiArCQlnb3RvIGV4aXQ7Cj4gPiArCX0KPiA+ICsKPiA+ICsJcmVtb3RlX25vZGUg PSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVuZHBvaW50KTsKPiA+ICsJaWYgKCFy ZW1vdGVfbm9kZSkgewo+ID4gKwkJRFJNX0VSUk9SKCJtaWM6IEZhaWxlZCB0byBmaW5kIHJlbW90 ZSBwb3J0IHBhcmVudAo+ID4gZnJvbSAlcyIsCj4gPiArCj4gPiBmcm9tLT5mdWxsX25hbWUpOwo+ ID4gKwkJZ290byBleGl0Owo+ID4gKwl9Cj4gPiArCj4gPiArZXhpdDoKPiA+ICsJb2Zfbm9kZV9w dXQoZW5kcG9pbnQpOwo+ID4gKwlyZXR1cm4gcmVtb3RlX25vZGU7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyBpbnQgcGFyc2VfZHQoc3RydWN0IGV4eW5vc19taWMgKm1pYykKPiA+ICt7Cj4gPiAr CWludCByZXQgPSAwLCBpLCBqOwo+ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJlbW90ZV9ub2Rl Owo+ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGVzWzNdOwo+ID4gKwo+ID4gKwkvKgo+ID4g KwkgKiBUaGUgb3JkZXIgb2YgZW5kcG9pbnRzIGRvZXMgbWF0dGVyLgo+ID4gKwkgKiBUaGUgZmly c3Qgbm9kZSBtdXN0IGJlIGZvciBkZWNvbiBhbmQgdGhlIHNlY29uZCBvbmUKPiA+IG11c3QgYmUg Zm9yIGRzaS4KPiA+ICsJICovCj4gPiArCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgTlVNX0VORFBP SU5UUzsgaSsrKSB7Cj4gPiArCQlyZW1vdGVfbm9kZSA9IGdldF9yZW1vdGVfbm9kZShtaWMtPmRl di0+b2Zfbm9kZSwKPiA+IGkpOwo+ID4gKwkJaWYgKCFyZW1vdGVfbm9kZSkgewo+ID4gKwkJCXJl dCA9IC1FUElQRTsKPiA+ICsJCQlnb3RvIGV4aXQ7Cj4gPiArCQl9Cj4gPiArCQlub2Rlc1tqKytd ID0gcmVtb3RlX25vZGU7Cj4gPiArCj4gPiArCQlzd2l0Y2ggKGkpIHsKPiA+ICsJCWNhc2UgRU5E UE9JTlRfREVDT05fTk9ERToKPiA+ICsJCQkvKiBkZWNvbiBub2RlICovCj4gPiArCQkJaWYgKG9m X2dldF9jaGlsZF9ieV9uYW1lKHJlbW90ZV9ub2RlLAo+ID4gKwkJCQkJCSJpODAtaWYtdGltaW5n cyIpKQo+ID4gKwkJCQltaWMtPmk4MF9tb2RlID0gMTsKPiA+ICsKPiA+ICsJCQlicmVhazsKPiA+ ICsJCWNhc2UgRU5EUE9JTlRfRFNJX05PREU6Cj4gPiArCQkJLyogcGFuZWwgbm9kZSAqLwo+ID4g KwkJCXJlbW90ZV9ub2RlID0gZ2V0X3JlbW90ZV9ub2RlKHJlbW90ZV9ub2RlLAo+ID4gMSk7Cj4g PiArCQkJaWYgKCFyZW1vdGVfbm9kZSkgewo+ID4gKwkJCQlyZXQgPSAtRVBJUEU7Cj4gPiArCQkJ CWdvdG8gZXhpdDsKPiA+ICsJCQl9Cj4gPiArCQkJbm9kZXNbaisrXSA9IHJlbW90ZV9ub2RlOwo+ ID4gKwo+ID4gKwkJCXJldCA9IG9mX2dldF92aWRlb21vZGUocmVtb3RlX25vZGUsCj4gPiArCQkJ CQkJCSZtaWMtPnZtLAo+ID4gMCk7Cj4gPiArCQkJaWYgKHJldCkgewo+ID4gKwkJCQlEUk1fRVJS T1IoIm1pYzogZmFpbGVkIHRvIGdldAo+ID4gdmlkZW9tb2RlIik7Cj4gPiArCQkJCWdvdG8gZXhp dDsKPiA+ICsJCQl9Cj4gPiArCj4gPiArCQkJYnJlYWs7Cj4gPiArCQlkZWZhdWx0Ogo+ID4gKwkJ CURSTV9FUlJPUigibWljOiBVbmtub3duIGVuZHBvaW50IGZyb20KPiA+IE1JQyIpOwo+ID4gKwkJ CWJyZWFrOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArZXhpdDoKPiA+ICsJd2hpbGUgKC0t aiA+IC0xKQo+ID4gKwkJb2Zfbm9kZV9wdXQobm9kZXNbal0pOwo+ID4gKwo+ID4gKwlyZXR1cm4g cmV0Owo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIG1pY19kaXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdl ICpicmlkZ2UpIHsgfQo+IAo+IEl0IHNlZW1zIHRoYXQgZHJtX2VuY29kZXJfZGlzYWJsZSBmdW5j dGlvbiBvZiBkcm1fY3J0Y19oZWxwZXIuYwo+IGRvZXNuJ3QgY2hlY2sgaWYgdGhlIGRpc2FibGUg Y2FsbGJhY2sgaXMgTlVMTCBvciBub3QuIEFueXdheSwgbm8KPiBwcm9ibGVtIGJ1dCB0aGlzIGZ1 bnRpb24gY291bGQgYmUgcmVtb3ZlZCB3aXRoIHRoZSBkaXNhYmxlIGNhbGxiYWNrCj4gY2hlY2tp bmcgbGF0ZXIuCj4gCj4gPiArCj4gPiArdm9pZCBtaWNfcG9zdF9kaXNhYmxlKHN0cnVjdCBkcm1f YnJpZGdlICpicmlkZ2UpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZXh5bm9zX21pYyAqbWljID0gYnJp ZGdlLT5kcml2ZXJfcHJpdmF0ZTsKPiA+ICsJaW50IGk7Cj4gPiArCj4gPiArCW11dGV4X2xvY2so Jm1pY19tdXRleCk7Cj4gPiArCWlmICghbWljLT5lbmFibGVkKQo+ID4gKwkJZ290byBhbHJlYWR5 X2Rpc2FibGVkOwo+ID4gKwo+ID4gKwltaWNfc2V0X3BhdGgobWljLCAwKTsKPiA+ICsKPiA+ICsJ Zm9yIChpID0gTlVNX0NMS1MgLSAxOyBpID4gLTE7IGktLSkKPiA+ICsJCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShtaWMtPmNsa3NbaV0pOwo+ID4gKwo+ID4gKwltaWMtPmVuYWJsZWQgPSAwOwo+ID4g Kwo+ID4gK2FscmVhZHlfZGlzYWJsZWQ6Cj4gPiArCW11dGV4X3VubG9jaygmbWljX211dGV4KTsK PiA+ICt9Cj4gPiArCj4gPiArdm9pZCBtaWNfcHJlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAq YnJpZGdlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGV4eW5vc19taWMgKm1pYyA9IGJyaWRnZS0+ZHJp dmVyX3ByaXZhdGU7Cj4gPiArCWludCByZXQsIGk7Cj4gPiArCj4gPiArCW11dGV4X2xvY2soJm1p Y19tdXRleCk7Cj4gPiArCWlmIChtaWMtPmVuYWJsZWQpCj4gPiArCQlnb3RvIGFscmVhZHlfZW5h YmxlZDsKPiA+ICsKPiA+ICsJZm9yIChpID0gMDsgaSA8IE5VTV9DTEtTOyBpKyspIHsKPiA+ICsJ CXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShtaWMtPmNsa3NbaV0pOwo+ID4gKwkJaWYgKHJldCA8 IDApIHsKPiA+ICsJCQlEUk1fRVJST1IoIkZhaWxlZCB0byBlbmFibGUgY2xvY2sgKCVzKVxuIiwK PiA+ICsKPiA+IGNsa19uYW1lc1tpXSk7Cj4gPiArCQkJZ290byB0dXJuX29mZl9jbGtzOwo+ID4g KwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCW1pY19zZXRfcGF0aChtaWMsIDEpOwo+ID4gKwo+ID4g KwlyZXQgPSBtaWNfc3dfcmVzZXQobWljKTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJRFJNX0VS Uk9SKCJGYWlsZWQgdG8gcmVzZXRcbiIpOwo+ID4gKwkJZ290byB0dXJuX29mZl9jbGtzOwo+ID4g Kwl9Cj4gPiArCj4gPiArCW1pY19zZXRfcG9yY2hfdGltaW5nKG1pYyk7Cj4gPiArCW1pY19zZXRf aW1nX3NpemUobWljKTsKPiA+ICsJbWljX3NldF9vdXRwdXRfdGltaW5nKG1pYyk7Cj4gPiArCW1p Y19zZXRfcmVnX29uKG1pYywgMSk7Cj4gPiArCW1pYy0+ZW5hYmxlZCA9IDE7Cj4gPiArCW11dGV4 X3VubG9jaygmbWljX211dGV4KTsKPiA+ICsKPiA+ICsJcmV0dXJuOwo+ID4gKwo+ID4gK3R1cm5f b2ZmX2Nsa3M6Cj4gPiArCXdoaWxlICgtLWkgPiAtMSkKPiA+ICsJCWNsa19kaXNhYmxlX3VucHJl cGFyZShtaWMtPmNsa3NbaV0pOwo+ID4gK2FscmVhZHlfZW5hYmxlZDoKPiA+ICsJbXV0ZXhfdW5s b2NrKCZtaWNfbXV0ZXgpOwo+ID4gK30KPiA+ICsKPiA+ICt2b2lkIG1pY19lbmFibGUoc3RydWN0 IGRybV9icmlkZ2UgKmJyaWRnZSkgeyB9Cj4gPiArCj4gPiArdm9pZCBtaWNfZGVzdHJveShzdHJ1 Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQo+ID4gK3sKPiA+ICsJc3RydWN0IGV4eW5vc19taWMgKm1p YyA9IGJyaWRnZS0+ZHJpdmVyX3ByaXZhdGU7Cj4gPiArCWludCBpOwo+ID4gKwo+ID4gKwltdXRl eF9sb2NrKCZtaWNfbXV0ZXgpOwo+ID4gKwlpZiAoIW1pYy0+ZW5hYmxlZCkKPiA+ICsJCWdvdG8g YWxyZWFkeV9kaXNhYmxlZDsKPiA+ICsKPiA+ICsJZm9yIChpID0gTlVNX0NMS1MgLSAxOyBpID4g LTE7IGktLSkKPiA+ICsJCWNsa19kaXNhYmxlX3VucHJlcGFyZShtaWMtPmNsa3NbaV0pOwo+ID4g Kwo+ID4gK2FscmVhZHlfZGlzYWJsZWQ6Cj4gPiArCW11dGV4X3VubG9jaygmbWljX211dGV4KTsK PiA+ICt9Cj4gPiArCj4gPiArc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgbWljX2JyaWRnZV9mdW5j cyA9IHsKPiA+ICsJLmRpc2FibGUgPSBtaWNfZGlzYWJsZSwKPiA+ICsJLnBvc3RfZGlzYWJsZSA9 IG1pY19wb3N0X2Rpc2FibGUsCj4gPiArCS5wcmVfZW5hYmxlID0gbWljX3ByZV9lbmFibGUsCj4g PiArCS5lbmFibGUgPSBtaWNfZW5hYmxlLAo+ID4gK307Cj4gPiArCj4gPiAraW50IGV4eW5vc19t aWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ICt7Cj4gPiArCXN0cnVj dCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gPiArCXN0cnVjdCBleHlub3NfbWljICptaWM7 Cj4gPiArCXN0cnVjdCByZXNvdXJjZSByZXM7Cj4gPiArCWludCByZXQsIGk7Cj4gPiArCj4gPiAr CW1pYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWljKSwgR0ZQX0tFUk5FTCk7Cj4gPiAr CWlmICghbWljKSB7Cj4gPiArCQlEUk1fRVJST1IoIm1pYzogRmFpbGVkIHRvIGFsbG9jYXRlIG1l bW9yeSBmb3IgTUlDCj4gPiBvYmplY3RcbiIpOwo+ID4gKwkJcmV0ID0gLUVOT01FTTsKPiA+ICsJ CWdvdG8gZXJyOwo+ID4gKwl9Cj4gPiArCj4gPiArCW1pYy0+ZGV2ID0gZGV2Owo+ID4gKwo+ID4g KwlyZXQgPSBwYXJzZV9kdChtaWMpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZ290byBlcnI7Cj4g PiArCj4gPiArCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZGV2LT5vZl9ub2RlLCAwLCAm cmVzKTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJRFJNX0VSUk9SKCJtaWM6IEZhaWxlZCB0byBn ZXQgbWVtIHJlZ2lvbiBmb3IKPiA+IE1JQ1xuIik7Cj4gPiArCQlnb3RvIGVycjsKPiA+ICsJfQo+ ID4gKwltaWMtPnJlZyA9IGRldm1faW9yZW1hcChkZXYsIHJlcy5zdGFydCwKPiA+IHJlc291cmNl X3NpemUoJnJlcykpOwo+ID4gKwlpZiAoIW1pYy0+cmVnKSB7Cj4gPiArCQlEUk1fRVJST1IoIm1p YzogRmFpbGVkIHRvIHJlbWFwIGZvciBNSUNcbiIpOwo+ID4gKwkJcmV0ID0gLUVOT01FTTsKPiA+ ICsJCWdvdG8gZXJyOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVz b3VyY2UoZGV2LT5vZl9ub2RlLCAxLCAmcmVzKTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJRFJN X0VSUk9SKCJtaWM6IEZhaWxlZCB0byBnZXQgbWVtIHJlZ2lvbiBmb3IKPiA+IE1JQ1xuIik7Cj4g PiArCQlnb3RvIGVycjsKPiA+ICsJfQo+ID4gKwltaWMtPnN5c3JlZyA9IGRldm1faW9yZW1hcChk ZXYsIHJlcy5zdGFydCwKPiA+IHJlc291cmNlX3NpemUoJnJlcykpOwo+IAo+IENvbnNpZGVyIHRv IHVzZSBzeXNjb24gZnJhbWV3b3JrIHRvIGFjY2VzcyBzeXN0ZW0gcmVnaXN0ZXJzLgo+IAo+ID4g KwlpZiAoIW1pYy0+c3lzcmVnKSB7Cj4gPiArCQlEUk1fRVJST1IoIm1pYzogRmFpbGVkIHRvIHJl bWFwIGZvciBNSUNcbiIpOwo+ID4gKwkJZ290byBlcnI7Cj4gPiArCX0KPiA+ICsKPiA+ICsJbWlj LT5icmlkZ2UuZnVuY3MgPSAmbWljX2JyaWRnZV9mdW5jczsKPiA+ICsJbWljLT5icmlkZ2Uub2Zf bm9kZSA9IGRldi0+b2Zfbm9kZTsKPiA+ICsJbWljLT5icmlkZ2UuZHJpdmVyX3ByaXZhdGUgPSBt aWM7Cj4gPiArCXJldCA9IGRybV9icmlkZ2VfYWRkKCZtaWMtPmJyaWRnZSk7Cj4gPiArCWlmIChy ZXQpIHsKPiA+ICsJCURSTV9FUlJPUigibWljOiBGYWlsZWQgdG8gYWRkIE1JQyB0byB0aGUgZ2xv YmFsCj4gPiBicmlkZ2UgbGlzdFxuIik7Cj4gPiArCQlnb3RvIGVycjsKPiA+ICsJfQo+ID4gKwo+ ID4gKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NMS1M7IGkrKykgewo+ID4gKwkJbWljLT5jbGtzW2ld ID0gb2ZfY2xrX2dldF9ieV9uYW1lKGRldi0+b2Zfbm9kZSwKPiA+IGNsa19uYW1lc1tpXSk7Cj4g PiArCQlpZiAoSVNfRVJSKG1pYy0+Y2xrc1tpXSkpIHsKPiA+ICsJCQlEUk1fRVJST1IoIm1pYzog RmFpbGVkIHRvIGdldCBjbG9jawo+ID4gKCVzKVxuIiwKPiA+ICsKPiA+IGNsa19uYW1lc1tpXSk7 Cj4gPiArCQkJcmV0ID0gUFRSX0VSUihtaWMtPmNsa3NbaV0pOwo+ID4gKwkJCWdvdG8gZXJyOwo+ ID4gKwkJfQo+ID4gKwl9Cj4gPiArCj4gPiArCURSTV9JTkZPKCJNSUMgaGFzIGJlZW4gcHJvYmVk XG4iKTsKPiAKPiBVc2UgRFJNX0RFQlVHX0tNUyBpbnN0ZWFkLgo+IAo+IFRoYW5rcywKPiBJbmtp IERhZQo+IAo+ID4gKwo+ID4gK2VycjoKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4g PiArc3RhdGljIGludCBleHlub3NfbWljX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQo+ID4gK3sKPiA+ICsJc3RydWN0IGV4eW5vc19taWMgKm1pYyA9IHBsYXRmb3JtX2dldF9k cnZkYXRhKHBkZXYpOwo+ID4gKwlpbnQgaTsKPiA+ICsKPiA+ICsJZHJtX2JyaWRnZV9yZW1vdmUo Jm1pYy0+YnJpZGdlKTsKPiA+ICsKPiA+ICsJZm9yIChpID0gTlVNX0NMS1MgLSAxOyBpID4gLTE7 IGktLSkKPiA+ICsJCWNsa19wdXQobWljLT5jbGtzW2ldKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7 Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGV4eW5v c19taWNfb2ZfbWF0Y2hbXSA9IHsKPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5v czU0MzMtbWljIiB9LAo+ID4gKwl7IH0KPiA+ICt9Owo+ID4gK01PRFVMRV9ERVZJQ0VfVEFCTEUo b2YsIGV4eW5vc19taWNfb2ZfbWF0Y2gpOwo+ID4gKwo+ID4gK3N0cnVjdCBwbGF0Zm9ybV9kcml2 ZXIgbWljX2RyaXZlciA9IHsKPiA+ICsJLnByb2JlCQk9IGV4eW5vc19taWNfcHJvYmUsCj4gPiAr CS5yZW1vdmUJCT0gZXh5bm9zX21pY19yZW1vdmUsCj4gPiArCS5kcml2ZXIJCT0gewo+ID4gKwkJ Lm5hbWUJPSAiZXh5bm9zLW1pYyIsCj4gPiArCQkub3duZXIJPSBUSElTX01PRFVMRSwKPiA+ICsJ CS5vZl9tYXRjaF90YWJsZSA9IGV4eW5vc19taWNfb2ZfbWF0Y2gsCj4gPiArCX0sCj4gPiArfTsK PiA+IC0tCj4gPiAxLjkuMQo+ID4gCj4gPiAKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCg==