From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id 091025599 for ; Tue, 11 Oct 2016 23:07:37 +0200 (CEST) Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga105.fm.intel.com with ESMTP; 11 Oct 2016 14:07:37 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,330,1473145200"; d="scan'208";a="18568592" Received: from fmsmsx104.amr.corp.intel.com ([10.18.124.202]) by fmsmga006.fm.intel.com with ESMTP; 11 Oct 2016 14:07:37 -0700 Received: from fmsmsx155.amr.corp.intel.com (10.18.116.71) by fmsmsx104.amr.corp.intel.com (10.18.124.202) with Microsoft SMTP Server (TLS) id 14.3.248.2; Tue, 11 Oct 2016 14:07:36 -0700 Received: from fmsmsx113.amr.corp.intel.com ([169.254.13.160]) by FMSMSX155.amr.corp.intel.com ([169.254.5.8]) with mapi id 14.03.0248.002; Tue, 11 Oct 2016 14:07:36 -0700 From: "Wiles, Keith" To: "Yigit, Ferruh" CC: "dev@dpdk.org" , "pmatilai@redhat.com" , "yuanhan.liu@linux.intel.com" Thread-Topic: [dpdk-dev] [PATCH v4] drivers/net:new PMD using tun/tap host interface Thread-Index: AQHSI7WXvxKwqGev40adnGTylDMwMaCkNOYA Date: Tue, 11 Oct 2016 21:07:35 +0000 Message-ID: References: <1474423220-10207-1-git-send-email-keith.wiles@intel.com> <1475592311-25749-1-git-send-email-keith.wiles@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.254.12.209] Content-Type: text/plain; charset="utf-8" Content-ID: <2F37E4AB0F930E4DB65B71BC011B76DA@intel.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v4] drivers/net:new PMD using tun/tap host interface X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Oct 2016 21:07:38 -0000 DQpSZWdhcmRzLA0KS2VpdGgNCg0KPiBPbiBPY3QgMTEsIDIwMTYsIGF0IDY6NDkgQU0sIFlpZ2l0 LCBGZXJydWggPGZlcnJ1aC55aWdpdEBpbnRlbC5jb20+IHdyb3RlOg0KPiANCj4gT24gMTAvNC8y MDE2IDM6NDUgUE0sIEtlaXRoIFdpbGVzIHdyb3RlOg0KPj4gVGhlIHJ0ZV9ldGhfdGFwLmMgUE1E IGNyZWF0ZXMgYSBkZXZpY2UgdXNpbmcgVFVOL1RBUCBpbnRlcmZhY2VzDQo+PiBvbiB0aGUgbG9j YWwgaG9zdC4gVGhlIFBNRCBhbGxvd3MgZm9yIERQREsgYW5kIHRoZSBob3N0IHRvDQo+PiBjb21t dW5pY2F0ZSB1c2luZyBhIHJhdyBkZXZpY2UgaW50ZXJmYWNlIG9uIHRoZSBob3N0IGFuZCBpbg0K Pj4gdGhlIERQREsgYXBwbGljYXRpb24uIFRoZSBkZXZpY2UgY3JlYXRlZCBpcyBhIFRhcCBkZXZp Y2Ugd2l0aA0KPj4gYSBMMiBwYWNrZXQgaGVhZGVyLg0KPj4gDQoNCldpbGwgdHJ5IHRvIHNoaXAg b3V0IGEgdjUgc29vbi4NCj4+IHY0IC0gbWVyZ2Ugd2l0aCBsYXRlc3QgZHJpdmVyIGNoYW5nZXMN Cj4+IHYzIC0gZml4IGluY2x1ZGVzIGJ5IHJlbW92aW5nIGlmZGVmIGZvciBvdGhlciB0eXBlIGJl c2lkZXMgTGludXguDQo+PiAgICAgRml4IHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIHRoZSBNYWtl ZmlsZQ0KPj4gdjIgLSBtZXJnZSBhbGwgb2YgdGhlIHBhdGNoZXMgaW50byBvbmUgcGF0Y2guDQo+ PiAgICAgRml4IGEgdHlwbyBvbiBuYW1pbmcgdGhlIHRhcCBkZXZpY2UuDQo+PiAgICAgVXBkYXRl IHRoZSBtYWludGFpbmVycyBsaXN0DQo+PiANCj4+IFNpZ25lZC1vZmYtYnk6IEtlaXRoIFdpbGVz IDxrZWl0aC53aWxlc0BpbnRlbC5jb20+DQo+PiAtLS0NCj4+IE1BSU5UQUlORVJTICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgNSArDQo+PiBjb25maWcvY29tbW9uX2xpbnV4YXBwICAg ICAgICAgICAgICAgICAgfCAgIDIgKw0KPj4gZG9jL2d1aWRlcy9uaWNzL3RhcC5yc3QgICAgICAg ICAgICAgICAgIHwgIDg0ICsrKysNCj4+IGRyaXZlcnMvbmV0L01ha2VmaWxlICAgICAgICAgICAg ICAgICAgICB8ICAgMSArDQo+PiBkcml2ZXJzL25ldC90YXAvTWFrZWZpbGUgICAgICAgICAgICAg ICAgfCAgNTcgKysrDQo+PiBkcml2ZXJzL25ldC90YXAvcnRlX2V0aF90YXAuYyAgICAgICAgICAg fCA4NjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4+IGRyaXZlcnMvbmV0L3Rh cC9ydGVfcG1kX3RhcF92ZXJzaW9uLm1hcCB8ICAgNCArDQo+PiBtay9ydGUuYXBwLm1rICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKw0KPj4gOCBmaWxlcyBjaGFuZ2VkLCAxMDIwIGlu c2VydGlvbnMoKykNCj4+IGNyZWF0ZSBtb2RlIDEwMDY0NCBkb2MvZ3VpZGVzL25pY3MvdGFwLnJz dA0KPj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3RhcC9NYWtlZmlsZQ0KPj4gY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3RhcC9ydGVfZXRoX3RhcC5jDQo+PiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvdGFwL3J0ZV9wbWRfdGFwX3ZlcnNpb24ubWFwDQo+PiAN Cj4gPD4NCj4+IGRpZmYgLS1naXQgYS9jb25maWcvY29tbW9uX2xpbnV4YXBwIGIvY29uZmlnL2Nv bW1vbl9saW51eGFwcA0KPj4gaW5kZXggMjQ4M2RmYS4uNTlhMjA1MyAxMDA2NDQNCj4+IC0tLSBh L2NvbmZpZy9jb21tb25fbGludXhhcHANCj4+ICsrKyBiL2NvbmZpZy9jb21tb25fbGludXhhcHAN Cj4+IEBAIC00NCwzICs0NCw1IEBAIENPTkZJR19SVEVfTElCUlRFX1BNRF9WSE9TVD15DQo+PiBD T05GSUdfUlRFX0xJQlJURV9QTURfQUZfUEFDS0VUPXkNCj4+IENPTkZJR19SVEVfTElCUlRFX1BP V0VSPXkNCj4+IENPTkZJR19SVEVfVklSVElPX1VTRVI9eQ0KPj4gK0NPTkZJR19SVEVfTElCUlRF X1BNRF9UQVA9eQ0KPiANCj4gQWNjb3JkaW5nIGV4aXN0aW5nIGNvbmZpZyBpdGVtcywgYSBkZWZh dWx0IHZhbHVlIG9mIGEgY29uZmlnIG9wdGlvbg0KPiBzaG91bGQgZ28gdG8gY29uZmlnL2NvbW1v bl9iYXNlLCBhbmQgZW52aXJvbm1lbnQgc3BlY2lmaWMgY29uZmlnIGZpbGUNCj4gb3ZlcndyaXRl cyBpdCBpZiByZXF1aXJlZC4NCj4gU28gdGhpcyBvcHRpb24gbmVlZHMgdG8gYmUgYWRkZWQgaW50 byBjb25maWcvY29tbW9uX2Jhc2UgdG9vIGFzIGRpc2FibGVkDQo+IGJ5IGRlZmF1bHQuDQoNCkFk ZCB0aGUgZGVmaW5lIHRvIGNvbW1vbl9iYXNlIGFzIG5vLCBwbHVzIGEgY29tbWVudCBmb3IgTGlu dXggb25seS4NCg0KPiANCj4+ICtDT05GSUdfUlRFX1BNRF9UQVBfTUFYX1FVRVVFUz0zMg0KDQpN b3ZlZCB0aGlzIHRvIHRoZSAuYyBmaWxlIGFzIGEgZGVmaW5lLg0KPiANCj4gSXMgdGhlIG51bWJl ciBvZiBtYXggcXVldWVzIHJlYWxseSBuZWVkcyB0byBiZSBhIGNvbmZpZyBvcHRpb24sIEkgYXNz dW1lDQo+IGluIG5vcm1hbCB1c2UgY2FzZSB1c2VyIHdvbid0IG5lZWQgdG8gdXBkYXRlIHRoaXMg YW5kIHdpbGwgdXNlIHNpbmdsZQ0KPiBxdWV1ZSwgaWYgdGhhdCBpcyB0cnVlIHdoYXQgYWJvdXQg cHVzaGluZyB0aGlzIGludG8gc291cmNlIGNvZGUgdG8gbm90DQo+IG1ha2UgY29uZmlnIGZpbGUg bW9yZSBjb21wbGV4Pw0KPiANCj4+IGRpZmYgLS1naXQgYS9kb2MvZ3VpZGVzL25pY3MvdGFwLnJz dCBiL2RvYy9ndWlkZXMvbmljcy90YXAucnN0DQo+IA0KPiA8Li4uPg0KPiANCj4+ICsuLiBjb2Rl LWJsb2NrOjogY29uc29sZQ0KPj4gKw0KPj4gKyAgIFRoZSBpbnRlcmZhY2VkIG5hbWUgY2FuIGJl IGNoYW5nZWQgYnkgYWRkaW5nIHRoZSBpZmFjZT1mb28wDQo+PiArICAgZS5nLiAtLXZlZHY9ZXRo X3RhcCxpZmFjZT1mb28wIC0tdmRldj1ldGhfdGFwLGlmYWNlPWZvbzEsIC4uLg0KPiANCj4gcy92 ZWR2L3ZkZXYNCj4gZXRoX3RhcCBuZWVkcyB0byBiZSBuZXRfdGFwIGFzIHBhcnQgb2YgdW5pZnlp bmcgZGV2aWNlIG5hbWVzIHdvcmsNCg0KRml4ZWQuDQo+IA0KPiA8Li4uPg0KPiANCj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L01ha2VmaWxlDQo+PiBp bmRleCBiYzkzMjMwLi5iNGFmYTk4IDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVycy9uZXQvTWFrZWZp bGUNCj4+ICsrKyBiL2RyaXZlcnMvbmV0L01ha2VmaWxlDQo+PiBAQCAtNTUsNiArNTUsNyBAQCBE SVJTLSQoQ09ORklHX1JURV9MSUJSVEVfVEhVTkRFUlhfTklDVkZfUE1EKSArPSB0aHVuZGVyeA0K Pj4gRElSUy0kKENPTkZJR19SVEVfTElCUlRFX1ZJUlRJT19QTUQpICs9IHZpcnRpbw0KPj4gRElS Uy0kKENPTkZJR19SVEVfTElCUlRFX1ZNWE5FVDNfUE1EKSArPSB2bXhuZXQzDQo+PiBESVJTLSQo Q09ORklHX1JURV9MSUJSVEVfUE1EX1hFTlZJUlQpICs9IHhlbnZpcnQNCj4+ICtESVJTLSQoQ09O RklHX1JURV9MSUJSVEVfUE1EX1RBUCkgKz0gdGFwDQo+IA0KPiBSZXN0IG9mIHRoZSBQTURzIHNv cnRlZCBhbHBoYWJldGljYWxseSwgcGxlYXNlIGRvIHNhbWUuDQoNCkRvbmUuDQo+IA0KPj4gDQo+ PiBpZmVxICgkKENPTkZJR19SVEVfTElCUlRFX1ZIT1NUKSx5KQ0KPj4gRElSUy0kKENPTkZJR19S VEVfTElCUlRFX1BNRF9WSE9TVCkgKz0gdmhvc3QNCj4gDQo+IDwuLi4+DQo+IA0KPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L3RhcC9ydGVfZXRoX3RhcC5jIGIvZHJpdmVycy9uZXQvdGFwL3J0 ZV9ldGhfdGFwLmMNCj4gDQo+IDwuLi4+DQo+IA0KPj4gKw0KPj4gK3N0YXRpYyBjb25zdCBjaGFy ICpkcml2ZXJuYW1lID0gIlRhcCBQTUQiOw0KPj4gK3N0YXRpYyBpbnQgdGFwX3VuaXQgPSAwOw0K PiANCj4gTm8gbmVlZCB0byBpbml0aWFsaXplIHRvIHplcm8uDQoNCkZpeGVkDQo+IA0KPiA8Li4u Pg0KPiANCj4+ICsNCj4+ICtzdHJ1Y3QgcG1kX2ludGVybmFscyB7DQo+PiArCWNoYXIgbmFtZVtS VEVfRVRIX05BTUVfTUFYX0xFTl07CS8qIEludGVybmFsIFRhcCBkZXZpY2UgbmFtZSAqLw0KPj4g Kwl1aW50MTZfdCBuYl9xdWV1ZXM7CQkJLyogTnVtYmVyIG9mIHF1ZXVlcyBzdXBwb3J0ZWQgKi8N Cj4+ICsJdWludDE2X3QgcGFkMDsNCj4gDQo+IFdoeSB0aGlzIHBhZGRpbmc/IElzIGl0IHJlc2Vy dmVkPw0KDQpSZW1vdmVkIHBhZDAuIEkganVzdCBsaWtlIHRvIGtub3cgYWJvdXQgZ2FwcyBpbiB0 aGUgc3RydWN0dXJlcyBpcyB0aGUgcmVhc29uLg0KPiANCj4+ICsJc3RydWN0IGV0aGVyX2FkZHIg ZXRoX2FkZHI7CS8qIE1hYyBhZGRyZXNzIG9mIHRoZSBkZXZpY2UgcG9ydCAqLw0KPj4gKw0KPj4g KwlpbnQgaWZfaW5kZXg7CQkJLyogSUZfSU5ERVggZm9yIHRoZSBwb3J0ICovDQo+PiArCWludCBm ZHNbUlRFX1BNRF9UQVBfTUFYX1FVRVVFU107IC8qIExpc3Qgb2YgYWxsIGZpbGUgZGVzY3JpcHRv cnMgKi8NCj4+ICsNCj4+ICsJc3RydWN0IHJ4X3F1ZXVlIHJ4cVtSVEVfUE1EX1RBUF9NQVhfUVVF VUVTXTsJLyogTGlzdCBvZiBSWCBxdWV1ZXMgKi8NCj4+ICsJc3RydWN0IHR4X3F1ZXVlIHR4cVtS VEVfUE1EX1RBUF9NQVhfUVVFVUVTXTsJLyogTGlzdCBvZiBUWCBxdWV1ZXMgKi8NCj4+ICt9Ow0K Pj4gKw0KPj4gKy8qDQo+PiArICogVHVuL1RhcCBhbGxvY2F0aW9uIHJvdXRpbmUNCj4+ICsgKg0K Pj4gKyAqIG5hbWUgaXMgdGhlIG51bWJlciBvZiB0aGUgaW50ZXJmYWNlIHRvIHVzZSwgdW5sZXNz IE5VTEwgdG8gdGFrZSB0aGUgaG9zdA0KPj4gKyAqIHN1cHBsaWVkIG5hbWUuDQo+PiArICovDQo+ PiArc3RhdGljIGludA0KPj4gK3R1bl9hbGxvYyhjaGFyICogbmFtZSkNCj4gDQo+IGNoYXIgKm5h bWUNCg0KRml4ZWQuDQo+IA0KPiA8Li4uPg0KPiANCj4+ICsNCj4+ICsJLyogQWx3YXlzIHNldCB0 aGUgZmlpbGUgZGVzY3JpcHRvciB0byBub24tYmxvY2tpbmcgKi8NCj4gDQo+IHMvZmlpbGUvZmls ZQ0KPiANCj4+ICsJaWYgKGZjbnRsKGZkLCBGX1NFVEZMLCBPX05PTkJMT0NLKSA8IDApIHsNCj4+ ICsJCVJURV9MT0coRVJSLCBQTUQsICJVbmFibGUgdG8gc2V0IHRvIG5vbmJsb2NraW5nXG4iKTsN Cj4+ICsJCXBlcnJvcigiRl9TRVRGTCwgTk9OQkxPQ0siKTsNCj4+ICsJCWdvdG8gZXJyb3I7DQo+ PiArCX0NCj4+ICsNCj4+ICsJLyogSWYgdGhlIG5hbWUgaXMgZGlmZmVyZW50IHRoYXQgbmV3IG5h bWUgYXMgZGVmYXVsdCAqLw0KPj4gKwlpZiAobmFtZSAmJiBzdHJjbXAobmFtZSwgaWZyLmlmcl9u YW1lKSkNCj4+ICsJCXN0cmNweShuYW1lLCBpZnIuaWZyX25hbWUpOw0KPiBXaGF0IGFib3V0IG1v cmUgc2VjdXJlIGNvcHk/DQoNCkNoYW5nZWQgdG8gYmUgbW9yZSBzZWN1cmUuDQo+IA0KPj4gKw0K Pj4gKwlyZXR1cm4gZmQ7DQo+PiArDQo+PiArZXJyb3I6DQo+PiArCWlmIChmZCA+IDApDQo+PiAr CQljbG9zZShmZCk7DQo+PiArCXJldHVybiAtMTsNCj4+ICt9DQo+PiArDQo+IA0KPiA8Li4uPg0K PiANCj4+ICsNCj4+ICtzdGF0aWMgdm9pZA0KPj4gK3RhcF9kZXZfaW5mbyhzdHJ1Y3QgcnRlX2V0 aF9kZXYgKmRldiwgc3RydWN0IHJ0ZV9ldGhfZGV2X2luZm8gKmRldl9pbmZvKQ0KPj4gK3sNCj4+ ICsJc3RydWN0IHBtZF9pbnRlcm5hbHMgKmludGVybmFscyA9IGRldi0+ZGF0YS0+ZGV2X3ByaXZh dGU7DQo+PiArDQo+PiArCWRldl9pbmZvLT5kcml2ZXJfbmFtZSA9IGRyaXZlcm5hbWU7DQo+PiAr CWRldl9pbmZvLT5pZl9pbmRleCA9IGludGVybmFscy0+aWZfaW5kZXg7DQo+PiArCWRldl9pbmZv LT5tYXhfbWFjX2FkZHJzID0gMTsNCj4+ICsJZGV2X2luZm8tPm1heF9yeF9wa3RsZW4gPSAodWlu dDMyX3QpRVRIRVJfTUFYX1ZMQU5fRlJBTUVfTEVOOw0KPj4gKwlkZXZfaW5mby0+bWF4X3J4X3F1 ZXVlcyA9ICh1aW50MTZfdClpbnRlcm5hbHMtPm5iX3F1ZXVlczsNCj4+ICsJZGV2X2luZm8tPm1h eF90eF9xdWV1ZXMgPSAodWludDE2X3QpaW50ZXJuYWxzLT5uYl9xdWV1ZXM7DQo+IGNhc3Rpbmcg dG8gdWludDE2X3QgaXMgbm90IHJlcXVpcmVzLCBpdCBpcyBhbHJlYWR5IHVpbnQxNl90Lg0KDQpS ZW1vdmVkDQo+IA0KPj4gKwlkZXZfaW5mby0+bWluX3J4X2J1ZnNpemUgPSAwOw0KPj4gKwlkZXZf aW5mby0+cGNpX2RldiA9IE5VTEw7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkDQo+PiAr dGFwX3N0YXRzX2dldChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldiwgc3RydWN0IHJ0ZV9ldGhfc3Rh dHMgKmlnYl9zdGF0cykNCj4gaWdiX3N0YXRzPw0KPiANCj4+ICt7DQo+PiArCXVuc2lnbmVkIGks IGltYXg7DQo+PiArCXVuc2lnbmVkIGxvbmcgcnhfdG90YWwgPSAwLCB0eF90b3RhbCA9IDAsIHR4 X2Vycl90b3RhbCA9IDA7DQo+PiArCXVuc2lnbmVkIGxvbmcgcnhfYnl0ZXNfdG90YWwgPSAwLCB0 eF9ieXRlc190b3RhbCA9IDA7DQo+PiArCWNvbnN0IHN0cnVjdCBwbWRfaW50ZXJuYWxzICppbnRl cm5hbCA9IGRldi0+ZGF0YS0+ZGV2X3ByaXZhdGU7DQo+PiArDQo+PiArCWltYXggPSAoaW50ZXJu YWwtPm5iX3F1ZXVlcyA8IFJURV9FVEhERVZfUVVFVUVfU1RBVF9DTlRSUykgPw0KPj4gKwkJaW50 ZXJuYWwtPm5iX3F1ZXVlcyA6IFJURV9FVEhERVZfUVVFVUVfU1RBVF9DTlRSUzsNCj4+ICsNCj4+ ICsJZm9yIChpID0gMDsgaSA8IGltYXg7IGkrKykgew0KPj4gKwkJaWdiX3N0YXRzLT5xX2lwYWNr ZXRzW2ldID0gaW50ZXJuYWwtPnJ4cVtpXS5zdGF0cy5pcGFja2V0czsNCj4+ICsJCWlnYl9zdGF0 cy0+cV9pYnl0ZXNbaV0gPSBpbnRlcm5hbC0+cnhxW2ldLnN0YXRzLmlieXRlczsNCj4+ICsJCXJ4 X3RvdGFsICs9IGlnYl9zdGF0cy0+cV9pcGFja2V0c1tpXTsNCj4+ICsJCXJ4X2J5dGVzX3RvdGFs ICs9IGlnYl9zdGF0cy0+cV9pYnl0ZXNbaV07DQo+PiArCX0NCj4+ICsNCj4+ICsJaW1heCA9IChp bnRlcm5hbC0+bmJfcXVldWVzIDwgUlRFX0VUSERFVl9RVUVVRV9TVEFUX0NOVFJTKSA/DQo+PiAr CQlpbnRlcm5hbC0+bmJfcXVldWVzIDogUlRFX0VUSERFVl9RVUVVRV9TVEFUX0NOVFJTOw0KPiBE byB3ZSBuZWVkIHRvIGR1cGxpY2F0ZSBpbWF4IGNhbGN1bGF0aW9uPw0KDQpSZW1vdmVkDQo+IA0K PiANCj4+ICsNCj4+ICsJZm9yIChpID0gMDsgaSA8IGltYXg7IGkrKykgew0KPj4gKwkJaWdiX3N0 YXRzLT5xX29wYWNrZXRzW2ldID0gaW50ZXJuYWwtPnR4cVtpXS5zdGF0cy5vcGFja2V0czsNCj4+ ICsJCWlnYl9zdGF0cy0+cV9lcnJvcnNbaV0gPSBpbnRlcm5hbC0+dHhxW2ldLnN0YXRzLmVycnM7 DQo+PiArCQlpZ2Jfc3RhdHMtPnFfb2J5dGVzW2ldID0gaW50ZXJuYWwtPnR4cVtpXS5zdGF0cy5v Ynl0ZXM7DQo+PiArCQl0eF90b3RhbCArPSBpZ2Jfc3RhdHMtPnFfb3BhY2tldHNbaV07DQo+PiAr CQl0eF9lcnJfdG90YWwgKz0gaWdiX3N0YXRzLT5xX2Vycm9yc1tpXTsNCj4+ICsJCXR4X2J5dGVz X3RvdGFsICs9IGlnYl9zdGF0cy0+cV9vYnl0ZXNbaV07DQo+PiArCX0NCj4+ICsNCj4+ICsJaWdi X3N0YXRzLT5pcGFja2V0cyA9IHJ4X3RvdGFsOw0KPj4gKwlpZ2Jfc3RhdHMtPmlieXRlcyA9IHJ4 X2J5dGVzX3RvdGFsOw0KPj4gKwlpZ2Jfc3RhdHMtPm9wYWNrZXRzID0gdHhfdG90YWw7DQo+PiAr CWlnYl9zdGF0cy0+b2Vycm9ycyA9IHR4X2Vycl90b3RhbDsNCj4+ICsJaWdiX3N0YXRzLT5vYnl0 ZXMgPSB0eF9ieXRlc190b3RhbDsNCj4+ICt9DQo+PiArDQo+IA0KPiA8Li4uPg0KPiANCj4+ICsN Cj4+ICtzdGF0aWMgaW50DQo+PiArcnRlX2V0aF9kZXZfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUs DQo+PiArCQkgICBzdHJ1Y3QgcnRlX2V0aF9kZXYgKipldGhfZGV2LA0KPj4gKwkJICAgY29uc3Qg c3RydWN0IGV0aF9kZXZfb3BzICpkZXZfb3BzLA0KPj4gKwkJICAgdm9pZCAqKmludGVybmFscywg c2l6ZV90IGludGVybmFsX3NpemUsDQo+PiArCQkgICB1aW50MTZfdCBmbGFnKQ0KPj4gK3sNCj4+ ICsJY2hhciBidWZmW1JURV9FVEhfTkFNRV9NQVhfTEVOXTsNCj4+ICsJaW50IG51bWFfbm9kZSA9 IHJ0ZV9zb2NrZXRfaWQoKTsNCj4+ICsJc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYgPSBOVUxMOw0K Pj4gKwlzdHJ1Y3QgcnRlX2V0aF9kZXZfZGF0YSAqZGF0YSA9IE5VTEw7DQo+PiArCXZvaWQgKnBy aXYgPSBOVUxMOw0KPj4gKw0KPj4gKwlpZiAoKG5hbWUgPT0gTlVMTCkgfHwgKGV0aF9kZXYgPT0g TlVMTCkgfHwgKGRldl9vcHMgPT0gTlVMTCkgfHwNCj4+ICsJICAgIChpbnRlcm5hbHMgPT0gTlVM TCkgfHwgKGludGVybmFsX3NpemUgPT0gMCkpIHsNCj4+ICsJCVJURV9QTURfREVCVUdfVFJBQ0Uo IlBhcmFtdGVycyBhcmUgaW52YWxpZFxuIik7DQo+PiArCQlyZXR1cm4gLTE7DQo+PiArCX0NCj4+ ICsNCj4+ICsJZGV2ID0gcnRlX2V0aF9kZXZfYWxsb2NhdGUobmFtZSk7DQo+PiArCWlmIChkZXYg PT0gTlVMTCkgew0KPj4gKwkJUlRFX1BNRF9ERUJVR19UUkFDRSgiJXM6IHJ0ZV9ldGhfZGV2X2Fs bG9jYXRlIGZhaWxlZCBmb3IgJXNcbiIsDQo+PiArCQkJCSAgICBuYW1lLCBidWZmKTsNCj4+ICsJ CWdvdG8gZXJyb3I7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYgKGZsYWcgJiBSVEVfVVNFX1BSSVZB VEVfREFUQSkgew0KPiANCj4gWW91IG1heSBuZWVkIHRvIHNhdmUgdGhpcyBmbGFnIHZhbHVlIHNv bWV3aGVyZSBpbiBpbnRlcm5hbHMsIHRvIGRlY2lkZQ0KPiBob3cgdG8gZnJlZSBkYXRhIGxhdGVy Lg0KDQpMZXQgbWUgbG9vayBpbnRvIHRoaXMgb25lIG1vcmUgYW5kIHNlZSBpZiBpdCBpcyByZXF1 aXJlZCBhdCBhbGwuDQo+IA0KPj4gKwkJLyoNCj4+ICsJCSAqIG5vdyBkbyBhbGwgZGF0YSBhbGxv Y2F0aW9uIC0gZm9yIGV0aF9kZXYgc3RydWN0dXJlLCBkdW1teQ0KPj4gKwkJICogcGNpIGRyaXZl ciBhbmQgaW50ZXJuYWwgKHByaXZhdGUpIGRhdGENCj4+ICsJCSAqLw0KPj4gKwkJc25wcmludGYo YnVmZiwgc2l6ZW9mKGJ1ZmYpLCAiRC0lcy0lZCIsIG5hbWUsIG51bWFfbm9kZSk7DQo+PiArCQlk YXRhID0gcnRlX3ptYWxsb2Nfc29ja2V0KGJ1ZmYsIHNpemVvZihzdHJ1Y3QgcnRlX2V0aF9kZXZf ZGF0YSksDQo+PiArCQkJCQkgIDAsIG51bWFfbm9kZSk7DQo+PiArCQlpZiAoZGF0YSA9PSBOVUxM KSB7DQo+PiArCQkJUlRFX1BNRF9ERUJVR19UUkFDRSgiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBt ZW1vcnlcbiIsDQo+PiArCQkJCQkgICAgbmFtZSk7DQo+PiArCQkJZ290byBlcnJvcjsNCj4+ICsJ CX0NCj4+ICsJCS8qIG1vdmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHN0cnVjdHVyZSB0byB0 aGUgbmV3IG9uZSAqLw0KPj4gKwkJcnRlX21lbWNweShkYXRhLCBkZXYtPmRhdGEsIHNpemVvZihz dHJ1Y3QgcnRlX2V0aF9kZXZfZGF0YSkpOw0KPiBXaHkgZG8gd2UgbmVlZCB0byBjb3B5LCB0cnlp bmcgdG8gcHJlc2VydmUgd2hpY2ggZGF0YT8NCj4gDQo+PiArCQlkZXYtPmRhdGEgPSBkYXRhOwkv KiBPdmVycmlkZSB0aGUgY3VycmVudCBkYXRhIHBvaW50ZXIgKi8NCj4+ICsJfSBlbHNlDQo+PiAr CQlkYXRhID0gZGV2LT5kYXRhOw0KPj4gKw0KPj4gKwlzbnByaW50ZihidWZmLCBzaXplb2YoYnVm ZiksICJJLSVzLSVkIiwgbmFtZSwgbnVtYV9ub2RlKTsNCj4+ICsJcHJpdiA9IHJ0ZV96bWFsbG9j X3NvY2tldChidWZmLCBpbnRlcm5hbF9zaXplLCAwLCBudW1hX25vZGUpOw0KPj4gKwlpZiAocHJp diA9PSBOVUxMKSB7DQo+PiArCQlSVEVfUE1EX0RFQlVHX1RSQUNFKCJVbmFibGUgdG8gYWxsb2Nh dGUgaW50ZXJuYWwgbWVtb3J5ICVsdVxuIiwNCj4+ICsJCQkJICAgIGludGVybmFsX3NpemUpOw0K Pj4gKwkJZ290byBlcnJvcjsNCj4+ICsJfQ0KPj4gKw0KPj4gKwkvKiBTZXR1cCBzb21lIGRlZmF1 bHQgdmFsdWVzICovDQo+PiArCWRldi0+ZGV2X29wcyA9IGRldl9vcHM7DQo+PiArCWRhdGEtPmRl dl9wcml2YXRlID0gcHJpdjsNCj4gDQo+PiArCWRhdGEtPnBvcnRfaWQgPSBkZXYtPmRhdGEtPnBv cnRfaWQ7DQo+PiArCW1lbW1vdmUoZGF0YS0+bmFtZSwgZGV2LT5kYXRhLT5uYW1lLCBzdHJsZW4o ZGV2LT5kYXRhLT5uYW1lKSk7DQo+IFRoZXNlIHR3byBhc3NpZ25tZW50cyBhcmUgdXNlbGVzcywg bmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgImRldi0+ZGF0YSA9DQo+IGRhdGEiIGFzc2lnbm1lbnQu DQoNClJld29ya2VkIHRoaXMgY29kZSBhcmVhIHRvIHJlbW92ZSBpdC4NCj4gDQo+PiArDQo+PiAr CWRldi0+ZHJpdmVyID0gTlVMTDsNCj4+ICsJZGF0YS0+ZGV2X2ZsYWdzID0gUlRFX0VUSF9ERVZf REVUQUNIQUJMRTsNCj4+ICsJZGF0YS0+a2RydiA9IFJURV9LRFJWX05PTkU7DQo+PiArCWRhdGEt Pm51bWFfbm9kZSA9IG51bWFfbm9kZTsNCj4+ICsNCj4+ICsJKmV0aF9kZXYgPSBkZXY7DQo+PiAr CSppbnRlcm5hbHMgPSBwcml2Ow0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICtlcnJvcjoNCj4+ ICsJcnRlX2ZyZWUocHJpdik7DQo+PiArDQo+PiArCWlmIChmbGFnICYgUlRFX1VTRV9QUklWQVRF X0RBVEEpDQo+PiArCQlydGVfZnJlZShkYXRhKTsNCj4+ICsNCj4+ICsJcnRlX2V0aF9kZXZfcmVs ZWFzZV9wb3J0KGRldik7DQo+PiArDQo+PiArCXJldHVybiAtMTsNCj4+ICt9DQo+PiArDQo+PiAr c3RhdGljIGludA0KPj4gK3BtZF9pbml0X2ludGVybmFscyhjb25zdCBjaGFyICpuYW1lLCBzdHJ1 Y3QgdGFwX2luZm8gKnRhcCwNCj4+ICsJCSAgIHN0cnVjdCBwbWRfaW50ZXJuYWxzICoqaW50ZXJu YWxzLA0KPj4gKwkJICAgc3RydWN0IHJ0ZV9ldGhfZGV2ICoqZXRoX2RldikNCj4+ICt7DQo+PiAr CXN0cnVjdCBydGVfZXRoX2RldiAqZGV2ID0gTlVMTDsNCj4+ICsJc3RydWN0IHBtZF9pbnRlcm5h bHMgKmludGVybmFsID0gTlVMTDsNCj4+ICsJc3RydWN0IHJ0ZV9ldGhfZGV2X2RhdGEgKmRhdGEg PSBOVUxMOw0KPj4gKwlpbnQgcmV0LCBpLCBmZCA9IC0xOw0KPj4gKw0KPj4gKwlSVEVfTE9HKElO Rk8sIFBNRCwNCj4+ICsJCSIlczogQ3JlYXRlIFRVTi9UQVAgRXRoZXJuZXQgZGV2aWNlIHdpdGgg JWQgcXVldWVzIG9uIG51bWEgJXVcbiIsDQo+PiArCQluYW1lLCBSVEVfUE1EX1RBUF9NQVhfUVVF VUVTLCBydGVfc29ja2V0X2lkKCkpOw0KPj4gKw0KPj4gKwlwbWRfbGluay5saW5rX3NwZWVkID0g dGFwLT5zcGVlZDsNCj4+ICsNCj4+ICsJcmV0ID0gcnRlX2V0aF9kZXZfY3JlYXRlKHRhcC0+bmFt ZSwgJmRldiwgJm9wcywNCj4+ICsJCQkJICh2b2lkICoqKSZpbnRlcm5hbCwgc2l6ZW9mKHN0cnVj dCBwbWRfaW50ZXJuYWxzKSwNCj4gV2h5IHJ0ZV9ldGhfZGV2X2NyZWF0ZSgpIGdldCAidm9pZCAq KmludGVybmFscyIgd2hpY2ggcmVxdWlyZXMgY2FzdGluZywNCj4gYnV0IG5vdCAic3RydWN0IHBt ZF9pbnRlcm5hbHMgKippbnRlcm5hbHPigJ0gPw0KDQpGaXhlZC4NCj4gDQo+PiArCQkJCSBSVEVf VVNFX1BSSVZBVEVfREFUQSk7DQo+PiArCWlmIChyZXQgPCAwKQ0KPj4gKwkJcmV0dXJuIC0xOw0K Pj4gKw0KPj4gKwlzdHJuY3B5KGludGVybmFsLT5uYW1lLCB0YXAtPm5hbWUsIHNpemVvZihpbnRl cm5hbC0+bmFtZSkpOw0KPj4gKw0KPj4gKwlpbnRlcm5hbC0+bmJfcXVldWVzID0gUlRFX1BNRF9U QVBfTUFYX1FVRVVFUzsNCj4+ICsNCj4+ICsJLyogQ3JlYXRlIHRoZSBmaXJzdCBUYXAgZGV2aWNl ICovDQo+PiArCWlmICgoZmQgPSB0dW5fYWxsb2MoZGV2LT5kYXRhLT5uYW1lKSkgPCAwKSB7DQo+ PiArCQlSVEVfTE9HKEVSUiwgUE1ELCAidHVuX2FsbG9jKCVzKSBmYWlsZWRcbiIsIGRldi0+ZGF0 YS0+bmFtZSk7DQo+PiArCQlydGVfZnJlZShpbnRlcm5hbCk7DQo+IHJ0ZV9mcmVlKGRldi0+ZGF0 YSk7ID8NCj4gQnV0IG5lZWRzIHRvIGNoZWNrIFJURV9VU0VfUFJJVkFURV9EQVRBIC4uDQoNClNl ZSBhYm92ZQ0KPiANCj4+ICsJCXJ0ZV9ldGhfZGV2X3JlbGVhc2VfcG9ydChkZXYpOw0KPj4gKwkJ cmV0dXJuIC0xOw0KPj4gKwl9DQo+PiArDQo+PiArCS8qIFByZXNldHVwIHRoZSBmZHMgdG8gLTEg YXMgYmVpbmcgbm90IHdvcmtpbmcgKi8NCj4+ICsJZm9yKGkgPSAwOyBpIDwgUlRFX1BNRF9UQVBf TUFYX1FVRVVFUzsgaSsrKSB7DQo+PiArCQlpbnRlcm5hbC0+ZmRzW2ldID0gLTE7DQo+PiArCQlp bnRlcm5hbC0+cnhxW2ldLmZkID0gLTE7DQo+PiArCQlpbnRlcm5hbC0+dHhxW2ldLmZkID0gLTE7 DQo+PiArCX0NCj4+ICsNCj4+ICsJLyogVGFrZSB0aGUgVFVOL1RBUCBmZCBhbmQgcGxhY2UgaW4g dGhlIGZpcnN0IGxvY2F0aW9uICovDQo+PiArCWludGVybmFsLT5yeHFbMF0uZmQgPSBmZDsNCj4+ ICsJaW50ZXJuYWwtPnR4cVswXS5mZCA9IGZkOw0KPj4gKwlpbnRlcm5hbC0+ZmRzWzBdID0gZmQ7 DQo+PiArDQo+PiArCWlmIChwbWRfbWFjX2FkZHJlc3MoZmQsIGRldiwgJmludGVybmFsLT5ldGhf YWRkcikgPCAwKSB7DQo+PiArCQlydGVfZnJlZShpbnRlcm5hbCk7DQo+IHJ0ZV9mcmVlKGRldi0+ ZGF0YSk7ID8NCg0KWWVzIEFkZGVkLg0KPiANCj4+ICsJCXJ0ZV9ldGhfZGV2X3JlbGVhc2VfcG9y dChkZXYpOw0KPj4gKwkJcmV0dXJuIC0xOw0KPj4gKwl9DQo+PiArDQo+PiArCWRhdGEgPSBkZXYt PmRhdGE7DQo+PiArDQo+PiArCWRhdGEtPmRldl9saW5rID0gcG1kX2xpbms7DQo+PiArCWRhdGEt Pm1hY19hZGRycyA9ICZpbnRlcm5hbC0+ZXRoX2FkZHI7DQo+PiArDQo+PiArCWRhdGEtPm5iX3J4 X3F1ZXVlcyA9ICh1aW50MTZfdClpbnRlcm5hbC0+bmJfcXVldWVzOw0KPj4gKwlkYXRhLT5uYl90 eF9xdWV1ZXMgPSAodWludDE2X3QpaW50ZXJuYWwtPm5iX3F1ZXVlczsNCj4gbm8gY2FzdCByZXF1 aXJlZC4NCg0KUmVtb3ZlZA0KPiANCj4+ICsJZGF0YS0+ZHJ2X25hbWUgPSBkcml2ZXJuYW1lOw0K Pj4gKw0KPj4gKwkqZXRoX2RldiA9IGRldjsNCj4+ICsJKmludGVybmFscyA9IGludGVybmFsOw0K Pj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+IA0KPiA8Li4uPg0KPiANCj4+ICsN Cj4+ICtzdGF0aWMgaW50DQo+PiArc2V0X2ludGVyZmFjZV9zcGVlZChjb25zdCBjaGFyICprZXkg X19ydGVfdW51c2VkLA0KPj4gKwkJICAgIGNvbnN0IGNoYXIgKnZhbHVlLA0KPj4gKwkJICAgIHZv aWQgKmV4dHJhX2FyZ3MgX19ydGVfdW51c2VkKQ0KPiBuZWVkIHRvIGRyb3AgIF9fcnRlX3VudXNl ZCBmb3IgZXh0cmFfYXJncw0KPiANCj4+ICt7DQo+PiArCXN0cnVjdCB0YXBfaW5mbyAqdGFwID0g KHN0cnVjdCB0YXBfaW5mbyAqKWV4dHJhX2FyZ3M7DQo+PiArDQo+PiArCXBtZF9saW5rLmxpbmtf c3BlZWQgPSAodmFsdWUpID8gYXRvaSh2YWx1ZSkgOiBFVEhfU1BFRURfTlVNXzEwRzsNCj4+ICsJ dGFwLT5zcGVlZCA9IHBtZF9saW5rLmxpbmtfc3BlZWQ7DQo+PiArDQo+PiArCXJldHVybiAwOw0K Pj4gK30NCj4+ICsNCj4+ICsvKg0KPj4gKyAqIE9wZW4gYSBUQVAgaW50ZXJmYWNlIGRldmljZS4N Cj4+ICsgKi8NCj4+ICtzdGF0aWMgaW50DQo+PiArcnRlX3BtZF90YXBfZGV2aW5pdChjb25zdCBj aGFyICpuYW1lLCBjb25zdCBjaGFyICpwYXJhbXMpDQo+PiArew0KPj4gKwlpbnQgcmV0ID0gMDsN Cj4+ICsJc3RydWN0IHJ0ZV9rdmFyZ3MgKmt2bGlzdDsNCj4+ICsJc3RydWN0IHRhcF9pbmZvIHRh cF9pbmZvOw0KPj4gKw0KPj4gKwkvKiBTZXR1cCBkZWZhdWx0IHZhbHVlcyAqLw0KPj4gKwltZW1z ZXQoJnRhcF9pbmZvLCAwLCBzaXplb2YodGFwX2luZm8pKTsNCj4+ICsNCj4+ICsJdGFwX2luZm8u c3BlZWQgPSBFVEhfU1BFRURfTlVNXzEwRzsNCj4+ICsJc25wcmludGYodGFwX2luZm8ubmFtZSwg c2l6ZW9mKHRhcF9pbmZvLm5hbWUpLCAiZHRhcCVkIiwgdGFwX3VuaXQrKyk7DQo+IFdoYXQgYWJv dXQgZXh0cmFjdGluZyBpZmFjZSBuYW1lICJkdGFwIiBpbnRvIGEgbWFjcm8gdG8gbWFrZSBpdCBt b3JlDQo+IHZpc2libGUuDQoNCkNyZWF0ZWQgbWFjcm8gZm9yIHRoZSBkZWZhdWx0IG5hbWUuDQo+ IA0KPj4gKw0KPj4gKwlpZiAoKHBhcmFtcyA9PSBOVUxMKSB8fCAocGFyYW1zWzBdID09ICdcMCcp KSB7DQo+PiArCQlSVEVfTE9HKElORk8sIFBNRCwgIkluaXRpYWxpemluZyBwbWRfdGFwIGZvciAl c1xuIiwgbmFtZSk7DQo+PiArDQo+PiArCQlyZXQgPSBldGhfZGV2X3RhcF9jcmVhdGUobmFtZSwg JnRhcF9pbmZvKTsNCj4gVGhpcyAibmFtZSIgaXMgbm90IHVzZWQgYXQgYWxsIChleGNlcHQgZnJv bSBSVEVfTE9HKSwgaW5zdGVhZCB0YXAtPm5hbWUNCj4gaXMgdXNlZCBmb3IgaW50ZXJmYWNlIG5h bWUsIHNvIHdoeSBjYXJ5aW5nIHRoaXMgdmFyaWFibGUgYXJvdW5kPw0KDQpGaXhlZCBhbmQgY2hh bmdlZCB0aGUgQVBJLg0KPiANCj4+ICsJCWdvdG8gbGVhdmU7DQo+PiArCX0NCj4+ICsNCj4+ICsJ UlRFX0xPRyhJTkZPLCBQTUQsICJJbml0aWFsaXplICVzIHdpdGggcGFyYW1zICglcylcbiIsIG5h bWUsIHBhcmFtcyk7DQo+PiArDQo+PiArCWt2bGlzdCA9IHJ0ZV9rdmFyZ3NfcGFyc2UocGFyYW1z LCB2YWxpZF9hcmd1bWVudHMpOw0KPj4gKwlpZiAoIWt2bGlzdCkgew0KPj4gKwkJcmV0ID0gZXRo X2Rldl90YXBfY3JlYXRlKG5hbWUsICZ0YXBfaW5mbyk7DQo+PiArCQlnb3RvIGxlYXZlOw0KPj4g Kwl9DQo+PiArDQo+PiArCWlmIChydGVfa3ZhcmdzX2NvdW50KGt2bGlzdCwgRVRIX1RBUF9TUEVF RF9BUkcpID09IDEpIHsNCj4+ICsJCXJldCA9IHJ0ZV9rdmFyZ3NfcHJvY2Vzcyhrdmxpc3QsIEVU SF9UQVBfU1BFRURfQVJHLA0KPj4gKwkJCQkJICZzZXRfaW50ZXJmYWNlX3NwZWVkLCAmdGFwX2lu Zm8pOw0KPj4gKwkJaWYgKHJldCA8IDApDQo+PiArCQkJZ290byBsZWF2ZTsNCj4+ICsJfSBlbHNl DQo+PiArCQlzZXRfaW50ZXJmYWNlX3NwZWVkKE5VTEwsIE5VTEwsICZ0YXBfaW5mbyk7DQo+IFRo aXMgY2FsbCBpcyByZWR1bmRhbnQsIHRhcF9pbmZvIGFscmVhZHkgaGFzIGRlZmF1bHQgc3BlZWQg dmFsdWUgc2V0Lg0KDQpSZW1vdmVkDQo+IA0KPj4gKw0KPj4gKwlpZiAocnRlX2t2YXJnc19jb3Vu dChrdmxpc3QsIEVUSF9UQVBfSUZBQ0VfQVJHKSA9PSAxKSB7DQo+PiArCQlyZXQgPSBydGVfa3Zh cmdzX3Byb2Nlc3Moa3ZsaXN0LCBFVEhfVEFQX0lGQUNFX0FSRywNCj4+ICsJCQkJCSAmc2V0X2lu dGVyZmFjZV9uYW1lLCAmdGFwX2luZm8pOw0KPj4gKwkJaWYgKHJldCA8IDApDQo+PiArCQkJZ290 byBsZWF2ZTsNCj4+ICsJfSBlbHNlDQo+PiArCQlzZXRfaW50ZXJmYWNlX25hbWUoTlVMTCwgTlVM TCwgKHZvaWQgKikmdGFwX2luZm8pOw0KPiB0YXBfaW5mby0+bmFtZSBhbHJlYWR5IHNldCB0byBk ZWZhdWx0IHZhbHVlIChkdGFwJWQpLCB0aGlzIGNhbGwgaXMgbm90DQo+IHJlcXVpcmVkLg0KDQpS ZW1vdmVkDQo+IA0KPj4gKw0KPj4gKwlydGVfa3ZhcmdzX2ZyZWUoa3ZsaXN0KTsNCj4+ICsNCj4+ ICtsZWF2ZToNCj4+ICsJaWYgKHJldCA9PSAtMSkNCj4+ICsJCVJURV9MT0coSU5GTywgUE1ELCAi RmFpbGVkIHRvIGNyZWF0ZSBwbWRfdGFwIGZvciAlc1xuIiwgbmFtZSk7DQo+PiArDQo+PiArCXJl dHVybiByZXQ7DQo+PiArfQ0KPj4gKw0KPj4gKy8qDQo+PiArICogZGV0YWNoIGEgVEFQIGRldmlj ZS4NCj4+ICsgKi8NCj4+ICtzdGF0aWMgaW50DQo+PiArcnRlX3BtZF90YXBfZGV2dW5pbml0KGNv bnN0IGNoYXIgKm5hbWUpDQo+PiArew0KPj4gKwlzdHJ1Y3QgcnRlX2V0aF9kZXYgKmV0aF9kZXYg PSBOVUxMOw0KPj4gKwlzdHJ1Y3QgcG1kX2ludGVybmFscyAqaW50ZXJuYWxzOw0KPj4gKwlpbnQg aTsNCj4+ICsNCj4+ICsJUlRFX0xPRyhJTkZPLCBQTUQsICJDbG9zaW5nIFRVTi9UQVAgRXRoZXJu ZXQgZGV2aWNlIG9uIG51bWEgJXVcbiIsDQo+PiArCQlydGVfc29ja2V0X2lkKCkpOw0KPj4gKw0K Pj4gKwlpZiAobmFtZSA9PSBOVUxMKQ0KPiBUaGlzIGNoZWNrIGlzIHJlZHVuZGFudCwgZWFsIGxh eWVyIHdvbid0IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoICJuYW1lDQo+ID09IE5VTEzigJ0NCg0K UmVtb3ZlZA0KPiANCj4+ICsJCXJldHVybiAwOw0KPj4gKw0KPj4gKwkvKiBmaW5kIHRoZSBldGhk ZXYgZW50cnkgKi8NCj4+ICsJZXRoX2RldiA9IHJ0ZV9ldGhfZGV2X2FsbG9jYXRlZChuYW1lKTsN Cj4+ICsJaWYgKGV0aF9kZXYgPT0gTlVMTCkNCj4+ICsJCXJldHVybiAwOw0KPj4gKw0KPj4gKwlp bnRlcm5hbHMgPSBldGhfZGV2LT5kYXRhLT5kZXZfcHJpdmF0ZTsNCj4+ICsJZm9yIChpID0gMDsg aSA8IGludGVybmFscy0+bmJfcXVldWVzOyBpKyspDQo+PiArCQlpZiAoaW50ZXJuYWxzLT5mZHNb aV0gIT0gLTEpDQo+PiArCQkJY2xvc2UoaW50ZXJuYWxzLT5mZHNbaV0pOw0KPj4gKw0KPj4gKwly dGVfZnJlZShldGhfZGV2LT5kYXRhLT5kZXZfcHJpdmF0ZSk7DQo+PiArCXJ0ZV9mcmVlKGV0aF9k ZXYtPmRhdGEpOw0KPiBkYXRhIGNhbiBiZSBzaGFyZWQ/DQo+IERvbid0IHdlIG5lZWQgYSBSVEVf VVNFX1BSSVZBVEVfREFUQSBmbGFnIGNoZWNrPw0KPiANCj4+ICsNCj4+ICsJcnRlX2V0aF9kZXZf cmVsZWFzZV9wb3J0KGV0aF9kZXYpOw0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiAr DQo+PiArc3RhdGljIHN0cnVjdCBydGVfdmRldl9kcml2ZXIgcG1kX3RhcF9kcnYgPSB7DQo+PiAr CS5pbml0ID0gcnRlX3BtZF90YXBfZGV2aW5pdCwNCj4+ICsJLnVuaW5pdCA9IHJ0ZV9wbWRfdGFw X2RldnVuaW5pdCwNCj4+ICt9Ow0KPj4gKw0KPj4gK0RSSVZFUl9SRUdJU1RFUl9WREVWKGV0aF90 YXAsIHBtZF90YXBfZHJ2KTsNCj4gbmFtZSBjb252ZW50aW9uIGlzIG5vdzog4oCcbmV0X3RhcCIN Cg0KRml4ZWQNCj4gDQo+PiArRFJJVkVSX1JFR0lTVEVSX1BBUkFNX1NUUklORyhldGhfdGFwLA0K Pj4gKwkJCSAgICAgImlmYWNlPTxzdHJpbmc+LHNwZWVkPU4iKTsNCj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL25ldC90YXAvcnRlX3BtZF90YXBfdmVyc2lvbi5tYXAgYi9kcml2ZXJzL25ldC90YXAv cnRlX3BtZF90YXBfdmVyc2lvbi5tYXANCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+PiBpbmRl eCAwMDAwMDAwLi42MTQ2M2JmDQo+PiAtLS0gL2Rldi9udWxsDQo+PiArKysgYi9kcml2ZXJzL25l dC90YXAvcnRlX3BtZF90YXBfdmVyc2lvbi5tYXANCj4+IEBAIC0wLDAgKzEsNCBAQA0KPj4gK0RQ REtfMTYuMTEgew0KPj4gKw0KPj4gKwlsb2NhbDogKjsNCj4+ICt9Ow0KPj4gZGlmZiAtLWdpdCBh L21rL3J0ZS5hcHAubWsgYi9tay9ydGUuYXBwLm1rDQo+PiBpbmRleCAxYTAwOTViLi5iZDFkMTBm IDEwMDY0NA0KPj4gLS0tIGEvbWsvcnRlLmFwcC5taw0KPj4gKysrIGIvbWsvcnRlLmFwcC5taw0K Pj4gQEAgLTEyOSw2ICsxMjksNyBAQCBpZmVxICgkKENPTkZJR19SVEVfTElCUlRFX1ZIT1NUKSx5 KQ0KPj4gX0xETElCUy0kKENPTkZJR19SVEVfTElCUlRFX1BNRF9WSE9TVCkgICAgICArPSAtbHJ0 ZV9wbWRfdmhvc3QNCj4+IGVuZGlmICMgJChDT05GSUdfUlRFX0xJQlJURV9WSE9TVCkNCj4+IF9M RExJQlMtJChDT05GSUdfUlRFX0xJQlJURV9WTVhORVQzX1BNRCkgICAgKz0gLWxydGVfcG1kX3Zt eG5ldDNfdWlvDQo+PiArX0xETElCUy0kKENPTkZJR19SVEVfTElCUlRFX1BNRF9UQVApICAgICAg ICArPSAtbHJ0ZV9wbWRfdGFwDQo+IHBsZWFzZSBwdXQgaW4gYWxwaGViZXRpY2FsIG9yZGVyDQoN CkRvbmUNCj4gDQo+PiANCj4+IGlmZXEgKCQoQ09ORklHX1JURV9MSUJSVEVfQ1JZUFRPREVWKSx5 KQ0KPj4gX0xETElCUy0kKENPTkZJR19SVEVfTElCUlRFX1BNRF9BRVNOSV9NQikgICArPSAtbHJ0 ZV9wbWRfYWVzbmlfbWINCg0KDQo=