From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id EACA437B4 for ; Mon, 25 Sep 2017 07:55:45 +0200 (CEST) Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 24 Sep 2017 22:55:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,435,1500966000"; d="scan'208";a="315751698" Received: from kmsmsx154.gar.corp.intel.com ([172.21.73.14]) by fmsmga004.fm.intel.com with ESMTP; 24 Sep 2017 22:55:43 -0700 Received: from pgsmsx110.gar.corp.intel.com (10.221.44.111) by KMSMSX154.gar.corp.intel.com (172.21.73.14) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 25 Sep 2017 13:55:42 +0800 Received: from pgsmsx103.gar.corp.intel.com ([169.254.2.203]) by PGSMSX110.gar.corp.intel.com ([169.254.13.249]) with mapi id 14.03.0319.002; Mon, 25 Sep 2017 13:55:42 +0800 From: "Zhao1, Wei" To: "Wu, Jingjing" , "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH v3 1/2] net/i40e: queue region set and flush Thread-Index: AQHTLdIoeqU7BZgiK0uTHIs5i75GdaLDuyKAgAFud3A= Date: Mon, 25 Sep 2017 05:55:41 +0000 Message-ID: References: <1505282644-40415-1-git-send-email-wei.zhao1@intel.com> <1505445188-70251-1-git-send-email-wei.zhao1@intel.com> <1505445188-70251-2-git-send-email-wei.zhao1@intel.com> <9BB6961774997848B5B42BEC655768F810E7BE31@SHSMSX103.ccr.corp.intel.com> In-Reply-To: <9BB6961774997848B5B42BEC655768F810E7BE31@SHSMSX103.ccr.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 10.0.102.7 dlp-reaction: no-action x-originating-ip: [172.30.20.206] Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v3 1/2] net/i40e: queue region set and flush X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 25 Sep 2017 05:55:46 -0000 SGmjrCBqaW5namluZw0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFd1 LCBKaW5namluZw0KPiBTZW50OiBNb25kYXksIFNlcHRlbWJlciAyNSwgMjAxNyAxMjowMiBBTQ0K PiBUbzogWmhhbzEsIFdlaSA8d2VpLnpoYW8xQGludGVsLmNvbT47IGRldkBkcGRrLm9yZw0KPiBD YzogWmhhbzEsIFdlaSA8d2VpLnpoYW8xQGludGVsLmNvbT4NCj4gU3ViamVjdDogUkU6IFtkcGRr LWRldl0gW1BBVENIIHYzIDEvMl0gbmV0L2k0MGU6IHF1ZXVlIHJlZ2lvbiBzZXQgYW5kIGZsdXNo DQo+IA0KPiANCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBk ZXYgW21haWx0bzpkZXYtYm91bmNlc0BkcGRrLm9yZ10gT24gQmVoYWxmIE9mIFdlaSBaaGFvDQo+ ID4gU2VudDogRnJpZGF5LCBTZXB0ZW1iZXIgMTUsIDIwMTcgMTE6MTMgQU0NCj4gPiBUbzogZGV2 QGRwZGsub3JnDQo+ID4gQ2M6IFpoYW8xLCBXZWkgPHdlaS56aGFvMUBpbnRlbC5jb20+DQo+ID4g U3ViamVjdDogW2RwZGstZGV2XSBbUEFUQ0ggdjMgMS8yXSBuZXQvaTQwZTogcXVldWUgcmVnaW9u IHNldCBhbmQNCj4gPiBmbHVzaA0KPiA+DQo+ID4gVGhpcyBmZWF0dXJlIGVuYWJsZSBxdWV1ZSBy ZWdpb25zIGNvbmZpZ3VyYXRpb24gZm9yIFJTUyBpbiBQRi9WRiwgc28NCj4gPiB0aGF0IGRpZmZl cmVudCB0cmFmZmljIGNsYXNzZXMgb3IgZGlmZmVyZW50IHBhY2tldCBjbGFzc2lmaWNhdGlvbg0K PiA+IHR5cGVzIGNhbiBiZSBzZXBhcmF0ZWQgdG8gZGlmZmVyZW50IHF1ZXVlcyBpbiBkaWZmZXJl bnQgcXVldWUNCj4gPiByZWdpb25zLlRoaXMgcGF0Y2ggY2FuIHNldCBxdWV1ZSByZWdpb24gcmFu Z2UsIGl0IGluY2x1ZGUgcXVldWUgbnVtYmVyDQo+ID4gaW4gYSByZWdpb24gYW5kIHRoZSBpbmRl eCBvZiBmaXJzdCBxdWV1ZS4NCj4gPiBUaGlzIHBhdGNoIGVuYWJsZSBtYXBwaW5nIGJldHdlZW4g ZGlmZmVyZW50IHByaW9yaXRpZXMgKFVQKSBhbmQNCj4gPiBkaWZmZXJlbnQgdHJhZmZpYyBjbGFz c2VzLkl0IGFsc28gZW5hYmxlIG1hcHBpbmcgYmV0d2VlbiBhIHJlZ2lvbg0KPiA+IGluZGV4IGFu ZCBhIHNlcGNpZmljIGZsb3d0eXBlKFBDVFlQRSkuSXQgYWxzbyBwcm92aWRlIHRoZSBzb2x1dGlv biBvZg0KPiA+IGZsdXNoIGFsbCBjb25maWd1cmF0aW9uIGFib3V0IHF1ZXVlIHJlZ2lvbiB0aGUg YWJvdmUgZGVzY3JpYmVkLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogV2VpIFpoYW8gPHdlaS56 aGFvMUBpbnRlbC5jb20+DQo+ID4gLS0tDQo+ID4gIGRyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhk ZXYuYyAgICAgICAgICAgIHwgIDE5ICstDQo+ID4gIGRyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhk ZXYuaCAgICAgICAgICAgIHwgIDMwICsrDQo+ID4gIGRyaXZlcnMvbmV0L2k0MGUvcnRlX3BtZF9p NDBlLmMgICAgICAgICAgIHwgNDgyDQo+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr DQo+ID4gIGRyaXZlcnMvbmV0L2k0MGUvcnRlX3BtZF9pNDBlLmggICAgICAgICAgIHwgIDM4ICsr Kw0KPiA+ICBkcml2ZXJzL25ldC9pNDBlL3J0ZV9wbWRfaTQwZV92ZXJzaW9uLm1hcCB8ICAgMSAr DQo+ID4gIDUgZmlsZXMgY2hhbmdlZCwgNTY2IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0p DQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaTQwZS9pNDBlX2V0aGRldi5jDQo+ ID4gYi9kcml2ZXJzL25ldC9pNDBlL2k0MGVfZXRoZGV2LmMgaW5kZXggOGUwNTgwYy4uMTY2M2Zj MCAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL25ldC9pNDBlL2k0MGVfZXRoZGV2LmMNCj4gPiAr KysgYi9kcml2ZXJzL25ldC9pNDBlL2k0MGVfZXRoZGV2LmMNCj4gPiBAQCAtMTM3LDEwICsxMzcs NiBAQA0KPiA+ICAjZGVmaW5lIEk0MEVfUFJUVFNZTl9UU1lOVFlQRSAgICAweDBlMDAwMDAwDQo+ ID4gICNkZWZpbmUgSTQwRV9DWUNMRUNPVU5URVJfTUFTSyAgIDB4ZmZmZmZmZmZmZmZmZmZmZlVM TA0KPiA+DQo+ID4gLSNkZWZpbmUgSTQwRV9NQVhfUEVSQ0VOVCAgICAgICAgICAgIDEwMA0KPiA+ IC0jZGVmaW5lIEk0MEVfREVGQVVMVF9EQ0JfQVBQX05VTSAgICAxDQo+ID4gLSNkZWZpbmUgSTQw RV9ERUZBVUxUX0RDQl9BUFBfUFJJTyAgIDMNCj4gPiAtDQo+ID4gIC8qKg0KPiA+ICAgKiBCZWxv dyBhcmUgdmFsdWVzIGZvciB3cml0aW5nIHVuLWV4cG9zZWQgcmVnaXN0ZXJzIHN1Z2dlc3RlZA0K PiA+ICAgKiBieSBzaWxpY29uIGV4cGVydHMNCj4gPiBAQCAtMTAzNCw2ICsxMDMwLDE1IEBAIGk0 MGVfaW5pdF9mZGlyX2ZpbHRlcl9saXN0KHN0cnVjdCBydGVfZXRoX2Rldg0KPiAqZGV2KQ0KPiA+ ICAJcmV0dXJuIHJldDsNCj4gPiAgfQ0KPiA+DQo+ID4gK3N0YXRpYyB2b2lkDQo+ID4gK2k0MGVf aW5pdF9xdWV1ZV9yZWdpb25fY29uZihzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldikgew0KPiA+ICsJ c3RydWN0IGk0MGVfcGYgKnBmID0gSTQwRV9ERVZfUFJJVkFURV9UT19QRihkZXYtPmRhdGEtDQo+ ID5kZXZfcHJpdmF0ZSk7DQo+ID4gKwlzdHJ1Y3QgaTQwZV9xdWV1ZV9yZWdpb25faW5mbyAqaW5m byA9ICZwZi0+cXVldWVfcmVnaW9uOw0KPiA+ICsNCj4gPiArCW1lbXNldChpbmZvLCAwLCBzaXpl b2Yoc3RydWN0IGk0MGVfcXVldWVfcmVnaW9uX2luZm8pKTsgfQ0KPiA+ICsNCj4gPiAgc3RhdGlj IGludA0KPiA+ICBldGhfaTQwZV9kZXZfaW5pdChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldikgIHsg QEAgLTEzMDksNiArMTMxNCw5IEBADQo+ID4gZXRoX2k0MGVfZGV2X2luaXQoc3RydWN0IHJ0ZV9l dGhfZGV2ICpkZXYpDQo+ID4gIAlpZiAocmV0IDwgMCkNCj4gPiAgCQlnb3RvIGVycl9pbml0X2Zk aXJfZmlsdGVyX2xpc3Q7DQo+ID4NCj4gPiArCS8qIGluaXRpYWxpemUgcXVldWUgcmVnaW9uIGNv bmZpZ3VyYXRpb24gKi8NCj4gPiArCWk0MGVfaW5pdF9xdWV1ZV9yZWdpb25fY29uZihkZXYpOw0K PiA+ICsNCj4gSWYgdGhpcyBmdW5jIGk0MGVfaW5pdF9xdWV1ZV9yZWdpb25fY29uZiBpcyBvbmx5 IGNhbGxlZCBoZXJlLCB0aGVuIGl0IGlzIE5vdA0KPiBuZWNlc3Nhcnk/IEJlY2F1c2UgYWxsIHRo ZSBwZiBzdHJ1Y3QgaGFzIGJlZW4gemVyb2VkIGF0IHByb2JlIHRpbWUuDQo+IA0KPiA+ICAJcmV0 dXJuIDA7DQo+ID4NCj4gPiAgZXJyX2luaXRfZmRpcl9maWx0ZXJfbGlzdDoNCj4gPiBAQCAtMTQ2 NCw2ICsxNDcyLDkgQEAgZXRoX2k0MGVfZGV2X3VuaW5pdChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRl dikNCj4gPiAgCS8qIFJlbW92ZSBhbGwgVHJhZmZpYyBNYW5hZ2VyIGNvbmZpZ3VyYXRpb24gKi8N Cj4gPiAgCWk0MGVfdG1fY29uZl91bmluaXQoZGV2KTsNCj4gPg0KPiA+ICsJLyogUmVtb3ZlIGFs bCB0aGUgcXVldWUgcmVnaW9uIGNvbmZpZ3VyYXRpb24gKi8NCj4gPiArCWk0MGVfZmx1c2hfcmVn aW9uX2FsbF9jb25mKGh3LCBwZiwgMCk7DQo+ID4gKw0KPiA+ICAJcmV0dXJuIDA7DQo+ID4gIH0N Cj4gPg0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pNDBlL2k0MGVfZXRoZGV2LmgNCj4g PiBiL2RyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhkZXYuaCBpbmRleCBhZDgwZjBmLi5kNjEyODg2 IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhkZXYuaA0KPiA+ICsr KyBiL2RyaXZlcnMvbmV0L2k0MGUvaTQwZV9ldGhkZXYuaA0KPiA+IEBAIC0yNjAsNiArMjYwLDE2 IEBAIGVudW0gaTQwZV9mbHhwbGRfbGF5ZXJfaWR4IHsgICNkZWZpbmUNCj4gPiBJNDBFX1FPU19C V19XRUlHSFRfTUlOIDENCj4gPiAgLyogVGhlIG1heCBiYW5kd2lkdGggd2VpZ2h0IGlzIDEyNy4g Ki8gICNkZWZpbmUNCj4gPiBJNDBFX1FPU19CV19XRUlHSFRfTUFYIDEyNw0KPiA+ICsvKiBUaGUg bWF4IHF1ZXVlIHJlZ2lvbiBpbmRleCBpcyA3LiAqLyAjZGVmaW5lDQo+IEk0MEVfUkVHSU9OX01B WF9JTkRFWA0KPiA+ICs3DQo+ID4gKy8qIFRoZSBtYXggcXVldWUgcmVnaW9uIHVzZXJwcmlvcml0 eSBpcyA3LiAqLyAjZGVmaW5lDQo+ID4gK0k0MEVfUkVHSU9OX1VTRVJQUklPUklUWV9NQVhfSU5E RVggNw0KPiBZb3UgY2FuIHJldXNlIEk0MEVfTUFYX1VTRVJfUFJJT1JJVFkuDQo+IA0KPiA+ICsv KiBUaGUgbWF4IHBjdHlwZSBpbmRleCBpcyA2My4gKi8NCj4gPiArI2RlZmluZSBJNDBFX1JFR0lP Tl9QQ1RZUEVfTUFYX0lOREVYIDYzDQo+ID4gKw0KPiBZb3UgY2FuIHVzZSBJNDBFX0ZJTFRFUl9Q Q1RZUEVfTUFYDQo+IA0KPiA+ICsjZGVmaW5lIEk0MEVfTUFYX1BFUkNFTlQgICAgICAgICAgICAx MDANCj4gPiArI2RlZmluZSBJNDBFX0RFRkFVTFRfRENCX0FQUF9OVU0gICAgMQ0KPiA+ICsjZGVm aW5lIEk0MEVfREVGQVVMVF9EQ0JfQVBQX1BSSU8gICAzDQo+ID4NCj4gPiAgLyoqDQo+ID4gICAq IFRoZSBvdmVyaGVhZCBmcm9tIE1UVSB0byBtYXggZnJhbWUgc2l6ZS4NCj4gPiBAQCAtNTQxLDYg KzU1MSwyMiBAQCBzdHJ1Y3QgaTQwZV9ldGhlcnR5cGVfcnVsZSB7DQo+ID4gIAlzdHJ1Y3QgcnRl X2hhc2ggKmhhc2hfdGFibGU7DQo+ID4gIH07DQo+ID4NCj4gPiArLyogcXVldWUgcmVnaW9uIGlu Zm8gKi8NCj4gPiArc3RydWN0IGk0MGVfcmVnaW9uX2luZm8gew0KPiA+ICsJdWludDhfdCByZWdp b25faWQ7DQo+ID4gKwl1aW50OF90IHF1ZXVlX3N0YXJ0X2luZGV4Ow0KPiA+ICsJdWludDhfdCBx dWV1ZV9udW07DQo+ID4gKwl1aW50OF90IHVzZXJfcHJpb3JpdHlfbnVtOw0KPiA+ICsJdWludDhf dCB1c2VyX3ByaW9yaXR5W0k0MEVfTUFYX1VTRVJfUFJJT1JJVFldOw0KPiBQbGVhc2UgY29tbWVu dCB3aGF0IGlzIHRoZSBtZWFuaW5nIG9mIHRoaXMgYXJyYXk/DQo+IA0KPiA+ICsJdWludDhfdCBm bG93dHlwZV9udW07DQo+ID4gKwl1aW50OF90IGh3X2Zsb3d0eXBlW0k0MEVfRklMVEVSX1BDVFlQ RV9NQVhdOw0KPiBUaGUgc2FtZSwgcGxlYXNlIGNvbW1lbnQgaXQuDQo+IA0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArc3RydWN0IGk0MGVfcXVldWVfcmVnaW9uX2luZm8gew0KPiA+ICsJdWludDE2X3Qg cXVldWVfcmVnaW9uX251bWJlcjsNCj4gPiArCXN0cnVjdCBpNDBlX3JlZ2lvbl9pbmZvIHJlZ2lv bltJNDBFX1JFR0lPTl9NQVhfSU5ERVggKyAxXTsgfTsNCj4gPiArDQo+ID4gIC8qIFR1bm5lbCBm aWx0ZXIgbnVtYmVyIEhXIHN1cHBvcnRzICovICAjZGVmaW5lDQo+ID4gSTQwRV9NQVhfVFVOTkVM X0ZJTFRFUl9OVU0gNDAwDQo+ID4NCj4gPiBAQCAtNzc2LDYgKzgwMiw3IEBAIHN0cnVjdCBpNDBl X3BmIHsNCj4gPiAgCXN0cnVjdCBpNDBlX2ZkaXJfaW5mbyBmZGlyOyAvKiBmbG93IGRpcmVjdG9y IGluZm8gKi8NCj4gPiAgCXN0cnVjdCBpNDBlX2V0aGVydHlwZV9ydWxlIGV0aGVydHlwZTsgLyog RXRoZXJ0eXBlIGZpbHRlciBydWxlICovDQo+ID4gIAlzdHJ1Y3QgaTQwZV90dW5uZWxfcnVsZSB0 dW5uZWw7IC8qIFR1bm5lbCBmaWx0ZXIgcnVsZSAqLw0KPiA+ICsJc3RydWN0IGk0MGVfcXVldWVf cmVnaW9uX2luZm8gcXVldWVfcmVnaW9uOyAvKiBxdWV1ZSByZWdpb24gaW5mbw0KPiAqLw0KPiA+ ICAJc3RydWN0IGk0MGVfZmNfY29uZiBmY19jb25mOyAvKiBGbG93IGNvbnRyb2wgY29uZiAqLw0K PiA+ICAJc3RydWN0IGk0MGVfbWlycm9yX3J1bGVfbGlzdCBtaXJyb3JfbGlzdDsNCj4gPiAgCXVp bnQxNl90IG5iX21pcnJvcl9ydWxlOyAgIC8qIFRoZSBudW1iZXIgb2YgbWlycm9yIHJ1bGVzICov DQo+ID4gQEAgLTEwMDMsNiArMTAzMCw5IEBAIHZvaWQgaTQwZV9jaGVja193cml0ZV9yZWcoc3Ry dWN0IGk0MGVfaHcgKmh3LA0KPiA+IHVpbnQzMl90IGFkZHIsIHVpbnQzMl90IHZhbCk7ICBpbnQg aTQwZV90bV9vcHNfZ2V0KHN0cnVjdCBydGVfZXRoX2Rldg0KPiA+ICpkZXYsIHZvaWQgKm9wcyk7 ICB2b2lkIGk0MGVfdG1fY29uZl9pbml0KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2KTsNCj4gPiB2 b2lkIGk0MGVfdG1fY29uZl91bmluaXQoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYpOw0KPiA+ICtp bnQgaTQwZV9mbHVzaF9yZWdpb25fYWxsX2NvbmYoc3RydWN0IGk0MGVfaHcgKmh3LA0KPiA+ICsJ CQkJc3RydWN0IGk0MGVfcGYgKnBmLCB1aW50MTZfdCBvbik7DQo+ID4gKw0KPiA+DQo+ID4gICNk ZWZpbmUgSTQwRV9ERVZfVE9fUENJKGV0aF9kZXYpIFwNCj4gPiAgCVJURV9ERVZfVE9fUENJKChl dGhfZGV2KS0+ZGV2aWNlKQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pNDBlL3J0ZV9w bWRfaTQwZS5jDQo+ID4gYi9kcml2ZXJzL25ldC9pNDBlL3J0ZV9wbWRfaTQwZS5jIGluZGV4IGQ2 OWE0NzIuLjlhNzVmMjEgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9uZXQvaTQwZS9ydGVfcG1k X2k0MGUuYw0KPiA+ICsrKyBiL2RyaXZlcnMvbmV0L2k0MGUvcnRlX3BtZF9pNDBlLmMNCj4gPiBA QCAtMzUsNiArMzUsNyBAQA0KPiA+ICAjaW5jbHVkZSA8cnRlX3RhaWxxLmg+DQo+ID4NCj4gPiAg I2luY2x1ZGUgImJhc2UvaTQwZV9wcm90b3R5cGUuaCINCj4gPiArI2luY2x1ZGUgImJhc2UvaTQw ZV9kY2IuaCINCj4gPiAgI2luY2x1ZGUgImk0MGVfZXRoZGV2LmgiDQo+ID4gICNpbmNsdWRlICJp NDBlX3BmLmgiDQo+ID4gICNpbmNsdWRlICJpNDBlX3J4dHguaCINCj4gPiBAQCAtMjE2MSwzICsy MTYyLDQ4NCBAQCBydGVfcG1kX2k0MGVfYWRkX3ZmX21hY19hZGRyKHVpbnQ4X3QgcG9ydCwNCj4g PiB1aW50MTZfdCB2Zl9pZCwNCj4gPg0KPiA+ICAJcmV0dXJuIDA7DQo+ID4gIH0NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbnQNCj4gPiAraTQwZV92c2lfdXBkYXRlX3F1ZXVlX3JlZ2lvbl9tYXBwaW5n KHN0cnVjdCBpNDBlX2h3ICpodywNCj4gPiArCQkJICAgICAgc3RydWN0IGk0MGVfcGYgKnBmKQ0K PiA+ICt7DQo+ID4gKwl1aW50MTZfdCBpOw0KPiA+ICsJc3RydWN0IGk0MGVfdnNpICp2c2kgPSBw Zi0+bWFpbl92c2k7DQo+ID4gKwl1aW50MTZfdCBxdWV1ZV9vZmZzZXQsIGJzZiwgdGNfaW5kZXg7 DQo+ID4gKwlzdHJ1Y3QgaTQwZV92c2lfY29udGV4dCBjdHh0Ow0KPiA+ICsJc3RydWN0IGk0MGVf YXFjX3ZzaV9wcm9wZXJ0aWVzX2RhdGEgKnZzaV9pbmZvOw0KPiA+ICsJc3RydWN0IGk0MGVfcXVl dWVfcmVnaW9uX2luZm8gKnJlZ2lvbl9pbmZvID0NCj4gPiArCQkJCSZwZi0+cXVldWVfcmVnaW9u Ow0KPiA+ICsJdWludDMyX3QgcmV0ID0gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlpZiAoIXJlZ2lv bl9pbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyKSB7DQo+ID4gKwkJUE1EX0lOSVRfTE9HKEVSUiwg InRoZXJlIGlzIG5vIHRoYXQgcmVnaW9uIGlkIGJlZW4gc2V0DQo+IGJlZm9yZSIpOw0KPiA+ICsJ CXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbWVtc2V0KCZjdHh0LCAwLCBzaXpl b2Yoc3RydWN0IGk0MGVfdnNpX2NvbnRleHQpKTsNCj4gPiArDQo+ID4gKwkvKiBVcGRhdGUgUXVl dWUgUGFpcnMgTWFwcGluZyBmb3IgY3VycmVudGx5IGVuYWJsZWQgVVBzICovDQo+ID4gKwljdHh0 LnNlaWQgPSB2c2ktPnNlaWQ7DQo+ID4gKwljdHh0LnBmX251bSA9IGh3LT5wZl9pZDsNCj4gPiAr CWN0eHQudmZfbnVtID0gMDsNCj4gPiArCWN0eHQudXBsaW5rX3NlaWQgPSB2c2ktPnVwbGlua19z ZWlkOw0KPiA+ICsJY3R4dC5pbmZvID0gdnNpLT5pbmZvOw0KPiA+ICsJdnNpX2luZm8gPSAmY3R4 dC5pbmZvOw0KPiA+ICsNCj4gUGxlYXNlIHVzZSB0aGUgdnNpX2luZm8gc3RvcmVkIGluIGk0MGVf dnNpIHRvIGF2b2lkIG1pc3NpbmcgcGFyYW1ldGVycy4NCj4gDQo+ID4gKwltZW1zZXQodnNpX2lu Zm8tPnRjX21hcHBpbmcsIDAsIHNpemVvZih1aW50MTZfdCkgKiA4KTsNCj4gPiArCW1lbXNldCh2 c2lfaW5mby0+cXVldWVfbWFwcGluZywgMCwgc2l6ZW9mKHVpbnQxNl90KSAqIDE2KTsNCj4gPiAr DQo+IEN0eHQgaGFzIGJlZW4gemVyb2VkLCBubyBuZWVkIHRvIG1lbXNldCB0Y19tYXBwaW5nIGFu ZCBxdWV1ZV9tYXBwaW5nDQo+IGFnYWluLg0KPiA+ICsJLyoqDQo+ID4gKwkgKiBDb25maWd1cmUg cXVldWUgcmVnaW9uIGFuZCBxdWV1ZSBtYXBwaW5nIHBhcmFtZXRlcnMsDQo+ID4gKwkgKiBmb3Ig ZW5hYmxlZCBxdWV1ZSByZWdpb24sIGFsbG9jYXRlIHF1ZXVlcyB0byB0aGlzIHJlZ2lvbi4NCj4g PiArCSAqLw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCByZWdpb25faW5mby0+cXVldWVf cmVnaW9uX251bWJlcjsgaSsrKSB7DQo+ID4gKwkJdGNfaW5kZXggPSByZWdpb25faW5mby0+cmVn aW9uW2ldLnJlZ2lvbl9pZDsNCj4gPiArCQlic2YgPSBydGVfYnNmMzIocmVnaW9uX2luZm8tPnJl Z2lvbltpXS5xdWV1ZV9udW0pOw0KPiA+ICsJCXF1ZXVlX29mZnNldCA9IHJlZ2lvbl9pbmZvLT5y ZWdpb25baV0ucXVldWVfc3RhcnRfaW5kZXg7DQo+ID4gKwkJdnNpX2luZm8tPnRjX21hcHBpbmdb dGNfaW5kZXhdID0gcnRlX2NwdV90b19sZV8xNigNCj4gPiArCQkJKHF1ZXVlX29mZnNldCA8PA0K PiBJNDBFX0FRX1ZTSV9UQ19RVUVfT0ZGU0VUX1NISUZUKSB8DQo+ID4gKwkJCQkoYnNmIDw8DQo+ IEk0MEVfQVFfVlNJX1RDX1FVRV9OVU1CRVJfU0hJRlQpKTsNCj4gPiArCX0NCj4gPiArDQo+ID4g KwkvKiBBc3NvY2lhdGUgcXVldWUgbnVtYmVyIHdpdGggVlNJLCBLZWVwIHZzaS0+bmJfcXBzIHVu Y2hhbmdlZA0KPiAqLw0KPiA+ICsJaWYgKHZzaS0+dHlwZSA9PSBJNDBFX1ZTSV9TUklPVikgew0K PiBWc2kgaXMgbWFpbiB2c2ksIGl0IGlzIGltcG9zc2libGUgdGhhdCB0aGUgdHlwZSB0byBiZSBT UklPVi4gSWYgeW91IHdhbnQgdG8NCj4gY29uZmlndXJlIFF1ZXVlIG1hcHBpbmcgb24gc3Jpb3Yg VlNJLCB5b3UgbmVlZCB0byBzY2FuIGFsbCB0aGUgU1JJT1YgVlNJcy4NCj4gDQo+ID4gKwkJdnNp X2luZm8tPm1hcHBpbmdfZmxhZ3MgfD0NCj4gPiArDQo+IAlydGVfY3B1X3RvX2xlXzE2KEk0MEVf QVFfVlNJX1FVRV9NQVBfTk9OQ09OVElHKTsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgdnNpLT5u Yl9xcHM7IGkrKykNCj4gPiArCQkJdnNpX2luZm8tPnF1ZXVlX21hcHBpbmdbaV0gPQ0KPiA+ICsJ CQkJcnRlX2NwdV90b19sZV8xNih2c2ktPmJhc2VfcXVldWUgKyBpKTsNCj4gPiArCX0gZWxzZSB7 DQo+ID4gKwkJdnNpX2luZm8tPm1hcHBpbmdfZmxhZ3MgfD0NCj4gPiArDQo+IAlydGVfY3B1X3Rv X2xlXzE2KEk0MEVfQVFfVlNJX1FVRV9NQVBfQ09OVElHKTsNCj4gPiArCQl2c2lfaW5mby0+cXVl dWVfbWFwcGluZ1swXSA9IHJ0ZV9jcHVfdG9fbGVfMTYodnNpLQ0KPiA+YmFzZV9xdWV1ZSk7DQo+ ID4gKwl9DQo+ID4gKwl2c2lfaW5mby0+dmFsaWRfc2VjdGlvbnMgfD0NCj4gPiArDQo+IAlydGVf Y3B1X3RvX2xlXzE2KEk0MEVfQVFfVlNJX1BST1BfUVVFVUVfTUFQX1ZBTElEKTsNCj4gPiArDQo+ ID4gKwkvKiBVcGRhdGUgdGhlIFZTSSBhZnRlciB1cGRhdGluZyB0aGUgVlNJIHF1ZXVlLW1hcHBp bmcNCj4gaW5mb3JtYXRpb24gKi8NCj4gPiArCXJldCA9IGk0MGVfYXFfdXBkYXRlX3ZzaV9wYXJh bXMoaHcsICZjdHh0LCBOVUxMKTsNCj4gPiArCWlmIChyZXQpIHsNCj4gPiArCQlQTURfSU5JVF9M T0coRVJSLCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBxdWV1ZSByZWdpb24gIg0KPiBQTURfSU5JVF9M T0cgIC0+IFBNRF9EUlZfTE9HDQo+ID4gKwkJCSJtYXBwaW5nID0gJWQgIiwgaHctPmFxLmFzcV9s YXN0X3N0YXR1cyk7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArCS8qIHVwZGF0 ZSB0aGUgbG9jYWwgVlNJIGluZm8gd2l0aCB1cGRhdGVkIHF1ZXVlIG1hcCAqLw0KPiA+ICsJKHZv aWQpcnRlX21lbWNweSgmdnNpLT5pbmZvLnRjX21hcHBpbmcsICZjdHh0LmluZm8udGNfbWFwcGlu ZywNCj4gPiArCQkJCQlzaXplb2YodnNpLT5pbmZvLnRjX21hcHBpbmcpKTsNCj4gPiArCSh2b2lk KXJ0ZV9tZW1jcHkoJnZzaS0+aW5mby5xdWV1ZV9tYXBwaW5nLA0KPiA+ICsJCQkmY3R4dC5pbmZv LnF1ZXVlX21hcHBpbmcsDQo+ID4gKwkJc2l6ZW9mKHZzaS0+aW5mby5xdWV1ZV9tYXBwaW5nKSk7 DQo+ID4gKwl2c2ktPmluZm8ubWFwcGluZ19mbGFncyA9IGN0eHQuaW5mby5tYXBwaW5nX2ZsYWdz Ow0KPiA+ICsJdnNpLT5pbmZvLnZhbGlkX3NlY3Rpb25zID0gMDsNCj4gPiArDQo+ID4gKwlyZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQNCj4gPiAraTQwZV9z ZXRfcXVldWVfcmVnaW9uKHN0cnVjdCBpNDBlX3BmICpwZiwNCj4gPiArCQkJCXN0cnVjdCBydGVf aTQwZV9yc3NfcmVnaW9uX2NvbmYgKmNvbmZfcHRyKSB7DQo+ID4gKwl1aW50MTZfdCB0Y19zaXpl X3RiWzddID0gezEsIDIsIDQsIDgsIDE2LCAzMiwgNjR9Ow0KPiA+ICsJdWludDE2X3QgaTsNCj4g PiArCXN0cnVjdCBpNDBlX3ZzaSAqbWFpbl92c2kgPSBwZi0+bWFpbl92c2k7DQo+ID4gKwlzdHJ1 Y3QgaTQwZV9xdWV1ZV9yZWdpb25faW5mbyAqaW5mbyA9ICZwZi0+cXVldWVfcmVnaW9uOw0KPiA+ ICsJdWludDMyX3QgcmV0ID0gLUVJTlZBTDsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwg STQwRV9SRUdJT05fTUFYX0lOREVYOyBpKyspDQo+ID4gKwkJaWYgKGNvbmZfcHRyLT5xdWV1ZV9u dW0gPT0gdGNfc2l6ZV90YltpXSkNCj4gPiArCQkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJaWYgKGkg PT0gSTQwRV9SRUdJT05fTUFYX0lOREVYKSB7DQo+ID4gKwkJcHJpbnRmKCJUaGUgcmVnaW9uIHNp emVzIHNob3VsZCBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZyAiDQo+ID4gKwkJInZhbHVlczogMSwg MiwgNCwgOCwgMTYsIDMyLCA2NCBhcyBsb25nIGFzIHRoZSAiDQo+ID4gKwkJInRvdGFsIG51bWJl ciBvZiBxdWV1ZXMgZG8gbm90IGV4Y2VlZCB0aGUgVlNJIGFsbG9jYXRpb24iKTsNCj4gPiArCQly ZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gSWYgeW91IGp1c3Qgd2FudCB0byBjaGVjayBp ZiB0aGUgcXVldWVfbnVtZSBpcyBvbmUgb2YgezEsIDIsNCw4LDE2LDMyLDY0fSBZb3UNCj4gY2Fu IHVzZQ0KPiANCj4gSWYgKHJ0ZV9pc19wb3dlcl9vZl8yKHF1ZXVlX251bSkgJiYgcXVldWVfbnVt IDw9IDY0KQ0KPiANCj4gDQo+ID4gKwlpZiAoY29uZl9wdHItPnJlZ2lvbl9pZCA+PSBJNDBFX1JF R0lPTl9NQVhfSU5ERVgpIHsNCj4gPiArCQlQTURfSU5JVF9MT0coRVJSLCAidGhlIHF1ZXVlIHJl Z2lvbiBtYXggaW5kZXggaXMgNyIpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJaWYgKChjb25mX3B0ci0+cXVldWVfc3RhcnRfaW5kZXggKyBjb25mX3B0ci0+cXVl dWVfbnVtKQ0KPiA+ICsJCQkJCT4gbWFpbl92c2ktPm5iX3VzZWRfcXBzKSB7DQo+ID4gKwkJUE1E X0lOSVRfTE9HKEVSUiwgInRoZSBxdWV1ZSBpbmRleCBleGNlZWRzIHRoZSBWU0kNCj4gcmFuZ2Ui KTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChpbmZvLT5x dWV1ZV9yZWdpb25fbnVtYmVyKSB7DQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnF1ZXVl X3JlZ2lvbl9udW1iZXI7IGkrKykNCj4gPiArCQkJaWYgKGNvbmZfcHRyLT5yZWdpb25faWQgPT0g aW5mby0+cmVnaW9uW2ldLnJlZ2lvbl9pZCkNCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsNCj4gPiAr CQlpZiAoKGkgPT0gaW5mby0+cXVldWVfcmVnaW9uX251bWJlcikgJiYNCj4gPiArCQkJKGkgPD0g STQwRV9SRUdJT05fTUFYX0lOREVYKSkgew0KPiBJdCBpcyBpbXBvc3NpYmxlIHRoYXQgaSA+IEk0 MEVfUkVHSU9OX01BWF9JTkRFWCwgcmlnaHQ/DQoNClllcywgb25seSBzdXBwb3J0IDggcXVldWUg cmVnaW9uIG1heC4NCg0KPiANCj4gPiArCQkJaW5mby0+cmVnaW9uW2ldLnJlZ2lvbl9pZCA9IGNv bmZfcHRyLT5yZWdpb25faWQ7DQo+ID4gKwkJCWluZm8tPnJlZ2lvbltpXS5xdWV1ZV9udW0gPSBj b25mX3B0ci0+cXVldWVfbnVtOw0KPiA+ICsJCQlpbmZvLT5yZWdpb25baV0ucXVldWVfc3RhcnRf aW5kZXggPQ0KPiA+ICsJCQkJY29uZl9wdHItPnF1ZXVlX3N0YXJ0X2luZGV4Ow0KPiA+ICsJCQlp bmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyKys7DQo+ID4gKwkJfSBlbHNlIHsNCj4gPiArCQkJUE1E X0lOSVRfTE9HKEVSUiwgInF1ZXVlIHJlZ2lvbiBudW1iZXIgIg0KPiA+ICsJCQkJImV4Y2VlZHMg bWF4bnVtIDggb3IgdGhlICINCj4gPiArCQkJCSJxdWV1ZSByZWdpb24gaWQgaGFzICINCj4gPiAr CQkJCSJiZWVuIHNldCBiZWZvcmUiKTsNCj4gRG9lcyBpdCBtZWFuIHdlIGNhbiBub3QgY2hhbmdl IHRoZSBzZXQgb2Ygb25lIHF1ZXVlIHJlZ2lvbiB3aG9zZSBpZCBpcyBzZXQNCj4gYmVmb3JlPw0K DQpObywgRkxVU0hfT0ZGIGNhbiBjbGVhciBhbGwgdGhlIGNvbmZpZw0KPiANCj4gPiArCQkJcmV0 dXJuIHJldDsNCj4gPiArCQl9DQo+ID4gKwl9IGVsc2Ugew0KPiA+ICsJCWluZm8tPnJlZ2lvblsw XS5yZWdpb25faWQgPSBjb25mX3B0ci0+cmVnaW9uX2lkOw0KPiA+ICsJCWluZm8tPnJlZ2lvblsw XS5xdWV1ZV9udW0gPSBjb25mX3B0ci0+cXVldWVfbnVtOw0KPiA+ICsJCWluZm8tPnJlZ2lvblsw XS5xdWV1ZV9zdGFydF9pbmRleCA9DQo+ID4gKwkJCWNvbmZfcHRyLT5xdWV1ZV9zdGFydF9pbmRl eDsNCj4gPiArCQlpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyKys7DQo+ID4gKwl9DQo+IEkgdGhp bmsgdGhpcyBwYXJ0IG9mIGNvZGUgY2FuIGJlIHJlZmluZWQuDQo+ID4gKw0KPiA+ICsJcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQNCj4gPiAraTQwZV9zZXRfcmVnaW9u X2Zsb3d0eXBlX3BmKHN0cnVjdCBpNDBlX2h3ICpodywNCj4gPiArCQlzdHJ1Y3QgaTQwZV9wZiAq cGYsIHN0cnVjdCBydGVfaTQwZV9yc3NfcmVnaW9uX2NvbmYNCj4gKmNvbmZfcHRyKSB7DQo+ID4g Kwl1aW50MzJfdCBwZnFmX2hyZWdpb247DQo+ID4gKwl1aW50MzJfdCByZXQgPSAtRUlOVkFMOw0K PiA+ICsJc3RydWN0IGk0MGVfcXVldWVfcmVnaW9uX2luZm8gKmluZm8gPSAmcGYtPnF1ZXVlX3Jl Z2lvbjsNCj4gPiArCXVpbnQxNl90IGksIGosIGluZGV4LCBmbG93dHlwZV9zZXQgPSAwOw0KPiA+ ICsJdWludDE2X3QgcmVnaW9uX2luZGV4LCBmbG93dHlwZV9pbmRleDsNCj4gPiArDQo+ID4gKwlp ZiAoY29uZl9wdHItPnJlZ2lvbl9pZCA+IEk0MEVfUEZRRl9IUkVHSU9OX01BWF9JTkRFWCkgew0K PiA+ICsJCVBNRF9JTklUX0xPRyhFUlIsICJ0aGUgcXVldWUgcmVnaW9uIG1heCBpbmRleCBpcyA3 Iik7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlpZiAoY29uZl9w dHItPmh3X2Zsb3d0eXBlID49IEk0MEVfRklMVEVSX1BDVFlQRV9NQVgpIHsNCj4gPiArCQlQTURf SU5JVF9MT0coRVJSLCAidGhlIGh3X2Zsb3d0eXBlIG9yIFBDVFlQRSBtYXggaW5kZXgNCj4gaXMg NjMiKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChpbmZv LT5xdWV1ZV9yZWdpb25fbnVtYmVyKSB7DQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnF1 ZXVlX3JlZ2lvbl9udW1iZXI7IGkrKykNCj4gPiArCQkJaWYgKGNvbmZfcHRyLT5yZWdpb25faWQg PT0gaW5mby0+cmVnaW9uW2ldLnJlZ2lvbl9pZCkNCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsNCj4g PiArCQlpZiAoaSA9PSBpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyKSB7DQo+ID4gKwkJCVBNRF9J TklUX0xPRyhFUlIsICJ0aGF0IHJlZ2lvbiBpZCBoYXMgbm90ICINCj4gPiArCQkJCSJiZWVuIHNl dCBiZWZvcmUiKTsNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArCQl9DQo+IElmIGluZm8tPnF1 ZXVlX3JlZ2lvbl9udW1iZXI9PTAsIHRoZW4gaSB3b3VsZCBiZSAwLiBTbywgdGhlIG91dGVyIHdy YXAgaWYNCj4gKGluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXIpIHt9IGNhbiBiZSBvbWl0LiBUaGUg c2FtZSBhdCBhYm92ZSBmdW5jLCBJDQo+IHRoaW5rIHRoaXMgcGFydCBvZiBjb2RlIGNhbiBiZSBy ZWZpbmVkLg0KDQpPa6OsY2hhbmdlIGluIHY0DQoNCj4gPiArCQlyZWdpb25faW5kZXggPSBpOw0K PiA+ICsNCj4gPiArCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cXVldWVfcmVnaW9uX251bWJlcjsg aSsrKSB7DQo+ID4gKwkJCWZvciAoaiA9IDA7IGogPCBpbmZvLT5yZWdpb25baV0uZmxvd3R5cGVf bnVtOyBqKyspIHsNCj4gPiArCQkJCWlmIChjb25mX3B0ci0+aHdfZmxvd3R5cGUgPT0NCj4gPiAr CQkJCQlpbmZvLT5yZWdpb25baV0uaHdfZmxvd3R5cGVbal0pIHsNCj4gPiArCQkJCQlmbG93dHlw ZV9zZXQgPSAxOw0KPiA+ICsJCQkJCWJyZWFrOw0KPiA+ICsJCQkJfQ0KPiA+ICsJCQl9DQo+ID4g KwkJfQ0KPiA+ICsNCj4gPiArCQlpZiAoZmxvd3R5cGVfc2V0KSB7DQo+ID4gKwkJCVBNRF9JTklU X0xPRyhFUlIsICJ0aGF0IGh3X2Zsb3d0eXBlICINCj4gPiArCQkJCSJoYXMgYmVlbiBzZXQgYmVm b3JlIik7DQo+ID4gKwkJCXJldHVybiByZXQ7DQo+IElzIHRoYXQgcmlnaHQgdG8gcmV0dXJuIC1F SU5WQUwgd2hlbiBpdCBoYXMgYmVlbiBzZXQuIEFuZCBpdCBzZWVtcyBJbiB0aGlzDQo+IGZ1bmN0 aW9uLCB0aGUgZXJyb3IgY29kZSBpcyBvbmx5IC1FSU5WQUwsIGlmIHNvLCB3aHkgd2UgZGVmaW5l IHJldD8NCj4gPiArCQl9DQo+ID4gKwkJZmxvd3R5cGVfaW5kZXggPSBpbmZvLT5yZWdpb25bcmVn aW9uX2luZGV4XS5mbG93dHlwZV9udW07DQo+ID4gKwkJaW5mby0+cmVnaW9uW3JlZ2lvbl9pbmRl eF0uaHdfZmxvd3R5cGVbZmxvd3R5cGVfaW5kZXhdID0NCj4gPiArCQkJCQkJY29uZl9wdHItPmh3 X2Zsb3d0eXBlOw0KPiA+ICsJCWluZm8tPnJlZ2lvbltyZWdpb25faW5kZXhdLmZsb3d0eXBlX251 bSsrOw0KPiA+ICsJfSBlbHNlICB7DQo+ID4gKwkJUE1EX0lOSVRfTE9HKEVSUiwgInRoZXJlIGlz IG5vIHRoYXQgcmVnaW9uIGlkIGJlZW4gc2V0DQo+IGJlZm9yZSIpOw0KPiANCj4gQWdhaW4sIHBs ZWFzZSB1c2UgUE1EX0RSVl9MT0cuIEJlY2F1c2UgdGhlIGZ1bmMgaXMgbm90IGNhbGxlZCBhdA0K PiBpbml0aWFsaXphdGlvbiB0aW1lLg0KPiBQbGVhc2UgcmVwbGFjZSBpdCBpbiBhbGwgdGhlIHBh dGNoLg0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaW5kZXggPSBj b25mX3B0ci0+aHdfZmxvd3R5cGUgPj4gMzsNCj4gPiArCXBmcWZfaHJlZ2lvbiA9IGk0MGVfcmVh ZF9yeF9jdGwoaHcsIEk0MEVfUEZRRl9IUkVHSU9OKGluZGV4KSk7DQo+ID4gKw0KPiA+ICsJaWYg KChjb25mX3B0ci0+aHdfZmxvd3R5cGUgJiAweDcpID09IDApIHsNCj4gPiArCQlwZnFmX2hyZWdp b24gfD0gY29uZl9wdHItPnJlZ2lvbl9pZCA8PA0KPiA+ICsJCQkJSTQwRV9QRlFGX0hSRUdJT05f UkVHSU9OXzBfU0hJRlQ7DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9IDEgPDwNCj4gSTQwRV9QRlFG X0hSRUdJT05fT1ZFUlJJREVfRU5BXzBfU0hJRlQ7DQo+ID4gKwl9IGVsc2UgaWYgKChjb25mX3B0 ci0+aHdfZmxvd3R5cGUgJiAweDcpID09IDEpIHsNCj4gPiArCQlwZnFmX2hyZWdpb24gfD0gY29u Zl9wdHItPnJlZ2lvbl9pZCA8PA0KPiA+ICsJCQkJSTQwRV9QRlFGX0hSRUdJT05fUkVHSU9OXzFf U0hJRlQ7DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9IDEgPDwNCj4gSTQwRV9QRlFGX0hSRUdJT05f T1ZFUlJJREVfRU5BXzFfU0hJRlQ7DQo+ID4gKwl9IGVsc2UgaWYgKChjb25mX3B0ci0+aHdfZmxv d3R5cGUgJiAweDcpID09IDIpIHsNCj4gPiArCQlwZnFmX2hyZWdpb24gfD0gY29uZl9wdHItPnJl Z2lvbl9pZCA8PA0KPiA+ICsJCQkJSTQwRV9QRlFGX0hSRUdJT05fUkVHSU9OXzJfU0hJRlQ7DQo+ ID4gKwkJcGZxZl9ocmVnaW9uIHw9IDEgPDwNCj4gSTQwRV9QRlFGX0hSRUdJT05fT1ZFUlJJREVf RU5BXzJfU0hJRlQ7DQo+ID4gKwl9IGVsc2UgaWYgKChjb25mX3B0ci0+aHdfZmxvd3R5cGUgJiAw eDcpID09IDMpIHsNCj4gPiArCQlwZnFmX2hyZWdpb24gfD0gY29uZl9wdHItPnJlZ2lvbl9pZCA8 PA0KPiA+ICsJCQkJSTQwRV9QRlFGX0hSRUdJT05fUkVHSU9OXzNfU0hJRlQ7DQo+ID4gKwkJcGZx Zl9ocmVnaW9uIHw9IDEgPDwNCj4gSTQwRV9QRlFGX0hSRUdJT05fT1ZFUlJJREVfRU5BXzNfU0hJ RlQ7DQo+ID4gKwl9IGVsc2UgaWYgKChjb25mX3B0ci0+aHdfZmxvd3R5cGUgJiAweDcpID09IDQp IHsNCj4gPiArCQlwZnFmX2hyZWdpb24gfD0gY29uZl9wdHItPnJlZ2lvbl9pZCA8PA0KPiA+ICsJ CQkJSTQwRV9QRlFGX0hSRUdJT05fUkVHSU9OXzRfU0hJRlQ7DQo+ID4gKwkJcGZxZl9ocmVnaW9u IHw9IDEgPDwNCj4gSTQwRV9QRlFGX0hSRUdJT05fT1ZFUlJJREVfRU5BXzRfU0hJRlQ7DQo+ID4g Kwl9IGVsc2UgaWYgKChjb25mX3B0ci0+aHdfZmxvd3R5cGUgJiAweDcpID09IDUpIHsNCj4gPiAr CQlwZnFmX2hyZWdpb24gfD0gY29uZl9wdHItPnJlZ2lvbl9pZCA8PA0KPiA+ICsJCQkJSTQwRV9Q RlFGX0hSRUdJT05fUkVHSU9OXzVfU0hJRlQ7DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9IDEgPDwN Cj4gSTQwRV9QRlFGX0hSRUdJT05fT1ZFUlJJREVfRU5BXzVfU0hJRlQ7DQo+ID4gKwl9IGVsc2Ug aWYgKChjb25mX3B0ci0+aHdfZmxvd3R5cGUgJiAweDcpID09IDYpIHsNCj4gPiArCQlwZnFmX2hy ZWdpb24gfD0gY29uZl9wdHItPnJlZ2lvbl9pZCA8PA0KPiA+ICsJCQkJSTQwRV9QRlFGX0hSRUdJ T05fUkVHSU9OXzZfU0hJRlQ7DQo+ID4gKwkJcGZxZl9ocmVnaW9uIHw9IDEgPDwNCj4gSTQwRV9Q RlFGX0hSRUdJT05fT1ZFUlJJREVfRU5BXzZfU0hJRlQ7DQo+IFdoYXQgaXMgdGhlIChjb25mX3B0 ci0+aHdfZmxvd3R5cGUgJiAweDcpID09IDEvMi8zLzQvNS82IG1lYW5pbmdzPw0KPiBQbGVhc2Ug YXZvaWQgY29kaW5nIHdpdGggaW50ZWdlciBudW1iZXIuIENhbiBub3QgdW5kZXJzdGFuZCB0aGUN Cj4gcmVsYXRpb25zaGlwIHdpdGggZmxvdyB0eXBlLg0KPiBBbmQgdGhlIGh3X2Zsb3d0eXBlIGlz IEFQSSB0byB1c2VycywgeW91IG5lZWQgdG8gbWFrZSBpdCBjbGVhciBlbm91Z2guDQo+IA0KPiA+ ICsJfSBlbHNlIHsNCj4gPiArCQlwZnFmX2hyZWdpb24gfD0gY29uZl9wdHItPnJlZ2lvbl9pZCA8 PA0KPiA+ICsJCQkJSTQwRV9QRlFGX0hSRUdJT05fUkVHSU9OXzdfU0hJRlQ7DQo+ID4gKwkJcGZx Zl9ocmVnaW9uIHw9IDEgPDwNCj4gSTQwRV9QRlFGX0hSRUdJT05fT1ZFUlJJREVfRU5BXzdfU0hJ RlQ7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJaTQwZV93cml0ZV9yeF9jdGwoaHcsIEk0MEVfUEZR Rl9IUkVHSU9OKGluZGV4KSwgcGZxZl9ocmVnaW9uKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludA0KPiA+ICtpNDBlX3NldF91cF9yZWdpb24o c3RydWN0IGk0MGVfcGYgKnBmLA0KPiA+ICsJCQkJc3RydWN0IHJ0ZV9pNDBlX3Jzc19yZWdpb25f Y29uZiAqY29uZl9wdHIpIHsNCj4gPiArCXN0cnVjdCBpNDBlX3F1ZXVlX3JlZ2lvbl9pbmZvICpp bmZvID0gJnBmLT5xdWV1ZV9yZWdpb247DQo+ID4gKwl1aW50MzJfdCByZXQgPSAtRUlOVkFMOw0K PiA+ICsJdWludDE2X3QgaSwgaiwgcmVnaW9uX2luZGV4LCB1cF9zZXQgPSAwOw0KPiA+ICsNCj4g PiArCWlmIChjb25mX3B0ci0+dXNlcl9wcmlvcml0eSA+DQo+IEk0MEVfUkVHSU9OX1VTRVJQUklP UklUWV9NQVhfSU5ERVgpIHsNCj4gPiArCQlQTURfSU5JVF9MT0coRVJSLCAidGhlIHF1ZXVlIHJl Z2lvbiBtYXggaW5kZXggaXMgNyIpOw0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJaWYgKGNvbmZfcHRyLT5yZWdpb25faWQgPj0gSTQwRV9SRUdJT05fTUFYX0lOREVY KSB7DQo+ID4gKwkJUE1EX0lOSVRfTE9HKEVSUiwgInRoZSByZWdpb25faWQgbWF4IGluZGV4IGlz IDciKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlmIChpbmZv LT5xdWV1ZV9yZWdpb25fbnVtYmVyKSB7DQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnF1 ZXVlX3JlZ2lvbl9udW1iZXI7IGkrKykNCj4gPiArCQkJaWYgKGNvbmZfcHRyLT5yZWdpb25faWQg PT0gaW5mby0+cmVnaW9uW2ldLnJlZ2lvbl9pZCkNCj4gPiArCQkJCWJyZWFrOw0KPiA+ICsNCj4g PiArCQlpZiAoaSA9PSBpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyKSB7DQo+ID4gKwkJCVBNRF9J TklUX0xPRyhFUlIsICJ0aGF0IHJlZ2lvbiBpZCAiDQo+ID4gKwkJCQkiaGFzIG5vdCBiZWVuIHNl dCBiZWZvcmUiKTsNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArCQl9DQo+ID4gKwkJcmVnaW9u X2luZGV4ID0gaTsNCj4gPiArDQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnF1ZXVlX3Jl Z2lvbl9udW1iZXI7IGkrKykgew0KPiA+ICsJCQlmb3IgKGogPSAwOyBqIDwNCj4gPiArCQkJCWlu Zm8tPnJlZ2lvbltpXS51c2VyX3ByaW9yaXR5X251bTsgaisrKSB7DQo+ID4gKwkJCQlpZiAoaW5m by0+cmVnaW9uW2ldLnVzZXJfcHJpb3JpdHlbal0gPT0NCj4gPiArCQkJCQljb25mX3B0ci0+dXNl cl9wcmlvcml0eSkgew0KPiA+ICsJCQkJCXVwX3NldCA9IDE7DQo+ID4gKwkJCQkJYnJlYWs7DQo+ ID4gKwkJCQl9DQo+ID4gKwkJCX0NCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCWlmICh1cF9zZXQp IHsNCj4gPiArCQkJUE1EX0lOSVRfTE9HKEVSUiwgInRoYXQgdXNlciBwcmlvcml0eSAiDQo+ID4g KwkJCQkiaGFzIGJlZW4gc2V0IGJlZm9yZSIpOw0KPiA+ICsJCQlyZXR1cm4gcmV0Ow0KPiA+ICsJ CX0NCj4gPiArDQo+ID4gKwkJaiA9IGluZm8tPnJlZ2lvbltyZWdpb25faW5kZXhdLnVzZXJfcHJp b3JpdHlfbnVtOw0KPiA+ICsJCWluZm8tPnJlZ2lvbltyZWdpb25faW5kZXhdLnVzZXJfcHJpb3Jp dHlbal0gPQ0KPiA+ICsJCQkJCQljb25mX3B0ci0+dXNlcl9wcmlvcml0eTsNCj4gPiArCQlpbmZv LT5yZWdpb25bcmVnaW9uX2luZGV4XS51c2VyX3ByaW9yaXR5X251bSsrOw0KPiA+ICsJfSBlbHNl IHsNCj4gPiArCQlQTURfSU5JVF9MT0coRVJSLCAidGhlcmUgaXMgbm8gdGhhdCByZWdpb24gaWQg YmVlbiBzZXQNCj4gYmVmb3JlIik7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludA0KPiA+ICtp NDBlX3F1ZXVlX3JlZ2lvbl9kY2JfY29uZmlndXJlKHN0cnVjdCBpNDBlX2h3ICpodywNCj4gPiAr CQkJCXN0cnVjdCBpNDBlX3BmICpwZikNCj4gPiArew0KPiA+ICsJc3RydWN0IGk0MGVfZGNieF9j b25maWcgZGNiX2NmZ19sb2NhbDsNCj4gPiArCXN0cnVjdCBpNDBlX2RjYnhfY29uZmlnICpkY2Jf Y2ZnOw0KPiA+ICsJc3RydWN0IGk0MGVfcXVldWVfcmVnaW9uX2luZm8gKmluZm8gPSAmcGYtPnF1 ZXVlX3JlZ2lvbjsNCj4gPiArCXN0cnVjdCBpNDBlX2RjYnhfY29uZmlnICpvbGRfY2ZnID0gJmh3 LT5sb2NhbF9kY2J4X2NvbmZpZzsNCj4gPiArCXVpbnQzMl90IHJldCA9IC1FSU5WQUw7DQo+ID4g Kwl1aW50MTZfdCBpLCBqLCBwcmlvX2luZGV4LCByZWdpb25faW5kZXg7DQo+ID4gKwl1aW50OF90 IHRjX21hcCwgdGNfYncsIGJ3X2xmOw0KPiA+ICsNCj4gPiArCWlmICghaW5mby0+cXVldWVfcmVn aW9uX251bWJlcikgew0KPiA+ICsJCVBNRF9JTklUX0xPRyhFUlIsICJ0aGVyZSBpcyBubyB0aGF0 IHJlZ2lvbiBpZCBiZWVuIHNldA0KPiBiZWZvcmUiKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ ICsJfQ0KPiA+ICsNCj4gPiArCWRjYl9jZmcgPSAmZGNiX2NmZ19sb2NhbDsNCj4gPiArCW1lbXNl dChkY2JfY2ZnLCAwLCBzaXplb2Yoc3RydWN0IGk0MGVfZGNieF9jb25maWcpKTsNCj4gPiArDQo+ ID4gKwkvKiBhc3N1bWUgZWFjaCB0YyBoYXMgdGhlIHNhbWUgYncgKi8NCj4gPiArCXRjX2J3ID0g STQwRV9NQVhfUEVSQ0VOVCAvIGluZm8tPnF1ZXVlX3JlZ2lvbl9udW1iZXI7DQo+ID4gKwlmb3Ig KGkgPSAwOyBpIDwgaW5mby0+cXVldWVfcmVnaW9uX251bWJlcjsgaSsrKQ0KPiA+ICsJCWRjYl9j ZmctPmV0c2NmZy50Y2J3dGFibGVbaV0gPSB0Y19idzsNCj4gPiArCS8qIHRvIGVuc3VyZSB0aGUg c3VtIG9mIHRjYncgaXMgZXF1YWwgdG8gMTAwICovDQo+ID4gKwlid19sZiA9IEk0MEVfTUFYX1BF UkNFTlQgJSAgaW5mby0+cXVldWVfcmVnaW9uX251bWJlcjsNCj4gPiArCWZvciAoaSA9IDA7IGkg PCBid19sZjsgaSsrKQ0KPiA+ICsJCWRjYl9jZmctPmV0c2NmZy50Y2J3dGFibGVbaV0rKzsNCj4g PiArDQo+ID4gKwkvKiBhc3N1bWUgZWFjaCB0YyBoYXMgdGhlIHNhbWUgVHJhbnNtaXNzaW9uIFNl bGVjdGlvbiBBbGdvcml0aG0gKi8NCj4gPiArCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5xdWV1ZV9y ZWdpb25fbnVtYmVyOyBpKyspDQo+ID4gKwkJZGNiX2NmZy0+ZXRzY2ZnLnRzYXRhYmxlW2ldID0g STQwRV9JRUVFX1RTQV9FVFM7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IGluZm8tPnF1 ZXVlX3JlZ2lvbl9udW1iZXI7IGkrKykgew0KPiA+ICsJCWZvciAoaiA9IDA7IGogPCBpbmZvLT5y ZWdpb25baV0udXNlcl9wcmlvcml0eV9udW07IGorKykgew0KPiA+ICsJCQlwcmlvX2luZGV4ID0g aW5mby0+cmVnaW9uW2ldLnVzZXJfcHJpb3JpdHlbal07DQo+ID4gKwkJCXJlZ2lvbl9pbmRleCA9 IGluZm8tPnJlZ2lvbltpXS5yZWdpb25faWQ7DQo+ID4gKwkJCWRjYl9jZmctPmV0c2NmZy5wcmlv cml0eXRhYmxlW3ByaW9faW5kZXhdID0NCj4gPiArCQkJCQkJcmVnaW9uX2luZGV4Ow0KPiA+ICsJ CX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwkvKiBGVyBuZWVkcyBvbmUgQXBwIHRvIGNvbmZpZ3Vy ZSBIVyAqLw0KPiA+ICsJZGNiX2NmZy0+bnVtYXBwcyA9IEk0MEVfREVGQVVMVF9EQ0JfQVBQX05V TTsNCj4gPiArCWRjYl9jZmctPmFwcFswXS5zZWxlY3RvciA9IEk0MEVfQVBQX1NFTF9FVEhUWVBF Ow0KPiA+ICsJZGNiX2NmZy0+YXBwWzBdLnByaW9yaXR5ID0gSTQwRV9ERUZBVUxUX0RDQl9BUFBf UFJJTzsNCj4gPiArCWRjYl9jZmctPmFwcFswXS5wcm90b2NvbGlkID0gSTQwRV9BUFBfUFJPVE9J RF9GQ09FOw0KPiA+ICsNCj4gPiArCXRjX21hcCA9IFJURV9MRU4yTUFTSyhpbmZvLT5xdWV1ZV9y ZWdpb25fbnVtYmVyLCB1aW50OF90KTsNCj4gPiArDQo+ID4gKwlkY2JfY2ZnLT5wZmMud2lsbGlu ZyA9IDA7DQo+ID4gKwlkY2JfY2ZnLT5wZmMucGZjY2FwID0gSTQwRV9NQVhfVFJBRkZJQ19DTEFT UzsNCj4gPiArCWRjYl9jZmctPnBmYy5wZmNlbmFibGUgPSB0Y19tYXA7DQo+ID4gKw0KPiA+ICsJ LyogQ29weSB0aGUgbmV3IGNvbmZpZyB0byB0aGUgY3VycmVudCBjb25maWcgKi8NCj4gPiArCSpv bGRfY2ZnID0gKmRjYl9jZmc7DQo+ID4gKwlvbGRfY2ZnLT5ldHNyZWMgPSBvbGRfY2ZnLT5ldHNj Zmc7DQo+ID4gKwlyZXQgPSBpNDBlX3NldF9kY2JfY29uZmlnKGh3KTsNCj4gPiArDQo+ID4gKwlp ZiAocmV0KSB7DQo+ID4gKwkJUE1EX0lOSVRfTE9HKEVSUiwgIlNldCBxdWV1ZSByZWdpb24gRENC IENvbmZpZyBmYWlsZWQsDQo+IGVyciINCj4gPiArCQkJIiAlcyBhcV9lcnIgJXMiLA0KPiA+ICsJ CQkgaTQwZV9zdGF0X3N0cihodywgcmV0KSwNCj4gPiArCQkJIGk0MGVfYXFfc3RyKGh3LCBody0+ YXEuYXNxX2xhc3Rfc3RhdHVzKSk7DQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArCX0NCj4gPiAr DQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludA0KPiA+ICtp NDBlX3F1ZXVlX3JlZ2lvbl9kY2JfY29uZmlndXJlX2RlZmF1bHQoc3RydWN0IGk0MGVfaHcgKmh3 KQ0KPiANCj4gQ2FuIGk0MGVfZGNiX2luaXRfY29uZmlndXJlIGRvIHdoYXQgdGhpcyBmdW5jIGRp ZCBoZXJlPw0KPiANCj4gPiArew0KPiA+ICsJdWludDE2X3QgaTsNCj4gPiArCXVpbnQzMl90IHJl dCA9IC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsJbWVtc2V0KCZody0+bG9jYWxfZGNieF9jb25maWcs IDAsDQo+ID4gKwlzaXplb2Yoc3RydWN0IGk0MGVfZGNieF9jb25maWcpKTsNCj4gPiArCS8qIHNl dCBkY2IgZGVmYXVsdCBjb25maWd1cmF0aW9uICovDQo+ID4gKwlody0+bG9jYWxfZGNieF9jb25m aWcuZXRzY2ZnLndpbGxpbmcgPSAwOw0KPiA+ICsJaHctPmxvY2FsX2RjYnhfY29uZmlnLmV0c2Nm Zy5tYXh0Y3MgPSAwOw0KPiA+ICsJaHctPmxvY2FsX2RjYnhfY29uZmlnLmV0c2NmZy50Y2J3dGFi bGVbMF0gPSAxMDA7DQo+ID4gKwlody0+bG9jYWxfZGNieF9jb25maWcuZXRzY2ZnLnRzYXRhYmxl WzBdID0NCj4gPiArCQkJSTQwRV9JRUVFX1RTQV9FVFM7DQo+ID4gKwkvKiBhbGwgVVBzIG1hcHBp bmcgdG8gcmVnaW9uIDAgKi8NCj4gPiArCWZvciAoaSA9IDA7IGkgPCBJNDBFX01BWF9VU0VSX1BS SU9SSVRZOyBpKyspDQo+ID4gKwkJaHctPmxvY2FsX2RjYnhfY29uZmlnLmV0c2NmZy5wcmlvcml0 eXRhYmxlW2ldID0gMDsNCj4gPiArCWh3LT5sb2NhbF9kY2J4X2NvbmZpZy5ldHNyZWMgPQ0KPiA+ ICsJCWh3LT5sb2NhbF9kY2J4X2NvbmZpZy5ldHNjZmc7DQo+ID4gKwlody0+bG9jYWxfZGNieF9j b25maWcucGZjLndpbGxpbmcgPSAwOw0KPiA+ICsJaHctPmxvY2FsX2RjYnhfY29uZmlnLnBmYy5w ZmNjYXAgPQ0KPiA+ICsJCQlJNDBFX01BWF9UUkFGRklDX0NMQVNTOw0KPiA+ICsJLyogRlcgbmVl ZHMgb25lIEFwcCB0byBjb25maWd1cmUgSFcgKi8NCj4gPiArCWh3LT5sb2NhbF9kY2J4X2NvbmZp Zy5udW1hcHBzID0gMTsNCj4gPiArCWh3LT5sb2NhbF9kY2J4X2NvbmZpZy5hcHBbMF0uc2VsZWN0 b3IgPQ0KPiA+ICsJCQlJNDBFX0FQUF9TRUxfRVRIVFlQRTsNCj4gPiArCWh3LT5sb2NhbF9kY2J4 X2NvbmZpZy5hcHBbMF0ucHJpb3JpdHkgPSAzOw0KPiA+ICsJaHctPmxvY2FsX2RjYnhfY29uZmln LmFwcFswXS5wcm90b2NvbGlkID0NCj4gPiArCQkJSTQwRV9BUFBfUFJPVE9JRF9GQ09FOw0KPiA+ ICsJcmV0ID0gaTQwZV9zZXRfZGNiX2NvbmZpZyhodyk7DQo+ID4gKwlpZiAocmV0KSB7DQo+ID4g KwkJUE1EX0lOSVRfTE9HKEVSUiwNCj4gPiArCQkiZGVmYXVsdCBkY2IgY29uZmlnIGZhaWxzLiBl cnIgPSAlZCwgYXFfZXJyID0gJWQuIiwNCj4gPiArCQkJcmV0LCBody0+YXEuYXNxX2xhc3Rfc3Rh dHVzKTsNCj4gPiArCQlyZXR1cm4gcmV0Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiAw Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQNCj4gPiAraTQwZV9mbHVzaF9yZWdpb25fYWxsX2Nv bmYoc3RydWN0IGk0MGVfaHcgKmh3LCBzdHJ1Y3QgaTQwZV9wZiAqcGYsDQo+ID4gKwkJCQl1aW50 MTZfdCBvbikNCj4gPiArew0KPiA+ICsJdWludDE2X3QgaTsNCj4gPiArCXN0cnVjdCBpNDBlX3F1 ZXVlX3JlZ2lvbl9pbmZvICppbmZvID0gJnBmLT5xdWV1ZV9yZWdpb247DQo+ID4gKw0KPiA+ICsJ aWYgKG9uKSB7DQo+ID4gKwkJaTQwZV92c2lfdXBkYXRlX3F1ZXVlX3JlZ2lvbl9tYXBwaW5nKGh3 LCBwZik7DQo+ID4gKwkJaTQwZV9xdWV1ZV9yZWdpb25fZGNiX2NvbmZpZ3VyZShodywgcGYpOw0K PiBEb24ndCBjaGVjayBhbGwgdGhlIHJldHVybiBjb2RlPw0KPiANCj4gPiArCQlyZXR1cm4gMDsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlpbmZvLT5xdWV1ZV9yZWdpb25fbnVtYmVyID0gMTsNCj4g PiArCWluZm8tPnJlZ2lvblswXS5xdWV1ZV9udW0gPSA2NDsNCj4gPiArCWluZm8tPnJlZ2lvblsw XS5xdWV1ZV9zdGFydF9pbmRleCA9IDA7DQo+ID4gKw0KPiA+ICsJaTQwZV92c2lfdXBkYXRlX3F1 ZXVlX3JlZ2lvbl9tYXBwaW5nKGh3LCBwZik7DQo+ID4gKwlpNDBlX3F1ZXVlX3JlZ2lvbl9kY2Jf Y29uZmlndXJlX2RlZmF1bHQoaHcpOw0KPiA+ICsNCj4gPiArCWZvciAoaSA9IDA7IGkgPCBJNDBF X1BGUUZfSFJFR0lPTl9NQVhfSU5ERVg7IGkrKykNCj4gPiArCQlpNDBlX3dyaXRlX3J4X2N0bCho dywgSTQwRV9QRlFGX0hSRUdJT04oaSksIDApOw0KPiA+ICsJbWVtc2V0KGluZm8sIDAsIHNpemVv ZihzdHJ1Y3QgaTQwZV9xdWV1ZV9yZWdpb25faW5mbykpOw0KPiA+ICsNCj4gPiArCXJldHVybiAw Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgcnRlX3BtZF9pNDBlX3F1ZXVlX3JlZ2lvbl9jb25m KHVpbnQ4X3QgcG9ydCwNCj4gPiArCQkJc3RydWN0IHJ0ZV9pNDBlX3Jzc19yZWdpb25fY29uZiAq Y29uZl9wdHIpIHsNCj4gPiArCXN0cnVjdCBydGVfZXRoX2RldiAqZGV2ID0gJnJ0ZV9ldGhfZGV2 aWNlc1twb3J0XTsNCj4gPiArCXN0cnVjdCBpNDBlX3BmICpwZiA9IEk0MEVfREVWX1BSSVZBVEVf VE9fUEYoZGV2LT5kYXRhLQ0KPiA+ZGV2X3ByaXZhdGUpOw0KPiA+ICsJc3RydWN0IGk0MGVfaHcg Kmh3ID0gSTQwRV9ERVZfUFJJVkFURV9UT19IVyhkZXYtPmRhdGEtDQo+ID5kZXZfcHJpdmF0ZSk7 DQo+ID4gKwllbnVtIHJ0ZV9wbWRfaTQwZV9xdWV1ZV9yZWdpb25fb3Agb3BfdHlwZSA9IGNvbmZf cHRyLT5vcDsNCj4gPiArCXVpbnQzMl90IHJldDsNCj4gPiArDQo+ID4gKwlpZiAoIWlzX2k0MGVf c3VwcG9ydGVkKGRldikpDQo+ID4gKwkJcmV0dXJuIC1FTk9UU1VQOw0KPiA+ICsNCj4gPiArCXN3 aXRjaCAob3BfdHlwZSkgew0KPiA+ICsJY2FzZSBSVEVfUE1EX0k0MEVfUVVFVUVfUkVHSU9OX1NF VDoNCj4gPiArCQlyZXQgPSBpNDBlX3NldF9xdWV1ZV9yZWdpb24ocGYsIGNvbmZfcHRyKTsNCj4g PiArCQlicmVhazsNCj4gPiArCWNhc2UgUlRFX1BNRF9JNDBFX1JFR0lPTl9GTE9XVFlQRV9QRl9T RVQ6DQo+ID4gKwkJcmV0ID0gaTQwZV9zZXRfcmVnaW9uX2Zsb3d0eXBlX3BmKGh3LCBwZiwgY29u Zl9wdHIpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBSVEVfUE1EX0k0MEVfUkVHSU9OX0ZM T1dUWVBFX1ZGX1NFVDoNCj4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJCWJyZWFrOw0KPiBJ ZiBpdCBpcyBub3Qgc3VwcG9ydGVkLCB3aHkgdG8gZGVmaW5lIHRoaXMgb3A/DQo+IA0KPiA+ICsJ Y2FzZSBSVEVfUE1EX0k0MEVfVVBfUkVHSU9OX1NFVDoNCj4gPiArCQlyZXQgPSBpNDBlX3NldF91 cF9yZWdpb24ocGYsIGNvbmZfcHRyKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgUlRFX1BN RF9JNDBFX1JFR0lPTl9BTExfRkxVU0hfT046DQo+ID4gKwkJcmV0ID0gaTQwZV9mbHVzaF9yZWdp b25fYWxsX2NvbmYoaHcsIHBmLCAxKTsNCj4gPiArCQlicmVhazsNCj4gV2hhdCBpcyB0aGUgRkxV U0ggb24gbWVhbmluZz8gQ29tbWl0IGFsbCBjb25maWd1cmUgdG8gSFc/DQo+IElmIHNvLCB3aGF0 IG1ha2VzIG1lIGNvbmZ1c2VkIHRoYXQ6DQo+IFJURV9QTURfSTQwRV9RVUVVRV9SRUdJT05fU0VU IG9ubHkgdG91Y2ggdGhlIHNvZnR3YXJlIHN0b3JlZCBpbg0KPiBkcml2ZXIuDQo+IEJ1dCBSVEVf UE1EX0k0MEVfUkVHSU9OX0ZMT1dUWVBFX1BGX1NFVCBzZXQgdGhlDQo+IEk0MEVfUEZRRl9IUkVH SU9OIHJlZ2lzdGVyLg0KPiBUaG9zZSBiZWhhdmlvcnMgYXJlIG5vdCBjb25zaXN0Lg0KPiANCj4g QW5kIEZMVVNIIE9GRiBtZWFucyBkZWxldGUgYWxsPw0KPiANCj4gWW91IG5lZWQgdG8gYWRkIG1v cmUgY29tbWVudHMuDQo+IA0KPiA+ICsJY2FzZSBSVEVfUE1EX0k0MEVfUkVHSU9OX0FMTF9GTFVT SF9PRkY6DQo+ID4gKwkJcmV0ID0gaTQwZV9mbHVzaF9yZWdpb25fYWxsX2NvbmYoaHcsIHBmLCAw KTsNCj4gPiArCQlicmVhazsNCj4gPiArDQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCVBNRF9EUlZf TE9HKFdBUk5JTkcsICJvcCB0eXBlICglZCkgbm90IHN1cHBvcnRlZCIsDQo+ID4gKwkJCSAgICBv cF90eXBlKTsNCj4gPiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCUk0MEVfV1JJVEVfRkxVU0goaHcpOw0KPiA+ICsNCj4gPiArCXJldHVybiBy ZXQ7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaTQwZS9ydGVfcG1kX2k0 MGUuaA0KPiA+IGIvZHJpdmVycy9uZXQvaTQwZS9ydGVfcG1kX2k0MGUuaCBpbmRleCAxNTViN2U4 Li5hMTMyOWY0IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L2k0MGUvcnRlX3BtZF9pNDBl LmgNCj4gPiArKysgYi9kcml2ZXJzL25ldC9pNDBlL3J0ZV9wbWRfaTQwZS5oDQo+ID4gQEAgLTkx LDYgKzkxLDIwIEBAIGVudW0gcnRlX3BtZF9pNDBlX3BhY2thZ2VfaW5mbyB7DQo+ID4gIAlSVEVf UE1EX0k0MEVfUEtHX0lORk9fTUFYID0gMHhGRkZGRkZGRiAgfTsNCj4gPg0KPiA+ICsvKioNCj4g PiArICogIE9wdGlvbiB0eXBlcyBvZiBxdWV1ZSByZWdpb24uDQo+ID4gKyAqLw0KPiA+ICtlbnVt IHJ0ZV9wbWRfaTQwZV9xdWV1ZV9yZWdpb25fb3Agew0KPiA+ICsJUlRFX1BNRF9JNDBFX1JFR0lP Tl9VTkRFRklORUQgPSAwLA0KPiA+ICsJUlRFX1BNRF9JNDBFX1FVRVVFX1JFR0lPTl9TRVQsICAg ICAgLyoqPCBhZGQgcXVldWUgcmVnaW9uDQo+IHNldCovDQo+ID4gKwlSVEVfUE1EX0k0MEVfUkVH SU9OX0ZMT1dUWVBFX1BGX1NFVCwgICAvKio8IGFkZCBwZiByZWdpb24NCj4gcGN0eXBlIHNldCAq Lw0KPiA+ICsJUlRFX1BNRF9JNDBFX1JFR0lPTl9GTE9XVFlQRV9WRl9TRVQsICAgLyoqPCBhZGQg dmYgcmVnaW9uDQo+IHBjdHlwZSBzZXQgKi8NCj4gPiArCVJURV9QTURfSTQwRV9VUF9SRUdJT05f U0VULCAgIC8qKjwgYWRkIHF1ZXVlIHJlZ2lvbiBwY3R5cGUNCj4gc2V0ICovDQo+ID4gKwlSVEVf UE1EX0k0MEVfUkVHSU9OX0FMTF9GTFVTSF9PTiwgICAvKio8IGZsdXNoIG9uIGFsbA0KPiBjb25m aWd1cmF0aW9uICovDQo+ID4gKwlSVEVfUE1EX0k0MEVfUkVHSU9OX0FMTF9GTFVTSF9PRkYsICAg LyoqPCBmbHVzaCBvZmYgYWxsDQo+IGNvbmZpZ3VyYXRpb24gKi8NCj4gPiArCVJURV9QTURfSTQw RV9RVUVVRV9SRUdJT05fT1BfTUFYDQo+ID4gK307DQo+ID4gKw0KPiA+ICAjZGVmaW5lIFJURV9Q TURfSTQwRV9ERFBfTkFNRV9TSVpFIDMyDQo+ID4NCj4gPiAgLyoqDQo+ID4gQEAgLTE0Niw2ICsx NjAsMTggQEAgc3RydWN0IHJ0ZV9wbWRfaTQwZV9wdHlwZV9tYXBwaW5nIHsgIH07DQo+ID4NCj4g PiAgLyoqDQo+ID4gKyAqIFF1ZXVlIHJlZ2lvbiBpbmZvcm1hdGlvbiBnZXQgZnJvbSBDTEkuDQo+ ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcnRlX2k0MGVfcnNzX3JlZ2lvbl9jb25mIHsNCj4gPiArCXVp bnQ4X3QgcmVnaW9uX2lkOw0KPiA+ICsJdWludDhfdCBod19mbG93dHlwZTsNCj4gPiArCXVpbnQ4 X3QgcXVldWVfc3RhcnRfaW5kZXg7DQo+ID4gKwl1aW50OF90IHF1ZXVlX251bTsNCj4gPiArCXVp bnQ4X3QgdXNlcl9wcmlvcml0eTsNCj4gPiArCWVudW0gcnRlX3BtZF9pNDBlX3F1ZXVlX3JlZ2lv bl9vcCAgb3A7IH07DQo+IFRoaXMgaXMgQVBJIHN0cnVjdCwgeW91IG5lZWQgdG8gY29tbWVudCB0 aGVtIGluIGRldGFpbA0KPiANCj4gVGhhbmtzDQo+IEppbmdqaW5nDQo=