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 C0E67A00C5; Thu, 7 May 2020 14:38:19 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9C8AC1D5B1; Thu, 7 May 2020 14:38:19 +0200 (CEST) Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00069.outbound.protection.outlook.com [40.107.0.69]) by dpdk.org (Postfix) with ESMTP id 277091C246 for ; Thu, 7 May 2020 14:38:19 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hzzkKKjIjwsxnmVQkk5pRZY7+rcBmIzUMjt3R59P/Dumh2WLZt4HRaFcf0CtrVk5PRKzMhmTzdW1/NLcUNtSB9+8KkzLRUjG4bhE9oSL0NQKxR+bDbkJ1wXsgfoV0N9gghuU1f+6uScPeYAb0IbFMswGjQAhgqzs6fGu95c2PmA9kEYtPrDxpo5ghWMB1bjn56tuX3mWuL2npW+D2Lp4TRFg2kl0fzSi+08KiN0YH2DYNBEd0nP605dZ6yqwPKh2xtyZgn1Jv0OCwTcaWGf0sDcthzThLRmCcFuDA56miKxkZm1V3Iu9OZFrA4RqY1uixyhfmmj+6yVfcmGyar3b7g== 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=41tdlmcPX+7l8r2AewR+EoAQDXanOTwpgTeGhjqHMis=; b=d1v2qkPb6x3fzI8Wdjj8x/FVbfy0Dw1g6J1WAoBEP1r9KsBRY/3WZ/rgUWUV+IQl4Y5/Mnf7zK9S+8ANC5P/1U161s0Rm4IHd6sYjt+xRx374XAPm3Gxgqm6ZOZQMVFuBRhEppRIpHDpquGBEo3NAOZiPiCk0acLzn3UqwTJePkUFctk2xIVnNFCjx3PBeNQJLeUG6/TsgUDJoVldb17fxugAQPszKZ5KtBdmjragjKgwUDoBzdQEg1LLky7xn3zOpIuif3YbGPQfyePzAw9O5BLNapQwfiwF/5MdyJmC8uKgHWZHKJTzNQwlS0E9rm+KhJVaOll1YlHHoOS/h9Bmw== 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=41tdlmcPX+7l8r2AewR+EoAQDXanOTwpgTeGhjqHMis=; b=k2zqHOKT/GW+5qNrj2Q7T22qadAnSypAO08YL400kgnBEB/ALyJ7sljBUFZw3odCsh9OdKE8DsAcAk2KCwVEqqoUgizEPb4CzXjpmnCl0N2uAmkgU21I0rsxUygvlqSjRfoOU9BFz9H3SUOH/ptstZJ2hto9ddUlZ5LXYBcqM7Q= Received: from AM0PR05MB6610.eurprd05.prod.outlook.com (2603:10a6:208:12f::18) by AM0PR05MB4947.eurprd05.prod.outlook.com (2603:10a6:208:cd::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2958.29; Thu, 7 May 2020 12:38:16 +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.2958.034; Thu, 7 May 2020 12:38:16 +0000 From: Wisam Monther To: Andrew Rybchenko , "dev@dpdk.org" , Jack Min , Thomas Monjalon , "jerinjacobk@gmail.com" , "gerlitz.or@gmail.com" , "l.yan@epfl.ch" , "ajit.khaparde@broadcom.com" CC: Stephen Hemminger , "david.marchand@redhat.com" Thread-Topic: [dpdk-dev] [PATCH v5 2/5] app/flow-perf: add insertion rate calculation Thread-Index: AQHWI6MBtkdiu/v2bkOXd//LylrmWKibLXMAgAEcZtA= Date: Thu, 7 May 2020 12:38:16 +0000 Message-ID: References: <20200430103341.1845-2-wisamm@mellanox.com> <20200506123627.22340-1-wisamm@mellanox.com> <20200506123627.22340-3-wisamm@mellanox.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: solarflare.com; dkim=none (message not signed) header.d=none;solarflare.com; dmarc=none action=none header.from=mellanox.com; x-originating-ip: [188.161.228.59] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 86a9dbf5-3429-4db8-ea49-08d7f2838426 x-ms-traffictypediagnostic: AM0PR05MB4947:|AM0PR05MB4947: 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:8882; x-forefront-prvs: 03965EFC76 x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: eA5+Dzo14uYuMtj4u39vMhAdw7Dv0j26n085NqeWmpGCRHr4x9dZpEkkSh4Iix44ged1bXpz1gGM6jdc5BpSTeiI9q//zPU70BLUT7zebJJpta7pEjjd+RHGj2x9znUxjhc96PoM6C4XTCySE+HlvslNhdpwuUbuUpc7AmqAhuaDwIzKacS9tmyUptn5khSgQEQ5BLr6KJz0q+ZHCR8CIo0fY1iYSduDR5ZvBbnRFjP0Nv1kdx9jA/r0bgkyFRLzkZ2ihxi/lLfhyrqz9M2ByVxudPInV0JhmGd3IpOPJq5D8QHkU5UpjlGfQa+3ijdoStavUW/w4YGXz42hmtqSNMkNYSIL2Zlg5jn9Kq+9MqKjEnxkKICqKUf4Dw4Ra06mWFsTPCq3ewanr0fm0W+ksDVPY4wjQaZ53EfG8ISt5qia+GvvGx2zYBwYJkFlpNOdNDc8q5yA6JC/x5lzZmNuDwpmSwVxfFMbM+82vvLaLIJ/oDgEUhzBaWr3Z+aJvFeyJlui41Go4Q4+U234bOc1EfyvDIjWcT9rhq7jDNTyV4g825vYQHP/atF13JflGIw5 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)(376002)(346002)(396003)(39860400002)(136003)(33430700001)(110136005)(186003)(9686003)(316002)(4326008)(8676002)(6506007)(5660300002)(8936002)(54906003)(2906002)(7696005)(26005)(52536014)(76116006)(478600001)(66446008)(33440700001)(86362001)(66476007)(66946007)(33656002)(55016002)(64756008)(83320400001)(83280400001)(83310400001)(83290400001)(30864003)(71200400001)(66556008)(45080400002)(83300400001)(559001)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: W1FXs0je8Ud5jGzyvNy/a1jKy8ETpiF79j8IevqldLrtGVpEIItKluv4VcylnlOhIli8Pr3NL7/74L7GFkglXTimlZFvd9mDzxIKGHFLXGaCjWJJz8nqahVvPhIfeg0iB82qTA+MwUyu8euBFzGeiAMI7K6jN3RUBeC0JwzeNxKKymM88Nrt4aYe/Vf/2B33bjZxGOnXsmExg/HduW835Ho2W1JZnYUzM9oXxSmc2sVRR496Z89zan0r0zih2UrSNfn8nnzk/NGIaQ15tXfNMlAQPjZz7gYf84Ur+rdWtv3U16O8Pk8yZghYySUwbgXI/z6DMTKklK8Pi32JSSP8A721Z2gY4X/DpKsgSBb5Rcv2AmzkI003nU9qy1K38XPTgWIcfQLDXoXUx2KS1XEXzFO4tWKchiZe4VqWn/k6l8kNygs4TjiLwOHnWmW+DPzJJ6/3q7KLvqv3xRBZdKYSgXgwgLtJBKuI4NLuTwmsvkWhg6Ol+HVYiISY9+w7vPJF/b8FcZyUom6WUuIY5Op1CSJE37C3iWNoBKAO340XkMbooeZ8Fglrnc58V49iQz9uJGGMwQLSJHFzlozArgyd4BgZjQMRrL9oqRHW2o0m+OBfWkWsG+9bggiWq1MS4jc/7l5iZbWxESVVjhiZmNqEmy7hfyxmdOsXVLHFpp92/fUNjTzmSAMHpVFp3juytx5Lv7USnqWS91wtpkigxyHXdFPrzjFt+QkxjhQryYdlZxTYn+pp3xzGJWSephMf2lUAN6+lM2a1MhxuksnzpBnf4RZU912MepmxQF8fG1qrJ/Y= 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: 86a9dbf5-3429-4db8-ea49-08d7f2838426 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 May 2020 12:38:16.6945 (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: kkRCn2jQzsmktcTqaXM6ZZK3Xajmz707KwMJ+JvibkRodPcq0OVEKCRRUtG0s+zp1JEPkqnF7DCriY1QcKnQHQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR05MB4947 Subject: Re: [dpdk-dev] [PATCH v5 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" Pi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+RnJvbTogQW5kcmV3IFJ5YmNoZW5rbyA8YXJ5 YmNoZW5rb0Bzb2xhcmZsYXJlLmNvbT4NCj5TZW50OiBXZWRuZXNkYXksIE1heSA2LCAyMDIwIDY6 MjQgUE0NCj5UbzogV2lzYW0gTW9udGhlciA8d2lzYW1tQG1lbGxhbm94LmNvbT47IGRldkBkcGRr Lm9yZzsgSmFjayBNaW4NCj48amFja21pbkBtZWxsYW5veC5jb20+OyBUaG9tYXMgTW9uamFsb24g PHRob21hc0Btb25qYWxvbi5uZXQ+Ow0KPmplcmluamFjb2JrQGdtYWlsLmNvbTsgZ2VybGl0ei5v ckBnbWFpbC5jb207IGwueWFuQGVwZmwuY2g7DQo+YWppdC5raGFwYXJkZUBicm9hZGNvbS5jb20N Cj5DYzogU3RlcGhlbiBIZW1taW5nZXIgPHN0ZXBoZW5AbmV0d29ya3BsdW1iZXIub3JnPjsNCj5k YXZpZC5tYXJjaGFuZEByZWRoYXQuY29tDQo+U3ViamVjdDogUmU6IFtkcGRrLWRldl0gW1BBVENI IHY1IDIvNV0gYXBwL2Zsb3ctcGVyZjogYWRkIGluc2VydGlvbiByYXRlDQo+Y2FsY3VsYXRpb24N Cj4NCj5NeSBiaWdnZXN0IGNvbmNlcnQgd2l0aCB0aGUgcGF0Y2ggaXMgdXNhZ2Ugb2YgaHVnZSBu dW1iZXIgb2YgZ2xvYmFsIHZhcmlhYmxlcw0KPndoaWNoIG1ha2VzIHRoZSBjb2RlIGhhcmQgdG8g cmVhZCwgdW5kZXJzdGFuZCBhbmQgbWFpbnRhaW4uIFNlZSBteSBub3Rlcw0KPmJlbG93Lg0KPlBs ZWFzZSwgc2hhcmUgeW91ciB0aG91Z2h0cy4NCg0KSSBjYW4gZG8gdGhlIGZvbGxvd2luZyByZWdh cmQgdGhlIGdsb2JhbDoNCkdsb2JhbCB2YXJzIGluIG1haW4uYzoNCkkgdGhpbmsgaXQncyBvayB0 byBsZWF2ZSB0aGVtIGFzIGl0LCBzaW5jZSB0aGV5IGFyZSBjb250cm9sIGFuZCB0aGV5IHN0cmFp Z2h0Zm9yd2FyZC4NCkFzIGZvciBpdGVtc19nZW4uYzogSSdsbCBtb3ZlIHRoZW0gaW5zaWRlIHRo ZSBmdW5jdGlvbnMgaXRzZWxmLCBhbmQgZ2V0IHJpZCBvZiBhbGwgZ2xvYmFsIHRoZXJlLg0KQXMg Zm9yIGFjdGlvbnNfZ2VuLmM6IEknbGwgcmVkZXNpZ24gdGhlbSB0byBiZSBhcyBpdGVtcyBhbmQg Z2V0IHJpZCBvZiBnbG9iYWwgdmFycy4NCg0KV2hhdCBkbyB5b3UgdGhpbms/DQoNCj4NCj5PbiA1 LzYvMjAgMzozNiBQTSwgV2lzYW0gSmFkZG8gd3JvdGU6DQo+PiBBZGQgaW5zZXJ0aW9uIHJhdGUg Y2FsY3VsYXRpb24gZmVhdHVyZSBpbnRvIGZsb3cgcGVyZm9ybWFuY2UNCj4+IGFwcGxpY2F0aW9u Lg0KPj4NCj4+IFRoZSBhcHBsaWNhdGlvbiBub3cgcHJvdmlkZSB0aGUgYWJpbGl0eSB0byB0ZXN0 IGluc2VydGlvbiByYXRlIG9mDQo+PiBzcGVjaWZpYyBydGVfZmxvdyBydWxlLCBieSBzdHJlc3Np bmcgaXQgdG8gdGhlIE5JQywgYW5kIGNhbGN1bGF0ZSB0aGUNCj4+IGluc2VydGlvbiByYXRlLg0K Pj4NCj4+IFRoZSBhcHBsaWNhdGlvbiBvZmZlcnMgc29tZSBvcHRpb25zIGluIHRoZSBjb21tYW5k IGxpbmUsIHRvIGNvbmZpZ3VyZQ0KPj4gd2hpY2ggcnVsZSB0byBhcHBseS4NCj4+DQo+PiBBZnRl ciB0aGF0IHRoZSBhcHBsaWNhdGlvbiB3aWxsIHN0YXJ0IHByb2R1Y2luZyBydWxlcyB3aXRoIHNh bWUNCj4+IHBhdHRlcm4gYnV0IGluY3JlYXNpbmcgdGhlIG91dGVyIElQIHNvdXJjZSBhZGRyZXNz IGJ5IDEgZWFjaCB0aW1lLA0KPj4gdGh1cyBpdCB3aWxsIGdpdmUgZGlmZmVyZW50IGZsb3cgZWFj aCB0aW1lLCBhbmQgYWxsIG90aGVyIGl0ZW1zIHdpbGwNCj4+IGhhdmUgb3BlbiBtYXNrcy4NCj4+ DQo+PiBUaGUgY3VycmVudCBkZXNpZ24gaGF2ZSBzaW5nbGUgY29yZSBpbnNlcnRpb24gcmF0ZS4N Cj4+IEluIHRoZSBmdXR1cmUgd2UgbWF5IGhhdmUgYSBtdWx0aSBjb3JlIGluc2VydGlvbiByYXRl IG1lYXN1cmVtZW50DQo+PiBzdXBwb3J0IGluIHRoZSBhcHAuDQo+Pg0KPj4gU2lnbmVkLW9mZi1i eTogV2lzYW0gSmFkZG8gPHdpc2FtbUBtZWxsYW5veC5jb20+DQo+PiAtLS0NCj4NCj5bc25pcF0N Cj4NCj4+IGRpZmYgLS1naXQgYS9hcHAvdGVzdC1mbG93LXBlcmYvYWN0aW9uc19nZW4uYw0KPj4g Yi9hcHAvdGVzdC1mbG93LXBlcmYvYWN0aW9uc19nZW4uYw0KPj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4+IGluZGV4IDAwMDAwMDAwMC4uZmE2MDA4NGNmDQo+PiAtLS0gL2Rldi9udWxsDQo+PiAr KysgYi9hcHAvdGVzdC1mbG93LXBlcmYvYWN0aW9uc19nZW4uYw0KPj4gQEAgLTAsMCArMSw4OCBA QA0KPj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4+ICsgKiBD b3B5cmlnaHQgMjAyMCBNZWxsYW5veCBUZWNobm9sb2dpZXMsIEx0ZA0KPj4gKyAqDQo+PiArICog VGhlIGZpbGUgY29udGFpbnMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBhY3Rpb25zIGdlbmVyYXRv cnMuDQo+PiArICogRWFjaCBnZW5lcmF0b3IgaXMgcmVzcG9uc2libGUgZm9yIHByZXBhcmluZyBp dCdzIGFjdGlvbiBpbnN0YW5jZQ0KPj4gKyAqIGFuZCBpbml0aWFsaXppbmcgaXQgd2l0aCBuZWVk ZWQgZGF0YS4NCj4+ICsgKiovDQo+PiArDQo+PiArI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KPj4g KyNpbmNsdWRlIDxydGVfbWFsbG9jLmg+DQo+PiArI2luY2x1ZGUgPHJ0ZV9mbG93Lmg+DQo+PiAr I2luY2x1ZGUgPHJ0ZV9ldGhkZXYuaD4NCj4+ICsNCj4+ICsjZGVmaW5lIEFMTE9DQVRFX0FDVElP Tl9WQVJTDQo+PiArI2luY2x1ZGUgImFjdGlvbnNfZ2VuLmgiDQo+PiArI2luY2x1ZGUgImNvbmZp Zy5oIg0KPj4gKw0KPj4gK3ZvaWQNCj4+ICtnZW5fbWFyayh2b2lkKQ0KPj4gK3sNCj4+ICsJbWFy a19hY3Rpb24uaWQgPSBNQVJLX0lEOw0KPj4gK30NCj4+ICsNCj4+ICt2b2lkDQo+PiArZ2VuX3F1 ZXVlKHVpbnQxNl90IHF1ZXVlKQ0KPj4gK3sNCj4+ICsJcXVldWVfYWN0aW9uLmluZGV4ID0gcXVl dWU7DQo+PiArfQ0KPj4gKw0KPj4gK3ZvaWQNCj4+ICtnZW5fanVtcCh1aW50MTZfdCBuZXh0X3Rh YmxlKQ0KPj4gK3sNCj4+ICsJanVtcF9hY3Rpb24uZ3JvdXAgPSBuZXh0X3RhYmxlOw0KPj4gK30N Cj4+ICsNCj4+ICt2b2lkDQo+PiArZ2VuX3Jzcyh1aW50MTZfdCAqcXVldWVzLCB1aW50MTZfdCBx dWV1ZXNfbnVtYmVyKSB7DQo+PiArCXVpbnQxNl90IHF1ZXVlOw0KPj4gKwlzdHJ1Y3QgYWN0aW9u X3Jzc19kYXRhICpyc3NfZGF0YTsNCj4+ICsNCj4+ICsJcnNzX2RhdGEgPSBydGVfbWFsbG9jKCJy c3NfZGF0YSIsDQo+PiArCQlzaXplb2Yoc3RydWN0IGFjdGlvbl9yc3NfZGF0YSksIDApOw0KPj4g Kw0KPj4gKwlpZiAocnNzX2RhdGEgPT0gTlVMTCkNCj4+ICsJCXJ0ZV9leGl0KEVYSVRfRkFJTFVS RSwgIk5vIE1lbW9yeSBhdmFpbGFibGUhIik7DQo+PiArDQo+PiArCSpyc3NfZGF0YSA9IChzdHJ1 Y3QgYWN0aW9uX3Jzc19kYXRhKXsNCj4+ICsJCS5jb25mID0gKHN0cnVjdCBydGVfZmxvd19hY3Rp b25fcnNzKXsNCj4+ICsJCQkuZnVuYyA9IFJURV9FVEhfSEFTSF9GVU5DVElPTl9ERUZBVUxULA0K Pj4gKwkJCS5sZXZlbCA9IDAsDQo+PiArCQkJLnR5cGVzID0gRVRIX1JTU19JUCB8DQo+PiArCQkJ CUVUSF9SU1NfVENQLA0KPg0KPkR1cGxpY2F0aW5nIGl0IGluIHR3byBwbGFjZXMgc3VnZ2VzdHMg YWRkaXRpb24gb2YgYSBtYWNybyB3aXRoIHRoZSB2YWx1ZSBhbmQNCj51c2FnZSBpbiB0d28gcGxh Y2VzLg0KPg0KPj4gKwkJCS5rZXlfbGVuID0gc2l6ZW9mKHJzc19kYXRhLT5rZXkpLA0KPj4gKwkJ CS5xdWV1ZV9udW0gPSBxdWV1ZXNfbnVtYmVyLA0KPj4gKwkJCS5rZXkgPSByc3NfZGF0YS0+a2V5 LA0KPj4gKwkJCS5xdWV1ZSA9IHJzc19kYXRhLT5xdWV1ZSwNCj4+ICsJCX0sDQo+PiArCQkua2V5 ID0geyAxIH0sDQo+PiArCQkucXVldWUgPSB7IDAgfSwNCj4+ICsJfTsNCj4+ICsNCj4+ICsJZm9y IChxdWV1ZSA9IDA7IHF1ZXVlIDwgcXVldWVzX251bWJlcjsgcXVldWUrKykNCj4+ICsJCXJzc19k YXRhLT5xdWV1ZVtxdWV1ZV0gPSBxdWV1ZXNbcXVldWVdOw0KPj4gKw0KPj4gKwlyc3NfYWN0aW9u ID0gJnJzc19kYXRhLT5jb25mOw0KPj4gK30NCj4+ICsNCj4+ICt2b2lkDQo+PiArZ2VuX3NldF9t ZXRhKHZvaWQpDQo+PiArew0KPj4gKwltZXRhX2FjdGlvbi5kYXRhID0gUlRFX0JFMzIoTUVUQV9E QVRBKTsNCj4+ICsJbWV0YV9hY3Rpb24ubWFzayA9IFJURV9CRTMyKDB4ZmZmZmZmZmYpOyB9DQo+ PiArDQo+PiArdm9pZA0KPj4gK2dlbl9zZXRfdGFnKHZvaWQpDQo+PiArew0KPj4gKwl0YWdfYWN0 aW9uLmRhdGEgPSBSVEVfQkUzMihNRVRBX0RBVEEpOw0KPj4gKwl0YWdfYWN0aW9uLm1hc2sgPSBS VEVfQkUzMigweGZmZmZmZmZmKTsNCj4+ICsJdGFnX2FjdGlvbi5pbmRleCA9IFRBR19JTkRFWDsN Cj4+ICt9DQo+PiArDQo+PiArdm9pZA0KPj4gK2dlbl9wb3J0X2lkKHZvaWQpDQo+PiArew0KPj4g Kwlwb3J0X2lkLmlkID0gUE9SVF9JRF9EU1Q7DQo+PiArfQ0KPj4NCj4NCj5bc25pcF0NCj4NCj4+ IGRpZmYgLS1naXQgYS9hcHAvdGVzdC1mbG93LXBlcmYvZmxvd19nZW4uYw0KPj4gYi9hcHAvdGVz dC1mbG93LXBlcmYvZmxvd19nZW4uYyBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleA0KPj4gMDAw MDAwMDAwLi5jZjU0NTM1ODYNCj4+IC0tLSAvZGV2L251bGwNCj4+ICsrKyBiL2FwcC90ZXN0LWZs b3ctcGVyZi9mbG93X2dlbi5jDQo+PiBAQCAtMCwwICsxLDE3OSBAQA0KPj4gKy8qIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4+ICsgKiBDb3B5cmlnaHQgMjAyMCBNZWxs YW5veCBUZWNobm9sb2dpZXMsIEx0ZA0KPj4gKyAqDQo+PiArICogVGhlIGZpbGUgY29udGFpbnMg dGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgbWV0aG9kIHRvDQo+PiArICogZmlsbCBpdGVtcywg YWN0aW9ucyAmIGF0dHJpYnV0ZXMgaW4gdGhlaXIgY29ycmVzcG9uZGluZw0KPj4gKyAqIGFycmF5 cywgYW5kIHRoZW4gZ2VuZXJhdGUgcnRlX2Zsb3cgcnVsZS4NCj4+ICsgKg0KPj4gKyAqIEFmdGVy IHRoZSBnZW5lcmF0aW9uLiBUaGUgcnVsZSBnb2VzIHRvIHZhbGlkYXRpb24gdGhlbg0KPj4gKyAq IGNyZWF0aW9uIHN0YXRlIGFuZCB0aGVuIHJldHVybiB0aGUgcmVzdWx0cy4NCj4+ICsgKi8NCj4+ ICsNCj4+ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+PiArDQo+PiArI2luY2x1ZGUgImZsb3dfZ2Vu LmgiDQo+PiArI2luY2x1ZGUgIml0ZW1zX2dlbi5oIg0KPj4gKyNpbmNsdWRlICJhY3Rpb25zX2dl bi5oIg0KPj4gKyNpbmNsdWRlICJjb25maWcuaCINCj4+ICsNCj4+ICtzdGF0aWMgdm9pZA0KPj4g K2ZpbGxfYXR0cmlidXRlcyhzdHJ1Y3QgcnRlX2Zsb3dfYXR0ciAqYXR0ciwNCj4+ICsJdWludDhf dCBmbG93X2F0dHJzLCB1aW50MTZfdCBncm91cCkNCj4+ICt7DQo+PiArCWlmIChmbG93X2F0dHJz ICYgSU5HUkVTUykNCj4+ICsJCWF0dHItPmluZ3Jlc3MgPSAxOw0KPj4gKwlpZiAoZmxvd19hdHRy cyAmIEVHUkVTUykNCj4+ICsJCWF0dHItPmVncmVzcyA9IDE7DQo+PiArCWlmIChmbG93X2F0dHJz ICYgVFJBTlNGRVIpDQo+PiArCQlhdHRyLT50cmFuc2ZlciA9IDE7DQo+PiArCWF0dHItPmdyb3Vw ID0gZ3JvdXA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkDQo+PiArZmlsbF9pdGVtcyhz dHJ1Y3QgcnRlX2Zsb3dfaXRlbSBpdGVtc1tNQVhfSVRFTVNfTlVNXSwNCj4+ICsJdWludDE2X3Qg Zmxvd19pdGVtcywgdWludDMyX3Qgb3V0ZXJfaXBfc3JjKSB7DQo+PiArCXVpbnQ4X3QgaXRlbXNf Y291bnRlciA9IDA7DQo+PiArDQo+PiArCWlmIChmbG93X2l0ZW1zICYgTUVUQV9JVEVNKQ0KPj4g KwkJYWRkX21ldGFfZGF0YShpdGVtcywgaXRlbXNfY291bnRlcisrKTsNCj4+ICsJaWYgKGZsb3df aXRlbXMgJiBUQUdfSVRFTSkNCj4+ICsJCWFkZF9tZXRhX3RhZyhpdGVtcywgaXRlbXNfY291bnRl cisrKTsNCj4+ICsJaWYgKGZsb3dfaXRlbXMgJiBFVEhfSVRFTSkNCj4+ICsJCWFkZF9ldGhlcihp dGVtcywgaXRlbXNfY291bnRlcisrKTsNCj4+ICsJaWYgKGZsb3dfaXRlbXMgJiBWTEFOX0lURU0p DQo+PiArCQlhZGRfdmxhbihpdGVtcywgaXRlbXNfY291bnRlcisrKTsNCj4+ICsJaWYgKGZsb3df aXRlbXMgJiBJUFY0X0lURU0pDQo+PiArCQlhZGRfaXB2NChpdGVtcywgaXRlbXNfY291bnRlcisr LCBvdXRlcl9pcF9zcmMpOw0KPj4gKwlpZiAoZmxvd19pdGVtcyAmIElQVjZfSVRFTSkNCj4+ICsJ CWFkZF9pcHY2KGl0ZW1zLCBpdGVtc19jb3VudGVyKyssIG91dGVyX2lwX3NyYyk7DQo+PiArCWlm IChmbG93X2l0ZW1zICYgVENQX0lURU0pDQo+PiArCQlhZGRfdGNwKGl0ZW1zLCBpdGVtc19jb3Vu dGVyKyspOw0KPj4gKwlpZiAoZmxvd19pdGVtcyAmIFVEUF9JVEVNKQ0KPj4gKwkJYWRkX3VkcChp dGVtcywgaXRlbXNfY291bnRlcisrKTsNCj4+ICsJaWYgKGZsb3dfaXRlbXMgJiBWWExBTl9JVEVN KQ0KPj4gKwkJYWRkX3Z4bGFuKGl0ZW1zLCBpdGVtc19jb3VudGVyKyspOw0KPj4gKwlpZiAoZmxv d19pdGVtcyAmIFZYTEFOX0dQRV9JVEVNKQ0KPj4gKwkJYWRkX3Z4bGFuX2dwZShpdGVtcywgaXRl bXNfY291bnRlcisrKTsNCj4+ICsJaWYgKGZsb3dfaXRlbXMgJiBHUkVfSVRFTSkNCj4+ICsJCWFk ZF9ncmUoaXRlbXMsIGl0ZW1zX2NvdW50ZXIrKyk7DQo+PiArCWlmIChmbG93X2l0ZW1zICYgR0VO RVZFX0lURU0pDQo+PiArCQlhZGRfZ2VuZXZlKGl0ZW1zLCBpdGVtc19jb3VudGVyKyspOw0KPj4g KwlpZiAoZmxvd19pdGVtcyAmIEdUUF9JVEVNKQ0KPj4gKwkJYWRkX2d0cChpdGVtcywgaXRlbXNf Y291bnRlcisrKTsNCj4+ICsNCj4+ICsJaXRlbXNbaXRlbXNfY291bnRlcl0udHlwZSA9IFJURV9G TE9XX0lURU1fVFlQRV9FTkQ7IH0NCj4+ICsNCj4+ICtzdGF0aWMgdm9pZA0KPj4gK2ZpbGxfYWN0 aW9ucyhzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uIGFjdGlvbnNbTUFYX0FDVElPTlNfTlVNXSwNCj4+ ICsJdWludDE2X3QgZmxvd19hY3Rpb25zLCB1aW50MzJfdCBjb3VudGVyLCB1aW50MTZfdCBuZXh0 X3RhYmxlLA0KPj4gKwl1aW50MTZfdCBoYWlycGlucSkNCj4+ICt7DQo+PiArCXN0cnVjdCBydGVf Zmxvd19hY3Rpb25fY291bnQgY291bnRfYWN0aW9uOw0KPj4gKwl1aW50OF90IGFjdGlvbnNfY291 bnRlciA9IDA7DQo+PiArCXVpbnQxNl90IHF1ZXVlc1tSWFFfTlVNXTsNCj4+ICsJdWludDE2X3Qg aTsNCj4+ICsNCj4+ICsJLyogTm9uZS1mYXRlIGFjdGlvbnMgKi8NCj4+ICsJaWYgKGZsb3dfYWN0 aW9ucyAmIE1BUktfQUNUSU9OKSB7DQo+PiArCQlpZiAoIWNvdW50ZXIpDQo+DQo+RFBESyBjb2Rp bmcgc3R5bGUgc2F5cyBjb21wYXJlIHRvIDAgWzFdLiBNYW55IHNpbWlsYXIgY29tcGFyaXNvbnMg YmVsb3cuDQo+DQo+WzFdDQo+aHR0cHM6Ly9ldXIwMy5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRs b29rLmNvbS8/dXJsPWh0dHBzJTNBJTJGJTJGZG9jLmQNCj5wZGsub3JnJTJGZ3VpZGVzJTJGY29u dHJpYnV0aW5nJTJGY29kaW5nX3N0eWxlLmh0bWwlMjNudWxsLQ0KPnBvaW50ZXJzJmFtcDtkYXRh PTAyJTdDMDElN0N3aXNhbW0lNDBtZWxsYW5veC5jb20lN0M5OWEyZTIwYWEwNA0KPmU0OTgxMGQ1 ODA4ZDdmMWQxODkzOSU3Q2E2NTI5NzFjN2QyZTRkOWJhNmE0ZDE0OTI1NmY0NjFiJTdDMCU3QzAN Cj4lN0M2MzcyNDM3NTQ1NjU5NTcyMzYmYW1wO3NkYXRhPVNKMEdhN3lKbHhndGFDTnlDWURoRnY2 Yjh2VGtWJTJGTw0KPktjY1lmQjdlUjl2ZyUzRCZhbXA7cmVzZXJ2ZWQ9MA0KPg0KPj4gKwkJCWdl bl9tYXJrKCk7DQo+PiArCQlhY3Rpb25zW2FjdGlvbnNfY291bnRlcl0udHlwZSA9DQo+UlRFX0ZM T1dfQUNUSU9OX1RZUEVfTUFSSzsNCj4+ICsJCWFjdGlvbnNbYWN0aW9uc19jb3VudGVyKytdLmNv bmYgPSAmbWFya19hY3Rpb247DQo+PiArCX0NCj4+ICsJaWYgKGZsb3dfYWN0aW9ucyAmIENPVU5U X0FDVElPTikgew0KPj4gKwkJYWN0aW9uc1thY3Rpb25zX2NvdW50ZXJdLnR5cGUgPQ0KPlJURV9G TE9XX0FDVElPTl9UWVBFX0NPVU5UOw0KPj4gKwkJYWN0aW9uc1thY3Rpb25zX2NvdW50ZXIrK10u Y29uZiA9ICZjb3VudF9hY3Rpb247DQo+PiArCX0NCj4+ICsJaWYgKGZsb3dfYWN0aW9ucyAmIE1F VEFfQUNUSU9OKSB7DQo+PiArCQlpZiAoIWNvdW50ZXIpDQo+PiArCQkJZ2VuX3NldF9tZXRhKCk7 DQo+PiArCQlhY3Rpb25zW2FjdGlvbnNfY291bnRlcl0udHlwZSA9DQo+UlRFX0ZMT1dfQUNUSU9O X1RZUEVfU0VUX01FVEE7DQo+PiArCQlhY3Rpb25zW2FjdGlvbnNfY291bnRlcisrXS5jb25mID0g Jm1ldGFfYWN0aW9uOw0KPj4gKwl9DQo+PiArCWlmIChmbG93X2FjdGlvbnMgJiBUQUdfQUNUSU9O KSB7DQo+PiArCQlpZiAoIWNvdW50ZXIpDQo+PiArCQkJZ2VuX3NldF90YWcoKTsNCj4+ICsJCWFj dGlvbnNbYWN0aW9uc19jb3VudGVyXS50eXBlID0NCj5SVEVfRkxPV19BQ1RJT05fVFlQRV9TRVRf VEFHOw0KPj4gKwkJYWN0aW9uc1thY3Rpb25zX2NvdW50ZXIrK10uY29uZiA9ICZ0YWdfYWN0aW9u Ow0KPj4gKwl9DQo+PiArDQo+PiArCS8qIEZhdGUgYWN0aW9ucyAqLw0KPj4gKwlpZiAoZmxvd19h Y3Rpb25zICYgUVVFVUVfQUNUSU9OKSB7DQo+PiArCQlnZW5fcXVldWUoY291bnRlciAlIFJYUV9O VU0pOw0KPj4gKwkJYWN0aW9uc1thY3Rpb25zX2NvdW50ZXJdLnR5cGUgPQ0KPlJURV9GTE9XX0FD VElPTl9UWVBFX1FVRVVFOw0KPj4gKwkJYWN0aW9uc1thY3Rpb25zX2NvdW50ZXIrK10uY29uZiA9 ICZxdWV1ZV9hY3Rpb247DQo+PiArCX0NCj4+ICsJaWYgKGZsb3dfYWN0aW9ucyAmIFJTU19BQ1RJ T04pIHsNCj4+ICsJCWlmICghY291bnRlcikgew0KPj4gKwkJCWZvciAoaSA9IDA7IGkgPCBSWFFf TlVNOyBpKyspDQo+PiArCQkJCXF1ZXVlc1tpXSA9IGk7DQo+PiArCQkJZ2VuX3JzcyhxdWV1ZXMs IFJYUV9OVU0pOw0KPj4gKwkJfQ0KPj4gKwkJYWN0aW9uc1thY3Rpb25zX2NvdW50ZXJdLnR5cGUg PQ0KPlJURV9GTE9XX0FDVElPTl9UWVBFX1JTUzsNCj4+ICsJCWFjdGlvbnNbYWN0aW9uc19jb3Vu dGVyKytdLmNvbmYgPSByc3NfYWN0aW9uOw0KPj4gKwl9DQo+PiArCWlmIChmbG93X2FjdGlvbnMg JiBKVU1QX0FDVElPTikgew0KPj4gKwkJaWYgKCFjb3VudGVyKQ0KPj4gKwkJCWdlbl9qdW1wKG5l eHRfdGFibGUpOw0KPj4gKwkJYWN0aW9uc1thY3Rpb25zX2NvdW50ZXJdLnR5cGUgPQ0KPlJURV9G TE9XX0FDVElPTl9UWVBFX0pVTVA7DQo+PiArCQlhY3Rpb25zW2FjdGlvbnNfY291bnRlcisrXS5j b25mID0gJmp1bXBfYWN0aW9uOw0KPj4gKwl9DQo+PiArCWlmIChmbG93X2FjdGlvbnMgJiBQT1JU X0lEX0FDVElPTikgew0KPj4gKwkJaWYgKCFjb3VudGVyKQ0KPj4gKwkJCWdlbl9wb3J0X2lkKCk7 DQo+PiArCQlhY3Rpb25zW2FjdGlvbnNfY291bnRlcl0udHlwZSA9DQo+UlRFX0ZMT1dfQUNUSU9O X1RZUEVfUE9SVF9JRDsNCj4+ICsJCWFjdGlvbnNbYWN0aW9uc19jb3VudGVyKytdLmNvbmYgPSAm cG9ydF9pZDsNCj4+ICsJfQ0KPj4gKwlpZiAoZmxvd19hY3Rpb25zICYgRFJPUF9BQ1RJT04pDQo+ PiArCQlhY3Rpb25zW2FjdGlvbnNfY291bnRlcisrXS50eXBlID0NCj5SVEVfRkxPV19BQ1RJT05f VFlQRV9EUk9QOw0KPj4gKwlpZiAoZmxvd19hY3Rpb25zICYgSEFJUlBJTl9RVUVVRV9BQ1RJT04p IHsNCj4+ICsJCWdlbl9xdWV1ZSgoY291bnRlciAlIGhhaXJwaW5xKSArIFJYUV9OVU0pOw0KPj4g KwkJYWN0aW9uc1thY3Rpb25zX2NvdW50ZXJdLnR5cGUgPQ0KPlJURV9GTE9XX0FDVElPTl9UWVBF X1FVRVVFOw0KPj4gKwkJYWN0aW9uc1thY3Rpb25zX2NvdW50ZXIrK10uY29uZiA9ICZxdWV1ZV9h Y3Rpb247DQo+PiArCX0NCj4+ICsJaWYgKGZsb3dfYWN0aW9ucyAmIEhBSVJQSU5fUlNTX0FDVElP Tikgew0KPj4gKwkJaWYgKCFjb3VudGVyKSB7DQo+PiArCQkJdWludDE2X3QgaGFpcnBpbl9xdWV1 ZXNbaGFpcnBpbnFdOw0KPj4gKwkJCWZvciAoaSA9IDA7IGkgPCBoYWlycGlucTsgaSsrKQ0KPj4g KwkJCQloYWlycGluX3F1ZXVlc1tpXSA9IGkgKyBSWFFfTlVNOw0KPj4gKwkJCWdlbl9yc3MoaGFp cnBpbl9xdWV1ZXMsIGhhaXJwaW5xKTsNCj4+ICsJCX0NCj4+ICsJCWFjdGlvbnNbYWN0aW9uc19j b3VudGVyXS50eXBlID0NCj5SVEVfRkxPV19BQ1RJT05fVFlQRV9SU1M7DQo+PiArCQlhY3Rpb25z W2FjdGlvbnNfY291bnRlcisrXS5jb25mID0gcnNzX2FjdGlvbjsNCj4+ICsJfQ0KPj4gKw0KPj4g KwlhY3Rpb25zW2FjdGlvbnNfY291bnRlcl0udHlwZSA9IFJURV9GTE9XX0FDVElPTl9UWVBFX0VO RDsgfQ0KPj4gKw0KPj4gK3N0cnVjdCBydGVfZmxvdyAqDQo+PiArZ2VuZXJhdGVfZmxvdyh1aW50 MTZfdCBwb3J0X2lkLA0KPj4gKwl1aW50MTZfdCBncm91cCwNCj4+ICsJdWludDhfdCBmbG93X2F0 dHJzLA0KPj4gKwl1aW50MTZfdCBmbG93X2l0ZW1zLA0KPj4gKwl1aW50MTZfdCBmbG93X2FjdGlv bnMsDQo+PiArCXVpbnQxNl90IG5leHRfdGFibGUsDQo+PiArCXVpbnQzMl90IG91dGVyX2lwX3Ny YywNCj4+ICsJdWludDE2X3QgaGFpcnBpbnEsDQo+PiArCXN0cnVjdCBydGVfZmxvd19lcnJvciAq ZXJyb3IpDQo+PiArew0KPj4gKwlzdHJ1Y3QgcnRlX2Zsb3dfYXR0ciBhdHRyOw0KPj4gKwlzdHJ1 Y3QgcnRlX2Zsb3dfaXRlbSBpdGVtc1tNQVhfSVRFTVNfTlVNXTsNCj4+ICsJc3RydWN0IHJ0ZV9m bG93X2FjdGlvbiBhY3Rpb25zW01BWF9BQ1RJT05TX05VTV07DQo+PiArCXN0cnVjdCBydGVfZmxv dyAqZmxvdyA9IE5VTEw7DQo+PiArDQo+PiArCW1lbXNldChpdGVtcywgMCwgc2l6ZW9mKGl0ZW1z KSk7DQo+PiArCW1lbXNldChhY3Rpb25zLCAwLCBzaXplb2YoYWN0aW9ucykpOw0KPj4gKwltZW1z ZXQoJmF0dHIsIDAsIHNpemVvZihzdHJ1Y3QgcnRlX2Zsb3dfYXR0cikpOw0KPj4gKw0KPj4gKwlm aWxsX2F0dHJpYnV0ZXMoJmF0dHIsIGZsb3dfYXR0cnMsIGdyb3VwKTsNCj4+ICsNCj4+ICsJZmls bF9hY3Rpb25zKGFjdGlvbnMsIGZsb3dfYWN0aW9ucywNCj4+ICsJCQlvdXRlcl9pcF9zcmMsIG5l eHRfdGFibGUsIGhhaXJwaW5xKTsNCj4+ICsNCj4+ICsJZmlsbF9pdGVtcyhpdGVtcywgZmxvd19p dGVtcywgb3V0ZXJfaXBfc3JjKTsNCj4+ICsNCj4+ICsJZmxvdyA9IHJ0ZV9mbG93X2NyZWF0ZShw b3J0X2lkLCAmYXR0ciwgaXRlbXMsIGFjdGlvbnMsIGVycm9yKTsNCj4+ICsJcmV0dXJuIGZsb3c7 DQo+PiArfQ0KPj4gZGlmZiAtLWdpdCBhL2FwcC90ZXN0LWZsb3ctcGVyZi9mbG93X2dlbi5oDQo+ PiBiL2FwcC90ZXN0LWZsb3ctcGVyZi9mbG93X2dlbi5oIG5ldyBmaWxlIG1vZGUgMTAwNjQ0IGlu ZGV4DQo+PiAwMDAwMDAwMDAuLjQzZDllN2NmZQ0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIv YXBwL3Rlc3QtZmxvdy1wZXJmL2Zsb3dfZ2VuLmgNCj4+IEBAIC0wLDAgKzEsNjMgQEANCj4+ICsv KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+PiArICogQ29weXJpZ2h0 IDIwMjAgTWVsbGFub3ggVGVjaG5vbG9naWVzLCBMdGQNCj4+ICsgKg0KPj4gKyAqIFRoaXMgZmls ZSBjb250YWlucyB0aGUgaXRlbXMsIGFjdGlvbnMgYW5kIGF0dHJpYnV0ZXMNCj4+ICsgKiBkZWZp bml0aW9uLiBBbmQgdGhlIG1ldGhvZHMgdG8gcHJlcGFyZSBhbmQgZmlsbCBpdGVtcywNCj4+ICsg KiBhY3Rpb25zIGFuZCBhdHRyaWJ1dGVzIHRvIGdlbmVyYXRlIHJ0ZV9mbG93IHJ1bGUuDQo+PiAr ICovDQo+PiArDQo+PiArI2lmbmRlZiBGTE9XX1BFUkZfRkxPV19HRU4NCj4+ICsjZGVmaW5lIEZM T1dfUEVSRl9GTE9XX0dFTg0KPj4gKw0KPj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4NCj4+ICsjaW5j bHVkZSA8cnRlX2Zsb3cuaD4NCj4+ICsNCj4+ICsjaW5jbHVkZSAiY29uZmlnLmgiDQo+PiArDQo+ PiArI2RlZmluZSBGTE9XX0lURU1fTUFTSyhfeCkgKFVJTlQ2NF9DKDEpIDw8IF94KQ0KPj4gKw0K Pj4gKy8qIEl0ZW1zICovDQo+PiArI2RlZmluZSBFVEhfSVRFTSAgICAgICAgICAgICBGTE9XX0lU RU1fTUFTSygwKQ0KPg0KPkkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgeW91IGRvbid0IHVzZSBlbnVt IHJ0ZV9mbG93X2l0ZW1fdHlwZSBtZW1iZXJzIGFzDQo+b2Zmc2V0cy4gSW4gdGhpcyBjYXNlIGRv bid0IG5lZWQgdGhlc2UgZGVmaW5lcyBhdCBhbGwsIGp1c3QgdXNlDQo+RkxPV19JVEVNX01BU0so RVRIKS4gSXQgd2lsbCBtYWtlIGl0IGVhc2llciB0byBzdXBwb3J0IG5ldyBpdGVtcy4NCj4NCj4+ ICsjZGVmaW5lIElQVjRfSVRFTSAgICAgICAgICAgIEZMT1dfSVRFTV9NQVNLKDEpDQo+PiArI2Rl ZmluZSBJUFY2X0lURU0gICAgICAgICAgICBGTE9XX0lURU1fTUFTSygyKQ0KPj4gKyNkZWZpbmUg VkxBTl9JVEVNICAgICAgICAgICAgRkxPV19JVEVNX01BU0soMykNCj4+ICsjZGVmaW5lIFRDUF9J VEVNICAgICAgICAgICAgIEZMT1dfSVRFTV9NQVNLKDQpDQo+PiArI2RlZmluZSBVRFBfSVRFTSAg ICAgICAgICAgICBGTE9XX0lURU1fTUFTSyg1KQ0KPj4gKyNkZWZpbmUgVlhMQU5fSVRFTSAgICAg ICAgICAgRkxPV19JVEVNX01BU0soNikNCj4+ICsjZGVmaW5lIFZYTEFOX0dQRV9JVEVNICAgICAg IEZMT1dfSVRFTV9NQVNLKDcpDQo+PiArI2RlZmluZSBHUkVfSVRFTSAgICAgICAgICAgICBGTE9X X0lURU1fTUFTSyg4KQ0KPj4gKyNkZWZpbmUgR0VORVZFX0lURU0gICAgICAgICAgRkxPV19JVEVN X01BU0soOSkNCj4+ICsjZGVmaW5lIEdUUF9JVEVNICAgICAgICAgICAgIEZMT1dfSVRFTV9NQVNL KDEwKQ0KPj4gKyNkZWZpbmUgTUVUQV9JVEVNICAgICAgICAgICAgRkxPV19JVEVNX01BU0soMTEp DQo+PiArI2RlZmluZSBUQUdfSVRFTSAgICAgICAgICAgICBGTE9XX0lURU1fTUFTSygxMikNCj4+ ICsNCj4+ICsvKiBBY3Rpb25zICovDQo+PiArI2RlZmluZSBRVUVVRV9BQ1RJT04gICAgICAgICBG TE9XX0lURU1fTUFTSygwKQ0KPg0KPkkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgeW91IGRvbid0IHVz ZSBlbnVtIHJ0ZV9mbG93X2FjdGlvbl90eXBlIG1lbWJlcnMNCj5hcyBvZmZzZXRzLg0KPg0KPj4g KyNkZWZpbmUgTUFSS19BQ1RJT04gICAgICAgICAgRkxPV19JVEVNX01BU0soMSkNCj4+ICsjZGVm aW5lIEpVTVBfQUNUSU9OICAgICAgICAgIEZMT1dfSVRFTV9NQVNLKDIpDQo+PiArI2RlZmluZSBS U1NfQUNUSU9OICAgICAgICAgICBGTE9XX0lURU1fTUFTSygzKQ0KPj4gKyNkZWZpbmUgQ09VTlRf QUNUSU9OICAgICAgICAgRkxPV19JVEVNX01BU0soNCkNCj4+ICsjZGVmaW5lIE1FVEFfQUNUSU9O ICAgICAgICAgIEZMT1dfSVRFTV9NQVNLKDUpDQo+PiArI2RlZmluZSBUQUdfQUNUSU9OICAgICAg ICAgICBGTE9XX0lURU1fTUFTSyg2KQ0KPj4gKyNkZWZpbmUgRFJPUF9BQ1RJT04gICAgICAgICAg RkxPV19JVEVNX01BU0soNykNCj4+ICsjZGVmaW5lIFBPUlRfSURfQUNUSU9OICAgICAgIEZMT1df SVRFTV9NQVNLKDgpDQo+PiArI2RlZmluZSBIQUlSUElOX1FVRVVFX0FDVElPTiBGTE9XX0lURU1f TUFTSyg5KQ0KPj4gKyNkZWZpbmUgSEFJUlBJTl9SU1NfQUNUSU9OICAgRkxPV19JVEVNX01BU0so MTApDQo+PiArDQo+PiArLyogQXR0cmlidXRlcyAqLw0KPj4gKyNkZWZpbmUgSU5HUkVTUyAgICAg ICAgICAgICAgRkxPV19JVEVNX01BU0soMCkNCj4+ICsjZGVmaW5lIEVHUkVTUyAgICAgICAgICAg ICAgIEZMT1dfSVRFTV9NQVNLKDEpDQo+PiArI2RlZmluZSBUUkFOU0ZFUiAgICAgICAgICAgICBG TE9XX0lURU1fTUFTSygyKQ0KPj4gKw0KPj4gK3N0cnVjdCBydGVfZmxvdyAqDQo+PiArZ2VuZXJh dGVfZmxvdyh1aW50MTZfdCBwb3J0X2lkLA0KPj4gKwl1aW50MTZfdCBncm91cCwNCj4+ICsJdWlu dDhfdCBmbG93X2F0dHJzLA0KPj4gKwl1aW50MTZfdCBmbG93X2l0ZW1zLA0KPj4gKwl1aW50MTZf dCBmbG93X2FjdGlvbnMsDQo+PiArCXVpbnQxNl90IG5leHRfdGFibGUsDQo+PiArCXVpbnQzMl90 IG91dGVyX2lwX3NyYywNCj4+ICsJdWludDE2X3QgaGFpcnBpbnEsDQo+PiArCXN0cnVjdCBydGVf Zmxvd19lcnJvciAqZXJyb3IpOw0KPj4gKw0KPj4gKyNlbmRpZiAvKiBGTE9XX1BFUkZfRkxPV19H RU4gKi8NCj4+IGRpZmYgLS1naXQgYS9hcHAvdGVzdC1mbG93LXBlcmYvaXRlbXNfZ2VuLmMNCj4+ IGIvYXBwL3Rlc3QtZmxvdy1wZXJmL2l0ZW1zX2dlbi5jIG5ldyBmaWxlIG1vZGUgMTAwNjQ0IGlu ZGV4DQo+PiAwMDAwMDAwMDAuLjFlOTQ3OWZiOA0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIv YXBwL3Rlc3QtZmxvdy1wZXJmL2l0ZW1zX2dlbi5jDQo+PiBAQCAtMCwwICsxLDI2NSBAQA0KPj4g Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4+ICsgKiBDb3B5cmln aHQgMjAyMCBNZWxsYW5veCBUZWNobm9sb2dpZXMsIEx0ZA0KPj4gKyAqDQo+PiArICogVGhpcyBm aWxlIGNvbnRhaW4gdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgaXRlbXMNCj4+ICsgKiByZWxh dGVkIG1ldGhvZHMuIEVhY2ggSXRlbSBoYXZlIGEgbWV0aG9kIHRvIHByZXBhcmUNCj4+ICsgKiB0 aGUgaXRlbSBhbmQgYWRkIGl0IGludG8gaXRlbXMgYXJyYXkgaW4gZ2l2ZW4gaW5kZXguDQo+PiAr ICovDQo+PiArDQo+PiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPj4gKyNpbmNsdWRlIDxydGVfZmxv dy5oPg0KPj4gKw0KPj4gKyNpbmNsdWRlICJpdGVtc19nZW4uaCINCj4+ICsjaW5jbHVkZSAiY29u ZmlnLmgiDQo+PiArDQo+PiArLyogQ3VycmVudCBkZXNpZ24gaXMgc2luZ2xlIHRocmVhZGVkLiAq LyBzdGF0aWMgc3RydWN0DQo+PiArcnRlX2Zsb3dfaXRlbV9ldGggZXRoX3NwZWM7IHN0YXRpYyBz dHJ1Y3QgcnRlX2Zsb3dfaXRlbV9ldGggZXRoX21hc2s7DQo+DQo+SXQgbG9va3MgbGlrZSB0aGF0 IHRoZSBkZXNpZ24gaGFzIHByb2JsZW1zIHdpdGg6DQo+ZXRoIC8gaXA0IC8gdWRwIC8gdnhsYW4g L2V0aCAvIGVuZA0KPnBhdHRlcm5zLg0KDQpOb3QgcHJvYmxlbXMsIGJ1dCB0aGUgY3VycmVudCBz dXBwb3J0IGlzIGZvciBvdXRlciBvbmx5Og0KVXAgdG8gZmlyc3QgdHVubmVsLCBpbiBmdXR1cmUg d2UgY2FuIGhhdmUgYW5vdGhlciBwYXRjaCB0byBhZGQgdGhlIGlubmVyIGl0ZW1zIHRvIHRoZSBh cHAuDQoNCj4NCj4+ICtzdGF0aWMgc3RydWN0IHJ0ZV9mbG93X2l0ZW1fdmxhbiB2bGFuX3NwZWM7 IHN0YXRpYyBzdHJ1Y3QNCj4+ICtydGVfZmxvd19pdGVtX3ZsYW4gdmxhbl9tYXNrOyBzdGF0aWMg c3RydWN0IHJ0ZV9mbG93X2l0ZW1faXB2NA0KPj4gK2lwdjRfc3BlYzsgc3RhdGljIHN0cnVjdCBy dGVfZmxvd19pdGVtX2lwdjQgaXB2NF9tYXNrOyBzdGF0aWMgc3RydWN0DQo+PiArcnRlX2Zsb3df aXRlbV9pcHY2IGlwdjZfc3BlYzsgc3RhdGljIHN0cnVjdCBydGVfZmxvd19pdGVtX2lwdjYNCj4+ ICtpcHY2X21hc2s7IHN0YXRpYyBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV91ZHAgdWRwX3NwZWM7IHN0 YXRpYyBzdHJ1Y3QNCj4+ICtydGVfZmxvd19pdGVtX3VkcCB1ZHBfbWFzazsgc3RhdGljIHN0cnVj dCBydGVfZmxvd19pdGVtX3RjcCB0Y3Bfc3BlYzsNCj4+ICtzdGF0aWMgc3RydWN0IHJ0ZV9mbG93 X2l0ZW1fdGNwIHRjcF9tYXNrOyBzdGF0aWMgc3RydWN0DQo+PiArcnRlX2Zsb3dfaXRlbV92eGxh biB2eGxhbl9zcGVjOyBzdGF0aWMgc3RydWN0IHJ0ZV9mbG93X2l0ZW1fdnhsYW4NCj4+ICt2eGxh bl9tYXNrOyBzdGF0aWMgc3RydWN0IHJ0ZV9mbG93X2l0ZW1fdnhsYW5fZ3BlIHZ4bGFuX2dwZV9z cGVjOw0KPj4gK3N0YXRpYyBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV92eGxhbl9ncGUgdnhsYW5fZ3Bl X21hc2s7IHN0YXRpYyBzdHJ1Y3QNCj4+ICtydGVfZmxvd19pdGVtX2dyZSBncmVfc3BlYzsgc3Rh dGljIHN0cnVjdCBydGVfZmxvd19pdGVtX2dyZSBncmVfbWFzazsNCj4+ICtzdGF0aWMgc3RydWN0 IHJ0ZV9mbG93X2l0ZW1fZ2VuZXZlIGdlbmV2ZV9zcGVjOyBzdGF0aWMgc3RydWN0DQo+PiArcnRl X2Zsb3dfaXRlbV9nZW5ldmUgZ2VuZXZlX21hc2s7IHN0YXRpYyBzdHJ1Y3QgcnRlX2Zsb3dfaXRl bV9ndHANCj4+ICtndHBfc3BlYzsgc3RhdGljIHN0cnVjdCBydGVfZmxvd19pdGVtX2d0cCBndHBf bWFzazsgc3RhdGljIHN0cnVjdA0KPj4gK3J0ZV9mbG93X2l0ZW1fbWV0YSBtZXRhX3NwZWM7IHN0 YXRpYyBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9tZXRhDQo+PiArbWV0YV9tYXNrOyBzdGF0aWMgc3Ry dWN0IHJ0ZV9mbG93X2l0ZW1fdGFnIHRhZ19zcGVjOyBzdGF0aWMgc3RydWN0DQo+PiArcnRlX2Zs b3dfaXRlbV90YWcgdGFnX21hc2s7DQo+DQo+SSB0aGluayB0aGF0IHN1Y2ggYW1vdW50IG9mIGds b2JhbCB2YXJpYWJsZXMgbWFrZXMgdGhlIGNvZGUgaGFyZCB0byByZWFkIGFuZA0KPm1haW50YWlu LiBJZiB0aGF0J3Mgb25seSBtZSwgbm8gcHJvYmxlbS4NCj4NCj4+ICsNCj4+ICsNCj4+ICt2b2lk DQo+PiArYWRkX2V0aGVyKHN0cnVjdCBydGVfZmxvd19pdGVtIGl0ZW1zW01BWF9JVEVNU19OVU1d LA0KPj4gKwl1aW50OF90IGl0ZW1zX2NvdW50ZXIpDQo+PiArew0KPj4gKwltZW1zZXQoJmV0aF9z cGVjLCAwLCBzaXplb2Yoc3RydWN0IHJ0ZV9mbG93X2l0ZW1fZXRoKSk7DQo+PiArCW1lbXNldCgm ZXRoX21hc2ssIDAsIHNpemVvZihzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9ldGgpKTsNCj4+ICsJZXRo X3NwZWMudHlwZSA9IDA7DQo+PiArCWV0aF9tYXNrLnR5cGUgPSAwOw0KPg0KPldoYXQncyB0aGUg cG9pbnQgdG8gc2V0IHR5cGUgdG8gMCBpZiB5b3UganVzdCBtZW1zZXQgdGhlIGVudGlyZSBzdHJ1 Y3R1cmU/DQo+DQo+PiArDQo+PiArCWl0ZW1zW2l0ZW1zX2NvdW50ZXJdLnR5cGUgPSBSVEVfRkxP V19JVEVNX1RZUEVfRVRIOw0KPj4gKwlpdGVtc1tpdGVtc19jb3VudGVyXS5zcGVjID0gJmV0aF9z cGVjOw0KPj4gKwlpdGVtc1tpdGVtc19jb3VudGVyXS5tYXNrID0gJmV0aF9tYXNrOyB9DQo+PiAr DQo+PiArdm9pZA0KPj4gK2FkZF92bGFuKHN0cnVjdCBydGVfZmxvd19pdGVtIGl0ZW1zW01BWF9J VEVNU19OVU1dLA0KPj4gKwl1aW50OF90IGl0ZW1zX2NvdW50ZXIpDQo+PiArew0KPj4gKwl1aW50 MTZfdCB2bGFuX3ZhbHVlID0gVkxBTl9WQUxVRTsNCj4+ICsJbWVtc2V0KCZ2bGFuX3NwZWMsIDAs IHNpemVvZihzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV92bGFuKSk7DQo+PiArCW1lbXNldCgmdmxhbl9t YXNrLCAwLCBzaXplb2Yoc3RydWN0IHJ0ZV9mbG93X2l0ZW1fdmxhbikpOw0KPj4gKw0KPj4gKwl2 bGFuX3NwZWMudGNpID0gUlRFX0JFMTYodmxhbl92YWx1ZSk7DQo+PiArCXZsYW5fbWFzay50Y2kg PSBSVEVfQkUxNigweGZmZmYpOw0KPj4gKw0KPj4gKwlpdGVtc1tpdGVtc19jb3VudGVyXS50eXBl ID0gUlRFX0ZMT1dfSVRFTV9UWVBFX1ZMQU47DQo+PiArCWl0ZW1zW2l0ZW1zX2NvdW50ZXJdLnNw ZWMgPSAmdmxhbl9zcGVjOw0KPj4gKwlpdGVtc1tpdGVtc19jb3VudGVyXS5tYXNrID0gJnZsYW5f bWFzazsgfQ0KPj4gKw0KPj4gK3ZvaWQNCj4+ICthZGRfaXB2NChzdHJ1Y3QgcnRlX2Zsb3dfaXRl bSBpdGVtc1tNQVhfSVRFTVNfTlVNXSwNCj4+ICsJdWludDhfdCBpdGVtc19jb3VudGVyLCB1aW50 MzJfdCBzcmNfaXB2NCkNCj4NCj5TaG91bGRuJ3Qgc3JjX2lwdjQgYmUgcnRlX2JlMzI/DQoNCkRv ZXNuJ3QgbWF0dGVyLCBqdXN0IG5lZWQgdG8gaGF2ZSBkaWZmZXJlbnQgaXB2NCBlYWNoIHRpbWUg c28gSSB0aGluayB1aW50MzJfdCB3aWxsIGRvIHRoZSBqb2IsDQpBbmQgSSB3aWxsIG5vdCBnYWlu IGFueXRoaW5nIGZyb20gY29udmVydGluZyBpdCB0byBydGVfYmUzMl90DQoNCj4NCj4+ICt7DQo+ PiArCW1lbXNldCgmaXB2NF9zcGVjLCAwLCBzaXplb2Yoc3RydWN0IHJ0ZV9mbG93X2l0ZW1faXB2 NCkpOw0KPj4gKwltZW1zZXQoJmlwdjRfbWFzaywgMCwgc2l6ZW9mKHN0cnVjdCBydGVfZmxvd19p dGVtX2lwdjQpKTsNCj4+ICsNCj4+ICsJaXB2NF9zcGVjLmhkci5zcmNfYWRkciA9IHNyY19pcHY0 Ow0KPj4gKwlpcHY0X21hc2suaGRyLnNyY19hZGRyID0gMHhmZmZmZmZmZjsNCj4NCj5SVEVfQkUz MigpIGlzIG1pc3NpbmcgYWJvdmUgKGF0IGxlYXN0IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBSVEVf QkUxNigpIGZldw0KPmxpbmVzIGFib3ZlLg0KPg0KPj4gKw0KPj4gKwlpdGVtc1tpdGVtc19jb3Vu dGVyXS50eXBlID0gUlRFX0ZMT1dfSVRFTV9UWVBFX0lQVjQ7DQo+PiArCWl0ZW1zW2l0ZW1zX2Nv dW50ZXJdLnNwZWMgPSAmaXB2NF9zcGVjOw0KPj4gKwlpdGVtc1tpdGVtc19jb3VudGVyXS5tYXNr ID0gJmlwdjRfbWFzazsgfQ0KPj4gKw0KPj4gKw0KPj4gK3ZvaWQNCj4+ICthZGRfaXB2NihzdHJ1 Y3QgcnRlX2Zsb3dfaXRlbSBpdGVtc1tNQVhfSVRFTVNfTlVNXSwNCj4+ICsJdWludDhfdCBpdGVt c19jb3VudGVyLCBpbnQgc3JjX2lwdjYpDQo+DQo+SSB0aGluayBzdWNoIHNwZWNpZmljYXRpb24g b2YgdGhlIHNvdXJjZSBJUHY2IGFkZHJlc3MgaXMgdmVyeSBjb25mdXNpbmcuIElmIHlvdQ0KPnJl YWxseSBuZWVkLCBpdCB3b3VsZCBiZSBuaWNlIHRvIGV4cGxhaW4gd2h5IGNvbW1lbnRzLg0KDQpJ J20gbm90IHN1cmUgSSB1bmRlcnN0YW5kPw0KdGhlIGRlc2lnbiBpbiB0aGUgd2hvbGUgYXBwLCBp cyB0byBhZGQgcnVsZXMgd2l0aCBzYW1lIGl0ZW1zIGJ1dCBvdXRlciBzcmMgSVAgIGluIGluY3Jl YXNlZCBlYWNoIHRpbWUgYnkgMQ0KQW5kIGl0J3Mgc2FtZSBjYXNlIHdpdGggaXB2Niwgd2hhdCBp cyB0aGUgc3BlY2lmaWNhdGlvbiBoZXJlPw0KDQo+DQo+PiArew0KPj4gKwltZW1zZXQoJmlwdjZf c3BlYywgMCwgc2l6ZW9mKHN0cnVjdCBydGVfZmxvd19pdGVtX2lwdjYpKTsNCj4+ICsJbWVtc2V0 KCZpcHY2X21hc2ssIDAsIHNpemVvZihzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9pcHY2KSk7DQo+PiAr DQo+PiArCS8qKiBTZXQgaXB2NiBzcmMgKiovDQo+PiArCW1lbXNldCgmaXB2Nl9zcGVjLmhkci5z cmNfYWRkciwgc3JjX2lwdjYsDQo+PiArCQlzaXplb2YoaXB2Nl9zcGVjLmhkci5zcmNfYWRkcikg LyAyKTsNCj4+ICsNCj4+ICsJLyoqIEZ1bGwgbWFzayAqKi8NCj4+ICsJbWVtc2V0KCZpcHY2X21h c2suaGRyLnNyY19hZGRyLCAxLA0KPj4gKwkJc2l6ZW9mKGlwdjZfc3BlYy5oZHIuc3JjX2FkZHIp KTsNCj4NCj5BcmUgeW91IHRoYXQgMSBpcyB3aGF0IHlvdSByZWFsbHkgd2FudCBoZXJlPyBNYXkg YmUgMHhmZj8NCj4NCj4+ICsNCj4+ICsJaXRlbXNbaXRlbXNfY291bnRlcl0udHlwZSA9IFJURV9G TE9XX0lURU1fVFlQRV9JUFY2Ow0KPj4gKwlpdGVtc1tpdGVtc19jb3VudGVyXS5zcGVjID0gJmlw djZfc3BlYzsNCj4+ICsJaXRlbXNbaXRlbXNfY291bnRlcl0ubWFzayA9ICZpcHY2X21hc2s7IH0N Cj4+ICsNCj4+ICt2b2lkDQo+PiArYWRkX3RjcChzdHJ1Y3QgcnRlX2Zsb3dfaXRlbSBpdGVtc1tN QVhfSVRFTVNfTlVNXSwNCj4+ICsJdWludDhfdCBpdGVtc19jb3VudGVyKQ0KPj4gK3sNCj4+ICsJ bWVtc2V0KCZ0Y3Bfc3BlYywgMCwgc2l6ZW9mKHN0cnVjdCBydGVfZmxvd19pdGVtX3RjcCkpOw0K Pj4gKwltZW1zZXQoJnRjcF9tYXNrLCAwLCBzaXplb2Yoc3RydWN0IHJ0ZV9mbG93X2l0ZW1fdGNw KSk7DQo+PiArDQo+PiArCWl0ZW1zW2l0ZW1zX2NvdW50ZXJdLnR5cGUgPSBSVEVfRkxPV19JVEVN X1RZUEVfVENQOw0KPj4gKwlpdGVtc1tpdGVtc19jb3VudGVyXS5zcGVjID0gJnRjcF9zcGVjOw0K Pj4gKwlpdGVtc1tpdGVtc19jb3VudGVyXS5tYXNrID0gJnRjcF9tYXNrOyB9DQo+PiArDQo+PiAr dm9pZA0KPj4gK2FkZF91ZHAoc3RydWN0IHJ0ZV9mbG93X2l0ZW0gaXRlbXNbTUFYX0lURU1TX05V TV0sDQo+PiArCXVpbnQ4X3QgaXRlbXNfY291bnRlcikNCj4+ICt7DQo+PiArCW1lbXNldCgmdWRw X3NwZWMsIDAsIHNpemVvZihzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV91ZHApKTsNCj4+ICsJbWVtc2V0 KCZ1ZHBfbWFzaywgMCwgc2l6ZW9mKHN0cnVjdCBydGVfZmxvd19pdGVtX3VkcCkpOw0KPj4gKw0K Pj4gKwlpdGVtc1tpdGVtc19jb3VudGVyXS50eXBlID0gUlRFX0ZMT1dfSVRFTV9UWVBFX1VEUDsN Cj4+ICsJaXRlbXNbaXRlbXNfY291bnRlcl0uc3BlYyA9ICZ1ZHBfc3BlYzsNCj4+ICsJaXRlbXNb aXRlbXNfY291bnRlcl0ubWFzayA9ICZ1ZHBfbWFzazsgfQ0KPj4gKw0KPj4gK3ZvaWQNCj4+ICth ZGRfdnhsYW4oc3RydWN0IHJ0ZV9mbG93X2l0ZW0gaXRlbXNbTUFYX0lURU1TX05VTV0sDQo+PiAr CXVpbnQ4X3QgaXRlbXNfY291bnRlcikNCj4+ICt7DQo+PiArCXVpbnQzMl90IHZuaV92YWx1ZSA9 IFZOSV9WQUxVRTsNCj4+ICsJdWludDhfdCBpOw0KPj4gKwltZW1zZXQoJnZ4bGFuX3NwZWMsIDAs IHNpemVvZihzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV92eGxhbikpOw0KPj4gKwltZW1zZXQoJnZ4bGFu X21hc2ssIDAsIHNpemVvZihzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV92eGxhbikpOw0KPj4gKw0KPj4g KwkvKiBTZXQgc3RhbmRhcmQgdnhsYW4gdm5pICovDQo+PiArCWZvciAoaSA9IDA7IGkgPCAzOyBp KyspIHsNCj4+ICsJCXZ4bGFuX3NwZWMudm5pWzIgLSBpXSA9IHZuaV92YWx1ZSA+PiAoaSAqIDgp Ow0KPj4gKwkJdnhsYW5fbWFzay52bmlbMiAtIGldID0gMHhmZjsNCj4+ICsJfQ0KPj4gKw0KPj4g KwkvKiBTdGFuZGFyZCB2eGxhbiBmbGFncyAqLw0KPj4gKwl2eGxhbl9zcGVjLmZsYWdzID0gMHg4 Ow0KPj4gKw0KPj4gKwlpdGVtc1tpdGVtc19jb3VudGVyXS50eXBlID0gUlRFX0ZMT1dfSVRFTV9U WVBFX1ZYTEFOOw0KPj4gKwlpdGVtc1tpdGVtc19jb3VudGVyXS5zcGVjID0gJnZ4bGFuX3NwZWM7 DQo+PiArCWl0ZW1zW2l0ZW1zX2NvdW50ZXJdLm1hc2sgPSAmdnhsYW5fbWFzazsgfQ0KPj4gKw0K Pj4gK3ZvaWQNCj4+ICthZGRfdnhsYW5fZ3BlKHN0cnVjdCBydGVfZmxvd19pdGVtIGl0ZW1zW01B WF9JVEVNU19OVU1dLA0KPj4gKwl1aW50OF90IGl0ZW1zX2NvdW50ZXIpDQo+PiArew0KPj4gKwl1 aW50MzJfdCB2bmlfdmFsdWUgPSBWTklfVkFMVUU7DQo+PiArCXVpbnQ4X3QgaTsNCj4+ICsJbWVt c2V0KCZ2eGxhbl9ncGVfc3BlYywgMCwgc2l6ZW9mKHN0cnVjdA0KPnJ0ZV9mbG93X2l0ZW1fdnhs YW5fZ3BlKSk7DQo+PiArCW1lbXNldCgmdnhsYW5fZ3BlX21hc2ssIDAsIHNpemVvZihzdHJ1Y3QN Cj5ydGVfZmxvd19pdGVtX3Z4bGFuX2dwZSkpOw0KPj4gKw0KPj4gKwkvKiBTZXQgdnhsYW4tZ3Bl IHZuaSAqLw0KPj4gKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7DQo+PiArCQl2eGxhbl9ncGVf c3BlYy52bmlbMiAtIGldID0gdm5pX3ZhbHVlID4+IChpICogOCk7DQo+PiArCQl2eGxhbl9ncGVf bWFzay52bmlbMiAtIGldID0gMHhmZjsNCj4+ICsJfQ0KPj4gKw0KPj4gKwkvKiB2eGxhbi1ncGUg ZmxhZ3MgKi8NCj4+ICsJdnhsYW5fZ3BlX3NwZWMuZmxhZ3MgPSAweDBjOw0KPj4gKw0KPj4gKwlp dGVtc1tpdGVtc19jb3VudGVyXS50eXBlID0gUlRFX0ZMT1dfSVRFTV9UWVBFX1ZYTEFOX0dQRTsN Cj4+ICsJaXRlbXNbaXRlbXNfY291bnRlcl0uc3BlYyA9ICZ2eGxhbl9ncGVfc3BlYzsNCj4+ICsJ aXRlbXNbaXRlbXNfY291bnRlcl0ubWFzayA9ICZ2eGxhbl9ncGVfbWFzazsgfQ0KPj4gKw0KPj4g K3ZvaWQNCj4+ICthZGRfZ3JlKHN0cnVjdCBydGVfZmxvd19pdGVtIGl0ZW1zW01BWF9JVEVNU19O VU1dLA0KPj4gKwl1aW50OF90IGl0ZW1zX2NvdW50ZXIpDQo+PiArew0KPj4gKwl1aW50MTZfdCBw cm90byA9IEdSRV9QUk9UTzsNCj4+ICsJbWVtc2V0KCZncmVfc3BlYywgMCwgc2l6ZW9mKHN0cnVj dCBydGVfZmxvd19pdGVtX2dyZSkpOw0KPj4gKwltZW1zZXQoJmdyZV9tYXNrLCAwLCBzaXplb2Yo c3RydWN0IHJ0ZV9mbG93X2l0ZW1fZ3JlKSk7DQo+PiArDQo+PiArCWdyZV9zcGVjLnByb3RvY29s ID0gUlRFX0JFMTYocHJvdG8pOw0KPj4gKwlncmVfbWFzay5wcm90b2NvbCA9IDB4ZmZmZjsNCj4N Cj5SVEVfQkUxNigweGZmZmYpIHRvIGJlIGNvbnNpc3RlbnQNCj4NCj4+ICsNCj4+ICsJaXRlbXNb aXRlbXNfY291bnRlcl0udHlwZSA9IFJURV9GTE9XX0lURU1fVFlQRV9HUkU7DQo+PiArCWl0ZW1z W2l0ZW1zX2NvdW50ZXJdLnNwZWMgPSAmZ3JlX3NwZWM7DQo+PiArCWl0ZW1zW2l0ZW1zX2NvdW50 ZXJdLm1hc2sgPSAmZ3JlX21hc2s7IH0NCj4+ICsNCj4+ICt2b2lkDQo+PiArYWRkX2dlbmV2ZShz dHJ1Y3QgcnRlX2Zsb3dfaXRlbSBpdGVtc1tNQVhfSVRFTVNfTlVNXSwNCj4+ICsJdWludDhfdCBp dGVtc19jb3VudGVyKQ0KPj4gK3sNCj4+ICsJdWludDMyX3Qgdm5pX3ZhbHVlID0gVk5JX1ZBTFVF Ow0KPj4gKwl1aW50OF90IGk7DQo+PiArCW1lbXNldCgmZ2VuZXZlX3NwZWMsIDAsIHNpemVvZihz dHJ1Y3QgcnRlX2Zsb3dfaXRlbV9nZW5ldmUpKTsNCj4+ICsJbWVtc2V0KCZnZW5ldmVfbWFzaywg MCwgc2l6ZW9mKHN0cnVjdCBydGVfZmxvd19pdGVtX2dlbmV2ZSkpOw0KPj4gKw0KPj4gKwlmb3Ig KGkgPSAwOyBpIDwgMzsgaSsrKSB7DQo+PiArCQlnZW5ldmVfc3BlYy52bmlbMiAtIGldID0gdm5p X3ZhbHVlID4+IChpICogOCk7DQo+PiArCQlnZW5ldmVfbWFzay52bmlbMiAtIGldID0gMHhmZjsN Cj4+ICsJfQ0KPj4gKw0KPj4gKwlpdGVtc1tpdGVtc19jb3VudGVyXS50eXBlID0gUlRFX0ZMT1df SVRFTV9UWVBFX0dFTkVWRTsNCj4+ICsJaXRlbXNbaXRlbXNfY291bnRlcl0uc3BlYyA9ICZnZW5l dmVfc3BlYzsNCj4+ICsJaXRlbXNbaXRlbXNfY291bnRlcl0ubWFzayA9ICZnZW5ldmVfbWFzazsg fQ0KPj4gKw0KPj4gK3ZvaWQNCj4+ICthZGRfZ3RwKHN0cnVjdCBydGVfZmxvd19pdGVtIGl0ZW1z W01BWF9JVEVNU19OVU1dLA0KPj4gKwl1aW50OF90IGl0ZW1zX2NvdW50ZXIpDQo+PiArew0KPj4g Kwl1aW50MzJfdCB0ZWlkX3ZhbHVlID0gVEVJRF9WQUxVRTsNCj4+ICsJbWVtc2V0KCZndHBfc3Bl YywgMCwgc2l6ZW9mKHN0cnVjdCBydGVfZmxvd19pdGVtX2d0cCkpOw0KPj4gKwltZW1zZXQoJmd0 cF9tYXNrLCAwLCBzaXplb2Yoc3RydWN0IHJ0ZV9mbG93X2l0ZW1fZ3RwKSk7DQo+PiArDQo+PiAr CWd0cF9zcGVjLnRlaWQgPSBSVEVfQkUzMih0ZWlkX3ZhbHVlKTsNCj4+ICsJZ3RwX21hc2sudGVp ZCA9IFJURV9CRTMyKDB4ZmZmZmZmZmYpOw0KPj4gKw0KPj4gKwlpdGVtc1tpdGVtc19jb3VudGVy XS50eXBlID0gUlRFX0ZMT1dfSVRFTV9UWVBFX0dUUDsNCj4+ICsJaXRlbXNbaXRlbXNfY291bnRl cl0uc3BlYyA9ICZndHBfc3BlYzsNCj4+ICsJaXRlbXNbaXRlbXNfY291bnRlcl0ubWFzayA9ICZn dHBfbWFzazsgfQ0KPj4gKw0KPj4gK3ZvaWQNCj4+ICthZGRfbWV0YV9kYXRhKHN0cnVjdCBydGVf Zmxvd19pdGVtIGl0ZW1zW01BWF9JVEVNU19OVU1dLA0KPj4gKwl1aW50OF90IGl0ZW1zX2NvdW50 ZXIpDQo+PiArew0KPj4gKwl1aW50MzJfdCBkYXRhID0gTUVUQV9EQVRBOw0KPj4gKwltZW1zZXQo Jm1ldGFfc3BlYywgMCwgc2l6ZW9mKHN0cnVjdCBydGVfZmxvd19pdGVtX21ldGEpKTsNCj4+ICsJ bWVtc2V0KCZtZXRhX21hc2ssIDAsIHNpemVvZihzdHJ1Y3QgcnRlX2Zsb3dfaXRlbV9tZXRhKSk7 DQo+PiArDQo+PiArCW1ldGFfc3BlYy5kYXRhID0gUlRFX0JFMzIoZGF0YSk7DQo+PiArCW1ldGFf bWFzay5kYXRhID0gUlRFX0JFMzIoMHhmZmZmZmZmZik7DQo+PiArDQo+PiArCWl0ZW1zW2l0ZW1z X2NvdW50ZXJdLnR5cGUgPSBSVEVfRkxPV19JVEVNX1RZUEVfTUVUQTsNCj4+ICsJaXRlbXNbaXRl bXNfY291bnRlcl0uc3BlYyA9ICZtZXRhX3NwZWM7DQo+PiArCWl0ZW1zW2l0ZW1zX2NvdW50ZXJd Lm1hc2sgPSAmbWV0YV9tYXNrOyB9DQo+PiArDQo+PiArDQo+PiArdm9pZA0KPj4gK2FkZF9tZXRh X3RhZyhzdHJ1Y3QgcnRlX2Zsb3dfaXRlbSBpdGVtc1tNQVhfSVRFTVNfTlVNXSwNCj4+ICsJdWlu dDhfdCBpdGVtc19jb3VudGVyKQ0KPj4gK3sNCj4+ICsJdWludDMyX3QgZGF0YSA9IE1FVEFfREFU QTsNCj4+ICsJdWludDhfdCBpbmRleCA9IFRBR19JTkRFWDsNCj4+ICsJbWVtc2V0KCZ0YWdfc3Bl YywgMCwgc2l6ZW9mKHN0cnVjdCBydGVfZmxvd19pdGVtX3RhZykpOw0KPj4gKwltZW1zZXQoJnRh Z19tYXNrLCAwLCBzaXplb2Yoc3RydWN0IHJ0ZV9mbG93X2l0ZW1fdGFnKSk7DQo+PiArDQo+PiAr CXRhZ19zcGVjLmRhdGEgPSBSVEVfQkUzMihkYXRhKTsNCj4+ICsJdGFnX21hc2suZGF0YSA9IFJU RV9CRTMyKDB4ZmZmZmZmZmYpOw0KPj4gKwl0YWdfc3BlYy5pbmRleCA9IGluZGV4Ow0KPj4gKwl0 YWdfbWFzay5pbmRleCA9IDB4ZmY7DQo+PiArDQo+PiArCWl0ZW1zW2l0ZW1zX2NvdW50ZXJdLnR5 cGUgPSBSVEVfRkxPV19JVEVNX1RZUEVfVEFHOw0KPj4gKwlpdGVtc1tpdGVtc19jb3VudGVyXS5z cGVjID0gJnRhZ19zcGVjOw0KPj4gKwlpdGVtc1tpdGVtc19jb3VudGVyXS5tYXNrID0gJnRhZ19t YXNrOyB9DQo+DQo+W3NuaXBdDQo+DQo+PiBkaWZmIC0tZ2l0IGEvYXBwL3Rlc3QtZmxvdy1wZXJm L21haW4uYyBiL2FwcC90ZXN0LWZsb3ctcGVyZi9tYWluLmMNCj4+IGluZGV4IDdhOTI0Y2RiNy4u NDYzZTRhNzgyIDEwMDY0NA0KPj4gLS0tIGEvYXBwL3Rlc3QtZmxvdy1wZXJmL21haW4uYw0KPj4g KysrIGIvYXBwL3Rlc3QtZmxvdy1wZXJmL21haW4uYw0KPj4gQEAgLTM1LDI5ICszNSwxNTYgQEAN Cj4+ICAjaW5jbHVkZSA8cnRlX2Zsb3cuaD4NCj4+DQo+PiAgI2luY2x1ZGUgImNvbmZpZy5oIg0K Pj4gKyNpbmNsdWRlICJmbG93X2dlbi5oIg0KPj4NCj4+IC1zdGF0aWMgdWludDMyX3QgbmJfbGNv cmVzOw0KPj4gKyNkZWZpbmUgTUFYX0lURVJBVElPTlMgICAgICAgICAgICAgMTAwDQo+PiArI2Rl ZmluZSBERUZBVUxUX1JVTEVTX0NPVU5UICAgIDQwMDAwMDANCj4+ICsjZGVmaW5lIERFRkFVTFRf SVRFUkFUSU9OICAgICAgIDEwMDAwMA0KPj4gKw0KPj4gK3N0cnVjdCBydGVfZmxvdyAqZmxvdzsN Cj4+ICtzdGF0aWMgdWludDhfdCBmbG93X2dyb3VwOw0KPj4gKw0KPj4gK3N0YXRpYyB1aW50MTZf dCBmbG93X2l0ZW1zOw0KPj4gK3N0YXRpYyB1aW50MTZfdCBmbG93X2FjdGlvbnM7DQo+PiArc3Rh dGljIHVpbnQ4X3QgZmxvd19hdHRyczsNCj4+ICtzdGF0aWMgdm9sYXRpbGUgYm9vbCBmb3JjZV9x dWl0Ow0KPj4gK3N0YXRpYyBib29sIGR1bXBfaXRlcmF0aW9uczsNCj4+ICBzdGF0aWMgc3RydWN0 IHJ0ZV9tZW1wb29sICptYnVmX21wOw0KPj4gK3N0YXRpYyB1aW50MzJfdCBuYl9sY29yZXM7DQo+ PiArc3RhdGljIHVpbnQzMl90IGZsb3dzX2NvdW50Ow0KPj4gK3N0YXRpYyB1aW50MzJfdCBpdGVy YXRpb25zX251bWJlcjsNCj4+ICtzdGF0aWMgdWludDMyX3QgaGFpcnBpbnE7DQo+DQo+R2xvYmFs IHZhcmlhYmxlcyBhZ2Fpbi4NCg0KQXMgSSBtZW50aW9uZWQgYWJvdmU6DQpHbG9iYWwgdmFycyBp biBtYWluLmM6DQpJIHRoaW5rIGl0J3Mgb2sgdG8gbGVhdmUgdGhlbSBhcyBpdCwgc2luY2UgdGhl eSBhcmUgY29udHJvbCBhbmQgdGhleSBzdHJhaWdodGZvcndhcmQuDQpXaGF0ZXZlciBoYXBwZW5z IHRvIHRoZSBhcHAgdGhvc2Ugc2hvdWxkbid0IGNhdXNlIGFueSBpc3N1ZSwgdGhleSBhcmUgZm9y IHRoZSBjb250cm9sIG9ubHkNCg0KPg0KPj4gIHN0YXRpYyB2b2lkDQo+PiAgdXNhZ2UoY2hhciAq cHJvZ25hbWUpDQo+PiAgew0KPj4gIAlwcmludGYoIlxudXNhZ2U6ICVzXG4iLCBwcm9nbmFtZSk7 DQo+PiArCXByaW50ZigiXG5Db250cm9sIGNvbmZpZ3VyYXRpb25zOlxuIik7DQo+PiArCXByaW50 ZigiICAtLWZsb3dzLWNvdW50PU46IHRvIHNldCB0aGUgbnVtYmVyIG9mIG5lZWRlZCINCj4+ICsJ CSIgZmxvd3MgdG8gaW5zZXJ0LCBkZWZhdWx0IGlzIDQsMDAwLDAwMFxuIik7DQo+PiArCXByaW50 ZigiICAtLWR1bXAtaXRlcmF0aW9uczogVG8gcHJpbnQgcmF0ZXMgZm9yIGVhY2giDQo+PiArCQki IGl0ZXJhdGlvblxuIik7DQo+PiArDQo+PiArCXByaW50ZigiVG8gc2V0IGZsb3cgYXR0cmlidXRl czpcbiIpOw0KPj4gKwlwcmludGYoIiAgLS1pbmdyZXNzOiBzZXQgaW5ncmVzcyBhdHRyaWJ1dGUg aW4gZmxvd3NcbiIpOw0KPj4gKwlwcmludGYoIiAgLS1lZ3Jlc3M6IHNldCBlZ3Jlc3MgYXR0cmli dXRlIGluIGZsb3dzXG4iKTsNCj4+ICsJcHJpbnRmKCIgIC0tdHJhbnNmZXI6IHNldCB0cmFuc2Zl ciBhdHRyaWJ1dGUgaW4gZmxvd3NcbiIpOw0KPj4gKwlwcmludGYoIiAgLS1ncm91cD1OOiBzZXQg Z3JvdXAgZm9yIGFsbCBmbG93cywiDQo+PiArCQkiIGRlZmF1bHQgaXMgMFxuIik7DQo+PiArDQo+ PiArCXByaW50ZigiVG8gc2V0IGZsb3cgaXRlbXM6XG4iKTsNCj4+ICsJcHJpbnRmKCIgIC0tZXRo ZXI6IGFkZCBldGhlciBsYXllciBpbiBmbG93IGl0ZW1zXG4iKTsNCj4+ICsJcHJpbnRmKCIgIC0t dmxhbjogYWRkIHZsYW4gbGF5ZXIgaW4gZmxvdyBpdGVtc1xuIik7DQo+PiArCXByaW50ZigiICAt LWlwdjQ6IGFkZCBpcHY0IGxheWVyIGluIGZsb3cgaXRlbXNcbiIpOw0KPj4gKwlwcmludGYoIiAg LS1pcHY2OiBhZGQgaXB2NiBsYXllciBpbiBmbG93IGl0ZW1zXG4iKTsNCj4+ICsJcHJpbnRmKCIg IC0tdGNwOiBhZGQgdGNwIGxheWVyIGluIGZsb3cgaXRlbXNcbiIpOw0KPj4gKwlwcmludGYoIiAg LS11ZHA6IGFkZCB1ZHAgbGF5ZXIgaW4gZmxvdyBpdGVtc1xuIik7DQo+PiArCXByaW50ZigiICAt LXZ4bGFuOiBhZGQgdnhsYW4gbGF5ZXIgaW4gZmxvdyBpdGVtc1xuIik7DQo+PiArCXByaW50Zigi ICAtLXZ4bGFuLWdwZTogYWRkIHZ4bGFuLWdwZSBsYXllciBpbiBmbG93IGl0ZW1zXG4iKTsNCj4+ ICsJcHJpbnRmKCIgIC0tZ3JlOiBhZGQgZ3JlIGxheWVyIGluIGZsb3cgaXRlbXNcbiIpOw0KPj4g KwlwcmludGYoIiAgLS1nZW5ldmU6IGFkZCBnZW5ldmUgbGF5ZXIgaW4gZmxvdyBpdGVtc1xuIik7 DQo+PiArCXByaW50ZigiICAtLWd0cDogYWRkIGd0cCBsYXllciBpbiBmbG93IGl0ZW1zXG4iKTsN Cj4+ICsJcHJpbnRmKCIgIC0tbWV0YTogYWRkIG1ldGEgbGF5ZXIgaW4gZmxvdyBpdGVtc1xuIik7 DQo+PiArCXByaW50ZigiICAtLXRhZzogYWRkIHRhZyBsYXllciBpbiBmbG93IGl0ZW1zXG4iKTsN Cj4+ICsNCj4+ICsJcHJpbnRmKCJUbyBzZXQgZmxvdyBhY3Rpb25zOlxuIik7DQo+PiArCXByaW50 ZigiICAtLXBvcnQtaWQ6IGFkZCBwb3J0LWlkIGFjdGlvbiBpbiBmbG93IGFjdGlvbnNcbiIpOw0K Pj4gKwlwcmludGYoIiAgLS1yc3M6IGFkZCByc3MgYWN0aW9uIGluIGZsb3cgYWN0aW9uc1xuIik7 DQo+PiArCXByaW50ZigiICAtLXF1ZXVlOiBhZGQgcXVldWUgYWN0aW9uIGluIGZsb3cgYWN0aW9u c1xuIik7DQo+PiArCXByaW50ZigiICAtLWp1bXA6IGFkZCBqdW1wIGFjdGlvbiBpbiBmbG93IGFj dGlvbnNcbiIpOw0KPj4gKwlwcmludGYoIiAgLS1tYXJrOiBhZGQgbWFyayBhY3Rpb24gaW4gZmxv dyBhY3Rpb25zXG4iKTsNCj4+ICsJcHJpbnRmKCIgIC0tY291bnQ6IGFkZCBjb3VudCBhY3Rpb24g aW4gZmxvdyBhY3Rpb25zXG4iKTsNCj4+ICsJcHJpbnRmKCIgIC0tc2V0LW1ldGE6IGFkZCBzZXQg bWV0YSBhY3Rpb24gaW4gZmxvdyBhY3Rpb25zXG4iKTsNCj4+ICsJcHJpbnRmKCIgIC0tc2V0LXRh ZzogYWRkIHNldCB0YWcgYWN0aW9uIGluIGZsb3cgYWN0aW9uc1xuIik7DQo+PiArCXByaW50Zigi ICAtLWRyb3A6IGFkZCBkcm9wIGFjdGlvbiBpbiBmbG93IGFjdGlvbnNcbiIpOw0KPj4gKwlwcmlu dGYoIiAgLS1oYWlycGluLXF1ZXVlPU46IGFkZCBoYWlycGluLXF1ZXVlIGFjdGlvbiBpbiBmbG93 DQo+YWN0aW9uc1xuIik7DQo+PiArCXByaW50ZigiICAtLWhhaXJwaW4tcnNzPU46IGFkZCBoYWly cGluZy1yc3MgYWN0aW9uIGluIGZsb3cNCj4+ICthY3Rpb25zXG4iKTsNCj4+ICB9DQo+Pg0KPj4g IHN0YXRpYyB2b2lkDQo+PiAgYXJnc19wYXJzZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQo+PiAg ew0KPj4gIAljaGFyICoqYXJndm9wdDsNCj4+IC0JaW50IG9wdDsNCj4+ICsJaW50IG4sIG9wdCwg aTsNCj4+ICAJaW50IG9wdF9pZHg7DQo+PiArCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaXRl bXNfc3RyW10gPSB7DQo+PiArCQkiZXRoZXIiLCAidmxhbiIsICJpcHY0IiwgImlwdjYiLA0KPg0K PlR5cGljYWx5IEV0aGVybmV0IHBhdHRlcm4gaXRlbSBpcyBuYW1lcyAiZXRoIiAoZS5nLg0KPmlu IHRlc3RwbWQgaWYgSSdtIG5vdCBtaXN0YWtlbikuIFdoeSBkb2VzIGl0IGRpZmZlciBoZXJlPw0K DQpUaGlzIGlzIG5vdCB0ZXN0cG1kLCB3aHkgeW91IHRoaW5rIGl0IHNob3VsZCBiZSB0aGUgc2Ft ZT8NCkkgdGhpbmsgaXQncyBtb3JlIGNsZWFyIHRvIHJpZ2h0IGV0aGVyIHRoYW4gZXRoLCB0aGF0 J3Mgd2h5IEkgdXNlZCBpdCBsaWtlIHRoaXMgaGVyZSwNClNpbmNlIGl0J3Mgbm90IHJlbGF0ZWQg dG8gdGVzdHBtZCB3aXRoIGFueXRoaW5nIEkgdGhvdWdodCBpdCB3b3VsZCBiZSBvayB0byBjaG9v c2UgdGhlIGFwcA0KT3B0aW9ucyBuYW1lcw0KDQo+DQo+PiArCQkidGNwIiwgInVkcCIsICJ2eGxh biIsICJ2eGxhbi1ncGUiLA0KPj4gKwkJImdyZSIsICJnZW5ldmUiLCAiZ3RwIiwgIm1ldGEiLA0K Pj4gKwkJInRhZyINCj4+ICsJfTsNCj4+ICsJdWludDMyX3QgaXRlbXNbXSA9IHsNCj4+ICsJCUVU SF9JVEVNLCBWTEFOX0lURU0sIElQVjRfSVRFTSwNCj4+ICsJCUlQVjZfSVRFTSwgVENQX0lURU0s IFVEUF9JVEVNLA0KPj4gKwkJVlhMQU5fSVRFTSwgVlhMQU5fR1BFX0lURU0sIEdSRV9JVEVNLA0K Pj4gKwkJR0VORVZFX0lURU0sIEdUUF9JVEVNLCBNRVRBX0lURU0sDQo+PiArCQlUQUdfSVRFTQ0K Pj4gKwl9Ow0KPg0KPkkgZ3Vlc3MgYWJvdmUgdHdvIHN0cnVjdHVyZXMgc2hvdWxkIGJlIGJvdGgg Y29uc3QgYW5kIG11c3QgYmUgaW4gc3luYy4gSWYgc28sDQo+aXQgd291bGQgYmUgYmV0dGVyIHRv IGNyZWF0ZSBvbmUgYXJyYXkgc3RydWN0dXJlcyB3aXRoIG5hbWUgYW5kIG1hc2sNCj5tZW1iZXJz LiBJdCBpcyBtb3JlIHJvYnVzdC4NCj4NCj4+ICsJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBh dHRyaWJ1dGVzX3N0cltdID0gew0KPj4gKwkJImluZ3Jlc3MiLCAiZWdyZXNzIiwgInRyYW5zZmVy Ig0KPj4gKwl9Ow0KPj4gKwl1aW50MzJfdCBhdHRyaWJ1dGVzW10gPSB7DQo+PiArCQlJTkdSRVNT LCBFR1JFU1MsIFRSQU5TRkVSDQo+PiArCX07DQo+DQo+U2FtZSBhcyBhYm92ZS4NCj4NCj4+ICsJ c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhY3Rpb25zX3N0cltdID0gew0KPj4gKwkJInBvcnQt aWQiLCAicnNzIiwgInF1ZXVlIiwgImp1bXAiLA0KPj4gKwkJIm1hcmsiLCAiY291bnQiLCAic2V0 LW1ldGEiLCAic2V0LXRhZyIsDQo+PiArCQkiZHJvcCIsDQo+PiArCX07DQo+PiArCXVpbnQzMl90 IGFjdGlvbnNbXSA9IHsNCj4+ICsJCVBPUlRfSURfQUNUSU9OLCBSU1NfQUNUSU9OLCBRVUVVRV9B Q1RJT04sDQo+PiArCQlKVU1QX0FDVElPTiwgTUFSS19BQ1RJT04sIENPVU5UX0FDVElPTiwNCj4+ ICsJCU1FVEFfQUNUSU9OLCBUQUdfQUNUSU9OLCBEUk9QX0FDVElPTg0KPj4gKwl9Ow0KPg0KPlNh bWUgYXMgYWJvdmUuDQo+DQo+PiArCWludCBpdGVtc19zaXplID0gUlRFX0RJTShpdGVtcyk7DQo+ PiArCWludCBhdHRyaWJ1dGVzX3NpemUgPSBSVEVfRElNKGF0dHJpYnV0ZXMpOw0KPj4gKwlpbnQg YWN0aW9uc19zaXplID0gUlRFX0RJTShhY3Rpb25zKTsNCj4+ICsNCj4+ICAJc3RhdGljIHN0cnVj dCBvcHRpb24gbGdvcHRzW10gPSB7DQo+PiAgCQkvKiBDb250cm9sICovDQo+PiAgCQl7ICJoZWxw IiwgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+ICsJCXsgImZsb3dzLWNvdW50 IiwgICAgICAgICAgICAgICAgMSwgMCwgMCB9LA0KPj4gKwkJeyAiZHVtcC1pdGVyYXRpb25zIiwg ICAgICAgICAgICAwLCAwLCAwIH0sDQo+PiArCQkvKiBBdHRyaWJ1dGVzICovDQo+PiArCQl7ICJp bmdyZXNzIiwgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+ICsJCXsgImVncmVzcyIs ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4gKwkJeyAidHJhbnNmZXIiLCAgICAg ICAgICAgICAgICAgICAwLCAwLCAwIH0sDQo+DQo+SSB0aGluayBpdCBzaG91bGQgYmUgcG9zc2li bGUgdG8gYWRkIHRoZXNlIGl0ZW1zIGluIGEgbG9vcCBieSBhdHRyaWJ1dGVzX3N0ci1saWtlDQo+ YXJyYXkuDQoNCkZvciB0aGlzIEkgdHJpZWQgYW5kIGl0IGJlY2FtZSB1Z2x5LCBJIHByZWZlciBp dCB0byByZW1haW4gbGlrZSB0aGlzLA0KV2h5Pw0KVGhlIGNvbnRyb2wgYXJncyBhcmUgc3RhdGlj IHRoYXQgYXJlIG5vdCBhZGRlZCBpbnRvIHRoZSBhcnJheXMsIHNvIEkgbmVlZCB0bw0KUHV0IHN0 YXJ0IGFuZCBlbmQgdG8gYWRkIGVhY2ggaXRlbS9hY3Rpb24gb3IgYXR0cmlidXRlIGFuZCB0aGUg cmVzdWx0cyB3YXMgdWdseQ0KDQplLmc6DQpmb3IgKEkgPSA2OyBJIDwgMjI7IGkrKykgew0KCWxv Z29wdFtpXS5uYW1lID0gaXRlbXNbaV0uc3RyOw0KCWxvZ29wdFtpXS5oYXNfYXJnID0gMDsNCgls b2dvcHRbaV0udmFsID0gMDsNCglsb2dvcHRbaV0uZmxhZyA9IDA7DQp9DQpmb3IgKEkgPSAyMjsg SSA8IDMyOyBpKyspIHsNCglsb2dvcHRbaV0ubmFtZSA9IGFjdGlvbnNbaV0uc3RyOw0KCWxvZ29w dFtpXS5oYXNfYXJnID0gMDsNCglsb2dvcHRbaV0udmFsID0gMDsNCglsb2dvcHRbaV0uZmxhZyA9 IDA7DQp9DQpmb3IgKEkgPSAzMjsgSSA8IDM2OyBpKyspIHsNCglsb2dvcHRbaV0ubmFtZSA9IGF0 dHJpYnV0ZXNbaV0uc3RyOw0KCWxvZ29wdFtpXS5oYXNfYXJnID0gMDsNCglsb2dvcHRbaV0udmFs ID0gMDsNCglsb2dvcHRbaV0uZmxhZyA9IDA7DQp9DQoNCg0KPg0KPj4gKwkJeyAiZ3JvdXAiLCAg ICAgICAgICAgICAgICAgICAgICAxLCAwLCAwIH0sDQo+PiArCQkvKiBJdGVtcyAqLw0KPj4gKwkJ eyAiZXRoZXIiLCAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwIH0sDQo+PiArCQl7ICJ2bGFu IiwgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+ICsJCXsgImlwdjQiLCAgICAg ICAgICAgICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4gKwkJeyAiaXB2NiIsICAgICAgICAgICAg ICAgICAgICAgICAwLCAwLCAwIH0sDQo+PiArCQl7ICJ0Y3AiLCAgICAgICAgICAgICAgICAgICAg ICAgIDAsIDAsIDAgfSwNCj4+ICsJCXsgInVkcCIsICAgICAgICAgICAgICAgICAgICAgICAgMCwg MCwgMCB9LA0KPj4gKwkJeyAidnhsYW4iLCAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwIH0s DQo+PiArCQl7ICJ2eGxhbi1ncGUiLCAgICAgICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+ICsJ CXsgImdyZSIsICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4gKwkJeyAiZ2Vu ZXZlIiwgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwIH0sDQo+PiArCQl7ICJndHAiLCAgICAg ICAgICAgICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+ICsJCXsgIm1ldGEiLCAgICAgICAgICAg ICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4gKwkJeyAidGFnIiwgICAgICAgICAgICAgICAgICAg ICAgICAwLCAwLCAwIH0sDQo+DQo+SSB0aGluayBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gYWRk IHRoZXNlIGl0ZW1zIGluIGEgbG9vcCBieSBpdGVtc19zdHItbGlrZQ0KPmFycmF5LiAgSXQgd291 bGQgYWxsb3cgdG8gYXZvaWQgY29weS1wYXN0ZSBhbmQgc2ltcGxpZnkgbmV3IGl0ZW1zIGFkZGl0 aW9uLg0KPg0KPj4gKwkJLyogQWN0aW9ucyAqLw0KPj4gKwkJeyAicG9ydC1pZCIsICAgICAgICAg ICAgICAgICAgICAwLCAwLCAwIH0sDQo+PiArCQl7ICJyc3MiLCAgICAgICAgICAgICAgICAgICAg ICAgIDAsIDAsIDAgfSwNCj4+ICsJCXsgInF1ZXVlIiwgICAgICAgICAgICAgICAgICAgICAgMCwg MCwgMCB9LA0KPj4gKwkJeyAianVtcCIsICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwIH0s DQo+PiArCQl7ICJtYXJrIiwgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+ICsJ CXsgImNvdW50IiwgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCB9LA0KPj4gKwkJeyAic2V0 LW1ldGEiLCAgICAgICAgICAgICAgICAgICAwLCAwLCAwIH0sDQo+PiArCQl7ICJzZXQtdGFnIiwg ICAgICAgICAgICAgICAgICAgIDAsIDAsIDAgfSwNCj4+ICsJCXsgImRyb3AiLCAgICAgICAgICAg ICAgICAgICAgICAgMCwgMCwgMCB9LA0KPg0KPkkgdGhpbmsgaXQgc2hvdWxkIGJlIHBvc3NpYmxl IHRvIGFkZCB0aGVzZSBpdGVtcyBpbiBhIGxvb3AgYnkgYWN0aW9uc19zdHItbGlrZQ0KPmFycmF5 LiAgSXQgd291bGQgYWxsb3cgdG8gYXZvaWQgY29weS1wYXN0ZSBhbmQgc2ltcGxpZnkgbmV3IGFj dGlvbnMgYWRkaXRpb24uDQo+DQo+DQo+PiArCQl7ICJoYWlycGluLXF1ZXVlIiwgICAgICAgICAg ICAgIDEsIDAsIDAgfSwNCj4+ICsJCXsgImhhaXJwaW4tcnNzIiwgICAgICAgICAgICAgICAgMSwg MCwgMCB9LA0KPj4gIAl9Ow0KPj4NCj4+ICsJZmxvd19pdGVtcyA9IDA7DQo+PiArCWZsb3dfYWN0 aW9ucyA9IDA7DQo+PiArCWZsb3dfYXR0cnMgPSAwOw0KPj4gKwloYWlycGlucSA9IDA7DQo+PiAg CWFyZ3ZvcHQgPSBhcmd2Ow0KPj4NCj4+ICsJcHJpbnRmKCI6OiBGbG93IC0+ICIpOw0KPj4gIAl3 aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3ZvcHQsICIiLA0KPj4gIAkJCQlsZ29w dHMsICZvcHRfaWR4KSkgIT0gRU9GKSB7DQo+PiAgCQlzd2l0Y2ggKG9wdCkgew0KPj4gQEAgLTY2 LDYgKzE5Myw3MyBAQCBhcmdzX3BhcnNlKGludCBhcmdjLCBjaGFyICoqYXJndikNCj4+ICAJCQkJ dXNhZ2UoYXJndlswXSk7DQo+PiAgCQkJCXJ0ZV9leGl0KEVYSVRfU1VDQ0VTUywgIkRpc3BsYXll ZCBoZWxwXG4iKTsNCj4+ICAJCQl9DQo+PiArDQo+PiArCQkJLyogQXR0cmlidXRlcyAqLw0KPj4g KwkJCWZvciAoaSA9IDA7IGkgPCBhdHRyaWJ1dGVzX3NpemU7IGkrKykNCj4+ICsJCQkJaWYgKCFz dHJjbXAobGdvcHRzW29wdF9pZHhdLm5hbWUsDQo+PiArCQkJCQkJYXR0cmlidXRlc19zdHJbaV0p KSB7DQo+DQo+Q29tcGFyaXNvbiB2cyAwLiBNYW55IGNhc2VzIGJlbG93Lg0KPg0KPj4gKwkJCQkJ Zmxvd19hdHRycyB8PSBhdHRyaWJ1dGVzW2ldOw0KPj4gKwkJCQkJcHJpbnRmKCIlcyAvICIsIGF0 dHJpYnV0ZXNfc3RyW2ldKTsNCj4+ICsJCQkJfQ0KPj4gKwkJCWlmICghc3RyY21wKGxnb3B0c1tv cHRfaWR4XS5uYW1lLCAiZ3JvdXAiKSkgew0KPj4gKwkJCQluID0gYXRvaShvcHRhcmcpOw0KPj4g KwkJCQlpZiAobiA+PSAwKQ0KPj4gKwkJCQkJZmxvd19ncm91cCA9IG47DQo+PiArCQkJCWVsc2UN Cj4+ICsJCQkJCXJ0ZV9leGl0KEVYSVRfU1VDQ0VTUywNCj4+ICsJCQkJCQkiZmxvdyBncm91cCBz aG91bGQgYmUgPj0gMCIpOw0KPj4gKwkJCQlwcmludGYoImdyb3VwICVkICIsIGZsb3dfZ3JvdXAp Ow0KPj4gKwkJCX0NCj4+ICsNCj4+ICsJCQkvKiBJdGVtcyAqLw0KPj4gKwkJCWZvciAoaSA9IDA7 IGkgPCBpdGVtc19zaXplOyBpKyspDQo+PiArCQkJCWlmICghc3RyY21wKGxnb3B0c1tvcHRfaWR4 XS5uYW1lLA0KPj4gKwkJCQkJCWl0ZW1zX3N0cltpXSkpIHsNCj4+ICsJCQkJCWZsb3dfaXRlbXMg fD0gaXRlbXNbaV07DQo+PiArCQkJCQlwcmludGYoIiVzIC8gIiwgaXRlbXNfc3RyW2ldKTsNCj4+ ICsJCQkJfQ0KPj4gKw0KPj4gKwkJCS8qIEFjdGlvbnMgKi8NCj4+ICsJCQlmb3IgKGkgPSAwOyBp IDwgYWN0aW9uc19zaXplOyBpKyspDQo+PiArCQkJCWlmICghc3RyY21wKGxnb3B0c1tvcHRfaWR4 XS5uYW1lLA0KPj4gKwkJCQkJCWFjdGlvbnNfc3RyW2ldKSkgew0KPj4gKwkJCQkJZmxvd19hY3Rp b25zIHw9IGFjdGlvbnNbaV07DQo+PiArCQkJCQlwcmludGYoIiVzIC8gIiwgYWN0aW9uc19zdHJb aV0pOw0KPj4gKwkJCQl9DQo+PiArCQkJaWYgKCFzdHJjbXAobGdvcHRzW29wdF9pZHhdLm5hbWUs ICJoYWlycGluLXJzcyIpKSB7DQo+PiArCQkJCW4gPSBhdG9pKG9wdGFyZyk7DQo+PiArCQkJCWlm IChuID4gMCkNCj4+ICsJCQkJCWhhaXJwaW5xID0gbjsNCj4+ICsJCQkJZWxzZQ0KPj4gKwkJCQkJ cnRlX2V4aXQoRVhJVF9TVUNDRVNTLCAiSGFpcnBpbg0KPnF1ZXVlcyBzaG91bGQgYmUgPiAwICIp Ow0KPj4gKw0KPj4gKwkJCQlmbG93X2FjdGlvbnMgfD0gSEFJUlBJTl9SU1NfQUNUSU9OOw0KPj4g KwkJCQlwcmludGYoImhhaXJwaW4tcnNzIC8gIik7DQo+PiArCQkJfQ0KPj4gKwkJCWlmICghc3Ry Y21wKGxnb3B0c1tvcHRfaWR4XS5uYW1lLCAiaGFpcnBpbi1xdWV1ZSIpKSB7DQo+PiArCQkJCW4g PSBhdG9pKG9wdGFyZyk7DQo+PiArCQkJCWlmIChuID4gMCkNCj4+ICsJCQkJCWhhaXJwaW5xID0g bjsNCj4+ICsJCQkJZWxzZQ0KPj4gKwkJCQkJcnRlX2V4aXQoRVhJVF9TVUNDRVNTLCAiSGFpcnBp bg0KPnF1ZXVlcyBzaG91bGQgYmUgPiAwICIpOw0KPj4gKw0KPj4gKwkJCQlmbG93X2FjdGlvbnMg fD0gSEFJUlBJTl9RVUVVRV9BQ1RJT047DQo+PiArCQkJCXByaW50ZigiaGFpcnBpbi1xdWV1ZSAv ICIpOw0KPj4gKwkJCX0NCj4+ICsNCj4+ICsJCQkvKiBDb250cm9sICovDQo+PiArCQkJaWYgKCFz dHJjbXAobGdvcHRzW29wdF9pZHhdLm5hbWUsICJmbG93cy1jb3VudCIpKSB7DQo+PiArCQkJCW4g PSBhdG9pKG9wdGFyZyk7DQo+PiArCQkJCWlmIChuID4gKGludCkgaXRlcmF0aW9uc19udW1iZXIp DQo+PiArCQkJCQlmbG93c19jb3VudCA9IG47DQo+PiArCQkJCWVsc2Ugew0KPj4gKwkJCQkJcHJp bnRmKCJcblxuZmxvd3NfY291bnQgc2hvdWxkIGJlID4NCj4lZCIsDQo+PiArCQkJCQkJaXRlcmF0 aW9uc19udW1iZXIpOw0KPj4gKwkJCQkJcnRlX2V4aXQoRVhJVF9TVUNDRVNTLCAiICIpOw0KPj4g KwkJCQl9DQo+PiArCQkJfQ0KPj4gKwkJCWlmICghc3RyY21wKGxnb3B0c1tvcHRfaWR4XS5uYW1l LCAiZHVtcC1pdGVyYXRpb25zIikpDQo+PiArCQkJCWR1bXBfaXRlcmF0aW9ucyA9IHRydWU7DQo+ PiAgCQkJYnJlYWs7DQo+PiAgCQlkZWZhdWx0Og0KPj4gIAkJCXByaW50ZigiSW52YWxpZCBvcHRp b246ICVzXG4iLCBhcmd2W29wdGluZF0pOyBAQCAtDQo+NzQsMTUgKzI2OCwxNDENCj4+IEBAIGFy Z3NfcGFyc2UoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KPj4gIAkJCWJyZWFrOw0KPj4gIAkJfQ0K Pj4gIAl9DQo+PiArCXByaW50ZigiZW5kX2Zsb3dcbiIpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgdm9pZA0KPj4gK3ByaW50X2Zsb3dfZXJyb3Ioc3RydWN0IHJ0ZV9mbG93X2Vycm9yIGVycm9y KSB7DQo+PiArCXByaW50ZigiRmxvdyBjYW4ndCBiZSBjcmVhdGVkICVkIG1lc3NhZ2U6ICVzXG4i LA0KPj4gKwkJZXJyb3IudHlwZSwNCj4+ICsJCWVycm9yLm1lc3NhZ2UgPyBlcnJvci5tZXNzYWdl IDogIihubyBzdGF0ZWQgcmVhc29uKSIpOyB9DQo+PiArDQo+PiArc3RhdGljIGlubGluZSB2b2lk DQo+PiArZmxvd3NfaGFuZGxlcih2b2lkKQ0KPj4gK3sNCj4+ICsJc3RydWN0IHJ0ZV9mbG93X2Vy cm9yIGVycm9yOw0KPj4gKwljbG9ja190IHN0YXJ0X2l0ZXIsIGVuZF9pdGVyOw0KPj4gKwlkb3Vi bGUgY3B1X3RpbWVfdXNlZDsNCj4+ICsJZG91YmxlIGZsb3dzX3JhdGU7DQo+PiArCWRvdWJsZSBj cHVfdGltZV9wZXJfaXRlcltNQVhfSVRFUkFUSU9OU107DQo+PiArCWRvdWJsZSBkZWx0YTsNCj4+ ICsJdWludDE2X3QgbnJfcG9ydHM7DQo+PiArCXVpbnQzMl90IGk7DQo+PiArCWludCBwb3J0X2lk Ow0KPj4gKwlpbnQgaXRlcl9pZDsNCj4+ICsJdWludDMyX3QgZWFnYWluX2NvdW50ZXIgPSAwOw0K Pj4gKw0KPj4gKwlucl9wb3J0cyA9IHJ0ZV9ldGhfZGV2X2NvdW50X2F2YWlsKCk7DQo+PiArDQo+ PiArCWZvciAoaSA9IDA7IGkgPCBNQVhfSVRFUkFUSU9OUzsgaSsrKQ0KPj4gKwkJY3B1X3RpbWVf cGVyX2l0ZXJbaV0gPSAtMTsNCj4+ICsNCj4+ICsJaWYgKGl0ZXJhdGlvbnNfbnVtYmVyID4gZmxv d3NfY291bnQpDQo+PiArCQlpdGVyYXRpb25zX251bWJlciA9IGZsb3dzX2NvdW50Ow0KPj4gKw0K Pj4gKwlwcmludGYoIjo6IEZsb3dzIENvdW50IHBlciBwb3J0OiAlZFxuIiwgZmxvd3NfY291bnQp Ow0KPj4gKw0KPj4gKwlmb3IgKHBvcnRfaWQgPSAwOyBwb3J0X2lkIDwgbnJfcG9ydHM7IHBvcnRf aWQrKykgew0KPj4gKwkJY3B1X3RpbWVfdXNlZCA9IDA7DQo+PiArCQlpZiAoZmxvd19ncm91cCA+ IDApIHsNCj4+ICsJCQkvKg0KPj4gKwkJCSAqIENyZWF0ZSBnbG9iYWwgcnVsZSB0byBqdW1wIGlu dG8gZmxvd19ncm91cCwNCj4+ICsJCQkgKiB0aGlzIHdheSB0aGUgYXBwIHdpbGwgYXZvaWQgdGhl IGRlZmF1bHQgcnVsZXMuDQo+PiArCQkJICoNCj4+ICsJCQkgKiBHb2xiYWwgcnVsZToNCj4+ICsJ CQkgKiBncm91cCAwIGV0aCAvIGVuZCBhY3Rpb25zIGp1bXAgZ3JvdXAgPGZsb3dfZ3JvdXA+DQo+ PiArCQkJICoNCj4+ICsJCQkgKi8NCj4+ICsJCQlmbG93ID0gZ2VuZXJhdGVfZmxvdyhwb3J0X2lk LCAwLCBmbG93X2F0dHJzLA0KPkVUSF9JVEVNLA0KPj4gKwkJCQlKVU1QX0FDVElPTiwgZmxvd19n cm91cCwgMCwgMCwgJmVycm9yKTsNCj4+ICsNCj4+ICsJCQlpZiAoIWZsb3cpIHsNCj4NCj5Db21w YXJpc29uIHZzIE5VTEwNCj4NCj4+ICsJCQkJcHJpbnRfZmxvd19lcnJvcihlcnJvcik7DQo+PiAr CQkJCXJ0ZV9leGl0KEVYSVRfRkFJTFVSRSwgImVycm9yIGluIGNyZWF0aW5nDQo+ZmxvdyIpOw0K Pj4gKwkJCX0NCj4+ICsJCX0NCj4+ICsNCj4+ICsJCS8qIEluc2VydGlvbiBSYXRlICovDQo+PiAr CQlwcmludGYoIkZsb3dzIGluc2VydGlvbiBvbiBwb3J0ID0gJWRcbiIsIHBvcnRfaWQpOw0KPj4g KwkJc3RhcnRfaXRlciA9IGNsb2NrKCk7DQo+PiArCQlmb3IgKGkgPSAwOyBpIDwgZmxvd3NfY291 bnQ7IGkrKykgew0KPj4gKwkJCWRvIHsNCj4+ICsJCQkJcnRlX2Vycm5vID0gMDsNCj4+ICsJCQkJ ZmxvdyA9IGdlbmVyYXRlX2Zsb3cocG9ydF9pZCwgZmxvd19ncm91cCwNCj4+ICsJCQkJCWZsb3df YXR0cnMsIGZsb3dfaXRlbXMsIGZsb3dfYWN0aW9ucywNCj4+ICsJCQkJCUpVTVBfQUNUSU9OX1RB QkxFLCBpLCBoYWlycGlucSwNCj4mZXJyb3IpOw0KPj4gKwkJCQlpZiAoIWZsb3cpDQo+PiArCQkJ CQllYWdhaW5fY291bnRlcisrOw0KPj4gKwkJCX0gd2hpbGUgKHJ0ZV9lcnJubyA9PSBFQUdBSU4p Ow0KPj4gKw0KPj4gKwkJCWlmIChmb3JjZV9xdWl0KQ0KPj4gKwkJCQlpID0gZmxvd3NfY291bnQ7 DQo+PiArDQo+PiArCQkJaWYgKCFmbG93KSB7DQo+PiArCQkJCXByaW50X2Zsb3dfZXJyb3IoZXJy b3IpOw0KPj4gKwkJCQlydGVfZXhpdChFWElUX0ZBSUxVUkUsICJlcnJvciBpbiBjcmVhdGluZw0K PmZsb3ciKTsNCj4+ICsJCQl9DQo+PiArDQo+PiArCQkJaWYgKGkgJiYgISgoaSArIDEpICUgaXRl cmF0aW9uc19udW1iZXIpKSB7DQo+PiArCQkJCS8qIFNhdmUgdGhlIGluc2VydGlvbiByYXRlIG9m IGVhY2ggaXRlciAqLw0KPj4gKwkJCQllbmRfaXRlciA9IGNsb2NrKCk7DQo+PiArCQkJCWRlbHRh ID0gKGRvdWJsZSkgKGVuZF9pdGVyIC0gc3RhcnRfaXRlcik7DQo+PiArCQkJCWl0ZXJfaWQgPSAo KGkgKyAxKSAvIGl0ZXJhdGlvbnNfbnVtYmVyKSAtIDE7DQo+PiArCQkJCWNwdV90aW1lX3Blcl9p dGVyW2l0ZXJfaWRdID0NCj4+ICsJCQkJCWRlbHRhIC8gQ0xPQ0tTX1BFUl9TRUM7DQo+PiArCQkJ CWNwdV90aW1lX3VzZWQgKz0NCj5jcHVfdGltZV9wZXJfaXRlcltpdGVyX2lkXTsNCj4+ICsJCQkJ c3RhcnRfaXRlciA9IGNsb2NrKCk7DQo+PiArCQkJfQ0KPj4gKwkJfQ0KPj4gKw0KPj4gKwkJLyog SXRlcmF0aW9uIHJhdGUgcGVyIGl0ZXJhdGlvbiAqLw0KPj4gKwkJaWYgKGR1bXBfaXRlcmF0aW9u cykNCj4+ICsJCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0lURVJBVElPTlM7IGkrKykgew0KPj4gKwkJ CQlpZiAoY3B1X3RpbWVfcGVyX2l0ZXJbaV0gPT0gLTEpDQo+PiArCQkJCQljb250aW51ZTsNCj4+ ICsJCQkJZGVsdGEgPSAoZG91YmxlKShpdGVyYXRpb25zX251bWJlciAvDQo+PiArCQkJCQljcHVf dGltZV9wZXJfaXRlcltpXSk7DQo+PiArCQkJCWZsb3dzX3JhdGUgPSBkZWx0YSAvIDEwMDA7DQo+ PiArCQkJCXByaW50ZigiOjogSXRlcmF0aW9uICMlZDogJWQgZmxvd3MgIg0KPj4gKwkJCQkJImlu ICVmIHNlY1sgUmF0ZSA9ICVmIEsvU2VjIF1cbiIsDQo+PiArCQkJCQlpLCBpdGVyYXRpb25zX251 bWJlciwNCj4+ICsJCQkJCWNwdV90aW1lX3Blcl9pdGVyW2ldLCBmbG93c19yYXRlKTsNCj4+ICsJ CQl9DQo+PiArDQo+PiArCQkvKiBJbnNlcnRpb24gcmF0ZSBmb3IgYWxsIGZsb3dzICovDQo+PiAr CQlmbG93c19yYXRlID0gKChkb3VibGUpIChmbG93c19jb3VudCAvIGNwdV90aW1lX3VzZWQpIC8N Cj4xMDAwKTsNCj4+ICsJCXByaW50ZigiXG46OiBUb3RhbCBmbG93IGluc2VydGlvbiByYXRlIC0+ ICVmIEsvU2VjXG4iLA0KPj4gKwkJCQkJCWZsb3dzX3JhdGUpOw0KPj4gKwkJcHJpbnRmKCI6OiBU aGUgdGltZSBmb3IgY3JlYXRpbmcgJWQgaW4gZmxvd3MgJWYgc2Vjb25kc1xuIiwNCj4+ICsJCQkJ CQlmbG93c19jb3VudCwgY3B1X3RpbWVfdXNlZCk7DQo+PiArCQlwcmludGYoIjo6IEVBR0FJTiBj b3VudGVyID0gJWRcbiIsIGVhZ2Fpbl9jb3VudGVyKTsNCj4+ICsJfQ0KPj4gK30NCj4+ICsNCj4+ ICtzdGF0aWMgdm9pZA0KPj4gK3NpZ25hbF9oYW5kbGVyKGludCBzaWdudW0pDQo+PiArew0KPj4g KwlpZiAoc2lnbnVtID09IFNJR0lOVCB8fCBzaWdudW0gPT0gU0lHVEVSTSkgew0KPj4gKwkJcHJp bnRmKCJcblxuU2lnbmFsICVkIHJlY2VpdmVkLCBwcmVwYXJpbmcgdG8gZXhpdC4uLlxuIiwNCj4+ ICsJCQkJCXNpZ251bSk7DQo+PiArCQlwcmludGYoIkVycm9yOiBTdGF0cyBhcmUgd3JvbmcgZHVl IHRvIHN1ZGRlbiBzaWduYWwhXG5cbiIpOw0KPj4gKwkJZm9yY2VfcXVpdCA9IHRydWU7DQo+PiAr CX0NCj4NCj5JdCBpcyB0aGUgcGF0Y2ggd2hpY2ggc3RhcnRzIHRvIHVzZSBzaWdpbnQuaCBhbmQg aXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZQ0KPnBhdGNoLCBub3QgdGhlIHByZXZpb3VzIG9u ZS4NCj4NCj4+ICB9DQo+Pg0KPj4gIHN0YXRpYyB2b2lkDQo+PiAgaW5pdF9wb3J0KHZvaWQpDQo+ PiAgew0KPj4gIAlpbnQgcmV0Ow0KPj4gLQl1aW50MTZfdCBpOw0KPj4gKwl1aW50MTZfdCBpLCBq Ow0KPj4gIAl1aW50MTZfdCBwb3J0X2lkOw0KPj4gIAl1aW50MTZfdCBucl9wb3J0czsNCj4+ICsJ dWludDE2X3QgbnJfcXVldWVzOw0KPj4gKwlzdHJ1Y3QgcnRlX2V0aF9oYWlycGluX2NvbmYgaGFp cnBpbl9jb25mID0gew0KPj4gKwkJLnBlZXJfY291bnQgPSAxLA0KPj4gKwl9Ow0KPj4gIAlzdHJ1 Y3QgcnRlX2V0aF9jb25mIHBvcnRfY29uZiA9IHsNCj4+ICAJCS5yeF9hZHZfY29uZiA9IHsNCj4+ ICAJCQkucnNzX2NvbmYucnNzX2hmID0NCj4+IEBAIC05NCw2ICs0MTQsMTAgQEAgaW5pdF9wb3J0 KHZvaWQpDQo+PiAgCXN0cnVjdCBydGVfZXRoX3J4Y29uZiByeHFfY29uZjsNCj4+ICAJc3RydWN0 IHJ0ZV9ldGhfZGV2X2luZm8gZGV2X2luZm87DQo+Pg0KPj4gKwlucl9xdWV1ZXMgPSBSWFFfTlVN Ow0KPj4gKwlpZiAoaGFpcnBpbnEpDQo+DQo+Q29tcGFyaXNvbiB2cyAwDQo+DQo+PiArCQlucl9x dWV1ZXMgPSBSWFFfTlVNICsgaGFpcnBpbnE7DQo+PiArDQo+PiAgCW5yX3BvcnRzID0gcnRlX2V0 aF9kZXZfY291bnRfYXZhaWwoKTsNCj4+ICAJaWYgKG5yX3BvcnRzID09IDApDQo+PiAgCQlydGVf ZXhpdChFWElUX0ZBSUxVUkUsICJFcnJvcjogbm8gcG9ydCBkZXRlY3RlZFxuIik7IEBAIC0NCj4x MTgsOA0KPj4gKzQ0Miw4IEBAIGluaXRfcG9ydCh2b2lkKQ0KPj4NCj4+ICAJCXByaW50ZigiOjog aW5pdGlhbGl6aW5nIHBvcnQ6ICVkXG4iLCBwb3J0X2lkKTsNCj4+DQo+PiAtCQlyZXQgPSBydGVf ZXRoX2Rldl9jb25maWd1cmUocG9ydF9pZCwgUlhRX05VTSwNCj4+IC0JCQkJVFhRX05VTSwgJnBv cnRfY29uZik7DQo+PiArCQlyZXQgPSBydGVfZXRoX2Rldl9jb25maWd1cmUocG9ydF9pZCwgbnJf cXVldWVzLA0KPj4gKwkJCQlucl9xdWV1ZXMsICZwb3J0X2NvbmYpOw0KPj4gIAkJaWYgKHJldCA8 IDApDQo+PiAgCQkJcnRlX2V4aXQoRVhJVF9GQUlMVVJFLA0KPj4gIAkJCQkiOjogY2Fubm90IGNv bmZpZ3VyZSBkZXZpY2U6IGVycj0lZCwNCj5wb3J0PSV1XG4iLCBAQCAtMTU5LDYNCj4+ICs0ODMs MzAgQEAgaW5pdF9wb3J0KHZvaWQpDQo+PiAgCQkJCSI6OiBwcm9taXNjdW91cyBtb2RlIGVuYWJs ZSBmYWlsZWQ6IGVycj0lcywNCj5wb3J0PSV1XG4iLA0KPj4gIAkJCQlydGVfc3RyZXJyb3IoLXJl dCksIHBvcnRfaWQpOw0KPj4NCj4+ICsJCWlmIChoYWlycGlucSkgew0KPj4gKwkJCWZvciAoaSA9 IFJYUV9OVU0sIGogPSAwOyBpIDwgbnJfcXVldWVzOyBpKyssIGorKykgew0KPj4gKwkJCQloYWly cGluX2NvbmYucGVlcnNbMF0ucG9ydCA9IHBvcnRfaWQ7DQo+PiArCQkJCWhhaXJwaW5fY29uZi5w ZWVyc1swXS5xdWV1ZSA9IGogKyBUWFFfTlVNOw0KPj4gKwkJCQlyZXQgPQ0KPnJ0ZV9ldGhfcnhf aGFpcnBpbl9xdWV1ZV9zZXR1cChwb3J0X2lkLCBpLA0KPj4gKwkJCQkJTlJfUlhELCAmaGFpcnBp bl9jb25mKTsNCj4+ICsJCQkJaWYgKHJldCAhPSAwKQ0KPj4gKwkJCQkJcnRlX2V4aXQoRVhJVF9G QUlMVVJFLA0KPj4gKwkJCQkJCSI6OiBIYWlycGluIHJ4IHF1ZXVlIHNldHVwDQo+ZmFpbGVkOiBl cnI9JWQsIHBvcnQ9JXVcbiIsDQo+PiArCQkJCQkJcmV0LCBwb3J0X2lkKTsNCj4+ICsJCQl9DQo+ PiArDQo+PiArCQkJZm9yIChpID0gVFhRX05VTSwgaiA9IDA7IGkgPCBucl9xdWV1ZXM7IGkrKywg aisrKSB7DQo+PiArCQkJCWhhaXJwaW5fY29uZi5wZWVyc1swXS5wb3J0ID0gcG9ydF9pZDsNCj4+ ICsJCQkJaGFpcnBpbl9jb25mLnBlZXJzWzBdLnF1ZXVlID0gaiArIFJYUV9OVU07DQo+PiArCQkJ CXJldCA9DQo+cnRlX2V0aF90eF9oYWlycGluX3F1ZXVlX3NldHVwKHBvcnRfaWQsIGksDQo+PiAr CQkJCQlOUl9UWEQsICZoYWlycGluX2NvbmYpOw0KPj4gKwkJCQlpZiAocmV0ICE9IDApDQo+PiAr CQkJCQlydGVfZXhpdChFWElUX0ZBSUxVUkUsDQo+PiArCQkJCQkJIjo6IEhhaXJwaW4gdHggcXVl dWUgc2V0dXANCj5mYWlsZWQ6IGVycj0lZCwgcG9ydD0ldVxuIiwNCj4+ICsJCQkJCQlyZXQsIHBv cnRfaWQpOw0KPj4gKwkJCX0NCj4+ICsJCX0NCj4+ICsNCj4+ICAJCXJldCA9IHJ0ZV9ldGhfZGV2 X3N0YXJ0KHBvcnRfaWQpOw0KPj4gIAkJaWYgKHJldCA8IDApDQo+PiAgCQkJcnRlX2V4aXQoRVhJ VF9GQUlMVVJFLA0KPj4gQEAgLTE4MCw2ICs1MjgsMTUgQEAgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpDQo+PiAgCWlmIChyZXQgPCAwKQ0KPj4gIAkJcnRlX2V4aXQoRVhJVF9GQUlMVVJFLCAi RUFMIGluaXQgZmFpbGVkXG4iKTsNCj4+DQo+PiArCWZvcmNlX3F1aXQgPSBmYWxzZTsNCj4+ICsJ ZHVtcF9pdGVyYXRpb25zID0gZmFsc2U7DQo+PiArCWZsb3dzX2NvdW50ID0gREVGQVVMVF9SVUxF U19DT1VOVDsNCj4+ICsJaXRlcmF0aW9uc19udW1iZXIgPSBERUZBVUxUX0lURVJBVElPTjsNCj4+ ICsJZmxvd19ncm91cCA9IDA7DQo+PiArDQo+PiArCXNpZ25hbChTSUdJTlQsIHNpZ25hbF9oYW5k bGVyKTsNCj4+ICsJc2lnbmFsKFNJR1RFUk0sIHNpZ25hbF9oYW5kbGVyKTsNCj4+ICsNCj4+ICAJ YXJnYyAtPSByZXQ7DQo+PiAgCWFyZ3YgKz0gcmV0Ow0KPj4gIAlpZiAoYXJnYyA+IDEpDQo+PiBA QCAtMTkxLDYgKzU0OCw4IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KPj4gIAlpZiAo bmJfbGNvcmVzIDw9IDEpDQo+PiAgCQlydGVfZXhpdChFWElUX0ZBSUxVUkUsICJUaGlzIGFwcCBu ZWVkcyBhdCBsZWFzdCB0d28NCj5jb3Jlc1xuIik7DQo+Pg0KPj4gKwlmbG93c19oYW5kbGVyKCk7 DQo+PiArDQo+PiAgCVJURV9FVEhfRk9SRUFDSF9ERVYocG9ydCkgew0KPj4gIAkJcnRlX2Zsb3df Zmx1c2gocG9ydCwgJmVycm9yKTsNCj4+ICAJCXJ0ZV9ldGhfZGV2X3N0b3AocG9ydCk7DQo+DQo+ W3NuaXBdDQo+DQo+PiBkaWZmIC0tZ2l0IGEvZG9jL2d1aWRlcy90b29scy9mbG93LXBlcmYucnN0 DQo+PiBiL2RvYy9ndWlkZXMvdG9vbHMvZmxvdy1wZXJmLnJzdCBpbmRleCA0OWViNDUwYWUuLmI0 NWZjY2Q2OSAxMDA2NDQNCj4+IC0tLSBhL2RvYy9ndWlkZXMvdG9vbHMvZmxvdy1wZXJmLnJzdA0K Pj4gKysrIGIvZG9jL2d1aWRlcy90b29scy9mbG93LXBlcmYucnN0DQo+PiBAQCAtNCw3ICs0LDE4 IEBADQo+PiAgRmxvdyBwZXJmb3JtYW5jZSB0b29sDQo+PiAgPT09PT09PT09PT09PT09PT09PT09 DQo+Pg0KPj4gLUFwcGxpY2F0aW9uIGZvciBydGVfZmxvdyBwZXJmb3JtYW5jZSB0ZXN0aW5nLg0K Pj4gK0FwcGxpY2F0aW9uIGZvciBydGVfZmxvdyBwZXJmb3JtYW5jZSB0ZXN0aW5nLiBUaGUgYXBw bGljYXRpb24gcHJvdmlkZQ0KPj4gK3RoZQ0KPg0KPkFzIGZhciBhcyBJIHJlbWVtYmVyIGRvY3Vt ZW50YWl0b24gZ3VpZGVsaW5lcyByZWNvbW1lbmQgdG8gc3RhcnQgbmV3DQo+c2VudGVuc2VzIGZy b20gYSBuZXcgbGluZS4NCj4NCj4+ICthYmlsaXR5IHRvIHRlc3QgaW5zZXJ0aW9uIHJhdGUgb2Yg c3BlY2lmaWMgcnRlX2Zsb3cgcnVsZSwgYnkNCj4+ICtzdHJlc3NpbmcgaXQgdG8gdGhlIE5JQywg YW5kIGNhbGN1bGF0ZSB0aGUgaW5zZXJ0aW9uIHJhdGUuDQo+PiArDQo+PiArVGhlIGFwcGxpY2F0 aW9uIG9mZmVycyBzb21lIG9wdGlvbnMgaW4gdGhlIGNvbW1hbmQgbGluZSwgdG8gY29uZmlndXJl DQo+PiArd2hpY2ggcnVsZSB0byBhcHBseS4NCj4+ICsNCj4+ICtBZnRlciB0aGF0IHRoZSBhcHBs aWNhdGlvbiB3aWxsIHN0YXJ0IHByb2R1Y2luZyBydWxlcyB3aXRoIHNhbWUNCj4+ICtwYXR0ZXJu IGJ1dCBpbmNyZWFzaW5nIHRoZSBvdXRlciBJUCBzb3VyY2UgYWRkcmVzcyBieSAxIGVhY2ggdGlt ZSwNCj4+ICt0aHVzIGl0IHdpbGwgZ2l2ZSBkaWZmZXJlbnQgZmxvdyBlYWNoIHRpbWUsIGFuZCBh bGwgb3RoZXIgaXRlbXMgd2lsbCBoYXZlIG9wZW4NCj5tYXNrcy4NCj4+ICsNCj4+ICtUaGUgY3Vy cmVudCBkZXNpZ24gaGF2ZSBzaW5nbGUgY29yZSBpbnNlcnRpb24gcmF0ZS4NCj4+DQo+Pg0KPj4g IENvbXBpbGluZyB0aGUgQXBwbGljYXRpb24NCj4NCj5bc25pcF0NCg0K