From mboxrd@z Thu Jan 1 00:00:00 1970 From: Preetham Chandru Subject: RE: [v2,1/3] ata: ahci_tegra: add support for tegra210 Date: Wed, 21 Dec 2016 08:50:50 +0000 Message-ID: <7c1c25bc28a040df9f1f47884ad25746@bgmail103.nvidia.com> References: <1479973418-21351-2-git-send-email-pchandru@nvidia.com> <7a8d3270-b8b7-06f9-b8d1-39f9575645ce@nvidia.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <7a8d3270-b8b7-06f9-b8d1-39f9575645ce-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> Content-Language: en-US Sender: linux-tegra-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Mikko Perttunen , "preetham260-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org" Cc: "tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org" , "swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org" , "thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org" , Laxman Dewangan , "linux-ide-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , Venu Byravarasu , Pavan Kunapuli , "linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" List-Id: linux-ide@vger.kernel.org DQoNCj4tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPkZyb206IE1pa2tvIFBlcnR0dW5lbg0K PlNlbnQ6IE1vbmRheSwgTm92ZW1iZXIgMjgsIDIwMTYgNjowMiBQTQ0KPlRvOiBQcmVldGhhbSBD aGFuZHJ1OyBwcmVldGhhbTI2MEBnbWFpbC5jb20NCj5DYzogdGpAa2VybmVsLm9yZzsgc3dhcnJl bkB3d3dkb3Rvcmcub3JnOyB0aGllcnJ5LnJlZGluZ0BnbWFpbC5jb207DQo+TGF4bWFuIERld2Fu Z2FuOyBsaW51eC1pZGVAdmdlci5rZXJuZWwub3JnOyBWZW51IEJ5cmF2YXJhc3U7IFBhdmFuDQo+ S3VuYXB1bGk7IGxpbnV4LXRlZ3JhQHZnZXIua2VybmVsLm9yZw0KPlN1YmplY3Q6IFJlOiBbdjIs MS8zXSBhdGE6IGFoY2lfdGVncmE6IGFkZCBzdXBwb3J0IGZvciB0ZWdyYTIxMA0KPg0KPitDYyBs aW51eC10ZWdyYQ0KPg0KPkhpIFByZWV0aGFtLA0KPg0KPkknbGwgZG8gYSByZXZpZXcgcGFzcy4g UGxlYXNlIGFsc28gQ2MgdGhlIG5leHQgdmVyc2lvbiB0byBsaW51eC0NCj50ZWdyYUB2Z2VyLmtl cm5lbC5vcmcgc28gdGhhdCBtb3JlIFRlZ3JhIGRldmVsb3BlcnMgaGF2ZSB2aXNpYmlsaXR5Lg0K Pg0KDQpPay4NCg0KPk9uIDI0LjExLjIwMTYgMDk6NDMsIFBSRUVUSEFNIFJBTUFDSEFORFJBIHdy b3RlOg0KPj4gRnJvbTogUHJlZXRoYW0gQ2hhbmRydSBSIDxwY2hhbmRydUBudmlkaWEuY29tPg0K Pj4NCj4+IEFkZCBBSENJIHN1cHBvcnQgZm9yIHRlZ3JhMjEwDQo+PiAxLiBNb3ZlZCB0ZWdyYTEy NCBzcGVjaWZpY3MgdG8gdGVncmExMjRfYWhjaV9pbml0Lg0KPj4gMi4gU2VwYXJhdGVkIG91dCB0 aGUgcmVndWxhdG9ycyBuZWVkZWQgZm9yIHRlZ3JhMTI0IGFuZCB0ZWdyYTIxMC4NCj4+IDMuIFNl dCB0aGUgTFBNIGNhcGFiaWxpdGllcw0KPj4gNC4gQ3JlYXRlIGlubGluZSBmdW5jdGlvbnMgZm9y IHJlYWQvd3JpdGUgYW5kIG1vZGlmeSB0bw0KPj4gICAgU0FUQSwgU0FUQSBDb25maWcgYW5kIFNB VEEgQXV4IHJlZ2lzdGVycy4NCj4+DQo+PiBTaWduZWQtb2ZmLWJ5OiBQcmVldGhhbSBDaGFuZHJ1 IFIgPHBjaGFuZHJ1QG52aWRpYS5jb20+DQo+PiAtLS0NCj4+IHYyOg0KPj4gKiBGaXhlZCBpbmRl bnRhdGlvbiBpc3N1ZXMNCj4+ICogTW92ZWQgdGhlIGNoYW5nZSB0byBkaXNhYmxlIERJUE0sIEhJ UE0sIERldlNscCwgcGFydGlhbCwNCj4+ICAgc2x1bWJlciBhbmQgTkNRIGludG8gYSBzZXBhcmF0 ZSBwYXRjaA0KPj4NCj4+ICBkcml2ZXJzL2F0YS9haGNpX3RlZ3JhLmMgfCA0NzgNCj4+ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tDQo+PiAgMSBmaWxlIGNo YW5nZWQsIDM0OCBpbnNlcnRpb25zKCspLCAxMzAgZGVsZXRpb25zKC0pDQo+Pg0KPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvYXRhL2FoY2lfdGVncmEuYyBiL2RyaXZlcnMvYXRhL2FoY2lfdGVncmEu YyBpbmRleA0KPj4gM2E2MmViMi4uZDEyZTJhOSAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvYXRh L2FoY2lfdGVncmEuYw0KPj4gKysrIGIvZHJpdmVycy9hdGEvYWhjaV90ZWdyYS5jDQo+PiBAQCAt MzMsMzIgKzMzLDc0IEBADQo+Pg0KPj4gICNkZWZpbmUgRFJWX05BTUUgInRlZ3JhLWFoY2kiDQo+ Pg0KPj4gKyNkZWZpbmUgU0FUQV9GUENJX0JBUjVfMAkJCQkweDk0DQo+PiArI2RlZmluZSBGUENJ X0JBUjVfU1RBUlRfTUFTSwkJCQkoMHhGRkZGRkZGIDw8DQo+NCkNCj4+ICsjZGVmaW5lIEZQQ0lf QkFSNV9TVEFSVAkJCQkJKDB4MDA0MDAyMA0KPjw8IDQpDQo+PiArI2RlZmluZSBGUENJX0JBUjVf QUNDRVNTX1RZUEUJCQkJKDB4MSkNCj4NCj5QbGVhc2UgdXNlIHRoZSBleGlzdGluZyBjb252ZW50 aW9uIGluIHRoaXMgZmlsZSwgdGhhdCBpcywgZmllbGRzIGFyZSBwcmVmaXhlZCB3aXRoDQo+dGhl IHJlZ2lzdGVyIG5hbWUuIEFsc28sIHBsZWFzZSB1c2Ugc21hbGwgbGV0dGVycyBmb3IgaGV4IGRp Z2l0cyBhcyB1c2VkIGluIHRoZQ0KPmZpbGUgZWxzZXdoZXJlLg0KPg0KDQpPay4NCg0KPj4gKw0K Pj4gICNkZWZpbmUgU0FUQV9DT05GSUdVUkFUSU9OXzAJCQkJMHgxODANCj4+IC0jZGVmaW5lIFNB VEFfQ09ORklHVVJBVElPTl9FTl9GUENJCQkJQklUKDApDQo+PiArI2RlZmluZSBTQVRBX0NPTkZJ R1VSQVRJT05fMF9FTl9GUENJCQkJQklUKDApDQo+PiArI2RlZmluZSBTQVRBX0NPTkZJR1VSQVRJ T05fQ0xLX09WRVJSSURFCQkJQklUKDMxKQ0KPj4gKw0KPj4gKyNkZWZpbmUgU0FUQV9JTlRSX01B U0tfMAkJCQkweDE4OA0KPj4gKyNkZWZpbmUgSVBfSU5UX01BU0sJCQkJCUJJVCgxNikNCj4+DQo+ PiAgI2RlZmluZSBTQ0ZHX09GRlNFVAkJCQkJMHgxMDAwDQo+Pg0KPj4gLSNkZWZpbmUgVF9TQVRB MF9DRkdfMQkJCQkJMHgwNA0KPj4gLSNkZWZpbmUgVF9TQVRBMF9DRkdfMV9JT19TUEFDRQkJCQlC SVQoMCkNCj4+IC0jZGVmaW5lIFRfU0FUQTBfQ0ZHXzFfTUVNT1JZX1NQQUNFCQkJQklUKDEpDQo+ PiAtI2RlZmluZSBUX1NBVEEwX0NGR18xX0JVU19NQVNURVIJCQlCSVQoMikNCj4+IC0jZGVmaW5l IFRfU0FUQTBfQ0ZHXzFfU0VSUgkJCQlCSVQoOCkNCj4+ICsjZGVmaW5lIFRfU0FUQV9DRkdfMQkJ CQkJMHg0DQo+PiArI2RlZmluZSBUX1NBVEFfQ0ZHXzFfSU9fU1BBQ0UJCQkJQklUKDApDQo+PiAr I2RlZmluZSBUX1NBVEFfQ0ZHXzFfTUVNT1JZX1NQQUNFCQkJQklUKDEpDQo+PiArI2RlZmluZSBU X1NBVEFfQ0ZHXzFfQlVTX01BU1RFUgkJCQlCSVQoMikNCj4+ICsjZGVmaW5lIFRfU0FUQV9DRkdf MV9TRVJSCQkJCUJJVCg4KQ0KPg0KPlRyeSBub3QgdG8gcmVuYW1lIGFuZCBtb3ZlIGZpZWxkcyB1 bm5lY2Vzc2FyaWx5LiBJdCBtYWtlcyBpdCB2ZXJ5IGRpZmZpY3VsdCB0bw0KPnNlZSB3aGVyZSB0 aGluZ3MgaGF2ZSBhY3R1YWxseSBjaGFuZ2VkIGFuZCBtYWtlcyB0aGUgcGF0Y2ggdW5uZWNlc3Nh cmlseQ0KPmxvbmcuDQo+DQoNCk9rLg0KDQo+PiArDQo+PiArI2RlZmluZSBUX1NBVEFfQ0ZHXzkJ CQkJCTB4MjQNCj4+ICsjZGVmaW5lIFRfU0FUQV9DRkdfOV9CQVNFX0FERFJFU1MJCQkweDQwMDIw MDAwDQo+PiArDQo+PiArI2RlZmluZSBUX1NBVEEwX0NGR18zNQkJCQkJMHg5NA0KPj4gKyNkZWZp bmUgVF9TQVRBMF9DRkdfMzVfSURQX0lOREVYX01BU0sJCQkoMHg3RkYNCj48PCAyKQ0KPj4gKyNk ZWZpbmUgVF9TQVRBMF9DRkdfMzVfSURQX0lOREVYCQkJKDB4MkEgPDwgMikNCj4+DQo+PiAtI2Rl ZmluZSBUX1NBVEEwX0NGR185CQkJCQkweDI0DQo+PiAtI2RlZmluZSBUX1NBVEEwX0NGR185X0JB U0VfQUREUkVTU19TSElGVAkJMTMNCj4+ICsjZGVmaW5lIFRfU0FUQTBfQUhDSV9JRFAxCQkJCTB4 OTgNCj4+ICsjZGVmaW5lIFRfU0FUQTBfQUhDSV9JRFAxX0RBVEENCj4JKDB4NDAwMDQwKQ0KPj4N Cj4+IC0jZGVmaW5lIFNBVEFfRlBDSV9CQVI1CQkJCQkweDk0DQo+PiAtI2RlZmluZSBTQVRBX0ZQ Q0lfQkFSNV9TVEFSVF9TSElGVAkJCTQNCj4+ICsjZGVmaW5lIFRfU0FUQTBfQ0ZHX1BIWV8xCQkJ CTB4MTJDDQo+PiArI2RlZmluZSBUX1NBVEEwX0NGR19QSFlfMV9QQURTX0lERFFfRU4JCQlCSVQo MjMpDQo+PiArI2RlZmluZSBUX1NBVEEwX0NGR19QSFlfMV9QQURfUExMX0lERFFfRU4JCUJJVCgy MikNCj4+DQo+PiAtI2RlZmluZSBTQVRBX0lOVFJfTUFTSwkJCQkJMHgxODgNCj4+IC0jZGVmaW5l IFNBVEFfSU5UUl9NQVNLX0lQX0lOVF9NQVNLCQkJQklUKDE2KQ0KPj4gKyNkZWZpbmUgVF9TQVRB MF9OVk9PQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMTQNCj4+ICsjZGVm aW5lIFRfU0FUQTBfTlZPT0JfQ09NTUFfQ05UX01BU0sgICAgICAgICAgICAgICAgICAgICgweGZm IDw8IDE2KQ0KPj4gKyNkZWZpbmUgVF9TQVRBMF9OVk9PQl9DT01NQV9DTlQgICAgICAgICAgICAg ICAgICAgICAgICAgKDB4MDcgPDwgMTYpDQo+PiArI2RlZmluZSBUX1NBVEEwX05WT09CX1NRVUVM Q0hfRklMVEVSX01PREVfTUFTSyAgICAgICAgICAoMHgzIDw8DQo+MjQpDQo+PiArI2RlZmluZSBU X1NBVEEwX05WT09CX1NRVUVMQ0hfRklMVEVSX01PREUgICAgICAgICAgICAgICAoMHgxIDw8IDI0 KQ0KPj4gKyNkZWZpbmUgVF9TQVRBMF9OVk9PQl9TUVVFTENIX0ZJTFRFUl9MRU5HVEhfTUFTSyAg ICAgICAgKDB4MyA8PA0KPjI2KQ0KPj4gKyNkZWZpbmUgVF9TQVRBMF9OVk9PQl9TUVVFTENIX0ZJ TFRFUl9MRU5HVEggICAgICAgICAgICAgKDB4MyA8PCAyNikNCj4+ICsNCj4+ICsjZGVmaW5lIFRf U0FUQV9DRkdfUEhZXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTIwDQo+PiAr I2RlZmluZSBUX1NBVEFfQ0ZHX1BIWV8wX1VTRV83QklUX0FMSUdOX0RFVF9GT1JfU1BEICAgICBC SVQoMTEpDQo+PiArI2RlZmluZSBUX1NBVEFfQ0ZHX1BIWV8wX01BU0tfU1FVRUxDSCAgICAgICAg ICAgICAgICAgICBCSVQoMjQpDQo+PiArDQo+PiArI2RlZmluZSBGVVNFX1NBVEFfQ0FMSUIJCQkJ CTB4MTI0DQo+PiArI2RlZmluZSBGVVNFX1NBVEFfQ0FMSUJfTUFTSwkJCQkweDMNCj4+ICsNCj4+ ICsjZGVmaW5lIFRfU0FUQTBfQ0ZHMk5WT09CXzIJCQkJMHgxMzQNCj4+ICsjZGVmaW5lIFRfU0FU QTBfQ0ZHMk5WT09CXzJfQ09NV0FLRV9JRExFX0NOVF9MT1dfTUFTSw0KPgkoMHgxZmYgPDwgMTgp DQo+PiArI2RlZmluZSBUX1NBVEEwX0NGRzJOVk9PQl8yX0NPTVdBS0VfSURMRV9DTlRfTE9XCSgw eGMgPDwNCj4xOCkNCj4+DQo+PiAgI2RlZmluZSBUX1NBVEEwX0FIQ0lfSEJBX0NBUF9CS0RSCQkJ MHgzMDANCj4+ICsjZGVmaW5lIFRfU0FUQTBfQUhDSV9IQkFfQ0FQX0JLRFJfUEFSVElBTF9TVF9D QVAJQklUKDEzKQ0KPj4gKyNkZWZpbmUgVF9TQVRBMF9BSENJX0hCQV9DQVBfQktEUl9TTFVNQkVS X1NUX0NBUAlCSVQoMTQpDQo+PiArI2RlZmluZSBUX1NBVEEwX0FIQ0lfSEJBX0NBUF9CS0RSX1NB TFAJCQlCSVQoMjYpDQo+PiArI2RlZmluZSBUX1NBVEEwX0FIQ0lfSEJBX0NBUF9CS0RSX1NVUFBf UE0JCUJJVCgxNykNCj4+ICsjZGVmaW5lIFRfU0FUQTBfQUhDSV9IQkFfQ0FQX0JLRFJfU05DUQkJ CUJJVCgzMCkNCj4+DQo+PiAtI2RlZmluZSBUX1NBVEEwX0JLRE9PUl9DQwkJCQkweDRhNA0KPj4g KyNkZWZpbmUgVF9TQVRBX0JLRE9PUl9DQwkJCQkweDRBNA0KPj4gKyNkZWZpbmUgVF9TQVRBX0JL RE9PUl9DQ19DTEFTU19DT0RFX01BU0sJCSgweEZGRkYgPDwgMTYpDQo+PiArI2RlZmluZSBUX1NB VEFfQktET09SX0NDX0NMQVNTX0NPREUNCj4JKDB4MDEwNiA8PCAxNikNCj4+ICsjZGVmaW5lIFRf U0FUQV9CS0RPT1JfQ0NfUFJPR19JRl9NQVNLCQkJKDB4RkYNCj48PCA4KQ0KPj4gKyNkZWZpbmUg VF9TQVRBX0JLRE9PUl9DQ19QUk9HX0lGCQkJKDB4MDEgPDwgOCkNCj4+DQo+PiAtI2RlZmluZSBU X1NBVEEwX0NGR19TQVRBCQkJCTB4NTRjDQo+PiAtI2RlZmluZSBUX1NBVEEwX0NGR19TQVRBX0JB Q0tET09SX1BST0dfSUZfRU4JCUJJVCgxMikNCj4+ICsjZGVmaW5lIFRfU0FUQV9DRkdfU0FUQQkJ CQkJMHg1NEMNCj4+ICsjZGVmaW5lIFRfU0FUQV9DRkdfU0FUQV9CQUNLRE9PUl9QUk9HX0lGX0VO CQlCSVQoMTIpDQo+Pg0KPj4gICNkZWZpbmUgVF9TQVRBMF9DRkdfTUlTQwkJCQkweDU1MA0KPj4N Cj4+IEBAIC04Miw4ICsxMjQsMjcgQEANCj4+ICAjZGVmaW5lIFRfU0FUQTBfQ0hYX1BIWV9DVFJM MTEJCQkJMHg2ZDANCj4+ICAjZGVmaW5lIFRfU0FUQTBfQ0hYX1BIWV9DVFJMMTFfR0VOMl9SWF9F UQkJKDB4MjgwMCA8PA0KPjE2KQ0KPj4NCj4+IC0jZGVmaW5lIEZVU0VfU0FUQV9DQUxJQgkJCQkJ MHgxMjQNCj4+IC0jZGVmaW5lIEZVU0VfU0FUQV9DQUxJQl9NQVNLCQkJCTB4Mw0KPj4gKy8qIEVs ZWN0cmljYWwgc2V0dGluZ3MgZm9yIGJldHRlciBsaW5rIHN0YWJpbGl0eSAqLw0KPj4gKyNkZWZp bmUgVF9TQVRBMF9DSFhfUEhZX0NUUkwxN18wCQkJMHg2ZTgNCj4+ICsjZGVmaW5lIFRfU0FUQTBf Q0hYX1BIWV9DVFJMMTdfMF9SWF9FUV9DVFJMX0xfR0VOMQ0KPgkweDU1MDEwMDAwDQo+PiArI2Rl ZmluZSBUX1NBVEEwX0NIWF9QSFlfQ1RSTDE4XzAJCQkweDZlYw0KPj4gKyNkZWZpbmUgVF9TQVRB MF9DSFhfUEhZX0NUUkwxOF8wX1JYX0VRX0NUUkxfTF9HRU4yDQo+CTB4NTUwMTAwMDANCj4+ICsj ZGVmaW5lIFRfU0FUQTBfQ0hYX1BIWV9DVFJMMjBfMAkJCTB4NmY0DQo+PiArI2RlZmluZSBUX1NB VEEwX0NIWF9QSFlfQ1RSTDIwXzBfUlhfRVFfQ1RSTF9IX0dFTjEJMHgxDQo+PiArI2RlZmluZSBU X1NBVEEwX0NIWF9QSFlfQ1RSTDIxXzAJCQkweDZmOA0KPj4gKyNkZWZpbmUgVF9TQVRBMF9DSFhf UEhZX0NUUkwyMV8wX1JYX0VRX0NUUkxfSF9HRU4yCTB4MQ0KPj4gKw0KPj4gKy8qIEFVWCBSZWdp c3RlcnMgKi8NCj4+ICsjZGVmaW5lIFNBVEFfQVVYX01JU0NfQ05UTF8xXzAJCQkJMHg4DQo+PiAr I2RlZmluZSBERVZTTFBfT1ZFUlJJREUJCQkJCUJJVCgxNykNCj4+ICsjZGVmaW5lIFNEU19TVVBQ T1JUCQkJCQlCSVQoMTMpDQo+PiArI2RlZmluZSBERVNPX1NVUFBPUlQJCQkJCUJJVCgxNSkNCj4+ ICsNCj4+ICsjZGVmaW5lIFNBVEFfQVVYX1JYX1NUQVRfSU5UXzAJCQkJMHhjDQo+PiArI2RlZmlu ZSBTQVRBX0RFVlNMUAkJCQkJQklUKDcpDQo+PiArDQo+PiArI2RlZmluZSBTQVRBX0FVWF9TUEFS RV9DRkcwXzAJCQkJMHgxOA0KPj4gKyNkZWZpbmUgTURBVF9USU1FUl9BRlRFUl9QR19WQUxJRAkJ CUJJVCgxNCkNCj4+DQo+PiAgc3RydWN0IHNhdGFfcGFkX2NhbGlicmF0aW9uIHsNCj4+ICAJdTgg Z2VuMV90eF9hbXA7DQo+PiBAQCAtOTksMTUgKzE2MCwxMzUgQEAgc3RhdGljIGNvbnN0IHN0cnVj dCBzYXRhX3BhZF9jYWxpYnJhdGlvbg0KPnRlZ3JhMTI0X3BhZF9jYWxpYnJhdGlvbltdID0gew0K Pj4gIAl7MHgxNCwgMHgwZSwgMHgxYSwgMHgwZX0sDQo+PiAgfTsNCj4+DQo+PiArc3RydWN0IHRl Z3JhX2FoY2lfb3BzIHsNCj4+ICsJaW50ICgqaW5pdCkoc3RydWN0IGFoY2lfaG9zdF9wcml2ICop OyB9Ow0KPj4gKw0KPj4gK3N0cnVjdCB0ZWdyYV9haGNpX3NvYyB7DQo+PiArCWNvbnN0IGNoYXIg KmNvbnN0ICpzdXBwbHlfbmFtZXM7DQo+PiArCXVuc2lnbmVkIGludCBudW1fc3VwcGxpZXM7DQo+ PiArCXN0cnVjdCB0ZWdyYV9haGNpX29wcyBvcHM7DQo+PiArfTsNCj4+ICsNCj4+ICBzdHJ1Y3Qg dGVncmFfYWhjaV9wcml2IHsNCj4+IC0Jc3RydWN0IHBsYXRmb3JtX2RldmljZQkgICAqcGRldjsN Cj4+IC0Jdm9pZCBfX2lvbWVtCQkgICAqc2F0YV9yZWdzOw0KPj4gLQlzdHJ1Y3QgcmVzZXRfY29u dHJvbAkgICAqc2F0YV9yc3Q7DQo+PiAtCXN0cnVjdCByZXNldF9jb250cm9sCSAgICpzYXRhX29v Yl9yc3Q7DQo+PiAtCXN0cnVjdCByZXNldF9jb250cm9sCSAgICpzYXRhX2NvbGRfcnN0Ow0KPj4g KwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Ow0KPj4gKwl2b2lkIF9faW9tZW0gKnNhdGFf cmVnczsNCj4+ICsJdm9pZCBfX2lvbWVtICpzYXRhX2F1eF9yZWdzOw0KPj4gKwlzdHJ1Y3QgcmVz ZXRfY29udHJvbCAqc2F0YV9yc3Q7DQo+PiArCXN0cnVjdCByZXNldF9jb250cm9sICpzYXRhX29v Yl9yc3Q7DQo+PiArCXN0cnVjdCByZXNldF9jb250cm9sICpzYXRhX2NvbGRfcnN0Ow0KPj4gIAkv KiBOZWVkcyBzcGVjaWFsIGhhbmRsaW5nLCBjYW5ub3QgdXNlIGFoY2lfcGxhdGZvcm0gKi8NCj4+ IC0Jc3RydWN0IGNsawkJICAgKnNhdGFfY2xrOw0KPj4gLQlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtf ZGF0YSBzdXBwbGllc1s1XTsNCj4+ICsJc3RydWN0IGNsayAqc2F0YV9jbGs7DQo+PiArCXN0cnVj dCByZWd1bGF0b3JfYnVsa19kYXRhICpzdXBwbGllczsNCj4+ICsJc3RydWN0IHRlZ3JhX2FoY2lf c29jICpzb2NfZGF0YTsNCj4+ICt9Ow0KPg0KPkkgZG9uJ3QgcGFydGljdWxhcmx5IGNhcmUgd2hl dGhlciB0aGUgZmllbGQgbmFtZXMgYXJlIGFsaWduZWQgb3Igbm90LCBidXQgSQ0KPnJlbWVtYmVy IHRoZSBhdGEgbWFpbnRhaW5lcnMgd2FudGluZyB0aGVtIHRvIGJlLiBBbnl3YXksIGNoYW5naW5n IHRoZQ0KPnN0eWxlIG1ha2VzIHRoZSBwYXRjaCBsYXJnZXIgYW5kIHRoZSBhY3R1YWwgZnVuY3Rp b25hbGl0eSBjaGFuZ2VzIGhhcmRlciB0bw0KPnJldmlldy4NCj4NCg0KT2sgd2lsbCBrZWVwIHRo ZW0gYWxpZ25lZC4NCg0KPj4gKw0KPj4gK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0ZWdyYTEy NF9zdXBwbHlfbmFtZXNbXSA9IHsNCj4+ICsJImF2ZGQiLCAiaHZkZCIsICJ2ZGRpbyIsICJ0YXJn ZXQtNXYiLCAidGFyZ2V0LTEydiINCj4+ICt9Ow0KPj4gKw0KPj4gK3N0YXRpYyBpbmxpbmUgdm9p ZCB0ZWdyYV9haGNpX3NhdGFfdXBkYXRlKHN0cnVjdCB0ZWdyYV9haGNpX3ByaXYgKnRlZ3JhLA0K Pj4gKwkJCQkJICB1MzIgdmFsLCB1MzIgbWFzaywgdTMyIG9mZnNldCkgew0KPj4gKwl1MzIgdXZh bDsNCj4+ICsNCj4+ICsJdXZhbCA9IHJlYWRsKHRlZ3JhLT5zYXRhX3JlZ3MgKyBvZmZzZXQpOw0K Pj4gKwl1dmFsID0gKHV2YWwgJiB+bWFzaykgfCAodmFsICYgbWFzayk7DQo+PiArCXdyaXRlbCh1 dmFsLCB0ZWdyYS0+c2F0YV9yZWdzICsgb2Zmc2V0KTsgfQ0KPg0KPkknbSBub3QgdmVyeSBmb25k IG9mIHRoZXNlIF91cGRhdGUgZnVuY3Rpb25zLiBJIHRoaW5rIGl0IGlzIGNsZWFyZXIgdG8ganVz dCB3cml0ZQ0KPml0IG91dCBhdCB0aGUgY2FsbHNpdGUsIGVzcGVjaWFsbHkgc2luY2UgdGhpcyBp cyB1c2VkIG9ubHkgZm91ciB0aW1lcy4NCj4NCg0KT2sgd2lsbCByZW1vdmUgdGhlbS4NCg0KPj4g Kw0KPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCB0ZWdyYV9haGNpX3NjZmdfd3JpdGVsKHN0cnVjdCB0 ZWdyYV9haGNpX3ByaXYgKnRlZ3JhLA0KPj4gKwkJCQkJICB1MzIgdmFsLCB1MzIgb2Zmc2V0KQ0K Pj4gK3sNCj4+ICsJd3JpdGVsKHZhbCwgdGVncmEtPnNhdGFfcmVncyArIFNDRkdfT0ZGU0VUICsg b2Zmc2V0KTsgfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCB0ZWdyYV9haGNpX3NjZmdf dXBkYXRlKHN0cnVjdCB0ZWdyYV9haGNpX3ByaXYgKnRlZ3JhLA0KPj4gKwkJCQkJICB1MzIgdmFs LCB1MzIgbWFzaywgdTMyIG9mZnNldCkgew0KPj4gKwl1MzIgdXZhbDsNCj4+ICsNCj4+ICsJdXZh bCA9IHJlYWRsKHRlZ3JhLT5zYXRhX3JlZ3MgKyBTQ0ZHX09GRlNFVCArIG9mZnNldCk7DQo+PiAr CXV2YWwgPSAodXZhbCAmIH5tYXNrKSB8ICh2YWwgJiBtYXNrKTsNCj4+ICsJd3JpdGVsKHV2YWws IHRlZ3JhLT5zYXRhX3JlZ3MgKyBTQ0ZHX09GRlNFVCArIG9mZnNldCk7IH0NCj4+ICsNCj4+ICtz dGF0aWMgaW5saW5lIHUzMiB0ZWdyYV9haGNpX2F1eF9yZWFkbChzdHJ1Y3QgdGVncmFfYWhjaV9w cml2ICp0ZWdyYSwNCj4+ICsJCQkJICAgICAgIHUzMiBvZmZzZXQpDQo+PiArew0KPj4gKwlyZXR1 cm4gcmVhZGwodGVncmEtPnNhdGFfYXV4X3JlZ3MgKyBvZmZzZXQpOyB9DQo+DQo+VGhpcyBpcyBu ZXZlciBjYWxsZWQuDQo+DQoNCldpbGwgcmVtb3ZlIGl0Lg0KDQo+PiArDQo+PiArc3RhdGljIGlu bGluZSB2b2lkIHRlZ3JhX2FoY2lfYXV4X3VwZGF0ZShzdHJ1Y3QgdGVncmFfYWhjaV9wcml2ICp0 ZWdyYSwNCj51MzIgdmFsLA0KPj4gKwkJCQkJIHUzMiBtYXNrLCB1MzIgb2Zmc2V0KQ0KPj4gK3sN Cj4+ICsJdTMyIHV2YWw7DQo+PiArDQo+PiArCXV2YWwgPSByZWFkbCh0ZWdyYS0+c2F0YV9hdXhf cmVncyArIG9mZnNldCk7DQo+PiArCXV2YWwgPSAodXZhbCAmIH5tYXNrKSB8ICh2YWwgJiBtYXNr KTsNCj4+ICsJd3JpdGVsKHV2YWwsIHRlZ3JhLT5zYXRhX2F1eF9yZWdzICsgb2Zmc2V0KTsgfQ0K Pg0KPlRoaXMgaXMgb25seSBjYWxsZWQgb25jZS4NCj4NCg0KV2lsbCByZW1vdmUgaXQuDQoNCg0K Pj4gKw0KPj4gK3N0YXRpYyBpbnQgdGVncmExMjRfYWhjaV9pbml0KHN0cnVjdCBhaGNpX2hvc3Rf cHJpdiAqaHByaXYpIHsNCj4+ICsJc3RydWN0IHRlZ3JhX2FoY2lfcHJpdiAqdGVncmEgPSBocHJp di0+cGxhdF9kYXRhOw0KPj4gKwlzdHJ1Y3Qgc2F0YV9wYWRfY2FsaWJyYXRpb24gY2FsaWI7DQo+ PiArCWludCByZXQ7DQo+PiArCXUzMiB2YWw7DQo+PiArCXUzMiBtYXNrOw0KPj4gKw0KPj4gKwkv KiBQYWQgY2FsaWJyYXRpb24gKi8NCj4+ICsJcmV0ID0gdGVncmFfZnVzZV9yZWFkbChGVVNFX1NB VEFfQ0FMSUIsICZ2YWwpOw0KPj4gKwlpZiAocmV0KQ0KPj4gKwkJcmV0dXJuIHJldDsNCj4+ICsN Cj4+ICsJY2FsaWIgPSB0ZWdyYTEyNF9wYWRfY2FsaWJyYXRpb25bdmFsICYgRlVTRV9TQVRBX0NB TElCX01BU0tdOw0KPj4gKw0KPj4gKwl0ZWdyYV9haGNpX3NjZmdfd3JpdGVsKHRlZ3JhLCBCSVQo MCksIFRfU0FUQTBfSU5ERVgpOw0KPj4gKw0KPj4gKwltYXNrID0gVF9TQVRBMF9DSFhfUEhZX0NU UkwxX0dFTjFfVFhfQU1QX01BU0sgfA0KPj4gKwkgICAgVF9TQVRBMF9DSFhfUEhZX0NUUkwxX0dF TjFfVFhfUEVBS19NQVNLOw0KPj4gKwl2YWwgPSAoY2FsaWIuZ2VuMV90eF9hbXAgPDwNCj5UX1NB VEEwX0NIWF9QSFlfQ1RSTDFfR0VOMV9UWF9BTVBfU0hJRlQpIHwNCj4+ICsJICAgIChjYWxpYi5n ZW4xX3R4X3BlYWsgPDwNCj5UX1NBVEEwX0NIWF9QSFlfQ1RSTDFfR0VOMV9UWF9QRUFLX1NISUZU KTsNCj4+ICsJdGVncmFfYWhjaV9zY2ZnX3VwZGF0ZSh0ZWdyYSwgdmFsLCBtYXNrLA0KPj4gK1Rf U0FUQTBfQ0hYX1BIWV9DVFJMMV9HRU4xKTsNCj4+ICsNCj4+ICsJbWFzayA9IFRfU0FUQTBfQ0hY X1BIWV9DVFJMMV9HRU4yX1RYX0FNUF9NQVNLIHwNCj4+ICsJICAgIFRfU0FUQTBfQ0hYX1BIWV9D VFJMMV9HRU4yX1RYX1BFQUtfTUFTSzsNCj4+ICsJdmFsID0gKGNhbGliLmdlbjJfdHhfYW1wIDw8 DQo+VF9TQVRBMF9DSFhfUEhZX0NUUkwxX0dFTjFfVFhfQU1QX1NISUZUKSB8DQo+PiArCSAgICAo Y2FsaWIuZ2VuMl90eF9wZWFrIDw8DQo+VF9TQVRBMF9DSFhfUEhZX0NUUkwxX0dFTjFfVFhfUEVB S19TSElGVCk7DQo+PiArCXRlZ3JhX2FoY2lfc2NmZ191cGRhdGUodGVncmEsIHZhbCwgbWFzaywN Cj4+ICtUX1NBVEEwX0NIWF9QSFlfQ1RSTDFfR0VOMik7DQo+PiArDQo+PiArCXRlZ3JhX2FoY2lf c2NmZ193cml0ZWwodGVncmEsDQo+PiArCQkJICAgICAgIFRfU0FUQTBfQ0hYX1BIWV9DVFJMMTFf R0VOMl9SWF9FUSwNCj4+ICsJCQkgICAgICAgVF9TQVRBMF9DSFhfUEhZX0NUUkwxMSk7DQo+PiAr CXRlZ3JhX2FoY2lfc2NmZ193cml0ZWwodGVncmEsDQo+PiArCQkJICAgICAgIFRfU0FUQTBfQ0hY X1BIWV9DVFJMMl9DRFJfQ05UTF9HRU4xLA0KPj4gKwkJCSAgICAgICBUX1NBVEEwX0NIWF9QSFlf Q1RSTDIpOw0KPj4gKw0KPj4gKwl0ZWdyYV9haGNpX3NjZmdfd3JpdGVsKHRlZ3JhLCAwLCBUX1NB VEEwX0lOREVYKTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRp YyBjb25zdCBzdHJ1Y3QgdGVncmFfYWhjaV9zb2MgdGVncmExMjRfYWhjaV9zb2NfZGF0YSA9IHsN Cj4+ICsJLnN1cHBseV9uYW1lcyA9IHRlZ3JhMTI0X3N1cHBseV9uYW1lcywNCj4+ICsJLm51bV9z dXBwbGllcyA9IEFSUkFZX1NJWkUodGVncmExMjRfc3VwcGx5X25hbWVzKSwNCj4+ICsJLm9wcyA9 IHsNCj4+ICsJCS5pbml0ID0gdGVncmExMjRfYWhjaV9pbml0LA0KPj4gKwkJfSwNCj4+ICt9Ow0K Pj4gKw0KPj4gK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB0ZWdyYTIxMF9zdXBwbHlfbmFtZXNb XSA9IHsNCj4+ICsJImR2ZGQtc2F0YS1wbGwiLA0KPj4gKwkiaHZkZC1zYXRhIiwNCj4+ICsJImww LWh2ZGRpby1zYXRhIiwNCj4+ICsJImwwLWR2ZGRpby1zYXRhIiwNCj4+ICsJImh2ZGQtcGV4LXBs bC1lIg0KPj4gK307DQo+DQo+UGVyaGFwcyB0aGUgIi1zYXRhLSIgc2hvdWxkIGJlIHJlbW92ZWQg ZnJvbSB0aGVzZSAtIEkgYmVsaWV2ZSB0aGUgc3VwcGx5DQo+bmFtZSBoZXJlIHNob3VsZCByZWZl ciB0byB0aGUgdXNhZ2Ugb2YgdGhlIHN1cHBsaWVkIHBvd2VyIHdpdGhpbiB0aGUgSVANCj5ibG9j ay4gVGhlIElQIGJsb2NrIGhlcmUgaXMgU0FUQSBzbyBpdCBpcyBjbGVhciB0aGF0IGl0IGlzIHVz ZWQgZm9yIHNvbWV0aGluZw0KPlNBVEEgcmVsYXRlZC4gSWYgc29tZW9uZSBpcyBiZXR0ZXIgaW5m b3JtZWQsIHBsZWFzZSBjb21tZW50Lg0KPg0KPkl0IGFsc28gbG9va3MgbGlrZSB0aGlzIGRvZXNu J3QgaW5jbHVkZSB0aGUgNVYgYW5kIDEyViBzdXBwbGllcyB3aGljaCBoYWQgdG8NCj5iZSBlbmFi bGVkIG9uIHRoZSBKZXRzb24gVEsxIHRvIGVuYWJsZSBwb3dlciBvdXRwdXQgdGhyb3VnaCB0aGUg TW9sZXgNCj5jb25uZWN0b3IgLSBkbyB5b3Uga25vdyBpZiB0aGUgSmV0c29uIFRYMSBubyBsb25n ZXIgbmVlZHMgc2ltaWxhciB0byBlbmFibGUNCj50aGUgU0FUQSBwb3dlciBjb25uZWN0b3I/DQo+ DQoNCldlIG5lZWQgdG8ga2VlcCByZWd1bGF0b3IgbmFtZSBtYXRjaGluZyB3aXRoIHBpbiBuYW1l LiBUaGUgcmVndWxhdG9yeSBmcmFtZXdvcmsgYW5kIHBvbGljeSBzdWdnZXN0cyB0aGF0IHJlZ3Vs YXRvciBuYW1lIHNob3VsZCBtYXRjaCB0aGUgcGluIG5hbWUuIFNvIEkgaGF2ZSBuYW1lZCBpdCBh Y2NvcmRpbmdseS4gIA0KVGhlIDVWIGFuZCAxMlYgZG9lcyBub3Qgc2VlbSB0byBiZSByZXF1aXJl ZCBmb3IgdHgxLiBJIHdpbGwgdGFrZSBhIGNsb3NlciBsb29rIGF0IGl0IGFuZCBpZiByZXF1aXJl ZCBJIHdpbGwgcHVzaCBhbm90aGVyIHBhdGNoIGZvciBpdC4NCg0KPj4gKw0KPj4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgdGVncmFfYWhjaV9zb2MgdGVncmEyMTBfYWhjaV9zb2NfZGF0YSA9IHsNCj4+ ICsJLnN1cHBseV9uYW1lcyA9IHRlZ3JhMjEwX3N1cHBseV9uYW1lcywNCj4+ICsJLm51bV9zdXBw bGllcyA9IEFSUkFZX1NJWkUodGVncmEyMTBfc3VwcGx5X25hbWVzKSwNCj4+ICB9Ow0KPj4NCj4+ ICBzdGF0aWMgaW50IHRlZ3JhX2FoY2lfcG93ZXJfb24oc3RydWN0IGFoY2lfaG9zdF9wcml2ICpo cHJpdikgQEANCj4+IC0xMTUsNyArMjk2LDcgQEAgc3RhdGljIGludCB0ZWdyYV9haGNpX3Bvd2Vy X29uKHN0cnVjdCBhaGNpX2hvc3RfcHJpdg0KPipocHJpdikNCj4+ICAJc3RydWN0IHRlZ3JhX2Fo Y2lfcHJpdiAqdGVncmEgPSBocHJpdi0+cGxhdF9kYXRhOw0KPj4gIAlpbnQgcmV0Ow0KPj4NCj4+ IC0JcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKEFSUkFZX1NJWkUodGVncmEtPnN1cHBsaWVz KSwNCj4+ICsJcmV0ID0gcmVndWxhdG9yX2J1bGtfZW5hYmxlKHRlZ3JhLT5zb2NfZGF0YS0+bnVt X3N1cHBsaWVzLA0KPj4gIAkJCQkgICAgdGVncmEtPnN1cHBsaWVzKTsNCj4+ICAJaWYgKHJldCkN Cj4+ICAJCXJldHVybiByZXQ7DQo+PiBAQCAtMTQ0LDggKzMyNSw3IEBAIHN0YXRpYyBpbnQgdGVn cmFfYWhjaV9wb3dlcl9vbihzdHJ1Y3QNCj5haGNpX2hvc3RfcHJpdiAqaHByaXYpDQo+PiAgCXRl Z3JhX3Bvd2VyZ2F0ZV9wb3dlcl9vZmYoVEVHUkFfUE9XRVJHQVRFX1NBVEEpOw0KPj4NCj4+ICBk aXNhYmxlX3JlZ3VsYXRvcnM6DQo+PiAtCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0la RSh0ZWdyYS0+c3VwcGxpZXMpLCB0ZWdyYS0NCj4+c3VwcGxpZXMpOw0KPj4gLQ0KPj4gKwlyZWd1 bGF0b3JfYnVsa19kaXNhYmxlKHRlZ3JhLT5zb2NfZGF0YS0+bnVtX3N1cHBsaWVzLA0KPj4gK3Rl Z3JhLT5zdXBwbGllcyk7DQo+PiAgCXJldHVybiByZXQ7DQo+PiAgfQ0KPj4NCj4+IEBAIC0xNjIs MTAxICszNDIsMTI0IEBAIHN0YXRpYyB2b2lkIHRlZ3JhX2FoY2lfcG93ZXJfb2ZmKHN0cnVjdA0K PmFoY2lfaG9zdF9wcml2ICpocHJpdikNCj4+ICAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHRlZ3Jh LT5zYXRhX2Nsayk7DQo+PiAgCXRlZ3JhX3Bvd2VyZ2F0ZV9wb3dlcl9vZmYoVEVHUkFfUE9XRVJH QVRFX1NBVEEpOw0KPj4NCj4+IC0JcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHRl Z3JhLT5zdXBwbGllcyksIHRlZ3JhLQ0KPj5zdXBwbGllcyk7DQo+PiArCXJlZ3VsYXRvcl9idWxr X2Rpc2FibGUodGVncmEtPnNvY19kYXRhLT5udW1fc3VwcGxpZXMsDQo+PiArdGVncmEtPnN1cHBs aWVzKTsNCj4+ICB9DQo+Pg0KPj4gIHN0YXRpYyBpbnQgdGVncmFfYWhjaV9jb250cm9sbGVyX2lu aXQoc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdikNCj4+IHsNCj4+ICAJc3RydWN0IHRlZ3Jh X2FoY2lfcHJpdiAqdGVncmEgPSBocHJpdi0+cGxhdF9kYXRhOw0KPj4gIAlpbnQgcmV0Ow0KPj4g LQl1bnNpZ25lZCBpbnQgdmFsOw0KPj4gLQlzdHJ1Y3Qgc2F0YV9wYWRfY2FsaWJyYXRpb24gY2Fs aWI7DQo+PiArCXUzMiB2YWw7DQo+PiArCXUzMiBtYXNrOw0KPj4NCj4+ICAJcmV0ID0gdGVncmFf YWhjaV9wb3dlcl9vbihocHJpdik7DQo+PiAtCWlmIChyZXQpIHsNCj4+IC0JCWRldl9lcnIoJnRl Z3JhLT5wZGV2LT5kZXYsDQo+PiAtCQkJImZhaWxlZCB0byBwb3dlciBvbiBBSENJIGNvbnRyb2xs ZXI6ICVkXG4iLCByZXQpOw0KPj4gLQkJcmV0dXJuIHJldDsNCj4+IC0JfQ0KPj4gLQ0KPj4gLQl2 YWwgPSByZWFkbCh0ZWdyYS0+c2F0YV9yZWdzICsgU0FUQV9DT05GSUdVUkFUSU9OXzApOw0KPj4g LQl2YWwgfD0gU0FUQV9DT05GSUdVUkFUSU9OX0VOX0ZQQ0k7DQo+PiAtCXdyaXRlbCh2YWwsIHRl Z3JhLT5zYXRhX3JlZ3MgKyBTQVRBX0NPTkZJR1VSQVRJT05fMCk7DQo+PiAtDQo+PiAtCS8qIFBh ZCBjYWxpYnJhdGlvbiAqLw0KPj4gLQ0KPj4gLQlyZXQgPSB0ZWdyYV9mdXNlX3JlYWRsKEZVU0Vf U0FUQV9DQUxJQiwgJnZhbCk7DQo+PiAtCWlmIChyZXQpIHsNCj4+IC0JCWRldl9lcnIoJnRlZ3Jh LT5wZGV2LT5kZXYsDQo+PiAtCQkJImZhaWxlZCB0byByZWFkIGNhbGlicmF0aW9uIGZ1c2U6ICVk XG4iLCByZXQpOw0KPj4gKwlpZiAocmV0KQ0KPj4gIAkJcmV0dXJuIHJldDsNCj4+IC0JfQ0KPj4g LQ0KPj4gLQljYWxpYiA9IHRlZ3JhMTI0X3BhZF9jYWxpYnJhdGlvblt2YWwgJiBGVVNFX1NBVEFf Q0FMSUJfTUFTS107DQo+PiAtDQo+PiAtCXdyaXRlbChCSVQoMCksIHRlZ3JhLT5zYXRhX3JlZ3Mg KyBTQ0ZHX09GRlNFVCArIFRfU0FUQTBfSU5ERVgpOw0KPj4gLQ0KPj4gLQl2YWwgPSByZWFkbCh0 ZWdyYS0+c2F0YV9yZWdzICsNCj4+IC0JCVNDRkdfT0ZGU0VUICsgVF9TQVRBMF9DSFhfUEhZX0NU UkwxX0dFTjEpOw0KPj4gLQl2YWwgJj0gflRfU0FUQTBfQ0hYX1BIWV9DVFJMMV9HRU4xX1RYX0FN UF9NQVNLOw0KPj4gLQl2YWwgJj0gflRfU0FUQTBfQ0hYX1BIWV9DVFJMMV9HRU4xX1RYX1BFQUtf TUFTSzsNCj4+IC0JdmFsIHw9IGNhbGliLmdlbjFfdHhfYW1wIDw8DQo+PiAtCQkJVF9TQVRBMF9D SFhfUEhZX0NUUkwxX0dFTjFfVFhfQU1QX1NISUZUOw0KPj4gLQl2YWwgfD0gY2FsaWIuZ2VuMV90 eF9wZWFrIDw8DQo+PiAtCQkJVF9TQVRBMF9DSFhfUEhZX0NUUkwxX0dFTjFfVFhfUEVBS19TSElG VDsNCj4+IC0Jd3JpdGVsKHZhbCwgdGVncmEtPnNhdGFfcmVncyArIFNDRkdfT0ZGU0VUICsNCj4+ IC0JCVRfU0FUQTBfQ0hYX1BIWV9DVFJMMV9HRU4xKTsNCj4+IC0NCj4+IC0JdmFsID0gcmVhZGwo dGVncmEtPnNhdGFfcmVncyArDQo+PiAtCQkJU0NGR19PRkZTRVQgKyBUX1NBVEEwX0NIWF9QSFlf Q1RSTDFfR0VOMik7DQo+PiAtCXZhbCAmPSB+VF9TQVRBMF9DSFhfUEhZX0NUUkwxX0dFTjJfVFhf QU1QX01BU0s7DQo+PiAtCXZhbCAmPSB+VF9TQVRBMF9DSFhfUEhZX0NUUkwxX0dFTjJfVFhfUEVB S19NQVNLOw0KPj4gLQl2YWwgfD0gY2FsaWIuZ2VuMl90eF9hbXAgPDwNCj4+IC0JCQlUX1NBVEEw X0NIWF9QSFlfQ1RSTDFfR0VOMV9UWF9BTVBfU0hJRlQ7DQo+PiAtCXZhbCB8PSBjYWxpYi5nZW4y X3R4X3BlYWsgPDwNCj4+IC0JCQlUX1NBVEEwX0NIWF9QSFlfQ1RSTDFfR0VOMV9UWF9QRUFLX1NI SUZUOw0KPj4gLQl3cml0ZWwodmFsLCB0ZWdyYS0+c2F0YV9yZWdzICsgU0NGR19PRkZTRVQgKw0K Pj4gLQkJVF9TQVRBMF9DSFhfUEhZX0NUUkwxX0dFTjIpOw0KPj4gLQ0KPj4gLQl3cml0ZWwoVF9T QVRBMF9DSFhfUEhZX0NUUkwxMV9HRU4yX1JYX0VRLA0KPj4gLQkJdGVncmEtPnNhdGFfcmVncyAr IFNDRkdfT0ZGU0VUICsNCj5UX1NBVEEwX0NIWF9QSFlfQ1RSTDExKTsNCj4+IC0Jd3JpdGVsKFRf U0FUQTBfQ0hYX1BIWV9DVFJMMl9DRFJfQ05UTF9HRU4xLA0KPj4gLQkJdGVncmEtPnNhdGFfcmVn cyArIFNDRkdfT0ZGU0VUICsNCj5UX1NBVEEwX0NIWF9QSFlfQ1RSTDIpOw0KPj4gLQ0KPj4gLQl3 cml0ZWwoMCwgdGVncmEtPnNhdGFfcmVncyArIFNDRkdfT0ZGU0VUICsgVF9TQVRBMF9JTkRFWCk7 DQo+PiAtDQo+PiAtCS8qIFByb2dyYW0gY29udHJvbGxlciBkZXZpY2UgSUQgKi8NCj4+DQo+PiAt CXZhbCA9IHJlYWRsKHRlZ3JhLT5zYXRhX3JlZ3MgKyBTQ0ZHX09GRlNFVCArIFRfU0FUQTBfQ0ZH X1NBVEEpOw0KPj4gLQl2YWwgfD0gVF9TQVRBMF9DRkdfU0FUQV9CQUNLRE9PUl9QUk9HX0lGX0VO Ow0KPj4gLQl3cml0ZWwodmFsLCB0ZWdyYS0+c2F0YV9yZWdzICsgU0NGR19PRkZTRVQgKyBUX1NB VEEwX0NGR19TQVRBKTsNCj4+IC0NCj4+IC0Jd3JpdGVsKDB4MDEwNjAxMDAsIHRlZ3JhLT5zYXRh X3JlZ3MgKyBTQ0ZHX09GRlNFVCArDQo+VF9TQVRBMF9CS0RPT1JfQ0MpOw0KPj4gLQ0KPj4gLQl2 YWwgPSByZWFkbCh0ZWdyYS0+c2F0YV9yZWdzICsgU0NGR19PRkZTRVQgKyBUX1NBVEEwX0NGR19T QVRBKTsNCj4+IC0JdmFsICY9IH5UX1NBVEEwX0NGR19TQVRBX0JBQ0tET09SX1BST0dfSUZfRU47 DQo+PiAtCXdyaXRlbCh2YWwsIHRlZ3JhLT5zYXRhX3JlZ3MgKyBTQ0ZHX09GRlNFVCArIFRfU0FU QTBfQ0ZHX1NBVEEpOw0KPj4gLQ0KPj4gLQkvKiBFbmFibGUgSU8gJiBtZW1vcnkgYWNjZXNzLCBi dXMgbWFzdGVyIG1vZGUgKi8NCj4+IC0NCj4+IC0JdmFsID0gcmVhZGwodGVncmEtPnNhdGFfcmVn cyArIFNDRkdfT0ZGU0VUICsgVF9TQVRBMF9DRkdfMSk7DQo+PiAtCXZhbCB8PSBUX1NBVEEwX0NG R18xX0lPX1NQQUNFIHwNCj5UX1NBVEEwX0NGR18xX01FTU9SWV9TUEFDRSB8DQo+PiAtCQlUX1NB VEEwX0NGR18xX0JVU19NQVNURVIgfCBUX1NBVEEwX0NGR18xX1NFUlI7DQo+PiAtCXdyaXRlbCh2 YWwsIHRlZ3JhLT5zYXRhX3JlZ3MgKyBTQ0ZHX09GRlNFVCArIFRfU0FUQTBfQ0ZHXzEpOw0KPj4g LQ0KPj4gLQkvKiBQcm9ncmFtIFNBVEEgTU1JTyAqLw0KPj4gLQ0KPj4gLQl3cml0ZWwoMHgxMDAw MCA8PCBTQVRBX0ZQQ0lfQkFSNV9TVEFSVF9TSElGVCwNCj4+IC0JICAgICAgIHRlZ3JhLT5zYXRh X3JlZ3MgKyBTQVRBX0ZQQ0lfQkFSNSk7DQo+PiAtDQo+PiAtCXdyaXRlbCgweDA4MDAwIDw8IFRf U0FUQTBfQ0ZHXzlfQkFTRV9BRERSRVNTX1NISUZULA0KPj4gLQkgICAgICAgdGVncmEtPnNhdGFf cmVncyArIFNDRkdfT0ZGU0VUICsgVF9TQVRBMF9DRkdfOSk7DQo+PiAtDQo+PiAtCS8qIFVubWFz ayBTQVRBIGludGVycnVwdHMgKi8NCj4+IC0NCj4+IC0JdmFsID0gcmVhZGwodGVncmEtPnNhdGFf cmVncyArIFNBVEFfSU5UUl9NQVNLKTsNCj4+IC0JdmFsIHw9IFNBVEFfSU5UUl9NQVNLX0lQX0lO VF9NQVNLOw0KPj4gLQl3cml0ZWwodmFsLCB0ZWdyYS0+c2F0YV9yZWdzICsgU0FUQV9JTlRSX01B U0spOw0KPj4gKwkvKg0KPj4gKwkgKiBQcm9ncmFtIHRoZSBmb2xsb3dpbmcgIFNBVEEgSVBGUyBy ZWdpc3RlcnMNCj4+ICsJICogdG8gYWxsb3cgU1cgYWNjZXNzZXMgdG8gU0FUQSdzIE1NSU8gUmVn aXN0ZXINCj4+ICsJICovDQo+PiArCW1hc2sgPSBGUENJX0JBUjVfU1RBUlRfTUFTSyB8IEZQQ0lf QkFSNV9BQ0NFU1NfVFlQRTsNCj4+ICsJdmFsID0gRlBDSV9CQVI1X1NUQVJUIHwgRlBDSV9CQVI1 X0FDQ0VTU19UWVBFOw0KPj4gKwl0ZWdyYV9haGNpX3NhdGFfdXBkYXRlKHRlZ3JhLCB2YWwsIG1h c2ssIFNBVEFfRlBDSV9CQVI1XzApOw0KPj4gKw0KPj4gKwkvKiBQcm9ncmFtIHRoZSBmb2xsb3dp bmcgU0FUQSBJUEZTIHJlZ2lzdGVyIHRvIGVuYWJsZSB0aGUgU0FUQSAqLw0KPj4gKwl2YWwgPSBT QVRBX0NPTkZJR1VSQVRJT05fMF9FTl9GUENJOw0KPj4gKwl0ZWdyYV9haGNpX3NhdGFfdXBkYXRl KHRlZ3JhLCB2YWwsIHZhbCwgU0FUQV9DT05GSUdVUkFUSU9OXzApOw0KPj4gKw0KPj4gKwkvKiBF bGVjdHJpY2FsIHNldHRpbmdzIGZvciBiZXR0ZXIgbGluayBzdGFiaWxpdHkgKi8NCj4+ICsJdGVn cmFfYWhjaV9zY2ZnX3dyaXRlbCh0ZWdyYSwNCj4+ICsNCj5UX1NBVEEwX0NIWF9QSFlfQ1RSTDE3 XzBfUlhfRVFfQ1RSTF9MX0dFTjEsDQo+PiArCQkJICAgICAgIFRfU0FUQTBfQ0hYX1BIWV9DVFJM MTdfMCk7DQo+PiArCXRlZ3JhX2FoY2lfc2NmZ193cml0ZWwodGVncmEsDQo+PiArDQo+VF9TQVRB MF9DSFhfUEhZX0NUUkwxOF8wX1JYX0VRX0NUUkxfTF9HRU4yLA0KPj4gKwkJCSAgICAgICBUX1NB VEEwX0NIWF9QSFlfQ1RSTDE4XzApOw0KPj4gKwl0ZWdyYV9haGNpX3NjZmdfd3JpdGVsKHRlZ3Jh LA0KPj4gKw0KPlRfU0FUQTBfQ0hYX1BIWV9DVFJMMjBfMF9SWF9FUV9DVFJMX0hfR0VOMSwNCj4+ ICsJCQkgICAgICAgVF9TQVRBMF9DSFhfUEhZX0NUUkwyMF8wKTsNCj4+ICsJdGVncmFfYWhjaV9z Y2ZnX3dyaXRlbCh0ZWdyYSwNCj4+ICsNCj5UX1NBVEEwX0NIWF9QSFlfQ1RSTDIxXzBfUlhfRVFf Q1RSTF9IX0dFTjIsDQo+PiArCQkJICAgICAgIFRfU0FUQTBfQ0hYX1BIWV9DVFJMMjFfMCk7DQo+ PiArDQo+PiArCS8qIEZvciBTUVVFTENIIEZpbHRlciAmIEdlbjMgZHJpdmUgZ2V0dGluZyBkZXRl Y3RlZCBhcyBHZW4xIGRyaXZlDQo+Ki8NCj4+ICsNCj4+ICsJbWFzayA9IFRfU0FUQV9DRkdfUEhZ XzBfTUFTS19TUVVFTENIIHwNCj4+ICsJICAgIFRfU0FUQV9DRkdfUEhZXzBfVVNFXzdCSVRfQUxJ R05fREVUX0ZPUl9TUEQ7DQo+PiArCXZhbCA9IFRfU0FUQV9DRkdfUEhZXzBfTUFTS19TUVVFTENI Ow0KPj4gKwl2YWwgJj0gflRfU0FUQV9DRkdfUEhZXzBfVVNFXzdCSVRfQUxJR05fREVUX0ZPUl9T UEQ7DQo+PiArCXRlZ3JhX2FoY2lfc2NmZ191cGRhdGUodGVncmEsIHZhbCwgbWFzaywgVF9TQVRB X0NGR19QSFlfMCk7DQo+PiArDQo+PiArCW1hc2sgPSAoVF9TQVRBMF9OVk9PQl9DT01NQV9DTlRf TUFTSyB8DQo+PiArCQlUX1NBVEEwX05WT09CX1NRVUVMQ0hfRklMVEVSX0xFTkdUSF9NQVNLIHwN Cj4+ICsJCVRfU0FUQTBfTlZPT0JfU1FVRUxDSF9GSUxURVJfTU9ERV9NQVNLKTsNCj4+ICsJdmFs ID0gKFRfU0FUQTBfTlZPT0JfQ09NTUFfQ05UIHwNCj4+ICsJICAgICAgIFRfU0FUQTBfTlZPT0Jf U1FVRUxDSF9GSUxURVJfTEVOR1RIIHwNCj4+ICsJICAgICAgIFRfU0FUQTBfTlZPT0JfU1FVRUxD SF9GSUxURVJfTU9ERSk7DQo+PiArCXRlZ3JhX2FoY2lfc2NmZ191cGRhdGUodGVncmEsIHZhbCwg bWFzaywgVF9TQVRBMF9OVk9PQik7DQo+PiArDQo+PiArCS8qDQo+PiArCSAqIENoYW5nZSBDRkcy TlZPT0JfMl9DT01XQUtFX0lETEVfQ05UX0xPVyBmcm9tIDgzLjMgbnMNCj50byA1OC44bnMNCj4+ ICsJICovDQo+PiArCW1hc2sgPQ0KPlRfU0FUQTBfQ0ZHMk5WT09CXzJfQ09NV0FLRV9JRExFX0NO VF9MT1dfTUFTSzsNCj4+ICsJdmFsID0gVF9TQVRBMF9DRkcyTlZPT0JfMl9DT01XQUtFX0lETEVf Q05UX0xPVzsNCj4+ICsJdGVncmFfYWhjaV9zY2ZnX3VwZGF0ZSh0ZWdyYSwgdmFsLCBtYXNrLCBU X1NBVEEwX0NGRzJOVk9PQl8yKTsNCj4+ICsNCj4+ICsJaWYgKHRlZ3JhLT5zb2NfZGF0YS0+b3Bz LmluaXQpDQo+PiArCQl0ZWdyYS0+c29jX2RhdGEtPm9wcy5pbml0KGhwcml2KTsNCj4+ICsNCj4+ ICsJLyoNCj4+ICsJICogUHJvZ3JhbSB0aGUgZm9sbG93aW5nIFNBVEEgY29uZmlndXJhdGlvbiBy ZWdpc3RlcnMNCj4+ICsJICogdG8gaW5pdGlhbGl6ZSBTQVRBDQo+PiArCSAqLw0KPj4gKwl2YWwg PSAoVF9TQVRBX0NGR18xX0lPX1NQQUNFIHwgVF9TQVRBX0NGR18xX01FTU9SWV9TUEFDRQ0KPnwN Cj4+ICsJICAgICAgIFRfU0FUQV9DRkdfMV9CVVNfTUFTVEVSIHwgVF9TQVRBX0NGR18xX1NFUlIp Ow0KPj4gKwl0ZWdyYV9haGNpX3NjZmdfdXBkYXRlKHRlZ3JhLCB2YWwsIHZhbCwgVF9TQVRBX0NG R18xKTsNCj4+ICsJdGVncmFfYWhjaV9zY2ZnX3dyaXRlbCh0ZWdyYSwgVF9TQVRBX0NGR185X0JB U0VfQUREUkVTUywNCj4+ICtUX1NBVEFfQ0ZHXzkpOw0KPj4gKw0KPj4gKwkvKiBQcm9ncmFtIENs YXNzIENvZGUgYW5kIFByb2dyYW1taW5nIGludGVyZmFjZSBmb3IgU0FUQSAqLw0KPj4gKwl2YWwg PSBUX1NBVEFfQ0ZHX1NBVEFfQkFDS0RPT1JfUFJPR19JRl9FTjsNCj4+ICsJdGVncmFfYWhjaV9z Y2ZnX3VwZGF0ZSh0ZWdyYSwgdmFsLCB2YWwsIFRfU0FUQV9DRkdfU0FUQSk7DQo+PiArDQo+PiAr CW1hc2sgPSBUX1NBVEFfQktET09SX0NDX0NMQVNTX0NPREVfTUFTSyB8DQo+VF9TQVRBX0JLRE9P Ul9DQ19QUk9HX0lGX01BU0s7DQo+PiArCXZhbCA9IFRfU0FUQV9CS0RPT1JfQ0NfQ0xBU1NfQ09E RSB8DQo+VF9TQVRBX0JLRE9PUl9DQ19QUk9HX0lGOw0KPj4gKwl0ZWdyYV9haGNpX3NjZmdfdXBk YXRlKHRlZ3JhLCB2YWwsIG1hc2ssIFRfU0FUQV9CS0RPT1JfQ0MpOw0KPj4gKw0KPj4gKwl0ZWdy YV9haGNpX3NjZmdfdXBkYXRlKHRlZ3JhLCAwLA0KPlRfU0FUQV9DRkdfU0FUQV9CQUNLRE9PUl9Q Uk9HX0lGX0VOLA0KPj4gKwkJCSAgICAgICBUX1NBVEFfQ0ZHX1NBVEEpOw0KPj4gKw0KPj4gKwkv KiBFbmFibGluZyBMUE0gY2FwYWJpbGl0aWVzIHRocm91Z2ggQmFja2Rvb3IgUHJvZ3JhbW1pbmcg Ki8NCj4+ICsJdmFsID0gKFRfU0FUQTBfQUhDSV9IQkFfQ0FQX0JLRFJfUEFSVElBTF9TVF9DQVAg fA0KPj4gKwkgICAgICAgVF9TQVRBMF9BSENJX0hCQV9DQVBfQktEUl9TTFVNQkVSX1NUX0NBUCB8 DQo+PiArCSAgICAgICBUX1NBVEEwX0FIQ0lfSEJBX0NBUF9CS0RSX1NBTFAgfA0KPj4gKwkgICAg ICAgVF9TQVRBMF9BSENJX0hCQV9DQVBfQktEUl9TVVBQX1BNKTsNCj4+ICsJdGVncmFfYWhjaV9z Y2ZnX3VwZGF0ZSh0ZWdyYSwgdmFsLCB2YWwsDQo+VF9TQVRBMF9BSENJX0hCQV9DQVBfQktEUik7 DQo+PiArDQo+PiArCS8qIFNBVEEgU2Vjb25kIExldmVsIENsb2NrIEdhdGluZyBjb25maWd1cmF0 aW9uDQo+PiArCSAqIEVuYWJsaW5nIEdhdGluZyBvZiBUeC9SeCBjbG9ja3MgYW5kIGRyaXZpbmcg UGFkIElERFEgYW5kIExhbmUNCj4+ICsJICogSUREUSBTaWduYWxzDQo+PiArCSAqLw0KPj4gKwlt YXNrID0gVF9TQVRBMF9DRkdfMzVfSURQX0lOREVYX01BU0s7DQo+PiArCXZhbCA9IFRfU0FUQTBf Q0ZHXzM1X0lEUF9JTkRFWDsNCj4+ICsJdGVncmFfYWhjaV9zY2ZnX3VwZGF0ZSh0ZWdyYSwgdmFs LCBtYXNrLCBUX1NBVEEwX0NGR18zNSk7DQo+PiArCXRlZ3JhX2FoY2lfc2NmZ193cml0ZWwodGVn cmEsIFRfU0FUQTBfQUhDSV9JRFAxX0RBVEEsDQo+PiArCQkJICAgICAgIFRfU0FUQTBfQUhDSV9J RFAxKTsNCj4+ICsJdmFsID0gKFRfU0FUQTBfQ0ZHX1BIWV8xX1BBRFNfSUREUV9FTiB8DQo+PiAr CSAgICAgICBUX1NBVEEwX0NGR19QSFlfMV9QQURfUExMX0lERFFfRU4pOw0KPj4gKwl0ZWdyYV9h aGNpX3NjZmdfdXBkYXRlKHRlZ3JhLCB2YWwsIHZhbCwgVF9TQVRBMF9DRkdfUEhZXzEpOw0KPj4g Kw0KPj4gKwkvKg0KPj4gKwkgKiAgSW5kaWNhdGUgU2F0YSBvbmx5IGhhcyB0aGUgY2FwYWJpbGl0 eSB0byBlbnRlciBEZXZTbGVlcA0KPj4gKwkgKiBmcm9tIHNsdW1iZXIgbGluay4NCj4+ICsJICov DQo+PiArCXRlZ3JhX2FoY2lfYXV4X3VwZGF0ZSh0ZWdyYSwgREVTT19TVVBQT1JULCBERVNPX1NV UFBPUlQsDQo+PiArCQkJICAgICAgU0FUQV9BVVhfTUlTQ19DTlRMXzFfMCk7DQo+PiArCS8qIEVu YWJsaW5nIElQRlMgQ2xvY2sgR2F0aW5nICovDQo+PiArCXRlZ3JhX2FoY2lfc2F0YV91cGRhdGUo dGVncmEsIDAsDQo+U0FUQV9DT05GSUdVUkFUSU9OX0NMS19PVkVSUklERSwNCj4+ICsJCQkgICAg ICAgU0FUQV9DT05GSUdVUkFUSU9OXzApOw0KPj4gKw0KPj4gKwl0ZWdyYV9haGNpX3NhdGFfdXBk YXRlKHRlZ3JhLCBJUF9JTlRfTUFTSywgSVBfSU5UX01BU0ssDQo+PiArCQkJICAgICAgIFNBVEFf SU5UUl9NQVNLXzApOw0KPj4NCj4+ICAJcmV0dXJuIDA7DQo+PiAgfQ0KPj4gQEAgLTI3NCwxOSAr NDc3LDI0IEBAIHN0YXRpYyB2b2lkIHRlZ3JhX2FoY2lfaG9zdF9zdG9wKHN0cnVjdA0KPmF0YV9o b3N0DQo+PiAqaG9zdCkgIH0NCj4+DQo+PiAgc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRp b25zIGFoY2lfdGVncmFfcG9ydF9vcHMgPSB7DQo+PiAtCS5pbmhlcml0cwk9ICZhaGNpX29wcywN Cj4+IC0JLmhvc3Rfc3RvcAk9IHRlZ3JhX2FoY2lfaG9zdF9zdG9wLA0KPj4gKwkuaW5oZXJpdHMg PSAmYWhjaV9vcHMsDQo+PiArCS5ob3N0X3N0b3AgPSB0ZWdyYV9haGNpX2hvc3Rfc3RvcCwNCj4+ ICB9Ow0KPj4NCj4+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gYWhjaV90ZWdy YV9wb3J0X2luZm8gPSB7DQo+PiAtCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLA0KPj4gLQku cGlvX21hc2sJPSBBVEFfUElPNCwNCj4+IC0JLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwNCj4+IC0J LnBvcnRfb3BzCT0gJmFoY2lfdGVncmFfcG9ydF9vcHMsDQo+PiArCS5mbGFncyA9IEFIQ0lfRkxB R19DT01NT04sDQo+PiArCS5waW9fbWFzayA9IEFUQV9QSU80LA0KPj4gKwkudWRtYV9tYXNrID0g QVRBX1VETUE2LA0KPj4gKwkucG9ydF9vcHMgPSAmYWhjaV90ZWdyYV9wb3J0X29wcywNCj4+ICB9 Ow0KPg0KPlBsZWFzZSBrZWVwIHRoZSBvcmlnaW5hbCBzdHlsZSBhcyB0byBrZWVwIHRoZSBwYXRj aCBhcyBzbWFsbCBhcyBwb3NzaWJsZS4NCj4NCg0KT2suDQoNCj4+DQo+PiAgc3RhdGljIGNvbnN0 IHN0cnVjdCBvZl9kZXZpY2VfaWQgdGVncmFfYWhjaV9vZl9tYXRjaFtdID0gew0KPj4gLQl7IC5j b21wYXRpYmxlID0gIm52aWRpYSx0ZWdyYTEyNC1haGNpIiB9LA0KPj4gKwl7DQo+PiArCSAuY29t cGF0aWJsZSA9ICJudmlkaWEsdGVncmExMjQtYWhjaSIsDQo+PiArCSAuZGF0YSA9ICZ0ZWdyYTEy NF9haGNpX3NvY19kYXRhfSwNCj4+ICsJew0KPj4gKwkgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRl Z3JhMjEwLWFoY2kiLA0KPj4gKwkgLmRhdGEgPSAmdGVncmEyMTBfYWhjaV9zb2NfZGF0YX0sDQo+ DQo+UGxlYXNlIHdyaXRlIHRoZXNlIGxpa2UNCj4NCj57DQo+CS5jb21wYXRpYmxlID0gIm52aWRp YSx0ZWdyYTEyNC1haGNpIiwNCj4JLmRhdGEgPSAmdGVncmExMjRfYWhjaV9zb2NfZGF0YSwNCj59 LA0KPg0KDQpPay4NCg0KPj4gIAl7fQ0KPj4gIH07DQo+PiAgTU9EVUxFX0RFVklDRV9UQUJMRShv ZiwgdGVncmFfYWhjaV9vZl9tYXRjaCk7IEBAIC0zMDEsNiArNTA5LDcNCj5AQA0KPj4gc3RhdGlj IGludCB0ZWdyYV9haGNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQo+PiAg CXN0cnVjdCB0ZWdyYV9haGNpX3ByaXYgKnRlZ3JhOw0KPj4gIAlzdHJ1Y3QgcmVzb3VyY2UgKnJl czsNCj4+ICAJaW50IHJldDsNCj4+ICsJdW5zaWduZWQgaW50IGk7DQo+Pg0KPj4gIAlocHJpdiA9 IGFoY2lfcGxhdGZvcm1fZ2V0X3Jlc291cmNlcyhwZGV2KTsNCj4+ICAJaWYgKElTX0VSUihocHJp dikpDQo+PiBAQCAtMzExLDEzICs1MjAsMTggQEAgc3RhdGljIGludCB0ZWdyYV9haGNpX3Byb2Jl KHN0cnVjdA0KPnBsYXRmb3JtX2RldmljZSAqcGRldikNCj4+ICAJCXJldHVybiAtRU5PTUVNOw0K Pj4NCj4+ICAJaHByaXYtPnBsYXRfZGF0YSA9IHRlZ3JhOw0KPj4gLQ0KPj4gIAl0ZWdyYS0+cGRl diA9IHBkZXY7DQo+PiArCXRlZ3JhLT5zb2NfZGF0YSA9DQo+PiArCSAgICAoc3RydWN0IHRlZ3Jh X2FoY2lfc29jICopb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYpOw0KPj4NCj4+ ICAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsN Cj4+ICAJdGVncmEtPnNhdGFfcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2 LCByZXMpOw0KPj4gIAlpZiAoSVNfRVJSKHRlZ3JhLT5zYXRhX3JlZ3MpKQ0KPj4gIAkJcmV0dXJu IFBUUl9FUlIodGVncmEtPnNhdGFfcmVncyk7DQo+PiArCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNv dXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMik7DQo+PiArCXRlZ3JhLT5zYXRhX2F1eF9yZWdz ID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7DQo+PiArCWlmIChJU19F UlIodGVncmEtPnNhdGFfYXV4X3JlZ3MpKQ0KPj4gKwkJcmV0dXJuIFBUUl9FUlIodGVncmEtPnNh dGFfYXV4X3JlZ3MpOw0KPg0KPlBsZWFzZSBhZGQgdGhpcyByZWdpc3RlciByYW5nZSBhbHNvIHRv IHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5nIGRvY3VtZW50YXRpb24uDQo+QWxzbywgcGxlYXNlIHBy b3ZpZGUgYSBwYXRjaCB0byBlbmFibGUgdGhlIFNBVEEgY29udHJvbGxlciBvbiBhIFRlZ3JhMjEw DQo+Ym9hcmQgLSBwcmVmZXJhYmx5IHRoZSBKZXRzb24gVFgxIChvciBpbnRlcm5hbA0KPnZhcmlh bnQpIHNvIHRoYXQgaXQgaXMgZWFzeSB0byB0ZXN0Lg0KPg0KDQpPay4gDQoNCj4+DQo+PiAgCXRl Z3JhLT5zYXRhX3JzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXQoJnBkZXYtPmRldiwgInNhdGEi KTsNCj4+ICAJaWYgKElTX0VSUih0ZWdyYS0+c2F0YV9yc3QpKSB7DQo+PiBAQCAtMzQzLDEzICs1 NTcsMTcgQEAgc3RhdGljIGludCB0ZWdyYV9haGNpX3Byb2JlKHN0cnVjdA0KPnBsYXRmb3JtX2Rl dmljZSAqcGRldikNCj4+ICAJCXJldHVybiBQVFJfRVJSKHRlZ3JhLT5zYXRhX2Nsayk7DQo+PiAg CX0NCj4+DQo+PiAtCXRlZ3JhLT5zdXBwbGllc1swXS5zdXBwbHkgPSAiYXZkZCI7DQo+PiAtCXRl Z3JhLT5zdXBwbGllc1sxXS5zdXBwbHkgPSAiaHZkZCI7DQo+PiAtCXRlZ3JhLT5zdXBwbGllc1sy XS5zdXBwbHkgPSAidmRkaW8iOw0KPj4gLQl0ZWdyYS0+c3VwcGxpZXNbM10uc3VwcGx5ID0gInRh cmdldC01diI7DQo+PiAtCXRlZ3JhLT5zdXBwbGllc1s0XS5zdXBwbHkgPSAidGFyZ2V0LTEydiI7 DQo+PiArCXRlZ3JhLT5zdXBwbGllcyA9IGRldm1fa2NhbGxvYygmcGRldi0+ZGV2LA0KPj4gKwkJ CQkgICAgICAgdGVncmEtPnNvY19kYXRhLT5udW1fc3VwcGxpZXMsDQo+PiArCQkJCSAgICAgICBz aXplb2YoKnRlZ3JhLT5zdXBwbGllcyksIEdGUF9LRVJORUwpOw0KPj4gKwlpZiAoIXRlZ3JhLT5z dXBwbGllcykNCj4+ICsJCXJldHVybiAtRU5PTUVNOw0KPj4gKw0KPj4gKwlmb3IgKGkgPSAwOyBp IDwgdGVncmEtPnNvY19kYXRhLT5udW1fc3VwcGxpZXM7IGkrKykNCj4+ICsJCXRlZ3JhLT5zdXBw bGllc1tpXS5zdXBwbHkgPSB0ZWdyYS0+c29jX2RhdGEtDQo+PnN1cHBseV9uYW1lc1tpXTsNCj4+ DQo+PiAtCXJldCA9IGRldm1fcmVndWxhdG9yX2J1bGtfZ2V0KCZwZGV2LT5kZXYsIEFSUkFZX1NJ WkUodGVncmEtDQo+PnN1cHBsaWVzKSwNCj4+ICsJcmV0ID0gZGV2bV9yZWd1bGF0b3JfYnVsa19n ZXQoJnBkZXYtPmRldiwNCj4+ICsJCQkJICAgICAgdGVncmEtPnNvY19kYXRhLT5udW1fc3VwcGxp ZXMsDQo+PiAgCQkJCSAgICAgIHRlZ3JhLT5zdXBwbGllcyk7DQo+PiAgCWlmIChyZXQpIHsNCj4+ ICAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgcmVndWxhdG9yc1xuIik7IEBA IC0NCj4zNzcsMTMNCj4+ICs1OTUsMTMgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIg dGVncmFfYWhjaV9kcml2ZXIgPSB7DQo+PiAgCS5wcm9iZSA9IHRlZ3JhX2FoY2lfcHJvYmUsDQo+ PiAgCS5yZW1vdmUgPSBhdGFfcGxhdGZvcm1fcmVtb3ZlX29uZSwNCj4+ICAJLmRyaXZlciA9IHsN Cj4+IC0JCS5uYW1lID0gRFJWX05BTUUsDQo+PiAtCQkub2ZfbWF0Y2hfdGFibGUgPSB0ZWdyYV9h aGNpX29mX21hdGNoLA0KPj4gLQl9LA0KPj4gKwkJICAgLm5hbWUgPSBEUlZfTkFNRSwNCj4+ICsJ CSAgIC5vZl9tYXRjaF90YWJsZSA9IHRlZ3JhX2FoY2lfb2ZfbWF0Y2gsDQo+PiArCQkgICB9LA0K Pg0KPlBsZWFzZSBrZWVwIHRoZSBzdHlsZSB1bmNoYW5nZWQgaGVyZSBhcyB3ZWxsLg0KPg0KDQpP ay4NCg0KDQo+PiAgCS8qIExQMCBzdXNwZW5kIHN1cHBvcnQgbm90IGltcGxlbWVudGVkICovICB9 Ow0KPj4gbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih0ZWdyYV9haGNpX2RyaXZlcik7DQo+Pg0KPj4g IE1PRFVMRV9BVVRIT1IoIk1pa2tvIFBlcnR0dW5lbiA8bXBlcnR0dW5lbkBudmlkaWEuY29tPiIp Ow0KPj4gLU1PRFVMRV9ERVNDUklQVElPTigiVGVncmExMjQgQUhDSSBTQVRBIGRyaXZlciIpOw0K Pj4gK01PRFVMRV9ERVNDUklQVElPTigiVGVncmEgQUhDSSBTQVRBIGRyaXZlciIpOw0KPg0KPkF3 ZXNvbWUhDQo+DQo+PiAgTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KPj4NCj4+DQo+DQo+VGhh bmtzLA0KPk1pa2tvDQo=