From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 41521A0C4D; Wed, 13 Oct 2021 03:25:20 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 089A140150; Wed, 13 Oct 2021 03:25:20 +0200 (CEST) Received: from NAM02-BN1-obe.outbound.protection.outlook.com (mail-bn1nam07on2061.outbound.protection.outlook.com [40.107.212.61]) by mails.dpdk.org (Postfix) with ESMTP id 7818940142 for ; Wed, 13 Oct 2021 03:25:18 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ly9StSx1KFfd19yn4OFAUk2+mD6Ibf3D0N8QDesVOO5WOiC01RcMqxcNW4h+3Ot8q2qgma57/dMzZ4UA/DZ5b/VIjNGVk2zuSWAbBvdk7dPyVMVJcVr/5M/VWIJ6xybPcgxlnK8V9yn0DptpxYA5/VfEcN45oAVdW9rgI2NjID2VgAZ2hXN6EuQQYBYhGgBi+qLhpqZml26aY3RHAvAKTvXweLz/M4jKNtNOGHmvCrKsJR8KKjtodO2diJ8ISjmmf01zkcXz8NbVJ6JGNoezmZi9yHwhFoG4pnlGZgV1FgkOb1skZhcFZbqorI1HEqBIOlY1aVgi+OKO4kGeFtPOqg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=dDNsMrQ2OV8tewxlmDlMjwtt2BurLyz4eACWCMNG43M=; b=WIDcZXXq9ocOCq+R2rsCou8QBkkMoHNImbmuC3ANRbRAp56dqZ+9xRA5XY3RkzPblXKbZKfMJ62HYk5pupTuHynu9MRIdRke1u56RrEQpB/U9RlEpb0ZumedwRrdqn6ykzXdOLiMr5vbnxqq3BhbNixohfWuCpGcfFqOnnypWA3nZHB524iUSdEkuiXlUZ1zGNtUjxucsn1Zd1U1n5Ppu8M/289h8wD59wrwd3mbTTzkCdXjQECq345hau/bw1pSwzwciWOtjyM1yPXqHGVyvGtgR8wILr4Ii3ZBWYrEZnhA//jmVhMlTuTm41I3aoDYLkQNYZTsxbrUipQpLZVHFQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dDNsMrQ2OV8tewxlmDlMjwtt2BurLyz4eACWCMNG43M=; b=rUCtAsLOjPap3l1N6MoSIaSibI3UhVwfBgwhlV/jayGGBngWY9yyERLwB/Dvx3wt7dx/vT4RVNIk59aj1LahLtdmIVk+W5fALiYc0Phr9yfd+3LsbCcm5pygna9Wp5d8rFUDp3QgEUL+Htb6ei7bTwFSyC+ECro7lzl4vTkC4U9cOsktNG3KKud6vbrtnitZGPnTzLGo0Pdu21G0KKDctnhAwK6qX3Ud+2vUH1SKWMFJHDsAo/f7Zhiqag2HYK+TXuYFG3/d/TRzAD/4mwlWhT3PL3gSyOE2+bzNsrDzohxdZZOfgg24blJCILP2PBUiD8DQbmmBPfX19XVCtcYLHQ== Received: from DM5PR12MB2405.namprd12.prod.outlook.com (2603:10b6:4:b2::20) by DM5PR12MB2405.namprd12.prod.outlook.com (2603:10b6:4:b2::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4587.18; Wed, 13 Oct 2021 01:25:16 +0000 Received: from DM5PR12MB2405.namprd12.prod.outlook.com ([fe80::d59c:b5f3:3948:e483]) by DM5PR12MB2405.namprd12.prod.outlook.com ([fe80::d59c:b5f3:3948:e483%7]) with mapi id 15.20.4587.026; Wed, 13 Oct 2021 01:25:16 +0000 From: Alexander Kozyrev To: Ivan Malov , "dev@dpdk.org" CC: NBU-Contact-Thomas Monjalon , Ori Kam , "andrew.rybchenko@oktetlabs.ru" , "ferruh.yigit@intel.com" , "mohammad.abdul.awal@intel.com" , "qi.z.zhang@intel.com" , "jerinj@marvell.com" , "ajit.khaparde@broadcom.com" Thread-Topic: [PATCH 2/3] ethdev: add flow item/action templates Thread-Index: AQHXutcQV+Tq+/GTak2/14dCX6BLvqvQKWDg Date: Wed, 13 Oct 2021 01:25:16 +0000 Message-ID: References: <20211006044835.3936226-1-akozyrev@nvidia.com> <20211006044835.3936226-3-akozyrev@nvidia.com> <5aecc54e-3a11-bbc6-af93-5117f938ee18@oktetlabs.ru> In-Reply-To: <5aecc54e-3a11-bbc6-af93-5117f938ee18@oktetlabs.ru> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: oktetlabs.ru; dkim=none (message not signed) header.d=none;oktetlabs.ru; dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a1ad5687-e55b-4a0e-3be1-08d98de84ff0 x-ms-traffictypediagnostic: DM5PR12MB2405: x-ld-processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6790; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ukc/B5jt4Hc27o3ztDfK0HrqVSM/n5ENiqU9WJCBsEVSsQwUq6K6nZ2YA6nAYCFBYewtsABWRr0k/ovLuCm5p5MYbGb8ORf7mF1s/pseIcuCveNcQ5+KIHVEeh24hYZXYjjMaYdmJ7rSMYeLSH/A20+OurrOQN1XpskNtjFhERlLU2K2Vu0LpvfflyP1xxfeEwZtA9NHlOgQDEF3wZpnI/2eiJ2alxxenMw53+jEF3m/r62yNjdpPicrz66GHyGmZk4+oxsGyVugOM8mRkHoPqqQNsHNJuD7NYD46xqmVzGhuLIDnUjdTIWy0HIwWXt44rxMAD92dpGVzval5VClRTT9ufVgFXDrD5cwCse8WJSlLSTAuyU4+nnjzFHOlLBqvuYwMoHrKri93LqQa8vrJeSKRVTbr/4YRyi96AftvpupYsDl/GmgVh5HZ2v0AQieiWQE+WN+fxidqqwwwx6YFMzFeVVzDW4q80r9HSNO3Xe9WRwF7mfa6ZWWfLpGqSw0DvMfF2WehkUVpGPK9pJ+JZz7EZHOeF0ffUb6gXU+oRURgCvvIwVY4q5w/uqDN4VIHP7GElLlp5cvrre6sBr8o9AM0PM9Goh5Wa6m+bAQup2/NPl5RZNIWLDG+1RD56kJmRdaX8GsF/fh1oV0t33LEXk3lShGmux07V0UACTDMjxKj18rlWiceaPQwAt+7DhcoXosLI9DsWTX2cZk72mUDw== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM5PR12MB2405.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(66446008)(66946007)(71200400001)(9686003)(508600001)(30864003)(33656002)(66556008)(2906002)(64756008)(38070700005)(38100700002)(76116006)(66476007)(52536014)(7696005)(316002)(55016002)(122000001)(186003)(54906003)(8936002)(26005)(110136005)(5660300002)(86362001)(4326008)(8676002)(83380400001)(53546011)(6506007); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?anhCMUxEMjNTZ1FUUnFmUUpUOW92TysvaEJ4eldQc0k3QUFZTy9uSldlV1k5?= =?utf-8?B?NTBOQzVJWlQwNTFtWTlscE9vK0lMeHZnd0taY25rQWZJQnVrekZ1bHVYb3pq?= =?utf-8?B?aTBsQm5QOXZBWFJ0aUlEWXdwYUc2YzlGRFk4T0FaT3IrTWRrR0tpZlVXRVdr?= =?utf-8?B?czRsTjdhdlZ2Vkh2SHFKeFNYQWhoTVZaRXFNaTF0RS9SL1UxZnl5UzBaMDhn?= =?utf-8?B?KzExTHlLZ2E3bU9kVDhNYlJRMVM4d1B1STVSTFlQMHpBeURJR1M0eG42U0Np?= =?utf-8?B?LzFSeXhDZkpySXFSdTJJdjZKdjNVdGlNUXBSVGxxL3RGTkRXbzJOQjROalJG?= =?utf-8?B?azVFTmtBQy9hVVBpQWJ3TmJEUldLRHBFa0ZRNituU0VMNzFKL3Q1VHhCQUJQ?= =?utf-8?B?Rk5pOXYxMVRaWmJBY0lPa0ozZnhSaGhFbE1NV3c0OUx5L0p0clZ2cTVkUUpW?= =?utf-8?B?aDE0eHVjVTF2U2lPejJPdmNqNFRndjM4bFFzVFBRTnVUUFI5UVdkbDlYMnh1?= =?utf-8?B?clBSVU50RURLRFNQQ0lWWkN5YmtDVncxY0d5SDNndHFha3NnajdhL1Aybjd0?= =?utf-8?B?akF4U0tHaGNQR0VIanlCS0VuaDMvRk42WE4rVklvUW5XdUIxdVNyMDdha0w4?= =?utf-8?B?ZElyYnBsZ09kak52REdSZU0waE5LVkJTMlM4S1VyNkNoM1lpY1B1cWJyNVl6?= =?utf-8?B?bFNJMklGMVpVbEkyRGZsSXpaRjFGOTU3VUk3ZzBQaStPTmsyMGpmZUx5bjRV?= =?utf-8?B?M0c2aURMUGNIclJ2Z0tpbERlcEZDdE81QllrY2xQTDJta1VVbFRzR0ZoeG5Q?= =?utf-8?B?MW40L3lCUXUzMEFQS2Z6b1Fzem1IUXhtMCtEWG50bkV0UUVSMmtRaCszbkdP?= =?utf-8?B?WmtnbnVwblBlTUhadEhEbExLTHZ3UFpsSlEveDhwbnl2MS9Uek5jRFVTcXJ0?= =?utf-8?B?aG5LNlVXZ05HOFBSRTlFZTI1UzFFVENlbTNXOW15NStEMk5LcnQ5VzJZekxx?= =?utf-8?B?STA5cmppbDBtWDQwdU1wck81a2xpaTdqRkp5NnU0anJVN0c0R3BuMmoxbjNz?= =?utf-8?B?R2hBM2piTXdDUE8zS1VmRGphLzBuSVhOYXExRDg4Skl2SC93TGMxMEpsOE5Q?= =?utf-8?B?QU9ObW9IMm9rR2xTZkNlZ3B6K3lVQnFNYjRPY01pU0JLenkrSklabThZRHVm?= =?utf-8?B?Vm1qYWFqYlNKV1prOTJtWHFXS3UzRUdLK0VDaEFpdWY0VHJPZXMyOEF0OU0z?= =?utf-8?B?eW8xejNzWVUyZmNYSkNZZTdSZGxQTGZUWUJNMUpCZzlHWG82eGF6M25ZejJw?= =?utf-8?B?cGtHeUo0eFlPZTcvOWQzUFRtSnBCa0tPa1lIZmFJYU0yRzdjOVZoSGxOS2Mv?= =?utf-8?B?UEF2clFZd1RqSG8yUnBjVk4vQldVTi8rTEV3dGtISzdjVGcyRGtjSWViZWZw?= =?utf-8?B?TlpoQWlIMTd3N1NLMjRtQVdYanQ4SnJJaWoyNGZ5eXN2YUxYQjFUb2ZRSS9l?= =?utf-8?B?NjV6NUw2aDFPZUxhMTI3OUFSUVowQ053bDljWFgyd0NaZ0tTNlZZeTZNT0Yv?= =?utf-8?B?K3B3K1QwS1VGcmR6S3V2Sks2UFBhYytLZmc1cUM5VjMrbkRFaklnelFhcWhx?= =?utf-8?B?STZ6QWE0WmlocEEzbU5FUTBiNUp2NjVZSVdzRlVNdGVWeDdXWDI3WmFNQmtz?= =?utf-8?B?WlBpeDhvNmUyY0NxRzliUWVFVHZjRUo4YUdxZ04zeDJqNUVUNzZuZ0RxME9a?= =?utf-8?Q?gSPrhd0o+0g94Zkt1tNfvWAqjRa1Plh77DLxJRg?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM5PR12MB2405.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a1ad5687-e55b-4a0e-3be1-08d98de84ff0 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Oct 2021 01:25:16.1479 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: QwdDsrrU1W9MHDitCvbAwYieCRHqsapBO/ZiZh6hTBjdj2oXEeC/vFqnAyMJggB/Ja+dflxAPf8l1EGreg8jyw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB2405 Subject: Re: [dpdk-dev] [PATCH 2/3] ethdev: add flow item/action templates X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" PiBGcm9tOiBJdmFuIE1hbG92IDxJdmFuLk1hbG92QG9rdGV0bGFicy5ydT4gT24gV2VkbmVzZGF5 LCBPY3RvYmVyIDYsIDIwMjEgMTM6MjUNCj4gT24gMDYvMTAvMjAyMSAwNzo0OCwgQWxleGFuZGVy IEtvenlyZXYgd3JvdGU6DQo+ID4gVHJlYXRpbmcgZXZlcnkgc2luZ2xlIGZsb3cgcnVsZSBhcyBh IGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlDQo+ID4gZW50aXR5IG5lZ2F0aXZl bHkgaW1wYWN0cyB0aGUgZmxvdyBydWxlcyBpbnNlcnRpb24gcmF0ZS4gT2Z0ZW50aW1lcyBpbiBh bg0KPiA+IGFwcGxpY2F0aW9uLCBtYW55IGZsb3cgcnVsZXMgc2hhcmUgYSBjb21tb24gc3RydWN0 dXJlICh0aGUgc2FtZSBpdGVtDQo+IG1hc2sNCj4gPiBhbmQvb3IgYWN0aW9uIGxpc3QpIHNvIHRo ZXkgY2FuIGJlIGdyb3VwZWQgYW5kIGNsYXNzaWZpZWQgdG9nZXRoZXIuDQo+ID4gVGhpcyBrbm93 bGVkZ2UgbWF5IGJlIHVzZWQgYXMgYSBzb3VyY2Ugb2Ygb3B0aW1pemF0aW9uIGJ5IGEgUE1EL0hX Lg0KPiA+DQo+ID4gVGhlIGl0ZW0gdGVtcGxhdGUgZGVmaW5lcyBjb21tb24gbWF0Y2hpbmcgZmll bGRzICh0aGUgaXRlbSBtYXNrKQ0KPiB3aXRob3V0DQo+ID4gdmFsdWVzLiBUaGUgYWN0aW9uIHRl bXBsYXRlIGhvbGRzIGEgbGlzdCBvZiBhY3Rpb24gdHlwZXMgdGhhdCB3aWxsIGJlIHVzZWQNCj4g PiB0b2dldGhlciBpbiB0aGUgc2FtZSBydWxlLiBUaGUgc3BlY2lmaWMgdmFsdWVzIGZvciBpdGVt cyBhbmQgYWN0aW9ucyB3aWxsDQo+ID4gYmUgZ2l2ZW4gb25seSBkdXJpbmcgdGhlIHJ1bGUgY3Jl YXRpb24uDQo+ID4NCj4gPiBBIHRhYmxlIGNvbWJpbmVzIGl0ZW0gYW5kIGFjdGlvbiB0ZW1wbGF0 ZXMgYWxvbmcgd2l0aCBzaGFyZWQgZmxvdyBydWxlDQo+ID4gYXR0cmlidXRlcyAoZ3JvdXAgSUQs IHByaW9yaXR5IGFuZCB0cmFmZmljIGRpcmVjdGlvbikuIFRoaXMgd2F5IGEgUE1EL0hXDQo+ID4g Y2FuIHByZXBhcmUgYWxsIHRoZSByZXNvdXJjZXMgbmVlZGVkIGZvciBlZmZpY2llbnQgZmxvdyBy dWxlcyBjcmVhdGlvbiBpbg0KPiA+IHRoZSBkYXRhcGF0aC4gVG8gYXZvaWQgYW55IGhpY2N1cHMg ZHVlIHRvIG1lbW9yeSByZWFsbG9jYXRpb24sIHRoZQ0KPiBtYXhpbXVtDQo+ID4gbnVtYmVyIG9m IGZsb3cgcnVsZXMgaXMgZGVmaW5lZCBhdCB0YWJsZSBjcmVhdGlvbiB0aW1lLg0KPiA+DQo+ID4g VGhlIGZsb3cgcnVsZSBjcmVhdGlvbiBpcyBkb25lIGJ5IHNlbGVjdGluZyBhIHRhYmxlLCBhbiBp dGVtIHRlbXBsYXRlDQo+ID4gYW5kIGFuIGFjdGlvbiB0ZW1wbGF0ZSAod2hpY2ggYXJlIGJvdW5k IHRvIHRoZSB0YWJsZSksIGFuZCBzZXR0aW5nIHVuaXF1ZQ0KPiA+IHZhbHVlcyBmb3IgdGhlIGl0 ZW1zIGFuZCBhY3Rpb25zLg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogQWxleGFuZGVyIEtvenly ZXYgPGFrb3p5cmV2QG52aWRpYS5jb20+DQo+ID4gU3VnZ2VzdGVkLWJ5OiBPcmkgS2FtIDxvcmlr YUBudmlkaWEuY29tPg0KPiA+IC0tLQ0KPiA+ICAgbGliL2V0aGRldi9ydGVfZmxvdy5oIHwgMjY4 DQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICAgMSBm aWxlIGNoYW5nZWQsIDI2OCBpbnNlcnRpb25zKCspDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvbGli L2V0aGRldi9ydGVfZmxvdy5oIGIvbGliL2V0aGRldi9ydGVfZmxvdy5oDQo+ID4gaW5kZXggYzY5 ZDUwM2I5MC4uYmEzMjA0YjE3ZSAxMDA2NDQNCj4gPiAtLS0gYS9saWIvZXRoZGV2L3J0ZV9mbG93 LmgNCj4gPiArKysgYi9saWIvZXRoZGV2L3J0ZV9mbG93LmgNCj4gPiBAQCAtNDM1OCw2ICs0MzU4 LDI3NCBAQCBpbnQNCj4gPiAgIHJ0ZV9mbG93X2NvbmZpZ3VyZSh1aW50MTZfdCBwb3J0X2lkLA0K PiA+ICAgCQkgICBjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfcG9ydF9hdHRyICpwb3J0X2F0dHIsDQo+ ID4gICAJCSAgIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIE9wYXF1ZSB0eXBlIHJldHVybmVkIGFmdGVyIHN1Y2Nlc3NmdWxsIGNyZWF0aW9u IG9mIGl0ZW0gdGVtcGxhdGUuDQo+IA0KPiBUeXBvOiAic3VjY2Vzc2Z1bGwiIC0tPiAic3VjY2Vz c2Z1bCIuDQpUaGFua3MgZm9yIG5vdGljaW5nLCB3aWxsIGNvcnJlY3QuDQoNCj4gPiArICogVGhp cyBoYW5kbGUgY2FuIGJlIHVzZWQgdG8gbWFuYWdlIHRoZSBjcmVhdGVkIGl0ZW0gdGVtcGxhdGUu DQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV90ZW1wbGF0ZTsNCj4gPiArDQo+ ID4gK19fZXh0ZW5zaW9uX18NCj4gPiArc3RydWN0IHJ0ZV9mbG93X2l0ZW1fdGVtcGxhdGVfYXR0 ciB7DQo+ID4gKwkvKioNCj4gPiArCSAqIFZlcnNpb24gb2YgdGhlIHN0cnVjdCBsYXlvdXQsIHNo b3VsZCBiZSAwLg0KPiA+ICsJICovDQo+ID4gKwl1aW50MzJfdCB2ZXJzaW9uOw0KPiA+ICsJLyog Tm8gYXR0cmlidXRlcyBzbyBmYXIuICovDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICogQHdhcm5pbmcNCj4gPiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdl IHdpdGhvdXQgcHJpb3Igbm90aWNlLg0KPiA+ICsgKg0KPiA+ICsgKiBDcmVhdGUgaXRlbSB0ZW1w bGF0ZS4NCj4gPiArICogVGhlIGl0ZW0gdGVtcGxhdGUgZGVmaW5lcyBjb21tb24gbWF0Y2hpbmcg ZmllbGRzIChpdGVtIG1hc2spDQo+IHdpdGhvdXQgdmFsdWVzLg0KPiA+ICsgKiBGb3IgZXhhbXBs ZSwgbWF0Y2hpbmcgb24gNSB0dXBsZSBUQ1AgZmxvdywgdGhlIHRlbXBsYXRlIHdpbGwgYmUNCj4g PiArICogZXRoKG51bGwpICsgSVB2NChzb3VyY2UgKyBkZXN0KSArIFRDUChzX3BvcnQgKyBkX3Bv cnQpLA0KPiA+ICsgKiB3aGlsZSB2YWx1ZXMgZm9yIGVhY2ggcnVsZSB3aWxsIGJlIHNldCBkdXJp bmcgdGhlIGZsb3cgcnVsZSBjcmVhdGlvbi4NCj4gPiArICogVGhlIG9yZGVyIG9mIGl0ZW1zIGlu IHRoZSB0ZW1wbGF0ZSBtdXN0IGJlIHRoZSBzYW1lIGF0IHJ1bGUgaW5zZXJ0aW9uLg0KPiA+ICsg Kg0KPiA+ICsgKiBAcGFyYW0gcG9ydF9pZA0KPiA+ICsgKiAgIFBvcnQgaWRlbnRpZmllciBvZiBF dGhlcm5ldCBkZXZpY2UuDQo+ID4gKyAqIEBwYXJhbVtpbl0gYXR0cg0KPiA+ICsgKiAgIEl0ZW0g dGVtcGxhdGUgYXR0cmlidXRlcy4NCj4gDQo+IFBsZWFzZSBjb25zaWRlciBhZGRpbmcgbWVhbmlu Z2Z1bCBwcmVmaXhlcyB0byAiYXR0ciIgaGVyZSBhbmQgYmVsb3cuDQo+IFRoaXMgaXMgbmVlZGVk IHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoICJzdHJ1Y3QgcnRlX2Zsb3dfYXR0ciIuDQo+IA0KPiBF eGFtcGxlOiAidGVtcGxhdGVfYXR0ciIuDQpObyBwcm9ibGVtLg0KDQo+ID4gKyAqIEBwYXJhbVtp bl0gaXRlbXMNCj4gPiArICogICBQYXR0ZXJuIHNwZWNpZmljYXRpb24gKGxpc3QgdGVybWluYXRl ZCBieSB0aGUgRU5EIHBhdHRlcm4gaXRlbSkuDQo+ID4gKyAqICAgVGhlIHNwZWMgbWVtYmVyIG9m IGFuIGl0ZW0gaXMgbm90IHVzZWQgdW5sZXNzIHRoZSBlbmQgbWVtYmVyIGlzDQo+IHVzZWQuDQo+ ID4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ID4gKyAqICAgUGVyZm9ybSB2ZXJib3NlIGVycm9y IHJlcG9ydGluZyBpZiBub3QgTlVMTC4NCj4gPiArICogICBQTURzIGluaXRpYWxpemUgdGhpcyBz dHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dXJu DQo+ID4gKyAqICAgSGFuZGxlIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlIGFuZCBydGVfZXJy bm8gaXMgc2V0Lg0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK3N0cnVj dCBydGVfZmxvd19pdGVtX3RlbXBsYXRlICoNCj4gPiArcnRlX2Zsb3dfaXRlbV90ZW1wbGF0ZV9j cmVhdGUodWludDE2X3QgcG9ydF9pZCwNCj4gPiArCQkJICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9m bG93X2l0ZW1fdGVtcGxhdGVfYXR0ciAqYXR0ciwNCj4gPiArCQkJICAgICAgY29uc3Qgc3RydWN0 IHJ0ZV9mbG93X2l0ZW0gaXRlbXNbXSwNCj4gPiArCQkJICAgICAgc3RydWN0IHJ0ZV9mbG93X2Vy cm9yICplcnJvcik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogQHdhcm5pbmcNCj4gPiArICog QGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNl Lg0KPiA+ICsgKg0KPiA+ICsgKiBEZXN0cm95IGl0ZW0gdGVtcGxhdGUuDQo+ID4gKyAqIFRoaXMg ZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBvbmx5IHdoZW4NCj4gPiArICogdGhlcmUgYXJlIG5vIG1v cmUgdGFibGVzIHJlZmVyZW5jaW5nIHRoaXMgdGVtcGxhdGUuDQo+ID4gKyAqDQo+ID4gKyAqIEBw YXJhbSBwb3J0X2lkDQo+ID4gKyAqICAgUG9ydCBpZGVudGlmaWVyIG9mIEV0aGVybmV0IGRldmlj ZS4NCj4gPiArICogQHBhcmFtW2luXSB0ZW1wbGF0ZQ0KPiA+ICsgKiAgIEhhbmRsZSB0byB0aGUg dGVtcGxhdGUgdG8gYmUgZGVzdHJveWVkLg0KPiANCj4gUGVyaGFwcyAiaGFuZGxlIE9GIHRoZSB0 ZW1wbGF0ZSI/DQpZb3UgYXJlIHJpZ2h0Lg0KDQo+ID4gKyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ ID4gKyAqICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4NCj4g PiArICogICBQTURzIGluaXRpYWxpemUgdGhpcyBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBv bmx5Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgMCBvbiBzdWNjZXNzLCBh IG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4NCj4g PiArICovDQo+ID4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ICtpbnQNCj4gPiArcnRlX2Zsb3df aXRlbV90ZW1wbGF0ZV9kZXN0cm95KHVpbnQxNl90IHBvcnRfaWQsDQo+ID4gKwkJCSAgICAgICBz dHJ1Y3QgcnRlX2Zsb3dfaXRlbV90ZW1wbGF0ZSAqdGVtcGxhdGUsDQo+ID4gKwkJCSAgICAgICBz dHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBP cGFxdWUgdHlwZSByZXR1cm5lZCBhZnRlciBzdWNjZXNzZnVsbCBjcmVhdGlvbiBvZiBhY3Rpb24g dGVtcGxhdGUuDQo+IA0KPiBTaW5nbGUgImwiIGluICJzdWNjZXNzZnVsIi4NCkRpdHRvLg0KDQo+ ID4gKyAqIFRoaXMgaGFuZGxlIGNhbiBiZSB1c2VkIHRvIG1hbmFnZSB0aGUgY3JlYXRlZCBhY3Rp b24gdGVtcGxhdGUuDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3RlbXBs YXRlOw0KPiA+ICsNCj4gPiArX19leHRlbnNpb25fXw0KPiA+ICtzdHJ1Y3QgcnRlX2Zsb3dfYWN0 aW9uX3RlbXBsYXRlX2F0dHIgew0KPiA+ICsJLyoqDQo+ID4gKwkgKiBWZXJzaW9uIG9mIHRoZSBz dHJ1Y3QgbGF5b3V0LCBzaG91bGQgYmUgMC4NCj4gPiArCSAqLw0KPiA+ICsJdWludDMyX3QgdmVy c2lvbjsNCj4gPiArCS8qIE5vIGF0dHJpYnV0ZXMgc28gZmFyLiAqLw0KPiA+ICt9Ow0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAqIEB3YXJuaW5nDQo+ID4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhp cyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZS4NCj4gPiArICoNCj4gPiArICog Q3JlYXRlIGFjdGlvbiB0ZW1wbGF0ZS4NCj4gPiArICogVGhlIGFjdGlvbiB0ZW1wbGF0ZSBob2xk cyBhIGxpc3Qgb2YgYWN0aW9uIHR5cGVzIHdpdGhvdXQgdmFsdWVzLg0KPiA+ICsgKiBGb3IgZXhh bXBsZSwgdGhlIHRlbXBsYXRlIHRvIGNoYW5nZSBUQ1AgcG9ydHMgaXMgVENQKHNfcG9ydCArIGRf cG9ydCksDQo+ID4gKyAqIHdoaWxlIHZhbHVlcyBmb3IgZWFjaCBydWxlIHdpbGwgYmUgc2V0IGR1 cmluZyB0aGUgZmxvdyBydWxlIGNyZWF0aW9uLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGUgb3JkZXIg b2YgdGhlIGFjdGlvbiBpbiB0aGUgdGVtcGxhdGUgbXVzdCBiZSBrZXB0IHdoZW4gaW5zZXJ0aW5n DQo+IHJ1bGVzLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gcG9ydF9pZA0KPiA+ICsgKiAgIFBv cnQgaWRlbnRpZmllciBvZiBFdGhlcm5ldCBkZXZpY2UuDQo+ID4gKyAqIEBwYXJhbVtpbl0gYXR0 cg0KPiA+ICsgKiAgIFRlbXBsYXRlIGF0dHJpYnV0ZXMuDQo+IA0KPiBQZXJoYXBzIGFkZCBhIG1l YW5pbmdmdWwgcHJlZml4IHRvICJhdHRyIi4NClN1cmUgdGhpbmcsIHdpbGwgcmVuYW1lIGFsbCB0 aGUgImF0dHIiIHRvICJ0aGluZ19hdHRyIi4NCg0KPiA+ICsgKiBAcGFyYW1baW5dIGFjdGlvbnMN Cj4gPiArICogICBBc3NvY2lhdGVkIGFjdGlvbnMgKGxpc3QgdGVybWluYXRlZCBieSB0aGUgRU5E IGFjdGlvbikuDQo+ID4gKyAqICAgVGhlIHNwZWMgbWVtYmVyIGlzIG9ubHkgdXNlZCBpZiB0aGUg bWFzayBpcyAxLg0KPiANCj4gTWF5YmUgIml0cyBtYXNrIGlzIGFsbCBvbmVzIj8NCk5vdCBuZWNl c3NhcmlseSwganVzdCBub24temVybyB2YWx1ZSB3b3VsZCBkby4gV2lsbCBtYWtlIGl0IGNsZWFy ZXIuDQoNCj4gPiArICogQHBhcmFtW2luXSBtYXNrcw0KPiA+ICsgKiAgIExpc3Qgb2YgYWN0aW9u cyB0aGF0IG1hcmtzIHdoaWNoIG9mIHRoZSBhY3Rpb24ncyBtZW1iZXIgaXMgY29uc3RhbnQuDQo+ IA0KPiBDb25zaWRlciB0aGUgZm9sbG93aW5nIGFjdGlvbiBleGFtcGxlOg0KPiANCj4gc3RydWN0 IHJ0ZV9mbG93X2FjdGlvbl92eGxhbl9lbmNhcCB7DQo+ICAgICAgICAgIHN0cnVjdCBydGVfZmxv d19pdGVtICpkZWZpbml0aW9uOw0KPiB9Ow0KPiANCj4gU28sIGlmICJkZWZpbml0aW9uIiBpcyBu b3QgTlVMTCwgdGhlIHdob2xlIGhlYWRlciBkZWZpbml0aW9uIGlzIHN1cHBvc2VkDQo+IHRvIGJl IGNvbnN0YW50LCByaWdodD8gT3IgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8NCklmIGRlZmluaXRp b24gaGFzIG5vbi16ZXJvIHZhbHVlIHRoZW4gdGhlIGFjdGlvbiBzcGVjIHdpbGwgYmUgdXNlZCBp biBldmVyeSBydWxlIGNyZWF0ZWQgd2l0aCB0aGlzIHRlbXBsYXRlLg0KSW4gdGhpcyBwYXJ0aWN1 bGFyIGV4YW1wbGUsIHllcywgdGhpcyBkZWZpbml0aW9uIGlzIGdvaW5nIHRvIGJlIGEgY29uc3Rh bnQgaGVhZGVyIGZvciBhbGwgdGhlIHJ1bGVzLg0KDQoNCj4gPiArICogICBBIG1hc2sgaGFzIHRo ZSBzYW1lIGZvcm1hdCBhcyB0aGUgY29ycmVzcG9uZGluZyBhY3Rpb24uDQo+ID4gKyAqICAgSWYg dGhlIGFjdGlvbiBmaWVsZCBpbiBAcCBtYXNrcyBpcyBub3QgMCwNCj4gPiArICogICB0aGUgY29y cmVzcG9uZGluZyB2YWx1ZSBpbiBhbiBhY3Rpb24gZnJvbSBAcCBhY3Rpb25zIHdpbGwgYmUgdGhl IHBhcnQNCj4gPiArICogICBvZiB0aGUgdGVtcGxhdGUgYW5kIHVzZWQgaW4gYWxsIGZsb3cgcnVs ZXMuDQo+ID4gKyAqICAgVGhlIG9yZGVyIG9mIGFjdGlvbnMgaW4gQHAgbWFza3MgaXMgdGhlIHNh bWUgYXMgaW4gQHAgYWN0aW9ucy4NCj4gPiArICogICBJbiBjYXNlIG9mIGluZGlyZWN0IGFjdGlv bnMgcHJlc2VudCBpbiBAcCBhY3Rpb25zLA0KPiA+ICsgKiAgIHRoZSBhY3R1YWwgYWN0aW9uIHR5 cGUgc2hvdWxkIGJlIHByZXNlbnQgaW4gQHAgbWFzay4NCj4gPiArICogQHBhcmFtW291dF0gZXJy b3INCj4gPiArICogICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxM Lg0KPiA+ICsgKiAgIFBNRHMgaW5pdGlhbGl6ZSB0aGlzIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVy cm9yIG9ubHkuDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICBoYW5kbGUgb24g c3VjY2VzcywgTlVMTCBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuDQo+ID4gKyAqLw0K PiA+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPiArc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl90ZW1w bGF0ZSAqDQo+ID4gK3J0ZV9mbG93X2FjdGlvbl90ZW1wbGF0ZV9jcmVhdGUodWludDE2X3QgcG9y dF9pZCwNCj4gPiArCQkJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl90ZW1wbGF0ZV9hdHRy ICphdHRyLA0KPiA+ICsJCQljb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uIGFjdGlvbnNbXSwN Cj4gPiArCQkJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbiBtYXNrc1tdLA0KPiA+ICsJCQlz dHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBA d2FybmluZw0KPiA+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0 aG91dCBwcmlvciBub3RpY2UuDQo+ID4gKyAqDQo+ID4gKyAqIERlc3Ryb3kgYWN0aW9uIHRlbXBs YXRlLg0KPiA+ICsgKiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgb25seSB3aGVuDQo+ID4g KyAqIHRoZXJlIGFyZSBubyBtb3JlIHRhYmxlcyByZWZlcmVuY2luZyB0aGlzIHRlbXBsYXRlLg0K PiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gcG9ydF9pZA0KPiA+ICsgKiAgIFBvcnQgaWRlbnRpZmll ciBvZiBFdGhlcm5ldCBkZXZpY2UuDQo+ID4gKyAqIEBwYXJhbVtpbl0gdGVtcGxhdGUNCj4gPiAr ICogICBIYW5kbGUgdG8gdGhlIHRlbXBsYXRlIHRvIGJlIGRlc3Ryb3llZC4NCj4gPiArICogQHBh cmFtW291dF0gZXJyb3INCj4gPiArICogICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5n IGlmIG5vdCBOVUxMLg0KPiA+ICsgKiAgIFBNRHMgaW5pdGlhbGl6ZSB0aGlzIHN0cnVjdHVyZSBp biBjYXNlIG9mIGVycm9yIG9ubHkuDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICog ICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVf ZXJybm8gaXMgc2V0Lg0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK2lu dA0KPiA+ICtydGVfZmxvd19hY3Rpb25fdGVtcGxhdGVfZGVzdHJveSh1aW50MTZfdCBwb3J0X2lk LA0KPiA+ICsJCQljb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3RlbXBsYXRlICp0ZW1wbGF0 ZSwNCj4gPiArCQkJc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ID4gKw0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAqIE9wYXF1ZSB0eXBlIHJldHVybmVkIGFmdGVyIHN1Y2Nlc3NmdWxs IGNyZWF0aW9uIG9mIHRhYmxlLg0KPiANCj4gUmVkdW5kYW50ICJsIiBpbiAic3VjY2Vzc2Z1bCIu DQpDb25zaWRlciB0aGlzIGZpeGVkLg0KDQo+ID4gKyAqIFRoaXMgaGFuZGxlIGNhbiBiZSB1c2Vk IHRvIG1hbmFnZSB0aGUgY3JlYXRlZCB0YWJsZS4NCj4gPiArICovDQo+ID4gK3N0cnVjdCBydGVf Zmxvd190YWJsZTsNCj4gPiArDQo+ID4gK2VudW0gcnRlX2Zsb3dfdGFibGVfbW9kZSB7DQo+ID4g KwkvKioNCj4gPiArCSAqIEZpeGVkIHNpemUsIHRoZSBudW1iZXIgb2YgZmxvdyBydWxlcyB3aWxs IGJlIGxpbWl0ZWQuDQo+ID4gKwkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHNvbWUgb2YgdGhlIHJ1 bGVzIHdpbGwgbm90IGJlIGluc2VydGVkDQo+ID4gKwkgKiBkdWUgdG8gY29uZmxpY3RzL2xhY2sg b2Ygc3BhY2UuDQo+ID4gKwkgKiBXaGVuIHJ1bGUgaW5zZXJ0aW9uIGZhaWxzIHdpdGggdHJ5IGFn YWluIGVycm9yLA0KPiA+ICsJICogdGhlIGFwcGxpY2F0aW9uIG1heSB1c2Ugb25lIG9mIHRoZSBm b2xsb3dpbmcgd2F5cw0KPiA+ICsJICogdG8gYWRkcmVzcyB0aGlzIHN0YXRlOg0KPiA+ICsJICog MS4gS2VlcCB0aGlzIHJ1bGUgcHJvY2Vzc2luZyBpbiB0aGUgc29mdHdhcmUuDQo+ID4gKwkgKiAy LiBUcnkgdG8gb2ZmbG9hZCB0aGlzIHJ1bGUgYXQgYSBsYXRlciB0aW1lLA0KPiA+ICsJICogICAg YWZ0ZXIgc29tZSBydWxlcyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBoYXJkd2FyZS4NCj4g PiArCSAqIDMuIENyZWF0ZSBhIG5ldyB0YWJsZSBhbmQgYWRkIHRoaXMgcnVsZSB0byB0aGUgbmV3 IHRhYmxlLg0KPiA+ICsJICovDQo+ID4gKwlSVEVfRkxPV19UQUJMRV9NT0RFX0ZJWEVELA0KPiA+ ICsJLyoqDQo+ID4gKwkgKiBSZXNpemFibGUsIHRoZSBQTUQvSFcgd2lsbCBpbnNlcnQgYWxsIHJ1 bGVzLg0KPiA+ICsJICogTm8gdHJ5IGFnYWluIGVycm9yIHdpbGwgYmUgcmVjZWl2ZWQgaW4gdGhp cyBtb2RlLg0KPiA+ICsJICovDQo+ID4gKwlSVEVfRkxPV19UQUJMRV9NT0RFX1JFU0laQUJMRSwN Cj4gPiArfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBUYWJsZSBhdHRyaWJ1dGVzLg0KPiA+ ICsgKi8NCj4gPiArc3RydWN0IHJ0ZV9mbG93X3RhYmxlX2F0dHIgew0KPiA+ICsJLyoqDQo+ID4g KwkgKiBWZXJzaW9uIG9mIHRoZSBzdHJ1Y3QgbGF5b3V0LCBzaG91bGQgYmUgMC4NCj4gPiArCSAq Lw0KPiA+ICsJdWludDMyX3QgdmVyc2lvbjsNCj4gPiArCS8qKg0KPiA+ICsJICogRmxvdyBhdHRy aWJ1dGVzIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSB0YWJsZS4NCj4gPiArCSAqLw0KPiA+ICsJ c3RydWN0IHJ0ZV9mbG93X2F0dHIgYXR0cjsNCj4gDQo+IFBlcmhhcHMsICJmbG93X2F0dHIiIHRo ZW4/DQpBcyB3ZSBhZ3JlZWQuDQoNCj4gPiArCS8qKg0KPiA+ICsJICogTWF4aW11bSBudW1iZXIg b2YgZmxvdyBydWxlcyB0aGF0IHRoaXMgdGFibGUgaG9sZHMuDQo+ID4gKwkgKiBJdCBjYW4gYmUg aGFyZCBvciBzb2Z0IGxpbWl0IGRlcGVuZGluZyBvbiB0aGUgbW9kZS4NCj4gPiArCSAqLw0KPiA+ ICsJdWludDMyX3QgbWF4X3J1bGVzOw0KPiANCj4gSG93IGFib3V0ICJuYl9mbG93c19tYXgiPw0K SnVzdCBuYl9mbG93cyBtYXliZT8NCg==