From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Rogozhkin, Dmitry V" Subject: Re: [RFC 04/10] drm/i915: Expose a PMU interface for perf queries Date: Sat, 12 Aug 2017 02:15:13 +0000 Message-ID: <1502475190.6212.25.camel@intel.com> References: <20170802123249.14194-1-tvrtko.ursulin@linux.intel.com> <20170802123249.14194-5-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id EF0DC6E2D8 for ; Sat, 12 Aug 2017 02:15:14 +0000 (UTC) In-Reply-To: Content-Language: en-US Content-ID: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "peterz@infradead.org" , "tvrtko.ursulin@linux.intel.com" Cc: "Intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org SGksDQoNClBldGVyLCB1c2luZyBhIGNoYW5jZSBJIHdvdWxkIGxpa2UgdG8gcmVtaW5kIHlvdSB0 aGF0IHdlIG5lZWQgeW91ciBoZWxwDQpjbGFyaWZ5aW5nIHdoZXRoZXIgd2UgdXNlIHBlcm0gQVBJ IGNvcnJlY3RseS4gDQoNCkkgYW0gdHJ5aW5nIGk5MTUgUE1VIGFzIGl0IGlzIGltcGxlbWVudGVk IGluIHRoZXNlIFJGQyBwYXRjaGVzIGFuZCB3b3VsZA0KbGlrZSB0byBzaGFyZSBteSBvYnNlcnZh dGlvbnMuIEkgZGlkIG5vdCB0cnkgaXQgaW4gYWxsIHBvc3NpYmxlIHdheSB5ZXQsDQpidXQgc3Rp bGwgdGhpbmsgdGhhdCB0aGUgZm9sbG93aW5nIHdvcnRoIG1lbnRpb25pbmcuDQoNCidwZXJmJyBz ZWVzIGV2ZW50cyBleHBvcnRlZCB2aWEgc3lzZmMuIEZvciBleGFtcGxlLA0KJCBwZXJmIGxpc3QN CiAgaTkxNS9hY3R1YWwtZnJlcXVlbmN5LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0tl cm5lbCBQTVUgZXZlbnRdDQogIGk5MTUvYmNzMC1idXN5LyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFtLZXJuZWwgUE1VIGV2ZW50XQ0KICBpOTE1L2JjczAtcXVldWVkLyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbS2VybmVsIFBNVSBldmVudF0NCiAgaTkxNS9i Y3MwLXNlbWEvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0tlcm5lbCBQTVUg ZXZlbnRdDQogIGk5MTUvYmNzMC13YWl0LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFtLZXJuZWwgUE1VIGV2ZW50XQ0KICBpOTE1L2VuZXJneS8gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBbS2VybmVsIFBNVSBldmVudF0NCiAgaTkxNS9pbnRlcnJ1cHRz LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0tlcm5lbCBQTVUgZXZlbnRdDQog IGk5MTUvcmM2LXJlc2lkZW5jeS8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtLZXJu ZWwgUE1VIGV2ZW50XQ0KICBpOTE1L3JjNnAtcmVzaWRlbmN5LyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBbS2VybmVsIFBNVSBldmVudF0NCiAgaTkxNS9yYzZwcC1yZXNpZGVuY3kvICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgW0tlcm5lbCBQTVUgZXZlbnRdDQogIGk5MTUvcmNz MC1idXN5LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtLZXJuZWwgUE1VIGV2 ZW50XQ0KICBpOTE1L3JjczAtcXVldWVkLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBbS2VybmVsIFBNVSBldmVudF0NCiAgaTkxNS9yY3MwLXNlbWEvICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgW0tlcm5lbCBQTVUgZXZlbnRdDQogIGk5MTUvcmNzMC13YWl0LyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtLZXJuZWwgUE1VIGV2ZW50XQ0KICBp OTE1L3JlcXVlc3RlZC1mcmVxdWVuY3kvICAgICAgICAgICAgICAgICAgICAgICAgICBbS2VybmVs IFBNVSBldmVudF0NCiAgaTkxNS92Y3MwLWJ1c3kvICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgW0tlcm5lbCBQTVUgZXZlbnRdDQogIGk5MTUvdmNzMC1xdWV1ZWQvICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFtLZXJuZWwgUE1VIGV2ZW50XQ0KICBpOTE1L3ZjczAt c2VtYS8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbS2VybmVsIFBNVSBldmVu dF0NCiAgaTkxNS92Y3MwLXdhaXQvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg W0tlcm5lbCBQTVUgZXZlbnRdDQogIGk5MTUvdmNzMS1idXN5LyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFtLZXJuZWwgUE1VIGV2ZW50XQ0KICBpOTE1L3ZjczEtcXVldWVkLyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbS2VybmVsIFBNVSBldmVudF0NCiAgaTkx NS92Y3MxLXNlbWEvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0tlcm5lbCBQ TVUgZXZlbnRdDQogIGk5MTUvdmNzMS13YWl0LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFtLZXJuZWwgUE1VIGV2ZW50XQ0KICBpOTE1L3ZlY3MwLWJ1c3kvICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBbS2VybmVsIFBNVSBldmVudF0NCiAgaTkxNS92ZWNzMC1x dWV1ZWQvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0tlcm5lbCBQTVUgZXZlbnRd DQogIGk5MTUvdmVjczAtc2VtYS8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtL ZXJuZWwgUE1VIGV2ZW50XQ0KICBpOTE1L3ZlY3MwLXdhaXQvICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBbS2VybmVsIFBNVSBldmVudF0NCg0KSSBoYXZlIHRyaWVkIHRvIHVzZSBz b21lIG9mIHRoZSBldmVudHMgd2l0aCAncGVyZiBzdGF0JyBhbmQgaGVyZSBJDQpmYWlsZWQuIFJl c3VsdCB3YXMgc29tZXRoaW5nIGxpa2U6DQoNCiQgcGVyZiBzdGF0IC1lIGluc3RydWN0aW9ucyxp OTE1L3JjczAtYnVzeS8gd29ya2xvYWQuc2gNCjwuLi4gd3Jva2xvYWQuc2ggb3V0cHV0Li4uPg0K DQpQZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRzIGZvciAnd29ya2xvYWQuc2gnOg0KICAgICAxLDIw NCw2MTYsMjY4ICAgICAgaW5zdHJ1Y3Rpb25zDQogICAgICAgICAgICAgICAgIDAgICAgICBpOTE1 L3JjczAtYnVzeS8NCg0KICAgICAgIDEuODY5MTY5MTUzIHNlY29uZHMgdGltZSBlbGFwc2VkDQoN CkFzIHlvdSBjYW4gc2VlIGluc3RydWN0aW9ucyBldmVudCB3b3JrcyBwcmV0dHkgd2VsbCwgaTkx NS9yY3MwLWJ1c3kvDQpkb2Vzbid0Lg0KDQpJIGFmcmFpZCB0aGF0IG91ciBjdXJyZW50IHVuZGVy c3RhbmRpbmcgb2YgaG93IFBNVSBzaG91bGQgd29yayBpcyBub3QNCmZ1bGx5IGNvcnJlY3QuIEkg dGhpbmsgc28sIGJlY2F1c2UgdGhlIHdheSBQTVUgZW50cnkgcG9pbnRzIGluaXQoKSwNCmFkZCgp LCBkZWwoKSwgc3RhcnQoKSwgc3RvcCgpLCByZWFkKCkgYXJlIGltcGxlbWVudGVkIGRvIG5vdCBj b3JyZWxhdGUNCndpdGggaG93IG1hbnkgdGltZXMgdGhleSBhcmUgY2FsbGVkLiBJIGhhdmUgY291 bnRlZCB0aGVtIGFuZCBoZXJlIGlzIHRoZQ0KcmVzdWx0Og0KaW5pdCgpPTE5LCBhZGQoKT00NDMx MCwgZGVsKCk9NDM5MDAsIHN0YXJ0KCk9NDQ1MzQsIHN0b3AoKT0wLCByZWFkKCk9MA0KDQpXaGlj aCBtZWFucyB0aGF0IHdlIGFyZSByZWd1bGFybHkgYXR0ZW1wdCB0byBzdGFydC9zdG9wIHRpbWVy IGFuZC9vcg0KYnVzeSBzdGF0cyBjYWxjdWxhdGlvbnMuIEFub3RoZXIgdGhpbmcgd2hpY2ggcGF5 IGF0dGVudGlvbiBpcyB0aGF0DQpyZWFkKCkgd2FzIG5vdCBjYWxsZWQgYXQgYWxsLiBIb3cgcGVy ZiBzdXBwb3NlcyB0byBnZXQgY291bnRlciB2YWx1ZT8NCllldCBhbm90aGVyIHRoaW5nLCB3aGVy ZSB3ZSBhcmUgc3VwcG9zZWQgdG8gaW5pdGlhbGl6ZSBvdXIgaW50ZXJuYWwNCnN0YWZmOiBudW1i ZXJzIGFib3ZlIGFyZSBmcm9tIHNpbmdsZSBydW4gYW5kIGV2ZW4gaW5pdCBpcyBjYWxsZWQNCm11 bHRpcGxlIHRpbWVzPyBXaGVyZSB3ZSBhcmUgc3VwcG9zZWQgdG8gZGUtaW5pdCBvdXIgc3RhZmY6 IGVhY2ggdGltZSBvbg0KZGVsKCkgLSB0aGlzIGhhcmRseSBtYWtlcyBzZW5zZT8NCg0KSSBzaG91 bGQgbm90ZSB0aGF0IGlmIHBlcmYgd2lsbCBiZSBpc3N1ZWQgd2l0aCAtSSAxMCBvcHRpb24sIHRo ZW4gcmVhZCgpDQppcyBiZWluZyBjYWxsZWQ6IGluaXRfYygpPTI2NSwgYWRkX2MoKT0xMzI3MjYs IGRlbF9jKCk9MTMxNDgyLA0Kc3RhcnRfYygpPTEzMzQxMiwgc3RvcCgpPTAsIHJlYWQoKT03MS4g SG93ZXZlciwgaTkxNSBjb3VudGVyIGlzIHN0aWxsIDAuDQpJIGhhdmUgdHJpZWQgdG8gcHJpbnQg Y291bnRlciB2YWx1ZXMgZnJvbSB3aXRoaW4gcmVhZCgpIGFuZCB0aGVzZSB2YWx1ZXMNCmFyZSBu b24gMC4gQWN0dWFsbHkgcmVhZCgpIHJldHVybnMgc2VxdWVuY2Ugb2YgPG5vbl96ZXJvPiwgMCwg MCwgMCwgLi4uLA0KPG5vX3plcm8+IGJlY2F1c2Ugd2l0aCBvdXIgYWRkKCksIGRlbCgpIGNvZGUg d2UgcmVndWxhcmx5IHN0YXJ0L3N0b3Agb3VyDQpjb3VudGVyIGFuZCBleGVjdXRpb24gaW4gcmVh ZCgpIGZvbGxvd3MgZGlmZmVyZW50IGJyYW5jaGVzLg0KDQpUaHVzLCBJIHRoaW5rIHRoYXQgcmln aHQgbm93IHdlIGRvIG5vdCBpbXBsZW1lbnQgUE1VIGNvcnJlY3RseSBhbmQgZG8NCm5vdCBtZWV0 IHBlcmYgZXhwZWN0YXRpb25zIGZyb20gdGhlIFBNVS4gVW5mb3J0dW5hdGVseSwgcmlnaHQgbm93 IEkgaGF2ZQ0Kbm8gaWRlYSB3aGF0IGFyZSB0aGVzZSBleHBlY3RhdGlvbnMuDQoNClJlZ2FyZHMs DQpEbWl0cnkuDQoNCg0KT24gV2VkLCAyMDE3LTA4LTAyIGF0IDE0OjAwICswMTAwLCBUdnJ0a28g VXJzdWxpbiB3cm90ZToNCj4gSGkgUGV0ZXIsDQo+IA0KPiBXZSBhcmUgdHJ5aW5nIHRvIGV4cG9z ZSBzb21lIHNvZnR3YXJlIFBNVSBldmVudHMgZnJvbSB0aGUgaTkxNSBkcml2ZXIuIA0KPiBUaGlu Z3MgbGlrZSBHUFUgZW5naW5lIGJ1c3luZXNzLCBwb3dlciB1c2FnZSBhbmQgc2ltaWxhci4NCj4g DQo+IFRoZXJlIGlzIHF1aXRlIGEgYml0IG9mIG9wZW5zIHJlZ2FyZGluZyB1c2FnZSBvZiB0aGUg cGVyZiBBUEkgYW5kIHNvIG9uLiANCj4gV291bGQgeW91IGJlIGFibGUgdG8gc25vb3AgYXJvdW5k IHRoZSBiZWxvdyBwYXRjaCBhbmQgaGVscCB3aXRoIA0KPiBhbnN3ZXJpbmcgc29tZSBxdWVzdGlv bnM/DQo+IA0KPiBDdXJyZW50IG9wZW5zIHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlOg0KPiANCj4g QXJlIHRoZSBtZXRyaWNzIHdlIGFyZSBleHBvc2luZyBtZWFuaW5nZnVsL2FwcHJvcHJpYXRlIGFz IHNvZnR3YXJlIFBNVT8NCj4gDQo+IERvIHdlIG5lZWQgLyBjYW4gd2UgZ2V0IGFueXRoaW5nIHVz ZWZ1bCBieSBlbnVtZXJhdGluZyBvdXIgZXZlbnRzIGluIA0KPiBzeXNmcz8gRm9yIGV4YW1wbGUg Y2FuIHdlIGhhdmUgInBlcmYgc3RhdCIgb3Igc2ltaWxhciBkbyBzb21ldGhpbmcgDQo+IHVzZWZ1 bCB3aXRoIHRoZW0gdG9kYXk/IE9yIHdlIHNob3VsZCBqdXN0IG5vdCBleHBvc2UgaW4gc3lzZnMg YW5kIG9ubHkgDQo+IHVzZSB0aGVuIGZyb20gdG9vbHMgd2hpY2ggd2lsbCB1bmRlcnN0YW5kIHRo ZW0/DQo+IA0KPiBBbHNvLCBvbmNlIEkgZXhwb3J0ZWQgdGhlIGV2ZW50cyBmb3IgZW51bWVyYXRp b24gYW5kIHRyaWVkIGFjY2Vzc2luZyANCj4gdGhlbSB3aXRoIHBlcmYsIEkgaGFkIHRvIGNyZWF0 ZSBmYWtlIHB0X3JlZ3MgdG8gcGFzcyB0byANCj4gcGVyZl9ldmVudF9vdmVyZmxvdy4NCj4gDQo+ IENhbiB3ZSBjb250cm9sIHNhbXBsaW5nIGZyZXF1ZW5jeSBhcyByZXF1ZXN0ZWQgYnkgdGhlIHBl cmYgQVBJPyBXZSANCj4gbW9zdGx5IGRvIG5vdCBuZWVkIHJhcGlkIHBvbGxpbmcgb24gdGhlc2Ug Y291bnRlcnMuDQo+IA0KPiBIb3cgaXMgb3VyIHVzYWdlIG9mIHRoZSBwZXJmIEFQSSBpbiBnZW5l cmFsPw0KPiANCj4gUmVnYXJkcywNCj4gDQo+IFR2cnRrbw0KPiANCj4gT24gMDIvMDgvMjAxNyAx MzozMiwgVHZydGtvIFVyc3VsaW4gd3JvdGU6DQo+ID4gRnJvbTogQ2hyaXMgV2lsc29uIDxjaHJp c0BjaHJpcy13aWxzb24uY28udWs+DQo+ID4gDQo+ID4gVGhlIGZpcnN0IGdvYWwgaXMgdG8gYmUg YWJsZSB0byBtZWFzdXJlIEdQVSAoYW5kIGludmlkdWFsIHJpbmcpIGJ1c3luZXNzDQo+ID4gd2l0 aG91dCBoYXZpbmcgdG8gcG9sbCByZWdpc3RlcnMgZnJvbSB1c2Vyc3BhY2UuIChXaGljaCBub3Qg b25seSBpbmN1cnMNCj4gPiBob2xkaW5nIHRoZSBmb3JjZXdha2UgbG9jayBpbmRlZmluaXRlbHks IHBlcnR1cmJpbmcgdGhlIHN5c3RlbSwgYnV0IGFsc28NCj4gPiBydW5zIHRoZSByaXNrIG9mIGhh bmdpbmcgdGhlIG1hY2hpbmUuKSBBcyBhbiBhbHRlcm5hdGl2ZSB3ZSBjYW4gdXNlIHRoZQ0KPiA+ IHBlcmYgZXZlbnQgY291bnRlciBpbnRlcmZhY2UgdG8gc2FtcGxlIHRoZSByaW5nIHJlZ2lzdGVy cyBwZXJpb2RpY2FsbHkNCj4gPiBhbmQgc2VuZCB0aG9zZSByZXN1bHRzIHRvIHVzZXJzcGFjZS4N Cj4gPiANCj4gPiBUbyBiZSBhYmxlIHRvIGRvIHNvLCB3ZSBuZWVkIHRvIGV4cG9ydCB0aGUgdHdv IHN5bWJvbHMgZnJvbQ0KPiA+IGtlcm5lbC9ldmVudHMvY29yZS5jIHRvIHJlZ2lzdGVyIGFuZCB1 bnJlZ2lzdGVyIGEgUE1VIGRldmljZS4NCj4gPiANCj4gPiB2MjogVXNlIGEgY29tbW9uIHRpbWVy IGZvciB0aGUgcmluZyBzYW1wbGluZy4NCj4gPiANCj4gPiB2MzoNCj4gPiAgICogRGVjb3VwbGUg dUFQSSBmcm9tIGk5MTUgZW5naW5lIGlkcy4NCj4gPiAgICogQ29tcGxldGUgdUFQSSBkZWZpbmVz Lg0KPiA+ICAgKiBSZWZhY3RvciBzb21lIGNvZGUgdG8gaGVscGVycyBmb3IgY2xhcml0eS4NCj4g PiAgICogU2tpcCBzYW1wbGluZyBkaXNhYmxlZCBlbmdpbmVzLg0KPiA+ICAgKiBFeHBvc2UgY291 bnRlcnMgaW4gc3lzZnMuDQo+ID4gICAqIFBhc3MgaW4gZmFrZSByZWdzIHRvIGF2b2lkIG51bGwg cHRyIGRlcmVmIGluIHBlcmYgY29yZS4NCj4gPiAgICogQ29udmVydCB0byBjbGFzcy9pbnN0YW5j ZSB1QVBJLg0KPiA+ICAgKiBVc2Ugc2hhcmVkIGRyaXZlciBjb2RlIGZvciByYzYgcmVzaWRlbmN5 LCBwb3dlciBhbmQgZnJlcXVlbmN5Lg0KPiA+IA0KPiA+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdp bHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPg0KPiA+IFNpZ25lZC1vZmYtYnk6IFR2cnRr byBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAgICAgICAgfCAgIDEgKw0KPiA+ICAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyAgICAgICAgIHwgICAyICsNCj4gPiAgIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICB8ICAyNSArKw0KPiA+ICAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9wbXUuYyAgICAgICAgIHwgNjI5ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrDQo+ID4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oICAgICAg ICAgfCAgIDMgKw0KPiA+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2NzLmMg IHwgIDEwICsNCj4gPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYyB8 ICAyNSArKw0KPiA+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oIHwg ICA4ICsNCj4gPiAgIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgICAgICAgICB8ICA1 NSArKysNCj4gPiAgIGtlcm5lbC9ldmVudHMvY29yZS5jICAgICAgICAgICAgICAgICAgICB8ICAg MSArDQo+ID4gICAxMCBmaWxlcyBjaGFuZ2VkLCA3NTkgaW5zZXJ0aW9ucygrKQ0KPiA+ICAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMNCj4gPiANCj4g PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZQ0KPiA+IGluZGV4IGY4MjI3MzE4ZGNhZi4uMWM3MjAwMTNkYzQy IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlDQo+ID4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUNCj4gPiBAQCAtMjYsNiArMjYsNyBAQCBp OTE1LXkgOj0gaTkxNV9kcnYubyBcDQo+ID4gICANCj4gPiAgIGk5MTUtJChDT05GSUdfQ09NUEFU KSAgICs9IGk5MTVfaW9jMzIubw0KPiA+ICAgaTkxNS0kKENPTkZJR19ERUJVR19GUykgKz0gaTkx NV9kZWJ1Z2ZzLm8gaW50ZWxfcGlwZV9jcmMubw0KPiA+ICtpOTE1LSQoQ09ORklHX1BFUkZfRVZF TlRTKSArPSBpOTE1X3BtdS5vDQo+ID4gICANCj4gPiAgICMgR0VNIGNvZGUNCj4gPiAgIGk5MTUt eSArPSBpOTE1X2NtZF9wYXJzZXIubyBcDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jDQo+ID4g aW5kZXggMjE0NTU1ZTgxM2YxLi5kNzVjMmQ3OTA4NzUgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYw0KPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmMNCj4gPiBAQCAtMTE5NCw2ICsxMTk0LDcgQEAgc3RhdGljIHZvaWQgaTkxNV9k cml2ZXJfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0KPiA+ICAg CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmZGV2X3ByaXYtPmRybTsNCj4gPiAgIA0KPiA+ICAg CWk5MTVfZ2VtX3Nocmlua2VyX2luaXQoZGV2X3ByaXYpOw0KPiA+ICsJaTkxNV9wbXVfcmVnaXN0 ZXIoZGV2X3ByaXYpOw0KPiA+ICAgDQo+ID4gICAJLyoNCj4gPiAgIAkgKiBOb3RpZnkgYSB2YWxp ZCBzdXJmYWNlIGFmdGVyIG1vZGVzZXR0aW5nLA0KPiA+IEBAIC0xMjQ4LDYgKzEyNDksNyBAQCBz dGF0aWMgdm9pZCBpOTE1X2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdikNCj4gPiAgIAlpbnRlbF9vcHJlZ2lvbl91bnJlZ2lzdGVyKGRldl9wcml2KTsN Cj4gPiAgIA0KPiA+ICAgCWk5MTVfcGVyZl91bnJlZ2lzdGVyKGRldl9wcml2KTsNCj4gPiArCWk5 MTVfcG11X3VucmVnaXN0ZXIoZGV2X3ByaXYpOw0KPiA+ICAgDQo+ID4gICAJaTkxNV90ZWFyZG93 bl9zeXNmcyhkZXZfcHJpdik7DQo+ID4gICAJaTkxNV9ndWNfbG9nX3VucmVnaXN0ZXIoZGV2X3By aXYpOw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaA0KPiA+IGluZGV4IDBjOGJkMWNkY2JiZC4u MTQyODI2NzQyYjg2IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZHJ2LmgNCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oDQo+ID4gQEAg LTQwLDYgKzQwLDcgQEANCj4gPiAgICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+DQo+ID4gICAjaW5j bHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4NCj4gPiAgICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+ DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+DQo+ID4gICAjaW5jbHVkZSA8bGlu dXgvcG1fcW9zLmg+DQo+ID4gICAjaW5jbHVkZSA8bGludXgvcmVzZXJ2YXRpb24uaD4NCj4gPiAg ICNpbmNsdWRlIDxsaW51eC9zaG1lbV9mcy5oPg0KPiA+IEBAIC0yMTExLDYgKzIxMTIsMTIgQEAg c3RydWN0IGludGVsX2NkY2xrX3N0YXRlIHsNCj4gPiAgIAl1bnNpZ25lZCBpbnQgY2RjbGssIHZj bywgcmVmOw0KPiA+ICAgfTsNCj4gPiAgIA0KPiA+ICtlbnVtIHsNCj4gPiArCV9fSTkxNV9TQU1Q TEVfRlJFUV9BQ1QgPSAwLA0KPiA+ICsJX19JOTE1X1NBTVBMRV9GUkVRX1JFUSwNCj4gPiArCV9f STkxNV9OVU1fUE1VX1NBTVBMRVJTDQo+ID4gK307DQo+ID4gKw0KPiA+ICAgc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgew0KPiA+ICAgCXN0cnVjdCBkcm1fZGV2aWNlIGRybTsNCj4gPiAgIA0KPiA+ IEBAIC0yMTU4LDYgKzIxNjUsNyBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7DQo+ID4gICAJ c3RydWN0IHBjaV9kZXYgKmJyaWRnZV9kZXY7DQo+ID4gICAJc3RydWN0IGk5MTVfZ2VtX2NvbnRl eHQgKmtlcm5lbF9jb250ZXh0Ow0KPiA+ICAgCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZVtJOTE1X05VTV9FTkdJTkVTXTsNCj4gPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZV9jbGFzc1tNQVhfRU5HSU5FX0NMQVNTICsgMV1bTUFYX0VOR0lORV9JTlNUQU5DRSArIDFdOw0K PiA+ICAgCXN0cnVjdCBpOTE1X3ZtYSAqc2VtYXBob3JlOw0KPiA+ICAgDQo+ID4gICAJc3RydWN0 IGRybV9kbWFfaGFuZGxlICpzdGF0dXNfcGFnZV9kbWFoOw0KPiA+IEBAIC0yNjA1LDYgKzI2MTMs MTQgQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgew0KPiA+ICAgCQlpbnQJaXJxOw0KPiA+ICAg CX0gbHBlX2F1ZGlvOw0KPiA+ICAgDQo+ID4gKwlzdHJ1Y3Qgew0KPiA+ICsJCXN0cnVjdCBwbXUg YmFzZTsNCj4gPiArCQlzcGlubG9ja190IGxvY2s7DQo+ID4gKwkJc3RydWN0IGhydGltZXIgdGlt ZXI7DQo+ID4gKwkJdTY0IGVuYWJsZTsNCj4gPiArCQl1NjQgc2FtcGxlW19fSTkxNV9OVU1fUE1V X1NBTVBMRVJTXTsNCj4gPiArCX0gcG11Ow0KPiA+ICsNCj4gPiAgIAkvKg0KPiA+ICAgCSAqIE5P VEU6IFRoaXMgaXMgdGhlIGRyaTEvdW1zIGR1bmdlb24sIGRvbid0IGFkZCBzdHVmZiBoZXJlLiBZ b3VyIHBhdGNoDQo+ID4gICAJICogd2lsbCBiZSByZWplY3RlZC4gSW5zdGVhZCBsb29rIGZvciBh IGJldHRlciBwbGFjZS4NCj4gPiBAQCAtMzgxMyw2ICszODI5LDE1IEBAIGV4dGVybiB2b2lkIGk5 MTVfcGVyZl9maW5pKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7DQo+ID4gICBl eHRlcm4gdm9pZCBpOTE1X3BlcmZfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2KTsNCj4gPiAgIGV4dGVybiB2b2lkIGk5MTVfcGVyZl91bnJlZ2lzdGVyKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7DQo+ID4gICANCj4gPiArLyogaTkxNV9wbXUuYyAq Lw0KPiA+ICsjaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTDQo+ID4gK2V4dGVybiB2b2lkIGk5MTVf cG11X3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsNCj4gPiArZXh0ZXJu IHZvaWQgaTkxNV9wbXVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7 DQo+ID4gKyNlbHNlDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X3BtdV9yZWdpc3Rlcihz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkge30NCj4gPiArc3RhdGljIGlubGluZSB2b2lk IGk5MTVfcG11X3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpIHt9DQo+ ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiAgIC8qIGk5MTVfc3VzcGVuZC5jICovDQo+ID4gICBleHRl cm4gaW50IGk5MTVfc2F2ZV9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYp Ow0KPiA+ICAgZXh0ZXJuIGludCBpOTE1X3Jlc3RvcmVfc3RhdGUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KTsNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9wbXUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMNCj4gPiBuZXcgZmls ZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjJjNTI3YzEyNjQxDQo+ID4g LS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMN Cj4gPiBAQCAtMCwwICsxLDYyOSBAQA0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPg0KPiA+ICsNCj4gPiArI2luY2x1 ZGUgImk5MTVfZHJ2LmgiDQo+ID4gKyNpbmNsdWRlICJpbnRlbF9yaW5nYnVmZmVyLmgiDQo+ID4g Kw0KPiA+ICsjZGVmaW5lIEZSRVFVRU5DWSAyMDANCj4gPiArI2RlZmluZSBQRVJJT0QgbWF4X3Qo dTY0LCAxMDAwMCwgTlNFQ19QRVJfU0VDIC8gRlJFUVVFTkNZKQ0KPiA+ICsNCj4gPiArI2RlZmlu ZSBFTkdJTkVfU0FNUExFX01BU0sgXA0KPiA+ICsJKEJJVChJOTE1X1NBTVBMRV9RVUVVRUQpIHwg XA0KPiA+ICsJIEJJVChJOTE1X1NBTVBMRV9CVVNZKSB8IFwNCj4gPiArCSBCSVQoSTkxNV9TQU1Q TEVfV0FJVCkgfCBcDQo+ID4gKwkgQklUKEk5MTVfU0FNUExFX1NFTUEpKQ0KPiA+ICsNCj4gPiAr I2RlZmluZSBFTkdJTkVfU0FNUExFX0JJVFMgKDE2KQ0KPiA+ICsNCj4gPiArc3RhdGljIHU4IGVu Z2luZV9jb25maWdfc2FtcGxlKHU2NCBjb25maWcpDQo+ID4gK3sNCj4gPiArCXJldHVybiBjb25m aWcgJiBJOTE1X1BNVV9TQU1QTEVfTUFTSzsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHU4 IGVuZ2luZV9ldmVudF9zYW1wbGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQ0KPiA+ICt7DQo+ ID4gKwlyZXR1cm4gZW5naW5lX2NvbmZpZ19zYW1wbGUoZXZlbnQtPmF0dHIuY29uZmlnKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHU4IGVuZ2luZV9ldmVudF9jbGFzcyhzdHJ1Y3QgcGVy Zl9ldmVudCAqZXZlbnQpDQo+ID4gK3sNCj4gPiArCXJldHVybiAoZXZlbnQtPmF0dHIuY29uZmln ID4+IEk5MTVfUE1VX0NMQVNTX1NISUZUKSAmIDB4ZmY7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyB1OCBlbmdpbmVfZXZlbnRfaW5zdGFuY2Uoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQ0K PiA+ICt7DQo+ID4gKwlyZXR1cm4gKGV2ZW50LT5hdHRyLmNvbmZpZyA+PiBJOTE1X1BNVV9TQU1Q TEVfQklUUykgJiAweGZmOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgYm9vbCBpc19lbmdp bmVfY29uZmlnKHU2NCBjb25maWcpDQo+ID4gK3sNCj4gPiArCXJldHVybiBjb25maWcgPCBfX0k5 MTVfUE1VX09USEVSKDApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdTY0IGNvbmZpZ19l bmFibGVkX21hc2sodTY0IGNvbmZpZykNCj4gPiArew0KPiA+ICsJaWYgKGlzX2VuZ2luZV9jb25m aWcoY29uZmlnKSkNCj4gPiArCQlyZXR1cm4gQklUX1VMTChlbmdpbmVfY29uZmlnX3NhbXBsZShj b25maWcpKTsNCj4gPiArCWVsc2UNCj4gPiArCQlyZXR1cm4gQklUX1VMTChjb25maWcgLSBfX0k5 MTVfUE1VX09USEVSKDApKSA8PA0KPiA+ICsJCSAgICAgICBFTkdJTkVfU0FNUExFX0JJVFM7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBib29sIGlzX2VuZ2luZV9ldmVudChzdHJ1Y3QgcGVy Zl9ldmVudCAqZXZlbnQpDQo+ID4gK3sNCj4gPiArCXJldHVybiBpc19lbmdpbmVfY29uZmlnKGV2 ZW50LT5hdHRyLmNvbmZpZyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1NjQgZXZlbnRf ZW5hYmxlZF9tYXNrKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkNCj4gPiArew0KPiA+ICsJcmV0 dXJuIGNvbmZpZ19lbmFibGVkX21hc2soZXZlbnQtPmF0dHIuY29uZmlnKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGJvb2wgZ3JhYl9mb3JjZXdha2Uoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUsIGJvb2wgZncpDQo+ID4gK3sNCj4gPiArCWlmICghZncpDQo+ID4gKwkJaW50ZWxf dW5jb3JlX2ZvcmNld2FrZV9nZXQoaTkxNSwgRk9SQ0VXQUtFX0FMTCk7DQo+ID4gKw0KPiA+ICsJ cmV0dXJuIHRydWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGVuZ2luZXNfc2Ft cGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikNCj4gPiArew0KPiA+ICsJc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOw0KPiA+ICsJZW51bSBpbnRlbF9lbmdpbmVfaWQg aWQ7DQo+ID4gKwlib29sIGZ3ID0gZmFsc2U7DQo+ID4gKw0KPiA+ICsJaWYgKChkZXZfcHJpdi0+ cG11LmVuYWJsZSAmIEVOR0lORV9TQU1QTEVfTUFTSykgPT0gMCkNCj4gPiArCQlyZXR1cm47DQo+ ID4gKw0KPiA+ICsJaWYgKCFkZXZfcHJpdi0+Z3QuYXdha2UpDQo+ID4gKwkJcmV0dXJuOw0KPiA+ ICsNCj4gPiArCWlmICghaW50ZWxfcnVudGltZV9wbV9nZXRfaWZfaW5fdXNlKGRldl9wcml2KSkN Cj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgZGV2 X3ByaXYsIGlkKSB7DQo+ID4gKwkJdTMyIGVuYWJsZSA9IGVuZ2luZS0+cG11LmVuYWJsZTsNCj4g PiArDQo+ID4gKwkJaWYgKGk5MTVfc2Vxbm9fcGFzc2VkKGludGVsX2VuZ2luZV9nZXRfc2Vxbm8o ZW5naW5lKSwNCj4gPiArCQkJCSAgICAgIGludGVsX2VuZ2luZV9sYXN0X3N1Ym1pdChlbmdpbmUp KSkNCj4gPiArCQkJY29udGludWU7DQo+ID4gKw0KPiA+ICsJCWlmIChlbmFibGUgJiBCSVQoSTkx NV9TQU1QTEVfUVVFVUVEKSkNCj4gPiArCQkJZW5naW5lLT5wbXUuc2FtcGxlW0k5MTVfU0FNUExF X1FVRVVFRF0gKz0gUEVSSU9EOw0KPiA+ICsNCj4gPiArCQlpZiAoZW5hYmxlICYgQklUKEk5MTVf U0FNUExFX0JVU1kpKSB7DQo+ID4gKwkJCXUzMiB2YWw7DQo+ID4gKw0KPiA+ICsJCQlmdyA9IGdy YWJfZm9yY2V3YWtlKGRldl9wcml2LCBmdyk7DQo+ID4gKwkJCXZhbCA9IEk5MTVfUkVBRF9GVyhS SU5HX01JX01PREUoZW5naW5lLT5tbWlvX2Jhc2UpKTsNCj4gPiArCQkJaWYgKCEodmFsICYgTU9E RV9JRExFKSkNCj4gPiArCQkJCWVuZ2luZS0+cG11LnNhbXBsZVtJOTE1X1NBTVBMRV9CVVNZXSAr PSBQRVJJT0Q7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlpZiAoZW5hYmxlICYgKEJJVChJOTE1 X1NBTVBMRV9XQUlUKSB8IEJJVChJOTE1X1NBTVBMRV9TRU1BKSkpIHsNCj4gPiArCQkJdTMyIHZh bDsNCj4gPiArDQo+ID4gKwkJCWZ3ID0gZ3JhYl9mb3JjZXdha2UoZGV2X3ByaXYsIGZ3KTsNCj4g PiArCQkJdmFsID0gSTkxNV9SRUFEX0ZXKFJJTkdfQ1RMKGVuZ2luZS0+bW1pb19iYXNlKSk7DQo+ ID4gKwkJCWlmICgoZW5hYmxlICYgQklUKEk5MTVfU0FNUExFX1dBSVQpKSAmJg0KPiA+ICsJCQkg ICAgKHZhbCAmIFJJTkdfV0FJVCkpDQo+ID4gKwkJCQllbmdpbmUtPnBtdS5zYW1wbGVbSTkxNV9T QU1QTEVfV0FJVF0gKz0gUEVSSU9EOw0KPiA+ICsJCQlpZiAoKGVuYWJsZSAmIEJJVChJOTE1X1NB TVBMRV9TRU1BKSkgJiYNCj4gPiArCQkJICAgICh2YWwgJiBSSU5HX1dBSVRfU0VNQVBIT1JFKSkN Cj4gPiArCQkJCWVuZ2luZS0+cG11LnNhbXBsZVtJOTE1X1NBTVBMRV9TRU1BXSArPSBQRVJJT0Q7 DQo+ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChmdykNCj4gPiArCQlpbnRlbF91 bmNvcmVfZm9yY2V3YWtlX3B1dChkZXZfcHJpdiwgRk9SQ0VXQUtFX0FMTCk7DQo+ID4gKwlpbnRl bF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2 b2lkIGZyZXF1ZW5jeV9zYW1wbGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQ0K PiA+ICt7DQo+ID4gKwlpZiAoZGV2X3ByaXYtPnBtdS5lbmFibGUgJg0KPiA+ICsJICAgIGNvbmZp Z19lbmFibGVkX21hc2soSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWSkpIHsNCj4gPiArCQl1NjQg dmFsOw0KPiA+ICsNCj4gPiArCQl2YWwgPSBkZXZfcHJpdi0+cnBzLmN1cl9mcmVxOw0KPiA+ICsJ CWlmIChkZXZfcHJpdi0+Z3QuYXdha2UgJiYNCj4gPiArCQkgICAgaW50ZWxfcnVudGltZV9wbV9n ZXRfaWZfaW5fdXNlKGRldl9wcml2KSkgew0KPiA+ICsJCQl2YWwgPSBpbnRlbF9nZXRfY2FnZihk ZXZfcHJpdiwNCj4gPiArCQkJCQkgICAgIEk5MTVfUkVBRF9OT1RSQUNFKEdFTjZfUlBTVEFUMSkp Ow0KPiA+ICsJCQlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7DQo+ID4gKwkJfQ0KPiA+ ICsJCXZhbCA9IGludGVsX2dwdV9mcmVxKGRldl9wcml2LCB2YWwpOw0KPiA+ICsJCWRldl9wcml2 LT5wbXUuc2FtcGxlW19fSTkxNV9TQU1QTEVfRlJFUV9BQ1RdICs9IHZhbCAqIFBFUklPRDsNCj4g PiArCX0NCj4gPiArDQo+ID4gKwlpZiAoZGV2X3ByaXYtPnBtdS5lbmFibGUgJg0KPiA+ICsJICAg IGNvbmZpZ19lbmFibGVkX21hc2soSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWSkpIHsNCj4g PiArCQl1NjQgdmFsID0gaW50ZWxfZ3B1X2ZyZXEoZGV2X3ByaXYsIGRldl9wcml2LT5ycHMuY3Vy X2ZyZXEpOw0KPiA+ICsJCWRldl9wcml2LT5wbXUuc2FtcGxlW19fSTkxNV9TQU1QTEVfRlJFUV9S RVFdICs9IHZhbCAqIFBFUklPRDsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGk5MTVfc2FtcGxlKHN0cnVjdCBocnRpbWVyICpocnRpbWVy KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9DQo+ID4gKwkJ Y29udGFpbmVyX29mKGhydGltZXIsIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlLCBwbXUudGltZXIp Ow0KPiA+ICsNCj4gPiArCWlmIChpOTE1LT5wbXUuZW5hYmxlID09IDApDQo+ID4gKwkJcmV0dXJu IEhSVElNRVJfTk9SRVNUQVJUOw0KPiA+ICsNCj4gPiArCWVuZ2luZXNfc2FtcGxlKGk5MTUpOw0K PiA+ICsJZnJlcXVlbmN5X3NhbXBsZShpOTE1KTsNCj4gPiArDQo+ID4gKwlocnRpbWVyX2Zvcndh cmRfbm93KGhydGltZXIsIG5zX3RvX2t0aW1lKFBFUklPRCkpOw0KPiA+ICsJcmV0dXJuIEhSVElN RVJfUkVTVEFSVDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgaTkxNV9wbXVfZXZl bnRfZGVzdHJveShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpDQo+ID4gK3sNCj4gPiArCVdBUk5f T04oZXZlbnQtPnBhcmVudCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgZW5naW5l X2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9DQo+ID4gKwkJY29udGFpbmVyX29mKGV2ZW50LT5w bXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsNCj4gPiArDQo+ID4gKwlpZiAoIWludGVsX2Vu Z2luZV9sb29rdXBfdXNlcihpOTE1LCBlbmdpbmVfZXZlbnRfY2xhc3MoZXZlbnQpLA0KPiA+ICsJ CQkJICAgICAgZW5naW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSkpDQo+ID4gKwkJcmV0dXJuIC1F Tk9ERVY7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChlbmdpbmVfZXZlbnRfc2FtcGxlKGV2ZW50KSkg ew0KPiA+ICsJY2FzZSBJOTE1X1NBTVBMRV9RVUVVRUQ6DQo+ID4gKwljYXNlIEk5MTVfU0FNUExF X0JVU1k6DQo+ID4gKwljYXNlIEk5MTVfU0FNUExFX1dBSVQ6DQo+ID4gKwkJYnJlYWs7DQo+ID4g KwljYXNlIEk5MTVfU0FNUExFX1NFTUE6DQo+ID4gKwkJaWYgKElOVEVMX0dFTihpOTE1KSA8IDYp DQo+ID4gKwkJCXJldHVybiAtRU5PREVWOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoN Cj4gPiArCQlyZXR1cm4gLUVOT0VOVDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwdF9yZWdz LCBpOTE1X3BtdV9wdF9yZWdzKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBlbnVtIGhydGltZXJfcmVz dGFydCBocnRpbWVyX3NhbXBsZShzdHJ1Y3QgaHJ0aW1lciAqaHJ0aW1lcikNCj4gPiArew0KPiA+ ICsJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0aGlzX2NwdV9wdHIoJmk5MTVfcG11X3B0X3JlZ3Mp Ow0KPiA+ICsJc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgZGF0YTsNCj4gPiArCXN0cnVjdCBwZXJm X2V2ZW50ICpldmVudDsNCj4gPiArCXU2NCBwZXJpb2Q7DQo+ID4gKw0KPiA+ICsJZXZlbnQgPSBj b250YWluZXJfb2YoaHJ0aW1lciwgc3RydWN0IHBlcmZfZXZlbnQsIGh3LmhydGltZXIpOw0KPiA+ ICsJaWYgKGV2ZW50LT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkNCj4gPiArCQly ZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7DQo+ID4gKw0KPiA+ICsJZXZlbnQtPnBtdS0+cmVhZChl dmVudCk7DQo+ID4gKw0KPiA+ICsJcGVyZl9zYW1wbGVfZGF0YV9pbml0KCZkYXRhLCAwLCBldmVu dC0+aHcubGFzdF9wZXJpb2QpOw0KPiA+ICsJcGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgJmRh dGEsIHJlZ3MpOw0KPiA+ICsNCj4gPiArCXBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGV2ZW50 LT5ody5zYW1wbGVfcGVyaW9kKTsNCj4gPiArCWhydGltZXJfZm9yd2FyZF9ub3coaHJ0aW1lciwg bnNfdG9fa3RpbWUocGVyaW9kKSk7DQo+ID4gKwlyZXR1cm4gSFJUSU1FUl9SRVNUQVJUOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBpbml0X2hydGltZXIoc3RydWN0IHBlcmZfZXZl bnQgKmV2ZW50KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2 ZW50LT5odzsNCj4gPiArDQo+ID4gKwlpZiAoIWlzX3NhbXBsaW5nX2V2ZW50KGV2ZW50KSkNCj4g PiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJaHJ0aW1lcl9pbml0KCZod2MtPmhydGltZXIsIENM T0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7DQo+ID4gKwlod2MtPmhydGltZXIuZnVu Y3Rpb24gPSBocnRpbWVyX3NhbXBsZTsNCj4gPiArDQo+ID4gKwlpZiAoZXZlbnQtPmF0dHIuZnJl cSkgew0KPiA+ICsJCWxvbmcgZnJlcSA9IGV2ZW50LT5hdHRyLnNhbXBsZV9mcmVxOw0KPiA+ICsN Cj4gPiArCQlldmVudC0+YXR0ci5zYW1wbGVfcGVyaW9kID0gTlNFQ19QRVJfU0VDIC8gZnJlcTsN Cj4gPiArCQlod2MtPnNhbXBsZV9wZXJpb2QgPSBldmVudC0+YXR0ci5zYW1wbGVfcGVyaW9kOw0K PiA+ICsJCWxvY2FsNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LCBod2MtPnNhbXBsZV9wZXJpb2Qp Ow0KPiA+ICsJCWh3Yy0+bGFzdF9wZXJpb2QgPSBod2MtPnNhbXBsZV9wZXJpb2Q7DQo+ID4gKwkJ ZXZlbnQtPmF0dHIuZnJlcSA9IDA7DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBpbnQgaTkxNV9wbXVfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0NCj4gPiArCQljb250YWlu ZXJfb2YoZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJhc2UpOw0KPiA+ICsJaW50IHJl dDsNCj4gPiArDQo+ID4gKwkvKiBYWFggaWRlYWxseSBvbmx5IHdhbnQgcGlkID09IC0xICYmIGNw dSA9PSAtMSAqLw0KPiA+ICsNCj4gPiArCWlmIChldmVudC0+YXR0ci50eXBlICE9IGV2ZW50LT5w bXUtPnR5cGUpDQo+ID4gKwkJcmV0dXJuIC1FTk9FTlQ7DQo+ID4gKw0KPiA+ICsJaWYgKGhhc19i cmFuY2hfc3RhY2soZXZlbnQpKQ0KPiA+ICsJCXJldHVybiAtRU9QTk9UU1VQUDsNCj4gPiArDQo+ ID4gKwlyZXQgPSAwOw0KPiA+ICsJaWYgKGlzX2VuZ2luZV9ldmVudChldmVudCkpIHsNCj4gPiAr CQlyZXQgPSBlbmdpbmVfZXZlbnRfaW5pdChldmVudCk7DQo+ID4gKwl9IGVsc2Ugc3dpdGNoIChl dmVudC0+YXR0ci5jb25maWcpIHsNCj4gPiArCWNhc2UgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5D WToNCj4gPiArCQlpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSB8fCBJU19DSEVSUllWSUVXKGk5MTUp KQ0KPiA+ICsJCQlyZXQgPSAtRU5PREVWOyAvKiByZXF1aXJlcyBhIG11dGV4IGZvciBzYW1wbGlu ZyEgKi8NCj4gPiArCWNhc2UgSTkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWToNCj4gPiArCWNh c2UgSTkxNV9QTVVfRU5FUkdZOg0KPiA+ICsJY2FzZSBJOTE1X1BNVV9SQzZfUkVTSURFTkNZOg0K PiA+ICsJY2FzZSBJOTE1X1BNVV9SQzZwX1JFU0lERU5DWToNCj4gPiArCWNhc2UgSTkxNV9QTVVf UkM2cHBfUkVTSURFTkNZOg0KPiA+ICsJCWlmIChJTlRFTF9HRU4oaTkxNSkgPCA2KQ0KPiA+ICsJ CQlyZXQgPSAtRU5PREVWOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJfQ0KPiA+ICsJaWYgKHJldCkN Cj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCWlmICghZXZlbnQtPnBhcmVudCkNCj4g PiArCQlldmVudC0+ZGVzdHJveSA9IGk5MTVfcG11X2V2ZW50X2Rlc3Ryb3k7DQo+ID4gKw0KPiA+ ICsJaW5pdF9ocnRpbWVyKGV2ZW50KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIHZvaWQgaTkxNV9wbXVfdGltZXJfc3RhcnQoc3RydWN0IHBlcmZf ZXZlbnQgKmV2ZW50KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0g JmV2ZW50LT5odzsNCj4gPiArCXM2NCBwZXJpb2Q7DQo+ID4gKw0KPiA+ICsJaWYgKCFpc19zYW1w bGluZ19ldmVudChldmVudCkpDQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsNCj4gPiArCXBlcmlvZCA9 IGxvY2FsNjRfcmVhZCgmaHdjLT5wZXJpb2RfbGVmdCk7DQo+ID4gKwlpZiAocGVyaW9kKSB7DQo+ ID4gKwkJaWYgKHBlcmlvZCA8IDApDQo+ID4gKwkJCXBlcmlvZCA9IDEwMDAwOw0KPiA+ICsNCj4g PiArCQlsb2NhbDY0X3NldCgmaHdjLT5wZXJpb2RfbGVmdCwgMCk7DQo+ID4gKwl9IGVsc2Ugew0K PiA+ICsJCXBlcmlvZCA9IG1heF90KHU2NCwgMTAwMDAsIGh3Yy0+c2FtcGxlX3BlcmlvZCk7DQo+ ID4gKwl9DQo+ID4gKw0KPiA+ICsJaHJ0aW1lcl9zdGFydF9yYW5nZV9ucygmaHdjLT5ocnRpbWVy LA0KPiA+ICsJCQkgICAgICAgbnNfdG9fa3RpbWUocGVyaW9kKSwgMCwNCj4gPiArCQkJICAgICAg IEhSVElNRVJfTU9ERV9SRUxfUElOTkVEKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZv aWQgaTkxNV9wbXVfdGltZXJfY2FuY2VsKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkNCj4gPiAr ew0KPiA+ICsJc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7DQo+ID4gKw0K PiA+ICsJaWYgKCFpc19zYW1wbGluZ19ldmVudChldmVudCkpDQo+ID4gKwkJcmV0dXJuOw0KPiA+ ICsNCj4gPiArCWxvY2FsNjRfc2V0KCZod2MtPnBlcmlvZF9sZWZ0LA0KPiA+ICsJCSAgICBrdGlt ZV90b19ucyhocnRpbWVyX2dldF9yZW1haW5pbmcoJmh3Yy0+aHJ0aW1lcikpKTsNCj4gPiArCWhy dGltZXJfY2FuY2VsKCZod2MtPmhydGltZXIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg dm9pZCBpOTE1X3BtdV9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQ0KPiA+ICt7DQo+ ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9DQo+ID4gKwkJY29udGFpbmVyX29m KGV2ZW50LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsNCj4gPiArCXVuc2lnbmVkIGxv bmcgZmxhZ3M7DQo+ID4gKw0KPiA+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmk5MTUtPnBtdS5sb2Nr LCBmbGFncyk7DQo+ID4gKw0KPiA+ICsJaWYgKGk5MTUtPnBtdS5lbmFibGUgPT0gMCkNCj4gPiAr CQlocnRpbWVyX3N0YXJ0X3JhbmdlX25zKCZpOTE1LT5wbXUudGltZXIsDQo+ID4gKwkJCQkgICAg ICAgbnNfdG9fa3RpbWUoUEVSSU9EKSwgMCwNCj4gPiArCQkJCSAgICAgICBIUlRJTUVSX01PREVf UkVMX1BJTk5FRCk7DQo+ID4gKw0KPiA+ICsJaTkxNS0+cG11LmVuYWJsZSB8PSBldmVudF9lbmFi bGVkX21hc2soZXZlbnQpOw0KPiA+ICsNCj4gPiArCWlmIChpc19lbmdpbmVfZXZlbnQoZXZlbnQp KSB7DQo+ID4gKwkJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOw0KPiA+ICsNCj4gPiAr CQllbmdpbmUgPSBpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoaTkxNSwNCj4gPiArCQkJCQkJICBl bmdpbmVfZXZlbnRfY2xhc3MoZXZlbnQpLA0KPiA+ICsJCQkJCQkgIGVuZ2luZV9ldmVudF9pbnN0 YW5jZShldmVudCkpOw0KPiA+ICsJCUdFTV9CVUdfT04oIWVuZ2luZSk7DQo+ID4gKwkJZW5naW5l LT5wbXUuZW5hYmxlIHw9IEJJVChlbmdpbmVfZXZlbnRfc2FtcGxlKGV2ZW50KSk7DQo+ID4gKwl9 DQo+ID4gKw0KPiA+ICsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTkxNS0+cG11LmxvY2ssIGZs YWdzKTsNCj4gPiArDQo+ID4gKwlpOTE1X3BtdV90aW1lcl9zdGFydChldmVudCk7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGk5MTVfcG11X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZl bnQgKmV2ZW50KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9 DQo+ID4gKwkJY29udGFpbmVyX29mKGV2ZW50LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNl KTsNCj4gPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQo+ID4gKwl1NjQgbWFzazsNCj4gPiArDQo+ ID4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsNCj4gPiArDQo+ ID4gKwlpZiAoaXNfZW5naW5lX2V2ZW50KGV2ZW50KSkgew0KPiA+ICsJCXN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZTsNCj4gPiArCQllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsNCj4gPiAr DQo+ID4gKwkJZW5naW5lID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGk5MTUsDQo+ID4gKwkJ CQkJCSAgZW5naW5lX2V2ZW50X2NsYXNzKGV2ZW50KSwNCj4gPiArCQkJCQkJICBlbmdpbmVfZXZl bnRfaW5zdGFuY2UoZXZlbnQpKTsNCj4gPiArCQlHRU1fQlVHX09OKCFlbmdpbmUpOw0KPiA+ICsJ CWVuZ2luZS0+cG11LmVuYWJsZSAmPSB+QklUKGVuZ2luZV9ldmVudF9zYW1wbGUoZXZlbnQpKTsN Cj4gPiArCQltYXNrID0gMDsNCj4gPiArCQlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBp ZCkNCj4gPiArCQkJbWFzayB8PSBlbmdpbmUtPnBtdS5lbmFibGU7DQo+ID4gKwkJbWFzayA9IH5t YXNrOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQltYXNrID0gZXZlbnRfZW5hYmxlZF9tYXNrKGV2 ZW50KTsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpOTE1LT5wbXUuZW5hYmxlICY9IH5tYXNrOw0K PiA+ICsNCj4gPiArCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk5MTUtPnBtdS5sb2NrLCBmbGFn cyk7DQo+ID4gKw0KPiA+ICsJaTkxNV9wbXVfdGltZXJfY2FuY2VsKGV2ZW50KTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBpOTE1X3BtdV9ldmVudF9hZGQoc3RydWN0IHBlcmZfZXZl bnQgKmV2ZW50LCBpbnQgZmxhZ3MpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBod19wZXJmX2V2ZW50 ICpod2MgPSAmZXZlbnQtPmh3Ow0KPiA+ICsNCj4gPiArCWlmIChmbGFncyAmIFBFUkZfRUZfU1RB UlQpDQo+ID4gKwkJaTkxNV9wbXVfZW5hYmxlKGV2ZW50KTsNCj4gPiArDQo+ID4gKwlod2MtPnN0 YXRlID0gIShmbGFncyAmIFBFUkZfRUZfU1RBUlQpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9kZWwoc3RydWN0 IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpDQo+ID4gK3sNCj4gPiArCWk5MTVfcG11X2Rp c2FibGUoZXZlbnQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBpOTE1X3BtdV9l dmVudF9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykNCj4gPiArew0K PiA+ICsJaTkxNV9wbXVfZW5hYmxlKGV2ZW50KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgaTkxNV9wbXVfZXZlbnRfc3RvcChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBm bGFncykNCj4gPiArew0KPiA+ICsJaTkxNV9wbXVfZGlzYWJsZShldmVudCk7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyB1NjQgY291bnRfaW50ZXJydXB0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSkNCj4gPiArew0KPiA+ICsJLyogb3Blbi1jb2RlZCBrc3RhdF9pcnFzKCkgKi8N Cj4gPiArCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGk5MTUtPmRybS5wZGV2 LT5pcnEpOw0KPiA+ICsJdTY0IHN1bSA9IDA7DQo+ID4gKwlpbnQgY3B1Ow0KPiA+ICsNCj4gPiAr CWlmICghZGVzYyB8fCAhZGVzYy0+a3N0YXRfaXJxcykNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiAr DQo+ID4gKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQ0KPiA+ICsJCXN1bSArPSAqcGVyX2Nw dV9wdHIoZGVzYy0+a3N0YXRfaXJxcywgY3B1KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gc3VtOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9yZWFkKHN0cnVj dCBwZXJmX2V2ZW50ICpldmVudCkNCj4gPiArew0KPiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUgPQ0KPiA+ICsJCWNvbnRhaW5lcl9vZihldmVudC0+cG11LCB0eXBlb2YoKmk5MTUp LCBwbXUuYmFzZSk7DQo+ID4gKwl1NjQgdmFsID0gMDsNCj4gPiArDQo+ID4gKwlpZiAoaXNfZW5n aW5lX2V2ZW50KGV2ZW50KSkgew0KPiA+ICsJCXU4IHNhbXBsZSA9IGVuZ2luZV9ldmVudF9zYW1w bGUoZXZlbnQpOw0KPiA+ICsJCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsNCj4gPiAr DQo+ID4gKwkJZW5naW5lID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGk5MTUsDQo+ID4gKwkJ CQkJCSAgZW5naW5lX2V2ZW50X2NsYXNzKGV2ZW50KSwNCj4gPiArCQkJCQkJICBlbmdpbmVfZXZl bnRfaW5zdGFuY2UoZXZlbnQpKTsNCj4gPiArDQo+ID4gKwkJaWYgKFdBUk5fT05fT05DRSghZW5n aW5lKSkgew0KPiA+ICsJCQkvKiBEbyBub3RoaW5nICovDQo+ID4gKwkJfSBlbHNlIHsNCj4gPiAr CQkJdmFsID0gZW5naW5lLT5wbXUuc2FtcGxlW3NhbXBsZV07DQo+ID4gKwkJfQ0KPiA+ICsJfSBl bHNlIHN3aXRjaCAoZXZlbnQtPmF0dHIuY29uZmlnKSB7DQo+ID4gKwljYXNlIEk5MTVfUE1VX0FD VFVBTF9GUkVRVUVOQ1k6DQo+ID4gKwkJdmFsID0gaTkxNS0+cG11LnNhbXBsZVtfX0k5MTVfU0FN UExFX0ZSRVFfQUNUXTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgSTkxNV9QTVVfUkVRVUVT VEVEX0ZSRVFVRU5DWToNCj4gPiArCQl2YWwgPSBpOTE1LT5wbXUuc2FtcGxlW19fSTkxNV9TQU1Q TEVfRlJFUV9SRVFdOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBJOTE1X1BNVV9FTkVSR1k6 DQo+ID4gKwkJdmFsID0gaW50ZWxfZW5lcmd5X3VKKGk5MTUpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ ICsJY2FzZSBJOTE1X1BNVV9JTlRFUlJVUFRTOg0KPiA+ICsJCXZhbCA9IGNvdW50X2ludGVycnVw dHMoaTkxNSk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJY2FzZSBJOTE1X1BNVV9SQzZf UkVTSURFTkNZOg0KPiA+ICsJCWlmICghaTkxNS0+Z3QuYXdha2UpDQo+ID4gKwkJCXJldHVybjsN Cj4gPiArDQo+ID4gKwkJdmFsID0gaW50ZWxfcmM2X3Jlc2lkZW5jeV9ucyhpOTE1LA0KPiA+ICsJ CQkJCSAgICAgSVNfVkFMTEVZVklFVyhpOTE1KSA/DQo+ID4gKwkJCQkJICAgICBWTFZfR1RfUkVO REVSX1JDNiA6DQo+ID4gKwkJCQkJICAgICBHRU42X0dUX0dGWF9SQzYpOw0KPiA+ICsJCWJyZWFr Ow0KPiA+ICsNCj4gPiArCWNhc2UgSTkxNV9QTVVfUkM2cF9SRVNJREVOQ1k6DQo+ID4gKwkJaWYg KCFpOTE1LT5ndC5hd2FrZSkNCj4gPiArCQkJcmV0dXJuOw0KPiA+ICsNCj4gPiArCQlpZiAoIUlT X1ZBTExFWVZJRVcoaTkxNSkpDQo+ID4gKwkJCXZhbCA9IGludGVsX3JjNl9yZXNpZGVuY3lfbnMo aTkxNSwgR0VONl9HVF9HRlhfUkM2cCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJY2Fz ZSBJOTE1X1BNVV9SQzZwcF9SRVNJREVOQ1k6DQo+ID4gKwkJaWYgKCFpOTE1LT5ndC5hd2FrZSkN Cj4gPiArCQkJcmV0dXJuOw0KPiA+ICsNCj4gPiArCQlpZiAoIUlTX1ZBTExFWVZJRVcoaTkxNSkp DQo+ID4gKwkJCXZhbCA9IGludGVsX3JjNl9yZXNpZGVuY3lfbnMoaTkxNSwgR0VONl9HVF9HRlhf UkM2cHApOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWxvY2FsNjRfc2V0 KCZldmVudC0+Y291bnQsIHZhbCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgaTkx NV9wbXVfZXZlbnRfZXZlbnRfaWR4KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkNCj4gPiArew0K PiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzc2l6ZV90IGk5MTVf cG11X2Zvcm1hdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gPiArCQkJCSAgICBzdHJ1Y3Qg ZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQ0KPiA+ICt7DQo+ID4gKyAgICAgICAg c3RydWN0IGRldl9leHRfYXR0cmlidXRlICplYXR0cjsNCj4gPiArDQo+ID4gKyAgICAgICAgZWF0 dHIgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IGRldl9leHRfYXR0cmlidXRlLCBhdHRyKTsN Cj4gPiArICAgICAgICByZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgKGNoYXIgKikgZWF0dHIt PnZhcik7DQo+ID4gK30NCj4gPiArDQo+ID4gKyNkZWZpbmUgSTkxNV9QTVVfRk9STUFUX0FUVFIo X25hbWUsIF9jb25maWcpICAgICAgICAgICBcDQo+ID4gKyAgICAgICAgKCYoKHN0cnVjdCBkZXZf ZXh0X2F0dHJpYnV0ZVtdKSB7ICAgICAgICAgICAgICAgXA0KPiA+ICsgICAgICAgICAgICAgICAg eyAuYXR0ciA9IF9fQVRUUihfbmFtZSwgU19JUlVHTywgaTkxNV9wbXVfZm9ybWF0X3Nob3csIE5V TEwpLCBcDQo+ID4gKyAgICAgICAgICAgICAgICAgIC52YXIgPSAodm9pZCAqKSBfY29uZmlnLCB9 ICAgICAgICAgICAgXA0KPiA+ICsgICAgICAgIH0pWzBdLmF0dHIuYXR0cikNCj4gPiArDQo+ID4g K3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppOTE1X3BtdV9mb3JtYXRfYXR0cnNbXSA9IHsNCj4g PiArICAgICAgICBJOTE1X1BNVV9GT1JNQVRfQVRUUihpOTE1X2V2ZW50aWQsICJjb25maWc6MC00 MiIpLA0KPiA+ICsgICAgICAgIE5VTEwsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29u c3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpOTE1X3BtdV9mb3JtYXRfYXR0cl9ncm91cCA9IHsN Cj4gPiArICAgICAgICAubmFtZSA9ICJmb3JtYXQiLA0KPiA+ICsgICAgICAgIC5hdHRycyA9IGk5 MTVfcG11X2Zvcm1hdF9hdHRycywNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzc2l6ZV90 IGk5MTVfcG11X2V2ZW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LA0KPiA+ICsJCQkJICAgc3Ry dWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikNCj4gPiArew0KPiA+ICsgICAg ICAgIHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSAqZWF0dHI7DQo+ID4gKw0KPiA+ICsgICAgICAg IGVhdHRyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSwgYXR0 cik7DQo+ID4gKyAgICAgICAgcmV0dXJuIHNwcmludGYoYnVmLCAiY29uZmlnPTB4JWx4XG4iLCAo dW5zaWduZWQgbG9uZykgZWF0dHItPnZhcik7DQo+ID4gK30NCj4gPiArDQo+ID4gKyNkZWZpbmUg STkxNV9QTVVfRVZFTlRfQVRUUihfbmFtZSwgX2NvbmZpZykgICAgICAgICAgICBcDQo+ID4gKyAg ICAgICAgKCYoKHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZVtdKSB7ICAgICAgICAgICAgICAgXA0K PiA+ICsgICAgICAgICAgICAgICAgeyAuYXR0ciA9IF9fQVRUUihfbmFtZSwgU19JUlVHTywgaTkx NV9wbXVfZXZlbnRfc2hvdywgTlVMTCksIFwNCj4gPiArICAgICAgICAgICAgICAgICAgLnZhciA9 ICh2b2lkICopIF9jb25maWcsIH0gICAgICAgICAgICBcDQo+ID4gKyAgICAgICAgIH0pWzBdLmF0 dHIuYXR0cikNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppOTE1X3BtdV9l dmVudHNfYXR0cnNbXSA9IHsNCj4gPiArCUk5MTVfUE1VX0VWRU5UX0FUVFIocmNzMC1xdWV1ZWQs DQo+ID4gKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfUVVFVUVEKEk5MTVfRU5HSU5FX0NMQVNTX1JF TkRFUiwgMCkpLA0KPiA+ICsJSTkxNV9QTVVfRVZFTlRfQVRUUihyY3MwLWJ1c3ksDQo+ID4gKwkJ CSAgICBJOTE1X1BNVV9FTkdJTkVfQlVTWShJOTE1X0VOR0lORV9DTEFTU19SRU5ERVIsIDApKSwN Cj4gPiArCUk5MTVfUE1VX0VWRU5UX0FUVFIocmNzMC13YWl0LA0KPiA+ICsJCQkgICAgSTkxNV9Q TVVfRU5HSU5FX1dBSVQoSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSLCAwKSksDQo+ID4gKwlJOTE1 X1BNVV9FVkVOVF9BVFRSKHJjczAtc2VtYSwNCj4gPiArCQkJICAgIEk5MTVfUE1VX0VOR0lORV9T RU1BKEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiwgMCkpLA0KPiA+ICsNCj4gPiArCUk5MTVfUE1V X0VWRU5UX0FUVFIoYmNzMC1xdWV1ZWQsDQo+ID4gKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfUVVF VUVEKEk5MTVfRU5HSU5FX0NMQVNTX0NPUFksIDApKSwNCj4gPiArCUk5MTVfUE1VX0VWRU5UX0FU VFIoYmNzMC1idXN5LA0KPiA+ICsJCQkgICAgSTkxNV9QTVVfRU5HSU5FX0JVU1koSTkxNV9FTkdJ TkVfQ0xBU1NfQ09QWSwgMCkpLA0KPiA+ICsJSTkxNV9QTVVfRVZFTlRfQVRUUihiY3MwLXdhaXQs DQo+ID4gKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfV0FJVChJOTE1X0VOR0lORV9DTEFTU19DT1BZ LCAwKSksDQo+ID4gKwlJOTE1X1BNVV9FVkVOVF9BVFRSKGJjczAtc2VtYSwNCj4gPiArCQkJICAg IEk5MTVfUE1VX0VOR0lORV9TRU1BKEk5MTVfRU5HSU5FX0NMQVNTX0NPUFksIDApKSwNCj4gPiAr DQo+ID4gKwlJOTE1X1BNVV9FVkVOVF9BVFRSKHZjczAtcXVldWVkLA0KPiA+ICsJCQkgICAgSTkx NV9QTVVfRU5HSU5FX1FVRVVFRChJOTE1X0VOR0lORV9DTEFTU19WSURFTywgMCkpLA0KPiA+ICsJ STkxNV9QTVVfRVZFTlRfQVRUUih2Y3MwLWJ1c3ksDQo+ID4gKwkJCSAgICBJOTE1X1BNVV9FTkdJ TkVfQlVTWShJOTE1X0VOR0lORV9DTEFTU19WSURFTywgMCkpLA0KPiA+ICsJSTkxNV9QTVVfRVZF TlRfQVRUUih2Y3MwLXdhaXQsDQo+ID4gKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfV0FJVChJOTE1 X0VOR0lORV9DTEFTU19WSURFTywgMCkpLA0KPiA+ICsJSTkxNV9QTVVfRVZFTlRfQVRUUih2Y3Mw LXNlbWEsDQo+ID4gKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfU0VNQShJOTE1X0VOR0lORV9DTEFT U19WSURFTywgMCkpLA0KPiA+ICsNCj4gPiArCUk5MTVfUE1VX0VWRU5UX0FUVFIodmNzMS1xdWV1 ZWQsDQo+ID4gKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfUVVFVUVEKEk5MTVfRU5HSU5FX0NMQVNT X1ZJREVPLCAxKSksDQo+ID4gKwlJOTE1X1BNVV9FVkVOVF9BVFRSKHZjczEtYnVzeSwNCj4gPiAr CQkJICAgIEk5MTVfUE1VX0VOR0lORV9CVVNZKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPLCAxKSks DQo+ID4gKwlJOTE1X1BNVV9FVkVOVF9BVFRSKHZjczEtd2FpdCwNCj4gPiArCQkJICAgIEk5MTVf UE1VX0VOR0lORV9XQUlUKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPLCAxKSksDQo+ID4gKwlJOTE1 X1BNVV9FVkVOVF9BVFRSKHZjczEtc2VtYSwNCj4gPiArCQkJICAgIEk5MTVfUE1VX0VOR0lORV9T RU1BKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPLCAxKSksDQo+ID4gKw0KPiA+ICsJSTkxNV9QTVVf RVZFTlRfQVRUUih2ZWNzMC1xdWV1ZWQsDQo+ID4gKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfUVVF VUVEKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDApKSwNCj4gPiArCUk5MTVfUE1V X0VWRU5UX0FUVFIodmVjczAtYnVzeSwNCj4gPiArCQkJICAgIEk5MTVfUE1VX0VOR0lORV9CVVNZ KEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDApKSwNCj4gPiArCUk5MTVfUE1VX0VW RU5UX0FUVFIodmVjczAtd2FpdCwNCj4gPiArCQkJICAgIEk5MTVfUE1VX0VOR0lORV9XQUlUKEk5 MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDApKSwNCj4gPiArCUk5MTVfUE1VX0VWRU5U X0FUVFIodmVjczAtc2VtYSwNCj4gPiArCQkJICAgIEk5MTVfUE1VX0VOR0lORV9TRU1BKEk5MTVf RU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDApKSwNCj4gPiArDQo+ID4gKyAgICAgICAgSTkx NV9QTVVfRVZFTlRfQVRUUihhY3R1YWwtZnJlcXVlbmN5LAkgSTkxNV9QTVVfQUNUVUFMX0ZSRVFV RU5DWSksDQo+ID4gKyAgICAgICAgSTkxNV9QTVVfRVZFTlRfQVRUUihyZXF1ZXN0ZWQtZnJlcXVl bmN5LCBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZKSwNCj4gPiArICAgICAgICBJOTE1X1BN VV9FVkVOVF9BVFRSKGVuZXJneSwJCSBJOTE1X1BNVV9FTkVSR1kpLA0KPiA+ICsgICAgICAgIEk5 MTVfUE1VX0VWRU5UX0FUVFIoaW50ZXJydXB0cywJCSBJOTE1X1BNVV9JTlRFUlJVUFRTKSwNCj4g PiArICAgICAgICBJOTE1X1BNVV9FVkVOVF9BVFRSKHJjNi1yZXNpZGVuY3ksCSBJOTE1X1BNVV9S QzZfUkVTSURFTkNZKSwNCj4gPiArICAgICAgICBJOTE1X1BNVV9FVkVOVF9BVFRSKHJjNnAtcmVz aWRlbmN5LAkgSTkxNV9QTVVfUkM2cF9SRVNJREVOQ1kpLA0KPiA+ICsgICAgICAgIEk5MTVfUE1V X0VWRU5UX0FUVFIocmM2cHAtcmVzaWRlbmN5LAkgSTkxNV9QTVVfUkM2cHBfUkVTSURFTkNZKSwN Cj4gPiArDQo+ID4gKyAgICAgICAgTlVMTCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBj b25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGk5MTVfcG11X2V2ZW50c19hdHRyX2dyb3VwID0g ew0KPiA+ICsgICAgICAgIC5uYW1lID0gImV2ZW50cyIsDQo+ID4gKyAgICAgICAgLmF0dHJzID0g aTkxNV9wbXVfZXZlbnRzX2F0dHJzLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmk5MTVfcG11X2F0dHJfZ3JvdXBzW10gPSB7DQo+ID4g KyAgICAgICAgJmk5MTVfcG11X2Zvcm1hdF9hdHRyX2dyb3VwLA0KPiA+ICsgICAgICAgICZpOTE1 X3BtdV9ldmVudHNfYXR0cl9ncm91cCwNCj4gPiArICAgICAgICBOVUxMDQo+ID4gK307DQo+ID4g Kw0KPiA+ICt2b2lkIGk5MTVfcG11X3JlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KQ0KPiA+ICt7DQo+ID4gKwlpZiAoSU5URUxfR0VOKGk5MTUpIDw9IDIpDQo+ID4gKwkJcmV0 dXJuOw0KPiA+ICsNCj4gPiArCWk5MTUtPnBtdS5iYXNlLmF0dHJfZ3JvdXBzCT0gaTkxNV9wbXVf YXR0cl9ncm91cHM7DQo+ID4gKwlpOTE1LT5wbXUuYmFzZS50YXNrX2N0eF9ucgk9IHBlcmZfc3df Y29udGV4dDsNCj4gPiArCWk5MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQJPSBpOTE1X3BtdV9ldmVu dF9pbml0Ow0KPiA+ICsJaTkxNS0+cG11LmJhc2UuYWRkCQk9IGk5MTVfcG11X2V2ZW50X2FkZDsN Cj4gPiArCWk5MTUtPnBtdS5iYXNlLmRlbAkJPSBpOTE1X3BtdV9ldmVudF9kZWw7DQo+ID4gKwlp OTE1LT5wbXUuYmFzZS5zdGFydAkJPSBpOTE1X3BtdV9ldmVudF9zdGFydDsNCj4gPiArCWk5MTUt PnBtdS5iYXNlLnN0b3AJCT0gaTkxNV9wbXVfZXZlbnRfc3RvcDsNCj4gPiArCWk5MTUtPnBtdS5i YXNlLnJlYWQJCT0gaTkxNV9wbXVfZXZlbnRfcmVhZDsNCj4gPiArCWk5MTUtPnBtdS5iYXNlLmV2 ZW50X2lkeAk9IGk5MTVfcG11X2V2ZW50X2V2ZW50X2lkeDsNCj4gPiArDQo+ID4gKwlzcGluX2xv Y2tfaW5pdCgmaTkxNS0+cG11LmxvY2spOw0KPiA+ICsJaHJ0aW1lcl9pbml0KCZpOTE1LT5wbXUu dGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7DQo+ID4gKwlpOTE1LT5w bXUudGltZXIuZnVuY3Rpb24gPSBpOTE1X3NhbXBsZTsNCj4gPiArCWk5MTUtPnBtdS5lbmFibGUg PSAwOw0KPiA+ICsNCj4gPiArCWlmIChwZXJmX3BtdV9yZWdpc3RlcigmaTkxNS0+cG11LmJhc2Us ICJpOTE1IiwgLTEpKQ0KPiA+ICsJCWk5MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQgPSBOVUxMOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIGk5MTVfcG11X3VucmVnaXN0ZXIoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUpDQo+ID4gK3sNCj4gPiArCWlmICghaTkxNS0+cG11LmJhc2UuZXZl bnRfaW5pdCkNCj4gPiArCQlyZXR1cm47DQo+ID4gKw0KPiA+ICsJaTkxNS0+cG11LmVuYWJsZSA9 IDA7DQo+ID4gKw0KPiA+ICsJcGVyZl9wbXVfdW5yZWdpc3RlcigmaTkxNS0+cG11LmJhc2UpOw0K PiA+ICsJaTkxNS0+cG11LmJhc2UuZXZlbnRfaW5pdCA9IE5VTEw7DQo+ID4gKw0KPiA+ICsJaHJ0 aW1lcl9jYW5jZWwoJmk5MTUtPnBtdS50aW1lcik7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVnLmgNCj4gPiBpbmRleCAxZGM3ZTdhMmEyM2IuLjI2YmNlNzY2YWI1MSAxMDA2NDQNCj4g PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oDQo+ID4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaA0KPiA+IEBAIC05NSw2ICs5NSw5IEBAIHN0YXRpYyBp bmxpbmUgYm9vbCBpOTE1X21taW9fcmVnX3ZhbGlkKGk5MTVfcmVnX3QgcmVnKQ0KPiA+ICAgI2Rl ZmluZSBWSURFT19FTkhBTkNFTUVOVF9DTEFTUwkyDQo+ID4gICAjZGVmaW5lIENPUFlfRU5HSU5F X0NMQVNTCTMNCj4gPiAgICNkZWZpbmUgT1RIRVJfQ0xBU1MJCTQNCj4gPiArI2RlZmluZSBNQVhf RU5HSU5FX0NMQVNTCTQNCj4gPiArDQo+ID4gKyNkZWZpbmUgTUFYX0VOR0lORV9JTlNUQU5DRSAg ICAxDQo+ID4gICANCj4gPiAgIC8qIFBDSSBjb25maWcgc3BhY2UgKi8NCj4gPiAgIA0KPiA+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdpbmVfY3MuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jDQo+ID4gaW5kZXggOWFiNTk2OTQxMzcy Li4xNDYzMDYxMjMyNWIgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZW5naW5lX2NzLmMNCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9lbmdp bmVfY3MuYw0KPiA+IEBAIC0xOTgsNiArMTk4LDE1IEBAIGludGVsX2VuZ2luZV9zZXR1cChzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsDQo+ID4gICAJR0VNX0JVR19PTihpbmZvLT5j bGFzcyA+PSBBUlJBWV9TSVpFKGludGVsX2VuZ2luZV9jbGFzc2VzKSk7DQo+ID4gICAJY2xhc3Nf aW5mbyA9ICZpbnRlbF9lbmdpbmVfY2xhc3Nlc1tpbmZvLT5jbGFzc107DQo+ID4gICANCj4gPiAr CWlmIChHRU1fV0FSTl9PTihpbmZvLT5jbGFzcyA+IE1BWF9FTkdJTkVfQ0xBU1MpKQ0KPiA+ICsJ CXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArCWlmIChHRU1fV0FSTl9PTihpbmZvLT5pbnN0 YW5jZSA+IE1BWF9FTkdJTkVfSU5TVEFOQ0UpKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ ICsNCj4gPiArCWlmIChHRU1fV0FSTl9PTihkZXZfcHJpdi0+ZW5naW5lX2NsYXNzW2luZm8tPmNs YXNzXVtpbmZvLT5pbnN0YW5jZV0pKQ0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4g PiAgIAlHRU1fQlVHX09OKGRldl9wcml2LT5lbmdpbmVbaWRdKTsNCj4gPiAgIAllbmdpbmUgPSBr emFsbG9jKHNpemVvZigqZW5naW5lKSwgR0ZQX0tFUk5FTCk7DQo+ID4gICAJaWYgKCFlbmdpbmUp DQo+ID4gQEAgLTIyNSw2ICsyMzQsNyBAQCBpbnRlbF9lbmdpbmVfc2V0dXAoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LA0KPiA+ICAgDQo+ID4gICAJQVRPTUlDX0lOSVRfTk9USUZJ RVJfSEVBRCgmZW5naW5lLT5jb250ZXh0X3N0YXR1c19ub3RpZmllcik7DQo+ID4gICANCj4gPiAr CWRldl9wcml2LT5lbmdpbmVfY2xhc3NbaW5mby0+Y2xhc3NdW2luZm8tPmluc3RhbmNlXSA9IGVu Z2luZTsNCj4gPiAgIAlkZXZfcHJpdi0+ZW5naW5lW2lkXSA9IGVuZ2luZTsNCj4gPiAgIAlyZXR1 cm4gMDsNCj4gPiAgIH0NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcmluZ2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5j DQo+ID4gaW5kZXggY2RmMDg0ZWY1YWFlLi5hZjhkODU3OTRjNDQgMTAwNjQ0DQo+ID4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jDQo+ID4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jDQo+ID4gQEAgLTIyODIsMyArMjI4Miwy OCBAQCBpbnQgaW50ZWxfaW5pdF92ZWJveF9yaW5nX2J1ZmZlcihzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpDQo+ID4gICANCj4gPiAgIAlyZXR1cm4gaW50ZWxfaW5pdF9yaW5nX2J1ZmZl cihlbmdpbmUpOw0KPiA+ICAgfQ0KPiA+ICsNCj4gPiArc3RhdGljIHU4IHVzZXJfY2xhc3NfbWFw W0k5MTVfRU5HSU5FX0NMQVNTX01BWF0gPSB7DQo+ID4gKwlbSTkxNV9FTkdJTkVfQ0xBU1NfT1RI RVJdID0gT1RIRVJfQ0xBU1MsDQo+ID4gKwlbSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSXSA9IFJF TkRFUl9DTEFTUywNCj4gPiArCVtJOTE1X0VOR0lORV9DTEFTU19DT1BZXSA9IENPUFlfRU5HSU5F X0NMQVNTLA0KPiA+ICsJW0k5MTVfRU5HSU5FX0NMQVNTX1ZJREVPXSA9IFZJREVPX0RFQ09ERV9D TEFTUywNCj4gPiArCVtJOTE1X0VOR0lORV9DTEFTU19WSURFT19FTkhBTkNFXSA9IFZJREVPX0VO SEFOQ0VNRU5UX0NMQVNTLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqDQo+ID4gK2ludGVsX2VuZ2luZV9sb29rdXBfdXNlcihzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSwgdTggY2xhc3MsIHU4IGluc3RhbmNlKQ0KPiA+ICt7DQo+ID4gKwlpZiAoY2xh c3MgPj0gQVJSQVlfU0laRSh1c2VyX2NsYXNzX21hcCkpDQo+ID4gKwkJcmV0dXJuIE5VTEw7DQo+ ID4gKw0KPiA+ICsJY2xhc3MgPSB1c2VyX2NsYXNzX21hcFtjbGFzc107DQo+ID4gKw0KPiA+ICsJ aWYgKFdBUk5fT05fT05DRShjbGFzcyA+IE1BWF9FTkdJTkVfQ0xBU1MpKQ0KPiA+ICsJCXJldHVy biBOVUxMOw0KPiA+ICsNCj4gPiArCWlmIChpbnN0YW5jZSA+IE1BWF9FTkdJTkVfSU5TVEFOQ0Up DQo+ID4gKwkJcmV0dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGk5MTUtPmVuZ2luZV9j bGFzc1tjbGFzc11baW5zdGFuY2VdOw0KPiA+ICt9DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX3JpbmdidWZmZXIuaA0KPiA+IGluZGV4IGQzM2M5MzQ0NGMwZC4uOWZkZjBjZGY2MjIwIDEw MDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaA0K PiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaA0KPiA+IEBA IC0yNDUsNiArMjQ1LDExIEBAIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mgew0KPiA+ICAgCQlJOTE1 X1NFTEZURVNUX0RFQ0xBUkUoYm9vbCBtb2NrIDogMSk7DQo+ID4gICAJfSBicmVhZGNydW1iczsN Cj4gPiAgIA0KPiA+ICsJc3RydWN0IHsNCj4gPiArCQl1MzIgZW5hYmxlOw0KPiA+ICsJCXU2NCBz YW1wbGVbNF07DQo+ID4gKwl9IHBtdTsNCj4gPiArDQo+ID4gICAJLyoNCj4gPiAgIAkgKiBBIHBv b2wgb2Ygb2JqZWN0cyB0byB1c2UgYXMgc2hhZG93IGNvcGllcyBvZiBjbGllbnQgYmF0Y2ggYnVm ZmVycw0KPiA+ICAgCSAqIHdoZW4gdGhlIGNvbW1hbmQgcGFyc2VyIGlzIGVuYWJsZWQuIFByZXZl bnRzIHRoZSBjbGllbnQgZnJvbQ0KPiA+IEBAIC03MzUsNCArNzQwLDcgQEAgYm9vbCBpbnRlbF9l bmdpbmVzX2FyZV9pZGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7DQo+ID4g ICB2b2lkIGludGVsX2VuZ2luZXNfbWFya19pZGxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KTsNCj4gPiAgIHZvaWQgaW50ZWxfZW5naW5lc19yZXNldF9kZWZhdWx0X3N1Ym1pc3Npb24o c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOw0KPiA+ICAgDQo+ID4gK3N0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKg0KPiA+ICtpbnRlbF9lbmdpbmVfbG9va3VwX3VzZXIoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUsIHU4IGNsYXNzLCB1OCBpbnN0YW5jZSk7DQo+ID4gKw0KPiA+ICAg I2VuZGlmIC8qIF9JTlRFTF9SSU5HQlVGRkVSX0hfICovDQo+ID4gZGlmZiAtLWdpdCBhL2luY2x1 ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaA0KPiA+ IGluZGV4IDdjY2JkNmEyYmJlMC4uMTAzODc0NDc2YTZkIDEwMDY0NA0KPiA+IC0tLSBhL2luY2x1 ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaA0KPiA+ICsrKyBiL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9k cm0uaA0KPiA+IEBAIC04Niw2ICs4Niw2MSBAQCBlbnVtIGk5MTVfbW9jc190YWJsZV9pbmRleCB7 DQo+ID4gICAJSTkxNV9NT0NTX0NBQ0hFRCwNCj4gPiAgIH07DQo+ID4gICANCj4gPiArZW51bSBk cm1faTkxNV9nZW1fZW5naW5lX2NsYXNzIHsNCj4gPiArCUk5MTVfRU5HSU5FX0NMQVNTX09USEVS ID0gMCwNCj4gPiArCUk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiA9IDEsDQo+ID4gKwlJOTE1X0VO R0lORV9DTEFTU19DT1BZID0gMiwNCj4gPiArCUk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPID0gMywN Cj4gPiArCUk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UgPSA0LA0KPiA+ICsJSTkxNV9F TkdJTkVfQ0xBU1NfTUFYIC8qIG5vbi1BQkkgKi8NCj4gPiArfTsNCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgKiBET0M6IHBlcmZfZXZlbnRzIGV4cG9zZWQgYnkgaTkxNSB0aHJvdWdoIC9zeXMvYnVz L2V2ZW50X3NvdXJjZXMvZHJpdmVycy9pOTE1DQo+ID4gKyAqDQo+ID4gKyAqLw0KPiA+ICsNCj4g PiArZW51bSBkcm1faTkxNV9wbXVfZW5naW5lX3NhbXBsZSB7DQo+ID4gKwlJOTE1X1NBTVBMRV9R VUVVRUQgPSAwLA0KPiA+ICsJSTkxNV9TQU1QTEVfQlVTWSA9IDEsDQo+ID4gKwlJOTE1X1NBTVBM RV9XQUlUID0gMiwNCj4gPiArCUk5MTVfU0FNUExFX1NFTUEgPSAzDQo+ID4gK307DQo+ID4gKw0K PiA+ICsjZGVmaW5lIEk5MTVfUE1VX1NBTVBMRV9CSVRTICg0KQ0KPiA+ICsjZGVmaW5lIEk5MTVf UE1VX1NBTVBMRV9NQVNLICgweGYpDQo+ID4gKyNkZWZpbmUgSTkxNV9QTVVfU0FNUExFX0lOU1RB TkNFX0JJVFMgKDgpDQo+ID4gKyNkZWZpbmUgSTkxNV9QTVVfQ0xBU1NfU0hJRlQgXA0KPiA+ICsJ KEk5MTVfUE1VX1NBTVBMRV9CSVRTICsgSTkxNV9QTVVfU0FNUExFX0lOU1RBTkNFX0JJVFMpDQo+ ID4gKw0KPiA+ICsjZGVmaW5lIF9fSTkxNV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0YW5jZSwgc2Ft cGxlKSBcDQo+ID4gKwkoKGNsYXNzKSA8PCBJOTE1X1BNVV9DTEFTU19TSElGVCB8IFwNCj4gPiAr CShpbnN0YW5jZSkgPDwgSTkxNV9QTVVfU0FNUExFX0JJVFMgfCBcDQo+ID4gKwkoc2FtcGxlKSkN Cj4gPiArDQo+ID4gKyNkZWZpbmUgSTkxNV9QTVVfRU5HSU5FX1FVRVVFRChjbGFzcywgaW5zdGFu Y2UpIFwNCj4gPiArCV9fSTkxNV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0YW5jZSwgSTkxNV9TQU1Q TEVfUVVFVUVEKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBJOTE1X1BNVV9FTkdJTkVfQlVTWShjbGFz cywgaW5zdGFuY2UpIFwNCj4gPiArCV9fSTkxNV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0YW5jZSwg STkxNV9TQU1QTEVfQlVTWSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgSTkxNV9QTVVfRU5HSU5FX1dB SVQoY2xhc3MsIGluc3RhbmNlKSBcDQo+ID4gKwlfX0k5MTVfUE1VX0VOR0lORShjbGFzcywgaW5z dGFuY2UsIEk5MTVfU0FNUExFX1dBSVQpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEk5MTVfUE1VX0VO R0lORV9TRU1BKGNsYXNzLCBpbnN0YW5jZSkgXA0KPiA+ICsJX19JOTE1X1BNVV9FTkdJTkUoY2xh c3MsIGluc3RhbmNlLCBJOTE1X1NBTVBMRV9TRU1BKQ0KPiA+ICsNCj4gPiArI2RlZmluZSBfX0k5 MTVfUE1VX09USEVSKHgpIChfX0k5MTVfUE1VX0VOR0lORSgweGZmLCAweGZmLCAweGYpICsgMSAr ICh4KSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWSAJX19J OTE1X1BNVV9PVEhFUigwKQ0KPiA+ICsjZGVmaW5lIEk5MTVfUE1VX1JFUVVFU1RFRF9GUkVRVUVO Q1kJX19JOTE1X1BNVV9PVEhFUigxKQ0KPiA+ICsjZGVmaW5lIEk5MTVfUE1VX0VORVJHWQkJCV9f STkxNV9QTVVfT1RIRVIoMikNCj4gPiArI2RlZmluZSBJOTE1X1BNVV9JTlRFUlJVUFRTCQlfX0k5 MTVfUE1VX09USEVSKDMpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIEk5MTVfUE1VX1JDNl9SRVNJREVO Q1kJCV9fSTkxNV9QTVVfT1RIRVIoNCkNCj4gPiArI2RlZmluZSBJOTE1X1BNVV9SQzZwX1JFU0lE RU5DWQkJX19JOTE1X1BNVV9PVEhFUig1KQ0KPiA+ICsjZGVmaW5lIEk5MTVfUE1VX1JDNnBwX1JF U0lERU5DWQlfX0k5MTVfUE1VX09USEVSKDYpDQo+ID4gKw0KPiA+ICAgLyogRWFjaCByZWdpb24g aXMgYSBtaW5pbXVtIG9mIDE2aywgYW5kIHRoZXJlIGFyZSBhdCBtb3N0IDI1NSBvZiB0aGVtLg0K PiA+ICAgICovDQo+ID4gICAjZGVmaW5lIEk5MTVfTlJfVEVYX1JFR0lPTlMgMjU1CS8qIHRhYmxl IHNpemUgMmsgLSBtYXhpbXVtIGR1ZSB0byB1c2UNCj4gPiBkaWZmIC0tZ2l0IGEva2VybmVsL2V2 ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2NvcmUuYw0KPiA+IGluZGV4IDdkMzRiYzE2Y2Ex Yy4uM2I2ZWIwMTMxMjA0IDEwMDY0NA0KPiA+IC0tLSBhL2tlcm5lbC9ldmVudHMvY29yZS5jDQo+ ID4gKysrIGIva2VybmVsL2V2ZW50cy9jb3JlLmMNCj4gPiBAQCAtNzM4Miw2ICs3MzgyLDcgQEAg aW50IHBlcmZfZXZlbnRfb3ZlcmZsb3coc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LA0KPiA+ICAg ew0KPiA+ICAgCXJldHVybiBfX3BlcmZfZXZlbnRfb3ZlcmZsb3coZXZlbnQsIDEsIGRhdGEsIHJl Z3MpOw0KPiA+ICAgfQ0KPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChwZXJmX2V2ZW50X292ZXJmbG93 KTsNCj4gPiAgIA0KPiA+ICAgLyoNCj4gPiAgICAqIEdlbmVyaWMgc29mdHdhcmUgZXZlbnQgaW5m cmFzdHJ1Y3R1cmUNCj4gPiANCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18NCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdA0KPiBJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnDQo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4DQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVk ZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2ludGVsLWdmeAo=