From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oded Gabbay Subject: Re: [PATCH 11/25] drm/amdkfd: Centralize IOMMUv2 code and make it conditional Date: Mon, 12 Feb 2018 11:06:15 +0200 Message-ID: References: <1517967174-21709-1-git-send-email-Felix.Kuehling@amd.com> <1517967174-21709-12-git-send-email-Felix.Kuehling@amd.com> <281bede7-0ae6-c7d1-3d3a-a3e0497244c1@gmail.com> <50866577-97a4-2786-18af-ddb60a435aea@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <50866577-97a4-2786-18af-ddb60a435aea-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: =?UTF-8?Q?Christian_K=C3=B6nig?= Cc: Felix Kuehling , amd-gfx list VGhpcyBwYXRjaCBpczoKUmV2aWV3ZWQtYnk6IE9kZWQgR2FiYmF5IDxvZGVkLmdhYmJheUBnbWFp bC5jb20+CgoKT24gVGh1LCBGZWIgOCwgMjAxOCBhdCAxMDoxNiBBTSwgQ2hyaXN0aWFuIEvDtm5p Zwo8Y2tvZW5pZy5sZWljaHR6dW1lcmtlbkBnbWFpbC5jb20+IHdyb3RlOgo+IEFtIDA3LjAyLjIw MTggdW0gMjE6NTEgc2NocmllYiBGZWxpeCBLdWVobGluZzoKPgo+IE9uIDIwMTgtMDItMDcgMDY6 MjAgQU0sIENocmlzdGlhbiBLw7ZuaWcgd3JvdGU6Cj4KPiBBbSAwNy4wMi4yMDE4IHVtIDAyOjMy IHNjaHJpZWIgRmVsaXggS3VlaGxpbmc6Cj4KPiBkR1BVcyB3b3JrIHdpdGhvdXQgSU9NTVV2Mi4g TWFrZSBJT01NVXYyIGluaXRpYWxpemF0aW9uIGRlcGVuZGVudCBvbgo+IEFTSUMgaW5mb3JtYXRp b24uIEFsc28gYWxsb3cgYnVpbGRpbmcgS0ZEIHdpdGhvdXQgSU9NTVV2MiBzdXBwb3J0Lgo+IFRo aXMgaXMgc3RpbGwgdXNlZnVsIGZvciBkR1BVcyBhbmQgcHJlcGFyZXMgZm9yIGVuYWJsaW5nIEtG RCBvbgo+IGFyY2hpdGVjdHVyZXMgdGhhdCBkb24ndCBzdXBwb3J0IEFNRCBJT01NVXYyLgo+Cj4g djI6Cj4gKiBDZW50cmFsaXplIElPTU1VdjIgY29kZSB0byBhdm9pZCAjaWZkZWZzIGluIHRvbyBt YW55IHBsYWNlcwo+Cj4gU2lnbmVkLW9mZi1ieTogRmVsaXggS3VlaGxpbmcgPEZlbGl4Lkt1ZWhs aW5nQGFtZC5jb20+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmln ICAgICAgICB8ICAgMiArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvTWFrZWZpbGUg ICAgICAgfCAgIDQgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NyYXQuYyAg ICAgfCAgMTQgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2UuYyAg IHwgMTI3ICsrKy0tLS0tLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZXZl bnRzLmMgICB8ICAgMyArCj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfaW9tbXUu YyAgICB8IDM1Ngo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRrZmQva2ZkX2lvbW11LmggICAgfCAgNzggKysrKysrKwo+ICAgZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3ByaXYuaCAgICAgfCAgMTQgKy0KPiAgIGRyaXZlcnMv Z3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcm9jZXNzLmMgIHwgMTM4ICstLS0tLS0tLS0tLQo+ICAg ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3RvcG9sb2d5LmMgfCAgMTYgKy0KPiAgIGRy aXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF90b3BvbG9neS5oIHwgICA2ICstCj4gICAxMSBm aWxlcyBjaGFuZ2VkLCA0OTMgaW5zZXJ0aW9ucygrKSwgMjY1IGRlbGV0aW9ucygtKQo+ICAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9pb21tdS5jCj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2lvbW11 LmgKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnCj4g Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnCj4gaW5kZXggYmM1YTI5NC4uNWJi ZWI5NSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZwo+IEBAIC00LDYgKzQsNiBA QAo+ICAgICBjb25maWcgSFNBX0FNRAo+ICAgICAgIHRyaXN0YXRlICJIU0Ega2VybmVsIGRyaXZl ciBmb3IgQU1EIEdQVSBkZXZpY2VzIgo+IC0gICAgZGVwZW5kcyBvbiBEUk1fQU1ER1BVICYmIEFN RF9JT01NVV9WMiAmJiBYODZfNjQKPiArICAgIGRlcGVuZHMgb24gRFJNX0FNREdQVSAmJiBYODZf NjQKPgo+IFlvdSBzdGlsbCBuZWVkIGEgd2VhayBkZXBlbmRlbmN5IG9uIEFNRF9JT01NVV9WMiBo ZXJlLCBpbiBvdGhlciB3b3Jkcwo+IGFkZCAiaW1wbHkgQU1EX0lPTU1VX1YyIi4KPgo+IFRoaXMg cHJldmVudHMgaWxsZWdhbCBjb21iaW5hdGlvbnMgbGlrZSBsaW5raW5nIGFtZGtmZCBpbnRvIHRo ZSBrZXJuZWwKPiB3aGlsZSBhbWRfaW9tbXVfdjIgaXMgYSBtb2R1bGUuCj4KPiBCdXQgaXQgc2hv dWxkIHN0aWxsIGFsbG93IHRvIGNvbXBsZXRlbHkgZGlzYWJsZSBhbWRfaW9tbXVfdjIgYW5kCj4g Y29tcGlsZSBhbWRrZmQgd2l0aG91dCBzdXBwb3J0IGZvciBpdC4KPgo+IFRoYW5rcywgdGhhdCdz IGdvb2QgdG8ga25vdy4gQW4gdXBkYXRlZCBwYXRjaCBpcyBhdHRhY2hlZCAodG8gYXZvaWQKPiBy ZXNlbmRpbmcgdGhlIHdob2xlIHNlcmllcykuCj4KPgo+IFBhdGNoIGlzIEFja2VkLWJ5OiBDaHJp c3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+Lgo+Cj4gUmVnYXJkcywKPiBD aHJpc3RpYW4uCj4KPgo+IFJlZ2FyZHMsCj4gICBGZWxpeAo+Cj4gQ2hyaXN0aWFuLgo+Cj4gICAg ICAgaGVscAo+ICAgICAgICAgRW5hYmxlIHRoaXMgaWYgeW91IHdhbnQgdG8gdXNlIEhTQSBmZWF0 dXJlcyBvbiBBTUQgR1BVIGRldmljZXMuCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1ka2ZkL01ha2VmaWxlCj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9NYWtlZmls ZQo+IGluZGV4IGEzMTdlNzYuLjBkMDI0MjIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRrZmQvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9N YWtlZmlsZQo+IEBAIC0zNyw2ICszNywxMCBAQCBhbWRrZmQteSAgICA6PSBrZmRfbW9kdWxlLm8g a2ZkX2RldmljZS5vCj4ga2ZkX2NoYXJkZXYubyBrZmRfdG9wb2xvZ3kubyBcCj4gICAgICAgICAg IGtmZF9pbnRlcnJ1cHQubyBrZmRfZXZlbnRzLm8gY2lrX2V2ZW50X2ludGVycnVwdC5vIFwKPiAg ICAgICAgICAga2ZkX2RiZ2Rldi5vIGtmZF9kYmdtZ3IubyBrZmRfY3JhdC5vCj4gICAraWZuZXEg KCQoQ09ORklHX0FNRF9JT01NVV9WMiksKQo+ICthbWRrZmQteSArPSBrZmRfaW9tbXUubwo+ICtl bmRpZgo+ICsKPiAgIGFtZGtmZC0kKENPTkZJR19ERUJVR19GUykgKz0ga2ZkX2RlYnVnZnMubwo+ ICAgICBvYmotJChDT05GSUdfSFNBX0FNRCkgICAgKz0gYW1ka2ZkLm8KPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NyYXQuYwo+IGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRrZmQva2ZkX2NyYXQuYwo+IGluZGV4IDJiYzI4MTYuLjc0OTNmNDcgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2NyYXQuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9jcmF0LmMKPiBAQCAtMjIsMTAgKzIyLDEwIEBACj4g ICAgICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KPiAgICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+Cj4g LSNpbmNsdWRlIDxsaW51eC9hbWQtaW9tbXUuaD4KPiAgICNpbmNsdWRlICJrZmRfY3JhdC5oIgo+ ICAgI2luY2x1ZGUgImtmZF9wcml2LmgiCj4gICAjaW5jbHVkZSAia2ZkX3RvcG9sb2d5LmgiCj4g KyNpbmNsdWRlICJrZmRfaW9tbXUuaCIKPiAgICAgLyogR1BVIFByb2Nlc3NvciBJRCBiYXNlIGZv ciBkR1BVcyBmb3Igd2hpY2ggVkNSQVQgbmVlZHMgdG8gYmUKPiBjcmVhdGVkLgo+ICAgICogR1BV IHByb2Nlc3NvciBJRCBhcmUgZXhwcmVzc2VkIHdpdGggQml0WzMxXT0xLgo+IEBAIC0xMDM3LDE1 ICsxMDM3LDExIEBAIHN0YXRpYyBpbnQga2ZkX2NyZWF0ZV92Y3JhdF9pbWFnZV9ncHUodm9pZAo+ ICpwY3JhdF9pbWFnZSwKPiAgICAgICBzdHJ1Y3QgY3JhdF9zdWJ0eXBlX2dlbmVyaWMgKnN1Yl90 eXBlX2hkcjsKPiAgICAgICBzdHJ1Y3QgY3JhdF9zdWJ0eXBlX2NvbXB1dGV1bml0ICpjdTsKPiAg ICAgICBzdHJ1Y3Qga2ZkX2N1X2luZm8gY3VfaW5mbzsKPiAtICAgIHN0cnVjdCBhbWRfaW9tbXVf ZGV2aWNlX2luZm8gaW9tbXVfaW5mbzsKPiAgICAgICBpbnQgYXZhaWxfc2l6ZSA9ICpzaXplOwo+ ICAgICAgIHVpbnQzMl90IHRvdGFsX251bV9vZl9jdTsKPiAgICAgICBpbnQgbnVtX29mX2NhY2hl X2VudHJpZXMgPSAwOwo+ICAgICAgIGludCBjYWNoZV9tZW1fZmlsbGVkID0gMDsKPiAgICAgICBp bnQgcmV0ID0gMDsKPiAtICAgIGNvbnN0IHUzMiByZXF1aXJlZF9pb21tdV9mbGFncyA9IEFNRF9J T01NVV9ERVZJQ0VfRkxBR19BVFNfU1VQIHwKPiAtICAgICAgICAgICAgICAgICAgICAgQU1EX0lP TU1VX0RFVklDRV9GTEFHX1BSSV9TVVAgfAo+IC0gICAgICAgICAgICAgICAgICAgICBBTURfSU9N TVVfREVWSUNFX0ZMQUdfUEFTSURfU1VQOwo+ICAgICAgIHN0cnVjdCBrZmRfbG9jYWxfbWVtX2lu Zm8gbG9jYWxfbWVtX2luZm87Cj4gICAgICAgICBpZiAoIXBjcmF0X2ltYWdlIHx8IGF2YWlsX3Np emUgPCBWQ1JBVF9TSVpFX0ZPUl9HUFUpCj4gQEAgLTExMDYsMTIgKzExMDIsOCBAQCBzdGF0aWMg aW50IGtmZF9jcmVhdGVfdmNyYXRfaW1hZ2VfZ3B1KHZvaWQKPiAqcGNyYXRfaW1hZ2UsCj4gICAg ICAgLyogQ2hlY2sgaWYgdGhpcyBub2RlIHN1cHBvcnRzIElPTU1VLiBEdXJpbmcgcGFyc2luZyB0 aGlzIGZsYWcKPiB3aWxsCj4gICAgICAgICogdHJhbnNsYXRlIHRvIEhTQV9DQVBfQVRTX1BSRVNF TlQKPiAgICAgICAgKi8KPiAtICAgIGlvbW11X2luZm8uZmxhZ3MgPSAwOwo+IC0gICAgaWYgKGFt ZF9pb21tdV9kZXZpY2VfaW5mbyhrZGV2LT5wZGV2LCAmaW9tbXVfaW5mbykgPT0gMCkgewo+IC0g ICAgICAgIGlmICgoaW9tbXVfaW5mby5mbGFncyAmIHJlcXVpcmVkX2lvbW11X2ZsYWdzKSA9PQo+ IC0gICAgICAgICAgICAgICAgcmVxdWlyZWRfaW9tbXVfZmxhZ3MpCj4gLSAgICAgICAgICAgIGN1 LT5oc2FfY2FwYWJpbGl0eSB8PSBDUkFUX0NVX0ZMQUdTX0lPTU1VX1BSRVNFTlQ7Cj4gLSAgICB9 Cj4gKyAgICBpZiAoIWtmZF9pb21tdV9jaGVja19kZXZpY2Uoa2RldikpCj4gKyAgICAgICAgY3Ut PmhzYV9jYXBhYmlsaXR5IHw9IENSQVRfQ1VfRkxBR1NfSU9NTVVfUFJFU0VOVDsKPiAgICAgICAg IGNyYXRfdGFibGUtPmxlbmd0aCArPSBzdWJfdHlwZV9oZHItPmxlbmd0aDsKPiAgICAgICBjcmF0 X3RhYmxlLT50b3RhbF9lbnRyaWVzKys7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1ka2ZkL2tmZF9kZXZpY2UuYwo+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2Zk X2RldmljZS5jCj4gaW5kZXggODNkNmY0MS4uNGFjMmQ2MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGtmZC9rZmRfZGV2aWNlLmMKPiBAQCAtMjAsNyArMjAsOSBAQAo+ICAgICogT1RIRVIg REVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgo+ICAgICovCj4gICArI2lmIGRlZmluZWQoQ09ORklH X0FNRF9JT01NVV9WMl9NT0RVTEUpIHx8Cj4gZGVmaW5lZChDT05GSUdfQU1EX0lPTU1VX1YyKQo+ ICAgI2luY2x1ZGUgPGxpbnV4L2FtZC1pb21tdS5oPgo+ICsjZW5kaWYKPiAgICNpbmNsdWRlIDxs aW51eC9ic2VhcmNoLmg+Cj4gICAjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4gICAjaW5jbHVkZSA8 bGludXgvc2xhYi5oPgo+IEBAIC0yOCw5ICszMCwxMSBAQAo+ICAgI2luY2x1ZGUgImtmZF9kZXZp Y2VfcXVldWVfbWFuYWdlci5oIgo+ICAgI2luY2x1ZGUgImtmZF9wbTRfaGVhZGVyc192aS5oIgo+ ICAgI2luY2x1ZGUgImN3c3JfdHJhcF9oYW5kbGVyX2dmeDguYXNtIgo+ICsjaW5jbHVkZSAia2Zk X2lvbW11LmgiCj4gICAgICNkZWZpbmUgTVFEX1NJWkVfQUxJR05FRCA3NjgKPiAgICsjaWZkZWYg S0ZEX1NVUFBPUlRfSU9NTVVfVjIKPiAgIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2ZkX2RldmljZV9p bmZvIGthdmVyaV9kZXZpY2VfaW5mbyA9IHsKPiAgICAgICAuYXNpY19mYW1pbHkgPSBDSElQX0tB VkVSSSwKPiAgICAgICAubWF4X3Bhc2lkX2JpdHMgPSAxNiwKPiBAQCAtNDEsNiArNDUsNyBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IGtmZF9kZXZpY2VfaW5mbwo+IGthdmVyaV9kZXZpY2VfaW5mbyA9 IHsKPiAgICAgICAubnVtX29mX3dhdGNoX3BvaW50cyA9IDQsCj4gICAgICAgLm1xZF9zaXplX2Fs aWduZWQgPSBNUURfU0laRV9BTElHTkVELAo+ICAgICAgIC5zdXBwb3J0c19jd3NyID0gZmFsc2Us Cj4gKyAgICAubmVlZHNfaW9tbXVfZGV2aWNlID0gdHJ1ZSwKPiAgICAgICAubmVlZHNfcGNpX2F0 b21pY3MgPSBmYWxzZSwKPiAgIH07Cj4gICBAQCAtNTQsOCArNTksMTAgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBrZmRfZGV2aWNlX2luZm8KPiBjYXJyaXpvX2RldmljZV9pbmZvID0gewo+ICAgICAg IC5udW1fb2Zfd2F0Y2hfcG9pbnRzID0gNCwKPiAgICAgICAubXFkX3NpemVfYWxpZ25lZCA9IE1R RF9TSVpFX0FMSUdORUQsCj4gICAgICAgLnN1cHBvcnRzX2N3c3IgPSB0cnVlLAo+ICsgICAgLm5l ZWRzX2lvbW11X2RldmljZSA9IHRydWUsCj4gICAgICAgLm5lZWRzX3BjaV9hdG9taWNzID0gZmFs c2UsCj4gICB9Owo+ICsjZW5kaWYKPiAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBrZmRfZGV2aWNl X2luZm8gaGF3YWlpX2RldmljZV9pbmZvID0gewo+ICAgICAgIC5hc2ljX2ZhbWlseSA9IENISVBf SEFXQUlJLAo+IEBAIC02Nyw2ICs3NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2ZkX2Rldmlj ZV9pbmZvCj4gaGF3YWlpX2RldmljZV9pbmZvID0gewo+ICAgICAgIC5udW1fb2Zfd2F0Y2hfcG9p bnRzID0gNCwKPiAgICAgICAubXFkX3NpemVfYWxpZ25lZCA9IE1RRF9TSVpFX0FMSUdORUQsCj4g ICAgICAgLnN1cHBvcnRzX2N3c3IgPSBmYWxzZSwKPiArICAgIC5uZWVkc19pb21tdV9kZXZpY2Ug PSBmYWxzZSwKPiAgICAgICAubmVlZHNfcGNpX2F0b21pY3MgPSBmYWxzZSwKPiAgIH07Cj4gICBA QCAtNzksNiArODcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtmZF9kZXZpY2VfaW5mbwo+IHRv bmdhX2RldmljZV9pbmZvID0gewo+ICAgICAgIC5udW1fb2Zfd2F0Y2hfcG9pbnRzID0gNCwKPiAg ICAgICAubXFkX3NpemVfYWxpZ25lZCA9IE1RRF9TSVpFX0FMSUdORUQsCj4gICAgICAgLnN1cHBv cnRzX2N3c3IgPSBmYWxzZSwKPiArICAgIC5uZWVkc19pb21tdV9kZXZpY2UgPSBmYWxzZSwKPiAg ICAgICAubmVlZHNfcGNpX2F0b21pY3MgPSB0cnVlLAo+ICAgfTsKPiAgIEBAIC05MSw2ICsxMDAs NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtmZF9kZXZpY2VfaW5mbwo+IHRvbmdhX3ZmX2Rldmlj ZV9pbmZvID0gewo+ICAgICAgIC5udW1fb2Zfd2F0Y2hfcG9pbnRzID0gNCwKPiAgICAgICAubXFk X3NpemVfYWxpZ25lZCA9IE1RRF9TSVpFX0FMSUdORUQsCj4gICAgICAgLnN1cHBvcnRzX2N3c3Ig PSBmYWxzZSwKPiArICAgIC5uZWVkc19pb21tdV9kZXZpY2UgPSBmYWxzZSwKPiAgICAgICAubmVl ZHNfcGNpX2F0b21pY3MgPSBmYWxzZSwKPiAgIH07Cj4gICBAQCAtMTAzLDYgKzExMyw3IEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3Qga2ZkX2RldmljZV9pbmZvCj4gZmlqaV9kZXZpY2VfaW5mbyA9IHsK PiAgICAgICAubnVtX29mX3dhdGNoX3BvaW50cyA9IDQsCj4gICAgICAgLm1xZF9zaXplX2FsaWdu ZWQgPSBNUURfU0laRV9BTElHTkVELAo+ICAgICAgIC5zdXBwb3J0c19jd3NyID0gdHJ1ZSwKPiAr ICAgIC5uZWVkc19pb21tdV9kZXZpY2UgPSBmYWxzZSwKPiAgICAgICAubmVlZHNfcGNpX2F0b21p Y3MgPSB0cnVlLAo+ICAgfTsKPiAgIEBAIC0xMTUsNiArMTI2LDcgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCBrZmRfZGV2aWNlX2luZm8KPiBmaWppX3ZmX2RldmljZV9pbmZvID0gewo+ICAgICAgIC5u dW1fb2Zfd2F0Y2hfcG9pbnRzID0gNCwKPiAgICAgICAubXFkX3NpemVfYWxpZ25lZCA9IE1RRF9T SVpFX0FMSUdORUQsCj4gICAgICAgLnN1cHBvcnRzX2N3c3IgPSB0cnVlLAo+ICsgICAgLm5lZWRz X2lvbW11X2RldmljZSA9IGZhbHNlLAo+ICAgICAgIC5uZWVkc19wY2lfYXRvbWljcyA9IGZhbHNl LAo+ICAgfTsKPiAgIEBAIC0xMjgsNiArMTQwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrZmRf ZGV2aWNlX2luZm8KPiBwb2xhcmlzMTBfZGV2aWNlX2luZm8gPSB7Cj4gICAgICAgLm51bV9vZl93 YXRjaF9wb2ludHMgPSA0LAo+ICAgICAgIC5tcWRfc2l6ZV9hbGlnbmVkID0gTVFEX1NJWkVfQUxJ R05FRCwKPiAgICAgICAuc3VwcG9ydHNfY3dzciA9IHRydWUsCj4gKyAgICAubmVlZHNfaW9tbXVf ZGV2aWNlID0gZmFsc2UsCj4gICAgICAgLm5lZWRzX3BjaV9hdG9taWNzID0gdHJ1ZSwKPiAgIH07 Cj4gICBAQCAtMTQwLDYgKzE1Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga2ZkX2RldmljZV9p bmZvCj4gcG9sYXJpczEwX3ZmX2RldmljZV9pbmZvID0gewo+ICAgICAgIC5udW1fb2Zfd2F0Y2hf cG9pbnRzID0gNCwKPiAgICAgICAubXFkX3NpemVfYWxpZ25lZCA9IE1RRF9TSVpFX0FMSUdORUQs Cj4gICAgICAgLnN1cHBvcnRzX2N3c3IgPSB0cnVlLAo+ICsgICAgLm5lZWRzX2lvbW11X2Rldmlj ZSA9IGZhbHNlLAo+ICAgICAgIC5uZWVkc19wY2lfYXRvbWljcyA9IGZhbHNlLAo+ICAgfTsKPiAg IEBAIC0xNTIsNiArMTY2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrZmRfZGV2aWNlX2luZm8K PiBwb2xhcmlzMTFfZGV2aWNlX2luZm8gPSB7Cj4gICAgICAgLm51bV9vZl93YXRjaF9wb2ludHMg PSA0LAo+ICAgICAgIC5tcWRfc2l6ZV9hbGlnbmVkID0gTVFEX1NJWkVfQUxJR05FRCwKPiAgICAg ICAuc3VwcG9ydHNfY3dzciA9IHRydWUsCj4gKyAgICAubmVlZHNfaW9tbXVfZGV2aWNlID0gZmFs c2UsCj4gICAgICAgLm5lZWRzX3BjaV9hdG9taWNzID0gdHJ1ZSwKPiAgIH07Cj4gICBAQCAtMTYy LDYgKzE3Nyw3IEBAIHN0cnVjdCBrZmRfZGV2aWNlaWQgewo+ICAgfTsKPiAgICAgc3RhdGljIGNv bnN0IHN0cnVjdCBrZmRfZGV2aWNlaWQgc3VwcG9ydGVkX2RldmljZXNbXSA9IHsKPiArI2lmZGVm IEtGRF9TVVBQT1JUX0lPTU1VX1YyCj4gICAgICAgeyAweDEzMDQsICZrYXZlcmlfZGV2aWNlX2lu Zm8gfSwgICAgLyogS2F2ZXJpICovCj4gICAgICAgeyAweDEzMDUsICZrYXZlcmlfZGV2aWNlX2lu Zm8gfSwgICAgLyogS2F2ZXJpICovCj4gICAgICAgeyAweDEzMDYsICZrYXZlcmlfZGV2aWNlX2lu Zm8gfSwgICAgLyogS2F2ZXJpICovCj4gQEAgLTE4OSw2ICsyMDUsNyBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGtmZF9kZXZpY2VpZAo+IHN1cHBvcnRlZF9kZXZpY2VzW10gPSB7Cj4gICAgICAgeyAw eDk4NzUsICZjYXJyaXpvX2RldmljZV9pbmZvIH0sICAgIC8qIENhcnJpem8gKi8KPiAgICAgICB7 IDB4OTg3NiwgJmNhcnJpem9fZGV2aWNlX2luZm8gfSwgICAgLyogQ2Fycml6byAqLwo+ICAgICAg IHsgMHg5ODc3LCAmY2Fycml6b19kZXZpY2VfaW5mbyB9LCAgICAvKiBDYXJyaXpvICovCj4gKyNl bmRpZgo+ICAgICAgIHsgMHg2N0EwLCAmaGF3YWlpX2RldmljZV9pbmZvIH0sICAgIC8qIEhhd2Fp aSAqLwo+ICAgICAgIHsgMHg2N0ExLCAmaGF3YWlpX2RldmljZV9pbmZvIH0sICAgIC8qIEhhd2Fp aSAqLwo+ICAgICAgIHsgMHg2N0EyLCAmaGF3YWlpX2RldmljZV9pbmZvIH0sICAgIC8qIEhhd2Fp aSAqLwo+IEBAIC0zMDIsNzcgKzMxOSw2IEBAIHN0cnVjdCBrZmRfZGV2ICprZ2Qya2ZkX3Byb2Jl KHN0cnVjdCBrZ2RfZGV2ICprZ2QsCj4gICAgICAgcmV0dXJuIGtmZDsKPiAgIH0KPiAgIC1zdGF0 aWMgYm9vbCBkZXZpY2VfaW9tbXVfcGFzaWRfaW5pdChzdHJ1Y3Qga2ZkX2RldiAqa2ZkKQo+IC17 Cj4gLSAgICBjb25zdCB1MzIgcmVxdWlyZWRfaW9tbXVfZmxhZ3MgPSBBTURfSU9NTVVfREVWSUNF X0ZMQUdfQVRTX1NVUCB8Cj4gLSAgICAgICAgICAgICAgICAgICAgQU1EX0lPTU1VX0RFVklDRV9G TEFHX1BSSV9TVVAgfAo+IC0gICAgICAgICAgICAgICAgICAgIEFNRF9JT01NVV9ERVZJQ0VfRkxB R19QQVNJRF9TVVA7Cj4gLQo+IC0gICAgc3RydWN0IGFtZF9pb21tdV9kZXZpY2VfaW5mbyBpb21t dV9pbmZvOwo+IC0gICAgdW5zaWduZWQgaW50IHBhc2lkX2xpbWl0Owo+IC0gICAgaW50IGVycjsK PiAtCj4gLSAgICBlcnIgPSBhbWRfaW9tbXVfZGV2aWNlX2luZm8oa2ZkLT5wZGV2LCAmaW9tbXVf aW5mbyk7Cj4gLSAgICBpZiAoZXJyIDwgMCkgewo+IC0gICAgICAgIGRldl9lcnIoa2ZkX2Rldmlj ZSwKPiAtICAgICAgICAgICAgImVycm9yIGdldHRpbmcgaW9tbXUgaW5mby4gaXMgdGhlIGlvbW11 IGVuYWJsZWQ/XG4iKTsKPiAtICAgICAgICByZXR1cm4gZmFsc2U7Cj4gLSAgICB9Cj4gLQo+IC0g ICAgaWYgKChpb21tdV9pbmZvLmZsYWdzICYgcmVxdWlyZWRfaW9tbXVfZmxhZ3MpICE9Cj4gcmVx dWlyZWRfaW9tbXVfZmxhZ3MpIHsKPiAtICAgICAgICBkZXZfZXJyKGtmZF9kZXZpY2UsICJlcnJv ciByZXF1aXJlZCBpb21tdSBmbGFncyBhdHMgJWksIHByaQo+ICVpLCBwYXNpZCAlaVxuIiwKPiAt ICAgICAgICAgICAgICAgKGlvbW11X2luZm8uZmxhZ3MgJiBBTURfSU9NTVVfREVWSUNFX0ZMQUdf QVRTX1NVUCkgIT0gMCwKPiAtICAgICAgICAgICAgICAgKGlvbW11X2luZm8uZmxhZ3MgJiBBTURf SU9NTVVfREVWSUNFX0ZMQUdfUFJJX1NVUCkgIT0gMCwKPiAtICAgICAgICAgICAgICAgKGlvbW11 X2luZm8uZmxhZ3MgJiBBTURfSU9NTVVfREVWSUNFX0ZMQUdfUEFTSURfU1VQKQo+IC0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhPSAwKTsKPiAtICAgICAgICByZXR1cm4gZmFs c2U7Cj4gLSAgICB9Cj4gLQo+IC0gICAgcGFzaWRfbGltaXQgPSBtaW5fdCh1bnNpZ25lZCBpbnQs Cj4gLSAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpKDEgPDwga2ZkLT5kZXZpY2VfaW5mby0+bWF4 X3Bhc2lkX2JpdHMpLAo+IC0gICAgICAgICAgICBpb21tdV9pbmZvLm1heF9wYXNpZHMpOwo+IC0K PiAtICAgIGlmICgha2ZkX3NldF9wYXNpZF9saW1pdChwYXNpZF9saW1pdCkpIHsKPiAtICAgICAg ICBkZXZfZXJyKGtmZF9kZXZpY2UsICJlcnJvciBzZXR0aW5nIHBhc2lkIGxpbWl0XG4iKTsKPiAt ICAgICAgICByZXR1cm4gZmFsc2U7Cj4gLSAgICB9Cj4gLQo+IC0gICAgcmV0dXJuIHRydWU7Cj4g LX0KPiAtCj4gLXN0YXRpYyB2b2lkIGlvbW11X3Bhc2lkX3NodXRkb3duX2NhbGxiYWNrKHN0cnVj dCBwY2lfZGV2ICpwZGV2LCBpbnQKPiBwYXNpZCkKPiAtewo+IC0gICAgc3RydWN0IGtmZF9kZXYg KmRldiA9IGtmZF9kZXZpY2VfYnlfcGNpX2RldihwZGV2KTsKPiAtCj4gLSAgICBpZiAoZGV2KQo+ IC0gICAgICAgIGtmZF9wcm9jZXNzX2lvbW11X3VuYmluZF9jYWxsYmFjayhkZXYsIHBhc2lkKTsK PiAtfQo+IC0KPiAtLyoKPiAtICogVGhpcyBmdW5jdGlvbiBjYWxsZWQgYnkgSU9NTVUgZHJpdmVy IG9uIFBQUiBmYWlsdXJlCj4gLSAqLwo+IC1zdGF0aWMgaW50IGlvbW11X2ludmFsaWRfcHByX2Ni KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgcGFzaWQsCj4gLSAgICAgICAgdW5zaWduZWQgbG9u ZyBhZGRyZXNzLCB1MTYgZmxhZ3MpCj4gLXsKPiAtICAgIHN0cnVjdCBrZmRfZGV2ICpkZXY7Cj4g LQo+IC0gICAgZGV2X3dhcm4oa2ZkX2RldmljZSwKPiAtICAgICAgICAgICAgIkludmFsaWQgUFBS IGRldmljZSAleDoleC4leCBwYXNpZCAlZCBhZGRyZXNzIDB4JWxYCj4gZmxhZ3MgMHglWCIsCj4g LSAgICAgICAgICAgIFBDSV9CVVNfTlVNKHBkZXYtPmRldmZuKSwKPiAtICAgICAgICAgICAgUENJ X1NMT1QocGRldi0+ZGV2Zm4pLAo+IC0gICAgICAgICAgICBQQ0lfRlVOQyhwZGV2LT5kZXZmbiks Cj4gLSAgICAgICAgICAgIHBhc2lkLAo+IC0gICAgICAgICAgICBhZGRyZXNzLAo+IC0gICAgICAg ICAgICBmbGFncyk7Cj4gLQo+IC0gICAgZGV2ID0ga2ZkX2RldmljZV9ieV9wY2lfZGV2KHBkZXYp Owo+IC0gICAgaWYgKCFXQVJOX09OKCFkZXYpKQo+IC0gICAgICAgIGtmZF9zaWduYWxfaW9tbXVf ZXZlbnQoZGV2LCBwYXNpZCwgYWRkcmVzcywKPiAtICAgICAgICAgICAgZmxhZ3MgJiBQUFJfRkFV TFRfV1JJVEUsIGZsYWdzICYgUFBSX0ZBVUxUX0VYRUMpOwo+IC0KPiAtICAgIHJldHVybiBBTURf SU9NTVVfSU5WX1BSSV9SU1BfSU5WQUxJRDsKPiAtfQo+IC0KPiAgIHN0YXRpYyB2b2lkIGtmZF9j d3NyX2luaXQoc3RydWN0IGtmZF9kZXYgKmtmZCkKPiAgIHsKPiAgICAgICBpZiAoY3dzcl9lbmFi bGUgJiYga2ZkLT5kZXZpY2VfaW5mby0+c3VwcG9ydHNfY3dzcikgewo+IEBAIC00NjIsMTEgKzQw OCw5IEBAIGJvb2wga2dkMmtmZF9kZXZpY2VfaW5pdChzdHJ1Y3Qga2ZkX2RldiAqa2ZkLAo+ICAg ICAgICAgICBnb3RvIGRldmljZV9xdWV1ZV9tYW5hZ2VyX2Vycm9yOwo+ICAgICAgIH0KPiAgIC0g ICAgaWYgKCFkZXZpY2VfaW9tbXVfcGFzaWRfaW5pdChrZmQpKSB7Cj4gLSAgICAgICAgZGV2X2Vy cihrZmRfZGV2aWNlLAo+IC0gICAgICAgICAgICAiRXJyb3IgaW5pdGlhbGl6aW5nIGlvbW11djIg Zm9yIGRldmljZSAleDoleFxuIiwKPiAtICAgICAgICAgICAga2ZkLT5wZGV2LT52ZW5kb3IsIGtm ZC0+cGRldi0+ZGV2aWNlKTsKPiAtICAgICAgICBnb3RvIGRldmljZV9pb21tdV9wYXNpZF9lcnJv cjsKPiArICAgIGlmIChrZmRfaW9tbXVfZGV2aWNlX2luaXQoa2ZkKSkgewo+ICsgICAgICAgIGRl dl9lcnIoa2ZkX2RldmljZSwgIkVycm9yIGluaXRpYWxpemluZyBpb21tdXYyXG4iKTsKPiArICAg ICAgICBnb3RvIGRldmljZV9pb21tdV9lcnJvcjsKPiAgICAgICB9Cj4gICAgICAgICBrZmRfY3dz cl9pbml0KGtmZCk7Cj4gQEAgLTQ4Niw3ICs0MzAsNyBAQCBib29sIGtnZDJrZmRfZGV2aWNlX2lu aXQoc3RydWN0IGtmZF9kZXYgKmtmZCwKPiAgICAgICBnb3RvIG91dDsKPiAgICAga2ZkX3Jlc3Vt ZV9lcnJvcjoKPiAtZGV2aWNlX2lvbW11X3Bhc2lkX2Vycm9yOgo+ICtkZXZpY2VfaW9tbXVfZXJy b3I6Cj4gICAgICAgZGV2aWNlX3F1ZXVlX21hbmFnZXJfdW5pbml0KGtmZC0+ZHFtKTsKPiAgIGRl dmljZV9xdWV1ZV9tYW5hZ2VyX2Vycm9yOgo+ICAgICAgIGtmZF9pbnRlcnJ1cHRfZXhpdChrZmQp Owo+IEBAIC01MjcsMTEgKzQ3MSw3IEBAIHZvaWQga2dkMmtmZF9zdXNwZW5kKHN0cnVjdCBrZmRf ZGV2ICprZmQpCj4gICAgICAgICBrZmQtPmRxbS0+b3BzLnN0b3Aoa2ZkLT5kcW0pOwo+ICAgLSAg ICBrZmRfdW5iaW5kX3Byb2Nlc3Nlc19mcm9tX2RldmljZShrZmQpOwo+IC0KPiAtICAgIGFtZF9p b21tdV9zZXRfaW52YWxpZGF0ZV9jdHhfY2Ioa2ZkLT5wZGV2LCBOVUxMKTsKPiAtICAgIGFtZF9p b21tdV9zZXRfaW52YWxpZF9wcHJfY2Ioa2ZkLT5wZGV2LCBOVUxMKTsKPiAtICAgIGFtZF9pb21t dV9mcmVlX2RldmljZShrZmQtPnBkZXYpOwo+ICsgICAga2ZkX2lvbW11X3N1c3BlbmQoa2ZkKTsK PiAgIH0KPiAgICAgaW50IGtnZDJrZmRfcmVzdW1lKHN0cnVjdCBrZmRfZGV2ICprZmQpCj4gQEAg LTU0NiwxOSArNDg2LDE0IEBAIGludCBrZ2Qya2ZkX3Jlc3VtZShzdHJ1Y3Qga2ZkX2RldiAqa2Zk KQo+ICAgc3RhdGljIGludCBrZmRfcmVzdW1lKHN0cnVjdCBrZmRfZGV2ICprZmQpCj4gICB7Cj4g ICAgICAgaW50IGVyciA9IDA7Cj4gLSAgICB1bnNpZ25lZCBpbnQgcGFzaWRfbGltaXQgPSBrZmRf Z2V0X3Bhc2lkX2xpbWl0KCk7Cj4gLQo+IC0gICAgZXJyID0gYW1kX2lvbW11X2luaXRfZGV2aWNl KGtmZC0+cGRldiwgcGFzaWRfbGltaXQpOwo+IC0gICAgaWYgKGVycikKPiAtICAgICAgICByZXR1 cm4gLUVOWElPOwo+IC0gICAgYW1kX2lvbW11X3NldF9pbnZhbGlkYXRlX2N0eF9jYihrZmQtPnBk ZXYsCj4gLSAgICAgICAgICAgICAgICAgICAgaW9tbXVfcGFzaWRfc2h1dGRvd25fY2FsbGJhY2sp Owo+IC0gICAgYW1kX2lvbW11X3NldF9pbnZhbGlkX3Bwcl9jYihrZmQtPnBkZXYsCj4gLSAgICAg ICAgICAgICAgICAgICAgIGlvbW11X2ludmFsaWRfcHByX2NiKTsKPiAgIC0gICAgZXJyID0ga2Zk X2JpbmRfcHJvY2Vzc2VzX3RvX2RldmljZShrZmQpOwo+IC0gICAgaWYgKGVycikKPiAtICAgICAg ICBnb3RvIHByb2Nlc3Nlc19iaW5kX2Vycm9yOwo+ICsgICAgZXJyID0ga2ZkX2lvbW11X3Jlc3Vt ZShrZmQpOwo+ICsgICAgaWYgKGVycikgewo+ICsgICAgICAgIGRldl9lcnIoa2ZkX2RldmljZSwK PiArICAgICAgICAgICAgIkZhaWxlZCB0byByZXN1bWUgSU9NTVUgZm9yIGRldmljZSAleDoleFxu IiwKPiArICAgICAgICAgICAga2ZkLT5wZGV2LT52ZW5kb3IsIGtmZC0+cGRldi0+ZGV2aWNlKTsK PiArICAgICAgICByZXR1cm4gZXJyOwo+ICsgICAgfQo+ICAgICAgICAgZXJyID0ga2ZkLT5kcW0t Pm9wcy5zdGFydChrZmQtPmRxbSk7Cj4gICAgICAgaWYgKGVycikgewo+IEBAIC01NzEsOSArNTA2 LDcgQEAgc3RhdGljIGludCBrZmRfcmVzdW1lKHN0cnVjdCBrZmRfZGV2ICprZmQpCj4gICAgICAg cmV0dXJuIGVycjsKPiAgICAgZHFtX3N0YXJ0X2Vycm9yOgo+IC1wcm9jZXNzZXNfYmluZF9lcnJv cjoKPiAtICAgIGFtZF9pb21tdV9mcmVlX2RldmljZShrZmQtPnBkZXYpOwo+IC0KPiArICAgIGtm ZF9pb21tdV9zdXNwZW5kKGtmZCk7Cj4gICAgICAgcmV0dXJuIGVycjsKPiAgIH0KPiAgIGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZXZlbnRzLmMKPiBiL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9ldmVudHMuYwo+IGluZGV4IDkzYWFlNWMuLjZmYjlj MGQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2V2ZW50cy5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2V2ZW50cy5jCj4gQEAgLTMw LDYgKzMwLDcgQEAKPiAgICNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KPiAgICNpbmNsdWRlICJr ZmRfcHJpdi5oIgo+ICAgI2luY2x1ZGUgImtmZF9ldmVudHMuaCIKPiArI2luY2x1ZGUgImtmZF9p b21tdS5oIgo+ICAgI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICAgICAvKgo+IEBAIC04Mzcs NiArODM4LDcgQEAgc3RhdGljIHZvaWQKPiBsb29rdXBfZXZlbnRzX2J5X3R5cGVfYW5kX3NpZ25h bChzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsCj4gICAgICAgfQo+ICAgfQo+ICAgKyNpZmRlZiBLRkRf U1VQUE9SVF9JT01NVV9WMgo+ICAgdm9pZCBrZmRfc2lnbmFsX2lvbW11X2V2ZW50KHN0cnVjdCBr ZmRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBwYXNpZCwKPiAgICAgICAgICAgdW5zaWduZWQgbG9u ZyBhZGRyZXNzLCBib29sIGlzX3dyaXRlX3JlcXVlc3RlZCwKPiAgICAgICAgICAgYm9vbCBpc19l eGVjdXRlX3JlcXVlc3RlZCkKPiBAQCAtOTA1LDYgKzkwNyw3IEBAIHZvaWQga2ZkX3NpZ25hbF9p b21tdV9ldmVudChzdHJ1Y3Qga2ZkX2RldiAqZGV2LAo+IHVuc2lnbmVkIGludCBwYXNpZCwKPiAg ICAgICBtdXRleF91bmxvY2soJnAtPmV2ZW50X211dGV4KTsKPiAgICAgICBrZmRfdW5yZWZfcHJv Y2VzcyhwKTsKPiAgIH0KPiArI2VuZGlmIC8qIEtGRF9TVVBQT1JUX0lPTU1VX1YyICovCj4gICAg IHZvaWQga2ZkX3NpZ25hbF9od19leGNlcHRpb25fZXZlbnQodW5zaWduZWQgaW50IHBhc2lkKQo+ ICAgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfaW9tbXUu Ywo+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2lvbW11LmMKPiBuZXcgZmlsZSBt b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjgxZGVlMzQKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2lvbW11LmMKPiBAQCAtMCwwICsxLDM1 NiBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgMjAxOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJ bmMuCj4gKyAqCj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uCj4gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQo+ICJTb2Z0d2FyZSIp LAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcgd2l0aG91dAo+IGxpbWl0YXRpb24KPiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsCj4gc3VibGljZW5zZSwKPiArICog YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25z IHRvIHdob20KPiB0aGUKPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKPiBpbmNs dWRlZCBpbgo+ICsgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBT b2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCj4gRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJ TkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4gTUVSQ0hBTlRB QklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8KPiBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQ09QWVJJR0hUIEhPTERF UihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCj4gREFNQUdFUyBPUgo+ ICsgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SCj4gT1RIRVJXSVNFLAo+ICsgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05O RUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQo+IFVTRSBPUgo+ICsgKiBPVEhFUiBERUFM SU5HUyBJTiBUSEUgU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3ByaW50 ay5oPgo+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2FtZC1pb21t dS5oPgo+ICsjaW5jbHVkZSAia2ZkX3ByaXYuaCIKPiArI2luY2x1ZGUgImtmZF9kYmdtZ3IuaCIK PiArI2luY2x1ZGUgImtmZF90b3BvbG9neS5oIgo+ICsjaW5jbHVkZSAia2ZkX2lvbW11LmgiCj4g Kwo+ICtzdGF0aWMgY29uc3QgdTMyIHJlcXVpcmVkX2lvbW11X2ZsYWdzID0gQU1EX0lPTU1VX0RF VklDRV9GTEFHX0FUU19TVVAgfAo+ICsgICAgICAgICAgICAgICAgICAgIEFNRF9JT01NVV9ERVZJ Q0VfRkxBR19QUklfU1VQIHwKPiArICAgICAgICAgICAgICAgICAgICBBTURfSU9NTVVfREVWSUNF X0ZMQUdfUEFTSURfU1VQOwo+ICsKPiArLyoqIGtmZF9pb21tdV9jaGVja19kZXZpY2UgLSBDaGVj ayB3aGV0aGVyIElPTU1VIGlzIGF2YWlsYWJsZSBmb3IKPiBkZXZpY2UKPiArICovCj4gK2ludCBr ZmRfaW9tbXVfY2hlY2tfZGV2aWNlKHN0cnVjdCBrZmRfZGV2ICprZmQpCj4gK3sKPiArICAgIHN0 cnVjdCBhbWRfaW9tbXVfZGV2aWNlX2luZm8gaW9tbXVfaW5mbzsKPiArICAgIGludCBlcnI7Cj4g Kwo+ICsgICAgaWYgKCFrZmQtPmRldmljZV9pbmZvLT5uZWVkc19pb21tdV9kZXZpY2UpCj4gKyAg ICAgICAgcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsgICAgaW9tbXVfaW5mby5mbGFncyA9IDA7Cj4g KyAgICBlcnIgPSBhbWRfaW9tbXVfZGV2aWNlX2luZm8oa2ZkLT5wZGV2LCAmaW9tbXVfaW5mbyk7 Cj4gKyAgICBpZiAoZXJyKQo+ICsgICAgICAgIHJldHVybiBlcnI7Cj4gKwo+ICsgICAgaWYgKChp b21tdV9pbmZvLmZsYWdzICYgcmVxdWlyZWRfaW9tbXVfZmxhZ3MpICE9Cj4gcmVxdWlyZWRfaW9t bXVfZmxhZ3MpCj4gKyAgICAgICAgcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsgICAgcmV0dXJuIDA7 Cj4gK30KPiArCj4gKy8qKiBrZmRfaW9tbXVfZGV2aWNlX2luaXQgLSBJbml0aWFsaXplIElPTU1V IGZvciBkZXZpY2UKPiArICovCj4gK2ludCBrZmRfaW9tbXVfZGV2aWNlX2luaXQoc3RydWN0IGtm ZF9kZXYgKmtmZCkKPiArewo+ICsgICAgc3RydWN0IGFtZF9pb21tdV9kZXZpY2VfaW5mbyBpb21t dV9pbmZvOwo+ICsgICAgdW5zaWduZWQgaW50IHBhc2lkX2xpbWl0Owo+ICsgICAgaW50IGVycjsK PiArCj4gKyAgICBpZiAoIWtmZC0+ZGV2aWNlX2luZm8tPm5lZWRzX2lvbW11X2RldmljZSkKPiAr ICAgICAgICByZXR1cm4gMDsKPiArCj4gKyAgICBpb21tdV9pbmZvLmZsYWdzID0gMDsKPiArICAg IGVyciA9IGFtZF9pb21tdV9kZXZpY2VfaW5mbyhrZmQtPnBkZXYsICZpb21tdV9pbmZvKTsKPiAr ICAgIGlmIChlcnIgPCAwKSB7Cj4gKyAgICAgICAgZGV2X2VycihrZmRfZGV2aWNlLAo+ICsgICAg ICAgICAgICAiZXJyb3IgZ2V0dGluZyBpb21tdSBpbmZvLiBpcyB0aGUgaW9tbXUgZW5hYmxlZD9c biIpOwo+ICsgICAgICAgIHJldHVybiAtRU5PREVWOwo+ICsgICAgfQo+ICsKPiArICAgIGlmICgo aW9tbXVfaW5mby5mbGFncyAmIHJlcXVpcmVkX2lvbW11X2ZsYWdzKSAhPQo+IHJlcXVpcmVkX2lv bW11X2ZsYWdzKSB7Cj4gKyAgICAgICAgZGV2X2VycihrZmRfZGV2aWNlLCAiZXJyb3IgcmVxdWly ZWQgaW9tbXUgZmxhZ3MgYXRzICVpLCBwcmkKPiAlaSwgcGFzaWQgJWlcbiIsCj4gKyAgICAgICAg ICAgICAgIChpb21tdV9pbmZvLmZsYWdzICYgQU1EX0lPTU1VX0RFVklDRV9GTEFHX0FUU19TVVAp ICE9IDAsCj4gKyAgICAgICAgICAgICAgIChpb21tdV9pbmZvLmZsYWdzICYgQU1EX0lPTU1VX0RF VklDRV9GTEFHX1BSSV9TVVApICE9IDAsCj4gKyAgICAgICAgICAgICAgIChpb21tdV9pbmZvLmZs YWdzICYgQU1EX0lPTU1VX0RFVklDRV9GTEFHX1BBU0lEX1NVUCkKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIT0gMCk7Cj4gKyAgICAgICAgcmV0dXJuIC1FTk9ERVY7Cj4g KyAgICB9Cj4gKwo+ICsgICAgcGFzaWRfbGltaXQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsCj4gKyAg ICAgICAgICAgICh1bnNpZ25lZCBpbnQpKDEgPDwga2ZkLT5kZXZpY2VfaW5mby0+bWF4X3Bhc2lk X2JpdHMpLAo+ICsgICAgICAgICAgICBpb21tdV9pbmZvLm1heF9wYXNpZHMpOwo+ICsKPiArICAg IGlmICgha2ZkX3NldF9wYXNpZF9saW1pdChwYXNpZF9saW1pdCkpIHsKPiArICAgICAgICBkZXZf ZXJyKGtmZF9kZXZpY2UsICJlcnJvciBzZXR0aW5nIHBhc2lkIGxpbWl0XG4iKTsKPiArICAgICAg ICByZXR1cm4gLUVCVVNZOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ ICsvKioga2ZkX2lvbW11X2JpbmRfcHJvY2Vzc190b19kZXZpY2UgLSBIYXZlIHRoZSBJT01NVSBi aW5kIGEgcHJvY2Vzcwo+ICsgKgo+ICsgKiBCaW5kcyB0aGUgZ2l2ZW4gcHJvY2VzcyB0byB0aGUg Z2l2ZW4gZGV2aWNlIHVzaW5nIGl0cyBQQVNJRC4gVGhpcwo+ICsgKiBlbmFibGVzIElPTU1VdjIg YWRkcmVzcyB0cmFuc2xhdGlvbiBmb3IgdGhlIHByb2Nlc3Mgb24gdGhlIGRldmljZS4KPiArICoK PiArICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlIHByb2Nlc3MgbXV0ZXggaXMgaGVs ZC4KPiArICovCj4gK2ludCBrZmRfaW9tbXVfYmluZF9wcm9jZXNzX3RvX2RldmljZShzdHJ1Y3Qg a2ZkX3Byb2Nlc3NfZGV2aWNlICpwZGQpCj4gK3sKPiArICAgIHN0cnVjdCBrZmRfZGV2ICpkZXYg PSBwZGQtPmRldjsKPiArICAgIHN0cnVjdCBrZmRfcHJvY2VzcyAqcCA9IHBkZC0+cHJvY2VzczsK PiArICAgIGludCBlcnI7Cj4gKwo+ICsgICAgaWYgKCFkZXYtPmRldmljZV9pbmZvLT5uZWVkc19p b21tdV9kZXZpY2UgfHwgcGRkLT5ib3VuZCA9PQo+IFBERF9CT1VORCkKPiArICAgICAgICByZXR1 cm4gMDsKPiArCj4gKyAgICBpZiAodW5saWtlbHkocGRkLT5ib3VuZCA9PSBQRERfQk9VTkRfU1VT UEVOREVEKSkgewo+ICsgICAgICAgIHByX2VycigiQmluZGluZyBQRERfQk9VTkRfU1VTUEVOREVE IHBkZCBpcyB1bmV4cGVjdGVkIVxuIik7Cj4gKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgZXJyID0gYW1kX2lvbW11X2JpbmRfcGFzaWQoZGV2LT5wZGV2LCBwLT5w YXNpZCwgcC0+bGVhZF90aHJlYWQpOwo+ICsgICAgaWYgKCFlcnIpCj4gKyAgICAgICAgcGRkLT5i b3VuZCA9IFBERF9CT1VORDsKPiArCj4gKyAgICByZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICsvKiog a2ZkX2lvbW11X3VuYmluZF9wcm9jZXNzIC0gVW5iaW5kIHByb2Nlc3MgZnJvbSBhbGwgZGV2aWNl cwo+ICsgKgo+ICsgKiBUaGlzIHJlbW92ZXMgYWxsIElPTU1VIGRldmljZSBiaW5kaW5ncyBvZiB0 aGUgcHJvY2Vzcy4gVG8gYmUgdXNlZAo+ICsgKiBiZWZvcmUgcHJvY2VzcyB0ZXJtaW5hdGlvbi4K PiArICovCj4gK3ZvaWQga2ZkX2lvbW11X3VuYmluZF9wcm9jZXNzKHN0cnVjdCBrZmRfcHJvY2Vz cyAqcCkKPiArewo+ICsgICAgc3RydWN0IGtmZF9wcm9jZXNzX2RldmljZSAqcGRkOwo+ICsKPiAr ICAgIGxpc3RfZm9yX2VhY2hfZW50cnkocGRkLCAmcC0+cGVyX2RldmljZV9kYXRhLCBwZXJfZGV2 aWNlX2xpc3QpCj4gKyAgICAgICAgaWYgKHBkZC0+Ym91bmQgPT0gUEREX0JPVU5EKQo+ICsgICAg ICAgICAgICBhbWRfaW9tbXVfdW5iaW5kX3Bhc2lkKHBkZC0+ZGV2LT5wZGV2LCBwLT5wYXNpZCk7 Cj4gK30KPiArCj4gKy8qIENhbGxiYWNrIGZvciBwcm9jZXNzIHNodXRkb3duIGludm9rZWQgYnkg dGhlIElPTU1VIGRyaXZlciAqLwo+ICtzdGF0aWMgdm9pZCBpb21tdV9wYXNpZF9zaHV0ZG93bl9j YWxsYmFjayhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50Cj4gcGFzaWQpCj4gK3sKPiArICAgIHN0 cnVjdCBrZmRfZGV2ICpkZXYgPSBrZmRfZGV2aWNlX2J5X3BjaV9kZXYocGRldik7Cj4gKyAgICBz dHJ1Y3Qga2ZkX3Byb2Nlc3MgKnA7Cj4gKyAgICBzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2aWNlICpw ZGQ7Cj4gKwo+ICsgICAgaWYgKCFkZXYpCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgIC8q Cj4gKyAgICAgKiBMb29rIGZvciB0aGUgcHJvY2VzcyB0aGF0IG1hdGNoZXMgdGhlIHBhc2lkLiBJ ZiB0aGVyZSBpcyBubyBzdWNoCj4gKyAgICAgKiBwcm9jZXNzLCB3ZSBlaXRoZXIgcmVsZWFzZWQg aXQgaW4gYW1ka2ZkJ3Mgb3duIG5vdGlmaWVyLCBvcgo+IHRoZXJlCj4gKyAgICAgKiBpcyBhIGJ1 Zy4gVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwuLi4KPiArICAgICAqLwo+ ICsgICAgcCA9IGtmZF9sb29rdXBfcHJvY2Vzc19ieV9wYXNpZChwYXNpZCk7Cj4gKyAgICBpZiAo IXApCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgIHByX2RlYnVnKCJVbmJpbmRpbmcgcHJv Y2VzcyAlZCBmcm9tIElPTU1VXG4iLCBwYXNpZCk7Cj4gKwo+ICsgICAgbXV0ZXhfbG9jayhrZmRf Z2V0X2RiZ21ncl9tdXRleCgpKTsKPiArCj4gKyAgICBpZiAoZGV2LT5kYmdtZ3IgJiYgZGV2LT5k YmdtZ3ItPnBhc2lkID09IHAtPnBhc2lkKSB7Cj4gKyAgICAgICAgaWYgKCFrZmRfZGJnbWdyX3Vu cmVnaXN0ZXIoZGV2LT5kYmdtZ3IsIHApKSB7Cj4gKyAgICAgICAgICAgIGtmZF9kYmdtZ3JfZGVz dHJveShkZXYtPmRiZ21ncik7Cj4gKyAgICAgICAgICAgIGRldi0+ZGJnbWdyID0gTlVMTDsKPiAr ICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgbXV0ZXhfdW5sb2NrKGtmZF9nZXRfZGJnbWdy X211dGV4KCkpOwo+ICsKPiArICAgIG11dGV4X2xvY2soJnAtPm11dGV4KTsKPiArCj4gKyAgICBw ZGQgPSBrZmRfZ2V0X3Byb2Nlc3NfZGV2aWNlX2RhdGEoZGV2LCBwKTsKPiArICAgIGlmIChwZGQp Cj4gKyAgICAgICAgLyogRm9yIEdQVSByZWx5aW5nIG9uIElPTU1VLCB3ZSBuZWVkIHRvIGRlcXVl dWUgaGVyZQo+ICsgICAgICAgICAqIHdoZW4gUEFTSUQgaXMgc3RpbGwgYm91bmQuCj4gKyAgICAg ICAgICovCj4gKyAgICAgICAga2ZkX3Byb2Nlc3NfZGVxdWV1ZV9mcm9tX2RldmljZShwZGQpOwo+ ICsKPiArICAgIG11dGV4X3VubG9jaygmcC0+bXV0ZXgpOwo+ICsKPiArICAgIGtmZF91bnJlZl9w cm9jZXNzKHApOwo+ICt9Cj4gKwo+ICsvKiBUaGlzIGZ1bmN0aW9uIGNhbGxlZCBieSBJT01NVSBk cml2ZXIgb24gUFBSIGZhaWx1cmUgKi8KPiArc3RhdGljIGludCBpb21tdV9pbnZhbGlkX3Bwcl9j YihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IHBhc2lkLAo+ICsgICAgICAgIHVuc2lnbmVkIGxv bmcgYWRkcmVzcywgdTE2IGZsYWdzKQo+ICt7Cj4gKyAgICBzdHJ1Y3Qga2ZkX2RldiAqZGV2Owo+ ICsKPiArICAgIGRldl93YXJuKGtmZF9kZXZpY2UsCj4gKyAgICAgICAgICAgICJJbnZhbGlkIFBQ UiBkZXZpY2UgJXg6JXguJXggcGFzaWQgJWQgYWRkcmVzcyAweCVsWAo+IGZsYWdzIDB4JVgiLAo+ ICsgICAgICAgICAgICBQQ0lfQlVTX05VTShwZGV2LT5kZXZmbiksCj4gKyAgICAgICAgICAgIFBD SV9TTE9UKHBkZXYtPmRldmZuKSwKPiArICAgICAgICAgICAgUENJX0ZVTkMocGRldi0+ZGV2Zm4p LAo+ICsgICAgICAgICAgICBwYXNpZCwKPiArICAgICAgICAgICAgYWRkcmVzcywKPiArICAgICAg ICAgICAgZmxhZ3MpOwo+ICsKPiArICAgIGRldiA9IGtmZF9kZXZpY2VfYnlfcGNpX2RldihwZGV2 KTsKPiArICAgIGlmICghV0FSTl9PTighZGV2KSkKPiArICAgICAgICBrZmRfc2lnbmFsX2lvbW11 X2V2ZW50KGRldiwgcGFzaWQsIGFkZHJlc3MsCj4gKyAgICAgICAgICAgIGZsYWdzICYgUFBSX0ZB VUxUX1dSSVRFLCBmbGFncyAmIFBQUl9GQVVMVF9FWEVDKTsKPiArCj4gKyAgICByZXR1cm4gQU1E X0lPTU1VX0lOVl9QUklfUlNQX0lOVkFMSUQ7Cj4gK30KPiArCj4gKy8qCj4gKyAqIEJpbmQgcHJv Y2Vzc2VzIGRvIHRoZSBkZXZpY2UgdGhhdCBoYXZlIGJlZW4gdGVtcG9yYXJpbHkgdW5ib3VuZAo+ ICsgKiAoUEREX0JPVU5EX1NVU1BFTkRFRCkgaW4ga2ZkX3VuYmluZF9wcm9jZXNzZXNfZnJvbV9k ZXZpY2UuCj4gKyAqLwo+ICtzdGF0aWMgaW50IGtmZF9iaW5kX3Byb2Nlc3Nlc190b19kZXZpY2Uo c3RydWN0IGtmZF9kZXYgKmtmZCkKPiArewo+ICsgICAgc3RydWN0IGtmZF9wcm9jZXNzX2Rldmlj ZSAqcGRkOwo+ICsgICAgc3RydWN0IGtmZF9wcm9jZXNzICpwOwo+ICsgICAgdW5zaWduZWQgaW50 IHRlbXA7Cj4gKyAgICBpbnQgZXJyID0gMDsKPiArCj4gKyAgICBpbnQgaWR4ID0gc3JjdV9yZWFk X2xvY2soJmtmZF9wcm9jZXNzZXNfc3JjdSk7Cj4gKwo+ICsgICAgaGFzaF9mb3JfZWFjaF9yY3Uo a2ZkX3Byb2Nlc3Nlc190YWJsZSwgdGVtcCwgcCwga2ZkX3Byb2Nlc3Nlcykgewo+ICsgICAgICAg IG11dGV4X2xvY2soJnAtPm11dGV4KTsKPiArICAgICAgICBwZGQgPSBrZmRfZ2V0X3Byb2Nlc3Nf ZGV2aWNlX2RhdGEoa2ZkLCBwKTsKPiArCj4gKyAgICAgICAgaWYgKFdBUk5fT04oIXBkZCkgfHwg cGRkLT5ib3VuZCAhPSBQRERfQk9VTkRfU1VTUEVOREVEKSB7Cj4gKyAgICAgICAgICAgIG11dGV4 X3VubG9jaygmcC0+bXV0ZXgpOwo+ICsgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICB9 Cj4gKwo+ICsgICAgICAgIGVyciA9IGFtZF9pb21tdV9iaW5kX3Bhc2lkKGtmZC0+cGRldiwgcC0+ cGFzaWQsCj4gKyAgICAgICAgICAgICAgICBwLT5sZWFkX3RocmVhZCk7Cj4gKyAgICAgICAgaWYg KGVyciA8IDApIHsKPiArICAgICAgICAgICAgcHJfZXJyKCJVbmV4cGVjdGVkIHBhc2lkICVkIGJp bmRpbmcgZmFpbHVyZVxuIiwKPiArICAgICAgICAgICAgICAgICAgICBwLT5wYXNpZCk7Cj4gKyAg ICAgICAgICAgIG11dGV4X3VubG9jaygmcC0+bXV0ZXgpOwo+ICsgICAgICAgICAgICBicmVhazsK PiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHBkZC0+Ym91bmQgPSBQRERfQk9VTkQ7Cj4gKyAg ICAgICAgbXV0ZXhfdW5sb2NrKCZwLT5tdXRleCk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgc3JjdV9y ZWFkX3VubG9jaygma2ZkX3Byb2Nlc3Nlc19zcmN1LCBpZHgpOwo+ICsKPiArICAgIHJldHVybiBl cnI7Cj4gK30KPiArCj4gKy8qCj4gKyAqIE1hcmsgY3VycmVudGx5IGJvdW5kIHByb2Nlc3NlcyBh cyBQRERfQk9VTkRfU1VTUEVOREVELiBUaGVzZQo+ICsgKiBwcm9jZXNzZXMgd2lsbCBiZSByZXN0 b3JlZCB0byBQRERfQk9VTkQgc3RhdGUgaW4KPiArICoga2ZkX2JpbmRfcHJvY2Vzc2VzX3RvX2Rl dmljZS4KPiArICovCj4gK3N0YXRpYyB2b2lkIGtmZF91bmJpbmRfcHJvY2Vzc2VzX2Zyb21fZGV2 aWNlKHN0cnVjdCBrZmRfZGV2ICprZmQpCj4gK3sKPiArICAgIHN0cnVjdCBrZmRfcHJvY2Vzc19k ZXZpY2UgKnBkZDsKPiArICAgIHN0cnVjdCBrZmRfcHJvY2VzcyAqcDsKPiArICAgIHVuc2lnbmVk IGludCB0ZW1wOwo+ICsKPiArICAgIGludCBpZHggPSBzcmN1X3JlYWRfbG9jaygma2ZkX3Byb2Nl c3Nlc19zcmN1KTsKPiArCj4gKyAgICBoYXNoX2Zvcl9lYWNoX3JjdShrZmRfcHJvY2Vzc2VzX3Rh YmxlLCB0ZW1wLCBwLCBrZmRfcHJvY2Vzc2VzKSB7Cj4gKyAgICAgICAgbXV0ZXhfbG9jaygmcC0+ bXV0ZXgpOwo+ICsgICAgICAgIHBkZCA9IGtmZF9nZXRfcHJvY2Vzc19kZXZpY2VfZGF0YShrZmQs IHApOwo+ICsKPiArICAgICAgICBpZiAoV0FSTl9PTighcGRkKSkgewo+ICsgICAgICAgICAgICBt dXRleF91bmxvY2soJnAtPm11dGV4KTsKPiArICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAg ICAgfQo+ICsKPiArICAgICAgICBpZiAocGRkLT5ib3VuZCA9PSBQRERfQk9VTkQpCj4gKyAgICAg ICAgICAgIHBkZC0+Ym91bmQgPSBQRERfQk9VTkRfU1VTUEVOREVEOwo+ICsgICAgICAgIG11dGV4 X3VubG9jaygmcC0+bXV0ZXgpOwo+ICsgICAgfQo+ICsKPiArICAgIHNyY3VfcmVhZF91bmxvY2so JmtmZF9wcm9jZXNzZXNfc3JjdSwgaWR4KTsKPiArfQo+ICsKPiArLyoqIGtmZF9pb21tdV9zdXNw ZW5kIC0gUHJlcGFyZSBJT01NVSBmb3Igc3VzcGVuZAo+ICsgKgo+ICsgKiBUaGlzIHVuYmluZHMg cHJvY2Vzc2VzIGZyb20gdGhlIGRldmljZSBhbmQgZGlzYWJsZXMgdGhlIElPTU1VIGZvcgo+ICsg KiB0aGUgZGV2aWNlLgo+ICsgKi8KPiArdm9pZCBrZmRfaW9tbXVfc3VzcGVuZChzdHJ1Y3Qga2Zk X2RldiAqa2ZkKQo+ICt7Cj4gKyAgICBpZiAoIWtmZC0+ZGV2aWNlX2luZm8tPm5lZWRzX2lvbW11 X2RldmljZSkKPiArICAgICAgICByZXR1cm47Cj4gKwo+ICsgICAga2ZkX3VuYmluZF9wcm9jZXNz ZXNfZnJvbV9kZXZpY2Uoa2ZkKTsKPiArCj4gKyAgICBhbWRfaW9tbXVfc2V0X2ludmFsaWRhdGVf Y3R4X2NiKGtmZC0+cGRldiwgTlVMTCk7Cj4gKyAgICBhbWRfaW9tbXVfc2V0X2ludmFsaWRfcHBy X2NiKGtmZC0+cGRldiwgTlVMTCk7Cj4gKyAgICBhbWRfaW9tbXVfZnJlZV9kZXZpY2Uoa2ZkLT5w ZGV2KTsKPiArfQo+ICsKPiArLyoqIGtmZF9pb21tdV9yZXN1bWUgLSBSZXN0b3JlIElPTU1VIGFm dGVyIHJlc3VtZQo+ICsgKgo+ICsgKiBUaGlzIHJlaW5pdGlhbGl6ZXMgdGhlIElPTU1VIGZvciB0 aGUgZGV2aWNlIGFuZCByZS1iaW5kcyBwcmV2aW91c2x5Cj4gKyAqIHN1c3BlbmRlZCBwcm9jZXNz ZXMgdG8gdGhlIGRldmljZS4KPiArICovCj4gK2ludCBrZmRfaW9tbXVfcmVzdW1lKHN0cnVjdCBr ZmRfZGV2ICprZmQpCj4gK3sKPiArICAgIHVuc2lnbmVkIGludCBwYXNpZF9saW1pdDsKPiArICAg IGludCBlcnI7Cj4gKwo+ICsgICAgaWYgKCFrZmQtPmRldmljZV9pbmZvLT5uZWVkc19pb21tdV9k ZXZpY2UpCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsgICAgcGFzaWRfbGltaXQgPSBrZmRf Z2V0X3Bhc2lkX2xpbWl0KCk7Cj4gKwo+ICsgICAgZXJyID0gYW1kX2lvbW11X2luaXRfZGV2aWNl KGtmZC0+cGRldiwgcGFzaWRfbGltaXQpOwo+ICsgICAgaWYgKGVycikKPiArICAgICAgICByZXR1 cm4gLUVOWElPOwo+ICsKPiArICAgIGFtZF9pb21tdV9zZXRfaW52YWxpZGF0ZV9jdHhfY2Ioa2Zk LT5wZGV2LAo+ICsgICAgICAgICAgICAgICAgICAgIGlvbW11X3Bhc2lkX3NodXRkb3duX2NhbGxi YWNrKTsKPiArICAgIGFtZF9pb21tdV9zZXRfaW52YWxpZF9wcHJfY2Ioa2ZkLT5wZGV2LAo+ICsg ICAgICAgICAgICAgICAgICAgICBpb21tdV9pbnZhbGlkX3Bwcl9jYik7Cj4gKwo+ICsgICAgZXJy ID0ga2ZkX2JpbmRfcHJvY2Vzc2VzX3RvX2RldmljZShrZmQpOwo+ICsgICAgaWYgKGVycikgewo+ ICsgICAgICAgIGFtZF9pb21tdV9zZXRfaW52YWxpZGF0ZV9jdHhfY2Ioa2ZkLT5wZGV2LCBOVUxM KTsKPiArICAgICAgICBhbWRfaW9tbXVfc2V0X2ludmFsaWRfcHByX2NiKGtmZC0+cGRldiwgTlVM TCk7Cj4gKyAgICAgICAgYW1kX2lvbW11X2ZyZWVfZGV2aWNlKGtmZC0+cGRldik7Cj4gKyAgICAg ICAgcmV0dXJuIGVycjsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiAr ZXh0ZXJuIGJvb2wgYW1kX2lvbW11X3BjX3N1cHBvcnRlZCh2b2lkKTsKPiArZXh0ZXJuIHU4IGFt ZF9pb21tdV9wY19nZXRfbWF4X2JhbmtzKHUxNiBkZXZpZCk7Cj4gK2V4dGVybiB1OCBhbWRfaW9t bXVfcGNfZ2V0X21heF9jb3VudGVycyh1MTYgZGV2aWQpOwo+ICsKPiArLyoqIGtmZF9pb21tdV9h ZGRfcGVyZl9jb3VudGVycyAtIEFkZCBJT01NVSBwZXJmb3JtYW5jZSBjb3VudGVycyB0bwo+IHRv cG9sb2d5Cj4gKyAqLwo+ICtpbnQga2ZkX2lvbW11X2FkZF9wZXJmX2NvdW50ZXJzKHN0cnVjdCBr ZmRfdG9wb2xvZ3lfZGV2aWNlICprZGV2KQo+ICt7Cj4gKyAgICBzdHJ1Y3Qga2ZkX3BlcmZfcHJv cGVydGllcyAqcHJvcHM7Cj4gKwo+ICsgICAgaWYgKCEoa2Rldi0+bm9kZV9wcm9wcy5jYXBhYmls aXR5ICYgSFNBX0NBUF9BVFNfUFJFU0VOVCkpCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKwo+ICsg ICAgaWYgKCFhbWRfaW9tbXVfcGNfc3VwcG9ydGVkKCkpCj4gKyAgICAgICAgcmV0dXJuIDA7Cj4g Kwo+ICsgICAgcHJvcHMgPSBrZmRfYWxsb2Nfc3RydWN0KHByb3BzKTsKPiArICAgIGlmICghcHJv cHMpCj4gKyAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4gKyAgICBzdHJjcHkocHJvcHMtPmJsb2Nr X25hbWUsICJpb21tdSIpOwo+ICsgICAgcHJvcHMtPm1heF9jb25jdXJyZW50ID0gYW1kX2lvbW11 X3BjX2dldF9tYXhfYmFua3MoMCkgKgo+ICsgICAgICAgIGFtZF9pb21tdV9wY19nZXRfbWF4X2Nv dW50ZXJzKDApOyAvKiBhc3N1bWUgb25lIGlvbW11ICovCj4gKyAgICBsaXN0X2FkZF90YWlsKCZw cm9wcy0+bGlzdCwgJmtkZXYtPnBlcmZfcHJvcHMpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9pb21tdS5oCj4g Yi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfaW9tbXUuaAo+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZGQyM2Q5Zgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfaW9tbXUuaAo+IEBAIC0wLDAgKzEsNzggQEAK PiArLyoKPiArICogQ29weXJpZ2h0IDIwMTggQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgo+ ICsgKgo+ICsgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwg dG8gYW55IHBlcnNvbgo+IG9idGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKPiAiU29mdHdhcmUiKSwKPiAr ICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5n IHdpdGhvdXQKPiBsaW1pdGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp ZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLAo+IHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tCj4gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCj4gaW5jbHVkZWQg aW4KPiArICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdh cmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELAo+IEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVE SU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgo+IE1FUkNIQU5UQUJJTElU WSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PCj4gRVZFTlQgU0hBTEwKPiArICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykg T1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAo+IERBTUFHRVMgT1IKPiArICog T1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBP Ugo+IE9USEVSV0lTRSwKPiArICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElP TiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKPiBVU0UgT1IKPiArICogT1RIRVIgREVBTElOR1Mg SU4gVEhFIFNPRlRXQVJFLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19LRkRfSU9NTVVfSF9fCj4g KyNkZWZpbmUgX19LRkRfSU9NTVVfSF9fCj4gKwo+ICsjaWYgZGVmaW5lZChDT05GSUdfQU1EX0lP TU1VX1YyX01PRFVMRSkgfHwgZGVmaW5lZChDT05GSUdfQU1EX0lPTU1VX1YyKQo+ICsKPiArI2Rl ZmluZSBLRkRfU1VQUE9SVF9JT01NVV9WMgo+ICsKPiAraW50IGtmZF9pb21tdV9jaGVja19kZXZp Y2Uoc3RydWN0IGtmZF9kZXYgKmtmZCk7Cj4gK2ludCBrZmRfaW9tbXVfZGV2aWNlX2luaXQoc3Ry dWN0IGtmZF9kZXYgKmtmZCk7Cj4gKwo+ICtpbnQga2ZkX2lvbW11X2JpbmRfcHJvY2Vzc190b19k ZXZpY2Uoc3RydWN0IGtmZF9wcm9jZXNzX2RldmljZSAqcGRkKTsKPiArdm9pZCBrZmRfaW9tbXVf dW5iaW5kX3Byb2Nlc3Moc3RydWN0IGtmZF9wcm9jZXNzICpwKTsKPiArCj4gK3ZvaWQga2ZkX2lv bW11X3N1c3BlbmQoc3RydWN0IGtmZF9kZXYgKmtmZCk7Cj4gK2ludCBrZmRfaW9tbXVfcmVzdW1l KHN0cnVjdCBrZmRfZGV2ICprZmQpOwo+ICsKPiAraW50IGtmZF9pb21tdV9hZGRfcGVyZl9jb3Vu dGVycyhzdHJ1Y3Qga2ZkX3RvcG9sb2d5X2RldmljZSAqa2Rldik7Cj4gKwo+ICsjZWxzZQo+ICsK PiArc3RhdGljIGlubGluZSBpbnQga2ZkX2lvbW11X2NoZWNrX2RldmljZShzdHJ1Y3Qga2ZkX2Rl diAqa2ZkKQo+ICt7Cj4gKyAgICByZXR1cm4gLUVOT0RFVjsKPiArfQo+ICtzdGF0aWMgaW5saW5l IGludCBrZmRfaW9tbXVfZGV2aWNlX2luaXQoc3RydWN0IGtmZF9kZXYgKmtmZCkKPiArewo+ICsg ICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IGtmZF9pb21tdV9iaW5k X3Byb2Nlc3NfdG9fZGV2aWNlKAo+ICsgICAgc3RydWN0IGtmZF9wcm9jZXNzX2RldmljZSAqcGRk KQo+ICt7Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICtzdGF0aWMgaW5saW5lIHZvaWQga2ZkX2lv bW11X3VuYmluZF9wcm9jZXNzKHN0cnVjdCBrZmRfcHJvY2VzcyAqcCkKPiArewo+ICsgICAgLyog ZW1wdHkgKi8KPiArfQo+ICsKPiArc3RhdGljIGlubGluZSB2b2lkIGtmZF9pb21tdV9zdXNwZW5k KHN0cnVjdCBrZmRfZGV2ICprZmQpCj4gK3sKPiArICAgIC8qIGVtcHR5ICovCj4gK30KPiArc3Rh dGljIGlubGluZSBpbnQga2ZkX2lvbW11X3Jlc3VtZShzdHJ1Y3Qga2ZkX2RldiAqa2ZkKQo+ICt7 Cj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBpbnQga2ZkX2lvbW11 X2FkZF9wZXJmX2NvdW50ZXJzKHN0cnVjdAo+IGtmZF90b3BvbG9neV9kZXZpY2UgKmtkZXYpCj4g K3sKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICsjZW5kaWYgLyogZGVmaW5lZChDT05GSUdf QU1EX0lPTU1VX1YyKSAqLwo+ICsKPiArI2VuZGlmIC8qIF9fS0ZEX0lPTU1VX0hfXyAqLwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfcHJpdi5oCj4gYi9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfcHJpdi5oCj4gaW5kZXggNTk0Zjg1My4uZjEyZWI1 ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfcHJpdi5oCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3ByaXYuaAo+IEBAIC0xNTgsNiAr MTU4LDcgQEAgc3RydWN0IGtmZF9kZXZpY2VfaW5mbyB7Cj4gICAgICAgdWludDhfdCBudW1fb2Zf d2F0Y2hfcG9pbnRzOwo+ICAgICAgIHVpbnQxNl90IG1xZF9zaXplX2FsaWduZWQ7Cj4gICAgICAg Ym9vbCBzdXBwb3J0c19jd3NyOwo+ICsgICAgYm9vbCBuZWVkc19pb21tdV9kZXZpY2U7Cj4gICAg ICAgYm9vbCBuZWVkc19wY2lfYXRvbWljczsKPiAgIH07Cj4gICBAQCAtNTE3LDE1ICs1MTgsMTUg QEAgc3RydWN0IGtmZF9wcm9jZXNzX2RldmljZSB7Cj4gICAgICAgdWludDY0X3Qgc2NyYXRjaF9i YXNlOwo+ICAgICAgIHVpbnQ2NF90IHNjcmF0Y2hfbGltaXQ7Cj4gICAtICAgIC8qIElzIHRoaXMg cHJvY2Vzcy9wYXNpZCBib3VuZCB0byB0aGlzIGRldmljZT8KPiAoYW1kX2lvbW11X2JpbmRfcGFz aWQpICovCj4gLSAgICBlbnVtIGtmZF9wZGRfYm91bmQgYm91bmQ7Cj4gLQo+ICAgICAgIC8qIEZs YWcgdXNlZCB0byB0ZWxsIHRoZSBwZGQgaGFzIGRlcXVldWVkIGZyb20gdGhlIGRxbS4KPiAgICAg ICAgKiBUaGlzIGlzIHVzZWQgdG8gcHJldmVudCBkZXYtPmRxbS0+b3BzLnByb2Nlc3NfdGVybWlu YXRpb24oKQo+IGZyb20KPiAgICAgICAgKiBiZWluZyBjYWxsZWQgdHdpY2Ugd2hlbiBpdCBpcyBh bHJlYWR5IGNhbGxlZCBpbiBJT01NVSBjYWxsYmFjawo+ICAgICAgICAqIGZ1bmN0aW9uLgo+ICAg ICAgICAqLwo+ICAgICAgIGJvb2wgYWxyZWFkeV9kZXF1ZXVlZDsKPiArCj4gKyAgICAvKiBJcyB0 aGlzIHByb2Nlc3MvcGFzaWQgYm91bmQgdG8gdGhpcyBkZXZpY2U/Cj4gKGFtZF9pb21tdV9iaW5k X3Bhc2lkKSAqLwo+ICsgICAgZW51bSBrZmRfcGRkX2JvdW5kIGJvdW5kOwo+ICAgfTsKPiAgICAg I2RlZmluZSBxcGRfdG9fcGRkKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qga2ZkX3Byb2Nlc3Nf ZGV2aWNlLAo+IHFwZCkKPiBAQCAtNTkwLDYgKzU5MSwxMCBAQCBzdHJ1Y3Qga2ZkX3Byb2Nlc3Mg ewo+ICAgICAgIGJvb2wgc2lnbmFsX2V2ZW50X2xpbWl0X3JlYWNoZWQ7Cj4gICB9Owo+ICAgKyNk ZWZpbmUgS0ZEX1BST0NFU1NfVEFCTEVfU0laRSA1IC8qIGJpdHM6IDMyIGVudHJpZXMgKi8KPiAr ZXh0ZXJuIERFQ0xBUkVfSEFTSFRBQkxFKGtmZF9wcm9jZXNzZXNfdGFibGUsIEtGRF9QUk9DRVNT X1RBQkxFX1NJWkUpOwo+ICtleHRlcm4gc3RydWN0IHNyY3Vfc3RydWN0IGtmZF9wcm9jZXNzZXNf c3JjdTsKPiArCj4gICAvKioKPiAgICAqIElvY3RsIGZ1bmN0aW9uIHR5cGUuCj4gICAgKgo+IEBA IC02MTcsOSArNjIyLDYgQEAgdm9pZCBrZmRfdW5yZWZfcHJvY2VzcyhzdHJ1Y3Qga2ZkX3Byb2Nl c3MgKnApOwo+ICAgICBzdHJ1Y3Qga2ZkX3Byb2Nlc3NfZGV2aWNlICprZmRfYmluZF9wcm9jZXNz X3RvX2RldmljZShzdHJ1Y3QKPiBrZmRfZGV2ICpkZXYsCj4gICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnApOwo+IC1pbnQga2ZkX2JpbmRfcHJvY2Vzc2VzX3Rv X2RldmljZShzdHJ1Y3Qga2ZkX2RldiAqZGV2KTsKPiAtdm9pZCBrZmRfdW5iaW5kX3Byb2Nlc3Nl c19mcm9tX2RldmljZShzdHJ1Y3Qga2ZkX2RldiAqZGV2KTsKPiAtdm9pZCBrZmRfcHJvY2Vzc19p b21tdV91bmJpbmRfY2FsbGJhY2soc3RydWN0IGtmZF9kZXYgKmRldiwgdW5zaWduZWQKPiBpbnQg cGFzaWQpOwo+ICAgc3RydWN0IGtmZF9wcm9jZXNzX2RldmljZSAqa2ZkX2dldF9wcm9jZXNzX2Rl dmljZV9kYXRhKHN0cnVjdAo+IGtmZF9kZXYgKmRldiwKPiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnApOwo+ICAgc3RydWN0IGtmZF9wcm9jZXNzX2Rl dmljZSAqa2ZkX2NyZWF0ZV9wcm9jZXNzX2RldmljZV9kYXRhKHN0cnVjdAo+IGtmZF9kZXYgKmRl diwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Byb2Nlc3Mu Ywo+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Byb2Nlc3MuYwo+IGluZGV4IDRm ZjVmMGYuLmU5YWVlNzYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQv a2ZkX3Byb2Nlc3MuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcm9j ZXNzLmMKPiBAQCAtMzUsMTYgKzM1LDE2IEBAIHN0cnVjdCBtbV9zdHJ1Y3Q7Cj4gICAgICNpbmNs dWRlICJrZmRfcHJpdi5oIgo+ICAgI2luY2x1ZGUgImtmZF9kYmdtZ3IuaCIKPiArI2luY2x1ZGUg ImtmZF9pb21tdS5oIgo+ICAgICAvKgo+ICAgICogTGlzdCBvZiBzdHJ1Y3Qga2ZkX3Byb2Nlc3Mg KGZpZWxkIGtmZF9wcm9jZXNzKS4KPiAgICAqIFVuaXF1ZS9pbmRleGVkIGJ5IG1tX3N0cnVjdCoK PiAgICAqLwo+IC0jZGVmaW5lIEtGRF9QUk9DRVNTX1RBQkxFX1NJWkUgNSAvKiBiaXRzOiAzMiBl bnRyaWVzICovCj4gLXN0YXRpYyBERUZJTkVfSEFTSFRBQkxFKGtmZF9wcm9jZXNzZXNfdGFibGUs IEtGRF9QUk9DRVNTX1RBQkxFX1NJWkUpOwo+ICtERUZJTkVfSEFTSFRBQkxFKGtmZF9wcm9jZXNz ZXNfdGFibGUsIEtGRF9QUk9DRVNTX1RBQkxFX1NJWkUpOwo+ICAgc3RhdGljIERFRklORV9NVVRF WChrZmRfcHJvY2Vzc2VzX211dGV4KTsKPiAgIC1ERUZJTkVfU1RBVElDX1NSQ1Uoa2ZkX3Byb2Nl c3Nlc19zcmN1KTsKPiArREVGSU5FX1NSQ1Uoa2ZkX3Byb2Nlc3Nlc19zcmN1KTsKPiAgICAgc3Rh dGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprZmRfcHJvY2Vzc193cTsKPiAgIEBAIC0xNzMs MTQgKzE3Myw4IEBAIHN0YXRpYyB2b2lkIGtmZF9wcm9jZXNzX3dxX3JlbGVhc2Uoc3RydWN0Cj4g d29ya19zdHJ1Y3QgKndvcmspCj4gICB7Cj4gICAgICAgc3RydWN0IGtmZF9wcm9jZXNzICpwID0g Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBrZmRfcHJvY2VzcywKPiAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZWxlYXNlX3dvcmspOwo+IC0gICAgc3RydWN0IGtmZF9wcm9jZXNzX2Rldmlj ZSAqcGRkOwo+ICAgLSAgICBwcl9kZWJ1ZygiUmVsZWFzaW5nIHByb2Nlc3MgKHBhc2lkICVkKSBp biB3b3JrcXVldWVcbiIsCj4gcC0+cGFzaWQpOwo+IC0KPiAtICAgIGxpc3RfZm9yX2VhY2hfZW50 cnkocGRkLCAmcC0+cGVyX2RldmljZV9kYXRhLCBwZXJfZGV2aWNlX2xpc3QpIHsKPiAtICAgICAg ICBpZiAocGRkLT5ib3VuZCA9PSBQRERfQk9VTkQpCj4gLSAgICAgICAgICAgIGFtZF9pb21tdV91 bmJpbmRfcGFzaWQocGRkLT5kZXYtPnBkZXYsIHAtPnBhc2lkKTsKPiAtICAgIH0KPiArICAgIGtm ZF9pb21tdV91bmJpbmRfcHJvY2VzcyhwKTsKPiAgICAgICAgIGtmZF9wcm9jZXNzX2Rlc3Ryb3lf cGRkcyhwKTsKPiAgIEBAIC00MjksMTMzICs0MjMsMTMgQEAgc3RydWN0IGtmZF9wcm9jZXNzX2Rl dmljZQo+ICprZmRfYmluZF9wcm9jZXNzX3RvX2RldmljZShzdHJ1Y3Qga2ZkX2RldiAqZGV2LAo+ ICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAgICAgICB9Cj4gICAtICAgIGlm IChwZGQtPmJvdW5kID09IFBERF9CT1VORCkgewo+IC0gICAgICAgIHJldHVybiBwZGQ7Cj4gLSAg ICB9IGVsc2UgaWYgKHVubGlrZWx5KHBkZC0+Ym91bmQgPT0gUEREX0JPVU5EX1NVU1BFTkRFRCkp IHsKPiAtICAgICAgICBwcl9lcnIoIkJpbmRpbmcgUEREX0JPVU5EX1NVU1BFTkRFRCBwZGQgaXMg dW5leHBlY3RlZCFcbiIpOwo+IC0gICAgICAgIHJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+IC0g ICAgfQo+IC0KPiAtICAgIGVyciA9IGFtZF9pb21tdV9iaW5kX3Bhc2lkKGRldi0+cGRldiwgcC0+ cGFzaWQsIHAtPmxlYWRfdGhyZWFkKTsKPiAtICAgIGlmIChlcnIgPCAwKQo+ICsgICAgZXJyID0g a2ZkX2lvbW11X2JpbmRfcHJvY2Vzc190b19kZXZpY2UocGRkKTsKPiArICAgIGlmIChlcnIpCj4g ICAgICAgICAgIHJldHVybiBFUlJfUFRSKGVycik7Cj4gICAtICAgIHBkZC0+Ym91bmQgPSBQRERf Qk9VTkQ7Cj4gLQo+ICAgICAgIHJldHVybiBwZGQ7Cj4gICB9Cj4gICAtLyoKPiAtICogQmluZCBw cm9jZXNzZXMgZG8gdGhlIGRldmljZSB0aGF0IGhhdmUgYmVlbiB0ZW1wb3JhcmlseSB1bmJvdW5k Cj4gLSAqIChQRERfQk9VTkRfU1VTUEVOREVEKSBpbiBrZmRfdW5iaW5kX3Byb2Nlc3Nlc19mcm9t X2RldmljZS4KPiAtICovCj4gLWludCBrZmRfYmluZF9wcm9jZXNzZXNfdG9fZGV2aWNlKHN0cnVj dCBrZmRfZGV2ICpkZXYpCj4gLXsKPiAtICAgIHN0cnVjdCBrZmRfcHJvY2Vzc19kZXZpY2UgKnBk ZDsKPiAtICAgIHN0cnVjdCBrZmRfcHJvY2VzcyAqcDsKPiAtICAgIHVuc2lnbmVkIGludCB0ZW1w Owo+IC0gICAgaW50IGVyciA9IDA7Cj4gLQo+IC0gICAgaW50IGlkeCA9IHNyY3VfcmVhZF9sb2Nr KCZrZmRfcHJvY2Vzc2VzX3NyY3UpOwo+IC0KPiAtICAgIGhhc2hfZm9yX2VhY2hfcmN1KGtmZF9w cm9jZXNzZXNfdGFibGUsIHRlbXAsIHAsIGtmZF9wcm9jZXNzZXMpIHsKPiAtICAgICAgICBtdXRl eF9sb2NrKCZwLT5tdXRleCk7Cj4gLSAgICAgICAgcGRkID0ga2ZkX2dldF9wcm9jZXNzX2Rldmlj ZV9kYXRhKGRldiwgcCk7Cj4gLQo+IC0gICAgICAgIGlmIChXQVJOX09OKCFwZGQpIHx8IHBkZC0+ Ym91bmQgIT0gUEREX0JPVU5EX1NVU1BFTkRFRCkgewo+IC0gICAgICAgICAgICBtdXRleF91bmxv Y2soJnAtPm11dGV4KTsKPiAtICAgICAgICAgICAgY29udGludWU7Cj4gLSAgICAgICAgfQo+IC0K PiAtICAgICAgICBlcnIgPSBhbWRfaW9tbXVfYmluZF9wYXNpZChkZXYtPnBkZXYsIHAtPnBhc2lk LAo+IC0gICAgICAgICAgICAgICAgcC0+bGVhZF90aHJlYWQpOwo+IC0gICAgICAgIGlmIChlcnIg PCAwKSB7Cj4gLSAgICAgICAgICAgIHByX2VycigiVW5leHBlY3RlZCBwYXNpZCAlZCBiaW5kaW5n IGZhaWx1cmVcbiIsCj4gLSAgICAgICAgICAgICAgICAgICAgcC0+cGFzaWQpOwo+IC0gICAgICAg ICAgICBtdXRleF91bmxvY2soJnAtPm11dGV4KTsKPiAtICAgICAgICAgICAgYnJlYWs7Cj4gLSAg ICAgICAgfQo+IC0KPiAtICAgICAgICBwZGQtPmJvdW5kID0gUEREX0JPVU5EOwo+IC0gICAgICAg IG11dGV4X3VubG9jaygmcC0+bXV0ZXgpOwo+IC0gICAgfQo+IC0KPiAtICAgIHNyY3VfcmVhZF91 bmxvY2soJmtmZF9wcm9jZXNzZXNfc3JjdSwgaWR4KTsKPiAtCj4gLSAgICByZXR1cm4gZXJyOwo+ IC19Cj4gLQo+IC0vKgo+IC0gKiBNYXJrIGN1cnJlbnRseSBib3VuZCBwcm9jZXNzZXMgYXMgUERE X0JPVU5EX1NVU1BFTkRFRC4gVGhlc2UKPiAtICogcHJvY2Vzc2VzIHdpbGwgYmUgcmVzdG9yZWQg dG8gUEREX0JPVU5EIHN0YXRlIGluCj4gLSAqIGtmZF9iaW5kX3Byb2Nlc3Nlc190b19kZXZpY2Uu Cj4gLSAqLwo+IC12b2lkIGtmZF91bmJpbmRfcHJvY2Vzc2VzX2Zyb21fZGV2aWNlKHN0cnVjdCBr ZmRfZGV2ICpkZXYpCj4gLXsKPiAtICAgIHN0cnVjdCBrZmRfcHJvY2Vzc19kZXZpY2UgKnBkZDsK PiAtICAgIHN0cnVjdCBrZmRfcHJvY2VzcyAqcDsKPiAtICAgIHVuc2lnbmVkIGludCB0ZW1wOwo+ IC0KPiAtICAgIGludCBpZHggPSBzcmN1X3JlYWRfbG9jaygma2ZkX3Byb2Nlc3Nlc19zcmN1KTsK PiAtCj4gLSAgICBoYXNoX2Zvcl9lYWNoX3JjdShrZmRfcHJvY2Vzc2VzX3RhYmxlLCB0ZW1wLCBw LCBrZmRfcHJvY2Vzc2VzKSB7Cj4gLSAgICAgICAgbXV0ZXhfbG9jaygmcC0+bXV0ZXgpOwo+IC0g ICAgICAgIHBkZCA9IGtmZF9nZXRfcHJvY2Vzc19kZXZpY2VfZGF0YShkZXYsIHApOwo+IC0KPiAt ICAgICAgICBpZiAoV0FSTl9PTighcGRkKSkgewo+IC0gICAgICAgICAgICBtdXRleF91bmxvY2so JnAtPm11dGV4KTsKPiAtICAgICAgICAgICAgY29udGludWU7Cj4gLSAgICAgICAgfQo+IC0KPiAt ICAgICAgICBpZiAocGRkLT5ib3VuZCA9PSBQRERfQk9VTkQpCj4gLSAgICAgICAgICAgIHBkZC0+ Ym91bmQgPSBQRERfQk9VTkRfU1VTUEVOREVEOwo+IC0gICAgICAgIG11dGV4X3VubG9jaygmcC0+ bXV0ZXgpOwo+IC0gICAgfQo+IC0KPiAtICAgIHNyY3VfcmVhZF91bmxvY2soJmtmZF9wcm9jZXNz ZXNfc3JjdSwgaWR4KTsKPiAtfQo+IC0KPiAtdm9pZCBrZmRfcHJvY2Vzc19pb21tdV91bmJpbmRf Y2FsbGJhY2soc3RydWN0IGtmZF9kZXYgKmRldiwgdW5zaWduZWQKPiBpbnQgcGFzaWQpCj4gLXsK PiAtICAgIHN0cnVjdCBrZmRfcHJvY2VzcyAqcDsKPiAtICAgIHN0cnVjdCBrZmRfcHJvY2Vzc19k ZXZpY2UgKnBkZDsKPiAtCj4gLSAgICAvKgo+IC0gICAgICogTG9vayBmb3IgdGhlIHByb2Nlc3Mg dGhhdCBtYXRjaGVzIHRoZSBwYXNpZC4gSWYgdGhlcmUgaXMgbm8gc3VjaAo+IC0gICAgICogcHJv Y2Vzcywgd2UgZWl0aGVyIHJlbGVhc2VkIGl0IGluIGFtZGtmZCdzIG93biBub3RpZmllciwgb3IK PiB0aGVyZQo+IC0gICAgICogaXMgYSBidWcuIFVuZm9ydHVuYXRlbHksIHRoZXJlIGlzIG5vIHdh eSB0byB0ZWxsLi4uCj4gLSAgICAgKi8KPiAtICAgIHAgPSBrZmRfbG9va3VwX3Byb2Nlc3NfYnlf cGFzaWQocGFzaWQpOwo+IC0gICAgaWYgKCFwKQo+IC0gICAgICAgIHJldHVybjsKPiAtCj4gLSAg ICBwcl9kZWJ1ZygiVW5iaW5kaW5nIHByb2Nlc3MgJWQgZnJvbSBJT01NVVxuIiwgcGFzaWQpOwo+ IC0KPiAtICAgIG11dGV4X2xvY2soa2ZkX2dldF9kYmdtZ3JfbXV0ZXgoKSk7Cj4gLQo+IC0gICAg aWYgKGRldi0+ZGJnbWdyICYmIGRldi0+ZGJnbWdyLT5wYXNpZCA9PSBwLT5wYXNpZCkgewo+IC0g ICAgICAgIGlmICgha2ZkX2RiZ21ncl91bnJlZ2lzdGVyKGRldi0+ZGJnbWdyLCBwKSkgewo+IC0g ICAgICAgICAgICBrZmRfZGJnbWdyX2Rlc3Ryb3koZGV2LT5kYmdtZ3IpOwo+IC0gICAgICAgICAg ICBkZXYtPmRiZ21nciA9IE5VTEw7Cj4gLSAgICAgICAgfQo+IC0gICAgfQo+IC0KPiAtICAgIG11 dGV4X3VubG9jayhrZmRfZ2V0X2RiZ21ncl9tdXRleCgpKTsKPiAtCj4gLSAgICBtdXRleF9sb2Nr KCZwLT5tdXRleCk7Cj4gLQo+IC0gICAgcGRkID0ga2ZkX2dldF9wcm9jZXNzX2RldmljZV9kYXRh KGRldiwgcCk7Cj4gLSAgICBpZiAocGRkKQo+IC0gICAgICAgIC8qIEZvciBHUFUgcmVseWluZyBv biBJT01NVSwgd2UgbmVlZCB0byBkZXF1ZXVlIGhlcmUKPiAtICAgICAgICAgKiB3aGVuIFBBU0lE IGlzIHN0aWxsIGJvdW5kLgo+IC0gICAgICAgICAqLwo+IC0gICAgICAgIGtmZF9wcm9jZXNzX2Rl cXVldWVfZnJvbV9kZXZpY2UocGRkKTsKPiAtCj4gLSAgICBtdXRleF91bmxvY2soJnAtPm11dGV4 KTsKPiAtCj4gLSAgICBrZmRfdW5yZWZfcHJvY2VzcyhwKTsKPiAtfQo+IC0KPiAgIHN0cnVjdCBr ZmRfcHJvY2Vzc19kZXZpY2UgKmtmZF9nZXRfZmlyc3RfcHJvY2Vzc19kZXZpY2VfZGF0YSgKPiAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrZmRfcHJvY2VzcyAqcCkKPiAgIHsKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3RvcG9sb2d5LmMKPiBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF90b3BvbG9neS5jCj4gaW5kZXggNzc4MzI1 MC4uMjUwNjE1NSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRf dG9wb2xvZ3kuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF90b3BvbG9n eS5jCj4gQEAgLTM1LDYgKzM1LDcgQEAKPiAgICNpbmNsdWRlICJrZmRfY3JhdC5oIgo+ICAgI2lu Y2x1ZGUgImtmZF90b3BvbG9neS5oIgo+ICAgI2luY2x1ZGUgImtmZF9kZXZpY2VfcXVldWVfbWFu YWdlci5oIgo+ICsjaW5jbHVkZSAia2ZkX2lvbW11LmgiCj4gICAgIC8qIHRvcG9sb2d5X2Rldmlj ZV9saXN0IC0gTWFzdGVyIGxpc3Qgb2YgYWxsIHRvcG9sb2d5IGRldmljZXMgKi8KPiAgIHN0YXRp YyBzdHJ1Y3QgbGlzdF9oZWFkIHRvcG9sb2d5X2RldmljZV9saXN0Owo+IEBAIC04NzUsMTkgKzg3 Niw4IEBAIHN0YXRpYyB2b2lkIGZpbmRfc3lzdGVtX21lbW9yeShjb25zdCBzdHJ1Y3QKPiBkbWlf aGVhZGVyICpkbSwKPiAgICAqLwo+ICAgc3RhdGljIGludCBrZmRfYWRkX3BlcmZfdG9fdG9wb2xv Z3koc3RydWN0IGtmZF90b3BvbG9neV9kZXZpY2UgKmtkZXYpCj4gICB7Cj4gLSAgICBzdHJ1Y3Qg a2ZkX3BlcmZfcHJvcGVydGllcyAqcHJvcHM7Cj4gLQo+IC0gICAgaWYgKGFtZF9pb21tdV9wY19z dXBwb3J0ZWQoKSkgewo+IC0gICAgICAgIHByb3BzID0ga2ZkX2FsbG9jX3N0cnVjdChwcm9wcyk7 Cj4gLSAgICAgICAgaWYgKCFwcm9wcykKPiAtICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Cj4g LSAgICAgICAgc3RyY3B5KHByb3BzLT5ibG9ja19uYW1lLCAiaW9tbXUiKTsKPiAtICAgICAgICBw cm9wcy0+bWF4X2NvbmN1cnJlbnQgPSBhbWRfaW9tbXVfcGNfZ2V0X21heF9iYW5rcygwKSAqCj4g LSAgICAgICAgICAgIGFtZF9pb21tdV9wY19nZXRfbWF4X2NvdW50ZXJzKDApOyAvKiBhc3N1bWUg b25lIGlvbW11ICovCj4gLSAgICAgICAgbGlzdF9hZGRfdGFpbCgmcHJvcHMtPmxpc3QsICZrZGV2 LT5wZXJmX3Byb3BzKTsKPiAtICAgIH0KPiAtCj4gLSAgICByZXR1cm4gMDsKPiArICAgIC8qIFRo ZXNlIGFyZSB0aGUgb25seSBjb3VudGVycyBzdXBwb3J0ZWQgc28gZmFyICovCj4gKyAgICByZXR1 cm4ga2ZkX2lvbW11X2FkZF9wZXJmX2NvdW50ZXJzKGtkZXYpOwo+ICAgfQo+ICAgICAvKiBrZmRf YWRkX25vbl9jcmF0X2luZm9ybWF0aW9uIC0gQWRkIGluZm9ybWF0aW9uIHRoYXQgaXMgbm90Cj4g Y3VycmVudGx5Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF90 b3BvbG9neS5oCj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfdG9wb2xvZ3kuaAo+ IGluZGV4IDUzZmNhMWYuLmMwYmUyYmUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRrZmQva2ZkX3RvcG9sb2d5LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtm ZC9rZmRfdG9wb2xvZ3kuaAo+IEBAIC0yNSw3ICsyNSw3IEBACj4gICAgICNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgo+ICAgI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KPiAtI2luY2x1ZGUgImtmZF9w cml2LmgiCj4gKyNpbmNsdWRlICJrZmRfY3JhdC5oIgo+ICAgICAjZGVmaW5lIEtGRF9UT1BPTE9H WV9QVUJMSUNfTkFNRV9TSVpFIDEyOAo+ICAgQEAgLTE4Myw4ICsxODMsNCBAQCBzdHJ1Y3Qga2Zk X3RvcG9sb2d5X2RldmljZQo+ICprZmRfY3JlYXRlX3RvcG9sb2d5X2RldmljZSgKPiAgICAgICAg ICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2aWNlX2xpc3QpOwo+ICAgdm9pZCBrZmRfcmVsZWFzZV90 b3BvbG9neV9kZXZpY2VfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpkZXZpY2VfbGlzdCk7Cj4gICAt ZXh0ZXJuIGJvb2wgYW1kX2lvbW11X3BjX3N1cHBvcnRlZCh2b2lkKTsKPiAtZXh0ZXJuIHU4IGFt ZF9pb21tdV9wY19nZXRfbWF4X2JhbmtzKHUxNiBkZXZpZCk7Cj4gLWV4dGVybiB1OCBhbWRfaW9t bXVfcGNfZ2V0X21heF9jb3VudGVycyh1MTYgZGV2aWQpOwo+IC0KPiAgICNlbmRpZiAvKiBfX0tG RF9UT1BPTE9HWV9IX18gKi8KPgo+Cj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwo+IGFtZC1nZnggbWFpbGluZyBsaXN0Cj4gYW1kLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2FtZC1nZngKPgo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdm eAo=