From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by dpdk.org (Postfix) with ESMTP id 515DB4D3A for ; Fri, 23 Mar 2018 14:15:34 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 23 Mar 2018 06:15:30 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.48,350,1517904000"; d="scan'208";a="27435139" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by orsmga007.jf.intel.com with ESMTP; 23 Mar 2018 06:15:29 -0700 Received: from fmsmsx153.amr.corp.intel.com (10.18.125.6) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.319.2; Fri, 23 Mar 2018 06:15:29 -0700 Received: from fmsmsx117.amr.corp.intel.com ([169.254.3.206]) by FMSMSX153.amr.corp.intel.com ([169.254.9.227]) with mapi id 14.03.0319.002; Fri, 23 Mar 2018 06:15:29 -0700 From: "Wiles, Keith" To: =?utf-8?B?R2HDq3RhbiBSaXZldA==?= CC: Neil Horman , "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH v2 04/18] eal: add lightweight kvarg parsing utility Thread-Index: AQHTwfrJJ1SrM30ReE6/vuOZqBFmnqPddDKAgACQmgCAAD6dAA== Date: Fri, 23 Mar 2018 13:15:29 +0000 Message-ID: References: <20180322141037.GC6272@hmswarspite.think-freely.org> <20180322162751.z2kjkpjcg6aw76kk@bidouze.vm.6wind.com> <20180323005349.GC16562@neilslaptop.think-freely.org> <20180323093122.erjd7fxfj4locvt2@bidouze.vm.6wind.com> In-Reply-To: <20180323093122.erjd7fxfj4locvt2@bidouze.vm.6wind.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.255.82.173] Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v2 04/18] eal: add lightweight kvarg parsing utility 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: Fri, 23 Mar 2018 13:15:35 -0000 DQoNCj4gT24gTWFyIDIzLCAyMDE4LCBhdCA0OjMxIEFNLCBHYcOrdGFuIFJpdmV0IDxnYWV0YW4u cml2ZXRANndpbmQuY29tPiB3cm90ZToNCj4gDQo+IE9uIFRodSwgTWFyIDIyLCAyMDE4IGF0IDA4 OjUzOjQ5UE0gLTA0MDAsIE5laWwgSG9ybWFuIHdyb3RlOg0KPj4gT24gVGh1LCBNYXIgMjIsIDIw MTggYXQgMDU6Mjc6NTFQTSArMDEwMCwgR2HDq3RhbiBSaXZldCB3cm90ZToNCj4+PiBPbiBUaHUs IE1hciAyMiwgMjAxOCBhdCAxMDoxMDozN0FNIC0wNDAwLCBOZWlsIEhvcm1hbiB3cm90ZToNCj4+ Pj4gT24gV2VkLCBNYXIgMjEsIDIwMTggYXQgMDU6MzI6MjRQTSArMDAwMCwgV2lsZXMsIEtlaXRo IHdyb3RlOg0KPj4+Pj4gDQo+Pj4+PiANCj4+Pj4+PiBPbiBNYXIgMjEsIDIwMTgsIGF0IDEyOjE1 IFBNLCBHYWV0YW4gUml2ZXQgPGdhZXRhbi5yaXZldEA2d2luZC5jb20+IHdyb3RlOg0KPj4+Pj4+ IA0KPj4+Pj4+IFRoaXMgbGlicmFyeSBvZmZlcnMgYSBxdWljayB3YXkgdG8gcGFyc2UgcGFyYW1l dGVycyBwYXNzZWQgd2l0aCBhDQo+Pj4+Pj4ga2V5PXZhbHVlIHN5bnRheC4NCj4+Pj4+PiANCj4+ Pj4+PiBBIHNpbmdsZSBmdW5jdGlvbiBpcyBuZWVkZWQgYW5kIGZpbmRzIHRoZSByZWxldmFudCBl bGVtZW50IHdpdGhpbiB0aGUNCj4+Pj4+PiB0ZXh0LiBObyBkeW5hbWljIGFsbG9jYXRpb24gaXMg cGVyZm9ybWVkLiBJdCBpcyBwb3NzaWJsZSB0byBjaGFpbiB0aGUNCj4+Pj4+PiBwYXJzaW5nIG9m IGVhY2ggcGFpcnMgZm9yIHF1aWNrbHkgc2Nhbm5pbmcgYSBsaXN0Lg0KPj4+Pj4+IA0KPj4+Pj4+ IFRoaXMgdXRpbGl0eSBpcyBwcml2YXRlIHRvIHRoZSBFQUwgYW5kIHNob3VsZCBhbGxvdyBhdm9p ZGluZyBoYXZpbmcgdG8NCj4+Pj4+PiBtb3ZlIGFyb3VuZCB0aGUgbW9yZSBjb21wbGV0ZSBsaWJy dGVfa3ZhcmdzLg0KPj4+Pj4gDQo+Pj4+PiBXaGF0IGlzIHRoZSBiaWcgYWR2YW50YWdlIHdpdGgg dGhpcyBjb2RlIGFuZCB0aGUgbGlicnRlX2t2YXJncyBjb2RlLiBJcyBpdCBqdXN0IG5vIGFsbG9j YXRpb24sIHJ0ZV9rdmFyZ3MgbmVlZHMgdG8gYmUgYnVpbGQgYmVmb3JlIHBhcnRzIG9mIEVBTCBv ciB3aGF0Pw0KPj4+Pj4gDQo+Pj4+PiBNeSBjb25jZXJuIGlzIHdlIGhhdmUgbm93IHR3byBmbGF2 b3JzIG9uZSBpbiBFQUwgYW5kIG9uZSBpbiBsaWJydGVfa3ZhcmdzLCB3b3VsZCBpdCBub3QgYmUg bW9yZSByZWFzb25hYmxlIHRvIGltcHJvdmUgcnRlX2t2YXJncyB0byByZW1vdmUgeW91ciBvYmpl Y3Rpb25zPyBJIGFtIGFsbCBmb3IgZmFzdCwgYmV0dGVyLCBzdHJvbmdlciBjb2RlIDotKQ0KPj4+ Pj4gDQo+Pj4+ICsxLCB0aGlzIHJlYWxseSBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSB0byBtZS4g IFR3byBwYXJzaW5nIHJvdXRpbmVzIHNlZW1zIGxpa2UNCj4+Pj4gaXRzIGp1c3QgYXNraW5nIGZv ciB1cyB0byBoYXZlIHRvIGZpeCBwYXJzaW5nIGJ1Z3MgaW4gdHdvIHBsYWNlcy4gIElmIGFsbG9j YXRpb24NCj4+Pj4gaXMgYSBjb25jZXJuLCBJIGRvbid0IHNlZSB3aHkgeW91IGNhbid0IGp1c3Qg Y2hhbmdlIHRoZSBtYWxsb2MgaW4NCj4+Pj4gcnRlX2t2YXJnc19wYXJzZSB0byBhbiBhdXRvbWF0 aWMgYWxsb2NhdGlvbiBvbiB0aGUgc3RhY2ssIG9yIGEgcHJlYWxsb2NhdGlvbiBzZXQNCj4+Pj4g b2Yga3ZhcmdzIHRoYXQgY2FuIGJlIHNoYXJlZCBmcm9tIGluaXQgdGltZS4NCj4+PiANCj4+PiBJ IHRoaW5rIHRoZSBleGlzdGluZyBhbGxvY2F0aW9uIHNjaGVtZSBpcyBmaW5lIGZvciBvdGhlciB1 c2FnZXMgKGluDQo+Pj4gZHJpdmVycyBhbmQgc28gb24pLiBOb3QgZm9yIHdoYXQgSSB3YW50ZWQg dG8gZG8uDQo+Pj4gDQo+PiBPaywgYnV0IHRoYXRzIGFuIGFkcmVzc2FibGUgaXNzdWUuICB5b3Ug Y2FuIGJpZnVyY2F0ZSB0aGUgcGFyc2UgZnVuY3Rpb24gdG8gYW4NCj4+IGludGVybmFsIGZ1bmN0 aW9uIHRoYXQgYWNjZXB0cyBhbnkgcHJlYWxsb2NhdGVkIGt2YXJncyBzdHJ1Y3QsIGFuZCBleHBv cnQgdHdvDQo+PiB3cmFwcGVyIGZ1bmN0aW9ucywgb25lIHdoaWNoIGFsbG9jYXRlcyB0aGUgc3Ry dWN0IGZyb20gdGhlIGhlYXAsIGFub3RoZXIgd2hpY2gNCj4+IGFsbG9jYXRlZCBhdXRvbWF0aWNh bGx5IG9uIHRoZSBzdGFjay4NCj4+IA0KPiANCj4gU3VyZSwgZXZlcnl0aGluZyBpcyBwb3NzaWJs ZS4NCj4gDQo+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxpYnJ0ZV9rdmFyZ3MgaXNuJ3QgbmVjZXNzZWNhcmlseQ0KPj4+PiB0aGUgYmVzdCBwYXJzaW5n IGxpYnJhcnkgZXZlciwgYnV0IGl0cyBub3QgYmFkLCBhbmQgaXQganVzdCBzZWVtcyB3cm9uZyB0 byBnbw0KPj4+PiByZS1pbnZlbnRpbmcgdGhlIHdoZWVsLg0KPj4+PiANCj4+PiANCj4+PiBJdCBz ZXJ2ZXMgYSBkaWZmZXJlbnQgcHVycG9zZSB0aGFuIHRoZSBvbmUgSSdtIHB1cnN1aW5nLg0KPj4+ IA0KPj4+IFRoaXMgaGVscGVyIGlzIGxpZ2h0d2VpZ2h0IGFuZCBwcml2YXRlLiBJZiBJIHdhbnRl ZCB0byBpbnRlZ3JhdGUgbXkNCj4+PiBuZWVkcyB3aXRoIGxpYnJ0ZV9rdmFyZ3MsIEkgd291bGQg YmUgYWRkaW5nIG5ldyBmdW5jdGlvbmFsaXRpZXMsIG1ha2luZw0KPj4+IGl0IG1vcmUgY29tcGxl eCwgYW5kIGZvciBhIHVzZS1jYXNlIHRoYXQgaXMgdXNlbGVzcyBmb3IgdGhlIHZhc3QNCj4+PiBt YWpvcml0eSBvZiB1c2VycyBvZiB0aGUgbGliLg0KPj4+IA0KPj4gT2ssIHRvIHRoYXQgZW5kOg0K Pj4gDQo+PiAxKSBQcml2YWN5IGlzIG5vdCBhbiBpc3N1ZSAoYXQgbGVhc3QgZnJvbSBteSB1bmRl cnN0YW5kaW5nIG9mIHdoYXQgeW91ciBkb2luZykuDQo+PiBJZiB3ZSBzdGFydCB3aXRoIHRoZSBh c3N1bXB0aW9uIHRoYXQgbGlicnRlX2t2YXJncyBpcyBjYXBhYmxlIG9mIHNhdGlzZnlpbmcgeW91 cg0KPj4gbmVlZHMgKGV2ZW4gaWYgaXRzIG5vdCBkb25lIGluIGFuIG9wdGltYWwgd2F5KSwgdGhl IGZhY3QgdGhhdCB5b3VyIHZlcnNpb24gb2YNCj4+IHRoZSBmdW5jdGlvbiBpcyBpbnRlcm5hbCB0 byB0aGUgbGlicmFyeSBkb2Vzbid0IHNlZW0gb3Zlcmx5IHJlbGV2YW50LCB1bmxlc3MNCj4+IHRo ZXJlcyBzb21ldGhpbmcgY3JpdGljYWwgdG8gdGhhdCBwcml2YWN5IHRoYXQgSSdtIG1pc3Npbmcu DQo+PiANCj4gDQo+IFByaXZhY3kgaXMgb25seSBhIHBvaW50IEkgYnJvdWdodCB1cCB0byBzYXkg dGhhdCB0aGUgaW1wYWN0IG9mIHRoaXMNCj4gZnVuY3Rpb24gaXMgbWluaW1hbC4gUGVvcGxlIGxv b2tpbmcgdG8gcGFyc2UgdGhlaXIga3ZhcmdzIHNob3VsZCBub3QNCj4gaGF2ZSBhbnkgYW1iaWd1 aXR5IHJlZ2FyZGluZyBob3cgdGhleSBzaG91bGQgZG8gc28uIE9ubHkgbGlicnRlX2t2YXJncw0K PiBpcyBhdmFpbGFibGUuDQo+IA0KPj4gMikgTGlnaHR3ZWlnaHQgZnVuY3Rpb24gIHNlZW1zIGxp a2Ugc29tZXRoaW5nIHRoYXQgY2FuIGJlIGludGVncmF0ZWQgd2l0aA0KPj4gbGlicnRlX2t2YXJn cy4gIExvb2tpbmcgYXQgaXQsIHdoYXQgbWF5IEkgYXNrIGluIGxpYnJ0ZV9rdmFyZ3MgaXMgaW5z dWZmaWNpZW50bHkNCj4+IG5vbi1wZXJmb3JtYW50IGZvciB5b3VyIG5lZWRzLCBzcGVjaWZpY2Fs bHk/ICBXZSB0YWxrZWQgYWJvdXQgdGhlIGhlYXANCj4+IGFsbG9jYXRpb24gYWJvdmUsIGlzIHRo ZXJlIHNvbWV0aGluZyBlbHNlPyBUaGUgc3RyaW5nIGR1cGxpY2F0aW9uIHBlcmhhcHM/DQo+PiAN Cj4+IA0KPiANCj4gTW9zdGx5IHRoZSB3YXkgdG8gdXNlIGl0Lg0KPiBUaGUgZmlsdGVyIHN0cmlu Z3MgYXJlDQo+IGJ1cz12YWx1ZSwuLi4vY2xhc3M9dmFsdWUsLi4uDQo+IA0KPiB3aGVyZSBlaXRo ZXIgYnVzPSBsaXN0IG9yIGNsYXNzPSBsaXN0IGNhbiBiZSBvbWl0dGVkLCBidXQgYXQgbGVhc3Qg b25lDQo+IG11c3QgYXBwZWFyLg0KPiANCj4gSSB3YW50IHRvIHJlYWQgYSBzaW5nbGUga3Zhcmcu IEkgZG8gbm90IHdhbnQgdG8gcGFyc2UgdGhlIHdob2xlIHN0cmluZy4NCj4gdGhlICcvJyBzaWdu aWZpZXMgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBsYXllci4NCj4gDQo+IGxpYnJ0ZV9rdmFyZ3Mg ZG9lcyBub3QgY2FyZSBhYm91dCB0aG9zZSBwb2ludHMuIEkgY2Fubm90IGFzayBpdCB0byBvbmx5 DQo+IHJlYWQgZWl0aGVyIGJ1cyBvciBjbGFzcywgYXMgaXQgd291bGQgdGhlbiB0aHJvdyBhbiBl cnJvciBmb3IgYWxsIHRoZQ0KPiBvdGhlciBrZXlzICh3aGljaCB0aGUgRUFMIGhhcyBuZWNlc3Nh cmlseSBubyBrbm93bGVkZ2Ugb2YpLg0KPiANCj4gU28gSSB3b3VsZCBuZWVkIHRvOg0KPiANCj4g ICogQWRkIGEgY3VzdG9tIHN0b3JhZ2Ugc2NoZW1lDQo+ICAqIEFkZCBhIGN1c3RvbSBwYXJzaW5n IG1vZGUgc3RvcHBpbmcgYXQgdGhlIGZpcnN0IGt2YXJnDQo+ICAqIEFkZCBhbiBlZGdlLWNhc2Ug dG8gaWdub3JlIHRoZSAnLycsIHNvIGFzIG5vdCB0byB0aHJvdyBvZmYgdGhlIHJlc3QNCj4gICAg b2YgdGhlIHBhcnNpbmcgKGxlYXN0IGl0IGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgcHJldmlv dXMga3ZhcmcNCj4gICAgdmFsdWUgZmllbGQpLg0KPiANCj4gU2VlaW5nIHRoaXMsIGRvZXMgYWRk aW5nIHRob3NlIHJlYWxseSBzcGVjaWZpY3MgZnVuY3Rpb25hbGl0eSBoZWxwDQo+IGxpYnJ0ZV9r dmFyZ3MgdG8gYmUgbW9yZSB1c2VmdWwgYW5kIHVzYWJsZT8gSSBkbyBub3QgdGhpbmsgc28uDQo+ IA0KPiBJdCB3b3VsZCBvbmx5IHNlcnZlIHRvIGRpc3J1cHQgdGhlIGxpYnJhcnkgZm9yIGEgbWFy Z2luYWwgdXNlLWNhc2UsIHdpdGgNCj4gdGhlIGludHJvZHVjdGlvbiBvZiBlZGdlLWNhc2VzIHRo YXQgd2lsbCBibHVyIHRoZSBzcGVjcyBvZiB0aGUgbGliJ3MNCj4gQVBJLCBtYWtpbmcgaXQgaGFy ZGVyIHRvIGF2b2lkIHN1YnRsZSBidWdzLg0KPiANCj4gT25seSB3YXkgdG8gZG8gc28gc2FuZWx5 IHdvdWxkIGJlIHRvIGFkZCBydGVfcGFyc2Vfa3YgYXMgcGFydCBvZg0KPiBsaWJydGVfa3Zhcmdz LCBhcyBpcy4gQnV0IHRoZW4gdGhlIHdob2xlIHRoaW5nIGRvZXMgbm90IG1ha2Ugc2Vuc2UgSU1P Og0KPiBubyBvbmUgd291bGQgY2FyZSB0byB1c2UgaXQsIHRoZSBtYWludGFpbmFuY2UgZWZmb3J0 IGlzIHRoZSBzYW1lLCB0aGUNCj4gbGlrZWx5aG9vZCBvZiBidWdzIGFzIHdlbGwgKGJ1dCBpbiB0 aGUgcHJvY2VzcyB3ZSB3b3VsZCBkaXNydXB0IHRoZQ0KPiBkaXN0cmlidXRpb24gb2YgbGlicnRl X2t2YXJncyBieSBtb3ZpbmcgaXQgd2l0aGluIHRoZSBFQUwpLg0KDQpJdCBzZWVtcyB0byBtZSB5 b3UgY291bGQgbGF5ZXIgdGhlIG5ldyBmdW5jdGlvbmFsaXR5IG9uIHRvcCBvZiBydGVfa3Zhcmdz IHRvIHByb3ZpZGUgdGhlIG5ldyBsYXllcmluZyB5b3Ugd2FudCBhbmQgc3RpbGwgcHJvdmlkZSB0 aGUgb2xkIEFQSSBmb3IgY3VycmVudCB1c2FnZS4gVGhlIGFsbG9jYXRpb24gb2YgbWVtb3J5IGlz IGludGVybmFsIHRvIHJ0ZV9rdmFyZ3MgYW5kIGl0IHJlYWxseSBzaG91bGQgbm90IGFsbG9jYXRl IG1lbW9yeSBvciBhbGxvY2F0ZSBvbiB0aGUgc3RhY2suIFRoaXMgY2hhbmdlIGlzIHNvbWV0aGlu ZyB3ZSBzaG91bGQgbW9zdCBsaWtlbHkgZG8gZm9yIHJ0ZV9rdmFyZ3MgYW55d2F5LiBJIGRvIG5v dCBsaWtlIHJvdXRpbmVzIHRoYXQgYWxsb2NhdGUgbWVtb3J5IGZvciBtZSB0aGVuIGV4cGVjdCBt ZSB0byBmcmVlIHRoZSBtZW1vcnkgbGF0ZXIgb25seSBiZWNhdXNlIGl0IG5lZWRlZCBzb21lIGlu dGVybmFsIHdvcmtpbmcgc3BhY2UsIGJ1dCB0aGF0IGlzIGp1c3QgbWUuDQoNCkluIG15IHByZXZp b3VzIGNvZGluZyBuZWVkcyBJIGhhZCBsYXllcmVkIGEgc3RydWN0dXJlIGFuZCByb3V0aW5lIG9u IHRvcCBvZiBydGVfa3ZhcmdzIHRvIHByb3ZpZGUgc29tZXRoaW5nIGNsb3NlIHRvIHlvdXIgbmVl ZHMsIGJ1dCBpbiB0aGUgbG9uZyBydW4gSSBkaWQgbm90IG5lZWQgdGhlIGNvZGUgYXMgdGhlIGRl c2lnbiBjaGFuZ2VkLiBJIGNvdWxkIGxvb2sgYXQgdGhlIGFnYWluIGFuZCBzZWUgaWYgaXQgd291 bGQgaGVscCBoZXJlLg0KDQo+IA0KPiBJIHNlZSBubyBiZW5lZml0IHRvIGVpdGhlciBzb2x1dGlv bi4NCj4gDQo+Pj4gSWYgdGhhdCdzIHJlYWxseSBhbiBpc3N1ZSwgSSdtIGJldHRlciBvZmYgc2lt cGx5IHJlbW92aW5nIHJ0ZV9wYXJzZV9rdg0KPj4+IGFuZCB3cml0aW5nIHRoZSBwYXJzaW5nIGJ5 IGhhbmQgd2l0aGluIG15IGZ1bmN0aW9uLiBUaGlzIHdvdWxkIGJlIHVnbHkNCj4+PiBhbmQgdGVk aW91cywgYnV0IGxlc3MgdGhhbiBtb3ZpbmcgbGlicnRlX2t2YXJncyB3aXRoaW4gRUFMIGFuZCBj aGFuZ2luZw0KPj4+IGl0IHRvIG15IG5lZWRzLg0KPj4gSSBkb24ndCB0aGluayB0aGF0cyBuZWNl c3NlY2FyeSwgSSBqdXN0IHRoaW5rIGlmIHlvdSBjYW4gZW5udW1lcmF0ZSB0aGUgaXRlbXMNCj4+ IHRoYXQgYXJlIG5vbi1wZXJmb3JtYW50IGZvciB5b3VyIG5lZWRzIHdlIGNhbiBtYWtlIHNvbWUg Y2hhbmdlcyB0byBsaWJydGVfa3ZhcmdzDQo+PiB0byBvcHRpbWl6ZSBhcm91bmQgdGhlbSwgb3Ig b2ZmZXIgcGFyc2luZyBvcHRpb25zIHRvIGF2b2lkIHRoZW0sIGFuZCBpbiB0aGUNCj4+IHByb2Nl c3MgYXZvaWQgc29tZSBjb2RlIGR1cGxpY2F0aW9uDQo+PiANCj4gDQo+IEkgdGhpbmsgaXQgbWFr ZXMgc2Vuc2UgdG8gaGF2ZSBzcGVjaWFsaXplZCBmdW5jdGlvbnMgZm9yIHNwZWNpYWxpemVkDQo+ IHVzZS1jYXNlcywgYW5kIGZvcmNpbmcgdGhlIGNvZGUgdG8gYmUgZ2VuZXJpYyBhbmQgd29yayB3 aXRoIGFsbCBvZiB0aGVtDQo+IHdpbGwgbWFrZSBpdCBtb3JlIGNvbXBsaWNhdGVkLg0KPiANCj4g VGhlIGdlbmVyaWNpdHkgd291bGQgb25seSBiZSB3b3J0aCBpdCBpZiBwZW9wbGUgYWN0dWFsbHkg bmVlZGVkIHRvIHBhcnNlDQo+IHRoZSBkZXZpY2Ugc3RyaW5ncyB0aGUgc2FtZSB3YXkgSSBkby4g Tm8gb25lIGhhcyBhbnkgYnVzaW5lc3MgZG9pbmcgc28uDQo+IFRoaXMgZ2VuZXJpY2l0eSBhZGRz IGNvbXBsZXhpdHkgYW5kIGlzc3Vlcywgd2l0aG91dCBldmVuIGJlaW5nIHVzZWZ1bCBpbg0KPiB0 aGUgZmlyc3QgcGxhY2UuDQo+IA0KPiAtLSANCj4gR2HDq3RhbiBSaXZldA0KPiA2V0lORA0KDQpS ZWdhcmRzLA0KS2VpdGgNCg0K