From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Grodzovsky, Andrey" Subject: Re: [PATCH 5/5] drm/amdgpu: Refactor GPU reset for XGMI hive case. Date: Thu, 22 Nov 2018 15:44:42 +0000 Message-ID: <9e016b33-6c94-b1cb-cdcd-b68b91436e90@amd.com> References: <1542823821-15631-1-git-send-email-andrey.grodzovsky@amd.com> <1542823821-15631-6-git-send-email-andrey.grodzovsky@amd.com> <5f257299-4833-82b7-83ec-75bf02c4e441@amd.com> <8e9f51a4-7f0a-c435-c507-34eea96e0b08@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <8e9f51a4-7f0a-c435-c507-34eea96e0b08-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Content-Language: en-US Content-ID: 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: "Koenig, Christian" , "Liu, Shaoyun" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" Cc: "Deucher, Alexander" , "Liu, Monk" DQoNCk9uIDExLzIyLzIwMTggMDY6MTYgQU0sIENocmlzdGlhbiBLw7ZuaWcgd3JvdGU6DQo+IEhv dyBhYm91dCB1c2luZyBhIGxvY2sgcGVyIGhpdmUgYW5kIHRoZW4gYWNxdWlyaW5nIHRoYXQgd2l0 aCB0cnlsb2NrKCkgDQo+IGluc3RlYWQ/DQo+DQo+IFRoaXMgd2F5IHlvdSBzaG91bGQgYXQgbGVh c3QgY2F0Y2ggY2FzZXMgd2hlcmUgbXVsdGlwbGUgY2F1c2VzIHRyeSB0byANCj4gcmVzZXQgdGhl IHNhbWUgaGl2ZSBhdCB0aGUgc2FtZSB0aW1lLiBUcnVlIHRoYXQgdGhlcmUgaXMgc3RpbGwgc29t ZSANCj4gcmFjaW5nIGludm9sdmVkLCBidXQgaXQncyBhdCBsZWFzdCBhIGdvb2Qgc3RhcnQuDQoN CldoYXQgYWJvdXQgdXNpbmcgcGVyIGhpdmUgd29ya19zdHJ1Y3Qgd2hpY2ggd2hlbiBzY2hlZHVs ZWQgd2lsbCBleGVjdXRlIA0KYW1kZ3B1X2RldmljZV9ncHVfcmVjb3ZlciA/IFNpbmNlIHdvcmsg cXVldWUgcmVqZWN0cyBkdXBsaWNhdGVzIHdlIHdpbGwgDQpnZXQgcGVyIGhpdmUgc2VyaWFsaXph dGlvbiBhdXRvbWF0aWNhbGx5IGZyb20gdGhhdCB3aXRob3V0IG5lZWQgb2YgdXNpbmcgDQphbnkg bmV3IG11dGV4LiBBbHNvIHRoaXMgbWlnaHQgYmUgbmVjZXNzYXJ5IGFueXdheSBmb3IgUkFTIGFz IEkgYmVsaWV2ZSANClJBUyB3aWxsIHRyaWdnZXIgaW50ZXJydXB0IHdoZW4gZXJyb3JzIGFyZSBk ZXRlY3RlZCBhbmQgbWlnaHQgdGhlbiANCmRlY2lkZSB0byByZXNldCB0aGUgR1BVIHNvIHdlIHdp bGwgaGF2ZSB0byBzd2l0Y2ggdG8gYnV0dG9uIGhhbGYgY29udGV4dCANCmFueXdheS4gQW5kIEkg ZG9uJ3QgdGhpbmsgaXQncyBhIHByb2JsZW0gdG8gc2NoZWR1bGUgdGhpcyB3b3JrIGZyb20gam9i IA0KdGltZW91dCBoYW5kbGVyIGlmIG5lZWRlZC4NCg0KPg0KPg0KPg0KPiBBZGRpdGlvbmFsIHRv IHRoYXQgSSB3b3VsZCB0cnkgaW1wcm92ZSB0aGUgcHJlLCBtaWRkbGUsIHBvc3QgaGFuZGxpbmcg DQo+IHRvd2FyZHMgY2hlY2tpbmcgaWYgd2UgbWFkZSBzb21lIHByb2dyZXNzIGluIGJldHdlZW4u DQo+DQo+IEluIG90aGVyIHdvcmRzIHdlIHN0b3AgYWxsIHNjaGVkdWxlcnMgaW4gdGhlIHByZSBo YW5kbGluZyBhbmQgDQo+IGRpc2Nvbm5lY3QgdGhlIHNjaGVkdWxlciBmZW5jZXMgZnJvbSB0aGUg aGFyZHdhcmUgZmVuY2UgbGlrZSBJIGRpZCBpbiANCj4gcGF0Y2ggImRybS9zY2hlZDogZml4IHRp bWVvdXQgaGFuZGxpbmcgdjIiLg0KPg0KPiBUaGVuIGJlZm9yZSB3ZSBkbyB0aGUgYWN0dWFsIHJl c2V0IGluIHRoZSBtaWRkbGUgaGFuZGxpbmcgd2UgY2hlY2sgaWYgDQo+IHRoZSBvZmZlbmRpbmcg am9iIGhhcyBjb21wbGV0ZWQgb3IgYXQgbGVhc3QgbWFkZSBzb21lIHByb2dyZXNzIGluIHRoZSAN Cj4gbWVhbnRpbWUuIA0KDQpJIHVuZGVyc3RhbmQgaG93IHRvIGNoZWNrIGlmIHRoZSBqb2IgY29t cGxldGVkIC0gaWYgaXQncyBmZW5jZSBhbHJlYWR5IA0Kc2lnbmFsZWQsIGJ1dCBob3cgZG8gSSB0 ZXN0IGlmIHRoZSBqb2IgbWFkZSAnYXQgbGVhc3Qgc29tZSBwcm9ncmVzcycgPw0KQW5vdGhlciBx dWVzdGlvbiAtIHdoYXQncyB0aGUgcHVycG9zZSBvZiB0aGlzIHByb2dyZXNzIGNoZWNrIC0gaWYg SSd2ZSANCmFscmVhZHkgY29tcGxldGVkIHRoZSBwcmUgaGFuZGxpbmcgc2VxdWVuY2XCoCBJIGNh bid0IGJhaWwgb3V0IGV2ZW4gaWYgDQp0aGUgZ3VpbHR5IGpvYiBpcyBpcyBzaWduYWxlZCBieSB0 aGUgdGltZSBJIGRvIHRoZSBwcm9ncmVzcyBjaGVjaywgSSANCmhhdmUgdG8gY29tcGxldGUgYXQg bGVhc3QgdGhlIHBvc3QgaGFuZGxpbmcgdG8uIERvIHlvdSBtZWFuIEkgY2FuIGF0IA0KbGVhc3Qg c2tpcCB0aGUgQVNJQyByZXNldCBwaGFzZSBpbiB0aGF0IGNhc2UgPw0KDQpBbmRyZXkNCg0KPiBJ biB0aGUgY2FzZSBvZiBhIG1hbnVhbCByZXNldCB3ZSBza2lwIHRoYXQgYmVjYXVzZSB3ZSBkb24n dCBoYXZlIGFuIA0KPiBvZmZlbmRpbmcgam9iIHRvIGNoZWNrLg0KPg0KPiBJbiB0aGUgcG9zdCBo YW5kbGluZyB3ZSBzdGl0Y2ggZXZlcnl0aGluZyB0b2dldGhlciBhZ2FpbiBhbmQgc3RhcnQgdGhl IA0KPiBzY2hlZHVsZXIgdG8gZ28gb24gd2l0aCBqb2Igc3VibWlzc2lvbi4NCj4NCj4gQ2hyaXN0 aWFuLg0KPg0KPiBBbSAyMS4xMS4xOCB1bSAyMzowMiBzY2hyaWViIEdyb2R6b3Zza3ksIEFuZHJl eToNCj4+IERlcGVuZHMgd2hhdCB3YXMgdGhlIHJlYXNvbiBmb3IgdHJpZ2dlcmluZyB0aGUgcmVz ZXQgZm9yIHRoYXQgbm9kZSBob3cNCj4+IGRvIHdlIGtub3cgPw0KPj4gSWYgdGhlIHJlYXNvbiB3 YXMgUkFTIGVycm9yIHRoYXQgcHJvYmFibHkgbm90IGhhcmQgdG8gY2hlY2sgYWxsIGVycm9ycw0K Pj4gYXJlIGNsZWFyZWQsIGJ1dA0KPj4gaWYgdGhlIHJlYXNvbiB3YXMgam9iIHRpbWVvdXQgb24g dGhhdCBzcGVjaWZpYyBub2RlIEkgd2lsbCBuZWVkIHRvDQo+PiByZWNoZWNrIHRoYXQgbm8gam9i cyBhcmUgbGVmdCBpbiBpbmNvbXBsZXRlIHN0YXRlDQo+PiBzdGF0ZS4gQW5kIGlmIHRoZSByZWFz b24gaXMgbWFudWFsIGdwdSByZXNldCB0cmlnZ2VyIGZyb20gc3lzZnMsIHRoZW4NCj4+IHdoYXQn cyB0aGUgcG9saWN5ID8NCj4+IFNvdW5kcyB0byBtZSBpdCdzIGp1c3QgZWFzaWVyIHRvIGdvIGFo ZWFkIGFuZCBhbGxvdyBhbGwgdGhlIHBlbmRpbmcNCj4+IHJlc2V0cyB0byBwcm9jZWVkIHVubGVz cyB0aGVyZSBpcw0KPj4gYSBjbGVhciBhbmQgcXVpY2sgY3JpdGVyaWEgeW91IGNhbiBjaGVjayBh ZnRlciB5b3UgZ3JhYiB0aGUgbXV0ZXggdGhlbg0KPj4gc3VyZSAtIGJ1dCBJIGRvbid0IGtub3cg d2hhdCBpdCB3b3VsZCBiZS4NCj4+DQo+PiBBbmRyZXkNCj4+DQo+PiBPbiAxMS8yMS8yMDE4IDAz OjQ5IFBNLCBMaXUsIFNoYW95dW4gd3JvdGU6DQo+Pj4gSSBzYXcgeW91IHVzZSB0aGXCoCBnbG9i YWwgeGdtaV9tdXRleCB0byBwcmV2ZW50IGNvbmN1cnJlbnQgcmVzZXQgdG8gYmUNCj4+PiB0cmln Z2VyZWQgYnkgZGlmZmVyZW50IG5vZGVzICzCoCBidXQgYWZ0ZXIgdGhlwqAgbXV0ZXggYmVlbiBy ZWxlYXNlZCAsDQo+Pj4gY3VycmVudCBub2RlIG1heSBncmFwIHRoZSBtdXRleCBhbmQgY29udGlu dWUgdG8gZG8gYW5vdGhlciByZXNldCAuDQo+Pj4gTWF5YmXCoCB3ZSBzaG91bGQgY2hlY2sgdGhl IEdQVSBzdGF0dXMgYW5kwqAgc2tpcCB0aGXCoCByZXNldCBpbiB0aGlzIGNhc2UNCj4+PiBzaW5j ZSB0aGXCoCBHUFUgbWF5IGFscmVhZHkgYmUgaW4gZ29vZCBzdGF0ZSAuDQo+Pj4NCj4+PiBSZWdh cmRzDQo+Pj4NCj4+PiBzaGFveXVuLmxpdQ0KPj4+DQo+Pj4gT24gMjAxOC0xMS0yMSAxOjEwIHAu bS4sIEFuZHJleSBHcm9kem92c2t5IHdyb3RlOg0KPj4+PiBGb3IgWEdNSSBoaXZlIGNhc2UgZG8g cmVzZXQgaW4gc3RlcHMgd2hlcmUgZWFjaCBzdGVwIGl0ZXJhdGVzIG92ZXINCj4+Pj4gYWxsIGRl dnMgaW4gaGl2ZS4gVGhpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgYXNpYyByZXNldA0KPj4+ PiBzaW5jZSBhbGwgUFNQIEZXIGluIGhpdmUgbXVzdCBjb21lIHVwIHdpdGhpbiBhIGxpbWl0ZWQg dGltZQ0KPj4+PiAoYXJvdW5kIDEgc2VjKSB0byBwcm9wZXJwbHkgbmVnb3RpYXRlIHRoZSBsaW5r Lg0KPj4+PiBEbyB0aGlzIGJ5wqAgcmVmYWN0b3JpbmfCoCBhbWRncHVfZGV2aWNlX2dwdV9yZWNv dmVyIGFuZCANCj4+Pj4gYW1kZ3B1X2RldmljZV9yZXNldA0KPj4+PiBpbnRvIHByZV9hc2ljX3Jl c2V0LCBhc2ljX3Jlc2V0IGFuZCBwb3N0X2FzaWNfcmVzZXQgZnVuY3Rpb25zIHdoZXJlIA0KPj4+ PiBpcyBwYXJ0DQo+Pj4+IGlzIGV4ZWN0dWVkIGZvciBhbGwgdGhlIEdQVXMgaW4gdGhlIGhpdmUg YmVmb3JlIGdvaW5nIHRvIHRoZSBuZXh0IA0KPj4+PiBzdGVwLg0KPj4+Pg0KPj4+PiBTaWduZWQt b2ZmLWJ5OiBBbmRyZXkgR3JvZHpvdnNreSA8YW5kcmV5Lmdyb2R6b3Zza3lAYW1kLmNvbT4NCj4+ Pj4gLS0tDQo+Pj4+IMKgwqDCoCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUuaMKg wqDCoMKgwqDCoMKgIHzCoMKgIDUgKy0NCj4+Pj4gwqDCoMKgIGRyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9kZXZpY2UuYyB8IDM3NSANCj4+Pj4gKysrKysrKysrKysrKysrKysrKyst LS0tLS0tLS0NCj4+Pj4gwqDCoMKgIDIgZmlsZXMgY2hhbmdlZCwgMjY0IGluc2VydGlvbnMoKyks IDExNiBkZWxldGlvbnMoLSkNCj4+Pj4NCj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdS5oIA0KPj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdS5oDQo+Pj4+IGluZGV4IDRlZjVmN2EuLmJkMDZkNDUgMTAwNjQ0DQo+Pj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oDQo+Pj4+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oDQo+Pj4+IEBAIC0xMDI2LDYgKzEwMjYsOSBAQCBz dHJ1Y3QgYW1kZ3B1X2RldmljZSB7DQo+Pj4+IMKgwqDCoMKgwqDCoMKgIHVuc2lnbmVkIGxvbmcg bGFzdF9tbV9pbmRleDsNCj4+Pj4gwqDCoMKgwqDCoMKgwqAgYm9vbMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpbl9ncHVfcmVzZXQ7DQo+Pj4+ IMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBtdXRleMKgIGxvY2tfcmVzZXQ7DQo+Pj4+ICsNCj4+Pj4g K8KgwqDCoCBpbnQgYXNpY19yZXNldF9yZXM7DQo+Pj4+ICvCoMKgwqAgaW50IHJlc2NoZWQ7DQo+ Pj4+IMKgwqDCoCB9Ow0KPj4+PiDCoMKgwqAgwqDCoMKgIHN0YXRpYyBpbmxpbmUgc3RydWN0IGFt ZGdwdV9kZXZpY2UgKmFtZGdwdV90dG1fYWRldihzdHJ1Y3QgDQo+Pj4+IHR0bV9ib19kZXZpY2Ug KmJkZXYpDQo+Pj4+IEBAIC0xMjMyLDcgKzEyMzUsNyBAQCBzdHJ1Y3QgYW1kZ3B1X2hpdmVfaW5m bzsNCj4+Pj4gwqDCoMKgIMKgwqDCoCBzdHJ1Y3QgbGlzdF9oZWFkICphbWRncHVfeGdtaV9nZXRf YWRldl9saXN0X2hhbmRsZShzdHJ1Y3QgDQo+Pj4+IGFtZGdwdV9oaXZlX2luZm8gKmhpdmUpOw0K Pj4+PiDCoMKgwqAgc3RydWN0IGFtZGdwdV9oaXZlX2luZm8gKmFtZGdwdV9nZXRfeGdtaV9oaXZl KHN0cnVjdCANCj4+Pj4gYW1kZ3B1X2RldmljZSAqYWRldik7DQo+Pj4+IC1pbnQgYW1kZ3B1X3hn bWlfdXBkYXRlX3RvcG9sb2d5KHN0cnVjdCBhbWRncHVfaGl2ZV9pbmZvICpoaXZlKTsNCj4+Pj4g K2ludCBhbWRncHVfeGdtaV91cGRhdGVfdG9wb2xvZ3koc3RydWN0IGFtZGdwdV9oaXZlX2luZm8g KmhpdmUsIA0KPj4+PiBzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7DQo+Pj4+IMKgwqDCoCBp bnQgYW1kZ3B1X3hnbWlfYWRkX2RldmljZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldik7DQo+ Pj4+IMKgwqDCoCDCoMKgwqAgLyoNCj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYyANCj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfZGV2aWNlLmMNCj4+Pj4gaW5kZXggY2IwNmU2OC4uOGU5NGQ3ZiAxMDA2NDQN Cj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jDQo+ Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYw0KPj4+ PiBAQCAtMzE1Nyw4NiArMzE1Nyw2IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2RldmljZV9yZWNvdmVy X3ZyYW0oc3RydWN0IA0KPj4+PiBhbWRncHVfZGV2aWNlICphZGV2KQ0KPj4+PiDCoMKgwqDCoMKg wqDCoCByZXR1cm4gMDsNCj4+Pj4gwqDCoMKgIH0NCj4+Pj4gwqDCoMKgIC0vKioNCj4+Pj4gLSAq IGFtZGdwdV9kZXZpY2VfcmVzZXQgLSByZXNldCBBU0lDL0dQVSBmb3IgYmFyZS1tZXRhbCBvciBw YXNzdGhyb3VnaA0KPj4+PiAtICoNCj4+Pj4gLSAqIEBhZGV2OiBhbWRncHUgZGV2aWNlIHBvaW50 ZXINCj4+Pj4gLSAqDQo+Pj4+IC0gKiBhdHRlbXB0IHRvIGRvIHNvZnQtcmVzZXQgb3IgZnVsbC1y ZXNldCBhbmQgcmVpbml0aWFsaXplIEFzaWMNCj4+Pj4gLSAqIHJldHVybiAwIG1lYW5zIHN1Y2Nl ZWRlZCBvdGhlcndpc2UgZmFpbGVkDQo+Pj4+IC0gKi8NCj4+Pj4gLXN0YXRpYyBpbnQgYW1kZ3B1 X2RldmljZV9yZXNldChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikNCj4+Pj4gLXsNCj4+Pj4g LcKgwqDCoCBib29sIG5lZWRfZnVsbF9yZXNldCwgdnJhbV9sb3N0ID0gMDsNCj4+Pj4gLcKgwqDC oCBpbnQgcjsNCj4+Pj4gLQ0KPj4+PiAtwqDCoMKgIG5lZWRfZnVsbF9yZXNldCA9IGFtZGdwdV9k ZXZpY2VfaXBfbmVlZF9mdWxsX3Jlc2V0KGFkZXYpOw0KPj4+PiAtDQo+Pj4+IC3CoMKgwqAgaWYg KCFuZWVkX2Z1bGxfcmVzZXQpIHsNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGFtZGdwdV9kZXZpY2Vf aXBfcHJlX3NvZnRfcmVzZXQoYWRldik7DQo+Pj4+IC3CoMKgwqDCoMKgwqDCoCByID0gYW1kZ3B1 X2RldmljZV9pcF9zb2Z0X3Jlc2V0KGFkZXYpOw0KPj4+PiAtwqDCoMKgwqDCoMKgwqAgYW1kZ3B1 X2RldmljZV9pcF9wb3N0X3NvZnRfcmVzZXQoYWRldik7DQo+Pj4+IC3CoMKgwqDCoMKgwqDCoCBp ZiAociB8fCBhbWRncHVfZGV2aWNlX2lwX2NoZWNrX3NvZnRfcmVzZXQoYWRldikpIHsNCj4+Pj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX0lORk8oInNvZnQgcmVzZXQgZmFpbGVkLCB3aWxs IGZhbGxiYWNrIHRvIGZ1bGwgDQo+Pj4+IHJlc2V0IVxuIik7DQo+Pj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIG5lZWRfZnVsbF9yZXNldCA9IHRydWU7DQo+Pj4+IC3CoMKgwqDCoMKgwqDCoCB9 DQo+Pj4+IC3CoMKgwqAgfQ0KPj4+PiAtDQo+Pj4+IC3CoMKgwqAgaWYgKG5lZWRfZnVsbF9yZXNl dCkgew0KPj4+PiAtwqDCoMKgwqDCoMKgwqAgciA9IGFtZGdwdV9kZXZpY2VfaXBfc3VzcGVuZChh ZGV2KTsNCj4+Pj4gLQ0KPj4+PiAtcmV0cnk6DQo+Pj4+IC3CoMKgwqDCoMKgwqDCoCByID0gYW1k Z3B1X2FzaWNfcmVzZXQoYWRldik7DQo+Pj4+IC3CoMKgwqDCoMKgwqDCoCAvKiBwb3N0IGNhcmQg Ki8NCj4+Pj4gLSBhbWRncHVfYXRvbV9hc2ljX2luaXQoYWRldi0+bW9kZV9pbmZvLmF0b21fY29u dGV4dCk7DQo+Pj4+IC0NCj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGlmICghcikgew0KPj4+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfaW5mbyhhZGV2LT5kZXYsICJHUFUgcmVzZXQgc3VjY2Vl ZGVkLCB0cnlpbmcgdG8gDQo+Pj4+IHJlc3VtZVxuIik7DQo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHIgPSBhbWRncHVfZGV2aWNlX2lwX3Jlc3VtZV9waGFzZTEoYWRldik7DQo+Pj4+IC3C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyKQ0KPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGdvdG8gb3V0Ow0KPj4+PiAtDQo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHZyYW1fbG9zdCA9IGFtZGdwdV9kZXZpY2VfY2hlY2tfdnJhbV9sb3N0KGFkZXYpOw0KPj4+PiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAodnJhbV9sb3N0KSB7DQo+Pj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJWUkFNIGlzIGxvc3QhXG4iKTsNCj4+Pj4g LSBhdG9taWNfaW5jKCZhZGV2LT52cmFtX2xvc3RfY291bnRlcik7DQo+Pj4+IC3CoMKgwqDCoMKg wqDCoMKgwqDCoMKgIH0NCj4+Pj4gLQ0KPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByID0g YW1kZ3B1X2d0dF9tZ3JfcmVjb3ZlcigNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAmYWRldi0+bW1hbi5iZGV2Lm1hbltUVE1fUExfVFRdKTsNCj4+Pj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgaWYgKHIpDQo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Z290byBvdXQ7DQo+Pj4+IC0NCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgciA9IGFtZGdw dV9kZXZpY2VfZndfbG9hZGluZyhhZGV2KTsNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKHIpDQo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHI7DQo+ Pj4+IC0NCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgciA9IGFtZGdwdV9kZXZpY2VfaXBf cmVzdW1lX3BoYXNlMihhZGV2KTsNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHIp DQo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXQ7DQo+Pj4+IC0N Cj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHZyYW1fbG9zdCkNCj4+Pj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhbWRncHVfZGV2aWNlX2ZpbGxfcmVzZXRfbWFnaWMo YWRldik7DQo+Pj4+IC3CoMKgwqDCoMKgwqDCoCB9DQo+Pj4+IC3CoMKgwqAgfQ0KPj4+PiAtDQo+ Pj4+IC1vdXQ6DQo+Pj4+IC3CoMKgwqAgaWYgKCFyKSB7DQo+Pj4+IC3CoMKgwqDCoMKgwqDCoCBh bWRncHVfaXJxX2dwdV9yZXNldF9yZXN1bWVfaGVscGVyKGFkZXYpOw0KPj4+PiAtwqDCoMKgwqDC oMKgwqAgciA9IGFtZGdwdV9pYl9yaW5nX3Rlc3RzKGFkZXYpOw0KPj4+PiAtwqDCoMKgwqDCoMKg wqAgaWYgKHIpIHsNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihhZGV2LT5k ZXYsICJpYiByaW5nIHRlc3QgZmFpbGVkICglZCkuXG4iLCByKTsNCj4+Pj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgciA9IGFtZGdwdV9kZXZpY2VfaXBfc3VzcGVuZChhZGV2KTsNCj4+Pj4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgbmVlZF9mdWxsX3Jlc2V0ID0gdHJ1ZTsNCj4+Pj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZ290byByZXRyeTsNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgIH0NCj4+ Pj4gLcKgwqDCoCB9DQo+Pj4+IC0NCj4+Pj4gLcKgwqDCoCBpZiAoIXIpDQo+Pj4+IC3CoMKgwqDC oMKgwqDCoCByID0gYW1kZ3B1X2RldmljZV9yZWNvdmVyX3ZyYW0oYWRldik7DQo+Pj4+IC0NCj4+ Pj4gLcKgwqDCoCByZXR1cm4gcjsNCj4+Pj4gLX0NCj4+Pj4gwqDCoMKgIMKgwqDCoCAvKioNCj4+ Pj4gwqDCoMKgwqAgKiBhbWRncHVfZGV2aWNlX3Jlc2V0X3NyaW92IC0gcmVzZXQgQVNJQyBmb3Ig U1ItSU9WIHZmDQo+Pj4+IEBAIC0zMzM1LDMxICszMjU1LDE2IEBAIGJvb2wgDQo+Pj4+IGFtZGdw dV9kZXZpY2Vfc2hvdWxkX3JlY292ZXJfZ3B1KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQ0K Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsNCj4+Pj4gwqDCoMKgIH0N Cj4+Pj4gwqDCoMKgIC0vKioNCj4+Pj4gLSAqIGFtZGdwdV9kZXZpY2VfZ3B1X3JlY292ZXIgLSBy ZXNldCB0aGUgYXNpYyBhbmQgcmVjb3ZlciBzY2hlZHVsZXINCj4+Pj4gLSAqDQo+Pj4+IC0gKiBA YWRldjogYW1kZ3B1IGRldmljZSBwb2ludGVyDQo+Pj4+IC0gKiBAam9iOiB3aGljaCBqb2IgdHJp Z2dlciBoYW5nDQo+Pj4+IC0gKg0KPj4+PiAtICogQXR0ZW1wdCB0byByZXNldCB0aGUgR1BVIGlm IGl0IGhhcyBodW5nIChhbGwgYXNpY3MpLg0KPj4+PiAtICogUmV0dXJucyAwIGZvciBzdWNjZXNz IG9yIGFuIGVycm9yIG9uIGZhaWx1cmUuDQo+Pj4+IC0gKi8NCj4+Pj4gLWludCBhbWRncHVfZGV2 aWNlX2dwdV9yZWNvdmVyKHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LA0KPj4+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYW1kZ3B1X2pvYiAqam9iKQ0KPj4+ PiAtew0KPj4+PiAtwqDCoMKgIGludCBpLCByLCByZXNjaGVkOw0KPj4+PiAtDQo+Pj4+IC3CoMKg wqAgZGV2X2luZm8oYWRldi0+ZGV2LCAiR1BVIHJlc2V0IGJlZ2luIVxuIik7DQo+Pj4+IC0NCj4+ Pj4gLcKgwqDCoCBtdXRleF9sb2NrKCZhZGV2LT5sb2NrX3Jlc2V0KTsNCj4+Pj4gLcKgwqDCoCBh dG9taWNfaW5jKCZhZGV2LT5ncHVfcmVzZXRfY291bnRlcik7DQo+Pj4+IC3CoMKgwqAgYWRldi0+ aW5fZ3B1X3Jlc2V0ID0gMTsNCj4+Pj4gwqDCoMKgIC3CoMKgwqAgLyogQmxvY2sga2ZkICovDQo+ Pj4+IC3CoMKgwqAgYW1kZ3B1X2FtZGtmZF9wcmVfcmVzZXQoYWRldik7DQo+Pj4+ICtzdGF0aWMg aW50IGFtZGdwdV9kZXZpY2VfcHJlX2FzaWNfcmVzZXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFk ZXYsDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qg YW1kZ3B1X2pvYiAqam9iLA0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYm9vbCAqbmVlZF9mdWxsX3Jlc2V0X2FyZykNCj4+Pj4gK3sNCj4+Pj4gK8KgwqDCoCBp bnQgaSwgciA9IDA7DQo+Pj4+ICvCoMKgwqAgYm9vbCBuZWVkX2Z1bGxfcmVzZXTCoCA9ICpuZWVk X2Z1bGxfcmVzZXRfYXJnOw0KPj4+PiDCoMKgwqAgwqDCoMKgwqDCoMKgwqAgLyogYmxvY2sgVFRN ICovDQo+Pj4+IC3CoMKgwqAgcmVzY2hlZCA9IHR0bV9ib19sb2NrX2RlbGF5ZWRfd29ya3F1ZXVl KCZhZGV2LT5tbWFuLmJkZXYpOw0KPj4+PiArwqDCoMKgIGFkZXYtPnJlc2NoZWQgPSB0dG1fYm9f bG9ja19kZWxheWVkX3dvcmtxdWV1ZSgmYWRldi0+bW1hbi5iZGV2KTsNCj4+Pj4gwqDCoMKgIMKg wqDCoMKgwqDCoMKgIC8qIGJsb2NrIGFsbCBzY2hlZHVsZXJzIGFuZCByZXNldCBnaXZlbiBqb2In cyByaW5nICovDQo+Pj4+IMKgwqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBBTURHUFVfTUFY X1JJTkdTOyArK2kpIHsNCj4+Pj4gQEAgLTMzNzksMTAgKzMyODQsMTIxIEBAIGludCBhbWRncHVf ZGV2aWNlX2dwdV9yZWNvdmVyKHN0cnVjdCANCj4+Pj4gYW1kZ3B1X2RldmljZSAqYWRldiwNCj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhbWRncHVfZmVuY2VfZHJpdmVyX2ZvcmNlX2NvbXBs ZXRpb24ocmluZyk7DQo+Pj4+IMKgwqDCoMKgwqDCoMKgIH0NCj4+Pj4gwqDCoMKgIC3CoMKgwqAg aWYgKGFtZGdwdV9zcmlvdl92ZihhZGV2KSkNCj4+Pj4gLcKgwqDCoMKgwqDCoMKgIHIgPSBhbWRn cHVfZGV2aWNlX3Jlc2V0X3NyaW92KGFkZXYsIGpvYiA/IGZhbHNlIDogdHJ1ZSk7DQo+Pj4+IC3C oMKgwqAgZWxzZQ0KPj4+PiAtwqDCoMKgwqDCoMKgwqAgciA9IGFtZGdwdV9kZXZpY2VfcmVzZXQo YWRldik7DQo+Pj4+ICvCoMKgwqAgaWYgKCFhbWRncHVfc3Jpb3ZfdmYoYWRldikpIHsNCj4+Pj4g Kw0KPj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFuZWVkX2Z1bGxfcmVzZXQpDQo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIG5lZWRfZnVsbF9yZXNldCA9IGFtZGdwdV9kZXZpY2VfaXBfbmVl ZF9mdWxsX3Jlc2V0KGFkZXYpOw0KPj4+PiArDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIW5l ZWRfZnVsbF9yZXNldCkgew0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhbWRncHVfZGV2 aWNlX2lwX3ByZV9zb2Z0X3Jlc2V0KGFkZXYpOw0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByID0gYW1kZ3B1X2RldmljZV9pcF9zb2Z0X3Jlc2V0KGFkZXYpOw0KPj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBhbWRncHVfZGV2aWNlX2lwX3Bvc3Rfc29mdF9yZXNldChhZGV2KTsNCj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHIgfHwgYW1kZ3B1X2RldmljZV9pcF9jaGVj a19zb2Z0X3Jlc2V0KGFkZXYpKSB7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgRFJNX0lORk8oInNvZnQgcmVzZXQgZmFpbGVkLCB3aWxsIGZhbGxiYWNrIHRvIGZ1bGwgDQo+ Pj4+IHJlc2V0IVxuIik7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmVl ZF9mdWxsX3Jlc2V0ID0gdHJ1ZTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQ0KPj4+ PiArwqDCoMKgwqDCoMKgwqAgfQ0KPj4+PiArDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAobmVl ZF9mdWxsX3Jlc2V0KQ0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByID0gYW1kZ3B1X2Rl dmljZV9pcF9zdXNwZW5kKGFkZXYpOw0KPj4+PiArDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCAqbmVl ZF9mdWxsX3Jlc2V0X2FyZyA9IG5lZWRfZnVsbF9yZXNldDsNCj4+Pj4gK8KgwqDCoCB9DQo+Pj4+ ICsNCj4+Pj4gK8KgwqDCoCByZXR1cm4gcjsNCj4+Pj4gK30NCj4+Pj4gKw0KPj4+PiArc3RhdGlj IGludCBhbWRncHVfZG9fYXNpY19yZXNldChzdHJ1Y3QgYW1kZ3B1X2hpdmVfaW5mbyAqaGl2ZSwN Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgbGlzdF9o ZWFkICpkZXZpY2VfbGlzdF9oYW5kbGUsDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYm9vbCAqbmVlZF9mdWxsX3Jlc2V0X2FyZykNCj4+Pj4gK3sNCj4+Pj4gK8Kg wqDCoCBzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqdG1wX2FkZXYgPSBOVUxMOw0KPj4+PiArwqDCoMKg IGJvb2wgbmVlZF9mdWxsX3Jlc2V0ID0gKm5lZWRfZnVsbF9yZXNldF9hcmcsIHZyYW1fbG9zdCA9 IGZhbHNlOw0KPj4+PiArwqDCoMKgIGludCByID0gMDsNCj4+Pj4gKw0KPj4+PiArwqDCoMKgIC8q DQo+Pj4+ICvCoMKgwqDCoCAqIEFTSUMgcmVzZXQgaGFzIHRvIGJlIGRvbmUgb24gYWxsIEhHTUkg aGl2ZSBub2RlcyBBU0FQDQo+Pj4+ICvCoMKgwqDCoCAqIHRvIGFsbG93IHByb3BlciBsaW5rcyBu ZWdvdGlhdGlvbiBpbiBGVyAod2l0aGluIDEgc2VjKQ0KPj4+PiArwqDCoMKgwqAgKi8NCj4+Pj4g K8KgwqDCoCBpZiAobmVlZF9mdWxsX3Jlc2V0KSB7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBsaXN0 X2Zvcl9lYWNoX2VudHJ5KHRtcF9hZGV2LCBkZXZpY2VfbGlzdF9oYW5kbGUsIA0KPj4+PiBnbWMu eGdtaS5oZWFkKSB7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHIgPSBhbWRncHVfYXNp Y19yZXNldCh0bXBfYWRldik7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyKQ0K Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERSTV9XQVJOKCJBU0lDIHJlc2V0 IGZhaWxlZCB3aXRoIGVyciByLCAlZCBmb3IgZHJtIA0KPj4+PiBkZXYsICVzIiwNCj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgciwgdG1wX2FkZXYtPmRkZXYt PnVuaXF1ZSk7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9DQo+Pj4+ICvCoMKgwqAgfQ0KPj4+PiAr DQo+Pj4+ICsNCj4+Pj4gK8KgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9hZGV2LCBkZXZp Y2VfbGlzdF9oYW5kbGUsIA0KPj4+PiBnbWMueGdtaS5oZWFkKSB7DQo+Pj4+ICvCoMKgwqDCoMKg wqDCoCBpZiAobmVlZF9mdWxsX3Jlc2V0KSB7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IC8qIHBvc3QgY2FyZCAqLw0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiANCj4+Pj4g KGFtZGdwdV9hdG9tX2FzaWNfaW5pdCh0bXBfYWRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCkp DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX1dBUk4oImFzaWMgYXRv bSBpbml0IGZhaWxlZCEiKTsNCj4+Pj4gKw0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiAoIXIpIHsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfaW5mbyh0 bXBfYWRldi0+ZGV2LCAiR1BVIHJlc2V0IHN1Y2NlZWRlZCwgDQo+Pj4+IHRyeWluZyB0byByZXN1 bWVcbiIpOw0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHIgPSBhbWRncHVf ZGV2aWNlX2lwX3Jlc3VtZV9waGFzZTEodG1wX2FkZXYpOw0KPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlmIChyKQ0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZ290byBvdXQ7DQo+Pj4+ICsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCB2cmFtX2xvc3QgPSBhbWRncHVfZGV2aWNlX2NoZWNrX3ZyYW1fbG9zdCh0bXBf YWRldik7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHZyYW1fbG9z dCkgew0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX0VS Uk9SKCJWUkFNIGlzIGxvc3QhXG4iKTsNCj4+Pj4gKyBhdG9taWNfaW5jKCZ0bXBfYWRldi0+dnJh bV9sb3N0X2NvdW50ZXIpOw0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0N Cj4+Pj4gKw0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHIgPSBhbWRncHVf Z3R0X21ncl9yZWNvdmVyKA0KPj4+PiArICZ0bXBfYWRldi0+bW1hbi5iZGV2Lm1hbltUVE1fUExf VFRdKTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocikNCj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0Ow0KPj4+PiAr DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgciA9IGFtZGdwdV9kZXZpY2Vf ZndfbG9hZGluZyh0bXBfYWRldik7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKHIpDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gcjsNCj4+Pj4gKw0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHIg PSBhbWRncHVfZGV2aWNlX2lwX3Jlc3VtZV9waGFzZTIodG1wX2FkZXYpOw0KPj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyKQ0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXQ7DQo+Pj4+ICsNCj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAodnJhbV9sb3N0KQ0KPj4+PiArIGFtZGdwdV9kZXZpY2Vf ZmlsbF9yZXNldF9tYWdpYyh0bXBfYWRldik7DQo+Pj4+ICsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAvKiBVcGRhdGUgUFNQIEZXIHRvcG9sb2d5IGFmdGVyIHJlc2V0ICov DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHRtcF9hZGV2LT5nbWMu eGdtaS5udW1fcGh5c2ljYWxfbm9kZXMgPiAxKQ0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgciA9IGFtZGdwdV94Z21pX3VwZGF0ZV90b3BvbG9neShoaXZlLCB0 bXBfYWRldik7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4+Pj4gK8KgwqDCoMKg wqDCoMKgIH0NCj4+Pj4gKw0KPj4+PiArDQo+Pj4+ICtvdXQ6DQo+Pj4+ICvCoMKgwqDCoMKgwqDC oCBpZiAoIXIpIHsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X2lycV9ncHVf cmVzZXRfcmVzdW1lX2hlbHBlcih0bXBfYWRldik7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHIgPSBhbWRncHVfaWJfcmluZ190ZXN0cyh0bXBfYWRldik7DQo+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGlmIChyKSB7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZGV2X2Vycih0bXBfYWRldi0+ZGV2LCAiaWIgcmluZyB0ZXN0IGZhaWxlZCANCj4+Pj4gKCVk KS5cbiIsIHIpOw0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHIgPSBhbWRn cHVfZGV2aWNlX2lwX3N1c3BlbmQodG1wX2FkZXYpOw0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIG5lZWRfZnVsbF9yZXNldCA9IHRydWU7DQo+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgciA9IC1FQUdBSU47DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZ290byBlbmQ7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0NCj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIH0NCj4+Pj4gKw0KPj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFy KQ0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByID0gYW1kZ3B1X2RldmljZV9yZWNvdmVy X3ZyYW0odG1wX2FkZXYpOw0KPj4+PiArwqDCoMKgwqDCoMKgwqAgZWxzZQ0KPj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB0bXBfYWRldi0+YXNpY19yZXNldF9yZXMgPSByOw0KPj4+PiArwqDC oMKgIH0NCj4+Pj4gKw0KPj4+PiArZW5kOg0KPj4+PiArwqDCoMKgICpuZWVkX2Z1bGxfcmVzZXRf YXJnID0gbmVlZF9mdWxsX3Jlc2V0Ow0KPj4+PiArwqDCoMKgIHJldHVybiByOw0KPj4+PiArfQ0K Pj4+PiArDQo+Pj4+ICtzdGF0aWMgdm9pZCBhbWRncHVfZGV2aWNlX3Bvc3RfYXNpY19yZXNldChz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYW1kZ3B1X2pvYiAqam9iKQ0KPj4+PiArew0KPj4+ PiArwqDCoMKgIGludCBpOw0KPj4+PiDCoMKgwqAgwqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsg aSA8IEFNREdQVV9NQVhfUklOR1M7ICsraSkgew0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBhbWRncHVfcmluZyAqcmluZyA9IGFkZXYtPnJpbmdzW2ldOw0KPj4+PiBAQCAtMzM5 NCw3ICszNDEwLDcgQEAgaW50IGFtZGdwdV9kZXZpY2VfZ3B1X3JlY292ZXIoc3RydWN0IA0KPj4+ PiBhbWRncHVfZGV2aWNlICphZGV2LA0KPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBv ciBhbGwgcmluZ3MgKGluIHRoZSBjYXNlIEBqb2IgaXMgTlVMTCkNCj4+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICogYWZ0ZXIgYWJvdmUgYW1kZ3B1X3Jlc2V0IGFjY29tcGxpc2hlZA0KPj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8NCj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGlmICgo IWpvYiB8fCBqb2ItPmJhc2Uuc2NoZWQgPT0gJnJpbmctPnNjaGVkKSAmJiAhcikNCj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIGlmICgoIWpvYiB8fCBqb2ItPmJhc2Uuc2NoZWQgPT0gJnJpbmctPnNjaGVk KSAmJiANCj4+Pj4gIWFkZXYtPmFzaWNfcmVzZXRfcmVzKQ0KPj4+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZHJtX3NjaGVkX2pvYl9yZWNvdmVyeSgmcmluZy0+c2NoZWQpOw0KPj4+ PiDCoMKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBrdGhyZWFkX3VucGFyayhyaW5nLT5zY2hl ZC50aHJlYWQpOw0KPj4+PiBAQCAtMzQwNCwyMSArMzQyMCwxNTAgQEAgaW50IGFtZGdwdV9kZXZp Y2VfZ3B1X3JlY292ZXIoc3RydWN0IA0KPj4+PiBhbWRncHVfZGV2aWNlICphZGV2LA0KPj4+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoYWRldi0+ ZGRldik7DQo+Pj4+IMKgwqDCoMKgwqDCoMKgIH0NCj4+Pj4gwqDCoMKgIC0gdHRtX2JvX3VubG9j a19kZWxheWVkX3dvcmtxdWV1ZSgmYWRldi0+bW1hbi5iZGV2LCByZXNjaGVkKTsNCj4+Pj4gKyB0 dG1fYm9fdW5sb2NrX2RlbGF5ZWRfd29ya3F1ZXVlKCZhZGV2LT5tbWFuLmJkZXYsIGFkZXYtPnJl c2NoZWQpOw0KPj4+PiDCoMKgwqAgLcKgwqDCoCBpZiAocikgew0KPj4+PiAtwqDCoMKgwqDCoMKg wqAgLyogYmFkIG5ld3MsIGhvdyB0byB0ZWxsIGl0IHRvIHVzZXJzcGFjZSA/ICovDQo+Pj4+IC3C oMKgwqDCoMKgwqDCoCBkZXZfaW5mbyhhZGV2LT5kZXYsICJHUFUgcmVzZXQoJWQpIGZhaWxlZFxu IiwgDQo+Pj4+IGF0b21pY19yZWFkKCZhZGV2LT5ncHVfcmVzZXRfY291bnRlcikpOw0KPj4+PiAt wqDCoMKgwqDCoMKgwqAgYW1kZ3B1X3ZmX2Vycm9yX3B1dChhZGV2LCBBTURHSU1fRVJST1JfVkZf R1BVX1JFU0VUX0ZBSUwsIA0KPj4+PiAwLCByKTsNCj4+Pj4gLcKgwqDCoCB9IGVsc2Ugew0KPj4+ PiAtwqDCoMKgwqDCoMKgwqAgZGV2X2luZm8oYWRldi0+ZGV2LCAiR1BVIHJlc2V0KCVkKSANCj4+ Pj4gc3VjY2VlZGVkIVxuIixhdG9taWNfcmVhZCgmYWRldi0+Z3B1X3Jlc2V0X2NvdW50ZXIpKTsN Cj4+Pj4gLcKgwqDCoCB9DQo+Pj4+ICvCoMKgwqAgYWRldi0+YXNpY19yZXNldF9yZXMgPSBhZGV2 LT5yZXNjaGVkID0gMDsNCj4+Pj4gKw0KPj4+PiArfQ0KPj4+PiDCoMKgwqAgK3N0YXRpYyB2b2lk IGFtZGdwdV9sb2NrX2FkZXYoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpDQo+Pj4+ICt7DQo+ Pj4+ICvCoMKgwqAgbXV0ZXhfbG9jaygmYWRldi0+bG9ja19yZXNldCk7DQo+Pj4+ICvCoMKgwqAg YXRvbWljX2luYygmYWRldi0+Z3B1X3Jlc2V0X2NvdW50ZXIpOw0KPj4+PiArwqDCoMKgIGFkZXYt PmluX2dwdV9yZXNldCA9IDE7DQo+Pj4+ICvCoMKgwqAgLyogQmxvY2sga2ZkICovDQo+Pj4+ICvC oMKgwqAgYW1kZ3B1X2FtZGtmZF9wcmVfcmVzZXQoYWRldik7DQo+Pj4+ICt9DQo+Pj4+ICsNCj4+ Pj4gK3N0YXRpYyB2b2lkIGFtZGdwdV91bmxvY2tfYWRldihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldikNCj4+Pj4gK3sNCj4+Pj4gwqDCoMKgwqDCoMKgwqAgLyp1bmxvY2sga2ZkICovDQo+Pj4+ IMKgwqDCoMKgwqDCoMKgIGFtZGdwdV9hbWRrZmRfcG9zdF9yZXNldChhZGV2KTsNCj4+Pj4gwqDC oMKgwqDCoMKgwqAgYW1kZ3B1X3ZmX2Vycm9yX3RyYW5zX2FsbChhZGV2KTsNCj4+Pj4gwqDCoMKg wqDCoMKgwqAgYWRldi0+aW5fZ3B1X3Jlc2V0ID0gMDsNCj4+Pj4gwqDCoMKgwqDCoMKgwqAgbXV0 ZXhfdW5sb2NrKCZhZGV2LT5sb2NrX3Jlc2V0KTsNCj4+Pj4gK30NCj4+Pj4gKw0KPj4+PiArDQo+ Pj4+ICsvKioNCj4+Pj4gKyAqIGFtZGdwdV9kZXZpY2VfZ3B1X3JlY292ZXIgLSByZXNldCB0aGUg YXNpYyBhbmQgcmVjb3ZlciBzY2hlZHVsZXINCj4+Pj4gKyAqDQo+Pj4+ICsgKiBAYWRldjogYW1k Z3B1IGRldmljZSBwb2ludGVyDQo+Pj4+ICsgKiBAam9iOiB3aGljaCBqb2IgdHJpZ2dlciBoYW5n DQo+Pj4+ICsgKg0KPj4+PiArICogQXR0ZW1wdCB0byByZXNldCB0aGUgR1BVIGlmIGl0IGhhcyBo dW5nIChhbGwgYXNpY3MpLg0KPj4+PiArICogQXR0ZW1wdCB0byBkbyBzb2Z0LXJlc2V0IG9yIGZ1 bGwtcmVzZXQgYW5kIHJlaW5pdGlhbGl6ZSBBc2ljDQo+Pj4+ICsgKiBSZXR1cm5zIDAgZm9yIHN1 Y2Nlc3Mgb3IgYW4gZXJyb3Igb24gZmFpbHVyZS4NCj4+Pj4gKyAqLw0KPj4+PiArDQo+Pj4+ICtp bnQgYW1kZ3B1X2RldmljZV9ncHVfcmVjb3ZlcihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwN Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV9q b2IgKmpvYikNCj4+Pj4gK3sNCj4+Pj4gK8KgwqDCoCBpbnQgcjsNCj4+Pj4gK8KgwqDCoCBzdHJ1 Y3QgYW1kZ3B1X2hpdmVfaW5mbyAqaGl2ZSA9IE5VTEw7DQo+Pj4+ICvCoMKgwqAgYm9vbCBuZWVk X2Z1bGxfcmVzZXQgPSBmYWxzZTsNCj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq dG1wX2FkZXYgPSBOVUxMOw0KPj4+PiArwqDCoMKgIHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlX2xp c3QsICpkZXZpY2VfbGlzdF9oYW5kbGUgPSBOVUxMOw0KPj4+PiArDQo+Pj4+ICvCoMKgwqAgSU5J VF9MSVNUX0hFQUQoJmRldmljZV9saXN0KTsNCj4+Pj4gKw0KPj4+PiArwqDCoMKgIGRldl9pbmZv KGFkZXYtPmRldiwgIkdQVSByZXNldCBiZWdpbiFcbiIpOw0KPj4+PiArDQo+Pj4+ICvCoMKgwqAg LyoNCj4+Pj4gK8KgwqDCoMKgICogSW4gY2FzZSBvZiBYR01JIGhpdmUgZGlzYWxsb3cgY29uY3Vy cmVudCByZXNldHMgdG8gYmUgDQo+Pj4+IHRyaWdnZXJlZA0KPj4+PiArwqDCoMKgwqAgKiBieSBk aWZmZXJlbnQgbm9kZXMuDQo+Pj4+ICvCoMKgwqDCoCAqLw0KPj4+PiArwqDCoMKgIGlmIChhZGV2 LT5nbWMueGdtaS5udW1fcGh5c2ljYWxfbm9kZXMgPiAxKQ0KPj4+PiArwqDCoMKgwqDCoMKgwqAg bXV0ZXhfbG9jaygmeGdtaV9tdXRleCk7DQo+Pj4+ICsNCj4+Pj4gK8KgwqDCoCAvKiBTdGFydCB3 aXRoIGFkZXYgcHJlIGFzaWMgcmVzZXQgZmlyc3QgZm9yIHNvZnQgcmVzZXQgY2hlY2suKi8NCj4+ Pj4gK8KgwqDCoCBhbWRncHVfbG9ja19hZGV2KGFkZXYpOw0KPj4+PiArwqDCoMKgIHIgPSBhbWRn cHVfZGV2aWNlX3ByZV9hc2ljX3Jlc2V0KGFkZXYsDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGpvYiwNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgJm5lZWRfZnVsbF9yZXNldCk7DQo+Pj4+ICvCoMKgwqAgaWYgKHIp IHsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIC8qVE9ETyBTaG91bGQgd2Ugc3RvcCA/Ki8NCj4+Pj4g K8KgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigiR1BVIHByZSBhc2ljIHJlc2V0IGZhaWxlZCB3aXRo IGVyciwgJWQgZm9yIGRybSANCj4+Pj4gZGV2LCAlcyAiLA0KPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgciwgYWRldi0+ZGRldi0+dW5pcXVlKTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKg IGFkZXYtPmFzaWNfcmVzZXRfcmVzID0gcjsNCj4+Pj4gK8KgwqDCoCB9DQo+Pj4+ICsNCj4+Pj4g K8KgwqDCoCAvKiBCdWlsZCBsaXN0IG9mIGRldmljZXMgdG8gcmVzZXQgKi8NCj4+Pj4gK8KgwqDC oCBpZsKgIChuZWVkX2Z1bGxfcmVzZXQgJiYgYWRldi0+Z21jLnhnbWkubnVtX3BoeXNpY2FsX25v ZGVzID4gMSkgew0KPj4+PiArwqDCoMKgwqDCoMKgwqAgaGl2ZSA9IGFtZGdwdV9nZXRfeGdtaV9o aXZlKGFkZXYpOw0KPj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFoaXZlKSB7DQo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHIgPSAtRU5PREVWOw0KPj4+PiArDQo+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGFtZGdwdV91bmxvY2tfYWRldihhZGV2KTsNCj4+Pj4gKw0KPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYWRldi0+Z21jLnhnbWkubnVtX3BoeXNpY2FsX25vZGVz ID4gMSkNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtdXRleF91bmxvY2so JnhnbWlfbXV0ZXgpOw0KPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcjsNCj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIH0NCj4+Pj4gKw0KPj4+PiArwqDCoMKgwqDCoMKgwqAgLyoNCj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBJbiBjYXNlIHdlIGFyZSBpbiBYR01JIGhpdmUgbW9kZSBk ZXZpY2UgcmVzZXQgaXMgZG9uZSANCj4+Pj4gZm9yIGFsbCB0aGUNCj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqAgKiBub2RlcyBpbiB0aGUgaGl2ZSB0byByZXRyYWluIGFsbCBYR01JIGxpbmtzIGFuZCBo ZW5jZSANCj4+Pj4gdGhlIHJlc2V0DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgICogc2VxdWVuY2Ug aXMgZXhlY3V0ZWQgaW4gbG9vcCBvbiBhbGwgbm9kZXMuDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg ICovDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZpY2VfbGlzdF9oYW5kbGUgPSBhbWRncHVfeGdt aV9nZXRfYWRldl9saXN0X2hhbmRsZShoaXZlKTsNCj4+Pj4gK8KgwqDCoCB9IGVsc2Ugew0KPj4+ PiArwqDCoMKgwqDCoMKgwqAgbGlzdF9hZGRfdGFpbCgmYWRldi0+Z21jLnhnbWkuaGVhZCwgJmRl dmljZV9saXN0KTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGRldmljZV9saXN0X2hhbmRsZSA9ICZk ZXZpY2VfbGlzdDsNCj4+Pj4gK8KgwqDCoCB9DQo+Pj4+ICsNCj4+Pj4gK3JldHJ5OsKgwqDCoCAv KiBSZXN0IG9mIGFkZXZzIHByZSBhc2ljIHJlc2V0IGZyb20gWEdNSSBoaXZlLiAqLw0KPj4+PiAr wqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnkodG1wX2FkZXYsIGRldmljZV9saXN0X2hhbmRsZSwg DQo+Pj4+IGdtYy54Z21pLmhlYWQpIHsNCj4+Pj4gKw0KPj4+PiArwqDCoMKgwqDCoMKgwqAgaWYg KHRtcF9hZGV2ID09IGFkZXYpDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVl Ow0KPj4+PiArDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkZXZfaW5mbyh0bXBfYWRldi0+ZGV2LCAi R1BVIHJlc2V0IGJlZ2luIGZvciBkcm0gZGV2IA0KPj4+PiAlcyFcbiIsIGFkZXYtPmRkZXYtPnVu aXF1ZSk7DQo+Pj4+ICsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGFtZGdwdV9sb2NrX2FkZXYodG1w X2FkZXYpOw0KPj4+PiArwqDCoMKgwqDCoMKgwqAgciA9IGFtZGdwdV9kZXZpY2VfcHJlX2FzaWNf cmVzZXQodG1wX2FkZXYsDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgTlVMTCwNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAmbmVlZF9mdWxsX3Jlc2V0KTsNCj4+Pj4gK8KgwqDCoMKgwqDC oMKgIC8qVE9ETyBTaG91bGQgd2Ugc3RvcCA/Ki8NCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChy KSB7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigiR1BVIHByZSBhc2lj IHJlc2V0IGZhaWxlZCB3aXRoIGVyciwgJWQgZm9yIA0KPj4+PiBkcm0gZGV2LCAlcyAiLA0KPj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByLCB0bXBfYWRldi0+ZGRldi0+ dW5pcXVlKTsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdG1wX2FkZXYtPmFzaWNfcmVz ZXRfcmVzID0gcjsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0NCj4+Pj4gK8KgwqDCoCB9DQo+Pj4+ ICsNCj4+Pj4gK8KgwqDCoCAvKiBBY3R1YWwgQVNJQyByZXNldHMgaWYgbmVlZGVkLiovDQo+Pj4+ ICvCoMKgwqAgLyogVE9ETyBJbXBsZW1lbnQgWEdNSSBoaXZlIHJlc2V0IGxvZ2ljIGZvciBTUklP ViAqLw0KPj4+PiArwqDCoMKgIGlmIChhbWRncHVfc3Jpb3ZfdmYoYWRldikpIHsNCj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIHIgPSBhbWRncHVfZGV2aWNlX3Jlc2V0X3NyaW92KGFkZXYsIGpvYiA/IGZh bHNlIDogdHJ1ZSk7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocikNCj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYWRldi0+YXNpY19yZXNldF9yZXMgPSByOw0KPj4+PiArwqDCoMKgIH0g ZWxzZSB7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBywqAgPSBhbWRncHVfZG9fYXNpY19yZXNldCho aXZlLCBkZXZpY2VfbGlzdF9oYW5kbGUsIA0KPj4+PiAmbmVlZF9mdWxsX3Jlc2V0KTsNCj4+Pj4g K8KgwqDCoMKgwqDCoMKgIGlmIChyICYmIHIgPT0gLUVBR0FJTikNCj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZ290byByZXRyeTsNCj4+Pj4gK8KgwqDCoCB9DQo+Pj4+ICsNCj4+Pj4gK8Kg wqDCoCAvKiBQb3N0IEFTSUMgcmVzZXQgZm9yIGFsbCBkZXZzIC4qLw0KPj4+PiArwqDCoMKgIGxp c3RfZm9yX2VhY2hfZW50cnkodG1wX2FkZXYsIGRldmljZV9saXN0X2hhbmRsZSwgDQo+Pj4+IGdt Yy54Z21pLmhlYWQpIHsNCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGFtZGdwdV9kZXZpY2VfcG9zdF9h c2ljX3Jlc2V0KHRtcF9hZGV2LCB0bXBfYWRldiA9PSBhZGV2ID8gDQo+Pj4+IGpvYiA6IE5VTEwp Ow0KPj4+PiArDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocikgew0KPj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAvKiBiYWQgbmV3cywgaG93IHRvIHRlbGwgaXQgdG8gdXNlcnNwYWNlID8g Ki8NCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2luZm8odG1wX2FkZXYtPmRldiwg IkdQVSByZXNldCglZCkgZmFpbGVkXG4iLCANCj4+Pj4gYXRvbWljX3JlYWQoJmFkZXYtPmdwdV9y ZXNldF9jb3VudGVyKSk7DQo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFtZGdwdV92Zl9l cnJvcl9wdXQodG1wX2FkZXYsIA0KPj4+PiBBTURHSU1fRVJST1JfVkZfR1BVX1JFU0VUX0ZBSUws IDAsIHIpOw0KPj4+PiArwqDCoMKgwqDCoMKgwqAgfSBlbHNlIHsNCj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZGV2X2luZm8odG1wX2FkZXYtPmRldiwgIkdQVSByZXNldCglZCkgc3VjY2Vl ZGVkIVxuIiwgDQo+Pj4+IGF0b21pY19yZWFkKCZhZGV2LT5ncHVfcmVzZXRfY291bnRlcikpOw0K Pj4+PiArwqDCoMKgwqDCoMKgwqAgfQ0KPj4+PiArDQo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBhbWRn cHVfdW5sb2NrX2FkZXYodG1wX2FkZXYpOw0KPj4+PiArwqDCoMKgIH0NCj4+Pj4gKw0KPj4+PiAr wqDCoMKgIGlmIChhZGV2LT5nbWMueGdtaS5udW1fcGh5c2ljYWxfbm9kZXMgPiAxKQ0KPj4+PiAr wqDCoMKgwqDCoMKgwqAgbXV0ZXhfdW5sb2NrKCZ4Z21pX211dGV4KTsNCj4+Pj4gKw0KPj4+PiAr wqDCoMKgIGlmIChyKQ0KPj4+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2luZm8oYWRldi0+ZGV2LCAi R1BVIHJlc2V0IGVuZCB3aXRoIHJldCA9ICVkXG4iLCByKTsNCj4+Pj4gwqDCoMKgwqDCoMKgwqAg cmV0dXJuIHI7DQo+Pj4+IMKgwqDCoCB9DQo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXw0KPj4gYW1kLWdmeCBtYWlsaW5nIGxpc3QNCj4+IGFtZC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+PiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2FtZC1nZngNCj4NCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9hbWQtZ2Z4Cg==