From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
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 <dev@dpdk.org>; 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 <pbhagavatula@marvell.com>
To: Ray Kinsella <mdr@ashroe.eu>, Jerin Jacob Kollanukkaran
 <jerinj@marvell.com>, Nithin Kumar Dabilpuram <ndabilpuram@marvell.com>
CC: "dev@dpdk.org" <dev@dpdk.org>, "thomas@monjalon.net" <thomas@monjalon.net>,
 "david.marchand@redhat.com" <david.marchand@redhat.com>,
 "mattias.ronnblom@ericsson.com" <mattias.ronnblom@ericsson.com>,
 Kiran Kumar Kokkilagadda <kirankumark@marvell.com>
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: <CY4PR1801MB1863BCCB6987C1A826D98263DEF40@CY4PR1801MB1863.namprd18.prod.outlook.com>
References: <20200318213551.3489504-1-jerinj@marvell.com>
 <20200318213551.3489504-21-jerinj@marvell.com>
 <02c4c25a-83ba-dac5-20e6-7b140cbcb4f1@ashroe.eu>
 <CY4PR1801MB1863F49710B8F5A60D350B0EDEF40@CY4PR1801MB1863.namprd18.prod.outlook.com>
 <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: <CY4PR1801MB1816FCE6D2862C5D11AADC22DEF40@CY4PR1801MB1816.namprd18.prod.outlook.com>
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 <dev.dpdk.org>
List-Unsubscribe: <https://mails.dpdk.org/options/dev>,
 <mailto:dev-request@dpdk.org?subject=unsubscribe>
List-Archive: <http://mails.dpdk.org/archives/dev/>
List-Post: <mailto:dev@dpdk.org>
List-Help: <mailto:dev-request@dpdk.org?subject=help>
List-Subscribe: <https://mails.dpdk.org/listinfo/dev>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org
Sender: "dev" <dev-bounces@dpdk.org>

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=