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 79419A0540; Tue, 8 Nov 2022 10:20:15 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6942442D26; Tue, 8 Nov 2022 10:20:15 +0100 (CET) Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by mails.dpdk.org (Postfix) with ESMTP id 4AF2F400D7 for ; Tue, 8 Nov 2022 10:20:14 +0100 (CET) Received: from frapeml500008.china.huawei.com (unknown [172.18.147.226]) by frasgout.his.huawei.com (SkyGuard) with ESMTP id 4N62Wz1bqPz6H6gp; Tue, 8 Nov 2022 17:15:59 +0800 (CST) Received: from frapeml500007.china.huawei.com (7.182.85.172) by frapeml500008.china.huawei.com (7.182.85.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Tue, 8 Nov 2022 10:20:13 +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.031; Tue, 8 Nov 2022 10:20:13 +0100 From: Konstantin Ananyev To: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= , "olivier.matz@6wind.com" , "andrew.rybchenko@oktetlabs.ru" , "mattias.ronnblom@ericsson.com" , "stephen@networkplumber.org" , "jerinj@marvell.com" , "bruce.richardson@intel.com" CC: "hofors@lysator.liu.se" , "thomas@monjalon.net" , "dev@dpdk.org" Subject: RE: [PATCH v4 3/3] mempool: use cache for frequently updated stats Thread-Topic: [PATCH v4 3/3] mempool: use cache for frequently updated stats Thread-Index: AQHY8EWGJHVmHQn4qECYwEvekL7ida40xLXw Date: Tue, 8 Nov 2022 09:20:13 +0000 Message-ID: <90e61299b47e4dd8938adf693822e3c1@huawei.com> References: <20221104111740.330-1-mb@smartsharesystems.com> <20221104120329.1219-1-mb@smartsharesystems.com> <20221104120329.1219-3-mb@smartsharesystems.com> In-Reply-To: <20221104120329.1219-3-mb@smartsharesystems.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.195.32.54] 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 DQo+IFdoZW4gYnVpbHQgd2l0aCBzdGF0cyBlbmFibGVkIChSVEVfTElCUlRFX01FTVBPT0xfU1RB VFMgZGVmaW5lZCksIHRoZQ0KPiBwZXJmb3JtYW5jZSBvZiBtZW1wb29scyB3aXRoIGNhY2hlcyBp cyBpbXByb3ZlZCBhcyBmb2xsb3dzLg0KPiANCj4gV2hlbiBhY2Nlc3Npbmcgb2JqZWN0cyBpbiB0 aGUgbWVtcG9vbCwgZWl0aGVyIHRoZSBwdXRfYnVsayBhbmQgcHV0X29ianMgb3INCj4gdGhlIGdl dF9zdWNjZXNzX2J1bGsgYW5kIGdldF9zdWNjZXNzX29ianMgc3RhdGlzdGljcyBjb3VudGVycyBh cmUgbGlrZWx5DQo+IHRvIGJlIGluY3JlbWVudGVkLg0KPiANCj4gQnkgYWRkaW5nIGFuIGFsdGVy bmF0aXZlIHNldCBvZiB0aGVzZSBjb3VudGVycyB0byB0aGUgbWVtcG9vbCBjYWNoZQ0KPiBzdHJ1 Y3R1cmUsIGFjY2Vzc2luZyB0aGUgZGVkaWNhdGVkIHN0YXRpc3RpY3Mgc3RydWN0dXJlIGlzIGF2 b2lkZWQgaW4gdGhlDQo+IGxpa2VseSBjYXNlcyB3aGVyZSB0aGVzZSBjb3VudGVycyBhcmUgaW5j cmVtZW50ZWQuDQo+IA0KPiBUaGUgdHJpY2sgaGVyZSBpcyB0aGF0IHRoZSBjYWNoZSBsaW5lIGhv bGRpbmcgdGhlIG1lbXBvb2wgY2FjaGUgc3RydWN0dXJlDQo+IGlzIGFjY2Vzc2VkIGFueXdheSwg aW4gb3JkZXIgdG8gYWNjZXNzIHRoZSAnbGVuJyBvciAnZmx1c2h0aHJlc2gnIGZpZWxkcy4NCj4g VXBkYXRpbmcgc29tZSBzdGF0aXN0aWNzIGNvdW50ZXJzIGluIHRoZSBzYW1lIGNhY2hlIGxpbmUg aGFzIGxvd2VyDQo+IHBlcmZvcm1hbmNlIGNvc3QgdGhhbiBhY2Nlc3NpbmcgdGhlIHN0YXRpc3Rp Y3MgY291bnRlcnMgaW4gdGhlIGRlZGljYXRlZA0KPiBzdGF0aXN0aWNzIHN0cnVjdHVyZSwgd2hp Y2ggcmVzaWRlcyBpbiBhbm90aGVyIGNhY2hlIGxpbmUuDQo+IA0KPiBtZW1wb29sX3BlcmZfYXV0 b3Rlc3Qgd2l0aCB0aGlzIHBhdGNoIHNob3dzIHRoZSBmb2xsb3dpbmcgaW1wcm92ZW1lbnRzIGlu DQo+IHJhdGVfcGVyc2VjLg0KPiANCj4gVGhlIGNvc3Qgb2YgZW5hYmxpbmcgbWVtcG9vbCBzdGF0 cyAod2l0aG91dCBkZWJ1ZykgYWZ0ZXIgdGhpcyBwYXRjaDoNCj4gLTYuOCAlIGFuZCAtNi43ICUs IHJlc3BlY3RpdmVseSB3aXRob3V0IGFuZCB3aXRoIGNhY2hlLg0KPiANCj4gdjQ6DQo+ICogRml4 IGNoZWNrcGF0Y2ggd2FybmluZ3M6DQo+ICAgQSBjb3VwbGUgb2YgdHlwb3MgaW4gdGhlIHBhdGNo IGRlc2NyaXB0aW9uLg0KPiAgIFRoZSBtYWNybyB0byBhZGQgdG8gYSBtZW1wb29sIGNhY2hlIHN0 YXQgdmFyaWFibGUgc2hvdWxkIG5vdCB1c2UNCj4gICBkbyB7fSB3aGlsZSAoMCkuIFBlcnNvbmFs bHksIEkgd291bGQgdGVuZCB0byBkaXNhZ3JlZSB3aXRoIHRoaXMsIGJ1dA0KPiAgIHdoYXRldmVy IGtlZXBzIHRoZSBDSSBoYXBweS4NCj4gdjM6DQo+ICogRG9uJ3QgdXBkYXRlIHRoZSBkZXNjcmlw dGlvbiBvZiB0aGUgUlRFX01FTVBPT0xfU1RBVF9BREQgbWFjcm8uDQo+ICAgVGhpcyBjaGFuZ2Ug YmVsb25ncyBpbiB0aGUgZmlyc3QgcGF0Y2ggb2YgdGhlIHNlcmllcy4NCj4gdjI6DQo+ICogTW92 ZSB0aGUgc3RhdGlzdGljcyBjb3VudGVycyBpbnRvIGEgc3RhdHMgc3RydWN0dXJlLg0KPiANCj4g U2lnbmVkLW9mZi1ieTogTW9ydGVuIEJyw7hydXAgPG1iQHNtYXJ0c2hhcmVzeXN0ZW1zLmNvbT4N Cj4gLS0tDQo+ICBsaWIvbWVtcG9vbC9ydGVfbWVtcG9vbC5jIHwgIDkgKysrKysrDQo+ICBsaWIv bWVtcG9vbC9ydGVfbWVtcG9vbC5oIHwgNjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystLS0tLS0tDQo+ICAyIGZpbGVzIGNoYW5nZWQsIDY0IGluc2VydGlvbnMoKyksIDExIGRlbGV0 aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2xpYi9tZW1wb29sL3J0ZV9tZW1wb29sLmMgYi9s aWIvbWVtcG9vbC9ydGVfbWVtcG9vbC5jDQo+IGluZGV4IGU2MjA4MTI1ZTAuLmExOGUzOWFmMDQg MTAwNjQ0DQo+IC0tLSBhL2xpYi9tZW1wb29sL3J0ZV9tZW1wb29sLmMNCj4gKysrIGIvbGliL21l bXBvb2wvcnRlX21lbXBvb2wuYw0KPiBAQCAtMTI4Niw2ICsxMjg2LDE1IEBAIHJ0ZV9tZW1wb29s X2R1bXAoRklMRSAqZiwgc3RydWN0IHJ0ZV9tZW1wb29sICptcCkNCj4gIAkJc3VtLmdldF9zdWNj ZXNzX2Jsa3MgKz0gbXAtPnN0YXRzW2xjb3JlX2lkXS5nZXRfc3VjY2Vzc19ibGtzOw0KPiAgCQlz dW0uZ2V0X2ZhaWxfYmxrcyArPSBtcC0+c3RhdHNbbGNvcmVfaWRdLmdldF9mYWlsX2Jsa3M7DQo+ ICAJfQ0KPiArCWlmIChtcC0+Y2FjaGVfc2l6ZSAhPSAwKSB7DQo+ICsJCS8qIEFkZCB0aGUgc3Rh dGlzdGljcyBzdG9yZWQgaW4gdGhlIG1lbXBvb2wgY2FjaGVzLiAqLw0KPiArCQlmb3IgKGxjb3Jl X2lkID0gMDsgbGNvcmVfaWQgPCBSVEVfTUFYX0xDT1JFOyBsY29yZV9pZCsrKSB7DQo+ICsJCQlz dW0ucHV0X2J1bGsgKz0gbXAtPmxvY2FsX2NhY2hlW2xjb3JlX2lkXS5zdGF0cy5wdXRfYnVsazsN Cj4gKwkJCXN1bS5wdXRfb2JqcyArPSBtcC0+bG9jYWxfY2FjaGVbbGNvcmVfaWRdLnN0YXRzLnB1 dF9vYmpzOw0KPiArCQkJc3VtLmdldF9zdWNjZXNzX2J1bGsgKz0gbXAtPmxvY2FsX2NhY2hlW2xj b3JlX2lkXS5zdGF0cy5nZXRfc3VjY2Vzc19idWxrOw0KPiArCQkJc3VtLmdldF9zdWNjZXNzX29i anMgKz0gbXAtPmxvY2FsX2NhY2hlW2xjb3JlX2lkXS5zdGF0cy5nZXRfc3VjY2Vzc19vYmpzOw0K PiArCQl9DQo+ICsJfQ0KPiAgCWZwcmludGYoZiwgIiAgc3RhdHM6XG4iKTsNCj4gIAlmcHJpbnRm KGYsICIgICAgcHV0X2J1bGs9JSJQUkl1NjQiXG4iLCBzdW0ucHV0X2J1bGspOw0KPiAgCWZwcmlu dGYoZiwgIiAgICBwdXRfb2Jqcz0lIlBSSXU2NCJcbiIsIHN1bS5wdXRfb2Jqcyk7DQo+IGRpZmYg LS1naXQgYS9saWIvbWVtcG9vbC9ydGVfbWVtcG9vbC5oIGIvbGliL21lbXBvb2wvcnRlX21lbXBv b2wuaA0KPiBpbmRleCBhYmZlMzRjMDVmLi5lNmViNTczNzM5IDEwMDY0NA0KPiAtLS0gYS9saWIv bWVtcG9vbC9ydGVfbWVtcG9vbC5oDQo+ICsrKyBiL2xpYi9tZW1wb29sL3J0ZV9tZW1wb29sLmgN Cj4gQEAgLTg2LDYgKzg2LDE5IEBAIHN0cnVjdCBydGVfbWVtcG9vbF9jYWNoZSB7DQo+ICAJdWlu dDMyX3Qgc2l6ZTsJICAgICAgLyoqPCBTaXplIG9mIHRoZSBjYWNoZSAqLw0KPiAgCXVpbnQzMl90 IGZsdXNodGhyZXNoOyAvKio8IFRocmVzaG9sZCBiZWZvcmUgd2UgZmx1c2ggZXhjZXNzIGVsZW1l bnRzICovDQo+ICAJdWludDMyX3QgbGVuOwkgICAgICAvKio8IEN1cnJlbnQgY2FjaGUgY291bnQg Ki8NCj4gKyNpZmRlZiBSVEVfTElCUlRFX01FTVBPT0xfU1RBVFMNCj4gKwl1aW50MzJfdCB1bnVz ZWQ7DQo+ICsJLyoNCj4gKwkgKiBBbHRlcm5hdGl2ZSBsb2NhdGlvbiBmb3IgdGhlIG1vc3QgZnJl cXVlbnRseSB1cGRhdGVkIG1lbXBvb2wgc3RhdGlzdGljcyAocGVyLWxjb3JlKSwNCj4gKwkgKiBw cm92aWRpbmcgZmFzdGVyIHVwZGF0ZSBhY2Nlc3Mgd2hlbiB1c2luZyBhIG1lbXBvb2wgY2FjaGUu DQo+ICsJICovDQo+ICsJc3RydWN0IHsNCj4gKwkJdWludDY0X3QgcHV0X2J1bGs7ICAgICAgICAg IC8qKjwgTnVtYmVyIG9mIHB1dHMuICovDQo+ICsJCXVpbnQ2NF90IHB1dF9vYmpzOyAgICAgICAg ICAvKio8IE51bWJlciBvZiBvYmplY3RzIHN1Y2Nlc3NmdWxseSBwdXQuICovDQo+ICsJCXVpbnQ2 NF90IGdldF9zdWNjZXNzX2J1bGs7ICAvKio8IFN1Y2Nlc3NmdWwgYWxsb2NhdGlvbiBudW1iZXIu ICovDQo+ICsJCXVpbnQ2NF90IGdldF9zdWNjZXNzX29ianM7ICAvKio8IE9iamVjdHMgc3VjY2Vz c2Z1bGx5IGFsbG9jYXRlZC4gKi8NCj4gKwl9IHN0YXRzOyAgICAgICAgICAgICAgICAgICAgICAg IC8qKjwgU3RhdGlzdGljcyAqLw0KPiArI2VuZGlmDQo+ICAJLyoqDQo+ICAJICogQ2FjaGUgb2Jq ZWN0cw0KPiAgCSAqDQo+IEBAIC0zMTksNiArMzMyLDIyIEBAIHN0cnVjdCBydGVfbWVtcG9vbCB7 DQo+ICAjZGVmaW5lIFJURV9NRU1QT09MX1NUQVRfQUREKG1wLCBuYW1lLCBuKSBkbyB7fSB3aGls ZSAoMCkNCj4gICNlbmRpZg0KPiANCj4gKy8qKg0KPiArICogQGludGVybmFsIFdoZW4gc3RhdHMg aXMgZW5hYmxlZCwgc3RvcmUgc29tZSBzdGF0aXN0aWNzLg0KPiArICoNCj4gKyAqIEBwYXJhbSBj YWNoZQ0KPiArICogICBQb2ludGVyIHRvIHRoZSBtZW1vcnkgcG9vbCBjYWNoZS4NCj4gKyAqIEBw YXJhbSBuYW1lDQo+ICsgKiAgIE5hbWUgb2YgdGhlIHN0YXRpc3RpY3MgZmllbGQgdG8gaW5jcmVt ZW50IGluIHRoZSBtZW1vcnkgcG9vbCBjYWNoZS4NCj4gKyAqIEBwYXJhbSBuDQo+ICsgKiAgIE51 bWJlciB0byBhZGQgdG8gdGhlIHN0YXRpc3RpY3MuDQo+ICsgKi8NCj4gKyNpZmRlZiBSVEVfTElC UlRFX01FTVBPT0xfU1RBVFMNCj4gKyNkZWZpbmUgUlRFX01FTVBPT0xfQ0FDSEVfU1RBVF9BREQo Y2FjaGUsIG5hbWUsIG4pIChjYWNoZSktPnN0YXRzLm5hbWUgKz0gbg0KDQpBcyBBbmRyZXcgYWxy ZWFkeSBwb2ludGVkLCBpdCBuZWVkcyB0byBiZTogKChjYWNoZSktPnN0YXRzLm5hbWUgKz0gKG4p KQ0KQXBhcnQgZnJvbSB0aGF0LCBMR1RNLg0KU2VyaWVzLUFja2VkLWJ5OiBLb25zdGFudGluIEFu YW55ZXYgPGtvbnN0YW50aW4uYW5hbnlldkBodWF3ZWkuY29tPg0KDQo+ICsjZWxzZQ0KPiArI2Rl ZmluZSBSVEVfTUVNUE9PTF9DQUNIRV9TVEFUX0FERChjYWNoZSwgbmFtZSwgbikgZG8ge30gd2hp bGUgKDApDQo+ICsjZW5kaWYNCj4gKw0KPiAgLyoqDQo+ICAgKiBAaW50ZXJuYWwgQ2FsY3VsYXRl IHRoZSBzaXplIG9mIHRoZSBtZW1wb29sIGhlYWRlci4NCj4gICAqDQo+IEBAIC0xMzMzLDEzICsx MzYyLDE3IEBAIHJ0ZV9tZW1wb29sX2RvX2dlbmVyaWNfcHV0KHN0cnVjdCBydGVfbWVtcG9vbCAq bXAsIHZvaWQgKiBjb25zdCAqb2JqX3RhYmxlLA0KPiAgew0KPiAgCXZvaWQgKipjYWNoZV9vYmpz Ow0KPiANCj4gKwkvKiBObyBjYWNoZSBwcm92aWRlZCAqLw0KPiArCWlmICh1bmxpa2VseShjYWNo ZSA9PSBOVUxMKSkNCj4gKwkJZ290byBkcml2ZXJfZW5xdWV1ZTsNCj4gKw0KPiAgCS8qIGluY3Jl bWVudCBzdGF0IG5vdywgYWRkaW5nIGluIG1lbXBvb2wgYWx3YXlzIHN1Y2Nlc3MgKi8NCj4gLQlS VEVfTUVNUE9PTF9TVEFUX0FERChtcCwgcHV0X2J1bGssIDEpOw0KPiAtCVJURV9NRU1QT09MX1NU QVRfQUREKG1wLCBwdXRfb2Jqcywgbik7DQo+ICsJUlRFX01FTVBPT0xfQ0FDSEVfU1RBVF9BREQo Y2FjaGUsIHB1dF9idWxrLCAxKTsNCj4gKwlSVEVfTUVNUE9PTF9DQUNIRV9TVEFUX0FERChjYWNo ZSwgcHV0X29ianMsIG4pOw0KPiANCj4gLQkvKiBObyBjYWNoZSBwcm92aWRlZCBvciB0aGUgcmVx dWVzdCBpdHNlbGYgaXMgdG9vIGJpZyBmb3IgdGhlIGNhY2hlICovDQo+IC0JaWYgKHVubGlrZWx5 KGNhY2hlID09IE5VTEwgfHwgbiA+IGNhY2hlLT5mbHVzaHRocmVzaCkpDQo+IC0JCWdvdG8gZHJp dmVyX2VucXVldWU7DQo+ICsJLyogVGhlIHJlcXVlc3QgaXRzZWxmIGlzIHRvbyBiaWcgZm9yIHRo ZSBjYWNoZSAqLw0KPiArCWlmICh1bmxpa2VseShuID4gY2FjaGUtPmZsdXNodGhyZXNoKSkNCj4g KwkJZ290byBkcml2ZXJfZW5xdWV1ZV9zdGF0c19pbmNyZW1lbnRlZDsNCj4gDQo+ICAJLyoNCj4g IAkgKiBUaGUgY2FjaGUgZm9sbG93cyB0aGUgZm9sbG93aW5nIGFsZ29yaXRobToNCj4gQEAgLTEz NjQsNiArMTM5NywxMiBAQCBydGVfbWVtcG9vbF9kb19nZW5lcmljX3B1dChzdHJ1Y3QgcnRlX21l bXBvb2wgKm1wLCB2b2lkICogY29uc3QgKm9ial90YWJsZSwNCj4gDQo+ICBkcml2ZXJfZW5xdWV1 ZToNCj4gDQo+ICsJLyogaW5jcmVtZW50IHN0YXQgbm93LCBhZGRpbmcgaW4gbWVtcG9vbCBhbHdh eXMgc3VjY2VzcyAqLw0KPiArCVJURV9NRU1QT09MX1NUQVRfQUREKG1wLCBwdXRfYnVsaywgMSk7 DQo+ICsJUlRFX01FTVBPT0xfU1RBVF9BREQobXAsIHB1dF9vYmpzLCBuKTsNCj4gKw0KPiArZHJp dmVyX2VucXVldWVfc3RhdHNfaW5jcmVtZW50ZWQ6DQo+ICsNCj4gIAkvKiBwdXNoIG9iamVjdHMg dG8gdGhlIGJhY2tlbmQgKi8NCj4gIAlydGVfbWVtcG9vbF9vcHNfZW5xdWV1ZV9idWxrKG1wLCBv YmpfdGFibGUsIG4pOw0KPiAgfQ0KPiBAQCAtMTQ3MCw4ICsxNTA5LDggQEAgcnRlX21lbXBvb2xf ZG9fZ2VuZXJpY19nZXQoc3RydWN0IHJ0ZV9tZW1wb29sICptcCwgdm9pZCAqKm9ial90YWJsZSwN Cj4gIAlpZiAocmVtYWluaW5nID09IDApIHsNCj4gIAkJLyogVGhlIGVudGlyZSByZXF1ZXN0IGlz IHNhdGlzZmllZCBmcm9tIHRoZSBjYWNoZS4gKi8NCj4gDQo+IC0JCVJURV9NRU1QT09MX1NUQVRf QUREKG1wLCBnZXRfc3VjY2Vzc19idWxrLCAxKTsNCj4gLQkJUlRFX01FTVBPT0xfU1RBVF9BREQo bXAsIGdldF9zdWNjZXNzX29ianMsIG4pOw0KPiArCQlSVEVfTUVNUE9PTF9DQUNIRV9TVEFUX0FE RChjYWNoZSwgZ2V0X3N1Y2Nlc3NfYnVsaywgMSk7DQo+ICsJCVJURV9NRU1QT09MX0NBQ0hFX1NU QVRfQUREKGNhY2hlLCBnZXRfc3VjY2Vzc19vYmpzLCBuKTsNCj4gDQo+ICAJCXJldHVybiAwOw0K PiAgCX0NCj4gQEAgLTE1MDAsOCArMTUzOSw4IEBAIHJ0ZV9tZW1wb29sX2RvX2dlbmVyaWNfZ2V0 KHN0cnVjdCBydGVfbWVtcG9vbCAqbXAsIHZvaWQgKipvYmpfdGFibGUsDQo+IA0KPiAgCWNhY2hl LT5sZW4gPSBjYWNoZS0+c2l6ZTsNCj4gDQo+IC0JUlRFX01FTVBPT0xfU1RBVF9BREQobXAsIGdl dF9zdWNjZXNzX2J1bGssIDEpOw0KPiAtCVJURV9NRU1QT09MX1NUQVRfQUREKG1wLCBnZXRfc3Vj Y2Vzc19vYmpzLCBuKTsNCj4gKwlSVEVfTUVNUE9PTF9DQUNIRV9TVEFUX0FERChjYWNoZSwgZ2V0 X3N1Y2Nlc3NfYnVsaywgMSk7DQo+ICsJUlRFX01FTVBPT0xfQ0FDSEVfU1RBVF9BREQoY2FjaGUs IGdldF9zdWNjZXNzX29ianMsIG4pOw0KPiANCj4gIAlyZXR1cm4gMDsNCj4gDQo+IEBAIC0xNTIz LDggKzE1NjIsMTMgQEAgcnRlX21lbXBvb2xfZG9fZ2VuZXJpY19nZXQoc3RydWN0IHJ0ZV9tZW1w b29sICptcCwgdm9pZCAqKm9ial90YWJsZSwNCj4gIAkJUlRFX01FTVBPT0xfU1RBVF9BREQobXAs IGdldF9mYWlsX2J1bGssIDEpOw0KPiAgCQlSVEVfTUVNUE9PTF9TVEFUX0FERChtcCwgZ2V0X2Zh aWxfb2Jqcywgbik7DQo+ICAJfSBlbHNlIHsNCj4gLQkJUlRFX01FTVBPT0xfU1RBVF9BREQobXAs IGdldF9zdWNjZXNzX2J1bGssIDEpOw0KPiAtCQlSVEVfTUVNUE9PTF9TVEFUX0FERChtcCwgZ2V0 X3N1Y2Nlc3Nfb2Jqcywgbik7DQo+ICsJCWlmIChsaWtlbHkoY2FjaGUgIT0gTlVMTCkpIHsNCj4g KwkJCVJURV9NRU1QT09MX0NBQ0hFX1NUQVRfQUREKGNhY2hlLCBnZXRfc3VjY2Vzc19idWxrLCAx KTsNCj4gKwkJCVJURV9NRU1QT09MX0NBQ0hFX1NUQVRfQUREKGNhY2hlLCBnZXRfc3VjY2Vzc19v YmpzLCBuKTsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCVJURV9NRU1QT09MX1NUQVRfQUREKG1wLCBn ZXRfc3VjY2Vzc19idWxrLCAxKTsNCj4gKwkJCVJURV9NRU1QT09MX1NUQVRfQUREKG1wLCBnZXRf c3VjY2Vzc19vYmpzLCBuKTsNCj4gKwkJfQ0KPiAgCX0NCj4gDQo+ICAJcmV0dXJuIHJldDsNCj4g LS0NCj4gMi4xNy4xDQo+IA0KDQo=