From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Rogozhkin, Dmitry V" Subject: Re: [RFC 04/11] drm/i915/pmu: Expose a PMU interface for perf queries Date: Tue, 12 Sep 2017 02:06:23 +0000 Message-ID: <1505153053.7443.9.camel@intel.com> References: <20170911152559.7077-1-tvrtko.ursulin@linux.intel.com> <20170911152559.7077-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 mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2B82E6E545 for ; Tue, 12 Sep 2017 02:06:25 +0000 (UTC) In-Reply-To: <20170911152559.7077-5-tvrtko.ursulin@linux.intel.com> Content-Language: en-US Content-ID: <66CC5449C48E46448405DDD79B0E156F@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "tursulin@ursulin.net" Cc: "peterz@infradead.org" , "Intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCAyMDE3LTA5LTExIGF0IDE2OjI1ICswMTAwLCBUdnJ0a28gVXJzdWxpbiB3cm90ZToN Cj4gRnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4NCj4gDQo+ IEZyb206IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPg0KPiBGcm9tOiBU dnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPg0KPiBGcm9tOiBEbWl0cnkg Um9nb3poa2luIDxkbWl0cnkudi5yb2dvemhraW5AaW50ZWwuY29tPg0KPiANCj4gVGhlIGZpcnN0 IGdvYWwgaXMgdG8gYmUgYWJsZSB0byBtZWFzdXJlIEdQVSAoYW5kIGludmlkdWFsIHJpbmcpIGJ1 c3luZXNzDQo+IHdpdGhvdXQgaGF2aW5nIHRvIHBvbGwgcmVnaXN0ZXJzIGZyb20gdXNlcnNwYWNl LiAoV2hpY2ggbm90IG9ubHkgaW5jdXJzDQo+IGhvbGRpbmcgdGhlIGZvcmNld2FrZSBsb2NrIGlu ZGVmaW5pdGVseSwgcGVydHVyYmluZyB0aGUgc3lzdGVtLCBidXQgYWxzbw0KPiBydW5zIHRoZSBy aXNrIG9mIGhhbmdpbmcgdGhlIG1hY2hpbmUuKSBBcyBhbiBhbHRlcm5hdGl2ZSB3ZSBjYW4gdXNl IHRoZQ0KPiBwZXJmIGV2ZW50IGNvdW50ZXIgaW50ZXJmYWNlIHRvIHNhbXBsZSB0aGUgcmluZyBy ZWdpc3RlcnMgcGVyaW9kaWNhbGx5DQo+IGFuZCBzZW5kIHRob3NlIHJlc3VsdHMgdG8gdXNlcnNw YWNlLg0KPiANCj4gVG8gYmUgYWJsZSB0byBkbyBzbywgd2UgbmVlZCB0byBleHBvcnQgdGhlIHR3 byBzeW1ib2xzIGZyb20NCj4ga2VybmVsL2V2ZW50cy9jb3JlLmMgdG8gcmVnaXN0ZXIgYW5kIHVu cmVnaXN0ZXIgYSBQTVUgZGV2aWNlLg0KPiANCj4gdjEtdjIgKENocmlzIFdpbHNvbik6DQo+IA0K PiB2MjogVXNlIGEgY29tbW9uIHRpbWVyIGZvciB0aGUgcmluZyBzYW1wbGluZy4NCj4gDQo+IHYz OiAoVHZydGtvIFVyc3VsaW4pDQo+ICAqIERlY291cGxlIHVBUEkgZnJvbSBpOTE1IGVuZ2luZSBp ZHMuDQo+ICAqIENvbXBsZXRlIHVBUEkgZGVmaW5lcy4NCj4gICogUmVmYWN0b3Igc29tZSBjb2Rl IHRvIGhlbHBlcnMgZm9yIGNsYXJpdHkuDQo+ICAqIFNraXAgc2FtcGxpbmcgZGlzYWJsZWQgZW5n aW5lcy4NCj4gICogRXhwb3NlIGNvdW50ZXJzIGluIHN5c2ZzLg0KPiAgKiBQYXNzIGluIGZha2Ug cmVncyB0byBhdm9pZCBudWxsIHB0ciBkZXJlZiBpbiBwZXJmIGNvcmUuDQo+ICAqIENvbnZlcnQg dG8gY2xhc3MvaW5zdGFuY2UgdUFQSS4NCj4gICogVXNlIHNoYXJlZCBkcml2ZXIgY29kZSBmb3Ig cmM2IHJlc2lkZW5jeSwgcG93ZXIgYW5kIGZyZXF1ZW5jeS4NCj4gDQo+IHY0OiAoRG1pdHJ5IFJv Z296aGtpbikNCj4gICogUmVnaXN0ZXIgUE1VIHdpdGggLnRhc2tfY3R4X25yPXBlcmZfaW52YWxp ZF9jb250ZXh0DQo+ICAqIEV4cG9zZSBjcHVtYXNrIGZvciB0aGUgUE1VIHdpdGggdGhlIHNpbmds ZSBDUFUgaW4gdGhlIG1hc2sNCj4gICogUHJvcGVybHkgc3VwcG9ydCBwbXUtPnN0b3AoKTogaXQg c2hvdWxkIGNhbGwgcG11LT5yZWFkKCkNCj4gICogUHJvcGVybHkgc3VwcG9ydCBwbXUtPmRlbCgp OiBpdCBzaG91bGQgY2FsbCBzdG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSkNCj4gICogTWFrZSBw bXUuYnVzeV9zdGF0cyBhIHJlZmNvdW50ZXIgdG8gYXZvaWQgYnVzeSBzdGF0cyBnb2luZyBhd2F5 DQo+ICAgIHdpdGggc29tZSBkZWxldGVkIGV2ZW50Lg0KDQpidXN5X3N0YXRzIGFwcGVhciBsYXRl ciBpbiB0aGUgcGF0Y2ggc2VyaWVzLiBBbmQgaW4geW91ciBmaW5hbCB2ZXJzaW9uDQpidXN5X3N0 YXRzIHJlbWFpbiBib29sIHdoaWxlIHdlIHJlbHkgb24gZXZlbnRzIHJlZmNvdW50aW5nLiBTbywg dGhpcw0KaXRlbSBpcyBtaXNsZWFkaW5nLiBDb3VsZCB5b3UsIHBsZWFzZSwgY2hhbmdlIGl0IGdp dmluZyBhIGNyZWRpdCB0bw0KZ2VuZXJhbCByZWYtY291bnRpbmcgb2YgZXZlbnRzIHdoaWNoIHlv dSBoYXZlIHJld3JvdGUgZm9yIHY1IG9mIHRoaXMNCnBhdGNoPw0KDQo+ICAqIEV4cG9zZSBjcHVt YXNrIGZvciBpOTE1IFBNVSB0byBhdm9pZCBtdWx0aXBsZSBldmVudHMgY3JlYXRpb24gb2YNCj4g ICAgdGhlIHNhbWUgdHlwZSBmb2xsb3dlZCBieSBjb3VudGVyIGFnZ3JlZ2F0aW9uIGJ5IHBlcmYt c3RhdC4NCj4gICogVHJhY2sgQ1BVcyBnZXR0aW5nIG9ubGluZS9vZmZsaW5lIHRvIG1pZ3JhdGUg cGVyZiBjb250ZXh0LiBJZiAobGlrZWx5KQ0KPiAgICBjcHVtYXNrIHdpbGwgaW5pdGlhbGx5IHNl dCBDUFUwLCBDT05GSUdfQk9PVFBBUkFNX0hPVFBMVUdfQ1BVMCB3aWxsIGJlDQo+ICAgIG5lZWRl ZCB0byBzZWUgZWZmZWN0IG9mIENQVSBzdGF0dXMgdHJhY2tpbmcuDQo+ICAqIEVuZCByZXN1bHQg aXMgdGhhdCBvbmx5IGdsb2JhbCBldmVudHMgYXJlIHN1cHBvcnRlZCBhbmQgcGVyZiBzdGF0DQo+ ICAgIHdvcmtzIGNvcnJlY3RseS4NCj4gICogRGVueSBwZXJmIGRyaXZlciBsZXZlbCBzYW1wbGlu ZyAtIGl0IGlzIHByb2hpYml0ZWQgZm9yIHVuY29yZSBQTVUuDQo+IA0KPiB2NTogKFR2cnRrbyBV cnN1bGluKQ0KPiANCj4gICogRG9uJ3QgaGFyZGNvZGUgbnVtYmVyIG9mIGVuZ2luZSBzYW1wbGVy cy4NCj4gICogUmV3cml0ZSBldmVudCByZWYtY291bnRpbmcgZm9yIGNvcnJlY3RuZXNzIGFuZCBz aW1wbGljaXR5Lg0KPiAgKiBTdG9yZSBpbml0aWFsIGNvdW50ZXIgdmFsdWUgd2hlbiBzdGFydGlu ZyBhbHJlYWR5IGVuYWJsZWQgZXZlbnRzDQo+ICAgIHRvIGNvcnJlY3RseSByZXBvcnQgdmFsdWVz IHRvIGFsbCBsaXN0ZW5lcnMuDQo+ICAqIEZpeCBSQzYgcmVzaWRlbmN5IHJlYWRvdXQuDQo+ICAq IENvbW1lbnRzLCBHUEwgaGVhZGVyLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29u IDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+DQo+IFNpZ25lZC1vZmYtYnk6IFR2cnRrbyBVcnN1 bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IERtaXRyeSBS b2dvemhraW4gPGRtaXRyeS52LnJvZ296aGtpbkBpbnRlbC5jb20+DQo+IENjOiBUdnJ0a28gVXJz dWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPg0KPiBDYzogQ2hyaXMgV2lsc29uIDxjaHJp c0BjaHJpcy13aWxzb24uY28udWs+DQo+IENjOiBEbWl0cnkgUm9nb3poa2luIDxkbWl0cnkudi5y b2dvemhraW5AaW50ZWwuY29tPg0KPiBDYzogUGV0ZXIgWmlqbHN0cmEgPHBldGVyekBpbmZyYWRl YWQub3JnPg0KPiAtLS0NCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAg ICB8ICAgMSArDQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jICAgICAgICAgfCAg IDIgKw0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAgIHwgIDc2ICsr KysNCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMgICAgICAgICB8IDY4NiArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9yZWcuaCAgICAgICAgIHwgICAzICsNCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Vu Z2luZV9jcy5jICB8ICAxMCArDQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVm ZmVyLmMgfCAgMjUgKysNCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIu aCB8ICAyNSArKw0KPiAgaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oICAgICAgICAgICAgIHwg IDU4ICsrKw0KPiAgOSBmaWxlcyBjaGFuZ2VkLCA4ODYgaW5zZXJ0aW9ucygrKQ0KPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMNCj4gDQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L01ha2VmaWxlDQo+IGluZGV4IDFjYjgwNTlhM2ExNi4uN2IzYTBlY2E2MmI2IDEwMDY0NA0K PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQ0KPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9NYWtlZmlsZQ0KPiBAQCAtMjYsNiArMjYsNyBAQCBpOTE1LXkgOj0gaTkxNV9k cnYubyBcDQo+ICANCj4gIGk5MTUtJChDT05GSUdfQ09NUEFUKSAgICs9IGk5MTVfaW9jMzIubw0K PiAgaTkxNS0kKENPTkZJR19ERUJVR19GUykgKz0gaTkxNV9kZWJ1Z2ZzLm8gaW50ZWxfcGlwZV9j cmMubw0KPiAraTkxNS0kKENPTkZJR19QRVJGX0VWRU5UUykgKz0gaTkxNV9wbXUubw0KPiAgDQo+ ICAjIEdFTSBjb2RlDQo+ICBpOTE1LXkgKz0gaTkxNV9jbWRfcGFyc2VyLm8gXA0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZHJ2LmMNCj4gaW5kZXggNWMxMTFlYTk2ZTgwLi5iMWY5NmViMWJlMTYgMTAwNjQ0 DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMNCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYw0KPiBAQCAtMTE5Niw2ICsxMTk2LDcgQEAgc3RhdGlj IHZvaWQgaTkxNV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KQ0KPiAgCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSAmZGV2X3ByaXYtPmRybTsNCj4gIA0K PiAgCWk5MTVfZ2VtX3Nocmlua2VyX2luaXQoZGV2X3ByaXYpOw0KPiArCWk5MTVfcG11X3JlZ2lz dGVyKGRldl9wcml2KTsNCj4gIA0KPiAgCS8qDQo+ICAJICogTm90aWZ5IGEgdmFsaWQgc3VyZmFj ZSBhZnRlciBtb2Rlc2V0dGluZywNCj4gQEAgLTEyNTAsNiArMTI1MSw3IEBAIHN0YXRpYyB2b2lk IGk5MTVfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KQ0KPiAgCWludGVsX29wcmVnaW9uX3VucmVnaXN0ZXIoZGV2X3ByaXYpOw0KPiAgDQo+ICAJaTkx NV9wZXJmX3VucmVnaXN0ZXIoZGV2X3ByaXYpOw0KPiArCWk5MTVfcG11X3VucmVnaXN0ZXIoZGV2 X3ByaXYpOw0KPiAgDQo+ICAJaTkxNV90ZWFyZG93bl9zeXNmcyhkZXZfcHJpdik7DQo+ICAJaTkx NV9ndWNfbG9nX3VucmVnaXN0ZXIoZGV2X3ByaXYpOw0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgN Cj4gaW5kZXggNDhkYWY5NTUyMTYzLi42MjY0NmI4ZGZiN2EgMTAwNjQ0DQo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaA0KPiBAQCAtNDAsNiArNDAsNyBAQA0KPiAgI2luY2x1ZGUgPGxpbnV4L2hhc2gu aD4NCj4gICNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5oPg0KPiAgI2luY2x1ZGUgPGxpbnV4 L2tyZWYuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+DQo+ICAjaW5jbHVkZSA8 bGludXgvcG1fcW9zLmg+DQo+ICAjaW5jbHVkZSA8bGludXgvcmVzZXJ2YXRpb24uaD4NCj4gICNp bmNsdWRlIDxsaW51eC9zaG1lbV9mcy5oPg0KPiBAQCAtMjE5MCw2ICsyMTkxLDY5IEBAIHN0cnVj dCBpbnRlbF9jZGNsa19zdGF0ZSB7DQo+ICAJdW5zaWduZWQgaW50IGNkY2xrLCB2Y28sIHJlZjsN Cj4gIH07DQo+ICANCj4gK2VudW0gew0KPiArCV9fSTkxNV9TQU1QTEVfRlJFUV9BQ1QgPSAwLA0K PiArCV9fSTkxNV9TQU1QTEVfRlJFUV9SRVEsDQo+ICsJX19JOTE1X05VTV9QTVVfU0FNUExFUlMN Cj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogSG93IG1hbnkgZGlmZmVyZW50IGV2ZW50cyB3ZSB0 cmFjayBpbiB0aGUgZ2xvYmFsIFBNVSBtYXNrLg0KPiArICoNCj4gKyAqIEl0IGlzIGFsc28gdXNl ZCB0byBrbm93IHRvIG5lZWRlZCBudW1iZXIgb2YgZXZlbnQgcmVmZXJlbmNlIGNvdW50ZXJzLg0K PiArICovDQo+ICsjZGVmaW5lIEk5MTVfUE1VX01BU0tfQklUUyBcDQo+ICsJKDEgPDwgSTkxNV9Q TVVfU0FNUExFX0JJVFMpICsgKEk5MTVfUE1VX0xBU1QgKyAxIC0gX19JOTE1X1BNVV9PVEhFUigw KSkNCj4gKw0KPiArc3RydWN0IGk5MTVfcG11IHsNCj4gKwkvKioNCj4gKwkgKiBAbm9kZTogTGlz dCBub2RlIGZvciBDUFUgaG90cGx1ZyBoYW5kbGluZy4NCj4gKwkgKi8NCj4gKwlzdHJ1Y3QgaGxp c3Rfbm9kZSBub2RlOw0KPiArCS8qKg0KPiArCSAqIEBiYXNlOiBQTVUgYmFzZS4NCj4gKwkgKi8N Cj4gKwlzdHJ1Y3QgcG11IGJhc2U7DQo+ICsJLyoqDQo+ICsJICogQGxvY2s6IExvY2sgcHJvdGVj dGluZyBlbmFibGUgbWFzayBhbmQgcmVmIGNvdW50IGhhbmRsaW5nLg0KPiArCSAqLw0KPiArCXNw aW5sb2NrX3QgbG9jazsNCj4gKwkvKioNCj4gKwkgKiBAdGltZXI6IFRpbWVyIGZvciBpbnRlcm5h bCBpOTE1IFBNVSBzYW1wbGluZy4NCj4gKwkgKi8NCj4gKwlzdHJ1Y3QgaHJ0aW1lciB0aW1lcjsN Cj4gKwkvKioNCj4gKwkgKiBAZW5hYmxlOiBCaXRtYXNrIG9mIGFsbCBjdXJyZW50bHkgZW5hYmxl ZCBldmVudHMuDQo+ICsJICoNCj4gKwkgKiBCaXRzIGFyZSBkZXJpdmVkIGZyb20gdUFQSSBldmVu dCBudW1iZXJzIGluIGEgd2F5IHRoYXQgbG93IDE2IGJpdHMNCj4gKwkgKiBjb3JyZXNwb25kIHRv IGVuZ2luZSBldmVudCBfc2FtcGxlXyBfdHlwZV8gKEk5MTVfU0FNUExFX1FVRVVFRCBpcw0KPiAr CSAqIGJpdCAwKSwgYW5kIGhpZ2hlciBiaXRzIGNvcnJlc3BvbmQgdG8gb3RoZXIgZXZlbnRzIChm b3IgaW5zdGFuY2UNCj4gKwkgKiBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZIGlzIGJpdCAxNiBl dGMpLg0KPiArCSAqDQo+ICsJICogSW4gb3RoZXIgd29yZHMsIGxvdyAxNiBiaXRzIGFyZSBub3Qg cGVyIGVuZ2luZSBidXQgcGVyIGVuZ2luZQ0KPiArCSAqIHNhbXBsZXIgdHlwZSwgd2hpbGUgdGhl IHVwcGVyIGJpdHMgYXJlIGRpcmVjdGx5IG1hcHBlZCB0byBvdGhlcg0KPiArCSAqIGV2ZW50IHR5 cGVzLg0KPiArCSAqLw0KPiArCXU2NCBlbmFibGU7DQo+ICsJLyoqDQo+ICsJICogQGVuYWJsZV9j b3VudDogUmVmZXJlbmNlIGNvdW50cyBmb3IgdGhlIGVuYWJsZWQgZXZlbnRzLg0KPiArCSAqDQo+ ICsJICogQXJyYXkgaW5kaWNlcyBhcmUgbWFwcGVkIGluIHRoZSBzYW1lIHdheSBhcyBiaXRzIGlu IHRoZSBAZW5hYmxlIGZpZWxkDQo+ICsJICogYW5kIHRoZXkgYXJlIHVzZWQgdG8gY29udHJvbCBz YW1wbGluZyBvbi9vZmYgd2hlbiBtdWx0aXBsZSBjbGllbnRzDQo+ICsJICogYXJlIHVzaW5nIHRo ZSBQTVUgQVBJLg0KPiArCSAqLw0KPiArCXVuc2lnbmVkIGludCBlbmFibGVfY291bnRbSTkxNV9Q TVVfTUFTS19CSVRTXTsNCj4gKwkvKioNCj4gKwkgKiBAc2FtcGxlOiBDdXJyZW50IGNvdW50ZXIg dmFsdWUgZm9yIGk5MTUgZXZlbnRzIHdoaWNoIG5lZWQgc2FtcGxpbmcuDQo+ICsJICoNCj4gKwkg KiBUaGVzZSBjb3VudGVycyBhcmUgdXBkYXRlZCBmcm9tIHRoZSBpOTE1IFBNVSBzYW1wbGluZyB0 aW1lci4NCj4gKwkgKg0KPiArCSAqIE9ubHkgZ2xvYmFsIGNvdW50ZXJzIGFyZSBoZWxkIGhlcmUs IHdoaWxlIHRoZSBwZXItZW5naW5lIG9uZXMgYXJlIGluDQo+ICsJICogc3RydWN0IGludGVsX2Vu Z2luZV9jcy4NCj4gKwkgKi8NCj4gKwl1NjQgc2FtcGxlW19fSTkxNV9OVU1fUE1VX1NBTVBMRVJT XTsNCj4gK307DQo+ICsNCj4gIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlIHsNCj4gIAlzdHJ1Y3Qg ZHJtX2RldmljZSBkcm07DQo+ICANCj4gQEAgLTIyMzgsNiArMjMwMiw3IEBAIHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlIHsNCj4gIAlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlX2RldjsNCj4gIAlzdHJ1 Y3QgaTkxNV9nZW1fY29udGV4dCAqa2VybmVsX2NvbnRleHQ7DQo+ICAJc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lW0k5MTVfTlVNX0VOR0lORVNdOw0KPiArCXN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZV9jbGFzc1tNQVhfRU5HSU5FX0NMQVNTICsgMV1bTUFYX0VOR0lORV9JTlNU QU5DRSArIDFdOw0KPiAgCXN0cnVjdCBpOTE1X3ZtYSAqc2VtYXBob3JlOw0KPiAgDQo+ICAJc3Ry dWN0IGRybV9kbWFfaGFuZGxlICpzdGF0dXNfcGFnZV9kbWFoOw0KPiBAQCAtMjY5OCw2ICsyNzYz LDggQEAgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgew0KPiAgCQlpbnQJaXJxOw0KPiAgCX0gbHBl X2F1ZGlvOw0KPiAgDQo+ICsJc3RydWN0IGk5MTVfcG11IHBtdTsNCj4gKw0KPiAgCS8qDQo+ICAJ ICogTk9URTogVGhpcyBpcyB0aGUgZHJpMS91bXMgZHVuZ2VvbiwgZG9uJ3QgYWRkIHN0dWZmIGhl cmUuIFlvdXIgcGF0Y2gNCj4gIAkgKiB3aWxsIGJlIHJlamVjdGVkLiBJbnN0ZWFkIGxvb2sgZm9y IGEgYmV0dGVyIHBsYWNlLg0KPiBAQCAtMzkxOCw2ICszOTg1LDE1IEBAIGV4dGVybiB2b2lkIGk5 MTVfcGVyZl9maW5pKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7DQo+ICBleHRl cm4gdm9pZCBpOTE1X3BlcmZfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsNCj4gIGV4dGVybiB2b2lkIGk5MTVfcGVyZl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdik7DQo+ICANCj4gKy8qIGk5MTVfcG11LmMgKi8NCj4gKyNpZmRl ZiBDT05GSUdfUEVSRl9FVkVOVFMNCj4gK2V4dGVybiB2b2lkIGk5MTVfcG11X3JlZ2lzdGVyKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsNCj4gK2V4dGVybiB2b2lkIGk5MTVfcG11X3Vu cmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpOw0KPiArI2Vsc2UNCj4gK3N0 YXRpYyBpbmxpbmUgdm9pZCBpOTE1X3BtdV9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSkge30NCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X3BtdV91bnJlZ2lzdGVyKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KSB7fQ0KPiArI2VuZGlmDQo+ICsNCj4gIC8qIGk5 MTVfc3VzcGVuZC5jICovDQo+ICBleHRlcm4gaW50IGk5MTVfc2F2ZV9zdGF0ZShzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOw0KPiAgZXh0ZXJuIGludCBpOTE1X3Jlc3RvcmVfc3Rh dGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsNCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcG11LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3BtdS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMmVj ODkyZTU3MTQzDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9wbXUuYw0KPiBAQCAtMCwwICsxLDY4NiBAQA0KPiArLyoNCj4gKyAqIENvcHlyaWdodCDC qSAyMDE3IEludGVsIENvcnBvcmF0aW9uDQo+ICsgKg0KPiArICogUGVybWlzc2lvbiBpcyBoZXJl YnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGENCj4g KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksDQo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uDQo+ICsgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwNCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQ0KPiArICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCj4gKyAq DQo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0DQo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlDQo+ICsgKiBT b2Z0d2FyZS4NCj4gKyAqDQo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwg V0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KPiArICogSU1QTElFRCwg SU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFksDQo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwNCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSDQo+ ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORw0KPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04g V0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUw0KPiArICogSU4g VEhFIFNPRlRXQVJFLg0KPiArICoNCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvcGVy Zl9ldmVudC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCj4gKw0KPiArI2lu Y2x1ZGUgImk5MTVfZHJ2LmgiDQo+ICsjaW5jbHVkZSAiaW50ZWxfcmluZ2J1ZmZlci5oIg0KPiAr DQo+ICsvKiBGcmVxdWVuY3kgZm9yIHRoZSBzYW1wbGluZyB0aW1lciBmb3IgZXZlbnRzIHdoaWNo IG5lZWQgaXQuICovDQo+ICsjZGVmaW5lIEZSRVFVRU5DWSAyMDANCj4gKyNkZWZpbmUgUEVSSU9E IG1heF90KHU2NCwgMTAwMDAsIE5TRUNfUEVSX1NFQyAvIEZSRVFVRU5DWSkNCj4gKw0KPiArI2Rl ZmluZSBFTkdJTkVfU0FNUExFX01BU0sgXA0KPiArCShCSVQoSTkxNV9TQU1QTEVfUVVFVUVEKSB8 IFwNCj4gKwkgQklUKEk5MTVfU0FNUExFX0JVU1kpIHwgXA0KPiArCSBCSVQoSTkxNV9TQU1QTEVf V0FJVCkgfCBcDQo+ICsJIEJJVChJOTE1X1NBTVBMRV9TRU1BKSkNCj4gKw0KPiArI2RlZmluZSBF TkdJTkVfU0FNUExFX0JJVFMgKDEgPDwgSTkxNV9QTVVfU0FNUExFX0JJVFMpDQo+ICsNCj4gK3N0 YXRpYyBjcHVtYXNrX3QgaTkxNV9wbXVfY3B1bWFzayA9IENQVV9NQVNLX05PTkU7DQo+ICsNCj4g K3N0YXRpYyB1OCBlbmdpbmVfY29uZmlnX3NhbXBsZSh1NjQgY29uZmlnKQ0KPiArew0KPiArCXJl dHVybiBjb25maWcgJiBJOTE1X1BNVV9TQU1QTEVfTUFTSzsNCj4gK30NCj4gKw0KPiArc3RhdGlj IHU4IGVuZ2luZV9ldmVudF9zYW1wbGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQ0KPiArew0K PiArCXJldHVybiBlbmdpbmVfY29uZmlnX3NhbXBsZShldmVudC0+YXR0ci5jb25maWcpOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdTggZW5naW5lX2V2ZW50X2NsYXNzKHN0cnVjdCBwZXJmX2V2ZW50 ICpldmVudCkNCj4gK3sNCj4gKwlyZXR1cm4gKGV2ZW50LT5hdHRyLmNvbmZpZyA+PiBJOTE1X1BN VV9DTEFTU19TSElGVCkgJiAweGZmOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdTggZW5naW5lX2V2 ZW50X2luc3RhbmNlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkNCj4gK3sNCj4gKwlyZXR1cm4g KGV2ZW50LT5hdHRyLmNvbmZpZyA+PiBJOTE1X1BNVV9TQU1QTEVfQklUUykgJiAweGZmOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBpc19lbmdpbmVfY29uZmlnKHU2NCBjb25maWcpDQo+ICt7 DQo+ICsJcmV0dXJuIGNvbmZpZyA8IF9fSTkxNV9QTVVfT1RIRVIoMCk7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyB1bnNpZ25lZCBpbnQgY29uZmlnX2VuYWJsZWRfYml0KHU2NCBjb25maWcpDQo+ICt7 DQo+ICsJaWYgKGlzX2VuZ2luZV9jb25maWcoY29uZmlnKSkNCj4gKwkJcmV0dXJuIGVuZ2luZV9j b25maWdfc2FtcGxlKGNvbmZpZyk7DQo+ICsJZWxzZQ0KPiArCQlyZXR1cm4gRU5HSU5FX1NBTVBM RV9CSVRTICsgKGNvbmZpZyAtIF9fSTkxNV9QTVVfT1RIRVIoMCkpOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdTY0IGNvbmZpZ19lbmFibGVkX21hc2sodTY0IGNvbmZpZykNCj4gK3sNCj4gKwlyZXR1 cm4gQklUX1VMTChjb25maWdfZW5hYmxlZF9iaXQoY29uZmlnKSk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBib29sIGlzX2VuZ2luZV9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpDQo+ICt7 DQo+ICsJcmV0dXJuIGlzX2VuZ2luZV9jb25maWcoZXZlbnQtPmF0dHIuY29uZmlnKTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIHVuc2lnbmVkIGludCBldmVudF9lbmFibGVkX2JpdChzdHJ1Y3QgcGVy Zl9ldmVudCAqZXZlbnQpDQo+ICt7DQo+ICsJcmV0dXJuIGNvbmZpZ19lbmFibGVkX2JpdChldmVu dC0+YXR0ci5jb25maWcpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgYm9vbCBncmFiX2ZvcmNld2Fr ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgYm9vbCBmdykNCj4gK3sNCj4gKwlpZiAo IWZ3KQ0KPiArCQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX2dldChpOTE1LCBGT1JDRVdBS0VfQUxM KTsNCj4gKw0KPiArCXJldHVybiB0cnVlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBlbmdp bmVzX3NhbXBsZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpDQo+ICt7DQo+ICsJ c3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOw0KPiArCWVudW0gaW50ZWxfZW5naW5lX2lk IGlkOw0KPiArCWJvb2wgZncgPSBmYWxzZTsNCj4gKw0KPiArCWlmICgoZGV2X3ByaXYtPnBtdS5l bmFibGUgJiBFTkdJTkVfU0FNUExFX01BU0spID09IDApDQo+ICsJCXJldHVybjsNCj4gKw0KPiAr CWlmICghZGV2X3ByaXYtPmd0LmF3YWtlKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlpZiAoIWlu dGVsX3J1bnRpbWVfcG1fZ2V0X2lmX2luX3VzZShkZXZfcHJpdikpDQo+ICsJCXJldHVybjsNCj4g Kw0KPiArCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGRldl9wcml2LCBpZCkgew0KPiArCQl1MzIg ZW5hYmxlID0gZW5naW5lLT5wbXUuZW5hYmxlOw0KPiArDQo+ICsJCWlmIChpOTE1X3NlcW5vX3Bh c3NlZChpbnRlbF9lbmdpbmVfZ2V0X3NlcW5vKGVuZ2luZSksDQo+ICsJCQkJICAgICAgaW50ZWxf ZW5naW5lX2xhc3Rfc3VibWl0KGVuZ2luZSkpKQ0KPiArCQkJY29udGludWU7DQo+ICsNCj4gKwkJ aWYgKGVuYWJsZSAmIEJJVChJOTE1X1NBTVBMRV9RVUVVRUQpKQ0KPiArCQkJZW5naW5lLT5wbXUu c2FtcGxlW0k5MTVfU0FNUExFX1FVRVVFRF0gKz0gUEVSSU9EOw0KPiArDQo+ICsJCWlmIChlbmFi bGUgJiBCSVQoSTkxNV9TQU1QTEVfQlVTWSkpIHsNCj4gKwkJCXUzMiB2YWw7DQo+ICsNCj4gKwkJ CWZ3ID0gZ3JhYl9mb3JjZXdha2UoZGV2X3ByaXYsIGZ3KTsNCj4gKwkJCXZhbCA9IEk5MTVfUkVB RF9GVyhSSU5HX01JX01PREUoZW5naW5lLT5tbWlvX2Jhc2UpKTsNCj4gKwkJCWlmICghKHZhbCAm IE1PREVfSURMRSkpDQo+ICsJCQkJZW5naW5lLT5wbXUuc2FtcGxlW0k5MTVfU0FNUExFX0JVU1ld ICs9IFBFUklPRDsNCj4gKwkJfQ0KPiArDQo+ICsJCWlmIChlbmFibGUgJiAoQklUKEk5MTVfU0FN UExFX1dBSVQpIHwgQklUKEk5MTVfU0FNUExFX1NFTUEpKSkgew0KPiArCQkJdTMyIHZhbDsNCj4g Kw0KPiArCQkJZncgPSBncmFiX2ZvcmNld2FrZShkZXZfcHJpdiwgZncpOw0KPiArCQkJdmFsID0g STkxNV9SRUFEX0ZXKFJJTkdfQ1RMKGVuZ2luZS0+bW1pb19iYXNlKSk7DQo+ICsJCQlpZiAoKGVu YWJsZSAmIEJJVChJOTE1X1NBTVBMRV9XQUlUKSkgJiYNCj4gKwkJCSAgICAodmFsICYgUklOR19X QUlUKSkNCj4gKwkJCQllbmdpbmUtPnBtdS5zYW1wbGVbSTkxNV9TQU1QTEVfV0FJVF0gKz0gUEVS SU9EOw0KPiArCQkJaWYgKChlbmFibGUgJiBCSVQoSTkxNV9TQU1QTEVfU0VNQSkpICYmDQo+ICsJ CQkgICAgKHZhbCAmIFJJTkdfV0FJVF9TRU1BUEhPUkUpKQ0KPiArCQkJCWVuZ2luZS0+cG11LnNh bXBsZVtJOTE1X1NBTVBMRV9TRU1BXSArPSBQRVJJT0Q7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4g KwlpZiAoZncpDQo+ICsJCWludGVsX3VuY29yZV9mb3JjZXdha2VfcHV0KGRldl9wcml2LCBGT1JD RVdBS0VfQUxMKTsNCj4gKwlpbnRlbF9ydW50aW1lX3BtX3B1dChkZXZfcHJpdik7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkIGZyZXF1ZW5jeV9zYW1wbGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQ0KPiArew0KPiArCWlmIChkZXZfcHJpdi0+cG11LmVuYWJsZSAmDQo+ICsJ ICAgIGNvbmZpZ19lbmFibGVkX21hc2soSTkxNV9QTVVfQUNUVUFMX0ZSRVFVRU5DWSkpIHsNCj4g KwkJdTY0IHZhbDsNCj4gKw0KPiArCQl2YWwgPSBkZXZfcHJpdi0+cnBzLmN1cl9mcmVxOw0KPiAr CQlpZiAoZGV2X3ByaXYtPmd0LmF3YWtlICYmDQo+ICsJCSAgICBpbnRlbF9ydW50aW1lX3BtX2dl dF9pZl9pbl91c2UoZGV2X3ByaXYpKSB7DQo+ICsJCQl2YWwgPSBpbnRlbF9nZXRfY2FnZihkZXZf cHJpdiwNCj4gKwkJCQkJICAgICBJOTE1X1JFQURfTk9UUkFDRShHRU42X1JQU1RBVDEpKTsNCj4g KwkJCWludGVsX3J1bnRpbWVfcG1fcHV0KGRldl9wcml2KTsNCj4gKwkJfQ0KPiArCQl2YWwgPSBp bnRlbF9ncHVfZnJlcShkZXZfcHJpdiwgdmFsKTsNCj4gKwkJZGV2X3ByaXYtPnBtdS5zYW1wbGVb X19JOTE1X1NBTVBMRV9GUkVRX0FDVF0gKz0gdmFsICogUEVSSU9EOw0KPiArCX0NCj4gKw0KPiAr CWlmIChkZXZfcHJpdi0+cG11LmVuYWJsZSAmDQo+ICsJICAgIGNvbmZpZ19lbmFibGVkX21hc2so STkxNV9QTVVfUkVRVUVTVEVEX0ZSRVFVRU5DWSkpIHsNCj4gKwkJdTY0IHZhbCA9IGludGVsX2dw dV9mcmVxKGRldl9wcml2LCBkZXZfcHJpdi0+cnBzLmN1cl9mcmVxKTsNCj4gKwkJZGV2X3ByaXYt PnBtdS5zYW1wbGVbX19JOTE1X1NBTVBMRV9GUkVRX1JFUV0gKz0gdmFsICogUEVSSU9EOw0KPiAr CX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGk5MTVfc2FtcGxl KHN0cnVjdCBocnRpbWVyICpocnRpbWVyKQ0KPiArew0KPiArCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1ID0NCj4gKwkJY29udGFpbmVyX29mKGhydGltZXIsIHN0cnVjdCBkcm1faTkxNV9w cml2YXRlLCBwbXUudGltZXIpOw0KPiArDQo+ICsJaWYgKGk5MTUtPnBtdS5lbmFibGUgPT0gMCkN Cj4gKwkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOw0KPiArDQo+ICsJZW5naW5lc19zYW1wbGUo aTkxNSk7DQo+ICsJZnJlcXVlbmN5X3NhbXBsZShpOTE1KTsNCj4gKw0KPiArCWhydGltZXJfZm9y d2FyZF9ub3coaHJ0aW1lciwgbnNfdG9fa3RpbWUoUEVSSU9EKSk7DQo+ICsJcmV0dXJuIEhSVElN RVJfUkVTVEFSVDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHU2NCBjb3VudF9pbnRlcnJ1cHRzKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQ0KPiArew0KPiArCS8qIG9wZW4tY29kZWQga3N0 YXRfaXJxcygpICovDQo+ICsJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaTkx NS0+ZHJtLnBkZXYtPmlycSk7DQo+ICsJdTY0IHN1bSA9IDA7DQo+ICsJaW50IGNwdTsNCj4gKw0K PiArCWlmICghZGVzYyB8fCAhZGVzYy0+a3N0YXRfaXJxcykNCj4gKwkJcmV0dXJuIDA7DQo+ICsN Cj4gKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQ0KPiArCQlzdW0gKz0gKnBlcl9jcHVfcHRy KGRlc2MtPmtzdGF0X2lycXMsIGNwdSk7DQo+ICsNCj4gKwlyZXR1cm4gc3VtOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9kZXN0cm95KHN0cnVjdCBwZXJmX2V2ZW50 ICpldmVudCkNCj4gK3sNCj4gKwlXQVJOX09OKGV2ZW50LT5wYXJlbnQpOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IGVuZ2luZV9ldmVudF9pbml0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkN Cj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9DQo+ICsJCWNvbnRhaW5l cl9vZihldmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7DQo+ICsNCj4gKwlpZiAo IWludGVsX2VuZ2luZV9sb29rdXBfdXNlcihpOTE1LCBlbmdpbmVfZXZlbnRfY2xhc3MoZXZlbnQp LA0KPiArCQkJCSAgICAgIGVuZ2luZV9ldmVudF9pbnN0YW5jZShldmVudCkpKQ0KPiArCQlyZXR1 cm4gLUVOT0RFVjsNCj4gKw0KPiArCXN3aXRjaCAoZW5naW5lX2V2ZW50X3NhbXBsZShldmVudCkp IHsNCj4gKwljYXNlIEk5MTVfU0FNUExFX1FVRVVFRDoNCj4gKwljYXNlIEk5MTVfU0FNUExFX0JV U1k6DQo+ICsJY2FzZSBJOTE1X1NBTVBMRV9XQUlUOg0KPiArCQlicmVhazsNCj4gKwljYXNlIEk5 MTVfU0FNUExFX1NFTUE6DQo+ICsJCWlmIChJTlRFTF9HRU4oaTkxNSkgPCA2KQ0KPiArCQkJcmV0 dXJuIC1FTk9ERVY7DQo+ICsJCWJyZWFrOw0KPiArCWRlZmF1bHQ6DQo+ICsJCXJldHVybiAtRU5P RU5UOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50 IGk5MTVfcG11X2V2ZW50X2luaXQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQ0KPiArew0KPiAr CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0NCj4gKwkJY29udGFpbmVyX29mKGV2ZW50 LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsNCj4gKwlpbnQgY3B1LCByZXQ7DQo+ICsN Cj4gKwlpZiAoZXZlbnQtPmF0dHIudHlwZSAhPSBldmVudC0+cG11LT50eXBlKQ0KPiArCQlyZXR1 cm4gLUVOT0VOVDsNCj4gKw0KPiArCS8qIHVuc3VwcG9ydGVkIG1vZGVzIGFuZCBmaWx0ZXJzICov DQo+ICsJaWYgKGV2ZW50LT5hdHRyLnNhbXBsZV9wZXJpb2QpIC8qIG5vIHNhbXBsaW5nICovDQo+ ICsJCXJldHVybiAtRUlOVkFMOw0KPiArDQo+ICsJaWYgKGhhc19icmFuY2hfc3RhY2soZXZlbnQp KQ0KPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7DQo+ICsNCj4gKwlpZiAoZXZlbnQtPmNwdSA8IDAp DQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArDQo+ICsJY3B1ID0gY3B1bWFza19hbnlfYW5kKCZp OTE1X3BtdV9jcHVtYXNrLA0KPiArCQkJICAgICAgdG9wb2xvZ3lfc2libGluZ19jcHVtYXNrKGV2 ZW50LT5jcHUpKTsNCj4gKwlpZiAoY3B1ID49IG5yX2NwdV9pZHMpDQo+ICsJCXJldHVybiAtRU5P REVWOw0KPiArDQo+ICsJcmV0ID0gMDsNCj4gKwlpZiAoaXNfZW5naW5lX2V2ZW50KGV2ZW50KSkg ew0KPiArCQlyZXQgPSBlbmdpbmVfZXZlbnRfaW5pdChldmVudCk7DQo+ICsJfSBlbHNlIHN3aXRj aCAoZXZlbnQtPmF0dHIuY29uZmlnKSB7DQo+ICsJY2FzZSBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVF TkNZOg0KPiArCQlpZiAoSVNfVkFMTEVZVklFVyhpOTE1KSB8fCBJU19DSEVSUllWSUVXKGk5MTUp KQ0KPiArCQkJcmV0ID0gLUVOT0RFVjsgLyogcmVxdWlyZXMgYSBtdXRleCBmb3Igc2FtcGxpbmch ICovDQo+ICsJY2FzZSBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZOg0KPiArCWNhc2UgSTkx NV9QTVVfRU5FUkdZOg0KPiArCWNhc2UgSTkxNV9QTVVfUkM2X1JFU0lERU5DWToNCj4gKwljYXNl IEk5MTVfUE1VX1JDNnBfUkVTSURFTkNZOg0KPiArCWNhc2UgSTkxNV9QTVVfUkM2cHBfUkVTSURF TkNZOg0KPiArCQlpZiAoSU5URUxfR0VOKGk5MTUpIDwgNikNCj4gKwkJCXJldCA9IC1FTk9ERVY7 DQo+ICsJCWJyZWFrOw0KPiArCX0NCj4gKwlpZiAocmV0KQ0KPiArCQlyZXR1cm4gcmV0Ow0KPiAr DQo+ICsJZXZlbnQtPmNwdSA9IGNwdTsNCj4gKwlpZiAoIWV2ZW50LT5wYXJlbnQpDQo+ICsJCWV2 ZW50LT5kZXN0cm95ID0gaTkxNV9wbXVfZXZlbnRfZGVzdHJveTsNCj4gKw0KPiArCXJldHVybiAw Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdTY0IF9faTkxNV9wbXVfZXZlbnRfcmVhZChzdHJ1Y3Qg cGVyZl9ldmVudCAqZXZlbnQpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5 MTUgPQ0KPiArCQljb250YWluZXJfb2YoZXZlbnQtPnBtdSwgdHlwZW9mKCppOTE1KSwgcG11LmJh c2UpOw0KPiArCXU2NCB2YWwgPSAwOw0KPiArDQo+ICsJaWYgKGlzX2VuZ2luZV9ldmVudChldmVu dCkpIHsNCj4gKwkJdTggc2FtcGxlID0gZW5naW5lX2V2ZW50X3NhbXBsZShldmVudCk7DQo+ICsJ CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsNCj4gKw0KPiArCQllbmdpbmUgPSBpbnRl bF9lbmdpbmVfbG9va3VwX3VzZXIoaTkxNSwNCj4gKwkJCQkJCSAgZW5naW5lX2V2ZW50X2NsYXNz KGV2ZW50KSwNCj4gKwkJCQkJCSAgZW5naW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSk7DQo+ICsN Cj4gKwkJaWYgKFdBUk5fT05fT05DRSghZW5naW5lKSkgew0KPiArCQkJLyogRG8gbm90aGluZyAq Lw0KPiArCQl9IGVsc2Ugew0KPiArCQkJdmFsID0gZW5naW5lLT5wbXUuc2FtcGxlW3NhbXBsZV07 DQo+ICsJCX0NCj4gKwl9IGVsc2Ugc3dpdGNoIChldmVudC0+YXR0ci5jb25maWcpIHsNCj4gKwlj YXNlIEk5MTVfUE1VX0FDVFVBTF9GUkVRVUVOQ1k6DQo+ICsJCXZhbCA9IGk5MTUtPnBtdS5zYW1w bGVbX19JOTE1X1NBTVBMRV9GUkVRX0FDVF07DQo+ICsJCWJyZWFrOw0KPiArCWNhc2UgSTkxNV9Q TVVfUkVRVUVTVEVEX0ZSRVFVRU5DWToNCj4gKwkJdmFsID0gaTkxNS0+cG11LnNhbXBsZVtfX0k5 MTVfU0FNUExFX0ZSRVFfUkVRXTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBJOTE1X1BNVV9FTkVS R1k6DQo+ICsJCXZhbCA9IGludGVsX2VuZXJneV91SihpOTE1KTsNCj4gKwkJYnJlYWs7DQo+ICsJ Y2FzZSBJOTE1X1BNVV9JTlRFUlJVUFRTOg0KPiArCQl2YWwgPSBjb3VudF9pbnRlcnJ1cHRzKGk5 MTUpOw0KPiArCQlicmVhazsNCj4gKwljYXNlIEk5MTVfUE1VX1JDNl9SRVNJREVOQ1k6DQo+ICsJ CXZhbCA9IGludGVsX3JjNl9yZXNpZGVuY3lfbnMoaTkxNSwNCj4gKwkJCQkJICAgICBJU19WQUxM RVlWSUVXKGk5MTUpID8NCj4gKwkJCQkJICAgICBWTFZfR1RfUkVOREVSX1JDNiA6DQo+ICsJCQkJ CSAgICAgR0VONl9HVF9HRlhfUkM2KTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBJOTE1X1BNVV9S QzZwX1JFU0lERU5DWToNCj4gKwkJaWYgKCFJU19WQUxMRVlWSUVXKGk5MTUpKQ0KPiArCQkJdmFs ID0gaW50ZWxfcmM2X3Jlc2lkZW5jeV9ucyhpOTE1LCBHRU42X0dUX0dGWF9SQzZwKTsNCj4gKwkJ YnJlYWs7DQo+ICsJY2FzZSBJOTE1X1BNVV9SQzZwcF9SRVNJREVOQ1k6DQo+ICsJCWlmICghSVNf VkFMTEVZVklFVyhpOTE1KSkNCj4gKwkJCXZhbCA9IGludGVsX3JjNl9yZXNpZGVuY3lfbnMoaTkx NSwgR0VONl9HVF9HRlhfUkM2cHApOw0KPiArCQlicmVhazsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1 cm4gdmFsOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBpOTE1X3BtdV9ldmVudF9yZWFkKHN0 cnVjdCBwZXJmX2V2ZW50ICpldmVudCkNCj4gK3sNCj4gKw0KPiArCWxvY2FsNjRfc2V0KCZldmVu dC0+Y291bnQsDQo+ICsJCSAgICBfX2k5MTVfcG11X2V2ZW50X3JlYWQoZXZlbnQpIC0NCj4gKwkJ ICAgIGxvY2FsNjRfcmVhZCgmZXZlbnQtPmh3LnByZXZfY291bnQpKTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIHZvaWQgaTkxNV9wbXVfZW5hYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkNCj4g K3sNCj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9DQo+ICsJCWNvbnRhaW5lcl9v ZihldmVudC0+cG11LCB0eXBlb2YoKmk5MTUpLCBwbXUuYmFzZSk7DQo+ICsJdW5zaWduZWQgaW50 IGJpdCA9IGV2ZW50X2VuYWJsZWRfYml0KGV2ZW50KTsNCj4gKwl1bnNpZ25lZCBsb25nIGZsYWdz Ow0KPiArDQo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmk5MTUtPnBtdS5sb2NrLCBmbGFncyk7DQo+ ICsNCj4gKwkvKg0KPiArCSAqIFN0YXJ0IHRoZSBzYW1wbGluZyB0aW1lciB3aGVuIGVuYWJsaW5n IHRoZSBmaXJzdCBldmVudC4NCj4gKwkgKi8NCj4gKwlpZiAoaTkxNS0+cG11LmVuYWJsZSA9PSAw KQ0KPiArCQlocnRpbWVyX3N0YXJ0X3JhbmdlX25zKCZpOTE1LT5wbXUudGltZXIsDQo+ICsJCQkJ ICAgICAgIG5zX3RvX2t0aW1lKFBFUklPRCksIDAsDQo+ICsJCQkJICAgICAgIEhSVElNRVJfTU9E RV9SRUxfUElOTkVEKTsNCj4gKw0KPiArCS8qDQo+ICsJICogVXBkYXRlIHRoZSBiaXRtYXNrIG9m IGVuYWJsZWQgZXZlbnRzIGFuZCBpbmNyZW1lbnQNCj4gKwkgKiB0aGUgZXZlbnQgcmVmZXJlbmNl IGNvdW50ZXIuDQo+ICsJICovDQo+ICsJR0VNX0JVR19PTihiaXQgPj0gSTkxNV9QTVVfTUFTS19C SVRTKTsNCj4gKwlHRU1fQlVHX09OKGk5MTUtPnBtdS5lbmFibGVfY291bnRbYml0XSA9PSB+MCk7 DQo+ICsJaTkxNS0+cG11LmVuYWJsZSB8PSBCSVRfVUxMKGJpdCk7DQo+ICsJaTkxNS0+cG11LmVu YWJsZV9jb3VudFtiaXRdKys7DQo+ICsNCj4gKwkvKg0KPiArCSAqIEZvciBwZXItZW5naW5lIGV2 ZW50cyB0aGUgYml0bWFzayBhbmQgcmVmZXJlbmNlIGNvdW50aW5nDQo+ICsJICogaXMgc3RvcmVk IHBlciBlbmdpbmUuDQo+ICsJICovDQo+ICsJaWYgKGlzX2VuZ2luZV9ldmVudChldmVudCkpIHsN Cj4gKwkJdTggc2FtcGxlID0gZW5naW5lX2V2ZW50X3NhbXBsZShldmVudCk7DQo+ICsJCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsNCj4gKw0KPiArCQllbmdpbmUgPSBpbnRlbF9lbmdp bmVfbG9va3VwX3VzZXIoaTkxNSwNCj4gKwkJCQkJCSAgZW5naW5lX2V2ZW50X2NsYXNzKGV2ZW50 KSwNCj4gKwkJCQkJCSAgZW5naW5lX2V2ZW50X2luc3RhbmNlKGV2ZW50KSk7DQo+ICsJCUdFTV9C VUdfT04oIWVuZ2luZSk7DQo+ICsJCWVuZ2luZS0+cG11LmVuYWJsZSB8PSBCSVQoc2FtcGxlKTsN Cj4gKw0KPiArCQlHRU1fQlVHX09OKHNhbXBsZSA+PSBJOTE1X1BNVV9TQU1QTEVfQklUUyk7DQo+ ICsJCUdFTV9CVUdfT04oZW5naW5lLT5wbXUuZW5hYmxlX2NvdW50W3NhbXBsZV0gPT0gfjApOw0K PiArCQllbmdpbmUtPnBtdS5lbmFibGVfY291bnRbc2FtcGxlXSsrOw0KPiArCX0NCj4gKw0KPiAr CS8qDQo+ICsJICogU3RvcmUgdGhlIGN1cnJlbnQgY291bnRlciB2YWx1ZSBzbyB3ZSBjYW4gcmVw b3J0IHRoZSBjb3JyZWN0IGRlbHRhDQo+ICsJICogZm9yIGFsbCBsaXN0ZW5lcnMuIEV2ZW4gd2hl biB0aGUgZXZlbnQgd2FzIGFscmVhZHkgZW5hYmxlZCBhbmQgaGFzDQo+ICsJICogYW4gZXhpc3Rp bmcgbm9uLXplcm8gdmFsdWUuDQo+ICsJICovDQo+ICsJbG9jYWw2NF9zZXQoJmV2ZW50LT5ody5w cmV2X2NvdW50LCBfX2k5MTVfcG11X2V2ZW50X3JlYWQoZXZlbnQpKTsNCj4gKw0KPiArCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmk5MTUtPnBtdS5sb2NrLCBmbGFncyk7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyB2b2lkIGk5MTVfcG11X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQ0K PiArew0KPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0NCj4gKwkJY29udGFpbmVy X29mKGV2ZW50LT5wbXUsIHR5cGVvZigqaTkxNSksIHBtdS5iYXNlKTsNCj4gKwl1bnNpZ25lZCBp bnQgYml0ID0gZXZlbnRfZW5hYmxlZF9iaXQoZXZlbnQpOw0KPiArCXVuc2lnbmVkIGxvbmcgZmxh Z3M7DQo+ICsNCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgmaTkxNS0+cG11LmxvY2ssIGZsYWdzKTsN Cj4gKw0KPiArCWlmIChpc19lbmdpbmVfZXZlbnQoZXZlbnQpKSB7DQo+ICsJCXU4IHNhbXBsZSA9 IGVuZ2luZV9ldmVudF9zYW1wbGUoZXZlbnQpOw0KPiArCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmU7DQo+ICsNCj4gKwkJZW5naW5lID0gaW50ZWxfZW5naW5lX2xvb2t1cF91c2VyKGk5 MTUsDQo+ICsJCQkJCQkgIGVuZ2luZV9ldmVudF9jbGFzcyhldmVudCksDQo+ICsJCQkJCQkgIGVu Z2luZV9ldmVudF9pbnN0YW5jZShldmVudCkpOw0KPiArCQlHRU1fQlVHX09OKCFlbmdpbmUpOw0K PiArCQlHRU1fQlVHX09OKHNhbXBsZSA+PSBJOTE1X1BNVV9TQU1QTEVfQklUUyk7DQo+ICsJCUdF TV9CVUdfT04oZW5naW5lLT5wbXUuZW5hYmxlX2NvdW50W3NhbXBsZV0gPT0gMCk7DQo+ICsJCS8q DQo+ICsJCSAqIERlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IGFuZCBjbGVhciB0aGUgZW5h YmxlZA0KPiArCQkgKiBiaXRtYXNrIHdoZW4gdGhlIGxhc3QgbGlzdGVuZXIgb24gYW4gZXZlbnQg Z29lcyBhd2F5Lg0KPiArCQkgKi8NCj4gKwkJaWYgKC0tZW5naW5lLT5wbXUuZW5hYmxlX2NvdW50 W3NhbXBsZV0gPT0gMCkNCj4gKwkJCWVuZ2luZS0+cG11LmVuYWJsZSAmPSB+QklUKHNhbXBsZSk7 DQo+ICsJfQ0KPiArDQo+ICsJR0VNX0JVR19PTihiaXQgPj0gSTkxNV9QTVVfTUFTS19CSVRTKTsN Cj4gKwlHRU1fQlVHX09OKGk5MTUtPnBtdS5lbmFibGVfY291bnRbYml0XSA9PSAwKTsNCj4gKwkv Kg0KPiArCSAqIERlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IGFuZCBjbGVhciB0aGUgZW5h YmxlZA0KPiArCSAqIGJpdG1hc2sgd2hlbiB0aGUgbGFzdCBsaXN0ZW5lciBvbiBhbiBldmVudCBn b2VzIGF3YXkuDQo+ICsJICovDQo+ICsJaWYgKC0taTkxNS0+cG11LmVuYWJsZV9jb3VudFtiaXRd ID09IDApDQo+ICsJCWk5MTUtPnBtdS5lbmFibGUgJj0gfkJJVF9VTEwoYml0KTsNCj4gKw0KPiAr CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk5MTUtPnBtdS5sb2NrLCBmbGFncyk7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkIGk5MTVfcG11X2V2ZW50X3N0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50 ICpldmVudCwgaW50IGZsYWdzKQ0KPiArew0KPiArCWk5MTVfcG11X2VuYWJsZShldmVudCk7DQo+ ICsJZXZlbnQtPmh3LnN0YXRlID0gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgaTkxNV9w bXVfZXZlbnRfc3RvcChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBmbGFncykNCj4gK3sN Cj4gKwlpZiAoZmxhZ3MgJiBQRVJGX0VGX1VQREFURSkNCj4gKwkJaTkxNV9wbXVfZXZlbnRfcmVh ZChldmVudCk7DQo+ICsJaTkxNV9wbXVfZGlzYWJsZShldmVudCk7DQo+ICsJZXZlbnQtPmh3LnN0 YXRlID0gUEVSRl9IRVNfU1RPUFBFRDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBpOTE1X3Bt dV9ldmVudF9hZGQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpDQo+ICt7DQo+ ICsJaWYgKGZsYWdzICYgUEVSRl9FRl9TVEFSVCkNCj4gKwkJaTkxNV9wbXVfZXZlbnRfc3RhcnQo ZXZlbnQsIGZsYWdzKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dm9pZCBpOTE1X3BtdV9ldmVudF9kZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxh Z3MpDQo+ICt7DQo+ICsJaTkxNV9wbXVfZXZlbnRfc3RvcChldmVudCwgUEVSRl9FRl9VUERBVEUp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGk5MTVfcG11X2V2ZW50X2V2ZW50X2lkeChzdHJ1 Y3QgcGVyZl9ldmVudCAqZXZlbnQpDQo+ICt7DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBzc2l6ZV90IGk5MTVfcG11X2Zvcm1hdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwN Cj4gKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikNCj4g K3sNCj4gKyAgICAgICAgc3RydWN0IGRldl9leHRfYXR0cmlidXRlICplYXR0cjsNCj4gKw0KPiAr ICAgICAgICBlYXR0ciA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1 dGUsIGF0dHIpOw0KPiArICAgICAgICByZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgKGNoYXIg KikgZWF0dHItPnZhcik7DQo+ICt9DQo+ICsNCj4gKyNkZWZpbmUgSTkxNV9QTVVfRk9STUFUX0FU VFIoX25hbWUsIF9jb25maWcpICAgICAgICAgICBcDQo+ICsgICAgICAgICgmKChzdHJ1Y3QgZGV2 X2V4dF9hdHRyaWJ1dGVbXSkgeyAgICAgICAgICAgICAgIFwNCj4gKyAgICAgICAgICAgICAgICB7 IC5hdHRyID0gX19BVFRSKF9uYW1lLCBTX0lSVUdPLCBpOTE1X3BtdV9mb3JtYXRfc2hvdywgTlVM TCksIFwNCj4gKyAgICAgICAgICAgICAgICAgIC52YXIgPSAodm9pZCAqKSBfY29uZmlnLCB9ICAg ICAgICAgICAgXA0KPiArICAgICAgICB9KVswXS5hdHRyLmF0dHIpDQo+ICsNCj4gK3N0YXRpYyBz dHJ1Y3QgYXR0cmlidXRlICppOTE1X3BtdV9mb3JtYXRfYXR0cnNbXSA9IHsNCj4gKyAgICAgICAg STkxNV9QTVVfRk9STUFUX0FUVFIoaTkxNV9ldmVudGlkLCAiY29uZmlnOjAtNDIiKSwNCj4gKyAg ICAgICAgTlVMTCwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRl X2dyb3VwIGk5MTVfcG11X2Zvcm1hdF9hdHRyX2dyb3VwID0gew0KPiArICAgICAgICAubmFtZSA9 ICJmb3JtYXQiLA0KPiArICAgICAgICAuYXR0cnMgPSBpOTE1X3BtdV9mb3JtYXRfYXR0cnMsDQo+ ICt9Ow0KPiArDQo+ICtzdGF0aWMgc3NpemVfdCBpOTE1X3BtdV9ldmVudF9zaG93KHN0cnVjdCBk ZXZpY2UgKmRldiwNCj4gKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hh ciAqYnVmKQ0KPiArew0KPiArICAgICAgICBzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGUgKmVhdHRy Ow0KPiArDQo+ICsgICAgICAgIGVhdHRyID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBkZXZf ZXh0X2F0dHJpYnV0ZSwgYXR0cik7DQo+ICsgICAgICAgIHJldHVybiBzcHJpbnRmKGJ1ZiwgImNv bmZpZz0weCVseFxuIiwgKHVuc2lnbmVkIGxvbmcpIGVhdHRyLT52YXIpOw0KPiArfQ0KPiArDQo+ ICsjZGVmaW5lIEk5MTVfUE1VX0VWRU5UX0FUVFIoX25hbWUsIF9jb25maWcpICAgICAgICAgICAg XA0KPiArICAgICAgICAoJigoc3RydWN0IGRldl9leHRfYXR0cmlidXRlW10pIHsgICAgICAgICAg ICAgICBcDQo+ICsgICAgICAgICAgICAgICAgeyAuYXR0ciA9IF9fQVRUUihfbmFtZSwgU19JUlVH TywgaTkxNV9wbXVfZXZlbnRfc2hvdywgTlVMTCksIFwNCj4gKyAgICAgICAgICAgICAgICAgIC52 YXIgPSAodm9pZCAqKSBfY29uZmlnLCB9ICAgICAgICAgICAgXA0KPiArICAgICAgICAgfSlbMF0u YXR0ci5hdHRyKQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaTkxNV9wbXVfZXZl bnRzX2F0dHJzW10gPSB7DQo+ICsJSTkxNV9QTVVfRVZFTlRfQVRUUihyY3MwLXF1ZXVlZCwNCj4g KwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfUVVFVUVEKEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiwg MCkpLA0KPiArCUk5MTVfUE1VX0VWRU5UX0FUVFIocmNzMC1idXN5LA0KPiArCQkJICAgIEk5MTVf UE1VX0VOR0lORV9CVVNZKEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiwgMCkpLA0KPiArCUk5MTVf UE1VX0VWRU5UX0FUVFIocmNzMC13YWl0LA0KPiArCQkJICAgIEk5MTVfUE1VX0VOR0lORV9XQUlU KEk5MTVfRU5HSU5FX0NMQVNTX1JFTkRFUiwgMCkpLA0KPiArCUk5MTVfUE1VX0VWRU5UX0FUVFIo cmNzMC1zZW1hLA0KPiArCQkJICAgIEk5MTVfUE1VX0VOR0lORV9TRU1BKEk5MTVfRU5HSU5FX0NM QVNTX1JFTkRFUiwgMCkpLA0KPiArDQo+ICsJSTkxNV9QTVVfRVZFTlRfQVRUUihiY3MwLXF1ZXVl ZCwNCj4gKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfUVVFVUVEKEk5MTVfRU5HSU5FX0NMQVNTX0NP UFksIDApKSwNCj4gKwlJOTE1X1BNVV9FVkVOVF9BVFRSKGJjczAtYnVzeSwNCj4gKwkJCSAgICBJ OTE1X1BNVV9FTkdJTkVfQlVTWShJOTE1X0VOR0lORV9DTEFTU19DT1BZLCAwKSksDQo+ICsJSTkx NV9QTVVfRVZFTlRfQVRUUihiY3MwLXdhaXQsDQo+ICsJCQkgICAgSTkxNV9QTVVfRU5HSU5FX1dB SVQoSTkxNV9FTkdJTkVfQ0xBU1NfQ09QWSwgMCkpLA0KPiArCUk5MTVfUE1VX0VWRU5UX0FUVFIo YmNzMC1zZW1hLA0KPiArCQkJICAgIEk5MTVfUE1VX0VOR0lORV9TRU1BKEk5MTVfRU5HSU5FX0NM QVNTX0NPUFksIDApKSwNCj4gKw0KPiArCUk5MTVfUE1VX0VWRU5UX0FUVFIodmNzMC1xdWV1ZWQs DQo+ICsJCQkgICAgSTkxNV9QTVVfRU5HSU5FX1FVRVVFRChJOTE1X0VOR0lORV9DTEFTU19WSURF TywgMCkpLA0KPiArCUk5MTVfUE1VX0VWRU5UX0FUVFIodmNzMC1idXN5LA0KPiArCQkJICAgIEk5 MTVfUE1VX0VOR0lORV9CVVNZKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPLCAwKSksDQo+ICsJSTkx NV9QTVVfRVZFTlRfQVRUUih2Y3MwLXdhaXQsDQo+ICsJCQkgICAgSTkxNV9QTVVfRU5HSU5FX1dB SVQoSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDApKSwNCj4gKwlJOTE1X1BNVV9FVkVOVF9BVFRS KHZjczAtc2VtYSwNCj4gKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfU0VNQShJOTE1X0VOR0lORV9D TEFTU19WSURFTywgMCkpLA0KPiArDQo+ICsJSTkxNV9QTVVfRVZFTlRfQVRUUih2Y3MxLXF1ZXVl ZCwNCj4gKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfUVVFVUVEKEk5MTVfRU5HSU5FX0NMQVNTX1ZJ REVPLCAxKSksDQo+ICsJSTkxNV9QTVVfRVZFTlRfQVRUUih2Y3MxLWJ1c3ksDQo+ICsJCQkgICAg STkxNV9QTVVfRU5HSU5FX0JVU1koSTkxNV9FTkdJTkVfQ0xBU1NfVklERU8sIDEpKSwNCj4gKwlJ OTE1X1BNVV9FVkVOVF9BVFRSKHZjczEtd2FpdCwNCj4gKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVf V0FJVChJOTE1X0VOR0lORV9DTEFTU19WSURFTywgMSkpLA0KPiArCUk5MTVfUE1VX0VWRU5UX0FU VFIodmNzMS1zZW1hLA0KPiArCQkJICAgIEk5MTVfUE1VX0VOR0lORV9TRU1BKEk5MTVfRU5HSU5F X0NMQVNTX1ZJREVPLCAxKSksDQo+ICsNCj4gKwlJOTE1X1BNVV9FVkVOVF9BVFRSKHZlY3MwLXF1 ZXVlZCwNCj4gKwkJCSAgICBJOTE1X1BNVV9FTkdJTkVfUVVFVUVEKEk5MTVfRU5HSU5FX0NMQVNT X1ZJREVPX0VOSEFOQ0UsIDApKSwNCj4gKwlJOTE1X1BNVV9FVkVOVF9BVFRSKHZlY3MwLWJ1c3ks DQo+ICsJCQkgICAgSTkxNV9QTVVfRU5HSU5FX0JVU1koSTkxNV9FTkdJTkVfQ0xBU1NfVklERU9f RU5IQU5DRSwgMCkpLA0KPiArCUk5MTVfUE1VX0VWRU5UX0FUVFIodmVjczAtd2FpdCwNCj4gKwkJ CSAgICBJOTE1X1BNVV9FTkdJTkVfV0FJVChJOTE1X0VOR0lORV9DTEFTU19WSURFT19FTkhBTkNF LCAwKSksDQo+ICsJSTkxNV9QTVVfRVZFTlRfQVRUUih2ZWNzMC1zZW1hLA0KPiArCQkJICAgIEk5 MTVfUE1VX0VOR0lORV9TRU1BKEk5MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UsIDApKSwN Cj4gKw0KPiArICAgICAgICBJOTE1X1BNVV9FVkVOVF9BVFRSKGFjdHVhbC1mcmVxdWVuY3ksCSBJ OTE1X1BNVV9BQ1RVQUxfRlJFUVVFTkNZKSwNCj4gKyAgICAgICAgSTkxNV9QTVVfRVZFTlRfQVRU UihyZXF1ZXN0ZWQtZnJlcXVlbmN5LCBJOTE1X1BNVV9SRVFVRVNURURfRlJFUVVFTkNZKSwNCj4g KyAgICAgICAgSTkxNV9QTVVfRVZFTlRfQVRUUihlbmVyZ3ksCQkgSTkxNV9QTVVfRU5FUkdZKSwN Cj4gKyAgICAgICAgSTkxNV9QTVVfRVZFTlRfQVRUUihpbnRlcnJ1cHRzLAkJIEk5MTVfUE1VX0lO VEVSUlVQVFMpLA0KPiArICAgICAgICBJOTE1X1BNVV9FVkVOVF9BVFRSKHJjNi1yZXNpZGVuY3ks CSBJOTE1X1BNVV9SQzZfUkVTSURFTkNZKSwNCj4gKyAgICAgICAgSTkxNV9QTVVfRVZFTlRfQVRU UihyYzZwLXJlc2lkZW5jeSwJIEk5MTVfUE1VX1JDNnBfUkVTSURFTkNZKSwNCj4gKyAgICAgICAg STkxNV9QTVVfRVZFTlRfQVRUUihyYzZwcC1yZXNpZGVuY3ksCSBJOTE1X1BNVV9SQzZwcF9SRVNJ REVOQ1kpLA0KPiArDQo+ICsgICAgICAgIE5VTEwsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29u c3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpOTE1X3BtdV9ldmVudHNfYXR0cl9ncm91cCA9IHsN Cj4gKyAgICAgICAgLm5hbWUgPSAiZXZlbnRzIiwNCj4gKyAgICAgICAgLmF0dHJzID0gaTkxNV9w bXVfZXZlbnRzX2F0dHJzLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIHNzaXplX3QNCj4gK2k5MTVf cG11X2dldF9hdHRyX2NwdW1hc2soc3RydWN0IGRldmljZSAqZGV2LA0KPiArCQkJICBzdHJ1Y3Qg ZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCj4gKwkJCSAgY2hhciAqYnVmKQ0KPiArew0KPiArCXJl dHVybiBjcHVtYXBfcHJpbnRfdG9fcGFnZWJ1Zih0cnVlLCBidWYsICZpOTE1X3BtdV9jcHVtYXNr KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIERFVklDRV9BVFRSKGNwdW1hc2ssIFNfSVJVR08sIGk5 MTVfcG11X2dldF9hdHRyX2NwdW1hc2ssIE5VTEwpOw0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGF0 dHJpYnV0ZSAqaTkxNV9jcHVtYXNrX2F0dHJzW10gPSB7DQo+ICsJJmRldl9hdHRyX2NwdW1hc2su YXR0ciwNCj4gKwlOVUxMLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVf Z3JvdXAgaTkxNV9wbXVfY3B1bWFza19hdHRyX2dyb3VwID0gew0KPiArCS5hdHRycyA9IGk5MTVf Y3B1bWFza19hdHRycywNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmli dXRlX2dyb3VwICppOTE1X3BtdV9hdHRyX2dyb3Vwc1tdID0gew0KPiArICAgICAgICAmaTkxNV9w bXVfZm9ybWF0X2F0dHJfZ3JvdXAsDQo+ICsgICAgICAgICZpOTE1X3BtdV9ldmVudHNfYXR0cl9n cm91cCwNCj4gKwkmaTkxNV9wbXVfY3B1bWFza19hdHRyX2dyb3VwLA0KPiArICAgICAgICBOVUxM DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW50IGk5MTVfcG11X2NwdV9vbmxpbmUodW5zaWduZWQg aW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50 IHRhcmdldDsNCj4gKw0KPiArCXRhcmdldCA9IGNwdW1hc2tfYW55X2FuZCgmaTkxNV9wbXVfY3B1 bWFzaywgJmk5MTVfcG11X2NwdW1hc2spOw0KPiArCS8qIFNlbGVjdCB0aGUgZmlyc3Qgb25saW5l IENQVSBhcyBhIGRlc2lnbmF0ZWQgcmVhZGVyLiAqLw0KPiArCWlmICh0YXJnZXQgPj0gbnJfY3B1 X2lkcykNCj4gKwkJY3B1bWFza19zZXRfY3B1KGNwdSwgJmk5MTVfcG11X2NwdW1hc2spOw0KPiAr DQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgaTkxNV9wbXVfY3B1X29m ZmxpbmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUpDQo+ICt7DQo+ ICsJc3RydWN0IGk5MTVfcG11ICpwbXUgPSBobGlzdF9lbnRyeV9zYWZlKG5vZGUsIHR5cGVvZigq cG11KSwgbm9kZSk7DQo+ICsJdW5zaWduZWQgaW50IHRhcmdldDsNCj4gKw0KPiArCWlmIChjcHVt YXNrX3Rlc3RfYW5kX2NsZWFyX2NwdShjcHUsICZpOTE1X3BtdV9jcHVtYXNrKSkgew0KPiArCQl0 YXJnZXQgPSBjcHVtYXNrX2FueV9idXQodG9wb2xvZ3lfc2libGluZ19jcHVtYXNrKGNwdSksIGNw dSk7DQo+ICsJCS8qIE1pZ3JhdGUgZXZlbnRzIGlmIHRoZXJlIGlzIGEgdmFsaWQgdGFyZ2V0ICov DQo+ICsJCWlmICh0YXJnZXQgPCBucl9jcHVfaWRzKSB7DQo+ICsJCQljcHVtYXNrX3NldF9jcHUo dGFyZ2V0LCAmaTkxNV9wbXVfY3B1bWFzayk7DQo+ICsJCQlwZXJmX3BtdV9taWdyYXRlX2NvbnRl eHQoJnBtdS0+YmFzZSwgY3B1LCB0YXJnZXQpOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJcmV0 dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3ZvaWQgaTkxNV9wbXVfcmVnaXN0ZXIoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmk5MTUpDQo+ICt7DQo+ICsJaW50IHJldCA9IEVOT1RTVVBQOw0KPiArDQo+ ICsJaWYgKElOVEVMX0dFTihpOTE1KSA8PSAyKQ0KPiArCQlnb3RvIGVycjsNCj4gKw0KPiArCXJl dCA9IGNwdWhwX3NldHVwX3N0YXRlX211bHRpKENQVUhQX0FQX1BFUkZfWDg2X1VOQ09SRV9PTkxJ TkUsDQo+ICsJCQkJICAgICAgInBlcmYveDg2L2ludGVsL2k5MTU6b25saW5lIiwNCj4gKwkJCQkg ICAgICBpOTE1X3BtdV9jcHVfb25saW5lLA0KPiArCQkJICAgICAgICAgICAgICBpOTE1X3BtdV9j cHVfb2ZmbGluZSk7DQo+ICsJaWYgKHJldCkNCj4gKwkJZ290byBlcnI7DQo+ICsNCj4gKwlyZXQg PSBjcHVocF9zdGF0ZV9hZGRfaW5zdGFuY2UoQ1BVSFBfQVBfUEVSRl9YODZfVU5DT1JFX09OTElO RSwNCj4gKwkJCQkgICAgICAgJmk5MTUtPnBtdS5ub2RlKTsNCj4gKwlpZiAocmV0KQ0KPiArCQln b3RvIGVycjsNCj4gKw0KPiArCWk5MTUtPnBtdS5iYXNlLmF0dHJfZ3JvdXBzCT0gaTkxNV9wbXVf YXR0cl9ncm91cHM7DQo+ICsJaTkxNS0+cG11LmJhc2UudGFza19jdHhfbnIJPSBwZXJmX2ludmFs aWRfY29udGV4dDsNCj4gKwlpOTE1LT5wbXUuYmFzZS5ldmVudF9pbml0CT0gaTkxNV9wbXVfZXZl bnRfaW5pdDsNCj4gKwlpOTE1LT5wbXUuYmFzZS5hZGQJCT0gaTkxNV9wbXVfZXZlbnRfYWRkOw0K PiArCWk5MTUtPnBtdS5iYXNlLmRlbAkJPSBpOTE1X3BtdV9ldmVudF9kZWw7DQo+ICsJaTkxNS0+ cG11LmJhc2Uuc3RhcnQJCT0gaTkxNV9wbXVfZXZlbnRfc3RhcnQ7DQo+ICsJaTkxNS0+cG11LmJh c2Uuc3RvcAkJPSBpOTE1X3BtdV9ldmVudF9zdG9wOw0KPiArCWk5MTUtPnBtdS5iYXNlLnJlYWQJ CT0gaTkxNV9wbXVfZXZlbnRfcmVhZDsNCj4gKwlpOTE1LT5wbXUuYmFzZS5ldmVudF9pZHgJPSBp OTE1X3BtdV9ldmVudF9ldmVudF9pZHg7DQo+ICsNCj4gKwlzcGluX2xvY2tfaW5pdCgmaTkxNS0+ cG11LmxvY2spOw0KPiArCWhydGltZXJfaW5pdCgmaTkxNS0+cG11LnRpbWVyLCBDTE9DS19NT05P VE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOw0KPiArCWk5MTUtPnBtdS50aW1lci5mdW5jdGlvbiA9 IGk5MTVfc2FtcGxlOw0KPiArCWk5MTUtPnBtdS5lbmFibGUgPSAwOw0KPiArDQo+ICsJaWYgKHBl cmZfcG11X3JlZ2lzdGVyKCZpOTE1LT5wbXUuYmFzZSwgImk5MTUiLCAtMSkpDQo+ICsJCWk5MTUt PnBtdS5iYXNlLmV2ZW50X2luaXQgPSBOVUxMOw0KPiArDQo+ICtlcnI6DQo+ICsJRFJNX0lORk8o IkZhaWxlZCB0byByZWdpc3RlciBQTVUgKGVycj0lZClcbiIsIHJldCk7DQo+ICt9DQo+ICsNCj4g K3ZvaWQgaTkxNV9wbXVfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkN Cj4gK3sNCj4gKwlpZiAoIWk5MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQpDQo+ICsJCXJldHVybjsN Cj4gKw0KPiArCWk5MTUtPnBtdS5lbmFibGUgPSAwOw0KPiArDQo+ICsJcGVyZl9wbXVfdW5yZWdp c3RlcigmaTkxNS0+cG11LmJhc2UpOw0KPiArCWk5MTUtPnBtdS5iYXNlLmV2ZW50X2luaXQgPSBO VUxMOw0KPiArDQo+ICsJaHJ0aW1lcl9jYW5jZWwoJmk5MTUtPnBtdS50aW1lcik7DQo+ICsNCj4g KwljcHVocF9zdGF0ZV9yZW1vdmVfaW5zdGFuY2UoQ1BVSFBfQVBfUEVSRl9YODZfVU5DT1JFX09O TElORSwNCj4gKwkJCQkgICAgJmk5MTUtPnBtdS5ub2RlKTsNCj4gK30NCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X3JlZy5oDQo+IGluZGV4IDBiMDMyNjBhMzk2Ny4uOGMzNjJlMDQ1MWMxIDEwMDY0NA0KPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oDQo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcmVnLmgNCj4gQEAgLTE4Niw2ICsxODYsOSBAQCBzdGF0aWMgaW5saW5l IGJvb2wgaTkxNV9tbWlvX3JlZ192YWxpZChpOTE1X3JlZ190IHJlZykNCj4gICNkZWZpbmUgVklE RU9fRU5IQU5DRU1FTlRfQ0xBU1MJMg0KPiAgI2RlZmluZSBDT1BZX0VOR0lORV9DTEFTUwkzDQo+ ICAjZGVmaW5lIE9USEVSX0NMQVNTCQk0DQo+ICsjZGVmaW5lIE1BWF9FTkdJTkVfQ0xBU1MJNA0K PiArDQo+ICsjZGVmaW5lIE1BWF9FTkdJTkVfSU5TVEFOQ0UgICAgMQ0KPiAgDQo+ICAvKiBQQ0kg Y29uZmlnIHNwYWNlICovDQo+ICANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2VuZ2luZV9jcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZW5naW5lX2Nz LmMNCj4gaW5kZXggM2FlODlhOWQ2MjQxLi5kYmM3YWJkNjVmMzMgMTAwNjQ0DQo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jDQo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2VuZ2luZV9jcy5jDQo+IEBAIC0xOTgsNiArMTk4LDE1IEBAIGludGVs X2VuZ2luZV9zZXR1cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsDQo+ICAJR0VN X0JVR19PTihpbmZvLT5jbGFzcyA+PSBBUlJBWV9TSVpFKGludGVsX2VuZ2luZV9jbGFzc2VzKSk7 DQo+ICAJY2xhc3NfaW5mbyA9ICZpbnRlbF9lbmdpbmVfY2xhc3Nlc1tpbmZvLT5jbGFzc107DQo+ ICANCj4gKwlpZiAoR0VNX1dBUk5fT04oaW5mby0+Y2xhc3MgPiBNQVhfRU5HSU5FX0NMQVNTKSkN Cj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwlpZiAoR0VNX1dBUk5fT04oaW5mby0+aW5z dGFuY2UgPiBNQVhfRU5HSU5FX0lOU1RBTkNFKSkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsN Cj4gKwlpZiAoR0VNX1dBUk5fT04oZGV2X3ByaXYtPmVuZ2luZV9jbGFzc1tpbmZvLT5jbGFzc11b aW5mby0+aW5zdGFuY2VdKSkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gIAlHRU1fQlVH X09OKGRldl9wcml2LT5lbmdpbmVbaWRdKTsNCj4gIAllbmdpbmUgPSBremFsbG9jKHNpemVvZigq ZW5naW5lKSwgR0ZQX0tFUk5FTCk7DQo+ICAJaWYgKCFlbmdpbmUpDQo+IEBAIC0yMjUsNiArMjM0 LDcgQEAgaW50ZWxfZW5naW5lX3NldHVwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwNCj4gIA0KPiAgCUFUT01JQ19JTklUX05PVElGSUVSX0hFQUQoJmVuZ2luZS0+Y29udGV4dF9z dGF0dXNfbm90aWZpZXIpOw0KPiAgDQo+ICsJZGV2X3ByaXYtPmVuZ2luZV9jbGFzc1tpbmZvLT5j bGFzc11baW5mby0+aW5zdGFuY2VdID0gZW5naW5lOw0KPiAgCWRldl9wcml2LT5lbmdpbmVbaWRd ID0gZW5naW5lOw0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcmluZ2J1ZmZlci5jDQo+IGluZGV4IDI2ODM0MjQzM2E4ZS4uN2RiNGM1NzJlZjc2IDEwMDY0 NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMNCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jDQo+IEBAIC0yMjgzLDMg KzIyODMsMjggQEAgaW50IGludGVsX2luaXRfdmVib3hfcmluZ19idWZmZXIoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKQ0KPiAgDQo+ICAJcmV0dXJuIGludGVsX2luaXRfcmluZ19idWZm ZXIoZW5naW5lKTsNCj4gIH0NCj4gKw0KPiArc3RhdGljIHU4IHVzZXJfY2xhc3NfbWFwW0k5MTVf RU5HSU5FX0NMQVNTX01BWF0gPSB7DQo+ICsJW0k5MTVfRU5HSU5FX0NMQVNTX09USEVSXSA9IE9U SEVSX0NMQVNTLA0KPiArCVtJOTE1X0VOR0lORV9DTEFTU19SRU5ERVJdID0gUkVOREVSX0NMQVNT LA0KPiArCVtJOTE1X0VOR0lORV9DTEFTU19DT1BZXSA9IENPUFlfRU5HSU5FX0NMQVNTLA0KPiAr CVtJOTE1X0VOR0lORV9DTEFTU19WSURFT10gPSBWSURFT19ERUNPREVfQ0xBU1MsDQo+ICsJW0k5 MTVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0VdID0gVklERU9fRU5IQU5DRU1FTlRfQ0xBU1Ms DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoNCj4gK2ludGVsX2VuZ2lu ZV9sb29rdXBfdXNlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTggY2xhc3MsIHU4 IGluc3RhbmNlKQ0KPiArew0KPiArCWlmIChjbGFzcyA+PSBBUlJBWV9TSVpFKHVzZXJfY2xhc3Nf bWFwKSkNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsNCj4gKwljbGFzcyA9IHVzZXJfY2xhc3NfbWFw W2NsYXNzXTsNCj4gKw0KPiArCWlmIChXQVJOX09OX09OQ0UoY2xhc3MgPiBNQVhfRU5HSU5FX0NM QVNTKSkNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsNCj4gKwlpZiAoaW5zdGFuY2UgPiBNQVhfRU5H SU5FX0lOU1RBTkNFKQ0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKw0KPiArCXJldHVybiBpOTE1LT5l bmdpbmVfY2xhc3NbY2xhc3NdW2luc3RhbmNlXTsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3JpbmdidWZmZXIuaA0KPiBpbmRleCA3OWMwMDIxZjM3MDAuLmNmMDk1YjkzODZmNCAx MDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oDQo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaA0KPiBAQCAtMjQ1 LDYgKzI0NSwyOCBAQCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzIHsNCj4gIAkJSTkxNV9TRUxGVEVT VF9ERUNMQVJFKGJvb2wgbW9jayA6IDEpOw0KPiAgCX0gYnJlYWRjcnVtYnM7DQo+ICANCj4gKwlz dHJ1Y3Qgew0KPiArCQkvKioNCj4gKwkJICogQGVuYWJsZTogQml0bWFzayBvZiBlbmFibGUgc2Ft cGxlIGV2ZW50cyBvbiB0aGlzIGVuZ2luZS4NCj4gKwkJICoNCj4gKwkJICogQml0cyBjb3JyZXNw b25kIHRvIHNhbXBsZSBldmVudCB0eXBlcywgZm9yIGluc3RhbmNlDQo+ICsJCSAqIEk5MTVfU0FN UExFX1FVRVVFRCBpcyBiaXQgMCBldGMuDQo+ICsJCSAqLw0KPiArCQl1MzIgZW5hYmxlOw0KPiAr CQkvKioNCj4gKwkJICogQGVuYWJsZV9jb3VudDogUmVmZXJlbmNlIGNvdW50IGZvciB0aGUgZW5h YmxlZCBzYW1wbGVycy4NCj4gKwkJICoNCj4gKwkJICogSW5kZXggbnVtYmVyIGNvcnJlc3BvbmRz IHRvIHRoZSBiaXQgbnVtYmVyIGZyb20gQGVuYWJsZS4NCj4gKwkJICovDQo+ICsJCXVuc2lnbmVk IGludCBlbmFibGVfY291bnRbSTkxNV9QTVVfU0FNUExFX0JJVFNdOw0KPiArCQkvKioNCj4gKwkJ ICogQHNhbXBsZTogQ291bnRlciB2YWx1ZSBmb3Igc2FtcGxpbmcgZXZlbnRzLg0KPiArCQkgKg0K PiArCQkgKiBPdXIgaW50ZXJuYWwgdGltZXIgc3RvcmVzIHRoZSBjdXJyZW50IGNvdW50ZXIgaW4g dGhpcyBmaWVsZC4NCj4gKwkJICovDQo+ICsJCXU2NCBzYW1wbGVbSTkxNV9FTkdJTkVfU0FNUExF X01BWF07DQo+ICsJfSBwbXU7DQo+ICsNCj4gIAkvKg0KPiAgCSAqIEEgcG9vbCBvZiBvYmplY3Rz IHRvIHVzZSBhcyBzaGFkb3cgY29waWVzIG9mIGNsaWVudCBiYXRjaCBidWZmZXJzDQo+ICAJICog d2hlbiB0aGUgY29tbWFuZCBwYXJzZXIgaXMgZW5hYmxlZC4gUHJldmVudHMgdGhlIGNsaWVudCBm cm9tDQo+IEBAIC03MzcsNCArNzU5LDcgQEAgdm9pZCBpbnRlbF9lbmdpbmVzX3Jlc2V0X2RlZmF1 bHRfc3VibWlzc2lvbihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSk7DQo+ICANCj4gIGJv b2wgaW50ZWxfZW5naW5lX2Nhbl9zdG9yZV9kd29yZChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpOw0KPiAgDQo+ICtzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICoNCj4gK2ludGVsX2VuZ2lu ZV9sb29rdXBfdXNlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgdTggY2xhc3MsIHU4 IGluc3RhbmNlKTsNCj4gKw0KPiAgI2VuZGlmIC8qIF9JTlRFTF9SSU5HQlVGRkVSX0hfICovDQo+ IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2k5MTVfZHJtLmggYi9pbmNsdWRlL3VhcGkv ZHJtL2k5MTVfZHJtLmgNCj4gaW5kZXggZDhkMTBkOTMyNzU5Li42ZGMwZDZmZDRlNGMgMTAwNjQ0 DQo+IC0tLSBhL2luY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaA0KPiArKysgYi9pbmNsdWRlL3Vh cGkvZHJtL2k5MTVfZHJtLmgNCj4gQEAgLTg2LDYgKzg2LDY0IEBAIGVudW0gaTkxNV9tb2NzX3Rh YmxlX2luZGV4IHsNCj4gIAlJOTE1X01PQ1NfQ0FDSEVELA0KPiAgfTsNCj4gIA0KPiArZW51bSBk cm1faTkxNV9nZW1fZW5naW5lX2NsYXNzIHsNCj4gKwlJOTE1X0VOR0lORV9DTEFTU19PVEhFUiA9 IDAsDQo+ICsJSTkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSID0gMSwNCj4gKwlJOTE1X0VOR0lORV9D TEFTU19DT1BZID0gMiwNCj4gKwlJOTE1X0VOR0lORV9DTEFTU19WSURFTyA9IDMsDQo+ICsJSTkx NV9FTkdJTkVfQ0xBU1NfVklERU9fRU5IQU5DRSA9IDQsDQo+ICsJSTkxNV9FTkdJTkVfQ0xBU1Nf TUFYIC8qIG5vbi1BQkkgKi8NCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogRE9DOiBwZXJmX2V2 ZW50cyBleHBvc2VkIGJ5IGk5MTUgdGhyb3VnaCAvc3lzL2J1cy9ldmVudF9zb3VyY2VzL2RyaXZl cnMvaTkxNQ0KPiArICoNCj4gKyAqLw0KPiArDQo+ICtlbnVtIGRybV9pOTE1X3BtdV9lbmdpbmVf c2FtcGxlIHsNCj4gKwlJOTE1X1NBTVBMRV9RVUVVRUQgPSAwLA0KPiArCUk5MTVfU0FNUExFX0JV U1kgPSAxLA0KPiArCUk5MTVfU0FNUExFX1dBSVQgPSAyLA0KPiArCUk5MTVfU0FNUExFX1NFTUEg PSAzLA0KPiArCUk5MTVfRU5HSU5FX1NBTVBMRV9NQVggLyogbm9uLUFCSSAqLw0KPiArfTsNCj4g Kw0KPiArI2RlZmluZSBJOTE1X1BNVV9TQU1QTEVfQklUUyAoNCkNCj4gKyNkZWZpbmUgSTkxNV9Q TVVfU0FNUExFX01BU0sgKDB4ZikNCj4gKyNkZWZpbmUgSTkxNV9QTVVfU0FNUExFX0lOU1RBTkNF X0JJVFMgKDgpDQo+ICsjZGVmaW5lIEk5MTVfUE1VX0NMQVNTX1NISUZUIFwNCj4gKwkoSTkxNV9Q TVVfU0FNUExFX0JJVFMgKyBJOTE1X1BNVV9TQU1QTEVfSU5TVEFOQ0VfQklUUykNCj4gKw0KPiAr I2RlZmluZSBfX0k5MTVfUE1VX0VOR0lORShjbGFzcywgaW5zdGFuY2UsIHNhbXBsZSkgXA0KPiAr CSgoY2xhc3MpIDw8IEk5MTVfUE1VX0NMQVNTX1NISUZUIHwgXA0KPiArCShpbnN0YW5jZSkgPDwg STkxNV9QTVVfU0FNUExFX0JJVFMgfCBcDQo+ICsJKHNhbXBsZSkpDQo+ICsNCj4gKyNkZWZpbmUg STkxNV9QTVVfRU5HSU5FX1FVRVVFRChjbGFzcywgaW5zdGFuY2UpIFwNCj4gKwlfX0k5MTVfUE1V X0VOR0lORShjbGFzcywgaW5zdGFuY2UsIEk5MTVfU0FNUExFX1FVRVVFRCkNCj4gKw0KPiArI2Rl ZmluZSBJOTE1X1BNVV9FTkdJTkVfQlVTWShjbGFzcywgaW5zdGFuY2UpIFwNCj4gKwlfX0k5MTVf UE1VX0VOR0lORShjbGFzcywgaW5zdGFuY2UsIEk5MTVfU0FNUExFX0JVU1kpDQo+ICsNCj4gKyNk ZWZpbmUgSTkxNV9QTVVfRU5HSU5FX1dBSVQoY2xhc3MsIGluc3RhbmNlKSBcDQo+ICsJX19JOTE1 X1BNVV9FTkdJTkUoY2xhc3MsIGluc3RhbmNlLCBJOTE1X1NBTVBMRV9XQUlUKQ0KPiArDQo+ICsj ZGVmaW5lIEk5MTVfUE1VX0VOR0lORV9TRU1BKGNsYXNzLCBpbnN0YW5jZSkgXA0KPiArCV9fSTkx NV9QTVVfRU5HSU5FKGNsYXNzLCBpbnN0YW5jZSwgSTkxNV9TQU1QTEVfU0VNQSkNCj4gKw0KPiAr I2RlZmluZSBfX0k5MTVfUE1VX09USEVSKHgpIChfX0k5MTVfUE1VX0VOR0lORSgweGZmLCAweGZm LCAweGYpICsgMSArICh4KSkNCj4gKw0KPiArI2RlZmluZSBJOTE1X1BNVV9BQ1RVQUxfRlJFUVVF TkNZIAlfX0k5MTVfUE1VX09USEVSKDApDQo+ICsjZGVmaW5lIEk5MTVfUE1VX1JFUVVFU1RFRF9G UkVRVUVOQ1kJX19JOTE1X1BNVV9PVEhFUigxKQ0KPiArI2RlZmluZSBJOTE1X1BNVV9FTkVSR1kJ CQlfX0k5MTVfUE1VX09USEVSKDIpDQo+ICsjZGVmaW5lIEk5MTVfUE1VX0lOVEVSUlVQVFMJCV9f STkxNV9QTVVfT1RIRVIoMykNCj4gKw0KPiArI2RlZmluZSBJOTE1X1BNVV9SQzZfUkVTSURFTkNZ CQlfX0k5MTVfUE1VX09USEVSKDQpDQo+ICsjZGVmaW5lIEk5MTVfUE1VX1JDNnBfUkVTSURFTkNZ CQlfX0k5MTVfUE1VX09USEVSKDUpDQo+ICsjZGVmaW5lIEk5MTVfUE1VX1JDNnBwX1JFU0lERU5D WQlfX0k5MTVfUE1VX09USEVSKDYpDQo+ICsNCj4gKyNkZWZpbmUgSTkxNV9QTVVfTEFTVCBJOTE1 X1BNVV9SQzZwcF9SRVNJREVOQ1kNCj4gKw0KPiAgLyogRWFjaCByZWdpb24gaXMgYSBtaW5pbXVt IG9mIDE2aywgYW5kIHRoZXJlIGFyZSBhdCBtb3N0IDI1NSBvZiB0aGVtLg0KPiAgICovDQo+ICAj ZGVmaW5lIEk5MTVfTlJfVEVYX1JFR0lPTlMgMjU1CS8qIHRhYmxlIHNpemUgMmsgLSBtYXhpbXVt IGR1ZSB0byB1c2UNCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==