From mboxrd@z Thu Jan 1 00:00:00 1970 From: "james qian wang (Arm Technology China)" Subject: Re: [PATCH v3 7/9] drm/komeda: Attach komeda_dev to DRM-KMS Date: Thu, 27 Dec 2018 07:09:07 +0000 Message-ID: <20181227070853.GC26908@james-ThinkStation-P300> References: <20181221095757.15510-1-james.qian.wang@arm.com> <20181221095757.15510-8-james.qian.wang@arm.com> <20181224123213.GI22341@e110455-lin.cambridge.arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181224123213.GI22341@e110455-lin.cambridge.arm.com> Content-Language: en-US Content-ID: <350EC61666708443877093D2BD12BAB1@eurprd08.prod.outlook.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Liviu Dudau Cc: Mark Rutland , "linux-doc@vger.kernel.org" , "maxime.ripard@bootlin.com" , "Jonathan Chai (Arm Technology China)" , Alexandru-Cosmin Gheorghe , "dri-devel@lists.freedesktop.org" , "linux-kernel@vger.kernel.org" , "yamada.masahiro@socionext.com" , "Yiqi Kang (Arm Technology China)" , "mchehab+samsung@kernel.org" , "Tiannan Zhu (Arm Technology China)" , "corbet@lwn.net" , "airlied@linux.ie" , "malidp@foss.arm.com" , "thomas Sun (Arm Technology China)" , Ayan Halder , devicetree List-Id: devicetree@vger.kernel.org T24gTW9uLCBEZWMgMjQsIDIwMTggYXQgMDg6MzI6MTRQTSArMDgwMCwgTGl2aXUgRHVkYXUgd3Jv dGU6DQo+IE9uIEZyaSwgRGVjIDIxLCAyMDE4IGF0IDEwOjAwOjMzQU0gKzAwMDAsIGphbWVzIHFp YW4gd2FuZyAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIHdyb3RlOg0KPiA+IEFkZCBrb21lZGFfa21z IGFic3RyYWN0b24gdG8gYXR0YWNoIGtvbWVkYV9kZXYgdG8gRFJNLUtNUw0KPiA+ICAgQ1JUQzog YWNjb3JkaW5nIHRvIHRoZSBrb21lZGFfcGlwZWxpbmUNCj4gPiAgIFBMQU5FOiBhY2NvcmRpbmcg dG8ga29tZWRhX2xheWVyIChsYXllciBpbnB1dCBwaXBlbGluZSkNCj4gPiAgIFBSSVZBVEVfT0JK Uzoga29tZWRhX3BpcGVsaW5lL2NvbXBvbmVudCBhbGwgd2lsbCBiZSB0cmVhdCBhcyBwcml2YXRl X29ianMNCj4gPiANCj4gPiBrb21lZGFfa21zIGlzIGZvciBjb25uZWN0aW5nIERSTS1LTVMgYW5k IGtvbWVkYV9kZXYsIGxpa2UgcmVwb3J0aW5nIHRoZQ0KPiA+IGttcyBvYmplY3QgcHJvcGVydGll cyBhY2NvcmRpbmcgdG8gdGhlIGtvbWVkYV9kZXYsIGFuZCBwYXNzL2NvbnZlcnQgS01TJ3MNCj4g PiByZXF1aXJlbWVudCB0byBrb21lZGFfZGV2Lg0KPiA+IA0KPiA+IENoYW5nZXMgaW4gdjM6DQo+ ID4gLSBGaXhlZCBzdHlsZSBwcm9ibGVtIGZvdW5kIGJ5IGNoZWNrcGF0Y2gucGwgLS1zdHJpY3Qu DQo+ID4gDQo+ID4gQ2hhbmdlcyBpbiB2MjoNCj4gPiAtIFVuaWZpZWQgYWJicmV2aWF0aW9uIG9m ICJwaXBlbGluZSIgdG8gInBpcGUiLg0KPiA+IA0KPiA+IFNpZ25lZC1vZmYtYnk6IEphbWVzIChR aWFuKSBXYW5nIDxqYW1lcy5xaWFuLndhbmdAYXJtLmNvbT4NCj4gPiAtLS0NCj4gPiAgZHJpdmVy cy9ncHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9NYWtlZmlsZSAgIHwgICA2ICstDQo+ID4gIC4u Li9ncHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9rb21lZGFfY3J0Yy5jICB8IDEwNiArKysrKysr KysrKw0KPiA+ICAuLi4vZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEva29tZWRhX2Rydi5jICAg fCAgMTkgKy0NCj4gPiAgLi4uL2dwdS9kcm0vYXJtL2Rpc3BsYXkva29tZWRhL2tvbWVkYV9rbXMu YyAgIHwgMTY5ICsrKysrKysrKysrKysrKysrKw0KPiA+ICAuLi4vZ3B1L2RybS9hcm0vZGlzcGxh eS9rb21lZGEva29tZWRhX2ttcy5oICAgfCAxMTMgKysrKysrKysrKysrDQo+ID4gIC4uLi9kcm0v YXJtL2Rpc3BsYXkva29tZWRhL2tvbWVkYV9waXBlbGluZS5oICB8ICAgMyArDQo+ID4gIC4uLi9n cHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9rb21lZGFfcGxhbmUuYyB8IDEwOSArKysrKysrKysr Kw0KPiA+ICAuLi4vYXJtL2Rpc3BsYXkva29tZWRhL2tvbWVkYV9wcml2YXRlX29iai5jICAgfCAg ODggKysrKysrKysrDQo+ID4gIDggZmlsZXMgY2hhbmdlZCwgNjA4IGluc2VydGlvbnMoKyksIDUg ZGVsZXRpb25zKC0pDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJt L2Rpc3BsYXkva29tZWRhL2tvbWVkYV9jcnRjLmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEva29tZWRhX2ttcy5jDQo+ID4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYXJtL2Rpc3BsYXkva29tZWRhL2tvbWVkYV9r bXMuaA0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2FybS9kaXNwbGF5 L2tvbWVkYS9rb21lZGFfcGxhbmUuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9n cHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9rb21lZGFfcHJpdmF0ZV9vYmouYw0KPiA+IA0KPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL2Rpc3BsYXkva29tZWRhL01ha2VmaWxl IGIvZHJpdmVycy9ncHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9NYWtlZmlsZQ0KPiA+IGluZGV4 IDI1YmVhZTkwMGVkMi4uMWI4NzVlNWRjMGY2IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hcm0vZGlzcGxheS9rb21lZGEvTWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vYXJtL2Rpc3BsYXkva29tZWRhL01ha2VmaWxlDQo+ID4gQEAgLTksNyArOSwxMSBAQCBrb21l ZGEteSA6PSBcDQo+ID4gIAlrb21lZGFfZGV2Lm8gXA0KPiA+ICAJa29tZWRhX2Zvcm1hdF9jYXBz Lm8gXA0KPiA+ICAJa29tZWRhX3BpcGVsaW5lLm8gXA0KPiA+IC0Ja29tZWRhX2ZyYW1lYnVmZmVy Lm8NCj4gPiArCWtvbWVkYV9mcmFtZWJ1ZmZlci5vIFwNCj4gPiArCWtvbWVkYV9rbXMubyBcDQo+ ID4gKwlrb21lZGFfY3J0Yy5vIFwNCj4gPiArCWtvbWVkYV9wbGFuZS5vIFwNCj4gPiArCWtvbWVk YV9wcml2YXRlX29iai5vDQo+ID4gIA0KPiA+ICBrb21lZGEteSArPSBcDQo+ID4gIAlkNzEvZDcx X2Rldi5vDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21l ZGEva29tZWRhX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEva29t ZWRhX2NydGMuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAw MDAwLi41YmI1YTU1ZjZiMzENCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9rb21lZGFfY3J0Yy5jDQo+ID4gQEAgLTAsMCArMSwx MDYgQEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoN Cj4gPiArICogKEMpIENPUFlSSUdIVCAyMDE4IEFSTSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLg0KPiA+ICsgKiBBdXRob3I6IEphbWVzLlFpYW4uV2FuZyA8amFtZXMucWlhbi53YW5nQGFy bS5jb20+DQo+ID4gKyAqDQo+ID4gKyAqLw0KPiA+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPg0KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9h dG9taWMuaD4NCj4gPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPg0KPiA+ICsj aW5jbHVkZSA8ZHJtL2RybV9wbGFuZV9oZWxwZXIuaD4NCj4gPiArI2luY2x1ZGUgPGRybS9kcm1f Y3J0Y19oZWxwZXIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCj4gPiAr I2luY2x1ZGUgImtvbWVkYV9kZXYuaCINCj4gPiArI2luY2x1ZGUgImtvbWVkYV9rbXMuaCINCj4g PiArDQo+ID4gK3N0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3Mga29tZWRhX2NydGNfaGVscGVy X2Z1bmNzID0gew0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f Y3J0Y19mdW5jcyBrb21lZGFfY3J0Y19mdW5jcyA9IHsNCj4gPiArfTsNCj4gPiArDQo+ID4gK2lu dCBrb21lZGFfa21zX3NldHVwX2NydGNzKHN0cnVjdCBrb21lZGFfa21zX2RldiAqa21zLA0KPiA+ ICsJCQkgICBzdHJ1Y3Qga29tZWRhX2RldiAqbWRldikNCj4gPiArew0KPiA+ICsJc3RydWN0IGtv bWVkYV9jcnRjICpjcnRjOw0KPiA+ICsJc3RydWN0IGtvbWVkYV9waXBlbGluZSAqbWFzdGVyOw0K PiA+ICsJY2hhciBzdHJbMTZdOw0KPiA+ICsJaW50IGk7DQo+ID4gKw0KPiA+ICsJa21zLT5uX2Ny dGNzID0gMDsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbWRldi0+bl9waXBlbGluZXM7 IGkrKykgew0KPiA+ICsJCWNydGMgPSAma21zLT5jcnRjc1trbXMtPm5fY3J0Y3NdOw0KPiA+ICsJ CW1hc3RlciA9IG1kZXYtPnBpcGVsaW5lc1tpXTsNCj4gPiArDQo+ID4gKwkJY3J0Yy0+bWFzdGVy ID0gbWFzdGVyOw0KPiA+ICsJCWNydGMtPnNsYXZlICA9IE5VTEw7DQo+ID4gKw0KPiA+ICsJCWlm IChjcnRjLT5zbGF2ZSkNCj4gPiArCQkJc3ByaW50ZihzdHIsICJwaXBlLSVkIiwgY3J0Yy0+c2xh dmUtPmlkKTsNCj4gPiArCQllbHNlDQo+ID4gKwkJCXNwcmludGYoc3RyLCAiTm9uZSIpOw0KPiA+ ICsNCj4gPiArCQlEUk1fSU5GTygiY3J0YyVkOiBtYXN0ZXIocGlwZS0lZCkgc2xhdmUoJXMpIG91 dHB1dDogJXMuXG4iLA0KPiA+ICsJCQkga21zLT5uX2NydGNzLCBtYXN0ZXItPmlkLCBzdHIsDQo+ ID4gKwkJCSBtYXN0ZXItPm9mX291dHB1dF9kZXYgPw0KPiA+ICsJCQkgbWFzdGVyLT5vZl9vdXRw dXRfZGV2LT5mdWxsX25hbWUgOiAiTm9uZSIpOw0KPiA+ICsNCj4gPiArCQlrbXMtPm5fY3J0Y3Mr KzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIHN0cnVjdCBkcm1fcGxhbmUgKg0KPiA+ICtnZXRfY3J0Y19wcmltYXJ5KHN0cnVjdCBr b21lZGFfa21zX2RldiAqa21zLCBzdHJ1Y3Qga29tZWRhX2NydGMgKmNydGMpDQo+ID4gK3sNCj4g PiArCXN0cnVjdCBrb21lZGFfcGxhbmUgKmtwbGFuZTsNCj4gPiArCXN0cnVjdCBkcm1fcGxhbmUg KnBsYW5lOw0KPiA+ICsNCj4gPiArCWRybV9mb3JfZWFjaF9wbGFuZShwbGFuZSwgJmttcy0+YmFz ZSkgew0KPiA+ICsJCWlmIChwbGFuZS0+dHlwZSAhPSBEUk1fUExBTkVfVFlQRV9QUklNQVJZKQ0K PiA+ICsJCQljb250aW51ZTsNCj4gPiArDQo+ID4gKwkJa3BsYW5lID0gdG9fa3BsYW5lKHBsYW5l KTsNCj4gPiArCQkvKiBvbmx5IG1hc3RlciBjYW4gYmUgcHJpbWFyeSAqLw0KPiA+ICsJCWlmIChr cGxhbmUtPmxheWVyLT5iYXNlLnBpcGVsaW5lID09IGNydGMtPm1hc3RlcikNCj4gPiArCQkJcmV0 dXJuIHBsYW5lOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiBOVUxMOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW50IGtvbWVkYV9jcnRjX2FkZChzdHJ1Y3Qga29tZWRhX2ttc19k ZXYgKmttcywNCj4gPiArCQkJICAgc3RydWN0IGtvbWVkYV9jcnRjICprY3J0YykNCj4gPiArew0K PiA+ICsJc3RydWN0IGRybV9jcnRjICpjcnRjID0gJmtjcnRjLT5iYXNlOw0KPiA+ICsJaW50IGVy cjsNCj4gPiArDQo+ID4gKwllcnIgPSBkcm1fY3J0Y19pbml0X3dpdGhfcGxhbmVzKCZrbXMtPmJh c2UsIGNydGMsDQo+ID4gKwkJCQkJZ2V0X2NydGNfcHJpbWFyeShrbXMsIGtjcnRjKSwgTlVMTCwN Cj4gPiArCQkJCQkma29tZWRhX2NydGNfZnVuY3MsIE5VTEwpOw0KPiA+ICsJaWYgKGVycikNCj4g PiArCQlyZXR1cm4gZXJyOw0KPiA+ICsNCj4gPiArCWRybV9jcnRjX2hlbHBlcl9hZGQoY3J0Yywg JmtvbWVkYV9jcnRjX2hlbHBlcl9mdW5jcyk7DQo+ID4gKwlkcm1fY3J0Y192YmxhbmtfcmVzZXQo Y3J0Yyk7DQo+ID4gKw0KPiA+ICsJY3J0Yy0+cG9ydCA9IGtjcnRjLT5tYXN0ZXItPm9mX291dHB1 dF9wb3J0Ow0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQg a29tZWRhX2ttc19hZGRfY3J0Y3Moc3RydWN0IGtvbWVkYV9rbXNfZGV2ICprbXMsIHN0cnVjdCBr b21lZGFfZGV2ICptZGV2KQ0KPiA+ICt7DQo+ID4gKwlpbnQgaSwgZXJyOw0KPiA+ICsNCj4gPiAr CWZvciAoaSA9IDA7IGkgPCBrbXMtPm5fY3J0Y3M7IGkrKykgew0KPiA+ICsJCWVyciA9IGtvbWVk YV9jcnRjX2FkZChrbXMsICZrbXMtPmNydGNzW2ldKTsNCj4gPiArCQlpZiAoZXJyKQ0KPiA+ICsJ CQlyZXR1cm4gZXJyOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEva29tZWRh X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9rb21lZGFfZHJ2LmMN Cj4gPiBpbmRleCBhMjY1N2IzZDA5ZDcuLjRiOGNlNzE3YTcxYyAxMDA2NDQNCj4gPiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vYXJtL2Rpc3BsYXkva29tZWRhL2tvbWVkYV9kcnYuYw0KPiA+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEva29tZWRhX2Rydi5jDQo+ID4gQEAg LTEzLDE4ICsxMywyMSBAQA0KPiA+ICANCj4gPiAgc3RydWN0IGtvbWVkYV9kcnYgew0KPiA+ICAJ c3RydWN0IGtvbWVkYV9kZXYgKm1kZXY7DQo+ID4gKwlzdHJ1Y3Qga29tZWRhX2ttc19kZXYgKmtt czsNCj4gPiAgfTsNCj4gPiAgDQo+ID4gIHN0YXRpYyB2b2lkIGtvbWVkYV91bmJpbmQoc3RydWN0 IGRldmljZSAqZGV2KQ0KPiA+ICB7DQo+ID4gIAlzdHJ1Y3Qga29tZWRhX2RydiAqbWRydiA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICANCj4gPiAtCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5V TEwpOw0KPiA+IC0NCj4gDQo+IEkgd291bGQgYXJndWUgdGhhdCB5b3UncmUgZml4aW5nIGEgYnVn IGhlcmUgdGhhdCB3YXMgaW50cm9kdWNlZCBpbiBhbg0KPiBlYXJsaWVyIHBhdGNoLCBhbmQgdGhh dCB5b3Ugc2hvdWxkIGZpeCB0aGF0IHBhdGNoIHJhdGhlciB0aGFuIHRoaXMNCj4gY2hhbmdlLg0K DQpTb3JyeSwgeW91J3JlIHJpZ2h0LCB3aWxsIGZpeCBpdCB0aGUgbmV4dCB2ZXJzaW9uLg0KDQo+ ID4gIAlpZiAoIW1kcnYpDQo+ID4gIAkJcmV0dXJuOw0KPiA+ICANCj4gPiArCWtvbWVkYV9rbXNf ZGV0YWNoKG1kcnYtPmttcyk7DQo+ID4gKw0KPiA+ICAJa29tZWRhX2Rldl9kZXN0cm95KG1kcnYt Pm1kZXYpOw0KPiA+ICsNCj4gPiArCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOw0KPiA+ICAJ a2ZyZWUobWRydik7DQo+ID4gIH0NCj4gPiAgDQo+ID4gQEAgLTMzLDcgKzM2LDcgQEAgc3RhdGlj IGludCBrb21lZGFfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4gIAlzdHJ1Y3Qga29tZWRh X2RydiAqbWRydjsNCj4gPiAgCWludCBlcnI7DQo+ID4gIA0KPiA+IC0JbWRydiA9IGt6YWxsb2Mo c2l6ZW9mKCptZHJ2KSwgR0ZQX0tFUk5FTCk7DQo+ID4gKwltZHJ2ID0gZGV2bV9remFsbG9jKGRl diwgc2l6ZW9mKCptZHJ2KSwgR0ZQX0tFUk5FTCk7DQo+ID4gIAlpZiAoIW1kcnYpDQo+ID4gIAkJ cmV0dXJuIC1FTk9NRU07DQo+ID4gIA0KPiA+IEBAIC00NSwxMCArNDgsMTggQEAgc3RhdGljIGlu dCBrb21lZGFfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpDQo+ID4gIA0KPiA+ICAJZGV2X3NldF9k cnZkYXRhKGRldiwgbWRydik7DQo+ID4gIA0KPiA+ICsJbWRydi0+a21zID0ga29tZWRhX2ttc19h dHRhY2gobWRydi0+bWRldik7DQo+ID4gKwlpZiAoSVNfRVJSKG1kcnYtPmttcykpIHsNCj4gPiAr CQllcnIgPSBQVFJfRVJSKG1kcnYtPmttcyk7DQo+IA0KPiBkb2VzIG1kcnYtPmttcyBuZWVkcyB0 byBiZSBzZXQgdG8gTlVMTCBoZXJlPw0KPiANCj4gPiArCQlnb3RvIGRlc3Ryb3lfbWRldjsNCj4g PiArCX0NCj4gPiArDQo+ID4gIAlyZXR1cm4gMDsNCj4gPiAgDQo+ID4gK2Rlc3Ryb3lfbWRldjoN Cj4gPiArCWtvbWVkYV9kZXZfZGVzdHJveShtZHJ2LT5tZGV2KTsNCj4gPiAgZnJlZV9tZHJ2Og0K PiA+IC0Ja2ZyZWUobWRydik7DQo+ID4gKwlkZXZtX2tmcmVlKGRldiwgbWRydik7DQo+ID4gIAly ZXR1cm4gZXJyOw0KPiA+ICB9DQo+ID4gIA0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYXJtL2Rpc3BsYXkva29tZWRhL2tvbWVkYV9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0v ZGlzcGxheS9rb21lZGEva29tZWRhX2ttcy5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4g PiBpbmRleCAwMDAwMDAwMDAwMDAuLmZkNDgzNjBjYTUyNA0KPiA+IC0tLSAvZGV2L251bGwNCj4g PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL2Rpc3BsYXkva29tZWRhL2tvbWVkYV9rbXMuYw0K PiA+IEBAIC0wLDAgKzEsMTY5IEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wDQo+ID4gKy8qDQo+ID4gKyAqIChDKSBDT1BZUklHSFQgMjAxOCBBUk0gTGltaXRlZC4g QWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gPiArICogQXV0aG9yOiBKYW1lcy5RaWFuLldhbmcgPGph bWVzLnFpYW4ud2FuZ0Bhcm0uY29tPg0KPiA+ICsgKg0KPiA+ICsgKi8NCj4gPiArI2luY2x1ZGUg PGxpbnV4L2NvbXBvbmVudC5oPg0KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4NCj4g PiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPg0KPiA+ICsjaW5jbHVkZSA8ZHJt L2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVyLmg+DQo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2dl bV9jbWFfaGVscGVyLmg+DQo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+ID4gKyNpbmNsdWRlICJrb21lZGFfZGV2 LmgiDQo+ID4gKyNpbmNsdWRlICJrb21lZGFfa21zLmgiDQo+ID4gKyNpbmNsdWRlICJrb21lZGFf ZnJhbWVidWZmZXIuaCINCj4gPiArDQo+ID4gK0RFRklORV9EUk1fR0VNX0NNQV9GT1BTKGtvbWVk YV9jbWFfZm9wcyk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGtvbWVkYV9nZW1fY21hX2R1bWJf Y3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZSwNCj4gPiArCQkJCSAgICAgIHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsDQo+ID4gKwkJCQkgICAgICBzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIg KmFyZ3MpDQo+ID4gK3sNCj4gPiArCXUzMiBhbGlnbm1lbnQgPSAxNjsgLyogVE9ETyBnZXQgYWxp Z25tZW50IGZyb20gZGV2ICovDQo+ID4gKw0KPiA+ICsJYXJncy0+cGl0Y2ggPSBBTElHTihESVZf Uk9VTkRfVVAoYXJncy0+d2lkdGggKiBhcmdzLT5icHAsIDgpLA0KPiA+ICsJCQkgICAgYWxpZ25t ZW50KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gZHJtX2dlbV9jbWFfZHVtYl9jcmVhdGVfaW50ZXJu YWwoZmlsZSwgZGV2LCBhcmdzKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBk cm1fZHJpdmVyIGtvbWVkYV9rbXNfZHJpdmVyID0gew0KPiA+ICsJLmRyaXZlcl9mZWF0dXJlcyA9 IERSSVZFUl9HRU0gfCBEUklWRVJfTU9ERVNFVCB8IERSSVZFUl9BVE9NSUMgfA0KPiA+ICsJCQkg ICBEUklWRVJfUFJJTUUsDQo+ID4gKwkubGFzdGNsb3NlCQkJPSBkcm1fZmJfaGVscGVyX2xhc3Rj bG9zZSwNCj4gPiArCS5nZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQJPSBkcm1fZ2VtX2NtYV9mcmVl X29iamVjdCwNCj4gPiArCS5nZW1fdm1fb3BzCQkJPSAmZHJtX2dlbV9jbWFfdm1fb3BzLA0KPiA+ ICsJLmR1bWJfY3JlYXRlCQkJPSBrb21lZGFfZ2VtX2NtYV9kdW1iX2NyZWF0ZSwNCj4gPiArCS5w cmltZV9oYW5kbGVfdG9fZmQJCT0gZHJtX2dlbV9wcmltZV9oYW5kbGVfdG9fZmQsDQo+ID4gKwku cHJpbWVfZmRfdG9faGFuZGxlCQk9IGRybV9nZW1fcHJpbWVfZmRfdG9faGFuZGxlLA0KPiA+ICsJ LmdlbV9wcmltZV9leHBvcnQJCT0gZHJtX2dlbV9wcmltZV9leHBvcnQsDQo+ID4gKwkuZ2VtX3By aW1lX2ltcG9ydAkJPSBkcm1fZ2VtX3ByaW1lX2ltcG9ydCwNCj4gPiArCS5nZW1fcHJpbWVfZ2V0 X3NnX3RhYmxlCQk9IGRybV9nZW1fY21hX3ByaW1lX2dldF9zZ190YWJsZSwNCj4gPiArCS5nZW1f cHJpbWVfaW1wb3J0X3NnX3RhYmxlCT0gZHJtX2dlbV9jbWFfcHJpbWVfaW1wb3J0X3NnX3RhYmxl LA0KPiA+ICsJLmdlbV9wcmltZV92bWFwCQkJPSBkcm1fZ2VtX2NtYV9wcmltZV92bWFwLA0KPiA+ ICsJLmdlbV9wcmltZV92dW5tYXAJCT0gZHJtX2dlbV9jbWFfcHJpbWVfdnVubWFwLA0KPiA+ICsJ LmdlbV9wcmltZV9tbWFwCQkJPSBkcm1fZ2VtX2NtYV9wcmltZV9tbWFwLA0KPiA+ICsJLmZvcHMg PSAma29tZWRhX2NtYV9mb3BzLA0KPiA+ICsJLm5hbWUgPSAia29tZWRhIiwNCj4gPiArCS5kZXNj ID0gIkFSTSBNYWxpIEtvbWVkYSBEaXNwbGF5IFByb2Nlc3NvciBkcml2ZXIiLA0KPiA+ICsJLmRh dGUgPSAiMjAxODExMDEiLA0KPiA+ICsJLm1ham9yID0gMCwNCj4gPiArCS5taW5vciA9IDEsDQo+ ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBrb21lZGFfa21zX2NvbW1pdF90YWlsKHN0 cnVjdCBkcm1fYXRvbWljX3N0YXRlICpvbGRfc3RhdGUpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBk cm1fZGV2aWNlICpkZXYgPSBvbGRfc3RhdGUtPmRldjsNCj4gPiArDQo+ID4gKwlkcm1fYXRvbWlj X2hlbHBlcl9jb21taXRfbW9kZXNldF9kaXNhYmxlcyhkZXYsIG9sZF9zdGF0ZSk7DQo+ID4gKw0K PiA+ICsJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3BsYW5lcyhkZXYsIG9sZF9zdGF0ZSwgMCk7 DQo+ID4gKw0KPiA+ICsJZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZW5hYmxlcyhk ZXYsIG9sZF9zdGF0ZSk7DQo+IA0KPiBNYWlubGluZSBoYXMgYWxzbyBpbnRyb2R1Y2VkIHRoZSBk cm1fYXRvbWljX2hlbHBlcl9mYWtlX3ZibGFuayhvbGRfc3RhdGUpIGNhbGwNCj4gdG8gaGVscCB3 aXRoIHdyaXRlYmFja3Mgb24gQ1JUQ3MgdGhhdCBtaWdodCBiZSBvdGhlcndpc2UgZGlzYWJsZWQu IERvIHdlIG5lZWQNCj4gdG8gaGF2ZSBpdCBoZXJlIHRvbz8NCg0Kd2UgZG9uJ3QgbmVlZCBpdCwg c2luY2UgRDcxIEhXIHN0aWxsIHNlbmRzIGZsaXAgaW50ZXJydXB0IGV2ZW4gb24gb25lc2hvdA0K d3JpdGViYWNrIG1vZGUuDQoNCj4gPiArDQo+ID4gKwlkcm1fYXRvbWljX2hlbHBlcl93YWl0X2Zv cl9mbGlwX2RvbmUoZGV2LCBvbGRfc3RhdGUpOw0KPiA+ICsNCj4gPiArCWRybV9hdG9taWNfaGVs cGVyX2NvbW1pdF9od19kb25lKG9sZF9zdGF0ZSk7DQo+ID4gKw0KPiA+ICsJZHJtX2F0b21pY19o ZWxwZXJfY2xlYW51cF9wbGFuZXMoZGV2LCBvbGRfc3RhdGUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9tb2RlX2NvbmZpZ19oZWxwZXJfZnVuY3Mga29tZWRh X21vZGVfY29uZmlnX2hlbHBlcnMgPSB7DQo+ID4gKwkuYXRvbWljX2NvbW1pdF90YWlsID0ga29t ZWRhX2ttc19jb21taXRfdGFpbCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX21vZGVfY29uZmlnX2Z1bmNzIGtvbWVkYV9tb2RlX2NvbmZpZ19mdW5jcyA9IHsN Cj4gPiArCS5mYl9jcmVhdGUJCT0ga29tZWRhX2ZiX2NyZWF0ZSwNCj4gPiArCS5hdG9taWNfY2hl Y2sJCT0gTlVMTCwvKmtvbWVkYV9rbXNfY2hlY2sqLw0KPiANCj4gSSB3b3VsZCBhcmd1ZSB0aGF0 IHlvdSBzaG91bGQgYXQgbGVhc3QgdXNlIGRybV9hdG9taWNfaGVscGVyX2NoZWNrIGhlcmUsDQo+ IHJhdGhlciB0aGFuIHNldCBpdCB0byBOVUxMLCBldmVuIGlmIGxhdGVyIHlvdSB3aWxsIHJlcGxh Y2UgaXQgd2l0aCBhDQo+IGtvbWVkYSBmdW5jdGlvbi4NCg0KT0suDQoNCj4gDQo+ID4gKwkuYXRv bWljX2NvbW1pdAkJPSBkcm1fYXRvbWljX2hlbHBlcl9jb21taXQsDQo+ID4gK307DQo+ID4gKw0K PiA+ICtzdGF0aWMgdm9pZCBrb21lZGFfa21zX21vZGVfY29uZmlnX2luaXQoc3RydWN0IGtvbWVk YV9rbXNfZGV2ICprbXMsDQo+ID4gKwkJCQkJc3RydWN0IGtvbWVkYV9kZXYgKm1kZXYpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZrbXMtPmJhc2UubW9k ZV9jb25maWc7DQo+ID4gKw0KPiA+ICsJZHJtX21vZGVfY29uZmlnX2luaXQoJmttcy0+YmFzZSk7 DQo+ID4gKw0KPiA+ICsJa29tZWRhX2ttc19zZXR1cF9jcnRjcyhrbXMsIG1kZXYpOw0KPiA+ICsN Cj4gPiArCS8qIEdldCB2YWx1ZSBmcm9tIGRldiAqLw0KPiA+ICsJY29uZmlnLT5taW5fd2lkdGgJ PSAwOw0KPiA+ICsJY29uZmlnLT5taW5faGVpZ2h0CT0gMDsNCj4gPiArCWNvbmZpZy0+bWF4X3dp ZHRoCT0gNDA5NjsNCj4gPiArCWNvbmZpZy0+bWF4X2hlaWdodAk9IDQwOTY7DQo+ID4gKwljb25m aWctPmFsbG93X2ZiX21vZGlmaWVycyA9IHRydWU7DQo+ID4gKw0KPiA+ICsJY29uZmlnLT5mdW5j cyA9ICZrb21lZGFfbW9kZV9jb25maWdfZnVuY3M7DQo+ID4gKwljb25maWctPmhlbHBlcl9wcml2 YXRlID0gJmtvbWVkYV9tb2RlX2NvbmZpZ19oZWxwZXJzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dHJ1Y3Qga29tZWRhX2ttc19kZXYgKmtvbWVkYV9rbXNfYXR0YWNoKHN0cnVjdCBrb21lZGFfZGV2 ICptZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qga29tZWRhX2ttc19kZXYgKmttcyA9IGt6YWxs b2Moc2l6ZW9mKCprbXMpLCBHRlBfS0VSTkVMKTsNCj4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpk cm07DQo+ID4gKwlpbnQgZXJyOw0KPiA+ICsNCj4gPiArCWlmICgha21zKQ0KPiA+ICsJCXJldHVy biBFUlJfUFRSKC1FTk9NRU0pOw0KPiA+ICsNCj4gPiArCWRybSA9ICZrbXMtPmJhc2U7DQo+ID4g KwllcnIgPSBkcm1fZGV2X2luaXQoZHJtLCAma29tZWRhX2ttc19kcml2ZXIsIG1kZXYtPmRldik7 DQo+ID4gKwlpZiAoZXJyKQ0KPiA+ICsJCWdvdG8gZnJlZV9rbXM7DQo+ID4gKw0KPiA+ICsJZHJt LT5kZXZfcHJpdmF0ZSA9IG1kZXY7DQo+ID4gKw0KPiA+ICsJa29tZWRhX2ttc19tb2RlX2NvbmZp Z19pbml0KGttcywgbWRldik7DQo+ID4gKw0KPiA+ICsJZXJyID0ga29tZWRhX2ttc19hZGRfcHJp dmF0ZV9vYmpzKGttcywgbWRldik7DQo+ID4gKwlpZiAoZXJyKQ0KPiA+ICsJCWdvdG8gY2xlYW51 cF9tb2RlX2NvbmZpZzsNCj4gPiArDQo+ID4gKwllcnIgPSBrb21lZGFfa21zX2FkZF9wbGFuZXMo a21zLCBtZGV2KTsNCj4gPiArCWlmIChlcnIpDQo+ID4gKwkJZ290byBjbGVhbnVwX21vZGVfY29u ZmlnOw0KPiA+ICsNCj4gPiArCWVyciA9IGRybV92YmxhbmtfaW5pdChkcm0sIGttcy0+bl9jcnRj cyk7DQo+ID4gKwlpZiAoZXJyKQ0KPiA+ICsJCWdvdG8gY2xlYW51cF9tb2RlX2NvbmZpZzsNCj4g PiArDQo+ID4gKwllcnIgPSBrb21lZGFfa21zX2FkZF9jcnRjcyhrbXMsIG1kZXYpOw0KPiA+ICsJ aWYgKGVycikNCj4gPiArCQlnb3RvIGNsZWFudXBfbW9kZV9jb25maWc7DQo+ID4gKw0KPiA+ICsJ ZXJyID0gY29tcG9uZW50X2JpbmRfYWxsKG1kZXYtPmRldiwga21zKTsNCj4gPiArCWlmIChlcnIp DQo+ID4gKwkJZ290byBjbGVhbnVwX21vZGVfY29uZmlnOw0KPiA+ICsNCj4gPiArCWRybV9tb2Rl X2NvbmZpZ19yZXNldChkcm0pOw0KPiA+ICsNCj4gPiArCWVyciA9IGRybV9kZXZfcmVnaXN0ZXIo ZHJtLCAwKTsNCj4gPiArCWlmIChlcnIpDQo+ID4gKwkJZ290byB1bmluc3RhbGxfaXJxOw0KPiA+ ICsNCj4gPiArCXJldHVybiBrbXM7DQo+ID4gKw0KPiA+ICt1bmluc3RhbGxfaXJxOg0KPiA+ICsJ ZHJtX2lycV91bmluc3RhbGwoZHJtKTsNCj4gPiArY2xlYW51cF9tb2RlX2NvbmZpZzoNCj4gPiAr CWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7DQo+ID4gK2ZyZWVfa21zOg0KPiA+ICsJa2Zy ZWUoa21zKTsNCj4gPiArCXJldHVybiBFUlJfUFRSKGVycik7DQo+ID4gK30NCj4gPiArDQo+ID4g K3ZvaWQga29tZWRhX2ttc19kZXRhY2goc3RydWN0IGtvbWVkYV9rbXNfZGV2ICprbXMpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkcm0gPSAma21zLT5iYXNlOw0KPiA+ICsJc3Ry dWN0IGtvbWVkYV9kZXYgKm1kZXYgPSBkcm0tPmRldl9wcml2YXRlOw0KPiA+ICsNCj4gPiArCWRy bV9kZXZfdW5yZWdpc3Rlcihkcm0pOw0KPiA+ICsJY29tcG9uZW50X3VuYmluZF9hbGwobWRldi0+ ZGV2LCBkcm0pOw0KPiA+ICsJa29tZWRhX2ttc19jbGVhbnVwX3ByaXZhdGVfb2JqcyhtZGV2KTsN Cj4gPiArCWRybV9tb2RlX2NvbmZpZ19jbGVhbnVwKGRybSk7DQo+ID4gKwlkcm0tPmRldl9wcml2 YXRlID0gTlVMTDsNCj4gPiArCWRybV9kZXZfcHV0KGRybSk7DQo+ID4gK30NCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9rb21lZGFfa21zLmggYi9k cml2ZXJzL2dwdS9kcm0vYXJtL2Rpc3BsYXkva29tZWRhL2tvbWVkYV9rbXMuaA0KPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5mMTM2NjYwMDRhNDINCj4g PiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9kaXNwbGF5L2tv bWVkYS9rb21lZGFfa21zLmgNCj4gPiBAQCAtMCwwICsxLDExMyBAQA0KPiA+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPiA+ICsvKg0KPiA+ICsgKiAoQykgQ09QWVJJ R0hUIDIwMTggQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQo+ID4gKyAqIEF1dGhv cjogSmFtZXMuUWlhbi5XYW5nIDxqYW1lcy5xaWFuLndhbmdAYXJtLmNvbT4NCj4gPiArICoNCj4g PiArICovDQo+ID4gKyNpZm5kZWYgX0tPTUVEQV9LTVNfSF8NCj4gPiArI2RlZmluZSBfS09NRURB X0tNU19IXw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljLmg+DQo+ID4gKyNp bmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIuaD4NCj4gPiArI2luY2x1ZGUgPGRybS9kcm1f Y3J0Y19oZWxwZXIuaD4NCj4gPiArI2luY2x1ZGUgPGRybS9kcm1fd3JpdGViYWNrLmg+DQo+ID4g Kw0KPiA+ICsvKiogc3RydWN0IGtvbWVkYV9wbGFuZSAtIGtvbWVkYSBpbnN0YW5jZSBvZiBkcm1f cGxhbmUgKi8NCj4gPiArc3RydWN0IGtvbWVkYV9wbGFuZSB7DQo+ID4gKwkvKiogQGJhc2U6ICZk cm1fcGxhbmUgKi8NCj4gPiArCXN0cnVjdCBkcm1fcGxhbmUgYmFzZTsNCj4gPiArCS8qKg0KPiA+ ICsJICogQGxheWVyOg0KPiA+ICsJICoNCj4gPiArCSAqIHJlcHJlc2VudHMgYXZhaWxhYmxlIGxh eWVyIGlucHV0IHBpcGVsaW5lcyBmb3IgdGhpcyBwbGFuZS4NCj4gPiArCSAqDQo+ID4gKwkgKiBO T1RFOg0KPiA+ICsJICogdGhlIGxheWVyIGlzIG5vdCBmb3IgYSBzcGVjaWZpYyBMYXllciwgYnV0 IGluZGljYXRlIGEgZ3JvdXAgb2YNCj4gPiArCSAqIExheWVycyB3aXRoIHNhbWUgY2FwYWJpbGl0 aWVzLg0KPiA+ICsJICovDQo+ID4gKwlzdHJ1Y3Qga29tZWRhX2xheWVyICpsYXllcjsNCj4gPiAr fTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBzdHJ1Y3Qga29tZWRhX3BsYW5lX3N0YXRlDQo+ ID4gKyAqDQo+ID4gKyAqIFRoZSBwbGFuZV9zdGF0ZSBjYW4gYmUgc3BsaXQgaW50byB0d28gZGF0 YSBmbG93IChsZWZ0L3JpZ2h0KSBhbmQgaGFuZGxlZA0KPiA+ICsgKiBieSB0d28gbGF5ZXJzICZr b21lZGFfcGxhbmUubGF5ZXIgYW5kICZrb21lZGFfcGxhbmUubGF5ZXIucmlnaHQNCj4gPiArICov DQo+ID4gK3N0cnVjdCBrb21lZGFfcGxhbmVfc3RhdGUgew0KPiA+ICsJLyoqIEBiYXNlOiAmZHJt X3BsYW5lX3N0YXRlICovDQo+ID4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIGJhc2U7DQo+ID4g Kw0KPiA+ICsJLyogcHJpdmF0ZSBwcm9wZXJ0aWVzICovDQo+ID4gK307DQo+ID4gKw0KPiA+ICsv KioNCj4gPiArICogc3RydWN0IGtvbWVkYV93Yl9jb25uZWN0b3INCj4gPiArICovDQo+ID4gK3N0 cnVjdCBrb21lZGFfd2JfY29ubmVjdG9yIHsNCj4gPiArCS8qKiBAYmFzZTogJmRybV93cml0ZWJh Y2tfY29ubmVjdG9yICovDQo+ID4gKwlzdHJ1Y3QgZHJtX3dyaXRlYmFja19jb25uZWN0b3IgYmFz ZTsNCj4gPiArDQo+ID4gKwkvKiogQHdiX2xheWVyOiByZXByZXNlbnRzIGFzc29jaWF0ZWQgd3Jp dGViYWNrIHBpcGVsaW5lIG9mIGtvbWVkYSAqLw0KPiA+ICsJc3RydWN0IGtvbWVkYV9sYXllciAq d2JfbGF5ZXI7DQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogc3RydWN0IGtvbWVk YV9jcnRjDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3Qga29tZWRhX2NydGMgew0KPiA+ICsJLyoqIEBi YXNlOiAmZHJtX2NydGMgKi8NCj4gPiArCXN0cnVjdCBkcm1fY3J0YyBiYXNlOw0KPiA+ICsJLyoq IEBtYXN0ZXI6IG9ubHkgbWFzdGVyIGhhcyBkaXNwbGF5IG91dHB1dCAqLw0KPiA+ICsJc3RydWN0 IGtvbWVkYV9waXBlbGluZSAqbWFzdGVyOw0KPiA+ICsJLyoqDQo+ID4gKwkgKiBAc2xhdmU6IG9w dGlvbmFsDQo+ID4gKwkgKg0KPiA+ICsJICogRG9lc24ndCBoYXZlIGl0cyBvd24gZGlzcGxheSBv dXRwdXQsIHRoZSBoYW5kbGVkIGRhdGEgZmxvdyB3aWxsDQo+ID4gKwkgKiBtZXJnZSBpbnRvIHRo ZSBtYXN0ZXIuDQo+ID4gKwkgKi8NCj4gPiArCXN0cnVjdCBrb21lZGFfcGlwZWxpbmUgKnNsYXZl Ow0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyoqIHN0cnVjdCBrb21lZGFfY3J0Y19zdGF0ZSAqLw0K PiA+ICtzdHJ1Y3Qga29tZWRhX2NydGNfc3RhdGUgew0KPiA+ICsJLyoqIEBiYXNlOiAmZHJtX2Ny dGNfc3RhdGUgKi8NCj4gPiArCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSBiYXNlOw0KPiA+ICsNCj4g PiArCS8qIHByaXZhdGUgcHJvcGVydGllcyAqLw0KPiA+ICsNCj4gPiArCS8qIGNvbXB1dGVkIHN0 YXRlIHdoaWNoIGFyZSB1c2VkIGJ5IHZhbGlkYXRlL2NoZWNrICovDQo+ID4gKwl1MzIgYWZmZWN0 ZWRfcGlwZXM7DQo+ID4gKwl1MzIgYWN0aXZlX3BpcGVzOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr LyoqIHN0cnVjdCBrb21lZGFfa21zX2RldiAtIGZvciBnYXRoZXIgS01TIHJlbGF0ZWQgdGhpbmdz ICovDQo+ID4gK3N0cnVjdCBrb21lZGFfa21zX2RldiB7DQo+ID4gKwkvKiogQGJhc2U6ICZkcm1f ZGV2aWNlICovDQo+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSBiYXNlOw0KPiA+ICsNCj4gPiArCS8q KiBAbl9jcnRjczogdmFsaWQgbnVtYmVycyBvZiBjcnRjcyBpbiAma29tZWRhX2ttc19kZXYuY3J0 Y3MgKi8NCj4gPiArCWludCBuX2NydGNzOw0KPiA+ICsJLyoqIEBjcnRjczogY3J0Y3MgbGlzdCAq Lw0KPiA+ICsJc3RydWN0IGtvbWVkYV9jcnRjIGNydGNzW0tPTUVEQV9NQVhfUElQRUxJTkVTXTsN Cj4gPiArfTsNCj4gPiArDQo+ID4gKyNkZWZpbmUgdG9fa3BsYW5lKHApCWNvbnRhaW5lcl9vZihw LCBzdHJ1Y3Qga29tZWRhX3BsYW5lLCBiYXNlKQ0KPiA+ICsjZGVmaW5lIHRvX2twbGFuZV9zdChw KQljb250YWluZXJfb2YocCwgc3RydWN0IGtvbWVkYV9wbGFuZV9zdGF0ZSwgYmFzZSkNCj4gPiAr I2RlZmluZSB0b19rY29ubihwKQljb250YWluZXJfb2YocCwgc3RydWN0IGtvbWVkYV93Yl9jb25u ZWN0b3IsIGJhc2UpDQo+ID4gKyNkZWZpbmUgdG9fa2NydGMocCkJY29udGFpbmVyX29mKHAsIHN0 cnVjdCBrb21lZGFfY3J0YywgYmFzZSkNCj4gPiArI2RlZmluZSB0b19rY3J0Y19zdChwKQljb250 YWluZXJfb2YocCwgc3RydWN0IGtvbWVkYV9jcnRjX3N0YXRlLCBiYXNlKQ0KPiA+ICsjZGVmaW5l IHRvX2tkZXYocCkJY29udGFpbmVyX29mKHAsIHN0cnVjdCBrb21lZGFfa21zX2RldiwgYmFzZSkN Cj4gPiArDQo+ID4gK2ludCBrb21lZGFfa21zX3NldHVwX2NydGNzKHN0cnVjdCBrb21lZGFfa21z X2RldiAqa21zLCBzdHJ1Y3Qga29tZWRhX2RldiAqbWRldik7DQo+ID4gKw0KPiA+ICtpbnQga29t ZWRhX2ttc19hZGRfY3J0Y3Moc3RydWN0IGtvbWVkYV9rbXNfZGV2ICprbXMsIHN0cnVjdCBrb21l ZGFfZGV2ICptZGV2KTsNCj4gPiAraW50IGtvbWVkYV9rbXNfYWRkX3BsYW5lcyhzdHJ1Y3Qga29t ZWRhX2ttc19kZXYgKmttcywgc3RydWN0IGtvbWVkYV9kZXYgKm1kZXYpOw0KPiA+ICtpbnQga29t ZWRhX2ttc19hZGRfcHJpdmF0ZV9vYmpzKHN0cnVjdCBrb21lZGFfa21zX2RldiAqa21zLA0KPiA+ ICsJCQkJc3RydWN0IGtvbWVkYV9kZXYgKm1kZXYpOw0KPiA+ICt2b2lkIGtvbWVkYV9rbXNfY2xl YW51cF9wcml2YXRlX29ianMoc3RydWN0IGtvbWVkYV9kZXYgKm1kZXYpOw0KPiA+ICsNCj4gPiAr c3RydWN0IGtvbWVkYV9rbXNfZGV2ICprb21lZGFfa21zX2F0dGFjaChzdHJ1Y3Qga29tZWRhX2Rl diAqbWRldik7DQo+ID4gK3ZvaWQga29tZWRhX2ttc19kZXRhY2goc3RydWN0IGtvbWVkYV9rbXNf ZGV2ICprbXMpOw0KPiA+ICsNCj4gPiArI2VuZGlmIC8qX0tPTUVEQV9LTVNfSF8qLw0KPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL2Rpc3BsYXkva29tZWRhL2tvbWVkYV9waXBl bGluZS5oIGIvZHJpdmVycy9ncHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9rb21lZGFfcGlwZWxp bmUuaA0KPiA+IGluZGV4IDJkNjhmZmVhZTI1ZC4uMTE0MTI5ZDk2ODUxIDEwMDY0NA0KPiA+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEva29tZWRhX3BpcGVsaW5lLmgN Cj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXJtL2Rpc3BsYXkva29tZWRhL2tvbWVkYV9waXBl bGluZS5oDQo+ID4gQEAgLTMzMyw2ICszMzMsOSBAQCBzdHJ1Y3Qga29tZWRhX3BpcGVsaW5lX3N0 YXRlIHsNCj4gPiAgI2RlZmluZSB0b19pbXByb2Nfc3QoYykJY29udGFpbmVyX29mKGMsIHN0cnVj dCBrb21lZGFfaW1wcm9jX3N0YXRlLCBiYXNlKQ0KPiA+ICAjZGVmaW5lIHRvX2N0cmxyX3N0KGMp CWNvbnRhaW5lcl9vZihjLCBzdHJ1Y3Qga29tZWRhX3RpbWluZ19jdHJscl9zdGF0ZSwgYmFzZSkN Cj4gPiAgDQo+ID4gKyNkZWZpbmUgcHJpdl90b19jb21wX3N0KG8pIGNvbnRhaW5lcl9vZihvLCBz dHJ1Y3Qga29tZWRhX2NvbXBvbmVudF9zdGF0ZSwgb2JqKQ0KPiA+ICsjZGVmaW5lIHByaXZfdG9f cGlwZV9zdChvKSAgY29udGFpbmVyX29mKG8sIHN0cnVjdCBrb21lZGFfcGlwZWxpbmVfc3RhdGUs IG9iaikNCj4gPiArDQo+ID4gIC8qIHBpcGVsaW5lIEFQSXMgKi8NCj4gPiAgc3RydWN0IGtvbWVk YV9waXBlbGluZSAqDQo+ID4gIGtvbWVkYV9waXBlbGluZV9hZGQoc3RydWN0IGtvbWVkYV9kZXYg Km1kZXYsIHNpemVfdCBzaXplLA0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJt L2Rpc3BsYXkva29tZWRhL2tvbWVkYV9wbGFuZS5jIGIvZHJpdmVycy9ncHUvZHJtL2FybS9kaXNw bGF5L2tvbWVkYS9rb21lZGFfcGxhbmUuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4g aW5kZXggMDAwMDAwMDAwMDAwLi4wYTQ5NTNhOWE5MDkNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9rb21lZGFfcGxhbmUuYw0K PiA+IEBAIC0wLDAgKzEsMTA5IEBADQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wDQo+ID4gKy8qDQo+ID4gKyAqIChDKSBDT1BZUklHSFQgMjAxOCBBUk0gTGltaXRlZC4g QWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gPiArICogQXV0aG9yOiBKYW1lcy5RaWFuLldhbmcgPGph bWVzLnFpYW4ud2FuZ0Bhcm0uY29tPg0KPiA+ICsgKg0KPiA+ICsgKi8NCj4gPiArI2luY2x1ZGUg PGRybS9kcm1fYXRvbWljLmg+DQo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pY19oZWxwZXIu aD4NCj4gPiArI2luY2x1ZGUgPGRybS9kcm1fcGxhbmVfaGVscGVyLmg+DQo+ID4gKyNpbmNsdWRl ICJrb21lZGFfZGV2LmgiDQo+ID4gKyNpbmNsdWRlICJrb21lZGFfa21zLmgiDQo+ID4gKw0KPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wbGFuZV9oZWxwZXJfZnVuY3Mga29tZWRhX3BsYW5l X2hlbHBlcl9mdW5jcyA9IHsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGtvbWVk YV9wbGFuZV9kZXN0cm95KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQ0KPiA+ICt7DQo+ID4gKwlk cm1fcGxhbmVfY2xlYW51cChwbGFuZSk7DQo+ID4gKw0KPiA+ICsJa2ZyZWUodG9fa3BsYW5lKHBs YW5lKSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BsYW5l X2Z1bmNzIGtvbWVkYV9wbGFuZV9mdW5jcyA9IHsNCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qIGZv ciBrb21lZGEsIHdoaWNoIGlzIHBpcGVsaW5lIGNhbiBiZSBzaGFyZSBiZXR3ZWVuIGNydGNzICov DQo+ID4gK3N0YXRpYyB1MzIgZ2V0X3Bvc3NpYmxlX2NydGNzKHN0cnVjdCBrb21lZGFfa21zX2Rl diAqa21zLA0KPiA+ICsJCQkgICAgICBzdHJ1Y3Qga29tZWRhX3BpcGVsaW5lICpwaXBlKQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3Qga29tZWRhX2NydGMgKmNydGM7DQo+ID4gKwl1MzIgcG9zc2libGVf Y3J0Y3MgPSAwOw0KPiA+ICsJaW50IGk7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IGtt cy0+bl9jcnRjczsgaSsrKSB7DQo+ID4gKwkJY3J0YyA9ICZrbXMtPmNydGNzW2ldOw0KPiA+ICsN Cj4gPiArCQlpZiAoKHBpcGUgPT0gY3J0Yy0+bWFzdGVyKSB8fCAocGlwZSA9PSBjcnRjLT5zbGF2 ZSkpDQo+ID4gKwkJCXBvc3NpYmxlX2NydGNzIHw9IEJJVChpKTsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwlyZXR1cm4gcG9zc2libGVfY3J0Y3M7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qIHVzZSBM YXllcjAgYXMgcHJpbWFyeSAqLw0KPiA+ICtzdGF0aWMgdTMyIGdldF9wbGFuZV90eXBlKHN0cnVj dCBrb21lZGFfa21zX2RldiAqa21zLA0KPiA+ICsJCQkgIHN0cnVjdCBrb21lZGFfY29tcG9uZW50 ICpjKQ0KPiA+ICt7DQo+ID4gKwlib29sIGlzX3ByaW1hcnkgPSAoYy0+aWQgPT0gS09NRURBX0NP TVBPTkVOVF9MQVlFUjApOw0KPiA+ICsNCj4gPiArCXJldHVybiBpc19wcmltYXJ5ID8gRFJNX1BM QU5FX1RZUEVfUFJJTUFSWSA6IERSTV9QTEFORV9UWVBFX09WRVJMQVk7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBpbnQga29tZWRhX3BsYW5lX2FkZChzdHJ1Y3Qga29tZWRhX2ttc19kZXYg KmttcywNCj4gPiArCQkJICAgIHN0cnVjdCBrb21lZGFfbGF5ZXIgKmxheWVyKQ0KPiA+ICt7DQo+ ID4gKwlzdHJ1Y3Qga29tZWRhX2RldiAqbWRldiA9IGttcy0+YmFzZS5kZXZfcHJpdmF0ZTsNCj4g PiArCXN0cnVjdCBrb21lZGFfY29tcG9uZW50ICpjID0gJmxheWVyLT5iYXNlOw0KPiA+ICsJc3Ry dWN0IGtvbWVkYV9wbGFuZSAqa3BsYW5lOw0KPiA+ICsJc3RydWN0IGRybV9wbGFuZSAqcGxhbmU7 DQo+ID4gKwl1MzIgKmZvcm1hdHMsIG5fZm9ybWF0cyA9IDA7DQo+ID4gKwlpbnQgZXJyOw0KPiA+ ICsNCj4gPiArCWtwbGFuZSA9IGt6YWxsb2Moc2l6ZW9mKCprcGxhbmUpLCBHRlBfS0VSTkVMKTsN Cj4gPiArCWlmICgha3BsYW5lKQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ICsNCj4gPiAr CXBsYW5lID0gJmtwbGFuZS0+YmFzZTsNCj4gPiArCWtwbGFuZS0+bGF5ZXIgPSBsYXllcjsNCj4g PiArDQo+ID4gKwlmb3JtYXRzID0ga29tZWRhX2dldF9sYXllcl9mb3VyY2NfbGlzdCgmbWRldi0+ Zm10X3RibCwNCj4gPiArCQkJCQkgICAgICAgbGF5ZXItPmxheWVyX3R5cGUsICZuX2Zvcm1hdHMp Ow0KPiA+ICsNCj4gPiArCWVyciA9IGRybV91bml2ZXJzYWxfcGxhbmVfaW5pdCgma21zLT5iYXNl LCBwbGFuZSwNCj4gPiArCQkJZ2V0X3Bvc3NpYmxlX2NydGNzKGttcywgYy0+cGlwZWxpbmUpLA0K PiA+ICsJCQkma29tZWRhX3BsYW5lX2Z1bmNzLA0KPiA+ICsJCQlmb3JtYXRzLCBuX2Zvcm1hdHMs IE5VTEwsDQo+ID4gKwkJCWdldF9wbGFuZV90eXBlKGttcywgYyksDQo+ID4gKwkJCSIlcyIsIGMt Pm5hbWUpOw0KPiA+ICsNCj4gPiArCWtvbWVkYV9wdXRfZm91cmNjX2xpc3QoZm9ybWF0cyk7DQo+ ID4gKw0KPiA+ICsJaWYgKGVycikNCj4gPiArCQlnb3RvIGNsZWFudXA7DQo+ID4gKw0KPiA+ICsJ ZHJtX3BsYW5lX2hlbHBlcl9hZGQocGxhbmUsICZrb21lZGFfcGxhbmVfaGVscGVyX2Z1bmNzKTsN Cj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArY2xlYW51cDoNCj4gPiArCWtvbWVkYV9wbGFu ZV9kZXN0cm95KHBsYW5lKTsNCj4gPiArCXJldHVybiBlcnI7DQo+ID4gK30NCj4gPiArDQo+ID4g K2ludCBrb21lZGFfa21zX2FkZF9wbGFuZXMoc3RydWN0IGtvbWVkYV9rbXNfZGV2ICprbXMsIHN0 cnVjdCBrb21lZGFfZGV2ICptZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3Qga29tZWRhX3BpcGVs aW5lICpwaXBlOw0KPiA+ICsJaW50IGksIGosIGVycjsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAw OyBpIDwgbWRldi0+bl9waXBlbGluZXM7IGkrKykgew0KPiA+ICsJCXBpcGUgPSBtZGV2LT5waXBl bGluZXNbaV07DQo+ID4gKw0KPiA+ICsJCWZvciAoaiA9IDA7IGogPCBwaXBlLT5uX2xheWVyczsg aisrKSB7DQo+ID4gKwkJCWVyciA9IGtvbWVkYV9wbGFuZV9hZGQoa21zLCBwaXBlLT5sYXllcnNb al0pOw0KPiA+ICsJCQlpZiAoZXJyKQ0KPiA+ICsJCQkJcmV0dXJuIGVycjsNCj4gPiArCQl9DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FybS9kaXNwbGF5L2tvbWVkYS9rb21lZGFfcHJpdmF0ZV9vYmouYyBi L2RyaXZlcnMvZ3B1L2RybS9hcm0vZGlzcGxheS9rb21lZGEva29tZWRhX3ByaXZhdGVfb2JqLmMN Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uOWVkZmQ2 YWIwYzEyDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0v ZGlzcGxheS9rb21lZGEva29tZWRhX3ByaXZhdGVfb2JqLmMNCj4gPiBAQCAtMCwwICsxLDg4IEBA DQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ID4gKy8qDQo+ID4g KyAqIChDKSBDT1BZUklHSFQgMjAxOCBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4N Cj4gPiArICogQXV0aG9yOiBKYW1lcy5RaWFuLldhbmcgPGphbWVzLnFpYW4ud2FuZ0Bhcm0uY29t Pg0KPiA+ICsgKg0KPiA+ICsgKi8NCj4gPiArI2luY2x1ZGUgImtvbWVkYV9kZXYuaCINCj4gPiAr I2luY2x1ZGUgImtvbWVkYV9rbXMuaCINCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX3By aXZhdGVfc3RhdGUgKg0KPiA+ICtrb21lZGFfcGlwZWxpbmVfYXRvbWljX2R1cGxpY2F0ZV9zdGF0 ZShzdHJ1Y3QgZHJtX3ByaXZhdGVfb2JqICpvYmopDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBrb21l ZGFfcGlwZWxpbmVfc3RhdGUgKnN0Ow0KPiA+ICsNCj4gPiArCXN0ID0ga21lbWR1cChvYmotPnN0 YXRlLCBzaXplb2YoKnN0KSwgR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAoIXN0KQ0KPiA+ICsJCXJl dHVybiBOVUxMOw0KPiA+ICsNCj4gPiArCXN0LT5hY3RpdmVfY29tcHMgPSAwOw0KPiA+ICsNCj4g PiArCV9fZHJtX2F0b21pY19oZWxwZXJfcHJpdmF0ZV9vYmpfZHVwbGljYXRlX3N0YXRlKG9iaiwg JnN0LT5vYmopOw0KPiA+ICsNCj4gPiArCXJldHVybiAmc3QtPm9iajsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIHZvaWQNCj4gPiAra29tZWRhX3BpcGVsaW5lX2F0b21pY19kZXN0cm95X3N0 YXRlKHN0cnVjdCBkcm1fcHJpdmF0ZV9vYmogKm9iaiwNCj4gPiArCQkJCSAgICAgc3RydWN0IGRy bV9wcml2YXRlX3N0YXRlICpzdGF0ZSkNCj4gPiArew0KPiA+ICsJa2ZyZWUocHJpdl90b19waXBl X3N0KHN0YXRlKSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJt X3ByaXZhdGVfc3RhdGVfZnVuY3Mga29tZWRhX3BpcGVsaW5lX29ial9mdW5jcyA9IHsNCj4gPiAr CS5hdG9taWNfZHVwbGljYXRlX3N0YXRlCT0ga29tZWRhX3BpcGVsaW5lX2F0b21pY19kdXBsaWNh dGVfc3RhdGUsDQo+ID4gKwkuYXRvbWljX2Rlc3Ryb3lfc3RhdGUJPSBrb21lZGFfcGlwZWxpbmVf YXRvbWljX2Rlc3Ryb3lfc3RhdGUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGtv bWVkYV9waXBlbGluZV9vYmpfYWRkKHN0cnVjdCBrb21lZGFfa21zX2RldiAqa21zLA0KPiA+ICsJ CQkJICAgc3RydWN0IGtvbWVkYV9waXBlbGluZSAqcGlwZSkNCj4gPiArew0KPiA+ICsJc3RydWN0 IGtvbWVkYV9waXBlbGluZV9zdGF0ZSAqc3Q7DQo+ID4gKw0KPiA+ICsJc3QgPSBremFsbG9jKHNp emVvZigqc3QpLCBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICghc3QpDQo+ID4gKwkJcmV0dXJuIC1F Tk9NRU07DQo+ID4gKw0KPiA+ICsJc3QtPnBpcGUgPSBwaXBlOw0KPiA+ICsJZHJtX2F0b21pY19w cml2YXRlX29ial9pbml0KCZwaXBlLT5vYmosICZzdC0+b2JqLA0KPiA+ICsJCQkJICAgICZrb21l ZGFfcGlwZWxpbmVfb2JqX2Z1bmNzKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0K PiA+ICsNCj4gPiAraW50IGtvbWVkYV9rbXNfYWRkX3ByaXZhdGVfb2JqcyhzdHJ1Y3Qga29tZWRh X2ttc19kZXYgKmttcywNCj4gPiArCQkJCXN0cnVjdCBrb21lZGFfZGV2ICptZGV2KQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3Qga29tZWRhX3BpcGVsaW5lICpwaXBlOw0KPiA+ICsJaW50IGksIGVycjsN Cj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgbWRldi0+bl9waXBlbGluZXM7IGkrKykgew0K PiA+ICsJCXBpcGUgPSBtZGV2LT5waXBlbGluZXNbaV07DQo+ID4gKw0KPiA+ICsJCWVyciA9IGtv bWVkYV9waXBlbGluZV9vYmpfYWRkKGttcywgcGlwZSk7DQo+ID4gKwkJaWYgKGVycikNCj4gPiAr CQkJcmV0dXJuIGVycjsNCj4gPiArDQo+ID4gKwkJLyogQWRkIGNvbXBvbmVudCAqLw0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIGtvbWVk YV9rbXNfY2xlYW51cF9wcml2YXRlX29ianMoc3RydWN0IGtvbWVkYV9kZXYgKm1kZXYpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBrb21lZGFfcGlwZWxpbmUgKnBpcGU7DQo+ID4gKwlzdHJ1Y3Qga29t ZWRhX2NvbXBvbmVudCAqYzsNCj4gPiArCWludCBpLCBpZDsNCj4gPiArDQo+ID4gKwlmb3IgKGkg PSAwOyBpIDwgbWRldi0+bl9waXBlbGluZXM7IGkrKykgew0KPiA+ICsJCXBpcGUgPSBtZGV2LT5w aXBlbGluZXNbaV07DQo+ID4gKwkJZHBfZm9yX2VhY2hfc2V0X2JpdChpZCwgcGlwZS0+YXZhaWxf Y29tcHMpIHsNCj4gPiArCQkJYyA9IGtvbWVkYV9waXBlbGluZV9nZXRfY29tcG9uZW50KHBpcGUs IGlkKTsNCj4gPiArDQo+ID4gKwkJCWRybV9hdG9taWNfcHJpdmF0ZV9vYmpfZmluaSgmYy0+b2Jq KTsNCj4gPiArCQl9DQo+ID4gKwkJZHJtX2F0b21pY19wcml2YXRlX29ial9maW5pKCZwaXBlLT5v YmopOw0KPiA+ICsJfQ0KPiA+ICt9DQo+ID4gLS0gDQo+ID4gMi4xNy4xDQo+ID4gDQo+IA0KPiBS ZXZpZXdlZC1ieTogTGl2aXUgRHVkYXUgPGxpdml1LmR1ZGF1QGFybS5jb20+DQo+IA0KPiBCZXN0 IHJlZ2FyZHMsDQo+IExpdml1DQo+IA0KPiANCj4gLS0gDQo+ID09PT09PT09PT09PT09PT09PT09 DQo+IHwgSSB3b3VsZCBsaWtlIHRvIHwNCj4gfCBmaXggdGhlIHdvcmxkLCAgfA0KPiB8IGJ1dCB0 aGV5J3JlIG5vdCB8DQo+IHwgZ2l2aW5nIG1lIHRoZSAgIHwNCj4gIFwgc291cmNlIGNvZGUhICAv DQo+ICAgLS0tLS0tLS0tLS0tLS0tDQo+ICAgICDCr1xfKOODhClfL8KvDQpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK