From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 2703F42467; Mon, 23 Jan 2023 12:53:36 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BD473400EF; Mon, 23 Jan 2023 12:53:35 +0100 (CET) Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by mails.dpdk.org (Postfix) with ESMTP id 6F80B400D4 for ; Mon, 23 Jan 2023 12:53:34 +0100 (CET) Received: from frapeml100005.china.huawei.com (unknown [172.18.147.200]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4P0pPz1S8hz6J9gd; Mon, 23 Jan 2023 19:52:55 +0800 (CST) Received: from frapeml500007.china.huawei.com (7.182.85.172) by frapeml100005.china.huawei.com (7.182.85.132) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.34; Mon, 23 Jan 2023 12:53:32 +0100 Received: from frapeml500007.china.huawei.com ([7.182.85.172]) by frapeml500007.china.huawei.com ([7.182.85.172]) with mapi id 15.01.2375.034; Mon, 23 Jan 2023 12:53:32 +0100 From: Konstantin Ananyev To: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= , "Konstantin Ananyev" , "olivier.matz@6wind.com" , "andrew.rybchenko@oktetlabs.ru" , "honnappa.nagarahalli@arm.com" , "kamalakshitha.aligeri@arm.com" , "bruce.richardson@intel.com" , "dev@dpdk.org" CC: "nd@arm.com" Subject: RE: [PATCH v5] mempool cache: add zero-copy get and put functions Thread-Topic: [PATCH v5] mempool cache: add zero-copy get and put functions Thread-Index: AQHZGgZWOrQgX1KmTUiJR1ZcFCHgK66q/Q6AgAAMFICAAQOvsA== Date: Mon, 23 Jan 2023 11:53:32 +0000 Message-ID: <81e1ec960f6d4a1c80b236d9314cb549@huawei.com> References: <98CBD80474FA8B44BF855DF32C47DC35D87488@smartserver.smartshare.dk> <20221227151700.80887-1-mb@smartsharesystems.com> <60d35262-51bd-3d74-28f8-c2dda50d3400@yandex.ru> <98CBD80474FA8B44BF855DF32C47DC35D876A3@smartserver.smartshare.dk> In-Reply-To: <98CBD80474FA8B44BF855DF32C47DC35D876A3@smartserver.smartshare.dk> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.206.138.42] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-CFilter-Loop: Reflected X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org DQoNCj4gPiBGZXcgbml0cywgc2VlIGJlbG93Lg0KPiA+IEFsc28gSSBzdGlsbCB0aGluayB3ZSBk byBuZWVkIGEgdGVzdCBjYXNlIGZvciBfemNfZ2V0XyBiZWZvcmUNCj4gPiBhY2NlcHRpbmcgaXQg aW4gdGhlIG1haW5saW5lLg0KPiANCj4gUG9raW5nIGF0IG15IGJhZCBjb25zY2llbmNlLi4uIDot KQ0KPiANCj4gSXQncyBvbiBteSB0b2RvLWxpc3QuIEFwcGFyZW50bHkgbm90IGhpZ2ggZW5vdWdo LiA7LSkNCj4gDQo+ID4gV2l0aCB0aGF0IGluIHBsYWNlOg0KPiA+IEFja2VkLWJ5OiBLb25zdGFu dGluIEFuYW55ZXYgPGtvbnN0YW50aW4udi5hbmFueWV2QHlhbmRleC5ydT4NCj4gPg0KPiA+ID4g WmVyby1jb3B5IGFjY2VzcyB0byBtZW1wb29sIGNhY2hlcyBpcyBiZW5lZmljaWFsIGZvciBQTUQg cGVyZm9ybWFuY2UsDQo+ID4gYW5kDQo+ID4gPiBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBtZW1w b29sIGxpYnJhcnkgdG8gZml4IFtCdWcgMTA1Ml0gd2l0aG91dCBhDQo+ID4gPiBwZXJmb3JtYW5j ZSByZWdyZXNzaW9uLg0KPiA+ID4NCj4gPiA+IFtCdWcgMTA1Ml06IGh0dHBzOi8vYnVncy5kcGRr Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA1Mg0KPiA+ID4NCj4gPiA+IEJ1Z3ppbGxhIElEOiAxMDUy DQo+ID4gPg0KPiA+ID4gdjU6DQo+ID4gPiAqIEJ1Z2ZpeDogQ29tcGFyZSB6ZXJvLWNvcHkgZ2V0 IHJlcXVlc3QgdG8gdGhlIGNhY2hlIHNpemUgaW5zdGVhZCBvZg0KPiA+IHRoZQ0KPiA+ID4gICAg Zmx1c2ggdGhyZXNob2xkOyBvdGhlcndpc2UgcmVmaWxsIGNvdWxkIG92ZXJmbG93IHRoZSBtZW1v cnkNCj4gPiBhbGxvY2F0ZWQNCj4gPiA+ICAgIGZvciB0aGUgY2FjaGUuIChBbmRyZXcpDQo+ID4g PiAqIFNwbGl0IHRoZSB6ZXJvLWNvcHkgcHV0IGZ1bmN0aW9uIGludG8gYW4gaW50ZXJuYWwgZnVu Y3Rpb24gZG9pbmcNCj4gPiB0aGUNCj4gPiA+ICAgIHdvcmssIGFuZCBhIHB1YmxpYyBmdW5jdGlv biB3aXRoIHRyYWNlLg0KPiA+ID4gKiBBdm9pZCBjb2RlIGR1cGxpY2F0aW9uIGJ5IHJld3JpdGlu ZyBydGVfbWVtcG9vbF9kb19nZW5lcmljX3B1dCgpIHRvDQo+ID4gdXNlDQo+ID4gPiAgICB0aGUg aW50ZXJuYWwgemVyby1jb3B5IHB1dCBmdW5jdGlvbi4gKEFuZHJldykNCj4gPiA+ICogQ29ycmVj dGVkIHRoZSByZXR1cm4gdHlwZSBvZiBydGVfbWVtcG9vbF9jYWNoZV96Y19wdXRfYnVsaygpIGZy b20NCj4gPiB2b2lkICoNCj4gPiA+ICAgIHRvIHZvaWQgKio7IGl0IHJldHVybnMgYSBwb2ludGVy IHRvIGFuIGFycmF5IG9mIG9iamVjdHMuDQo+ID4gPiAqIEZpeCBjb2Rpbmcgc3R5bGU6IEFkZCBt aXNzaW5nIGN1cmx5IGJyYWNrZXRzLiAoQW5kcmV3KQ0KPiA+ID4gdjQ6DQo+ID4gPiAqIEZpeCBj aGVja3BhdGNoIHdhcm5pbmdzLg0KPiA+ID4gdjM6DQo+ID4gPiAqIEJ1Z2ZpeDogUmVzcGVjdCB0 aGUgY2FjaGUgc2l6ZTsgY29tcGFyZSB0byB0aGUgZmx1c2ggdGhyZXNob2xkDQo+ID4gaW5zdGVh ZA0KPiA+ID4gICAgb2YgUlRFX01FTVBPT0xfQ0FDSEVfTUFYX1NJWkUuDQo+ID4gPiAqIEFkZGVk ICdyZXdpbmQnIGZ1bmN0aW9uIGZvciBpbmNvbXBsZXRlICdwdXQnIG9wZXJhdGlvbnMuDQo+ID4g KEtvbnN0YW50aW4pDQo+ID4gPiAqIFJlcGxhY2UgUlRFX0FTU0VSVHMgd2l0aCBydW50aW1lIGNo ZWNrcyBvZiB0aGUgcmVxdWVzdCBzaXplLg0KPiA+ID4gICAgSW5zdGVhZCBvZiBmYWlsaW5nLCBy ZXR1cm4gTlVMTCBpZiB0aGUgcmVxdWVzdCBpcyB0b28gYmlnLg0KPiA+IChLb25zdGFudGluKQ0K PiA+ID4gKiBNb2RpZmllZCBjb21wYXJpc29uIHRvIHByZXZlbnQgb3ZlcmZsb3cgaWYgbiBpcyBy ZWFsbHkgaHVnZSBhbmQgbGVuDQo+ID4gaXMNCj4gPiA+ICAgIG5vbi16ZXJvLg0KPiA+ID4gKiBV cGRhdGVkIHRoZSBjb21tZW50cyBpbiB0aGUgY29kZS4NCj4gPiA+IHYyOg0KPiA+ID4gKiBGaXgg Y2hlY2twYXRjaCB3YXJuaW5ncy4NCj4gPiA+ICogRml4IG1pc3NpbmcgcmVnaXN0cmF0aW9uIG9m IHRyYWNlIHBvaW50cy4NCj4gPiA+ICogVGhlIGZ1bmN0aW9ucyBhcmUgaW5saW5lLCBzbyB0aGV5 IGRvbid0IGdvIGludG8gdGhlIG1hcCBmaWxlLg0KPiA+ID4gdjEgY2hhbmdlcyBmcm9tIHRoZSBS RkM6DQo+ID4gPiAqIFJlbW92ZWQgcnVuLXRpbWUgcGFyYW1ldGVyIGNoZWNrcy4gKEhvbm5hcHBh KQ0KPiA+ID4gICAgVGhpcyBpcyBhIGhvdCBmYXN0IHBhdGggZnVuY3Rpb247IHJlcXVpcmluZyBj b3JyZWN0IGFwcGxpY2F0aW9uDQo+ID4gPiAgICBiZWhhdmlvdXIsIGkuZS4gZnVuY3Rpb24gcGFy YW1ldGVycyBtdXN0IGJlIHZhbGlkLg0KPiA+ID4gKiBBZGRlZCBSVEVfQVNTRVJUIGZvciBwYXJh bWV0ZXJzIGluc3RlYWQuDQo+ID4gPiAgICBDb2RlIGZvciB0aGlzIGlzIG9ubHkgZ2VuZXJhdGVk IGlmIGJ1aWx0IHdpdGggUlRFX0VOQUJMRV9BU1NFUlQuDQo+ID4gPiAqIFJlbW92ZWQgZmFsbGJh Y2sgd2hlbiAnY2FjaGUnIHBhcmFtZXRlciBpcyBub3Qgc2V0LiAoSG9ubmFwcGEpDQo+ID4gPiAq IENob3NlIHRoZSBzaW1wbGUgZ2V0IGZ1bmN0aW9uOyBpLmUuIGRvIG5vdCBtb3ZlIHRoZSBleGlz dGluZw0KPiA+IG9iamVjdHMgaW4NCj4gPiA+ICAgIHRoZSBjYWNoZSB0byB0aGUgdG9wIG9mIHRo ZSBuZXcgc3RhY2ssIGp1c3QgbGVhdmUgdGhlbSBhdCB0aGUNCj4gPiBib3R0b20uDQo+ID4gPiAq IFJlbmFtZWQgdGhlIGZ1bmN0aW9ucy4gT3RoZXIgc3VnZ2VzdGlvbnMgYXJlIHdlbGNvbWUsIG9m IGNvdXJzZS4gOy0NCj4gPiApDQo+ID4gPiAqIFVwZGF0ZWQgdGhlIGZ1bmN0aW9uIGRlc2NyaXB0 aW9ucy4NCj4gPiA+ICogQWRkZWQgdGhlIGZ1bmN0aW9ucyB0byB0cmFjZV9mcCBhbmQgdmVyc2lv bi5tYXAuDQo+ID4gPg0KPiA+ID4gU2lnbmVkLW9mZi1ieTogTW9ydGVuIEJyw7hydXAgPG1iQHNt YXJ0c2hhcmVzeXN0ZW1zLmNvbT4NCj4gPiA+IC0tLQ0KPiA+ID4gICBsaWIvbWVtcG9vbC9tZW1w b29sX3RyYWNlX3BvaW50cy5jIHwgICA5ICsrDQo+ID4gPiAgIGxpYi9tZW1wb29sL3J0ZV9tZW1w b29sLmggICAgICAgICAgfCAyMzcgKysrKysrKysrKysrKysrKysrKysrKysrKy0NCj4gPiAtLS0N Cj4gPiA+ICAgbGliL21lbXBvb2wvcnRlX21lbXBvb2xfdHJhY2VfZnAuaCB8ICAyMyArKysNCj4g PiA+ICAgbGliL21lbXBvb2wvdmVyc2lvbi5tYXAgICAgICAgICAgICB8ICAgNSArDQo+ID4gPiAg IDQgZmlsZXMgY2hhbmdlZCwgMjQ1IGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQ0KPiA+ ID4NCj4gPiA+IGRpZmYgLS1naXQgYS9saWIvbWVtcG9vbC9tZW1wb29sX3RyYWNlX3BvaW50cy5j DQo+ID4gYi9saWIvbWVtcG9vbC9tZW1wb29sX3RyYWNlX3BvaW50cy5jDQo+ID4gPiBpbmRleCA0 YWQ3NmRlYjM0Li44M2QzNTNhNzY0IDEwMDY0NA0KPiA+ID4gLS0tIGEvbGliL21lbXBvb2wvbWVt cG9vbF90cmFjZV9wb2ludHMuYw0KPiA+ID4gKysrIGIvbGliL21lbXBvb2wvbWVtcG9vbF90cmFj ZV9wb2ludHMuYw0KPiA+ID4gQEAgLTc3LDMgKzc3LDEyIEBADQo+ID4gUlRFX1RSQUNFX1BPSU5U X1JFR0lTVEVSKHJ0ZV9tZW1wb29sX3RyYWNlX29wc19mcmVlLA0KPiA+ID4NCj4gPiA+ICAgUlRF X1RSQUNFX1BPSU5UX1JFR0lTVEVSKHJ0ZV9tZW1wb29sX3RyYWNlX3NldF9vcHNfYnluYW1lLA0K PiA+ID4gICAJbGliLm1lbXBvb2wuc2V0Lm9wcy5ieW5hbWUpDQo+ID4gPiArDQo+ID4gPiArUlRF X1RSQUNFX1BPSU5UX1JFR0lTVEVSKHJ0ZV9tZW1wb29sX3RyYWNlX2NhY2hlX3pjX3B1dF9idWxr LA0KPiA+ID4gKwlsaWIubWVtcG9vbC5jYWNoZS56Yy5wdXQuYnVsaykNCj4gPiA+ICsNCj4gPiA+ ICtSVEVfVFJBQ0VfUE9JTlRfUkVHSVNURVIocnRlX21lbXBvb2xfdHJhY2VfY2FjaGVfemNfcHV0 X3Jld2luZCwNCj4gPiA+ICsJbGliLm1lbXBvb2wuY2FjaGUuemMucHV0LnJld2luZCkNCj4gPiA+ ICsNCj4gPiA+ICtSVEVfVFJBQ0VfUE9JTlRfUkVHSVNURVIocnRlX21lbXBvb2xfdHJhY2VfY2Fj aGVfemNfZ2V0X2J1bGssDQo+ID4gPiArCWxpYi5tZW1wb29sLmNhY2hlLnpjLmdldC5idWxrKQ0K PiA+ID4gZGlmZiAtLWdpdCBhL2xpYi9tZW1wb29sL3J0ZV9tZW1wb29sLmggYi9saWIvbWVtcG9v bC9ydGVfbWVtcG9vbC5oDQo+ID4gPiBpbmRleCA5ZjUzMGRiMjRiLi41ZWZkM2MyYjViIDEwMDY0 NA0KPiA+ID4gLS0tIGEvbGliL21lbXBvb2wvcnRlX21lbXBvb2wuaA0KPiA+ID4gKysrIGIvbGli L21lbXBvb2wvcnRlX21lbXBvb2wuaA0KPiA+ID4gQEAgLTQ3LDYgKzQ3LDcgQEANCj4gPiA+ICAg I2luY2x1ZGUgPHJ0ZV9yaW5nLmg+DQo+ID4gPiAgICNpbmNsdWRlIDxydGVfbWVtY3B5Lmg+DQo+ ID4gPiAgICNpbmNsdWRlIDxydGVfY29tbW9uLmg+DQo+ID4gPiArI2luY2x1ZGUgPHJ0ZV9lcnJu by5oPg0KPiA+ID4NCj4gPiA+ICAgI2luY2x1ZGUgInJ0ZV9tZW1wb29sX3RyYWNlX2ZwLmgiDQo+ ID4gPg0KPiA+ID4gQEAgLTEzNDYsNiArMTM0NywxOTcgQEAgcnRlX21lbXBvb2xfY2FjaGVfZmx1 c2goc3RydWN0DQo+ID4gcnRlX21lbXBvb2xfY2FjaGUgKmNhY2hlLA0KPiA+ID4gICAJY2FjaGUt PmxlbiA9IDA7DQo+ID4gPiAgIH0NCj4gPiA+DQo+ID4gPiArLyoqDQo+ID4gPiArICogQGludGVy bmFsIHVzZWQgYnkgcnRlX21lbXBvb2xfY2FjaGVfemNfcHV0X2J1bGsoKSBhbmQNCj4gPiBydGVf bWVtcG9vbF9kb19nZW5lcmljX3B1dCgpLg0KPiA+ID4gKyAqDQo+ID4gPiArICogWmVyby1jb3B5 IHB1dCBvYmplY3RzIGluIGEgdXNlci1vd25lZCBtZW1wb29sIGNhY2hlIGJhY2tlZCBieSB0aGUN Cj4gPiBzcGVjaWZpZWQgbWVtcG9vbC4NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIEBwYXJhbSBjYWNo ZQ0KPiA+ID4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSBtZW1wb29sIGNhY2hlLg0KPiA+ID4gKyAq IEBwYXJhbSBtcA0KPiA+ID4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSBtZW1wb29sLg0KPiA+ID4g KyAqIEBwYXJhbSBuDQo+ID4gPiArICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gYmUgcHV0 IGluIHRoZSBtZW1wb29sIGNhY2hlLg0KPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ICsgKiAgIFRo ZSBwb2ludGVyIHRvIHdoZXJlIHRvIHB1dCB0aGUgb2JqZWN0cyBpbiB0aGUgbWVtcG9vbCBjYWNo ZS4NCj4gPiA+ICsgKiAgIE5VTEwgaWYgdGhlIHJlcXVlc3QgaXRzZWxmIGlzIHRvbyBiaWcgZm9y IHRoZSBjYWNoZSwgaS5lLg0KPiA+ID4gKyAqICAgZXhjZWVkcyB0aGUgY2FjaGUgZmx1c2ggdGhy ZXNob2xkLg0KPiA+ID4gKyAqLw0KPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZv aWQgKioNCj4gPiA+ICtfX3J0ZV9tZW1wb29sX2NhY2hlX3pjX3B1dF9idWxrKHN0cnVjdCBydGVf bWVtcG9vbF9jYWNoZSAqY2FjaGUsDQo+ID4gPiArCQlzdHJ1Y3QgcnRlX21lbXBvb2wgKm1wLA0K PiA+ID4gKwkJdW5zaWduZWQgaW50IG4pDQo+ID4gPiArew0KPiA+ID4gKwl2b2lkICoqY2FjaGVf b2JqczsNCj4gPiA+ICsNCj4gPiA+ICsJUlRFX0FTU0VSVChjYWNoZSAhPSBOVUxMKTsNCj4gPiA+ ICsJUlRFX0FTU0VSVChtcCAhPSBOVUxMKTsNCj4gPiA+ICsNCj4gPiA+ICsJaWYgKG4gPD0gY2Fj aGUtPmZsdXNodGhyZXNoIC0gY2FjaGUtPmxlbikgew0KPiA+ID4gKwkJLyoNCj4gPiA+ICsJCSAq IFRoZSBvYmplY3RzIGNhbiBiZSBhZGRlZCB0byB0aGUgY2FjaGUgd2l0aG91dCBjcm9zc2luZw0K PiA+IHRoZQ0KPiA+ID4gKwkJICogZmx1c2ggdGhyZXNob2xkLg0KPiA+ID4gKwkJICovDQo+ID4g PiArCQljYWNoZV9vYmpzID0gJmNhY2hlLT5vYmpzW2NhY2hlLT5sZW5dOw0KPiA+ID4gKwkJY2Fj aGUtPmxlbiArPSBuOw0KPiA+ID4gKwl9IGVsc2UgaWYgKGxpa2VseShuIDw9IGNhY2hlLT5mbHVz aHRocmVzaCkpIHsNCj4gPiA+ICsJCS8qDQo+ID4gPiArCQkgKiBUaGUgcmVxdWVzdCBpdHNlbGYg Zml0cyBpbnRvIHRoZSBjYWNoZS4NCj4gPiA+ICsJCSAqIEJ1dCBmaXJzdCwgdGhlIGNhY2hlIG11 c3QgYmUgZmx1c2hlZCB0byB0aGUgYmFja2VuZCwgc28NCj4gPiA+ICsJCSAqIGFkZGluZyB0aGUg b2JqZWN0cyBkb2VzIG5vdCBjcm9zcyB0aGUgZmx1c2ggdGhyZXNob2xkLg0KPiA+ID4gKwkJICov DQo+ID4gPiArCQljYWNoZV9vYmpzID0gJmNhY2hlLT5vYmpzWzBdOw0KPiA+ID4gKwkJcnRlX21l bXBvb2xfb3BzX2VucXVldWVfYnVsayhtcCwgY2FjaGVfb2JqcywgY2FjaGUtPmxlbik7DQo+ID4g PiArCQljYWNoZS0+bGVuID0gbjsNCj4gPiA+ICsJfSBlbHNlIHsNCj4gPiA+ICsJCS8qIFRoZSBy ZXF1ZXN0IGl0c2VsZiBpcyB0b28gYmlnIGZvciB0aGUgY2FjaGUuICovDQo+ID4gPiArCQlyZXR1 cm4gTlVMTDsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlSVEVfTUVNUE9PTF9DQUNIRV9T VEFUX0FERChjYWNoZSwgcHV0X2J1bGssIDEpOw0KPiA+ID4gKwlSVEVfTUVNUE9PTF9DQUNIRV9T VEFUX0FERChjYWNoZSwgcHV0X29ianMsIG4pOw0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gY2Fj aGVfb2JqczsNCj4gPiA+ICt9DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4gPiArICogQHdhcm5p bmcNCj4gPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IFRoaXMgQVBJIG1heSBjaGFuZ2UsIG9yIGJl IHJlbW92ZWQsIHdpdGhvdXQNCj4gPiBwcmlvciBub3RpY2UuDQo+ID4gPiArICoNCj4gPiA+ICsg KiBaZXJvLWNvcHkgcHV0IG9iamVjdHMgaW4gYSB1c2VyLW93bmVkIG1lbXBvb2wgY2FjaGUgYmFj a2VkIGJ5IHRoZQ0KPiA+IHNwZWNpZmllZCBtZW1wb29sLg0KPiA+ID4gKyAqDQo+ID4gPiArICog QHBhcmFtIGNhY2hlDQo+ID4gPiArICogICBBIHBvaW50ZXIgdG8gdGhlIG1lbXBvb2wgY2FjaGUu DQo+ID4gPiArICogQHBhcmFtIG1wDQo+ID4gPiArICogICBBIHBvaW50ZXIgdG8gdGhlIG1lbXBv b2wuDQo+ID4gPiArICogQHBhcmFtIG4NCj4gPiA+ICsgKiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0 cyB0byBiZSBwdXQgaW4gdGhlIG1lbXBvb2wgY2FjaGUuDQo+ID4gPiArICogQHJldHVybg0KPiA+ ID4gKyAqICAgVGhlIHBvaW50ZXIgdG8gd2hlcmUgdG8gcHV0IHRoZSBvYmplY3RzIGluIHRoZSBt ZW1wb29sIGNhY2hlLg0KPiA+ID4gKyAqICAgTlVMTCBpZiB0aGUgcmVxdWVzdCBpdHNlbGYgaXMg dG9vIGJpZyBmb3IgdGhlIGNhY2hlLCBpLmUuDQo+ID4gPiArICogICBleGNlZWRzIHRoZSBjYWNo ZSBmbHVzaCB0aHJlc2hvbGQuDQo+ID4gPiArICovDQo+ID4gPiArX19ydGVfZXhwZXJpbWVudGFs DQo+ID4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZCAqKg0KPiA+ID4gK3J0ZV9t ZW1wb29sX2NhY2hlX3pjX3B1dF9idWxrKHN0cnVjdCBydGVfbWVtcG9vbF9jYWNoZSAqY2FjaGUs DQo+ID4gPiArCQlzdHJ1Y3QgcnRlX21lbXBvb2wgKm1wLA0KPiA+ID4gKwkJdW5zaWduZWQgaW50 IG4pDQo+ID4gPiArew0KPiA+ID4gKwlSVEVfQVNTRVJUKGNhY2hlICE9IE5VTEwpOw0KPiA+ID4g KwlSVEVfQVNTRVJUKG1wICE9IE5VTEwpOw0KPiA+ID4gKw0KPiA+ID4gKwlydGVfbWVtcG9vbF90 cmFjZV9jYWNoZV96Y19wdXRfYnVsayhjYWNoZSwgbXAsIG4pOw0KPiA+ID4gKwlyZXR1cm4gX19y dGVfbWVtcG9vbF9jYWNoZV96Y19wdXRfYnVsayhjYWNoZSwgbXAsIG4pOw0KPiA+ID4gK30NCj4g PiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgKiBAd2FybmluZw0KPiA+ID4gKyAqIEBiIEVYUEVS SU1FTlRBTDogVGhpcyBBUEkgbWF5IGNoYW5nZSwgb3IgYmUgcmVtb3ZlZCwgd2l0aG91dA0KPiA+ IHByaW9yIG5vdGljZS4NCj4gPiA+ICsgKg0KPiA+ID4gKyAqIFplcm8tY29weSB1bi1wdXQgb2Jq ZWN0cyBpbiBhIHVzZXItb3duZWQgbWVtcG9vbCBjYWNoZS4NCj4gPiA+ICsgKg0KPiA+ID4gKyAq IEBwYXJhbSBjYWNoZQ0KPiA+ID4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSBtZW1wb29sIGNhY2hl Lg0KPiA+ID4gKyAqIEBwYXJhbSBuDQo+ID4gPiArICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMg bm90IHB1dCBpbiB0aGUgbWVtcG9vbCBjYWNoZSBhZnRlcg0KPiA+IGNhbGxpbmcNCj4gPiA+ICsg KiAgIHJ0ZV9tZW1wb29sX2NhY2hlX3pjX3B1dF9idWxrKCkuDQo+ID4gPiArICovDQo+ID4gPiAr X19ydGVfZXhwZXJpbWVudGFsDQo+ID4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9p ZA0KPiA+ID4gK3J0ZV9tZW1wb29sX2NhY2hlX3pjX3B1dF9yZXdpbmQoc3RydWN0IHJ0ZV9tZW1w b29sX2NhY2hlICpjYWNoZSwNCj4gPiA+ICsJCXVuc2lnbmVkIGludCBuKQ0KPiA+ID4gK3sNCj4g PiA+ICsJUlRFX0FTU0VSVChjYWNoZSAhPSBOVUxMKTsNCj4gPiA+ICsJUlRFX0FTU0VSVChuIDw9 IGNhY2hlLT5sZW4pOw0KPiA+ID4gKw0KPiA+ID4gKwlydGVfbWVtcG9vbF90cmFjZV9jYWNoZV96 Y19wdXRfcmV3aW5kKGNhY2hlLCBuKTsNCj4gPiA+ICsNCj4gPiA+ICsJY2FjaGUtPmxlbiAtPSBu Ow0KPiA+ID4gKw0KPiA+ID4gKwlSVEVfTUVNUE9PTF9DQUNIRV9TVEFUX0FERChjYWNoZSwgcHV0 X29ianMsIChpbnQpLW4pOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsg KiBAd2FybmluZw0KPiA+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogVGhpcyBBUEkgbWF5IGNoYW5n ZSwgb3IgYmUgcmVtb3ZlZCwgd2l0aG91dA0KPiA+IHByaW9yIG5vdGljZS4NCj4gPiA+ICsgKg0K PiA+ID4gKyAqIFplcm8tY29weSBnZXQgb2JqZWN0cyBmcm9tIGEgdXNlci1vd25lZCBtZW1wb29s IGNhY2hlIGJhY2tlZCBieQ0KPiA+IHRoZSBzcGVjaWZpZWQgbWVtcG9vbC4NCj4gPiA+ICsgKg0K PiA+ID4gKyAqIEBwYXJhbSBjYWNoZQ0KPiA+ID4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSBtZW1w b29sIGNhY2hlLg0KPiA+ID4gKyAqIEBwYXJhbSBtcA0KPiA+ID4gKyAqICAgQSBwb2ludGVyIHRv IHRoZSBtZW1wb29sLg0KPiA+ID4gKyAqIEBwYXJhbSBuDQo+ID4gPiArICogICBUaGUgbnVtYmVy IG9mIG9iamVjdHMgdG8gcHJlZmV0Y2ggaW50byB0aGUgbWVtcG9vbCBjYWNoZS4NCj4gPg0KPiA+ IFdoeSBub3QgJ2dldCcgaW5zdGVhZCBvZiAncHJlZmV0Y2gnPw0KPiANCj4gVGhpcyB3YXMgbXkg dGhpbmtpbmc6DQo+IA0KPiBUaGUgZnVuY3Rpb24gInByZWZldGNoZXMiIHRoZSBvYmplY3RzIGlu dG8gdGhlIGNhY2hlLiBJdCBpcyB0aGUgYXBwbGljYXRpb24gaXRzZWxmIHRoYXQgImdldHMiIHRo ZSBvYmplY3RzIGZyb20gdGhlIGNhY2hlIGFmdGVyIGhhdmluZw0KPiBjYWxsZWQgdGhlIGZ1bmN0 aW9uLg0KPiBZb3UgbWlnaHQgYWxzbyBub3RpY2UgdGhhdCB0aGUgbiBwYXJhbWV0ZXIgZm9yIHRo ZSB6Y19wdXQoKSBmdW5jdGlvbiBpcyBkZXNjcmliZWQgYXMgInRvIGJlIHB1dCIgKGZ1dHVyZSks IG5vdCAidG8gcHV0IiAobm93KSBpbiB0aGUNCj4gY2FjaGUuDQo+IA0KPiBPbiB0aGUgb3RoZXIg aGFuZCwgSSBjaG9zZSAiWmVyby1jb3B5IGdldCIgZm9yIHRoZSBmdW5jdGlvbiBoZWFkbGluZSB0 byBrZWVwIGl0IHNpbXBsZS4NCj4gDQo+IElmIHlvdSB0aGluayAiZ2V0IiBpcyBhIG1vcmUgY29y cmVjdCBkZXNjcmlwdGlvbiBvZiB0aGUgbiBwYXJhbWV0ZXIsIEkgY2FuIGNoYW5nZSBpdC4NCj4g DQo+IEFsdGVybmF0aXZlbHksIEkgY2FuIHVzZSB0aGUgc2FtZSBzdHlsZSBhcyB6Y19wdXQoKSwg aS5lLiAidG8gYmUgZ290dGVuIGZyb20gdGhlIG1lbXBvb2wgY2FjaGUiIC0gYnV0IHRoYXQgd291 bGQgcmVxdWlyZSBpbnB1dCBmcm9tIGENCj4gbmF0aXZlbHkgRW5nbGlzaCBzcGVha2luZyBwZXJz b24sIGJlY2F1c2UgRGFuaXNoIGFuZCBFbmdsaXNoIGdyYW1tYXIgaXMgdmVyeSBkaWZmZXJlbnQs IGFuZCBJIGFtIGhpZ2hseSB1bmNlcnRhaW4gYWJvdXQgbXkgRW5nbGlzaA0KPiBncmFtbWFyIGhl cmUhIEkgb3JpZ2luYWxseSBjb25zaWRlcmVkIHRoaXMgcGhyYXNlLCBidXQgY29uY2x1ZGVkIHRo YXQgdGhlICJwcmVmZXRjaCIgZGVzY3JpcHRpb24gd2FzIGVhc2llciB0byB1bmRlcnN0YW5kIC0g ZXNwZWNpYWxseQ0KPiBmb3Igbm9uLW5hdGl2ZSBFbmdsaXNoIHJlYWRlcnMuDQoNCkZvciBtZSAn cHJlZmV0Y2gnIHNlZW1zIGEgYml0IHVuY2xlYXIgaW4gdGhhdCBzaXR1YXRpb24uLi4NClByb2Jh Ymx5OiAibnVtYmVyIG9mIG9iamVjdHMgdGhhdCB1c2VyIHBsYW5zIHRvIGV4dHJhY3QgZnJvbSB0 aGUgY2FjaGUiPw0KQnV0IGFnYWluLCBJIGFtIG5vdCBuYXRpdmUgRW5nbGlzaCBzcGVha2VyIHRv bywgc28gbWlnaHQgYmUgc29tZW9uZSBjYW4gc3VnZ2VzdCBhIGJldHRlciBvcHRpb24uDQoNCj4g DQo+ID4NCj4gPg0KPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ICsgKiAgIFRoZSBwb2ludGVyIHRv IHRoZSBvYmplY3RzIGluIHRoZSBtZW1wb29sIGNhY2hlLg0KPiA+ID4gKyAqICAgTlVMTCBvbiBl cnJvcjsgaS5lLiB0aGUgY2FjaGUgKyB0aGUgcG9vbCBkb2VzIG5vdCBjb250YWluICduJw0KPiA+ IG9iamVjdHMuDQo+ID4gPiArICogICBXaXRoIHJ0ZV9lcnJubyBzZXQgdG8gdGhlIGVycm9yIGNv ZGUgb2YgdGhlIG1lbXBvb2wgZGVxdWV1ZQ0KPiA+IGZ1bmN0aW9uLA0KPiA+ID4gKyAqICAgb3Ig RUlOVkFMIGlmIHRoZSByZXF1ZXN0IGl0c2VsZiBpcyB0b28gYmlnIGZvciB0aGUgY2FjaGUsIGku ZS4NCj4gPiA+ICsgKiAgIGV4Y2VlZHMgdGhlIGNhY2hlIGZsdXNoIHRocmVzaG9sZC4NCj4gPiA+ ICsgKi8NCj4gPiA+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPiA+ICtzdGF0aWMgX19ydGVfYWx3 YXlzX2lubGluZSB2b2lkICoNCj4gPiA+ICtydGVfbWVtcG9vbF9jYWNoZV96Y19nZXRfYnVsayhz dHJ1Y3QgcnRlX21lbXBvb2xfY2FjaGUgKmNhY2hlLA0KPiA+ID4gKwkJc3RydWN0IHJ0ZV9tZW1w b29sICptcCwNCj4gPiA+ICsJCXVuc2lnbmVkIGludCBuKQ0KPiA+ID4gK3sNCj4gPiA+ICsJdW5z aWduZWQgaW50IGxlbiwgc2l6ZTsNCj4gPiA+ICsNCj4gPiA+ICsJUlRFX0FTU0VSVChjYWNoZSAh PSBOVUxMKTsNCj4gPiA+ICsJUlRFX0FTU0VSVChtcCAhPSBOVUxMKTsNCj4gPiA+ICsNCj4gPiA+ ICsJcnRlX21lbXBvb2xfdHJhY2VfY2FjaGVfemNfZ2V0X2J1bGsoY2FjaGUsIG1wLCBuKTsNCj4g PiA+ICsNCj4gPiA+ICsJbGVuID0gY2FjaGUtPmxlbjsNCj4gPiA+ICsJc2l6ZSA9IGNhY2hlLT5z aXplOw0KPiA+ID4gKw0KPiA+ID4gKwlpZiAobiA8PSBsZW4pIHsNCj4gPiA+ICsJCS8qIFRoZSBy ZXF1ZXN0IGNhbiBiZSBzYXRpc2ZpZWQgZnJvbSB0aGUgY2FjaGUgYXMgaXMuICovDQo+ID4gPiAr CQlsZW4gLT0gbjsNCj4gPiA+ICsJfSBlbHNlIGlmIChsaWtlbHkobiA8PSBzaXplKSkgew0KPiA+ ID4gKwkJLyoNCj4gPiA+ICsJCSAqIFRoZSByZXF1ZXN0IGl0c2VsZiBjYW4gYmUgc2F0aXNmaWVk IGZyb20gdGhlIGNhY2hlLg0KPiA+ID4gKwkJICogQnV0IGZpcnN0LCB0aGUgY2FjaGUgbXVzdCBi ZSBmaWxsZWQgZnJvbSB0aGUgYmFja2VuZDsNCj4gPiA+ICsJCSAqIGZldGNoIHNpemUgKyByZXF1 ZXN0ZWQgLSBsZW4gb2JqZWN0cy4NCj4gPiA+ICsJCSAqLw0KPiA+ID4gKwkJaW50IHJldDsNCj4g PiA+ICsNCj4gPiA+ICsJCXJldCA9IHJ0ZV9tZW1wb29sX29wc19kZXF1ZXVlX2J1bGsobXAsICZj YWNoZS0+b2Jqc1tsZW5dLA0KPiA+IHNpemUgKyBuIC0gbGVuKTsNCj4gPiA+ICsJCWlmICh1bmxp a2VseShyZXQgPCAwKSkgew0KPiA+ID4gKwkJCS8qDQo+ID4gPiArCQkJICogV2UgYXJlIGJ1ZmZl ciBjb25zdHJhaW5lZC4NCj4gPiA+ICsJCQkgKiBEbyBub3QgZmlsbCB0aGUgY2FjaGUsIGp1c3Qg c2F0aXNmeSB0aGUgcmVxdWVzdC4NCj4gPiA+ICsJCQkgKi8NCj4gPiA+ICsJCQlyZXQgPSBydGVf bWVtcG9vbF9vcHNfZGVxdWV1ZV9idWxrKG1wLCAmY2FjaGUtDQo+ID4gPm9ianNbbGVuXSwgbiAt IGxlbik7DQo+ID4gPiArCQkJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7DQo+ID4gPiArCQkJCS8q IFVuYWJsZSB0byBzYXRpc2Z5IHRoZSByZXF1ZXN0LiAqLw0KPiA+ID4gKw0KPiA+ID4gKwkJCQlS VEVfTUVNUE9PTF9TVEFUX0FERChtcCwgZ2V0X2ZhaWxfYnVsaywgMSk7DQo+ID4gPiArCQkJCVJU RV9NRU1QT09MX1NUQVRfQUREKG1wLCBnZXRfZmFpbF9vYmpzLCBuKTsNCj4gPiA+ICsNCj4gPiA+ ICsJCQkJcnRlX2Vycm5vID0gLXJldDsNCj4gPiA+ICsJCQkJcmV0dXJuIE5VTEw7DQo+ID4gPiAr CQkJfQ0KPiA+ID4gKw0KPiA+ID4gKwkJCWxlbiA9IDA7DQo+ID4gPiArCQl9IGVsc2Ugew0KPiA+ ID4gKwkJCWxlbiA9IHNpemU7DQo+ID4gPiArCQl9DQo+ID4gPiArCX0gZWxzZSB7DQo+ID4gPiAr CQkvKiBUaGUgcmVxdWVzdCBpdHNlbGYgaXMgdG9vIGJpZyBmb3IgdGhlIGNhY2hlLiAqLw0KPiA+ ID4gKwkJcnRlX2Vycm5vID0gRUlOVkFMOw0KPiA+ID4gKwkJcmV0dXJuIE5VTEw7DQo+ID4gPiAr CX0NCj4gPiA+ICsNCj4gPiA+ICsJY2FjaGUtPmxlbiA9IGxlbjsNCj4gPiA+ICsNCj4gPiA+ICsJ UlRFX01FTVBPT0xfQ0FDSEVfU1RBVF9BREQoY2FjaGUsIGdldF9zdWNjZXNzX2J1bGssIDEpOw0K PiA+ID4gKwlSVEVfTUVNUE9PTF9DQUNIRV9TVEFUX0FERChjYWNoZSwgZ2V0X3N1Y2Nlc3Nfb2Jq cywgbik7DQo+ID4gPiArDQo+ID4gPiArCXJldHVybiAmY2FjaGUtPm9ianNbbGVuXTsNCj4gPiA+ ICt9DQo+ID4gPiArDQo+ID4gPiAgIC8qKg0KPiA+ID4gICAgKiBAaW50ZXJuYWwgUHV0IHNldmVy YWwgb2JqZWN0cyBiYWNrIGluIHRoZSBtZW1wb29sOyB1c2VkDQo+ID4gaW50ZXJuYWxseS4NCj4g PiA+ICAgICogQHBhcmFtIG1wDQo+ID4gPiBAQCAtMTM2NCwzMiArMTU1NiwyNSBAQCBydGVfbWVt cG9vbF9kb19nZW5lcmljX3B1dChzdHJ1Y3QgcnRlX21lbXBvb2wNCj4gPiAqbXAsIHZvaWQgKiBj b25zdCAqb2JqX3RhYmxlLA0KPiA+ID4gICB7DQo+ID4gPiAgIAl2b2lkICoqY2FjaGVfb2JqczsN Cj4gPiA+DQo+ID4gPiAtCS8qIE5vIGNhY2hlIHByb3ZpZGVkICovDQo+ID4gPiAtCWlmICh1bmxp a2VseShjYWNoZSA9PSBOVUxMKSkNCj4gPiA+IC0JCWdvdG8gZHJpdmVyX2VucXVldWU7DQo+ID4g PiArCS8qIE5vIGNhY2hlIHByb3ZpZGVkPyAqLw0KPiA+ID4gKwlpZiAodW5saWtlbHkoY2FjaGUg PT0gTlVMTCkpIHsNCj4gPiA+ICsJCS8qIEluY3JlbWVudCBzdGF0cyBub3csIGFkZGluZyBpbiBt ZW1wb29sIGFsd2F5cyBzdWNjZWVkcy4NCj4gPiAqLw0KPiA+ID4gKwkJUlRFX01FTVBPT0xfU1RB VF9BREQobXAsIHB1dF9idWxrLCAxKTsNCj4gPiA+ICsJCVJURV9NRU1QT09MX1NUQVRfQUREKG1w LCBwdXRfb2Jqcywgbik7DQo+ID4gPg0KPiA+ID4gLQkvKiBpbmNyZW1lbnQgc3RhdCBub3csIGFk ZGluZyBpbiBtZW1wb29sIGFsd2F5cyBzdWNjZXNzICovDQo+ID4gPiAtCVJURV9NRU1QT09MX0NB Q0hFX1NUQVRfQUREKGNhY2hlLCBwdXRfYnVsaywgMSk7DQo+ID4gPiAtCVJURV9NRU1QT09MX0NB Q0hFX1NUQVRfQUREKGNhY2hlLCBwdXRfb2Jqcywgbik7DQo+ID4gPiArCQlnb3RvIGRyaXZlcl9l bnF1ZXVlOw0KPiA+ID4gKwl9DQo+ID4gPg0KPiA+ID4gLQkvKiBUaGUgcmVxdWVzdCBpdHNlbGYg aXMgdG9vIGJpZyBmb3IgdGhlIGNhY2hlICovDQo+ID4gPiAtCWlmICh1bmxpa2VseShuID4gY2Fj aGUtPmZsdXNodGhyZXNoKSkNCj4gPiA+IC0JCWdvdG8gZHJpdmVyX2VucXVldWVfc3RhdHNfaW5j cmVtZW50ZWQ7DQo+ID4gPiArCS8qIFByZXBhcmUgdG8gYWRkIHRoZSBvYmplY3RzIHRvIHRoZSBj YWNoZS4gKi8NCj4gPiA+ICsJY2FjaGVfb2JqcyA9IF9fcnRlX21lbXBvb2xfY2FjaGVfemNfcHV0 X2J1bGsoY2FjaGUsIG1wLCBuKTsNCj4gPiA+DQo+ID4gPiAtCS8qDQo+ID4gPiAtCSAqIFRoZSBj YWNoZSBmb2xsb3dzIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOg0KPiA+ID4gLQkgKiAgIDEuIElm IHRoZSBvYmplY3RzIGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgY2FjaGUgd2l0aG91dA0KPiA+IGNy b3NzaW5nDQo+ID4gPiAtCSAqICAgICAgdGhlIGZsdXNoIHRocmVzaG9sZCwgZmx1c2ggdGhlIGNh Y2hlIHRvIHRoZSBiYWNrZW5kLg0KPiA+ID4gLQkgKiAgIDIuIEFkZCB0aGUgb2JqZWN0cyB0byB0 aGUgY2FjaGUuDQo+ID4gPiAtCSAqLw0KPiA+ID4gKwkvKiBUaGUgcmVxdWVzdCBpdHNlbGYgaXMg dG9vIGJpZyBmb3IgdGhlIGNhY2hlPyAqLw0KPiA+ID4gKwlpZiAodW5saWtlbHkoY2FjaGVfb2Jq cyA9PSBOVUxMKSkgew0KPiA+ID4gKwkJLyogSW5jcmVtZW50IHN0YXRzIG5vdywgYWRkaW5nIGlu IG1lbXBvb2wgYWx3YXlzIHN1Y2NlZWRzLg0KPiA+ICovDQo+ID4gPiArCQlSVEVfTUVNUE9PTF9D QUNIRV9TVEFUX0FERChjYWNoZSwgcHV0X2J1bGssIDEpOw0KPiA+ID4gKwkJUlRFX01FTVBPT0xf Q0FDSEVfU1RBVF9BREQoY2FjaGUsIHB1dF9vYmpzLCBuKTsNCj4gPg0KPiA+IFNob3VsZG4ndCBp dCBiZSBSVEVfTUVNUE9PTF9TVEFUX0FERCgpIGhlcmU/DQo+IA0KPiBJIGNhbiBzZWUgd2h5IHlv dSBhcmUgd29uZGVyaW5nLCBidXQgdGhlIGFuc3dlciBpcyBuby4gVGhlIHN0YXRpc3RpY3MgaW4g bWVtcG9vbCBjYWNoZSBhcmUgbm90IHJlbGF0ZWQgdG8gdGhlIGNhY2hlLCB0aGV5IGFyZSByZWxh dGVkDQo+IHRvIHRoZSBtZW1wb29sOyB0aGV5IGFyZSB0aGVyZSB0byBwcm92aWRlIGZhc3RlciBw ZXItbGNvcmUgdXBkYXRlIGFjY2VzcyBbMV0uDQo+IA0KPiBbMV06IGh0dHBzOi8vZWxpeGlyLmJv b3RsaW4uY29tL2RwZGsvdjIyLjExLjEvc291cmNlL2xpYi9tZW1wb29sL3J0ZV9tZW1wb29sLmgj TDk0DQoNCkJ1dCAgdGhlIGNvbmRpdGlvbiBhYm92ZToNCmlmICh1bmxpa2VseShjYWNoZV9vYmpz ID09IE5VTEwpKQ0KbWVhbnMgdGhhdCBtZSBjYW4ndCBwdXQgdGhlc2Ugb2JqZWN0IHRvIHRoZSBj YWNoZSBhbmQgaGF2ZSB0byBwdXQNCm9iamVjdHMgc3RyYWlnaHQgdG8gdGhlIHBvb2wgKHNraXBw aW5nIGNhY2hlIGNvbXBsZXRlbHkpLCByaWdodD8NCklmIHNvLCB0aGVuIHdoeSB0byB1cGRhdGUg Y2FjaGUgc3RhdHMgaW5zdGVhZCBvZiBwb29sIHN0YXRzPw0KDQo+ID4NCj4gPiA+DQo+ID4gPiAt CWlmIChjYWNoZS0+bGVuICsgbiA8PSBjYWNoZS0+Zmx1c2h0aHJlc2gpIHsNCj4gPiA+IC0JCWNh Y2hlX29ianMgPSAmY2FjaGUtPm9ianNbY2FjaGUtPmxlbl07DQo+ID4gPiAtCQljYWNoZS0+bGVu ICs9IG47DQo+ID4gPiAtCX0gZWxzZSB7DQo+ID4gPiAtCQljYWNoZV9vYmpzID0gJmNhY2hlLT5v YmpzWzBdOw0KPiA+ID4gLQkJcnRlX21lbXBvb2xfb3BzX2VucXVldWVfYnVsayhtcCwgY2FjaGVf b2JqcywgY2FjaGUtPmxlbik7DQo+ID4gPiAtCQljYWNoZS0+bGVuID0gbjsNCj4gPiA+ICsJCWdv dG8gZHJpdmVyX2VucXVldWU7DQo+ID4gPiAgIAl9DQo+ID4gPg0KPiA+ID4gICAJLyogQWRkIHRo ZSBvYmplY3RzIHRvIHRoZSBjYWNoZS4gKi8NCj4gPiA+IEBAIC0xMzk5LDEzICsxNTg0LDcgQEAg cnRlX21lbXBvb2xfZG9fZ2VuZXJpY19wdXQoc3RydWN0IHJ0ZV9tZW1wb29sDQo+ID4gKm1wLCB2 b2lkICogY29uc3QgKm9ial90YWJsZSwNCj4gPiA+DQo+ID4gPiAgIGRyaXZlcl9lbnF1ZXVlOg0K PiA+ID4NCj4gPiA+IC0JLyogaW5jcmVtZW50IHN0YXQgbm93LCBhZGRpbmcgaW4gbWVtcG9vbCBh bHdheXMgc3VjY2VzcyAqLw0KPiA+ID4gLQlSVEVfTUVNUE9PTF9TVEFUX0FERChtcCwgcHV0X2J1 bGssIDEpOw0KPiA+ID4gLQlSVEVfTUVNUE9PTF9TVEFUX0FERChtcCwgcHV0X29ianMsIG4pOw0K PiA+ID4gLQ0KPiA+ID4gLWRyaXZlcl9lbnF1ZXVlX3N0YXRzX2luY3JlbWVudGVkOg0KPiA+ID4g LQ0KPiA+ID4gLQkvKiBwdXNoIG9iamVjdHMgdG8gdGhlIGJhY2tlbmQgKi8NCj4gPiA+ICsJLyog UHVzaCB0aGUgb2JqZWN0cyB0byB0aGUgYmFja2VuZC4gKi8NCj4gPiA+ICAgCXJ0ZV9tZW1wb29s X29wc19lbnF1ZXVlX2J1bGsobXAsIG9ial90YWJsZSwgbik7DQo+ID4gPiAgIH0NCj4gPiA+DQo+ ID4gPiBkaWZmIC0tZ2l0IGEvbGliL21lbXBvb2wvcnRlX21lbXBvb2xfdHJhY2VfZnAuaA0KPiA+ IGIvbGliL21lbXBvb2wvcnRlX21lbXBvb2xfdHJhY2VfZnAuaA0KPiA+ID4gaW5kZXggZWQwNjBl ODg3Yy4uMTQ2NjY0NTdmNyAxMDA2NDQNCj4gPiA+IC0tLSBhL2xpYi9tZW1wb29sL3J0ZV9tZW1w b29sX3RyYWNlX2ZwLmgNCj4gPiA+ICsrKyBiL2xpYi9tZW1wb29sL3J0ZV9tZW1wb29sX3RyYWNl X2ZwLmgNCj4gPiA+IEBAIC0xMDksNiArMTA5LDI5IEBAIFJURV9UUkFDRV9QT0lOVF9GUCgNCj4g PiA+ICAgCXJ0ZV90cmFjZV9wb2ludF9lbWl0X3B0cihtZW1wb29sKTsNCj4gPiA+ICAgKQ0KPiA+ ID4NCj4gPiA+ICtSVEVfVFJBQ0VfUE9JTlRfRlAoDQo+ID4gPiArCXJ0ZV9tZW1wb29sX3RyYWNl X2NhY2hlX3pjX3B1dF9idWxrLA0KPiA+ID4gKwlSVEVfVFJBQ0VfUE9JTlRfQVJHUyh2b2lkICpj YWNoZSwgdm9pZCAqbWVtcG9vbCwgdWludDMyX3QNCj4gPiBuYl9vYmpzKSwNCj4gPiA+ICsJcnRl X3RyYWNlX3BvaW50X2VtaXRfcHRyKGNhY2hlKTsNCj4gPiA+ICsJcnRlX3RyYWNlX3BvaW50X2Vt aXRfcHRyKG1lbXBvb2wpOw0KPiA+ID4gKwlydGVfdHJhY2VfcG9pbnRfZW1pdF91MzIobmJfb2Jq cyk7DQo+ID4gPiArKQ0KPiA+ID4gKw0KPiA+ID4gK1JURV9UUkFDRV9QT0lOVF9GUCgNCj4gPiA+ ICsJcnRlX21lbXBvb2xfdHJhY2VfY2FjaGVfemNfcHV0X3Jld2luZCwNCj4gPiA+ICsJUlRFX1RS QUNFX1BPSU5UX0FSR1Modm9pZCAqY2FjaGUsIHVpbnQzMl90IG5iX29ianMpLA0KPiA+ID4gKwly dGVfdHJhY2VfcG9pbnRfZW1pdF9wdHIoY2FjaGUpOw0KPiA+ID4gKwlydGVfdHJhY2VfcG9pbnRf ZW1pdF91MzIobmJfb2Jqcyk7DQo+ID4gPiArKQ0KPiA+ID4gKw0KPiA+ID4gK1JURV9UUkFDRV9Q T0lOVF9GUCgNCj4gPiA+ICsJcnRlX21lbXBvb2xfdHJhY2VfY2FjaGVfemNfZ2V0X2J1bGssDQo+ ID4gPiArCVJURV9UUkFDRV9QT0lOVF9BUkdTKHZvaWQgKmNhY2hlLCB2b2lkICptZW1wb29sLCB1 aW50MzJfdA0KPiA+IG5iX29ianMpLA0KPiA+ID4gKwlydGVfdHJhY2VfcG9pbnRfZW1pdF9wdHIo Y2FjaGUpOw0KPiA+ID4gKwlydGVfdHJhY2VfcG9pbnRfZW1pdF9wdHIobWVtcG9vbCk7DQo+ID4g PiArCXJ0ZV90cmFjZV9wb2ludF9lbWl0X3UzMihuYl9vYmpzKTsNCj4gPiA+ICspDQo+ID4gPiAr DQo+ID4gPiAgICNpZmRlZiBfX2NwbHVzcGx1cw0KPiA+ID4gICB9DQo+ID4gPiAgICNlbmRpZg0K PiA+ID4gZGlmZiAtLWdpdCBhL2xpYi9tZW1wb29sL3ZlcnNpb24ubWFwIGIvbGliL21lbXBvb2wv dmVyc2lvbi5tYXANCj4gPiA+IGluZGV4IGI2N2Q3YWFjZTcuLjEzODNhZTZkYjIgMTAwNjQ0DQo+ ID4gPiAtLS0gYS9saWIvbWVtcG9vbC92ZXJzaW9uLm1hcA0KPiA+ID4gKysrIGIvbGliL21lbXBv b2wvdmVyc2lvbi5tYXANCj4gPiA+IEBAIC02Myw2ICs2MywxMSBAQCBFWFBFUklNRU5UQUwgew0K PiA+ID4gICAJX19ydGVfbWVtcG9vbF90cmFjZV9vcHNfYWxsb2M7DQo+ID4gPiAgIAlfX3J0ZV9t ZW1wb29sX3RyYWNlX29wc19mcmVlOw0KPiA+ID4gICAJX19ydGVfbWVtcG9vbF90cmFjZV9zZXRf b3BzX2J5bmFtZTsNCj4gPiA+ICsNCj4gPiA+ICsJIyBhZGRlZCBpbiAyMy4wMw0KPiA+ID4gKwlf X3J0ZV9tZW1wb29sX3RyYWNlX2NhY2hlX3pjX3B1dF9idWxrOw0KPiA+ID4gKwlfX3J0ZV9tZW1w b29sX3RyYWNlX2NhY2hlX3pjX3B1dF9yZXdpbmQ7DQo+ID4gPiArCV9fcnRlX21lbXBvb2xfdHJh Y2VfY2FjaGVfemNfZ2V0X2J1bGs7DQo+ID4gPiAgIH07DQo+ID4gPg0KPiA+ID4gICBJTlRFUk5B TCB7DQo+ID4NCg0K