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 0720AA04AF; Wed, 19 Aug 2020 16:30:07 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 664B4AAD5; Wed, 19 Aug 2020 16:30:07 +0200 (CEST) Received: from hqnvemgate26.nvidia.com (hqnvemgate26.nvidia.com [216.228.121.65]) by dpdk.org (Postfix) with ESMTP id 0818BAAB7 for ; Wed, 19 Aug 2020 16:30:04 +0200 (CEST) Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate26.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Wed, 19 Aug 2020 07:29:50 -0700 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Wed, 19 Aug 2020 07:30:04 -0700 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Wed, 19 Aug 2020 07:30:04 -0700 Received: from HQMAIL109.nvidia.com (172.20.187.15) by HQMAIL109.nvidia.com (172.20.187.15) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Wed, 19 Aug 2020 14:30:03 +0000 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.174) by HQMAIL109.nvidia.com (172.20.187.15) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Wed, 19 Aug 2020 14:30:03 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=X1Fn9w6BaI4vVPIbcV9HoB0BJ5EfGQcVjAfjNpk+CaB+qfR07H2dbVRoYeYtEnWLQ5Vobl5kcuzc3pE+w6HpVFGW1g7MzvEAUdQpM8xyl23eKlMWjBzZ7fauhT74gmi+NGuSLyfBmNzTnt9ZXzv8HaTVHkcPeWrgi5xsqCA1s960878/RqnhoUx/Oxpo1m6GgECjaqWRL+mbrf82AO70z98d+TM54AuFy+VDRBxKNWTObJghnxm8uB4Or0bX1iaD0hxALYrnUKa7/BloH2aCL6HQdrnmuD/c9/t3kkB2JkWm4fTiwSGVlPkx3EV/3HRp/5iSQIZx2+fn/nRSVheSmA== 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=gU62pge8BuK29/Lhp1863l6hPSSMlZlv4PLaJMoDzKc=; b=YN3OJ8QDYQJsyzbxQ5iKVQ3Dh5rqL66cDYGrZxfK712fEhtyoAZH+Ji4HIsherLBVb/tGoQvQjp7Q73wQrNChd6AOsz29PI+u6uPk/bFGy7xtiRPqIqqdpMgT/5fCsyhqX4W1KjI9t49zEijo9h4WgxfwDhOaFsTtO1uW6GW50ZAKFa1MCDScUd0eberaPOf0SrIH8HsCqlV1T4sAi3lzN3ZGKcmNKXSiRs9ZXlixmOdh7BKy8OSG3H7a99ylR05SfZ2Ut2qoNY+dWZXDNoy4m7ken+SIe31c1hbcsYZB2zre0dt51p1x2WAqQHGyxHs+4gvwIxbyhd9+NnEffHrPw== 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 Received: from BY5PR12MB3668.namprd12.prod.outlook.com (2603:10b6:a03:194::25) by BY5PR12MB3953.namprd12.prod.outlook.com (2603:10b6:a03:194::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3283.22; Wed, 19 Aug 2020 14:30:02 +0000 Received: from BY5PR12MB3668.namprd12.prod.outlook.com ([fe80::c876:5bb9:796f:9cbe]) by BY5PR12MB3668.namprd12.prod.outlook.com ([fe80::c876:5bb9:796f:9cbe%4]) with mapi id 15.20.3305.025; Wed, 19 Aug 2020 14:30:01 +0000 From: Gregory Etelson To: Andrew Rybchenko , "dev@dpdk.org" CC: Matan Azrad , Raslan Darawsheh , "Eli Britstein" , Ori Kam Thread-Topic: [dpdk-dev] [PATCH 2/2] ethdev: tunnel offload model Thread-Index: AQHWWV4pAOXbYVtUo06B5vMZ3ydyRaj5BJuAgEaxWBA= Date: Wed, 19 Aug 2020 14:30:01 +0000 Message-ID: References: <20200625160348.26220-1-getelson@mellanox.com> <20200625160348.26220-3-getelson@mellanox.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: solarflare.com; dkim=none (message not signed) header.d=none;solarflare.com; dmarc=none action=none header.from=nvidia.com; x-originating-ip: [176.230.227.5] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 59860807-1e77-4083-26b8-08d8444c5bb8 x-ms-traffictypediagnostic: BY5PR12MB3953: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: CdK9T6gKF7fHVDivLpa+eMwxK48zGCDtqT52c/Q6n7R1HHpKjXGfMcerm9ajioHgV1Who0dhPdtSLgjG08Je2gGibB+1wYYAHYcZ8xFb+maVETN52IeJSLVRqqRsu6vBmqekl4pRFiFoLWiAvAqOD/yn/jjpyBEGTHmcGJnC84qbm6BwZTGsxsKZFoRUKQQSQeujPEtRGV9vT5qRkbkRCEWc80S8xPTKrEImwJp/+pSkmB4r5yb/G0kzg8ewtxq9wIGgmYerLVt/j9umcLyKqaG5SjpT+G3Df8i/I5pWk9Wl1H1oEYwtLXa+L7QuBFFLHfDkChAv5oLVwqXW7J9LGC8kIO1rqRQ2wIeldmzBX4Op3hvaW700NTIxmHkfr/5UUrCaAHnYKZ/5EKmZFyVX/g== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BY5PR12MB3668.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(396003)(39860400002)(366004)(346002)(376002)(136003)(64756008)(66556008)(53546011)(54906003)(30864003)(316002)(107886003)(9686003)(83380400001)(8676002)(76116006)(55016002)(26005)(33656002)(45080400002)(5660300002)(66446008)(66476007)(83080400001)(71200400001)(186003)(7696005)(2906002)(110136005)(966005)(66946007)(478600001)(6506007)(86362001)(4326008)(52536014)(8936002)(559001)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: 307A2znwL0Updu6pP4jyhQEltQVU5QMABAC/f/IsQbeMbIPwBc+YFXjEBxU5Mja67iSzGYTQCHqA3scRZfKnNevD/VyCMlH4paTZOJ0aFAqOUuH3prWi/T8TtlDFYH+Pm85DMmsdy147kXwG7lyrYxzmptkiZqPRex6k/f+9v2beJW/c127no37VS+2CfhweLT2+kmc1n5xdmUPad6hMO93kzkyud9/eV42inWHzb8FvA2ppVpDPpgwFR0PoicioJZ6yg1khqDt58WGzCpXP3zZmgZwJkWLuLfRmXNcTp050lC1QItE+rg+3aXgFJ0k/MVB91uZWf3zVEHZSaLOVUVsf7lGwPiMH5tPQ1p0escATZRzZAiahLNnmdCoVEcHtOoMujf9h39MIZbz+966RiOz0+uC/FAqZmqaa0aAv0mYW4IWkNINi4J9hFgVKSXhmue1wSqF/URQLCn1sOaYKQJ3S0qXTZh5voGTWDMMLqKVr4uPzXKJR/ZxYkHbqc9gH5D+1YV44pf8Gdo7HbCszXiPJHnl0v+e32+rzV4Q0m2nY/7O36ICeNAGYF+o9rZ31ygnebVqmrf4QHA8K9sAIFoqguuX3/Pt+KCll0sztmsp+zyZXXlQruzNv+1Ds0GkL7jVgjhtIlZVmnad1dpz8AA== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BY5PR12MB3668.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 59860807-1e77-4083-26b8-08d8444c5bb8 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Aug 2020 14:30:01.8464 (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: ex3LqLLs19GtSXRjh74pgpIlV0ZHOWzfBowiwiYdqoKPmbNFAQ5NzNv7jg/oARovEMnXWwByW3LRqpkAskgqaw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB3953 X-OriginatorOrg: Nvidia.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1597847390; bh=gU62pge8BuK29/Lhp1863l6hPSSMlZlv4PLaJMoDzKc=; h=X-PGP-Universal:ARC-Seal:ARC-Message-Signature: ARC-Authentication-Results:From:To:CC:Subject:Thread-Topic: Thread-Index:Date:Message-ID:References:In-Reply-To: Accept-Language:Content-Language:X-MS-Has-Attach: X-MS-TNEF-Correlator:authentication-results:x-originating-ip: x-ms-publictraffictype:x-ms-office365-filtering-correlation-id: x-ms-traffictypediagnostic:x-ms-exchange-transport-forked: x-microsoft-antispam-prvs:x-ms-oob-tlc-oobclassifiers: x-ms-exchange-senderadcheck:x-microsoft-antispam: x-microsoft-antispam-message-info:x-forefront-antispam-report: x-ms-exchange-antispam-messagedata:Content-Type: Content-Transfer-Encoding:MIME-Version: X-MS-Exchange-CrossTenant-AuthAs: X-MS-Exchange-CrossTenant-AuthSource: X-MS-Exchange-CrossTenant-Network-Message-Id: X-MS-Exchange-CrossTenant-originalarrivaltime: X-MS-Exchange-CrossTenant-fromentityheader: X-MS-Exchange-CrossTenant-id:X-MS-Exchange-CrossTenant-mailboxtype: X-MS-Exchange-CrossTenant-userprincipalname: X-MS-Exchange-Transport-CrossTenantHeadersStamped:X-OriginatorOrg; b=LaZGZIBprzx/NNc00D3DZtB0YUvMHtXe1ufn0g+u73EaOaFdTOw3ifq0ogbg1tq91 +8gZYJzc80kykvyQHvjL2tDaSQeteQ5Zirnws37nByEb2JcfXEj5xPOSI8ixN23cPQ WKD3IvN+2Dyo39HykJCE1ZlxTSGDJH2AmVgeiXlU96WgdJ6oYa56J9PaBfDd+1eDsY 6bD87qrgEQwreUu4+Yh9580S1V2zGGRid16J64EuH9x8eKp+L8Nl7ZoJGgyZ2VPfgU sGVo2XYIvQjCtLvxnpjV4eawTocFzb748QMUcetVEYdLZimvwUggUWZebuF23Ye6zM Lo5Ayn23qo36Q== Subject: Re: [dpdk-dev] [PATCH 2/2] ethdev: tunnel offload model 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" SGVsbG8gQW5kcmV3LA0KDQpUaGFuayB5b3UgZm9yIGRldGFpbGVkIHJldmlldy4NClNvcnJ5IGZv ciB0aGUgbGF0ZSByZXNwb25zZS4NClBsZWFzZSBzZWUgbXkgYW5zd2VycyBpbmxpbmUuDQoNClJl Z2FyZHMsDQpHcmVnb3J5DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTog QW5kcmV3IFJ5YmNoZW5rbyA8YXJ5YmNoZW5rb0Bzb2xhcmZsYXJlLmNvbT4NCj4gU2VudDogU3Vu ZGF5LCBKdWx5IDUsIDIwMjAgMTc6NTENCj4gVG86IEdyZWdvcnkgRXRlbHNvbiA8Z2V0ZWxzb25A bWVsbGFub3guY29tPjsgZGV2QGRwZGsub3JnDQo+IENjOiBNYXRhbiBBenJhZCA8bWF0YW5AbWVs bGFub3guY29tPjsgUmFzbGFuIERhcmF3c2hlaCANCj4gPHJhc2xhbmRAbWVsbGFub3guY29tPjsg RWxpIEJyaXRzdGVpbiA8ZWxpYnJAbWVsbGFub3guY29tPjsgT3JpIEthbSANCj4gPG9yaWthQG1l bGxhbm94LmNvbT4NCj4gU3ViamVjdDogUmU6IFtkcGRrLWRldl0gW1BBVENIIDIvMl0gZXRoZGV2 OiB0dW5uZWwgb2ZmbG9hZCBtb2RlbA0KPiANCj4gSGkgR3JlZ29yeSwNCj4gDQo+IEknbSBzb3Jy eSBmb3IgdGhlIHJldmlldyB3aXRoIHRvb29vIG1hbnkgcXVlc3Rpb25zIHdpdGhvdXQgYW55IA0K PiBzdWdnZXN0aW9ucyBvbiBob3cgdG8gYW5zd2VyIGl0LiBQbGVhc2UsIHNlZSBiZWxvdy4NCj4g DQo+IE9uIDYvMjUvMjAgNzowMyBQTSwgR3JlZ29yeSBFdGVsc29uIHdyb3RlOg0KPiA+IEZyb206 IEVsaSBCcml0c3RlaW4gPGVsaWJyQG1lbGxhbm94LmNvbT4NCj4gPg0KPiA+IEhhcmR3YXJlIHZl bmRvcnMgaW1wbGVtZW50IHR1bm5lbGVkIHRyYWZmaWMgb2ZmbG9hZCB0ZWNobmlxdWVzIA0KPiA+ IGRpZmZlcmVudGx5LiBBbHRob3VnaCBSVEUgZmxvdyBBUEkgcHJvdmlkZXMgdG9vbHMgY2FwYWJs ZSB0byBvZmZsb2FkIA0KPiA+IGFsbCBzb3J0cyBvZiBuZXR3b3JrIHN0YWNrcywgc29mdHdhcmUg YXBwbGljYXRpb24gbXVzdCByZWZlcmVuY2UgDQo+ID4gdGhpcyBoYXJkd2FyZSBkaWZmZXJlbmNl cyBpbiBmbG93IHJ1bGVzIGNvbXBpbGF0aW9uLiBBcyB0aGUgcmVzdWx0IA0KPiA+IHR1bm5lbGVk IHRyYWZmaWMgZmxvdyBydWxlcyB0aGF0IHV0aWxpemUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzIGNh biANCj4gPiBiZSBkaWZmZXJlbnQgZm9yIHRoZSBzYW1lIHRyYWZmaWMuDQo+ID4NCj4gPiBUdW5u ZWwgcG9ydCBvZmZsb2FkIHByb3Bvc2VkIGluIFsxXSBwcm92aWRlcyBzb2Z0d2FyZSBhcHBsaWNh dGlvbiANCj4gPiB3aXRoIHVuaWZpZWQgcnVsZXMgbW9kZWwgZm9yIHR1bm5lbGVkIHRyYWZmaWMg cmVnYXJkbGVzcyB1bmRlcmx5aW5nIA0KPiA+IGhhcmR3YXJlLg0KPiA+ICAtIFRoZSBtb2RlbCBp bnRyb2R1Y2VzIGEgY29uY2VwdCBvZiBhIHZpcnR1YWwgdHVubmVsIHBvcnQgKFZUUCkuDQo+ID4g IC0gVGhlIG1vZGVsIHVzZXMgVlRQIHRvIG9mZmxvYWQgaW5ncmVzcyB0dW5uZWxlZCBuZXR3b3Jr IHRyYWZmaWMNCj4gPiAgICB3aXRoIFJURSBmbG93IHJ1bGVzLg0KPiA+ICAtIFRoZSBtb2RlbCBp cyBpbXBsZW1lbnRlZCBhcyBzZXQgb2YgaGVscGVyIGZ1bmN0aW9ucy4gRWFjaCBQTUQNCj4gPiAg ICBpbXBsZW1lbnRzIFZUUCBvZmZsb2FkIGFjY29yZGluZyB0byB1bmRlcmx5aW5nIGhhcmR3YXJl IG9mZmxvYWQNCj4gPiAgICBjYXBhYmlsaXRpZXMuICBBcHBsaWNhdGlvbnMgbXVzdCBxdWVyeSBQ TUQgZm9yIFZUUCBmbG93DQo+ID4gICAgaXRlbXMgLyBhY3Rpb25zIGJlZm9yZSB1c2luZyBpbiBj cmVhdGlvbiBvZiBhIFZUUCBmbG93IHJ1bGUuDQo+ID4NCj4gPiBUaGUgbW9kZWwgY29tcG9uZW50 czoNCj4gPiAtIFZpcnR1YWwgVHVubmVsIFBvcnQgKFZUUCkgaXMgYSBzdGF0ZWxlc3Mgc29mdHdh cmUgb2JqZWN0IHRoYXQNCj4gPiAgIGRlc2NyaWJlcyB0dW5uZWxlZCBuZXR3b3JrIHRyYWZmaWMu ICBWVFAgb2JqZWN0IHVzdWFsbHkgY29udGFpbnMNCj4gPiAgIGRlc2NyaXB0aW9ucyBvZiBvdXRl ciBoZWFkZXJzLCB0dW5uZWwgaGVhZGVycyBhbmQgaW5uZXIgaGVhZGVycy4NCj4gPiAtIFR1bm5l bCBTdGVlcmluZyBmbG93IFJ1bGUgKFRTUikgZGV0ZWN0cyB0dW5uZWxlZCBwYWNrZXRzIGFuZA0K PiA+ICAgZGVsZWdhdGVzIHRoZW0gdG8gdHVubmVsIHByb2Nlc3NpbmcgaW5mcmFzdHJ1Y3R1cmUs IGltcGxlbWVudGVkDQo+ID4gICBpbiBQTUQgZm9yIG9wdGltYWwgaGFyZHdhcmUgdXRpbGl6YXRp b24sIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuDQo+ID4gLSBUdW5uZWwgTWF0Y2hpbmcgZmxvdyBS dWxlIChUTVIpIHZlcmlmaWVzIHBhY2tldCBjb25maWd1cmF0aW9uIGFuZA0KPiA+ICAgcnVucyBv ZmZsb2FkIGFjdGlvbnMgaW4gY2FzZSBvZiBhIG1hdGNoLg0KPiA+DQo+ID4gQXBwbGljYXRpb24g YWN0aW9uczoNCj4gPiAxIEluaXRpYWxpemUgVlRQIG9iamVjdCBhY2NvcmRpbmcgdG8gdHVubmVs DQo+ID4gICBuZXR3b3JrIHBhcmFtZXRlcnMuDQo+ID4gMiBDcmVhdGUgVFNSIGZsb3cgcnVsZToN Cj4gPiAyLjEgUXVlcnkgUE1EIGZvciBWVFAgYWN0aW9uczogYXBwbGljYXRpb24gY2FuIHF1ZXJ5 IGZvciBWVFAgYWN0aW9ucw0KPiA+ICAgICBtb3JlIHRoYW4gb25jZQ0KPiA+ICAgICBpbnQNCj4g PiAgICAgcnRlX2Zsb3dfdHVubmVsX2RlY2FwX3NldCh1aW50MTZfdCBwb3J0X2lkLA0KPiA+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGVfZmxvd190dW5uZWwgKnR1bm5l bCwNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRlX2Zsb3dfYWN0 aW9uICoqcG1kX2FjdGlvbnMsDQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDMyX3QgKm51bV9vZl9wbWRfYWN0aW9ucywNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gPg0KPiA+IDIuMiBJbnRlZ3Jh dGUgUE1EIGFjdGlvbnMgaW50byBUU1IgYWN0aW9ucyBsaXN0Lg0KPiA+IDIuMyBDcmVhdGUgVFNS IGZsb3cgcnVsZToNCj4gPiAgICAgZmxvdyBjcmVhdGUgPHBvcnQ+IGdyb3VwIDANCj4gPiAgICAg ICAgICAgbWF0Y2gge3R1bm5lbCBpdGVtc30gLyBlbmQNCj4gPiAgICAgICAgICAgYWN0aW9ucyB7 UE1EIGFjdGlvbnN9IC8ge0FwcCBhY3Rpb25zfSAvIGVuZA0KPiA+DQo+ID4gMyBDcmVhdGUgVE1S IGZsb3cgcnVsZToNCj4gPiAzLjEgUXVlcnkgUE1EIGZvciBWVFAgaXRlbXM6IGFwcGxpY2F0aW9u IGNhbiBxdWVyeSBmb3IgVlRQIGl0ZW1zDQo+ID4gICAgIG1vcmUgdGhhbiBvbmNlDQo+ID4gICAg IGludA0KPiA+ICAgICBydGVfZmxvd190dW5uZWxfbWF0Y2godWludDE2X3QgcG9ydF9pZCwNCj4g PiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGVfZmxvd190dW5uZWwgKnR1bm5l bCwNCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGVfZmxvd19pdGVtICoq cG1kX2l0ZW1zLA0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKm51bV9v Zl9wbWRfaXRlbXMsDQo+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRlX2Zs b3dfZXJyb3IgKmVycm9yKTsNCj4gPg0KPiA+IDMuMiBJbnRlZ3JhdGUgUE1EIGl0ZW1zIGludG8g VE1SIGl0ZW1zIGxpc3Q6DQo+ID4gMy4zIENyZWF0ZSBUTVIgZmxvdyBydWxlDQo+ID4gICAgIGZs b3cgY3JlYXRlIDxwb3J0PiBncm91cCAwDQo+ID4gICAgICAgICAgIG1hdGNoIHtQTUQgaXRlbXN9 IC8ge0FQUCBpdGVtc30gLyBlbmQNCj4gPiAgICAgICAgICAgYWN0aW9ucyB7b2ZmbG9hZCBhY3Rp b25zfSAvIGVuZA0KPiA+DQo+ID4gVGhlIG1vZGVsIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbiBj YWxsIHRvIHJlc3RvcmUgcGFja2V0cyB0aGF0IG1pc3MgDQo+ID4gdHVubmVsIFRNUiBydWxlcyB0 byBpdHMgb3JpZ2luYWwgc3RhdGU6DQo+ID4gaW50DQo+ID4gcnRlX2Zsb3dfZ2V0X3Jlc3RvcmVf aW5mbyh1aW50MTZfdCBwb3J0X2lkLA0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHJ0ZV9tYnVmICptYnVmLA0KPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHJ0ZV9mbG93X3Jlc3RvcmVfaW5mbyAqaW5mbywNCj4gPiAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0KPiA+DQo+ID4gcnRlX3R1bm5lbCBv YmplY3QgZmlsbGVkIGJ5IHRoZSBjYWxsIGluc2lkZSBydGVfZmxvd19yZXN0b3JlX2luZm8gDQo+ ID4gKmluZm8gcGFyYW1ldGVyIGNhbiBiZSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiB0byBjcmVh dGUgbmV3IFRNUiANCj4gPiBydWxlIGZvciB0aGF0IHR1bm5lbC4NCj4gPg0KPiA+IFRoZSBtb2Rl bCByZXF1aXJlbWVudHM6DQo+ID4gU29mdHdhcmUgYXBwbGljYXRpb24gbXVzdCBpbml0aWFsaXpl IHJ0ZV90dW5uZWwgb2JqZWN0IHdpdGggdHVubmVsIA0KPiA+IHBhcmFtZXRlcnMgYmVmb3JlIGNh bGxpbmcNCj4gPiBydGVfZmxvd190dW5uZWxfZGVjYXBfc2V0KCkgJiBydGVfZmxvd190dW5uZWxf bWF0Y2goKS4NCj4gPg0KPiA+IFBNRCBhY3Rpb25zIGFycmF5IG9idGFpbmVkIGluIHJ0ZV9mbG93 X3R1bm5lbF9kZWNhcF9zZXQoKSBtdXN0IGJlIA0KPiA+IHJlbGVhc2VkIGJ5IGFwcGxpY2F0aW9u IHdpdGggcnRlX2Zsb3dfYWN0aW9uX3JlbGVhc2UoKSBjYWxsLg0KPiA+IEFwcGxpY2F0aW9uIGNh biByZWxlYXNlIHRoZSBhY3Rpb25zZnRlciBUU1IgcnVsZSB3YXMgY3JlYXRlZC4NCj4gPg0KPiA+ IFBNRCBpdGVtcyBhcnJheSBvYnRhaW5lZCB3aXRoIHJ0ZV9mbG93X3R1bm5lbF9tYXRjaCgpIG11 c3QgYmUgDQo+ID4gcmVsZWFzZWQgYnkgYXBwbGljYXRpb24gd2l0aCBydGVfZmxvd19pdGVtX3Jl bGVhc2UoKSBjYWxsLg0KPiA+IEFwcGxpY2F0aW9uIGNhbiByZWxlYXNlIHRoZSBpdGVtcyBhZnRl ciBydWxlIHdhcyBjcmVhdGVkLiBIb3dldmVyLCANCj4gPiBpZiB0aGUgYXBwbGljYXRpb24gbmVl ZHMgdG8gY3JlYXRlIGFkZGl0aW9uYWwgVE1SIHJ1bGUgZm9yIHRoZSBzYW1lIA0KPiA+IHR1bm5l bCBpdCB3aWxsIG5lZWQgdG8gb2J0YWluIFBNRCBpdGVtcyBhZ2Fpbi4NCj4gPg0KPiA+IEFwcGxp Y2F0aW9uIGNhbm5vdCBkZXN0cm95IHJ0ZV90dW5uZWwgb2JqZWN0IGJlZm9yZSBpdCByZWxlYXNl cyBhbGwgDQo+ID4gUE1EIGFjdGlvbnMgJiBQTUQgaXRlbXMgcmVmZXJlbmNpbmcgdGhhdCB0dW5u ZWwuDQo+ID4NCj4gPiBbMV0NCj4gPiBodHRwczovL2V1cjAzLnNhZmVsaW5rcy5wcm90ZWN0aW9u Lm91dGxvb2suY29tLz91cmw9aHR0cHMlM0ElMkYlMkZtYQ0KPiA+IGlsDQo+ID4gcy5kcGRrLm9y ZyUyRmFyY2hpdmVzJTJGZGV2JTJGMjAyMC0NCj4gSnVuZSUyRjE2OTY1Ni5odG1sJmFtcDtkYXRh PTAyJTdDMDENCj4gPg0KPiAlN0NnZXRlbHNvbiU0MG1lbGxhbm94LmNvbSU3Q2IxZGQ1ZDUzNTM1 NzQ5MmM3Mjc1MDhkODIwZjJkOTdiJTcNCj4gQ2E2NTI5Nw0KPiA+DQo+IDFjN2QyZTRkOWJhNmE0 ZDE0OTI1NmY0NjFiJTdDMCU3QzAlN0M2MzcyOTU1NzQ3MDI4NTg4NzEmYW1wO3NkDQo+IGF0YT1F aiUyDQo+ID4NCj4gRnRNVXQyQSUyRlYzeTcwaVJUWHE1Tm1DUmJXOG54Q3g0UExaUVFGd2IzbyUz RCZhbXA7cmVzZXJ2ZWQ9DQo+IDANCj4gPg0KPiA+IFNpZ25lZC1vZmYtYnk6IEVsaSBCcml0c3Rl aW4gPGVsaWJyQG1lbGxhbm94LmNvbT4NCj4gPiBBY2tlZC1ieTogT3JpIEthbSA8b3Jpa2FAbWVs bGFub3guY29tPg0KPiA+IC0tLQ0KPiA+ICBkb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcnRlX2Zsb3cu cnN0ICAgICAgIHwgMTA1ICsrKysrKysrKysrKw0KPiA+ICBsaWIvbGlicnRlX2V0aGRldi9ydGVf ZXRoZGV2X3ZlcnNpb24ubWFwIHwgICA1ICsNCj4gPiAgbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2Zs b3cuYyAgICAgICAgICAgICB8IDExMiArKysrKysrKysrKysrDQo+ID4gIGxpYi9saWJydGVfZXRo ZGV2L3J0ZV9mbG93LmggICAgICAgICAgICAgfCAxOTYgKysrKysrKysrKysrKysrKysrKysrKysN Cj4gPiAgbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2Zsb3dfZHJpdmVyLmggICAgICB8ICAzMiArKysr DQo+ID4gIDUgZmlsZXMgY2hhbmdlZCwgNDUwIGluc2VydGlvbnMoKykNCj4gPg0KPiA+IGRpZmYg LS1naXQgYS9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcnRlX2Zsb3cucnN0DQo+ID4gYi9kb2MvZ3Vp ZGVzL3Byb2dfZ3VpZGUvcnRlX2Zsb3cucnN0DQo+ID4gaW5kZXggZDVkZDE4Y2U5OS4uY2ZkOThj MmU3ZCAxMDA2NDQNCj4gPiAtLS0gYS9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcnRlX2Zsb3cucnN0 DQo+ID4gKysrIGIvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3J0ZV9mbG93LnJzdA0KPiA+IEBAIC0z MDEwLDYgKzMwMTAsMTExIEBAIG9wZXJhdGlvbnMgaW5jbHVkZToNCj4gPiAgLSBEdXBsaWNhdGlv biBvZiBhIGNvbXBsZXRlIGZsb3cgcnVsZSBkZXNjcmlwdGlvbi4NCj4gPiAgLSBQYXR0ZXJuIGl0 ZW0gb3IgYWN0aW9uIG5hbWUgcmV0cmlldmFsLg0KPiA+DQo+ID4gK1R1bm5lbGVkIHRyYWZmaWMg b2ZmbG9hZA0KPiA+ICt+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4NCj4gPiArDQo+ID4gK1Byb3Zp ZGUgc29mdHdhcmUgYXBwbGljYXRpb24gd2l0aCB1bmlmaWVkIHJ1bGVzIG1vZGVsIGZvciB0dW5u ZWxlZCANCj4gPiArdHJhZmZpYyByZWdhcmRsZXNzIHVuZGVybHlpbmcgaGFyZHdhcmUuDQo+ID4g Kw0KPiA+ICsgLSBUaGUgbW9kZWwgaW50cm9kdWNlcyBhIGNvbmNlcHQgb2YgYSB2aXJ0dWFsIHR1 bm5lbCBwb3J0IChWVFApLg0KPiANCj4gSXQgbG9va3MgbGlrZSBpdCBpcyBhYnNvbHV0ZWx5IGFi c3RyYWN0IGNvbmNlcHQgbm93LCBzaW5jZSBpdCBpcyBub3QgDQo+IG1lbnRpb25lZC9yZWZlcmVu Y2VkIGluIHRoZSBoZWFkZXIgZmlsZS4gSXQgbWFrZXMgaXQgaGFyZCB0byBwdXQgdGhlIA0KPiBk ZXNjcmlwdGlvbiBhbmQgQVBJIHRvZ2V0aGVyLg0KPiANCg0KVmlydHVhbCB0dW5uZWwgaXMgYSBj b25jZXB0IHRoYXQgYWxsb3dzIFBNRCB0byByZXN0b3JlIHBhY2tldCBvdXRlciBoZWFkZXIgYWZ0 ZXIgZGVjYXAuDQpFeGFtcGxlIGJlbG93IHNob3dzIGhvdyB0aGlzIGZlYXR1cmUgaXMgdXNlZC4N Cg0KPiA+ICsgLSBUaGUgbW9kZWwgdXNlcyBWVFAgdG8gb2ZmbG9hZCBpbmdyZXNzIHR1bm5lbGVk IG5ldHdvcmsgdHJhZmZpYw0KPiA+ICsgICB3aXRoIFJURSBmbG93IHJ1bGVzLg0KPiA+ICsgLSBU aGUgbW9kZWwgaXMgaW1wbGVtZW50ZWQgYXMgc2V0IG9mIGhlbHBlciBmdW5jdGlvbnMuIEVhY2gg UE1EDQo+ID4gKyAgIGltcGxlbWVudHMgVlRQIG9mZmxvYWQgYWNjb3JkaW5nIHRvIHVuZGVybHlp bmcgaGFyZHdhcmUgb2ZmbG9hZA0KPiA+ICsgICBjYXBhYmlsaXRpZXMuICBBcHBsaWNhdGlvbnMg bXVzdCBxdWVyeSBQTUQgZm9yIFZUUCBmbG93DQo+ID4gKyAgIGl0ZW1zIC8gYWN0aW9ucyBiZWZv cmUgdXNpbmcgaW4gY3JlYXRpb24gb2YgYSBWVFAgZmxvdyBydWxlLg0KPiANCj4gRm9yIG1lIGl0 IGxvb2tzIGxpa2UgImNyZWF0aW9uIG9mIGEgVlRQIGZsb3cgcnVsZSIgaXMgbm90IGNvdmVyZWQg eWV0LiANCj4gRmxvdyBydWxlcyBleGFtcGxlcyBtZW50aW9uIGl0IGluIHBhdHRlcm4gYW5kIGFj dGlvbnMsIGJ1dCB0aGVyZSBpcyBubyANCj4gY29ycmVzcG9uZGluZyBwYXR0ZXJuIGl0ZW1zIGFu ZCBhY3Rpb25zLiBNYXkgYmUgSSBzaW1wbHkgbWlzdW5kZXJzdGFuZCB0aGUgaWRlYS4NCj4NCg0K VGhpcyBmZWF0dXJlIGRvZXMgbm90IGludHJvZHVjZSBuZXcgUlRFIGl0ZW1zIG9yIGFjdGlvbnMu IA0KVGhlIGlkZWEgaXMgdGhhdCBQTUQgd2lsbCB1c2UgcHJpdmF0ZSBpdGVtcyBhbmQgYWN0aW9u cyB0byBpbXBsZW1lbnQgaW50ZXJuYWwgbG9naWMgDQp0aGF0IHdpbGwgYWxsb3cgcGFja2V0IHJl c3RvcmUgYWZ0ZXIgZGVjYXAuIFRoZXJlJ3MgYSBkZXRhaWxlZCBleGFtcGxlIGJlbG93Lg0KSW50 ZXJuYWwgUE1EIGVsZW1lbnRzIHJlZmVycmVkIGFzIHBtZF9pdGVtIC8gcG1kX2FjdGlvbi4NCg0K PiA+ICsNCj4gPiArVGhlIG1vZGVsIGNvbXBvbmVudHM6DQo+ID4gKw0KPiA+ICstIFZpcnR1YWwg VHVubmVsIFBvcnQgKFZUUCkgaXMgYSBzdGF0ZWxlc3Mgc29mdHdhcmUgb2JqZWN0IHRoYXQNCj4g PiArICBkZXNjcmliZXMgdHVubmVsZWQgbmV0d29yayB0cmFmZmljLiAgVlRQIG9iamVjdCB1c3Vh bGx5IGNvbnRhaW5zDQo+ID4gKyAgZGVzY3JpcHRpb25zIG9mIG91dGVyIGhlYWRlcnMsIHR1bm5l bCBoZWFkZXJzIGFuZCBpbm5lciBoZWFkZXJzLg0KPiANCj4gQXJlIGlubmVyIGhlYWRlcnMgcmVh bGx5IGEgcGFydCBvZiB0aGUgdHVubmVsIGRlc2NyaXB0aW9uPw0KPg0KDQpJbm5lciBoZWFkZXJz IGFyZSBub3QgcGFydCBvZiB0dW5uZWwgZGVzY3JpcHRpb24uDQoNCj4gPiArLSBUdW5uZWwgU3Rl ZXJpbmcgZmxvdyBSdWxlIChUU1IpIGRldGVjdHMgdHVubmVsZWQgcGFja2V0cyBhbmQNCj4gPiAr ICBkZWxlZ2F0ZXMgdGhlbSB0byB0dW5uZWwgcHJvY2Vzc2luZyBpbmZyYXN0cnVjdHVyZSwgaW1w bGVtZW50ZWQNCj4gPiArICBpbiBQTUQgZm9yIG9wdGltYWwgaGFyZHdhcmUgdXRpbGl6YXRpb24s IGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuDQo+ID4gKy0gVHVubmVsIE1hdGNoaW5nIGZsb3cgUnVs ZSAoVE1SKSB2ZXJpZmllcyBwYWNrZXQgY29uZmlndXJhdGlvbiBhbmQNCj4gPiArICBydW5zIG9m ZmxvYWQgYWN0aW9ucyBpbiBjYXNlIG9mIGEgbWF0Y2guDQo+IA0KPiBJcyBpdCBmb3IgZnVsbHkg b2ZmbG9hZGVkIHR1bm5lbHMgd2l0aCBlbmNhcC9kZWNhcCBvciBhbGwgdHVubmVscyANCj4gKGRl dGVjdGVkLCBidXQgcGFydGlhbGx5IG9mZmxvYWRlZCwgZS5nLiBjaGVja3N1bW1pbmcpPw0KPiAN Cg0KVHVubmVsIEFQSSBpcyBkZXNpZ25lZCBmb3IgdHVubmVsIHBhY2tldHMgdGhhdCB3aWxsIGdv IHRocm91Z2ggZGVjYXAgYWN0aW9uLg0KQ3VycmVudCB0dW5uZWwgQVBJIHZlcnNpb24gZm9jdXNl cyBvbiBWWExBTiB0dW5uZWwuDQoNCj4gPiArDQo+ID4gK0FwcGxpY2F0aW9uIGFjdGlvbnM6DQo+ ID4gKw0KPiA+ICsxIEluaXRpYWxpemUgVlRQIG9iamVjdCBhY2NvcmRpbmcgdG8gdHVubmVsIG5l dHdvcmsgcGFyYW1ldGVycy4NCj4gDQo+IEkuZS4gZmlsbCBpbiAnc3RydWN0IHJ0ZV9mbG93X3R1 bm5lbCcuIElzIGl0IGNvcnJlY3Q/DQo+DQoNCkNvcnJlY3QuIEFwcGxpY2F0aW9uIGluaXRpYWxp emVzIHJ0ZV9mbG93X3R1bm5lbCBzdHJ1Y3R1cmUNCg0KPiA+ICsNCj4gPiArMiBDcmVhdGUgVFNS IGZsb3cgcnVsZS4NCj4gPiArDQo+ID4gKzIuMSBRdWVyeSBQTUQgZm9yIFZUUCBhY3Rpb25zLiBB cHBsaWNhdGlvbiBjYW4gcXVlcnkgZm9yIFZUUCANCj4gPiArYWN0aW9ucw0KPiBtb3JlIHRoYW4g b25jZS4NCj4gPiArDQo+ID4gKyAgLi4gY29kZS1ibG9jazo6IGMNCj4gPiArDQo+ID4gKyAgICBp bnQNCj4gPiArICAgIHJ0ZV9mbG93X3R1bm5lbF9kZWNhcF9zZXQodWludDE2X3QgcG9ydF9pZCwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJ0ZV9mbG93X3R1bm5l bCAqdHVubmVsLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRl X2Zsb3dfYWN0aW9uICoqcG1kX2FjdGlvbnMsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQzMl90ICpudW1fb2ZfcG1kX2FjdGlvbnMsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0KPiA+ICsNCj4g PiArMi4yIEludGVncmF0ZSBQTUQgYWN0aW9ucyBpbnRvIFRTUiBhY3Rpb25zIGxpc3QuDQo+ID4g Kw0KPiA+ICsyLjMgQ3JlYXRlIFRTUiBmbG93IHJ1bGUuDQo+ID4gKw0KPiA+ICsgICAgLi4gY29k ZS1ibG9jazo6IGNvbnNvbGUNCj4gPiArDQo+ID4gKyAgICAgIGZsb3cgY3JlYXRlIDxwb3J0PiBn cm91cCAwIG1hdGNoIHt0dW5uZWwgaXRlbXN9IC8gZW5kIGFjdGlvbnMgDQo+ID4gKyB7UE1EIGFj dGlvbnN9IC8ge0FwcCBhY3Rpb25zfSAvIGVuZA0KPiANCj4gQXJlIGFwcGxpY2F0aW9uIGFjdGlv bnMgc3RyaWN0bHkgcmVxdWlyZWQ/DQo+IElmIG5vLCBpdCBpcyBiZXR0ZXIgdG8gbWFrZSBpdCBj bGVhci4NCj4gRG8gdHVubmVsIGl0ZW1zIGNvcnJlbGF0ZSBoZXJlIHNvbWVob3cgd2l0aCB0dW5u ZWwgc3BlY2lmaWNhdGlvbiBpbiANCj4gJ3N0cnVjdCBydGVfZmxvd190dW5uZWwnPw0KPiBJcyBp dCBvYnRhaW5lZCB1c2luZyBydGVfZmxvd190dW5uZWxfbWF0Y2goKT8NCj4NCg0KQXBwbGljYXRp b24gYWN0aW9ucyBhcmUgbm90IHJlcXVpcmVkIGluIHN0ZWVyaW5nIHJ1bGUuDQp7dHVubmVsIGl0 ZW1zfSByZWZlciB0byBydGUgZmxvdyBpdGVtcyB0aGF0IGlkZW50aWZ5IHR1bm5lbC4gDQpUaGVz ZSBpdGVtcyBjb3JyZWxhdGUgdG8gdHVubmVsIGRlc2NyaXB0aW9uIGluIHJ0ZV9mbG93X3R1bm5l bCBzdHJ1Y3R1cmUuDQoNCj4gPiArDQo+ID4gKzMgQ3JlYXRlIFRNUiBmbG93IHJ1bGUuDQo+ID4g Kw0KPiA+ICszLjEgUXVlcnkgUE1EIGZvciBWVFAgaXRlbXMuIEFwcGxpY2F0aW9uIGNhbiBxdWVy eSBmb3IgVlRQIGl0ZW1zIA0KPiA+ICttb3JlDQo+IHRoYW4gb25jZS4NCj4gPiArDQo+ID4gKyAg ICAuLiBjb2RlLWJsb2NrOjogYw0KPiA+ICsNCj4gPiArICAgICAgaW50DQo+ID4gKyAgICAgIHJ0 ZV9mbG93X3R1bm5lbF9tYXRjaCh1aW50MTZfdCBwb3J0X2lkLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHJ0ZV9mbG93X3R1bm5lbCAqdHVubmVsLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJ0ZV9mbG93X2l0ZW0gKipwbWRfaXRlbXMs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqbnVtX29mX3BtZF9p dGVtcywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGVfZmxvd19l cnJvciAqZXJyb3IpOw0KPiA+ICsNCj4gPiArMy4yIEludGVncmF0ZSBQTUQgaXRlbXMgaW50byBU TVIgaXRlbXMgbGlzdC4NCj4gPiArDQo+ID4gKzMuMyBDcmVhdGUgVE1SIGZsb3cgcnVsZS4NCj4g PiArDQo+ID4gKyAgICAuLiBjb2RlLWJsb2NrOjogY29uc29sZQ0KPiA+ICsNCj4gPiArICAgICAg ZmxvdyBjcmVhdGUgPHBvcnQ+IGdyb3VwIDAgbWF0Y2gge1BNRCBpdGVtc30gLyB7QVBQIGl0ZW1z fSAvIA0KPiA+ICsgZW5kIGFjdGlvbnMge29mZmxvYWQgYWN0aW9uc30gLyBlbmQNCj4gPiArDQo+ ID4gK1RoZSBtb2RlbCBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb24gY2FsbCB0byByZXN0b3JlIHBh Y2tldHMgdGhhdCANCj4gPiArbWlzcyB0dW5uZWwgVE1SIHJ1bGVzIHRvIGl0cyBvcmlnaW5hbCBz dGF0ZToNCj4gPiArDQo+ID4gKy4uIGNvZGUtYmxvY2s6OiBjDQo+ID4gKw0KPiA+ICsgIGludA0K PiA+ICsgIHJ0ZV9mbG93X2dldF9yZXN0b3JlX2luZm8odWludDE2X3QgcG9ydF9pZCwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGVfbWJ1ZiAqbWJ1ZiwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGVfZmxvd19yZXN0b3JlX2luZm8g KmluZm8sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRlX2Zsb3df ZXJyb3IgKmVycm9yKTsNCj4gPiArDQo+ID4gK3J0ZV90dW5uZWwgb2JqZWN0IGZpbGxlZCBieSB0 aGUgY2FsbCBpbnNpZGUgYGBydGVfZmxvd19yZXN0b3JlX2luZm8gDQo+ID4gKyppbmZvIHBhcmFt ZXRlcmBgIGNhbiBiZSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbiB0byBjcmVhdGUgbmV3IFRNUiAN Cj4gPiArcnVsZSBmb3IgdGhhdCB0dW5uZWwuDQo+IA0KPiBJIHRoaW5rIGFuIGV4YW1wbGUsIGZv ciBleGFtcGxlLCBmb3IgVlhMQU4gb3ZlciBJUHY0IHR1bm5lbCBjYXNlIHdpdGggDQo+IHNvbWUg Y29uY3JldGUgcGFyYW1ldGVycyB3b3VsZCBiZSB2ZXJ5IHVzZWZ1bCBoZXJlIGZvciB1bmRlcnN0 YW5kaW5nLg0KPiBDb3VsZCBpdCBiZSBhbm5vdGF0ZWQgd2l0aCBhIGRlc2NyaXB0aW9uIG9mIHRo ZSB0cmFuc2Zvcm1hdGlvbnMgDQo+IGhhcHBlbmluZyB3aXRoIGEgcGFja2V0IG9uIGRpZmZlcmVu dCBzdGFnZXMgb2YgdGhlIHByb2Nlc3NpbmcgKGluY2x1ZGluZyByZXN0b3JlIGV4YW1wbGUpLg0K Pg0KDQpWWExBTiBDb2RlIGV4YW1wbGU6DQpBc3N1bWUgYXBwbGljYXRpb24gbmVlZHMgdG8gZG8g aW5uZXIgTkFUIG9uIFZYTEFOIHBhY2tldC4NClRoZSBmaXJzdCAgcnVsZSBpbiBncm91cCAwOg0K DQpmbG93IGNyZWF0ZSA8cG9ydCBpZD4gaW5ncmVzcyBncm91cCAwIHBhdHRlcm4gZXRoIC8gaXB2 NCAvIHVkcCBkc3QgaXMgNDc4OSAvIHZ4bGFuIC8gZW5kDQogICAgICAgICBhY3Rpb25zIHtwbWQg YWN0aW9uc30gLyBqdW1wIGdyb3VwIDMgLyBlbmQNCg0KRmlyc3QgVlhMQU4gcGFja2V0IHRoYXQg YXJyaXZlcyBtYXRjaGVzIHRoZSBydWxlIGluIGdyb3VwIDAgYW5kIGp1bXBzIHRvIGdyb3VwIDMN CkluIGdyb3VwIDMgdGhlIHBhY2tldCB3aWxsIG1pc3Mgc2luY2UgdGhlcmUgaXMgbm8gZmxvdyB0 byBtYXRjaCBhbmQgd2lsbCBiZSB1cGxvYWRlZA0KdG8gYXBwbGljYXRpb24uDQpBcHBsaWNhdGlv biAgd2lsbCBjYWxsIHJ0ZV9mbG93X2dldF9yZXN0b3JlX2luZm8oKSB0byBnZXQgdGhlIHBhY2tl dCBvdXRlciBoZWFkZXIuDQpBcHBsaWNhdGlvbiB3aWxsIGluc2VydCBhIG5ldyBydWxlIGluIGdy b3VwIDMgdG8gbWF0Y2ggb3V0ZXIgYW5kIGlubmVyIGhlYWRlcnM6DQoNCmZsb3cgY3JlYXRlIDxw b3J0IGlkPiBpbmdyZXNzIGdyb3VwIDMgcGF0dGVybiB7cG1kIGl0ZW1zfSAvICBldGggLyBpcHY0 IGRzdCBpcyAxNzIuMTAuMTAuMSAvIHVkcCBkc3QgNDc4OSAvIHZ4bGFuIHZuaSBpcyAxMCAvDQog ICAgICAgIGlwdjQgZHN0IGlzIDE4NC4xLjIuMyAvIGVuZA0KICAgICAgICAgYWN0aW9ucyAgc2V0 X2lwdjRfZHN0ICAxODYuMS4xLjEgLyBxdWV1ZSBpbmRleCAzIC8gZW5kDQoNClJlc3VsdGluZyBv ZiBydWxlcyB3aWxsIGJlIHRoYXQgVlhMQU4gcGFja2V0IHdpdGggdm5pPTEwLCBvdXRlciBJUHY0 IGRzdCA9MTcyLjEwLjEwLjEgYW5kIGlubmVyIElQdjQgZHN0PTE4NC4xLjIuMw0Kd2lsbCBiZSBy ZWNlaXZlZCBkZWNhcGVkIG9uIHF1ZXVlIDMgd2l0aCBJUHY0IGRzdD0xODYuMS4xLjENCg0KTm90 ZTogUGFja2V0IGluIGdyb3VwIDMgaXMgY29uc2lkZXJlZCBkZWNhcGVkLiBBbGwgYWN0aW9ucyBp biB0aGF0IGdyb3VwIHdpbGwgYmUgZG9uZSBvbg0KaGVhZGVyIHRoYXQgd2FzIGlubmVyIGJlZm9y ZSBkZWNhcC4gQXBwbGljYXRpb24gbWF5IHNwZWNpZnkgb3V0ZXIgaGVhZGVyIHRvIGJlIG1hdGNo ZWQgb24uIA0KSXQncyBQTUQgcmVzcG9uc2liaWxpdHkgdG8gdHJhbnNsYXRlIHRoZXNlIGl0ZW1z IHRvIG91dGVyIG1ldGFkYXRhLiANCiANCkFQSSB1c2FnZToNCi8qKg0KICogMS4gSW5pdGlhdGUg UlRFIGZsb3cgdHVubmVsIG9iamVjdA0KICovDQpzdHJ1Y3QgcnRlX2Zsb3dfdHVubmVsIHR1bm5l bCA9IHsNCiAgLnR5cGUgPSBSVEVfRkxPV19JVEVNX1RZUEVfVlhMQU4sDQogIC50dW5faW5mbyA9 IHsNCiAgICAudHVuX2lkID0gcnRlX2NwdV90b19iZV82NCgxMCksDQogIH0NCn0NCg0KLyoqDQog KiAyLiBPYnRhaW4gUE1EIHR1bm5lbCBhY3Rpb25zDQogKg0KICogcG1kX2FjdGlvbnMgaXMgYW4g aW50ZXJtZWRpYXRlIHZhcmlhYmxlIGFwcGxpY2F0aW9uIHVzZXMgdG8NCiAqIGNvbXBpbGUgYWN0 aW9ucyBhcnJheQ0KICovDQpzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uICoqcG1kX2FjdGlvbnM7DQpy dGVfZmxvd190dW5uZWxfZGVjYXBfYW5kX3NldCgmdHVubmVsLCAmcG1kX2FjdGlvbnMsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmbnVtX3BtZF9hY3Rpb25zLCAmZXJyb3IpOw0KDQov KioNCiAqIDMuIG9mZmxvYWQgdGhlIGZpcnN0ICBydWxlDQogKiBtYXRjaGluZyBvbiBWWExBTiB0 cmFmZmljIGFuZCBqdW1wcyB0byBncm91cCAzDQogKiAoaW1wbGljaXRseSBkZWNhcHMgcGFja2V0 KQ0KICovIAkJCQkJCQkgIA0KYXBwX2FjdGlvbnMgID0gICBqdW1wIGdyb3VwIDMNCnJ1bGVfaXRl bXMgPSBhcHBfaXRlbXM7ICAvKiBldGggLyBpcHY0IC8gdWRwIC8gdnhsYW4gICovDQpydWxlX2Fj dGlvbnMgPSB7IHBtZF9hY3Rpb25zLCBhcHBfYWN0aW9ucyB9Ow0KYXR0ci5ncm91cCA9IDA7DQpm bG93XzEgPSBydGVfZmxvd19jcmVhdGUocG9ydF9pZCwgJmF0dHIsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGVfaXRlbXMsIHJ1bGVfYWN0aW9ucywg JmVycm9yKTsNCi8qKg0KICAqIDQuIGFmdGVyIGZsb3cgY3JlYXRpb24gYXBwbGljYXRpb24gZG9l cyBub3QgbmVlZCB0byBrZWVwIHR1bm5lbA0KICAqIGFjdGlvbiByZXNvdXJjZXMuDQogICovDQpy dGVfZmxvd190dW5uZWxfYWN0aW9uX3JlbGVhc2UocG9ydF9pZCwgcG1kX2FjdGlvbnMsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu dW1fcG1kX2FjdGlvbnMpOw0KCQkJCQkJCSAgIA0KLyoqDQogICogNS4gQWZ0ZXIgcGFydGlhbGx5 IG9mZmxvYWRlZCBwYWNrZXQgbWlzcyBiZWNhdXNlIHRoZXJlIHdhcyBubw0KICAqIG1hdGNoaW5n IHJ1bGUgaGFuZGxlIG1pc3Mgb24gZ3JvdXAgMw0KICAqLw0Kc3RydWN0IHJ0ZV9mbG93X3Jlc3Rv cmVfaW5mbyBpbmZvOw0KcnRlX2Zsb3dfZ2V0X3Jlc3RvcmVfaW5mbyhwb3J0X2lkLCBtYnVmLCAm aW5mbywgJmVycm9yKTsNCg0KLyoqDQogKiA2LiBPZmZsb2FkIE5BVCBydWxlOg0KICovDQphcHBf aXRlbXMgPSBldGggLyBpcHY0IGRzdCBpcyAxNzIuMTAuMTAuMSAvIHVkcCBkc3QgNDc4OSAvIHZ4 bGFuIHZuaSBpcyAxMCAvIGlwdjQgZHN0IGlzIDE4NC4xLjIuMw0KYXBwX2FjdGlvbnMgPSBzZXRf aXB2NF9kc3QgIDE4Ni4xLjEuMSAvIHF1ZXVlIGluZGV4IDMNCg0KcnRlX2Zsb3dfdHVubmVsX21h dGNoKCZpbmZvLnR1bm5lbCwgJnBtZF9pdGVtcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJm51bV9wbWRfaXRlbXMsICAmZXJyb3IpOyANCnJ1bGVfaXRlbXMg PSB7cG1kX2l0ZW1zLCBhcHBfaXRlbXN9OyANCnJ1bGVfYWN0aW9ucyA9IGFwcF9hY3Rpb25zOyAN CmF0dHIuZ3JvdXAgPSBpbmZvLmdyb3VwX2lkOw0KZmxvd18yID0gcnRlX2Zsb3dfY3JlYXRlKHBv cnRfaWQsICZhdHRyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBydWxlX2l0ZW1zLCBydWxlX2FjdGlvbnMsICZlcnJvcik7CQkJCQkJCQ0KLyoqDQogKiA3 LiBSZWxlYXNlIFBNRCBpdGVtcyBhZnRlciBydWxlIGNyZWF0aW9uICANCiAqLw0KcnRlX2Zsb3df dHVubmVsX2l0ZW1fcmVsZWFzZShwb3J0X2lkLCBwbWRfaXRlbXMsIG51bV9wbWRfaXRlbXMpOw0K DQo+ID4gKw0KPiA+ICtUaGUgbW9kZWwgcmVxdWlyZW1lbnRzOg0KPiA+ICsNCj4gPiArU29mdHdh cmUgYXBwbGljYXRpb24gbXVzdCBpbml0aWFsaXplIHJ0ZV90dW5uZWwgb2JqZWN0IHdpdGggdHVu bmVsIA0KPiA+ICtwYXJhbWV0ZXJzIGJlZm9yZSBjYWxsaW5nDQo+ID4gK3J0ZV9mbG93X3R1bm5l bF9kZWNhcF9zZXQoKSAmIHJ0ZV9mbG93X3R1bm5lbF9tYXRjaCgpLg0KPiA+ICsNCj4gPiArUE1E IGFjdGlvbnMgYXJyYXkgb2J0YWluZWQgaW4gcnRlX2Zsb3dfdHVubmVsX2RlY2FwX3NldCgpIG11 c3QgYmUgDQo+ID4gK3JlbGVhc2VkIGJ5IGFwcGxpY2F0aW9uIHdpdGggcnRlX2Zsb3dfYWN0aW9u X3JlbGVhc2UoKSBjYWxsLg0KPiA+ICtBcHBsaWNhdGlvbiBjYW4gcmVsZWFzZSB0aGUgYWN0aW9u c2Z0ZXIgVFNSIHJ1bGUgd2FzIGNyZWF0ZWQuDQo+IA0KPiBhY3Rpb25zZnRlciA/DQo+IA0KDQpU eXBvLiBPcmlnaW5hbCB0ZXh0IHdhcw0KIkFwcGxpY2F0aW9uIGNhbiByZWxlYXNlIHRoZSBhY3Rp b25zIGFmdGVyIFRTUiBydWxlIHdhcyBjcmVhdGVkLiINCg0KPiA+ICsNCj4gPiArUE1EIGl0ZW1z IGFycmF5IG9idGFpbmVkIHdpdGggcnRlX2Zsb3dfdHVubmVsX21hdGNoKCkgbXVzdCBiZSANCj4g PiArcmVsZWFzZWQgYnkgYXBwbGljYXRpb24gd2l0aCBydGVfZmxvd19pdGVtX3JlbGVhc2UoKSBj YWxsLg0KPiA+ICtBcHBsaWNhdGlvbiBjYW4gcmVsZWFzZSB0aGUgaXRlbXMgYWZ0ZXIgcnVsZSB3 YXMgY3JlYXRlZC4gSG93ZXZlciwgDQo+ID4gK2lmIHRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0byBj cmVhdGUgYWRkaXRpb25hbCBUTVIgcnVsZSBmb3IgdGhlIHNhbWUgDQo+ID4gK3R1bm5lbCBpdCB3 aWxsIG5lZWQgdG8gb2J0YWluIFBNRCBpdGVtcyBhZ2Fpbi4NCj4gPiArDQo+ID4gK0FwcGxpY2F0 aW9uIGNhbm5vdCBkZXN0cm95IHJ0ZV90dW5uZWwgb2JqZWN0IGJlZm9yZSBpdCByZWxlYXNlcyBh bGwgDQo+ID4gK1BNRCBhY3Rpb25zICYgUE1EIGl0ZW1zIHJlZmVyZW5jaW5nIHRoYXQgdHVubmVs Lg0KPiA+ICsNCj4gPiAgQ2F2ZWF0cw0KPiA+ICAtLS0tLS0tDQo+ID4NCj4gDQo+IFtzbmlwXQ0K PiANCj4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2Zsb3cuaCANCj4gPiBi L2xpYi9saWJydGVfZXRoZGV2L3J0ZV9mbG93LmggaW5kZXggYjBlNDE5OTE5Mi4uMTM3NGI2ZTVh NyAxMDA2NDQNCj4gPiAtLS0gYS9saWIvbGlicnRlX2V0aGRldi9ydGVfZmxvdy5oDQo+ID4gKysr IGIvbGliL2xpYnJ0ZV9ldGhkZXYvcnRlX2Zsb3cuaA0KPiA+IEBAIC0zMzI0LDYgKzMzMjQsMjAy IEBAIGludA0KPiA+ICBydGVfZmxvd19nZXRfYWdlZF9mbG93cyh1aW50MTZfdCBwb3J0X2lkLCB2 b2lkICoqY29udGV4dHMsDQo+ID4gIAkJCXVpbnQzMl90IG5iX2NvbnRleHRzLCBzdHJ1Y3QgcnRl X2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gPg0KPiA+ICsvKiBUdW5uZWwgaW5mb3JtYXRpb24uICov DQo+ID4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ICtzdHJ1Y3QgcnRlX2Zsb3dfaXBfdHVubmVs X2tleSB7DQo+ID4gKwlydGVfYmU2NF90IHR1bl9pZDsgLyoqPCBUdW5uZWwgaWRlbnRpZmljYXRp b24uICovDQo+IA0KPiBXaGF0IGlzIGl0PyBXaHkgaXMgaXQgYmlnLWVuZGlhbj8gV2h5IGlzIGl0 IGluIElQIHR1bm5lbCBrZXk/DQo+IEkuZS4gd2h5IGlzIGl0IG5vdCBpbiBhIGdlbmVyaWMgc3Ry dWN0dXJlPw0KPg0KDQp0dW5faWQgaXMgdHVubmVsIGlkZW50aWZpY2F0aW9uIGtleSwgdm5pIHZh bHVlIGluIFZYTEFOIGNhc2UuDQpJJ2xsIGNoYW5nZSBpdCB0byBDUFUgb3JkZXIuIA0KQWxzbywg SSB3aWxsIG1lcmdlIHR1bm5lbF9rZXkgc3RydWN0dXJlIGludG8gcnRlX3R1bm5lbCBpbiBuZXh0 IHZlcnNpb24uDQoNCj4gPiArCXVuaW9uIHsNCj4gPiArCQlzdHJ1Y3Qgew0KPiA+ICsJCQlydGVf YmUzMl90IHNyY19hZGRyOyAvKio8IElQdjQgc291cmNlIGFkZHJlc3MuICovDQo+ID4gKwkJCXJ0 ZV9iZTMyX3QgZHN0X2FkZHI7IC8qKjwgSVB2NCBkZXN0aW5hdGlvbiBhZGRyZXNzLg0KPiAqLw0K PiA+ICsJCX0gaXB2NDsNCj4gPiArCQlzdHJ1Y3Qgew0KPiA+ICsJCQl1aW50OF90IHNyY19hZGRy WzE2XTsgLyoqPCBJUHY2IHNvdXJjZSBhZGRyZXNzLiAqLw0KPiA+ICsJCQl1aW50OF90IGRzdF9h ZGRyWzE2XTsgLyoqPCBJUHY2IGRlc3RpbmF0aW9uIGFkZHJlc3MuDQo+ICovDQo+ID4gKwkJfSBp cHY2Ow0KPiA+ICsJfSB1Ow0KPiA+ICsJYm9vbCAgICAgICBpc19pcHY2OyAvKio8IFRydWUgZm9y IHZhbGlkIElQdjYgZmllbGRzLiBPdGhlcndpc2UgSVB2NC4gKi8NCj4gPiArCXJ0ZV9iZTE2X3Qg dHVuX2ZsYWdzOyAvKio8IFR1bm5lbCBmbGFncy4gKi8NCj4gDQo+IFdoaWNoIGZsYWdzPyBXaGVy ZSBhcmUgdGhlc2UgZmxhZ3MgZGVmaW5lZD8NCj4gV2h5IGlzIGl0IGJpZy1lbmRpYW4/DQo+IA0K DQpUdW5uZWwgZmxhZ3MgdmFsdWUsIGFzIGl0IGFwcGVhcmVkIGluIGluY29taW5nIHBhY2tldC4N ClNpbmNlIHRoaXMgc3RydWN0dXJlIG1heSBiZSB1c2VkIGZvciBkaWZmZXJlbnQgdHVubmVsIHR5 cGVzLA0KZXhhY3QgZGVmaW5pdGlvbnMgYXJlIGRpZmZlcmVudCBpbiBlYWNoIHR5cGUuDQpJJ2xs IGNoYW5nZSBpcyB0byBDUFUgb3JkZXIuDQoNCj4gPiArCXVpbnQ4X3QgICAgdG9zOyAvKio8IFRP UyBmb3IgSVB2NCwgVEMgZm9yIElQdjYuICovDQo+ID4gKwl1aW50OF90ICAgIHR0bDsgLyoqPCBU VEwgZm9yIElQdjQsIEhMIGZvciBJUHY2LiAqLw0KPiANCj4gSWYgY29tYmluZSwgSSdkIHN0aWNr IHRvIElQdjYgdGVybWlub2xvZ3kgc2luY2UgaXQgaXMgYSBiaXQgYmV0dGVyIA0KPiAod2VsbC10 aG91Z2h0LCBlc3BlY2lhbGx5IGN1cnJlbnQgdGVuZGVuY2llcyBpbiAocmUpbmFtaW5nIGluIHNv ZnR3YXJlKS4NCj4gDQo+ID4gKwlydGVfYmUzMl90IGxhYmVsOyAvKio8IEZsb3cgTGFiZWwgZm9y IElQdjYuICovDQo+IA0KPiBXaGF0IGFib3V0IElQdjYgdHVubmVscyB3aXRoIGV4dGVuc2lvbiBo ZWFkZXJzPyBIb3cgdG8gZXh0ZW5kPw0KPiANCg0KVGhlc2UgdHVubmVscyBhcmUgbm90IHN1cHBv cnRlZCBhdCB0aGlzIHBvaW50Lg0KU3RydWN0dXJlIGNhbiBiZSBleHBlbmRlZCBpbiBmdXR1cmUu DQoNCj4gPiArCXJ0ZV9iZTE2X3QgdHBfc3JjOyAvKio8IFR1bm5lbCBwb3J0IHNvdXJjZS4gKi8N Cj4gPiArCXJ0ZV9iZTE2X3QgdHBfZHN0OyAvKio8IFR1bm5lbCBwb3J0IGRlc3RpbmF0aW9uLiAq Lw0KPiANCj4gV2hhdCBhYm91dCBJUC1pbi1JUCB0dW5uZWxzPyBJcyBpdCBhcHBsaWNhYmxlPw0K PiANCg0KTm8gc3VwcG9ydCBmb3IgSVAtaW4tSVAgdHVubmVscyBpbiBjdXJyZW50IHZlcnNpb24u DQpGdXR1cmUgcmVsZWFzZXMgY2FuIGhhdmUgdGhhdCBmZWF0dXJlLCBiYXNlZCBvbiByZXF1ZXN0 Lg0KDQo+ID4gK307DQo+ID4gKw0KPiA+ICsNCj4gPiArLyogVHVubmVsIGhhcyBhIHR5cGUgYW5k IHRoZSBrZXkgaW5mb3JtYXRpb24uICovIF9fcnRlX2V4cGVyaW1lbnRhbCANCj4gPiArc3RydWN0 IHJ0ZV9mbG93X3R1bm5lbCB7DQo+ID4gKwkvKioNCj4gPiArCSAqIFR1bm5lbCB0eXBlLCBmb3Ig ZXhhbXBsZSBSVEVfRkxPV19JVEVNX1RZUEVfVlhMQU4sDQo+ID4gKwkgKiBSVEVfRkxPV19JVEVN X1RZUEVfTlZHUkUgZXRjLg0KPiA+ICsJICovDQo+ID4gKwllbnVtIHJ0ZV9mbG93X2l0ZW1fdHlw ZQkJdHlwZTsNCj4gPiArCXN0cnVjdCBydGVfZmxvd19pcF90dW5uZWxfa2V5CXR1bl9pbmZvOyAv Kio8IFR1bm5lbCBrZXkgaW5mby4gKi8NCj4gDQo+IEhvdyB0byBleHRlbmRlZCBmb3Igbm9uLUlQ IHR1bm5lbHM/IE1QTFM/DQo+IE9yIHR1bm5lbHMgd2l0aCBtb3JlIHByb3RvY29scz8gRS5nLiBN UExTLW92ZXItVURQPw0KPg0KDQpSZWdhcmRpbmcgZXh0ZW5zaW9ucyB0byBuZXcgdHVubmVscw0K QmFzaWNhbGx5IHRoaXMgc3RydWN0dXJlIGlzIGEgc29mdHdhcmUgcmVwcmVzZW50b3IuIEVhY2gg dHVubmVsIGZvcm1hdCBjYW4gYWRkIGl0cyBvd24NCmZpZWxkcy4gSW4gdGhlIGN1cnJlbnQgaW1w bGVtZW50YXRpb24gd2UgdGFyZ2V0IFZYTEFOIHR1bm5lbCB0eXBlLg0KQWRkaXRpb25hbCB0dW5u ZWwgdHlwZXMgY2FuIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUgcGVyIGRlbWFuZCB3aXRoIGFkZGl0 aW9uIG9mIHJlbGV2YW50IG1lbWJlcnMgdG8gDQpiYXNlIHN0cnVjdHVyZS4NCiANCj4gPiArfTsN Cj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgKiBJbmRpY2F0ZSB0aGF0IHRoZSBwYWNrZXQgaGFzIGEg dHVubmVsLg0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBSVEVfRkxPV19SRVNUT1JFX0lORk9fVFVO TkVMICAoMVVMTCA8PCAwKQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIEluZGljYXRlIHRoYXQg dGhlIHBhY2tldCBoYXMgYSBub24gZGVjYXBzdWxhdGVkIHR1bm5lbCBoZWFkZXIuDQo+ID4gKyAq Lw0KPiA+ICsjZGVmaW5lIFJURV9GTE9XX1JFU1RPUkVfSU5GT19FTkNBUFNVTEFURUQgICgxVUxM IDw8IDEpDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogSW5kaWNhdGUgdGhhdCB0aGUgcGFja2V0 IGhhcyBhIGdyb3VwX2lkLg0KPiA+ICsgKi8NCj4gPiArI2RlZmluZSBSVEVfRkxPV19SRVNUT1JF X0lORk9fR1JPVVBfSUQgICgxVUxMIDw8IDIpDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogUmVz dG9yZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgdG8gY29tbXVuaWNhdGUgdGhlIGN1cnJlbnQgcGFj a2V0IA0KPiA+ICtwcm9jZXNzaW5nDQo+ID4gKyAqIHN0YXRlIHdoZW4gc29tZSBvZiB0aGUgcHJv Y2Vzc2luZyBwaXBlbGluZSBpcyBkb25lIGluIGhhcmR3YXJlIA0KPiA+ICthbmQgc2hvdWxkDQo+ ID4gKyAqIGNvbnRpbnVlIGluIHNvZnR3YXJlLg0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJp bWVudGFsDQo+ID4gK3N0cnVjdCBydGVfZmxvd19yZXN0b3JlX2luZm8gew0KPiA+ICsJLyoqDQo+ ID4gKwkgKiBCaXR3aXNlIGZsYWdzIChSVEVfRkxPV19SRVNUT1JFX0lORk9fKikgdG8gaW5kaWNh dGUgdmFsaWRhdGlvbg0KPiBvZg0KPiA+ICsJICogb3RoZXIgZmllbGRzIGluIHN0cnVjdCBydGVf Zmxvd19yZXN0b3JlX2luZm8uDQo+ID4gKwkgKi8NCj4gPiArCXVpbnQ2NF90IGZsYWdzOw0KPiA+ ICsJdWludDMyX3QgZ3JvdXBfaWQ7IC8qKjwgR3JvdXAgSUQuICovDQo+IA0KPiBXaGF0IGlzIHRo ZSBncm91cCBJRCBoZXJlPw0KPg0KDQpGbG93IGdyb3VwIElEIHdoZXJlIHBhcnRpYWxseSBvZmZs b2FkZWQgcGFja2VkIG1pc3NlZC4NCiANCj4gPiArCXN0cnVjdCBydGVfZmxvd190dW5uZWwgdHVu bmVsOyAvKio8IFR1bm5lbCBpbmZvcm1hdGlvbi4gKi8gfTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgKiBBbGxvY2F0ZSBhbiBhcnJheSBvZiBhY3Rpb25zIHRvIGJlIHVzZWQgaW4gcnRlX2Zsb3df Y3JlYXRlLCB0byANCj4gPiAraW1wbGVtZW50DQo+ID4gKyAqIHR1bm5lbC1kZWNhcC1zZXQgZm9y IHRoZSBnaXZlbiB0dW5uZWwuDQo+ID4gKyAqIFNhbXBsZSB1c2FnZToNCj4gPiArICogICBhY3Rp b25zIHZ4bGFuX2RlY2FwIC8gdHVubmVsLWRlY2FwLXNldCh0dW5uZWwgcHJvcGVydGllcykgLw0K PiA+ICsgKiAgICAgICAgICAgIGp1bXAgZ3JvdXAgMCAvIGVuZA0KPiANCj4gV2h5IGlzIGp1bXAg dG8gZ3JvdXAgdXNlZCBpbiBleGFtcGxlIGFib3ZlPyBJcyBpdCBtYW5kYXRvcnk/DQo+DQoNCkpV TVAgYWN0aW9uIGlzIG5vdCBzdHJpY3RseSByZXF1aXJlZC4gIEFwcGxpY2F0aW9uIG1heSB1c2Ug YW55IHRlcm1pbmF0aW5nIGFjdGlvbi4NClRoZSBtb3N0IGNvbW1vbiBjYXNlIGhvd2V2ZXIgaXMg IGp1bXAuDQoNCj4gPiArICoNCj4gPiArICogQHBhcmFtIHBvcnRfaWQNCj4gPiArICogICBQb3J0 IGlkZW50aWZpZXIgb2YgRXRoZXJuZXQgZGV2aWNlLg0KPiA+ICsgKiBAcGFyYW1baW5dIHR1bm5l bA0KPiA+ICsgKiAgIFR1bm5lbCBwcm9wZXJ0aWVzLg0KPiA+ICsgKiBAcGFyYW1bb3V0XSBhY3Rp b25zDQo+ID4gKyAqICAgQXJyYXkgb2YgYWN0aW9ucyB0byBiZSBhbGxvY2F0ZWQgYnkgdGhlIFBN RC4gVGhpcyBhcnJheSBzaG91bGQgYmUNCj4gPiArICogICBjb25jYXRlbmF0ZWQgd2l0aCB0aGUg YWN0aW9ucyBhcnJheSBwcm92aWRlZCB0byBydGVfZmxvd19jcmVhdGUuDQo+IA0KPiBQbGVhc2Us IHNwZWNpZnkgY29uY2F0ZW5hdGlvbiBvcmRlciBleHBsaWNpdGx5Lg0KPiANCg0KUE1EIGFjdGlv bnMgcHJlY2VkZSBhcHBsaWNhdGlvbiBhY3Rpb25zLg0KSSdsbCB1cGRhdGUgdGhhdCBzcGVjIGlu IG5leHQgdmVyc2lvbi4NCg0KPiA+ICsgKiBAcGFyYW1bb3V0XSBudW1fb2ZfYWN0aW9ucw0KPiA+ ICsgKiAgIE51bWJlciBvZiBhY3Rpb25zIGFsbG9jYXRlZC4NCj4gPiArICogQHBhcmFtW291dF0g ZXJyb3INCj4gPiArICogICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBO VUxMLiBQTURzIGluaXRpYWxpemUgdGhpcw0KPiA+ICsgKiAgIHN0cnVjdHVyZSBpbiBjYXNlIG9m IGVycm9yIG9ubHkuDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAwIG9uIHN1 Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMg c2V0Lg0KPiA+ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK2ludA0KPiA+ICty dGVfZmxvd190dW5uZWxfZGVjYXBfc2V0KHVpbnQxNl90IHBvcnRfaWQsDQo+ID4gKwkJCSAgc3Ry dWN0IHJ0ZV9mbG93X3R1bm5lbCAqdHVubmVsLA0KPiA+ICsJCQkgIHN0cnVjdCBydGVfZmxvd19h Y3Rpb24gKiphY3Rpb25zLA0KPiA+ICsJCQkgIHVpbnQzMl90ICpudW1fb2ZfYWN0aW9ucywNCj4g DQo+IFdoeSBkb2VzIGFwcHJvYWNoIHRvIHNwZWNpZnkgYWN0aW9ucyBkaWZmZXIgaGVyZT8NCj4g SS5lLiBhcnJheSBvZiBzcGVjaWZpZWQgc2l6ZSB2cyBFTkQtdGVybWluYXRlZCBhcnJheT8NCj4g TXVzdCB0aGUgYWN0aW9ucyBhcnJheSBiZSBFTkQtdGVybWluYXRlZCBoZXJlPw0KPiBJdCBtdXN0 IGJlIGEgc3Ryb25nIHJlYXNvbiB0byBkbyBpdCBhbmQgaXQgc2hvdWxkIGJlIGV4cGxhaW5lZC4N Cj4gDQoNClBNRCBhY3Rpb25zIHJldHVybmVkIGluIHJ0ZV9mbG93X3R1bm5lbF9kZWNhcF9zZXQo KSBjb25jYXRlbmF0ZWQgd2l0aCBhcHBsaWNhdGlvbiBhY3Rpb25zLiANCkFjdGlvbnMgYXJyYXkg cHJvZHVjZWQgYnkgY29uY2F0ZW5hdGlvbiBpcyBwYXNzZWQgdG8gcnRlX2Zsb3dfY3JlYXRlKCkg YW5kIG11c3QgYmUgRU5EIHRlcm1pbmF0ZWQuDQpQTUQgYWN0aW9ucyBhcnJheSBpcyBpbnRlcm1l ZGlhdGUgcGFyYW1ldGVyIGFuZCBkb2VzIG5vdCByZXF1aXJlIEVORCB0ZXJtaW5hdGlvbi4NCg0K PiA+ICsJCQkgIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpOw0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAqIEFsbG9jYXRlIGFuIGFycmF5IG9mIGl0ZW1zIHRvIGJlIHVzZWQgaW4gcnRlX2Zs b3dfY3JlYXRlLCB0byANCj4gPiAraW1wbGVtZW50DQo+ID4gKyAqIHR1bm5lbC1tYXRjaCBmb3Ig dGhlIGdpdmVuIHR1bm5lbC4NCj4gPiArICogU2FtcGxlIHVzYWdlOg0KPiA+ICsgKiAgIHBhdHRl cm4gdHVubmVsLW1hdGNoKHR1bm5lbCBwcm9wZXJ0aWVzKSAvIG91dGVyLWhlYWRlci1tYXRjaGVz IC8NCj4gPiArICogICAgICAgICAgIGlubmVyLWhlYWRlci1tYXRjaGVzIC8gZW5kDQo+ID4gKyAq DQo+ID4gKyAqIEBwYXJhbSBwb3J0X2lkDQo+ID4gKyAqICAgUG9ydCBpZGVudGlmaWVyIG9mIEV0 aGVybmV0IGRldmljZS4NCj4gPiArICogQHBhcmFtW2luXSB0dW5uZWwNCj4gPiArICogICBUdW5u ZWwgcHJvcGVydGllcy4NCj4gPiArICogQHBhcmFtW291dF0gaXRlbXMNCj4gPiArICogICBBcnJh eSBvZiBpdGVtcyB0byBiZSBhbGxvY2F0ZWQgYnkgdGhlIFBNRC4gVGhpcyBhcnJheSBzaG91bGQg YmUNCj4gPiArICogICBjb25jYXRlbmF0ZWQgd2l0aCB0aGUgaXRlbXMgYXJyYXkgcHJvdmlkZWQg dG8gcnRlX2Zsb3dfY3JlYXRlLg0KPiANCj4gQ29uY2F0ZW5hdGlvbiBvcmRlci9ydWxlcyBzaG91 bGQgYmUgZGVzY3JpYmVkLg0KPiBTaW5jZSBpdCBpcyBhbiBvdXRwdXQgd2hpY2ggZW50aXR5IGRv ZXMgdGhlIGNvbmNhdGVuYXRpb24uDQo+IElzIGl0IGFsbG93ZWQgdG8gcmVmaW5lIFBNRCBydWxl cyBpbiBhcHBsaWNhdGlvbiBydWxlIHNwZWNpZmljYXRpb24/DQo+IA0KDQpQTUQgaXRlbXMgcHJl Y2VkZSBhcHBsaWNhdGlvbiBpdGVtcy4NCkknbGwgdXBkYXRlIHRoaXMgc2VjdGlvbiB0b28uDQpJ J20gbm90IHN1cmUgYWJvdXQgdGhlIGxhc3QgcXVlc3Rpb24gYWJvdXQgcnVsZXMgcmVmaW5lLiBQ bGVhc2UgZWxhYm9yYXRlLg0KDQo+ID4gKyAqIEBwYXJhbVtvdXRdIG51bV9vZl9pdGVtcw0KPiA+ ICsgKiAgIE51bWJlciBvZiBpdGVtcyBhbGxvY2F0ZWQuDQo+ID4gKyAqIEBwYXJhbVtvdXRdIGVy cm9yDQo+ID4gKyAqICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVM TC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4gPiArICogICBzdHJ1Y3R1cmUgaW4gY2FzZSBvZiBl cnJvciBvbmx5Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dXJuDQo+ID4gKyAqICAgMCBvbiBzdWNj ZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNl dC4NCj4gPiArICovDQo+ID4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiA+ICtpbnQNCj4gPiArcnRl X2Zsb3dfdHVubmVsX21hdGNoKHVpbnQxNl90IHBvcnRfaWQsDQo+ID4gKwkJICAgICAgc3RydWN0 IHJ0ZV9mbG93X3R1bm5lbCAqdHVubmVsLA0KPiA+ICsJCSAgICAgIHN0cnVjdCBydGVfZmxvd19p dGVtICoqaXRlbXMsDQo+ID4gKwkJICAgICAgdWludDMyX3QgKm51bV9vZl9pdGVtcywNCj4gDQo+ IFNhbWUgYXMgYWJvdmUgZm9yIGFjdGlvbnMuDQo+IA0KDQpQTUQgaXRlbXMgcmV0dXJuZWQgaW4g cnRlX2Zsb3dfdHVubmVsX21hdGNoICgpIGNvbmNhdGVuYXRlZCB3aXRoIGFwcGxpY2F0aW9uIGl0 ZW1zLg0KSXRlbXMgYXJyYXkgcHJvZHVjZWQgYnkgY29uY2F0ZW5hdGlvbiBpcyBwYXNzZWQgdG8g cnRlX2Zsb3dfY3JlYXRlKCkgYW5kIG11c3QgYmUgRU5EIHRlcm1pbmF0ZWQuIA0KUE1EIGl0ZW1z IGFycmF5IGlzIGludGVybWVkaWF0ZSBwYXJhbWV0ZXIgYW5kIGRvZXMgbm90IHJlcXVpcmUgRU5E IHRlcm1pbmF0aW9uLg0KDQo+ID4gKwkJICAgICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJv cik7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogUG9wdWxhdGUgdGhlIGN1cnJlbnQgcGFja2V0 IHByb2Nlc3Npbmcgc3RhdGUsIGlmIGV4aXN0cywgZm9yIHRoZSANCj4gPiArZ2l2ZW4NCj4gbWJ1 Zi4NCj4gPiArICoNCj4gPiArICogQHBhcmFtIHBvcnRfaWQNCj4gPiArICogICBQb3J0IGlkZW50 aWZpZXIgb2YgRXRoZXJuZXQgZGV2aWNlLg0KPiA+ICsgKiBAcGFyYW1baW5dIG0NCj4gPiArICog ICBNYnVmIHN0cnVjdC4NCj4gPiArICogQHBhcmFtW291dF0gaW5mbw0KPiA+ICsgKiAgIFJlc3Rv cmUgaW5mb3JtYXRpb24uIFVwb24gc3VjY2VzcyBjb250YWlucyB0aGUgSFcgc3RhdGUuDQo+ID4g KyAqIEBwYXJhbVtvdXRdIGVycm9yDQo+ID4gKyAqICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJl cG9ydGluZyBpZiBub3QgTlVMTC4gUE1EcyBpbml0aWFsaXplIHRoaXMNCj4gPiArICogICBzdHJ1 Y3R1cmUgaW4gY2FzZSBvZiBlcnJvciBvbmx5Lg0KPiA+ICsgKg0KPiA+ICsgKiBAcmV0dXJuDQo+ ID4gKyAqICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlIG90aGVyd2lzZSBh bmQgcnRlX2Vycm5vIGlzIHNldC4NCj4gPiArICovDQo+ID4gK19fcnRlX2V4cGVyaW1lbnRhbA0K PiA+ICtpbnQNCj4gPiArcnRlX2Zsb3dfdHVubmVsX2dldF9yZXN0b3JlX2luZm8odWludDE2X3Qg cG9ydF9pZCwNCj4gPiArCQkJCSBzdHJ1Y3QgcnRlX21idWYgKm0sDQo+ID4gKwkJCQkgc3RydWN0 IHJ0ZV9mbG93X3Jlc3RvcmVfaW5mbyAqaW5mbywNCj4gDQo+IElzIGl0IHN1Z2dlc3RpbmcgdG8g bWFrZSBhIGNvcHkgb2YgdGhlIHJlc3RvcmUgaW5mbyBmb3IgZWFjaCBtYnVmPyBJdCANCj4gc291 bmRzIHZlcnkgZXhwZW5zaXZlLiBDb3VsZCB5b3Ugc2hhcmUgeW91ciB0aG91Z2h0cyBhYm91dCBp dC4NCj4gDQoNClJlc3RvcmUgaW5mbyBtYXkgYmUgZGlmZmVyZW50IGZvciBlYWNoIHBhY2tldC4g Rm9yIGV4YW1wbGUsDQppZiBhcHBsaWNhdGlvbiBkZWNsYXJlZCB0dW5uZWwgaW5mbyB3aXRoIHR1 bm5lbCB0eXBlIG9ubHksDQpyZXN0b3JlIGluZm8gd2lsbCBoYXZlIG91dGVyIGhlYWRlciBkYXRh IGFzIHdlbGwuDQoNCj4gPiArCQkJCSBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgKiBSZWxlYXNlIHRoZSBhY3Rpb24gYXJyYXkgYXMgYWxsb2Nh dGVkIGJ5IHJ0ZV9mbG93X3R1bm5lbF9kZWNhcF9zZXQuDQo+ID4gKyAqDQo+ID4gKyAqIEBwYXJh bSBwb3J0X2lkDQo+ID4gKyAqICAgUG9ydCBpZGVudGlmaWVyIG9mIEV0aGVybmV0IGRldmljZS4N Cj4gPiArICogQHBhcmFtW2luXSBhY3Rpb25zDQo+ID4gKyAqICAgQXJyYXkgb2YgYWN0aW9ucyB0 byBiZSByZWxlYXNlZC4NCj4gPiArICogQHBhcmFtW2luXSBudW1fb2ZfYWN0aW9ucw0KPiA+ICsg KiAgIE51bWJlciBvZiBlbGVtZW50cyBpbiBhY3Rpb25zIGFycmF5Lg0KPiA+ICsgKiBAcGFyYW1b b3V0XSBlcnJvcg0KPiA+ICsgKiAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYg bm90IE5VTEwuIFBNRHMgaW5pdGlhbGl6ZSB0aGlzDQo+ID4gKyAqICAgc3RydWN0dXJlIGluIGNh c2Ugb2YgZXJyb3Igb25seS4NCj4gPiArICoNCj4gPiArICogQHJldHVybg0KPiA+ICsgKiAgIDAg b24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJu byBpcyBzZXQuDQo+ID4gKyAqLw0KPiA+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4gPiAraW50DQo+ ID4gK3J0ZV9mbG93X3R1bm5lbF9hY3Rpb25fZGVjYXBfcmVsZWFzZSh1aW50MTZfdCBwb3J0X2lk LA0KPiA+ICsJCQkJICAgICBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uICphY3Rpb25zLA0KPiA+ICsJ CQkJICAgICB1aW50MzJfdCBudW1fb2ZfYWN0aW9ucywNCj4gDQo+IFNhbWUgcXVlc3Rpb24gYXMg YWJvdmUgZm9yIGFjdGlvbnMgYW5kIGl0ZW1zIHNwZWNpZmljYXRpb24gYXBwcm9hY2guDQo+IA0K DQpQTUQgaXRlbXMgYW5kIGFjdGlvbnMgYXJlIGludGVybWVkaWF0ZSBwYXJhbWV0ZXJzIHVzZWQg YnkgYXBwbGljYXRpb24NCnRvIGNyZWF0ZSBhcmd1bWVudHMgZm9yIHJ0ZV9mbG93X2NyZWF0ZSgp IGNhbGwuDQoNCj4gPiArCQkJCSAgICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcik7DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICogUmVsZWFzZSB0aGUgaXRlbSBhcnJheSBhcyBhbGxvY2F0 ZWQgYnkgcnRlX2Zsb3dfdHVubmVsX21hdGNoLg0KPiA+ICsgKg0KPiA+ICsgKiBAcGFyYW0gcG9y dF9pZA0KPiA+ICsgKiAgIFBvcnQgaWRlbnRpZmllciBvZiBFdGhlcm5ldCBkZXZpY2UuDQo+ID4g KyAqIEBwYXJhbVtpbl0gaXRlbXMNCj4gPiArICogICBBcnJheSBvZiBpdGVtcyB0byBiZSByZWxl YXNlZC4NCj4gPiArICogQHBhcmFtW2luXSBudW1fb2ZfaXRlbXMNCj4gPiArICogICBOdW1iZXIg b2YgZWxlbWVudHMgaW4gaXRlbSBhcnJheS4NCj4gPiArICogQHBhcmFtW291dF0gZXJyb3INCj4g PiArICogICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxMLiBQTURz IGluaXRpYWxpemUgdGhpcw0KPiA+ICsgKiAgIHN0cnVjdHVyZSBpbiBjYXNlIG9mIGVycm9yIG9u bHkuDQo+ID4gKyAqDQo+ID4gKyAqIEByZXR1cm4NCj4gPiArICogICAwIG9uIHN1Y2Nlc3MsIGEg bmVnYXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0Lg0KPiA+ ICsgKi8NCj4gPiArX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gK2ludA0KPiA+ICtydGVfZmxvd190 dW5uZWxfaXRlbV9yZWxlYXNlKHVpbnQxNl90IHBvcnRfaWQsDQo+ID4gKwkJCSAgICAgc3RydWN0 IHJ0ZV9mbG93X2l0ZW0gKml0ZW1zLA0KPiA+ICsJCQkgICAgIHVpbnQzMl90IG51bV9vZl9pdGVt cywNCj4gDQo+IFNhbWUgcXVlc3Rpb24gYXMgYWJvdmUgZm9yIGFjdGlvbnMgYW5kIGl0ZW1zIHNw ZWNpZmljYXRpb24gYXBwcm9hY2guDQo+IA0KDQpQTUQgaXRlbXMgYW5kIGFjdGlvbnMgYXJlIGlu dGVybWVkaWF0ZSBwYXJhbWV0ZXJzIHVzZWQgYnkgYXBwbGljYXRpb24NCnRvIGNyZWF0ZSBhcmd1 bWVudHMgZm9yIHJ0ZV9mbG93X2NyZWF0ZSgpIGNhbGwuDQoNCj4gPiArCQkJICAgICBzdHJ1Y3Qg cnRlX2Zsb3dfZXJyb3IgKmVycm9yKTsNCj4gPiAgI2lmZGVmIF9fY3BsdXNwbHVzDQo+ID4gIH0N Cj4gPiAgI2VuZGlmDQo+IA0KPiBbc25pcF0NCj4gDQo+IEFuZHJldy4NCj4gDQo+IChSaWdodCBu b3cgaXQgaXMgaGFyZCB0byBmdWxseSBpbWFnaW5lIGhvdyB0byBkZWFsIHdpdGggaXQuDQo+IEFu ZCBpdCBsb29rcyBsaWtlIGEgc2hpbSB0byB2ZW5kb3Itc3BlY2lmaWMgQVBJLiBNYXkgYmUgSSdt IHdyb25nLiANCj4gSG9wZWZ1bGx5IHRoZSBuZXh0IHZlcnNpb24gd2lsbCBoYXZlIFBNRCBpbXBs ZW1lbnRhdGlvbiBleGFtcGxlIGFuZCBpdCANCj4gd2lsbCBzaGVkIGEgYml0IG1vcmUgbGlnaHQg b24gaXQuKQ0KDQpUaGUgbWFpbiBpZGVhIG9mIHRoaXMgQVBJIGlzIHRvIGhpZGUgdGhlIGludGVy bmFsIGxvZ2ljIGFuZCBiZXN0IHByYWN0aWNlcyBvZiBzcGVjaWZpYyB2ZW5kb3JzLg0KRm9yIGV4 YW1wbGUsIG9uZSB2ZW5kb3IgbWF5IHVzZSBpbnRlcm5hbCByZWdpc3RlcnMgdG8gc2F2ZSBvdXRl ciBoZWFkZXIgd2hpbGUgb3RoZXIgdmVuZG9yDQp3aWxsICBvbmx5IGRlY2FwIHBhY2tldCBhdCB0 aGUgZmluYWwgc3RhZ2UuDQoNCkkgaG9wZSB0aGF0IGV4YW1wbGVzIGFib3ZlIGdpdmUgeW91IGJl dHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBBUEkuDQoNClBNRCBpbXBsZW1lbnRhdGlvbiBpcyBp biBwcm9ncmVzcy4NCkhvd2V2ZXIsIHdlIGFyZSBpbiBjb250YWN0IHdpdGggb3RoZXIgdmVuZG9y cyB0aGF0IGFsc28gaW50ZXJlc3RlZCBpbXBsZW1lbnRpbmcgdGhpcyBBUEkuDQpTaW5jZSB3ZSBk b24ndCB3YW50IHRvIGJsb2NrIHRoZWlyIHByb2dyZXNzIGl0J3MgaW1wb3J0YW50IHRvIHJlYWNo IGNvbmNsdXNpb24gb24gZ2VuZXJhbCBBUEkgcGFydHMuDQpJbiBhbnkgY2FzZSwgSSdsbCBiZSBt b3JlIHRoYW4gaGFwcHkgdG8gZ2V0IHlvdXIgcmV2aWV3IG9uIFBNRC4NCg0K