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 06DD8A04FD; Tue, 2 Jun 2020 14:43:23 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 679951BF54; Tue, 2 Jun 2020 14:43:23 +0200 (CEST) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-eopbgr130070.outbound.protection.outlook.com [40.107.13.70]) by dpdk.org (Postfix) with ESMTP id 2202B1BEDE for ; Tue, 2 Jun 2020 14:43:22 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YTyR3DfTbTcXZM/l3ot1yAFpf3yibXveOXK8a06sOXNhm8zNKy+maLtFS4fBSMP0TqtyJ1Q5aSh78vE9Xe8NqqAD0x2OjRtfKIMvNyXNXxm3+lkelFZW80drDElsSu418XITOoJLPRaJwD5bvmClnocwsqNP5wUYslM5qCUHTOgf0kgxQnZG02/jR0P4MyYmfx5svh5FAuMOgMjSUJYwyKCExDKQ90yvKCuqNzdMvx89wnT6mOitIYns0jGM2Vyp7Pe9WeDruCiA30NVXH3xBxeGw/SNo3NZp8E6zuo1eN5G+y1pxuQBfyfjTbVOfJwZ47YwamZH2sYQ32uRLAYseA== 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=zBLfZgvzDcEWRm6kdnJZmMb5OljmLX1kwcXhih9X1TI=; b=ZdP0p4PYZ/0/w6Vk+4O0IMsHP5W8oCwT7tNRjG1lSHXMDBuXlX0FrSpG6RAjBlLGzcmVQyQ7AqAX7FnQolUE9K/mQDcZsJiWW8SYZOHWjJrL2ZfU08r+K7fCk4iC34vi17iSTu+5IIVy/YA3z2xhCbwBfD71bMyS5wZs0GtlUIyNQbQ9RIOZH/6WU4N07WXckRapvA5isB8s//6VTV/LtFmT76BNYkKUaQUPSL4mn25khTxOgNdsar/yI/xQ5ocAiqigmWrDdI3TPcDOkAdholtkK7h7SEUq+w8AHYV/fpensGN5UTmO0O2lQXbulH2WqTi7JFBd3mTkf7zK1woQzA== 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=zBLfZgvzDcEWRm6kdnJZmMb5OljmLX1kwcXhih9X1TI=; b=q3GouYqGoLugES6MMlwhb4qseyWB5A5W60oEP6VWOkUoMQXZVI8c/4PLfP4m/TPK6dQ09BlNJ4TVHFGIcBSzo6vq7hT7D1eaZczxrSRqElI8n1pzZzbOu8ByFJLsaeGUwiScOfbkiOjaZSSWDb3/9NF1BAvLWd4u2oAASwViBxA= Received: from AM0PR05MB6610.eurprd05.prod.outlook.com (2603:10a6:208:12f::18) by AM0PR05MB4290.eurprd05.prod.outlook.com (2603:10a6:208:63::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3045.21; Tue, 2 Jun 2020 12:43:20 +0000 Received: from AM0PR05MB6610.eurprd05.prod.outlook.com ([fe80::900:c0ac:78bd:18fc]) by AM0PR05MB6610.eurprd05.prod.outlook.com ([fe80::900:c0ac:78bd:18fc%6]) with mapi id 15.20.3045.024; Tue, 2 Jun 2020 12:43:20 +0000 From: Wisam Monther To: Andrew Rybchenko , "dev@dpdk.org" , Jack Min , Thomas Monjalon , "jerinjacobk@gmail.com" , "ajit.khaparde@broadcom.com" Thread-Topic: [dpdk-dev] [PATCH v6 2/5] app/flow-perf: add insertion rate calculation Thread-Index: AQHWJ4SlE9Hwz4dCH0ChukRKdZWx9aiiyc8AgAAGtXCAAXubAIAAAhng Date: Tue, 2 Jun 2020 12:43:20 +0000 Message-ID: References: <20200506123627.22340-2-wisamm@mellanox.com> <20200511110912.11535-1-wisamm@mellanox.com> <20200511110912.11535-3-wisamm@mellanox.com> <7c0236f2-bf69-7877-3116-020f3d51f54a@solarflare.com> In-Reply-To: <7c0236f2-bf69-7877-3116-020f3d51f54a@solarflare.com> 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=mellanox.com; x-originating-ip: [84.242.49.134] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: a32d9fa5-f3c5-4788-246d-08d806f287d3 x-ms-traffictypediagnostic: AM0PR05MB4290: x-ld-processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7691; x-forefront-prvs: 0422860ED4 x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: yIJhmmamSEQysqQscKO/o1gTuqM4HmjXXL6+cuwM/w3cnuKhREU1sLPhpNfJZAPi0OP2lvuBHDXTY+6ys/qGiGjuVE/TPf3lqmLe1tw/WvHGqUQ9elkF3RrI6iE0ZvRmMqXT3NdC67s5i5hBAHhGTy33MdDBqINLugt/Tk2FcfhFboBI3xzXlyDOUuIJhXOeim8dZfAFbCMgXOdOOB+XXI/YVW0CdHaoNRdAx5wAScDpgYqq6gm83k8Uq35vBbFpOlV6mJ8G60BIw8pDP/zTVetNUACOFL/EQ5tbGF1ooU7Cg8hBQLNaPC7V5t2+RFOW1ZFnWPgOwPAu/l21PUQ8EA== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM0PR05MB6610.eurprd05.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(366004)(52536014)(9686003)(55016002)(8936002)(186003)(66946007)(86362001)(64756008)(6506007)(30864003)(498600001)(7696005)(66556008)(66446008)(66476007)(76116006)(71200400001)(33656002)(110136005)(5660300002)(8676002)(26005)(2906002)(83380400001)(53546011)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: JrH7j+RlZNWh6FiKk3l73ieFpyZRTUD7yBkI5do2768MTk3hT7ztaNdgDJS5SPlkWC7Ytinf85WRaOj7atblziQGcjwFT9Id9emA4Ju8jCpfXVT1xr1mBngWFiIcyc4oUjJNol+TZAJh2lPe9kdjtuongiQLJ25+3OX//sDMBK8EREAqM5rQFLvOCIOE+ZkpXA3AiCD7lhwXmkug2BclKIBDwtEpLBJxG6Q7ElhoTl4BsAid0H4iE37GxqTvx+JfdLx5BuvR3nPLB5dF6GMiE/bOZA8F9UjnKndBhuMexSj7rXZm0Sh/OJ/VdFgpkjp3TxinoxCbnayPGg5IGNtlK81WtFXFCRA6gR6BhRpUz+T6h+pGSSDa5dmDJbSOYcD1uGTEhs0oPBdU9BXijqBu8pqGhqnTqVwxXfWtdnz7ImIcHTl02hok5RUp6wn9txJC8svbBR7UOYUQ26Q2BPn1yXdSKUJEg8J4MAc0Vd2XLlo= 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: a32d9fa5-f3c5-4788-246d-08d806f287d3 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Jun 2020 12:43:20.2009 (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: R57hyhBBLc04f6D9t4qLjAPe2+r5WJh4blpQsD2gndU2XyDu4imByl/+5H79mT0Gv9kilQRGwhEsjKnEg33EgQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR05MB4290 Subject: Re: [dpdk-dev] [PATCH v6 2/5] app/flow-perf: add insertion rate calculation 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" SGV5IEFuZHJldywNClNvcnJ5IGZvciBsYXRlIHJlc3BvbnNlICJ3ZSB3ZXJlIGluIGhvbGlkYXki Lg0KUGxlYXNlIHNlZSBjb21tZW50cyBpbmxpbmUsIGFueXRoaW5nIHRoYXQgSSBkaWRuJ3QgcmVw bHkgb24sIHdpbGwgZml4ZWQgaW4gbmV4dCB2ZXJzaW9uLg0KSSdsbCB3YWl0IGZvciB5b3VyIHJl cGx5IGJlZm9yZSBzZW5kaW5nIG5leHQgdmVyc2lvbiBpbiBvcmRlciB0byByZWR1Y2UgcmV2aWV3 IGFuZCBkb24ndCBlbmNvdW50ZXINCkR1cGxpY2F0ZSBjb21tZW50cy4NCg0KVGhhbmtzIGZvciBy ZXZpZXcgdXAgdG8gbm93IHJlYWxseSBhcHByZWNpYXRlIGl0Lg0KDQo+LS0tLS1PcmlnaW5hbCBN ZXNzYWdlLS0tLS0NCj5Gcm9tOiBBbmRyZXcgUnliY2hlbmtvIDxhcnliY2hlbmtvQHNvbGFyZmxh cmUuY29tPg0KPlNlbnQ6IFR1ZXNkYXksIE1heSAxMiwgMjAyMCAyOjA4IFBNDQo+VG86IFdpc2Ft IE1vbnRoZXIgPHdpc2FtbUBtZWxsYW5veC5jb20+OyBkZXZAZHBkay5vcmc7IEphY2sgTWluDQo+ PGphY2ttaW5AbWVsbGFub3guY29tPjsgVGhvbWFzIE1vbmphbG9uIDx0aG9tYXNAbW9uamFsb24u bmV0PjsNCj5qZXJpbmphY29ia0BnbWFpbC5jb207IGFqaXQua2hhcGFyZGVAYnJvYWRjb20uY29t DQo+U3ViamVjdDogUmU6IFtkcGRrLWRldl0gW1BBVENIIHY2IDIvNV0gYXBwL2Zsb3ctcGVyZjog YWRkIGluc2VydGlvbiByYXRlDQo+Y2FsY3VsYXRpb24NCj4NCj5PbiA1LzEyLzIwIDE6MzQgUE0s IFdpc2FtIE1vbnRoZXIgd3JvdGU6DQo+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4+ PiBGcm9tOiBBbmRyZXcgUnliY2hlbmtvIDxhcnliY2hlbmtvQHNvbGFyZmxhcmUuY29tPg0KPj4+ IFNlbnQ6IE1vbmRheSwgTWF5IDExLCAyMDIwIDM6MDUgUE0NCj4+PiBUbzogV2lzYW0gTW9udGhl ciA8d2lzYW1tQG1lbGxhbm94LmNvbT47IGRldkBkcGRrLm9yZzsgSmFjayBNaW4NCj4+PiA8amFj a21pbkBtZWxsYW5veC5jb20+OyBUaG9tYXMgTW9uamFsb24gPHRob21hc0Btb25qYWxvbi5uZXQ+ Ow0KPj4+IGplcmluamFjb2JrQGdtYWlsLmNvbTsgYWppdC5raGFwYXJkZUBicm9hZGNvbS5jb20N Cj4+PiBTdWJqZWN0OiBSZTogW1BBVENIIHY2IDIvNV0gYXBwL2Zsb3ctcGVyZjogYWRkIGluc2Vy dGlvbiByYXRlDQo+Pj4gY2FsY3VsYXRpb24NCj4+Pg0KPj4+IE9uIDUvMTEvMjAgMjowOSBQTSwg V2lzYW0gSmFkZG8gd3JvdGU6DQo+Pj4+IEFkZCBpbnNlcnRpb24gcmF0ZSBjYWxjdWxhdGlvbiBm ZWF0dXJlIGludG8gZmxvdyBwZXJmb3JtYW5jZQ0KPj4+PiBhcHBsaWNhdGlvbi4NCj4+Pj4NCj4+ Pj4gVGhlIGFwcGxpY2F0aW9uIG5vdyBwcm92aWRlIHRoZSBhYmlsaXR5IHRvIHRlc3QgaW5zZXJ0 aW9uIHJhdGUgb2YNCj4+Pj4gc3BlY2lmaWMgcnRlX2Zsb3cgcnVsZSwgYnkgc3RyZXNzaW5nIGl0 IHRvIHRoZSBOSUMsIGFuZCBjYWxjdWxhdGUNCj4+Pj4gdGhlIGluc2VydGlvbiByYXRlLg0KPj4+ Pg0KPj4+PiBUaGUgYXBwbGljYXRpb24gb2ZmZXJzIHNvbWUgb3B0aW9ucyBpbiB0aGUgY29tbWFu ZCBsaW5lLCB0bw0KPj4+PiBjb25maWd1cmUgd2hpY2ggcnVsZSB0byBhcHBseS4NCj4+Pj4NCj4+ Pj4gQWZ0ZXIgdGhhdCB0aGUgYXBwbGljYXRpb24gd2lsbCBzdGFydCBwcm9kdWNpbmcgcnVsZXMg d2l0aCBzYW1lDQo+Pj4+IHBhdHRlcm4gYnV0IGluY3JlYXNpbmcgdGhlIG91dGVyIElQIHNvdXJj ZSBhZGRyZXNzIGJ5IDEgZWFjaCB0aW1lLA0KPj4+PiB0aHVzIGl0IHdpbGwgZ2l2ZSBkaWZmZXJl bnQgZmxvdyBlYWNoIHRpbWUsIGFuZCBhbGwgb3RoZXIgaXRlbXMgd2lsbA0KPj4+PiBoYXZlIG9w ZW4gbWFza3MuDQo+Pj4+DQo+Pj4+IFRoZSBjdXJyZW50IGRlc2lnbiBoYXZlIHNpbmdsZSBjb3Jl IGluc2VydGlvbiByYXRlLg0KPj4+PiBJbiB0aGUgZnV0dXJlIHdlIG1heSBoYXZlIGEgbXVsdGkg Y29yZSBpbnNlcnRpb24gcmF0ZSBtZWFzdXJlbWVudA0KPj4+PiBzdXBwb3J0IGluIHRoZSBhcHAu DQo+Pj4+DQo+Pj4+IFNpZ25lZC1vZmYtYnk6IFdpc2FtIEphZGRvIDx3aXNhbW1AbWVsbGFub3gu Y29tPg0KPj4+PiAtLS0NCj4+Pj4gIGFwcC90ZXN0LWZsb3ctcGVyZi9NYWtlZmlsZSAgICAgICAg ICAgIHwgICAzICsNCj4+Pj4gIGFwcC90ZXN0LWZsb3ctcGVyZi9hY3Rpb25zX2dlbi5jICAgICAg IHwgMTY0ICsrKysrKysrKw0KPj4+PiAgYXBwL3Rlc3QtZmxvdy1wZXJmL2FjdGlvbnNfZ2VuLmgg ICAgICAgfCAgMjkgKysNCj4+Pj4gIGFwcC90ZXN0LWZsb3ctcGVyZi9jb25maWcuaCAgICAgICAg ICAgIHwgIDE2ICsNCj4+Pj4gIGFwcC90ZXN0LWZsb3ctcGVyZi9mbG93X2dlbi5jICAgICAgICAg IHwgMTQ1ICsrKysrKysrDQo+Pj4+ICBhcHAvdGVzdC1mbG93LXBlcmYvZmxvd19nZW4uaCAgICAg ICAgICB8ICAzNyArKw0KPj4+PiAgYXBwL3Rlc3QtZmxvdy1wZXJmL2l0ZW1zX2dlbi5jICAgICAg ICAgfCAyNzcgKysrKysrKysrKysrKysrDQo+Pj4+ICBhcHAvdGVzdC1mbG93LXBlcmYvaXRlbXNf Z2VuLmggICAgICAgICB8ICAzMSArKw0KPj4+PiAgYXBwL3Rlc3QtZmxvdy1wZXJmL21haW4uYyAg ICAgICAgICAgICAgfCA0NzIgKysrKysrKysrKysrKysrKysrKysrKysrLQ0KPj4+PiAgYXBwL3Rl c3QtZmxvdy1wZXJmL21lc29uLmJ1aWxkICAgICAgICAgfCAgIDMgKw0KPj4+PiAgZG9jL2d1aWRl cy9yZWxfbm90ZXMvcmVsZWFzZV8yMF8wNS5yc3QgfCAgIDMgKw0KPj4+PiAgZG9jL2d1aWRlcy90 b29scy9mbG93LXBlcmYucnN0ICAgICAgICAgfCAxOTUgKysrKysrKysrLQ0KPj4+PiAgMTIgZmls ZXMgY2hhbmdlZCwgMTM2OCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKSAgY3JlYXRlIG1v ZGUNCj4+Pj4gMTAwNjQ0IGFwcC90ZXN0LWZsb3ctcGVyZi9hY3Rpb25zX2dlbi5jICBjcmVhdGUg bW9kZSAxMDA2NDQNCj4+Pj4gYXBwL3Rlc3QtZmxvdy1wZXJmL2FjdGlvbnNfZ2VuLmggIGNyZWF0 ZSBtb2RlIDEwMDY0NA0KPj4+PiBhcHAvdGVzdC1mbG93LXBlcmYvZmxvd19nZW4uYyAgY3JlYXRl IG1vZGUgMTAwNjQ0DQo+Pj4+IGFwcC90ZXN0LWZsb3ctcGVyZi9mbG93X2dlbi5oICBjcmVhdGUg bW9kZSAxMDA2NDQNCj4+Pj4gYXBwL3Rlc3QtZmxvdy1wZXJmL2l0ZW1zX2dlbi5jICBjcmVhdGUg bW9kZSAxMDA2NDQNCj4+Pj4gYXBwL3Rlc3QtZmxvdy1wZXJmL2l0ZW1zX2dlbi5oDQo+Pj4+DQo+ Pj4+IGRpZmYgLS1naXQgYS9hcHAvdGVzdC1mbG93LXBlcmYvTWFrZWZpbGUNCj4+Pj4gYi9hcHAv dGVzdC1mbG93LXBlcmYvTWFrZWZpbGUgaW5kZXggZGIwNDNjMTdhLi40ZjJkYjc1OTEgMTAwNjQ0 DQo+Pj4+IC0tLSBhL2FwcC90ZXN0LWZsb3ctcGVyZi9NYWtlZmlsZQ0KPj4+PiArKysgYi9hcHAv dGVzdC1mbG93LXBlcmYvTWFrZWZpbGUNCj4+Pj4gQEAgLTE2LDYgKzE2LDkgQEAgQ0ZMQUdTICs9 ICQoV0VSUk9SX0ZMQUdTKSAgIyAgIyBhbGwgc291cmNlIGFyZQ0KPj4+PiBzdG9yZWQgaW4gU1JD Uy15ICAjDQo+Pj4+ICtTUkNTLXkgKz0gYWN0aW9uc19nZW4uYw0KPj4+PiArU1JDUy15ICs9IGZs b3dfZ2VuLmMNCj4+Pj4gK1NSQ1MteSArPSBpdGVtc19nZW4uYw0KPj4+PiAgU1JDUy15ICs9IG1h aW4uYw0KPj4+Pg0KPj4+PiAgaW5jbHVkZSAkKFJURV9TREspL21rL3J0ZS5hcHAubWsNCj4+Pj4g ZGlmZiAtLWdpdCBhL2FwcC90ZXN0LWZsb3ctcGVyZi9hY3Rpb25zX2dlbi5jIGIvYXBwL3Rlc3Qt Zmxvdy0NCj4+PiBwZXJmL2FjdGlvbnNfZ2VuLmMNCj4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4+Pj4gaW5kZXggMDAwMDAwMDAwLi4xNmJiM2NmMjANCj4+Pj4gLS0tIC9kZXYvbnVsbA0KPj4+ PiArKysgYi9hcHAvdGVzdC1mbG93LXBlcmYvYWN0aW9uc19nZW4uYw0KPj4+PiBAQCAtMCwwICsx LDE2NCBAQA0KPj4+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0K Pj4+PiArICogQ29weXJpZ2h0IDIwMjAgTWVsbGFub3ggVGVjaG5vbG9naWVzLCBMdGQNCj4+Pj4g KyAqDQo+Pj4+ICsgKiBUaGUgZmlsZSBjb250YWlucyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGFj dGlvbnMgZ2VuZXJhdG9ycy4NCj4+Pj4gKyAqIEVhY2ggZ2VuZXJhdG9yIGlzIHJlc3BvbnNpYmxl IGZvciBwcmVwYXJpbmcgaXQncyBhY3Rpb24gaW5zdGFuY2UNCj4+Pj4gKyAqIGFuZCBpbml0aWFs aXppbmcgaXQgd2l0aCBuZWVkZWQgZGF0YS4NCj4+Pj4gKyAqLw0KPj4+PiArDQo+Pj4+ICsjaW5j bHVkZSA8c3lzL3R5cGVzLmg+DQo+Pj4+ICsjaW5jbHVkZSA8cnRlX21hbGxvYy5oPg0KPj4+PiAr I2luY2x1ZGUgPHJ0ZV9mbG93Lmg+DQo+Pj4+ICsjaW5jbHVkZSA8cnRlX2V0aGRldi5oPg0KPj4+ PiArDQo+Pj4+ICsjaW5jbHVkZSAiYWN0aW9uc19nZW4uaCINCj4+Pj4gKyNpbmNsdWRlICJjb25m aWcuaCINCj4+Pj4gKw0KPj4+PiArLyogU3RvcmFnZSBmb3Igc3RydWN0IHJ0ZV9mbG93X2FjdGlv bl9yc3MgaW5jbHVkaW5nIGV4dGVybmFsIGRhdGEuDQo+Pj4+ICsqLyBzdHJ1Y3QgYWN0aW9uX3Jz c19kYXRhIHsNCj4+Pj4gKwlzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3JzcyBjb25mOw0KPj4+PiAr CXVpbnQ4X3Qga2V5WzQwXTsNCj4+Pj4gKwl1aW50MTZfdCBxdWV1ZVsxMjhdOw0KPj4+PiArfTsN Cj4+Pj4gKw0KPj4+PiArdm9pZA0KPj4+PiArYWRkX21hcmsoc3RydWN0IHJ0ZV9mbG93X2FjdGlv biAqYWN0aW9ucywNCj4+Pj4gKwl1aW50OF90IGFjdGlvbnNfY291bnRlcikNCj4+Pj4gK3sNCj4+ Pj4gKwlzdGF0aWMgc3RydWN0IHJ0ZV9mbG93X2FjdGlvbl9tYXJrIG1hcmtfYWN0aW9uOw0KPj4+ DQo+Pj4gRnVuY3Rpb24tbG9jYWwgc3RhdGljIHZhcmlhYmxlcyBhIGJpdCBiZXR0ZXIgdGhhbiBm aWxlLWxvY2FsIG9yDQo+Pj4gZ2xvYmFsIHZhcmlhYmxlLCBidXQganVzdCBhIGJpdC4gU2VlIGJl bG93Lg0KPj4+IEF0IGJhcmUgbWluaW11bSBpdCByZXF1aXJlcyBhIGNoZWNrIHRoYXQgdGhlIGFj dGlvbiBpcyBub3QgaW4gdXNlDQo+Pj4gYWxyZWFkeS4gU2FtZSBpbiBtYW55IGNhc2VzIGJlbG93 Lg0KPj4NCj4+IFllcyBpdCdzIGJldHRlciwNCj4+IFdoYXQgeW91IG1lYW4gYnkgIiBBdCBiYXJl IG1pbmltdW0gaXQgcmVxdWlyZXMgYSBjaGVjayB0aGF0IHRoZSBhY3Rpb24gaXMNCj5ub3QgaW4g dXNlIGFscmVhZHkiDQo+PiBDYW4geW91IHBsZWFzZSBlbGFib3JhdGU/DQo+DQo+SW4gdGhlb3J5 LCBub3RoaW5nIHByZXZlbnRzIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHR3aWNlIGluIGF0dGVtcHQg dG8gYWRkIE1BUksNCj5hY3Rpb24gdHdpY2UuIFJpZ2h0IG5vdyBkZXNpZ24gZGVzaWduIGd1YXJh bmVlcyB0aGF0IGl0IHdpbGwgYmUgdXNlZCBvbmx5IG9uY2UNCj5zaW5jZSBiaXRtYXNrIGlzIHVz ZWQgdG8gbWFyayByZXF1aXJlZCBhY3Rpb25zLg0KPg0KPkhvd2V2ZXIgdGhlIGRlc2lnbiB1c2lu ZyBiaXRtYXNrIGlzIGJhZCBzaW5jZSBpdCBkb2VzIG5vdCBhbGxvdyB0byBjb250cm9sDQo+b3Jk ZXIgb2YgYWN0aW9ucyBpbiBmbG93IHJ1bGUuDQo+U2FtZSBjb25jZXJuIGlzIGFwcGxpY2FibGUg dG8gaXRlbXMgYml0bWFzay4gQXBwbGljYXRpb24gdXNlciBzaG91bGQgY29udHJvbA0KPm9yZGVy LCBub3QgaW50ZXJuYWwgbG9naWMuDQo+DQo+U28sIGlmIHRoZSBkZXNpZ24gZHJhd2JhY2sgaXMg Zml4ZWQsIHNvbWV0aGluZyBzaG91bGQgZW5zdXJlIHRoYXQgdGhlIGFjdGlvbiBpcw0KPm5vdCBh ZGRlZCB0d2ljZS4NCj5JdCBpcyBub3QgdGhhdCBpbXBvcnRhbnQgZm9yIE1BU0ssIHNpbmNlIGl0 IGlzIGNvbnN0YW50IG5vdywgYnV0IGltcG9ydGFudCBmb3INCj5RVUVVRS4NCj4NCg0KQnV0IHRo aXMgYXBwbGljYXRpb24gaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2Ugc3R1ZmYgYWthIGluc2VydGlv biAmIHBwcyBtZWFzdXJlbWVudHMuDQpJdCdzIG5vdCBQTUQgdG8gY2hlY2sgd2hhdCdzIHZhbGlk IG9yIG5vdCwgZXZlbiBpbiBmdXR1cmUgaWYgdGhlIGJpdCB3aXNlIGRlc2lnbiBjaGFuZ2VkIEkg dGhpbmsNCldlIHdpbGwgY3JlYXRlIHRoZSBmbG93IGl0ZW1zL2FjdGlvbnMgYWNjb3JkaW5nIHRv IHRoZSB1c2VyLCBpdCdzIHRoZSB1c2VyIHJlc3BvbnNpYmlsaXR5IHRvIGVudGVyIHZhbGlkIGZs b3cgc3RydWN0cmUNCk90aGVyd2lzZSB0aGUgUE1EIHNob3VsZCByZWplY3QgdGhlIHJ0ZSBmbG93 LCBmb3IgZXhhbXBsZTogZHVlIHRvIHR3byBRVUVVRSBhY3Rpb25zLg0KSWYgd2UgYXJlIGdvbm5h IGFkZCBjb25zdHJhaW5zIGZvciBzdWNoIHN0dWZmIHdlIHdpbGwgbmVlZCB0byB3cml0ZSBtYW55 IGNvbmRpdGlvbiBpbmNsdWRpbmcgaXRlbXMvYWN0aW9ucw0KV2hpbGUgdGhvc2UgY2hlY2tzIGFy ZSBQTUQgcmVzcG9uc2liaWxpdHkuDQpXaGF0IGRvIHlvdSB0aGluaz8NCg0KPj4+DQo+Pj4+ICsN Cj4+Pj4gKwlkbyB7DQo+Pj4+ICsJCW1hcmtfYWN0aW9uLmlkID0gTUFSS19JRDsNCj4+Pj4gKwl9 IHdoaWxlICgwKTsNCj4+Pg0KPj4+IFdoeSBkbyB5b3UgdXNlIGR1bW15IGRvLXdoaWxlIGxvb3Ag aGVyZT8gTWFueSBzaW1pbGFyIGNhc2VzIGJlbG93Lg0KPj4NCj4+IFNvbWV0aW1lcywgaXQgY3Jl YXRlIHRoZSBmbG93IGJlZm9yZSBzZXR0aW5nIHRoZSBjb3JyZWN0IGlkLCBJIHRoaW5rDQo+PiBp dCdzIGNvbXBpbGVyIHN0dWZmIFNvIHRoZSBkdW1teSBsb29wIHRvIG1ha2Ugc3VyZSB0aGUgY29t cGlsZXIgZmluaXNoDQo+PiBpdCdzIGV4ZWN1dGlvbiBhbmQgbWFrZSBzdXJlIFdoZW4gdGhlIGZs b3cgaXMgY3JlYXRlZCB0aGUgYWN0aW9uIGhhdmUNCj5jb3JyZWN0IHZhbHVlLg0KPg0KPkFzIGZh ciBhcyBJIGtub3csIEMgZG9lcyBub3Qgd29yayBsaWtlIHRoaXMuIEl0IHdpbGwgbm90IGhlbHAg dG8gY29wZSB3aXRoIHJhY2UNCj5jb25kaXRpb25zIGlmIHlvdXIgZGVzaWduIGhhcyByYWNlIGNv bmRpdGlvbnMuIFJpZ2h0IG5vdyBpdCBpcyBoYXJkIHRvIGp1ZGdlIGZvcg0KPm1lLCBidXQgZG8v d2hpbGUgbG9vcCBpcyBkZWZpbml0ZWx5IHVubmVjZXNzYXJ5L3VzZWxlc3MgaGVyZS4NCj4NCg0K RG9uJ3Qga25vdywgYnV0IEkgZGlkIGl0IHdpdGggYW5kIHdpdGhvdXQgdGhlIGxvb3AgdGhlIHZh bHVlIGNoYW5nZXMsDQpXaXRob3V0IHRoZSBsb29wIHRoZSBmaXJzdCBmbG93IHdpbGwgaGF2ZSB3 cm9uZyB2YWx1ZSBhdCBsZWFzdC4gDQpXaXRoIGJyZWFrIHBvaW50IGhlcmUgb3Igd2l0aCBsb29w IHRoZSBmbG93IHdpbGwgaGF2ZSBjb3JyZWN0IHZhbHVlLg0KDQpEb24ndCBrbm93IHJlYWxseSB3 aGF0IHRvIGRvIGhlcmUgOi8NCg0KPj4+DQo+Pj4+ICsNCj4+Pj4gKwlhY3Rpb25zW2FjdGlvbnNf Y291bnRlcl0udHlwZSA9IFJURV9GTE9XX0FDVElPTl9UWVBFX01BUks7DQo+Pj4+ICsJYWN0aW9u c1thY3Rpb25zX2NvdW50ZXJdLmNvbmYgPSAmbWFya19hY3Rpb247IH0NCj4+Pj4gKw0KPj4+PiAr dm9pZA0KPj4+PiArYWRkX3F1ZXVlKHN0cnVjdCBydGVfZmxvd19hY3Rpb24gKmFjdGlvbnMsDQo+ Pj4+ICsJdWludDhfdCBhY3Rpb25zX2NvdW50ZXIsIHVpbnQxNl90IHF1ZXVlKSB7DQo+Pj4+ICsJ c3RhdGljIHN0cnVjdCBydGVfZmxvd19hY3Rpb25fcXVldWUgcXVldWVfYWN0aW9uOw0KPj4+DQo+ Pj4gSXQgZG9lcyBub3QgYWxsb3cgdG8gdXNlIHRoZSBhY3Rpb24gdHdpY2UgdG8gZGVsaXZlciB0 byB0byBxdWV1ZXMuDQo+Pg0KPj4gWWVzLCBpdCdzIG5lZWRlZCBvbmx5IG9uY2UNCj4NCj5XaGF0 IGlmIEkgd291bGQgbGlrZSB0byB0ZXN0IGEgcnVsZSB3aGljaCBkZWxpdmVycyB0byB0d28gUVVF VUVzIHVzaW5nIERVUD8gSSdtDQo+anVzdCBoaWdobGlnaHRpbmcgaGFyZCBsaW1pdGF0aW9uIGlu IHRoZSB0aGUgZGVzaWduLiBOb3QgYSBibG9ja2VyIGl0c2VsZiwgYnV0DQo+c2hvdWxkIGJlIHRh a2VuIGludG8gYWNjb3VudC4NCj4NCg0KSW4gZnV0dXJlIHdlIGNhbiBjaGFuZ2UgdGhlIGJpdCB3 aXNlIGRlc2lnbiB0byBhbGxvdyBzdWNoIHRoaW5ncywNCkknbGwgdGFrZSB0aGlzIHJlc3BvbnNp YmlsaXR5IG9uIG15IHNlbGYgd2hlbiBhZGRpbmcgdGhlIGlubmVyIGl0ZW1zIGFzIHdlbGwsDQpJ J2xsIHByb3ZpZGUgbmV3IGRlc2lnbiBpbiBmdXR1cmUgZm9yIHRoaXMgYXJlYSB0byBhbGxvdyB0 aGUgdXNlciB0byBjcmVhdGUgYXMgbWFueSBhcyBoZSB3YW50DQpGcm9tIGl0ZW1zIGFuZCBhY3Rp b25zIGV2ZW4gaWYgaXQncyBkdXAuDQoNCj4+DQo+Pj4NCj4+Pj4gKw0KPj4+PiArCWRvIHsNCj4+ Pj4gKwkJcXVldWVfYWN0aW9uLmluZGV4ID0gcXVldWU7DQo+Pj4+ICsJfSB3aGlsZSAoMCk7DQo+ Pj4+ICsNCj4+Pj4gKwlhY3Rpb25zW2FjdGlvbnNfY291bnRlcl0udHlwZSA9IFJURV9GTE9XX0FD VElPTl9UWVBFX1FVRVVFOw0KPj4+PiArCWFjdGlvbnNbYWN0aW9uc19jb3VudGVyXS5jb25mID0g JnF1ZXVlX2FjdGlvbjsgfQ0KPj4+PiArDQo+Pj4+ICt2b2lkDQo+Pj4+ICthZGRfanVtcChzdHJ1 Y3QgcnRlX2Zsb3dfYWN0aW9uICphY3Rpb25zLA0KPj4+PiArCXVpbnQ4X3QgYWN0aW9uc19jb3Vu dGVyLCB1aW50MTZfdCBuZXh0X3RhYmxlKSB7DQo+Pj4+ICsJc3RhdGljIHN0cnVjdCBydGVfZmxv d19hY3Rpb25fanVtcCBqdW1wX2FjdGlvbjsNCj4+Pj4gKw0KPj4+PiArCWRvIHsNCj4+Pj4gKwkJ anVtcF9hY3Rpb24uZ3JvdXAgPSBuZXh0X3RhYmxlOw0KPj4+PiArCX0gd2hpbGUgKDApOw0KPj4+ PiArDQo+Pj4+ICsJYWN0aW9uc1thY3Rpb25zX2NvdW50ZXJdLnR5cGUgPSBSVEVfRkxPV19BQ1RJ T05fVFlQRV9KVU1QOw0KPj4+PiArCWFjdGlvbnNbYWN0aW9uc19jb3VudGVyXS5jb25mID0gJmp1 bXBfYWN0aW9uOyB9DQo+Pj4+ICsNCj4+Pj4gK3ZvaWQNCj4+Pj4gK2FkZF9yc3Moc3RydWN0IHJ0 ZV9mbG93X2FjdGlvbiAqYWN0aW9ucywNCj4+Pj4gKwl1aW50OF90IGFjdGlvbnNfY291bnRlciwg dWludDE2X3QgKnF1ZXVlcywNCj4+Pj4gKwl1aW50MTZfdCBxdWV1ZXNfbnVtYmVyKQ0KPj4+PiAr ew0KPj4+PiArCXN0YXRpYyBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3JzcyAqcnNzX2FjdGlvbjsN Cj4+Pj4gKwlzdGF0aWMgc3RydWN0IGFjdGlvbl9yc3NfZGF0YSAqcnNzX2RhdGE7DQo+Pj4NCj4+ PiBJdCBpcyBiZXR0ZXIgdG8gYWRkIGFuIGVtcHR5IGxpbmUgaGVyZSB0byBzcGxpdCBzdGF0aWMg YW5kIG5vbi1zdGF0aWMNCj4+PiB2YXJpYWJsZSBhbmQgbWFrZSBpdCBlYXN5IHRvIGNhdGNoIHRo ZSBkaWZmZXJlbmNlLg0KPj4+DQo+Pj4+ICsJdWludDE2X3QgcXVldWU7DQo+Pj4+ICsNCj4+Pj4g Kwlyc3NfZGF0YSA9IHJ0ZV9tYWxsb2MoInJzc19kYXRhIiwNCj4+Pj4gKwkJc2l6ZW9mKHN0cnVj dCBhY3Rpb25fcnNzX2RhdGEpLCAwKTsNCj4+Pg0KPj4+IERvZXMgaXQgbWVhbiB0aGF0IHRoZSBz ZWNvbmQgaW52b2NhdGlvbiB3aWxsIG1ha2UgYSBtZW1vcnkgbGVhaz8NCj4+DQo+PiBOb3QgZXhh Y3RseSwgYmVjYXVzZSB0aGUgc2Vjb25kIGludm9jYXRpb24gbWF5IGhhdmUgZGlmZmVyZW50IHF1 ZXVlcw0KPj4gYW5kIG5lZWQgVG8gYmUgdXNlZCB3aXRoIGRpZmZlcmVudCBmbG93LCBzbyBJIHRo aW5rIGl0J3Mgb2sgdG8gcmUgbWFsbG9jIGl0Lg0KPg0KPlNvcnJ5LCBidXQgaXQgZG9lcyBub3Qg YW5zd2VyIG15IHF1ZXN0aW9uLiBJcyBpdCBhIG1lbW9yeSBsZWFrPw0KPklmIHllcywgd2h5IGl0 IGlzIG5vdCBhIHByb2JsZW0gaGVyZT8NCj4NCg0KTm8gSSBkb24ndCB0aGluayBzdWNoIHRoaW5n IGlzIG1lbW9yeSBsZWFrLA0KV2h5Pw0KDQpZb3Ugc2VlIGF0IHRoZSBlbmQgb2YgZWFjaCBhZGRf ZnVuY3Rpb24oKSB3ZSBoYXZlIGEgbGluZSBsaWtlOg0KYWN0aW9uc1thY3Rpb25zX2NvdW50ZXIr K10uY29uZiA9IHJzc19hY3Rpb247DQoNClNvIEknbSBhY3R1YWxseSBzdGlsbCBoYXZpbmcgdGhp cyBtZW1vcnkgaW4gdHJhY2sgZm9yIHRoZSBydGUgZmxvdywNCk5leHQgY2FsbCBmb3Igc2FtZSBm dW5jdGlvbiB3aWxsIG1hbGxvYyBhbm90aGVyIG1lbW9yeSBidXQgYWxzbyB3aWxsIGJlIGtlcHQg aW4gdHJhY2sNCkluIHRoZSBpdGVtcyBsaXN0IHBhc3NlZCBpbiBwYXJhbWV0ZXIuDQpTbyBJIGRv bid0IHNlZSBtZW1vcnkgbGVhayBoZXJlLg0KDQo+Pj4NCj4+Pj4gKw0KPj4+PiArCWlmIChyc3Nf ZGF0YSA9PSBOVUxMKQ0KPj4+PiArCQlydGVfZXhpdChFWElUX0ZBSUxVUkUsICJObyBNZW1vcnkg YXZhaWxhYmxlISIpOw0KPj4+PiArDQo+Pj4+ICsJKnJzc19kYXRhID0gKHN0cnVjdCBhY3Rpb25f cnNzX2RhdGEpew0KPj4+PiArCQkuY29uZiA9IChzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uX3Jzcyl7 DQo+Pj4+ICsJCQkuZnVuYyA9IFJURV9FVEhfSEFTSF9GVU5DVElPTl9ERUZBVUxULA0KPj4+PiAr CQkJLmxldmVsID0gMCwNCj4+Pj4gKwkJCS50eXBlcyA9IEdFVF9SU1NfSEYoKSwNCj4+Pj4gKwkJ CS5rZXlfbGVuID0gc2l6ZW9mKHJzc19kYXRhLT5rZXkpLA0KPj4+PiArCQkJLnF1ZXVlX251bSA9 IHF1ZXVlc19udW1iZXIsDQo+Pj4+ICsJCQkua2V5ID0gcnNzX2RhdGEtPmtleSwNCj4+Pj4gKwkJ CS5xdWV1ZSA9IHJzc19kYXRhLT5xdWV1ZSwNCj4+Pj4gKwkJfSwNCj4+Pj4gKwkJLmtleSA9IHsg MSB9LA0KPj4+PiArCQkucXVldWUgPSB7IDAgfSwNCj4+Pj4gKwl9Ow0KPj4+PiArDQo+Pj4+ICsJ Zm9yIChxdWV1ZSA9IDA7IHF1ZXVlIDwgcXVldWVzX251bWJlcjsgcXVldWUrKykNCj4+Pj4gKwkJ cnNzX2RhdGEtPnF1ZXVlW3F1ZXVlXSA9IHF1ZXVlc1txdWV1ZV07DQo+Pj4+ICsNCj4+Pj4gKwly c3NfYWN0aW9uID0gJnJzc19kYXRhLT5jb25mOw0KPj4+PiArDQo+Pj4+ICsJYWN0aW9uc1thY3Rp b25zX2NvdW50ZXJdLnR5cGUgPSBSVEVfRkxPV19BQ1RJT05fVFlQRV9SU1M7DQo+Pj4+ICsJYWN0 aW9uc1thY3Rpb25zX2NvdW50ZXIrK10uY29uZiA9IHJzc19hY3Rpb247IH0NCj4+Pj4gKw0KPj4+ PiArdm9pZA0KPj4+PiArYWRkX2NvdW50KHN0cnVjdCBydGVfZmxvd19hY3Rpb24gKmFjdGlvbnMs DQo+Pj4+ICsJdWludDhfdCBhY3Rpb25zX2NvdW50ZXIpDQo+Pj4+ICt7DQo+Pj4+ICsJc3RhdGlj IHN0cnVjdCBydGVfZmxvd19hY3Rpb25fY291bnQgY291bnRfYWN0aW9uOw0KPj4+DQo+Pj4gQWdh aW4gaXQgbWVhbnMgaXQgaXMgaW1wb3NzaWJsZSB0byB1c2UgdGhlIGFjdGlvbiB0d2ljZSBpbiBv bmUgcnVsZS4NCj4+DQo+PiBZZXMsDQo+PiBJZiBJIHJlbW92ZWQgdGhlIHN0YXRpYyBmcm9tIHRo ZSBpbm5lciBzY29wZSBoZXJlLCBUaGUgYWN0aW9uIHdpbGwgYmUNCj4+IGZyZWVkIHdoZW4gd2Ug cmVhY2ggdGhlIGVuZCBvZiB0aGUgZmlsZSwNCj4NCj5Ob3Qgc3VyZSB0aGF0IEkgdW5kZXJzdGFu ZC4NCg0Kc2luY2UgdGhlIGRlc2lnbiBoZXJlIHRvIGFkZCB0aGUgYWN0aW9uIGludG8gYWN0aW9u cyBhcnJheSB0byBiZQ0KdXNlZCBsYXRlciBpbiB0aGUgY3JlYXRpb24sIEl0IHdpbGwgbm90IGhh dmUgY29ycmVjdCBhY3Rpb24gaW4gY2FzZSBvZiBub25lLQ0Kc3RhdGljIGluIHRoZSBpbm5lciBz Y29wZSBzaW5jZSB0aGUgbWVtb3J5IHdpbGwgYmUgZnJlZWQgYXQgdGhlIGVuZCBvZiB0aGUgZnVu Y3Rpb24gZm9yIHRoZSBpbm5lcg0KdmFyaWFibGVzLg0KDQo+DQo+PiBBbmQgc2luY2UgdGhlIGRl c2lnbiBoZXJlIHRvIGFkZCB0aGUgYWN0aW9uIGludG8gYWN0aW9ucyBhcnJheSB0byBiZQ0KPj4g dXNlZCBsYXRlciBpbiB0aGUgY3JlYXRpb24sIEl0IHdpbGwgbm90IGhhdmUgY29ycmVjdCBhY3Rp b24gaW4gY2FzZSBvZiBub25lLQ0KPnN0YXRpYyBpbiB0aGUgaW5uZXIgc2NvcGUuDQo+Pg0KPj4g SWYgYW55IGFjdGlvbiBuZWVkcyB0byBoYXZlIHByaXZpbGVnZSB0byBiZSBjYWxsZWQgdHdpY2Ug aW4gc2luZ2xlDQo+PiBydWxlIE5ldyBzdXBwb3J0IG5lZWRzIHRvIGJlIGRvbmUuDQo+Pg0KPj4g VGhpcyBpcyB0aGUgZGVzaWduIGZvciBpdCwgSSdsbCBhZGQgaW50byB0aGUga25vd24gbGltaXRh dGlvbi4NCj4+DQo+Pj4+ICtzdGF0aWMgdm9pZA0KPj4+PiArZmlsbF9pdGVtcyhzdHJ1Y3QgcnRl X2Zsb3dfaXRlbSAqaXRlbXMsDQo+Pj4+ICsJdWludDMyX3QgZmxvd19pdGVtcywgdWludDMyX3Qg b3V0ZXJfaXBfc3JjKQ0KPj4+DQo+Pj4gSXQgbG9va3MgbGlrZSBpdCBpcyBiZXR0ZXIgdG8gaGF2 ZSB0aGUgZnVuY3Rpb24gaW5zaWRlIGl0ZW1zX2dlbi5jLg0KPj4+IEl0IHdvdWxkIGFsbG93IHRv IG1ha2UgYWxsIGFkZF88aXRlbT4gZnVuY3Rpb25zIGxvY2FsIHRvIGl0ZW1zX2dlbi5jLg0KPj4+ DQo+Pj4+ICt7DQo+Pj4+ICsJdWludDhfdCBpdGVtc19jb3VudGVyID0gMDsNCj4+Pj4gKw0KPj4+ PiArCS8qIFN1cHBvcnQgb3V0ZXIgaXRlbXMgdXAgdG8gdHVubmVsIGxheWVyIG9ubHkuICovDQo+ Pj4+ICsNCj4+Pj4gKwlpZiAoZmxvd19pdGVtcyAmIEZMT1dfSVRFTV9NQVNLKFJURV9GTE9XX0lU RU1fVFlQRV9NRVRBKSkNCj4+Pj4gKwkJYWRkX21ldGFfZGF0YShpdGVtcywgaXRlbXNfY291bnRl cisrKTsNCj4+Pj4gKwlpZiAoZmxvd19pdGVtcyAmIEZMT1dfSVRFTV9NQVNLKFJURV9GTE9XX0lU RU1fVFlQRV9UQUcpKQ0KPj4+PiArCQlhZGRfbWV0YV90YWcoaXRlbXMsIGl0ZW1zX2NvdW50ZXIr Kyk7DQo+Pj4+ICsJaWYgKGZsb3dfaXRlbXMgJiBGTE9XX0lURU1fTUFTSyhSVEVfRkxPV19JVEVN X1RZUEVfRVRIKSkNCj4+Pj4gKwkJYWRkX2V0aGVyKGl0ZW1zLCBpdGVtc19jb3VudGVyKyspOw0K Pj4+PiArCWlmIChmbG93X2l0ZW1zICYgRkxPV19JVEVNX01BU0soUlRFX0ZMT1dfSVRFTV9UWVBF X1ZMQU4pKQ0KPj4+PiArCQlhZGRfdmxhbihpdGVtcywgaXRlbXNfY291bnRlcisrKTsNCj4+Pj4g KwlpZiAoZmxvd19pdGVtcyAmIEZMT1dfSVRFTV9NQVNLKFJURV9GTE9XX0lURU1fVFlQRV9JUFY0 KSkNCj4+Pj4gKwkJYWRkX2lwdjQoaXRlbXMsIGl0ZW1zX2NvdW50ZXIrKywgb3V0ZXJfaXBfc3Jj KTsNCj4+Pj4gKwlpZiAoZmxvd19pdGVtcyAmIEZMT1dfSVRFTV9NQVNLKFJURV9GTE9XX0lURU1f VFlQRV9JUFY2KSkNCj4+Pj4gKwkJYWRkX2lwdjYoaXRlbXMsIGl0ZW1zX2NvdW50ZXIrKywgb3V0 ZXJfaXBfc3JjKTsNCj4+Pj4gKwlpZiAoZmxvd19pdGVtcyAmIEZMT1dfSVRFTV9NQVNLKFJURV9G TE9XX0lURU1fVFlQRV9UQ1ApKQ0KPj4+PiArCQlhZGRfdGNwKGl0ZW1zLCBpdGVtc19jb3VudGVy KyspOw0KPj4+PiArCWlmIChmbG93X2l0ZW1zICYgRkxPV19JVEVNX01BU0soUlRFX0ZMT1dfSVRF TV9UWVBFX1VEUCkpDQo+Pj4+ICsJCWFkZF91ZHAoaXRlbXMsIGl0ZW1zX2NvdW50ZXIrKyk7DQo+ Pj4+ICsJaWYgKGZsb3dfaXRlbXMgJiBGTE9XX0lURU1fTUFTSyhSVEVfRkxPV19JVEVNX1RZUEVf VlhMQU4pKQ0KPj4+PiArCQlhZGRfdnhsYW4oaXRlbXMsIGl0ZW1zX2NvdW50ZXIrKyk7DQo+Pj4+ ICsJaWYgKGZsb3dfaXRlbXMgJg0KPj4+IEZMT1dfSVRFTV9NQVNLKFJURV9GTE9XX0lURU1fVFlQ RV9WWExBTl9HUEUpKQ0KPj4+PiArCQlhZGRfdnhsYW5fZ3BlKGl0ZW1zLCBpdGVtc19jb3VudGVy KyspOw0KPj4+PiArCWlmIChmbG93X2l0ZW1zICYgRkxPV19JVEVNX01BU0soUlRFX0ZMT1dfSVRF TV9UWVBFX0dSRSkpDQo+Pj4+ICsJCWFkZF9ncmUoaXRlbXMsIGl0ZW1zX2NvdW50ZXIrKyk7DQo+ Pj4+ICsJaWYgKGZsb3dfaXRlbXMgJg0KPj4+IEZMT1dfSVRFTV9NQVNLKFJURV9GTE9XX0lURU1f VFlQRV9HRU5FVkUpKQ0KPj4+PiArCQlhZGRfZ2VuZXZlKGl0ZW1zLCBpdGVtc19jb3VudGVyKysp Ow0KPj4+PiArCWlmIChmbG93X2l0ZW1zICYgRkxPV19JVEVNX01BU0soUlRFX0ZMT1dfSVRFTV9U WVBFX0dUUCkpDQo+Pj4+ICsJCWFkZF9ndHAoaXRlbXMsIGl0ZW1zX2NvdW50ZXIrKyk7DQo+Pj4N Cj4+PiBJdCBjb3VsZCBiZSBkb25lIGluIGEgbG9vcDogZGVmaW5lIGFuIGFycmF5IG9mIHN0cnVj dHVyZXMNCj4+PiBGTE9XX0lURU1fTUFTSyhwcm90bykgdmFsdWVzIGFuZCBhZGQgZnVuY3Rpb24g d2hpY2ggc2hvdWxkIGJlIGNhbGxlZC4NCj4+PiBUaGUgb25seSBleGNlcHRpb24gaXMgSVB2NC9J UHY2IHdoaWNoIHJlcXVpcmVzIGV4dHJhIGFyZ3VtZW50IC0gc28NCj4+PiBhbGwgYWRkIGNhbGxi YWNrcyBzaG91bGQgaGF2ZSBhZGRfZGF0YSBhcmd1bWVudCB3aGljaCBpcyBhIHN0cnVjdHVyZQ0K Pj4+IHdpdGggcG9zc2libGUgdHVuaW5ncy4NCj4+DQo+PiBPaywgbGV0IG1lIHJlLXBocmFzZSB0 byBtYWtlIHN1cmUgSSBnb3QgaXQ6DQo+PiAxLSBNb3ZlIGl0IHRvIGl0ZW1zX2dlbi5jDQo+PiAy LSBDcmVhdGUgYXJyYXkgb2Ygc3RydWN0dXJlcyB3aXRoIGFsbCBpdGVtcy4NCj4+IFRoZSBzdHJ1 Y3R1cmUgc2hvdWxkIGJlIHNvbWV0aGluZyBsaWtlIHRoaXM6DQo+PiAgc3RhdGljIGNvbnN0IHN0 cnVjdCBpdGVtc19kaWN0IHsNCj4+ICAgICAgICAgY29uc3QgdWludDY0X3QgbWFzazsNCj4NCj5j b25zdCBpcyBub3QgcmVxdWlyZWQgaGVyZQ0KPg0KPj4gICAgICAgICB2b2lkICgqZnVuY3QpKHN0 cnVjdCBydGVfZmxvd19pdGVtICppdGVtcywNCj4+ICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQ4X3QgaXRlbXNfY291bnRlciwgcnRlX2JlMzJfdCBzcmNfaXApOw0KPg0KPlRoZSBsYXN0IGFy Z3VtZW50IHNob3VsZCBiZSBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3R1cmUgd2l0aCBzcmNfaXAgZmll bGQgdG8gbWFrZQ0KPml0IGdlbmVyaWMgYW5kIGJlIGFibGUgdG8gYWRkIG1vcmUgYXJndW1lbnQg dmFsdWVzIHRoZXJlLg0KPg0KPj4gICAgICAgICBib29sIGFkZF9hcmdzOw0KPj4gICAgIH0NCj4+ IDMtIEkgbmVlZCB0byBjaGFuZ2UgdGhlIHNpZ25hdHVyZSAicGFyYW1ldGVycyIgdG8gYWxsIG90 aGVyIHRoYW4NCj4+IGlwdjQsaXB2NiB0byBoYXZlIGFub3RoZXIgcGFyYW1ldGVyIHRvIEhhdmUg bWF0Y2hlZCBzaW5ndHVyZS4NCj4+IDQtIGluIG5vbmUtaXB2NC1pcHY2IGl0ZW0gSSBuZWVkIHRv IGNhbGwgdGhlIFJURV9TRVRfVVNFRChzcmNfaXApOw0KPj4gNS0gbG9vcCBvdmVyIHRoZSBhcnJh eSB0byBhZGQgaXRlbXMNCj4+DQo+PiBJcyB0aGlzIHJpZ2h0Pw0KPg0KPlllcywgd2l0aCBhYm92 ZSBjb3JyZWN0aW9ucy4NCj4NCj4+Pg0KPj4+PiArDQo+Pj4+ICsJaXRlbXNbaXRlbXNfY291bnRl cl0udHlwZSA9IFJURV9GTE9XX0lURU1fVFlQRV9FTkQ7IH0NCj4+Pj4gKw0KPj4+PiArc3RhdGlj IHZvaWQNCj4+Pj4gK2ZpbGxfYWN0aW9ucyhzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uICphY3Rpb25z LA0KPj4+PiArCXVpbnQzMl90IGZsb3dfYWN0aW9ucywgdWludDMyX3QgY291bnRlciwgdWludDE2 X3QgbmV4dF90YWJsZSwNCj4+Pj4gKwl1aW50MTZfdCBoYWlycGlucSkNCj4+Pg0KPj4+DQo+Pj4g SXQgbG9va3MgbGlrZSBpdCBpcyBiZXR0ZXIgdG8gaGF2ZSB0aGUgZnVuY3Rpb24gaW5zaWRlIGFj dGlvbnNfZ2VuLmMuDQo+Pj4gSXQgd291bGQgYWxsb3cgdG8gbWFrZSBhbGwgYWRkXzxhY3Rpb24+ IGZ1bmN0aW9ucyBsb2NhbCB0bw0KPj4+IGFjdGlvbnNfZ2VuLmMuDQo+Pg0KPj4gU3VyZSwgYnV0 ICB0aGlzIG9uZSB3aWxsIHJlbWFpbiBhcyBpcywgc2luY2UgdGhlIGFjdGlvbnMgaGF2ZQ0KPj4g ZGlmZmVyZW50IHNpZ25hdHVyZSBhbmQgb3RoZXIgYWN0aW9ucyB3aGVuIGJlIGFkZGVkIFdpbGwg aGF2ZSBtb3JlDQo+ZGlmZmVyZW50IHBhcmFtZXRlcnMuDQo+DQo+U29ycnksIHN0aWxsIGRvbid0 IHVuZGVyc3RhbmQgd2h5Lg0KPg0KPj4+DQo+Pj4+ICt7DQo+Pj4+ICsJdWludDhfdCBhY3Rpb25z X2NvdW50ZXIgPSAwOw0KPj4+PiArCXVpbnQxNl90IGhhaXJwaW5fcXVldWVzW2hhaXJwaW5xXTsN Cj4+Pj4gKwl1aW50MTZfdCBxdWV1ZXNbUlhRX05VTV07DQo+Pj4+ICsJdWludDE2X3QgaTsNCj4+ Pj4gKw0KPj4+PiArCS8qIE5vbmUtZmF0ZSBhY3Rpb25zICovDQo+Pj4+ICsJaWYgKGZsb3dfYWN0 aW9ucyAmDQo+Pj4gRkxPV19JVEVNX01BU0soUlRFX0ZMT1dfQUNUSU9OX1RZUEVfTUFSSykpDQo+ Pj4+ICsJCWFkZF9tYXJrKGFjdGlvbnMsIGFjdGlvbnNfY291bnRlcisrKTsNCj4+Pj4gKwlpZiAo Zmxvd19hY3Rpb25zICYNCj4+PiBGTE9XX0lURU1fTUFTSyhSVEVfRkxPV19BQ1RJT05fVFlQRV9D T1VOVCkpDQo+Pj4+ICsJCWFkZF9jb3VudChhY3Rpb25zLCBhY3Rpb25zX2NvdW50ZXIrKyk7DQo+ Pj4+ICsJaWYgKGZsb3dfYWN0aW9ucyAmDQo+Pj4gRkxPV19JVEVNX01BU0soUlRFX0ZMT1dfQUNU SU9OX1RZUEVfU0VUX01FVEEpKQ0KPj4+PiArCQlhZGRfc2V0X21ldGEoYWN0aW9ucywgYWN0aW9u c19jb3VudGVyKyspOw0KPj4+PiArCWlmIChmbG93X2FjdGlvbnMgJg0KPj4+IEZMT1dfSVRFTV9N QVNLKFJURV9GTE9XX0FDVElPTl9UWVBFX1NFVF9UQUcpKQ0KPj4+PiArCQlhZGRfc2V0X3RhZyhh Y3Rpb25zLCBhY3Rpb25zX2NvdW50ZXIrKyk7DQo+Pj4+ICsNCj4+Pj4gKwkvKiBGYXRlIGFjdGlv bnMgKi8NCj4+Pj4gKwlpZiAoZmxvd19hY3Rpb25zICYNCj4+PiBGTE9XX0lURU1fTUFTSyhSVEVf RkxPV19BQ1RJT05fVFlQRV9RVUVVRSkpDQo+Pj4+ICsJCWFkZF9xdWV1ZShhY3Rpb25zLCBhY3Rp b25zX2NvdW50ZXIrKywgY291bnRlciAlDQo+Pj4gUlhRX05VTSk7DQo+Pj4+ICsJaWYgKGZsb3df YWN0aW9ucyAmDQo+Pj4gRkxPV19JVEVNX01BU0soUlRFX0ZMT1dfQUNUSU9OX1RZUEVfUlNTKSkg ew0KPj4+PiArCQlmb3IgKGkgPSAwOyBpIDwgUlhRX05VTTsgaSsrKQ0KPj4+PiArCQkJcXVldWVz W2ldID0gaTsNCj4+Pj4gKwkJYWRkX3JzcyhhY3Rpb25zLCBhY3Rpb25zX2NvdW50ZXIrKywgcXVl dWVzLCBSWFFfTlVNKTsNCj4+Pj4gKwl9DQo+Pj4+ICsJaWYgKGZsb3dfYWN0aW9ucyAmDQo+Pj4g RkxPV19JVEVNX01BU0soUlRFX0ZMT1dfQUNUSU9OX1RZUEVfSlVNUCkpDQo+Pj4+ICsJCWFkZF9q dW1wKGFjdGlvbnMsIGFjdGlvbnNfY291bnRlcisrLCBuZXh0X3RhYmxlKTsNCj4+Pj4gKwlpZiAo Zmxvd19hY3Rpb25zICYNCj4+PiBGTE9XX0lURU1fTUFTSyhSVEVfRkxPV19BQ1RJT05fVFlQRV9Q T1JUX0lEKSkNCj4+Pj4gKwkJYWRkX3BvcnRfaWQoYWN0aW9ucywgYWN0aW9uc19jb3VudGVyKysp Ow0KPj4+PiArCWlmIChmbG93X2FjdGlvbnMgJg0KPj4+IEZMT1dfSVRFTV9NQVNLKFJURV9GTE9X X0FDVElPTl9UWVBFX0RST1ApKQ0KPj4+PiArCQlhZGRfZHJvcChhY3Rpb25zLCBhY3Rpb25zX2Nv dW50ZXIrKyk7DQo+Pj4+ICsJaWYgKGZsb3dfYWN0aW9ucyAmIEhBSVJQSU5fUVVFVUVfQUNUSU9O KQ0KPj4+PiArCQlhZGRfcXVldWUoYWN0aW9ucywgYWN0aW9uc19jb3VudGVyKyssDQo+Pj4+ICsJ CQkoY291bnRlciAlIGhhaXJwaW5xKSArIFJYUV9OVU0pOw0KPj4+PiArCWlmIChmbG93X2FjdGlv bnMgJiBIQUlSUElOX1JTU19BQ1RJT04pIHsNCj4+Pj4gKwkJZm9yIChpID0gMDsgaSA8IGhhaXJw aW5xOyBpKyspDQo+Pj4+ICsJCQloYWlycGluX3F1ZXVlc1tpXSA9IGkgKyBSWFFfTlVNOw0KPj4+ PiArCQlhZGRfcnNzKGFjdGlvbnMsIGFjdGlvbnNfY291bnRlcisrLCBoYWlycGluX3F1ZXVlcywN Cj4+PiBoYWlycGlucSk7DQo+Pj4+ICsJfQ0KPj4+PiArDQo+Pj4+ICsJYWN0aW9uc1thY3Rpb25z X2NvdW50ZXJdLnR5cGUgPSBSVEVfRkxPV19BQ1RJT05fVFlQRV9FTkQ7IH0NCj4+Pj4gKw0KPj4+ PiArDQo+Pj4+ICt2b2lkDQo+Pj4+ICthZGRfZXRoZXIoc3RydWN0IHJ0ZV9mbG93X2l0ZW0gKml0 ZW1zLCB1aW50OF90IGl0ZW1zX2NvdW50ZXIpIHsNCj4+Pj4gKwlzdGF0aWMgc3RydWN0IHJ0ZV9m bG93X2l0ZW1fZXRoIGV0aF9zcGVjOw0KPj4+PiArCXN0YXRpYyBzdHJ1Y3QgcnRlX2Zsb3dfaXRl bV9ldGggZXRoX21hc2s7DQo+Pj4NCj4+PiBTYW1lIGFzIGFjdGlvbnMsIGl0IGRvZXMgbm90IGFs bG93IHRvIGhhdmUgdHdvIEV0aCBpdGVtcyBpbiBvbmUgcnVsZS4NCj4+PiBIb3dldmVyLCBpdCBs b29rcyBsaWtlIGN1cnJlbnQgZGVzaWduIGRvZXMgbm90IGNvdmVyIGl0IGFscmVhZHkgb24NCj4+ PiBtYXNrIGxldmVsLg0KPj4NCj4+IFllcywgaW5kZWVkLg0KPj4gQWxyZWFkeSBhZGQgdGhpcyBp biBmbG93X3BlcmYucnN0IGFzIGtub3duIGxpbWl0YXRpb24uDQo+Pg0KPj4+DQo+Pj4+ICAJCS8q IENvbnRyb2wgKi8NCj4+Pj4gIAkJeyAiaGVscCIsICAgICAgICAgICAgICAgICAgICAgICAwLCAw LCAwIH0sDQo+Pj4+ICsJCXsgImZsb3dzLWNvdW50IiwgICAgICAgICAgICAgICAgMSwgMCwgMCB9 LA0KPj4+PiArCQl7ICJkdW1wLWl0ZXJhdGlvbnMiLCAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+ Pg0KPj4+IEl0IGxvb2tzIGxpa2UgYWJvdmUgaXQgdGhlIHBhdGggd2hpY2ggc2hvdWxkIGJlIGRl ZmluZWQgaGVyZS4NCj4+DQo+PiBJJ20gbm90IGZvbGxvd2luZywgd2hhdCBkbyB5b3UgbWVhbj8N Cj4NCj5TZWUgYmVsb3cuIEkgd2FzIGp1c3QgdHJ5aW5nIHRvIHNlcGFyYXRlbHkgc3RhdGljIGFu ZCBkeW5hbWljYWxseSBhZGRlZCBwYXJ0cy4NCg0KQnV0IHRvIGRvIHNvbWV0aGluZyBsaWtlIHRo aXMgSSBuZWVkIHRvIGRlZmluZSB0aGUgc2l6ZSBvZiB0aGlzIHN0YXRpY2FsbHksDQpBbmQgYW55 b25lIHdhbnQgdG8gYWRkIGFueSBvcHRpb24vaXRlbSBvciBhY3Rpb24gbGF0ZXIgb24gaGUgbmVl ZCB0byBkbyBtb2RpZmljYXRpb24gaW4gc2l6ZSBoZXJlDQpBbmQgaW4gbG9vcCBwZXJoYXBzLg0K DQpJIHN0aWxsIHNlZSB0aGlzIGlzIGJldHRlciBhbmQgZWFzaWVyIHRvIG1haW50YWluLg0KV2hh dCBkbyB5b3UgdGhpbms/DQoNCj4NCj4+Pg0KPj4+PiArCQkvKiBBdHRyaWJ1dGVzICovDQo+Pj4+ ICsJCXsgImluZ3Jlc3MiLCAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4+PiArCQl7 ICJlZ3Jlc3MiLCAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+Pj4gKwkJeyAidHJh bnNmZXIiLCAgICAgICAgICAgICAgICAgICAwLCAwLCAwIH0sDQo+Pj4+ICsJCXsgImdyb3VwIiwg ICAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCB9LA0KPj4+PiArCQkvKiBJdGVtcyAqLw0KPj4+ PiArCQl7ICJldGhlciIsICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+Pj4gKwkJ eyAidmxhbiIsICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwIH0sDQo+Pj4+ICsJCXsgImlw djQiLCAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4+PiArCQl7ICJpcHY2Iiwg ICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+Pj4gKwkJeyAidGNwIiwgICAgICAg ICAgICAgICAgICAgICAgICAwLCAwLCAwIH0sDQo+Pj4+ICsJCXsgInVkcCIsICAgICAgICAgICAg ICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4+PiArCQl7ICJ2eGxhbiIsICAgICAgICAgICAgICAg ICAgICAgIDAsIDAsIDAgfSwNCj4+Pj4gKwkJeyAidnhsYW4tZ3BlIiwgICAgICAgICAgICAgICAg ICAwLCAwLCAwIH0sDQo+Pj4+ICsJCXsgImdyZSIsICAgICAgICAgICAgICAgICAgICAgICAgMCwg MCwgMCB9LA0KPj4+PiArCQl7ICJnZW5ldmUiLCAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAg fSwNCj4+Pj4gKwkJeyAiZ3RwIiwgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwIH0sDQo+ Pj4+ICsJCXsgIm1ldGEiLCAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4+PiAr CQl7ICJ0YWciLCAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+Pj4gKwkJLyog QWN0aW9ucyAqLw0KPj4+PiArCQl7ICJwb3J0LWlkIiwgICAgICAgICAgICAgICAgICAgIDAsIDAs IDAgfSwNCj4+Pj4gKwkJeyAicnNzIiwgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwIH0s DQo+Pj4+ICsJCXsgInF1ZXVlIiwgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4+ PiArCQl7ICJqdW1wIiwgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+Pj4gKwkJ eyAibWFyayIsICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwIH0sDQo+Pj4+ICsJCXsgImNv dW50IiwgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4+PiArCQl7ICJzZXQtbWV0 YSIsICAgICAgICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+Pj4gKwkJeyAic2V0LXRhZyIsICAg ICAgICAgICAgICAgICAgICAwLCAwLCAwIH0sDQo+Pj4+ICsJCXsgImRyb3AiLCAgICAgICAgICAg ICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4+PiArCQl7ICJoYWlycGluLXF1ZXVlIiwgICAgICAg ICAgICAgIDEsIDAsIDAgfSwNCj4+Pj4gKwkJeyAiaGFpcnBpbi1yc3MiLCAgICAgICAgICAgICAg ICAxLCAwLCAwIH0sDQo+Pj4NCj4+PiBUaGlzIHBhcnQgc2hvdWxkIGJlIGFkZGVkIGJ5IGNvZGUg d2hpY2ggaXRlcmF0ZXMgYnkgZmxvd19vcHRpb25zLg0KPj4+IEkuZS4gYWxsb2NhdGUgbGdvcHRz IGR5bmFtaWNhbGx5LCBjb3B5IHN0YXRpYyBvcHRpb25zIHRoZXJlIGJ5DQo+Pj4gbWVtY3B5KCkg YW5kIGFkZCBkeW5hbWljIGFzIGRlc2NyaWJlZCBhYm92ZS4gTWF5IGJlIGZsb3dfb3B0aW9ucw0K Pj4+IHJlcXVpcmUgZXh0cmEgZmllbGQgICdoYXNfYXJnJy4NCj4+DQo+PiBSZWdhcmQgdGhpcyBv bmUsDQo+PiBTb21lIG9wdGlvbiBoYXZlIHNwZWNpYWwgY29kZSwgbGlrZSBoYWlycGluLCBncm91 cCBhbmQgY29udHJvbCwgc28NCj4+IGV2ZW4gd2l0aCBoYXNfYXJnIEl0IGNhbm5vdCBiZSBsb29w ZWQgaW4gcHJldHR5IHdheSwgSSB0cmllZCBpdCBhbmQgaXQgYmVjYW1lDQo+dWdseSwgSSBwcmVm ZXIgdG8gbGVhdmUgdGhpcyBhcyBpdC4NCj4+IEkgZG9uJ3QgdGhpbmsgaXQncyBjcml0aWNhbCB0 byBnZXQgcmlkIG9mIGl0PyBXaGF0IGRvIHlvdSB0aGluaz8NCj4NCj5ZZXMsIGl0IGlzIG5vdCBj cml0aWNhbCwgYnV0IGxvb2tpbmcgYXQgYWJvdmUgYXJyYXksIEkgZG9uJ3QgdW5kZXJzdGFuZCBo b3cgaXQgY291bGQNCj5iZWNvbWUgdWdseS4NCg==