From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by dpdk.org (Postfix) with ESMTP id 960828E62 for ; Fri, 2 Oct 2015 13:25:13 +0200 (CEST) Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga101.jf.intel.com with ESMTP; 02 Oct 2015 04:25:13 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,623,1437462000"; d="scan'208";a="572742485" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by FMSMGA003.fm.intel.com with ESMTP; 02 Oct 2015 04:25:12 -0700 Received: from fmsmsx151.amr.corp.intel.com (10.18.125.4) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.248.2; Fri, 2 Oct 2015 04:25:12 -0700 Received: from fmsmsx113.amr.corp.intel.com ([169.254.13.209]) by FMSMSX151.amr.corp.intel.com ([169.254.7.166]) with mapi id 14.03.0248.002; Fri, 2 Oct 2015 04:25:11 -0700 From: "Wiles, Keith" To: Ilya Maximets , "dev@dpdk.org" Thread-Topic: [Pktgen] [PATCH] pktgen_setup_packets: fix race for packet header Thread-Index: AQHQ6wr8YUPuXUhVNEy/CDq5JjuEuJ4/Xg2A///3BoCAAWUDgIAXzU4AgAAyn4A= Date: Fri, 2 Oct 2015 11:25:11 +0000 Message-ID: References: <1441808537-28739-1-git-send-email-i.maximets@samsung.com> <55F931CB.4030903@samsung.com> <55FA55BF.6000005@samsung.com> <560E4D2E.7080207@samsung.com> In-Reply-To: <560E4D2E.7080207@samsung.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.254.16.223] Content-Type: text/plain; charset="utf-8" Content-ID: <4B76CB5E91592E4AB6C5217B15663FE9@intel.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 Cc: Dyasly Sergey Subject: Re: [dpdk-dev] [Pktgen] [PATCH] pktgen_setup_packets: fix race for packet header 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: Fri, 02 Oct 2015 11:25:14 -0000 SSBsb29rZWQgYXQgdGhlIGNvZGUgYW5kIGV2ZXJ5dGhpbmcgbG9va3MgZ29vZC4gSSB3aWxsIHRy eSB0byBtZXJnZSB0aGUNCmNvZGUgbmV4dCB3ZWVrIGFzIEkgYW0gdHJhdmVsaW5nIGFnYWluIDot KA0KDQpUaGFua3MgZm9yIHRoZSBwYXRjaCwgSSBhbSBnbGFkIHlvdSBmb3VuZCB0aGlzIHByb2Js ZW0gYXMgSSBiZWxpZXZlDQpzb21lb25lIGVsc2UgcmVwb3J0ZWQgc29tZXRoaW5nIG9kZCBpbiB0 aGF0IGFyZWEsIGJ1dCB3YXMgbm90IGFibGUgdG8gZ2l2ZQ0KbWUgbWFueSBkZXRhaWxzLg0K4oCU IA0KUmVnYXJkcywNCisrS2VpdGggV2lsZXMNCg0KSW50ZWwgQ29ycG9yYXRpb24NCg0KDQoNCg0K T24gMTAvMi8xNSwgMTA6MjMgQU0sICJJbHlhIE1heGltZXRzIiA8aS5tYXhpbWV0c0BzYW1zdW5n LmNvbT4gd3JvdGU6DQoNCj5QaW5nLg0KPg0KPk9uIDE3LjA5LjIwMTUgMDg6NTUsIElseWEgTWF4 aW1ldHMgd3JvdGU6DQo+PiBPay4gVGhhbmsgeW91LiBJJ2xsIHdhaXQuDQo+PiANCj4+IE9uIDE2 LjA5LjIwMTUgMTg6MzcsIFdpbGVzLCBLZWl0aCB3cm90ZToNCj4+PiBUaGFua3MgdGhlIHBhdGNo IGxvb2tzIGZpbmUsIGJ1dCBJIGhhdmUgbm90IGhhZCBhIGxvdCBvZiB0aW1lIHRvDQo+Pj5yZXZp ZXcgaXQNCj4+PiBkZXRhaWwuIEkgaG9wZSB0byBnZXQgdG8gaXQgbmV4dCB3ZWVrIGFmdGVyIEkg cmV0dXJuIGJhY2sgaG9tZS4NCj4+Pg0KPj4+IE9uIDkvMTYvMTUsIDI6MDkgQU0sICJJbHlhIE1h eGltZXRzIiA8aS5tYXhpbWV0c0BzYW1zdW5nLmNvbT4gd3JvdGU6DQo+Pj4NCj4+Pj4gUGluZy4N Cj4+Pj4NCj4+Pj4gT24gMDkuMDkuMjAxNSAxNzoyMiwgSWx5YSBNYXhpbWV0cyB3cm90ZToNCj4+ Pj4+IFdoaWxlIHBrdGdlbl9zZXR1cF9wYWNrZXRzKCkgYWxsIHRocmVhZHMgb2Ygb25lIHBvcnQg dXNlcyBzYW1lDQo+Pj4+PiBpbmZvLT5zZXFfcGt0LiBUaGlzIGxlYWRzIHRvIGNvbnN0cnVjdGlu ZyBwYWNrZXRzIGluIHRoZSBzYW1lIG1lbW9yeQ0KPj4+Pj4gcmVnaW9uDQo+Pj4+PiAoJnBrdC0+ aGRyKS4gQXMgYSByZXN1bHQsIHBrdGdlbl9zZXR1cF9wYWNrZXRzIGdlbmVyYXRlcyByYW5kb20N Cj4+Pj4+aGVhZGVycy4NCj4+Pj4+DQo+Pj4+PiBGaXggdGhhdCBieSBtYWtpbmcgYSBsb2NhbCBj b3B5IG9mIGluZm8tPnNlcV9wa3QgYW5kIHVzaW5nIGl0IGZvcg0KPj4+Pj4gY29uc3RydWN0aW5n IG9mIHBhY2tldHMuDQo+Pj4+Pg0KPj4+Pj4gU2lnbmVkLW9mZi1ieTogSWx5YSBNYXhpbWV0cyA8 aS5tYXhpbWV0c0BzYW1zdW5nLmNvbT4NCj4+Pj4+IC0tLQ0KPj4+Pj4gIGFwcC9wa3RnZW4tYXJw LmMgIHwgIDIgKy0NCj4+Pj4+ICBhcHAvcGt0Z2VuLWNtZHMuYyB8IDQwICsrKysrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4+Pj4+ICBhcHAvcGt0Z2VuLWlwdjQuYyB8ICAy ICstDQo+Pj4+PiAgYXBwL3BrdGdlbi5jICAgICAgfCAzOSArKysrKysrKysrKysrKysrKysrKysr KysrKystLS0tLS0tLS0tLS0NCj4+Pj4+ICBhcHAvcGt0Z2VuLmggICAgICB8ICA0ICsrLS0NCj4+ Pj4+ICBhcHAvdC9wa3RnZW4udC5jICB8ICA2ICsrKy0tLQ0KPj4+Pj4gIDYgZmlsZXMgY2hhbmdl ZCwgNTQgaW5zZXJ0aW9ucygrKSwgMzkgZGVsZXRpb25zKC0pDQo+Pj4+Pg0KPj4+Pj4gZGlmZiAt LWdpdCBhL2FwcC9wa3RnZW4tYXJwLmMgYi9hcHAvcGt0Z2VuLWFycC5jDQo+Pj4+PiBpbmRleCBj Mzc4ODgwLi5iNzA0MGQ3IDEwMDY0NA0KPj4+Pj4gLS0tIGEvYXBwL3BrdGdlbi1hcnAuYw0KPj4+ Pj4gKysrIGIvYXBwL3BrdGdlbi1hcnAuYw0KPj4+Pj4gQEAgLTE5MCw3ICsxOTAsNyBAQCBwa3Rn ZW5fcHJvY2Vzc19hcnAoIHN0cnVjdCBydGVfbWJ1ZiAqIG0sIHVpbnQzMl90DQo+Pj4+PiBwaWQs IHVpbnQzMl90IHZsYW4gKQ0KPj4+Pj4gIA0KPj4+Pj4gIAkJCQlydGVfbWVtY3B5KCZwa3QtPmV0 aF9kc3RfYWRkciwgJmFycC0+c2hhLCA2KTsNCj4+Pj4+ICAJCQkJZm9yIChpID0gMDsgaSA8IGlu Zm8tPnNlcUNudDsgaSsrKQ0KPj4+Pj4gLQkJCQkJcGt0Z2VuX3BhY2tldF9jdG9yKGluZm8sIGks IC0xKTsNCj4+Pj4+ICsJCQkJCXBrdGdlbl9wYWNrZXRfY3RvcihpbmZvLCBpLCAtMSwgTlVMTCk7 DQo+Pj4+PiAgCQkJfQ0KPj4+Pj4gIA0KPj4+Pj4gIAkJCS8vIFN3YXAgdGhlIHR3byBNQUMgYWRk cmVzc2VzDQo+Pj4+PiBkaWZmIC0tZ2l0IGEvYXBwL3BrdGdlbi1jbWRzLmMgYi9hcHAvcGt0Z2Vu LWNtZHMuYw0KPj4+Pj4gaW5kZXggZGEwNDBlNS4uYTZhYmI0MSAxMDA2NDQNCj4+Pj4+IC0tLSBh L2FwcC9wa3RnZW4tY21kcy5jDQo+Pj4+PiArKysgYi9hcHAvcGt0Z2VuLWNtZHMuYw0KPj4+Pj4g QEAgLTkzMSw3ICs5MzEsNyBAQCBwa3RnZW5fc2V0X3Byb3RvKHBvcnRfaW5mb190ICogaW5mbywg Y2hhciB0eXBlKQ0KPj4+Pj4gIAlpZiAoIHR5cGUgPT0gJ2knICkNCj4+Pj4+ICAJCWluZm8tPnNl cV9wa3RbU0lOR0xFX1BLVF0uZXRoVHlwZSA9IEVUSEVSX1RZUEVfSVB2NDsNCj4+Pj4+ICANCj4+ Pj4+IC0JcGt0Z2VuX3BhY2tldF9jdG9yKGluZm8sIFNJTkdMRV9QS1QsIC0xKTsNCj4+Pj4+ICsJ cGt0Z2VuX3BhY2tldF9jdG9yKGluZm8sIFNJTkdMRV9QS1QsIC0xLCBOVUxMKTsNCj4+Pj4+ICB9 DQo+Pj4+PiAgDQo+Pj4+PiAgDQo+Pj4+PiANCj4+Pj4+LyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPj4+Pj4qKioN Cj4+Pj4+ICoqLy8qKg0KPj4+Pj4gQEAgLTEwNjcsNyArMTA2Nyw3IEBAIHBrdGdlbl9zZXRfcGt0 X3R5cGUocG9ydF9pbmZvX3QgKiBpbmZvLCBjb25zdA0KPj4+Pj4gY2hhciAqIHR5cGUpDQo+Pj4+ PiAgCQkJCQkJCQkJCSh0eXBlWzNdID09ICc2JykgPyBFVEhFUl9UWVBFX0lQdjYgOg0KPj4+Pj4g IAkJCQkJCQkJCQkvKiBUT0RPIHByaW50IGVycm9yOiB1bmtub3duIHR5cGUgKi8gRVRIRVJfVFlQ RV9JUHY0Ow0KPj4+Pj4gIA0KPj4+Pj4gLQlwa3RnZW5fcGFja2V0X2N0b3IoaW5mbywgU0lOR0xF X1BLVCwgLTEpOw0KPj4+Pj4gKwlwa3RnZW5fcGFja2V0X2N0b3IoaW5mbywgU0lOR0xFX1BLVCwg LTEsIE5VTEwpOw0KPj4+Pj4gIH0NCj4+Pj4+ICANCj4+Pj4+ICANCj4+Pj4+IA0KPj4+Pj4vKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqDQo+Pj4+PioqKg0KPj4+Pj4gKiovLyoqDQo+Pj4+PiBAQCAtMTA5Miw3ICsxMDky LDcgQEAgcGt0Z2VuX3NldF92bGFuKHBvcnRfaW5mb190ICogaW5mbywgdWludDMyX3QNCj4+Pj4+ IG9uT2ZmKQ0KPj4+Pj4gIAl9DQo+Pj4+PiAgCWVsc2UNCj4+Pj4+ICAJCXBrdGdlbl9jbHJfcG9y dF9mbGFncyhpbmZvLCBTRU5EX1ZMQU5fSUQpOw0KPj4+Pj4gLQlwa3RnZW5fcGFja2V0X2N0b3Io aW5mbywgU0lOR0xFX1BLVCwgLTEpOw0KPj4+Pj4gKwlwa3RnZW5fcGFja2V0X2N0b3IoaW5mbywg U0lOR0xFX1BLVCwgLTEsIE5VTEwpOw0KPj4+Pj4gIH0NCj4+Pj4+ICANCj4+Pj4+ICANCj4+Pj4+ IA0KPj4+Pj4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqDQo+Pj4+PioqKg0KPj4+Pj4gKiovLyoqDQo+Pj4+PiBAQCAt MTExMiw3ICsxMTEyLDcgQEAgcGt0Z2VuX3NldF92bGFuaWQocG9ydF9pbmZvX3QgKiBpbmZvLCB1 aW50MTZfdA0KPj4+Pj4gdmxhbmlkKQ0KPj4+Pj4gIHsNCj4+Pj4+ICAJaW5mby0+dmxhbmlkID0g dmxhbmlkOw0KPj4+Pj4gIAlpbmZvLT5zZXFfcGt0W1NJTkdMRV9QS1RdLnZsYW5pZCA9IGluZm8t PnZsYW5pZDsNCj4+Pj4+IC0JcGt0Z2VuX3BhY2tldF9jdG9yKGluZm8sIFNJTkdMRV9QS1QsIC0x KTsNCj4+Pj4+ICsJcGt0Z2VuX3BhY2tldF9jdG9yKGluZm8sIFNJTkdMRV9QS1QsIC0xLCBOVUxM KTsNCj4+Pj4+ICB9DQo+Pj4+PiAgDQo+Pj4+PiAgDQo+Pj4+PiANCj4+Pj4+LyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Kg0KPj4+Pj4qKioNCj4+Pj4+ICoqLy8qKg0KPj4+Pj4gQEAgLTExMzcsNyArMTEzNyw3IEBAIHBr dGdlbl9zZXRfbXBscyhwb3J0X2luZm9fdCAqIGluZm8sIHVpbnQzMl90DQo+Pj4+PiBvbk9mZikN Cj4+Pj4+ICAJfQ0KPj4+Pj4gIAllbHNlDQo+Pj4+PiAgCQlwa3RnZW5fY2xyX3BvcnRfZmxhZ3Mo aW5mbywgU0VORF9NUExTX0xBQkVMKTsNCj4+Pj4+IC0JcGt0Z2VuX3BhY2tldF9jdG9yKGluZm8s IFNJTkdMRV9QS1QsIC0xKTsNCj4+Pj4+ICsJcGt0Z2VuX3BhY2tldF9jdG9yKGluZm8sIFNJTkdM RV9QS1QsIC0xLCBOVUxMKTsNCj4+Pj4+ICB9DQo+Pj4+PiAgDQo+Pj4+PiAgDQo+Pj4+PiANCj4+ Pj4+LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKg0KPj4+Pj4qKioNCj4+Pj4+ICoqLy8qKg0KPj4+Pj4gQEAgLTExNTcs NyArMTE1Nyw3IEBAIHBrdGdlbl9zZXRfbXBsc19lbnRyeShwb3J0X2luZm9fdCAqIGluZm8sDQo+ Pj4+PiB1aW50MzJfdCBtcGxzX2VudHJ5KQ0KPj4+Pj4gIHsNCj4+Pj4+ICAJaW5mby0+bXBsc19l bnRyeSA9IG1wbHNfZW50cnk7DQo+Pj4+PiAgCWluZm8tPnNlcV9wa3RbU0lOR0xFX1BLVF0ubXBs c19lbnRyeSA9IGluZm8tPm1wbHNfZW50cnk7DQo+Pj4+PiAtCXBrdGdlbl9wYWNrZXRfY3Rvcihp bmZvLCBTSU5HTEVfUEtULCAtMSk7DQo+Pj4+PiArCXBrdGdlbl9wYWNrZXRfY3RvcihpbmZvLCBT SU5HTEVfUEtULCAtMSwgTlVMTCk7DQo+Pj4+PiAgfQ0KPj4+Pj4gIA0KPj4+Pj4gIA0KPj4+Pj4g DQo+Pj4+Pi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioNCj4+Pj4+KioqDQo+Pj4+PiAqKi8vKioNCj4+Pj4+IEBAIC0x MTgyLDcgKzExODIsNyBAQCBwa3RnZW5fc2V0X3FpbnEocG9ydF9pbmZvX3QgKiBpbmZvLCB1aW50 MzJfdA0KPj4+Pj4gb25PZmYpDQo+Pj4+PiAgCX0NCj4+Pj4+ICAJZWxzZQ0KPj4+Pj4gIAkJcGt0 Z2VuX2Nscl9wb3J0X2ZsYWdzKGluZm8sIFNFTkRfUV9JTl9RX0lEUyk7DQo+Pj4+PiAtCXBrdGdl bl9wYWNrZXRfY3RvcihpbmZvLCBTSU5HTEVfUEtULCAtMSk7DQo+Pj4+PiArCXBrdGdlbl9wYWNr ZXRfY3RvcihpbmZvLCBTSU5HTEVfUEtULCAtMSwgTlVMTCk7DQo+Pj4+PiAgfQ0KPj4+Pj4gIA0K Pj4+Pj4gIA0KPj4+Pj4gDQo+Pj4+Pi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4+Pj4+KioqDQo+Pj4+PiAqKi8v KioNCj4+Pj4+IEBAIC0xMjA0LDcgKzEyMDQsNyBAQCBwa3RnZW5fc2V0X3FpbnFpZHMocG9ydF9p bmZvX3QgKiBpbmZvLCB1aW50MTZfdA0KPj4+Pj4gb3V0ZXJpZCwgdWludDE2X3QgaW5uZXJpZCkN Cj4+Pj4+ICAJaW5mby0+c2VxX3BrdFtTSU5HTEVfUEtUXS5xaW5xX291dGVyaWQgPSBpbmZvLT5x aW5xX291dGVyaWQ7DQo+Pj4+PiAgCWluZm8tPnFpbnFfaW5uZXJpZCA9IGlubmVyaWQ7DQo+Pj4+ PiAgCWluZm8tPnNlcV9wa3RbU0lOR0xFX1BLVF0ucWlucV9pbm5lcmlkID0gaW5mby0+cWlucV9p bm5lcmlkOw0KPj4+Pj4gLQlwa3RnZW5fcGFja2V0X2N0b3IoaW5mbywgU0lOR0xFX1BLVCwgLTEp Ow0KPj4+Pj4gKwlwa3RnZW5fcGFja2V0X2N0b3IoaW5mbywgU0lOR0xFX1BLVCwgLTEsIE5VTEwp Ow0KPj4+Pj4gIH0NCj4+Pj4+ICANCj4+Pj4+ICANCj4+Pj4+IA0KPj4+Pj4vKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq DQo+Pj4+PioqKg0KPj4+Pj4gKiovLyoqDQo+Pj4+PiBAQCAtMTIyOCw3ICsxMjI4LDcgQEAgcGt0 Z2VuX3NldF9ncmUocG9ydF9pbmZvX3QgKiBpbmZvLCB1aW50MzJfdA0KPj4+Pj5vbk9mZikNCj4+ Pj4+ICAJfQ0KPj4+Pj4gIAllbHNlDQo+Pj4+PiAgCQlwa3RnZW5fY2xyX3BvcnRfZmxhZ3MoaW5m bywgU0VORF9HUkVfSVB2NF9IRUFERVIpOw0KPj4+Pj4gLQlwa3RnZW5fcGFja2V0X2N0b3IoaW5m bywgU0lOR0xFX1BLVCwgLTEpOw0KPj4+Pj4gKwlwa3RnZW5fcGFja2V0X2N0b3IoaW5mbywgU0lO R0xFX1BLVCwgLTEsIE5VTEwpOw0KPj4+Pj4gIH0NCj4+Pj4+ICANCj4+Pj4+ICANCj4+Pj4+IA0K Pj4+Pj4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqDQo+Pj4+PioqKg0KPj4+Pj4gKiovLyoqDQo+Pj4+PiBAQCAtMTI1 Miw3ICsxMjUyLDcgQEAgcGt0Z2VuX3NldF9ncmVfZXRoKHBvcnRfaW5mb190ICogaW5mbywgdWlu dDMyX3QNCj4+Pj4+IG9uT2ZmKQ0KPj4+Pj4gIAl9DQo+Pj4+PiAgCWVsc2UNCj4+Pj4+ICAJCXBr dGdlbl9jbHJfcG9ydF9mbGFncyhpbmZvLCBTRU5EX0dSRV9FVEhFUl9IRUFERVIpOw0KPj4+Pj4g LQlwa3RnZW5fcGFja2V0X2N0b3IoaW5mbywgU0lOR0xFX1BLVCwgLTEpOw0KPj4+Pj4gKwlwa3Rn ZW5fcGFja2V0X2N0b3IoaW5mbywgU0lOR0xFX1BLVCwgLTEsIE5VTEwpOw0KPj4+Pj4gIH0NCj4+ Pj4+ICANCj4+Pj4+ICANCj4+Pj4+IA0KPj4+Pj4vKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+Pj4+PioqKg0KPj4+ Pj4gKiovLyoqDQo+Pj4+PiBAQCAtMTI3Miw3ICsxMjcyLDcgQEAgcGt0Z2VuX3NldF9ncmVfa2V5 KHBvcnRfaW5mb190ICogaW5mbywgdWludDMyX3QNCj4+Pj4+IGdyZV9rZXkpDQo+Pj4+PiAgew0K Pj4+Pj4gIAlpbmZvLT5ncmVfa2V5ID0gZ3JlX2tleTsNCj4+Pj4+ICAJaW5mby0+c2VxX3BrdFtT SU5HTEVfUEtUXS5ncmVfa2V5ID0gaW5mby0+Z3JlX2tleTsNCj4+Pj4+IC0JcGt0Z2VuX3BhY2tl dF9jdG9yKGluZm8sIFNJTkdMRV9QS1QsIC0xKTsNCj4+Pj4+ICsJcGt0Z2VuX3BhY2tldF9jdG9y KGluZm8sIFNJTkdMRV9QS1QsIC0xLCBOVUxMKTsNCj4+Pj4+ICB9DQo+Pj4+PiAgDQo+Pj4+PiAg DQo+Pj4+PiANCj4+Pj4+LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPj4+Pj4qKioNCj4+Pj4+ICoqLy8qKg0KPj4+ Pj4gQEAgLTE0MDEsNyArMTQwMSw3IEBAIHZvaWQgcGt0Z2VuX3BvcnRfZGVmYXVsdHModWludDMy X3QgcGlkLCB1aW50OF90DQo+Pj4+PiBzZXEpDQo+Pj4+PiAgCQltZW1zZXQoJnBrdC0+ZXRoX2Rz dF9hZGRyLCAwLCBzaXplb2YgKHBrdC0+ZXRoX2RzdF9hZGRyKSk7DQo+Pj4+PiAgDQo+Pj4+PiAg DQo+Pj4+PiAtCXBrdGdlbl9wYWNrZXRfY3RvcihpbmZvLCBzZXEsIC0xKTsNCj4+Pj4+ICsJcGt0 Z2VuX3BhY2tldF9jdG9yKGluZm8sIHNlcSwgLTEsIE5VTEwpOw0KPj4+Pj4gIA0KPj4+Pj4gICAg ICBwa3RnZW4uZmxhZ3MJfD0gUFJJTlRfTEFCRUxTX0ZMQUc7DQo+Pj4+PiAgfQ0KPj4+Pj4gQEAg LTE0MjMsNyArMTQyMyw3IEBAIHZvaWQgcGt0Z2VuX3Bpbmc0KHBvcnRfaW5mb190ICogaW5mbykN Cj4+Pj4+ICAJbWVtY3B5KCZpbmZvLT5zZXFfcGt0W1BJTkdfUEtUXSwNCj4+Pj4+ICAJCSAgICZp bmZvLT5zZXFfcGt0W1NJTkdMRV9QS1RdLCBzaXplb2YocGt0X3NlcV90KSk7DQo+Pj4+PiAgCWlu Zm8tPnNlcV9wa3RbUElOR19QS1RdLmlwUHJvdG8gPSBQR19JUFBST1RPX0lDTVA7DQo+Pj4+PiAt CXBrdGdlbl9wYWNrZXRfY3RvcihpbmZvLCBQSU5HX1BLVCwgSUNNUDRfRUNITyk7DQo+Pj4+PiAr CXBrdGdlbl9wYWNrZXRfY3RvcihpbmZvLCBQSU5HX1BLVCwgSUNNUDRfRUNITywgTlVMTCk7DQo+ Pj4+PiAgCXBrdGdlbl9zZXRfcG9ydF9mbGFncyhpbmZvLCBTRU5EX1BJTkc0X1JFUVVFU1QpOw0K Pj4+Pj4gIH0NCj4+Pj4+ICANCj4+Pj4+IEBAIC0xNDQ1LDcgKzE0NDUsNyBAQCB2b2lkIHBrdGdl bl9waW5nNihwb3J0X2luZm9fdCAqIGluZm8pDQo+Pj4+PiAgCW1lbWNweSgmaW5mby0+cGt0W1BJ TkdfUEtUXSwNCj4+Pj4+ICAJCSAgICZpbmZvLT5wa3RbU0lOR0xFX1BLVF0sIHNpemVvZihwa3Rf c2VxX3QpKTsNCj4+Pj4+ICAJaW5mby0+cGt0W1BJTkdfUEtUXS5pcFByb3RvID0gUEdfSVBQUk9U T19JQ01QOw0KPj4+Pj4gLQlwa3RnZW5fcGFja2V0X2N0b3IoaW5mbywgUElOR19QS1QsIElDTVA2 X0VDSE8pOw0KPj4+Pj4gKwlwa3RnZW5fcGFja2V0X2N0b3IoaW5mbywgUElOR19QS1QsIElDTVA2 X0VDSE8sIE5VTEwpOw0KPj4+Pj4gIAlwa3RnZW5fc2V0X3BvcnRfZmxhZ3MoaW5mbywgU0VORF9Q SU5HNl9SRVFVRVNUKTsNCj4+Pj4+ICB9DQo+Pj4+PiAgI2VuZGlmDQo+Pj4+PiBAQCAtMTY0NSw3 ICsxNjQ1LDcgQEAgdm9pZCBwa3RnZW5fc2V0X3BrdF9zaXplKHBvcnRfaW5mb190ICogaW5mbywN Cj4+Pj4+IHVpbnQzMl90IHNpemUpDQo+Pj4+PiAgCWVsc2UgaWYgKCAoc2l6ZSAtIEZDU19TSVpF KSA+IE1BWF9QS1RfU0laRSkNCj4+Pj4+ICAJCXNpemUgPSBNQVhfUEtUX1NJWkUgKyBGQ1NfU0la RTsNCj4+Pj4+ICAJaW5mby0+c2VxX3BrdFtTSU5HTEVfUEtUXS5wa3RTaXplID0gKHNpemUgLSBG Q1NfU0laRSk7DQo+Pj4+PiAtCXBrdGdlbl9wYWNrZXRfY3RvcihpbmZvLCBTSU5HTEVfUEtULCAt MSk7DQo+Pj4+PiArCXBrdGdlbl9wYWNrZXRfY3RvcihpbmZvLCBTSU5HTEVfUEtULCAtMSwgTlVM TCk7DQo+Pj4+PiAgCXBrdGdlbl9wYWNrZXRfcmF0ZShpbmZvKTsNCj4+Pj4+ICB9DQo+Pj4+PiAg DQo+Pj4+PiBAQCAtMTY2Nyw3ICsxNjY3LDcgQEAgdm9pZCBwa3RnZW5fc2V0X3BvcnRfdmFsdWUo cG9ydF9pbmZvX3QgKiBpbmZvLA0KPj4+Pj4gY2hhciB0eXBlLCB1aW50MzJfdCBwb3J0VmFsdWUp DQo+Pj4+PiAgCQlpbmZvLT5zZXFfcGt0W1NJTkdMRV9QS1RdLmRwb3J0ID0gKHVpbnQxNl90KXBv cnRWYWx1ZTsNCj4+Pj4+ICAJZWxzZQ0KPj4+Pj4gIAkJaW5mby0+c2VxX3BrdFtTSU5HTEVfUEtU XS5zcG9ydCA9ICh1aW50MTZfdClwb3J0VmFsdWU7DQo+Pj4+PiAtCXBrdGdlbl9wYWNrZXRfY3Rv cihpbmZvLCBTSU5HTEVfUEtULCAtMSk7DQo+Pj4+PiArCXBrdGdlbl9wYWNrZXRfY3RvcihpbmZv LCBTSU5HTEVfUEtULCAtMSwgTlVMTCk7DQo+Pj4+PiAgfQ0KPj4+Pj4gIA0KPj4+Pj4gIA0KPj4+ Pj4gDQo+Pj4+Pi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioNCj4+Pj4+KioqDQo+Pj4+PiAqKi8vKioNCj4+Pj4+IEBA IC0xNzExLDcgKzE3MTEsNyBAQCB2b2lkIHBrdGdlbl9zZXRfaXBhZGRyKHBvcnRfaW5mb190ICog aW5mbywgY2hhcg0KPj4+Pj4gdHlwZSwgY21kbGluZV9pcGFkZHJfdCAqIGlwKQ0KPj4+Pj4gIAkJ aW5mby0+c2VxX3BrdFtTSU5HTEVfUEtUXS5pcF9zcmNfYWRkciA9DQo+Pj4+Pm50b2hsKGlwLT5h ZGRyLmlwdjQuc19hZGRyKTsNCj4+Pj4+ICAJfSBlbHNlDQo+Pj4+PiAgCQlpbmZvLT5zZXFfcGt0 W1NJTkdMRV9QS1RdLmlwX2RzdF9hZGRyID0NCj4+Pj4+bnRvaGwoaXAtPmFkZHIuaXB2NC5zX2Fk ZHIpOw0KPj4+Pj4gLQlwa3RnZW5fcGFja2V0X2N0b3IoaW5mbywgU0lOR0xFX1BLVCwgLTEpOw0K Pj4+Pj4gKwlwa3RnZW5fcGFja2V0X2N0b3IoaW5mbywgU0lOR0xFX1BLVCwgLTEsIE5VTEwpOw0K Pj4+Pj4gIH0NCj4+Pj4+ICANCj4+Pj4+ICANCj4+Pj4+IA0KPj4+Pj4vKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ Pj4+PioqKg0KPj4+Pj4gKiovLyoqDQo+Pj4+PiBAQCAtMTcyOSw3ICsxNzI5LDcgQEAgdm9pZCBw a3RnZW5fc2V0X2lwYWRkcihwb3J0X2luZm9fdCAqIGluZm8sIGNoYXINCj4+Pj4+IHR5cGUsIGNt ZGxpbmVfaXBhZGRyX3QgKiBpcCkNCj4+Pj4+ICB2b2lkIHBrdGdlbl9zZXRfZHN0X21hYyhwb3J0 X2luZm9fdCAqIGluZm8sIGNtZGxpbmVfZXRoZXJhZGRyX3QgKg0KPj4+Pj5tYWMpDQo+Pj4+PiAg ew0KPj4+Pj4gIAltZW1jcHkoJmluZm8tPnNlcV9wa3RbU0lOR0xFX1BLVF0uZXRoX2RzdF9hZGRy LCBtYWMtPm1hYywgNik7DQo+Pj4+PiAtCXBrdGdlbl9wYWNrZXRfY3RvcihpbmZvLCBTSU5HTEVf UEtULCAtMSk7DQo+Pj4+PiArCXBrdGdlbl9wYWNrZXRfY3RvcihpbmZvLCBTSU5HTEVfUEtULCAt MSwgTlVMTCk7DQo+Pj4+PiAgfQ0KPj4+Pj4gIA0KPj4+Pj4gIA0KPj4+Pj4gDQo+Pj4+Pi8qKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioNCj4+Pj4+KioqDQo+Pj4+PiAqKi8vKioNCj4+Pj4+IEBAIC0yMTExLDcgKzIxMTEs NyBAQCB2b2lkIHBrdGdlbl9zZXRfc2VxKHBvcnRfaW5mb190ICogaW5mbywNCj4+Pj4+dWludDMy X3QNCj4+Pj4+IHNlcW51bSwNCj4+Pj4+ICAJCXR5cGUgPSAnNCc7DQo+Pj4+PiAgCXBrdC0+ZXRo VHlwZQkJPSAodHlwZSA9PSAnNicpPyBFVEhFUl9UWVBFX0lQdjYgOiBFVEhFUl9UWVBFX0lQdjQ7 DQo+Pj4+PiAgCXBrdC0+dmxhbmlkCQkJPSB2bGFuaWQ7DQo+Pj4+PiAtCXBrdGdlbl9wYWNrZXRf Y3RvcihpbmZvLCBzZXFudW0sIC0xKTsNCj4+Pj4+ICsJcGt0Z2VuX3BhY2tldF9jdG9yKGluZm8s IHNlcW51bSwgLTEsIE5VTEwpOw0KPj4+Pj4gIH0NCj4+Pj4+ICANCj4+Pj4+ICANCj4+Pj4+IA0K Pj4+Pj4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqDQo+Pj4+PioqKg0KPj4+Pj4gKiovLyoqDQo+Pj4+PiBAQCAtMjE1 Niw3ICsyMTU2LDcgQEAgdm9pZCBwa3RnZW5fY29tcGlsZV9wa3QocG9ydF9pbmZvX3QgKiBpbmZv LA0KPj4+Pj4gdWludDMyX3Qgc2VxbnVtLA0KPj4+Pj4gIAkJCQkJCSAgKHR5cGUgPT0gJzYnKT8g RVRIRVJfVFlQRV9JUHY2IDoNCj4+Pj4+ICAJCQkJCQkgICh0eXBlID09ICduJyk/IEVUSEVSX1RZ UEVfVkxBTiA6IEVUSEVSX1RZUEVfSVB2NDsNCj4+Pj4+ICAJcGt0LT52bGFuaWQJCQk9IHZsYW5p ZDsNCj4+Pj4+IC0JcGt0Z2VuX3BhY2tldF9jdG9yKGluZm8sIHNlcW51bSwgLTEpOw0KPj4+Pj4g Kwlwa3RnZW5fcGFja2V0X2N0b3IoaW5mbywgc2VxbnVtLCAtMSwgTlVMTCk7DQo+Pj4+PiAgfQ0K Pj4+Pj4gIA0KPj4+Pj4gIA0KPj4+Pj4gDQo+Pj4+Pi8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4+Pj4+KioqDQo+ Pj4+PiAqKi8vKioNCj4+Pj4+IGRpZmYgLS1naXQgYS9hcHAvcGt0Z2VuLWlwdjQuYyBiL2FwcC9w a3RnZW4taXB2NC5jDQo+Pj4+PiBpbmRleCA3ODEzYzM2Li5hOGI2YmUyIDEwMDY0NA0KPj4+Pj4g LS0tIGEvYXBwL3BrdGdlbi1pcHY0LmMNCj4+Pj4+ICsrKyBiL2FwcC9wa3RnZW4taXB2NC5jDQo+ Pj4+PiBAQCAtMTM4LDcgKzEzOCw3IEBAIHBrdGdlbl9zZW5kX3Bpbmc0KCB1aW50MzJfdCBwaWQs IHVpbnQ4X3Qgc2VxX2lkeA0KPj4+Pj4pDQo+Pj4+PiAgICAgICAgICByZXR1cm47DQo+Pj4+PiAg ICAgIH0NCj4+Pj4+ICAJKnBwa3QgPSAqc3BrdDsJCS8vIENvcHkgdGhlIHNlcXVlbmNlIHNldHVw IHRvIHRoZSBwaW5nIHNldHVwLg0KPj4+Pj4gLSAgICBwa3RnZW5fcGFja2V0X2N0b3IoaW5mbywg UElOR19QS1QsIElDTVA0X0VDSE8pOw0KPj4+Pj4gKyAgICBwa3RnZW5fcGFja2V0X2N0b3IoaW5m bywgUElOR19QS1QsIElDTVA0X0VDSE8sIE5VTEwpOw0KPj4+Pj4gIAlydGVfbWVtY3B5KCh1aW50 OF90ICopbS0+YnVmX2FkZHIgKyBtLT5kYXRhX29mZiwgKHVpbnQ4X3QNCj4+Pj4+ICopJnBwa3Qt PmhkciwgcHBrdC0+cGt0U2l6ZSk7DQo+Pj4+PiAgDQo+Pj4+PiAgICAgIG0tPnBrdF9sZW4gID0g cHBrdC0+cGt0U2l6ZTsNCj4+Pj4+IGRpZmYgLS1naXQgYS9hcHAvcGt0Z2VuLmMgYi9hcHAvcGt0 Z2VuLmMNCj4+Pj4+IGluZGV4IDJkY2RiZmQuLmVjZDQ1NjAgMTAwNjQ0DQo+Pj4+PiAtLS0gYS9h cHAvcGt0Z2VuLmMNCj4+Pj4+ICsrKyBiL2FwcC9wa3RnZW4uYw0KPj4+Pj4gQEAgLTQwMSw4ICs0 MDEsOCBAQCBzdGF0aWMgX19pbmxpbmVfXyBpbnQgcGt0Z2VuX2hhc193b3JrKHZvaWQpIHsNCj4+ Pj4+ICAqLw0KPj4+Pj4gIA0KPj4+Pj4gIHZvaWQNCj4+Pj4+IC1wa3RnZW5fcGFja2V0X2N0b3Io cG9ydF9pbmZvX3QgKiBpbmZvLCBpbnQzMl90IHNlcV9pZHgsIGludDMyX3QNCj4+Pj4+dHlwZSkg ew0KPj4+Pj4gLQlwa3Rfc2VxX3QJCSAgKiBwa3QgPSAmaW5mby0+c2VxX3BrdFtzZXFfaWR4XTsN Cj4+Pj4+ICtwa3RnZW5fcGFja2V0X2N0b3IocG9ydF9pbmZvX3QgKiBpbmZvLCBpbnQzMl90IHNl cV9pZHgsIGludDMyX3QNCj4+Pj4+dHlwZSwNCj4+Pj4+IHBrdF9zZXFfdCAqIHNlcV9wa3QpIHsN Cj4+Pj4+ICsJcGt0X3NlcV90CQkgICogcGt0ID0gKHNlcV9wa3QgPT0gTlVMTCkgPyAmaW5mby0+ c2VxX3BrdFtzZXFfaWR4XSA6DQo+Pj4+PiAmc2VxX3BrdFtzZXFfaWR4XTsNCj4+Pj4+ICAJc3Ry dWN0IGV0aGVyX2hkciAgKiBldGggPSAoc3RydWN0IGV0aGVyX2hkciAqKSZwa3QtPmhkci5ldGg7 DQo+Pj4+PiAgCXVpbnQxNl90CQkJdGxlbjsNCj4+Pj4+ICANCj4+Pj4+IEBAIC04MTIsMjIgKzgx MiwzNSBAQCBzdGF0aWMgX19pbmxpbmVfXyB2b2lkDQo+Pj4+PiAgcGt0Z2VuX3NldHVwX3BhY2tl dHMocG9ydF9pbmZvX3QgKiBpbmZvLCBzdHJ1Y3QgcnRlX21lbXBvb2wgKiBtcCwNCj4+Pj4+IHVp bnQxNl90IHFpZCkNCj4+Pj4+ICB7DQo+Pj4+PiAgCXN0cnVjdCBydGVfbWJ1ZgkqIG0sICogbW07 DQo+Pj4+PiAtCXBrdF9zZXFfdCAqIHBrdDsNCj4+Pj4+ICsJcGt0X3NlcV90ICogcGt0LCAqIHNl cV9wa3QgPSBOVUxMOw0KPj4+Pj4gKwl1aW50MTZfdCBzZXFJZHg7DQo+Pj4+PiArCWNoYXIgYnVm ZltSVEVfTUVNWk9ORV9OQU1FU0laRV07DQo+Pj4+PiAgDQo+Pj4+PiAgCXBrdGdlbl9jbHJfcV9m bGFncyhpbmZvLCBxaWQsIENMRUFSX0ZBU1RfQUxMT0NfRkxBRyk7DQo+Pj4+PiAgDQo+Pj4+PiAg CWlmICggbXAgPT0gaW5mby0+cVtxaWRdLnBjYXBfbXAgKQ0KPj4+Pj4gIAkJcmV0dXJuOw0KPj4+ Pj4gIA0KPj4+Pj4gKwlzbnByaW50ZihidWZmLCBzaXplb2YoYnVmZiksICJ0bXBfc2VxX3BrdF8l ZF8lZCIsIGluZm8tPnBpZCwgcWlkKTsNCj4+Pj4+ICsJc2VxX3BrdCA9IChwa3Rfc2VxX3QgKily dGVfem1hbGxvYyhidWZmLA0KPj4+Pj4gKwkJCQkoc2l6ZW9mKHBrdF9zZXFfdCkgKiBOVU1fVE9U QUxfUEtUUyksIFJURV9DQUNIRV9MSU5FX1NJWkUpOw0KPj4+Pj4gKwlpZiAoc2VxX3BrdCA9PSBO VUxMKQ0KPj4+Pj4gKwkJcGt0Z2VuX2xvZ19wYW5pYygiVW5hYmxlIHRvIGFsbG9jYXRlICVkIHBr dF9zZXFfdCBoZWFkZXJzIiwNCj4+Pj4+ICsJCQkJCQkgTlVNX1RPVEFMX1BLVFMpOw0KPj4+Pj4g KwkvKiBDb3B5IGdsb2JhbCBjb25maWd1cmF0aW9uIHRvIGNvbnN0cnVjdCBuZXcgcGFja2V0cyBs b2NhbGx5ICovDQo+Pj4+PiArCXJ0ZV9tZW1jcHkoKHVpbnQ4X3QgKilzZXFfcGt0LCAodWludDhf dCAqKWluZm8tPnNlcV9wa3QsDQo+Pj4+PiArCQkJICAgc2l6ZW9mKHBrdF9zZXFfdCkgKiBOVU1f VE9UQUxfUEtUUyk7DQo+Pj4+PiArCXNlcUlkeCA9IGluZm8tPnNlcUlkeDsNCj4+Pj4+ICsNCj4+ Pj4+ICAJbW0JPSBOVUxMOw0KPj4+Pj4gIAlwa3QgPSBOVUxMOw0KPj4+Pj4gIA0KPj4+Pj4gIAlp ZiAoIG1wID09IGluZm8tPnFbcWlkXS50eF9tcCApDQo+Pj4+PiAtCQlwa3QgPSAmaW5mby0+c2Vx X3BrdFtTSU5HTEVfUEtUXTsNCj4+Pj4+ICsJCXBrdCA9ICZzZXFfcGt0W1NJTkdMRV9QS1RdOw0K Pj4+Pj4gIAllbHNlIGlmICggbXAgPT0gaW5mby0+cVtxaWRdLnJhbmdlX21wICkNCj4+Pj4+IC0J CXBrdCA9ICZpbmZvLT5zZXFfcGt0W1JBTkdFX1BLVF07DQo+Pj4+PiArCQlwa3QgPSAmc2VxX3Br dFtSQU5HRV9QS1RdOw0KPj4+Pj4gIAllbHNlIGlmICggbXAgPT0gaW5mby0+cVtxaWRdLnNlcV9t cCApDQo+Pj4+PiAtCQlwa3QgPSAmaW5mby0+c2VxX3BrdFtpbmZvLT5zZXFJZHhdOw0KPj4+Pj4g KwkJcGt0ID0gJnNlcV9wa3Rbc2VxSWR4XTsNCj4+Pj4+ICANCj4+Pj4+ICAJLy8gYWxsb2NhdGUg ZWFjaCBtYnVmIGFuZCBwdXQgdGhlbSBvbiBhIGxpc3QgdG8gYmUgZnJlZWQuDQo+Pj4+PiAgCWZv cig7Oykgew0KPj4+Pj4gQEAgLTg0MCw3ICs4NTMsNyBAQCBwa3RnZW5fc2V0dXBfcGFja2V0cyhw b3J0X2luZm9fdCAqIGluZm8sIHN0cnVjdA0KPj4+Pj4gcnRlX21lbXBvb2wgKiBtcCwgdWludDE2 X3QgcWlkKQ0KPj4+Pj4gIAkJbW0gPSBtOw0KPj4+Pj4gIA0KPj4+Pj4gIAkJaWYgKCBtcCA9PSBp bmZvLT5xW3FpZF0udHhfbXAgKSB7DQo+Pj4+PiAtCQkJcGt0Z2VuX3BhY2tldF9jdG9yKGluZm8s IFNJTkdMRV9QS1QsIC0xKTsNCj4+Pj4+ICsJCQlwa3RnZW5fcGFja2V0X2N0b3IoaW5mbywgU0lO R0xFX1BLVCwgLTEsIHNlcV9wa3QpOw0KPj4+Pj4gIA0KPj4+Pj4gIAkJCXJ0ZV9tZW1jcHkoKHVp bnQ4X3QgKiltLT5idWZfYWRkciArIG0tPmRhdGFfb2ZmLCAodWludDhfdA0KPj4+Pj4gKikmcGt0 LT5oZHIsIE1BWF9QS1RfU0laRSk7DQo+Pj4+PiAgDQo+Pj4+PiBAQCAtODQ4LDE2ICs4NjEsMTYg QEAgcGt0Z2VuX3NldHVwX3BhY2tldHMocG9ydF9pbmZvX3QgKiBpbmZvLCBzdHJ1Y3QNCj4+Pj4+ IHJ0ZV9tZW1wb29sICogbXAsIHVpbnQxNl90IHFpZCkNCj4+Pj4+ICAJCQltLT5kYXRhX2xlbiA9 IHBrdC0+cGt0U2l6ZTsNCj4+Pj4+ICAJCX0gZWxzZSBpZiAoIG1wID09IGluZm8tPnFbcWlkXS5y YW5nZV9tcCApIHsNCj4+Pj4+ICAJCQlwa3RnZW5fcmFuZ2VfY3RvcigmaW5mby0+cmFuZ2UsIHBr dCk7DQo+Pj4+PiAtCQkJcGt0Z2VuX3BhY2tldF9jdG9yKGluZm8sIFJBTkdFX1BLVCwgLTEpOw0K Pj4+Pj4gKwkJCXBrdGdlbl9wYWNrZXRfY3RvcihpbmZvLCBSQU5HRV9QS1QsIC0xLCBzZXFfcGt0 KTsNCj4+Pj4+ICANCj4+Pj4+ICAJCQlydGVfbWVtY3B5KCh1aW50OF90ICopbS0+YnVmX2FkZHIg KyBtLT5kYXRhX29mZiwgKHVpbnQ4X3QNCj4+Pj4+ICopJnBrdC0+aGRyLCBNQVhfUEtUX1NJWkUp Ow0KPj4+Pj4gIA0KPj4+Pj4gIAkJCW0tPnBrdF9sZW4gID0gcGt0LT5wa3RTaXplOw0KPj4+Pj4g IAkJCW0tPmRhdGFfbGVuID0gcGt0LT5wa3RTaXplOw0KPj4+Pj4gIAkJfSBlbHNlIGlmICggbXAg PT0gaW5mby0+cVtxaWRdLnNlcV9tcCApIHsNCj4+Pj4+IC0JCQlwa3RnZW5fcGFja2V0X2N0b3Io aW5mbywgaW5mby0+c2VxSWR4KyssIC0xKTsNCj4+Pj4+IC0JCQlpZiAoIHVubGlrZWx5KGluZm8t PnNlcUlkeCA+PSBpbmZvLT5zZXFDbnQpICkNCj4+Pj4+IC0JCQkJaW5mby0+c2VxSWR4ID0gMDsN Cj4+Pj4+ICsJCQlwa3RnZW5fcGFja2V0X2N0b3IoaW5mbywgc2VxSWR4KyssIC0xLCBzZXFfcGt0 KTsNCj4+Pj4+ICsJCQlpZiAoIHVubGlrZWx5KHNlcUlkeCA+PSBpbmZvLT5zZXFDbnQpICkNCj4+ Pj4+ICsJCQkJc2VxSWR4ID0gMDsNCj4+Pj4+ICANCj4+Pj4+ICAJCQlydGVfbWVtY3B5KCh1aW50 OF90ICopbS0+YnVmX2FkZHIgKyBtLT5kYXRhX29mZiwgKHVpbnQ4X3QNCj4+Pj4+ICopJnBrdC0+ aGRyLCBNQVhfUEtUX1NJWkUpOw0KPj4+Pj4gIA0KPj4+Pj4gQEAgLTg2NSwxMiArODc4LDE0IEBA IHBrdGdlbl9zZXR1cF9wYWNrZXRzKHBvcnRfaW5mb190ICogaW5mbywgc3RydWN0DQo+Pj4+PiBy dGVfbWVtcG9vbCAqIG1wLCB1aW50MTZfdCBxaWQpDQo+Pj4+PiAgCQkJbS0+ZGF0YV9sZW4gPSBw a3QtPnBrdFNpemU7DQo+Pj4+PiAgDQo+Pj4+PiAgCQkJLy8gbW92ZSB0byB0aGUgbmV4dCBwYWNr ZXQgaW4gdGhlIHNlcXVlbmNlLg0KPj4+Pj4gLQkJCXBrdCA9ICZpbmZvLT5zZXFfcGt0W2luZm8t PnNlcUlkeF07DQo+Pj4+PiArCQkJcGt0ID0gJnNlcV9wa3Rbc2VxSWR4XTsNCj4+Pj4+ICAJCX0N Cj4+Pj4+ICAJfQ0KPj4+Pj4gIA0KPj4+Pj4gIAlpZiAoIG1tICE9IE5VTEwgKQ0KPj4+Pj4gIAkJ cnRlX3BrdG1idWZfZnJlZShtbSk7DQo+Pj4+PiArDQo+Pj4+PiArCXJ0ZV9mcmVlKHNlcV9wa3Qp Ow0KPj4+Pj4gIH0NCj4+Pj4+ICANCj4+Pj4+ICANCj4+Pj4+IA0KPj4+Pj4vKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq DQo+Pj4+PioqKg0KPj4+Pj4gKiovLyoqDQo+Pj4+PiBkaWZmIC0tZ2l0IGEvYXBwL3BrdGdlbi5o IGIvYXBwL3BrdGdlbi5oDQo+Pj4+PiBpbmRleCAyYzVjOThjLi5mM2Y3NmYyIDEwMDY0NA0KPj4+ Pj4gLS0tIGEvYXBwL3BrdGdlbi5oDQo+Pj4+PiArKysgYi9hcHAvcGt0Z2VuLmgNCj4+Pj4+IEBA IC0xNTEsNyArMTUxLDcgQEANCj4+Pj4+ICAjaW5jbHVkZSAicGt0Z2VuLXBvcnQtY2ZnLmgiDQo+ Pj4+PiAgI2luY2x1ZGUgInBrdGdlbi1jYXB0dXJlLmgiDQo+Pj4+PiAgI2luY2x1ZGUgInBrdGdl bi1sb2cuaCINCj4+Pj4+IC0NCj4+Pj4+ICsjaW5jbHVkZSAicGt0Z2VuLXNlcS5oIg0KPj4+Pj4g IA0KPj4+Pj4gICNkZWZpbmUgUEtUR0VOX1ZFUlNJT04JCQkiMi45LjIiDQo+Pj4+PiAgI2RlZmlu ZSBQS1RHRU5fQVBQX05BTUUJCQkiUGt0Z2VuIg0KPj4+Pj4gQEAgLTM4Niw3ICszODYsNyBAQCBl eHRlcm4gcGt0Z2VuX3QJCXBrdGdlbjsNCj4+Pj4+ICANCj4+Pj4+ICBleHRlcm4gdm9pZCBwa3Rn ZW5fcGFnZV9kaXNwbGF5KF9fYXR0cmlidXRlX18oKHVudXNlZCkpIHN0cnVjdA0KPj4+Pj4gcnRl X3RpbWVyICp0aW0sIF9fYXR0cmlidXRlX18oKHVudXNlZCkpIHZvaWQgKmFyZyk7DQo+Pj4+PiAg DQo+Pj4+PiAtZXh0ZXJuIHZvaWQgcGt0Z2VuX3BhY2tldF9jdG9yKHBvcnRfaW5mb190ICogaW5m bywgaW50MzJfdCBzZXFfaWR4LA0KPj4+Pj4gaW50MzJfdCB0eXBlKTsNCj4+Pj4+ICtleHRlcm4g dm9pZCBwa3RnZW5fcGFja2V0X2N0b3IocG9ydF9pbmZvX3QgKiBpbmZvLCBpbnQzMl90IHNlcV9p ZHgsDQo+Pj4+PiBpbnQzMl90IHR5cGUsIHBrdF9zZXFfdCAqIHNlcV9wa3QpOw0KPj4+Pj4gIGV4 dGVybiB2b2lkIHBrdGdlbl9wYWNrZXRfcmF0ZShwb3J0X2luZm9fdCAqIGluZm8pOw0KPj4+Pj4g IA0KPj4+Pj4gIGV4dGVybiB2b2lkIHBrdGdlbl9zZW5kX21idWYoc3RydWN0IHJ0ZV9tYnVmICpt LCB1aW50OF90IHBpZCwNCj4+Pj4+dWludDE2X3QNCj4+Pj4+IHFpZCk7DQo+Pj4+PiBkaWZmIC0t Z2l0IGEvYXBwL3QvcGt0Z2VuLnQuYyBiL2FwcC90L3BrdGdlbi50LmMNCj4+Pj4+IGluZGV4IDBl Y2E0YzQuLjc3YmYzMDAgMTAwNjQ0DQo+Pj4+PiAtLS0gYS9hcHAvdC9wa3RnZW4udC5jDQo+Pj4+ PiArKysgYi9hcHAvdC9wa3RnZW4udC5jDQo+Pj4+PiBAQCAtNzcsNyArNzcsNyBAQCB2b2lkIHRl c3RfcGt0Z2VuX3BhY2tldF9jdG9yX0lQdjRfVURQKHZvaWQpDQo+Pj4+PiAgCX07DQo+Pj4+PiAg DQo+Pj4+PiAgDQo+Pj4+PiAtCWxpdmVzX29rKCB7IHBrdGdlbl9wYWNrZXRfY3RvcigmaW5mbywg MCwgMCk7IH0sICJwa3RnZW5fcGFja2V0X2N0b3INCj4+Pj4+IG11c3QgZ2VuZXJhdGUgSVB2NC9V RFAiKTsNCj4+Pj4+ICsJbGl2ZXNfb2soIHsgcGt0Z2VuX3BhY2tldF9jdG9yKCZpbmZvLCAwLCAw LCBOVUxMKTsgfSwNCj4+Pj4+ICJwa3RnZW5fcGFja2V0X2N0b3IgbXVzdCBnZW5lcmF0ZSBJUHY0 L1VEUCIpOw0KPj4+Pj4gIA0KPj4+Pj4gIAlub3RlKCIuLi4gd2l0aCBFdGhlcm5ldCBoZWFkZXIi KTsNCj4+Pj4+ICAJY21wX21lbV9saXRfaW5jcihkYXRhLCAoMHhkZCwgMHhkZCwgMHhkZCwgMHhk ZCwgMHhkZCwgMHhkZCksICINCj4+Pj4+Li4uDQo+Pj4+PiB3aXRoIGNvcnJlY3QgZGVzdCBNQUMi KTsNCj4+Pj4+IEBAIC0xMzMsOSArMTMzLDkgQEAgdm9pZCB0ZXN0X3BrdGdlbl9wYWNrZXRfY3Rv cl9JUHY0X0dSRV9FdGhlcih2b2lkKQ0KPj4+Pj4gIAkJLnBrdFNpemUgICAgICA9IDEwMiwJCS8v IFN1YnRyYWN0IDQgZm9yIEZDUw0KPj4+Pj4gIAl9Ow0KPj4+Pj4gIA0KPj4+Pj4gLQlwa3RnZW5f cGFja2V0X2N0b3IoJmluZm8sIDAsIDApOw0KPj4+Pj4gKwlwa3RnZW5fcGFja2V0X2N0b3IoJmlu Zm8sIDAsIDAsIE5VTEwpOw0KPj4+Pj4gIA0KPj4+Pj4gLQlsaXZlc19vayggeyBwa3RnZW5fcGFj a2V0X2N0b3IoJmluZm8sIDAsIDApOyB9LCAicGt0Z2VuX3BhY2tldF9jdG9yDQo+Pj4+PiBtdXN0 IGdlbmVyYXRlIElQdjQgR1JFIEV0aGVybmV0IGZyYW1lIik7DQo+Pj4+PiArCWxpdmVzX29rKCB7 IHBrdGdlbl9wYWNrZXRfY3RvcigmaW5mbywgMCwgMCwgTlVMTCk7IH0sDQo+Pj4+PiAicGt0Z2Vu X3BhY2tldF9jdG9yIG11c3QgZ2VuZXJhdGUgSVB2NCBHUkUgRXRoZXJuZXQgZnJhbWUiKTsNCj4+ Pj4+ICANCj4+Pj4+ICAJbm90ZSgiLi4uIHdpdGggb3V0ZXIgRXRoZXJuZXQgaGVhZGVyIik7DQo+ Pj4+PiAgCWNtcF9tZW1fbGl0X2luY3IoZGF0YSwgKDB4ZGQsIDB4ZGQsIDB4ZGQsIDB4ZGQsIDB4 ZGQsIDB4ZGQpLCAiDQo+Pj4+Pi4uLg0KPj4+Pj4gd2l0aCBjb3JyZWN0IGRlc3QgTUFDIik7DQo+ Pj4+Pg0KPj4+Pg0KPj4+DQo+Pj4NCj4+PiDigLkgDQo+Pj4gUmVnYXJkcywNCj4+PiArK0tlaXRo DQo+Pj4gSW50ZWwgQ29ycG9yYXRpb24NCj4+Pg0KPj4+DQo+Pj4NCj4+Pg0KDQo=