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 E8061A0C4B; Mon, 4 Oct 2021 08:56:56 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 82F04412BA; Mon, 4 Oct 2021 08:56:56 +0200 (CEST) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2080.outbound.protection.outlook.com [40.107.244.80]) by mails.dpdk.org (Postfix) with ESMTP id CDA92412B6 for ; Mon, 4 Oct 2021 08:56:54 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fQ77f5vH4WGvj+CkMhN4ImYY6BbW7dwpH9uqOGFt3PXPwf8b3vDskAbeni9I1nvph8xp40UCs6k1L8dSWvMvstIbLQAQ+3wTgDqWqGf+f+BhInB3i/xa77t4PcSIZfBnL4HqFPIsLPhcN43uxDGFRKJXRSMStzFlq60DmjYY59pHb1smG0PpHlsPDw127wWQLZrRXb6FDawhxTyPPVTdbMyedoRcZKgQpIFOnoPOZWEDqOmpeM76YP4+Wzw0LpCsIO/1uQ8tKTW4023G7kDo5/c2PGdBW4d+ETm92e3ZqOHd3WKVx3K2o0wf02rlWtrThfGd8lGTVZhwhnOViPTLJA== 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=4MeMJrjaIuE5PJVcgc4u9govqGQD8vzb7pO2NWqiFYc=; b=WZQJ/k3iIIxyHfs92x0tXy87QsJSA9dIyP3Wn+pvsvpNj+h5/eJUH57dEYKdg6w/rcJ3OOgnKbS/sLsYpp249r2iO0hb2WqlI4s9UJ332xpGy8CmsZaGC0banAr/ks4e+55VpbjA7ccNLfcs9DPC/ql1I482ynCnX6SBB/rBBe6WFrF+P5zdIM+k8i7CfQMCJwpB/8bsdEOyM6jKovueqoTbhpKox+fNf0GKdlw8fP+HuaRqG9n95xZiBWoXNFejrBBvF7rTSXInVSR7aoyR0a2sjSl2M5znXoq2k4oTbe6LT9SNIwerk2LEWQR5WPSYZBbyuf9patTbU3dyZyWU1Q== 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=4MeMJrjaIuE5PJVcgc4u9govqGQD8vzb7pO2NWqiFYc=; b=AFd3eeNDvOa2+c7ELaGWSFMJr10XXLnGAQvo3JUdPq+JhcNOsTShzI6r2vCjFi4R0TlDMjCPf8lE3pg6B22GFXaW4jaDzv1SBin45JjY46F9k4ymgnjv/B73XlgryL7QDR9/P1wj79L3r2qnXWowAvWM9XKJOMD+Lebv+8OHKYkO2VUlkZqqkQnylPJ8z5aPapBPNe+XjSDrrdzpYd4KJCefx/kG5+Gz0XcVajmQfQzBsmZckfDzFXuQALAiIOGKnknFrhOjmgBdk5R2GGznWHP+r6/eJNj7mFM/EB4UrleXUyDQeJNijOQK2YMLNru3whXgjmYJV3+/OWoqjWC8UQ== Received: from DM8PR12MB5400.namprd12.prod.outlook.com (2603:10b6:8:3b::12) by DM4PR12MB5117.namprd12.prod.outlook.com (2603:10b6:5:390::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4566.14; Mon, 4 Oct 2021 06:56:53 +0000 Received: from DM8PR12MB5400.namprd12.prod.outlook.com ([fe80::d03d:1f75:ca20:6a32]) by DM8PR12MB5400.namprd12.prod.outlook.com ([fe80::d03d:1f75:ca20:6a32%5]) with mapi id 15.20.4566.022; Mon, 4 Oct 2021 06:56:53 +0000 From: Ori Kam To: Ivan Malov , Andrew Rybchenko , "dev@dpdk.org" CC: Andy Moreton , Ray Kinsella , Jerin Jacob , Wisam Monther , Xiaoyun Li , NBU-Contact-Thomas Monjalon , Ferruh Yigit Thread-Topic: [PATCH v3 1/5] ethdev: add API to negotiate delivery of Rx meta data Thread-Index: AQHXsG0EGYKwxu5FGk6rpb3sj4WbEKu8simggABJ14CAAMRGAIADKRXQgAAoU4CAAA0j8IAAeO6AgAArh0CAAD6kgIAAY+sw Date: Mon, 4 Oct 2021 06:56:52 +0000 Message-ID: References: <20210902142359.28138-1-ivan.malov@oktetlabs.ru> <20210923112012.14595-1-ivan.malov@oktetlabs.ru> <20210923112012.14595-2-ivan.malov@oktetlabs.ru> <6e9703ae-9fe0-2656-c08f-da95e44bcdeb@oktetlabs.ru> <06d5d165-a9e0-ecc6-74b5-20a77a88e301@oktetlabs.ru> In-Reply-To: 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: e8f7f180-2447-4586-a4a9-08d987042598 x-ms-traffictypediagnostic: DM4PR12MB5117: 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:10000; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 5m6yCo8lqrXePDjrsWBF9ryeGaAbYNXRhlLgWzZlLSXNkMcXKIdbualjmEM3RzzfZfGt5rbugX2X9P5MPQlPeEtET5M9NHkfIc43RFzaFgVLee3PG6vpoVYYTNLG3H5bGxglLNoZb1uV444SrIxO90iXVPQorkmM8gKTdd0/ydTyOUcuikDRuG3ahN87EvqsMaUvTnRILtFRkg1nMZFYiai9bQogMq74KCXdtgQg5MwnE19z8qzYlwvwUUZNm+uK8GjP0GqsZ7qkQZr0zrBoRVDU+igggZx26puyGJxHIHjY2F91lHSiI8AJK39SQNltJvLbt44zSURPjHX9RWJ7F2/sWzbn3LMew4m31ejuiGTpyiLHrj02kpsacvjNH1LqD8BYIPhhOdoga2fpkWDuCC5UGv9VrspN8QU+wwfYesu5gTad9K83bp5qJkQhUZRUKsU2n3U24muonO9vqx0oslILChXk/u0f2zjHPhO44cbFw/nn5EtN9N8B9Y8Okh4T/CxsWY3LZEejRju4RHNq2K0BZYLijbX+Ex5l7qbJ6VNCXb5n7vYOlT91Wr8HoaIAZlvCpZBy/MgVNbP6yYAoQRTDMk2MWOht5O+gSA0tbYm2t4pXVR57VUqjGB1w90f2ZgqLPFmeKZ7ix/xJdE0pYYS5SW5ualqGrM9IBASA1uuFi6yQJuUaSQ617ymBjlSTGLgNkoudHQntO1K6O9DiH1JnE6xcR0jV729eczWLHlgHMnPMPS2zPHJX/JZ6bZpyebLw85YKbtz6TqWqLQu2p5RBfuGfWvp+LDf2GXyrIa0= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM8PR12MB5400.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(54906003)(86362001)(4326008)(38100700002)(966005)(316002)(122000001)(71200400001)(508600001)(110136005)(66556008)(186003)(76116006)(38070700005)(8936002)(33656002)(83380400001)(66476007)(8676002)(66446008)(53546011)(5660300002)(6506007)(55016002)(2906002)(7696005)(66946007)(30864003)(52536014)(64756008)(9686003); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ZXpDQWNRUHpHNHVxeEFyWHRoZ0xDaFFVWFMzaWMrc0x6bEFuVWY1cTVDbHBM?= =?utf-8?B?bjRLa3MwK2UxMDRhempWTTNMV2RGaHh6NEhqVGdoTytUNXdKVS9HSC96QzJy?= =?utf-8?B?ejQ4elJueXQySXo4d2wyeFkzNEExbGNvV25tZTdEbnZ4Q1BaT0VHNFk2TG0y?= =?utf-8?B?Skk5Q095TEpPV3YzTnZpMUFWYTlOTmd1TXJEKzZuYVlJUzJTd3J5b0MvZVlj?= =?utf-8?B?RjI1ckpyZkpMZjhlbEdxNEViSU9sZVlYVGh3VUJHYWpCaHJRa09nb3lWUzhw?= =?utf-8?B?Ly9SZW43ODZLM1BVcmcyNUZUSEZoeTF1MHVMS29ZYjBWOHVrMUJSdFVVRFQ3?= =?utf-8?B?VnUzWE5pR1NabG1GREl5NVk4azZXQVc3N1p4d2JGRm1VSFZzRCszYlNmVWd0?= =?utf-8?B?NVhiajYycUNuR09PcmpnWU1FMks0N3RlSkwyTmVteXoxRFFUaTBmemR1KzRo?= =?utf-8?B?MDdiSDVOM0NHRjVVcjhoOXpPM0lCMm5qRHQwZ2JGdnU1R2NOTWg0cnFnNmEz?= =?utf-8?B?S3BaelMvNWZwWWd6cGl6Zkp0QzFKZEhHVDVqZUM2Qk5wVU5NTnlkb2NIQVhi?= =?utf-8?B?Y1NFK0t6b1I5KzhSZEJKcnhJMHVHOVdxMTZtbmZPOTE5d245aDRNMGRZUVdM?= =?utf-8?B?VGQvZWhhZ2gyK0xvWitBL1ROejRyb1BWNlBpNGlkYWxNQk5lb0tZS1pCTGp2?= =?utf-8?B?cHpSWkEzMnAwb21OUnVqNkEyZ2d3Snp4b1pmTm9FV1VHYXhDVmdYdWFqbVds?= =?utf-8?B?dHQzeEhON0tqNzBzYlVnOTNpUzNkTTBNQWtpZFk2SWw2M2pzRzlCNVJhbDFt?= =?utf-8?B?cjBDR3F0Sjh2aFdXcjRpZ3pXWmtKTVpDMlZoMzJYSXlJdEkxa0dhZkNLQ3By?= =?utf-8?B?UnYzRzQ1emRZVUVvSEVkRHc3TlBlVHZvd01zWTFTeGE5bE1LSnBNL3FPWnFP?= =?utf-8?B?WWd0V3I3WURPL2JvWXBXWGJja0dWTlRUZ293RkZlRVVnVmNCZ0NoK0lOZWZO?= =?utf-8?B?bndkRjR1aUlKK2xNdnhCSFJWZjEyL01ucFc1RUtlNUtBOHBzY2ZmUlFMRTZZ?= =?utf-8?B?a1I5SGdjN2h1a2h3ZUpuc1p5SGljVGh2ZXNCUEtZdTlNT1c0aTQ0RlovdWxV?= =?utf-8?B?c0Eyek1jdnhhL1IrQUExN2ZEdUhBQ3c3Y0dKRWZqTUtmWkR4c3pOSy9oZTEw?= =?utf-8?B?eGZoL013WHpoaGJCSWZwdnRrbXdRZFdqR29oWVhiU3QzVi9kalJydzc1Mjg2?= =?utf-8?B?TFpNeU5qTjdmaWttNzhRNXNzYmxhb2hteXdQL0FrUW5NZTFmK2hGdTNya09E?= =?utf-8?B?Z1l1U0lzWXVSWFN6VG1GL0tuRnBXbXA1SzRvWFJzc1RWVVpjSmc4aHhhaHJW?= =?utf-8?B?dFBNdVowYVBraThGZzV6WTJHN1gwVmFQcG1LM2M4VWdqTGQ4cVVzckYyZU1l?= =?utf-8?B?Y1Z5Tm1sSTV2NzZUQjdDSmNOdFoybDlXTjZ3bHA2dVhQNmdPN2NvM3MycVNQ?= =?utf-8?B?Q3Q4bXdoQnVsYVF2bE92R1c0cE5XUHE2UVUyTW54N1IzdmxBMWE3ZmFmZ0t2?= =?utf-8?B?SFlrSUk4bUlMZmxkN0lJVWVlMUVxRnVhaW9DcUpUTXl2VUsvNUFjMnFOYmdu?= =?utf-8?B?L1duZU9xUjZ1dURDc1owQUo2cHRlMytUbm1Md0FoMG94N0lvL0MzQ0k2YU9Y?= =?utf-8?B?aGdQRW15YnQ0bU1DZTJZTUd4WWxHNnYrbVUvYS9VNFNWMzhaQ1dYVGQxcUZH?= =?utf-8?B?VTY2VlFJUWxwSUpqdGpGWHFYRUc3VDVrWU9GMFdlVzdBcnZNM0x0eFJmNzVa?= =?utf-8?B?amU2c2tzOGdVZkl2RXROUmwzVHptQ21KTWxEWHVhUDZzMTB3U0lJVUZNVVk4?= =?utf-8?Q?YMA8W3PuREa9z?= 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: DM8PR12MB5400.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e8f7f180-2447-4586-a4a9-08d987042598 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Oct 2021 06:56:52.8780 (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: dsM6/SmzQeBijS4HLT8LONLj+ga14ymtgR4QlCb8tXdzlQONR4PFrBpKK3lWjGVN4SwvAGrh1HxA5QnSGP1xOA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB5117 Subject: Re: [dpdk-dev] [PATCH v3 1/5] ethdev: add API to negotiate delivery of Rx meta data 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" SGkgSXZhbiwNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBJdmFuIE1h bG92IDxJdmFuLk1hbG92QG9rdGV0bGFicy5ydT4NCj4gU2VudDogTW9uZGF5LCBPY3RvYmVyIDQs IDIwMjEgMjo1MCBBTQ0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHYzIDEvNV0gZXRoZGV2OiBhZGQg QVBJIHRvIG5lZ290aWF0ZSBkZWxpdmVyeSBvZiBSeCBtZXRhDQo+IGRhdGENCj4gDQo+IEhpIE9y aSwNCj4gDQo+IE9uIDA0LzEwLzIwMjEgMDA6MDQsIE9yaSBLYW0gd3JvdGU6DQo+ID4gSGkgSXZh biwNCj4gPg0KPiA+IFNvcnJ5IGZvciB0aGUgbG9uZyByZXZpZXcuDQo+ID4NCj4gPj4gLS0tLS1P cmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTogSXZhbiBNYWxvdiA8SXZhbi5NYWxvdkBv a3RldGxhYnMucnU+DQo+ID4+IFNlbnQ6IFN1bmRheSwgT2N0b2JlciAzLCAyMDIxIDg6MzAgUE0N Cj4gPj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MyAxLzVdIGV0aGRldjogYWRkIEFQSSB0byBuZWdv dGlhdGUgZGVsaXZlcnkgb2YNCj4gPj4gUnggbWV0YSBkYXRhDQo+ID4+DQo+ID4+IEhpIE9yaSwN Cj4gPj4NCj4gPj4gT24gMDMvMTAvMjAyMSAxNDowMSwgT3JpIEthbSB3cm90ZToNCj4gPj4+IEhp IEl2YW4sDQo+ID4+Pg0KPiA+Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+Pj4g RnJvbTogSXZhbiBNYWxvdiA8SXZhbi5NYWxvdkBva3RldGxhYnMucnU+DQo+ID4+Pj4gU2VudDog U3VuZGF5LCBPY3RvYmVyIDMsIDIwMjEgMTI6MzAgUE0gZGF0YQ0KPiA+Pj4+DQo+ID4+Pj4gSGkg T3JpLA0KPiA+Pj4+DQo+ID4+Pj4gVGhhbmtzIGZvciByZXZpZXdpbmcgdGhpcy4NCj4gPj4+Pg0K PiA+Pj4NCj4gPj4+IE5vIHByb2JsZW0uDQo+ID4+Pg0KPiA+Pj4+IE9uIDAzLzEwLzIwMjEgMTA6 NDIsIE9yaSBLYW0gd3JvdGU6DQo+ID4+Pj4+IEhpIEFuZHJldyBhbmQgSXZhbiwNCj4gPj4+Pj4N Cj4gPj4+Pj4NCj4gPj4+Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+Pj4+PiBG cm9tOiBBbmRyZXcgUnliY2hlbmtvIDxhbmRyZXcucnliY2hlbmtvQG9rdGV0bGFicy5ydT4NCj4g Pj4+Pj4+IFNlbnQ6IEZyaWRheSwgT2N0b2JlciAxLCAyMDIxIDk6NTAgQU0NCj4gPj4+Pj4+IFN1 YmplY3Q6IFJlOiBbUEFUQ0ggdjMgMS81XSBldGhkZXY6IGFkZCBBUEkgdG8gbmVnb3RpYXRlIGRl bGl2ZXJ5DQo+ID4+Pj4+PiBvZiBSeCBtZXRhIGRhdGENCj4gPj4+Pj4+DQo+ID4+Pj4+PiBPbiA5 LzMwLzIxIDEwOjA3IFBNLCBJdmFuIE1hbG92IHdyb3RlOg0KPiA+Pj4+Pj4+IEhpIE9yaSwNCj4g Pj4+Pj4+Pg0KPiA+Pj4+Pj4+IE9uIDMwLzA5LzIwMjEgMTc6NTksIE9yaSBLYW0gd3JvdGU6DQo+ ID4+Pj4+Pj4+IEhpIEl2YW4sDQoNCltTbmlwXQ0KDQo+ID4+PiBHb29kIHBvaW50IHNvIHdoeSBu b3QgdXNlIHRoZSBzYW1lIGxvZ2ljIGFzIHRoZSBtZXRhZGF0YSBhbmQgcmVnaXN0ZXINCj4gaXQ/ DQo+ID4+PiBTaW5jZSBpbiBhbnkgY2FzZSwgdGhpcyBpcyBzb21ldGhpbmcgaW4gdGhlIG1idWYg c28gbWF5YmUgdGhpcw0KPiA+Pj4gc2hvdWxkIGJlIHRoZQ0KPiA+PiBhbnN3ZXI/DQo+ID4+DQo+ ID4+IEkgZGlkbid0IGNhdGNoIHlvdXIgdGhvdWdodC4gQ291bGQgeW91IHBsZWFzZSBlbGFib3Jh dGUgb24gaXQ/DQo+ID4NCj4gPiBUaGUgbWV0YWRhdGEgYWN0aW9uIGp1c3QgbGlrZSB0aGUgbWFy ayBvciBmbGFnIGlzIHVzZWQgdG8gZ2l2ZQ0KPiA+IGFwcGxpY2F0aW9uIGRhdGEgdGhhdCB3YXMg c2V0IGJ5IGEgZmxvdyBydWxlLg0KPiA+IFRvIGVuYWJsZSB0aGUgbWV0YWRhdGEgdGhlIGFwcGxp Y2F0aW9uIG11c3QgcmVnaXN0ZXIgdGhlIG1ldGFkYXRhIGZpZWxkLg0KPiA+IFNpbmNlIHRoaXMg aGFwcGVucyBkdXJpbmcgdGhlIGNyZWF0aW9uIG9mIHRoZSBtYnVmIGl0IG1lYW5zIHRoYXQgaXQN Cj4gPiBtdXN0IGJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBkZXZpY2Ugc3RhcnQuDQo+ID4NCj4gPiBJ IHVuZGVyc3RhbmQgdGhhdCB0aGUgbWFyayBhbmQgZmxhZyBkb24ndCBuZWVkIHRvIGJlIHJlZ2lz dGVyZWQgaW4gdGhlDQo+ID4gbWJ1ZiBzaW5jZSB0aGV5IGhhdmUgc2F2ZWQgc3BhY2UgYnV0IGZy b20gYXBwbGljYXRpb24gcG9pbnQgb2Ygdmlldw0KPiA+IHRoZXJlIGlzIG5vIGRpZmZlcmVuY2Ug YmV0d2VlbiB0aGUgbWV0YWRhdGEgYW5kIG1hcmssIHNvIHdoeSBkb2VzDQo+ID4gbmVnb3RpYXRl IGZ1bmN0aW9uIGRvZXNuJ3QgaGFuZGxlIHRoZSBtZXRhZGF0YT8NCj4gPg0KPiA+IEkgaG9wZSB0 aGlzIGlzIGNsZWFyZXIuDQo+IA0KPiBUaGFuayB5b3UuIFRoYXQncyBhIGxvdCBjbGVhcmVyLg0K PiANCj4gSSBpbnNwZWN0ZWQgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9zZXRfbWV0YSBhcyB3ZWxs IGFzDQo+IHJ0ZV9mbG93X2R5bmZfbWV0YWRhdGFfcmVnaXN0ZXIoKS4gVGhlIGxhdHRlciBBUEkg ZG9lc24ndCByZXF1aXJlIHRoYXQNCj4gYXBwbGljYXRpb25zIGludm9rZSBpdCBwcmVjaXNlbHkg YmVmb3JlIGFkYXB0ZXIgc3RhcnQuIEl0IHNheXMgIm11c3QgYmUgY2FsbGVkDQo+IHByaW9yIHRv IHVzZSBTRVRfTUVUQSBhY3Rpb24iLCBhbmQgdGhlIGNvbW1lbnQgYmVmb3JlIHRoZSBzdHJ1Y3R1 cmUgc2F5cw0KPiBqdXN0ICJpbiBhZHZhbmNlIi4gU28sIGF0IGEgYmFyZSBtaW5pbXVtLCB0aGUg QVBJIGNvbnRyYWN0IGNvdWxkJ3ZlIGJlZW4NCj4gbWFkZSBtb3JlIHN0cmljdCB3aXRoIHRoaXMg cmVzcGVjdC4gSG93ZXZlciwgZmFyIG1vcmUgaW1wb3J0YW50IHBvaW50cyBhcmUNCj4gYXMgZm9s bG93czoNCj4gDQoNCkFncmVlLCB0aGF0IGRvYyBzaG91bGQgYmUgdXBkYXRlZCBidXQgYnkgZGVm aW5pdGlvbiB0aGlzIG11c3QgYmUgc2V0IGJlZm9yZSBtYnVmDQpjcmVhdGlvbiB0aGlzIG1lYW5z IGJlZm9yZSBkZXZpY2Ugc3RhcnQuDQoNCj4gMSkgVGhpcyBBUEkgZW5hYmxlcyBkZWxpdmVyeSBv ZiB0aGlzICJjdXN0b20iIG1ldGFkYXRhIGJldHdlZW4gdGhlIFBNRA0KPiBhbmQgdGhlIGFwcGxp Y2F0aW9uLCB3aGlsc3QgdGhlIEFQSSB1bmRlciByZXZpZXcsIGFzIEkgbm90ZWQgYmVmb3JlLA0K PiBuZWdvdGlhdGVzIGRlbGl2ZXJ5IG9mIHZhcmlvdXMga2luZHMgb2YgbWV0YWRhdGEgYmV0d2Vl biB0aGUgTklDIGFuZCB0aGUNCj4gUE1ELiBUaGVzZSBhcmUgdHdvIGNvbXBsZXRlbHkgZGlmZmVy ZW50IChhbGJlaXQgYWRqYWNlbnQpIHN0YWdlcyBvZiBwYWNrZXQNCj4gZGVsaXZlcnkgcHJvY2Vz cy4NCj4NClRoZXkgYXJlIGV4YWN0bHkgYWxpa2UgYWxzbyBpbiB0aGUgbWV0YWRhdGEgY2FzZSB0 aGUgcmVnaXN0ZXJ0aW9uIGRvZXMgdHdvIHRoaW5nczoNClNhdmVzIGEgcGxhY2UgZm9yIHRoZSBp bmZvIGluIHRoZSBtYnVmIGFuZCB0ZWxscyB0aGUgUE1EIHRoYXQgaXQgc2hvdWxkIGNvbmZpZ3Vy ZSB0aGUgTklDDQp0byBzdXBwbHkgdGhpcyBpbmZvcm1hdGlvbiB1cG9uIHJlcXVlc3QuDQpFdmVu IGluIHlvdXIgUE1EIGFzc3VtaW5nIHRoYXQgaXQgY2FuIHN1cHBvcnQgdGhlIG1ldGFkYXRhLCB5 b3Ugd2lsbCBuZWVkIHRvIGNvbmZpZ3VyZQ0KaXQgb3RoZXJ3aXNlIHdoZW4gdGhlIGFwcGxpY2F0 aW9uIHdpbGwgcmVxdWVzdCB0aGlzIGRhdGEgdXNpbmcgYSBydWxlIHlvdSB3aWxsIGJlIGF0IHRo ZQ0Kc2FtZSBzcG90IHlvdSBhcmUgbm93IHdpdGggdGhlIG1hcmsuDQoNCj4gMikgVGhpcyBBUEkg ZG9lc24ndCBuZWdvdGlhdGUgYW55dGhpbmcgd2l0aCB0aGUgUE1ELiBJdCBkb2Vzbid0IGludGVy YWN0IHdpdGgNCj4gdGhlIFBNRCBhdCBhbGwuIEl0IGp1c3QgcmVzZXJ2ZXMgZXh0cmEgcm9vbSBp biBtYnVmcyBmb3IgdGhlIG1ldGFkYXRhIGZpZWxkDQo+IGFuZCBleGl0cy4NCj4gDQo+IDMpIEFz IGEgY29uc2VxdWVuY2Ugb2YgKDMpLCB0aGUgUE1EIGNhbid0IGltbWVkaWF0ZWx5IGxlYXJuIGFi b3V0IHRoaXMgZmllbGQNCj4gYmVpbmcgZW5hYmxlZC4gSXQncyBmb3JjZWQgdG8gZmFjZSB0aGlz IGZhY3QgYXQgc29tZSBkZWZlcnJlZCBwb2ludC4gSWYgdGhlDQo+IFBNRCwgZm9yIGluc3RhbmNl LCBsZWFybnMgYWJvdXQgdGhhdCBkdXJpbmcgYWRhcHRlciBzdGFydCBhbmQgaWYgaXQgZm9yIHNv bWUNCj4gcmVhc29uIGRlY2lkZXMgdG8gZGVueSB0aGUgdXNlIG9mIHRoaXMgZmllbGQsIGl0IHdv bid0IGJlIGFibGUgdG8gY29udmV5IGl0cw0KPiBkZWNpc2lvbiB0byB0aGUgYXBwbGljYXRpb24u IEFzIGEgcmVzdWx0LCB0aGUgYXBwbGljYXRpb24gd2lsbCBsaXZlIGluIHRoZSB3cm9uZw0KPiBh c3N1bXB0aW9uIHRoYXQgaXQgaGFzIHN1Y2Nlc3NmdWxseSBlbmFibGVkIHRoZSBmZWF0dXJlLg0K Pg0KPiA0KSBFdmVuIGlmIHdlIGFkZCBzaW1pbGFyIEFQSXMgdG8gInJlZ2lzdGVyIiBtb3JlIGtp bmRzIG9mIG1ldGFkYXRhIChmbGFnLA0KPiBtYXJrLCB0dW5uZWwgSUQsIGV0YykgYW5kIHJlLWRl ZmluZSB0aGUgbWVhbmluZyBvZiBhbGwgdGhlc2UgQVBJcyB0byBzYXkgdGhhdA0KPiBub3Qgb25s eSB0aGV5IGVuYWJsZSBkZWxpdmVyeSBvZiB0aGUgbWV0YWRhdGEgYmV0d2VlbiB0aGUgUE1EIGFu ZCB0aGUNCj4gYXBwbGljYXRpb24gYnV0IGFsc28gZW5hYmxlIHRoZSBIVyB0cmFuc3BvcnQgdG8g Z2V0IHRoZSBtZXRhZGF0YSBkZWxpdmVyZWQNCj4gZnJvbSB0aGUgTklDIHRvIHRoZSBQTUQgaXRz ZWxmLCB3ZSB3b24ndCBiZSBhYmxlIHRvIHVzZSB0aGlzIHNldCBvZiBBUElzIHRvDQo+IGFjdHVh bGx5ICpuZWdvdGlhdGUqIHNvbWV0aGluZy4gVGhlIG9yZGVyIG9mIGludm9jYXRpb25zIHdpbGwg YmUgY29uZnVzaW5nIHRvDQo+IHRoZSBhcHBsaWNhdGlvbi4gSWYgdGhlIFBNRCBjYW4ndCBjb21i aW5lIHNvbWUgb2YgdGhlc2UgZmVhdHVyZXMsIGl0IHdvbid0IGJlDQo+IGFibGUgdG8gY29tbXVu aWNhdGUgdGhpcyBjbGVhcmx5IHRvIHRoZSBhcHBsaWNhdGlvbi4gSXQgd2lsbCBoYXZlIHRvIHNp bGVudGx5DQo+IGRpc3JlZ2FyZCBzb21lIG9mIHRoZSAicmVnaXN0ZXJlZCIgZmVhdHVyZXMuIEFu ZCB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IHdlDQo+IHByb2JhYmx5IHdhbnQgdG8gYXZvaWQuIFJp Z2h0Pw0KPiANCj4gQnV0IEkgdGVuZCB0byBhZ3JlZSB0aGF0IHRoZSBBUEkgdW5kZXIgcmV2aWV3 IGNvdWxkIGhhdmUgb25lIG1vcmUgKDR0aCkgZmxhZw0KPiB0byBuZWdvdGlhdGUgZGVsaXZlcnkg b2YgdGhpcyAiY3VzdG9tIiBtZXRhZGF0YSBmcm9tIHRoZSBOSUMgdG8gdGhlIFBNRC4gQXQNCj4g dGhlIHNhbWUgdGltZSwgZW5hYmxpbmcgZGVsaXZlcnkgb2YgdGhpcyBkYXRhIGZyb20gdGhlIFBN RCB0byB0aGUgYXBwbGljYXRpb24NCj4gd2lsbCByZW1haW4gaW4gdGhlIHJlc3BvbnNpYmlsaXR5 IGRvbWFpbiBvZg0KPiBydGVfZmxvd19keW5mX21ldGFkYXRhX3JlZ2lzdGVyKCkuDQo+IA0KDQpJ IGFncmVlIGFuZCB0aGluayB0aGlzIGlzIHRoZSBiZXN0IHNvbHV0aW9uLg0KDQo+ID4NCj4gPj4N Cj4gPj4+DQo+ID4+Pj4gU2F5LCB5b3UgaW5zZXJ0IGEgZmxvdyBydWxlIHRvIG1hcmsgc29tZSBw YWNrZXRzLiBUaGUgTklDLA0KPiA+Pj4+IGludGVybmFsbHkgKGluIHRoZQ0KPiA+Pj4+IGUtc3dp dGNoKSBhZGRzIHRoZSBtYXJrIHRvIG1hdGNoaW5nIHBhY2tldHMuIFllcywgaW4gdGhlIGJvdW5k YXJpZXMNCj4gPj4+PiBvZiB0aGUgTklDIEhXLCB0aGUgcGFja2V0cyBiZWFyIHRoZSBtYXJrIG9u IHRoZW0uIEl0IGhhcyBiZWVuIHNldCwNCj4gPj4+PiB5ZXMuIEJ1dCB3aGVuIHRpbWUgY29tZXMg dG8gKmRlbGl2ZXIqIHRoZSBwYWNrZXRzIHRvIHRoZSBob3N0LCB0aGUNCj4gPj4+PiBOSUMgKGF0 IGxlYXN0LCBpbiBuZXQvc2ZjDQo+ID4+Pj4gY2FzZSkgaGFzIHR3byBvcHRpb25zOiBlaXRoZXIg cHJvdmlkZSBvbmx5IGEgc21hbGwgY2h1bmsgb2YgdGhlDQo+ID4+Pj4gbWV0YWRhdGEgZm9yIGVh Y2ggcGFja2V0ICp0byB0aGUgaG9zdCosIHdoaWNoIGRvZXNuJ3QgaW5jbHVkZSBtYXJrDQo+ID4+ Pj4gSUQsIGZsYWcgYW5kIFJTUyBoYXNoLCBPUiwgYWx0ZXJuYXRpdmVseSwgcHJvdmlkZSB0aGUg ZnVsbCBzZXQgb2YNCj4gPj4+PiBtZXRhZGF0YS4gSW4gdGhlIGZvcm1lciBvcHRpb24sIHRoZSBt YXJrIGlzIHNpbXBseSBub3QgZGVsaXZlcmVkLg0KPiA+Pj4+IE9uY2UgYWdhaW46IGl0ICpoYXMg YmVlbiBzZXQqLCBidXQgc2ltcGx5IHdpbGwgbm90IGJlICpkZWxpdmVyZWQgdG8NCj4gPj4+PiB0 aGUNCj4gPj4gaG9zdCouDQo+ID4+Pj4NCj4gPj4+PiBTbywgdGhpcyBBUEkgaXMgYWJvdXQgbmVn b3RpYXRpbmcgKmRlbGl2ZXJ5KiBvZiBtZXRhZGF0YS4gSW4gcHVyZQ0KPiA+Pj4+IHRlY2huaWNh bCBzZW5zZS4gQW5kIHRoZSBzZXQgb2YgZmxhZ3MgdGhhdCB0aGlzIEFQSSByZXR1cm5zDQo+ID4+ Pj4gaW5kaWNhdGVzIHdoaWNoIGtpbmRzIG9mIG1ldGFkYXRhIHRoZSBOSUMgd2lsbCBiZSBhYmxl IHRvIGRlbGl2ZXINCj4gc2ltdWx0YW5lb3VzbHkuDQo+ID4+Pj4NCj4gPj4+PiBGb3IgZXhhbXBs ZSwgYXMgSSB1bmRlcnN0YW5kLCBpbiB0aGUgY2FzZSBvZiB0dW5uZWwgb2ZmbG9hZCwgTUxYNQ0K PiA+Pj4+IGNsYWltcyBSeCBtYXJrIGVudGlyZWx5IGZvciB0dW5uZWwgSUQgbWV0YWRhdGEsIHNv LCBpZiBhbg0KPiA+Pj4+IGFwcGxpY2F0aW9uIHJlcXVlc3RzICJNQVJLIHwgVFVOTkVMX0lEIiB3 aXRoIHRoaXMgQVBJLCB0aGlzIFBNRA0KPiA+Pj4+IHNob3VsZCBwcm9iYWJseSB3YW50IHRvIHJl c3BvbmQgd2l0aCBqdXN0ICJUVU5ORUxfSUQiLiBUaGUNCj4gPj4+PiBhcHBsaWNhdGlvbiB3aWxs IHNlZSB0aGUgcmVzcG9uc2UgYW5kIHJlYWxpc2UgdGhhdCwgZXZlbiBpZiBpdCBhZGRzDQo+ID4+ Pj4gaXRzICpvd24qICh1c2VyKSBhY3Rpb24gTUFSSyB0byBhIGZsb3cgYW5kIGlmIHRoZSBmbG93 IGlzIG5vdA0KPiA+Pj4+IHJlamVjdGVkIGJ5IHRoZSBQTUQsIGl0IHdvbid0IGJlIGFibGUgdG8g c2VlIHRoZSBtYXJrIGluIHRoZQ0KPiA+Pj4+IHJlY2VpdmVkIG1idWZzIChvciB0aGUgbWFyayB3 aWxsIGJlDQo+ID4+IGluY29ycmVjdCkuDQo+ID4+Pj4NCj4gPj4+IFNvIHdoYXQgc2hvdWxkIHRo ZSBhcHBsaWNhdGlvbiBkbyBpZiBvbiBzb21lIGZsb3dzIGl0IHdhbnRzIE1BUksgYW5kDQo+ID4+ PiBvbg0KPiA+PiBvdGhlciBGTEFHPw0KPiA+Pg0KPiA+PiBZb3UgbWVudGlvbmVkIGZsb3dzLCBz byBJJ2QgbGlrZSB0byBzdHJlc3MgdGhpcyBvdXQgb25lIG1vcmUgdGltZToNCj4gPj4gd2hhdCB0 aGlzIEFQSSBjYXJlcyBhYm91dCBpcyBzb2xlbHkgdGhlIHBvc3NpYmlsaXR5IHRvIGRlbGl2ZXIN Cj4gPj4gbWV0YWRhdGEgYmV0d2VlbiB0aGUgTklDIGFuZCB0aGUgaG9zdC4gVGhlIGhvc3QgPT0g dGhlIFBNRCAoKm5vdCoNCj4gYXBwbGljYXRpb24pLg0KPiA+Pg0KPiA+DQo+ID4gSSB1bmRlcnN0 YW5kIHRoYXQgeW91IGFyZSBvbmx5IHRhbGtpbmcgYWJvdXQgZW5hYmxpbmcgdGhlIGFjdGlvbiwN Cj4gPiBtZWFuaW5nIHRvIGxldCB0aGUgUE1EIGtub3cgdGhhdCBhdCBzb21lIHBvaW50IHRoZXJl IHdpbGwgYmUgYSBydWxlDQo+ID4gdGhhdCB3aWxsIHVzZSB0aGUgbWFyayBhY3Rpb24gZm9yIGV4 YW1wbGUuDQo+ID4gSXMgbXkgdW5kZXJzdGFuZGluZyBjb3JyZWN0Pw0KPiANCj4gTm90IHJlYWxs eS4gVGhlIGNhdXNhbCByZWxhdGlvbnNoaXBzIGFyZSBhcyBmb2xsb3dzLiBUaGUgYXBwbGljYXRp b24gY29tZXMgdG8NCj4gcmVhbGlzZSB0aGF0IGl0IHdpbGwgbmVlZCB0byB1c2UsIHNheSwgYWN0 aW9uIE1BUksgaW4gZmxvd3MuDQo+IFRoaXMsIGluIHR1cm4sIG1lYW5zIHRoYXQsIGluIG9yZGVy IHRvIGJlIGFibGUgdG8gYWN0dWFsbHkgc2VlIHRoZSBtYXJrIGluDQo+IHJlY2VpdmVkIHBhY2tl dHMsIHRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0byBlbnN1cmUgdGhhdCBhKSB0aGUgTklDIHdpbGwg YmUgYWJsZQ0KPiB0byBkZWxpdmVyIHRoZSBtYXJrIHRvIHRoZSBQTUQgYW5kIGIpIHRoYXQgdGhl IFBNRCB3aWxsIGJlIGFibGUgdG8gZGVsaXZlcg0KPiB0aGUgbWFyayB0byB0aGUgYXBwbGljYXRp b24uIEluIHBhcnRpY3VsYXIsIGluIHRoZSBjYXNlIG9mIFJ4IG1hcmssIChiKSBkb2Vzbid0DQo+ IG5lZWQgdG8gYmUgbmVnb3RpYXRlZCA9IGZpZWxkICJtYXJrIiBpcyBhbnl3YXkgcHJvdmlzaW9u ZWQgaW4gdGhlIG1idWYNCj4gc3RydWN0dXJlLCBzbyBubyBuZWVkIHRvIGVuYWJsZSBpdC4gQnV0 IChhKSBuZWVkcyB0byBiZSBuZWdvdGlhdGVkLiBIZW5jZSB0aGlzDQo+IEFQSS4NCj4gDQpQbGVh c2Ugc2VlIG15IGFib3ZlIGNvbW1lbnQgSSB0aGluayB3ZSBib3RoIGFncmVlLg0KDQo+ID4gSSBk b24ndCB1bmRlcnN0YW5kIHlvdXIgbGFzdCBjb21tZW50IGFib3V0IGhvc3QgPT0gUE1EIHNpbmNl IGF0IHRoZQ0KPiA+IGVuZCB0aGlzIHZhbHVlIHNob3VsZCBiZSBnaXZlbiB0byB0aGUgYXBwbGlj YXRpb24uDQo+IA0KPiBUd28gZGlmZmVyZW50IHN0ZXBzLCBPcmksIHR3byBkaWZmZXJlbnQgc3Rl cHMuIFRoZSBmaXJzdCBvbmUgaXMgdG8gZGVsaXZlciB0aGUNCj4gbWFyayBmcm9tIHRoZSBOSUMg dG8gdGhlIFBNRC4gQW5kIHRoZSBzZWNvbmQgb25lIGlzIHRvIGRlbGl2ZXIgdGhlIG1hcmsNCj4g ZnJvbSB0aGUgUE1EIHRvIHRoZSBhcHBsaWNhdGlvbi4gQXMgeW91IG1pZ2h0IHVuZGVyc3RhbmQs IG1idWZzIGdldCBmaWxsZWQNCj4gb3V0IG9uIHRoZSBzZWNvbmQgc3RlcC4gVGhhdCdzIGl0Lg0K PiANCj4gPg0KPiA+Pj4gICBGcm9tIERQREsgdmlld3BvaW50IGJvdGggb2YgdGhlbSBjYW4ndCBi ZSBzaGFyZWQgb24gdGhlIHNhbWUgcnVsZQ0KPiA+Pj4gKHRoZXkgYXJlIHVzaW5nIHRoZSBzYW1l IHNwYWNlIGluIG1idWYpIHNvIHRoZSBhcHBsaWNhdGlvbiB3aWxsIG5ldmVyDQo+ID4+PiBhc2sg Zm9yIGJvdGggb2YgdGhlbSBpbiB0aGUgc2FtZSBydWxlIGJ1dCBoZSBjYW4gb24gc29tZSBydWxl cyBhc2sgZm9yDQo+ID4+PiBtYXJrIHdoaWxlIG9uIG90aGVyIHJlcXVlc3QgZm9yIEZMQUcsIGV2 ZW4gaW4geW91ciBjb2RlIHlvdSBhZGRlZA0KPiBib3RoDQo+ID4+IG9mIHRoZW0uDQo+ID4+Pg0K PiA+Pj4gU28gd2hhdCBzaG91bGQgdGhlIFBNRCByZXR1cm4gaWYgaXQgY2FuIHN1cHBvcnQgYm90 aCBvZiB0aGVtIGp1c3Qgbm90DQo+ID4+PiBhdCB0aGUgc2FtZSBydWxlPw0KPiA+Pg0KPiA+PiBQ bGVhc2Ugc2VlIGFib3ZlLiBUaGlzIGlzIG5vdCBhYm91dCBydWxlcy4gVGhpcyBpcyBub3QgYWJv dXQgdGhlIHdheSBob3cNCj4gZmxhZw0KPiA+PiBhbmQgbWFyayBhcmUgcHJlc2VudGVkICpieSog dGhlIFBNRCAqdG8qIHRoZSBhcHBsaWNhdGlvbiBpbiBtYnVmcy4NCj4gPj4gU2ltdWx0YW5lb3Vz IHVzZSBvZiBhY3Rpb25zIEZMQUcgYW5kIE1BUksgaW4gZmxvd3MgbXVzdCBiZSBydWxlZCBvdXQN Cj4gYnkNCj4gPj4gcnRlX2Zsb3dfdmFsaWRhdGUoKSAvIHJ0ZV9mbG93X2NyZWF0ZSgpLiBUaGUg d2F5IGhvdyBmbGFnIGFuZCBtYXJrIGFyZQ0KPiA+PiAqcmVwcmVzZW50ZWQqIGluIG1idWZzIGJl bG9uZ3MgaW4gbWJ1ZiBsaWJyYXJ5IHJlc3BvbnNpYmlsaXR5IGRvbWFpbi4NCj4gPj4NCj4gPj4g Q29uc2lkZXIgdGhlIGZvbGxvd2luZyBvcGVyYXRpb25hbCBzZXF1ZW5jZToNCj4gPj4NCj4gPj4g MSkgVGhlIE5JQyBoYXMgYSBwYWNrZXQsIHdoaWNoIGhhcyBtZXRhZGF0YSBhc3NvY2lhdGVkIHdp dGggaXQ7DQo+ID4+IDIpIFRoZSBOSUMgdHJhbnNmZXJzIHRoaXMgcGFja2V0IHRvIHRoZSBob3N0 Ow0KPiA+PiAzKSBUaGUgUE1EIHNlZXMgdGhlIHBhY2tldCBhbmQgaXRzIG1ldGFkYXRhOw0KPiA+ PiA0KSBUaGUgUE1EIHJlcHJlc2VudHMgd2hhdGV2ZXIgYXZhaWxhYmxlIG1ldGFkYXRhIGluIG1i dWYgZm9ybWF0Lg0KPiA+Pg0KPiA+PiBGZWF0dXJlcyBuZWdvdGlhdGVkIGJ5IHZpcnR1ZSBvZiB0 aGlzIEFQSSAoZm9yIGluc3RhbmNlLCBGTEFHIGFuZCBNQVJLKQ0KPiA+PiBlbmFibGUgZGVsaXZl cnkgb2YgdGhlc2Uga2luZHMgb2YgbWV0YWRhdGEgYmV0d2VlbiBwb2ludHMgKDIpIGFuZCAoMyku DQo+ID4+DQo+ID4+IEFuZCB0aGUgcHJvYmxlbSBvZiBmbGFnIC8gbWFyayBjby1leGlzdGVuY2Ug aW4gbWJ1ZnMgc2l0cyBhdCBwb2ludCAoNCkuDQo+ID4+DQo+ID4+IC0+IENvbXBsZXRlbHkgZGlm ZmVyZW50IHByb2JsZW1zLCBpbiBmYWN0Lg0KPiA+Pg0KPiA+DQo+ID4gQWdyZWUuDQo+ID4NCj4g Pj4+DQo+ID4+PiBPbmUgb3B0aW9uIGlzIHRvIGRvY3VtZW50IHRoYXQgdGhlIHN1cHBvcnRlZCB2 YWx1ZXMgYXJlIG5vdCBwZXIgcnVsZQ0KPiA+Pj4gYnV0IGZvciB0aGUgZW50aXJlIHBvcnQuIEZv ciBleGFtcGxlIGluIHRoZSBleGFtcGxlIHlvdSBnYXZlIE1MWDUgd2lsbA0KPiA+Pj4gc3VwcG9y dCBtYXJrICsgZmxhZyBidXQgd2lsbCBub3Qgc3VwcG9ydCBtYXJrICsgdHVubmVsLg0KPiA+Pg0K PiA+PiBZZXMsIGZvciB0aGUgcG9ydC4gRmxvdyBydWxlcyBhcmUgYSBkb24ndCBjYXJlIHRvIHRo aXMgQVBJLg0KPiA+Pg0KPiA+Pj4NCj4gPj4+IEFsc28gY29uc2lkZXJpbmcgeW91ciBleGFtcGxl LCB0aGUgbmVnb3RpYXRpb24gbWF5IHJlc3VsdCBpbiBzdWJwYXINCj4gcmVzdWx0Lg0KPiA+Pj4g dGFraW5nIHlvdXIgZXhhbXBsZSB0aGUgUE1EIHJldHVybmVkICBUVU5ORUxfSUQgbWF5YmUgYXBw bGljYXRpb24NCj4gPj4+IHdvdWxkIHByZWZlciB0byBoYXZlIHRoZSBtYXJrIGFuZCBub3QgdGhl IFRVTk5FTF9JRC4gSSB1bmRlcnN0YW5kDQo+IHRoYXQNCj4gPj4+IGFwcGxpY2F0aW9uIGNhbiBj aGVjayBhbmQgdHJ5IGFnYWluIHdpdGgganVzdCB0aGUgTUFSSy4NCj4gPj4NCj4gPj4gRXhhY3Rs eS4gVGhlIEFwcGxpY2F0aW9uIGNhbiByZXBlYXQgbmVnb3RpYXRpb24gd2l0aCBqdXN0IE1BUksu IElzIHRoZXJlDQo+IGFueQ0KPiA+PiBwcm9ibGVtIHdpdGggdGhhdD8NCj4gPj4NCj4gPg0KPiA+ IEkgdW5kZXJzdGFuZCB0aGF0IHRoZSBhcHBsaWNhdGlvbiBjYW4gbmVnb3RpYXRlIGFnYWluIGFu ZCBhZ2Fpbi4NCj4gPiBJIGp1c3QgZG9uJ3QgbGlrZSB0aGF0IHRoZSBQTUQgaGFzIGxvZ2ljIGFu ZCBzZWxlY3RzIHdoYXQgaGUgdGhpbmtzIHdpbGwgYmUNCj4gYmVzdC4NCj4gPg0KPiA+IEkgd2Fu dGVkIHRvIHN1Z2dlc3QgdGhhdCB0aGUgUE1EIHdpbGwganVzdCB0ZWxsIHdoYXQgYXJlIHRoZSBj b25mbGljdHMgYW5kDQo+IHRoZSBhcHBsaWNhdGlvbg0KPiA+IHdpbGwgbmVnb3RpYXRlIGFnYWlu IGJhc2VkIG9uIGl0cyBsb2dpYy4NCj4gDQo+IFdlbGwsIEknbSBub3Qgc2F5aW5nIHRoYXQgbGV0 dGluZyB0aGUgUE1EIGRlY2lkZSBvbiB0aGUgb3B0aW1hbCBmZWF0dXJlDQo+IHN1YnNldCBpcyB0 aGUgb25seSByZWFzb25hYmxlIE1PLiBCdXQgaXQgc2ltcGxpZmllcyB0aGUgbmVnb3RpYXRpb24N Cj4gcHJvY2VkdXJlIGEgbG90LiBDb252ZXlpbmcgY29uZmxpY3RzIGFuZCBmZWF0dXJlIGludGVy LWRlcGVuZGVuY2llcyB0bw0KPiB0aGUgYXBwbGljYXRpb24gbWlnaHQgYmUgcmF0aGVyIGNvbXBs ZXggYW5kIHByb25lIHRvIGVycm9ycy4NCj4gDQo+IEF0IHRoaXMgcG9pbnQgSSBiZWxpZXZlIGl0 J3MgaW1wb3J0YW50IHRvIGNsYXJpZnk6IHRoZSBvcmlnaW5hbCBpbnRlbnQNCj4gaXMgdG8gYXNz dW1lIHRoYXQgdGhlIFBNRCB3aWxsIGZpcnN0IGNvbnNpZGVyIGVuYWJsaW5nIGFsbCByZXF1ZXN0 ZWQNCj4gZmVhdHVyZXMuIE9ubHkgaW4gdGhlIGNhc2Ugd2hlbiBpdCBmYWlscyB0byBkbyBzbyBz aG91bGQgaXQgY29tZSB1cCB3aXRoDQo+IHRoZSBvcHRpbWFsIHN1YnNldC4NCj4gDQoNCkkgdW5k ZXJzdGFuZCBteSBpc3N1ZSBpcyB0aGUgdGhlIGxhdGVyIGNhc2UgYW5kIGhvdyBjYW4gUE1EIGtu b3cgd2hhdCBpcw0KdGhlIG9wdGltYWwgc3Vic2V0Lg0KDQo+ID4NCj4gPj4+IFlvdSBhcmUgaW5z ZXJ0aW5nIGxvZ2ljIHRvIHRoZSBQTUQsIG1heWJlIHRoZSBmdW5jdGlvbiBzaG91bGQganVzdA0K PiA+Pj4gZmFpbCBtYXliZSByZXR1cm5pbmcgdGhlIGNvbmZsaWN0aW5nIGl0ZW1zPw0KPiA+Pg0K PiA+PiBXaHkgcmV0dXJuIGNvbmZsaWN0aW5nIGl0ZW1zPyBUaGUgb3B0aW1hbCBzdWJzZXQgKGZy b20gdGhlIFBNRCdzDQo+ID4+IHBlcnNwZWN0aXZlKSBzaG91bGQgYmUgcmV0dXJuZWQuIEl0J3Mg YSBzaWx2ZXIgbGluaW5nLiBJbiB0aGUgZW5kLCB0aGUNCj4gYXBwbGljYXRpb24NCj4gPj4gY2Fu IGxlYXJuIHdoaWNoIGZlYXR1cmVzIGNhbiBiZSBlbmFibGVkIGFuZCBpbiB3aGF0IGNvbWJpbmF0 aW9ucy4gQW5kIGl0DQo+ID4+IGNhbiByZWx5IG9uIHRoZSBvdXRjb21lIG9mIHRoZSBuZWdvdGlh dGlvbiBwcm9jZXNzLg0KPiA+Pg0KPiA+IFRoYXQgaXMgbXkgcG9pbnQgdGhpcyBpcyBQTUQgcGVy c3BlY3RpdmUsIG5vdCB0aGUgYXBwbGljYXRpb24uDQo+ID4gaG93IGNhbiBhIFBNRCBkZWZpbmUg YW4gb3B0aW1hbCBzdWJzZXQ/IEhvdyBjYW4gaXQga25vdyB3aGF0IGlzIG1vcmUNCj4gPiBpbXBv cnRhbnQgdG8gdGhlIGFwcGxpY2F0aW9uPw0KPiANCj4gSG93IGRvZXMgImxzIiBjb21tYW5kIGtu b3cgdGhlIG9wdGltYWwgc29ydCBtb2RlPyBXaHkgZG9lcyBpdCBwcmVmZXINCj4gc29ydGluZyBi eSBuYW1lIG92ZXIgc29ydGluZyBieSBkYXRlPyBUaGFua3MgdG8gaXRzIG9wdGlvbnMsIGl0IGFs bG93cw0KPiB0aGUgdXNlciB0byBleHByZXNzIHRoZWlyIG93biBwcmVmZXJlbmNlLiBTbyBkb2Vz IHRoZSBBUEkgaW4gcXVlc3Rpb24uDQo+IElmIHRoZSBhcHBsaWNhdGlvbiBrbm93cyB0aGF0IHR1 bm5lbCBvZmZsb2FkIGlzIG1vcmUgaW1wb3J0YW50IHRvIGl0DQo+IChjb21wYXJlZCB0byBNQVJL LCBmb3IgaW5zdGFuY2UpLCBpdCBjYW4gcmVxdWVzdCBqdXN0IFRVTk5FTF9JRC4gV2h5DQo+IGNv bXBsaWNhdGUgdGhpcz8NCj4gDQpJIGRvbid0IGFncmVlIHdpdGggeW91ciBleGFtcGxlLCB0aGUg ImxzIiAgaXMgY2xlYXJseSBkZWZpbmVkIGFuZCBlYWNoDQp0aW1lIHlvdSBydW4gaXQgeW91IGdl dCB0aGUgc2FtZSBvcmRlci4gSXQgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiB2ZXJzaW9ucy4NCldo aWxlIGluIHRoaXMgY2FzZSB0aGVyZSB3aWxsIGJlIGNoYW5nZSBiZXR3ZWVuIHZlcnNpb25zLg0K VGhpbmsgYWJvdXQgaXQgdGhpcyB3YXkgbGV0cyBhc3N1bWUgdGhhdCBQTUQgZG9lc24ndCBzdXBw b3J0IHRoZSBUVU5ORUxfSUQNCnNvIHRoZSBhcHBsaWNhdGlvbiByZXF1ZXN0IGF0IHN0YXJ0dXAg Ym90aCBUVU5ORUxfSUQgYW5kIE1BUksuDQpQTUQgcmV0dXJuZXMgb25seSBNQVJLLCBhcHBsaWNh dGlvbiBjaGVja3MgYW5kIHNlZSB0aGF0IHRoZSBQTUQNCmRpZG4ndCByZXR1cm4gdGhlIFRVTk5F TF9JRCBzbyBpdCBuZWdvdGlhdGUgYWdhaW4gb25seSB0byBnZXQgdGhhdCBub3RoaW5nDQppcyBz dXBwb3J0ZWQsIHRoZW4gYXBwbGljYXRpb24gdHJ5IG9ubHkgdGhlIG1hcmsgYW5kIHRvIHRoaXMg dGhlIFBNRCBhZ3JlZS4NCg0KQWdhaW4gdGhpcyBpcyBub3QgY3JpdGljYWwgdG8gbWUuIEJ1dCBr ZWVwIGl0IGluIG1pbmQuDQoNCj4gPiBBbHNvLCB0aGUgUE1EIGxvZ2ljIGlzIGludGVybmFsIHNv IGlmIGZvciBzb21lIHJlYXNvbg0KPiA+IHRoZSBQTUQgc2VsZWN0ZWQgdGhlIGJlc3QgZm9yIHRo ZSBhcHBsaWNhdGlvbiBieSBjaGFuY2UsIHNvIHRoZSBhcHBsaWNhdGlvbg0KPiBsZWFybnMNCj4g PiB0aGF0IHRoaXMgaXMgYSBnb29kIHZhbHVlIGZvciBoaW0uIEEgcmVsZWFzZSBsYXRlciB0aGUg aW50ZXJuYWwgUE1EIGxvZ2ljDQo+IGNoYW5nZXMNCj4gPiBmb3IgZXhhbXBsZSwgYSBuZXcgZmVh dHVyZSB3YXMgYWRkZWQsIG90aGVyIGN1c3RvbWVyIHJlcXVlc3RzLg0KPiA+IHNpbmNlIHRoaXMg aXMgUE1EIHRoZSBvcmlnaW5hbCBhcHAgaXMgbm90IGF3YXJlIG9mIHRoaXMgY2hhbmdlIGFuZCBt YXkgZmFpbC4NCj4gDQo+IFRoZSBzYW1lIGFyZ3VtZW50YXRpb24gY2FuIGVxdWFsbHkgYXBwbHkg dG8gZGVmYXVsdCBSU1MgdGFibGUsIGZvcg0KPiBleGFtcGxlLiBXaGF0IGlmIGFuIGFwcGxpY2F0 aW9uIGdldHMgYWNjdXN0b21lZCB0byB0aGUgcm91bmQtcm9iaW4gdGFibGUNCj4gYmVpbmcgZGVm YXVsdCBpbiBzb21lIHNwZWNpZmljIFBNRCAoYW5kIHRoZSBQTUQgbWFpbnRhaW5lcnMgY2hhbmdl DQo+IGRlZmF1bHQgUlNTIHRhYmxlIG91dCBvZiBhIHN1ZGRlbik/IE9vcHMhDQo+IA0KWWVzIGJ1 dCB0aGlzIGlzIHdoeSB0aGUgdXNlIGhhcyB0aGUgb3B0aW9uIHRvIHNlbGVjdCB0aGUgbW9kZSwN CmluIGNhc2Ugb2YgUlNTIGlmIHRoZSByZXF1ZXN0ZWQgbW9kZSBpc24ndCBzdXBwb3J0ZWQgdGhl IFBNRCBmYWlscyBub3QNCmp1c3Qgc2VsZWN0IGRpZmZlcmVudCBhbGdvcml0aG0gcmlnaHQ/DQoN Cj4gVGhlIHRydXRoIGlzIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHNob3VsZG4ndCBiaW5kIGl0c2Vs ZiB0byBzb21lIHNwZWNpZmljDQo+IHZlbmRvciAvIFBNRC4gSW4gYW55IGNhc2UuIEhlbmNlIHRo ZSBuZWdvdGlhdGlvbiBwcm9jZXNzLiBJdCdzIGp1c3QgYQ0KPiBidWlsZGluZyBibG9jayBmb3Ig c29tZSBhdXRvbWF0aW9uIGluIHRoZSBhcHBsaWNhdGlvbi4NCj4gDQo+ID4NCj4gPiBXZSBib3Ro IGFncmVlIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBjaGVjayB0aGUgcmVzdWx0IGFuZCBy ZW5lZ290aWF0ZQ0KPiBpZiBuZWVkZWQNCj4gPiBJIG9ubHkgc3VnZ2VzdGVkIHRoYXQgdGhlIFBN RCB3aWxsIG9ubHkgcmV0dXJuIGVycm9yIGFuZCBub3QgYXNzdW1lIGhlDQo+IGtub3dzIGJlc3Qu DQo+IA0KPiBJIGJlbGlldmUgd2Ugc2hvdWxkIGdpdmUgdGhpcyBtb3JlIHRob3VnaHQuIE1heWJl IEFuZHJldyBjYW4gam9pbiB0aGlzDQo+IGNvbnZlcnNhdGlvbi4NCj4gDQpJIGZ1bGx5IGFncmVl IGxldHMgc2xlZXAgb24gaXQsIA0KVGhpcyB3aWxsIG5vdCBiZSBhIGJsb2NrZXIuDQoNCj4gPg0K PiA+DQo+ID4+Pg0KPiA+Pj4NCj4gPj4+DQo+ID4+Pj4gQnV0IHNvbWUgb3RoZXIgUE1EcyAobmV0 L3NmYywgZm9yIGluc3RhbmNlKSBjbGFpbSBvbmx5IGEgc21hbGwgZnJhY3Rpb24NCj4gb2YNCj4g Pj4gYml0cw0KPiA+Pj4+IGluIFJ4IG1hcmsgdG8gZGVsaXZlciB0dW5uZWwgSUQgaW5mb3JtYXRp b24uIFJlbWFpbmluZyBiaXRzIGFyZSBzdGlsbA0KPiA+PiBhdmFpbGFibGUNCj4gPj4+PiBmb3Ig ZGVsaXZlcnkgb2YgKnVzZXIqIG1hcmsgSUQuIFBsZWFzZSBzZWUgYW4gZXhhbXBsZSBhdA0KPiA+ Pj4+IGh0dHBzOi8vcGF0Y2hlcy5kcGRrLm9yZy9wcm9qZWN0L2RwZGsvcGF0Y2gvMjAyMTA5Mjky MDU3MzAuNzc1LTItDQo+ID4+Pj4gaXZhbi5tYWxvdkBva3RldGxhYnMucnUvDQo+ID4+Pj4gLiBJ biB0aGlzIGNhc2UsIHRoZSBQTUQgbWF5IHdhbnQgdG8gcmV0dXJuIGJvdGggZmxhZ3MgaW4gdGhl IHJlc3BvbnNlOg0KPiA+Pj4+ICJNQVJLIHwgVFVOTkVMX0lEIi4gVGhpcyB3YXksIHRoZSBhcHBs aWNhdGlvbiBrbm93cyB0aGF0IGJvdGgNCj4gZmVhdHVyZXMNCj4gPj4+PiBhcmUgZW5hYmxlZCBh bmQgYXZhaWxhYmxlIGZvciB1c2UuDQo+ID4+Pj4NCj4gPj4+PiBOb3cuIEkgYW50aWNpcGF0ZSBt b3JlIHF1ZXN0aW9ucyBhc2tpbmcgd2h5IHdvdWxkbid0IHdlIHByZWZlciBmbG93DQo+IEFQSQ0K PiA+Pj4+IHRlcm1pbm9sb2d5IG9yIHdoeSB3b3VsZG4ndCB3ZSBhZGQgYW4gQVBJIGZvciBuZWdv dGlhdGluZyBzdXBwb3J0IGZvcg0KPiA+Pj4+IG1ldGFkYXRhICphY3Rpb25zKiBhbmQgbm90IGp1 c3QgbWV0YWRhdGEgKmRlbGl2ZXJ5Ki4gVGhlcmUncyBhbg0KPiBhbnN3ZXIuDQo+ID4+Pj4gQWx3 YXlzIGhhcyBiZWVuLg0KPiA+Pj4+DQo+ID4+Pj4gVGhlIHRoaW5nIGlzLCB0aGUgdXNlIG9mICph Y3Rpb25zKiBpcyB2ZXJ5IGNvbXBsaWNhdGVkLiBGb3IgZXhhbXBsZSwgdGhlDQo+ID4+IFBNRA0K PiA+Pj4+IG1heSBzdXBwb3J0IGFjdGlvbiBNQVJLIGZvciAidHJhbnNmZXIiIGZsb3dzIGJ1dCBu b3QgZm9yIG5vbi0NCj4gInRyYW5zZmVyIg0KPiA+Pj4+IG9uZXMuIEFsc28sIHNpbXVsdGFuZW91 cyB1c2Ugb2YgbXVsdGlwbGUgZGlmZmVyZW50IG1ldGFkYXRhIGFjdGlvbnMNCj4gbWF5DQo+ID4+ IG5vdA0KPiA+Pj4+IGJlIHBvc3NpYmxlLiBBbmQsIGxhc3QgYnV0IG5vdCBsZWFzdCwgaWYgd2Ug Zm9yY2UgdGhlIGFwcGxpY2F0aW9uIHRvIGNoZWNrDQo+ID4+Pj4gc3VwcG9ydCBmb3IgKmFjdGlv bnMqIG9uIGFjdGlvbi1hZnRlci1hY3Rpb24gYmFzaXMsIHRoZSBvcmRlciBvZiBjaGVja3MNCj4g d2lsbA0KPiA+PiBiZQ0KPiA+Pj4+IHZlcnkgY29uZnVzaW5nIHRvIGFwcGxpY2F0aW9ucy4NCj4g Pj4+Pg0KPiA+Pj4+IFByZXZpb3VzbHksIGluIHRoaXMgdGhyZWFkLCBUaG9tYXMgc3VnZ2VzdGVk IHRvIGdvIGZvciBleGFjdGx5IHRoaXMgdHlwZQ0KPiBvZg0KPiA+Pj4+IEFQSSwgdG8gY2hlY2sg c3VwcG9ydCBmb3IgYWN0aW9ucyBvbmUtYnktb25lLCB3aXRob3V0IGFueSBjb250ZXh0DQo+ID4+ Pj4gKCJ0cmFuc2ZlciIgLyBub24tInRyYW5zZmVyIikuIEknbSBhZnJhaWQsIHRoaXMgd29uJ3Qg YmUgT0suDQo+ID4+Pj4NCj4gPj4+ICsxIHRvIGtlZXBpbmcgaXQgYXMgYSBzZXBhcmF0ZWQgQVBJ LiAoSSBhZ3JlZSBhY3Rpb25zIGxpbWl0YXRpb24gYXJlIHZlcnkNCj4gPj4gY29tcGxleCBtZXRy aXgpDQo+ID4+Pg0KPiA+Pj4+Pg0KPiA+Pj4+PiBJbiBhbnkgY2FzZSBJIHRoaW5rIHRoaXMgaXMg Z29vZCBpZGVhIGFuZCBJIHdpbGwgc2VlIGhvdyB3ZSBjYW4gYWRkIGENCj4gPj4+Pj4gbW9yZSBn ZW5lcmljIGFwcHJvYWNoIG9mIHRoaXMgQVBJIHRvIHRoZSBuZXcgQVBJIHRoYXQgSSdtIGdvaW5n IHRvDQo+ID4+IHByZXNlbnQuDQo+ID4+Pj4+DQo+ID4+Pj4+DQo+ID4+Pj4+Pj4gU28gbm8gYnJl YWthZ2VzIHdpdGggdGhpcyBBUEkuDQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4g UGxlYXNlIHNlZSBtb3JlIGNvbW1lbnRzIGlubGluZS4NCg0KDQpbU25pcF0NCg0KPiA+IFllcywg bGlrZSBJIHNhaWQgYWJvdmUgSSBkb24ndCBzZWUgYSBkaWZmZXJlbmNlIGJldHdlZW4gbWV0YWRh dGENCj4gPiBhbmQgbWFyaywgYXQgbGVhc3Qgbm90IGZyb20gdGhlIGFwcGxpY2F0aW9uIHVzYWdl Lg0KPiA+IEkgYXNzdW1lIHlvdSBuZWVkIHRoaXMgaW5mbyBhdCBkZXZpY2Ugc3RhcnQgYW5kIGJ5 IGRlZmluaXRpb24NCj4gPiB0aGUgcmVnaXN0cmF0aW9uIHNob3VsZCBoYXBwZW4gYmVmb3JlLiAo bWJ1ZiBzaG91bGQgYmUgY29uZmlndXJlZA0KPiA+IGJlZm9yZSBzdGFydCkNCj4gDQo+IFBsZWFz ZSBzZWUgbXkgdGhvdWdodHMgYWJvdXQgZHluYW1pYyBmaWVsZHMgYWJvdmUuDQo+IA0KPiA+DQo+ ID4+IFdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB3ZSBhbGwgcmVhY2ggYW4gYWdyZWVtZW50Lg0K PiA+Pg0KPiA+DQo+ID4gKzEgSSB0aGluayB3ZSBjYW4gYWdyZWUgdGhhdCB0aGVyZSBpcyBhIG5l ZWQgZm9yIGxldHRpbmcgdGhlIFBNRA0KPiA+IGtub3cgYmVmb3JlIHRoZSBzdGFydCB0aGF0IHNv bWUgYWN0aW9uIHdpbGwgYmUgdXNlZC4NCj4gPg0KPiA+IEFuZCBJJ20gc29ycnkgaWYgSSBzb3Vu ZCBwaWNreSBhbmQgaGFyZCwgdGhpcyBpcyBub3QgbXkgaW50ZW50aW9uLg0KPiA+IEknbSBhbHNv IGRvaW5nIG15IGJlc3QgdG8gcmV2aWV3IHRoaXMgYXMgZmFzdCBhcyBJIGNhbi4NCj4gPiBNeSBv cGVuIGlzc3VlcyBhbmQgcHJpb3JpdGllczoNCj4gPiAxLiB0aGUgQVBJIGJyZWFrYWdlIHRoZSBw b3NzaWJsZSBzb2x1dGlvbiBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIHJlc3Qgb2YgdGhlDQo+IFBN RHMgLyB1cGRhdGUgZG9jDQo+ID4gdG8gc2F5IHRoYXQgaWYgdGhlIGZ1bmN0aW9uIGlzIG5vdCBz dXBwb3J0ZWQgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBhc3N1bWUNCj4gdGhhdA0KPiA+IGl0IGNh biBzdGlsbCB1c2UgdGhlIG1hcmsgLyBmbGFnLiAtLSBibG9ja2VyIHRoaXMgbXVzdCBiZSByZXNv bHZlZC4NCj4gDQo+IEkgc2VlLg0KPiANCj4gPiAyLiBmdW5jdGlvbiBuYW1lLiBteSBtYWluIGlz c3VlIGlzIHRoYXQgbWV0YWRhdGEgc2hvdWxkIGJlIGp1c3QgbGlrZSBtYXJrDQo+ID4gbWF5YmUg dGhlIHNvbHV0aW9uIGNhbiBiZSBhZGRpbmcgbWV0YWRhdGEgZmxhZyB0byB0aGlzIGZ1bmN0aW9u Lg0KPiA+IHRoZSBkcmF3YmFjayBpcyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBuZWVkcyB0byBjYWxs cyB0d28gZnVuY3Rpb25zIHRvDQo+IGNvbmZpZ3VyZQ0KPiA+IG1ldGFkYXRhLiAtLSBoaWdoIHBy aW9yaXR5IGJ1dCBpZiB5b3UgY2FuIGdpdmUgbWUgZ29vZCByZWFzb25pbmcgbm90IGp1c3QNCj4g PiB3ZSBkb24ndCBuZWVkIHRvIHJlZ2lzdGVyIHRoZSBtYXJrIEkgZ3Vlc3MgSSB3aWxsIGJlIE8u Sy4NCj4gDQo+IFBsZWFzZSBzZWUgbXkgdGhvdWdodHMgYWJvdmUuIFRoaXMgQVBJIG5lZ290aWF0 ZXMgbWV0YWRhdGEgZGVsaXZlcnkgb24NCj4gdGhlIHBhdGggYmV0d2VlbiB0aGUgTklDIGFuZCB0 aGUgUE1ELiBUaGUgbWV0YWRhdGEgbWJ1ZiByZWdpc3RlciBBUEkNCj4gZG9lcyB0aGlzIG9uIHRo ZSBwYXRoIGJldHdlZW4gdGhlIFBNRCBhbmQgdGhlIGFwcGxpY2F0aW9uLiBTbyBubw0KPiBjb250 cmFkaWN0aW9uIGhlcmUuDQo+IA0KDQpTZWUgbXkgY29tbWVudHMgYWJvdmUgSSB0aGluayB3ZSBo YXZlIGFuIGFncmVlZCBzb2x1dGlvbi4NCg0KPiA+IDMuIElmIFBNRCBoYXMgaW50ZXJuYWwgbG9n aWMgaW4gY2FzZSBvZiBjb25mbGljdCBvciBub3QuDQo+ID4gUGxlYXNlIHRoaW5rIGFib3V0IGl0 LiAtLSBsb3cgcHJpbyBJIHdpbGwgYWdyZWUgdG8gd2hhdCB5b3UgZGVjaWRlLg0KPiA+IGJ1dCBp ZiB5b3UgZGVjaWRlIHRoYXQgUE1EIHdpbGwgaGF2ZSBpbnRlcm5hbCBsb2dpYyB0aGVuIHRoaXMg bXVzdCBiZQ0KPiBkb2N1bWVudGVkDQo+ID4gc28gdGhlIGFwcGxpY2F0aW9uIHdpbGwga25vdyBu b3QgdG8gcmVseSBvbiB0aGUgcmVzdWx0cy4NCj4gDQo+IFBsZWFzZSBzZWUgbXkgcmVwbHkgYWJv dmUuIFRoZSBhcHBsaWNhdGlvbiBjYW4gcmVseSBvbiB0aGUgb3V0Y29tZSBvZg0KPiB0aGUgbmVn b3RpYXRpb24gKHRoZSBsYXN0IG5lZ290aWF0ZWQgc3Vic2V0IG9mIGZlYXR1cmVzKSwgYnV0IGl0 IHNob3VsZA0KPiBrbm93IHRoYXQgaWYgaXQgZGlzYWdyZWVzIHdpdGggdGhlIHN1Z2dlc3RlZCBm ZWF0dXJlIHN1YnNldCwgaXQgY2FuDQo+IHJlLW5lZ290aWF0ZS4gQWxsIGZhaXIgYW5kIHNxdWFy ZS4NCj4gDQoNCkxpa2UgSSBzYWlkIGFib3ZlIHRoaW5rIGFib3V0IGl0IHNvbWUgbW9yZSwgSSB3 aWxsIGFsc28gdGhpbmsgaW4gYW55DQpjYXNlIHRoaXMgd2lsbCBub3QgYmUgYSBibG9ja2VyLg0K DQpCZXN0LA0KT3JpDQo+ID4NCj4gPiBCZXN0LA0KPiA+IE9yaQ0KPiA+DQo+ID4+Pg0KPiA+Pj4g QmVzdCwNCj4gPj4+IE9yaQ0KPiA+Pj4+Pg0KPiA+Pj4+Pj4gQW5kcmV3Lg0KPiA+Pj4+PiBCZXN0 LA0KPiA+Pj4+PiBPcmkNCj4gPj4+Pj4NCj4gPj4+Pg0KPiA+Pj4+IC0tDQo+ID4+Pj4gSXZhbiBN DQo+ID4+DQo+ID4+IC0tDQo+ID4+IEl2YW4gTQ0KPiANCj4gLS0NCj4gSXZhbiBNDQo=