From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 3120C1B146 for ; Wed, 30 Jan 2019 06:17:22 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 29 Jan 2019 21:17:21 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,539,1539673200"; d="scan'208";a="295563025" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga005.jf.intel.com with ESMTP; 29 Jan 2019 21:17:20 -0800 Received: from fmsmsx114.amr.corp.intel.com (10.18.116.8) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.408.0; Tue, 29 Jan 2019 21:17:19 -0800 Received: from fmsmsx108.amr.corp.intel.com ([169.254.9.99]) by FMSMSX114.amr.corp.intel.com ([169.254.6.247]) with mapi id 14.03.0415.000; Tue, 29 Jan 2019 21:17:19 -0800 From: "Eads, Gage" To: Ola Liljedahl , Honnappa Nagarahalli , "Richardson, Bruce" , "dev@dpdk.org" CC: nd Thread-Topic: [RFC] lfring: lock-free ring buffer Thread-Index: AQHUtwUD27HnS9OItk2iqwDKLNhf3qXFCdhggAA5FICAAfcNcA== Date: Wed, 30 Jan 2019 05:17:18 +0000 Message-ID: <9184057F7FC11744A2107296B6B8EB1E541CD01D@FMSMSX108.amr.corp.intel.com> References: <1548678513-14348-1-git-send-email-ola.liljedahl@arm.com> <9184057F7FC11744A2107296B6B8EB1E541CC413@FMSMSX108.amr.corp.intel.com> <1548714375.11472.76.camel@arm.com> In-Reply-To: <1548714375.11472.76.camel@arm.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYTIzM2VhOGQtZjlhMy00NzAwLTgxY2MtYTM1ZTk0OTc4YTU1IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiM01EbGsxQ1oySGJOQXJSNmFSQkk4WTVzZFZBS09qWTFxV254K0pNazdrcTdNckNJSDUzTTdOY0JJZ3h2d3QwdyJ9 x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.1.200.106] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [RFC] lfring: lock-free ring buffer 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: , X-List-Received-Date: Wed, 30 Jan 2019 05:17:22 -0000 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogT2xhIExpbGplZGFobCBb bWFpbHRvOk9sYS5MaWxqZWRhaGxAYXJtLmNvbV0NCj4gU2VudDogTW9uZGF5LCBKYW51YXJ5IDI4 LCAyMDE5IDQ6MjYgUE0NCj4gVG86IEhvbm5hcHBhIE5hZ2FyYWhhbGxpIDxIb25uYXBwYS5OYWdh cmFoYWxsaUBhcm0uY29tPjsgUmljaGFyZHNvbiwNCj4gQnJ1Y2UgPGJydWNlLnJpY2hhcmRzb25A aW50ZWwuY29tPjsgRWFkcywgR2FnZSA8Z2FnZS5lYWRzQGludGVsLmNvbT47DQo+IGRldkBkcGRr Lm9yZw0KPiBDYzogbmQgPG5kQGFybS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUkZDXSBsZnJpbmc6 IGxvY2stZnJlZSByaW5nIGJ1ZmZlcg0KPiANCj4gT24gTW9uLCAyMDE5LTAxLTI4IGF0IDIxOjA0 ICswMDAwLCBFYWRzLCBHYWdlIHdyb3RlOg0KPiA+IEhleSBPbGEsDQo+ID4NCj4gPiA+DQo+ID4g PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gRnJvbTogT2xhIExpbGplZGFobCBb bWFpbHRvOk9sYS5MaWxqZWRhaGxAYXJtLmNvbV0NCj4gPiA+IFNlbnQ6IE1vbmRheSwgSmFudWFy eSAyOCwgMjAxOSA2OjI5IEFNDQo+ID4gPiBUbzogZGV2QGRwZGsub3JnOyBFYWRzLCBHYWdlIDxn YWdlLmVhZHNAaW50ZWwuY29tPjsgSG9ubmFwcGENCj4gPiA+IE5hZ2FyYWhhbGxpIDxIb25uYXBw YS5OYWdhcmFoYWxsaUBhcm0uY29tPjsgUmljaGFyZHNvbiwgQnJ1Y2UNCj4gPiA+IDxicnVjZS5y aWNoYXJkc29uQGludGVsLmNvbT4NCj4gPiA+IENjOiBuZCA8bmRAYXJtLmNvbT47IE9sYSBMaWxq ZWRhaGwgPE9sYS5MaWxqZWRhaGxAYXJtLmNvbT4NCj4gPiA+IFN1YmplY3Q6IFtSRkNdIGxmcmlu ZzogbG9jay1mcmVlIHJpbmcgYnVmZmVyDQo+ID4gPg0KPiA+ID4gTG9jay1mcmVlIE1QL01DIHJp bmcgYnVmZmVyIHdpdGggU1AvU0Mgb3B0aW9ucy4NCj4gPiA+IFRoZSByaW5nIGJ1ZmZlciBtZXRh ZGF0YSBvbmx5IG1haW50YWlucyBvbmUgc2V0IG9mIGhlYWQgYW5kIHRhaWwgcG9pbnRlcnMuDQo+ ID4gPiBUYWlsIGlzDQo+ID4gPiB1cGRhdGVkIG9uIGVucXVldWUsIGhlYWQgaXMgdXBkYXRlZCBv biBkZXF1ZXVlLg0KPiA+ID4gVGhlIHJpbmcgc2xvdHMgYmV0d2VlbiBoZWFkIGFuZCB0YWlsIGFs d2F5cyBjb250YWlucyB2YWxpZA0KPiA+ID4gKHVuY29uc3VtZWQpIHNsb3RzLg0KPiA+ID4gRWFj aCByaW5nIHNsb3QgY29uc2lzdHMgb2YgYSBzdHJ1Y3Qgb2YgZGF0YSBwb2ludGVyICgicHRyIikg YW5kIHJpbmcNCj4gPiA+IGluZGV4ICgiaWR4IikuDQo+ID4gPiBTbG90LmlkeCBpcyBvbmx5IHVw ZGF0ZWQgb24gZW5xdWV1ZSB3aXRoIHRoZSBuZXcgcmluZyBpbmRleC4gVGhlDQo+ID4gPiBzbG90 IGluZGV4IGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgc2xvdHMgYXJlIHdyaXR0ZW4gc2VxdWVudGlh bGx5DQo+ID4gPiAoaW1wb3J0YW50IGZvciBGSUZPIG9yZGVyaW5nKS4NCj4gPiA+IEl0IGlzIGFs c28gdXNlZCB0byBzeW5jaHJvbmlzZSBtdWx0aXBsZSBwcm9kdWNlcnMuDQo+ID4gPg0KPiA+ID4g TVAgZW5xdWV1ZSBzY2FucyB0aGUgcmluZyBmcm9tIHRoZSB0YWlsIHVudGlsIGhlYWQrc2l6ZSwg bG9va2luZyBmb3INCj4gPiA+IGFuIGVtcHR5IHNsb3QgYXMgaW5kaWNhdGVkIGJ5IHNsb3QuaWR4 IGVxdWFsaW5nIHRoZSByaW5nIGluZGV4IG9mDQo+ID4gPiB0aGUgcHJldmlvdXMgbGFwIChpbmRl eCAtIHJpbmcgc2l6ZSkuIFRoZSBlbXB0eSBzbG90IGlzIHdyaXR0ZW4NCj4gPiA+ICgucHRyID0g ZGF0YSwgLmlkeCA9IGluZGV4KSB1c2luZyBDQVMuDQo+ID4gPiBJZiBDQVMNCj4gPiA+IGZhaWxz LCBzb21lIG90aGVyIHRocmVhZCB3cm90ZSB0aGUgc2xvdCBhbmQgdGhlIHRocmVhZCBjb250aW51 ZXMNCj4gPiA+IHdpdGggdGhlIG5leHQgc2xvdC4NCj4gPiA+DQo+ID4gPiBXaGVuIGFsbCBlbGVt ZW50cyBoYXZlIGJlZW4gZW5xdWV1ZWQgb3IgaWYgdGhlIHJpbmcgYnVmZmVyIGlzIGZ1bGwsDQo+ ID4gPiB0aGUgdGhyZWFkIHVwZGF0ZXMgdGhlIHJpbmcgYnVmZmVyIHRhaWwgcG9pbnRlciAodW5s ZXNzIHRoaXMgaGFzIG5vdA0KPiA+ID4gYWxyZWFkeSBiZWVuIHVwZGF0ZWQgYnkgc29tZSBvdGhl ciB0aHJlYWQpLiBUaHVzIHRoaXMgdGhyZWFkIHdpbGwNCj4gPiA+IGhlbHAgb3RoZXIgdGhyZWFk cyB0aGF0IGhhdmUgd3JpdHRlbiByaW5nIHNsb3RzIGJ1dCBub3QgeWV0IHVwZGF0ZWQNCj4gPiA+ IHRoZSB0YWlsIHBvaW50ZXIuDQo+ID4gPg0KPiA+ID4gSWYgYSBzbG90IHdpdGggYW4gaW5kZXgg ZGlmZmVyZW50IGZyb20gY3VycmVudCBvciBwcmV2aW91cyBsYXAgaXMNCj4gPiA+IGZvdW5kLCBp dCBpcyBhc3N1bWVkIHRoYXQgdGhlIHRocmVhZCBoYXMgZmFsbGVuIGJlaGluZCAoZS5nLiBiZWVu DQo+ID4gPiBwcmVlbXB0ZWQpIGFuZCB0aGUgbG9jYWwgdGFpbCBwb2ludGVyIGlzIChjb25kaXRp b25hbGx5KSB1cGRhdGVkDQo+ID4gPiBmcm9tIHRoZSByaW5nIGJ1ZmZlciBtZXRhZGF0YSBpbiBv cmRlciB0byBxdWlja2x5IGNhdGNoIHVwLg0KPiA+ID4NCj4gPiA+IE1QIGRlcXVldWUgcmVhZHMg KHVwIHRvKSBOIHNsb3RzIGZyb20gdGhlIGhlYWQgaW5kZXggYW5kIGF0dGVtcHRzIHRvDQo+ID4g PiBjb21taXQgdGhlIG9wZXJhdGlvbiB1c2luZyBDQVMgb24gdGhlIGhlYWQgcG9pbnRlci4NCj4g PiA+DQo+ID4gPiBFbnF1ZXVlIE4gZWxlbWVudHM6IE4rMSBDQVMgb3BlcmF0aW9ucyAoYnV0IHRo ZSBsYXN0IENBUyBvcGVyYXRpb24NCj4gPiA+IG1pZ2h0IG5vdCBiZSBuZWNlc3NhcnkgZHVyaW5n IGNvbnRlbnRpb24gYXMgcHJvZHVjZXJzIHdpbGwgaGVscCBlYWNoDQo+ID4gPiBvdGhlcikgRGVx dWV1ZSBODQo+ID4gPiBlbGVtZW50czogMSBDQVMgb3BlcmF0aW9uDQo+ID4gPg0KPiA+ID4gQXMg dGhlIGxvY2stZnJlZSByaW5nIHN1cHBvcnRzIGJvdGggTVQtc2FmZSAoTVAvTUMpIGFuZA0KPiA+ ID4gc2luZ2xlLXRocmVhZGVkDQo+ID4gPiAoU1AvU0MpIG9wZXJhdGlvbnMsIHRoZXJlIGlzIGEg cXVlc3Rpb24gd2hldGhlciB0aGUgbW9kZXMgc2hvdWxkIGJlDQo+ID4gPiBjaG9zZW4gb25seSB3 aGVuIGNyZWF0aW5nIGEgcmluZyBidWZmZXIgb3IgaWYgdGhlIGFwcGxpY2F0aW9uIGNhbg0KPiA+ ID4gbWl4IE1ULXNhZmUgYW5kDQo+ID4gPiBzaW5nbGUtDQo+ID4gPiB0aHJlYWRlZCBlbnF1ZXVl IChvciBkZXF1ZXVlKSBjYWxscy4gVG8gZm9sbG93IHRoZSBwYXR0ZXJuIHNldCBieQ0KPiA+ID4g cnRlX3JpbmcsIHNwZWNpZmljIGZ1bmN0aW9ucyBmb3IgTVAgYW5kIFNQIGVucXVldWUgYW5kIE1D IGFuZCBTQw0KPiA+ID4gZGVxdWV1ZSBhcmUgbWFkZSBhdmFpbGFibGUuIFRoZSB3aXNkb20gb2Yg dGhpcyBhYmlsaXR5IGNhbiBiZQ0KPiA+ID4gcXVlc3Rpb25lZC4gVGhlIGxvY2stZnJlZSBkZXNp Z24gYWxsb3dzIHRocmVhZHMgdG8gYmUgYmxvY2tlZCBmb3INCj4gPiA+IGxvbmcgcGVyaW9kcyBv ZiB0aW1lIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgb3BlcmF0aW9uIG9mIHRoZQ0KPiA+ ID4gcmluZyBidWZmZXIgYnV0IG1peGluZyAobG9jay1mcmVlKSBNVC1zYWZlIGFuZCBzaW5nbGUt IHRocmVhZGVkDQo+ID4gPiBjYWxscyByZXF1aXJlcyB0aGF0IHRoZXJlIGFyZSBvbiBzdWNoIHRo cmVhZHMgdGhhdCB3YWtlIHVwIGF0IHRoZQ0KPiA+ID4gd3JvbmcgbW9tZW50ICh3aGVuIGEgc2lu Z2xlLXRocmVhZGVkIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcykuDQo+ID4gPg0KPiA+IEkgc2Vl IHRoaXMgYXMgYSB1c2VyIGVycm9yLiBUaGUgcnRlX3JpbmcgZG9jdW1lbnRhdGlvbiBpcyBjbGVh ciB0aGF0DQo+ID4gcmluZ19zcF9lbnF1ZXVlIGFuZCByaW5nX3NjX2RlcXVldWUgZnVuY3Rpb25z IGFyZSBub3QgTVQtc2FmZSwgYW5kIChpZg0KPiA+IEknbSByZWFkaW5nIHRoaXMgY29ycmVjdGx5 KSB0aGlzIHNjZW5hcmlvIGludm9sdmVzIGhhdmluZyAyKyB0aHJlYWRzDQo+ID4gZXhlY3V0aW5n IGFuIG9wZXJhdGlvbiBpbiBwYXJhbGxlbC4NCj4gU28gdGhlIGluZGl2aWR1YWwgTVAvU1AvTUMv U0MgZnVuY3Rpb25zIHNob3VsZCBhbHNvIGJlIGRpcmVjdGx5IGF2YWlsYWJsZSB0byB0aGUNCj4g dXNlcj8gVGhpcyBpcyB3aGF0IEkgaGF2ZSBpbXBsZW1lbnRlZCBoZXJlIChidXQgbm90IGluIG15 IG9yaWdpbmFsIFBST0dSRVNTNjQNCj4gaW1wbGVtZW50YXRpb24gd2hlcmUgTVAvU1AvTUMvU0Mg bW9kZSBpcyBmaXhlZCBhdCBjcmVhdGlvbikuIEJ1dCBJIGRvbid0IGxpa2UNCj4gaXQuDQo+IA0K PiA+DQo+ID4gPg0KPiA+ID4gMTI4LWJpdCBsb2NrLWZyZWUgYXRvbWljIGNvbXBhcmUgZXhjaGFu Z2Ugb3BlcmF0aW9ucyBmb3IgQUFyY2g2NA0KPiA+ID4gKEFSTXY4LjApIGFuZCB4ODYtNjQgYXJl IHByb3ZpZGVkIGluIGxvY2tmcmVlMTYuaC4gSSBleHBlY3QgdGhlc2UNCj4gPiA+IGZ1bmN0aW9u cyB0byBmaW5kIGEgZGlmZmVyZW50IGhvbWUgYW5kIHBvc3NpYmx5IGEgZGlmZmVyZW50IEFQSS4N Cj4gPiA+IE5vdGUgdGhhdCBhICdmcmFpbCcgdmVyc2lvbiBhdG9taWNfY29tcGFyZV9leGNoYW5n ZSBpcyBpbXBsZW1lbnRlZCwNCj4gPiA+IHRoaXMgbWVhbnMgdGhhdCBpbiB0aGUgY2FzZSBvZiBm YWlsdXJlLCB0aGUgb2xkIHZhbHVlIHJldHVybmVkIGlzDQo+ID4gPiBub3QgZ3VhcmFudGVlZCB0 byBiZSBhdG9taWNhbGx5IHJlYWQgKGFzIHRoaXMgaXMgbm90IHBvc3NpYmxlIG9uDQo+ID4gPiBB Uk12OC4wIHdpdGhvdXQgYWxzbyB3cml0aW5nIHRvIHRoZSBsb2NhdGlvbikuIEF0b21pY2FsbHkg cmVhZA0KPiA+ID4gdmFsdWVzIGFyZSBvZnRlbiBub3QgbmVjZXNzYXJ5LCBpdCBpcyBhIHN1Y2Nl c3NmdWwgY29tcGFyZSBhbmQNCj4gPiA+IGV4Y2hhbmdlIG9wZXJhdGlvbiB3aGljaCBwcm92aWRl cyBhdG9taWNpdHkuDQo+ID4gPg0KPiA+ID4gU2lnbmVkLW9mZi1ieTogT2xhIExpbGplZGFobCA8 b2xhLmxpbGplZGFobEBhcm0uY29tPg0KPiA+IEEgZmV3IGhpZ2gtbGV2ZWwgdGhvdWdodHM6DQo+ ID4gMS4gVGhlIGVucXVldWUgYW5kIGRlcXVldWUgZnVuY3Rpb25zIGFyZSBub3QgY29tcGF0aWJs ZSB3aXRoIHRoZQ0KPiA+IHJ0ZV9yaW5nJ3MgYnVsayBzZW1hbnRpY3MsDQo+IEkgd2Fzbid0IGNv bnNpZGVyaW5nIDEwMCUgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIG1vZHVsZXMgdGhhdCBhbHJl YWR5IHVzZQ0KPiBydGVfcmluZywgdGhlIGNvZGUgcmF0aGVyIHJlZmxlY3RzIHRoZSByZXF1aXJl bWVudHMgb2YgbXkgb3duIHVzZSBjYXNlcy4gSWYgd2UNCj4gd2FudCB0aGlzLCB0aGVuIHdlIG5l ZWQgdG8gcHJvdmlkZSB0aGUgc2FtZSBidWxrIGVucXVldWUvZGVxdWV1ZSBiZWhhdmlvdXINCj4g YXMgcnRlX3JpbmcuDQo+IA0KPiA+ICB3aGVyZSBlaXRoZXIgYWxsIHBvaW50ZXJzIG9yIG5vbmUg YXJlIG9wZXJhdGVkIG9uLiBUaGlzIGlzIG5lY2Vzc2FyeQ0KPiA+IHRvIGltcGxlbWVudCB0aGUg cmluZyBBUEkgb2YgY291cnNlLCBidXQgaW4gYSBicm9hZGVyIHNlbnNlIEkgdGhpbmsNCj4gPiBp dCdzIG5lY2Vzc2FyeSBmb3IgdXNhYmlsaXR5IGluIGdlbmVyYWwuIEZvciBleGFtcGxlLCBob3cg d291bGQgYSB1c2VyDQo+ID4gKG9yIHRoZSByaW5nIG1lbXBvb2wgaGFuZGxlcikgZGlzdGluZ3Vp c2ggYmV0d2VlbiBwYXJ0aWFsIGRlcXVldWVzDQo+ID4gdGhhdCBvY2N1ciBiZWNhdXNlIHRoZSBy aW5nIGlzIGVtcHR5IHZzLiB0aG9zZSB0aGF0IG9jY3VyIGR1ZSB0byBhDQo+ID4gcmFjZT8gZGVx dWV1ZV9idWxrX21jIGNvdWxkIHJldHVybg0KPiA+IDAgZXZlbiB0aG91Z2ggdGhlIHJpbmcgaXMg ZnVsbCwgaWYgaXRzIGZpcnN0IENBUyBmYWlscyBhbmQgdGhlIGhlYWQNCj4gPiBoYXMgYWR2YW5j ZWQgYmV5b25kIGl0cyBsb2NhbCB0YWlsIHZhcmlhYmxlLg0KPiBUYWlsIGNvdWxkIGJlIHJlLXJl YWQgb24gYSBDQVMoJmhlYWQpIGZhaWx1cmUuIFRoaXMgaXMgaG93IEkgb3JpZ2luYWxseSBjb2Rl ZCByaW5nDQo+IGJ1ZmZlciBlbnF1ZXVlIGFuZCBkZXF1ZXVlIGZ1bmN0aW9ucy4gQnV0IENBUygm aGVhZCkgZmFpbHVyZSBkb2Vzbid0IGJ5IGl0c2VsZg0KPiBtZWFuIHRoYXQgKnRhaWwqIGhhcyBj aGFuZ2VkLiBTbyBJIGhvaXN0ZWQgdGhlIHJlYWQgb2YgdGFpbCBiZWZvcmUgdGhlIENBUy1sb29w DQo+IHdoaWNoIG1hZGUgdGhlIGNvZGUgc2xpZ2h0bHkgZmFzdGVyIHNpbmNlIHdlIGF2b2lkIHVu bmVjZXNzYXJpbHkgcmVhZGluZyBhDQo+IGxvY2F0aW9uIHdoaWNoIG1pZ2h0IGhhdmUgYmVlbiBt b2RpZmllZCBhbmQgdGh1cyBjb3VsZCBjYXVzZSBhIGNhY2hlIG1pc3MuDQo+IE1heWJlIHRoaXMg bWljcm9wdGltaXNhdGlvbiBpc24ndCBhbHdheXMgYSBnb29kIGlkZWEgKGl0IGNvdWxkIGxlYWQg dG8gc3B1cmlvdXMNCj4gcXVldWUgZnVsbC9lbXB0eSBmYWlsdXJlcykuIEFub3RoZXIgc29sdXRp b24gaXMgdG8gb25seSByZS1yZWFkIHRhaWwgaWYgd2Ugc2VlIHRoZQ0KPiBxdWV1ZSBhcyBlbXB0 eSAob3Igd2UgY2FuJ3QgYWNxdWlyZSBhcyBtYW55IHNsb3RzIGFzIHRoZSB1c2VyIHJlcXVlc3Rl ZCkuDQo+IA0KPiDCoCDCoCDCoCDCoCB1aW50NjRfdCBoZWFkID0gX19hdG9taWNfbG9hZF9uKCZy LT5oZWFkLCBfX0FUT01JQ19SRUxBWEVEKTsNCj4gwqDCoMKgwqDCoMKgwqDCoHVpbnQ2NF90IHRh aWwgPSBfX2F0b21pY19sb2FkX24oJnItPnRhaWwsIF9fQVRPTUlDX0FDUVVJUkUpOw0KPiDCoMKg wqDCoMKgwqDCoMKgZG8gew0KPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFjdHVh bCA9IFJURV9NSU4oKGludDY0X3QpKHRhaWwgLSBoZWFkKSwgKGludDY0X3QpbmVsZW1zKTsNCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAodW5saWtlbHkoYWN0dWFsIDw9IDAp KSB7DQo+IAkJCS8qIFJlLWxvYWQgdGFpbCBvbmx5IHdoZW4gcXVldWUgbG9va3MgZW1wdHkgKi8N Cj4gwqAgwqAgwqAgwqAgCQl0YWlsID0gX19hdG9taWNfbG9hZF9uKCZyLT50YWlsLCBfX0FUT01J Q19BQ1FVSVJFKTsNCj4gDQo+IMKgIMKgIMKgIMKgIMKgIGFjdHVhbCA9IFJURV9NSU4oKGludDY0 X3QpKHRhaWwgLSBoZWFkKSwgKGludDY0X3QpbmVsZW1zKTsNCj4gCQkJaWYNCj4gKHVubGlrZWx5 KGFjdHVhbCA8PSAwKSkNCj4gCcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHJldHVybiAwOw0KPiAJCX0NCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBydGVfbGZyaW5nX2RlcV9lbGVtcyhlbGVtcywgci0+cmluZywgbWFzaywgaGVhZCwgYWN0 dWFsKTsNCj4gwqDCoMKgwqDCoMKgwqDCoH0gd2hpbGUgKCFfX2F0b21pY19jb21wYXJlX2V4Y2hh bmdlX24oJnItPmhlYWQsDQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgJmhl YWQsDQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaGVhZCArIGFjdHVhbCwN Cj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKndlYWsqL2ZhbHNlLA0KPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoF9fQVRPTUlDX1JFTEVBU0UsDQo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgX19BVE9NSUNfUkVMQVhFRCkpOw0KPiA+ ICBUaGUgdXNlciBjb3VsZCByZXRyeSBkZXF1ZXVlLCBvZiBjb3Vyc2UsIGJ1dCBob3cgbWFueSB0 aW1lcyB1bnRpbA0KPiA+IHRoZXkgZmVlbCBjb25maWRlbnQgdGhhdCB0aGUgcmluZyBpcyB0cnVs eSBlbXB0eSBhbmQgZ2l2ZSB1cD8gSSBkb24ndA0KPiA+IHRoaW5rIHdlIGNhbiBhdm9pZCByZXNl cnZpbmcgcmluZyBzbG90cyBwcmlvciB0byBlbnF1ZXVlaW5nL2RlcXVldWVpbmcuDQo+IElmIHRh aWwgaXMgKHJlLSkgcmVhZCBpbnNpZGUgdGhlIENBUy1sb29wLCB0aGVyZSBzaG91bGQgYmUgbm8g c3B1cmlvdXMgcXVldWUgZW1wdHkNCj4gZmFpbHVyZXMgYW5kIG5vIG5lZWQgdG8gcmVwZWF0ZWRs eSBjYWxsIHRoZSBkZXF1ZXVlIGZ1bmN0aW9uICJqdXN0IHRvIGJlIHN1cmUiLg0KPiBUaGUgYnVs ayBkZXF1ZXVlL2VucXVldWUgYmVoYXZpb3VyIGlzIHNlcGFyYXRlLg0KPiANCj4gPg0KPiA+IDIu IE9uIHRoZSBwbHVzIHNpZGUsIHRoZSBlbnF1ZXVlIGZ1bmN0aW9uIGRlc2lnbiB0aGF0IGFsbG93 cyBpdCB0byB1c2UNCj4gPiAxLzIgdGhlIGF0b21pY3Mgb2YgbWluZSBhcHBlYXJzIHRvIGJlIGlu ZGVwZW5kZW50IG9mIHJlc2VydmluZyByaW5nDQo+ID4gc2xvdHMsIGFuZCBzaG91bGQgdHJhbnNm ZXIgb3ZlciBmYWlybHkgY2xlYW5seS4gSSdtIGEgbGl0dGxlIGNvbmNlcm5lZA0KPiA+IGFib3V0 IHRoZSBwZXJmb3JtYW5jZSB2YXJpYWJpbGl0eSBpdCBpbnRyb2R1Y2VzIChpLmUuIGlmIHRoZSB0 aHJlYWQNCj4gPiBnZXRzIGludG8gImNhdGNoIHVwIiBtb2RlKSwNCj4gSWYgYSB0aHJlYWQgaGFz IHRvIGNhdGNoIHVwLCBpdCBtZWFucyBpdCBpcyB1c2luZyBhIHN0YWxlIChoZWFkL3RhaWwpIGlu ZGV4IChtb3JlDQo+IHRoYW4gb25lIHJpbmcgbGFwIGJlaGFpbmQpLiBCZXR0ZXIgdG8gdHJ5IHRv IGxvYWQgYSBmcmVzaCB2YWx1ZSAoaWYgb25lIGlzDQo+IGF2YWlsYWJsZSkgdGhhbiB0byBpdGVy YXRlIG92ZXIgdGhlIHJpbmcgdW50aWwgaXQgaGFzIGNhdWdodCB1cC4gU28gSSB0aGluayB0aGlz IGlzIHRoZQ0KPiBiZXR0ZXIvZmFzdGVyIGRlc2lnbi4NCj4gDQo+IENhdGNoIHVwIG1vZGUgaXMg bm90IHRyaWdnZXJlZCBieSBmaW5kaW5nIGFuIG9jY3VwaWVkIHNsb3QgZm9yIHRoZSBjdXJyZW50 IGxhcA0KPiAodGhhdCB3YXMganVzdCB3cml0dGVuIGJ5IHNvbWUgb3RoZXIgdGhyZWFkKS4gT3Ig YXQgbGVhc3QgdGhpcyBpcyB0aGUgaWRlYS4gSWYgd2UNCj4gZmluZCBhIGZyZXNobHkgd3JpdHRl biBzbG90LCB3ZSBqdXN0IG1vdmUgdG8gdGhlIG5leHQgc2xvdC4NCj4gDQo+ID4gcGFydGljdWxh cmx5IGZvciBsYXJnZXIgcmluZ3MsIHNpbmNlIHJlYWwtdGltZSBzb2Z0d2FyZSB2YWx1ZXMgcHJl ZGljdGFiaWxpdHkuDQo+ID4gV2hhdCBpZiB0aGUgcmVsb2FkIGNyaXRlcmlhIHdhcyBpbnN0ZWFk IHNvbWV0aGluZyBsaWtlOg0KPiA+DQo+ID4gI2RlZmluZSBFTlFfUkVUUllfTElNSVQgMzIgLy9h cmJpdHJhcnkNCj4gPg0KPiA+IGlmIChvbGQuZS5pZHggIT0gdGFpbCAtIHNpemUpIHsNCj4gPiDC oMKgwqDCoGlmICgrK2ZhaWxfY250IDwgRU5RX1JFVFJZX0xJTUlUKSB7DQo+ID4gwqDCoMKgwqDC oMKgwqDCoHRhaWwrKzsNCj4gPiDCoMKgwqDCoH0gZWxzZSB7DQo+ID4gwqDCoMKgwqDCoMKgwqDC oGZhaWxfY250ID0gMDsNCj4gPiDCoMKgwqDCoMKgwqDCoMKgdGFpbCA9IHJ0ZV9sZnJpbmdfcmVs b2FkKC4uLik7DQo+ID4gwqDCoMKgwqB9DQo+ID4gwqDCoMKgwqBnb3RvIHJlc3RhcnQ7DQo+ID4g fQ0KPiA+IGZhaWxfY250ID0gMDsNCj4gVGhlcmUgYXJlIHRocmVlIGNhc2VzIChzbG90IGluZGV4 IG11c3QgYmUgYmV0d2VlbiBxLT50YWlsIGFuZCBxLT5oZWFkICsgcS0NCj4gPnNpemUpOg0KPiBz bG90LmlkeCA9PSB0YWlsIC0gc2l6ZTogc2xvdCBpcyBmcmVlLCB0cnkgdG8gd3JpdGUgaXQgc2xv dC5pZHggPT0gdGFpbDogc2xvdCBoYXMganVzdCBiZWVuDQo+IHdyaXR0ZW4gKGJ5IG90aGVyIHRo cmVhZCksIHNraXAgdG8gbmV4dCBzbG90ICh0YWlsKyspIG5vbmUgb2YgdGhlIGFib3ZlOiB0aHJl YWQgaXMNCj4gYmVoaW5kIChhdCBsZWFzdCBvbmUgbGFwKSwgcmUtbG9hZCB0YWlsIGZyb20gcS0N Cj4gPnRhaWwNCj4gDQo+IEkgdGhpbmsgdXNpbmcgdGhlIHJldHJ5IGNvdW50IGFjdHVhbGx5IGRl bGF5cyBjYXRjaGluZyB1cCB0byBhIGZyZXNoIHBvc2l0aW9uLg0KPiANCg0KTWlzY29tbXVuaWNh dGlvbiBoZXJlIC0tIGJ5ICJjYXRjaCB1cCIsIEkgbWVhbnQgdGhlIGNhc2Ugd2hlcmUgdGhlIHRo cmVhZCBpcyBiZWhpbmQgYnV0IGJ5IGxlc3MgdGhhbiBvbmUgbGFwICh0aGUgc2Vjb25kIGNhc2Ug eW91IGRlc2NyaWJlKS4gSW4gdGhlIHdvcnN0IGNhc2UsIHRoZSB0aHJlYWQgd291bGQgaGF2ZSB0 byByZWFkIE4tMSAoTiA9IHJpbmcgc2l6ZSkgZW50cmllcyBiZWZvcmUgcmVhY2hpbmcgdGhlIG5l eHQgYXZhaWxhYmxlIGVudHJ5LCBhbmQgTiBjb3VsZCBlYXNpbHkgYmUgaW4gdGhlIHRob3VzYW5k cy4gVGhhdCdzIHRoZSBwZXJmb3JtYW5jZSB2YXJpYWJpbGl0eSBJIHdhcyByZWZlcnJpbmcgdG8s IGFuZCB3aHkgSSBzdWdnZXN0ZWQgY2FwcGluZyB0aGUgZmFpbGVkIHNsb3QgcmVhZHMgYXQgMzIu IE1haW50YWluaW5nIGEgbG9jYWwgZmFpbF9jbnQgdmFyaWFibGUgaXMgYSBzbWFsbCBwcmljZSB0 byBwYXkgKHJlbGF0aXZlIHRvIGEgQ0FTKSB0byBwcmV2ZW50IGEgcmluZyBlbnF1ZXVlIGxhdGVu Y3kgc3Bpa2UuDQoNCkJ1dCB5b3UncmUgcmlnaHQgdGhhdCB3ZSBzaG91bGQgc3RpbGwgY2F0Y2gg dGhlIDErIGxhcCBiZWhpbmQgY2FzZSwgc28gdGhlIHJlbG9hZCBjcml0ZXJpYSBjb3VsZCBiZToN Cg0KI2RlZmluZSBFTlFfUkVUUllfTElNSVQgMzIgLy9hcmJpdHJhcnkNCg0KaWYgKG9sZC5lLmlk eCAhPSB0YWlsIC0gc2l6ZSkgew0KICAgIGlmICgrK2ZhaWxfY250IDwgRU5RX1JFVFJZX0xJTUlU ICYmIG9sZC5lLmlkeCA9PSB0YWlsKSB7DQogICAgICAgIHRhaWwrKzsNCiAgICB9IGVsc2Ugew0K ICAgICAgICBmYWlsX2NudCA9IDA7DQogICAgICAgIHRhaWwgPSBydGVfbGZyaW5nX3JlbG9hZCgu Li4pOw0KICAgIH0NCiAgICBnb3RvIHJlc3RhcnQ7DQp9DQpmYWlsX2NudCA9IDA7DQoNCj4gPg0K PiA+IDMuIFVzaW5nIGEgemVyby1sZW5ndGggYXJyYXkgdG8gbWFyayB0aGUgc3RhcnQgb2YgdGhl IHJpbmcgaXMgYSBuaWNlDQo+ID4gYXBwcm9hY2gNCj4gPiAtLSBJJ2xsIGluY29ycG9yYXRlIHRo YXQgaW50byB0aGUgcGF0Y2hzZXQuDQo+ID4NCj4gPiBBdCBhbiBhbGdvcml0aG0gbGV2ZWwsIEkg ZG9uJ3Qgc2VlIGFueSBvdGhlciBkaWZmZXJlbmNlcy4NCj4gPiBJbXBsZW1lbnRhdGlvbi13aXNl LCB3ZSdsbCBuZWVkIHRvIG5haWwgdGhlIG1lbW9yeSBvcmRlcmluZyBmbGFncyB0bw0KPiA+IGJl c3Qgc3VwcG9ydCB3ZWFrIGNvbnNpc3RlbmN5IG1hY2hpbmVzLCBhcyB5b3UgcG9pbnRlZCBvdXQg ZWxzZXdoZXJlLg0KPiBUaGVyZSBpcyBubyBwcmUtYWNxdWlzaXRpb24gb2Ygc2xvdHMgaW4gZW5x dWV1ZSBhbmQgZGVxdWV1ZS4gVGhhdCBzZXBhcmF0ZSBzdGVwDQo+IG1ha2VzIGxvY2stZnJlZWRv bSBpbXBvc3NpYmxlIChJIHRoaW5rKS4NCj4gDQoNCkNhbiB5b3UgZWxhYm9yYXRlPyBJIGRvbid0 IGN1cnJlbnRseSBzZWUgYW55IG90aGVyIHdheSB0byBzdXBwb3J0IHJ0ZV9yaW5nIGJ1bGsgc2Vt YW50aWNzLCB3aGljaCBpcyBuZWNlc3NhcnkgZm9yIGNyZWF0aW5nIGEgbm9uLWJsb2NraW5nIG1l bXBvb2wgaGFuZGxlciwgc28gd2Ugc2hvdWxkIGNsZWFyIHVwIGFueSBkb3VidC4NCg0KSW4gdGhl IE5CIHJpbmcgcGF0Y2hzZXQgZWFjaCB0aHJlYWQgcmVzZXJ2ZXMgYSBudW1iZXIgb2Ygc2xvdHMg YmVmb3JlIHBlcmZvcm1pbmcgdGhlIGVucS9kZXEsIGJ1dCBkb2Vzbid0IHJlc2VydmUgKnNwZWNp ZmljKiBzbG90cyAodW5saWtlIHJ0ZV9yaW5nKS4gVGhpcyByZXNlcnZhdGlvbiBpcyBhdG9taWMs IHNvIHRoYXQgd2UgbmV2ZXIgb3Zlci1zdWJzY3JpYmUgdmFsaWQgcmluZyBlbnRyaWVzIChmb3Ig ZGVxdWV1ZSkgb3IgdW51c2VkIHJpbmcgZW50cmllcyAoZm9yIGVucXVldWUpLiBUaGlzIGd1YXJh bnRlZXMgdGhhdCB0aGUgZW5xL2RlcSBvcGVyYXRpb24gd2lsbCBldmVudHVhbGx5IGNvbXBsZXRl LCByZWdhcmRsZXNzIG9mIHRoZSBiZWhhdmlvciBvZiBvdGhlciB0aHJlYWRzLiBUaGlzIGlzIHdo eSB0aGUgZW5xdWV1ZSBsb29wIGRvZXNuJ3QgY2hlY2sgaWYgc3BhY2UgaXMgYXZhaWxhYmxlIGFu ZCB0aGUgZGVxdWV1ZSBsb29wIGRvZXNuJ3QgY2hlY2sgaWYgYW55IG1vcmUgdmFsaWQgZW50cmll cyByZW1haW4uDQoNClRoaXMgc29ydCBvZiByZXNlcnZhdGlvbiBzaG91bGQgYmUgY29tcGF0aWJs ZSB3aXRoIGxmcmluZywgYnV0IHJlcXVpcmVzIGNoYW5nZXMgKGUuZy4gdHdvIHNldHMgb2YgaGVh ZC90YWlsIHBvaW50ZXJzKS4NCg0KPiBXaXRoIGEgbWVyZ2VkIGltcGxlbWVudGF0aW9uLCBJIHRo aW5rIHRoZSBOT04tQkxPQ0tJTkcvTE9DSy1GUkVFIG1vZGUNCj4gbW9zdCBoYXZlIHNlcGFyYXRl IGltcGxlbWVudGF0aW9ucyBhbHNvIGZvciBTUC9TQy4gSW4gbm9uLWJsb2NraW5nL2xvY2stZnJl ZQ0KPiBtb2RlICh3aGV0aGVyIE1QL01DIG9yIFNQL1NDKSwgb25seSBvbmUgc2V0IG9mIGhlYWQv dGFpbCBwb2ludGVycyBpcyB1c2VkLiBJbg0KPiBibG9ja2luZyBtb2RlLCB0d28gc2V0cyBvZiBo ZWFkL3RhaWwgYXJlIHVzZWQuIFRoZXJlIGlzbid0IGEgc2V0IG9mIFNQL1NDIGNvZGUNCj4gdGhh dCBzdXBwb3J0cyBib3RoIG5vbi1ibG9ja2luZy9sb2NrLWZyZWUgYW5kIGJsb2NraW5nIGJlaGF2 aW91cnMuDQo+IA0KDQpTdXJlLCBJIGRvbid0IHNlZSBhIHByb2JsZW0gd2l0aCB0aGF0LiBUaGUg TkIgcmluZyBwYXRjaHNldCBoYXMgc2VwYXJhdGUgTkIgU1AvU0MgY29kZSBmcm9tIHRoZSBibG9j a2luZyBTUC9TQyBjb2RlIGFzIHdlbGwuDQoNCj4gPg0KPiA+IE91dCBvZiBjdXJpb3NpdHksIGlz IHA2NF9sZnJpbmcgYmFzZWQgb24gdGhlIG5iIHJpbmcgcGF0Y2hzZXQ/IEkNCj4gPiBub3RpY2Vk IGl0IHVzZWQgYSBkaWZmZXJlbnQgYWxnb3JpdGhtIHVudGlsIHByZXR0eSByZWNlbnRseS4NCj4g SSBjcmVhdGVkIHRoZSBvcmlnaW5hbCBsZnJpbmcgZGVzaWduICh3aGljaCBpc24ndCB0aGF0IGRp ZmZlcmVudCBJIHRoaW5rKSBiYWNrIGluDQo+IE5vdmVtYmVyIGxhc3QgYW5kIGl0IHNlZW1lZCB0 byB3b3JrIGJ1dCBJIGRpZG4ndCB0aGluayBpdCBjb3VsZCBndWFyYW50ZWUgRklGTw0KPiBvcmRl ciBhcyBlbGVtZW50cyB3ZXJlIGVucXVldWVkIGFuZCBkZXF1ZXVlZCB3aGVyZXZlciBhIHRocmVh ZCBmb3VuZCBhDQo+IHN1aXRhYmxlIHNsb3QgYW5kIGluIG15IHVzZSBjYXNlcywgRklGTyBvcmRl ciBpcyBhbiBpbXBvcnRhbnQgY2hhcmFjdGVyaXN0aWMgKG5lZWQNCj4gdG8gbWFpbnRhaW4gaW5n cmVzcy10by1lZ3Jlc3MgcGFja2V0IG9yZGVyKS4gQWxyZWFkeSB0aGVuIEkgd2FzIGNvbnNpZGVy aW5nDQo+IGFkZGluZyB0aGUgaW5kZXggdG8gdGhlIHJpbmcgc2xvdHMgdG8gZW5mb3JjZSBGSUZP IGVucXVldWUvZGVxdWV1ZSBvcmRlciwgSQ0KPiBrbmV3IHRoaXMgd291bGQgYmUgcG9zc2libGUg b24gQVJNdjdhICh3aGljaCBoYXMgMngzMiBiaXQgQ0FTIHVzaW5nDQo+IGV4Y2x1c2l2ZXMpIGFu ZCBBUk12OC9BQXJjaDY0ICh3aGljaCBoYXMgMng2NC1iaXQgQ0FTIHVzaW5nIGV4Y2x1c2l2ZXMp LiBJIGhhZA0KPiBzZWVuIHRoaXMgZGVzaWduIGlkZWEgb24gdGhlIEludGVybmV0IGJlZm9yZSAo ZS5nLg0KPiBoZXJlwqBodHRwczovL3d3dy55b3V0dWJlLmNvbS8gd2F0Y2g/dj1IUDJJblZxZ0JG TSwgSSBhY3R1YWxseSBzdG9wcGVkDQo+IHZpZXdpbmcgdGhpcyBwcmVzZW50YXRpb24gaGFsZi13 YXkgYmVjYXVzZSBJIHdhbnRlZCB0byBpcm9uIG91dCB0aGUgZGV0YWlscw0KPiBteXNlbGYpLCBp dCdzIG5vdCBhIG5vdmVsIGlkZWEgKHNvcnJ5KS4NCj4gSG93ZXZlciBJIGRpZG4ndCBoYXZlIHRp bWUgdG8gZG8gdGhpcyBjaGFuZ2UgYmVmb3JlIENocmlzdG1hcyBob2xpZGF5cyBhbmQganVzdA0K PiBjYW1lIGJhY2sgdG8gd29yayB0d28gd2Vla3MgYWdvLiBTbyBJIHdvdWxkIHJhdGhlciBjYWxs IHRoaXMgc2ltdWx0YW5lb3VzDQo+ICJpbnZlbnRpb24iIChvciBwdWJsaWNhdGlvbikuIERpZmZp Y3VsdCB0byBwcm92ZSB0aGlzIG9mIGNvdXJzZS4uLg0KPiANCj4gPg0KPiA+IFRoYW5rcywNCj4g PiBHYWdlDQo+ID4NCj4gPiA8L3NuaXA+DQo+IC0tDQo+IE9sYSBMaWxqZWRhaGwsIE5ldHdvcmtp bmcgU3lzdGVtIEFyY2hpdGVjdCwgQXJtIFBob25lICs0NjcwNjg2NjM3MywgU2t5cGUNCj4gb2xh LmxpbGplZGFobA0KDQo=