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 0D519A0350; Tue, 23 Jun 2020 16:52:19 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id EB4451D68F; Tue, 23 Jun 2020 16:52:18 +0200 (CEST) Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70040.outbound.protection.outlook.com [40.107.7.40]) by dpdk.org (Postfix) with ESMTP id 873351D675 for ; Tue, 23 Jun 2020 16:52:17 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bOkhmvOLvcz2FrMftpcxwKLnm/XZvRTAlWml9k/DBb2Idj30p67gZRXubl7kOWBB27L/muCcXHijUyBj2ReE2IloFWNN4IJ/aCj9nfzY0j0MmAcfIAk72YhQ1daMrfK/4OZsnuEGgL8VK/m1DkN7gHPwb8An1U9N9ANtHRYELo3Fbg4jWslI0J0QHyi7/u8kWulSS97tmtJhL5yIKI3Rx1sLeWU3GamT/7Ova/y7agQUpGzbacwl8H5rFVCWLa7xs/yls/k0DDtSCtvvgaPGFWjuICjlWfegVEuiAfgKFmhsCxw3+wPMz+5w2hozjXiJroOuFvUlmoPZ9oSkIBy6kA== 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=D4kfEXpRW0VUP/2G3s60xJkzaj8+MSBU1Ptb5zvSyso=; b=GgeLmtFNfvHCx6Y8waHKQ6XaW/Rtlj/ha37DUz56fMlwZyXDljAw56BvPkMajNVcagQjweyPLTvJ8Q8VgMgThW6f98Ri25jqDnjQvYd+BJcdrvCCJHSzEnjq88m872LMbm7OVwUO8N4Qix2/YVC6ICPV6aUjX6190qwrs2PISgEJB4QiyUJpfU9CxH3rJzbUGS84COvTEDeRh6wMG1g4lY5beIyMogAWgZrqB4vWgSresXAXfx1dThqindcqXH6EF9ne/Zc3Cy3SqghL2To1FudfngyJ56VMXnPi932wIMZPYd4vsSOc++3Gyuc3fAJWb3Xs945rXik8d+877AEmlA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com; dkim=pass header.d=mellanox.com; arc=none 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=D4kfEXpRW0VUP/2G3s60xJkzaj8+MSBU1Ptb5zvSyso=; b=JhSg7bwav8UUVLYhFgDHGHEouZ+B4PNW2EhBsWP+XjT0yRXRUlTSZa7z1a/bV+C+dOzc656RTI7aHHokqCt8Ve8vjWyWmIOyqmUJ8PJ3DXd2SQEWaaw9PrLyyz+pFgtPENa3/IBaBX6X/xzM5tSz+GhA4KHoYaIOszllPgXC9wQ= Received: from AM0PR0502MB4019.eurprd05.prod.outlook.com (2603:10a6:208:f::11) by AM0PR0502MB3730.eurprd05.prod.outlook.com (2603:10a6:208:17::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3109.22; Tue, 23 Jun 2020 14:52:16 +0000 Received: from AM0PR0502MB4019.eurprd05.prod.outlook.com ([fe80::b189:d782:4c74:7998]) by AM0PR0502MB4019.eurprd05.prod.outlook.com ([fe80::b189:d782:4c74:7998%7]) with mapi id 15.20.3109.027; Tue, 23 Jun 2020 14:52:16 +0000 From: Matan Azrad To: Maxime Coquelin , Xiao Wang CC: "dev@dpdk.org" Thread-Topic: [PATCH v1 3/4] vhost: improve device ready definition Thread-Index: AQHWRY1+WLgdYR0e1E+Ph0x8zoCWqqjfjwYAgAA4hqCAAC+iAIACniawgAG2/YCAAAcQgIAAB3QAgAAM1OCAAC/AgIAACy5AgAAclQCAAAzpQIAAEnUAgAEB7XCAABMiAIAAIg9ggAArKoCAAAwJcA== Date: Tue, 23 Jun 2020 14:52:16 +0000 Message-ID: References: <1592497686-433697-1-git-send-email-matan@mellanox.com> <74f35cd8-3543-ba1c-0dc7-1502599e6cf7@redhat.com> <197079f4-7436-4f9e-7b8e-b8cb42042ffb@redhat.com> <62311463-2bc1-7f8b-1ec0-da31418e1d75@redhat.com> <6a2d8143-e48d-cdef-5b16-1c340d99b1ae@redhat.com> <3572c65c-394c-496f-483c-a57019550339@redhat.com> <7c6bd0b2-8657-3c34-ab1f-f397c39ea2ec@redhat.com> In-Reply-To: <7c6bd0b2-8657-3c34-ab1f-f397c39ea2ec@redhat.com> Accept-Language: en-US, he-IL Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=none action=none header.from=mellanox.com; x-originating-ip: [77.124.38.174] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: a80c7ddf-18fb-4e87-3d60-08d817850580 x-ms-traffictypediagnostic: AM0PR0502MB3730: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 04433051BF x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: wI35HeKfyoisBT1rS6YVUriw9FVvs4qsnscgG3tjxn5CT7Zy5O27oeW4yNgNsuvMFBgwIcdgKovXMLWMhu7nregN5uZmH/hzEU9ARjAnnWPG+5WqALCfHoJ2zhGpGuYjsVfoI7CKSrMOPBQcoDasx+CI7BUfjQrTc+lr20XDOy7PfkNjYo1eAA1MXirueI6+a1zBXDXCWdFefIhqq4mSgMiamnF+Mp11QCD9nxiCKqf7cv9GLYLBDyvjVgNzfSmXV11Ga/N4nRXkG0YaYkLBOU5nLyh234NBPqn6tlKVXmidWx9OsVOUP3fbmWXZ2smSdCdRs1tW9iMKVDEa4ou3IQ== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM0PR0502MB4019.eurprd05.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(366004)(71200400001)(2906002)(498600001)(6506007)(53546011)(33656002)(55016002)(30864003)(110136005)(9686003)(83380400001)(26005)(7696005)(186003)(8676002)(86362001)(8936002)(66946007)(66446008)(4326008)(76116006)(66476007)(5660300002)(52536014)(64756008)(66556008); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: AmtRoZoPUxScjJ5dyEN6tsG4pkV5QMpBQjy7z7m+1T8vBDPa56VyGAOnnNaIsYg4BFZ0+A5efmLKdaODGxyAWzbKHSIkNbVkvLzGfkeD4ItO8WrRbm/GaHGNFW50scZhAf/tOflM86bVCZU5WjsMvckngV6zWzalXEVvoNwKcPcoP7BD3CwM7ULGQfdUC1VQfTQ7Hsbxej1WdBohGMLNhyzsF9CJZtXn65G91Z9hlShV67pih+3Xz9JTUesWCDKF+RbGKbGA+/7XZ09vUky1/dnpAXivbmsER0rfWBSDhUqTkxXp5Zk0k0bRFatV3xhHhj0E9inbHxUMInFnlK+Xd4Zuv/3gKp764mF5LNQhlbSQgRlr626d67bpAsF0bdZhDicT4Wsh+d0Zoi4kcSPLI1jLer/9OTjrgar3HWjjLfES1ma3dFYRoQRS7ytZc9vENcJjqcCoxXsjfNZi6ADLP17vDKhZq8JGTizvHPQwRLG0NP7yknndXolZuB5Th/WT x-ms-exchange-transport-forked: True 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: a80c7ddf-18fb-4e87-3d60-08d817850580 X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Jun 2020 14:52:16.2175 (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-CrossTenant-userprincipalname: l4uZVAHjBxLfoOWI5/noTMJmC0l1JpFaG+dbBpo+AYL99JuVvwJYTIwHt160Jn8aBFUu/FDhVGqjes1ILNOXuA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR0502MB3730 Subject: Re: [dpdk-dev] [PATCH v1 3/4] vhost: improve device ready definition 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" DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWF4aW1lIENvcXVlbGlu IDxtYXhpbWUuY29xdWVsaW5AcmVkaGF0LmNvbT4NCj4gU2VudDogVHVlc2RheSwgSnVuZSAyMywg MjAyMCA0OjU2IFBNDQo+IFRvOiBNYXRhbiBBenJhZCA8bWF0YW5AbWVsbGFub3guY29tPjsgWGlh byBXYW5nDQo+IDx4aWFvLncud2FuZ0BpbnRlbC5jb20+DQo+IENjOiBkZXZAZHBkay5vcmcNCj4g U3ViamVjdDogUmU6IFtQQVRDSCB2MSAzLzRdIHZob3N0OiBpbXByb3ZlIGRldmljZSByZWFkeSBk ZWZpbml0aW9uDQo+IA0KPiBIaSBNYXRhbiwNCj4gDQo+IE9uIDYvMjMvMjAgMTo1MyBQTSwgTWF0 YW4gQXpyYWQgd3JvdGU6DQo+ID4NCj4gPg0KPiA+IEZyb206IE1heGltZSBDb3F1ZWxpbjoNCj4g Pj4gT24gNi8yMy8yMCAxMTowMiBBTSwgTWF0YW4gQXpyYWQgd3JvdGU6DQo+ID4+Pg0KPiA+Pj4N Cj4gPj4+IEZyb206IE1heGltZSBDb3F1ZWxpbjoNCj4gPj4+PiBPbiA2LzIyLzIwIDU6NTEgUE0s IE1hdGFuIEF6cmFkIHdyb3RlOg0KPiA+Pj4+Pg0KPiA+Pj4+Pg0KPiA+Pj4+PiBGcm9tOiBNYXhp bWUgQ29xdWVsaW46DQo+ID4+Pj4+PiBPbiA2LzIyLzIwIDM6NDMgUE0sIE1hdGFuIEF6cmFkIHdy b3RlOg0KPiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiBGcm9tOiBNYXhpbWUgQ29xdWVs aW46DQo+ID4+Pj4+Pj4+IFNlbnQ6IE1vbmRheSwgSnVuZSAyMiwgMjAyMCAzOjMzIFBNDQo+ID4+ Pj4+Pj4+IFRvOiBNYXRhbiBBenJhZCA8bWF0YW5AbWVsbGFub3guY29tPjsgWGlhbyBXYW5nDQo+ ID4+Pj4+Pj4+IDx4aWFvLncud2FuZ0BpbnRlbC5jb20+DQo+ID4+Pj4+Pj4+IENjOiBkZXZAZHBk ay5vcmcNCj4gPj4+Pj4+Pj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MSAzLzRdIHZob3N0OiBpbXBy b3ZlIGRldmljZSByZWFkeQ0KPiA+Pj4+Pj4+PiBkZWZpbml0aW9uDQo+ID4+Pj4+Pj4+DQo+ID4+ Pj4+Pj4+DQo+ID4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+IE9uIDYvMjIvMjAgMTI6MDYgUE0sIE1hdGFu IEF6cmFkIHdyb3RlOg0KPiA+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+IEhpIE1heGltZQ0KPiA+Pj4+ Pj4+Pj4NCj4gPj4+Pj4+Pj4+IEZyb206IE1heGltZSBDb3F1ZWxpbiA8bWF4aW1lLmNvcXVlbGlu QHJlZGhhdC5jb20+DQo+ID4+Pj4+Pj4+Pj4gU2VudDogTW9uZGF5LCBKdW5lIDIyLCAyMDIwIDEx OjU2IEFNDQo+ID4+Pj4+Pj4+Pj4gVG86IE1hdGFuIEF6cmFkIDxtYXRhbkBtZWxsYW5veC5jb20+ OyBYaWFvIFdhbmcNCj4gPj4+Pj4+Pj4+PiA8eGlhby53LndhbmdAaW50ZWwuY29tPg0KPiA+Pj4+ Pj4+Pj4+IENjOiBkZXZAZHBkay5vcmcNCj4gPj4+Pj4+Pj4+PiBTdWJqZWN0OiBSZTogW1BBVENI IHYxIDMvNF0gdmhvc3Q6IGltcHJvdmUgZGV2aWNlIHJlYWR5DQo+ID4+Pj4+Pj4+Pj4gZGVmaW5p dGlvbg0KPiA+Pj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+ Pj4+IE9uIDYvMjIvMjAgMTA6NDEgQU0sIE1hdGFuIEF6cmFkIHdyb3RlOg0KPiA+Pj4+Pj4+Pj4+ Pj4gVGhlIGlzc3VlIGlzIGlmIHlvdSBvbmx5IGNoZWNrIHJlYWR5IHN0YXRlIG9ubHkgYmVmb3Jl IGFuZA0KPiA+Pj4+Pj4+Pj4+Pj4gYWZ0ZXIgdGhlIG1lc3NhZ2UgYWZmZWN0aW5nIHRoZSByaW5n IGlzIGhhbmRsZWQsIGl0IGNhbiBiZQ0KPiA+Pj4+Pj4+Pj4+Pj4gcmVhZHkgYXQgYm90aCBzdGFn ZXMsIHdoaWxlIHRoZSByaW5ncyBoYXZlIGNoYW5nZWQgYW5kDQo+ID4+Pj4+Pj4+Pj4+PiBzdGF0 ZSBjaGFuZ2UgY2FsbGJhY2sgc2hvdWxkDQo+ID4+Pj4+Pj4+Pj4gaGF2ZSBiZWVuIGNhbGxlZC4N Cj4gPj4+Pj4+Pj4+Pj4gQnV0IGluIHRoaXMgdmVyc2lvbiBJIGNoZWNrZWQgdHdpY2UsIGJlZm9y ZSBtZXNzYWdlIGhhbmRsZXINCj4gPj4+Pj4+Pj4+Pj4gYW5kIGFmdGVyDQo+ID4+Pj4+Pj4+Pj4g bWVzc2FnZSBoYW5kbGVyLCBzbyBpdCBzaG91bGQgY2F0Y2ggYW55IHVwZGF0ZS4NCj4gPj4+Pj4+ Pj4+Pg0KPiA+Pj4+Pj4+Pj4+IE5vLCB0aGlzIGlzIG5vdCBlbm91Z2gsIHdlIGhhdmUgdG8gY2hl Y2sgYWxzbyBkdXJpbmcgc29tZQ0KPiA+Pj4+Pj4+Pj4+IGhhbmRsZXJzLCBzbyB0aGF0IHRoZSBy ZWFkeSBzdGF0ZSBpcyBpbnZhbGlkYXRlZCBiZWNhdXNlDQo+ID4+Pj4+Pj4+Pj4gc29tZXRpbWVz IGl0IHdpbGwgYmUgcmVhZHkgYmVmb3JlIGFuZCBhZnRlciB0aGUgbWVzc2FnZQ0KPiA+Pj4+Pj4+ Pj4+IGhhbmRsZXIgYnV0DQo+ID4+Pj4gd2l0aCBkaWZmZXJlbnQgdmFsdWVzLg0KPiA+Pj4+Pj4+ Pj4+DQo+ID4+Pj4+Pj4+Pj4gVGhhdCdzIHdoYXQgSSBkaWQgaW4gbXkgZXhhbXBsZSBwYXRjaDoN Cj4gPj4+Pj4+Pj4+PiBAQCAtMTg0NywxNSArMTg5MiwxNiBAQCB2aG9zdF91c2VyX3NldF92cmlu Z19raWNrKHN0cnVjdA0KPiA+Pj4+Pj4gdmlydGlvX25ldA0KPiA+Pj4+Pj4+Pj4+ICoqcGRldiwg c3RydWN0IFZob3N0VXNlck1zZyAqbXNnLA0KPiA+Pj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+Pj4gLi4u DQo+ID4+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+PiAgICAgICAgIGlmICh2cS0+a2lja2ZkID49IDAp DQo+ID4+Pj4+Pj4+Pj4gICAgICAgICAgICAgICAgIGNsb3NlKHZxLT5raWNrZmQpOw0KPiA+Pj4+ Pj4+Pj4+ICsNCj4gPj4+Pj4+Pj4+PiArICAgICAgIHZxLT5raWNrZmQgPSBWSVJUSU9fVU5JTklU SUFMSVpFRF9FVkVOVEZEOw0KPiA+Pj4+Pj4+Pj4+ICsNCj4gPj4+Pj4+Pj4+PiArICAgICAgIHZo b3N0X3VzZXJfdXBkYXRlX3ZyaW5nX3N0YXRlKGRldiwgZmlsZS5pbmRleCk7DQo+ID4+Pj4+Pj4+ Pj4gKw0KPiA+Pj4+Pj4+Pj4+ICAgICAgICAgdnEtPmtpY2tmZCA9IGZpbGUuZmQ7DQo+ID4+Pj4+ Pj4+Pj4NCj4gPj4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4+IFdpdGhvdXQgdGhhdCwgdGhlIHJlYWR5 IGNoZWNrIHdpbGwgcmV0dXJuIHJlYWR5IGJlZm9yZSBhbmQNCj4gPj4+Pj4+Pj4+PiBhZnRlciB0 aGUga2lja2ZkIGNoYW5nZWQgYW5kIHRoZSBkcml2ZXIgd29uJ3QgYmUgbm90aWZpZWQuDQo+ID4+ Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4gVGhlIGRyaXZlciB3aWxsIGJlIG5vdGlmaWVkIGluIHRoZSBu ZXh0DQo+ID4+Pj4+Pj4+PiBWSE9TVF9VU0VSX1NFVF9WUklOR19FTkFCTEUNCj4gPj4+Pj4+Pj4g bWVzc2FnZSBhY2NvcmRpbmcgdG8gdjEuDQo+ID4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4gT25lIG9m IG91ciBhc3N1bXB0aW9uIHdlIGFncmVlZCBvbiBpbiB0aGUgZGVzaWduIG1haWwgaXMgdGhhdA0K PiA+Pj4+Pj4+Pj4gaXQgZG9lc24ndA0KPiA+Pj4+Pj4+PiBtYWtlIHNlbnNlIHRoYXQgUUVNVSB3 aWxsIGNoYW5nZSBxdWV1ZSBjb25maWd1cmF0aW9uIHdpdGhvdXQNCj4gPj4+Pj4+Pj4gZW5hYmxp bmcgdGhlIHF1ZXVlIGFnYWluLg0KPiA+Pj4+Pj4+Pj4gQmVjYXVzZSBvZiB0aGF0IHdlIGRlY2lk ZWQgdG8gZm9yY2UgY2FsbGluZyBzdGF0ZSBjYWxsYmFjaw0KPiA+Pj4+Pj4+Pj4gYWdhaW4gd2hl bg0KPiA+Pj4+Pj4+PiBRRU1VIHNlbmQgVkhPU1RfVVNFUl9TRVRfVlJJTkdfRU5BQkxFKDEpIG1l c3NhZ2UgZXZlbg0KPiBpZg0KPiA+PiB0aGUNCj4gPj4+Pj4+IHF1ZXVlIGlzDQo+ID4+Pj4+Pj4+ IGFscmVhZHkgcmVhZHkuDQo+ID4+Pj4+Pj4+PiBTbyB3aGVuIGRyaXZlci9hcHAgc2VlIHN0YXRl IGVuYWJsZS0+ZW5hYmxlLCBpdCBzaG91bGQgdGFrZQ0KPiA+Pj4+Pj4+Pj4gaW50byBhY2NvdW50 DQo+ID4+Pj4+Pj4+IHRoYXQgdGhlIHF1ZXVlIGNvbmZpZ3VyYXRpb24gd2FzIHByb2JhYmx5IGNo YW5nZWQuDQo+ID4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4gSSB0aGluayB0aGF0IHRoaXMgYXNzdW1w dGlvbiBpcyBjb3JyZWN0IGFjY29yZGluZyB0byB0aGUgUUVNVQ0KPiBjb2RlLg0KPiA+Pj4+Pj4+ Pg0KPiA+Pj4+Pj4+PiBZZXMsIHRoaXMgd2FzIG91ciBpbml0aWFsIGFzc3VtcHRpb24uDQo+ID4+ Pj4+Pj4+IEJ1dCBub3cgbG9va2luZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBpbXBsZW1lbnRh dGlvbiwgSSBmaW5kDQo+ID4+Pj4+Pj4+IGl0IGlzIGV2ZW4gY2xlYW5lciAmIGNsZWFyZXIgbm90 IHRvIGRvIHRoaXMgYXNzdW1wdGlvbi4NCj4gPj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+IFRoYXQncyB3 aHkgSSBwcmVmZXIgdG8gY29sbGVjdCBhbGwgdGhlIHJlYWR5IGNoZWNrcyBjYWxsYmFja3MNCj4g Pj4+Pj4+Pj4+IChxdWV1ZSBzdGF0ZSBhbmQNCj4gPj4+Pj4+Pj4gZGV2aWNlIG5ld1xjb25mKSB0 byBvbmUgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUNCj4gPj4+Pj4+Pj4g bWVzc2FnZQ0KPiA+Pj4+Pj4+PiBoYW5kbGVyOg0KPiA+Pj4+Pj4+Pj4gUHNldWRvOg0KPiA+Pj4+ Pj4+Pj4gIHZob3N0X3VzZXJfdXBkYXRlX3JlYWR5X3N0YXR1c2VzKCkgew0KPiA+Pj4+Pj4+Pj4g CXN3aXRjaCAobXNnKToNCj4gPj4+Pj4+Pj4+IAkJY2FzZSBlbmFibGU6DQo+ID4+Pj4+Pj4+PiAJ CQlpZihlbmFibGUgaXMgMSkNCj4gPj4+Pj4+Pj4+IAkJCQlmb3JjZSBxdWV1ZSBzdGF0ZSA9MS4N Cj4gPj4+Pj4+Pj4+IAkJY2FzZSBjYWxsZmQNCj4gPj4+Pj4+Pj4+IAkJY2FzZSBraWNrZmQNCj4g Pj4+Pj4+Pj4+IAkJCQkuLi4uLg0KPiA+Pj4+Pj4+Pj4gCQlDaGVjayBxdWV1ZSBhbmQgZGV2aWNl IHJlYWR5ICsgY2FsbCBjYWxsYmFja3MgaWYNCj4gPj4gbmVlZGVkLi4NCj4gPj4+Pj4+Pj4+IAkJ RGVmYXVsdA0KPiA+Pj4+Pj4+Pj4gCQkJUmV0dXJuOw0KPiA+Pj4+Pj4+Pj4gfQ0KPiA+Pj4+Pj4+ Pg0KPiA+Pj4+Pj4+PiBJIGZpbmQgaXQgbW9yZSBuYXR1cmFsIHRvICJpbnZhbGlkYXRlIiByZWFk eSBzdGF0ZSB3aGVyZSBpdCBpcw0KPiA+Pj4+Pj4+PiBoYW5kbGVkIChhZnRlciB2cmluZ19pbnZh bGlkYXRlKCksIGJlZm9yZSBzZXR0aW5nIG5ldyBGRCBmb3INCj4gPj4+Pj4+Pj4gY2FsbCAmIGtp Y2ssIC4uLikNCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+IEkgdGhpbmsgdGhhdCBpZiB5b3UgZ28gd2l0 aCB0aGlzIGRpcmVjdGlvbiwgaWYgdGhlIGZpcnN0IHF1ZXVlDQo+ID4+Pj4+Pj4gcGFpciBpcyBp bnZhbGlkYXRlZCwNCj4gPj4+Pj4+IHlvdSBuZWVkIHRvIG5vdGlmeSBhcHBcZHJpdmVyIGFsc28g YWJvdXQgZGV2aWNlIHJlYWR5IGNoYW5nZS4NCj4gPj4+Pj4+PiBBbHNvIGl0IHdpbGwgY2F1c2Ug MiBub3RpZmljYXRpb25zIHRvIHRoZSBkcml2ZXIgaW5zdGVhZCBvZiBvbmUNCj4gPj4+Pj4+PiBp biBjYXNlIG9mIEZEDQo+ID4+Pj4+PiBjaGFuZ2UuDQo+ID4+Pj4+Pg0KPiA+Pj4+Pj4gWW91J2xs IGFsd2F5cyBlbmQtdXAgd2l0aCB0d28gbm90aWZpY2F0aW9ucywgZWl0aGVyIFFlbXUgaGFzIHNl bnQNCj4gPj4+Pj4+IHRoZSBkaXNhYmxlIGFuZCBzbyB5b3UnbGwgaGF2ZSBvbmUgbm90aWZpY2F0 aW9uIGZvciB0aGUgZGlzYWJsZQ0KPiA+Pj4+Pj4gYW5kIG9uZSBmb3IgdGhlIGVuYWJsZSwgb3Ig aXQgZGlkbid0IHNlbnQgdGhlIGRpc2FibGUgYW5kIGl0IHdpbGwNCj4gPj4+Pj4+IGhhcHBlbiBh dCBvbGQgdmFsdWUgaW52YWxpZGF0aW9uIHRpbWUgYW5kIGFmdGVyIG5ldyB2YWx1ZSBpcw0KPiA+ Pj4+Pj4gdGFrZW4gaW50bw0KPiA+PiBhY2NvdW50Lg0KPiA+Pj4+Pj4NCj4gPj4+Pj4NCj4gPj4+ Pj4gSSBkb24ndCBzZWUgaXQgaW4gY3VycmVudCBRRU1VIGJlaGF2aW9yLg0KPiA+Pj4+PiBXaGVu IHdvcmtpbmcgTVEgSSBzZWUgdGhhdCBzb21lIHZpcnRxcyBnZXQgY29uZmlndXJhdGlvbiBtZXNz YWdlDQo+ID4+Pj4+IHdoaWxlDQo+ID4+Pj4gdGhleSBhcmUgaW4gZW5hYmxlZCBzdGF0ZS4NCj4g Pj4+Pj4gVGhlbiwgZW5hYmxlIG1lc3NhZ2UgaXMgc2VudCBhZ2FpbiBsYXRlci4NCj4gPj4+Pg0K PiA+Pj4+IEkgZ3Vlc3MgeW91IG1lYW4gdGhlIGZpcnN0IHF1ZXVlIHBhaXI/IEFuZCBpdCB3b3Vs ZCBub3QgYmUgaW4gcmVhZHkNCj4gPj4+PiBzdGF0ZSBhcyBpdCB3b3VsZCBiZSB0aGUgaW5pdGlh bCBjb25maWd1cmF0aW9uIG9mIHRoZSBxdWV1ZT8NCj4gPj4+DQo+ID4+PiBFdmVuIGFmdGVyIGlu aXRpYWxpemF0aW9uIHdoZW4gcXVldWUgaXMgcmVhZHkuDQo+ID4+Pg0KPiA+Pj4+Pg0KPiA+Pj4+ Pj4+IFdoeSBub3QgdG8gdGFrZSB0aGlzIGNvcnJlY3QgYXNzdW1wdGlvbiBhbmQgdXBkYXRlIHJl YWR5IHN0YXRlDQo+ID4+Pj4+Pj4gb25seSBpbiBvbmUNCj4gPj4+Pj4+IHBvaW50IGluIHRoZSBj b2RlIGluc3RlYWQgb2YgZG9pbmcgaXQgaW4gYWxsIHRoZSBjb25maWd1cmF0aW9uDQo+ID4+Pj4+ PiBoYW5kbGVycw0KPiA+Pj4+IGFyb3VuZD8NCj4gPj4+Pj4+PiBJTU8sIEl0IGlzIGNvcnJlY3Qs IGxlc3MgaW50cnVzaXZlLCBzaW1wbGVyLCBjbGVhcmVyIGFuZCBjbGVhbmVyLg0KPiA+Pj4+Pj4N Cj4gPj4+Pj4+IEkganVzdCBsb29rZWQgY2xvc2VyIGF0IHRoZSBWaG9zdC11c2VyIHNwZWMsIGFu ZCBJJ20gbm8gbW9yZSBzbw0KPiA+Pj4+Pj4gc3VyZSB0aGlzIGlzIGEgY29ycmVjdCBhc3N1bXB0 aW9uOg0KPiA+Pj4+Pj4NCj4gPj4+Pj4+ICJXaGlsZSBwcm9jZXNzaW5nIHRoZSByaW5ncyAod2hl dGhlciB0aGV5IGFyZSBlbmFibGVkIG9yIG5vdCksDQo+ID4+Pj4+PiBjbGllbnQgbXVzdCBzdXBw b3J0IGNoYW5naW5nIHNvbWUgY29uZmlndXJhdGlvbiBhc3BlY3RzIG9uIHRoZSBmbHkuIg0KPiA+ Pj4+Pg0KPiA+Pj4+PiBPaywgdGhpcyBkb2Vzbid0IGV4cGxhaW4gaG93IGNvbmZpZ3VyYXRpb24g aXMgY2hhbmdlZCBvbiB0aGUgZmx5Lg0KPiA+Pj4+DQo+ID4+Pj4gSSBhZ3JlZSBpdCBsYWNrcyBh IGJpdCBvZiBjbGFyaXR5Lg0KPiA+Pj4+DQo+ID4+Pj4+IEFzIEkgbWVudGlvbmVkLCBRRU1VIHNl bmRzIGVuYWJsZSBtZXNzYWdlIGFsd2F5cyBhZnRlcg0KPiA+Pj4+PiBjb25maWd1cmF0aW9uDQo+ ID4+Pj4gbWVzc2FnZS4NCj4gPj4+Pg0KPiA+Pj4+IFllcywgYnV0IHdlIHNob3VsZCBub3QgZG8g YXNzdW1wdGlvbnMgb24gY3VycmVudCBRZW11IHZlcnNpb24gd2hlbg0KPiA+Pj4+IHBvc3NpYmxl LiBCZXR0ZXIgdG8gYmUgc2FmZSBhbmQgZm9sbG93IHRoZSBzcGVjaWZpY2F0aW9uLCBpdCB3aWxs DQo+ID4+Pj4gYmUgbW9yZQ0KPiA+PiByb2J1c3QuDQo+ID4+Pj4gVGhlcmUgaXMgYWxzbyB0aGUg VmlydGlvLXVzZXIgUE1EIHRvIHRha2UgaW50byBhY2NvdW50IGZvciBleGFtcGxlLg0KPiA+Pj4N Cj4gPj4+IEkgdW5kZXJzdGFuZCB5b3VyIHBvaW50IGhlcmUgYnV0IGRvIHlvdSByZWFsbHkgd2Fu dCB0byBiZSByZWFkeSBmb3INCj4gPj4+IGFueQ0KPiA+PiBjb25maWd1cmF0aW9uIHVwZGF0ZSBp biBydW4gdGltZT8NCj4gPj4+IFdoYXQgZG9lcyBpdCBtZWFuPyBIb3cgZGF0YXRwYXRoIHNob3Vs ZCBoYW5kbGUgY29uZmlndXJhdGlvbiBmcm9tDQo+ID4+IGNvbnRyb2wgdGhyZWFkIGluIHJ1biB0 aW1lIHdoaWxlIHRyYWZmaWMgaXMgb24/DQo+ID4+PiBGb3IgZXhhbXBsZSwgY2hhbmdpbmcgcXVl dWUgc2l6ZSBcIGFkZHJlc3NlcyBtdXN0IHN0b3AgdHJhZmZpYyBiZWZvcmUuLi4NCj4gPj4+IEFs c28gY2hhbmdpbmcgRkRzIGlzIHZlcnkgc2Vuc2l0aXZlLg0KPiA+Pj4NCj4gPj4+IEl0IGRvZXNu J3QgbWFrZSBzZW5zZSB0byBtZS4NCj4gPj4+DQo+ID4+PiBBbHNvLCBhY2NvcmRpbmcgdG8gIm9u IHRoZSBmbHkiIGRpcmVjdGlvbiB3ZSBzaG91bGQgbm90IGRpc2FibGUgdGhlDQo+ID4+PiBxdWV1 ZQ0KPiA+PiB1bmxlc3MgZW5hYmxlIG1lc3NhZ2UgaXMgY29taW5nIHRvIGRpc2FibGUgaXQuDQo+ ID4NCj4gPiBObyByZXNwb25zZSwgc28gbG9va3MgbGlrZSB5b3UgYWdyZWUgdGhhdCBpdCBkb2Vz bid0IG1ha2Ugc2Vuc2UuDQo+IA0KPiBObywgbXkgcmVwbHkgd2FzIGdlbmVyYWwgdG8gYWxsIHlv dXIgY29tbWVudHMuDQo+IA0KPiBXaXRoIFNXIGJhY2tlbmQsIEkgYWdyZWUgd2UgZG9uJ3QgbmVl ZCB0byBkaXNhYmxlIHRoZSByaW5ncyBpbiBjYXNlIG9mDQo+IGFzeW5jaHJvbm91cyBjaGFuZ2Vz IHRvIHRoZSByaW5nIGJlY2F1c2Ugd2UgcHJvdGVjdCBpdCB3aXRoIGEgbG9jaywgc28gd2UNCj4g YXJlIHN1cmUgdGhlIHJpbmcgd29uJ3QgYmUgYWNjZXNzZWQgYnkgYW5vdGhlciB0aHJlYWQgd2hp bGUgZG9pbmcgdGhlDQo+IGNoYW5nZS4NCj4gDQo+IEZvciB2RFBBIGNhc2UgdGhhdCdzIG1vcmUg cHJvYmxlbWF0aWMgYmVjYXVzZSB3ZSBoYXZlIG5vIHN1Y2ggbG9ja2luZw0KPiBtZWNoYW5pc20u DQo+IA0KPiBGb3IgZXhhbXBsZSBtZW1vcnkgaG90cGx1ZywgUWVtdSBkb2VzIG5vdCBzZWVtIHRv IGRpc2FibGUgdGhlIHF1ZXVlcw0KPiBzbyB3ZSBuZWVkIHRvIHN0b3AgdGhlIHZEUEEgZGV2aWNl IG9uZSB3YXkgb3IgYW5vdGhlciBzbyB0aGF0IGl0IGRvZXMgbm90DQo+IHByb2Nlc3MgdGhlIHJp bmdzIHdoaWxlIHRoZSBWaG9zdCBsaWIgcmVtYXBzIHRoZSBtZW1vcnkgYXJlYXMuDQo+IA0KPiA+ Pj4gSW4gYWRkaXRpb246DQo+ID4+PiBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gdG9nZ2xlIHZEUEEg ZHJpdmVyc1xhcHAgZm9yIGFueSBjb25maWd1cmF0aW9uDQo+ID4+IG1lc3NhZ2U/IEl0IG1heSBj YXVzZSBxdWV1ZSByZWNyZWF0aW9uIGZvciBlYWNoIG9uZSAoYXQgbGVhc3QgZm9yIG1seDUpLg0K PiA+Pg0KPiA+PiBJIHdhbnQgdG8gaGF2ZSBzb21ldGhpbmcgcm9idXN0IGFuZCBtYWludGFpbmFi bGUuDQo+ID4NCj4gPiBNZSB0b28uDQo+ID4NCj4gPj4gVGhlc2UgbWVzc2FnZXMgYXJyaXZpbmcg YWZ0ZXIgYSBxdWV1ZSBoYXZlIGJlZW4gY29uZmlndXJlZCBvbmNlIGFyZQ0KPiA+PiByYXJlIGV2 ZW50cywgYnV0IHRoaXMgaXMgdXN1YWxseSB0aGUga2luZCBvZiB0aGluZ3MgdGhhdCBjYXVzZSBt YWludGVuYW5jZQ0KPiBidXJkZW4uDQo+ID4NCj4gPiBJbiBjYXNlIG9mIGd1ZXN0IHBvbGwgbW9k ZSAodGVzdHBtZCB2aXJ0aW8pIHdlIGFsbCB0aGUgdGltZSBnZXQgY2FsbGZkIHR3aWNlLg0KPiAN Cj4gUmlnaHQuDQo+IA0KPiA+PiBJZiB5b3UgbG9vayBhdCBteSBleGFtcGxlIHBhdGNoLCB5b3Ug d2lsbCB1bmRlcnN0YW5kIHRoYXQgd2l0aCBteQ0KPiA+PiBwcm9wb3NhbCwgdGhlcmUgd29uJ3Qg YmUgYW55IG1vcmUgc3RhdGUgY2hhbmdlIG5vdGlmaWNhdGlvbiB0aGFuIHdpdGgNCj4gPj4geW91 ciBwcm9wb3NhbCB3aGVuIFFlbXUgb3IgYW55IG90aGVyIFZob3N0LXVzZXIgbWFzdGVyIHNlbmQg YSBkaXNhYmxlDQo+ID4+IHJlcXVlc3QgYmVmb3JlIHNlbmRpbmcgdGhlIHJlcXVlc3QgdGhhdCBp bXBhY3QgdGhlIHF1ZXVlIHN0YXRlLg0KPiA+DQo+ID4gd2UgZGlkbid0IHRhbGsgYWJvdXQgZGlz YWJsZSB0aW1lIC0gdGhpcyBvbmUgaXMgdmVyeSBzaW1wbGUuDQo+ID4NCj4gPiBZZXMsIEluIGNh c2UgdGhlIHF1ZXVlIGlzIGRpc2FibGVkIHlvdXIgcHJvcG9zYWwgZG9lc24ndCBzZW5kIGV4dHJh DQo+IG5vdGlmaWNhdGlvbiBhcyBteS4NCj4gPiBCdXQgaW4gY2FzZSB0aGUgcXVldWUgaXMgcmVh ZHksIHlvdXIgcHJvcG9zYWwgc2VuZCBleHRyYSBub3QgcmVhZHkNCj4gbm90aWZpY2F0aW9uIGZv ciBraWtmZCxjYWxsZmQsc2V0X3ZyaW5nX2Jhc2UgY29uZmlndXJhdGlvbnMuDQo+IA0KPiBJIHRo aW5rIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBzeW5jaHJvbml6YXRpb24gd2l0aCB0aGUgVmhvc3Qt dXNlciBtYXN0ZXIgKGluDQo+IGNhc2UgdGhlIG1hc3RlciBhc2tzIGZvciB0aGlzIHN5bmNocm9u aXphdGlvbiwgbGlrZSBzZXRfbWVtX3RhYmxlIGZvcg0KPiBpbnN0YW5jZSB3aGVuIHJlcGx5LWFj ayBpcyBlbmFibGVkKS4NCj4gDQo+ID4+IEl0IGp1c3QgYWRkcyBtb3JlIHJvYnVzdG5lc3MgaWYg dGhpcyB1bmxpa2VseSBldmVudCBoYXBwZW5zLCBieQ0KPiA+PiBpbnZhbGlkYXRpbmcgdGhlIHJp bmcgc3RhdGUgdG8gbm90IHJlYWR5IGJlZm9yZSBkb2luZyB0aGUgYWN0dWFsIHJpbmcNCj4gY29u ZmlndXJhdGlvbiBjaGFuZ2UuDQo+ID4+IFNvIHRoYXQgdGhpcyBjb25maWcgY2hhbmdlIGlzIG5v dCBtaXNzZWQgYnkgdGhlIHZEUEEgZHJpdmVyIG9yIHRoZQ0KPiBhcHBsaWNhdGlvbi4NCj4gPg0K PiA+IE9uZSBtb3JlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGVyZSBpcyBzb21lIHRpbWUgdGhhdCBk ZXZpY2UgaXMgcmVhZHkgKGFscmVhZHkNCj4gY29uZmlndXJlZCkgYW5kIHRoZSBmaXJzdCB2aXR0 cS1wYWlyIGlzIG5vdCByZWFkeSAoeW91ciBpbnZhbGlkYXRlIHByb3Bvc2FsIGZvcg0KPiBzZXRf dnJpbmdfYmFzZSkuDQo+IA0KPiANCj4gDQo+ID4gSXQgZG9lc27igJl0IHNhdmUgdGhlIGNvbmNl cHQgdGhhdCBkZXZpY2UgaXMgcmVhZHkgb25seSBpbiBjYXNlIHRoZSBmaXJzdCB2aXJ0cS0NCj4g cGFpciBpcyByZWFkeS4NCj4gDQo+IEkgdW5kZXJzdGFuZCB0aGUgc3BlYyBhcyAidGhlIGRldmlj ZSBpcyByZWFkeSBhcyBzb29uIGFzIHRoZSBmaXJzdCBxdWV1ZSBwYWlyIGlzDQo+IHJlYWR5Iiwg YnV0IEkgbWlnaHQgYmUgd3JvbmcuDQo+IA0KPiBEbyB5b3Ugc3VnZ2VzdCB0byBjYWxsIHRoZSBk ZXZfY2xvc2UoKSB2RFBBIGNhbGxiYWNrIGFuZCB0aGUNCj4gZGVzdHJveV9kZXZpY2UoKSBhcHBs aWNhdGlvbiBjYWxsYmFjayBhcyBzb29uIGFzIG9uZSBvZiB0aGUgcmluZyBvZiB0aGUgZmlyc3QN Cj4gcXVldWUgcGFpciByZWNlaXZlIGEgZGlzYWJsZSByZXF1ZXN0IG9yLCB3aXRoIG15IHBhdGNo LCB3aGVuIG9uZSBvZiB0aGUNCj4gcmluZ3MgcmVjZWl2ZXMgYSByZXF1ZXN0IHRoYXQgY2hhbmdl cyB0aGUgcmluZyBzdGF0ZT8NCg0KSSBtZWFucywgeW91ciBwcm9wb3NhbCBhY3R1YWxseSBtYXkg bWFrZSBmaXJzdCB2aXJ0cS1wYWlyIHJlYWR5IHN0YXRlIGRpc2FibGVkIHdoZW4gZGV2aWNlIHJl YWR5Lg0KU28sIHllcywgaXQgbGVhZHMgdG8gY2FsbCBkZXZpY2UgY2xvc2VcZGVzdHJveS4NCg0K PiA+IEkgd2lsbCBub3QgaW5zaXN0IGFueW1vcmUgb24gd2FpdGluZyBmb3IgZW5hYmxlIGZvciBu b3RpZnlpbmcgYWx0aG91Z2ggSSBub3QNCj4gZmFuIHdpdGggaXQuDQo+ID4NCj4gPiBTbywgSSBz dWdnZXN0IHRvIGNyZWF0ZSAxIG5vdGlmaWNhdGlvbiBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0 ZXIgbWVzc2FnZQ0KPiBoYW5kbGVyIGFuZCBiZWZvcmUgcmVwbHkuDQo+ID4gVGhpcyBmdW5jdGlv biBpcyB0aGUgb25seSBvbmUgd2hpY2ggbm90aWZ5IHJlYWR5IHN0YXRlcyBpbiB0aGUgbmV4dCBv cHRpb25zOg0KPiA+DQo+ID4gMS4gdmlydHEgcmVhZHkgc3RhdGUgaXMgY2hhbmdlZCBpbiB0aGUg cXVldWUuDQo+ID4gMi4gdmlydHEgcmVhZHkgc3RhdGUgc3RheXMgb24gYWZ0ZXIgY29uZmlndXJh dGlvbiBtZXNzYWdlIGhhbmRsZXIuDQo+ID4gMy4gZGV2aWNlIHN0YXRlIHdpbGwgYmUgZW5hYmxl ZCB3aGVuIHRoZSBmaXJzdCBxdWV1ZSBwYWlyIGlzIHJlYWR5Lg0KPiANCj4gSUlVQywgaXQgd2ls bCBub3QgZGlzYWJsZSB0aGUgcXVldWVzIHdoZW4gdGhlcmUgaXMgYSBzdGF0ZSBjaGFuZ2UsIGlz IHRoYXQNCj4gY29ycmVjdD8gSWYgc28sIEkgdGhpbmsgaXQgZG9lcyBub3Qgd29yayB3aXRoIG1l bW9yeSBob3RwbHVnIGNhc2UgSSBtZW50aW9uZWQNCj4gZWFybGllci4NCg0KSXQgd2lsbCBkbyBl bmFibGUgYWdhaW4gd2hpY2ggbWVhbiAtIHNvbWV0aGluZyB3YXMgbW9kaWZpZWQuDQoNCj4gRXZl biBmb3IgdGhlIGNhbGxmZCBkb3VibGUgY2hhbmdlIGl0IGNhbiBiZSBwcm9ibGVtYXRpYyBhcyBW aG9zdC1saWIgd2lsbCBjbG9zZQ0KPiB0aGUgZmlyc3Qgb25lIHdoaWxlIGl0IHdpbGwgc3RpbGwg YmUgdXNlZCBieSB0aGUgZHJpdmVyIChCdHcsIEkgc2VlIG15IGV4YW1wbGUNCj4gcGF0Y2ggaXMg YWxzbyBidWdneSBpbiB0aGlzIHJlZ2FyZHMsIGl0IHNob3VsZCByZXNldCB0aGUgY2FsbF9mZCB2 YWx1ZSBpbiB0aGUNCj4gdmlydHF1ZXVlLCB0aGVuIGNhbGwNCj4gdmhvc3RfdXNlcl91cGRhdGVf dnJpbmdfc3RhdGUoKSBhbmQgZmluYWxseSBjbG9zZSB0aGUgRkQpLg0KDQpZZXMsIHRoaXMgb25l IGxlYWRzIGZvciBkaWZmZXJlbnQgaGFuZGxlIGZvciBlYWNoIG1lc3NhZ2UuDQoNCk1heWJlIGl0 IGxlYWRzIGZvciBuZXcgcXVldWUgbW9kaWZ5IG9wZXJhdGlvbi4NClNvLCBxdWV1ZSBkb2Vzbid0 IHNlbmQgdGhlIHN0YXRlIC0ganVzdCBkb2VzIGNvbmZpZ3VyYXRpb24gY2hhbmdlIG9uIHRoZSBm bHkuDQoNCldoYXQgZG8geW91IHRoaW5rPw0KDQogDQo+IFRoYW5rcywNCj4gTWF4aW1lDQo+ID4N Cj4gPiBNYXRhbg0KPiA+DQo+ID4NCj4gPg0KPiA+PiBNYXhpbWUNCj4gPg0KDQo=