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 4331EA0583; Thu, 19 Mar 2020 17:13:17 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 97C71F94; Thu, 19 Mar 2020 17:13:16 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by dpdk.org (Postfix) with ESMTP id 350713B5 for ; Thu, 19 Mar 2020 17:13:14 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 02JG5Gsf007929; Thu, 19 Mar 2020 09:13:11 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pfpt0818; bh=omFf2VSGEolzhbXcO3Xz1fLaCUSA8g2bU3gYPfSOeKM=; b=QazjHnzTjYFbgNVSArU4OHrmTpiBNjzSAj9EZawG1TjRy6i97w2xMPxy8uQF9qIFhi4u Ys+QjZPwygTe7cq89Ih7mxZPLglfgz+UYV4cI5MM2bMm0XvKKuJWU2QVeHRAuXvTvnoS cqWz47CAfJY5kKTiz0DYJqkH2EanWpoYyhrUIc3Lp3F3c8DJU9llaZbZeI6NEMAGf2Pt Z2ei/XxuVJEMXv86nuNVoJzNEQCkLqAyqdmdZIRvVOXozOvRnrlkpRaLmSyolJPYUwRw 9yuNwHcv9SdTFrTlSvMbgXIAkpRs2XNVJ3Vp85R29bqvbLLYpwPsZnleCPiyEt9tea7h QQ== Received: from sc-exch02.marvell.com ([199.233.58.182]) by mx0a-0016f401.pphosted.com with ESMTP id 2yu8pqrmuy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 19 Mar 2020 09:13:09 -0700 Received: from SC-EXCH04.marvell.com (10.93.176.84) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 19 Mar 2020 09:13:08 -0700 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.41) by SC-EXCH04.marvell.com (10.93.176.84) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Thu, 19 Mar 2020 09:13:08 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VvcgghgbvBN9TIkwMRb8mgdnlkTg70ULL/ZpoC2uD7qH/IL1p/c/mbmzDskCin4cgcnZCd7QPD0ZjZPvnrdCt4MvaopXBDjU6X/l1a0oRERRrRBYCGNrAo1aWrKTokEhN1mdmXPy+D8nQMRrfDZEEPFFWFefTtKLDHxL7p86DNj0bcfiiLKWV3p2AN2lPgBUwiiu/ezqzYu15opeu34cW2/meKBn7BwF1B0iEdQrMEl3LXUIKFbHglCga1oo8IBjE/TZK6suO1+OD7Yzp5X030BQxEXdiNEGAHwrg/yjippxt2ltn5jxha9fFO0SyBQuskZ0OVuB/hSmjm9lnVBBpQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=omFf2VSGEolzhbXcO3Xz1fLaCUSA8g2bU3gYPfSOeKM=; b=cAR3v9ZqiJfq6V4nUM1OV9jQncQsK+hvVNgKYjZvivkxOxJ6weTR7mm1Y4Vec0g48oyPThsvlVNySiuwiDQCvAtltqlISJjNJCndPlh7sA6m2sdveUFkM18iVcTwjbgIOG4+pkXM+vYvr8PWQZpMq6gT0fjcdYw1zG8UDpuMchtT8lo60WaO6mxysv56PbVEIaLKxIWht97sEjFS82ty++y+20sI3CNaiOphLAmxIpJA/gsib8xfNsVCki5umasOFqKOE4gFmEHs7WQC6KOXnL+u9y1vnqgZT6fPb0J3t6DrI6WyXuL4cL2EtD92eXcqDMad8iWhHrJCQ0wy4sLx+A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=omFf2VSGEolzhbXcO3Xz1fLaCUSA8g2bU3gYPfSOeKM=; b=MH14UmJLM6FNsTqjVVdY6xjpm/Wij5bdIw0C0IkN23XVuNWIcn7GPcpCKa78w9L6vlU8+uU+Ckw38vjZHG2sWO2N2hLf6wcHudX0mrmrhbTgg1Cr6v76Di0tK5HLDOU79VgH33Cvy/u5qIgnJR/2vb+//W9SYvnEWfr/8LuHxa8= Received: from CY4PR1801MB1863.namprd18.prod.outlook.com (2603:10b6:910:7b::32) by CY4PR1801MB1816.namprd18.prod.outlook.com (2603:10b6:910:7f::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2835.18; Thu, 19 Mar 2020 16:13:07 +0000 Received: from CY4PR1801MB1863.namprd18.prod.outlook.com ([fe80::3ce0:be16:b19f:6383]) by CY4PR1801MB1863.namprd18.prod.outlook.com ([fe80::3ce0:be16:b19f:6383%7]) with mapi id 15.20.2814.021; Thu, 19 Mar 2020 16:13:07 +0000 From: Pavan Nikhilesh Bhagavatula To: Ray Kinsella , Jerin Jacob Kollanukkaran , Nithin Kumar Dabilpuram CC: "dev@dpdk.org" , "thomas@monjalon.net" , "david.marchand@redhat.com" , "mattias.ronnblom@ericsson.com" , Kiran Kumar Kokkilagadda Thread-Topic: [EXT] Re: [dpdk-dev] [PATCH v1 20/26] node: ipv4 lookup for x86 Thread-Index: AQHV/W1QZK9hb7vUJEq1M59lDqobbqhP2A4AgAAbR1CAAB4TAIAABcvw Date: Thu, 19 Mar 2020 16:13:07 +0000 Message-ID: References: <20200318213551.3489504-1-jerinj@marvell.com> <20200318213551.3489504-21-jerinj@marvell.com> <02c4c25a-83ba-dac5-20e6-7b140cbcb4f1@ashroe.eu> <5a99e696-3853-5782-0a4c-0debcc74faa8@ashroe.eu> In-Reply-To: <5a99e696-3853-5782-0a4c-0debcc74faa8@ashroe.eu> Accept-Language: en-IN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [122.172.110.222] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e3fc7252-07d6-44c2-9779-08d7cc20693c x-ms-traffictypediagnostic: CY4PR1801MB1816: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6790; x-forefront-prvs: 0347410860 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(136003)(346002)(39850400004)(396003)(376002)(366004)(199004)(110136005)(6636002)(186003)(4326008)(8936002)(107886003)(2906002)(26005)(316002)(81166006)(55016002)(9686003)(54906003)(66556008)(64756008)(86362001)(33656002)(66476007)(8676002)(52536014)(71200400001)(478600001)(53546011)(66446008)(5660300002)(66946007)(7696005)(81156014)(6506007)(76116006); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR1801MB1816; H:CY4PR1801MB1863.namprd18.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; received-spf: None (protection.outlook.com: marvell.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: izsYEN2vu9OCjxuohcntIxraih8K2MooPrFjnDdP8DSvXlcwdd/CRomPdmp86Ewgu1tpEjVQGl/RwY9isc9zBA9/IyyDuhBzyVUB9FNQ3WVE7ZR3AG/tbUg2y+zuSwBU2aLairKCdEabIBsVVDrO5ldvZ1gmlYO59GbKFb2TYSg9DAZFt7MXuo2jKJWYtQ2q3TPod2q36Xn6ZQ7PLbO1LZU3LKTFHKubZsXhehMXZXEPN3Q0e4bu/KHNf3ISA38pdXwk43VVkOYTcYF2WWI356r0Su7FzFexPR+q+zJIZaCVe6qnkYbNjyLDKX+jSgoGAxPiiAJqSqRur3vBIRGLi668GJdyMG2/Y2/M7QUSnxN1CppvtgSApxSVFfwoIt/JaxRnwBt67rSog6QV8sksYzvOvPOCrjyxVtBNIJmANd/GcoSZiEEktIVE4FE+3t3F x-ms-exchange-antispam-messagedata: AdlNKHn4eGpDQBs7MejQG6Th9IoP+5if2CyV3zZ3QDT5L7hLOgALVWV4f+Gzn5qBz9ES4mIXLE6Qu6ku+bklNB3pVVyFlh7AoYJXWmBAdUH23hD0gqMDr3YWEMBRxfKjSLAKTRwyX1vTdsJ0CgRizA== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: e3fc7252-07d6-44c2-9779-08d7cc20693c X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Mar 2020 16:13:07.1690 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: +hE0Npotu09wTfnUkjTWuOzz/FPzvL5MsIojtaw9BO/v/BtyfkSXqX23o41vArvFZWGfmGmQXBbecCcq8d7wbiwsGnDkKlqNkTsBqYMkF2Q= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR1801MB1816 X-OriginatorOrg: marvell.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.645 definitions=2020-03-19_06:2020-03-19, 2020-03-19 signatures=0 Subject: Re: [dpdk-dev] [EXT] Re: [PATCH v1 20/26] node: ipv4 lookup for x86 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" DQoNCj4tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPkZyb206IFJheSBLaW5zZWxsYSA8bWRy QGFzaHJvZS5ldT4NCj5TZW50OiBUaHVyc2RheSwgTWFyY2ggMTksIDIwMjAgOToyMSBQTQ0KPlRv OiBQYXZhbiBOaWtoaWxlc2ggQmhhZ2F2YXR1bGEgPHBiaGFnYXZhdHVsYUBtYXJ2ZWxsLmNvbT47 IEplcmluDQo+SmFjb2IgS29sbGFudWtrYXJhbiA8amVyaW5qQG1hcnZlbGwuY29tPjsgTml0aGlu IEt1bWFyIERhYmlscHVyYW0NCj48bmRhYmlscHVyYW1AbWFydmVsbC5jb20+DQo+Q2M6IGRldkBk cGRrLm9yZzsgdGhvbWFzQG1vbmphbG9uLm5ldDsNCj5kYXZpZC5tYXJjaGFuZEByZWRoYXQuY29t OyBtYXR0aWFzLnJvbm5ibG9tQGVyaWNzc29uLmNvbTsgS2lyYW4NCj5LdW1hciBLb2traWxhZ2Fk ZGEgPGtpcmFua3VtYXJrQG1hcnZlbGwuY29tPg0KPlN1YmplY3Q6IFJlOiBbRVhUXSBSZTogW2Rw ZGstZGV2XSBbUEFUQ0ggdjEgMjAvMjZdIG5vZGU6IGlwdjQgbG9va3VwDQo+Zm9yIHg4Ng0KPg0K Pg0KPg0KPk9uIDE5LzAzLzIwMjAgMTQ6MjIsIFBhdmFuIE5pa2hpbGVzaCBCaGFnYXZhdHVsYSB3 cm90ZToNCj4+PiBPbiAxOC8wMy8yMDIwIDIxOjM1LCBqZXJpbmpAbWFydmVsbC5jb20gd3JvdGU6 DQo+Pj4+IEZyb206IFBhdmFuIE5pa2hpbGVzaCA8cGJoYWdhdmF0dWxhQG1hcnZlbGwuY29tPg0K Pj4+Pg0KPj4+PiBBZGQgSVB2NCBsb29rdXAgcHJvY2VzcyBmdW5jdGlvbiBmb3IgaXA0X2xvb2t1 cA0KPj4+PiBydGVfbm9kZS4gVGhpcyBub2RlIHBlcmZvcm1zIExQTSBsb29rdXAgdXNpbmcgeDg2 XzY0DQo+Pj4+IHZlY3RvciBzdXBwb3J0ZWQgUlRFX0xQTSBBUEkgb24gZXZlcnkgcGFja2V0IHJl Y2VpdmVkDQo+Pj4+IGFuZCBmb3J3YXJkcyBpdCB0byBhIG5leHQgbm9kZSB0aGF0IGlzIGlkZW50 aWZpZWQgYnkNCj4+Pj4gbG9va3VwIHJlc3VsdC4NCj4+Pj4NCj4+Pj4gU2lnbmVkLW9mZi1ieTog UGF2YW4gTmlraGlsZXNoIDxwYmhhZ2F2YXR1bGFAbWFydmVsbC5jb20+DQo+Pj4+IFNpZ25lZC1v ZmYtYnk6IE5pdGhpbiBEYWJpbHB1cmFtIDxuZGFiaWxwdXJhbUBtYXJ2ZWxsLmNvbT4NCj4+Pj4g U2lnbmVkLW9mZi1ieTogS2lyYW4gS3VtYXIgSyA8a2lyYW5rdW1hcmtAbWFydmVsbC5jb20+DQo+ Pj4+IC0tLQ0KPj4+PiAgbGliL2xpYnJ0ZV9ub2RlL2lwNF9sb29rdXAuYyB8IDI0NQ0KPj4+ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+Pj4+ICAxIGZpbGUgY2hhbmdlZCwg MjQ1IGluc2VydGlvbnMoKykNCj4+Pj4NCj4+Pj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfbm9k ZS9pcDRfbG9va3VwLmMNCj4+PiBiL2xpYi9saWJydGVfbm9kZS9pcDRfbG9va3VwLmMNCj4+Pj4g aW5kZXggZDdmY2QxMTU4Li5jMDAzZTljOTEgMTAwNjQ0DQo+Pj4+IC0tLSBhL2xpYi9saWJydGVf bm9kZS9pcDRfbG9va3VwLmMNCj4+Pj4gKysrIGIvbGliL2xpYnJ0ZV9ub2RlL2lwNF9sb29rdXAu Yw0KPj4+PiBAQCAtMjY0LDYgKzI2NCwyNTEgQEAgaXA0X2xvb2t1cF9ub2RlX3Byb2Nlc3Moc3Ry dWN0DQo+cnRlX2dyYXBoDQo+Pj4gKmdyYXBoLCBzdHJ1Y3QgcnRlX25vZGUgKm5vZGUsDQo+Pj4+ ICAJcmV0dXJuIG5iX29ianM7DQo+Pj4+ICB9DQo+Pj4+DQo+Pj4+ICsjZWxpZiBkZWZpbmVkKFJU RV9BUkNIX1g4NikNCj4+Pj4gKw0KPj4+PiArLyogWDg2IFNTRSAqLw0KPj4+PiArc3RhdGljIHVp bnQxNl90DQo+Pj4+ICtpcDRfbG9va3VwX25vZGVfcHJvY2VzcyhzdHJ1Y3QgcnRlX2dyYXBoICpn cmFwaCwgc3RydWN0DQo+cnRlX25vZGUNCj4+PiAqbm9kZSwNCj4+Pj4gKwkJCXZvaWQgKipvYmpz LCB1aW50MTZfdCBuYl9vYmpzKQ0KPj4+PiArew0KPj4+PiArCXN0cnVjdCBydGVfbWJ1ZiAqbWJ1 ZjAsICptYnVmMSwgKm1idWYyLCAqbWJ1ZjMsICoqcGt0czsNCj4+Pj4gKwlydGVfZWRnZV90IG5l eHQwLCBuZXh0MSwgbmV4dDIsIG5leHQzLCBuZXh0X2luZGV4Ow0KPj4+PiArCXN0cnVjdCBydGVf aXB2NF9oZHIgKmlwdjRfaGRyOw0KPj4+PiArCXN0cnVjdCBydGVfZXRoZXJfaGRyICpldGhfaGRy Ow0KPj4+PiArCXVpbnQzMl90IGlwMCwgaXAxLCBpcDIsIGlwMzsNCj4+Pj4gKwl2b2lkICoqdG9f bmV4dCwgKipmcm9tOw0KPj4+PiArCXVpbnQxNl90IGxhc3Rfc3BlYyA9IDA7DQo+Pj4+ICsJdWlu dDE2X3Qgbl9sZWZ0X2Zyb207DQo+Pj4+ICsJc3RydWN0IHJ0ZV9scG0gKmxwbTsNCj4+Pj4gKwl1 aW50MTZfdCBoZWxkID0gMDsNCj4+Pj4gKwl1aW50MzJfdCBkcm9wX25oOw0KPj4+PiArCXJ0ZV94 bW1fdCBkc3Q7DQo+Pj4+ICsJX19tMTI4aSBkaXA7IC8qIFNTRSByZWdpc3RlciAqLw0KPj4+PiAr CWludCByYywgaTsNCj4+Pj4gKw0KPj4+PiArCS8qIFNwZWN1bGF0aXZlIG5leHQgKi8NCj4+Pj4g KwluZXh0X2luZGV4ID0gUlRFX05PREVfSVA0X0xPT0tVUF9ORVhUX1JFV1JJVEU7DQo+Pj4+ICsJ LyogRHJvcCBub2RlICovDQo+Pj4+ICsJZHJvcF9uaCA9DQo+Pj4gKCh1aW50MzJfdClSVEVfTk9E RV9JUDRfTE9PS1VQX05FWFRfUEtUX0RST1ApIDw8IDE2Ow0KPj4+PiArDQo+Pj4+ICsJLyogR2V0 IHNvY2tldCBzcGVjaWZpYyBMUE0gZnJvbSBjdHggKi8NCj4+Pj4gKwlscG0gPSAqKChzdHJ1Y3Qg cnRlX2xwbSAqKilub2RlLT5jdHgpOw0KPj4+PiArDQo+Pj4+ICsJcGt0cyA9IChzdHJ1Y3QgcnRl X21idWYgKiopb2JqczsNCj4+Pj4gKwlmcm9tID0gb2JqczsNCj4+Pj4gKwluX2xlZnRfZnJvbSA9 IG5iX29ianM7DQo+Pj4NCj4+PiBJIGRvdWJ0IHRoaXMgaW5pdGlhbCBwcmVmZXRjaCBvZiB0aGUg Zmlyc3QgNCBwYWNrZXRzIGhhcyBhbnkgYmVuZWZpdC4NCj4+DQo+PiBBY2sgd2lsbCByZW1vdmUg aW4gdjIgZm9yIHg4Ni4NCj4+DQo+Pj4NCj4+Pj4gKwlpZiAobl9sZWZ0X2Zyb20gPj0gNCkgew0K Pj4+PiArCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7DQo+Pj4+ICsJCQlydGVfcHJlZmV0Y2gw KHJ0ZV9wa3RtYnVmX210b2QocGt0c1tpXSwNCj4+Pj4gKwkJCQkJCSAgICAgICBzdHJ1Y3QgcnRl X2V0aGVyX2hkcg0KPj4+ICopICsNCj4+Pj4gKwkJCQkgICAgICAxKTsNCj4+Pj4gKwkJfQ0KPj4+ PiArCX0NCj4+Pj4gKw0KPj4+PiArCS8qIEdldCBzdHJlYW0gZm9yIHRoZSBzcGVjdWxhdGVkIG5l eHQgbm9kZSAqLw0KPj4+PiArCXRvX25leHQgPSBydGVfbm9kZV9uZXh0X3N0cmVhbV9nZXQoZ3Jh cGgsIG5vZGUsDQo+Pj4gbmV4dF9pbmRleCwgbmJfb2Jqcyk7DQo+Pj4NCj4+PiBTdWdnZXN0IHlv dSBkb24ndCByZXVzZSB0aGUgaGFuZC11bnJvbGxpbmcgb3B0aW1pemF0aW9uIGZyb20gRkQuaW8N Cj4+PiBWUFAuDQo+Pj4gSSBoYXZlIG5ldmVyIGZvdW5kIGFueSBwZXJmb3JtYW5jZSBiZW5lZml0 IGZyb20gdGhlbSwgYW5kIHRoZXkNCj4+PiBtYWtlIHRoZSBjb2RlIHVubmVjZXNzYXJpbHkgdmVy Ym9zZS4NCj4+Pg0KPj4NCj4+IEhvdyB3b3VsZCBiZSB0YWtlIHRoZSBiZW5lZml0IG9mIHJ0ZV9s cG1fbG9va3VweDQgd2l0aG91dA0KPnVucm9sbGluZyB0aGUgbG9vcD8uDQo+PiBBbHNvLCBpbiBm dXR1cmUgaWYgd2UgYXJlIHVzaW5nIHJ0ZV9yaWIgYW5kIGZpYiB3aXRoIGEgQ1BVIHN1cHBvcnRp bmcNCj53aWRlciBTSU1EIHdlIG1pZ2h0DQo+PiBuZWVkIHRvIHVucm9sbCB0aGVtIGZ1cnRoZXIg KEFWWDI1NiBBTkQgNTEyIGN1cnJlbnRseQ0KPnJ0ZV9scG1fbG9va3VwIHVzZXMgb25seSAxMjhi aXQNCj4+IHNpbmNlIGl0IGlzIG9ubHkgdXNlcyBTU0UgZXh0ZW5zaW9uKS4NCj4NCj5MZXQgdGhl IGNvbXBpbGVyIGRvIGl0IGZvciB5b3UsIGJ1dCB1c2luZyBhIGNvbnN0YW50IHZlY3RvciBsZW5n dGguDQo+Zm9yIChpbnQgaT0wOyBpIDwgNDsgKytpKSB7IC4uLiB9DQo+DQoNCk9rLCBJIHRoaW5r IEkgbWlzdW5kZXJzdG9vZCB0aGUgcHJldmlvdXMgY29tbWVudC4gDQpJdCB3YXMgb25seSBmb3Ig dGhlIHByZWZldGNoZXMgaW4gdGhlIGxvb3AgcmlnaHQ/DQoNCj4+DQo+Pj4NCj4+Pj4gKwl3aGls ZSAobl9sZWZ0X2Zyb20gPj0gNCkgew0KPj4+PiArCQkvKiBQcmVmZXRjaCBuZXh0LW5leHQgbWJ1 ZnMgKi8NCj4+Pj4gKwkJaWYgKGxpa2VseShuX2xlZnRfZnJvbSA+PSAxMSkpIHsNCj4+Pj4gKwkJ CXJ0ZV9wcmVmZXRjaDAocGt0c1s4XSk7DQo+Pj4+ICsJCQlydGVfcHJlZmV0Y2gwKHBrdHNbOV0p Ow0KPj4+PiArCQkJcnRlX3ByZWZldGNoMChwa3RzWzEwXSk7DQo+Pj4+ICsJCQlydGVfcHJlZmV0 Y2gwKHBrdHNbMTFdKTsNCj4+Pj4gKwkJfQ0KPj4+PiArDQo+Pj4+ICsJCS8qIFByZWZldGNoIG5l eHQgbWJ1ZiBkYXRhICovDQo+Pj4+ICsJCWlmIChsaWtlbHkobl9sZWZ0X2Zyb20gPj0gNykpIHsN Cj4+Pj4gKwkJCXJ0ZV9wcmVmZXRjaDAocnRlX3BrdG1idWZfbXRvZChwa3RzWzRdLA0KPj4+PiAr CQkJCQkJICAgICAgIHN0cnVjdCBydGVfZXRoZXJfaGRyDQo+Pj4gKikgKw0KPj4+PiArCQkJCSAg ICAgIDEpOw0KPj4+PiArCQkJcnRlX3ByZWZldGNoMChydGVfcGt0bWJ1Zl9tdG9kKHBrdHNbNV0s DQo+Pj4+ICsJCQkJCQkgICAgICAgc3RydWN0IHJ0ZV9ldGhlcl9oZHINCj4+PiAqKSArDQo+Pj4+ ICsJCQkJICAgICAgMSk7DQo+Pj4+ICsJCQlydGVfcHJlZmV0Y2gwKHJ0ZV9wa3RtYnVmX210b2Qo cGt0c1s2XSwNCj4+Pj4gKwkJCQkJCSAgICAgICBzdHJ1Y3QgcnRlX2V0aGVyX2hkcg0KPj4+ICop ICsNCj4+Pj4gKwkJCQkgICAgICAxKTsNCj4+Pj4gKwkJCXJ0ZV9wcmVmZXRjaDAocnRlX3BrdG1i dWZfbXRvZChwa3RzWzddLA0KPj4+PiArCQkJCQkJICAgICAgIHN0cnVjdCBydGVfZXRoZXJfaGRy DQo+Pj4gKikgKw0KPj4+PiArCQkJCSAgICAgIDEpOw0KPj4+PiArCQl9DQo+Pj4+ICsNCj4+Pj4g KwkJbWJ1ZjAgPSBwa3RzWzBdOw0KPj4+PiArCQltYnVmMSA9IHBrdHNbMV07DQo+Pj4+ICsJCW1i dWYyID0gcGt0c1syXTsNCj4+Pj4gKwkJbWJ1ZjMgPSBwa3RzWzNdOw0KPj4+PiArDQo+Pj4+ICsJ CXBrdHMgKz0gNDsNCj4+Pj4gKwkJbl9sZWZ0X2Zyb20gLT0gNDsNCj4+Pj4gKw0KPj4+PiArCQkv KiBFeHRyYWN0IERJUCBvZiBtYnVmMCAqLw0KPj4+PiArCQlldGhfaGRyID0gcnRlX3BrdG1idWZf bXRvZChtYnVmMCwgc3RydWN0DQo+Pj4gcnRlX2V0aGVyX2hkciAqKTsNCj4+Pj4gKwkJaXB2NF9o ZHIgPSAoc3RydWN0IHJ0ZV9pcHY0X2hkciAqKShldGhfaGRyICsgMSk7DQo+Pj4+ICsJCWlwMCA9 IGlwdjRfaGRyLT5kc3RfYWRkcjsNCj4+Pj4gKwkJLyogRXh0cmFjdCBja3N1bSwgdHRsIGFzIGlw djQgaGRyIGlzIGluIGNhY2hlICovDQo+Pj4+ICsJCXJ0ZV9ub2RlX21idWZfcHJpdjEobWJ1ZjAp LT5ja3N1bSA9IGlwdjRfaGRyLQ0KPj4+PiBoZHJfY2hlY2tzdW07DQo+Pj4+ICsJCXJ0ZV9ub2Rl X21idWZfcHJpdjEobWJ1ZjApLT50dGwgPSBpcHY0X2hkci0NCj4+Pj4gdGltZV90b19saXZlOw0K Pj4+PiArDQo+Pj4+ICsJCS8qIEV4dHJhY3QgRElQIG9mIG1idWYxICovDQo+Pj4+ICsJCWV0aF9o ZHIgPSBydGVfcGt0bWJ1Zl9tdG9kKG1idWYxLCBzdHJ1Y3QNCj4+PiBydGVfZXRoZXJfaGRyICop Ow0KPj4+PiArCQlpcHY0X2hkciA9IChzdHJ1Y3QgcnRlX2lwdjRfaGRyICopKGV0aF9oZHIgKyAx KTsNCj4+Pj4gKwkJaXAxID0gaXB2NF9oZHItPmRzdF9hZGRyOw0KPj4+PiArCQkvKiBFeHRyYWN0 IGNrc3VtLCB0dGwgYXMgaXB2NCBoZHIgaXMgaW4gY2FjaGUgKi8NCj4+Pj4gKwkJcnRlX25vZGVf bWJ1Zl9wcml2MShtYnVmMSktPmNrc3VtID0gaXB2NF9oZHItDQo+Pj4+IGhkcl9jaGVja3N1bTsN Cj4+Pj4gKwkJcnRlX25vZGVfbWJ1Zl9wcml2MShtYnVmMSktPnR0bCA9IGlwdjRfaGRyLQ0KPj4+ PiB0aW1lX3RvX2xpdmU7DQo+Pj4+ICsNCj4+Pj4gKwkJLyogRXh0cmFjdCBESVAgb2YgbWJ1ZjIg Ki8NCj4+Pj4gKwkJZXRoX2hkciA9IHJ0ZV9wa3RtYnVmX210b2QobWJ1ZjIsIHN0cnVjdA0KPj4+ IHJ0ZV9ldGhlcl9oZHIgKik7DQo+Pj4+ICsJCWlwdjRfaGRyID0gKHN0cnVjdCBydGVfaXB2NF9o ZHIgKikoZXRoX2hkciArIDEpOw0KPj4+PiArCQlpcDIgPSBpcHY0X2hkci0+ZHN0X2FkZHI7DQo+ Pj4+ICsJCS8qIEV4dHJhY3QgY2tzdW0sIHR0bCBhcyBpcHY0IGhkciBpcyBpbiBjYWNoZSAqLw0K Pj4+PiArCQlydGVfbm9kZV9tYnVmX3ByaXYxKG1idWYyKS0+Y2tzdW0gPSBpcHY0X2hkci0NCj4+ Pj4gaGRyX2NoZWNrc3VtOw0KPj4+PiArCQlydGVfbm9kZV9tYnVmX3ByaXYxKG1idWYyKS0+dHRs ID0gaXB2NF9oZHItDQo+Pj4+IHRpbWVfdG9fbGl2ZTsNCj4+Pj4gKw0KPj4+PiArCQkvKiBFeHRy YWN0IERJUCBvZiBtYnVmMyAqLw0KPj4+PiArCQlldGhfaGRyID0gcnRlX3BrdG1idWZfbXRvZCht YnVmMywgc3RydWN0DQo+Pj4gcnRlX2V0aGVyX2hkciAqKTsNCj4+Pj4gKwkJaXB2NF9oZHIgPSAo c3RydWN0IHJ0ZV9pcHY0X2hkciAqKShldGhfaGRyICsgMSk7DQo+Pj4+ICsJCWlwMyA9IGlwdjRf aGRyLT5kc3RfYWRkcjsNCj4+Pj4gKw0KPj4+PiArCQkvKiBQcmVwYXJlIGZvciBsb29rdXAgeDQg Ki8NCj4+Pj4gKwkJZGlwID0gX21tX3NldF9lcGkzMihpcDMsIGlwMiwgaXAxLCBpcDApOw0KPj4+ PiArDQo+Pj4+ICsJCS8qIEJ5dGUgc3dhcCA0IElQVjQgYWRkcmVzc2VzLiAqLw0KPj4+PiArCQlj b25zdCBfX20xMjhpIGJzd2FwX21hc2sgPSBfbW1fc2V0X2VwaTgoDQo+Pj4+ICsJCQkxMiwgMTMs IDE0LCAxNSwgOCwgOSwgMTAsIDExLCA0LCA1LCA2LCA3LCAwLCAxLCAyLCAzKTsNCj4+Pj4gKwkJ ZGlwID0gX21tX3NodWZmbGVfZXBpOChkaXAsIGJzd2FwX21hc2spOw0KPj4+PiArDQo+Pj4+ICsJ CS8qIEV4dHJhY3QgY2tzdW0sIHR0bCBhcyBpcHY0IGhkciBpcyBpbiBjYWNoZSAqLw0KPj4+PiAr CQlydGVfbm9kZV9tYnVmX3ByaXYxKG1idWYzKS0+Y2tzdW0gPSBpcHY0X2hkci0NCj4+Pj4gaGRy X2NoZWNrc3VtOw0KPj4+PiArCQlydGVfbm9kZV9tYnVmX3ByaXYxKG1idWYzKS0+dHRsID0gaXB2 NF9oZHItDQo+Pj4+IHRpbWVfdG9fbGl2ZTsNCj4+Pj4gKw0KPj4+PiArCQkvKiBQZXJmb3JtIExQ TSBsb29rdXAgdG8gZ2V0IE5IIGFuZCBuZXh0IG5vZGUgKi8NCj4+Pj4gKwkJcnRlX2xwbV9sb29r dXB4NChscG0sIGRpcCwgZHN0LnUzMiwgZHJvcF9uaCk7DQo+Pj4+ICsNCj4+Pj4gKwkJLyogRXh0 cmFjdCBuZXh0IG5vZGUgaWQgYW5kIE5IICovDQo+Pj4+ICsJCXJ0ZV9ub2RlX21idWZfcHJpdjEo bWJ1ZjApLT5uaCA9IGRzdC51MzJbMF0gJg0KPj4+IDB4RkZGRjsNCj4+Pj4gKwkJbmV4dDAgPSAo ZHN0LnUzMlswXSA+PiAxNik7DQo+Pj4+ICsNCj4+Pj4gKwkJcnRlX25vZGVfbWJ1Zl9wcml2MSht YnVmMSktPm5oID0gZHN0LnUzMlsxXSAmDQo+Pj4gMHhGRkZGOw0KPj4+PiArCQluZXh0MSA9IChk c3QudTMyWzFdID4+IDE2KTsNCj4+Pj4gKw0KPj4+PiArCQlydGVfbm9kZV9tYnVmX3ByaXYxKG1i dWYyKS0+bmggPSBkc3QudTMyWzJdICYNCj4+PiAweEZGRkY7DQo+Pj4+ICsJCW5leHQyID0gKGRz dC51MzJbMl0gPj4gMTYpOw0KPj4+PiArDQo+Pj4+ICsJCXJ0ZV9ub2RlX21idWZfcHJpdjEobWJ1 ZjMpLT5uaCA9IGRzdC51MzJbM10gJg0KPj4+IDB4RkZGRjsNCj4+Pj4gKwkJbmV4dDMgPSAoZHN0 LnUzMlszXSA+PiAxNik7DQo+Pj4+ICsNCj4+Pj4gKwkJLyogRW5xdWV1ZSBmb3VyIHRvIG5leHQg bm9kZSAqLw0KPj4+PiArCQlydGVfZWRnZV90IGZpeF9zcGVjID0NCj4+Pj4gKwkJCShuZXh0X2lu ZGV4IF4gbmV4dDApIHwgKG5leHRfaW5kZXggXiBuZXh0MSkgfA0KPj4+PiArCQkJKG5leHRfaW5k ZXggXiBuZXh0MikgfCAobmV4dF9pbmRleCBeIG5leHQzKTsNCj4+Pj4gKw0KPj4+PiArCQlpZiAo dW5saWtlbHkoZml4X3NwZWMpKSB7DQo+Pj4+ICsJCQkvKiBDb3B5IHRoaW5ncyBzdWNjZXNzZnVs bHkgc3BlY3VsYXRlZCB0aWxsIG5vdw0KPj4+ICovDQo+Pj4+ICsJCQlydGVfbWVtY3B5KHRvX25l eHQsIGZyb20sIGxhc3Rfc3BlYyAqDQo+Pj4gc2l6ZW9mKGZyb21bMF0pKTsNCj4+Pj4gKwkJCWZy b20gKz0gbGFzdF9zcGVjOw0KPj4+PiArCQkJdG9fbmV4dCArPSBsYXN0X3NwZWM7DQo+Pj4+ICsJ CQloZWxkICs9IGxhc3Rfc3BlYzsNCj4+Pj4gKwkJCWxhc3Rfc3BlYyA9IDA7DQo+Pj4+ICsNCj4+ Pj4gKwkJCS8qIE5leHQwICovDQo+Pj4+ICsJCQlpZiAobmV4dF9pbmRleCA9PSBuZXh0MCkgew0K Pj4+PiArCQkJCXRvX25leHRbMF0gPSBmcm9tWzBdOw0KPj4+PiArCQkJCXRvX25leHQrKzsNCj4+ Pj4gKwkJCQloZWxkKys7DQo+Pj4+ICsJCQl9IGVsc2Ugew0KPj4+PiArCQkJCXJ0ZV9ub2RlX2Vu cXVldWVfeDEoZ3JhcGgsIG5vZGUsDQo+Pj4gbmV4dDAsDQo+Pj4+ICsJCQkJCQkgICAgZnJvbVsw XSk7DQo+Pj4+ICsJCQl9DQo+Pj4+ICsNCj4+Pj4gKwkJCS8qIE5leHQxICovDQo+Pj4+ICsJCQlp ZiAobmV4dF9pbmRleCA9PSBuZXh0MSkgew0KPj4+PiArCQkJCXRvX25leHRbMF0gPSBmcm9tWzFd Ow0KPj4+PiArCQkJCXRvX25leHQrKzsNCj4+Pj4gKwkJCQloZWxkKys7DQo+Pj4+ICsJCQl9IGVs c2Ugew0KPj4+PiArCQkJCXJ0ZV9ub2RlX2VucXVldWVfeDEoZ3JhcGgsIG5vZGUsDQo+Pj4gbmV4 dDEsDQo+Pj4+ICsJCQkJCQkgICAgZnJvbVsxXSk7DQo+Pj4+ICsJCQl9DQo+Pj4+ICsNCj4+Pj4g KwkJCS8qIE5leHQyICovDQo+Pj4+ICsJCQlpZiAobmV4dF9pbmRleCA9PSBuZXh0Mikgew0KPj4+ PiArCQkJCXRvX25leHRbMF0gPSBmcm9tWzJdOw0KPj4+PiArCQkJCXRvX25leHQrKzsNCj4+Pj4g KwkJCQloZWxkKys7DQo+Pj4+ICsJCQl9IGVsc2Ugew0KPj4+PiArCQkJCXJ0ZV9ub2RlX2VucXVl dWVfeDEoZ3JhcGgsIG5vZGUsDQo+Pj4gbmV4dDIsDQo+Pj4+ICsJCQkJCQkgICAgZnJvbVsyXSk7 DQo+Pj4+ICsJCQl9DQo+Pj4+ICsNCj4+Pj4gKwkJCS8qIE5leHQzICovDQo+Pj4+ICsJCQlpZiAo bmV4dF9pbmRleCA9PSBuZXh0Mykgew0KPj4+PiArCQkJCXRvX25leHRbMF0gPSBmcm9tWzNdOw0K Pj4+PiArCQkJCXRvX25leHQrKzsNCj4+Pj4gKwkJCQloZWxkKys7DQo+Pj4+ICsJCQl9IGVsc2Ug ew0KPj4+PiArCQkJCXJ0ZV9ub2RlX2VucXVldWVfeDEoZ3JhcGgsIG5vZGUsDQo+Pj4gbmV4dDMs DQo+Pj4+ICsJCQkJCQkgICAgZnJvbVszXSk7DQo+Pj4+ICsJCQl9DQo+Pj4+ICsNCj4+Pj4gKwkJ CWZyb20gKz0gNDsNCj4+Pj4gKw0KPj4+PiArCQl9IGVsc2Ugew0KPj4+PiArCQkJbGFzdF9zcGVj ICs9IDQ7DQo+Pj4+ICsJCX0NCj4+Pj4gKwl9DQo+Pj4+ICsNCj4+Pj4gKwl3aGlsZSAobl9sZWZ0 X2Zyb20gPiAwKSB7DQo+Pj4+ICsJCXVpbnQzMl90IG5leHRfaG9wOw0KPj4+PiArDQo+Pj4+ICsJ CW1idWYwID0gcGt0c1swXTsNCj4+Pj4gKw0KPj4+PiArCQlwa3RzICs9IDE7DQo+Pj4+ICsJCW5f bGVmdF9mcm9tIC09IDE7DQo+Pj4+ICsNCj4+Pj4gKwkJLyogRXh0cmFjdCBESVAgb2YgbWJ1ZjAg Ki8NCj4+Pj4gKwkJZXRoX2hkciA9IHJ0ZV9wa3RtYnVmX210b2QobWJ1ZjAsIHN0cnVjdA0KPj4+ IHJ0ZV9ldGhlcl9oZHIgKik7DQo+Pj4+ICsJCWlwdjRfaGRyID0gKHN0cnVjdCBydGVfaXB2NF9o ZHIgKikoZXRoX2hkciArIDEpOw0KPj4+PiArCQkvKiBFeHRyYWN0IGNrc3VtLCB0dGwgYXMgaXB2 NCBoZHIgaXMgaW4gY2FjaGUgKi8NCj4+Pj4gKwkJcnRlX25vZGVfbWJ1Zl9wcml2MShtYnVmMCkt PmNrc3VtID0gaXB2NF9oZHItDQo+Pj4+IGhkcl9jaGVja3N1bTsNCj4+Pj4gKwkJcnRlX25vZGVf bWJ1Zl9wcml2MShtYnVmMCktPnR0bCA9IGlwdjRfaGRyLQ0KPj4+PiB0aW1lX3RvX2xpdmU7DQo+ Pj4+ICsNCj4+Pj4gKwkJcmMgPSBydGVfbHBtX2xvb2t1cChscG0sIHJ0ZV9iZV90b19jcHVfMzIo aXB2NF9oZHItDQo+Pj4+IGRzdF9hZGRyKSwNCj4+Pj4gKwkJCQkgICAgJm5leHRfaG9wKTsNCj4+ Pj4gKwkJbmV4dF9ob3AgPSAocmMgPT0gMCkgPyBuZXh0X2hvcCA6IGRyb3Bfbmg7DQo+Pj4+ICsN Cj4+Pj4gKwkJcnRlX25vZGVfbWJ1Zl9wcml2MShtYnVmMCktPm5oID0gbmV4dF9ob3AgJg0KPj4+ IDB4RkZGRjsNCj4+Pj4gKwkJbmV4dDAgPSAobmV4dF9ob3AgPj4gMTYpOw0KPj4+PiArDQo+Pj4+ ICsJCWlmICh1bmxpa2VseShuZXh0X2luZGV4IF4gbmV4dDApKSB7DQo+Pj4+ICsJCQkvKiBDb3B5 IHRoaW5ncyBzdWNjZXNzZnVsbHkgc3BlY3VsYXRlZCB0aWxsIG5vdw0KPj4+ICovDQo+Pj4+ICsJ CQlydGVfbWVtY3B5KHRvX25leHQsIGZyb20sIGxhc3Rfc3BlYyAqDQo+Pj4gc2l6ZW9mKGZyb21b MF0pKTsNCj4+Pj4gKwkJCWZyb20gKz0gbGFzdF9zcGVjOw0KPj4+PiArCQkJdG9fbmV4dCArPSBs YXN0X3NwZWM7DQo+Pj4+ICsJCQloZWxkICs9IGxhc3Rfc3BlYzsNCj4+Pj4gKwkJCWxhc3Rfc3Bl YyA9IDA7DQo+Pj4+ICsNCj4+Pj4gKwkJCXJ0ZV9ub2RlX2VucXVldWVfeDEoZ3JhcGgsIG5vZGUs IG5leHQwLA0KPj4+IGZyb21bMF0pOw0KPj4+PiArCQkJZnJvbSArPSAxOw0KPj4+PiArCQl9IGVs c2Ugew0KPj4+PiArCQkJbGFzdF9zcGVjICs9IDE7DQo+Pj4+ICsJCX0NCj4+Pj4gKwl9DQo+Pj4+ ICsNCj4+Pj4gKwkvKiAhISEgSG9tZSBydW4gISEhICovDQo+Pj4+ICsJaWYgKGxpa2VseShsYXN0 X3NwZWMgPT0gbmJfb2JqcykpIHsNCj4+Pj4gKwkJcnRlX25vZGVfbmV4dF9zdHJlYW1fbW92ZShn cmFwaCwgbm9kZSwNCj4+PiBuZXh0X2luZGV4KTsNCj4+Pj4gKwkJcmV0dXJuIG5iX29ianM7DQo+ Pj4+ICsJfQ0KPj4+PiArDQo+Pj4+ICsJaGVsZCArPSBsYXN0X3NwZWM7DQo+Pj4+ICsJLyogQ29w eSB0aGluZ3Mgc3VjY2Vzc2Z1bGx5IHNwZWN1bGF0ZWQgdGlsbCBub3cgKi8NCj4+Pj4gKwlydGVf bWVtY3B5KHRvX25leHQsIGZyb20sIGxhc3Rfc3BlYyAqIHNpemVvZihmcm9tWzBdKSk7DQo+Pj4+ ICsJcnRlX25vZGVfbmV4dF9zdHJlYW1fcHV0KGdyYXBoLCBub2RlLCBuZXh0X2luZGV4LCBoZWxk KTsNCj4+Pj4gKw0KPj4+PiArCXJldHVybiBuYl9vYmpzOw0KPj4+PiArfQ0KPj4+PiArDQo+Pj4+ ICAjZWxzZQ0KPj4+Pg0KPj4+PiAgc3RhdGljIHVpbnQxNl90DQo+Pj4+DQo=