From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: "Sa, Nuno" Subject: Re: [PATCH 1/2] iio: temperature: Add support for LTC2983 Date: Mon, 16 Sep 2019 09:37:18 +0000 Message-ID: <14a62c13cfd0175e03384ed691720c2db6fc086a.camel@analog.com> References: <20190909144550.164488-1-nuno.sa@analog.com> <20190915122754.4a529e9e@archlinux> In-Reply-To: <20190915122754.4a529e9e@archlinux> Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: <13F4D0EA8FA0A248A5CFF0C8194BAF83@namprd03.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 To: "jic23@kernel.org" Cc: "robh+dt@kernel.org" , "mark.rutland@arm.com" , "devicetree@vger.kernel.org" , "knaack.h@gmx.de" , "linux-iio@vger.kernel.org" , "pmeerw@pmeerw.net" , "lars@metafoo.de" List-ID: SGkgSm9uYXRoYW4sDQoNClRoYW5rcyBmb3IgdGhlIHJldmlldy4NCkNvbW1lbnRzIGlubGluZS4N Cg0KTnVubyBTw6ENCg0KT24gU3VuLCAyMDE5LTA5LTE1IGF0IDEyOjI3ICswMTAwLCBKb25hdGhh biBDYW1lcm9uIHdyb3RlOg0KPiANCj4gT24gTW9uLCA5IFNlcCAyMDE5IDE2OjQ1OjQ5ICswMjAw DQo+IE51bm8gU8OhIDxudW5vLnNhQGFuYWxvZy5jb20+IHdyb3RlOg0KPiANCj4gPiBUaGUgTFRD Mjk4MyBpcyBhIE11bHRpLVNlbnNvciBIaWdoIEFjY3VyYWN5IERpZ2l0YWwgVGVtcGVyYXR1cmUN Cj4gPiBNZWFzdXJlbWVudCBTeXN0ZW0uIEl0IG1lYXN1cmVzIGEgd2lkZSB2YXJpZXR5IG9mIHRl bXBlcmF0dXJlDQo+ID4gc2Vuc29ycyBhbmQNCj4gPiBkaWdpdGFsbHkgb3V0cHV0cyB0aGUgcmVz dWx0LCBpbiDCsEMgb3IgwrBGLCB3aXRoIDAuMcKwQyBhY2N1cmFjeSBhbmQNCj4gPiAwLjAwMcKw QyByZXNvbHV0aW9uLiBJdCBjYW4gbWVhc3VyZSB0aGUgdGVtcGVyYXR1cmUgb2YgYWxsIHN0YW5k YXJkDQo+ID4gdGhlcm1vY291cGxlcyAodHlwZSBCLEUsSixLLE4sUyxSLFQpLCBzdGFuZGFyZCAy LSwzLSw0LXdpcmUgUlREcywNCj4gPiB0aGVybWlzdG9ycyBhbmQgZGlvZGVzLg0KPiA+IA0KPiA+ IFNpZ25lZC1vZmYtYnk6IE51bm8gU8OhIDxudW5vLnNhQGFuYWxvZy5jb20+DQo+IFNvbWUgY29t bWVudHMgaW5saW5lLiAgTWFpbiBjb25jZXJuIGlzIGFyb3VuZCB0aGUgaW50ZXJmYWNlLCByZXN0 IGlzDQo+IG1pbm9yDQo+IHN0dWZmLg0KPiANCj4gSm9uYXRoYW4NCj4gDQo+ID4gLS0tDQo+ID4g IC4uLi90ZXN0aW5nL3N5c2ZzLWJ1cy1paW8tdGVtcGVyYXR1cmUtbHRjMjk4MyB8ICAgNDMgKw0K PiA+ICBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3 ICsNCj4gPiAgZHJpdmVycy9paW8vdGVtcGVyYXR1cmUvS2NvbmZpZyAgICAgICAgICAgICAgIHwg ICAxMCArDQo+ID4gIGRyaXZlcnMvaWlvL3RlbXBlcmF0dXJlL01ha2VmaWxlICAgICAgICAgICAg ICB8ICAgIDEgKw0KPiA+ICBkcml2ZXJzL2lpby90ZW1wZXJhdHVyZS9sdGMyOTgzLmMgICAgICAg ICAgICAgfCAxMzI3DQo+ID4gKysrKysrKysrKysrKysrKysNCj4gPiAgNSBmaWxlcyBjaGFuZ2Vk LCAxMzg4IGluc2VydGlvbnMoKykNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRp b24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWlpby0NCj4gPiB0ZW1wZXJhdHVyZS1sdGMyOTgzDQo+ ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2lpby90ZW1wZXJhdHVyZS9sdGMyOTgzLmMN Cj4gPiANCj4gPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1i dXMtaWlvLXRlbXBlcmF0dXJlLQ0KPiA+IGx0YzI5ODMgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0 aW5nL3N5c2ZzLWJ1cy1paW8tdGVtcGVyYXR1cmUtDQo+ID4gbHRjMjk4Mw0KPiA+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4zYWQzNDQwYzA5ODYNCj4gPiAt LS0gL2Rldi9udWxsDQo+ID4gKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1i dXMtaWlvLXRlbXBlcmF0dXJlLWx0YzI5ODMNCj4gPiBAQCAtMCwwICsxLDQzIEBADQo+ID4gK1do YXQ6CQkvc3lzL2J1cy9paW8vZGV2aWNlcy9paW86ZGV2aWNlWC9pbl90ZW1wWV90aGVybQ0KPiA+ IGlzdG9yX3Jhdw0KPiBGb3IgZWFjaCBvZiB0aGVzZSwgSSBwcmVzdW1lIHdlIGtub3cgd2hpY2gg dHlwZSBvZiBkZXZpY2UgaXMgYXR0YWNoZWQNCj4gYXQgYW55IHRpbWU/DQo+IFVzaW5nIHRoZSBj aGFubmVsIG5hbWluZyB0byBjb252ZXkgdGhpcyAoYW5kIEkgYXNzdW1lIHRoZSBmYWN0IHRoYXQN Cj4gZGlmZmVyZW50DQo+IGNvbnZlcnNpb25zIG5lZWQgdG8gYmUgZG9uZSBpbiB1c2Vyc3BhY2U/ KSBpcyBhIGJpdCBtZXNzeS4gIElmIHdlDQo+IG5lZWQNCj4gdG8gY29udmV5IHRoZSBjaGFubmVs IHR5cGUsIHRoZW4gYSBzZXBhcmF0ZSBpbl90ZW1wWV9tb2RlIGF0dHJpYnV0ZQ0KPiBtYXkgbWFr ZSBtb3JlDQo+IHNlbnNlLiAgVGhhdCB3b3VsZCBrZWVwIHRoaXMgQUJJICdjbG9zZXInIHRvIHN0 YW5kYXJkLiBTb2Z0d2FyZSB0aGF0DQo+IGp1c3QgbG9ncw0KPiBhbiB1bnByb2Nlc3NlZCB2YWx1 ZSBjb3VsZCBqdXN0IHdvcmsgZm9yIGV4YW1wbGUuDQo+IA0KPiBJJ20gbm90IHN1cmUgSSd2ZSB0 b3RhbGx5IHVuZGVyc3Rvb2Qgd2hhdCBpcyBnb2luZyBvbiBoZXJlIHRob3VnaC4NCj4gDQpTbywg dGhlIGBleHRlbmRfbmFtZWAgZG9lcyBub3QgcmVhbGx5IGJyaW5nIGFueSBmdW5jdGlvbmFsIGFk dmFudGFnZS4NCkl0IHdhcyBqdXN0IGFuIGVhc3kgd2F5IGZvciBzb21lb25lIHRvIGtub3cgd2hp Y2gga2luZCBvZiBzZW5zb3IgdGhlDQpjaGFubmVsIHdhcyByZWZlcnJpbmcgdG8uIEluIHRlcm1z IG9mIGNvbnZlcnNpb25zLCBhbGwgdGhlIHdvcmsgaXMgZG9uZQ0KYnkgdGhlIHBhcnQgZm9yIGFs bCB0aGUgZGlmZmVyZW50IHNlbnNvcidzIGFuZCB0aGUgc2NhbGUgaXMgdGhlIHNhbWUNCmZvciBh bGwgb2YgdGhlbS4gU28sIEkgY2FuIGp1c3QgZHJvcCB0aGUgZXh0ZW5kZWQgbmFtZSBhbmQgdXNl IHN0YW5kYXJkDQpBQkkgaWYgeW91IHByZWZlcj8NCg0KPiA+ICtLZXJuZWxWZXJzaW9uOg0KPiA+ ICtDb250YWN0OglsaW51eC1paW9Admdlci5rZXJuZWwub3JnDQo+ID4gK0Rlc2NyaXB0aW9uOg0K PiA+ICsJCVJlYWRzIHRoZSByYXcgKHVuc2NhbGVkIG5vIGJpYXMgcmVtb3ZhbCBldGMpDQo+ID4g dGVtcGVyYXR1cmUgZnJvbQ0KPiA+ICsJCWNoYW5uZWwgWS4gVGhlIHZhbHVlIGlzIHJldHVybmVk IGJ5IGEgVGhlcm1pc3RvciBzZW5zb3INCj4gPiBtZWFzdXJlbWVudC4NCj4gPiArCQlVbml0cyBh ZnRlciBhcHBsaWNhdGlvbiBvZiBzY2FsZSBhcmUgZGVncmVlcyBDZWxzaXVzIG9yDQo+ID4gRmFo cmVuaGVpdA0KPiA+ICsJCWRlcGVuZGluZyBvbiB0aGUgZGV2aWNlIGNvbmZpZ3VyYXRpb24uDQo+ ID4gKw0KPiA+ICtXaGF0OgkJL3N5cy9idXMvaWlvL2RldmljZXMvaWlvOmRldmljZVgvaW5fdGVt cFlfdGhlcm0NCj4gPiBvY291cGxlX3Jhdw0KPiA+ICtLZXJuZWxWZXJzaW9uOg0KPiA+ICtDb250 YWN0OglsaW51eC1paW9Admdlci5rZXJuZWwub3JnDQo+ID4gK0Rlc2NyaXB0aW9uOg0KPiA+ICsJ CVJlYWRzIHRoZSByYXcgKHVuc2NhbGVkIG5vIGJpYXMgcmVtb3ZhbCBldGMpDQo+ID4gdGVtcGVy YXR1cmUgZnJvbQ0KPiA+ICsJCWNoYW5uZWwgWS4gVGhlIHZhbHVlIGlzIHJldHVybmVkIGJ5IGEg VGhlcm1vY291cGxlDQo+ID4gc2Vuc29yIG1lYXN1cmVtZW50Lg0KPiA+ICsJCVVuaXRzIGFmdGVy IGFwcGxpY2F0aW9uIG9mIHNjYWxlIGFyZSBkZWdyZWVzIENlbHNpdXMgb3INCj4gPiBGYWhyZW5o ZWl0DQo+ID4gKwkJZGVwZW5kaW5nIG9uIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbi4NCj4gPiAr DQo+ID4gK1doYXQ6CQkvc3lzL2J1cy9paW8vZGV2aWNlcy9paW86ZGV2aWNlWC9pbl90ZW1wWV9y dGRfcg0KPiA+IGF3DQo+ID4gK0tlcm5lbFZlcnNpb246DQo+ID4gK0NvbnRhY3Q6CWxpbnV4LWlp b0B2Z2VyLmtlcm5lbC5vcmcNCj4gPiArRGVzY3JpcHRpb246DQo+ID4gKwkJUmVhZHMgdGhlIHJh dyAodW5zY2FsZWQgbm8gYmlhcyByZW1vdmFsIGV0YykNCj4gPiB0ZW1wZXJhdHVyZSBmcm9tDQo+ ID4gKwkJY2hhbm5lbCBZLiBUaGUgdmFsdWUgaXMgcmV0dXJuZWQgYnkgYSBSVEQgc2Vuc29yDQo+ ID4gbWVhc3VyZW1lbnQuDQo+ID4gKwkJVW5pdHMgYWZ0ZXIgYXBwbGljYXRpb24gb2Ygc2NhbGUg YXJlIGRlZ3JlZXMgQ2Vsc2l1cyBvcg0KPiA+IEZhaHJlbmhlaXQNCj4gPiArCQlkZXBlbmRpbmcg b24gdGhlIGRldmljZSBjb25maWd1cmF0aW9uLg0KPiA+ICsNCj4gPiArV2hhdDoJCS9zeXMvYnVz L2lpby9kZXZpY2VzL2lpbzpkZXZpY2VYL2luX3RlbXBZX2Rpb2RlDQo+ID4gX3Jhdw0KPiA+ICtL ZXJuZWxWZXJzaW9uOg0KPiA+ICtDb250YWN0OglsaW51eC1paW9Admdlci5rZXJuZWwub3JnDQo+ ID4gK0Rlc2NyaXB0aW9uOg0KPiA+ICsJCVJlYWRzIHRoZSByYXcgKHVuc2NhbGVkIG5vIGJpYXMg cmVtb3ZhbCBldGMpDQo+ID4gdGVtcGVyYXR1cmUgZnJvbQ0KPiA+ICsJCWNoYW5uZWwgWS4gVGhl IHZhbHVlIGlzIHJldHVybmVkIGJ5IGEgRGlvZGUgc2Vuc29yDQo+ID4gbWVhc3VyZW1lbnQuDQo+ ID4gKwkJVW5pdHMgYWZ0ZXIgYXBwbGljYXRpb24gb2Ygc2NhbGUgYXJlIGRlZ3JlZXMgQ2Vsc2l1 cyBvcg0KPiA+IEZhaHJlbmhlaXQNCj4gPiArCQlkZXBlbmRpbmcgb24gdGhlIGRldmljZSBjb25m aWd1cmF0aW9uLg0KPiA+ICsNCj4gPiArV2hhdDoJCS9zeXMvYnVzL2lpby9kZXZpY2VzL2lpbzpk ZXZpY2VYL2luX3ZvbHRhZ2VZX2RpDQo+ID4gcmVjdF9hZGNfcmF3DQo+ID4gK0tlcm5lbFZlcnNp b246DQo+ID4gK0NvbnRhY3Q6CWxpbnV4LWlpb0B2Z2VyLmtlcm5lbC5vcmcNCj4gPiArRGVzY3Jp cHRpb246DQo+ID4gKwkJUmVhZHMgdGhlIHJhdyAodW5zY2FsZWQgbm8gYmlhcyByZW1vdmFsIGV0 Yykgdm9sdGFnZQ0KPiA+IGZyb20NCj4gPiArCQljaGFubmVsIFkuIFRoZSB2YWx1ZSBpcyByZXR1 cm5lZCBieSBhIGRpcmVjdCBBREMNCj4gPiBtZWFzdXJlbWVudC4NCj4gPiArCQlVbml0cyBhZnRl ciBhcHBsaWNhdGlvbiBvZiBzY2FsZSBhcmUgVm9sdHMuDQo+IA0KPiBXaGF0IGlzIHRoZSBleHRl bmRlZCBuYW1lIGFkZGluZz8NCg0KVGhlIHNhbWUgYXMgYmVmb3JlLiBCdXQgaGVyZSBJIHNlZSB0 aGF0IGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgaGF2aW5nDQp0aGUgZXh0ZW5kZWQgbmFtZSBiZWNh dXNlIGlmIGl0J3Mgdm9sdGFnZSB0aGVuIHdlIGtub3cgaXQncyBhIGRpcmVjdA0KYWRjIHJlYWRp bmcuIEkgd2lsbCBkcm9wIGl0Lg0KDQo+IGluX3ZvbHRhZ2VZX3JhdyBhbHJlYWR5IHRlbGxzIHlv dSBpdCdzIHRoZSByYXcgdm9sdGFnZSBmcm9tIGNoYW5uZWwNCj4geS4NCj4gDQo+ID4gZGlmZiAt LWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMNCj4gPiBpbmRleCBmMGMwMzc0MGI5ZmIu LjE0YTI1NmU3ODVjYSAxMDA2NDQNCj4gPiAtLS0gYS9NQUlOVEFJTkVSUw0KPiA+ICsrKyBiL01B SU5UQUlORVJTDQo+ID4gQEAgLTk0OTEsNiArOTQ5MSwxMyBAQCBTOglNYWludGFpbmVkDQo+ID4g IEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9paW8vZGFjL2x0YzE2NjAudHh0 DQo+ID4gIEY6CWRyaXZlcnMvaWlvL2RhYy9sdGMxNjYwLmMNCj4gPiAgDQo+ID4gK0xUQzI5ODMg SUlPIFRFTVBFUkFUVVJFIERSSVZFUg0KPiA+ICtNOglOdW5vIFPDoSA8bnVuby5zYUBhbmFsb2cu Y29tPg0KPiA+ICtXOglodHRwOi8vZXouYW5hbG9nLmNvbS9jb21tdW5pdHkvbGludXgtZGV2aWNl LWRyaXZlcnMNCj4gPiArTDoJbGludXgtaWlvQHZnZXIua2VybmVsLm9yZw0KPiA+ICtTOglTdXBw b3J0ZWQNCj4gPiArRjoJZHJpdmVycy9paW8vdGVtcGVyYXR1cmUvbHRjMjk4My5jDQo+ID4gKw0K PiA+ICBMVEM0MjYxIEhBUkRXQVJFIE1PTklUT1IgRFJJVkVSDQo+ID4gIE06CUd1ZW50ZXIgUm9l Y2sgPGxpbnV4QHJvZWNrLXVzLm5ldD4NCj4gPiAgTDoJbGludXgtaHdtb25Admdlci5rZXJuZWwu b3JnDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWlvL3RlbXBlcmF0dXJlL0tjb25maWcNCj4g PiBiL2RyaXZlcnMvaWlvL3RlbXBlcmF0dXJlL0tjb25maWcNCj4gPiBpbmRleCA3MzdmYWEwOTAx ZmUuLjA0YjVhNjdiNTkzYyAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2lpby90ZW1wZXJhdHVy ZS9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVycy9paW8vdGVtcGVyYXR1cmUvS2NvbmZpZw0KPiA+ IEBAIC00LDYgKzQsMTYgQEANCj4gPiAgIw0KPiA+ICBtZW51ICJUZW1wZXJhdHVyZSBzZW5zb3Jz Ig0KPiA+ICANCj4gPiArY29uZmlnIExUQzI5ODMNCj4gPiArCXRyaXN0YXRlICJBbmFsb2cgRGV2 aWNlcyBNdWx0aS1TZW5zb3IgRGlnaXRhbCBUZW1wZXJhdHVyZQ0KPiA+IE1lYXN1cmVtZW50IFN5 c3RlbSINCj4gPiArCWRlcGVuZHMgb24gU1BJDQo+ID4gKwloZWxwDQo+ID4gKwkgIFNheSB5ZXMg aGVyZSB0byBidWlsZCBzdXBwb3J0IGZvciB0aGUgTFRDMjk4MyBNdWx0aS1TZW5zb3INCj4gPiAr CSAgaGlnaCBhY2N1cmFjeSBkaWdpdGFsIHRlbXBlcmF0dXJlIG1lYXN1cmVtZW50IHN5c3RlbS4N Cj4gPiArDQo+ID4gKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29z ZSBNIGhlcmU6IHRoZSBtb2R1bGUNCj4gPiArCSAgd2lsbCBiZSBjYWxsZWQgbHRjMjk4My4NCj4g PiArDQo+ID4gIGNvbmZpZyBNQVhJTV9USEVSTU9DT1VQTEUNCj4gPiAgCXRyaXN0YXRlICJNYXhp bSB0aGVybW9jb3VwbGUgc2Vuc29ycyINCj4gPiAgCWRlcGVuZHMgb24gU1BJDQo+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvaWlvL3RlbXBlcmF0dXJlL01ha2VmaWxlDQo+ID4gYi9kcml2ZXJzL2lp by90ZW1wZXJhdHVyZS9NYWtlZmlsZQ0KPiA+IGluZGV4IGJhY2E0Nzc2Y2EwZC4uZDZiODUwYjBj ZjYzIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvaWlvL3RlbXBlcmF0dXJlL01ha2VmaWxlDQo+ ID4gKysrIGIvZHJpdmVycy9paW8vdGVtcGVyYXR1cmUvTWFrZWZpbGUNCj4gPiBAQCAtMyw2ICsz LDcgQEANCj4gPiAgIyBNYWtlZmlsZSBmb3IgaW5kdXN0cmlhbCBJL08gdGVtcGVyYXR1cmUgZHJp dmVycw0KPiA+ICAjDQo+ID4gIA0KPiA+ICtvYmotJChDT05GSUdfTFRDMjk4MykgKz0gbHRjMjk4 My5vDQo+ID4gIG9iai0kKENPTkZJR19ISURfU0VOU09SX1RFTVApICs9IGhpZC1zZW5zb3ItdGVt cGVyYXR1cmUubw0KPiA+ICBvYmotJChDT05GSUdfTUFYSU1fVEhFUk1PQ09VUExFKSArPSBtYXhp bV90aGVybW9jb3VwbGUubw0KPiA+ICBvYmotJChDT05GSUdfTUFYMzE4NTYpICs9IG1heDMxODU2 Lm8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vdGVtcGVyYXR1cmUvbHRjMjk4My5jDQo+ ID4gYi9kcml2ZXJzL2lpby90ZW1wZXJhdHVyZS9sdGMyOTgzLmMNCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uMmQ5N2I1MDE5ZTNiDQo+ID4gLS0tIC9k ZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvaWlvL3RlbXBlcmF0dXJlL2x0YzI5ODMuYw0KPiA+ IEBAIC0wLDAgKzEsMTMyNyBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMA0KPiA+ICsvKg0KPiA+ICsgKiBBbmFsb2cgRGV2aWNlcyBMVEMyOTgzIE11bHRpLVNlbnNv ciBEaWdpdGFsIFRlbXBlcmF0dXJlDQo+ID4gTWVhc3VyZW1lbnQgU3lzdGVtDQo+ID4gKyAqIGRy aXZlcg0KPiA+ICsgKg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAxOSBBbmFsb2cgRGV2aWNlcyBJbmMu DQo+ID4gKyAqLw0KPiA+ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9paW8v aWlvLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L2xpc3QuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvb2ZfZ3Bpby5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+DQo+ ID4gKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+DQo+ID4gKw0KPiA+ICsvKiByZWdpc3RlciBt YXAgKi8NCj4gPiArI2RlZmluZSBMVEMyOTgzX1NUQVRVU19SRUcJCQkweDAwMDANCj4gPiArI2Rl ZmluZSBMVEMyOTgzX1RFTVBfUkVTX1NUQVJUX1JFRwkJMHgwMDEwDQo+ID4gKyNkZWZpbmUgTFRD Mjk4M19URU1QX1JFU19FTkRfUkVHCQkweDAwNUYNCj4gPiArI2RlZmluZSBMVEMyOTgzX0dMT0JB TF9DT05GSUdfUkVHCQkweDAwRjANCj4gPiArI2RlZmluZSBMVEMyOTgzX01VTFRfQ0hBTk5FTF9T VEFSVF9SRUcJCTB4MDBGNA0KPiA+ICsjZGVmaW5lIExUQzI5ODNfTVVMVF9DSEFOTkVMX0VORF9S RUcJCTB4MDBGNw0KPiA+ICsjZGVmaW5lIExUQzI5ODNfTVVYX0NPTkZJR19SRUcJCQkweDAwRkYN Cj4gPiArI2RlZmluZSBMVEMyOTgzX0NIQU5fQVNTSUdOX1NUQVJUX1JFRwkJMHgwMjAwDQo+ID4g KyNkZWZpbmUgTFRDMjk4M19DSEFOX0FTU0lHTl9FTkRfUkVHCQkweDAyNEYNCj4gPiArI2RlZmlu ZSBMVEMyOTgzX0NVU1RfU0VOU19UQkxfU1RBUlRfUkVHCQkweDAyNTANCj4gPiArI2RlZmluZSBM VEMyOTgzX0NVU1RfU0VOU19UQkxfRU5EX1JFRwkJMHgwM0NGDQo+ID4gKw0KPiA+ICsjZGVmaW5l IExUQzI5ODNfRElGRkVSRU5USUFMX0NIQU5fTUlOCQkyDQo+ID4gKyNkZWZpbmUgTFRDMjk4M19N QVhfQ0hBTk5FTFNfTlIJCQkyMA0KPiA+ICsjZGVmaW5lIExUQzI5ODNfTUlOX0NIQU5ORUxTX05S CQkJMQ0KPiA+ICsjZGVmaW5lIExUQzI5ODNfU0xFRVAJCQkJMHg5Nw0KPiA+ICsjZGVmaW5lIExU QzI5ODNfQ1VTVE9NX1NURUlOSEFSVF9TSVpFCQkyNA0KPiA+ICsjZGVmaW5lIExUQzI5ODNfQ1VT VE9NX1NFTlNPUl9FTlRSWV9TWgkJNg0KPiA+ICsjZGVmaW5lIExUQzI5ODNfQ1VTVE9NX1NURUlO SEFSVF9FTlRSWV9TWgk0DQo+ID4gKw0KPiA+ICsjZGVmaW5lIExUQzI5ODNfQ0hBTl9TVEFSVF9B RERSKGNoYW4pIFwNCj4gPiArCQkJKCgoY2hhbiAtIDEpICogNCkgKw0KPiA+IExUQzI5ODNfQ0hB Tl9BU1NJR05fU1RBUlRfUkVHKQ0KPiA+ICsjZGVmaW5lIExUQzI5ODNfQ0hBTl9SRVNfQUREUihj aGFuKSBcDQo+ID4gKwkJCSgoKGNoYW4gLSAxKSAqIDQpICsgTFRDMjk4M19URU1QX1JFU19TVEFS VF9SRUcpDQo+ID4gKyNkZWZpbmUgTFRDMjk4M19USEVSTU9DT1VQTEVfRElGRl9NQVNLCQlCSVQo MykNCj4gPiArI2RlZmluZSBMVEMyOTgzX1RIRVJNSVNUT1JfRElGRl9NQVNLCQlCSVQoMikNCj4g PiArI2RlZmluZSBMVEMyOTgzX0RJT0RFX0RJRkZfTUFTSwkJCUJJVCgyKQ0KPiA+ICsjZGVmaW5l IExUQzI5ODNfUlREXzRfV0lSRV9NQVNLCQkJQklUKDMpDQo+ID4gKyNkZWZpbmUgTFRDMjk4M19S VERfUk9UQVRJT05fTUFTSwkJQklUKDEpDQo+ID4gKyNkZWZpbmUgTFRDMjk4M19SVERfS0VMVklO X1JfU0VOU0VfTUFTSwkJR0VOTUFTSygzLCAyKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBMVEMyOTgz X0NPTU1PTl9IQVJEX0ZBVUxUX01BU0sJR0VOTUFTSygzMSwgMzApDQo+ID4gKyNkZWZpbmUgTFRD Mjk4M19DT01NT05fU09GVF9GQVVMVF9NQVNLCUdFTk1BU0soMjcsIDI1KQ0KPiA+ICsNCj4gPiAr I2RlZmluZQlMVEMyOTgzX1NUQVRVU19TVEFSVF9NQVNLCUJJVCg3KQ0KPiA+ICsjZGVmaW5lCUxU QzI5ODNfU1RBVFVTX1NUQVJUKHgpCQlGSUVMRF9QUkVQKExUQzI5ODNfDQo+ID4gU1RBVFVTX1NU QVJUX01BU0ssIHgpDQo+ID4gKw0KPiA+ICsjZGVmaW5lCUxUQzI5ODNfU1RBVFVTX0NIQU5fU0VM X01BU0sJR0VOTUFTSyg0LCAwKQ0KPiA+ICsjZGVmaW5lCUxUQzI5ODNfU1RBVFVTX0NIQU5fU0VM KHgpIFwNCj4gPiArCQkJCUZJRUxEX1BSRVAoTFRDMjk4M19TVEFUVVNfQ0hBTl9TRUxfTUFTSw0K PiA+ICwgeCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgTFRDMjk4M19URU1QX1VOSVRTX01BU0sJCUJJ VCgyKQ0KPiA+ICsjZGVmaW5lIExUQzI5ODNfVEVNUF9VTklUUyh4KQkJRklFTERfUFJFUChMVEMy OTgzX1RFTVANCj4gPiBfVU5JVFNfTUFTSywgeCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgTFRDMjk4 M19OT1RDSF9GUkVRX01BU0sJCUdFTk1BU0soMSwgMCkNCj4gPiArI2RlZmluZSBMVEMyOTgzX05P VENIX0ZSRVEoeCkJCUZJRUxEX1BSRVAoTFRDMjk4M19OT1RDDQo+ID4gSF9GUkVRX01BU0ssIHgp DQo+ID4gKw0KPiA+ICsjZGVmaW5lIExUQzI5ODNfUkVTX1ZBTElEX01BU0sJCUJJVCgyNCkNCj4g PiArI2RlZmluZSBMVEMyOTgzX0RBVEFfTUFTSwkJR0VOTUFTSygyMywgMCkNCj4gPiArI2RlZmlu ZSBMVEMyOTgzX0RBVEFfU0lHTl9CSVQJCTIzDQo+ID4gKw0KPiA+ICsjZGVmaW5lIExUQzI5ODNf Q0hBTl9UWVBFX01BU0sJCUdFTk1BU0soMzEsIDI3KQ0KPiA+ICsjZGVmaW5lIExUQzI5ODNfQ0hB Tl9UWVBFKHgpCQlGSUVMRF9QUkVQKExUQzI5ODNfQ0hBTg0KPiA+IF9UWVBFX01BU0ssIHgpDQo+ ID4gKw0KPiA+ICsvKiBjb2xkIGp1bmN0aW9uIGZvciB0aGVybW9jb3VwbGVzIGFuZCByc2Vuc2Ug Zm9yIHJ0ZCdzIGFuZA0KPiA+IHRoZXJtaXN0b3IncyAqLw0KPiA+ICsjZGVmaW5lIExUQzI5ODNf Q0hBTl9BU1NJR05fTUFTSwlHRU5NQVNLKDI2LCAyMikNCj4gPiArI2RlZmluZSBMVEMyOTgzX0NI QU5fQVNTSUdOKHgpCQlGSUVMRF9QUkVQKExUQzI5ODNfQ0hBTg0KPiA+IF9BU1NJR05fTUFTSywg eCkNCj4gPiArDQo+ID4gKyNkZWZpbmUgTFRDMjk4M19DVVNUT01fTEVOX01BU0sJCUdFTk1BU0so NSwgMCkNCj4gPiArI2RlZmluZSBMVEMyOTgzX0NVU1RPTV9MRU4oeCkJCUZJRUxEX1BSRVAoTFRD Mjk4M19DVVNUDQo+ID4gT01fTEVOX01BU0ssIHgpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIExUQzI5 ODNfQ1VTVE9NX0FERFJfTUFTSwlHRU5NQVNLKDExLCA2KQ0KPiA+ICsjZGVmaW5lIExUQzI5ODNf Q1VTVE9NX0FERFIoeCkJCUZJRUxEX1BSRVAoTFRDMjk4M19DVVNUDQo+ID4gT01fQUREUl9NQVNL LCB4KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBMVEMyOTgzX1RIRVJNT0NPVVBMRV9DRkdfTUFTSwlH RU5NQVNLKDIxLCAxOCkNCj4gPiArI2RlZmluZSBMVEMyOTgzX1RIRVJNT0NPVVBMRV9DRkcoeCkg XA0KPiA+ICsJCQkJRklFTERfUFJFUChMVEMyOTgzX1RIRVJNT0NPVVBMRV9DRkdfTUFTDQo+ID4g SywgeCkNCj4gPiArI2RlZmluZSBMVEMyOTgzX1RIRVJNT0NPVVBMRV9IQVJEX0ZBVUxUX01BU0sJ R0VOTUFTSygzMSwgMjkpDQo+ID4gKyNkZWZpbmUgTFRDMjk4M19USEVSTU9DT1VQTEVfU09GVF9G QVVMVF9NQVNLCUdFTk1BU0soMjgsIDI1KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBMVEMyOTgzX1JU RF9DRkdfTUFTSwkJR0VOTUFTSygyMSwgMTgpDQo+ID4gKyNkZWZpbmUgTFRDMjk4M19SVERfQ0ZH KHgpCQlGSUVMRF9QUkVQKExUQzI5ODNfUlREX0NGR19NQVNLDQo+ID4gLCB4KQ0KPiA+ICsjZGVm aW5lIExUQzI5ODNfUlREX0VYQ19DVVJSRU5UX01BU0sJR0VOTUFTSygxNywgMTQpDQo+ID4gKyNk ZWZpbmUgTFRDMjk4M19SVERfRVhDX0NVUlJFTlQoeCkgXA0KPiA+ICsJCQkJRklFTERfUFJFUChM VEMyOTgzX1JURF9FWENfQ1VSUkVOVF9NQVNLDQo+ID4gLCB4KQ0KPiA+ICsjZGVmaW5lIExUQzI5 ODNfUlREX0NVUlZFX01BU0sJCUdFTk1BU0soMTMsIDEyKQ0KPiA+ICsjZGVmaW5lIExUQzI5ODNf UlREX0NVUlZFKHgpCQlGSUVMRF9QUkVQKExUQzI5ODNfUlREXw0KPiA+IENVUlZFX01BU0ssIHgp DQo+ID4gKw0KPiA+ICsjZGVmaW5lIExUQzI5ODNfVEhFUk1JU1RPUl9DRkdfTUFTSwlHRU5NQVNL KDIxLCAxOSkNCj4gPiArI2RlZmluZSBMVEMyOTgzX1RIRVJNSVNUT1JfQ0ZHKHgpIFwNCj4gPiAr CQkJCUZJRUxEX1BSRVAoTFRDMjk4M19USEVSTUlTVE9SX0NGR19NQVNLLA0KPiA+IHgpDQo+ID4g KyNkZWZpbmUgTFRDMjk4M19USEVSTUlTVE9SX0VYQ19DVVJSRU5UX01BU0sJR0VOTUFTSygxOCwg MTUpDQo+ID4gKyNkZWZpbmUgTFRDMjk4M19USEVSTUlTVE9SX0VYQ19DVVJSRU5UKHgpIFwNCj4g PiArCQkJRklFTERfUFJFUChMVEMyOTgzX1RIRVJNSVNUT1JfRVhDX0NVUlJFTlRfTUFTSywNCj4g PiB4KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBMVEMyOTgzX0RJT0RFX0NGR19NQVNLCQlHRU5NQVNL KDI2LCAyNCkNCj4gPiArI2RlZmluZSBMVEMyOTgzX0RJT0RFX0NGRyh4KQkJRklFTERfUFJFUChM VEMyOTgzX0RJT0QNCj4gPiBFX0NGR19NQVNLLCB4KQ0KPiA+ICsjZGVmaW5lIExUQzI5ODNfRElP REVfRVhDX0NVUlJFTlRfTUFTSwlHRU5NQVNLKDIzLCAyMikNCj4gPiArI2RlZmluZSBMVEMyOTgz X0RJT0RFX0VYQ19DVVJSRU5UKHgpIFwNCj4gPiArCQkJCUZJRUxEX1BSRVAoTFRDMjk4M19ESU9E RV9FWENfQ1VSUkVOVF9NQQ0KPiA+IFNLLCB4KQ0KPiA+ICsjZGVmaW5lIExUQzI5ODNfRElPREVf SURFQUxfRkFDVE9SX01BU0sJR0VOTUFTSygyMSwgMCkNCj4gPiArI2RlZmluZSBMVEMyOTgzX0RJ T0RFX0lERUFMX0ZBQ1RPUih4KSBcDQo+ID4gKwkJCQlGSUVMRF9QUkVQKExUQzI5ODNfRElPREVf SURFQUxfRkFDVE9SX00NCj4gPiBBU0ssIHgpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIExUQzI5ODNf Ul9TRU5TRV9WQUxfTUFTSwlHRU5NQVNLKDI2LCAwKQ0KPiA+ICsjZGVmaW5lIExUQzI5ODNfUl9T RU5TRV9WQUwoeCkJCUZJRUxEX1BSRVAoTFRDMjk4M19SX1NFDQo+ID4gTlNFX1ZBTF9NQVNLLCB4 KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBMVEMyOTgzX0FEQ19TSU5HTEVfRU5ERURfTUFTSwlCSVQo MjYpDQo+ID4gKyNkZWZpbmUgTFRDMjk4M19BRENfU0lOR0xFX0VOREVEKHgpIFwNCj4gPiArCQkJ CUZJRUxEX1BSRVAoTFRDMjk4M19BRENfU0lOR0xFX0VOREVEX01BUw0KPiA+IEssIHgpDQo+ID4g Kw0KPiA+ICtlbnVtIHsNCj4gPiArCUxUQzI5ODNfU0VOU09SX1RIRVJNT0NPVVBMRSA9IDEsDQo+ ID4gKwlMVEMyOTgzX1NFTlNPUl9USEVSTU9DT1VQTEVfQ1VTVE9NID0gOSwNCj4gPiArCUxUQzI5 ODNfU0VOU09SX1JURCA9IDEwLA0KPiA+ICsJTFRDMjk4M19TRU5TT1JfUlREX0NVU1RPTSA9IDE4 LA0KPiA+ICsJTFRDMjk4M19TRU5TT1JfVEhFUk1JU1RPUiA9IDE5LA0KPiA+ICsJTFRDMjk4M19T RU5TT1JfVEhFUk1JU1RPUl9TVEVJTkhBUlQgPSAyNiwNCj4gPiArCUxUQzI5ODNfU0VOU09SX1RI RVJNSVNUT1JfQ1VTVE9NID0gMjcsDQo+ID4gKwlMVEMyOTgzX1NFTlNPUl9ESU9ERSA9IDI4LA0K PiA+ICsJTFRDMjk4M19TRU5TT1JfU0VOU0VfUkVTSVNUT1IgPSAyOSwNCj4gPiArCUxUQzI5ODNf U0VOU09SX0RJUkVDVF9BREMgPSAzMCwNCj4gPiArfTsNCj4gPiArDQo+ID4gKyNkZWZpbmUgdG9f dGhlcm1vY291cGxlKF9zZW5zb3IpIFwNCj4gPiArCQljb250YWluZXJfb2YoX3NlbnNvciwgc3Ry dWN0IGx0YzI5ODNfdGhlcm1vY291cGxlLA0KPiA+IHNlbnNvcikNCj4gPiArDQo+ID4gKyNkZWZp bmUgdG9fcnRkKF9zZW5zb3IpIFwNCj4gPiArCQljb250YWluZXJfb2YoX3NlbnNvciwgc3RydWN0 IGx0YzI5ODNfcnRkLCBzZW5zb3IpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIHRvX3RoZXJtaXN0b3Io X3NlbnNvcikgXA0KPiA+ICsJCWNvbnRhaW5lcl9vZihfc2Vuc29yLCBzdHJ1Y3QgbHRjMjk4M190 aGVybWlzdG9yLA0KPiA+IHNlbnNvcikNCj4gPiArDQo+ID4gKyNkZWZpbmUgdG9fZGlvZGUoX3Nl bnNvcikgXA0KPiA+ICsJCWNvbnRhaW5lcl9vZihfc2Vuc29yLCBzdHJ1Y3QgbHRjMjk4M19kaW9k ZSwgc2Vuc29yKQ0KPiA+ICsNCj4gPiArI2RlZmluZSB0b19yc2Vuc2UoX3NlbnNvcikgXA0KPiA+ ICsJCWNvbnRhaW5lcl9vZihfc2Vuc29yLCBzdHJ1Y3QgbHRjMjk4M19yc2Vuc2UsIHNlbnNvcikN Cj4gPiArDQo+ID4gKyNkZWZpbmUgdG9fYWRjKF9zZW5zb3IpIFwNCj4gPiArCQljb250YWluZXJf b2YoX3NlbnNvciwgc3RydWN0IGx0YzI5ODNfYWRjLCBzZW5zb3IpDQo+ID4gKw0KPiA+ICtzdHJ1 Y3QgbHRjMjk4M19kYXRhIHsNCj4gPiArCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsNCj4gPiArCXN0 cnVjdCBzcGlfZGV2aWNlICpzcGk7DQo+ID4gKwlzdHJ1Y3QgbXV0ZXggbG9jazsNCj4gPiArCXN0 cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247DQo+ID4gKwlzdHJ1Y3QgaWlvX2NoYW5fc3BlYyAq aWlvX2NoYW47DQo+ID4gKwlzdHJ1Y3QgbHRjMjk4M19zZW5zb3IgKipzZW5zb3JzOw0KPiA+ICsJ dTMyIG11eF9kZWxheV9jb25maWc7DQo+ID4gKwl1MzIgZmlsdGVyX25vdGNoX2ZyZXE7DQo+ID4g Kwl1MTYgY3VzdG9tX3RhYmxlX3NpemU7DQo+ID4gKwl1OCBudW1fY2hhbm5lbHM7DQo+ID4gKwl1 OCBpaW9fY2hhbm5lbHM7DQo+ID4gKwlib29sIHRlbXBfZmFyZW5oZWl0Ow0KPiA+ICsJYm9vbCBy ZXNldDsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBsdGMyOTgzX3NlbnNvciB7DQo+ID4g KwlpbnQgKCpmYXVsdF9oYW5kbGVyKShjb25zdCBzdHJ1Y3QgbHRjMjk4M19kYXRhICpzdCwgY29u c3QgdTMyDQo+ID4gcmVzdWx0KTsNCj4gPiArCWludCAoKmFzc2lnbl9jaGFuKShzdHJ1Y3QgbHRj Mjk4M19kYXRhICpzdCwNCj4gPiArCQkJICAgY29uc3Qgc3RydWN0IGx0YzI5ODNfc2Vuc29yICpz ZW5zb3IpOw0KPiA+ICsJY29uc3QgY2hhciAqbmFtZTsNCj4gPiArCS8qIHNwZWNpZmllcyB0aGUg c2Vuc29yIGNoYW5uZWwgKi8NCj4gPiArCXUzMiBjaGFuOw0KPiA+ICsJLyogc2Vuc29yIHR5cGUg Ki8NCj4gPiArCXUzMiB0eXBlOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGx0YzI5ODNf Y3VzdG9tX3NlbnNvciB7DQo+ID4gKwkvKiByYXcgdGFibGUgc2Vuc29yIGRhdGEgKi8NCj4gPiAr CXU4ICp0YWJsZTsNCj4gPiArCXNpemVfdCBzaXplOw0KPiA+ICsJLyogYWRkcmVzcyBvZmZzZXQg Ki8NCj4gPiArCXM4IG9mZnNldDsNCj4gPiArCWJvb2wgaXNfc3RlaW5oYXJ0Ow0KPiA+ICt9Ow0K PiA+ICsNCj4gPiArc3RydWN0IGx0YzI5ODNfdGhlcm1vY291cGxlIHsNCj4gPiArCXN0cnVjdCBs dGMyOTgzX3NlbnNvciBzZW5zb3I7DQo+ID4gKwlzdHJ1Y3QgbHRjMjk4M19jdXN0b21fc2Vuc29y ICpjdXN0b207DQo+ID4gKwl1MzIgc2Vuc29yX2NvbmZpZzsNCj4gPiArCXUzMiBjb2xkX2p1bmN0 aW9uX2NoYW47DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgbHRjMjk4M19ydGQgew0KPiA+ ICsJc3RydWN0IGx0YzI5ODNfc2Vuc29yIHNlbnNvcjsNCj4gPiArCXN0cnVjdCBsdGMyOTgzX2N1 c3RvbV9zZW5zb3IgKmN1c3RvbTsNCj4gPiArCXUzMiBzZW5zb3JfY29uZmlnOw0KPiA+ICsJdTMy IHJfc2Vuc2VfY2hhbjsNCj4gPiArCXUzMiBleGNpdGF0aW9uX2N1cnJlbnQ7DQo+ID4gKwl1MzIg cnRkX2N1cnZlOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGx0YzI5ODNfdGhlcm1pc3Rv ciB7DQo+ID4gKwlzdHJ1Y3QgbHRjMjk4M19zZW5zb3Igc2Vuc29yOw0KPiA+ICsJc3RydWN0IGx0 YzI5ODNfY3VzdG9tX3NlbnNvciAqY3VzdG9tOw0KPiA+ICsJdTMyIHNlbnNvcl9jb25maWc7DQo+ ID4gKwl1MzIgcl9zZW5zZV9jaGFuOw0KPiA+ICsJdTMyIGV4Y2l0YXRpb25fY3VycmVudDsNCj4g PiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBsdGMyOTgzX2Rpb2RlIHsNCj4gPiArCXN0cnVjdCBs dGMyOTgzX3NlbnNvciBzZW5zb3I7DQo+ID4gKwl1MzIgc2Vuc29yX2NvbmZpZzsNCj4gPiArCXUz MiBleGNpdGF0aW9uX2N1cnJlbnQ7DQo+ID4gKwl1MzIgaWRlYWxfZmFjdG9yX3ZhbHVlOw0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGx0YzI5ODNfcnNlbnNlIHsNCj4gPiArCXN0cnVjdCBs dGMyOTgzX3NlbnNvciBzZW5zb3I7DQo+ID4gKwl1MzIgcl9zZW5zZV92YWw7DQo+ID4gK307DQo+ ID4gKw0KPiA+ICtzdHJ1Y3QgbHRjMjk4M19hZGMgew0KPiA+ICsJc3RydWN0IGx0YzI5ODNfc2Vu c29yIHNlbnNvcjsNCj4gPiArCWJvb2wgc2luZ2xlX2VuZGVkOw0KPiA+ICt9Ow0KPiA+ICsNCj4g PiArLyoNCj4gPiArICogQ29udmVydCB0byBRIGZvcm1hdCBudW1iZXJzLiBUaGVzZSBudW1iZXIn cyBhcmUgaW50ZWdlcnMgd2hlcmUNCj4gPiArICogdGhlIG51bWJlciBvZiBpbnRlZ2VyIGFuZCBm cmFjdGlvbmFsIGJpdHMgYXJlIHNwZWNpZmllZC4gVGhlDQo+ID4gcmVzb2x1dGlvbg0KPiA+ICsg KiBpcyBnaXZlbiBieSAxL0ByZXNvbHV0aW9uIGFuZCB0ZWxsIHVzIHRoZSBudW1iZXIgb2YgZnJh Y3Rpb25hbA0KPiA+IGJpdHMuIEZvcg0KPiA+ICsgKiBpbnN0YW5jZSBhIHJlc29sdXRpb24gb2Yg Ml4tMTAgbWVhbnMgd2UgaGF2ZSAxMCBmcmFjdGlvbmFsDQo+ID4gYml0cy4NCj4gPiArICovDQo+ ID4gK3N0YXRpYyB1MzIgX19jb252ZXJ0X3RvX3Jhdyhjb25zdCB1NjQgdmFsLCBjb25zdCB1MzIg cmVzb2x1dGlvbikNCj4gPiArew0KPiA+ICsJdTY0IF9fcmVzID0gdmFsICogcmVzb2x1dGlvbjsN Cj4gPiArDQo+ID4gKwkvKiBhbGwgdmFsdWVzIGFyZSBtdWx0aXBsaWVkIGJ5IDEwMDAwMDAgdG8g cmVtb3ZlIHRoZSBmcmFjdGlvbg0KPiA+ICovDQo+ID4gKwlkb19kaXYoX19yZXMsIDEwMDAwMDAp Ow0KPiA+ICsNCj4gPiArCXJldHVybiBfX3JlczsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHUzMiBfX2NvbnZlcnRfdG9fcmF3X3NpZ24oY29uc3QgdTY0IHZhbCwgY29uc3QgdTMyDQo+ID4g cmVzb2x1dGlvbikNCj4gPiArew0KPiA+ICsJczY0IF9fcmVzID0gLShzMzIpdmFsOw0KPiA+ICsN Cj4gPiArCV9fcmVzID0gX19jb252ZXJ0X3RvX3JhdyhfX3JlcywgcmVzb2x1dGlvbik7DQo+ID4g Kw0KPiA+ICsJcmV0dXJuICh1MzIpLV9fcmVzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IF9fbHRjMjk4M19mYXVsdF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBsdGMyOTgzX2RhdGEgKnN0 LA0KPiA+ICsJCQkJICAgY29uc3QgdTMyIHJlc3VsdCwgY29uc3QgdTMyDQo+ID4gaGFyZF9tYXNr LA0KPiA+ICsJCQkJICAgY29uc3QgdTMyIHNvZnRfbWFzaykNCj4gPiArew0KPiA+ICsJY29uc3Qg c3RydWN0IGRldmljZSAqZGV2ID0gJnN0LT5zcGktPmRldjsNCj4gPiArDQo+ID4gKwlpZiAocmVz dWx0ICYgaGFyZF9tYXNrKSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIGNvbnZlcnNp b246IFNlbnNvciBIQVJEDQo+ID4gZmF1bHRcbiIpOw0KPiA+ICsJCXJldHVybiAtRUlPOw0KPiA+ ICsJfSBlbHNlIGlmIChyZXN1bHQgJiBzb2Z0X21hc2spIHsNCj4gPiArCQkvKiBqdXN0IHByaW50 IGEgd2FybmluZyAqLw0KPiA+ICsJCWRldl93YXJuKGRldiwgIlN1c3BpY2lvdXMgY29udmVyc2lv bjogU2Vuc29yIFNPRlQNCj4gPiBmYXVsdFxuIik7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0 dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgX19sdGMyOTgzX2NoYW5fYXNz aWduX2NvbW1vbihjb25zdCBzdHJ1Y3QgbHRjMjk4M19kYXRhDQo+ID4gKnN0LA0KPiA+ICsJCQkJ CWNvbnN0IHN0cnVjdCBsdGMyOTgzX3NlbnNvcg0KPiA+ICpzZW5zb3IsDQo+ID4gKwkJCQkJdTMy IGNoYW5fdmFsKQ0KPiA+ICt7DQo+ID4gKwl1MzIgcmVnID0gTFRDMjk4M19DSEFOX1NUQVJUX0FE RFIoc2Vuc29yLT5jaGFuKTsNCj4gPiArCV9fYmUzMiBfX2NoYW5fdmFsOw0KPiA+ICsNCj4gPiAr CWNoYW5fdmFsIHw9IExUQzI5ODNfQ0hBTl9UWVBFKHNlbnNvci0+dHlwZSk7DQo+ID4gKwlkZXZf ZGJnKCZzdC0+c3BpLT5kZXYsICJBc3NpZ24gJXMsIHJlZzoweCUwNFgsIHZhbDoweCUwOFhcbiIs DQo+ID4gKwkJCQkJCQlzZW5zb3ItPm5hbWUsDQo+ID4gKwkJCQkJCQlyZWcsIGNoYW5fdmFsKTsN Cj4gPiArCV9fY2hhbl92YWwgPSBjcHVfdG9fYmUzMihjaGFuX3ZhbCk7DQo+ID4gKwlyZXR1cm4g cmVnbWFwX2J1bGtfd3JpdGUoc3QtPnJlZ21hcCwgcmVnLCAmX19jaGFuX3ZhbCwNCj4gPiArCQkJ CSBzaXplb2YoX19jaGFuX3ZhbCkpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IF9f bHRjMjk4M19jaGFuX2N1c3RvbV9zZW5zb3JfYXNzaWduKHN0cnVjdCBsdGMyOTgzX2RhdGENCj4g PiAqc3QsDQo+ID4gKwkJCQkJICBzdHJ1Y3QgbHRjMjk4M19jdXN0b21fc2Vuc29yDQo+ID4gKmN1 c3RvbSwNCj4gPiArCQkJCQkgIHUzMiAqY2hhbl92YWwpDQo+ID4gK3sNCj4gPiArCXUzMiByZWc7 DQo+ID4gKwl1OCBtdWx0ID0gY3VzdG9tLT5pc19zdGVpbmhhcnQgPw0KPiA+IExUQzI5ODNfQ1VT VE9NX1NURUlOSEFSVF9FTlRSWV9TWiA6DQo+ID4gKwkJTFRDMjk4M19DVVNUT01fU0VOU09SX0VO VFJZX1NaOw0KPiA+ICsJY29uc3Qgc3RydWN0IGRldmljZSAqZGV2ID0gJnN0LT5zcGktPmRldjsN Cj4gPiArCS8qDQo+ID4gKwkgKiBjdXN0b20tPnNpemUgaG9sZHMgdGhlIHJhdyBzaXplIG9mIHRo ZSB0YWJsZS4gSG93ZXZlciwgd2hlbg0KPiA+ICsJICogY29uZmlndXJpbmcgdGhlIHNlbnNvciBj aGFubmVsLCB3ZSBtdXN0IHdyaXRlIHRoZSBudW1iZXIgb2YNCj4gPiArCSAqIGVudHJpZXMgb2Yg dGhlIHRhYmxlIG1pbnVzIDEuIEZvciBzdGVpbmhhcnQgc2Vuc29ycyAwIGlzDQo+ID4gd3JpdHRl bg0KPiA+ICsJICogc2luY2UgdGhlIHNpemUgaXMgY29uc3RhbnQhDQo+ID4gKwkgKi8NCj4gPiAr CWNvbnN0IHU4IGxlbiA9IGN1c3RvbS0+aXNfc3RlaW5oYXJ0ID8gMCA6DQo+ID4gKwkJKGN1c3Rv bS0+c2l6ZSAvIExUQzI5ODNfQ1VTVE9NX1NFTlNPUl9FTlRSWV9TWikgLSAxOw0KPiA+ICsJLyoN Cj4gPiArCSAqIENoZWNrIGlmIHRoZSBvZmZzZXQgd2FzIGFzc2lnbmVkIGFscmVhZHkuIEl0IHNo b3VsZCBiZSBmb3INCj4gPiBzdGVpbmhhcnQNCj4gPiArCSAqIHNlbnNvcnMuIFdoZW4gY29taW5n IGZyb20gc2xlZXAsIGl0IHNob3VsZCBiZSBhc3NpZ25lZCBmb3INCj4gPiBhbGwuDQo+ID4gKwkg Ki8NCj4gPiArCWlmIChjdXN0b20tPm9mZnNldCA8IDApIHsNCj4gPiArCQkvKg0KPiA+ICsJCSAq IFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBhZ2FpbiBoZXJlIGJlY2F1c2UsIGZyb20gdGhlDQo+ID4g bW9tZW50DQo+ID4gKwkJICogd2hlbiB0aGlzIHRlc3Qgd2FzIGRvbmUgKHN1Y2Nlc3NmdWxseSkg Zm9yIHRoaXMNCj4gPiBjdXN0b20NCj4gPiArCQkgKiBzZW5zb3IsIGEgc3RlaW5oYXJ0IHNlbnNv ciBtaWdodCBoYXZlIGJlZW4gYWRkZWQNCj4gPiBjaGFuZ2luZw0KPiA+ICsJCSAqIGN1c3RvbV90 YWJsZV9zaXplLi4uDQo+ID4gKwkJICovDQo+ID4gKwkJaWYgKHN0LT5jdXN0b21fdGFibGVfc2l6 ZSArIGN1c3RvbS0+c2l6ZSA+DQo+ID4gKwkJICAgIChMVEMyOTgzX0NVU1RfU0VOU19UQkxfRU5E X1JFRyAtDQo+ID4gKwkJICAgICBMVEMyOTgzX0NVU1RfU0VOU19UQkxfU1RBUlRfUkVHKSArIDEp IHsNCj4gPiArCQkJZGV2X2VycihkZXYsDQo+ID4gKwkJCQkiTm90IHNwYWNlIGxlZnQoJWQpIGZv ciBuZXcgY3VzdG9tDQo+ID4gc2Vuc29yKCV6dSkiLA0KPiA+ICsJCQkJCQkJc3QtDQo+ID4gPmN1 c3RvbV90YWJsZV9zaXplLA0KPiA+ICsJCQkJCQkJY3VzdG9tLT5zaXplKTsNCj4gPiArCQkJcmV0 dXJuIC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQljdXN0b20tPm9mZnNldCA9IHN0 LT5jdXN0b21fdGFibGVfc2l6ZSAvDQo+ID4gKwkJCQkJTFRDMjk4M19DVVNUT01fU0VOU09SX0VO VFJZX1NaOw0KPiA+ICsJCXN0LT5jdXN0b21fdGFibGVfc2l6ZSArPSBjdXN0b20tPnNpemU7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmVnID0gKGN1c3RvbS0+b2Zmc2V0ICogbXVsdCkgKw0KPiA+ IExUQzI5ODNfQ1VTVF9TRU5TX1RCTF9TVEFSVF9SRUc7DQo+ID4gKw0KPiA+ICsJKmNoYW5fdmFs IHw9IExUQzI5ODNfQ1VTVE9NX0xFTihsZW4pOw0KPiA+ICsJKmNoYW5fdmFsIHw9IExUQzI5ODNf Q1VTVE9NX0FERFIoY3VzdG9tLT5vZmZzZXQpOw0KPiA+ICsJZGV2X2RiZyhkZXYsICJBc3NpZ24g Y3VzdG9tIHNlbnNvciwgcmVnOjB4JTA0WCwgb2ZmOiVkLA0KPiA+IHN6OiV6dSIsDQo+ID4gKwkJ CQkJCQlyZWcsIGN1c3RvbS0NCj4gPiA+b2Zmc2V0LA0KPiA+ICsJCQkJCQkJY3VzdG9tLT5zaXpl KTsNCj4gPiArCS8qIHdyaXRlIGN1c3RvbSBzZW5zb3IgdGFibGUgKi8NCj4gPiArCXJldHVybiBy ZWdtYXBfYnVsa193cml0ZShzdC0+cmVnbWFwLCByZWcsIGN1c3RvbS0+dGFibGUsDQo+ID4gY3Vz dG9tLT5zaXplKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBsdGMyOTgzX2N1 c3RvbV9zZW5zb3IgKl9fbHRjMjk4M19jdXN0b21fc2Vuc29yX25ldygNCj4gPiArCQkJCQkJc3Ry dWN0IGx0YzI5ODNfZGF0YQ0KPiA+ICpzdCwNCj4gPiArCQkJCQkJY29uc3Qgc3RydWN0DQo+ID4g ZGV2aWNlX25vZGUgKm5wLA0KPiA+ICsJCQkJCQljb25zdCBib29sDQo+ID4gaXNfc3RlaW5oYXJ0 LA0KPiA+ICsJCQkJCQljb25zdCB1MzIgcmVzb2x1dGlvbiwNCj4gPiArCQkJCQkJY29uc3QgYm9v bCBoYXNfc2lnbmVkKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbHRjMjk4M19jdXN0b21fc2Vuc29y ICpuZXdfY3VzdG9tOw0KPiA+ICsJdTggaW5kZXgsIG5fZW50cmllcywgdGJsID0gMDsNCj4gPiAr CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzdC0+c3BpLT5kZXY7DQo+ID4gKwkvKg0KPiA+ICsJICog Rm9yIGN1c3RvbSBzdGVpbmhhcnQsIHRoZSBmdWxsIHUzMiBpcyB0YWtlbi4gRm9yIGFsbCB0aGUN Cj4gPiBvdGhlcnMNCj4gPiArCSAqIHRoZSBNU0IgaXMgZGlzY2FyZGVkLg0KPiA+ICsJICovDQo+ ID4gKwljb25zdCB1OCBuX3NpemUgPSAoaXNfc3RlaW5oYXJ0ID09IHRydWUpID8gNCA6IDM7DQo+ ID4gKw0KPiA+ICsJbl9lbnRyaWVzID0gb2ZfcHJvcGVydHlfY291bnRfZWxlbXNfb2Zfc2l6ZShu cCwgImFkaSxjdXN0b20tDQo+ID4gc2Vuc29yIiwNCj4gPiArCQkJCQkJc2l6ZW9mKHU2NCkpOw0K PiA+ICsJLyogbl9lbnRyaWVzIG11c3QgYmUgYW4gZXZlbiBudW1iZXIgKi8NCj4gPiArCWlmICgh bl9lbnRyaWVzIHx8IChuX2VudHJpZXMgJSAyKSAhPSAwKSB7DQo+ID4gKwkJZGV2X2VycihkZXYs ICJOdW1iZXIgb2YgZW50cmllcyBlaXRoZXIgMCBvciBub3QNCj4gPiBldmVuXG4iKTsNCj4gPiAr CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwluZXdfY3Vz dG9tID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpuZXdfY3VzdG9tKSwNCj4gPiBHRlBfS0VS TkVMKTsNCj4gPiArCWlmICghbmV3X2N1c3RvbSkNCj4gPiArCQlyZXR1cm4gRVJSX1BUUigtRU5P TUVNKTsNCj4gPiArDQo+ID4gKwluZXdfY3VzdG9tLT5zaXplID0gbl9lbnRyaWVzICogbl9zaXpl Ow0KPiA+ICsJLyogY2hlY2sgU3RlaW5oYXJ0IHNpemUgKi8NCj4gPiArCWlmIChpc19zdGVpbmhh cnQgJiYgbmV3X2N1c3RvbS0+c2l6ZSAhPQ0KPiA+IExUQzI5ODNfQ1VTVE9NX1NURUlOSEFSVF9T SVpFKSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJTdGVpbmhhcnQgc2Vuc29ycyBzaXplKCV6dSkg bXVzdCBiZSAyNCIsDQo+ID4gKwkJCQkJCQluZXdfY3VzdG9tLQ0KPiA+ID5zaXplKTsNCj4gPiAr CQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsNCj4gPiArCX0NCj4gPiArCS8qIENoZWNrIHNwYWNl IG9uIHRoZSB0YWJsZS4gKi8NCj4gPiArCWlmIChzdC0+Y3VzdG9tX3RhYmxlX3NpemUgKyBuZXdf Y3VzdG9tLT5zaXplID4NCj4gPiArCSAgICAoTFRDMjk4M19DVVNUX1NFTlNfVEJMX0VORF9SRUcg LQ0KPiA+ICsJICAgICBMVEMyOTgzX0NVU1RfU0VOU19UQkxfU1RBUlRfUkVHKSArIDEpIHsNCj4g PiArCQlkZXZfZXJyKGRldiwgIk5vIHNwYWNlIGxlZnQoJWQpIGZvciBuZXcgY3VzdG9tDQo+ID4g c2Vuc29yKCV6dSkiLA0KPiA+ICsJCQkJc3QtPmN1c3RvbV90YWJsZV9zaXplLCBuZXdfY3VzdG9t LQ0KPiA+ID5zaXplKTsNCj4gPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsNCj4gPiArCX0N Cj4gPiArDQo+ID4gKwkvKiBhbGxvY2F0ZSB0aGUgdGFibGUgKi8NCj4gPiArCW5ld19jdXN0b20t PnRhYmxlID0gZGV2bV9remFsbG9jKGRldiwgbmV3X2N1c3RvbS0+c2l6ZSwNCj4gPiBHRlBfS0VS TkVMKTsNCj4gPiArCWlmICghbmV3X2N1c3RvbS0+dGFibGUpDQo+ID4gKwkJcmV0dXJuIEVSUl9Q VFIoLUVOT01FTSk7DQo+ID4gKw0KPiA+ICsJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbl9lbnRy aWVzOyBpbmRleCsrKSB7DQo+ID4gKwkJdTY0IHRlbXAgPSAwLCBqOw0KPiA+ICsNCj4gPiArCQlv Zl9wcm9wZXJ0eV9yZWFkX3U2NF9pbmRleChucCwgImFkaSxjdXN0b20tc2Vuc29yIiwNCj4gPiBp bmRleCwNCj4gPiArCQkJCQkgICAmdGVtcCk7DQo+ID4gKwkJLyoNCj4gPiArCQkgKiBTdGVpbmhh cnQgc2Vuc29ycyBhcmUgY29uZmlndXJlZCB3aXRoIHJhdyB2YWx1ZXMgaW4NCj4gPiB0aGUNCj4g PiArCQkgKiBkZXZpY2V0cmVlLiBGb3IgdGhlIG90aGVyIHNlbnNvcnMgd2UgbXVzdCBjb252ZXJ0 DQo+ID4gdGhlDQo+ID4gKwkJICogdmFsdWUgdG8gcmF3LiBUaGUgb2RkIGluZGV4J3MgY29ycmVz cG9uZCB0bw0KPiA+IHRlbXBlcmFydXJlcw0KPiA+ICsJCSAqIGFuZCBhbHdheXMgaGF2ZSAxLzEw MjQgb2YgcmVzb2x1dGlvbi4gVGVtcGVyYXR1cmVzDQo+ID4gYWxzbw0KPiA+ICsJCSAqIGNvbWUg aW4ga2VsdmluLCBzbyBzaWduZWQgdmFsdWVzIGlzIG5vdCBwb3NzaWJsZQ0KPiA+ICsJCSAqLw0K PiA+ICsJCWlmICghaXNfc3RlaW5oYXJ0KSB7DQo+ID4gKwkJCWlmICgoaW5kZXggJSAyKSAhPSAw KQ0KPiA+ICsJCQkJdGVtcCA9IF9fY29udmVydF90b19yYXcodGVtcCwgMTAyNCk7DQo+ID4gKwkJ CWVsc2UgaWYgKGhhc19zaWduZWQgJiYgKHM2NCl0ZW1wIDwgMCkNCj4gPiArCQkJCXRlbXAgPSBf X2NvbnZlcnRfdG9fcmF3X3NpZ24odGVtcCwNCj4gPiByZXNvbHV0aW9uKTsNCj4gPiArCQkJZWxz ZQ0KPiA+ICsJCQkJdGVtcCA9IF9fY29udmVydF90b19yYXcodGVtcCwNCj4gPiByZXNvbHV0aW9u KTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWZvciAoaiA9IDA7IGogPCBuX3NpemU7IGorKykN Cj4gPiArCQkJbmV3X2N1c3RvbS0+dGFibGVbdGJsKytdID0NCj4gPiArCQkJCXRlbXAgPj4gKDgg KiAobl9zaXplIC0gaiAtIDEpKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwluZXdfY3VzdG9tLT5p c19zdGVpbmhhcnQgPSBpc19zdGVpbmhhcnQ7DQo+ID4gKwkvKg0KPiA+ICsJICogVGhpcyBpcyBk b25lIHRvIGZpcnN0IGFkZCBhbGwgdGhlIHN0ZWluaGFydCBzZW5zb3JzIHRvIHRoZQ0KPiA+IHRh YmxlLA0KPiA+ICsJICogaW4gb3JkZXIgdG8gbWF4aW1pemUgdGhlIHRhYmxlIHVzYWdlLiBJZiB3 ZSBtaXggYWRkaW5nDQo+ID4gc3RlaW5oYXJ0DQo+ID4gKwkgKiB3aXRoIHRoZSBvdGhlciBzZW5z b3JzLCB3ZSBtaWdodCBoYXZlIHRvIGRvIHNvbWUgcm91bmR1cCB0bw0KPiA+IG1ha2UNCj4gPiAr CSAqIHN1cmUgdGhhdCBzZW5zb3JfYWRkciAtIDB4MjUwKHN0YXJ0IGFkZHJlc3MpIGlzIGEgbXVs dGlwbGUNCj4gPiBvZiA0DQo+ID4gKwkgKiAoZm9yIHN0ZWluaGFydCksIGFuZCBhIG11bHRpcGxl IG9mIDYgZm9yIGFsbCB0aGUgb3RoZXINCj4gPiBzZW5zb3JzLg0KPiA+ICsJICogU2luY2Ugd2Ug aGF2ZSBjb25zdCAyNCBieXRlcyBmb3Igc3RlaW5oYXJ0IHNlbnNvcnMgYW5kIDI0IGlzDQo+ID4g KwkgKiBhbHNvIGEgbXVsdGlwbGUgb2YgNiwgd2UgZ3VhcmFudGVlIHRoYXQgdGhlIGZpcnN0IG5v bi0NCj4gPiBzdGVpbmhhcnQNCj4gPiArCSAqIHNlbnNvciB3aWxsIHNpdCBpbiBhIGNvcnJlY3Qg YWRkcmVzcyB3aXRob3V0IHRoZSBuZWVkIG9mDQo+ID4gZmlsbGluZw0KPiA+ICsJICogYWRkcmVz c2VzLg0KPiA+ICsJICovDQo+ID4gKwlpZiAoaXNfc3RlaW5oYXJ0KSB7DQo+ID4gKwkJbmV3X2N1 c3RvbS0+b2Zmc2V0ID0gc3QtPmN1c3RvbV90YWJsZV9zaXplIC8NCj4gPiArCQkJCQlMVEMyOTgz X0NVU1RPTV9TVEVJTkhBUlRfRU5UUllfDQo+ID4gU1o7DQo+ID4gKwkJc3QtPmN1c3RvbV90YWJs ZV9zaXplICs9IG5ld19jdXN0b20tPnNpemU7DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCS8qIG1h cmsgYXMgdW5zZXQuIFRoaXMgaXMgY2hlY2tlZCBsYXRlciBvbiB0aGUgYXNzaWduDQo+ID4gcGhh c2UgKi8NCj4gPiArCQluZXdfY3VzdG9tLT5vZmZzZXQgPSAtMTsNCj4gPiArCX0NCj4gPiArDQo+ ID4gKwlyZXR1cm4gbmV3X2N1c3RvbTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBs dGMyOTgzX3RoZXJtb2NvdXBsZV9mYXVsdF9oYW5kbGVyKGNvbnN0IHN0cnVjdA0KPiA+IGx0YzI5 ODNfZGF0YSAqc3QsDQo+ID4gKwkJCQkJICAgICAgY29uc3QgdTMyIHJlc3VsdCkNCj4gPiArew0K PiA+ICsJcmV0dXJuIF9fbHRjMjk4M19mYXVsdF9oYW5kbGVyKHN0LCByZXN1bHQsDQo+ID4gKwkJ CQkgICAgICAgTFRDMjk4M19USEVSTU9DT1VQTEVfSEFSRF9GQVVMVF8NCj4gPiBNQVNLLA0KPiA+ ICsJCQkJICAgICAgIExUQzI5ODNfVEhFUk1PQ09VUExFX1NPRlRfRkFVTFRfDQo+ID4gTUFTSyk7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbHRjMjk4M19jb21tb25fZmF1bHRfaGFu ZGxlcihjb25zdCBzdHJ1Y3QgbHRjMjk4M19kYXRhDQo+ID4gKnN0LA0KPiA+ICsJCQkJCWNvbnN0 IHUzMiByZXN1bHQpDQo+ID4gK3sNCj4gPiArCXJldHVybiBfX2x0YzI5ODNfZmF1bHRfaGFuZGxl cihzdCwgcmVzdWx0LA0KPiA+ICsJCQkJICAgICAgIExUQzI5ODNfQ09NTU9OX0hBUkRfRkFVTFRf TUFTSywNCj4gPiArCQkJCSAgICAgICBMVEMyOTgzX0NPTU1PTl9TT0ZUX0ZBVUxUX01BU0spOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGx0YzI5ODNfdGhlcm1vY291cGxlX2Fzc2ln bl9jaGFuKHN0cnVjdCBsdGMyOTgzX2RhdGENCj4gPiAqc3QsDQo+ID4gKwkJCQljb25zdCBzdHJ1 Y3QgbHRjMjk4M19zZW5zb3IgKnNlbnNvcikNCj4gPiArew0KPiA+ICsJc3RydWN0IGx0YzI5ODNf dGhlcm1vY291cGxlICp0aGVybW8gPSB0b190aGVybW9jb3VwbGUoc2Vuc29yKTsNCj4gPiArCXUz MiBjaGFuX3ZhbDsNCj4gPiArDQo+ID4gKwljaGFuX3ZhbCA9IExUQzI5ODNfQ0hBTl9BU1NJR04o dGhlcm1vLT5jb2xkX2p1bmN0aW9uX2NoYW4pOw0KPiA+ICsJY2hhbl92YWwgfD0gTFRDMjk4M19U SEVSTU9DT1VQTEVfQ0ZHKHRoZXJtby0+c2Vuc29yX2NvbmZpZyk7DQo+ID4gKw0KPiA+ICsJaWYg KHRoZXJtby0+Y3VzdG9tKSB7DQo+ID4gKwkJaW50IHJldDsNCj4gPiArDQo+ID4gKwkJcmV0ID0g X19sdGMyOTgzX2NoYW5fY3VzdG9tX3NlbnNvcl9hc3NpZ24oc3QsIHRoZXJtby0NCj4gPiA+Y3Vz dG9tLA0KPiA+ICsJCQkJCQkJICAmY2hhbl92YWwpOw0KPiA+ICsJCWlmIChyZXQpDQo+ID4gKwkJ CXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKwlyZXR1cm4gX19sdGMyOTgzX2NoYW5fYXNzaWdu X2NvbW1vbihzdCwgc2Vuc29yLCBjaGFuX3ZhbCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBpbnQgbHRjMjk4M19ydGRfYXNzaWduX2NoYW4oc3RydWN0IGx0YzI5ODNfZGF0YSAqc3QsDQo+ ID4gKwkJCQkgICBjb25zdCBzdHJ1Y3QgbHRjMjk4M19zZW5zb3IgKnNlbnNvcikNCj4gPiArew0K PiA+ICsJc3RydWN0IGx0YzI5ODNfcnRkICpydGQgPSB0b19ydGQoc2Vuc29yKTsNCj4gPiArCXUz MiBjaGFuX3ZhbDsNCj4gPiArDQo+ID4gKwljaGFuX3ZhbCA9IExUQzI5ODNfQ0hBTl9BU1NJR04o cnRkLT5yX3NlbnNlX2NoYW4pOw0KPiA+ICsJY2hhbl92YWwgfD0gTFRDMjk4M19SVERfQ0ZHKHJ0 ZC0+c2Vuc29yX2NvbmZpZyk7DQo+ID4gKwljaGFuX3ZhbCB8PSBMVEMyOTgzX1JURF9FWENfQ1VS UkVOVChydGQtPmV4Y2l0YXRpb25fY3VycmVudCk7DQo+ID4gKwljaGFuX3ZhbCB8PSBMVEMyOTgz X1JURF9DVVJWRShydGQtPnJ0ZF9jdXJ2ZSk7DQo+ID4gKw0KPiA+ICsJaWYgKHJ0ZC0+Y3VzdG9t KSB7DQo+ID4gKwkJaW50IHJldDsNCj4gPiArDQo+ID4gKwkJcmV0ID0gX19sdGMyOTgzX2NoYW5f Y3VzdG9tX3NlbnNvcl9hc3NpZ24oc3QsIHJ0ZC0NCj4gPiA+Y3VzdG9tLA0KPiA+ICsJCQkJCQkJ ICAmY2hhbl92YWwpOw0KPiA+ICsJCWlmIChyZXQpDQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4g Kwl9DQo+ID4gKwlyZXR1cm4gX19sdGMyOTgzX2NoYW5fYXNzaWduX2NvbW1vbihzdCwgc2Vuc29y LCBjaGFuX3ZhbCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbHRjMjk4M190aGVy bWlzdG9yX2Fzc2lnbl9jaGFuKHN0cnVjdCBsdGMyOTgzX2RhdGEgKnN0LA0KPiA+ICsJCQkJCSAg Y29uc3Qgc3RydWN0IGx0YzI5ODNfc2Vuc29yDQo+ID4gKnNlbnNvcikNCj4gPiArew0KPiA+ICsJ c3RydWN0IGx0YzI5ODNfdGhlcm1pc3RvciAqdGhlcm1pc3RvciA9IHRvX3RoZXJtaXN0b3Ioc2Vu c29yKTsNCj4gPiArCXUzMiBjaGFuX3ZhbDsNCj4gPiArDQo+ID4gKwljaGFuX3ZhbCA9IExUQzI5 ODNfQ0hBTl9BU1NJR04odGhlcm1pc3Rvci0+cl9zZW5zZV9jaGFuKTsNCj4gPiArCWNoYW5fdmFs IHw9IExUQzI5ODNfVEhFUk1JU1RPUl9DRkcodGhlcm1pc3Rvci0+c2Vuc29yX2NvbmZpZyk7DQo+ ID4gKwljaGFuX3ZhbCB8PQ0KPiA+ICsJCUxUQzI5ODNfVEhFUk1JU1RPUl9FWENfQ1VSUkVOVCh0 aGVybWlzdG9yLQ0KPiA+ID5leGNpdGF0aW9uX2N1cnJlbnQpOw0KPiA+ICsNCj4gPiArCWlmICh0 aGVybWlzdG9yLT5jdXN0b20pIHsNCj4gPiArCQlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCQlyZXQg PSBfX2x0YzI5ODNfY2hhbl9jdXN0b21fc2Vuc29yX2Fzc2lnbihzdCwNCj4gPiArCQkJCQkJCSAg dGhlcm1pc3Rvci0NCj4gPiA+Y3VzdG9tLA0KPiA+ICsJCQkJCQkJICAmY2hhbl92YWwpOw0KPiA+ ICsJCWlmIChyZXQpDQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKwlyZXR1cm4g X19sdGMyOTgzX2NoYW5fYXNzaWduX2NvbW1vbihzdCwgc2Vuc29yLCBjaGFuX3ZhbCk7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbHRjMjk4M19kaW9kZV9hc3NpZ25fY2hhbihzdHJ1 Y3QgbHRjMjk4M19kYXRhICpzdCwNCj4gPiArCQkJCSAgICAgY29uc3Qgc3RydWN0IGx0YzI5ODNf c2Vuc29yDQo+ID4gKnNlbnNvcikNCj4gPiArew0KPiA+ICsJc3RydWN0IGx0YzI5ODNfZGlvZGUg KmRpb2RlID0gdG9fZGlvZGUoc2Vuc29yKTsNCj4gPiArCXUzMiBjaGFuX3ZhbDsNCj4gPiArDQo+ ID4gKwljaGFuX3ZhbCA9IExUQzI5ODNfRElPREVfQ0ZHKGRpb2RlLT5zZW5zb3JfY29uZmlnKTsN Cj4gPiArCWNoYW5fdmFsIHw9IExUQzI5ODNfRElPREVfRVhDX0NVUlJFTlQoZGlvZGUtDQo+ID4g PmV4Y2l0YXRpb25fY3VycmVudCk7DQo+ID4gKwljaGFuX3ZhbCB8PSBMVEMyOTgzX0RJT0RFX0lE RUFMX0ZBQ1RPUihkaW9kZS0NCj4gPiA+aWRlYWxfZmFjdG9yX3ZhbHVlKTsNCj4gPiArDQo+ID4g KwlyZXR1cm4gX19sdGMyOTgzX2NoYW5fYXNzaWduX2NvbW1vbihzdCwgc2Vuc29yLCBjaGFuX3Zh bCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbHRjMjk4M19yX3NlbnNlX2Fzc2ln bl9jaGFuKHN0cnVjdCBsdGMyOTgzX2RhdGEgKnN0LA0KPiA+ICsJCQkJICAgICAgIGNvbnN0IHN0 cnVjdCBsdGMyOTgzX3NlbnNvcg0KPiA+ICpzZW5zb3IpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBs dGMyOTgzX3JzZW5zZSAqcnNlbnNlID0gdG9fcnNlbnNlKHNlbnNvcik7DQo+ID4gKwl1MzIgY2hh bl92YWw7DQo+ID4gKw0KPiA+ICsJY2hhbl92YWwgPSBMVEMyOTgzX1JfU0VOU0VfVkFMKHJzZW5z ZS0+cl9zZW5zZV92YWwpOw0KPiA+ICsNCj4gPiArCXJldHVybiBfX2x0YzI5ODNfY2hhbl9hc3Np Z25fY29tbW9uKHN0LCBzZW5zb3IsIGNoYW5fdmFsKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludCBsdGMyOTgzX2FkY19hc3NpZ25fY2hhbihzdHJ1Y3QgbHRjMjk4M19kYXRhICpzdCwN Cj4gPiArCQkJCSAgIGNvbnN0IHN0cnVjdCBsdGMyOTgzX3NlbnNvciAqc2Vuc29yKQ0KPiA+ICt7 DQo+ID4gKwlzdHJ1Y3QgbHRjMjk4M19hZGMgKmFkYyA9IHRvX2FkYyhzZW5zb3IpOw0KPiA+ICsJ dTMyIGNoYW5fdmFsOw0KPiA+ICsNCj4gPiArCWNoYW5fdmFsID0gTFRDMjk4M19BRENfU0lOR0xF X0VOREVEKGFkYy0+c2luZ2xlX2VuZGVkKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gX19sdGMyOTgz X2NoYW5fYXNzaWduX2NvbW1vbihzdCwgc2Vuc29yLCBjaGFuX3ZhbCk7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBzdHJ1Y3QgbHRjMjk4M19zZW5zb3IgKmx0YzI5ODNfdGhlcm1vY291cGxl X25ldygNCj4gPiArCQkJCQljb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUNCj4gPiAqY2hpbGQsDQo+ ID4gKwkJCQkJc3RydWN0IGx0YzI5ODNfZGF0YSAqc3QsDQo+ID4gKwkJCQkJY29uc3Qgc3RydWN0 IGx0YzI5ODNfc2Vuc29yDQo+ID4gKnNlbnNvcikNCj4gPiArew0KPiA+ICsJc3RydWN0IGx0YzI5 ODNfdGhlcm1vY291cGxlICp0aGVybW87DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoYW5k bGU7DQo+ID4gKw0KPiA+ICsJdGhlcm1vID0gZGV2bV9remFsbG9jKCZzdC0+c3BpLT5kZXYsIHNp emVvZigqdGhlcm1vKSwNCj4gPiBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICghdGhlcm1vKQ0KPiA+ ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOw0KPiA+ICsNCj4gPiArCW9mX3Byb3BlcnR5X3Jl YWRfdTMyKGNoaWxkLCAiYWRpLHNlbnNvci1jb25maWciLA0KPiA+ICsJCQkJICZ0aGVybW8tPnNl bnNvcl9jb25maWcpOw0KPiA+ICsJLyogdmFsaWRhdGUgY2hhbm5lbCBpbmRleCAqLw0KPiA+ICsJ aWYgKCEodGhlcm1vLT5zZW5zb3JfY29uZmlnICYgTFRDMjk4M19USEVSTU9DT1VQTEVfRElGRl9N QVNLKQ0KPiA+ICYmDQo+ID4gKwkgICAgc2Vuc29yLT5jaGFuIDwgTFRDMjk4M19ESUZGRVJFTlRJ QUxfQ0hBTl9NSU4pIHsNCj4gPiArCQlkZXZfZXJyKCZzdC0+c3BpLT5kZXYsDQo+ID4gKwkJCSJJ bnZhbGlkIGNoYW5uOiVkIGZvciBkaWZmZXJlbnRpYWwNCj4gPiB0aGVybW9jb3VwbGUiLA0KPiA+ ICsJCQkJCQkJCXNlbnNvci0NCj4gPiA+Y2hhbik7DQo+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJ TlZBTCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcGhhbmRsZSA9IG9mX3BhcnNlX3BoYW5kbGUo Y2hpbGQsICJhZGksY29sZC1qdW5jdGlvbi1oYW5kbGUiLA0KPiA+IDApOw0KPiA+ICsJaWYgKHBo YW5kbGUpIHsNCj4gPiArCQlpbnQgcmV0Ow0KPiA+ICsNCj4gPiArCQlyZXQgPSBvZl9wcm9wZXJ0 eV9yZWFkX3UzMihwaGFuZGxlLCAicmVnIiwNCj4gPiArCQkJCQkgICAmdGhlcm1vLQ0KPiA+ID5j b2xkX2p1bmN0aW9uX2NoYW4pOw0KPiA+ICsJCWlmIChyZXQpIHsNCj4gPiArCQkJLyoNCj4gPiAr CQkJICogVGhpcyB3b3VsZCBiZSBjYXRjaGVkIGxhdGVyIGJ1dCB3ZSBjYW4ganVzdA0KPiA+IHJl dHVybg0KPiA+ICsJCQkgKiB0aGUgZXJyb3IgcmlnaHQgYXdheS4NCj4gPiArCQkJICovDQo+ID4g KwkJCWRldl9lcnIoJnN0LT5zcGktPmRldiwgIlByb3BlcnR5IHJlZyBtdXN0IGJlDQo+ID4gZ2l2 ZW5cbiIpOw0KPiA+ICsJCQlvZl9ub2RlX3B1dChwaGFuZGxlKTsNCj4gPiArCQkJcmV0dXJuIEVS Ul9QVFIoLUVJTlZBTCk7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIGNoZWNr IGN1c3RvbSBzZW5zb3IgKi8NCj4gPiArCWlmIChzZW5zb3ItPnR5cGUgPT0gTFRDMjk4M19TRU5T T1JfVEhFUk1PQ09VUExFX0NVU1RPTSkgew0KPiA+ICsJCXRoZXJtby0+Y3VzdG9tID0gX19sdGMy OTgzX2N1c3RvbV9zZW5zb3JfbmV3KHN0LCBjaGlsZCwNCj4gPiBmYWxzZSwNCj4gPiArCQkJCQkJ CSAgICAgMTYzODQsDQo+ID4gdHJ1ZSk7DQo+ID4gKwkJaWYgKElTX0VSUih0aGVybW8tPmN1c3Rv bSkpIHsNCj4gPiArCQkJb2Zfbm9kZV9wdXQocGhhbmRsZSk7DQo+ID4gKwkJCXJldHVybiBFUlJf Q0FTVCh0aGVybW8tPmN1c3RvbSk7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8q IHNldCBjb21tb24gcGFyYW1ldGVycyAqLw0KPiA+ICsJdGhlcm1vLT5zZW5zb3IubmFtZSA9ICJ0 aGVybW9jb3VwbGUiOw0KPiA+ICsJdGhlcm1vLT5zZW5zb3IuZmF1bHRfaGFuZGxlciA9DQo+ID4g bHRjMjk4M190aGVybW9jb3VwbGVfZmF1bHRfaGFuZGxlcjsNCj4gPiArCXRoZXJtby0+c2Vuc29y LmFzc2lnbl9jaGFuID0gbHRjMjk4M190aGVybW9jb3VwbGVfYXNzaWduX2NoYW47DQo+ID4gKw0K PiA+ICsJb2Zfbm9kZV9wdXQocGhhbmRsZSk7DQo+ID4gKwlyZXR1cm4gJnRoZXJtby0+c2Vuc29y Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IGx0YzI5ODNfc2Vuc29yICpsdGMy OTgzX3J0ZF9uZXcoY29uc3Qgc3RydWN0DQo+ID4gZGV2aWNlX25vZGUgKmNoaWxkLA0KPiA+ICsJ CQkJCSAgc3RydWN0IGx0YzI5ODNfZGF0YSAqc3QsDQo+ID4gKwkJCQkJICBjb25zdCBzdHJ1Y3Qg bHRjMjk4M19zZW5zb3INCj4gPiAqc2Vuc29yKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbHRjMjk4 M19ydGQgKnJ0ZDsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2 ID0gJnN0LT5zcGktPmRldjsNCj4gPiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGhhbmRsZTsNCj4g PiArDQo+ID4gKwlydGQgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnJ0ZCksIEdGUF9LRVJO RUwpOw0KPiA+ICsJaWYgKCFydGQpDQo+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7DQo+ ID4gKw0KPiA+ICsJcGhhbmRsZSA9IG9mX3BhcnNlX3BoYW5kbGUoY2hpbGQsICJhZGkscnNlbnNl LWhhbmRsZSIsIDApOw0KPiA+ICsJaWYgKCFwaGFuZGxlKSB7DQo+ID4gKwkJZGV2X2VycihkZXYs ICJQcm9wZXJ0eSBhZGkscnNlbnNlLWhhbmRsZSBtaXNzaW5nIG9yDQo+ID4gaW52YWxpZCIpOw0K PiA+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJl dCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBoYW5kbGUsICJyZWciLA0KPiA+ICsJCQkJJnJ0ZC0+ cl9zZW5zZV9jaGFuKTsNCj4gDQo+IERvZXNuJ3QgbG9vayBsaWtlIHRoYXQgbGluZXMgbmVlZHMg d3JhcHBpbmcuIENoZWNrIGZvciBzaW1pbGFyDQo+IGVsc2V3aGVyZS4NCg0KYWNrLg0KDQo+ID4g KwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2VycihkZXYsICJQcm9wZXJ0eSByZWcgbXVzdCBiZSBn aXZlblxuIik7DQo+ID4gKwkJZ290byBmYWlsOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCW9mX3By b3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAiYWRpLHNlbnNvci1jb25maWciLCAmcnRkLQ0KPiA+ID5z ZW5zb3JfY29uZmlnKTsNCj4gPiArCS8qDQo+ID4gKwkgKiBydGQgY2hhbm5lbCBpbmRleGVzIGFy ZSBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIHRvIHZhbGlkYXRlLg0KPiA+ICsJICogRm9yIDR3aXJl IFJURCB3aXRoIHJvdGF0aW9uLCB0aGUgY2hhbm5lbCBzZWxlY3Rpb24gY2Fubm90IGJlDQo+ID4g KwkgKiA+PTE5IHNpbmNlIHRoZSBjaGFubiArIDEgaXMgdXNlZCBpbiB0aGlzIGNvbmZpZ3VyYXRp b24uDQo+ID4gKwkgKiBGb3IgNHdpcmUgUlREcyB3aXRoIGtlbHZpbiByc2Vuc2UsIHRoZSByc2Vu c2UgY2hhbm5lbCBjYW5ub3QNCj4gPiBiZQ0KPiA+ICsJICogPD0xIHNpbmNlIGNoYW5lbCAtIDEg YW5kIGNoYW5uZWwgLSAyIGFyZSB1c2VkLg0KPiA+ICsJICovDQo+ID4gKwlpZiAocnRkLT5zZW5z b3JfY29uZmlnICYgTFRDMjk4M19SVERfNF9XSVJFX01BU0spIHsNCj4gPiArCQkvKiA0LXdpcmUg Ki8NCj4gPiArCQl1OCBtaW4gPSBMVEMyOTgzX0RJRkZFUkVOVElBTF9DSEFOX01JTiwNCj4gPiAr CQkJbWF4ID0gTFRDMjk4M19NQVhfQ0hBTk5FTFNfTlI7DQo+ID4gKw0KPiA+ICsJCWlmIChydGQt PnNlbnNvcl9jb25maWcgJiBMVEMyOTgzX1JURF9ST1RBVElPTl9NQVNLKQ0KPiA+ICsJCQltYXgg PSBMVEMyOTgzX01BWF9DSEFOTkVMU19OUiAtIDE7DQo+ID4gKw0KPiA+ICsJCWlmICgoKHJ0ZC0+ c2Vuc29yX2NvbmZpZyAmDQo+ID4gTFRDMjk4M19SVERfS0VMVklOX1JfU0VOU0VfTUFTSykNCj4g PiArCQkgICAgID09IExUQzI5ODNfUlREX0tFTFZJTl9SX1NFTlNFX01BU0spICYmDQo+ID4gKwkJ ICAgIChydGQtPnJfc2Vuc2VfY2hhbiA8PSAgbWluKSkgew0KPiA+ICsJCQkvKiBrZWx2aW4gcnNl bnNlKi8NCj4gPiArCQkJZGV2X2VycihkZXYsDQo+ID4gKwkJCQkiSW52YWxpZCByc2Vuc2UgY2hh bm46JWQgdG8gdXNlIGluDQo+ID4ga2VsdmluIHJzZW5zZSIsDQo+ID4gKwkJCQkJCQlydGQtDQo+ ID4gPnJfc2Vuc2VfY2hhbik7DQo+ID4gKw0KPiA+ICsJCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJ CQlnb3RvIGZhaWw7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlpZiAoc2Vuc29yLT5jaGFuIDwg bWluIHx8IHNlbnNvci0+Y2hhbiA+IG1heCkgew0KPiA+ICsJCQlkZXZfZXJyKGRldiwgIkludmFs aWQgY2hhbm46JWQgZm9yIHRoZSBydGQNCj4gPiBjb25maWciLA0KPiA+ICsJCQkJCQkJCXNlbnNv ci0NCj4gPiA+Y2hhbik7DQo+ID4gKw0KPiA+ICsJCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJCQln b3RvIGZhaWw7DQo+ID4gKwkJfQ0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQkvKiBzYW1lIGFzIGRp ZmZlcmVudGlhbCBjYXNlICovDQo+ID4gKwkJaWYgKHNlbnNvci0+Y2hhbiA8IExUQzI5ODNfRElG RkVSRU5USUFMX0NIQU5fTUlOKSB7DQo+ID4gKwkJCWRldl9lcnIoJnN0LT5zcGktPmRldiwNCj4g PiArCQkJCSJJbnZhbGlkIGNoYW5uOiVkIGZvciBSVEQiLCBzZW5zb3ItDQo+ID4gPmNoYW4pOw0K PiA+ICsNCj4gPiArCQkJcmV0ID0gLUVJTlZBTDsNCj4gPiArCQkJZ290byBmYWlsOw0KPiA+ICsJ CX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBjaGVjayBjdXN0b20gc2Vuc29yICovDQo+ID4g KwlpZiAoc2Vuc29yLT50eXBlID09IExUQzI5ODNfU0VOU09SX1JURF9DVVNUT00pIHsNCj4gPiAr CQlydGQtPmN1c3RvbSA9IF9fbHRjMjk4M19jdXN0b21fc2Vuc29yX25ldyhzdCwgY2hpbGQsDQo+ ID4gZmFsc2UsDQo+ID4gKwkJCQkJCQkgIDIwNDgsIGZhbHNlKTsNCj4gPiArCQlpZiAoSVNfRVJS KHJ0ZC0+Y3VzdG9tKSkgew0KPiA+ICsJCQlvZl9ub2RlX3B1dChwaGFuZGxlKTsNCj4gPiArCQkJ cmV0dXJuIEVSUl9DQVNUKHJ0ZC0+Y3VzdG9tKTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJLyogc2V0IGNvbW1vbiBwYXJhbWV0ZXJzICovDQo+ID4gKwlydGQtPnNlbnNvci5uYW1l ID0gInJ0ZCI7DQo+ID4gKwlydGQtPnNlbnNvci5mYXVsdF9oYW5kbGVyID0gbHRjMjk4M19jb21t b25fZmF1bHRfaGFuZGxlcjsNCj4gPiArCXJ0ZC0+c2Vuc29yLmFzc2lnbl9jaGFuID0gbHRjMjk4 M19ydGRfYXNzaWduX2NoYW47DQo+ID4gKw0KPiA+ICsJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91 MzIoY2hpbGQsICJhZGksZXhjaXRhdGlvbi1jdXJyZW50IiwNCj4gPiArCQkJCSAgICZydGQtPmV4 Y2l0YXRpb25fY3VycmVudCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCS8qIGRlZmF1bHQgdG8g MXVBICovDQo+ID4gKwkJcnRkLT5leGNpdGF0aW9uX2N1cnJlbnQgPSAxOw0KPiA+ICsNCj4gPiAr CW9mX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAiYWRpLHJ0ZC1jdXJ2ZSIsICZydGQtPnJ0ZF9j dXJ2ZSk7DQo+ID4gKw0KPiA+ICsJb2Zfbm9kZV9wdXQocGhhbmRsZSk7DQo+ID4gKwlyZXR1cm4g JnJ0ZC0+c2Vuc29yOw0KPiA+ICtmYWlsOg0KPiA+ICsJb2Zfbm9kZV9wdXQocGhhbmRsZSk7DQo+ ID4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3Ry dWN0IGx0YzI5ODNfc2Vuc29yICpsdGMyOTgzX3RoZXJtaXN0b3JfbmV3KA0KPiA+ICsJCQkJCWNv bnN0IHN0cnVjdCBkZXZpY2Vfbm9kZQ0KPiA+ICpjaGlsZCwNCj4gPiArCQkJCQlzdHJ1Y3QgbHRj Mjk4M19kYXRhICpzdCwNCj4gPiArCQkJCQljb25zdCBzdHJ1Y3QgbHRjMjk4M19zZW5zb3INCj4g PiAqc2Vuc29yKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbHRjMjk4M190aGVybWlzdG9yICp0aGVy bWlzdG9yOw0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnN0LT5zcGktPmRldjsNCj4gPiAr CXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGhhbmRsZTsNCj4gPiArCWludCByZXQgPSAwOw0KPiA+ICsN Cj4gPiArCXRoZXJtaXN0b3IgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnRoZXJtaXN0b3Ip LA0KPiA+IEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCF0aGVybWlzdG9yKQ0KPiA+ICsJCXJldHVy biBFUlJfUFRSKC1FTk9NRU0pOw0KPiA+ICsNCj4gPiArCXBoYW5kbGUgPSBvZl9wYXJzZV9waGFu ZGxlKGNoaWxkLCAiYWRpLHJzZW5zZS1oYW5kbGUiLCAwKTsNCj4gPiArCWlmICghcGhhbmRsZSkg ew0KPiA+ICsJCWRldl9lcnIoZGV2LCAiUHJvcGVydHkgYWRpLHJzZW5zZS1oYW5kbGUgbWlzc2lu ZyBvcg0KPiA+IGludmFsaWQiKTsNCj4gPiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihwaGFuZGxlLCAi cmVnIiwNCj4gPiArCQkJCSAgICZ0aGVybWlzdG9yLT5yX3NlbnNlX2NoYW4pOw0KPiA+ICsJaWYg KHJldCkgew0KPiA+ICsJCWRldl9lcnIoZGV2LCAicnNlbnNlIGNoYW5uZWwgbXVzdCBiZSBjb25m aWd1cmVkLi4uXG4iKTsNCj4gPiArCQlnb3RvIGZhaWw7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJ b2ZfcHJvcGVydHlfcmVhZF91MzIoY2hpbGQsICJhZGksc2Vuc29yLWNvbmZpZyIsDQo+ID4gKwkJ CSAgICAgJnRoZXJtaXN0b3ItPnNlbnNvcl9jb25maWcpOw0KPiA+ICsJLyogdmFsaWRhdGUgY2hh bm5lbCBpbmRleCAqLw0KPiA+ICsJaWYgKCEodGhlcm1pc3Rvci0+c2Vuc29yX2NvbmZpZyAmIExU QzI5ODNfVEhFUk1JU1RPUl9ESUZGX01BU0spDQo+ID4gJiYNCj4gPiArCSAgICBzZW5zb3ItPmNo YW4gPCBMVEMyOTgzX0RJRkZFUkVOVElBTF9DSEFOX01JTikgew0KPiA+ICsJCWRldl9lcnIoJnN0 LT5zcGktPmRldiwNCj4gPiArCQkJIkludmFsaWQgY2hhbm46JWQgZm9yIGRpZmZlcmVudGlhbCB0 aGVybWlzdG9yIiwNCj4gPiArCQkJCQkJCQlzZW5zb3ItDQo+ID4gPmNoYW4pOw0KPiA+ICsJCXJl dCA9IC1FSU5WQUw7DQo+ID4gKwkJZ290byBmYWlsOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8q IGNoZWNrIGN1c3RvbSBzZW5zb3IgKi8NCj4gPiArCWlmIChzZW5zb3ItPnR5cGUgPj0gTFRDMjk4 M19TRU5TT1JfVEhFUk1JU1RPUl9TVEVJTkhBUlQpIHsNCj4gPiArCQl0aGVybWlzdG9yLT5jdXN0 b20gPSBfX2x0YzI5ODNfY3VzdG9tX3NlbnNvcl9uZXcoc3QsDQo+ID4gY2hpbGQsDQo+ID4gKwkJ CXNlbnNvci0+dHlwZSA9PQ0KPiA+IExUQzI5ODNfU0VOU09SX1RIRVJNSVNUT1JfU1RFSU5IQVJU ID8NCj4gPiArCQkJCQkJCSAgdHJ1ZSA6IGZhbHNlLA0KPiA+IDY0LA0KPiA+ICsJCQkJCQkJICBm YWxzZSk7DQo+ID4gKwkJaWYgKElTX0VSUih0aGVybWlzdG9yLT5jdXN0b20pKSB7DQo+ID4gKwkJ CW9mX25vZGVfcHV0KHBoYW5kbGUpOw0KPiA+ICsJCQlyZXR1cm4gRVJSX0NBU1QodGhlcm1pc3Rv ci0+Y3VzdG9tKTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKwkvKiBzZXQgY29tbW9uIHBhcmFt ZXRlcnMgKi8NCj4gPiArCXRoZXJtaXN0b3ItPnNlbnNvci5uYW1lID0gInRoZXJtaXN0b3IiOw0K PiA+ICsJdGhlcm1pc3Rvci0+c2Vuc29yLmZhdWx0X2hhbmRsZXIgPQ0KPiA+IGx0YzI5ODNfY29t bW9uX2ZhdWx0X2hhbmRsZXI7DQo+ID4gKwl0aGVybWlzdG9yLT5zZW5zb3IuYXNzaWduX2NoYW4g PQ0KPiA+IGx0YzI5ODNfdGhlcm1pc3Rvcl9hc3NpZ25fY2hhbjsNCj4gPiArDQo+ID4gKwlyZXQg PSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihjaGlsZCwgImFkaSxleGNpdGF0aW9uLWN1cnJlbnQiLA0K PiA+ICsJCQkJICAgJnRoZXJtaXN0b3ItPmV4Y2l0YXRpb25fY3VycmVudCk7DQo+ID4gKwlpZiAo cmV0KQ0KPiA+ICsJCS8qIGRlZmF1bHQgdG8gYXV0by1yYW5nZSAqLw0KPiA+ICsJCXRoZXJtaXN0 b3ItPmV4Y2l0YXRpb25fY3VycmVudCA9IDB4MGM7DQo+ID4gKw0KPiA+ICsJb2Zfbm9kZV9wdXQo cGhhbmRsZSk7DQo+ID4gKwlyZXR1cm4gJnRoZXJtaXN0b3ItPnNlbnNvcjsNCj4gPiArZmFpbDoN Cj4gPiArCW9mX25vZGVfcHV0KHBoYW5kbGUpOw0KPiA+ICsJcmV0dXJuIEVSUl9QVFIocmV0KTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBsdGMyOTgzX3NlbnNvciAqbHRjMjk4 M19kaW9kZV9uZXcoDQo+ID4gKwkJCQkJY29uc3Qgc3RydWN0IGRldmljZV9ub2RlDQo+ID4gKmNo aWxkLA0KPiA+ICsJCQkJCWNvbnN0IHN0cnVjdCBsdGMyOTgzX2RhdGEgKnN0LA0KPiA+ICsJCQkJ CWNvbnN0IHN0cnVjdCBsdGMyOTgzX3NlbnNvcg0KPiA+ICpzZW5zb3IpDQo+ID4gK3sNCj4gPiAr CXN0cnVjdCBsdGMyOTgzX2Rpb2RlICpkaW9kZTsNCj4gPiArCXUzMiB0ZW1wID0gMDsNCj4gPiAr DQo+ID4gKwlkaW9kZSA9IGRldm1fa3phbGxvYygmc3QtPnNwaS0+ZGV2LCBzaXplb2YoKmRpb2Rl KSwNCj4gPiBHRlBfS0VSTkVMKTsNCj4gPiArCWlmICghZGlvZGUpDQo+ID4gKwkJcmV0dXJuIEVS Ul9QVFIoLUVOT01FTSk7DQo+ID4gKw0KPiA+ICsJb2ZfcHJvcGVydHlfcmVhZF91MzIoY2hpbGQs ICJhZGksc2Vuc29yLWNvbmZpZyIsICZkaW9kZS0NCj4gPiA+c2Vuc29yX2NvbmZpZyk7DQo+ID4g KwkvKiB2YWxpZGF0ZSBjaGFubmVsIGluZGV4ICovDQo+ID4gKwlpZiAoIShkaW9kZS0+c2Vuc29y X2NvbmZpZyAmIExUQzI5ODNfRElPREVfRElGRl9NQVNLKSAmJg0KPiA+ICsJICAgIHNlbnNvci0+ Y2hhbiA8IExUQzI5ODNfRElGRkVSRU5USUFMX0NIQU5fTUlOKSB7DQo+ID4gKwkJZGV2X2Vycigm c3QtPnNwaS0+ZGV2LA0KPiA+ICsJCQkiSW52YWxpZCBjaGFubjolZCBmb3IgZGlmZmVyZW50aWFs IHRoZXJtaXN0b3IiLA0KPiA+ICsJCQkJCQkJCXNlbnNvci0NCj4gPiA+Y2hhbik7DQo+ID4gKwkJ cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7DQo+ID4gKwl9DQo+ID4gKwkvKiBzZXQgY29tbW9uIHBh cmFtZXRlcnMgKi8NCj4gPiArCWRpb2RlLT5zZW5zb3IubmFtZSA9ICJkaW9kZSI7DQo+ID4gKwlk aW9kZS0+c2Vuc29yLmZhdWx0X2hhbmRsZXIgPSBsdGMyOTgzX2NvbW1vbl9mYXVsdF9oYW5kbGVy Ow0KPiA+ICsJZGlvZGUtPnNlbnNvci5hc3NpZ25fY2hhbiA9IGx0YzI5ODNfZGlvZGVfYXNzaWdu X2NoYW47DQo+ID4gKw0KPiA+ICsJb2ZfcHJvcGVydHlfcmVhZF91MzIoY2hpbGQsICJhZGksZXhj aXRhdGlvbi1jdXJyZW50IiwNCj4gPiArCQkJICAgICAmZGlvZGUtPmV4Y2l0YXRpb25fY3VycmVu dCk7DQo+ID4gKw0KPiA+ICsJb2ZfcHJvcGVydHlfcmVhZF91MzIoY2hpbGQsICJhZGksaWRlYWwt ZmFjdG9yLXZhbHVlIiwgJnRlbXApOw0KPiA+ICsNCj4gPiArCS8qIDJeMjAgcmVzb2x1dGlvbiAq Lw0KPiA+ICsJZGlvZGUtPmlkZWFsX2ZhY3Rvcl92YWx1ZSA9IF9fY29udmVydF90b19yYXcodGVt cCwgMTA0ODU3Nik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuICZkaW9kZS0+c2Vuc29yOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IGx0YzI5ODNfc2Vuc29yICpsdGMyOTgzX3Jfc2Vu c2VfbmV3KHN0cnVjdA0KPiA+IGRldmljZV9ub2RlICpjaGlsZCwNCj4gPiArCQkJCQlzdHJ1Y3Qg bHRjMjk4M19kYXRhICpzdCwNCj4gPiArCQkJCQljb25zdCBzdHJ1Y3QgbHRjMjk4M19zZW5zb3IN Cj4gPiAqc2Vuc29yKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbHRjMjk4M19yc2Vuc2UgKnJzZW5z ZTsNCj4gPiArCWludCByZXQ7DQo+ID4gKwl1NjQgdGVtcDsNCj4gPiArDQo+ID4gKwlyc2Vuc2Ug PSBkZXZtX2t6YWxsb2MoJnN0LT5zcGktPmRldiwgc2l6ZW9mKCpyc2Vuc2UpLA0KPiA+IEdGUF9L RVJORUwpOw0KPiA+ICsJaWYgKCFyc2Vuc2UpDQo+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7DQo+ID4gKw0KPiA+ICsJLyogdmFsaWRhdGUgY2hhbm5lbCBpbmRleCAqLw0KPiA+ICsJaWYg KHNlbnNvci0+Y2hhbiA8IExUQzI5ODNfRElGRkVSRU5USUFMX0NIQU5fTUlOKSB7DQo+ID4gKwkJ ZGV2X2Vycigmc3QtPnNwaS0+ZGV2LCAiSW52YWxpZCBjaGFubjolZCBmb3Igcl9zZW5zZSIsDQo+ ID4gKwkJCQkJCQlzZW5zb3ItPmNoYW4pOw0KPiA+ICsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwp Ow0KPiA+ICsJfQ0KPiA+ICsJLyogZ2V0IHJhdyB2YWx1ZSAqLw0KPiA+ICsJcmV0ID0gb2ZfcHJv cGVydHlfcmVhZF91NjQoY2hpbGQsICJhZGkscnNlbnNlLXZhbC1taWNyby1vaG1zIiwNCj4gPiAm dGVtcCk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4gKwkJZGV2X2Vycigmc3QtPnNwaS0+ZGV2LCAi UHJvcGVydHkgYWRpLHJzZW5zZS12YWwtbWljcm8tDQo+ID4gb2htcyBtaXNzaW5nXG4iKTsNCj4g PiArCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiAy XjEwIHJlc29sdXRpb24gKi8NCj4gPiArCXJzZW5zZS0+cl9zZW5zZV92YWwgPSBfX2NvbnZlcnRf dG9fcmF3KHRlbXAsIDEwMjQpOw0KPiA+ICsNCj4gPiArCS8qIHNldCBjb21tb24gcGFyYW1ldGVy cyAqLw0KPiA+ICsJcnNlbnNlLT5zZW5zb3IubmFtZSA9ICJyX3NlbnNlIjsNCj4gPiArCXJzZW5z ZS0+c2Vuc29yLmFzc2lnbl9jaGFuID0gbHRjMjk4M19yX3NlbnNlX2Fzc2lnbl9jaGFuOw0KPiA+ ICsNCj4gPiArCXJldHVybiAmcnNlbnNlLT5zZW5zb3I7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBzdHJ1Y3QgbHRjMjk4M19zZW5zb3IgKmx0YzI5ODNfYWRjX25ldyhzdHJ1Y3QgZGV2aWNl X25vZGUNCj4gPiAqY2hpbGQsDQo+ID4gKwkJCQkJIHN0cnVjdCBsdGMyOTgzX2RhdGEgKnN0LA0K PiA+ICsJCQkJCSBjb25zdCBzdHJ1Y3QgbHRjMjk4M19zZW5zb3INCj4gPiAqc2Vuc29yKQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgbHRjMjk4M19hZGMgKmFkYzsNCj4gPiArDQo+ID4gKwlhZGMgPSBk ZXZtX2t6YWxsb2MoJnN0LT5zcGktPmRldiwgc2l6ZW9mKCphZGMpLCBHRlBfS0VSTkVMKTsNCj4g PiArCWlmICghYWRjKQ0KPiA+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOw0KPiA+ICsNCj4g PiArCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woY2hpbGQsICJhZGksc2luZ2xlLWVuZGVkIikp DQo+ID4gKwkJYWRjLT5zaW5nbGVfZW5kZWQgPSB0cnVlOw0KPiA+ICsNCj4gPiArCWlmICghYWRj LT5zaW5nbGVfZW5kZWQgJiYNCj4gPiArCSAgICBzZW5zb3ItPmNoYW4gPCBMVEMyOTgzX0RJRkZF UkVOVElBTF9DSEFOX01JTikgew0KPiA+ICsJCWRldl9lcnIoJnN0LT5zcGktPmRldiwgIkludmFs aWQgY2hhbjolZCBmb3INCj4gPiBkaWZmZXJlbnRpYWwgYWRjXG4iLA0KPiA+ICsJCQkJCQkJCXNl bnNvci0NCj4gPiA+Y2hhbik7DQo+ID4gKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7DQo+ID4g Kwl9DQo+ID4gKwkvKiBzZXQgY29tbW9uIHBhcmFtZXRlcnMgKi8NCj4gPiArCWFkYy0+c2Vuc29y Lm5hbWUgPSAiZGlyZWN0X2FkYyI7DQo+ID4gKwlhZGMtPnNlbnNvci5hc3NpZ25fY2hhbiA9IGx0 YzI5ODNfYWRjX2Fzc2lnbl9jaGFuOw0KPiA+ICsJYWRjLT5zZW5zb3IuZmF1bHRfaGFuZGxlciA9 IGx0YzI5ODNfY29tbW9uX2ZhdWx0X2hhbmRsZXI7DQo+ID4gKw0KPiA+ICsJcmV0dXJuICZhZGMt PnNlbnNvcjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBsdGMyOTgzX2NoYW5fcmVh ZChzdHJ1Y3QgbHRjMjk4M19kYXRhICpzdCwNCj4gPiArCQkJY29uc3Qgc3RydWN0IGx0YzI5ODNf c2Vuc29yICpzZW5zb3IsIGludCAqdmFsKQ0KPiA+ICt7DQo+ID4gKwl1MzIgc3RhcnRfY29udmVy c2lvbiA9IDA7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsJdW5zaWduZWQgbG9uZyB0aW1lOw0KPiA+ ICsJX19iZTMyIHRlbXA7DQo+ID4gKw0KPiA+ICsJLyoNCj4gPiArCSAqIERvIG5vdCBhbGxvdyBj aGFubmVsIHJlYWRpbmdzIGlmIGRldmljZSBpcyBpbiBzbGVlcCBzdGF0ZS4NCj4gPiArCSAqIEEg cmVhZC93cml0ZSBvbiB0aGUgc3BpIGJ1cyB3b3VsZCBicmluZyB0aGUgZGV2aWNlDQo+ID4gcHJl bWF0dXJlbHkNCj4gPiArCSAqIG91dCBvZiBzbGVlcC4NCj4gPiArCSAqLw0KPiA+ICsJaWYgKHN0 LT5yZXNldCkNCj4gPiArCQlyZXR1cm4gLUVQRVJNOw0KPiA+ICsNCj4gPiArCXN0YXJ0X2NvbnZl cnNpb24gPSBMVEMyOTgzX1NUQVRVU19TVEFSVCh0cnVlKTsNCj4gPiArCXN0YXJ0X2NvbnZlcnNp b24gfD0gTFRDMjk4M19TVEFUVVNfQ0hBTl9TRUwoc2Vuc29yLT5jaGFuKTsNCj4gPiArCWRldl9k YmcoJnN0LT5zcGktPmRldiwgIlN0YXJ0IGNvbnZlcnNpb24gb24gY2hhbjolZCwNCj4gPiBzdGF0 dXM6JTAyWFxuIiwNCj4gPiArCQlzZW5zb3ItPmNoYW4sIHN0YXJ0X2NvbnZlcnNpb24pOw0KPiA+ ICsJLyogc3RhcnQgY29udmVyc2lvbiAqLw0KPiA+ICsJcmV0ID0gcmVnbWFwX3dyaXRlKHN0LT5y ZWdtYXAsIExUQzI5ODNfU1RBVFVTX1JFRywNCj4gPiBzdGFydF9jb252ZXJzaW9uKTsNCj4gPiAr CWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwlyZWluaXRfY29tcGxl dGlvbigmc3QtPmNvbXBsZXRpb24pOw0KPiA+ICsJLyoNCj4gPiArCSAqIHdhaXQgZm9yIGNvbnZl cnNpb24gdG8gY29tcGxldGUuDQo+ID4gKwkgKiAzMDAgbXMgc2hvdWxkIGJlIG1vcmUgdGhhbiBl bm91Z2ggdG8gY29tcGxldGUgdGhlDQo+ID4gY29udmVyc2lvbi4NCj4gPiArCSAqIERlcGVuZGlu ZyBvbiB0aGUgc2Vuc29yIGNvbmZpZ3VyYXRpb24sIHRoZXJlIGFyZSAyLzMNCj4gPiBjb252ZXJz aW9ucw0KPiA+ICsJICogY3ljbGVzIG9mIDgybXMuDQo+ID4gKwkgKi8NCj4gPiArCXRpbWUgPSB3 YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnN0LT5jb21wbGV0aW9uLA0KPiA+ICsJCQkJCSAg IG1zZWNzX3RvX2ppZmZpZXMoMzAwKSk7DQo+ID4gKwlpZiAoIXRpbWUpIHsNCj4gPiArCQlkZXZf d2Fybigmc3QtPnNwaS0+ZGV2LCAiQ29udmVyc2lvbiB0aW1lZCBvdXRcbiIpOw0KPiA+ICsJCXJl dHVybiAtRVRJTUVET1VUOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIHJlYWQgdGhlIGNvbnZl cnRlZCBkYXRhICovDQo+ID4gKwlyZXQgPSByZWdtYXBfYnVsa19yZWFkKHN0LT5yZWdtYXAsDQo+ ID4gTFRDMjk4M19DSEFOX1JFU19BRERSKHNlbnNvci0+Y2hhbiksDQo+ID4gKwkJCSAgICAgICAm dGVtcCwgc2l6ZW9mKHRlbXApKTsNCj4gPiArCWlmIChyZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsN Cj4gPiArDQo+ID4gKwkqdmFsID0gX19iZTMyX3RvX2NwdSh0ZW1wKTsNCj4gPiArCWRldl9kYmco JnN0LT5zcGktPmRldiwgIkNvbnZlcnRlZCBkYXRhOiAweCUwOFgNCj4gPiAoYWRkcjoweCUwNFgp XG4iLCAqdmFsLA0KPiA+ICsJCQkJCUxUQzI5ODNfQ0hBTl9SRVNfQUREUihzZW5zb3ItDQo+ID4g PmNoYW4pKTsNCj4gDQo+IFByb2JhYmx5IGRyb3AgYWxsIHRoZSBkZXZfZGJnIHN0dWZmIHVubGVz cyBpdCBpcyBwcm92aWRpbmcNCj4gaW5mb3JtYXRpb24gdGhhdA0KPiBpc24ndCBvdGhlcndpc2Ug YXZhaWxhYmxlIChmcm9tIHJlYWRpbmcgY2hhbm5lbCBldGMsIGtwcm9iZSAvDQo+IGZ0cmFjZSku DQoNCmFjay4NCg0KPiA+ICsNCj4gPiArCWlmICghKExUQzI5ODNfUkVTX1ZBTElEX01BU0sgJiAq dmFsKSkgew0KPiA+ICsJCWRldl9lcnIoJnN0LT5zcGktPmRldiwgIkludmFsaWQgY29udmVyc2lv bg0KPiA+IGRldGVjdGVkXG4iKTsNCj4gPiArCQlyZXR1cm4gLUVJTzsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlyZXQgPSBzZW5zb3ItPmZhdWx0X2hhbmRsZXIoc3QsICp2YWwpOw0KPiA+ICsJaWYg KHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCSp2YWwgPSBzaWduX2V4dGVu ZDMyKCgqdmFsKSAmIExUQzI5ODNfREFUQV9NQVNLLA0KPiA+IExUQzI5ODNfREFUQV9TSUdOX0JJ VCk7DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBsdGMy OTgzX3JlYWRfcmF3KHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsDQo+ID4gKwkJCSAgICBzdHJ1 Y3QgaWlvX2NoYW5fc3BlYyBjb25zdCAqY2hhbiwNCj4gPiArCQkJICAgIGludCAqdmFsLCBpbnQg KnZhbDIsIGxvbmcgbWFzaykNCj4gPiArew0KPiA+ICsJc3RydWN0IGx0YzI5ODNfZGF0YSAqc3Qg PSBpaW9fcHJpdihpbmRpb19kZXYpOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwkvKiBz YW5pdHkgY2hlY2sgKi8NCj4gPiArCWlmIChjaGFuLT5hZGRyZXNzID49IHN0LT5udW1fY2hhbm5l bHMpIHsNCj4gPiArCQlkZXZfZXJyKCZzdC0+c3BpLT5kZXYsICJJbnZhbGlkIGNoYW4gYWRkcmVz czolbGQiLA0KPiA+ICsJCQkJCQkJY2hhbi0+YWRkcmVzcyk7DQo+ID4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+ID4gKwl9DQo+ID4gKwlzd2l0Y2ggKG1hc2spIHsNCj4gPiArCWNhc2UgSUlPX0NIQU5f SU5GT19SQVc6DQo+ID4gKwkJbXV0ZXhfbG9jaygmc3QtPmxvY2spOw0KPiA+ICsJCXJldCA9IGx0 YzI5ODNfY2hhbl9yZWFkKHN0LCBzdC0+c2Vuc29yc1tjaGFuLT5hZGRyZXNzXSwgDQo+ID4gdmFs KTsNCj4gPiArCQltdXRleF91bmxvY2soJnN0LT5sb2NrKTsNCj4gPiArCQlyZXR1cm4gcmV0ID86 IElJT19WQUxfSU5UOw0KPiA+ICsJY2FzZSBJSU9fQ0hBTl9JTkZPX1NDQUxFOg0KPiA+ICsJCXN3 aXRjaCAoY2hhbi0+dHlwZSkgew0KPiA+ICsJCWNhc2UgSUlPX1RFTVA6DQo+ID4gKwkJCSp2YWwg PSAxOw0KPiA+ICsJCQkvKiAyXjEwICovDQo+ID4gKwkJCSp2YWwyID0gMTAyNDsNCj4gPiArCQkJ cmV0dXJuIElJT19WQUxfRlJBQ1RJT05BTDsNCj4gPiArCQljYXNlIElJT19WT0xUQUdFOg0KPiA+ ICsJCQkqdmFsID0gMTsNCj4gPiArCQkJLyogMl4yMSAqLw0KPiA+ICsJCQkqdmFsMiA9IDIwOTcx NTI7DQo+ID4gKwkJCXJldHVybiBJSU9fVkFMX0ZSQUNUSU9OQUw7DQo+ID4gKwkJZGVmYXVsdDoN Cj4gPiArCQkJcmV0dXJuIC1FSU5WQUw7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiAr CXJldHVybiAtRUlOVkFMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGx0YzI5ODNf cmVnX2FjY2VzcyhzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LA0KPiA+ICsJCQkgICAgICB1bnNp Z25lZCBpbnQgcmVnLA0KPiA+ICsJCQkgICAgICB1bnNpZ25lZCBpbnQgd3JpdGV2YWwsDQo+ID4g KwkJCSAgICAgIHVuc2lnbmVkIGludCAqcmVhZHZhbCkNCj4gPiArew0KPiA+ICsJc3RydWN0IGx0 YzI5ODNfZGF0YSAqc3QgPSBpaW9fcHJpdihpbmRpb19kZXYpOw0KPiA+ICsNCj4gPiArCS8qIGNo ZWNrIGNvbW1lbnQgaW4gbHRjMjk4M19jaGFuX3JlYWQoKSAqLw0KPiA+ICsJaWYgKHN0LT5yZXNl dCkNCj4gPiArCQlyZXR1cm4gLUVQRVJNOw0KPiA+ICsNCj4gPiArCWlmIChyZWFkdmFsKQ0KPiA+ ICsJCXJldHVybiByZWdtYXBfcmVhZChzdC0+cmVnbWFwLCByZWcsIHJlYWR2YWwpOw0KPiA+ICsJ ZWxzZQ0KPiA+ICsJCXJldHVybiByZWdtYXBfd3JpdGUoc3QtPnJlZ21hcCwgcmVnLCB3cml0ZXZh bCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpcnFyZXR1cm5fdCBsdGMyOTgzX2lycV9o YW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBsdGMyOTgz X2RhdGEgKnN0ID0gZGF0YTsNCj4gPiArDQo+ID4gKwljb21wbGV0ZSgmc3QtPmNvbXBsZXRpb24p Ow0KPiA+ICsJcmV0dXJuIElSUV9IQU5ETEVEOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjZGVmaW5l IExUQzI5ODNfQ0hBTihfX3R5cGUsIGluZGV4LCBfX2FkZHJlc3MsIGV4dF9uYW1lKSAoeyBcDQo+ ID4gKwlzdHJ1Y3QgaWlvX2NoYW5fc3BlYyBfX2NoYW4gPSB7IFwNCj4gPiArCQkudHlwZSA9IF9f dHlwZSwgXA0KPiA+ICsJCS5pbmRleGVkID0gMSwgXA0KPiA+ICsJCS5jaGFubmVsID0gaW5kZXgs IFwNCj4gPiArCQkuaW5mb19tYXNrX3NlcGFyYXRlID0gQklUKElJT19DSEFOX0lORk9fUkFXKSwg XA0KPiA+ICsJCS5pbmZvX21hc2tfc2hhcmVkX2J5X3R5cGUgPSBCSVQoSUlPX0NIQU5fSU5GT19T Q0FMRSksIFwNCj4gPiArCQkuYWRkcmVzcyA9IF9fYWRkcmVzcywgXA0KPiA+ICsJCS5leHRlbmRf bmFtZSA9IGV4dF9uYW1lLCBcDQo+ID4gKwl9OyBcDQo+ID4gKwlfX2NoYW47IFwNCj4gPiArfSkN Cj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbHRjMjk4M19wYXJzZV9kdChzdHJ1Y3QgbHRjMjk4M19k YXRhICpzdCkNCj4gPiArew0KPiA+ICsJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsNCj4gPiAr CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzdC0+c3BpLT5kZXY7DQo+ID4gKwlpbnQgcmV0ID0gMCwg Y2hhbiA9IDAsIGNoYW5uZWxfYXZhaWxfbWFzayA9IDA7DQo+ID4gKw0KPiA+ICsJaWYgKCFvZl9w cm9wZXJ0eV9yZWFkX2Jvb2woZGV2LT5vZl9ub2RlLCAiYWRpLHRlbXBlcmF0dXJlLQ0KPiA+IGNl bGNpdXMiKSkNCj4gPiArCQlzdC0+dGVtcF9mYXJlbmhlaXQgPSB0cnVlOw0KPiA+ICsNCj4gPiAr CW9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgImFkaSxtdXgtZGVsYXktY29uZmln IiwNCj4gPiArCQkJICAgICAmc3QtPm11eF9kZWxheV9jb25maWcpOw0KPiA+ICsNCj4gPiArCW9m X3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgImFkaSxmaWx0ZXItbm90Y2gtZnJlcSIs DQo+ID4gKwkJCSAgICAgJnN0LT5maWx0ZXJfbm90Y2hfZnJlcSk7DQo+ID4gKw0KPiA+ICsJc3Qt Pm51bV9jaGFubmVscyA9IG9mX2dldF9hdmFpbGFibGVfY2hpbGRfY291bnQoZGV2LT5vZl9ub2Rl KTsNCj4gPiArCXN0LT5zZW5zb3JzID0gZGV2bV9rY2FsbG9jKGRldiwgc3QtPm51bV9jaGFubmVs cywgc2l6ZW9mKCpzdC0NCj4gPiA+c2Vuc29ycyksDQo+ID4gKwkJCQkgICBHRlBfS0VSTkVMKTsN Cj4gPiArCWlmICghc3QtPnNlbnNvcnMpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0K PiA+ICsJc3QtPmlpb19jaGFubmVscyA9IHN0LT5udW1fY2hhbm5lbHM7DQo+ID4gKwlmb3JfZWFj aF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShkZXYtPm9mX25vZGUsIGNoaWxkKSB7DQo+ID4gKwkJ c3RydWN0IGx0YzI5ODNfc2Vuc29yIHNlbnNvcjsNCj4gPiArDQo+ID4gKwkJcmV0ID0gb2ZfcHJv cGVydHlfcmVhZF91MzIoY2hpbGQsICJyZWciLCAmc2Vuc29yLmNoYW4pOw0KPiA+ICsJCWlmIChy ZXQpIHsNCj4gPiArCQkJZGV2X2VycihkZXYsICJyZWcgcHJvcGVydHkgbXVzdCBnaXZlbiBmb3Ig Y2hpbGQNCj4gPiBub2Rlc1xuIik7DQo+ID4gKwkJCXJldHVybiByZXQ7DQo+ID4gKwkJfQ0KPiA+ ICsNCj4gPiArCQkvKiBjaGVjayBpZiB3ZSBoYXZlIGEgdmFsaWQgY2hhbm5lbCAqLw0KPiA+ICsJ CWlmIChzZW5zb3IuY2hhbiA8IExUQzI5ODNfTUlOX0NIQU5ORUxTX05SIHx8DQo+ID4gKwkJICAg IHNlbnNvci5jaGFuID4gTFRDMjk4M19NQVhfQ0hBTk5FTFNfTlIpIHsNCj4gPiArCQkJZGV2X2Vy cihkZXYsDQo+ID4gKwkJCQkiY2hhbjolZCBtdXN0IGJlIGZyb20gMSB0byAyMFxuIiwNCj4gPiBz ZW5zb3IuY2hhbik7DQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCX0gZWxzZSBpZiAo Y2hhbm5lbF9hdmFpbF9tYXNrICYgQklUKHNlbnNvci5jaGFuKSkgew0KPiA+ICsJCQlkZXZfZXJy KGRldiwgImNoYW46JWQgYWxyZWFkeSBpbiB1c2VcbiIsDQo+ID4gc2Vuc29yLmNoYW4pOw0KPiA+ ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXJldCA9IG9mX3By b3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAiYWRpLHNlbnNvci10eXBlIiwNCj4gPiArCQkJCQkgICAg ICAgJnNlbnNvci50eXBlKTsNCj4gPiArCQlpZiAocmV0KSB7DQo+ID4gKwkJCWRldl9lcnIoZGV2 LA0KPiA+ICsJCQkJImFkaSxzZW5zb3ItdHlwZSBwcm9wZXJ0eSBtdXN0IGdpdmVuDQo+ID4gZm9y IGNoaWxkIG5vZGVzXG4iKTsNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArCQl9DQo+ID4gKw0K PiA+ICsJCWRldl9kYmcoZGV2LCAiQ3JlYXRlIG5ldyBzZW5zb3IsIHR5cGUgJXUsIGNoYW5uICV1 IiwNCj4gPiArCQkJCQkJCQlzZW5zb3IuDQo+ID4gdHlwZSwNCj4gPiArCQkJCQkJCQlzZW5zb3Iu DQo+ID4gY2hhbik7DQo+ID4gKw0KPiA+ICsJCWlmIChzZW5zb3IudHlwZSA+PSBMVEMyOTgzX1NF TlNPUl9USEVSTU9DT1VQTEUgJiYNCj4gPiArCQkgICAgc2Vuc29yLnR5cGUgPD0gTFRDMjk4M19T RU5TT1JfVEhFUk1PQ09VUExFX0NVU1RPTSkNCj4gPiB7DQo+ID4gKwkJCXN0LT5zZW5zb3JzW2No YW5dID0NCj4gPiBsdGMyOTgzX3RoZXJtb2NvdXBsZV9uZXcoY2hpbGQsIHN0LA0KPiA+ICsJCQkJ CQkJCSAgICAgJnMNCj4gPiBlbnNvcik7DQo+ID4gKwkJfSBlbHNlIGlmIChzZW5zb3IudHlwZSA+ PSBMVEMyOTgzX1NFTlNPUl9SVEQgJiYNCj4gPiArCQkJICAgc2Vuc29yLnR5cGUgPD0gTFRDMjk4 M19TRU5TT1JfUlREX0NVU1RPTSkgew0KPiA+ICsJCQlzdC0+c2Vuc29yc1tjaGFuXSA9IGx0YzI5 ODNfcnRkX25ldyhjaGlsZCwgc3QsDQo+ID4gJnNlbnNvcik7DQo+ID4gKwkJfSBlbHNlIGlmIChz ZW5zb3IudHlwZSA+PSBMVEMyOTgzX1NFTlNPUl9USEVSTUlTVE9SICYmDQo+ID4gKwkJCSAgIHNl bnNvci50eXBlIDw9DQo+ID4gTFRDMjk4M19TRU5TT1JfVEhFUk1JU1RPUl9DVVNUT00pIHsNCj4g PiArCQkJc3QtPnNlbnNvcnNbY2hhbl0gPQ0KPiA+IGx0YzI5ODNfdGhlcm1pc3Rvcl9uZXcoY2hp bGQsIHN0LA0KPiA+ICsJCQkJCQkJCSAgICZzZW4NCj4gPiBzb3IpOw0KPiA+ICsJCX0gZWxzZSBp ZiAoc2Vuc29yLnR5cGUgPT0gTFRDMjk4M19TRU5TT1JfRElPREUpIHsNCj4gPiArCQkJc3QtPnNl bnNvcnNbY2hhbl0gPSBsdGMyOTgzX2Rpb2RlX25ldyhjaGlsZCwNCj4gPiBzdCwNCj4gPiArCQkJ CQkJCSAgICAgICZzZW5zb3IpOw0KPiA+ICsJCX0gZWxzZSBpZiAoc2Vuc29yLnR5cGUgPT0NCj4g PiBMVEMyOTgzX1NFTlNPUl9TRU5TRV9SRVNJU1RPUikgew0KPiA+ICsJCQlzdC0+c2Vuc29yc1tj aGFuXSA9IGx0YzI5ODNfcl9zZW5zZV9uZXcoY2hpbGQsDQo+ID4gc3QsDQo+ID4gKwkJCQkJCQkJ JnNlbnNvcg0KPiA+ICk7DQo+ID4gKwkJCS8qIGRvbid0IGFkZCByc2Vuc2UgdG8gaWlvICovDQo+ ID4gKwkJCXN0LT5paW9fY2hhbm5lbHMtLTsNCj4gPiArCQl9IGVsc2UgaWYgKHNlbnNvci50eXBl ID09IExUQzI5ODNfU0VOU09SX0RJUkVDVF9BREMpIHsNCj4gPiArCQkJc3QtPnNlbnNvcnNbY2hh bl0gPSBsdGMyOTgzX2FkY19uZXcoY2hpbGQsIHN0LA0KPiA+ICZzZW5zb3IpOw0KPiA+ICsJCX0g ZWxzZSB7DQo+ID4gKwkJCWRldl9lcnIoZGV2LCAiVW5rbm93biBzZW5zb3IgdHlwZSAlZFxuIiwN Cj4gPiBzZW5zb3IudHlwZSk7DQo+ID4gKwkJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJCX0NCj4g PiArDQo+ID4gKwkJaWYgKElTX0VSUihzdC0+c2Vuc29yc1tjaGFuXSkpIHsNCj4gPiArCQkJZGV2 X2VycihkZXYsICJGYWlsZWQgdG8gY3JlYXRlIHNlbnNvciAlbGQiLA0KPiA+ICsJCQkJCQlQVFJf RVJSKHN0LQ0KPiA+ID5zZW5zb3JzW2NoYW5dKSk7DQo+ID4gKwkJCXJldHVybiBQVFJfRVJSKHN0 LT5zZW5zb3JzW2NoYW5dKTsNCj4gPiArCQl9DQo+ID4gKwkJLyogc2V0IGdlbmVyaWMgc2Vuc29y IHBhcmFtZXRlcnMgKi8NCj4gPiArCQlzdC0+c2Vuc29yc1tjaGFuXS0+Y2hhbiA9IHNlbnNvci5j aGFuOw0KPiA+ICsJCXN0LT5zZW5zb3JzW2NoYW5dLT50eXBlID0gc2Vuc29yLnR5cGU7DQo+ID4g Kw0KPiA+ICsJCWNoYW5uZWxfYXZhaWxfbWFzayB8PSBCSVQoc2Vuc29yLmNoYW4pOw0KPiA+ICsJ CWNoYW4rKzsNCj4gPiArCX0NCj4gPiArCS8qIGFsbG9jYXRlIGlpb19jaGFuIGFycmF5ICovDQo+ IA0KPiBUaGlzIGxhc3QgYmxvY2sgaXNuJ3QgcmVhbGx5IGFib3V0IHBhcnNpbmcgdGhlIERULCBw ZXJoYXBzIGRyb3AgaXQNCj4gb3V0IG9mDQo+IGhlcmU/DQpIbW0gdGhhdCBpcyB0cnVlLiBJIGNh biBqdXN0IGFsbG9jYXRlIHRoZSBpaW9fY2hhbiBhcnJheSBpbiB0aGUgc2V0dXANCmZ1bmN0aW9u Lg0KPiA+ICsJc3QtPmlpb19jaGFuID0gZGV2bV9remFsbG9jKGRldiwNCj4gPiArCQkJCSAgICBz dC0+aWlvX2NoYW5uZWxzICogc2l6ZW9mKCpzdC0NCj4gPiA+aWlvX2NoYW4pLA0KPiA+ICsJCQkJ ICAgIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFzdC0+aWlvX2NoYW4pDQo+ID4gKwkJcmV0dXJu IC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbnQgbHRjMjk4M19zZXR1cChzdHJ1Y3QgbHRjMjk4M19kYXRhICpzdCwgYm9vbCBhc3Np Z25faWlvKQ0KPiA+ICt7DQo+ID4gKwl1MzIgaWlvX2NoYW5fdCA9IDAsIGlpb19jaGFuX3YgPSAw LCBjaGFuLCBpaW9faWR4ID0gMDsNCj4gPiArCXUzMiBnbG9iYWxfY2ZnID0gMDsNCj4gPiArCWlu dCByZXQ7DQo+ID4gKwl1bnNpZ25lZCBsb25nIHRpbWU7DQo+ID4gKw0KPiA+ICsJLyogbWFrZSBz dXJlIHRoZSBkZXZpY2UgaXMgdXAgKi8NCj4gPiArCXRpbWUgPSB3YWl0X2Zvcl9jb21wbGV0aW9u X3RpbWVvdXQoJnN0LT5jb21wbGV0aW9uLA0KPiA+ICsJCQkJCSAgICBtc2Vjc190b19qaWZmaWVz KDI1MCkpOw0KPiA+ICsJaWYgKCF0aW1lKSB7DQo+ID4gKwkJZGV2X2Vycigmc3QtPnNwaS0+ZGV2 LCAiRGV2aWNlIHN0YXJ0dXAgdGltZWQgb3V0XG4iKTsNCj4gPiArCQlyZXR1cm4gLUVUSU1FRE9V VDsNCj4gPiArCX0NCj4gDQo+IEJsYW5rIGxpbmUgaGVyZSwgc2xpZ2h0bHkgaGVscHMgcmVhZGFi aWxpdHkgYmUgY2xlYXJseSBzZXBhcmF0aW5nIHRoZQ0KPiBlcnJvciBoYW5kbGluZyBwYXRoIGZy b20gbm9ybWFsIGZsb3cuDQphY2suDQo+ID4gKwkvKiBzZXQgZ2VuZXJpYyBnbG9iYWwgY2ZnIGFu ZCBtdXggZGVsYXkgKi8NCj4gDQo+IE5vdCBzdXJlIHRoaXMgY29tbWVudCBhZGRzIGFueXRoaW5n IG5vdCBvYnZpb3VzIGZyb20gdGhlDQo+IGNvZGUuICBDb21tZW50cw0KPiBsaWtlIHRoaXMgYXJl IGFsd2F5cyBhdCByaXNrIG9mICdyb3R0aW5nJyBvdmVyIHRpbWUsIHNvIGJldHRlciB0byBub3QN Cj4gcHV0IHRoZW0gaWYgdGhleSBkb24ndCBicmluZyBzaWduaWZpY2FudCB2YWx1ZS4NCj4gDQpJ IHdpbGwgZHJvcCBpdC4NCj4gPiArCWdsb2JhbF9jZmcgPSBMVEMyOTgzX05PVENIX0ZSRVEoc3Qt PmZpbHRlcl9ub3RjaF9mcmVxKTsNCj4gPiArCWdsb2JhbF9jZmcgfD0gTFRDMjk4M19URU1QX1VO SVRTKHN0LT50ZW1wX2ZhcmVuaGVpdCk7DQo+ID4gKwlyZWdtYXBfd3JpdGUoc3QtPnJlZ21hcCwg TFRDMjk4M19HTE9CQUxfQ09ORklHX1JFRywNCj4gPiBnbG9iYWxfY2ZnKTsNCj4gPiArCXJlZ21h cF93cml0ZShzdC0+cmVnbWFwLCBMVEMyOTgzX01VWF9DT05GSUdfUkVHLCBzdC0NCj4gPiA+bXV4 X2RlbGF5X2NvbmZpZyk7DQo+ID4gKwkvKiBzZXR1cCBjaGFubmVscyAqLw0KPiANCj4gVGhpcyBj b21tZW50IGFsc28gbm90IHN0YXRpbmcgYW55dGhpbmcgbm9uIG9idmlvdXMuDQpJIHdpbGwgZHJv cCBpdC4NCj4gPiArCWZvciAoY2hhbiA9IDA7IGNoYW4gPCBzdC0+bnVtX2NoYW5uZWxzOyBjaGFu KyspIHsNCj4gPiArCQl1MzIgY2hhbl90eXBlID0gMCwgKmlpb19jaGFuOw0KPiA+ICsNCj4gPiAr CQlyZXQgPSBzdC0+c2Vuc29yc1tjaGFuXS0+YXNzaWduX2NoYW4oc3QsIHN0LQ0KPiA+ID5zZW5z b3JzW2NoYW5dKTsNCj4gPiArCQlpZiAocmV0KQ0KPiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsJ CS8qDQo+ID4gKwkJICogVGhlIGFzc2lnbl9paW8gZmxhZyBpcyBuZWNlc3NhcnkgZm9yIHdoZW4g dGhlIGRldmljZQ0KPiA+IGlzDQo+ID4gKwkJICogY29taW5nIG91dCBvZiBzbGVlcC4gSW4gdGhh dCBjYXNlLCB3ZSBqdXN0IG5lZWQgdG8NCj4gPiArCQkgKiByZS1jb25maWd1cmUgdGhlIGRldmlj ZSBjaGFubmVscy4NCj4gPiArCQkgKiBXZSBhbHNvIGRvbid0IGFzc2lnbiBpaW8gY2hhbm5lbHMg Zm9yIHJzZW5zZS4NCj4gPiArCQkgKi8NCj4gPiArCQlpZiAoc3QtPnNlbnNvcnNbY2hhbl0tPnR5 cGUgPT0NCj4gPiBMVEMyOTgzX1NFTlNPUl9TRU5TRV9SRVNJU1RPUiB8fA0KPiA+ICsJCSAgICAh YXNzaWduX2lpbykNCj4gPiArCQkJY29udGludWU7DQo+ID4gKw0KPiA+ICsJCS8qIGFzc2lnbiBp aW8gY2hhbm5lbCAqLw0KPiA+ICsJCWlmIChzdC0+c2Vuc29yc1tjaGFuXS0+dHlwZSAhPQ0KPiA+ IExUQzI5ODNfU0VOU09SX0RJUkVDVF9BREMpIHsNCj4gPiArCQkJY2hhbl90eXBlID0gSUlPX1RF TVA7DQo+ID4gKwkJCWlpb19jaGFuID0gJmlpb19jaGFuX3Q7DQo+ID4gKwkJfSBlbHNlIHsNCj4g PiArCQkJY2hhbl90eXBlID0gSUlPX1ZPTFRBR0U7DQo+ID4gKwkJCWlpb19jaGFuID0gJmlpb19j aGFuX3Y7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQkvKg0KPiA+ICsJCSAqIGFkZCBjaGFuIGFz IHRoZSBpaW8gLmFkZHJlc3Mgc28gdGhhdCwgd2UgY2FuDQo+ID4gZGlyZWN0bHkNCj4gPiArCQkg KiByZWZlcmVuY2UgdGhlIHNlbnNvciBnaXZlbiB0aGUgaWlvX2NoYW5fc3BlYw0KPiA+ICsJCSAq Lw0KPiA+ICsJCXN0LT5paW9fY2hhbltpaW9faWR4KytdID0gTFRDMjk4M19DSEFOKGNoYW5fdHlw ZSwNCj4gPiAoKmlpb19jaGFuKSsrLA0KPiA+ICsJCQkJCQkgICAgICAgY2hhbiwNCj4gPiArCQkJ CQkJICAgICAgIHN0LQ0KPiA+ID5zZW5zb3JzW2NoYW5dLT5uYW1lKTsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVj dCByZWdtYXBfcmFuZ2UgbHRjMjk4M19yZWdfcmFuZ2VzW10gPSB7DQo+ID4gKwlyZWdtYXBfcmVn X3JhbmdlKExUQzI5ODNfU1RBVFVTX1JFRywgTFRDMjk4M19TVEFUVVNfUkVHKSwNCj4gPiArCXJl Z21hcF9yZWdfcmFuZ2UoTFRDMjk4M19URU1QX1JFU19TVEFSVF9SRUcsDQo+ID4gTFRDMjk4M19U RU1QX1JFU19FTkRfUkVHKSwNCj4gPiArCXJlZ21hcF9yZWdfcmFuZ2UoTFRDMjk4M19HTE9CQUxf Q09ORklHX1JFRywNCj4gPiBMVEMyOTgzX0dMT0JBTF9DT05GSUdfUkVHKSwNCj4gPiArCXJlZ21h cF9yZWdfcmFuZ2UoTFRDMjk4M19NVUxUX0NIQU5ORUxfU1RBUlRfUkVHLA0KPiA+ICsJCQkgTFRD Mjk4M19NVUxUX0NIQU5ORUxfRU5EX1JFRyksDQo+ID4gKwlyZWdtYXBfcmVnX3JhbmdlKExUQzI5 ODNfTVVYX0NPTkZJR19SRUcsDQo+ID4gTFRDMjk4M19NVVhfQ09ORklHX1JFRyksDQo+ID4gKwly ZWdtYXBfcmVnX3JhbmdlKExUQzI5ODNfQ0hBTl9BU1NJR05fU1RBUlRfUkVHLA0KPiA+ICsJCQkg TFRDMjk4M19DSEFOX0FTU0lHTl9FTkRfUkVHKSwNCj4gPiArCXJlZ21hcF9yZWdfcmFuZ2UoTFRD Mjk4M19DVVNUX1NFTlNfVEJMX1NUQVJUX1JFRywNCj4gPiArCQkJIExUQzI5ODNfQ1VTVF9TRU5T X1RCTF9FTkRfUkVHKSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg cmVnbWFwX2FjY2Vzc190YWJsZSBsdGMyOTgzX3JlZ190YWJsZSA9IHsNCj4gPiArCS55ZXNfcmFu Z2VzID0gbHRjMjk4M19yZWdfcmFuZ2VzLA0KPiA+ICsJLm5feWVzX3JhbmdlcyA9IEFSUkFZX1NJ WkUobHRjMjk4M19yZWdfcmFuZ2VzKSwNCj4gPiArfTsNCj4gDQo+IEJsYW5rIGxpbmUgaGVyZS4N CmFjay4NCj4gPiArLyoNCj4gPiArICogIFRoZSByZWdfYml0cyBhcmUgYWN0dWFsbHkgMTIgYnV0 IHRoZSBkZXZpY2UgbmVlZHMgdGhlIGZpcnN0DQo+ID4gKmNvbXBsZXRlKg0KPiA+ICsgKiAgYnl0 ZSBmb3IgdGhlIGNvbW1hbmQgKFIvVykuDQo+ID4gKyAqLw0KPiA+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IHJlZ21hcF9jb25maWcgbHRjMjk4M19yZWdtYXBfY29uZmlnID0gew0KPiA+ICsJLnJlZ19i aXRzID0gMjQsDQo+ID4gKwkudmFsX2JpdHMgPSA4LA0KPiA+ICsJLndyX3RhYmxlID0gJmx0YzI5 ODNfcmVnX3RhYmxlLA0KPiA+ICsJLnJkX3RhYmxlID0gJmx0YzI5ODNfcmVnX3RhYmxlLA0KPiA+ ICsJLnJlYWRfZmxhZ19tYXNrID0gR0VOTUFTSygxLCAwKSwNCj4gPiArCS53cml0ZV9mbGFnX21h c2sgPSBCSVQoMSksDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0ICBp aW9faW5mbyBsdGMyOTgzX2lpb19pbmZvID0gew0KPiA+ICsJLnJlYWRfcmF3ID0gbHRjMjk4M19y ZWFkX3JhdywNCj4gPiArCS5kZWJ1Z2ZzX3JlZ19hY2Nlc3MgPSBsdGMyOTgzX3JlZ19hY2Nlc3Ms DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGx0YzI5ODNfcHJvYmUoc3RydWN0IHNw aV9kZXZpY2UgKnNwaSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGx0YzI5ODNfZGF0YSAqc3Q7DQo+ ID4gKwlzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2Ow0KPiA+ICsJY29uc3QgY2hhciAqbmFtZSA9 IHNwaV9nZXRfZGV2aWNlX2lkKHNwaSktPm5hbWU7DQo+ID4gKwlpbnQgcmV0Ow0KPiA+ICsNCj4g PiArCWluZGlvX2RldiA9IGRldm1faWlvX2RldmljZV9hbGxvYygmc3BpLT5kZXYsIHNpemVvZigq c3QpKTsNCj4gPiArCWlmICghaW5kaW9fZGV2KQ0KPiA+ICsJCXJldHVybiAtRU5PTUVNOw0KPiA+ ICsNCj4gPiArCXN0ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsNCj4gPiArDQo+ID4gKwlzdC0+cmVn bWFwID0gZGV2bV9yZWdtYXBfaW5pdF9zcGkoc3BpLCAmbHRjMjk4M19yZWdtYXBfY29uZmlnKTsN Cj4gPiArCWlmIChJU19FUlIoc3QtPnJlZ21hcCkpIHsNCj4gPiArCQlkZXZfZXJyKCZzcGktPmRl diwgIkZhaWxlZCB0byBpbml0aWFsaXplIHJlZ21hcFxuIik7DQo+ID4gKwkJcmV0dXJuIFBUUl9F UlIoc3QtPnJlZ21hcCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbXV0ZXhfaW5pdCgmc3QtPmxv Y2spOw0KPiA+ICsJaW5pdF9jb21wbGV0aW9uKCZzdC0+Y29tcGxldGlvbik7DQo+ID4gKwlzdC0+ c3BpID0gc3BpOw0KPiA+ICsJc3BpX3NldF9kcnZkYXRhKHNwaSwgc3QpOw0KPiA+ICsNCj4gPiAr CXJldCA9IGx0YzI5ODNfcGFyc2VfZHQoc3QpOw0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1 cm4gcmV0Ow0KPiA+ICsJLyoNCj4gPiArCSAqIGxldCdzIHJlcXVlc3QgdGhlIGlycSBub3cgc28g aXQgaXMgdXNlZCB0byBzeW5jIHRoZSBkZXZpY2UNCj4gPiArCSAqIHN0YXJ0dXAgaW4gbHRjMjk4 M19zZXR1cCgpDQo+ID4gKwkgKi8NCj4gPiArCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9p cnEoJnNwaS0+ZGV2LCBzcGktPmlycSwgTlVMTCwNCj4gPiArCQkJCQlsdGMyOTgzX2lycV9oYW5k bGVyLA0KPiA+IElSUUZfT05FU0hPVCB8DQo+ID4gKwkJCQkJSVJRRl9UUklHR0VSX1JJU0lORywg bmFtZSwgc3QpOw0KPiA+ICsJaWYgKHJldCkgew0KPiA+ICsJCWRldl9lcnIoJnNwaS0+ZGV2LCAi ZmFpbGVkIHRvIHJlcXVlc3QgYW4gaXJxLCAlZCIsDQo+ID4gcmV0KTsNCj4gPiArCQlyZXR1cm4g cmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldCA9IGx0YzI5ODNfc2V0dXAoc3QsIHRydWUp Ow0KPiA+ICsJaWYgKHJldCkNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCWluZGlv X2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsNCj4gPiArCWluZGlvX2Rldi0+bmFtZSA9IG5h bWU7DQo+ID4gKwlpbmRpb19kZXYtPm51bV9jaGFubmVscyA9IHN0LT5paW9fY2hhbm5lbHM7DQo+ ID4gKwlpbmRpb19kZXYtPmNoYW5uZWxzID0gc3QtPmlpb19jaGFuOw0KPiA+ICsJaW5kaW9fZGV2 LT5tb2RlcyA9IElORElPX0RJUkVDVF9NT0RFOw0KPiA+ICsJaW5kaW9fZGV2LT5pbmZvID0gJmx0 YzI5ODNfaWlvX2luZm87DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGRldm1faWlvX2RldmljZV9yZWdp c3Rlcigmc3BpLT5kZXYsIGluZGlvX2Rldik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBp bnQgX19tYXliZV91bnVzZWQgbHRjMjk4M19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgbHRjMjk4M19kYXRhICpzdCA9IHNwaV9nZXRfZHJ2ZGF0YSh0b19z cGlfZGV2aWNlKGRldikpOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwltdXRleF9sb2Nr KCZzdC0+bG9jayk7DQo+ID4gKwkvKiBkdW1teSByZWFkIHRvIGJyaW5nIHRoZSBkZXZpY2Ugb3V0 IG9mIHNsZWVwICovDQo+ID4gKwlyZWdtYXBfcmVhZChzdC0+cmVnbWFwLCBMVEMyOTgzX1NUQVRV U19SRUcsICZyZXQpOw0KPiA+ICsJLyogd2UgbmVlZCB0byByZS1hc3NpZ24gdGhlIGNoYW5uZWxz ICovDQo+ID4gKwlyZXQgPSBsdGMyOTgzX3NldHVwKHN0LCBmYWxzZSk7DQo+ID4gKwlzdC0+cmVz ZXQgPSBmYWxzZTsNCj4gPiArCW11dGV4X3VubG9jaygmc3QtPmxvY2spOw0KPiA+ICsNCj4gPiAr CXJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVz ZWQgbHRjMjk4M19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiArew0KPiA+ICsJc3Ry dWN0IGx0YzI5ODNfZGF0YSAqc3QgPSBzcGlfZ2V0X2RydmRhdGEodG9fc3BpX2RldmljZShkZXYp KTsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJbXV0ZXhfbG9jaygmc3QtPmxvY2spOw0K PiA+ICsJcmV0ID0gcmVnbWFwX3dyaXRlKHN0LT5yZWdtYXAsIExUQzI5ODNfU1RBVFVTX1JFRywN Cj4gPiBMVEMyOTgzX1NMRUVQKTsNCj4gPiArCXN0LT5yZXNldCA9IHRydWU7DQo+IA0KPiBOYW1p bmcgc2VlbXMgYSBiaXQgb2RkLiBUaGUgcmVnaXN0ZXIgZmllbGQgaXMgY2FsbGVkIHNsZWVwLCBi dXQgd2UNCj4gY2FsbA0KPiBpdCByZXNldCBpbnRlcm5hbGx5Pw0KSSBhZ3JlZS4gU29tZXRoaW5n IGxpa2UgYHN1c3BlbmRgIG9yIGBzbGVlcGAgZm9yIHRoZSBib29sZWFuIHdvdWxkIGJlDQpvaz8N Cj4gPiArCW11dGV4X3VubG9jaygmc3QtPmxvY2spOw0KPiA+ICsNCj4gPiArCXJldHVybiByZXQ7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhsdGMyOTgzX3Bt X29wcywgbHRjMjk4M19zdXNwZW5kLA0KPiA+IGx0YzI5ODNfcmVzdW1lKTsNCj4gPiArDQo+ID4g K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCBsdGMyOTgzX2lkX3RhYmxlW10gPSB7 DQo+ID4gKwl7ICJsdGMyOTgzIiB9LA0KPiA+ICsJe30sDQo+ID4gK307DQo+ID4gK01PRFVMRV9E RVZJQ0VfVEFCTEUoc3BpLCBsdGMyOTgzX2lkX3RhYmxlKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGx0YzI5ODNfb2ZfbWF0Y2hbXSA9IHsNCj4gPiArCXsg LmNvbXBhdGlibGUgPSAiYWRpLGx0YzI5ODMiIH0sDQo+ID4gKwl7fSwNCj4gPiArfTsNCj4gPiAr TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbHRjMjk4M19pZF90YWJsZSk7DQo+ID4gKw0KPiA+ICtz dGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgbHRjMjk4M19kcml2ZXIgPSB7DQo+ID4gKwkuZHJpdmVy ID0gew0KPiA+ICsJCS5uYW1lID0gImx0YzI5ODMiLA0KPiA+ICsJCS5vZl9tYXRjaF90YWJsZSA9 IGx0YzI5ODNfb2ZfbWF0Y2gsDQo+ID4gKwkJLnBtID0gJmx0YzI5ODNfcG1fb3BzLA0KPiA+ICsJ fSwNCj4gPiArCS5wcm9iZSA9IGx0YzI5ODNfcHJvYmUsDQo+ID4gKwkuaWRfdGFibGUgPSBsdGMy OTgzX2lkX3RhYmxlLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArbW9kdWxlX3NwaV9kcml2ZXIobHRj Mjk4M19kcml2ZXIpOw0KPiA+ICsNCj4gPiArTU9EVUxFX0FVVEhPUigiTnVubyBTYSA8bnVuby5z YUBhbmFsb2cuY29tPiIpOw0KPiA+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkFuYWxvZyBEZXZpY2Vz IExUQzI5ODMgU1BJIFRlbXBlcmF0dXJlDQo+ID4gc2Vuc29ycyIpOw0KPiA+ICtNT0RVTEVfTElD RU5TRSgiR1BMIik7DQoNCg==