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 929E943C09; Tue, 27 Feb 2024 17:52:01 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6953A4027D; Tue, 27 Feb 2024 17:52:01 +0100 (CET) Received: from dkmailrelay1.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id 593A640150 for ; Tue, 27 Feb 2024 17:52:00 +0100 (CET) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesys.local [192.168.4.10]) by dkmailrelay1.smartsharesystems.com (Postfix) with ESMTP id 3766422037; Tue, 27 Feb 2024 17:52:00 +0100 (CET) Content-class: urn:content-classes:message Subject: RE: [RFC v4 1/6] eal: add static per-lcore memory allocation facility MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Date: Tue, 27 Feb 2024 17:51:59 +0100 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35E9F27C@smartserver.smartshare.dk> In-Reply-To: X-MimeOLE: Produced By Microsoft Exchange V6.5 X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [RFC v4 1/6] eal: add static per-lcore memory allocation facility Thread-Index: AdppmeVhOJqVB7f2TOqi0GzqxRHgWAAASOGw References: <20240220084908.488252-2-mattias.ronnblom@ericsson.com> <20240225150330.517225-1-mattias.ronnblom@ericsson.com> <20240225150330.517225-2-mattias.ronnblom@ericsson.com> <98CBD80474FA8B44BF855DF32C47DC35E9F270@smartserver.smartshare.dk> <98CBD80474FA8B44BF855DF32C47DC35E9F278@smartserver.smartshare.dk> From: =?UTF-8?B?TW9ydGVuIEJyw7hydXA=?= To: =?UTF-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= , =?UTF-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= , Cc: "Stephen Hemminger" 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 PiBGcm9tOiBNYXR0aWFzIFLDtm5uYmxvbSBbbWFpbHRvOmhvZm9yc0BseXNhdG9yLmxpdS5zZV0N Cj4gU2VudDogVHVlc2RheSwgMjcgRmVicnVhcnkgMjAyNCAxNy4yOA0KPiANCj4gT24gMjAyNC0w Mi0yNyAxNjowNSwgTW9ydGVuIEJyw7hydXAgd3JvdGU6DQo+ID4+IEZyb206IE1hdHRpYXMgUsO2 bm5ibG9tIFttYWlsdG86aG9mb3JzQGx5c2F0b3IubGl1LnNlXQ0KPiA+PiBTZW50OiBUdWVzZGF5 LCAyNyBGZWJydWFyeSAyMDI0IDE0LjQ0DQo+ID4+DQo+ID4+IE9uIDIwMjQtMDItMjcgMTA6NTgs IE1vcnRlbiBCcsO4cnVwIHdyb3RlOg0KPiA+Pj4+IEZyb206IE1hdHRpYXMgUsO2bm5ibG9tIFtt YWlsdG86bWF0dGlhcy5yb25uYmxvbUBlcmljc3Nvbi5jb21dDQo+ID4+Pj4gU2VudDogU3VuZGF5 LCAyNSBGZWJydWFyeSAyMDI0IDE2LjAzDQo+ID4+Pg0KPiA+Pj4gWy4uLl0NCj4gPj4+DQo+ID4+ Pj4gK3N0YXRpYyB2b2lkICoNCj4gPj4+PiArbGNvcmVfdmFyX2FsbG9jKHNpemVfdCBzaXplLCBz aXplX3QgYWxpZ24pDQo+ID4+Pj4gK3sNCj4gPj4+PiArCXZvaWQgKmhhbmRsZTsNCj4gPj4+PiAr CXZvaWQgKnZhbHVlOw0KPiA+Pj4+ICsNCj4gPj4+PiArCW9mZnNldCA9IFJURV9BTElHTl9DRUlM KG9mZnNldCwgYWxpZ24pOw0KPiA+Pj4+ICsNCj4gPj4+PiArCWlmIChvZmZzZXQgKyBzaXplID4g UlRFX01BWF9MQ09SRV9WQVIpIHsNCj4gPj4+DQo+ID4+PiBUaGlzIHdvdWxkIGJlIHRoZSB1c3Vh bCBjb21wYXJpc29uOg0KPiA+Pj4gaWYgKGxjb3JlX2J1ZmZlciA9PSBOVUxMKSB7DQo+ID4+Pg0K PiA+Pj4+ICsJCWxjb3JlX2J1ZmZlciA9IGFsaWduZWRfYWxsb2MoUlRFX0NBQ0hFX0xJTkVfU0la RSwNCj4gPj4+PiArCQkJCQkgICAgIExDT1JFX0JVRkZFUl9TSVpFKTsNCj4gPj4+PiArCQlSVEVf VkVSSUZZKGxjb3JlX2J1ZmZlciAhPSBOVUxMKTsNCj4gPj4+PiArDQo+ID4+Pj4gKwkJb2Zmc2V0 ID0gMDsNCj4gPj4+PiArCX0NCj4gPj4+DQo+ID4+PiBbLi4uXQ0KPiA+Pj4NCj4gPj4+PiArLyoq DQo+ID4+Pj4gKyAqIERlZmluZSBhIGxjb3JlIHZhcmlhYmxlIGhhbmRsZS4NCj4gPj4+PiArICoN Cj4gPj4+PiArICogVGhpcyBtYWNybyBkZWZpbmVzIGEgdmFyaWFibGUgd2hpY2ggaXMgdXNlZCBh cyBhIGhhbmRsZSB0bw0KPiBhY2Nlc3MNCj4gPj4+PiArICogdGhlIHZhcmlvdXMgcGVyLWxjb3Jl IGlkIGluc3RhbmNlcyBvZiBhIHBlci1sY29yZSBpZCB2YXJpYWJsZS4NCj4gPj4+PiArICoNCj4g Pj4+PiArICogVGhlIGFpbSB3aXRoIHRoaXMgbWFjcm8gaXMgdG8gbWFrZSBjbGVhciBhdCB0aGUg cG9pbnQgb2YNCj4gPj4+PiArICogZGVjbGFyYXRpb24gdGhhdCB0aGlzIGlzIGFuIGxjb3JlIGhh bmRsZXIsIHJhdGhlciB0aGFuIGENCj4gcmVndWxhcg0KPiA+Pj4+ICsgKiBwb2ludGVyLg0KPiA+ Pj4+ICsgKg0KPiA+Pj4+ICsgKiBBZGQgQGIgc3RhdGljIGFzIGEgcHJlZml4IGluIGNhc2UgdGhl IGxjb3JlIHZhcmlhYmxlIGFyZSBvbmx5DQo+IHRvDQo+ID4+IGJlDQo+ID4+Pj4gKyAqIGFjY2Vz c2VkIGZyb20gYSBwYXJ0aWN1bGFyIHRyYW5zbGF0aW9uIHVuaXQuDQo+ID4+Pj4gKyAqLw0KPiA+ Pj4+ICsjZGVmaW5lIFJURV9MQ09SRV9WQVJfSEFORExFKHR5cGUsIG5hbWUpCVwNCj4gPj4+PiAr CVJURV9MQ09SRV9WQVJfSEFORExFX1RZUEUodHlwZSkgbmFtZQ0KPiA+Pj4+ICsNCj4gPj4+DQo+ ID4+PiBUaGUgcGFyYW1ldGVyIGlzICJuYW1lIiBoZXJlLCBhbmQgImhhbmRsZSIgaW4gb3RoZXIg bWFjcm9zLg0KPiA+Pj4gSnVzdCBtZW50aW9uaW5nIHRvIG1ha2Ugc3VyZSB5b3UgdGhvdWdodCBh Ym91dCBpdC4NCj4gPj4+DQo+ID4+Pj4gKy8qKg0KPiA+Pj4+ICsgKiBHZXQgcG9pbnRlciB0byBs Y29yZSB2YXJpYWJsZSBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgbGNvcmUNCj4gPj4gaWQu DQo+ID4+Pj4gKyAqLw0KPiA+Pj4+ICsjZGVmaW5lIFJURV9MQ09SRV9WQVJfTENPUkVfUFRSKGxj b3JlX2lkLCBoYW5kbGUpDQo+IAlcDQo+ID4+Pj4gKwkoKHR5cGVvZihoYW5kbGUpKV9fcnRlX2xj b3JlX3Zhcl9sY29yZV9wdHIobGNvcmVfaWQsDQo+IGhhbmRsZSkpDQo+ID4+Pj4gKw0KPiA+Pj4+ ICsvKioNCj4gPj4+PiArICogR2V0IHZhbHVlIG9mIGEgbGNvcmUgdmFyaWFibGUgaW5zdGFuY2Ug b2YgdGhlIHNwZWNpZmllZCBsY29yZQ0KPiBpZC4NCj4gPj4+PiArICovDQo+ID4+Pj4gKyNkZWZp bmUgUlRFX0xDT1JFX1ZBUl9MQ09SRV9HRVQobGNvcmVfaWQsIGhhbmRsZSkJXA0KPiA+Pj4+ICsJ KCooUlRFX0xDT1JFX1ZBUl9MQ09SRV9QVFIobGNvcmVfaWQsIGhhbmRsZSkpKQ0KPiA+Pj4+ICsN Cj4gPj4+PiArLyoqDQo+ID4+Pj4gKyAqIFNldCB0aGUgdmFsdWUgb2YgYSBsY29yZSB2YXJpYWJs ZSBpbnN0YW5jZSBvZiB0aGUgc3BlY2lmaWVkDQo+IGxjb3JlDQo+ID4+IGlkLg0KPiA+Pj4+ICsg Ki8NCj4gPj4+PiArI2RlZmluZSBSVEVfTENPUkVfVkFSX0xDT1JFX1NFVChsY29yZV9pZCwgaGFu ZGxlLCB2YWx1ZSkNCj4gCVwNCj4gPj4+PiArCSgqKFJURV9MQ09SRV9WQVJfTENPUkVfUFRSKGxj b3JlX2lkLCBoYW5kbGUpKSA9ICh2YWx1ZSkpDQo+ID4+Pg0KPiA+Pj4gSSBzdGlsbCB0aGluayBS VEVfTENPUkVfVkFSW19MQ09SRV1fUFRSKCkgc3VmZmljZSwgYW5kDQo+ID4+IFJURV9MQ09SRV9W QVJbX0xDT1JFXV9HRVQvU0VUIGFyZSBzdXBlcmZsdW91cy4NCj4gPj4+IEJ1dCBJIGRvbid0IGlu c2lzdCBvbiB0aGVpciByZW1vdmFsLiA6LSkNCj4gPj4+DQo+ID4+DQo+ID4+IEknbGwgcmVtb3Zl IHRoZW0uIE9uZSBjYW4gYWx3YXlzIGFkZCB0aGVtIGxhdGVyLiBOb3RoaW5nIEkndmUgc2VlbiBp bg0KPiA+PiB0aGUgRFBESyBjb2RlIGJhc2Ugc28gZmFyIGhhcyBiZWVuIGNhbGxlZCBmb3IgdGhl aXIgdXNlLg0KPiA+Pg0KPiA+PiBTaG91bGQgdGhlIFJURV9MQ09SRV9WQVJfUFRSKCkgYmUgcmVu YW1lZCBSVEVfTENPUkVfVkFSX1ZBTFVFKCkgKGFuZA0KPiA+PiBzdGlsbCByZXR1cm4gYSBwb2lu dGVyLCBvYnZpb3VzbHkpPyAiUFRSIiBzZWVtcyBhIGxpdHRsZSBzdXBlcmZsdW91cw0KPiA+PiAo SHVuZ2FyaWFuKS4gIlJURV9MQ09SRV9WQVIoKSIgd291bGQgYmUgc2hvcnQsIGJ1dCBub3QgdmVy eQ0KPiBkZXNjcmlwdGl2ZS4NCj4gPg0KPiA+IEdvb2QgcXVlc3Rpb24uLi4NCj4gPg0KPiA+IEkg d291bGQgdHJ5IHRvIGFsaWduIHRoaXMgbmFtZSBhbmQgdGhlIG5hbWUgb2YgdGhlIGFzc29jaWF0 ZWQgZm9yZWFjaA0KPiBtYWNybywgY3VycmVudGx5IFJURV9MQ09SRV9WQVJfRk9SRUFDSF9WQUxV RSh2YXIsIGhhbmRsZSkuDQo+ID4NCj4gPiBJdCBzZWVtcyBjb25mdXNpbmcgdG8gaGF2ZSBhIG1h Y3JvIG5hbWVkIF9WQUxVRSgpIHJldHVybmluZyBhIHBvaW50ZXIuDQo+ID4gKFdoaWNoIGlzIHdo eSBJIGFsc28gZGlzbGlrZSB0aGUgZm9yZWFjaCBtYWNybydzIGN1cnJlbnQgbmFtZSBhbmQNCj4g InZhciIgcGFyYW1ldGVyIG5hbWUuKQ0KPiA+DQo+IA0KPiBOb3Qgc3VyZSBJIGFncmVlLiBJbiBD LCB5b3Ugb2Z0ZW4gYXNrIGZvciBhIHZhbHVlIGFuZCBnZXQgYSBwb2ludGVyIHRvDQo+IHRoYXQg dmFsdWUuIEknbGwgbGVhdmUgaXQgVkFMVUUoKSBmb3Igbm93Lg0KDQpZZXMsIGZvcGVuKCkgaXMg YW4gZXhhbXBsZSBvZiB0aGlzLg0KQnV0IHN1Y2ggZnVuY3Rpb25zIGRvbid0IGhhdmUgVkFMVUUg aW4gdGhlaXIgbmFtZXMuDQooSSdtIG5vdCBzbyB3b3JyaWVkIGFib3V0IHRoZSAidmFyIiBwYXJh bWV0ZXIgbmFtZSBiZWluZyBjb25mdXNpbmcuKQ0KDQpZb3UgY2FuIGxlYXZlIGl0IFZBTFVFIGZv ciBub3csIGp1c3Qga2VlcCBhbiBvcGVuIG1pbmQgZm9yIGNoYW5naW5nIGl0LiA6LSkNCg0KPiAN Cj4gPiBJZiBpdCBpcyBzdXBwb3NlZCB0byBiZSBmcmVxdWVudGx5IHVzZWQsIGEgc2hvcnRlciBu YW1lIGlzIHByZWZlcmFibGUuDQo+ID4gV2hpY2ggbGVhbnMgdG93YXJkcyBSVEVfTENPUkVfVkFS KCkuDQo+ID4NCj4gPiBBbmQgdGhlbiBSVEVfRk9SRUFDSF9MQ09SRV9WQVIoaXRlcmF0b3IsIGhh bmRsZSkgb3INCj4gUlRFX0xDT1JFX1ZBUl9GT1JFQUNIKGl0ZXJhdG9yLCBoYW5kbGUpLg0KPiA+ DQo+IA0KPiBSVEVfTENPUkVfVkFSX0ZPUkVBQ0ggd2FzIHRoZSBvcmlnaW5hbCBuYW1lLCB3aGlj aCB3YXMgY2hhbmdlZCBiZWNhdXNlDQo+IGl0IHdhcyBjb25mdXNpbmdseSBjbG9zZSB0byBSVEVf TENPUkVfRk9SRUFDSCgpLCBidXQgaGFkIGEgZGlmZmVyZW50DQo+IHNlbWFudGljcyBpbiByZWdh cmRzIHRvIHdoaWNoIGxjb3JlIGlkcyBhcmUgaXRlcmF0ZWQgb3ZlciAoRUFMIHRocmVhZHMNCj4g b25seSwgdmVyc3VzIGFsbCBsY29yZSBpZHMpLg0KDQpJIGtub3cgSSB3YXMgZ29pbmcgaW4gY2ly Y2xlcyBoZXJlLg0KUGVyaGFwcyB3aGVuIHdlIGdldCB1c2VkIHRvIHRoZSBsY29yZSB2YXJpYWJs ZXMsIHRoZSBzaW1pbGFyIG5hbWUgbWlnaHQgbm90IGJlIGNvbmZ1c2luZyBhbnltb3JlLiBJIHN1 cHBvc2UgdGhpcyBoYXBwZW5lZCB0byBtZSBkdXJpbmcgdGhlIHJldmlldyBkaXNjdXNzaW9ucy4N CkkgZG9uJ3QgaGF2ZSBhIHNvbGlkIGFuc3dlciwgc28gSSdtIHRocm93aW5nIHRoZSBiYWxsIGFy b3VuZCB0byBzZWUgaG93IGl0IGJvdW5jZXMuDQoNCj4gDQo+ID4gQnV0IHRoZW4gaXQgaXMgbm90 IG9idmlvdXMgZnJvbSB0aGUgbmFtZSB0aGF0IHRoZXkgb3BlcmF0ZSBvbg0KPiBwb2ludGVycy4N Cj4gPiBXZSBkb24ndCB1c2UgSHVuZ2FyaWFuIHN0eWxlIGluIERQREssIHNvIHBlcmhhcHMgdGhh dCBpcyBhY2NlcHRhYmxlLg0KPiA+DQo+ID4NCj4gPiBZb3VyIGNvbmNsdXNpb24gdGhhdCBHRVQv U0VUIGFyZSBub3QgZ2VuZXJhbGx5IHJlcXVpcmVkIGluc3BpcmVkIG1lDQo+IGZvciBhbm90aGVy IGlkZWEuLi4NCj4gPiBNYXliZSByZXR1cm5pbmcgYSBwb2ludGVyIGlzIG5vdCB0aGUgcmlnaHQg dGhpbmcgdG8gZG8hDQo+ID4NCj4gPiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG9ic3RhY2xl cyB0byBnZW5lcmFsbHkgZGVyZWZlcmVuY2luZyB0aGUNCj4gbGNvcmUgdmFyaWFibGUgcG9pbnRl ciwgbGlrZSB0aGlzOg0KPiA+DQo+ID4gI2RlZmluZSBSVEVfTENPUkVfVkFSX0xDT1JFKGxjb3Jl X2lkLCBoYW5kbGUpIFwNCj4gPiAJKCoodHlwZW9mKGhhbmRsZSkpX19ydGVfbGNvcmVfdmFyX2xj b3JlX3B0cihsY29yZV9pZCwgaGFuZGxlKSkNCj4gPg0KPiA+IEl0IHdvdWxkIHdvcmsgZm9yIGJv dGggZ2V0IGFuZCBzZXQ6DQo+ID4gUlRFX0xDT1JFX1ZBUihmb28pID0gUlRFX0xDT1JFX1ZBUihi YXIpOw0KPiA+DQo+ID4gQW5kIGFsc28gZm9yIGZ1bmN0aW9ucyBiZWluZyBwYXNzZWQgdGhlIGFk ZHJlc3Mgb2YgdGhlIHZhcmlhYmxlLg0KPiA+IEUuZy4gbWVtc2V0KCZSVEVfTENPUkVfVkFSKGZv byksIC4uLikgd291bGQgZXhwYW5kIHRvOg0KPiA+IG1lbXNldCgmKCoodHlwZW9mKGZvbykpX19y dGVfbGNvcmVfdmFyX2xjb3JlX3B0cihydGVfbGNvcmVfaWQoKSwNCj4gZm9vKSksIC4uLik7DQo+ ID4NCj4gPg0KPiANCj4gVGhlIHZhbHVlIGlzIHVzdWFsbHkgYWNjZXNzZWQgYnkgbWVhbnMgb2Yg YSBwb2ludGVyLCBzbyBubyBuZWVkIHRvDQo+IHJldHVybiAqcG9pbnRlci4NCg0KT0suIEkgc3Vw cG9zZSB5b3UgaGF2ZSBhIHByZXR0eSBnb29kIG92ZXJ2aWV3IG9mIHRoZSByZWxldmFudCB1c2Ug Y2FzZXMgYnkgbm93Lg0KDQo+IA0KPiA+IE9uZSBtb3JlIHRob3VnaHQsIG5vdCByZWxhdGVkIHRv IHRoZSBhYm92ZSBkaXNjdXNzaW9uOg0KPiA+DQo+ID4gVGhlIFRMUyBwZXItbGNvcmUgdmFyaWFi bGVzIGFyZSBidWlsdCB3aXRoICJwZXJfbGNvcmVfIiBwcmVmaXggYWRkZWQNCj4gdG8gdGhlIG5h bWVzLCBsaWtlIHRoaXM6DQo+ID4gI2RlZmluZSBSVEVfREVGSU5FX1BFUl9MQ09SRSh0eXBlLCBu YW1lKSBcDQo+ID4gCV9fdGhyZWFkIF9fdHlwZW9mX18odHlwZSkgcGVyX2xjb3JlXyMjbmFtZQ0K PiA+DQo+ID4gU2hvdWxkIHRoZSBsY29yZSB2YXJpYWJsZXMgaGF2ZSBzb21ldGhpbmcgc2ltaWxh ciwgaS5lLjoNCj4gPiAjZGVmaW5lIFJURV9MQ09SRV9WQVJfSEFORExFKHR5cGUsIG5hbWUpIFwN Cj4gPiAJUlRFX0xDT1JFX1ZBUl9IQU5ETEVfVFlQRSh0eXBlKSBsY29yZV92YXJfIyNuYW1lDQo+ ID4NCj4gDQo+IEkgc3RhcnRlZCBvdXQgd2l0aCBhIHByZWZpeCwgYnV0IEkgcmVtb3ZlZCBpdCwg c2luY2UgeW91IG1heSB3YW50IHRvDQo+IGFjY2VzcyAoY29weSwgYXNzaWduKSB0aGUgaGFuZGxl ciBwb2ludGVyIGRpcmVjdGx5LCBhbmQgdGh1cyBuZWVkIHRvDQo+IGtub3cgaXQncyByZWFsIG5h bWUuIEFsc28sIEkgZGlkbid0IHNlZSB3aHkgeW91IG5lZWQgYSBwcmVmaXguDQo+IA0KPiBGb3Ig ZXhhbXBsZSwgY29uc2lkZXIgYSBzZWN0aW9uIG9mIGNvZGUgd2hlcmUgeW91IHdhbnQgdG8gdXNl IG9uZSBvZiB0d28NCj4gdmFyaWFibGVzIGRlcGVuZGluZyBvbiBjb25kaXRpb24uDQo+IA0KPiBS VEVfTENPUkVfVkFSX0hBTkRMRShhY3R1YWwsIGludCk7DQo+IA0KPiBpZiAoc29tZXRoaW5nKQ0K PiAgICAgIGFjdHVhbCA9IHNvbWVfaGFuZGxlOw0KPiBlbHNlDQo+ICAgICAgYWN0dWFsID0gc29t ZV9vdGhlcl9oYW5kbGU7DQo+IA0KPiBpbnQgKnZhbHVlID0gUlRFX0xDT1JFX1ZBUl9WQUxVRShh Y3R1YWwpOw0KPiANCj4gVGhpcyBhYm92ZSBkb2Vzbid0IHdvcmsgaWYgc29tZV9oYW5kbGUgaXMg YWN0dWFsbHkgbmFtZWQNCj4gcnRlX2xjb3JlX3Zhcl9zb21lX2hhbmRsZSBvciBzb21ldGhpbmcg bGlrZSB0aGF0Lg0KPiANCj4gSWYgeW91IHdhbnQgdG8gYWRkIGEgcHJlZml4IChmb3Igd2hpY2gg dGhlcmUgc2hvdWxkbid0IGJlIGEgbmVlZCksIHlvdQ0KPiB3b3VsZCBuZWVkIGEgbWFjcm8gUlRF X0xDT1JFX1ZBUl9OQU1FKCkgYXMgd2VsbCwgc28gdGhlIHVzZXIgY2FuIGRlcml2ZQ0KPiB0aGUg YWN0dWFsIG5hbWUgKGluY2x1ZGluZyB0aGUgcHJlZml4KS4NCg0KVGhhbmtzIGZvciB0aGUgZGV0 YWlsZWQgcmVwbHkuDQpMZXQncyBub3QgYWRkIGEgcHJlZml4Lg0KDQo+IA0KPiA+DQo+ID4+DQo+ ID4+PiBXaXRoIG9yIHdpdGhvdXQgc3VnZ2VzdGVkIGNoYW5nZXMuLi4NCj4gPj4+DQo+ID4+PiBG b3IgdGhlIHNlcmllcywNCj4gPj4+IEFja2VkLWJ5OiBNb3J0ZW4gQnLDuHJ1cCA8bWJAc21hcnRz aGFyZXN5c3RlbXMuY29tPg0KPiA+Pj4NCj4gPj4NCj4gPj4gVGhhbmtzIGZvciBhbGwgaGVscC4N Cj4gPg0KPiA+IFRoYW5rIHlvdSBmb3IgdGhlIGRldGFpbGVkIGNvbnNpZGVyYXRpb24gb2YgbXkg ZmVlZGJhY2suDQo+ID4NCg==