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 81A1742467; Mon, 23 Jan 2023 13:23:54 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 22529400EF; Mon, 23 Jan 2023 13:23:54 +0100 (CET) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id C0A28400D4 for ; Mon, 23 Jan 2023 13:23:52 +0100 (CET) Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Subject: RE: [PATCH v5] mempool cache: add zero-copy get and put functions Date: Mon, 23 Jan 2023 13:23:50 +0100 X-MimeOLE: Produced By Microsoft Exchange V6.5 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35D876A9@smartserver.smartshare.dk> In-Reply-To: <81e1ec960f6d4a1c80b236d9314cb549@huawei.com> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [PATCH v5] mempool cache: add zero-copy get and put functions Thread-Index: AQHZGgZWOrQgX1KmTUiJR1ZcFCHgK66q/Q6AgAAMFICAAQOvsIAAAyWA References: <98CBD80474FA8B44BF855DF32C47DC35D87488@smartserver.smartshare.dk> <20221227151700.80887-1-mb@smartsharesystems.com> <60d35262-51bd-3d74-28f8-c2dda50d3400@yandex.ru> <98CBD80474FA8B44BF855DF32C47DC35D876A3@smartserver.smartshare.dk> <81e1ec960f6d4a1c80b236d9314cb549@huawei.com> From: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= To: "Konstantin Ananyev" , "Konstantin Ananyev" , , , , , , Cc: 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 PiBGcm9tOiBLb25zdGFudGluIEFuYW55ZXYgW21haWx0bzprb25zdGFudGluLmFuYW55ZXZAaHVh d2VpLmNvbV0NCj4gU2VudDogTW9uZGF5LCAyMyBKYW51YXJ5IDIwMjMgMTIuNTQNCj4gDQo+ID4g PiBGZXcgbml0cywgc2VlIGJlbG93Lg0KPiA+ID4gQWxzbyBJIHN0aWxsIHRoaW5rIHdlIGRvIG5l ZWQgYSB0ZXN0IGNhc2UgZm9yIF96Y19nZXRfIGJlZm9yZQ0KPiA+ID4gYWNjZXB0aW5nIGl0IGlu IHRoZSBtYWlubGluZS4NCj4gPg0KPiA+IFBva2luZyBhdCBteSBiYWQgY29uc2NpZW5jZS4uLiA6 LSkNCj4gPg0KPiA+IEl0J3Mgb24gbXkgdG9kby1saXN0LiBBcHBhcmVudGx5IG5vdCBoaWdoIGVu b3VnaC4gOy0pDQo+ID4NCj4gPiA+IFdpdGggdGhhdCBpbiBwbGFjZToNCj4gPiA+IEFja2VkLWJ5 OiBLb25zdGFudGluIEFuYW55ZXYgPGtvbnN0YW50aW4udi5hbmFueWV2QHlhbmRleC5ydT4NCj4g PiA+DQoNClsuLi5dDQoNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogQHdhcm5pbmcNCj4gPiA+ ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogVGhpcyBBUEkgbWF5IGNoYW5nZSwgb3IgYmUgcmVtb3Zl ZCwgd2l0aG91dA0KPiA+ID4gcHJpb3Igbm90aWNlLg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAq IFplcm8tY29weSBwdXQgb2JqZWN0cyBpbiBhIHVzZXItb3duZWQgbWVtcG9vbCBjYWNoZSBiYWNr ZWQgYnkNCj4gdGhlDQo+ID4gPiBzcGVjaWZpZWQgbWVtcG9vbC4NCj4gPiA+ID4gKyAqDQo+ID4g PiA+ICsgKiBAcGFyYW0gY2FjaGUNCj4gPiA+ID4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSBtZW1w b29sIGNhY2hlLg0KPiA+ID4gPiArICogQHBhcmFtIG1wDQo+ID4gPiA+ICsgKiAgIEEgcG9pbnRl ciB0byB0aGUgbWVtcG9vbC4NCj4gPiA+ID4gKyAqIEBwYXJhbSBuDQo+ID4gPiA+ICsgKiAgIFRo ZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBiZSBwdXQgaW4gdGhlIG1lbXBvb2wgY2FjaGUuDQo+ID4g PiA+ICsgKiBAcmV0dXJuDQo+ID4gPiA+ICsgKiAgIFRoZSBwb2ludGVyIHRvIHdoZXJlIHRvIHB1 dCB0aGUgb2JqZWN0cyBpbiB0aGUgbWVtcG9vbA0KPiBjYWNoZS4NCj4gPiA+ID4gKyAqICAgTlVM TCBpZiB0aGUgcmVxdWVzdCBpdHNlbGYgaXMgdG9vIGJpZyBmb3IgdGhlIGNhY2hlLCBpLmUuDQo+ ID4gPiA+ICsgKiAgIGV4Y2VlZHMgdGhlIGNhY2hlIGZsdXNoIHRocmVzaG9sZC4NCj4gPiA+ID4g KyAqLw0KPiA+ID4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gPiA+ICtzdGF0aWMgX19ydGVf YWx3YXlzX2lubGluZSB2b2lkICoqDQo+ID4gPiA+ICtydGVfbWVtcG9vbF9jYWNoZV96Y19wdXRf YnVsayhzdHJ1Y3QgcnRlX21lbXBvb2xfY2FjaGUgKmNhY2hlLA0KPiA+ID4gPiArCQlzdHJ1Y3Qg cnRlX21lbXBvb2wgKm1wLA0KPiA+ID4gPiArCQl1bnNpZ25lZCBpbnQgbikNCj4gPiA+ID4gK3sN Cj4gPiA+ID4gKwlSVEVfQVNTRVJUKGNhY2hlICE9IE5VTEwpOw0KPiA+ID4gPiArCVJURV9BU1NF UlQobXAgIT0gTlVMTCk7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwlydGVfbWVtcG9vbF90cmFjZV9j YWNoZV96Y19wdXRfYnVsayhjYWNoZSwgbXAsIG4pOw0KPiA+ID4gPiArCXJldHVybiBfX3J0ZV9t ZW1wb29sX2NhY2hlX3pjX3B1dF9idWxrKGNhY2hlLCBtcCwgbik7DQo+ID4gPiA+ICt9DQo+ID4g PiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogQHdhcm5pbmcNCj4gPiA+ID4gKyAqIEBi IEVYUEVSSU1FTlRBTDogVGhpcyBBUEkgbWF5IGNoYW5nZSwgb3IgYmUgcmVtb3ZlZCwgd2l0aG91 dA0KPiA+ID4gcHJpb3Igbm90aWNlLg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIFplcm8tY29w eSB1bi1wdXQgb2JqZWN0cyBpbiBhIHVzZXItb3duZWQgbWVtcG9vbCBjYWNoZS4NCj4gPiA+ID4g KyAqDQo+ID4gPiA+ICsgKiBAcGFyYW0gY2FjaGUNCj4gPiA+ID4gKyAqICAgQSBwb2ludGVyIHRv IHRoZSBtZW1wb29sIGNhY2hlLg0KPiA+ID4gPiArICogQHBhcmFtIG4NCj4gPiA+ID4gKyAqICAg VGhlIG51bWJlciBvZiBvYmplY3RzIG5vdCBwdXQgaW4gdGhlIG1lbXBvb2wgY2FjaGUgYWZ0ZXIN Cj4gPiA+IGNhbGxpbmcNCj4gPiA+ID4gKyAqICAgcnRlX21lbXBvb2xfY2FjaGVfemNfcHV0X2J1 bGsoKS4NCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gPiA+ ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4gPiA+ICtydGVfbWVtcG9vbF9j YWNoZV96Y19wdXRfcmV3aW5kKHN0cnVjdCBydGVfbWVtcG9vbF9jYWNoZSAqY2FjaGUsDQo+ID4g PiA+ICsJCXVuc2lnbmVkIGludCBuKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCVJURV9BU1NFUlQo Y2FjaGUgIT0gTlVMTCk7DQo+ID4gPiA+ICsJUlRFX0FTU0VSVChuIDw9IGNhY2hlLT5sZW4pOw0K PiA+ID4gPiArDQo+ID4gPiA+ICsJcnRlX21lbXBvb2xfdHJhY2VfY2FjaGVfemNfcHV0X3Jld2lu ZChjYWNoZSwgbik7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwljYWNoZS0+bGVuIC09IG47DQo+ID4g PiA+ICsNCj4gPiA+ID4gKwlSVEVfTUVNUE9PTF9DQUNIRV9TVEFUX0FERChjYWNoZSwgcHV0X29i anMsIChpbnQpLW4pOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKioNCj4gPiA+ ID4gKyAqIEB3YXJuaW5nDQo+ID4gPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IFRoaXMgQVBJIG1h eSBjaGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQNCj4gPiA+IHByaW9yIG5vdGljZS4NCj4g PiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBaZXJvLWNvcHkgZ2V0IG9iamVjdHMgZnJvbSBhIHVzZXIt b3duZWQgbWVtcG9vbCBjYWNoZSBiYWNrZWQNCj4gYnkNCj4gPiA+IHRoZSBzcGVjaWZpZWQgbWVt cG9vbC4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBAcGFyYW0gY2FjaGUNCj4gPiA+ID4gKyAq ICAgQSBwb2ludGVyIHRvIHRoZSBtZW1wb29sIGNhY2hlLg0KPiA+ID4gPiArICogQHBhcmFtIG1w DQo+ID4gPiA+ICsgKiAgIEEgcG9pbnRlciB0byB0aGUgbWVtcG9vbC4NCj4gPiA+ID4gKyAqIEBw YXJhbSBuDQo+ID4gPiA+ICsgKiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBwcmVmZXRjaCBp bnRvIHRoZSBtZW1wb29sIGNhY2hlLg0KPiA+ID4NCj4gPiA+IFdoeSBub3QgJ2dldCcgaW5zdGVh ZCBvZiAncHJlZmV0Y2gnPw0KPiA+DQo+ID4gVGhpcyB3YXMgbXkgdGhpbmtpbmc6DQo+ID4NCj4g PiBUaGUgZnVuY3Rpb24gInByZWZldGNoZXMiIHRoZSBvYmplY3RzIGludG8gdGhlIGNhY2hlLiBJ dCBpcyB0aGUNCj4gYXBwbGljYXRpb24gaXRzZWxmIHRoYXQgImdldHMiIHRoZSBvYmplY3RzIGZy b20gdGhlIGNhY2hlIGFmdGVyIGhhdmluZw0KPiA+IGNhbGxlZCB0aGUgZnVuY3Rpb24uDQo+ID4g WW91IG1pZ2h0IGFsc28gbm90aWNlIHRoYXQgdGhlIG4gcGFyYW1ldGVyIGZvciB0aGUgemNfcHV0 KCkgZnVuY3Rpb24NCj4gaXMgZGVzY3JpYmVkIGFzICJ0byBiZSBwdXQiIChmdXR1cmUpLCBub3Qg InRvIHB1dCIgKG5vdykgaW4gdGhlDQo+ID4gY2FjaGUuDQo+ID4NCj4gPiBPbiB0aGUgb3RoZXIg aGFuZCwgSSBjaG9zZSAiWmVyby1jb3B5IGdldCIgZm9yIHRoZSBmdW5jdGlvbiBoZWFkbGluZQ0K PiB0byBrZWVwIGl0IHNpbXBsZS4NCj4gPg0KPiA+IElmIHlvdSB0aGluayAiZ2V0IiBpcyBhIG1v cmUgY29ycmVjdCBkZXNjcmlwdGlvbiBvZiB0aGUgbiBwYXJhbWV0ZXIsDQo+IEkgY2FuIGNoYW5n ZSBpdC4NCj4gPg0KPiA+IEFsdGVybmF0aXZlbHksIEkgY2FuIHVzZSB0aGUgc2FtZSBzdHlsZSBh cyB6Y19wdXQoKSwgaS5lLiAidG8gYmUNCj4gZ290dGVuIGZyb20gdGhlIG1lbXBvb2wgY2FjaGUi IC0gYnV0IHRoYXQgd291bGQgcmVxdWlyZSBpbnB1dCBmcm9tIGENCj4gPiBuYXRpdmVseSBFbmds aXNoIHNwZWFraW5nIHBlcnNvbiwgYmVjYXVzZSBEYW5pc2ggYW5kIEVuZ2xpc2ggZ3JhbW1hcg0K PiBpcyB2ZXJ5IGRpZmZlcmVudCwgYW5kIEkgYW0gaGlnaGx5IHVuY2VydGFpbiBhYm91dCBteSBF bmdsaXNoDQo+ID4gZ3JhbW1hciBoZXJlISBJIG9yaWdpbmFsbHkgY29uc2lkZXJlZCB0aGlzIHBo cmFzZSwgYnV0IGNvbmNsdWRlZCB0aGF0DQo+IHRoZSAicHJlZmV0Y2giIGRlc2NyaXB0aW9uIHdh cyBlYXNpZXIgdG8gdW5kZXJzdGFuZCAtIGVzcGVjaWFsbHkNCj4gPiBmb3Igbm9uLW5hdGl2ZSBF bmdsaXNoIHJlYWRlcnMuDQo+IA0KPiBGb3IgbWUgJ3ByZWZldGNoJyBzZWVtcyBhIGJpdCB1bmNs ZWFyIGluIHRoYXQgc2l0dWF0aW9uLi4uDQo+IFByb2JhYmx5OiAibnVtYmVyIG9mIG9iamVjdHMg dGhhdCB1c2VyIHBsYW5zIHRvIGV4dHJhY3QgZnJvbSB0aGUNCj4gY2FjaGUiPw0KPiBCdXQgYWdh aW4sIEkgYW0gbm90IG5hdGl2ZSBFbmdsaXNoIHNwZWFrZXIgdG9vLCBzbyBtaWdodCBiZSBzb21l b25lIGNhbg0KPiBzdWdnZXN0IGEgYmV0dGVyIG9wdGlvbi4NCj4gDQoNCkBCcnVjZSAob3IgYW55 IG90aGVyIG5hdGl2ZSBFbmdsaXNoIHNwZWFraW5nIHBlcnNvbiksIHlvdXIgaW5wdXQgd291bGQg YmUgYXBwcmVjaWF0ZWQgaGVyZSENCg0KPiA+ID4gPiArICogQHJldHVybg0KPiA+ID4gPiArICog ICBUaGUgcG9pbnRlciB0byB0aGUgb2JqZWN0cyBpbiB0aGUgbWVtcG9vbCBjYWNoZS4NCj4gPiA+ ID4gKyAqICAgTlVMTCBvbiBlcnJvcjsgaS5lLiB0aGUgY2FjaGUgKyB0aGUgcG9vbCBkb2VzIG5v dCBjb250YWluDQo+ICduJw0KPiA+ID4gb2JqZWN0cy4NCj4gPiA+ID4gKyAqICAgV2l0aCBydGVf ZXJybm8gc2V0IHRvIHRoZSBlcnJvciBjb2RlIG9mIHRoZSBtZW1wb29sIGRlcXVldWUNCj4gPiA+ IGZ1bmN0aW9uLA0KPiA+ID4gPiArICogICBvciBFSU5WQUwgaWYgdGhlIHJlcXVlc3QgaXRzZWxm IGlzIHRvbyBiaWcgZm9yIHRoZSBjYWNoZSwNCj4gaS5lLg0KPiA+ID4gPiArICogICBleGNlZWRz IHRoZSBjYWNoZSBmbHVzaCB0aHJlc2hvbGQuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK19fcnRl X2V4cGVyaW1lbnRhbA0KPiA+ID4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZCAq DQo+ID4gPiA+ICtydGVfbWVtcG9vbF9jYWNoZV96Y19nZXRfYnVsayhzdHJ1Y3QgcnRlX21lbXBv b2xfY2FjaGUgKmNhY2hlLA0KPiA+ID4gPiArCQlzdHJ1Y3QgcnRlX21lbXBvb2wgKm1wLA0KPiA+ ID4gPiArCQl1bnNpZ25lZCBpbnQgbikNCg0KWy4uLl0NCg0KPiA+ID4gPiBAQCAtMTM2NCwzMiAr MTU1NiwyNSBAQCBydGVfbWVtcG9vbF9kb19nZW5lcmljX3B1dChzdHJ1Y3QNCj4gcnRlX21lbXBv b2wNCj4gPiA+ICptcCwgdm9pZCAqIGNvbnN0ICpvYmpfdGFibGUsDQo+ID4gPiA+ICAgew0KPiA+ ID4gPiAgIAl2b2lkICoqY2FjaGVfb2JqczsNCj4gPiA+ID4NCj4gPiA+ID4gLQkvKiBObyBjYWNo ZSBwcm92aWRlZCAqLw0KPiA+ID4gPiAtCWlmICh1bmxpa2VseShjYWNoZSA9PSBOVUxMKSkNCj4g PiA+ID4gLQkJZ290byBkcml2ZXJfZW5xdWV1ZTsNCj4gPiA+ID4gKwkvKiBObyBjYWNoZSBwcm92 aWRlZD8gKi8NCj4gPiA+ID4gKwlpZiAodW5saWtlbHkoY2FjaGUgPT0gTlVMTCkpIHsNCj4gPiA+ ID4gKwkJLyogSW5jcmVtZW50IHN0YXRzIG5vdywgYWRkaW5nIGluIG1lbXBvb2wgYWx3YXlzDQo+ IHN1Y2NlZWRzLg0KPiA+ID4gKi8NCj4gPiA+ID4gKwkJUlRFX01FTVBPT0xfU1RBVF9BREQobXAs IHB1dF9idWxrLCAxKTsNCj4gPiA+ID4gKwkJUlRFX01FTVBPT0xfU1RBVF9BREQobXAsIHB1dF9v YmpzLCBuKTsNCj4gPiA+ID4NCj4gPiA+ID4gLQkvKiBpbmNyZW1lbnQgc3RhdCBub3csIGFkZGlu ZyBpbiBtZW1wb29sIGFsd2F5cyBzdWNjZXNzICovDQo+ID4gPiA+IC0JUlRFX01FTVBPT0xfQ0FD SEVfU1RBVF9BREQoY2FjaGUsIHB1dF9idWxrLCAxKTsNCj4gPiA+ID4gLQlSVEVfTUVNUE9PTF9D QUNIRV9TVEFUX0FERChjYWNoZSwgcHV0X29ianMsIG4pOw0KPiA+ID4gPiArCQlnb3RvIGRyaXZl cl9lbnF1ZXVlOw0KPiA+ID4gPiArCX0NCj4gPiA+ID4NCj4gPiA+ID4gLQkvKiBUaGUgcmVxdWVz dCBpdHNlbGYgaXMgdG9vIGJpZyBmb3IgdGhlIGNhY2hlICovDQo+ID4gPiA+IC0JaWYgKHVubGlr ZWx5KG4gPiBjYWNoZS0+Zmx1c2h0aHJlc2gpKQ0KPiA+ID4gPiAtCQlnb3RvIGRyaXZlcl9lbnF1 ZXVlX3N0YXRzX2luY3JlbWVudGVkOw0KPiA+ID4gPiArCS8qIFByZXBhcmUgdG8gYWRkIHRoZSBv YmplY3RzIHRvIHRoZSBjYWNoZS4gKi8NCj4gPiA+ID4gKwljYWNoZV9vYmpzID0gX19ydGVfbWVt cG9vbF9jYWNoZV96Y19wdXRfYnVsayhjYWNoZSwgbXAsIG4pOw0KPiA+ID4gPg0KPiA+ID4gPiAt CS8qDQo+ID4gPiA+IC0JICogVGhlIGNhY2hlIGZvbGxvd3MgdGhlIGZvbGxvd2luZyBhbGdvcml0 aG06DQo+ID4gPiA+IC0JICogICAxLiBJZiB0aGUgb2JqZWN0cyBjYW5ub3QgYmUgYWRkZWQgdG8g dGhlIGNhY2hlIHdpdGhvdXQNCj4gPiA+IGNyb3NzaW5nDQo+ID4gPiA+IC0JICogICAgICB0aGUg Zmx1c2ggdGhyZXNob2xkLCBmbHVzaCB0aGUgY2FjaGUgdG8gdGhlDQo+IGJhY2tlbmQuDQo+ID4g PiA+IC0JICogICAyLiBBZGQgdGhlIG9iamVjdHMgdG8gdGhlIGNhY2hlLg0KPiA+ID4gPiAtCSAq Lw0KPiA+ID4gPiArCS8qIFRoZSByZXF1ZXN0IGl0c2VsZiBpcyB0b28gYmlnIGZvciB0aGUgY2Fj aGU/ICovDQo+ID4gPiA+ICsJaWYgKHVubGlrZWx5KGNhY2hlX29ianMgPT0gTlVMTCkpIHsNCj4g PiA+ID4gKwkJLyogSW5jcmVtZW50IHN0YXRzIG5vdywgYWRkaW5nIGluIG1lbXBvb2wgYWx3YXlz DQo+IHN1Y2NlZWRzLg0KPiA+ID4gKi8NCj4gPiA+ID4gKwkJUlRFX01FTVBPT0xfQ0FDSEVfU1RB VF9BREQoY2FjaGUsIHB1dF9idWxrLCAxKTsNCj4gPiA+ID4gKwkJUlRFX01FTVBPT0xfQ0FDSEVf U1RBVF9BREQoY2FjaGUsIHB1dF9vYmpzLCBuKTsNCj4gPiA+DQo+ID4gPiBTaG91bGRuJ3QgaXQg YmUgUlRFX01FTVBPT0xfU1RBVF9BREQoKSBoZXJlPw0KPiA+DQo+ID4gSSBjYW4gc2VlIHdoeSB5 b3UgYXJlIHdvbmRlcmluZywgYnV0IHRoZSBhbnN3ZXIgaXMgbm8uIFRoZSBzdGF0aXN0aWNzDQo+ IGluIG1lbXBvb2wgY2FjaGUgYXJlIG5vdCByZWxhdGVkIHRvIHRoZSBjYWNoZSwgdGhleSBhcmUg cmVsYXRlZA0KPiA+IHRvIHRoZSBtZW1wb29sOyB0aGV5IGFyZSB0aGVyZSB0byBwcm92aWRlIGZh c3RlciBwZXItbGNvcmUgdXBkYXRlDQo+IGFjY2VzcyBbMV0uDQo+ID4NCj4gPiBbMV06DQo+IGh0 dHBzOi8vZWxpeGlyLmJvb3RsaW4uY29tL2RwZGsvdjIyLjExLjEvc291cmNlL2xpYi9tZW1wb29s L3J0ZV9tZW1wb29sCQ0KPiAuaCNMOTQNCj4gDQo+IEJ1dCAgdGhlIGNvbmRpdGlvbiBhYm92ZToN Cj4gaWYgKHVubGlrZWx5KGNhY2hlX29ianMgPT0gTlVMTCkpDQo+IG1lYW5zIHRoYXQgbWUgY2Fu J3QgcHV0IHRoZXNlIG9iamVjdCB0byB0aGUgY2FjaGUgYW5kIGhhdmUgdG8gcHV0DQo+IG9iamVj dHMgc3RyYWlnaHQgdG8gdGhlIHBvb2wgKHNraXBwaW5nIGNhY2hlIGNvbXBsZXRlbHkpLCByaWdo dD8NCg0KQ29ycmVjdC4NCg0KPiBJZiBzbywgdGhlbiB3aHkgdG8gdXBkYXRlIGNhY2hlIHN0YXRz IGluc3RlYWQgb2YgcG9vbCBzdGF0cz8NCg0KQmVjYXVzZSB1cGRhdGluZyB0aGUgc3RhdHMgaW4g dGhlIGNhY2hlIHN0cnVjdHVyZSBpcyBmYXN0ZXIgdGhhbiB1cGRhdGluZyB0aGUgc3RhdHMgaW4g dGhlIHBvb2wgc3RydWN0dXJlLiBSZWZlciB0byB0aGUgdHdvIG1hY3JvczogUlRFX01FTVBPT0xf U1RBVF9BREQoKSBbMl0gaXMgZWZmZWN0aXZlbHkgZml2ZSBsaW5lcyBvZiBjb2RlLCBidXQgUlRF X01FTVBPT0xfQ0FDSEVfU1RBVF9BREQoY2FjaGUsIG5hbWUsIG4pIFszXSBpcyBhIG9uZS1saW5l cjogKChjYWNoZSktPnN0YXRzLm5hbWUgKz0gKG4pKS4NCg0KWzJdOiBodHRwczovL2VsaXhpci5i b290bGluLmNvbS9kcGRrL3YyMi4xMS4xL3NvdXJjZS9saWIvbWVtcG9vbC9ydGVfbWVtcG9vbC5o I0wzMjUNClszXTogaHR0cHM6Ly9lbGl4aXIuYm9vdGxpbi5jb20vZHBkay92MjIuMTEuMS9zb3Vy Y2UvbGliL21lbXBvb2wvcnRlX21lbXBvb2wuaCNMMzQ4DQoNCkFuZCB0byByZWl0ZXJhdGUgdGhh dCB0aGlzIGlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yIGhlcmUsIEkgd2lsbCByZXBocmFzZSBteSBw cmV2aW91cyByZXNwb25zZTogVGhlIHN0YXRzIGtlcHQgaW4gdGhlIGNhY2hlIGFyZSBwYXJ0IG9m IHRoZSBwb29sIHN0YXRzLCB0aGV5IGFyZSBub3Qgc3RhdHMgZm9yIHRoZSBjYWNoZSBpdHNlbGYu DQoNCj4gPiA+ID4NCj4gPiA+ID4gLQlpZiAoY2FjaGUtPmxlbiArIG4gPD0gY2FjaGUtPmZsdXNo dGhyZXNoKSB7DQo+ID4gPiA+IC0JCWNhY2hlX29ianMgPSAmY2FjaGUtPm9ianNbY2FjaGUtPmxl bl07DQo+ID4gPiA+IC0JCWNhY2hlLT5sZW4gKz0gbjsNCj4gPiA+ID4gLQl9IGVsc2Ugew0KPiA+ ID4gPiAtCQljYWNoZV9vYmpzID0gJmNhY2hlLT5vYmpzWzBdOw0KPiA+ID4gPiAtCQlydGVfbWVt cG9vbF9vcHNfZW5xdWV1ZV9idWxrKG1wLCBjYWNoZV9vYmpzLCBjYWNoZS0NCj4gPmxlbik7DQo+ ID4gPiA+IC0JCWNhY2hlLT5sZW4gPSBuOw0KPiA+ID4gPiArCQlnb3RvIGRyaXZlcl9lbnF1ZXVl Ow0KPiA+ID4gPiAgIAl9DQo+ID4gPiA+DQo+ID4gPiA+ICAgCS8qIEFkZCB0aGUgb2JqZWN0cyB0 byB0aGUgY2FjaGUuICovDQoNCg==