From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id F28A441CDE; Sun, 19 Feb 2023 15:23:47 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 845E542BFE; Sun, 19 Feb 2023 15:23:47 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 5135640698 for ; Sun, 19 Feb 2023 15:23:46 +0100 (CET) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 31JDkaLb013165; Sun, 19 Feb 2023 06:23:45 -0800 Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2174.outbound.protection.outlook.com [104.47.55.174]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3nty2yuabs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sun, 19 Feb 2023 06:23:45 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eOS6mAbrGA3bRy6w0t4pv5ObDJ5dA37I+4ml9dGVWkB+D3zQdExh/3NSaCSV7M71Qp/LgronlfbxNyOt8QEc0ovQyOl5Yvi80H5nHEAHHMsHm56N517bvxTGpQGePSs9qdH/0EqUiV7Rhmsmm3DvPVP/mjXcDtUrqiEEwOHgg2t4cvAF729OPWIO4mTWl6lxn+3zgSGwEuo94Zf0FpdxembIVEblIu3rHEsF+URE5EcWnMQUe2UMuRgQtXHjuKXuuIKFPYzzlLp/F5ZN/LwyOJja7N9zLbQBdCTvq03vCHQNXpcm8bt1tvg3CMN4k5VD3NwO2W71kK+YSaUnxX5Q0A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sDUfhY6E4T1xF6EFHtECtetYZmOYgZKtzMH3Ty+ZOaw=; b=jvq9clH3aAQ+MEoQT0+4s8ZGNryR/pxJ7MSg+rT5EK9Mt5+Z8+HV2PuElbNalAjyFt0DckuTh8hhY2dslkrW04BD79ktySretgyIoj0llkT4LG1VWN5f4mjiqzjzYai9xpVw6JpIdSDikZX/ArBa0i9tj9GmS8YqwIlpIhkCveiHzr9mnrnl6DxttR1NGQMqTf4hlWlNs4Y55fAoQsnWvHGEIROPPs4XWGZeYjh/TAY2Zw+1xewYc3RPSc0NMS/4MqC6Eivyfudg6lRQn/3JyaLHhowU5L6oZWEv2ibaMF2UaLR0oECn7n0HFSIZHhI2FPNXEYUlt9IQUR6G9Rkz4w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sDUfhY6E4T1xF6EFHtECtetYZmOYgZKtzMH3Ty+ZOaw=; b=k2zAV17vpur2snSeXt+ii6+USt5/R2AZTtvm60mZbTZNYp+HNPuujvoitDOlYpWfbZeDVuKo+JkrZwyd2sv6Ghp4D7FkYF5jGUsejLIyV2RLa6JZOO5McrCLvYjIwvrX5BOMB60s4epmwY+YznfgXgi4kkUrCaEYBY9wgSxthoc= Received: from DM4PR18MB4368.namprd18.prod.outlook.com (2603:10b6:5:39d::6) by PH7PR18MB5103.namprd18.prod.outlook.com (2603:10b6:510:159::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6111.18; Sun, 19 Feb 2023 14:23:40 +0000 Received: from DM4PR18MB4368.namprd18.prod.outlook.com ([fe80::6d6a:99da:de:ea6b]) by DM4PR18MB4368.namprd18.prod.outlook.com ([fe80::6d6a:99da:de:ea6b%6]) with mapi id 15.20.6111.018; Sun, 19 Feb 2023 14:23:40 +0000 From: Tomasz Duszynski To: Konstantin Ananyev , Konstantin Ananyev , "dev@dpdk.org" Subject: RE: [EXT] Re: [PATCH v11 1/4] lib: add generic support for reading PMU events Thread-Topic: [EXT] Re: [PATCH v11 1/4] lib: add generic support for reading PMU events Thread-Index: AQHZQi/ugndN0uHRZEy+gbr3w2CIfa7SPocAgAB/jGCAAC7XAIADOSHQ Date: Sun, 19 Feb 2023 14:23:39 +0000 Message-ID: References: <20230213113156.385482-1-tduszynski@marvell.com> <20230216175502.3164820-1-tduszynski@marvell.com> <20230216175502.3164820-2-tduszynski@marvell.com> <4b055bbc-36e5-671c-8117-fb0ee7307d55@yandex.ru> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM4PR18MB4368:EE_|PH7PR18MB5103:EE_ x-ms-office365-filtering-correlation-id: c4b35e39-00a3-49fa-ca61-08db1284e562 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: DiBsnPXfSX4fxp6sjbmNAy368SWyboxMRL4RjhBWdKtIYk1wSxjKZkjEliGDfA0ooyxeXCLRbO9CLWWMyZk9+9QQLtPtpl7+udvwQAzJB9zFVLAqIVWU+QyXL1N1dySsF13pHH+PUb07CFZ0xxMqhHT1UxDYTilsQNzMmFi193M20CcZlkOSOjlJcTFehfQtRETIfk0AluVW/to0hMsO9dUbddd2niw+3eReOItS+5fqsVgp2X1MdgdOvfzcnUEUzelJb+oPJw+gAgBE/mfdJBwSm0zC4JLSokhSSYFW4k0twxDbw02lgR1zq9hZv6hcTupf+xU92D75TWa7DYgXorviQOnGqrd/JKB+FtC4uw2UVe+6ErrOTzoLkBl8Bh7YIPHVGs2DfICgnhG0Yt7rtYQ2GlIhtK7ajKSD7/avUWDmu3k6Y7TioPeMARRlRZ2RtKE0nOckPUkZWUCa3VRSC8UfS/qMFYIlGrwsHQczTFV5odEfBBZleX31FW9ujGUsJM7huf36ni7gPEr1SK9i0W1zxFpTPiDVSGQjgOHjXB3g1tLwLez7SoxEJQW/5hEx/pTbS/zl/h7Lc98s1LrySSbnwFzW6eYBTSGjl0JEsOx6zvFc72qBGRQNAD447evqXkSGbpxTuVzEoJMxlQSgs+/HOnzmDodA3l3Z6fxvZ8O99wGhgaCzmh/Uj3GKXu6wlshFgHTkS2bNMU53cRnCI3IeV5eID7W0Nq8bpHzVjMY= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM4PR18MB4368.namprd18.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230025)(4636009)(39850400004)(346002)(396003)(376002)(136003)(366004)(451199018)(38070700005)(86362001)(55016003)(33656002)(71200400001)(7696005)(6506007)(478600001)(83380400001)(110136005)(66574015)(316002)(186003)(9686003)(26005)(122000001)(5660300002)(30864003)(2906002)(66899018)(66556008)(66476007)(66946007)(41300700001)(8676002)(38100700002)(64756008)(66446008)(52536014)(76116006)(8936002)(41533002)(559001)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?anZpcjVtMHl5ZXR3dXREd0dIenUwOTFpVHhheTdFcTFBd3F5QW05dkhhcGlR?= =?utf-8?B?RWZhamdleEU0Y2twWXhRUUxTTTdsejkzUjlCSDVtVWZDSDZTY2prODYwMmtM?= =?utf-8?B?Vk5oVGkwNU5TU09PbnpEaFBqVE1MbGxjNnNveG04MThQajVmWXZJWUNvNldu?= =?utf-8?B?K0lXVm5MY2NlTitwUktTY3NMbVRwKzF2OVgwZFBKM2JmakRZc3V4SWZEV3dS?= =?utf-8?B?QUFVYW9CT2h2dGJwdDlyb3M1clh4Mzl1RnpFeDVTc1dJOWdIOHRaWkZxZ2xj?= =?utf-8?B?Qnkzc1JRUTlWUmdxUU02Rk5KcmdVZW1vNUxaOW1MR3YzamZTZEtMWG5BVnY5?= =?utf-8?B?WldvVXUxVldZdnErQ0tLd1dkb0tUZFhjRE5yWXRYWXE1YjVyZEJ0QXJ4eU5F?= =?utf-8?B?RUh2dVFnM25aVHNYVjJnYmpIQ2VEaW5BcGEwQ01nK0pNYnVoWVNYdDN6cVlZ?= =?utf-8?B?YUVobXNpaXNBVUZTUm9nbmdNSVFZQmdRdXJCS0xxV2lUVVh3ZDdGYUx1dzFq?= =?utf-8?B?OUFhbno4SjBnSGlNc3oxT3ovWHpYSUM0L1pxcDFIWEZoK1hzd0plRUtpR3F6?= =?utf-8?B?cTczVnVNcmpKbVNNQTd4Y3VKM0ttb01nU2xad3dwVmhla21WTEt5QTdLSUpI?= =?utf-8?B?L0gxcU8vdXhxenh4WXlPZGlQSzA3WVNTdXhyaEZuMXN5c0hxbFhTYThhU1lN?= =?utf-8?B?R2hrditQdkdPU1NnQ1lIV1FEMGphK3dheEJVUW1BbkN2Z1ZVNm9RYzlSQ1c3?= =?utf-8?B?cTBBRXJEM3UvNHQ4cHZjamFKUE5Sd3IzRjFmakphaEdkOHh3MXpvUFYxRVZQ?= =?utf-8?B?QzFEM2dSSzBpWXphKzF3OWlHYzgyU2xyVVMxRFFHQnVPM0IyM24zSzhuVDc1?= =?utf-8?B?VlVSUHpKTWFYMUJ1ZG1oNmhJak13Rmh5Q1BuREhoQ3BMZlFnQ29xQitIUWRG?= =?utf-8?B?K1FVZ2g3YVVYbGpsV1NzOUxFNXgrZmJQZHJyWTZnUjFBTDREY0xySnUwRjJI?= =?utf-8?B?SnRsZllucGhZdVhXcHo3b2F5YzdLYWxWTjh4K0dUd2tsdlRPRCszaDdLK3lh?= =?utf-8?B?VGI4ZWxZSmUwcloxbjlPL3ZhSnJrNTFtZmp2OWpUdXhwbEdrYmpMMC9xRGRh?= =?utf-8?B?M2l4TnJ2RHVXeG1Zd0lhSW9rNFlVaHRnR3c4Rm5GMEFDMU94bElwbE5EbnZE?= =?utf-8?B?Z3R2aXora1BvaHZ4WEgxUTF0TmF1YTgwd0lxc3BVaWhoRnN6TzBJeTZ4S0Fo?= =?utf-8?B?aCtrNjg5NXlFUnplanNMQWxDV3AzTEVlTXVreElJQzNCZm56ellmYnYxc1J1?= =?utf-8?B?V0h3Y2lndVRkalFSQnVvb20rTUs2WWhNQ2VjUGhFdU53b3k2ZnVSSjRVcFpn?= =?utf-8?B?UmM5Sk9IWXZXZEFoSGhtL2cvVW1BU3dydCtQdXFGK29wdFVkRHhxOHA4dWhS?= =?utf-8?B?WmdwcUJUUnV1MzdzMkd4RzFGS2RaSU1TV2JUWWp4bCsrazJNbVV3THpHZUJI?= =?utf-8?B?VU9nVTAwVGZIQWdGdElCaUxBekFFQzNnd1hDdDVRTmZ4eSt3MUJsc3R0ZmNM?= =?utf-8?B?a0lrNWVGK1hqZS9XS29ERklsVk5qb2dkdVRPOEFYanU5cm8xN05RczA2MHFK?= =?utf-8?B?MW9tWWlqK0M4NWtYcGtFWUljS2J1UTVKcEpyQ3hTNXhqTWNxcitneWZaQ1hF?= =?utf-8?B?L01DejM2T0dTbUQ4NzVOUUNYYThZVlpGem51L0wvejIxRFlZVW1OUUVTbXIy?= =?utf-8?B?ZytoMDV1R1I2QVJRQ0RvSUQrUWxpeWhCSlJVbVZRbFQ2c3lSeGJyREJHcHRr?= =?utf-8?B?VDF6OUg1VisvbmRPcWdMWDJkbkVFNlk1UndlY0Y4Y2JCeGduQXVlTCtUMmM2?= =?utf-8?B?Tmk3MkF4aVE2bVFsZmljQzJtTzkzWmprR3kzbjBtNjBMNjRsQWtVL1FsL0E0?= =?utf-8?B?MzkzbjNZSVowbUZjdEpoWkd0QWh4dVV1bkFvMk5JVUNNak5DZlFXZUJyVU9w?= =?utf-8?B?NjVlL3hSQUhVQXFnT1pQWk1jMU9yR29VUWJMdEVWV2JqMExERFU4aGNDM2Ey?= =?utf-8?B?YWRud1BzM0h6ZGlYRFg2U2Nod0tRQVd1YnFJeFg1NTc4cy9ieG5CcVhCNXZm?= =?utf-8?Q?Ew3TbJJvV+xnVyGWU/wZ5Y3sG?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: marvell.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM4PR18MB4368.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c4b35e39-00a3-49fa-ca61-08db1284e562 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Feb 2023 14:23:39.5872 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: lSxJv0IGpvwW9YlDq5jt6P0DhPzahUhPFzwsuGhyPMQ4GbBVHJJyLl6o6HIxKnAx0/OwCi7Jezzyrutg/k37nA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR18MB5103 X-Proofpoint-GUID: GVV3uk9LkjRQXEK08wQoVOfcCMx81yYV X-Proofpoint-ORIG-GUID: GVV3uk9LkjRQXEK08wQoVOfcCMx81yYV X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.930,Hydra:6.0.562,FMLib:17.11.170.22 definitions=2023-02-19_08,2023-02-17_01,2023-02-09_01 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org DQoNCj4tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPkZyb206IEtvbnN0YW50aW4gQW5hbnll diA8a29uc3RhbnRpbi5hbmFueWV2QGh1YXdlaS5jb20+DQo+U2VudDogRnJpZGF5LCBGZWJydWFy eSAxNywgMjAyMyAxMToxNSBBTQ0KPlRvOiBUb21hc3ogRHVzenluc2tpIDx0ZHVzenluc2tpQG1h cnZlbGwuY29tPjsgS29uc3RhbnRpbiBBbmFueWV2IDxrb25zdGFudGluLnYuYW5hbnlldkB5YW5k ZXgucnU+Ow0KPmRldkBkcGRrLm9yZw0KPlN1YmplY3Q6IFJFOiBbRVhUXSBSZTogW1BBVENIIHYx MSAxLzRdIGxpYjogYWRkIGdlbmVyaWMgc3VwcG9ydCBmb3IgcmVhZGluZyBQTVUgZXZlbnRzDQo+ DQo+DQo+DQo+PiA+Pg0KPj4gPj4gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBpbiBjYXNlcyB3 aGVyZSBDUFUgY29yZXMgYXJlIGlzb2xhdGVkIGkuZQ0KPj4gPj4gcnVuIGRlZGljYXRlZCB0YXNr cy4gSW4gc3VjaCBjYXNlcyBvbmUgY2Fubm90IHVzZSBzdGFuZGFyZCBwZXJmDQo+PiA+PiB1dGls aXR5IHdpdGhvdXQgc2FjcmlmaWNpbmcgbGF0ZW5jeSBhbmQgcGVyZm9ybWFuY2UuDQo+PiA+Pg0K Pj4gPj4gU2lnbmVkLW9mZi1ieTogVG9tYXN6IER1c3p5bnNraSA8dGR1c3p5bnNraUBtYXJ2ZWxs LmNvbT4NCj4+ID4+IEFja2VkLWJ5OiBNb3J0ZW4gQnLDuHJ1cCA8bWJAc21hcnRzaGFyZXN5c3Rl bXMuY29tPg0KPj4gPj4gLS0tDQo+PiA+PiAgIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICA1ICsNCj4+ID4+ICAgYXBwL3Rlc3QvbWVzb24uYnVpbGQgICAgICAgICAg ICAgICAgICAgfCAgIDIgKw0KPj4gPj4gICBhcHAvdGVzdC90ZXN0X3BtdS5jICAgICAgICAgICAg ICAgICAgICB8ICA2MiArKysrDQo+PiA+PiAgIGRvYy9hcGkvZG94eS1hcGktaW5kZXgubWQgICAg ICAgICAgICAgIHwgICAzICstDQo+PiA+PiAgIGRvYy9hcGkvZG94eS1hcGkuY29uZi5pbiAgICAg ICAgICAgICAgIHwgICAxICsNCj4+ID4+ICAgZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3Byb2ZpbGVf YXBwLnJzdCAgfCAgMTIgKw0KPj4gPj4gICBkb2MvZ3VpZGVzL3JlbF9ub3Rlcy9yZWxlYXNlXzIz XzAzLnJzdCB8ICAgNyArDQo+PiA+PiAgIGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAxICsNCj4+ID4+ICAgbGliL3BtdS9tZXNvbi5idWlsZCAgICAgICAgICAgICAg ICAgICAgfCAgMTMgKw0KPj4gPj4gICBsaWIvcG11L3BtdV9wcml2YXRlLmggICAgICAgICAgICAg ICAgICB8ICAzMiArKw0KPj4gPj4gICBsaWIvcG11L3J0ZV9wbXUuYyAgICAgICAgICAgICAgICAg ICAgICB8IDQ2MCArKysrKysrKysrKysrKysrKysrKysrKysrDQo+PiA+PiAgIGxpYi9wbXUvcnRl X3BtdS5oICAgICAgICAgICAgICAgICAgICAgIHwgMjEyICsrKysrKysrKysrKw0KPj4gPj4gICBs aWIvcG11L3ZlcnNpb24ubWFwICAgICAgICAgICAgICAgICAgICB8ICAxNSArDQo+PiA+PiAgIDEz IGZpbGVzIGNoYW5nZWQsIDgyNCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQo+PiA+PiAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBhcHAvdGVzdC90ZXN0X3BtdS5jDQo+PiA+PiAgIGNyZWF0ZSBt b2RlIDEwMDY0NCBsaWIvcG11L21lc29uLmJ1aWxkDQo+PiA+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWIvcG11L3BtdV9wcml2YXRlLmgNCj4+ID4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9w bXUvcnRlX3BtdS5jDQo+PiA+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvcG11L3J0ZV9wbXUu aA0KPj4gPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3BtdS92ZXJzaW9uLm1hcA0KPj4gPj4N Cj4+ID4+IGRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTIGluZGV4IDM0OTU5 NDZkMGYuLmQzN2YyNDIxMjANCj4+ID4+IDEwMDY0NA0KPj4gPj4gLS0tIGEvTUFJTlRBSU5FUlMN Cj4+ID4+ICsrKyBiL01BSU5UQUlORVJTDQo+PiA+PiBAQCAtMTY5Nyw2ICsxNjk3LDExIEBAIE06 IE5pdGhpbiBEYWJpbHB1cmFtIDxuZGFiaWxwdXJhbUBtYXJ2ZWxsLmNvbT4NCj4+ID4+ICAgTTog UGF2YW4gTmlraGlsZXNoIDxwYmhhZ2F2YXR1bGFAbWFydmVsbC5jb20+DQo+PiA+PiAgIEY6IGxp Yi9ub2RlLw0KPj4gPj4NCj4+ID4+ICtQTVUgLSBFWFBFUklNRU5UQUwNCj4+ID4+ICtNOiBUb21h c3ogRHVzenluc2tpIDx0ZHVzenluc2tpQG1hcnZlbGwuY29tPg0KPj4gPj4gK0Y6IGxpYi9wbXUv DQo+PiA+PiArRjogYXBwL3Rlc3QvdGVzdF9wbXUqDQo+PiA+PiArDQo+PiA+Pg0KPj4gPj4gICBU ZXN0IEFwcGxpY2F0aW9ucw0KPj4gPj4gICAtLS0tLS0tLS0tLS0tLS0tLQ0KPj4gPj4gZGlmZiAt LWdpdCBhL2FwcC90ZXN0L21lc29uLmJ1aWxkIGIvYXBwL3Rlc3QvbWVzb24uYnVpbGQgaW5kZXgN Cj4+ID4+IGYzNGQxOWUzYzMuLjZiNjFiN2ZjMzIgMTAwNjQ0DQo+PiA+PiAtLS0gYS9hcHAvdGVz dC9tZXNvbi5idWlsZA0KPj4gPj4gKysrIGIvYXBwL3Rlc3QvbWVzb24uYnVpbGQNCj4+ID4+IEBA IC0xMTEsNiArMTExLDcgQEAgdGVzdF9zb3VyY2VzID0gZmlsZXMoDQo+PiA+PiAgICAgICAgICAg J3Rlc3RfcmVjaXByb2NhbF9kaXZpc2lvbl9wZXJmLmMnLA0KPj4gPj4gICAgICAgICAgICd0ZXN0 X3JlZC5jJywNCj4+ID4+ICAgICAgICAgICAndGVzdF9waWUuYycsDQo+PiA+PiArICAgICAgICAn dGVzdF9wbXUuYycsDQo+PiA+PiAgICAgICAgICAgJ3Rlc3RfcmVvcmRlci5jJywNCj4+ID4+ICAg ICAgICAgICAndGVzdF9yaWIuYycsDQo+PiA+PiAgICAgICAgICAgJ3Rlc3RfcmliNi5jJywNCj4+ ID4+IEBAIC0yMzksNiArMjQwLDcgQEAgZmFzdF90ZXN0cyA9IFsNCj4+ID4+ICAgICAgICAgICBb J2tuaV9hdXRvdGVzdCcsIGZhbHNlLCB0cnVlXSwNCj4+ID4+ICAgICAgICAgICBbJ2t2YXJnc19h dXRvdGVzdCcsIHRydWUsIHRydWVdLA0KPj4gPj4gICAgICAgICAgIFsnbWVtYmVyX2F1dG90ZXN0 JywgdHJ1ZSwgdHJ1ZV0sDQo+PiA+PiArICAgICAgICBbJ3BtdV9hdXRvdGVzdCcsIHRydWUsIHRy dWVdLA0KPj4gPj4gICAgICAgICAgIFsncG93ZXJfY3B1ZnJlcV9hdXRvdGVzdCcsIGZhbHNlLCB0 cnVlXSwNCj4+ID4+ICAgICAgICAgICBbJ3Bvd2VyX2F1dG90ZXN0JywgdHJ1ZSwgdHJ1ZV0sDQo+ PiA+PiAgICAgICAgICAgWydwb3dlcl9rdm1fdm1fYXV0b3Rlc3QnLCBmYWxzZSwgdHJ1ZV0sIGRp ZmYgLS1naXQNCj4+ID4+IGEvYXBwL3Rlc3QvdGVzdF9wbXUuYyBiL2FwcC90ZXN0L3Rlc3RfcG11 LmMgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4+ID4+IGluZGV4IDAwMDAwMDAwMDAuLmMyNTc2Mzhl OGINCj4+ID4+IC0tLSAvZGV2L251bGwNCj4+ID4+ICsrKyBiL2FwcC90ZXN0L3Rlc3RfcG11LmMN Cj4+ID4+IEBAIC0wLDAgKzEsNjIgQEANCj4+ID4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogQlNELTMtQ2xhdXNlDQo+PiA+PiArICogQ29weXJpZ2h0KEMpIDIwMjMgTWFydmVsbCBJbnRl cm5hdGlvbmFsIEx0ZC4NCj4+ID4+ICsgKi8NCj4+ID4+ICsNCj4+ID4+ICsjaW5jbHVkZSAidGVz dC5oIg0KPj4gPj4gKw0KPj4gPj4gKyNpZm5kZWYgUlRFX0VYRUNfRU5WX0xJTlVYDQo+PiA+PiAr DQo+PiA+PiArc3RhdGljIGludA0KPj4gPj4gK3Rlc3RfcG11KHZvaWQpDQo+PiA+PiArew0KPj4g Pj4gKwlwcmludGYoInBtdV9hdXRvdGVzdCBvbmx5IHN1cHBvcnRlZCBvbiBMaW51eCwgc2tpcHBp bmcgdGVzdFxuIik7DQo+PiA+PiArCXJldHVybiBURVNUX1NLSVBQRUQ7DQo+PiA+PiArfQ0KPj4g Pj4gKw0KPj4gPj4gKyNlbHNlDQo+PiA+PiArDQo+PiA+PiArI2luY2x1ZGUgPHJ0ZV9wbXUuaD4N Cj4+ID4+ICsNCj4+ID4+ICtzdGF0aWMgaW50DQo+PiA+PiArdGVzdF9wbXVfcmVhZCh2b2lkKQ0K Pj4gPj4gK3sNCj4+ID4+ICsJY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7DQo+PiA+PiArCWludCB0 cmllcyA9IDEwLCBldmVudDsNCj4+ID4+ICsJdWludDY0X3QgdmFsID0gMDsNCj4+ID4+ICsNCj4+ ID4+ICsJaWYgKG5hbWUgPT0gTlVMTCkgew0KPj4gPj4gKwkJcHJpbnRmKCJQTVUgbm90IHN1cHBv cnRlZCBvbiB0aGlzIGFyY2hcbiIpOw0KPj4gPj4gKwkJcmV0dXJuIFRFU1RfU0tJUFBFRDsNCj4+ ID4+ICsJfQ0KPj4gPj4gKw0KPj4gPj4gKwlpZiAocnRlX3BtdV9pbml0KCkgPCAwKQ0KPj4gPj4g KwkJcmV0dXJuIFRFU1RfU0tJUFBFRDsNCj4+ID4+ICsNCj4+ID4+ICsJZXZlbnQgPSBydGVfcG11 X2FkZF9ldmVudChuYW1lKTsNCj4+ID4+ICsJd2hpbGUgKHRyaWVzLS0pDQo+PiA+PiArCQl2YWwg Kz0gcnRlX3BtdV9yZWFkKGV2ZW50KTsNCj4+ID4+ICsNCj4+ID4+ICsJcnRlX3BtdV9maW5pKCk7 DQo+PiA+PiArDQo+PiA+PiArCXJldHVybiB2YWwgPyBURVNUX1NVQ0NFU1MgOiBURVNUX0ZBSUxF RDsgfQ0KPj4gPj4gKw0KPj4gPj4gK3N0YXRpYyBzdHJ1Y3QgdW5pdF90ZXN0X3N1aXRlIHBtdV90 ZXN0cyA9IHsNCj4+ID4+ICsJLnN1aXRlX25hbWUgPSAicG11IGF1dG90ZXN0IiwNCj4+ID4+ICsJ LnNldHVwID0gTlVMTCwNCj4+ID4+ICsJLnRlYXJkb3duID0gTlVMTCwNCj4+ID4+ICsJLnVuaXRf dGVzdF9jYXNlcyA9IHsNCj4+ID4+ICsJCVRFU1RfQ0FTRSh0ZXN0X3BtdV9yZWFkKSwNCj4+ID4+ ICsJCVRFU1RfQ0FTRVNfRU5EKCkNCj4+ID4+ICsJfQ0KPj4gPj4gK307DQo+PiA+PiArDQo+PiA+ PiArc3RhdGljIGludA0KPj4gPj4gK3Rlc3RfcG11KHZvaWQpDQo+PiA+PiArew0KPj4gPj4gKwly ZXR1cm4gdW5pdF90ZXN0X3N1aXRlX3J1bm5lcigmcG11X3Rlc3RzKTsNCj4+ID4+ICt9DQo+PiA+ PiArDQo+PiA+PiArI2VuZGlmIC8qIFJURV9FWEVDX0VOVl9MSU5VWCAqLw0KPj4gPj4gKw0KPj4g Pj4gK1JFR0lTVEVSX1RFU1RfQ09NTUFORChwbXVfYXV0b3Rlc3QsIHRlc3RfcG11KTsNCj4+ID4+ IGRpZmYgLS1naXQgYS9kb2MvYXBpL2RveHktYXBpLWluZGV4Lm1kIGIvZG9jL2FwaS9kb3h5LWFw aS1pbmRleC5tZA0KPj4gPj4gaW5kZXggMmRlZWM3ZWExOS4uYThlMDRhMTk1ZCAxMDA2NDQNCj4+ ID4+IC0tLSBhL2RvYy9hcGkvZG94eS1hcGktaW5kZXgubWQNCj4+ID4+ICsrKyBiL2RvYy9hcGkv ZG94eS1hcGktaW5kZXgubWQNCj4+ID4+IEBAIC0yMjMsNyArMjIzLDggQEAgVGhlIHB1YmxpYyBB UEkgaGVhZGVycyBhcmUgZ3JvdXBlZCBieSB0b3BpY3M6DQo+PiA+PiAgICAgW2xvZ10oQHJlZiBy dGVfbG9nLmgpLA0KPj4gPj4gICAgIFtlcnJub10oQHJlZiBydGVfZXJybm8uaCksDQo+PiA+PiAg ICAgW3RyYWNlXShAcmVmIHJ0ZV90cmFjZS5oKSwNCj4+ID4+IC0gIFt0cmFjZV9wb2ludF0oQHJl ZiBydGVfdHJhY2VfcG9pbnQuaCkNCj4+ID4+ICsgIFt0cmFjZV9wb2ludF0oQHJlZiBydGVfdHJh Y2VfcG9pbnQuaCksICBbcG11XShAcmVmIHJ0ZV9wbXUuaCkNCj4+ID4+DQo+PiA+PiAgIC0gKipt aXNjKio6DQo+PiA+PiAgICAgW0VBTCBjb25maWddKEByZWYgcnRlX2VhbC5oKSwNCj4+ID4+IGRp ZmYgLS1naXQgYS9kb2MvYXBpL2RveHktYXBpLmNvbmYuaW4gYi9kb2MvYXBpL2RveHktYXBpLmNv bmYuaW4NCj4+ID4+IGluZGV4DQo+PiA+PiBlODU5NDI2MDk5Li4zNTBiNWE4Yzk0IDEwMDY0NA0K Pj4gPj4gLS0tIGEvZG9jL2FwaS9kb3h5LWFwaS5jb25mLmluDQo+PiA+PiArKysgYi9kb2MvYXBp L2RveHktYXBpLmNvbmYuaW4NCj4+ID4+IEBAIC02Myw2ICs2Myw3IEBAIElOUFVUICAgICAgICAg ICAgICAgICAgID0gQFRPUERJUkAvZG9jL2FwaS9kb3h5LWFwaS1pbmRleC5tZCBcDQo+PiA+PiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQFRPUERJUkAvbGliL3BjaSBcDQo+PiA+PiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQFRPUERJUkAvbGliL3BkdW1wIFwNCj4+ID4+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBAVE9QRElSQC9saWIvcGlwZWxpbmUgXA0KPj4gPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgQFRPUERJUkAvbGliL3BtdSBcDQo+PiA+PiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQFRPUERJUkAvbGliL3BvcnQgXA0KPj4gPj4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEBUT1BESVJAL2xpYi9wb3dlciBcDQo+PiA+PiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQFRPUERJUkAvbGliL3Jhd2RldiBcIGRpZmYgLS1naXQNCj4+ID4+ IGEvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3Byb2ZpbGVfYXBwLnJzdA0KPj4gPj4gYi9kb2MvZ3Vp ZGVzL3Byb2dfZ3VpZGUvcHJvZmlsZV9hcHAucnN0DQo+PiA+PiBpbmRleCAxNDI5MmQ0YzI1Li44 OWUzOGNkMzAxIDEwMDY0NA0KPj4gPj4gLS0tIGEvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3Byb2Zp bGVfYXBwLnJzdA0KPj4gPj4gKysrIGIvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3Byb2ZpbGVfYXBw LnJzdA0KPj4gPj4gQEAgLTcsNiArNywxOCBAQCBQcm9maWxlIFlvdXIgQXBwbGljYXRpb24NCj4+ ID4+ICAgVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSBtZXRob2RzIG9mIHByb2ZpbGlu ZyBEUERLIGFwcGxpY2F0aW9ucyBvbg0KPj4gPj4gICBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4N Cj4+ID4+DQo+PiA+PiArUGVyZm9ybWFuY2UgY291bnRlciBiYXNlZCBwcm9maWxpbmcNCj4+ID4+ ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPj4gPj4gKw0KPj4gPj4gK01h am9yaXR5IG9mIGFyY2hpdGVjdHVyZXMgc3VwcG9ydCBzb21lIHBlcmZvcm1hbmNlIG1vbml0b3Jp bmcgdW5pdCAoUE1VKS4NCj4+ID4+ICtTdWNoIHVuaXQgcHJvdmlkZXMgcHJvZ3JhbW1hYmxlIGNv dW50ZXJzIHRoYXQgbW9uaXRvciBzcGVjaWZpYyBldmVudHMuDQo+PiA+PiArDQo+PiA+PiArRGlm ZmVyZW50IHRvb2xzIGdhdGhlciB0aGF0IGluZm9ybWF0aW9uLCBsaWtlIGZvciBleGFtcGxlIHBl cmYuDQo+PiA+PiArSG93ZXZlciwgaW4gc29tZSBzY2VuYXJpb3Mgd2hlbiBDUFUgY29yZXMgYXJl IGlzb2xhdGVkIGFuZCBydW4NCj4+ID4+ICtkZWRpY2F0ZWQgdGFza3MgaW50ZXJydXB0aW5nIHRo b3NlIHRhc2tzIHdpdGggcGVyZiBtYXkgYmUgdW5kZXNpcmFibGUuDQo+PiA+PiArDQo+PiA+PiAr SW4gc3VjaCBjYXNlcywgYW4gYXBwbGljYXRpb24gY2FuIHVzZSB0aGUgUE1VIGxpYnJhcnkgdG8g cmVhZCBzdWNoDQo+PiA+PiArZXZlbnRzIHZpYQ0KPj4gPmBgcnRlX3BtdV9yZWFkKClgYC4NCj4+ ID4+ICsNCj4+ID4+DQo+PiA+PiAgIFByb2ZpbGluZyBvbiB4ODYNCj4+ID4+ICAgLS0tLS0tLS0t LS0tLS0tLQ0KPj4gPj4gZGlmZiAtLWdpdCBhL2RvYy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2Vf MjNfMDMucnN0DQo+PiA+PiBiL2RvYy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2VfMjNfMDMucnN0 DQo+PiA+PiBpbmRleCBhYjk5OGE1MzU3Li4yMDYyMmVmZTU4IDEwMDY0NA0KPj4gPj4gLS0tIGEv ZG9jL2d1aWRlcy9yZWxfbm90ZXMvcmVsZWFzZV8yM18wMy5yc3QNCj4+ID4+ICsrKyBiL2RvYy9n dWlkZXMvcmVsX25vdGVzL3JlbGVhc2VfMjNfMDMucnN0DQo+PiA+PiBAQCAtMTQ3LDYgKzE0Nywx MyBAQCBOZXcgRmVhdHVyZXMNCj4+ID4+ICAgICAqIEFkZGVkIHN1cHBvcnQgdG8gY2FwdHVyZSBw YWNrZXRzIGF0IGVhY2ggZ3JhcGggbm9kZSB3aXRoIHBhY2tldCBtZXRhZGF0YSBhbmQNCj4+ID4+ ICAgICAgIG5vZGUgbmFtZS4NCj4+ID4+DQo+PiA+PiArKiAqKkFkZGVkIFBNVSBsaWJyYXJ5Lioq DQo+PiA+PiArDQo+PiA+PiArICBBZGRlZCBhIG5ldyBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIHVu aXQgKFBNVSkgbGlicmFyeSB3aGljaA0KPj4gPj4gKyBhbGxvd3MgYXBwbGljYXRpb25zICB0byBw ZXJmb3JtIHNlbGYgbW9uaXRvcmluZyBhY3Rpdml0aWVzDQo+PiA+PiArIHdpdGhvdXQgZGVwZW5k aW5nIG9uIGV4dGVybmFsIHV0aWxpdGllcw0KPj4gPmxpa2UgcGVyZi4NCj4+ID4+ICsgIEFmdGVy IGludGVncmF0aW9uIHdpdGggOmRvYzpgLi4vcHJvZ19ndWlkZS90cmFjZV9saWJgIGRhdGENCj4+ ID4+ICsgZ2F0aGVyZWQgZnJvbSBoYXJkd2FyZSBjb3VudGVycyAgY2FuIGJlIHN0b3JlZCBpbiBD VEYgZm9ybWF0IGZvciBmdXJ0aGVyIGFuYWx5c2lzLg0KPj4gPj4gKw0KPj4gPj4NCj4+ID4+ICAg UmVtb3ZlZCBJdGVtcw0KPj4gPj4gICAtLS0tLS0tLS0tLS0tDQo+PiA+PiBkaWZmIC0tZ2l0IGEv bGliL21lc29uLmJ1aWxkIGIvbGliL21lc29uLmJ1aWxkIGluZGV4DQo+PiA+PiA0NTBjMDYxZDJi Li44YTQyZDQ1ZDIwIDEwMDY0NA0KPj4gPj4gLS0tIGEvbGliL21lc29uLmJ1aWxkDQo+PiA+PiAr KysgYi9saWIvbWVzb24uYnVpbGQNCj4+ID4+IEBAIC0xMSw2ICsxMSw3IEBADQo+PiA+PiAgIGxp YnJhcmllcyA9IFsNCj4+ID4+ICAgICAgICAgICAna3ZhcmdzJywgIyBlYWwgZGVwZW5kcyBvbiBr dmFyZ3MNCj4+ID4+ICAgICAgICAgICAndGVsZW1ldHJ5JywgIyBiYXNpYyBpbmZvIHF1ZXJ5aW5n DQo+PiA+PiArICAgICAgICAncG11JywNCj4+ID4+ICAgICAgICAgICAnZWFsJywgIyBldmVyeXRo aW5nIGRlcGVuZHMgb24gZWFsDQo+PiA+PiAgICAgICAgICAgJ3JpbmcnLA0KPj4gPj4gICAgICAg ICAgICdyY3UnLCAjIHJjdSBkZXBlbmRzIG9uIHJpbmcgZGlmZiAtLWdpdA0KPj4gPj4gYS9saWIv cG11L21lc29uLmJ1aWxkIGIvbGliL3BtdS9tZXNvbi5idWlsZCBuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KPj4gPj4gaW5kZXggMDAwMDAwMDAwMC4uYTQxNjBiNDk0ZQ0KPj4gPj4gLS0tIC9kZXYvbnVs bA0KPj4gPj4gKysrIGIvbGliL3BtdS9tZXNvbi5idWlsZA0KPj4gPj4gQEAgLTAsMCArMSwxMyBA QA0KPj4gPj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAjIENvcHly aWdodChDKSAyMDIzDQo+PiA+PiArTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCj4+ID4+ICsN Cj4+ID4+ICtpZiBub3QgaXNfbGludXgNCj4+ID4+ICsgICAgYnVpbGQgPSBmYWxzZQ0KPj4gPj4g KyAgICByZWFzb24gPSAnb25seSBzdXBwb3J0ZWQgb24gTGludXgnDQo+PiA+PiArICAgIHN1YmRp cl9kb25lKCkNCj4+ID4+ICtlbmRpZg0KPj4gPj4gKw0KPj4gPj4gK2luY2x1ZGVzID0gW2dsb2Jh bF9pbmNdDQo+PiA+PiArDQo+PiA+PiArc291cmNlcyA9IGZpbGVzKCdydGVfcG11LmMnKQ0KPj4g Pj4gK2hlYWRlcnMgPSBmaWxlcygncnRlX3BtdS5oJykNCj4+ID4+IGRpZmYgLS1naXQgYS9saWIv cG11L3BtdV9wcml2YXRlLmggYi9saWIvcG11L3BtdV9wcml2YXRlLmggbmV3IGZpbGUNCj4+ID4+ IG1vZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAwMDAuLmI5ZjhjMWRkYzgNCj4+ID4+IC0tLSAvZGV2 L251bGwNCj4+ID4+ICsrKyBiL2xpYi9wbXUvcG11X3ByaXZhdGUuaA0KPj4gPj4gQEAgLTAsMCAr MSwzMiBAQA0KPj4gPj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UN Cj4+ID4+ICsgKiBDb3B5cmlnaHQoYykgMjAyMyBNYXJ2ZWxsDQo+PiA+PiArICovDQo+PiA+PiAr DQo+PiA+PiArI2lmbmRlZiBfUE1VX1BSSVZBVEVfSF8NCj4+ID4+ICsjZGVmaW5lIF9QTVVfUFJJ VkFURV9IXw0KPj4gPj4gKw0KPj4gPj4gKy8qKg0KPj4gPj4gKyAqIEFyY2hpdGVjdHVyZSBzcGVj aWZpYyBQTVUgaW5pdCBjYWxsYmFjay4NCj4+ID4+ICsgKg0KPj4gPj4gKyAqIEByZXR1cm4NCj4+ ID4+ICsgKiAgIDAgaW4gY2FzZSBvZiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2Uu DQo+PiA+PiArICovDQo+PiA+PiAraW50DQo+PiA+PiArcG11X2FyY2hfaW5pdCh2b2lkKTsNCj4+ ID4+ICsNCj4+ID4+ICsvKioNCj4+ID4+ICsgKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgUE1VIGNs ZWFudXAgY2FsbGJhY2suDQo+PiA+PiArICovDQo+PiA+PiArdm9pZA0KPj4gPj4gK3BtdV9hcmNo X2Zpbmkodm9pZCk7DQo+PiA+PiArDQo+PiA+PiArLyoqDQo+PiA+PiArICogQXBwbHkgYXJjaGl0 ZWN0dXJlIHNwZWNpZmljIHNldHRpbmdzIHRvIGNvbmZpZyBiZWZvcmUgcGFzc2luZyBpdCB0byBz eXNjYWxsLg0KPj4gPj4gKyAqDQo+PiA+PiArICogQHBhcmFtIGNvbmZpZw0KPj4gPj4gKyAqICAg QXJjaGl0ZWN0dXJlIHNwZWNpZmljIGV2ZW50IGNvbmZpZ3VyYXRpb24uIENvbnN1bHQga2VybmVs IHNvdXJjZXMgZm9yIGF2YWlsYWJsZSBvcHRpb25zLg0KPj4gPj4gKyAqLw0KPj4gPj4gK3ZvaWQN Cj4+ID4+ICtwbXVfYXJjaF9maXh1cF9jb25maWcodWludDY0X3QgY29uZmlnWzNdKTsNCj4+ID4+ ICsNCj4+ID4+ICsjZW5kaWYgLyogX1BNVV9QUklWQVRFX0hfICovDQo+PiA+PiBkaWZmIC0tZ2l0 IGEvbGliL3BtdS9ydGVfcG11LmMgYi9saWIvcG11L3J0ZV9wbXUuYyBuZXcgZmlsZSBtb2RlDQo+ PiA+PiAxMDA2NDQgaW5kZXggMDAwMDAwMDAwMC4uOTUwZjk5OWNiNw0KPj4gPj4gLS0tIC9kZXYv bnVsbA0KPj4gPj4gKysrIGIvbGliL3BtdS9ydGVfcG11LmMNCj4+ID4+IEBAIC0wLDAgKzEsNDYw IEBADQo+PiA+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPj4g Pj4gKyAqIENvcHlyaWdodChDKSAyMDIzIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuDQo+PiA+ PiArICovDQo+PiA+PiArDQo+PiA+PiArI2luY2x1ZGUgPGN0eXBlLmg+DQo+PiA+PiArI2luY2x1 ZGUgPGRpcmVudC5oPg0KPj4gPj4gKyNpbmNsdWRlIDxlcnJuby5oPg0KPj4gPj4gKyNpbmNsdWRl IDxyZWdleC5oPg0KPj4gPj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4NCj4+ID4+ICsjaW5jbHVkZSA8 c3RyaW5nLmg+DQo+PiA+PiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPg0KPj4gPj4gKyNpbmNsdWRl IDxzeXMvbW1hbi5oPg0KPj4gPj4gKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4NCj4+ID4+ICsjaW5j bHVkZSA8c3lzL3N5c2NhbGwuaD4NCj4+ID4+ICsjaW5jbHVkZSA8dW5pc3RkLmg+DQo+PiA+PiAr DQo+PiA+PiArI2luY2x1ZGUgPHJ0ZV9hdG9taWMuaD4NCj4+ID4+ICsjaW5jbHVkZSA8cnRlX3Bl cl9sY29yZS5oPg0KPj4gPj4gKyNpbmNsdWRlIDxydGVfcG11Lmg+DQo+PiA+PiArI2luY2x1ZGUg PHJ0ZV9zcGlubG9jay5oPg0KPj4gPj4gKyNpbmNsdWRlIDxydGVfdGFpbHEuaD4NCj4+ID4+ICsN Cj4+ID4+ICsjaW5jbHVkZSAicG11X3ByaXZhdGUuaCINCj4+ID4+ICsNCj4+ID4+ICsjZGVmaW5l IEVWRU5UX1NPVVJDRV9ERVZJQ0VTX1BBVEggIi9zeXMvYnVzL2V2ZW50X3NvdXJjZS9kZXZpY2Vz Ig0KPj4gPg0KPj4gPg0KPj4gPkkgc3VwcG9zZSB0aGF0IHBhc3MgKGFzIHRoZSB3aG9sZSBpbXBs ZW1lbnRhdGlvbikgaXMgbGludXggc3BlY2lmaWM/DQo+PiA+SWYgc28sIHdvdWxkbid0IGl0IG1h a2Ugc2Vuc2UgdG8gaGF2ZSBpdCB1bmRlciBsaW51eCBzdWJkaXI/DQo+PiA+DQo+Pg0KPj4gVGhl cmUgYXJlIG5vdCBhbnkgcGxhbnMgdG8gc3VwcG9ydCB0aGF0IGVsc2V3aGVyZSBjdXJyZW50bHkg c28gZmxhdA0KPj4gZGlyZWN0b3J5IHN0cnVjdHVyZSBpcyBnb29kIGVub3VnaC4NCj4+DQo+PiA+ PiArDQo+PiA+PiArI2RlZmluZSBHRU5NQVNLX1VMTChoLCBsKSAoKH4wVUxMIC0gKDFVTEwgPDwg KGwpKSArIDEpICYgKH4wVUxMID4+DQo+PiA+PiArKCg2NCAtIDEgLSAoaCkpKSkpICNkZWZpbmUg RklFTERfUFJFUChtLCB2KSAoKCh1aW50NjRfdCkodikgPDwNCj4+ID4+ICsoX19idWlsdGluX2Zm c2xsKG0pIC0gMSkpICYgKG0pKQ0KPj4gPj4gKw0KPj4gPj4gK1JURV9ERUZJTkVfUEVSX0xDT1JF KHN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwLCBfZXZlbnRfZ3JvdXApOw0KPj4gPj4gK3N0cnVj dCBydGVfcG11IHJ0ZV9wbXU7DQo+PiA+DQo+PiA+RG8gd2UgcmVhbGx5IG5lZWQgc3RydWN0IGRl Y2xhcmF0aW9uIGhlcmU/DQo+PiA+DQo+Pg0KPj4gV2hhdOKAmXMgdGhlIHByb2JsZW0gd2l0aCB0 aGlzIHBsYWNlbWVudCBwcmVjaXNlbHk/DQo+DQo+Tm90IGEgYmlnIGRlYWwsIGJ1dCBJdCBzZWVt cyBleGNlc3NpdmUgZm9yIG1lLg0KPkFzIEkgdW5kZXJzdGFuZCB5b3UgZG8gaGF2ZSBpbmNsdWRl IGp1c3QgYWJvdmUgZm9yIHRoZSB3aG9sZSAuaCB0aGF0IGNvbnRhaW5zIGRlZmluaXRpb24gb2Yg dGhhdA0KPnN0cnVjdCBhbnl3YXkuDQo+DQo+Pg0KPj4gPg0KPj4gPj4gKy8qDQo+PiA+PiArICog Rm9sbG93aW5nIF9fcnRlX3dlYWsgZnVuY3Rpb25zIHByb3ZpZGUgZGVmYXVsdCBuby1vcC4NCj4+ ID4+ICtBcmNoaXRlY3R1cmVzIHNob3VsZCBvdmVycmlkZSB0aGVtIGlmDQo+PiA+PiArICogbmVj ZXNzYXJ5Lg0KPj4gPj4gKyAqLw0KPj4gPj4gKw0KPj4gPj4gK2ludA0KPj4gPj4gK19fcnRlX3dl YWsgcG11X2FyY2hfaW5pdCh2b2lkKQ0KPj4gPj4gK3sNCj4+ID4+ICsJcmV0dXJuIDA7DQo+PiA+ PiArfQ0KPj4gPj4gKw0KPj4gPj4gK3ZvaWQNCj4+ID4+ICtfX3J0ZV93ZWFrIHBtdV9hcmNoX2Zp bmkodm9pZCkNCj4+ID4+ICt7DQo+PiA+PiArfQ0KPj4gPj4gKw0KPj4gPj4gK3ZvaWQNCj4+ID4+ ICtfX3J0ZV93ZWFrIHBtdV9hcmNoX2ZpeHVwX2NvbmZpZyh1aW50NjRfdCBfX3J0ZV91bnVzZWQg Y29uZmlnWzNdKQ0KPj4gPj4gK3sgfQ0KPj4gPj4gKw0KPj4gPj4gK3N0YXRpYyBpbnQNCj4+ID4+ ICtnZXRfdGVybV9mb3JtYXQoY29uc3QgY2hhciAqbmFtZSwgaW50ICpudW0sIHVpbnQ2NF90ICpt YXNrKSB7DQo+PiA+PiArCWNoYXIgcGF0aFtQQVRIX01BWF07DQo+PiA+PiArCWNoYXIgKmNvbmZp ZyA9IE5VTEw7DQo+PiA+PiArCWludCBoaWdoLCBsb3csIHJldDsNCj4+ID4+ICsJRklMRSAqZnA7 DQo+PiA+PiArDQo+PiA+PiArCSpudW0gPSAqbWFzayA9IDA7DQo+PiA+PiArCXNucHJpbnRmKHBh dGgsIHNpemVvZihwYXRoKSwgRVZFTlRfU09VUkNFX0RFVklDRVNfUEFUSCAiLyVzL2Zvcm1hdC8l cyIsIHJ0ZV9wbXUubmFtZSwNCj5uYW1lKTsNCj4+ID4+ICsJZnAgPSBmb3BlbihwYXRoLCAiciIp Ow0KPj4gPj4gKwlpZiAoZnAgPT0gTlVMTCkNCj4+ID4+ICsJCXJldHVybiAtZXJybm87DQo+PiA+ PiArDQo+PiA+PiArCWVycm5vID0gMDsNCj4+ID4+ICsJcmV0ID0gZnNjYW5mKGZwLCAiJW1bXjpd OiVkLSVkIiwgJmNvbmZpZywgJmxvdywgJmhpZ2gpOw0KPj4gPj4gKwlpZiAocmV0IDwgMikgew0K Pj4gPj4gKwkJcmV0ID0gLUVOT0RBVEE7DQo+PiA+PiArCQlnb3RvIG91dDsNCj4+ID4+ICsJfQ0K Pj4gPj4gKwlpZiAoZXJybm8pIHsNCj4+ID4+ICsJCXJldCA9IC1lcnJubzsNCj4+ID4+ICsJCWdv dG8gb3V0Ow0KPj4gPj4gKwl9DQo+PiA+PiArDQo+PiA+PiArCWlmIChyZXQgPT0gMikNCj4+ID4+ ICsJCWhpZ2ggPSBsb3c7DQo+PiA+PiArDQo+PiA+PiArCSptYXNrID0gR0VOTUFTS19VTEwoaGln aCwgbG93KTsNCj4+ID4+ICsJLyogTGFzdCBkaWdpdCBzaG91bGQgYmUgWzAxMl0uIElmIGxhc3Qg ZGlnaXQgaXMgbWlzc2luZyAwIGlzIGltcGxpZWQuICovDQo+PiA+PiArCSpudW0gPSBjb25maWdb c3RybGVuKGNvbmZpZykgLSAxXTsNCj4+ID4+ICsJKm51bSA9IGlzZGlnaXQoKm51bSkgPyAqbnVt IC0gJzAnIDogMDsNCj4+ID4+ICsNCj4+ID4+ICsJcmV0ID0gMDsNCj4+ID4+ICtvdXQ6DQo+PiA+ PiArCWZyZWUoY29uZmlnKTsNCj4+ID4+ICsJZmNsb3NlKGZwKTsNCj4+ID4+ICsNCj4+ID4+ICsJ cmV0dXJuIHJldDsNCj4+ID4+ICt9DQo+PiA+PiArDQo+PiA+PiArc3RhdGljIGludA0KPj4gPj4g K3BhcnNlX2V2ZW50KGNoYXIgKmJ1ZiwgdWludDY0X3QgY29uZmlnWzNdKSB7DQo+PiA+PiArCWNo YXIgKnRva2VuLCAqdGVybTsNCj4+ID4+ICsJaW50IG51bSwgcmV0LCB2YWw7DQo+PiA+PiArCXVp bnQ2NF90IG1hc2s7DQo+PiA+PiArDQo+PiA+PiArCWNvbmZpZ1swXSA9IGNvbmZpZ1sxXSA9IGNv bmZpZ1syXSA9IDA7DQo+PiA+PiArDQo+PiA+PiArCXRva2VuID0gc3RydG9rKGJ1ZiwgIiwiKTsN Cj4+ID4+ICsJd2hpbGUgKHRva2VuKSB7DQo+PiA+PiArCQllcnJubyA9IDA7DQo+PiA+PiArCQkv KiA8dGVybT49PHZhbHVlPiAqLw0KPj4gPj4gKwkJcmV0ID0gc3NjYW5mKHRva2VuLCAiJW1bXj1d PSVpIiwgJnRlcm0sICZ2YWwpOw0KPj4gPj4gKwkJaWYgKHJldCA8IDEpDQo+PiA+PiArCQkJcmV0 dXJuIC1FTk9EQVRBOw0KPj4gPj4gKwkJaWYgKGVycm5vKQ0KPj4gPj4gKwkJCXJldHVybiAtZXJy bm87DQo+PiA+PiArCQlpZiAocmV0ID09IDEpDQo+PiA+PiArCQkJdmFsID0gMTsNCj4+ID4+ICsN Cj4+ID4+ICsJCXJldCA9IGdldF90ZXJtX2Zvcm1hdCh0ZXJtLCAmbnVtLCAmbWFzayk7DQo+PiA+ PiArCQlmcmVlKHRlcm0pOw0KPj4gPj4gKwkJaWYgKHJldCkNCj4+ID4+ICsJCQlyZXR1cm4gcmV0 Ow0KPj4gPj4gKw0KPj4gPj4gKwkJY29uZmlnW251bV0gfD0gRklFTERfUFJFUChtYXNrLCB2YWwp Ow0KPj4gPj4gKwkJdG9rZW4gPSBzdHJ0b2soTlVMTCwgIiwiKTsNCj4+ID4+ICsJfQ0KPj4gPj4g Kw0KPj4gPj4gKwlyZXR1cm4gMDsNCj4+ID4+ICt9DQo+PiA+PiArDQo+PiA+PiArc3RhdGljIGlu dA0KPj4gPj4gK2dldF9ldmVudF9jb25maWcoY29uc3QgY2hhciAqbmFtZSwgdWludDY0X3QgY29u ZmlnWzNdKSB7DQo+PiA+PiArCWNoYXIgcGF0aFtQQVRIX01BWF0sIGJ1ZltCVUZTSVpdOw0KPj4g Pj4gKwlGSUxFICpmcDsNCj4+ID4+ICsJaW50IHJldDsNCj4+ID4+ICsNCj4+ID4+ICsJc25wcmlu dGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIICIvJXMvZXZl bnRzLyVzIiwgcnRlX3BtdS5uYW1lLA0KPm5hbWUpOw0KPj4gPj4gKwlmcCA9IGZvcGVuKHBhdGgs ICJyIik7DQo+PiA+PiArCWlmIChmcCA9PSBOVUxMKQ0KPj4gPj4gKwkJcmV0dXJuIC1lcnJubzsN Cj4+ID4+ICsNCj4+ID4+ICsJcmV0ID0gZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVmKSwgZnApOw0K Pj4gPj4gKwlpZiAocmV0ID09IDApIHsNCj4+ID4+ICsJCWZjbG9zZShmcCk7DQo+PiA+PiArDQo+ PiA+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4+ID4+ICsJfQ0KPj4gPj4gKwlmY2xvc2UoZnApOw0K Pj4gPj4gKwlidWZbcmV0XSA9ICdcMCc7DQo+PiA+PiArDQo+PiA+PiArCXJldHVybiBwYXJzZV9l dmVudChidWYsIGNvbmZpZyk7DQo+PiA+PiArfQ0KPj4gPj4gKw0KPj4gPj4gK3N0YXRpYyBpbnQN Cj4+ID4+ICtkb19wZXJmX2V2ZW50X29wZW4odWludDY0X3QgY29uZmlnWzNdLCBpbnQgZ3JvdXBf ZmQpIHsNCj4+ID4+ICsJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyID0gew0KPj4gPj4gKwkJ LnNpemUgPSBzaXplb2Yoc3RydWN0IHBlcmZfZXZlbnRfYXR0ciksDQo+PiA+PiArCQkudHlwZSA9 IFBFUkZfVFlQRV9SQVcsDQo+PiA+PiArCQkuZXhjbHVkZV9rZXJuZWwgPSAxLA0KPj4gPj4gKwkJ LmV4Y2x1ZGVfaHYgPSAxLA0KPj4gPj4gKwkJLmRpc2FibGVkID0gMSwNCj4+ID4+ICsJfTsNCj4+ ID4+ICsNCj4+ID4+ICsJcG11X2FyY2hfZml4dXBfY29uZmlnKGNvbmZpZyk7DQo+PiA+PiArDQo+ PiA+PiArCWF0dHIuY29uZmlnID0gY29uZmlnWzBdOw0KPj4gPj4gKwlhdHRyLmNvbmZpZzEgPSBj b25maWdbMV07DQo+PiA+PiArCWF0dHIuY29uZmlnMiA9IGNvbmZpZ1syXTsNCj4+ID4+ICsNCj4+ ID4+ICsJcmV0dXJuIHN5c2NhbGwoU1lTX3BlcmZfZXZlbnRfb3BlbiwgJmF0dHIsIDAsIC0xLCBn cm91cF9mZCwgMCk7IH0NCj4+ID4+ICsNCj4+ID4+ICtzdGF0aWMgaW50DQo+PiA+PiArb3Blbl9l dmVudHMoc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAgKmdyb3VwKSB7DQo+PiA+PiArCXN0cnVj dCBydGVfcG11X2V2ZW50ICpldmVudDsNCj4+ID4+ICsJdWludDY0X3QgY29uZmlnWzNdOw0KPj4g Pj4gKwlpbnQgbnVtID0gMCwgcmV0Ow0KPj4gPj4gKw0KPj4gPj4gKwkvKiBncm91cCBsZWFkZXIg Z2V0cyBjcmVhdGVkIGZpcnN0LCB3aXRoIGZkID0gLTEgKi8NCj4+ID4+ICsJZ3JvdXAtPmZkc1sw XSA9IC0xOw0KPj4gPj4gKw0KPj4gPj4gKwlUQUlMUV9GT1JFQUNIKGV2ZW50LCAmcnRlX3BtdS5l dmVudF9saXN0LCBuZXh0KSB7DQo+PiA+PiArCQlyZXQgPSBnZXRfZXZlbnRfY29uZmlnKGV2ZW50 LT5uYW1lLCBjb25maWcpOw0KPj4gPj4gKwkJaWYgKHJldCkNCj4+ID4+ICsJCQljb250aW51ZTsN Cj4+ID4+ICsNCj4+ID4+ICsJCXJldCA9IGRvX3BlcmZfZXZlbnRfb3Blbihjb25maWcsIGdyb3Vw LT5mZHNbMF0pOw0KPj4gPj4gKwkJaWYgKHJldCA9PSAtMSkgew0KPj4gPj4gKwkJCXJldCA9IC1l cnJubzsNCj4+ID4+ICsJCQlnb3RvIG91dDsNCj4+ID4+ICsJCX0NCj4+ID4+ICsNCj4+ID4+ICsJ CWdyb3VwLT5mZHNbZXZlbnQtPmluZGV4XSA9IHJldDsNCj4+ID4+ICsJCW51bSsrOw0KPj4gPj4g Kwl9DQo+PiA+PiArDQo+PiA+PiArCXJldHVybiAwOw0KPj4gPj4gK291dDoNCj4+ID4+ICsJZm9y ICgtLW51bTsgbnVtID49IDA7IG51bS0tKSB7DQo+PiA+PiArCQljbG9zZShncm91cC0+ZmRzW251 bV0pOw0KPj4gPj4gKwkJZ3JvdXAtPmZkc1tudW1dID0gLTE7DQo+PiA+PiArCX0NCj4+ID4+ICsN Cj4+ID4+ICsNCj4+ID4+ICsJcmV0dXJuIHJldDsNCj4+ID4+ICt9DQo+PiA+PiArDQo+PiA+PiAr c3RhdGljIGludA0KPj4gPj4gK21tYXBfZXZlbnRzKHN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3Vw ICpncm91cCkgew0KPj4gPj4gKwlsb25nIHBhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VfU0la RSk7DQo+PiA+PiArCXVuc2lnbmVkIGludCBpOw0KPj4gPj4gKwl2b2lkICphZGRyOw0KPj4gPj4g KwlpbnQgcmV0Ow0KPj4gPj4gKw0KPj4gPj4gKwlmb3IgKGkgPSAwOyBpIDwgcnRlX3BtdS5udW1f Z3JvdXBfZXZlbnRzOyBpKyspIHsNCj4+ID4+ICsJCWFkZHIgPSBtbWFwKDAsIHBhZ2Vfc2l6ZSwg UFJPVF9SRUFELCBNQVBfU0hBUkVELCBncm91cC0+ZmRzW2ldLCAwKTsNCj4+ID4+ICsJCWlmIChh ZGRyID09IE1BUF9GQUlMRUQpIHsNCj4+ID4+ICsJCQlyZXQgPSAtZXJybm87DQo+PiA+PiArCQkJ Z290byBvdXQ7DQo+PiA+PiArCQl9DQo+PiA+PiArDQo+PiA+PiArCQlncm91cC0+bW1hcF9wYWdl c1tpXSA9IGFkZHI7DQo+PiA+PiArCQlpZiAoIWdyb3VwLT5tbWFwX3BhZ2VzW2ldLT5jYXBfdXNl cl9yZHBtYykgew0KPj4gPj4gKwkJCXJldCA9IC1FUEVSTTsNCj4+ID4+ICsJCQlnb3RvIG91dDsN Cj4+ID4+ICsJCX0NCj4+ID4+ICsJfQ0KPj4gPj4gKw0KPj4gPj4gKwlyZXR1cm4gMDsNCj4+ID4+ ICtvdXQ6DQo+PiA+PiArCWZvciAoOyBpOyBpLS0pIHsNCj4+ID4+ICsJCW11bm1hcChncm91cC0+ bW1hcF9wYWdlc1tpIC0gMV0sIHBhZ2Vfc2l6ZSk7DQo+PiA+PiArCQlncm91cC0+bW1hcF9wYWdl c1tpIC0gMV0gPSBOVUxMOw0KPj4gPj4gKwl9DQo+PiA+PiArDQo+PiA+PiArCXJldHVybiByZXQ7 DQo+PiA+PiArfQ0KPj4gPj4gKw0KPj4gPj4gK3N0YXRpYyB2b2lkDQo+PiA+PiArY2xlYW51cF9l dmVudHMoc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAgKmdyb3VwKSB7DQo+PiA+PiArCXVuc2ln bmVkIGludCBpOw0KPj4gPj4gKw0KPj4gPj4gKwlpZiAoZ3JvdXAtPmZkc1swXSAhPSAtMSkNCj4+ ID4+ICsJCWlvY3RsKGdyb3VwLT5mZHNbMF0sIFBFUkZfRVZFTlRfSU9DX0RJU0FCTEUsDQo+PiA+ PiArUEVSRl9JT0NfRkxBR19HUk9VUCk7DQo+PiA+PiArDQo+PiA+PiArCWZvciAoaSA9IDA7IGkg PCBydGVfcG11Lm51bV9ncm91cF9ldmVudHM7IGkrKykgew0KPj4gPj4gKwkJaWYgKGdyb3VwLT5t bWFwX3BhZ2VzW2ldKSB7DQo+PiA+PiArCQkJbXVubWFwKGdyb3VwLT5tbWFwX3BhZ2VzW2ldLCBz eXNjb25mKF9TQ19QQUdFX1NJWkUpKTsNCj4+ID4+ICsJCQlncm91cC0+bW1hcF9wYWdlc1tpXSA9 IE5VTEw7DQo+PiA+PiArCQl9DQo+PiA+PiArDQo+PiA+PiArCQlpZiAoZ3JvdXAtPmZkc1tpXSAh PSAtMSkgew0KPj4gPj4gKwkJCWNsb3NlKGdyb3VwLT5mZHNbaV0pOw0KPj4gPj4gKwkJCWdyb3Vw LT5mZHNbaV0gPSAtMTsNCj4+ID4+ICsJCX0NCj4+ID4+ICsJfQ0KPj4gPj4gKw0KPj4gPj4gKwln cm91cC0+ZW5hYmxlZCA9IGZhbHNlOw0KPj4gPj4gK30NCj4+ID4+ICsNCj4+ID4+ICtpbnQNCj4+ ID4+ICtfX3J0ZV9wbXVfZW5hYmxlX2dyb3VwKHZvaWQpDQo+PiA+PiArew0KPj4gPj4gKwlzdHJ1 Y3QgcnRlX3BtdV9ldmVudF9ncm91cCAqZ3JvdXAgPSAmUlRFX1BFUl9MQ09SRShfZXZlbnRfZ3Jv dXApOw0KPj4gPj4gKwlpbnQgcmV0Ow0KPj4gPj4gKw0KPj4gPj4gKwlpZiAocnRlX3BtdS5udW1f Z3JvdXBfZXZlbnRzID09IDApDQo+PiA+PiArCQlyZXR1cm4gLUVOT0RFVjsNCj4+ID4+ICsNCj4+ ID4+ICsJcmV0ID0gb3Blbl9ldmVudHMoZ3JvdXApOw0KPj4gPj4gKwlpZiAocmV0KQ0KPj4gPj4g KwkJZ290byBvdXQ7DQo+PiA+PiArDQo+PiA+PiArCXJldCA9IG1tYXBfZXZlbnRzKGdyb3VwKTsN Cj4+ID4+ICsJaWYgKHJldCkNCj4+ID4+ICsJCWdvdG8gb3V0Ow0KPj4gPj4gKw0KPj4gPj4gKwlp ZiAoaW9jdGwoZ3JvdXAtPmZkc1swXSwgUEVSRl9FVkVOVF9JT0NfUkVTRVQsIFBFUkZfSU9DX0ZM QUdfR1JPVVApID09IC0xKSB7DQo+PiA+PiArCQlyZXQgPSAtZXJybm87DQo+PiA+PiArCQlnb3Rv IG91dDsNCj4+ID4+ICsJfQ0KPj4gPj4gKw0KPj4gPj4gKwlpZiAoaW9jdGwoZ3JvdXAtPmZkc1sw XSwgUEVSRl9FVkVOVF9JT0NfRU5BQkxFLCBQRVJGX0lPQ19GTEFHX0dST1VQKSA9PSAtMSkgew0K Pj4gPj4gKwkJcmV0ID0gLWVycm5vOw0KPj4gPj4gKwkJZ290byBvdXQ7DQo+PiA+PiArCX0NCj4+ ID4+ICsNCj4+ID4+ICsJcnRlX3NwaW5sb2NrX2xvY2soJnJ0ZV9wbXUubG9jayk7DQo+PiA+PiAr CVRBSUxRX0lOU0VSVF9UQUlMKCZydGVfcG11LmV2ZW50X2dyb3VwX2xpc3QsIGdyb3VwLCBuZXh0 KTsNCj4+ID4+ICsJcnRlX3NwaW5sb2NrX3VubG9jaygmcnRlX3BtdS5sb2NrKTsNCj4+ID4+ICsJ Z3JvdXAtPmVuYWJsZWQgPSB0cnVlOw0KPj4gPj4gKw0KPj4gPj4gKwlyZXR1cm4gMDsNCj4+ID4+ ICsNCj4+ID4+ICtvdXQ6DQo+PiA+PiArCWNsZWFudXBfZXZlbnRzKGdyb3VwKTsNCj4+ID4+ICsN Cj4+ID4+ICsJcmV0dXJuIHJldDsNCj4+ID4+ICt9DQo+PiA+PiArDQo+PiA+PiArc3RhdGljIGlu dA0KPj4gPj4gK3NjYW5fcG11cyh2b2lkKQ0KPj4gPj4gK3sNCj4+ID4+ICsJY2hhciBwYXRoW1BB VEhfTUFYXTsNCj4+ID4+ICsJc3RydWN0IGRpcmVudCAqZGVudDsNCj4+ID4+ICsJY29uc3QgY2hh ciAqbmFtZTsNCj4+ID4+ICsJRElSICpkaXJwOw0KPj4gPj4gKw0KPj4gPj4gKwlkaXJwID0gb3Bl bmRpcihFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIKTsNCj4+ID4+ICsJaWYgKGRpcnAgPT0gTlVM TCkNCj4+ID4+ICsJCXJldHVybiAtZXJybm87DQo+PiA+PiArDQo+PiA+PiArCXdoaWxlICgoZGVu dCA9IHJlYWRkaXIoZGlycCkpKSB7DQo+PiA+PiArCQluYW1lID0gZGVudC0+ZF9uYW1lOw0KPj4g Pj4gKwkJaWYgKG5hbWVbMF0gPT0gJy4nKQ0KPj4gPj4gKwkJCWNvbnRpbnVlOw0KPj4gPj4gKw0K Pj4gPj4gKwkJLyogc3lzZnMgZW50cnkgc2hvdWxkIGVpdGhlciBjb250YWluIGNwdXMgb3IgYmUg YSBjcHUgKi8NCj4+ID4+ICsJCWlmICghc3RyY21wKG5hbWUsICJjcHUiKSkNCj4+ID4+ICsJCQli cmVhazsNCj4+ID4+ICsNCj4+ID4+ICsJCXNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgRVZF TlRfU09VUkNFX0RFVklDRVNfUEFUSCAiLyVzL2NwdXMiLCBuYW1lKTsNCj4+ID4+ICsJCWlmIChh Y2Nlc3MocGF0aCwgRl9PSykgPT0gMCkNCj4+ID4+ICsJCQlicmVhazsNCj4+ID4+ICsJfQ0KPj4g Pj4gKw0KPj4gPj4gKwlpZiAoZGVudCkgew0KPj4gPj4gKwkJcnRlX3BtdS5uYW1lID0gc3RyZHVw KG5hbWUpOw0KPj4gPj4gKwkJaWYgKHJ0ZV9wbXUubmFtZSA9PSBOVUxMKSB7DQo+PiA+PiArCQkJ Y2xvc2VkaXIoZGlycCk7DQo+PiA+PiArDQo+PiA+PiArCQkJcmV0dXJuIC1FTk9NRU07DQo+PiA+ PiArCQl9DQo+PiA+PiArCX0NCj4+ID4+ICsNCj4+ID4+ICsJY2xvc2VkaXIoZGlycCk7DQo+PiA+ PiArDQo+PiA+PiArCXJldHVybiBydGVfcG11Lm5hbWUgPyAwIDogLUVOT0RFVjsgfQ0KPj4gPj4g Kw0KPj4gPj4gK3N0YXRpYyBzdHJ1Y3QgcnRlX3BtdV9ldmVudCAqDQo+PiA+PiArbmV3X2V2ZW50 KGNvbnN0IGNoYXIgKm5hbWUpDQo+PiA+PiArew0KPj4gPj4gKwlzdHJ1Y3QgcnRlX3BtdV9ldmVu dCAqZXZlbnQ7DQo+PiA+PiArDQo+PiA+PiArCWV2ZW50ID0gY2FsbG9jKDEsIHNpemVvZigqZXZl bnQpKTsNCj4+ID4+ICsJaWYgKGV2ZW50ID09IE5VTEwpDQo+PiA+PiArCQlnb3RvIG91dDsNCj4+ ID4+ICsNCj4+ID4+ICsJZXZlbnQtPm5hbWUgPSBzdHJkdXAobmFtZSk7DQo+PiA+PiArCWlmIChl dmVudC0+bmFtZSA9PSBOVUxMKSB7DQo+PiA+PiArCQlmcmVlKGV2ZW50KTsNCj4+ID4+ICsJCWV2 ZW50ID0gTlVMTDsNCj4+ID4+ICsJfQ0KPj4gPj4gKw0KPj4gPj4gK291dDoNCj4+ID4+ICsJcmV0 dXJuIGV2ZW50Ow0KPj4gPj4gK30NCj4+ID4+ICsNCj4+ID4+ICtzdGF0aWMgdm9pZA0KPj4gPj4g K2ZyZWVfZXZlbnQoc3RydWN0IHJ0ZV9wbXVfZXZlbnQgKmV2ZW50KSB7DQo+PiA+PiArCWZyZWUo ZXZlbnQtPm5hbWUpOw0KPj4gPj4gKwlmcmVlKGV2ZW50KTsNCj4+ID4+ICt9DQo+PiA+PiArDQo+ PiA+PiAraW50DQo+PiA+PiArcnRlX3BtdV9hZGRfZXZlbnQoY29uc3QgY2hhciAqbmFtZSkgew0K Pj4gPj4gKwlzdHJ1Y3QgcnRlX3BtdV9ldmVudCAqZXZlbnQ7DQo+PiA+PiArCWNoYXIgcGF0aFtQ QVRIX01BWF07DQo+PiA+PiArDQo+PiA+PiArCWlmIChydGVfcG11Lm5hbWUgPT0gTlVMTCkNCj4+ ID4+ICsJCXJldHVybiAtRU5PREVWOw0KPj4gPj4gKw0KPj4gPj4gKwlpZiAocnRlX3BtdS5udW1f Z3JvdXBfZXZlbnRzICsgMSA+PSBNQVhfTlVNX0dST1VQX0VWRU5UUykNCj4+ID4+ICsJCXJldHVy biAtRU5PU1BDOw0KPj4gPj4gKw0KPj4gPj4gKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCks IEVWRU5UX1NPVVJDRV9ERVZJQ0VTX1BBVEggIi8lcy9ldmVudHMvJXMiLCBydGVfcG11Lm5hbWUs DQo+bmFtZSk7DQo+PiA+PiArCWlmIChhY2Nlc3MocGF0aCwgUl9PSykpDQo+PiA+PiArCQlyZXR1 cm4gLUVOT0RFVjsNCj4+ID4+ICsNCj4+ID4+ICsJVEFJTFFfRk9SRUFDSChldmVudCwgJnJ0ZV9w bXUuZXZlbnRfbGlzdCwgbmV4dCkgew0KPj4gPj4gKwkJaWYgKCFzdHJjbXAoZXZlbnQtPm5hbWUs IG5hbWUpKQ0KPj4gPj4gKwkJCXJldHVybiBldmVudC0+aW5kZXg7DQo+PiA+PiArCQljb250aW51 ZTsNCj4+ID4+ICsJfQ0KPj4gPj4gKw0KPj4gPj4gKwlldmVudCA9IG5ld19ldmVudChuYW1lKTsN Cj4+ID4+ICsJaWYgKGV2ZW50ID09IE5VTEwpDQo+PiA+PiArCQlyZXR1cm4gLUVOT01FTTsNCj4+ ID4+ICsNCj4+ID4+ICsJZXZlbnQtPmluZGV4ID0gcnRlX3BtdS5udW1fZ3JvdXBfZXZlbnRzKys7 DQo+PiA+PiArCVRBSUxRX0lOU0VSVF9UQUlMKCZydGVfcG11LmV2ZW50X2xpc3QsIGV2ZW50LCBu ZXh0KTsNCj4+ID4+ICsNCj4+ID4+ICsJcmV0dXJuIGV2ZW50LT5pbmRleDsNCj4+ID4+ICt9DQo+ PiA+PiArDQo+PiA+PiAraW50DQo+PiA+PiArcnRlX3BtdV9pbml0KHZvaWQpDQo+PiA+PiArew0K Pj4gPj4gKwlpbnQgcmV0Ow0KPj4gPj4gKw0KPj4gPj4gKwkvKiBBbGxvdyBjYWxsaW5nIGluaXQg ZnJvbSBtdWx0aXBsZSBjb250ZXh0cyB3aXRoaW4gYSBzaW5nbGUgdGhyZWFkLiBUaGlzIHNpbXBs aWZpZXMNCj4+ID4+ICsJICogcmVzb3VyY2UgbWFuYWdlbWVudCBhIGJpdCBlLmcgaW4gY2FzZSBm YXN0LXBhdGggdHJhY2Vwb2ludCBoYXMgYWxyZWFkeSBiZWVuIGVuYWJsZWQNCj4+ID4+ICsJICog dmlhIGNvbW1hbmQgbGluZSBidXQgYXBwbGljYXRpb24gZG9lc24ndCBjYXJlIGVub3VnaCBhbmQg cGVyZm9ybXMgaW5pdC9maW5pIGFnYWluLg0KPj4gPj4gKwkgKi8NCj4+ID4+ICsJaWYgKHJ0ZV9w bXUuaW5pdGlhbGl6ZWQgIT0gMCkgew0KPj4gPj4gKwkJcnRlX3BtdS5pbml0aWFsaXplZCsrOw0K Pj4gPj4gKwkJcmV0dXJuIDA7DQo+PiA+PiArCX0NCj4+ID4+ICsNCj4+ID4+ICsJcmV0ID0gc2Nh bl9wbXVzKCk7DQo+PiA+PiArCWlmIChyZXQpDQo+PiA+PiArCQlnb3RvIG91dDsNCj4+ID4+ICsN Cj4+ID4+ICsJcmV0ID0gcG11X2FyY2hfaW5pdCgpOw0KPj4gPj4gKwlpZiAocmV0KQ0KPj4gPj4g KwkJZ290byBvdXQ7DQo+PiA+PiArDQo+PiA+PiArCVRBSUxRX0lOSVQoJnJ0ZV9wbXUuZXZlbnRf bGlzdCk7DQo+PiA+PiArCVRBSUxRX0lOSVQoJnJ0ZV9wbXUuZXZlbnRfZ3JvdXBfbGlzdCk7DQo+ PiA+PiArCXJ0ZV9zcGlubG9ja19pbml0KCZydGVfcG11LmxvY2spOw0KPj4gPj4gKwlydGVfcG11 LmluaXRpYWxpemVkID0gMTsNCj4+ID4+ICsNCj4+ID4+ICsJcmV0dXJuIDA7DQo+PiA+PiArb3V0 Og0KPj4gPj4gKwlmcmVlKHJ0ZV9wbXUubmFtZSk7DQo+PiA+PiArCXJ0ZV9wbXUubmFtZSA9IE5V TEw7DQo+PiA+PiArDQo+PiA+PiArCXJldHVybiByZXQ7DQo+PiA+PiArfQ0KPj4gPj4gKw0KPj4g Pj4gK3ZvaWQNCj4+ID4+ICtydGVfcG11X2Zpbmkodm9pZCkNCj4+ID4+ICt7DQo+PiA+PiArCXN0 cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwICpncm91cCwgKnRtcF9ncm91cDsNCj4+ID4+ICsJc3Ry dWN0IHJ0ZV9wbXVfZXZlbnQgKmV2ZW50LCAqdG1wX2V2ZW50Ow0KPj4gPj4gKw0KPj4gPj4gKwkv KiBjbGVhbnVwIG9uY2UgaW5pdCBjb3VudCBkcm9wcyB0byB6ZXJvICovDQo+PiA+PiArCWlmIChy dGVfcG11LmluaXRpYWxpemVkID09IDAgfHwgLS1ydGVfcG11LmluaXRpYWxpemVkICE9IDApDQo+ PiA+PiArCQlyZXR1cm47DQo+PiA+PiArDQo+PiA+PiArCVJURV9UQUlMUV9GT1JFQUNIX1NBRkUo ZXZlbnQsICZydGVfcG11LmV2ZW50X2xpc3QsIG5leHQsIHRtcF9ldmVudCkgew0KPj4gPj4gKwkJ VEFJTFFfUkVNT1ZFKCZydGVfcG11LmV2ZW50X2xpc3QsIGV2ZW50LCBuZXh0KTsNCj4+ID4+ICsJ CWZyZWVfZXZlbnQoZXZlbnQpOw0KPj4gPj4gKwl9DQo+PiA+PiArDQo+PiA+PiArCVJURV9UQUlM UV9GT1JFQUNIX1NBRkUoZ3JvdXAsICZydGVfcG11LmV2ZW50X2dyb3VwX2xpc3QsIG5leHQsIHRt cF9ncm91cCkgew0KPj4gPj4gKwkJVEFJTFFfUkVNT1ZFKCZydGVfcG11LmV2ZW50X2dyb3VwX2xp c3QsIGdyb3VwLCBuZXh0KTsNCj4+ID4+ICsJCWNsZWFudXBfZXZlbnRzKGdyb3VwKTsNCj4+ID4+ ICsJfQ0KPj4gPj4gKw0KPj4gPj4gKwlwbXVfYXJjaF9maW5pKCk7DQo+PiA+PiArCWZyZWUocnRl X3BtdS5uYW1lKTsNCj4+ID4+ICsJcnRlX3BtdS5uYW1lID0gTlVMTDsNCj4+ID4+ICsJcnRlX3Bt dS5udW1fZ3JvdXBfZXZlbnRzID0gMDsNCj4+ID4+ICt9DQo+PiA+PiBkaWZmIC0tZ2l0IGEvbGli L3BtdS9ydGVfcG11LmggYi9saWIvcG11L3J0ZV9wbXUuaCBuZXcgZmlsZSBtb2RlDQo+PiA+PiAx MDA2NDQgaW5kZXggMDAwMDAwMDAwMC4uNmI2NjRjMzMzNg0KPj4gPj4gLS0tIC9kZXYvbnVsbA0K Pj4gPj4gKysrIGIvbGliL3BtdS9ydGVfcG11LmgNCj4+ID4+IEBAIC0wLDAgKzEsMjEyIEBADQo+ PiA+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPj4gPj4gKyAq IENvcHlyaWdodChjKSAyMDIzIE1hcnZlbGwNCj4+ID4+ICsgKi8NCj4+ID4+ICsNCj4+ID4+ICsj aWZuZGVmIF9SVEVfUE1VX0hfDQo+PiA+PiArI2RlZmluZSBfUlRFX1BNVV9IXw0KPj4gPj4gKw0K Pj4gPj4gKy8qKg0KPj4gPj4gKyAqIEBmaWxlDQo+PiA+PiArICoNCj4+ID4+ICsgKiBQTVUgZXZl bnQgdHJhY2luZyBvcGVyYXRpb25zDQo+PiA+PiArICoNCj4+ID4+ICsgKiBUaGlzIGZpbGUgZGVm aW5lcyBnZW5lcmljIEFQSSBhbmQgdHlwZXMgbmVjZXNzYXJ5IHRvIHNldHVwIFBNVQ0KPj4gPj4g K2FuZA0KPj4gPj4gKyAqIHJlYWQgc2VsZWN0ZWQgY291bnRlcnMgaW4gcnVudGltZS4NCj4+ID4+ ICsgKi8NCj4+ID4+ICsNCj4+ID4+ICsjaWZkZWYgX19jcGx1c3BsdXMNCj4+ID4+ICtleHRlcm4g IkMiIHsNCj4+ID4+ICsjZW5kaWYNCj4+ID4+ICsNCj4+ID4+ICsjaW5jbHVkZSA8bGludXgvcGVy Zl9ldmVudC5oPg0KPj4gPj4gKw0KPj4gPj4gKyNpbmNsdWRlIDxydGVfYXRvbWljLmg+DQo+PiA+ PiArI2luY2x1ZGUgPHJ0ZV9icmFuY2hfcHJlZGljdGlvbi5oPiAjaW5jbHVkZSA8cnRlX2NvbW1v bi5oPg0KPj4gPj4gKyNpbmNsdWRlIDxydGVfY29tcGF0Lmg+ICNpbmNsdWRlIDxydGVfc3Bpbmxv Y2suaD4NCj4+ID4+ICsNCj4+ID4+ICsvKiogTWF4aW11bSBudW1iZXIgb2YgZXZlbnRzIGluIGEg Z3JvdXAgKi8gI2RlZmluZQ0KPj4gPj4gK01BWF9OVU1fR1JPVVBfRVZFTlRTIDgNCj4+ID4+ICsN Cj4+ID4+ICsvKioNCj4+ID4+ICsgKiBBIHN0cnVjdHVyZSBkZXNjcmliaW5nIGEgZ3JvdXAgb2Yg ZXZlbnRzLg0KPj4gPj4gKyAqLw0KPj4gPj4gK3N0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwIHsN Cj4+ID4+ICsJc3RydWN0IHBlcmZfZXZlbnRfbW1hcF9wYWdlICptbWFwX3BhZ2VzW01BWF9OVU1f R1JPVVBfRVZFTlRTXTsgLyoqPCBhcnJheSBvZiB1c2VyIHBhZ2VzDQo+Ki8NCj4+ID4+ICsJaW50 IGZkc1tNQVhfTlVNX0dST1VQX0VWRU5UU107IC8qKjwgYXJyYXkgb2YgZXZlbnQgZGVzY3JpcHRv cnMgKi8NCj4+ID4+ICsJYm9vbCBlbmFibGVkOyAvKio8IHRydWUgaWYgZ3JvdXAgd2FzIGVuYWJs ZWQgb24gcGFydGljdWxhciBsY29yZSAqLw0KPj4gPj4gKwlUQUlMUV9FTlRSWShydGVfcG11X2V2 ZW50X2dyb3VwKSBuZXh0OyAvKio8IGxpc3QgZW50cnkgKi8gfQ0KPj4gPj4gK19fcnRlX2NhY2hl X2FsaWduZWQ7DQo+PiA+PiArDQo+PiA+PiArLyoqDQo+PiA+PiArICogQSBzdHJ1Y3R1cmUgZGVz Y3JpYmluZyBhbiBldmVudC4NCj4+ID4+ICsgKi8NCj4+ID4+ICtzdHJ1Y3QgcnRlX3BtdV9ldmVu dCB7DQo+PiA+PiArCWNoYXIgKm5hbWU7IC8qKjwgbmFtZSBvZiBhbiBldmVudCAqLw0KPj4gPj4g Kwl1bnNpZ25lZCBpbnQgaW5kZXg7IC8qKjwgZXZlbnQgaW5kZXggaW50byBmZHMvbW1hcF9wYWdl cyAqLw0KPj4gPj4gKwlUQUlMUV9FTlRSWShydGVfcG11X2V2ZW50KSBuZXh0OyAvKio8IGxpc3Qg ZW50cnkgKi8gfTsNCj4+ID4+ICsNCj4+ID4+ICsvKioNCj4+ID4+ICsgKiBBIFBNVSBzdGF0ZSBj b250YWluZXIuDQo+PiA+PiArICovDQo+PiA+PiArc3RydWN0IHJ0ZV9wbXUgew0KPj4gPj4gKwlj aGFyICpuYW1lOyAvKio8IG5hbWUgb2YgY29yZSBQTVUgbGlzdGVkIHVuZGVyIC9zeXMvYnVzL2V2 ZW50X3NvdXJjZS9kZXZpY2VzICovDQo+PiA+PiArCXJ0ZV9zcGlubG9ja190IGxvY2s7IC8qKjwg c2VyaWFsaXplIGFjY2VzcyB0byBldmVudCBncm91cCBsaXN0ICovDQo+PiA+PiArCVRBSUxRX0hF QUQoLCBydGVfcG11X2V2ZW50X2dyb3VwKSBldmVudF9ncm91cF9saXN0OyAvKio8IGxpc3Qgb2Yg ZXZlbnQgZ3JvdXBzICovDQo+PiA+PiArCXVuc2lnbmVkIGludCBudW1fZ3JvdXBfZXZlbnRzOyAv Kio8IG51bWJlciBvZiBldmVudHMgaW4gYSBncm91cCAqLw0KPj4gPj4gKwlUQUlMUV9IRUFEKCwg cnRlX3BtdV9ldmVudCkgZXZlbnRfbGlzdDsgLyoqPCBsaXN0IG9mIG1hdGNoaW5nIGV2ZW50cyAq Lw0KPj4gPj4gKwl1bnNpZ25lZCBpbnQgaW5pdGlhbGl6ZWQ7IC8qKjwgaW5pdGlhbGl6YXRpb24g Y291bnRlciAqLyB9Ow0KPj4gPj4gKw0KPj4gPj4gKy8qKiBsY29yZSBldmVudCBncm91cCAqLw0K Pj4gPj4gK1JURV9ERUNMQVJFX1BFUl9MQ09SRShzdHJ1Y3QgcnRlX3BtdV9ldmVudF9ncm91cCwg X2V2ZW50X2dyb3VwKTsNCj4+ID4+ICsNCj4+ID4+ICsvKiogUE1VIHN0YXRlIGNvbnRhaW5lciAq Lw0KPj4gPj4gK2V4dGVybiBzdHJ1Y3QgcnRlX3BtdSBydGVfcG11Ow0KPj4gPj4gKw0KPj4gPj4g Ky8qKiBFYWNoIGFyY2hpdGVjdHVyZSBzdXBwb3J0aW5nIFBNVSBuZWVkcyB0byBwcm92aWRlIGl0 cyBvd24NCj4+ID4+ICt2ZXJzaW9uICovICNpZm5kZWYgcnRlX3BtdV9wbWNfcmVhZCAjZGVmaW5l DQo+PiA+PiArcnRlX3BtdV9wbWNfcmVhZChpbmRleCkgKHsgMDsgfSkgI2VuZGlmDQo+PiA+PiAr DQo+PiA+PiArLyoqDQo+PiA+PiArICogQHdhcm5pbmcNCj4+ID4+ICsgKiBAYiBFWFBFUklNRU5U QUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4+ID4+ICsgKg0K Pj4gPj4gKyAqIFJlYWQgUE1VIGNvdW50ZXIuDQo+PiA+PiArICoNCj4+ID4+ICsgKiBAd2Fybmlu ZyBUaGlzIHNob3VsZCBiZSBub3QgY2FsbGVkIGRpcmVjdGx5Lg0KPj4gPj4gKyAqDQo+PiA+PiAr ICogQHBhcmFtIHBjDQo+PiA+PiArICogICBQb2ludGVyIHRvIHRoZSBtbWFwcGVkIHVzZXIgcGFn ZS4NCj4+ID4+ICsgKiBAcmV0dXJuDQo+PiA+PiArICogICBDb3VudGVyIHZhbHVlIHJlYWQgZnJv bSBoYXJkd2FyZS4NCj4+ID4+ICsgKi8NCj4+ID4+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGlu ZSB1aW50NjRfdCBfX3J0ZV9wbXVfcmVhZF91c2VycGFnZShzdHJ1Y3QNCj4+ID4+ICtwZXJmX2V2 ZW50X21tYXBfcGFnZSAqcGMpIHsNCj4+ID4+ICsJdWludDY0X3Qgd2lkdGgsIG9mZnNldDsNCj4+ ID4+ICsJdWludDMyX3Qgc2VxLCBpbmRleDsNCj4+ID4+ICsJaW50NjRfdCBwbWM7DQo+PiA+PiAr DQo+PiA+PiArCWZvciAoOzspIHsNCj4+ID4+ICsJCXNlcSA9IHBjLT5sb2NrOw0KPj4gPj4gKwkJ cnRlX2NvbXBpbGVyX2JhcnJpZXIoKTsNCj4+ID4NCj4+ID5BcmUgeW91IHN1cmUgdGhhdCBjb21w aWxlcl9iYXJyaWVyKCkgaXMgZW5vdWdoIGhlcmU/DQo+PiA+T24gc29tZSBhcmNocyBDUFUgaXRz ZWxmIGhhcyBmcmVlZG9tIHRvIHJlLW9yZGVyIHJlYWRzLg0KPj4gPk9yIEkgYW0gbWlzc2luZyBz b21ldGhpbmcgb2J2aW91cyBoZXJlPw0KPj4gPg0KPj4NCj4+IEl0J3MgYSBtYXR0ZXIgb2Ygbm90 IGtlZXBpbmcgb2xkIHN0dWZmIGNhY2hlZCBpbiByZWdpc3RlcnMgYW5kIG1ha2luZw0KPj4gc3Vy ZSB0aGF0IHdlIGhhdmUgdHdvIHJlYWRzIG9mIGxvY2suIENQVSByZW9yZGVyaW5nIHdvbid0IGRv IGFueSBoYXJtDQo+PiBoZXJlLg0KPg0KPlNvcnJ5LCBJIGRpZG4ndCBnZXQgeW91IGhlcmU6DQo+ U3VwcG9zZSBDUFUgd2lsbCByZS1vcmRlciByZWFkcyBhbmQgd2lsbCByZWFkIGxvY2sgKmFmdGVy KiBpbmRleCBvciBvZmZzZXQgdmFsdWUuDQo+V291bGRuJ3QgaXQgbWVhbiB0aGF0IGluIHRoYXQg Y2FzZSBpbmRleCBhbmQvb3Igb2Zmc2V0IGNhbiBjb250YWluIG9sZC9pbnZhbGlkIHZhbHVlcz8N Cj4NCg0KVGhpcyBudW1iZXIgaXMganVzdCBhbiBpbmRpY2F0b3Igd2hldGhlciBrZXJuZWwgZGlk IGNoYW5nZSBzb21ldGhpbmcgb3Igbm90Lg0KSWYgY3B1IHJlb3JkZXJpbmcgd2lsbCBjb21lIGlu dG8gcGxheSB0aGVuIHRoaXMgd2lsbCBub3QgY2hhbmdlIGFueXRoaW5nIGZyb20gcG92IG9mIHRo aXMgbG9vcC4gDQpBbGwgd2Ugd2FudCBpcyBmcmVzaCBkYXRhIHdoZW4gbmVlZGVkIGFuZCBubyBp bnZvbHZlbWVudCBvZiBjb21waWxlciB3aGVuIGl0IGNvbWVzIHRvIHJlb3JkZXJpbmcNCmNvZGUu IA0KDQo+Pg0KPj4gPj4gKwkJaW5kZXggPSBwYy0+aW5kZXg7DQo+PiA+PiArCQlvZmZzZXQgPSBw Yy0+b2Zmc2V0Ow0KPj4gPj4gKwkJd2lkdGggPSBwYy0+cG1jX3dpZHRoOw0KPj4gPj4gKw0KPj4g Pj4gKwkJLyogaW5kZXggc2V0IHRvIDAgbWVhbnMgdGhhdCBwYXJ0aWN1bGFyIGNvdW50ZXIgY2Fu bm90IGJlIHVzZWQgKi8NCj4+ID4+ICsJCWlmIChsaWtlbHkocGMtPmNhcF91c2VyX3JkcG1jICYm IGluZGV4KSkgew0KPj4gPj4gKwkJCXBtYyA9IHJ0ZV9wbXVfcG1jX3JlYWQoaW5kZXggLSAxKTsN Cj4+ID4+ICsJCQlwbWMgPDw9IDY0IC0gd2lkdGg7DQo+PiA+PiArCQkJcG1jID4+PSA2NCAtIHdp ZHRoOw0KPj4gPj4gKwkJCW9mZnNldCArPSBwbWM7DQo+PiA+PiArCQl9DQo+PiA+PiArDQo+PiA+ PiArCQlydGVfY29tcGlsZXJfYmFycmllcigpOw0KPj4gPj4gKw0KPj4gPj4gKwkJaWYgKGxpa2Vs eShwYy0+bG9jayA9PSBzZXEpKQ0KPj4gPj4gKwkJCXJldHVybiBvZmZzZXQ7DQo+PiA+PiArCX0N Cj4+ID4+ICsNCj4+ID4+ICsJcmV0dXJuIDA7DQo+PiA+PiArfQ0KPj4gPj4gKw0KPj4gPj4gKy8q Kg0KPj4gPj4gKyAqIEB3YXJuaW5nDQo+PiA+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQ SSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+PiA+PiArICoNCj4+ID4+ICsgKiBF bmFibGUgZ3JvdXAgb2YgZXZlbnRzIG9uIHRoZSBjYWxsaW5nIGxjb3JlLg0KPj4gPj4gKyAqDQo+ PiA+PiArICogQHdhcm5pbmcgVGhpcyBzaG91bGQgYmUgbm90IGNhbGxlZCBkaXJlY3RseS4NCj4+ ID4+ICsgKg0KPj4gPj4gKyAqIEByZXR1cm4NCj4+ID4+ICsgKiAgIDAgaW4gY2FzZSBvZiBzdWNj ZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuDQo+PiA+PiArICovDQo+PiA+PiArX19ydGVf ZXhwZXJpbWVudGFsDQo+PiA+PiAraW50DQo+PiA+PiArX19ydGVfcG11X2VuYWJsZV9ncm91cCh2 b2lkKTsNCj4+ID4+ICsNCj4+ID4+ICsvKioNCj4+ID4+ICsgKiBAd2FybmluZw0KPj4gPj4gKyAq IEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGlj ZQ0KPj4gPj4gKyAqDQo+PiA+PiArICogSW5pdGlhbGl6ZSBQTVUgbGlicmFyeS4NCj4+ID4+ICsg Kg0KPj4gPj4gKyAqIEB3YXJuaW5nIFRoaXMgc2hvdWxkIGJlIG5vdCBjYWxsZWQgZGlyZWN0bHku DQo+PiA+PiArICoNCj4+ID4+ICsgKiBAcmV0dXJuDQo+PiA+PiArICogICAwIGluIGNhc2Ugb2Yg c3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLg0KPj4gPj4gKyAqLw0KPj4gPj4gK19f cnRlX2V4cGVyaW1lbnRhbA0KPj4gPj4gK2ludA0KPj4gPj4gK3J0ZV9wbXVfaW5pdCh2b2lkKTsN Cj4+ID4+ICsNCj4+ID4+ICsvKioNCj4+ID4+ICsgKiBAd2FybmluZw0KPj4gPj4gKyAqIEBiIEVY UEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPj4g Pj4gKyAqDQo+PiA+PiArICogRmluYWxpemUgUE1VIGxpYnJhcnkuIFRoaXMgc2hvdWxkIGJlIGNh bGxlZCBhZnRlciBQTVUgY291bnRlcnMgYXJlIG5vIGxvbmdlciBiZWluZyByZWFkLg0KPj4gPj4g KyAqLw0KPj4gPj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPj4gPj4gK3ZvaWQNCj4+ID4+ICtydGVf cG11X2Zpbmkodm9pZCk7DQo+PiA+PiArDQo+PiA+PiArLyoqDQo+PiA+PiArICogQHdhcm5pbmcN Cj4+ID4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBw cmlvciBub3RpY2UNCj4+ID4+ICsgKg0KPj4gPj4gKyAqIEFkZCBldmVudCB0byB0aGUgZ3JvdXAg b2YgZW5hYmxlZCBldmVudHMuDQo+PiA+PiArICoNCj4+ID4+ICsgKiBAcGFyYW0gbmFtZQ0KPj4g Pj4gKyAqICAgTmFtZSBvZiBhbiBldmVudCBsaXN0ZWQgdW5kZXIgL3N5cy9idXMvZXZlbnRfc291 cmNlL2RldmljZXMvcG11L2V2ZW50cy4NCj4+ID4+ICsgKiBAcmV0dXJuDQo+PiA+PiArICogICBF dmVudCBpbmRleCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4N Cj4+ID4+ICsgKi8NCj4+ID4+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4+ID4+ICtpbnQNCj4+ID4+ ICtydGVfcG11X2FkZF9ldmVudChjb25zdCBjaGFyICpuYW1lKTsNCj4+ID4+ICsNCj4+ID4+ICsv KioNCj4+ID4+ICsgKiBAd2FybmluZw0KPj4gPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBB UEkgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPj4gPj4gKyAqDQo+PiA+PiArICog UmVhZCBoYXJkd2FyZSBjb3VudGVyIGNvbmZpZ3VyZWQgdG8gY291bnQgb2NjdXJyZW5jZXMgb2Yg YW4gZXZlbnQuDQo+PiA+PiArICoNCj4+ID4+ICsgKiBAcGFyYW0gaW5kZXgNCj4+ID4+ICsgKiAg IEluZGV4IG9mIGFuIGV2ZW50IHRvIGJlIHJlYWQuDQo+PiA+PiArICogQHJldHVybg0KPj4gPj4g KyAqICAgRXZlbnQgdmFsdWUgcmVhZCBmcm9tIHJlZ2lzdGVyLiBJbiBjYXNlIG9mIGVycm9ycyBv ciBsYWNrIG9mIHN1cHBvcnQNCj4+ID4+ICsgKiAgIDAgaXMgcmV0dXJuZWQuIEluIG90aGVyIHdv cmRzLCBzdHJlYW0gb2YgemVyb3MgaW4gYSB0cmFjZSBmaWxlDQo+PiA+PiArICogICBpbmRpY2F0 ZXMgcHJvYmxlbSB3aXRoIHJlYWRpbmcgcGFydGljdWxhciBQTVUgZXZlbnQgcmVnaXN0ZXIuDQo+ PiA+PiArICovDQo+PiA+PiArX19ydGVfZXhwZXJpbWVudGFsDQo+PiA+PiArc3RhdGljIF9fcnRl X2Fsd2F5c19pbmxpbmUgdWludDY0X3QgcnRlX3BtdV9yZWFkKHVuc2lnbmVkIGludA0KPj4gPj4g K2luZGV4KSB7DQo+PiA+PiArCXN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwICpncm91cCA9ICZS VEVfUEVSX0xDT1JFKF9ldmVudF9ncm91cCk7DQo+PiA+PiArCWludCByZXQ7DQo+PiA+PiArDQo+ PiA+PiArCWlmICh1bmxpa2VseSghcnRlX3BtdS5pbml0aWFsaXplZCkpDQo+PiA+PiArCQlyZXR1 cm4gMDsNCj4+ID4+ICsNCj4+ID4+ICsJaWYgKHVubGlrZWx5KCFncm91cC0+ZW5hYmxlZCkpIHsN Cj4+ID4+ICsJCXJldCA9IF9fcnRlX3BtdV9lbmFibGVfZ3JvdXAoKTsNCj4+ID4+ICsJCWlmIChy ZXQpDQo+PiA+PiArCQkJcmV0dXJuIDA7DQo+PiA+PiArCX0NCj4+ID4+ICsNCj4+ID4+ICsJaWYg KHVubGlrZWx5KGluZGV4ID49IHJ0ZV9wbXUubnVtX2dyb3VwX2V2ZW50cykpDQo+PiA+PiArCQly ZXR1cm4gMDsNCj4+ID4+ICsNCj4+ID4+ICsJcmV0dXJuIF9fcnRlX3BtdV9yZWFkX3VzZXJwYWdl KGdyb3VwLT5tbWFwX3BhZ2VzW2luZGV4XSk7DQo+PiA+PiArfQ0KPj4gPj4gKw0KPj4gPj4gKyNp ZmRlZiBfX2NwbHVzcGx1cw0KPj4gPj4gK30NCj4+ID4+ICsjZW5kaWYNCj4+ID4+ICsNCj4+ID4+ ICsjZW5kaWYgLyogX1JURV9QTVVfSF8gKi8NCj4+ID4+IGRpZmYgLS1naXQgYS9saWIvcG11L3Zl cnNpb24ubWFwIGIvbGliL3BtdS92ZXJzaW9uLm1hcCBuZXcgZmlsZQ0KPj4gPj4gbW9kZQ0KPj4g Pj4gMTAwNjQ0IGluZGV4IDAwMDAwMDAwMDAuLjM5YTRmMjc5YzENCj4+ID4+IC0tLSAvZGV2L251 bGwNCj4+ID4+ICsrKyBiL2xpYi9wbXUvdmVyc2lvbi5tYXANCj4+ID4+IEBAIC0wLDAgKzEsMTUg QEANCj4+ID4+ICtEUERLXzIzIHsNCj4+ID4+ICsJbG9jYWw6ICo7DQo+PiA+PiArfTsNCj4+ID4+ ICsNCj4+ID4+ICtFWFBFUklNRU5UQUwgew0KPj4gPj4gKwlnbG9iYWw6DQo+PiA+PiArDQo+PiA+ PiArCV9fcnRlX3BtdV9lbmFibGVfZ3JvdXA7DQo+PiA+PiArCXBlcl9sY29yZV9fZXZlbnRfZ3Jv dXA7DQo+PiA+PiArCXJ0ZV9wbXU7DQo+PiA+PiArCXJ0ZV9wbXVfYWRkX2V2ZW50Ow0KPj4gPj4g KwlydGVfcG11X2Zpbmk7DQo+PiA+PiArCXJ0ZV9wbXVfaW5pdDsNCj4+ID4+ICsJcnRlX3BtdV9y ZWFkOw0KPj4gPj4gK307DQoNCg==