From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 04B25A04F6; Tue, 7 Jan 2020 11:46:20 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 34DD01D736; Tue, 7 Jan 2020 11:46:20 +0100 (CET) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 2C1101D71E for ; Tue, 7 Jan 2020 11:46:17 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Jan 2020 02:46:17 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.69,405,1571727600"; d="scan'208";a="217107985" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by fmsmga007.fm.intel.com with ESMTP; 07 Jan 2020 02:46:16 -0800 Received: from fmsmsx151.amr.corp.intel.com (10.18.125.4) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 7 Jan 2020 02:46:16 -0800 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by FMSMSX151.amr.corp.intel.com (10.18.125.4) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 7 Jan 2020 02:46:16 -0800 Received: from shsmsx101.ccr.corp.intel.com ([169.254.1.30]) by SHSMSX104.ccr.corp.intel.com ([169.254.5.197]) with mapi id 14.03.0439.000; Tue, 7 Jan 2020 18:46:14 +0800 From: "Di, ChenxuX" To: "Ananyev, Konstantin" , "dev@dpdk.org" CC: "Yang, Qiming" Thread-Topic: [dpdk-dev] [PATCH v6 3/4] net/ixgbe: cleanup Tx buffers Thread-Index: AQHVvvUG2XKE65EZ4ECFZ4yLvAYxOqfSHGAAgATnLxCABTo6gIAA/MyA///rM4CAAeIGYA== Date: Tue, 7 Jan 2020 10:46:13 +0000 Message-ID: <3B926E44943CB04AA3A39AC16328CE39B9440F@SHSMSX101.ccr.corp.intel.com> References: <20191203055134.72874-1-chenxux.di@intel.com> <20191230093840.17701-1-chenxux.di@intel.com> <20191230093840.17701-4-chenxux.di@intel.com> <3B926E44943CB04AA3A39AC16328CE39B9262D@SHSMSX101.ccr.corp.intel.com> <3B926E44943CB04AA3A39AC16328CE39B93D08@SHSMSX101.ccr.corp.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.239.127.40] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v6 3/4] net/ixgbe: cleanup Tx buffers 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBBbmFueWV2LCBLb25z dGFudGluDQo+IFNlbnQ6IE1vbmRheSwgSmFudWFyeSA2LCAyMDIwIDk6MjYgUE0NCj4gVG86IERp LCBDaGVueHVYIDxjaGVueHV4LmRpQGludGVsLmNvbT47IGRldkBkcGRrLm9yZw0KPiBDYzogWWFu ZywgUWltaW5nIDxxaW1pbmcueWFuZ0BpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJFOiBbZHBkay1k ZXZdIFtQQVRDSCB2NiAzLzRdIG5ldC9peGdiZTogY2xlYW51cCBUeCBidWZmZXJzDQo+IA0KPiAN Cj4gDQo+ID4gPiA+ID4gPiArICogdHhfdGFpbCBpcyB0aGUgbGFzdCBzZW50IHBhY2tldCBvbiB0 aGUgc3dfcmluZy4gR290byB0aGUNCj4gPiA+ID4gPiA+ICsgZW5kDQo+ID4gPiA+ID4gPiArICog b2YgdGhhdCBwYWNrZXQgKHRoZSBsYXN0IHNlZ21lbnQgaW4gdGhlIHBhY2tldCBjaGFpbikgYW5k DQo+ID4gPiA+ID4gPiArICogdGhlbiB0aGUgbmV4dCBzZWdtZW50IHdpbGwgYmUgdGhlIHN0YXJ0 IG9mIHRoZSBvbGRlc3QNCj4gPiA+ID4gPiA+ICsgc2VnbWVudA0KPiA+ID4gPiA+ID4gKyAqIGlu IHRoZSBzd19yaW5nLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gTm90IHN1cmUgSSB1bmRlcnN0YW5k IHRoZSBzZW50ZW5jZSBhYm92ZS4NCj4gPiA+ID4gPiB0eF90YWlsIGlzIHRoZSB2YWx1ZSBvZiBU RFQgSFcgcmVnaXN0ZXIgKG1vc3QgcmVjZW50bHkgYXJtZWQgYnkgU1cgVEQpLg0KPiA+ID4gPiA+ IGxhc3RfaWQgIGlzIHRoZSBpbmRleCBvZiBsYXN0IGRlc2NyaXB0b3IgZm9yIG11bHRpLXNlZyBw YWNrZXQuDQo+ID4gPiA+ID4gbmV4dF9pZCBpcyBqdXN0IHRoZSBpbmRleCBvZiBuZXh0IGRlc2Ny aXB0b3IgaW4gSFcgVEQgcmluZy4NCj4gPiA+ID4gPiBIb3cgZG8geW91IGNvbmNsdWRlIHRoYXQg aXQgd2lsbCBiZSB0aGUgJyBvbGRlc3Qgc2VnbWVudCBpbiB0aGUgc3dfcmluZyc/DQo+ID4gPiA+ ID4NCj4gPiA+ID4NCj4gPiA+ID4gVGhlIHR4X3RhaWwgaXMgdGhlIGxhc3Qgc2VudCBwYWNrZXQg b24gdGhlIHN3X3JpbmcuIFdoaWxlIHRoZQ0KPiA+ID4gPiB4bWl0X2NsZWFudXAgb3IgVHhfZnJl ZV9idWZzIHdpbGwgYmUgY2FsbCB3aGVuIHRoZSBuYl90eF9mcmVlIDwNCj4gPiA+IHR4X2ZyZWVf dGhyZXNoIC4NCj4gPiA+ID4gU28gdGhlIHN3X3JpbmdbdHhfdGFpbF0ubmV4dF9pZCBtdXN0IGJl IHRoZSBiZWdpbiBvZiBtYnVmcyB3aGljaA0KPiA+ID4gPiBhcmUgbm90IHVzZWQgb3IgIEFscmVh ZHkgZnJlZWQgLiB0aGVuIGJlZ2luIHRoZSBsb29wIHVudGlsIHRoZQ0KPiA+ID4gPiBtYnVmIGlz IHVzZWQgYW5kDQo+ID4gPiBiZWdpbiB0byBmcmVlIHRoZW0uDQo+ID4gPiA+DQo+ID4gPiA+DQo+ ID4gPiA+DQo+ID4gPiA+ID4gQW5vdGhlciBxdWVzdGlvbiB3aHkgZG8geW91IG5lZWQgdG8gd3Jp dGUgeW91ciBvd24gZnVuY3Rpb25zPw0KPiA+ID4gPiA+IFdoeSBjYW4ndCB5b3UgcmV1c2UgZXhp c3RpbmcgaXhnYmVfeG1pdF9jbGVhbnVwKCkgZm9yDQo+ID4gPiA+ID4gZnVsbChvZmZsb2FkKSBw YXRoIGFuZA0KPiA+ID4gPiA+IGl4Z2JlX3R4X2ZyZWVfYnVmcygpIGZvciBzaW1wbGUgcGF0aD8N Cj4gPiA+ID4gPiBZZXMsICBpeGdiZV94bWl0X2NsZWFudXAoKSBkb2Vzbid0IGZyZWUgbWJ1ZnMs IGJ1dCBhdCBsZWFzdCBpdA0KPiA+ID4gPiA+IGNvdWxkIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIGZp bmlzaGVkIFRYIGRlc2NyaXB0b3JzLg0KPiA+ID4gPiA+IEJhc2VkIG9uIHRoYXQgeW91IGNhbiB5 b3UgY2FuIGZyZWUgYXBwcm9wcmlhdGUgc3dfcmluZ1tdIGVudHJpZXMuDQo+ID4gPiA+ID4NCj4g PiA+ID4NCj4gPiA+ID4gVGhlIHJlYXNvbiB3aHkgSSBkb24ndCByZXVzZSBleGlzdGluZyBmdW5j dGlvbiBpcyB0aGF0IHRoZXkgYWxsDQo+ID4gPiA+IGZyZWUgc2V2ZXJhbCBtYnVmcyBXaGlsZSB0 aGUgZnJlZV9jbnQgb2YgdGhlIEFQSQ0KPiA+ID4gPiBydGVfZXRoX3R4X2RvbmVfY2xlYW51cCgp IGlzIHRoZQ0KPiA+ID4gbnVtYmVyIG9mIHBhY2tldHMuDQo+ID4gPiA+IEl0IGFsc28gbmVlZCB0 byBiZSBkb25lIHRoYXQgY2hlY2sgd2hpY2ggbWJ1ZmZzIGFyZSBmcm9tIHRoZSBzYW1lIHBhY2tl dC4NCj4gPiA+DQo+ID4gPiBBdCBmaXJzdCwgSSBkb24ndCBzZWUgYW55dGhpbmcgYmFkIGlmIHR4 X2RvbmVfY2xlYW51cCgpIHdpbGwgZnJlZQ0KPiA+ID4gb25seSBzb21lIHNlZ21lbnRzIGZyb20g dGhlIHBhY2tldC4gQXMgbG9uZyBhcyBpdCBpcyBzYWZlIC0gdGhlcmUgaXMgbm8NCj4gcHJvYmxl bSB3aXRoIHRoYXQuDQo+ID4gPiBJIHRoaW5rIHJ0ZV9ldGhfdHhfZG9uZV9jbGVhbnVwKCkgb3Bl cmF0ZXMgb24gbWJ1Ziwgbm90IHBhY2tldCBxdWFudGl0aWVzLg0KPiA+ID4gQnV0IGluIG91ciBj YXNlIEkgdGhpbmsgaXQgZG9lc24ndCBtYXR0ZXIsIGFzIGl4Z2JlX3htaXRfY2xlYW51cCgpDQo+ ID4gPiBtYXJrIFRYRHMgYXMgZnJlZSBvbmx5IHdoZW4gSFcgaXMgZG9uZSB3aXRoIGFsbCBUWERz IGZvciB0aGF0IHBhY2tldC4NCj4gPiA+IEFzIGxvbmcgYXMgdGhlcmUgaXMgYSB3YXkgdG8gcmV1 c2UgZXhpc3RpbmcgY29kZSBhbmQgYXZvaWQNCj4gPiA+IGR1cGxpY2F0aW9uICh3aXRob3V0IGlu dHJvZHVjaW5nIGFueSBkZWdyYWRhdGlvbikgLSB3ZSBzaG91bGQgdXNlIGl0Lg0KPiA+ID4gQW5k IEkgdGhpbmsgdGhlcmUgaXMgYSB2ZXJ5IGdvb2Qgb3Bwb3J0dW5pdHkgaGVyZSB0byByZXVzZSBl eGlzdGluZw0KPiA+ID4gaXhnYmVfeG1pdF9jbGVhbnVwKCkgZm9yIHR4X2RvbmVfY2xlYW51cCgp IGltcGxlbWVudGF0aW9uLg0KPiA+ID4gTW9yZW92ZXIgYmVjYXVzZSB5b3VyIGNvZGUgZG9lc27i gJl0IGZvbGxvdw0KPiA+ID4gaXhnYmVfeG1pdF9wa3RzKCkvaXhnYmVfeG1pdF9jbGVhbnVwKCkN Cj4gPiA+IGxvZ2ljIGFuZCBpbmZyYXN0cnVjdHVyZSwgaXQgaW50cm9kdWNlcyB1bm5lY2Vzc2Fy eSBzY2FucyBvdmVyIFRYRA0KPiA+ID4gcmluZywgYW5kIGluIHNvbWUgY2FzZXMgZG9lc24ndCB3 b3JrIGFzIGV4cGVjdGVkOg0KPiA+ID4NCj4gPiA+ICt3aGlsZSAoMSkgew0KPiA+ID4gK3R4X2xh c3QgPSBzd19yaW5nW3R4X2lkXS5sYXN0X2lkOw0KPiA+ID4gKw0KPiA+ID4gK2lmIChzd19yaW5n W3R4X2xhc3RdLm1idWYpIHsNCj4gPiA+ICtpZiAodHhyW3R4X2xhc3RdLndiLnN0YXR1cyAmDQo+ ID4gPiArSVhHQkVfVFhEX1NUQVRfREQpIHsNCj4gPiA+IC4uLg0KPiA+ID4gK30gZWxzZSB7DQo+ ID4gPiArLyoNCj4gPiA+ICsgKiBtYnVmIHN0aWxsIGluIHVzZSwgbm90aGluZyBsZWZ0IHRvDQo+ ID4gPiArICogZnJlZS4NCj4gPiA+ICsgKi8NCj4gPiA+ICticmVhazsNCj4gPiA+DQo+ID4gPiBJ dCBpcyBub3QgY29ycmVjdCB0byBleHBlY3QgdGhhdCBJWEdCRV9UWERfU1RBVF9ERCB3aWxsIGJl IHNldCBvbg0KPiA+ID4gbGFzdCBUWEQgZm9yDQo+ID4gPiAqZXZlcnkqIHBhY2tldC4NCj4gPiA+ IFdlIHNldCBJWEdCRV9UWERfQ01EX1JTIGJpdCBvbmx5IG9uIHRocmVzaG9sZCBwYWNrZXQgbGFz dCBkZXNjcmlwdG9yLg0KPiA+ID4gUGx1cyBpeGdiZV94bWl0X2NsZWFudXAoKSBjYW4gY2xlYW51 cCBUWEQgd2Iuc3RhdHVzLg0KPiA+ID4NCj4gPiA+IFNvIEkgc3Ryb25nbHkgcmVjb21tZW5kIHRv IHJldXNlIGl4Z2JlX3htaXRfY2xlYW51cCgpIGhlcmUuDQo+ID4gPiBJdCB3b3VsZCBiZSBtdWNo IGxlc3MgZXJyb3IgcHJvbmUgYW5kIHdpbGwgaGVscCB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9u Lg0KPiA+ID4NCj4gPiA+IEtvbnN0YW50aW4NCj4gPiA+DQo+ID4NCj4gPiBBdCBmaXJzdC4NCj4g PiBUaGUgZnVuY3Rpb24gaXhnYmVfeG1pdF9jbGVhbnVwKHN0cnVjdCBpeGdiZV90eF9xdWV1ZSAq dHhxKSB3aWxsIGNsZWFudXANCj4gVFhEIHdiLnN0YXR1cy4NCj4gPiB0aGUgbnVtYmVyIG9mIHN0 YXR1cyBjbGVhbnVwZWQgaXMgYWx3YXlzIHR4cS0+dHhfcnNfdGhyZXNoLg0KPiANCj4gWWVzLCBh bmQgd2hhdCdzIHdyb25nIHdpdGggaXQ/DQo+IA0KPiA+DQo+ID4gVGhlICBBUEkgcnRlX2V0aF90 eF9kb25lX2NsZWFudXAoKSBpbiBydGVfZXRoX2Rldi5oIHNob3cgdGhhdCBAcGFyYW0NCj4gPiBm cmVlX2NudA0KPiA+ICAqICAgTWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0byBmcmVlLiBVc2Ug MCB0byBpbmRpY2F0ZSBhbGwgcG9zc2libGUgcGFja2V0cw0KPiA+ICAqICAgc2hvdWxkIGJlIGZy ZWVkLiBOb3RlIHRoYXQgYSBwYWNrZXQgbWF5IGJlIHVzaW5nIG11bHRpcGxlIG1idWZzLg0KPiAN Cj4gSSBkb24ndCB0aGluayBpdCBpcyBhIGdvb2QgYXBwcm9hY2gsIGJldHRlciB3b3VsZCBiZSB0 byByZXBvcnQgbnVtYmVyIG9mIGZyZWVkDQo+IG1idWZzLCBidXQgb2ssIGFzIGl0IGlzIGEgcHVi bGljIEFQSSwgd2UgcHJvYmFibHkgbmVlZCB0byBrZWVwIGl0IGFzIGl0IGlzLg0KPiANCj4gPiBh IG51bWJlciBtdXN0IGJlIHNldCB3aGlsZSBpeGdiZV94bWl0X2NsZWFudXAgYW5kIGl4Z2JlX3R4 X2ZyZWVfYnVmcyBvbmx5DQo+IGhhdmUgb25lIHBhcmFtZXRlciB0eHEuDQo+IA0KPiBZZXMsIGl4 Z2JlX3htaXRfY2xlYW51cCgpIGNsZWFucyB1cCBhdCBsZWFzdCB0eHEtPnR4X3JzX3RocmVzaCBU WERzLg0KPiBTbyBpZiB1c2VyIHJlcXVlc3RlZCBtb3JlIHBhY2tldHMgdG8gYmUgZnJlZWQgd2Ug Y2FuIGNhbGwgaXhnYmVfeG1pdF9jbGVhbnVwKCkNCj4gaW4gYSBsb29wLg0KPiANCg0KVGhhdCBp cyBhIGdyZWF0IGlkZWEgYW5kIEkgZGlzY3VzcyB3aXRoIG15IHdvcmttYXRlIGFib3V0IGl0IHRv ZGF5LiB0aGVyZSBpcyBhbHNvIHNvbWUNClF1ZXN0aW9uIHRoYXQgd2UgZG9u4oCZdCBjb25maXJt LiANCkFjdHVhbGx5IGl0IGNhbiBjYWxsIGl4Z2JlX3htaXRfY2xlYW51cCgpIGluIGEgbG9vcCBp ZiB1c2VyIHJlcXVlc3RlZCBtb3JlIHBhY2tldHMsDQpIb3cgdG8gZGVhbCB3aXRoIHRoZSBNT0Qu IEZvciBleGFtcGxlOg0KCVRoZSBkZWZhdWx0IHR4X3JzX3RocmVzaCBpcyAzMi5pZiB0aGUgY291 bnQgb2YgbWJ1ZnMgd2UgbmVlZCBmcmVlIGlzIDUwLg0KCVdlIGNhbiBjYWxsIGl4Z2JlX3htaXRf Y2xlYW51cCgpIG9uZSB0aW1lIHRvIGZyZWUgMzIgbWJ1ZnMuDQoJVGhlbiBob3cgYWJvdXQgb3Ro ZXIgMTggbWJ1ZnMuIA0KCTEuSWYgd2UgZG8gbm90aGluZywgaXQgbG9va3Mgbm90IGdvb2QuIA0K CTIuaWYgd2UgY2FsbCBpeGdiZV94bWl0X2NsZWFudXAoKSBzdWNjZXNzZnVsbHksIHdlIGZyZWUg MTQgbWJ1ZnMgbW9yZS4NCgkzLmlmIHdlIGNhbGwgaXhnYmVfeG1pdF9jbGVhbnVwKCkgZmFpbCwg dGhlIHN0YXR1cyBvZiBOby4zMiBtYnVmcyBpcyBub3QgREQNCgkgIFdoaWxlIE5vIC4xOCBpcyBE RC4gU28gd2UgZG8gbm90IGZyZWUgMTggbWJ1ZnMgd2hhdCB3ZSBjYW4gYW5kIHNob3VsZCBmcmVl Lg0KDQpXZSBoYXZlIHRyeSBzb21lIHBsYW5zIGFib3V0IGl0LCBsaWtlcyBhZGQgcGFyYW1ldGVy IGZvciBpeGdiZV94bWl0X2NsZWFudXAoKSwgY2hhbmdlIA0KIFR4X3JzX3RocmVzaCBvciBjb3B5 IHRoZSBjb2RlIG9yIGl4Z2JlX3htaXRfY2xlYW51cCgpIGFzIGEgbmV3IGZ1bmN0aW9uIHdpdGgg bW9yZSANClBhcmFtZXRlci4gQnV0IGFsbCBvZiB0aGVtIHNlZW0gbm90IHBlcmZlY3QuIA0KDQpT byAgY2FuIHlvdSBnaXZlIHNvbWUgY29tbWVudCBhYm91dCBpdD8gSXQgc2VlbXMgbm90IGVhc3kg YXMgd2UgdGhpbmsgYnkgcmV1c2UgZnVuY3Rpb24uDQoNCg0KPiA+IEFuZCB3aGF0IHNob3VsZCBk byBpcyBub3Qgb25seSBmcmVlIGJ1ZmZlcnMgYW5kIHN0YXR1cyBidXQgYWxzbyBjaGVjaw0KPiA+ IHdoaWNoIGJ1ZnMgYXJlIGZyb20gIE9uZSBwYWNrZXQgYW5kIGNvdW50IHRoZSBwYWNrZXQgZnJl ZWQuDQo+IA0KPiBpeGdiZV94bWl0X2NsZWFudXAoKSBpdHNlbGYgZG9lc24ndCBmcmVlIG1idWZz IGl0c2VsZi4NCj4gSXQgb25seSBjbGVhbnMgdXAgVFhEcy4NCj4gU28gaW4gdHhfZG9uZV9jbGVh bnVwKCkgYWZ0ZXIgY2FsbGluZyBpeGdiZV94bWl0X2NsZWFudXAoKSB5b3UnbGwgc3RpbGwgbmVl ZCB0byBnbw0KPiB0aHJvdWdoIHN3X3JpbmdbXSBlbnRyaWVzIHRoYXQgY29ycmVzcG9uZCB0byBm cmVlIFRYRHMgYW5kIGNhbGwgbWJ1Zl9zZWdfZnJlZSgpLg0KPiBZb3UgY2FuIGNvdW50IG51bWJl ciBvZiBmdWxsIHBhY2tldHMgaGVyZS4NCj4gDQo+ID4gU28gSSB0aGluayBpdCBjYW4ndCBiZSBp bXBsZW1lbnRlZCB0aGF0IHJldXNlIGZ1bmN0aW9uIHhtaXRfY2xlYW51cCB3aXRob3V0DQo+IGNo YW5nZSBpdC4NCj4gPiBBbmQgY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIHdpdGggdGhlIGNvZGUgb2Yg eG1pdF9jbGVhbnVwIHdpbGwgY2F1c2UgbWFueQ0KPiBkdXBsaWNhdGlvbi4NCj4gDQo+IEkgZG9u J3QgdGhpbmsgaXQgd291bGQuDQo+IEkgdGhpbmsgYWxsIHdlIG5lZWQgaGVyZSBpcyBzb21ldGhp bmcgbGlrZSB0aGF0IChub3RlIGl0IGlzIHNjaGVtYXRpYyBvbmUsIGRvZXNuJ3QNCj4gdGFrZSBp bnRvIGFjY291bmYgdGhhdCBUWEQgcmluZyBpcyBjaXJjdWxhcik6DQo+IA0KPiB0eF9kb25lX2Ns ZWFudXAoLi4uLCB1aW50MzJfdCBjbnQpDQo+IHsNCj4gICAgICAgLyogd2UgaGF2ZSB0eHEtPm5i X3R4X2ZyZWUgVFhEcyBzdGFydGluZyBmcm9tIHR4cS0+dHhfdGFpbC4NCj4gICAgICAgICAgICBT Y2FuIHRoZW0gZmlyc3QgYW5kIGZyZWUgYXMgbWFueSBtYnVmcyBhcyB3ZSBjYW4uDQo+ICAgICAg ICAgICAgSWYgd2UgbmVlZCBtb3JlIG1idWZzIHRvIGZyZWUgY2FsbCAgaXhnYmVfeG1pdF9jbGVh bnVwKCkNCj4gICAgICAgICAgICB0byBmcmVlIG1vcmUgVFhEcy4gKi8NCj4gDQo+ICAgICAgICBz d3IgPSB0eHEtPnN3X3Jpbmc7DQo+ICAgICAgICB0eHIgICAgID0gdHhxLT50eF9yaW5nOw0KPiAg ICAgICAgaWQgICA9IHR4cS0+dHhfdGFpbDsNCj4gICAgICAgIGZyZWUgPSAgdHhxLT5uYl90eF9m cmVlOw0KPiANCj4gICAgICAgIGZvciAobiA9IDA7IG4gPCBjbnQgJiYgZnJlZSAhPSAwOyApIHsN Cj4gDQo+ICAgICAgICAgICBmb3IgKGogPSAwOyBqICE9IGZyZWUgJiYgbiA8IGNudDsgaisrKSB7 DQo+ICAgICAgICAgICAgICBzd2UgPSAmc3dyW2lkICsgal07DQo+ICAgICAgICAgICAgICBpZiAo c3dlLT5tYnVmICE9IE5VTEwpIHsNCj4gICAgICAgICAgICAgICAgICAgIHJ0ZV9wa3RtYnVmX2Zy ZWVfc2VnKHN3ZS0+bWJ1Zik7DQo+ICAgICAgICAgICAgICAgICAgICBzd2UtPm1idWYgPSBOVUxM Ow0KPiAgICAgICAgICAgICAgfQ0KPiAgICAgICAgICAgICAgbiArPSAoc3dlLT5sYXN0X2lkID09 IGlkICsgaikNCj4gICAgICAgICAgIH0NCj4gDQo+ICAgICAgICAgICBpZiAobiA8IGNudCkgew0K PiAgICAgICAgICAgICAgICBpeGdiZV94bWl0X2NsZWFudXAodHhxKTsNCj4gICAgICAgICAgICAg ICAgZnJlZSA9ICAgdHhxLT5uYl90eF9mcmVlIC0gZnJlZTsNCj4gICAgICAgICAgIH0NCj4gICAg ICB9DQo+ICAgICAgcmV0dXJuIG47DQo+IH0NCj4gDQo+ID4NCj4gPiBBYm92ZSBhbGwgLCBpdCBz ZWVtIG5vdCBhIHBlcmZlY3QgaWRlYSB0byByZXVzZSBpeGdiZV94bWl0X2NsZWFudXAoKS4NCj4g DQo+IFRvdGFsbHkgZGlzYWdyZWUsIHNlZSBhYm92ZS4NCj4gDQo+ID4NCj4gPiBTZWNvbmQuDQo+ ID4gVGhlIGZ1bmN0aW9uIGluIHBhdGNoIGlzIGNvcHkgZnJvbSBjb2RlIGluIGlnYl9yeHR4LmMu IGl0IGFscmVhZHkNCj4gPiB1cGRhdGVkIGluIDIwMTcsIFRoZSBjb21taXQgaWQgaXMNCj4gOGQ5 MDdkMmI3OWY3YTU0YzgwOWYxYzQ0OTcwZmY0NTVmYTI4NjVlMS4NCj4gDQo+IEkgcmVhbGl6ZWQg dGhhdC4NCj4gQnV0IEkgdGhpbmsgaXQgYXMgYSBwcm9ibGVtLCBub3QgYSBwb3NpdGl2ZSB0aGlu Zy4NCj4gV2hpbGUgdGhleSBkbyBoYXZlIHNvbWUgc2ltaWxhcml0aWVzLCBpZ2IgYWJkIGl4Z2Jl IGFyZSBQTURzIGZvciBkaWZmZXJlbnQNCj4gZGV2aWNlcywgYW5kIHRoZWlyIFRYIGNvZGUgZGlm ZmVycyBxdWl0ZSBhIGxvdC4gTGV0IHNheSBpZ2IgZG9lc24ndCB1c2UNCj4gdHhfcnNfdGhyZXNo b2xkLCBidXQgaW5zdGVhZCBzZXQgUlMgYml0IGZvciBlYWNoIGxhc3QgVFhELg0KPiBTbywganVz dCBibGluZGx5IGNvcHlpbmcgdHhfZG9uZV9jbGVhbnVwKCkgZnJvbSBpZ2IgdG8gaXhnYmUgZG9l c24ndCBsb29rIGxpa2UgYQ0KPiBnb29kIGlkZWEgdG8gbWUuDQo+IA0KPiA+IEkgdHJ1c3QgdGhl IGxvZ2ljIG9mIGNvZGUgaXMgcmlnaHQuDQo+ID4gQWN0dWFsbHkgaXQgZG9uJ3QgY29tcGxldGUg Zm9yIGl4Z2JlLCBpNDBlIGFuZCBpY2UsIHdoaWxlIGl0IGRvbid0DQo+ID4gY2hhbmdlIHRoZSB2 YWx1ZSBvZiBsYXN0X2Rlc2NfY2xlYW5lZCBhbmQgdHhfbmV4dF9kZC4gQW5kIGl0J3MNCj4gPiBi ZWdpbm5pbmcgcHJlZmVyIGxhc3RfZGVzY19jbGVhbmVkIG9yICB0eF9uZXh0X2RkKGZvciBvZmZs b2FkIG9yIHNpbXBsZSkgdG8NCj4gdHhfdGFpbC4NCj4gPg0KPiA+IFNvLCBJIHN1Z2dlc3QgdG8g dXNlIHRoZSBvbGQgZnVuY3Rpb24gYW5kIGZpeCB0aGUgaXNzdWUuDQo+ID4NCj4gPiA+ID4NCj4g PiA+ID4NCj4gPiA+ID4gPiA+VGhpcyBpcyB0aGUgZmlyc3QgcGFja2V0IHRoYXQgd2lsbCBiZQ0K PiA+ID4gPiA+ID4gKyAqIGF0dGVtcHRlZCB0byBiZSBmcmVlZC4NCj4gPiA+ID4gPiA+ICsgKi8N Cj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsvKiBHZXQgbGFzdCBzZWdtZW50IGluIG1vc3Qg cmVjZW50bHkgYWRkZWQgcGFja2V0LiAqLyB0eF9sYXN0DQo+ID4gPiA+ID4gPiArPSBzd19yaW5n W3R4cS0+dHhfdGFpbF0ubGFzdF9pZDsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsvKiBH ZXQgdGhlIG5leHQgc2VnbWVudCwgd2hpY2ggaXMgdGhlIG9sZGVzdCBzZWdtZW50IGluIHJpbmcu DQo+ID4gPiA+ID4gPiArKi8gdHhfZmlyc3QgPSBzd19yaW5nW3R4X2xhc3RdLm5leHRfaWQ7DQo+ ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArLyogU2V0IHRoZSBjdXJyZW50IGluZGV4IHRvIHRo ZSBmaXJzdC4gKi8gdHhfaWQgPSB0eF9maXJzdDsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ ICsvKg0KPiA+ID4gPiA+ID4gKyAqIExvb3AgdGhyb3VnaCBlYWNoIHBhY2tldC4gRm9yIGVhY2gg cGFja2V0LCB2ZXJpZnkgdGhhdCBhbg0KPiA+ID4gPiA+ID4gKyAqIG1idWYgZXhpc3RzIGFuZCB0 aGF0IHRoZSBsYXN0IHNlZ21lbnQgaXMgZnJlZS4gSWYgc28sIGZyZWUNCj4gPiA+ID4gPiA+ICsg KiBpdCBhbmQgbW92ZSBvbi4NCj4gPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiA+ICt3aGlsZSAo MSkgew0KPiA+ID4gPiA+ID4gK3R4X2xhc3QgPSBzd19yaW5nW3R4X2lkXS5sYXN0X2lkOw0KPiA+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gK2lmIChzd19yaW5nW3R4X2xhc3RdLm1idWYpIHsNCj4g PiA+ID4gPiA+ICtpZiAoISh0eHJbdHhfbGFzdF0ud2Iuc3RhdHVzICYNCj4gPiA+ID4gPiA+ICtJ WEdCRV9UWERfU1RBVF9ERCkpDQo+ID4gPiA+ID4gPiArYnJlYWs7DQo+ID4gPiA+ID4gPiArDQo+ ID4gPiA+ID4gPiArLyogR2V0IHRoZSBzdGFydCBvZiB0aGUgbmV4dCBwYWNrZXQuICovIHR4X25l eHQgPQ0KPiA+ID4gPiA+ID4gK3N3X3JpbmdbdHhfbGFzdF0ubmV4dF9pZDsNCj4gPiA+ID4gPiA+ ICsNCj4gPiA+ID4gPiA+ICsvKg0KPiA+ID4gPiA+ID4gKyAqIExvb3AgdGhyb3VnaCBhbGwgc2Vn bWVudHMgaW4gYQ0KPiA+ID4gPiA+ID4gKyAqIHBhY2tldC4NCj4gPiA+ID4gPiA+ICsgKi8NCj4g PiA+ID4gPiA+ICtkbyB7DQo+ID4gPiA+ID4gPiArcnRlX3BrdG1idWZfZnJlZV9zZWcoc3dfcmlu Z1t0eF9pZF0ubWJ1Zik7DQo+ID4gPiA+ID4gPiArc3dfcmluZ1t0eF9pZF0ubWJ1ZiA9IE5VTEw7 DQo+ID4gPiA+ID4gPiArc3dfcmluZ1t0eF9pZF0ubGFzdF9pZCA9IHR4X2lkOw0KPiA+ID4gPiA+ ID4gKw0KPiA+ID4gPiA+ID4gKy8qIE1vdmUgdG8gbmV4dCBzZWdtZW50LiAqLw0KPiA+ID4gPiA+ ID4gK3R4X2lkID0gc3dfcmluZ1t0eF9pZF0ubmV4dF9pZDsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiA+ICt9IHdoaWxlICh0eF9pZCAhPSB0eF9uZXh0KTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiA+ICsvKg0KPiA+ID4gPiA+ID4gKyAqIEluY3JlbWVudCB0aGUgbnVtYmVyIG9mIHBhY2tl dHMNCj4gPiA+ID4gPiA+ICsgKiBmcmVlZC4NCj4gPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiA+ ICtjb3VudCsrOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gK2lmICh1bmxpa2VseShjb3Vu dCA9PSAoaW50KWZyZWVfY250KSkgYnJlYWs7IH0gZWxzZSB7DQo+ID4gPiA+ID4gPiArLyoNCj4g PiA+ID4gPiA+ICsgKiBUaGVyZSBhcmUgbXVsdGlwbGUgcmVhc29ucyB0byBiZSBoZXJlOg0KPiA+ ID4gPiA+ID4gKyAqIDEpIEFsbCB0aGUgcGFja2V0cyBvbiB0aGUgcmluZyBoYXZlIGJlZW4NCj4g PiA+ID4gPiA+ICsgKiAgICBmcmVlZCAtIHR4X2lkIGlzIGVxdWFsIHRvIHR4X2ZpcnN0DQo+ID4g PiA+ID4gPiArICogICAgYW5kIHNvbWUgcGFja2V0cyBoYXZlIGJlZW4gZnJlZWQuDQo+ID4gPiA+ ID4gPiArICogICAgLSBEb25lLCBleGl0DQo+ID4gPiA+ID4gPiArICogMikgSW50ZXJmYWNlcyBo YXMgbm90IHNlbnQgYSByaW5ncyB3b3J0aCBvZg0KPiA+ID4gPiA+ID4gKyAqICAgIHBhY2tldHMg eWV0LCBzbyB0aGUgc2VnbWVudCBhZnRlciB0YWlsIGlzDQo+ID4gPiA+ID4gPiArICogICAgc3Rp bGwgZW1wdHkuIE9yIGEgcHJldmlvdXMgY2FsbCB0byB0aGlzDQo+ID4gPiA+ID4gPiArICogICAg ZnVuY3Rpb24gZnJlZWQgc29tZSBvZiB0aGUgc2VnbWVudHMgYnV0DQo+ID4gPiA+ID4gPiArICog ICAgbm90IGFsbCBzbyB0aGVyZSBpcyBhIGhvbGUgaW4gdGhlIGxpc3QuDQo+ID4gPiA+ID4gPiAr ICogICAgSG9wZWZ1bGx5IHRoaXMgaXMgYSByYXJlIGNhc2UuDQo+ID4gPiA+ID4gPiArICogICAg LSBXYWxrIHRoZSBsaXN0IGFuZCBmaW5kIHRoZSBuZXh0IG1idWYuIElmDQo+ID4gPiA+ID4gPiAr ICogICAgICB0aGVyZSBpc24ndCBvbmUsIHRoZW4gZG9uZS4NCj4gPiA+ID4gPiA+ICsgKi8NCj4g PiA+ID4gPiA+ICtpZiAobGlrZWx5KHR4X2lkID09IHR4X2ZpcnN0ICYmIGNvdW50ICE9IDApKSBi cmVhazsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsvKg0KPiA+ID4gPiA+ID4gKyAqIFdh bGsgdGhlIGxpc3QgYW5kIGZpbmQgdGhlIG5leHQgbWJ1ZiwgaWYgYW55Lg0KPiA+ID4gPiA+ID4g KyAqLw0KPiA+ID4gPiA+ID4gK2RvIHsNCj4gPiA+ID4gPiA+ICsvKiBNb3ZlIHRvIG5leHQgc2Vn bWVudC4gKi8NCj4gPiA+ID4gPiA+ICt0eF9pZCA9IHN3X3JpbmdbdHhfaWRdLm5leHRfaWQ7DQo+ ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiAraWYgKHN3X3JpbmdbdHhfaWRdLm1idWYpDQo+ID4g PiA+ID4gPiArYnJlYWs7DQo+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArfSB3aGlsZSAodHhf aWQgIT0gdHhfZmlyc3QpOw0KPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gKy8qDQo+ID4gPiA+ ID4gPiArICogRGV0ZXJtaW5lIHdoeSBwcmV2aW91cyBsb29wIGJhaWxlZC4gSWYgdGhlcmUNCj4g PiA+ID4gPiA+ICsgKiBpcyBub3QgYW4gbWJ1ZiwgZG9uZS4NCj4gPiA+ID4gPiA+ICsgKi8NCj4g PiA+ID4gPiA+ICtpZiAoc3dfcmluZ1t0eF9pZF0ubWJ1ZiA9PSBOVUxMKSBicmVhazsgfSB9DQo+ ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiArcmV0dXJuIGNvdW50Ow0KPiA+ID4gPiA+ID4gK30N Cj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICBzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChj b2xkKSkNCj4gPiA+ID4gPiA+IGl4Z2JlX3R4X2ZyZWVfc3dyaW5nKHN0cnVjdCBpeGdiZV90eF9x dWV1ZSAqdHhxKSAgeyBkaWZmIC0tZ2l0DQo+ID4gPiA+ID4gPiBhL2RyaXZlcnMvbmV0L2l4Z2Jl L2l4Z2JlX3J4dHguaA0KPiA+ID4gPiA+ID4gYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9yeHR4 LmggaW5kZXggNTA1ZDM0NGI5Li4yYzM3NzBhZjYNCj4gPiA+ID4gPiA+IDEwMDY0NA0KPiA+ID4g PiA+ID4gLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcnh0eC5oDQo+ID4gPiA+ID4gPiAr KysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9yeHR4LmgNCj4gPiA+ID4gPiA+IEBAIC0yODUs NiArMjg1LDggQEAgaW50DQo+ID4gPiA+ID4gPiBpeGdiZV9yeF92ZWNfZGV2X2NvbmZfY29uZGl0 aW9uX2NoZWNrKHN0cnVjdA0KPiA+ID4gPiA+ID4gcnRlX2V0aF9kZXYgKmRldik7ICBpbnQgaXhn YmVfcnhxX3ZlY19zZXR1cChzdHJ1Y3QNCj4gPiA+ID4gPiA+IGl4Z2JlX3J4X3F1ZXVlICpyeHEp OyAgdm9pZA0KPiA+ID4gPiA+ID4gaXhnYmVfcnhfcXVldWVfcmVsZWFzZV9tYnVmc192ZWMoc3Ry dWN0DQo+ID4gPiA+ID4gPiBpeGdiZV9yeF9xdWV1ZSAqcnhxKTsNCj4gPiA+ID4gPiA+DQo+ID4g PiA+ID4gPiAraW50IGl4Z2JlX3R4X2RvbmVfY2xlYW51cCh2b2lkICp0eHEsIHVpbnQzMl90IGZy ZWVfY250KTsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICBleHRlcm4gY29uc3QgdWludDMy X3QgcHR5cGVfdGFibGVbSVhHQkVfUEFDS0VUX1RZUEVfTUFYXTsNCj4gPiA+ID4gPiA+ICBleHRl cm4gY29uc3QgdWludDMyX3QNCj4gPiA+ID4gPiA+IHB0eXBlX3RhYmxlX3RuW0lYR0JFX1BBQ0tF VF9UWVBFX1ROX01BWF07DQo+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gLS0NCj4gPiA+ID4gPiA+ IDIuMTcuMQ0KPiA+ID4gPiA+DQo+ID4gPiA+DQo+ID4gPg0KPiA+DQo+IA0KDQo=