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 E9100A00C2; Wed, 2 Nov 2022 16:31:12 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9EA9440223; Wed, 2 Nov 2022 16:31:12 +0100 (CET) Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2054.outbound.protection.outlook.com [40.107.93.54]) by mails.dpdk.org (Postfix) with ESMTP id 56CE840041 for ; Wed, 2 Nov 2022 16:31:11 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=akSTpm/pGe6H6jR2Ynn91TsvqKTW3fcSUVK/caqeSYIa3sLrUanduWwg0iISRlzCHEoX/qi1ZJKCm59rvksjOseRf+Qz0Xyu7AdZhAAhXYW5ujsqmSSSoU238fqAbqd4aBeeewKUad/ivCkaPrJKNXW8MB/aCkXWZW2P2B86kMtV0K+nwWz/5ZS99gsrKqjVRx0GtD7dBofZlV0wKn6Ozrxk+0Z8RjiVrzVRNKq6Ly+d+N+XsN8sQY6qfHO1dmfOIPsDZ64i6EkCUUEI5bK8ToRwlIxji5LG8NyYHTCvf1kCCsM/wd5axLJ7Xn1o9oiT4SXU6WQh+Qn1BDN66kiFog== 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=yJ/tzW6iEEzrQ0oiA1cXVv+bSTrEMLdM3QPDGlSKyTM=; b=XLIoCHZY9SWL5Kz4uviZ6Y2pYBaQNhsyNsK+nTFlgFW0PmJUNYL6Fl1S6Khy4fL9aKI942hrK+sbQvlpyhss14SNQV0myhNYD4d5n9xN+wkNb94s9KHcno1WyGeiiTOVGXkhA3V1lIDqZi2Ru9MKuIlliAfeNGq4kjWUVh/tXrwFQ0oEcqw0z7gsRFeln1m/i1H3ophjZbdaUTeOOWwR0uZsvX0iOn9dV8owI/jWz7WdC4qtqn76573G2ucI25xYv42CUrGLkLt4YjStLKodukZsP9DnAivx6/dqjxa+jpruvqje5Aj+17anapYNwsCN2ANFd8pMC/b7wXb9AltjBw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=yJ/tzW6iEEzrQ0oiA1cXVv+bSTrEMLdM3QPDGlSKyTM=; b=bR4BCQxFs1Zr3oHuInmB1RIvUJNUCYDhazQSa0XUayA854pPFwc6yTy/RyWQHPhgT2zqDfmMp/GIkPcXfvZprXdjWxrVMe0P4Qlk2QLgta83eSbvFYHZTiQtmHNzU3BdhAmVr2P3u/+RLa3/FuUEXMwwfd0g//7UsxguPIYEk8bl1KmV0fNNyPVS+/Dn5J36TowAIqBbpdaJZDL9mhVAhQTf8X+H5XMRjSAAPnYXcWM06Av9Ai6Riu0dVEf9WggKdgHri3fcsPJVzzp5I/Lz3/GPjb2wYXMxqhI/oyjwXbHBqqA07kszUNipi/98YmyJWzEQdjr3++LkuaUn5Fv7aQ== Received: from BYAPR12MB3078.namprd12.prod.outlook.com (2603:10b6:a03:a8::31) by IA1PR12MB6091.namprd12.prod.outlook.com (2603:10b6:208:3ed::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5791.20; Wed, 2 Nov 2022 15:31:08 +0000 Received: from BYAPR12MB3078.namprd12.prod.outlook.com ([fe80::ce0d:fc5b:76bf:6a1a]) by BYAPR12MB3078.namprd12.prod.outlook.com ([fe80::ce0d:fc5b:76bf:6a1a%7]) with mapi id 15.20.5769.021; Wed, 2 Nov 2022 15:31:08 +0000 From: Raslan Darawsheh To: Junfeng Guo , "qi.z.zhang@intel.com" , "jingjing.wu@intel.com" , "beilei.xing@intel.com" CC: "dev@dpdk.org" , Xiaoyun Li , Xiao Wang , "NBU-Contact-Thomas Monjalon (EXTERNAL)" Subject: RE: [PATCH 03/13] net/idpf: support device initialization Thread-Topic: [PATCH 03/13] net/idpf: support device initialization Thread-Index: AQHYpyyhA72kv4L29EGHaDQu8Qc1Ma4sSxcw Date: Wed, 2 Nov 2022 15:31:08 +0000 Message-ID: References: <20220803113104.1184059-1-junfeng.guo@intel.com> <20220803113104.1184059-4-junfeng.guo@intel.com> In-Reply-To: <20220803113104.1184059-4-junfeng.guo@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BYAPR12MB3078:EE_|IA1PR12MB6091:EE_ x-ms-office365-filtering-correlation-id: e7eb7f53-606f-456b-b8bc-08dabce74393 x-ld-processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: HkTZ+vVfkyr628UIrcESbSY+eAYlChV3aCGhRLIGC5KtamIibgG9wepwm2aY75b2TBA6uQirnxWzOZZsPjxg6BSwVfxt4u+sUXLmt5nx26tCzx+J2nXX59+tphBkfgyqz6qDQVTsb7iUoAKkIwnFIT8VNiDwxHHgv80e1yUmjKKuSuitQ6v70nGkIi9WRGYWbs0RksXsF2/PS6D/ao4V+jLfBvFf4FxPa38d1o/IpO7KJKLzQA0iSh9kUf68D3DJivIpWuA5IVYNmtyg6oUy0tiTwShKubFchZNoPwihxWhg38BnRitkN/3W7JnbWBnauw9xbpFS7T31tgj6rCdWrOtdv5e7307T8PTUvhy2ODv6eWc1jTWiq1LNTdBSBeKHuWd+RyRCjSLeaEmyEkZbPOfcOyIQmpilXP2TgtT51KeiIofelPYrAxB0mYZflvT9EhTRnDas2EEIfDkaYBvLsqBsmYcUkbV+/3fc/4w5/UnK15WQBj4m2TIyX+s5es8o6zPrudOhZ+YPesFWXz/QQgQjcL+QQEZSzpKhZkQ2qgGzCeGnKI6f1o6aAJksrm/Vkay5lLwyughfaqPamr8pRYsgEywbpbz//D7F3eyypZV9MkrXVt59/eXm2PDl3vhnCmrSCy/zux2mcHnXJnG3Euqm7NDLdwBD/z9M2MM+jCKDvgDSBZXINmlhB9D+xwv+2zRbqNzheAAYxjn0GQcLb6nAYvKdEhh7F0hvNdn4anXgTeVk36IaiNNWajKG5RiWHwLsC0eTajOpDTnVUd6Rcw== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR12MB3078.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(346002)(396003)(39860400002)(376002)(366004)(136003)(451199015)(2906002)(38100700002)(30864003)(8676002)(33656002)(5660300002)(8936002)(66946007)(76116006)(4326008)(66446008)(66476007)(64756008)(66556008)(122000001)(54906003)(71200400001)(55016003)(52536014)(41300700001)(110136005)(6506007)(83380400001)(86362001)(38070700005)(7696005)(26005)(186003)(478600001)(53546011)(316002)(9686003)(559001)(579004); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?V0VNNkdMdWRBMmpCaTE0Rk5nZzN5bENZWGNEL2FUZW5sNHdpV0R1RWUxV3Ru?= =?utf-8?B?Zm5xR2N2NDc3bitab1M4QklFQ2VKOHpoWFdwQ1B4a2FmRmk3aHpRcXorNWdF?= =?utf-8?B?OWExc25QNFE3Q3ZiWXJvNGsvdUxLd3JaVWJaUlZXNVBCMWFReGdwaG5sTUZ1?= =?utf-8?B?NlI2Y1JLRVE2Um1FUytRbFpvMHlPUkxTVzFIazFYcWR1eFpPUUhxb0Q2UE5H?= =?utf-8?B?Zk9sVE9SQnRhb0tBQUpvMnR1enJ6OEVka25pWDhYOGVHVGZhWGVwSWN1TEhV?= =?utf-8?B?YzQyaWlLb25WVlFQMWhZQzBaa0tFT3JXb1UrS0Uya0d6UkxPdXo3djJObkEr?= =?utf-8?B?QjhodktUMTdYK0hudSs5Y3RrczVvN3IvK3pMekVVTSt6MEF4S1pJa2pIUXpP?= =?utf-8?B?WGVqblhiS0kxT3RUclM4ZXhPb3QrcCs3NnF6M3V0bHNVU2wwT244aWRBRVhJ?= =?utf-8?B?ODFDYU5ZeXpTanNNTDV3WGc5QlNLT2xVWWc4czFGQVc1MDNBQTg4YVc0N2Zx?= =?utf-8?B?bUVJQVBna0dBT3BWc1B2QWJENVJDeFVsUzRtS3libWlZNGxUMGptdHozUTgy?= =?utf-8?B?U1lrSjVwb2dhUDN6MWFsNENYMk1OODV1WmZzMjk2djZJcXpJQ2czU0E4bVpC?= =?utf-8?B?S1dvdG1BdXhML2lCOUM2TnpmYVQzVEp5NG53b0dKMEszNVBYOXBENm5aNTYz?= =?utf-8?B?Y2t0bHNuUjdFYjlxOExSSzRHZW03WlRnaU84RDFpUjRKVEs4OGtUUGRFMDlV?= =?utf-8?B?cFhraDdITTlKQWJ5aUhOd1cvMnYvQVkxWURvTE00NHlrWkZ5cW9FaGRDT1Zq?= =?utf-8?B?bzRybnFvaHkyUHFhVUZGZzl6R21LSnZoS0dhZ25NVXRqYllXVndaWEp5dDhP?= =?utf-8?B?RllNQytIS2ZaZlQydTR6aUtzY2d6bTczZHNJVld2MnJNdkxPN2NLRHUxUUxj?= =?utf-8?B?TURxOWRFb1g3MHloNnIrRkFNNHZHeHJlT1I2dS9GeWRTR2J0ZmJmdEVDL296?= =?utf-8?B?L0hmbTVlMzE4ZG10eHhsanAzSzVyclgrK21kWmkrOWl0UkxaVENlbkpQUG9Q?= =?utf-8?B?QjVnWTQyeGpTRThOUkFBZk9rRlk0ZWQrZUdXTngvQlNycDQ3UlRVcVZXd21j?= =?utf-8?B?anJHY3JRRThhRjBBRUppT1dMbUk4RXRURWtOcWlzSGM0WWU0RGdFTlVEY3Vp?= =?utf-8?B?QkFhZllRU3BhVlJHWlRPZERmQlZEenVKTEY2TVFJRWtDMmZ5MXVsZjFraVVG?= =?utf-8?B?bmEvZXJFbTYxb3RIMmNabGtNeUxzWmJUZkpGTXBLTHQ5TWxTVUVDTUlqdzk3?= =?utf-8?B?anI4eTc4aDlSWTVESStDeXFFdWFnS2lLWGFpTDNPakZ0cU1MT1N0UjRSanFs?= =?utf-8?B?VTJ1UHhUTXhmSDRQemZpcEhVWGtybmZlZ3J5aXRvQnRKbktLSHV5dWg0Vmor?= =?utf-8?B?M0tNS1Ywd1U1KzB4Q0QwYW1vV0JMVUZYcEQ1OHFHbmRmT2s3MmVpdUE2WFdT?= =?utf-8?B?WjVNblRDMTFqZzI4WkNNMmw0eVBoRTdiNjlPSGxoVnN2UmcvanRwbzdMNDRD?= =?utf-8?B?elU4QmxPbE1yVTgyZ3FmWGhHTGtPOFpvVmpUb1l5bHlvRlhnb2U3ajNScUtk?= =?utf-8?B?V0J6bGJHSkpTNmZpMmsxclNPdGxzZGM2SUh3MC9RWFB0OThsSEQ3NHlJMXNS?= =?utf-8?B?ak5hbUhZZVZLekczS0lrTW5JWEZRUGYvTWZDd0NXT1l5dnBFOXRsQUxrMTBm?= =?utf-8?B?Zy9tNTJTOFlJam0zNmp3M0hGTkh3MzNtR2Yzb3V1RGluaG9ET3FGVzdCTDUy?= =?utf-8?B?RDE1QkYvc3hWWUtrMlp5QWVkOWtuaW5LUVJKaGRwMmwyTFJIWUM0a0Qxc1R3?= =?utf-8?B?a0syaUpTRW5XVjRBVDJhbmRTTGpub2EvOWxwalJDcFNSejdoQlNJSWpGNFZY?= =?utf-8?B?YjU1aitldldsNXd5QmcyMHhiaVBCcS9idk5FT3B3eXpweEkrcURiVHA2bi81?= =?utf-8?B?ajBoMDErTHU1aUxrWmdrQm13Mm41YzFWNUFadFRCVnZYUjVXSG9IeU1aYkcx?= =?utf-8?B?VXhOelBuUEp0VlJLODBwTWJhNkdiOGUrVkpWNTl3Q1h4NXdUdmpXeUlvdmlF?= =?utf-8?Q?ZaMc=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BYAPR12MB3078.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e7eb7f53-606f-456b-b8bc-08dabce74393 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Nov 2022 15:31:08.3099 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: KJFO4Lpo7jG+ogOm7VK1awhQhDVuAnAgkYi9neF7OTcFSe635VFpCQfKiY8OdLJ+hD8FsYjLzOMs3yWWpARhGA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6091 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 SGksDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSnVuZmVuZyBHdW8g PGp1bmZlbmcuZ3VvQGludGVsLmNvbT4NCj4gU2VudDogV2VkbmVzZGF5LCBBdWd1c3QgMywgMjAy MiAyOjMxIFBNDQo+IFRvOiBxaS56LnpoYW5nQGludGVsLmNvbTsgamluZ2ppbmcud3VAaW50ZWwu Y29tOyBiZWlsZWkueGluZ0BpbnRlbC5jb20NCj4gQ2M6IGRldkBkcGRrLm9yZzsganVuZmVuZy5n dW9AaW50ZWwuY29tOyBYaWFveXVuIExpDQo+IDx4aWFveXVuLmxpQGludGVsLmNvbT47IFhpYW8g V2FuZyA8eGlhby53LndhbmdAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBbUEFUQ0ggMDMvMTNdIG5l dC9pZHBmOiBzdXBwb3J0IGRldmljZSBpbml0aWFsaXphdGlvbg0KPiANCj4gU3VwcG9ydCBkZXZp Y2UgaW5pdCBhbmQgdGhlIGZvbGxvd2luZyBkZXYgb3BzOg0KPiAJLSBkZXZfY29uZmlndXJlDQo+ IAktIGRldl9zdGFydA0KPiAJLSBkZXZfc3RvcA0KPiAJLSBkZXZfY2xvc2UNCj4gDQo+IFNpZ25l ZC1vZmYtYnk6IEJlaWxlaSBYaW5nIDxiZWlsZWkueGluZ0BpbnRlbC5jb20+DQo+IFNpZ25lZC1v ZmYtYnk6IFhpYW95dW4gTGkgPHhpYW95dW4ubGlAaW50ZWwuY29tPg0KPiBTaWduZWQtb2ZmLWJ5 OiBYaWFvIFdhbmcgPHhpYW8udy53YW5nQGludGVsLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogSnVu ZmVuZyBHdW8gPGp1bmZlbmcuZ3VvQGludGVsLmNvbT4NCj4gLS0tDQo+ICBkcml2ZXJzL25ldC9p ZHBmL2lkcGZfZXRoZGV2LmMgfCA2NTENCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrICBkcml2ZXJzL25ldC9pZHBmL2lkcGZfZXRoZGV2LmgNCj4gfCAyMDUgKysrKysrKysrKysg IGRyaXZlcnMvbmV0L2lkcGYvaWRwZl92Y2hubC5jICB8IDQ3Ng0KPiArKysrKysrKysrKysrKysr KysrKysrKysNCj4gIGRyaXZlcnMvbmV0L2lkcGYvbWVzb24uYnVpbGQgICB8ICAxOCArDQo+ICBk cml2ZXJzL25ldC9pZHBmL3ZlcnNpb24ubWFwICAgfCAgIDMgKw0KPiAgZHJpdmVycy9uZXQvbWVz b24uYnVpbGQgICAgICAgIHwgICAxICsNCj4gIDYgZmlsZXMgY2hhbmdlZCwgMTM1NCBpbnNlcnRp b25zKCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvaWRwZi9pZHBmX2V0aGRl di5jICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gZHJpdmVycy9uZXQvaWRwZi9pZHBmX2V0aGRldi5o ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gZHJpdmVycy9uZXQvaWRwZi9pZHBmX3ZjaG5sLmMgIGNy ZWF0ZSBtb2RlIDEwMDY0NA0KPiBkcml2ZXJzL25ldC9pZHBmL21lc29uLmJ1aWxkICBjcmVhdGUg bW9kZSAxMDA2NDQNCj4gZHJpdmVycy9uZXQvaWRwZi92ZXJzaW9uLm1hcA0KPiANCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvbmV0L2lkcGYvaWRwZl9ldGhkZXYuYyBiL2RyaXZlcnMvbmV0L2lkcGYv aWRwZl9ldGhkZXYuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleCAwMDAwMDAwMDAwLi44 N2M2ODIyNmRkDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9uZXQvaWRwZi9pZHBm X2V0aGRldi5jDQo+IEBAIC0wLDAgKzEsNjUxIEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmlnaHQoYykgMjAyMiBJbnRlbCBDb3Jwb3Jh dGlvbg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxydGVfYXRvbWljLmg+DQo+ICsjaW5jbHVk ZSA8cnRlX2VhbC5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9ldGhlci5oPg0KPiArI2luY2x1ZGUgPGV0 aGRldl9kcml2ZXIuaD4NCj4gKyNpbmNsdWRlIDxldGhkZXZfcGNpLmg+DQo+ICsjaW5jbHVkZSA8 cnRlX21hbGxvYy5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9tZW16b25lLmg+DQo+ICsjaW5jbHVkZSA8 cnRlX2Rldi5oPg0KPiArDQo+ICsjaW5jbHVkZSAiaWRwZl9ldGhkZXYuaCINCj4gKw0KPiArI2Rl ZmluZSBSRVBSRVNFTlRPUgkJInJlcHJlc2VudG9yIg0KPiArDQo+ICtzdHJ1Y3QgaWRwZl9hZGFw dGVyICphZGFwdGVyOw0KPiArdWludDE2X3QgdXNlZF92ZWNzX251bTsNCj4gKw0KPiArc3RhdGlj IGNvbnN0IGNoYXIgKiBjb25zdCBpZHBmX3ZhbGlkX2FyZ3NbXSA9IHsNCj4gKwlSRVBSRVNFTlRP UiwNCj4gKwlOVUxMDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW50IGlkcGZfZGV2X2NvbmZpZ3Vy ZShzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldik7IHN0YXRpYyBpbnQNCj4gK2lkcGZfZGV2X3N0YXJ0 KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2KTsgc3RhdGljIGludA0KPiAraWRwZl9kZXZfc3RvcChz dHJ1Y3QgcnRlX2V0aF9kZXYgKmRldik7IHN0YXRpYyBpbnQNCj4gK2lkcGZfZGV2X2Nsb3NlKHN0 cnVjdCBydGVfZXRoX2RldiAqZGV2KTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBldGhf ZGV2X29wcyBpZHBmX2V0aF9kZXZfb3BzID0gew0KPiArCS5kZXZfY29uZmlndXJlCQkJPSBpZHBm X2Rldl9jb25maWd1cmUsDQo+ICsJLmRldl9zdGFydAkJCT0gaWRwZl9kZXZfc3RhcnQsDQo+ICsJ LmRldl9zdG9wCQkJPSBpZHBmX2Rldl9zdG9wLA0KPiArCS5kZXZfY2xvc2UJCQk9IGlkcGZfZGV2 X2Nsb3NlLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGludA0KPiAraWRwZl9pbml0X3Zwb3J0X3Jl cV9pbmZvKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2KSB7DQo+ICsJc3RydWN0IHZpcnRjaG5sMl9j cmVhdGVfdnBvcnQgKnZwb3J0X2luZm87DQo+ICsJdWludDE2X3QgaWR4ID0gYWRhcHRlci0+bmV4 dF92cG9ydF9pZHg7DQo+ICsNCj4gKwlpZiAoIWFkYXB0ZXItPnZwb3J0X3JlcV9pbmZvW2lkeF0p IHsNCj4gKwkJYWRhcHRlci0+dnBvcnRfcmVxX2luZm9baWR4XSA9IHJ0ZV96bWFsbG9jKE5VTEws DQo+ICsJCQkJICAgIHNpemVvZihzdHJ1Y3QgdmlydGNobmwyX2NyZWF0ZV92cG9ydCksIDApOw0K PiArCQlpZiAoIWFkYXB0ZXItPnZwb3J0X3JlcV9pbmZvW2lkeF0pIHsNCj4gKwkJCVBNRF9JTklU X0xPRyhFUlIsICJGYWlsZWQgdG8gYWxsb2NhdGUNCj4gdnBvcnRfcmVxX2luZm8iKTsNCj4gKwkJ CXJldHVybiAtMTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCXZwb3J0X2luZm8gPQ0KPiArCQko c3RydWN0IHZpcnRjaG5sMl9jcmVhdGVfdnBvcnQgKilhZGFwdGVyLQ0KPiA+dnBvcnRfcmVxX2lu Zm9baWR4XTsNCj4gKw0KPiArCXZwb3J0X2luZm8tPnZwb3J0X3R5cGUgPQ0KPiArcnRlX2NwdV90 b19sZV8xNihWSVJUQ0hOTDJfVlBPUlRfVFlQRV9ERUZBVUxUKTsNCj4gKw0KPiArCXJldHVybiAw Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdWludDE2X3QNCj4gK2lkcGZfZ2V0X25leHRfdnBvcnRf aWR4KHN0cnVjdCBpZHBmX3Zwb3J0ICoqdnBvcnRzLCB1aW50MTZfdA0KPiBtYXhfdnBvcnRfbmIs DQo+ICsJCQl1aW50MTZfdCBjdXJfdnBvcnRfaWR4KQ0KPiArew0KPiArCXVpbnQxNl90IHZwb3J0 X2lkeDsNCj4gKwl1aW50MTZfdCBpOw0KPiArDQo+ICsJaWYgKGN1cl92cG9ydF9pZHggPCBtYXhf dnBvcnRfbmIgJiYgIXZwb3J0c1tjdXJfdnBvcnRfaWR4ICsgMV0pIHsNCj4gKwkJdnBvcnRfaWR4 ID0gY3VyX3Zwb3J0X2lkeCArIDE7DQo+ICsJCXJldHVybiB2cG9ydF9pZHg7DQo+ICsJfQ0KPiAr DQo+ICsJZm9yIChpID0gMDsgaSA8IG1heF92cG9ydF9uYjsgaSsrKSB7DQo+ICsJCWlmICghdnBv cnRzW2ldKQ0KPiArCQkJYnJlYWs7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGkgPT0gbWF4X3Zwb3J0 X25iKQ0KPiArCQl2cG9ydF9pZHggPSBJRFBGX0lOVkFMSURfVlBPUlRfSURYOw0KPiArCWVsc2UN Cj4gKwkJdnBvcnRfaWR4ID0gaTsNCj4gKw0KPiArCXJldHVybiB2cG9ydF9pZHg7DQo+ICt9DQo+ ICsNCj4gKyNpZm5kZWYgSURQRl9SU1NfS0VZX0xFTg0KPiArI2RlZmluZSBJRFBGX1JTU19LRVlf TEVOIDUyDQo+ICsjZW5kaWYNCj4gKw0KPiArc3RhdGljIGludA0KPiAraWRwZl9pbml0X3Zwb3J0 KHN0cnVjdCBydGVfZXRoX2RldiAqZGV2KSB7DQo+ICsJdWludDE2X3QgaWR4ID0gYWRhcHRlci0+ bmV4dF92cG9ydF9pZHg7DQo+ICsJc3RydWN0IHZpcnRjaG5sMl9jcmVhdGVfdnBvcnQgKnZwb3J0 X2luZm8gPQ0KPiArCQkoc3RydWN0IHZpcnRjaG5sMl9jcmVhdGVfdnBvcnQgKilhZGFwdGVyLQ0K PiA+dnBvcnRfcmVjdl9pbmZvW2lkeF07DQo+ICsJc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0ID0N Cj4gKwkJKHN0cnVjdCBpZHBmX3Zwb3J0ICopZGV2LT5kYXRhLT5kZXZfcHJpdmF0ZTsNCj4gKwlp bnQgaTsNCj4gKw0KPiArCXZwb3J0LT5hZGFwdGVyID0gYWRhcHRlcjsNCj4gKwl2cG9ydC0+dnBv cnRfaWQgPSB2cG9ydF9pbmZvLT52cG9ydF9pZDsNCj4gKwl2cG9ydC0+dHhxX21vZGVsID0gdnBv cnRfaW5mby0+dHhxX21vZGVsOw0KPiArCXZwb3J0LT5yeHFfbW9kZWwgPSB2cG9ydF9pbmZvLT5y eHFfbW9kZWw7DQo+ICsJdnBvcnQtPm51bV90eF9xID0gdnBvcnRfaW5mby0+bnVtX3R4X3E7DQo+ ICsJdnBvcnQtPm51bV90eF9jb21wbHEgPSB2cG9ydF9pbmZvLT5udW1fdHhfY29tcGxxOw0KPiAr CXZwb3J0LT5udW1fcnhfcSA9IHZwb3J0X2luZm8tPm51bV9yeF9xOw0KPiArCXZwb3J0LT5udW1f cnhfYnVmcSA9IHZwb3J0X2luZm8tPm51bV9yeF9idWZxOw0KPiArCXZwb3J0LT5tYXhfbXR1ID0g dnBvcnRfaW5mby0+bWF4X210dTsNCj4gKwlydGVfbWVtY3B5KHZwb3J0LT5kZWZhdWx0X21hY19h ZGRyLA0KPiArCQkgICB2cG9ydF9pbmZvLT5kZWZhdWx0X21hY19hZGRyLCBFVEhfQUxFTik7DQo+ ICsJdnBvcnQtPnJzc19hbGdvcml0aG0gPSB2cG9ydF9pbmZvLT5yc3NfYWxnb3JpdGhtOw0KPiAr CXZwb3J0LT5yc3Nfa2V5X3NpemUgPSBSVEVfTUlOKElEUEZfUlNTX0tFWV9MRU4sDQo+ICsJCQkJ ICAgICB2cG9ydF9pbmZvLT5yc3Nfa2V5X3NpemUpOw0KPiArCXZwb3J0LT5yc3NfbHV0X3NpemUg PSB2cG9ydF9pbmZvLT5yc3NfbHV0X3NpemU7DQo+ICsJdnBvcnQtPnN3X2lkeCA9IGlkeDsNCj4g Kw0KPiArCWZvciAoaSA9IDA7IGkgPCB2cG9ydF9pbmZvLT5jaHVua3MubnVtX2NodW5rczsgaSsr KSB7DQo+ICsJCWlmICh2cG9ydF9pbmZvLT5jaHVua3MuY2h1bmtzW2ldLnR5cGUgPT0NCj4gKwkJ ICAgIFZJUlRDSE5MMl9RVUVVRV9UWVBFX1RYKSB7DQo+ICsJCQl2cG9ydC0+Y2h1bmtzX2luZm8u dHhfc3RhcnRfcWlkID0NCj4gKwkJCQl2cG9ydF9pbmZvLQ0KPiA+Y2h1bmtzLmNodW5rc1tpXS5z dGFydF9xdWV1ZV9pZDsNCj4gKwkJCXZwb3J0LT5jaHVua3NfaW5mby50eF9xdGFpbF9zdGFydCA9 DQo+ICsJCQkJdnBvcnRfaW5mby0NCj4gPmNodW5rcy5jaHVua3NbaV0ucXRhaWxfcmVnX3N0YXJ0 Ow0KPiArCQkJdnBvcnQtPmNodW5rc19pbmZvLnR4X3F0YWlsX3NwYWNpbmcgPQ0KPiArCQkJCXZw b3J0X2luZm8tDQo+ID5jaHVua3MuY2h1bmtzW2ldLnF0YWlsX3JlZ19zcGFjaW5nOw0KPiArCQl9 IGVsc2UgaWYgKHZwb3J0X2luZm8tPmNodW5rcy5jaHVua3NbaV0udHlwZSA9PQ0KPiArCQkJIFZJ UlRDSE5MMl9RVUVVRV9UWVBFX1JYKSB7DQo+ICsJCQl2cG9ydC0+Y2h1bmtzX2luZm8ucnhfc3Rh cnRfcWlkID0NCj4gKwkJCQl2cG9ydF9pbmZvLQ0KPiA+Y2h1bmtzLmNodW5rc1tpXS5zdGFydF9x dWV1ZV9pZDsNCj4gKwkJCXZwb3J0LT5jaHVua3NfaW5mby5yeF9xdGFpbF9zdGFydCA9DQo+ICsJ CQkJdnBvcnRfaW5mby0NCj4gPmNodW5rcy5jaHVua3NbaV0ucXRhaWxfcmVnX3N0YXJ0Ow0KPiAr CQkJdnBvcnQtPmNodW5rc19pbmZvLnJ4X3F0YWlsX3NwYWNpbmcgPQ0KPiArCQkJCXZwb3J0X2lu Zm8tDQo+ID5jaHVua3MuY2h1bmtzW2ldLnF0YWlsX3JlZ19zcGFjaW5nOw0KPiArCQl9IGVsc2Ug aWYgKHZwb3J0X2luZm8tPmNodW5rcy5jaHVua3NbaV0udHlwZSA9PQ0KPiArCQkJIFZJUlRDSE5M Ml9RVUVVRV9UWVBFX1RYX0NPTVBMRVRJT04pIHsNCj4gKwkJCXZwb3J0LT5jaHVua3NfaW5mby50 eF9jb21wbF9zdGFydF9xaWQgPQ0KPiArCQkJCXZwb3J0X2luZm8tDQo+ID5jaHVua3MuY2h1bmtz W2ldLnN0YXJ0X3F1ZXVlX2lkOw0KPiArCQkJdnBvcnQtPmNodW5rc19pbmZvLnR4X2NvbXBsX3F0 YWlsX3N0YXJ0ID0NCj4gKwkJCQl2cG9ydF9pbmZvLQ0KPiA+Y2h1bmtzLmNodW5rc1tpXS5xdGFp bF9yZWdfc3RhcnQ7DQo+ICsJCQl2cG9ydC0+Y2h1bmtzX2luZm8udHhfY29tcGxfcXRhaWxfc3Bh Y2luZyA9DQo+ICsJCQkJdnBvcnRfaW5mby0NCj4gPmNodW5rcy5jaHVua3NbaV0ucXRhaWxfcmVn X3NwYWNpbmc7DQo+ICsJCX0gZWxzZSBpZiAodnBvcnRfaW5mby0+Y2h1bmtzLmNodW5rc1tpXS50 eXBlID09DQo+ICsJCQkgVklSVENITkwyX1FVRVVFX1RZUEVfUlhfQlVGRkVSKSB7DQo+ICsJCQl2 cG9ydC0+Y2h1bmtzX2luZm8ucnhfYnVmX3N0YXJ0X3FpZCA9DQo+ICsJCQkJdnBvcnRfaW5mby0N Cj4gPmNodW5rcy5jaHVua3NbaV0uc3RhcnRfcXVldWVfaWQ7DQo+ICsJCQl2cG9ydC0+Y2h1bmtz X2luZm8ucnhfYnVmX3F0YWlsX3N0YXJ0ID0NCj4gKwkJCQl2cG9ydF9pbmZvLQ0KPiA+Y2h1bmtz LmNodW5rc1tpXS5xdGFpbF9yZWdfc3RhcnQ7DQo+ICsJCQl2cG9ydC0+Y2h1bmtzX2luZm8ucnhf YnVmX3F0YWlsX3NwYWNpbmcgPQ0KPiArCQkJCXZwb3J0X2luZm8tDQo+ID5jaHVua3MuY2h1bmtz W2ldLnF0YWlsX3JlZ19zcGFjaW5nOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJYWRhcHRlci0+ dnBvcnRzW2lkeF0gPSB2cG9ydDsNCj4gKwlhZGFwdGVyLT5jdXJfdnBvcnRfbmIrKzsNCj4gKwlh ZGFwdGVyLT5uZXh0X3Zwb3J0X2lkeCA9IGlkcGZfZ2V0X25leHRfdnBvcnRfaWR4KGFkYXB0ZXIt DQo+ID52cG9ydHMsDQo+ICsJCQkJCQkgIGFkYXB0ZXItPm1heF92cG9ydF9uYiwNCj4gaWR4KTsN Cj4gKwlpZiAoYWRhcHRlci0+bmV4dF92cG9ydF9pZHggPT0gSURQRl9JTlZBTElEX1ZQT1JUX0lE WCkgew0KPiArCQlQTURfSU5JVF9MT0coRVJSLCAiRmFpbGVkIHRvIGdldCBuZXh0IHZwb3J0IGlk Iik7DQo+ICsJCXJldHVybiAtMTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArc3RhdGljIGludA0KPiAraWRwZl9kZXZfY29uZmlndXJlKHN0cnVjdCBydGVfZXRoX2Rl diAqZGV2KSB7DQo+ICsJc3RydWN0IGlkcGZfdnBvcnQgKnZwb3J0ID0NCj4gKwkJKHN0cnVjdCBp ZHBmX3Zwb3J0ICopZGV2LT5kYXRhLT5kZXZfcHJpdmF0ZTsNCj4gKwlpbnQgcmV0ID0gMDsNCj4g Kw0KPiArCXJldCA9IGlkcGZfaW5pdF92cG9ydF9yZXFfaW5mbyhkZXYpOw0KPiArCWlmIChyZXQp IHsNCj4gKwkJUE1EX0lOSVRfTE9HKEVSUiwgIkZhaWxlZCB0byBpbml0IHZwb3J0IHJlcV9pbmZv LiIpOw0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0KPiArCXJldCA9IGlkcGZfY3JlYXRl X3Zwb3J0KGRldik7DQo+ICsJaWYgKHJldCkgew0KPiArCQlQTURfSU5JVF9MT0coRVJSLCAiRmFp bGVkIHRvIGNyZWF0ZSB2cG9ydC4iKTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4g KwlyZXQgPSBpZHBmX2luaXRfdnBvcnQoZGV2KTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCVBNRF9J TklUX0xPRyhFUlIsICJGYWlsZWQgdG8gaW5pdCB2cG9ydHMuIik7DQo+ICsJCXJldHVybiByZXQ7 DQo+ICsJfQ0KPiArDQo+ICsJcnRlX2V0aGVyX2FkZHJfY29weSgoc3RydWN0IHJ0ZV9ldGhlcl9h ZGRyICopdnBvcnQtDQo+ID5kZWZhdWx0X21hY19hZGRyLA0KPiArCQkJICAgICZkZXYtPmRhdGEt Pm1hY19hZGRyc1swXSk7DQo+ICsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW50DQo+ICtpZHBmX2Rldl9zdGFydChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldikgew0KPiAr CXN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCA9DQo+ICsJCShzdHJ1Y3QgaWRwZl92cG9ydCAqKWRl di0+ZGF0YS0+ZGV2X3ByaXZhdGU7DQo+ICsNCj4gKwlQTURfSU5JVF9GVU5DX1RSQUNFKCk7DQo+ ICsNCj4gKwl2cG9ydC0+c3RvcHBlZCA9IDA7DQo+ICsNCj4gKwlpZiAoaWRwZl9lbmFfZGlzX3Zw b3J0KHZwb3J0LCB0cnVlKSkgew0KPiArCQlQTURfRFJWX0xPRyhFUlIsICJGYWlsZWQgdG8gZW5h YmxlIHZwb3J0Iik7DQo+ICsJCWdvdG8gZXJyX3Zwb3J0Ow0KPiArCX0NCj4gKw0KPiArCXJldHVy biAwOw0KPiArDQo+ICtlcnJfdnBvcnQ6DQo+ICsJcmV0dXJuIC0xOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgaW50DQo+ICtpZHBmX2Rldl9zdG9wKHN0cnVjdCBydGVfZXRoX2RldiAqZGV2KQ0KPiAr ew0KPiArCXN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCA9DQo+ICsJCShzdHJ1Y3QgaWRwZl92cG9y dCAqKWRldi0+ZGF0YS0+ZGV2X3ByaXZhdGU7DQo+ICsNCj4gKwlQTURfSU5JVF9GVU5DX1RSQUNF KCk7DQo+ICsNCj4gKwlpZiAodnBvcnQtPnN0b3BwZWQgPT0gMSkNCj4gKwkJcmV0dXJuIDA7DQo+ ICsNCj4gKwlpZiAoaWRwZl9lbmFfZGlzX3Zwb3J0KHZwb3J0LCBmYWxzZSkpDQo+ICsJCVBNRF9E UlZfTE9HKEVSUiwgImRpc2FibGUgdnBvcnQgZmFpbGVkIik7DQo+ICsNCj4gKwl2cG9ydC0+c3Rv cHBlZCA9IDE7DQo+ICsJZGV2LT5kYXRhLT5kZXZfc3RhcnRlZCA9IDA7DQo+ICsNCj4gKwlyZXR1 cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiAraWRwZl9kZXZfY2xvc2Uoc3RydWN0 IHJ0ZV9ldGhfZGV2ICpkZXYpIHsNCj4gKwlzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQgPQ0KPiAr CQkoc3RydWN0IGlkcGZfdnBvcnQgKilkZXYtPmRhdGEtPmRldl9wcml2YXRlOw0KPiArDQo+ICsJ aWYgKHJ0ZV9lYWxfcHJvY2Vzc190eXBlKCkgIT0gUlRFX1BST0NfUFJJTUFSWSkNCj4gKwkJcmV0 dXJuIDA7DQo+ICsNCj4gKwlpZHBmX2Rldl9zdG9wKGRldik7DQo+ICsJaWRwZl9kZXN0cm95X3Zw b3J0KHZwb3J0KTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50 IGlkcGZfcGFyc2VfZGV2YXJncyhzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldikgew0KPiArCXN0cnVj dCBydGVfZGV2YXJncyAqZGV2YXJncyA9IGRldi0+ZGV2aWNlLT5kZXZhcmdzOw0KPiArCXN0cnVj dCBydGVfa3ZhcmdzICprdmxpc3Q7DQo+ICsJaW50IHJldCA9IDA7DQo+ICsNCj4gKwlpZiAoIWRl dmFyZ3MpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJa3ZsaXN0ID0gcnRlX2t2YXJnc19wYXJz ZShkZXZhcmdzLT5hcmdzLCBpZHBmX3ZhbGlkX2FyZ3MpOw0KPiArCWlmICgha3ZsaXN0KSB7DQo+ ICsJCVBNRF9JTklUX0xPRyhFUlIsICJpbnZhbGlkIGt2YXJncyBrZXkiKTsNCj4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJcnRlX2t2YXJnc19mcmVlKGt2bGlzdCk7DQo+ICsJ cmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK2lkcGZfcmVzZXRfcGYo c3RydWN0IGllY21faHcgKmh3KQ0KPiArew0KPiArCXVpbnQzMl90IHJlZzsNCj4gKw0KPiArCXJl ZyA9IElFQ01fUkVBRF9SRUcoaHcsIFBGR0VOX0NUUkwpOw0KPiArCUlFQ01fV1JJVEVfUkVHKGh3 LCBQRkdFTl9DVFJMLCAocmVnIHwgUEZHRU5fQ1RSTF9QRlNXUikpOyB9DQo+ICsNCj4gKyNkZWZp bmUgSURQRl9SRVNFVF9XQUlUX0NOVCAxMDANCj4gK3N0YXRpYyBpbnQNCj4gK2lkcGZfY2hlY2tf cGZfcmVzZXRfZG9uZShzdHJ1Y3QgaWVjbV9odyAqaHcpIHsNCj4gKwl1aW50MzJfdCByZWc7DQo+ ICsJaW50IGk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgSURQRl9SRVNFVF9XQUlUX0NOVDsg aSsrKSB7DQo+ICsJCXJlZyA9IElFQ01fUkVBRF9SRUcoaHcsIFBGR0VOX1JTVEFUKTsNCj4gKwkJ aWYgKHJlZyAhPSAweEZGRkZGRkZGICYmIChyZWcgJg0KPiBQRkdFTl9SU1RBVF9QRlJfU1RBVEVf TSkpDQo+ICsJCQlyZXR1cm4gMDsNCj4gKwkJcnRlX2RlbGF5X21zKDEwMDApOw0KPiArCX0NCj4g Kw0KPiArCVBNRF9JTklUX0xPRyhFUlIsICJJRFBGIHJlc2V0IHRpbWVvdXQiKTsNCj4gKwlyZXR1 cm4gLUVCVVNZOw0KPiArfQ0KPiArDQo+ICsjZGVmaW5lIENUTFFfTlVNIDINCj4gK3N0YXRpYyBp bnQNCj4gK2lkcGZfaW5pdF9tYngoc3RydWN0IGllY21faHcgKmh3KQ0KPiArew0KPiArCXN0cnVj dCBpZWNtX2N0bHFfY3JlYXRlX2luZm8gY3RscV9pbmZvW0NUTFFfTlVNXSA9IHsNCj4gKwkJew0K PiArCQkJLnR5cGUgPSBJRUNNX0NUTFFfVFlQRV9NQUlMQk9YX1RYLA0KPiArCQkJLmlkID0gSURQ Rl9DVExRX0lELA0KPiArCQkJLmxlbiA9IElEUEZfQ1RMUV9MRU4sDQo+ICsJCQkuYnVmX3NpemUg PSBJRFBGX0RGTFRfTUJYX0JVRl9TSVpFLA0KPiArCQkJLnJlZyA9IHsNCj4gKwkJCQkuaGVhZCA9 IFBGX0ZXX0FUUUgsDQo+ICsJCQkJLnRhaWwgPSBQRl9GV19BVFFULA0KPiArCQkJCS5sZW4gPSBQ Rl9GV19BVFFMRU4sDQo+ICsJCQkJLmJhaCA9IFBGX0ZXX0FUUUJBSCwNCj4gKwkJCQkuYmFsID0g UEZfRldfQVRRQkFMLA0KPiArCQkJCS5sZW5fbWFzayA9IFBGX0ZXX0FUUUxFTl9BVFFMRU5fTSwN Cj4gKwkJCQkubGVuX2VuYV9tYXNrID0NCj4gUEZfRldfQVRRTEVOX0FUUUVOQUJMRV9NLA0KPiAr CQkJCS5oZWFkX21hc2sgPSBQRl9GV19BVFFIX0FUUUhfTSwNCj4gKwkJCX0NCj4gKwkJfSwNCj4g KwkJew0KPiArCQkJLnR5cGUgPSBJRUNNX0NUTFFfVFlQRV9NQUlMQk9YX1JYLA0KPiArCQkJLmlk ID0gSURQRl9DVExRX0lELA0KPiArCQkJLmxlbiA9IElEUEZfQ1RMUV9MRU4sDQo+ICsJCQkuYnVm X3NpemUgPSBJRFBGX0RGTFRfTUJYX0JVRl9TSVpFLA0KPiArCQkJLnJlZyA9IHsNCj4gKwkJCQku aGVhZCA9IFBGX0ZXX0FSUUgsDQo+ICsJCQkJLnRhaWwgPSBQRl9GV19BUlFULA0KPiArCQkJCS5s ZW4gPSBQRl9GV19BUlFMRU4sDQo+ICsJCQkJLmJhaCA9IFBGX0ZXX0FSUUJBSCwNCj4gKwkJCQku YmFsID0gUEZfRldfQVJRQkFMLA0KPiArCQkJCS5sZW5fbWFzayA9IFBGX0ZXX0FSUUxFTl9BUlFM RU5fTSwNCj4gKwkJCQkubGVuX2VuYV9tYXNrID0NCj4gUEZfRldfQVJRTEVOX0FSUUVOQUJMRV9N LA0KPiArCQkJCS5oZWFkX21hc2sgPSBQRl9GV19BUlFIX0FSUUhfTSwNCj4gKwkJCX0NCj4gKwkJ fQ0KPiArCX07DQo+ICsJc3RydWN0IGllY21fY3RscV9pbmZvICpjdGxxOw0KPiArCWludCByZXQg PSAwOw0KPiArDQo+ICsJcmV0ID0gaWVjbV9jdGxxX2luaXQoaHcsIENUTFFfTlVNLCBjdGxxX2lu Zm8pOw0KPiArCWlmIChyZXQpDQo+ICsJCXJldHVybiByZXQ7DQo+ICsNCj4gKwlMSVNUX0ZPUl9F QUNIX0VOVFJZX1NBRkUoY3RscSwgTlVMTCwgJmh3LT5jcV9saXN0X2hlYWQsDQo+ICsJCQkJIHN0 cnVjdCBpZWNtX2N0bHFfaW5mbywgY3FfbGlzdCkgew0KPiArCQlpZiAoY3RscS0+cV9pZCA9PSBJ RFBGX0NUTFFfSUQgJiYgY3RscS0+Y3FfdHlwZSA9PQ0KPiBJRUNNX0NUTFFfVFlQRV9NQUlMQk9Y X1RYKQ0KPiArCQkJaHctPmFzcSA9IGN0bHE7DQo+ICsJCWlmIChjdGxxLT5xX2lkID09IElEUEZf Q1RMUV9JRCAmJiBjdGxxLT5jcV90eXBlID09DQo+IElFQ01fQ1RMUV9UWVBFX01BSUxCT1hfUlgp DQo+ICsJCQlody0+YXJxID0gY3RscTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoIWh3LT5hc3EgfHwg IWh3LT5hcnEpIHsNCj4gKwkJaWVjbV9jdGxxX2RlaW5pdChodyk7DQo+ICsJCXJldCA9IC1FTk9F TlQ7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dA0KPiAraWRwZl9hZGFwdGVyX2luaXQoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYpIHsNCj4gKwlz dHJ1Y3QgaWVjbV9odyAqaHcgPSAmYWRhcHRlci0+aHc7DQo+ICsJc3RydWN0IHJ0ZV9wY2lfZGV2 aWNlICpwY2lfZGV2ID0gSURQRl9ERVZfVE9fUENJKGRldik7DQo+ICsJaW50IHJldCA9IDA7DQo+ ICsNCj4gKwlpZiAoYWRhcHRlci0+aW5pdGlhbGl6ZWQpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ ICsJaHctPmh3X2FkZHIgPSAodm9pZCAqKXBjaV9kZXYtPm1lbV9yZXNvdXJjZVswXS5hZGRyOw0K PiArCWh3LT5od19hZGRyX2xlbiA9IHBjaV9kZXYtPm1lbV9yZXNvdXJjZVswXS5sZW47DQo+ICsJ aHctPmJhY2sgPSBhZGFwdGVyOw0KPiArCWh3LT52ZW5kb3JfaWQgPSBwY2lfZGV2LT5pZC52ZW5k b3JfaWQ7DQo+ICsJaHctPmRldmljZV9pZCA9IHBjaV9kZXYtPmlkLmRldmljZV9pZDsNCj4gKwlo dy0+c3Vic3lzdGVtX3ZlbmRvcl9pZCA9IHBjaV9kZXYtPmlkLnN1YnN5c3RlbV92ZW5kb3JfaWQ7 DQo+ICsNCj4gKwlyZXQgPSBpZHBmX3BhcnNlX2RldmFyZ3MoZGV2KTsNCj4gKwlpZiAocmV0KSB7 DQo+ICsJCVBNRF9JTklUX0xPRyhFUlIsICJGYWlsZWQgdG8gcGFyc2UgZGV2YXJncyIpOw0KPiAr CQlnb3RvIGVycjsNCj4gKwl9DQo+ICsNCj4gKwlpZHBmX3Jlc2V0X3BmKGh3KTsNCj4gKwlyZXQg PSBpZHBmX2NoZWNrX3BmX3Jlc2V0X2RvbmUoaHcpOw0KPiArCWlmIChyZXQpIHsNCj4gKwkJUE1E X0lOSVRfTE9HKEVSUiwgIklEUEYgaXMgc3RpbGwgcmVzZXR0aW5nIik7DQo+ICsJCWdvdG8gZXJy Ow0KPiArCX0NCj4gKw0KPiArCXJldCA9IGlkcGZfaW5pdF9tYngoaHcpOw0KPiArCWlmIChyZXQp IHsNCj4gKwkJUE1EX0lOSVRfTE9HKEVSUiwgIkZhaWxlZCB0byBpbml0IG1haWxib3giKTsNCj4g KwkJZ290byBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJYWRhcHRlci0+bWJ4X3Jlc3AgPSBydGVfem1h bGxvYygiaWRwZl9hZGFwdGVyX21ieF9yZXNwIiwNCj4gSURQRl9ERkxUX01CWF9CVUZfU0laRSwg MCk7DQo+ICsJaWYgKCFhZGFwdGVyLT5tYnhfcmVzcCkgew0KPiArCQlQTURfSU5JVF9MT0coRVJS LCAiRmFpbGVkIHRvIGFsbG9jYXRlDQo+IGlkcGZfYWRhcHRlcl9tYnhfcmVzcCBtZW1vcnkiKTsN Cj4gKwkJZ290byBlcnJfbWJ4Ow0KPiArCX0NCj4gKw0KPiArCWlmIChpZHBmX2NoZWNrX2FwaV92 ZXJzaW9uKGFkYXB0ZXIpKSB7DQo+ICsJCVBNRF9JTklUX0xPRyhFUlIsICJGYWlsZWQgdG8gY2hl Y2sgYXBpIHZlcnNpb24iKTsNCj4gKwkJZ290byBlcnJfYXBpOw0KPiArCX0NCj4gKw0KPiArCWFk YXB0ZXItPmNhcHMgPSBydGVfem1hbGxvYygiaWRwZl9jYXBzIiwNCj4gKwkJCSAgICAgICBzaXpl b2Yoc3RydWN0IHZpcnRjaG5sMl9nZXRfY2FwYWJpbGl0aWVzKSwgMCk7DQo+ICsJaWYgKCFhZGFw dGVyLT5jYXBzKSB7DQo+ICsJCVBNRF9JTklUX0xPRyhFUlIsICJGYWlsZWQgdG8gYWxsb2NhdGUg aWRwZl9jYXBzIG1lbW9yeSIpOw0KPiArCQlnb3RvIGVycl9hcGk7DQo+ICsJfQ0KPiArDQo+ICsJ aWYgKGlkcGZfZ2V0X2NhcHMoYWRhcHRlcikpIHsNCj4gKwkJUE1EX0lOSVRfTE9HKEVSUiwgIkZh aWxlZCB0byBnZXQgY2FwYWJpbGl0aWVzIik7DQo+ICsJCWdvdG8gZXJyX2NhcHM7DQo+ICsJfQ0K PiArDQo+ICsJYWRhcHRlci0+bWF4X3Zwb3J0X25iID0gYWRhcHRlci0+Y2Fwcy0+bWF4X3Zwb3J0 czsNCj4gKw0KPiArCWFkYXB0ZXItPnZwb3J0X3JlcV9pbmZvID0gcnRlX3ptYWxsb2MoInZwb3J0 X3JlcV9pbmZvIiwNCj4gKwkJCQkJICAgICAgYWRhcHRlci0+bWF4X3Zwb3J0X25iICoNCj4gKwkJ CQkJICAgICAgc2l6ZW9mKCphZGFwdGVyLQ0KPiA+dnBvcnRfcmVxX2luZm8pLA0KPiArCQkJCQkg ICAgICAwKTsNCj4gKwlpZiAoIWFkYXB0ZXItPnZwb3J0X3JlcV9pbmZvKSB7DQo+ICsJCVBNRF9J TklUX0xPRyhFUlIsICJGYWlsZWQgdG8gYWxsb2NhdGUgdnBvcnRfcmVxX2luZm8NCj4gbWVtb3J5 Iik7DQo+ICsJCWdvdG8gZXJyX2NhcHM7DQo+ICsJfQ0KPiArDQo+ICsJYWRhcHRlci0+dnBvcnRf cmVjdl9pbmZvID0gcnRlX3ptYWxsb2MoInZwb3J0X3JlY3ZfaW5mbyIsDQo+ICsJCQkJCSAgICAg ICBhZGFwdGVyLT5tYXhfdnBvcnRfbmIgKg0KPiArCQkJCQkgICAgICAgc2l6ZW9mKCphZGFwdGVy LQ0KPiA+dnBvcnRfcmVjdl9pbmZvKSwNCj4gKwkJCQkJICAgICAgIDApOw0KPiArCWlmICghYWRh cHRlci0+dnBvcnRfcmVjdl9pbmZvKSB7DQo+ICsJCVBNRF9JTklUX0xPRyhFUlIsICJGYWlsZWQg dG8gYWxsb2NhdGUgdnBvcnRfcmVjdl9pbmZvDQo+IG1lbW9yeSIpOw0KPiArCQlnb3RvIGVycl92 cG9ydF9yZWN2X2luZm87DQo+ICsJfQ0KPiArDQo+ICsJYWRhcHRlci0+dnBvcnRzID0gcnRlX3pt YWxsb2MoInZwb3J0cyIsDQo+ICsJCQkJICAgICAgYWRhcHRlci0+bWF4X3Zwb3J0X25iICoNCj4g KwkJCQkgICAgICBzaXplb2YoKmFkYXB0ZXItPnZwb3J0cyksDQo+ICsJCQkJICAgICAgMCk7DQo+ ICsJaWYgKCFhZGFwdGVyLT52cG9ydHMpIHsNCj4gKwkJUE1EX0lOSVRfTE9HKEVSUiwgIkZhaWxl ZCB0byBhbGxvY2F0ZSB2cG9ydHMgbWVtb3J5Iik7DQo+ICsJCWdvdG8gZXJyX3Zwb3J0czsNCj4g Kwl9DQo+ICsNCj4gKwlhZGFwdGVyLT5tYXhfcnhxX3Blcl9tc2cgPSAoSURQRl9ERkxUX01CWF9C VUZfU0laRSAtDQo+ICsJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2aXJ0Y2hubDJfY29uZmlnX3J4 X3F1ZXVlcykpIC8NCj4gKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IHZpcnRjaG5sMl9yeHFfaW5m byk7DQo+ICsJYWRhcHRlci0+bWF4X3R4cV9wZXJfbXNnID0gKElEUEZfREZMVF9NQlhfQlVGX1NJ WkUgLQ0KPiArCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgdmlydGNobmwyX2NvbmZpZ190eF9xdWV1 ZXMpKSAvDQo+ICsJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2aXJ0Y2hubDJfdHhxX2luZm8pOw0K PiArDQo+ICsJYWRhcHRlci0+Y3VyX3Zwb3J0X25iID0gMDsNCj4gKwlhZGFwdGVyLT5uZXh0X3Zw b3J0X2lkeCA9IDA7DQo+ICsJYWRhcHRlci0+aW5pdGlhbGl6ZWQgPSB0cnVlOw0KPiArDQo+ICsJ cmV0dXJuIHJldDsNCj4gKw0KPiArZXJyX3Zwb3J0czoNCj4gKwlydGVfZnJlZShhZGFwdGVyLT52 cG9ydHMpOw0KPiArCWFkYXB0ZXItPnZwb3J0cyA9IE5VTEw7DQo+ICtlcnJfdnBvcnRfcmVjdl9p bmZvOg0KPiArCXJ0ZV9mcmVlKGFkYXB0ZXItPnZwb3J0X3JlcV9pbmZvKTsNCj4gKwlhZGFwdGVy LT52cG9ydF9yZXFfaW5mbyA9IE5VTEw7DQo+ICtlcnJfY2FwczoNCj4gKwlydGVfZnJlZShhZGFw dGVyLT5jYXBzKTsNCj4gKwlhZGFwdGVyLT5jYXBzID0gTlVMTDsNCj4gK2Vycl9hcGk6DQo+ICsJ cnRlX2ZyZWUoYWRhcHRlci0+bWJ4X3Jlc3ApOw0KPiArCWFkYXB0ZXItPm1ieF9yZXNwID0gTlVM TDsNCj4gK2Vycl9tYng6DQo+ICsJaWVjbV9jdGxxX2RlaW5pdChodyk7DQo+ICtlcnI6DQo+ICsJ cmV0dXJuIC0xOw0KPiArfQ0KPiArDQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2lkcGZfZGV2X2lu aXQoc3RydWN0IHJ0ZV9ldGhfZGV2ICpkZXYsIF9fcnRlX3VudXNlZCB2b2lkICppbml0X3BhcmFt cykNCj4gK3sNCj4gKwlzdHJ1Y3QgaWRwZl92cG9ydCAqdnBvcnQgPQ0KPiArCQkoc3RydWN0IGlk cGZfdnBvcnQgKilkZXYtPmRhdGEtPmRldl9wcml2YXRlOw0KPiArCWludCByZXQgPSAwOw0KPiAr DQo+ICsJUE1EX0lOSVRfRlVOQ19UUkFDRSgpOw0KPiArDQo+ICsJZGV2LT5kZXZfb3BzID0gJmlk cGZfZXRoX2Rldl9vcHM7DQo+ICsNCj4gKwkvKiBmb3Igc2Vjb25kYXJ5IHByb2Nlc3Nlcywgd2Ug ZG9uJ3QgaW5pdGlhbGlzZSBhbnkgZnVydGhlciBhcyBwcmltYXJ5DQo+ICsJICogaGFzIGFscmVh ZHkgZG9uZSB0aGlzIHdvcmsuDQo+ICsJICovDQo+ICsJaWYgKHJ0ZV9lYWxfcHJvY2Vzc190eXBl KCkgIT0gUlRFX1BST0NfUFJJTUFSWSkNCj4gKwkJcmV0dXJuIHJldDsNCj4gKw0KPiArCXJldCA9 IGlkcGZfYWRhcHRlcl9pbml0KGRldik7DQo+ICsJaWYgKHJldCkgew0KPiArCQlQTURfSU5JVF9M T0coRVJSLCAiRmFpbGVkIHRvIGluaXQgYWRhcHRlci4iKTsNCj4gKwkJcmV0dXJuIHJldDsNCj4g Kwl9DQo+ICsNCj4gKwlkZXYtPmRhdGEtPmRldl9mbGFncyB8PSBSVEVfRVRIX0RFVl9BVVRPRklM TF9RVUVVRV9YU1RBVFM7DQo+ICsNCj4gKwl2cG9ydC0+ZGV2X2RhdGEgPSBkZXYtPmRhdGE7DQo+ ICsNCj4gKwlkZXYtPmRhdGEtPm1hY19hZGRycyA9IHJ0ZV96bWFsbG9jKE5VTEwsIFJURV9FVEhF Ul9BRERSX0xFTiwNCj4gMCk7DQo+ICsJaWYgKGRldi0+ZGF0YS0+bWFjX2FkZHJzID09IE5VTEwp IHsNCj4gKwkJUE1EX0lOSVRfTE9HKEVSUiwgIkNhbm5vdCBhbGxvY2F0ZSBtYWNfYWRkciBtZW1v cnkuIik7DQo+ICsJCXJldCA9IC1FTk9NRU07DQo+ICsJCWdvdG8gZXJyOw0KPiArCX0NCj4gKw0K PiArZXJyOg0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK2lk cGZfZGV2X3VuaW5pdChzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldikgew0KPiArCWlmIChydGVfZWFs X3Byb2Nlc3NfdHlwZSgpICE9IFJURV9QUk9DX1BSSU1BUlkpDQo+ICsJCXJldHVybiAtRVBFUk07 DQo+ICsNCj4gKwlpZHBmX2Rldl9jbG9zZShkZXYpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRlX3BjaV9pZCBwY2lfaWRfaWRwZl9tYXBb XSA9IHsNCj4gKwl7IFJURV9QQ0lfREVWSUNFKElFQ01fSU5URUxfVkVORE9SX0lELCBJRUNNX0RF Vl9JRF9QRikgfSwNCj4gKwl7IC52ZW5kb3JfaWQgPSAwLCAvKiBzZW50aW5lbCAqLyB9LA0KPiAr fTsNCj4gKw0KPiArc3RhdGljIGludA0KPiAraWRwZl9wY2lfcHJvYmUoc3RydWN0IHJ0ZV9wY2lf ZHJpdmVyICpwY2lfZHJ2IF9fcnRlX3VudXNlZCwNCj4gKwkgICAgICBzdHJ1Y3QgcnRlX3BjaV9k ZXZpY2UgKnBjaV9kZXYpDQo+ICt7DQo+ICsJc3RydWN0IHJ0ZV9ldGhfZGV2YXJncyBldGhfZGEg PSB7IC5uYl9yZXByZXNlbnRvcl9wb3J0cyA9IDAgfTsNCj4gKwljaGFyIG5hbWVbUlRFX0VUSF9O QU1FX01BWF9MRU5dOw0KPiArCWludCBpLCByZXR2YWw7DQo+ICsNCj4gKwlpZiAocGNpX2Rldi0+ ZGV2aWNlLmRldmFyZ3MpIHsNCj4gKwkJcmV0dmFsID0gcnRlX2V0aF9kZXZhcmdzX3BhcnNlKHBj aV9kZXYtPmRldmljZS5kZXZhcmdzLQ0KPiA+YXJncywNCj4gKwkJCQkmZXRoX2RhKTsNCj4gKwkJ aWYgKHJldHZhbCkNCj4gKwkJCXJldHVybiByZXR2YWw7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKCFl dGhfZGEubmJfcmVwcmVzZW50b3JfcG9ydHMpIHsNCj4gKwkJUE1EX0lOSVRfTE9HKEVSUiwgIkZh aWxlZCB0byBwcm9iZSwgbmVlZCB0byBhZGQNCj4gcmVwcmVzZW50b3IgZGV2YXJncy4iKTsNCj4g KwkJcmV0dXJuIC0xOw0KPiArCX0NCj4gKw0KPiArCWlmICghYWRhcHRlcikgew0KPiArCQlhZGFw dGVyID0gKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKilydGVfem1hbGxvYygiaWRwZl9hZGFwdGVyIiwN Cj4gKwkJCQkJICAgICBzaXplb2Yoc3RydWN0IGlkcGZfYWRhcHRlciksIDApOw0KPiArCQlpZiAo IWFkYXB0ZXIpIHsNCj4gKwkJCVBNRF9JTklUX0xPRyhFUlIsICJGYWlsZWQgdG8gYWxsb2NhdGUg YWRhcHRlci4iKTsNCj4gKwkJCXJldHVybiAtMTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCWZv ciAoaSA9IDA7IGkgPCBldGhfZGEubmJfcmVwcmVzZW50b3JfcG9ydHM7IGkrKykgew0KPiArCQlz bnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJpZHBmX3Zwb3J0XyVkIiwNCj4gKwkJCSBldGhf ZGEucmVwcmVzZW50b3JfcG9ydHNbaV0pOw0KPiArCQlyZXR2YWwgPSBydGVfZXRoX2Rldl9jcmVh dGUoJnBjaV9kZXYtPmRldmljZSwgbmFtZSwNCj4gKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgaWRw Zl92cG9ydCksDQo+ICsJCQkJCSAgICBOVUxMLCBOVUxMLCBpZHBmX2Rldl9pbml0LA0KPiArCQkJ CQkgICAgTlVMTCk7DQo+ICsJCWlmIChyZXR2YWwpDQo+ICsJCQlQTURfRFJWX0xPRyhFUlIsICJm YWlsZWQgdG8gY3JlYXQgdnBvcnQgJWQiLCBpKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK2lkcGZfYWRhcHRlcl9yZWwoc3RydWN0IGlk cGZfYWRhcHRlciAqYWRhcHRlcikgew0KPiArCXN0cnVjdCBpZWNtX2h3ICpodyA9ICZhZGFwdGVy LT5odzsNCj4gKwlpbnQgaTsNCj4gKw0KPiArCWllY21fY3RscV9kZWluaXQoaHcpOw0KPiArDQo+ ICsJaWYgKGFkYXB0ZXItPmNhcHMpIHsNCj4gKwkJcnRlX2ZyZWUoYWRhcHRlci0+Y2Fwcyk7DQo+ ICsJCWFkYXB0ZXItPmNhcHMgPSBOVUxMOw0KPiArCX0NCj4gKw0KPiArCWlmIChhZGFwdGVyLT5t YnhfcmVzcCkgew0KPiArCQlydGVfZnJlZShhZGFwdGVyLT5tYnhfcmVzcCk7DQo+ICsJCWFkYXB0 ZXItPm1ieF9yZXNwID0gTlVMTDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoYWRhcHRlci0+dnBvcnRf cmVxX2luZm8pIHsNCj4gKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm1heF92cG9ydF9uYjsg aSsrKSB7DQo+ICsJCQlpZiAoYWRhcHRlci0+dnBvcnRfcmVxX2luZm9baV0pIHsNCj4gKwkJCQly dGVfZnJlZShhZGFwdGVyLT52cG9ydF9yZXFfaW5mb1tpXSk7DQo+ICsJCQkJYWRhcHRlci0+dnBv cnRfcmVxX2luZm9baV0gPSBOVUxMOw0KPiArCQkJfQ0KPiArCQl9DQo+ICsJCXJ0ZV9mcmVlKGFk YXB0ZXItPnZwb3J0X3JlcV9pbmZvKTsNCj4gKwkJYWRhcHRlci0+dnBvcnRfcmVxX2luZm8gPSBO VUxMOw0KPiArCX0NCj4gKw0KPiArCWlmIChhZGFwdGVyLT52cG9ydF9yZWN2X2luZm8pIHsNCj4g KwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm1heF92cG9ydF9uYjsgaSsrKSB7DQo+ICsJCQlp ZiAoYWRhcHRlci0+dnBvcnRfcmVjdl9pbmZvW2ldKSB7DQo+ICsJCQkJcnRlX2ZyZWUoYWRhcHRl ci0+dnBvcnRfcmVjdl9pbmZvW2ldKTsNCj4gKwkJCQlhZGFwdGVyLT52cG9ydF9yZWN2X2luZm9b aV0gPSBOVUxMOw0KPiArCQkJfQ0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGFkYXB0ZXIt PnZwb3J0cykgew0KPiArCQkvKiBOZWVkbid0IGZyZWUgYWRhcHRlci0+dnBvcnRzW2ldIHNpbmNl IGl0J3MgcHJpdmF0ZSBkYXRhICovDQo+ICsJCXJ0ZV9mcmVlKGFkYXB0ZXItPnZwb3J0cyk7DQo+ ICsJCWFkYXB0ZXItPnZwb3J0cyA9IE5VTEw7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW50DQo+ICtpZHBmX3BjaV9yZW1vdmUoc3RydWN0IHJ0ZV9wY2lfZGV2aWNlICpwY2lfZGV2KSB7 DQo+ICsJaWYgKGFkYXB0ZXIpIHsNCj4gKwkJaWRwZl9hZGFwdGVyX3JlbChhZGFwdGVyKTsNCj4g KwkJcnRlX2ZyZWUoYWRhcHRlcik7DQo+ICsJCWFkYXB0ZXIgPSBOVUxMOw0KPiArCX0NCj4gKw0K PiArCXJldHVybiBydGVfZXRoX2Rldl9wY2lfZ2VuZXJpY19yZW1vdmUocGNpX2RldiwgaWRwZl9k ZXZfdW5pbml0KTsNCj4gfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IHJ0ZV9wY2lfZHJpdmVyIHJ0 ZV9pZHBmX3BtZCA9IHsNCj4gKwkuaWRfdGFibGUJPSBwY2lfaWRfaWRwZl9tYXAsDQo+ICsJLmRy dl9mbGFncwk9IFJURV9QQ0lfRFJWX05FRURfTUFQUElORyB8DQo+IFJURV9QQ0lfRFJWX0lOVFJf TFNDIHwNCj4gKwkJCSAgUlRFX1BDSV9EUlZfUFJPQkVfQUdBSU4sDQo+ICsJLnByb2JlCQk9IGlk cGZfcGNpX3Byb2JlLA0KPiArCS5yZW1vdmUJCT0gaWRwZl9wY2lfcmVtb3ZlLA0KPiArfTsNCj4g Kw0KPiArLyoqDQo+ICsgKiBEcml2ZXIgaW5pdGlhbGl6YXRpb24gcm91dGluZS4NCj4gKyAqIElu dm9rZWQgb25jZSBhdCBFQUwgaW5pdCB0aW1lLg0KPiArICogUmVnaXN0ZXIgaXRzZWxmIGFzIHRo ZSBbUG9sbCBNb2RlXSBEcml2ZXIgb2YgUENJIGRldmljZXMuDQo+ICsgKi8NCj4gK1JURV9QTURf UkVHSVNURVJfUENJKG5ldF9pZHBmLCBydGVfaWRwZl9wbWQpOw0KPiArUlRFX1BNRF9SRUdJU1RF Ul9QQ0lfVEFCTEUobmV0X2lkcGYsIHBjaV9pZF9pZHBmX21hcCk7DQo+ICtSVEVfUE1EX1JFR0lT VEVSX0tNT0RfREVQKG5ldF9pY2UsICIqIGlnYl91aW8gfCB1aW9fcGNpX2dlbmVyaWMgfA0KPiAr dmZpby1wY2kiKTsNCj4gKw0KPiArUlRFX0xPR19SRUdJU1RFUl9TVUZGSVgoaWRwZl9sb2d0eXBl X2luaXQsIGluaXQsIE5PVElDRSk7DQo+ICtSVEVfTE9HX1JFR0lTVEVSX1NVRkZJWChpZHBmX2xv Z3R5cGVfZHJpdmVyLCBkcml2ZXIsIE5PVElDRSk7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25l dC9pZHBmL2lkcGZfZXRoZGV2LmggYi9kcml2ZXJzL25ldC9pZHBmL2lkcGZfZXRoZGV2LmgNCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQgaW5kZXggMDAwMDAwMDAwMC4uNTAxZjc3MmZhOA0KPiAtLS0g L2Rldi9udWxsDQo+ICsrKyBiL2RyaXZlcnMvbmV0L2lkcGYvaWRwZl9ldGhkZXYuaA0KPiBAQCAt MCwwICsxLDIwNSBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVz ZQ0KPiArICogQ29weXJpZ2h0KGMpIDIwMjIgSW50ZWwgQ29ycG9yYXRpb24NCj4gKyAqLw0KPiAr DQo+ICsjaWZuZGVmIF9JRFBGX0VUSERFVl9IXw0KPiArI2RlZmluZSBfSURQRl9FVEhERVZfSF8N Cj4gKw0KPiArI2luY2x1ZGUgPHN0ZGludC5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9tYnVmLmg+DQo+ ICsjaW5jbHVkZSA8cnRlX21lbXBvb2wuaD4NCj4gKyNpbmNsdWRlIDxydGVfbWFsbG9jLmg+DQo+ ICsjaW5jbHVkZSA8cnRlX3NwaW5sb2NrLmg+DQo+ICsjaW5jbHVkZSA8cnRlX2V0aGRldi5oPg0K PiArI2luY2x1ZGUgPHJ0ZV9rdmFyZ3MuaD4NCj4gKyNpbmNsdWRlIDxldGhkZXZfZHJpdmVyLmg+ DQo+ICsNCj4gKyNpbmNsdWRlICJiYXNlL2llY21fb3NkZXAuaCINCj4gKyNpbmNsdWRlICJiYXNl L2llY21fdHlwZS5oIg0KPiArI2luY2x1ZGUgImJhc2UvaWVjbV9kZXZpZHMuaCINCj4gKyNpbmNs dWRlICJiYXNlL2llY21fbGFuX3R4cnguaCINCj4gKyNpbmNsdWRlICJiYXNlL2llY21fbGFuX3Bm X3JlZ3MuaCINCj4gKyNpbmNsdWRlICJiYXNlL3ZpcnRjaG5sLmgiDQo+ICsjaW5jbHVkZSAiYmFz ZS92aXJ0Y2hubDIuaCINCj4gKw0KPiArI2RlZmluZSBJRFBGX0lOVkFMSURfVlBPUlRfSURYCTB4 ZmZmZg0KPiArI2RlZmluZSBJRFBGX1RYUV9QRVJfR1JQCTENCj4gKyNkZWZpbmUgSURQRl9UWF9D T01QTFFfUEVSX0dSUAkxDQo+ICsjZGVmaW5lIElEUEZfUlhRX1BFUl9HUlAJMQ0KPiArI2RlZmlu ZSBJRFBGX1JYX0JVRlFfUEVSX0dSUAkyDQo+ICsNCj4gKyNkZWZpbmUgSURQRl9DVExRX0lECQkt MQ0KPiArI2RlZmluZSBJRFBGX0NUTFFfTEVOCQk2NA0KPiArI2RlZmluZSBJRFBGX0RGTFRfTUJY X0JVRl9TSVpFCTQwOTYNCj4gKw0KPiArI2RlZmluZSBJRFBGX0RGTFRfUV9WRUNfTlVNCTENCj4g KyNkZWZpbmUgSURQRl9ERkxUX0lOVEVSVkFMCTE2DQo+ICsNCj4gKyNkZWZpbmUgSURQRl9NQVhf TlVNX1FVRVVFUwkyNTYNCj4gKyNkZWZpbmUgSURQRl9NSU5fQlVGX1NJWkUJMTAyNA0KPiArI2Rl ZmluZSBJRFBGX01BWF9GUkFNRV9TSVpFCTk3MjgNCj4gKw0KPiArI2RlZmluZSBJRFBGX05VTV9N QUNBRERSX01BWAk2NA0KPiArDQo+ICsjZGVmaW5lIElEUEZfTUFYX1BLVF9UWVBFCTEwMjQNCj4g Kw0KPiArI2RlZmluZSBJRFBGX1ZMQU5fVEFHX1NJWkUJNA0KPiArI2RlZmluZSBJRFBGX0VUSF9P VkVSSEVBRCBcDQo+ICsJKFJURV9FVEhFUl9IRFJfTEVOICsgUlRFX0VUSEVSX0NSQ19MRU4gKw0K PiBJRFBGX1ZMQU5fVEFHX1NJWkUgKiAyKQ0KPiArDQo+ICsjaWZuZGVmIEVUSF9BRERSX0xFTg0K PiArI2RlZmluZSBFVEhfQUREUl9MRU4JCTYNCj4gKyNlbmRpZg0KPiArDQo+ICsvKiBNZXNzYWdl IHR5cGUgcmVhZCBpbiB2aXJ0dWFsIGNoYW5uZWwgZnJvbSBQRiAqLyBlbnVtIGlkcGZfdmNfcmVz dWx0DQo+ICt7DQo+ICsJSURQRl9NU0dfRVJSID0gLTEsIC8qIE1lZXQgZXJyb3Igd2hlbiBhY2Nl c3NpbmcgYWRtaW4gcXVldWUgKi8NCj4gKwlJRFBGX01TR19OT04sICAgICAgLyogUmVhZCBub3Ro aW5nIGZyb20gYWRtaW4gcXVldWUgKi8NCj4gKwlJRFBGX01TR19TWVMsICAgICAgLyogUmVhZCBz eXN0ZW0gbXNnIGZyb20gYWRtaW4gcXVldWUgKi8NCj4gKwlJRFBGX01TR19DTUQsICAgICAgLyog UmVhZCBhc3luYyBjb21tYW5kIHJlc3VsdCAqLw0KPiArfTsNCj4gKw0KPiArc3RydWN0IGlkcGZf Y2h1bmtzX2luZm8gew0KPiArCXVpbnQzMl90IHR4X3N0YXJ0X3FpZDsNCj4gKwl1aW50MzJfdCBy eF9zdGFydF9xaWQ7DQo+ICsJLyogVmFsaWQgb25seSBpZiBzcGxpdCBxdWV1ZSBtb2RlbCAqLw0K PiArCXVpbnQzMl90IHR4X2NvbXBsX3N0YXJ0X3FpZDsNCj4gKwl1aW50MzJfdCByeF9idWZfc3Rh cnRfcWlkOw0KPiArDQo+ICsJdWludDY0X3QgdHhfcXRhaWxfc3RhcnQ7DQo+ICsJdWludDMyX3Qg dHhfcXRhaWxfc3BhY2luZzsNCj4gKwl1aW50NjRfdCByeF9xdGFpbF9zdGFydDsNCj4gKwl1aW50 MzJfdCByeF9xdGFpbF9zcGFjaW5nOw0KPiArCXVpbnQ2NF90IHR4X2NvbXBsX3F0YWlsX3N0YXJ0 Ow0KPiArCXVpbnQzMl90IHR4X2NvbXBsX3F0YWlsX3NwYWNpbmc7DQo+ICsJdWludDY0X3Qgcnhf YnVmX3F0YWlsX3N0YXJ0Ow0KPiArCXVpbnQzMl90IHJ4X2J1Zl9xdGFpbF9zcGFjaW5nOw0KPiAr fTsNCj4gKw0KPiArc3RydWN0IGlkcGZfdnBvcnQgew0KPiArCXN0cnVjdCBpZHBmX2FkYXB0ZXIg KmFkYXB0ZXI7IC8qIEJhY2tyZWZlcmVuY2UgdG8gYXNzb2NpYXRlZA0KPiBhZGFwdGVyICovDQo+ ICsJdWludDE2X3QgdnBvcnRfaWQ7DQo+ICsJdWludDMyX3QgdHhxX21vZGVsOw0KPiArCXVpbnQz Ml90IHJ4cV9tb2RlbDsNCj4gKwl1aW50MTZfdCBudW1fdHhfcTsNCj4gKwkvKiB2YWxpZCBvbmx5 IGlmIHR4cV9tb2RlbCBpcyBzcGxpdCBRICovDQo+ICsJdWludDE2X3QgbnVtX3R4X2NvbXBscTsN Cj4gKwl1aW50MTZfdCBudW1fcnhfcTsNCj4gKwkvKiB2YWxpZCBvbmx5IGlmIHJ4cV9tb2RlbCBp cyBzcGxpdCBRICovDQo+ICsJdWludDE2X3QgbnVtX3J4X2J1ZnE7DQo+ICsNCj4gKwl1aW50MTZf dCBtYXhfbXR1Ow0KPiArCXVpbnQ4X3QgZGVmYXVsdF9tYWNfYWRkcltWSVJUQ0hOTF9FVEhfTEVO R1RIX09GX0FERFJFU1NdOw0KPiArDQo+ICsJZW51bSB2aXJ0Y2hubF9yc3NfYWxnb3JpdGhtIHJz c19hbGdvcml0aG07DQo+ICsJdWludDE2X3QgcnNzX2tleV9zaXplOw0KPiArCXVpbnQxNl90IHJz c19sdXRfc2l6ZTsNCj4gKw0KPiArCXVpbnQxNl90IHN3X2lkeDsgLyogU1cgaWR4ICovDQo+ICsN Cj4gKwlzdHJ1Y3QgcnRlX2V0aF9kZXZfZGF0YSAqZGV2X2RhdGE7IC8qIFBvaW50ZXIgdG8gdGhl IGRldmljZSBkYXRhICovDQo+ICsJdWludDE2X3QgbWF4X3BrdF9sZW47IC8qIE1heGltdW0gcGFj a2V0IGxlbmd0aCAqLw0KPiArDQo+ICsJLyogUlNTIGluZm8gKi8NCj4gKwl1aW50MzJfdCAqcnNz X2x1dDsNCj4gKwl1aW50OF90ICpyc3Nfa2V5Ow0KPiArCXVpbnQ2NF90IHJzc19oZjsNCj4gKw0K PiArCS8qIENodW5rIGluZm8gKi8NCj4gKwlzdHJ1Y3QgaWRwZl9jaHVua3NfaW5mbyBjaHVua3Nf aW5mbzsNCj4gKw0KPiArCS8qIEV2ZW50IGZyb20gaXBmICovDQo+ICsJYm9vbCBsaW5rX3VwOw0K PiArCXVpbnQzMl90IGxpbmtfc3BlZWQ7DQo+ICsNCj4gKwlib29sIHN0b3BwZWQ7DQo+ICsJc3Ry dWN0IHZpcnRjaG5sMl92cG9ydF9zdGF0cyBldGhfc3RhdHNfb2Zmc2V0OyB9Ow0KPiArDQo+ICtz dHJ1Y3QgaWRwZl9hZGFwdGVyIHsNCj4gKwlzdHJ1Y3QgaWVjbV9odyBodzsNCj4gKw0KPiArCXN0 cnVjdCB2aXJ0Y2hubF92ZXJzaW9uX2luZm8gdmlydGNobmxfdmVyc2lvbjsNCj4gKwlzdHJ1Y3Qg dmlydGNobmwyX2dldF9jYXBhYmlsaXRpZXMgKmNhcHM7DQo+ICsNCj4gKwl2b2xhdGlsZSBlbnVt IHZpcnRjaG5sX29wcyBwZW5kX2NtZDsgLyogcGVuZGluZyBjb21tYW5kIG5vdA0KPiBmaW5pc2hl ZCAqLw0KPiArCXVpbnQzMl90IGNtZF9yZXR2YWw7IC8qIHJldHVybiB2YWx1ZSBvZiB0aGUgY21k IHJlc3BvbnNlIGZyb20gaXBmICovDQo+ICsJdWludDhfdCAqbWJ4X3Jlc3A7IC8qIGJ1ZmZlciB0 byBzdG9yZSB0aGUgbWFpbGJveCByZXNwb25zZSBmcm9tIGlwZg0KPiAqLw0KPiArDQo+ICsJdWlu dDMyX3QgdHhxX21vZGVsOw0KPiArCXVpbnQzMl90IHJ4cV9tb2RlbDsNCj4gKw0KPiArCS8qIFZw b3J0IGluZm8gKi8NCj4gKwl1aW50OF90ICoqdnBvcnRfcmVxX2luZm87DQo+ICsJdWludDhfdCAq KnZwb3J0X3JlY3ZfaW5mbzsNCj4gKwlzdHJ1Y3QgaWRwZl92cG9ydCAqKnZwb3J0czsNCj4gKwl1 aW50MTZfdCBtYXhfdnBvcnRfbmI7DQo+ICsJdWludDE2X3QgY3VyX3Zwb3J0X25iOw0KPiArCXVp bnQxNl90IG5leHRfdnBvcnRfaWR4Ow0KPiArDQo+ICsJLyogTWF4IGNvbmZpZyBxdWV1ZSBudW1i ZXIgcGVyIFZDIG1lc3NhZ2UgKi8NCj4gKwl1aW50MzJfdCBtYXhfcnhxX3Blcl9tc2c7DQo+ICsJ dWludDMyX3QgbWF4X3R4cV9wZXJfbXNnOw0KPiArDQo+ICsJdWludDMyX3QgcHR5cGVfdGJsW0lE UEZfTUFYX1BLVF9UWVBFXQ0KPiBfX3J0ZV9jYWNoZV9taW5fYWxpZ25lZDsNCj4gKw0KPiArCWJv b2wgaW5pdGlhbGl6ZWQ7DQo+ICsJYm9vbCBzdG9wcGVkOw0KPiArfTsNCj4gKw0KPiArZXh0ZXJu IHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXI7DQo+ICsNCj4gKyNkZWZpbmUgSURQRl9ERVZf VE9fUENJKGV0aF9kZXYpCQlcDQo+ICsJUlRFX0RFVl9UT19QQ0koKGV0aF9kZXYpLT5kZXZpY2Up DQo+ICsNCj4gKy8qIHN0cnVjdHVyZSB1c2VkIGZvciBzZW5kaW5nIGFuZCBjaGVja2luZyByZXNw b25zZSBvZiB2aXJ0Y2hubCBvcHMgKi8NCj4gK3N0cnVjdCBpZHBmX2NtZF9pbmZvIHsNCj4gKwl1 aW50MzJfdCBvcHM7DQo+ICsJdWludDhfdCAqaW5fYXJnczsgICAgICAgLyogYnVmZmVyIGZvciBz ZW5kaW5nICovDQo+ICsJdWludDMyX3QgaW5fYXJnc19zaXplOyAgLyogYnVmZmVyIHNpemUgZm9y IHNlbmRpbmcgKi8NCj4gKwl1aW50OF90ICpvdXRfYnVmZmVyOyAgICAvKiBidWZmZXIgZm9yIHJl c3BvbnNlICovDQo+ICsJdWludDMyX3Qgb3V0X3NpemU7ICAgICAgLyogYnVmZmVyIHNpemUgZm9y IHJlc3BvbnNlICovDQo+ICt9Ow0KPiArDQo+ICsvKiBub3RpZnkgY3VycmVudCBjb21tYW5kIGRv bmUuIE9ubHkgY2FsbCBpbiBjYXNlIGV4ZWN1dGUNCj4gKyAqIF9hdG9taWNfc2V0X2NtZCBzdWNj ZXNzZnVsbHkuDQo+ICsgKi8NCj4gK3N0YXRpYyBpbmxpbmUgdm9pZA0KPiArX25vdGlmeV9jbWQo c3RydWN0IGlkcGZfYWRhcHRlciAqYWRhcHRlciwgaW50IG1zZ19yZXQpIHsNCj4gKwlhZGFwdGVy LT5jbWRfcmV0dmFsID0gbXNnX3JldDsNCj4gKwlydGVfd21iKCk7DQo+ICsJYWRhcHRlci0+cGVu ZF9jbWQgPSBWSVJUQ0hOTF9PUF9VTktOT1dOOyB9DQo+ICsNCj4gKy8qIGNsZWFyIGN1cnJlbnQg Y29tbWFuZC4gT25seSBjYWxsIGluIGNhc2UgZXhlY3V0ZQ0KPiArICogX2F0b21pY19zZXRfY21k IHN1Y2Nlc3NmdWxseS4NCj4gKyAqLw0KPiArc3RhdGljIGlubGluZSB2b2lkDQo+ICtfY2xlYXJf Y21kKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpIHsNCj4gKwlydGVfd21iKCk7DQo+ICsJ YWRhcHRlci0+cGVuZF9jbWQgPSBWSVJUQ0hOTF9PUF9VTktOT1dOOw0KPiArCWFkYXB0ZXItPmNt ZF9yZXR2YWwgPSBWSVJUQ0hOTF9TVEFUVVNfU1VDQ0VTUzsgfQ0KPiArDQo+ICsvKiBDaGVjayB0 aGVyZSBpcyBwZW5kaW5nIGNtZCBpbiBleGVjdXRpb24uIElmIG5vbmUsIHNldCBuZXcgY29tbWFu ZC4NCj4gKyovIHN0YXRpYyBpbmxpbmUgaW50IF9hdG9taWNfc2V0X2NtZChzdHJ1Y3QgaWRwZl9h ZGFwdGVyICphZGFwdGVyLCBlbnVtDQo+ICt2aXJ0Y2hubF9vcHMgb3BzKSB7DQo+ICsJaW50IHJl dCA9IHJ0ZV9hdG9taWMzMl9jbXBzZXQoJmFkYXB0ZXItPnBlbmRfY21kLA0KPiBWSVJUQ0hOTF9P UF9VTktOT1dOLA0KPiArb3BzKTsNCj4gKw0KPiArCWlmICghcmV0KQ0KPiArCQlQTURfRFJWX0xP RyhFUlIsICJUaGVyZSBpcyBpbmNvbXBsZXRlIGNtZCAlZCIsDQo+IGFkYXB0ZXItPnBlbmRfY21k KTsNCj4gKw0KPiArCXJldHVybiAhcmV0Ow0KPiArfQ0KPiArDQo+ICt2b2lkIGlkcGZfaGFuZGxl X3ZpcnRjaG5sX21zZyhzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldik7IGludA0KPiAraWRwZl9jaGVj a19hcGlfdmVyc2lvbihzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKTsgaW50DQo+ICtpZHBm X2dldF9jYXBzKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIpOyBpbnQNCj4gK2lkcGZfY3Jl YXRlX3Zwb3J0KF9fcnRlX3VudXNlZCBzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldik7IGludA0KPiAr aWRwZl9kZXN0cm95X3Zwb3J0KHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCk7IGludA0KPiAraWRw Zl9lbmFfZGlzX3Zwb3J0KHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCwgYm9vbCBlbmFibGUpOw0K PiArDQo+ICsjZW5kaWYgLyogX0lEUEZfRVRIREVWX0hfICovDQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL25ldC9pZHBmL2lkcGZfdmNobmwuYyBiL2RyaXZlcnMvbmV0L2lkcGYvaWRwZl92Y2hubC5j IG5ldw0KPiBmaWxlIG1vZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAwMDAuLjRmYzE1ZDViNzENCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL25ldC9pZHBmL2lkcGZfdmNobmwuYw0KPiBA QCAtMCwwICsxLDQ3NiBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNs YXVzZQ0KPiArICogQ29weXJpZ2h0KGMpIDIwMjIgSW50ZWwgQ29ycG9yYXRpb24NCj4gKyAqLw0K PiArDQo+ICsjaW5jbHVkZSA8c3RkaW8uaD4NCj4gKyNpbmNsdWRlIDxlcnJuby5oPg0KPiArI2lu Y2x1ZGUgPHN0ZGludC5oPg0KPiArI2luY2x1ZGUgPHN0cmluZy5oPg0KPiArI2luY2x1ZGUgPHVu aXN0ZC5oPg0KPiArI2luY2x1ZGUgPHN0ZGFyZy5oPg0KPiArI2luY2x1ZGUgPGludHR5cGVzLmg+ DQo+ICsjaW5jbHVkZSA8cnRlX2J5dGVvcmRlci5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9jb21tb24u aD4NCj4gKw0KPiArI2luY2x1ZGUgPHJ0ZV9kZWJ1Zy5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9hdG9t aWMuaD4NCj4gKyNpbmNsdWRlIDxydGVfZWFsLmg+DQo+ICsjaW5jbHVkZSA8cnRlX2V0aGVyLmg+ DQo+ICsjaW5jbHVkZSA8ZXRoZGV2X2RyaXZlci5oPg0KPiArI2luY2x1ZGUgPGV0aGRldl9wY2ku aD4NCj4gKyNpbmNsdWRlIDxydGVfZGV2Lmg+DQo+ICsNCj4gKyNpbmNsdWRlICJpZHBmX2V0aGRl di5oIg0KPiArDQo+ICsjaW5jbHVkZSAiYmFzZS9pZWNtX3Byb3RvdHlwZS5oIg0KPiArDQo+ICsj ZGVmaW5lIElEUEZfQ1RMUV9MRU4JNjQNCj4gKw0KPiArc3RhdGljIGludA0KPiAraWRwZl92Y19j bGVhbihzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFwdGVyKSB7DQo+ICsJc3RydWN0IGllY21fY3Rs cV9tc2cgKnFfbXNnW0lEUEZfQ1RMUV9MRU5dOw0KPiArCXVpbnQxNl90IG51bV9xX21zZyA9IElE UEZfQ1RMUV9MRU47DQo+ICsJc3RydWN0IGllY21fZG1hX21lbSAqZG1hX21lbTsNCj4gKwlpbnQg ZXJyID0gMDsNCj4gKwl1aW50MzJfdCBpOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IDEwOyBp KyspIHsNCj4gKwkJZXJyID0gaWVjbV9jdGxxX2NsZWFuX3NxKGFkYXB0ZXItPmh3LmFzcSwgJm51 bV9xX21zZywNCj4gcV9tc2cpOw0KPiArCQltc2xlZXAoMjApOw0KPiArCQlpZiAobnVtX3FfbXNn KQ0KPiArCQkJYnJlYWs7DQo+ICsJfQ0KPiArCWlmIChlcnIpDQo+ICsJCWdvdG8gZXJyb3I7DQo+ ICsNCj4gKwkvKiBFbXB0eSBxdWV1ZSBpcyBub3QgYW4gZXJyb3IgKi8NCj4gKwlmb3IgKGkgPSAw OyBpIDwgbnVtX3FfbXNnOyBpKyspIHsNCj4gKwkJZG1hX21lbSA9IHFfbXNnW2ldLT5jdHguaW5k aXJlY3QucGF5bG9hZDsNCj4gKwkJaWYgKGRtYV9tZW0pIHsNCj4gKwkJCWllY21fZnJlZV9kbWFf bWVtKCZhZGFwdGVyLT5odywgZG1hX21lbSk7DQo+ICsJCQlydGVfZnJlZShkbWFfbWVtKTsNCj4g KwkJfQ0KPiArCQlydGVfZnJlZShxX21zZ1tpXSk7DQo+ICsJfQ0KPiArDQo+ICtlcnJvcjoNCj4g KwlyZXR1cm4gZXJyOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50DQo+ICtpZHBmX3NlbmRfdmNf bXNnKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIsIGVudW0gdmlydGNobmxfb3BzIG9wLA0K PiArCQkgdWludDE2X3QgbXNnX3NpemUsIHVpbnQ4X3QgKm1zZykNCj4gK3sNCj4gKwlzdHJ1Y3Qg aWVjbV9jdGxxX21zZyAqY3RscV9tc2c7DQo+ICsJc3RydWN0IGllY21fZG1hX21lbSAqZG1hX21l bTsNCj4gKwlpbnQgZXJyID0gMDsNCj4gKw0KPiArCWVyciA9IGlkcGZfdmNfY2xlYW4oYWRhcHRl cik7DQo+ICsJaWYgKGVycikNCj4gKwkJZ290byBlcnI7DQo+ICsNCj4gKwljdGxxX21zZyA9IChz dHJ1Y3QgaWVjbV9jdGxxX21zZyAqKXJ0ZV96bWFsbG9jKE5VTEwsDQo+ICsJCQkJc2l6ZW9mKHN0 cnVjdCBpZWNtX2N0bHFfbXNnKSwgMCk7DQo+ICsJaWYgKCFjdGxxX21zZykgew0KPiArCQllcnIg PSAtRU5PTUVNOw0KPiArCQlnb3RvIGVycjsNCj4gKwl9DQo+ICsNCj4gKwlkbWFfbWVtID0gKHN0 cnVjdCBpZWNtX2RtYV9tZW0gKilydGVfem1hbGxvYyhOVUxMLA0KPiArCQkJCXNpemVvZihzdHJ1 Y3QgaWVjbV9kbWFfbWVtKSwgMCk7DQo+ICsJaWYgKCFkbWFfbWVtKSB7DQo+ICsJCWVyciA9IC1F Tk9NRU07DQo+ICsJCWdvdG8gZG1hX21lbV9lcnJvcjsNCj4gKwl9DQo+ICsNCj4gKwlkbWFfbWVt LT5zaXplID0gSURQRl9ERkxUX01CWF9CVUZfU0laRTsNCj4gKwlpZWNtX2FsbG9jX2RtYV9tZW0o JmFkYXB0ZXItPmh3LCBkbWFfbWVtLCBkbWFfbWVtLQ0KPiA+c2l6ZSk7DQo+ICsJaWYgKCFkbWFf bWVtLT52YSkgew0KPiArCQllcnIgPSAtRU5PTUVNOw0KPiArCQlnb3RvIGRtYV9hbGxvY19lcnJv cjsNCj4gKwl9DQo+ICsNCj4gKwltZW1jcHkoZG1hX21lbS0+dmEsIG1zZywgbXNnX3NpemUpOw0K PiArDQo+ICsJY3RscV9tc2ctPm9wY29kZSA9IGllY21fbWJxX29wY19zZW5kX21zZ190b19wZjsN Cj4gKwljdGxxX21zZy0+ZnVuY19pZCA9IDA7DQo+ICsJY3RscV9tc2ctPmRhdGFfbGVuID0gbXNn X3NpemU7DQo+ICsJY3RscV9tc2ctPmNvb2tpZS5tYnguY2hubF9vcGNvZGUgPSBvcDsNCj4gKwlj dGxxX21zZy0+Y29va2llLm1ieC5jaG5sX3JldHZhbCA9IFZJUlRDSE5MX1NUQVRVU19TVUNDRVNT Ow0KPiArCWN0bHFfbXNnLT5jdHguaW5kaXJlY3QucGF5bG9hZCA9IGRtYV9tZW07DQo+ICsNCj4g KwllcnIgPSBpZWNtX2N0bHFfc2VuZCgmYWRhcHRlci0+aHcsIGFkYXB0ZXItPmh3LmFzcSwgMSwg Y3RscV9tc2cpOw0KPiArCWlmIChlcnIpDQo+ICsJCWdvdG8gc2VuZF9lcnJvcjsNCj4gKw0KPiAr CXJldHVybiBlcnI7DQo+ICsNCj4gK3NlbmRfZXJyb3I6DQo+ICsJaWVjbV9mcmVlX2RtYV9tZW0o JmFkYXB0ZXItPmh3LCBkbWFfbWVtKTsNCj4gK2RtYV9hbGxvY19lcnJvcjoNCj4gKwlydGVfZnJl ZShkbWFfbWVtKTsNCj4gK2RtYV9tZW1fZXJyb3I6DQo+ICsJcnRlX2ZyZWUoY3RscV9tc2cpOw0K PiArZXJyOg0KPiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBlbnVtIGlkcGZf dmNfcmVzdWx0DQo+ICtpZHBmX3JlYWRfbXNnX2Zyb21faXBmKHN0cnVjdCBpZHBmX2FkYXB0ZXIg KmFkYXB0ZXIsIHVpbnQxNl90IGJ1Zl9sZW4sDQo+ICsJCSAgICAgICB1aW50OF90ICpidWYpDQo+ ICt7DQo+ICsJc3RydWN0IGllY21faHcgKmh3ID0gJmFkYXB0ZXItPmh3Ow0KPiArCXN0cnVjdCBp ZWNtX2N0bHFfbXNnIGN0bHFfbXNnOw0KPiArCXN0cnVjdCBpZWNtX2RtYV9tZW0gKmRtYV9tZW0g PSBOVUxMOw0KPiArCWVudW0gaWRwZl92Y19yZXN1bHQgcmVzdWx0ID0gSURQRl9NU0dfTk9OOw0K PiArCWVudW0gdmlydGNobmxfb3BzIG9wY29kZTsNCj4gKwl1aW50MTZfdCBwZW5kaW5nID0gMTsN Cj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcmV0ID0gaWVjbV9jdGxxX3JlY3YoaHctPmFycSwgJnBl bmRpbmcsICZjdGxxX21zZyk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlQTURfRFJWX0xPRyhERUJV RywgIkNhbid0IHJlYWQgbXNnIGZyb20gQVEiKTsNCj4gKwkJaWYgKHJldCAhPSBJRUNNX0VSUl9D VExRX05PX1dPUkspDQo+ICsJCQlyZXN1bHQgPSBJRFBGX01TR19FUlI7DQo+ICsJCXJldHVybiBy ZXN1bHQ7DQo+ICsJfQ0KPiArDQo+ICsJcnRlX21lbWNweShidWYsIGN0bHFfbXNnLmN0eC5pbmRp cmVjdC5wYXlsb2FkLT52YSwgYnVmX2xlbik7DQo+ICsNCj4gKwlvcGNvZGUgPSAoZW51bQ0KPiB2 aXJ0Y2hubF9vcHMpcnRlX2xlX3RvX2NwdV8zMihjdGxxX21zZy5jb29raWUubWJ4LmNobmxfb3Bj b2RlKTsNCj4gKwlhZGFwdGVyLT5jbWRfcmV0dmFsID0NCj4gKwkJKGVudW0NCj4gK3ZpcnRjaG5s X3N0YXR1c19jb2RlKXJ0ZV9sZV90b19jcHVfMzIoY3RscV9tc2cuY29va2llLm1ieC5jaG5sX3Jl dHZhbCk7DQo+ICsNCj4gKwlQTURfRFJWX0xPRyhERUJVRywgIkNRIGZyb20gaXBmIGNhcnJpZXMg b3Bjb2RlICV1LCByZXR2YWwgJWQiLA0KPiArCQkgICAgb3Bjb2RlLCBhZGFwdGVyLT5jbWRfcmV0 dmFsKTsNCj4gKw0KPiArCWlmIChvcGNvZGUgPT0gVklSVENITkwyX09QX0VWRU5UKSB7DQo+ICsJ CXN0cnVjdCB2aXJ0Y2hubDJfZXZlbnQgKnZlID0NCj4gKwkJCShzdHJ1Y3QgdmlydGNobmwyX2V2 ZW50DQo+ICopY3RscV9tc2cuY3R4LmluZGlyZWN0LnBheWxvYWQtPnZhOw0KPiArDQo+ICsJCXJl c3VsdCA9IElEUEZfTVNHX1NZUzsNCj4gKwkJc3dpdGNoICh2ZS0+ZXZlbnQpIHsNCj4gKwkJY2Fz ZSBWSVJUQ0hOTDJfRVZFTlRfTElOS19DSEFOR0U6DQo+ICsJCQkvKiBUQkQgKi8NCj4gKwkJCWJy ZWFrOw0KPiArCQlkZWZhdWx0Og0KPiArCQkJUE1EX0RSVl9MT0coRVJSLCAiJXM6IFVua25vd24g ZXZlbnQgJWQgZnJvbQ0KPiBpcGYiLA0KPiArCQkJCSAgICBfX2Z1bmNfXywgdmUtPmV2ZW50KTsN Cj4gKwkJCWJyZWFrOw0KPiArCQl9DQo+ICsJfSBlbHNlIHsNCj4gKwkJLyogYXN5bmMgcmVwbHkg bXNnIG9uIGNvbW1hbmQgaXNzdWVkIGJ5IHBmIHByZXZpb3VzbHkgKi8NCj4gKwkJcmVzdWx0ID0g SURQRl9NU0dfQ01EOw0KPiArCQlpZiAob3Bjb2RlICE9IGFkYXB0ZXItPnBlbmRfY21kKSB7DQo+ ICsJCQlQTURfRFJWX0xPRyhXQVJOSU5HLCAiY29tbWFuZCBtaXNtYXRjaCwNCj4gZXhwZWN0ICV1 LCBnZXQgJXUiLA0KPiArCQkJCSAgICBhZGFwdGVyLT5wZW5kX2NtZCwgb3Bjb2RlKTsNCj4gKwkJ CXJlc3VsdCA9IElEUEZfTVNHX0VSUjsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCWlmIChjdGxx X21zZy5kYXRhX2xlbikNCj4gKwkJZG1hX21lbSA9IGN0bHFfbXNnLmN0eC5pbmRpcmVjdC5wYXls b2FkOw0KPiArCWVsc2UNCj4gKwkJcGVuZGluZyA9IDA7DQo+ICsNCj4gKwlyZXQgPSBpZWNtX2N0 bHFfcG9zdF9yeF9idWZmcyhodywgaHctPmFycSwgJnBlbmRpbmcsDQo+ICZkbWFfbWVtKTsNCj4g KwlpZiAocmV0ICYmIGRtYV9tZW0pDQo+ICsJCWllY21fZnJlZV9kbWFfbWVtKGh3LCBkbWFfbWVt KTsNCj4gKw0KPiArCXJldHVybiByZXN1bHQ7DQo+ICt9DQo+ICsNCj4gKyNkZWZpbmUgTUFYX1RS WV9USU1FUyAyMDANCj4gKyNkZWZpbmUgQVNRX0RFTEFZX01TICAxMA0KPiArDQo+ICtzdGF0aWMg aW50DQo+ICtpZHBmX2V4ZWN1dGVfdmNfY21kKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFkYXB0ZXIs IHN0cnVjdCBpZHBmX2NtZF9pbmZvDQo+ICsqYXJncykgew0KPiArCWVudW0gaWRwZl92Y19yZXN1 bHQgcmVzdWx0Ow0KPiArCWludCBlcnIgPSAwOw0KPiArCWludCBpID0gMDsNCj4gKwlpbnQgcmV0 Ow0KPiArDQo+ICsJaWYgKF9hdG9taWNfc2V0X2NtZChhZGFwdGVyLCBhcmdzLT5vcHMpKQ0KPiAr CQlyZXR1cm4gLTE7DQo+ICsNCj4gKwlyZXQgPSBpZHBmX3NlbmRfdmNfbXNnKGFkYXB0ZXIsIGFy Z3MtPm9wcywNCj4gKwkJCSAgICAgICBhcmdzLT5pbl9hcmdzX3NpemUsDQo+ICsJCQkgICAgICAg YXJncy0+aW5fYXJncyk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlQTURfRFJWX0xPRyhFUlIsICJm YWlsIHRvIHNlbmQgY21kICVkIiwgYXJncy0+b3BzKTsNCj4gKwkJX2NsZWFyX2NtZChhZGFwdGVy KTsNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwlzd2l0Y2ggKGFyZ3MtPm9wcykg ew0KPiArCWNhc2UgVklSVENITkxfT1BfVkVSU0lPTjoNCj4gKwljYXNlIFZJUlRDSE5MMl9PUF9H RVRfQ0FQUzoNCj4gKwljYXNlIFZJUlRDSE5MMl9PUF9DUkVBVEVfVlBPUlQ6DQo+ICsJY2FzZSBW SVJUQ0hOTDJfT1BfREVTVFJPWV9WUE9SVDoNCj4gKwljYXNlIFZJUlRDSE5MMl9PUF9TRVRfUlNT X0tFWToNCj4gKwljYXNlIFZJUlRDSE5MMl9PUF9TRVRfUlNTX0xVVDoNCj4gKwljYXNlIFZJUlRD SE5MMl9PUF9TRVRfUlNTX0hBU0g6DQo+ICsJY2FzZSBWSVJUQ0hOTDJfT1BfQ09ORklHX1JYX1FV RVVFUzoNCj4gKwljYXNlIFZJUlRDSE5MMl9PUF9DT05GSUdfVFhfUVVFVUVTOg0KPiArCWNhc2Ug VklSVENITkwyX09QX0VOQUJMRV9RVUVVRVM6DQo+ICsJY2FzZSBWSVJUQ0hOTDJfT1BfRElTQUJM RV9RVUVVRVM6DQo+ICsJY2FzZSBWSVJUQ0hOTDJfT1BfRU5BQkxFX1ZQT1JUOg0KPiArCWNhc2Ug VklSVENITkwyX09QX0RJU0FCTEVfVlBPUlQ6DQo+ICsJCS8qIGZvciBpbml0IHZpcnRjaG5sIG9w cywgbmVlZCB0byBwb2xsIHRoZSByZXNwb25zZSAqLw0KPiArCQlkbyB7DQo+ICsJCQlyZXN1bHQg PSBpZHBmX3JlYWRfbXNnX2Zyb21faXBmKGFkYXB0ZXIsDQo+ICsJCQkJCQkJYXJncy0+b3V0X3Np emUsDQo+ICsJCQkJCQkJYXJncy0+b3V0X2J1ZmZlcik7DQo+ICsJCQlpZiAocmVzdWx0ID09IElE UEZfTVNHX0NNRCkNCj4gKwkJCQlicmVhazsNCj4gKwkJCXJ0ZV9kZWxheV9tcyhBU1FfREVMQVlf TVMpOw0KPiArCQl9IHdoaWxlIChpKysgPCBNQVhfVFJZX1RJTUVTKTsNCj4gKwkJaWYgKGkgPj0g TUFYX1RSWV9USU1FUyB8fA0KPiArCQkgICAgYWRhcHRlci0+Y21kX3JldHZhbCAhPSBWSVJUQ0hO TF9TVEFUVVNfU1VDQ0VTUykgew0KPiArCQkJZXJyID0gLTE7DQo+ICsJCQlQTURfRFJWX0xPRyhF UlIsICJObyByZXNwb25zZSBvciByZXR1cm4gZmFpbHVyZQ0KPiAoJWQpIGZvciBjbWQgJWQiLA0K PiArCQkJCSAgICBhZGFwdGVyLT5jbWRfcmV0dmFsLCBhcmdzLT5vcHMpOw0KPiArCQl9DQo+ICsJ CV9jbGVhcl9jbWQoYWRhcHRlcik7DQo+ICsJCWJyZWFrOw0KPiArCWRlZmF1bHQ6DQo+ICsJCS8q IEZvciBvdGhlciB2aXJ0Y2hubCBvcHMgaW4gcnVubmluZyB0aW1lLA0KPiArCQkgKiB3YWl0IGZv ciB0aGUgY21kIGRvbmUgZmxhZy4NCj4gKwkJICovDQo+ICsJCWRvIHsNCj4gKwkJCWlmIChhZGFw dGVyLT5wZW5kX2NtZCA9PQ0KPiBWSVJUQ0hOTF9PUF9VTktOT1dOKQ0KPiArCQkJCWJyZWFrOw0K PiArCQkJcnRlX2RlbGF5X21zKEFTUV9ERUxBWV9NUyk7DQo+ICsJCQkvKiBJZiBkb24ndCByZWFk IG1zZyBvciByZWFkIHN5cyBldmVudCwgY29udGludWUgKi8NCj4gKwkJfSB3aGlsZSAoaSsrIDwg TUFYX1RSWV9USU1FUyk7DQo+ICsJCS8qIElmIHRoZXJlJ3Mgbm8gcmVzcG9uc2UgaXMgcmVjZWl2 ZWQsIGNsZWFyIGNvbW1hbmQgKi8NCj4gKwkJaWYgKGkgPj0gTUFYX1RSWV9USU1FUyAgfHwNCj4g KwkJICAgIGFkYXB0ZXItPmNtZF9yZXR2YWwgIT0gVklSVENITkxfU1RBVFVTX1NVQ0NFU1MpIHsN Cj4gKwkJCWVyciA9IC0xOw0KPiArCQkJUE1EX0RSVl9MT0coRVJSLCAiTm8gcmVzcG9uc2Ugb3Ig cmV0dXJuIGZhaWx1cmUNCj4gKCVkKSBmb3IgY21kICVkIiwNCj4gKwkJCQkgICAgYWRhcHRlci0+ Y21kX3JldHZhbCwgYXJncy0+b3BzKTsNCj4gKwkJCV9jbGVhcl9jbWQoYWRhcHRlcik7DQo+ICsJ CX0NCj4gKwkJYnJlYWs7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIGVycjsNCj4gK30NCj4gKw0K PiAraW50DQo+ICtpZHBmX2NoZWNrX2FwaV92ZXJzaW9uKHN0cnVjdCBpZHBmX2FkYXB0ZXIgKmFk YXB0ZXIpIHsNCj4gKwlzdHJ1Y3QgdmlydGNobmxfdmVyc2lvbl9pbmZvIHZlcnNpb247DQo+ICsJ c3RydWN0IGlkcGZfY21kX2luZm8gYXJnczsNCj4gKwlpbnQgZXJyOw0KPiArDQo+ICsJbWVtc2V0 KCZ2ZXJzaW9uLCAwLCBzaXplb2Yoc3RydWN0IHZpcnRjaG5sX3ZlcnNpb25faW5mbykpOw0KPiAr CXZlcnNpb24ubWFqb3IgPSBWSVJUQ0hOTF9WRVJTSU9OX01BSk9SXzI7DQo+ICsJdmVyc2lvbi5t aW5vciA9IFZJUlRDSE5MX1ZFUlNJT05fTUlOT1JfMDsNCj4gKw0KPiArCWFyZ3Mub3BzID0gVklS VENITkxfT1BfVkVSU0lPTjsNCj4gKwlhcmdzLmluX2FyZ3MgPSAodWludDhfdCAqKSZ2ZXJzaW9u Ow0KPiArCWFyZ3MuaW5fYXJnc19zaXplID0gc2l6ZW9mKHZlcnNpb24pOw0KPiArCWFyZ3Mub3V0 X2J1ZmZlciA9IGFkYXB0ZXItPm1ieF9yZXNwOw0KPiArCWFyZ3Mub3V0X3NpemUgPSBJRFBGX0RG TFRfTUJYX0JVRl9TSVpFOw0KPiArDQo+ICsJZXJyID0gaWRwZl9leGVjdXRlX3ZjX2NtZChhZGFw dGVyLCAmYXJncyk7DQo+ICsJaWYgKGVycikgew0KPiArCQlQTURfRFJWX0xPRyhFUlIsDQo+ICsJ CQkgICAgIkZhaWxlZCB0byBleGVjdXRlIGNvbW1hbmQgb2YNCj4gVklSVENITkxfT1BfVkVSU0lP TiIpOw0KPiArCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiBlcnI7DQo+ICt9 DQo+ICsNCj4gK2ludA0KPiAraWRwZl9nZXRfY2FwcyhzdHJ1Y3QgaWRwZl9hZGFwdGVyICphZGFw dGVyKSB7DQo+ICsJc3RydWN0IHZpcnRjaG5sMl9nZXRfY2FwYWJpbGl0aWVzIGNhcHNfbXNnOw0K PiArCXN0cnVjdCBpZHBmX2NtZF9pbmZvIGFyZ3M7DQo+ICsJaW50IGVycjsNCj4gKw0KPiArCSBt ZW1zZXQoJmNhcHNfbXNnLCAwLCBzaXplb2Yoc3RydWN0IHZpcnRjaG5sMl9nZXRfY2FwYWJpbGl0 aWVzKSk7DQo+ICsJIGNhcHNfbXNnLmNzdW1fY2FwcyA9DQo+ICsJCSBWSVJUQ0hOTDJfQ0FQX1RY X0NTVU1fTDNfSVBWNAkJfA0KPiArCQkgVklSVENITkwyX0NBUF9UWF9DU1VNX0w0X0lQVjRfVENQ CXwNCj4gKwkJIFZJUlRDSE5MMl9DQVBfVFhfQ1NVTV9MNF9JUFY0X1VEUAl8DQo+ICsJCSBWSVJU Q0hOTDJfQ0FQX1RYX0NTVU1fTDRfSVBWNF9TQ1RQCXwNCj4gKwkJIFZJUlRDSE5MMl9DQVBfVFhf Q1NVTV9MNF9JUFY2X1RDUAl8DQo+ICsJCSBWSVJUQ0hOTDJfQ0FQX1RYX0NTVU1fTDRfSVBWNl9V RFAJfA0KPiArCQkgVklSVENITkwyX0NBUF9UWF9DU1VNX0w0X0lQVjZfU0NUUAl8DQo+ICsJCSBW SVJUQ0hOTDJfQ0FQX1RYX0NTVU1fR0VORVJJQwkJfA0KPiArCQkgVklSVENITkwyX0NBUF9SWF9D U1VNX0wzX0lQVjQJCXwNCj4gKwkJIFZJUlRDSE5MMl9DQVBfUlhfQ1NVTV9MNF9JUFY0X1RDUAl8 DQo+ICsJCSBWSVJUQ0hOTDJfQ0FQX1JYX0NTVU1fTDRfSVBWNF9VRFAJfA0KPiArCQkgVklSVENI TkwyX0NBUF9SWF9DU1VNX0w0X0lQVjRfU0NUUAl8DQo+ICsJCSBWSVJUQ0hOTDJfQ0FQX1JYX0NT VU1fTDRfSVBWNl9UQ1AJfA0KPiArCQkgVklSVENITkwyX0NBUF9SWF9DU1VNX0w0X0lQVjZfVURQ CXwNCj4gKwkJIFZJUlRDSE5MMl9DQVBfUlhfQ1NVTV9MNF9JUFY2X1NDVFAJfA0KPiArCQkgVklS VENITkwyX0NBUF9SWF9DU1VNX0dFTkVSSUM7DQo+ICsNCj4gKwkgY2Fwc19tc2cuc2VnX2NhcHMg PQ0KPiArCQkgVklSVENITkwyX0NBUF9TRUdfSVBWNF9UQ1AJCXwNCj4gKwkJIFZJUlRDSE5MMl9D QVBfU0VHX0lQVjRfVURQCQl8DQo+ICsJCSBWSVJUQ0hOTDJfQ0FQX1NFR19JUFY0X1NDVFAJCXwN Cj4gKwkJIFZJUlRDSE5MMl9DQVBfU0VHX0lQVjZfVENQCQl8DQo+ICsJCSBWSVJUQ0hOTDJfQ0FQ X1NFR19JUFY2X1VEUAkJfA0KPiArCQkgVklSVENITkwyX0NBUF9TRUdfSVBWNl9TQ1RQCQl8DQo+ ICsJCSBWSVJUQ0hOTDJfQ0FQX1NFR19HRU5FUklDOw0KPiArDQo+ICsJIGNhcHNfbXNnLnJzc19j YXBzID0NCj4gKwkJIFZJUlRDSE5MMl9DQVBfUlNTX0lQVjRfVENQCQl8DQo+ICsJCSBWSVJUQ0hO TDJfQ0FQX1JTU19JUFY0X1VEUAkJfA0KPiArCQkgVklSVENITkwyX0NBUF9SU1NfSVBWNF9TQ1RQ CQl8DQo+ICsJCSBWSVJUQ0hOTDJfQ0FQX1JTU19JUFY0X09USEVSCQl8DQo+ICsJCSBWSVJUQ0hO TDJfQ0FQX1JTU19JUFY2X1RDUAkJfA0KPiArCQkgVklSVENITkwyX0NBUF9SU1NfSVBWNl9VRFAJ CXwNCj4gKwkJIFZJUlRDSE5MMl9DQVBfUlNTX0lQVjZfU0NUUAkJfA0KPiArCQkgVklSVENITkwy X0NBUF9SU1NfSVBWNl9PVEhFUgkJfA0KPiArCQkgVklSVENITkwyX0NBUF9SU1NfSVBWNF9BSAkJ fA0KPiArCQkgVklSVENITkwyX0NBUF9SU1NfSVBWNF9FU1AJCXwNCj4gKwkJIFZJUlRDSE5MMl9D QVBfUlNTX0lQVjRfQUhfRVNQCQl8DQo+ICsJCSBWSVJUQ0hOTDJfQ0FQX1JTU19JUFY2X0FICQl8 DQo+ICsJCSBWSVJUQ0hOTDJfQ0FQX1JTU19JUFY2X0VTUAkJfA0KPiArCQkgVklSVENITkwyX0NB UF9SU1NfSVBWNl9BSF9FU1A7DQo+ICsNCj4gKwkgY2Fwc19tc2cuaHNwbGl0X2NhcHMgPQ0KPiAr CQkgVklSVENITkwyX0NBUF9SWF9IU1BMSVRfQVRfTDIJCXwNCj4gKwkJIFZJUlRDSE5MMl9DQVBf UlhfSFNQTElUX0FUX0wzCQl8DQo+ICsJCSBWSVJUQ0hOTDJfQ0FQX1JYX0hTUExJVF9BVF9MNFY0 CXwNCj4gKwkJIFZJUlRDSE5MMl9DQVBfUlhfSFNQTElUX0FUX0w0VjY7DQo+ICsNCj4gKwkgY2Fw c19tc2cucnNjX2NhcHMgPQ0KPiArCQkgVklSVENITkwyX0NBUF9SU0NfSVBWNF9UQ1AJCXwNCj4g KwkJIFZJUlRDSE5MMl9DQVBfUlNDX0lQVjRfU0NUUAkJfA0KPiArCQkgVklSVENITkwyX0NBUF9S U0NfSVBWNl9UQ1AJCXwNCj4gKwkJIFZJUlRDSE5MMl9DQVBfUlNDX0lQVjZfU0NUUDsNCj4gKw0K PiArCSBjYXBzX21zZy5vdGhlcl9jYXBzID0NCj4gKwkJIFZJUlRDSE5MMl9DQVBfUkRNQQkJCXwN Cj4gKwkJIFZJUlRDSE5MMl9DQVBfU1JJT1YJCQl8DQo+ICsJCSBWSVJUQ0hOTDJfQ0FQX01BQ0ZJ TFRFUgkJfA0KPiArCQkgVklSVENITkwyX0NBUF9GTE9XX0RJUkVDVE9SCQl8DQo+ICsJCSBWSVJU Q0hOTDJfQ0FQX1NQTElUUV9RU0NIRUQJCXwNCj4gKwkJIFZJUlRDSE5MMl9DQVBfQ1JDCQkJfA0K PiArCQkgVklSVENITkwyX0NBUF9XQl9PTl9JVFIJCXwNCj4gKwkJIFZJUlRDSE5MMl9DQVBfUFJP TUlTQwkJCXwNCj4gKwkJIFZJUlRDSE5MMl9DQVBfTElOS19TUEVFRAkJfA0KPiArCQkgVklSVENI TkwyX0NBUF9WTEFOOw0KPiArDQo+ICsJYXJncy5vcHMgPSBWSVJUQ0hOTDJfT1BfR0VUX0NBUFM7 DQo+ICsJYXJncy5pbl9hcmdzID0gKHVpbnQ4X3QgKikmY2Fwc19tc2c7DQo+ICsJYXJncy5pbl9h cmdzX3NpemUgPSBzaXplb2YoY2Fwc19tc2cpOw0KPiArCWFyZ3Mub3V0X2J1ZmZlciA9IGFkYXB0 ZXItPm1ieF9yZXNwOw0KPiArCWFyZ3Mub3V0X3NpemUgPSBJRFBGX0RGTFRfTUJYX0JVRl9TSVpF Ow0KPiArDQo+ICsJZXJyID0gaWRwZl9leGVjdXRlX3ZjX2NtZChhZGFwdGVyLCAmYXJncyk7DQo+ ICsJaWYgKGVycikgew0KPiArCQlQTURfRFJWX0xPRyhFUlIsDQo+ICsJCQkgICAgIkZhaWxlZCB0 byBleGVjdXRlIGNvbW1hbmQgb2YNCj4gVklSVENITkwyX09QX0dFVF9DQVBTIik7DQo+ICsJCXJl dHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJcnRlX21lbWNweShhZGFwdGVyLT5jYXBzLCBhcmdz Lm91dF9idWZmZXIsIHNpemVvZihjYXBzX21zZykpOw0KPiArDQo+ICsJcmV0dXJuIGVycjsNCj4g K30NCj4gKw0KPiAraW50DQo+ICtpZHBmX2NyZWF0ZV92cG9ydChfX3J0ZV91bnVzZWQgc3RydWN0 IHJ0ZV9ldGhfZGV2ICpkZXYpIHsNCj4gKwl1aW50MTZfdCBpZHggPSBhZGFwdGVyLT5uZXh0X3Zw b3J0X2lkeDsNCj4gKwlzdHJ1Y3QgdmlydGNobmwyX2NyZWF0ZV92cG9ydCAqdnBvcnRfcmVxX2lu Zm8gPQ0KPiArCQkoc3RydWN0IHZpcnRjaG5sMl9jcmVhdGVfdnBvcnQgKilhZGFwdGVyLQ0KPiA+ dnBvcnRfcmVxX2luZm9baWR4XTsNCj4gKwlzdHJ1Y3QgdmlydGNobmwyX2NyZWF0ZV92cG9ydCB2 cG9ydF9tc2c7DQo+ICsJc3RydWN0IGlkcGZfY21kX2luZm8gYXJnczsNCj4gKwlpbnQgZXJyID0g LTE7DQo+ICsNCj4gKwltZW1zZXQoJnZwb3J0X21zZywgMCwgc2l6ZW9mKHN0cnVjdCB2aXJ0Y2hu bDJfY3JlYXRlX3Zwb3J0KSk7DQo+ICsJdnBvcnRfbXNnLnZwb3J0X3R5cGUgPSB2cG9ydF9yZXFf aW5mby0+dnBvcnRfdHlwZTsNCj4gKwl2cG9ydF9tc2cudHhxX21vZGVsID0gdnBvcnRfcmVxX2lu Zm8tPnR4cV9tb2RlbDsNCj4gKwl2cG9ydF9tc2cucnhxX21vZGVsID0gdnBvcnRfcmVxX2luZm8t PnJ4cV9tb2RlbDsNCj4gKwl2cG9ydF9tc2cubnVtX3R4X3EgPSB2cG9ydF9yZXFfaW5mby0+bnVt X3R4X3E7DQo+ICsJdnBvcnRfbXNnLm51bV90eF9jb21wbHEgPSB2cG9ydF9yZXFfaW5mby0+bnVt X3R4X2NvbXBscTsNCj4gKwl2cG9ydF9tc2cubnVtX3J4X3EgPSB2cG9ydF9yZXFfaW5mby0+bnVt X3J4X3E7DQo+ICsJdnBvcnRfbXNnLm51bV9yeF9idWZxID0gdnBvcnRfcmVxX2luZm8tPm51bV9y eF9idWZxOw0KPiArDQo+ICsJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOw0KPiArCWFy Z3Mub3BzID0gVklSVENITkwyX09QX0NSRUFURV9WUE9SVDsNCj4gKwlhcmdzLmluX2FyZ3MgPSAo dWludDhfdCAqKSZ2cG9ydF9tc2c7DQo+ICsJYXJncy5pbl9hcmdzX3NpemUgPSBzaXplb2YodnBv cnRfbXNnKTsNCj4gKwlhcmdzLm91dF9idWZmZXIgPSBhZGFwdGVyLT5tYnhfcmVzcDsNCj4gKwlh cmdzLm91dF9zaXplID0gSURQRl9ERkxUX01CWF9CVUZfU0laRTsNCj4gKw0KPiArCWVyciA9IGlk cGZfZXhlY3V0ZV92Y19jbWQoYWRhcHRlciwgJmFyZ3MpOw0KPiArCWlmIChlcnIpIHsNCj4gKwkJ UE1EX0RSVl9MT0coRVJSLA0KPiArCQkJICAgICJGYWlsZWQgdG8gZXhlY3V0ZSBjb21tYW5kIG9m DQo+IFZJUlRDSE5MMl9PUF9DUkVBVEVfVlBPUlQiKTsNCj4gKwkJcmV0dXJuIGVycjsNCj4gKwl9 DQo+ICsNCj4gKwlpZiAoIWFkYXB0ZXItPnZwb3J0X3JlY3ZfaW5mb1tpZHhdKSB7DQo+ICsJCWFk YXB0ZXItPnZwb3J0X3JlY3ZfaW5mb1tpZHhdID0gcnRlX3ptYWxsb2MoTlVMTCwNCj4gKw0KPiBJ RFBGX0RGTFRfTUJYX0JVRl9TSVpFLCAwKTsNCj4gKwkJaWYgKCFhZGFwdGVyLT52cG9ydF9yZWN2 X2luZm9baWR4XSkgew0KPiArCQkJUE1EX0lOSVRfTE9HKEVSUiwgIkZhaWxlZCB0byBhbGxvYw0K PiB2cG9ydF9yZWN2X2luZm8uIik7DQo+ICsJCQlyZXR1cm4gZXJyOw0KPiArCQl9DQo+ICsJfQ0K PiArCXJ0ZV9tZW1jcHkoYWRhcHRlci0+dnBvcnRfcmVjdl9pbmZvW2lkeF0sIGFyZ3Mub3V0X2J1 ZmZlciwNCj4gKwkJICAgSURQRl9ERkxUX01CWF9CVUZfU0laRSk7DQo+ICsJcmV0dXJuIGVycjsN Cj4gK30NCj4gKw0KPiAraW50DQo+ICtpZHBmX2Rlc3Ryb3lfdnBvcnQoc3RydWN0IGlkcGZfdnBv cnQgKnZwb3J0KSB7DQo+ICsJc3RydWN0IHZpcnRjaG5sMl92cG9ydCB2Y192cG9ydDsNCj4gKwlz dHJ1Y3QgaWRwZl9jbWRfaW5mbyBhcmdzOw0KPiArCWludCBlcnI7DQo+ICsNCj4gKwl2Y192cG9y dC52cG9ydF9pZCA9IHZwb3J0LT52cG9ydF9pZDsNCj4gKw0KPiArCW1lbXNldCgmYXJncywgMCwg c2l6ZW9mKGFyZ3MpKTsNCj4gKwlhcmdzLm9wcyA9IFZJUlRDSE5MMl9PUF9ERVNUUk9ZX1ZQT1JU Ow0KPiArCWFyZ3MuaW5fYXJncyA9ICh1aW50OF90ICopJnZjX3Zwb3J0Ow0KPiArCWFyZ3MuaW5f YXJnc19zaXplID0gc2l6ZW9mKHZjX3Zwb3J0KTsNCj4gKwlhcmdzLm91dF9idWZmZXIgPSBhZGFw dGVyLT5tYnhfcmVzcDsNCj4gKwlhcmdzLm91dF9zaXplID0gSURQRl9ERkxUX01CWF9CVUZfU0la RTsNCj4gKw0KPiArCWVyciA9IGlkcGZfZXhlY3V0ZV92Y19jbWQoYWRhcHRlciwgJmFyZ3MpOw0K PiArCWlmIChlcnIpIHsNCj4gKwkJUE1EX0RSVl9MT0coRVJSLCAiRmFpbGVkIHRvIGV4ZWN1dGUg Y29tbWFuZCBvZg0KPiBWSVJUQ0hOTDJfT1BfREVTVFJPWV9WUE9SVCIpOw0KPiArCQlyZXR1cm4g ZXJyOw0KPiArCX0NCj4gKw0KPiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICsNCj4gK2ludA0KPiAr aWRwZl9lbmFfZGlzX3Zwb3J0KHN0cnVjdCBpZHBmX3Zwb3J0ICp2cG9ydCwgYm9vbCBlbmFibGUp IHsNCj4gKwlzdHJ1Y3QgdmlydGNobmwyX3Zwb3J0IHZjX3Zwb3J0Ow0KPiArCXN0cnVjdCBpZHBm X2NtZF9pbmZvIGFyZ3M7DQo+ICsJaW50IGVycjsNCj4gKw0KPiArCXZjX3Zwb3J0LnZwb3J0X2lk ID0gdnBvcnQtPnZwb3J0X2lkOw0KPiArCWFyZ3Mub3BzID0gZW5hYmxlID8gVklSVENITkwyX09Q X0VOQUJMRV9WUE9SVCA6DQo+ICsJCQkgICAgVklSVENITkwyX09QX0RJU0FCTEVfVlBPUlQ7DQo+ ICsJYXJncy5pbl9hcmdzID0gKHU4ICopJnZjX3Zwb3J0Ow0KPiArCWFyZ3MuaW5fYXJnc19zaXpl ID0gc2l6ZW9mKHZjX3Zwb3J0KTsNCj4gKwlhcmdzLm91dF9idWZmZXIgPSBhZGFwdGVyLT5tYnhf cmVzcDsNCj4gKwlhcmdzLm91dF9zaXplID0gSURQRl9ERkxUX01CWF9CVUZfU0laRTsNCj4gKw0K PiArCWVyciA9IGlkcGZfZXhlY3V0ZV92Y19jbWQoYWRhcHRlciwgJmFyZ3MpOw0KPiArCWlmIChl cnIpIHsNCj4gKwkJUE1EX0RSVl9MT0coRVJSLCAiRmFpbGVkIHRvIGV4ZWN1dGUgY29tbWFuZCBv Zg0KPiBWSVJUQ0hOTDJfT1BfJXNfVlBPUlQiLA0KPiArCQkJICAgIGVuYWJsZSA/ICJFTkFCTEUi IDogIkRJU0FCTEUiKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gZXJyOw0KPiArfQ0KPiArDQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZHBmL21lc29uLmJ1aWxkIGIvZHJpdmVycy9uZXQv aWRwZi9tZXNvbi5idWlsZA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleCAwMDAwMDAwMDAw Li4zYTg0MTYyZjkzDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9uZXQvaWRwZi9t ZXNvbi5idWlsZA0KPiBAQCAtMCwwICsxLDE4IEBADQo+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMy1DbGF1c2UgIyBDb3B5cmlnaHQoYykgMjAyMiBJbnRlbA0KPiArQ29ycG9yYXRp b24NCj4gKw0KPiAraWYgaXNfd2luZG93cw0KPiArCWJ1aWxkID0gZmFsc2UNCj4gKwlyZWFzb24g PSAnbm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzJw0KPiArCXN1YmRpcl9kb25lKCkNCj4gK2VuZGlm DQo+ICsNCj4gK3N1YmRpcignYmFzZScpDQo+ICtvYmpzID0gW2Jhc2Vfb2Jqc10NCj4gKw0KPiAr c291cmNlcyA9IGZpbGVzKA0KPiArCSdpZHBmX2V0aGRldi5jJywNCj4gKwknaWRwZl92Y2hubC5j JywNCj4gKykNCj4gKw0KPiAraW5jbHVkZXMgKz0gaW5jbHVkZV9kaXJlY3RvcmllcygnYmFzZScp DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZHBmL3ZlcnNpb24ubWFwIGIvZHJpdmVycy9u ZXQvaWRwZi92ZXJzaW9uLm1hcA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleCAwMDAwMDAw MDAwLi5iN2RhMjI0ODYwDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9uZXQvaWRw Zi92ZXJzaW9uLm1hcA0KPiBAQCAtMCwwICsxLDMgQEANCj4gK0RQREtfMjIgew0KPiArCWxvY2Fs OiAqOw0KPiArfTsNCj4gXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlDQo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL25ldC9tZXNvbi5idWlsZCBiL2RyaXZlcnMvbmV0L21lc29uLmJ1aWxkIGluZGV4 DQo+IGUzNTY1MmZlNjMuLjg5MTAxNTQ1NDQgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbmV0L21l c29uLmJ1aWxkDQo+ICsrKyBiL2RyaXZlcnMvbmV0L21lc29uLmJ1aWxkDQo+IEBAIC0yOCw2ICsy OCw3IEBAIGRyaXZlcnMgPSBbDQo+ICAgICAgICAgICdpNDBlJywNCj4gICAgICAgICAgJ2lhdmYn LA0KPiAgICAgICAgICAnaWNlJywNCj4gKyAgICAgICAgJ2lkcGYnLA0KPiAgICAgICAgICAnaWdj JywNCj4gICAgICAgICAgJ2lvbmljJywNCj4gICAgICAgICAgJ2lwbjNrZScsDQo+IC0tDQo+IDIu MjUuMQ0KSSdkIGxpa2UgdG8gcmVwb3J0IHRoYXQgdGhpcyBwYXRjaCBpcyBjYXVzaW5nIGEgY29t cGlsYXRpb24gZmFpbHVyZSBvdmVyIHRoZSBtYWluIHRyZWUgMjIuMTEtcmMyOg0KDQp0aGlzIGlz IHRoZSBmYWlsdXJlIHdoaWNoIEkgc2VlOg0KaW5nLWZpZWxkLWluaXRpYWxpemVycyAtRF9HTlVf U09VUkNFIC1mUElDIC1tYXJjaD1uYXRpdmUgLW1uby1hdng1MTJmIC1tbm8tYXZ4NTEyZiAtREFM TE9XX0VYUEVSSU1FTlRBTF9BUEkgLURBTExPV19JTlRFUk5BTF9BUEkgLURSVEVfTE9HX0RFRkFV TFRfTE9HVFlQRT1wbWQubmV0LmlkcGYgLU1EIC1NUSBkcml2ZXJzL2xpYnRtcF9ydGVfbmV0X2lk cGYuYS5wL25ldF9pZHBmX2lkcGZfdmNobmwuYy5vIC1NRiBkcml2ZXJzL2xpYnRtcF9ydGVfbmV0 X2lkcGYuYS5wL25ldF9pZHBmX2lkcGZfdmNobmwuYy5vLmQgLW8gZHJpdmVycy9saWJ0bXBfcnRl X25ldF9pZHBmLmEucC9uZXRfaWRwZl9pZHBmX3ZjaG5sLmMubyAtYyAuLi8uLi9yb290L2RwZGsv ZHJpdmVycy9uZXQvaWRwZi9pZHBmX3ZjaG5sLmMNCi4uLy4uL3Jvb3QvZHBkay9kcml2ZXJzL25l dC9pZHBmL2lkcGZfdmNobmwuYzoxNDI6MTM6IGVycm9yOiBjb21wYXJpc29uIG9mIGNvbnN0YW50 IDUyMiB3aXRoIGV4cHJlc3Npb24gb2YgdHlwZSAnZW51bSB2aXJ0Y2hubF9vcHMnIGlzIGFsd2F5 cyBmYWxzZSBbLVdlcnJvciwtV3RhdXRvbG9naWNhbC1jb25zdGFudC1vdXQtb2YtcmFuZ2UtY29t cGFyZV0NCiAgICAgICAgaWYgKG9wY29kZSA9PSBWSVJUQ0hOTDJfT1BfRVZFTlQpIHsNCiAgICAg ICAgICAgIH5+fn5+fiBeICB+fn5+fn5+fn5+fn5+fn5+fn4NCjEgZXJyb3IgZ2VuZXJhdGVkLg0K WzE0MjQvMjU1OV0gR2VuZXJhdGluZyBlYWwuc3ltX2NoayB3aXRoIGEgbWVzb25fZXhlLnB5IGN1 c3RvbSBjb21tYW5kDQpuaW5qYTogYnVpbGQgc3RvcHBlZDogc3ViY29tbWFuZCBmYWlsZWQuDQoN CkFuZCBpdCdzIGhhcHBlbmluZyB3aXRoIHRoZSBDTEFORyBjb21waWxlcjoNCmNsYW5nIHZlcnNp b24gMy40LjIgKHRhZ3MvUkVMRUFTRV8zNC9kb3QyLWZpbmFsKQ0KDQpLaW5kZXN0IHJlZ2FyZHMs DQpSYXNsYW4gRGFyYXdzaGVoDQoNCg==