From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 1D55EA00E6 for ; Mon, 8 Jul 2019 07:42:51 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3ADAC37B0; Mon, 8 Jul 2019 07:42:50 +0200 (CEST) Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70055.outbound.protection.outlook.com [40.107.7.55]) by dpdk.org (Postfix) with ESMTP id 222B91C01 for ; Mon, 8 Jul 2019 07:42:49 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=D1VfvwxckxjrCNRlEzdmkdLeeZD1XhvGFqK0nIZKx0c=; b=6pCH9lydRKj3258i85SIIKNWXCc7fSQgir69/0YTNIr0QUfzbnWpDmnEcQKHUiTKMfWsgUFYm7sJvtsMAf+jKlpJCfio3gRZ+LB7VNHK3YCZRxugf6Dk5hvRG4oDnPTbMGhagOM+oEz04l1ZdFmFmnOJMvtVm+ZZZJqxndPmfS4= Received: from AM0PR08MB3986.eurprd08.prod.outlook.com (20.178.118.90) by AM0PR08MB3889.eurprd08.prod.outlook.com (20.178.82.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2052.19; Mon, 8 Jul 2019 05:42:47 +0000 Received: from AM0PR08MB3986.eurprd08.prod.outlook.com ([fe80::ac98:f913:47e6:22e6]) by AM0PR08MB3986.eurprd08.prod.outlook.com ([fe80::ac98:f913:47e6:22e6%4]) with mapi id 15.20.2052.010; Mon, 8 Jul 2019 05:42:47 +0000 From: "Ruifeng Wang (Arm Technology China)" To: "Medvedkin, Vladimir" , "bruce.richardson@intel.com" CC: "dev@dpdk.org" , Honnappa Nagarahalli , "Gavin Hu (Arm Technology China)" , nd , nd Thread-Topic: [PATCH v4 3/3] lib/lpm: use atomic store to avoid partial update Thread-Index: AQHVMWJ8k7zPubWEi0+3NurnNX+1LKa8QY4AgAP4v0A= Date: Mon, 8 Jul 2019 05:42:47 +0000 Message-ID: References: <20190703054441.30162-1-ruifeng.wang@arm.com> <20190703054441.30162-3-ruifeng.wang@arm.com> <4de1bbae-da58-cfd6-acd0-7b79e51f7ee2@intel.com> In-Reply-To: <4de1bbae-da58-cfd6-acd0-7b79e51f7ee2@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ts-tracking-id: 1ae10f36-40fd-44c1-996b-39de25405e7a.0 x-checkrecipientchecked: true authentication-results: spf=none (sender IP is ) smtp.mailfrom=Ruifeng.Wang@arm.com; x-originating-ip: [113.29.88.7] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: b758997d-4de7-4d65-edce-08d703671b8e x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020); SRVR:AM0PR08MB3889; x-ms-traffictypediagnostic: AM0PR08MB3889: x-microsoft-antispam-prvs: nodisclaimer: True x-ms-oob-tlc-oobclassifiers: OLM:5797; x-forefront-prvs: 00922518D8 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(346002)(376002)(396003)(39850400004)(366004)(189003)(199004)(13464003)(8676002)(81156014)(81166006)(25786009)(8936002)(66476007)(66946007)(316002)(52536014)(76116006)(66556008)(86362001)(66446008)(73956011)(64756008)(3846002)(5660300002)(71190400001)(71200400001)(26005)(110136005)(478600001)(72206003)(54906003)(6116002)(14454004)(2501003)(33656002)(229853002)(102836004)(476003)(486006)(186003)(446003)(11346002)(55016002)(9686003)(6436002)(305945005)(68736007)(4326008)(74316002)(7736002)(6246003)(15650500001)(66066001)(2906002)(76176011)(53936002)(55236004)(53546011)(256004)(14444005)(6506007)(7696005)(99286004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR08MB3889; H:AM0PR08MB3986.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 88ACgI38woq7tdcyM/V7yxUyeB1ubNjchPw/wRAIWteZ31ywYLSfNVecCxkMof00y0rXDLDaMenSEoYFs6DmDzlF+AkZF+QvNlaO9IlJ4ryf50zdYRwxMWhACva2j+jc9iTVrvgKkZidlLHbeRZuAuQEFY5vcWtud/fslEoVD6AAnYwmmkiu0abMobMKAZvqHrUO6omDWwyCOMYwL76SgV0NNaYTtkRTdMV32O3Llbx/BgiB0IXTj+AC/Vhhb/oQtYOgyoZ6puBaPLhQ5dIsRLi5UGdT2R7JMUKQfeycppsCac/Z6Fu4Lk0UZbqzlWQ0XfVs9H5YzX2FUXdXsvAZKf4MgG/i+Eay4vLy140QS9djW/HV3zd3Cp3ODZD2TBkIpRJ9x+KMDTEDOxuJCb/Eu5BoffHKe+XrhilsxPQc7Vs= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: b758997d-4de7-4d65-edce-08d703671b8e X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Jul 2019 05:42:47.4041 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Ruifeng.Wang@arm.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB3889 Subject: Re: [dpdk-dev] [PATCH v4 3/3] lib/lpm: use atomic store to avoid partial update X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" SGkgVmxhZGltaXIsDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWVk dmVka2luLCBWbGFkaW1pciA8dmxhZGltaXIubWVkdmVka2luQGludGVsLmNvbT4NCj4gU2VudDog U2F0dXJkYXksIEp1bHkgNiwgMjAxOSAwMDo1Mw0KPiBUbzogUnVpZmVuZyBXYW5nIChBcm0gVGVj aG5vbG9neSBDaGluYSkgPFJ1aWZlbmcuV2FuZ0Bhcm0uY29tPjsNCj4gYnJ1Y2UucmljaGFyZHNv bkBpbnRlbC5jb20NCj4gQ2M6IGRldkBkcGRrLm9yZzsgSG9ubmFwcGEgTmFnYXJhaGFsbGkNCj4g PEhvbm5hcHBhLk5hZ2FyYWhhbGxpQGFybS5jb20+OyBHYXZpbiBIdSAoQXJtIFRlY2hub2xvZ3kg Q2hpbmEpDQo+IDxHYXZpbi5IdUBhcm0uY29tPjsgbmQgPG5kQGFybS5jb20+DQo+IFN1YmplY3Q6 IFJlOiBbUEFUQ0ggdjQgMy8zXSBsaWIvbHBtOiB1c2UgYXRvbWljIHN0b3JlIHRvIGF2b2lkIHBh cnRpYWwgdXBkYXRlDQo+IA0KPiBIaSBXYW5nLA0KPiANCj4gT24gMDMvMDcvMjAxOSAwNjo0NCwg UnVpZmVuZyBXYW5nIHdyb3RlOg0KPiA+IENvbXBpbGVyIGNvdWxkIGdlbmVyYXRlIG5vbi1hdG9t aWMgc3RvcmVzIGZvciB3aG9sZSB0YWJsZSBlbnRyeQ0KPiA+IHVwZGF0aW5nLiBUaGlzIG1heSBj YXVzZSBpbmNvcnJlY3QgbmV4dGhvcCB0byBiZSByZXR1cm5lZCwgaWYgdGhlIGJ5dGUNCj4gPiB3 aXRoIHZhbGlkIGZsYWcgaXMgdXBkYXRlZCBwcmlvciB0byB0aGUgYnl0ZSB3aXRoIG5leHQgaG90 IGlzIHVwZGF0ZWQuDQo+ID4NCj4gPiBDaGFuZ2VkIHRvIHVzZSBhdG9taWMgc3RvcmUgdG8gdXBk YXRlIHdob2xlIHRhYmxlIGVudHJ5Lg0KPiA+DQo+ID4gU3VnZ2VzdGVkLWJ5OiBNZWR2ZWRraW4g VmxhZGltaXIgPHZsYWRpbWlyLm1lZHZlZGtpbkBpbnRlbC5jb20+DQo+ID4gU2lnbmVkLW9mZi1i eTogUnVpZmVuZyBXYW5nIDxydWlmZW5nLndhbmdAYXJtLmNvbT4NCj4gPiBSZXZpZXdlZC1ieTog R2F2aW4gSHUgPGdhdmluLmh1QGFybS5jb20+DQo+ID4gLS0tDQo+ID4gdjQ6IGluaXRpYWwgdmVy c2lvbg0KPiA+DQo+ID4gICBsaWIvbGlicnRlX2xwbS9ydGVfbHBtLmMgfCAzNCArKysrKysrKysr KysrKysrKysrKysrKystLS0tLS0tLS0tDQo+ID4gICAxIGZpbGUgY2hhbmdlZCwgMjQgaW5zZXJ0 aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0 ZV9scG0vcnRlX2xwbS5jIGIvbGliL2xpYnJ0ZV9scG0vcnRlX2xwbS5jIGluZGV4DQo+ID4gYmFh NmU3NDYwLi41ZDFkYmQ3ZTYgMTAwNjQ0DQo+ID4gLS0tIGEvbGliL2xpYnJ0ZV9scG0vcnRlX2xw bS5jDQo+ID4gKysrIGIvbGliL2xpYnJ0ZV9scG0vcnRlX2xwbS5jDQo+ID4gQEAgLTc2Nyw3ICs3 NjcsOSBAQCBhZGRfZGVwdGhfc21hbGxfdjIwKHN0cnVjdCBydGVfbHBtX3YyMCAqbHBtLA0KPiB1 aW50MzJfdCBpcCwgdWludDhfdCBkZXB0aCwNCj4gPiAgIAkJCQkJICogU2V0dGluZyB0Ymw4IGVu dHJ5IGluIG9uZSBnbyB0byBhdm9pZA0KPiA+ICAgCQkJCQkgKiByYWNlIGNvbmRpdGlvbnMNCj4g PiAgIAkJCQkJICovDQo+ID4gLQkJCQkJbHBtLT50Ymw4W2pdID0gbmV3X3RibDhfZW50cnk7DQo+ ID4gKwkJCQkJX19hdG9taWNfc3RvcmUoJmxwbS0+dGJsOFtqXSwNCj4gPiArCQkJCQkJJm5ld190 Ymw4X2VudHJ5LA0KPiA+ICsJCQkJCQlfX0FUT01JQ19SRUxBWEVEKTsNCj4gPg0KPiA+ICAgCQkJ CQljb250aW51ZTsNCj4gPiAgIAkJCQl9DQo+ID4gQEAgLTgzNyw3ICs4MzksOSBAQCBhZGRfZGVw dGhfc21hbGxfdjE2MDQoc3RydWN0IHJ0ZV9scG0gKmxwbSwNCj4gdWludDMyX3QgaXAsIHVpbnQ4 X3QgZGVwdGgsDQo+ID4gICAJCQkJCSAqIFNldHRpbmcgdGJsOCBlbnRyeSBpbiBvbmUgZ28gdG8g YXZvaWQNCj4gPiAgIAkJCQkJICogcmFjZSBjb25kaXRpb25zDQo+ID4gICAJCQkJCSAqLw0KPiA+ IC0JCQkJCWxwbS0+dGJsOFtqXSA9IG5ld190Ymw4X2VudHJ5Ow0KPiA+ICsJCQkJCV9fYXRvbWlj X3N0b3JlKCZscG0tPnRibDhbal0sDQo+ID4gKwkJCQkJCSZuZXdfdGJsOF9lbnRyeSwNCj4gPiAr CQkJCQkJX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4NCj4gPiAgIAkJCQkJY29udGludWU7DQo+ID4g ICAJCQkJfQ0KPiA+IEBAIC05NjUsNyArOTY5LDggQEAgYWRkX2RlcHRoX2JpZ192MjAoc3RydWN0 IHJ0ZV9scG1fdjIwICpscG0sDQo+IHVpbnQzMl90IGlwX21hc2tlZCwgdWludDhfdCBkZXB0aCwN Cj4gPiAgIAkJCQkgKiBTZXR0aW5nIHRibDggZW50cnkgaW4gb25lIGdvIHRvIGF2b2lkIHJhY2UN Cj4gPiAgIAkJCQkgKiBjb25kaXRpb24NCj4gPiAgIAkJCQkgKi8NCj4gPiAtCQkJCWxwbS0+dGJs OFtpXSA9IG5ld190Ymw4X2VudHJ5Ow0KPiA+ICsJCQkJX19hdG9taWNfc3RvcmUoJmxwbS0+dGJs OFtpXSwNCj4gJm5ld190Ymw4X2VudHJ5LA0KPiA+ICsJCQkJCQlfX0FUT01JQ19SRUxBWEVEKTsN Cj4gPg0KPiA+ICAgCQkJCWNvbnRpbnVlOw0KPiA+ICAgCQkJfQ0KPiA+IEBAIC0xMTAwLDcgKzEx MDUsOCBAQCBhZGRfZGVwdGhfYmlnX3YxNjA0KHN0cnVjdCBydGVfbHBtICpscG0sDQo+IHVpbnQz Ml90IGlwX21hc2tlZCwgdWludDhfdCBkZXB0aCwNCj4gPiAgIAkJCQkgKiBTZXR0aW5nIHRibDgg ZW50cnkgaW4gb25lIGdvIHRvIGF2b2lkIHJhY2UNCj4gPiAgIAkJCQkgKiBjb25kaXRpb24NCj4g PiAgIAkJCQkgKi8NCj4gPiAtCQkJCWxwbS0+dGJsOFtpXSA9IG5ld190Ymw4X2VudHJ5Ow0KPiA+ ICsJCQkJX19hdG9taWNfc3RvcmUoJmxwbS0+dGJsOFtpXSwNCj4gJm5ld190Ymw4X2VudHJ5LA0K PiA+ICsJCQkJCQlfX0FUT01JQ19SRUxBWEVEKTsNCj4gPg0KPiA+ICAgCQkJCWNvbnRpbnVlOw0K PiA+ICAgCQkJfQ0KPiA+IEBAIC0xMzkzLDcgKzEzOTksOSBAQCBkZWxldGVfZGVwdGhfc21hbGxf djIwKHN0cnVjdCBydGVfbHBtX3YyMA0KPiAqbHBtLCB1aW50MzJfdCBpcF9tYXNrZWQsDQo+ID4N Cj4gCVJURV9MUE1fVEJMOF9HUk9VUF9OVU1fRU5UUklFUyk7IGorKykgew0KPiA+DQo+ID4gICAJ CQkJCWlmIChscG0tPnRibDhbal0uZGVwdGggPD0gZGVwdGgpDQo+ID4gLQkJCQkJCWxwbS0+dGJs OFtqXSA9DQo+IG5ld190Ymw4X2VudHJ5Ow0KPiA+ICsJCQkJCQlfX2F0b21pY19zdG9yZSgmbHBt LQ0KPiA+dGJsOFtqXSwNCj4gPiArCQkJCQkJCSZuZXdfdGJsOF9lbnRyeSwNCj4gPiArCQkJCQkJ CV9fQVRPTUlDX1JFTEFYRUQpOw0KPiA+ICAgCQkJCX0NCj4gPiAgIAkJCX0NCj4gPiAgIAkJfQ0K PiA+IEBAIC0xNDkwLDcgKzE0OTgsOSBAQCBkZWxldGVfZGVwdGhfc21hbGxfdjE2MDQoc3RydWN0 IHJ0ZV9scG0gKmxwbSwNCj4gdWludDMyX3QgaXBfbWFza2VkLA0KPiA+DQo+IAlSVEVfTFBNX1RC TDhfR1JPVVBfTlVNX0VOVFJJRVMpOyBqKyspIHsNCj4gPg0KPiA+ICAgCQkJCQlpZiAobHBtLT50 Ymw4W2pdLmRlcHRoIDw9IGRlcHRoKQ0KPiA+IC0JCQkJCQlscG0tPnRibDhbal0gPQ0KPiBuZXdf dGJsOF9lbnRyeTsNCj4gPiArCQkJCQkJX19hdG9taWNfc3RvcmUoJmxwbS0NCj4gPnRibDhbal0s DQo+ID4gKwkJCQkJCQkmbmV3X3RibDhfZW50cnksDQo+ID4gKwkJCQkJCQlfX0FUT01JQ19SRUxB WEVEKTsNCj4gPiAgIAkJCQl9DQo+ID4gICAJCQl9DQo+ID4gICAJCX0NCj4gPiBAQCAtMTY0Niw3 ICsxNjU2LDggQEAgZGVsZXRlX2RlcHRoX2JpZ192MjAoc3RydWN0IHJ0ZV9scG1fdjIwICpscG0s DQo+IHVpbnQzMl90IGlwX21hc2tlZCwNCj4gPiAgIAkJICovDQo+ID4gICAJCWZvciAoaSA9IHRi bDhfaW5kZXg7IGkgPCAodGJsOF9pbmRleCArIHRibDhfcmFuZ2UpOyBpKyspIHsNCj4gPiAgIAkJ CWlmIChscG0tPnRibDhbaV0uZGVwdGggPD0gZGVwdGgpDQo+ID4gLQkJCQlscG0tPnRibDhbaV0g PSBuZXdfdGJsOF9lbnRyeTsNCj4gPiArCQkJCV9fYXRvbWljX3N0b3JlKCZscG0tPnRibDhbaV0s DQo+ICZuZXdfdGJsOF9lbnRyeSwNCj4gPiArCQkJCQkJX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4g ICAJCX0NCj4gPiAgIAl9DQo+ID4NCj4gPiBAQCAtMTY3Nyw3ICsxNjg4LDggQEAgZGVsZXRlX2Rl cHRoX2JpZ192MjAoc3RydWN0IHJ0ZV9scG1fdjIwICpscG0sDQo+IHVpbnQzMl90IGlwX21hc2tl ZCwNCj4gPiAgIAkJLyogU2V0IHRibDI0IGJlZm9yZSBmcmVlaW5nIHRibDggdG8gYXZvaWQgcmFj ZSBjb25kaXRpb24uDQo+ID4gICAJCSAqIFByZXZlbnQgdGhlIGZyZWUgb2YgdGhlIHRibDggZ3Jv dXAgZnJvbSBob2lzdGluZy4NCj4gPiAgIAkJICovDQo+ID4gLQkJbHBtLT50YmwyNFt0YmwyNF9p bmRleF0gPSBuZXdfdGJsMjRfZW50cnk7DQo+ID4gKwkJX19hdG9taWNfc3RvcmUoJmxwbS0+dGJs MjRbdGJsMjRfaW5kZXhdLA0KPiAmbmV3X3RibDI0X2VudHJ5LA0KPiA+ICsJCQkJX19BVE9NSUNf UkVMQVhFRCk7DQo+ID4gICAJCV9fYXRvbWljX3RocmVhZF9mZW5jZShfX0FUT01JQ19SRUxFQVNF KTsNCj4gPiAgIAkJdGJsOF9mcmVlX3YyMChscG0tPnRibDgsIHRibDhfZ3JvdXBfc3RhcnQpOw0K PiA+ICAgCX0NCj4gPiBAQCAtMTczMCw3ICsxNzQyLDggQEAgZGVsZXRlX2RlcHRoX2JpZ192MTYw NChzdHJ1Y3QgcnRlX2xwbSAqbHBtLA0KPiB1aW50MzJfdCBpcF9tYXNrZWQsDQo+ID4gICAJCSAq Lw0KPiA+ICAgCQlmb3IgKGkgPSB0Ymw4X2luZGV4OyBpIDwgKHRibDhfaW5kZXggKyB0Ymw4X3Jh bmdlKTsgaSsrKSB7DQo+ID4gICAJCQlpZiAobHBtLT50Ymw4W2ldLmRlcHRoIDw9IGRlcHRoKQ0K PiA+IC0JCQkJbHBtLT50Ymw4W2ldID0gbmV3X3RibDhfZW50cnk7DQo+ID4gKwkJCQlfX2F0b21p Y19zdG9yZSgmbHBtLT50Ymw4W2ldLA0KPiAmbmV3X3RibDhfZW50cnksDQo+ID4gKwkJCQkJCV9f QVRPTUlDX1JFTEFYRUQpOw0KPiA+ICAgCQl9DQo+ID4gICAJfQ0KPiA+DQo+ID4gQEAgLTE3NjEs NyArMTc3NCw4IEBAIGRlbGV0ZV9kZXB0aF9iaWdfdjE2MDQoc3RydWN0IHJ0ZV9scG0gKmxwbSwN Cj4gdWludDMyX3QgaXBfbWFza2VkLA0KPiA+ICAgCQkvKiBTZXQgdGJsMjQgYmVmb3JlIGZyZWVp bmcgdGJsOCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbi4NCj4gPiAgIAkJICogUHJldmVudCB0aGUg ZnJlZSBvZiB0aGUgdGJsOCBncm91cCBmcm9tIGhvaXN0aW5nLg0KPiA+ICAgCQkgKi8NCj4gPiAt CQlscG0tPnRibDI0W3RibDI0X2luZGV4XSA9IG5ld190YmwyNF9lbnRyeTsNCj4gPiArCQlfX2F0 b21pY19zdG9yZSgmbHBtLT50YmwyNFt0YmwyNF9pbmRleF0sDQo+ICZuZXdfdGJsMjRfZW50cnks DQo+ID4gKwkJCQlfX0FUT01JQ19SRUxBWEVEKTsNCj4gPiAgIAkJX19hdG9taWNfdGhyZWFkX2Zl bmNlKF9fQVRPTUlDX1JFTEVBU0UpOw0KPiBEbyB5b3UgcmVhbGx5IG5lZWQgX19hdG9taWNfdGhy ZWFkX2ZlbmNlIGFmdGVyIGF0b21pY19zdG9yZT8NCg0KWWVzLiBUaGUgX19hdG9taWNfdGhyZWFk X2ZlbmNlIGhlcmUgaXMgdG8gcHJldmVudCB0aGUgZnJlZSBvZiB0aGUgdGJsOCBncm91cCBiZWxv dyBmcm9tIGhvaXN0aW5nLg0KVGhlIG9yZGVyIG9mIHRibDI0IHVwZGF0ZSBhbmQgdGJsOCB1cGRh dGUgbmVlZHMgdG8gYmUga2VwdC4NCg0KPiA+ICAgCQl0Ymw4X2ZyZWVfdjE2MDQobHBtLT50Ymw4 LCB0Ymw4X2dyb3VwX3N0YXJ0KTsNCj4gPiAgIAl9DQo+IA0KPiAtLQ0KPiBSZWdhcmRzLA0KPiBW bGFkaW1pcg0KDQo=