From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 4CCC55B1E; Tue, 9 Apr 2019 11:12:26 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 09 Apr 2019 02:12:25 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,328,1549958400"; d="scan'208";a="336227950" Received: from pgsmsx107.gar.corp.intel.com ([10.221.44.105]) by fmsmga005.fm.intel.com with ESMTP; 09 Apr 2019 02:12:22 -0700 Received: from pgsmsx103.gar.corp.intel.com ([169.254.2.111]) by PGSMSX107.gar.corp.intel.com ([169.254.7.67]) with mapi id 14.03.0415.000; Tue, 9 Apr 2019 17:12:23 +0800 From: "Zhao1, Wei" To: "Yigit, Ferruh" , "dev@dpdk.org" CC: "stable@dpdk.org" , "stephen@networkplumber.org" , "Ananyev, Konstantin" Thread-Topic: [dpdk-stable] [PATCH v3] app/testpmd: fix support of hex string parser for flow API Thread-Index: AQHU4GFyXPe53M0yN0G4YLqSpzGFL6YXN+gAgBxU/WD//400gIAAjT4Q Date: Tue, 9 Apr 2019 09:12:22 +0000 Message-ID: References: <1552896961-33681-1-git-send-email-wei.zhao1@intel.com> <1553224548-37749-1-git-send-email-wei.zhao1@intel.com> <5cf9b3b8-c615-0554-409e-d161b4245cac@intel.com> In-Reply-To: <5cf9b3b8-c615-0554-409e-d161b4245cac@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.600.7 dlp-reaction: no-action x-originating-ip: [172.30.20.206] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [dpdk-stable] [PATCH v3] app/testpmd: fix support of hex string parser for flow API 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: Tue, 09 Apr 2019 09:12:27 -0000 SGksICBGZXJydWgNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBZaWdp dCwgRmVycnVoDQo+IFNlbnQ6IFR1ZXNkYXksIEFwcmlsIDksIDIwMTkgNDo0NSBQTQ0KPiBUbzog WmhhbzEsIFdlaSA8d2VpLnpoYW8xQGludGVsLmNvbT47IGRldkBkcGRrLm9yZw0KPiBDYzogc3Rh YmxlQGRwZGsub3JnOyBzdGVwaGVuQG5ldHdvcmtwbHVtYmVyLm9yZzsgQW5hbnlldiwgS29uc3Rh bnRpbg0KPiA8a29uc3RhbnRpbi5hbmFueWV2QGludGVsLmNvbT4NCj4gU3ViamVjdDogUmU6IFtk cGRrLXN0YWJsZV0gW1BBVENIIHYzXSBhcHAvdGVzdHBtZDogZml4IHN1cHBvcnQgb2YgaGV4IHN0 cmluZw0KPiBwYXJzZXIgZm9yIGZsb3cgQVBJDQo+IA0KPiBPbiA0LzkvMjAxOSA4OjM4IEFNLCBa aGFvMSwgV2VpIHdyb3RlOg0KPiA+IEhpLCAgRmVycnVoDQo+ID4NCj4gPj4gLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTogWWlnaXQsIEZlcnJ1aA0KPiA+PiBTZW50OiBGcmlk YXksIE1hcmNoIDIyLCAyMDE5IDEwOjU2IFBNDQo+ID4+IFRvOiBaaGFvMSwgV2VpIDx3ZWkuemhh bzFAaW50ZWwuY29tPjsgZGV2QGRwZGsub3JnDQo+ID4+IENjOiBzdGFibGVAZHBkay5vcmc7IHN0 ZXBoZW5AbmV0d29ya3BsdW1iZXIub3JnOyBBbmFueWV2LA0KPiBLb25zdGFudGluDQo+ID4+IDxr b25zdGFudGluLmFuYW55ZXZAaW50ZWwuY29tPg0KPiA+PiBTdWJqZWN0OiBSZTogW2RwZGstc3Rh YmxlXSBbUEFUQ0ggdjNdIGFwcC90ZXN0cG1kOiBmaXggc3VwcG9ydCBvZiBoZXgNCj4gPj4gc3Ry aW5nIHBhcnNlciBmb3IgZmxvdyBBUEkNCj4gPj4NCj4gPj4gT24gMy8yMi8yMDE5IDM6MTUgQU0s IFdlaSBaaGFvIHdyb3RlOg0KPiA+Pj4gVGhlcmUgaXMgbmVlZCBmb3IgdXNlcnMgdG8gc2V0IGNv bmZpZ3VyYXRpb24gb2YgSEVYIG51bWJlciBmb3IgUlNTDQo+ID4+PiBrZXkuIFRoZSBrZXkgYnl0 ZSBzaG91bGQgYmUgcGFzcyBkb3duIGFzIGhleCBudW1iZXIgbm90IGFzIGNoYXINCj4gPj4+IHN0 cmluZy4gVGhpcyBwYXRjaCBlbmFibGUgY21kbGluZSBmbG93IHBhcnNlIEhFWCBudW1iZXIsIGlu IG9yZGVyIHRvDQo+ID4+PiBub3QgdXNpbmcgc3RyaW5nIHdoaWNoIHBhc3MgQVNJQyBudW1iZXIu DQo+ID4+Pg0KPiA+Pj4gRml4ZXM6IGY0ZDYyM2Y5NjExOSAoImFwcC90ZXN0cG1kOiBmaXggbWlz c2luZyBSU1MgZmllbGRzIGluIGZsb3cNCj4gPj4+IGFjdGlvbiIpDQo+ID4+PiBDYzogc3RhYmxl QGRwZGsub3JnDQo+ID4+Pg0KPiA+Pj4gU2lnbmVkLW9mZi1ieTogV2VpIFpoYW8gPHdlaS56aGFv MUBpbnRlbC5jb20+DQo+ID4+PiBUZXN0ZWQtYnk6IFBlbmcgWXVhbiA8eXVhbi5wZW5nQGludGVs LmNvbT4NCj4gPj4NCj4gPj4gPC4uLj4NCj4gPj4NCj4gPj4+IEBAIC00NDc1LDYgKzQ0ODYsMTM4 IEBAIHBhcnNlX3N0cmluZyhzdHJ1Y3QgY29udGV4dCAqY3R4LCBjb25zdA0KPiA+Pj4gc3RydWN0 DQo+ID4+IHRva2VuICp0b2tlbiwNCj4gPj4+ICAJcmV0dXJuIC0xOw0KPiA+Pj4gIH0NCj4gPj4+ DQo+ID4+PiArc3RhdGljIHVpbnQzMl90DQo+ID4+PiArZ2V0X2hleF92YWwoY2hhciBjKQ0KPiA+ Pj4gK3sNCj4gPj4+ICsJc3dpdGNoIChjKSB7DQo+ID4+PiArCWNhc2UgJzAnOiBjYXNlICcxJzog Y2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzogY2FzZSAnNSc6DQo+ID4+PiArCWNhc2UgJzYn OiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOg0KPiA+Pj4gKwkJcmV0dXJuIGMgLSAnMCc7 DQo+ID4+PiArCWNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdF JzogY2FzZSAnRic6DQo+ID4+PiArCQlyZXR1cm4gYyAtICdBJyArIDEwOw0KPiA+Pj4gKwljYXNl ICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6IGNhc2UgJ2YnOg0K PiA+Pj4gKwkJcmV0dXJuIGMgLSAnYScgKyAxMDsNCj4gPj4+ICsJZGVmYXVsdDoNCj4gPj4+ICsJ CXJldHVybiAwOw0KPiA+Pj4gKwl9DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gK3N0YXRpYyBp bnQNCj4gPj4+ICtwYXJzZV9oZXhfc3RyaW5nKGNvbnN0IGNoYXIgKnNyYywgdWludDhfdCAqZHN0 LCB1aW50MzJfdCAqc2l6ZSkgew0KPiA+Pj4gKwljb25zdCBjaGFyICpjOw0KPiA+Pj4gKwl1aW50 MzJfdCBpOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBDaGVjayBpbnB1dCBwYXJhbWV0ZXJzICovDQo+ ID4+PiArCWlmICgoc3JjID09IE5VTEwpIHx8DQo+ID4+PiArCQkoZHN0ID09IE5VTEwpIHx8DQo+ ID4+PiArCQkoc2l6ZSA9PSBOVUxMKSB8fA0KPiA+Pj4gKwkJKCpzaXplID09IDApKQ0KPiA+Pj4g KwkJcmV0dXJuIC0xOw0KPiA+Pj4gKwlpZiAoKCpzaXplICYgMSkgIT0gMCkNCj4gPj4+ICsJCXJl dHVybiAtMTsNCj4gPj4+ICsNCj4gPj4+ICsJZm9yIChjID0gc3JjLCBpID0gMDsgaSA8ICpzaXpl OyBjKyssIGkrKykgew0KPiA+Pj4gKwkJaWYgKGlzeGRpZ2l0KCpjKSkNCj4gPj4+ICsJCQljb250 aW51ZTsNCj4gPj4+ICsJCWVsc2UNCj4gPj4+ICsJCQlyZXR1cm4gLTE7DQo+ID4+PiArCX0NCj4g Pj4+ICsNCj4gPj4+ICsJKnNpemUgPSAqc2l6ZSAvIDI7DQo+ID4+PiArDQo+ID4+PiArCS8qIENv bnZlcnQgY2hhcnMgdG8gYnl0ZXMgKi8NCj4gPj4+ICsJZm9yIChpID0gMDsgaSA8ICpzaXplOyBp KyspDQo+ID4+PiArCQlkc3RbaV0gPSBnZXRfaGV4X3ZhbChzcmNbMiAqIGldKSAqIDE2ICsNCj4g Pj4+ICsJCQlnZXRfaGV4X3ZhbChzcmNbMiAqIGkgKyAxXSk7DQo+ID4+PiArDQo+ID4+PiArCXJl dHVybiAwOw0KPiA+Pj4gK30NCj4gPj4NCj4gPj4gSSBjYW4gc2VlIHRoaXMgaGFzIGJlZW4gZGlz Y3Vzc2VkIGFscmVhZHkgYnV0IHdoYXQgd291bGQgeW91IHRoaW5rDQo+ID4+IHVwZGF0aW5nIHRo ZSAncGFyc2VfaGV4X3N0cmluZycgc29tZXRoaW5nIGxpa2UgZm9sbG93aW5nLCBpdCBpcyBsZXNz IGNvZGUgdG8NCj4gbWFpbnRhaW46DQo+ID4+DQo+ID4+IHN0YXRpYyBpbnQNCj4gPj4gcGFyc2Vf aGV4X3N0cmluZyhjb25zdCBjaGFyICpzcmMsIHVpbnQ4X3QgKmRzdCwgdWludDMyX3QgKnNpemUp IHsNCj4gPj4gICBpbnQgbGVuOw0KPiA+PiAgIGludCBpDQo+ID4+ICAgZm9yIChpID0gMCwgbGVu ID0gMDsgaSA8ICpzaXplOyBpICs9IDIpIHsNCj4gPj4gICAgIGNoYXIgdG1wWzNdOw0KPiA+PiAg ICAgc25wcmludGYodG1wLCAzLCBzcmMgKyBpKTsNCj4gPj4gICAgIGRzdFtsZW4rK10gPSBzdHJ0 b3VsKHRtcCwgTlVMTCwgMTYpOw0KPiA+PiAgIH0NCj4gPj4gICBkc3RbbGVuXSA9IDA7DQo+ID4+ ICAgKnNpemUgPSBsZW47DQo+ID4+ICAgcmV0dXJuIDA7DQo+ID4+IH0NCj4gPj4NCj4gPj4gKGlu ZGVlZCB3aXRoIGJldHRlciBlcnJvciBjaGVja2luZyBvbiBzdHJ0b3VsIDspICkNCj4gPj4NCj4g Pj4gPC4uLj4NCj4gPg0KPiA+DQo+ID4NCj4gPiBJIGhhdmUgY2hhbmdlIGNvZGUgc3R5bGUgYXMg eW91ciBndWlkZSBhcyBiZWxsb3csIGJ1dCBzdHJ0b3VsKCkgc2VlbXMNCj4gPiBkbyBub3Qgd29y aywgaXQgcmV0dXJuIGMgd2l0aCBhIG5vbmUtbnVsbCBldmVyeSB0aW1lLg0KPiA+IHlvdSBjYW4g aGF2ZSBhIHRyeSB5b3Vyc2VsZi4NCj4gDQo+IEhpIFdlaSwNCj4gDQo+IFllcyBpdCByZXR1cm4g J2MnIG5vbmUtbnVsbCwgd2hpY2ggaXMgT0svZXhwZWN0ZWQuDQo+IA0KPiBBY2NvcmRpbmcgbWFu IHBhZ2U6DQo+ICINCj4gSWYgZW5kcHRyIGlzIG5vdCBOVUxMLCBzdHJ0b2woKSBzdG9yZXMgdGhl IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyDQo+IGluICplbmRwdHIuIElm IHRoZXJlIHdlcmUgbm8gZGlnaXRzIGF0IGFsbCwgc3RydG9sKCkgc3RvcmVzIHRoZSBvcmlnaW5h bCB2YWx1ZSBvZg0KPiBucHRyIGluICplbmRwdHIgKGFuZCByZXR1cm5zIDApLiBJbiBwYXJ0aWN1 bGFyLCBpZiAqbnB0ciBpcyBub3QgJ1wwJyBidXQgKiplbmRwdHINCj4gaXMgJ1wwJyBvbiByZXR1 cm4sIHRoZSBlbnRpcmUgc3RyaW5nIGlzIHZhbGlkLg0KPiAiDQo+IA0KPiBGaXJzdCBpbnZhbGlk IGNoYXIgaW4gYmVsb3cgaXMgJ3RtcFsyXScsIHdoaWNoIGlzICcwJywgc28gJ3N0cnRvbCcgcmV0 dXJucyAnJnRtcFsyXScsDQo+IHRoaXMgaXMgYWxpZ25lZCB3aXRoIHdoYXQgZGVzY3JpYmVkIGFi b3ZlLg0KPiANCj4gSXQgc2F5cywgImlmICpucHRyIGlzIG5vdCAnXDAnIGJ1dCAqKmVuZHB0ciBp cyAnXDAnIG9uIHJldHVybiwgdGhlIGVudGlyZSBzdHJpbmcgaXMNCj4gdmFsaWQuIiwgYmV3YXJl IGl0IHNheXMgIioqZW5kcHRyIGlzICdcMCciLCBzbyBmb2xsb3dpbmcgY2hlY2sgc2hvdWxkIHdv cms6DQo+IA0KPiBpZiAoKmMgIT0gMCkgew0KPiAgIGxlbi0tOw0KPiAgIGRzdFtsZW5dID0gMDsN Cj4gICAqc2l6ZSA9IGxlbjsNCj4gICByZXR1cm4gLTE7DQo+IH0NCg0KDQpZZXMsIHlvdSBhcmUg cmlnaHQsIGl0IGtlZXAgYWRkcmVzcyBvZiAgJ3RtcFsyXScgaW4gYywgdXBkYXRlIGluIHY0IGZv ciBjaGVjayBjb2RlIC4NCg0KPiANCj4gPg0KPiA+DQo+ID4gc3RhdGljIGludA0KPiA+IHBhcnNl X2hleF9zdHJpbmcoY29uc3QgY2hhciAqc3JjLCB1aW50OF90ICpkc3QsIHVpbnQzMl90ICpzaXpl KSB7DQo+ID4gCWNoYXIgKmMgPSBOVUxMOw0KPiA+IAl1aW50MzJfdCBpLCBsZW47DQo+ID4gCWNo YXIgdG1wWzNdOw0KPiA+DQo+ID4gCS8qIENoZWNrIGlucHV0IHBhcmFtZXRlcnMgKi8NCj4gPiAJ aWYgKChzcmMgPT0gTlVMTCkgfHwNCj4gPiAJCShkc3QgPT0gTlVMTCkgfHwNCj4gPiAJCShzaXpl ID09IE5VTEwpIHx8DQo+ID4gCQkoKnNpemUgPT0gMCkpDQo+ID4gCQlyZXR1cm4gLTE7DQo+ID4N Cj4gPiAJLyogQ29udmVydCBjaGFycyB0byBieXRlcyAqLw0KPiA+IAlmb3IgKGkgPSAwLCBsZW4g PSAwOyBpIDwgKnNpemU7IGkgKz0gMikgew0KPiA+IAkJc25wcmludGYodG1wLCAzLCAiJXMiICxz cmMgKyBpKTsNCj4gPiAJCWRzdFtsZW4rK10gPSBzdHJ0b3VsKHRtcCwgJmMsIDE2KTsNCj4gPiAJ CWlmKGMpDQo+ID4gCQkJcmV0dXJuIC0xOw0KPiA+ICAJfQ0KPiA+IAlkc3RbbGVuXSA9IDA7DQo+ ID4gCSpzaXplID0gbGVuOw0KPiA+DQo+ID4gCXJldHVybiAwOw0KPiA+IH0NCj4gPg0KPiA+Pg0K PiA+Pj4gKwkvKiBPdXRwdXQgYnVmZmVyIGlzIG5vdCBuZWNlc3NhcmlseSBOVUwtdGVybWluYXRl ZC4gKi8NCj4gPj4+ICsJbWVtY3B5KGJ1ZiwgaGV4X3RtcCwgaGV4bGVuKTsNCj4gPj4+ICsJbWVt c2V0KCh1aW50OF90ICopYnVmICsgbGVuLCAweDAwLCBzaXplIC0gaGV4bGVuKTsNCj4gPj4NCj4g Pj4gQ2FuJ3QgdGhpcyBvdmVyZmxvdyB0aGUgJ2J1Zic/IHNpbmNlICJsZW4gPSAyICogaGV4bGVu Ig0KPiA+PiBJIGd1ZXNzIGludGVudGlvbiBpcyAiYnVmICsgaGV4bGVuIg0KDQo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id A1567A0096 for ; Tue, 9 Apr 2019 11:12:28 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 7F7AC5B1E; Tue, 9 Apr 2019 11:12:27 +0200 (CEST) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 4CCC55B1E; Tue, 9 Apr 2019 11:12:26 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 09 Apr 2019 02:12:25 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,328,1549958400"; d="scan'208";a="336227950" Received: from pgsmsx107.gar.corp.intel.com ([10.221.44.105]) by fmsmga005.fm.intel.com with ESMTP; 09 Apr 2019 02:12:22 -0700 Received: from pgsmsx103.gar.corp.intel.com ([169.254.2.111]) by PGSMSX107.gar.corp.intel.com ([169.254.7.67]) with mapi id 14.03.0415.000; Tue, 9 Apr 2019 17:12:23 +0800 From: "Zhao1, Wei" To: "Yigit, Ferruh" , "dev@dpdk.org" CC: "stable@dpdk.org" , "stephen@networkplumber.org" , "Ananyev, Konstantin" Thread-Topic: [dpdk-stable] [PATCH v3] app/testpmd: fix support of hex string parser for flow API Thread-Index: AQHU4GFyXPe53M0yN0G4YLqSpzGFL6YXN+gAgBxU/WD//400gIAAjT4Q Date: Tue, 9 Apr 2019 09:12:22 +0000 Message-ID: References: <1552896961-33681-1-git-send-email-wei.zhao1@intel.com> <1553224548-37749-1-git-send-email-wei.zhao1@intel.com> <5cf9b3b8-c615-0554-409e-d161b4245cac@intel.com> In-Reply-To: <5cf9b3b8-c615-0554-409e-d161b4245cac@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.0.600.7 dlp-reaction: no-action x-originating-ip: [172.30.20.206] Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [dpdk-stable] [PATCH v3] app/testpmd: fix support of hex string parser for flow API 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" Message-ID: <20190409091222.AsDcKKptJnbiHf5HfY3HYUttIydLXkZ5r7F_IqT3NRw@z> SGksICBGZXJydWgNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBZaWdp dCwgRmVycnVoDQo+IFNlbnQ6IFR1ZXNkYXksIEFwcmlsIDksIDIwMTkgNDo0NSBQTQ0KPiBUbzog WmhhbzEsIFdlaSA8d2VpLnpoYW8xQGludGVsLmNvbT47IGRldkBkcGRrLm9yZw0KPiBDYzogc3Rh YmxlQGRwZGsub3JnOyBzdGVwaGVuQG5ldHdvcmtwbHVtYmVyLm9yZzsgQW5hbnlldiwgS29uc3Rh bnRpbg0KPiA8a29uc3RhbnRpbi5hbmFueWV2QGludGVsLmNvbT4NCj4gU3ViamVjdDogUmU6IFtk cGRrLXN0YWJsZV0gW1BBVENIIHYzXSBhcHAvdGVzdHBtZDogZml4IHN1cHBvcnQgb2YgaGV4IHN0 cmluZw0KPiBwYXJzZXIgZm9yIGZsb3cgQVBJDQo+IA0KPiBPbiA0LzkvMjAxOSA4OjM4IEFNLCBa aGFvMSwgV2VpIHdyb3RlOg0KPiA+IEhpLCAgRmVycnVoDQo+ID4NCj4gPj4gLS0tLS1PcmlnaW5h bCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTogWWlnaXQsIEZlcnJ1aA0KPiA+PiBTZW50OiBGcmlk YXksIE1hcmNoIDIyLCAyMDE5IDEwOjU2IFBNDQo+ID4+IFRvOiBaaGFvMSwgV2VpIDx3ZWkuemhh bzFAaW50ZWwuY29tPjsgZGV2QGRwZGsub3JnDQo+ID4+IENjOiBzdGFibGVAZHBkay5vcmc7IHN0 ZXBoZW5AbmV0d29ya3BsdW1iZXIub3JnOyBBbmFueWV2LA0KPiBLb25zdGFudGluDQo+ID4+IDxr b25zdGFudGluLmFuYW55ZXZAaW50ZWwuY29tPg0KPiA+PiBTdWJqZWN0OiBSZTogW2RwZGstc3Rh YmxlXSBbUEFUQ0ggdjNdIGFwcC90ZXN0cG1kOiBmaXggc3VwcG9ydCBvZiBoZXgNCj4gPj4gc3Ry aW5nIHBhcnNlciBmb3IgZmxvdyBBUEkNCj4gPj4NCj4gPj4gT24gMy8yMi8yMDE5IDM6MTUgQU0s IFdlaSBaaGFvIHdyb3RlOg0KPiA+Pj4gVGhlcmUgaXMgbmVlZCBmb3IgdXNlcnMgdG8gc2V0IGNv bmZpZ3VyYXRpb24gb2YgSEVYIG51bWJlciBmb3IgUlNTDQo+ID4+PiBrZXkuIFRoZSBrZXkgYnl0 ZSBzaG91bGQgYmUgcGFzcyBkb3duIGFzIGhleCBudW1iZXIgbm90IGFzIGNoYXINCj4gPj4+IHN0 cmluZy4gVGhpcyBwYXRjaCBlbmFibGUgY21kbGluZSBmbG93IHBhcnNlIEhFWCBudW1iZXIsIGlu IG9yZGVyIHRvDQo+ID4+PiBub3QgdXNpbmcgc3RyaW5nIHdoaWNoIHBhc3MgQVNJQyBudW1iZXIu DQo+ID4+Pg0KPiA+Pj4gRml4ZXM6IGY0ZDYyM2Y5NjExOSAoImFwcC90ZXN0cG1kOiBmaXggbWlz c2luZyBSU1MgZmllbGRzIGluIGZsb3cNCj4gPj4+IGFjdGlvbiIpDQo+ID4+PiBDYzogc3RhYmxl QGRwZGsub3JnDQo+ID4+Pg0KPiA+Pj4gU2lnbmVkLW9mZi1ieTogV2VpIFpoYW8gPHdlaS56aGFv MUBpbnRlbC5jb20+DQo+ID4+PiBUZXN0ZWQtYnk6IFBlbmcgWXVhbiA8eXVhbi5wZW5nQGludGVs LmNvbT4NCj4gPj4NCj4gPj4gPC4uLj4NCj4gPj4NCj4gPj4+IEBAIC00NDc1LDYgKzQ0ODYsMTM4 IEBAIHBhcnNlX3N0cmluZyhzdHJ1Y3QgY29udGV4dCAqY3R4LCBjb25zdA0KPiA+Pj4gc3RydWN0 DQo+ID4+IHRva2VuICp0b2tlbiwNCj4gPj4+ICAJcmV0dXJuIC0xOw0KPiA+Pj4gIH0NCj4gPj4+ DQo+ID4+PiArc3RhdGljIHVpbnQzMl90DQo+ID4+PiArZ2V0X2hleF92YWwoY2hhciBjKQ0KPiA+ Pj4gK3sNCj4gPj4+ICsJc3dpdGNoIChjKSB7DQo+ID4+PiArCWNhc2UgJzAnOiBjYXNlICcxJzog Y2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzogY2FzZSAnNSc6DQo+ID4+PiArCWNhc2UgJzYn OiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOg0KPiA+Pj4gKwkJcmV0dXJuIGMgLSAnMCc7 DQo+ID4+PiArCWNhc2UgJ0EnOiBjYXNlICdCJzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdF JzogY2FzZSAnRic6DQo+ID4+PiArCQlyZXR1cm4gYyAtICdBJyArIDEwOw0KPiA+Pj4gKwljYXNl ICdhJzogY2FzZSAnYic6IGNhc2UgJ2MnOiBjYXNlICdkJzogY2FzZSAnZSc6IGNhc2UgJ2YnOg0K PiA+Pj4gKwkJcmV0dXJuIGMgLSAnYScgKyAxMDsNCj4gPj4+ICsJZGVmYXVsdDoNCj4gPj4+ICsJ CXJldHVybiAwOw0KPiA+Pj4gKwl9DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gK3N0YXRpYyBp bnQNCj4gPj4+ICtwYXJzZV9oZXhfc3RyaW5nKGNvbnN0IGNoYXIgKnNyYywgdWludDhfdCAqZHN0 LCB1aW50MzJfdCAqc2l6ZSkgew0KPiA+Pj4gKwljb25zdCBjaGFyICpjOw0KPiA+Pj4gKwl1aW50 MzJfdCBpOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBDaGVjayBpbnB1dCBwYXJhbWV0ZXJzICovDQo+ ID4+PiArCWlmICgoc3JjID09IE5VTEwpIHx8DQo+ID4+PiArCQkoZHN0ID09IE5VTEwpIHx8DQo+ ID4+PiArCQkoc2l6ZSA9PSBOVUxMKSB8fA0KPiA+Pj4gKwkJKCpzaXplID09IDApKQ0KPiA+Pj4g KwkJcmV0dXJuIC0xOw0KPiA+Pj4gKwlpZiAoKCpzaXplICYgMSkgIT0gMCkNCj4gPj4+ICsJCXJl dHVybiAtMTsNCj4gPj4+ICsNCj4gPj4+ICsJZm9yIChjID0gc3JjLCBpID0gMDsgaSA8ICpzaXpl OyBjKyssIGkrKykgew0KPiA+Pj4gKwkJaWYgKGlzeGRpZ2l0KCpjKSkNCj4gPj4+ICsJCQljb250 aW51ZTsNCj4gPj4+ICsJCWVsc2UNCj4gPj4+ICsJCQlyZXR1cm4gLTE7DQo+ID4+PiArCX0NCj4g Pj4+ICsNCj4gPj4+ICsJKnNpemUgPSAqc2l6ZSAvIDI7DQo+ID4+PiArDQo+ID4+PiArCS8qIENv bnZlcnQgY2hhcnMgdG8gYnl0ZXMgKi8NCj4gPj4+ICsJZm9yIChpID0gMDsgaSA8ICpzaXplOyBp KyspDQo+ID4+PiArCQlkc3RbaV0gPSBnZXRfaGV4X3ZhbChzcmNbMiAqIGldKSAqIDE2ICsNCj4g Pj4+ICsJCQlnZXRfaGV4X3ZhbChzcmNbMiAqIGkgKyAxXSk7DQo+ID4+PiArDQo+ID4+PiArCXJl dHVybiAwOw0KPiA+Pj4gK30NCj4gPj4NCj4gPj4gSSBjYW4gc2VlIHRoaXMgaGFzIGJlZW4gZGlz Y3Vzc2VkIGFscmVhZHkgYnV0IHdoYXQgd291bGQgeW91IHRoaW5rDQo+ID4+IHVwZGF0aW5nIHRo ZSAncGFyc2VfaGV4X3N0cmluZycgc29tZXRoaW5nIGxpa2UgZm9sbG93aW5nLCBpdCBpcyBsZXNz IGNvZGUgdG8NCj4gbWFpbnRhaW46DQo+ID4+DQo+ID4+IHN0YXRpYyBpbnQNCj4gPj4gcGFyc2Vf aGV4X3N0cmluZyhjb25zdCBjaGFyICpzcmMsIHVpbnQ4X3QgKmRzdCwgdWludDMyX3QgKnNpemUp IHsNCj4gPj4gICBpbnQgbGVuOw0KPiA+PiAgIGludCBpDQo+ID4+ICAgZm9yIChpID0gMCwgbGVu ID0gMDsgaSA8ICpzaXplOyBpICs9IDIpIHsNCj4gPj4gICAgIGNoYXIgdG1wWzNdOw0KPiA+PiAg ICAgc25wcmludGYodG1wLCAzLCBzcmMgKyBpKTsNCj4gPj4gICAgIGRzdFtsZW4rK10gPSBzdHJ0 b3VsKHRtcCwgTlVMTCwgMTYpOw0KPiA+PiAgIH0NCj4gPj4gICBkc3RbbGVuXSA9IDA7DQo+ID4+ ICAgKnNpemUgPSBsZW47DQo+ID4+ICAgcmV0dXJuIDA7DQo+ID4+IH0NCj4gPj4NCj4gPj4gKGlu ZGVlZCB3aXRoIGJldHRlciBlcnJvciBjaGVja2luZyBvbiBzdHJ0b3VsIDspICkNCj4gPj4NCj4g Pj4gPC4uLj4NCj4gPg0KPiA+DQo+ID4NCj4gPiBJIGhhdmUgY2hhbmdlIGNvZGUgc3R5bGUgYXMg eW91ciBndWlkZSBhcyBiZWxsb3csIGJ1dCBzdHJ0b3VsKCkgc2VlbXMNCj4gPiBkbyBub3Qgd29y aywgaXQgcmV0dXJuIGMgd2l0aCBhIG5vbmUtbnVsbCBldmVyeSB0aW1lLg0KPiA+IHlvdSBjYW4g aGF2ZSBhIHRyeSB5b3Vyc2VsZi4NCj4gDQo+IEhpIFdlaSwNCj4gDQo+IFllcyBpdCByZXR1cm4g J2MnIG5vbmUtbnVsbCwgd2hpY2ggaXMgT0svZXhwZWN0ZWQuDQo+IA0KPiBBY2NvcmRpbmcgbWFu IHBhZ2U6DQo+ICINCj4gSWYgZW5kcHRyIGlzIG5vdCBOVUxMLCBzdHJ0b2woKSBzdG9yZXMgdGhl IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyDQo+IGluICplbmRwdHIuIElm IHRoZXJlIHdlcmUgbm8gZGlnaXRzIGF0IGFsbCwgc3RydG9sKCkgc3RvcmVzIHRoZSBvcmlnaW5h bCB2YWx1ZSBvZg0KPiBucHRyIGluICplbmRwdHIgKGFuZCByZXR1cm5zIDApLiBJbiBwYXJ0aWN1 bGFyLCBpZiAqbnB0ciBpcyBub3QgJ1wwJyBidXQgKiplbmRwdHINCj4gaXMgJ1wwJyBvbiByZXR1 cm4sIHRoZSBlbnRpcmUgc3RyaW5nIGlzIHZhbGlkLg0KPiAiDQo+IA0KPiBGaXJzdCBpbnZhbGlk IGNoYXIgaW4gYmVsb3cgaXMgJ3RtcFsyXScsIHdoaWNoIGlzICcwJywgc28gJ3N0cnRvbCcgcmV0 dXJucyAnJnRtcFsyXScsDQo+IHRoaXMgaXMgYWxpZ25lZCB3aXRoIHdoYXQgZGVzY3JpYmVkIGFi b3ZlLg0KPiANCj4gSXQgc2F5cywgImlmICpucHRyIGlzIG5vdCAnXDAnIGJ1dCAqKmVuZHB0ciBp cyAnXDAnIG9uIHJldHVybiwgdGhlIGVudGlyZSBzdHJpbmcgaXMNCj4gdmFsaWQuIiwgYmV3YXJl IGl0IHNheXMgIioqZW5kcHRyIGlzICdcMCciLCBzbyBmb2xsb3dpbmcgY2hlY2sgc2hvdWxkIHdv cms6DQo+IA0KPiBpZiAoKmMgIT0gMCkgew0KPiAgIGxlbi0tOw0KPiAgIGRzdFtsZW5dID0gMDsN Cj4gICAqc2l6ZSA9IGxlbjsNCj4gICByZXR1cm4gLTE7DQo+IH0NCg0KDQpZZXMsIHlvdSBhcmUg cmlnaHQsIGl0IGtlZXAgYWRkcmVzcyBvZiAgJ3RtcFsyXScgaW4gYywgdXBkYXRlIGluIHY0IGZv ciBjaGVjayBjb2RlIC4NCg0KPiANCj4gPg0KPiA+DQo+ID4gc3RhdGljIGludA0KPiA+IHBhcnNl X2hleF9zdHJpbmcoY29uc3QgY2hhciAqc3JjLCB1aW50OF90ICpkc3QsIHVpbnQzMl90ICpzaXpl KSB7DQo+ID4gCWNoYXIgKmMgPSBOVUxMOw0KPiA+IAl1aW50MzJfdCBpLCBsZW47DQo+ID4gCWNo YXIgdG1wWzNdOw0KPiA+DQo+ID4gCS8qIENoZWNrIGlucHV0IHBhcmFtZXRlcnMgKi8NCj4gPiAJ aWYgKChzcmMgPT0gTlVMTCkgfHwNCj4gPiAJCShkc3QgPT0gTlVMTCkgfHwNCj4gPiAJCShzaXpl ID09IE5VTEwpIHx8DQo+ID4gCQkoKnNpemUgPT0gMCkpDQo+ID4gCQlyZXR1cm4gLTE7DQo+ID4N Cj4gPiAJLyogQ29udmVydCBjaGFycyB0byBieXRlcyAqLw0KPiA+IAlmb3IgKGkgPSAwLCBsZW4g PSAwOyBpIDwgKnNpemU7IGkgKz0gMikgew0KPiA+IAkJc25wcmludGYodG1wLCAzLCAiJXMiICxz cmMgKyBpKTsNCj4gPiAJCWRzdFtsZW4rK10gPSBzdHJ0b3VsKHRtcCwgJmMsIDE2KTsNCj4gPiAJ CWlmKGMpDQo+ID4gCQkJcmV0dXJuIC0xOw0KPiA+ICAJfQ0KPiA+IAlkc3RbbGVuXSA9IDA7DQo+ ID4gCSpzaXplID0gbGVuOw0KPiA+DQo+ID4gCXJldHVybiAwOw0KPiA+IH0NCj4gPg0KPiA+Pg0K PiA+Pj4gKwkvKiBPdXRwdXQgYnVmZmVyIGlzIG5vdCBuZWNlc3NhcmlseSBOVUwtdGVybWluYXRl ZC4gKi8NCj4gPj4+ICsJbWVtY3B5KGJ1ZiwgaGV4X3RtcCwgaGV4bGVuKTsNCj4gPj4+ICsJbWVt c2V0KCh1aW50OF90ICopYnVmICsgbGVuLCAweDAwLCBzaXplIC0gaGV4bGVuKTsNCj4gPj4NCj4g Pj4gQ2FuJ3QgdGhpcyBvdmVyZmxvdyB0aGUgJ2J1Zic/IHNpbmNlICJsZW4gPSAyICogaGV4bGVu Ig0KPiA+PiBJIGd1ZXNzIGludGVudGlvbiBpcyAiYnVmICsgaGV4bGVuIg0KDQo=