From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CBDE3C43381 for ; Wed, 27 Feb 2019 19:17:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 758D32186A for ; Wed, 27 Feb 2019 19:17:40 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=Mellanox.com header.i=@Mellanox.com header.b="iAiW0jzr" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729782AbfB0TRj (ORCPT ); Wed, 27 Feb 2019 14:17:39 -0500 Received: from mail-eopbgr80079.outbound.protection.outlook.com ([40.107.8.79]:49170 "EHLO EUR04-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726397AbfB0TRj (ORCPT ); Wed, 27 Feb 2019 14:17:39 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DVQqYy3Vo4HRZuP9xcJ52Q/IF+IY+QBklP/nBDxeGgo=; b=iAiW0jzrQFO8JzAdy3Pvej2c5BhTgs+WBK4i93WHn7lJYZKEx9EFpudwjYJiDwAemCvJBYzrjz/OgHE4cADfbP9ruM1uE9aodjnRufopzLW2k6SvZ4RlaiaV75X3ZfF6ZmI6Q/HKcqR/5pStkMz8xr9mqhSGjpwfHP3iOuGxNro= Received: from AM6PR05MB5879.eurprd05.prod.outlook.com (20.179.0.76) by AM6PR05MB6567.eurprd05.prod.outlook.com (20.179.6.215) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1643.15; Wed, 27 Feb 2019 19:17:15 +0000 Received: from AM6PR05MB5879.eurprd05.prod.outlook.com ([fe80::9944:556b:9569:9b53]) by AM6PR05MB5879.eurprd05.prod.outlook.com ([fe80::9944:556b:9569:9b53%3]) with mapi id 15.20.1665.015; Wed, 27 Feb 2019 19:17:14 +0000 From: Maxim Mikityanskiy To: =?utf-8?B?QmrDtnJuIFTDtnBlbA==?= , John Fastabend CC: "netdev@vger.kernel.org" , =?utf-8?B?QmrDtnJuIFTDtnBlbA==?= , Magnus Karlsson , "David S. Miller" , Tariq Toukan , Saeed Mahameed , Eran Ben Elisha Subject: RE: AF_XDP design flaws Thread-Topic: AF_XDP design flaws Thread-Index: AdTN4YAOICnun2ZQR0OvVwAOQ6l7UgAEJkyAACBjmoAADR6TQA== Date: Wed, 27 Feb 2019 19:17:11 +0000 Deferred-Delivery: Wed, 27 Feb 2019 19:16:22 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=maximmi@mellanox.com; x-originating-ip: [2001:470:b62f:9e51:bd5e:cf98:b66b:1312] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 07c13b00-6d04-4fc8-f7d1-08d69ce82ebb x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600127)(711020)(4605104)(4618075)(2017052603328)(7153060)(7193020);SRVR:AM6PR05MB6567; x-ms-traffictypediagnostic: AM6PR05MB6567: x-microsoft-exchange-diagnostics: =?utf-8?B?MTtBTTZQUjA1TUI2NTY3OzIzOlBsdm1qcXorczBGaHcxOXBTbzdQUi8wT1pR?= =?utf-8?B?Y0xDV2JoaWNQbmJFVWJDUTUzOTRkMkh6cWozYlEzSFBEUlkrNVdpZGZPR0Ry?= =?utf-8?B?TFJpRy9hSDRQTWhWVkVhVTRFOEQ1RHpEUTRLWDF0UUVGbTVRQ0Y5aFQyTWFp?= =?utf-8?B?WWlNcElQSlNVN3RFK0YybG1xMW1zN2FPQzljaGRnMU5TUmErcUdwcjVyOHlP?= =?utf-8?B?SU1nWXJvTDVScWVkNVlnbjZOSzE1M3ZnNnFPS09LT0NLQ1dFcVQ3QUxvcldZ?= =?utf-8?B?Mm1yVmM1M0txMnlnRTE3ZGM0RlRtMGMzQjBtWVI5QllNcHdNaE9ZejA0RFZT?= =?utf-8?B?VzNtRTVXa1kwSnJ6UW8zUDRhQjRNT2h4a004L3dvUFhscmJjUG1OaTdhYXRx?= =?utf-8?B?akxYdHVwRENqVngrWk05RUZCSU5kendSank4OFNlNGEvelI1Q3NVQTdtbVlI?= =?utf-8?B?aEFHdFlXYitNYnFMY3pwcVo0UzZiNjN4Q2kzd3JpT1o4SE51MXRmQXBaWEM3?= =?utf-8?B?NG00S1M0ajRZbTlBd2J1NjZ5SUZVZithNlJSN0ZHeFVVZ2ZTVXd0ajc5c2dQ?= =?utf-8?B?TjdUck5kTGJjUWxFMTFXMVBWejU4S1pZTFVTUGJSL2RERXRVaXRUUjNyQW1u?= =?utf-8?B?d0J5RFRjTUwxOTd2bGk1MDJvMlBBMjRYU01nL0NqYTlSeXdRNDgxZlNvWWM0?= =?utf-8?B?d3dFMmJjSHBnbmZPWVVuWXBXMWNoVVd5aWV5T0x6U0lmanNkcHk3OXlUMG1o?= =?utf-8?B?MXlsLzQ0N2oxV2JGNHFLMHNIVkN1QUk2SVIyZy9QWGlaNWFSaTVNL3J6WXN4?= =?utf-8?B?U2xKeW5zYXk3QzlOWVEvaWNzdHd5MWo1TjdaTS90am1ycE9hOGpGRkFDbXds?= =?utf-8?B?K3loVmdOSjByNHlzeUVzVDczRGpPVkhWUjhPay8vMW5DTDNpZ3JyYlBDU0FH?= =?utf-8?B?aGswc0Zkb3Bxb1VtajZpL0hnc3VKdTVXME5ndEdoa0o1ZmlJVitXUEZMWlVV?= =?utf-8?B?YlFaU293KzJidXhzcjdjWXNIS2ZPby9ubzVPRTNPcWs5MldCZTYzRmREeEdF?= =?utf-8?B?dXZVZHoxMDZWdnBqNGpudFFyYXk0aHltZWIrazdCckFtYnBnSTJSUktmaTE3?= =?utf-8?B?VmtQWEJFbjIrMTJPb3dOZWJLMCtZUEJzRUwrNEhqNFpSNm5jOXRlVFhJWWJ6?= =?utf-8?B?V3N6Qk9NNDByeWtJRkhCakpkVnJQVHV0bEZqWFVjMHQ0MlhSeWpYZU00WkFw?= =?utf-8?B?aGQwaU5HcHU5bUVpam1aREw0L1VvVEt2UnZubmVBZ050ZWVMN3FjQVNvQjVi?= =?utf-8?B?Y2hvWjRRYjRFY2NmU2J5VVgyYlhHTDlEenY2YWswYmdZSm9GRjJUbnF1UlU0?= =?utf-8?B?dGhtQkJ5bXRENmU4eGxITjY3V3FEdSszc1Q3S0t4S0xEZE8rYy9FejQ1NTVG?= =?utf-8?B?eE9oVFMxM0dGNTBHcnQ3TEtuckNTTTZYVi9ZeU1Ycis3YkdZUFFCWFlNOW9v?= =?utf-8?B?ckNRdE9rWTduYXBkOThERkNTeVkrb1BlbmxKaFRGMGM2Z09hajNrZEZ5dWZM?= =?utf-8?B?OHo0eHF5WEp2SWU4UTVsZnR5dWZJaTFhOGY0UXAvQVFUaWkyMHROeDI3YjFi?= =?utf-8?B?aEtoWm5XbDhCWm5UMnVoNEk4L25DSnV5UFdwcWV1K0hlYnNkVjBpV2lCTTk3?= =?utf-8?B?L2dyRDBZdENodDFkZTNYZDRHRHlLaXNERnBNQUt2RGVKaXBCUTF6UHpDckV6?= =?utf-8?B?SjVHTzRPOHBydGlqWWEvb2JLQUtNczRQSzU5RTJFVnlZT2xOcGE4aVFBV2ZJ?= =?utf-8?B?N1N2MlRYR0ZlVmN3MWdDMmxkV3dvN3BGRGFFcWtRQVErVllHR3N3c3gweHI0?= =?utf-8?Q?w65eiYcSA8Q=3D?= x-microsoft-antispam-prvs: x-forefront-prvs: 0961DF5286 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(39860400002)(396003)(376002)(346002)(136003)(13464003)(199004)(189003)(53754006)(14454004)(7116003)(6246003)(25786009)(486006)(6436002)(74316002)(6116002)(476003)(68736007)(478600001)(53936002)(52536013)(105586002)(53946003)(316002)(5660300002)(7736002)(4326008)(86362001)(2906002)(305945005)(110136005)(54906003)(107886003)(256004)(71200400001)(446003)(99286004)(81166006)(6666004)(7696005)(8676002)(14444005)(81156014)(46003)(53546011)(6506007)(8936002)(186003)(11346002)(229853002)(55016002)(33656002)(106356001)(30864003)(66574012)(102836004)(9686003)(97736004)(71190400001)(76176011);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR05MB6567;H:AM6PR05MB5879.eurprd05.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: oAF5JCN1ywftH4dnVZnciyyE1a5o7X08HDJ02FzBQpRuqzna30Q4lPUTav51u6PLMIl09Lbz+aI5FXztj0KeS6JF2bIH/h9c6PxEwWmtFwXwyjdlLjfq9XQ2TL5FvUzyofXSK0oxYHTRbwmgwFQBCXkm/RH1rFbUNbjRB/3LepyDK+1Uo8yxBD1tR0kaBy3gQf9H4pCSo1v1tRD4pHaDtWZyNFwC9xR2LjAWEPU22vY0nXjOMxyF14Jfiw7JJ0BvoHlY98aQ3U2S1h+zXfLr1XG/HM6ttwmv5UBDJ1HkMEVeJgS8PovroxujyDq0+k/E+zKno/cu90Zv+IbquQc3AvoRzF021kRGYS/90eX/U3pO58dEFL79/BGdLq2SOmzRWoDnrizsuZnBEJZP6UWLDZlVbxu8cgjFKimmoS6Pwhk= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 07c13b00-6d04-4fc8-f7d1-08d69ce82ebb X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Feb 2019 19:17:14.8239 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR05MB6567 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBCasO2cm4gVMO2cGVsIDxiam9y bi50b3BlbEBnbWFpbC5jb20+DQo+IFNlbnQ6IDI3IEZlYnJ1YXJ5LCAyMDE5IDEwOjA5DQo+IFRv OiBKb2huIEZhc3RhYmVuZCA8am9obi5mYXN0YWJlbmRAZ21haWwuY29tPg0KPiBDYzogTWF4aW0g TWlraXR5YW5za2l5IDxtYXhpbW1pQG1lbGxhbm94LmNvbT47IG5ldGRldkB2Z2VyLmtlcm5lbC5v cmc7IEJqw7Zybg0KPiBUw7ZwZWwgPGJqb3JuLnRvcGVsQGludGVsLmNvbT47IE1hZ251cyBLYXJs c3NvbiA8bWFnbnVzLmthcmxzc29uQGludGVsLmNvbT47DQo+IERhdmlkIFMuIE1pbGxlciA8ZGF2 ZW1AZGF2ZW1sb2Z0Lm5ldD47IFRhcmlxIFRvdWthbiA8dGFyaXF0QG1lbGxhbm94LmNvbT47DQo+ IFNhZWVkIE1haGFtZWVkIDxzYWVlZG1AbWVsbGFub3guY29tPjsgRXJhbiBCZW4gRWxpc2hhIDxl cmFuYmVAbWVsbGFub3guY29tPg0KPiBTdWJqZWN0OiBSZTogQUZfWERQIGRlc2lnbiBmbGF3cw0K PiANCj4gT24gMjAxOS0wMi0yNiAxNzo0MSwgSm9obiBGYXN0YWJlbmQgd3JvdGU6DQo+ID4gT24g Mi8yNi8xOSA2OjQ5IEFNLCBNYXhpbSBNaWtpdHlhbnNraXkgd3JvdGU6DQo+ID4+IEhpIGV2ZXJ5 b25lLA0KPiA+Pg0KPiANCj4gSGkhIEl0J3MgZXhjaXRpbmcgdG8gc2VlIG1vcmUgdmVuZG9ycyBs b29raW5nIGludG8gQUZfWERQLiBBUk0gd2FzDQo+IGludm9sdmVkIGVhcmx5IG9uLCBhbmQgbm93 IE1lbGxhbm94LiA6LSkgSXQncyByZWFsbHkgaW1wb3J0YW50IHRoYXQNCj4gdGhlIEFGX1hEUCBt b2RlbCBpcyBhIGdvb2QgZml0IGZvciBhbGwgZHJpdmVycy92ZW5kb3JzISBUaGFua3MgZm9yDQo+ IGxvb2tpbmcgaW50byB0aGlzLg0KPiANCj4gPj4gSSB3b3VsZCBsaWtlIHRvIGRpc2N1c3Mgc29t ZSBkZXNpZ24gZmxhd3Mgb2YgQUZfWERQIHNvY2tldCAoWFNLKQ0KPiBpbXBsZW1lbnRhdGlvbg0K PiA+PiBpbiBrZXJuZWwuIEF0IHRoZSBtb21lbnQgSSBkb24ndCBzZWUgYSB3YXkgdG8gd29yayBh cm91bmQgdGhlbSB3aXRob3V0DQo+IGNoYW5naW5nDQo+ID4+IHRoZSBBUEksIHNvIEkgd291bGQg bGlrZSB0byBtYWtlIHN1cmUgdGhhdCBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgYW5kDQo+IHRv DQo+ID4+IHN1Z2dlc3QgYW5kIGRpc2N1c3Mgc29tZSBwb3NzaWJsZSBpbXByb3ZlbWVudHMgdGhh dCBjYW4gYmUgbWFkZS4NCj4gPj4NCj4gPj4gVGhlIGlzc3VlcyBJIGRlc2NyaWJlIGJlbG93IGFy ZSBjYXVzZWQgYnkgdGhlIGZhY3QgdGhhdCB0aGUgZHJpdmVyDQo+IGRlcGVuZHMgb24NCj4gPj4g dGhlIGFwcGxpY2F0aW9uIGRvaW5nIHNvbWUgdGhpbmdzLCBhbmQgaWYgdGhlIGFwcGxpY2F0aW9u IGlzDQo+ID4+IHNsb3cvYnVnZ3kvbWFsaWNpb3VzLCB0aGUgZHJpdmVyIGlzIGZvcmNlZCB0byBi dXN5IHBvbGwgYmVjYXVzZSBvZiB0aGUNCj4gbGFjayBvZiBhDQo+ID4+IG5vdGlmaWNhdGlvbiBt ZWNoYW5pc20gZnJvbSB0aGUgYXBwbGljYXRpb24gc2lkZS4gSSB3aWxsIHJlZmVyIHRvIHRoZQ0K PiBpNDBlDQo+ID4+IGRyaXZlciBpbXBsZW1lbnRhdGlvbiBhIGxvdCwgYXMgaXQgaXMgdGhlIGZp cnN0IGltcGxlbWVudGF0aW9uIG9mIEFGX1hEUCwNCj4gYnV0DQo+ID4+IHRoZSBpc3N1ZXMgYXJl IGdlbmVyYWwgYW5kIGFmZmVjdCBhbnkgZHJpdmVyLiBJIGFscmVhZHkgY29uc2lkZXJlZCB0cnlp bmcNCj4gdG8gZml4DQo+ID4+IGl0IG9uIGRyaXZlciBsZXZlbCwgYnV0IGl0IGRvZXNuJ3Qgc2Vl bSBwb3NzaWJsZSwgc28gaXQgbG9va3MgbGlrZSB0aGUNCj4gYmVoYXZpb3INCj4gPj4gYW5kIGlt cGxlbWVudGF0aW9uIG9mIEFGX1hEUCBpbiB0aGUga2VybmVsIGhhcyB0byBiZSBjaGFuZ2VkLg0K PiA+Pg0KPiA+PiBSWCBzaWRlIGJ1c3kgcG9sbGluZw0KPiA+PiA9PT09PT09PT09PT09PT09PT09 PQ0KPiA+Pg0KPiA+PiBPbiB0aGUgUlggc2lkZSwgdGhlIGRyaXZlciBleHBlY3RzIHRoZSBhcHBs aWNhdGlvbiB0byBwdXQgc29tZQ0KPiBkZXNjcmlwdG9ycyBpbg0KPiA+PiB0aGUgRmlsbCBSaW5n LiBUaGVyZSBpcyBubyB3YXkgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBub3RpZnkgdGhlIGRyaXZl cg0KPiB0aGF0DQo+ID4+IHRoZXJlIGFyZSBtb3JlIEZpbGwgUmluZyBkZXNjcmlwdG9ycyB0byB0 YWtlLCBzbyB0aGUgZHJpdmVyIGlzIGZvcmNlZCB0bw0KPiBidXN5DQo+ID4+IHBvbGwgdGhlIEZp bGwgUmluZyBpZiBpdCBnZXRzIGVtcHR5LiBFLmcuLCB0aGUgaTQwZSBkcml2ZXIgZG9lcyBpdCBp bg0KPiBOQVBJIHBvbGw6DQo+ID4+DQo+ID4+IGludCBpNDBlX2NsZWFuX3J4X2lycV96YyhzdHJ1 Y3QgaTQwZV9yaW5nICpyeF9yaW5nLCBpbnQgYnVkZ2V0KQ0KPiA+PiB7DQo+ID4+IC4uLg0KPiA+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHVyZSA9IGZhaWx1cmUgfHwNCj4gPj4NCj4g IWk0MGVfYWxsb2NfcnhfYnVmZmVyc19mYXN0X3pjKHJ4X3JpbmcsDQo+ID4+DQo+IGNsZWFuZWRf Y291bnQpOw0KPiA+PiAuLi4NCj4gPj4gICAgICAgICAgcmV0dXJuIGZhaWx1cmUgPyBidWRnZXQg OiAoaW50KXRvdGFsX3J4X3BhY2tldHM7DQo+ID4+IH0NCj4gPj4NCj4gPj4gQmFzaWNhbGx5LCBp dCBtZWFucyB0aGF0IGlmIHRoZXJlIGFyZSBubyBkZXNjcmlwdG9ycyBpbiB0aGUgRmlsbCBSaW5n LA0KPiBOQVBJIHdpbGwNCj4gPj4gbmV2ZXIgc3RvcCwgZHJhaW5pbmcgQ1BVLg0KPiA+Pg0KPiA+ PiBQb3NzaWJsZSBjYXNlcyB3aGVuIGl0IGhhcHBlbnMNCj4gPj4gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tDQo+ID4+DQo+ID4+IDEuIFRoZSBhcHBsaWNhdGlvbiBpcyBzbG93LCBpdCBy ZWNlaXZlZCBzb21lIGZyYW1lcyBpbiB0aGUgUlggUmluZywgYW5kDQo+IGl0IGlzDQo+ID4+IHN0 aWxsIGhhbmRsaW5nIHRoZSBkYXRhLCBzbyBpdCBoYXMgbm8gZnJlZSBmcmFtZXMgdG8gcHV0IHRv IHRoZSBGaWxsDQo+IFJpbmcuDQo+ID4+DQo+ID4+IDIuIFRoZSBhcHBsaWNhdGlvbiBpcyBtYWxp Y2lvdXMsIGl0IG9wZW5zIGFuIFhTSyBhbmQgcHV0cyBubyBmcmFtZXMgdG8NCj4gdGhlIEZpbGwN Cj4gPj4gUmluZy4gSXQgY2FuIGJlIHVzZWQgYXMgYSBsb2NhbCBEb1MgYXR0YWNrLg0KPiA+Pg0K PiA+PiAzLiBUaGUgYXBwbGljYXRpb24gaXMgYnVnZ3kgYW5kIHN0b3BzIGZpbGxpbmcgdGhlIEZp bGwgUmluZyBmb3Igd2hhdGV2ZXINCj4gcmVhc29uDQo+ID4+IChkZWFkbG9jaywgd2FpdGluZyBm b3IgYW5vdGhlciBibG9ja2luZyBvcGVyYXRpb24sIG90aGVyIGJ1Z3MpLg0KPiA+Pg0KPiA+PiBB bHRob3VnaCBsb2FkaW5nIGFuIFhEUCBwcm9ncmFtIHJlcXVpcmVzIHJvb3QgYWNjZXNzLCB0aGUg RG9TIGF0dGFjayBjYW4NCj4gYmUNCj4gPj4gdGFyZ2V0ZWQgdG8gc2V0dXBzIHRoYXQgYWxyZWFk eSB1c2UgWERQLCBpLmUuIGFuIFhEUCBwcm9ncmFtIGlzIGFscmVhZHkNCj4gbG9hZGVkLg0KPiA+ PiBFdmVuIHVuZGVyIHJvb3QsIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCBiZSBh YmxlIHRvIGRpc3J1cHQNCj4gc3lzdGVtDQo+ID4+IHN0YWJpbGl0eSBieSBqdXN0IGNhbGxpbmcg bm9ybWFsIEFQSXMgd2l0aG91dCBhbiBpbnRlbnRpb24gdG8gZGVzdHJveSB0aGUNCj4gPj4gc3lz dGVtLCBhbmQgaGVyZSBpdCBoYXBwZW5zIGluIGNhc2UgMS4NCj4gPiBJIGJlbGlldmUgdGhpcyBp cyBieSBkZXNpZ24uIElmIHBhY2tldHMgcGVyIHNlY29uZCBpcyB5b3VyIHRvcCBwcmlvcml0eQ0K PiA+IChhdCB0aGUgZXhwZW5zZSBvZiBwb3dlciwgY3B1LCBldGMuKSB0aGlzIGlzIHRoZSBiZWhh dmlvciB5b3UgbWlnaHQNCj4gPiB3YW50LiBUbyByZXNvbHZlIHlvdXIgcG9pbnRzIGlmIHlvdSBk b24ndCB0cnVzdCB0aGUgYXBwbGljYXRpb24gaXQNCj4gPiBzaG91bGQgYmUgaXNvbGF0ZWQgdG8g YSBxdWV1ZSBwYWlyIGFuZCBjb3JlcyBzbyB0aGUgaW1wYWN0IGlzIGtub3duIGFuZA0KPiA+IG1h bmFnZWQuDQo+ID4NCj4gDQo+IENvcnJlY3QsIGFuZCBJIGFncmVlIHdpdGggSm9obiBoZXJlLiBB Rl9YRFAgaXMgYSByYXcgaW50ZXJmYWNlLCBhbmQNCj4gbmVlZHMgdG8gYmUgbWFuYWdlZC4NCg0K T0ssIHJpZ2h0LCBpZiB5b3Ugd2FudCBoaWdoIHBwcyBzYWNyaWZpY2luZyBzeXN0ZW0gc3RhYmls aXR5IGFuZA0Ka2VybmVsLXVzZXJzcGFjZSBpc29sYXRpb24sIFhTSyBpcyBhdCB5b3VyIHNlcnZp Y2UuIEl0IG1heSBiZSBhIHZhbGlkDQpwb2ludC4gSG93ZXZlciwgdGhlcmUgaXMgc3RpbGwgdGhl IGlzc3VlIG9mIHVuaW50ZW5kZWQgdXNlLg0KDQpJZiB5b3UgdXNlIFhTSywgeW91IGNhbiB0YWtl IG1lYXN1cmVzIHRvIHByZXZlbnQgdGhlIGRpc3J1cHRpb24sIGUuZy4NCnJ1biBvbmx5IHRydXN0 ZWQgYW5kIHByb3Blcmx5IHRlc3RlZCBhcHBsaWNhdGlvbnMgb3IgaXNvbGF0ZSB0aGVtLg0KSG93 ZXZlciwgdGhlcmUgaXMgYSBjYXNlIHdoZXJlIFhTS3MgYXJlIG5vdCByZWFsbHkgdXNlZCBvbiBh IGdpdmVuDQptYWNoaW5lLCBidXQgYXJlIHN0aWxsIGF2YWlsYWJsZSAoQ09ORklHX1hEUF9TT0NL RVRTPXkpLCBvcGVuaW5nIGEgaHVnZQ0KaG9sZS4gSWYgeW91IGRvbid0IGV2ZW4ga25vdyB0aGF0 IFhTSyBleGlzdHMsIHlvdSBhcmUgc3RpbGwgdnVsbmVyYWJsZS4NCg0KPiA+IFRoYXQgc2FpZCBo YXZpbmcgYSBmbGFnIHRvIGJhY2stb2ZmIHNlZW1zIGxpa2UgYSBnb29kIGlkZWEuIEJ1dCBzaG91 bGQNCj4gPiBiZSBkb2FibGUgYXMgYSBmZWF0dXJlIHdpdGhvdXQgYnJlYWtpbmcgY3VycmVudCBB UEkuDQoNCkEgZmxhZyBjYW4gYmUgYWRkZWQsIGUuZy4sIHRvIHRoZSBzeGRwX2ZsYWdzIGZpZWxk IG9mIHN0cnVjdA0Kc29ja2FkZHJfeGRwLCB0byBzd2l0Y2ggdG8gdGhlIGJlaGF2aW9yIHdpdGhv dXQgYnVzeSBwb2xsaW5nIG9uIGVtcHR5DQpGaWxsIFJpbmcuDQoNCkhvd2V2ZXIsIEkgZG9uJ3Qg dGhpbmsgdGhlIHZ1bG5lcmFiaWxpdHkgY2FuIGJlIGVsaW1pbmF0ZWQgd2hpbGUga2VlcGluZw0K dGhlIEFQSSBpbnRhY3QuIFRvIHByb3RlY3QgdGhlIHN5c3RlbXMgdGhhdCBkb24ndCB1c2UgWFNL LCB3ZSBuZWVkIG9uZQ0Kb2YgdGhlc2UgdGhpbmdzOg0KDQotIERpc2FibGUgWFNLIHN1cHBvcnQg YnkgZGVmYXVsdCwgdW50aWwgZXhwbGljaXRseSBlbmFibGVkIGJ5IHJvb3QuDQoNCi0gRGlzYWJs ZSB0aGUgb2xkIGJlaGF2aW9yIGJ5IGRlZmF1bHQsIHVudGlsIGV4cGxpY2l0bHkgZW5hYmxlZCBi eSByb290Lg0KDQpCb3RoIG9mIHRob3NlIHRoaW5ncyB3aWxsIHJlcXVpcmUgYWRkaXRpb25hbCBz ZXR1cCBvbiBtYWNoaW5lcyB0aGF0IHVzZQ0KWFNLLCBhZnRlciB1cGdyYWRpbmcgdGhlIGtlcm5l bC4NCg0KPiA+PiBQb3NzaWJsZSB3YXkgdG8gc29sdmUgdGhlIGlzc3VlDQo+ID4+IC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPj4NCj4gPj4gV2hlbiB0aGUgZHJpdmVyIGNhbid0 IHRha2UgbmV3IEZpbGwgUmluZyBmcmFtZXMsIGl0IHNob3VsZG4ndCBidXN5IHBvbGwuDQo+ID4+ IEluc3RlYWQsIGl0IHNpZ25hbHMgdGhlIGZhaWx1cmUgdG8gdGhlIGFwcGxpY2F0aW9uIChlLmcu LCB3aXRoIFBPTExFUlIpLA0KPiBhbmQNCj4gPj4gYWZ0ZXIgdGhhdCBpdCdzIHVwIHRvIHRoZSBh cHBsaWNhdGlvbiB0byByZXN0YXJ0IHBvbGxpbmcgKGUuZy4sIGJ5DQo+IGNhbGxpbmcNCj4gPj4g c2VuZHRvKCkpIGFmdGVyIHJlZmlsbGluZyB0aGUgRmlsbCBSaW5nLiBUaGUgaXNzdWUgd2l0aCB0 aGlzIGFwcHJvYWNoIGlzDQo+IHRoYXQgaXQNCj4gPj4gY2hhbmdlcyB0aGUgQVBJLCBzbyB3ZSBl aXRoZXIgaGF2ZSB0byBkZWFsIHdpdGggaXQgb3IgdG8gaW50cm9kdWNlIHNvbWUNCj4gQVBJDQo+ ID4+IHZlcnNpb24gZmllbGQuDQo+ID4gU2VlIGFib3ZlLiBJIGxpa2UgdGhlIGlkZWEgaGVyZSB0 aG91Z2guDQo+ID4NCj4gDQo+IFRoZSB1YXBpIGRvZXNuJ3QgbWFuZGF0ZSAqaG93KiB0aGUgZHJp dmVyIHNob3VsZCBiZWhhdmUuIFRoZSByYXRpb25hbA0KPiBmb3IgdGhlIGFnZ3Jlc3NpdmUgaTQw ZSBmaWxsIHJpbmcgcG9sbGluZyAod2hlbiB0aGUgcmluZyBpcyBlbXB0eSkgaXMNCj4gdG8gbWlu aW1pemUgdGhlIGxhdGVuY3kuIFRoZSAiZmlsbCByaW5nIGlzIGVtcHR5IiBiZWhhdmlvciBtaWdo dCBiZQ0KPiBkaWZmZXJlbnQgb24gZGlmZmVyZW50IGRyaXZlcnMuDQoNCklmIHRoZSBiZWhhdmlv ciBpcyBkaWZmZXJlbnQgd2l0aCBkaWZmZXJlbnQgZHJpdmVycywgaXQgd2lsbCBiZQ0KZGlmZmlj dWx0IHRvIGNyZWF0ZSBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgcG9ydGFibGUgYWNyb3NzIE5JQ3Mu IFRoZQ0KcG9pbnQgb2YgY3JlYXRpbmcgQVBJcyBpcyB0byBwcm92aWRlIGEgc2luZ2xlIGludGVy ZmFjZSB0byBkaWZmZXJlbnQNCmltcGxlbWVudGF0aW9ucywgdGh1cyBoaWRpbmcgdGhlIGRpZmZl cmVuY2VzIGZyb20gYSBoaWdoZXIgYWJzdHJhY3Rpb24NCmxldmVsLiBXaGF0IHRoZSBkcml2ZXIg ZG9lcyBpbnRlcm5hbGx5IGlzIHVwIHRvIHRoZSBkcml2ZXIsIGJ1dCB0aGUNCnJlc3VsdCB2aXNp YmxlIGluIHRoZSB1c2Vyc3BhY2Ugc2hvdWxkIGJlIHRoZSBzYW1lLCBzbyB3ZSBjYW4ndCBqdXN0 DQptYWtlIHNvbWUgZHJpdmVycyBzdG9wIGFuZCB3YWl0IHdoZW4gdGhlIEZpbGwgUmluZyBpcyBl bXB0eSwgd2hpbGUgdGhlDQpvdGhlcnMgYnVzeSBwb2xsLiBJdCBzaG91bGQgYmUgY29udHJvbGxl ZCBieSBzb21lIGZsYWdzIGlmIHdlIHdhbnQgdG8NCnByZXNlcnZlIGJvdGggb3B0aW9ucy4NCg0K PiBJIHNlZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgYWx0ZXJuYXRpdmVzIHRvIHRoZSBjdXJyZW50 IGk0MGUgd2F5IG9mDQo+IGJ1c3ktcG9sbGluZywgYWxsIHJhbmdpbmcgZnJvbSB3YXRjaGRvZyB0 aW1lcnMgdG8gYWN0dWFsIEhXDQo+IGltcGxlbWVudGF0aW9ucyB3aGVyZSB3cml0aW5nIHRvIHRo ZSB0YWlsIHBvaW50ZXIgb2YgdGhlIGZpbGwgcmluZw0KPiBraWNrcyBhIGRvb3IgYmVsbC4NCj4g DQo+IFRoYXQgYmVpbmcgc2FpZCwgSSBhZ3JlZSB3aXRoIHByZXZpb3VzIHNwZWFrZXJzOyBCZWlu ZyBhYmxlIHRvIHNldCBhDQo+IHBvbGljeS9kcml2ZXIgYmVoYXZpb3IgZnJvbSB1c2VybGFuZCBp cyBhIGdvb2QgaWRlYS4gVGhpcyBjYW4gYmUgYWRkZWQNCj4gd2l0aG91dCBicmVha2luZyB0aGUg ZXhpc3RpbmcgbW9kZWwuDQo+IA0KPiBNYXgsIGFueSBpbnB1dCB0byB3aGF0IHRoaXMgaW50ZXJm YWNlIHNob3VsZCBsb29rIGxpa2UgZnJvbSB5b3VyDQo+IHBlcnNwZWN0aXZlPw0KDQpBcyBJIHNh aWQgYWJvdmUsIHdlIGNhbiBhZGQgYSBmbGFnIChmbGFncz8pIHRvIHN4ZHBfZmxhZ3MsIHRoYXQg d2lsbCBiZQ0KY29uc2lkZXJlZCBvbmx5IGlmICFYRFBfU0hBUkVEX1VNRU0uIEl0IHVzZXMgdGhl IGV4aXN0aW5nIGZpZWxkLCBzbyB0aGUNCmJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGNhbiBiZSBw cmVzZXJ2ZWQuIFRoZSBvbmx5IHRoaW5nIEknbSBjb25jZXJuZWQNCm9mIGlzIHRoYXQgaWYgdGhl IGN1cnJlbnQgYnVzeS1wb2xsaW5nIGJlaGF2aW9yIHN0YXlzIHRoZSBkZWZhdWx0LCBzb21lDQpy YW5kb20gbWFjaGluZXMgdGhhdCBkb24ndCBldmVuIHVzZSBYU0sgd2lsbCBzdGF5IHZ1bG5lcmFi bGUgdG8gYSBsb2NhbA0KRG9TIGF0dGFjay4NCg0KPiANCj4gPj4gVFggc2lkZSBnZXR0aW5nIHN0 dWNrDQo+ID4+ID09PT09PT09PT09PT09PT09PT09PQ0KPiA+Pg0KPiA+PiBPbiB0aGUgVFggc2lk ZSwgdGhlcmUgaXMgdGhlIENvbXBsZXRpb24gUmluZyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBoYXMg dG8NCj4gY2xlYW4uDQo+ID4+IElmIGl0IGRvZXNuJ3QsIHRoZSBpNDBlIGRyaXZlciBzdG9wcyB0 YWtpbmcgZGVzY3JpcHRvcnMgZnJvbSB0aGUgVFggUmluZy4NCj4gSWYgdGhlDQo+ID4+IGFwcGxp Y2F0aW9uIGZpbmFsbHkgY29tcGxldGVzIHNvbWV0aGluZywgdGhlIGRyaXZlciBjYW4gZ28gb24N Cj4gdHJhbnNtaXR0aW5nLg0KPiA+PiBIb3dldmVyLCBpdCB3b3VsZCByZXF1aXJlIGJ1c3kgcG9s bGluZyB0aGUgQ29tcGxldGlvbiBSaW5nIChqdXN0IGxpa2UNCj4gd2l0aCB0aGUNCj4gPj4gRmls bCBSaW5nIG9uIHRoZSBSWCBzaWRlKS4gaTQwZSBkb2Vzbid0IGRvIGl0LCBpbnN0ZWFkLCBpdCBy ZWxpZXMgb24gdGhlDQo+ID4+IGFwcGxpY2F0aW9uIHRvIGtpY2sgdGhlIFRYIGJ5IGNhbGxpbmcg c2VuZHRvKCkuIFRoZSBpc3N1ZSBpcyB0aGF0IHBvbGwoKQ0KPiBkb2Vzbid0DQo+ID4+IHJldHVy biBQT0xMT1VUIGluIHRoaXMgY2FzZSwgYmVjYXVzZSB0aGUgVFggUmluZyBpcyBmdWxsLCBzbyB0 aGUNCj4gYXBwbGljYXRpb24NCj4gPj4gd2lsbCBuZXZlciBjYWxsIHNlbmR0bygpLCBhbmQgdGhl IHJpbmcgaXMgc3R1Y2sgZm9yZXZlciAob3IgYXQgbGVhc3QNCj4gdW50aWwNCj4gPj4gc29tZXRo aW5nIHRyaWdnZXJzIE5BUEkpLg0KPiA+Pg0KPiA+PiBQb3NzaWJsZSB3YXkgdG8gc29sdmUgdGhl IGlzc3VlDQo+ID4+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPj4NCj4gPj4g V2hlbiB0aGUgZHJpdmVyIGNhbid0IHJlc2VydmUgYSBkZXNjcmlwdG9yIGluIHRoZSBDb21wbGV0 aW9uIFJpbmcsIGl0DQo+IHNob3VsZA0KPiA+PiBzaWduYWwgdGhlIGZhaWx1cmUgdG8gdGhlIGFw cGxpY2F0aW9uIChlLmcuLCB3aXRoIFBPTExFUlIpLiBUaGUNCj4gYXBwbGljYXRpb24NCj4gPj4g c2hvdWxkbid0IGNhbGwgc2VuZHRvKCkgZXZlcnkgdGltZSBpdCBzZWVzIHRoYXQgdGhlIG51bWJl ciBvZiBub3QNCj4gY29tcGxldGVkDQo+ID4+IGZyYW1lcyBpcyBncmVhdGVyIHRoYW4gemVybyAo bGlrZSB4ZHBzb2NrIHNhbXBsZSBkb2VzKS4gSW5zdGVhZCwgdGhlDQo+IGFwcGxpY2F0aW9uDQo+ ID4+IHNob3VsZCBraWNrIHRoZSBUWCBvbmx5IHdoZW4gaXQgd2FudHMgdG8gZmx1c2ggdGhlIHJp bmcsIGFuZCwgaW4NCj4gYWRkaXRpb24sIGFmdGVyDQo+ID4+IHJlc29sdmluZyB0aGUgY2F1c2Ug Zm9yIFBPTExFUlIsIGkuZS4gYWZ0ZXIgaGFuZGxpbmcgQ29tcGxldGlvbiBSaW5nDQo+IGVudHJp ZXMuDQo+ID4+IFRoZSBBUEkgd2lsbCBhbHNvIGhhdmUgdG8gY2hhbmdlIHdpdGggdGhpcyBhcHBy b2FjaC4NCj4gPj4NCj4gPiArMSBzZWVtcyB0byBtZSB0aGlzIGNhbiBiZSBkb25lIHdpdGhvdXQg YnJlYWtpbmcgZXhpc3RpbmcgQVBJIHRob3VnaC4NCj4gPg0KPiANCj4gS2VlcCBpbiBtaW5kIHRo YXQgdGhlIHhkcHNvY2sgYXBwbGljYXRpb24gaXMgc2FtcGxlL3RveSwgYW5kIHNob3VsZA0KPiBu b3QgYmUgc2VlbiBhcyB0aGUgQVBJIGRvY3VtZW50YXRpb24uDQoNClVuZm9ydHVuYXRlbHksIERv Y3VtZW50YXRpb24vbmV0d29ya2luZy9hZl94ZHAucnN0IG1pc3NlcyBhIGxvdCBvZg0KdGhpbmdz IHRoYXQgYmVjb21lIGNsZWFyIGJ5IHJlYWRpbmcgeGRwc29jaywga2VybmVsIGFuZCBpNDBlIHNv dXJjZXMuDQpTbywgY3VycmVudGx5LCB4ZHBzb2NrIGlzIHRoZSBiZXN0IHJlZmVyZW5jZSBjb2Rl IGF2YWlsYWJsZSAodW5sZXNzIHlvdQ0KY2FuIHBvaW50IG1lIHRvIHNvbWV0aGluZyBkaWZmZXJl bnQpLg0KDQo+IEkgZG9uJ3Qgc2VlIHRoYXQgdGhlIEFQSSBuZWVkIHRvIGJlIGNoYW5nZWQuIEFG X1hEUCByZXF1aXJlcyB0aGF0IHRoZQ0KPiBmaWxsIHJpbmcgaGFzIGVudHJpZXMsIGluIG9yZGVy IHRvIHJlY2VpdmUgZGF0YS4gQW5hbG9nb3VzLCB0aGUNCj4gY29tcGxldGlvbiByaW5nIG5lZWRz IHRvIG1hbmFnZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHRvIHNlbmQgZnJhbWVzLg0KDQpUaGUgZGlm ZmVyZW5jZSBpcyB0aGF0IG9uIHRoZSBSWCBzaWRlLCB0aGUgZHJpdmVyIGJ1c3kgcG9sbHMgdW50 aWwgaXQNCmdldHMgZW5vdWdoIEZpbGwgUmluZyBlbnRyaWVzLCB3aGlsZSBvbiB0aGUgVFggc2lk ZSBpdCBzdG9wcyB3aGVuIHRoZQ0KQ29tcGxldGlvbiBSaW5nIGlzIGZ1bGwuIFRoZSBhcHBsaWNh dGlvbiBkb2Vzbid0IGhhdmUgYSBjb252ZW5pZW50DQptZWNoYW5pc20gdG8gZGV0ZXJtaW5lIGl0 LiBPZiBjb3Vyc2UsIHdoZW4gaXQgdGFrZXMgZW50cmllcyBmcm9tIHRoZQ0KQ29tcGxldGlvbiBS aW5nLCBpdCBjYW4gY2hlY2sgZXZlcnkgdGltZSwgd2hldGhlciBpdCB3YXMgZnVsbCwgYW5kIGtp Y2sNCnRoZSBUWCBpbiB0aGF0IGNhc2VzLCBidXQgdGhlcmUgYXJlIHR3byBwb2ludHMgaGVyZToN Cg0KLSBXaHkgbm90IHNpZ25hbCBpdCBmcm9tIHBvbGwoKSB0byBrZWVwIGtpY2tpbmcgVFggaW4g b25lIHBsYWNlIGFuZA0Kc2ltcGxpZnkgdGhlIGFwcGxpY2F0aW9uPw0KDQotIFRoaXMgYmVoYXZp b3IgaXNuJ3QgZG9jdW1lbnRlZCBhbnl3aGVyZS4gVGhlIGRvY3VtZW50YXRpb24gc2F5cyB0aGF0 IEkNCm5lZWQgdG8gY2FsbCBzZW5kbXNnKCkgdG8gc3RhcnQgdGhlIHRyYW5mZXIuIEhvd2V2ZXIs IGxvb2tpbmcgYXQgdGhlDQpzb3VyY2UgY29kZSwgSSBmb3VuZCB0aGF0IGFjdHVhbGx5IEkgbmVl ZCB0byBjYWxsIHNlbmR0bygpIGVhY2ggdGltZSBJDQpzZWUgdGhlcmUgYXJlIG91dHN0YW5kaW5n IHBhY2tldHMsIGJlY2F1c2UgaTQwZSBjYW4gaWdub3JlIG15IHNlbmR0bygpDQppZiB0aGUgQ29t cGxldGlvbiBSaW5nIGlzIGZ1bGwuIEFuZCB0aGUgdGhpbmcgd2l0aCB0aGUgVFggZ2V0dGluZyBz dHVjaw0KaXMgbm90IGNvdmVyZWQgZXZlbiBieSB0aGUgc2FtcGxlIGNvZGUuDQoNCj4gQXJlIHlv dSBzdWdnZXN0aW5nIHRoYXQgdXNpbmcgcG9sbCgpIGV0IGFsIHNob3VsZCBiZSBtYW5kYXRvcnk/ IEFnYWluLA0KPiB0YWtlIG1lIHRocm91Z2ggeW91ciBzZW5kIHNjZW5hcmlvLCBzdGVwIGJ5IHN0 ZXAuDQoNCk5vdCBuZWNlc3NhcmlseTsgYXMgYm90aCB0aGUga2VybmVsIGFuZCB0aGUgYXBwbGlj YXRpb24gc2hhcmUgdGhlIHNhbWUNCnJpbmdzLCBpdCBkb2Vzbid0IG1hdHRlciB3aG8gb2YgdGhl bSB3aWxsIGxvb2sgYXQgdGhlIHByb2R1Y2VyL2NvbnN1bWVyDQppbmRpY2VzIGFuZCBkZWNpZGUg d2hldGhlciBpdCBjYW4gcHJvY2VlZCBUWGluZy4gVGhlIGNvbmRpdGlvbnMgdXNlZCBpbg0KeHNr X3BvbGwgY2FuIGJlIHJlcHJvZHVjZWQgaW4gdGhlIGFwcGxpY2F0aW9uIGl0c2VsZiBpZiBpdCB3 YW50cyB0bw0KZWxpbWluYXRlIHBvbGwoKS4NCg0KTXkgc2VuZCBhbGdvcml0aG06DQoNCjEuIFdh aXQgdW50aWwgcG9sbCgpIHJldHVybnMgUE9MTE9VVC4NCg0KMi4gUHV0IHRoZSBwYWNrZXRzIGlu dG8gdGhlIFVNRU0sIGFuZCB0aGUgZGVzY3JpcHRvcnMgaW50byB0aGUgVFggUmluZy4NCg0KMy4g Q2FsbCBzZW5kdG8oKSAodGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBzZW5kdG8oKSBpcyBjYWxsZWQg b25seSBhZnRlcg0KYWN0dWFsIHNlbmRpbmcsIG5vdCBldmVyeSB0aW1lIHRoZSBhcHBsaWNhdGlv biBzZWVzIG91dHN0YW5kaW5nIHBhY2tldHMsDQp0aGF0IGNhbiBhbHJlYWR5IGJlIHF1ZXVlZCBp biB0aGUgaGFyZHdhcmUpLg0KDQo0LiBJZiB0aGUgZHJpdmVyIGNhbid0IHJlc2VydmUgYSBkZXNj cmlwdG9yIGluIHRoZSBDb21wbGV0aW9uIFJpbmcsIHRoZQ0KbmV4dCBwb2xsKCkgd2lsbCByZXR1 cm4gUE9MTEVSUi4gSW4gdGhpcyBjYXNlIGl0J3MgdXAgdG8gdGhlIGFwcGxpY2F0aW9uDQp0byBj YWxsIHNlbmR0bygpIGFnYWluIGFmdGVyIGZyZWVpbmcgc29tZSBzcGFjZSBpbiB0aGUgQ29tcGxl dGlvbiBSaW5nLg0KDQpQcm9zOg0KDQoxLiBTdGlsbCBkb2Vzbid0IGZvcmNlIHRoZSBhcHBsaWNh dGlvbiB0byB1c2UgcG9sbCgpIC0gaXQganVzdCBoYXMgdG8NCm1vbml0b3IgcmluZ3MgaXRzZWxm Lg0KDQoyLiBFbGltaW5hdGVzIHVzZWxlc3Mgc2VuZHRvKClzLiBBbHRob3VnaCB4ZHBzb2NrIGlz IG9ubHkgYSBzaW1wbGUNCmV4YW1wbGUsIHdpdGggdGhlIGN1cnJlbnQgWFNLIGltcGxlbWVudGF0 aW9uIGluIHRoZSBrZXJuZWwsIEkgY3VycmVudGx5DQpzZWUgbm8gd2F5IHRvIGF2b2lkIGNhbGxp bmcgc2VuZHRvKCkgZXZlcnkgdGltZSB0aGUgYXBwbGljYXRpb24gc2Vlcw0Kc29tZSBub3QgY29t cGxldGVkIHBhY2tldHMsIGJlY2F1c2UgdGhlIGFwcGxpY2F0aW9uIGRvZXNuJ3Qga25vdyB3aGV0 aGVyDQp0aGUga2VybmVsIHRvb2sgdGhhdCBmcmFtZSBvciBub3QuIFdpdGggbXkgYXBwcm9hY2gs IHNlbmR0bygpIGNhbiBiZQ0KY2FsbGVkIG9ubHkgd2hlbiBuZWVkZWQuDQoNCjMuIHNlbmR0bygp IGFuZCBwb2xsKCkgY2FuIGJlIHBsYWNlZCBpbiBhIHNpbmdsZSBsb29wLiBXaGVuIHRoZQ0KQ29t cGxldGlvbiBSaW5nIG92ZXJmbG93cywgcG9sbCgpIHJldHVybnMgKHdpdGggUE9MTEVSUiksIHdo aWNoIGRvZXNuJ3QNCmhhcHBlbiBjdXJyZW50bHkuDQoNCjQuIEFiaWxpdHkgdG8gYmF0Y2ggbXVs dGlwbGUgcGFja2V0cyBpbiBhIHNpbmdsZSBzZW5kdG8oKS4gSWYgd2UgdHJ5IHRvDQpiYXRjaCBz ZW5kIHBhY2tldHMgbm93LCB3ZSBkb24ndCBrbm93IGhvdyBtYW55IG9mIHRoZW0gd2VyZSBjb25z dW1lZCBieQ0Ka2VybmVsLCBzbyB3ZSdsbCBiZSBmb3JjZWQgdG8gcmVwZWF0IHNlbmR0bygpIHVu dGlsIGFsbCBvZiB0aGVtIGFyZQ0KdHJhbnNtaXR0ZWQuDQoNCj4gVG8gbWUsIHRoZSB1c2VybGFu ZCBhcHBsaWNhdGlvbiBoYXMgYWxsIHRoZSBrbm9icyB0byBkZXRlcm1pbmUgd2hldGhlcg0KPiB0 aGUgVHggcmluZyBjYW4gYmUgZmx1c2hlZCBvciBub3QuDQoNClJlZ2FyZGluZyB0aGlzLCBjb25z aWRlciB0aGUgcG9pbnRzIGFib3ZlLg0KDQo+IA0KPiA+PiBUcmlnZ2VyaW5nIE5BUEkgb24gYSBk aWZmZXJlbnQgQ1BVIGNvcmUNCj4gPj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQo+ID4+DQo+ID4+IC5uZG9feHNrX2FzeW5jX3htaXQgcnVucyBvbiBhIHJhbmRvbSBD UFUgY29yZSwgc28sIHRvIHByZXNlcnZlIENQVQ0KPiBhZmZpbml0eSwNCj4gPj4gaTQwZSB0cmln Z2VycyBhbiBpbnRlcnJ1cHQgdG8gc2NoZWR1bGUgTkFQSSwgaW5zdGVhZCBvZiBjYWxsaW5nDQo+ IG5hcGlfc2NoZWR1bGUNCj4gPj4gZGlyZWN0bHkuIFNjaGVkdWxpbmcgTkFQSSBvbiB0aGUgY29y cmVjdCBDUFUgaXMgd2hhdCB3b3VsZCBldmVyeSBkcml2ZXINCj4gZG8sIEkNCj4gPj4gZ3Vlc3Ms IGJ1dCBjdXJyZW50bHkgaXQgaGFzIHRvIGJlIGltcGxlbWVudGVkIGRpZmZlcmVudGx5IGluIGV2 ZXJ5DQo+IGRyaXZlciwgYW5kDQo+ID4+IGl0IHJlbGllcyBvbiBoYXJkd2FyZSBmZWF0dXJlcyAo dGhlIGFiaWxpdHkgdG8gdHJpZ2dlciBhbiBJUlEpLg0KPiA+IElkZWFsbHkgdGhlIGFwcGxpY2F0 aW9uIHdvdWxkIGJlIHBpbm5lZCB0byBhIGNvcmUgYW5kIHRoZSB0cmFmZmljDQo+ID4gc3RlZXJl ZCB0byB0aGF0IGNvcmUgdXNpbmcgZXRodG9vbC90Yy4gWWVzIGl0IHJlcXVpcmVzIGEgYml0IG9m IG1nbXQgb24NCj4gPiB0aGUgcGxhdGZvcm0gYnV0IEkgdGhpbmsgdGhpcyBpcyBuZWVkZWQgZm9y IGJlc3QgcHBzIG51bWJlcnMuDQoNClllcywgeW91IGFyZSByaWdodC4gSG93ZXZlciwgdGhlIHNp dHVhdGlvbiB3aGVyZSAubmRvX3hza19hc3luY194bWl0IGlzDQpjYWxsZWQgb24gYSB3cm9uZyBD UFUgaXMgcG9zc2libGUsIGFuZCBpdCB3aWxsIGhhcHBlbiB1bmxlc3Mgc29tZQ0KYWRkaXRpb25h bCBzZXR1cCBpcyBkb25lLCBzbyB0aGUgZHJpdmVyIGhhcyB0byBoYW5kbGUgaXQuDQoNCj4gPj4g SSBzdWdnZXN0IGludHJvZHVjaW5nIGEga2VybmVsIEFQSSB0aGF0IHdvdWxkIGFsbG93IHRyaWdn ZXJpbmcgTkFQSSBvbiBhDQo+IGdpdmVuDQo+ID4+IENQVS4gQSBicmllZiBsb29rIHNob3dzIHRo YXQgc29tZXRoaW5nIGxpa2UNCj4gc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2FzeW5jIGNhbg0K PiA+PiBiZSB1c2VkLiBBZHZhbnRhZ2VzOg0KPiA+IEFzc3VtaW5nIHlvdSB3YW50IHRvIGF2b2lk IHBpbm5pbmcgY29yZXMvdHJhZmZpYyBmb3Igc29tZSByZWFzb24uIENvdWxkDQo+ID4gdGhpcyBi ZSBkb25lIHdpdGggc29tZSBjb21iaW5hdGlvbiBvZiBjcHVtYXAgKyBhZl94ZHA/IEkgaGF2ZW4n dCB0aG91Z2h0DQo+ID4gdG9vIG11Y2ggYWJvdXQgaXQgdGhvdWdoLiBNYXliZSBCam9ybiBoYXMg c29tZSBpZGVhcy4NCg0KTm90IHRoYXQgSSB3YW50IHRvIGF2b2lkIHBpbm5pbmcgQ1BVcy4uLiBJ bnRlbCBoYXMgYSBoYXJkd2FyZSBmZWF0dXJlDQp0aGF0IGFsbG93cyB0aGVtIHRvIHRyaWdnZXIg YW4gSVJRIG9uIHRoZSBnaXZlbiBDUFUgdG8gY2FsbCBOQVBJIG9uIHRoZQ0KcmlnaHQgQ1BVLiAo SSdtIHRhbGtpbmcgb25seSBhYm91dCB0aGUgVFggc2lkZSBoZXJlLikgVGhlIGRhdGEgdG8gYmUN CnRyYW5zbWl0dGVkIGNhbiBiZSB3cml0dGVuIHRvIHRoZSBVTUVNIGZyb20gdGhlIHJpZ2h0IENQ VSwgYnV0IHNlbmR0bygpDQpjYW4gYmUgY2FsbGVkIGZyb20gYW55LCBhbmQgaXQgd2lsbCB3b3Jr IGZvciBpNDBlLiBNZWxsYW5veCBoYXJkd2FyZQ0KZG9lc24ndCBoYXZlIHRoaXMgZmVhdHVyZSwg YWx0aG91Z2ggSSBjYW4gZG8gdGhlIHNhbWUgdXNpbmcgc29tZSBoYWNrcy4NClNvIEknbSBzZWVr aW5nIGZvciBhIHBvcnRhYmxlIHNvbHV0aW9uLg0KDQo+IA0KPiBGb3IgdGhlIEludGVsIGRyaXZl cnMsIHRoZSBOQVBJIGlzIGFzc29jaWF0ZWQgdG8gYSBjZXJ0YWluDQo+IGludGVycnVwdC4NCg0K VGhlIHNhbWUgZm9yIE1lbGxhbm94Lg0KDQo+IFRoaXMgZG9lcyBub3QgY2hhbmdlIHdpdGggQUZf WERQLCBzbyBuZG9feHNrX2FzeW5jX3htaXQNCj4gc2ltcGx5IGtpY2tzIHRoZSBOQVBJIHRvIHJ1 biBvbiB0aGUgQ1BVIGJvdW5kIGRlZmluZWQgYnkgdGhlIGlycQ0KPiBhZmZpbml0eS4NCg0KVGhp cyBpcyBtb3JlIGNvbXBsaWNhdGVkIGZvciBNZWxsYW5veCBoYXJkd2FyZS4gSWYgdGhlcmUgd2Fz IGEgInRyaWdnZXINCk5BUEkgb24gQ1BVIFgiIGZ1bmN0aW9uICh0aGF0IGNvdWxkIHVzZSBzbXBf Y2FsbF9mdW5jdGlvbl9zaW5nbGVfYXN5bmMNCmludGVybmFsbHkpLCBpdCB3b3VsZCBtYWtlIHRo aXMgcGFydCBjb21wbGV0ZWx5IGRyaXZlci0gYW5kDQpoYXJkd2FyZS1hZ25vc3RpYywgaXQgY291 bGQgZXZlbiBiZSBpbXBsZW1lbnRlZCBhcyBhIGNvbW1vbiBjb2RlIGluIHRoZQ0Ka2VybmVsLg0K DQo+IEknbSBhbGwgb3BlbiBmb3IgYWRkaXRpb25hbGx5IGtlcm5lbCBBUElzLCBhbmQgSSdtIGhh cHB5IHRvIGhhY2sgdGhlDQo+IGk0MGUgaW50ZXJuYWxzIGFzIHdlbGwuIEFnYWluLCBpdCBtdXN0 IGJlIHJlYWxseSBzaW1wbGUgdG8gYWRkDQo+IFhEUC9BRl9YRFAtWkMgc3VwcG9ydCBmb3Igb3Ro ZXIgdmVuZG9yLg0KPiANCj4gSWRlYWxseSwgd2hhdCBJIHdvdWxkIGxpa2UgaXMgYSBnZW5lcmlj IHdheSBvZiBhc3NvY2lhdGluZyBuZXRkZXYNCj4gcXVldWVzICh0aGluayBldGh0b29scy1jaGFu bmVscykgd2l0aCBOQVBJIGNvbnRleHRzLiBFLmcuICJxdWV1ZXMNCj4gMSwyLDMgb24gTkFQSSBm b28sIGFuZCBJLElJLElJSSBvbiBOQVBJIGJhciwgYW5kIHRoZSBOQVBJcyBzaG91bGQgcnVuDQo+ IG9uIG9uIHRoZSBiYXogY2dyb3VwIi4gVGhpcyBpcyBhIG11Y2ggYmlnZ2VyIHRhc2sgYW5kIG91 dHNpZGUgdGhlDQo+IEFGX1hEUCBzY29wZS4gSXQgdGllcyBpbiB0byB0aGUgd2hvbGUgInRocmVh ZGVkIE5BUElzIGFuZCBuZXRkZXYNCj4gcXVldWVzIGFzIGEgZmlyc3QgY2xhc3Mga2VybmVsIG9i amVjdCIgZGlzY3Vzc2lvbi4gOy0pDQoNClllcywgaXQncyBtdWNoIG1vcmUgaW50cnVzaXZlIGFu ZCBiaWcsIGxldCdzIGRlYWwgd2l0aCBBRl9YRFAgZmlyc3QgOikNCg0KPiBNYWdudXMgaXMgd29y a2luZyBvbiBwcm9wZXIgYnVzeS1wb2xsKCkgKGkuZS4gdGhhdCB0aGUgcG9sbCgpIHN5c2NhbGwN Cj4gZXhlY3V0ZXMgdGhlIE5BUEkgY29udGV4dCkuIFdpdGggdGhhdCBzb2x1dGlvbiB0aGUgdXNl ciBhcHBsaWNhdGlvbg0KPiBjYW4gc2VsZWN0IHdoaWNoIGNvcmUgaXQgd2FudHMgdG8gZXhlY3V0 ZSB0aGUgcG9sbCgpIG9uIC0tIGFuZCB0aGUNCj4gTkFQSSB3aWxsIGJlIGV4ZWN1dGVkIGZyb20g dGhlIHBvbGwoKS4NCg0KV293LCB0aGF0J3MgZ29vZC4gQnV0IHRoZSBjdXJyZW50IGk0MGVfbmFw aV9wb2xsKCkgY2hlY2tzIHRoZSBDUFUNCmFmZmluaXR5IGFuZCByZXNjaGVkdWxlcyBpZiBpdCdz IHdyb25nIC0gd2lsbCB0aGlzIGNoZWNrIGJlIHJlbW92ZWQ/IE9yDQp3aWxsIHRoZXJlIGJlIGEg c2VwYXJhdGUgTkFQSSBpbnN0YW5jZSBmb3IgWFNLIFRYPw0KDQo+IA0KPiA+PiAxLiBJdCBsaWZ0 cyB0aGUgaGFyZHdhcmUgcmVxdWlyZW1lbnQgdG8gYmUgYWJsZSB0byByYWlzZSBhbiBpbnRlcnJ1 cHQgb24NCj4gZGVtYW5kLg0KPiA+Pg0KPiA+PiAyLiBJdCB3b3VsZCBhbGxvdyB0byBtb3ZlIGNv bW1vbiBjb2RlIHRvIHRoZSBrZXJuZWwNCj4gKC5uZG9feHNrX2FzeW5jX3htaXQpLg0KPiA+Pg0K PiA+PiAzLiBJdCBpcyBhbHNvIHVzZWZ1bCBpbiB0aGUgc2l0dWF0aW9uIHdoZXJlIENQVSBhZmZp bml0eSBjaGFuZ2VzIHdoaWxlDQo+IGJlaW5nIGluDQo+ID4+IE5BUEkgcG9sbC4gQ3VycmVudGx5 LCBpNDBlIGFuZCBtbHg1ZSB0cnkgdG8gc3RvcCBOQVBJIHBvbGxpbmcgYnkNCj4gcmV0dXJuaW5n DQo+ID4+IGEgdmFsdWUgbGVzcyB0aGFuIGJ1ZGdldCBpZiBDUFUgYWZmaW5pdHkgY2hhbmdlcy4g SG93ZXZlciwgdGhlcmUgYXJlDQo+IGNhc2VzDQo+ID4+IChlLmcuLCBOQVBJRl9TVEFURV9NSVNT RUQpIHdoZW4gTkFQSSB3aWxsIGJlIHJlc2NoZWR1bGVkIG9uIGEgd3JvbmcgQ1BVLg0KPiBJdCdz IGENCj4gPj4gcmFjZSBiZXR3ZWVuIHRoZSBpbnRlcnJ1cHQsIHdoaWNoIHdpbGwgbW92ZSBOQVBJ IHRvIHRoZSBjb3JyZWN0IENQVSwgYW5kDQo+ID4+IF9fbmFwaV9zY2hlZHVsZSBmcm9tIGEgd3Jv bmcgQ1BVLiBIYXZpbmcgYW4gQVBJIHRvIHNjaGVkdWxlIE5BUEkgb24gYQ0KPiBnaXZlbiBDUFUN Cj4gPj4gd2lsbCBiZW5lZml0IGJvdGggbWx4NWUgYW5kIGk0MGUsIGJlY2F1c2Ugd2hlbiB0aGlz IHNpdHVhdGlvbiBoYXBwZW5zLCBpdA0KPiBraWxscw0KPiA+PiB0aGUgcGVyZm9ybWFuY2UuDQo+ ID4gSG93IHdvdWxkIHdlIGtub3cgd2hhdCBjb3JlIHRvIHRyaWdnZXIgTkFQSSBvbj8NCg0KV2Ug Y2FuIGNoZWNrIHRoZSBjcHVtYXNrIGZvciB0aGUgbmVjZXNzYXJ5IGNoYW5uZWwuDQoNCj4gPj4g SSB3b3VsZCBiZSBoYXBweSB0byBoZWFyIHlvdXIgdGhvdWdodHMgYWJvdXQgdGhlc2UgaXNzdWVz Lg0KPiA+IEF0IGxlYXN0IHRoZSBmaXJzdCB0d28gb2JzZXJ2YXRpb25zIHNlZW0gaW5jcmVtZW50 YWxseSBzb2x2YWJsZSB0byBtZQ0KPiA+IGFuZCB3b3VsZCBiZSBuaWNlIGltcHJvdmVtZW50cy4g SSBhc3N1bWUgdGhlIGxhc3QgY2FzZSBjYW4gYmUgcmVzb2x2ZWQNCj4gPiBieSBwaW5uaW5nIGNv cmVzL3RyYWZmaWMgYnV0IGZvciB0aGUgZ2VuZXJhbCBjYXNlIHBlcmhhcHMgaXQgaXMgdXNlZnVs Lg0KPiA+DQo+IA0KPiBHb29kIHN1bW1hcnksIEpvaG4uIFJlYWxseSBnb29kIGlucHV0IE1heCwg YW5kIGFkZHJlc3NhYmxlIC0tIGJ1dCBBUEkNCj4gY2hhbmdlcyBhcyBmYXIgYXMgSSBzZWUgaXQg aXMgbm90IHJlcXVpcmVkLg0KDQpPSywgSSdsbCB0cnkgdG8gc3VtIHVwIHRoZSBwb2ludHM6DQoN CjEuIFJYIGJ1c3kgcG9sbGluZyBpcyBnb29kIGZvciBsYXRlbmN5LCBhbmQgaXNzdWVzIGNhdXNl ZCBieSB1c2Vyc3BhY2UNCm1pc2JlaGF2aW9yIGNhbiBiZSBzYWNyaWZpY2VkIGZvciB0aGUgcGVy Zm9ybWFuY2UsIGJ1dCBpZiBBRl9YRFAgc29ja2V0cw0KYXJlIGF2YWlsYWJsZSBpbiB0aGUgc3lz dGVtLCBldmVuIGlmIHVudXNlZCwgdGhleSBvcGVuIGEgc2VjdXJpdHkgaG9sZQ0KKGxvY2FsIERv UykuDQoNCjIuIFRYIHN0YWxsIGNhbiBiZSBzb2x2ZWQgaW4gdGhlIHVzZXJzcGFjZSB3aXRoIHRo ZSBjdXJyZW50IEFQSSwNCmhvd2V2ZXIsIHRoaXMgaXNzdWUgaXMgbm90IGRvY3VtZW50ZWQsIGFu ZCBteSBhcHByb2FjaCBjYW4gZ2l2ZSBzb21lDQpiZW5lZml0cy4gV2UgY2FuIGFkZCBhIGZsYWcg dG8gdHVybiBpdCBvbiBleHBsaWNpdGx5LiBObyBkcml2ZXIgY2hhbmdlcywNCmtlcm5lbC1vbmx5 IGZlYXR1cmUuDQoNCjMuIE5BUEkgaXNzdWUgY2FuIGJlIHdvcmtlZCBhcm91bmQgYnkgY2FsbGlu ZyBzZW5kdG8oKSBmcm9tIHRoZSByaWdodA0KQ1BVIChhbmQgaXQgd2lsbCBtb3N0IGxpa2VseSBo YXBwZW4gaW4gcHJvZHVjdGlvbiksIGJ1dCB0aGUgY3VycmVudCBpNDBlDQppbXBsZW1lbnRhdGlv biBzdXBwb3J0cyBzZW5kdG8oKSBmcm9tIGFueSBDUFUsIGFuZCBpdCBzaG91bGQgYmUgbWFkZQ0K ZHJpdmVyLWFnbm9zdGljIGFuZCBwdXQgaW4gdGhlIGtlcm5lbC4NCg0KVGhhbmsgeW91IEpvaG4g YW5kIEJqw7ZybiBmb3IgeW91ciBpbnB1dCENCg0KPiAoSSdtIG91dC1vZi1vZmZpY2UgdGhpcyB3 ZWVrLCBza2lpbmcuIFNvLCBJJ2xsIGJlIGF3YXkgZnJvbSB0aGUgbGlzdHMNCj4gdW50aWwgTW9u ZGF5ISkNCj4gDQo+IENoZWVycywNCj4gQmrDtnJuDQo+IA0KPiA+PiBUaGFua3MsDQo+ID4+IE1h eA0KPiA+Pg0K