From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-gx0-f177.google.com ([209.85.161.177]) by canuck.infradead.org with esmtp (Exim 4.72 #1 (Red Hat Linux)) id 1P3pnv-0003Zz-Jm for barebox@lists.infradead.org; Thu, 07 Oct 2010 12:42:40 +0000 Received: by gxk27 with SMTP id 27so370902gxk.36 for ; Thu, 07 Oct 2010 05:42:34 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <1286454535-695-4-git-send-email-jbe@pengutronix.de> References: <1286454535-695-1-git-send-email-jbe@pengutronix.de> <1286454535-695-4-git-send-email-jbe@pengutronix.de> Date: Thu, 7 Oct 2010 14:42:33 +0200 Message-ID: From: Belisko Marek List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: barebox-bounces@lists.infradead.org Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: Re: [PATCH 3/3] Add S3C2440 MCI card support To: Juergen Beisert Cc: barebox@lists.infradead.org, Juergen Beisert T24gVGh1LCBPY3QgNywgMjAxMCBhdCAyOjI4IFBNLCBKdWVyZ2VuIEJlaXNlcnQgPGpiZUBwZW5n dXRyb25peC5kZT4gd3JvdGU6Cj4gRnJvbTogSnVlcmdlbiBCZWlzZXJ0IDxqdWVyZ2VuQGtyZXV6 aG9semVuLmRlPgo+Cj4gQWRkaW5nIE1DSSBjYXJkIHN1cHBvcnQgZm9yIFMzQzI0NDAgQ1BVcy4g VGhpcyBpcyBmb3IgcmVmZXJlbmNlIG9ubHksIGFzIHRoZXJlCj4gaXMgY3VycmVudGx5IG5vIHVz ZXIgaW4gdGhlIGJhcmVib3ggdHJlZS4gTWF5YmUgb25lIHdpdGggYWNjZXNzIHRvIHRoZSBBOU0y NDQwCj4gZGV2ZWxvcG1lbnQga2l0IGNhbiBjaGVjayBpdCBvbiBoaXMvaGVyIHN5c3RlbS4KPiBD aGVja2VkIGhlcmUgd2l0aCBteSBvd24gUzNDMjQ0MCBiYXNlZCBzeXN0ZW0gd2hpY2ggaXMgbm90 IGluIHRoZSBiYXJlYm94IHRyZWUuCkkgd2lsbCB0cnkgdG9tb3Jyb3cgYWxzbyBvbiBtaW5pMjQ0 MCBkZXYuIGJvYXJkLgo+Cj4gU2lnbmVkLW9mZi1ieTogSnVlcmdlbiBCZWlzZXJ0IDxqdWVyZ2Vu QGtyZXV6aG9semVuLmRlPgo+IC0tLQo+IMKgYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2luY2x1ZGUv bWFjaC9tY2kuaCB8IMKgIDQyICsrCj4gwqBkcml2ZXJzL21jaS9LY29uZmlnIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgfCDCoCDCoDggKy0KPiDCoGRyaXZlcnMvbWNpL01ha2VmaWxl IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHwgwqAgwqAxICsKPiDCoGRyaXZlcnMvbWNp L3MzYy5jIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgfCDCoDc5OSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKPiDCoDQgZmlsZXMgY2hhbmdlZCwgODQ5IGluc2VydGlv bnMoKyksIDEgZGVsZXRpb25zKC0pCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9hcm0vbWFj aC1zM2MyNHh4L2luY2x1ZGUvbWFjaC9tY2kuaAo+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvbWNpL3MzYy5jCj4KPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2luY2x1 ZGUvbWFjaC9tY2kuaCBiL2FyY2gvYXJtL21hY2gtczNjMjR4eC9pbmNsdWRlL21hY2gvbWNpLmgK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmZjM2E0ZDYKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNHh4L2luY2x1ZGUvbWFjaC9tY2kuaAo+ IEBAIC0wLDAgKzEsNDIgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IDIwMDgsIEZyZWVzY2FsZSBT ZW1pY29uZHVjdG9yLCBJbmMKPiArICogQW5keSBGbGVtaW5nCj4gKyAqCj4gKyAqIEJhc2VkIChs b29zZWx5KSBvbiB0aGUgTGludXggY29kZQo+ICsgKgo+ICsgKiBTZWUgZmlsZSBDUkVESVRTIGZv ciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwo+ICsgKiBwcm9qZWN0Lgo+ ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yCj4gKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCj4gKyAqIHRoZSBMaWNlbnNl LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgo+ICsgKgo+ICsgKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKPiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiDCoFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKPiArICogYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICog Rm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKPiAr ICogTUEgMDIxMTEtMTMwNyBVU0EKPiArICovCj4gKwo+ICsjaWZuZGVmIF9fTUFDSF9NTUNfSF8K PiArI2RlZmluZSBfX01BQ0hfTU1DX0hfCj4gKwo+ICtzdHJ1Y3QgczNjX21jaV9wbGF0Zm9ybV9k YXRhIHsKPiArIMKgIMKgIMKgIHVuc2lnbmVkIGNhcHM7IMKgLyoqPCBzdXBwb3J0ZWQgb3BlcmF0 aW5nIG1vZGVzIChNTUNfTU9ERV8qKSAqLwo+ICsgwqAgwqAgwqAgdW5zaWduZWQgdm9sdGFnZXM7 IC8qKjwgc3VwcG9ydGVkIHZvbHRhZ2UgcmFuZ2UgKE1NQ19WRERfKikgKi8KPiArIMKgIMKgIMKg IHVuc2lnbmVkIGZfbWluOyAvKio8IG1pbiBvcGVyYXRpbmcgZnJlcXVlbmN5IGluIEh6ICgwIC0+ IG5vIGxpbWl0KSAqLwo+ICsgwqAgwqAgwqAgdW5zaWduZWQgZl9tYXg7IC8qKjwgbWF4IG9wZXJh dGluZyBmcmVxdWVuY3kgaW4gSHogKDAgLT4gbm8gbGltaXQpICovCj4gKyDCoCDCoCDCoCAvKiBU T0RPICovCj4gKyDCoCDCoCDCoCAvKiBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHZvbHRhZ2UgKi8K PiArIMKgIMKgIMKgIC8qIGZ1bmN0aW9uIHRvIHN3aXRjaCB0aGUgdm9sdGFnZSAqLwo+ICsgwqAg wqAgwqAgLyogZnVuY3Rpb24gdG8gZGV0ZWN0IHRoZSBwcmVzZW5jZSBvZiBhIFNEIGNhcmQgaW4g dGhlIHNvY2tldCAqLwo+ICsgwqAgwqAgwqAgdW5zaWduZWQgZ3Bpb19kZXRlY3Q7Cj4gKyDCoCDC oCDCoCB1bnNpZ25lZCBkZXRlY3RfaW52ZXJ0Owo+ICt9Owo+ICsKPiArI2VuZGlmIC8qIF9fTUFD SF9NTUNfSF8gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tY2kvS2NvbmZpZyBiL2RyaXZlcnMv bWNpL0tjb25maWcKPiBpbmRleCBkNjdlMzgzLi42NDRjMGEzIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvbWNpL0tjb25maWcKPiArKysgYi9kcml2ZXJzL21jaS9LY29uZmlnCj4gQEAgLTM0LDUgKzM0 LDExIEBAIGNvbmZpZyBNQ0lfU1RNMzc4WAo+IMKgIMKgIMKgIMKgIMKgRW5hYmxlIHRoaXMgZW50 cnkgdG8gYWRkIHN1cHBvcnQgdG8gcmVhZCBhbmQgd3JpdGUgU0QgY2FyZHMgb24gYQo+IMKgIMKg IMKgIMKgIMKgaS5NWDIzIGJhc2VkIHN5c3RlbS4KPgo+IC1lbmRpZgo+ICtjb25maWcgTUNJX1Mz Qwo+ICsgwqAgwqAgwqAgYm9vbCAiUzNDIgo+ICsgwqAgwqAgwqAgZGVwZW5kcyBvbiBBUkNIX1Mz QzI0eHgKPiArIMKgIMKgIMKgIGhlbHAKPiArIMKgIMKgIMKgIMKgIEVuYWJsZSB0aGlzIGVudHJ5 IHRvIGFkZCBzdXBwb3J0IHRvIHJlYWQgYW5kIHdyaXRlIFNEIGNhcmRzIG9uIGEKPiArIMKgIMKg IMKgIMKgIFNhbXN1bmcgUzNDMjR4eCBiYXNlZCBzeXN0ZW0uCj4KPiArZW5kaWYKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9tY2kvTWFrZWZpbGUgYi9kcml2ZXJzL21jaS9NYWtlZmlsZQo+IGluZGV4 IGU1ZTE5YjAuLmJlMTg0NDYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9tY2kvTWFrZWZpbGUKPiAr KysgYi9kcml2ZXJzL21jaS9NYWtlZmlsZQo+IEBAIC0xLDIgKzEsMyBAQAo+IMKgb2JqLSQoQ09O RklHX01DSSkgwqAgwqAgwqArPSBtY2ktY29yZS5vCj4gwqBvYmotJChDT05GSUdfTUNJX1NUTTM3 OFgpICs9IHN0bTM3OHgubwo+ICtvYmotJChDT05GSUdfTUNJX1MzQykgKz0gczNjLm8KPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9tY2kvczNjLmMgYi9kcml2ZXJzL21jaS9zM2MuYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZDE2NDgzNAo+IC0tLSAvZGV2L251bGwKPiAr KysgYi9kcml2ZXJzL21jaS9zM2MuYwo+IEBAIC0wLDAgKzEsNzk5IEBACj4gKy8qCj4gKyAqIENv cHlyaWdodCAoQykgMjAxMCBKdWVyZ2VuIEJlaXNlcnQgPGp1ZXJnZW5Aa3JldXpob2x6ZW4uZGU+ Cj4gKyAqCj4gKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiB2YXJpb3VzIExpbnV4IGFuZCB1LWJv b3Qgc291cmNlczoKPiArICogwqBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBtYWludGVjaCBHbWJI LCBUaG9tYXMgS2xlZmZlbCA8dGtAbWFpbnRlY2guZGU+Cj4gKyAqIMKgQ29weXJpZ2h0IChDKSAy MDA4IFNpbXRlYyBFbGVjdHJvbmljcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KPiArICogwqAoQykg Q29weXJpZ2h0IDIwMDYgYnkgT3Blbk1va28sIEluYy4KPiArICogwqBBdXRob3I6IEhhcmFsZCBX ZWx0ZSA8bGFmb3JnZUBvcGVubW9rby5vcmc+Cj4gKyAqIMKgYmFzZWQgb24gdS1ib290IHB4YSBN TUMgZHJpdmVyIGFuZCBsaW51eC9kcml2ZXJzL21tYy9zM2MyNDEwbWNpLmMKPiArICogwqAoQykg MjAwNS0yMDA1IFRob21hcyBLbGVmZmVsCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKPiArICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKPiAr ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDIgb2YKPiArICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIMKgU2VlIHRoZQo+ICsg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo+ICsgKgo+ICsg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQo+ICsgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQo+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh Y2UsIFN1aXRlIDMzMCwgQm9zdG9uLAo+ICsgKiBNQSAwMjExMS0xMzA3IFVTQQo+ICsgKi8KPiAr Cj4gKy8qKgo+ICsgKiBAZmlsZQo+ICsgKiBAYnJpZWYgTUNJIGNhcmQgaG9zdCBpbnRlcmZhY2Ug Zm9yIFMzQzI0NDAgQ1BVCj4gKyAqLwo+ICsKPiArLyogI2RlZmluZSBERUJVRyAqLwo+ICsKPiAr I2luY2x1ZGUgPGNvbW1vbi5oPgo+ICsjaW5jbHVkZSA8aW5pdC5oPgo+ICsjaW5jbHVkZSA8bWNp Lmg+Cj4gKyNpbmNsdWRlIDxlcnJuby5oPgo+ICsjaW5jbHVkZSA8Y2xvY2suaD4KPiArI2luY2x1 ZGUgPGFzbS9pby5oPgo+ICsjaW5jbHVkZSA8bWFjaC9tY2kuaD4KPiArI2luY2x1ZGUgPG1hY2gv czNjMjR4eC1nZW5lcmljLmg+Cj4gKyNpbmNsdWRlIDxtYWNoL3MzYzI0eDAtaW9tYXAuaD4KPiAr Cj4gKyNkZWZpbmUgU0RJQ09OIDB4MAo+ICsjIGRlZmluZSBTRElDT05fU0RSRVNFVCAoMSA8PCA4 KQo+ICsjIGRlZmluZSBTRElDT05fTU1DQ0xPQ0sgKDEgPDwgNSkgLyogdGhpcyBpcyBhIGNsb2Nr IHR5cGUgU0Qgb3IgTU1DIHN0eWxlIFdURj8gKi8KPiArIyBkZWZpbmUgU0RJQ09OX0JZVEVPUkRF UiAoMSA8PCA0KQo+ICsjIGRlZmluZSBTRElDT05fU0RJT0lSUSAoMSA8PCAzKQo+ICsjIGRlZmlu ZSBTRElDT05fUldBSVRFTiAoMSA8PCAyKQo+ICsjIGRlZmluZSBTRElDT05fRklGT1JFU0VUICgx IDw8IDEpIC8qIHJlc2VydmVkIGJpdCBvbiAyNDQwID8/Pz8/ICovCj4gKyMgZGVmaW5lIFNESUNP Tl9DTEtFTiAoMSA8PCAwKSAvKiBlbmFibGUvZGlzYWJsZSBleHRlcm5hbCBjbG9jayAqLwo+ICsK PiArI2RlZmluZSBTRElQUkUgMHg0Cj4gKwo+ICsjZGVmaW5lIFNESUNNREFSRyAweDgKPiArCj4g KyNkZWZpbmUgU0RJQ01EQ09OIDB4Ywo+ICsjIGRlZmluZSBTRElDTURDT05fQUJPUlQgKDEgPDwg MTIpCj4gKyMgZGVmaW5lIFNESUNNRENPTl9XSVRIREFUQSAoMSA8PCAxMSkKPiArIyBkZWZpbmUg U0RJQ01EQ09OX0xPTkdSU1AgKDEgPDwgMTApCj4gKyMgZGVmaW5lIFNESUNNRENPTl9XQUlUUlNQ ICgxIDw8IDkpCj4gKyMgZGVmaW5lIFNESUNNRENPTl9DTURTVEFSVCAoMSA8PCA4KQo+ICsjIGRl ZmluZSBTRElDTURDT05fU0VOREVSSE9TVCAoMSA8PCA2KQo+ICsjIGRlZmluZSBTRElDTURDT05f SU5ERVggKDB4M2YpCj4gKwo+ICsjZGVmaW5lIFNESUNNRFNUQVQgMHgxMAo+ICsjIGRlZmluZSBT RElDTURTVEFUX0NSQ0ZBSUwgKDEgPDwgMTIpCj4gKyMgZGVmaW5lIFNESUNNRFNUQVRfQ01EU0VO VCAoMSA8PCAxMSkKPiArIyBkZWZpbmUgU0RJQ01EU1RBVF9DTURUSU1FT1VUICgxIDw8IDEwKQo+ ICsjIGRlZmluZSBTRElDTURTVEFUX1JTUEZJTiAoMSA8PCA5KQo+ICsjIGRlZmluZSBTRElDTURT VEFUX1hGRVJJTkcgKDEgPDwgOCkKPiArIyBkZWZpbmUgU0RJQ01EU1RBVF9JTkRFWCAoMHhmZikK PiArCj4gKyNkZWZpbmUgU0RJUlNQMCAweDE0Cj4gKyNkZWZpbmUgU0RJUlNQMSAweDE4Cj4gKyNk ZWZpbmUgU0RJUlNQMiAweDFDCj4gKyNkZWZpbmUgU0RJUlNQMyAweDIwCj4gKwo+ICsjZGVmaW5l IFNESVRJTUVSIDB4MjQKPiArI2RlZmluZSBTRElCU0laRSAweDI4Cj4gKwo+ICsjZGVmaW5lIFNE SURDT04gMHgyYwo+ICsjIGRlZmluZSBTRElEQ09OX0RTX0JZVEUgKDAgPDwgMjIpCj4gKyMgZGVm aW5lIFNESURDT05fRFNfSEFMRldPUkQgKDEgPDwgMjIpCj4gKyMgZGVmaW5lIFNESURDT05fRFNf V09SRCAoMiA8PCAyMikKPiArIyBkZWZpbmUgU0RJRENPTl9JUlFQRVJJT0QgKDEgPDwgMjEpCj4g KyMgZGVmaW5lIFNESURDT05fVFhBRlRFUlJFU1AgKDEgPDwgMjApCj4gKyMgZGVmaW5lIFNESURD T05fUlhBRlRFUkNNRCAoMSA8PCAxOSkKPiArIyBkZWZpbmUgU0RJRENPTl9CVVNZQUZURVJDTUQg KDEgPDwgMTgpCj4gKyMgZGVmaW5lIFNESURDT05fQkxPQ0tNT0RFICgxIDw8IDE3KQo+ICsjIGRl ZmluZSBTRElEQ09OX1dJREVCVVMgKDEgPDwgMTYpCj4gKyMgZGVmaW5lIFNESURDT05fRE1BRU4g KDEgPDwgMTUpCj4gKyMgZGVmaW5lIFNESURDT05fU1RPUCAoMCA8PCAxNCkKPiArIyBkZWZpbmUg U0RJRENPTl9EQVRTVEFSVCAoMSA8PCAxNCkKPiArIyBkZWZpbmUgU0RJRENPTl9EQVRNT0RFICgz IDw8IDEyKQo+ICsjIGRlZmluZSBTRElEQ09OX0JMS05VTSAoMHhmZmYpCj4gKyMgZGVmaW5lIFNE SURDT05fWEZFUl9SRUFEWSDCoCDCoCgwIDw8IDEyKQo+ICsjIGRlZmluZSBTRElEQ09OX1hGRVJf Q0hLU1RBUlQgKDEgPDwgMTIpCj4gKyMgZGVmaW5lIFNESURDT05fWEZFUl9SWFNUQVJUIMKgKDIg PDwgMTIpCj4gKyMgZGVmaW5lIFNESURDT05fWEZFUl9UWFNUQVJUIMKgKDMgPDwgMTIpCj4gKwo+ ICsjZGVmaW5lIFNESURDTlQgMHgzMAo+ICsjIGRlZmluZSBTRElEQ05UX0JMS05VTV9TSElGVCAx Mgo+ICsKPiArI2RlZmluZSBTRElEU1RBIDB4MzQKPiArIyBkZWZpbmUgU0RJRFNUQV9SRFlXQUlU UkVRICgxIDw8IDEwKQo+ICsjIGRlZmluZSBTRElEU1RBX1NESU9JUlFERVRFQ1QgKDEgPDwgOSkK PiArIyBkZWZpbmUgU0RJRFNUQV9GSUZPRkFJTCAoMSA8PCA4KSAvKiByZXNlcnZlZCBvbiAyNDQw ICovCj4gKyMgZGVmaW5lIFNESURTVEFfQ1JDRkFJTCAoMSA8PCA3KQo+ICsjIGRlZmluZSBTRElE U1RBX1JYQ1JDRkFJTCAoMSA8PCA2KQo+ICsjIGRlZmluZSBTRElEU1RBX0RBVEFUSU1FT1VUICgx IDw8IDUpCj4gKyMgZGVmaW5lIFNESURTVEFfWEZFUkZJTklTSCAoMSA8PCA0KQo+ICsjIGRlZmlu ZSBTRElEU1RBX0JVU1lGSU5JU0ggKDEgPDwgMykKPiArIyBkZWZpbmUgU0RJRFNUQV9TQklURVJS ICgxIDw8IDIpIC8qIHJlc2VydmVkIG9uIDI0MTBhLzI0NDAgKi8KPiArIyBkZWZpbmUgU0RJRFNU QV9UWERBVEFPTiAoMSA8PCAxKQo+ICsjIGRlZmluZSBTRElEU1RBX1JYREFUQU9OICgxIDw8IDAp Cj4gKwo+ICsjZGVmaW5lIFNESUZTVEEgMHgzOAo+ICsjIGRlZmluZSBTRElGU1RBX0ZJRk9SRVNF VCAoMTw8MTYpCj4gKyMgZGVmaW5lIFNESUZTVEFfRklGT0ZBSUwgKDM8PDE0KSDCoC8qIDMgaXMg Y29ycmVjdCAoMiBiaXRzKSAqLwo+ICsjIGRlZmluZSBTRElGU1RBX1RGREVUICgxPDwxMykKPiAr IyBkZWZpbmUgU0RJRlNUQV9SRkRFVCAoMTw8MTIpCj4gKyMgZGVmaW5lIFNESUZTVEFfVEZIQUxG ICgxPDwxMSkKPiArIyBkZWZpbmUgU0RJRlNUQV9URkVNUFRZICgxPDwxMCkKPiArIyBkZWZpbmUg U0RJRlNUQV9SRkxBU1QgKDE8PDkpCj4gKyMgZGVmaW5lIFNESUZTVEFfUkZGVUxMICgxPDw4KQo+ ICsjIGRlZmluZSBTRElGU1RBX1JGSEFMRiAoMTw8NykKPiArIyBkZWZpbmUgU0RJRlNUQV9DT1VO VE1BU0sgKDB4N2YpCj4gKwo+ICsjZGVmaW5lIFNESUlNU0sgMHgzQwo+ICsjIGRlZmluZSBTRElJ TVNLX1JFU1BPTlNFQ1JDIMKgIMKgKDE8PDE3KQo+ICsjIGRlZmluZSBTRElJTVNLX0NNRFNFTlQg wqAgwqAgwqAgwqAoMTw8MTYpCj4gKyMgZGVmaW5lIFNESUlNU0tfQ01EVElNRU9VVCDCoCDCoCAo MTw8MTUpCj4gKyMgZGVmaW5lIFNESUlNU0tfUkVTUE9OU0VORCDCoCDCoCAoMTw8MTQpCj4gKyMg ZGVmaW5lIFNESUlNU0tfUkVBRFdBSVQgwqAgwqAgwqAgKDE8PDEzKQo+ICsjIGRlZmluZSBTRElJ TVNLX1NESU9JUlEgwqAgwqAgwqAgwqAoMTw8MTIpCj4gKyMgZGVmaW5lIFNESUlNU0tfRklGT0ZB SUwgwqAgwqAgwqAgKDE8PDExKQo+ICsjIGRlZmluZSBTRElJTVNLX0NSQ1NUQVRVUyDCoCDCoCDC oCgxPDwxMCkKPiArIyBkZWZpbmUgU0RJSU1TS19EQVRBQ1JDIMKgIMKgIMKgIMKgKDE8PDkpCj4g KyMgZGVmaW5lIFNESUlNU0tfREFUQVRJTUVPVVQgwqAgwqAoMTw8OCkKPiArIyBkZWZpbmUgU0RJ SU1TS19EQVRBRklOSVNIIMKgIMKgICgxPDw3KQo+ICsjIGRlZmluZSBTRElJTVNLX0JVU1lGSU5J U0ggwqAgwqAgKDE8PDYpCj4gKyMgZGVmaW5lIFNESUlNU0tfU0JJVEVSUiDCoCDCoCDCoCDCoCgx PDw1KSAvKiByZXNlcnZlZCAyNDQwLzI0MTBhICovCj4gKyMgZGVmaW5lIFNESUlNU0tfVFhGSUZP SEFMRiDCoCDCoCAoMTw8NCkKPiArIyBkZWZpbmUgU0RJSU1TS19UWEZJRk9FTVBUWSDCoCDCoCgx PDwzKQo+ICsjIGRlZmluZSBTRElJTVNLX1JYRklGT0xBU1QgwqAgwqAgKDE8PDIpCj4gKyMgZGVm aW5lIFNESUlNU0tfUlhGSUZPRlVMTCDCoCDCoCAoMTw8MSkKPiArIyBkZWZpbmUgU0RJSU1TS19S WEZJRk9IQUxGIMKgIMKgICgxPDwwKQo+ICsKPiArI2RlZmluZSBTRElEQVRBIDB4NDAKPiArCj4g KyNkZWZpbmUgQ0xPQ0tSQVRFX01JTiAoMSAqIDEwMDAgKiAxMDAwKQo+ICsjZGVmaW5lIENMT0NL UkFURV9NQVggKDQ4MCAqIDEwMDAgKiAxMDAwKQo+ICsKPiArc3RydWN0IHMzY19tY2lfaG9zdCB7 Cj4gKyDCoCDCoCDCoCBpbnQgwqAgwqAgwqAgwqAgwqAgwqAgYnVzX3dpZHRoOjI7IC8qIDAgPSAx IGJpdCwgMSA9IDQgYml0LCAyID0gOCBiaXQgKi8KPiArIMKgIMKgIMKgIHVuc2lnbmVkIMKgIMKg IMKgIMKgY2xvY2s7IMKgLyogY3VycmVudCBjbG9jayBpbiBIeiAqLwo+ICsgwqAgwqAgwqAgdW5z aWduZWQgwqAgwqAgwqAgwqBkYXRhX3NpemU7IMKgIMKgIMKgLyogZGF0YSB0cmFuc2ZlciBpbiBi eXRlcyAqLwo+ICt9Owo+ICsKPiArLyoKPiArICogVGhlcmUgaXMgb25seSBvbmUgaG9zdCBNQ0kg aGFyZHdhcmUgaW5zdGFuY2UgYXZhaWxhYmxlLgo+ICsgKiBJdCBtYWtlcyBubyBzZW5zZSB0byBk eW5hbWljYWxseSBhbGxvY2F0ZSB0aGlzIGRhdGEKPiArICovCj4gK3N0YXRpYyBzdHJ1Y3QgczNj X21jaV9ob3N0IGhvc3RfZGF0YTsKPiArCj4gKy8qKgo+ICsgKiBGaW5pc2ggYSByZXF1ZXN0Cj4g KyAqIEBwYXJhbSBod19kZXYgSG9zdCBpbnRlcmZhY2UgaW5zdGFuY2UKPiArICoKPiArICogSnVz dCBhIGxpdHRsZSBiaXQgcGFyYW5vaWEuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBzM2NfZmluaXNo X3JlcXVlc3Qoc3RydWN0IGRldmljZV9kICpod19kZXYpCj4gK3sKPiArIMKgIMKgIMKgIC8qIFRP RE8gZW5zdXJlIHRoZSBlbmdpbmVzIGFyZSBzdG9wcGVkICovCj4gK30KPiArCj4gKy8qIFRPRE8g R1BJTyBmZWF0dXJlIGlzIHJlcXVpcmVkIGZvciB0aGlzIGFyY2hpdGVjdHVyZSAqLwo+ICtzdGF0 aWMgdW5zaWduZWQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgdmFsKQo+ICt7Cj4gKyDCoCDCoCDC oCByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIERldGVjdCBpZiBhIGNhcmQgaXMgcGx1 Z2dlZCBpbgo+ICsgKiBAcGFyYW0gaHdfZGV2IEhvc3QgaW50ZXJmYWNlIGluc3RhbmNlCj4gKyAq IEByZXR1cm4gMCBpZiBhIGNhcmQgaXMgcGx1Z2dlZCBpbgo+ICsgKgo+ICsgKiBOb3RlOiBJZiB0 aGVyZSBpcyBubyBHUElPIHJlZ2lzdGVyZWQgdG8gZGV0ZWN0IGlmIGEgY2FyZCBpcyBwcmVzZW50 LCB3ZQo+ICsgKiBhc3N1bWUgYSBjYXJkIF9pc18gcHJlc2VudC4KPiArICovCj4gK3N0YXRpYyBp bnQgczNjX21jaV9jYXJkX3ByZXNlbnQoc3RydWN0IGRldmljZV9kICpod19kZXYpCj4gK3sKPiAr IMKgIMKgIMKgIHN0cnVjdCBzM2NfbWNpX3BsYXRmb3JtX2RhdGEgKnBkID0gKHN0cnVjdCBzM2Nf bWNpX3BsYXRmb3JtX2RhdGEqKUdFVF9IT1NUX1BEQVRBKGh3X2Rldik7Cj4gKyDCoCDCoCDCoCBp bnQgcmV0Owo+ICsKPiArIMKgIMKgIMKgIGlmIChwZC0+Z3Bpb19kZXRlY3QgPT0gMCkKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAwOyDCoCDCoCDCoCAvKiBhc3N1bWUgdGhlIGNhcmQg aXMgcHJlc2VudCAqLwo+ICsKPiArIMKgIMKgIMKgIHJldCA9IGdwaW9fZ2V0X3ZhbHVlKHBkLT5n cGlvX2RldGVjdCkgPyAwIDogMTsKPiArIMKgIMKgIMKgIHJldHVybiByZXQgXiBwZC0+ZGV0ZWN0 X2ludmVydDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFNldHVwIGEgbmV3IGNsb2NrIGZyZXF1ZW5j eSBvbiB0aGlzIE1DSSBidXMKPiArICogQHBhcmFtIGh3X2RldiBIb3N0IGludGVyZmFjZSBpbnN0 YW5jZQo+ICsgKiBAcGFyYW0gbmMgTmV3IGNsb2NrIHZhbHVlIGluIEh6IChjYW4gYmUgMCkKPiAr ICogQHJldHVybiBOZXcgY2xvY2sgdmFsdWUgKG1heSBkaWZmZXIgZnJvbSAnbmMnKQo+ICsgKi8K PiArc3RhdGljIHVuc2lnbmVkIHMzY19zZXR1cF9jbG9ja19zcGVlZChzdHJ1Y3QgZGV2aWNlX2Qg Kmh3X2RldiwgdW5zaWduZWQgbmMpCj4gK3sKPiArIMKgIMKgIMKgIHVuc2lnbmVkIGNsb2NrOwo+ ICsgwqAgwqAgwqAgdWludDMyX3QgbWNpX3BzYzsKPiArCj4gKyDCoCDCoCDCoCBpZiAobmMgPT0g MCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAwOwo+ICsKPiArIMKgIMKgIMKgIGNs b2NrID0gczNjMjR4eF9nZXRfcGNsaygpOwo+ICsgwqAgwqAgwqAgLyogQ2FsY3VsYXRlIHRoZSBy ZXF1aXJlZCBwcmVzY2FsZXIgdmFsdWUgdG8gZ2V0IHRoZSByZXF1ZXN0ZWQgZnJlcXVlbmN5ICov Cj4gKyDCoCDCoCDCoCBtY2lfcHNjID0gKGNsb2NrICsgKG5jID4+IDIpKSAvIG5jOwo+ICsKPiAr IMKgIMKgIMKgIGlmIChtY2lfcHNjID4gMjU2KSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBt Y2lfcHNjID0gMjU2Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcHJfd2FybmluZygiU0QvTU1D IGNsb2NrIG1pZ2h0IGJlIHRvbyBoaWdoIVxuIik7Cj4gKyDCoCDCoCDCoCB9Cj4gKwo+ICsgwqAg wqAgwqAgd3JpdGVsKG1jaV9wc2MgLSAxLCBod19kZXYtPm1hcF9iYXNlICsgU0RJUFJFKTsKPiAr Cj4gKyDCoCDCoCDCoCByZXR1cm4gY2xvY2sgLyBtY2lfcHNjOwo+ICt9Cj4gKwo+ICsvKioKPiAr ICogUmVzZXQgdGhlIE1DSSBlbmdpbmUgKHRoZSBoYXJkIHdheSkKPiArICogQHBhcmFtIGh3X2Rl diBIb3N0IGludGVyZmFjZSBpbnN0YW5jZQo+ICsgKgo+ICsgKiBUaGlzIHdpbGwgcmVzZXQgZXZl cnl0aGluZyBpbiBhbGwgcmVnaXN0ZXJzIG9mIHRoaXMgdW5pdCEKPiArICovCj4gK3N0YXRpYyB2 b2lkIHMzY19tY2lfcmVzZXQoc3RydWN0IGRldmljZV9kICpod19kZXYpCj4gK3sKPiArIMKgIMKg IMKgIC8qIHJlc2V0IHRoZSBoYXJkd2FyZSAqLwo+ICsgwqAgwqAgwqAgd3JpdGVsKFNESUNPTl9T RFJFU0VULCBod19kZXYtPm1hcF9iYXNlICsgU0RJQ09OKTsKPiArIMKgIMKgIMKgIC8qIHdhaXQg dW50aWwgcmVzZXQgaXQgZmluaXNoZWQgKi8KPiArIMKgIMKgIMKgIHdoaWxlIChyZWFkbChod19k ZXYtPm1hcF9iYXNlICsgU0RJQ09OKSAmIFNESUNPTl9TRFJFU0VUKQo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgOwo+ICt9Cj4gKwo+ICsvKioKPiArICogSW5pdGlhbGl6ZSBoYXJkIGFuZCBzb2Z0 d2FyZQo+ICsgKiBAcGFyYW0gaHdfZGV2IEhvc3QgaW50ZXJmYWNlIGluc3RhbmNlCj4gKyAqIEBw YXJhbSBtY2lfZGV2IE1DSSBkZXZpY2UgaW5zdGFuY2UgKG1pZ2h0IGJlIE5VTEwpCj4gKyAqLwo+ ICtzdGF0aWMgaW50IHMzY19tY2lfaW5pdGlhbGl6ZShzdHJ1Y3QgZGV2aWNlX2QgKmh3X2Rldiwg c3RydWN0IGRldmljZV9kICptY2lfZGV2KQo+ICt7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgczNjX21j aV9ob3N0ICpob3N0X2RhdGEgPSAoc3RydWN0IHMzY19tY2lfaG9zdCopR0VUX0hPU1RfREFUQSho d19kZXYpOwo+ICsKPiArIMKgIMKgIMKgIHMzY19tY2lfcmVzZXQoaHdfZGV2KTsKPiArCj4gKyDC oCDCoCDCoCAvKiByZXN0b3JlIGxhc3Qgc2V0dGluZ3MgKi8KPiArIMKgIMKgIMKgIGhvc3RfZGF0 YS0+Y2xvY2sgPSBzM2Nfc2V0dXBfY2xvY2tfc3BlZWQoaHdfZGV2LCBob3N0X2RhdGEtPmNsb2Nr KTsKPiArIMKgIMKgIMKgIHdyaXRlbCgweDAwN0ZGRkZGLCBod19kZXYtPm1hcF9iYXNlICsgU0RJ VElNRVIpOwo+ICsgwqAgwqAgwqAgd3JpdGVsKFNESUNPTl9NTUNDTE9DSywgaHdfZGV2LT5tYXBf YmFzZSArIFNESUNPTik7Cj4gKyDCoCDCoCDCoCB3cml0ZWwoNTEyLCBod19kZXYtPm1hcF9iYXNl ICsgU0RJQlNJWkUpOwo+ICsKPiArIMKgIMKgIMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioK PiArICogUHJlcGFyZSBlbmdpbmUncyBiaXRzIGZvciB0aGUgbmV4dCBjb21tYW5kIHRyYW5zZmVy Cj4gKyAqIEBwYXJhbSBjbWRfZmxhZ3MgTUNJJ3MgY29tbWFuZCBmbGFncwo+ICsgKiBAcGFyYW0g ZGF0YV9mbGFncyBNQ0kncyBkYXRhIGZsYWdzCj4gKyAqIEByZXR1cm4gUmVnaXN0ZXIgYml0cyBm b3IgdGhpcyB0cmFuc2Zlcgo+ICsgKi8KPiArc3RhdGljIHVpbnQzMl90IHMzY19wcmVwYXJlX2Nv bW1hbmRfc2V0dXAodW5zaWduZWQgY21kX2ZsYWdzLCB1bnNpZ25lZCBkYXRhX2ZsYWdzKQo+ICt7 Cj4gKyDCoCDCoCDCoCB1aW50MzJfdCByZWc7Cj4gKwo+ICsgwqAgwqAgwqAgLyogc291cmNlICg9 aG9zdCkgKi8KPiArIMKgIMKgIMKgIHJlZyA9IFNESUNNRENPTl9TRU5ERVJIT1NUOwo+ICsKPiAr IMKgIMKgIMKgIGlmIChjbWRfZmxhZ3MgJiBNTUNfUlNQX1BSRVNFTlQpIHsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIHJlZyB8PSBTRElDTURDT05fV0FJVFJTUDsKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIHByX2RlYnVnKCJDb21tYW5kIHdpdGggcmVzcG9uc2VcbiIpOwo+ICsgwqAgwqAgwqAg fQo+ICsgwqAgwqAgwqAgaWYgKGNtZF9mbGFncyAmIE1NQ19SU1BfMTM2KSB7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCByZWcgfD0gU0RJQ01EQ09OX0xPTkdSU1A7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCBwcl9kZWJ1ZygiQ29tbWFuZCB3aXRoIGxvbmcgcmVzcG9uc2VcbiIpOwo+ICsgwqAg wqAgwqAgfQo+ICsgwqAgwqAgwqAgaWYgKGNtZF9mbGFncyAmIE1NQ19SU1BfQ1JDKQo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgOyAvKiBGSVhNRSAqLwo+ICsgwqAgwqAgwqAgaWYgKGNtZF9mbGFn cyAmIE1NQ19SU1BfQlVTWSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIDsgLyogRklYTUUgKi8K PiArIMKgIMKgIMKgIGlmIChjbWRfZmxhZ3MgJiBNTUNfUlNQX09QQ09ERSkKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIDsgLyogRklYTUUgKi8KPiArIMKgIMKgIMKgIGlmIChkYXRhX2ZsYWdzICE9 IDApCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZWcgfD0gU0RJQ01EQ09OX1dJVEhEQVRBOwo+ ICsKPiArIMKgIMKgIMKgIHJldHVybiByZWc7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBQcmVwYXJl IGVuZ2luZSdzIGJpdHMgZm9yIHRoZSBuZXh0IGRhdGEgdHJhbnNmZXIKPiArICogQHBhcmFtIGh3 X2RldiBIb3N0IGludGVyZmFjZSBkZXZpY2UgaW5zdGFuY2UKPiArICogQHBhcmFtIGRhdGFfZmxh Z3MgTUNJJ3MgZGF0YSBmbGFncwo+ICsgKiBAcmV0dXJuIFJlZ2lzdGVyIGJpdHMgZm9yIHRoaXMg dHJhbnNmZXIKPiArICovCj4gK3N0YXRpYyB1aW50MzJfdCBzM2NfcHJlcGFyZV9kYXRhX3NldHVw KHN0cnVjdCBkZXZpY2VfZCAqaHdfZGV2LCB1bnNpZ25lZCBkYXRhX2ZsYWdzKQo+ICt7Cj4gKyDC oCDCoCDCoCBzdHJ1Y3QgczNjX21jaV9ob3N0ICpob3N0X2RhdGEgPSAoc3RydWN0IHMzY19tY2lf aG9zdCopR0VUX0hPU1RfREFUQShod19kZXYpOwo+ICsgwqAgwqAgwqAgdWludDMyX3QgcmVnID0g U0RJRENPTl9CTE9DS01PREU7IMKgIMKgIMKgIC8qIGJsb2NrIG1vZGUgb25seSBpcyBzdXBwb3J0 ZWQgKi8KPiArCj4gKyDCoCDCoCDCoCBpZiAoaG9zdF9kYXRhLT5idXNfd2lkdGggPT0gMSkKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJlZyB8PSBTRElEQ09OX1dJREVCVVM7Cj4gKwo+ICsgwqAg wqAgwqAgLyogZW5hYmxlIGFueSBraW5kIG9mIGRhdGEgdHJhbnNmZXJzIG9uIGRlbWFuZCBvbmx5 ICovCj4gKyDCoCDCoCDCoCBpZiAoZGF0YV9mbGFncyAmIE1NQ19EQVRBX1dSSVRFKQo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgcmVnIHw9IFNESURDT05fVFhBRlRFUlJFU1AgfCBTRElEQ09OX1hG RVJfVFhTVEFSVDsKPiArCj4gKyDCoCDCoCDCoCBpZiAoZGF0YV9mbGFncyAmIE1NQ19EQVRBX1JF QUQpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZWcgfD0gU0RJRENPTl9SWEFGVEVSQ01EIHwg U0RJRENPTl9YRkVSX1JYU1RBUlQ7Cj4gKwo+ICsgwqAgwqAgwqAgLyogVE9ETzogU3VwcG9ydCBt b3JlIHRoYW4gdGhlIDI0NDAgQ1BVICovCj4gKyDCoCDCoCDCoCByZWcgfD0gU0RJRENPTl9EU19X T1JEIHwgU0RJRENPTl9EQVRTVEFSVDsKPiArCj4gKyDCoCDCoCDCoCByZXR1cm4gcmVnOwo+ICt9 Cj4gKwo+ICsvKioKPiArICogVGVybWluYXRlIGEgY3VycmVudCBydW5uaW5nIHRyYW5zZmVyCj4g KyAqIEBwYXJhbSBod19kZXYgSG9zdCBpbnRlcmZhY2UgZGV2aWNlIGluc3RhbmNlCj4gKyAqIEBy ZXR1cm4gMCBvbiBzdWNjZXNzCj4gKyAqCj4gKyAqIE5vdGU6IFRyeSB0byBzdG9wIGEgcnVubmlu ZyB0cmFuc2Zlci4gVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYXMgYWxsCj4gKyAqIHRyYW5zZmVy cyBtdXN0IGNvbXBsZXRlIGluIHRoaXMgZHJpdmVyLiBCdXQgd2hvIGtub3dzLi4uIDstKQo+ICsg Ki8KPiArc3RhdGljIGludCBzM2NfdGVybWluYXRlX3RyYW5zZmVyKHN0cnVjdCBkZXZpY2VfZCAq aHdfZGV2KQo+ICt7Cj4gKyDCoCDCoCDCoCB1bnNpZ25lZCBzdG9wdHJpZXMgPSAzOwo+ICsKPiAr IMKgIMKgIMKgIHdoaWxlIChyZWFkbChod19kZXYtPm1hcF9iYXNlICsgU0RJRFNUQSkgJiAoU0RJ RFNUQV9UWERBVEFPTiB8IFNESURTVEFfUlhEQVRBT04pKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCBwcl9kZWJ1ZygiVHJhbnNmZXIgc3RpbGwgaW4gcHJvZ3Jlc3MuXG4iKTsKPiArCj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCB3cml0ZWwoU0RJRENPTl9TVE9QLCBod19kZXYtPm1hcF9iYXNl ICsgU0RJRENPTik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzM2NfbWNpX2luaXRpYWxpemUo aHdfZGV2LCBOVUxMKTsKPiArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoKHN0b3B0cmll cy0tKSA9PSAwKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwcl93YXJu aW5nKCJDYW5ub3Qgc3RvcCB0aGUgZW5naW5lIVxuIik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCByZXR1cm4gLUVJTlZBTDsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0K PiArIMKgIMKgIMKgIH0KPiArCj4gKyDCoCDCoCDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoq Cj4gKyAqIFNldHVwIHJlZ2lzdGVycyBmb3IgZGF0YSB0cmFuc2Zlcgo+ICsgKiBAcGFyYW0gaHdf ZGV2IEhvc3QgaW50ZXJmYWNlIGRldmljZSBpbnN0YW5jZQo+ICsgKiBAcGFyYW0gZGF0YSBUaGUg ZGF0YSBpbmZvcm1hdGlvbiAoYnVmZmVyLCBkaXJlY3Rpb24gYXNvLikKPiArICogQHJldHVybiAw IG9uIHN1Y2Nlc3MKPiArICovCj4gK3N0YXRpYyBpbnQgczNjX3ByZXBhcmVfZGF0YV90cmFuc2Zl cihzdHJ1Y3QgZGV2aWNlX2QgKmh3X2Rldiwgc3RydWN0IG1jaV9kYXRhICpkYXRhKQo+ICt7Cj4g KyDCoCDCoCDCoCB1aW50MzJfdCByZWc7Cj4gKwo+ICsgwqAgwqAgwqAgd3JpdGVsKGRhdGEtPmJs b2Nrc2l6ZSwgaHdfZGV2LT5tYXBfYmFzZSArIFNESUJTSVpFKTsKPiArIMKgIMKgIMKgIHJlZyA9 IHMzY19wcmVwYXJlX2RhdGFfc2V0dXAoaHdfZGV2LCBkYXRhLT5mbGFncyk7Cj4gKyDCoCDCoCDC oCByZWcgfD0gZGF0YS0+YmxvY2tzICYgU0RJRENPTl9CTEtOVU07Cj4gKyDCoCDCoCDCoCB3cml0 ZWwocmVnLCBod19kZXYtPm1hcF9iYXNlICsgU0RJRENPTik7Cj4gKyDCoCDCoCDCoCB3cml0ZWwo MHgwMDdGRkZGRiwgaHdfZGV2LT5tYXBfYmFzZSArIFNESVRJTUVSKTsKPiArCj4gKyDCoCDCoCDC oCByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFNlbmQgYSBjb21tYW5kIGFuZCByZWNl aXZlIHRoZSByZXNwb25zZQo+ICsgKiBAcGFyYW0gaHdfZGV2IEhvc3QgaW50ZXJmYWNlIGRldmlj ZSBpbnN0YW5jZQo+ICsgKiBAcGFyYW0gY21kIFRoZSBjb21tYW5kIHRvIGhhbmRsZQo+ICsgKiBA cGFyYW0gZGF0YSBUaGUgZGF0YSBpbmZvcm1hdGlvbiAoYnVmZmVyLCBkaXJlY3Rpb24gYXNvLikK PiArICogQHJldHVybiAwIG9uIHN1Y2Nlc3MKPiArICovCj4gK3N0YXRpYyBpbnQgczNjX3NlbmRf Y29tbWFuZChzdHJ1Y3QgZGV2aWNlX2QgKmh3X2Rldiwgc3RydWN0IG1jaV9jbWQgKmNtZCwgc3Ry dWN0IG1jaV9kYXRhICpkYXRhKQo+ICt7Cj4gKyDCoCDCoCDCoCB1aW50MzJfdCByZWcsIHQxOwo+ ICsgwqAgwqAgwqAgaW50IHJjOwo+ICsKPiArIMKgIMKgIMKgIHdyaXRlbCgweDAwN0ZGRkZGLCBo d19kZXYtPm1hcF9iYXNlICsgU0RJVElNRVIpOwo+ICsKPiArIMKgIMKgIMKgIC8qIHNldHVwIGFy Z3VtZW50ICovCj4gKyDCoCDCoCDCoCB3cml0ZWwoY21kLT5jbWRhcmcsIGh3X2Rldi0+bWFwX2Jh c2UgKyBTRElDTURBUkcpOwo+ICsKPiArIMKgIMKgIMKgIC8qIHNldHVwIGNvbW1hbmQgYW5kIHRy YW5zZmVyIGNoYXJhY3RlcmlzdGljICovCj4gKyDCoCDCoCDCoCByZWcgPSBzM2NfcHJlcGFyZV9j b21tYW5kX3NldHVwKGNtZC0+cmVzcF90eXBlLCBkYXRhICE9IE5VTEwgPyBkYXRhLT5mbGFncyA6 IDApOwo+ICsgwqAgwqAgwqAgcmVnIHw9IGNtZC0+Y21kaWR4ICYgU0RJQ01EQ09OX0lOREVYOwo+ ICsKPiArIMKgIMKgIMKgIC8qIHJ1biB0aGUgY29tbWFuZCByaWdodCBub3cgKi8KPiArIMKgIMKg IMKgIHdyaXRlbChyZWcgfCBTRElDTURDT05fQ01EU1RBUlQsIGh3X2Rldi0+bWFwX2Jhc2UgKyBT RElDTURDT04pOwo+ICsgwqAgwqAgwqAgdDEgPSByZWFkbChod19kZXYtPm1hcF9iYXNlICsgU0RJ Q01EU1RBVCk7Cj4gKyDCoCDCoCDCoCAvKiB3YWl0IHVudGlsIGNvbW1hbmQgaXMgZG9uZSAqLwo+ ICsgwqAgwqAgwqAgd2hpbGUgKDEpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJlZyA9IHJl YWRsKGh3X2Rldi0+bWFwX2Jhc2UgKyBTRElDTURTVEFUKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIC8qIGRvbmU/ICovCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoY21kLT5yZXNwX3R5 cGUgJiBNTUNfUlNQX1BSRVNFTlQpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGlmIChyZWcgJiBTRElDTURTVEFUX1JTUEZJTikgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgd3JpdGVsKFNESUNNRFNUQVRfUlNQRklOLCBod19k ZXYtPm1hcF9iYXNlICsgU0RJQ01EU1RBVCk7IC8qIHJlcXVpcmVkPz8/ICovCj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByYyA9IDA7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0gZWxz ZSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAocmVnICYgU0RJQ01E U1RBVF9DTURTRU5UKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCB3cml0ZWwoU0RJQ01EU1RBVF9DTURTRU5ULCBod19kZXYtPm1h cF9iYXNlICsgU0RJQ01EU1RBVCk7IC8qIHJlcXVpcmVkPz8/ICovCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByYyA9IDA7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBi cmVhazsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0KPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIH0KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8qIHRpbWVvdXQ/ICovCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAocmVnICYgU0RJQ01EU1RBVF9DTURUSU1FT1VUKSB7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB3cml0ZWwoU0RJQ01EU1RBVF9D TURUSU1FT1VULCBod19kZXYtPm1hcF9iYXNlICsgU0RJQ01EU1RBVCk7IC8qIHJlcXVpcmVkPz8/ ICovCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByYyA9IC1FVElNRURPVVQ7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIH0KPiArIMKgIMKgIMKgIH0KPiArCj4gKyDCoCDCoCDCoCBpZiAoKHJjID09 IDApICYmIChjbWQtPnJlc3BfdHlwZSAmIE1NQ19SU1BfUFJFU0VOVCkpIHsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIGNtZC0+cmVzcG9uc2VbMF0gPSByZWFkbChod19kZXYtPm1hcF9iYXNlICsg U0RJUlNQMCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjbWQtPnJlc3BvbnNlWzFdID0gcmVh ZGwoaHdfZGV2LT5tYXBfYmFzZSArIFNESVJTUDEpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg Y21kLT5yZXNwb25zZVsyXSA9IHJlYWRsKGh3X2Rldi0+bWFwX2Jhc2UgKyBTRElSU1AyKTsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNtZC0+cmVzcG9uc2VbM10gPSByZWFkbChod19kZXYtPm1h cF9iYXNlICsgU0RJUlNQMyk7Cj4gKyDCoCDCoCDCoCB9Cj4gKyDCoCDCoCDCoCAvKiBkbyBub3Qg ZGlzYWJsZSB0aGUgY2xvY2shICovCj4gKyDCoCDCoCDCoCByZXR1cm4gcmM7Cj4gK30KPiArCj4g Ky8qKgo+ICsgKiBDbGVhciBtYWpvciByZWdpc3RlcnMgcHJpb3IgYSBuZXcgdHJhbnNhY3Rpb24K PiArICogQHBhcmFtIGh3X2RldiBIb3N0IGludGVyZmFjZSBkZXZpY2UgaW5zdGFuY2UKPiArICog QHJldHVybiAwIG9uIHN1Y2Nlc3MKPiArICoKPiArICogRklGTyBjbGVhciBpcyBvbmx5IG5lY2Vz c2FyeSBvbiAyNDQwLCBidXQgZG9lc24ndCBodXJ0IG9uIDI0MTAKPiArICovCj4gK3N0YXRpYyBp bnQgczNjX3ByZXBhcmVfZW5naW5lKHN0cnVjdCBkZXZpY2VfZCAqaHdfZGV2KQo+ICt7Cj4gKyDC oCDCoCDCoCBpbnQgcmM7Cj4gKwo+ICsgwqAgwqAgwqAgcmMgPSBzM2NfdGVybWluYXRlX3RyYW5z ZmVyKGh3X2Rldik7Cj4gKyDCoCDCoCDCoCBpZiAocmMgIT0gMCkKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIHJldHVybiByYzsKPiArCj4gKyDCoCDCoCDCoCB3cml0ZWwoLTEsIGh3X2Rldi0+bWFw X2Jhc2UgKyBTRElDTURTVEFUKTsKPiArIMKgIMKgIMKgIHdyaXRlbCgtMSwgaHdfZGV2LT5tYXBf YmFzZSArIFNESURTVEEpOwo+ICsgwqAgwqAgwqAgd3JpdGVsKC0xLCBod19kZXYtPm1hcF9iYXNl ICsgU0RJRlNUQSk7Cj4gKwo+ICsgwqAgwqAgwqAgcmV0dXJuIDA7Cj4gK30KPiArCj4gKy8qKgo+ ICsgKiBIYW5kbGUgTUNJIGNvbW1hbmRzIHdpdGhvdXQgZGF0YQo+ICsgKiBAcGFyYW0gaHdfZGV2 IEhvc3QgaW50ZXJmYWNlIGRldmljZSBpbnN0YW5jZQo+ICsgKiBAcGFyYW0gY21kIFRoZSBjb21t YW5kIHRvIGhhbmRsZQo+ICsgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcwo+ICsgKgo+ICsgKiBUaGlz IGZ1bmN0aW9ucyBoYW5kbGVzIHRoZSBmb2xsb3dpbmcgTUNJIGNvbW1hbmRzOgo+ICsgKiAtICJi cm9hZGNhc3QgY29tbWFuZCAoQkMpIiB3aXRob3V0IGEgcmVzcG9uc2UKPiArICogLSAiYnJvYWRj YXN0IGNvbW1hbmRzIHdpdGggcmVzcG9uc2UgKEJDUikiCj4gKyAqIC0gImFkZHJlc3NlZCBjb21t YW5kIChBQykiIHdpdGggcmVzcG9uc2UsIGJ1dCB3aXRob3V0IGRhdGEKPiArICovCj4gK3N0YXRp YyBpbnQgczNjX21jaV9zdGRfY21kcyhzdHJ1Y3QgZGV2aWNlX2QgKmh3X2Rldiwgc3RydWN0IG1j aV9jbWQgKmNtZCkKPiArewo+ICsgwqAgwqAgwqAgaW50IHJjOwo+ICsKPiArIMKgIMKgIMKgIHJj ID0gczNjX3ByZXBhcmVfZW5naW5lKGh3X2Rldik7Cj4gKyDCoCDCoCDCoCBpZiAocmMgIT0gMCkK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAwOwo+ICsKPiArIMKgIMKgIMKgIHJldHVy biBzM2Nfc2VuZF9jb21tYW5kKGh3X2RldiwgY21kLCBOVUxMKTsKPiArfQo+ICsKPiArLyoqCj4g KyAqIFJlYWQgb25lIGJsb2NrIG9mIGRhdGEgZnJvbSB0aGUgRklGTwo+ICsgKiBAcGFyYW0gaHdf ZGV2IEhvc3QgaW50ZXJmYWNlIGRldmljZSBpbnN0YW5jZQo+ICsgKiBAcGFyYW0gZGF0YSBUaGUg ZGF0YSBpbmZvcm1hdGlvbiAoYnVmZmVyLCBkaXJlY3Rpb24gYXNvLikKPiArICogQHJldHVybiAw IG9uIHN1Y2Nlc3MKPiArICovCj4gK3N0YXRpYyBpbnQgczNjX21jaV9yZWFkX2Jsb2NrKHN0cnVj dCBkZXZpY2VfZCAqaHdfZGV2LCBzdHJ1Y3QgbWNpX2RhdGEgKmRhdGEpCj4gK3sKPiArIMKgIMKg IMKgIHVpbnQzMl90ICpwOwo+ICsgwqAgwqAgwqAgdW5zaWduZWQgY250LCBkYXRhX3NpemU7Cj4g Kwo+ICsjZGVmaW5lIFJFQURfUkVBU09OX1RPX0ZBSUwgKFNESURTVEFfQ1JDRkFJTCB8IFNESURT VEFfUlhDUkNGQUlMIHwgU0RJRFNUQV9EQVRBVElNRU9VVCkKPiArCj4gKyDCoCDCoCDCoCBwID0g KHVpbnQzMl90KilkYXRhLT5kZXN0Owo+ICsgwqAgwqAgwqAgZGF0YV9zaXplID0gZGF0YS0+Ymxv Y2tzaXplICogZGF0YS0+YmxvY2tzOwo+ICsKPiArIMKgIMKgIMKgIHdoaWxlIChkYXRhX3NpemUg PiAwKSB7Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLyogc2VyaW91cyBlcnJvcj8gKi8K PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChyZWFkbChod19kZXYtPm1hcF9iYXNlICsgU0RJ RFNUQSkgJiBSRUFEX1JFQVNPTl9UT19GQUlMKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBwcl9lcnIoIkZhaWxlZCB3aGlsZSByZWFkaW5nIGRhdGFcbiIpOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIC1FSU87Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLyogbm93IGNoZWNrIHRo ZSBGSUZPIHN0YXR1cyAqLwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHJlYWRsKGh3X2Rl di0+bWFwX2Jhc2UgKyBTRElGU1RBKSAmIFNESUZTVEFfRklGT0ZBSUwpIHsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHByX2VycigiRGF0YSBsb3NzIGR1ZSB0byBGSUZPIG92 ZXJmbG93IHdoZW4gcmVhZGluZ1xuIik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCByZXR1cm4gLUVJTzsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0KPiArCj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCAvKiB3ZSBvbmx5IHdhbnQgdG8gcmVhZCBmdWxsIHdvcmRzICovCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjbnQgPSAocmVhZGwoaHdfZGV2LT5tYXBfYmFzZSArIFNE SUZTVEEpICYgU0RJRlNUQV9DT1VOVE1BU0spID4+IDI7Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgLyogcmVhZCBvbmUgY2h1bmsgb2YgZGF0YSBmcm9tIHRoZSBGSUZPICovCj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCB3aGlsZSAoY250LS0pIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgICpwID0gcmVhZGwoaHdfZGV2LT5tYXBfYmFzZSArIFNESURBVEEpOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcCsrOwo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgaWYgKGRhdGFfc2l6ZSA+PSA0KQo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGF0YV9zaXplIC09IDQ7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBlbHNlIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRhdGFfc2l6ZSA9IDA7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazsKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIH0KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0KPiArIMKgIMKg IMKgIH0KPiArCj4gKyDCoCDCoCDCoCByZXR1cm4gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFdy aXRlIG9uZSBibG9jayBvZiBkYXRhIGludG8gdGhlIEZJRk8KPiArICogQHBhcmFtIGh3X2RldiBI b3N0IGludGVyZmFjZSBkZXZpY2UgaW5zdGFuY2UKPiArICogQHBhcmFtIGNtZCBUaGUgY29tbWFu ZCB0byBoYW5kbGUKPiArICogQHBhcmFtIGRhdGEgVGhlIGRhdGEgaW5mb3JtYXRpb24gKGJ1ZmZl ciwgZGlyZWN0aW9uIGFzby4pCj4gKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzCj4gKyAqCj4gKyAq IFdlIG11c3QgZW5zdXJlIGRhdGEgaW4gdGhlIEZJRk8gd2hlbiB0aGUgY29tbWFuZCBwaGFzZSBj aGFuZ2VzIGludG8gdGhlCj4gKyAqIGRhdGEgcGhhc2UuIFRvIGVuc3VyZSB0aGlzLCB0aGUgRklG TyBnZXRzIGZpbGxlZCBmaXJzdCwgdGhlbiB0aGUgY29tbWFuZC4KPiArICovCj4gK3N0YXRpYyBp bnQgczNjX21jaV93cml0ZV9ibG9jayhzdHJ1Y3QgZGV2aWNlX2QgKmh3X2Rldiwgc3RydWN0IG1j aV9jbWQgKmNtZCwgc3RydWN0IG1jaV9kYXRhICpkYXRhKQo+ICt7Cj4gKyDCoCDCoCDCoCBjb25z dCB1aW50MzJfdCAqcCA9IChjb25zdCB1aW50MzJfdCopZGF0YS0+c3JjOwo+ICsgwqAgwqAgwqAg dW5zaWduZWQgY250LCBkYXRhX3NpemU7Cj4gKyDCoCDCoCDCoCB1aW50MzJfdCByZWc7Cj4gKwo+ ICsjZGVmaW5lIFdSSVRFX1JFQVNPTl9UT19GQUlMIChTRElEU1RBX0NSQ0ZBSUwgfCBTRElEU1RB X0RBVEFUSU1FT1VUKQo+ICsKPiArIMKgIMKgIMKgIGRhdGFfc2l6ZSA9IGRhdGEtPmJsb2Nrc2l6 ZSAqIGRhdGEtPmJsb2NrczsKPiArIMKgIMKgIMKgIC8qCj4gKyDCoCDCoCDCoCDCoCogV2l0aCBo aWdoIGNsb2NrIHJhdGVzIHdlIG11c3QgZmlsbCB0aGUgRklGTyBhcyBlYXJseSBhcyBwb3NzaWJs ZQo+ICsgwqAgwqAgwqAgwqAqIEl0cyBzaXplIGlzIDE2IHdvcmRzLiBXZSBhc3N1bWUgaXRzIGVt cHR5LCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMKPiArIMKgIMKgIMKgIMKgKiBlbnRlcmVkLgo+ICsg wqAgwqAgwqAgwqAqLwo+ICsgwqAgwqAgwqAgY250ID0gMTY7Cj4gKyDCoCDCoCDCoCB3aGlsZSAo Y250LS0pIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHdyaXRlbCgqcCwgaHdfZGV2LT5tYXBf YmFzZSArIFNESURBVEEpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcCsrOwo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgaWYgKGRhdGFfc2l6ZSA+PSA0KQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgZGF0YV9zaXplIC09IDQ7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBl bHNlIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRhdGFfc2l6ZSA9IDA7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIH0KPiArIMKgIMKgIMKgIH0KPiArCj4gKyDCoCDCoCDCoCAvKiBkYXRhIGlz IG5vdyBpbiBwbGFjZSBhbmQgd2FpdHMgZm9yIHRyYW5zbWl0dC4gU3RhcnQgdGhlIGNvbW1hbmQg cmlnaHQgbm93ICovCj4gKyDCoCDCoCDCoCBzM2Nfc2VuZF9jb21tYW5kKGh3X2RldiwgY21kLCBk YXRhKTsKPiArCj4gKyDCoCDCoCDCoCBpZiAoKHJlZyA9IHJlYWRsKGh3X2Rldi0+bWFwX2Jhc2Ug KyBTRElGU1RBKSkgJiBTRElGU1RBX0ZJRk9GQUlMKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCBwcl9lcnIoIkNvbW1hbmQgZmFpbHMgaW1tZWRpYXRseSBkdWUgdG8gRklGTyB1bmRlcnJ1biB3 aGVuIHdyaXRpbmcgJTA4WFxuIiwgcmVnKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVy biAtRUlPOwo+ICsgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIHdoaWxlIChkYXRhX3NpemUg PiAwKSB7Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHJlYWRsKGh3X2Rldi0+bWFw X2Jhc2UgKyBTRElEU1RBKSAmIFdSSVRFX1JFQVNPTl9UT19GQUlMKSB7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwcl9lcnIoIkZhaWxlZCB3cml0aW5nIGRhdGFcbiIpOwo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIC1FSU87Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLyogbm93IGNo ZWNrIHRoZSBGSUZPIHN0YXR1cyAqLwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKChyZWcg PSByZWFkbChod19kZXYtPm1hcF9iYXNlICsgU0RJRlNUQSkpICYgU0RJRlNUQV9GSUZPRkFJTCkg ewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcHJfZXJyKCJEYXRhIGxvc3Mg ZHVlIHRvIEZJRk8gdW5kZXJydW4gd2hlbiB3cml0aW5nICUwOFhcbiIsIHJlZyk7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gLUVJTzsKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIH0KPiArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKiB3ZSBvbmx5IHdhbnQg dG8gd3JpdGUgZnVsbCB3b3JkcyAqLwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY250ID0gMTYg LSAoKChyZWFkbChod19kZXYtPm1hcF9iYXNlICsgU0RJRlNUQSkgJiBTRElGU1RBX0NPVU5UTUFT SykgKyAzKSA+PiAyKTsKPiArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKiBmaWxsIHRoZSBG SUZPIGlmIGl0IGhhcyBmcmVlIGVudHJpZXMgKi8KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHdo aWxlIChjbnQtLSkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgd3JpdGVs KCpwLCBod19kZXYtPm1hcF9iYXNlICsgU0RJREFUQSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBwKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBp ZiAoZGF0YV9zaXplID49IDQpCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBkYXRhX3NpemUgLT0gNDsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGVsc2Ugewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgZGF0YV9zaXplID0gMDsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIGJyZWFrOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg fQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+ICsgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKg IMKgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogSGFuZGxlIE1DSSBjb21tYW5kcyB3 aXRoIG9yIHdpdGhvdXQgZGF0YQo+ICsgKiBAcGFyYW0gaHdfZGV2IEhvc3QgaW50ZXJmYWNlIGRl dmljZSBpbnN0YW5jZQo+ICsgKiBAcGFyYW0gY21kIFRoZSBjb21tYW5kIHRvIGhhbmRsZQo+ICsg KiBAcGFyYW0gZGF0YSBUaGUgZGF0YSBpbmZvcm1hdGlvbiAoYnVmZmVyLCBkaXJlY3Rpb24gYXNv LikKPiArICogQHJldHVybiAwIG9uIHN1Y2Nlc3MKPiArKi8KPiArc3RhdGljIGludCBzM2NfbWNp X2FkdGMoc3RydWN0IGRldmljZV9kICpod19kZXYsIHN0cnVjdCBtY2lfY21kICpjbWQsIHN0cnVj dCBtY2lfZGF0YSAqZGF0YSkKPiArewo+ICsgwqAgwqAgwqAgaW50IHJjOwo+ICsKPiArIMKgIMKg IMKgIHJjID0gczNjX3ByZXBhcmVfZW5naW5lKGh3X2Rldik7Cj4gKyDCoCDCoCDCoCBpZiAocmMg IT0gMCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiByYzsKPiArCj4gKyDCoCDCoCDC oCByYyA9IHMzY19wcmVwYXJlX2RhdGFfdHJhbnNmZXIoaHdfZGV2LCBkYXRhKTsKPiArIMKgIMKg IMKgIGlmIChyYyAhPSAwKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIHJjOwo+ICsK PiArIMKgIMKgIMKgIGlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpIHsKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIHMzY19zZW5kX2NvbW1hbmQoaHdfZGV2LCBjbWQsIGRhdGEpOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgcmMgPSBzM2NfbWNpX3JlYWRfYmxvY2soaHdfZGV2LCBkYXRh KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChyYyA9PSAwKSB7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB3aGlsZSAoIShyZWFkbChod19kZXYtPm1hcF9iYXNlICsg U0RJRFNUQSkgJiBTRElEU1RBX1hGRVJGSU5JU0gpKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfSBlbHNl Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzM2NfdGVybWluYXRlX3RyYW5z ZmVyKGh3X2Rldik7Cj4gKyDCoCDCoCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgaWYgKGRhdGEtPmZs YWdzICYgTU1DX0RBVEFfV1JJVEUpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJjID0gczNj X21jaV93cml0ZV9ibG9jayhod19kZXYsIGNtZCwgZGF0YSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCBpZiAocmMgPT0gMCkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg d2hpbGUgKCEocmVhZGwoaHdfZGV2LT5tYXBfYmFzZSArIFNESURTVEEpICYgU0RJRFNUQV9YRkVS RklOSVNIKSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IDsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0gZWxzZQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgczNjX3Rlcm1pbmF0ZV90cmFuc2Zlcihod19kZXYpOwo+ICsgwqAgwqAg wqAgfQo+ICsgwqAgwqAgwqAgd3JpdGVsKDAsIGh3X2Rldi0+bWFwX2Jhc2UgKyBTRElEQ09OKTsK PiArCj4gKyDCoCDCoCDCoCByZXR1cm4gcmM7Cj4gK30KPiArCj4gKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gTUNJIEFQSSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAqLwo+ICsKPiArLyoqCj4gKyAqIEtlZXAgdGhlIGF0dGFjaGVkIE1NQy9TRCB1bml0IGluIGEg d2VsbCBrbm93IHN0YXRlCj4gKyAqIEBwYXJhbSBod19kZXYgSG9zdCBpbnRlcmZhY2UgaW5zdGFu Y2UKPiArICogQHBhcmFtIG1jaV9kZXYgTUNJIGRldmljZSBpbnN0YW5jZQo+ICsgKiBAcmV0dXJu IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgZWxzZQo+ICsgKi8KPiArc3RhdGljIGludCBt Y2lfcmVzZXQoc3RydWN0IGRldmljZV9kICpod19kZXYsIHN0cnVjdCBkZXZpY2VfZCAqbWNpX2Rl dikKPiArewo+ICsgwqAgwqAgwqAgcmV0dXJuIHMzY19tY2lfaW5pdGlhbGl6ZShod19kZXYsIG1j aV9kZXYpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogUHJvY2VzcyBvbmUgY29tbWFuZCB0byB0aGUg TUNJIGNhcmQKPiArICogQHBhcmFtIGh3X2RldiBIb3N0IGludGVyZmFjZSBpbnN0YW5jZQo+ICsg KiBAcGFyYW0gY21kIFRoZSBjb21tYW5kIHRvIHByb2Nlc3MKPiArICogQHBhcmFtIGRhdGEgVGhl IGRhdGEgdG8gaGFuZGxlIGluIHRoZSBjb21tYW5kIChjYW4gYmUgTlVMTCkKPiArICogQHJldHVy biAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIGVsc2UKPiArICovCj4gK3N0YXRpYyBpbnQg bWNpX3JlcXVlc3Qoc3RydWN0IGRldmljZV9kICpod19kZXYsIHN0cnVjdCBtY2lfY21kICpjbWQs IHN0cnVjdCBtY2lfZGF0YSAqZGF0YSkKPiArewo+ICsgwqAgwqAgwqAgaW50IHJjOwo+ICsKPiAr IMKgIMKgIMKgIC8qIGVuYWJsZSBjbG9jayAqLwo+ICsgwqAgwqAgwqAgd3JpdGVsKHJlYWRsKGh3 X2Rldi0+bWFwX2Jhc2UgKyBTRElDT04pIHwgU0RJQ09OX0NMS0VOLCBod19kZXYtPm1hcF9iYXNl ICsgU0RJQ09OKTsKPiArCj4gKyDCoCDCoCDCoCBpZiAoKGNtZC0+cmVzcF90eXBlID09IDApIHx8 IChkYXRhID09IE5VTEwpKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmMgPSBzM2NfbWNpX3N0 ZF9jbWRzKGh3X2RldiwgY21kKTsKPiArIMKgIMKgIMKgIGVsc2UKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIHJjID0gczNjX21jaV9hZHRjKGh3X2RldiwgY21kLCBkYXRhKTsgwqAgLyogd2l0aCBy ZXNwb25zZSBhbmQgZGF0YSAqLwo+ICsKPiArIMKgIMKgIMKgIHMzY19maW5pc2hfcmVxdWVzdCho d19kZXYpOwo+ICsKPiArIMKgIMKgIMKgIC8qIGRpc2FibGUgY2xvY2sgKi8KPiArIMKgIMKgIMKg IHdyaXRlbChyZWFkbChod19kZXYtPm1hcF9iYXNlICsgU0RJQ09OKSAmIH5TRElDT05fQ0xLRU4s IGh3X2Rldi0+bWFwX2Jhc2UgKyBTRElDT04pOwo+ICsgwqAgwqAgwqAgcmV0dXJuIHJjOwo+ICt9 Cj4gKwo+ICsvKioKPiArICogU2V0dXAgdGhlIGJ1cyB3aWR0aCBhbmQgSU8gc3BlZWQKPiArICog QHBhcmFtIGh3X2RldiBIb3N0IGludGVyZmFjZSBkZXZpY2UgaW5zdGFuY2UKPiArICogQHBhcmFt IG1jaV9kZXYgTUNJIGRldmljZSBpbnN0YW5jZQo+ICsgKiBAcGFyYW0gYnVzX3dpZHRoIE5ldyBi dXMgd2lkdGggdmFsdWUgKDEsIDQgb3IgOCkKPiArICogQHBhcmFtIGNsb2NrIE5ldyBjbG9jayBp biBIeiAoY2FuIGJlICcwJyB0byBkaXNhYmxlIHRoZSBjbG9jaykKPiArICovCj4gK3N0YXRpYyB2 b2lkIG1jaV9zZXRfaW9zKHN0cnVjdCBkZXZpY2VfZCAqaHdfZGV2LCBzdHJ1Y3QgZGV2aWNlX2Qg Km1jaV9kZXYsIHVuc2lnbmVkIGJ1c193aWR0aCwgdW5zaWduZWQgY2xvY2spCj4gK3sKPiArIMKg IMKgIMKgIHN0cnVjdCBzM2NfbWNpX2hvc3QgKmhvc3RfZGF0YSA9IChzdHJ1Y3QgczNjX21jaV9o b3N0KilHRVRfSE9TVF9EQVRBKGh3X2Rldik7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgbWNpX3BsYXRm b3JtZGF0YSAqbWNpX3BkYXRhID0gR0VUX01DSV9QREFUQShtY2lfZGV2KTsKPiArIMKgIMKgIMKg IHVpbnQzMl90IHJlZzsKPiArCj4gKyDCoCDCoCDCoCBzd2l0Y2ggKGJ1c193aWR0aCkgewo+ICsg wqAgwqAgwqAgY2FzZSA4OiDCoCDCoCDCoCDCoCAvKiBubyA4IGJpdCBzdXBwb3J0LCBmYWxsIGJh Y2sgdG8gNCBiaXQgKi8KPiArIMKgIMKgIMKgIGNhc2UgNDoKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGhvc3RfZGF0YS0+YnVzX3dpZHRoID0gMTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG1j aV9wZGF0YS0+YnVzX3dpZHRoID0gNDsgwqAgwqAgwqAgLyogNCBiaXQgaXMgcG9zc2libGUgKi8K PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJyZWFrOwo+ICsgwqAgwqAgwqAgZGVmYXVsdDoKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGhvc3RfZGF0YS0+YnVzX3dpZHRoID0gMDsKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIG1jaV9wZGF0YS0+YnVzX3dpZHRoID0gMTsgwqAgwqAgwqAgLyogMSBi aXQgaXMgcG9zc2libGUgKi8KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJyZWFrOwo+ICsgwqAg wqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIHJlZyA9IHJlYWRsKGh3X2Rldi0+bWFwX2Jhc2UgKyBT RElDT04pOwo+ICsgwqAgwqAgwqAgaWYgKGNsb2NrKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCAvKiBzZXR1cCB0aGUgSU8gY2xvY2sgZnJlcXVlbmN5IGFuZCBlbmFibGUgaXQgKi8KPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIG1jaV9wZGF0YS0+Y2xvY2sgPSBob3N0X2RhdGEtPmNsb2NrID0g czNjX3NldHVwX2Nsb2NrX3NwZWVkKGh3X2RldiwgY2xvY2spOwo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgcmVnIHw9IFNESUNPTl9DTEtFTjsgwqAgwqAvKiBlbmFibGUgdGhlIGNsb2NrICovCj4g KyDCoCDCoCDCoCB9IGVsc2Ugewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmVnICY9IH5TRElD T05fQ0xLRU47IMKgIC8qIGRpc2FibGUgdGhlIGNsb2NrICovCj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCBtY2lfcGRhdGEtPmNsb2NrID0gaG9zdF9kYXRhLT5jbG9jayA9IDA7Cj4gKyDCoCDCoCDC oCB9Cj4gKyDCoCDCoCDCoCB3cml0ZWwocmVnLCBod19kZXYtPm1hcF9iYXNlICsgU0RJQ09OKTsK PiArCj4gKyDCoCDCoCDCoCBwcl9kZWJ1ZygiSU8gc2V0dGluZ3M6IGJ1cyB3aWR0aD0lZCwgZnJl cXVlbmN5PSV1IEh6XG4iLCBtY2lfcGRhdGEtPmJ1c193aWR0aCwgbWNpX3BkYXRhLT5jbG9jayk7 Cj4gK30KPiArCj4gKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCj4gKwo+ICsjaWZkZWYgQ09ORklHX01D SV9JTkZPCj4gK3N0YXRpYyB2b2lkIHMzY19pbmZvKHN0cnVjdCBkZXZpY2VfZCAqaHdfZGV2KQo+ ICt7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgczNjX21jaV9ob3N0ICpob3N0ID0gKHN0cnVjdCBzM2Nf bWNpX2hvc3QqKWh3X2Rldi0+cHJpdjsKPiArIMKgIMKgIMKgIHN0cnVjdCBzM2NfbWNpX3BsYXRm b3JtX2RhdGEgKnBkID0gKHN0cnVjdCBzM2NfbWNpX3BsYXRmb3JtX2RhdGEqKWh3X2Rldi0+cGxh dGZvcm1fZGF0YTsKPiArCj4gKyDCoCDCoCDCoCBwcmludGYoIiDCoEJ1cyBkYXRhIHdpZHRoOiAl ZCBiaXRcbiIsIGhvc3QtPmJ1c193aWR0aCA9PSAxID8gNCA6IDEpOwo+ICsgwqAgwqAgwqAgcHJp bnRmKCIgwqBCdXMgZnJlcXVlbmN5OiAldSBIelxuIiwgaG9zdC0+Y2xvY2spOwo+ICsgwqAgwqAg wqAgcHJpbnRmKCIgwqAgRnJlcXVlbmN5IGxpbWl0czogIik7Cj4gKyDCoCDCoCDCoCBpZiAocGQt PmZfbWluID09IDApCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwcmludGYoIm5vIGxvd2VyIGxp bWl0ICIpOwo+ICsgwqAgwqAgwqAgZWxzZQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcHJpbnRm KCIldSBIeiBsb3dlciBsaW1pdCAiLCBwZC0+Zl9taW4pOwo+ICsgwqAgwqAgwqAgaWYgKHBkLT5m X21heCA9PSAwKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcHJpbnRmKCItIG5vIHVwcGVyIGxp bWl0Iik7Cj4gKyDCoCDCoCDCoCBlbHNlCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwcmludGYo Ii0gJXUgSHogdXBwZXIgbGltaXQiLCBwZC0+Zl9tYXgpOwo+ICsgwqAgwqAgwqAgcHJpbnRmKCJc biDCoENhcmQgZGV0ZWN0aW9uIHN1cHBvcnQ6ICVzXG4iLCBwZC0+Z3Bpb19kZXRlY3QgIT0gMCA/ ICJ5ZXMiIDogIm5vIik7Cj4gK30KPiArI2VuZGlmCj4gKwo+ICsvKgo+ICsgKiBUaGVyZSBpcyBv bmx5IG9uZSBob3N0IE1DSSBoYXJkd2FyZSBpbnN0YW5jZSBhdmFpbGFibGUuCj4gKyAqIEl0IG1h a2VzIG5vIHNlbnNlIHRvIGR5bmFtaWNhbGx5IGFsbG9jYXRlIHRoaXMgZGF0YQo+ICsgKi8KPiAr c3RhdGljIHN0cnVjdCBtY2lfcGxhdGZvcm1kYXRhIG1jaV9wZGF0YSA9IHsKPiArIMKgIMKgIMKg IC5zZW5kX2NtZCA9IG1jaV9yZXF1ZXN0LAo+ICsgwqAgwqAgwqAgLnNldF9pb3MgPSBtY2lfc2V0 X2lvcywKPiArIMKgIMKgIMKgIC5pbml0ID0gbWNpX3Jlc2V0LAo+ICt9Owo+ICsKPiArc3RhdGlj IGludCBzM2NfbWNpX3Byb2JlKHN0cnVjdCBkZXZpY2VfZCAqaHdfZGV2KQo+ICt7Cj4gKyDCoCDC oCDCoCBzdHJ1Y3QgczNjX21jaV9wbGF0Zm9ybV9kYXRhICpwZCA9IChzdHJ1Y3QgczNjX21jaV9w bGF0Zm9ybV9kYXRhKilod19kZXYtPnBsYXRmb3JtX2RhdGE7Cj4gKwo+ICsgwqAgwqAgwqAgLyog VE9ETyByZXBsYWNlIGJ5IHRoZSBnbG9iYWwgZnVuYzogZW5hYmxlIHRoZSBTREkgdW5pdCBjbG9j ayAqLwo+ICsgwqAgwqAgwqAgd3JpdGVsKHJlYWRsKFMzQzI0WDBfQ0xPQ0tfUE9XRVJfQkFTRSAr IDB4MGMpIHwgMHgyMDAsUzNDMjRYMF9DTE9DS19QT1dFUl9CQVNFICsgMHgwYyk7Cj4gKwo+ICsg wqAgwqAgwqAgaWYgKHBkID09IE5VTEwpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHByX2Vy cigiTWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJl dHVybiAtRUlOVkFMOwo+ICsgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIGh3X2Rldi0+cHJp diA9ICZob3N0X2RhdGE7Cj4gKyDCoCDCoCDCoCBtY2lfcGRhdGEuaHdfZGV2ID0gaHdfZGV2Owo+ ICsKPiArIMKgIMKgIMKgIC8qIGZlZWQgZm9yd2FyZCB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgdmFs dWVzICovCj4gKyDCoCDCoCDCoCBtY2lfcGRhdGEudm9sdGFnZXMgPSBwZC0+dm9sdGFnZXM7Cj4g KyDCoCDCoCDCoCBtY2lfcGRhdGEuaG9zdF9jYXBzID0gcGQtPmNhcHM7Cj4gKyDCoCDCoCDCoCBt Y2lfcGRhdGEuZl9taW4gPSBwZC0+Zl9taW4gPT0gMCA/IENMT0NLUkFURV9NSU4gOiBwZC0+Zl9t aW47Cj4gKyDCoCDCoCDCoCBtY2lfcGRhdGEuZl9tYXggPSBwZC0+Zl9tYXggPT0gMCA/IENMT0NL UkFURV9NQVggOiBwZC0+Zl9tYXg7Cj4gKwo+ICsgwqAgwqAgwqAgLyoKPiArIMKgIMKgIMKgIMKg KiBTdGFydCB0aGUgY2xvY2sgdG8gbGV0IHRoZSBlbmdpbmUgYW5kIHRoZSBjYXJkIGZpbmlzaGVz IGl0cyBzdGFydHVwCj4gKyDCoCDCoCDCoCDCoCovCj4gKyDCoCDCoCDCoCBob3N0X2RhdGEuY2xv Y2sgPSBzM2Nfc2V0dXBfY2xvY2tfc3BlZWQoaHdfZGV2LCBtY2lfcGRhdGEuZl9taW4pOwo+ICsg wqAgwqAgwqAgd3JpdGVsKFNESUNPTl9GSUZPUkVTRVQgfCBTRElDT05fTU1DQ0xPQ0ssIGh3X2Rl di0+bWFwX2Jhc2UgKyBTRElDT04pOwo+ICsKPiArIMKgIMKgIMKgIHJldHVybiBtY2lfcmVnaXN0 ZXIoJm1jaV9wZGF0YSk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJpdmVyX2QgczNjX21j aV9kcml2ZXIgPSB7Cj4gKyDCoCDCoCDCoCDCoC5uYW1lIMKgPSAiczNjX21jaSIsCj4gKyDCoCDC oCDCoCDCoC5wcm9iZSA9IHMzY19tY2lfcHJvYmUsCj4gKyNpZmRlZiBDT05GSUdfTUNJX0lORk8K PiArIMKgIMKgIMKgIC5pbmZvID0gczNjX2luZm8sCj4gKyNlbmRpZgo+ICt9Owo+ICsKPiArc3Rh dGljIGludCBzM2NfbWNpX2luaXRfZHJpdmVyKHZvaWQpCj4gK3sKPiArIMKgIMKgIMKgIMKgcmVn aXN0ZXJfZHJpdmVyKCZzM2NfbWNpX2RyaXZlcik7Cj4gKyDCoCDCoCDCoCDCoHJldHVybiAwOwo+ ICt9Cj4gKwo+ICtkZXZpY2VfaW5pdGNhbGwoczNjX21jaV9pbml0X2RyaXZlcik7Cj4gLS0KPiAx LjcuMi4zCj4KPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCj4gYmFyZWJveCBtYWlsaW5nIGxpc3QKPiBiYXJlYm94QGxpc3RzLmluZnJhZGVhZC5vcmcK PiBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2JhcmVib3gKPgoK bWFyZWsKCi0tIAphcyBzaW1wbGUgYW5kIHByaW1pdGl2ZSBhcyBwb3NzaWJsZQotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk1hcmVrIEJlbGlza28gLSBP UEVOLU5BTkRSQQpGcmVlbGFuY2UgRGV2ZWxvcGVyCgpSdXNrYSBOb3ZhIFZlcyAyMTkgfCBQcmVz b3YsIDA4MDA1IFNsb3ZhayBSZXB1YmxpYwpUZWw6ICs0MjEgOTE1IDA1MiAxODQKc2t5cGU6IG1h cmVrd2hpdGUKaWNxOiAyOTA1NTEwODYKd2ViOiBodHRwOi8vb3Blbi1uYW5kcmEuY29tCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpiYXJlYm94IG1haWxp bmcgbGlzdApiYXJlYm94QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9iYXJlYm94Cg==