From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 0780E444E1 for ; Wed, 12 Jul 2023 10:18:22 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8F5BB68C5EF; Wed, 12 Jul 2023 13:18:18 +0300 (EEST) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 297A668C38E for ; Wed, 12 Jul 2023 13:18:08 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1689157095; x=1720693095; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=P9WJ8LWCtUW5OsTpVsZuN8d5aVl+3HeDs0mXKyzGCVM=; b=m9wnEj2KYzCeSy7tcx6a3mNyuMdwpmBdpEGOTxlawuPe5WZP4Z/uSYUj 80Bqypt3oY9nsZxthHamfVqvSbBjtYfMNkfcBz1hDv8SXnzI6io5kVBHu Uzcs9leg38BGYEQCfETN0N6+JDgEvo0qgFPozswdfqE5zoB8zRC0mhqeD V2L4C7DDX7HJb9ZRbFH/P+NzxWFUazUp7OETmTZEKKaT2T77OG2QnDF9T oPTxgtgPaudB0/jFL7UXic2y6rXOPdCF04/RzzWsQJYscnDx/r/1U85dJ 9vqNjOV88NPV5qkLRjb9LFAVoi/lHp9kihWNE0riZ2zoQtSmOx4KFlZFL Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10768"; a="430983997" X-IronPort-AV: E=Sophos;i="6.01,199,1684825200"; d="scan'208";a="430983997" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Jul 2023 03:18:05 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10768"; a="811516651" X-IronPort-AV: E=Sophos;i="6.01,199,1684825200"; d="scan'208";a="811516651" Received: from orsmsx601.amr.corp.intel.com ([10.22.229.14]) by FMSMGA003.fm.intel.com with ESMTP; 12 Jul 2023 03:18:05 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27; Wed, 12 Jul 2023 03:18:04 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.27 via Frontend Transport; Wed, 12 Jul 2023 03:18:04 -0700 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.173) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.27; Wed, 12 Jul 2023 03:18:03 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Y5kIjnVZdaHfj1z6l+NH+7/aBWCQOphQeN71fFCjZ4qSaIuYnkVRrrBcqVkeq4YsOczH1s2Xk8lXNiAt+o9X7XmRVvkVU054fZeNRbOZ1bhWZ2hIlVgVCB2djUAp7v1aM5yvAUyrcE9OxkuQyRbftruUTusShVuEbJxgTdwcyY3EfhYW/vE9onl/+PAbRQHpwpNbbYLDHplpqM233kOfLUF2IhK+eodRv/zBh4h/cqUCw+Wr9xWuWTp4czD/5QYtFC2obh955X4CTWUJSEuW1WD/BwPqzrRHSBFdByNLaDLqvBLMImCE1djOuL8CY9zYuPo0GKUC8pmiSSWKyBz5hQ== 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=P9WJ8LWCtUW5OsTpVsZuN8d5aVl+3HeDs0mXKyzGCVM=; b=FXHIJKrnn/qpIBjCRej+anHc9vSqHd8avcm404aJWDIlob1LCfP7qZUo3yDWe2AS0eMMYHfzHVcG7C8xVPT4NioD3E+ldha0uzpRlClco9THQLe2Ugf0FC4bxHglZ8n68bJYHmApgZHXANSP9xrzZjTpK/fMU5ZFK68ePJvzcMancqI+ssZvLiocKRMUxX79tChwyHLwk476ZZYu5sSyrD3JrnnnVPj9+A+JHscuDLdOt9dW05KALM57B4gZErUe9gk+H16VvRD/ZjmRLM3jYu4oGnFB96hXm/d9FicYs3Y5F7eYN9J/Y61TNAJ+X8Ua+wQxE9nfh+Jbs7m0lnjjIA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from SN6PR11MB2990.namprd11.prod.outlook.com (2603:10b6:805:cf::21) by MW4PR11MB7078.namprd11.prod.outlook.com (2603:10b6:303:219::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6565.30; Wed, 12 Jul 2023 10:17:59 +0000 Received: from SN6PR11MB2990.namprd11.prod.outlook.com ([fe80::cd4f:cf48:9c2e:95d3]) by SN6PR11MB2990.namprd11.prod.outlook.com ([fe80::cd4f:cf48:9c2e:95d3%5]) with mapi id 15.20.6588.017; Wed, 12 Jul 2023 10:17:59 +0000 From: "Wu, Tong1" To: "Xiang, Haihao" , "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH v3 2/9] avcodec: add D3D12VA hardware accelerated H264 decoding Thread-Index: AQHZlSnVEupWu1Yub0eGeAJJ3E5BZq+0ak0AgAG/YVA= Date: Wed, 12 Jul 2023 10:17:58 +0000 Message-ID: References: <20230602080701.1754-1-tong1.wu@intel.com> <20230602080701.1754-2-tong1.wu@intel.com> In-Reply-To: Accept-Language: zh-CN, 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=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SN6PR11MB2990:EE_|MW4PR11MB7078:EE_ x-ms-office365-filtering-correlation-id: cb2363f0-8009-488c-b9f0-08db82c1444a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: y17+2yv/JJW6A3M+c0UsCtsIdJZGPQRoWGbIy5JlFkLhma9xokvV4gFW/LKGlVj6yIUox0pPvNVB8AtiQ/MnFKFp7acXtoJS21+6ENTMKSzyHWbEWtHxnSEo9PiOUxo23ZEGvv4nV9ujqLZ1qj15bbj3IryePLcct/TTGgux46j2wmaF8bbWP/v7kiiQxNA9tdThoInxkr3ySSpGOgSVtVLvQjGtq/C0vVmRq4e/E/XsVdwTUzA2vnKJ63yo1d/L8GqY0zzyiWCkjIWUZmzHEaeVzix9J6Y9Ic4JHDK+V64HpOmgpWIhsEs1X76U9LiV8y+EHAUSCbQKIkwIKOeT2+fDCzqnGm3DhEV5irXxPSi0l9D540HhEz+w01acuQsXWSsV+AJAjs8bYGgjrWUGbqTVQ2UqJvp4fd0bY5I9Hv5QLt3vaWtFqI4SYeoHnHNyX/7uL+98HE3m9PTuMsUxflh3JzOBxZLps2Ib2Vum2xIJYsDMG50jx/h28ErC5Exb4Y9SRiPfADPnbYQ0bTDC1iPVFOXLjuYqdrRZUoMZnrduBR7jTkC/m434XwoC/rZJmOBLH3gQjJurwfmk1Go65YheRfyexhpH+tLDalpcAzyrVHlY6xiVgO0+W8rVWpkSycBBG8RkqnmpkzPTEUWWx8AsMvaPj8ekyzZSyGOQhIWkl3m3d8//9z4Qa0vvV7Dh x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN6PR11MB2990.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(396003)(376002)(346002)(39860400002)(136003)(366004)(451199021)(8676002)(8936002)(19627235002)(41300700001)(110136005)(7696005)(55016003)(5660300002)(52536014)(2906002)(316002)(30864003)(71200400001)(4326008)(66556008)(66446008)(66476007)(64756008)(76116006)(66946007)(9686003)(82960400001)(33656002)(478600001)(966005)(186003)(86362001)(38100700002)(122000001)(83380400001)(6506007)(26005)(38070700005)(2004002)(21314003)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VjZQOWs5L2FPV0xlNlhFa09RcjN4T3QvWVdGYzRRQzMvNEZpWXFFaVc2OSty?= =?utf-8?B?UjJXYjQxNzc1RlZwajN4dkNQL3orVHVjY0NYWm5FL1Jtd2cxUXlMYkM3MXJ4?= =?utf-8?B?aVpOUm9pdVhmM0syMnloeUhnb0d1WnBVQ0Q3YkJsVkRqYUEyeW9kVXVKQlVz?= =?utf-8?B?Y0IzU0tPZkwwNmtUbmM1Umc2cE1yRUlxbTZLdGtnWU9RR0R4ei9tYjFVaTlM?= =?utf-8?B?aGJxbWoxVUZJREtDNTUrcG0yYUU3NWN0dndaR0pLOTdBeUNTKzJLeGlmM29R?= =?utf-8?B?b1JwZzJxNmJJamhQSDNkL1psUzBoZ2hCUzBnS2xocDJ6YkNvNmgwQ1ZvdXl3?= =?utf-8?B?U2htQVJodGFOaTdLcUpsYlFLbVdrM0ZRcnNWVk5NcDVYbkg1OTRxY1JPeVJm?= =?utf-8?B?MVpqcnR1ZStuQjFDTXA0dUpSRE1SWXJrK1NqQXN1STlsZUwvZjhBMk9HSnpW?= =?utf-8?B?OWJ3eWZxV28rTW5oN1pjLzFkQzRuUUFZMjFWTERnZHJEQ1hKQVNtajZUUGJV?= =?utf-8?B?UlVKQnlQekdhNEFKMWpuZXhtVHo2dmkwakRKVldZeER0ZGxBN0p4MVByeklQ?= =?utf-8?B?UWN4WEw4dytsUzVsWnNuMzFCL0xiV0JoTU1Zb0Z3c2M5UThtOW9IZEptQTZR?= =?utf-8?B?RUVpTlBoVzI5NDYxampTUDVXSmdJeHE5Rm1UZzFnZU1wanc3YkRSYzhkYjhC?= =?utf-8?B?ekpnT1VLbGdldVBqRnl6R3V4NWxxU1RuZmY1MTE4V2l0NEV4UmtmL3NMakFS?= =?utf-8?B?QnhicGpTRTByVi9BK0hiYzdVb0ZraUV6L3RnQ2E5eFVQVEVsb3JROU4yTytH?= =?utf-8?B?eC9QNGpjRlVZUTVBVHJRNEdBL3J2ek0zbWNaYkluV2loeGRmUHRETWUwL3pZ?= =?utf-8?B?Y1Yzc3lFMCttRGZQWXdFa1ZXTUxzS0xFV2VSbUxRVEkyTnJZYWNld3Iyb0RJ?= =?utf-8?B?RGs0eGs1cFFtdklBZFpQVnBac0cxd3U0NEthS3hHRzhWdFNuYS80R3BIdTRH?= =?utf-8?B?b1UyR1FIVmR6ckJva0hTRnlmZldwREZCTGYxT3VDODA1WXQxQlpqNzJ2UHFD?= =?utf-8?B?M0x4UWhSWm1ZcDVZTWJ2YzhyeksvUTJMaHc5cGJXVXZBcU50WjV2ZHV4QitO?= =?utf-8?B?ZElXQTFDWWpVSTNLeGIrMys0Rks2NkE3V1BRZjE3bFZ5STVsVXUxK2ZHQ203?= =?utf-8?B?UTVtVEJGWWpzUFZEeHRGUGFZSk43Q3lPcDhpcTdhZThzTFJuRk1pYjVmckNu?= =?utf-8?B?V1ducVZ3V0V2bWN0OEZWUEJkdzVVcllpQU5zMUNPNk1PME43OERKUkgwT0FR?= =?utf-8?B?aUdTUkV3dTB4VEtUQmZJM2o2ZnZtZnZmMkVyZ2c4TEU2aHpOclZHZFlYTDNm?= =?utf-8?B?Q3l5cy81emtSek5TRjladCtFNWdkMmJ3VEw4R1QvMG8zNEVvWHpNVHViSlU5?= =?utf-8?B?WHJDeHBGbFFmYmR0Zk1DV1k2TnM4MElNR1pKZmdweUxkV0hudEYyMTRQYm1R?= =?utf-8?B?Nk5ycVZJaUhHYTdoaVppbnJNVy85Ui8wUDZFdGthSUdPbmVTU253YlNaS0N1?= =?utf-8?B?OWd2aklRRmVmaFd4RC9aeWV4NFNtYzR4bm82TDkzM3FJQlhwNWd3NXBva29D?= =?utf-8?B?emZzdDNEY1JLdmhJVGlZeFV6SHZ2MC9INXU3SHlBRDhoWms1RUVaNW0zdFRx?= =?utf-8?B?NFIwMlI0UDRBWmI3dXkySTl4clZkWk8rMnBCV3JuYytDQ3FiU3lKWFkxclBQ?= =?utf-8?B?ZDlYckk5dHBhV0pMelhJQm15RnIyRkVSUG42MnlMQTlEQTdPRGFPbXZ0NG5s?= =?utf-8?B?V25OZE1KSXJuZkMxcWU5SFVHVE1jSHdOU1I2WGo4Y2VVWlh6OFBCekVFVW1u?= =?utf-8?B?Z1pxREgxUVhlSHMyaW5Gb0ZUSGFveVV4S1k3TVMzelZ5SUtUL3k1dW9zNlpt?= =?utf-8?B?YUJhckoyMUNsRk92QUZiZXpJdEtVaHhkK3R5S3VnUFNOdmU1R0ZVTFNwMzN5?= =?utf-8?B?R1dTNVIxWmpJRDR5SFUwRkhFbmN3RGIxWDNzODdMakFWRVI0c1BpT3pqcWpj?= =?utf-8?B?R2UrdFN4V09hS3cveDIvVFRpR1ZYenN6cmUvL1Zxd2kxMnRjYlJ3OFl2d21r?= =?utf-8?Q?5Lev3zEO7XOC4Drb2cUJlDWio?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2990.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: cb2363f0-8009-488c-b9f0-08db82c1444a X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Jul 2023 10:17:58.8544 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 1tyO+qUDii5/rtd8tBEDsmUa7RwZ5i82pEWEOfxSCMJjDPwmRcXJ95h7yg2twQRlXbj0W1soHwjsIp5wfn5raw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR11MB7078 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH v3 2/9] avcodec: add D3D12VA hardware accelerated H264 decoding X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: "toqsxw@outlook.com" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Pk9uIFZyLCAyMDIzLTA2LTAyIGF0IDE2OjA2ICswODAwLCBUb25nIFd1IHdyb3RlOg0KPj4gRnJv bTogV3UgSmlhbmh1YSA8dG9xc3h3QG91dGxvb2suY29tPg0KPj4NCj4+IFRoZSBpbXBsZW1lbnRh dGlvbiBpcyBiYXNlZCBvbjoNCj4+IGh0dHBzOi8vbGVhcm4ubWljcm9zb2Z0LmNvbS9lbi11cy93 aW5kb3dzL3dpbjMyL21lZGZvdW5kL2RpcmVjdDNkLTEyLQ0KPnZpZGVvLW92ZXJ2aWV3DQo+Pg0K Pj4gV2l0aCB0aGUgRGlyZWN0M0QgMTIgdmlkZW8gZGVjb2Rpbmcgc3VwcG9ydCwgd2UgY2FuIHJl bmRlciBvciBwcm9jZXNzDQo+PiB0aGUgZGVjb2RlZCBpbWFnZXMgYnkgdGhlIHBpeGVsIHNoYWRl cnMgb3IgY29tcHV0ZSBzaGFkZXJzIGRpcmVjdGx5DQo+PiB3aXRob3V0IHRoZSBleHRyYSBjb3B5 IG92ZXJoZWFkLCB3aGljaCBpcyBiZW5lZmljaWFsIGVzcGVjaWFsbHkgaWYgeW91DQo+PiBhcmUg dHJ5aW5nIHRvIHJlbmRlciBvciBwb3N0LXByb2Nlc3MgYSA0SyBvciA4SyB2aWRlby4NCj4+DQo+ PiBUaGUgY29tbWFuZCBiZWxvdyBpcyBob3cgdG8gZW5hYmxlIGQzZDEydmE6DQo+PiBmZm1wZWcg LWh3YWNjZWwgZDNkMTJ2YSAtaSBpbnB1dC5tcDQgb3V0cHV0Lm1wNA0KPj4NCj4+IFNpZ25lZC1v ZmYtYnk6IFd1IEppYW5odWEgPHRvcXN4d0BvdXRsb29rLmNvbT4NCj4+IFNpZ25lZC1vZmYtYnk6 IFRvbmcgV3UgPHRvbmcxLnd1QGludGVsLmNvbT4NCj4+IC0tLQ0KPj4gwqBjb25maWd1cmXCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMiArDQo+PiDCoGxpYmF2Y29k ZWMvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDMgKw0KPj4gwqBsaWJhdmNvZGVjL2Qz ZDExdmEuaMKgwqDCoMKgwqDCoMKgIHzCoMKgIDMgLQ0KPj4gwqBsaWJhdmNvZGVjL2QzZDEydmEu Y8KgwqDCoMKgwqDCoMKgIHwgNTUyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kw0KPj4gwqBsaWJhdmNvZGVjL2QzZDEydmEuaMKgwqDCoMKgwqDCoMKgIHwgMTg0ICsrKysrKysr KysrKw0KPj4gwqBsaWJhdmNvZGVjL2QzZDEydmFfaDI2NC5jwqDCoCB8IDIxMCArKysrKysrKysr KysrKw0KPj4gwqBsaWJhdmNvZGVjL2R4dmEyLmPCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDI0ICsr DQo+PiDCoGxpYmF2Y29kZWMvZHh2YTIuaMKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAzIC0NCj4+ IMKgbGliYXZjb2RlYy9keHZhMl9oMjY0LmPCoMKgwqDCoCB8wqAgMTIgKy0NCj4+IMKgbGliYXZj b2RlYy9keHZhMl9pbnRlcm5hbC5oIHzCoCA2NyArKystLQ0KPj4gwqBsaWJhdmNvZGVjL2gyNjRf c2xpY2UuY8KgwqDCoMKgIHzCoMKgIDQgKw0KPj4gwqBsaWJhdmNvZGVjL2gyNjRkZWMuY8KgwqDC oMKgwqDCoMKgIHzCoMKgIDMgKw0KPj4gwqBsaWJhdmNvZGVjL2h3YWNjZWxzLmjCoMKgwqDCoMKg wqAgfMKgwqAgMSArDQo+PiDCoGxpYmF2Y29kZWMvaHdjb25maWcuaMKgwqDCoMKgwqDCoCB8wqDC oCAyICsNCj4+IMKgMTQgZmlsZXMgY2hhbmdlZCwgMTAyOCBpbnNlcnRpb25zKCspLCA0MiBkZWxl dGlvbnMoLSkNCj4+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvZDNkMTJ2YS5jDQo+ PiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2QzZDEydmEuaA0KPj4gwqBjcmVhdGUg bW9kZSAxMDA2NDQgbGliYXZjb2RlYy9kM2QxMnZhX2gyNjQuYw0KPj4NCj4+IGRpZmYgLS1naXQg YS9jb25maWd1cmUgYi9jb25maWd1cmUNCj4+IGluZGV4IGI4NjA2NGUzNmYuLmY1ZGFkNDY1M2Yg MTAwNzU1DQo+PiAtLS0gYS9jb25maWd1cmUNCj4+ICsrKyBiL2NvbmZpZ3VyZQ0KPj4gQEAgLTMw MzMsNiArMzAzMyw4IEBAIGgyNjRfZDNkMTF2YV9od2FjY2VsX2RlcHM9ImQzZDExdmEiDQo+PiDC oGgyNjRfZDNkMTF2YV9od2FjY2VsX3NlbGVjdD0iaDI2NF9kZWNvZGVyIg0KPj4gwqBoMjY0X2Qz ZDExdmEyX2h3YWNjZWxfZGVwcz0iZDNkMTF2YSINCj4+IMKgaDI2NF9kM2QxMXZhMl9od2FjY2Vs X3NlbGVjdD0iaDI2NF9kZWNvZGVyIg0KPj4gK2gyNjRfZDNkMTJ2YV9od2FjY2VsX2RlcHM9ImQz ZDEydmEiDQo+PiAraDI2NF9kM2QxMnZhX2h3YWNjZWxfc2VsZWN0PSJoMjY0X2RlY29kZXIiDQo+ PiDCoGgyNjRfZHh2YTJfaHdhY2NlbF9kZXBzPSJkeHZhMiINCj4+IMKgaDI2NF9keHZhMl9od2Fj Y2VsX3NlbGVjdD0iaDI2NF9kZWNvZGVyIg0KPj4gwqBoMjY0X252ZGVjX2h3YWNjZWxfZGVwcz0i bnZkZWMiDQo+PiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9NYWtlZmlsZSBiL2xpYmF2Y29kZWMv TWFrZWZpbGUNCj4+IGluZGV4IDlhYWNjMWQ0NzcuLmFlMTQzZDg4MjEgMTAwNjQ0DQo+PiAtLS0g YS9saWJhdmNvZGVjL01ha2VmaWxlDQo+PiArKysgYi9saWJhdmNvZGVjL01ha2VmaWxlDQo+PiBA QCAtOTc3LDYgKzk3Nyw3IEBAIE9CSlMtJChDT05GSUdfQURQQ01fWk9SS19ERUNPREVSKcKgwqDC oMKgwqDCoMKgwqAgKz0NCj5hZHBjbS5vDQo+PiBhZHBjbV9kYXRhLm8NCj4+DQo+PiDCoCMgaGFy ZHdhcmUgYWNjZWxlcmF0b3JzDQo+PiDCoE9CSlMtJChDT05GSUdfRDNEMTFWQSnCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBkeHZhMi5vDQo+PiArT0JKUy0kKENPTkZJ R19EM0QxMlZBKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGR4dmEy Lm8gZDNkMTJ2YS5vDQo+PiDCoE9CSlMtJChDT05GSUdfRFhWQTIpwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGR4dmEyLm8NCj4+IMKgT0JKUy0kKENPTkZJR19O VkRFQynCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gbnZkZWMu bw0KPj4gwqBPQkpTLSQoQ09ORklHX1ZBQVBJKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCArPSB2YWFwaV9kZWNvZGUubw0KPj4gQEAgLTk5NCw2ICs5OTUsNyBAQCBP QkpTLSQoQ09ORklHX0gyNjNfVkFBUElfSFdBQ0NFTCnCoMKgwqDCoMKgwqDCoMKgICs9DQo+dmFh cGlfbXBlZzQubw0KPj4gwqBPQkpTLSQoQ09ORklHX0gyNjNfVklERU9UT09MQk9YX0hXQUNDRUwp wqAgKz0gdmlkZW90b29sYm94Lm8NCj4+IMKgT0JKUy0kKENPTkZJR19IMjY0X0QzRDExVkFfSFdB Q0NFTCnCoMKgwqDCoMKgwqAgKz0gZHh2YTJfaDI2NC5vDQo+PiDCoE9CSlMtJChDT05GSUdfSDI2 NF9EWFZBMl9IV0FDQ0VMKcKgwqDCoMKgwqDCoMKgwqAgKz0gZHh2YTJfaDI2NC5vDQo+PiArT0JK Uy0kKENPTkZJR19IMjY0X0QzRDEyVkFfSFdBQ0NFTCnCoMKgwqDCoMKgwqAgKz0gZHh2YTJfaDI2 NC5vDQo+ZDNkMTJ2YV9oMjY0Lm8NCj4+IMKgT0JKUy0kKENPTkZJR19IMjY0X05WREVDX0hXQUND RUwpwqDCoMKgwqDCoMKgwqDCoCArPSBudmRlY19oMjY0Lm8NCj4+IMKgT0JKUy0kKENPTkZJR19I MjY0X1FTVl9IV0FDQ0VMKcKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IHFzdmRlYy5vDQo+PiDCoE9C SlMtJChDT05GSUdfSDI2NF9WQUFQSV9IV0FDQ0VMKcKgwqDCoMKgwqDCoMKgwqAgKz0gdmFhcGlf aDI2NC5vDQo+PiBAQCAtMTI3Nyw2ICsxMjc5LDcgQEAgU0tJUEhFQURFUlPCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0NCj4+ICVfdGFibGVn ZW4uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXA0KPj4NCj4+IMKgU0tJUEhF QURFUlMtJChDT05GSUdfQU1GKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IGFtZmVuYy5o DQo+PiDCoFNLSVBIRUFERVJTLSQoQ09ORklHX0QzRDExVkEpwqDCoMKgwqDCoMKgwqDCoMKgICs9 IGQzZDExdmEuaCBkeHZhMl9pbnRlcm5hbC5oDQo+PiArU0tJUEhFQURFUlMtJChDT05GSUdfRDNE MTJWQSnCoMKgwqDCoMKgwqDCoMKgwqAgKz0gZDNkMTJ2YS5oDQo+PiDCoFNLSVBIRUFERVJTLSQo Q09ORklHX0RYVkEyKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gZHh2YTIuaCBkeHZhMl9pbnRl cm5hbC5oDQo+PiDCoFNLSVBIRUFERVJTLSQoQ09ORklHX0pOSSnCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCArPSBmZmpuaS5oDQo+PiDCoFNLSVBIRUFERVJTLSQoQ09ORklHX0xDTVMyKcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKz0gZmZsY21zMi5oDQo+PiBkaWZmIC0tZ2l0IGEvbGliYXZjb2Rl Yy9kM2QxMXZhLmggYi9saWJhdmNvZGVjL2QzZDExdmEuaA0KPj4gaW5kZXggNjgxNmI2YzFlNi4u MjdmNDBlNTUxOSAxMDA2NDQNCj4+IC0tLSBhL2xpYmF2Y29kZWMvZDNkMTF2YS5oDQo+PiArKysg Yi9saWJhdmNvZGVjL2QzZDExdmEuaA0KPj4gQEAgLTQ1LDkgKzQ1LDYgQEANCj4+IMKgICogQHsN Cj4+IMKgICovDQo+Pg0KPj4gLSNkZWZpbmUgRkZfRFhWQTJfV09SS0FST1VORF9TQ0FMSU5HX0xJ U1RfWklHWkFHIDEgLy8vPCBXb3JrDQo+YXJvdW5kIGZvcg0KPj4gRGlyZWN0M0QxMSBhbmQgb2xk IFVWRC9VVkQrIEFUSSB2aWRlbyBjYXJkcw0KPj4gLSNkZWZpbmUgRkZfRFhWQTJfV09SS0FST1VO RF9JTlRFTF9DTEVBUlZJREVPwqDCoMKgIDIgLy8vPCBXb3JrDQo+YXJvdW5kIGZvcg0KPj4gRGly ZWN0M0QxMSBhbmQgb2xkIEludGVsIEdQVXMgd2l0aCBDbGVhclZpZGVvIGludGVyZmFjZQ0KPj4g LQ0KPj4gwqAvKioNCj4+IMKgICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBwcm92aWRlcyB0 aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFuZCBkYXRhDQo+PiDCoCAqIHRvIHRoZSBEaXJl Y3QzRDExIEZGbXBlZyBIV0FjY2VsIGltcGxlbWVudGF0aW9uLg0KPj4gZGlmZiAtLWdpdCBhL2xp YmF2Y29kZWMvZDNkMTJ2YS5jIGIvbGliYXZjb2RlYy9kM2QxMnZhLmMNCj4+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0DQo+PiBpbmRleCAwMDAwMDAwMDAwLi43ZjFmYWI3MjUxDQo+PiAtLS0gL2Rldi9u dWxsDQo+PiArKysgYi9saWJhdmNvZGVjL2QzZDEydmEuYw0KPj4gQEAgLTAsMCArMSw1NTIgQEAN Cj4+ICsvKg0KPj4gKyAqIERpcmVjdDNEIDEyIEhXIGFjY2VsZXJhdGlvbiB2aWRlbyBkZWNvZGVy DQo+PiArICoNCj4+ICsgKiBjb3B5cmlnaHQgKGMpIDIwMjItMjAyMyBXdSBKaWFuaHVhIDx0b3Fz eHdAb3V0bG9vay5jb20+DQo+PiArICoNCj4+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1w ZWcuDQo+PiArICoNCj4+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yDQo+PiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KPj4gKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KPj4gKyAqIHZlcnNpb24g Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u Lg0KPj4gKyAqDQo+PiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsDQo+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4+ICsgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqAgU2VlIHRoZQ0KPkdOVQ0KPj4g KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+PiAr ICoNCj4+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljDQo+PiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYg bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KPj4gKyAqIEZvdW5kYXRpb24sIEluYy4s IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMQ0K Pj4gVVNBDQo+PiArICovDQo+PiArDQo+PiArI2luY2x1ZGUgPGFzc2VydC5oPg0KPj4gKyNpbmNs dWRlIDxzdHJpbmcuaD4NCj4+ICsjaW5jbHVkZSA8aW5pdGd1aWQuaD4NCj4+ICsNCj4+ICsjaW5j bHVkZSAibGliYXZ1dGlsL2NvbW1vbi5oIg0KPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvbG9nLmgi DQo+PiArI2luY2x1ZGUgImxpYmF2dXRpbC90aW1lLmgiDQo+PiArI2luY2x1ZGUgImxpYmF2dXRp bC9pbWd1dGlscy5oIg0KPj4gKyNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250ZXh0X2QzZDEydmFf aW50ZXJuYWwuaCINCj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZhLmgi DQo+PiArI2luY2x1ZGUgImF2Y29kZWMuaCINCj4+ICsjaW5jbHVkZSAiZGVjb2RlLmgiDQo+PiAr I2luY2x1ZGUgImQzZDEydmEuaCINCj4+ICsNCj4+ICt0eXBlZGVmIHN0cnVjdCBDb21tYW5kQWxs b2NhdG9yIHsNCj4+ICvCoMKgwqAgSUQzRDEyQ29tbWFuZEFsbG9jYXRvciAqY29tbWFuZF9hbGxv Y2F0b3I7DQo+PiArwqDCoMKgIHVpbnQ2NF90IGZlbmNlX3ZhbHVlOw0KPj4gK30gQ29tbWFuZEFs bG9jYXRvcjsNCj4+ICsNCj4+ICtpbnQgZmZfZDNkMTJ2YV9nZXRfc3VpdGFibGVfbWF4X2JpdHN0 cmVhbV9zaXplKEFWQ29kZWNDb250ZXh0ICphdmN0eCkNCj4+ICt7DQo+PiArwqDCoMKgIEFWSFdG cmFtZXNDb250ZXh0ICpmcmFtZXNfY3R4ID0gRDNEMTJWQV9GUkFNRVNfQ09OVEVYVChhdmN0eCk7 DQo+PiArwqDCoMKgIHJldHVybiBhdl9pbWFnZV9nZXRfYnVmZmVyX3NpemUoZnJhbWVzX2N0eC0+ c3dfZm9ybWF0LCBhdmN0eC0NCj4+ID5jb2RlZF93aWR0aCwgYXZjdHgtPmNvZGVkX2hlaWdodCwg MSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9nZXRfdmFsaWRfY29tbWFu ZF9hbGxvY2F0b3IoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LA0KPj4gSUQzRDEyQ29tbWFuZEFsbG9j YXRvciAqKnBwQWxsb2NhdG9yKQ0KPj4gK3sNCj4+ICvCoMKgwqAgSFJFU1VMVCBocjsNCj4+ICvC oMKgwqAgRDNEMTJWQURlY29kZUNvbnRleHQgKmN0eCA9IEQzRDEyVkFfREVDT0RFX0NPTlRFWFQo YXZjdHgpOw0KPj4gK8KgwqDCoCBDb21tYW5kQWxsb2NhdG9yIGFsbG9jYXRvcjsNCj4+ICsNCj4+ ICvCoMKgwqAgaWYgKGF2X2ZpZm9fcGVlayhjdHgtPmFsbG9jYXRvcl9xdWV1ZSwgJmFsbG9jYXRv ciwgMSwgMCkgPj0gMCkgew0KPj4gK8KgwqDCoMKgwqDCoMKgIHVpbnQ2NF90IGNvbXBsZXRpb24g PSBJRDNEMTJGZW5jZV9HZXRDb21wbGV0ZWRWYWx1ZShjdHgtDQo+PnN5bmNfY3R4LQ0KPj4gPmZl bmNlKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoY29tcGxldGlvbiA+PSBhbGxvY2F0b3IuZmVu Y2VfdmFsdWUpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpwcEFsbG9jYXRvciA9IGFs bG9jYXRvci5jb21tYW5kX2FsbG9jYXRvcjsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2 X2ZpZm9fcmVhZChjdHgtPmFsbG9jYXRvcl9xdWV1ZSwgJmFsbG9jYXRvciwgMSk7DQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsNCj4+ICvCoMKgwqDCoMKgwqDCoCB9DQo+PiAr wqDCoMKgIH0NCj4+ICsNCj4+ICvCoMKgwqAgaHIgPSBJRDNEMTJEZXZpY2VfQ3JlYXRlQ29tbWFu ZEFsbG9jYXRvcihjdHgtPmRldmljZV9jdHgtPmRldmljZSwNCj4+IEQzRDEyX0NPTU1BTkRfTElT VF9UWVBFX1ZJREVPX0RFQ09ERSwNCj4+ICvCoMKgwqDCoMKgwqDCoCAmSUlEX0lEM0QxMkNvbW1h bmRBbGxvY2F0b3IsIHBwQWxsb2NhdG9yKTsNCj4+ICvCoMKgwqAgaWYgKEZBSUxFRChocikpIHsN Cj4+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0 byBjcmVhdGUgYSBuZXcgY29tbWFuZA0KPj4gYWxsb2NhdG9yIVxuIik7DQo+PiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsNCj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8Kg wqDCoCByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBkM2QxMnZhX2Rpc2Nh cmRfY29tbWFuZF9hbGxvY2F0b3IoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LA0KPj4gSUQzRDEyQ29t bWFuZEFsbG9jYXRvciAqcEFsbG9jYXRvciwgdWludDY0X3QgZmVuY2VfdmFsdWUpDQo+PiArew0K Pj4gK8KgwqDCoCBEM0QxMlZBRGVjb2RlQ29udGV4dCAqY3R4ID0gRDNEMTJWQV9ERUNPREVfQ09O VEVYVChhdmN0eCk7DQo+PiArDQo+PiArwqDCoMKgIENvbW1hbmRBbGxvY2F0b3IgYWxsb2NhdG9y ID0gew0KPj4gK8KgwqDCoMKgwqDCoMKgIC5jb21tYW5kX2FsbG9jYXRvciA9IHBBbGxvY2F0b3Is DQo+PiArwqDCoMKgwqDCoMKgwqAgLmZlbmNlX3ZhbHVlID0gZmVuY2VfdmFsdWUNCj4+ICvCoMKg wqAgfTsNCj4+ICsNCj4+ICvCoMKgwqAgaWYgKGF2X2ZpZm9fd3JpdGUoY3R4LT5hbGxvY2F0b3Jf cXVldWUsICZhbGxvY2F0b3IsIDEpIDwgMCkgew0KPj4gK8KgwqDCoMKgwqDCoMKgIEQzRDEyX09C SkVDVF9SRUxFQVNFKHBBbGxvY2F0b3IpOw0KPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7DQo+PiArwqDCoMKgIH0NCj4+ICsNCj4+ICvCoMKgwqAgcmV0dXJuIDA7DQo+ PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGJ1ZnJlZl9mcmVlX2ludGVyZmFjZSh2b2lkICpv cGFxdWUsIHVpbnQ4X3QgKmRhdGEpDQo+PiArew0KPj4gK8KgwqDCoCBEM0QxMl9PQkpFQ1RfUkVM RUFTRShvcGFxdWUpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgQVZCdWZmZXJSZWYgKmJ1ZnJl Zl93cmFwX2ludGVyZmFjZShJVW5rbm93biAqaWZhY2UpDQo+PiArew0KPj4gK8KgwqDCoCByZXR1 cm4gYXZfYnVmZmVyX2NyZWF0ZSgodWludDhfdCopaWZhY2UsIDEsIGJ1ZnJlZl9mcmVlX2ludGVy ZmFjZSwgaWZhY2UsDQo+PiAwKTsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBkM2QxMnZh X2NyZWF0ZV9idWZmZXIoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBVSU5UIHNpemUsDQo+PiBJRDNE MTJSZXNvdXJjZSAqKnBwUmVzb3VjZSkNCj4+ICt7DQo+PiArwqDCoMKgIEQzRDEyVkFEZWNvZGVD b250ZXh0ICpjdHggPSBEM0QxMlZBX0RFQ09ERV9DT05URVhUKGF2Y3R4KTsNCj4+ICsNCj4+ICvC oMKgwqAgRDNEMTJfSEVBUF9QUk9QRVJUSUVTIGhlYXBfcHJvcHMgPSB7IC5UeXBlID0NCj5EM0Qx Ml9IRUFQX1RZUEVfVVBMT0FEIH07DQo+PiArDQo+PiArwqDCoMKgIEQzRDEyX1JFU09VUkNFX0RF U0MgZGVzYyA9IHsNCj4+ICvCoMKgwqDCoMKgwqDCoCAuRGltZW5zaW9uwqDCoMKgwqDCoMKgwqAg PSBEM0QxMl9SRVNPVVJDRV9ESU1FTlNJT05fQlVGRkVSLA0KPj4gK8KgwqDCoMKgwqDCoMKgIC5B bGlnbm1lbnTCoMKgwqDCoMKgwqDCoCA9DQo+RDNEMTJfREVGQVVMVF9SRVNPVVJDRV9QTEFDRU1F TlRfQUxJR05NRU5ULA0KPj4gK8KgwqDCoMKgwqDCoMKgIC5XaWR0aMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgPSBzaXplLA0KPj4gK8KgwqDCoMKgwqDCoMKgIC5IZWlnaHTCoMKgwqDCoMKgwqDCoMKg wqDCoCA9IDEsDQo+PiArwqDCoMKgwqDCoMKgwqAgLkRlcHRoT3JBcnJheVNpemUgPSAxLA0KPj4g K8KgwqDCoMKgwqDCoMKgIC5NaXBMZXZlbHPCoMKgwqDCoMKgwqDCoCA9IDEsDQo+PiArwqDCoMKg wqDCoMKgwqAgLkZvcm1hdMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gRFhHSV9GT1JNQVRfVU5LTk9X TiwNCj4+ICvCoMKgwqDCoMKgwqDCoCAuU2FtcGxlRGVzY8KgwqDCoMKgwqDCoCA9IHsgLkNvdW50 ID0gMSwgLlF1YWxpdHkgPSAwIH0sDQo+PiArwqDCoMKgwqDCoMKgwqAgLkxheW91dMKgwqDCoMKg wqDCoMKgwqDCoMKgID0gRDNEMTJfVEVYVFVSRV9MQVlPVVRfUk9XX01BSk9SLA0KPj4gK8KgwqDC oMKgwqDCoMKgIC5GbGFnc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBEM0QxMl9SRVNPVVJDRV9G TEFHX05PTkUsDQo+PiArwqDCoMKgIH07DQo+PiArDQo+PiArwqDCoMKgIEhSRVNVTFQgaHIgPSBJ RDNEMTJEZXZpY2VfQ3JlYXRlQ29tbWl0dGVkUmVzb3VyY2UoY3R4LT5kZXZpY2VfY3R4LQ0KPj4g PmRldmljZSwgJmhlYXBfcHJvcHMsIEQzRDEyX0hFQVBfRkxBR19OT05FLA0KPj4gK8KgwqDCoMKg wqDCoMKgICZkZXNjLCBEM0QxMl9SRVNPVVJDRV9TVEFURV9HRU5FUklDX1JFQUQsIE5VTEwsDQo+ JklJRF9JRDNEMTJSZXNvdXJjZSwNCj4+IHBwUmVzb3VjZSk7DQo+PiArDQo+PiArwqDCoMKgIGlm IChGQUlMRUQoaHIpKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJGYWlsZWQgdG8gY3JlYXRlIGQzZDEyIGJ1ZmZlci5cbiIpOw0KPj4gK8KgwqDCoMKg wqDCoMKgIHJldHVybsKgIEFWRVJST1IoRUlOVkFMKTsNCj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4g K8KgwqDCoCByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludCBkM2QxMnZhX3dh aXRfZm9yX2dwdShBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQo+PiArew0KPj4gK8KgwqDCoCBEM0Qx MlZBRGVjb2RlQ29udGV4dCAqY3R4wqDCoMKgwqDCoCA9IEQzRDEyVkFfREVDT0RFX0NPTlRFWFQo YXZjdHgpOw0KPj4gK8KgwqDCoCBBVkQzRDEyVkFTeW5jQ29udGV4dCAqc3luY19jdHggPSBjdHgt PnN5bmNfY3R4Ow0KPj4gKw0KPj4gK8KgwqDCoCByZXR1cm4gYXZfZDNkMTJ2YV93YWl0X3F1ZXVl X2lkbGUoc3luY19jdHgsIGN0eC0+Y29tbWFuZF9xdWV1ZSk7DQo+PiArfQ0KPj4gKw0KPj4gK3N0 YXRpYyBpbnQgZDNkMTJ2YV9jcmVhdGVfZGVjb2Rlcl9oZWFwKEFWQ29kZWNDb250ZXh0ICphdmN0 eCkNCj4+ICt7DQo+PiArwqDCoMKgIEQzRDEyVkFEZWNvZGVDb250ZXh0wqDCoCAqY3R4wqDCoMKg wqDCoMKgwqAgPSBEM0QxMlZBX0RFQ09ERV9DT05URVhUKGF2Y3R4KTsNCj4+ICvCoMKgwqAgQVZI V0ZyYW1lc0NvbnRleHTCoMKgwqDCoMKgICpmcmFtZXNfY3R4ID0NCj5EM0QxMlZBX0ZSQU1FU19D T05URVhUKGF2Y3R4KTsNCj4+ICvCoMKgwqAgQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqaHdjdHjC oMKgwqDCoMKgID0gY3R4LT5kZXZpY2VfY3R4Ow0KPj4gKw0KPj4gK8KgwqDCoCBEM0QxMl9WSURF T19ERUNPREVSX0hFQVBfREVTQyBkZXNjID0gew0KPj4gK8KgwqDCoMKgwqDCoMKgIC5Ob2RlTWFz a8KgwqDCoMKgwqAgPSAwLA0KPj4gK8KgwqDCoMKgwqDCoMKgIC5Db25maWd1cmF0aW9uID0gY3R4 LT5jZmcsDQo+PiArwqDCoMKgwqDCoMKgwqAgLkRlY29kZVdpZHRowqDCoCA9IGZyYW1lc19jdHgt PndpZHRoLA0KPj4gK8KgwqDCoMKgwqDCoMKgIC5EZWNvZGVIZWlnaHTCoCA9IGZyYW1lc19jdHgt PmhlaWdodCwNCj4+ICvCoMKgwqDCoMKgwqDCoCAuRm9ybWF0wqDCoMKgwqDCoMKgwqAgPSBhdl9k M2QxMnZhX21hcF9zd190b19od19mb3JtYXQoZnJhbWVzX2N0eC0NCj4+ID5zd19mb3JtYXQpLA0K Pj4gK8KgwqDCoMKgwqDCoMKgIC5GcmFtZVJhdGXCoMKgwqDCoCA9IHsgYXZjdHgtPmZyYW1lcmF0 ZS5udW0sIGF2Y3R4LT5mcmFtZXJhdGUuZGVuIH0sDQo+PiArwqDCoMKgwqDCoMKgwqAgLkJpdFJh dGXCoMKgwqDCoMKgwqAgPSBhdmN0eC0+Yml0X3JhdGUsDQo+PiArwqDCoMKgwqDCoMKgwqAgLk1h eERlY29kZVBpY3R1cmVCdWZmZXJDb3VudCA9IGZyYW1lc19jdHgtPmluaXRpYWxfcG9vbF9zaXpl LA0KPj4gK8KgwqDCoCB9Ow0KPj4gKw0KPj4gK8KgwqDCoCBEWF9DSEVDSyhJRDNEMTJWaWRlb0Rl dmljZV9DcmVhdGVWaWRlb0RlY29kZXJIZWFwKGh3Y3R4LQ0KPj52aWRlb19kZXZpY2UsDQo+PiAm ZGVzYywNCj4+ICvCoMKgwqDCoMKgwqDCoCAmSUlEX0lEM0QxMlZpZGVvRGVjb2RlckhlYXAsICZj dHgtPmRlY29kZXJfaGVhcCkpOw0KPj4gKw0KPj4gK8KgwqDCoCByZXR1cm4gMDsNCj4+ICsNCj4+ ICtmYWlsOg0KPj4gK8KgwqDCoCBpZiAoY3R4LT5kZWNvZGVyKSB7DQo+PiArwqDCoMKgwqDCoMKg wqAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJEM0QxMiBkb2Vzbid0IHN1cHBvcnQgZGVj b2RpbmcNCj5mcmFtZXMNCj4+IHdpdGggYW4gZXh0ZW50ICINCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICJbd2lkdGgoJWQpLCBoZWlnaHQoJWQpXSwgb24geW91ciBkZXZpY2UhXG4iLCBmcmFt ZXNfY3R4LT53aWR0aCwNCj4+IGZyYW1lc19jdHgtPmhlaWdodCk7DQo+PiArwqDCoMKgIH0NCj4+ ICsNCj4+ICvCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsNCj4+ICt9DQo+PiArDQo+PiAr c3RhdGljIGludCBkM2QxMnZhX2NyZWF0ZV9kZWNvZGVyKEFWQ29kZWNDb250ZXh0ICphdmN0eCkN Cj4+ICt7DQo+PiArwqDCoMKgIEQzRDEyX1ZJREVPX0RFQ09ERVJfREVTQyBkZXNjOw0KPj4gK8Kg wqDCoCBEM0QxMlZBRGVjb2RlQ29udGV4dMKgwqAgKmN0eMKgwqDCoMKgwqDCoMKgID0gRDNEMTJW QV9ERUNPREVfQ09OVEVYVChhdmN0eCk7DQo+PiArwqDCoMKgIEFWSFdGcmFtZXNDb250ZXh0wqDC oMKgwqDCoCAqZnJhbWVzX2N0eCA9DQo+RDNEMTJWQV9GUkFNRVNfQ09OVEVYVChhdmN0eCk7DQo+ PiArwqDCoMKgIEFWRDNEMTJWQURldmljZUNvbnRleHQgKmh3Y3R4wqDCoMKgwqDCoCA9IGN0eC0+ ZGV2aWNlX2N0eDsNCj4+ICsNCj4+ICvCoMKgwqAgRDNEMTJfRkVBVFVSRV9EQVRBX1ZJREVPX0RF Q09ERV9TVVBQT1JUIGZlYXR1cmUgPSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgLk5vZGVJbmRleMKg wqDCoMKgID0gMCwNCj4+ICvCoMKgwqDCoMKgwqDCoCAuQ29uZmlndXJhdGlvbiA9IGN0eC0+Y2Zn LA0KPj4gK8KgwqDCoMKgwqDCoMKgIC5XaWR0aMKgwqDCoMKgwqDCoMKgwqAgPSBmcmFtZXNfY3R4 LT53aWR0aCwNCj4+ICvCoMKgwqDCoMKgwqDCoCAuSGVpZ2h0wqDCoMKgwqDCoMKgwqAgPSBmcmFt ZXNfY3R4LT5oZWlnaHQsDQo+PiArwqDCoMKgwqDCoMKgwqAgLkRlY29kZUZvcm1hdMKgID0gYXZf ZDNkMTJ2YV9tYXBfc3dfdG9faHdfZm9ybWF0KGZyYW1lc19jdHgtDQo+PiA+c3dfZm9ybWF0KSwN Cj4+ICvCoMKgwqDCoMKgwqDCoCAuRnJhbWVSYXRlwqDCoMKgwqAgPSB7IGF2Y3R4LT5mcmFtZXJh dGUubnVtLCBhdmN0eC0+ZnJhbWVyYXRlLmRlbiB9LA0KPj4gK8KgwqDCoMKgwqDCoMKgIC5CaXRS YXRlwqDCoMKgwqDCoMKgID0gYXZjdHgtPmJpdF9yYXRlLA0KPj4gK8KgwqDCoCB9Ow0KPj4gKw0K Pj4gK8KgwqDCoCBEWF9DSEVDSyhJRDNEMTJWaWRlb0RldmljZV9DaGVja0ZlYXR1cmVTdXBwb3J0 KGh3Y3R4LQ0KPj52aWRlb19kZXZpY2UsDQo+PiBEM0QxMl9GRUFUVVJFX1ZJREVPX0RFQ09ERV9T VVBQT1JULCAmZmVhdHVyZSwgc2l6ZW9mKGZlYXR1cmUpKSk7DQo+PiArwqDCoMKgIGlmICghKGZl YXR1cmUuU3VwcG9ydEZsYWdzICYNCj5EM0QxMl9WSURFT19ERUNPREVfU1VQUE9SVF9GTEFHX1NV UFBPUlRFRCkNCj4+IHx8DQo+PiArwqDCoMKgwqDCoMKgwqAgIShmZWF0dXJlLkRlY29kZVRpZXIg Pj0gRDNEMTJfVklERU9fREVDT0RFX1RJRVJfMikpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkQzRDEyIGRlY29kZXIgZG9lc24ndCBzdXBwb3J0IG9u DQo+dGhpcw0KPj4gZGV2aWNlXG4iKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJP UihFSU5WQUwpOw0KPj4gK8KgwqDCoCB9DQo+PiArDQo+PiArwqDCoMKgIGRlc2MgPSAoRDNEMTJf VklERU9fREVDT0RFUl9ERVNDKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgLk5vZGVNYXNrID0gMCwN Cj4+ICvCoMKgwqDCoMKgwqDCoCAuQ29uZmlndXJhdGlvbiA9IGN0eC0+Y2ZnLA0KPj4gK8KgwqDC oCB9Ow0KPj4gKw0KPj4gK8KgwqDCoCBEWF9DSEVDSyhJRDNEMTJWaWRlb0RldmljZV9DcmVhdGVW aWRlb0RlY29kZXIoaHdjdHgtDQo+PnZpZGVvX2RldmljZSwgJmRlc2MsDQo+PiAmSUlEX0lEM0Qx MlZpZGVvRGVjb2RlciwgJmN0eC0+ZGVjb2RlcikpOw0KPj4gKw0KPj4gK8KgwqDCoCBjdHgtPmRl Y29kZXJfcmVmID0gYnVmcmVmX3dyYXBfaW50ZXJmYWNlKChJVW5rbm93biAqKWN0eC0+ZGVjb2Rl cik7DQo+PiArwqDCoMKgIGlmICghY3R4LT5kZWNvZGVyX3JlZikNCj4+ICvCoMKgwqDCoMKgwqDC oCByZXR1cm4gQVZFUlJPUihFTk9NRU0pOw0KPj4gKw0KPj4gK8KgwqDCoCByZXR1cm4gMDsNCj4+ ICsNCj4+ICtmYWlsOg0KPj4gK8KgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOw0KPj4gK30N Cj4+ICsNCj4+ICtzdGF0aWMgaW5saW5lIGludCBkM2QxMnZhX2dldF9udW1fc3VyZmFjZXMoZW51 bSBBVkNvZGVjSUQgY29kZWNfaWQpDQo+PiArew0KPj4gK8KgwqDCoCBpbnQgbnVtX3N1cmZhY2Vz ID0gMTsNCj4+ICvCoMKgwqAgc3dpdGNoIChjb2RlY19pZCkgew0KPj4gK8KgwqDCoCBjYXNlIEFW X0NPREVDX0lEX0gyNjQ6DQo+PiArwqDCoMKgIGNhc2UgQVZfQ09ERUNfSURfSEVWQzoNCj4+ICvC oMKgwqDCoMKgwqDCoCBudW1fc3VyZmFjZXMgKz0gMTY7DQo+PiArwqDCoMKgwqDCoMKgwqAgYnJl YWs7DQo+PiArDQo+PiArwqDCoMKgIGNhc2UgQVZfQ09ERUNfSURfQVYxOg0KPj4gK8KgwqDCoMKg wqDCoMKgIG51bV9zdXJmYWNlcyArPSAxMjsNCj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsNCj4+ ICsNCj4+ICvCoMKgwqAgY2FzZSBBVl9DT0RFQ19JRF9WUDk6DQo+PiArwqDCoMKgwqDCoMKgwqAg bnVtX3N1cmZhY2VzICs9IDg7DQo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7DQo+PiArDQo+PiAr wqDCoMKgIGRlZmF1bHQ6DQo+PiArwqDCoMKgwqDCoMKgwqAgbnVtX3N1cmZhY2VzICs9IDI7DQo+ PiArwqDCoMKgIH0NCj4+ICsNCj4+ICvCoMKgwqAgcmV0dXJuIG51bV9zdXJmYWNlczsNCj4+ICt9 DQo+PiArDQo+PiAraW50IGZmX2QzZDEydmFfY29tbW9uX2ZyYW1lX3BhcmFtcyhBVkNvZGVjQ29u dGV4dCAqYXZjdHgsDQo+QVZCdWZmZXJSZWYNCj4+ICpod19mcmFtZXNfY3R4KQ0KPj4gK3sNCj4+ ICvCoMKgwqAgQVZIV0ZyYW1lc0NvbnRleHTCoMKgwqDCoMKgICpmcmFtZXNfY3R4wqDCoCA9IChB VkhXRnJhbWVzQ29udGV4dA0KPj4gKilod19mcmFtZXNfY3R4LT5kYXRhOw0KPj4gK8KgwqDCoCBB VkhXRGV2aWNlQ29udGV4dMKgwqDCoMKgwqAgKmRldmljZV9jdHjCoMKgID0gZnJhbWVzX2N0eC0+ ZGV2aWNlX2N0eDsNCj4+ICvCoMKgwqAgQVZEM0QxMlZBRnJhbWVzQ29udGV4dCAqZnJhbWVzX2h3 Y3R4ID0gZnJhbWVzX2N0eC0+aHdjdHg7DQo+PiArDQo+PiArwqDCoMKgIGZyYW1lc19jdHgtPmZv cm1hdMKgwqDCoCA9IEFWX1BJWF9GTVRfRDNEMTI7DQo+PiArwqDCoMKgIGZyYW1lc19jdHgtPnN3 X2Zvcm1hdCA9IGF2Y3R4LT5zd19waXhfZm10ID09DQo+QVZfUElYX0ZNVF9ZVVY0MjBQMTAgPw0K Pj4gQVZfUElYX0ZNVF9QMDEwIDogQVZfUElYX0ZNVF9OVjEyOw0KPj4gK8KgwqDCoCBmcmFtZXNf Y3R4LT53aWR0aMKgwqDCoMKgID0gYXZjdHgtPndpZHRoOw0KPj4gK8KgwqDCoCBmcmFtZXNfY3R4 LT5oZWlnaHTCoMKgwqAgPSBhdmN0eC0+aGVpZ2h0Ow0KPj4gKw0KPj4gK8KgwqDCoCBmcmFtZXNf Y3R4LT5pbml0aWFsX3Bvb2xfc2l6ZSA9IGQzZDEydmFfZ2V0X251bV9zdXJmYWNlcyhhdmN0eC0N Cj4+ID5jb2RlY19pZCk7DQo+PiArDQo+PiArwqDCoMKgIHJldHVybiAwOw0KPj4gK30NCj4+ICsN Cj4+ICtpbnQgZmZfZDNkMTJ2YV9kZWNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQo+ PiArew0KPj4gK8KgwqDCoCBpbnQgcmV0Ow0KPj4gK8KgwqDCoCBVSU5UIGJpdHN0cmVhbV9zaXpl Ow0KPj4gK8KgwqDCoCBBVkhXRnJhbWVzQ29udGV4dCAqZnJhbWVzX2N0eDsNCj4+ICvCoMKgwqAg RDNEMTJWQURlY29kZUNvbnRleHQgKmN0eCA9IEQzRDEyVkFfREVDT0RFX0NPTlRFWFQoYXZjdHgp Ow0KPj4gKw0KPj4gK8KgwqDCoCBJRDNEMTJDb21tYW5kQWxsb2NhdG9yICpjb21tYW5kX2FsbG9j YXRvciA9IE5VTEw7DQo+PiArwqDCoMKgIEQzRDEyX0NPTU1BTkRfUVVFVUVfREVTQyBxdWV1ZV9k ZXNjID0gew0KPj4gK8KgwqDCoMKgwqDCoMKgIC5UeXBlwqDCoMKgwqAgPSBEM0QxMl9DT01NQU5E X0xJU1RfVFlQRV9WSURFT19ERUNPREUsDQo+PiArwqDCoMKgwqDCoMKgwqAgLlByaW9yaXR5ID0g MCwNCj4+ICvCoMKgwqDCoMKgwqDCoCAuRmxhZ3PCoMKgwqAgPSBEM0QxMl9DT01NQU5EX1FVRVVF X0ZMQUdfTk9ORSwNCj4+ICvCoMKgwqDCoMKgwqDCoCAuTm9kZU1hc2sgPSAwDQo+PiArwqDCoMKg IH07DQo+PiArDQo+PiArwqDCoMKgIGN0eC0+cGl4X2ZtdCA9IGF2Y3R4LT5od2FjY2VsLT5waXhf Zm10Ow0KPj4gKw0KPj4gK8KgwqDCoCByZXQgPSBmZl9kZWNvZGVfZ2V0X2h3X2ZyYW1lc19jdHgo YXZjdHgsDQo+QVZfSFdERVZJQ0VfVFlQRV9EM0QxMlZBKTsNCj4+ICvCoMKgwqAgaWYgKHJldCA8 IDApDQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsNCj4+ICsNCj4+ICvCoMKgwqAgZnJh bWVzX2N0eCA9IEQzRDEyVkFfRlJBTUVTX0NPTlRFWFQoYXZjdHgpOw0KPj4gK8KgwqDCoCBjdHgt PmRldmljZV9jdHggPSAoQVZEM0QxMlZBRGV2aWNlQ29udGV4dCAqKWZyYW1lc19jdHgtPmRldmlj ZV9jdHgtDQo+PiA+aHdjdHg7DQo+PiArDQo+PiArwqDCoMKgIGlmIChmcmFtZXNfY3R4LT5mb3Jt YXQgIT0gY3R4LT5waXhfZm10KSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJJbnZhbGlkIHBpeGZtdCBmb3IgaHdhY2NlbCFcbiIpOw0KPj4gK8KgwqDC oMKgwqDCoMKgIGdvdG8gZmFpbDsNCj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoCByZXQg PSBkM2QxMnZhX2NyZWF0ZV9kZWNvZGVyKGF2Y3R4KTsNCj4+ICvCoMKgwqAgaWYgKHJldCA8IDAp DQo+PiArwqDCoMKgwqDCoMKgwqAgZ290byBmYWlsOw0KPj4gKw0KPj4gK8KgwqDCoCByZXQgPSBk M2QxMnZhX2NyZWF0ZV9kZWNvZGVyX2hlYXAoYXZjdHgpOw0KPj4gK8KgwqDCoCBpZiAocmV0IDwg MCkNCj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7DQo+PiArDQo+PiArwqDCoMKgIGN0eC0+ bWF4X251bV9yZWYgPSBmcmFtZXNfY3R4LT5pbml0aWFsX3Bvb2xfc2l6ZTsNCj4+ICsNCj4+ICvC oMKgwqAgYml0c3RyZWFtX3NpemUgPSBmZl9kM2QxMnZhX2dldF9zdWl0YWJsZV9tYXhfYml0c3Ry ZWFtX3NpemUoYXZjdHgpOw0KPj4gK8KgwqDCoCBjdHgtPmJ1ZmZlcnMgPSBhdl9jYWxsb2Moc2l6 ZW9mKElEM0QxMlJlc291cmNlICopLCBjdHgtPm1heF9udW1fcmVmKTsNCj4+ICvCoMKgwqAgZm9y IChpbnQgaSA9IDA7IGkgPCBjdHgtPm1heF9udW1fcmVmOyBpKyspIHsNCj4+ICvCoMKgwqDCoMKg wqDCoCByZXQgPSBkM2QxMnZhX2NyZWF0ZV9idWZmZXIoYXZjdHgsIGJpdHN0cmVhbV9zaXplLCAm Y3R4LT5idWZmZXJzW2ldKTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0IDwgMCkNCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZmFpbDsNCj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4g K8KgwqDCoCBjdHgtPnJlZl9yZXNvdXJjZXMgPSBhdl9jYWxsb2Moc2l6ZW9mKElEM0QxMlJlc291 cmNlICopLCBjdHgtDQo+PiA+bWF4X251bV9yZWYpOw0KPj4gK8KgwqDCoCBpZiAoIWN0eC0+cmVm X3Jlc291cmNlcykNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFTk9NRU0pOw0K Pj4gKw0KPj4gK8KgwqDCoCBjdHgtPnJlZl9zdWJyZXNvdXJjZXMgPSBhdl9jYWxsb2Moc2l6ZW9m KFVJTlQpLCBjdHgtPm1heF9udW1fcmVmKTsNCj4+ICvCoMKgwqAgaWYgKCFjdHgtPnJlZl9zdWJy ZXNvdXJjZXMpDQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsNCj4+ ICsNCj4+ICvCoMKgwqAgY3R4LT5hbGxvY2F0b3JfcXVldWUgPSBhdl9maWZvX2FsbG9jMihjdHgt Pm1heF9udW1fcmVmLA0KPj4gc2l6ZW9mKENvbW1hbmRBbGxvY2F0b3IpLCBBVl9GSUZPX0ZMQUdf QVVUT19HUk9XKTsNCj4+ICvCoMKgwqAgaWYgKCFjdHgtPmFsbG9jYXRvcl9xdWV1ZSkNCj4+ICvC oMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFTk9NRU0pOw0KPj4gKw0KPj4gK8KgwqDCoCBy ZXQgPSBhdl9kM2QxMnZhX3N5bmNfY29udGV4dF9hbGxvYyhjdHgtPmRldmljZV9jdHgsICZjdHgt PnN5bmNfY3R4KTsNCj4+ICvCoMKgwqAgaWYgKHJldCA8IDApDQo+PiArwqDCoMKgwqDCoMKgwqAg Z290byBmYWlsOw0KPj4gKw0KPj4gK8KgwqDCoCByZXQgPSBkM2QxMnZhX2dldF92YWxpZF9jb21t YW5kX2FsbG9jYXRvcihhdmN0eCwNCj4mY29tbWFuZF9hbGxvY2F0b3IpOw0KPj4gK8KgwqDCoCBp ZiAocmV0IDwgMCkNCj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7DQo+PiArDQo+PiArwqDC oMKgIERYX0NIRUNLKElEM0QxMkRldmljZV9DcmVhdGVDb21tYW5kUXVldWUoY3R4LT5kZXZpY2Vf Y3R4LQ0KPj5kZXZpY2UsDQo+PiAmcXVldWVfZGVzYywNCj4+ICvCoMKgwqDCoMKgwqDCoCAmSUlE X0lEM0QxMkNvbW1hbmRRdWV1ZSwgJmN0eC0+Y29tbWFuZF9xdWV1ZSkpOw0KPj4gKw0KPj4gK8Kg wqDCoCBEWF9DSEVDSyhJRDNEMTJEZXZpY2VfQ3JlYXRlQ29tbWFuZExpc3QoY3R4LT5kZXZpY2Vf Y3R4LT5kZXZpY2UsDQo+MCwNCj4+IHF1ZXVlX2Rlc2MuVHlwZSwNCj4+ICvCoMKgwqDCoMKgwqDC oCBjb21tYW5kX2FsbG9jYXRvciwgTlVMTCwgJklJRF9JRDNEMTJDb21tYW5kTGlzdCwgJmN0eC0N Cj4+ID5jb21tYW5kX2xpc3QpKTsNCj4+ICsNCj4+ICvCoMKgwqAgRFhfQ0hFQ0soSUQzRDEyVmlk ZW9EZWNvZGVDb21tYW5kTGlzdF9DbG9zZShjdHgtDQo+PmNvbW1hbmRfbGlzdCkpOw0KPj4gKw0K Pj4gK8KgwqDCoCBJRDNEMTJDb21tYW5kUXVldWVfRXhlY3V0ZUNvbW1hbmRMaXN0cyhjdHgtPmNv bW1hbmRfcXVldWUsDQo+MSwNCj4+IChJRDNEMTJDb21tYW5kTGlzdCAqKikmY3R4LT5jb21tYW5k X2xpc3QpOw0KPj4gKw0KPj4gK8KgwqDCoCBkM2QxMnZhX3dhaXRfZm9yX2dwdShhdmN0eCk7DQo+ PiArDQo+PiArwqDCoMKgIGQzZDEydmFfZGlzY2FyZF9jb21tYW5kX2FsbG9jYXRvcihhdmN0eCwg Y29tbWFuZF9hbGxvY2F0b3IsIGN0eC0NCj4+ID5zeW5jX2N0eC0+ZmVuY2VfdmFsdWUpOw0KPj4g Kw0KPj4gK8KgwqDCoCByZXR1cm4gMDsNCj4+ICsNCj4+ICtmYWlsOg0KPj4gK8KgwqDCoCBEM0Qx Ml9PQkpFQ1RfUkVMRUFTRShjb21tYW5kX2FsbG9jYXRvcik7DQo+PiArwqDCoMKgIGZmX2QzZDEy dmFfZGVjb2RlX3VuaW5pdChhdmN0eCk7DQo+PiArDQo+PiArwqDCoMKgIHJldHVybiBBVkVSUk9S KEVJTlZBTCk7DQo+PiArfQ0KPj4gKw0KPj4gK2ludCBmZl9kM2QxMnZhX2RlY29kZV91bmluaXQo QVZDb2RlY0NvbnRleHQgKmF2Y3R4KQ0KPj4gK3sNCj4+ICvCoMKgwqAgaW50IGksIG51bV9hbGxv Y2F0b3IgPSAwOw0KPj4gK8KgwqDCoCBEM0QxMlZBRGVjb2RlQ29udGV4dCAqY3R4ID0gRDNEMTJW QV9ERUNPREVfQ09OVEVYVChhdmN0eCk7DQo+PiArwqDCoMKgIENvbW1hbmRBbGxvY2F0b3IgYWxs b2NhdG9yOw0KPj4gKw0KPj4gK8KgwqDCoCBpZiAoY3R4LT5zeW5jX2N0eCkNCj4+ICvCoMKgwqDC oMKgwqDCoCBkM2QxMnZhX3dhaXRfZm9yX2dwdShhdmN0eCk7DQo+PiArDQo+PiArwqDCoMKgIGF2 X2ZyZWVwKCZjdHgtPnJlZl9yZXNvdXJjZXMpOw0KPj4gKw0KPj4gK8KgwqDCoCBhdl9mcmVlcCgm Y3R4LT5yZWZfc3VicmVzb3VyY2VzKTsNCj4+ICsNCj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8 IGN0eC0+bWF4X251bV9yZWY7IGkrKykNCj4+ICvCoMKgwqDCoMKgwqDCoCBEM0QxMl9PQkpFQ1Rf UkVMRUFTRShjdHgtPmJ1ZmZlcnNbaV0pOw0KPj4gKw0KPj4gK8KgwqDCoCBhdl9mcmVlcCgmY3R4 LT5idWZmZXJzKTsNCj4+ICsNCj4+ICvCoMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0UoY3R4LT5j b21tYW5kX2xpc3QpOw0KPj4gKw0KPj4gK8KgwqDCoCBEM0QxMl9PQkpFQ1RfUkVMRUFTRShjdHgt PmNvbW1hbmRfcXVldWUpOw0KPj4gKw0KPj4gK8KgwqDCoCBpZiAoY3R4LT5hbGxvY2F0b3JfcXVl dWUpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCB3aGlsZSAoYXZfZmlmb19yZWFkKGN0eC0+YWxsb2Nh dG9yX3F1ZXVlLCAmYWxsb2NhdG9yLCAxKSA+PSAwKSB7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBudW1fYWxsb2NhdG9yKys7DQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEM0QxMl9P QkpFQ1RfUkVMRUFTRShhbGxvY2F0b3IuY29tbWFuZF9hbGxvY2F0b3IpOw0KPj4gK8KgwqDCoMKg wqDCoMKgIH0NCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoCBhdl9sb2coYXZjdHgsIEFWX0xPR19W RVJCT1NFLCAiVG90YWwgbnVtYmVyIG9mIGNvbW1hbmQNCj5hbGxvY2F0b3JzDQo+PiByZXVzZWQ6 ICVkXG4iLCBudW1fYWxsb2NhdG9yKTsNCj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4gK8KgwqDCoCBh dl9maWZvX2ZyZWVwMigmY3R4LT5hbGxvY2F0b3JfcXVldWUpOw0KPj4gKw0KPj4gK8KgwqDCoCBh dl9kM2QxMnZhX3N5bmNfY29udGV4dF9mcmVlKCZjdHgtPnN5bmNfY3R4KTsNCj4+ICsNCj4+ICvC oMKgwqAgRDNEMTJfT0JKRUNUX1JFTEVBU0UoY3R4LT5kZWNvZGVyX2hlYXApOw0KPj4gKw0KPj4g K8KgwqDCoCBhdl9idWZmZXJfdW5yZWYoJmN0eC0+ZGVjb2Rlcl9yZWYpOw0KPj4gKw0KPj4gK8Kg wqDCoCByZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIElEM0QxMlJlc291cmNlICpn ZXRfc3VyZmFjZShjb25zdCBBVkZyYW1lICpmcmFtZSkNCj4+ICt7DQo+PiArwqDCoMKgIHJldHVy biAoSUQzRDEyUmVzb3VyY2UgKilmcmFtZS0+ZGF0YVswXTsNCj4+ICt9DQo+PiArDQo+PiAraW50 cHRyX3QgZmZfZDNkMTJ2YV9nZXRfc3VyZmFjZV9pbmRleChBVkNvZGVjQ29udGV4dCAqY3R4LCBj b25zdA0KPkFWRnJhbWUqDQo+PiBmcmFtZSkNCj4+ICt7DQo+PiArwqDCoMKgIHJldHVybiAoaW50 cHRyX3QpZnJhbWUtPmRhdGFbMV07DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBBVkQzRDEyVkFT eW5jQ29udGV4dCAqZDNkMTJ2YV9nZXRfc3luY19jb250ZXh0KGNvbnN0IEFWRnJhbWUNCj4qZnJh bWUpDQo+PiArew0KPj4gK8KgwqDCoCByZXR1cm4gKEFWRDNEMTJWQVN5bmNDb250ZXh0ICopZnJh bWUtPmRhdGFbMl07DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgZDNkMTJ2YV9iZWdpbl91 cGRhdGVfcmVmZXJlbmNlX2ZyYW1lcyhBVkNvZGVjQ29udGV4dA0KPiphdmN0eCwNCj4+IEQzRDEy X1JFU09VUkNFX0JBUlJJRVIgKmJhcnJpZXJzLCBpbnQgaW5kZXgpDQo+PiArew0KPj4gK8KgwqDC oCBEM0QxMlZBRGVjb2RlQ29udGV4dMKgwqAgKmN0eMKgwqDCoMKgwqDCoMKgwqDCoCA9DQo+RDNE MTJWQV9ERUNPREVfQ09OVEVYVChhdmN0eCk7DQo+PiArwqDCoMKgIEFWSFdGcmFtZXNDb250ZXh0 wqDCoMKgwqDCoCAqZnJhbWVzX2N0eMKgwqAgPQ0KPkQzRDEyVkFfRlJBTUVTX0NPTlRFWFQoYXZj dHgpOw0KPj4gK8KgwqDCoCBBVkQzRDEyVkFGcmFtZXNDb250ZXh0ICpmcmFtZXNfaHdjdHggPSBm cmFtZXNfY3R4LT5od2N0eDsNCj4+ICsNCj4+ICvCoMKgwqAgaW50IG51bV9iYXJyaWVyID0gMDsN Cj4+ICsNCj4+ICvCoMKgwqAgZm9yIChpbnQgaSA9IDA7IGkgPCBjdHgtPm1heF9udW1fcmVmOyBp KyspIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoY3R4LT5yZWZfcmVzb3VyY2VzW2ldICYmIGN0 eC0+cmVmX3Jlc291cmNlc1tpXSAhPSBmcmFtZXNfaHdjdHgtDQo+PiA+dGV4dHVyZV9pbmZvc1tp bmRleF0udGV4dHVyZSkgew0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmFycmllcnNbbnVt X2JhcnJpZXJdLlR5cGXCoCA9DQo+PiBEM0QxMl9SRVNPVVJDRV9CQVJSSUVSX1RZUEVfVFJBTlNJ VElPTjsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJhcnJpZXJzW251bV9iYXJyaWVyXS5G bGFncyA9DQo+RDNEMTJfUkVTT1VSQ0VfQkFSUklFUl9GTEFHX05PTkU7DQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBiYXJyaWVyc1tudW1fYmFycmllcl0uVHJhbnNpdGlvbiA9DQo+PiAoRDNE MTJfUkVTT1VSQ0VfVFJBTlNJVElPTl9CQVJSSUVSKXsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgLnBSZXNvdXJjZcKgwqAgPSBjdHgtPnJlZl9yZXNvdXJjZXNbaV0sDQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5TdWJyZXNvdXJjZSA9IDAsDQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5TdGF0ZUJlZm9yZSA9IEQzRDEyX1JFU09VUkNF X1NUQVRFX0NPTU1PTiwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLlN0YXRl QWZ0ZXLCoCA9IEQzRDEyX1JFU09VUkNFX1NUQVRFX1ZJREVPX0RFQ09ERV9SRUFELA0KPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgfTsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG51bV9i YXJyaWVyKys7DQo+PiArwqDCoMKgwqDCoMKgwqAgfQ0KPj4gK8KgwqDCoCB9DQo+PiArDQo+PiAr wqDCoMKgIHJldHVybiBudW1fYmFycmllcjsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQg ZDNkMTJ2YV9lbmRfdXBkYXRlX3JlZmVyZW5jZV9mcmFtZXMoQVZDb2RlY0NvbnRleHQNCj4qYXZj dHgsDQo+PiBEM0QxMl9SRVNPVVJDRV9CQVJSSUVSICpiYXJyaWVycywgaW50IGluZGV4KQ0KPj4g K3sNCj4+ICvCoMKgwqAgRDNEMTJWQURlY29kZUNvbnRleHTCoMKgICpjdHjCoMKgwqDCoMKgwqDC oMKgwqAgPQ0KPkQzRDEyVkFfREVDT0RFX0NPTlRFWFQoYXZjdHgpOw0KPj4gK8KgwqDCoCBBVkhX RnJhbWVzQ29udGV4dMKgwqDCoMKgwqAgKmZyYW1lc19jdHjCoMKgID0NCj5EM0QxMlZBX0ZSQU1F U19DT05URVhUKGF2Y3R4KTsNCj4+ICvCoMKgwqAgQVZEM0QxMlZBRnJhbWVzQ29udGV4dCAqZnJh bWVzX2h3Y3R4ID0gZnJhbWVzX2N0eC0+aHdjdHg7DQo+PiArwqDCoMKgIGludCBudW1fYmFycmll ciA9IDA7DQo+PiArDQo+PiArwqDCoMKgIGZvciAoaW50IGkgPSAwOyBpIDwgY3R4LT5tYXhfbnVt X3JlZjsgaSsrKSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGN0eC0+cmVmX3Jlc291cmNlc1tp XSAmJiBjdHgtPnJlZl9yZXNvdXJjZXNbaV0gIT0gZnJhbWVzX2h3Y3R4LQ0KPj4gPnRleHR1cmVf aW5mb3NbaW5kZXhdLnRleHR1cmUpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJhcnJp ZXJzW251bV9iYXJyaWVyXS5UcmFuc2l0aW9uLnBSZXNvdXJjZSA9IGN0eC0NCj4+ID5yZWZfcmVz b3VyY2VzW2ldOw0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmFycmllcnNbbnVtX2JhcnJp ZXJdLkZsYWdzID0NCj5EM0QxMl9SRVNPVVJDRV9CQVJSSUVSX0ZMQUdfTk9ORTsNCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGJhcnJpZXJzW251bV9iYXJyaWVyXS5UcmFuc2l0aW9uLlN0YXRl QmVmb3JlID0NCj4+IEQzRDEyX1JFU09VUkNFX1NUQVRFX1ZJREVPX0RFQ09ERV9SRUFEOw0KPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYmFycmllcnNbbnVtX2JhcnJpZXJdLlRyYW5zaXRpb24u U3RhdGVBZnRlciA9DQo+PiBEM0QxMl9SRVNPVVJDRV9TVEFURV9DT01NT047DQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBudW1fYmFycmllcisrOw0KPj4gK8KgwqDCoMKgwqDCoMKgIH0NCj4+ ICvCoMKgwqAgfQ0KPj4gK30NCj4+ICsNCj4+ICtpbnQgZmZfZDNkMTJ2YV9jb21tb25fZW5kX2Zy YW1lKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZGcmFtZQ0KPipmcmFtZSwNCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0 IHZvaWQgKnBwLCB1bnNpZ25lZCBwcF9zaXplLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgdm9pZCAqcW0sIHVuc2ln bmVkIHFtX3NpemUsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpbnQoKnVwZGF0ZV9pbnB1dF9hcmd1bWVudHMpKEFWQ29kZWND b250ZXh0ICosDQo+PiBEM0QxMl9WSURFT19ERUNPREVfSU5QVVRfU1RSRUFNX0FSR1VNRU5UUyAq LCBJRDNEMTJSZXNvdXJjZQ0KPiopKQ0KPj4gK3sNCj4+ICvCoMKgwqAgaW50IHJldDsNCj4+ICvC oMKgwqAgRDNEMTJWQURlY29kZUNvbnRleHTCoMKgICpjdHjCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgID0NCj4+IEQzRDEyVkFfREVDT0RFX0NPTlRFWFQoYXZjdHgpOw0KPj4gK8KgwqDCoCBB VkhXRnJhbWVzQ29udGV4dMKgwqDCoMKgwqAgKmZyYW1lc19jdHjCoMKgwqDCoMKgwqDCoCA9DQo+ PiBEM0QxMlZBX0ZSQU1FU19DT05URVhUKGF2Y3R4KTsNCj4+ICvCoMKgwqAgQVZEM0QxMlZBRnJh bWVzQ29udGV4dCAqZnJhbWVzX2h3Y3R4wqDCoMKgwqDCoCA9IGZyYW1lc19jdHgtPmh3Y3R4Ow0K Pj4gK8KgwqDCoCBJRDNEMTJDb21tYW5kQWxsb2NhdG9yICpjb21tYW5kX2FsbG9jYXRvciA9IE5V TEw7DQo+PiArDQo+PiArwqDCoMKgIElEM0QxMlJlc291cmNlICpyZXNvdXJjZSA9IGdldF9zdXJm YWNlKGZyYW1lKTsNCj4+ICvCoMKgwqAgVUlOVCBpbmRleCA9IGZmX2QzZDEydmFfZ2V0X3N1cmZh Y2VfaW5kZXgoYXZjdHgsIGZyYW1lKTsNCj4+ICvCoMKgwqAgQVZEM0QxMlZBU3luY0NvbnRleHQg KnN5bmNfY3R4ID0gZDNkMTJ2YV9nZXRfc3luY19jb250ZXh0KGZyYW1lKTsNCj4+ICsNCj4+ICvC oMKgwqAgSUQzRDEyVmlkZW9EZWNvZGVDb21tYW5kTGlzdCAqY21kX2xpc3QgPSBjdHgtPmNvbW1h bmRfbGlzdDsNCj4+ICvCoMKgwqAgRDNEMTJfUkVTT1VSQ0VfQkFSUklFUiBiYXJyaWVyc1tEM0Qx MlZBX01BWF9TVVJGQUNFU10gPSB7IDAgfTsNCj4+ICsNCj4+ICvCoMKgwqAgRDNEMTJfVklERU9f REVDT0RFX0lOUFVUX1NUUkVBTV9BUkdVTUVOVFMgaW5wdXRfYXJncyA9IHsNCj4+ICvCoMKgwqDC oMKgwqDCoCAuTnVtRnJhbWVBcmd1bWVudHMgPSAyLA0KPj4gK8KgwqDCoMKgwqDCoMKgIC5GcmFt ZUFyZ3VtZW50cyA9IHsNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFswXSA9IHsNCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLlR5cGXCoCA9DQo+RDNEMTJfVklERU9fREVD T0RFX0FSR1VNRU5UX1RZUEVfUElDVFVSRV9QQVJBTUVURVJTLA0KPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAuU2l6ZcKgID0gcHBfc2l6ZSwNCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgLnBEYXRhID0gKHZvaWQgKilwcCwNCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIH0sDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBbMV0gPSB7DQo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5UeXBlwqAgPQ0KPj4NCj5EM0QxMl9WSURFT19ERUNP REVfQVJHVU1FTlRfVFlQRV9JTlZFUlNFX1FVQU5USVpBVElPTl9NQVRSSQ0KPlgsDQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5TaXplwqAgPSBxbV9zaXplLA0KPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAucERhdGEgPSAodm9pZCAqKXFtLA0KPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfSwNCj4+ICvCoMKgwqDCoMKgwqDCoCB9LA0KPj4gK8KgwqDCoMKg wqDCoMKgIC5wSGVhcCA9IGN0eC0+ZGVjb2Rlcl9oZWFwLA0KPj4gK8KgwqDCoCB9Ow0KPj4gKw0K Pj4gK8KgwqDCoCBEM0QxMl9WSURFT19ERUNPREVfT1VUUFVUX1NUUkVBTV9BUkdVTUVOVFMgb3V0 cHV0X2FyZ3MgPSB7DQo+PiArwqDCoMKgwqDCoMKgwqAgLkNvbnZlcnNpb25Bcmd1bWVudHMgPSAw LA0KPj4gK8KgwqDCoMKgwqDCoMKgIC5PdXRwdXRTdWJyZXNvdXJjZcKgwqAgPSAwLA0KPj4gK8Kg wqDCoMKgwqDCoMKgIC5wT3V0cHV0VGV4dHVyZTJEwqDCoMKgID0gcmVzb3VyY2UsDQo+PiArwqDC oMKgIH07DQo+PiArDQo+PiArwqDCoMKgIFVJTlQgbnVtX2JhcnJpZXIgPSAxOw0KPj4gK8KgwqDC oCBiYXJyaWVyc1swXSA9IChEM0QxMl9SRVNPVVJDRV9CQVJSSUVSKSB7DQo+PiArwqDCoMKgwqDC oMKgwqAgLlR5cGXCoCA9IEQzRDEyX1JFU09VUkNFX0JBUlJJRVJfVFlQRV9UUkFOU0lUSU9OLA0K Pj4gK8KgwqDCoMKgwqDCoMKgIC5GbGFncyA9IEQzRDEyX1JFU09VUkNFX0JBUlJJRVJfRkxBR19O T05FLA0KPj4gK8KgwqDCoMKgwqDCoMKgIC5UcmFuc2l0aW9uID0gew0KPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgLnBSZXNvdXJjZcKgwqAgPSByZXNvdXJjZSwNCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIC5TdWJyZXNvdXJjZSA9IDAsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAu U3RhdGVCZWZvcmUgPSBEM0QxMl9SRVNPVVJDRV9TVEFURV9DT01NT04sDQo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAuU3RhdGVBZnRlcsKgID0gRDNEMTJfUkVTT1VSQ0VfU1RBVEVfVklERU9f REVDT0RFX1dSSVRFLA0KPj4gK8KgwqDCoMKgwqDCoMKgIH0sDQo+PiArwqDCoMKgIH07DQo+PiAr DQo+PiArwqDCoMKgIG1lbXNldChjdHgtPnJlZl9yZXNvdXJjZXMsIDAsIHNpemVvZihJRDNEMTJS ZXNvdXJjZSAqKSAqIGN0eC0NCj4+ID5tYXhfbnVtX3JlZik7DQo+PiArwqDCoMKgIG1lbXNldChj dHgtPnJlZl9zdWJyZXNvdXJjZXMsIDAsIHNpemVvZihVSU5UKSAqIGN0eC0+bWF4X251bV9yZWYp Ow0KPj4gK8KgwqDCoCBpbnB1dF9hcmdzLlJlZmVyZW5jZUZyYW1lcy5OdW1UZXh0dXJlMkRzID0g Y3R4LT5tYXhfbnVtX3JlZjsNCj4+ICvCoMKgwqAgaW5wdXRfYXJncy5SZWZlcmVuY2VGcmFtZXMu cHBUZXh0dXJlMkRzwqAgPSBjdHgtPnJlZl9yZXNvdXJjZXM7DQo+PiArwqDCoMKgIGlucHV0X2Fy Z3MuUmVmZXJlbmNlRnJhbWVzLnBTdWJyZXNvdXJjZXMgPSBjdHgtPnJlZl9zdWJyZXNvdXJjZXM7 DQo+PiArDQo+PiArwqDCoMKgIGF2X2QzZDEydmFfd2FpdF9pZGxlKHN5bmNfY3R4KTsNCj4+ICsN Cj4+ICvCoMKgwqAgaWYgKCFxbSkNCj4+ICvCoMKgwqDCoMKgwqDCoCBpbnB1dF9hcmdzLk51bUZy YW1lQXJndW1lbnRzID0gMTsNCj4+ICsNCj4+ICvCoMKgwqAgcmV0ID0gdXBkYXRlX2lucHV0X2Fy Z3VtZW50cyhhdmN0eCwgJmlucHV0X2FyZ3MsIGN0eC0+YnVmZmVyc1tpbmRleF0pOw0KPj4gK8Kg wqDCoCBpZiAocmV0IDwgMCkNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Ow0KPj4gKw0K Pj4gK8KgwqDCoCByZXQgPSBkM2QxMnZhX2dldF92YWxpZF9jb21tYW5kX2FsbG9jYXRvcihhdmN0 eCwNCj4mY29tbWFuZF9hbGxvY2F0b3IpOw0KPj4gK8KgwqDCoCBpZiAocmV0IDwgMCkNCj4+ICvC oMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7DQo+PiArDQo+PiArwqDCoMKgIERYX0NIRUNLKElEM0Qx MkNvbW1hbmRBbGxvY2F0b3JfUmVzZXQoY29tbWFuZF9hbGxvY2F0b3IpKTsNCj4+ICsNCj4+ICvC oMKgwqAgRFhfQ0hFQ0soSUQzRDEyVmlkZW9EZWNvZGVDb21tYW5kTGlzdF9SZXNldChjbWRfbGlz dCwNCj4+IGNvbW1hbmRfYWxsb2NhdG9yKSk7DQo+PiArDQo+PiArwqDCoMKgIG51bV9iYXJyaWVy ICs9IGQzZDEydmFfYmVnaW5fdXBkYXRlX3JlZmVyZW5jZV9mcmFtZXMoYXZjdHgsDQo+JmJhcnJp ZXJzWzFdLA0KPj4gaW5kZXgpOw0KPj4gKw0KPj4gK8KgwqDCoCBJRDNEMTJWaWRlb0RlY29kZUNv bW1hbmRMaXN0X1Jlc291cmNlQmFycmllcihjbWRfbGlzdCwNCj5udW1fYmFycmllciwNCj4+IGJh cnJpZXJzKTsNCj4+ICsNCj4+ICvCoMKgwqAgSUQzRDEyVmlkZW9EZWNvZGVDb21tYW5kTGlzdF9E ZWNvZGVGcmFtZShjbWRfbGlzdCwgY3R4LT5kZWNvZGVyLA0KPj4gJm91dHB1dF9hcmdzLCAmaW5w dXRfYXJncyk7DQo+PiArDQo+PiArwqDCoMKgIGJhcnJpZXJzWzBdLlRyYW5zaXRpb24uU3RhdGVC ZWZvcmUgPSBiYXJyaWVyc1swXS5UcmFuc2l0aW9uLlN0YXRlQWZ0ZXI7DQo+PiArwqDCoMKgIGJh cnJpZXJzWzBdLlRyYW5zaXRpb24uU3RhdGVBZnRlcsKgID0gRDNEMTJfUkVTT1VSQ0VfU1RBVEVf Q09NTU9OOw0KPj4gK8KgwqDCoCBkM2QxMnZhX2VuZF91cGRhdGVfcmVmZXJlbmNlX2ZyYW1lcyhh dmN0eCwgJmJhcnJpZXJzWzFdLCBpbmRleCk7DQo+PiArDQo+PiArwqDCoMKgIElEM0QxMlZpZGVv RGVjb2RlQ29tbWFuZExpc3RfUmVzb3VyY2VCYXJyaWVyKGNtZF9saXN0LA0KPm51bV9iYXJyaWVy LA0KPj4gYmFycmllcnMpOw0KPj4gKw0KPj4gK8KgwqDCoCBEWF9DSEVDSyhJRDNEMTJWaWRlb0Rl Y29kZUNvbW1hbmRMaXN0X0Nsb3NlKGNtZF9saXN0KSk7DQo+PiArDQo+PiArwqDCoMKgIElEM0Qx MkNvbW1hbmRRdWV1ZV9FeGVjdXRlQ29tbWFuZExpc3RzKGN0eC0+Y29tbWFuZF9xdWV1ZSwNCj4x LA0KPj4gKElEM0QxMkNvbW1hbmRMaXN0ICoqKSZjdHgtPmNvbW1hbmRfbGlzdCk7DQo+PiArDQo+ PiArwqDCoMKgIERYX0NIRUNLKElEM0QxMkNvbW1hbmRRdWV1ZV9TaWduYWwoY3R4LT5jb21tYW5k X3F1ZXVlLA0KPnN5bmNfY3R4LT5mZW5jZSwNCj4+ICsrc3luY19jdHgtPmZlbmNlX3ZhbHVlKSk7 DQo+PiArDQo+PiArwqDCoMKgIERYX0NIRUNLKElEM0QxMkNvbW1hbmRRdWV1ZV9TaWduYWwoY3R4 LT5jb21tYW5kX3F1ZXVlLCBjdHgtDQo+PnN5bmNfY3R4LQ0KPj4gPmZlbmNlLCArK2N0eC0+c3lu Y19jdHgtPmZlbmNlX3ZhbHVlKSk7DQo+PiArDQo+PiArwqDCoMKgIHJldCA9IGQzZDEydmFfZGlz Y2FyZF9jb21tYW5kX2FsbG9jYXRvcihhdmN0eCwgY29tbWFuZF9hbGxvY2F0b3IsDQo+Y3R4LQ0K Pj4gPnN5bmNfY3R4LT5mZW5jZV92YWx1ZSk7DQo+PiArwqDCoMKgIGlmIChyZXQgPCAwKQ0KPj4g K8KgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7DQo+PiArDQo+PiArwqDCoMKgIGlmIChjdHgtPmRl dmljZV9jdHgtPnN5bmMpIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBhdl9kM2QxMnZhX3dh aXRfaWRsZShjdHgtPnN5bmNfY3R4KTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0IDwgMCkN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7DQo+PiArwqDCoMKgIH0NCj4+ ICsNCj4+ICvCoMKgwqAgcmV0dXJuIDA7DQo+PiArDQo+PiArZmFpbDoNCj4+ICvCoMKgwqAgaWYg KGNvbW1hbmRfYWxsb2NhdG9yKQ0KPj4gK8KgwqDCoMKgwqDCoMKgIGQzZDEydmFfZGlzY2FyZF9j b21tYW5kX2FsbG9jYXRvcihhdmN0eCwgY29tbWFuZF9hbGxvY2F0b3IsIGN0eC0NCj4+ID5zeW5j X2N0eC0+ZmVuY2VfdmFsdWUpOw0KPj4gK8KgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOw0K Pj4gK30NCj4+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2QzZDEydmEuaCBiL2xpYmF2Y29kZWMv ZDNkMTJ2YS5oDQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMDAwMC4u ZGEzZTdiN2FiOQ0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvbGliYXZjb2RlYy9kM2QxMnZh LmgNCj4+IEBAIC0wLDAgKzEsMTg0IEBADQo+PiArLyoNCj4+ICsgKiBEaXJlY3QzRCAxMiBIVyBh Y2NlbGVyYXRpb24gdmlkZW8gZGVjb2Rlcg0KPj4gKyAqDQo+PiArICogY29weXJpZ2h0IChjKSAy MDIyLTIwMjMgV3UgSmlhbmh1YSA8dG9xc3h3QG91dGxvb2suY29tPg0KPj4gKyAqDQo+PiArICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLg0KPj4gKyAqDQo+PiArICogRkZtcGVnIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KPj4gKyAqIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCj4+ ICsgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXINCj4+ICsgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCj4+ICsgKg0KPj4gKyAqIEZGbXBlZyBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KPj4gKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m DQo+PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLsKgIFNlZSB0aGUNCj5HTlUNCj4+ICsgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLg0KPj4gKyAqDQo+PiArICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KPj4gKyAqIExpY2Vu c2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUN Cj4+ICsgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y LCBCb3N0b24sIE1BIDAyMTEwLTEzMDENCj4+IFVTQQ0KPj4gKyAqLw0KPj4gKw0KPj4gKyNpZm5k ZWYgQVZDT0RFQ19EM0QxMlZBX0gNCj4+ICsjZGVmaW5lIEFWQ09ERUNfRDNEMTJWQV9IDQo+PiAr DQo+PiArI2luY2x1ZGUgImxpYmF2dXRpbC9maWZvLmgiDQo+PiArI2luY2x1ZGUgImxpYmF2dXRp bC9od2NvbnRleHQuaCINCj4+ICsjaW5jbHVkZSAibGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMnZh LmgiDQo+PiArI2luY2x1ZGUgImF2Y29kZWMuaCINCj4+ICsjaW5jbHVkZSAiaW50ZXJuYWwuaCIN Cj4+ICsNCj4+ICsvKioNCj4+ICsgKiBAYnJpZWYgVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBw cm92aWRlcyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zDQo+YW5kDQo+PiBkYXRhDQo+PiAr ICogdG8gdGhlIEZGbXBlZyBEaXJlY3QzRCAxMiBIV0FjY2VsIGltcGxlbWVudGF0aW9uIGZvciB2 aWRlbyBkZWNvZGVyLg0KPj4gKyAqDQo+PiArICogVGhlIGFwcGxpY2F0aW9uIG11c3QgbWFrZSBp dCBhdmFpbGFibGUgYXMNCj5BVkNvZGVjQ29udGV4dC5od2FjY2VsX2NvbnRleHQuDQo+PiArICov DQo+DQo+RG9lcyBkM2QxMnZhIHN1cHBvcnQgQVZDb2RlY0NvbnRleHQuaHdhY2NlbF9jb250ZXh0 ID8gSWYgeWVzLCB5b3Ugc2hvdWxkDQo+bWFrZQ0KPnRoaXMgZmlsZSBwdWJsaWMsIG1vZGlmeSB0 aGUgc3RydWN0dXJlcyBhbmQgcmVtb3ZlIGFsbCBmZl8gZnVuY3Rpb25zLCBvdGhlcndpc2UNCj51 c2VyIGNhbid0IHVzZSB0aGVzZSBzdHJ1Y3R1cmVzIGluIGFuIGFwcGxpY2F0aW9uLiBJZiBubywg cGxlYXNlIHJlbW92ZSB0aGUNCj5hYm92ZSBjb21tZW50IGFuZCBiZXR0ZXIgdG8gcmVuYW1lIHRo aXMgZmlsZSB0byBkM2QxMnZhX2RlY29kZS5oIGJlY2F1c2UNCj50aGUNCj5zdHJ1Y3R1cmVzIGFu ZCBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBmb3IgZDNkMTJ2YSBkZWNvZGVycy4NCj4NCj5U aGFua3MNCj5IYWloYW8NCg0KDQpNYWtlcyBzZW5zZS4gV2lsbCByZW1vdmUgdGhlIGNvbW1lbnQg YW5kIHJlbmFtZSB0aGUgZmlsZXMgaW4gVjQuIFRoYW5rcy4NCg0KDQoNCj4NCj4+ICt0eXBlZGVm IHN0cnVjdCBEM0QxMlZBRGVjb2RlQ29udGV4dCB7DQo+PiArwqDCoMKgIEFWQnVmZmVyUmVmICpk ZWNvZGVyX3JlZjsNCj4+ICsNCj4+ICvCoMKgwqAgLyoqDQo+PiArwqDCoMKgwqAgKiBEM0QxMiB2 aWRlbyBkZWNvZGVyDQo+PiArwqDCoMKgwqAgKi8NCj4+ICvCoMKgwqAgSUQzRDEyVmlkZW9EZWNv ZGVyICpkZWNvZGVyOw0KPj4gKw0KPj4gK8KgwqDCoCAvKioNCj4+ICvCoMKgwqDCoCAqIEQzRDEy IHZpZGVvIGRlY29kZXIgaGVhcA0KPj4gK8KgwqDCoMKgICovDQo+PiArwqDCoMKgIElEM0QxMlZp ZGVvRGVjb2RlckhlYXAgKmRlY29kZXJfaGVhcDsNCj4+ICsNCj4+ICvCoMKgwqAgLyoqDQo+PiAr wqDCoMKgwqAgKiBEM0QxMiBjb25maWd1cmF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBkZWNvZGVy DQo+PiArwqDCoMKgwqAgKg0KPj4gK8KgwqDCoMKgICogU3BlY2lmaWVkIGJ5IGRlY29kZXJzDQo+ PiArwqDCoMKgwqAgKi8NCj4+ICvCoMKgwqAgRDNEMTJfVklERU9fREVDT0RFX0NPTkZJR1VSQVRJ T04gY2ZnOw0KPj4gKw0KPj4gK8KgwqDCoCAvKioNCj4+ICvCoMKgwqDCoCAqIEEgY2FjaGVkIHF1 ZXVlIGZvciByZXVzaW5nIHRoZSBEM0QxMiBjb21tYW5kIGFsbG9jYXRvcnMNCj4+ICvCoMKgwqDC oCAqDQo+PiArwqDCoMKgwqAgKiBAc2VlDQo+PiBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20v ZW4tdXMvd2luZG93cy93aW4zMi9kaXJlY3QzZDEyL3JlY29yZGluZy0NCj5jb21tYW5kLWxpc3Rz LWFuZC1idW5kbGVzI2lkM2QxMmNvbW1hbmRhbGxvY2F0b3INCj4+ICvCoMKgwqDCoCAqLw0KPj4g K8KgwqDCoCBBVkZpZm8gKmFsbG9jYXRvcl9xdWV1ZTsNCj4+ICsNCj4+ICvCoMKgwqAgLyoqDQo+ PiArwqDCoMKgwqAgKiBEM0QxMiBjb21tYW5kIHF1ZXVlDQo+PiArwqDCoMKgwqAgKi8NCj4+ICvC oMKgwqAgSUQzRDEyQ29tbWFuZFF1ZXVlICpjb21tYW5kX3F1ZXVlOw0KPj4gKw0KPj4gK8KgwqDC oCAvKioNCj4+ICvCoMKgwqDCoCAqIEQzRDEyIHZpZGVvIGRlY29kZSBjb21tYW5kIGxpc3QNCj4+ ICvCoMKgwqDCoCAqLw0KPj4gK8KgwqDCoCBJRDNEMTJWaWRlb0RlY29kZUNvbW1hbmRMaXN0ICpj b21tYW5kX2xpc3Q7DQo+PiArDQo+PiArwqDCoMKgIC8qKg0KPj4gK8KgwqDCoMKgICogVGhlIGFy cmF5IG9mIGJ1ZmZlciByZXNvdXJjZXMgdXNlZCB0byB1cGxvYWQgY29tcHJlc3NlZCBiaXRzdHJl YW0NCj4+ICvCoMKgwqDCoCAqDQo+PiArwqDCoMKgwqAgKiBUaGUgYnVmZmVycy5sZW5ndGggaXMg dGhlIHNhbWUgYXMNCj5EM0QxMlZBRGVjb2RlQ29udGV4dC5tYXhfbnVtX3JlZg0KPj4gK8KgwqDC oMKgICovDQo+PiArwqDCoMKgIElEM0QxMlJlc291cmNlICoqYnVmZmVyczsNCj4+ICsNCj4+ICvC oMKgwqAgLyoqDQo+PiArwqDCoMKgwqAgKiBUaGUgYXJyYXkgb2YgcmVzb3VyY2VzIHVzZWQgZm9y IHJlZmVyZW5jZSBmcmFtZXMNCj4+ICvCoMKgwqDCoCAqDQo+PiArwqDCoMKgwqAgKiBUaGUgcmVm X3Jlc291cmNlcy5sZW5ndGggaXMgdGhlIHNhbWUgYXMNCj4+IEQzRDEyVkFEZWNvZGVDb250ZXh0 Lm1heF9udW1fcmVmDQo+PiArwqDCoMKgwqAgKi8NCj4+ICvCoMKgwqAgSUQzRDEyUmVzb3VyY2Ug KipyZWZfcmVzb3VyY2VzOw0KPj4gKw0KPj4gK8KgwqDCoCAvKioNCj4+ICvCoMKgwqDCoCAqIFRo ZSBhcnJheSBvZiBzdWJyZXNvdXJjZXMgdXNlZCBmb3IgcmVmZXJlbmNlIGZyYW1lcw0KPj4gK8Kg wqDCoMKgICoNCj4+ICvCoMKgwqDCoCAqIFRoZSByZWZfc3VicmVzb3VyY2VzLmxlbmd0aCBpcyB0 aGUgc2FtZSBhcw0KPj4gRDNEMTJWQURlY29kZUNvbnRleHQubWF4X251bV9yZWYNCj4+ICvCoMKg wqDCoCAqLw0KPj4gK8KgwqDCoCBVSU5UICpyZWZfc3VicmVzb3VyY2VzOw0KPj4gKw0KPj4gK8Kg wqDCoCAvKioNCj4+ICvCoMKgwqDCoCAqIE1heGltdW0gbnVtYmVyIG9mIHJlZmVyZW5jZSBmcmFt ZXMNCj4+ICvCoMKgwqDCoCAqLw0KPj4gK8KgwqDCoCBVSU5UIG1heF9udW1fcmVmOw0KPj4gKw0K Pj4gK8KgwqDCoCAvKioNCj4+ICvCoMKgwqDCoCAqIFRoZSBzeW5jIGNvbnRleHQgdXNlZCB0byBz eW5jIGNvbW1hbmQgcXVldWUNCj4+ICvCoMKgwqDCoCAqLw0KPj4gK8KgwqDCoCBBVkQzRDEyVkFT eW5jQ29udGV4dCAqc3luY19jdHg7DQo+PiArDQo+PiArwqDCoMKgIC8qKg0KPj4gK8KgwqDCoMKg ICogQSBwb2ludGVyIHRvIEFWRDNEMTJWQURldmljZUNvbnRleHQgdXNlZCB0byBjcmVhdGUgRDNE MTIgb2JqZWN0cw0KPj4gK8KgwqDCoMKgICovDQo+PiArwqDCoMKgIEFWRDNEMTJWQURldmljZUNv bnRleHQgKmRldmljZV9jdHg7DQo+PiArDQo+PiArwqDCoMKgIC8qKg0KPj4gK8KgwqDCoMKgICog UGl4ZWwgZm9ybWF0DQo+PiArwqDCoMKgwqAgKi8NCj4+ICvCoMKgwqAgZW51bSBBVlBpeGVsRm9y bWF0IHBpeF9mbXQ7DQo+PiArDQo+PiArwqDCoMKgIC8qKg0KPj4gK8KgwqDCoMKgICogUHJpdmF0 ZSB0byB0aGUgRkZtcGVnIEFWSFdBY2NlbCBpbXBsZW1lbnRhdGlvbg0KPj4gK8KgwqDCoMKgICov DQo+PiArwqDCoMKgIHVuc2lnbmVkIHJlcG9ydF9pZDsNCj4+ICt9IEQzRDEyVkFEZWNvZGVDb250 ZXh0Ow0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIEB9DQo+PiArICovDQo+PiArDQo+PiArI2RlZmlu ZSBEM0QxMlZBX0RFQ09ERV9DT05URVhUKGF2Y3R4KSAoKEQzRDEyVkFEZWNvZGVDb250ZXh0DQo+ KikoKGF2Y3R4KS0NCj4+ID5pbnRlcm5hbC0+aHdhY2NlbF9wcml2X2RhdGEpKQ0KPj4gKyNkZWZp bmUgRDNEMTJWQV9GUkFNRVNfQ09OVEVYVChhdmN0eCkgKChBVkhXRnJhbWVzQ29udGV4dA0KPiop KGF2Y3R4KS0NCj4+ID5od19mcmFtZXNfY3R4LT5kYXRhKQ0KPj4gKw0KPj4gKy8qKg0KPj4gKyAq IEBicmllZiBHZXQgYSBzdWl0YWJsZSBtYXhpbXVtIGJpdHN0cmVhbSBzaXplDQo+PiArICoNCj4+ ICsgKiBDcmVhdGluZyBhbmQgZGVzdHJveWluZyBhIHJlc291cmNlIG9uIGQzZDEyIG5lZWRzIHN5 bmMgYW5kIHJlYWxsb2NhdGlvbiwNCj4+IHNvIHVzZSB0aGlzIGZ1bmN0aW9uDQo+PiArICogdG8g aGVscCBhbGxvY2F0ZSBhIGJpZyBlbm91Z2ggYml0c3RyZWFtIGJ1ZmZlciB0byBhdm9pZCByZWNy ZWF0aW5nDQo+PiByZXNvdXJjZXMgd2hlbiBkZWNvZGluZy4NCj4+ICsgKg0KPj4gKyAqIEByZXR1 cm4gdGhlIHN1aXRhYmxlIHNpemUNCj4+ICsgKi8NCj4+ICtpbnQgZmZfZDNkMTJ2YV9nZXRfc3Vp dGFibGVfbWF4X2JpdHN0cmVhbV9zaXplKEFWQ29kZWNDb250ZXh0ICphdmN0eCk7DQo+PiArDQo+ PiArLyoqDQo+PiArICogQGJyaWVmIGluaXQgRDNEMTJWQURlY29kZUNvbnRleHQNCj4+ICsgKg0K Pj4gKyAqIEByZXR1cm4gRXJyb3IgY29kZSAocmV0IDwgMCBpZiBmYWlsZWQpDQo+PiArICovDQo+ PiAraW50IGZmX2QzZDEydmFfZGVjb2RlX2luaXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KTsNCj4+ ICsNCj4+ICsvKioNCj4+ICsgKiBAYnJpZWYgdW5pbml0IEQzRDEyVkFEZWNvZGVDb250ZXh0DQo+ PiArICoNCj4+ICsgKiBAcmV0dXJuIEVycm9yIGNvZGUgKHJldCA8IDAgaWYgZmFpbGVkKQ0KPj4g KyAqLw0KPj4gK2ludCBmZl9kM2QxMnZhX2RlY29kZV91bmluaXQoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4KTsNCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBAYnJpZWYgZDNkMTJ2YSBjb21tb24gZnJhbWUg cGFyYW1zDQo+PiArICoNCj4+ICsgKiBAcmV0dXJuIEVycm9yIGNvZGUgKHJldCA8IDAgaWYgZmFp bGVkKQ0KPj4gKyAqLw0KPj4gK2ludCBmZl9kM2QxMnZhX2NvbW1vbl9mcmFtZV9wYXJhbXMoQVZD b2RlY0NvbnRleHQgKmF2Y3R4LA0KPkFWQnVmZmVyUmVmDQo+PiAqaHdfZnJhbWVzX2N0eCk7DQo+ PiArDQo+PiArLyoqDQo+PiArICogQGJyaWVmIGQzZDEydmEgY29tbW9uIGVuZCBmcmFtZQ0KPj4g KyAqDQo+PiArICogQHBhcmFtIGF2Y3R4wqDCoMKgIGNvZGVjIGNvbnRleHQNCj4+ICsgKiBAcGFy YW0gZnJhbWXCoMKgwqAgY3VycmVudCBvdXRwdXQgZnJhbWUNCj4+ICsgKiBAcGFyYW0gcHDCoMKg wqDCoMKgwqAgcGljdHVyZSBwYXJhbWV0ZXJzDQo+PiArICogQHBhcmFtIHBwX3NpemXCoCB0aGUg c2l6ZSBvZiB0aGUgcGljdHVyZSBwYXJhbWV0ZXJzDQo+PiArICogQHBhcmFtIHFtwqDCoMKgwqDC oMKgIHF1YW50aXphdGlvbiBtYXRyaXgNCj4+ICsgKiBAcGFyYW0gcW1fc2l6ZcKgIHRoZSBzaXpl IG9mIHRoZSBxdWFudGl6YXRpb24gbWF0cml4DQo+PiArICogQHBhcmFtIGNhbGxiYWNrIHVwZGF0 ZSBkZWNvZGVyLXNwZWNpZmllZCBpbnB1dCBzdHJlYW0gYXJndW1lbnRzDQo+PiArICogQHJldHVy biBFcnJvciBjb2RlIChyZXQgPCAwIGlmIGZhaWxlZCkNCj4+ICsgKi8NCj4+ICtpbnQgZmZfZDNk MTJ2YV9jb21tb25fZW5kX2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZGcmFtZQ0KPipm cmFtZSwNCj4+ICvCoMKgwqAgY29uc3Qgdm9pZCAqcHAsIHVuc2lnbmVkIHBwX3NpemUsDQo+PiAr wqDCoMKgIGNvbnN0IHZvaWQgKnFtLCB1bnNpZ25lZCBxbV9zaXplLA0KPj4gK8KgwqDCoCBpbnQo KikoQVZDb2RlY0NvbnRleHQgKiwNCj5EM0QxMl9WSURFT19ERUNPREVfSU5QVVRfU1RSRUFNX0FS R1VNRU5UUyAqLA0KPj4gSUQzRDEyUmVzb3VyY2UgKikpOw0KPj4gKw0KPj4gKy8qKg0KPj4gKyAq IEBicmllZiBnZXQgc3VyZmFjZSBpbmRleA0KPj4gKyAqDQo+PiArICogQHJldHVybiBpbmRleA0K Pj4gKyAqLw0KPj4gK2ludHB0cl90IGZmX2QzZDEydmFfZ2V0X3N1cmZhY2VfaW5kZXgoQVZDb2Rl Y0NvbnRleHQgKmF2Y3R4LCBjb25zdA0KPkFWRnJhbWUNCj4+ICpmcmFtZSk7DQo+PiArDQo+PiAr I2VuZGlmIC8qIEFWQ09ERUNfRDNEMTJWQV9ERUNfSCAqLw0KPj4gZGlmZiAtLWdpdCBhL2xpYmF2 Y29kZWMvZDNkMTJ2YV9oMjY0LmMgYi9saWJhdmNvZGVjL2QzZDEydmFfaDI2NC5jDQo+PiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPj4gaW5kZXggMDAwMDAwMDAwMC4uMDgxMGEwMzRiNA0KPj4gLS0t IC9kZXYvbnVsbA0KPj4gKysrIGIvbGliYXZjb2RlYy9kM2QxMnZhX2gyNjQuYw0KPj4gQEAgLTAs MCArMSwyMTAgQEANCj4+ICsvKg0KPj4gKyAqIERpcmVjdDNEIDEyIGgyNjQgSFcgYWNjZWxlcmF0 aW9uDQo+PiArICoNCj4+ICsgKiBjb3B5cmlnaHQgKGMpIDIwMjItMjAyMyBXdSBKaWFuaHVhIDx0 b3FzeHdAb3V0bG9vay5jb20+DQo+PiArICoNCj4+ICsgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBG Rm1wZWcuDQo+PiArICoNCj4+ICsgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQo+PiArICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KPj4gKyAqIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcg0KPj4gKyAqIHZlcnNp b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLg0KPj4gKyAqDQo+PiArICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsDQo+PiArICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCj4+ICsgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuwqAgU2VlIHRoZQ0KPkdOVQ0K Pj4gKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQo+ PiArICoNCj4+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljDQo+PiArICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KPj4gKyAqIEZvdW5kYXRpb24sIElu Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMw MQ0KPj4gVVNBDQo+PiArICovDQo+PiArDQo+PiArI2luY2x1ZGUgImNvbmZpZ19jb21wb25lbnRz LmgiDQo+PiArI2luY2x1ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIg0KPj4gKyNpbmNsdWRlICJo MjY0ZGVjLmgiDQo+PiArI2luY2x1ZGUgImgyNjRkYXRhLmgiDQo+PiArI2luY2x1ZGUgImgyNjRf cHMuaCINCj4+ICsjaW5jbHVkZSAibXBlZ3V0aWxzLmgiDQo+PiArI2luY2x1ZGUgImR4dmEyX2lu dGVybmFsLmgiDQo+PiArI2luY2x1ZGUgImQzZDEydmEuaCINCj4+ICsjaW5jbHVkZSAibGliYXZ1 dGlsL2h3Y29udGV4dF9kM2QxMnZhX2ludGVybmFsLmgiDQo+PiArI2luY2x1ZGUgPGR4dmEuaD4N Cj4+ICsNCj4+ICt0eXBlZGVmIHN0cnVjdCBIMjY0RGVjb2RlUGljdHVyZUNvbnRleHQgew0KPj4g K8KgwqDCoCBEWFZBX1BpY1BhcmFtc19IMjY0wqDCoCBwcDsNCj4+ICvCoMKgwqAgRFhWQV9RbWF0 cml4X0gyNjTCoMKgwqDCoCBxbTsNCj4+ICvCoMKgwqAgdW5zaWduZWTCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzbGljZV9jb3VudDsNCj4+ICvCoMKgwqAgRFhWQV9TbGljZV9IMjY0X1Nob3J0 IHNsaWNlX3Nob3J0W01BWF9TTElDRVNdOw0KPj4gK8KgwqDCoCBjb25zdCB1aW50OF90wqDCoMKg wqDCoMKgwqDCoCAqYml0c3RyZWFtOw0KPj4gK8KgwqDCoCB1bnNpZ25lZMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGJpdHN0cmVhbV9zaXplOw0KPj4gK30gSDI2NERlY29kZVBpY3R1cmVDb250 ZXh0Ow0KPj4gKw0KPj4gK3N0YXRpYyB2b2lkIGZpbGxfc2xpY2Vfc2hvcnQoRFhWQV9TbGljZV9I MjY0X1Nob3J0ICpzbGljZSwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWduZWQgc2l6ZSkN Cj4+ICt7DQo+PiArwqDCoMKgIG1lbXNldChzbGljZSwgMCwgc2l6ZW9mKCpzbGljZSkpOw0KPj4g K8KgwqDCoCBzbGljZS0+QlNOQUx1bml0RGF0YUxvY2F0aW9uID0gcG9zaXRpb247DQo+PiArwqDC oMKgIHNsaWNlLT5TbGljZUJ5dGVzSW5CdWZmZXLCoMKgwqAgPSBzaXplOw0KPj4gK8KgwqDCoCBz bGljZS0+d0JhZFNsaWNlQ2hvcHBpbmfCoMKgwqDCoCA9IDA7DQo+PiArfQ0KPj4gKw0KPj4gK3N0 YXRpYyBpbnQgZDNkMTJ2YV9oMjY0X3N0YXJ0X2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0eCwN Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgYXZfdW51c2VkIGNvbnN0IHVpbnQ4X3QgKmJ1ZmZlciwNCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgYXZfdW51c2VkIHVpbnQzMl90IHNpemUpDQo+PiArew0KPj4gK8KgwqDCoCBjb25zdCBI MjY0Q29udGV4dMKgwqDCoMKgwqDCoMKgICpowqDCoMKgwqDCoMKgID0gYXZjdHgtPnByaXZfZGF0 YTsNCj4+ICvCoMKgwqAgSDI2NERlY29kZVBpY3R1cmVDb250ZXh0ICpjdHhfcGljID0gaC0+Y3Vy X3BpY19wdHItDQo+PiA+aHdhY2NlbF9waWN0dXJlX3ByaXZhdGU7DQo+PiArwqDCoMKgIEQzRDEy VkFEZWNvZGVDb250ZXh0wqDCoMKgwqAgKmN0eMKgwqDCoMKgID0gRDNEMTJWQV9ERUNPREVfQ09O VEVYVChhdmN0eCk7DQo+PiArDQo+PiArwqDCoMKgIGlmICghY3R4KQ0KPj4gK8KgwqDCoMKgwqDC oMKgIHJldHVybiAtMTsNCj4+ICsNCj4+ICvCoMKgwqAgYXNzZXJ0KGN0eF9waWMpOw0KPj4gKw0K Pj4gK8KgwqDCoCBmZl9keHZhMl9oMjY0X2ZpbGxfcGljdHVyZV9wYXJhbWV0ZXJzKGF2Y3R4LCAo QVZEWFZBQ29udGV4dCAqKWN0eCwNCj4+ICZjdHhfcGljLT5wcCk7DQo+PiArDQo+PiArwqDCoMKg IGZmX2R4dmEyX2gyNjRfZmlsbF9zY2FsaW5nX2xpc3RzKGF2Y3R4LCAoQVZEWFZBQ29udGV4dCAq KWN0eCwgJmN0eF9waWMtDQo+PiA+cW0pOw0KPj4gKw0KPj4gK8KgwqDCoCBjdHhfcGljLT5zbGlj ZV9jb3VudMKgwqDCoCA9IDA7DQo+PiArwqDCoMKgIGN0eF9waWMtPmJpdHN0cmVhbV9zaXplID0g MDsNCj4+ICvCoMKgwqAgY3R4X3BpYy0+Yml0c3RyZWFtwqDCoMKgwqDCoCA9IE5VTEw7DQo+PiAr DQo+PiArwqDCoMKgIHJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50IGQzZDEy dmFfaDI2NF9kZWNvZGVfc2xpY2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBjb25zdA0KPnVpbnQ4 X3QNCj4+ICpidWZmZXIsIHVpbnQzMl90IHNpemUpDQo+PiArew0KPj4gK8KgwqDCoCB1bnNpZ25l ZCBwb3NpdGlvbjsNCj4+ICvCoMKgwqAgY29uc3QgSDI2NENvbnRleHTCoMKgwqDCoMKgwqDCoCAq aMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBhdmN0eC0+cHJpdl9kYXRhOw0KPj4gK8Kg wqDCoCBjb25zdCBIMjY0U2xpY2VDb250ZXh0wqDCoCAqc2zCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCA9ICZoLT5zbGljZV9jdHhbMF07DQo+PiArwqDCoMKgIGNvbnN0IEgyNjRQaWN0dXJlwqDC oMKgwqDCoMKgwqAgKmN1cnJlbnRfcGljdHVyZSA9IGgtPmN1cl9waWNfcHRyOw0KPj4gK8KgwqDC oCBIMjY0RGVjb2RlUGljdHVyZUNvbnRleHQgKmN0eF9waWPCoMKgwqDCoMKgwqDCoMKgID0gY3Vy cmVudF9waWN0dXJlLQ0KPj4gPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOw0KPj4gKw0KPj4gK8Kg wqDCoCBpZiAoY3R4X3BpYy0+c2xpY2VfY291bnQgPj0gTUFYX1NMSUNFUykNCj4+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gQVZFUlJPUihFUkFOR0UpOw0KPj4gKw0KPj4gK8KgwqDCoCBpZiAoIWN0 eF9waWMtPmJpdHN0cmVhbSkNCj4+ICvCoMKgwqDCoMKgwqDCoCBjdHhfcGljLT5iaXRzdHJlYW0g PSBidWZmZXI7DQo+PiArwqDCoMKgIGN0eF9waWMtPmJpdHN0cmVhbV9zaXplICs9IHNpemU7DQo+ PiArDQo+PiArwqDCoMKgIHBvc2l0aW9uID0gYnVmZmVyIC0gY3R4X3BpYy0+Yml0c3RyZWFtOw0K Pj4gK8KgwqDCoCBmaWxsX3NsaWNlX3Nob3J0KCZjdHhfcGljLT5zbGljZV9zaG9ydFtjdHhfcGlj LT5zbGljZV9jb3VudF0sIHBvc2l0aW9uLA0KPj4gc2l6ZSk7DQo+PiArwqDCoMKgIGN0eF9waWMt PnNsaWNlX2NvdW50Kys7DQo+PiArDQo+PiArwqDCoMKgIGlmIChzbC0+c2xpY2VfdHlwZSAhPSBB Vl9QSUNUVVJFX1RZUEVfSSAmJiBzbC0+c2xpY2VfdHlwZSAhPQ0KPj4gQVZfUElDVFVSRV9UWVBF X1NJKQ0KPj4gK8KgwqDCoMKgwqDCoMKgIGN0eF9waWMtPnBwLndCaXRGaWVsZHMgJj0gfigxIDw8 IDE1KTsgLyogU2V0IEludHJhUGljRmxhZyB0byAwICovDQo+PiArDQo+PiArwqDCoMKgIHJldHVy biAwOw0KPj4gK30NCj4+ICsNCj4+ICsjZGVmaW5lIFNUQVJUX0NPREUgNjU1MzYNCj4+ICsjZGVm aW5lIFNUQVJUX0NPREVfU0laRSAzDQo+PiArc3RhdGljIGludCB1cGRhdGVfaW5wdXRfYXJndW1l bnRzKEFWQ29kZWNDb250ZXh0ICphdmN0eCwNCj4+IEQzRDEyX1ZJREVPX0RFQ09ERV9JTlBVVF9T VFJFQU1fQVJHVU1FTlRTICppbnB1dF9hcmdzLA0KPklEM0QxMlJlc291cmNlICpidWZmZXIpDQo+ PiArew0KPj4gK8KgwqDCoCBEM0QxMlZBRGVjb2RlQ29udGV4dMKgwqDCoMKgICpjdHjCoMKgwqDC oMKgwqDCoMKgwqAgPQ0KPkQzRDEyVkFfREVDT0RFX0NPTlRFWFQoYXZjdHgpOw0KPj4gK8KgwqDC oCBBVkhXRnJhbWVzQ29udGV4dMKgwqDCoMKgwqDCoMKgICpmcmFtZXNfY3R4wqDCoCA9DQo+RDNE MTJWQV9GUkFNRVNfQ09OVEVYVChhdmN0eCk7DQo+PiArwqDCoMKgIEFWRDNEMTJWQUZyYW1lc0Nv bnRleHTCoMKgICpmcmFtZXNfaHdjdHggPSBmcmFtZXNfY3R4LT5od2N0eDsNCj4+ICsNCj4+ICvC oMKgwqAgY29uc3QgSDI2NENvbnRleHTCoMKgwqDCoMKgwqDCoCAqaMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgPSBhdmN0eC0+cHJpdl9kYXRhOw0KPj4gK8KgwqDCoCBjb25zdCBIMjY0UGlj dHVyZcKgwqDCoMKgwqDCoMKgICpjdXJyZW50X3BpY3R1cmUgPSBoLT5jdXJfcGljX3B0cjsNCj4+ ICvCoMKgwqAgSDI2NERlY29kZVBpY3R1cmVDb250ZXh0ICpjdHhfcGljwqDCoMKgwqDCoMKgwqDC oCA9IGN1cnJlbnRfcGljdHVyZS0NCj4+ID5od2FjY2VsX3BpY3R1cmVfcHJpdmF0ZTsNCj4+ICsN Cj4+ICvCoMKgwqAgaW50IGksIGluZGV4Ow0KPj4gK8KgwqDCoCB1aW50OF90ICptYXBwZWRfZGF0 YSwgKm1hcHBlZF9wdHI7DQo+PiArwqDCoMKgIERYVkFfU2xpY2VfSDI2NF9TaG9ydCAqc2xpY2U7 DQo+PiArwqDCoMKgIEQzRDEyX1ZJREVPX0RFQ09ERV9GUkFNRV9BUkdVTUVOVCAqYXJnczsNCj4+ ICsNCj4+ICvCoMKgwqAgaWYgKEZBSUxFRChJRDNEMTJSZXNvdXJjZV9NYXAoYnVmZmVyLCAwLCBO VUxMLCAmbWFwcGVkX2RhdGEpKSkgew0KPj4gK8KgwqDCoMKgwqDCoMKgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIG1hcCBEM0QxMiBCdWZmZXINCj4+IHJlc291cmNlIVxu Iik7DQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsNCj4+ICvCoMKg wqAgfQ0KPj4gKw0KPj4gK8KgwqDCoCBtYXBwZWRfcHRyID0gbWFwcGVkX2RhdGE7DQo+PiArwqDC oMKgIGZvciAoaSA9IDA7IGkgPCBjdHhfcGljLT5zbGljZV9jb3VudDsgaSsrKSB7DQo+PiArwqDC oMKgwqDCoMKgwqAgVUlOVCBwb3NpdGlvbiwgc2l6ZTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBzbGlj ZSA9ICZjdHhfcGljLT5zbGljZV9zaG9ydFtpXTsNCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoCBw b3NpdGlvbiA9IHNsaWNlLT5CU05BTHVuaXREYXRhTG9jYXRpb247DQo+PiArwqDCoMKgwqDCoMKg wqAgc2l6ZcKgwqDCoMKgID0gc2xpY2UtPlNsaWNlQnl0ZXNJbkJ1ZmZlcjsNCj4+ICsNCj4+ICvC oMKgwqDCoMKgwqDCoCBzbGljZS0+U2xpY2VCeXRlc0luQnVmZmVyICs9IFNUQVJUX0NPREVfU0la RTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBzbGljZS0+QlNOQUx1bml0RGF0YUxvY2F0aW9uID0gbWFw cGVkX3B0ciAtIG1hcHBlZF9kYXRhOw0KPj4gKw0KPj4gK8KgwqDCoMKgwqDCoMKgICoodWludDMy X3QgKiltYXBwZWRfcHRyID0gU1RBUlRfQ09ERTsNCj4+ICvCoMKgwqDCoMKgwqDCoCBtYXBwZWRf cHRyICs9IFNUQVJUX0NPREVfU0laRTsNCj4+ICsNCj4+ICvCoMKgwqDCoMKgwqDCoCBtZW1jcHko bWFwcGVkX3B0ciwgJmN0eF9waWMtPmJpdHN0cmVhbVtwb3NpdGlvbl0sIHNpemUpOw0KPj4gK8Kg wqDCoMKgwqDCoMKgIG1hcHBlZF9wdHIgKz0gc2l6ZTsNCj4+ICvCoMKgwqAgfQ0KPj4gKw0KPj4g K8KgwqDCoCBJRDNEMTJSZXNvdXJjZV9Vbm1hcChidWZmZXIsIDAsIE5VTEwpOw0KPj4gKw0KPj4g K8KgwqDCoCBpbnB1dF9hcmdzLT5Db21wcmVzc2VkQml0c3RyZWFtID0NCj4+IChEM0QxMl9WSURF T19ERUNPREVfQ09NUFJFU1NFRF9CSVRTVFJFQU0pew0KPj4gK8KgwqDCoMKgwqDCoMKgIC5wQnVm ZmVyID0gYnVmZmVyLA0KPj4gK8KgwqDCoMKgwqDCoMKgIC5PZmZzZXTCoCA9IDAsDQo+PiArwqDC oMKgwqDCoMKgwqAgLlNpemXCoMKgwqAgPSBtYXBwZWRfcHRyIC0gbWFwcGVkX2RhdGEsDQo+PiAr wqDCoMKgIH07DQo+PiArDQo+PiArwqDCoMKgIGFyZ3MgPSAmaW5wdXRfYXJncy0+RnJhbWVBcmd1 bWVudHNbaW5wdXRfYXJncy0NCj4+TnVtRnJhbWVBcmd1bWVudHMrK107DQo+PiArwqDCoMKgIGFy Z3MtPlR5cGXCoCA9DQo+RDNEMTJfVklERU9fREVDT0RFX0FSR1VNRU5UX1RZUEVfU0xJQ0VfQ09O VFJPTDsNCj4+ICvCoMKgwqAgYXJncy0+U2l6ZcKgID0gc2l6ZW9mKERYVkFfU2xpY2VfSDI2NF9T aG9ydCkgKiBjdHhfcGljLT5zbGljZV9jb3VudDsNCj4+ICvCoMKgwqAgYXJncy0+cERhdGEgPSBj dHhfcGljLT5zbGljZV9zaG9ydDsNCj4+ICsNCj4+ICvCoMKgwqAgaW5kZXggPSBjdHhfcGljLT5w cC5DdXJyUGljLkluZGV4N0JpdHM7DQo+PiArwqDCoMKgIGN0eC0+cmVmX3Jlc291cmNlc1tpbmRl eF0gPSBmcmFtZXNfaHdjdHgtPnRleHR1cmVfaW5mb3NbaW5kZXhdLnRleHR1cmU7DQo+PiArwqDC oMKgIGZvciAoaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhjdHhfcGljLT5wcC5SZWZGcmFtZUxp c3QpOyBpKyspIHsNCj4+ICvCoMKgwqDCoMKgwqDCoCBpbmRleCA9IGN0eF9waWMtPnBwLlJlZkZy YW1lTGlzdFtpXS5JbmRleDdCaXRzOw0KPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChpbmRleCAhPSAw eDdmKQ0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3R4LT5yZWZfcmVzb3VyY2VzW2luZGV4 XSA9IGZyYW1lc19od2N0eC0NCj4+ID50ZXh0dXJlX2luZm9zW2luZGV4XS50ZXh0dXJlOw0KPj4g K8KgwqDCoCB9DQo+PiArDQo+PiArwqDCoMKgIHJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICtz dGF0aWMgaW50IGQzZDEydmFfaDI2NF9lbmRfZnJhbWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQ0K Pj4gK3sNCj4+ICvCoMKgwqAgSDI2NENvbnRleHTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICpowqDCoMKgwqDCoMKgID0gYXZjdHgtPnByaXZfZGF0YTsNCj4+ICvCoMKgwqAgSDI2NERlY29k ZVBpY3R1cmVDb250ZXh0wqAgKmN0eF9waWMgPSBoLT5jdXJfcGljX3B0ci0NCj4+ID5od2FjY2Vs X3BpY3R1cmVfcHJpdmF0ZTsNCj4+ICvCoMKgwqAgSDI2NFNsaWNlQ29udGV4dMKgwqDCoMKgwqDC oMKgwqDCoCAqc2zCoMKgwqDCoMKgID0gJmgtPnNsaWNlX2N0eFswXTsNCj4+ICsNCj4+ICvCoMKg wqAgaW50IHJldDsNCj4+ICsNCj4+ICvCoMKgwqAgaWYgKGN0eF9waWMtPnNsaWNlX2NvdW50IDw9 IDAgfHwgY3R4X3BpYy0+Yml0c3RyZWFtX3NpemUgPD0gMCkNCj4+ICvCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gLTE7DQo+PiArDQo+PiArwqDCoMKgIHJldCA9IGZmX2QzZDEydmFfY29tbW9uX2VuZF9m cmFtZShhdmN0eCwgaC0+Y3VyX3BpY19wdHItPmYsDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmN0 eF9waWMtPnBwLCBzaXplb2YoY3R4X3BpYy0+cHApLA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZj dHhfcGljLT5xbSwgc2l6ZW9mKGN0eF9waWMtPnFtKSwNCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1 cGRhdGVfaW5wdXRfYXJndW1lbnRzKTsNCj4+ICvCoMKgwqAgaWYgKCFyZXQpDQo+PiArwqDCoMKg wqDCoMKgwqAgZmZfaDI2NF9kcmF3X2hvcml6X2JhbmQoaCwgc2wsIDAsIGgtPmF2Y3R4LT5oZWln aHQpOw0KPj4gKw0KPj4gK8KgwqDCoCByZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgaW50IGQzZDEydmFfaDI2NF9kZWNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQo+ PiArew0KPj4gK8KgwqDCoCBEM0QxMlZBRGVjb2RlQ29udGV4dCAqY3R4ID0gRDNEMTJWQV9ERUNP REVfQ09OVEVYVChhdmN0eCk7DQo+PiArDQo+PiArwqDCoMKgIGN0eC0+Y2ZnLkRlY29kZVByb2Zp bGUgPSBEM0QxMl9WSURFT19ERUNPREVfUFJPRklMRV9IMjY0Ow0KPj4gKw0KPj4gK8KgwqDCoCBy ZXR1cm4gZmZfZDNkMTJ2YV9kZWNvZGVfaW5pdChhdmN0eCk7DQo+PiArfQ0KPj4gKw0KPj4gKyNp ZiBDT05GSUdfSDI2NF9EM0QxMlZBX0hXQUNDRUwNCj4+ICtjb25zdCBBVkhXQWNjZWwgZmZfaDI2 NF9kM2QxMnZhX2h3YWNjZWwgPSB7DQo+PiArwqDCoMKgIC5uYW1lwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgPSAiaDI2NF9kM2QxMnZhIiwNCj4+ICvCoMKgwqAgLnR5cGXCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IEFWTUVESUFfVFlQRV9WSURFTywNCj4+ICvCoMKg wqAgLmlkwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gQVZfQ09ERUNfSURf SDI2NCwNCj4+ICvCoMKgwqAgLnBpeF9mbXTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9IEFW X1BJWF9GTVRfRDNEMTIsDQo+PiArwqDCoMKgIC5pbml0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgPSBkM2QxMnZhX2gyNjRfZGVjb2RlX2luaXQsDQo+PiArwqDCoMKgIC51bmluaXTC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgID0gZmZfZDNkMTJ2YV9kZWNvZGVfdW5pbml0LA0K Pj4gK8KgwqDCoCAuc3RhcnRfZnJhbWXCoMKgwqDCoMKgwqDCoMKgwqAgPSBkM2QxMnZhX2gyNjRf c3RhcnRfZnJhbWUsDQo+PiArwqDCoMKgIC5kZWNvZGVfc2xpY2XCoMKgwqDCoMKgwqDCoMKgID0g ZDNkMTJ2YV9oMjY0X2RlY29kZV9zbGljZSwNCj4+ICvCoMKgwqAgLmVuZF9mcmFtZcKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgPSBkM2QxMnZhX2gyNjRfZW5kX2ZyYW1lLA0KPj4gK8KgwqDCoCAuZnJh bWVfcGFyYW1zwqDCoMKgwqDCoMKgwqDCoCA9IGZmX2QzZDEydmFfY29tbW9uX2ZyYW1lX3BhcmFt cywNCj4+ICvCoMKgwqAgLmZyYW1lX3ByaXZfZGF0YV9zaXplID0gc2l6ZW9mKEgyNjREZWNvZGVQ aWN0dXJlQ29udGV4dCksDQo+PiArwqDCoMKgIC5wcml2X2RhdGFfc2l6ZcKgwqDCoMKgwqDCoCA9 IHNpemVvZihEM0QxMlZBRGVjb2RlQ29udGV4dCksDQo+PiArfTsNCj4+ICsjZW5kaWYNCj4+IGRp ZmYgLS1naXQgYS9saWJhdmNvZGVjL2R4dmEyLmMgYi9saWJhdmNvZGVjL2R4dmEyLmMNCj4+IGlu ZGV4IDU2OGQ2ODZmMzkuLmIyMmVhM2U4ZjIgMTAwNjQ0DQo+PiAtLS0gYS9saWJhdmNvZGVjL2R4 dmEyLmMNCj4+ICsrKyBiL2xpYmF2Y29kZWMvZHh2YTIuYw0KPj4gQEAgLTc3NCw2ICs3NzQsMTAg QEAgdW5zaWduZWQgZmZfZHh2YTJfZ2V0X3N1cmZhY2VfaW5kZXgoY29uc3QNCj5BVkNvZGVjQ29u dGV4dA0KPj4gKmF2Y3R4LA0KPj4gwqDCoMKgwqAgdm9pZCAqc3VyZmFjZSA9IGdldF9zdXJmYWNl KGF2Y3R4LCBmcmFtZSk7DQo+PiDCoMKgwqDCoCB1bnNpZ25lZCBpOw0KPj4NCj4+ICsjaWYgQ09O RklHX0QzRDEyVkENCj4+ICvCoMKgwqAgaWYgKGF2Y3R4LT5waXhfZm10ID09IEFWX1BJWF9GTVRf RDNEMTIpDQo+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIChpbnRwdHJfdClmcmFtZS0+ZGF0YVsx XTsNCj4+ICsjZW5kaWYNCj4+IMKgI2lmIENPTkZJR19EM0QxMVZBDQo+PiDCoMKgwqDCoCBpZiAo YXZjdHgtPnBpeF9mbXQgPT0gQVZfUElYX0ZNVF9EM0QxMSkNCj4+IMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIChpbnRwdHJfdClmcmFtZS0+ZGF0YVsxXTsNCj4+IEBAIC0xMDU2LDMgKzEwNjAsMjMg QEAgaW50IGZmX2R4dmEyX2lzX2QzZDExKGNvbnN0IEFWQ29kZWNDb250ZXh0DQo+KmF2Y3R4KQ0K Pj4gwqDCoMKgwqAgZWxzZQ0KPj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsNCj4+IMKgfQ0K Pj4gKw0KPj4gK3Vuc2lnbmVkICpmZl9keHZhMl9nZXRfcmVwb3J0X2lkKGNvbnN0IEFWQ29kZWND b250ZXh0ICphdmN0eCwNCj5BVkRYVkFDb250ZXh0DQo+PiAqY3R4KQ0KPj4gK3sNCj4+ICvCoMKg wqAgdW5zaWduZWQgKnJlcG9ydF9pZCA9IE5VTEw7DQo+PiArDQo+PiArI2lmIENPTkZJR19EM0Qx MlZBDQo+PiArwqDCoMKgIGlmIChhdmN0eC0+cGl4X2ZtdCA9PSBBVl9QSVhfRk1UX0QzRDEyKQ0K Pj4gK8KgwqDCoMKgwqDCoMKgIHJlcG9ydF9pZCA9ICZjdHgtPmQzZDEydmEucmVwb3J0X2lkOw0K Pj4gKyNlbmRpZg0KPj4gKyNpZiBDT05GSUdfRDNEMTFWQQ0KPj4gK8KgwqDCoCBpZiAoZmZfZHh2 YTJfaXNfZDNkMTEoYXZjdHgpKQ0KPj4gK8KgwqDCoMKgwqDCoMKgIHJlcG9ydF9pZCA9ICZjdHgt PmQzZDExdmEucmVwb3J0X2lkOw0KPj4gKyNlbmRpZg0KPj4gKyNpZiBDT05GSUdfRFhWQTINCj4+ ICvCoMKgwqAgaWYgKGF2Y3R4LT5waXhfZm10ID09IEFWX1BJWF9GTVRfRFhWQTJfVkxEKQ0KPj4g K8KgwqDCoMKgwqDCoMKgIHJlcG9ydF9pZCA9ICZjdHgtPmR4dmEyLnJlcG9ydF9pZDsNCj4+ICsj ZW5kaWYNCj4+ICsNCj4+ICvCoMKgwqAgcmV0dXJuIHJlcG9ydF9pZDsNCj4+ICt9DQo+PiBkaWZm IC0tZ2l0IGEvbGliYXZjb2RlYy9keHZhMi5oIGIvbGliYXZjb2RlYy9keHZhMi5oDQo+PiBpbmRl eCAyMmM5Mzk5MmYyLi5iZGVjNjExMmU5IDEwMDY0NA0KPj4gLS0tIGEvbGliYXZjb2RlYy9keHZh Mi5oDQo+PiArKysgYi9saWJhdmNvZGVjL2R4dmEyLmgNCj4+IEBAIC00NSw5ICs0NSw2IEBADQo+ PiDCoCAqIEB7DQo+PiDCoCAqLw0KPj4NCj4+IC0jZGVmaW5lIEZGX0RYVkEyX1dPUktBUk9VTkRf U0NBTElOR19MSVNUX1pJR1pBRyAxIC8vLzwgV29yaw0KPmFyb3VuZCBmb3IgRFhWQTINCj4+IGFu ZCBvbGQgVVZEL1VWRCsgQVRJIHZpZGVvIGNhcmRzDQo+PiAtI2RlZmluZSBGRl9EWFZBMl9XT1JL QVJPVU5EX0lOVEVMX0NMRUFSVklERU/CoMKgwqAgMiAvLy88IFdvcmsNCj5hcm91bmQgZm9yIERY VkEyDQo+PiBhbmQgb2xkIEludGVsIEdQVXMgd2l0aCBDbGVhclZpZGVvIGludGVyZmFjZQ0KPj4g LQ0KPj4gwqAvKioNCj4+IMKgICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byBwcm92aWRlcyB0 aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zIGFuZCBkYXRhDQo+PiDCoCAqIHRvIHRoZSBEWFZB MiBGRm1wZWcgSFdBY2NlbCBpbXBsZW1lbnRhdGlvbi4NCj4+IGRpZmYgLS1naXQgYS9saWJhdmNv ZGVjL2R4dmEyX2gyNjQuYyBiL2xpYmF2Y29kZWMvZHh2YTJfaDI2NC5jDQo+PiBpbmRleCA2MzAw YjE0MThkLi43YTA3NmVhOTgxIDEwMDY0NA0KPj4gLS0tIGEvbGliYXZjb2RlYy9keHZhMl9oMjY0 LmMNCj4+ICsrKyBiL2xpYmF2Y29kZWMvZHh2YTJfaDI2NC5jDQo+PiBAQCAtNDcsOSArNDcsMTAg QEAgc3RhdGljIHZvaWQgZmlsbF9waWN0dXJlX2VudHJ5KERYVkFfUGljRW50cnlfSDI2NA0KPipw aWMsDQo+PiDCoMKgwqDCoCBwaWMtPmJQaWNFbnRyeSA9IGluZGV4IHwgKGZsYWcgPDwgNyk7DQo+ PiDCoH0NCj4+DQo+PiAtc3RhdGljIHZvaWQgZmlsbF9waWN0dXJlX3BhcmFtZXRlcnMoY29uc3Qg QVZDb2RlY0NvbnRleHQgKmF2Y3R4LA0KPj4gQVZEWFZBQ29udGV4dCAqY3R4LCBjb25zdCBIMjY0 Q29udGV4dCAqaCwNCj4+ICt2b2lkIGZmX2R4dmEyX2gyNjRfZmlsbF9waWN0dXJlX3BhcmFtZXRl cnMoY29uc3QgQVZDb2RlY0NvbnRleHQgKmF2Y3R4LA0KPj4gQVZEWFZBQ29udGV4dCAqY3R4LA0K Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIERYVkFfUGljUGFyYW1zX0gyNjQgKnBwKQ0KPj4gwqB7DQo+PiAr wqDCoMKgIGNvbnN0IEgyNjRDb250ZXh0ICpowqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9 IGF2Y3R4LT5wcml2X2RhdGE7DQo+PiDCoMKgwqDCoCBjb25zdCBIMjY0UGljdHVyZSAqY3VycmVu dF9waWN0dXJlID0gaC0+Y3VyX3BpY19wdHI7DQo+PiDCoMKgwqDCoCBjb25zdCBTUFMgKnNwcyA9 IGgtPnBzLnNwczsNCj4+IMKgwqDCoMKgIGNvbnN0IFBQUyAqcHBzID0gaC0+cHMucHBzOw0KPj4g QEAgLTE2Myw5ICsxNjQsMTAgQEAgc3RhdGljIHZvaWQgZmlsbF9waWN0dXJlX3BhcmFtZXRlcnMo Y29uc3QNCj5BVkNvZGVjQ29udGV4dA0KPj4gKmF2Y3R4LCBBVkRYVkFDb250ZXh0ICoNCj4+IMKg wqDCoMKgIC8vcHAtPlNsaWNlR3JvdXBNYXBbODEwXTvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIC8qIFhYWCBub3QgaW1wbGVtZW50ZWQgYnkgRkZtcGVnDQo+PiAqLw0KPj4gwqB9DQo+Pg0K Pj4gLXN0YXRpYyB2b2lkIGZpbGxfc2NhbGluZ19saXN0cyhjb25zdCBBVkNvZGVjQ29udGV4dCAq YXZjdHgsIEFWRFhWQUNvbnRleHQNCj4+ICpjdHgsIGNvbnN0IEgyNjRDb250ZXh0ICpoLCBEWFZB X1FtYXRyaXhfSDI2NCAqcW0pDQo+PiArdm9pZCBmZl9keHZhMl9oMjY0X2ZpbGxfc2NhbGluZ19s aXN0cyhjb25zdCBBVkNvZGVjQ29udGV4dCAqYXZjdHgsDQo+PiBBVkRYVkFDb250ZXh0ICpjdHgs IERYVkFfUW1hdHJpeF9IMjY0ICpxbSkNCj4+IMKgew0KPj4gLcKgwqDCoCBjb25zdCBQUFMgKnBw cyA9IGgtPnBzLnBwczsNCj4+ICvCoMKgwqAgY29uc3QgSDI2NENvbnRleHQgKmjCoMKgID0gYXZj dHgtPnByaXZfZGF0YTsNCj4+ICvCoMKgwqAgY29uc3QgUFBTwqDCoMKgwqDCoMKgwqDCoCAqcHBz ID0gaC0+cHMucHBzOw0KPj4gwqDCoMKgwqAgdW5zaWduZWQgaSwgajsNCj4+IMKgwqDCoMKgIG1l bXNldChxbSwgMCwgc2l6ZW9mKCpxbSkpOw0KPj4gwqDCoMKgwqAgaWYgKERYVkFfQ09OVEVYVF9X T1JLQVJPVU5EKGF2Y3R4LCBjdHgpICYNCj4+IEZGX0RYVkEyX1dPUktBUk9VTkRfU0NBTElOR19M SVNUX1pJR1pBRykgew0KPj4gQEAgLTQ1MywxMCArNDU1LDEwIEBAIHN0YXRpYyBpbnQNCj5keHZh Ml9oMjY0X3N0YXJ0X2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0eCwNCj4+IMKgwqDCoMKgIGFz c2VydChjdHhfcGljKTsNCj4+DQo+PiDCoMKgwqDCoCAvKiBGaWxsIHVwIERYVkFfUGljUGFyYW1z X0gyNjQgKi8NCj4+IC3CoMKgwqAgZmlsbF9waWN0dXJlX3BhcmFtZXRlcnMoYXZjdHgsIGN0eCwg aCwgJmN0eF9waWMtPnBwKTsNCj4+ICvCoMKgwqAgZmZfZHh2YTJfaDI2NF9maWxsX3BpY3R1cmVf cGFyYW1ldGVycyhhdmN0eCwgY3R4LCAmY3R4X3BpYy0+cHApOw0KPj4NCj4+IMKgwqDCoMKgIC8q IEZpbGwgdXAgRFhWQV9RbWF0cml4X0gyNjQgKi8NCj4+IC3CoMKgwqAgZmlsbF9zY2FsaW5nX2xp c3RzKGF2Y3R4LCBjdHgsIGgsICZjdHhfcGljLT5xbSk7DQo+PiArwqDCoMKgIGZmX2R4dmEyX2gy NjRfZmlsbF9zY2FsaW5nX2xpc3RzKGF2Y3R4LCBjdHgsICZjdHhfcGljLT5xbSk7DQo+Pg0KPj4g wqDCoMKgwqAgY3R4X3BpYy0+c2xpY2VfY291bnTCoMKgwqAgPSAwOw0KPj4gwqDCoMKgwqAgY3R4 X3BpYy0+Yml0c3RyZWFtX3NpemUgPSAwOw0KPj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvZHh2 YTJfaW50ZXJuYWwuaCBiL2xpYmF2Y29kZWMvZHh2YTJfaW50ZXJuYWwuaA0KPj4gaW5kZXggYjgy MmFmNTljZC4uYTlhMWZjMDkwZSAxMDA2NDQNCj4+IC0tLSBhL2xpYmF2Y29kZWMvZHh2YTJfaW50 ZXJuYWwuaA0KPj4gKysrIGIvbGliYXZjb2RlYy9keHZhMl9pbnRlcm5hbC5oDQo+PiBAQCAtMjYs MTggKzI2LDM0IEBADQo+PiDCoCNkZWZpbmUgQ09CSk1BQ1JPUw0KPj4NCj4+IMKgI2luY2x1ZGUg ImNvbmZpZy5oIg0KPj4gKyNpbmNsdWRlICJjb25maWdfY29tcG9uZW50cy5oIg0KPj4NCj4+IMKg LyogZGVmaW5lIHRoZSBwcm9wZXIgQ09NIGVudHJpZXMgYmVmb3JlIGZvcmNpbmcgZGVza3RvcCBB UElzICovDQo+PiDCoCNpbmNsdWRlIDxvYmpiYXNlLmg+DQo+Pg0KPj4gKyNkZWZpbmUgRkZfRFhW QTJfV09SS0FST1VORF9TQ0FMSU5HX0xJU1RfWklHWkFHIDEgLy8vPCBXb3JrDQo+YXJvdW5kIGZv cg0KPj4gRFhWQTIvRGlyZWN0M0QxMSBhbmQgb2xkIFVWRC9VVkQrIEFUSSB2aWRlbyBjYXJkcw0K Pj4gKyNkZWZpbmUgRkZfRFhWQTJfV09SS0FST1VORF9JTlRFTF9DTEVBUlZJREVPwqDCoMKgIDIg Ly8vPCBXb3JrDQo+YXJvdW5kIGZvcg0KPj4gRFhWQTIvRGlyZWN0M0QxMSBhbmQgb2xkIEludGVs IEdQVXMgd2l0aCBDbGVhclZpZGVvIGludGVyZmFjZQ0KPj4gKw0KPj4gwqAjaWYgQ09ORklHX0RY VkEyDQo+PiDCoCNpbmNsdWRlICJkeHZhMi5oIg0KPj4gwqAjaW5jbHVkZSAibGliYXZ1dGlsL2h3 Y29udGV4dF9keHZhMi5oIg0KPj4gKyNkZWZpbmUgRFhWQTJfVkFSKGN0eCwgdmFyKSBjdHgtPmR4 dmEyLnZhcg0KPj4gKyNlbHNlDQo+PiArI2RlZmluZSBEWFZBMl9WQVIoY3R4LCB2YXIpIDANCj4+ IMKgI2VuZGlmDQo+PiArDQo+PiDCoCNpZiBDT05GSUdfRDNEMTFWQQ0KPj4gwqAjaW5jbHVkZSAi ZDNkMTF2YS5oIg0KPj4gwqAjaW5jbHVkZSAibGliYXZ1dGlsL2h3Y29udGV4dF9kM2QxMXZhLmgi DQo+PiArI2RlZmluZSBEM0QxMVZBX1ZBUihjdHgsIHZhcikgY3R4LT5kM2QxMXZhLnZhcg0KPj4g KyNlbHNlDQo+PiArI2RlZmluZSBEM0QxMVZBX1ZBUihjdHgsIHZhcikgMA0KPj4gKyNlbmRpZg0K Pj4gKw0KPj4gKyNpZiBDT05GSUdfRDNEMTJWQQ0KPj4gKyNpbmNsdWRlICJkM2QxMnZhLmgiDQo+ PiDCoCNlbmRpZg0KPj4gKw0KPj4gwqAjaWYgSEFWRV9EWFZBX0gNCj4+IMKgLyogV2hlbiB0YXJn ZXRpbmcgV0lOQVBJX0ZBTUlMWV9QSE9ORV9BUFAgb3IgV0lOQVBJX0ZBTUlMWV9BUFAsDQo+ZHh2 YS5oDQo+PiDCoCAqIGRlZmluZXMgbm90aGluZy4gRm9yY2UgdGhlIHN0cnVjdCBkZWZpbml0aW9u cyB0byBiZSB2aXNpYmxlLiAqLw0KPj4gQEAgLTYyLDYgKzc4LDkgQEAgdHlwZWRlZiB1bmlvbiB7 DQo+PiDCoCNpZiBDT05GSUdfRFhWQTINCj4+IMKgwqDCoMKgIHN0cnVjdCBkeHZhX2NvbnRleHTC oMKgwqDCoMKgIGR4dmEyOw0KPj4gwqAjZW5kaWYNCj4+ICsjaWYgQ09ORklHX0QzRDEyVkENCj4+ ICvCoMKgwqAgc3RydWN0IEQzRDEyVkFEZWNvZGVDb250ZXh0IGQzZDEydmE7DQo+PiArI2VuZGlm DQo+PiDCoH0gQVZEWFZBQ29udGV4dDsNCj4+DQo+PiDCoHR5cGVkZWYgc3RydWN0IEZGRFhWQVNo YXJlZENvbnRleHQgew0KPj4gQEAgLTEwMSwzOSArMTIwLDE5IEBAIHR5cGVkZWYgc3RydWN0IEZG RFhWQVNoYXJlZENvbnRleHQgew0KPj4gwqAjZGVmaW5lIEQzRDExVkFfQ09OVEVYVChjdHgpICgm Y3R4LT5kM2QxMXZhKQ0KPj4gwqAjZGVmaW5lIERYVkEyX0NPTlRFWFQoY3R4KcKgwqAgKCZjdHgt PmR4dmEyKQ0KPj4NCj4+IC0jaWYgQ09ORklHX0QzRDExVkEgJiYgQ09ORklHX0RYVkEyDQo+PiAt I2RlZmluZSBEWFZBX0NPTlRFWFRfV09SS0FST1VORChhdmN0eCwNCj5jdHgpwqDCoMKgwqAgKGZm X2R4dmEyX2lzX2QzZDExKGF2Y3R4KSA/DQo+PiBjdHgtPmQzZDExdmEud29ya2Fyb3VuZCA6IGN0 eC0+ZHh2YTIud29ya2Fyb3VuZCkNCj4+IC0jZGVmaW5lIERYVkFfQ09OVEVYVF9DT1VOVChhdmN0 eCwgY3R4KcKgwqDCoMKgwqDCoMKgwqDCoCAoZmZfZHh2YTJfaXNfZDNkMTEoYXZjdHgpID8NCj4+ IGN0eC0+ZDNkMTF2YS5zdXJmYWNlX2NvdW50IDogY3R4LT5keHZhMi5zdXJmYWNlX2NvdW50KQ0K Pj4gLSNkZWZpbmUgRFhWQV9DT05URVhUX0RFQ09ERVIoYXZjdHgsDQo+Y3R4KcKgwqDCoMKgwqDC oMKgIChmZl9keHZhMl9pc19kM2QxMShhdmN0eCkgPw0KPj4gKHZvaWQgKiljdHgtPmQzZDExdmEu ZGVjb2RlciA6ICh2b2lkICopY3R4LT5keHZhMi5kZWNvZGVyKQ0KPj4gLSNkZWZpbmUgRFhWQV9D T05URVhUX1JFUE9SVF9JRChhdmN0eCwNCj5jdHgpwqDCoMKgwqDCoCAoKihmZl9keHZhMl9pc19k M2QxMShhdmN0eCkgPw0KPj4gJmN0eC0+ZDNkMTF2YS5yZXBvcnRfaWQgOiAmY3R4LT5keHZhMi5y ZXBvcnRfaWQpKQ0KPj4gLSNkZWZpbmUgRFhWQV9DT05URVhUX0NGRyhhdmN0eCwgY3R4KcKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgKGZmX2R4dmEyX2lzX2QzZDExKGF2Y3R4KSA/DQo+PiAodm9pZCAq KWN0eC0+ZDNkMTF2YS5jZmcgOiAodm9pZCAqKWN0eC0+ZHh2YTIuY2ZnKQ0KPj4gLSNkZWZpbmUg RFhWQV9DT05URVhUX0NGR19CSVRTVFJFQU0oYXZjdHgsDQo+Y3R4KcKgIChmZl9keHZhMl9pc19k M2QxMShhdmN0eCkgPw0KPj4gY3R4LT5kM2QxMXZhLmNmZy0+Q29uZmlnQml0c3RyZWFtUmF3IDog Y3R4LT5keHZhMi5jZmctDQo+PkNvbmZpZ0JpdHN0cmVhbVJhdykNCj4+IC0jZGVmaW5lIERYVkFf Q09OVEVYVF9DRkdfSU5UUkFSRVNJRChhdmN0eCwgY3R4KQ0KPihmZl9keHZhMl9pc19kM2QxMShh dmN0eCkgPw0KPj4gY3R4LT5kM2QxMXZhLmNmZy0+Q29uZmlnSW50cmFSZXNpZFVuc2lnbmVkIDog Y3R4LT5keHZhMi5jZmctDQo+PiA+Q29uZmlnSW50cmFSZXNpZFVuc2lnbmVkKQ0KPj4gLSNkZWZp bmUgRFhWQV9DT05URVhUX0NGR19SRVNJREFDQ0VMKGF2Y3R4LCBjdHgpDQo+KGZmX2R4dmEyX2lz X2QzZDExKGF2Y3R4KSA/DQo+PiBjdHgtPmQzZDExdmEuY2ZnLT5Db25maWdSZXNpZERpZmZBY2Nl bGVyYXRvciA6IGN0eC0+ZHh2YTIuY2ZnLQ0KPj4gPkNvbmZpZ1Jlc2lkRGlmZkFjY2VsZXJhdG9y KQ0KPj4gKyNkZWZpbmUgRFhWQTJfQ09OVEVYVF9WQVIoYXZjdHgsIGN0eCwgdmFyKSAoYXZjdHgt PnBpeF9mbXQgPT0NCj4+IEFWX1BJWF9GTVRfRDNEMTIgPyAwIDogKGZmX2R4dmEyX2lzX2QzZDEx KGF2Y3R4KSA/IEQzRDExVkFfVkFSKGN0eCwNCj52YXIpIDoNCj4+IERYVkEyX1ZBUihjdHgsIHZh cikpKQ0KPj4gKw0KPj4gKyNkZWZpbmUgRFhWQV9DT05URVhUX1JFUE9SVF9JRChhdmN0eCwgY3R4 KQ0KPj4gKCpmZl9keHZhMl9nZXRfcmVwb3J0X2lkKGF2Y3R4LCBjdHgpKQ0KPj4gKyNkZWZpbmUg RFhWQV9DT05URVhUX1dPUktBUk9VTkQoYXZjdHgsDQo+Y3R4KcKgwqDCoMKgIERYVkEyX0NPTlRF WFRfVkFSKGF2Y3R4LCBjdHgsDQo+PiB3b3JrYXJvdW5kKQ0KPj4gKyNkZWZpbmUgRFhWQV9DT05U RVhUX0NPVU5UKGF2Y3R4LA0KPmN0eCnCoMKgwqDCoMKgwqDCoMKgwqAgRFhWQTJfQ09OVEVYVF9W QVIoYXZjdHgsIGN0eCwNCj4+IHN1cmZhY2VfY291bnQpDQo+PiArI2RlZmluZSBEWFZBX0NPTlRF WFRfREVDT0RFUihhdmN0eCwgY3R4KcKgwqDCoMKgwqDCoMKgIChhdmN0eC0+cGl4X2ZtdCA9PQ0K Pj4gQVZfUElYX0ZNVF9EM0QxMiA/IDAgOiAoZmZfZHh2YTJfaXNfZDNkMTEoYXZjdHgpID8gKHZv aWQNCj4qKUQzRDExVkFfVkFSKGN0eCwNCj4+IGRlY29kZXIpIDogKHZvaWQgKilEWFZBMl9WQVIo Y3R4LCBkZWNvZGVyKSkpDQo+PiArI2RlZmluZSBEWFZBX0NPTlRFWFRfQ0ZHKGF2Y3R4LCBjdHgp wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoYXZjdHgtPnBpeF9mbXQgPT0NCj4+IEFWX1BJWF9GTVRf RDNEMTIgPyAwIDogKGZmX2R4dmEyX2lzX2QzZDExKGF2Y3R4KSA/ICh2b2lkDQo+KilEM0QxMVZB X1ZBUihjdHgsDQo+PiBjZmcpIDogKHZvaWQgKilEWFZBMl9WQVIoY3R4LCBjZmcpKSkNCj4+ICsj ZGVmaW5lIERYVkFfQ09OVEVYVF9DRkdfQklUU1RSRUFNKGF2Y3R4LA0KPmN0eCnCoCBEWFZBMl9D T05URVhUX1ZBUihhdmN0eCwgY3R4LA0KPj4gY2ZnLT5Db25maWdCaXRzdHJlYW1SYXcpDQo+PiAr I2RlZmluZSBEWFZBX0NPTlRFWFRfQ0ZHX0lOVFJBUkVTSUQoYXZjdHgsIGN0eCkNCj5EWFZBMl9D T05URVhUX1ZBUihhdmN0eCwgY3R4LA0KPj4gY2ZnLT5Db25maWdJbnRyYVJlc2lkVW5zaWduZWQp DQo+PiArI2RlZmluZSBEWFZBX0NPTlRFWFRfQ0ZHX1JFU0lEQUNDRUwoYXZjdHgsIGN0eCkNCj5E WFZBMl9DT05URVhUX1ZBUihhdmN0eCwgY3R4LA0KPj4gY2ZnLT5Db25maWdSZXNpZERpZmZBY2Nl bGVyYXRvcikNCj4+IMKgI2RlZmluZSBEWFZBX0NPTlRFWFRfVkFMSUQoYXZjdHgsDQo+Y3R4KcKg wqDCoMKgwqDCoMKgwqDCoCAoRFhWQV9DT05URVhUX0RFQ09ERVIoYXZjdHgsDQo+PiBjdHgpICYm IFwNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERYVkFfQ09O VEVYVF9DRkcoYXZjdHgsDQo+PiBjdHgpwqDCoMKgwqAgJiYgXA0KPj4gLcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoZmZfZHh2YTJfaXNfZDNkMTEoYXZjdHgpIHx8DQo+ PiBjdHgtPmR4dmEyLnN1cmZhY2VfY291bnQpKQ0KPj4gLSNlbGlmIENPTkZJR19EWFZBMg0KPj4g LSNkZWZpbmUgRFhWQV9DT05URVhUX1dPUktBUk9VTkQoYXZjdHgsIGN0eCnCoMKgwqDCoCAoY3R4 LQ0KPj5keHZhMi53b3JrYXJvdW5kKQ0KPj4gLSNkZWZpbmUgRFhWQV9DT05URVhUX0NPVU5UKGF2 Y3R4LCBjdHgpwqDCoMKgwqDCoMKgwqDCoMKgIChjdHgtPmR4dmEyLnN1cmZhY2VfY291bnQpDQo+ PiAtI2RlZmluZSBEWFZBX0NPTlRFWFRfREVDT0RFUihhdmN0eCwgY3R4KcKgwqDCoMKgwqDCoMKg IChjdHgtPmR4dmEyLmRlY29kZXIpDQo+PiAtI2RlZmluZSBEWFZBX0NPTlRFWFRfUkVQT1JUX0lE KGF2Y3R4LCBjdHgpwqDCoMKgwqDCoCAoKigmY3R4LQ0KPj5keHZhMi5yZXBvcnRfaWQpKQ0KPj4g LSNkZWZpbmUgRFhWQV9DT05URVhUX0NGRyhhdmN0eCwgY3R4KcKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgKGN0eC0+ZHh2YTIuY2ZnKQ0KPj4gLSNkZWZpbmUgRFhWQV9DT05URVhUX0NGR19CSVRTVFJF QU0oYXZjdHgsIGN0eCnCoCAoY3R4LT5keHZhMi5jZmctDQo+PiA+Q29uZmlnQml0c3RyZWFtUmF3 KQ0KPj4gLSNkZWZpbmUgRFhWQV9DT05URVhUX0NGR19JTlRSQVJFU0lEKGF2Y3R4LCBjdHgpIChj dHgtPmR4dmEyLmNmZy0NCj4+ID5Db25maWdJbnRyYVJlc2lkVW5zaWduZWQpDQo+PiAtI2RlZmlu ZSBEWFZBX0NPTlRFWFRfQ0ZHX1JFU0lEQUNDRUwoYXZjdHgsIGN0eCkgKGN0eC0+ZHh2YTIuY2Zn LQ0KPj4gPkNvbmZpZ1Jlc2lkRGlmZkFjY2VsZXJhdG9yKQ0KPj4gLSNkZWZpbmUgRFhWQV9DT05U RVhUX1ZBTElEKGF2Y3R4LCBjdHgpwqDCoMKgwqDCoMKgwqDCoMKgIChjdHgtPmR4dmEyLmRlY29k ZXIgJiYNCj5jdHgtDQo+PiA+ZHh2YTIuY2ZnICYmIGN0eC0+ZHh2YTIuc3VyZmFjZV9jb3VudCkN Cj4+IC0jZWxpZiBDT05GSUdfRDNEMTFWQQ0KPj4gLSNkZWZpbmUgRFhWQV9DT05URVhUX1dPUktB Uk9VTkQoYXZjdHgsIGN0eCnCoMKgwqDCoCAoY3R4LQ0KPj5kM2QxMXZhLndvcmthcm91bmQpDQo+ PiAtI2RlZmluZSBEWFZBX0NPTlRFWFRfQ09VTlQoYXZjdHgsIGN0eCnCoMKgwqDCoMKgwqDCoMKg wqAgKGN0eC0NCj4+ZDNkMTF2YS5zdXJmYWNlX2NvdW50KQ0KPj4gLSNkZWZpbmUgRFhWQV9DT05U RVhUX0RFQ09ERVIoYXZjdHgsIGN0eCnCoMKgwqDCoMKgwqDCoCAoY3R4LT5kM2QxMXZhLmRlY29k ZXIpDQo+PiAtI2RlZmluZSBEWFZBX0NPTlRFWFRfUkVQT1JUX0lEKGF2Y3R4LCBjdHgpwqDCoMKg wqDCoCAoKigmY3R4LQ0KPj5kM2QxMXZhLnJlcG9ydF9pZCkpDQo+PiAtI2RlZmluZSBEWFZBX0NP TlRFWFRfQ0ZHKGF2Y3R4LCBjdHgpwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAoY3R4LT5kM2QxMXZh LmNmZykNCj4+IC0jZGVmaW5lIERYVkFfQ09OVEVYVF9DRkdfQklUU1RSRUFNKGF2Y3R4LCBjdHgp wqAgKGN0eC0+ZDNkMTF2YS5jZmctDQo+PiA+Q29uZmlnQml0c3RyZWFtUmF3KQ0KPj4gLSNkZWZp bmUgRFhWQV9DT05URVhUX0NGR19JTlRSQVJFU0lEKGF2Y3R4LCBjdHgpIChjdHgtPmQzZDExdmEu Y2ZnLQ0KPj4gPkNvbmZpZ0ludHJhUmVzaWRVbnNpZ25lZCkNCj4+IC0jZGVmaW5lIERYVkFfQ09O VEVYVF9DRkdfUkVTSURBQ0NFTChhdmN0eCwgY3R4KSAoY3R4LT5kM2QxMXZhLmNmZy0NCj4+ID5D b25maWdSZXNpZERpZmZBY2NlbGVyYXRvcikNCj4+IC0jZGVmaW5lIERYVkFfQ09OVEVYVF9WQUxJ RChhdmN0eCwgY3R4KcKgwqDCoMKgwqDCoMKgwqDCoCAoY3R4LT5kM2QxMXZhLmRlY29kZXIgJiYN Cj5jdHgtDQo+PiA+ZDNkMTF2YS5jZmcpDQo+PiAtI2VuZGlmDQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChmZl9keHZhMl9pc19kM2QxMShhdmN0eCkgfHwNCj4+ IERYVkEyX1ZBUihjdHgsIHN1cmZhY2VfY291bnQpKSkNCj4+DQo+PiDCoHVuc2lnbmVkIGZmX2R4 dmEyX2dldF9zdXJmYWNlX2luZGV4KGNvbnN0IEFWQ29kZWNDb250ZXh0ICphdmN0eCwNCj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBjb25zdCBBVkRYVkFDb250ZXh0ICosDQo+PiBAQCAtMTYxLDQgKzE2MCwx MCBAQCBpbnQNCj5mZl9keHZhMl9jb21tb25fZnJhbWVfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICph dmN0eCwNCj4+DQo+PiDCoGludCBmZl9keHZhMl9pc19kM2QxMShjb25zdCBBVkNvZGVjQ29udGV4 dCAqYXZjdHgpOw0KPj4NCj4+ICt1bnNpZ25lZCAqZmZfZHh2YTJfZ2V0X3JlcG9ydF9pZChjb25z dCBBVkNvZGVjQ29udGV4dCAqYXZjdHgsDQo+QVZEWFZBQ29udGV4dA0KPj4gKmN0eCk7DQo+PiAr DQo+PiArdm9pZCBmZl9keHZhMl9oMjY0X2ZpbGxfcGljdHVyZV9wYXJhbWV0ZXJzKGNvbnN0IEFW Q29kZWNDb250ZXh0ICphdmN0eCwNCj4+IEFWRFhWQUNvbnRleHQgKmN0eCwgRFhWQV9QaWNQYXJh bXNfSDI2NCAqcHApOw0KPj4gKw0KPj4gK3ZvaWQgZmZfZHh2YTJfaDI2NF9maWxsX3NjYWxpbmdf bGlzdHMoY29uc3QgQVZDb2RlY0NvbnRleHQgKmF2Y3R4LA0KPj4gQVZEWFZBQ29udGV4dCAqY3R4 LCBEWFZBX1FtYXRyaXhfSDI2NCAqcW0pOw0KPj4gKw0KPj4gwqAjZW5kaWYgLyogQVZDT0RFQ19E WFZBMl9JTlRFUk5BTF9IICovDQo+PiBkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9oMjY0X3NsaWNl LmMgYi9saWJhdmNvZGVjL2gyNjRfc2xpY2UuYw0KPj4gaW5kZXggNDFiZjMwZWVmYy4uZGY3MGFk OGEyZiAxMDA2NDQNCj4+IC0tLSBhL2xpYmF2Y29kZWMvaDI2NF9zbGljZS5jDQo+PiArKysgYi9s aWJhdmNvZGVjL2gyNjRfc2xpY2UuYw0KPj4gQEAgLTc3OCw2ICs3NzgsNyBAQCBzdGF0aWMgZW51 bSBBVlBpeGVsRm9ybWF0DQo+Z2V0X3BpeGVsX2Zvcm1hdChIMjY0Q29udGV4dCAqaCwNCj4+IGlu dCBmb3JjZV9jYWxsYmFjaykNCj4+IMKgew0KPj4gwqAjZGVmaW5lIEhXQUNDRUxfTUFYIChDT05G SUdfSDI2NF9EWFZBMl9IV0FDQ0VMICsgXA0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIChDT05GSUdfSDI2NF9EM0QxMVZBX0hXQUNDRUwgKiAyKSArIFwNCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIENPTkZJR19IMjY0X0Qz RDEyVkFfSFdBQ0NFTCArIFwNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBDT05GSUdfSDI2NF9OVkRFQ19IV0FDQ0VMICsgXA0KPj4gwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIENPTkZJR19IMjY0X1ZBQVBJX0hXQUNDRUwgKyBc DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQ09ORklHX0gy NjRfVklERU9UT09MQk9YX0hXQUNDRUwgKyBcDQo+PiBAQCAtODgzLDYgKzg4NCw5IEBAIHN0YXRp YyBlbnVtIEFWUGl4ZWxGb3JtYXQNCj5nZXRfcGl4ZWxfZm9ybWF0KEgyNjRDb250ZXh0ICpoLA0K Pj4gaW50IGZvcmNlX2NhbGxiYWNrKQ0KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpmbXQr KyA9IEFWX1BJWF9GTVRfRDNEMTFWQV9WTEQ7DQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KmZtdCsrID0gQVZfUElYX0ZNVF9EM0QxMTsNCj4+IMKgI2VuZGlmDQo+PiArI2lmIENPTkZJR19I MjY0X0QzRDEyVkFfSFdBQ0NFTA0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmZtdCsrID0g QVZfUElYX0ZNVF9EM0QxMjsNCj4+ICsjZW5kaWYNCj4+IMKgI2lmIENPTkZJR19IMjY0X1ZBQVBJ X0hXQUNDRUwNCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqZm10KysgPSBBVl9QSVhfRk1U X1ZBQVBJOw0KPj4gwqAjZW5kaWYNCj4+IGRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2gyNjRkZWMu YyBiL2xpYmF2Y29kZWMvaDI2NGRlYy5jDQo+PiBpbmRleCAxOWY4ZGJhMTMxLi44NTNkMzI2MmY3 IDEwMDY0NA0KPj4gLS0tIGEvbGliYXZjb2RlYy9oMjY0ZGVjLmMNCj4+ICsrKyBiL2xpYmF2Y29k ZWMvaDI2NGRlYy5jDQo+PiBAQCAtMTA4OSw2ICsxMDg5LDkgQEAgY29uc3QgRkZDb2RlYyBmZl9o MjY0X2RlY29kZXIgPSB7DQo+PiDCoCNpZiBDT05GSUdfSDI2NF9EM0QxMVZBMl9IV0FDQ0VMDQo+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBIV0FDQ0VMX0QzRDExVkEyKGgyNjQpLA0KPj4gwqAjZW5kaWYNCj4+ICsjaWYgQ09O RklHX0gyNjRfRDNEMTJWQV9IV0FDQ0VMDQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEhXQUNDRUxfRDNEMTJWQShoMjY0KSwN Cj4+ICsjZW5kaWYNCj4+IMKgI2lmIENPTkZJR19IMjY0X05WREVDX0hXQUNDRUwNCj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEhXQUNDRUxfTlZERUMoaDI2NCksDQo+PiDCoCNlbmRpZg0KPj4gZGlmZiAtLWdpdCBhL2xpYmF2 Y29kZWMvaHdhY2NlbHMuaCBiL2xpYmF2Y29kZWMvaHdhY2NlbHMuaA0KPj4gaW5kZXggNDhkZmMx N2Y3Mi4uYmU1NDYwNGI4MSAxMDA2NDQNCj4+IC0tLSBhL2xpYmF2Y29kZWMvaHdhY2NlbHMuaA0K Pj4gKysrIGIvbGliYXZjb2RlYy9od2FjY2Vscy5oDQo+PiBAQCAtMzIsNiArMzIsNyBAQCBleHRl cm4gY29uc3QgQVZIV0FjY2VsIGZmX2gyNjNfdmFhcGlfaHdhY2NlbDsNCj4+IMKgZXh0ZXJuIGNv bnN0IEFWSFdBY2NlbCBmZl9oMjYzX3ZpZGVvdG9vbGJveF9od2FjY2VsOw0KPj4gwqBleHRlcm4g Y29uc3QgQVZIV0FjY2VsIGZmX2gyNjRfZDNkMTF2YV9od2FjY2VsOw0KPj4gwqBleHRlcm4gY29u c3QgQVZIV0FjY2VsIGZmX2gyNjRfZDNkMTF2YTJfaHdhY2NlbDsNCj4+ICtleHRlcm4gY29uc3Qg QVZIV0FjY2VsIGZmX2gyNjRfZDNkMTJ2YV9od2FjY2VsOw0KPj4gwqBleHRlcm4gY29uc3QgQVZI V0FjY2VsIGZmX2gyNjRfZHh2YTJfaHdhY2NlbDsNCj4+IMKgZXh0ZXJuIGNvbnN0IEFWSFdBY2Nl bCBmZl9oMjY0X252ZGVjX2h3YWNjZWw7DQo+PiDCoGV4dGVybiBjb25zdCBBVkhXQWNjZWwgZmZf aDI2NF92YWFwaV9od2FjY2VsOw0KPj4gZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvaHdjb25maWcu aCBiL2xpYmF2Y29kZWMvaHdjb25maWcuaA0KPj4gaW5kZXggZThjNjE4NjE1MS4uZTIwMTE4YzA5 NiAxMDA2NDQNCj4+IC0tLSBhL2xpYmF2Y29kZWMvaHdjb25maWcuaA0KPj4gKysrIGIvbGliYXZj b2RlYy9od2NvbmZpZy5oDQo+PiBAQCAtODIsNiArODIsOCBAQCB2b2lkIGZmX2h3YWNjZWxfdW5p bml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCk7DQo+PiDCoMKgwqDCoCBIV19DT05GSUdfSFdBQ0NF TCgxLCAxLCAxLCBWVUxLQU4swqDCoMKgwqDCoMKgIFZVTEtBTizCoMKgwqDCoMKgwqAgZmZfICMj IGNvZGVjICMjDQo+PiBfdnVsa2FuX2h3YWNjZWwpDQo+PiDCoCNkZWZpbmUgSFdBQ0NFTF9EM0Qx MVZBKGNvZGVjKSBcDQo+PiDCoMKgwqDCoCBIV19DT05GSUdfSFdBQ0NFTCgwLCAwLCAxLCBEM0Qx MVZBX1ZMRCzCoCBOT05FLMKgwqDCoMKgwqDCoMKgwqAgZmZfICMjIGNvZGVjDQo+IyMNCj4+IF9k M2QxMXZhX2h3YWNjZWwpDQo+PiArI2RlZmluZSBIV0FDQ0VMX0QzRDEyVkEoY29kZWMpIFwNCj4+ ICvCoMKgwqAgSFdfQ09ORklHX0hXQUNDRUwoMSwgMSwgMCwgRDNEMTIswqDCoMKgwqDCoMKgwqAg RDNEMTJWQSzCoMKgwqDCoMKgIGZmXyAjIyBjb2RlYyAjIw0KPj4gX2QzZDEydmFfaHdhY2NlbCkN Cj4+DQo+PiDCoCNkZWZpbmUgSFdfQ09ORklHX0VOQ09ERVIoZGV2aWNlLCBmcmFtZXMsIGFkX2hv YywgZm9ybWF0LA0KPmRldmljZV90eXBlXykgXA0KPj4gwqDCoMKgwqAgJihjb25zdCBBVkNvZGVj SFdDb25maWdJbnRlcm5hbCkgeyBcDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZm bXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVs CgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVs LXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K