From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id D9D8E6E109 for ; Tue, 13 Aug 2019 11:22:03 +0000 (UTC) From: "Kempczynski, Zbigniew" Date: Tue, 13 Aug 2019 11:21:59 +0000 Message-ID: <27157f08b158a785bf741100b9c4e74fd36596cd.camel@intel.com> References: <20190724123256.14593-1-daniel.t.mrzyglod@intel.com> <20190724123256.14593-4-daniel.t.mrzyglod@intel.com> In-Reply-To: <20190724123256.14593-4-daniel.t.mrzyglod@intel.com> Content-Language: en-US Content-ID: <0E11DDB53AB568468D44A7D7D634BB0E@intel.com> MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t v6 3/3] lib/intel_mmio: add additional api for multiple devices List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: "Mrzyglod, Daniel T" , "igt-dev@lists.freedesktop.org" List-ID: T24gV2VkLCAyMDE5LTA3LTI0IGF0IDE0OjMyICswMjAwLCBEYW5pZWwgTXJ6eWdsb2Qgd3JvdGU6 DQo+IHRoaXMgcGF0Y2ggZXh0ZW5kIGludGVsX21taW8gbGlicmFyeSBieSBuZXcgc3RydWN0dXJl IHRoYXQgY2FuIGtlZXANCj4gbG9jYWwgaWd0X21taW8gcG9pbnRlci4NCj4gVGhlIHJlYXNvbiB0 aGF0IHdlIGV4dGVuZCBmdW5jdGlvbmFsaXR5IGlzIHRoZSBpZGVhIHRvIHN1cHBvcnQgbXVsdGlw bGUNCj4gZGV2aWNlcyBhdCBvbmNlLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogRGFuaWVsIE1yenln bG9kIDxkYW5pZWwudC5tcnp5Z2xvZEBpbnRlbC5jb20+DQo+IENjOiBaYmlnbmlldyBLZW1wY3p5 xYRza2kgPHpiaWduaWV3LmtlbXBjenluc2tpQGludGVsLmNvbT4NCj4gLS0tDQo+ICBiZW5jaG1h cmtzL2dlbV9sYXRlbmN5LmMgICAgICB8ICAgMyArLQ0KPiAgYmVuY2htYXJrcy9nZW1fd3NpbS5j ICAgICAgICAgfCAgIDMgKy0NCj4gIGxpYi9pbnRlbF9pby5oICAgICAgICAgICAgICAgIHwgIDgy ICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0NCj4gIGxpYi9pbnRlbF9pb3NmLmMgICAgICAgICAg ICAgIHwgIDc0ICsrKysrKysrKysrKystLS0tLS0tLS0tDQo+ICBsaWIvaW50ZWxfbW1pby5jICAg ICAgICAgICAgICB8IDExMCArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tDQo+ICB0 ZXN0cy9pOTE1L2dlbV9leGVjX2xhdGVuY3kuYyB8ICAgNCArLQ0KPiAgdGVzdHMvaTkxNS9nZW1f ZXhlY19wYXJzZS5jICAgfCAgMTMgKystLQ0KPiAgdGVzdHMvaTkxNS9nZW1fd29ya2Fyb3VuZHMu YyAgfCAgIDMgKy0NCj4gIHRlc3RzL2k5MTUvaTkxNV9wbV9scHNwLmMgICAgIHwgICA2ICstDQo+ ICB0b29scy9pbnRlbF9hdWRpb19kdW1wLmMgICAgICB8ICAgNiArLQ0KPiAgdG9vbHMvaW50ZWxf YmFja2xpZ2h0LmMgICAgICAgfCAgIDQgKy0NCj4gIHRvb2xzL2ludGVsX2Rpc3BsYXlfcG9sbGVy LmMgIHwgICA1ICstDQo+ICB0b29scy9pbnRlbF9mb3JjZXdha2VkLmMgICAgICB8ICAxNSArKy0t LQ0KPiAgdG9vbHMvaW50ZWxfZ3B1X3RpbWUuYyAgICAgICAgfCAgIDMgKy0NCj4gIHRvb2xzL2lu dGVsX2luZm9mcmFtZXMuYyAgICAgIHwgICA1ICstDQo+ICB0b29scy9pbnRlbF9sM19wYXJpdHku YyAgICAgICB8ICAxMSArKy0tDQo+ICB0b29scy9pbnRlbF9saWQuYyAgICAgICAgICAgICB8ICAg MyArLQ0KPiAgdG9vbHMvaW50ZWxfcGFuZWxfZml0dGVyLmMgICAgfCAgIDUgKy0NCj4gIHRvb2xz L2ludGVsX3BlcmZfY291bnRlcnMuYyAgIHwgIDEwICsrLS0NCj4gIHRvb2xzL2ludGVsX3JlZy5j ICAgICAgICAgICAgIHwgIDIzICsrKy0tLS0NCj4gIHRvb2xzL2ludGVsX3JlZ19jaGVja2VyLmMg ICAgIHwgICAzICstDQo+ICB0b29scy9pbnRlbF93YXRlcm1hcmsuYyAgICAgICB8ICA0MiArKysr KysrLS0tLS0tDQo+ICAyMiBmaWxlcyBjaGFuZ2VkLCAyNTAgaW5zZXJ0aW9ucygrKSwgMTgzIGRl bGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2JlbmNobWFya3MvZ2VtX2xhdGVuY3kuYyBi L2JlbmNobWFya3MvZ2VtX2xhdGVuY3kuYw0KPiBpbmRleCBjM2ZjNGJmMC4uNTY5ZmFhNTggMTAw NjQ0DQo+IC0tLSBhL2JlbmNobWFya3MvZ2VtX2xhdGVuY3kuYw0KPiArKysgYi9iZW5jaG1hcmtz L2dlbV9sYXRlbmN5LmMNCj4gQEAgLTU1LDYgKzU1LDcgQEANCj4gIHN0YXRpYyBpbnQgZG9uZTsN Cj4gIHN0YXRpYyBpbnQgZmQ7DQo+ICBzdGF0aWMgdm9sYXRpbGUgdWludDMyX3QgKnRpbWVzdGFt cF9yZWc7DQo+ICtzdGF0aWMgc3RydWN0IG1taW9fZGF0YSBtbWlvX2RhdGE7DQo+ICANCj4gICNk ZWZpbmUgUkVHKHgpICh2b2xhdGlsZSB1aW50MzJfdCAqKSgodm9sYXRpbGUgY2hhciAqKWlndF9n bG9iYWxfbW1pbyArIHgpDQo+ICAjZGVmaW5lIFJFR19PRkZTRVQoeCkgKCh2b2xhdGlsZSBjaGFy ICopKHgpIC0gKHZvbGF0aWxlIGNoYXINCj4gKilpZ3RfZ2xvYmFsX21taW8pDQo+IEBAIC00NTYs NyArNDU3LDcgQEAgc3RhdGljIGludCBydW4oaW50IHNlY29uZHMsDQo+ICAJaWYgKGdlbiA8IDYp DQo+ICAJCXJldHVybiBJR1RfRVhJVF9TS0lQOyAvKiBOZWVkcyBCQ1MgdGltZXN0YW1wICovDQo+ ICANCj4gLQlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfaW5pdChpbnRlbF9nZXRfcGNpX2RldmljZSgp LCBmYWxzZSwgZmQpOw0KPiArCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19pbml0KCZtbWlvX2RhdGEs IGludGVsX2dldF9wY2lfZGV2aWNlKCksIGZhbHNlLA0KPiBmZCk7DQo+ICANCj4gIAlpZiAoZ2Vu ID09IDYpDQo+ICAJCXRpbWVzdGFtcF9yZWcgPSBSRUcoUkNTX1RJTUVTVEFNUCk7DQo+IGRpZmYg LS1naXQgYS9iZW5jaG1hcmtzL2dlbV93c2ltLmMgYi9iZW5jaG1hcmtzL2dlbV93c2ltLmMNCj4g aW5kZXggYTc2ZmRiZmUuLjNjNzQwMWRmIDEwMDY0NA0KPiAtLS0gYS9iZW5jaG1hcmtzL2dlbV93 c2ltLmMNCj4gKysrIGIvYmVuY2htYXJrcy9nZW1fd3NpbS5jDQo+IEBAIC0yMzgsNiArMjM4LDcg QEAgc3RydWN0IHdvcmtsb2FkDQo+ICAJfSBidXN5X2JhbGFuY2VyOw0KPiAgfTsNCj4gIA0KPiAr c3RydWN0IG1taW9fZGF0YSBtbWlvX2RhdGE7DQo+ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50 IG5vcF9jYWxpYnJhdGlvbl91cyA9IDEwMDA7DQo+ICBzdGF0aWMgdW5zaWduZWQgbG9uZyBub3Bf Y2FsaWJyYXRpb247DQo+ICANCj4gQEAgLTMwNzEsNyArMzA3Miw3IEBAIHN0YXRpYyB2b2lkIGlu aXRfY2xvY2tzKHZvaWQpDQo+ICAJdWludDMyX3QgcmNzX3N0YXJ0LCByY3NfZW5kOw0KPiAgCWRv dWJsZSBvdmVyaGVhZCwgdDsNCj4gIA0KPiAtCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19pbml0KGlu dGVsX2dldF9wY2lfZGV2aWNlKCksIGZhbHNlLCBmZCk7DQo+ICsJaW50ZWxfcmVnaXN0ZXJfYWNj ZXNzX2luaXQoJm1taW9fZGF0YSwgaW50ZWxfZ2V0X3BjaV9kZXZpY2UoKSwgZmFsc2UsDQo+IGZk KTsNCj4gIA0KPiAgCWlmICh2ZXJib3NlIDw9IDEpDQo+ICAJCXJldHVybjsNCj4gZGlmZiAtLWdp dCBhL2xpYi9pbnRlbF9pby5oIGIvbGliL2ludGVsX2lvLmgNCj4gaW5kZXggOTljYjE4MjkuLjM3 MGE5YWIxIDEwMDY0NA0KPiAtLS0gYS9saWIvaW50ZWxfaW8uaA0KPiArKysgYi9saWIvaW50ZWxf aW8uaA0KPiBAQCAtMzAsMTcgKzMwLDQzIEBADQo+ICANCj4gICNpbmNsdWRlIDxzdGRpbnQuaD4N Cj4gICNpbmNsdWRlIDxwY2lhY2Nlc3MuaD4NCj4gKyNpbmNsdWRlIDxzdGRib29sLmg+DQo+ICAN Cj4gLS8qIHJlZ2lzdGVyIGFjY2VzcyBoZWxwZXJzIGZyb20gaW50ZWxfbW1pby5jICovDQo+ICBl eHRlcm4gdm9pZCAqaWd0X2dsb2JhbF9tbWlvOw0KPiAtdm9pZCBpbnRlbF9tbWlvX3VzZV9wY2lf YmFyKHN0cnVjdCBwY2lfZGV2aWNlICpwY2lfZGV2KTsNCj4gLXZvaWQgaW50ZWxfbW1pb191c2Vf ZHVtcF9maWxlKGNoYXIgKmZpbGUpOw0KPiAgDQo+IC1pbnQgaW50ZWxfcmVnaXN0ZXJfYWNjZXNz X2luaXQoc3RydWN0IHBjaV9kZXZpY2UgKnBjaV9kZXYsIGludCBzYWZlLCBpbnQNCj4gZmQpOw0K PiAtdm9pZCBpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfZmluaSh2b2lkKTsNCj4gLXVpbnQzMl90IGlu dGVsX3JlZ2lzdGVyX3JlYWQodWludDMyX3QgcmVnKTsNCj4gLXZvaWQgaW50ZWxfcmVnaXN0ZXJf d3JpdGUodWludDMyX3QgcmVnLCB1aW50MzJfdCB2YWwpOw0KPiAtaW50IGludGVsX3JlZ2lzdGVy X2FjY2Vzc19uZWVkc19mYWtld2FrZSh2b2lkKTsNCj4gKy8qIHJlZ2lzdGVyIGFjY2VzcyBoZWxw ZXJzIGZyb20gaW50ZWxfbW1pby5jICovDQo+ICtzdHJ1Y3QgaW50ZWxfcmVnaXN0ZXJfcmFuZ2Ug ew0KPiArCXVpbnQzMl90IGJhc2U7DQo+ICsJdWludDMyX3Qgc2l6ZTsNCj4gKwl1aW50MzJfdCBm bGFnczsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBpbnRlbF9yZWdpc3Rlcl9tYXAgew0KPiArCXN0 cnVjdCBpbnRlbF9yZWdpc3Rlcl9yYW5nZSAqbWFwOw0KPiArCXVpbnQzMl90IHRvcDsNCj4gKwl1 aW50MzJfdCBhbGlnbm1lbnRfbWFzazsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBtbWlvX2RhdGEg ew0KPiArCWludCBpbml0ZWQ7DQo+ICsJYm9vbCBzYWZlOw0KPiArCXVpbnQzMl90IGk5MTVfZGV2 aWQ7DQo+ICsJc3RydWN0IGludGVsX3JlZ2lzdGVyX21hcCBtYXA7DQo+ICsJaW50IGtleTsNCj4g Kwl2b2lkICppZ3RfbW1pbzsNCj4gK307DQo+ICsNCj4gK3ZvaWQgaW50ZWxfbW1pb191c2VfcGNp X2JhcihzdHJ1Y3QgbW1pb19kYXRhICptbWlvX2RhdGEsDQo+ICsJCQkgICAgc3RydWN0IHBjaV9k ZXZpY2UgKnBjaV9kZXYpOw0KPiArdm9pZCBpbnRlbF9tbWlvX3VzZV9kdW1wX2ZpbGUoc3RydWN0 IG1taW9fZGF0YSAqbW1pb19kYXRhLCBjaGFyICpmaWxlKTsNCj4gKw0KPiAraW50IGludGVsX3Jl Z2lzdGVyX2FjY2Vzc19pbml0KHN0cnVjdCBtbWlvX2RhdGEgKm1taW9fZGF0YSwNCj4gKwkJCSAg ICAgICBzdHJ1Y3QgcGNpX2RldmljZSAqcGNpX2RldiwgaW50IHNhZmUsIGludCBmZCk7DQo+ICt2 b2lkIGludGVsX3JlZ2lzdGVyX2FjY2Vzc19maW5pKHN0cnVjdCBtbWlvX2RhdGEgKm1taW9fZGF0 YSk7DQo+ICt1aW50MzJfdCBpbnRlbF9yZWdpc3Rlcl9yZWFkKHN0cnVjdCBtbWlvX2RhdGEgKm1t aW9fZGF0YSwgdWludDMyX3QgcmVnKTsNCj4gK3ZvaWQgaW50ZWxfcmVnaXN0ZXJfd3JpdGUoc3Ry dWN0IG1taW9fZGF0YSAqbW1pb19kYXRhLCB1aW50MzJfdCByZWcsDQo+ICsJCQkgIHVpbnQzMl90 IHZhbCk7DQo+ICtpbnQgaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX25lZWRzX2Zha2V3YWtlKHN0cnVj dCBtbWlvX2RhdGEgKm1taW9fZGF0YSk7DQo+ICANCj4gIHVpbnQzMl90IElOUkVHKHVpbnQzMl90 IHJlZyk7DQo+ICB1aW50MTZfdCBJTlJFRzE2KHVpbnQzMl90IHJlZyk7DQo+IEBAIC01NywxNyAr ODMsMjQgQEAgdm9pZCBPVVRSRUcxNl9ERVYodm9pZCAqaWd0X21taW8sIHVpbnQzMl90IHJlZywg dWludDE2X3QNCj4gdmFsKTsNCj4gIHZvaWQgT1VUUkVHOF9ERVYodm9pZCAqaWd0X21taW8sIHVp bnQzMl90IHJlZywgdWludDhfdCB2YWwpOw0KPiAgDQo+ICAvKiBzaWRlYmFuZCBhY2Nlc3MgZnVu Y3Rpb25zIGZyb20gaW50ZWxfaW9zZi5jICovDQo+IC11aW50MzJfdCBpbnRlbF9kcGlvX3JlZ19y ZWFkKHVpbnQzMl90IHJlZywgaW50IHBoeSk7DQo+IC12b2lkIGludGVsX2RwaW9fcmVnX3dyaXRl KHVpbnQzMl90IHJlZywgdWludDMyX3QgdmFsLCBpbnQgcGh5KTsNCj4gLXVpbnQzMl90IGludGVs X2ZsaXNkc2lfcmVnX3JlYWQodWludDMyX3QgcmVnKTsNCj4gLXZvaWQgaW50ZWxfZmxpc2RzaV9y ZWdfd3JpdGUodWludDMyX3QgcmVnLCB1aW50MzJfdCB2YWwpOw0KPiAtdWludDMyX3QgaW50ZWxf aW9zZl9zYl9yZWFkKHVpbnQzMl90IHBvcnQsIHVpbnQzMl90IHJlZyk7DQo+IC12b2lkIGludGVs X2lvc2Zfc2Jfd3JpdGUodWludDMyX3QgcG9ydCwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2YWwp Ow0KPiAtDQo+IC1pbnQgaW50ZWxfcHVuaXRfcmVhZCh1aW50MzJfdCBhZGRyLCB1aW50MzJfdCAq dmFsKTsNCj4gLWludCBpbnRlbF9wdW5pdF93cml0ZSh1aW50MzJfdCBhZGRyLCB1aW50MzJfdCB2 YWwpOw0KPiAtaW50IGludGVsX25jX3JlYWQodWludDMyX3QgYWRkciwgdWludDMyX3QgKnZhbCk7 DQo+IC1pbnQgaW50ZWxfbmNfd3JpdGUodWludDMyX3QgYWRkciwgdWludDMyX3QgdmFsKTsNCj4g K3VpbnQzMl90IGludGVsX2RwaW9fcmVnX3JlYWQoc3RydWN0IG1taW9fZGF0YSAqbW1pb19kYXRh LCB1aW50MzJfdCByZWcsDQo+ICsJCQkgICAgIGludCBwaHkpOw0KPiArdm9pZCBpbnRlbF9kcGlv X3JlZ193cml0ZShzdHJ1Y3QgbW1pb19kYXRhICptbWlvX2RhdGEsIHVpbnQzMl90IHJlZywNCj4g KwkJCSAgdWludDMyX3QgdmFsLCBpbnQgcGh5KTsNCj4gK3VpbnQzMl90IGludGVsX2ZsaXNkc2lf cmVnX3JlYWQoc3RydWN0IG1taW9fZGF0YSAqbW1pb19kYXRhLCB1aW50MzJfdCByZWcpOw0KPiAr dm9pZCBpbnRlbF9mbGlzZHNpX3JlZ193cml0ZShzdHJ1Y3QgbW1pb19kYXRhICptbWlvX2RhdGEs IHVpbnQzMl90IHJlZywNCj4gKwkJCSAgICAgdWludDMyX3QgdmFsKTsNCj4gK3VpbnQzMl90IGlu dGVsX2lvc2Zfc2JfcmVhZChzdHJ1Y3QgbW1pb19kYXRhICptbWlvX2RhdGEsIHVpbnQzMl90IHBv cnQsDQo+ICsJCQkgICAgdWludDMyX3QgcmVnKTsNCj4gK3ZvaWQgaW50ZWxfaW9zZl9zYl93cml0 ZShzdHJ1Y3QgbW1pb19kYXRhICptbWlvX2RhdGEsIHVpbnQzMl90IHBvcnQsDQo+ICsJCQkgdWlu dDMyX3QgcmVnLCB1aW50MzJfdCB2YWwpOw0KPiArDQo+ICtpbnQgaW50ZWxfcHVuaXRfcmVhZChz dHJ1Y3QgbW1pb19kYXRhICptbWlvX2RhdGEsIHVpbnQzMl90IGFkZHIsDQo+ICsJCSAgICAgdWlu dDMyX3QgKnZhbCk7DQo+ICtpbnQgaW50ZWxfcHVuaXRfd3JpdGUoc3RydWN0IG1taW9fZGF0YSAq bW1pb19kYXRhLCB1aW50MzJfdCBhZGRyLA0KPiArCQkgICAgICB1aW50MzJfdCB2YWwpOw0KPiAr aW50IGludGVsX25jX3JlYWQoc3RydWN0IG1taW9fZGF0YSAqbW1pb19kYXRhLCB1aW50MzJfdCBh ZGRyLCB1aW50MzJfdA0KPiAqdmFsKTsNCj4gK2ludCBpbnRlbF9uY193cml0ZShzdHJ1Y3QgbW1p b19kYXRhICptbWlvX2RhdGEsIHVpbnQzMl90IGFkZHIsIHVpbnQzMl90DQo+IHZhbCk7DQo+ICAN Cj4gIC8qIHJlZ2lzdGVyIG1hcHMgZnJvbSBpbnRlbF9yZWdfbWFwLmMgKi8NCj4gICNpZm5kZWYg X19HVEtfRE9DX0lHTk9SRV9fDQo+IEBAIC03OCwxNyArMTExLDYgQEAgaW50IGludGVsX25jX3dy aXRlKHVpbnQzMl90IGFkZHIsIHVpbnQzMl90IHZhbCk7DQo+ICAjZGVmaW5lIElOVEVMX1JBTkdF X1JXCQkoSU5URUxfUkFOR0VfUkVBRCB8IElOVEVMX1JBTkdFX1dSSVRFKQ0KPiAgI2RlZmluZSBJ TlRFTF9SQU5HRV9FTkQJCSgxPDwzMSkNCj4gIA0KPiAtc3RydWN0IGludGVsX3JlZ2lzdGVyX3Jh bmdlIHsNCj4gLQl1aW50MzJfdCBiYXNlOw0KPiAtCXVpbnQzMl90IHNpemU7DQo+IC0JdWludDMy X3QgZmxhZ3M7DQo+IC19Ow0KPiAtDQo+IC1zdHJ1Y3QgaW50ZWxfcmVnaXN0ZXJfbWFwIHsNCj4g LQlzdHJ1Y3QgaW50ZWxfcmVnaXN0ZXJfcmFuZ2UgKm1hcDsNCj4gLQl1aW50MzJfdCB0b3A7DQo+ IC0JdWludDMyX3QgYWxpZ25tZW50X21hc2s7DQo+IC19Ow0KPiAgc3RydWN0IGludGVsX3JlZ2lz dGVyX21hcCBpbnRlbF9nZXRfcmVnaXN0ZXJfbWFwKHVpbnQzMl90IGRldmlkKTsNCj4gIHN0cnVj dCBpbnRlbF9yZWdpc3Rlcl9yYW5nZSAqaW50ZWxfZ2V0X3JlZ2lzdGVyX3JhbmdlKHN0cnVjdA0K PiBpbnRlbF9yZWdpc3Rlcl9tYXAgbWFwLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IG1vZGUp Ow0KPiAgI2VuZGlmIC8qIF9fR1RLX0RPQ19JR05PUkVfXyAqLw0KPiBkaWZmIC0tZ2l0IGEvbGli L2ludGVsX2lvc2YuYyBiL2xpYi9pbnRlbF9pb3NmLmMNCj4gaW5kZXggM2I1YTEzNzAuLmU3YTg5 OTUzIDEwMDY0NA0KPiAtLS0gYS9saWIvaW50ZWxfaW9zZi5jDQo+ICsrKyBiL2xpYi9pbnRlbF9p b3NmLmMNCj4gQEAgLTE5LDggKzE5LDggQEANCj4gIC8qIFByaXZhdGUgcmVnaXN0ZXIgd3JpdGUs IGRvdWJsZS13b3JkIGFkZHJlc3NpbmcsIG5vbi1wb3N0ZWQgKi8NCj4gICNkZWZpbmUgU0JfQ1JX UkRBX05QICAgMHgwNw0KPiAgDQo+IC1zdGF0aWMgaW50IHZsdl9zaWRlYmFuZF9ydyh1aW50MzJf dCBwb3J0LCB1aW50OF90IG9wY29kZSwgdWludDMyX3QgYWRkciwNCj4gLQkJCSAgIHVpbnQzMl90 ICp2YWwpDQo+ICtzdGF0aWMgaW50IHZsdl9zaWRlYmFuZF9ydyhzdHJ1Y3QgbW1pb19kYXRhICpt bWlvX2RhdGEsIHVpbnQzMl90IHBvcnQsDQo+ICsJCQkgICB1aW50OF90IG9wY29kZSwgdWludDMy X3QgYWRkciwgdWludDMyX3QgKnZhbCkNCj4gIHsNCj4gIAlpbnQgdGltZW91dCA9IDA7DQo+ICAJ dWludDMyX3QgY21kLCBkZXZmbiwgYmUsIGJhcjsNCj4gQEAgLTM0LDIyICszNCwyNCBAQCBzdGF0 aWMgaW50IHZsdl9zaWRlYmFuZF9ydyh1aW50MzJfdCBwb3J0LCB1aW50OF90DQo+IG9wY29kZSwg dWludDMyX3QgYWRkciwNCj4gIAkJKHBvcnQgPDwgSU9TRl9QT1JUX1NISUZUKSB8IChiZSA8PCBJ T1NGX0JZVEVfRU5BQkxFU19TSElGVCkgfA0KPiAgCQkoYmFyIDw8IElPU0ZfQkFSX1NISUZUKTsN Cj4gIA0KPiAtCWlmIChpbnRlbF9yZWdpc3Rlcl9yZWFkKFZMVl9JT1NGX0RPT1JCRUxMX1JFUSkg JiBJT1NGX1NCX0JVU1kpIHsNCj4gKwlpZiAoaW50ZWxfcmVnaXN0ZXJfcmVhZChtbWlvX2RhdGEs IFZMVl9JT1NGX0RPT1JCRUxMX1JFUSkgJg0KPiArCSAgICBJT1NGX1NCX0JVU1kpIHsNCj4gIAkJ aWd0X3dhcm4oIndhcm5pbmc6IHBjb2RlICglcykgbWFpbGJveCBhY2Nlc3MgZmFpbGVkXG4iLA0K PiBpc19yZWFkID8gInJlYWQiIDogIndyaXRlIik7DQo+ICAJCXJldHVybiAtRUFHQUlOOw0KPiAg CX0NCj4gIA0KPiAtCWludGVsX3JlZ2lzdGVyX3dyaXRlKFZMVl9JT1NGX0FERFIsIGFkZHIpOw0K PiArCWludGVsX3JlZ2lzdGVyX3dyaXRlKG1taW9fZGF0YSwgVkxWX0lPU0ZfQUREUiwgYWRkcik7 DQo+ICAJaWYgKCFpc19yZWFkKQ0KPiAtCQlpbnRlbF9yZWdpc3Rlcl93cml0ZShWTFZfSU9TRl9E QVRBLCAqdmFsKTsNCj4gKwkJaW50ZWxfcmVnaXN0ZXJfd3JpdGUobW1pb19kYXRhLCBWTFZfSU9T Rl9EQVRBLCAqdmFsKTsNCj4gIA0KPiAtCWludGVsX3JlZ2lzdGVyX3dyaXRlKFZMVl9JT1NGX0RP T1JCRUxMX1JFUSwgY21kKTsNCj4gKwlpbnRlbF9yZWdpc3Rlcl93cml0ZShtbWlvX2RhdGEsIFZM Vl9JT1NGX0RPT1JCRUxMX1JFUSwgY21kKTsNCj4gIA0KPiAgCWRvIHsNCj4gIAkJdXNsZWVwKDEp Ow0KPiAgCQl0aW1lb3V0Kys7DQo+IC0JfSB3aGlsZSAoaW50ZWxfcmVnaXN0ZXJfcmVhZChWTFZf SU9TRl9ET09SQkVMTF9SRVEpICYgSU9TRl9TQl9CVVNZICYmDQo+IC0JCSB0aW1lb3V0IDwgVElN RU9VVF9VUyk7DQo+ICsJfSB3aGlsZSAoaW50ZWxfcmVnaXN0ZXJfcmVhZChtbWlvX2RhdGEtPmln dF9tbWlvLA0KPiArCQkJCSAgICAgVkxWX0lPU0ZfRE9PUkJFTExfUkVRKSAmDQo+ICsJCUlPU0Zf U0JfQlVTWSAmJiB0aW1lb3V0IDwgVElNRU9VVF9VUyk7DQo+ICANCj4gIAlpZiAodGltZW91dCA+ PSBUSU1FT1VUX1VTKSB7DQo+ICAJCWlndF93YXJuKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIHBjb2Rl ICVzICglZCkgdG8gZmluaXNoXG4iLA0KPiBpc19yZWFkID8gInJlYWQiIDogIndyaXRlIiwgYWRk cik7DQo+IEBAIC01Nyw4ICs1OSw4IEBAIHN0YXRpYyBpbnQgdmx2X3NpZGViYW5kX3J3KHVpbnQz Ml90IHBvcnQsIHVpbnQ4X3Qgb3Bjb2RlLA0KPiB1aW50MzJfdCBhZGRyLA0KPiAgCX0NCj4gIA0K PiAgCWlmIChpc19yZWFkKQ0KPiAtCQkqdmFsID0gaW50ZWxfcmVnaXN0ZXJfcmVhZChWTFZfSU9T Rl9EQVRBKTsNCj4gLQlpbnRlbF9yZWdpc3Rlcl93cml0ZShWTFZfSU9TRl9EQVRBLCAwKTsNCj4g KwkJKnZhbCA9IGludGVsX3JlZ2lzdGVyX3JlYWQobW1pb19kYXRhLT5pZ3RfbW1pbywNCj4gVkxW X0lPU0ZfREFUQSk7DQo+ICsJaW50ZWxfcmVnaXN0ZXJfd3JpdGUobW1pb19kYXRhLT5pZ3RfbW1p bywgVkxWX0lPU0ZfREFUQSwgMCk7DQo+ICANCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4gQEAgLTcz LDkgKzc1LDEwIEBAIHN0YXRpYyBpbnQgdmx2X3NpZGViYW5kX3J3KHVpbnQzMl90IHBvcnQsIHVp bnQ4X3Qgb3Bjb2RlLA0KPiB1aW50MzJfdCBhZGRyLA0KPiAgICogUmV0dXJuczoNCj4gICAqIDAg d2hlbiB0aGUgcmVnaXN0ZXIgYWNjZXNzIHN1Y2NlZWRlZCwgbmVnYXRpdmUgZXJybm8gY29kZSBv biBmYWlsdXJlLg0KPiAgICovDQo+IC1pbnQgaW50ZWxfcHVuaXRfcmVhZCh1aW50MzJfdCBhZGRy LCB1aW50MzJfdCAqdmFsKQ0KPiAraW50IGludGVsX3B1bml0X3JlYWQoc3RydWN0IG1taW9fZGF0 YSAqbW1pb19kYXRhLCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdA0KPiAqdmFsKQ0KPiAgew0KPiAt CXJldHVybiB2bHZfc2lkZWJhbmRfcncoSU9TRl9QT1JUX1BVTklULCBTQl9DUlJEREFfTlAsIGFk ZHIsIHZhbCk7DQo+ICsJcmV0dXJuIHZsdl9zaWRlYmFuZF9ydyhtbWlvX2RhdGEsIElPU0ZfUE9S VF9QVU5JVCwgU0JfQ1JSRERBX05QLCBhZGRyLA0KPiArCQkJICAgICAgIHZhbCk7DQo+ICB9DQo+ ICANCj4gIC8qKg0KPiBAQCAtODgsOSArOTEsMTAgQEAgaW50IGludGVsX3B1bml0X3JlYWQodWlu dDMyX3QgYWRkciwgdWludDMyX3QgKnZhbCkNCj4gICAqIFJldHVybnM6DQo+ICAgKiAwIHdoZW4g dGhlIHJlZ2lzdGVyIGFjY2VzcyBzdWNjZWVkZWQsIG5lZ2F0aXZlIGVycm5vIGNvZGUgb24gZmFp bHVyZS4NCj4gICAqLw0KPiAtaW50IGludGVsX3B1bml0X3dyaXRlKHVpbnQzMl90IGFkZHIsIHVp bnQzMl90IHZhbCkNCj4gK2ludCBpbnRlbF9wdW5pdF93cml0ZShzdHJ1Y3QgbW1pb19kYXRhICpt bWlvX2RhdGEsIHVpbnQzMl90IGFkZHIsIHVpbnQzMl90DQo+IHZhbCkNCj4gIHsNCj4gLQlyZXR1 cm4gdmx2X3NpZGViYW5kX3J3KElPU0ZfUE9SVF9QVU5JVCwgU0JfQ1JXUkRBX05QLCBhZGRyLCAm dmFsKTsNCj4gKwlyZXR1cm4gdmx2X3NpZGViYW5kX3J3KG1taW9fZGF0YSwgSU9TRl9QT1JUX1BV TklULCBTQl9DUldSREFfTlAsIGFkZHIsDQo+ICsJCQkgICAgICAgJnZhbCk7DQo+ICB9DQo+ICAN Cj4gIC8qKg0KPiBAQCAtMTAzLDkgKzEwNywxMCBAQCBpbnQgaW50ZWxfcHVuaXRfd3JpdGUodWlu dDMyX3QgYWRkciwgdWludDMyX3QgdmFsKQ0KPiAgICogUmV0dXJuczoNCj4gICAqIDAgd2hlbiB0 aGUgcmVnaXN0ZXIgYWNjZXNzIHN1Y2NlZWRlZCwgbmVnYXRpdmUgZXJybm8gY29kZSBvbiBmYWls dXJlLg0KPiAgICovDQo+IC1pbnQgaW50ZWxfbmNfcmVhZCh1aW50MzJfdCBhZGRyLCB1aW50MzJf dCAqdmFsKQ0KPiAraW50IGludGVsX25jX3JlYWQoc3RydWN0IG1taW9fZGF0YSAqbW1pb19kYXRh LCB1aW50MzJfdCBhZGRyLCB1aW50MzJfdA0KPiAqdmFsKQ0KPiAgew0KPiAtCXJldHVybiB2bHZf c2lkZWJhbmRfcncoSU9TRl9QT1JUX05DLCBTQl9DUlJEREFfTlAsIGFkZHIsIHZhbCk7DQo+ICsJ cmV0dXJuIHZsdl9zaWRlYmFuZF9ydyhtbWlvX2RhdGEsIElPU0ZfUE9SVF9OQywgU0JfQ1JSRERB X05QLCBhZGRyLA0KPiArCQkJICAgICAgIHZhbCk7DQo+ICB9DQo+ICANCj4gIC8qKg0KPiBAQCAt MTE4LDkgKzEyMywxMCBAQCBpbnQgaW50ZWxfbmNfcmVhZCh1aW50MzJfdCBhZGRyLCB1aW50MzJf dCAqdmFsKQ0KPiAgICogUmV0dXJuczoNCj4gICAqIDAgd2hlbiB0aGUgcmVnaXN0ZXIgYWNjZXNz IHN1Y2NlZWRlZCwgbmVnYXRpdmUgZXJybm8gY29kZSBvbiBmYWlsdXJlLg0KPiAgICovDQo+IC1p bnQgaW50ZWxfbmNfd3JpdGUodWludDMyX3QgYWRkciwgdWludDMyX3QgdmFsKQ0KPiAraW50IGlu dGVsX25jX3dyaXRlKHN0cnVjdCBtbWlvX2RhdGEgKm1taW9fZGF0YSwgdWludDMyX3QgYWRkciwg dWludDMyX3QNCj4gdmFsKQ0KPiAgew0KPiAtCXJldHVybiB2bHZfc2lkZWJhbmRfcncoSU9TRl9Q T1JUX05DLCBTQl9DUldSREFfTlAsIGFkZHIsICZ2YWwpOw0KPiArCXJldHVybiB2bHZfc2lkZWJh bmRfcncobW1pb19kYXRhLCBJT1NGX1BPUlRfTkMsIFNCX0NSV1JEQV9OUCwgYWRkciwNCj4gKwkJ CSAgICAgICAmdmFsKTsNCj4gIH0NCj4gIA0KPiAgLyoqDQo+IEBAIC0xMzMsMTQgKzEzOSwxNiBA QCBpbnQgaW50ZWxfbmNfd3JpdGUodWludDMyX3QgYWRkciwgdWludDMyX3QgdmFsKQ0KPiAgICog UmV0dXJuczoNCj4gICAqIFRoZSB2YWx1ZSByZWFkIGZyb20gdGhlIHJlZ2lzdGVyLg0KPiAgICov DQo+IC11aW50MzJfdCBpbnRlbF9kcGlvX3JlZ19yZWFkKHVpbnQzMl90IHJlZywgaW50IHBoeSkN Cj4gK3VpbnQzMl90IGludGVsX2RwaW9fcmVnX3JlYWQoc3RydWN0IG1taW9fZGF0YSAqbW1pb19k YXRhLCB1aW50MzJfdCByZWcsIGludA0KPiBwaHkpDQo+ICB7DQo+ICAJdWludDMyX3QgdmFsOw0K PiAgDQo+ICAJaWYgKHBoeSA9PSAwKQ0KPiAtCQl2bHZfc2lkZWJhbmRfcncoSU9TRl9QT1JUX0RQ SU8sIFNCX01SRF9OUCwgcmVnLCAmdmFsKTsNCj4gKwkJdmx2X3NpZGViYW5kX3J3KG1taW9fZGF0 YSwgSU9TRl9QT1JUX0RQSU8sIFNCX01SRF9OUCwgcmVnLA0KPiArCQkJCSZ2YWwpOw0KPiAgCWVs c2UNCj4gLQkJdmx2X3NpZGViYW5kX3J3KElPU0ZfUE9SVF9EUElPXzIsIFNCX01SRF9OUCwgcmVn LCAmdmFsKTsNCj4gKwkJdmx2X3NpZGViYW5kX3J3KG1taW9fZGF0YSwgSU9TRl9QT1JUX0RQSU9f MiwgU0JfTVJEX05QLCByZWcsDQo+ICsJCQkJJnZhbCk7DQo+ICAJcmV0dXJuIHZhbDsNCj4gIH0N Cj4gIA0KPiBAQCAtMTUyLDM4ICsxNjAsNDAgQEAgdWludDMyX3QgaW50ZWxfZHBpb19yZWdfcmVh ZCh1aW50MzJfdCByZWcsIGludCBwaHkpDQo+ICAgKg0KPiAgICogMzItYml0IHdyaXRlIG9mIHRo ZSByZWdpc3RlciBhdCBAb2Zmc2V0IHRocm91Z2ggdGhlIERQSU8gc2lkZWJhbmQgcG9ydC4NCj4g ICAqLw0KPiAtdm9pZCBpbnRlbF9kcGlvX3JlZ193cml0ZSh1aW50MzJfdCByZWcsIHVpbnQzMl90 IHZhbCwgaW50IHBoeSkNCj4gK3ZvaWQgaW50ZWxfZHBpb19yZWdfd3JpdGUoc3RydWN0IG1taW9f ZGF0YSAqbW1pb19kYXRhLCB1aW50MzJfdCByZWcsDQo+IHVpbnQzMl90IHZhbCwgaW50IHBoeSkN Cj4gIHsNCj4gIAlpZiAocGh5ID09IDApDQo+IC0JCXZsdl9zaWRlYmFuZF9ydyhJT1NGX1BPUlRf RFBJTywgU0JfTVdSX05QLCByZWcsICZ2YWwpOw0KPiArCQl2bHZfc2lkZWJhbmRfcncobW1pb19k YXRhLCBJT1NGX1BPUlRfRFBJTywgU0JfTVdSX05QLCByZWcsDQo+ICZ2YWwpOw0KPiAgCWVsc2UN Cj4gLQkJdmx2X3NpZGViYW5kX3J3KElPU0ZfUE9SVF9EUElPXzIsIFNCX01XUl9OUCwgcmVnLCAm dmFsKTsNCj4gKwkJdmx2X3NpZGViYW5kX3J3KG1taW9fZGF0YSwgSU9TRl9QT1JUX0RQSU9fMiwg U0JfTVdSX05QLCByZWcsDQo+ICsJCQkJJnZhbCk7DQo+ICB9DQo+ICANCj4gLXVpbnQzMl90IGlu dGVsX2ZsaXNkc2lfcmVnX3JlYWQodWludDMyX3QgcmVnKQ0KPiArdWludDMyX3QgaW50ZWxfZmxp c2RzaV9yZWdfcmVhZChzdHJ1Y3QgbW1pb19kYXRhICptbWlvX2RhdGEsIHVpbnQzMl90IHJlZykN Cj4gIHsNCj4gIAl1aW50MzJfdCB2YWwgPSAwOw0KPiAgDQo+IC0Jdmx2X3NpZGViYW5kX3J3KElP U0ZfUE9SVF9GTElTRFNJLCBTQl9DUlJEREFfTlAsIHJlZywgJnZhbCk7DQo+ICsJdmx2X3NpZGVi YW5kX3J3KG1taW9fZGF0YSwgSU9TRl9QT1JUX0ZMSVNEU0ksIFNCX0NSUkREQV9OUCwgcmVnLA0K PiAmdmFsKTsNCj4gIA0KPiAgCXJldHVybiB2YWw7DQo+ICB9DQo+ICANCj4gLXZvaWQgaW50ZWxf Zmxpc2RzaV9yZWdfd3JpdGUodWludDMyX3QgcmVnLCB1aW50MzJfdCB2YWwpDQo+ICt2b2lkIGlu dGVsX2ZsaXNkc2lfcmVnX3dyaXRlKHN0cnVjdCBtbWlvX2RhdGEgKm1taW9fZGF0YSwgdWludDMy X3QgcmVnLA0KPiB1aW50MzJfdCB2YWwpDQo+ICB7DQo+IC0Jdmx2X3NpZGViYW5kX3J3KElPU0Zf UE9SVF9GTElTRFNJLCBTQl9DUldSREFfTlAsIHJlZywgJnZhbCk7DQo+ICsJdmx2X3NpZGViYW5k X3J3KG1taW9fZGF0YSwgSU9TRl9QT1JUX0ZMSVNEU0ksIFNCX0NSV1JEQV9OUCwgcmVnLA0KPiAm dmFsKTsNCj4gIH0NCj4gIA0KPiAtdWludDMyX3QgaW50ZWxfaW9zZl9zYl9yZWFkKHVpbnQzMl90 IHBvcnQsIHVpbnQzMl90IHJlZykNCj4gK3VpbnQzMl90IGludGVsX2lvc2Zfc2JfcmVhZChzdHJ1 Y3QgbW1pb19kYXRhICptbWlvX2RhdGEsIHVpbnQzMl90IHBvcnQsDQo+IHVpbnQzMl90IHJlZykN Cj4gIHsNCj4gIAl1aW50MzJfdCB2YWw7DQo+ICANCj4gLQl2bHZfc2lkZWJhbmRfcncocG9ydCwg U0JfQ1JSRERBX05QLCByZWcsICZ2YWwpOw0KPiArCXZsdl9zaWRlYmFuZF9ydyhtbWlvX2RhdGEs IHBvcnQsIFNCX0NSUkREQV9OUCwgcmVnLCAmdmFsKTsNCj4gIA0KPiAgCXJldHVybiB2YWw7DQo+ ICB9DQo+ICANCj4gLXZvaWQgaW50ZWxfaW9zZl9zYl93cml0ZSh1aW50MzJfdCBwb3J0LCB1aW50 MzJfdCByZWcsIHVpbnQzMl90IHZhbCkNCj4gK3ZvaWQgaW50ZWxfaW9zZl9zYl93cml0ZShzdHJ1 Y3QgbW1pb19kYXRhICptbWlvX2RhdGEsIHVpbnQzMl90IHBvcnQsDQo+ICsJCQkgdWludDMyX3Qg cmVnLCB1aW50MzJfdCB2YWwpDQo+ICB7DQo+IC0Jdmx2X3NpZGViYW5kX3J3KHBvcnQsIFNCX0NS V1JEQV9OUCwgcmVnLCAmdmFsKTsNCj4gKwl2bHZfc2lkZWJhbmRfcncobW1pb19kYXRhLCBwb3J0 LCBTQl9DUldSREFfTlAsIHJlZywgJnZhbCk7DQo+ICB9DQo+IGRpZmYgLS1naXQgYS9saWIvaW50 ZWxfbW1pby5jIGIvbGliL2ludGVsX21taW8uYw0KPiBpbmRleCAwMTQxMWMzNy4uZDc3YWFiYTgg MTAwNjQ0DQo+IC0tLSBhL2xpYi9pbnRlbF9tbWlvLmMNCj4gKysrIGIvbGliL2ludGVsX21taW8u Yw0KPiBAQCAtNzMsNTQgKzczLDUzIEBADQo+ICAgKi8NCj4gIHZvaWQgKmlndF9nbG9iYWxfbW1p bzsNCj4gIA0KPiAtc3RhdGljIHN0cnVjdCBfbW1pb19kYXRhIHsNCj4gLQlpbnQgaW5pdGVkOw0K PiAtCWJvb2wgc2FmZTsNCj4gLQl1aW50MzJfdCBpOTE1X2RldmlkOw0KPiAtCXN0cnVjdCBpbnRl bF9yZWdpc3Rlcl9tYXAgbWFwOw0KPiAtCWludCBrZXk7DQo+IC19IG1taW9fZGF0YTsNCj4gLQ0K PiAgLyoqDQo+ICAgKiBpbnRlbF9tbWlvX3VzZV9kdW1wX2ZpbGU6DQo+ICsgKiBAbW1pb19kYXRh OiAgbW1pbyBzdHJ1Y3R1cmUgZm9yIElPIG9wZXJhdGlvbnMNCj4gICAqIEBmaWxlOiBuYW1lIG9m IHRoZSByZWdpc3RlciBkdW1wIGZpbGUgdG8gb3Blbg0KPiAgICoNCj4gLSAqIFNldHMgdXAgI2ln dF9nbG9iYWxfbW1pbyB0byBwb2ludCBhdCB0aGUgZGF0YSBjb250YWluZWQgaW4gQGZpbGUuIFRo aXMNCj4gYWxsb3dzDQo+IC0gKiB0aGUgc2FtZSBjb2RlIHRvIGdldCByZXVzZWQgZm9yIGR1bXBp bmcgYW5kIGRlY29kaW5nIGZyb20gcnVubmluZw0KPiBoYXJkd2FyZSBhcw0KPiAtICogZnJvbSBy ZWdpc3RlciBkdW1wcy4NCj4gKyAqIFNldHMgYWxzbyB1cCBtbWlvX2RhdGEtPmlndF9tbWlvIHRv IHBvaW50IGF0IHRoZSBkYXRhIGNvbnRhaW5lZA0KPiArICogaW4gQGZpbGUuIFRoaXMgYWxsb3dz IHRoZSBzYW1lIGNvZGUgdG8gZ2V0IHJldXNlZCBmb3IgZHVtcGluZyBhbmQNCj4gZGVjb2RpbmcN Cj4gKyAqIGZyb20gcnVubmluZyBoYXJkd2FyZSBhcyBmcm9tIHJlZ2lzdGVyIGR1bXBzLg0KPiAg ICovDQo+ICB2b2lkDQo+IC1pbnRlbF9tbWlvX3VzZV9kdW1wX2ZpbGUoY2hhciAqZmlsZSkNCj4g K2ludGVsX21taW9fdXNlX2R1bXBfZmlsZShzdHJ1Y3QgbW1pb19kYXRhICptbWlvX2RhdGEsIGNo YXIgKmZpbGUpDQo+ICB7DQo+ICAJaW50IGZkOw0KPiAgCXN0cnVjdCBzdGF0IHN0Ow0KPiAgDQo+ ICsJbWVtc2V0KG1taW9fZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBtbWlvX2RhdGEpKTsNCj4gIAlm ZCA9IG9wZW4oZmlsZSwgT19SRFdSKTsNCj4gIAlpZ3RfZmFpbF9vbl9mKGZkID09IC0xLA0KPiAg CQkgICAgICAiQ291bGRuJ3Qgb3BlbiAlc1xuIiwgZmlsZSk7DQo+ICANCj4gIAlmc3RhdChmZCwg JnN0KTsNCj4gLQlpZ3RfZ2xvYmFsX21taW8gPSBtbWFwKE5VTEwsIHN0LnN0X3NpemUsIFBST1Rf UkVBRHxQUk9UX1dSSVRFLA0KPiBNQVBfUFJJVkFURSwgZmQsIDApOw0KPiAtCWlndF9mYWlsX29u X2YoaWd0X2dsb2JhbF9tbWlvID09IE1BUF9GQUlMRUQsDQo+ICsJbW1pb19kYXRhLT5pZ3RfbW1p byA9IG1tYXAoTlVMTCwgc3Quc3Rfc2l6ZSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsDQo+IE1BUF9Q UklWQVRFLCBmZCwgMCk7DQo+ICsJaWd0X2ZhaWxfb25fZihtbWlvX2RhdGEtPmlndF9tbWlvID09 IE1BUF9GQUlMRUQsDQo+ICAJCSAgICAgICJDb3VsZG4ndCBtbWFwICVzXG4iLCBmaWxlKTsNCj4g Kw0KPiArCWlndF9nbG9iYWxfbW1pbyA9IG1taW9fZGF0YS0+aWd0X21taW87DQo+ICsNCj4gIAlj bG9zZShmZCk7DQo+ICB9DQo+ICANCj4gIC8qKg0KPiAgICogaW50ZWxfbW1pb191c2VfcGNpX2Jh cjoNCj4gKyAqIEBtbWlvX2RhdGE6ICBtbWlvIHN0cnVjdHVyZSBmb3IgSU8gb3BlcmF0aW9ucw0K PiAgICogQHBjaV9kZXY6IGludGVsIGdyYWNwaGlzIHBjaSBkZXZpY2UNCj4gICAqDQo+IC0gKiBT ZXRzIHVwICNpZ3RfZ2xvYmFsX21taW8gdG8gcG9pbnQgYXQgdGhlIG1taW8gYmFyLg0KPiArICog RmlsbCBhIG1taW9fZGF0YSBzdHVjdHVyZSB3aXRoIGlndF9tbWlvIHRvIHBvaW50IGF0IHRoZSBt bWlvIGJhci4NCj4gICAqDQo+ICAgKiBAcGNpX2RldiBjYW4gYmUgb2J0YWluZWQgZnJvbSBpbnRl bF9nZXRfcGNpX2RldmljZSgpLg0KPiAgICovDQo+ICB2b2lkDQo+IC1pbnRlbF9tbWlvX3VzZV9w Y2lfYmFyKHN0cnVjdCBwY2lfZGV2aWNlICpwY2lfZGV2KQ0KPiAraW50ZWxfbW1pb191c2VfcGNp X2JhcihzdHJ1Y3QgbW1pb19kYXRhICptbWlvX2RhdGEsIHN0cnVjdCBwY2lfZGV2aWNlDQo+ICpw Y2lfZGV2KQ0KPiAgew0KPiAgCXVpbnQzMl90IGRldmlkLCBnZW47DQo+ICAJaW50IG1taW9fYmFy LCBtbWlvX3NpemU7DQo+ICAJaW50IGVycm9yOw0KPiAgDQo+ICsJbWVtc2V0KG1taW9fZGF0YSwg MCwgc2l6ZW9mKHN0cnVjdCBtbWlvX2RhdGEpKTsNCj4gIAlkZXZpZCA9IHBjaV9kZXYtPmRldmlj ZV9pZDsNCj4gIAlpZiAoSVNfR0VOMihkZXZpZCkpDQo+ICAJCW1taW9fYmFyID0gMTsNCj4gQEAg LTEzOSw3ICsxMzgsOSBAQCBpbnRlbF9tbWlvX3VzZV9wY2lfYmFyKHN0cnVjdCBwY2lfZGV2aWNl ICpwY2lfZGV2KQ0KPiAgCQkJCSAgICAgIHBjaV9kZXYtPnJlZ2lvbnNbbW1pb19iYXJdLmJhc2Vf YWRkciwNCj4gIAkJCQkgICAgICBtbWlvX3NpemUsDQo+ICAJCQkJICAgICAgUENJX0RFVl9NQVBf RkxBR19XUklUQUJMRSwNCj4gLQkJCQkgICAgICAmaWd0X2dsb2JhbF9tbWlvKTsNCj4gKwkJCQkg ICAgICAmbW1pb19kYXRhLT5pZ3RfbW1pbyk7DQo+ICsNCj4gKwlpZ3RfZ2xvYmFsX21taW8gPSBt bWlvX2RhdGEtPmlndF9tbWlvOw0KPiAgDQo+ICAJaWd0X2ZhaWxfb25fZihlcnJvciAhPSAwLA0K PiAgCQkgICAgICAiQ291bGRuJ3QgbWFwIE1NSU8gcmVnaW9uXG4iKTsNCj4gQEAgLTE1Myw2ICsx NTQsNyBAQCByZWxlYXNlX2ZvcmNld2FrZV9sb2NrKGludCBmZCkNCj4gIA0KPiAgLyoqDQo+ICAg KiBpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfaW5pdDoNCj4gKyAqIEBtbWlvX2RhdGE6ICBtbWlvIHN0 cnVjdHVyZSBmb3IgSU8gb3BlcmF0aW9ucw0KPiAgICogQHBjaV9kZXY6IGludGVsIGdyYXBoaWNz IHBjaSBkZXZpY2UNCj4gICAqIEBzYWZlOiB1c2Ugc2FmZSByZWdpc3RlciBhY2Nlc3MgdGFibGVz DQo+ICAgKg0KPiBAQCAtMTYwLDc2ICsxNjIsNzcgQEAgcmVsZWFzZV9mb3JjZXdha2VfbG9jayhp bnQgZmQpDQo+ICAgKiBoYW5kbGluZyBhbmQgYWxzbyBhbGxvd3MgcmVnaXN0ZXIgYWNjZXNzIHRv IGJlIGNoZWNrZWQgd2l0aCBhbiBleHBsaWNpdA0KPiAgICogd2hpdGVsaXN0Lg0KPiAgICoNCj4g LSAqIEl0IGFsc28gaW5pdGlhbGl6ZXMgI2lndF9nbG9iYWxfbW1pbyBsaWtlIGludGVsX21taW9f dXNlX3BjaV9iYXIoKS4NCj4gKyAqIEl0IGFsc28gaW5pdGlhbGl6ZXMgbW1pb19kYXRhLT5pZ3Rf bW1pbyBsaWtlIGludGVsX21taW9fdXNlX3BjaV9iYXIoKS4NCj4gICAqDQo+ICAgKiBAcGNpX2Rl diBjYW4gYmUgb2J0YWluZWQgZnJvbSBpbnRlbF9nZXRfcGNpX2RldmljZSgpLg0KPiAgICovDQo+ ICBpbnQNCj4gLWludGVsX3JlZ2lzdGVyX2FjY2Vzc19pbml0KHN0cnVjdCBwY2lfZGV2aWNlICpw Y2lfZGV2LCBpbnQgc2FmZSwgaW50IGZkKQ0KPiAraW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2luaXQo c3RydWN0IG1taW9fZGF0YSAqbW1pb19kYXRhLCBzdHJ1Y3QgcGNpX2RldmljZQ0KPiAqcGNpX2Rl diwgaW50IHNhZmUsIGludCBmZCkNCj4gIHsNCj4gIAlpbnQgcmV0Ow0KPiAgDQo+IC0JLyogYWZ0 ZXIgb2xkIEFQSSBpcyBkZXByZWNhdGVkLCByZW1vdmUgdGhpcyAqLw0KPiAtCWlmIChpZ3RfZ2xv YmFsX21taW8gPT0gTlVMTCkNCj4gLQkJaW50ZWxfbW1pb191c2VfcGNpX2JhcihwY2lfZGV2KTsN Cj4gKwlpbnRlbF9tbWlvX3VzZV9wY2lfYmFyKG1taW9fZGF0YSwgcGNpX2Rldik7DQo+ICANCj4g LQlpZ3RfYXNzZXJ0KGlndF9nbG9iYWxfbW1pbyAhPSBOVUxMKTsNCj4gKwlpZ3RfYXNzZXJ0KG1t aW9fZGF0YS0+aWd0X21taW8gIT0gTlVMTCk7DQo+ICANCj4gLQlpZiAobW1pb19kYXRhLmluaXRl ZCkNCj4gKwlpZiAobW1pb19kYXRhLT5pbml0ZWQpDQo+ICAJCXJldHVybiAtMTsNCj4gIA0KPiAt CW1taW9fZGF0YS5zYWZlID0gKHNhZmUgIT0gMCAmJg0KPiArCW1taW9fZGF0YS0+c2FmZSA9IChz YWZlICE9IDAgJiYNCj4gIAkJCWludGVsX2dlbihwY2lfZGV2LT5kZXZpY2VfaWQpID49IDQpID8g dHJ1ZSA6IGZhbHNlOw0KPiAtCW1taW9fZGF0YS5pOTE1X2RldmlkID0gcGNpX2Rldi0+ZGV2aWNl X2lkOw0KPiAtCWlmIChtbWlvX2RhdGEuc2FmZSkNCj4gLQkJbW1pb19kYXRhLm1hcCA9IGludGVs X2dldF9yZWdpc3Rlcl9tYXAobW1pb19kYXRhLmk5MTVfZGV2aWQpOw0KPiArCW1taW9fZGF0YS0+ aTkxNV9kZXZpZCA9IHBjaV9kZXYtPmRldmljZV9pZDsNCj4gKwlpZiAobW1pb19kYXRhLT5zYWZl KQ0KPiArCQltbWlvX2RhdGEtPm1hcCA9IGludGVsX2dldF9yZWdpc3Rlcl9tYXAobW1pb19kYXRh LQ0KPiA+aTkxNV9kZXZpZCk7DQo+ICANCj4gIAkvKiBGaW5kIHdoZXJlIHRoZSBmb3JjZXdha2Ug bG9jayBpcy4gRm9yY2V3YWtlIGRvZXNuJ3QgZXhpc3QNCj4gIAkgKiBnZW4gPCA2LCBidXQgdGhl IGRlYnVnZnMgc2hvdWxkIGRvIHRoZSByaWdodCB0aGluZ3MgZm9yIHVzLg0KPiAgCSAqLw0KPiAg CXJldCA9IGlndF9vcGVuX2ZvcmNld2FrZV9oYW5kbGUoZmQpOw0KPiAgCWlmIChyZXQgPT0gLTEp DQo+IC0JCW1taW9fZGF0YS5rZXkgPSBGQUtFS0VZOw0KPiArCQltbWlvX2RhdGEtPmtleSA9IEZB S0VLRVk7DQo+ICAJZWxzZQ0KPiAtCQltbWlvX2RhdGEua2V5ID0gcmV0Ow0KPiArCQltbWlvX2Rh dGEtPmtleSA9IHJldDsNCj4gIA0KPiAtCW1taW9fZGF0YS5pbml0ZWQrKzsNCj4gKwltbWlvX2Rh dGEtPmluaXRlZCsrOw0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiAgDQo+ICBzdGF0aWMgaW50DQo+ IC1pbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfbmVlZHNfd2FrZSh2b2lkKQ0KPiAraW50ZWxfcmVnaXN0 ZXJfYWNjZXNzX25lZWRzX3dha2Uoc3RydWN0IG1taW9fZGF0YSAqbW1pb19kYXRhKQ0KPiAgew0K PiAtCXJldHVybiBtbWlvX2RhdGEua2V5ICE9IEZBS0VLRVk7DQo+ICsJcmV0dXJuIG1taW9fZGF0 YS0+a2V5ICE9IEZBS0VLRVk7DQo+ICB9DQo+ICANCj4gIC8qKg0KPiAgICogaW50ZWxfcmVnaXN0 ZXJfYWNjZXNzX25lZWRzX2Zha2V3YWtlOg0KPiArICogQG1taW9fZGF0YTogIG1taW8gc3RydWN0 dXJlIGZvciBJTyBvcGVyYXRpb25zDQo+ICAgKg0KPiAgICogUmV0dXJuczoNCj4gICAqIE5vbi16 ZXJvIHdoZW4gZm9yY2V3YWtlIGluaXRpYWxpemF0aW9uIGZhaWxlZC4NCj4gICAqLw0KPiAtaW50 IGludGVsX3JlZ2lzdGVyX2FjY2Vzc19uZWVkc19mYWtld2FrZSh2b2lkKQ0KPiAraW50IGludGVs X3JlZ2lzdGVyX2FjY2Vzc19uZWVkc19mYWtld2FrZShzdHJ1Y3QgbW1pb19kYXRhICptbWlvX2Rh dGEpDQo+ICB7DQo+IC0JcmV0dXJuIG1taW9fZGF0YS5rZXkgPT0gRkFLRUtFWTsNCj4gKwlyZXR1 cm4gbW1pb19kYXRhLT5rZXkgPT0gRkFLRUtFWTsNCj4gIH0NCj4gIA0KPiAgLyoqDQo+ICAgKiBp bnRlbF9yZWdpc3Rlcl9hY2Nlc3NfZmluaToNCj4gKyAqIEBtbWlvX2RhdGE6ICBtbWlvIHN0cnVj dHVyZSBmb3IgSU8gb3BlcmF0aW9ucw0KPiAgICoNCj4gICAqIENsZWFuIHVwIHRoZSByZWdpc3Rl ciBhY2Nlc3MgaGVscGVyIGluaXRpYWxpemVkIHdpdGgNCj4gICAqIGludGVsX3JlZ2lzdGVyX2Fj Y2Vzc19pbml0KCkuDQo+ICAgKi8NCj4gIHZvaWQNCj4gLWludGVsX3JlZ2lzdGVyX2FjY2Vzc19m aW5pKHZvaWQpDQo+ICtpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfZmluaShzdHJ1Y3QgbW1pb19kYXRh ICptbWlvX2RhdGEpDQo+ICB7DQo+IC0JaWYgKG1taW9fZGF0YS5rZXkgJiYgaW50ZWxfcmVnaXN0 ZXJfYWNjZXNzX25lZWRzX3dha2UoKSkNCj4gLQkJcmVsZWFzZV9mb3JjZXdha2VfbG9jayhtbWlv X2RhdGEua2V5KTsNCj4gLQltbWlvX2RhdGEuaW5pdGVkLS07DQo+ICsJaWYgKG1taW9fZGF0YS0+ a2V5ICYmIGludGVsX3JlZ2lzdGVyX2FjY2Vzc19uZWVkc193YWtlKG1taW9fZGF0YSkpDQo+ICsJ CXJlbGVhc2VfZm9yY2V3YWtlX2xvY2sobW1pb19kYXRhLT5rZXkpOw0KPiArCW1taW9fZGF0YS0+ aW5pdGVkLS07DQo+ICB9DQo+ICANCj4gIC8qKg0KPiAgICogaW50ZWxfcmVnaXN0ZXJfcmVhZDoN Cj4gKyAqIEBtbWlvX2RhdGE6ICBtbWlvIHN0cnVjdHVyZSBmb3IgSU8gb3BlcmF0aW9ucw0KPiAg ICogQHJlZzogcmVnaXN0ZXIgb2Zmc2V0DQo+ICAgKg0KPiAgICogMzItYml0IHJlYWQgb2YgdGhl IHJlZ2lzdGVyIGF0IEBvZmZzZXQuIFRoaXMgZnVuY3Rpb24gb25seSB3b3JrcyB3aGVuDQo+IHRo ZSBuZXcNCj4gQEAgLTI0MiwyMCArMjQ1LDIwIEBAIGludGVsX3JlZ2lzdGVyX2FjY2Vzc19maW5p KHZvaWQpDQo+ICAgKiBUaGUgdmFsdWUgcmVhZCBmcm9tIHRoZSByZWdpc3Rlci4NCj4gICAqLw0K PiAgdWludDMyX3QNCj4gLWludGVsX3JlZ2lzdGVyX3JlYWQodWludDMyX3QgcmVnKQ0KPiAraW50 ZWxfcmVnaXN0ZXJfcmVhZChzdHJ1Y3QgbW1pb19kYXRhICptbWlvX2RhdGEsIHVpbnQzMl90IHJl ZykNCj4gIHsNCj4gIAlzdHJ1Y3QgaW50ZWxfcmVnaXN0ZXJfcmFuZ2UgKnJhbmdlOw0KPiAgCXVp bnQzMl90IHJldDsNCj4gIA0KPiAtCWlndF9hc3NlcnQobW1pb19kYXRhLmluaXRlZCk7DQo+ICsJ aWd0X2Fzc2VydChtbWlvX2RhdGEtPmluaXRlZCk7DQo+ICANCj4gLQlpZiAoaW50ZWxfZ2VuKG1t aW9fZGF0YS5pOTE1X2RldmlkKSA+PSA2KQ0KPiAtCQlpZ3RfYXNzZXJ0KG1taW9fZGF0YS5rZXkg IT0gLTEpOw0KPiArCWlmIChpbnRlbF9nZW4obW1pb19kYXRhLT5pOTE1X2RldmlkKSA+PSA2KQ0K PiArCQlpZ3RfYXNzZXJ0KG1taW9fZGF0YS0+a2V5ICE9IC0xKTsNCj4gIA0KPiAtCWlmICghbW1p b19kYXRhLnNhZmUpDQo+ICsJaWYgKCFtbWlvX2RhdGEtPnNhZmUpDQo+ICAJCWdvdG8gcmVhZF9v dXQ7DQo+ICANCj4gLQlyYW5nZSA9IGludGVsX2dldF9yZWdpc3Rlcl9yYW5nZShtbWlvX2RhdGEu bWFwLA0KPiArCXJhbmdlID0gaW50ZWxfZ2V0X3JlZ2lzdGVyX3JhbmdlKG1taW9fZGF0YS0+bWFw LA0KPiAgCQkJCQkgcmVnLA0KPiAgCQkJCQkgSU5URUxfUkFOR0VfUkVBRCk7DQo+ICANCj4gQEAg LTI2NiwxMyArMjY5LDE0IEBAIGludGVsX3JlZ2lzdGVyX3JlYWQodWludDMyX3QgcmVnKQ0KPiAg CX0NCj4gIA0KPiAgcmVhZF9vdXQ6DQo+IC0JcmV0ID0gKih2b2xhdGlsZSB1aW50MzJfdCAqKSgo dm9sYXRpbGUgY2hhciAqKWlndF9nbG9iYWxfbW1pbyArIHJlZyk7DQo+ICsJcmV0ID0gKih2b2xh dGlsZSB1aW50MzJfdCAqKSgodm9sYXRpbGUgY2hhciAqKW1taW9fZGF0YS0+aWd0X21taW8gKw0K PiByZWcpOw0KPiAgb3V0Og0KPiAgCXJldHVybiByZXQ7DQo+ICB9DQo+ICANCj4gIC8qKg0KPiAg ICogaW50ZWxfcmVnaXN0ZXJfd3JpdGU6DQo+ICsgKiBAbW1pb19kYXRhOiAgbW1pbyBzdHJ1Y3R1 cmUgZm9yIElPIG9wZXJhdGlvbnMNCj4gICAqIEByZWc6IHJlZ2lzdGVyIG9mZnNldA0KPiAgICog QHZhbDogdmFsdWUgdG8gd3JpdGUNCj4gICAqDQo+IEBAIC0yODMsMTkgKzI4NywxOSBAQCBvdXQ6 DQo+ICAgKiB3aGl0ZSBsaXN0cy4NCj4gICAqLw0KPiAgdm9pZA0KPiAtaW50ZWxfcmVnaXN0ZXJf d3JpdGUodWludDMyX3QgcmVnLCB1aW50MzJfdCB2YWwpDQo+ICtpbnRlbF9yZWdpc3Rlcl93cml0 ZShzdHJ1Y3QgbW1pb19kYXRhICptbWlvX2RhdGEsIHVpbnQzMl90IHJlZywgdWludDMyX3QNCj4g dmFsKQ0KPiAgew0KPiAgCXN0cnVjdCBpbnRlbF9yZWdpc3Rlcl9yYW5nZSAqcmFuZ2U7DQo+ICAN Cj4gLQlpZ3RfYXNzZXJ0KG1taW9fZGF0YS5pbml0ZWQpOw0KPiArCWlndF9hc3NlcnQobW1pb19k YXRhLT5pbml0ZWQpOw0KPiAgDQo+IC0JaWYgKGludGVsX2dlbihtbWlvX2RhdGEuaTkxNV9kZXZp ZCkgPj0gNikNCj4gLQkJaWd0X2Fzc2VydChtbWlvX2RhdGEua2V5ICE9IC0xKTsNCj4gKwlpZiAo aW50ZWxfZ2VuKG1taW9fZGF0YS0+aTkxNV9kZXZpZCkgPj0gNikNCj4gKwkJaWd0X2Fzc2VydCht bWlvX2RhdGEtPmtleSAhPSAtMSk7DQo+ICANCj4gLQlpZiAoIW1taW9fZGF0YS5zYWZlKQ0KPiAr CWlmICghbW1pb19kYXRhLT5zYWZlKQ0KPiAgCQlnb3RvIHdyaXRlX291dDsNCj4gIA0KPiAtCXJh bmdlID0gaW50ZWxfZ2V0X3JlZ2lzdGVyX3JhbmdlKG1taW9fZGF0YS5tYXAsDQo+ICsJcmFuZ2Ug PSBpbnRlbF9nZXRfcmVnaXN0ZXJfcmFuZ2UobW1pb19kYXRhLT5tYXAsDQo+ICAJCQkJCSByZWcs DQo+ICAJCQkJCSBJTlRFTF9SQU5HRV9XUklURSk7DQo+ICANCj4gQEAgLTMwMyw3ICszMDcsNyBA QCBpbnRlbF9yZWdpc3Rlcl93cml0ZSh1aW50MzJfdCByZWcsIHVpbnQzMl90IHZhbCkNCj4gIAkJ ICAgICAgIlJlZ2lzdGVyIHdyaXRlIGJsb2NrZWQgZm9yIHNhZmV0eSAiIigqMHglMDh4ID0NCj4g MHgleClcbiIsIHJlZywgdmFsKTsNCj4gIA0KPiAgd3JpdGVfb3V0Og0KPiAtCSoodm9sYXRpbGUg dWludDMyX3QgKikoKHZvbGF0aWxlIGNoYXIgKilpZ3RfZ2xvYmFsX21taW8gKyByZWcpID0gdmFs Ow0KPiArCSoodm9sYXRpbGUgdWludDMyX3QgKikoKHZvbGF0aWxlIGNoYXIgKiltbWlvX2RhdGEt PmlndF9tbWlvICsgcmVnKSA9DQo+IHZhbDsNCj4gIH0NCj4gIA0KPiAgDQo+IGRpZmYgLS1naXQg YS90ZXN0cy9pOTE1L2dlbV9leGVjX2xhdGVuY3kuYyBiL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfbGF0 ZW5jeS5jDQo+IGluZGV4IGU1NmQ2Mjc4Li5iOTZhODQwOSAxMDA2NDQNCj4gLS0tIGEvdGVzdHMv aTkxNS9nZW1fZXhlY19sYXRlbmN5LmMNCj4gKysrIGIvdGVzdHMvaTkxNS9nZW1fZXhlY19sYXRl bmN5LmMNCj4gQEAgLTYxLDYgKzYxLDggQEANCj4gIA0KPiAgc3RhdGljIHVuc2lnbmVkIGludCBy aW5nX3NpemU7DQo+ICBzdGF0aWMgZG91YmxlIHJjc19jbG9jazsNCj4gK3N0YXRpYyBzdHJ1Y3Qg bW1pb19kYXRhIG1taW9fZGF0YTsNCj4gKw0KPiAgDQo+ICBzdGF0aWMgdm9pZA0KPiAgcG9sbF9y aW5nKGludCBmZCwgdW5zaWduZWQgcmluZywgY29uc3QgY2hhciAqbmFtZSkNCj4gQEAgLTY2Nyw3 ICs2NjksNyBAQCBpZ3RfbWFpbg0KPiAgCQlpZiAocmluZ19zaXplID4gMTAyNCkNCj4gIAkJCXJp bmdfc2l6ZSA9IDEwMjQ7DQo+ICANCj4gLQkJaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2luaXQoaW50 ZWxfZ2V0X3BjaV9kZXZpY2UoKSwgZmFsc2UsDQo+IGRldmljZSk7DQo+ICsJCWludGVsX3JlZ2lz dGVyX2FjY2Vzc19pbml0KCZtbWlvX2RhdGEsIGludGVsX2dldF9wY2lfZGV2aWNlKCksDQo+IGZh bHNlLCBkZXZpY2UpOw0KPiAgCQlyY3NfY2xvY2sgPSBjbG9ja3JhdGUoZGV2aWNlLCBSQ1NfVElN RVNUQU1QKTsNCj4gIAkJaWd0X2luZm8oIlJDUyB0aW1lc3RhbXAgY2xvY2s6ICUuMGZLSHosICUu MWZuc1xuIiwNCj4gIAkJCSByY3NfY2xvY2sgLyAxZTMsIDFlOSAvIHJjc19jbG9jayk7DQo+IGRp ZmYgLS1naXQgYS90ZXN0cy9pOTE1L2dlbV9leGVjX3BhcnNlLmMgYi90ZXN0cy9pOTE1L2dlbV9l eGVjX3BhcnNlLmMNCj4gaW5kZXggNjJlOGQwYTUuLmVmOTdmZjRmIDEwMDY0NA0KPiAtLS0gYS90 ZXN0cy9pOTE1L2dlbV9leGVjX3BhcnNlLmMNCj4gKysrIGIvdGVzdHMvaTkxNS9nZW1fZXhlY19w YXJzZS5jDQo+IEBAIC01OCw2ICs1OCw5IEBADQo+ICANCj4gIHN0YXRpYyBpbnQgcGFyc2VyX3Zl cnNpb247DQo+ICANCj4gK3N0cnVjdCBtbWlvX2RhdGEgbW1pb19kYXRhOw0KPiArDQo+ICsNCj4g IHN0YXRpYyBpbnQgY29tbWFuZF9wYXJzZXJfdmVyc2lvbihpbnQgZmQpDQo+ICB7DQo+ICAJaW50 IHZlcnNpb24gPSAtMTsNCj4gQEAgLTI4NCw5ICsyODcsOSBAQCB0ZXN0X2xyaShpbnQgZmQsIHVp bnQzMl90IGhhbmRsZSwgc3RydWN0IHRlc3RfbHJpICp0ZXN0KQ0KPiAgCQkgIHRlc3QtPm5hbWUs IHRlc3QtPnJlZywgdGVzdC0+dGVzdF92YWwsDQo+ICAJCSAgZXhwZWN0ZWRfZXJybm8sIGV4cGVj dCk7DQo+ICANCj4gLQlpbnRlbF9yZWdpc3Rlcl93cml0ZSh0ZXN0LT5yZWcsIHRlc3QtPmluaXRf dmFsKTsNCj4gKwlpbnRlbF9yZWdpc3Rlcl93cml0ZSgmbW1pb19kYXRhLCB0ZXN0LT5yZWcsIHRl c3QtPmluaXRfdmFsKTsNCj4gIA0KPiAtCWlndF9hc3NlcnRfZXFfdTMyKChpbnRlbF9yZWdpc3Rl cl9yZWFkKHRlc3QtPnJlZykgJg0KPiArCWlndF9hc3NlcnRfZXFfdTMyKChpbnRlbF9yZWdpc3Rl cl9yZWFkKCZtbWlvX2RhdGEsIHRlc3QtPnJlZykgJg0KPiAgCQkJICAgdGVzdC0+cmVhZF9tYXNr KSwNCj4gIAkJCSAgdGVzdC0+aW5pdF92YWwpOw0KPiAgDQo+IEBAIC0yOTYsNyArMjk5LDcgQEAg dGVzdF9scmkoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHN0cnVjdCB0ZXN0X2xyaSAqdGVzdCkN Cj4gIAkJICAgZXhwZWN0ZWRfZXJybm8pOw0KPiAgCWdlbV9zeW5jKGZkLCBoYW5kbGUpOw0KPiAg DQo+IC0JaWd0X2Fzc2VydF9lcV91MzIoKGludGVsX3JlZ2lzdGVyX3JlYWQodGVzdC0+cmVnKSAm DQo+ICsJaWd0X2Fzc2VydF9lcV91MzIoKGludGVsX3JlZ2lzdGVyX3JlYWQoJm1taW9fZGF0YSwg dGVzdC0+cmVnKSAmDQo+ICAJCQkgICB0ZXN0LT5yZWFkX21hc2spLA0KPiAgCQkJICBleHBlY3Qp Ow0KPiAgfQ0KPiBAQCAtNTMwLDcgKzUzMyw3IEBAIGlndF9tYWluDQo+ICAjdW5kZWYgUkVHDQo+ ICANCj4gIAkJaWd0X2ZpeHR1cmUgew0KPiAtCQkJaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2luaXQo aW50ZWxfZ2V0X3BjaV9kZXZpY2UoKSwgMCwNCj4gZmQpOw0KPiArCQkJaW50ZWxfcmVnaXN0ZXJf YWNjZXNzX2luaXQoJm1taW9fZGF0YSwNCj4gaW50ZWxfZ2V0X3BjaV9kZXZpY2UoKSwgMCwgZmQp Ow0KPiAgCQl9DQo+ICANCj4gIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxyaXMp OyBpKyspIHsNCj4gQEAgLTU0Myw3ICs1NDYsNyBAQCBpZ3RfbWFpbg0KPiAgCQl9DQo+ICANCj4g IAkJaWd0X2ZpeHR1cmUgew0KPiAtCQkJaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2ZpbmkoKTsNCj4g KwkJCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19maW5pKCZtbWlvX2RhdGEpOw0KPiAgCQl9DQo+ICAJ fQ0KPiAgDQo+IGRpZmYgLS1naXQgYS90ZXN0cy9pOTE1L2dlbV93b3JrYXJvdW5kcy5jIGIvdGVz dHMvaTkxNS9nZW1fd29ya2Fyb3VuZHMuYw0KPiBpbmRleCA4MWMzNTZmMC4uNjMxZmRmOGYgMTAw NjQ0DQo+IC0tLSBhL3Rlc3RzL2k5MTUvZ2VtX3dvcmthcm91bmRzLmMNCj4gKysrIGIvdGVzdHMv aTkxNS9nZW1fd29ya2Fyb3VuZHMuYw0KPiBAQCAtMjI1LDYgKzIyNSw3IEBAIHN0YXRpYyB2b2lk IGNoZWNrX3dvcmthcm91bmRzKGludCBmZCwgZW51bSBvcGVyYXRpb24gb3AsDQo+IHVuc2lnbmVk IGludCBmbGFncykNCj4gIA0KPiAgaWd0X21haW4NCj4gIHsNCj4gKwlzdHJ1Y3QgbW1pb19kYXRh IG1taW9fZGF0YTsNCj4gIAlpbnQgZGV2aWNlID0gLTE7DQo+ICAJY29uc3Qgc3RydWN0IHsNCj4g IAkJY29uc3QgY2hhciAqbmFtZTsNCj4gQEAgLTI1Niw3ICsyNTcsNyBAQCBpZ3RfbWFpbg0KPiAg CQlkZXZpY2UgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsNCj4gIAkJaWd0X3JlcXVp cmVfZ2VtKGRldmljZSk7DQo+ICANCj4gLQkJaW50ZWxfbW1pb191c2VfcGNpX2JhcihpbnRlbF9n ZXRfcGNpX2RldmljZSgpKTsNCj4gKwkJaW50ZWxfbW1pb191c2VfcGNpX2JhcigmbW1pb19kYXRh LCBpbnRlbF9nZXRfcGNpX2RldmljZSgpKTsNCj4gIA0KPiAgCQlnZW4gPSBpbnRlbF9nZW4oaW50 ZWxfZ2V0X2RybV9kZXZpZChkZXZpY2UpKTsNCj4gIA0KPiBkaWZmIC0tZ2l0IGEvdGVzdHMvaTkx NS9pOTE1X3BtX2xwc3AuYyBiL3Rlc3RzL2k5MTUvaTkxNV9wbV9scHNwLmMNCj4gaW5kZXggYjMx OWRiZTkuLjNiNDg2ZDMwIDEwMDY0NA0KPiAtLS0gYS90ZXN0cy9pOTE1L2k5MTVfcG1fbHBzcC5j DQo+ICsrKyBiL3Rlc3RzL2k5MTUvaTkxNV9wbV9scHNwLmMNCj4gQEAgLTE4Nyw3ICsxODcsNyBA QCBpbnQgZHJtX2ZkOw0KPiAgdWludDMyX3QgZGV2aWQ7DQo+ICBkcm1Nb2RlUmVzUHRyIGRybV9y ZXM7DQo+ICBkcm1Nb2RlQ29ubmVjdG9yUHRyIGRybV9jb25uZWN0b3JzW01BWF9DT05ORUNUT1JT XTsNCj4gLQ0KPiArc3RydWN0IG1taW9fZGF0YSBtbWlvX2RhdGE7DQo+ICBpZ3RfbWFpbg0KPiAg ew0KPiAgCWlndF9maXh0dXJlIHsNCj4gQEAgLTIxMCw3ICsyMTAsNyBAQCBpZ3RfbWFpbg0KPiAg DQo+ICAJCWlndF9yZXF1aXJlKHN1cHBvcnRzX2xwc3AoZGV2aWQpKTsNCj4gIA0KPiAtCQlpbnRl bF9yZWdpc3Rlcl9hY2Nlc3NfaW5pdChpbnRlbF9nZXRfcGNpX2RldmljZSgpLCAwLCBkcm1fZmQp Ow0KPiArCQlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfaW5pdCgmbW1pb19kYXRhLCBpbnRlbF9nZXRf cGNpX2RldmljZSgpLA0KPiAwLCBkcm1fZmQpOw0KPiAgDQo+ICAJCWttc3Rlc3Rfc2V0X3Z0X2dy YXBoaWNzX21vZGUoKTsNCj4gIAl9DQo+IEBAIC0yMjcsNyArMjI3LDcgQEAgaWd0X21haW4NCj4g IAlpZ3RfZml4dHVyZSB7DQo+ICAJCWludCBpOw0KPiAgDQo+IC0JCWludGVsX3JlZ2lzdGVyX2Fj Y2Vzc19maW5pKCk7DQo+ICsJCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19maW5pKCZtbWlvX2RhdGEp Ow0KPiAgCQlmb3IgKGkgPSAwOyBpIDwgZHJtX3Jlcy0+Y291bnRfY29ubmVjdG9yczsgaSsrKQ0K PiAgCQkJZHJtTW9kZUZyZWVDb25uZWN0b3IoZHJtX2Nvbm5lY3RvcnNbaV0pOw0KPiAgCQlkcm1N b2RlRnJlZVJlc291cmNlcyhkcm1fcmVzKTsNCj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2ludGVsX2F1 ZGlvX2R1bXAuYyBiL3Rvb2xzL2ludGVsX2F1ZGlvX2R1bXAuYw0KPiBpbmRleCA3MjZiYjRiNi4u MjViYTkxOGYgMTAwNjQ0DQo+IC0tLSBhL3Rvb2xzL2ludGVsX2F1ZGlvX2R1bXAuYw0KPiArKysg Yi90b29scy9pbnRlbF9hdWRpb19kdW1wLmMNCj4gQEAgLTQyLDYgKzQyLDcgQEAgc3RhdGljIHVp bnQzMl90IGRldmlkOw0KPiAgc3RhdGljIGludCBhdWRfcmVnX2Jhc2UgPSAwOwkvKiBiYXNlIGFk ZHJlc3Mgb2YgYXVkaW8gcmVnaXN0ZXJzICovDQo+ICBzdGF0aWMgaW50IGRpc3BfcmVnX2Jhc2Ug PSAwOwkvKiBiYXNlIGFkZHJlc3Mgb2YgZGlzcGxheSByZWdpc3RlcnMNCj4gKi8NCj4gIA0KPiAr DQo+ICAjZGVmaW5lIElTX0hBU1dFTExfUExVUyhkZXZpZCkgIChJU19IQVNXRUxMKGRldmlkKSB8 fCBJU19CUk9BRFdFTEwoZGV2aWQpKQ0KPiAgDQo+ICAjZGVmaW5lIEJJVFNUTyhuKQkJKG4gPj0g c2l6ZW9mKGxvbmcpICogOCA/IH4wIDogKDFVTCA8PCAobikpIC0NCj4gMSkNCj4gQEAgLTI0NjQs NiArMjQ2NSw3IEBAIHN0YXRpYyB2b2lkIGR1bXBfYnJhc3dlbGwodm9pZCkNCj4gIGludCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikNCj4gIHsNCj4gIAlzdHJ1Y3QgcGNpX2RldmljZSAqcGNp X2RldjsNCj4gKwlzdHJ1Y3QgbW1pb19kYXRhIG1taW9fZGF0YTsNCj4gIA0KPiAgCXBjaV9kZXYg PSBpbnRlbF9nZXRfcGNpX2RldmljZSgpOw0KPiAgCWRldmlkID0gcGNpX2Rldi0+ZGV2aWNlX2lk OyAvKiBYWFggbm90IHRydWUgd2hlbiBtYXBwaW5nISAqLw0KPiBAQCAtMjQ3MSw5ICsyNDczLDkg QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KPiAgCWRvX3NlbGZfdGVzdHMoKTsN Cj4gIA0KPiAgCWlmIChhcmdjID09IDIpDQo+IC0JCWludGVsX21taW9fdXNlX2R1bXBfZmlsZShh cmd2WzFdKTsNCj4gKwkJaW50ZWxfbW1pb191c2VfZHVtcF9maWxlKCZtbWlvX2RhdGEsIGFyZ3Zb MV0pOw0KPiAgCWVsc2UNCj4gLQkJaW50ZWxfbW1pb191c2VfcGNpX2JhcihwY2lfZGV2KTsNCj4g KwkJaW50ZWxfbW1pb191c2VfcGNpX2JhcigmbW1pb19kYXRhLCBwY2lfZGV2KTsNCj4gIA0KPiAg CXByaW50ZigiJXMgYXVkaW8gcmVnaXN0ZXJzOlxuXG4iLCBpbnRlbF9nZXRfZGV2aWNlX2luZm8o ZGV2aWQpLQ0KPiA+Y29kZW5hbWUpOw0KPiAgCWlmIChJU19WQUxMRVlWSUVXKGRldmlkKSkgew0K PiBkaWZmIC0tZ2l0IGEvdG9vbHMvaW50ZWxfYmFja2xpZ2h0LmMgYi90b29scy9pbnRlbF9iYWNr bGlnaHQuYw0KPiBpbmRleCAwNjdmZDQxOC4uMmNkYjUyNzYgMTAwNjQ0DQo+IC0tLSBhL3Rvb2xz L2ludGVsX2JhY2tsaWdodC5jDQo+ICsrKyBiL3Rvb2xzL2ludGVsX2JhY2tsaWdodC5jDQo+IEBA IC0zOCw5ICszOCwxMSBAQA0KPiAgDQo+ICBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3Yp DQo+ICB7DQo+ICsJc3RydWN0IG1taW9fZGF0YSBtbWlvX2RhdGE7DQo+ICAJdWludDMyX3QgY3Vy cmVudCwgbWF4Ow0KPiAgDQo+IC0JaW50ZWxfbW1pb191c2VfcGNpX2JhcihpbnRlbF9nZXRfcGNp X2RldmljZSgpKTsNCj4gKwlpbnRlbF9tbWlvX3VzZV9wY2lfYmFyKCZtbWlvX2RhdGEsIGludGVs X2dldF9wY2lfZGV2aWNlKCkpOw0KPiArCWlndF9nbG9iYWxfbW1pbyA9IG1taW9fZGF0YS5pZ3Rf bW1pbzsNCg0KQXMgaW50ZWxfbW1pb191c2VfcGNpX2JhcigpIHNldCBpZ3RfZ2xvYmFsX21taW8g ZnJvbSBkZWZhdWx0IHRvIA0KbW1pb19kYXRhLmlndF9tbWlvIHRoaXMgYXNzaWdubWVudCBpcyBu b3QgbmVjZXNzYXJ5Lg0KDQo+ICANCj4gIAljdXJyZW50ID0gSU5SRUcoQkxDX1BXTV9DUFVfQ1RM KSAmIEJBQ0tMSUdIVF9EVVRZX0NZQ0xFX01BU0s7DQo+ICAJbWF4ID0gSU5SRUcoQkxDX1BXTV9Q Q0hfQ1RMMikgPj4gMTY7DQo+IGRpZmYgLS1naXQgYS90b29scy9pbnRlbF9kaXNwbGF5X3BvbGxl ci5jIGIvdG9vbHMvaW50ZWxfZGlzcGxheV9wb2xsZXIuYw0KPiBpbmRleCA1MWY1YjlhNS4uNGFj OTc3NjYgMTAwNjQ0DQo+IC0tLSBhL3Rvb2xzL2ludGVsX2Rpc3BsYXlfcG9sbGVyLmMNCj4gKysr IGIvdG9vbHMvaW50ZWxfZGlzcGxheV9wb2xsZXIuYw0KPiBAQCAtOTYyLDYgKzk2Miw3IEBAIHN0 YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkgdXNhZ2UoY29uc3QgY2hhcg0KPiAq bmFtZSkNCj4gIA0KPiAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCj4gIHsNCj4g KwlzdHJ1Y3QgbW1pb19kYXRhIG1taW9fZGF0YTsNCj4gIAlpbnQgaTsNCj4gIAlpbnQgcGlwZSA9 IDAsIGJpdCA9IDAsIHRhcmdldF9zY2FubGluZSA9IDAsIHRhcmdldF9mdXp6ID0gMTsNCj4gIAli b29sIHRlc3RfcGl4ZWxjb3VudCA9IGZhbHNlOw0KPiBAQCAtMTE4Nyw3ICsxMTg4LDcgQEAgaW50 IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCj4gIAkJYnJlYWs7DQo+ICAJfQ0KPiAgDQo+ IC0JaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2luaXQoaW50ZWxfZ2V0X3BjaV9kZXZpY2UoKSwgMCwg LTEpOw0KPiArCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19pbml0KCZtbWlvX2RhdGEgLGludGVsX2dl dF9wY2lfZGV2aWNlKCksIDAsIC0xKTsNCj4gIA0KPiAgCXByaW50ZigiJXM/XG4iLCB0ZXN0X25h bWUodGVzdCwgcGlwZSwgYml0LCB0ZXN0X3BpeGVsY291bnQpKTsNCj4gIA0KPiBAQCAtMTI2Miw3 ICsxMjYzLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCj4gIAkJYXNzZXJ0 KDApOw0KPiAgCX0NCj4gIA0KPiAtCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19maW5pKCk7DQo+ICsJ aW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2ZpbmkoJm1taW9fZGF0YSk7DQo+ICANCj4gIAlpZiAocXVp dCkNCj4gIAkJcmV0dXJuIDA7DQo+IGRpZmYgLS1naXQgYS90b29scy9pbnRlbF9mb3JjZXdha2Vk LmMgYi90b29scy9pbnRlbF9mb3JjZXdha2VkLmMNCj4gaW5kZXggMDJmYmY4ODguLmY0MTE0NjEy IDEwMDY0NA0KPiAtLS0gYS90b29scy9pbnRlbF9mb3JjZXdha2VkLmMNCj4gKysrIGIvdG9vbHMv aW50ZWxfZm9yY2V3YWtlZC5jDQo+IEBAIC01NywxNCArNTcsMTUgQEAgaGVscChjaGFyICpwcm9n KSB7DQo+ICB9DQo+ICANCj4gIHN0YXRpYyBpbnQNCj4gLWlzX2FsaXZlKHZvaWQpIHsNCj4gK2lz X2FsaXZlKHN0cnVjdCBtbWlvX2RhdGEgKm1taW9fZGF0YSkgew0KPiAgCS8qIFJlYWQgdGhlIHRp bWVzdGFtcCwgd2hpY2ggc2hvdWxkICphbG1vc3QqIGFsd2F5cyBiZSAhMCAqLw0KPiAtCXJldHVy biAoaW50ZWxfcmVnaXN0ZXJfcmVhZCgweDIzNTgpICE9IDApOw0KPiArCXJldHVybiAoaW50ZWxf cmVnaXN0ZXJfcmVhZChtbWlvX2RhdGEsIDB4MjM1OCkgIT0gMCk7DQo+ICB9DQo+ICANCj4gIGlu dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQo+ICB7DQo+ICAJaW50IHJldDsNCj4gKwlz dHJ1Y3QgbW1pb19kYXRhIG1taW9fZGF0YTsNCj4gIA0KPiAgCWlmIChhcmdjID4gMiB8fCAoYXJn YyA9PSAyICYmICFzdHJuY21wKGFyZ3ZbMV0sICItaCIsIDIpKSkgew0KPiAgCQloZWxwKGFyZ3Zb MV0pOw0KPiBAQCAtODAsNyArODEsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd KQ0KPiAgCQlJTkZPX1BSSU5UKCJzdGFydGVkIGRhZW1vbiIpOw0KPiAgCX0NCj4gIA0KPiAtCXJl dCA9IGludGVsX3JlZ2lzdGVyX2FjY2Vzc19pbml0KGludGVsX2dldF9wY2lfZGV2aWNlKCksIDEs IC0xKTsNCj4gKwlyZXQgPSBpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfaW5pdCgmbW1pb19kYXRhLCBp bnRlbF9nZXRfcGNpX2RldmljZSgpLA0KPiAxLCAtMSk7DQo+ICAJaWYgKHJldCkgew0KPiAgCQlJ TkZPX1BSSU5UKCJDb3VsZG4ndCBpbml0IHJlZ2lzdGVyIGFjY2Vzc1xuIik7DQo+ICAJCWV4aXQo MSk7DQo+IEBAIC04OCwxNiArODksMTYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkNCj4gIAkJSU5GT19QUklOVCgiRm9yY2V3YWtlIGxvY2tlZFxuIik7DQo+ICAJfQ0KPiAgCXdo aWxlKDEpIHsNCj4gLQkJaWYgKCFpc19hbGl2ZSgpKSB7DQo+ICsJCWlmICghaXNfYWxpdmUoJm1t aW9fZGF0YSkpIHsNCj4gIAkJCUlORk9fUFJJTlQoImdwdSByZXNldD8gcmVzdGFydGluZyBkYWVt b25cbiIpOw0KPiAtCQkJaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2ZpbmkoKTsNCj4gLQkJCXJldCA9 DQo+IGludGVsX3JlZ2lzdGVyX2FjY2Vzc19pbml0KGludGVsX2dldF9wY2lfZGV2aWNlKCksIDEs IC0xKTsNCj4gKwkJCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19maW5pKCZtbWlvX2RhdGEpOw0KPiAr CQkJcmV0ID0gaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2luaXQoJm1taW9fZGF0YSwNCj4gaW50ZWxf Z2V0X3BjaV9kZXZpY2UoKSwgMSwgLTEpOw0KPiAgCQkJaWYgKHJldCkNCj4gIAkJCQlJTkZPX1BS SU5UKCJSZWcgYWNjZXNzIGluaXQgZmFpbFxuIik7DQo+ICAJCX0NCj4gIAkJc2xlZXAoMSk7DQo+ ICAJfQ0KPiAtCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19maW5pKCk7DQo+ICsJaW50ZWxfcmVnaXN0 ZXJfYWNjZXNzX2ZpbmkoJm1taW9fZGF0YSk7DQo+ICAJSU5GT19QUklOVCgiRm9yY2V3YWtlIHVu bG9ja1xuIik7DQo+ICANCj4gIAlpZiAoZGFlbW9uaXplZCkgew0KPiBkaWZmIC0tZ2l0IGEvdG9v bHMvaW50ZWxfZ3B1X3RpbWUuYyBiL3Rvb2xzL2ludGVsX2dwdV90aW1lLmMNCj4gaW5kZXggNTZk NjVmZTAuLjE1YWEwMDQxIDEwMDY0NA0KPiAtLS0gYS90b29scy9pbnRlbF9ncHVfdGltZS5jDQo+ ICsrKyBiL3Rvb2xzL2ludGVsX2dwdV90aW1lLmMNCj4gQEAgLTY1LDkgKzY1LDEwIEBAIGludCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCj4gIAl1aW50NjRfdCByaW5nX2lkbGUgPSAwLCBy aW5nX3RpbWUgPSAwOw0KPiAgCXN0cnVjdCB0aW1ldmFsIHN0YXJ0LCBlbmQ7DQo+ICAJc3RhdGlj IHN0cnVjdCBydXNhZ2UgcnVzYWdlOw0KPiArCXN0cnVjdCBtbWlvX2RhdGEgbW1pb19kYXRhOw0K PiAgCWludCBzdGF0dXM7DQo+ICANCj4gLQlpbnRlbF9tbWlvX3VzZV9wY2lfYmFyKGludGVsX2dl dF9wY2lfZGV2aWNlKCkpOw0KPiArCWludGVsX21taW9fdXNlX3BjaV9iYXIoJm1taW9fZGF0YSwg aW50ZWxfZ2V0X3BjaV9kZXZpY2UoKSk7DQo+ICANCj4gIAlpZiAoYXJnYyA9PSAxKSB7DQo+ICAJ CWZwcmludGYoc3RkZXJyLCAidXNhZ2U6ICVzIGNtZCBbYXJncy4uLl1cbiIsIGFyZ3ZbMF0pOw0K PiBkaWZmIC0tZ2l0IGEvdG9vbHMvaW50ZWxfaW5mb2ZyYW1lcy5jIGIvdG9vbHMvaW50ZWxfaW5m b2ZyYW1lcy5jDQo+IGluZGV4IDJlZjVkNGZkLi5mYmY1M2MyMyAxMDA2NDQNCj4gLS0tIGEvdG9v bHMvaW50ZWxfaW5mb2ZyYW1lcy5jDQo+ICsrKyBiL3Rvb2xzL2ludGVsX2luZm9mcmFtZXMuYw0K PiBAQCAtMjY0LDYgKzI2NCw3IEBAIGNvbnN0IGNoYXIgKmRpcF9mcmVxdWVuY3lfbmFtZXNbXSA9 IHsNCj4gIA0KPiAgc3RydWN0IHBjaV9kZXZpY2UgKnBjaV9kZXY7DQo+ICBpbnQgZ2VuID0gMDsN Cj4gK3N0cnVjdCBtbWlvX2RhdGEgbW1pb19kYXRhOw0KPiAgDQo+ICBzdGF0aWMgY29uc3QgY2hh ciAqc3BkX3NvdXJjZV90b19zdHJpbmcoU291cmNlRGV2aWNlIHNvdXJjZSkNCj4gIHsNCj4gQEAg LTExMDgsNyArMTEwOSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQo+ICAJ ICAgICAgICIgcGVyZmVjdGx5OiB0aGUgS2VybmVsIG1pZ2h0IHVuZG8gb3VyIGNoYW5nZXMuXG4i KTsNCj4gIA0KPiAgCXBjaV9kZXYgPSBpbnRlbF9nZXRfcGNpX2RldmljZSgpOw0KPiAtCWludGVs X3JlZ2lzdGVyX2FjY2Vzc19pbml0KHBjaV9kZXYsIDAsIC0xKTsNCj4gKwlpbnRlbF9yZWdpc3Rl cl9hY2Nlc3NfaW5pdCgmbW1pb19kYXRhLCBwY2lfZGV2LCAwLCAtMSk7DQo+ICAJaW50ZWxfY2hl Y2tfcGNoKCk7DQo+ICANCj4gIAlpZiAoSVNfR0VONChwY2lfZGV2LT5kZXZpY2VfaWQpKQ0KPiBA QCAtMTI1Niw2ICsxMjU3LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCj4g IAl9DQo+ICANCj4gIG91dDoNCj4gLQlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfZmluaSgpOw0KPiAr CWludGVsX3JlZ2lzdGVyX2FjY2Vzc19maW5pKCZtbWlvX2RhdGEpOw0KPiAgCXJldHVybiByZXQ7 DQo+ICB9DQo+IGRpZmYgLS1naXQgYS90b29scy9pbnRlbF9sM19wYXJpdHkuYyBiL3Rvb2xzL2lu dGVsX2wzX3Bhcml0eS5jDQo+IGluZGV4IDQxNzljNWFlLi43MTJkZTIzMCAxMDA2NDQNCj4gLS0t IGEvdG9vbHMvaW50ZWxfbDNfcGFyaXR5LmMNCj4gKysrIGIvdG9vbHMvaW50ZWxfbDNfcGFyaXR5 LmMNCj4gQEAgLTE3Niw2ICsxNzYsNyBAQCBzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICpu YW1lKQ0KPiAgDQo+ICBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KPiAgew0KPiAr CXN0cnVjdCBtbWlvX2RhdGEgbW1pb19kYXRhOw0KPiAgCWNvbnN0IGNoYXIgKnBhdGhbUkVBTF9N QVhfU0xJQ0VTXSA9IHsibDNfcGFyaXR5IiwNCj4gImwzX3Bhcml0eV9zbGljZV8xIn07DQo+ICAJ aW50IHJvdyA9IDAsIGJhbmsgPSAwLCBzYmFuayA9IDA7DQo+ICAJaW50IGZkW1JFQUxfTUFYX1NM SUNFU10gPSB7MH0sIHJldCwgaTsNCj4gQEAgLTE4OSw3ICsxOTAsNyBAQCBpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdKQ0KPiAgCWlmIChpbnRlbF9nZW4oZGV2aWQpIDwgNyB8fCBJU19W QUxMRVlWSUVXKGRldmlkKSkNCj4gIAkJZXhpdCg3Nyk7DQo+ICANCj4gLQlhc3NlcnQoaW50ZWxf cmVnaXN0ZXJfYWNjZXNzX2luaXQoaW50ZWxfZ2V0X3BjaV9kZXZpY2UoKSwgMCwgZGV2aWNlKQ0K PiA9PSAwKTsNCj4gKwlhc3NlcnQoaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2luaXQoJm1taW9fZGF0 YSwgaW50ZWxfZ2V0X3BjaV9kZXZpY2UoKSwNCj4gMCwgZGV2aWNlKSA9PSAwKTsNCj4gIA0KPiAg CWRpciA9IGlndF9zeXNmc19vcGVuKGRldmljZSk7DQo+ICANCj4gQEAgLTIxNyw3ICsyMTgsNyBA QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KPiAgCSAqIG5vdy4gSnVzdCBiZSBh d2FyZSBvZiB0aGlzIGlmIGZvciBzb21lIHJlYXNvbiBhIGhhbmcgaXMgcmVwb3J0ZWQNCj4gIAkg KiB3aGVuIHVzaW5nIHRoaXMgdG9vbC4NCj4gIAkgKi8NCj4gLQlkZnQgPSBpbnRlbF9yZWdpc3Rl cl9yZWFkKDB4YjAzOCk7DQo+ICsJZGZ0ID0gaW50ZWxfcmVnaXN0ZXJfcmVhZCgmbW1pb19kYXRh LCAweGIwMzgpOw0KPiAgDQo+ICAJd2hpbGUgKDEpIHsNCj4gIAkJaW50IGMsIG9wdGlvbl9pbmRl eCA9IDA7DQo+IEBAIC0zNjYsMTAgKzM2NywxMCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq YXJndltdKQ0KPiAgCQkJCWFzc2VydChpIDwgMik7DQo+ICAJCQkJZGZ0IHw9IGkgPDwgMTsgLyog c2xpY2UgKi8NCj4gIAkJCQlkZnQgfD0gMSA8PCAwOyAvKiBlbmFibGUgKi8NCj4gLQkJCQlpbnRl bF9yZWdpc3Rlcl93cml0ZSgweGIwMzgsIGRmdCk7DQo+ICsJCQkJaW50ZWxfcmVnaXN0ZXJfd3Jp dGUoJm1taW9fZGF0YSwgMHhiMDM4LCBkZnQpOw0KPiAgCQkJCWJyZWFrOw0KPiAgCQkJY2FzZSAn dSc6DQo+IC0JCQkJaW50ZWxfcmVnaXN0ZXJfd3JpdGUoMHhiMDM4LCBkZnQgJiB+KDE8PDApKTsN Cj4gKwkJCQlpbnRlbF9yZWdpc3Rlcl93cml0ZSgmbW1pb19kYXRhICwweGIwMzgsIGRmdCAmDQo+ IH4oMTw8MCkpOw0KPiAgCQkJCWJyZWFrOw0KPiAgCQkJY2FzZSAnTCc6DQo+ICAJCQkJYnJlYWs7 DQo+IEBAIC0zNzgsNyArMzc5LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkN Cj4gIAkJfQ0KPiAgCX0NCj4gIA0KPiAtCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19maW5pKCk7DQo+ ICsJaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2ZpbmkoJm1taW9fZGF0YSk7DQo+ICAJaWYgKGFjdGlv biA9PSAnbCcpDQo+ICAJCWV4aXQoRVhJVF9TVUNDRVNTKTsNCj4gIA0KPiBkaWZmIC0tZ2l0IGEv dG9vbHMvaW50ZWxfbGlkLmMgYi90b29scy9pbnRlbF9saWQuYw0KPiBpbmRleCAzN2M2YmE1ZS4u NTIxNzY4MzMgMTAwNjQ0DQo+IC0tLSBhL3Rvb2xzL2ludGVsX2xpZC5jDQo+ICsrKyBiL3Rvb2xz L2ludGVsX2xpZC5jDQo+IEBAIC0xMTcsOSArMTE3LDEwIEBAIG91dDoNCj4gIA0KPiAgaW50IG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KPiAgew0KPiArCXN0cnVjdCBtbWlvX2RhdGEgbW1p b19kYXRhOw0KPiAgCWludCBzd2YxNCwgYWNwaV9saWQ7DQo+ICANCj4gLQlpbnRlbF9tbWlvX3Vz ZV9wY2lfYmFyKGludGVsX2dldF9wY2lfZGV2aWNlKCkpOw0KPiArCWludGVsX21taW9fdXNlX3Bj aV9iYXIoJm1taW9fZGF0YSwgaW50ZWxfZ2V0X3BjaV9kZXZpY2UoKSk7DQo+ICANCj4gIAl3aGls ZSAoMSkgew0KPiAgCQlzd2YxNCA9IElOUkVHKFNXRjE0KTsNCj4gZGlmZiAtLWdpdCBhL3Rvb2xz L2ludGVsX3BhbmVsX2ZpdHRlci5jIGIvdG9vbHMvaW50ZWxfcGFuZWxfZml0dGVyLmMNCj4gaW5k ZXggMTM3ZWY2MWEuLjAzYjQyNTk2IDEwMDY0NA0KPiAtLS0gYS90b29scy9pbnRlbF9wYW5lbF9m aXR0ZXIuYw0KPiArKysgYi90b29scy9pbnRlbF9wYW5lbF9maXR0ZXIuYw0KPiBAQCAtMjczLDYg KzI3Myw3IEBAIGludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KPiAgCWJvb2wgZG9f ZGlzYWJsZSA9IGZhbHNlLCBkb19kdW1wID0gZmFsc2UsIGRvX3VzYWdlID0gZmFsc2U7DQo+ICAJ c3RydWN0IHBjaV9kZXZpY2UgKnBjaV9kZXY7DQo+ICAJdWludDMyX3QgZGV2aWQ7DQo+ICsJc3Ry dWN0IG1taW9fZGF0YSBtbWlvX2RhdGE7DQo+ICANCj4gIAlwcmludGYoIldBUk5JTkc6XG4iDQo+ ICAJICAgICAgICJUaGlzIHRvb2wgaXMgYSB3b3JrYXJvdW5kIGZvciBwZW9wbGUgdGhhdCBkb24n dCBoYXZlIGEgS2VybmVsDQo+ICINCj4gQEAgLTI4MCw3ICsyODEsNyBAQCBpbnQgbWFpbiAoaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCj4gIAkgICAgICAgInNvbHV0aW9uIHRoYXQgbWF5IG9yIG1h eSBub3Qgd29yay4gVXNlIGl0IGF0IHlvdXIgb3duDQo+IHJpc2suXG4iKTsNCj4gIA0KPiAgCXBj aV9kZXYgPSBpbnRlbF9nZXRfcGNpX2RldmljZSgpOw0KPiAtCWludGVsX3JlZ2lzdGVyX2FjY2Vz c19pbml0KHBjaV9kZXYsIDAsIC0xKTsNCj4gKwlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfaW5pdCgm bW1pb19kYXRhLCBwY2lfZGV2LCAwLCAtMSk7DQo+ICAJZGV2aWQgPSBwY2lfZGV2LT5kZXZpY2Vf aWQ7DQo+ICANCj4gIAlpZiAoIUhBU19QQ0hfU1BMSVQoZGV2aWQpKSB7DQo+IEBAIC0zNDIsNiAr MzQzLDYgQEAgaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pDQo+ICAJfQ0KPiAgDQo+ ICBvdXQ6DQo+IC0JaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2ZpbmkoKTsNCj4gKwlpbnRlbF9yZWdp c3Rlcl9hY2Nlc3NfZmluaSgmbW1pb19kYXRhKTsNCj4gIAlyZXR1cm4gcmV0Ow0KPiAgfQ0KPiBk aWZmIC0tZ2l0IGEvdG9vbHMvaW50ZWxfcGVyZl9jb3VudGVycy5jIGIvdG9vbHMvaW50ZWxfcGVy Zl9jb3VudGVycy5jDQo+IGluZGV4IDUwYzRiY2U2Li5hMjllZjFiMiAxMDA2NDQNCj4gLS0tIGEv dG9vbHMvaW50ZWxfcGVyZl9jb3VudGVycy5jDQo+ICsrKyBiL3Rvb2xzL2ludGVsX3BlcmZfY291 bnRlcnMuYw0KPiBAQCAtNDQxLDYgKzQ0MSw3IEBAIGdlbjdfZ2V0X2NvdW50ZXJzKHZvaWQpDQo+ ICBpbnQNCj4gIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KPiAgew0KPiArCXN0cnVjdCBt bWlvX2RhdGEgbW1pb19kYXRhOw0KPiAgCXVpbnQzMl90IGRldmlkOw0KPiAgCWludCBjb3VudGVy X2Zvcm1hdDsNCj4gIAlpbnQgY291bnRlcl9jb3VudDsNCj4gQEAgLTQ4MywxMCArNDg0LDExIEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KPiAgDQo+ICAJaWYgKG9hY29udHJvbCkgew0K PiAgCQkvKiBGb3JjZXdha2UgKi8NCj4gLQkJaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2luaXQoaW50 ZWxfZ2V0X3BjaV9kZXZpY2UoKSwgMCwgZmQpOw0KPiArCQlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3Nf aW5pdCgmbW1pb19kYXRhLCBpbnRlbF9nZXRfcGNpX2RldmljZSgpLA0KPiArCQkJCTAsIGZkKTsN Cj4gIA0KPiAgCQkvKiBFbmFibGUgcGVyZm9ybWFuY2UgY291bnRlcnMgKi8NCj4gLQkJaW50ZWxf cmVnaXN0ZXJfd3JpdGUoT0FDT05UUk9MLA0KPiArCQlpbnRlbF9yZWdpc3Rlcl93cml0ZSgmbW1p b19kYXRhLCBPQUNPTlRST0wsDQo+ICAJCQljb3VudGVyX2Zvcm1hdCA8PCBPQUNPTlRST0xfQ09V TlRFUl9TRUxFQ1RfU0hJRlQgfA0KPiAgCQkJUEVSRk9STUFOQ0VfQ09VTlRFUl9FTkFCTEUpOw0K PiAgCX0NCj4gQEAgLTUyMCwxMCArNTIyLDEwIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQ0KPiAgDQo+ICAJaWYgKG9hY29udHJvbCkgew0KPiAgCQkvKiBEaXNhYmxlIHBlcmZvcm1hbmNl IGNvdW50ZXJzICovDQo+IC0JCWludGVsX3JlZ2lzdGVyX3dyaXRlKE9BQ09OVFJPTCwgMCk7DQo+ ICsJCWludGVsX3JlZ2lzdGVyX3dyaXRlKCZtbWlvX2RhdGEsIE9BQ09OVFJPTCwgMCk7DQo+ICAN Cj4gIAkJLyogRm9yY2V3YWtlICovDQo+IC0JCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19maW5pKCk7 DQo+ICsJCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19maW5pKCZtbWlvX2RhdGEpOw0KPiAgCX0NCj4g IA0KPiAgCWZyZWUodG90YWxzKTsNCj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2ludGVsX3JlZy5jIGIv dG9vbHMvaW50ZWxfcmVnLmMNCj4gaW5kZXggZTUxNzk1NmIuLmM4Y2RiMzc3IDEwMDY0NA0KPiAt LS0gYS90b29scy9pbnRlbF9yZWcuYw0KPiArKysgYi90b29scy9pbnRlbF9yZWcuYw0KPiBAQCAt NTcsNiArNTcsNyBAQCBzdGF0aWMgaW5saW5lIGludCBfbm90X3N1cHBvcnRlZCh2b2lkKQ0KPiAg DQo+ICBzdHJ1Y3QgY29uZmlnIHsNCj4gIAlzdHJ1Y3QgcGNpX2RldmljZSAqcGNpX2RldjsNCj4g KwlzdHJ1Y3QgbW1pb19kYXRhIG1taW9fZGF0YTsNCj4gIAljaGFyICptbWlvZmlsZTsNCj4gIAl1 aW50MzJfdCBkZXZpZDsNCj4gIA0KPiBAQCAtMzg3LDcgKzM4OCw3IEBAIHN0YXRpYyBpbnQgcmVh ZF9yZWdpc3RlcihzdHJ1Y3QgY29uZmlnICpjb25maWcsIHN0cnVjdA0KPiByZWcgKnJlZywgdWlu dDMyX3QgKnZhbHApDQo+ICAJCQkJcmVnLT5wb3J0X2Rlc2MubmFtZSk7DQo+ICAJCQlyZXR1cm4g LTE7DQo+ICAJCX0NCj4gLQkJdmFsID0gaW50ZWxfaW9zZl9zYl9yZWFkKHJlZy0+cG9ydF9kZXNj LnBvcnQsIHJlZy0+YWRkcik7DQo+ICsJCXZhbCA9IGludGVsX2lvc2Zfc2JfcmVhZCgmY29uZmln LT5tbWlvX2RhdGEsIHJlZy0NCj4gPnBvcnRfZGVzYy5wb3J0LCByZWctPmFkZHIpOw0KPiAgCQli cmVhazsNCj4gIAlkZWZhdWx0Og0KPiAgCQlmcHJpbnRmKHN0ZGVyciwgInBvcnQgJWQgbm90IHN1 cHBvcnRlZFxuIiwgcmVnLQ0KPiA+cG9ydF9kZXNjLnBvcnQpOw0KPiBAQCAtNDU4LDcgKzQ1OSw3 IEBAIHN0YXRpYyBpbnQgd3JpdGVfcmVnaXN0ZXIoc3RydWN0IGNvbmZpZyAqY29uZmlnLCBzdHJ1 Y3QNCj4gcmVnICpyZWcsIHVpbnQzMl90IHZhbCkNCj4gIAkJCQlyZWctPnBvcnRfZGVzYy5uYW1l KTsNCj4gIAkJCXJldHVybiAtMTsNCj4gIAkJfQ0KPiAtCQlpbnRlbF9pb3NmX3NiX3dyaXRlKHJl Zy0+cG9ydF9kZXNjLnBvcnQsIHJlZy0+YWRkciwgdmFsKTsNCj4gKwkJaW50ZWxfaW9zZl9zYl93 cml0ZSgmY29uZmlnLT5tbWlvX2RhdGEsIHJlZy0+cG9ydF9kZXNjLnBvcnQsDQo+IHJlZy0+YWRk ciwgdmFsKTsNCj4gIAkJYnJlYWs7DQo+ICAJZGVmYXVsdDoNCj4gIAkJZnByaW50ZihzdGRlcnIs ICJwb3J0ICVkIG5vdCBzdXBwb3J0ZWRcbiIsIHJlZy0NCj4gPnBvcnRfZGVzYy5wb3J0KTsNCj4g QEAgLTU1Miw5ICs1NTMsOSBAQCBzdGF0aWMgaW50IGludGVsX3JlZ19yZWFkKHN0cnVjdCBjb25m aWcgKmNvbmZpZywgaW50DQo+IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCj4gIAl9DQo+ICANCj4gIAlp ZiAoY29uZmlnLT5tbWlvZmlsZSkNCj4gLQkJaW50ZWxfbW1pb191c2VfZHVtcF9maWxlKGNvbmZp Zy0+bW1pb2ZpbGUpOw0KPiArCQlpbnRlbF9tbWlvX3VzZV9kdW1wX2ZpbGUoJmNvbmZpZy0+bW1p b19kYXRhLCBjb25maWctDQo+ID5tbWlvZmlsZSk7DQo+ICAJZWxzZQ0KPiAtCQlpbnRlbF9yZWdp c3Rlcl9hY2Nlc3NfaW5pdChjb25maWctPnBjaV9kZXYsIDAsIC0xKTsNCj4gKwkJaW50ZWxfcmVn aXN0ZXJfYWNjZXNzX2luaXQoJmNvbmZpZy0+bW1pb19kYXRhLCBjb25maWctDQo+ID5wY2lfZGV2 LCAwLCAtMSk7DQo+ICANCj4gIAlmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7DQo+ICAJCXN0 cnVjdCByZWcgcmVnOw0KPiBAQCAtNTcwLDcgKzU3MSw3IEBAIHN0YXRpYyBpbnQgaW50ZWxfcmVn X3JlYWQoc3RydWN0IGNvbmZpZyAqY29uZmlnLCBpbnQNCj4gYXJnYywgY2hhciAqYXJndltdKQ0K PiAgCQl9DQo+ICAJfQ0KPiAgDQo+IC0JaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2ZpbmkoKTsNCj4g KwlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfZmluaSgmY29uZmlnLT5tbWlvX2RhdGEpOw0KPiAgDQo+ ICAJcmV0dXJuIEVYSVRfU1VDQ0VTUzsNCj4gIH0NCj4gQEAgLTU4NCw3ICs1ODUsNyBAQCBzdGF0 aWMgaW50IGludGVsX3JlZ193cml0ZShzdHJ1Y3QgY29uZmlnICpjb25maWcsIGludA0KPiBhcmdj LCBjaGFyICphcmd2W10pDQo+ICAJCXJldHVybiBFWElUX0ZBSUxVUkU7DQo+ICAJfQ0KPiAgDQo+ IC0JaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2luaXQoY29uZmlnLT5wY2lfZGV2LCAwLCAtMSk7DQo+ ICsJaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2luaXQoJmNvbmZpZy0+bW1pb19kYXRhLCBjb25maWct PnBjaV9kZXYsIDAsDQo+IC0xKTsNCj4gIA0KPiAgCWZvciAoaSA9IDE7IGkgPCBhcmdjOyBpICs9 IDIpIHsNCj4gIAkJc3RydWN0IHJlZyByZWc7DQo+IEBAIC02MDksNyArNjEwLDcgQEAgc3RhdGlj IGludCBpbnRlbF9yZWdfd3JpdGUoc3RydWN0IGNvbmZpZyAqY29uZmlnLCBpbnQNCj4gYXJnYywg Y2hhciAqYXJndltdKQ0KPiAgCQl3cml0ZV9yZWdpc3Rlcihjb25maWcsICZyZWcsIHZhbCk7DQo+ ICAJfQ0KPiAgDQo+IC0JaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2ZpbmkoKTsNCj4gKwlpbnRlbF9y ZWdpc3Rlcl9hY2Nlc3NfZmluaSgmY29uZmlnLT5tbWlvX2RhdGEpOw0KPiAgDQo+ICAJcmV0dXJu IEVYSVRfU1VDQ0VTUzsNCj4gIH0NCj4gQEAgLTYyMCw5ICs2MjEsOSBAQCBzdGF0aWMgaW50IGlu dGVsX3JlZ19kdW1wKHN0cnVjdCBjb25maWcgKmNvbmZpZywgaW50DQo+IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkNCj4gIAlpbnQgaTsNCj4gIA0KPiAgCWlmIChjb25maWctPm1taW9maWxlKQ0KPiAtCQlp bnRlbF9tbWlvX3VzZV9kdW1wX2ZpbGUoY29uZmlnLT5tbWlvZmlsZSk7DQo+ICsJCWludGVsX21t aW9fdXNlX2R1bXBfZmlsZSgmY29uZmlnLT5tbWlvX2RhdGEsIGNvbmZpZy0NCj4gPm1taW9maWxl KTsNCj4gIAllbHNlDQo+IC0JCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19pbml0KGNvbmZpZy0+cGNp X2RldiwgMCwgLTEpOw0KPiArCQlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfaW5pdCgmY29uZmlnLT5t bWlvX2RhdGEsIGNvbmZpZy0NCj4gPnBjaV9kZXYsIDAsIC0xKTsNCj4gIA0KPiAgCWZvciAoaSA9 IDA7IGkgPCBjb25maWctPnJlZ2NvdW50OyBpKyspIHsNCj4gIAkJcmVnID0gJmNvbmZpZy0+cmVn c1tpXTsNCj4gQEAgLTYzNCw3ICs2MzUsNyBAQCBzdGF0aWMgaW50IGludGVsX3JlZ19kdW1wKHN0 cnVjdCBjb25maWcgKmNvbmZpZywgaW50DQo+IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCj4gIAkJZHVt cF9yZWdpc3Rlcihjb25maWcsICZjb25maWctPnJlZ3NbaV0pOw0KPiAgCX0NCj4gIA0KPiAtCWlu dGVsX3JlZ2lzdGVyX2FjY2Vzc19maW5pKCk7DQo+ICsJaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2Zp bmkoJmNvbmZpZy0+bW1pb19kYXRhKTsNCj4gIA0KPiAgCXJldHVybiBFWElUX1NVQ0NFU1M7DQo+ ICB9DQo+IEBAIC02NDgsNyArNjQ5LDcgQEAgc3RhdGljIGludCBpbnRlbF9yZWdfc25hcHNob3Qo c3RydWN0IGNvbmZpZyAqY29uZmlnLCBpbnQNCj4gYXJnYywgY2hhciAqYXJndltdKQ0KPiAgCQly ZXR1cm4gRVhJVF9GQUlMVVJFOw0KPiAgCX0NCj4gIA0KPiAtCWludGVsX21taW9fdXNlX3BjaV9i YXIoY29uZmlnLT5wY2lfZGV2KTsNCj4gKwlpbnRlbF9tbWlvX3VzZV9wY2lfYmFyKCZjb25maWct Pm1taW9fZGF0YSwgY29uZmlnLT5wY2lfZGV2KTsNCj4gIA0KPiAgCS8qIFhYWDogZXJyb3IgaGFu ZGxpbmcgKi8NCj4gIAlpZiAod3JpdGUoMSwgaWd0X2dsb2JhbF9tbWlvLCBjb25maWctPnBjaV9k ZXYtPnJlZ2lvbnNbbW1pb19iYXJdLnNpemUpIA0KPiA9PSAtMSkNCj4gZGlmZiAtLWdpdCBhL3Rv b2xzL2ludGVsX3JlZ19jaGVja2VyLmMgYi90b29scy9pbnRlbF9yZWdfY2hlY2tlci5jDQo+IGlu ZGV4IDZiZGU2M2VjLi43MzQwNGQwMiAxMDA2NDQNCj4gLS0tIGEvdG9vbHMvaW50ZWxfcmVnX2No ZWNrZXIuYw0KPiArKysgYi90b29scy9pbnRlbF9yZWdfY2hlY2tlci5jDQo+IEBAIC0zNDIsMTAg KzM0MiwxMSBAQCBjaGVja19kcGZjX2NvbnRyb2xfc2Eodm9pZCkNCj4gIGludCBtYWluKGludCBh cmdjLCBjaGFyKiogYXJndikNCj4gIHsNCj4gIAlzdHJ1Y3QgcGNpX2RldmljZSAqZGV2Ow0KPiAr CXN0cnVjdCBtbWlvX2RhdGEgbW1pb19kYXRhOw0KPiAgDQo+ICAJZGV2ID0gaW50ZWxfZ2V0X3Bj aV9kZXZpY2UoKTsNCj4gIAlkZXZpZCA9IGRldi0+ZGV2aWNlX2lkOw0KPiAtCWludGVsX21taW9f dXNlX3BjaV9iYXIoZGV2KTsNCj4gKwlpbnRlbF9tbWlvX3VzZV9wY2lfYmFyKCZtbWlvX2RhdGEs IGRldik7DQo+ICANCj4gIAlpZiAoSVNfR0VONyhkZXZpZCkpDQo+ICAJCWdlbiA9IDc7DQo+IGRp ZmYgLS1naXQgYS90b29scy9pbnRlbF93YXRlcm1hcmsuYyBiL3Rvb2xzL2ludGVsX3dhdGVybWFy ay5jDQo+IGluZGV4IGU3MWMzZDljLi4wOWU5YmYzNiAxMDA2NDQNCj4gLS0tIGEvdG9vbHMvaW50 ZWxfd2F0ZXJtYXJrLmMNCj4gKysrIGIvdG9vbHMvaW50ZWxfd2F0ZXJtYXJrLmMNCj4gQEAgLTIz Nyw2ICsyMzcsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqc2tsX252MTJfYnVmX2NmZ19yZWdfbmFt ZShpbnQgcGlwZSwNCj4gaW50IHBsYW5lKQ0KPiAgDQo+ICBzdGF0aWMgdm9pZCBza2xfd21fZHVt cCh2b2lkKQ0KPiAgew0KPiArCXN0cnVjdCBtbWlvX2RhdGEgbW1pb19kYXRhOw0KPiAgCWludCBw aXBlLCBwbGFuZSwgbGV2ZWw7DQo+ICAJaW50IG51bV9waXBlcyA9IDM7DQo+ICAJaW50IG1heF9w bGFuZXMgPSBza2xfbWF4X3BsYW5lcyhkZXZpZCk7DQo+IEBAIC0yNDksNyArMjUwLDcgQEAgc3Rh dGljIHZvaWQgc2tsX3dtX2R1bXAodm9pZCkNCj4gIAl1aW50MzJfdCBwbGFuZV9jdGxbbnVtX3Bp cGVzXVttYXhfcGxhbmVzXTsNCj4gIAl1aW50MzJfdCB3bV9saW5ldGltZVtudW1fcGlwZXNdOw0K PiAgDQo+IC0JaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2luaXQoaW50ZWxfZ2V0X3BjaV9kZXZpY2Uo KSwgMCwgLTEpOw0KPiArCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19pbml0KCZtbWlvX2RhdGEsIGlu dGVsX2dldF9wY2lfZGV2aWNlKCksIDAsIC0xKTsNCj4gIA0KPiAgCWZvciAocGlwZSA9IDA7IHBp cGUgPCBudW1fcGlwZXM7IHBpcGUrKykgew0KPiAgCQlpbnQgbnVtX3BsYW5lcyA9IHNrbF9udW1f cGxhbmVzKGRldmlkLCBwaXBlKTsNCj4gQEAgLTQ1OCw2ICs0NTksNyBAQCBzdGF0aWMgdm9pZCBz a2xfd21fZHVtcCh2b2lkKQ0KPiAgDQo+ICBzdGF0aWMgdm9pZCBpbGtfd21fZHVtcCh2b2lkKQ0K PiAgew0KPiArCXN0cnVjdCBtbWlvX2RhdGEgbW1pb19kYXRhOw0KPiAgCWludCBpOw0KPiAgCXVp bnQzMl90IGRzcGNudHJbM107DQo+ICAJdWludDMyX3Qgc3BjbnRyWzNdOw0KPiBAQCAtNDY5LDcg KzQ3MSw3IEBAIHN0YXRpYyB2b2lkIGlsa193bV9kdW1wKHZvaWQpDQo+ICAJaW50IG51bV9waXBl cyA9IGludGVsX2dlbihkZXZpZCkgPj0gNyA/IDMgOiAyOw0KPiAgCXN0cnVjdCBpbGtfd20gd20g PSB7fTsNCj4gIA0KPiAtCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19pbml0KGludGVsX2dldF9wY2lf ZGV2aWNlKCksIDAsIC0xKTsNCj4gKwlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfaW5pdCgmbW1pb19k YXRhLGludGVsX2dldF9wY2lfZGV2aWNlKCksIDAsIC0xKTsNCkFkZCBzcGFjZSBhZnRlciBjb21h IHRvIGJldHRlciByZWFkaWJpbGl0eS4NCg0KPiAgDQo+ICAJZm9yIChpID0gMDsgaSA8IG51bV9w aXBlczsgaSsrKSB7DQo+ICAJCWRzcGNudHJbaV0gPSByZWFkX3JlZygweDcwMTgwICsgaSAqIDB4 MTAwMCk7DQo+IEBAIC01MDUsNyArNTA3LDcgQEAgc3RhdGljIHZvaWQgaWxrX3dtX2R1bXAodm9p ZCkNCj4gIAlpZiAoSVNfQlJPQURXRUxMKGRldmlkKSB8fCBJU19IQVNXRUxMKGRldmlkKSkNCj4g IAkJd21fbWlzYyA9IHJlYWRfcmVnKDB4NDUyNjApOw0KPiAgDQo+IC0JaW50ZWxfcmVnaXN0ZXJf YWNjZXNzX2ZpbmkoKTsNCj4gKwlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfZmluaSgmbW1pb19kYXRh KTsNCj4gIA0KPiAgCWZvciAoaSA9IDA7IGkgPCBudW1fcGlwZXM7IGkrKykNCj4gIAkJcHJpbnRm KCIgICAgV01fUElQRV8lYyA9IDB4JTA4eFxuIiwgcGlwZV9uYW1lKGkpLCB3bV9waXBlW2ldKTsN Cj4gQEAgLTYxMCw2ICs2MTIsNyBAQCBzdGF0aWMgdm9pZCBpbGtfd21fZHVtcCh2b2lkKQ0KPiAg DQo+ICBzdGF0aWMgdm9pZCB2bHZfd21fZHVtcCh2b2lkKQ0KPiAgew0KPiArCXN0cnVjdCBtbWlv X2RhdGEgbW1pb19kYXRhOw0KPiAgCWludCBpOw0KPiAgCXVuc2lnbmVkIGludCBudW1fcGlwZXMg PSBJU19DSEVSUllWSUVXKGRldmlkKSA/IDMgOiAyOw0KPiAgCXVpbnQzMl90IGRzcGFyYiwgZHNw YXJiMiwgZHNwYXJiMzsNCj4gQEAgLTYxOSw3ICs2MjIsNyBAQCBzdGF0aWMgdm9pZCB2bHZfd21f ZHVtcCh2b2lkKQ0KPiAgCXVpbnQzMl90IGRzcF9zc19wbSwgZGRyX3NldHVwMjsNCj4gIAlzdHJ1 Y3QgZ21jaF93bSB3bXNbTUFYX1BMQU5FXSA9IHt9Ow0KPiAgDQo+IC0JaW50ZWxfcmVnaXN0ZXJf YWNjZXNzX2luaXQoaW50ZWxfZ2V0X3BjaV9kZXZpY2UoKSwgMCwgLTEpOw0KPiArCWludGVsX3Jl Z2lzdGVyX2FjY2Vzc19pbml0KCZtbWlvX2RhdGEsIGludGVsX2dldF9wY2lfZGV2aWNlKCksIDAs IC0xKTsNCj4gIA0KPiAgCWRzcGFyYiA9IHJlYWRfcmVnKDB4NzAwMzApOw0KPiAgCWRzcGFyYjIg PSByZWFkX3JlZygweDcwMDYwKTsNCj4gQEAgLTY1MCwxMyArNjUzLDEzIEBAIHN0YXRpYyB2b2lk IHZsdl93bV9kdW1wKHZvaWQpDQo+ICANCj4gIAkJZGRsMyA9IHJlYWRfcmVnKDB4NzAwNTgpOw0K PiAgDQo+IC0JCWludGVsX3B1bml0X3JlYWQoMHgzNiwgJmRzcF9zc19wbSk7DQo+IC0JCWludGVs X3B1bml0X3JlYWQoMHgxMzksICZkZHJfc2V0dXAyKTsNCj4gKwkJaW50ZWxfcHVuaXRfcmVhZCgm bW1pb19kYXRhLCAweDM2LCAmZHNwX3NzX3BtKTsNCj4gKwkJaW50ZWxfcHVuaXRfcmVhZCgmbW1p b19kYXRhLCAweDEzOSwgJmRkcl9zZXR1cDIpOw0KPiAgCX0gZWxzZSB7DQo+ICAJCWZ3NyA9IHJl YWRfcmVnKDB4NzAwN2MpOw0KPiAgCX0NCj4gIA0KPiAtCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19m aW5pKCk7DQo+ICsJaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2ZpbmkoJm1taW9fZGF0YSk7DQo+ICAN Cj4gIAlwcmludGYoIiAgICAgICAgRlcxID0gMHglMDh4XG4iLCBmdzEpOw0KPiAgCXByaW50Zigi ICAgICAgICBGVzIgPSAweCUwOHhcbiIsIGZ3Mik7DQo+IEBAIC04MjcsNiArODMwLDcgQEAgc3Rh dGljIHZvaWQgdmx2X3dtX2R1bXAodm9pZCkNCj4gIA0KPiAgc3RhdGljIHZvaWQgZzR4X3dtX2R1 bXAodm9pZCkNCj4gIHsNCj4gKwlzdHJ1Y3QgbW1pb19kYXRhIG1taW9fZGF0YTsNCj4gIAlpbnQg aTsNCj4gIAl1aW50MzJfdCBkc3BhY250ciwgZHNwYmNudHI7DQo+ICAJdWludDMyX3QgZHNwYXJi Ow0KPiBAQCAtODM1LDcgKzgzOSw3IEBAIHN0YXRpYyB2b2lkIGc0eF93bV9kdW1wKHZvaWQpDQo+ ICAJdWludDMyX3QgbWlfYXJiX3N0YXRlOw0KPiAgCXN0cnVjdCBnbWNoX3dtIHdtc1tNQVhfUExB TkVdID0ge307DQo+ICANCj4gLQlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfaW5pdChpbnRlbF9nZXRf cGNpX2RldmljZSgpLCAwLCAtMSk7DQo+ICsJaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2luaXQoJm1t aW9fZGF0YSwgaW50ZWxfZ2V0X3BjaV9kZXZpY2UoKSwgMCwgLTEpOw0KPiAgDQo+ICAJZHNwYWNu dHIgPSByZWFkX3JlZygweDcwMTgwKTsNCj4gIAlkc3BiY250ciA9IHJlYWRfcmVnKDB4NzExODAp Ow0KPiBAQCAtODQ2LDcgKzg1MCw3IEBAIHN0YXRpYyB2b2lkIGc0eF93bV9kdW1wKHZvaWQpDQo+ ICAJbWlfZGlzcGxheV9wb3dlcl9kb3duID0gcmVhZF9yZWcoMHgyMGUwKTsNCj4gIAltaV9hcmJf c3RhdGUgPSByZWFkX3JlZygweDIwZTQpOw0KPiAgDQo+IC0JaW50ZWxfcmVnaXN0ZXJfYWNjZXNz X2ZpbmkoKTsNCj4gKwlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfZmluaSgmbW1pb19kYXRhKTsNCj4g IA0KPiAgCXByaW50ZigiICAgICAgICAgICAgIERTUEFDTlRSID0gMHglMDh4XG4iLCBkc3BhY250 cik7DQo+ICAJcHJpbnRmKCIgICAgICAgICAgICAgRFNQQkNOVFIgPSAweCUwOHhcbiIsIGRzcGJj bnRyKTsNCj4gQEAgLTkxMyw2ICs5MTcsNyBAQCBzdGF0aWMgdm9pZCBnNHhfd21fZHVtcCh2b2lk KQ0KPiAgDQo+ICBzdGF0aWMgdm9pZCBnZW40X3dtX2R1bXAodm9pZCkNCj4gIHsNCj4gKwlzdHJ1 Y3QgbW1pb19kYXRhIG1taW9fZGF0YTsNCj4gIAlpbnQgaTsNCj4gIAlpbnQgdG90YWxzaXplID0g SVNfQ1JFU1RMSU5FKGRldmlkKSA/IDEyOCA6IDk2Ow0KPiAgCXVpbnQzMl90IGRzcGFyYjsNCj4g QEAgLTkyMSw3ICs5MjYsNyBAQCBzdGF0aWMgdm9pZCBnZW40X3dtX2R1bXAodm9pZCkNCj4gIAl1 aW50MzJfdCBtaV9hcmJfc3RhdGU7DQo+ICAJc3RydWN0IGdtY2hfd20gd21zW01BWF9QTEFORV0g PSB7fTsNCj4gIA0KPiAtCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19pbml0KGludGVsX2dldF9wY2lf ZGV2aWNlKCksIDAsIC0xKTsNCj4gKwlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfaW5pdCgmbW1pb19k YXRhLCBpbnRlbF9nZXRfcGNpX2RldmljZSgpLCAwLCAtMSk7DQo+ICANCj4gIAlkc3BhcmIgPSBy ZWFkX3JlZygweDcwMDMwKTsNCj4gIAlmdzEgPSByZWFkX3JlZygweDcwMDM0KTsNCj4gQEAgLTkz MCw3ICs5MzUsNyBAQCBzdGF0aWMgdm9pZCBnZW40X3dtX2R1bXAodm9pZCkNCj4gIAltaV9kaXNw bGF5X3Bvd2VyX2Rvd24gPSByZWFkX3JlZygweDIwZTApOw0KPiAgCW1pX2FyYl9zdGF0ZSA9IHJl YWRfcmVnKDB4MjBlNCk7DQo+ICANCj4gLQlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfZmluaSgpOw0K PiArCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19maW5pKCZtbWlvX2RhdGEpOw0KPiAgDQo+ICAJcHJp bnRmKCIgICAgICAgICAgICAgICAgICBGVzEgPSAweCUwOHhcbiIsIGZ3MSk7DQo+ICAJcHJpbnRm KCIgICAgICAgICAgICAgICAgICBGVzIgPSAweCUwOHhcbiIsIGZ3Mik7DQo+IEBAIC05ODMsNiAr OTg4LDcgQEAgc3RhdGljIHZvaWQgZ2VuNF93bV9kdW1wKHZvaWQpDQo+ICANCj4gIHN0YXRpYyB2 b2lkIHBudl93bV9kdW1wKHZvaWQpDQo+ICB7DQo+ICsJc3RydWN0IG1taW9fZGF0YSBtbWlvX2Rh dGE7DQo+ICAJaW50IGk7DQo+ICAJaW50IHRvdGFsc2l6ZSA9IDk2OyAvKiBGSVhNRT8gKi8NCj4g IAl1aW50MzJfdCBkc3BhcmI7DQo+IEBAIC05OTIsNyArOTk4LDcgQEAgc3RhdGljIHZvaWQgcG52 X3dtX2R1bXAodm9pZCkNCj4gIAl1aW50MzJfdCBjYnI7DQo+ICAJc3RydWN0IGdtY2hfd20gd21z W01BWF9QTEFORV0gPSB7fTsNCj4gIA0KPiAtCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19pbml0KGlu dGVsX2dldF9wY2lfZGV2aWNlKCksIDAsIC0xKTsNCj4gKwlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3Nf aW5pdCgmbW1pb19kYXRhLCBpbnRlbF9nZXRfcGNpX2RldmljZSgpLCAwLCAtMSk7DQo+ICANCj4g IAlkc3BhcmIgPSByZWFkX3JlZygweDcwMDMwKTsNCj4gIAlmdzEgPSByZWFkX3JlZygweDcwMDM0 KTsNCj4gQEAgLTEwMDIsNyArMTAwOCw3IEBAIHN0YXRpYyB2b2lkIHBudl93bV9kdW1wKHZvaWQp DQo+ICAJbWlfZGlzcGxheV9wb3dlcl9kb3duID0gcmVhZF9yZWcoMHgyMGUwKTsNCj4gIAltaV9h cmJfc3RhdGUgPSByZWFkX3JlZygweDIwZTQpOw0KPiAgDQo+IC0JaW50ZWxfcmVnaXN0ZXJfYWNj ZXNzX2ZpbmkoKTsNCj4gKwlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfZmluaSgmbW1pb19kYXRhKTsN Cj4gIA0KPiAgCXByaW50ZigiICAgICAgICAgICAgICAgRFNQQVJCID0gMHglMDh4XG4iLCBkc3Bh cmIpOw0KPiAgCXByaW50ZigiICAgICAgICAgICAgICAgICAgRlcxID0gMHglMDh4XG4iLCBmdzEp Ow0KPiBAQCAtMTA3Myw2ICsxMDc5LDcgQEAgc3RhdGljIHZvaWQgcG52X3dtX2R1bXAodm9pZCkN Cj4gIA0KPiAgc3RhdGljIHZvaWQgZ2VuM193bV9kdW1wKHZvaWQpDQo+ICB7DQo+ICsJc3RydWN0 IG1taW9fZGF0YSBtbWlvX2RhdGE7DQo+ICAJaW50IGk7DQo+ICAJaW50IHRvdGFsc2l6ZSA9IElT Xzk0NUdNKGRldmlkKSA/IDEyOCA6IDk2OyAvKiBGSVhNRT8gKi8NCj4gIAl1aW50MzJfdCBkc3Bh cmI7DQo+IEBAIC0xMDgyLDcgKzEwODksNyBAQCBzdGF0aWMgdm9pZCBnZW4zX3dtX2R1bXAodm9p ZCkNCj4gIAl1aW50MzJfdCBtaV9hcmJfc3RhdGU7DQo+ICAJc3RydWN0IGdtY2hfd20gd21zW01B WF9QTEFORV0gPSB7fTsNCj4gIA0KPiAtCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19pbml0KGludGVs X2dldF9wY2lfZGV2aWNlKCksIDAsIC0xKTsNCj4gKwlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfaW5p dCgmbW1pb19kYXRhLCBpbnRlbF9nZXRfcGNpX2RldmljZSgpLCAwLCAtMSk7DQo+ICANCj4gIAlk c3BhcmIgPSByZWFkX3JlZygweDcwMDMwKTsNCj4gIAlpbnN0cG0gPSByZWFkX3JlZygweDIwYzAp Ow0KPiBAQCAtMTA5MCw3ICsxMDk3LDcgQEAgc3RhdGljIHZvaWQgZ2VuM193bV9kdW1wKHZvaWQp DQo+ICAJZndfYmxjX3NlbGYgPSByZWFkX3JlZygweDIwZTApOw0KPiAgCW1pX2FyYl9zdGF0ZSA9 IHJlYWRfcmVnKDB4MjBlNCk7DQo+ICANCj4gLQlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfZmluaSgp Ow0KPiArCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19maW5pKCZtbWlvX2RhdGEpOw0KPiAgDQo+ICAJ cHJpbnRmKCIgICAgICBEU1BBUkIgPSAweCUwOHhcbiIsIGRzcGFyYik7DQo+ICAJcHJpbnRmKCIg ICAgICBGV19CTEMgPSAweCUwMTYiIFBSSXg2NCAiXG4iLCBmd19ibGMpOw0KPiBAQCAtMTE0Miw2 ICsxMTQ5LDcgQEAgc3RhdGljIHZvaWQgZ2VuM193bV9kdW1wKHZvaWQpDQo+ICANCj4gIHN0YXRp YyB2b2lkIGdlbjJfd21fZHVtcCh2b2lkKQ0KPiAgew0KPiArCXN0cnVjdCBtbWlvX2RhdGEgbW1p b19kYXRhOw0KPiAgCWludCBpOw0KPiAgCWludCB0b3RhbHNpemU7DQo+ICAJdWludDMyX3QgZHNw YXJiOw0KPiBAQCAtMTE1MSw3ICsxMTU5LDcgQEAgc3RhdGljIHZvaWQgZ2VuMl93bV9kdW1wKHZv aWQpDQo+ICAJdWludDMyX3QgbWlfc3RhdGU7DQo+ICAJc3RydWN0IGdtY2hfd20gd21zW01BWF9Q TEFORV0gPSB7fTsNCj4gIA0KPiAtCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19pbml0KGludGVsX2dl dF9wY2lfZGV2aWNlKCksIDAsIC0xKTsNCj4gKwlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfaW5pdCgm bW1pb19kYXRhLCBpbnRlbF9nZXRfcGNpX2RldmljZSgpLCAwLCAtMSk7DQo+ICANCj4gIAlkc3Bh cmIgPSByZWFkX3JlZygweDcwMDMwKTsNCj4gIAltZW1fbW9kZSA9IHJlYWRfcmVnKDB4MjBjYyk7 DQo+IEBAIC0xMTU5LDcgKzExNjcsNyBAQCBzdGF0aWMgdm9pZCBnZW4yX3dtX2R1bXAodm9pZCkN Cj4gIAlmd19ibGNfc2VsZiA9IHJlYWRfcmVnKDB4MjBlMCk7DQo+ICAJbWlfc3RhdGUgPSByZWFk X3JlZygweDIwZTQpOw0KPiAgDQo+IC0JaW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2ZpbmkoKTsNCj4g KwlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfZmluaSgmbW1pb19kYXRhKTsNCj4gIA0KPiAgCXByaW50 ZigiICAgICBEU1BBUkIgPSAweCUwOHhcbiIsIGRzcGFyYik7DQo+ICAJcHJpbnRmKCIgICBNRU1f TU9ERSA9IDB4JTA4eFxuIiwgbWVtX21vZGUpOw0KDQpMR1RNLCBmaXggdHdvIGlzc3VlcyBwb2lu dGVkIGFib3ZlLiBUaGVuIFJCLiANCg0KWmJpZ25pZXcNCg0KDQoNCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0CmlndC1k ZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaWd0LWRldg==